📄 sd.h
字号:
// Copyright (c) David Vescovi. All rights reserved.
// Part of Project DrumStix
// Windows Embedded Developers Interest Group (WE-DIG) community project.
// http://www.we-dig.org
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
//
// Copyright (c) 2002 BSQUARE Corporation. All rights reserved.
// DO NOT REMOVE --- BEGIN EXTERNALLY DEVELOPED SOURCE CODE ID 40973--- DO NOT REMOVE
//
// Module Name:
//
// sd.h
//
// Abstract:
//
// definitions for PXA255 SDIO driver
//
// Notes:
//
///////////////////////////////////////////////////////////////////////////////
#ifndef _SDH_DEFINED
#define _SDH_DEFINED
#include "pxa255.h"
#define SDH_TAG 'SDH'
#define MMC_RXFIFO_SIZE 32
#define MMC_TXFIFO_SIZE 32
typedef enum {
Idle = -1 ,
CommandSend = 1,
CommandComplete = 2,
ResponseWait = 3,
WriteDataTransfer = 4,
WriteDataTransferDone = 5,
ProgramWait = 6,
WriteDataDone = 7,
ReadDataTransfer = 8,
ReadDataTransferDone = 9,
ReadDataDone = 10,
} SDHSTATE;
// PXA255 hardware specific context
typedef struct _SDH_HARDWARE_CONTEXT {
volatile MMC_REG_T *pSDMMCRegisters; // SD/MMC controller registers
volatile DMAC_REG_T *pDMARegisters; // DMA control registers
PSDCARD_HC_CONTEXT pHCContext; // the host controller context
DWORD dwSDMMCIrq; // SD/MMC Controller interrupt IRQ value
DWORD dwSysintrSDMMC; // SD/MMC controller interrupt SYSINTR value
HANDLE hControllerInterruptEvent; // controller interrupt event
HANDLE hControllerInterruptThread; // controller interrupt thread
int ControllerIstThreadPriority; // controller IST thread priority
BOOL DriverShutdown; // controller shutdown
CRITICAL_SECTION ControllerCriticalSection; // controller critical section
BOOL SendInitClocks; // flag to indicate that we need to send the init clock
WCHAR RegPath[256]; // reg path
SDHSTATE CurrentState; // current transfer state
UCHAR RcvBuffer[MMC_RXFIFO_SIZE]; // receive buffer
UCHAR XmitBuffer[MMC_TXFIFO_SIZE]; // xmit buffer
BOOL fSDIOEnabled; // SDIO interrupts enabled
BOOL fSDIOInterruptPending; // indicates that and SDIO interupt has occured
BOOL fClockAlwaysOn; // indicates that MMC clock should always remain ON
BOOL fClockOnIfInterruptsEnabled; // indicates that clock should remain on if SDIO interrupts are enabled
BOOL DevicePresent; // device is present in the slot
}SDH_HARDWARE_CONTEXT, *PSDH_HARDWARE_CONTEXT;
#define SetCurrentState(pHC, d) \
{\
((pHC)->CurrentState = (d)); \
}
#define ACQUIRE_LOCK(pHC) EnterCriticalSection(&(pHC)->ControllerCriticalSection)
#define RELEASE_LOCK(pHC) LeaveCriticalSection(&(pHC)->ControllerCriticalSection)
// prototypes for handlers
BOOLEAN SDHCancelIoHandler(PSDCARD_HC_CONTEXT pHCContext,DWORD Slot, PSD_BUS_REQUEST pRequest);
SD_API_STATUS SDHBusRequestHandler(PSDCARD_HC_CONTEXT pHCContext,DWORD Slot, PSD_BUS_REQUEST pRequest);
SD_API_STATUS SDHSlotOptionHandler(PSDCARD_HC_CONTEXT pHCContext,
DWORD SlotNumber,
SD_SLOT_OPTION_CODE Option,
PVOID pData,
ULONG OptionSize);
// other prototypes
SD_API_STATUS SDDeinitialize(PSDCARD_HC_CONTEXT pHCContext);
SD_API_STATUS SDInitialize(PSDCARD_HC_CONTEXT pHCContext);
#define SDH_INTERRUPT_ZONE SDCARD_ZONE_0
#define SDH_SEND_ZONE SDCARD_ZONE_1
#define SDH_RESPONSE_ZONE SDCARD_ZONE_2
#define SDH_RECEIVE_ZONE SDCARD_ZONE_3
#define SDH_CLOCK_ZONE SDCARD_ZONE_4
#define SDH_TRANSMIT_ZONE SDCARD_ZONE_5
#define SDH_SDBUS_INTERACTION_ZONE SDCARD_ZONE_7
#define SDH_INTERRUPT_ZONE_ON ZONE_ENABLE_0
#define SDH_SEND_ZONE_ON ZONE_ENABLE_1
#define SDH_RESPONSE_ZONE_ON ZONE_ENABLE_2
#define SDH_RECEIVE_ZONE_ON ZONE_ENABLE_3
#define SDH_CLOCK_ZONE_ON ZONE_ENABLE_4
#define SDH_TRANSMIT_ZONE_ON ZONE_ENABLE_5
#define SDH_SDBUS_INTERACTION_ZONE_ON ZONE_ENABLE_7
#define SDH_CARD_CONTROLLER_PRIORITY 100
#define SDH_DEFAULT_RESPONSE_TIMEOUT_CLOCKS 64
#define SDH_DEFAULT_DATA_TIMEOUT_CLOCKS 0xFFFF
#define SDH_RESPONSE_FIFO_DEPTH 8
#define SDH_MAX_BLOCK_SIZE 1023
#define SDH_MIN_BLOCK_SIZE 32
void ProcessCardInsertion(void *pContext);
void ProcessCardRemoval(void *pContext);
BOOL DriverShutdown(void *pContext);
BOOL LoadRegistrySettings( HKEY hKeyDevice, PSDH_HARDWARE_CONTEXT pController );
// platform specific functions
BOOL InitializeHardware();
void UnInitializeHardware();
BOOL LoadPlatformRegistrySettings( HKEY hKeyDevice );
void MMCPowerControl( BOOL fPowerOn );
BOOL IsCardWriteProtected();
BOOL IsCardPresent();
BOOL SetupCardDetectIST(void *pContext);
void CleanupCardDetectIST();
#endif
// DO NOT REMOVE --- END EXTERNALLY DEVELOPED SOURCE CODE ID --- DO NOT REMOVE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -