master
  1/*
  2 * miniport.h
  3 *
  4 * Type definitions for miniport drivers
  5 *
  6 * This file is part of the w32api package.
  7 *
  8 * Contributors:
  9 *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
 10 *
 11 * THIS SOFTWARE IS NOT COPYRIGHTED
 12 *
 13 * This source code is offered for use in the public domain. You may
 14 * use, modify or distribute it freely.
 15 *
 16 * This code is distributed in the hope that it will be useful but
 17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 18 * DISCLAIMED. This includes but is not limited to warranties of
 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 20 *
 21 */
 22
 23#ifndef _MINIPORT_
 24#define _MINIPORT_
 25
 26#ifdef __cplusplus
 27extern "C" {
 28#endif
 29
 30#define EMULATOR_READ_ACCESS              0x01
 31#define EMULATOR_WRITE_ACCESS             0x02
 32
 33typedef enum _EMULATOR_PORT_ACCESS_TYPE {
 34	Uchar,
 35	Ushort,
 36	Ulong
 37} EMULATOR_PORT_ACCESS_TYPE, *PEMULATOR_PORT_ACCESS_TYPE;
 38
 39
 40typedef struct _EMULATOR_ACCESS_ENTRY {
 41  ULONG  BasePort;
 42  ULONG  NumConsecutivePorts;
 43  EMULATOR_PORT_ACCESS_TYPE  AccessType;
 44  UCHAR  AccessMode;
 45  UCHAR  StringSupport;
 46  PVOID  Routine;
 47} EMULATOR_ACCESS_ENTRY, *PEMULATOR_ACCESS_ENTRY;
 48
 49typedef VOID
 50(NTAPI *PBANKED_SECTION_ROUTINE)(
 51  IN ULONG  ReadBank,
 52  IN ULONG  WriteBank,
 53  IN PVOID  Context);
 54
 55#ifndef __BROKEN__
 56
 57typedef enum _INTERFACE_TYPE {
 58    InterfaceTypeUndefined = -1,
 59    Internal,
 60    Isa,
 61    Eisa,
 62    MicroChannel,
 63    TurboChannel,
 64    PCIBus,
 65    VMEBus,
 66    NuBus,
 67    PCMCIABus,
 68    CBus,
 69    MPIBus,
 70    MPSABus,
 71    ProcessorInternal,
 72    InternalPowerBus,
 73    PNPISABus,
 74    PNPBus,
 75    Vmcs,
 76    MaximumInterfaceType
 77}INTERFACE_TYPE, *PINTERFACE_TYPE;
 78
 79typedef enum _KINTERRUPT_MODE {
 80    LevelSensitive,
 81    Latched
 82} KINTERRUPT_MODE;
 83
 84typedef VOID (*PINTERFACE_REFERENCE)(PVOID Context);
 85typedef VOID (*PINTERFACE_DEREFERENCE)(PVOID Context);
 86
 87typedef enum _BUS_DATA_TYPE {
 88    ConfigurationSpaceUndefined = -1,
 89    Cmos,
 90    EisaConfiguration,
 91    Pos,
 92    CbusConfiguration,
 93    PCIConfiguration,
 94    VMEConfiguration,
 95    NuBusConfiguration,
 96    PCMCIAConfiguration,
 97    MPIConfiguration,
 98    MPSAConfiguration,
 99    PNPISAConfiguration,
100    SgiInternalConfiguration,
101    MaximumBusDataType
102} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
103
104typedef enum _DMA_WIDTH {
105    Width8Bits,
106    Width16Bits,
107    Width32Bits,
108    MaximumDmaWidth
109}DMA_WIDTH, *PDMA_WIDTH;
110
111typedef enum _DMA_SPEED {
112    Compatible,
113    TypeA,
114    TypeB,
115    TypeC,
116    TypeF,
117    MaximumDmaSpeed
118}DMA_SPEED, *PDMA_SPEED;
119
120typedef struct _INTERFACE {
121    USHORT Size;
122    USHORT Version;
123    PVOID Context;
124    PINTERFACE_REFERENCE InterfaceReference;
125    PINTERFACE_DEREFERENCE InterfaceDereference;
126} INTERFACE, *PINTERFACE;
127
128typedef enum _IRQ_DEVICE_POLICY {
129    IrqPolicyMachineDefault = 0,
130    IrqPolicyAllCloseProcessors,
131    IrqPolicyOneCloseProcessor,
132    IrqPolicyAllProcessorsInMachine,
133    IrqPolicySpecifiedProcessors,
134    IrqPolicySpreadMessagesAcrossAllProcessors
135} IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
136
137typedef enum _IRQ_PRIORITY {
138    IrqPriorityUndefined = 0,
139    IrqPriorityLow,
140    IrqPriorityNormal,
141    IrqPriorityHigh
142} IRQ_PRIORITY, *PIRQ_PRIORITY;
143
144typedef struct _IO_RESOURCE_DESCRIPTOR {
145    UCHAR Option;
146    UCHAR Type;                         // use CM_RESOURCE_TYPE
147    UCHAR ShareDisposition;             // use CM_SHARE_DISPOSITION
148    UCHAR Spare1;
149    USHORT Flags;                       // use CM resource flag defines
150    USHORT Spare2;                      // align
151
152    union {
153        struct {
154            ULONG Length;
155            ULONG Alignment;
156            PHYSICAL_ADDRESS MinimumAddress;
157            PHYSICAL_ADDRESS MaximumAddress;
158        } Port;
159
160        struct {
161            ULONG Length;
162            ULONG Alignment;
163            PHYSICAL_ADDRESS MinimumAddress;
164            PHYSICAL_ADDRESS MaximumAddress;
165        } Memory;
166
167        struct {
168            ULONG MinimumVector;
169            ULONG MaximumVector;
170            IRQ_DEVICE_POLICY AffinityPolicy;
171            IRQ_PRIORITY PriorityPolicy;
172            KAFFINITY TargetedProcessors;
173        } Interrupt;
174
175        struct {
176            ULONG MinimumChannel;
177            ULONG MaximumChannel;
178        } Dma;
179
180        struct {
181            ULONG Length;
182            ULONG Alignment;
183            PHYSICAL_ADDRESS MinimumAddress;
184            PHYSICAL_ADDRESS MaximumAddress;
185        } Generic;
186
187        struct {
188            ULONG Data[3];
189        } DevicePrivate;
190
191        //
192        // Bus Number information.
193        //
194
195        struct {
196            ULONG Length;
197            ULONG MinBusNumber;
198            ULONG MaxBusNumber;
199            ULONG Reserved;
200        } BusNumber;
201
202        struct {
203            ULONG Priority;   // use LCPRI_Xxx values in cfg.h
204            ULONG Reserved1;
205            ULONG Reserved2;
206        } ConfigData;
207
208        //
209        // The following structures provide descriptions
210        // for memory resource requirement greater than MAXULONG
211        //
212
213        struct {
214            ULONG Length40;
215            ULONG Alignment40;
216            PHYSICAL_ADDRESS MinimumAddress;
217            PHYSICAL_ADDRESS MaximumAddress;
218        } Memory40;
219
220        struct {
221            ULONG Length48;
222            ULONG Alignment48;
223            PHYSICAL_ADDRESS MinimumAddress;
224            PHYSICAL_ADDRESS MaximumAddress;
225        } Memory48;
226
227        struct {
228            ULONG Length64;
229            ULONG Alignment64;
230            PHYSICAL_ADDRESS MinimumAddress;
231            PHYSICAL_ADDRESS MaximumAddress;
232        } Memory64;
233
234    } u;
235
236} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
237
238#include <guiddef.h>
239#endif /* ! __BROKEN__ */
240
241#ifdef __cplusplus
242}
243#endif
244
245#endif /* __MINIPORT_H */