Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

259 lines
6.4 KiB

/*++
Copyright (c) 2002 Microsoft Corporation
Module Name:
sdcard.h
Abstract:
This is the include file that defines all constants and types for
interfacing to the SD bus driver.
// @@BEGIN_DDKSPLIT
Author:
Neil Sandlin
Revision History:
// @@END_DDKSPLIT
--*/
#ifndef _SDCARDH_
#define _SDCARDH_
#define SDCMD_GO_IDLE_STATE 0x00 // 0
#define SDCMD_ALL_SEND_CID 0x02 // 2
#define SDCMD_SEND_RELATIVE_ADDR 0x03 // 3
#define SDCMD_SET_DSR 0x04 // 4
#define SDCMD_IO_SEND_OP_COND 0x05 // 5
#define SDCMD_SELECT_CARD 0x07 // 7
#define SDCMD_SEND_CSD 0x09 // 9
#define SDCMD_SEND_CID 0x0A // 10
#define SDCMD_STOP_TRANSMISSION 0x0C // 12
#define SDCMD_SEND_STATUS 0x0D // 13
#define SDCMD_GO_INACTIVE_STATE 0x0F // 15
#define SDCMD_SET_BLOCKLEN 0x10 // 16
#define SDCMD_READ_BLOCK 0x11 // 17
#define SDCMD_READ_MULTIPLE_BLOCK 0x12 // 18
#define SDCMD_WRITE_BLOCK 0x18 // 24
#define SDCMD_WRITE_MULTIPLE_BLOCK 0x19 // 25
#define SDCMD_PROGRAM_CSD 0x1B // 27
#define SDCMD_SET_WRITE_PROT 0x1C // 28
#define SDCMD_CLR_WRITE_PROT 0x1D // 29
#define SDCMD_SEND_WRITE_PROT 0x1E // 30
#define SDCMD_ERASE_WR_BLK_START 0x20 // 32
#define SDCMD_ERASE_WR_BLK_END 0x21 // 33
#define SDCMD_ERASE 0x26 // 38
#define SDCMD_LOCK_UNLOCK 0x2A // 42
#define SDCMD_IO_RW_DIRECT 0x34 // 52
#define SDCMD_IO_RW_EXTENDED 0x35 // 53
#define SDCMD_APP_CMD 0x37 // 55
#define SDCMD_GEN_CMD 0x38 // 56
#define MAX_SD_CMD 0x38+1
//
// Response values used by the bus driver
//
#define SDCMD_RESP_NONE 0
#define SDCMD_RESP_1 1
#define SDCMD_RESP_1B 0x1B
#define SDCMD_RESP_2 2
#define SDCMD_RESP_3 3
#define SDCMD_RESP_4 4
#define SDCMD_RESP_5 5
#define SDCMD_RESP_5B 0x5B
#define SDCMD_RESP_6 6
//
// Flag values for SD send cmd
//
#define SDCMDF_ACMD 0x0001
#define SDCMDF_DATA 0x0002
#define SDCMDF_READ 0x0004
#define SDCMDF_WRITE 0x0008
#define SDCMDF_MULTIBLOCK 0x0010
//
// Application specific commands for Memory
//
#define SDCMD_SET_BUS_WIDTH 0x06 // 6
#define SDCMD_SD_STATUS 0x0D // 13
#define SDCMD_SEND_NUM_WR_BLOCKS 0x16 // 22
#define SDCMD_SET_WR_BLK_ERASE_COUNT 0x17 // 23
#define SDCMD_SD_APP_OP_COND 0x29 // 41
#define SDCMD_SET_CLR_CARD_DETECT 0x2A // 42
#define SDCMD_SEND_SCR 0x33 // 51
#define MAX_SD_ACMD 0x38+1
//
// SD Card Registers
//
typedef struct _SD_OCR {
union {
struct {
ULONG Reserved1:4;
ULONG VddVoltage:20;
ULONG Reserved2:7;
ULONG PowerUpBusy:1;
} bits;
ULONG AsULONG;
} u;
} SD_OCR, *PSD_OCR;
#pragma pack(1)
typedef struct _SD_CID {
struct {
UCHAR ManufactureMonth:4;
UCHAR ManufactureYearLow:4;
} a;
struct {
UCHAR ManufactureYearHigh:4;
UCHAR reserved:4;
} b;
ULONG SerialNumber;
UCHAR Revision;
UCHAR ProductName[5];
USHORT OemId;
UCHAR ManufacturerId;
} SD_CID, *PSD_CID;
typedef struct _SD_CSD {
struct {
UCHAR reserved:2;
UCHAR FileFormat:2;
UCHAR TempWriteProtect:1;
UCHAR PermWriteProtect:1;
UCHAR CopyFlag:1;
UCHAR FileFormatGroup:1;
} e;
struct {
USHORT reserved:5;
USHORT PartialBlocksWrite:1;
USHORT MaxWriteDataBlockLength:4;
USHORT WriteSpeedFactor:3;
USHORT reserved2:2;
USHORT WriteProtectGroupEnable:1;
} d;
struct {
ULONG WriteProtectGroupSize:7;
ULONG EraseSectorSize:7;
ULONG EraseSingleBlockEnable:1;
ULONG DeviceSizeMultiplier:3;
ULONG WriteCurrentVddMax:3;
ULONG WriteCurrentVddMin:3;
ULONG ReadCurrentVddMax:3;
ULONG ReadCurrentVddMin:3;
ULONG DeviceSizeLow:2;
} c;
struct {
ULONG DeviceSizeHigh:10;
ULONG reserved:2;
ULONG DsrImplemented:1;
ULONG ReadBlockMisalignment:1;
ULONG WriteBlockMisalignment:1;
ULONG PartialBlocksRead:1;
ULONG MaxReadDataBlockLength:4;
ULONG CardCommandClasses:12;
} b;
UCHAR MaxDataTransferRate;
UCHAR DataReadAccessTime2;
UCHAR DataReadAccessTime1;
struct {
UCHAR reserved:6;
UCHAR Version:2;
} a;
} SD_CSD, *PSD_CSD;
typedef struct _SD_RW_DIRECT_ARGUMENT {
union {
struct {
ULONG Data:8;
ULONG Reserved1:1;
ULONG Address:17;
ULONG Reserved2:1;
ULONG ReadAfterWrite:1;
ULONG Function:3;
ULONG WriteToDevice:1;
} bits;
ULONG AsULONG;
} u;
} SD_RW_DIRECT_ARGUMENT, *PSD_RW_DIRECT_ARGUMENT;
typedef struct _SD_RW_EXTENDED_ARGUMENT {
union {
struct {
ULONG Count:9;
ULONG Address:17;
ULONG OpCode:1;
ULONG BlockMode:1;
ULONG Function:3;
ULONG WriteToDevice:1;
} bits;
ULONG AsULONG;
} u;
} SD_RW_EXTENDED_ARGUMENT, *PSD_RW_EXTENDED_ARGUMENT;
#pragma pack()
//
// SDIO definitions
//
//
// SDIO CCCR layout by offset
//
#define SD_CCCR_REVISION 0
#define SD_CCCR_SPEC_REVISION 1
#define SD_CCCR_IO_ENABLE 2
#define SD_CCCR_IO_READY 3
#define SD_CCCR_INT_ENABLE 4
#define SD_CCCR_INT_PENDING 5
#define SD_CCCR_IO_ABORT 6
#define SD_CCCR_BUS_CONTROL 7
#define SD_CCCR_CAPABILITIES 8
#define SD_CCCR_CIS_POINTER 9
#define SD_CCCR_BUS_SUSPEND 0x0C
#define SD_CCCR_FUNC_SELECT 0x0D
#define SD_CCCR_EXEC_FLAGS 0x0E
#define SD_CCCR_READY_FLAGS 0x0F
#define SD_CCCR_FN0_BLOCK_SIZE 0x10
#endif