82 lines
3.7 KiB
C
82 lines
3.7 KiB
C
|
/*
|
||
|
************************************************************************
|
||
|
*
|
||
|
* SYNC.H
|
||
|
*
|
||
|
* Copyright (C) 1997-1998 Microsoft Corporation. All Rights Reserved.
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*************************************************************************
|
||
|
*/
|
||
|
|
||
|
typedef enum {
|
||
|
SyncInsertHead,
|
||
|
SyncInsertTail,
|
||
|
SyncRemoveHead,
|
||
|
SyncRemoveTail,
|
||
|
SyncRemove
|
||
|
} SynchronizeCmd;
|
||
|
|
||
|
typedef struct {
|
||
|
PLIST_ENTRY Head;
|
||
|
PLIST_ENTRY Entry;
|
||
|
SynchronizeCmd Command;
|
||
|
} SynchronizeList;
|
||
|
|
||
|
extern BOOLEAN SynchronizedListFunc(IN PVOID Context);
|
||
|
|
||
|
#define NDISSynchronizedInsertHeadList(head, entry, interrupt) \
|
||
|
{ \
|
||
|
SynchronizeList ListData; \
|
||
|
\
|
||
|
ListData.Head = (head); \
|
||
|
ListData.Entry = (entry); \
|
||
|
ListData.Command = SyncInsertHead; \
|
||
|
(void)NdisMSynchronizeWithInterrupt((interrupt), SynchronizedListFunc, &ListData); \
|
||
|
}
|
||
|
|
||
|
#define NDISSynchronizedInsertTailList(head, entry, interrupt) \
|
||
|
{ \
|
||
|
SynchronizeList ListData; \
|
||
|
\
|
||
|
ListData.Head = (head); \
|
||
|
ListData.Entry = (entry); \
|
||
|
ListData.Command = SyncInsertTail; \
|
||
|
(void)NdisMSynchronizeWithInterrupt((interrupt), SynchronizedListFunc, &ListData); \
|
||
|
}
|
||
|
|
||
|
#define NDISSynchronizedRemoveEntryList(entry, interrupt) \
|
||
|
{ \
|
||
|
SynchronizeList ListData; \
|
||
|
\
|
||
|
ListData.Entry = (entry); \
|
||
|
ListData.Command = SyncRemove; \
|
||
|
(void)NdisMSynchronizeWithInterrupt((interrupt), SynchronizedListFunc, &ListData); \
|
||
|
}
|
||
|
|
||
|
static PLIST_ENTRY __inline NDISSynchronizedRemoveHeadList(PLIST_ENTRY Head,
|
||
|
PNDIS_MINIPORT_INTERRUPT Interrupt)
|
||
|
{
|
||
|
SynchronizeList ListData; \
|
||
|
|
||
|
ListData.Head = Head;
|
||
|
ListData.Command = SyncRemoveHead;
|
||
|
(void)NdisMSynchronizeWithInterrupt(Interrupt, SynchronizedListFunc, &ListData);
|
||
|
|
||
|
return ListData.Entry;
|
||
|
}
|
||
|
|
||
|
static PLIST_ENTRY __inline NDISSynchronizedRemoveTailList(PLIST_ENTRY Head,
|
||
|
PNDIS_MINIPORT_INTERRUPT Interrupt)
|
||
|
{
|
||
|
SynchronizeList ListData; \
|
||
|
|
||
|
ListData.Head = Head;
|
||
|
ListData.Command = SyncRemoveTail;
|
||
|
(void)NdisMSynchronizeWithInterrupt(Interrupt, SynchronizedListFunc, &ListData);
|
||
|
|
||
|
return ListData.Entry;
|
||
|
}
|
||
|
|