atapidev.h

来自「WinCE 3.0 BSP, 包含Inter SA1110, Intel_815」· C头文件 代码 · 共 302 行

H
302
字号
/*
  Copyright(c) 1998,1999 SIC/Hitachi,Ltd.

	Module Name:

		atapidev.h

	Revision History:

		4th August 1999		Released

*/
#include "windows.h"
#include "sh4.h"
#include "cc.h"
#include "platform.h"

#ifndef _ATADISK_H_
#define _ATADISK_H_

#ifdef __cplusplus
extern "C" {
#endif

#define DISK_IO_TIME_OUT 10000
#define REQUEST_TIME_OUT 30000
#define BYTES_PER_SECTOR 512

//
// Device states - To guard against races during trasitions to and from
// standby mode, a disk starts in the STATE_INITING state.  Upon entering
// standby mode, a disk goes into the STATE_DEAD state and can no longer
// be used.  Coming out of standby mode, the pcmcia system will force a card
// removal and this driver will get unloaded.  Between the time the device has
// left standby mode and the card removal notice gets generated, the disk 
// should not be used at all, since as the driver is unloading it unmaps the
// ATA registers in pcmcia I/O space.
//
#define STATE_INITING 1
#define STATE_CLOSED  2
#define STATE_OPENED  3
#define STATE_DEAD    4    // Power down
#define STATE_REMOVED 5    // Power down

//
// When we're resetting the controller, we have to go through some states
// as various operations finish (that is, interrupt).  Here's the states
// in order.
//
#define RESET_NOT_RESETTING                 0
#define RESET_FIRST_DRIVE_SET               1
#define RESET_FIRST_DRIVE_RECALIBRATED      2
#define RESET_SECOND_DRIVE_SET              3
#define RESET_SECOND_DRIVE_RECALIBRATED     4

//
// DISK_INFO.di_flags bit definitions
//
#define DISK_INFO_FLAG_CDROM         0x00000010			// device type has/CD-ROM medium exist

// ATAPI commands set - When we control ATAPI devices, we use these commands.
//
#define ATPCOM_SOFTRESET					0x08		// SoftReset
#define ATPCOM_ATAPIPAKET					0xa0		// ATAPIPaket
#define ATPCOM_IDENTFYDEVICE				0xa1		// Identfy Paket Device
#define ATPCOM_SETFEATURE					0xef		// SetFeature
#define ATPCOM_READCAPACITY					0x25		// READ CD-ROM CAPACITY Command
#define ATPCOM_SEEK							0x2b		// SEEK Command


//
// ATAPI packet commands set for CD-ROM
//
#define ATAPI_TESTUNITREADY							0x0000
#define ATAPI_REQUESTSENSE							0x0003
#define ATAPI_READG12								0x00a8
#define ATAPI_STARTSTOPUNIT							0x001b
#define ATAPI_SETCDROMSPEED							0x00bb
#define ATAPI_MODESENSE								0x005a
#define ATAPI_SEEK									0x002b

//
// ATAPI commands set a constant.
//
#define ATAPI_DEVICESELECT					0xa0		// Device Select  (DRIVE 0 master)
#define ATAPI_SLEEP							0x64		// SLEEP TIME 100
//
// ATAPI process status 
//
#define ATAPI_ATAPROC						0x01		// ATAPI ATA command send 
#define ATAPI_READPROC						0x02		// ATAPI READ process 
#define ATAPI_ENDPROC						0x03		// CD-ROM DATA read finished
#define ATAPI_CAPPROC						0x04		// CD-ROM CAPACTY DATA read 

//
// ATAPI register mask.
//
#define ATPMASK_BUSY						0x80		// STATUS REGISTER BSYbit
#define ATPMASK_BUSYDREQ					0x88		// STATUS REGISTER BSY,DREQbit
#define ATPMASK_BUSYDRDY					0xc0		// STATUS REGISTER BSY,DRDYbit
#define ATPMASK_CHEK						0x01		// STATUS REGISTER CHEKbit
#define ATPMASK_DREQ						0x08		// STATUS REGISTER DREQbit
#define ATPMASK_IRRN						0x03		// INTERRUPT REASON REGISTER DATA END select

//
// These defines must match the ATAPI_* defines
//
#define ATAPI_ERROR      1
#define ATAPI_WARNING    2
#define ATAPI_FUNCTION   4
#define ATAPI_INIT       8
#define ATAPI_IO         16
#define ATAPI_IST        32

//
// INTERRUPPUT REQUEST REGISTER
//
/*****************************************************************************
 * Modification for Aspen by Maneesh Gupta
 *
 * Base address of Interrupt registers is changed.
 ****************************************************************************/ 
#if (SH_PLATFORM==PLATFORM_ASPEN)
		
#	define ATAPI_INTSIZE     0x1000
#	define ATAPI_INTADDRESS    0xa4040000
		
#elif (SH_PLATFORM==PLATFORM_BIGSUR)

#	define ATAPI_INTSIZE     0x1000
#	define ATAPI_INTADDRESS    0xB1FDF000
#endif

/*****************************************************************************
 * End of Modification for Aspen by Maneesh Gupta
 ****************************************************************************/ 
//
// Structure to keep track of a disk
//
typedef struct _DISK {
    struct _DISK * d_next;
    volatile PUCHAR d_pATAReg;
    volatile PUCHAR d_pATARegAlt;
    CRITICAL_SECTION d_DiskCardCrit;// guard access to global state and card
    DWORD d_DiskCardState;
    UCHAR d_DiskStatus;      // ATA status register at interrupt time
    HANDLE d_ReadEvent;
    DISK_INFO d_DiskInfo;    // for DISK_IOCTL_GET/SETINFOs
    BOOL  d_fLBAMode;        // TRUE => logical block addressing supported
    BOOL  d_f16Bit;
    DWORD d_OpenCount;       // open ref count
    PUSHORT d_AlignBuf;      // 16 bit aligned sector buffer
    LPWSTR d_ActivePath;     // Active key registry path
} DISK, * PDISK; 

//
// Structure to CD-ROM read parameter
//
typedef	 struct	_CD_REQ{
	DWORD	MSF_min;
	DWORD	MSF_sec;
	DWORD	MSF_frame;
	DWORD	length;
	DWORD	reserved;
} CD_REQ, *PCD_REQ;

typedef	 struct	{
	DWORD	count;
	USHORT	loop;
	USHORT	flag;
	USHORT	err;
	USHORT	intrsn;
} CDROM_STATE;
		
struct BustDataS{
	USHORT	d0;
	USHORT	d1;
	USHORT	d2;
	USHORT	d3;
	USHORT	d4;
	USHORT	d5;
	USHORT	d6;
	USHORT	d7;
	USHORT	d8;
	USHORT	d9;
	USHORT	da;
	USHORT	db;
	USHORT	dc;
	USHORT	dd;
	USHORT	de;
	USHORT	df;
};

union LongShort{
	DWORD	lword;
	struct{
		USHORT	low;
		USHORT	hi;
	} word;
};

union CharShort{
	USHORT	word;
	struct{
		CHAR	low;
		CHAR	hi;
	} byte;
};

//
// Global Variables
//
extern DWORD v_MemGran;                // memory granularity (usually 1)
extern CRITICAL_SECTION v_ATAPICrit;    // guard access to disk structure list
extern PDISK v_DiskList;

extern REGISTERCLIENT      v_pfnCardRegisterClient;
extern DEREGISTERCLIENT    v_pfnCardDeregisterClient;
extern GETFIRSTTUPLE       v_pfnCardGetFirstTuple;
extern GETNEXTTUPLE        v_pfnCardGetNextTuple;
extern GETTUPLEDATA        v_pfnCardGetTupleData;
extern GETPARSEDTUPLE      v_pfnCardGetParsedTuple;
extern REQUESTWINDOW       v_pfnCardRequestWindow;
extern RELEASEWINDOW       v_pfnCardReleaseWindow;
extern MAPWINDOW           v_pfnCardMapWindow;
extern REQUESTCONFIG       v_pfnCardRequestConfiguration;
extern RELEASECONFIG       v_pfnCardReleaseConfiguration;
extern REQUESTIRQ          v_pfnCardRequestIRQ;
extern RELEASEIRQ          v_pfnCardReleaseIRQ;
extern REQUESTSOCKETMASK   v_pfnCardRequestSocketMask;
extern RELEASESOCKETMASK   v_pfnCardReleaseSocketMask;
extern GETSTATUS           v_pfnCardGetStatus;

extern CDROM_STATE CD_ROM_STA;

volatile	PWORD	ATAPI_DATW;
volatile	PBYTE	ATAPI_AERR;
volatile	PBYTE	ATAPI_IRRN;
volatile	PBYTE	ATAPI_RSVE;
volatile	PBYTE	ATAPI_BCTL;
volatile	PBYTE	ATAPI_BCTH;
volatile	PBYTE	ATAPI_DSEL;
volatile	PBYTE	ATAPI_STAT;
volatile	PBYTE	ATAPI_ASTA;
volatile	PBYTE	ATAPI_COMD;
volatile	PBYTE	ATAPI_FETR;
volatile	PBYTE	ATAPI_DCTR;
volatile	PWORD	ATAPI_WORK;

#if (SH_PLATFORM == PLATFORM_ASPEN)

volatile	PWORD	ATAPI_INT;
volatile	PWORD	ATAPI_INTM;
#elif (SH_PLATFORM == PLATFORM_BIGSUR)

volatile	PBYTE	ATAPI_INT;
volatile	PBYTE	ATAPI_INTM;
#endif

USHORT  Kdata[512];		//Error Code write area
WORD	ATAPI_errcode;
WORD	SenseKey;
WORD	SenseCode;

//
// Global functions
//
extern VOID  CloseDisk(PDISK pDisk);
extern DWORD DoDiskIO(PDISK pDisk, DWORD Opcode, PSG_REQ pSG);
extern DWORD GetDiskInfo(PDISK pDisk, PDISK_INFO pInfo);
extern DWORD SetDiskInfo(PDISK pDisk, PDISK_INFO pInfo);
extern DWORD InitDisk(PDISK pDisk, LPTSTR ActiveKey);
extern BOOL IsValidDisk(PDISK pDisk);
extern DWORD GetDiskStateError(DWORD DiskState);
extern	WORD GetATAPError(void);
//
// Macros
//
#define IOREG(pDisk, RegName) (pDisk->d_pATAReg[RegName])
#define ALT_REG(pDisk, RegName) (pDisk->d_pATARegAlt[RegName])


#ifdef DEBUG
//
// Debug zones
//
#define ZONE_ERROR      DEBUGZONE(0)
#define ZONE_WARNING    DEBUGZONE(1)
#define ZONE_FUNCTION   DEBUGZONE(2)
#define ZONE_INIT       DEBUGZONE(3)
#define ZONE_PCMCIA     DEBUGZONE(4)
#define ZONE_IO         DEBUGZONE(5)

#endif  // DEBUG

#ifdef __cplusplus
}
#endif

#endif // _ATADISK_H_

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?