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