mirror of https://github.com/tongzx/nt5src
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.
212 lines
5.4 KiB
212 lines
5.4 KiB
//***************************************************************************
|
|
//
|
|
// FileName:
|
|
// $Workfile: ioif.h $
|
|
//
|
|
// Author:
|
|
// TOSHIBA [PCS](PSY) Seiichi Nakamura
|
|
// Copyright (c) 1997 TOSHIBA CORPORATION
|
|
//
|
|
// Description:
|
|
//
|
|
//***************************************************************************
|
|
// $Header: /DVD Drivers/Sources/ZiVAHAL/ioif.h 1 97/06/27 23:22 Seichan $
|
|
// $Modtime: 97/06/23 19:37 $
|
|
// $Nokeywords:$
|
|
//***************************************************************************
|
|
|
|
|
|
#ifndef _IOIF_H_
|
|
#define _IOIF_H_
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// IO Template Class
|
|
//---------------------------------------------------------------------------
|
|
template<class T> class CIOTemplate
|
|
{
|
|
private:
|
|
IKernelService *m_pKernelObj;
|
|
DWORD m_dwAddr;
|
|
|
|
public:
|
|
CIOTemplate( void ): m_pKernelObj(NULL)
|
|
{
|
|
};
|
|
|
|
inline void Init( IKernelService *m_pObj, DWORD Addr )
|
|
{
|
|
m_pKernelObj = m_pObj;
|
|
m_dwAddr = Addr;
|
|
};
|
|
|
|
inline BYTE Get( DWORD offset )
|
|
{
|
|
ASSERT( offset < sizeof( T ) );
|
|
BYTE Data;
|
|
m_pKernelObj->GetPortData(m_dwAddr+offset, &Data);
|
|
return Data;
|
|
};
|
|
|
|
// Data Write by offset.
|
|
inline void Set( DWORD offset, BYTE Data )
|
|
{
|
|
ASSERT( 0 <= offset && offset < sizeof( T ) );
|
|
m_pKernelObj->SetPortData( m_dwAddr + offset, Data );
|
|
};
|
|
|
|
CIOTemplate& operator=(const T &Data )
|
|
{
|
|
ASSERT( m_pKernelObj != NULL );
|
|
m_pKernelObj->SetPortData( m_dwAddr, Data );
|
|
return *this;
|
|
};
|
|
|
|
operator T()
|
|
{
|
|
ASSERT( m_pKernelObj != NULL );
|
|
T Ret;
|
|
m_pKernelObj->GetPortData( m_dwAddr, &Ret );
|
|
return Ret;
|
|
};
|
|
|
|
CIOTemplate& operator&=(const T &Data )
|
|
{
|
|
ASSERT( m_pKernelObj != NULL );
|
|
T GetData;
|
|
m_pKernelObj->GetPortData(m_dwAddr, &GetData);
|
|
GetData &= Data;
|
|
m_pKernelObj->SetPortData(m_dwAddr, GetData );
|
|
return *this;
|
|
};
|
|
|
|
CIOTemplate& operator|=(const T &Data )
|
|
{
|
|
ASSERT( m_pKernelObj != NULL );
|
|
T GetData;
|
|
m_pKernelObj->GetPortData(m_dwAddr, &GetData);
|
|
GetData |= Data;
|
|
m_pKernelObj->SetPortData(m_dwAddr, GetData );
|
|
return *this;
|
|
};
|
|
|
|
|
|
};
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// IO Class definition
|
|
//---------------------------------------------------------------------------
|
|
typedef CIOTemplate< DWORD > CDWORDIO;
|
|
typedef CIOTemplate< WORD > CWORDIO;
|
|
typedef CIOTemplate< BYTE > CBYTEIO;
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// PCI interface control class
|
|
//---------------------------------------------------------------------------
|
|
class CIOIF
|
|
{
|
|
// Luke register class
|
|
class CLuke2
|
|
{
|
|
public:
|
|
CDWORDIO IO_CONT; // control register
|
|
CWORDIO IO_INTF; // interrupt flag register
|
|
CDWORDIO IO_MADR; // master address register
|
|
CDWORDIO IO_MTC; // master transfer counter register
|
|
|
|
CBYTEIO IO_CPLT; // color pallet data register
|
|
CBYTEIO IO_CPCNT; // color paller control register
|
|
CWORDIO AVCONT; // AV control register
|
|
|
|
CBYTEIO IO_VMODE; // digital video output mode register
|
|
CBYTEIO IO_HSCNT; // digital video h-sync count register
|
|
CBYTEIO IO_VPCNT; // digital video V-sync count register
|
|
CBYTEIO IO_POL; // digital video V/H-sync. Polarity register
|
|
|
|
CDWORDIO I2C_CONT; // IIC access register
|
|
CBYTEIO I2C_ERR; // IIC error register
|
|
CBYTEIO IO_EEPROM; // EEPROM access register
|
|
CBYTEIO IO_PSCNT; // program steram control register
|
|
CBYTEIO IO_TEST; // TEST control register
|
|
|
|
CBYTEIO RST_CONT; // reset control register
|
|
CDWORDIO STCCUNT; // STC counter register
|
|
CWORDIO STCCONT; // STC control register
|
|
|
|
CDWORDIO DMA_Start_Address; //
|
|
CDWORDIO DMA_Byte_Count; //
|
|
CDWORDIO Counter_Test; //
|
|
CDWORDIO STCREF; // STC interrupt reference
|
|
|
|
public:
|
|
void Init( IKernelService *pKernelObj )
|
|
{
|
|
IO_CONT.Init( pKernelObj , 0x00 );
|
|
IO_INTF.Init( pKernelObj , 0x04 );
|
|
IO_MADR.Init( pKernelObj , 0x08 );
|
|
IO_MTC.Init( pKernelObj , 0x0c );
|
|
|
|
IO_CPLT.Init( pKernelObj , 0x10 );
|
|
IO_CPCNT.Init( pKernelObj , 0x11 );
|
|
AVCONT.Init( pKernelObj , 0x12 );
|
|
|
|
IO_VMODE.Init( pKernelObj , 0x14 );
|
|
IO_HSCNT.Init( pKernelObj , 0x15 );
|
|
IO_VPCNT.Init( pKernelObj , 0x16 );
|
|
IO_POL.Init( pKernelObj , 0x17 );
|
|
|
|
I2C_CONT.Init( pKernelObj , 0x18 );
|
|
I2C_ERR.Init( pKernelObj , 0x1c );
|
|
IO_EEPROM.Init( pKernelObj , 0x20 );
|
|
IO_PSCNT.Init( pKernelObj , 0x22 );
|
|
IO_TEST.Init( pKernelObj , 0x23 );
|
|
|
|
RST_CONT.Init( pKernelObj , 0x27 );
|
|
STCCUNT.Init( pKernelObj , 0x28 );
|
|
STCCONT.Init( pKernelObj , 0x2c );
|
|
|
|
DMA_Start_Address.Init( pKernelObj , 0x30 );
|
|
DMA_Byte_Count.Init( pKernelObj , 0x34 );
|
|
Counter_Test.Init( pKernelObj , 0x38 );
|
|
STCREF.Init( pKernelObj , 0x3c );
|
|
};
|
|
};
|
|
|
|
//----------------------
|
|
// ZiVA Register class
|
|
//----------------------
|
|
class CZiVAIO
|
|
{
|
|
public:
|
|
CBYTEIO HIO[ 8 ];
|
|
|
|
public:
|
|
void Init( IKernelService *pKernelObj )
|
|
{
|
|
for( int i = 0 ; i < 8 ; i ++ )
|
|
HIO[i].Init( pKernelObj , i + 0x40 );
|
|
};
|
|
};
|
|
|
|
|
|
public:
|
|
CLuke2 luke2; // Luke2 instance
|
|
CZiVAIO zivaio; // DVD1 instance
|
|
|
|
|
|
inline void Init( IKernelService *pKernelObj )
|
|
{
|
|
luke2.Init( pKernelObj );
|
|
zivaio.Init( pKernelObj );
|
|
return;
|
|
};
|
|
|
|
};
|
|
|
|
#endif // _IOIF_H_
|
|
|
|
//***************************************************************************
|
|
// End of
|
|
//***************************************************************************
|