xenocara/driver/xf86-video-ati/src/radeon_macros.h

161 lines
5.7 KiB
C
Raw Normal View History

2006-11-26 13:00:15 -07:00
/*
* Copyright 2000 ATI Technologies Inc., Markham, Ontario, and
* VA Linux Systems Inc., Fremont, California.
*
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation on the rights to use, copy, modify, merge,
* publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial
* portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NON-INFRINGEMENT. IN NO EVENT SHALL ATI, VA LINUX SYSTEMS AND/OR
* THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
/*
* Authors:
* Kevin E. Martin <martin@xfree86.org>
* Rickard E. Faith <faith@valinux.com>
* Alan Hourihane <alanh@fairlite.demon.co.uk>
*
* References:
*
* !!!! FIXME !!!!
* RAGE 128 VR/ RAGE 128 GL Register Reference Manual (Technical
* Reference Manual P/N RRG-G04100-C Rev. 0.04), ATI Technologies: April
* 1999.
*
* !!!! FIXME !!!!
* RAGE 128 Software Development Manual (Technical Reference Manual P/N
* SDK-G04000 Rev. 0.01), ATI Technologies: June 1999.
*
*/
#ifndef _RADEON_MACROS_H_
#define _RADEON_MACROS_H_
#include "compiler.h"
#define RADEON_BIOS8(v) (info->VBIOS[v])
#define RADEON_BIOS16(v) (info->VBIOS[v] | \
(info->VBIOS[(v) + 1] << 8))
#define RADEON_BIOS32(v) (info->VBIOS[v] | \
(info->VBIOS[(v) + 1] << 8) | \
(info->VBIOS[(v) + 2] << 16) | \
(info->VBIOS[(v) + 3] << 24))
/* Memory mapped register access macros */
#define INREG8(addr) MMIO_IN8(RADEONMMIO, addr)
#define INREG16(addr) MMIO_IN16(RADEONMMIO, addr)
#define INREG(addr) MMIO_IN32(RADEONMMIO, addr)
#define OUTREG8(addr, val) MMIO_OUT8(RADEONMMIO, addr, val)
#define OUTREG16(addr, val) MMIO_OUT16(RADEONMMIO, addr, val)
#define OUTREG(addr, val) MMIO_OUT32(RADEONMMIO, addr, val)
#define ADDRREG(addr) ((volatile uint32_t *)(pointer)(RADEONMMIO + (addr)))
2006-11-26 13:00:15 -07:00
#define OUTREGP(addr, val, mask) \
do { \
uint32_t tmp = INREG(addr); \
2006-11-26 13:00:15 -07:00
tmp &= (mask); \
tmp |= ((val) & ~(mask)); \
OUTREG(addr, tmp); \
} while (0)
#define INPLL(pScrn, addr) RADEONINPLL(pScrn, addr)
#define OUTPLL(pScrn, addr, val) RADEONOUTPLL(pScrn, addr, val)
#define OUTPLLP(pScrn, addr, val, mask) \
do { \
uint32_t tmp_ = INPLL(pScrn, addr); \
2006-11-26 13:00:15 -07:00
tmp_ &= (mask); \
tmp_ |= ((val) & ~(mask)); \
OUTPLL(pScrn, addr, tmp_); \
} while (0)
#define OUTPAL_START(idx) \
do { \
if (IS_AVIVO_VARIANT) { \
OUTREG8(AVIVO_DC_LUT_RW_INDEX, (idx)); \
} else { \
OUTREG8(RADEON_PALETTE_INDEX, (idx)); \
} \
2006-11-26 13:00:15 -07:00
} while (0)
#define OUTPAL_NEXT(r, g, b) \
do { \
if (IS_AVIVO_VARIANT) { \
OUTREG(AVIVO_DC_LUT_30_COLOR, ((r) << 20) | ((g) << 10) | (b)); \
} else { \
OUTREG(RADEON_PALETTE_30_DATA, ((r) << 20) | ((g) << 10) | (b)); \
} \
2006-11-26 13:00:15 -07:00
} while (0)
#define OUTPAL(idx, r, g, b) \
do { \
OUTPAL_START((idx)); \
OUTPAL_NEXT((r), (g), (b)); \
} while (0)
#define INPAL_START(idx) \
do { \
if (IS_AVIVO_VARIANT) { \
OUTREG8(AVIVO_DC_LUT_RW_INDEX, (idx)); \
} else { \
OUTREG(RADEON_PALETTE_INDEX, (idx) << 16); \
} \
2006-11-26 13:00:15 -07:00
} while (0)
#define INPAL_NEXT() \
do { \
if (IS_AVIVO_VARIANT) { \
INREG(AVIVO_DC_LUT_30_COLOR); \
} else { \
INREG(RADEON_PALETTE_30_DATA); \
} \
} while (0)
2006-11-26 13:00:15 -07:00
#define PAL_SELECT(idx) \
do { \
if (IS_AVIVO_VARIANT) { \
if (!idx) { \
OUTREG(AVIVO_DC_LUT_RW_SELECT, 0); \
} else { \
OUTREG(AVIVO_DC_LUT_RW_SELECT, 1); \
} \
} else { \
if (!idx) { \
OUTREG(RADEON_DAC_CNTL2, INREG(RADEON_DAC_CNTL2) & \
(uint32_t)~RADEON_DAC2_PALETTE_ACC_CTL); \
} else { \
OUTREG(RADEON_DAC_CNTL2, INREG(RADEON_DAC_CNTL2) | \
RADEON_DAC2_PALETTE_ACC_CTL); \
} \
} \
2006-11-26 13:00:15 -07:00
} while (0)
#define INMC(pScrn, addr) RADEONINMC(pScrn, addr)
#define OUTMC(pScrn, addr, val) RADEONOUTMC(pScrn, addr, val)
#define INPCIE(pScrn, addr) RADEONINPCIE(pScrn, addr)
#define OUTPCIE(pScrn, addr, val) RADEONOUTPCIE(pScrn, addr, val)
2006-11-26 13:00:15 -07:00
#endif