wlcore/wl18xx/wl12xx: aggregation buffer size set
Aggregation buffer size is set separately per 18xx/12xx chip family. For 18xx aggragation buffer is set to 13 pages to utilize all the available tx/rx descriptors for aggregation. [Arik - remove redundant parts from the patch] Signed-off-by: Igal Chernobelsky <igalc@ti.com> Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <luca@coelho.fi>
This commit is contained in:
parent
f1c434df67
commit
26a309c758
8 changed files with 14 additions and 9 deletions
|
@ -1630,7 +1630,7 @@ static int __devinit wl12xx_probe(struct platform_device *pdev)
|
||||||
struct ieee80211_hw *hw;
|
struct ieee80211_hw *hw;
|
||||||
struct wl12xx_priv *priv;
|
struct wl12xx_priv *priv;
|
||||||
|
|
||||||
hw = wlcore_alloc_hw(sizeof(*priv));
|
hw = wlcore_alloc_hw(sizeof(*priv), WL12XX_AGGR_BUFFER_SIZE);
|
||||||
if (IS_ERR(hw)) {
|
if (IS_ERR(hw)) {
|
||||||
wl1271_error("can't allocate hw");
|
wl1271_error("can't allocate hw");
|
||||||
return PTR_ERR(hw);
|
return PTR_ERR(hw);
|
||||||
|
|
|
@ -38,6 +38,8 @@
|
||||||
#define WL128X_SUBTYPE_VER 2
|
#define WL128X_SUBTYPE_VER 2
|
||||||
#define WL128X_MINOR_VER 115
|
#define WL128X_MINOR_VER 115
|
||||||
|
|
||||||
|
#define WL12XX_AGGR_BUFFER_SIZE (4 * PAGE_SIZE)
|
||||||
|
|
||||||
#define WL12XX_NUM_TX_DESCRIPTORS 16
|
#define WL12XX_NUM_TX_DESCRIPTORS 16
|
||||||
#define WL12XX_NUM_RX_DESCRIPTORS 8
|
#define WL12XX_NUM_RX_DESCRIPTORS 8
|
||||||
|
|
||||||
|
|
|
@ -1380,7 +1380,7 @@ static int __devinit wl18xx_probe(struct platform_device *pdev)
|
||||||
struct wl18xx_priv *priv;
|
struct wl18xx_priv *priv;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
hw = wlcore_alloc_hw(sizeof(*priv));
|
hw = wlcore_alloc_hw(sizeof(*priv), WL18XX_AGGR_BUFFER_SIZE);
|
||||||
if (IS_ERR(hw)) {
|
if (IS_ERR(hw)) {
|
||||||
wl1271_error("can't allocate hw");
|
wl1271_error("can't allocate hw");
|
||||||
ret = PTR_ERR(hw);
|
ret = PTR_ERR(hw);
|
||||||
|
|
|
@ -33,6 +33,8 @@
|
||||||
|
|
||||||
#define WL18XX_CMD_MAX_SIZE 740
|
#define WL18XX_CMD_MAX_SIZE 740
|
||||||
|
|
||||||
|
#define WL18XX_AGGR_BUFFER_SIZE (13 * PAGE_SIZE)
|
||||||
|
|
||||||
#define WL18XX_NUM_TX_DESCRIPTORS 32
|
#define WL18XX_NUM_TX_DESCRIPTORS 32
|
||||||
#define WL18XX_NUM_RX_DESCRIPTORS 32
|
#define WL18XX_NUM_RX_DESCRIPTORS 32
|
||||||
|
|
||||||
|
|
|
@ -5313,7 +5313,7 @@ static int wl1271_init_ieee80211(struct wl1271 *wl)
|
||||||
|
|
||||||
#define WL1271_DEFAULT_CHANNEL 0
|
#define WL1271_DEFAULT_CHANNEL 0
|
||||||
|
|
||||||
struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size)
|
struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size, u32 aggr_buf_size)
|
||||||
{
|
{
|
||||||
struct ieee80211_hw *hw;
|
struct ieee80211_hw *hw;
|
||||||
struct wl1271 *wl;
|
struct wl1271 *wl;
|
||||||
|
@ -5398,12 +5398,13 @@ struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size)
|
||||||
mutex_init(&wl->mutex);
|
mutex_init(&wl->mutex);
|
||||||
mutex_init(&wl->flush_mutex);
|
mutex_init(&wl->flush_mutex);
|
||||||
|
|
||||||
order = get_order(WL1271_AGGR_BUFFER_SIZE);
|
order = get_order(aggr_buf_size);
|
||||||
wl->aggr_buf = (u8 *)__get_free_pages(GFP_KERNEL, order);
|
wl->aggr_buf = (u8 *)__get_free_pages(GFP_KERNEL, order);
|
||||||
if (!wl->aggr_buf) {
|
if (!wl->aggr_buf) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto err_wq;
|
goto err_wq;
|
||||||
}
|
}
|
||||||
|
wl->aggr_buf_size = aggr_buf_size;
|
||||||
|
|
||||||
wl->dummy_packet = wl12xx_alloc_dummy_packet(wl);
|
wl->dummy_packet = wl12xx_alloc_dummy_packet(wl);
|
||||||
if (!wl->dummy_packet) {
|
if (!wl->dummy_packet) {
|
||||||
|
@ -5466,8 +5467,7 @@ int wlcore_free_hw(struct wl1271 *wl)
|
||||||
device_remove_file(wl->dev, &dev_attr_bt_coex_state);
|
device_remove_file(wl->dev, &dev_attr_bt_coex_state);
|
||||||
free_page((unsigned long)wl->fwlog);
|
free_page((unsigned long)wl->fwlog);
|
||||||
dev_kfree_skb(wl->dummy_packet);
|
dev_kfree_skb(wl->dummy_packet);
|
||||||
free_pages((unsigned long)wl->aggr_buf,
|
free_pages((unsigned long)wl->aggr_buf, get_order(wl->aggr_buf_size));
|
||||||
get_order(WL1271_AGGR_BUFFER_SIZE));
|
|
||||||
|
|
||||||
wl1271_debugfs_exit(wl);
|
wl1271_debugfs_exit(wl);
|
||||||
|
|
||||||
|
|
|
@ -221,7 +221,7 @@ int wlcore_rx(struct wl1271 *wl, struct wl_fw_status_1 *status)
|
||||||
pkt_len = wlcore_rx_get_buf_size(wl, des);
|
pkt_len = wlcore_rx_get_buf_size(wl, des);
|
||||||
align_pkt_len = wlcore_rx_get_align_buf_size(wl,
|
align_pkt_len = wlcore_rx_get_align_buf_size(wl,
|
||||||
pkt_len);
|
pkt_len);
|
||||||
if (buf_size + align_pkt_len > WL1271_AGGR_BUFFER_SIZE)
|
if (buf_size + align_pkt_len > wl->aggr_buf_size)
|
||||||
break;
|
break;
|
||||||
buf_size += align_pkt_len;
|
buf_size += align_pkt_len;
|
||||||
rx_counter++;
|
rx_counter++;
|
||||||
|
|
|
@ -193,7 +193,7 @@ static int wl1271_tx_allocate(struct wl1271 *wl, struct wl12xx_vif *wlvif,
|
||||||
int id, ret = -EBUSY, ac;
|
int id, ret = -EBUSY, ac;
|
||||||
u32 spare_blocks;
|
u32 spare_blocks;
|
||||||
|
|
||||||
if (buf_offset + total_len > WL1271_AGGR_BUFFER_SIZE)
|
if (buf_offset + total_len > wl->aggr_buf_size)
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
|
|
||||||
spare_blocks = wlcore_hw_get_spare_blocks(wl, is_gem);
|
spare_blocks = wlcore_hw_get_spare_blocks(wl, is_gem);
|
||||||
|
|
|
@ -237,6 +237,7 @@ struct wl1271 {
|
||||||
|
|
||||||
/* Intermediate buffer, used for packet aggregation */
|
/* Intermediate buffer, used for packet aggregation */
|
||||||
u8 *aggr_buf;
|
u8 *aggr_buf;
|
||||||
|
u32 aggr_buf_size;
|
||||||
|
|
||||||
/* Reusable dummy packet template */
|
/* Reusable dummy packet template */
|
||||||
struct sk_buff *dummy_packet;
|
struct sk_buff *dummy_packet;
|
||||||
|
@ -399,7 +400,7 @@ struct wl1271 {
|
||||||
|
|
||||||
int __devinit wlcore_probe(struct wl1271 *wl, struct platform_device *pdev);
|
int __devinit wlcore_probe(struct wl1271 *wl, struct platform_device *pdev);
|
||||||
int __devexit wlcore_remove(struct platform_device *pdev);
|
int __devexit wlcore_remove(struct platform_device *pdev);
|
||||||
struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size);
|
struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size, u32 aggr_buf_size);
|
||||||
int wlcore_free_hw(struct wl1271 *wl);
|
int wlcore_free_hw(struct wl1271 *wl);
|
||||||
int wlcore_set_key(struct wl1271 *wl, enum set_key_cmd cmd,
|
int wlcore_set_key(struct wl1271 *wl, enum set_key_cmd cmd,
|
||||||
struct ieee80211_vif *vif,
|
struct ieee80211_vif *vif,
|
||||||
|
|
Loading…
Add table
Reference in a new issue