2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS NDIS library
4 * FILE: include/net/miniport.h
5 * PURPOSE: Type definitions available only to NDIS miniport drivers
14 #include <ddk/status.h>
23 #define ANYSIZE_ARRAY 1
30 #define STDCALL _stdcall
40 #define STDCALL __attribute__ ((stdcall))
41 #define CDECL __attribute__ ((cdecl))
49 typedef void VOID, *PVOID;
50 typedef char CHAR, *PCHAR;
51 typedef unsigned char UCHAR, *PUCHAR;
52 typedef short SHORT, *PSHORT;
53 typedef unsigned short USHORT, *PUSHORT;
54 typedef long LONG,*PLONG;
55 typedef unsigned long ULONG,*PULONG;
56 typedef double DOUBLE, *PDOUBLE;
57 typedef struct _QUAD {
58 double DoNotUseThisField;
60 typedef QUAD UQUAD, *PUQUAD;
61 typedef signed int INT, *PINT;
62 typedef unsigned int UINT, *PUINT;
63 typedef double LONGLONG, *PLONGLONG;
64 typedef double ULONGLONG, *PULONGLONG;
66 typedef UCHAR BOOLEAN, *PBOOLEAN;
67 typedef ULONG DWORD, *PDWORD;
70 typedef CHAR CCHAR, *PCCHAR;
71 typedef SHORT CSHORT, *PCSHORT;
72 typedef ULONG CLONG, *PCLONG;
74 /* UNICODE (wide character) types */
76 typedef short unsigned int wchar_t;
77 #endif /* __cplusplus */
78 typedef wchar_t WCHAR;
79 typedef WCHAR *PWCHAR;
80 typedef WCHAR *LPWCH, *PWCH;
81 typedef CONST WCHAR *LPCWCH, *PCWCH;
82 typedef WCHAR *NWPSTR;
83 typedef WCHAR *LPWSTR, *PWSTR;
84 typedef CONST WCHAR *LPCWSTR, *PCWSTR;
86 /* ANSI (multi-byte character) types */
87 typedef CHAR *LPCH, *PCH;
88 typedef CONST CHAR *LPCCH, *PCCH;
90 typedef CHAR *LPSTR, *PSTR;
91 typedef CONST CHAR *LPCSTR, *PCSTR;
93 /* Neutral ANSI/UNICODE types */
96 typedef WCHAR TCHAR, *PTCHAR;
97 typedef WCHAR TUCHAR, *PTUCHAR;
99 typedef LPWSTR LPTCH, PTCH;
100 typedef LPWSTR PTSTR, LPTSTR;
101 typedef LPCWSTR LPCTSTR;
103 #define _TEXT(string) L##string
104 #define _T(string) L##string
108 typedef CHAR TCHAR, *PTCHAR;
109 typedef UCHAR TUCHAR, *PTUCHAR;
111 typedef LPSTR LPTCH, PTCH;
112 typedef LPSTR PTSTR, LPTSTR;
113 typedef LPCSTR LPCTSTR;
114 #define _TEXT(string) string
115 #define _T(string) string
119 #define TEXT(string) __TEXT(string)
122 typedef union _LARGE_INTEGER {
134 typedef LARGE_INTEGER *PLARGE_INTEGER;
136 typedef union _ULARGE_INTEGER {
148 typedef ULARGE_INTEGER *PULARGE_INTEGER;
151 typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
155 /* NT status type and macros for checking status */
156 typedef LONG NTSTATUS;
157 typedef NTSTATUS *PNTSTATUS;
160 #define NT_SUCCESS(Status) ((ULONG)(Status) >= 0)
161 #endif /* _MSC_VER */
162 #define NT_INFORMATION(Status) ((ULONG)(Status) >> 30 == 1)
163 #define NT_WARNING(Status) ((ULONG)(Status) >> 30 == 2)
164 #define NT_ERROR(Status) ((ULONG)(Status) >> 30 == 3)
166 #define APPLICATION_ERROR_MASK 0x20000000
167 #define ERROR_SEVERITY_SUCCESS 0x00000000
168 #define ERROR_SEVERITY_INFORMATIONAL 0x40000000
169 #define ERROR_SEVERITY_WARNING 0x80000000
170 #define ERROR_SEVERITY_ERROR 0xC0000000
174 /* Basic constants */
179 #define NULL ((PVOID)0)
183 /* Counted strings */
185 typedef struct _STRING
188 USHORT MaximumLength;
192 typedef STRING ANSI_STRING, *PANSI_STRING;
193 typedef STRING OEM_STRING, *POEM_STRING;
195 #define ANSI_NULL ((CHAR)0)
197 typedef struct _CSTRING
200 USHORT MaximumLength;
202 } CSTRING, *PCSTRING;
204 typedef CSTRING CANSI_STRING, *PCANSI_STRING;
207 typedef struct _UNICODE_STRING
210 USHORT MaximumLength;
212 } UNICODE_STRING, *PUNICODE_STRING;
214 typedef struct _CUNICODE_STRING
217 USHORT MaximumLength;
219 } CUNICODE_STRING, *PCUNICODE_STRING;
221 #define UNICODE_NULL ((WCHAR)0)
227 typedef struct _LIST_ENTRY
229 struct _LIST_ENTRY *Flink;
230 struct _LIST_ENTRY *Blink;
231 } LIST_ENTRY, *PLIST_ENTRY;
233 typedef struct _SINGLE_LIST_ENTRY
235 struct _SINGLE_LIST_ENTRY *Next;
236 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
240 * VOID InitializeListHead(
241 * PLIST_ENTRY ListHead);
243 #define InitializeListHead(ListHead) \
245 (ListHead)->Flink = (ListHead); \
246 (ListHead)->Blink = (ListHead); \
251 * VOID InsertHeadList(
252 * LIST_ENTRY ListHead,
253 * PLIST_ENTRY Entry);
255 #define InsertHeadList(ListHead, ListEntry) \
257 PLIST_ENTRY OldFlink; \
258 OldFlink = (ListHead)->Flink; \
259 (ListEntry)->Flink = OldFlink; \
260 (ListEntry)->Blink = (ListHead); \
261 OldFlink->Blink = (ListEntry); \
262 (ListHead)->Flink = (ListEntry); \
267 * VOID InsertTailList(
268 * PLIST_ENTRY ListHead,
269 * PLIST_ENTRY Entry);
271 #define InsertTailList(ListHead, ListEntry) \
273 PLIST_ENTRY OldBlink; \
274 OldBlink = (ListHead)->Blink; \
275 (ListEntry)->Flink = (ListHead); \
276 (ListEntry)->Blink = OldBlink; \
277 OldBlink->Flink = (ListEntry); \
278 (ListHead)->Blink = (ListEntry); \
282 * BOOLEAN IsListEmpty(
283 * PLIST_ENTRY ListHead);
285 #define IsListEmpty(ListHead) \
286 ((ListHead)->Flink == (ListHead))
290 * PSINGLE_LIST_ENTRY PopEntryList(
291 * PSINGLE_LIST_ENTRY ListHead);
293 #define PopEntryList(ListHead) \
296 PSINGLE_LIST_ENTRY FirstEntry; \
298 FirstEntry = (ListHead)->Next; \
299 if (FirstEntry != NULL) \
301 (ListHead)->Next = FirstEntry->Next; \
307 * VOID PushEntryList(
308 * PSINGLE_LIST_ENTRY ListHead,
309 * PSINGLE_LIST_ENTRY Entry);
311 #define PushEntryList(ListHead, Entry) \
312 (Entry)->Next = (ListHead)->Next; \
313 (ListHead)->Next = (Entry)
317 * VOID RemoveEntryList(
318 * PLIST_ENTRY Entry);
320 #define RemoveEntryList(ListEntry) \
322 PLIST_ENTRY OldFlink; \
323 PLIST_ENTRY OldBlink; \
324 OldFlink = (ListEntry)->Flink; \
325 OldBlink = (ListEntry)->Blink; \
326 OldFlink->Blink = OldBlink; \
327 OldBlink->Flink = OldFlink; \
332 * PLIST_ENTRY RemoveHeadList(
333 * PLIST_ENTRY ListHead);
335 #define RemoveHeadList(ListHead) \
338 RemoveEntryList((ListHead)->Flink) \
343 * PLIST_ENTRY RemoveTailList(
344 * PLIST_ENTRY ListHead);
346 #define RemoveTailList(ListHead) \
349 RemoveEntryList((ListHead)->Blink) \
355 typedef UCHAR KIRQL, *PKIRQL;
357 typedef struct _KSPIN_LOCK
360 } KSPIN_LOCK, *PKSPIN_LOCK;
363 typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
364 typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT;
365 typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;
366 typedef struct _FILE_OBJECT *PFILE_OBJECT;
368 typedef struct _KINTERRUPT *PKINTERRUPT;
371 /* Memory Descriptor List */
372 typedef struct _MDL {
376 struct _EPROCESS *Process;
377 PVOID MappedSystemVa;
383 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
384 #define MDL_PAGES_LOCKED 0x0002
385 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
386 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
387 #define MDL_PARTIAL 0x0010
388 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
389 #define MDL_IO_PAGE_READ 0x0040
390 #define MDL_WRITE_OPERATION 0x0080
391 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
392 #define MDL_LOCK_HELD 0x0200
393 #define MDL_PHYSICAL_VIEW 0x0400
394 #define MDL_IO_SPACE 0x0800
395 #define MDL_NETWORK_HEADER 0x1000
396 #define MDL_MAPPING_CAN_FAIL 0x2000
397 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
400 #define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \
402 MDL_SOURCE_IS_NONPAGED_POOL | \
403 MDL_PARTIAL_HAS_BEEN_MAPPED | \
404 MDL_PARENT_MAPPED_SYSTEM_VA | \
410 typedef struct _DISPATCHER_HEADER
417 LIST_ENTRY WaitListHead;
420 typedef struct _KEVENT
422 DISPATCHER_HEADER Header;
426 typedef struct _KTIMER
428 DISPATCHER_HEADER Header;
429 ULARGE_INTEGER DueTime;
430 LIST_ENTRY TimerListEntry;
436 typedef enum _KDPC_IMPORTANCE
443 /* Forward declaration */
446 typedef VOID (*PKDEFERRED_ROUTINE)(
447 IN struct _KDPC *Dpc,
448 IN PVOID DeferredContext,
449 IN PVOID SystemArgument1,
450 IN PVOID SystemArgument2);
452 /* Deferred Procedure Call */
454 typedef struct _KDPC {
458 LIST_ENTRY DpcListEntry;
459 PKDEFERRED_ROUTINE DeferredRoutine;
460 PVOID DeferredContext;
461 PVOID SystemArgument1;
462 PVOID SystemArgument2;
467 typedef enum _INTERFACE_TYPE
469 InterfaceTypeUndefined = -1,
486 } INTERFACE_TYPE, *PINTERFACE_TYPE;
489 typedef enum _DMA_WIDTH
495 } DMA_WIDTH, *PDMA_WIDTH;
497 typedef enum _DMA_SPEED
505 } DMA_SPEED, *PDMA_SPEED;
508 typedef enum _KINTERRUPT_MODE
515 typedef struct _DMA_CONFIGURATION_BYTE0
521 } DMA_CONFIGURATION_BYTE0;
523 typedef struct _DMA_CONFIGURATION_BYTE1
526 UCHAR TransferSize:2;
529 } DMA_CONFIGURATION_BYTE1;
532 typedef struct _CM_MCA_POS_DATA
539 } CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;
541 typedef struct _EISA_MEMORY_TYPE
550 } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
552 typedef struct _EISA_MEMORY_CONFIGURATION
554 EISA_MEMORY_TYPE ConfigurationByte;
556 USHORT AddressLowWord;
557 UCHAR AddressHighByte;
559 } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
562 typedef struct _EISA_IRQ_DESCRIPTOR
566 UCHAR LevelTriggered:1;
569 } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;
571 typedef struct _EISA_IRQ_CONFIGURATION
573 EISA_IRQ_DESCRIPTOR ConfigurationByte;
575 } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;
577 typedef struct _EISA_DMA_CONFIGURATION
579 DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
580 DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
581 } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
584 typedef struct _EISA_PORT_DESCRIPTOR
590 } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;
592 typedef struct _EISA_PORT_CONFIGURATION
594 EISA_PORT_DESCRIPTOR Configuration;
596 } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;
598 typedef struct _CM_EISA_SLOT_INFORMATION
605 UCHAR NumberFunctions;
606 UCHAR FunctionInformation;
608 } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
610 typedef struct _CM_EISA_FUNCTION_INFORMATION
617 UCHAR Selections[26];
619 UCHAR TypeString[80];
620 EISA_MEMORY_CONFIGURATION EisaMemory[9];
621 EISA_IRQ_CONFIGURATION EisaIrq[7];
622 EISA_DMA_CONFIGURATION EisaDma[4];
623 EISA_PORT_CONFIGURATION EisaPort[20];
624 UCHAR InitializationData[60];
625 } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;
628 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
631 UCHAR ShareDisposition;
635 PHYSICAL_ADDRESS Start;
640 PHYSICAL_ADDRESS Start;
651 PHYSICAL_ADDRESS Start;
675 } DeviceSpecificData;
677 } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
679 typedef struct _CM_PARTIAL_RESOURCE_LIST
684 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
685 } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
687 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
689 INTERFACE_TYPE InterfaceType;
691 CM_PARTIAL_RESOURCE_LIST PartialResourceList;
692 } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
694 typedef struct _CM_RESOURCE_LIST
697 CM_FULL_RESOURCE_DESCRIPTOR List[1];
698 } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
702 /* Operating System services */
706 ULONG CDECL DbgPrint(
715 PVOID FailedAssertion,
720 #define ASSERT(exp) \
722 RtlAssert(#exp, __FILE__, __LINE__, NULL)
724 #define ASSERTMSG(msg, exp) \
726 RtlAssert(#exp, __FILE__, __LINE__, msg)
731 #define ASSERTMSG(msg, exp)
736 /* Runtime library */
738 #define RtlEqualMemory(Destination,Source,Length) (!memcmp((Destination), (Source), (Length)))
739 #define RtlMoveMemory(Destination,Source,Length) memmove((Destination), (Source), (Length))
740 #define RtlCopyMemory(Destination,Source,Length) memcpy((Destination), (Source), (Length))
741 #define RtlFillMemory(Destination,Length,Fill) memset((Destination), (Fill),(Length))
742 #define RtlZeroMemory(Destination,Length) memset((Destination), 0, (Length))
745 /* Core kernel functions */
749 KeStallExecutionProcessor(
757 READ_PORT_BUFFER_UCHAR(
764 READ_PORT_BUFFER_ULONG(
771 READ_PORT_BUFFER_USHORT(
793 WRITE_PORT_BUFFER_UCHAR(
800 WRITE_PORT_BUFFER_ULONG(
807 WRITE_PORT_BUFFER_USHORT(
832 WRITE_REGISTER_UCHAR(
838 WRITE_REGISTER_ULONG(
844 WRITE_REGISTER_USHORT(
848 #endif /* __MINIPORT_H */