staging/fwserial: Fix endian issue in unit directory
authorPeter Hurley <peter@hurleysoftware.com>
Tue, 29 Jan 2013 14:10:30 +0000 (09:10 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 30 Jan 2013 04:31:34 +0000 (23:31 -0500)
Reported-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Acked-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Acked-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/fwserial/fwserial.c

index fe9a688..cad9e98 100644 (file)
@@ -2559,26 +2559,25 @@ static struct fw_driver fwserial_driver = {
 /* XXX: config ROM definitons could be improved with semi-automated offset
  * and length calculation
  */
+#define FW_ROM_LEN(quads)      ((quads) << 16)
 #define FW_ROM_DESCRIPTOR(ofs) (((CSR_LEAF | CSR_DESCRIPTOR) << 24) | (ofs))
 
 struct fwserial_unit_directory_data {
-       u16     crc;
-       u16     len;
+       u32     len_crc;
        u32     unit_specifier;
        u32     unit_sw_version;
        u32     unit_addr_offset;
        u32     desc1_ofs;
-       u16     desc1_crc;
-       u16     desc1_len;
+       u32     desc1_len_crc;
        u32     desc1_data[5];
 } __packed;
 
 static struct fwserial_unit_directory_data fwserial_unit_directory_data = {
-       .len = 4,
+       .len_crc = FW_ROM_LEN(4),
        .unit_specifier = FW_UNIT_SPECIFIER(LINUX_VENDOR_ID),
        .unit_sw_version = FW_UNIT_VERSION(FWSERIAL_VERSION),
        .desc1_ofs = FW_ROM_DESCRIPTOR(1),
-       .desc1_len = 5,
+       .desc1_len_crc = FW_ROM_LEN(5),
        .desc1_data = {
                0x00000000,                     /*   type = text            */
                0x00000000,                     /*   enc = ASCII, lang EN   */