aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mwifiex/sdio.c
diff options
context:
space:
mode:
authorYogesh Ashok Powar <yogeshp@marvell.com>2012-03-13 22:22:39 -0400
committerJohn W. Linville <linville@tuxdriver.com>2012-03-14 14:39:37 -0400
commit5dbd326ca7acc54320c38bdc474600c811f8ad6b (patch)
treec203f83e436cb5edb4561d9206e286873590d967 /drivers/net/wireless/mwifiex/sdio.c
parentcff23cec822cd6bd0878c2a6afe6140f04c17dcf (diff)
mwifiex: fix checkpatch --strict warnings/errors Part 6
For file sdio.c Signed-off-by: Yogesh Ashok Powar <yogeshp@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.c188
1 files changed, 96 insertions, 92 deletions
diff --git a/drivers/net/wireless/mwifiex/sdio.c b/drivers/net/wireless/mwifiex/sdio.c
index fe6fbc123b2e..3f597f4a3f5e 100644
--- a/drivers/net/wireless/mwifiex/sdio.c
+++ b/drivers/net/wireless/mwifiex/sdio.c
@@ -67,7 +67,7 @@ mwifiex_sdio_probe(struct sdio_func *func, const struct sdio_device_id *id)
67 struct sdio_mmc_card *card = NULL; 67 struct sdio_mmc_card *card = NULL;
68 68
69 pr_debug("info: vendor=0x%4.04X device=0x%4.04X class=%d function=%d\n", 69 pr_debug("info: vendor=0x%4.04X device=0x%4.04X class=%d function=%d\n",
70 func->vendor, func->device, func->class, func->num); 70 func->vendor, func->device, func->class, func->num);
71 71
72 card = kzalloc(sizeof(struct sdio_mmc_card), GFP_KERNEL); 72 card = kzalloc(sizeof(struct sdio_mmc_card), GFP_KERNEL);
73 if (!card) { 73 if (!card) {
@@ -112,6 +112,7 @@ mwifiex_sdio_remove(struct sdio_func *func)
112{ 112{
113 struct sdio_mmc_card *card; 113 struct sdio_mmc_card *card;
114 struct mwifiex_adapter *adapter; 114 struct mwifiex_adapter *adapter;
115 struct mwifiex_private *priv;
115 int i; 116 int i;
116 117
117 pr_debug("info: SDIO func num=%d\n", func->num); 118 pr_debug("info: SDIO func num=%d\n", func->num);
@@ -131,15 +132,12 @@ mwifiex_sdio_remove(struct sdio_func *func)
131 for (i = 0; i < adapter->priv_num; i++) 132 for (i = 0; i < adapter->priv_num; i++)
132 if ((GET_BSS_ROLE(adapter->priv[i]) == 133 if ((GET_BSS_ROLE(adapter->priv[i]) ==
133 MWIFIEX_BSS_ROLE_STA) && 134 MWIFIEX_BSS_ROLE_STA) &&
134 adapter->priv[i]->media_connected) 135 adapter->priv[i]->media_connected)
135 mwifiex_deauthenticate(adapter->priv[i], NULL); 136 mwifiex_deauthenticate(adapter->priv[i], NULL);
136 137
137 mwifiex_disable_auto_ds(mwifiex_get_priv(adapter, 138 priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
138 MWIFIEX_BSS_ROLE_ANY)); 139 mwifiex_disable_auto_ds(priv);
139 140 mwifiex_init_shutdown_fw(priv, MWIFIEX_FUNC_SHUTDOWN);
140 mwifiex_init_shutdown_fw(mwifiex_get_priv(adapter,
141 MWIFIEX_BSS_ROLE_ANY),
142 MWIFIEX_FUNC_SHUTDOWN);
143 } 141 }
144 142
145 mwifiex_remove_card(card->adapter, &add_remove_card_sem); 143 mwifiex_remove_card(card->adapter, &add_remove_card_sem);
@@ -169,7 +167,7 @@ static int mwifiex_sdio_suspend(struct device *dev)
169 if (func) { 167 if (func) {
170 pm_flag = sdio_get_host_pm_caps(func); 168 pm_flag = sdio_get_host_pm_caps(func);
171 pr_debug("cmd: %s: suspend: PM flag = 0x%x\n", 169 pr_debug("cmd: %s: suspend: PM flag = 0x%x\n",
172 sdio_func_id(func), pm_flag); 170 sdio_func_id(func), pm_flag);
173 if (!(pm_flag & MMC_PM_KEEP_POWER)) { 171 if (!(pm_flag & MMC_PM_KEEP_POWER)) {
174 pr_err("%s: cannot remain alive while host is" 172 pr_err("%s: cannot remain alive while host is"
175 " suspended\n", sdio_func_id(func)); 173 " suspended\n", sdio_func_id(func));
@@ -363,12 +361,11 @@ static int mwifiex_read_data_sync(struct mwifiex_adapter *adapter, u8 *buffer,
363{ 361{
364 struct sdio_mmc_card *card = adapter->card; 362 struct sdio_mmc_card *card = adapter->card;
365 int ret = -1; 363 int ret = -1;
366 u8 blk_mode = 364 u8 blk_mode = (port & MWIFIEX_SDIO_BYTE_MODE_MASK) ? BYTE_MODE
367 (port & MWIFIEX_SDIO_BYTE_MODE_MASK) ? BYTE_MODE : BLOCK_MODE; 365 : BLOCK_MODE;
368 u32 blk_size = (blk_mode == BLOCK_MODE) ? MWIFIEX_SDIO_BLOCK_SIZE : 1; 366 u32 blk_size = (blk_mode == BLOCK_MODE) ? MWIFIEX_SDIO_BLOCK_SIZE : 1;
369 u32 blk_cnt = 367 u32 blk_cnt = (blk_mode == BLOCK_MODE) ? (len / MWIFIEX_SDIO_BLOCK_SIZE)
370 (blk_mode == 368 : len;
371 BLOCK_MODE) ? (len / MWIFIEX_SDIO_BLOCK_SIZE) : len;
372 u32 ioport = (port & MWIFIEX_SDIO_IO_PORT_MASK); 369 u32 ioport = (port & MWIFIEX_SDIO_IO_PORT_MASK);
373 370
374 if (claim) 371 if (claim)
@@ -472,8 +469,7 @@ static int mwifiex_write_data_to_card(struct mwifiex_adapter *adapter,
472 i++; 469 i++;
473 dev_err(adapter->dev, "host_to_card, write iomem" 470 dev_err(adapter->dev, "host_to_card, write iomem"
474 " (%d) failed: %d\n", i, ret); 471 " (%d) failed: %d\n", i, ret);
475 if (mwifiex_write_reg(adapter, 472 if (mwifiex_write_reg(adapter, CONFIGURATION_REG, 0x04))
476 CONFIGURATION_REG, 0x04))
477 dev_err(adapter->dev, "write CFG reg failed\n"); 473 dev_err(adapter->dev, "write CFG reg failed\n");
478 474
479 ret = -1; 475 ret = -1;
@@ -507,11 +503,11 @@ static int mwifiex_get_rd_port(struct mwifiex_adapter *adapter, u8 *port)
507 card->mp_rd_bitmap &= (u16) (~CTRL_PORT_MASK); 503 card->mp_rd_bitmap &= (u16) (~CTRL_PORT_MASK);
508 *port = CTRL_PORT; 504 *port = CTRL_PORT;
509 dev_dbg(adapter->dev, "data: port=%d mp_rd_bitmap=0x%04x\n", 505 dev_dbg(adapter->dev, "data: port=%d mp_rd_bitmap=0x%04x\n",
510 *port, card->mp_rd_bitmap); 506 *port, card->mp_rd_bitmap);
511 } else { 507 } else {
512 if (card->mp_rd_bitmap & (1 << card->curr_rd_port)) { 508 if (card->mp_rd_bitmap & (1 << card->curr_rd_port)) {
513 card->mp_rd_bitmap &= 509 card->mp_rd_bitmap &= (u16)
514 (u16) (~(1 << card->curr_rd_port)); 510 (~(1 << card->curr_rd_port));
515 *port = card->curr_rd_port; 511 *port = card->curr_rd_port;
516 512
517 if (++card->curr_rd_port == MAX_PORT) 513 if (++card->curr_rd_port == MAX_PORT)
@@ -522,7 +518,7 @@ static int mwifiex_get_rd_port(struct mwifiex_adapter *adapter, u8 *port)
522 518
523 dev_dbg(adapter->dev, 519 dev_dbg(adapter->dev,
524 "data: port=%d mp_rd_bitmap=0x%04x -> 0x%04x\n", 520 "data: port=%d mp_rd_bitmap=0x%04x -> 0x%04x\n",
525 *port, rd_bitmap, card->mp_rd_bitmap); 521 *port, rd_bitmap, card->mp_rd_bitmap);
526 } 522 }
527 return 0; 523 return 0;
528} 524}
@@ -556,14 +552,14 @@ static int mwifiex_get_wr_port_data(struct mwifiex_adapter *adapter, u8 *port)
556 552
557 if (*port == CTRL_PORT) { 553 if (*port == CTRL_PORT) {
558 dev_err(adapter->dev, "invalid data port=%d cur port=%d" 554 dev_err(adapter->dev, "invalid data port=%d cur port=%d"
559 " mp_wr_bitmap=0x%04x -> 0x%04x\n", 555 " mp_wr_bitmap=0x%04x -> 0x%04x\n",
560 *port, card->curr_wr_port, wr_bitmap, 556 *port, card->curr_wr_port, wr_bitmap,
561 card->mp_wr_bitmap); 557 card->mp_wr_bitmap);
562 return -1; 558 return -1;
563 } 559 }
564 560
565 dev_dbg(adapter->dev, "data: port=%d mp_wr_bitmap=0x%04x -> 0x%04x\n", 561 dev_dbg(adapter->dev, "data: port=%d mp_wr_bitmap=0x%04x -> 0x%04x\n",
566 *port, wr_bitmap, card->mp_wr_bitmap); 562 *port, wr_bitmap, card->mp_wr_bitmap);
567 563
568 return 0; 564 return 0;
569} 565}
@@ -586,8 +582,8 @@ mwifiex_sdio_poll_card_status(struct mwifiex_adapter *adapter, u8 bits)
586 usleep_range(10, 20); 582 usleep_range(10, 20);
587 } 583 }
588 584
589 dev_err(adapter->dev, "poll card status failed, tries = %d\n", 585 dev_err(adapter->dev, "poll card status failed, tries = %d\n", tries);
590 tries); 586
591 return -1; 587 return -1;
592} 588}
593 589
@@ -670,14 +666,14 @@ static int mwifiex_sdio_card_to_host(struct mwifiex_adapter *adapter,
670 666
671 if (ret) { 667 if (ret) {
672 dev_err(adapter->dev, "%s: read iomem failed: %d\n", __func__, 668 dev_err(adapter->dev, "%s: read iomem failed: %d\n", __func__,
673 ret); 669 ret);
674 return -1; 670 return -1;
675 } 671 }
676 672
677 nb = le16_to_cpu(*(__le16 *) (buffer)); 673 nb = le16_to_cpu(*(__le16 *) (buffer));
678 if (nb > npayload) { 674 if (nb > npayload) {
679 dev_err(adapter->dev, "%s: invalid packet, nb=%d, npayload=%d\n", 675 dev_err(adapter->dev, "%s: invalid packet, nb=%d npayload=%d\n",
680 __func__, nb, npayload); 676 __func__, nb, npayload);
681 return -1; 677 return -1;
682 } 678 }
683 679
@@ -707,19 +703,19 @@ static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter *adapter,
707 u32 i = 0; 703 u32 i = 0;
708 704
709 if (!firmware_len) { 705 if (!firmware_len) {
710 dev_err(adapter->dev, "firmware image not found!" 706 dev_err(adapter->dev,
711 " Terminating download\n"); 707 "firmware image not found! Terminating download\n");
712 return -1; 708 return -1;
713 } 709 }
714 710
715 dev_dbg(adapter->dev, "info: downloading FW image (%d bytes)\n", 711 dev_dbg(adapter->dev, "info: downloading FW image (%d bytes)\n",
716 firmware_len); 712 firmware_len);
717 713
718 /* Assume that the allocated buffer is 8-byte aligned */ 714 /* Assume that the allocated buffer is 8-byte aligned */
719 fwbuf = kzalloc(MWIFIEX_UPLD_SIZE, GFP_KERNEL); 715 fwbuf = kzalloc(MWIFIEX_UPLD_SIZE, GFP_KERNEL);
720 if (!fwbuf) { 716 if (!fwbuf) {
721 dev_err(adapter->dev, "unable to alloc buffer for firmware." 717 dev_err(adapter->dev,
722 " Terminating download\n"); 718 "unable to alloc buffer for FW. Terminating dnld\n");
723 return -ENOMEM; 719 return -ENOMEM;
724 } 720 }
725 721
@@ -731,7 +727,7 @@ static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter *adapter,
731 DN_LD_CARD_RDY); 727 DN_LD_CARD_RDY);
732 if (ret) { 728 if (ret) {
733 dev_err(adapter->dev, "FW download with helper:" 729 dev_err(adapter->dev, "FW download with helper:"
734 " poll status timeout @ %d\n", offset); 730 " poll status timeout @ %d\n", offset);
735 goto done; 731 goto done;
736 } 732 }
737 733
@@ -743,17 +739,19 @@ static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter *adapter,
743 ret = mwifiex_read_reg(adapter, HOST_F1_RD_BASE_0, 739 ret = mwifiex_read_reg(adapter, HOST_F1_RD_BASE_0,
744 &base0); 740 &base0);
745 if (ret) { 741 if (ret) {
746 dev_err(adapter->dev, "dev BASE0 register read" 742 dev_err(adapter->dev,
747 " failed: base0=0x%04X(%d). Terminating " 743 "dev BASE0 register read failed: "
748 "download\n", base0, base0); 744 "base0=%#04X(%d). Terminating dnld\n",
745 base0, base0);
749 goto done; 746 goto done;
750 } 747 }
751 ret = mwifiex_read_reg(adapter, HOST_F1_RD_BASE_1, 748 ret = mwifiex_read_reg(adapter, HOST_F1_RD_BASE_1,
752 &base1); 749 &base1);
753 if (ret) { 750 if (ret) {
754 dev_err(adapter->dev, "dev BASE1 register read" 751 dev_err(adapter->dev,
755 " failed: base1=0x%04X(%d). Terminating " 752 "dev BASE1 register read failed: "
756 "download\n", base1, base1); 753 "base1=%#04X(%d). Terminating dnld\n",
754 base1, base1);
757 goto done; 755 goto done;
758 } 756 }
759 len = (u16) (((base1 & 0xff) << 8) | (base0 & 0xff)); 757 len = (u16) (((base1 & 0xff) << 8) | (base0 & 0xff));
@@ -767,8 +765,9 @@ static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter *adapter,
767 if (!len) { 765 if (!len) {
768 break; 766 break;
769 } else if (len > MWIFIEX_UPLD_SIZE) { 767 } else if (len > MWIFIEX_UPLD_SIZE) {
770 dev_err(adapter->dev, "FW download failed @ %d," 768 dev_err(adapter->dev,
771 " invalid length %d\n", offset, len); 769 "FW dnld failed @ %d, invalid length %d\n",
770 offset, len);
772 ret = -1; 771 ret = -1;
773 goto done; 772 goto done;
774 } 773 }
@@ -778,13 +777,14 @@ static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter *adapter,
778 if (len & BIT(0)) { 777 if (len & BIT(0)) {
779 i++; 778 i++;
780 if (i > MAX_WRITE_IOMEM_RETRY) { 779 if (i > MAX_WRITE_IOMEM_RETRY) {
781 dev_err(adapter->dev, "FW download failed @" 780 dev_err(adapter->dev,
782 " %d, over max retry count\n", offset); 781 "FW dnld failed @ %d, over max retry\n",
782 offset);
783 ret = -1; 783 ret = -1;
784 goto done; 784 goto done;
785 } 785 }
786 dev_err(adapter->dev, "CRC indicated by the helper:" 786 dev_err(adapter->dev, "CRC indicated by the helper:"
787 " len = 0x%04X, txlen = %d\n", len, txlen); 787 " len = 0x%04X, txlen = %d\n", len, txlen);
788 len &= ~BIT(0); 788 len &= ~BIT(0);
789 /* Setting this to 0 to resend from same offset */ 789 /* Setting this to 0 to resend from same offset */
790 txlen = 0; 790 txlen = 0;
@@ -796,8 +796,8 @@ static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter *adapter,
796 if (firmware_len - offset < txlen) 796 if (firmware_len - offset < txlen)
797 txlen = firmware_len - offset; 797 txlen = firmware_len - offset;
798 798
799 tx_blocks = (txlen + MWIFIEX_SDIO_BLOCK_SIZE - 799 tx_blocks = (txlen + MWIFIEX_SDIO_BLOCK_SIZE - 1)
800 1) / MWIFIEX_SDIO_BLOCK_SIZE; 800 / MWIFIEX_SDIO_BLOCK_SIZE;
801 801
802 /* Copy payload to buffer */ 802 /* Copy payload to buffer */
803 memmove(fwbuf, &firmware[offset], txlen); 803 memmove(fwbuf, &firmware[offset], txlen);
@@ -807,8 +807,9 @@ static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter *adapter,
807 MWIFIEX_SDIO_BLOCK_SIZE, 807 MWIFIEX_SDIO_BLOCK_SIZE,
808 adapter->ioport); 808 adapter->ioport);
809 if (ret) { 809 if (ret) {
810 dev_err(adapter->dev, "FW download, write iomem (%d)" 810 dev_err(adapter->dev,
811 " failed @ %d\n", i, offset); 811 "FW download, write iomem (%d) failed @ %d\n",
812 i, offset);
812 if (mwifiex_write_reg(adapter, CONFIGURATION_REG, 0x04)) 813 if (mwifiex_write_reg(adapter, CONFIGURATION_REG, 0x04))
813 dev_err(adapter->dev, "write CFG reg failed\n"); 814 dev_err(adapter->dev, "write CFG reg failed\n");
814 815
@@ -820,7 +821,7 @@ static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter *adapter,
820 } while (true); 821 } while (true);
821 822
822 dev_dbg(adapter->dev, "info: FW download over, size %d bytes\n", 823 dev_dbg(adapter->dev, "info: FW download over, size %d bytes\n",
823 offset); 824 offset);
824 825
825 ret = 0; 826 ret = 0;
826done: 827done:
@@ -912,7 +913,7 @@ mwifiex_sdio_interrupt(struct sdio_func *func)
912 card = sdio_get_drvdata(func); 913 card = sdio_get_drvdata(func);
913 if (!card || !card->adapter) { 914 if (!card || !card->adapter) {
914 pr_debug("int: func=%p card=%p adapter=%p\n", 915 pr_debug("int: func=%p card=%p adapter=%p\n",
915 func, card, card ? card->adapter : NULL); 916 func, card, card ? card->adapter : NULL);
916 return; 917 return;
917 } 918 }
918 adapter = card->adapter; 919 adapter = card->adapter;
@@ -955,10 +956,12 @@ static int mwifiex_decode_rx_packet(struct mwifiex_adapter *adapter,
955 956
956 if (adapter->ps_state == PS_STATE_SLEEP_CFM) 957 if (adapter->ps_state == PS_STATE_SLEEP_CFM)
957 mwifiex_process_sleep_confirm_resp(adapter, 958 mwifiex_process_sleep_confirm_resp(adapter,
958 skb->data, skb->len); 959 skb->data,
960 skb->len);
959 961
960 memcpy(cmd_buf, skb->data, min_t(u32, 962 memcpy(cmd_buf, skb->data,
961 MWIFIEX_SIZE_OF_CMD_BUFFER, skb->len)); 963 min_t(u32, MWIFIEX_SIZE_OF_CMD_BUFFER,
964 skb->len));
962 965
963 dev_kfree_skb_any(skb); 966 dev_kfree_skb_any(skb);
964 } else { 967 } else {
@@ -1016,7 +1019,7 @@ static int mwifiex_sdio_card_to_host_mp_aggr(struct mwifiex_adapter *adapter,
1016 if (port == CTRL_PORT) { 1019 if (port == CTRL_PORT) {
1017 /* Read the command Resp without aggr */ 1020 /* Read the command Resp without aggr */
1018 dev_dbg(adapter->dev, "info: %s: no aggregation for cmd " 1021 dev_dbg(adapter->dev, "info: %s: no aggregation for cmd "
1019 "response\n", __func__); 1022 "response\n", __func__);
1020 1023
1021 f_do_rx_cur = 1; 1024 f_do_rx_cur = 1;
1022 goto rx_curr_single; 1025 goto rx_curr_single;
@@ -1024,7 +1027,7 @@ static int mwifiex_sdio_card_to_host_mp_aggr(struct mwifiex_adapter *adapter,
1024 1027
1025 if (!card->mpa_rx.enabled) { 1028 if (!card->mpa_rx.enabled) {
1026 dev_dbg(adapter->dev, "info: %s: rx aggregation disabled\n", 1029 dev_dbg(adapter->dev, "info: %s: rx aggregation disabled\n",
1027 __func__); 1030 __func__);
1028 1031
1029 f_do_rx_cur = 1; 1032 f_do_rx_cur = 1;
1030 goto rx_curr_single; 1033 goto rx_curr_single;
@@ -1071,7 +1074,7 @@ static int mwifiex_sdio_card_to_host_mp_aggr(struct mwifiex_adapter *adapter,
1071 if (MP_RX_AGGR_PKT_LIMIT_REACHED(card) || 1074 if (MP_RX_AGGR_PKT_LIMIT_REACHED(card) ||
1072 MP_RX_AGGR_PORT_LIMIT_REACHED(card)) { 1075 MP_RX_AGGR_PORT_LIMIT_REACHED(card)) {
1073 dev_dbg(adapter->dev, "info: %s: aggregated packet " 1076 dev_dbg(adapter->dev, "info: %s: aggregated packet "
1074 "limit reached\n", __func__); 1077 "limit reached\n", __func__);
1075 /* No more pkts allowed in Aggr buf, rx it */ 1078 /* No more pkts allowed in Aggr buf, rx it */
1076 f_do_rx_aggr = 1; 1079 f_do_rx_aggr = 1;
1077 } 1080 }
@@ -1080,7 +1083,7 @@ static int mwifiex_sdio_card_to_host_mp_aggr(struct mwifiex_adapter *adapter,
1080 if (f_do_rx_aggr) { 1083 if (f_do_rx_aggr) {
1081 /* do aggr RX now */ 1084 /* do aggr RX now */
1082 dev_dbg(adapter->dev, "info: do_rx_aggr: num of packets: %d\n", 1085 dev_dbg(adapter->dev, "info: do_rx_aggr: num of packets: %d\n",
1083 card->mpa_rx.pkt_cnt); 1086 card->mpa_rx.pkt_cnt);
1084 1087
1085 if (mwifiex_read_data_sync(adapter, card->mpa_rx.buf, 1088 if (mwifiex_read_data_sync(adapter, card->mpa_rx.buf,
1086 card->mpa_rx.buf_len, 1089 card->mpa_rx.buf_len,
@@ -1194,7 +1197,7 @@ static int mwifiex_process_int_status(struct mwifiex_adapter *adapter)
1194 card->mp_wr_bitmap = ((u16) card->mp_regs[WR_BITMAP_U]) << 8; 1197 card->mp_wr_bitmap = ((u16) card->mp_regs[WR_BITMAP_U]) << 8;
1195 card->mp_wr_bitmap |= (u16) card->mp_regs[WR_BITMAP_L]; 1198 card->mp_wr_bitmap |= (u16) card->mp_regs[WR_BITMAP_L];
1196 dev_dbg(adapter->dev, "int: DNLD: wr_bitmap=0x%04x\n", 1199 dev_dbg(adapter->dev, "int: DNLD: wr_bitmap=0x%04x\n",
1197 card->mp_wr_bitmap); 1200 card->mp_wr_bitmap);
1198 if (adapter->data_sent && 1201 if (adapter->data_sent &&
1199 (card->mp_wr_bitmap & card->mp_data_port_mask)) { 1202 (card->mp_wr_bitmap & card->mp_data_port_mask)) {
1200 dev_dbg(adapter->dev, 1203 dev_dbg(adapter->dev,
@@ -1216,12 +1219,12 @@ static int mwifiex_process_int_status(struct mwifiex_adapter *adapter)
1216 } 1219 }
1217 1220
1218 dev_dbg(adapter->dev, "info: cmd_sent=%d data_sent=%d\n", 1221 dev_dbg(adapter->dev, "info: cmd_sent=%d data_sent=%d\n",
1219 adapter->cmd_sent, adapter->data_sent); 1222 adapter->cmd_sent, adapter->data_sent);
1220 if (sdio_ireg & UP_LD_HOST_INT_STATUS) { 1223 if (sdio_ireg & UP_LD_HOST_INT_STATUS) {
1221 card->mp_rd_bitmap = ((u16) card->mp_regs[RD_BITMAP_U]) << 8; 1224 card->mp_rd_bitmap = ((u16) card->mp_regs[RD_BITMAP_U]) << 8;
1222 card->mp_rd_bitmap |= (u16) card->mp_regs[RD_BITMAP_L]; 1225 card->mp_rd_bitmap |= (u16) card->mp_regs[RD_BITMAP_L];
1223 dev_dbg(adapter->dev, "int: UPLD: rd_bitmap=0x%04x\n", 1226 dev_dbg(adapter->dev, "int: UPLD: rd_bitmap=0x%04x\n",
1224 card->mp_rd_bitmap); 1227 card->mp_rd_bitmap);
1225 1228
1226 while (true) { 1229 while (true) {
1227 ret = mwifiex_get_rd_port(adapter, &port); 1230 ret = mwifiex_get_rd_port(adapter, &port);
@@ -1235,15 +1238,15 @@ static int mwifiex_process_int_status(struct mwifiex_adapter *adapter)
1235 rx_len = ((u16) card->mp_regs[len_reg_u]) << 8; 1238 rx_len = ((u16) card->mp_regs[len_reg_u]) << 8;
1236 rx_len |= (u16) card->mp_regs[len_reg_l]; 1239 rx_len |= (u16) card->mp_regs[len_reg_l];
1237 dev_dbg(adapter->dev, "info: RX: port=%d rx_len=%u\n", 1240 dev_dbg(adapter->dev, "info: RX: port=%d rx_len=%u\n",
1238 port, rx_len); 1241 port, rx_len);
1239 rx_blocks = 1242 rx_blocks =
1240 (rx_len + MWIFIEX_SDIO_BLOCK_SIZE - 1243 (rx_len + MWIFIEX_SDIO_BLOCK_SIZE -
1241 1) / MWIFIEX_SDIO_BLOCK_SIZE; 1244 1) / MWIFIEX_SDIO_BLOCK_SIZE;
1242 if (rx_len <= INTF_HEADER_LEN 1245 if (rx_len <= INTF_HEADER_LEN ||
1243 || (rx_blocks * MWIFIEX_SDIO_BLOCK_SIZE) > 1246 (rx_blocks * MWIFIEX_SDIO_BLOCK_SIZE) >
1244 MWIFIEX_RX_DATA_BUF_SIZE) { 1247 MWIFIEX_RX_DATA_BUF_SIZE) {
1245 dev_err(adapter->dev, "invalid rx_len=%d\n", 1248 dev_err(adapter->dev, "invalid rx_len=%d\n",
1246 rx_len); 1249 rx_len);
1247 return -1; 1250 return -1;
1248 } 1251 }
1249 rx_len = (u16) (rx_blocks * MWIFIEX_SDIO_BLOCK_SIZE); 1252 rx_len = (u16) (rx_blocks * MWIFIEX_SDIO_BLOCK_SIZE);
@@ -1252,42 +1255,42 @@ static int mwifiex_process_int_status(struct mwifiex_adapter *adapter)
1252 1255
1253 if (!skb) { 1256 if (!skb) {
1254 dev_err(adapter->dev, "%s: failed to alloc skb", 1257 dev_err(adapter->dev, "%s: failed to alloc skb",
1255 __func__); 1258 __func__);
1256 return -1; 1259 return -1;
1257 } 1260 }
1258 1261
1259 skb_put(skb, rx_len); 1262 skb_put(skb, rx_len);
1260 1263
1261 dev_dbg(adapter->dev, "info: rx_len = %d skb->len = %d\n", 1264 dev_dbg(adapter->dev, "info: rx_len = %d skb->len = %d\n",
1262 rx_len, skb->len); 1265 rx_len, skb->len);
1263 1266
1264 if (mwifiex_sdio_card_to_host_mp_aggr(adapter, skb, 1267 if (mwifiex_sdio_card_to_host_mp_aggr(adapter, skb,
1265 port)) { 1268 port)) {
1266 u32 cr = 0; 1269 u32 cr = 0;
1267 1270
1268 dev_err(adapter->dev, "card_to_host_mpa failed:" 1271 dev_err(adapter->dev, "card_to_host_mpa failed:"
1269 " int status=%#x\n", sdio_ireg); 1272 " int status=%#x\n", sdio_ireg);
1270 if (mwifiex_read_reg(adapter, 1273 if (mwifiex_read_reg(adapter,
1271 CONFIGURATION_REG, &cr)) 1274 CONFIGURATION_REG, &cr))
1272 dev_err(adapter->dev, 1275 dev_err(adapter->dev,
1273 "read CFG reg failed\n"); 1276 "read CFG reg failed\n");
1274 1277
1275 dev_dbg(adapter->dev, 1278 dev_dbg(adapter->dev,
1276 "info: CFG reg val = %d\n", cr); 1279 "info: CFG reg val = %d\n", cr);
1277 if (mwifiex_write_reg(adapter, 1280 if (mwifiex_write_reg(adapter,
1278 CONFIGURATION_REG, 1281 CONFIGURATION_REG,
1279 (cr | 0x04))) 1282 (cr | 0x04)))
1280 dev_err(adapter->dev, 1283 dev_err(adapter->dev,
1281 "write CFG reg failed\n"); 1284 "write CFG reg failed\n");
1282 1285
1283 dev_dbg(adapter->dev, "info: write success\n"); 1286 dev_dbg(adapter->dev, "info: write success\n");
1284 if (mwifiex_read_reg(adapter, 1287 if (mwifiex_read_reg(adapter,
1285 CONFIGURATION_REG, &cr)) 1288 CONFIGURATION_REG, &cr))
1286 dev_err(adapter->dev, 1289 dev_err(adapter->dev,
1287 "read CFG reg failed\n"); 1290 "read CFG reg failed\n");
1288 1291
1289 dev_dbg(adapter->dev, 1292 dev_dbg(adapter->dev,
1290 "info: CFG reg val =%x\n", cr); 1293 "info: CFG reg val =%x\n", cr);
1291 return -1; 1294 return -1;
1292 } 1295 }
1293 } 1296 }
@@ -1323,7 +1326,7 @@ static int mwifiex_host_to_card_mp_aggr(struct mwifiex_adapter *adapter,
1323 1326
1324 if ((!card->mpa_tx.enabled) || (port == CTRL_PORT)) { 1327 if ((!card->mpa_tx.enabled) || (port == CTRL_PORT)) {
1325 dev_dbg(adapter->dev, "info: %s: tx aggregation disabled\n", 1328 dev_dbg(adapter->dev, "info: %s: tx aggregation disabled\n",
1326 __func__); 1329 __func__);
1327 1330
1328 f_send_cur_buf = 1; 1331 f_send_cur_buf = 1;
1329 goto tx_curr_single; 1332 goto tx_curr_single;
@@ -1332,7 +1335,7 @@ static int mwifiex_host_to_card_mp_aggr(struct mwifiex_adapter *adapter,
1332 if (next_pkt_len) { 1335 if (next_pkt_len) {
1333 /* More pkt in TX queue */ 1336 /* More pkt in TX queue */
1334 dev_dbg(adapter->dev, "info: %s: more packets in queue.\n", 1337 dev_dbg(adapter->dev, "info: %s: more packets in queue.\n",
1335 __func__); 1338 __func__);
1336 1339
1337 if (MP_TX_AGGR_IN_PROGRESS(card)) { 1340 if (MP_TX_AGGR_IN_PROGRESS(card)) {
1338 if (!MP_TX_AGGR_PORT_LIMIT_REACHED(card) && 1341 if (!MP_TX_AGGR_PORT_LIMIT_REACHED(card) &&
@@ -1340,9 +1343,9 @@ static int mwifiex_host_to_card_mp_aggr(struct mwifiex_adapter *adapter,
1340 f_precopy_cur_buf = 1; 1343 f_precopy_cur_buf = 1;
1341 1344
1342 if (!(card->mp_wr_bitmap & 1345 if (!(card->mp_wr_bitmap &
1343 (1 << card->curr_wr_port)) 1346 (1 << card->curr_wr_port)) ||
1344 || !MP_TX_AGGR_BUF_HAS_ROOM( 1347 !MP_TX_AGGR_BUF_HAS_ROOM(
1345 card, pkt_len + next_pkt_len)) 1348 card, pkt_len + next_pkt_len))
1346 f_send_aggr_buf = 1; 1349 f_send_aggr_buf = 1;
1347 } else { 1350 } else {
1348 /* No room in Aggr buf, send it */ 1351 /* No room in Aggr buf, send it */
@@ -1356,8 +1359,8 @@ static int mwifiex_host_to_card_mp_aggr(struct mwifiex_adapter *adapter,
1356 f_postcopy_cur_buf = 1; 1359 f_postcopy_cur_buf = 1;
1357 } 1360 }
1358 } else { 1361 } else {
1359 if (MP_TX_AGGR_BUF_HAS_ROOM(card, pkt_len) 1362 if (MP_TX_AGGR_BUF_HAS_ROOM(card, pkt_len) &&
1360 && (card->mp_wr_bitmap & (1 << card->curr_wr_port))) 1363 (card->mp_wr_bitmap & (1 << card->curr_wr_port)))
1361 f_precopy_cur_buf = 1; 1364 f_precopy_cur_buf = 1;
1362 else 1365 else
1363 f_send_cur_buf = 1; 1366 f_send_cur_buf = 1;
@@ -1365,7 +1368,7 @@ static int mwifiex_host_to_card_mp_aggr(struct mwifiex_adapter *adapter,
1365 } else { 1368 } else {
1366 /* Last pkt in TX queue */ 1369 /* Last pkt in TX queue */
1367 dev_dbg(adapter->dev, "info: %s: Last packet in Tx Queue.\n", 1370 dev_dbg(adapter->dev, "info: %s: Last packet in Tx Queue.\n",
1368 __func__); 1371 __func__);
1369 1372
1370 if (MP_TX_AGGR_IN_PROGRESS(card)) { 1373 if (MP_TX_AGGR_IN_PROGRESS(card)) {
1371 /* some packs in Aggr buf already */ 1374 /* some packs in Aggr buf already */
@@ -1383,7 +1386,7 @@ static int mwifiex_host_to_card_mp_aggr(struct mwifiex_adapter *adapter,
1383 1386
1384 if (f_precopy_cur_buf) { 1387 if (f_precopy_cur_buf) {
1385 dev_dbg(adapter->dev, "data: %s: precopy current buffer\n", 1388 dev_dbg(adapter->dev, "data: %s: precopy current buffer\n",
1386 __func__); 1389 __func__);
1387 MP_TX_AGGR_BUF_PUT(card, payload, pkt_len, port); 1390 MP_TX_AGGR_BUF_PUT(card, payload, pkt_len, port);
1388 1391
1389 if (MP_TX_AGGR_PKT_LIMIT_REACHED(card) || 1392 if (MP_TX_AGGR_PKT_LIMIT_REACHED(card) ||
@@ -1394,7 +1397,7 @@ static int mwifiex_host_to_card_mp_aggr(struct mwifiex_adapter *adapter,
1394 1397
1395 if (f_send_aggr_buf) { 1398 if (f_send_aggr_buf) {
1396 dev_dbg(adapter->dev, "data: %s: send aggr buffer: %d %d\n", 1399 dev_dbg(adapter->dev, "data: %s: send aggr buffer: %d %d\n",
1397 __func__, 1400 __func__,
1398 card->mpa_tx.start_port, card->mpa_tx.ports); 1401 card->mpa_tx.start_port, card->mpa_tx.ports);
1399 ret = mwifiex_write_data_to_card(adapter, card->mpa_tx.buf, 1402 ret = mwifiex_write_data_to_card(adapter, card->mpa_tx.buf,
1400 card->mpa_tx.buf_len, 1403 card->mpa_tx.buf_len,
@@ -1408,14 +1411,14 @@ static int mwifiex_host_to_card_mp_aggr(struct mwifiex_adapter *adapter,
1408tx_curr_single: 1411tx_curr_single:
1409 if (f_send_cur_buf) { 1412 if (f_send_cur_buf) {
1410 dev_dbg(adapter->dev, "data: %s: send current buffer %d\n", 1413 dev_dbg(adapter->dev, "data: %s: send current buffer %d\n",
1411 __func__, port); 1414 __func__, port);
1412 ret = mwifiex_write_data_to_card(adapter, payload, pkt_len, 1415 ret = mwifiex_write_data_to_card(adapter, payload, pkt_len,
1413 adapter->ioport + port); 1416 adapter->ioport + port);
1414 } 1417 }
1415 1418
1416 if (f_postcopy_cur_buf) { 1419 if (f_postcopy_cur_buf) {
1417 dev_dbg(adapter->dev, "data: %s: postcopy current buffer\n", 1420 dev_dbg(adapter->dev, "data: %s: postcopy current buffer\n",
1418 __func__); 1421 __func__);
1419 MP_TX_AGGR_BUF_PUT(card, payload, pkt_len, port); 1422 MP_TX_AGGR_BUF_PUT(card, payload, pkt_len, port);
1420 } 1423 }
1421 1424
@@ -1460,7 +1463,7 @@ static int mwifiex_sdio_host_to_card(struct mwifiex_adapter *adapter,
1460 ret = mwifiex_get_wr_port_data(adapter, &port); 1463 ret = mwifiex_get_wr_port_data(adapter, &port);
1461 if (ret) { 1464 if (ret) {
1462 dev_err(adapter->dev, "%s: no wr_port available\n", 1465 dev_err(adapter->dev, "%s: no wr_port available\n",
1463 __func__); 1466 __func__);
1464 return ret; 1467 return ret;
1465 } 1468 }
1466 } else { 1469 } else {
@@ -1470,7 +1473,7 @@ static int mwifiex_sdio_host_to_card(struct mwifiex_adapter *adapter,
1470 if (pkt_len <= INTF_HEADER_LEN || 1473 if (pkt_len <= INTF_HEADER_LEN ||
1471 pkt_len > MWIFIEX_UPLD_SIZE) 1474 pkt_len > MWIFIEX_UPLD_SIZE)
1472 dev_err(adapter->dev, "%s: payload=%p, nb=%d\n", 1475 dev_err(adapter->dev, "%s: payload=%p, nb=%d\n",
1473 __func__, payload, pkt_len); 1476 __func__, payload, pkt_len);
1474 } 1477 }
1475 1478
1476 /* Transfer data to card */ 1479 /* Transfer data to card */
@@ -1478,10 +1481,11 @@ static int mwifiex_sdio_host_to_card(struct mwifiex_adapter *adapter,
1478 1481
1479 if (tx_param) 1482 if (tx_param)
1480 ret = mwifiex_host_to_card_mp_aggr(adapter, payload, pkt_len, 1483 ret = mwifiex_host_to_card_mp_aggr(adapter, payload, pkt_len,
1481 port, tx_param->next_pkt_len); 1484 port, tx_param->next_pkt_len
1485 );
1482 else 1486 else
1483 ret = mwifiex_host_to_card_mp_aggr(adapter, payload, pkt_len, 1487 ret = mwifiex_host_to_card_mp_aggr(adapter, payload, pkt_len,
1484 port, 0); 1488 port, 0);
1485 1489
1486 if (ret) { 1490 if (ret) {
1487 if (type == MWIFIEX_TYPE_CMD) 1491 if (type == MWIFIEX_TYPE_CMD)
@@ -1734,7 +1738,7 @@ mwifiex_update_mp_end_port(struct mwifiex_adapter *adapter, u16 port)
1734 card->curr_wr_port = 1; 1738 card->curr_wr_port = 1;
1735 1739
1736 dev_dbg(adapter->dev, "cmd: mp_end_port %d, data port mask 0x%x\n", 1740 dev_dbg(adapter->dev, "cmd: mp_end_port %d, data port mask 0x%x\n",
1737 port, card->mp_data_port_mask); 1741 port, card->mp_data_port_mask);
1738} 1742}
1739 1743
1740static struct mwifiex_if_ops sdio_ops = { 1744static struct mwifiex_if_ops sdio_ops = {