aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ieee1394/csr1212.c
diff options
context:
space:
mode:
authorStefan Richter <stefanr@s5r6.in-berlin.de>2007-03-11 17:49:05 -0400
committerStefan Richter <stefanr@s5r6.in-berlin.de>2007-04-29 18:00:28 -0400
commit7fb9addba8ebd67306099e7fa629ff76c1be2105 (patch)
tree49b352701fed16e3b6e77d0b523c6e7ee0f89a98 /drivers/ieee1394/csr1212.c
parent6c88e475660edcd5571a5aab39ce8062183af951 (diff)
ieee1394: drop csr1212's support for external compilation
csr1212 was written to be compiled either as part of the ieee1394 kernel driver or of an anticipated IEEE 1212 userspace library. We now drop support for the latter. The costs in terms of code footprint and depth of abstraction are not countered by any actual benefit. Also remove some obsolete #includes. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers/ieee1394/csr1212.c')
-rw-r--r--drivers/ieee1394/csr1212.c159
1 files changed, 74 insertions, 85 deletions
diff --git a/drivers/ieee1394/csr1212.c b/drivers/ieee1394/csr1212.c
index ff5a01ecfcaa..f5867236255b 100644
--- a/drivers/ieee1394/csr1212.c
+++ b/drivers/ieee1394/csr1212.c
@@ -33,9 +33,9 @@
33 * parameter expect size to be in bytes. 33 * parameter expect size to be in bytes.
34 */ 34 */
35 35
36#ifndef __KERNEL__ 36#include <linux/errno.h>
37#include <string.h> 37#include <linux/string.h>
38#endif 38#include <asm/byteorder.h>
39 39
40#include "csr1212.h" 40#include "csr1212.h"
41 41
@@ -100,7 +100,7 @@ static u_int16_t csr1212_crc16(const u_int32_t *buffer, size_t length)
100 u_int16_t sum, crc = 0; 100 u_int16_t sum, crc = 0;
101 101
102 for (; length; length--) { 102 for (; length; length--) {
103 data = CSR1212_BE32_TO_CPU(*buffer); 103 data = be32_to_cpu(*buffer);
104 buffer++; 104 buffer++;
105 for (shift = 28; shift >= 0; shift -= 4 ) { 105 for (shift = 28; shift >= 0; shift -= 4 ) {
106 sum = ((crc >> 12) ^ (data >> shift)) & 0xf; 106 sum = ((crc >> 12) ^ (data >> shift)) & 0xf;
@@ -109,7 +109,7 @@ static u_int16_t csr1212_crc16(const u_int32_t *buffer, size_t length)
109 crc &= 0xffff; 109 crc &= 0xffff;
110 } 110 }
111 111
112 return CSR1212_CPU_TO_BE16(crc); 112 return cpu_to_be16(crc);
113} 113}
114 114
115#if 0 115#if 0
@@ -123,7 +123,7 @@ static u_int16_t csr1212_msft_crc16(const u_int32_t *buffer, size_t length)
123 u_int16_t sum, crc = 0; 123 u_int16_t sum, crc = 0;
124 124
125 for (; length; length--) { 125 for (; length; length--) {
126 data = CSR1212_LE32_TO_CPU(*buffer); 126 data = le32_to_cpu(*buffer);
127 buffer++; 127 buffer++;
128 for (shift = 28; shift >= 0; shift -= 4 ) { 128 for (shift = 28; shift >= 0; shift -= 4 ) {
129 sum = ((crc >> 12) ^ (data >> shift)) & 0xf; 129 sum = ((crc >> 12) ^ (data >> shift)) & 0xf;
@@ -132,7 +132,7 @@ static u_int16_t csr1212_msft_crc16(const u_int32_t *buffer, size_t length)
132 crc &= 0xffff; 132 crc &= 0xffff;
133 } 133 }
134 134
135 return CSR1212_CPU_TO_BE16(crc); 135 return cpu_to_be16(crc);
136} 136}
137#endif 137#endif
138 138
@@ -206,15 +206,8 @@ void csr1212_init_local_csr(struct csr1212_csr *csr,
206{ 206{
207 static const int mr_map[] = { 4, 64, 1024, 0 }; 207 static const int mr_map[] = { 4, 64, 1024, 0 };
208 208
209#ifdef __KERNEL__
210 BUG_ON(max_rom & ~0x3); 209 BUG_ON(max_rom & ~0x3);
211 csr->max_rom = mr_map[max_rom]; 210 csr->max_rom = mr_map[max_rom];
212#else
213 if (max_rom & ~0x3) /* caller supplied invalid argument */
214 csr->max_rom = 0;
215 else
216 csr->max_rom = mr_map[max_rom];
217#endif
218 memcpy(csr->bus_info_data, bus_info_data, csr->bus_info_len); 211 memcpy(csr->bus_info_data, bus_info_data, csr->bus_info_len);
219} 212}
220 213
@@ -316,7 +309,7 @@ int csr1212_associate_keyval(struct csr1212_keyval *kv,
316 struct csr1212_keyval *associate) 309 struct csr1212_keyval *associate)
317{ 310{
318 if (!kv || !associate) 311 if (!kv || !associate)
319 return CSR1212_EINVAL; 312 return -EINVAL;
320 313
321 if (kv->key.id == CSR1212_KV_ID_DESCRIPTOR || 314 if (kv->key.id == CSR1212_KV_ID_DESCRIPTOR ||
322 (associate->key.id != CSR1212_KV_ID_DESCRIPTOR && 315 (associate->key.id != CSR1212_KV_ID_DESCRIPTOR &&
@@ -324,23 +317,23 @@ int csr1212_associate_keyval(struct csr1212_keyval *kv,
324 associate->key.id != CSR1212_KV_ID_EXTENDED_KEY && 317 associate->key.id != CSR1212_KV_ID_EXTENDED_KEY &&
325 associate->key.id != CSR1212_KV_ID_EXTENDED_DATA && 318 associate->key.id != CSR1212_KV_ID_EXTENDED_DATA &&
326 associate->key.id < 0x30)) 319 associate->key.id < 0x30))
327 return CSR1212_EINVAL; 320 return -EINVAL;
328 321
329 if (kv->key.id == CSR1212_KV_ID_EXTENDED_KEY_SPECIFIER_ID && 322 if (kv->key.id == CSR1212_KV_ID_EXTENDED_KEY_SPECIFIER_ID &&
330 associate->key.id != CSR1212_KV_ID_EXTENDED_KEY) 323 associate->key.id != CSR1212_KV_ID_EXTENDED_KEY)
331 return CSR1212_EINVAL; 324 return -EINVAL;
332 325
333 if (kv->key.id == CSR1212_KV_ID_EXTENDED_KEY && 326 if (kv->key.id == CSR1212_KV_ID_EXTENDED_KEY &&
334 associate->key.id != CSR1212_KV_ID_EXTENDED_DATA) 327 associate->key.id != CSR1212_KV_ID_EXTENDED_DATA)
335 return CSR1212_EINVAL; 328 return -EINVAL;
336 329
337 if (associate->key.id == CSR1212_KV_ID_EXTENDED_KEY && 330 if (associate->key.id == CSR1212_KV_ID_EXTENDED_KEY &&
338 kv->key.id != CSR1212_KV_ID_EXTENDED_KEY_SPECIFIER_ID) 331 kv->key.id != CSR1212_KV_ID_EXTENDED_KEY_SPECIFIER_ID)
339 return CSR1212_EINVAL; 332 return -EINVAL;
340 333
341 if (associate->key.id == CSR1212_KV_ID_EXTENDED_DATA && 334 if (associate->key.id == CSR1212_KV_ID_EXTENDED_DATA &&
342 kv->key.id != CSR1212_KV_ID_EXTENDED_KEY) 335 kv->key.id != CSR1212_KV_ID_EXTENDED_KEY)
343 return CSR1212_EINVAL; 336 return -EINVAL;
344 337
345 if (kv->associate) 338 if (kv->associate)
346 csr1212_release_keyval(kv->associate); 339 csr1212_release_keyval(kv->associate);
@@ -357,11 +350,11 @@ int csr1212_attach_keyval_to_directory(struct csr1212_keyval *dir,
357 struct csr1212_dentry *dentry; 350 struct csr1212_dentry *dentry;
358 351
359 if (!kv || !dir || dir->key.type != CSR1212_KV_TYPE_DIRECTORY) 352 if (!kv || !dir || dir->key.type != CSR1212_KV_TYPE_DIRECTORY)
360 return CSR1212_EINVAL; 353 return -EINVAL;
361 354
362 dentry = CSR1212_MALLOC(sizeof(*dentry)); 355 dentry = CSR1212_MALLOC(sizeof(*dentry));
363 if (!dentry) 356 if (!dentry)
364 return CSR1212_ENOMEM; 357 return -ENOMEM;
365 358
366 dentry->kv = kv; 359 dentry->kv = kv;
367 360
@@ -385,13 +378,13 @@ int csr1212_attach_keyval_to_directory(struct csr1212_keyval *dir,
385 378
386#define CSR1212_DESCRIPTOR_LEAF_SET_TYPE(kv, type) \ 379#define CSR1212_DESCRIPTOR_LEAF_SET_TYPE(kv, type) \
387 ((kv)->value.leaf.data[0] = \ 380 ((kv)->value.leaf.data[0] = \
388 CSR1212_CPU_TO_BE32(CSR1212_DESCRIPTOR_LEAF_SPECIFIER_ID(kv) | \ 381 cpu_to_be32(CSR1212_DESCRIPTOR_LEAF_SPECIFIER_ID(kv) | \
389 ((type) << CSR1212_DESCRIPTOR_LEAF_TYPE_SHIFT))) 382 ((type) << CSR1212_DESCRIPTOR_LEAF_TYPE_SHIFT)))
390#define CSR1212_DESCRIPTOR_LEAF_SET_SPECIFIER_ID(kv, spec_id) \ 383#define CSR1212_DESCRIPTOR_LEAF_SET_SPECIFIER_ID(kv, spec_id) \
391 ((kv)->value.leaf.data[0] = \ 384 ((kv)->value.leaf.data[0] = \
392 CSR1212_CPU_TO_BE32((CSR1212_DESCRIPTOR_LEAF_TYPE(kv) << \ 385 cpu_to_be32((CSR1212_DESCRIPTOR_LEAF_TYPE(kv) << \
393 CSR1212_DESCRIPTOR_LEAF_TYPE_SHIFT) | \ 386 CSR1212_DESCRIPTOR_LEAF_TYPE_SHIFT) | \
394 ((spec_id) & CSR1212_DESCRIPTOR_LEAF_SPECIFIER_ID_MASK))) 387 ((spec_id) & CSR1212_DESCRIPTOR_LEAF_SPECIFIER_ID_MASK)))
395 388
396static struct csr1212_keyval * 389static struct csr1212_keyval *
397csr1212_new_descriptor_leaf(u_int8_t dtype, u_int32_t specifier_id, 390csr1212_new_descriptor_leaf(u_int8_t dtype, u_int32_t specifier_id,
@@ -417,27 +410,26 @@ csr1212_new_descriptor_leaf(u_int8_t dtype, u_int32_t specifier_id,
417#define CSR1212_TEXTUAL_DESCRIPTOR_LEAF_SET_WIDTH(kv, width) \ 410#define CSR1212_TEXTUAL_DESCRIPTOR_LEAF_SET_WIDTH(kv, width) \
418 ((kv)->value.leaf.data[1] = \ 411 ((kv)->value.leaf.data[1] = \
419 ((kv)->value.leaf.data[1] & \ 412 ((kv)->value.leaf.data[1] & \
420 CSR1212_CPU_TO_BE32(~(CSR1212_TEXTUAL_DESCRIPTOR_LEAF_WIDTH_MASK << \ 413 cpu_to_be32(~(CSR1212_TEXTUAL_DESCRIPTOR_LEAF_WIDTH_MASK << \
421 CSR1212_TEXTUAL_DESCRIPTOR_LEAF_WIDTH_SHIFT))) | \ 414 CSR1212_TEXTUAL_DESCRIPTOR_LEAF_WIDTH_SHIFT))) | \
422 CSR1212_CPU_TO_BE32(((width) & \ 415 cpu_to_be32(((width) & CSR1212_TEXTUAL_DESCRIPTOR_LEAF_WIDTH_MASK) << \
423 CSR1212_TEXTUAL_DESCRIPTOR_LEAF_WIDTH_MASK) << \ 416 CSR1212_TEXTUAL_DESCRIPTOR_LEAF_WIDTH_SHIFT))
424 CSR1212_TEXTUAL_DESCRIPTOR_LEAF_WIDTH_SHIFT))
425 417
426#define CSR1212_TEXTUAL_DESCRIPTOR_LEAF_SET_CHAR_SET(kv, char_set) \ 418#define CSR1212_TEXTUAL_DESCRIPTOR_LEAF_SET_CHAR_SET(kv, char_set) \
427 ((kv)->value.leaf.data[1] = \ 419 ((kv)->value.leaf.data[1] = \
428 ((kv)->value.leaf.data[1] & \ 420 ((kv)->value.leaf.data[1] & \
429 CSR1212_CPU_TO_BE32(~(CSR1212_TEXTUAL_DESCRIPTOR_LEAF_CHAR_SET_MASK << \ 421 cpu_to_be32(~(CSR1212_TEXTUAL_DESCRIPTOR_LEAF_CHAR_SET_MASK << \
430 CSR1212_TEXTUAL_DESCRIPTOR_LEAF_CHAR_SET_SHIFT))) | \ 422 CSR1212_TEXTUAL_DESCRIPTOR_LEAF_CHAR_SET_SHIFT))) | \
431 CSR1212_CPU_TO_BE32(((char_set) & \ 423 cpu_to_be32(((char_set) & \
432 CSR1212_TEXTUAL_DESCRIPTOR_LEAF_CHAR_SET_MASK) << \ 424 CSR1212_TEXTUAL_DESCRIPTOR_LEAF_CHAR_SET_MASK) << \
433 CSR1212_TEXTUAL_DESCRIPTOR_LEAF_CHAR_SET_SHIFT)) 425 CSR1212_TEXTUAL_DESCRIPTOR_LEAF_CHAR_SET_SHIFT))
434 426
435#define CSR1212_TEXTUAL_DESCRIPTOR_LEAF_SET_LANGUAGE(kv, language) \ 427#define CSR1212_TEXTUAL_DESCRIPTOR_LEAF_SET_LANGUAGE(kv, language) \
436 ((kv)->value.leaf.data[1] = \ 428 ((kv)->value.leaf.data[1] = \
437 ((kv)->value.leaf.data[1] & \ 429 ((kv)->value.leaf.data[1] & \
438 CSR1212_CPU_TO_BE32(~(CSR1212_TEXTUAL_DESCRIPTOR_LEAF_LANGUAGE_MASK))) | \ 430 cpu_to_be32(~(CSR1212_TEXTUAL_DESCRIPTOR_LEAF_LANGUAGE_MASK))) | \
439 CSR1212_CPU_TO_BE32(((language) & \ 431 cpu_to_be32(((language) & \
440 CSR1212_TEXTUAL_DESCRIPTOR_LEAF_LANGUAGE_MASK))) 432 CSR1212_TEXTUAL_DESCRIPTOR_LEAF_LANGUAGE_MASK)))
441 433
442static struct csr1212_keyval * 434static struct csr1212_keyval *
443csr1212_new_textual_descriptor_leaf(u_int8_t cwidth, u_int16_t cset, 435csr1212_new_textual_descriptor_leaf(u_int8_t cwidth, u_int16_t cset,
@@ -622,39 +614,39 @@ static int csr1212_append_new_cache(struct csr1212_csr *csr, size_t romsize)
622 614
623 if (!csr || !csr->ops || !csr->ops->allocate_addr_range || 615 if (!csr || !csr->ops || !csr->ops->allocate_addr_range ||
624 !csr->ops->release_addr || csr->max_rom < 1) 616 !csr->ops->release_addr || csr->max_rom < 1)
625 return CSR1212_EINVAL; 617 return -EINVAL;
626 618
627 /* ROM size must be a multiple of csr->max_rom */ 619 /* ROM size must be a multiple of csr->max_rom */
628 romsize = (romsize + (csr->max_rom - 1)) & ~(csr->max_rom - 1); 620 romsize = (romsize + (csr->max_rom - 1)) & ~(csr->max_rom - 1);
629 621
630 csr_addr = csr->ops->allocate_addr_range(romsize, csr->max_rom, csr->private); 622 csr_addr = csr->ops->allocate_addr_range(romsize, csr->max_rom, csr->private);
631 if (csr_addr == CSR1212_INVALID_ADDR_SPACE) { 623 if (csr_addr == CSR1212_INVALID_ADDR_SPACE) {
632 return CSR1212_ENOMEM; 624 return -ENOMEM;
633 } 625 }
634 if (csr_addr < CSR1212_REGISTER_SPACE_BASE) { 626 if (csr_addr < CSR1212_REGISTER_SPACE_BASE) {
635 /* Invalid address returned from allocate_addr_range(). */ 627 /* Invalid address returned from allocate_addr_range(). */
636 csr->ops->release_addr(csr_addr, csr->private); 628 csr->ops->release_addr(csr_addr, csr->private);
637 return CSR1212_ENOMEM; 629 return -ENOMEM;
638 } 630 }
639 631
640 cache = csr1212_rom_cache_malloc(csr_addr - CSR1212_REGISTER_SPACE_BASE, romsize); 632 cache = csr1212_rom_cache_malloc(csr_addr - CSR1212_REGISTER_SPACE_BASE, romsize);
641 if (!cache) { 633 if (!cache) {
642 csr->ops->release_addr(csr_addr, csr->private); 634 csr->ops->release_addr(csr_addr, csr->private);
643 return CSR1212_ENOMEM; 635 return -ENOMEM;
644 } 636 }
645 637
646 cache->ext_rom = csr1212_new_keyval(CSR1212_KV_TYPE_LEAF, CSR1212_KV_ID_EXTENDED_ROM); 638 cache->ext_rom = csr1212_new_keyval(CSR1212_KV_TYPE_LEAF, CSR1212_KV_ID_EXTENDED_ROM);
647 if (!cache->ext_rom) { 639 if (!cache->ext_rom) {
648 csr->ops->release_addr(csr_addr, csr->private); 640 csr->ops->release_addr(csr_addr, csr->private);
649 CSR1212_FREE(cache); 641 CSR1212_FREE(cache);
650 return CSR1212_ENOMEM; 642 return -ENOMEM;
651 } 643 }
652 644
653 if (csr1212_attach_keyval_to_directory(csr->root_kv, cache->ext_rom) != CSR1212_SUCCESS) { 645 if (csr1212_attach_keyval_to_directory(csr->root_kv, cache->ext_rom) != CSR1212_SUCCESS) {
654 csr1212_release_keyval(cache->ext_rom); 646 csr1212_release_keyval(cache->ext_rom);
655 csr->ops->release_addr(csr_addr, csr->private); 647 csr->ops->release_addr(csr_addr, csr->private);
656 CSR1212_FREE(cache); 648 CSR1212_FREE(cache);
657 return CSR1212_ENOMEM; 649 return -ENOMEM;
658 } 650 }
659 cache->ext_rom->offset = csr_addr - CSR1212_REGISTER_SPACE_BASE; 651 cache->ext_rom->offset = csr_addr - CSR1212_REGISTER_SPACE_BASE;
660 cache->ext_rom->value.leaf.len = -1; 652 cache->ext_rom->value.leaf.len = -1;
@@ -890,7 +882,7 @@ csr1212_generate_tree_subdir(struct csr1212_keyval *dir, u_int32_t *data_buffer)
890 value |= (a->key.id & CSR1212_KV_KEY_ID_MASK) << CSR1212_KV_KEY_SHIFT; 882 value |= (a->key.id & CSR1212_KV_KEY_ID_MASK) << CSR1212_KV_KEY_SHIFT;
891 value |= (a->key.type & CSR1212_KV_KEY_TYPE_MASK) << 883 value |= (a->key.type & CSR1212_KV_KEY_TYPE_MASK) <<
892 (CSR1212_KV_KEY_SHIFT + CSR1212_KV_KEY_TYPE_SHIFT); 884 (CSR1212_KV_KEY_SHIFT + CSR1212_KV_KEY_TYPE_SHIFT);
893 data_buffer[index] = CSR1212_CPU_TO_BE32(value); 885 data_buffer[index] = cpu_to_be32(value);
894 index++; 886 index++;
895 } 887 }
896 } 888 }
@@ -926,14 +918,14 @@ static void csr1212_fill_cache(struct csr1212_csr_rom_cache *cache)
926 memcpy(kvi->data, kv->value.leaf.data, 918 memcpy(kvi->data, kv->value.leaf.data,
927 quads_to_bytes(kv->value.leaf.len)); 919 quads_to_bytes(kv->value.leaf.len));
928 920
929 kvi->length = CSR1212_CPU_TO_BE16(kv->value.leaf.len); 921 kvi->length = cpu_to_be16(kv->value.leaf.len);
930 kvi->crc = csr1212_crc16(kvi->data, kv->value.leaf.len); 922 kvi->crc = csr1212_crc16(kvi->data, kv->value.leaf.len);
931 break; 923 break;
932 924
933 case CSR1212_KV_TYPE_DIRECTORY: 925 case CSR1212_KV_TYPE_DIRECTORY:
934 csr1212_generate_tree_subdir(kv, kvi->data); 926 csr1212_generate_tree_subdir(kv, kvi->data);
935 927
936 kvi->length = CSR1212_CPU_TO_BE16(kv->value.directory.len); 928 kvi->length = cpu_to_be16(kv->value.directory.len);
937 kvi->crc = csr1212_crc16(kvi->data, kv->value.directory.len); 929 kvi->crc = csr1212_crc16(kvi->data, kv->value.directory.len);
938 break; 930 break;
939 } 931 }
@@ -960,7 +952,7 @@ int csr1212_generate_csr_image(struct csr1212_csr *csr)
960 int init_offset; 952 int init_offset;
961 953
962 if (!csr) 954 if (!csr)
963 return CSR1212_EINVAL; 955 return -EINVAL;
964 956
965 cache = csr->cache_head; 957 cache = csr->cache_head;
966 958
@@ -1021,7 +1013,7 @@ int csr1212_generate_csr_image(struct csr1212_csr *csr)
1021 /* Make sure the Extended ROM leaf is a multiple of 1013 /* Make sure the Extended ROM leaf is a multiple of
1022 * max_rom in size. */ 1014 * max_rom in size. */
1023 if (csr->max_rom < 1) 1015 if (csr->max_rom < 1)
1024 return CSR1212_EINVAL; 1016 return -EINVAL;
1025 leaf_size = (cache->len + (csr->max_rom - 1)) & 1017 leaf_size = (cache->len + (csr->max_rom - 1)) &
1026 ~(csr->max_rom - 1); 1018 ~(csr->max_rom - 1);
1027 1019
@@ -1048,11 +1040,10 @@ int csr1212_generate_csr_image(struct csr1212_csr *csr)
1048 /* Set the length and CRC of the extended ROM. */ 1040 /* Set the length and CRC of the extended ROM. */
1049 struct csr1212_keyval_img *kvi = 1041 struct csr1212_keyval_img *kvi =
1050 (struct csr1212_keyval_img*)cache->data; 1042 (struct csr1212_keyval_img*)cache->data;
1043 u_int16_t len = bytes_to_quads(cache->len) - 1;
1051 1044
1052 kvi->length = CSR1212_CPU_TO_BE16(bytes_to_quads(cache->len) - 1); 1045 kvi->length = cpu_to_be16(len);
1053 kvi->crc = csr1212_crc16(kvi->data, 1046 kvi->crc = csr1212_crc16(kvi->data, len);
1054 bytes_to_quads(cache->len) - 1);
1055
1056 } 1047 }
1057 } 1048 }
1058 1049
@@ -1072,7 +1063,7 @@ int csr1212_read(struct csr1212_csr *csr, u_int32_t offset, void *buffer, u_int3
1072 return CSR1212_SUCCESS; 1063 return CSR1212_SUCCESS;
1073 } 1064 }
1074 } 1065 }
1075 return CSR1212_ENOENT; 1066 return -ENOENT;
1076} 1067}
1077 1068
1078 1069
@@ -1100,9 +1091,9 @@ static int csr1212_parse_bus_info_block(struct csr1212_csr *csr)
1100 1091
1101 /* check ROM header's info_length */ 1092 /* check ROM header's info_length */
1102 if (i == 0 && 1093 if (i == 0 &&
1103 CSR1212_BE32_TO_CPU(csr->cache_head->data[0]) >> 24 != 1094 be32_to_cpu(csr->cache_head->data[0]) >> 24 !=
1104 bytes_to_quads(csr->bus_info_len) - 1) 1095 bytes_to_quads(csr->bus_info_len) - 1)
1105 return CSR1212_EINVAL; 1096 return -EINVAL;
1106 } 1097 }
1107 1098
1108 bi = (struct csr1212_bus_info_block_img*)csr->cache_head->data; 1099 bi = (struct csr1212_bus_info_block_img*)csr->cache_head->data;
@@ -1124,12 +1115,12 @@ static int csr1212_parse_bus_info_block(struct csr1212_csr *csr)
1124 * CRC algorithm that verifying them is moot. */ 1115 * CRC algorithm that verifying them is moot. */
1125 if ((csr1212_crc16(bi->data, bi->crc_length) != bi->crc) && 1116 if ((csr1212_crc16(bi->data, bi->crc_length) != bi->crc) &&
1126 (csr1212_msft_crc16(bi->data, bi->crc_length) != bi->crc)) 1117 (csr1212_msft_crc16(bi->data, bi->crc_length) != bi->crc))
1127 return CSR1212_EINVAL; 1118 return -EINVAL;
1128#endif 1119#endif
1129 1120
1130 cr = CSR1212_MALLOC(sizeof(*cr)); 1121 cr = CSR1212_MALLOC(sizeof(*cr));
1131 if (!cr) 1122 if (!cr)
1132 return CSR1212_ENOMEM; 1123 return -ENOMEM;
1133 1124
1134 cr->next = NULL; 1125 cr->next = NULL;
1135 cr->prev = NULL; 1126 cr->prev = NULL;
@@ -1142,11 +1133,11 @@ static int csr1212_parse_bus_info_block(struct csr1212_csr *csr)
1142 return CSR1212_SUCCESS; 1133 return CSR1212_SUCCESS;
1143} 1134}
1144 1135
1145#define CSR1212_KV_KEY(q) (CSR1212_BE32_TO_CPU(q) >> CSR1212_KV_KEY_SHIFT) 1136#define CSR1212_KV_KEY(q) (be32_to_cpu(q) >> CSR1212_KV_KEY_SHIFT)
1146#define CSR1212_KV_KEY_TYPE(q) (CSR1212_KV_KEY(q) >> CSR1212_KV_KEY_TYPE_SHIFT) 1137#define CSR1212_KV_KEY_TYPE(q) (CSR1212_KV_KEY(q) >> CSR1212_KV_KEY_TYPE_SHIFT)
1147#define CSR1212_KV_KEY_ID(q) (CSR1212_KV_KEY(q) & CSR1212_KV_KEY_ID_MASK) 1138#define CSR1212_KV_KEY_ID(q) (CSR1212_KV_KEY(q) & CSR1212_KV_KEY_ID_MASK)
1148#define CSR1212_KV_VAL_MASK 0xffffff 1139#define CSR1212_KV_VAL_MASK 0xffffff
1149#define CSR1212_KV_VAL(q) (CSR1212_BE32_TO_CPU(q) & CSR1212_KV_VAL_MASK) 1140#define CSR1212_KV_VAL(q) (be32_to_cpu(q) & CSR1212_KV_VAL_MASK)
1150 1141
1151static int csr1212_parse_dir_entry(struct csr1212_keyval *dir, 1142static int csr1212_parse_dir_entry(struct csr1212_keyval *dir,
1152 csr1212_quad_t ki, 1143 csr1212_quad_t ki,
@@ -1161,7 +1152,7 @@ static int csr1212_parse_dir_entry(struct csr1212_keyval *dir,
1161 k = csr1212_new_immediate(CSR1212_KV_KEY_ID(ki), 1152 k = csr1212_new_immediate(CSR1212_KV_KEY_ID(ki),
1162 CSR1212_KV_VAL(ki)); 1153 CSR1212_KV_VAL(ki));
1163 if (!k) { 1154 if (!k) {
1164 ret = CSR1212_ENOMEM; 1155 ret = -ENOMEM;
1165 goto fail; 1156 goto fail;
1166 } 1157 }
1167 1158
@@ -1172,7 +1163,7 @@ static int csr1212_parse_dir_entry(struct csr1212_keyval *dir,
1172 k = csr1212_new_csr_offset(CSR1212_KV_KEY_ID(ki), 1163 k = csr1212_new_csr_offset(CSR1212_KV_KEY_ID(ki),
1173 CSR1212_KV_VAL(ki)); 1164 CSR1212_KV_VAL(ki));
1174 if (!k) { 1165 if (!k) {
1175 ret = CSR1212_ENOMEM; 1166 ret = -ENOMEM;
1176 goto fail; 1167 goto fail;
1177 } 1168 }
1178 k->refcnt = 0; /* Don't keep local reference when parsing. */ 1169 k->refcnt = 0; /* Don't keep local reference when parsing. */
@@ -1185,7 +1176,7 @@ static int csr1212_parse_dir_entry(struct csr1212_keyval *dir,
1185 /* Uh-oh. Can't have a relative offset of 0 for Leaves 1176 /* Uh-oh. Can't have a relative offset of 0 for Leaves
1186 * or Directories. The Config ROM image is most likely 1177 * or Directories. The Config ROM image is most likely
1187 * messed up, so we'll just abort here. */ 1178 * messed up, so we'll just abort here. */
1188 ret = CSR1212_EIO; 1179 ret = -EIO;
1189 goto fail; 1180 goto fail;
1190 } 1181 }
1191 1182
@@ -1200,7 +1191,7 @@ static int csr1212_parse_dir_entry(struct csr1212_keyval *dir,
1200 k = csr1212_new_leaf(CSR1212_KV_KEY_ID(ki), NULL, 0); 1191 k = csr1212_new_leaf(CSR1212_KV_KEY_ID(ki), NULL, 0);
1201 } 1192 }
1202 if (!k) { 1193 if (!k) {
1203 ret = CSR1212_ENOMEM; 1194 ret = -ENOMEM;
1204 goto fail; 1195 goto fail;
1205 } 1196 }
1206 k->refcnt = 0; /* Don't keep local reference when parsing. */ 1197 k->refcnt = 0; /* Don't keep local reference when parsing. */
@@ -1230,14 +1221,14 @@ int csr1212_parse_keyval(struct csr1212_keyval *kv,
1230 1221
1231 kvi = (struct csr1212_keyval_img*)&cache->data[bytes_to_quads(kv->offset - 1222 kvi = (struct csr1212_keyval_img*)&cache->data[bytes_to_quads(kv->offset -
1232 cache->offset)]; 1223 cache->offset)];
1233 kvi_len = CSR1212_BE16_TO_CPU(kvi->length); 1224 kvi_len = be16_to_cpu(kvi->length);
1234 1225
1235#if 0 1226#if 0
1236 /* Apparently there are too many differnt wrong implementations of the 1227 /* Apparently there are too many differnt wrong implementations of the
1237 * CRC algorithm that verifying them is moot. */ 1228 * CRC algorithm that verifying them is moot. */
1238 if ((csr1212_crc16(kvi->data, kvi_len) != kvi->crc) && 1229 if ((csr1212_crc16(kvi->data, kvi_len) != kvi->crc) &&
1239 (csr1212_msft_crc16(kvi->data, kvi_len) != kvi->crc)) { 1230 (csr1212_msft_crc16(kvi->data, kvi_len) != kvi->crc)) {
1240 ret = CSR1212_EINVAL; 1231 ret = -EINVAL;
1241 goto fail; 1232 goto fail;
1242 } 1233 }
1243#endif 1234#endif
@@ -1263,7 +1254,7 @@ int csr1212_parse_keyval(struct csr1212_keyval *kv,
1263 if (kv->key.id != CSR1212_KV_ID_EXTENDED_ROM) { 1254 if (kv->key.id != CSR1212_KV_ID_EXTENDED_ROM) {
1264 kv->value.leaf.data = CSR1212_MALLOC(quads_to_bytes(kvi_len)); 1255 kv->value.leaf.data = CSR1212_MALLOC(quads_to_bytes(kvi_len));
1265 if (!kv->value.leaf.data) { 1256 if (!kv->value.leaf.data) {
1266 ret = CSR1212_ENOMEM; 1257 ret = -ENOMEM;
1267 goto fail; 1258 goto fail;
1268 } 1259 }
1269 1260
@@ -1290,7 +1281,7 @@ int _csr1212_read_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv)
1290 u_int16_t kv_len = 0; 1281 u_int16_t kv_len = 0;
1291 1282
1292 if (!csr || !kv || csr->max_rom < 1) 1283 if (!csr || !kv || csr->max_rom < 1)
1293 return CSR1212_EINVAL; 1284 return -EINVAL;
1294 1285
1295 /* First find which cache the data should be in (or go in if not read 1286 /* First find which cache the data should be in (or go in if not read
1296 * yet). */ 1287 * yet). */
@@ -1306,22 +1297,22 @@ int _csr1212_read_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv)
1306 1297
1307 /* Only create a new cache for Extended ROM leaves. */ 1298 /* Only create a new cache for Extended ROM leaves. */
1308 if (kv->key.id != CSR1212_KV_ID_EXTENDED_ROM) 1299 if (kv->key.id != CSR1212_KV_ID_EXTENDED_ROM)
1309 return CSR1212_EINVAL; 1300 return -EINVAL;
1310 1301
1311 if (csr->ops->bus_read(csr, 1302 if (csr->ops->bus_read(csr,
1312 CSR1212_REGISTER_SPACE_BASE + kv->offset, 1303 CSR1212_REGISTER_SPACE_BASE + kv->offset,
1313 sizeof(csr1212_quad_t), &q, csr->private)) { 1304 sizeof(csr1212_quad_t), &q, csr->private)) {
1314 return CSR1212_EIO; 1305 return -EIO;
1315 } 1306 }
1316 1307
1317 kv->value.leaf.len = CSR1212_BE32_TO_CPU(q) >> 16; 1308 kv->value.leaf.len = be32_to_cpu(q) >> 16;
1318 1309
1319 cache_size = (quads_to_bytes(kv->value.leaf.len + 1) + 1310 cache_size = (quads_to_bytes(kv->value.leaf.len + 1) +
1320 (csr->max_rom - 1)) & ~(csr->max_rom - 1); 1311 (csr->max_rom - 1)) & ~(csr->max_rom - 1);
1321 1312
1322 cache = csr1212_rom_cache_malloc(kv->offset, cache_size); 1313 cache = csr1212_rom_cache_malloc(kv->offset, cache_size);
1323 if (!cache) 1314 if (!cache)
1324 return CSR1212_ENOMEM; 1315 return -ENOMEM;
1325 1316
1326 kv->value.leaf.data = &cache->data[1]; 1317 kv->value.leaf.data = &cache->data[1];
1327 csr->cache_tail->next = cache; 1318 csr->cache_tail->next = cache;
@@ -1331,7 +1322,7 @@ int _csr1212_read_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv)
1331 cache->filled_head = 1322 cache->filled_head =
1332 CSR1212_MALLOC(sizeof(*cache->filled_head)); 1323 CSR1212_MALLOC(sizeof(*cache->filled_head));
1333 if (!cache->filled_head) { 1324 if (!cache->filled_head) {
1334 return CSR1212_ENOMEM; 1325 return -ENOMEM;
1335 } 1326 }
1336 1327
1337 cache->filled_head->offset_start = 0; 1328 cache->filled_head->offset_start = 0;
@@ -1353,7 +1344,7 @@ int _csr1212_read_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv)
1353 if (cache_index < cr->offset_start) { 1344 if (cache_index < cr->offset_start) {
1354 newcr = CSR1212_MALLOC(sizeof(*newcr)); 1345 newcr = CSR1212_MALLOC(sizeof(*newcr));
1355 if (!newcr) 1346 if (!newcr)
1356 return CSR1212_ENOMEM; 1347 return -ENOMEM;
1357 1348
1358 newcr->offset_start = cache_index & ~(csr->max_rom - 1); 1349 newcr->offset_start = cache_index & ~(csr->max_rom - 1);
1359 newcr->offset_end = newcr->offset_start; 1350 newcr->offset_end = newcr->offset_start;
@@ -1366,8 +1357,7 @@ int _csr1212_read_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv)
1366 (cache_index < cr->offset_end)) { 1357 (cache_index < cr->offset_end)) {
1367 kvi = (struct csr1212_keyval_img*) 1358 kvi = (struct csr1212_keyval_img*)
1368 (&cache->data[bytes_to_quads(cache_index)]); 1359 (&cache->data[bytes_to_quads(cache_index)]);
1369 kv_len = quads_to_bytes(CSR1212_BE16_TO_CPU(kvi->length) + 1360 kv_len = quads_to_bytes(be16_to_cpu(kvi->length) + 1);
1370 1);
1371 break; 1361 break;
1372 } else if (cache_index == cr->offset_end) 1362 } else if (cache_index == cr->offset_end)
1373 break; 1363 break;
@@ -1377,7 +1367,7 @@ int _csr1212_read_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv)
1377 cr = cache->filled_tail; 1367 cr = cache->filled_tail;
1378 newcr = CSR1212_MALLOC(sizeof(*newcr)); 1368 newcr = CSR1212_MALLOC(sizeof(*newcr));
1379 if (!newcr) 1369 if (!newcr)
1380 return CSR1212_ENOMEM; 1370 return -ENOMEM;
1381 1371
1382 newcr->offset_start = cache_index & ~(csr->max_rom - 1); 1372 newcr->offset_start = cache_index & ~(csr->max_rom - 1);
1383 newcr->offset_end = newcr->offset_start; 1373 newcr->offset_end = newcr->offset_start;
@@ -1399,7 +1389,7 @@ int _csr1212_read_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv)
1399 csr->private)) { 1389 csr->private)) {
1400 if (csr->max_rom == 4) 1390 if (csr->max_rom == 4)
1401 /* We've got problems! */ 1391 /* We've got problems! */
1402 return CSR1212_EIO; 1392 return -EIO;
1403 1393
1404 /* Apperently the max_rom value was a lie, set it to 1394 /* Apperently the max_rom value was a lie, set it to
1405 * do quadlet reads and try again. */ 1395 * do quadlet reads and try again. */
@@ -1413,8 +1403,7 @@ int _csr1212_read_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv)
1413 if (!kvi && (cr->offset_end > cache_index)) { 1403 if (!kvi && (cr->offset_end > cache_index)) {
1414 kvi = (struct csr1212_keyval_img*) 1404 kvi = (struct csr1212_keyval_img*)
1415 (&cache->data[bytes_to_quads(cache_index)]); 1405 (&cache->data[bytes_to_quads(cache_index)]);
1416 kv_len = quads_to_bytes(CSR1212_BE16_TO_CPU(kvi->length) + 1406 kv_len = quads_to_bytes(be16_to_cpu(kvi->length) + 1);
1417 1);
1418 } 1407 }
1419 1408
1420 if ((kv_len + (kv->offset - cache->offset)) > cache->size) { 1409 if ((kv_len + (kv->offset - cache->offset)) > cache->size) {
@@ -1422,7 +1411,7 @@ int _csr1212_read_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv)
1422 * beyond the ConfigROM image region and thus beyond the 1411 * beyond the ConfigROM image region and thus beyond the
1423 * end of our cache region. Therefore, we abort now 1412 * end of our cache region. Therefore, we abort now
1424 * rather than seg faulting later. */ 1413 * rather than seg faulting later. */
1425 return CSR1212_EIO; 1414 return -EIO;
1426 } 1415 }
1427 1416
1428 ncr = cr->next; 1417 ncr = cr->next;
@@ -1451,7 +1440,7 @@ int csr1212_parse_csr(struct csr1212_csr *csr)
1451 int ret; 1440 int ret;
1452 1441
1453 if (!csr || !csr->ops || !csr->ops->bus_read) 1442 if (!csr || !csr->ops || !csr->ops->bus_read)
1454 return CSR1212_EINVAL; 1443 return -EINVAL;
1455 1444
1456 ret = csr1212_parse_bus_info_block(csr); 1445 ret = csr1212_parse_bus_info_block(csr);
1457 if (ret != CSR1212_SUCCESS) 1446 if (ret != CSR1212_SUCCESS)
@@ -1463,7 +1452,7 @@ int csr1212_parse_csr(struct csr1212_csr *csr)
1463 int i = csr->ops->get_max_rom(csr->bus_info_data, 1452 int i = csr->ops->get_max_rom(csr->bus_info_data,
1464 csr->private); 1453 csr->private);
1465 if (i & ~0x3) 1454 if (i & ~0x3)
1466 return CSR1212_EINVAL; 1455 return -EINVAL;
1467 csr->max_rom = mr_map[i]; 1456 csr->max_rom = mr_map[i];
1468 } 1457 }
1469 1458