mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-10 06:34:17 +08:00
wil6210: allow to configure ADDBA request
For manual ADDBA configuration, allow to set desired window size or disable automatic mechanism. Introduce module parameter (int) agg_wsize. It can be changed on run time, will be taken into account on the next connect. Interpretation: - <0 - disable automatic ADDBA; intended for manual testing through debugfs - 0 - use automatically calculated window size - >0 - use this for window size. Clipped by maximum supported by the hardware with current environment. Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
3a124ed645
commit
3a3def8dbe
@ -437,7 +437,7 @@ void wil_back_tx_flush(struct wil6210_priv *wil)
|
||||
mutex_unlock(&wil->back_tx_mutex);
|
||||
}
|
||||
|
||||
int wil_addba_tx_request(struct wil6210_priv *wil, u8 ringid)
|
||||
int wil_addba_tx_request(struct wil6210_priv *wil, u8 ringid, u16 wsize)
|
||||
{
|
||||
struct wil_back_tx *req = kzalloc(sizeof(*req), GFP_KERNEL);
|
||||
|
||||
@ -445,7 +445,7 @@ int wil_addba_tx_request(struct wil6210_priv *wil, u8 ringid)
|
||||
return -ENOMEM;
|
||||
|
||||
req->ringid = ringid;
|
||||
req->agg_wsize = wil_agg_size(wil, 0);
|
||||
req->agg_wsize = wil_agg_size(wil, wsize);
|
||||
req->agg_timeout = 0;
|
||||
|
||||
mutex_lock(&wil->back_tx_mutex);
|
||||
|
@ -701,8 +701,8 @@ int wil_vring_init_tx(struct wil6210_priv *wil, int id, int size,
|
||||
vring->hwtail = le32_to_cpu(reply.cmd.tx_vring_tail_ptr);
|
||||
|
||||
txdata->enabled = 1;
|
||||
if (wil->sta[cid].data_port_open)
|
||||
wil_addba_tx_request(wil, id);
|
||||
if (wil->sta[cid].data_port_open && (agg_wsize >= 0))
|
||||
wil_addba_tx_request(wil, id, agg_wsize);
|
||||
|
||||
return 0;
|
||||
out_free:
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
extern bool no_fw_recovery;
|
||||
extern unsigned int mtu_max;
|
||||
extern int agg_wsize;
|
||||
|
||||
#define WIL_NAME "wil6210"
|
||||
#define WIL_FW_NAME "wil6210.fw"
|
||||
@ -613,7 +614,7 @@ int wil_addba_rx_request(struct wil6210_priv *wil, u8 cidxtid,
|
||||
__le16 ba_timeout, __le16 ba_seq_ctrl);
|
||||
void wil_back_rx_worker(struct work_struct *work);
|
||||
void wil_back_rx_flush(struct wil6210_priv *wil);
|
||||
int wil_addba_tx_request(struct wil6210_priv *wil, u8 ringid);
|
||||
int wil_addba_tx_request(struct wil6210_priv *wil, u8 ringid, u16 wsize);
|
||||
void wil_back_tx_worker(struct work_struct *work);
|
||||
void wil_back_tx_flush(struct wil6210_priv *wil);
|
||||
|
||||
|
@ -27,6 +27,11 @@ static uint max_assoc_sta = 1;
|
||||
module_param(max_assoc_sta, uint, S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(max_assoc_sta, " Max number of stations associated to the AP");
|
||||
|
||||
int agg_wsize; /* = 0; */
|
||||
module_param(agg_wsize, int, S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(agg_wsize, " Window size for Tx Block Ack after connect;"
|
||||
" 0 - use default; < 0 - don't auto-establish");
|
||||
|
||||
/**
|
||||
* WMI event receiving - theory of operations
|
||||
*
|
||||
@ -544,7 +549,7 @@ static void wmi_evt_eapol_rx(struct wil6210_priv *wil, int id,
|
||||
}
|
||||
}
|
||||
|
||||
static void wil_addba_tx_cid(struct wil6210_priv *wil, u8 cid)
|
||||
static void wil_addba_tx_cid(struct wil6210_priv *wil, u8 cid, u16 wsize)
|
||||
{
|
||||
struct vring_tx_data *t;
|
||||
int i;
|
||||
@ -556,7 +561,7 @@ static void wil_addba_tx_cid(struct wil6210_priv *wil, u8 cid)
|
||||
if (!t->enabled)
|
||||
continue;
|
||||
|
||||
wil_addba_tx_request(wil, i);
|
||||
wil_addba_tx_request(wil, i, wsize);
|
||||
}
|
||||
}
|
||||
|
||||
@ -574,7 +579,8 @@ static void wmi_evt_linkup(struct wil6210_priv *wil, int id, void *d, int len)
|
||||
}
|
||||
|
||||
wil->sta[cid].data_port_open = true;
|
||||
wil_addba_tx_cid(wil, cid);
|
||||
if (agg_wsize >= 0)
|
||||
wil_addba_tx_cid(wil, cid, agg_wsize);
|
||||
netif_carrier_on(ndev);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user