⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sd.h

📁 老外的一个开源项目
💻 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 + -