📄 target.h
字号:
typedef unsigned long ULONG;
typedef unsigned long UINT32;
typedef unsigned long* PULONG;
typedef void* PVOID;
typedef int BOOLEAN;
typedef int* PBOOLEAN;
#if 0
typedef unsigned long long ULONGLONG;
typedef unsigned long long* PULONGLONG;
#else
typedef unsigned long ULONGLONG;
typedef unsigned long* PULONGLONG;
#endif
#define MIO_DWORD( x ) *(( volatile unsigned long* )( x ))
#define MIO_WORD( x ) *(( volatile unsigned short* )( x ))
#define MIO_BYTE( x ) *(( volatile unsigned char* )( x ))
#define FAR
#define FALSE 0
#define TRUE 1
#ifdef KS_ISA_BUS
#undef HardwareDisableInterruptSync
void HardwareDisableInterruptSync ( void* pHardware );
#endif
#define NEWLINE "\n"
#define DBG_PRINT printk
#define CPU_TO_LE32( x ) cpu_to_le32( x )
#define LE32_TO_CPU( x ) le32_to_cpu( x )
#ifdef KS_ISA_BUS
/* Special generic bus */
#ifdef SH_BUS
/* 32-bit access */
#ifdef SH_32BIT_ALIGNED
#define HW_READ_BUFFER( phwi, addr, data, len ) \
{ \
PULONG pData = ( PULONG )( data ); \
int nRead = (( len ) + 3 ) >> 2; \
while ( nRead-- ) \
*pData++ = MIO_DWORD(( phwi )->m_ulVIoAddr + ( addr )); \
}
#define HW_WRITE_BUFFER( phwi, addr, data, len ) \
{ \
PULONG pData = ( PULONG )( data ); \
int nWrite = (( len ) + 3 ) >> 2; \
while ( nWrite-- ) \
MIO_DWORD(( phwi )->m_ulVIoAddr + ( addr )) = *pData++; \
}
/* 16-bit access */
#else
#define HW_READ_BUFFER( phwi, addr, data, len ) \
{ \
PUSHORT pData = ( PUSHORT )( data ); \
int nRead = (( len ) + 3 ) >> 2; \
while ( nRead-- ) { \
*pData++ = MIO_WORD(( phwi )->m_ulVIoAddr + ( addr )); \
*pData++ = MIO_WORD(( phwi )->m_ulVIoAddr + ( addr ) + 2 ); \
} \
}
#define HW_WRITE_BUFFER( phwi, addr, data, len ) \
{ \
PUSHORT pData = ( PUSHORT )( data ); \
int nWrite = (( len ) + 3 ) >> 2; \
while ( nWrite-- ) { \
MIO_WORD(( phwi )->m_ulVIoAddr + ( addr )) = *pData++; \
MIO_WORD(( phwi )->m_ulVIoAddr + ( addr ) + 2 ) = *pData++; \
} \
}
#endif
#define HW_READ_BUFFER_WORD( phwi, addr, data, len ) \
{ \
PUSHORT pData = ( PUSHORT )( data ); \
int nRead = (( len ) + 3 ) >> 2; \
while ( nRead-- ) { \
*pData++ = MIO_WORD(( phwi )->m_ulVIoAddr + ( addr )); \
*pData++ = MIO_WORD(( phwi )->m_ulVIoAddr + ( addr ) + 2 ); \
} \
}
#define HW_WRITE_BUFFER_WORD( phwi, addr, data, len ) \
{ \
PUSHORT pData = ( PUSHORT )( data ); \
int nWrite = (( len ) + 3 ) >> 2; \
while ( nWrite-- ) { \
MIO_WORD(( phwi )->m_ulVIoAddr + ( addr )) = *pData++; \
MIO_WORD(( phwi )->m_ulVIoAddr + ( addr ) + 2 ) = *pData++; \
} \
}
#define HW_READ_BUFFER_DWORD( phwi, addr, data, len ) \
{ \
PULONG pData = ( PULONG )( data ); \
int nRead = (( len ) + 3 ) >> 2; \
while ( nRead-- ) \
*pData++ = MIO_DWORD(( phwi )->m_ulVIoAddr + ( addr )); \
}
#define HW_WRITE_BUFFER_DWORD( phwi, addr, data, len ) \
{ \
PULONG pData = ( PULONG )( data ); \
int nWrite = (( len ) + 3 ) >> 2; \
while ( nWrite-- ) \
MIO_DWORD(( phwi )->m_ulVIoAddr + ( addr )) = *pData++; \
}
#ifndef SH_32BIT_ACCESS_ONLY
/*
* Access ks884x register by BYTE\WORD\DWORD
*/
#define HW_READ_BYTE( phwi, addr, data ) \
*( data ) = MIO_BYTE(( phwi )->m_ulVIoAddr + ( addr ))
#define HW_WRITE_BYTE( phwi, addr, data ) \
MIO_BYTE(( phwi )->m_ulVIoAddr + ( addr )) = ( UCHAR )( data )
#define HW_READ_WORD( phwi, addr, data ) \
*( data ) = MIO_WORD(( phwi )->m_ulVIoAddr + ( addr ))
#define HW_WRITE_WORD( phwi, addr, data ) \
MIO_WORD(( phwi )->m_ulVIoAddr + ( addr )) = ( USHORT )( data )
#else
/*
* Access ks884x register by DWORD only
*/
#define HW_READ_BYTE( phwi, addr, data ) \
{ \
UCHAR shiftBit; \
ULONG dwDataRead; \
\
switch ( (addr) & 0x03 ) \
{ \
case 0: \
*data = inb(( unsigned )(( phwi )->m_ulVIoAddr + ( addr ))); \
break; \
default: \
shiftBit=((addr) & 0x03) << 3; \
HW_READ_DWORD( phwi, ((addr) & 0x0C), &dwDataRead ) ; \
*data = (UCHAR)(dwDataRead >>= shiftBit); \
break; \
} \
}
#define HW_WRITE_BYTE( phwi, addr, data ) \
{ \
UCHAR addrByDwordAligned=(addr) & 0x0C; \
UCHAR shiftBit=((addr) & 0x03) << 3; \
ULONG dwDataMask=0xFF; \
ULONG dwDataRead; \
ULONG dwDataWrite=0; \
\
dwDataMask <<= shiftBit; \
HW_READ_DWORD( phwi, addrByDwordAligned, &dwDataRead ) ; \
dwDataRead &= ~dwDataMask ; \
dwDataWrite = ((( data ) << shiftBit ) | dwDataRead ); \
HW_WRITE_DWORD( phwi, addrByDwordAligned, dwDataWrite ) ; \
}
#define HW_READ_WORD( phwi, addr, data ) \
{ \
UCHAR shiftBit; \
ULONG dwDataRead; \
\
switch ( (addr) & 0x03 ) \
{ \
case 0: \
*data = inw(( unsigned )(( phwi )->m_ulVIoAddr + ( addr ))); \
break; \
case 2: \
shiftBit=((addr) & 0x03) << 3; \
HW_READ_DWORD( phwi, ((addr) & 0x0C), &dwDataRead ) ; \
*data = (USHORT)(dwDataRead >>= shiftBit); \
break; \
} \
}
#define HW_WRITE_WORD( phwi, addr, data ) \
{ \
UCHAR addrByDwordAligned=(addr) & 0x0C; \
UCHAR shiftBit=((addr) & 0x03) << 3; \
ULONG dwDataMask=0xFFFF; \
ULONG dwDataRead; \
ULONG dwDataWrite=0; \
\
dwDataMask <<= shiftBit; \
HW_READ_DWORD( phwi, addrByDwordAligned, &dwDataRead ) ; \
dwDataRead &= ~dwDataMask ; \
dwDataWrite = ((( data ) << shiftBit ) | dwDataRead ); \
HW_WRITE_DWORD( phwi, addrByDwordAligned, dwDataWrite ) ; \
}
#endif
#define HW_READ_DWORD( phwi, addr, data ) \
*( data ) = MIO_DWORD(( phwi )->m_ulVIoAddr + ( addr ))
#define HW_WRITE_DWORD( phwi, addr, data ) \
MIO_DWORD(( phwi )->m_ulVIoAddr + ( addr )) = ( ULONG )( data )
#else
#define HW_READ_BUFFER( phwi, addr, data, len ) \
insl(( unsigned )(( phwi )->m_ulVIoAddr + ( addr )), data, \
(( len ) + 3 ) >> 2 )
#define HW_WRITE_BUFFER( phwi, addr, data, len ) \
{ \
outsl(( unsigned )(( phwi )->m_ulVIoAddr + ( addr )), data, \
(( len ) + 3 ) >> 2 ); \
}
#define HW_READ_BUFFER_WORD( phwi, addr, data, len ) \
insw(( unsigned )(( phwi )->m_ulVIoAddr + ( addr )), data, len )
#define HW_WRITE_BUFFER_WORD( phwi, addr, data, len ) \
outsw(( unsigned )(( phwi )->m_ulVIoAddr + ( addr )), data, len )
#define HW_READ_BUFFER_DWORD( phwi, addr, data, len ) \
insl(( unsigned )(( phwi )->m_ulVIoAddr + ( addr )), data, len )
#define HW_WRITE_BUFFER_DWORD( phwi, addr, data, len ) \
outsl(( unsigned )(( phwi )->m_ulVIoAddr + ( addr )), data, len )
#define HW_READ_BYTE( phwi, addr, data ) \
*data = inb(( unsigned )(( phwi )->m_ulVIoAddr + ( addr )))
#define HW_WRITE_BYTE( phwi, addr, data ) \
outb( data, ( unsigned )(( phwi )->m_ulVIoAddr + ( addr )))
#define HW_READ_WORD( phwi, addr, data ) \
*data = inw(( unsigned )(( phwi )->m_ulVIoAddr + ( addr )))
#define HW_WRITE_WORD( phwi, addr, data ) \
outw(( USHORT )( data ), ( unsigned )(( phwi )->m_ulVIoAddr + ( addr )))
#define HW_READ_DWORD( phwi, addr, data ) \
*data = inl(( unsigned )(( phwi )->m_ulVIoAddr + ( addr )))
#define HW_WRITE_DWORD( phwi, addr, data ) \
outl( data, ( unsigned )(( phwi )->m_ulVIoAddr + ( addr )))
#endif
#endif
#ifdef KS_PCI_BUS
/* Renesas 7751R Solution Engine kernel code uses functions to access I/O. */
#ifdef CONFIG_SH_7751_SOLUTION_ENGINE
#define HW_READ_BYTE( phwi, addr, data ) \
*( data ) = MIO_BYTE(( phwi )->m_pVirtualMemory + ( addr ))
#define HW_WRITE_BYTE( phwi, addr, data ) \
MIO_BYTE(( phwi )->m_pVirtualMemory + ( addr )) = ( UCHAR )( data )
#define HW_READ_WORD( phwi, addr, data ) \
*( data ) = MIO_WORD(( phwi )->m_pVirtualMemory + ( addr ))
#define HW_WRITE_WORD( phwi, addr, data ) \
MIO_WORD(( phwi )->m_pVirtualMemory + ( addr )) = ( USHORT )( data )
#define HW_READ_DWORD( phwi, addr, data ) \
*( data ) = MIO_DWORD(( phwi )->m_pVirtualMemory + ( addr ))
#define HW_WRITE_DWORD( phwi, addr, data ) \
{ \
MIO_WORD(( phwi )->m_pVirtualMemory + ( addr )) = ( USHORT )( data ); \
MIO_WORD(( phwi )->m_pVirtualMemory + ( addr ) + 2 ) = \
( USHORT )(( data ) >> 16 ); \
}
#else
#define HW_READ_BYTE( phwi, addr, data ) \
*data = readb(( void* )(( phwi )->m_pVirtualMemory + ( addr )))
#define HW_WRITE_BYTE( phwi, addr, data ) \
writeb( data, ( void* )(( phwi )->m_pVirtualMemory + ( addr )))
#define HW_READ_WORD( phwi, addr, data ) \
*data = readw(( void* )(( phwi )->m_pVirtualMemory + ( addr )))
#define HW_WRITE_WORD( phwi, addr, data ) \
writew(( USHORT )( data ), ( void* )(( phwi )->m_pVirtualMemory + ( addr )))
#define HW_READ_DWORD( phwi, addr, data ) \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -