Fixed compile issues with network code
[reactos.git] / reactos / 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 */