|
@@ -276,7 +276,7 @@ static int iwl_testmode_reg(struct ieee80211_hw *hw, struct nlattr **tb)
|
|
|
IWL_INFO(priv, "testmode register access command offset 0x%x\n", ofs);
|
|
|
|
|
|
switch (nla_get_u32(tb[IWL_TM_ATTR_COMMAND])) {
|
|
|
- case IWL_TM_CMD_APP2DEV_REG_READ32:
|
|
|
+ case IWL_TM_CMD_APP2DEV_DIRECT_REG_READ32:
|
|
|
val32 = iwl_read32(bus(priv), ofs);
|
|
|
IWL_INFO(priv, "32bit value to read 0x%x\n", val32);
|
|
|
|
|
@@ -291,7 +291,7 @@ static int iwl_testmode_reg(struct ieee80211_hw *hw, struct nlattr **tb)
|
|
|
IWL_DEBUG_INFO(priv,
|
|
|
"Error sending msg : %d\n", status);
|
|
|
break;
|
|
|
- case IWL_TM_CMD_APP2DEV_REG_WRITE32:
|
|
|
+ case IWL_TM_CMD_APP2DEV_DIRECT_REG_WRITE32:
|
|
|
if (!tb[IWL_TM_ATTR_REG_VALUE32]) {
|
|
|
IWL_DEBUG_INFO(priv,
|
|
|
"Error finding value to write\n");
|
|
@@ -302,7 +302,7 @@ static int iwl_testmode_reg(struct ieee80211_hw *hw, struct nlattr **tb)
|
|
|
iwl_write32(bus(priv), ofs, val32);
|
|
|
}
|
|
|
break;
|
|
|
- case IWL_TM_CMD_APP2DEV_REG_WRITE8:
|
|
|
+ case IWL_TM_CMD_APP2DEV_DIRECT_REG_WRITE8:
|
|
|
if (!tb[IWL_TM_ATTR_REG_VALUE8]) {
|
|
|
IWL_DEBUG_INFO(priv, "Error finding value to write\n");
|
|
|
return -ENOMSG;
|
|
@@ -312,6 +312,32 @@ static int iwl_testmode_reg(struct ieee80211_hw *hw, struct nlattr **tb)
|
|
|
iwl_write8(bus(priv), ofs, val8);
|
|
|
}
|
|
|
break;
|
|
|
+ case IWL_TM_CMD_APP2DEV_INDIRECT_REG_READ32:
|
|
|
+ val32 = iwl_read_prph(bus(priv), ofs);
|
|
|
+ IWL_INFO(priv, "32bit value to read 0x%x\n", val32);
|
|
|
+
|
|
|
+ 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_REG_VALUE32, val32);
|
|
|
+ status = cfg80211_testmode_reply(skb);
|
|
|
+ if (status < 0)
|
|
|
+ IWL_DEBUG_INFO(priv,
|
|
|
+ "Error sending msg : %d\n", status);
|
|
|
+ break;
|
|
|
+ case IWL_TM_CMD_APP2DEV_INDIRECT_REG_WRITE32:
|
|
|
+ if (!tb[IWL_TM_ATTR_REG_VALUE32]) {
|
|
|
+ IWL_DEBUG_INFO(priv,
|
|
|
+ "Error finding value to write\n");
|
|
|
+ return -ENOMSG;
|
|
|
+ } else {
|
|
|
+ val32 = nla_get_u32(tb[IWL_TM_ATTR_REG_VALUE32]);
|
|
|
+ IWL_INFO(priv, "32bit value to write 0x%x\n", val32);
|
|
|
+ iwl_write_prph(bus(priv), ofs, val32);
|
|
|
+ }
|
|
|
+ break;
|
|
|
default:
|
|
|
IWL_DEBUG_INFO(priv, "Unknown testmode register command ID\n");
|
|
|
return -ENOSYS;
|
|
@@ -665,9 +691,11 @@ int iwlagn_mac_testmode_cmd(struct ieee80211_hw *hw, void *data, int len)
|
|
|
IWL_DEBUG_INFO(priv, "testmode cmd to uCode\n");
|
|
|
result = iwl_testmode_ucode(hw, tb);
|
|
|
break;
|
|
|
- case IWL_TM_CMD_APP2DEV_REG_READ32:
|
|
|
- case IWL_TM_CMD_APP2DEV_REG_WRITE32:
|
|
|
- case IWL_TM_CMD_APP2DEV_REG_WRITE8:
|
|
|
+ case IWL_TM_CMD_APP2DEV_DIRECT_REG_READ32:
|
|
|
+ case IWL_TM_CMD_APP2DEV_DIRECT_REG_WRITE32:
|
|
|
+ case IWL_TM_CMD_APP2DEV_DIRECT_REG_WRITE8:
|
|
|
+ case IWL_TM_CMD_APP2DEV_INDIRECT_REG_READ32:
|
|
|
+ case IWL_TM_CMD_APP2DEV_INDIRECT_REG_WRITE32:
|
|
|
IWL_DEBUG_INFO(priv, "testmode cmd to register\n");
|
|
|
result = iwl_testmode_reg(hw, tb);
|
|
|
break;
|