00001
00002
00003
00004
00005
00006
00007
00008
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066 #ifndef _CSL_MMCSD_H_
00067 #define _CSL_MMCSD_H_
00068
00069 #ifdef __cplusplus
00070 extern "C" {
00071 #endif
00072
00073 #include <soc.h>
00074 #include <csl_types.h>
00075 #include <csl_error.h>
00076 #include <csl_dma.h>
00077 #include <tistdtypes.h>
00078
00108
00109
00110
00111
00116 #define CSL_MMCSD_STUFF_BITS (0x0000)
00117
00118 #define CSL_SD_HC_ECHO_PATTERN (0xAAu)
00119
00120 #define CSL_SD_HC_VHS_ECHO (0x100u)
00121
00122 #define CSL_MMCSD_SHIFT_MAX (16)
00123
00124 #define CSL_MMCSD_MASK_MAX (0xFFFF)
00125
00126 #define CSL_MMCSD_ACTIVE (0x0)
00127
00128 #define CSL_MMCSD_RESET (0x1u)
00129
00130 #define CSL_MMCSD_RESET_COUNT (0x20u)
00131
00132 #define CSL_MMCSD_ENABLE (0x1u)
00133
00134 #define CSL_MMCSD_DISABLE (0x0)
00135
00136 #define CSL_MMCSD_ISR_TXMT (0x0)
00137
00138 #define CSL_MMCSD_ISR_RCV (0x1)
00139
00140 #define CSL_MMCSD_DELAY_TIME (100U)
00141
00142 #define CSL_MMCSD_RESPONSE_TIMEOUT (0xFFFF)
00143
00144 #define CSL_MMCSD_DATA_RW_TIMEOUT (0xFFFF)
00145
00146 #define CSL_MMCSD_CLK_DIV_INIT (124)
00147
00148 #define CSL_MMCSD_BUSY_STATE (0x01)
00149
00150 #define CSL_MMCSD_FIFO_EMPTY (0x20)
00151
00152 #define CSL_MMCSD_CMDDAT_RESET (0x03)
00153
00154 #define CSL_SD_CARD_DETECTED (0x0120)
00155
00156 #define CSL_MMC_CARD_DETECTED (0x8000)
00157
00158 #define CSL_MMCSD_RESP_DONE (0x04)
00159
00160 #define CSL_MMCSD_BLOCK_LENGTH (512u)
00161
00162 #define CSL_MMCSD_BLOCK_LEN_MAX (0x0FFFu)
00163
00164 #define CSL_MMCSD_READ_READY (0x0400)
00165
00166 #define CSL_MMCSD_WRITE_READY (0x0200)
00167
00168 #define CSL_MMCSD_DISPATCH_TABLE_SIZE (12U)
00169
00170 #define CSL_MMCSD_NULL (0)
00171
00172 #define CSL_MMCSD_RESP_COUNT (8)
00173
00174 #define CSL_MMC_MAX_CLOCK_RATE (0xFFu)
00175
00176 #define CSL_MMC_CMD8_ARG (0x1AAu)
00177
00178 #define CSL_MMC_CMD1_ARG (0x00ff8000u)
00179
00180 #define CSL_MMC_ACMD41_ARG_HCS (0x40ff8000u)
00181
00182 #define CSL_MMC_ACMD41_ARG_NOHCS (0x00ff8000u)
00183
00184 #define CSL_MMC_BUSWIDTH_4BIT (0x00000002u)
00185
00186 #define CSL_MMC_BUSWIDTH_1BIT (0x00000001u)
00187
00188
00190 #define CSL_MMSCD_ACMD41_RETRY_COUNT (1000u)
00191
00192 #define CSL_MMSCD_CMD1_RETRY_COUNT (1000u)
00193
00194 #define CSL_MMSCD_READ_WRITE_RETRY_COUNT (1000u)
00195
00197 #define CSL_MMCSD_WRITE_INIT_CMD (0x0210)
00198
00199 #define CSL_MMCSD_WRITE_BLOCK_CMD (0x2A18)
00200
00201 #define CSL_MMCSD_READ_BLOCK_CMD (0xA211)
00202
00203 #define CSL_MMCSD_WRITE_MULTIPLE_BLOCK_CMD (0x2A19u)
00204
00205 #define CSL_MMCSD_READ_MULTIPLE_BLOCK_CMD (0xA212)
00206
00207 #define CSL_MMCSD_ALL_SEND_CID_CMD (0x0402)
00208
00209 #define CSL_MMCSD_CARD_INIT0_CMD (0x4000)
00210
00211 #define CSL_MMCSD_SDHC_CARD_INIT_CMD (0x0208)
00212
00213 #define CSL_MMCSD_SD_CARD_INIT_CMD (0x0237)
00214
00215 #define CSL_MMCSD_MMCS_CARD_INIT_CMD (0x0601)
00216
00217 #define CSL_MMCSD_SET_BLKLEN_CMD (0x0210)
00218
00219 #define CSL_MMCSD_STOP_CMD (0x038C)
00220
00221 #define CSL_MMCSD_CMD_0 (0x0000)
00222
00223 #define CSL_MMCSD_CMD_1 (0x0601)
00224
00225 #define CSL_MMCSD_CMD_2 (0x0402)
00226
00227 #define CSL_MMCSD_CMD_3 (0x0203)
00228
00229 #define CSL_MMCSD_CMD_6 (0x0206)
00230
00231 #define CSL_MMCSD_CMD_7 (0x0307)
00232
00233 #define CSL_MMCSD_CMD_8 (0x0208)
00234
00235 #define CSL_MMCSD_CMD_9 (0x0409)
00236
00237 #define CSL_MMCSD_CMD_13 (0x020D)
00238
00239 #define CSL_MMCSD_ACMD_23 (0x0217)
00240
00241 #define CSL_MMCSD_CMD_41 (0x0629)
00242
00243 #define CSL_MMCSD_ACMD_42 (0x022A)
00244
00245 #define CSL_MMCSD_CMD_55 (0x0237)
00246
00247 #define CSL_MMCSD_CMD41_RESP (0x80FF8000u)
00248
00249 #define CSL_MMCSD_CMD1_RESP (0x80FF8000u)
00250
00251 #define CSL_MMCSD_SDHC_RESP (0x40000000u)
00252
00253 #define CSL_MMCSD_CARDCHECK_COUNT (3u)
00254
00258
00259
00260
00261
00270 typedef enum {
00271 CSL_MMCSD0_INST = (0U),
00272 CSL_MMCSD1_INST = (1U),
00273 CSL_MMCSD_INST_INV = (2U)
00274 } CSL_MmcsdInstId;
00275
00282 typedef enum {
00283 CSL_MMCSD_RESPTYPE_NO = 0,
00284 CSL_MMCSD_RESPTYPE_R1 = 1U,
00285 CSL_MMCSD_RESPTYPE_R2 = 2U,
00286 CSL_MMCSD_RESPTYPE_R3 = 3U,
00287 CSL_MMCSD_RESPTYPE_R4 = 4U,
00288 CSL_MMCSD_RESPTYPE_R5 = 5U,
00289 CSL_MMCSD_RESPTYPE_R6 = 6U
00290 } CSL_MmcsdRespType;
00291
00295 typedef enum {
00296 CSL_MMCSD_RESPBUSY_NO = 0,
00297 CSL_MMCSD_RESPBUSY_YES = 1U
00298 } CSL_MmcsdRespBusy;
00299
00305 typedef enum {
00306 CSL_MMCSD_LINECHR_PUSHPULL = 0,
00307 CSL_MMCSD_LINECHR_OPENDRAIN = 1U
00308 } CSL_MmcsdLineChr;
00309
00316 typedef enum {
00317 CSL_MMCSD_CMDTYPE_BC = 0,
00318 CSL_MMCSD_CMDTYPE_BCR = 1U,
00319 CSL_MMCSD_CMDTYPE_AC = 2U,
00320 CSL_MMCSD_CMDTYPE_ADTC = 3U
00321 } CSL_MmcsdCmdType;
00322
00330 typedef enum {
00331 CSL_MMCSD_GO_IDLE_STATE = 0,
00333 CSL_MMCSD_SEND_OP_COND_MMC_CARD = 1U,
00335 CSL_MMCSD_ALL_SEND_CID = 2U,
00337 CSL_MMCSD_RELATIVE_ADDR = 3U,
00341 CSL_MMCSD_SET_DSR = 4U,
00343 CSL_MMCSD_CMD_IDX_RSV_5 = 5U,
00345 CSL_MMCSD_CMD_SWITCH_MMC_CARD = 6U,
00347 CSL_MMCSD_SELECT_DESELECT_CARD = 7U,
00349 CSL_MMCSD_CMD_SEND_IF_COND_EXT_CSD = 8U,
00353 CSL_MMCSD_SEND_CSD = 9U,
00355 CSL_MMCSD_SEND_CID = 10U,
00357 CSL_MMCSD_READ_DAT_UNTIL_STOP_MMC_CARD = 11U,
00359 CSL_MMCSD_STOP_TRANSMISSION = 12U,
00361 CSL_MMCSD_SEND_STATUS = 13U,
00363 CSL_MMCSD_CMD_IDX_RSV_14 = 14U,
00365 CSL_MMCSD_GO_INACTIVE_STATE = 15U,
00367 CSL_MMCSD_SET_BLOCKLEN = 16U,
00369 CSL_MMCSD_READ_SINGLE_BLOCK = 17U,
00371 CSL_MMCSD_READ_MULTIPLE_BLOCK = 18U,
00373 CSL_MMCSD_CMD_IDX_RSV_19 = 19U,
00375 CSL_MMCSD_WRITE_DAT_UNTIL_STOP_MMC_CARD = 20U,
00377 CSL_MMCSD_CMD_IDX_RSV_21 = 21U,
00379 CSL_MMCSD_CMD_IDX_RSV_22 = 22U,
00381 CSL_MMCSD_SET_BLOCK_COUNT_MMC_CARD = 23U,
00385 CSL_MMCSD_WRITE_BLOCK = 24U,
00387 CSL_MMCSD_WRITE_MULTIPLE_BLOCK = 25U,
00389 CSL_MMCSD_PROGRAM_CID_MMC_CARD = 26U,
00391 CSL_MMCSD_PROGRAM_CSD = 27U,
00393 CSL_MMCSD_SET_WRITE_PROT = 28U,
00397 CSL_MMCSD_CLR_WRITE_PROT = 29U,
00401 CSL_MMCSD_SEND_WRITE_PROT = 30U,
00405 CSL_MMCSD_CMD_IDX_RSV_31 = 31U,
00407 CSL_MMCSD_ERASE_WR_BLK_START_SD_CARD = 32U,
00410 CSL_MMCSD_ERASE_WR_BLK_END_SD_CARD = 33U,
00413 CSL_MMCSD_CMD_IDX_RSV_34 = 34U,
00415 CSL_MMCSD_ERASE_GROUP_START_MMC_CARD = 35U,
00418 CSL_MMCSD_ERASE_GROUP_END_MMC_CARD = 36U,
00421 CSL_MMCSD_CMD_IDX_RSV_37 = 37U,
00423 CSL_MMCSD_ERASE = 38U,
00425 CSL_MMCSD_FAST_IO_MMC_CARD = 39U,
00427 CSL_MMCSD_GO_IRQ_STATE_MMC_CARD = 40U,
00429 CSL_MMCSD_CMD_IDX_RSV_41 = 41U,
00431 CSL_MMCSD_LOCK_UNLOCK = 42U,
00433 CSL_MMCSD_CMD_IDX_RSV_43 = 43U,
00435 CSL_MMCSD_CMD_IDX_RSV_44 = 44U,
00437 CSL_MMCSD_CMD_IDX_RSV_45 = 45U,
00439 CSL_MMCSD_CMD_IDX_RSV_46 = 46U,
00441 CSL_MMCSD_CMD_IDX_RSV_47 = 47U,
00443 CSL_MMCSD_CMD_IDX_RSV_48 = 48U,
00445 CSL_MMCSD_CMD_IDX_RSV_49 = 49U,
00447 CSL_MMCSD_CMD_IDX_RSV_50 = 50U,
00449 CSL_MMCSD_CMD_IDX_RSV_51 = 51U,
00451 CSL_MMCSD_CMD_IDX_RSV_52 = 52U,
00453 CSL_MMCSD_CMD_IDX_RSV_53 = 53U,
00455 CSL_MMCSD_CMD_IDX_RSV_54 = 54U,
00457 CSL_MMCSD_APP_CMD = 55U,
00460 CSL_MMCSD_GEN_CMD = 56U,
00464 CSL_MMCSD_CMD_IDX_RSV_57 = 57U,
00466 CSL_MMCSD_CMD_IDX_RSV_58 = 58U,
00468 CSL_MMCSD_CMD_IDX_RSV_59 = 59U,
00470 CSL_MMCSD_CMD_IDX_RSV_60 = 60U,
00472 CSL_MMCSD_CMD_IDX_RSV_61 = 61U,
00474 CSL_MMCSD_CMD_IDX_RSV_62 = 62U,
00476 CSL_MMCSD_CMD_IDX_RSV_63 = 63U
00478 } CSL_MmcsdCmdIndex;
00479
00483 typedef enum {
00484 CSL_MMCSD_DIR_WRITE = 0,
00485 CSL_MMCSD_DIR_READ = 1U,
00486 CSL_MMCSD_DIR_DONTCARE = 2U
00487 } CSL_MmcsdDir;
00488
00492 typedef enum
00493 {
00494 CSL_CARD_NONE = 0,
00495 CSL_SD_CARD = 1U,
00496 CSL_MMC_CARD = 2U
00497 } CSL_CardType;
00498
00503 typedef enum {
00504 CSL_MMCSD_EVENT_TRNDNE = (1U << 12U),
00506 CSL_MMCSD_EVENT_DATED = (1U << 11U),
00508 CSL_MMCSD_EVENT_READ = (1U << 10U),
00510 CSL_MMCSD_EVENT_WRITE = (1U << 9U),
00512 CSL_MMCSD_EVENT_ERROR_CMDCRC = (1U << 7U),
00514 CSL_MMCSD_EVENT_ERROR_DATACRC = ((1U << 6U)|(1U << 5U)),
00516 CSL_MMCSD_EVENT_ERROR_CMDTIMEOUT = ((1U) << (4U)),
00518 CSL_MMCSD_EVENT_ERROR_DATATIMEOUT = ((1U) << (3U)),
00520 CSL_MMCSD_EVENT_EOFCMD = (1U << 2U),
00523 CSL_MMCSD_EVENT_CARD_EXITBUSY = ((1U) << (1U)),
00525 CSL_MMCSD_EVENT_BLOCK_XFERRED = 1U
00527 } CSL_MmcsdEvent;
00528
00533 typedef enum
00534 {
00535 CSL_MMCSD_EDATDNE_INTERRUPT = 1U,
00537 CSL_MMCSD_EBSYDNE_INTERRUPT = (1U << 1U),
00539 CSL_MMCSD_ERSPDNE_INTERRUPT = (1U << 2U),
00541 CSL_MMCSD_ETOUTRD_INTERRUPT = (1U << 3U),
00543 CSL_MMCSD_ETOUTRS_INTERRUPT = (1U << 4U),
00545 CSL_MMCSD_ECRCWR_INTERRUPT = (1U << 5U),
00547 CSL_MMCSD_ECRCRD_INTERRUPT = (1U << 6U),
00549 CSL_MMCSD_ECRCRS_INTERRUPT = (1U << 7U),
00551 CSL_MMCSD_RSV_BIT = (1U << 8U),
00553 CSL_MMCSD_EDXRDY_INTERRUPT = (1U << 9U),
00555 CSL_MMCSD_EDRRDY_INTERRUPT = (1U << 10U),
00557 CSL_MMCSD_EDATED_INTERRUPT = (1U << 11U),
00559 CSL_MMCSD_ETRNDNE_INTERRUPT = (1U << 12U),
00561 CSL_MMCSD_INTERRUPT_NONE = (1U << 13U)
00563 } CSL_MMCSDEventType;
00564
00569 typedef enum
00570 {
00571 CSL_MMCSD_OPMODE_POLLED = 0,
00573 CSL_MMCSD_OPMODE_INTERRUPT = 1U,
00575 CSL_MMCSD_OPMODE_DMA = 2U,
00577 CSL_MMCSD_OPMODE_NONE = 3U
00579 } CSL_MMCSDOpMode;
00580
00586 typedef enum {
00587 CSL_MMCSD_ENDIAN_LITTLE = 0,
00588 CSL_MMCSD_ENDIAN_BIG = 1U
00589 } CSL_MmcsdEndianMode;
00590
00594 #define CSL_MMCSD_EVENT_ERROR (CSL_MMCSD_EVENT_ERROR_CMDCRC | \
00595 CSL_MMCSD_EVENT_ERROR_DATACRC | \
00596 CSL_MMCSD_EVENT_ERROR_CMDTIMEOUT | \
00597 CSL_MMCSD_EVENT_ERROR_DATATIMEOUT)
00598
00602 #define CSL_MMCSD_CMD_TOUT_CRC_ERROR (CSL_MMCSD_EVENT_ERROR_CMDCRC | \
00603 CSL_MMCSD_EVENT_ERROR_CMDTIMEOUT)
00604
00608 #define CSL_MMCSD_DATA_TOUT_CRC_ERROR (CSL_MMCSD_EVENT_ERROR_DATACRC | \
00609 CSL_MMCSD_EVENT_ERROR_DATATIMEOUT)
00610
00623 typedef struct {
00624 Uint16 idx;
00626 CSL_MmcsdRespType respType;
00628 CSL_MmcsdRespBusy busy;
00630 CSL_MmcsdCmdType type;
00632 CSL_MmcsdDir dir;
00634 CSL_MmcsdLineChr lineChr;
00636 } CSL_MmcsdCmd;
00637
00644 typedef struct {
00645 Uint16 response[CSL_MMCSD_RESP_COUNT];
00655 } CSL_MmcsdResponse;
00656
00661 typedef struct {
00662 Uint16 dmaEnable;
00664 Uint16 dat3EdgeDetection;
00666 Uint16 enableClkPin;
00668 Uint16 cdiv;
00670 Uint16 rspTimeout;
00672 Uint16 dataTimeout;
00674 Uint16 blockLen;
00676 } CSL_MMCSetupNative;
00677
00682 typedef struct {
00683 Uint16 mmcctl;
00684 Uint16 mmcclk;
00685 Uint16 mmcim;
00686 Uint16 mmctor;
00687 Uint16 mmctod;
00688 Uint16 mmcblen;
00689 Uint16 mmcnblk;
00690 } CSL_MMCConfig;
00691
00696 typedef struct
00697 {
00698 Uint16 slice127_112;
00699 Uint16 slice111_96;
00700 Uint16 slice95_80;
00701 Uint16 slice79_64;
00702 Uint16 slice63_48;
00703 Uint16 slice47_32;
00704 Uint16 slice31_16;
00705 Uint16 slice15_0;
00706 } CSL_MMCSDCidStruct;
00707
00712 typedef struct {
00713 Uint16 mfgId;
00714 Uint16 oemAppId;
00715 Uint8 productName[6];
00716 Uint16 productRev;
00717 Uint32 serialNumber;
00718 Uint16 month;
00719 Uint16 year;
00721 Uint16 checksum;
00722 } CSL_MMCCardIdObj;
00723
00728 typedef struct
00729 {
00730 Uint16 slice127_112;
00731 Uint16 slice111_96;
00732 Uint16 slice95_80;
00733 Uint16 slice79_64;
00734 Uint16 slice63_48;
00735 Uint16 slice47_32;
00736 Uint16 slice31_16;
00737 Uint16 slice15_0;
00738 } CSL_MMCSDCsdStruct;
00739
00744 typedef struct {
00745 Uint16 csdStruct;
00746 Uint16 mmcProt;
00747 Uint16 taac;
00748 Uint16 nsac;
00749 Uint16 tranSpeed;
00750 Uint16 ccc;
00751 Uint16 readBlLen;
00752 Uint16 readBlPartial;
00753 Uint16 writeBlkMisalign;
00754 Uint16 readBlkMisalign;
00755 Uint16 dsrImp;
00756 Uint16 cSize;
00757 Uint16 vddRCurrMin;
00758 Uint16 vddRCurrMax;
00759 Uint16 vddWCurrMin;
00760 Uint16 vddWCurrMax;
00761 Uint16 cSizeMult;
00762 Uint16 eraseBlkEnable;
00763 Uint16 eraseGrpSize;
00764 Uint16 eraseGrpMult;
00765 Uint16 wpGrpSize;
00766 Uint16 wpGrpEnable;
00767 Uint16 defaultEcc;
00768 Uint16 r2wFactor;
00769 Uint16 writeBlLen;
00770 Uint16 writeBlPartial;
00771 Uint16 contProtApp;
00772 Uint16 fileFmtGrp;
00773 Uint16 copyFlag;
00774 Uint16 permWriteProtect;
00775 Uint16 tmpWriteProtect;
00776 Uint16 fileFmt;
00777 Uint16 ecc;
00778 Uint16 crc;
00779 } CSL_MMCCardCsdObj;
00780
00785 typedef struct {
00786 Uint16 securitySysId;
00787 Uint16 securitySysVers;
00788 Uint16 maxLicenses;
00789 Uint32 xStatus;
00790 } CSL_MMCCardXCsdObj;
00791
00796 typedef struct {
00797 Uint16 rca;
00800 Uint16 ST0;
00802 Uint16 ST1;
00804 Uint16 cardIndex;
00806 Uint32 maxXfrRate;
00808 Uint32 readAccessTime;
00810 Uint32 cardCapacity;
00816 Uint32 blockLength;
00818 Uint32 totalSectors;
00820 Uint32 lastAddrRead;
00822 Uint32 lastAddrWritten;
00824 CSL_CardType cardType;
00826 CSL_MMCCardIdObj *cid;
00828 CSL_MMCCardCsdObj *csd;
00830 CSL_MMCCardXCsdObj *xcsd;
00832 Bool sdHcDetected;
00834 Bool cardAtaFsOpen;
00836 Uint16 cardMscStatus;
00838 } CSL_MMCCardObj;
00839
00844 typedef void (* CSL_MMCCallBackPtr)(void);
00845
00853 typedef void (*CSL_MMCDataTxferCallBackPtr)(void *mmcsdHandle);
00854
00859 typedef struct {
00860 CSL_MMCCallBackPtr isr[CSL_MMCSD_DISPATCH_TABLE_SIZE];
00862 } CSL_MMCCallBackObj;
00863
00869 typedef struct
00870 {
00871 Bool pingPongEnable;
00878 CSL_DMAAutoReloadMode autoMode;
00879 CSL_DMATxBurstLen burstLen;
00880 CSL_DMAInterruptState dmaInt;
00881 CSL_DMAChanDir chanDir;
00882 } CSL_MmcsdDmaConfig;
00883
00888 typedef struct {
00889 CSL_MmcsdRegsOvly mmcRegs;
00891 CSL_MMCCardObj *cardObj;
00893 Uint16 numCardsActive;
00895 CSL_MMCCallBackObj *callBackTbl;
00897 CSL_MMCSDOpMode opMode;
00899 CSL_DMA_Handle hDmaWrite;
00901 CSL_DMA_Handle hDmaRead;
00903 CSL_DMA_Config dmaWriteCfg;
00905 CSL_DMA_Config dmaReadCfg;
00907 CSL_MMCDataTxferCallBackPtr dataTransferCallback;
00909 Bool isCallbackSet;
00911 CSL_MMCSDCidStruct cidSliceInfo;
00913 CSL_MMCSDCsdStruct csdSliceInfo;
00915 CSL_MmcsdEndianMode readEndianMode;
00917 CSL_MmcsdEndianMode writeEndianMode;
00919 Uint16 blockLen;
00921 } CSL_MMCControllerObj;
00922
00927 typedef CSL_MMCControllerObj *CSL_MmcsdHandle;
00928
00932
00933
00934
00975 CSL_Status MMC_init(void);
00976
01030 CSL_MmcsdHandle MMC_open(CSL_MMCControllerObj *pMmcsdContObj,
01031 CSL_MmcsdInstId instId,
01032 CSL_MMCSDOpMode opMode,
01033 CSL_Status *status);
01034
01075 CSL_Status MMC_close(CSL_MmcsdHandle hMmcsd);
01076
01115 CSL_Status MMC_setCardType(CSL_MMCCardObj *pCardObj,
01116 CSL_CardType cardType);
01117
01162 CSL_Status MMC_setCardPtr(CSL_MmcsdHandle hMmcsd,
01163 CSL_MMCCardObj *pMmcCardObj);
01164
01217 CSL_Status MMC_setCallBack(CSL_MmcsdHandle hMmcsd,
01218 CSL_MMCCallBackObj *pFunction);
01219
01263 CSL_Status MMC_getNumberOfCards(CSL_MmcsdHandle hMmcsd,
01264 Uint16 *pActiveNoCard);
01265
01306 CSL_Status MMC_clearResponse(CSL_MmcsdHandle hMmcsd);
01307
01360 CSL_Status MMC_intEnable(CSL_MmcsdHandle hMmcsd,
01361 Uint16 maskValue);
01362
01411 CSL_Status MMC_eventEnable(CSL_MmcsdHandle hMmcsd,
01412 CSL_MMCSDEventType mmcsdEvent);
01413
01460 CSL_Status MMC_eventDisable(CSL_MmcsdHandle hMmcsd,
01461 CSL_MMCSDEventType mmcsdEvent);
01462
01507 Bool MMC_drrdy(CSL_MmcsdHandle hMmcsd,
01508 CSL_Status *pStatus);
01509
01554 Bool MMC_dxrdy(CSL_MmcsdHandle hMmcsd,
01555 CSL_Status *pStatus);
01556
01599 CSL_Status MMC_saveStatus(CSL_MmcsdHandle hMmcsd);
01600
01650 Uint32 MMC_getStatus(CSL_MmcsdHandle hMmcsd,
01651 Uint32 maskValue,
01652 CSL_Status *pStatus);
01653
01705 CSL_Status MMC_setupNative(CSL_MmcsdHandle hMmcsd,
01706 CSL_MMCSetupNative *pMmcInit);
01707
01761 CSL_Status MMC_config(CSL_MmcsdHandle hMmcsd,
01762 CSL_MMCConfig *pMmcConfig);
01763
01808 CSL_Status MMC_getConfig(CSL_MmcsdHandle hMmcsd,
01809 CSL_MMCConfig *pMmcConfig);
01810
01870 CSL_Status MMC_sendCmd(CSL_MmcsdHandle hMmcsd,
01871 Uint32 cmd,
01872 Uint32 arg,
01873 Uint16 waitForRsp);
01874
01916 CSL_Status MMC_sendGoIdle(CSL_MmcsdHandle hMmcsd);
01917
01966 CSL_Status MMC_stop(CSL_MmcsdHandle hMmcsd);
01967
02015 CSL_Status MMC_deselectCard(CSL_MmcsdHandle hMmcsd,
02016 CSL_MMCCardObj *pMmcCardObj);
02017
02069 CSL_Status MMC_selectCard(CSL_MmcsdHandle hMmcsd,
02070 CSL_MMCCardObj *pMmcCardObj);
02071
02124 CSL_Status MMC_sendOpCond(CSL_MmcsdHandle hMmcsd,
02125 Uint16 clkDivValue);
02126
02195 CSL_Status MMC_setRca(CSL_MmcsdHandle hMmcsd,
02196 CSL_MMCCardObj *pMmcCardObj,
02197 Uint16 rCardAddr);
02198
02267 CSL_Status SD_sendRca(CSL_MmcsdHandle hMmcsd,
02268 CSL_MMCCardObj *pSdCardObj,
02269 Uint16 *pRCardAddr);
02270
02332 CSL_Status MMC_sendAllCID(CSL_MmcsdHandle hMmcsd,
02333 CSL_MMCCardIdObj *pMmcCardIdObj);
02334
02397 CSL_Status SD_sendAllCID(CSL_MmcsdHandle hMmcsd,
02398 CSL_MMCCardIdObj *pSdCardIdObj);
02399
02468 CSL_Status MMC_getCardCsd(CSL_MmcsdHandle hMmcsd,
02469 CSL_MMCCardCsdObj *pMmcCardCsdObj);
02470
02535 CSL_Status SD_getCardCsd(CSL_MmcsdHandle hMmcsd,
02536 CSL_MMCCardCsdObj *pSdCardCsdObj);
02537
02645 CSL_Status MMC_read(CSL_MmcsdHandle hMmcsd,
02646 Uint32 cardAddr,
02647 Uint16 noOfBytes,
02648 Uint16 *pReadBuffer);
02649
02758 CSL_Status MMC_write(CSL_MmcsdHandle hMmcsd,
02759 Uint32 cardAddr,
02760 Uint16 noOfBytes,
02761 Uint16 *pWriteBuffer);
02762
02825 CSL_Status MMC_setDmaHandle (CSL_MmcsdHandle hMmcsd,
02826 CSL_DMA_Handle hDmaWrite,
02827 CSL_DMA_Handle hDmaRead);
02828
02898 CSL_Status MMC_setDataTransferCallback(CSL_MmcsdHandle hMmcsd,
02899 CSL_MMCDataTxferCallBackPtr dataTransferCallback);
02900
02983 CSL_Status MMC_setDmaChanConfig (CSL_MmcsdHandle hMmcsd,
02984 CSL_MmcsdDmaConfig dmaConfig);
02985
03038 CSL_Status MMC_setEndianMode (CSL_MmcsdHandle hMmcsd,
03039 CSL_MmcsdEndianMode writeEndianMode,
03040 CSL_MmcsdEndianMode readEndianMode);
03041
03098 CSL_Status MMC_setBlockLength (CSL_MmcsdHandle hMmcsd,
03099 Uint32 blockLen);
03100
03150 CSL_Status MMC_setWriteBlkEraseCnt(CSL_MmcsdHandle hMmcsd,
03151 Uint32 blkCnt);
03152
03203 CSL_Status SD_setBusWidth(CSL_MmcsdHandle hMmcsd,
03204 Uint8 busWidth);
03205
03256 CSL_Status MMC_getCardStatus(CSL_MmcsdHandle hMmcsd,
03257 Uint32 *pCardStatus);
03258
03314 CSL_Status SD_configurePullup(CSL_MmcsdHandle hMmcsd,
03315 Bool pullupCfg);
03316
03320
03321
03322
03368 static inline
03369 CSL_MMCSDEventType MMC_getEventId(
03370 CSL_MmcsdHandle hMmcsd)
03371 {
03372
03373 if(hMmcsd->mmcRegs->MMCST0 & CSL_MMCSD_MMCST0_DATDNE_MASK)
03374 return CSL_MMCSD_EDATDNE_INTERRUPT;
03375 if(hMmcsd->mmcRegs->MMCST0 & CSL_MMCSD_MMCST0_BSYDNE_MASK)
03376 return CSL_MMCSD_EBSYDNE_INTERRUPT;
03377 if(hMmcsd->mmcRegs->MMCST0 & CSL_MMCSD_MMCST0_RSPDNE_MASK)
03378 return CSL_MMCSD_ERSPDNE_INTERRUPT;
03379 if(hMmcsd->mmcRegs->MMCST0 & CSL_MMCSD_MMCST0_TOUTRD_MASK)
03380 return CSL_MMCSD_ETOUTRD_INTERRUPT;
03381 if(hMmcsd->mmcRegs->MMCST0 & CSL_MMCSD_MMCST0_TOUTRS_MASK)
03382 return CSL_MMCSD_ETOUTRS_INTERRUPT;
03383 if(hMmcsd->mmcRegs->MMCST0 & CSL_MMCSD_MMCST0_CRCWR_MASK)
03384 return CSL_MMCSD_ECRCWR_INTERRUPT;
03385 if(hMmcsd->mmcRegs->MMCST0 & CSL_MMCSD_MMCST0_CRCRD_MASK)
03386 return CSL_MMCSD_ECRCRD_INTERRUPT;
03387 if(hMmcsd->mmcRegs->MMCST0 & CSL_MMCSD_MMCST0_CRCRS_MASK)
03388 return CSL_MMCSD_ECRCRS_INTERRUPT;
03389 if(hMmcsd->mmcRegs->MMCST0 & CSL_MMCSD_MMCST0_DXRDY_MASK)
03390 return CSL_MMCSD_EDXRDY_INTERRUPT;
03391 if(hMmcsd->mmcRegs->MMCST0 & CSL_MMCSD_MMCST0_DRRDY_MASK)
03392 return CSL_MMCSD_EDRRDY_INTERRUPT;
03393 if(hMmcsd->mmcRegs->MMCST0 & CSL_MMCSD_MMCST0_DATED_MASK)
03394 return CSL_MMCSD_EDATED_INTERRUPT;
03395 if(hMmcsd->mmcRegs->MMCST0 & CSL_MMCSD_MMCST0_TRNDNE_MASK)
03396 return CSL_MMCSD_ETRNDNE_INTERRUPT;
03397
03398 return CSL_MMCSD_INTERRUPT_NONE;
03399 }
03403 #ifdef __cplusplus
03404 }
03405 #endif
03406 #endif
03407