|
|
/*++
Copyright (c) 1993 Microsoft Corporation
Module Name:
regdesc.hxx
Abstract:
This module contains the declarations for the following classes: IO_DESCRIPTOR, IO_PORT_DESCRIPTOR, IO_INTERRUPT_DESCRIPTOR, IO_MEMORY_DESCRIPTOR and IO_DMA_DESCRIPTOR. The last 4 classes are derived from the first one.
These classes models an IO_RESOURCE_DESCRIPTOR structure used in registry data of type REG_RESOURCE_REQUIREMENTS_LIST.
Author:
Jaime Sasson (jaimes) 01-Dec-1993
Environment:
ULIB, User Mode
--*/
#if !defined( _IO_DESCRIPTOR_ )
#define _IO_DESCRIPTOR_
#define _NTAPI_ULIB_
#include "ulib.hxx"
#include "ntconfig.h"
DECLARE_CLASS( IO_DESCRIPTOR );
class IO_DESCRIPTOR : public OBJECT {
public:
VIRTUAL ~IO_DESCRIPTOR( );
VIRTUAL UCHAR GetOption( ) CONST;
VIRTUAL UCHAR GetShareDisposition( ) CONST;
VIRTUAL USHORT GetFlags( ) CONST;
VIRTUAL BOOLEAN IsDescriptorTypePort( ) CONST;
VIRTUAL BOOLEAN IsDescriptorTypeInterrupt( ) CONST;
VIRTUAL BOOLEAN IsDescriptorTypeMemory( ) CONST;
VIRTUAL BOOLEAN IsDescriptorTypeDma( ) CONST;
VIRTUAL BOOLEAN IsResourceOptionPreferred( ) CONST;
VIRTUAL BOOLEAN IsResourceOptionAlternative( ) CONST;
VIRTUAL BOOLEAN IsResourceShareUndetermined( ) CONST;
VIRTUAL BOOLEAN IsResourceShareDeviceExclusive( ) CONST;
VIRTUAL BOOLEAN IsResourceShareDriverExclusive( ) CONST;
VIRTUAL BOOLEAN IsResourceShareShared( ) CONST;
protected:
DECLARE_CONSTRUCTOR( IO_DESCRIPTOR );
NONVIRTUAL BOOLEAN Initialize( IN UCHAR Option, IN UCHAR Type, IN UCHAR ShareDisposition, IN USHORT Flags );
#if DBG
VIRTUAL VOID DbgDumpObject( ); #endif
private:
NONVIRTUAL VOID Construct( );
UCHAR _Option; UCHAR _Type; UCHAR _ShareDisposition; USHORT _Flags; };
INLINE BOOLEAN IO_DESCRIPTOR::Initialize( IN UCHAR Option, IN UCHAR Type, IN UCHAR ShareDisposition, IN USHORT Flags )
/*++
Routine Description:
Initializes an object of type IO_DESCRIPTOR.
Arguments:
Option -
Type -
ShareDisposition -
Flags -
Return Value:
Returns TRUE if the initialization succeeded, or FALSE otherwise.
--*/
{ _Option = Option; _Type = Type; _ShareDisposition = ShareDisposition; _Flags = Flags; return( TRUE ); }
INLINE UCHAR IO_DESCRIPTOR::GetOption( ) CONST
/*++
Routine Description:
Return the device descriptor's share disposition.
Arguments:
None.
Return Value:
Returns the device descriptor's share disposition.
--*/
{ return( _Option ); }
INLINE UCHAR IO_DESCRIPTOR::GetShareDisposition( ) CONST
/*++
Routine Description:
Return the device descriptor's share disposition.
Arguments:
None.
Return Value:
Returns the device descriptor's share disposition.
--*/
{ return( _ShareDisposition ); }
INLINE USHORT IO_DESCRIPTOR::GetFlags( ) CONST
/*++
Routine Description:
Return the device descriptor's flags.
Arguments:
None.
Return Value:
Returns the device descriptor's flags.
--*/
{ return( _Flags ); }
INLINE BOOLEAN IO_DESCRIPTOR::IsDescriptorTypePort( ) CONST
/*++
Routine Description:
Determine whether or not this object represents a IO_PORT_DESCRIPTOR.
Arguments:
None.
Return Value:
Returns TRUE if the object represents a IO_PORT_DESCRIPTOR.
--*/
{ return( _Type == CmResourceTypePort ); }
INLINE BOOLEAN IO_DESCRIPTOR::IsDescriptorTypeInterrupt( ) CONST
/*++
Routine Description:
Determine whether or not this object represents a IO_INTERRUPT_DESCRIPTOR.
Arguments:
None.
Return Value:
Returns TRUE if the object represents a IO_INTERRUPT_DESCRIPTOR.
--*/
{ return( _Type == CmResourceTypeInterrupt ); }
INLINE BOOLEAN IO_DESCRIPTOR::IsDescriptorTypeMemory( ) CONST
/*++
Routine Description:
Determine whether or not this object represents a IO_DESCRIPTOR.
Arguments:
None.
Return Value:
Returns TRUE if the object represents a IO_MEMORY_DESCRIPTOR.
--*/
{ return( _Type == CmResourceTypeMemory ); }
INLINE BOOLEAN IO_DESCRIPTOR::IsDescriptorTypeDma( ) CONST
/*++
Routine Description:
Determine whether or not this object represents a IO_DMA_DESCRIPTOR.
Arguments:
None.
Return Value:
Returns TRUE if the object represents a IO_DMA_DESCRIPTOR.
--*/
{ return( _Type == CmResourceTypeDma ); }
INLINE BOOLEAN IO_DESCRIPTOR::IsResourceOptionPreferred( ) CONST
/*++
Routine Description:
Determine whether or not the option of the device represented by this object has the IO_RESOURCE_PREFERRED bit set.
Arguments:
None.
Return Value:
Returns TRUE if the resource option has IO_RESOURCE_PREFERRED bit set.
--*/
{ return( ( _Option & IO_RESOURCE_PREFERRED ) == IO_RESOURCE_PREFERRED ); }
INLINE BOOLEAN IO_DESCRIPTOR::IsResourceOptionAlternative( ) CONST
/*++
Routine Description:
Determine whether or not the option of the device represented by this object has the IO_RESOURCE_ALTERNATIVE bit set.
Arguments:
None.
Return Value:
Returns TRUE if the resource option has IO_RESOURCE_ALTERNATIVE bit set.
--*/
{ return( ( _Option & IO_RESOURCE_ALTERNATIVE ) == IO_RESOURCE_ALTERNATIVE ); }
INLINE BOOLEAN IO_DESCRIPTOR::IsResourceShareUndetermined( ) CONST
/*++
Routine Description:
Determine whether or not the share of the device represented by this object is undetermined.
Arguments:
None.
Return Value:
Returns TRUE if the share is undetermined.
--*/
{ return( _ShareDisposition == CmResourceShareUndetermined ); }
INLINE BOOLEAN IO_DESCRIPTOR::IsResourceShareDeviceExclusive( ) CONST
/*++
Routine Description:
Determine whether or not the share of the device represented by this object is device exclusive.
Arguments:
None.
Return Value:
Returns TRUE if the share is device exclusive.
--*/
{ return( _ShareDisposition == CmResourceShareDeviceExclusive ); }
INLINE BOOLEAN IO_DESCRIPTOR::IsResourceShareDriverExclusive( ) CONST
/*++
Routine Description:
Determine whether or not the share of the device represented by this object is driver exclusive.
Arguments:
None.
Return Value:
Returns TRUE if the share is driver exclusive.
--*/
{ return( _ShareDisposition == CmResourceShareDriverExclusive ); }
INLINE BOOLEAN IO_DESCRIPTOR::IsResourceShareShared( ) CONST
/*++
Routine Description:
Determine whether or not the share of the device represented by this object is shared.
Arguments:
None.
Return Value:
Returns TRUE if the share is shared.
--*/
{ return( _ShareDisposition == CmResourceShareShared ); }
// #endif // _IO_DESCRIPTOR_
// #if !defined( _IO_PORT_DESCRIPTOR_ )
// #define _IO_PORT_DESCRIPTOR_
// #define _NTAPI_ULIB_
// #include "ulib.hxx"
// #include "ntconfig.h"
DECLARE_CLASS( IO_PORT_DESCRIPTOR );
class IO_PORT_DESCRIPTOR : public IO_DESCRIPTOR {
public:
NONVIRTUAL ~IO_PORT_DESCRIPTOR( );
DECLARE_CONSTRUCTOR( IO_PORT_DESCRIPTOR );
NONVIRTUAL BOOLEAN Initialize( IN ULONG Length, IN ULONG Alignment, IN PPHYSICAL_ADDRESS MinimumAddress, IN PPHYSICAL_ADDRESS MaximumAddress, IN UCHAR Option, IN UCHAR ShareDisposition, IN USHORT Flags );
NONVIRTUAL ULONG GetAlignment( ) CONST;
NONVIRTUAL ULONG GetLength( ) CONST;
NONVIRTUAL PPHYSICAL_ADDRESS GetMinimumAddress( ); // CONST;
NONVIRTUAL PPHYSICAL_ADDRESS GetMaximumAddress( ); // CONST;
NONVIRTUAL BOOLEAN IsPortIo( ) CONST;
NONVIRTUAL BOOLEAN IsPortMemory( ) CONST;
#if DBG
VIRTUAL VOID DbgDumpObject( ); #endif
private:
NONVIRTUAL VOID Construct( );
ULONG _Length; ULONG _Alignment; PHYSICAL_ADDRESS _MinimumAddress; PHYSICAL_ADDRESS _MaximumAddress; };
INLINE BOOLEAN IO_PORT_DESCRIPTOR::Initialize( IN ULONG Length, IN ULONG Alignment, IN PPHYSICAL_ADDRESS MinimumAddress, IN PPHYSICAL_ADDRESS MaximumAddress, IN UCHAR Option, IN UCHAR ShareDisposition, IN USHORT Flags )
/*++
Routine Description:
Initialize a PORT_DESCRIPTOR object.
Arguments:
Length -
Alignment -
MinimumAddress -
MaximumAddress -
Option -
ShareDisposition -
Flags -
Return Value:
BOOLEAN - Returns TRUE if the operation succeeeds.
--*/
{ _Length = Length; _Alignment = Alignment; _MinimumAddress = *MinimumAddress; _MaximumAddress = *MaximumAddress; return( IO_DESCRIPTOR::Initialize( Option, CmResourceTypePort, ShareDisposition, Flags ) ); }
INLINE ULONG IO_PORT_DESCRIPTOR::GetLength( ) CONST
/*++
Routine Description:
Returns the port's length.
Arguments:
None.
Return Value:
ULONG - Return the port's length.
--*/
{ return( _Length ); }
INLINE ULONG IO_PORT_DESCRIPTOR::GetAlignment( ) CONST
/*++
Routine Description:
Returns the port's alignment.
Arguments:
None.
Return Value:
ULONG - Port's alignment.
--*/
{ return( _Alignment ); }
INLINE PPHYSICAL_ADDRESS IO_PORT_DESCRIPTOR::GetMinimumAddress( ) // CONST
/*++
Routine Description:
Returns the port's minimum address.
Arguments:
None.
Return Value:
PPHYSICAL_ADDRESS - Pointer to the structure that describes the port's minimum address.
--*/
{ return( &_MinimumAddress ); }
INLINE PPHYSICAL_ADDRESS IO_PORT_DESCRIPTOR::GetMaximumAddress( ) // CONST
/*++
Routine Description:
Returns the port's maximum address.
Arguments:
None.
Return Value:
PPHYSICAL_ADDRESS - Pointer to the structure that describes the port's maximum address.
--*/
{ return( &_MaximumAddress ); }
INLINE BOOLEAN IO_PORT_DESCRIPTOR::IsPortIo( ) CONST
/*++
Routine Description:
Return whether or not the port is an I/O.
Arguments:
None.
Return Value:
BOOLEAN - Returns TRUE if the port is an I/O. Returns FALSE otherwise.
--*/
{ return( ( IO_DESCRIPTOR::GetFlags() & CM_RESOURCE_PORT_IO ) == CM_RESOURCE_PORT_IO ); }
INLINE BOOLEAN IO_PORT_DESCRIPTOR::IsPortMemory( ) CONST
/*++
Routine Description:
Return whether or not the port is mapped in memory.
Arguments:
None.
Return Value:
BOOLEAN - Returns TRUE if the port is mapped in memory. Returns FALSE otherwise.
--*/
{ return( IO_DESCRIPTOR::GetFlags() == CM_RESOURCE_PORT_MEMORY ); }
// #endif // _IO_PORT_DESCRIPTOR_
// #if !defined( _IO_INTERRUPT_DESCRIPTOR_ )
// #define _IO_INTERRUPT_DESCRIPTOR_
// #define _NTAPI_ULIB_
// #include "ulib.hxx"
// #include "ntconfig.h"
DECLARE_CLASS( IO_INTERRUPT_DESCRIPTOR );
class IO_INTERRUPT_DESCRIPTOR : public IO_DESCRIPTOR {
public:
NONVIRTUAL ~IO_INTERRUPT_DESCRIPTOR( );
DECLARE_CONSTRUCTOR( IO_INTERRUPT_DESCRIPTOR );
NONVIRTUAL BOOLEAN Initialize( IN ULONG MinimumVector, IN ULONG MaximumVector, IN UCHAR Option, IN UCHAR ShareDisposition, IN USHORT Flags );
NONVIRTUAL ULONG GetMinimumVector( ) CONST;
NONVIRTUAL ULONG GetMaximumVector( ) CONST;
NONVIRTUAL BOOLEAN IsInterruptLevelSensitive( ) CONST;
NONVIRTUAL BOOLEAN IsInterruptLatched( ) CONST;
#if DBG
VIRTUAL VOID DbgDumpObject( ); #endif
private:
NONVIRTUAL VOID Construct( );
ULONG _MinimumVector; ULONG _MaximumVector; };
INLINE BOOLEAN IO_INTERRUPT_DESCRIPTOR::Initialize( IN ULONG MinimumVector, IN ULONG MaximumVector, IN UCHAR Option, IN UCHAR ShareDisposition, IN USHORT Flags )
/*++
Routine Description:
Initialize an IO_INTERRUPT_DESCRIPTOR object.
Arguments:
MinimumVector -
MaximumVector -
Option -
ShareDisposition -
Flags -
Return Value:
BOOLEAN - Returns TRUE if the operation succeeeds.
--*/
{ _MinimumVector = MinimumVector; _MaximumVector = MaximumVector; return( IO_DESCRIPTOR::Initialize( Option, CmResourceTypeInterrupt, ShareDisposition, Flags ) ); }
INLINE ULONG IO_INTERRUPT_DESCRIPTOR::GetMinimumVector( ) CONST
/*++
Routine Description:
Returns the interrupt's minimum vector.
Arguments:
None.
Return Value:
ULONG - Interrupt's minimum vector.
--*/
{ return( _MinimumVector ); }
INLINE ULONG IO_INTERRUPT_DESCRIPTOR::GetMaximumVector( ) CONST
/*++
Routine Description:
Returns the interrupt's maximum vector.
Arguments:
None.
Return Value:
ULONG - Return the interrupt's maximum vector.
--*/
{ return( _MaximumVector ); }
INLINE BOOLEAN IO_INTERRUPT_DESCRIPTOR::IsInterruptLevelSensitive( ) CONST
/*++
Routine Description:
Return whether or not the interrupt is level sensitive.
Arguments:
None.
Return Value:
BOOLEAN - Return TRUE if the interrupt is level sensitive.
--*/
{ return( IO_DESCRIPTOR::GetFlags() == CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE ); }
INLINE BOOLEAN IO_INTERRUPT_DESCRIPTOR::IsInterruptLatched( ) CONST
/*++
Routine Description:
Return whether or not the interrupt is latched.
Arguments:
None.
Return Value:
BOOLEAN - Return TRUE if the interrupt is latched.
--*/
{ return( ( IO_DESCRIPTOR::GetFlags() & CM_RESOURCE_INTERRUPT_LATCHED ) == CM_RESOURCE_INTERRUPT_LATCHED ); }
// #endif // _IO_INTERRUPT_DESCRIPTOR_
// #if !defined( _IO_MEMORY_DESCRIPTOR_ )
// #define _MEMORY_DESCRIPTOR_
// #define _NTAPI_ULIB_
// #include "ulib.hxx"
// #include "ntconfig.h"
DECLARE_CLASS( IO_MEMORY_DESCRIPTOR );
class IO_MEMORY_DESCRIPTOR : public IO_DESCRIPTOR {
public:
NONVIRTUAL ~IO_MEMORY_DESCRIPTOR( );
DECLARE_CONSTRUCTOR( IO_MEMORY_DESCRIPTOR );
NONVIRTUAL BOOLEAN Initialize( IN ULONG Length, IN ULONG Alignment, IN PPHYSICAL_ADDRESS MinimumAddress, IN PPHYSICAL_ADDRESS MaximumAddress, IN UCHAR Option, IN UCHAR ShareDisposition, IN USHORT Flags );
NONVIRTUAL ULONG GetAlignment( ) CONST;
NONVIRTUAL ULONG GetLength( ) CONST;
NONVIRTUAL PPHYSICAL_ADDRESS GetMinimumAddress( ); // CONST;
NONVIRTUAL PPHYSICAL_ADDRESS GetMaximumAddress( ); // CONST;
NONVIRTUAL BOOLEAN IsMemoryReadWrite( ) CONST;
NONVIRTUAL BOOLEAN IsMemoryReadOnly( ) CONST;
NONVIRTUAL BOOLEAN IsMemoryWriteOnly( ) CONST;
#if DBG
VIRTUAL VOID DbgDumpObject( ); #endif
private:
NONVIRTUAL VOID Construct( );
ULONG _Length; ULONG _Alignment; PHYSICAL_ADDRESS _MinimumAddress; PHYSICAL_ADDRESS _MaximumAddress; };
INLINE BOOLEAN IO_MEMORY_DESCRIPTOR::Initialize( IN ULONG Length, IN ULONG Alignment, IN PPHYSICAL_ADDRESS MinimumAddress, IN PPHYSICAL_ADDRESS MaximumAddress, IN UCHAR Option, IN UCHAR ShareDisposition, IN USHORT Flags )
/*++
Routine Description:
Initialize an IO_MEMORY_DESCRIPTOR object.
Arguments:
Length -
Alignment -
MinimumAddress -
MaximumAddress -
Option -
ShareDisposition -
Flags -
Return Value:
BOOLEAN - Returns TRUE if the operation succeeeds.
--*/
{ _Length = Length; _Alignment = Alignment; _MinimumAddress = *MinimumAddress; _MaximumAddress = *MaximumAddress; return( IO_DESCRIPTOR::Initialize( Option, CmResourceTypeMemory, ShareDisposition, Flags ) ); }
INLINE ULONG IO_MEMORY_DESCRIPTOR::GetAlignment( ) CONST
/*++
Routine Description:
Returns the memory's alignment.
Arguments:
None.
Return Value:
ULONG - Memory's alignment.
--*/
{ return( _Alignment ); }
INLINE ULONG IO_MEMORY_DESCRIPTOR::GetLength( ) CONST
/*++
Routine Description:
Returns the memory's length.
Arguments:
None.
Return Value:
ULONG - Return the memory's length.
--*/
{ return( _Length ); }
INLINE PPHYSICAL_ADDRESS IO_MEMORY_DESCRIPTOR::GetMinimumAddress( ) // CONST
/*++
Routine Description:
Returns the memory's minimum address.
Arguments:
None.
Return Value:
PPHYSICAL_ADDRESS - Memory's minimum address.
--*/
{ return( &_MinimumAddress ); }
INLINE PPHYSICAL_ADDRESS IO_MEMORY_DESCRIPTOR::GetMaximumAddress( ) // CONST
/*++
Routine Description:
Returns the memory's maximum address.
Arguments:
None.
Return Value:
PPHYSICAL_ADDRESS - Memory's maximum address.
--*/
{ return( &_MaximumAddress ); }
INLINE BOOLEAN IO_MEMORY_DESCRIPTOR::IsMemoryReadWrite( ) CONST
/*++
Routine Description:
Return whether or not the memory is Read/Write.
Arguments:
None.
Return Value:
BOOLEAN - Return TRUE if the memory is Read/Write.
--*/
{ return( IO_DESCRIPTOR::GetFlags() == CM_RESOURCE_MEMORY_READ_WRITE ); }
INLINE BOOLEAN IO_MEMORY_DESCRIPTOR::IsMemoryReadOnly( ) CONST
/*++
Routine Description:
Return whether or not the memory is ReadOnly.
Arguments:
None.
Return Value:
BOOLEAN - Return TRUE if the memory is ReadOnly.
--*/
{ return( ( IO_DESCRIPTOR::GetFlags() & CM_RESOURCE_MEMORY_READ_ONLY ) == CM_RESOURCE_MEMORY_READ_ONLY ); }
INLINE BOOLEAN IO_MEMORY_DESCRIPTOR::IsMemoryWriteOnly( ) CONST
/*++
Routine Description:
Return whether or not the memory is WriteOnly.
Arguments:
None.
Return Value:
BOOLEAN - Return TRUE if the memory is WriteOnly.
--*/
{ return( ( IO_DESCRIPTOR::GetFlags() & CM_RESOURCE_MEMORY_WRITE_ONLY ) == CM_RESOURCE_MEMORY_WRITE_ONLY ); }
// #endif // _IO_MEMORY_DESCRIPTOR_
// #if !defined( _IO_DMA_DESCRIPTOR_ )
// #define _IO_DMA_DESCRIPTOR_
// #define _NTAPI_ULIB_
// #include "ulib.hxx"
// #include "ntconfig.h"
DECLARE_CLASS( IO_DMA_DESCRIPTOR );
class IO_DMA_DESCRIPTOR : public IO_DESCRIPTOR {
public:
NONVIRTUAL ~IO_DMA_DESCRIPTOR( );
DECLARE_CONSTRUCTOR( IO_DMA_DESCRIPTOR );
NONVIRTUAL BOOLEAN Initialize( IN ULONG MinimumChannel, IN ULONG MaximumChannel, IN UCHAR Option, IN UCHAR ShareDisposition, IN USHORT Flags );
NONVIRTUAL ULONG GetMinimumChannel( ) CONST;
NONVIRTUAL ULONG GetMaximumChannel( ) CONST;
#if DBG
VIRTUAL VOID DbgDumpObject( ); #endif
private:
NONVIRTUAL VOID Construct( );
ULONG _MinimumChannel; ULONG _MaximumChannel; };
INLINE BOOLEAN IO_DMA_DESCRIPTOR::Initialize( IN ULONG MinimumChannel, IN ULONG MaximumChannel, IN UCHAR Option, IN UCHAR ShareDisposition, IN USHORT Flags )
/*++
Routine Description:
Initialize an IO_DMA_DESCRIPTOR object.
Arguments:
MinimumChannel -
MaximumChannel -
Option -
ShareDisposition -
Flags -
Return Value:
BOOLEAN - Returns TRUE if the operation succeeeds.
--*/
{ _MinimumChannel = MinimumChannel; _MaximumChannel = MaximumChannel; return( IO_DESCRIPTOR::Initialize( Option, CmResourceTypeDma, ShareDisposition, Flags ) ); }
INLINE ULONG IO_DMA_DESCRIPTOR::GetMinimumChannel( ) CONST
/*++
Routine Description:
Returns the DMA's minimum channel.
Arguments:
None.
Return Value:
ULONG - Return the DMA's minimum channel.
--*/
{ return( _MinimumChannel ); }
INLINE ULONG IO_DMA_DESCRIPTOR::GetMaximumChannel( ) CONST
/*++
Routine Description:
Returns the DMA's maximum channel.
Arguments:
None.
Return Value:
ULONG - Return the DMA's maximum channel.
--*/
{ return( _MaximumChannel ); }
// #endif // _IO_DMA_DESCRIPTOR_
#endif // _IO_DESCRIPTOR_
|