Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0bec12b8 authored by Hsu, Kenny's avatar Hsu, Kenny Committed by Wey-Yi Guy
Browse files

iwlwifi: add device ID information support by testmode



Create new tm command to report devce ID information to userspace
- IWL_TM_CMD_APP2DEV_GET_DEVICE_ID

Signed-off-by: default avatarKenny Hsu <kenny.hsu@intel.com>
Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
parent 5ef15ccc
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -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;
+9 −2
Original line number Diff line number Diff line
@@ -119,6 +119,7 @@
 *
 * @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 */