wil6210: support NL80211_ATTR_WIPHY_RETRY_SHORT

Add support for setting retry limit for short frames,
using NL80211_CMD_SET_WIPHY with the attribute
NL80211_ATTR_WIPHY_RETRY_SHORT.
Update wiphy->retry_short from the FW default when interface
is brought up.

Signed-off-by: Lior David <qca_liord@qca.qualcomm.com>
Signed-off-by: Maya Erez <qca_merez@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
Lior David
2016-11-23 16:06:43 +02:00
committed by Kalle Valo
parent cbf795c195
commit 3fea18d079
4 changed files with 97 additions and 0 deletions

View File

@@ -1599,6 +1599,65 @@ int wmi_ps_dev_profile_cfg(struct wil6210_priv *wil,
return rc;
}
int wmi_set_mgmt_retry(struct wil6210_priv *wil, u8 retry_short)
{
int rc;
struct wmi_set_mgmt_retry_limit_cmd cmd = {
.mgmt_retry_limit = retry_short,
};
struct {
struct wmi_cmd_hdr wmi;
struct wmi_set_mgmt_retry_limit_event evt;
} __packed reply;
wil_dbg_wmi(wil, "Setting mgmt retry short %d\n", retry_short);
if (!test_bit(WMI_FW_CAPABILITY_MGMT_RETRY_LIMIT, wil->fw_capabilities))
return -ENOTSUPP;
reply.evt.status = WMI_FW_STATUS_FAILURE;
rc = wmi_call(wil, WMI_SET_MGMT_RETRY_LIMIT_CMDID, &cmd, sizeof(cmd),
WMI_SET_MGMT_RETRY_LIMIT_EVENTID, &reply, sizeof(reply),
100);
if (rc)
return rc;
if (reply.evt.status != WMI_FW_STATUS_SUCCESS) {
wil_err(wil, "set mgmt retry limit failed with status %d\n",
reply.evt.status);
rc = -EINVAL;
}
return rc;
}
int wmi_get_mgmt_retry(struct wil6210_priv *wil, u8 *retry_short)
{
int rc;
struct {
struct wmi_cmd_hdr wmi;
struct wmi_get_mgmt_retry_limit_event evt;
} __packed reply;
wil_dbg_wmi(wil, "getting mgmt retry short\n");
if (!test_bit(WMI_FW_CAPABILITY_MGMT_RETRY_LIMIT, wil->fw_capabilities))
return -ENOTSUPP;
reply.evt.mgmt_retry_limit = 0;
rc = wmi_call(wil, WMI_GET_MGMT_RETRY_LIMIT_CMDID, NULL, 0,
WMI_GET_MGMT_RETRY_LIMIT_EVENTID, &reply, sizeof(reply),
100);
if (rc)
return rc;
if (retry_short)
*retry_short = reply.evt.mgmt_retry_limit;
return 0;
}
int wmi_abort_scan(struct wil6210_priv *wil)
{
int rc;