1 #ifndef __CROSS_NT_RWLOCK__H__
2 #define __CROSS_NT_RWLOCK__H__
3 
4 #ifndef	MAXIMUM_PROCESSORS
5 #define	MAXIMUM_PROCESSORS	32
6 #endif
7 
8 typedef union _NDIS_RW_LOCK_REFCOUNT {
9     unsigned int                 RefCount;
10     UCHAR                        cacheLine[16];    // One refCount per cache line
11 } NDIS_RW_LOCK_REFCOUNT;
12 
13 typedef struct _NDIS_RW_LOCK {
14     union  {
15         struct {
16             KSPIN_LOCK           SpinLock;
17             PVOID                Context;
18         };
19         UCHAR                    Reserved[16];
20     };
21 
22     NDIS_RW_LOCK_REFCOUNT        RefCount[MAXIMUM_PROCESSORS];
23 } NDIS_RW_LOCK, *PNDIS_RW_LOCK;
24 
25 typedef struct _LOCK_STATE {
26     USHORT     LockState;
27     KIRQL      OldIrql;
28 } LOCK_STATE, *PLOCK_STATE;
29 
30 #define RWLOCK_STATE_FREE             0
31 #define RWLOCK_STATE_READ_ACQUIRED    1
32 #define RWLOCK_STATE_WRITE_ACQUIRED   2
33 #define RWLOCK_STATE_RECURSIVE        3
34 #define RWLOCK_STATE_RELEASED         0xffff
35 
36 #define RWLOCK_FOR_WRITE              TRUE
37 #define RWLOCK_FOR_READ               FALSE
38 
39 #endif /* __CROSS_NT_RWLOCK__H__ */
40