xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/nxp/mlinux/moal_sdio.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /** @file moal_sdio.h
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * @brief This file contains definitions for SDIO interface.
4*4882a593Smuzhiyun  * driver.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Copyright 2008-2022 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 Change log:
25*4882a593Smuzhiyun ****************************************************/
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun #ifndef _MOAL_SDIO_H
28*4882a593Smuzhiyun #define _MOAL_SDIO_H
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun #include <linux/mmc/sdio.h>
31*4882a593Smuzhiyun #include <linux/mmc/sdio_ids.h>
32*4882a593Smuzhiyun #include <linux/mmc/sdio_func.h>
33*4882a593Smuzhiyun #include <linux/mmc/card.h>
34*4882a593Smuzhiyun #include <linux/mmc/host.h>
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun #include "moal_main.h"
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun #ifndef BLOCK_MODE
39*4882a593Smuzhiyun /** Block mode */
40*4882a593Smuzhiyun #define BLOCK_MODE 1
41*4882a593Smuzhiyun #endif
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun #ifndef BYTE_MODE
44*4882a593Smuzhiyun /** Byte Mode */
45*4882a593Smuzhiyun #define BYTE_MODE 0
46*4882a593Smuzhiyun #endif
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun #ifndef FIXED_ADDRESS
49*4882a593Smuzhiyun /** Fixed address mode */
50*4882a593Smuzhiyun #define FIXED_ADDRESS 0
51*4882a593Smuzhiyun #endif
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun #if defined(SD8977)
54*4882a593Smuzhiyun #define SD8977_V0 0x0
55*4882a593Smuzhiyun #define SD8977_V1 0x8
56*4882a593Smuzhiyun #define SD8977_V2 0x9
57*4882a593Smuzhiyun #define SD8977_V0_FW_NAME "nxp/sdsd8977_combo.bin"
58*4882a593Smuzhiyun #define SD8977_V1_FW_NAME "nxp/sdsd8977_combo_v1.bin"
59*4882a593Smuzhiyun #define SD8977_V2_FW_NAME "nxp/sdsd8977_combo_v2.bin"
60*4882a593Smuzhiyun #define SD8977_WLAN_V2_FW_NAME "nxp/sd8977_wlan_v2.bin"
61*4882a593Smuzhiyun #define SD8977_WLAN_V1_FW_NAME "nxp/sd8977_wlan_v1.bin"
62*4882a593Smuzhiyun #define SD8977_WLAN_V0_FW_NAME "nxp/sd8977_wlan.bin"
63*4882a593Smuzhiyun #endif /* SD8977_MULTI_FW */
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun #if defined(SD8887)
66*4882a593Smuzhiyun /** SD8887 chip revision ID */
67*4882a593Smuzhiyun #define SD8887_A0 0x0
68*4882a593Smuzhiyun #define SD8887_A2 0x2
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun #define SD8887_A0_FW_NAME "nxp/sd8887_uapsta.bin"
71*4882a593Smuzhiyun #define SD8887_A2_FW_NAME "nxp/sd8887_uapsta_a2.bin"
72*4882a593Smuzhiyun #define SD8887_WLAN_A2_FW_NAME "nxp/sd8887_wlan_a2.bin"
73*4882a593Smuzhiyun #define SD8887_WLAN_A0_FW_NAME "nxp/sd8887_wlan.bin"
74*4882a593Smuzhiyun #endif /* SD8887_MULTI_FW */
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun #ifdef SD8801
77*4882a593Smuzhiyun #define SD8801_DEFAULT_WLAN_FW_NAME "nxp/sd8801_uapsta.bin"
78*4882a593Smuzhiyun #endif /* SD8801 */
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun /** Default firmware name */
81*4882a593Smuzhiyun #ifdef SD8887
82*4882a593Smuzhiyun #define SD8887_DEFAULT_COMBO_FW_NAME "nxp/sd8887_uapsta_a2.bin"
83*4882a593Smuzhiyun #define SD8887_DEFAULT_WLAN_FW_NAME "nxp/sd8887_wlan_a2.bin"
84*4882a593Smuzhiyun #endif /* SD8887 */
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun #ifdef SD8977
87*4882a593Smuzhiyun #define SD8977_DEFAULT_COMBO_FW_NAME "nxp/sdsd8977_combo_v2.bin"
88*4882a593Smuzhiyun #define SD8977_DEFAULT_WLAN_FW_NAME "nxp/sd8977_wlan_v2.bin"
89*4882a593Smuzhiyun #endif /* SD8977 */
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun #ifdef SD8997
92*4882a593Smuzhiyun #define SD8997_DEFAULT_COMBO_FW_NAME "nxp/sdsd8997_combo_v4.bin"
93*4882a593Smuzhiyun #define SDUART8997_DEFAULT_COMBO_FW_NAME "nxp/sduart8997_combo_v4.bin"
94*4882a593Smuzhiyun #define SDSD8997_DEFAULT_COMBO_FW_NAME "nxp/sdsd8997_combo_v4.bin"
95*4882a593Smuzhiyun #define SD8997_DEFAULT_WLAN_FW_NAME "nxp/sd8997_wlan_v4.bin"
96*4882a593Smuzhiyun #endif /* SD8997 */
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun #ifdef SD8987
99*4882a593Smuzhiyun #define SD8987_DEFAULT_COMBO_FW_NAME "nxp/sdsd8987_combo.bin"
100*4882a593Smuzhiyun #define SDUART8987_DEFAULT_COMBO_FW_NAME "nxp/sduart8987_combo.bin"
101*4882a593Smuzhiyun #define SDSD8987_DEFAULT_COMBO_FW_NAME "nxp/sdsd8987_combo.bin"
102*4882a593Smuzhiyun #define SD8987_DEFAULT_WLAN_FW_NAME "nxp/sd8987_wlan.bin"
103*4882a593Smuzhiyun #endif /* SD8987 */
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun #ifdef SD8897
106*4882a593Smuzhiyun #define SD8897_DEFAULT_COMBO_FW_NAME "nxp/sdsd8897_uapsta.bin"
107*4882a593Smuzhiyun #define SD8897_DEFAULT_WLAN_FW_NAME "nxp/sd8897_wlan.bin"
108*4882a593Smuzhiyun #endif /* SD8897 */
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun #ifdef SD8978
111*4882a593Smuzhiyun #define SD8978_DEFAULT_COMBO_FW_NAME "nxp/sdsdiw416_combo.bin"
112*4882a593Smuzhiyun #define SDUART8978_DEFAULT_COMBO_FW_NAME "nxp/sduartiw416_combo.bin"
113*4882a593Smuzhiyun #define SDSD8978_DEFAULT_COMBO_FW_NAME "nxp/sdsdiw416_combo.bin"
114*4882a593Smuzhiyun #define SD8978_DEFAULT_WLAN_FW_NAME "nxp/sdiw416_wlan.bin"
115*4882a593Smuzhiyun #endif /* SD8978 */
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun #ifdef SD9098
118*4882a593Smuzhiyun #define SD9098_Z1Z2 0x00
119*4882a593Smuzhiyun #define SD9098_A0 0x01
120*4882a593Smuzhiyun #define SD9098_A1 0x02
121*4882a593Smuzhiyun #define SD9098_A2 0x03
122*4882a593Smuzhiyun #define SD9098_DEFAULT_COMBO_FW_NAME "nxp/sdsd9098_combo.bin"
123*4882a593Smuzhiyun #define SDUART9098_DEFAULT_COMBO_FW_NAME "nxp/sduart9098_combo.bin"
124*4882a593Smuzhiyun #define SDSD9098_DEFAULT_COMBO_FW_NAME "nxp/sdsd9098_combo.bin"
125*4882a593Smuzhiyun #define SD9098_DEFAULT_WLAN_FW_NAME "nxp/sd9098_wlan.bin"
126*4882a593Smuzhiyun #define SDUART9098_COMBO_V1_FW_NAME "nxp/sduart9098_combo_v1.bin"
127*4882a593Smuzhiyun #define SDSD9098_COMBO_V1_FW_NAME "nxp/sdsd9098_combo_v1.bin"
128*4882a593Smuzhiyun #define SD9098_WLAN_V1_FW_NAME "nxp/sd9098_wlan_v1.bin"
129*4882a593Smuzhiyun #endif /* SD9098 */
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun #ifdef SD9097
132*4882a593Smuzhiyun #define SD9097_B0 0x01
133*4882a593Smuzhiyun #define SD9097_B1 0x02
134*4882a593Smuzhiyun #define SD9097_DEFAULT_COMBO_FW_NAME "nxp/sdsdiw620_combo_v1.bin"
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun #define SD9097_DEFAULT_WLAN_FW_NAME "nxp/sdiw620_wlan_v1.bin"
137*4882a593Smuzhiyun #define SDUART9097_COMBO_V1_FW_NAME "nxp/sduartiw620_combo_v1.bin"
138*4882a593Smuzhiyun #define SDSD9097_COMBO_V1_FW_NAME "nxp/sdsdiw620_combo_v1.bin"
139*4882a593Smuzhiyun #define SD9097_WLAN_V1_FW_NAME "nxp/sdiw620_wlan_v1.bin"
140*4882a593Smuzhiyun #endif /* SD9097 */
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun #ifdef SDNW62X
143*4882a593Smuzhiyun #define SDNW62X_DEFAULT_COMBO_FW_NAME "nxp/sdsd_nw62x.bin"
144*4882a593Smuzhiyun #define SDUARTNW62X_COMBO_FW_NAME "nxp/sduart_nw62x.bin"
145*4882a593Smuzhiyun #define SDSDNW62X_COMBO_FW_NAME "sdsd_nw62x.bin"
146*4882a593Smuzhiyun #define SDNW62X_DEFAULT_WLAN_FW_NAME "nxp/sd_nw62x.bin"
147*4882a593Smuzhiyun #endif /* SDNW62X */
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun #ifdef SD9177
150*4882a593Smuzhiyun #define SD9177_A0 0x00
151*4882a593Smuzhiyun #define SD9177_A1 0x01
152*4882a593Smuzhiyun #define SD9177_DEFAULT_COMBO_FW_NAME "nxp/sdsd_nw61x.bin"
153*4882a593Smuzhiyun #define SD9177_DEFAULT_COMBO_V1_FW_NAME "nxp/sduart_nw61x_v1.bin"
154*4882a593Smuzhiyun #define SDUART9177_DEFAULT_COMBO_FW_NAME "nxp/sduart_nw61x.bin"
155*4882a593Smuzhiyun #define SDSD9177_DEFAULT_COMBO_FW_NAME "nxp/sdsd_nw61x.bin"
156*4882a593Smuzhiyun #define SD9177_DEFAULT_WLAN_FW_NAME "nxp/sd_w61x.bin"
157*4882a593Smuzhiyun #define SDUART9177_DEFAULT_COMBO_V1_FW_NAME "nxp/sduart_nw61x_v1.bin"
158*4882a593Smuzhiyun #define SDSD9177_DEFAULT_COMBO_V1_FW_NAME "nxp/sdsd_nw61x_v1.bin"
159*4882a593Smuzhiyun #define SD9177_DEFAULT_WLAN_V1_FW_NAME "nxp/sd_w61x_v1.bin"
160*4882a593Smuzhiyun #endif /* SD9177 */
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun /********************************************************
163*4882a593Smuzhiyun 		Global Functions
164*4882a593Smuzhiyun ********************************************************/
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun /** Register to bus driver function */
167*4882a593Smuzhiyun mlan_status woal_sdiommc_bus_register(void);
168*4882a593Smuzhiyun /** Unregister from bus driver function */
169*4882a593Smuzhiyun void woal_sdiommc_bus_unregister(void);
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun int woal_sdio_set_bus_clock(moal_handle *handle, t_u8 option);
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun #ifdef SDIO_SUSPEND_RESUME
174*4882a593Smuzhiyun #ifdef MMC_PM_FUNC_SUSPENDED
175*4882a593Smuzhiyun /** Notify SDIO bus driver that WLAN is suspended */
176*4882a593Smuzhiyun void woal_wlan_is_suspended(moal_handle *handle);
177*4882a593Smuzhiyun #endif
178*4882a593Smuzhiyun /** SDIO Suspend */
179*4882a593Smuzhiyun int woal_sdio_suspend(struct device *dev);
180*4882a593Smuzhiyun /** SDIO Resume */
181*4882a593Smuzhiyun int woal_sdio_resume(struct device *dev);
182*4882a593Smuzhiyun #endif /* SDIO_SUSPEND_RESUME */
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun #ifdef SDIO_MMC
185*4882a593Smuzhiyun /** Structure: SDIO MMC card */
186*4882a593Smuzhiyun struct sdio_mmc_card {
187*4882a593Smuzhiyun 	/** sdio_func structure pointer */
188*4882a593Smuzhiyun 	struct sdio_func *func;
189*4882a593Smuzhiyun 	/** moal_handle structure pointer */
190*4882a593Smuzhiyun 	moal_handle *handle;
191*4882a593Smuzhiyun 	/** saved host clock value */
192*4882a593Smuzhiyun 	unsigned int host_clock;
193*4882a593Smuzhiyun };
194*4882a593Smuzhiyun void woal_sdio_reset_hw(moal_handle *handle);
195*4882a593Smuzhiyun #endif /* SDIO_MMC */
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun /** cmd52 read write */
198*4882a593Smuzhiyun int woal_sdio_read_write_cmd52(moal_handle *handle, int func, int reg, int val);
199*4882a593Smuzhiyun #endif /* _MOAL_SDIO_H */
200