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 */