1*4882a593Smuzhiyun /** @file moal_pcie.h 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * @brief This file contains definitions for PCIE interface. 4*4882a593Smuzhiyun * driver. 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Copyright 2014-2021 NXP 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This software file (the File) is distributed by NXP 10*4882a593Smuzhiyun * under the terms of the GNU General Public License Version 2, June 1991 11*4882a593Smuzhiyun * (the License). You may use, redistribute and/or modify the File in 12*4882a593Smuzhiyun * accordance with the terms and conditions of the License, a copy of which 13*4882a593Smuzhiyun * is available by writing to the Free Software Foundation, Inc., 14*4882a593Smuzhiyun * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the 15*4882a593Smuzhiyun * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. 16*4882a593Smuzhiyun * 17*4882a593Smuzhiyun * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE 18*4882a593Smuzhiyun * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE 19*4882a593Smuzhiyun * ARE EXPRESSLY DISCLAIMED. The License provides additional details about 20*4882a593Smuzhiyun * this warranty disclaimer. 21*4882a593Smuzhiyun * 22*4882a593Smuzhiyun */ 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun /******************************************************** 25*4882a593Smuzhiyun Change log: 26*4882a593Smuzhiyun 02/01/2012: initial version 27*4882a593Smuzhiyun ********************************************************/ 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #ifndef _MOAL_PCIE_H_ 30*4882a593Smuzhiyun #define _MOAL_PCIE_H_ 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun #define PCIE_VENDOR_ID_MRVL (0x11ab) 33*4882a593Smuzhiyun #define PCIE_VENDOR_ID_V2_MRVL (0x1b4b) 34*4882a593Smuzhiyun #define PCIE_VENDOR_ID_NXP (0x1131) 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun #ifdef PCIE8997 37*4882a593Smuzhiyun /** PCIE device ID for 8997 card */ 38*4882a593Smuzhiyun #define PCIE_DEVICE_ID_88W8997P (0x2b42) 39*4882a593Smuzhiyun #endif 40*4882a593Smuzhiyun #ifdef PCIE8897 41*4882a593Smuzhiyun /** PCIE device ID for 8897 card */ 42*4882a593Smuzhiyun #define PCIE_DEVICE_ID_88W8897P (0x2b38) 43*4882a593Smuzhiyun #endif 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun #ifdef PCIE9097 46*4882a593Smuzhiyun /** PCIE device ID for 9097 card */ 47*4882a593Smuzhiyun #define PCIE_DEVICE_ID_88W9097 (0x2b56) 48*4882a593Smuzhiyun #endif 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun #ifdef PCIE9098 51*4882a593Smuzhiyun /** PCIE device ID for 9098 card FN0 */ 52*4882a593Smuzhiyun #define PCIE_DEVICE_ID_88W9098P_FN0 (0x2b43) 53*4882a593Smuzhiyun /** PCIE device ID for 9098 card FN1 */ 54*4882a593Smuzhiyun #define PCIE_DEVICE_ID_88W9098P_FN1 (0x2b44) 55*4882a593Smuzhiyun #endif 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun #ifdef PCIENW62X 58*4882a593Smuzhiyun /** PCIE device ID for NW62X card FN0 */ 59*4882a593Smuzhiyun #define PCIE_DEVICE_ID_88WNW62X (0x3000) 60*4882a593Smuzhiyun #endif 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun #include <linux/version.h> 63*4882a593Smuzhiyun #include <linux/pci.h> 64*4882a593Smuzhiyun #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 17, 0) 65*4882a593Smuzhiyun #include <linux/pcieport_if.h> 66*4882a593Smuzhiyun #endif 67*4882a593Smuzhiyun #include <linux/interrupt.h> 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun #include "moal_main.h" 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun /** Default firmware name */ 72*4882a593Smuzhiyun #ifdef PCIE8997 73*4882a593Smuzhiyun #define PCIE8997_DEFAULT_COMBO_FW_NAME "nxp/pcieusb8997_combo_v4.bin" 74*4882a593Smuzhiyun #define PCIEUART8997_DEFAULT_COMBO_FW_NAME "nxp/pcieuart8997_combo_v4.bin" 75*4882a593Smuzhiyun #define PCIEUSB8997_DEFAULT_COMBO_FW_NAME "nxp/pcieusb8997_combo_v4.bin" 76*4882a593Smuzhiyun #define PCIE8997_DEFAULT_WLAN_FW_NAME "nxp/pcie8997_wlan_v4.bin" 77*4882a593Smuzhiyun /** PCIE8997 chip revision ID */ 78*4882a593Smuzhiyun #define PCIE8997_A0 0x10 79*4882a593Smuzhiyun #define PCIE8997_A1 0x11 80*4882a593Smuzhiyun #endif /* PCIE8997 */ 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun #ifdef PCIE8897 83*4882a593Smuzhiyun #define PCIE8897_DEFAULT_COMBO_FW_NAME "nxp/pcie8897_uapsta.bin" 84*4882a593Smuzhiyun #define PCIE8897_DEFAULT_WLAN_FW_NAME "nxp/pcie8897_wlan.bin" 85*4882a593Smuzhiyun #endif /* PCIE8897*/ 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun #ifdef PCIE9098 88*4882a593Smuzhiyun #define PCIE9098_Z1Z2 0x00 89*4882a593Smuzhiyun #define PCIE9098_A0 0x01 90*4882a593Smuzhiyun #define PCIE9098_A1 0x02 91*4882a593Smuzhiyun #define PCIE9098_A2 0x03 92*4882a593Smuzhiyun #define PCIE9098_DEFAULT_COMBO_FW_NAME "nxp/pcieusb9098_combo.bin" 93*4882a593Smuzhiyun #define PCIEUART9098_DEFAULT_COMBO_FW_NAME "nxp/pcieuart9098_combo.bin" 94*4882a593Smuzhiyun #define PCIEUSB9098_DEFAULT_COMBO_FW_NAME "nxp/pcieusb9098_combo.bin" 95*4882a593Smuzhiyun #define PCIEPCIE9098_DEFAULT_COMBO_FW_NAME "nxp/pciepcie9098_combo.bin" 96*4882a593Smuzhiyun #define PCIEUART9098_COMBO_V1_FW_NAME "nxp/pcieuart9098_combo_v1.bin" 97*4882a593Smuzhiyun #define PCIEUSB9098_COMBO_V1_FW_NAME "nxp/pcieusb9098_combo_v1.bin" 98*4882a593Smuzhiyun #define PCIEPCIE9098_COMBO_V1_FW_NAME "nxp/pciepcie9098_combo_v1.bin" 99*4882a593Smuzhiyun #define PCIE9098_DEFAULT_WLAN_FW_NAME "nxp/pcie9098_wlan.bin" 100*4882a593Smuzhiyun #define PCIE9098_WLAN_V1_FW_NAME "nxp/pcie9098_wlan_v1.bin" 101*4882a593Smuzhiyun #endif /* PCIE9098 */ 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun #ifdef PCIE9097 104*4882a593Smuzhiyun #define PCIE9097_A0 0x00 105*4882a593Smuzhiyun #define PCIE9097_B0 0x01 106*4882a593Smuzhiyun #define PCIE9097_B1 0x02 107*4882a593Smuzhiyun #define PCIE9097_DEFAULT_COMBO_FW_NAME "nxp/pcieusbiw620_combo.bin" 108*4882a593Smuzhiyun #define PCIEUART9097_DEFAULT_COMBO_FW_NAME "nxp/pcieuartiw620_combo.bin" 109*4882a593Smuzhiyun #define PCIEUSB9097_DEFAULT_COMBO_FW_NAME "nxp/pcieusbiw620_combo.bin" 110*4882a593Smuzhiyun #define PCIEUART9097_COMBO_V1_FW_NAME "nxp/pcieuartiw620_combo_v1.bin" 111*4882a593Smuzhiyun #define PCIEUSB9097_COMBO_V1_FW_NAME "nxp/pcieusbiw620_combo_v1.bin" 112*4882a593Smuzhiyun #define PCIE9097_DEFAULT_WLAN_FW_NAME "nxp/pcieiw620_wlan.bin" 113*4882a593Smuzhiyun #define PCIE9097_WLAN_V1_FW_NAME "nxp/pcieiw620_wlan_v1.bin" 114*4882a593Smuzhiyun #endif /* PCIE9097 */ 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun #ifdef PCIENW62X 117*4882a593Smuzhiyun #define PCIENW62X_DEFAULT_COMBO_FW_NAME "nxp/pcieusbnw62x_combo.bin" 118*4882a593Smuzhiyun #define PCIEUARTNW62X_DEFAULT_COMBO_FW_NAME "nxp/pcieuartnw62x_combo.bin" 119*4882a593Smuzhiyun #define PCIEUSBNW62X_DEFAULT_COMBO_FW_NAME "nxp/pcieusbnw62x_combo.bin" 120*4882a593Smuzhiyun #define PCIENW62X_DEFAULT_WLAN_FW_NAME "nxp/pcienw62x_wlan.bin" 121*4882a593Smuzhiyun #endif /* PCIENW62X */ 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun #if defined(PCIE9098) || defined(PCIE9097) || defined(PCIENW62X) 124*4882a593Smuzhiyun #define PCIE_NUM_MSIX_VECTORS 32 125*4882a593Smuzhiyun #else 126*4882a593Smuzhiyun #define PCIE_NUM_MSIX_VECTORS 4 127*4882a593Smuzhiyun #endif 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun typedef struct _msix_context { 130*4882a593Smuzhiyun /** pci_dev structure pointer */ 131*4882a593Smuzhiyun struct pci_dev *dev; 132*4882a593Smuzhiyun /** message id related to msix vector */ 133*4882a593Smuzhiyun t_u16 msg_id; 134*4882a593Smuzhiyun } msix_context; 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun /** Structure: PCIE service card */ 137*4882a593Smuzhiyun typedef struct _pcie_service_card { 138*4882a593Smuzhiyun /** pci_dev structure pointer */ 139*4882a593Smuzhiyun struct pci_dev *dev; 140*4882a593Smuzhiyun /** moal_handle structure pointer */ 141*4882a593Smuzhiyun moal_handle *handle; 142*4882a593Smuzhiyun /** I/O memory regions pointer to the bus */ 143*4882a593Smuzhiyun void __iomem *pci_mmap; 144*4882a593Smuzhiyun /** I/O memory regions pointer to the bus */ 145*4882a593Smuzhiyun void __iomem *pci_mmap1; 146*4882a593Smuzhiyun #if defined(PCIE) 147*4882a593Smuzhiyun struct msix_entry msix_entries[PCIE_NUM_MSIX_VECTORS]; 148*4882a593Smuzhiyun msix_context msix_contexts[PCIE_NUM_MSIX_VECTORS]; 149*4882a593Smuzhiyun #endif 150*4882a593Smuzhiyun } pcie_service_card, *ppcie_service_card; 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun /** Register to bus driver function */ 153*4882a593Smuzhiyun mlan_status woal_pcie_bus_register(void); 154*4882a593Smuzhiyun /** Unregister from bus driver function */ 155*4882a593Smuzhiyun void woal_pcie_bus_unregister(void); 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun #endif /* _MOAL_PCIE_H_ */ 158