.. | .. |
---|
1 | | -/* SPDX-License-Identifier: GPL-2.0 */ |
---|
2 | 1 | /* |
---|
3 | 2 | * 'Standard' SDIO HOST CONTROLLER driver |
---|
4 | 3 | * |
---|
5 | | - * Copyright (C) 1999-2019, Broadcom Corporation |
---|
6 | | - * |
---|
| 4 | + * Portions of this code are copyright (c) 2022 Cypress Semiconductor Corporation |
---|
| 5 | + * |
---|
| 6 | + * Copyright (C) 1999-2017, Broadcom Corporation |
---|
| 7 | + * |
---|
7 | 8 | * Unless you and Broadcom execute a separate written software license |
---|
8 | 9 | * agreement governing use of this software, this software is licensed to you |
---|
9 | 10 | * under the terms of the GNU General Public License version 2 (the "GPL"), |
---|
10 | 11 | * available at http://www.broadcom.com/licenses/GPLv2.php, with the |
---|
11 | 12 | * following added to such license: |
---|
12 | | - * |
---|
| 13 | + * |
---|
13 | 14 | * As a special exception, the copyright holders of this software give you |
---|
14 | 15 | * permission to link this software with independent modules, and to copy and |
---|
15 | 16 | * distribute the resulting executable under terms of your choice, provided that |
---|
.. | .. |
---|
17 | 18 | * the license of that module. An independent module is a module which is not |
---|
18 | 19 | * derived from this software. The special exception does not apply to any |
---|
19 | 20 | * modifications of the software. |
---|
20 | | - * |
---|
| 21 | + * |
---|
21 | 22 | * Notwithstanding the above, under no circumstances may you combine this |
---|
22 | 23 | * software in any way with any other Broadcom software provided under a license |
---|
23 | 24 | * other than the GPL, without Broadcom's express prior written consent. |
---|
.. | .. |
---|
25 | 26 | * |
---|
26 | 27 | * <<Broadcom-WL-IPTag/Open:>> |
---|
27 | 28 | * |
---|
28 | | - * $Id: bcmsdstd.h 514727 2014-11-12 03:02:48Z $ |
---|
| 29 | + * $Id: bcmsdstd.h 663318 2016-10-04 19:02:16Z $ |
---|
29 | 30 | */ |
---|
30 | 31 | #ifndef _BCM_SD_STD_H |
---|
31 | 32 | #define _BCM_SD_STD_H |
---|
.. | .. |
---|
82 | 83 | #define SDIOH_CMD7_EXP_STATUS 0x00001E00 |
---|
83 | 84 | |
---|
84 | 85 | #define RETRIES_LARGE 100000 |
---|
| 86 | +#ifdef BCMQT |
---|
| 87 | +extern void sdstd_os_yield(sdioh_info_t *sd); |
---|
| 88 | +#define RETRIES_SMALL 10000 |
---|
| 89 | +#else |
---|
85 | 90 | #define sdstd_os_yield(sd) do {} while (0) |
---|
86 | 91 | #define RETRIES_SMALL 100 |
---|
87 | | - |
---|
| 92 | +#endif // endif |
---|
88 | 93 | |
---|
89 | 94 | #define USE_BLOCKMODE 0x2 /* Block mode can be single block or multi */ |
---|
90 | 95 | #define USE_MULTIBLOCK 0x4 |
---|
.. | .. |
---|
94 | 99 | #define CLIENT_INTR 0x100 /* Get rid of this! */ |
---|
95 | 100 | |
---|
96 | 101 | #define HC_INTR_RETUNING 0x1000 |
---|
97 | | - |
---|
98 | 102 | |
---|
99 | 103 | #ifdef BCMSDIOH_TXGLOM |
---|
100 | 104 | /* Total glom pkt can not exceed 64K |
---|
.. | .. |
---|
108 | 112 | ulong dma_phys_arr[SDIOH_MAXGLOM_SIZE]; /* DMA_MAPed address of frames */ |
---|
109 | 113 | uint16 nbytes[SDIOH_MAXGLOM_SIZE]; /* Size of each frame */ |
---|
110 | 114 | } glom_buf_t; |
---|
111 | | -#endif |
---|
| 115 | +#endif // endif |
---|
112 | 116 | |
---|
113 | 117 | struct sdioh_info { |
---|
114 | | - uint cfg_bar; /* pci cfg address for bar */ |
---|
115 | | - uint32 caps; /* cached value of capabilities reg */ |
---|
116 | | - uint32 curr_caps; /* max current capabilities reg */ |
---|
| 118 | + uint cfg_bar; /* pci cfg address for bar */ |
---|
| 119 | + uint32 caps; /* cached value of capabilities reg */ |
---|
| 120 | + uint32 curr_caps; /* max current capabilities reg */ |
---|
117 | 121 | |
---|
118 | | - osl_t *osh; /* osh handler */ |
---|
119 | | - volatile char *mem_space; /* pci device memory va */ |
---|
120 | | - uint lockcount; /* nest count of sdstd_lock() calls */ |
---|
| 122 | + osl_t *osh; /* osh handler */ |
---|
| 123 | + volatile char *mem_space; /* pci device memory va */ |
---|
| 124 | + uint lockcount; /* nest count of sdstd_lock() calls */ |
---|
121 | 125 | bool client_intr_enabled; /* interrupt connnected flag */ |
---|
122 | 126 | bool intr_handler_valid; /* client driver interrupt handler valid */ |
---|
123 | 127 | sdioh_cb_fn_t intr_handler; /* registered interrupt handler */ |
---|
.. | .. |
---|
163 | 167 | ulong adma2_dscr_start_phys; |
---|
164 | 168 | uint alloced_adma2_dscr_size; |
---|
165 | 169 | |
---|
166 | | - int r_cnt; /* rx count */ |
---|
167 | | - int t_cnt; /* tx_count */ |
---|
| 170 | + int r_cnt; /* rx count */ |
---|
| 171 | + int t_cnt; /* tx_count */ |
---|
168 | 172 | bool got_hcint; /* local interrupt flag */ |
---|
169 | 173 | uint16 last_intrstatus; /* to cache intrstatus */ |
---|
170 | | - int host_UHSISupported; /* whether UHSI is supported for HC. */ |
---|
171 | | - int card_UHSI_voltage_Supported; /* whether UHSI is supported for |
---|
| 174 | + int host_UHSISupported; /* whether UHSI is supported for HC. */ |
---|
| 175 | + int card_UHSI_voltage_Supported; /* whether UHSI is supported for |
---|
172 | 176 | * Card in terms of Voltage [1.8 or 3.3]. |
---|
173 | 177 | */ |
---|
174 | 178 | int global_UHSI_Supp; /* type of UHSI support in both host and card. |
---|
.. | .. |
---|
176 | 180 | * HOST_SDR_12_25: SDR12 and SDR25 supported |
---|
177 | 181 | * HOST_SDR_50_104_DDR: one of SDR50/SDR104 or DDR50 supptd |
---|
178 | 182 | */ |
---|
179 | | - volatile int sd3_dat_state; /* data transfer state used for retuning check */ |
---|
180 | | - volatile int sd3_tun_state; /* tuning state used for retuning check */ |
---|
181 | | - bool sd3_tuning_reqd; /* tuning requirement parameter */ |
---|
| 183 | + volatile int sd3_dat_state; /* data transfer state used for retuning check */ |
---|
| 184 | + volatile int sd3_tun_state; /* tuning state used for retuning check */ |
---|
| 185 | + bool sd3_tuning_reqd; /* tuning requirement parameter */ |
---|
| 186 | + bool sd3_tuning_disable; /* tuning disable due to bus sleeping */ |
---|
182 | 187 | uint32 caps3; /* cached value of 32 MSbits capabilities reg (SDIO 3.0) */ |
---|
183 | 188 | #ifdef BCMSDIOH_TXGLOM |
---|
184 | 189 | glom_buf_t glom_info; /* pkt information used for glomming */ |
---|
185 | 190 | uint txglom_mode; /* Txglom mode: 0 - copy, 1 - multi-descriptor */ |
---|
186 | | -#endif |
---|
| 191 | +#endif // endif |
---|
187 | 192 | }; |
---|
188 | 193 | |
---|
189 | 194 | #define DMA_MODE_NONE 0 |
---|
.. | .. |
---|
207 | 212 | #define CHECK_TUNING_PRE_DATA 1 |
---|
208 | 213 | #define CHECK_TUNING_POST_DATA 2 |
---|
209 | 214 | |
---|
210 | | - |
---|
211 | 215 | #ifdef DHD_DEBUG |
---|
212 | 216 | #define SD_DHD_DISABLE_PERIODIC_TUNING 0x01 |
---|
213 | 217 | #define SD_DHD_ENABLE_PERIODIC_TUNING 0x00 |
---|
214 | | -#endif |
---|
215 | | - |
---|
| 218 | +#endif // endif |
---|
216 | 219 | |
---|
217 | 220 | /************************************************************ |
---|
218 | 221 | * Internal interfaces: per-port references into bcmsdstd.c |
---|
.. | .. |
---|
234 | 237 | |
---|
235 | 238 | /* Wait for specified interrupt and error bits to be set */ |
---|
236 | 239 | extern void sdstd_spinbits(sdioh_info_t *sd, uint16 norm, uint16 err); |
---|
237 | | - |
---|
238 | 240 | |
---|
239 | 241 | /************************************************************** |
---|
240 | 242 | * Internal interfaces: bcmsdstd.c references to per-port code |
---|