reorganized for NDIS_WDM support ( submitted by vizzini )
[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 #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