[BACK]Return to sdmmcvar.h CVS log [TXT][DIR] Up to [local] / funnyos / dev / sdmmc

Annotation of funnyos/dev/sdmmc/sdmmcvar.h, Revision 1.4

1.1       nbrk        1: /*
1.4     ! nbrk        2:  * $Id: sdmmcvar.h,v 1.3 2007/12/21 17:45:26 nbrk Exp $
1.1       nbrk        3:  */
                      4: #ifndef _DEV_SDMMC_SDMMCVAR_H
                      5: #define _DEV_SDMMC_SDMMCVAR_H
                      6:
1.3       nbrk        7: #define SDMMC_BLOCK_SIZE 512
                      8:
1.1       nbrk        9: /*
                     10:  * SD/MMC simplified commands set.
                     11:  */
                     12: #define CMD0_GO_IDLE_STATE                     0
                     13: #define CMD1_SEND_OP_COND                      1
                     14: #define CMD8_SEND_IF_COND                      8
                     15: #define CMD9_SEND_CSD                          9
                     16: #define CMD10_SEND_CID                                 10
                     17: #define CMD12_STOP_TRANSMISSION        12
                     18: #define CMD16_SET_BLOCKLEN                     16
                     19: #define CMD17_READ_SINGLE_BLOCK        17
                     20: #define CMD18_READ_MULTIPLE_BLOCK      18
                     21: #define CMD23_SET_BLOCK_COUNT          23
                     22: #define CMD24_WRITE_BLOCK                      24
                     23: #define CMD25_WRITE_MULTIPLE_BLOCK     25
                     24: #define CMD41_APP_SEND_OP_COND                 41
                     25: #define CMD55_APP_CMD                          55
                     26: #define CMD58_READ_OCR                                 58
                     27:
1.2       nbrk       28: /* will use this when switch card from native mode to spi */
                     29: #define CMD0_HARDCODED_CRC                     0x95
                     30:
1.1       nbrk       31: /*
                     32:  * Command frame.
                     33:  */
                     34: struct sdmmc_cmdframe {
                     35:        uint8_t         sc_cmd;
                     36:        uint32_t        sc_arg;
                     37:        uint8_t         sc_crc;
                     38:
                     39: } __attribute__((packed));
                     40:
                     41: /*
                     42:  * Macross to construct frame header and footer.
                     43:  */
                     44: #define CMDFRAME_CMD(c) ((c & 0x3f) | 0x40)
                     45: #define CMDFRAME_CRC(c) (c << 1 | 0x01)
                     46:
                     47: /*
                     48:  * Responses bitfields.
                     49:  */
1.2       nbrk       50: #define R1_IN_IDLE_STATE                       0x01
                     51: #define R1_ERASE_RESET                                 0x02
                     52: #define R1_ILLEGAL_COMMAND                     0x04
                     53: #define R1_COMMAND_CRC_ERROR           0x08
                     54: #define R1_ERASE_SEQUENSE_ERROR        0x10
                     55: #define R1_ADDRESS_ERROR                       0x20
                     56: #define R1_PARAMETER_ERROR                     0x40
                     57: #define R2_CARD_LOCKED                                 0x01
                     58: #define R2_LOCKUNLOCK_FAILED           0x02
                     59: #define R2_UNSPECIFIED_ERROR           0x04
                     60: #define R2_CARD_CONTROLLER_ERROR       0x08
                     61: #define R2_CARD_ECC_FAILED                     0x10
                     62: #define R2_WRITE_PROTECT_VIOLATION     0x20
                     63: #define R2_ERASE_PARAMETER                     0x40
                     64: #define R2_OUT_OF_RANGE                        0x80
                     65:
1.1       nbrk       66:
                     67: /*
1.2       nbrk       68:  * R1 response.
1.1       nbrk       69:  */
                     70: struct sdmmc_r1resp {
                     71:        uint8_t         sr_eflags;
                     72:
                     73: };
                     74:
