#if defined( __i386__ )
#include <IOKit/IOTypes.h>
#include <pexpert/i386/protos.h> // x86 IN/OUT inline asm
#include "IOATARegI386.h"
OSDefineMetaClassAndAbstractStructors( IOATAReg8, OSObject )
OSDefineMetaClassAndAbstractStructors( IOATAReg16, OSObject )
OSDefineMetaClassAndAbstractStructors( IOATAReg32, OSObject )
OSDefineMetaClassAndStructors( IOATAIOReg8, IOATAReg8 )
OSDefineMetaClassAndStructors( IOATAIOReg16, IOATAReg16 )
OSDefineMetaClassAndStructors( IOATAIOReg32, IOATAReg32 )
#define ImplementIOATAIOReg(w, s) \
IOATAIOReg##w * IOATAIOReg##w::withAddress( UInt16 address ) \
{ \
IOATAIOReg##w * reg = new IOATAIOReg##w; \
\
if ( reg && !reg->initWithAddress(address) ) \
{ \
reg->release(); \
reg = 0; \
} \
return reg; \
} \
\
bool IOATAIOReg##w::initWithAddress( UInt16 address ) \
{ \
if ( IOATAReg##w::init() == false ) return false; \
_address = address; \
return true; \
} \
\
UInt16 IOATAIOReg##w::getAddress() const \
{ \
return _address; \
} \
\
void IOATAIOReg##w::operator = (UInt##w rhs) \
{ \
out##s(_address, rhs); \
} \
\
IOATAIOReg##w::operator UInt##w() const \
{ \
return in##s(_address); \
}
ImplementIOATAIOReg( 8, b )
ImplementIOATAIOReg( 16, w )
ImplementIOATAIOReg( 32, l )
#endif