diff options
author | Avinash Patil <patila@marvell.com> | 2013-02-08 21:18:06 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-02-11 15:34:56 -0500 |
commit | dd04e6acd828d51255fbb2d9b7b0e5b85df04f0b (patch) | |
tree | e5e301e71fb4eec49755172ae9740d3fd52cdb2b /drivers/net/wireless/mwifiex/pcie.c | |
parent | 1a6404a1d8497692f31808319d662c739033c491 (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.c | 211 |
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) | |||
369 | static int mwifiex_pcie_create_txbd_ring(struct mwifiex_adapter *adapter) | 377 | static 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) | |||
417 | static int mwifiex_pcie_delete_txbd_ring(struct mwifiex_adapter *adapter) | 426 | static 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) | |||
453 | static int mwifiex_pcie_create_rxbd_ring(struct mwifiex_adapter *adapter) | 463 | static 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) | |||
526 | static int mwifiex_pcie_delete_rxbd_ring(struct mwifiex_adapter *adapter) | 537 | static 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) | |||
563 | static int mwifiex_pcie_create_evtbd_ring(struct mwifiex_adapter *adapter) | 575 | static 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) | |||
636 | static int mwifiex_pcie_delete_evtbd_ring(struct mwifiex_adapter *adapter) | 649 | static 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) | |||
771 | static int mwifiex_clean_pcie_ring_buf(struct mwifiex_adapter *adapter) | 785 | static 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: | |||
984 | static int mwifiex_pcie_process_recv_data(struct mwifiex_adapter *adapter) | 1001 | static 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) | |||
1158 | static int mwifiex_pcie_init_fw_port(struct mwifiex_adapter *adapter) | 1179 | static 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 | |||
1174 | mwifiex_pcie_send_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb) | 1196 | mwifiex_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: | |||
1283 | static int mwifiex_pcie_process_cmd_complete(struct mwifiex_adapter *adapter) | 1308 | static 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, | |||
1380 | static int mwifiex_pcie_process_event_ready(struct mwifiex_adapter *adapter) | 1406 | static 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 | } |