Commit c0e33fe6 authored by Rakesh Pillai's avatar Rakesh Pillai Committed by Kalle Valo

ath10k: Add peer param map for tlv and non-tlv

The peer param id for PEER_PARAM_USE_FIXED_PWR
is different for tlv and non-tlv firmware. This
causes incorrect peer param to be set by the driver
to the firmware(tlv/non-tlv).

Create seperate peer param map for tlv and non-tlv
firmware and attach the peer param id based on the
firmware type during the init.

Tested HW: WCN3990
Tested FW: WLAN.HL.3.1-00784-QCAHLSWMTPLZ-1
Signed-off-by: default avatarRakesh Pillai <pillair@codeaurora.org>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 3f14b73c
...@@ -169,6 +169,7 @@ struct ath10k_wmi { ...@@ -169,6 +169,7 @@ struct ath10k_wmi {
struct wmi_cmd_map *cmd; struct wmi_cmd_map *cmd;
struct wmi_vdev_param_map *vdev_param; struct wmi_vdev_param_map *vdev_param;
struct wmi_pdev_param_map *pdev_param; struct wmi_pdev_param_map *pdev_param;
struct wmi_peer_param_map *peer_param;
const struct wmi_ops *ops; const struct wmi_ops *ops;
const struct wmi_peer_flags_map *peer_flags; const struct wmi_peer_flags_map *peer_flags;
......
...@@ -430,7 +430,7 @@ ath10k_dbg_sta_write_peer_debug_trigger(struct file *file, ...@@ -430,7 +430,7 @@ ath10k_dbg_sta_write_peer_debug_trigger(struct file *file,
} }
ret = ath10k_wmi_peer_set_param(ar, arsta->arvif->vdev_id, sta->addr, ret = ath10k_wmi_peer_set_param(ar, arsta->arvif->vdev_id, sta->addr,
WMI_PEER_DEBUG, peer_debug_trigger); ar->wmi.peer_param->debug, peer_debug_trigger);
if (ret) { if (ret) {
ath10k_warn(ar, "failed to set param to trigger peer tid logs for station ret: %d\n", ath10k_warn(ar, "failed to set param to trigger peer tid logs for station ret: %d\n",
ret); ret);
......
...@@ -2773,7 +2773,7 @@ static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif, ...@@ -2773,7 +2773,7 @@ static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif,
return -EINVAL; return -EINVAL;
return ath10k_wmi_peer_set_param(ar, arvif->vdev_id, addr, return ath10k_wmi_peer_set_param(ar, arvif->vdev_id, addr,
WMI_PEER_SMPS_STATE, ar->wmi.peer_param->smps_state,
ath10k_smps_map[smps]); ath10k_smps_map[smps]);
} }
...@@ -2930,7 +2930,7 @@ static void ath10k_bss_assoc(struct ieee80211_hw *hw, ...@@ -2930,7 +2930,7 @@ static void ath10k_bss_assoc(struct ieee80211_hw *hw,
* poked with peer param command. * poked with peer param command.
*/ */
ret = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, arvif->bssid, ret = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, arvif->bssid,
WMI_PEER_DUMMY_VAR, 1); ar->wmi.peer_param->dummy_var, 1);
if (ret) { if (ret) {
ath10k_warn(ar, "failed to poke peer %pM param for ps workaround on vdev %i: %d\n", ath10k_warn(ar, "failed to poke peer %pM param for ps workaround on vdev %i: %d\n",
arvif->bssid, arvif->vdev_id, ret); arvif->bssid, arvif->vdev_id, ret);
...@@ -6249,7 +6249,7 @@ static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, ...@@ -6249,7 +6249,7 @@ static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
if (sta && sta->tdls) if (sta && sta->tdls)
ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr, ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
WMI_PEER_AUTHORIZE, 1); ar->wmi.peer_param->authorize, 1);
exit: exit:
mutex_unlock(&ar->conf_mutex); mutex_unlock(&ar->conf_mutex);
...@@ -6340,7 +6340,7 @@ static void ath10k_sta_rc_update_wk(struct work_struct *wk) ...@@ -6340,7 +6340,7 @@ static void ath10k_sta_rc_update_wk(struct work_struct *wk)
sta->addr, bw, mode); sta->addr, bw, mode);
err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr, err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
WMI_PEER_PHYMODE, mode); ar->wmi.peer_param->phymode, mode);
if (err) { if (err) {
ath10k_warn(ar, "failed to update STA %pM peer phymode %d: %d\n", ath10k_warn(ar, "failed to update STA %pM peer phymode %d: %d\n",
sta->addr, mode, err); sta->addr, mode, err);
...@@ -6348,7 +6348,7 @@ static void ath10k_sta_rc_update_wk(struct work_struct *wk) ...@@ -6348,7 +6348,7 @@ static void ath10k_sta_rc_update_wk(struct work_struct *wk)
} }
err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr, err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
WMI_PEER_CHAN_WIDTH, bw); ar->wmi.peer_param->chan_width, bw);
if (err) if (err)
ath10k_warn(ar, "failed to update STA %pM peer bw %d: %d\n", ath10k_warn(ar, "failed to update STA %pM peer bw %d: %d\n",
sta->addr, bw, err); sta->addr, bw, err);
...@@ -6359,7 +6359,7 @@ static void ath10k_sta_rc_update_wk(struct work_struct *wk) ...@@ -6359,7 +6359,7 @@ static void ath10k_sta_rc_update_wk(struct work_struct *wk)
sta->addr, nss); sta->addr, nss);
err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr, err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
WMI_PEER_NSS, nss); ar->wmi.peer_param->nss, nss);
if (err) if (err)
ath10k_warn(ar, "failed to update STA %pM nss %d: %d\n", ath10k_warn(ar, "failed to update STA %pM nss %d: %d\n",
sta->addr, nss, err); sta->addr, nss, err);
...@@ -6370,7 +6370,7 @@ static void ath10k_sta_rc_update_wk(struct work_struct *wk) ...@@ -6370,7 +6370,7 @@ static void ath10k_sta_rc_update_wk(struct work_struct *wk)
sta->addr, smps); sta->addr, smps);
err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr, err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
WMI_PEER_SMPS_STATE, smps); ar->wmi.peer_param->smps_state, smps);
if (err) if (err)
ath10k_warn(ar, "failed to update STA %pM smps %d: %d\n", ath10k_warn(ar, "failed to update STA %pM smps %d: %d\n",
sta->addr, smps, err); sta->addr, smps, err);
...@@ -6444,7 +6444,7 @@ static int ath10k_sta_set_txpwr(struct ieee80211_hw *hw, ...@@ -6444,7 +6444,7 @@ static int ath10k_sta_set_txpwr(struct ieee80211_hw *hw,
mutex_lock(&ar->conf_mutex); mutex_lock(&ar->conf_mutex);
ret = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr, ret = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
WMI_PEER_USE_FIXED_PWR, txpwr); ar->wmi.peer_param->use_fixed_power, txpwr);
if (ret) { if (ret) {
ath10k_warn(ar, "failed to set tx power for station ret: %d\n", ath10k_warn(ar, "failed to set tx power for station ret: %d\n",
ret); ret);
......
...@@ -4206,6 +4206,24 @@ static struct wmi_pdev_param_map wmi_tlv_pdev_param_map = { ...@@ -4206,6 +4206,24 @@ static struct wmi_pdev_param_map wmi_tlv_pdev_param_map = {
.arp_dstaddr = WMI_PDEV_PARAM_UNSUPPORTED, .arp_dstaddr = WMI_PDEV_PARAM_UNSUPPORTED,
}; };
static struct wmi_peer_param_map wmi_tlv_peer_param_map = {
.smps_state = WMI_TLV_PEER_SMPS_STATE,
.ampdu = WMI_TLV_PEER_AMPDU,
.authorize = WMI_TLV_PEER_AUTHORIZE,
.chan_width = WMI_TLV_PEER_CHAN_WIDTH,
.nss = WMI_TLV_PEER_NSS,
.use_4addr = WMI_TLV_PEER_USE_4ADDR,
.membership = WMI_TLV_PEER_MEMBERSHIP,
.user_pos = WMI_TLV_PEER_USERPOS,
.crit_proto_hint_enabled = WMI_TLV_PEER_CRIT_PROTO_HINT_ENABLED,
.tx_fail_cnt_thr = WMI_TLV_PEER_TX_FAIL_CNT_THR,
.set_hw_retry_cts2s = WMI_TLV_PEER_SET_HW_RETRY_CTS2S,
.ibss_atim_win_len = WMI_TLV_PEER_IBSS_ATIM_WINDOW_LENGTH,
.phymode = WMI_TLV_PEER_PHYMODE,
.use_fixed_power = WMI_TLV_PEER_USE_FIXED_PWR,
.dummy_var = WMI_TLV_PEER_DUMMY_VAR,
};
static struct wmi_vdev_param_map wmi_tlv_vdev_param_map = { static struct wmi_vdev_param_map wmi_tlv_vdev_param_map = {
.rts_threshold = WMI_TLV_VDEV_PARAM_RTS_THRESHOLD, .rts_threshold = WMI_TLV_VDEV_PARAM_RTS_THRESHOLD,
.fragmentation_threshold = WMI_TLV_VDEV_PARAM_FRAGMENTATION_THRESHOLD, .fragmentation_threshold = WMI_TLV_VDEV_PARAM_FRAGMENTATION_THRESHOLD,
...@@ -4394,6 +4412,7 @@ void ath10k_wmi_tlv_attach(struct ath10k *ar) ...@@ -4394,6 +4412,7 @@ void ath10k_wmi_tlv_attach(struct ath10k *ar)
ar->wmi.cmd = &wmi_tlv_cmd_map; ar->wmi.cmd = &wmi_tlv_cmd_map;
ar->wmi.vdev_param = &wmi_tlv_vdev_param_map; ar->wmi.vdev_param = &wmi_tlv_vdev_param_map;
ar->wmi.pdev_param = &wmi_tlv_pdev_param_map; ar->wmi.pdev_param = &wmi_tlv_pdev_param_map;
ar->wmi.peer_param = &wmi_tlv_peer_param_map;
ar->wmi.ops = &wmi_tlv_ops; ar->wmi.ops = &wmi_tlv_ops;
ar->wmi.peer_flags = &wmi_tlv_peer_flags_map; ar->wmi.peer_flags = &wmi_tlv_peer_flags_map;
} }
...@@ -528,6 +528,24 @@ enum wmi_tlv_vdev_param { ...@@ -528,6 +528,24 @@ enum wmi_tlv_vdev_param {
WMI_TLV_VDEV_PARAM_IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW_ENABLE, WMI_TLV_VDEV_PARAM_IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW_ENABLE,
}; };
enum wmi_tlv_peer_param {
WMI_TLV_PEER_SMPS_STATE = 0x1, /* see %wmi_peer_smps_state */
WMI_TLV_PEER_AMPDU = 0x2,
WMI_TLV_PEER_AUTHORIZE = 0x3,
WMI_TLV_PEER_CHAN_WIDTH = 0x4,
WMI_TLV_PEER_NSS = 0x5,
WMI_TLV_PEER_USE_4ADDR = 0x6,
WMI_TLV_PEER_MEMBERSHIP = 0x7,
WMI_TLV_PEER_USERPOS = 0x8,
WMI_TLV_PEER_CRIT_PROTO_HINT_ENABLED = 0x9,
WMI_TLV_PEER_TX_FAIL_CNT_THR = 0xa,
WMI_TLV_PEER_SET_HW_RETRY_CTS2S = 0xb,
WMI_TLV_PEER_IBSS_ATIM_WINDOW_LENGTH = 0xc,
WMI_TLV_PEER_PHYMODE = 0xd,
WMI_TLV_PEER_USE_FIXED_PWR = 0xe,
WMI_TLV_PEER_DUMMY_VAR = 0xff,
};
enum wmi_tlv_peer_flags { enum wmi_tlv_peer_flags {
WMI_TLV_PEER_AUTH = 0x00000001, WMI_TLV_PEER_AUTH = 0x00000001,
WMI_TLV_PEER_QOS = 0x00000002, WMI_TLV_PEER_QOS = 0x00000002,
......
...@@ -742,6 +742,19 @@ static struct wmi_cmd_map wmi_10_4_cmd_map = { ...@@ -742,6 +742,19 @@ static struct wmi_cmd_map wmi_10_4_cmd_map = {
.radar_found_cmdid = WMI_10_4_RADAR_FOUND_CMDID, .radar_found_cmdid = WMI_10_4_RADAR_FOUND_CMDID,
}; };
static struct wmi_peer_param_map wmi_peer_param_map = {
.smps_state = WMI_PEER_SMPS_STATE,
.ampdu = WMI_PEER_AMPDU,
.authorize = WMI_PEER_AUTHORIZE,
.chan_width = WMI_PEER_CHAN_WIDTH,
.nss = WMI_PEER_NSS,
.use_4addr = WMI_PEER_USE_4ADDR,
.use_fixed_power = WMI_PEER_USE_FIXED_PWR,
.debug = WMI_PEER_DEBUG,
.phymode = WMI_PEER_PHYMODE,
.dummy_var = WMI_PEER_DUMMY_VAR,
};
/* MAIN WMI VDEV param map */ /* MAIN WMI VDEV param map */
static struct wmi_vdev_param_map wmi_vdev_param_map = { static struct wmi_vdev_param_map wmi_vdev_param_map = {
.rts_threshold = WMI_VDEV_PARAM_RTS_THRESHOLD, .rts_threshold = WMI_VDEV_PARAM_RTS_THRESHOLD,
...@@ -9332,6 +9345,7 @@ int ath10k_wmi_attach(struct ath10k *ar) ...@@ -9332,6 +9345,7 @@ int ath10k_wmi_attach(struct ath10k *ar)
ar->wmi.cmd = &wmi_10_4_cmd_map; ar->wmi.cmd = &wmi_10_4_cmd_map;
ar->wmi.vdev_param = &wmi_10_4_vdev_param_map; ar->wmi.vdev_param = &wmi_10_4_vdev_param_map;
ar->wmi.pdev_param = &wmi_10_4_pdev_param_map; ar->wmi.pdev_param = &wmi_10_4_pdev_param_map;
ar->wmi.peer_param = &wmi_peer_param_map;
ar->wmi.peer_flags = &wmi_10_2_peer_flags_map; ar->wmi.peer_flags = &wmi_10_2_peer_flags_map;
ar->wmi_key_cipher = wmi_key_cipher_suites; ar->wmi_key_cipher = wmi_key_cipher_suites;
break; break;
...@@ -9340,6 +9354,7 @@ int ath10k_wmi_attach(struct ath10k *ar) ...@@ -9340,6 +9354,7 @@ int ath10k_wmi_attach(struct ath10k *ar)
ar->wmi.ops = &wmi_10_2_4_ops; ar->wmi.ops = &wmi_10_2_4_ops;
ar->wmi.vdev_param = &wmi_10_2_4_vdev_param_map; ar->wmi.vdev_param = &wmi_10_2_4_vdev_param_map;
ar->wmi.pdev_param = &wmi_10_2_4_pdev_param_map; ar->wmi.pdev_param = &wmi_10_2_4_pdev_param_map;
ar->wmi.peer_param = &wmi_peer_param_map;
ar->wmi.peer_flags = &wmi_10_2_peer_flags_map; ar->wmi.peer_flags = &wmi_10_2_peer_flags_map;
ar->wmi_key_cipher = wmi_key_cipher_suites; ar->wmi_key_cipher = wmi_key_cipher_suites;
break; break;
...@@ -9348,6 +9363,7 @@ int ath10k_wmi_attach(struct ath10k *ar) ...@@ -9348,6 +9363,7 @@ int ath10k_wmi_attach(struct ath10k *ar)
ar->wmi.ops = &wmi_10_2_ops; ar->wmi.ops = &wmi_10_2_ops;
ar->wmi.vdev_param = &wmi_10x_vdev_param_map; ar->wmi.vdev_param = &wmi_10x_vdev_param_map;
ar->wmi.pdev_param = &wmi_10x_pdev_param_map; ar->wmi.pdev_param = &wmi_10x_pdev_param_map;
ar->wmi.peer_param = &wmi_peer_param_map;
ar->wmi.peer_flags = &wmi_10_2_peer_flags_map; ar->wmi.peer_flags = &wmi_10_2_peer_flags_map;
ar->wmi_key_cipher = wmi_key_cipher_suites; ar->wmi_key_cipher = wmi_key_cipher_suites;
break; break;
...@@ -9356,6 +9372,7 @@ int ath10k_wmi_attach(struct ath10k *ar) ...@@ -9356,6 +9372,7 @@ int ath10k_wmi_attach(struct ath10k *ar)
ar->wmi.ops = &wmi_10_1_ops; ar->wmi.ops = &wmi_10_1_ops;
ar->wmi.vdev_param = &wmi_10x_vdev_param_map; ar->wmi.vdev_param = &wmi_10x_vdev_param_map;
ar->wmi.pdev_param = &wmi_10x_pdev_param_map; ar->wmi.pdev_param = &wmi_10x_pdev_param_map;
ar->wmi.peer_param = &wmi_peer_param_map;
ar->wmi.peer_flags = &wmi_10x_peer_flags_map; ar->wmi.peer_flags = &wmi_10x_peer_flags_map;
ar->wmi_key_cipher = wmi_key_cipher_suites; ar->wmi_key_cipher = wmi_key_cipher_suites;
break; break;
...@@ -9364,6 +9381,7 @@ int ath10k_wmi_attach(struct ath10k *ar) ...@@ -9364,6 +9381,7 @@ int ath10k_wmi_attach(struct ath10k *ar)
ar->wmi.ops = &wmi_ops; ar->wmi.ops = &wmi_ops;
ar->wmi.vdev_param = &wmi_vdev_param_map; ar->wmi.vdev_param = &wmi_vdev_param_map;
ar->wmi.pdev_param = &wmi_pdev_param_map; ar->wmi.pdev_param = &wmi_pdev_param_map;
ar->wmi.peer_param = &wmi_peer_param_map;
ar->wmi.peer_flags = &wmi_peer_flags_map; ar->wmi.peer_flags = &wmi_peer_flags_map;
ar->wmi_key_cipher = wmi_key_cipher_suites; ar->wmi_key_cipher = wmi_key_cipher_suites;
break; break;
......
...@@ -5071,6 +5071,25 @@ enum wmi_rate_preamble { ...@@ -5071,6 +5071,25 @@ enum wmi_rate_preamble {
/* Value to disable fixed rate setting */ /* Value to disable fixed rate setting */
#define WMI_FIXED_RATE_NONE (0xff) #define WMI_FIXED_RATE_NONE (0xff)
struct wmi_peer_param_map {
u32 smps_state;
u32 ampdu;
u32 authorize;
u32 chan_width;
u32 nss;
u32 use_4addr;
u32 membership;
u32 use_fixed_power;
u32 user_pos;
u32 crit_proto_hint_enabled;
u32 tx_fail_cnt_thr;
u32 set_hw_retry_cts2s;
u32 ibss_atim_win_len;
u32 debug;
u32 phymode;
u32 dummy_var;
};
struct wmi_vdev_param_map { struct wmi_vdev_param_map {
u32 rts_threshold; u32 rts_threshold;
u32 fragmentation_threshold; u32 fragmentation_threshold;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment