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.
|
|
#pragma once
//==========================================================================;
//
// Declaration of the Bt829 Register manipulation classes
//
// $Date: 05 Aug 1998 11:31:48 $
// $Revision: 1.0 $
// $Author: Tashjian $
//
// $Copyright: (c) 1997 - 1998 ATI Technologies Inc. All Rights Reserved. $
//
//==========================================================================;
#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 = ~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(): retrieves a value from a shadow */ class RegBase { private: static DWORD dwBaseAddress_; RegisterType type_; DWORD dwShadow_;
RegBase();
protected: void SetShadow(DWORD dwValue); DWORD GetShadow(); public: RegBase(RegisterType aType) : type_(aType), dwShadow_(0) {}
RegBase(RegBase& aReg) : type_(aReg.GetRegisterType()), dwShadow_(0) {}
static void SetBaseAddress(DWORD dwBase) { dwBaseAddress_ = dwBase; } static LPBYTE GetBaseAddress() { return (LPBYTE)(ULONG_PTR)dwBaseAddress_; } 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_; }
|