⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 target.h

📁 MICREL 网卡驱动 FOR CE 5.0
💻 H
📖 第 1 页 / 共 5 页
字号:
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 + -