.. | .. |
---|
1 | 1 | /* |
---|
2 | | - * Marvell Wireless LAN device driver: PCIE specific handling |
---|
| 2 | + * NXP Wireless LAN device driver: PCIE specific handling |
---|
3 | 3 | * |
---|
4 | | - * Copyright (C) 2011-2014, Marvell International Ltd. |
---|
| 4 | + * Copyright 2011-2020 NXP |
---|
5 | 5 | * |
---|
6 | | - * This software file (the "File") is distributed by Marvell International |
---|
7 | | - * Ltd. under the terms of the GNU General Public License Version 2, June 1991 |
---|
| 6 | + * This software file (the "File") is distributed by NXP |
---|
| 7 | + * under the terms of the GNU General Public License Version 2, June 1991 |
---|
8 | 8 | * (the "License"). You may use, redistribute and/or modify this File in |
---|
9 | 9 | * accordance with the terms and conditions of the License, a copy of which |
---|
10 | 10 | * is available by writing to the Free Software Foundation, Inc., |
---|
.. | .. |
---|
17 | 17 | * this warranty disclaimer. |
---|
18 | 18 | */ |
---|
19 | 19 | |
---|
| 20 | +#include <linux/iopoll.h> |
---|
20 | 21 | #include <linux/firmware.h> |
---|
21 | 22 | |
---|
22 | 23 | #include "decl.h" |
---|
.. | .. |
---|
33 | 34 | |
---|
34 | 35 | static struct mwifiex_if_ops pcie_ops; |
---|
35 | 36 | |
---|
36 | | -static const struct of_device_id mwifiex_pcie_of_match_table[] = { |
---|
| 37 | +static const struct mwifiex_pcie_card_reg mwifiex_reg_8766 = { |
---|
| 38 | + .cmd_addr_lo = PCIE_SCRATCH_0_REG, |
---|
| 39 | + .cmd_addr_hi = PCIE_SCRATCH_1_REG, |
---|
| 40 | + .cmd_size = PCIE_SCRATCH_2_REG, |
---|
| 41 | + .fw_status = PCIE_SCRATCH_3_REG, |
---|
| 42 | + .cmdrsp_addr_lo = PCIE_SCRATCH_4_REG, |
---|
| 43 | + .cmdrsp_addr_hi = PCIE_SCRATCH_5_REG, |
---|
| 44 | + .tx_rdptr = PCIE_SCRATCH_6_REG, |
---|
| 45 | + .tx_wrptr = PCIE_SCRATCH_7_REG, |
---|
| 46 | + .rx_rdptr = PCIE_SCRATCH_8_REG, |
---|
| 47 | + .rx_wrptr = PCIE_SCRATCH_9_REG, |
---|
| 48 | + .evt_rdptr = PCIE_SCRATCH_10_REG, |
---|
| 49 | + .evt_wrptr = PCIE_SCRATCH_11_REG, |
---|
| 50 | + .drv_rdy = PCIE_SCRATCH_12_REG, |
---|
| 51 | + .tx_start_ptr = 0, |
---|
| 52 | + .tx_mask = MWIFIEX_TXBD_MASK, |
---|
| 53 | + .tx_wrap_mask = 0, |
---|
| 54 | + .rx_mask = MWIFIEX_RXBD_MASK, |
---|
| 55 | + .rx_wrap_mask = 0, |
---|
| 56 | + .tx_rollover_ind = MWIFIEX_BD_FLAG_ROLLOVER_IND, |
---|
| 57 | + .rx_rollover_ind = MWIFIEX_BD_FLAG_ROLLOVER_IND, |
---|
| 58 | + .evt_rollover_ind = MWIFIEX_BD_FLAG_ROLLOVER_IND, |
---|
| 59 | + .ring_flag_sop = 0, |
---|
| 60 | + .ring_flag_eop = 0, |
---|
| 61 | + .ring_flag_xs_sop = 0, |
---|
| 62 | + .ring_flag_xs_eop = 0, |
---|
| 63 | + .ring_tx_start_ptr = 0, |
---|
| 64 | + .pfu_enabled = 0, |
---|
| 65 | + .sleep_cookie = 1, |
---|
| 66 | + .msix_support = 0, |
---|
| 67 | +}; |
---|
| 68 | + |
---|
| 69 | +static const struct mwifiex_pcie_card_reg mwifiex_reg_8897 = { |
---|
| 70 | + .cmd_addr_lo = PCIE_SCRATCH_0_REG, |
---|
| 71 | + .cmd_addr_hi = PCIE_SCRATCH_1_REG, |
---|
| 72 | + .cmd_size = PCIE_SCRATCH_2_REG, |
---|
| 73 | + .fw_status = PCIE_SCRATCH_3_REG, |
---|
| 74 | + .cmdrsp_addr_lo = PCIE_SCRATCH_4_REG, |
---|
| 75 | + .cmdrsp_addr_hi = PCIE_SCRATCH_5_REG, |
---|
| 76 | + .tx_rdptr = PCIE_RD_DATA_PTR_Q0_Q1, |
---|
| 77 | + .tx_wrptr = PCIE_WR_DATA_PTR_Q0_Q1, |
---|
| 78 | + .rx_rdptr = PCIE_WR_DATA_PTR_Q0_Q1, |
---|
| 79 | + .rx_wrptr = PCIE_RD_DATA_PTR_Q0_Q1, |
---|
| 80 | + .evt_rdptr = PCIE_SCRATCH_10_REG, |
---|
| 81 | + .evt_wrptr = PCIE_SCRATCH_11_REG, |
---|
| 82 | + .drv_rdy = PCIE_SCRATCH_12_REG, |
---|
| 83 | + .tx_start_ptr = 16, |
---|
| 84 | + .tx_mask = 0x03FF0000, |
---|
| 85 | + .tx_wrap_mask = 0x07FF0000, |
---|
| 86 | + .rx_mask = 0x000003FF, |
---|
| 87 | + .rx_wrap_mask = 0x000007FF, |
---|
| 88 | + .tx_rollover_ind = MWIFIEX_BD_FLAG_TX_ROLLOVER_IND, |
---|
| 89 | + .rx_rollover_ind = MWIFIEX_BD_FLAG_RX_ROLLOVER_IND, |
---|
| 90 | + .evt_rollover_ind = MWIFIEX_BD_FLAG_EVT_ROLLOVER_IND, |
---|
| 91 | + .ring_flag_sop = MWIFIEX_BD_FLAG_SOP, |
---|
| 92 | + .ring_flag_eop = MWIFIEX_BD_FLAG_EOP, |
---|
| 93 | + .ring_flag_xs_sop = MWIFIEX_BD_FLAG_XS_SOP, |
---|
| 94 | + .ring_flag_xs_eop = MWIFIEX_BD_FLAG_XS_EOP, |
---|
| 95 | + .ring_tx_start_ptr = MWIFIEX_BD_FLAG_TX_START_PTR, |
---|
| 96 | + .pfu_enabled = 1, |
---|
| 97 | + .sleep_cookie = 0, |
---|
| 98 | + .fw_dump_ctrl = PCIE_SCRATCH_13_REG, |
---|
| 99 | + .fw_dump_start = PCIE_SCRATCH_14_REG, |
---|
| 100 | + .fw_dump_end = 0xcff, |
---|
| 101 | + .fw_dump_host_ready = 0xee, |
---|
| 102 | + .fw_dump_read_done = 0xfe, |
---|
| 103 | + .msix_support = 0, |
---|
| 104 | +}; |
---|
| 105 | + |
---|
| 106 | +static const struct mwifiex_pcie_card_reg mwifiex_reg_8997 = { |
---|
| 107 | + .cmd_addr_lo = PCIE_SCRATCH_0_REG, |
---|
| 108 | + .cmd_addr_hi = PCIE_SCRATCH_1_REG, |
---|
| 109 | + .cmd_size = PCIE_SCRATCH_2_REG, |
---|
| 110 | + .fw_status = PCIE_SCRATCH_3_REG, |
---|
| 111 | + .cmdrsp_addr_lo = PCIE_SCRATCH_4_REG, |
---|
| 112 | + .cmdrsp_addr_hi = PCIE_SCRATCH_5_REG, |
---|
| 113 | + .tx_rdptr = 0xC1A4, |
---|
| 114 | + .tx_wrptr = 0xC174, |
---|
| 115 | + .rx_rdptr = 0xC174, |
---|
| 116 | + .rx_wrptr = 0xC1A4, |
---|
| 117 | + .evt_rdptr = PCIE_SCRATCH_10_REG, |
---|
| 118 | + .evt_wrptr = PCIE_SCRATCH_11_REG, |
---|
| 119 | + .drv_rdy = PCIE_SCRATCH_12_REG, |
---|
| 120 | + .tx_start_ptr = 16, |
---|
| 121 | + .tx_mask = 0x0FFF0000, |
---|
| 122 | + .tx_wrap_mask = 0x1FFF0000, |
---|
| 123 | + .rx_mask = 0x00000FFF, |
---|
| 124 | + .rx_wrap_mask = 0x00001FFF, |
---|
| 125 | + .tx_rollover_ind = BIT(28), |
---|
| 126 | + .rx_rollover_ind = BIT(12), |
---|
| 127 | + .evt_rollover_ind = MWIFIEX_BD_FLAG_EVT_ROLLOVER_IND, |
---|
| 128 | + .ring_flag_sop = MWIFIEX_BD_FLAG_SOP, |
---|
| 129 | + .ring_flag_eop = MWIFIEX_BD_FLAG_EOP, |
---|
| 130 | + .ring_flag_xs_sop = MWIFIEX_BD_FLAG_XS_SOP, |
---|
| 131 | + .ring_flag_xs_eop = MWIFIEX_BD_FLAG_XS_EOP, |
---|
| 132 | + .ring_tx_start_ptr = MWIFIEX_BD_FLAG_TX_START_PTR, |
---|
| 133 | + .pfu_enabled = 1, |
---|
| 134 | + .sleep_cookie = 0, |
---|
| 135 | + .fw_dump_ctrl = PCIE_SCRATCH_13_REG, |
---|
| 136 | + .fw_dump_start = PCIE_SCRATCH_14_REG, |
---|
| 137 | + .fw_dump_end = 0xcff, |
---|
| 138 | + .fw_dump_host_ready = 0xcc, |
---|
| 139 | + .fw_dump_read_done = 0xdd, |
---|
| 140 | + .msix_support = 0, |
---|
| 141 | +}; |
---|
| 142 | + |
---|
| 143 | +static struct memory_type_mapping mem_type_mapping_tbl_w8897[] = { |
---|
| 144 | + {"ITCM", NULL, 0, 0xF0}, |
---|
| 145 | + {"DTCM", NULL, 0, 0xF1}, |
---|
| 146 | + {"SQRAM", NULL, 0, 0xF2}, |
---|
| 147 | + {"IRAM", NULL, 0, 0xF3}, |
---|
| 148 | + {"APU", NULL, 0, 0xF4}, |
---|
| 149 | + {"CIU", NULL, 0, 0xF5}, |
---|
| 150 | + {"ICU", NULL, 0, 0xF6}, |
---|
| 151 | + {"MAC", NULL, 0, 0xF7}, |
---|
| 152 | +}; |
---|
| 153 | + |
---|
| 154 | +static struct memory_type_mapping mem_type_mapping_tbl_w8997[] = { |
---|
| 155 | + {"DUMP", NULL, 0, 0xDD}, |
---|
| 156 | +}; |
---|
| 157 | + |
---|
| 158 | +static const struct mwifiex_pcie_device mwifiex_pcie8766 = { |
---|
| 159 | + .reg = &mwifiex_reg_8766, |
---|
| 160 | + .blksz_fw_dl = MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD, |
---|
| 161 | + .tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K, |
---|
| 162 | + .can_dump_fw = false, |
---|
| 163 | + .can_ext_scan = true, |
---|
| 164 | +}; |
---|
| 165 | + |
---|
| 166 | +static const struct mwifiex_pcie_device mwifiex_pcie8897 = { |
---|
| 167 | + .reg = &mwifiex_reg_8897, |
---|
| 168 | + .blksz_fw_dl = MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD, |
---|
| 169 | + .tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_4K, |
---|
| 170 | + .can_dump_fw = true, |
---|
| 171 | + .mem_type_mapping_tbl = mem_type_mapping_tbl_w8897, |
---|
| 172 | + .num_mem_types = ARRAY_SIZE(mem_type_mapping_tbl_w8897), |
---|
| 173 | + .can_ext_scan = true, |
---|
| 174 | +}; |
---|
| 175 | + |
---|
| 176 | +static const struct mwifiex_pcie_device mwifiex_pcie8997 = { |
---|
| 177 | + .reg = &mwifiex_reg_8997, |
---|
| 178 | + .blksz_fw_dl = MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD, |
---|
| 179 | + .tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_4K, |
---|
| 180 | + .can_dump_fw = true, |
---|
| 181 | + .mem_type_mapping_tbl = mem_type_mapping_tbl_w8997, |
---|
| 182 | + .num_mem_types = ARRAY_SIZE(mem_type_mapping_tbl_w8997), |
---|
| 183 | + .can_ext_scan = true, |
---|
| 184 | +}; |
---|
| 185 | + |
---|
| 186 | +static const struct of_device_id mwifiex_pcie_of_match_table[] __maybe_unused = { |
---|
37 | 187 | { .compatible = "pci11ab,2b42" }, |
---|
38 | 188 | { .compatible = "pci1b4b,2b42" }, |
---|
39 | 189 | { } |
---|
.. | .. |
---|
50 | 200 | } |
---|
51 | 201 | |
---|
52 | 202 | static void mwifiex_pcie_work(struct work_struct *work); |
---|
| 203 | +static int mwifiex_pcie_delete_rxbd_ring(struct mwifiex_adapter *adapter); |
---|
| 204 | +static int mwifiex_pcie_delete_evtbd_ring(struct mwifiex_adapter *adapter); |
---|
53 | 205 | |
---|
54 | 206 | static int |
---|
55 | 207 | mwifiex_map_pci_memory(struct mwifiex_adapter *adapter, struct sk_buff *skb, |
---|
.. | .. |
---|
58 | 210 | struct pcie_service_card *card = adapter->card; |
---|
59 | 211 | struct mwifiex_dma_mapping mapping; |
---|
60 | 212 | |
---|
61 | | - mapping.addr = pci_map_single(card->dev, skb->data, size, flags); |
---|
62 | | - if (pci_dma_mapping_error(card->dev, mapping.addr)) { |
---|
| 213 | + mapping.addr = dma_map_single(&card->dev->dev, skb->data, size, flags); |
---|
| 214 | + if (dma_mapping_error(&card->dev->dev, mapping.addr)) { |
---|
63 | 215 | mwifiex_dbg(adapter, ERROR, "failed to map pci memory!\n"); |
---|
64 | 216 | return -1; |
---|
65 | 217 | } |
---|
.. | .. |
---|
75 | 227 | struct mwifiex_dma_mapping mapping; |
---|
76 | 228 | |
---|
77 | 229 | mwifiex_get_mapping(skb, &mapping); |
---|
78 | | - pci_unmap_single(card->dev, mapping.addr, mapping.len, flags); |
---|
| 230 | + dma_unmap_single(&card->dev->dev, mapping.addr, mapping.len, flags); |
---|
79 | 231 | } |
---|
80 | 232 | |
---|
81 | 233 | /* |
---|
.. | .. |
---|
150 | 302 | static int mwifiex_pcie_suspend(struct device *dev) |
---|
151 | 303 | { |
---|
152 | 304 | struct mwifiex_adapter *adapter; |
---|
153 | | - struct pcie_service_card *card; |
---|
154 | | - struct pci_dev *pdev = to_pci_dev(dev); |
---|
| 305 | + struct pcie_service_card *card = dev_get_drvdata(dev); |
---|
155 | 306 | |
---|
156 | | - card = pci_get_drvdata(pdev); |
---|
157 | 307 | |
---|
158 | 308 | /* Might still be loading firmware */ |
---|
159 | 309 | wait_for_completion(&card->fw_done); |
---|
.. | .. |
---|
195 | 345 | static int mwifiex_pcie_resume(struct device *dev) |
---|
196 | 346 | { |
---|
197 | 347 | struct mwifiex_adapter *adapter; |
---|
198 | | - struct pcie_service_card *card; |
---|
199 | | - struct pci_dev *pdev = to_pci_dev(dev); |
---|
| 348 | + struct pcie_service_card *card = dev_get_drvdata(dev); |
---|
200 | 349 | |
---|
201 | | - card = pci_get_drvdata(pdev); |
---|
202 | 350 | |
---|
203 | 351 | if (!card->adapter) { |
---|
204 | 352 | dev_err(dev, "adapter structure is not valid\n"); |
---|
.. | .. |
---|
469 | 617 | struct sk_buff *cmdrsp = card->cmdrsp_buf; |
---|
470 | 618 | |
---|
471 | 619 | for (count = 0; count < max_delay_loop_cnt; count++) { |
---|
472 | | - pci_dma_sync_single_for_cpu(card->dev, |
---|
473 | | - MWIFIEX_SKB_DMA_ADDR(cmdrsp), |
---|
474 | | - sizeof(sleep_cookie), |
---|
475 | | - PCI_DMA_FROMDEVICE); |
---|
| 620 | + dma_sync_single_for_cpu(&card->dev->dev, |
---|
| 621 | + MWIFIEX_SKB_DMA_ADDR(cmdrsp), |
---|
| 622 | + sizeof(sleep_cookie), DMA_FROM_DEVICE); |
---|
476 | 623 | buffer = cmdrsp->data; |
---|
477 | 624 | sleep_cookie = get_unaligned_le32(buffer); |
---|
478 | 625 | |
---|
.. | .. |
---|
481 | 628 | "sleep cookie found at count %d\n", count); |
---|
482 | 629 | break; |
---|
483 | 630 | } |
---|
484 | | - pci_dma_sync_single_for_device(card->dev, |
---|
485 | | - MWIFIEX_SKB_DMA_ADDR(cmdrsp), |
---|
486 | | - sizeof(sleep_cookie), |
---|
487 | | - PCI_DMA_FROMDEVICE); |
---|
| 631 | + dma_sync_single_for_device(&card->dev->dev, |
---|
| 632 | + MWIFIEX_SKB_DMA_ADDR(cmdrsp), |
---|
| 633 | + sizeof(sleep_cookie), |
---|
| 634 | + DMA_FROM_DEVICE); |
---|
488 | 635 | usleep_range(20, 30); |
---|
489 | 636 | } |
---|
490 | 637 | |
---|
.. | .. |
---|
493 | 640 | "max count reached while accessing sleep cookie\n"); |
---|
494 | 641 | } |
---|
495 | 642 | |
---|
| 643 | +#define N_WAKEUP_TRIES_SHORT_INTERVAL 15 |
---|
| 644 | +#define N_WAKEUP_TRIES_LONG_INTERVAL 35 |
---|
| 645 | + |
---|
496 | 646 | /* This function wakes up the card by reading fw_status register. */ |
---|
497 | 647 | static int mwifiex_pm_wakeup_card(struct mwifiex_adapter *adapter) |
---|
498 | 648 | { |
---|
499 | 649 | struct pcie_service_card *card = adapter->card; |
---|
500 | 650 | const struct mwifiex_pcie_card_reg *reg = card->pcie.reg; |
---|
| 651 | + int retval; |
---|
501 | 652 | |
---|
502 | 653 | mwifiex_dbg(adapter, EVENT, |
---|
503 | 654 | "event: Wakeup device...\n"); |
---|
.. | .. |
---|
505 | 656 | if (reg->sleep_cookie) |
---|
506 | 657 | mwifiex_pcie_dev_wakeup_delay(adapter); |
---|
507 | 658 | |
---|
508 | | - /* Accessing fw_status register will wakeup device */ |
---|
509 | | - if (mwifiex_write_reg(adapter, reg->fw_status, FIRMWARE_READY_PCIE)) { |
---|
510 | | - mwifiex_dbg(adapter, ERROR, |
---|
511 | | - "Writing fw_status register failed\n"); |
---|
512 | | - return -1; |
---|
| 659 | + /* The 88W8897 PCIe+USB firmware (latest version 15.68.19.p21) sometimes |
---|
| 660 | + * appears to ignore or miss our wakeup request, so we continue trying |
---|
| 661 | + * until we receive an interrupt from the card. |
---|
| 662 | + */ |
---|
| 663 | + if (read_poll_timeout(mwifiex_write_reg, retval, |
---|
| 664 | + READ_ONCE(adapter->int_status) != 0, |
---|
| 665 | + 500, 500 * N_WAKEUP_TRIES_SHORT_INTERVAL, |
---|
| 666 | + false, |
---|
| 667 | + adapter, reg->fw_status, FIRMWARE_READY_PCIE)) { |
---|
| 668 | + if (read_poll_timeout(mwifiex_write_reg, retval, |
---|
| 669 | + READ_ONCE(adapter->int_status) != 0, |
---|
| 670 | + 10000, 10000 * N_WAKEUP_TRIES_LONG_INTERVAL, |
---|
| 671 | + false, |
---|
| 672 | + adapter, reg->fw_status, FIRMWARE_READY_PCIE)) { |
---|
| 673 | + mwifiex_dbg(adapter, ERROR, |
---|
| 674 | + "Firmware didn't wake up\n"); |
---|
| 675 | + return -EIO; |
---|
| 676 | + } |
---|
513 | 677 | } |
---|
514 | 678 | |
---|
515 | 679 | if (reg->sleep_cookie) { |
---|
.. | .. |
---|
632 | 796 | if (!skb) { |
---|
633 | 797 | mwifiex_dbg(adapter, ERROR, |
---|
634 | 798 | "Unable to allocate skb for RX ring.\n"); |
---|
635 | | - kfree(card->rxbd_ring_vbase); |
---|
636 | 799 | return -ENOMEM; |
---|
637 | 800 | } |
---|
638 | 801 | |
---|
639 | 802 | if (mwifiex_map_pci_memory(adapter, skb, |
---|
640 | 803 | MWIFIEX_RX_DATA_BUF_SIZE, |
---|
641 | | - PCI_DMA_FROMDEVICE)) |
---|
642 | | - return -1; |
---|
| 804 | + DMA_FROM_DEVICE)) { |
---|
| 805 | + kfree_skb(skb); |
---|
| 806 | + return -ENOMEM; |
---|
| 807 | + } |
---|
643 | 808 | |
---|
644 | 809 | buf_pa = MWIFIEX_SKB_DMA_ADDR(skb); |
---|
645 | 810 | |
---|
.. | .. |
---|
689 | 854 | if (!skb) { |
---|
690 | 855 | mwifiex_dbg(adapter, ERROR, |
---|
691 | 856 | "Unable to allocate skb for EVENT buf.\n"); |
---|
692 | | - kfree(card->evtbd_ring_vbase); |
---|
693 | 857 | return -ENOMEM; |
---|
694 | 858 | } |
---|
695 | 859 | skb_put(skb, MAX_EVENT_SIZE); |
---|
696 | 860 | |
---|
697 | 861 | if (mwifiex_map_pci_memory(adapter, skb, MAX_EVENT_SIZE, |
---|
698 | | - PCI_DMA_FROMDEVICE)) { |
---|
| 862 | + DMA_FROM_DEVICE)) { |
---|
699 | 863 | kfree_skb(skb); |
---|
700 | | - kfree(card->evtbd_ring_vbase); |
---|
701 | | - return -1; |
---|
| 864 | + return -ENOMEM; |
---|
702 | 865 | } |
---|
703 | 866 | |
---|
704 | 867 | buf_pa = MWIFIEX_SKB_DMA_ADDR(skb); |
---|
.. | .. |
---|
738 | 901 | if (card->tx_buf_list[i]) { |
---|
739 | 902 | skb = card->tx_buf_list[i]; |
---|
740 | 903 | mwifiex_unmap_pci_memory(adapter, skb, |
---|
741 | | - PCI_DMA_TODEVICE); |
---|
| 904 | + DMA_TO_DEVICE); |
---|
742 | 905 | dev_kfree_skb_any(skb); |
---|
743 | 906 | } |
---|
744 | 907 | memset(desc2, 0, sizeof(*desc2)); |
---|
.. | .. |
---|
747 | 910 | if (card->tx_buf_list[i]) { |
---|
748 | 911 | skb = card->tx_buf_list[i]; |
---|
749 | 912 | mwifiex_unmap_pci_memory(adapter, skb, |
---|
750 | | - PCI_DMA_TODEVICE); |
---|
| 913 | + DMA_TO_DEVICE); |
---|
751 | 914 | dev_kfree_skb_any(skb); |
---|
752 | 915 | } |
---|
753 | 916 | memset(desc, 0, sizeof(*desc)); |
---|
.. | .. |
---|
777 | 940 | if (card->rx_buf_list[i]) { |
---|
778 | 941 | skb = card->rx_buf_list[i]; |
---|
779 | 942 | mwifiex_unmap_pci_memory(adapter, skb, |
---|
780 | | - PCI_DMA_FROMDEVICE); |
---|
| 943 | + DMA_FROM_DEVICE); |
---|
781 | 944 | dev_kfree_skb_any(skb); |
---|
782 | 945 | } |
---|
783 | 946 | memset(desc2, 0, sizeof(*desc2)); |
---|
.. | .. |
---|
786 | 949 | if (card->rx_buf_list[i]) { |
---|
787 | 950 | skb = card->rx_buf_list[i]; |
---|
788 | 951 | mwifiex_unmap_pci_memory(adapter, skb, |
---|
789 | | - PCI_DMA_FROMDEVICE); |
---|
| 952 | + DMA_FROM_DEVICE); |
---|
790 | 953 | dev_kfree_skb_any(skb); |
---|
791 | 954 | } |
---|
792 | 955 | memset(desc, 0, sizeof(*desc)); |
---|
.. | .. |
---|
812 | 975 | if (card->evt_buf_list[i]) { |
---|
813 | 976 | skb = card->evt_buf_list[i]; |
---|
814 | 977 | mwifiex_unmap_pci_memory(adapter, skb, |
---|
815 | | - PCI_DMA_FROMDEVICE); |
---|
| 978 | + DMA_FROM_DEVICE); |
---|
816 | 979 | dev_kfree_skb_any(skb); |
---|
817 | 980 | } |
---|
818 | 981 | card->evt_buf_list[i] = NULL; |
---|
.. | .. |
---|
853 | 1016 | mwifiex_dbg(adapter, INFO, |
---|
854 | 1017 | "info: txbd_ring: Allocating %d bytes\n", |
---|
855 | 1018 | card->txbd_ring_size); |
---|
856 | | - card->txbd_ring_vbase = pci_alloc_consistent(card->dev, |
---|
857 | | - card->txbd_ring_size, |
---|
858 | | - &card->txbd_ring_pbase); |
---|
| 1019 | + card->txbd_ring_vbase = dma_alloc_coherent(&card->dev->dev, |
---|
| 1020 | + card->txbd_ring_size, |
---|
| 1021 | + &card->txbd_ring_pbase, |
---|
| 1022 | + GFP_KERNEL); |
---|
859 | 1023 | if (!card->txbd_ring_vbase) { |
---|
860 | 1024 | mwifiex_dbg(adapter, ERROR, |
---|
861 | | - "allocate consistent memory (%d bytes) failed!\n", |
---|
| 1025 | + "allocate coherent memory (%d bytes) failed!\n", |
---|
862 | 1026 | card->txbd_ring_size); |
---|
863 | 1027 | return -ENOMEM; |
---|
864 | 1028 | } |
---|
| 1029 | + |
---|
865 | 1030 | mwifiex_dbg(adapter, DATA, |
---|
866 | | - "info: txbd_ring - base: %p, pbase: %#x:%x, len: %x\n", |
---|
867 | | - card->txbd_ring_vbase, (unsigned int)card->txbd_ring_pbase, |
---|
| 1031 | + "info: txbd_ring - base: %p, pbase: %#x:%x, len: %#x\n", |
---|
| 1032 | + card->txbd_ring_vbase, (u32)card->txbd_ring_pbase, |
---|
868 | 1033 | (u32)((u64)card->txbd_ring_pbase >> 32), |
---|
869 | 1034 | card->txbd_ring_size); |
---|
870 | 1035 | |
---|
.. | .. |
---|
879 | 1044 | mwifiex_cleanup_txq_ring(adapter); |
---|
880 | 1045 | |
---|
881 | 1046 | if (card->txbd_ring_vbase) |
---|
882 | | - pci_free_consistent(card->dev, card->txbd_ring_size, |
---|
883 | | - card->txbd_ring_vbase, |
---|
884 | | - card->txbd_ring_pbase); |
---|
| 1047 | + dma_free_coherent(&card->dev->dev, card->txbd_ring_size, |
---|
| 1048 | + card->txbd_ring_vbase, |
---|
| 1049 | + card->txbd_ring_pbase); |
---|
885 | 1050 | card->txbd_ring_size = 0; |
---|
886 | 1051 | card->txbd_wrptr = 0; |
---|
887 | 1052 | card->txbd_rdptr = 0 | reg->tx_rollover_ind; |
---|
.. | .. |
---|
896 | 1061 | */ |
---|
897 | 1062 | static int mwifiex_pcie_create_rxbd_ring(struct mwifiex_adapter *adapter) |
---|
898 | 1063 | { |
---|
| 1064 | + int ret; |
---|
899 | 1065 | struct pcie_service_card *card = adapter->card; |
---|
900 | 1066 | const struct mwifiex_pcie_card_reg *reg = card->pcie.reg; |
---|
901 | 1067 | |
---|
.. | .. |
---|
917 | 1083 | mwifiex_dbg(adapter, INFO, |
---|
918 | 1084 | "info: rxbd_ring: Allocating %d bytes\n", |
---|
919 | 1085 | card->rxbd_ring_size); |
---|
920 | | - card->rxbd_ring_vbase = pci_alloc_consistent(card->dev, |
---|
921 | | - card->rxbd_ring_size, |
---|
922 | | - &card->rxbd_ring_pbase); |
---|
| 1086 | + card->rxbd_ring_vbase = dma_alloc_coherent(&card->dev->dev, |
---|
| 1087 | + card->rxbd_ring_size, |
---|
| 1088 | + &card->rxbd_ring_pbase, |
---|
| 1089 | + GFP_KERNEL); |
---|
923 | 1090 | if (!card->rxbd_ring_vbase) { |
---|
924 | 1091 | mwifiex_dbg(adapter, ERROR, |
---|
925 | | - "allocate consistent memory (%d bytes) failed!\n", |
---|
| 1092 | + "allocate coherent memory (%d bytes) failed!\n", |
---|
926 | 1093 | card->rxbd_ring_size); |
---|
927 | 1094 | return -ENOMEM; |
---|
928 | 1095 | } |
---|
.. | .. |
---|
933 | 1100 | (u32)((u64)card->rxbd_ring_pbase >> 32), |
---|
934 | 1101 | card->rxbd_ring_size); |
---|
935 | 1102 | |
---|
936 | | - return mwifiex_init_rxq_ring(adapter); |
---|
| 1103 | + ret = mwifiex_init_rxq_ring(adapter); |
---|
| 1104 | + if (ret) |
---|
| 1105 | + mwifiex_pcie_delete_rxbd_ring(adapter); |
---|
| 1106 | + return ret; |
---|
937 | 1107 | } |
---|
938 | 1108 | |
---|
939 | 1109 | /* |
---|
.. | .. |
---|
947 | 1117 | mwifiex_cleanup_rxq_ring(adapter); |
---|
948 | 1118 | |
---|
949 | 1119 | if (card->rxbd_ring_vbase) |
---|
950 | | - pci_free_consistent(card->dev, card->rxbd_ring_size, |
---|
951 | | - card->rxbd_ring_vbase, |
---|
952 | | - card->rxbd_ring_pbase); |
---|
| 1120 | + dma_free_coherent(&card->dev->dev, card->rxbd_ring_size, |
---|
| 1121 | + card->rxbd_ring_vbase, |
---|
| 1122 | + card->rxbd_ring_pbase); |
---|
953 | 1123 | card->rxbd_ring_size = 0; |
---|
954 | 1124 | card->rxbd_wrptr = 0; |
---|
955 | 1125 | card->rxbd_rdptr = 0 | reg->rx_rollover_ind; |
---|
.. | .. |
---|
964 | 1134 | */ |
---|
965 | 1135 | static int mwifiex_pcie_create_evtbd_ring(struct mwifiex_adapter *adapter) |
---|
966 | 1136 | { |
---|
| 1137 | + int ret; |
---|
967 | 1138 | struct pcie_service_card *card = adapter->card; |
---|
968 | 1139 | const struct mwifiex_pcie_card_reg *reg = card->pcie.reg; |
---|
969 | 1140 | |
---|
.. | .. |
---|
980 | 1151 | |
---|
981 | 1152 | mwifiex_dbg(adapter, INFO, |
---|
982 | 1153 | "info: evtbd_ring: Allocating %d bytes\n", |
---|
983 | | - card->evtbd_ring_size); |
---|
984 | | - card->evtbd_ring_vbase = pci_alloc_consistent(card->dev, |
---|
985 | | - card->evtbd_ring_size, |
---|
986 | | - &card->evtbd_ring_pbase); |
---|
| 1154 | + card->evtbd_ring_size); |
---|
| 1155 | + card->evtbd_ring_vbase = dma_alloc_coherent(&card->dev->dev, |
---|
| 1156 | + card->evtbd_ring_size, |
---|
| 1157 | + &card->evtbd_ring_pbase, |
---|
| 1158 | + GFP_KERNEL); |
---|
987 | 1159 | if (!card->evtbd_ring_vbase) { |
---|
988 | 1160 | mwifiex_dbg(adapter, ERROR, |
---|
989 | | - "allocate consistent memory (%d bytes) failed!\n", |
---|
| 1161 | + "allocate coherent memory (%d bytes) failed!\n", |
---|
990 | 1162 | card->evtbd_ring_size); |
---|
991 | 1163 | return -ENOMEM; |
---|
992 | 1164 | } |
---|
.. | .. |
---|
997 | 1169 | (u32)((u64)card->evtbd_ring_pbase >> 32), |
---|
998 | 1170 | card->evtbd_ring_size); |
---|
999 | 1171 | |
---|
1000 | | - return mwifiex_pcie_init_evt_ring(adapter); |
---|
| 1172 | + ret = mwifiex_pcie_init_evt_ring(adapter); |
---|
| 1173 | + if (ret) |
---|
| 1174 | + mwifiex_pcie_delete_evtbd_ring(adapter); |
---|
| 1175 | + return ret; |
---|
1001 | 1176 | } |
---|
1002 | 1177 | |
---|
1003 | 1178 | /* |
---|
.. | .. |
---|
1011 | 1186 | mwifiex_cleanup_evt_ring(adapter); |
---|
1012 | 1187 | |
---|
1013 | 1188 | if (card->evtbd_ring_vbase) |
---|
1014 | | - pci_free_consistent(card->dev, card->evtbd_ring_size, |
---|
1015 | | - card->evtbd_ring_vbase, |
---|
1016 | | - card->evtbd_ring_pbase); |
---|
| 1189 | + dma_free_coherent(&card->dev->dev, card->evtbd_ring_size, |
---|
| 1190 | + card->evtbd_ring_vbase, |
---|
| 1191 | + card->evtbd_ring_pbase); |
---|
1017 | 1192 | card->evtbd_wrptr = 0; |
---|
1018 | 1193 | card->evtbd_rdptr = 0 | reg->evt_rollover_ind; |
---|
1019 | 1194 | card->evtbd_ring_size = 0; |
---|
.. | .. |
---|
1040 | 1215 | } |
---|
1041 | 1216 | skb_put(skb, MWIFIEX_UPLD_SIZE); |
---|
1042 | 1217 | if (mwifiex_map_pci_memory(adapter, skb, MWIFIEX_UPLD_SIZE, |
---|
1043 | | - PCI_DMA_FROMDEVICE)) { |
---|
| 1218 | + DMA_FROM_DEVICE)) { |
---|
1044 | 1219 | kfree_skb(skb); |
---|
1045 | 1220 | return -1; |
---|
1046 | 1221 | } |
---|
.. | .. |
---|
1064 | 1239 | |
---|
1065 | 1240 | if (card && card->cmdrsp_buf) { |
---|
1066 | 1241 | mwifiex_unmap_pci_memory(adapter, card->cmdrsp_buf, |
---|
1067 | | - PCI_DMA_FROMDEVICE); |
---|
| 1242 | + DMA_FROM_DEVICE); |
---|
1068 | 1243 | dev_kfree_skb_any(card->cmdrsp_buf); |
---|
1069 | 1244 | card->cmdrsp_buf = NULL; |
---|
1070 | 1245 | } |
---|
1071 | 1246 | |
---|
1072 | 1247 | if (card && card->cmd_buf) { |
---|
1073 | 1248 | mwifiex_unmap_pci_memory(adapter, card->cmd_buf, |
---|
1074 | | - PCI_DMA_TODEVICE); |
---|
| 1249 | + DMA_TO_DEVICE); |
---|
1075 | 1250 | dev_kfree_skb_any(card->cmd_buf); |
---|
1076 | 1251 | card->cmd_buf = NULL; |
---|
1077 | 1252 | } |
---|
.. | .. |
---|
1086 | 1261 | struct pcie_service_card *card = adapter->card; |
---|
1087 | 1262 | u32 *cookie; |
---|
1088 | 1263 | |
---|
1089 | | - card->sleep_cookie_vbase = pci_alloc_consistent(card->dev, sizeof(u32), |
---|
1090 | | - &card->sleep_cookie_pbase); |
---|
| 1264 | + card->sleep_cookie_vbase = dma_alloc_coherent(&card->dev->dev, |
---|
| 1265 | + sizeof(u32), |
---|
| 1266 | + &card->sleep_cookie_pbase, |
---|
| 1267 | + GFP_KERNEL); |
---|
1091 | 1268 | if (!card->sleep_cookie_vbase) { |
---|
1092 | 1269 | mwifiex_dbg(adapter, ERROR, |
---|
1093 | | - "pci_alloc_consistent failed!\n"); |
---|
| 1270 | + "dma_alloc_coherent failed!\n"); |
---|
1094 | 1271 | return -ENOMEM; |
---|
1095 | 1272 | } |
---|
1096 | 1273 | cookie = (u32 *)card->sleep_cookie_vbase; |
---|
.. | .. |
---|
1115 | 1292 | card = adapter->card; |
---|
1116 | 1293 | |
---|
1117 | 1294 | if (card && card->sleep_cookie_vbase) { |
---|
1118 | | - pci_free_consistent(card->dev, sizeof(u32), |
---|
1119 | | - card->sleep_cookie_vbase, |
---|
1120 | | - card->sleep_cookie_pbase); |
---|
| 1295 | + dma_free_coherent(&card->dev->dev, sizeof(u32), |
---|
| 1296 | + card->sleep_cookie_vbase, |
---|
| 1297 | + card->sleep_cookie_pbase); |
---|
1121 | 1298 | card->sleep_cookie_vbase = NULL; |
---|
1122 | 1299 | } |
---|
1123 | 1300 | |
---|
.. | .. |
---|
1189 | 1366 | "SEND COMP: Detach skb %p at txbd_rdidx=%d\n", |
---|
1190 | 1367 | skb, wrdoneidx); |
---|
1191 | 1368 | mwifiex_unmap_pci_memory(adapter, skb, |
---|
1192 | | - PCI_DMA_TODEVICE); |
---|
| 1369 | + DMA_TO_DEVICE); |
---|
1193 | 1370 | |
---|
1194 | 1371 | unmap_count++; |
---|
1195 | 1372 | |
---|
.. | .. |
---|
1282 | 1459 | put_unaligned_le16(MWIFIEX_TYPE_DATA, payload + 2); |
---|
1283 | 1460 | |
---|
1284 | 1461 | if (mwifiex_map_pci_memory(adapter, skb, skb->len, |
---|
1285 | | - PCI_DMA_TODEVICE)) |
---|
| 1462 | + DMA_TO_DEVICE)) |
---|
1286 | 1463 | return -1; |
---|
1287 | 1464 | |
---|
1288 | 1465 | wrindx = (card->txbd_wrptr & reg->tx_mask) >> reg->tx_start_ptr; |
---|
.. | .. |
---|
1372 | 1549 | |
---|
1373 | 1550 | return -EINPROGRESS; |
---|
1374 | 1551 | done_unmap: |
---|
1375 | | - mwifiex_unmap_pci_memory(adapter, skb, PCI_DMA_TODEVICE); |
---|
| 1552 | + mwifiex_unmap_pci_memory(adapter, skb, DMA_TO_DEVICE); |
---|
1376 | 1553 | card->tx_buf_list[wrindx] = NULL; |
---|
1377 | 1554 | atomic_dec(&adapter->tx_hw_pending); |
---|
1378 | 1555 | if (reg->pfu_enabled) |
---|
.. | .. |
---|
1426 | 1603 | if (!skb_data) |
---|
1427 | 1604 | return -ENOMEM; |
---|
1428 | 1605 | |
---|
1429 | | - mwifiex_unmap_pci_memory(adapter, skb_data, PCI_DMA_FROMDEVICE); |
---|
| 1606 | + mwifiex_unmap_pci_memory(adapter, skb_data, DMA_FROM_DEVICE); |
---|
1430 | 1607 | card->rx_buf_list[rd_index] = NULL; |
---|
1431 | 1608 | |
---|
1432 | 1609 | /* Get data length from interface header - |
---|
.. | .. |
---|
1464 | 1641 | |
---|
1465 | 1642 | if (mwifiex_map_pci_memory(adapter, skb_tmp, |
---|
1466 | 1643 | MWIFIEX_RX_DATA_BUF_SIZE, |
---|
1467 | | - PCI_DMA_FROMDEVICE)) |
---|
| 1644 | + DMA_FROM_DEVICE)) |
---|
1468 | 1645 | return -1; |
---|
1469 | 1646 | |
---|
1470 | 1647 | buf_pa = MWIFIEX_SKB_DMA_ADDR(skb_tmp); |
---|
.. | .. |
---|
1541 | 1718 | return -1; |
---|
1542 | 1719 | } |
---|
1543 | 1720 | |
---|
1544 | | - if (mwifiex_map_pci_memory(adapter, skb, skb->len, PCI_DMA_TODEVICE)) |
---|
| 1721 | + if (mwifiex_map_pci_memory(adapter, skb, skb->len, DMA_TO_DEVICE)) |
---|
1545 | 1722 | return -1; |
---|
1546 | 1723 | |
---|
1547 | 1724 | buf_pa = MWIFIEX_SKB_DMA_ADDR(skb); |
---|
.. | .. |
---|
1553 | 1730 | mwifiex_dbg(adapter, ERROR, |
---|
1554 | 1731 | "%s: failed to write download command to boot code.\n", |
---|
1555 | 1732 | __func__); |
---|
1556 | | - mwifiex_unmap_pci_memory(adapter, skb, PCI_DMA_TODEVICE); |
---|
| 1733 | + mwifiex_unmap_pci_memory(adapter, skb, DMA_TO_DEVICE); |
---|
1557 | 1734 | return -1; |
---|
1558 | 1735 | } |
---|
1559 | 1736 | |
---|
.. | .. |
---|
1565 | 1742 | mwifiex_dbg(adapter, ERROR, |
---|
1566 | 1743 | "%s: failed to write download command to boot code.\n", |
---|
1567 | 1744 | __func__); |
---|
1568 | | - mwifiex_unmap_pci_memory(adapter, skb, PCI_DMA_TODEVICE); |
---|
| 1745 | + mwifiex_unmap_pci_memory(adapter, skb, DMA_TO_DEVICE); |
---|
1569 | 1746 | return -1; |
---|
1570 | 1747 | } |
---|
1571 | 1748 | |
---|
.. | .. |
---|
1574 | 1751 | mwifiex_dbg(adapter, ERROR, |
---|
1575 | 1752 | "%s: failed to write command len to cmd_size scratch reg\n", |
---|
1576 | 1753 | __func__); |
---|
1577 | | - mwifiex_unmap_pci_memory(adapter, skb, PCI_DMA_TODEVICE); |
---|
| 1754 | + mwifiex_unmap_pci_memory(adapter, skb, DMA_TO_DEVICE); |
---|
1578 | 1755 | return -1; |
---|
1579 | 1756 | } |
---|
1580 | 1757 | |
---|
.. | .. |
---|
1583 | 1760 | CPU_INTR_DOOR_BELL)) { |
---|
1584 | 1761 | mwifiex_dbg(adapter, ERROR, |
---|
1585 | 1762 | "%s: failed to assert door-bell intr\n", __func__); |
---|
1586 | | - mwifiex_unmap_pci_memory(adapter, skb, PCI_DMA_TODEVICE); |
---|
| 1763 | + mwifiex_unmap_pci_memory(adapter, skb, DMA_TO_DEVICE); |
---|
1587 | 1764 | return -1; |
---|
1588 | 1765 | } |
---|
1589 | 1766 | |
---|
.. | .. |
---|
1642 | 1819 | put_unaligned_le16((u16)skb->len, &payload[0]); |
---|
1643 | 1820 | put_unaligned_le16(MWIFIEX_TYPE_CMD, &payload[2]); |
---|
1644 | 1821 | |
---|
1645 | | - if (mwifiex_map_pci_memory(adapter, skb, skb->len, PCI_DMA_TODEVICE)) |
---|
| 1822 | + if (mwifiex_map_pci_memory(adapter, skb, skb->len, DMA_TO_DEVICE)) |
---|
1646 | 1823 | return -1; |
---|
1647 | 1824 | |
---|
1648 | 1825 | card->cmd_buf = skb; |
---|
.. | .. |
---|
1742 | 1919 | "info: Rx CMD Response\n"); |
---|
1743 | 1920 | |
---|
1744 | 1921 | if (adapter->curr_cmd) |
---|
1745 | | - mwifiex_unmap_pci_memory(adapter, skb, PCI_DMA_FROMDEVICE); |
---|
| 1922 | + mwifiex_unmap_pci_memory(adapter, skb, DMA_FROM_DEVICE); |
---|
1746 | 1923 | else |
---|
1747 | | - pci_dma_sync_single_for_cpu(card->dev, |
---|
1748 | | - MWIFIEX_SKB_DMA_ADDR(skb), |
---|
1749 | | - MWIFIEX_UPLD_SIZE, |
---|
1750 | | - PCI_DMA_FROMDEVICE); |
---|
| 1924 | + dma_sync_single_for_cpu(&card->dev->dev, |
---|
| 1925 | + MWIFIEX_SKB_DMA_ADDR(skb), |
---|
| 1926 | + MWIFIEX_UPLD_SIZE, DMA_FROM_DEVICE); |
---|
1751 | 1927 | |
---|
1752 | 1928 | /* Unmap the command as a response has been received. */ |
---|
1753 | 1929 | if (card->cmd_buf) { |
---|
1754 | 1930 | mwifiex_unmap_pci_memory(adapter, card->cmd_buf, |
---|
1755 | | - PCI_DMA_TODEVICE); |
---|
| 1931 | + DMA_TO_DEVICE); |
---|
1756 | 1932 | dev_kfree_skb_any(card->cmd_buf); |
---|
1757 | 1933 | card->cmd_buf = NULL; |
---|
1758 | 1934 | } |
---|
.. | .. |
---|
1763 | 1939 | |
---|
1764 | 1940 | if (!adapter->curr_cmd) { |
---|
1765 | 1941 | if (adapter->ps_state == PS_STATE_SLEEP_CFM) { |
---|
1766 | | - pci_dma_sync_single_for_device(card->dev, |
---|
1767 | | - MWIFIEX_SKB_DMA_ADDR(skb), |
---|
1768 | | - MWIFIEX_SLEEP_COOKIE_SIZE, |
---|
1769 | | - PCI_DMA_FROMDEVICE); |
---|
| 1942 | + dma_sync_single_for_device(&card->dev->dev, |
---|
| 1943 | + MWIFIEX_SKB_DMA_ADDR(skb), |
---|
| 1944 | + MWIFIEX_SLEEP_COOKIE_SIZE, |
---|
| 1945 | + DMA_FROM_DEVICE); |
---|
1770 | 1946 | if (mwifiex_write_reg(adapter, |
---|
1771 | 1947 | PCIE_CPU_INT_EVENT, |
---|
1772 | 1948 | CPU_INTR_SLEEP_CFM_DONE)) { |
---|
.. | .. |
---|
1777 | 1953 | mwifiex_delay_for_sleep_cookie(adapter, |
---|
1778 | 1954 | MWIFIEX_MAX_DELAY_COUNT); |
---|
1779 | 1955 | mwifiex_unmap_pci_memory(adapter, skb, |
---|
1780 | | - PCI_DMA_FROMDEVICE); |
---|
| 1956 | + DMA_FROM_DEVICE); |
---|
1781 | 1957 | skb_pull(skb, adapter->intf_hdr_len); |
---|
1782 | 1958 | while (reg->sleep_cookie && (count++ < 10) && |
---|
1783 | 1959 | mwifiex_pcie_ok_to_access_hw(adapter)) |
---|
.. | .. |
---|
1793 | 1969 | min_t(u32, MWIFIEX_SIZE_OF_CMD_BUFFER, skb->len)); |
---|
1794 | 1970 | skb_push(skb, adapter->intf_hdr_len); |
---|
1795 | 1971 | if (mwifiex_map_pci_memory(adapter, skb, MWIFIEX_UPLD_SIZE, |
---|
1796 | | - PCI_DMA_FROMDEVICE)) |
---|
| 1972 | + DMA_FROM_DEVICE)) |
---|
1797 | 1973 | return -1; |
---|
1798 | 1974 | } else if (mwifiex_pcie_ok_to_access_hw(adapter)) { |
---|
1799 | 1975 | skb_pull(skb, adapter->intf_hdr_len); |
---|
.. | .. |
---|
1835 | 2011 | card->cmdrsp_buf = skb; |
---|
1836 | 2012 | skb_push(card->cmdrsp_buf, adapter->intf_hdr_len); |
---|
1837 | 2013 | if (mwifiex_map_pci_memory(adapter, skb, MWIFIEX_UPLD_SIZE, |
---|
1838 | | - PCI_DMA_FROMDEVICE)) |
---|
| 2014 | + DMA_FROM_DEVICE)) |
---|
1839 | 2015 | return -1; |
---|
1840 | 2016 | } |
---|
1841 | 2017 | |
---|
.. | .. |
---|
1890 | 2066 | mwifiex_dbg(adapter, INFO, |
---|
1891 | 2067 | "info: Read Index: %d\n", rdptr); |
---|
1892 | 2068 | skb_cmd = card->evt_buf_list[rdptr]; |
---|
1893 | | - mwifiex_unmap_pci_memory(adapter, skb_cmd, PCI_DMA_FROMDEVICE); |
---|
| 2069 | + mwifiex_unmap_pci_memory(adapter, skb_cmd, DMA_FROM_DEVICE); |
---|
1894 | 2070 | |
---|
1895 | 2071 | /* Take the pointer and set it to event pointer in adapter |
---|
1896 | 2072 | and will return back after event handling callback */ |
---|
.. | .. |
---|
1970 | 2146 | skb_put(skb, MAX_EVENT_SIZE - skb->len); |
---|
1971 | 2147 | if (mwifiex_map_pci_memory(adapter, skb, |
---|
1972 | 2148 | MAX_EVENT_SIZE, |
---|
1973 | | - PCI_DMA_FROMDEVICE)) |
---|
| 2149 | + DMA_FROM_DEVICE)) |
---|
1974 | 2150 | return -1; |
---|
1975 | 2151 | card->evt_buf_list[rdptr] = skb; |
---|
1976 | 2152 | desc = card->evtbd_ring[rdptr]; |
---|
.. | .. |
---|
2252 | 2428 | "interrupt status during fw dnld.\n", |
---|
2253 | 2429 | __func__); |
---|
2254 | 2430 | mwifiex_unmap_pci_memory(adapter, skb, |
---|
2255 | | - PCI_DMA_TODEVICE); |
---|
| 2431 | + DMA_TO_DEVICE); |
---|
2256 | 2432 | ret = -1; |
---|
2257 | 2433 | goto done; |
---|
2258 | 2434 | } |
---|
.. | .. |
---|
2264 | 2440 | mwifiex_dbg(adapter, ERROR, "%s: Card failed to ACK download\n", |
---|
2265 | 2441 | __func__); |
---|
2266 | 2442 | mwifiex_unmap_pci_memory(adapter, skb, |
---|
2267 | | - PCI_DMA_TODEVICE); |
---|
| 2443 | + DMA_TO_DEVICE); |
---|
2268 | 2444 | ret = -1; |
---|
2269 | 2445 | goto done; |
---|
2270 | 2446 | } |
---|
2271 | 2447 | |
---|
2272 | | - mwifiex_unmap_pci_memory(adapter, skb, PCI_DMA_TODEVICE); |
---|
| 2448 | + mwifiex_unmap_pci_memory(adapter, skb, DMA_TO_DEVICE); |
---|
2273 | 2449 | |
---|
2274 | 2450 | offset += txlen; |
---|
2275 | 2451 | } while (true); |
---|
.. | .. |
---|
2939 | 3115 | |
---|
2940 | 3116 | pci_set_master(pdev); |
---|
2941 | 3117 | |
---|
2942 | | - pr_notice("try set_consistent_dma_mask(32)\n"); |
---|
2943 | | - ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); |
---|
| 3118 | + ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); |
---|
2944 | 3119 | if (ret) { |
---|
2945 | | - pr_err("set_dma_mask(32) failed\n"); |
---|
2946 | | - goto err_set_dma_mask; |
---|
2947 | | - } |
---|
2948 | | - |
---|
2949 | | - ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)); |
---|
2950 | | - if (ret) { |
---|
2951 | | - pr_err("set_consistent_dma_mask(64) failed\n"); |
---|
| 3120 | + pr_err("dma_set_mask(32) failed: %d\n", ret); |
---|
2952 | 3121 | goto err_set_dma_mask; |
---|
2953 | 3122 | } |
---|
2954 | 3123 | |
---|
.. | .. |
---|
2975 | 3144 | goto err_iomap2; |
---|
2976 | 3145 | } |
---|
2977 | 3146 | |
---|
2978 | | - pr_notice("PCI memory map Virt0: %p PCI memory map Virt2: %p\n", |
---|
| 3147 | + pr_notice("PCI memory map Virt0: %pK PCI memory map Virt2: %pK\n", |
---|
2979 | 3148 | card->pci_mmap, card->pci_mmap1); |
---|
2980 | 3149 | |
---|
2981 | 3150 | ret = mwifiex_pcie_alloc_buffers(adapter); |
---|
2982 | 3151 | if (ret) |
---|
2983 | 3152 | goto err_alloc_buffers; |
---|
2984 | 3153 | |
---|
| 3154 | + if (pdev->device == PCIE_DEVICE_ID_MARVELL_88W8897) |
---|
| 3155 | + adapter->ignore_btcoex_events = true; |
---|
| 3156 | + |
---|
2985 | 3157 | return 0; |
---|
2986 | 3158 | |
---|
2987 | 3159 | err_alloc_buffers: |
---|