aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorWey-Yi Guy <wey-yi.w.guy@intel.com>2011-05-03 21:05:12 -0400
committerWey-Yi Guy <wey-yi.w.guy@intel.com>2011-05-13 15:02:11 -0400
commit4babc358c0a1bced6bed2c9d6c77fc8803b8a22f (patch)
tree044be9a3131587b6301d1de19c54b0707fbe97e0 /drivers/net/wireless
parent7a4e5281d1b3335a3dc90841415390473cccebf3 (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/net/wireless')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-sv-open.c26
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-testmode.h12
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