xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/nxp/mlinux/moal_pcie.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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