blob: e41033f291d9cf626b6219c02ebffd845ce97852 [file] [log] [blame]
wdenk71f95112003-06-15 22:40:42 +00001/*
2 * (C) Copyright 2000-2003
3 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4 *
5 * See file CREDITS for list of people who contributed to this
6 * project.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of
11 * the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21 * MA 02111-1307 USA
22 */
23
24#ifndef _MMC_H_
25#define _MMC_H_
wdenk71f95112003-06-15 22:40:42 +000026
Haavard Skinnemoen341188b2008-05-22 11:09:59 +020027/* MMC command numbers */
28#define MMC_CMD_GO_IDLE_STATE 0
29#define MMC_CMD_SEND_OP_COND 1
30#define MMC_CMD_ALL_SEND_CID 2
31#define MMC_CMD_SET_RELATIVE_ADDR 3
32#define MMC_CMD_SET_DSR 4
33#define MMC_CMD_SELECT_CARD 7
34#define MMC_CMD_SEND_CSD 9
35#define MMC_CMD_SEND_CID 10
36#define MMC_CMD_SEND_STATUS 13
37#define MMC_CMD_SET_BLOCKLEN 16
38#define MMC_CMD_READ_SINGLE_BLOCK 17
39#define MMC_CMD_READ_MULTIPLE_BLOCK 18
40#define MMC_CMD_WRITE_BLOCK 24
41#define MMC_CMD_APP_CMD 55
42
43/* SD Card command numbers */
44#define SD_CMD_SEND_RELATIVE_ADDR 3
45#define SD_CMD_SWITCH 6
46#define SD_CMD_SEND_IF_COND 8
47
48#define SD_CMD_APP_SET_BUS_WIDTH 6
49#define SD_CMD_APP_SEND_OP_COND 41
50
Andy Fleming1de97f92008-10-30 16:31:39 -050051#define R1_ILLEGAL_COMMAND (1 << 22)
52#define R1_APP_CMD (1 << 5)
53
Andy Flemingabb54662008-10-30 16:21:00 -050054int mmc_legacy_init(int verbose);
wdenk71f95112003-06-15 22:40:42 +000055int mmc_read(ulong src, uchar *dst, int size);
56int mmc_write(uchar *src, ulong dst, int size);
wdenk71f95112003-06-15 22:40:42 +000057
Andy Fleming1de97f92008-10-30 16:31:39 -050058struct mmc_cid {
59 unsigned long psn;
60 unsigned short oid;
61 unsigned char mid;
62 unsigned char prv;
63 unsigned char mdt;
64 char pnm[7];
65};
66
67struct mmc_csd
68{
69 u8 csd_structure:2,
70 spec_vers:4,
71 rsvd1:2;
72 u8 taac;
73 u8 nsac;
74 u8 tran_speed;
75 u16 ccc:12,
76 read_bl_len:4;
77 u64 read_bl_partial:1,
78 write_blk_misalign:1,
79 read_blk_misalign:1,
80 dsr_imp:1,
81 rsvd2:2,
82 c_size:12,
83 vdd_r_curr_min:3,
84 vdd_r_curr_max:3,
85 vdd_w_curr_min:3,
86 vdd_w_curr_max:3,
87 c_size_mult:3,
88 sector_size:5,
89 erase_grp_size:5,
90 wp_grp_size:5,
91 wp_grp_enable:1,
92 default_ecc:2,
93 r2w_factor:3,
94 write_bl_len:4,
95 write_bl_partial:1,
96 rsvd3:5;
97 u8 file_format_grp:1,
98 copy:1,
99 perm_write_protect:1,
100 tmp_write_protect:1,
101 file_format:2,
102 ecc:2;
103 u8 crc:7;
104 u8 one:1;
105};
106
wdenk71f95112003-06-15 22:40:42 +0000107#endif /* _MMC_H_ */