MS DDK compatibility fixes.
[reactos.git] / reactos / drivers / net / ndis / include / ndissys.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS NDIS library
4 * FILE: ndissys.h
5 * PURPOSE: NDIS library definitions
6 * NOTES: Spin lock acquire order:
7 * - Miniport list lock
8 * - Adapter list lock
9 */
10 #ifndef __NDISSYS_H
11 #define __NDISSYS_H
12
13 typedef unsigned long NDIS_STATS;
14 #include <ndis.h>
15 #include <xfilter.h>
16 #include <afilter.h>
17
18 #if _MSC_VER
19 /* FIXME: These were removed and are no longer used! */
20 #define NdisWorkItemHalt NdisMaxWorkItems
21 #define NdisWorkItemSendLoopback (NdisMaxWorkItems + 1)
22 #else /* _MSC_VER */
23 /* FIXME: We miss the ATM headers. */
24 typedef struct _ATM_ADDRESS *PATM_ADDRESS;
25 #endif /* _MSC_VER */
26
27 /* FIXME: This should go away once NDK will be compatible with MS DDK headers. */
28 #if _MSC_VER
29 NTSTATUS NTAPI ZwDuplicateObject(IN HANDLE, IN HANDLE, IN HANDLE, OUT PHANDLE, IN ACCESS_MASK, IN ULONG, IN ULONG);
30 #else
31 #include <ndk/ntndk.h>
32 #endif
33
34 #define NDIS_MINIPORT_WORK_QUEUE_SIZE 10
35
36 struct _ADAPTER_BINDING;
37
38 typedef struct _INTERNAL_NDIS_MINIPORT_WORK_ITEM {
39 SINGLE_LIST_ENTRY Link;
40 struct _ADAPTER_BINDING *AdapterBinding;
41 NDIS_MINIPORT_WORK_ITEM RealWorkItem;
42 } INTERNAL_NDIS_MINIPORT_WORK_ITEM, *PINTERNAL_NDIS_MINIPORT_WORK_ITEM;
43
44 typedef struct _NDISI_PACKET_POOL {
45 NDIS_SPIN_LOCK SpinLock;
46 struct _NDIS_PACKET *FreeList;
47 UINT PacketLength;
48 UCHAR Buffer[1];
49 } NDISI_PACKET_POOL, * PNDISI_PACKET_POOL;
50
51 #include "miniport.h"
52 #include "protocol.h"
53
54 #include <debug.h>
55
56 /* Exported functions */
57 #ifndef EXPORT
58 #define EXPORT NTAPI
59 #endif
60
61 #define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
62 #define NDIS_TAG 0x4e4d4953
63
64 #ifdef DBG
65
66 #define DEBUG_REFCHECK(Object) { \
67 if ((Object)->RefCount <= 0) { \
68 NDIS_DbgPrint(MIN_TRACE, ("Object at (0x%X) has invalid reference count (%d).\n", \
69 (Object), (Object)->RefCount)); \
70 } \
71 }
72
73 #else
74
75 #define DEBUG_REFCHECK(Object)
76
77 #endif
78
79
80 /*
81 * VOID ReferenceObject(
82 * PVOID Object)
83 */
84 #define ReferenceObject(Object) \
85 { \
86 DEBUG_REFCHECK(Object); \
87 NDIS_DbgPrint(DEBUG_REFCOUNT, ("Referencing object at (0x%X). RefCount (%d).\n", \
88 (Object), (Object)->RefCount)); \
89 \
90 InterlockedIncrement((PLONG)&((Object)->RefCount)); \
91 }
92
93 /*
94 * VOID DereferenceObject(
95 * PVOID Object)
96 */
97 #define DereferenceObject(Object) \
98 { \
99 DEBUG_REFCHECK(Object); \
100 NDIS_DbgPrint(DEBUG_REFCOUNT, ("Dereferencing object at (0x%X). RefCount (%d).\n", \
101 (Object), (Object)->RefCount)); \
102 \
103 if (InterlockedDecrement((PLONG)&((Object)->RefCount)) == 0) \
104 PoolFreeBuffer(Object); \
105 }
106
107
108 #define MIN(value1, value2) \
109 ((value1 < value2)? value1 : value2)
110
111 #define MAX(value1, value2) \
112 ((value1 > value2)? value1 : value2)
113
114 #endif /* __NDISSYS_H */
115
116 /* EOF */