aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mwifiex/sdio.c
diff options
context:
space:
mode:
authorAmitkumar Karwar <akarwar@marvell.com>2013-05-17 20:54:51 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-05-22 15:09:12 -0400
commitc23b7c8f719317983c59b01873b51394fde26907 (patch)
treee06afaa7ec792f97c0ed49a9b539cc03282e7e54 /drivers/net/wireless/mwifiex/sdio.c
parentdc468e3d420d9042d18f240196dc72ba0306ee89 (diff)
mwifiex: code rearrangement in multiport aggregation path
There are some macros defined for multiport aggregation calculations. As we may need to add some more code to accomodate new chipsets, we will change them to inline functions. Also, use dynamic allocation for Rx buffer array. Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Bing Zhao <bzhao@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/mwifiex/sdio.c')
-rw-r--r--drivers/net/wireless/mwifiex/sdio.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/net/wireless/mwifiex/sdio.c b/drivers/net/wireless/mwifiex/sdio.c
index 1892e889d41e..4b196dc97463 100644
--- a/drivers/net/wireless/mwifiex/sdio.c
+++ b/drivers/net/wireless/mwifiex/sdio.c
@@ -1084,10 +1084,10 @@ static int mwifiex_sdio_card_to_host_mp_aggr(struct mwifiex_adapter *adapter,
1084 if (f_aggr_cur) { 1084 if (f_aggr_cur) {
1085 dev_dbg(adapter->dev, "info: current packet aggregation\n"); 1085 dev_dbg(adapter->dev, "info: current packet aggregation\n");
1086 /* Curr pkt can be aggregated */ 1086 /* Curr pkt can be aggregated */
1087 MP_RX_AGGR_SETUP(card, skb, port); 1087 mp_rx_aggr_setup(card, skb, port);
1088 1088
1089 if (MP_RX_AGGR_PKT_LIMIT_REACHED(card) || 1089 if (MP_RX_AGGR_PKT_LIMIT_REACHED(card) ||
1090 MP_RX_AGGR_PORT_LIMIT_REACHED(card)) { 1090 mp_rx_aggr_port_limit_reached(card)) {
1091 dev_dbg(adapter->dev, "info: %s: aggregated packet " 1091 dev_dbg(adapter->dev, "info: %s: aggregated packet "
1092 "limit reached\n", __func__); 1092 "limit reached\n", __func__);
1093 /* No more pkts allowed in Aggr buf, rx it */ 1093 /* No more pkts allowed in Aggr buf, rx it */
@@ -1358,7 +1358,7 @@ static int mwifiex_host_to_card_mp_aggr(struct mwifiex_adapter *adapter,
1358 __func__); 1358 __func__);
1359 1359
1360 if (MP_TX_AGGR_IN_PROGRESS(card)) { 1360 if (MP_TX_AGGR_IN_PROGRESS(card)) {
1361 if (!MP_TX_AGGR_PORT_LIMIT_REACHED(card) && 1361 if (!mp_tx_aggr_port_limit_reached(card) &&
1362 MP_TX_AGGR_BUF_HAS_ROOM(card, pkt_len)) { 1362 MP_TX_AGGR_BUF_HAS_ROOM(card, pkt_len)) {
1363 f_precopy_cur_buf = 1; 1363 f_precopy_cur_buf = 1;
1364 1364
@@ -1371,7 +1371,7 @@ static int mwifiex_host_to_card_mp_aggr(struct mwifiex_adapter *adapter,
1371 /* No room in Aggr buf, send it */ 1371 /* No room in Aggr buf, send it */
1372 f_send_aggr_buf = 1; 1372 f_send_aggr_buf = 1;
1373 1373
1374 if (MP_TX_AGGR_PORT_LIMIT_REACHED(card) || 1374 if (mp_tx_aggr_port_limit_reached(card) ||
1375 !(card->mp_wr_bitmap & 1375 !(card->mp_wr_bitmap &
1376 (1 << card->curr_wr_port))) 1376 (1 << card->curr_wr_port)))
1377 f_send_cur_buf = 1; 1377 f_send_cur_buf = 1;
@@ -1410,7 +1410,7 @@ static int mwifiex_host_to_card_mp_aggr(struct mwifiex_adapter *adapter,
1410 MP_TX_AGGR_BUF_PUT(card, payload, pkt_len, port); 1410 MP_TX_AGGR_BUF_PUT(card, payload, pkt_len, port);
1411 1411
1412 if (MP_TX_AGGR_PKT_LIMIT_REACHED(card) || 1412 if (MP_TX_AGGR_PKT_LIMIT_REACHED(card) ||
1413 MP_TX_AGGR_PORT_LIMIT_REACHED(card)) 1413 mp_tx_aggr_port_limit_reached(card))
1414 /* No more pkts allowed in Aggr buf, send it */ 1414 /* No more pkts allowed in Aggr buf, send it */
1415 f_send_aggr_buf = 1; 1415 f_send_aggr_buf = 1;
1416 } 1416 }
@@ -1687,6 +1687,11 @@ static int mwifiex_init_sdio(struct mwifiex_adapter *adapter)
1687 if (!card->mp_regs) 1687 if (!card->mp_regs)
1688 return -ENOMEM; 1688 return -ENOMEM;
1689 1689
1690 /* Allocate skb pointer buffers */
1691 card->mpa_rx.skb_arr = kzalloc((sizeof(void *)) *
1692 card->mp_agg_pkt_limit, GFP_KERNEL);
1693 card->mpa_rx.len_arr = kzalloc(sizeof(*card->mpa_rx.len_arr) *
1694 card->mp_agg_pkt_limit, GFP_KERNEL);
1690 ret = mwifiex_alloc_sdio_mpa_buffers(adapter, 1695 ret = mwifiex_alloc_sdio_mpa_buffers(adapter,
1691 SDIO_MP_TX_AGGR_DEF_BUF_SIZE, 1696 SDIO_MP_TX_AGGR_DEF_BUF_SIZE,
1692 SDIO_MP_RX_AGGR_DEF_BUF_SIZE); 1697 SDIO_MP_RX_AGGR_DEF_BUF_SIZE);
@@ -1723,6 +1728,8 @@ static void mwifiex_cleanup_sdio(struct mwifiex_adapter *adapter)
1723 struct sdio_mmc_card *card = adapter->card; 1728 struct sdio_mmc_card *card = adapter->card;
1724 1729
1725 kfree(card->mp_regs); 1730 kfree(card->mp_regs);
1731 kfree(card->mpa_rx.skb_arr);
1732 kfree(card->mpa_rx.len_arr);
1726 kfree(card->mpa_tx.buf); 1733 kfree(card->mpa_tx.buf);
1727 kfree(card->mpa_rx.buf); 1734 kfree(card->mpa_rx.buf);
1728} 1735}