update for HEAD-2003091401
[reactos.git] / include / net / miniport.h
1 /*
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
6  */
7 #if 0
8 #ifndef __MINIPORT_H
9 #define __MINIPORT_H
10
11 #ifdef _MSC_VER
12 #include <ntstatus.h>
13 #else /* _MSC_VER */
14 #include <ddk/status.h>
15 #endif /* _MSC_VER */
16
17 /* Base types */
18
19 #define IN
20 #define OUT
21 #define OPTIONAL
22
23 #define ANYSIZE_ARRAY   1
24
25 #define CONST const
26
27 #ifdef _MSC_VER
28
29 #ifdef i386
30 #define STDCALL _stdcall
31 #define CDECL   _cdecl
32 #else /* i386 */
33 #define STDCALL
34 #define CDECL
35 #endif /* i386 */
36
37 #else /* _MSC_VER */
38
39 #ifdef i386
40 #define STDCALL __attribute__ ((stdcall))
41 #define CDECL   __attribute__ ((cdecl))
42 #else /* i386 */
43 #define STDCALL
44 #define CDECL
45 #endif /* i386 */
46
47 #endif /* _MSC_VER */
48
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;
59 } QUAD,*PQUAD;
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;
65
66 typedef UCHAR BOOLEAN, *PBOOLEAN;
67 typedef ULONG DWORD, *PDWORD;
68
69 /* Cardinal types */
70 typedef CHAR CCHAR, *PCCHAR;
71 typedef SHORT CSHORT, *PCSHORT;
72 typedef ULONG CLONG, *PCLONG;
73
74 /* UNICODE (wide character) types */
75 #ifndef __cplusplus
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;
85
86 /* ANSI (multi-byte character) types */
87 typedef CHAR *LPCH, *PCH;
88 typedef CONST CHAR *LPCCH, *PCCH;
89 typedef CHAR *NPSTR;
90 typedef CHAR *LPSTR, *PSTR;
91 typedef CONST CHAR *LPCSTR, *PCSTR;
92
93 /* Neutral ANSI/UNICODE types */
94 #ifdef UNICODE
95
96 typedef WCHAR TCHAR, *PTCHAR;
97 typedef WCHAR TUCHAR, *PTUCHAR;
98
99 typedef LPWSTR LPTCH, PTCH;
100 typedef LPWSTR PTSTR, LPTSTR;
101 typedef LPCWSTR LPCTSTR;
102 typedef LPWSTR LP;
103 #define _TEXT(string) L##string
104 #define _T(string) L##string
105
106 #else /* UNICODE */
107
108 typedef CHAR TCHAR, *PTCHAR;
109 typedef UCHAR TUCHAR, *PTUCHAR;
110
111 typedef LPSTR LPTCH, PTCH;
112 typedef LPSTR PTSTR, LPTSTR;
113 typedef LPCSTR LPCTSTR;
114 #define _TEXT(string) string
115 #define _T(string) string
116
117 #endif /* UNICODE */
118
119 #define TEXT(string) __TEXT(string)
120
121
122 typedef union _LARGE_INTEGER {
123     struct {
124         ULONG LowPart;
125         LONG HighPart;
126     };
127     struct {
128         ULONG LowPart;
129         LONG HighPart;
130     } u;
131     LONGLONG QuadPart;
132 } LARGE_INTEGER;
133
134 typedef LARGE_INTEGER *PLARGE_INTEGER;
135
136 typedef union _ULARGE_INTEGER {
137     struct {
138         ULONG LowPart;
139         ULONG HighPart;
140     };
141     struct {
142         ULONG LowPart;
143         ULONG HighPart;
144     } u;
145     ULONGLONG QuadPart;
146 } ULARGE_INTEGER;
147
148 typedef ULARGE_INTEGER *PULARGE_INTEGER;
149
150
151 typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
152
153
154
155 /* NT status type and macros for checking status */
156 typedef LONG NTSTATUS;
157 typedef NTSTATUS *PNTSTATUS;
158
159 #ifdef _MSC_VER
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)
165
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
171
172
173
174 /* Basic constants */
175
176 #define FALSE   0
177 #define TRUE    1
178
179 #define NULL    ((PVOID)0)
180
181
182
183 /* Counted strings */
184
185 typedef struct _STRING
186 {
187     USHORT  Length;
188     USHORT  MaximumLength;
189     PCHAR   Buffer;
190 } STRING, *PSTRING;
191
192 typedef STRING ANSI_STRING, *PANSI_STRING;
193 typedef STRING OEM_STRING, *POEM_STRING;
194
195 #define ANSI_NULL   ((CHAR)0)
196
197 typedef struct _CSTRING
198 {
199     USHORT      Length;
200     USHORT      MaximumLength;
201     CONST CHAR  *Buffer;
202 } CSTRING, *PCSTRING;
203
204 typedef CSTRING CANSI_STRING, *PCANSI_STRING;
205
206
207 typedef struct _UNICODE_STRING
208 {
209     USHORT  Length;
210     USHORT  MaximumLength;
211     PWSTR   Buffer;
212 } UNICODE_STRING, *PUNICODE_STRING;
213
214 typedef struct _CUNICODE_STRING
215 {
216     USHORT      Length;
217     USHORT      MaximumLength;
218     CONST PWSTR Buffer;
219 } CUNICODE_STRING, *PCUNICODE_STRING;
220
221 #define UNICODE_NULL    ((WCHAR)0)
222
223
224
225 /* Linked lists */
226
227 typedef struct _LIST_ENTRY
228 {
229     struct _LIST_ENTRY *Flink;
230     struct _LIST_ENTRY *Blink;
231 } LIST_ENTRY, *PLIST_ENTRY;
232
233 typedef struct _SINGLE_LIST_ENTRY
234 {
235     struct _SINGLE_LIST_ENTRY *Next;
236 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
237
238
239 /*
240  * VOID InitializeListHead(
241  *     PLIST_ENTRY ListHead);
242  */
243 #define InitializeListHead(ListHead) \
244 {                                    \
245     (ListHead)->Flink = (ListHead);  \
246     (ListHead)->Blink = (ListHead);  \
247 }
248
249
250 /*
251  * VOID InsertHeadList(
252  *     LIST_ENTRY ListHead,
253  *     PLIST_ENTRY Entry);
254  */
255 #define InsertHeadList(ListHead, ListEntry) \
256 {                                           \
257     PLIST_ENTRY OldFlink;                   \
258     OldFlink           = (ListHead)->Flink; \
259     (ListEntry)->Flink = OldFlink;          \
260     (ListEntry)->Blink = (ListHead);        \
261     OldFlink->Blink    = (ListEntry);       \
262     (ListHead)->Flink  = (ListEntry);       \
263 }
264
265
266 /*
267  * VOID InsertTailList(
268  *     PLIST_ENTRY ListHead,
269  *         PLIST_ENTRY Entry);
270  */
271 #define InsertTailList(ListHead, ListEntry) \
272 {                                           \
273     PLIST_ENTRY OldBlink;                   \
274         OldBlink           = (ListHead)->Blink; \
275         (ListEntry)->Flink = (ListHead);        \
276         (ListEntry)->Blink = OldBlink;          \
277         OldBlink->Flink    = (ListEntry);       \
278         (ListHead)->Blink  = (ListEntry);       \
279 }
280
281 /*
282  * BOOLEAN IsListEmpty(
283  *     PLIST_ENTRY ListHead);
284  */
285 #define IsListEmpty(ListHead) \
286     ((ListHead)->Flink == (ListHead))
287
288
289 /*
290  * PSINGLE_LIST_ENTRY PopEntryList(
291  *     PSINGLE_LIST_ENTRY ListHead);
292  */
293 #define PopEntryList(ListHead)               \
294     (ListHead)->Next;                        \
295 {                                            \
296     PSINGLE_LIST_ENTRY FirstEntry;           \
297                                              \
298     FirstEntry = (ListHead)->Next;           \
299     if (FirstEntry != NULL)                  \
300     {                                        \
301         (ListHead)->Next = FirstEntry->Next; \
302     }                                        \
303 }
304
305
306 /*
307  * VOID PushEntryList(
308  *     PSINGLE_LIST_ENTRY ListHead,
309  *     PSINGLE_LIST_ENTRY Entry);
310  */
311 #define PushEntryList(ListHead, Entry)   \
312     (Entry)->Next    = (ListHead)->Next; \
313     (ListHead)->Next = (Entry)
314
315
316 /*
317  * VOID RemoveEntryList(
318  *     PLIST_ENTRY Entry);
319  */
320 #define RemoveEntryList(ListEntry)        \
321 {                                         \
322     PLIST_ENTRY OldFlink;                 \
323     PLIST_ENTRY OldBlink;                 \
324     OldFlink        = (ListEntry)->Flink; \
325     OldBlink        = (ListEntry)->Blink; \
326     OldFlink->Blink = OldBlink;           \
327     OldBlink->Flink = OldFlink;           \
328 }
329
330
331 /*
332  * PLIST_ENTRY RemoveHeadList(
333  *     PLIST_ENTRY ListHead);
334  */
335 #define RemoveHeadList(ListHead)       \
336         (ListHead)->Flink;                 \
337 {                                      \
338     RemoveEntryList((ListHead)->Flink) \
339 }
340
341
342 /*
343  * PLIST_ENTRY RemoveTailList(
344  *     PLIST_ENTRY ListHead);
345  */
346 #define RemoveTailList(ListHead)       \
347     (ListHead)->Blink;                 \
348 {                                      \
349     RemoveEntryList((ListHead)->Blink) \
350 }
351
352
353 /* Hardware */
354
355 typedef UCHAR KIRQL, *PKIRQL;
356
357 typedef struct _KSPIN_LOCK
358 {
359     ULONG    Lock;
360 } KSPIN_LOCK, *PKSPIN_LOCK;
361
362
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;
367
368 typedef struct _KINTERRUPT      *PKINTERRUPT;
369
370
371 /* Memory Descriptor List */
372 typedef struct _MDL {
373     struct _MDL *Next;
374     CSHORT Size;
375     CSHORT MdlFlags;
376     struct _EPROCESS *Process;
377     PVOID MappedSystemVa;
378     PVOID StartVa;
379     ULONG ByteCount;
380     ULONG ByteOffset;
381 } MDL, *PMDL;
382
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
398
399
400 #define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA     | \
401                            MDL_PAGES_LOCKED            | \
402                            MDL_SOURCE_IS_NONPAGED_POOL | \
403                            MDL_PARTIAL_HAS_BEEN_MAPPED | \
404                            MDL_PARENT_MAPPED_SYSTEM_VA | \
405                            MDL_LOCK_HELD               | \
406                            MDL_SYSTEM_VA               | \
407                            MDL_IO_SPACE )
408
409
410 typedef struct _DISPATCHER_HEADER
411 {
412     UCHAR       Type;
413     UCHAR       Absolute;
414     UCHAR       Size;
415     UCHAR       Inserted;
416     LONG        SignalState;
417     LIST_ENTRY  WaitListHead;
418 } DISPATCHER_HEADER;
419
420 typedef struct _KEVENT
421 {
422     DISPATCHER_HEADER   Header;
423 } KEVENT, *PKEVENT;
424
425
426 typedef struct _KTIMER
427 {
428     DISPATCHER_HEADER   Header;
429     ULARGE_INTEGER      DueTime;
430     LIST_ENTRY          TimerListEntry;
431     struct _KDPC        *Dpc;
432     LONG                Period;
433 } KTIMER, *PKTIMER;
434
435
436 typedef enum _KDPC_IMPORTANCE
437 {
438     LowImportance,
439     MediumImportance,
440     HighImportance
441 } KDPC_IMPORTANCE;
442
443 /* Forward declaration */
444 struct _KDPC;
445
446 typedef VOID (*PKDEFERRED_ROUTINE)(
447     IN  struct _KDPC    *Dpc,
448     IN  PVOID           DeferredContext,
449     IN  PVOID           SystemArgument1,
450     IN  PVOID           SystemArgument2);
451
452 /* Deferred Procedure Call */
453
454 typedef struct _KDPC {
455     CSHORT              Type;
456     UCHAR               Number;
457     UCHAR               Importance;
458     LIST_ENTRY          DpcListEntry;
459     PKDEFERRED_ROUTINE  DeferredRoutine;
460     PVOID               DeferredContext;
461     PVOID               SystemArgument1;
462     PVOID               SystemArgument2;
463     PULONG              Lock;
464 } KDPC, *PKDPC;
465
466
467 typedef enum _INTERFACE_TYPE
468 {
469     InterfaceTypeUndefined = -1,
470     Internal,
471     Isa,
472     Eisa,
473     MicroChannel,
474     TurboChannel,
475     PCIBus,
476     VMEBus,
477     NuBus,
478     PCMCIABus,
479     CBus,
480     MPIBus,
481     MPSABus,
482     ProcessorInternal,
483     InternalPowerBus,
484     PNPISABus,
485     MaximumInterfaceType
486 } INTERFACE_TYPE, *PINTERFACE_TYPE;
487
488
489 typedef enum _DMA_WIDTH
490 {
491     Width8Bits,
492     Width16Bits,
493     Width32Bits,
494     MaximumDmaWidth
495 } DMA_WIDTH, *PDMA_WIDTH;
496
497 typedef enum _DMA_SPEED
498 {
499     Compatible,
500     TypeA,
501     TypeB,
502     TypeC,
503     TypeF,
504     MaximumDmaSpeed
505 } DMA_SPEED, *PDMA_SPEED;
506
507
508 typedef enum _KINTERRUPT_MODE
509 {
510     LevelSensitive,
511     Latched
512 } KINTERRUPT_MODE;
513
514
515 typedef struct _DMA_CONFIGURATION_BYTE0
516 {
517     UCHAR   Channel:3;
518     UCHAR   Reserved:3;
519     UCHAR   Shared:1;
520     UCHAR   MoreEntries:1;
521 } DMA_CONFIGURATION_BYTE0;
522
523 typedef struct _DMA_CONFIGURATION_BYTE1
524 {
525     UCHAR   Reserved0:2;
526     UCHAR   TransferSize:2;
527     UCHAR   Timing:2;
528     UCHAR   Reserved1:2;
529 } DMA_CONFIGURATION_BYTE1;
530
531
532 typedef struct _CM_MCA_POS_DATA
533 {
534     USHORT  AdapterId;
535     UCHAR   PosData1;
536     UCHAR   PosData2;
537     UCHAR   PosData3;
538     UCHAR   PosData4;
539 } CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;
540
541 typedef struct _EISA_MEMORY_TYPE
542 {
543     UCHAR   ReadWrite:1;
544     UCHAR   Cached:1;
545     UCHAR   Reserved0:1;
546     UCHAR   Type:2;
547     UCHAR   Shared:1;
548     UCHAR   Reserved1:1;
549     UCHAR   MoreEntries:1;
550 } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
551
552 typedef struct _EISA_MEMORY_CONFIGURATION
553 {
554     EISA_MEMORY_TYPE    ConfigurationByte;
555     UCHAR   DataSize;
556     USHORT  AddressLowWord;
557     UCHAR   AddressHighByte;
558     USHORT  MemorySize;
559 } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
560
561
562 typedef struct _EISA_IRQ_DESCRIPTOR
563 {
564     UCHAR   Interrupt:4;
565     UCHAR   Reserved:1;
566     UCHAR   LevelTriggered:1;
567     UCHAR   Shared:1;
568     UCHAR   MoreEntries:1;
569 } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;
570
571 typedef struct _EISA_IRQ_CONFIGURATION
572 {
573     EISA_IRQ_DESCRIPTOR ConfigurationByte;
574     UCHAR   Reserved;
575 } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;
576
577 typedef struct _EISA_DMA_CONFIGURATION
578 {
579     DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
580     DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
581 } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
582
583
584 typedef struct _EISA_PORT_DESCRIPTOR
585 {
586     UCHAR   NumberPorts:5;
587     UCHAR   Reserved:1;
588     UCHAR   Shared:1;
589     UCHAR   MoreEntries:1;
590 } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;
591
592 typedef struct _EISA_PORT_CONFIGURATION
593 {
594     EISA_PORT_DESCRIPTOR    Configuration;
595     USHORT  PortAddress;
596 } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;
597
598 typedef struct _CM_EISA_SLOT_INFORMATION
599 {
600     UCHAR   ReturnCode;
601     UCHAR   ReturnFlags;
602     UCHAR   MajorRevision;
603     UCHAR   MinorRevision;
604     USHORT  Checksum;
605     UCHAR   NumberFunctions;
606     UCHAR   FunctionInformation;
607     ULONG   CompressedId;
608 } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
609
610 typedef struct _CM_EISA_FUNCTION_INFORMATION
611 {
612     ULONG   CompressedId;
613     UCHAR   IdSlotFlags1;
614     UCHAR   IdSlotFlags2;
615     UCHAR   MinorRevision;
616     UCHAR   MajorRevision;
617     UCHAR   Selections[26];
618     UCHAR   FunctionFlags;
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;
626
627
628 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
629 {
630     UCHAR   Type;
631     UCHAR   ShareDisposition;
632     USHORT  Flags;
633     union {
634         struct {
635             PHYSICAL_ADDRESS    Start;
636             ULONG               Length;
637         } Generic;
638
639         struct {
640             PHYSICAL_ADDRESS    Start;
641             ULONG               Length;
642         } Port;
643
644         struct {
645             ULONG   Level;
646             ULONG   Vector;
647             ULONG   Affinity;
648         } Interrupt;
649
650         struct {
651             PHYSICAL_ADDRESS    Start;
652             ULONG               Length;
653         } Memory;
654
655         struct {
656             ULONG   Channel;
657             ULONG   Port;
658             ULONG   Reserved1;
659         } Dma;
660
661         struct {
662             ULONG   Data[3];
663         } DevicePrivate;
664
665         struct {
666             ULONG   Start;
667             ULONG   Length;
668             ULONG   Reserved;
669         } BusNumber;
670
671         struct {
672             ULONG   DataSize;
673             ULONG   Reserved1;
674             ULONG   Reserved2;
675         } DeviceSpecificData;
676     } u;
677 } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
678
679 typedef struct _CM_PARTIAL_RESOURCE_LIST
680 {
681     USHORT  Version;
682     USHORT  Revision;
683     ULONG   Count;
684     CM_PARTIAL_RESOURCE_DESCRIPTOR  PartialDescriptors[1];
685 } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
686
687 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
688 {
689     INTERFACE_TYPE  InterfaceType;
690     ULONG           BusNumber;
691     CM_PARTIAL_RESOURCE_LIST    PartialResourceList;
692 } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
693
694 typedef struct _CM_RESOURCE_LIST
695 {
696     ULONG   Count;
697     CM_FULL_RESOURCE_DESCRIPTOR List[1];
698 } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
699
700
701
702 /* Operating System services */
703
704 /* Debugging */
705
706 ULONG CDECL DbgPrint(
707     PCH Format,
708     ...);
709
710 #ifdef DBG
711
712 VOID
713 STDCALL
714 RtlAssert(
715     PVOID   FailedAssertion,
716     PVOID   FileName,
717     ULONG   LineNumber,
718     PCHAR   Message);
719
720 #define ASSERT(exp) \
721     if (!(exp)) \
722         RtlAssert(#exp, __FILE__, __LINE__, NULL)
723
724 #define ASSERTMSG(msg, exp) \
725     if (!(exp)) \
726         RtlAssert(#exp, __FILE__, __LINE__, msg)
727
728 #else /* DBG */
729
730 #define ASSERT(exp)
731 #define ASSERTMSG(msg, exp)
732
733 #endif /* DBG */
734
735
736 /* Runtime library */
737
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))
743
744
745 /* Core kernel functions */
746
747 VOID
748 STDCALL
749 KeStallExecutionProcessor(
750     ULONG   MicroSeconds);
751
752
753 /* I/O functions */
754
755 VOID
756 STDCALL
757 READ_PORT_BUFFER_UCHAR(
758     PUCHAR  Port,
759     PUCHAR  Value,
760     ULONG   Count);
761
762 VOID
763 STDCALL
764 READ_PORT_BUFFER_ULONG(
765     PULONG  Port,
766     PULONG  Value,
767     ULONG   Count);
768
769 VOID
770 STDCALL
771 READ_PORT_BUFFER_USHORT(
772     PUSHORT Port,
773     PUSHORT Value,
774     ULONG   Count);
775
776 UCHAR
777 STDCALL
778 READ_PORT_UCHAR(
779     PUCHAR  Port);
780
781 ULONG
782 STDCALL
783 READ_PORT_ULONG(
784     PULONG  Port);
785
786 USHORT
787 STDCALL
788 READ_PORT_USHORT(
789     PUSHORT Port);
790
791 VOID
792 STDCALL
793 WRITE_PORT_BUFFER_UCHAR(
794     PUCHAR  Port,
795     PUCHAR  Value,
796     ULONG   Count);
797
798 VOID
799 STDCALL
800 WRITE_PORT_BUFFER_ULONG(
801     PULONG  Port,
802     PULONG  Value,
803     ULONG   Count);
804
805 VOID
806 STDCALL
807 WRITE_PORT_BUFFER_USHORT(
808     PUSHORT Port,
809     PUSHORT Value,
810     ULONG   Count);
811
812 VOID
813 STDCALL
814 WRITE_PORT_UCHAR(
815     PUCHAR  Port,
816     UCHAR   Value);
817
818 VOID
819 STDCALL
820 WRITE_PORT_ULONG(
821     PULONG  Port,
822     ULONG   Value);
823
824 VOID
825 STDCALL
826 WRITE_PORT_USHORT(
827     PUSHORT Port,
828     USHORT  Value);
829
830 VOID
831 STDCALL
832 WRITE_REGISTER_UCHAR(
833     PUCHAR  Register,
834     UCHAR   Value);
835
836 VOID
837 STDCALL
838 WRITE_REGISTER_ULONG(
839     PULONG  Register,
840     ULONG   Value);
841
842 VOID
843 STDCALL
844 WRITE_REGISTER_USHORT(
845     PUSHORT Register,
846     USHORT  Value);
847
848 #endif /* __MINIPORT_H */
849
850 /* EOF */
851 #endif