fmd.h
上传用户:qiulin1960
上传日期:2013-10-16
资源大小:2844k
文件大小:5k
源码类别:

Windows CE

开发平台:

Windows_Unix

  1. /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2. THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  3. ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  4. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  5. PARTICULAR PURPOSE.
  6. Copyright (c) 2002  Microsoft Corporation
  7. Module Name:    FMD.H
  8. Abstract:       FLASH Media Driver Interface for Windows CE
  9. Notes:          The following module defines the required entry points for
  10.                 creating a new FLASH Media Driver (FMD) for Windows CE.  The
  11.                 FMD is called by the FLASH Abstraction Layer (FAL) and is
  12.                 responsible for directly writing to the underlying FLASH hardware
  13.                 (i.e. NAND/NOR chip).  In turn, the FAL handles all of the necessary
  14.                 wear-leveling of the device.  Practically, this means that the FMD
  15.                 is NEVER asked to read/write an invalid page or block.
  16.                 The FMD is responsible for:
  17.                     * reading from the FLASH media
  18.                     * writing to the FLASH media
  19.                     * erasing FLASH media blocks
  20.                     * performing error correcting-codes (ECC) on data stored on the
  21.                       FLASH media (if necessary)
  22. Environment:    As noted, this media driver works on behalf of the FAL to directly
  23.                 access the underlying FLASH hardware.  Consquently, this module
  24.                 needs to be linked with FAL.LIB to produce the device driver
  25.                 named FLASHDRV.DLL.
  26. -----------------------------------------------------------------------------*/
  27. #ifndef _FMD_H_
  28. #define _FMD_H_
  29. #include <windows.h>
  30. #include <diskio.h>
  31. #include <bldver.h>
  32. #include <pcireg.h>
  33. #if (CE_MAJOR_VER < 0x0004)
  34.     // Specified so that Block drivers can implement their own ioctl's without
  35.     // fear of overlapping with OS defined codes.
  36.     #define IOCTL_DISK_USER_START 0x7E0
  37.     #define IOCTL_DISK_USER_END   0x7FF
  38.     #define IOCTL_DISK_USER(Function) 
  39.         CTL_CODE( IOCTL_DISK_BASE, IOCTL_DISK_USER_START+Function, METHOD_BUFFERED, FILE_ANY_ACCESS)
  40.     #define IOCTL_DISK_DELETE_SECTORS   10              // Deletes the specified range of sectors
  41.     typedef struct _DELETE_SECTOR_INFO {
  42.         DWORD cbSize; // Size of structure
  43.         DWORD startsector;
  44.         DWORD numsectors;
  45.     } DELETE_SECTOR_INFO, *PDELETE_SECTOR_INFO;
  46. #endif
  47. // FMD IOCTL definitions.
  48. //
  49. #define IOCTL_FMD_SET_XIPMODE     IOCTL_DISK_USER(0)
  50. #define IOCTL_FMD_LOCK_BLOCKS     IOCTL_DISK_USER(1)
  51. #define IOCTL_FMD_UNLOCK_BLOCKS     IOCTL_DISK_USER(2)
  52. #define IOCTL_FMD_UPDATEXIP_BEGIN   IOCTL_DISK_USER(3)
  53. #define IOCTL_FMD_UPDATEXIP_END     IOCTL_DISK_USER(4)
  54. // FMD block status definitions.
  55. #define BLOCK_STATUS_UNKNOWN 0x01
  56. #define BLOCK_STATUS_BAD 0x02
  57. #define BLOCK_STATUS_READONLY 0x04
  58. #define BLOCK_STATUS_RESERVED 0x08
  59. // FMD OEM reserved area bitfield.
  60. #define OEM_BLOCK_RESERVED 0x01
  61. #define OEM_BLOCK_READONLY 0x02
  62. #ifdef __cplusplus
  63. extern "C" {
  64. #endif
  65. #define INVALID_BLOCK_ID        0xFFFFFFFF
  66. #define INVALID_SECTOR_ADDR     0xFFFFFFFF
  67. //--------------------------- Structure Definitions -----------------------------
  68. typedef enum  _FLASH_TYPE { NAND, NOR } FLASH_TYPE;
  69. typedef DWORD  SECTOR_ADDR;
  70. typedef PDWORD PSECTOR_ADDR;
  71. typedef DWORD  BLOCK_ID;
  72. typedef PDWORD PBLOCK_ID;
  73. typedef struct _FlashInfo
  74. {
  75.     FLASH_TYPE  flashType;
  76.     DWORD       dwNumBlocks;
  77.     DWORD       dwBytesPerBlock;
  78.     WORD        wSectorsPerBlock;
  79.     WORD        wDataBytesPerSector;
  80. }FlashInfo, *PFlashInfo;
  81. typedef struct _SectorInfo
  82. {
  83.     DWORD dwReserved1;              // Reserved - used by FAL
  84.     BYTE  bOEMReserved;             // For use by OEM
  85.     BYTE  bBadBlock;             // Indicates if block is BAD
  86.     WORD  wReserved2;               // Reserved - used by FAL
  87. }SectorInfo, *PSectorInfo;
  88. typedef struct _BlockLockInfo
  89. {
  90. BLOCK_ID StartBlock;
  91. ULONG    NumBlocks;
  92. }BlockLockInfo, *PBlockLockInfo;
  93. //------------------------------- Public Interface (used by the FAL) ------------------------------
  94. PVOID  FMD_Init(LPCTSTR lpActiveReg, PPCI_REG_INFO pRegIn, PPCI_REG_INFO pRegOut);
  95. BOOL  FMD_Deinit(PVOID);
  96. BOOL  FMD_GetInfo(PFlashInfo pFlashInfo);
  97. DWORD FMD_GetBlockStatus(BLOCK_ID blockID);
  98. BOOL FMD_SetBlockStatus(BLOCK_ID blockID, DWORD dwStatus);
  99. BOOL  FMD_ReadSector (SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors);
  100. BOOL  FMD_WriteSector(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors);
  101. BOOL  FMD_EraseBlock(BLOCK_ID blockID);
  102. VOID  FMD_PowerUp(VOID);
  103. VOID  FMD_PowerDown(VOID);
  104. BOOL  FMD_OEMIoControl(DWORD dwIoControlCode, PBYTE pInBuf, DWORD nInBufSize,
  105.                        PBYTE pOutBuf, DWORD nOutBufSize, PDWORD pBytesReturned);
  106. //---------------------------------------- Helper Functions ----------------------------------------
  107. #ifdef __cplusplus
  108. }
  109. #endif
  110. #endif _FMD_H_