aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mwifiex/pcie.c
diff options
context:
space:
mode:
authorAvinash Patil <patila@marvell.com>2013-02-08 21:18:06 -0500
committerJohn W. Linville <linville@tuxdriver.com>2013-02-11 15:34:56 -0500
commitdd04e6acd828d51255fbb2d9b7b0e5b85df04f0b (patch)
treee5e301e71fb4eec49755172ae9740d3fd52cdb2b /drivers/net/wireless/mwifiex/pcie.c
parent1a6404a1d8497692f31808319d662c739033c491 (diff)
mwifiex: store card specific data in PCI device table entry
This patch adds support for storing PCIe device specific data into driver_data structure of pci_device_id. When a device with known device_id is probed, we use this driver_data to populate card specific structres in driver. This enables to remove device specific defines for scratch registers, firmware name, FW download block size, etc. from source code. This will make addition of support for new chipsets a lot easier. Signed-off-by: Avinash Patil <patila@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/pcie.c')
-rw-r--r--drivers/net/wireless/mwifiex/pcie.c211
1 files changed, 122 insertions, 89 deletions
diff --git a/drivers/net/wireless/mwifiex/pcie.c b/drivers/net/wireless/mwifiex/pcie.c
index df88e65595c8..29c539b9424b 100644
--- a/drivers/net/wireless/mwifiex/pcie.c
+++ b/drivers/net/wireless/mwifiex/pcie.c
@@ -94,6 +94,13 @@ static int mwifiex_pcie_probe(struct pci_dev *pdev,
94 94
95 card->dev = pdev; 95 card->dev = pdev;
96 96
97 if (ent->driver_data) {
98 struct mwifiex_pcie_device *data = (void *)ent->driver_data;
99 card->pcie.firmware = data->firmware;
100 card->pcie.reg = data->reg;
101 card->pcie.blksz_fw_dl = data->blksz_fw_dl;
102 }
103
97 if (mwifiex_add_card(card, &add_remove_card_sem, &pcie_ops, 104 if (mwifiex_add_card(card, &add_remove_card_sem, &pcie_ops,
98 MWIFIEX_PCIE)) { 105 MWIFIEX_PCIE)) {
99 pr_err("%s failed\n", __func__); 106 pr_err("%s failed\n", __func__);
@@ -237,6 +244,7 @@ static DEFINE_PCI_DEVICE_TABLE(mwifiex_ids) = {
237 { 244 {
238 PCIE_VENDOR_ID_MARVELL, PCIE_DEVICE_ID_MARVELL_88W8766P, 245 PCIE_VENDOR_ID_MARVELL, PCIE_DEVICE_ID_MARVELL_88W8766P,
239 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 246 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
247 .driver_data = (unsigned long) &mwifiex_pcie8766,
240 }, 248 },
241 {}, 249 {},
242}; 250};
@@ -369,6 +377,7 @@ static int mwifiex_pcie_enable_host_int(struct mwifiex_adapter *adapter)
369static int mwifiex_pcie_create_txbd_ring(struct mwifiex_adapter *adapter) 377static int mwifiex_pcie_create_txbd_ring(struct mwifiex_adapter *adapter)
370{ 378{
371 struct pcie_service_card *card = adapter->card; 379 struct pcie_service_card *card = adapter->card;
380 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
372 int i; 381 int i;
373 382
374 /* 383 /*
@@ -377,7 +386,7 @@ static int mwifiex_pcie_create_txbd_ring(struct mwifiex_adapter *adapter)
377 * starts at zero with rollover bit set 386 * starts at zero with rollover bit set
378 */ 387 */
379 card->txbd_wrptr = 0; 388 card->txbd_wrptr = 0;
380 card->txbd_rdptr |= MWIFIEX_BD_FLAG_ROLLOVER_IND; 389 card->txbd_rdptr |= reg->tx_rollover_ind;
381 390
382 /* allocate shared memory for the BD ring and divide the same in to 391 /* allocate shared memory for the BD ring and divide the same in to
383 several descriptors */ 392 several descriptors */
@@ -417,6 +426,7 @@ static int mwifiex_pcie_create_txbd_ring(struct mwifiex_adapter *adapter)
417static int mwifiex_pcie_delete_txbd_ring(struct mwifiex_adapter *adapter) 426static int mwifiex_pcie_delete_txbd_ring(struct mwifiex_adapter *adapter)
418{ 427{
419 struct pcie_service_card *card = adapter->card; 428 struct pcie_service_card *card = adapter->card;
429 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
420 struct sk_buff *skb; 430 struct sk_buff *skb;
421 int i; 431 int i;
422 432
@@ -440,7 +450,7 @@ static int mwifiex_pcie_delete_txbd_ring(struct mwifiex_adapter *adapter)
440 card->txbd_ring_pbase); 450 card->txbd_ring_pbase);
441 card->txbd_ring_size = 0; 451 card->txbd_ring_size = 0;
442 card->txbd_wrptr = 0; 452 card->txbd_wrptr = 0;
443 card->txbd_rdptr = 0 | MWIFIEX_BD_FLAG_ROLLOVER_IND; 453 card->txbd_rdptr = 0 | reg->tx_rollover_ind;
444 card->txbd_ring_vbase = NULL; 454 card->txbd_ring_vbase = NULL;
445 card->txbd_ring_pbase = 0; 455 card->txbd_ring_pbase = 0;
446 456
@@ -453,6 +463,7 @@ static int mwifiex_pcie_delete_txbd_ring(struct mwifiex_adapter *adapter)
453static int mwifiex_pcie_create_rxbd_ring(struct mwifiex_adapter *adapter) 463static int mwifiex_pcie_create_rxbd_ring(struct mwifiex_adapter *adapter)
454{ 464{
455 struct pcie_service_card *card = adapter->card; 465 struct pcie_service_card *card = adapter->card;
466 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
456 struct sk_buff *skb; 467 struct sk_buff *skb;
457 int i; 468 int i;
458 dma_addr_t buf_pa; 469 dma_addr_t buf_pa;
@@ -463,7 +474,7 @@ static int mwifiex_pcie_create_rxbd_ring(struct mwifiex_adapter *adapter)
463 * starts at zero with rollover bit set 474 * starts at zero with rollover bit set
464 */ 475 */
465 card->rxbd_wrptr = 0; 476 card->rxbd_wrptr = 0;
466 card->rxbd_rdptr |= MWIFIEX_BD_FLAG_ROLLOVER_IND; 477 card->rxbd_rdptr = reg->rx_rollover_ind;
467 478
468 card->rxbd_ring_size = sizeof(struct mwifiex_pcie_buf_desc) * 479 card->rxbd_ring_size = sizeof(struct mwifiex_pcie_buf_desc) *
469 MWIFIEX_MAX_TXRX_BD; 480 MWIFIEX_MAX_TXRX_BD;
@@ -526,6 +537,7 @@ static int mwifiex_pcie_create_rxbd_ring(struct mwifiex_adapter *adapter)
526static int mwifiex_pcie_delete_rxbd_ring(struct mwifiex_adapter *adapter) 537static int mwifiex_pcie_delete_rxbd_ring(struct mwifiex_adapter *adapter)
527{ 538{
528 struct pcie_service_card *card = adapter->card; 539 struct pcie_service_card *card = adapter->card;
540 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
529 struct sk_buff *skb; 541 struct sk_buff *skb;
530 int i; 542 int i;
531 543
@@ -550,7 +562,7 @@ static int mwifiex_pcie_delete_rxbd_ring(struct mwifiex_adapter *adapter)
550 card->rxbd_ring_pbase); 562 card->rxbd_ring_pbase);
551 card->rxbd_ring_size = 0; 563 card->rxbd_ring_size = 0;
552 card->rxbd_wrptr = 0; 564 card->rxbd_wrptr = 0;
553 card->rxbd_rdptr = 0 | MWIFIEX_BD_FLAG_ROLLOVER_IND; 565 card->rxbd_rdptr = 0 | reg->rx_rollover_ind;
554 card->rxbd_ring_vbase = NULL; 566 card->rxbd_ring_vbase = NULL;
555 card->rxbd_ring_pbase = 0; 567 card->rxbd_ring_pbase = 0;
556 568
@@ -563,6 +575,7 @@ static int mwifiex_pcie_delete_rxbd_ring(struct mwifiex_adapter *adapter)
563static int mwifiex_pcie_create_evtbd_ring(struct mwifiex_adapter *adapter) 575static int mwifiex_pcie_create_evtbd_ring(struct mwifiex_adapter *adapter)
564{ 576{
565 struct pcie_service_card *card = adapter->card; 577 struct pcie_service_card *card = adapter->card;
578 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
566 struct sk_buff *skb; 579 struct sk_buff *skb;
567 int i; 580 int i;
568 dma_addr_t buf_pa; 581 dma_addr_t buf_pa;
@@ -573,7 +586,7 @@ static int mwifiex_pcie_create_evtbd_ring(struct mwifiex_adapter *adapter)
573 * starts at zero with rollover bit set 586 * starts at zero with rollover bit set
574 */ 587 */
575 card->evtbd_wrptr = 0; 588 card->evtbd_wrptr = 0;
576 card->evtbd_rdptr |= MWIFIEX_BD_FLAG_ROLLOVER_IND; 589 card->evtbd_rdptr = reg->evt_rollover_ind;
577 590
578 card->evtbd_ring_size = sizeof(struct mwifiex_pcie_buf_desc) * 591 card->evtbd_ring_size = sizeof(struct mwifiex_pcie_buf_desc) *
579 MWIFIEX_MAX_EVT_BD; 592 MWIFIEX_MAX_EVT_BD;
@@ -636,6 +649,7 @@ static int mwifiex_pcie_create_evtbd_ring(struct mwifiex_adapter *adapter)
636static int mwifiex_pcie_delete_evtbd_ring(struct mwifiex_adapter *adapter) 649static int mwifiex_pcie_delete_evtbd_ring(struct mwifiex_adapter *adapter)
637{ 650{
638 struct pcie_service_card *card = adapter->card; 651 struct pcie_service_card *card = adapter->card;
652 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
639 struct sk_buff *skb; 653 struct sk_buff *skb;
640 int i; 654 int i;
641 655
@@ -658,7 +672,7 @@ static int mwifiex_pcie_delete_evtbd_ring(struct mwifiex_adapter *adapter)
658 card->evtbd_ring_vbase, 672 card->evtbd_ring_vbase,
659 card->evtbd_ring_pbase); 673 card->evtbd_ring_pbase);
660 card->evtbd_wrptr = 0; 674 card->evtbd_wrptr = 0;
661 card->evtbd_rdptr = 0 | MWIFIEX_BD_FLAG_ROLLOVER_IND; 675 card->evtbd_rdptr = 0 | reg->evt_rollover_ind;
662 card->evtbd_ring_size = 0; 676 card->evtbd_ring_size = 0;
663 card->evtbd_ring_vbase = NULL; 677 card->evtbd_ring_vbase = NULL;
664 card->evtbd_ring_pbase = 0; 678 card->evtbd_ring_pbase = 0;
@@ -771,12 +785,13 @@ static int mwifiex_pcie_delete_sleep_cookie_buf(struct mwifiex_adapter *adapter)
771static int mwifiex_clean_pcie_ring_buf(struct mwifiex_adapter *adapter) 785static int mwifiex_clean_pcie_ring_buf(struct mwifiex_adapter *adapter)
772{ 786{
773 struct pcie_service_card *card = adapter->card; 787 struct pcie_service_card *card = adapter->card;
788 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
774 u32 rdptr; 789 u32 rdptr;
775 790
776 /* Read the TX ring read pointer set by firmware */ 791 /* Read the TX ring read pointer set by firmware */
777 if (mwifiex_read_reg(adapter, REG_TXBD_RDPTR, &rdptr)) { 792 if (mwifiex_read_reg(adapter, reg->tx_rdptr, &rdptr)) {
778 dev_err(adapter->dev, 793 dev_err(adapter->dev,
779 "Flush TXBD: failed to read REG_TXBD_RDPTR\n"); 794 "Flush TXBD: failed to read reg->tx_rdptr\n");
780 return -1; 795 return -1;
781 } 796 }
782 797
@@ -805,14 +820,15 @@ static int mwifiex_pcie_send_data_complete(struct mwifiex_adapter *adapter)
805 dma_addr_t buf_pa; 820 dma_addr_t buf_pa;
806 u32 wrdoneidx, rdptr, unmap_count = 0; 821 u32 wrdoneidx, rdptr, unmap_count = 0;
807 struct pcie_service_card *card = adapter->card; 822 struct pcie_service_card *card = adapter->card;
823 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
808 824
809 if (!mwifiex_pcie_ok_to_access_hw(adapter)) 825 if (!mwifiex_pcie_ok_to_access_hw(adapter))
810 mwifiex_pm_wakeup_card(adapter); 826 mwifiex_pm_wakeup_card(adapter);
811 827
812 /* Read the TX ring read pointer set by firmware */ 828 /* Read the TX ring read pointer set by firmware */
813 if (mwifiex_read_reg(adapter, REG_TXBD_RDPTR, &rdptr)) { 829 if (mwifiex_read_reg(adapter, reg->tx_rdptr, &rdptr)) {
814 dev_err(adapter->dev, 830 dev_err(adapter->dev,
815 "SEND COMP: failed to read REG_TXBD_RDPTR\n"); 831 "SEND COMP: failed to read reg->tx_rdptr\n");
816 return -1; 832 return -1;
817 } 833 }
818 834
@@ -820,11 +836,11 @@ static int mwifiex_pcie_send_data_complete(struct mwifiex_adapter *adapter)
820 card->txbd_rdptr, rdptr); 836 card->txbd_rdptr, rdptr);
821 837
822 /* free from previous txbd_rdptr to current txbd_rdptr */ 838 /* free from previous txbd_rdptr to current txbd_rdptr */
823 while (((card->txbd_rdptr & MWIFIEX_TXBD_MASK) != 839 while (((card->txbd_rdptr & reg->tx_mask) !=
824 (rdptr & MWIFIEX_TXBD_MASK)) || 840 (rdptr & reg->tx_mask)) ||
825 ((card->txbd_rdptr & MWIFIEX_BD_FLAG_ROLLOVER_IND) != 841 ((card->txbd_rdptr & reg->tx_rollover_ind) !=
826 (rdptr & MWIFIEX_BD_FLAG_ROLLOVER_IND))) { 842 (rdptr & reg->tx_rollover_ind))) {
827 wrdoneidx = card->txbd_rdptr & MWIFIEX_TXBD_MASK; 843 wrdoneidx = card->txbd_rdptr & reg->tx_mask;
828 844
829 skb = card->tx_buf_list[wrdoneidx]; 845 skb = card->tx_buf_list[wrdoneidx];
830 if (skb) { 846 if (skb) {
@@ -850,20 +866,20 @@ static int mwifiex_pcie_send_data_complete(struct mwifiex_adapter *adapter)
850 card->txbd_ring[wrdoneidx]->flags = 0; 866 card->txbd_ring[wrdoneidx]->flags = 0;
851 card->txbd_rdptr++; 867 card->txbd_rdptr++;
852 868
853 if ((card->txbd_rdptr & MWIFIEX_TXBD_MASK) == num_tx_buffs) 869 if ((card->txbd_rdptr & reg->tx_mask) == num_tx_buffs)
854 card->txbd_rdptr = ((card->txbd_rdptr & 870 card->txbd_rdptr = ((card->txbd_rdptr &
855 MWIFIEX_BD_FLAG_ROLLOVER_IND) ^ 871 reg->tx_rollover_ind) ^
856 MWIFIEX_BD_FLAG_ROLLOVER_IND); 872 reg->tx_rollover_ind);
857 } 873 }
858 874
859 if (unmap_count) 875 if (unmap_count)
860 adapter->data_sent = false; 876 adapter->data_sent = false;
861 877
862 if (card->txbd_flush) { 878 if (card->txbd_flush) {
863 if (((card->txbd_wrptr & MWIFIEX_TXBD_MASK) == 879 if (((card->txbd_wrptr & reg->tx_mask) ==
864 (card->txbd_rdptr & MWIFIEX_TXBD_MASK)) && 880 (card->txbd_rdptr & reg->tx_mask)) &&
865 ((card->txbd_wrptr & MWIFIEX_BD_FLAG_ROLLOVER_IND) != 881 ((card->txbd_wrptr & reg->tx_rollover_ind) !=
866 (card->txbd_rdptr & MWIFIEX_BD_FLAG_ROLLOVER_IND))) 882 (card->txbd_rdptr & reg->tx_rollover_ind)))
867 card->txbd_flush = 0; 883 card->txbd_flush = 0;
868 else 884 else
869 mwifiex_clean_pcie_ring_buf(adapter); 885 mwifiex_clean_pcie_ring_buf(adapter);
@@ -883,6 +899,7 @@ mwifiex_pcie_send_data(struct mwifiex_adapter *adapter, struct sk_buff *skb,
883 struct mwifiex_tx_param *tx_param) 899 struct mwifiex_tx_param *tx_param)
884{ 900{
885 struct pcie_service_card *card = adapter->card; 901 struct pcie_service_card *card = adapter->card;
902 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
886 u32 wrindx; 903 u32 wrindx;
887 int ret; 904 int ret;
888 dma_addr_t buf_pa; 905 dma_addr_t buf_pa;
@@ -913,7 +930,7 @@ mwifiex_pcie_send_data(struct mwifiex_adapter *adapter, struct sk_buff *skb,
913 PCI_DMA_TODEVICE)) 930 PCI_DMA_TODEVICE))
914 return -1; 931 return -1;
915 932
916 wrindx = card->txbd_wrptr & MWIFIEX_TXBD_MASK; 933 wrindx = card->txbd_wrptr & reg->tx_mask;
917 MWIFIEX_SKB_PACB(skb, &buf_pa); 934 MWIFIEX_SKB_PACB(skb, &buf_pa);
918 card->tx_buf_list[wrindx] = skb; 935 card->tx_buf_list[wrindx] = skb;
919 card->txbd_ring[wrindx]->paddr = buf_pa; 936 card->txbd_ring[wrindx]->paddr = buf_pa;
@@ -921,17 +938,17 @@ mwifiex_pcie_send_data(struct mwifiex_adapter *adapter, struct sk_buff *skb,
921 card->txbd_ring[wrindx]->flags = MWIFIEX_BD_FLAG_FIRST_DESC | 938 card->txbd_ring[wrindx]->flags = MWIFIEX_BD_FLAG_FIRST_DESC |
922 MWIFIEX_BD_FLAG_LAST_DESC; 939 MWIFIEX_BD_FLAG_LAST_DESC;
923 940
924 if ((++card->txbd_wrptr & MWIFIEX_TXBD_MASK) == 941 if ((++card->txbd_wrptr & reg->tx_mask) ==
925 MWIFIEX_MAX_TXRX_BD) 942 MWIFIEX_MAX_TXRX_BD)
926 card->txbd_wrptr = ((card->txbd_wrptr & 943 card->txbd_wrptr = ((card->txbd_wrptr &
927 MWIFIEX_BD_FLAG_ROLLOVER_IND) ^ 944 reg->tx_rollover_ind) ^
928 MWIFIEX_BD_FLAG_ROLLOVER_IND); 945 reg->tx_rollover_ind);
929 946
930 /* Write the TX ring write pointer in to REG_TXBD_WRPTR */ 947 /* Write the TX ring write pointer in to reg->tx_wrptr */
931 if (mwifiex_write_reg(adapter, REG_TXBD_WRPTR, 948 if (mwifiex_write_reg(adapter, reg->tx_wrptr,
932 card->txbd_wrptr)) { 949 card->txbd_wrptr)) {
933 dev_err(adapter->dev, 950 dev_err(adapter->dev,
934 "SEND DATA: failed to write REG_TXBD_WRPTR\n"); 951 "SEND DATA: failed to write reg->tx_wrptr\n");
935 ret = -1; 952 ret = -1;
936 goto done_unmap; 953 goto done_unmap;
937 } 954 }
@@ -984,6 +1001,7 @@ done_unmap:
984static int mwifiex_pcie_process_recv_data(struct mwifiex_adapter *adapter) 1001static int mwifiex_pcie_process_recv_data(struct mwifiex_adapter *adapter)
985{ 1002{
986 struct pcie_service_card *card = adapter->card; 1003 struct pcie_service_card *card = adapter->card;
1004 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
987 u32 wrptr, rd_index; 1005 u32 wrptr, rd_index;
988 dma_addr_t buf_pa; 1006 dma_addr_t buf_pa;
989 int ret = 0; 1007 int ret = 0;
@@ -993,23 +1011,23 @@ static int mwifiex_pcie_process_recv_data(struct mwifiex_adapter *adapter)
993 mwifiex_pm_wakeup_card(adapter); 1011 mwifiex_pm_wakeup_card(adapter);
994 1012
995 /* Read the RX ring Write pointer set by firmware */ 1013 /* Read the RX ring Write pointer set by firmware */
996 if (mwifiex_read_reg(adapter, REG_RXBD_WRPTR, &wrptr)) { 1014 if (mwifiex_read_reg(adapter, reg->rx_wrptr, &wrptr)) {
997 dev_err(adapter->dev, 1015 dev_err(adapter->dev,
998 "RECV DATA: failed to read REG_TXBD_RDPTR\n"); 1016 "RECV DATA: failed to read reg->rx_wrptr\n");
999 ret = -1; 1017 ret = -1;
1000 goto done; 1018 goto done;
1001 } 1019 }
1002 card->rxbd_wrptr = wrptr; 1020 card->rxbd_wrptr = wrptr;
1003 1021
1004 while (((wrptr & MWIFIEX_RXBD_MASK) != 1022 while (((wrptr & reg->rx_mask) !=
1005 (card->rxbd_rdptr & MWIFIEX_RXBD_MASK)) || 1023 (card->rxbd_rdptr & reg->rx_mask)) ||
1006 ((wrptr & MWIFIEX_BD_FLAG_ROLLOVER_IND) == 1024 ((wrptr & reg->rx_rollover_ind) ==
1007 (card->rxbd_rdptr & MWIFIEX_BD_FLAG_ROLLOVER_IND))) { 1025 (card->rxbd_rdptr & reg->rx_rollover_ind))) {
1008 struct sk_buff *skb_data; 1026 struct sk_buff *skb_data;
1009 u16 rx_len; 1027 u16 rx_len;
1010 __le16 pkt_len; 1028 __le16 pkt_len;
1011 1029
1012 rd_index = card->rxbd_rdptr & MWIFIEX_RXBD_MASK; 1030 rd_index = card->rxbd_rdptr & reg->rx_mask;
1013 skb_data = card->rx_buf_list[rd_index]; 1031 skb_data = card->rx_buf_list[rd_index];
1014 1032
1015 MWIFIEX_SKB_PACB(skb_data, &buf_pa); 1033 MWIFIEX_SKB_PACB(skb_data, &buf_pa);
@@ -1051,28 +1069,28 @@ static int mwifiex_pcie_process_recv_data(struct mwifiex_adapter *adapter)
1051 card->rxbd_ring[rd_index]->len = skb_tmp->len; 1069 card->rxbd_ring[rd_index]->len = skb_tmp->len;
1052 card->rxbd_ring[rd_index]->flags = 0; 1070 card->rxbd_ring[rd_index]->flags = 0;
1053 1071
1054 if ((++card->rxbd_rdptr & MWIFIEX_RXBD_MASK) == 1072 if ((++card->rxbd_rdptr & reg->rx_mask) ==
1055 MWIFIEX_MAX_TXRX_BD) { 1073 MWIFIEX_MAX_TXRX_BD) {
1056 card->rxbd_rdptr = ((card->rxbd_rdptr & 1074 card->rxbd_rdptr = ((card->rxbd_rdptr &
1057 MWIFIEX_BD_FLAG_ROLLOVER_IND) ^ 1075 reg->rx_rollover_ind) ^
1058 MWIFIEX_BD_FLAG_ROLLOVER_IND); 1076 reg->rx_rollover_ind);
1059 } 1077 }
1060 dev_dbg(adapter->dev, "info: RECV DATA: <Rd: %#x, Wr: %#x>\n", 1078 dev_dbg(adapter->dev, "info: RECV DATA: <Rd: %#x, Wr: %#x>\n",
1061 card->rxbd_rdptr, wrptr); 1079 card->rxbd_rdptr, wrptr);
1062 1080
1063 /* Write the RX ring read pointer in to REG_RXBD_RDPTR */ 1081 /* Write the RX ring read pointer in to reg->rx_rdptr */
1064 if (mwifiex_write_reg(adapter, REG_RXBD_RDPTR, 1082 if (mwifiex_write_reg(adapter, reg->rx_rdptr,
1065 card->rxbd_rdptr)) { 1083 card->rxbd_rdptr)) {
1066 dev_err(adapter->dev, 1084 dev_err(adapter->dev,
1067 "RECV DATA: failed to write REG_RXBD_RDPTR\n"); 1085 "RECV DATA: failed to write reg->rx_rdptr\n");
1068 ret = -1; 1086 ret = -1;
1069 goto done; 1087 goto done;
1070 } 1088 }
1071 1089
1072 /* Read the RX ring Write pointer set by firmware */ 1090 /* Read the RX ring Write pointer set by firmware */
1073 if (mwifiex_read_reg(adapter, REG_RXBD_WRPTR, &wrptr)) { 1091 if (mwifiex_read_reg(adapter, reg->rx_wrptr, &wrptr)) {
1074 dev_err(adapter->dev, 1092 dev_err(adapter->dev,
1075 "RECV DATA: failed to read REG_TXBD_RDPTR\n"); 1093 "RECV DATA: failed to read reg->rx_wrptr\n");
1076 ret = -1; 1094 ret = -1;
1077 goto done; 1095 goto done;
1078 } 1096 }
@@ -1093,6 +1111,7 @@ mwifiex_pcie_send_boot_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb)
1093{ 1111{
1094 dma_addr_t buf_pa; 1112 dma_addr_t buf_pa;
1095 struct pcie_service_card *card = adapter->card; 1113 struct pcie_service_card *card = adapter->card;
1114 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
1096 1115
1097 if (!(skb->data && skb->len)) { 1116 if (!(skb->data && skb->len)) {
1098 dev_err(adapter->dev, 1117 dev_err(adapter->dev,
@@ -1106,9 +1125,10 @@ mwifiex_pcie_send_boot_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb)
1106 1125
1107 MWIFIEX_SKB_PACB(skb, &buf_pa); 1126 MWIFIEX_SKB_PACB(skb, &buf_pa);
1108 1127
1109 /* Write the lower 32bits of the physical address to scratch 1128 /* Write the lower 32bits of the physical address to low command
1110 * register 0 */ 1129 * address scratch register
1111 if (mwifiex_write_reg(adapter, PCIE_SCRATCH_0_REG, (u32)buf_pa)) { 1130 */
1131 if (mwifiex_write_reg(adapter, reg->cmd_addr_lo, (u32)buf_pa)) {
1112 dev_err(adapter->dev, 1132 dev_err(adapter->dev,
1113 "%s: failed to write download command to boot code.\n", 1133 "%s: failed to write download command to boot code.\n",
1114 __func__); 1134 __func__);
@@ -1117,9 +1137,10 @@ mwifiex_pcie_send_boot_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb)
1117 return -1; 1137 return -1;
1118 } 1138 }
1119 1139
1120 /* Write the upper 32bits of the physical address to scratch 1140 /* Write the upper 32bits of the physical address to high command
1121 * register 1 */ 1141 * address scratch register
1122 if (mwifiex_write_reg(adapter, PCIE_SCRATCH_1_REG, 1142 */
1143 if (mwifiex_write_reg(adapter, reg->cmd_addr_hi,
1123 (u32)((u64)buf_pa >> 32))) { 1144 (u32)((u64)buf_pa >> 32))) {
1124 dev_err(adapter->dev, 1145 dev_err(adapter->dev,
1125 "%s: failed to write download command to boot code.\n", 1146 "%s: failed to write download command to boot code.\n",
@@ -1129,10 +1150,10 @@ mwifiex_pcie_send_boot_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb)
1129 return -1; 1150 return -1;
1130 } 1151 }
1131 1152
1132 /* Write the command length to scratch register 2 */ 1153 /* Write the command length to cmd_size scratch register */
1133 if (mwifiex_write_reg(adapter, PCIE_SCRATCH_2_REG, skb->len)) { 1154 if (mwifiex_write_reg(adapter, reg->cmd_size, skb->len)) {
1134 dev_err(adapter->dev, 1155 dev_err(adapter->dev,
1135 "%s: failed to write command len to scratch reg 2\n", 1156 "%s: failed to write command len to cmd_size scratch reg\n",
1136 __func__); 1157 __func__);
1137 pci_unmap_single(card->dev, buf_pa, MWIFIEX_UPLD_SIZE, 1158 pci_unmap_single(card->dev, buf_pa, MWIFIEX_UPLD_SIZE,
1138 PCI_DMA_TODEVICE); 1159 PCI_DMA_TODEVICE);
@@ -1158,11 +1179,12 @@ mwifiex_pcie_send_boot_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb)
1158static int mwifiex_pcie_init_fw_port(struct mwifiex_adapter *adapter) 1179static int mwifiex_pcie_init_fw_port(struct mwifiex_adapter *adapter)
1159{ 1180{
1160 struct pcie_service_card *card = adapter->card; 1181 struct pcie_service_card *card = adapter->card;
1182 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
1161 1183
1162 /* Write the RX ring read pointer in to REG_RXBD_RDPTR */ 1184 /* Write the RX ring read pointer in to reg->rx_rdptr */
1163 if (mwifiex_write_reg(adapter, REG_RXBD_RDPTR, card->rxbd_rdptr | 0)) { 1185 if (mwifiex_write_reg(adapter, reg->rx_rdptr, card->rxbd_rdptr)) {
1164 dev_err(adapter->dev, 1186 dev_err(adapter->dev,
1165 "RECV DATA: failed to write REG_RXBD_RDPTR\n"); 1187 "RECV DATA: failed to write reg->rx_rdptr\n");
1166 return -1; 1188 return -1;
1167 } 1189 }
1168 return 0; 1190 return 0;
@@ -1174,6 +1196,7 @@ static int
1174mwifiex_pcie_send_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb) 1196mwifiex_pcie_send_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb)
1175{ 1197{
1176 struct pcie_service_card *card = adapter->card; 1198 struct pcie_service_card *card = adapter->card;
1199 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
1177 int ret = 0; 1200 int ret = 0;
1178 dma_addr_t cmd_buf_pa, cmdrsp_buf_pa; 1201 dma_addr_t cmd_buf_pa, cmdrsp_buf_pa;
1179 u8 *payload = (u8 *)skb->data; 1202 u8 *payload = (u8 *)skb->data;
@@ -1206,7 +1229,7 @@ mwifiex_pcie_send_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb)
1206 1229
1207 /* To send a command, the driver will: 1230 /* To send a command, the driver will:
1208 1. Write the 64bit physical address of the data buffer to 1231 1. Write the 64bit physical address of the data buffer to
1209 SCRATCH1 + SCRATCH0 1232 cmd response address low + cmd response address high
1210 2. Ring the door bell (i.e. set the door bell interrupt) 1233 2. Ring the door bell (i.e. set the door bell interrupt)
1211 1234
1212 In response to door bell interrupt, the firmware will perform 1235 In response to door bell interrupt, the firmware will perform
@@ -1218,7 +1241,7 @@ mwifiex_pcie_send_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb)
1218 MWIFIEX_SKB_PACB(card->cmdrsp_buf, &cmdrsp_buf_pa); 1241 MWIFIEX_SKB_PACB(card->cmdrsp_buf, &cmdrsp_buf_pa);
1219 /* Write the lower 32bits of the cmdrsp buffer physical 1242 /* Write the lower 32bits of the cmdrsp buffer physical
1220 address */ 1243 address */
1221 if (mwifiex_write_reg(adapter, REG_CMDRSP_ADDR_LO, 1244 if (mwifiex_write_reg(adapter, reg->cmdrsp_addr_lo,
1222 (u32)cmdrsp_buf_pa)) { 1245 (u32)cmdrsp_buf_pa)) {
1223 dev_err(adapter->dev, 1246 dev_err(adapter->dev,
1224 "Failed to write download cmd to boot code.\n"); 1247 "Failed to write download cmd to boot code.\n");
@@ -1227,7 +1250,7 @@ mwifiex_pcie_send_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb)
1227 } 1250 }
1228 /* Write the upper 32bits of the cmdrsp buffer physical 1251 /* Write the upper 32bits of the cmdrsp buffer physical
1229 address */ 1252 address */
1230 if (mwifiex_write_reg(adapter, REG_CMDRSP_ADDR_HI, 1253 if (mwifiex_write_reg(adapter, reg->cmdrsp_addr_hi,
1231 (u32)((u64)cmdrsp_buf_pa >> 32))) { 1254 (u32)((u64)cmdrsp_buf_pa >> 32))) {
1232 dev_err(adapter->dev, 1255 dev_err(adapter->dev,
1233 "Failed to write download cmd to boot code.\n"); 1256 "Failed to write download cmd to boot code.\n");
@@ -1237,15 +1260,16 @@ mwifiex_pcie_send_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb)
1237 } 1260 }
1238 1261
1239 MWIFIEX_SKB_PACB(card->cmd_buf, &cmd_buf_pa); 1262 MWIFIEX_SKB_PACB(card->cmd_buf, &cmd_buf_pa);
1240 /* Write the lower 32bits of the physical address to REG_CMD_ADDR_LO */ 1263 /* Write the lower 32bits of the physical address to reg->cmd_addr_lo */
1241 if (mwifiex_write_reg(adapter, REG_CMD_ADDR_LO, (u32)cmd_buf_pa)) { 1264 if (mwifiex_write_reg(adapter, reg->cmd_addr_lo,
1265 (u32)cmd_buf_pa)) {
1242 dev_err(adapter->dev, 1266 dev_err(adapter->dev,
1243 "Failed to write download cmd to boot code.\n"); 1267 "Failed to write download cmd to boot code.\n");
1244 ret = -1; 1268 ret = -1;
1245 goto done; 1269 goto done;
1246 } 1270 }
1247 /* Write the upper 32bits of the physical address to REG_CMD_ADDR_HI */ 1271 /* Write the upper 32bits of the physical address to reg->cmd_addr_hi */
1248 if (mwifiex_write_reg(adapter, REG_CMD_ADDR_HI, 1272 if (mwifiex_write_reg(adapter, reg->cmd_addr_hi,
1249 (u32)((u64)cmd_buf_pa >> 32))) { 1273 (u32)((u64)cmd_buf_pa >> 32))) {
1250 dev_err(adapter->dev, 1274 dev_err(adapter->dev,
1251 "Failed to write download cmd to boot code.\n"); 1275 "Failed to write download cmd to boot code.\n");
@@ -1253,10 +1277,11 @@ mwifiex_pcie_send_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb)
1253 goto done; 1277 goto done;
1254 } 1278 }
1255 1279
1256 /* Write the command length to REG_CMD_SIZE */ 1280 /* Write the command length to reg->cmd_size */
1257 if (mwifiex_write_reg(adapter, REG_CMD_SIZE, card->cmd_buf->len)) { 1281 if (mwifiex_write_reg(adapter, reg->cmd_size,
1282 card->cmd_buf->len)) {
1258 dev_err(adapter->dev, 1283 dev_err(adapter->dev,
1259 "Failed to write cmd len to REG_CMD_SIZE\n"); 1284 "Failed to write cmd len to reg->cmd_size\n");
1260 ret = -1; 1285 ret = -1;
1261 goto done; 1286 goto done;
1262 } 1287 }
@@ -1283,6 +1308,7 @@ done:
1283static int mwifiex_pcie_process_cmd_complete(struct mwifiex_adapter *adapter) 1308static int mwifiex_pcie_process_cmd_complete(struct mwifiex_adapter *adapter)
1284{ 1309{
1285 struct pcie_service_card *card = adapter->card; 1310 struct pcie_service_card *card = adapter->card;
1311 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
1286 struct sk_buff *skb = card->cmdrsp_buf; 1312 struct sk_buff *skb = card->cmdrsp_buf;
1287 int count = 0; 1313 int count = 0;
1288 u16 rx_len; 1314 u16 rx_len;
@@ -1328,14 +1354,14 @@ static int mwifiex_pcie_process_cmd_complete(struct mwifiex_adapter *adapter)
1328 /* Clear the cmd-rsp buffer address in scratch registers. This 1354 /* Clear the cmd-rsp buffer address in scratch registers. This
1329 will prevent firmware from writing to the same response 1355 will prevent firmware from writing to the same response
1330 buffer again. */ 1356 buffer again. */
1331 if (mwifiex_write_reg(adapter, REG_CMDRSP_ADDR_LO, 0)) { 1357 if (mwifiex_write_reg(adapter, reg->cmdrsp_addr_lo, 0)) {
1332 dev_err(adapter->dev, 1358 dev_err(adapter->dev,
1333 "cmd_done: failed to clear cmd_rsp_addr_lo\n"); 1359 "cmd_done: failed to clear cmd_rsp_addr_lo\n");
1334 return -1; 1360 return -1;
1335 } 1361 }
1336 /* Write the upper 32bits of the cmdrsp buffer physical 1362 /* Write the upper 32bits of the cmdrsp buffer physical
1337 address */ 1363 address */
1338 if (mwifiex_write_reg(adapter, REG_CMDRSP_ADDR_HI, 0)) { 1364 if (mwifiex_write_reg(adapter, reg->cmdrsp_addr_hi, 0)) {
1339 dev_err(adapter->dev, 1365 dev_err(adapter->dev,
1340 "cmd_done: failed to clear cmd_rsp_addr_hi\n"); 1366 "cmd_done: failed to clear cmd_rsp_addr_hi\n");
1341 return -1; 1367 return -1;
@@ -1380,6 +1406,7 @@ static int mwifiex_pcie_cmdrsp_complete(struct mwifiex_adapter *adapter,
1380static int mwifiex_pcie_process_event_ready(struct mwifiex_adapter *adapter) 1406static int mwifiex_pcie_process_event_ready(struct mwifiex_adapter *adapter)
1381{ 1407{
1382 struct pcie_service_card *card = adapter->card; 1408 struct pcie_service_card *card = adapter->card;
1409 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
1383 u32 rdptr = card->evtbd_rdptr & MWIFIEX_EVTBD_MASK; 1410 u32 rdptr = card->evtbd_rdptr & MWIFIEX_EVTBD_MASK;
1384 u32 wrptr, event; 1411 u32 wrptr, event;
1385 dma_addr_t buf_pa; 1412 dma_addr_t buf_pa;
@@ -1399,9 +1426,9 @@ static int mwifiex_pcie_process_event_ready(struct mwifiex_adapter *adapter)
1399 } 1426 }
1400 1427
1401 /* Read the event ring write pointer set by firmware */ 1428 /* Read the event ring write pointer set by firmware */
1402 if (mwifiex_read_reg(adapter, REG_EVTBD_WRPTR, &wrptr)) { 1429 if (mwifiex_read_reg(adapter, reg->evt_wrptr, &wrptr)) {
1403 dev_err(adapter->dev, 1430 dev_err(adapter->dev,
1404 "EventReady: failed to read REG_EVTBD_WRPTR\n"); 1431 "EventReady: failed to read reg->evt_wrptr\n");
1405 return -1; 1432 return -1;
1406 } 1433 }
1407 1434
@@ -1409,8 +1436,8 @@ static int mwifiex_pcie_process_event_ready(struct mwifiex_adapter *adapter)
1409 card->evtbd_rdptr, wrptr); 1436 card->evtbd_rdptr, wrptr);
1410 if (((wrptr & MWIFIEX_EVTBD_MASK) != (card->evtbd_rdptr 1437 if (((wrptr & MWIFIEX_EVTBD_MASK) != (card->evtbd_rdptr
1411 & MWIFIEX_EVTBD_MASK)) || 1438 & MWIFIEX_EVTBD_MASK)) ||
1412 ((wrptr & MWIFIEX_BD_FLAG_ROLLOVER_IND) == 1439 ((wrptr & reg->evt_rollover_ind) ==
1413 (card->evtbd_rdptr & MWIFIEX_BD_FLAG_ROLLOVER_IND))) { 1440 (card->evtbd_rdptr & reg->evt_rollover_ind))) {
1414 struct sk_buff *skb_cmd; 1441 struct sk_buff *skb_cmd;
1415 __le16 data_len = 0; 1442 __le16 data_len = 0;
1416 u16 evt_len; 1443 u16 evt_len;
@@ -1462,6 +1489,7 @@ static int mwifiex_pcie_event_complete(struct mwifiex_adapter *adapter,
1462 struct sk_buff *skb) 1489 struct sk_buff *skb)
1463{ 1490{
1464 struct pcie_service_card *card = adapter->card; 1491 struct pcie_service_card *card = adapter->card;
1492 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
1465 int ret = 0; 1493 int ret = 0;
1466 u32 rdptr = card->evtbd_rdptr & MWIFIEX_EVTBD_MASK; 1494 u32 rdptr = card->evtbd_rdptr & MWIFIEX_EVTBD_MASK;
1467 u32 wrptr; 1495 u32 wrptr;
@@ -1477,9 +1505,9 @@ static int mwifiex_pcie_event_complete(struct mwifiex_adapter *adapter,
1477 } 1505 }
1478 1506
1479 /* Read the event ring write pointer set by firmware */ 1507 /* Read the event ring write pointer set by firmware */
1480 if (mwifiex_read_reg(adapter, REG_EVTBD_WRPTR, &wrptr)) { 1508 if (mwifiex_read_reg(adapter, reg->evt_wrptr, &wrptr)) {
1481 dev_err(adapter->dev, 1509 dev_err(adapter->dev,
1482 "event_complete: failed to read REG_EVTBD_WRPTR\n"); 1510 "event_complete: failed to read reg->evt_wrptr\n");
1483 return -1; 1511 return -1;
1484 } 1512 }
1485 1513
@@ -1504,17 +1532,18 @@ static int mwifiex_pcie_event_complete(struct mwifiex_adapter *adapter,
1504 1532
1505 if ((++card->evtbd_rdptr & MWIFIEX_EVTBD_MASK) == MWIFIEX_MAX_EVT_BD) { 1533 if ((++card->evtbd_rdptr & MWIFIEX_EVTBD_MASK) == MWIFIEX_MAX_EVT_BD) {
1506 card->evtbd_rdptr = ((card->evtbd_rdptr & 1534 card->evtbd_rdptr = ((card->evtbd_rdptr &
1507 MWIFIEX_BD_FLAG_ROLLOVER_IND) ^ 1535 reg->evt_rollover_ind) ^
1508 MWIFIEX_BD_FLAG_ROLLOVER_IND); 1536 reg->evt_rollover_ind);
1509 } 1537 }
1510 1538
1511 dev_dbg(adapter->dev, "info: Updated <Rd: 0x%x, Wr: 0x%x>", 1539 dev_dbg(adapter->dev, "info: Updated <Rd: 0x%x, Wr: 0x%x>",
1512 card->evtbd_rdptr, wrptr); 1540 card->evtbd_rdptr, wrptr);
1513 1541
1514 /* Write the event ring read pointer in to REG_EVTBD_RDPTR */ 1542 /* Write the event ring read pointer in to reg->evt_rdptr */
1515 if (mwifiex_write_reg(adapter, REG_EVTBD_RDPTR, card->evtbd_rdptr)) { 1543 if (mwifiex_write_reg(adapter, reg->evt_rdptr,
1544 card->evtbd_rdptr)) {
1516 dev_err(adapter->dev, 1545 dev_err(adapter->dev,
1517 "event_complete: failed to read REG_EVTBD_RDPTR\n"); 1546 "event_complete: failed to read reg->evt_rdptr\n");
1518 return -1; 1547 return -1;
1519 } 1548 }
1520 1549
@@ -1543,6 +1572,7 @@ static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter *adapter,
1543 u32 block_retry_cnt = 0; 1572 u32 block_retry_cnt = 0;
1544 dma_addr_t buf_pa; 1573 dma_addr_t buf_pa;
1545 struct pcie_service_card *card = adapter->card; 1574 struct pcie_service_card *card = adapter->card;
1575 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
1546 1576
1547 if (!firmware || !firmware_len) { 1577 if (!firmware || !firmware_len) {
1548 dev_err(adapter->dev, 1578 dev_err(adapter->dev,
@@ -1574,7 +1604,7 @@ static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter *adapter,
1574 break; 1604 break;
1575 1605
1576 for (tries = 0; tries < MAX_POLL_TRIES; tries++) { 1606 for (tries = 0; tries < MAX_POLL_TRIES; tries++) {
1577 ret = mwifiex_read_reg(adapter, PCIE_SCRATCH_2_REG, 1607 ret = mwifiex_read_reg(adapter, reg->cmd_size,
1578 &len); 1608 &len);
1579 if (ret) { 1609 if (ret) {
1580 dev_warn(adapter->dev, 1610 dev_warn(adapter->dev,
@@ -1620,16 +1650,15 @@ static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter *adapter,
1620 1650
1621 dev_dbg(adapter->dev, "."); 1651 dev_dbg(adapter->dev, ".");
1622 1652
1623 tx_blocks = (txlen + 1653 tx_blocks = (txlen + card->pcie.blksz_fw_dl - 1) /
1624 MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD - 1) / 1654 card->pcie.blksz_fw_dl;
1625 MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD;
1626 1655
1627 /* Copy payload to buffer */ 1656 /* Copy payload to buffer */
1628 memmove(skb->data, &firmware[offset], txlen); 1657 memmove(skb->data, &firmware[offset], txlen);
1629 } 1658 }
1630 1659
1631 skb_put(skb, MWIFIEX_UPLD_SIZE - skb->len); 1660 skb_put(skb, MWIFIEX_UPLD_SIZE - skb->len);
1632 skb_trim(skb, tx_blocks * MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD); 1661 skb_trim(skb, tx_blocks * card->pcie.blksz_fw_dl);
1633 1662
1634 /* Send the boot command to device */ 1663 /* Send the boot command to device */
1635 if (mwifiex_pcie_send_boot_cmd(adapter, skb)) { 1664 if (mwifiex_pcie_send_boot_cmd(adapter, skb)) {
@@ -1682,6 +1711,8 @@ mwifiex_check_fw_status(struct mwifiex_adapter *adapter, u32 poll_num)
1682{ 1711{
1683 int ret = 0; 1712 int ret = 0;
1684 u32 firmware_stat, winner_status; 1713 u32 firmware_stat, winner_status;
1714 struct pcie_service_card *card = adapter->card;
1715 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
1685 u32 tries; 1716 u32 tries;
1686 1717
1687 /* Mask spurios interrupts */ 1718 /* Mask spurios interrupts */
@@ -1692,7 +1723,8 @@ mwifiex_check_fw_status(struct mwifiex_adapter *adapter, u32 poll_num)
1692 } 1723 }
1693 1724
1694 dev_dbg(adapter->dev, "Setting driver ready signature\n"); 1725 dev_dbg(adapter->dev, "Setting driver ready signature\n");
1695 if (mwifiex_write_reg(adapter, REG_DRV_READY, FIRMWARE_READY_PCIE)) { 1726 if (mwifiex_write_reg(adapter, reg->drv_rdy,
1727 FIRMWARE_READY_PCIE)) {
1696 dev_err(adapter->dev, 1728 dev_err(adapter->dev,
1697 "Failed to write driver ready signature\n"); 1729 "Failed to write driver ready signature\n");
1698 return -1; 1730 return -1;
@@ -1700,7 +1732,7 @@ mwifiex_check_fw_status(struct mwifiex_adapter *adapter, u32 poll_num)
1700 1732
1701 /* Wait for firmware initialization event */ 1733 /* Wait for firmware initialization event */
1702 for (tries = 0; tries < poll_num; tries++) { 1734 for (tries = 0; tries < poll_num; tries++) {
1703 if (mwifiex_read_reg(adapter, PCIE_SCRATCH_3_REG, 1735 if (mwifiex_read_reg(adapter, reg->fw_status,
1704 &firmware_stat)) 1736 &firmware_stat))
1705 ret = -1; 1737 ret = -1;
1706 else 1738 else
@@ -1717,7 +1749,7 @@ mwifiex_check_fw_status(struct mwifiex_adapter *adapter, u32 poll_num)
1717 } 1749 }
1718 1750
1719 if (ret) { 1751 if (ret) {
1720 if (mwifiex_read_reg(adapter, PCIE_SCRATCH_3_REG, 1752 if (mwifiex_read_reg(adapter, reg->fw_status,
1721 &winner_status)) 1753 &winner_status))
1722 ret = -1; 1754 ret = -1;
1723 else if (!winner_status) { 1755 else if (!winner_status) {
@@ -2061,10 +2093,11 @@ static void mwifiex_pcie_cleanup(struct mwifiex_adapter *adapter)
2061{ 2093{
2062 struct pcie_service_card *card = adapter->card; 2094 struct pcie_service_card *card = adapter->card;
2063 struct pci_dev *pdev = card->dev; 2095 struct pci_dev *pdev = card->dev;
2096 const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
2064 2097
2065 if (user_rmmod) { 2098 if (user_rmmod) {
2066 dev_dbg(adapter->dev, "Clearing driver ready signature\n"); 2099 dev_dbg(adapter->dev, "Clearing driver ready signature\n");
2067 if (mwifiex_write_reg(adapter, REG_DRV_READY, 0x00000000)) 2100 if (mwifiex_write_reg(adapter, reg->drv_rdy, 0x00000000))
2068 dev_err(adapter->dev, 2101 dev_err(adapter->dev,
2069 "Failed to write driver not-ready signature\n"); 2102 "Failed to write driver not-ready signature\n");
2070 } 2103 }
@@ -2102,7 +2135,7 @@ static int mwifiex_register_dev(struct mwifiex_adapter *adapter)
2102 } 2135 }
2103 2136
2104 adapter->dev = &pdev->dev; 2137 adapter->dev = &pdev->dev;
2105 strcpy(adapter->fw_name, PCIE8766_DEFAULT_FW_NAME); 2138 strcpy(adapter->fw_name, card->pcie.firmware);
2106 2139
2107 return 0; 2140 return 0;
2108} 2141}