diff options
author | Wey-Yi Guy <wey-yi.w.guy@intel.com> | 2011-05-03 21:05:12 -0400 |
---|---|---|
committer | Wey-Yi Guy <wey-yi.w.guy@intel.com> | 2011-05-13 15:02:11 -0400 |
commit | 4babc358c0a1bced6bed2c9d6c77fc8803b8a22f (patch) | |
tree | 044be9a3131587b6301d1de19c54b0707fbe97e0 /drivers | |
parent | 7a4e5281d1b3335a3dc90841415390473cccebf3 (diff) |
iwlagn: add eeprom command to testmode
Add the capability to dump eeprom through testmode request
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-sv-open.c | 26 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-testmode.h | 12 |
2 files changed, 38 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-sv-open.c b/drivers/net/wireless/iwlwifi/iwl-sv-open.c index b778c3f4b84d..e77ccaaf54ba 100644 --- a/drivers/net/wireless/iwlwifi/iwl-sv-open.c +++ b/drivers/net/wireless/iwlwifi/iwl-sv-open.c | |||
@@ -98,6 +98,8 @@ struct nla_policy iwl_testmode_gnl_msg_policy[IWL_TM_ATTR_MAX] = { | |||
98 | [IWL_TM_ATTR_SYNC_RSP] = { .type = NLA_UNSPEC, }, | 98 | [IWL_TM_ATTR_SYNC_RSP] = { .type = NLA_UNSPEC, }, |
99 | [IWL_TM_ATTR_UCODE_RX_PKT] = { .type = NLA_UNSPEC, }, | 99 | [IWL_TM_ATTR_UCODE_RX_PKT] = { .type = NLA_UNSPEC, }, |
100 | 100 | ||
101 | [IWL_TM_ATTR_EEPROM] = { .type = NLA_UNSPEC, }, | ||
102 | |||
101 | [IWL_TM_ATTR_TRACE_ADDR] = { .type = NLA_UNSPEC, }, | 103 | [IWL_TM_ATTR_TRACE_ADDR] = { .type = NLA_UNSPEC, }, |
102 | [IWL_TM_ATTR_TRACE_DATA] = { .type = NLA_UNSPEC, }, | 104 | [IWL_TM_ATTR_TRACE_DATA] = { .type = NLA_UNSPEC, }, |
103 | 105 | ||
@@ -418,6 +420,29 @@ static int iwl_testmode_driver(struct ieee80211_hw *hw, struct nlattr **tb) | |||
418 | "Error starting the device: %d\n", status); | 420 | "Error starting the device: %d\n", status); |
419 | break; | 421 | break; |
420 | 422 | ||
423 | case IWL_TM_CMD_APP2DEV_GET_EEPROM: | ||
424 | if (priv->eeprom) { | ||
425 | skb = cfg80211_testmode_alloc_reply_skb(hw->wiphy, | ||
426 | priv->cfg->base_params->eeprom_size + 20); | ||
427 | if (!skb) { | ||
428 | IWL_DEBUG_INFO(priv, | ||
429 | "Error allocating memory\n"); | ||
430 | return -ENOMEM; | ||
431 | } | ||
432 | NLA_PUT_U32(skb, IWL_TM_ATTR_COMMAND, | ||
433 | IWL_TM_CMD_DEV2APP_EEPROM_RSP); | ||
434 | NLA_PUT(skb, IWL_TM_ATTR_EEPROM, | ||
435 | priv->cfg->base_params->eeprom_size, | ||
436 | priv->eeprom); | ||
437 | status = cfg80211_testmode_reply(skb); | ||
438 | if (status < 0) | ||
439 | IWL_DEBUG_INFO(priv, | ||
440 | "Error sending msg : %d\n", | ||
441 | status); | ||
442 | } else | ||
443 | return -EFAULT; | ||
444 | break; | ||
445 | |||
421 | default: | 446 | default: |
422 | IWL_DEBUG_INFO(priv, "Unknown testmode driver command ID\n"); | 447 | IWL_DEBUG_INFO(priv, "Unknown testmode driver command ID\n"); |
423 | return -ENOSYS; | 448 | return -ENOSYS; |
@@ -581,6 +606,7 @@ int iwl_testmode_cmd(struct ieee80211_hw *hw, void *data, int len) | |||
581 | case IWL_TM_CMD_APP2DEV_LOAD_INIT_FW: | 606 | case IWL_TM_CMD_APP2DEV_LOAD_INIT_FW: |
582 | case IWL_TM_CMD_APP2DEV_CFG_INIT_CALIB: | 607 | case IWL_TM_CMD_APP2DEV_CFG_INIT_CALIB: |
583 | case IWL_TM_CMD_APP2DEV_LOAD_RUNTIME_FW: | 608 | case IWL_TM_CMD_APP2DEV_LOAD_RUNTIME_FW: |
609 | case IWL_TM_CMD_APP2DEV_GET_EEPROM: | ||
584 | IWL_DEBUG_INFO(priv, "testmode cmd to driver\n"); | 610 | IWL_DEBUG_INFO(priv, "testmode cmd to driver\n"); |
585 | result = iwl_testmode_driver(hw, tb); | 611 | result = iwl_testmode_driver(hw, tb); |
586 | break; | 612 | break; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-testmode.h b/drivers/net/wireless/iwlwifi/iwl-testmode.h index 34634eca94ec..4171d2963828 100644 --- a/drivers/net/wireless/iwlwifi/iwl-testmode.h +++ b/drivers/net/wireless/iwlwifi/iwl-testmode.h | |||
@@ -88,6 +88,7 @@ enum iwl_tm_cmd_t { | |||
88 | IWL_TM_CMD_APP2DEV_LOAD_INIT_FW, | 88 | IWL_TM_CMD_APP2DEV_LOAD_INIT_FW, |
89 | IWL_TM_CMD_APP2DEV_CFG_INIT_CALIB, | 89 | IWL_TM_CMD_APP2DEV_CFG_INIT_CALIB, |
90 | IWL_TM_CMD_APP2DEV_LOAD_RUNTIME_FW, | 90 | IWL_TM_CMD_APP2DEV_LOAD_RUNTIME_FW, |
91 | IWL_TM_CMD_APP2DEV_GET_EEPROM, | ||
91 | /* if there is other new command for the driver layer operation, | 92 | /* if there is other new command for the driver layer operation, |
92 | * append them here */ | 93 | * append them here */ |
93 | 94 | ||
@@ -103,6 +104,11 @@ enum iwl_tm_cmd_t { | |||
103 | /* commands from kernel space to multicast the spontaneous messages | 104 | /* commands from kernel space to multicast the spontaneous messages |
104 | * to user application */ | 105 | * to user application */ |
105 | IWL_TM_CMD_DEV2APP_UCODE_RX_PKT, | 106 | IWL_TM_CMD_DEV2APP_UCODE_RX_PKT, |
107 | |||
108 | /* commands from kernel space to carry the eeprom response | ||
109 | * to user application */ | ||
110 | IWL_TM_CMD_DEV2APP_EEPROM_RSP, | ||
111 | |||
106 | IWL_TM_CMD_MAX, | 112 | IWL_TM_CMD_MAX, |
107 | }; | 113 | }; |
108 | 114 | ||
@@ -148,6 +154,12 @@ enum iwl_tm_attr_t { | |||
148 | * application */ | 154 | * application */ |
149 | IWL_TM_ATTR_UCODE_RX_PKT, | 155 | IWL_TM_ATTR_UCODE_RX_PKT, |
150 | 156 | ||
157 | /* When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_DEV2APP_EEPROM, | ||
158 | * The mandatory fields are: | ||
159 | * IWL_TM_ATTR_EEPROM for the data content responging to the user | ||
160 | * application */ | ||
161 | IWL_TM_ATTR_EEPROM, | ||
162 | |||
151 | /* When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_XXX_TRACE, | 163 | /* When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_XXX_TRACE, |
152 | * The mandatory fields are: | 164 | * The mandatory fields are: |
153 | * IWL_TM_ATTR_MEM_TRACE_ADDR for the trace address | 165 | * IWL_TM_ATTR_MEM_TRACE_ADDR for the trace address |