]> git.sur5r.net Git - freertos/blob
a9670d0fcf63247903df01e195e04d0bc4f18b39
[freertos] /
1 /******************************************************************************
2 *
3 * Copyright (C) 2013 - 2015 Xilinx, Inc.  All rights reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
6 * of this software and associated documentation files (the "Software"), to deal
7 * in the Software without restriction, including without limitation the rights
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 * copies of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included in
13 * all copies or substantial portions of the Software.
14 *
15 * Use of the Software is limited solely to applications:
16 * (a) running on a Xilinx device, or
17 * (b) that interact with a Xilinx device through a bus or interconnect.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * XILINX  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
23 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
24 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25 * SOFTWARE.
26 *
27 * Except as contained in this notice, the name of the Xilinx shall not be used
28 * in advertising or otherwise to promote the sale, use or other dealings in
29 * this Software without prior written authorization from Xilinx.
30 *
31 ******************************************************************************/
32 /*****************************************************************************/
33 /**
34 *
35 * @file xsdps_hw.h
36 *
37 * This header file contains the identifiers and basic HW access driver
38 * functions (or  macros) that can be used to access the device. Other driver
39 * functions are defined in xsdps.h.
40 *
41 * <pre>
42 * MODIFICATION HISTORY:
43 *
44 * Ver   Who    Date     Changes
45 * ----- ---    -------- -----------------------------------------------
46 * 1.00a hk/sg  10/17/13 Initial release
47 *
48 * </pre>
49 *
50 ******************************************************************************/
51
52 #ifndef SD_HW_H_
53 #define SD_HW_H_
54
55 #ifdef __cplusplus
56 extern "C" {
57 #endif
58
59 /***************************** Include Files *********************************/
60
61 #include "xil_types.h"
62 #include "xil_assert.h"
63 #include "xil_io.h"
64 #include "xparameters.h"
65
66 /************************** Constant Definitions *****************************/
67
68 /** @name Register Map
69  *
70  * Register offsets from the base address of an SD device.
71  * @{
72  */
73
74 #define XSDPS_SDMA_SYS_ADDR_OFFSET      0x00    /**< SDMA System Address
75                                                         Register */
76 #define XSDPS_BLK_SIZE_OFFSET           0x04    /**< Block Size Register */
77 #define XSDPS_BLK_CNT_OFFSET            0x06    /**< Block Count Register */
78 #define XSDPS_ARGMT_OFFSET              0x08    /**< Argument Register */
79 #define XSDPS_XFER_MODE_OFFSET          0x0C    /**< Transfer Mode Register */
80 #define XSDPS_CMD_OFFSET                0x0E    /**< Command Register */
81 #define XSDPS_RESP0_OFFSET              0x10    /**< Response0 Register */
82 #define XSDPS_RESP1_OFFSET              0x14    /**< Response1 Register */
83 #define XSDPS_RESP2_OFFSET              0x18    /**< Response2 Register */
84 #define XSDPS_RESP3_OFFSET              0x1C    /**< Response3 Register */
85 #define XSDPS_BUF_DAT_PORT_OFFSET       0x20    /**< Buffer Data Port */
86 #define XSDPS_PRES_STATE_OFFSET         0x24    /**< Present State */
87 #define XSDPS_HOST_CTRL1_OFFSET         0x28    /**< Host Control 1 */
88 #define XSDPS_POWER_CTRL_OFFSET         0x29    /**< Power Control */
89 #define XSDPS_BLK_GAP_CTRL_OFFSET       0x2A    /**< Block Gap Control */
90 #define XSDPS_WAKE_UP_CTRL_OFFSET       0x2B    /**< Wake Up Control */
91 #define XSDPS_CLK_CTRL_OFFSET           0x2C    /**< Clock Control */
92 #define XSDPS_TIMEOUT_CTRL_OFFSET       0x2E    /**< Timeout Control */
93 #define XSDPS_SW_RST_OFFSET             0x2F    /**< Software Reset */
94 #define XSDPS_NORM_INTR_STS_OFFSET      0x30    /**< Normal Interrupt
95                                                         Status Register */
96 #define XSDPS_ERR_INTR_STS_OFFSET       0x32    /**< Error Interrupt
97                                                         Status Register */
98 #define XSDPS_NORM_INTR_STS_EN_OFFSET   0x34    /**< Normal Interrupt
99                                                 Status Enable Register */
100 #define XSDPS_ERR_INTR_STS_EN_OFFSET    0x36    /**< Error Interrupt
101                                                 Status Enable Register */
102 #define XSDPS_NORM_INTR_SIG_EN_OFFSET   0x38    /**< Normal Interrupt
103                                                 Signal Enable Register */
104 #define XSDPS_ERR_INTR_SIG_EN_OFFSET    0x3A    /**< Error Interrupt
105                                                 Signal Enable Register */
106
107 #define XSDPS_AUTO_CMD12_ERR_STS_OFFSET 0x3C    /**< Auto CMD12 Error Status
108                                                         Register */
109 #define XSDPS_HOST_CTRL2_OFFSET         0x3E    /**< Host Control2 Register */
110 #define XSDPS_CAPS_OFFSET               0x40    /**< Capabilities Register */
111 #define XSDPS_CAPS_EXT_OFFSET           0x44    /**< Capabilities Extended */
112 #define XSDPS_MAX_CURR_CAPS_OFFSET      0x48    /**< Maximum Current
113                                                 Capabilities Register */
114 #define XSDPS_MAX_CURR_CAPS_EXT_OFFSET  0x4C    /**< Maximum Current
115                                                 Capabilities Ext Register */
116 #define XSDPS_FE_ERR_INT_STS_OFFSET     0x52    /**< Force Event for
117                                                 Error Interrupt Status */
118 #define XSDPS_FE_AUTO_CMD12_EIS_OFFSET  0x50    /**< Auto CM12 Error Interrupt
119                                                         Status Register */
120 #define XSDPS_ADMA_ERR_STS_OFFSET       0x54    /**< ADMA Error Status
121                                                         Register */
122 #define XSDPS_ADMA_SAR_OFFSET           0x58    /**< ADMA System Address
123                                                         Register */
124 #define XSDPS_ADMA_SAR_EXT_OFFSET       0x5C    /**< ADMA System Address
125                                                         Extended Register */
126 #define XSDPS_PRE_VAL_1_OFFSET          0x60    /**< Preset Value Register */
127 #define XSDPS_PRE_VAL_2_OFFSET          0x64    /**< Preset Value Register */
128 #define XSDPS_PRE_VAL_3_OFFSET          0x68    /**< Preset Value Register */
129 #define XSDPS_PRE_VAL_4_OFFSET          0x6C    /**< Preset Value Register */
130 #define XSDPS_SHARED_BUS_CTRL_OFFSET    0xE0    /**< Shared Bus Control
131                                                         Register */
132 #define XSDPS_SLOT_INTR_STS_OFFSET      0xFC    /**< Slot Interrupt Status
133                                                         Register */
134 #define XSDPS_HOST_CTRL_VER_OFFSET      0xFE    /**< Host Controller Version
135                                                         Register */
136
137 /* @} */
138
139 /** @name Control Register - Host control, Power control,
140  *                      Block Gap control and Wakeup control
141  *
142  * This register contains bits for various configuration options of
143  * the SD host controller. Read/Write apart from the reserved bits.
144  * @{
145  */
146
147 #define XSDPS_HC_LED_MASK               0x00000001 /**< LED Control */
148 #define XSDPS_HC_WIDTH_MASK             0x00000002 /**< Bus width */
149 #define XSDPS_HC_SPEED_MASK             0x00000004 /**< High Speed */
150 #define XSDPS_HC_DMA_MASK               0x00000018 /**< DMA Mode Select */
151 #define XSDPS_HC_DMA_SDMA_MASK          0x00000000 /**< SDMA Mode */
152 #define XSDPS_HC_DMA_ADMA1_MASK         0x00000008 /**< ADMA1 Mode */
153 #define XSDPS_HC_DMA_ADMA2_32_MASK      0x00000010 /**< ADMA2 Mode - 32 bit */
154 #define XSDPS_HC_DMA_ADMA2_64_MASK      0x00000018 /**< ADMA2 Mode - 64 bit */
155 #define XSDPS_HC_EXT_BUS_WIDTH          0x00000020 /**< Bus width - 8 bit */
156 #define XSDPS_HC_CARD_DET_TL_MASK       0x00000040 /**< Card Detect Tst Lvl */
157 #define XSDPS_HC_CARD_DET_SD_MASK       0x00000080 /**< Card Detect Sig Det */
158
159 #define XSDPS_PC_BUS_PWR_MASK           0x00000001 /**< Bus Power Control */
160 #define XSDPS_PC_BUS_VSEL_MASK          0x0000000E /**< Bus Voltage Select */
161 #define XSDPS_PC_BUS_VSEL_3V3_MASK      0x0000000E /**< Bus Voltage 3.3V */
162 #define XSDPS_PC_BUS_VSEL_3V0_MASK      0x0000000C /**< Bus Voltage 3.0V */
163 #define XSDPS_PC_BUS_VSEL_1V8_MASK      0x0000000A /**< Bus Voltage 1.8V */
164
165 #define XSDPS_BGC_STP_REQ_MASK          0x00000001 /**< Block Gap Stop Req */
166 #define XSDPS_BGC_CNT_REQ_MASK          0x00000002 /**< Block Gap Cont Req */
167 #define XSDPS_BGC_RWC_MASK              0x00000004 /**< Block Gap Rd Wait */
168 #define XSDPS_BGC_INTR_MASK             0x00000008 /**< Block Gap Intr */
169 #define XSDPS_BGC_SPI_MODE_MASK         0x00000010 /**< Block Gap SPI Mode */
170 #define XSDPS_BGC_BOOT_EN_MASK          0x00000020 /**< Block Gap Boot Enb */
171 #define XSDPS_BGC_ALT_BOOT_EN_MASK      0x00000040 /**< Block Gap Alt BootEn */
172 #define XSDPS_BGC_BOOT_ACK_MASK         0x00000080 /**< Block Gap Boot Ack */
173
174 #define XSDPS_WC_WUP_ON_INTR_MASK       0x00000001 /**< Wakeup Card Intr */
175 #define XSDPS_WC_WUP_ON_INSRT_MASK      0x00000002 /**< Wakeup Card Insert */
176 #define XSDPS_WC_WUP_ON_REM_MASK        0x00000004 /**< Wakeup Card Removal */
177
178 /* @} */
179
180 /** @name Control Register - Clock control, Timeout control & Software reset
181  *
182  * This register contains bits for configuration options of clock, timeout and
183  * software reset.
184  * Read/Write except for Inter_Clock_Stable bit (read only) and reserved bits.
185  * @{
186  */
187
188 #define XSDPS_CC_INT_CLK_EN_MASK                0x00000001
189 #define XSDPS_CC_INT_CLK_STABLE_MASK    0x00000002
190 #define XSDPS_CC_SD_CLK_EN_MASK                 0x00000004
191 #define XSDPS_CC_SD_CLK_GEN_SEL_MASK            0x00000020
192 #define XSDPS_CC_SDCLK_FREQ_SEL_EXT_MASK        0x000000C0
193 #define XSDPS_CC_SDCLK_FREQ_SEL_MASK            0x0000FF00
194 #define XSDPS_CC_SDCLK_FREQ_D256_MASK           0x00008000
195 #define XSDPS_CC_SDCLK_FREQ_D128_MASK           0x00004000
196 #define XSDPS_CC_SDCLK_FREQ_D64_MASK            0x00002000
197 #define XSDPS_CC_SDCLK_FREQ_D32_MASK            0x00001000
198 #define XSDPS_CC_SDCLK_FREQ_D16_MASK            0x00000800
199 #define XSDPS_CC_SDCLK_FREQ_D8_MASK             0x00000400
200 #define XSDPS_CC_SDCLK_FREQ_D4_MASK             0x00000200
201 #define XSDPS_CC_SDCLK_FREQ_D2_MASK             0x00000100
202 #define XSDPS_CC_SDCLK_FREQ_BASE_MASK   0x00000000
203
204 #define XSDPS_TC_CNTR_VAL_MASK                  0x0000000F
205
206 #define XSDPS_SWRST_ALL_MASK                    0x00000001
207 #define XSDPS_SWRST_CMD_LINE_MASK               0x00000002
208 #define XSDPS_SWRST_DAT_LINE_MASK               0x00000004
209
210 #define XSDPS_CC_MAX_NUM_OF_DIV         9
211 #define XSDPS_CC_DIV_SHIFT              8
212
213 /* @} */
214
215 /** @name SD Interrupt Registers
216  *
217  * <b> Normal and Error Interrupt Status Register </b>
218  * This register shows the normal and error interrupt status.
219  * Status enable register affects reads of this register.
220  * If Signal enable register is set and the corresponding status bit is set,
221  * interrupt is generated.
222  * Write to clear except
223  * Error_interrupt and Card_Interrupt bits - Read only
224  *
225  * <b> Normal and Error Interrupt Status Enable Register </b>
226  * Setting this register bits enables Interrupt status.
227  * Read/Write except Fixed_to_0 bit (Read only)
228  *
229  * <b> Normal and Error Interrupt Signal Enable Register </b>
230  * This register is used to select which interrupt status is
231  * indicated to the Host System as the interrupt.
232  * Read/Write except Fixed_to_0 bit (Read only)
233  *
234  * All three registers have same bit definitions
235  * @{
236  */
237
238 #define XSDPS_INTR_CC_MASK              0x00000001 /**< Command Complete */
239 #define XSDPS_INTR_TC_MASK              0x00000002 /**< Transfer Complete */
240 #define XSDPS_INTR_BGE_MASK             0x00000004 /**< Block Gap Event */
241 #define XSDPS_INTR_DMA_MASK             0x00000008 /**< DMA Interrupt */
242 #define XSDPS_INTR_BWR_MASK             0x00000010 /**< Buffer Write Ready */
243 #define XSDPS_INTR_BRR_MASK             0x00000020 /**< Buffer Read Ready */
244 #define XSDPS_INTR_CARD_INSRT_MASK      0x00000040 /**< Card Insert */
245 #define XSDPS_INTR_CARD_REM_MASK        0x00000080 /**< Card Remove */
246 #define XSDPS_INTR_CARD_MASK            0x00000100 /**< Card Interrupt */
247 #define XSDPS_INTR_INT_A_MASK           0x00000200 /**< INT A Interrupt */
248 #define XSDPS_INTR_INT_B_MASK           0x00000400 /**< INT B Interrupt */
249 #define XSDPS_INTR_INT_C_MASK           0x00000800 /**< INT C Interrupt */
250 #define XSDPS_INTR_RE_TUNING_MASK       0x00001000 /**< Re-Tuning Interrupt */
251 #define XSDPS_INTR_BOOT_TERM_MASK       0x00002000 /**< Boot Terminate
252                                                         Interrupt */
253 #define XSDPS_INTR_BOOT_ACK_RECV_MASK   0x00004000 /**< Boot Ack Recv
254                                                         Interrupt */
255 #define XSDPS_INTR_ERR_MASK             0x00008000 /**< Error Interrupt */
256 #define XSDPS_NORM_INTR_ALL_MASK        0x0000FFFF
257
258 #define XSDPS_INTR_ERR_CT_MASK          0x00000001 /**< Command Timeout
259                                                         Error */
260 #define XSDPS_INTR_ERR_CCRC_MASK        0x00000002 /**< Command CRC Error */
261 #define XSDPS_INTR_ERR_CEB_MASK         0x00000004 /**< Command End Bit
262                                                         Error */
263 #define XSDPS_INTR_ERR_CI_MASK          0x00000008 /**< Command Index Error */
264 #define XSDPS_INTR_ERR_DT_MASK          0x00000010 /**< Data Timeout Error */
265 #define XSDPS_INTR_ERR_DCRC_MASK        0x00000020 /**< Data CRC Error */
266 #define XSDPS_INTR_ERR_DEB_MASK         0x00000040 /**< Data End Bit Error */
267 #define XSDPS_INTR_ERR_I_LMT_MASK       0x00000080 /**< Current Limit Error */
268 #define XSDPS_INTR_ERR_AUTO_CMD12_MASK  0x00000100 /**< Auto CMD12 Error */
269 #define XSDPS_INTR_ERR_ADMA_MASK        0x00000200 /**< ADMA Error */
270 #define XSDPS_INTR_ERR_TR_MASK          0x00001000 /**< Tuning Error */
271 #define XSDPS_INTR_VEND_SPF_ERR_MASK    0x0000E000 /**< Vendor Specific
272                                                         Error */
273 #define XSDPS_ERROR_INTR_ALL_MASK       0x0000F3FF /**< Mask for error bits */
274 /* @} */
275
276 /** @name Block Size and Block Count Register
277  *
278  * This register contains the block count for current transfer,
279  * block size and SDMA buffer size.
280  * Read/Write except for reserved bits.
281  * @{
282  */
283
284 #define XSDPS_BLK_SIZE_MASK             0x00000FFF /**< Transfer Block Size */
285 #define XSDPS_SDMA_BUFF_SIZE_MASK       0x00007000 /**< Host SDMA Buffer Size */
286 #define XSDPS_BLK_CNT_MASK              0x0000FFFF /**< Block Count for
287                                                                 Current Transfer */
288
289 /* @} */
290
291 /** @name Transfer Mode and Command Register
292  *
293  * The Transfer Mode register is used to control the data transfers and
294  * Command register is used for command generation
295  * Read/Write except for reserved bits.
296  * @{
297  */
298
299 #define XSDPS_TM_DMA_EN_MASK            0x00000001 /**< DMA Enable */
300 #define XSDPS_TM_BLK_CNT_EN_MASK        0x00000002 /**< Block Count Enable */
301 #define XSDPS_TM_AUTO_CMD12_EN_MASK     0x00000004 /**< Auto CMD12 Enable */
302 #define XSDPS_TM_DAT_DIR_SEL_MASK       0x00000010 /**< Data Transfer
303                                                         Direction Select */
304 #define XSDPS_TM_MUL_SIN_BLK_SEL_MASK   0x00000020 /**< Multi/Single
305                                                         Block Select */
306
307 #define XSDPS_CMD_RESP_SEL_MASK         0x00000003 /**< Response Type
308                                                         Select */
309 #define XSDPS_CMD_RESP_NONE_MASK        0x00000000 /**< No Response */
310 #define XSDPS_CMD_RESP_L136_MASK        0x00000001 /**< Response length 138 */
311 #define XSDPS_CMD_RESP_L48_MASK         0x00000002 /**< Response length 48 */
312 #define XSDPS_CMD_RESP_L48_BSY_CHK_MASK 0x00000003 /**< Response length 48 &
313                                                         check busy after
314                                                         response */
315 #define XSDPS_CMD_CRC_CHK_EN_MASK       0x00000008 /**< Command CRC Check
316                                                         Enable */
317 #define XSDPS_CMD_INX_CHK_EN_MASK       0x00000010 /**< Command Index Check
318                                                         Enable */
319 #define XSDPS_DAT_PRESENT_SEL_MASK      0x00000020 /**< Data Present Select */
320 #define XSDPS_CMD_TYPE_MASK             0x000000C0 /**< Command Type */
321 #define XSDPS_CMD_TYPE_NORM_MASK        0x00000000 /**< CMD Type - Normal */
322 #define XSDPS_CMD_TYPE_SUSPEND_MASK     0x00000040 /**< CMD Type - Suspend */
323 #define XSDPS_CMD_TYPE_RESUME_MASK      0x00000080 /**< CMD Type - Resume */
324 #define XSDPS_CMD_TYPE_ABORT_MASK       0x000000C0 /**< CMD Type - Abort */
325 #define XSDPS_CMD_MASK                  0x00003F00 /**< Command Index Mask -
326                                                         Set to CMD0-63,
327                                                         AMCD0-63 */
328
329 /* @} */
330
331 /** @name Capabilities Register
332  *
333  * Capabilities register is a read only register which contains
334  * information about the host controller.
335  * Sufficient if read once after power on.
336  * Read Only
337  * @{
338  */
339 #define XSDPS_CAP_TOUT_CLK_FREQ_MASK    0x0000003F /**< Timeout clock freq
340                                                         select */
341 #define XSDPS_CAP_TOUT_CLK_UNIT_MASK    0x00000080 /**< Timeout clock unit -
342                                                         MHz/KHz */
343 #define XSDPS_CAP_MAX_BLK_LEN_MASK      0x00030000 /**< Max block length */
344 #define XSDPS_CAP_MAX_BLK_LEN_512B_MASK 0x00000000 /**< Max block 512 bytes */
345 #define XSDPS_CAP_EXT_MEDIA_BUS_MASK    0x00040000 /**< Extended media bus */
346 #define XSDPS_CAP_ADMA2_MASK            0x00080000 /**< ADMA2 support */
347 #define XSDPS_CAP_HIGH_SPEED_MASK       0x00200000 /**< High speed support */
348 #define XSDPS_CAP_SDMA_MASK             0x00400000 /**< SDMA support */
349 #define XSDPS_CAP_SUSP_RESUME_MASK      0x00800000 /**< Suspend/Resume
350                                                         support */
351 #define XSDPS_CAP_VOLT_3V3_MASK         0x01000000 /**< 3.3V support */
352 #define XSDPS_CAP_VOLT_3V0_MASK         0x02000000 /**< 3.0V support */
353 #define XSDPS_CAP_VOLT_1V8_MASK         0x04000000 /**< 1.8V support */
354 #define XSDPS_CAP_INTR_MODE_MASK        0x08000000 /**< Interrupt mode
355                                                         support */
356 #define XSDPS_CAP_SYS_BUS_64_MASK       0x10000000 /**< 64 bit system bus
357                                                         support */
358 #define XSDPS_CAP_SPI_MODE_MASK         0x20000000 /**< SPI mode */
359 #define XSDPS_CAP_SPI_BLOCK_MODE_MASK   0x20000000 /**< SPI block mode */
360 /* @} */
361
362 /** @name Present State Register
363  *
364  * Gives the current status of the host controller
365  * Read Only
366  * @{
367  */
368
369 #define XSDPS_PSR_INHIBIT_CMD_MASK      0x00000001 /**< Command inhibit - CMD */
370 #define XSDPS_PSR_INHIBIT_DAT_MASK      0x00000002 /**< Command Inhibit - DAT */
371 #define XSDPS_PSR_DAT_ACTIVE_MASK       0x00000004 /**< DAT line active */
372 #define XSDPS_PSR_WR_ACTIVE_MASK        0x00000100 /**< Write transfer active */
373 #define XSDPS_PSR_RD_ACTIVE_MASK        0x00000200 /**< Read transfer active */
374 #define XSDPS_PSR_BUFF_WR_EN_MASK       0x00000400 /**< Buffer write enable */
375 #define XSDPS_PSR_BUFF_RD_EN_MASK       0x00000800 /**< Buffer read enable */
376 #define XSDPS_PSR_CARD_INSRT_MASK       0x00010000 /**< Card inserted */
377 #define XSDPS_PSR_CARD_STABLE_MASK      0x00020000 /**< Card state stable */
378 #define XSDPS_PSR_CARD_DPL_MASK         0x00040000 /**< Card detect pin level */
379 #define XSDPS_PSR_WPS_PL_MASK           0x00080000 /**< Write protect switch
380                                                                 pin level */
381
382 /* @} */
383
384 /** @name Block size mask for 512 bytes
385  *
386  * Block size mask for 512 bytes - This is the default block size.
387  * @{
388  */
389
390 #define XSDPS_BLK_SIZE_512_MASK 0x200
391
392 /* @} */
393
394 /** @name Commands
395  *
396  * Constant definitions for commands and response related to SD
397  * @{
398  */
399
400 #define XSDPS_APP_CMD_PREFIX     0x8000
401 #define CMD0     0x0000
402 #define CMD1     0x0100
403 #define CMD2     0x0200
404 #define CMD3     0x0300
405 #define CMD4     0x0400
406 #define CMD5     0x0500
407 #define CMD6     0x0600
408 #define ACMD6    (XSDPS_APP_CMD_PREFIX + 0x0600)
409 #define CMD7     0x0700
410 #define CMD8     0x0800
411 #define CMD9     0x0900
412 #define CMD10    0x0A00
413 #define CMD12    0x0C00
414 #define ACMD13   (XSDPS_APP_CMD_PREFIX + 0x0D00)
415 #define CMD16    0x1000
416 #define CMD17    0x1100
417 #define CMD18    0x1200
418 #define CMD23    0x1700
419 #define ACMD23   (XSDPS_APP_CMD_PREFIX + 0x1700)
420 #define CMD24    0x1800
421 #define CMD25    0x1900
422 #define CMD41    0x2900
423 #define ACMD41   (XSDPS_APP_CMD_PREFIX + 0x2900)
424 #define ACMD42   (XSDPS_APP_CMD_PREFIX + 0x2A00)
425 #define ACMD51   (XSDPS_APP_CMD_PREFIX + 0x3300)
426 #define CMD52    0x3400
427 #define CMD55    0x3700
428 #define CMD58    0x3A00
429
430 #define RESP_NONE       XSDPS_CMD_RESP_NONE_MASK
431 #define RESP_R1         XSDPS_CMD_RESP_L48_MASK | XSDPS_CMD_CRC_CHK_EN_MASK | \
432                         XSDPS_CMD_INX_CHK_EN_MASK
433
434 #define RESP_R1B        XSDPS_CMD_RESP_L48_BSY_CHK_MASK | \
435                         XSDPS_CMD_CRC_CHK_EN_MASK | XSDPS_CMD_INX_CHK_EN_MASK
436
437 #define RESP_R2         XSDPS_CMD_RESP_L136_MASK | XSDPS_CMD_CRC_CHK_EN_MASK
438 #define RESP_R3         XSDPS_CMD_RESP_L48_MASK
439
440 #define RESP_R6         XSDPS_CMD_RESP_L48_BSY_CHK_MASK | \
441                         XSDPS_CMD_CRC_CHK_EN_MASK | XSDPS_CMD_INX_CHK_EN_MASK
442
443 /* @} */
444
445 /** @name ADMA2 Descriptor related definitions
446  *
447  * ADMA2 Descriptor related definitions
448  * @{
449  */
450
451 #define XSDPS_DESC_MAX_LENGTH 65536
452
453 #define XSDPS_DESC_VALID        (0x1 << 0)
454 #define XSDPS_DESC_END          (0x1 << 1)
455 #define XSDPS_DESC_INT          (0x1 << 2)
456 #define XSDPS_DESC_TRAN         (0x2 << 4)
457
458 /* @} */
459
460 /**************************** Type Definitions *******************************/
461
462 /***************** Macros (Inline Functions) Definitions *********************/
463
464 #define XSdPs_In32 Xil_In32
465 #define XSdPs_Out32 Xil_Out32
466
467 #define XSdPs_In16 Xil_In16
468 #define XSdPs_Out16 Xil_Out16
469
470 #define XSdPs_In8 Xil_In8
471 #define XSdPs_Out8 Xil_Out8
472
473 /****************************************************************************/
474 /**
475 * Read a register.
476 *
477 * @param        BaseAddress contains the base address of the device.
478 * @param        RegOffset contains the offset from the 1st register of the
479 *               device to the target register.
480 *
481 * @return       The value read from the register.
482 *
483 * @note         C-Style signature:
484 *               u32 XSdPs_ReadReg(u32 BaseAddress. int RegOffset)
485 *
486 ******************************************************************************/
487 #define XSdPs_ReadReg(BaseAddress, RegOffset) \
488         XSdPs_In32((BaseAddress) + (RegOffset))
489
490 /***************************************************************************/
491 /**
492 * Write to a register.
493 *
494 * @param        BaseAddress contains the base address of the device.
495 * @param        RegOffset contains the offset from the 1st register of the
496 *               device to target register.
497 * @param        RegisterValue is the value to be written to the register.
498 *
499 * @return       None.
500 *
501 * @note         C-Style signature:
502 *               void XSdPs_WriteReg(u32 BaseAddress, int RegOffset,
503 *               u32 RegisterValue)
504 *
505 ******************************************************************************/
506 #define XSdPs_WriteReg(BaseAddress, RegOffset, RegisterValue) \
507         XSdPs_Out32((BaseAddress) + (RegOffset), (RegisterValue))
508
509 /****************************************************************************/
510 /**
511 * Read a register.
512 *
513 * @param        BaseAddress contains the base address of the device.
514 * @param        RegOffset contains the offset from the 1st register of the
515 *               device to the target register.
516 *
517 * @return       The value read from the register.
518 *
519 * @note         C-Style signature:
520 *               u16 XSdPs_ReadReg(u32 BaseAddress. int RegOffset)
521 *
522 ******************************************************************************/
523 #define XSdPs_ReadReg16(BaseAddress, RegOffset) \
524         XSdPs_In16((BaseAddress) + (RegOffset))
525
526 /***************************************************************************/
527 /**
528 * Write to a register.
529 *
530 * @param        BaseAddress contains the base address of the device.
531 * @param        RegOffset contains the offset from the 1st register of the
532 *               device to target register.
533 * @param        RegisterValue is the value to be written to the register.
534 *
535 * @return       None.
536 *
537 * @note         C-Style signature:
538 *               void XSdPs_WriteReg(u32 BaseAddress, int RegOffset,
539 *               u16 RegisterValue)
540 *
541 ******************************************************************************/
542 #define XSdPs_WriteReg16(BaseAddress, RegOffset, RegisterValue) \
543         XSdPs_Out16((BaseAddress) + (RegOffset), (RegisterValue))
544
545 /****************************************************************************/
546 /**
547 * Read a register.
548 *
549 * @param        BaseAddress contains the base address of the device.
550 * @param        RegOffset contains the offset from the 1st register of the
551 *               device to the target register.
552 *
553 * @return       The value read from the register.
554 *
555 * @note         C-Style signature:
556 *               u8 XSdPs_ReadReg(u32 BaseAddress. int RegOffset)
557 *
558 ******************************************************************************/
559 #define XSdPs_ReadReg8(BaseAddress, RegOffset) \
560         XSdPs_In8((BaseAddress) + (RegOffset))
561
562 /***************************************************************************/
563 /**
564 * Write to a register.
565 *
566 * @param        BaseAddress contains the base address of the device.
567 * @param        RegOffset contains the offset from the 1st register of the
568 *               device to target register.
569 * @param        RegisterValue is the value to be written to the register.
570 *
571 * @return       None.
572 *
573 * @note         C-Style signature:
574 *               void XSdPs_WriteReg(u32 BaseAddress, int RegOffset,
575 *               u8 RegisterValue)
576 *
577 ******************************************************************************/
578 #define XSdPs_WriteReg8(BaseAddress, RegOffset, RegisterValue) \
579         XSdPs_Out8((BaseAddress) + (RegOffset), (RegisterValue))
580
581 /***************************************************************************/
582 /**
583 * Macro to get present status register
584 *
585 * @param        BaseAddress contains the base address of the device.
586 *
587 * @return       None.
588 *
589 * @note         C-Style signature:
590 *               void XSdPs_WriteReg(u32 BaseAddress, int RegOffset,
591 *               u8 RegisterValue)
592 *
593 ******************************************************************************/
594 #define XSdPs_GetPresentStatusReg(BaseAddress) \
595                 XSdPs_In32((BaseAddress) + (XSDPS_PRES_STATE_OFFSET))
596
597 /************************** Function Prototypes ******************************/
598
599 /************************** Variable Definitions *****************************/
600
601 #ifdef __cplusplus
602 }
603 #endif
604
605 #endif /* SD_HW_H_ */