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