96 lines
2.9 KiB
C++
96 lines
2.9 KiB
C++
// $Header: G:/SwDev/WDM/Video/bt848/rcs/Regbase.h 1.5 1998/05/08 00:11:02 tomz Exp $
|
|
|
|
#ifndef __REGBASE_H
|
|
#define __REGBASE_H
|
|
|
|
#include "mytypes.h"
|
|
|
|
/* Type: AllFs
|
|
* Purpose: To be used as an error return value from register accessing
|
|
* functions. All bits are set to 1.
|
|
*/
|
|
const DWORD AllFs = (DWORD) ~0L;
|
|
|
|
/* Function: ReturnAllFs
|
|
* Purpose: This function is used in the register access methods to indicate
|
|
* that some sort of error has occured. Used for easing the debugging, as
|
|
* it contains a macro to print the error if DEBUG is #defined
|
|
*/
|
|
inline DWORD ReturnAllFs()
|
|
{
|
|
// OUTPUT_MESS( ALLFS );
|
|
return AllFs;
|
|
}
|
|
|
|
/*
|
|
* Type: RegisterType
|
|
* Purpose: A type to differentiate between diferent kinds of registers.
|
|
* Depending on the type register may not peforms certain operations
|
|
* RW - read/write, RO - read-only, WO - write-only
|
|
*/
|
|
typedef enum { RW, RO, WO, RR } RegisterType;
|
|
|
|
/* Class: RegBase
|
|
* Purpose:
|
|
* Defines the interface and encapsulates the register access.
|
|
* Attributes:
|
|
* pBaseAddress_: DWORD, static. Holds the base address of the registers. On the
|
|
* PCI bus it is a 32 bit memory address. On the ISA bus it is a 16 bit I/O address.
|
|
* type_: RegisterType - defines the access permission for the register.
|
|
* dwShadow_: DWORD - a local copy of the register. Used for returning a value
|
|
* of write-only registers
|
|
* Operations:
|
|
* operator DWORD(): data access method. Pure virtual
|
|
* DWORD operator=( DWORD ): assignment operator. Pure virtual. This assignment
|
|
* operator does not return a reference to the class because of the performance reasons
|
|
* void SetBaseAddress( DWORD )
|
|
* DWORD GetBaseAddress()
|
|
* RegisterType GetRegisterType()
|
|
* void SetShadow( DWORD ): assigns a value of a register to a shadow
|
|
* DWORD GetShadow( void ): retrieves a value from a shadow
|
|
*/
|
|
class RegBase
|
|
{
|
|
private:
|
|
RegisterType type_;
|
|
DWORD dwShadow_;
|
|
|
|
RegBase();
|
|
|
|
protected:
|
|
void SetShadow( DWORD dwValue );
|
|
DWORD GetShadow();
|
|
public:
|
|
RegBase( RegisterType aType ) :
|
|
type_( aType ), dwShadow_( 0 )
|
|
{}
|
|
|
|
static LPBYTE GetBaseAddress() {
|
|
extern BYTE *GetBase();
|
|
return GetBase();
|
|
}
|
|
RegisterType GetRegisterType() { return type_; }
|
|
virtual operator DWORD() = 0;
|
|
virtual DWORD operator=( DWORD dwValue ) = 0;
|
|
virtual ~RegBase() {}
|
|
};
|
|
|
|
/* Method: RegBase::SetShadow
|
|
* Purpose: Used to store the value of a register in the shadow
|
|
* Input: dwValue: DWORD - new value of a register
|
|
* Output: None
|
|
* Note: inline
|
|
*/
|
|
inline void RegBase::SetShadow( DWORD dwValue ) { dwShadow_ = dwValue; }
|
|
|
|
/* Method: RegBase::GetShadow
|
|
* Purpose: Used to obtain the last value written to a write-only register
|
|
* from the shadow
|
|
* Input: None
|
|
* Output: DWORD
|
|
* Note: inline
|
|
*/
|
|
inline DWORD RegBase::GetShadow() { return dwShadow_; }
|
|
|
|
#endif __REGBASE_H
|