mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 00:34:52 +00:00
wil6210: control AMSDU on Tx side of Block Ack
When establishing Block Ack as originator (Tx), control AMSDU flag when sending ADDBA and update status upon establishment flow completion. To be used in AMSDU flows Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
995cdd0ebd
commit
cbcf58661b
4 changed files with 20 additions and 4 deletions
|
@ -114,9 +114,10 @@ static int wil_vring_debugfs_show(struct seq_file *s, void *data)
|
|||
snprintf(name, sizeof(name), "tx_%2d", i);
|
||||
|
||||
seq_printf(s,
|
||||
"\n%pM CID %d TID %d BACK([%d] %d TU) [%3d|%3d] idle %3d%%\n",
|
||||
"\n%pM CID %d TID %d BACK([%d] %d TU A%s) [%3d|%3d] idle %3d%%\n",
|
||||
wil->sta[cid].addr, cid, tid,
|
||||
txdata->agg_wsize, txdata->agg_timeout,
|
||||
txdata->agg_amsdu ? "+" : "-",
|
||||
used, avail, (int)idle);
|
||||
|
||||
wil_print_vring(s, wil, name, vring, '_', 'H');
|
||||
|
|
|
@ -315,6 +315,7 @@ struct vring_tx_data {
|
|||
cycles_t idle, last_idle, begin;
|
||||
u8 agg_wsize; /* agreed aggregation window, 0 - no agg */
|
||||
u16 agg_timeout;
|
||||
u8 agg_amsdu;
|
||||
bool addba_in_progress; /* if set, agg_xxx is for request in progress */
|
||||
};
|
||||
|
||||
|
|
|
@ -608,10 +608,11 @@ static void wmi_evt_ba_status(struct wil6210_priv *wil, int id, void *d,
|
|||
struct wmi_vring_ba_status_event *evt = d;
|
||||
struct vring_tx_data *txdata;
|
||||
|
||||
wil_dbg_wmi(wil, "BACK[%d] %s {%d} timeout %d\n",
|
||||
wil_dbg_wmi(wil, "BACK[%d] %s {%d} timeout %d AMSDU%s\n",
|
||||
evt->ringid,
|
||||
evt->status == WMI_BA_AGREED ? "OK" : "N/A",
|
||||
evt->agg_wsize, __le16_to_cpu(evt->ba_timeout));
|
||||
evt->agg_wsize, __le16_to_cpu(evt->ba_timeout),
|
||||
evt->amsdu ? "+" : "-");
|
||||
|
||||
if (evt->ringid >= WIL6210_MAX_TX_RINGS) {
|
||||
wil_err(wil, "invalid ring id %d\n", evt->ringid);
|
||||
|
@ -621,12 +622,14 @@ static void wmi_evt_ba_status(struct wil6210_priv *wil, int id, void *d,
|
|||
if (evt->status != WMI_BA_AGREED) {
|
||||
evt->ba_timeout = 0;
|
||||
evt->agg_wsize = 0;
|
||||
evt->amsdu = 0;
|
||||
}
|
||||
|
||||
txdata = &wil->vring_tx_data[evt->ringid];
|
||||
|
||||
txdata->agg_timeout = le16_to_cpu(evt->ba_timeout);
|
||||
txdata->agg_wsize = evt->agg_wsize;
|
||||
txdata->agg_amsdu = evt->amsdu;
|
||||
txdata->addba_in_progress = false;
|
||||
}
|
||||
|
||||
|
@ -1172,6 +1175,7 @@ int wmi_addba(struct wil6210_priv *wil, u8 ringid, u8 size, u16 timeout)
|
|||
.ringid = ringid,
|
||||
.agg_max_wsize = size,
|
||||
.ba_timeout = cpu_to_le16(timeout),
|
||||
.amsdu = 0,
|
||||
};
|
||||
|
||||
wil_dbg_wmi(wil, "%s(ring %d size %d timeout %d)\n", __func__,
|
||||
|
|
|
@ -586,6 +586,7 @@ struct wmi_vring_ba_en_cmd {
|
|||
u8 ringid;
|
||||
u8 agg_max_wsize;
|
||||
__le16 ba_timeout;
|
||||
u8 amsdu;
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
|
@ -1052,14 +1053,23 @@ struct wmi_scan_complete_event {
|
|||
enum wmi_vring_ba_status {
|
||||
WMI_BA_AGREED = 0,
|
||||
WMI_BA_NON_AGREED = 1,
|
||||
/* BA_EN in middle of teardown flow */
|
||||
WMI_BA_TD_WIP = 2,
|
||||
/* BA_DIS or BA_EN in middle of BA SETUP flow */
|
||||
WMI_BA_SETUP_WIP = 3,
|
||||
/* BA_EN when the BA session is already active */
|
||||
WMI_BA_SESSION_ACTIVE = 4,
|
||||
/* BA_DIS when the BA session is not active */
|
||||
WMI_BA_SESSION_NOT_ACTIVE = 5,
|
||||
};
|
||||
|
||||
struct wmi_vring_ba_status_event {
|
||||
__le16 status;
|
||||
__le16 status; /* enum wmi_vring_ba_status */
|
||||
u8 reserved[2];
|
||||
u8 ringid;
|
||||
u8 agg_wsize;
|
||||
__le16 ba_timeout;
|
||||
u8 amsdu;
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Reference in a new issue