wimax/i2400m: verify firmware format version is known
authorInaky Perez-Gonzalez <inaky@linux.intel.com>
Fri, 4 Sep 2009 21:53:43 +0000 (14:53 -0700)
committerInaky Perez-Gonzalez <inaky@linux.intel.com>
Mon, 19 Oct 2009 06:55:56 +0000 (15:55 +0900)
Make sure the bootloading code checks that the format of the file is
understood (major version match). This also fixes a dumb typo in
extracting the major version field.

Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
drivers/net/wimax/i2400m/fw.c

index eef236d85af3425b0b2c23bac52ddc345d86d3b8..1fd2fee4c6c293a4e99d2f7739ff4def50e74bc4 100644 (file)
@@ -1179,7 +1179,7 @@ int i2400m_fw_check(struct i2400m *i2400m,
 
        module_type = bcf->module_type;
        header_len = sizeof(u32) * le32_to_cpu(bcf->header_len);
-       major_version = le32_to_cpu(bcf->header_version) & 0xffff0000 >> 16;
+       major_version = (le32_to_cpu(bcf->header_version) & 0xffff0000) >> 16;
        minor_version = le32_to_cpu(bcf->header_version) & 0x0000ffff;
        module_id = le32_to_cpu(bcf->module_id);
        module_vendor = le32_to_cpu(bcf->module_vendor);
@@ -1205,6 +1205,12 @@ int i2400m_fw_check(struct i2400m *i2400m,
                goto error;
        }
 
+       if (major_version != 1) {
+               dev_err(dev, "%s: major header version v%u.%u not supported\n",
+                       i2400m->fw_name, major_version, minor_version);
+               goto error;
+       }
+
        /* Check soft-er errors */
        result = 0;
        if (module_vendor != 0x8086)