yu.dong | c33b307 | 2024-08-21 23:14:49 -0700 | [diff] [blame^] | 1 | /***************************************************************************** |
| 2 | * Copyright Statement: |
| 3 | * -------------------- |
| 4 | * This software is protected by Copyright and the information contained |
| 5 | * herein is confidential. The software may not be copied and the information |
| 6 | * contained herein may not be used or disclosed except with the written |
| 7 | * permission of MediaTek Inc. (C) 2001 |
| 8 | * |
| 9 | *****************************************************************************/ |
| 10 | |
| 11 | /***************************************************************************** |
| 12 | * |
| 13 | * Filename: |
| 14 | * --------- |
| 15 | * sdio_sw.h |
| 16 | * |
| 17 | * Project: |
| 18 | * -------- |
| 19 | * Maui_Software |
| 20 | * |
| 21 | * Description: |
| 22 | * ------------ |
| 23 | * Header file of SDIO driver |
| 24 | * |
| 25 | * Author: |
| 26 | * ------- |
| 27 | * ------- |
| 28 | * |
| 29 | *============================================================================ |
| 30 | * HISTORY |
| 31 | * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!! |
| 32 | *------------------------------------------------------------------------------ |
| 33 | |
| 34 | *------------------------------------------------------------------------------ |
| 35 | * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!! |
| 36 | *============================================================================ |
| 37 | ****************************************************************************/ |
| 38 | #ifndef SDIO_SW_H |
| 39 | #define SDIO_SW_H |
| 40 | |
| 41 | /*SW*/ |
| 42 | |
| 43 | #define SDIO_CCCR_VERISON_MASK 0xf |
| 44 | #define SDIO_SD_VERISON_MASK 0xf |
| 45 | #define SDIO_VERISON_MASK 0xf0 |
| 46 | #define SDIO_VERISON_SHIFT 4 |
| 47 | |
| 48 | /*CIS tuple code*/ |
| 49 | #define CISTPL_NULL 0x0 |
| 50 | #define CISTPL_CHECKSUM 0x10 |
| 51 | #define CISTPL_VERS_1 0x15 |
| 52 | #define CISTPL_ALTSTR 0x16 |
| 53 | #define CISTPL_MANFID 0x20 |
| 54 | #define CISTPL_FUNCID 0x21 |
| 55 | #define CISTPL_FUNCE 0x22 |
| 56 | #define CISTPL_SDIO_STD 0x91 |
| 57 | #define CISTPL_SDIO_EXT 0x92 |
| 58 | #define CISTPL_END 0xff |
| 59 | |
| 60 | /*Function definition*/ |
| 61 | #define SDIO_CCCR_SIZE 32 |
| 62 | #define SDIO_FBR_SIZE 256 |
| 63 | #define SDIO_TUPLE_SIZE 256 |
| 64 | |
| 65 | typedef enum{ |
| 66 | SDIO_FUCN_0=0, |
| 67 | SDIO_FUCN_1, |
| 68 | SDIO_MAX_FUCN_ID, |
| 69 | SDIO_FUCN_MEM=0x1000 |
| 70 | }SDIO_function_id_enum; |
| 71 | typedef enum{ |
| 72 | SDIO_BS_FREE=0, |
| 73 | SDIO_BS_BUS |
| 74 | }SDIO_bus_status_enum; |
| 75 | typedef enum{ |
| 76 | SDIO_INTERFACE_NULL=0, |
| 77 | SDIO_INTERFACE_UART, |
| 78 | SDIO_INTERFACE_A_BT, |
| 79 | SDIO_INTERFACE_B_BT, |
| 80 | SDIO_INTERFACE_GPS, |
| 81 | SDIO_INTERFACE_CAMERA, |
| 82 | SDIO_INTERFACE_PHS, |
| 83 | SDIO_INTERFACE_WLAN |
| 84 | }SDIO_interface_code_enum; |
| 85 | |
| 86 | typedef enum{ |
| 87 | SDIO_FIX, //multi byte r/w at fixed address |
| 88 | SDIO_INC //multi byte r/w at incrementing address |
| 89 | }cmd53_op_enum; |
| 90 | typedef enum{ |
| 91 | SDIO_READ, |
| 92 | SDIO_WRITE |
| 93 | }rw_dir_enum; |
| 94 | typedef enum{ |
| 95 | DIS, |
| 96 | CMD, |
| 97 | TRN, |
| 98 | RFU |
| 99 | }sdio_state_enum; |
| 100 | typedef struct{ |
| 101 | rw_dir_enum rw; // directon (input) |
| 102 | kal_uint8 func; // function (input) |
| 103 | kal_bool raw; // read after write |
| 104 | kal_bool stop; // stop data transfer |
| 105 | kal_uint8 data; // write data or read back data (Input , output) |
| 106 | kal_uint32 adrs; // address (input) |
| 107 | }cmd52_config_struct; |
| 108 | |
| 109 | #define SDIO_SUPPORT_FUNCTION (SDIO_MAX_FUCN_ID-1) |
| 110 | typedef struct{ |
| 111 | rw_dir_enum rw; // directon |
| 112 | kal_uint8 func; // function |
| 113 | kal_bool block; // block mode or not |
| 114 | cmd53_op_enum op; // operation mode |
| 115 | kal_uint16 count; // byte or block count |
| 116 | kal_uint32 adrs; // address |
| 117 | kal_uint32 buffer; // address of buffer for data transfer |
| 118 | }cmd53_config_struct; |
| 119 | |
| 120 | typedef struct{ |
| 121 | kal_uint8 num_func; |
| 122 | kal_bool mem_present; |
| 123 | kal_bool io_ready; |
| 124 | kal_bool ocr_valid; |
| 125 | kal_bool stop; // stop trans issued |
| 126 | sdio_state_enum state; |
| 127 | kal_uint8 resp; |
| 128 | kal_uint8 bit_width; |
| 129 | kal_uint8 capability; |
| 130 | kal_uint32 ocr; |
| 131 | kal_uint8 power_control; |
| 132 | kal_uint32 block_size[SDIO_MAX_FUCN_ID]; |
| 133 | void (*callback[SDIO_MAX_FUCN_ID])(void); |
| 134 | }sdio_dcb_struct; |
| 135 | |
| 136 | /*SDIO command set*/ |
| 137 | SDC_CMD_STATUS SDIO_Cmd5(kal_uint32 ocr); |
| 138 | SDC_CMD_STATUS SDIO_Cmd52_isr(cmd52_config_struct *p); |
| 139 | SDC_CMD_STATUS SDIO_Cmd52(cmd52_config_struct *p); |
| 140 | SDC_CMD_STATUS SDIO_Cmd53_isr(cmd53_config_struct *p); |
| 141 | SDC_CMD_STATUS SDIO_Cmd53(cmd53_config_struct *p); |
| 142 | SDC_CMD_STATUS SD_Send_Cmd_poll(kal_uint32 cmd, kal_uint32 arg); |
| 143 | SDC_CMD_STATUS SD_WaitCmdRdyOrTo_poll(void); |
| 144 | SDC_CMD_STATUS SD_StopTrans_poll(void); |
| 145 | /*Driver only*/ |
| 146 | SDC_CMD_STATUS SDIO_read_FBR(SDIO_function_id_enum function); |
| 147 | SDC_CMD_STATUS SDIO_read_CCCR(void); |
| 148 | SDC_CMD_STATUS SDIO_read_CIS(SDIO_function_id_enum function); |
| 149 | SDC_CMD_STATUS SDIO_read_capacity(void); |
| 150 | SDC_CMD_STATUS SDIO_abort_IO(SDIO_function_id_enum function); |
| 151 | SDC_CMD_STATUS SDIO_SW_reset(void); |
| 152 | SDC_CMD_STATUS SDIO_check_IO_Int(SDIO_function_id_enum function, kal_bool *pending); |
| 153 | SDC_CMD_STATUS SDIO_check_IO_ready(SDIO_function_id_enum function, kal_bool *ready); |
| 154 | SDC_CMD_STATUS SDIO_configure_bus(SD_BITWIDTH bus); |
| 155 | SDC_CMD_STATUS SDIO_enable_E4MI(kal_bool enable); |
| 156 | SDC_CMD_STATUS SDIO_read_power_control(void); |
| 157 | SDC_CMD_STATUS SDIO_enable_MPS(kal_bool enable); |
| 158 | kal_bool SDIO_support_MPS(void); |
| 159 | kal_bool SDIO_support_SDC(void); |
| 160 | kal_bool SDIO_support_SMB(void); |
| 161 | kal_bool SDIO_support_SRW(void); |
| 162 | kal_bool SDIO_support_SBS(void); |
| 163 | kal_bool SDIO_support_S4MI(void); |
| 164 | kal_bool SDIO_support_LSC(void); |
| 165 | kal_bool SDIO_support_4BLS(void); |
| 166 | void SDIO_HISR_Entry(void); |
| 167 | kal_bool SDIO_Register_Read_poll(SDIO_function_id_enum function, |
| 168 | kal_uint32 addr, |
| 169 | kal_uint32 *data, |
| 170 | cmd53_op_enum op); |
| 171 | SDC_CMD_STATUS SDIO_stop(void); |
| 172 | SDC_CMD_STATUS SDIO_WaitDatRdyOrTo(void); |
| 173 | /*SDIO function */ |
| 174 | SDC_CMD_STATUS SDIO_read_CCCR_ver(kal_uint8 *version); |
| 175 | SDC_CMD_STATUS SDIO_read_SDIO_ver(kal_uint8 *version); |
| 176 | SDC_CMD_STATUS SDIO_read_SD_ver(kal_uint8 *version); |
| 177 | SDC_CMD_STATUS SDIO_configure_BLK_size(SDIO_function_id_enum function, kal_uint32 size); |
| 178 | SDC_CMD_STATUS SDIO_get_BLK_size(SDIO_function_id_enum function, kal_uint32 *size); |
| 179 | kal_uint32 SDIO_query_BLK_size(SDIO_function_id_enum function); |
| 180 | SDIO_function_id_enum SDIO_query_IO_id(SDIO_interface_code_enum ap); |
| 181 | SDC_CMD_STATUS SDIO_enable_IO_Int(SDIO_function_id_enum function, kal_bool enable); |
| 182 | SDC_CMD_STATUS SDIO_enable_IO(SDIO_function_id_enum function, kal_bool enable); |
| 183 | void SDIO_int_registration(SDIO_function_id_enum function, void (func)(void)); |
| 184 | /*Function for WiFi */ |
| 185 | /*Write Register*/ |
| 186 | kal_bool SDIO_Register_Write(SDIO_function_id_enum function, |
| 187 | kal_uint32 addr, |
| 188 | kal_uint32 data, |
| 189 | cmd53_op_enum op); |
| 190 | kal_bool SDIO_Register_Write_isr(SDIO_function_id_enum function, |
| 191 | kal_uint32 addr, |
| 192 | kal_uint32 data, |
| 193 | cmd53_op_enum op); |
| 194 | /*Write Data */ |
| 195 | kal_bool SDIO_Data_Write(SDIO_function_id_enum function, |
| 196 | kal_uint32 addr, |
| 197 | kal_uint8 *data, |
| 198 | cmd53_op_enum op, |
| 199 | kal_uint32 count, |
| 200 | kal_bool block); |
| 201 | /*Read Register*/ |
| 202 | kal_bool SDIO_Register_Read(SDIO_function_id_enum function, |
| 203 | kal_uint32 addr, |
| 204 | kal_uint32 *data, |
| 205 | cmd53_op_enum op); |
| 206 | kal_bool SDIO_Data_Read(SDIO_function_id_enum function, |
| 207 | kal_uint32 addr, |
| 208 | kal_uint8 *data, |
| 209 | cmd53_op_enum op, |
| 210 | kal_uint32 count, |
| 211 | kal_bool block); |
| 212 | |
| 213 | //guilin |
| 214 | DCL_SDC_CMD_STATUS SDIO_cmd52_read(DCL_SDIO_function_id_enum function, DCL_UINT32 addr, DCL_UINT8 *rdata, DCL_UINT8 *r5resp); |
| 215 | DCL_SDC_CMD_STATUS SDIO_cmd52_write(DCL_SDIO_function_id_enum function, DCL_UINT32 addr, DCL_UINT8 wdata, DCL_UINT8 *r5resp); |
| 216 | DCL_SDC_CMD_STATUS SDIO_cmd52_write_read(DCL_SDIO_function_id_enum function, DCL_UINT32 addr, DCL_UINT8 wdata, DCL_UINT8 *rdata, DCL_UINT8 *r5resp); |
| 217 | DCL_SDC_CMD_STATUS SDIO_cmd53_read(DCL_SDIO_function_id_enum function, DCL_UINT32 addr, DCL_UINT32 data, DCL_SDIO_cmd53_op_enum op, DCL_UINT32 count, DCL_BOOL block, DCL_UINT8 *r5resp); |
| 218 | DCL_SDC_CMD_STATUS SDIO_cmd53_write(DCL_SDIO_function_id_enum function, DCL_UINT32 addr, DCL_UINT32 data, DCL_SDIO_cmd53_op_enum op, DCL_UINT32 count, DCL_BOOL block, DCL_UINT8 *r5resp); |
| 219 | DCL_SDC_CMD_STATUS SDIO_mcudma_read(DCL_UINT32 *rdata); |
| 220 | DCL_SDC_CMD_STATUS SDIO_mcudma_write(DCL_UINT32 wdata); |
| 221 | DCL_SDC_CMD_STATUS SDIO_clkpadred_read(DCL_UINT32 *rdata); |
| 222 | DCL_SDC_CMD_STATUS SDIO_clkpadred_write(DCL_UINT32 wdata); |
| 223 | DCL_SDC_CMD_STATUS SDIO_forcemcu_read(DCL_UINT32 *rdata); |
| 224 | DCL_SDC_CMD_STATUS SDIO_forcemcu_write(DCL_UINT32 wdata); |
| 225 | DCL_SDC_CMD_STATUS SDIO_getclk(DCL_UINT32 *rdata); |
| 226 | DCL_SDC_CMD_STATUS SDIO_setclk(DCL_UINT32 wdata); |
| 227 | |
| 228 | void SDIO_dispatch_IO(SDIO_function_id_enum function); |
| 229 | void SDIO_resume_IO(SDIO_function_id_enum function); |
| 230 | |
| 231 | |
| 232 | |
| 233 | |
| 234 | #ifdef __SDIO_SRW_SRW__ |
| 235 | SDC_CMD_STATUS SDIO_suspend_IO(SDIO_bus_status_enum *bus_status); |
| 236 | SDC_CMD_STATUS SDIO_select_IO(SDIO_function_id_enum function, kal_bool *resume_data); |
| 237 | SDC_CMD_STATUS SDIO_check_IO_exec(SDIO_function_id_enum function, kal_bool *execution); |
| 238 | SDC_CMD_STATUS SDIO_check_IO_ready_flag(SDIO_function_id_enum function, kal_bool *ready); |
| 239 | #endif |
| 240 | |
| 241 | /*extern varibale*/ |
| 242 | extern sdio_dcb_struct gSDIO; |
| 243 | #endif // end of SD_DEF_H |