diff options
author | Chatre, Reinette <reinette.chatre@intel.com> | 2008-12-02 15:14:05 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-12-05 09:35:55 -0500 |
commit | c02b3acd29766c6f79c2411cb5b85e1ee72c4c8f (patch) | |
tree | 2d7535f861a543a6578f9b0bfa594e2837ebaf17 /drivers/net/wireless | |
parent | f3f911d1773d31f11038d90b04244bc3986c4ccd (diff) |
iwlwifi: store ucode version number
We store the ucode version number as part of
iwl_priv/iwl3945_priv. This enables us to determine
if particular ucode has support for features in order
to have driver support more than one ucode API.
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-3945-commands.h | 6 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-3945.h | 4 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 12 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-commands.h | 6 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-dev.h | 4 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl3945-base.c | 12 |
6 files changed, 36 insertions, 8 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-commands.h b/drivers/net/wireless/iwlwifi/iwl-3945-commands.h index 735891a768a2..daf99ea88e90 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945-commands.h +++ b/drivers/net/wireless/iwlwifi/iwl-3945-commands.h | |||
@@ -69,6 +69,12 @@ | |||
69 | #ifndef __iwl_3945_commands_h__ | 69 | #ifndef __iwl_3945_commands_h__ |
70 | #define __iwl_3945_commands_h__ | 70 | #define __iwl_3945_commands_h__ |
71 | 71 | ||
72 | /* uCode version contains 4 values: Major/Minor/API/Serial */ | ||
73 | #define IWL_UCODE_MAJOR(ver) (((ver) & 0xFF000000) >> 24) | ||
74 | #define IWL_UCODE_MINOR(ver) (((ver) & 0x00FF0000) >> 16) | ||
75 | #define IWL_UCODE_API(ver) (((ver) & 0x0000FF00) >> 8) | ||
76 | #define IWL_UCODE_SERIAL(ver) ((ver) & 0x000000FF) | ||
77 | |||
72 | enum { | 78 | enum { |
73 | REPLY_ALIVE = 0x1, | 79 | REPLY_ALIVE = 0x1, |
74 | REPLY_ERROR = 0x2, | 80 | REPLY_ERROR = 0x2, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.h b/drivers/net/wireless/iwlwifi/iwl-3945.h index 2a924c10ff93..972c4542e5bc 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945.h +++ b/drivers/net/wireless/iwlwifi/iwl-3945.h | |||
@@ -505,7 +505,7 @@ struct fw_desc { | |||
505 | 505 | ||
506 | /* uCode file layout */ | 506 | /* uCode file layout */ |
507 | struct iwl3945_ucode { | 507 | struct iwl3945_ucode { |
508 | __le32 ver; /* major/minor/subminor */ | 508 | __le32 ver; /* major/minor/API/serial */ |
509 | __le32 inst_size; /* bytes of runtime instructions */ | 509 | __le32 inst_size; /* bytes of runtime instructions */ |
510 | __le32 data_size; /* bytes of runtime data */ | 510 | __le32 data_size; /* bytes of runtime data */ |
511 | __le32 init_size; /* bytes of initialization instructions */ | 511 | __le32 init_size; /* bytes of initialization instructions */ |
@@ -762,6 +762,8 @@ struct iwl3945_priv { | |||
762 | void __iomem *hw_base; | 762 | void __iomem *hw_base; |
763 | 763 | ||
764 | /* uCode images, save to reload in case of failure */ | 764 | /* uCode images, save to reload in case of failure */ |
765 | u32 ucode_ver; /* ucode version, copy of | ||
766 | iwl3945_ucode.ver */ | ||
765 | struct fw_desc ucode_code; /* runtime inst */ | 767 | struct fw_desc ucode_code; /* runtime inst */ |
766 | struct fw_desc ucode_data; /* runtime data original */ | 768 | struct fw_desc ucode_data; /* runtime data original */ |
767 | struct fw_desc ucode_data_backup; /* runtime data save/restore */ | 769 | struct fw_desc ucode_data_backup; /* runtime data save/restore */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index e8368b69d8cd..5912cdec33a7 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -1575,7 +1575,7 @@ static int iwl_read_ucode(struct iwl_priv *priv) | |||
1575 | const char *name = priv->cfg->fw_name; | 1575 | const char *name = priv->cfg->fw_name; |
1576 | u8 *src; | 1576 | u8 *src; |
1577 | size_t len; | 1577 | size_t len; |
1578 | u32 ver, inst_size, data_size, init_size, init_data_size, boot_size; | 1578 | u32 inst_size, data_size, init_size, init_data_size, boot_size; |
1579 | 1579 | ||
1580 | /* Ask kernel firmware_class module to get the boot firmware off disk. | 1580 | /* Ask kernel firmware_class module to get the boot firmware off disk. |
1581 | * request_firmware() is synchronous, file is in memory on return. */ | 1581 | * request_firmware() is synchronous, file is in memory on return. */ |
@@ -1599,14 +1599,20 @@ static int iwl_read_ucode(struct iwl_priv *priv) | |||
1599 | /* Data from ucode file: header followed by uCode images */ | 1599 | /* Data from ucode file: header followed by uCode images */ |
1600 | ucode = (void *)ucode_raw->data; | 1600 | ucode = (void *)ucode_raw->data; |
1601 | 1601 | ||
1602 | ver = le32_to_cpu(ucode->ver); | 1602 | priv->ucode_ver = le32_to_cpu(ucode->ver); |
1603 | inst_size = le32_to_cpu(ucode->inst_size); | 1603 | inst_size = le32_to_cpu(ucode->inst_size); |
1604 | data_size = le32_to_cpu(ucode->data_size); | 1604 | data_size = le32_to_cpu(ucode->data_size); |
1605 | init_size = le32_to_cpu(ucode->init_size); | 1605 | init_size = le32_to_cpu(ucode->init_size); |
1606 | init_data_size = le32_to_cpu(ucode->init_data_size); | 1606 | init_data_size = le32_to_cpu(ucode->init_data_size); |
1607 | boot_size = le32_to_cpu(ucode->boot_size); | 1607 | boot_size = le32_to_cpu(ucode->boot_size); |
1608 | 1608 | ||
1609 | IWL_DEBUG_INFO("f/w package hdr ucode version = 0x%x\n", ver); | 1609 | IWL_DEBUG_INFO("f/w package hdr ucode version raw = 0x%x\n", |
1610 | priv->ucode_ver); | ||
1611 | IWL_DEBUG_INFO("f/w package hdr ucode version = %u.%u.%u.%u\n", | ||
1612 | IWL_UCODE_MAJOR(priv->ucode_ver), | ||
1613 | IWL_UCODE_MINOR(priv->ucode_ver), | ||
1614 | IWL_UCODE_API(priv->ucode_ver), | ||
1615 | IWL_UCODE_SERIAL(priv->ucode_ver)); | ||
1610 | IWL_DEBUG_INFO("f/w package hdr runtime inst size = %u\n", | 1616 | IWL_DEBUG_INFO("f/w package hdr runtime inst size = %u\n", |
1611 | inst_size); | 1617 | inst_size); |
1612 | IWL_DEBUG_INFO("f/w package hdr runtime data size = %u\n", | 1618 | IWL_DEBUG_INFO("f/w package hdr runtime data size = %u\n", |
diff --git a/drivers/net/wireless/iwlwifi/iwl-commands.h b/drivers/net/wireless/iwlwifi/iwl-commands.h index 9c786db6f90b..528bcab49d13 100644 --- a/drivers/net/wireless/iwlwifi/iwl-commands.h +++ b/drivers/net/wireless/iwlwifi/iwl-commands.h | |||
@@ -69,6 +69,12 @@ | |||
69 | #ifndef __iwl_commands_h__ | 69 | #ifndef __iwl_commands_h__ |
70 | #define __iwl_commands_h__ | 70 | #define __iwl_commands_h__ |
71 | 71 | ||
72 | /* uCode version contains 4 values: Major/Minor/API/Serial */ | ||
73 | #define IWL_UCODE_MAJOR(ver) (((ver) & 0xFF000000) >> 24) | ||
74 | #define IWL_UCODE_MINOR(ver) (((ver) & 0x00FF0000) >> 16) | ||
75 | #define IWL_UCODE_API(ver) (((ver) & 0x0000FF00) >> 8) | ||
76 | #define IWL_UCODE_SERIAL(ver) ((ver) & 0x000000FF) | ||
77 | |||
72 | enum { | 78 | enum { |
73 | REPLY_ALIVE = 0x1, | 79 | REPLY_ALIVE = 0x1, |
74 | REPLY_ERROR = 0x2, | 80 | REPLY_ERROR = 0x2, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h index 5f6805bfec3f..a19fbb5eaae4 100644 --- a/drivers/net/wireless/iwlwifi/iwl-dev.h +++ b/drivers/net/wireless/iwlwifi/iwl-dev.h | |||
@@ -462,7 +462,7 @@ struct fw_desc { | |||
462 | 462 | ||
463 | /* uCode file layout */ | 463 | /* uCode file layout */ |
464 | struct iwl_ucode { | 464 | struct iwl_ucode { |
465 | __le32 ver; /* major/minor/subminor */ | 465 | __le32 ver; /* major/minor/API/serial */ |
466 | __le32 inst_size; /* bytes of runtime instructions */ | 466 | __le32 inst_size; /* bytes of runtime instructions */ |
467 | __le32 data_size; /* bytes of runtime data */ | 467 | __le32 data_size; /* bytes of runtime data */ |
468 | __le32 init_size; /* bytes of initialization instructions */ | 468 | __le32 init_size; /* bytes of initialization instructions */ |
@@ -843,6 +843,8 @@ struct iwl_priv { | |||
843 | u8 rev_id; | 843 | u8 rev_id; |
844 | 844 | ||
845 | /* uCode images, save to reload in case of failure */ | 845 | /* uCode images, save to reload in case of failure */ |
846 | u32 ucode_ver; /* version of ucode, copy of | ||
847 | iwl_ucode.ver */ | ||
846 | struct fw_desc ucode_code; /* runtime inst */ | 848 | struct fw_desc ucode_code; /* runtime inst */ |
847 | struct fw_desc ucode_data; /* runtime data original */ | 849 | struct fw_desc ucode_data; /* runtime data original */ |
848 | struct fw_desc ucode_data_backup; /* runtime data save/restore */ | 850 | struct fw_desc ucode_data_backup; /* runtime data save/restore */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index 12ff1121e6dc..03ff87fbe924 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
@@ -5302,7 +5302,7 @@ static int iwl3945_read_ucode(struct iwl3945_priv *priv) | |||
5302 | const char *name = priv->cfg->fw_name; | 5302 | const char *name = priv->cfg->fw_name; |
5303 | u8 *src; | 5303 | u8 *src; |
5304 | size_t len; | 5304 | size_t len; |
5305 | u32 ver, inst_size, data_size, init_size, init_data_size, boot_size; | 5305 | u32 inst_size, data_size, init_size, init_data_size, boot_size; |
5306 | 5306 | ||
5307 | /* Ask kernel firmware_class module to get the boot firmware off disk. | 5307 | /* Ask kernel firmware_class module to get the boot firmware off disk. |
5308 | * request_firmware() is synchronous, file is in memory on return. */ | 5308 | * request_firmware() is synchronous, file is in memory on return. */ |
@@ -5326,14 +5326,20 @@ static int iwl3945_read_ucode(struct iwl3945_priv *priv) | |||
5326 | /* Data from ucode file: header followed by uCode images */ | 5326 | /* Data from ucode file: header followed by uCode images */ |
5327 | ucode = (void *)ucode_raw->data; | 5327 | ucode = (void *)ucode_raw->data; |
5328 | 5328 | ||
5329 | ver = le32_to_cpu(ucode->ver); | 5329 | priv->ucode_ver = le32_to_cpu(ucode->ver); |
5330 | inst_size = le32_to_cpu(ucode->inst_size); | 5330 | inst_size = le32_to_cpu(ucode->inst_size); |
5331 | data_size = le32_to_cpu(ucode->data_size); | 5331 | data_size = le32_to_cpu(ucode->data_size); |
5332 | init_size = le32_to_cpu(ucode->init_size); | 5332 | init_size = le32_to_cpu(ucode->init_size); |
5333 | init_data_size = le32_to_cpu(ucode->init_data_size); | 5333 | init_data_size = le32_to_cpu(ucode->init_data_size); |
5334 | boot_size = le32_to_cpu(ucode->boot_size); | 5334 | boot_size = le32_to_cpu(ucode->boot_size); |
5335 | 5335 | ||
5336 | IWL_DEBUG_INFO("f/w package hdr ucode version = 0x%x\n", ver); | 5336 | IWL_DEBUG_INFO("f/w package hdr ucode version raw = 0x%x\n", |
5337 | priv->ucode_ver); | ||
5338 | IWL_DEBUG_INFO("f/w package hdr ucode version = %u.%u.%u.%u\n", | ||
5339 | IWL_UCODE_MAJOR(priv->ucode_ver), | ||
5340 | IWL_UCODE_MINOR(priv->ucode_ver), | ||
5341 | IWL_UCODE_API(priv->ucode_ver), | ||
5342 | IWL_UCODE_SERIAL(priv->ucode_ver)); | ||
5337 | IWL_DEBUG_INFO("f/w package hdr runtime inst size = %u\n", inst_size); | 5343 | IWL_DEBUG_INFO("f/w package hdr runtime inst size = %u\n", inst_size); |
5338 | IWL_DEBUG_INFO("f/w package hdr runtime data size = %u\n", data_size); | 5344 | IWL_DEBUG_INFO("f/w package hdr runtime data size = %u\n", data_size); |
5339 | IWL_DEBUG_INFO("f/w package hdr init inst size = %u\n", init_size); | 5345 | IWL_DEBUG_INFO("f/w package hdr init inst size = %u\n", init_size); |