haldma.h

来自「一个类似windows」· C头文件 代码 · 共 384 行

H
384
字号
#ifndef HALDMA_H#define HALDMA_H/* * DMA Page Register Structure   * 080     DMA        RESERVED * 081     DMA        Page Register (channel 2) * 082     DMA        Page Register (channel 3) * 083     DMA        Page Register (channel 1) * 084     DMA        RESERVED * 085     DMA        RESERVED * 086     DMA        RESERVED * 087     DMA        Page Register (channel 0) * 088     DMA        RESERVED * 089     PS/2-DMA   Page Register (channel 6) * 08A     PS/2-DMA   Page Register (channel 7) * 08B     PS/2-DMA   Page Register (channel 5) * 08C     PS/2-DMA   RESERVED * 08D     PS/2-DMA   RESERVED * 08E     PS/2-DMA   RESERVED * 08F     PS/2-DMA   Page Register (channel 4) */typedef struct _DMA_PAGE{   UCHAR Reserved1;   UCHAR Channel2;   UCHAR Channel3;   UCHAR Channel1;   UCHAR Reserved2[3];   UCHAR Channel0;   UCHAR Reserved3;   UCHAR Channel6;   UCHAR Channel7;   UCHAR Channel5;   UCHAR Reserved4[3];   UCHAR Channel4;} DMA_PAGE, *PDMA_PAGE;/* * DMA Channel Mask Register Structure * * MSB                             LSB *       x   x   x   x     x   x   x   x *       -------------------   -   ----- *                |            |     |     00 - Select channel 0 mask bit *                |            |     \---- 01 - Select channel 1 mask bit *                |            |           10 - Select channel 2 mask bit *                |            |           11 - Select channel 3 mask bit *                |            | *                |            \----------  0 - Clear mask bit *                |                         1 - Set mask bit *                | *                \----------------------- xx - Reserved */typedef struct _DMA_CHANNEL_MASK{   UCHAR Channel: 2;   UCHAR SetMask: 1;   UCHAR Reserved: 5;} DMA_CHANNEL_MASK, *PDMA_CHANNEL_MASK;/* * DMA Mask Register Structure  * * MSB                             LSB *    x   x   x   x     x   x   x   x *    \---/   -   -     -----   ----- *      |     |   |       |       |     00 - Channel 0 select *      |     |   |       |       \---- 01 - Channel 1 select *      |     |   |       |             10 - Channel 2 select *      |     |   |       |             11 - Channel 3 select *      |     |   |       | *      |     |   |       |             00 - Verify transfer *      |     |   |       \------------ 01 - Write transfer *      |     |   |                     10 - Read transfer *      |     |   | *      |     |   \--------------------  0 - Autoinitialized *      |     |                          1 - Non-autoinitialized *      |     | *      |     \------------------------  0 - Address increment select *      | *      |                               00 - Demand mode *      \------------------------------ 01 - Single mode *                                      10 - Block mode *                                      11 - Cascade mode */typedef union _DMA_MODE{   struct   {      UCHAR Channel: 2;      UCHAR TransferType: 2;      UCHAR AutoInitialize: 1;      UCHAR AddressDecrement: 1;      UCHAR RequestMode: 2;   };   UCHAR Byte;} DMA_MODE, *PDMA_MODE;/* * DMA Extended Mode Register Structure  * * MSB                             LSB *    x   x   x   x     x   x   x   x *    -   -   -----     -----   ----- *    |   |     |         |       |     00 - Channel 0 select *    |   |     |         |       \---- 01 - Channel 1 select *    |   |     |         |             10 - Channel 2 select *    |   |     |         |             11 - Channel 3 select *    |   |     |         |  *    |   |     |         |             00 - 8-bit I/O, by bytes *    |   |     |         \------------ 01 - 16-bit I/O, by words, address shifted *    |   |     |                       10 - 32-bit I/O, by bytes *    |   |     |                       11 - 16-bit I/O, by bytes *    |   |     | *    |   |     \---------------------- 00 - Compatible *    |   |                             01 - Type A *    |   |                             10 - Type B *    |   |                             11 - Burst *    |   | *    |   \---------------------------- 0 - Terminal Count is Output *    |                                  *    \---------------------------------0 - Disable Stop Register *                                      1 - Enable Stop Register */typedef union _DMA_EXTENDED_MODE{   struct   {      UCHAR ChannelNumber: 2;      UCHAR TransferSize: 2;      UCHAR TimingMode: 2;      UCHAR TerminalCountIsOutput: 1;      UCHAR EnableStopRegister: 1;   };   UCHAR Byte;} DMA_EXTENDED_MODE, *PDMA_EXTENDED_MODE;/* DMA Extended Mode Register Transfer Sizes */#define B_8BITS 0#define W_16BITS 1#define B_32BITS 2#define B_16BITS 3/* DMA Extended Mode Register Timing */#define COMPATIBLE_TIMING 0#define TYPE_A_TIMING 1#define TYPE_B_TIMING 2#define BURST_TIMING 3/* Channel Stop Registers for each Channel */typedef struct _DMA_CHANNEL_STOP{   UCHAR ChannelLow;   UCHAR ChannelMid;   UCHAR ChannelHigh;   UCHAR Reserved;} DMA_CHANNEL_STOP, *PDMA_CHANNEL_STOP;/* Transfer Types */#define VERIFY_TRANSFER 0x00#define READ_TRANSFER 0x01#define WRITE_TRANSFER 0x02/* Request Modes */#define DEMAND_REQUEST_MODE 0x00#define SINGLE_REQUEST_MODE 0x01#define BLOCK_REQUEST_MODE 0x02#define CASCADE_REQUEST_MODE 0x03#define DMA_SETMASK 4#define DMA_CLEARMASK 0#define DMA_READ 4#define DMA_WRITE 8#define DMA_SINGLE_TRANSFER 0x40#define DMA_AUTO_INIT 0x10typedef struct _DMA1_ADDRESS_COUNT{   UCHAR DmaBaseAddress;   UCHAR DmaBaseCount; } DMA1_ADDRESS_COUNT, *PDMA1_ADDRESS_COUNT;typedef struct _DMA2_ADDRESS_COUNT{   UCHAR DmaBaseAddress;   UCHAR Reserved1;   UCHAR DmaBaseCount;    UCHAR Reserved2;} DMA2_ADDRESS_COUNT, *PDMA2_ADDRESS_COUNT;typedef struct _DMA1_CONTROL{   DMA1_ADDRESS_COUNT DmaAddressCount[4];   UCHAR DmaStatus;   UCHAR DmaRequest;   UCHAR SingleMask;    UCHAR Mode;   UCHAR ClearBytePointer;   UCHAR MasterClear;   UCHAR ClearMask;   UCHAR AllMask; } DMA1_CONTROL, *PDMA1_CONTROL;typedef struct _DMA2_CONTROL{   DMA2_ADDRESS_COUNT DmaAddressCount[4];   UCHAR DmaStatus;   UCHAR Reserved1;   UCHAR DmaRequest;   UCHAR Reserved2;   UCHAR SingleMask;   UCHAR Reserved3;   UCHAR Mode;   UCHAR Reserved4;   UCHAR ClearBytePointer;   UCHAR Reserved5;   UCHAR MasterClear;   UCHAR Reserved6;   UCHAR ClearMask;   UCHAR Reserved7;   UCHAR AllMask;   UCHAR Reserved8;} DMA2_CONTROL, *PDMA2_CONTROL;/* This structure defines the I/O Map of the 82537 controller. */typedef struct _EISA_CONTROL{   /* DMA Controller 1 */   DMA1_CONTROL DmaController1;         /* 00h-0Fh */   UCHAR Reserved1[16];                 /* 0Fh-1Fh */       /* Interrupt Controller 1 (PIC) */   UCHAR Pic1Operation;                 /* 20h     */   UCHAR Pic1Interrupt;                 /* 21h     */   UCHAR Reserved2[30];                 /* 22h-3Fh */      /* Timer */   UCHAR TimerCounter;                  /* 40h     */   UCHAR TimerMemoryRefresh;            /* 41h     */   UCHAR Speaker;                       /* 42h     */   UCHAR TimerOperation;                /* 43h     */   UCHAR TimerMisc;                     /* 44h     */   UCHAR Reserved3[2];                  /* 45-46h  */   UCHAR TimerCounterControl;           /* 47h     */   UCHAR TimerFailSafeCounter;          /* 48h     */   UCHAR Reserved4;                     /* 49h     */   UCHAR TimerCounter2;                 /* 4Ah     */   UCHAR TimerOperation2;               /* 4Bh     */   UCHAR Reserved5[20];                 /* 4Ch-5Fh */      /* NMI / Keyboard / RTC */   UCHAR Keyboard;                      /* 60h     */   UCHAR NmiStatus;                     /* 61h     */   UCHAR Reserved6[14];                 /* 62h-6Fh */   UCHAR NmiEnable;                     /* 70h     */   UCHAR Reserved7[15];                 /* 71h-7Fh */      /* DMA Page Registers Controller 1 */   DMA_PAGE DmaController1Pages;        /* 80h-8Fh */   UCHAR Reserved8[16];                 /* 90h-9Fh */       /* Interrupt Controller 2 (PIC) */   UCHAR Pic2Operation;                 /* 0A0h      */   UCHAR Pic2Interrupt;                 /* 0A1h      */   UCHAR Reserved9[30];                 /* 0A2h-0BFh */      /* DMA Controller 2 */   DMA1_CONTROL DmaController2;         /* 0C0h-0CFh */      /* System Reserved Ports */   UCHAR SystemReserved[816];           /* 0D0h-3FFh */      /* Extended DMA Registers, Controller 1 */   UCHAR DmaHighByteCount1[8];          /* 400h-407h */   UCHAR Reserved10[2];                 /* 408h-409h */   UCHAR DmaChainMode1;                 /* 40Ah      */   UCHAR DmaExtendedMode1;              /* 40Bh      */   UCHAR DmaBufferControl;              /* 40Ch      */   UCHAR Reserved11[84];                /* 40Dh-460h */   UCHAR ExtendedNmiControl;            /* 461h      */   UCHAR NmiCommand;                    /* 462h      */   UCHAR Reserved12;                    /* 463h      */   UCHAR BusMaster;                     /* 464h      */   UCHAR Reserved13[27];                /* 465h-47Fh */      /* DMA Page Registers Controller 2 */   DMA_PAGE DmaController2Pages;        /* 480h-48Fh */   UCHAR Reserved14[48];                /* 490h-4BFh */      /* Extended DMA Registers, Controller 2 */   UCHAR DmaHighByteCount2[16];         /* 4C0h-4CFh */      /* Edge/Level Control Registers */   UCHAR Pic1EdgeLevel;                 /* 4D0h      */   UCHAR Pic2EdgeLevel;                 /* 4D1h      */   UCHAR Reserved15[2];                 /* 4D2h-4D3h */     /* Extended DMA Registers, Controller 2 */   UCHAR DmaChainMode2;                 /* 4D4h      */   UCHAR Reserved16;                    /* 4D5h      */   UCHAR DmaExtendedMode2;              /* 4D6h      */   UCHAR Reserved17[9];                 /* 4D7h-4DFh */      /* DMA Stop Registers */   DMA_CHANNEL_STOP DmaChannelStop[8];  /* 4E0h-4FFh */} EISA_CONTROL, *PEISA_CONTROL;typedef struct _ROS_MAP_REGISTER_ENTRY{   PVOID VirtualAddress;   PHYSICAL_ADDRESS PhysicalAddress;   ULONG Counter;} ROS_MAP_REGISTER_ENTRY, *PROS_MAP_REGISTER_ENTRY;struct _ADAPTER_OBJECT {   /*    * New style DMA object definition. The fact that it is at the beginning    * of the ADAPTER_OBJECT structure allows us to easily implement the    * fallback implementation of IoGetDmaAdapter.    */   DMA_ADAPTER DmaHeader;   /*    * For normal adapter objects pointer to master adapter that takes care    * of channel allocation. For master adapter set to NULL.    */    struct _ADAPTER_OBJECT *MasterAdapter;   ULONG MapRegistersPerChannel;   PVOID AdapterBaseVa;   PROS_MAP_REGISTER_ENTRY MapRegisterBase;   ULONG NumberOfMapRegisters;   ULONG CommittedMapRegisters;   PWAIT_CONTEXT_BLOCK CurrentWcb;   KDEVICE_QUEUE ChannelWaitQueue;   PKDEVICE_QUEUE RegisterWaitQueue;   LIST_ENTRY AdapterQueue;   KSPIN_LOCK SpinLock;   PRTL_BITMAP MapRegisters;   PUCHAR PagePort;   UCHAR ChannelNumber;   UCHAR AdapterNumber;   USHORT DmaPortAddress;   DMA_MODE AdapterMode;   BOOLEAN NeedsMapRegisters;   BOOLEAN MasterDevice;   BOOLEAN Width16Bits;   BOOLEAN ScatterGather;   BOOLEAN IgnoreCount;   BOOLEAN Dma32BitAddresses;   BOOLEAN Dma64BitAddresses;   LIST_ENTRY AdapterList;} ADAPTER_OBJECT; typedef struct _GROW_WORK_ITEM {   WORK_QUEUE_ITEM WorkQueueItem;   PADAPTER_OBJECT AdapterObject;   ULONG NumberOfMapRegisters;} GROW_WORK_ITEM, *PGROW_WORK_ITEM;#define MAP_BASE_SW_SG 1PADAPTER_OBJECT STDCALLHalpDmaAllocateMasterAdapter(VOID);PDMA_ADAPTER STDCALLHalpGetDmaAdapter(   IN PVOID Context,   IN PDEVICE_DESCRIPTION DeviceDescription,   OUT PULONG NumberOfMapRegisters);ULONG STDCALLHalpDmaGetDmaAlignment(   PADAPTER_OBJECT AdapterObject);#endif /* HALDMA_H */

⌨️ 快捷键说明

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