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

📄 atadisk.h

📁 WinCE下的ATADISK驱动
💻 H
字号:
//
// 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.
//
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name:
    atadisk.h

Abstract:
    This module contains the function prototypes and constant, type,
    global data and structure definitions for the WINCE AT Attachment
    disk driver.

--*/

#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

//
// 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

#define ATADISK_FLAG_TRY8BIT                (1 << 0)
#define ATADISK_FLAG_NO_MODIFIER            (1 << 1)
#define ATADISK_FLAG_MEMORY_MAPPED          (1 << 2)
#define ATADISK_FLAG_SUSPENDED              (1 << 3)

//
// Structure to keep track of a disk
//
typedef struct _DISK {
    struct _DISK * d_next;
    CARD_CLIENT_HANDLE d_hPcmcia;   // PCMCIA client driver handle
    CARD_SOCKET_HANDLE d_hSock;     // socket the disk card is in.
    CARD_WINDOW_HANDLE d_hATAReg;   // Handle to ATA I/O register window
    volatile UCHAR* d_pATAReg;
    CARD_WINDOW_HANDLE d_hATARegAlt;// Handle to ATA alternate reg window
    volatile UCHAR* d_pATARegAlt;
    CRITICAL_SECTION d_DiskCardCrit;// guard access to global state and card
    UCHAR d_DiskStatus;      // ATA status register at interrupt time
    HANDLE d_IRQEvent;
    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
    LPWSTR d_ActivePath;     // Active key registry path
    DWORD  d_Flags;          // Various registry setable flags.
    HANDLE hPwrEvent;
    DWORD  lPwrOff;
} DISK, * PDISK; 

//
// Global Variables
//
extern DWORD v_MemGran;                // memory granularity (usually 1)
extern CRITICAL_SECTION v_DiskCrit;    // 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;


//
// 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 VOID PcmciaIntr(DWORD Context);
extern BOOL IsValidDisk(PDISK pDisk);
extern BOOL ATAInitController(PDISK pDisk);

//
// 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -