aboutsummaryrefslogtreecommitdiff
path: root/drivers/ieee1394/csr1212.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-02-09 10:25:38 -0800
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-02-09 10:25:38 -0800
commit64106104dd2d4a6280777e88c1cbf9f7a52c30bd (patch)
tree082ed0f5e8be5390e867e4078e6813c509c5e642 /drivers/ieee1394/csr1212.c
parentbeda9f3a13bbb22cde92a45f230a02ef2afef6a9 (diff)
parent91efa462054d44ae52b0c6c8325ed5e899f2cd17 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6: ieee1394: fix host device registering when nodemgr disabled ieee1394: video1394: DMA fix ieee1394: raw1394: prevent unloading of low-level driver ieee1394: dv1394: tidy up card removal ieee1394: dv1394: fix CardBus card ejection ieee1394: sbp2: lower block queue alignment requirement ieee1394: sbp2: remove bogus "emulated" host flag ieee1394: save one word in struct hpsb_host ieee1394: restore config ROM when resuming ieee1394: ohci1394: drop pcmcia-cs compatibility code ieee1394: nodemgr: check info_length in ROM header earlier the scheduled IEEE1394_OUI_DB removal the scheduled IEEE1394_EXPORT_FULL_API removal ieee1394: sbp2: use a better wildcard for blacklist Add PCI class ID for firewire OHCI controllers. ieee1394: modified csr1212_key_id_type_map to support lisight
Diffstat (limited to 'drivers/ieee1394/csr1212.c')
-rw-r--r--drivers/ieee1394/csr1212.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/ieee1394/csr1212.c b/drivers/ieee1394/csr1212.c
index 586f71e7346..c28f639823d 100644
--- a/drivers/ieee1394/csr1212.c
+++ b/drivers/ieee1394/csr1212.c
@@ -47,14 +47,14 @@
#define __D (1 << CSR1212_KV_TYPE_DIRECTORY)
#define __L (1 << CSR1212_KV_TYPE_LEAF)
static const u_int8_t csr1212_key_id_type_map[0x30] = {
- 0, /* Reserved */
+ __C, /* used by Apple iSight */
__D | __L, /* Descriptor */
__I | __D | __L, /* Bus_Dependent_Info */
__I | __D | __L, /* Vendor */
__I, /* Hardware_Version */
0, 0, /* Reserved */
- __D | __L, /* Module */
- 0, 0, 0, 0, /* Reserved */
+ __D | __L | __I, /* Module */
+ __I, 0, 0, 0, /* used by Apple iSight, Reserved */
__I, /* Node_Capabilities */
__L, /* EUI_64 */
0, 0, 0, /* Reserved */
@@ -1234,6 +1234,12 @@ static int csr1212_parse_bus_info_block(struct csr1212_csr *csr)
csr->private);
if (ret != CSR1212_SUCCESS)
return ret;
+
+ /* check ROM header's info_length */
+ if (i == 0 &&
+ CSR1212_BE32_TO_CPU(csr->cache_head->data[0]) >> 24 !=
+ bytes_to_quads(csr->bus_info_len) - 1)
+ return CSR1212_EINVAL;
}
bi = (struct csr1212_bus_info_block_img*)csr->cache_head->data;
@@ -1250,9 +1256,6 @@ static int csr1212_parse_bus_info_block(struct csr1212_csr *csr)
return ret;
}
- if (bytes_to_quads(csr->bus_info_len - sizeof(csr1212_quad_t)) != bi->length)
- return CSR1212_EINVAL;
-
#if 0
/* Apparently there are too many differnt wrong implementations of the
* CRC algorithm that verifying them is moot. */