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
13 #include <ddk/status.h>
22 #define ANYSIZE_ARRAY 1
29 #define STDCALL _stdcall
39 #define STDCALL __attribute__ ((stdcall))
40 #define CDECL __attribute__ ((cdecl))
48 typedef void VOID, *PVOID;
49 typedef char CHAR, *PCHAR;
50 typedef unsigned char UCHAR, *PUCHAR;
51 typedef short SHORT, *PSHORT;
52 typedef unsigned short USHORT, *PUSHORT;
53 typedef long LONG,*PLONG;
54 typedef unsigned long ULONG,*PULONG;
55 typedef double DOUBLE, *PDOUBLE;
56 typedef struct _QUAD {
57 double DoNotUseThisField;
59 typedef QUAD UQUAD, *PUQUAD;
60 typedef signed int INT, *PINT;
61 typedef unsigned int UINT, *PUINT;
62 typedef double LONGLONG, *PLONGLONG;
63 typedef double ULONGLONG, *PULONGLONG;
65 typedef UCHAR BOOLEAN, *PBOOLEAN;
66 typedef ULONG DWORD, *PDWORD;
69 typedef CHAR CCHAR, *PCCHAR;
70 typedef SHORT CSHORT, *PCSHORT;
71 typedef ULONG CLONG, *PCLONG;
73 /* UNICODE (wide character) types */
75 typedef short unsigned int wchar_t;
76 #endif /* __cplusplus */
77 typedef wchar_t WCHAR;
78 typedef WCHAR *PWCHAR;
79 typedef WCHAR *LPWCH, *PWCH;
80 typedef CONST WCHAR *LPCWCH, *PCWCH;
81 typedef WCHAR *NWPSTR;
82 typedef WCHAR *LPWSTR, *PWSTR;
83 typedef CONST WCHAR *LPCWSTR, *PCWSTR;
85 /* ANSI (multi-byte character) types */
86 typedef CHAR *LPCH, *PCH;
87 typedef CONST CHAR *LPCCH, *PCCH;
89 typedef CHAR *LPSTR, *PSTR;
90 typedef CONST CHAR *LPCSTR, *PCSTR;
92 /* Neutral ANSI/UNICODE types */
95 typedef WCHAR TCHAR, *PTCHAR;
96 typedef WCHAR TUCHAR, *PTUCHAR;
98 typedef LPWSTR LPTCH, PTCH;
99 typedef LPWSTR PTSTR, LPTSTR;
100 typedef LPCWSTR LPCTSTR;
102 #define _TEXT(string) L##string
103 #define _T(string) L##string
107 typedef CHAR TCHAR, *PTCHAR;
108 typedef UCHAR TUCHAR, *PTUCHAR;
110 typedef LPSTR LPTCH, PTCH;
111 typedef LPSTR PTSTR, LPTSTR;
112 typedef LPCSTR LPCTSTR;
113 #define _TEXT(string) string
114 #define _T(string) string
118 #define TEXT(string) __TEXT(string)
121 typedef union _LARGE_INTEGER {
133 typedef LARGE_INTEGER *PLARGE_INTEGER;
135 typedef union _ULARGE_INTEGER {
147 typedef ULARGE_INTEGER *PULARGE_INTEGER;
150 typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
154 /* NT status type and macros for checking status */
155 typedef LONG NTSTATUS;
156 typedef NTSTATUS *PNTSTATUS;
159 #define NT_SUCCESS(Status) ((ULONG)(Status) >= 0)
160 #endif /* _MSC_VER */
161 #define NT_INFORMATION(Status) ((ULONG)(Status) >> 30 == 1)
162 #define NT_WARNING(Status) ((ULONG)(Status) >> 30 == 2)
163 #define NT_ERROR(Status) ((ULONG)(Status) >> 30 == 3)
165 #define APPLICATION_ERROR_MASK 0x20000000
166 #define ERROR_SEVERITY_SUCCESS 0x00000000
167 #define ERROR_SEVERITY_INFORMATIONAL 0x40000000
168 #define ERROR_SEVERITY_WARNING 0x80000000
169 #define ERROR_SEVERITY_ERROR 0xC0000000
173 /* Basic constants */
178 #define NULL ((PVOID)0)
182 /* Counted strings */
184 typedef struct _STRING
187 USHORT MaximumLength;
191 typedef STRING ANSI_STRING, *PANSI_STRING;
192 typedef STRING OEM_STRING, *POEM_STRING;
194 #define ANSI_NULL ((CHAR)0)
196 typedef struct _CSTRING
199 USHORT MaximumLength;
201 } CSTRING, *PCSTRING;
203 typedef CSTRING CANSI_STRING, *PCANSI_STRING;
206 typedef struct _UNICODE_STRING
209 USHORT MaximumLength;
211 } UNICODE_STRING, *PUNICODE_STRING;
213 typedef struct _CUNICODE_STRING
216 USHORT MaximumLength;
218 } CUNICODE_STRING, *PCUNICODE_STRING;
220 #define UNICODE_NULL ((WCHAR)0)
226 typedef struct _LIST_ENTRY
228 struct _LIST_ENTRY *Flink;
229 struct _LIST_ENTRY *Blink;
230 } LIST_ENTRY, *PLIST_ENTRY;
232 typedef struct _SINGLE_LIST_ENTRY
234 struct _SINGLE_LIST_ENTRY *Next;
235 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
239 * VOID InitializeListHead(
240 * PLIST_ENTRY ListHead);
242 #define InitializeListHead(ListHead) \
244 (ListHead)->Flink = (ListHead); \
245 (ListHead)->Blink = (ListHead); \
250 * VOID InsertHeadList(
251 * LIST_ENTRY ListHead,
252 * PLIST_ENTRY Entry);
254 #define InsertHeadList(ListHead, ListEntry) \
256 PLIST_ENTRY OldFlink; \
257 OldFlink = (ListHead)->Flink; \
258 (ListEntry)->Flink = OldFlink; \
259 (ListEntry)->Blink = (ListHead); \
260 OldFlink->Blink = (ListEntry); \
261 (ListHead)->Flink = (ListEntry); \
266 * VOID InsertTailList(
267 * PLIST_ENTRY ListHead,
268 * PLIST_ENTRY Entry);
270 #define InsertTailList(ListHead, ListEntry) \
272 PLIST_ENTRY OldBlink; \
273 OldBlink = (ListHead)->Blink; \
274 (ListEntry)->Flink = (ListHead); \
275 (ListEntry)->Blink = OldBlink; \
276 OldBlink->Flink = (ListEntry); \
277 (ListHead)->Blink = (ListEntry); \
281 * BOOLEAN IsListEmpty(
282 * PLIST_ENTRY ListHead);
284 #define IsListEmpty(ListHead) \
285 ((ListHead)->Flink == (ListHead))
289 * PSINGLE_LIST_ENTRY PopEntryList(
290 * PSINGLE_LIST_ENTRY ListHead);
292 #define PopEntryList(ListHead) \
295 PSINGLE_LIST_ENTRY FirstEntry; \
297 FirstEntry = (ListHead)->Next; \
298 if (FirstEntry != NULL) \
300 (ListHead)->Next = FirstEntry->Next; \
306 * VOID PushEntryList(
307 * PSINGLE_LIST_ENTRY ListHead,
308 * PSINGLE_LIST_ENTRY Entry);
310 #define PushEntryList(ListHead, Entry) \
311 (Entry)->Next = (ListHead)->Next; \
312 (ListHead)->Next = (Entry)
316 * VOID RemoveEntryList(
317 * PLIST_ENTRY Entry);
319 #define RemoveEntryList(ListEntry) \
321 PLIST_ENTRY OldFlink; \
322 PLIST_ENTRY OldBlink; \
323 OldFlink = (ListEntry)->Flink; \
324 OldBlink = (ListEntry)->Blink; \
325 OldFlink->Blink = OldBlink; \
326 OldBlink->Flink = OldFlink; \
331 * PLIST_ENTRY RemoveHeadList(
332 * PLIST_ENTRY ListHead);
334 #define RemoveHeadList(ListHead) \
337 RemoveEntryList((ListHead)->Flink) \
342 * PLIST_ENTRY RemoveTailList(
343 * PLIST_ENTRY ListHead);
345 #define RemoveTailList(ListHead) \
348 RemoveEntryList((ListHead)->Blink) \
354 typedef UCHAR KIRQL, *PKIRQL;
356 typedef struct _KSPIN_LOCK
359 } KSPIN_LOCK, *PKSPIN_LOCK;
362 typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
363 typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT;
364 typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;
365 typedef struct _FILE_OBJECT *PFILE_OBJECT;
367 typedef struct _KINTERRUPT *PKINTERRUPT;
370 /* Memory Descriptor List */
371 typedef struct _MDL {
375 struct _EPROCESS *Process;
376 PVOID MappedSystemVa;
382 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
383 #define MDL_PAGES_LOCKED 0x0002
384 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
385 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
386 #define MDL_PARTIAL 0x0010
387 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
388 #define MDL_IO_PAGE_READ 0x0040
389 #define MDL_WRITE_OPERATION 0x0080
390 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
391 #define MDL_LOCK_HELD 0x0200
392 #define MDL_PHYSICAL_VIEW 0x0400
393 #define MDL_IO_SPACE 0x0800
394 #define MDL_NETWORK_HEADER 0x1000
395 #define MDL_MAPPING_CAN_FAIL 0x2000
396 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
399 #define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \
401 MDL_SOURCE_IS_NONPAGED_POOL | \
402 MDL_PARTIAL_HAS_BEEN_MAPPED | \
403 MDL_PARENT_MAPPED_SYSTEM_VA | \
409 typedef struct _DISPATCHER_HEADER
416 LIST_ENTRY WaitListHead;
419 typedef struct _KEVENT
421 DISPATCHER_HEADER Header;
425 typedef struct _KTIMER
427 DISPATCHER_HEADER Header;
428 ULARGE_INTEGER DueTime;
429 LIST_ENTRY TimerListEntry;
435 typedef enum _KDPC_IMPORTANCE
442 /* Forward declaration */
445 typedef VOID (*PKDEFERRED_ROUTINE)(
446 IN struct _KDPC *Dpc,
447 IN PVOID DeferredContext,
448 IN PVOID SystemArgument1,
449 IN PVOID SystemArgument2);
451 /* Deferred Procedure Call */
453 typedef struct _KDPC {
457 LIST_ENTRY DpcListEntry;
458 PKDEFERRED_ROUTINE DeferredRoutine;
459 PVOID DeferredContext;
460 PVOID SystemArgument1;
461 PVOID SystemArgument2;
466 typedef enum _INTERFACE_TYPE
468 InterfaceTypeUndefined = -1,
485 } INTERFACE_TYPE, *PINTERFACE_TYPE;
488 typedef enum _DMA_WIDTH
494 } DMA_WIDTH, *PDMA_WIDTH;
496 typedef enum _DMA_SPEED
504 } DMA_SPEED, *PDMA_SPEED;
507 typedef enum _KINTERRUPT_MODE
514 typedef struct _DMA_CONFIGURATION_BYTE0
520 } DMA_CONFIGURATION_BYTE0;
522 typedef struct _DMA_CONFIGURATION_BYTE1
525 UCHAR TransferSize:2;
528 } DMA_CONFIGURATION_BYTE1;
531 typedef struct _CM_MCA_POS_DATA
538 } CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;
540 typedef struct _EISA_MEMORY_TYPE
549 } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
551 typedef struct _EISA_MEMORY_CONFIGURATION
553 EISA_MEMORY_TYPE ConfigurationByte;
555 USHORT AddressLowWord;
556 UCHAR AddressHighByte;
558 } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
561 typedef struct _EISA_IRQ_DESCRIPTOR
565 UCHAR LevelTriggered:1;
568 } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;
570 typedef struct _EISA_IRQ_CONFIGURATION
572 EISA_IRQ_DESCRIPTOR ConfigurationByte;
574 } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;
576 typedef struct _EISA_DMA_CONFIGURATION
578 DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
579 DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
580 } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
583 typedef struct _EISA_PORT_DESCRIPTOR
589 } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;
591 typedef struct _EISA_PORT_CONFIGURATION
593 EISA_PORT_DESCRIPTOR Configuration;
595 } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;
597 typedef struct _CM_EISA_SLOT_INFORMATION
604 UCHAR NumberFunctions;
605 UCHAR FunctionInformation;
607 } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
609 typedef struct _CM_EISA_FUNCTION_INFORMATION
616 UCHAR Selections[26];
618 UCHAR TypeString[80];
619 EISA_MEMORY_CONFIGURATION EisaMemory[9];
620 EISA_IRQ_CONFIGURATION EisaIrq[7];
621 EISA_DMA_CONFIGURATION EisaDma[4];
622 EISA_PORT_CONFIGURATION EisaPort[20];
623 UCHAR InitializationData[60];
624 } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;
627 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
630 UCHAR ShareDisposition;
634 PHYSICAL_ADDRESS Start;
639 PHYSICAL_ADDRESS Start;
650 PHYSICAL_ADDRESS Start;
674 } DeviceSpecificData;
676 } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
678 typedef struct _CM_PARTIAL_RESOURCE_LIST
683 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
684 } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
686 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
688 INTERFACE_TYPE InterfaceType;
690 CM_PARTIAL_RESOURCE_LIST PartialResourceList;
691 } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
693 typedef struct _CM_RESOURCE_LIST
696 CM_FULL_RESOURCE_DESCRIPTOR List[1];
697 } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
701 /* Operating System services */
705 ULONG CDECL DbgPrint(
714 PVOID FailedAssertion,
719 #define ASSERT(exp) \
721 RtlAssert(#exp, __FILE__, __LINE__, NULL)
723 #define ASSERTMSG(msg, exp) \
725 RtlAssert(#exp, __FILE__, __LINE__, msg)
730 #define ASSERTMSG(msg, exp)
735 /* Runtime library */
737 #define RtlEqualMemory(Destination,Source,Length) (!memcmp((Destination), (Source), (Length)))
738 #define RtlMoveMemory(Destination,Source,Length) memmove((Destination), (Source), (Length))
739 #define RtlCopyMemory(Destination,Source,Length) memcpy((Destination), (Source), (Length))
740 #define RtlFillMemory(Destination,Length,Fill) memset((Destination), (Fill),(Length))
741 #define RtlZeroMemory(Destination,Length) memset((Destination), 0, (Length))
744 /* Core kernel functions */
748 KeStallExecutionProcessor(
756 READ_PORT_BUFFER_UCHAR(
763 READ_PORT_BUFFER_ULONG(
770 READ_PORT_BUFFER_USHORT(
792 WRITE_PORT_BUFFER_UCHAR(
799 WRITE_PORT_BUFFER_ULONG(
806 WRITE_PORT_BUFFER_USHORT(
831 WRITE_REGISTER_UCHAR(
837 WRITE_REGISTER_ULONG(
843 WRITE_REGISTER_USHORT(
847 #endif /* __MINIPORT_H */