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