Loading drivers/net/wireless/ath/wil6210/rx_reorder.c +10 −2 Original line number Diff line number Diff line Loading @@ -343,8 +343,16 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock) wil_err(wil, "BACK requested unsupported ba_policy == 1\n"); status = WLAN_STATUS_INVALID_QOS_PARAM; } if (status == WLAN_STATUS_SUCCESS) agg_wsize = wil_agg_size(wil, req_agg_wsize); if (status == WLAN_STATUS_SUCCESS) { if (req_agg_wsize == 0) { wil_dbg_misc(wil, "Suggest BACK wsize %d\n", WIL_MAX_AGG_WSIZE); agg_wsize = WIL_MAX_AGG_WSIZE; } else { agg_wsize = min_t(u16, WIL_MAX_AGG_WSIZE, req_agg_wsize); } } rc = wmi_addba_rx_resp(wil, cid, tid, dialog_token, status, agg_amsdu, agg_wsize, agg_timeout); Loading drivers/net/wireless/ath/wil6210/txrx.c +22 −2 Original line number Diff line number Diff line Loading @@ -37,6 +37,10 @@ bool rx_align_2; module_param(rx_align_2, bool, 0444); MODULE_PARM_DESC(rx_align_2, " align Rx buffers on 4*n+2, default - no"); bool rx_large_buf; module_param(rx_large_buf, bool, 0444); MODULE_PARM_DESC(rx_large_buf, " allocate 8KB RX buffers, default - no"); static inline uint wil_rx_snaplen(void) { return rx_align_2 ? 6 : 0; Loading Loading @@ -255,7 +259,7 @@ static int wil_vring_alloc_skb(struct wil6210_priv *wil, struct vring *vring, u32 i, int headroom) { struct device *dev = wil_to_dev(wil); unsigned int sz = mtu_max + ETH_HLEN + wil_rx_snaplen(); unsigned int sz = wil->rx_buf_len + ETH_HLEN + wil_rx_snaplen(); struct vring_rx_desc dd, *d = ⅆ volatile struct vring_rx_desc *_d = &vring->va[i].rx; dma_addr_t pa; Loading Loading @@ -419,7 +423,7 @@ static struct sk_buff *wil_vring_reap_rx(struct wil6210_priv *wil, struct sk_buff *skb; dma_addr_t pa; unsigned int snaplen = wil_rx_snaplen(); unsigned int sz = mtu_max + ETH_HLEN + snaplen; unsigned int sz = wil->rx_buf_len + ETH_HLEN + snaplen; u16 dmalen; u8 ftype; int cid; Loading Loading @@ -780,6 +784,20 @@ void wil_rx_handle(struct wil6210_priv *wil, int *quota) wil_rx_refill(wil, v->size); } static void wil_rx_buf_len_init(struct wil6210_priv *wil) { wil->rx_buf_len = rx_large_buf ? WIL_MAX_ETH_MTU : TXRX_BUF_LEN_DEFAULT - WIL_MAX_MPDU_OVERHEAD; if (mtu_max > wil->rx_buf_len) { /* do not allow RX buffers to be smaller than mtu_max, for * backward compatibility (mtu_max parameter was also used * to support receiving large packets) */ wil_info(wil, "Override RX buffer to mtu_max(%d)\n", mtu_max); wil->rx_buf_len = mtu_max; } } int wil_rx_init(struct wil6210_priv *wil, u16 size) { struct vring *vring = &wil->vring_rx; Loading @@ -792,6 +810,8 @@ int wil_rx_init(struct wil6210_priv *wil, u16 size) return -EINVAL; } wil_rx_buf_len_init(wil); vring->size = size; rc = wil_vring_alloc(wil, vring); if (rc) Loading drivers/net/wireless/ath/wil6210/wil6210.h +2 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ extern unsigned short rx_ring_overflow_thrsh; extern int agg_wsize; extern u32 vring_idle_trsh; extern bool rx_align_2; extern bool rx_large_buf; extern bool debug_fw; extern bool disable_ap_sme; Loading Loading @@ -662,6 +663,7 @@ struct wil6210_priv { struct work_struct probe_client_worker; /* DMA related */ struct vring vring_rx; unsigned int rx_buf_len; struct vring vring_tx[WIL6210_MAX_TX_RINGS]; struct vring_tx_data vring_tx_data[WIL6210_MAX_TX_RINGS]; u8 vring2cid_tid[WIL6210_MAX_TX_RINGS][2]; /* [0] - CID, [1] - TID */ Loading drivers/net/wireless/ath/wil6210/wmi.c +2 −1 Original line number Diff line number Diff line Loading @@ -1437,7 +1437,8 @@ int wmi_rx_chain_add(struct wil6210_priv *wil, struct vring *vring) struct wmi_cfg_rx_chain_cmd cmd = { .action = WMI_RX_CHAIN_ADD, .rx_sw_ring = { .max_mpdu_size = cpu_to_le16(wil_mtu2macbuf(mtu_max)), .max_mpdu_size = cpu_to_le16( wil_mtu2macbuf(wil->rx_buf_len)), .ring_mem_base = cpu_to_le64(vring->pa), .ring_size = cpu_to_le16(vring->size), }, Loading Loading
drivers/net/wireless/ath/wil6210/rx_reorder.c +10 −2 Original line number Diff line number Diff line Loading @@ -343,8 +343,16 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock) wil_err(wil, "BACK requested unsupported ba_policy == 1\n"); status = WLAN_STATUS_INVALID_QOS_PARAM; } if (status == WLAN_STATUS_SUCCESS) agg_wsize = wil_agg_size(wil, req_agg_wsize); if (status == WLAN_STATUS_SUCCESS) { if (req_agg_wsize == 0) { wil_dbg_misc(wil, "Suggest BACK wsize %d\n", WIL_MAX_AGG_WSIZE); agg_wsize = WIL_MAX_AGG_WSIZE; } else { agg_wsize = min_t(u16, WIL_MAX_AGG_WSIZE, req_agg_wsize); } } rc = wmi_addba_rx_resp(wil, cid, tid, dialog_token, status, agg_amsdu, agg_wsize, agg_timeout); Loading
drivers/net/wireless/ath/wil6210/txrx.c +22 −2 Original line number Diff line number Diff line Loading @@ -37,6 +37,10 @@ bool rx_align_2; module_param(rx_align_2, bool, 0444); MODULE_PARM_DESC(rx_align_2, " align Rx buffers on 4*n+2, default - no"); bool rx_large_buf; module_param(rx_large_buf, bool, 0444); MODULE_PARM_DESC(rx_large_buf, " allocate 8KB RX buffers, default - no"); static inline uint wil_rx_snaplen(void) { return rx_align_2 ? 6 : 0; Loading Loading @@ -255,7 +259,7 @@ static int wil_vring_alloc_skb(struct wil6210_priv *wil, struct vring *vring, u32 i, int headroom) { struct device *dev = wil_to_dev(wil); unsigned int sz = mtu_max + ETH_HLEN + wil_rx_snaplen(); unsigned int sz = wil->rx_buf_len + ETH_HLEN + wil_rx_snaplen(); struct vring_rx_desc dd, *d = ⅆ volatile struct vring_rx_desc *_d = &vring->va[i].rx; dma_addr_t pa; Loading Loading @@ -419,7 +423,7 @@ static struct sk_buff *wil_vring_reap_rx(struct wil6210_priv *wil, struct sk_buff *skb; dma_addr_t pa; unsigned int snaplen = wil_rx_snaplen(); unsigned int sz = mtu_max + ETH_HLEN + snaplen; unsigned int sz = wil->rx_buf_len + ETH_HLEN + snaplen; u16 dmalen; u8 ftype; int cid; Loading Loading @@ -780,6 +784,20 @@ void wil_rx_handle(struct wil6210_priv *wil, int *quota) wil_rx_refill(wil, v->size); } static void wil_rx_buf_len_init(struct wil6210_priv *wil) { wil->rx_buf_len = rx_large_buf ? WIL_MAX_ETH_MTU : TXRX_BUF_LEN_DEFAULT - WIL_MAX_MPDU_OVERHEAD; if (mtu_max > wil->rx_buf_len) { /* do not allow RX buffers to be smaller than mtu_max, for * backward compatibility (mtu_max parameter was also used * to support receiving large packets) */ wil_info(wil, "Override RX buffer to mtu_max(%d)\n", mtu_max); wil->rx_buf_len = mtu_max; } } int wil_rx_init(struct wil6210_priv *wil, u16 size) { struct vring *vring = &wil->vring_rx; Loading @@ -792,6 +810,8 @@ int wil_rx_init(struct wil6210_priv *wil, u16 size) return -EINVAL; } wil_rx_buf_len_init(wil); vring->size = size; rc = wil_vring_alloc(wil, vring); if (rc) Loading
drivers/net/wireless/ath/wil6210/wil6210.h +2 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ extern unsigned short rx_ring_overflow_thrsh; extern int agg_wsize; extern u32 vring_idle_trsh; extern bool rx_align_2; extern bool rx_large_buf; extern bool debug_fw; extern bool disable_ap_sme; Loading Loading @@ -662,6 +663,7 @@ struct wil6210_priv { struct work_struct probe_client_worker; /* DMA related */ struct vring vring_rx; unsigned int rx_buf_len; struct vring vring_tx[WIL6210_MAX_TX_RINGS]; struct vring_tx_data vring_tx_data[WIL6210_MAX_TX_RINGS]; u8 vring2cid_tid[WIL6210_MAX_TX_RINGS][2]; /* [0] - CID, [1] - TID */ Loading
drivers/net/wireless/ath/wil6210/wmi.c +2 −1 Original line number Diff line number Diff line Loading @@ -1437,7 +1437,8 @@ int wmi_rx_chain_add(struct wil6210_priv *wil, struct vring *vring) struct wmi_cfg_rx_chain_cmd cmd = { .action = WMI_RX_CHAIN_ADD, .rx_sw_ring = { .max_mpdu_size = cpu_to_le16(wil_mtu2macbuf(mtu_max)), .max_mpdu_size = cpu_to_le16( wil_mtu2macbuf(wil->rx_buf_len)), .ring_mem_base = cpu_to_le64(vring->pa), .ring_size = cpu_to_le16(vring->size), }, Loading