diff options
author | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2007-03-11 17:49:05 -0400 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2007-04-29 18:00:28 -0400 |
commit | 7fb9addba8ebd67306099e7fa629ff76c1be2105 (patch) | |
tree | 49b352701fed16e3b6e77d0b523c6e7ee0f89a98 /drivers/ieee1394/csr1212.c | |
parent | 6c88e475660edcd5571a5aab39ce8062183af951 (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.c | 159 |
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 | ||
396 | static struct csr1212_keyval * | 389 | static struct csr1212_keyval * |
397 | csr1212_new_descriptor_leaf(u_int8_t dtype, u_int32_t specifier_id, | 390 | csr1212_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 | ||
442 | static struct csr1212_keyval * | 434 | static struct csr1212_keyval * |
443 | csr1212_new_textual_descriptor_leaf(u_int8_t cwidth, u_int16_t cset, | 435 | csr1212_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 | ||
1151 | static int csr1212_parse_dir_entry(struct csr1212_keyval *dir, | 1142 | static 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 | ||