root/headers/private/graphics/radeon/mmio.h
/*
        Copyright (c) 2002, Thomas Kurschel


        Part of Radeon driver
                
        Macros for easier memory mapped I/O access
*/

#ifndef _MMIO_H
#define _MMIO_H

// read 8-bit register
#define INREG8( regs, addr ) (*(regs + (addr)))
// write 8-bit register
#define OUTREG8( regs, addr, val ) do { *(regs + (addr)) = (val); } while( 0 )
// read 32-bit register
#define INREG( regs, addr ) (*((vuint32 *)(regs + (addr))))
// write 32-bit register
#define OUTREG( regs, addr, val ) do { *(vuint32 *)(regs + (addr)) = (val); } while( 0 )
// write partial 32-bit register, keeping bits "mask"
#define OUTREGP( regs, addr, val, mask )                                  \
        do {                                                                  \
                uint32 tmp = INREG( (regs), (addr) );                             \
                tmp &= (mask);                                                    \
                tmp |= (val) & ~(mask);                                           \
                OUTREG( (regs), (addr), tmp );                                    \
        } while (0)

#endif