1.2       nbrk       75:
                     76: /*
                     77:  * R2 response.
                     78:  */
                     79: struct sdmmc_r2resp {
                     80:        uint8_t         sr_eflags1;
                     81:        uint8_t         sr_eflags2;
                     82:
                     83: } __attribute__((packed));
                     84:
                     85:
1.1       nbrk       86: /*
1.2       nbrk       87:  * R3 response.
1.1       nbrk       88:  */
                     89: struct sdmmc_r3resp {
                     90:        uint8_t         sr_eflags;
                     91:        uint32_t        sr_ocr;
                     92:
                     93: } __attribute__((packed));
1.2       nbrk       94:
                     95:
                     96: /*
1.3       nbrk       97:  * Tokens.
                     98:  */
                     99: #define TOK_READ_BLOCK                                 0xfe
                    100: #define TOK_READ_BLOCK_MULTIPLE                0xfe
                    101: #define TOK_WRITE_BLOCK                        0xfe
                    102: #define TOK_WRITE_BLOCK_MULTIPLE       0xfc
                    103: #define TOK_STOP_MULTIPLE                      0xfd
                    104:
                    105:
                    106: /*
1.2       nbrk      107:  * Read Error Token bits.
                    108:  */
                    109: #define RE_UNSPECIFIED_ERROR           0x01
                    110: #define RE_CARD_CONTROLLER_ERROR       0x02
                    111: #define RE_CARD_ECC_FAILED                     0x04
                    112: #define RE_OUT_OF_RANGE                        0x08
                    113: #define RE_CARD_LOCKED                                 0x10
1.3       nbrk      114:
                    115: /*
                    116:  * Card CID (Card ID) register.
                    117:  */
                    118: struct sdmmc_cid {
                    119:        uint8_t         cid_mid;
                    120:        uint16_t        cid_oid;
                    121:        uint8_t         cid_pnm[5];
                    122:        uint8_t         cid_prv;
                    123:        uint32_t        cid_psn;
                    124:        uint16_t        cid_mdt;
                    125:        uint8_t         cid_crc;
                    126:
                    127: } __attribute__((packed));
1.2       nbrk      128:
                    129: /*
                    130:  * SD/MMC bus handle.
                    131:  */
                    132: struct sdmmc_bus_handle {
1.4     ! nbrk      133:        uint8_t (*sb_init)(void *dd);
        !           134:        uint8_t (*sb_send_command)(void *dd, uint8_t cmd, uint32_t arg, uint8_t crc);
        !           135:        uint8_t (*sb_set_block_size)(void *dd, uint16_t size);
        !           136:        uint8_t (*sb_read_block)(void *dd, uint32_t addr, void *buff);
1.2       nbrk      137:        uint8_t (*sb_write_block)(void *dd, uint32_t addr, void *data);
1.4     ! nbrk      138:        /*
        !           139:         * XXX implement {read,write}_multiple_block() when we will have DMA.
        !           140:         */
1.2       nbrk      141:        void    *sb_dd;
                    142: };
                    143:
                    144: /*
                    145:  * Functions.
                    146:  */
1.4     ! nbrk      147: uint8_t                sdmmc_init(void *dd);
        !           148: uint8_t        sdmmc_send_command(void *dd, uint8_t cmd, uint32_t arg, uint8_t crc);
        !           149: uint8_t        sdmmc_set_block_size(void *dd, uint16_t size);
        !           150: uint8_t        sdmmc_read_block(void *dd, uint32_t addr, void *buff);
        !           151: uint8_t        sdmmc_write_block(void *dd, uint32_t addr, void *data);
        !           152:
        !           153:
1.2       nbrk      154: struct sdmmc_cmdframe sdmmc_command(uint8_t cmd, uint32_t arg, uint8_t crc);
1.1       nbrk      155:
                    156:
                    157: #endif /* !_DEV_SDMMC_SDMMCVAR_H */
                    158:

CVSweb