Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

105 lines
2.4 KiB

/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
extlist.h
Abstract:
This is the header for managing ACPI extension lists
Author:
Adrian J. Oney (AdriaO)
Environment:
NT Kernel Model Driver only
--*/
#ifndef _EXTLIST_H_
#define _EXTLIST_H_
typedef enum {
WALKSCHEME_NO_PROTECTION,
WALKSCHEME_REFERENCE_ENTRIES,
WALKSCHEME_HOLD_SPINLOCK
} WALKSCHEME ;
//
// The following structures and functions are used to simiplify (ok, abstract)
// walking lists of device extensions that happen to be stored inside other
// extensions (eg Children, Ejectee's, etc)
//
typedef struct {
PLIST_ENTRY pListHead ;
PKSPIN_LOCK pSpinLock ;
KIRQL oldIrql;
PDEVICE_EXTENSION pDevExtCurrent ;
ULONG_PTR ExtOffset ;
WALKSCHEME WalkScheme ;
} EXTENSIONLIST_ENUMDATA, *PEXTENSIONLIST_ENUMDATA ;
//
// This is like CONTAINING_RECORD, only it's hardcoded for DEVICE_EXTENSION
// type and it uses precalculated field offsets instead of record names
//
#define CONTAINING_EXTENSION(address, fieldoffset) \
((PDEVICE_EXTENSION) ((PCHAR)(address) - (ULONG_PTR)(fieldoffset)))
#define CONTAINING_LIST(address, fieldoffset) \
((PLIST_ENTRY) ((PCHAR)(address)+(ULONG_PTR)(fieldoffset)))
#define ACPIExtListSetupEnum(PExtList_EnumData, pListHeadArg, pSpinLockArg, OffsetField, WalkSchemeArg) \
{ \
PEXTENSIONLIST_ENUMDATA peled = (PExtList_EnumData) ; \
peled->pListHead = (pListHeadArg) ; \
peled->pSpinLock = (pSpinLockArg) ; \
peled->ExtOffset = FIELD_OFFSET(DEVICE_EXTENSION, OffsetField) ; \
peled->WalkScheme = (WalkSchemeArg) ; \
}
PDEVICE_EXTENSION
EXPORT
ACPIExtListStartEnum(
IN OUT PEXTENSIONLIST_ENUMDATA PExtList_EnumData
) ;
BOOLEAN
EXPORT
ACPIExtListTestElement(
IN OUT PEXTENSIONLIST_ENUMDATA PExtList_EnumData,
IN BOOLEAN ContinueEnumeration
) ;
PDEVICE_EXTENSION
EXPORT
ACPIExtListEnumNext(
IN OUT PEXTENSIONLIST_ENUMDATA PExtList_EnumData
) ;
VOID
EXPORT
ACPIExtListExitEnumEarly(
IN OUT PEXTENSIONLIST_ENUMDATA PExtList_EnumData
);
BOOLEAN
EXPORT
ACPIExtListIsMemberOfRelation(
IN PDEVICE_OBJECT DeviceObject,
IN PDEVICE_RELATIONS DeviceRelations
);
#endif // _EXTLIST_H_