iwlwifi: add device ID information support by testmode
authorHsu, Kenny <kenny.hsu@intel.com>
Thu, 1 Dec 2011 09:12:50 +0000 (01:12 -0800)
committerWey-Yi Guy <wey-yi.w.guy@intel.com>
Thu, 8 Dec 2011 23:54:40 +0000 (15:54 -0800)
Create new tm command to report devce ID information to userspace
- IWL_TM_CMD_APP2DEV_GET_DEVICE_ID

Signed-off-by: Kenny Hsu <kenny.hsu@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
drivers/net/wireless/iwlwifi/iwl-testmode.c
drivers/net/wireless/iwlwifi/iwl-testmode.h

index 131a73d16f98701ffe62279d1fb6304adc0e740b..0b0ff11d5d5882ad52593b38863f29f94464e262 100644 (file)
@@ -77,6 +77,7 @@
 #include "iwl-agn.h"
 #include "iwl-testmode.h"
 #include "iwl-trans.h"
+#include "iwl-bus.h"
 
 /* The TLVs used in the gnl message policy between the kernel module and
  * user space application. iwl_testmode_gnl_msg_policy is to be carried
@@ -112,6 +113,7 @@ struct nla_policy iwl_testmode_gnl_msg_policy[IWL_TM_ATTR_MAX] = {
        [IWL_TM_ATTR_SRAM_DUMP] = { .type = NLA_UNSPEC, },
 
        [IWL_TM_ATTR_FW_VERSION] = { .type = NLA_U32, },
+       [IWL_TM_ATTR_DEVICE_ID] = { .type = NLA_U32, },
 };
 
 /*
@@ -418,6 +420,8 @@ static int iwl_testmode_driver(struct ieee80211_hw *hw, struct nlattr **tb)
        struct sk_buff *skb;
        unsigned char *rsp_data_ptr = NULL;
        int status = 0, rsp_data_len = 0;
+       char buf[32], *ptr = NULL;
+       unsigned int num, devid;
 
        switch (nla_get_u32(tb[IWL_TM_ATTR_COMMAND])) {
        case IWL_TM_CMD_APP2DEV_GET_DEVICENAME:
@@ -527,6 +531,28 @@ static int iwl_testmode_driver(struct ieee80211_hw *hw, struct nlattr **tb)
                                        "Error sending msg : %d\n", status);
                break;
 
+       case IWL_TM_CMD_APP2DEV_GET_DEVICE_ID:
+               bus_get_hw_id(bus(priv), buf, sizeof(buf));
+               ptr = buf;
+               strsep(&ptr, ":");
+               sscanf(strsep(&ptr, ":"), "%x", &num);
+               sscanf(strsep(&ptr, ":"), "%x", &devid);
+               IWL_INFO(priv, "Device ID = 0x%04x, SubDevice ID= 0x%04x\n",
+                               num, devid);
+               devid |= (num << 16);
+
+               skb = cfg80211_testmode_alloc_reply_skb(hw->wiphy, 20);
+               if (!skb) {
+                       IWL_DEBUG_INFO(priv, "Error allocating memory\n");
+                       return -ENOMEM;
+               }
+               NLA_PUT_U32(skb, IWL_TM_ATTR_DEVICE_ID, devid);
+               status = cfg80211_testmode_reply(skb);
+               if (status < 0)
+                       IWL_DEBUG_INFO(priv,
+                                       "Error sending msg : %d\n", status);
+               break;
+
        default:
                IWL_DEBUG_INFO(priv, "Unknown testmode driver command ID\n");
                return -ENOSYS;
@@ -860,6 +886,7 @@ int iwlagn_mac_testmode_cmd(struct ieee80211_hw *hw, void *data, int len)
        case IWL_TM_CMD_APP2DEV_FIXRATE_REQ:
        case IWL_TM_CMD_APP2DEV_LOAD_WOWLAN_FW:
        case IWL_TM_CMD_APP2DEV_GET_FW_VERSION:
+       case IWL_TM_CMD_APP2DEV_GET_DEVICE_ID:
                IWL_DEBUG_INFO(priv, "testmode cmd to driver\n");
                result = iwl_testmode_driver(hw, tb);
                break;
index 60c6db157f2b7af1609c0a78195cf50139492266..26138f110340819fc68407d21e3a827cce101591 100644 (file)
  *
  * @IWL_TM_CMD_APP2DEV_LOAD_WOWLAN_FW: load Weak On Wireless LAN uCode image
  * @IWL_TM_CMD_APP2DEV_GET_FW_VERSION: retrieve uCode version
+ * @IWL_TM_CMD_APP2DEV_GET_DEVICE_ID: retrieve ID information in device
  *
  */
 enum iwl_tm_cmd_t {
@@ -145,7 +146,8 @@ enum iwl_tm_cmd_t {
        IWL_TM_CMD_APP2DEV_DUMP_SRAM            = 21,
        IWL_TM_CMD_APP2DEV_LOAD_WOWLAN_FW       = 22,
        IWL_TM_CMD_APP2DEV_GET_FW_VERSION       = 23,
-       IWL_TM_CMD_MAX                          = 24,
+       IWL_TM_CMD_APP2DEV_GET_DEVICE_ID        = 24,
+       IWL_TM_CMD_MAX                          = 25,
 };
 
 /*
@@ -231,6 +233,10 @@ enum iwl_tm_cmd_t {
  *     When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_GET_FW_VERSION,
  *     IWL_TM_ATTR_FW_VERSION for the uCode version
  *
+ * @IWL_TM_ATTR_DEVICE_ID:
+ *     When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_GET_DEVICE_ID,
+ *     IWL_TM_ATTR_DEVICE_ID for the device ID information
+ *
  */
 enum iwl_tm_attr_t {
        IWL_TM_ATTR_NOT_APPLICABLE              = 0,
@@ -252,7 +258,8 @@ enum iwl_tm_attr_t {
        IWL_TM_ATTR_SRAM_SIZE                   = 16,
        IWL_TM_ATTR_SRAM_DUMP                   = 17,
        IWL_TM_ATTR_FW_VERSION                  = 18,
-       IWL_TM_ATTR_MAX                         = 19,
+       IWL_TM_ATTR_DEVICE_ID                   = 19,
+       IWL_TM_ATTR_MAX                         = 20,
 };
 
 /* uCode trace buffer */