tga_regs.h revision 7706df26
17706df26Smrg/* 27706df26Smrg * Copyright 1997,1998 by Alan Hourihane, Wigan, England. 37706df26Smrg * 47706df26Smrg * Permission to use, copy, modify, distribute, and sell this software and its 57706df26Smrg * documentation for any purpose is hereby granted without fee, provided that 67706df26Smrg * the above copyright notice appear in all copies and that both that 77706df26Smrg * copyright notice and this permission notice appear in supporting 87706df26Smrg * documentation, and that the name of Alan Hourihane not be used in 97706df26Smrg * advertising or publicity pertaining to distribution of the software without 107706df26Smrg * specific, written prior permission. Alan Hourihane makes no representations 117706df26Smrg * about the suitability of this software for any purpose. It is provided 127706df26Smrg * "as is" without express or implied warranty. 137706df26Smrg * 147706df26Smrg * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 157706df26Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 167706df26Smrg * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR 177706df26Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 187706df26Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 197706df26Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 207706df26Smrg * PERFORMANCE OF THIS SOFTWARE. 217706df26Smrg * 227706df26Smrg * Author: Alan Hourihane, <alanh@fairlite.demon.co.uk> 237706df26Smrg */ 247706df26Smrg/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tga/tga_regs.h,v 1.11 2000/10/20 12:57:26 alanh Exp $ */ 257706df26Smrg 267706df26Smrg/* TGA hardware description (minimal) 277706df26Smrg * 287706df26Smrg * Offsets within Memory Space 297706df26Smrg * 307706df26Smrg * Portions taken from linux's own tga driver... 317706df26Smrg * Courtesy of Jay Estabrook. 327706df26Smrg */ 337706df26Smrg 347706df26Smrg#ifndef TGA_REGS_H 357706df26Smrg#define TGA_REGS_H 367706df26Smrg 377706df26Smrg#include "compiler.h" 387706df26Smrg 397706df26Smrg#define TYPE_TGA_8PLANE 0 407706df26Smrg#define TYPE_TGA_24PLANE 1 417706df26Smrg#define TYPE_TGA_24PLUSZ 3 427706df26Smrg 437706df26Smrg#if 1 447706df26Smrg#define WMB mem_barrier() 457706df26Smrg#else 467706df26Smrg#define WMB write_mem_barrier() 477706df26Smrg#endif 487706df26Smrg 497706df26Smrg#define TGA_WRITE_REG(v,r) \ 507706df26Smrg do {\ 517706df26Smrg *(unsigned int *)((char*)(pTga->IOBase)+(r)) = (v);\ 527706df26Smrg WMB;\ 537706df26Smrg } while (0) 547706df26Smrg 557706df26Smrg#define TGA_READ_REG(r) \ 567706df26Smrg ( *(unsigned int *)((char*)(pTga->IOBase)+(r))) 577706df26Smrg 587706df26Smrg#define TGA2_WRITE_CLOCK_REG(v,r) \ 597706df26Smrg do {\ 607706df26Smrg *(unsigned int *)((char*)(pTga->ClkBase)+(r)) = (v);\ 617706df26Smrg WMB;\ 627706df26Smrg } while (0) 637706df26Smrg 647706df26Smrg#define TGA2_WRITE_RAMDAC_REG(v,r) \ 657706df26Smrg do {\ 667706df26Smrg *(unsigned int *)((char*)(pTga->DACBase)+(r)) = (v);\ 677706df26Smrg WMB;\ 687706df26Smrg } while (0) 697706df26Smrg 707706df26Smrg#define TGA2_READ_RAMDAC_REG(r) \ 717706df26Smrg ( *(unsigned int *)((char*)(pTga->DACBase)+(r))) 727706df26Smrg 737706df26Smrg#if defined(__alpha__) && 0 /* ?? disable this for now ?? */ 747706df26Smrg/* we can avoid an mb() if we write to an alternate register space each time */ 757706df26Smrg 767706df26Smrg#define MAX_OFFSET 8192 777706df26Smrg#define OFFSET_INC 1024 787706df26Smrg 797706df26Smrg#define TGA_DECL() register unsigned long iobase, offset 807706df26Smrg#define TGA_GET_IOBASE() iobase = (unsigned long)pTga->IOBase; 817706df26Smrg#define TGA_GET_OFFSET() offset = pTga->regOffset; 827706df26Smrg#define TGA_SAVE_OFFSET() pTga->regOffset = offset; 837706df26Smrg 847706df26Smrg/* #define PROFILE */ 857706df26Smrg#undef PROFILE 867706df26Smrg 877706df26Smrg#ifdef PROFILE 887706df26Smrgstatic __inline__ unsigned int realcc() 897706df26Smrg{ 907706df26Smrg u_long cc; 917706df26Smrg __asm__ volatile("rpcc %0" : "=r"(cc) : : "memory"); 927706df26Smrg return cc; 937706df26Smrg} 947706df26Smrg 957706df26Smrg#define TGA_FAST_WRITE_REG(v,r) \ 967706df26Smrgdo {\ 977706df26Smrgstart = realcc();\ 987706df26Smrg *(unsigned int *)(iobase + offset + (r)) = v;\ 997706df26Smrg offset += OFFSET_INC;\ 1007706df26Smrg if(offset > MAX_OFFSET) (offset = 0);\ 1017706df26Smrg stop = realcc();\ 1027706df26Smrg ErrorF("TGA_FAST_WRITE_REG = %d\n", stop - start);\ 1037706df26Smrg} while (0) 1047706df26Smrg 1057706df26Smrg#else /* PROFILE */ 1067706df26Smrg 1077706df26Smrg#define TGA_FAST_WRITE_REG(v,r) \ 1087706df26Smrgdo {\ 1097706df26Smrg *(unsigned int *)(iobase + offset + (r)) = v;\ 1107706df26Smrg offset += OFFSET_INC;\ 1117706df26Smrg if(offset > MAX_OFFSET) (offset = 0);\ 1127706df26Smrg} while (0) 1137706df26Smrg#endif /* PROFILE */ 1147706df26Smrg 1157706df26Smrg#else /* __alpha__ */ 1167706df26Smrg 1177706df26Smrg#define TGA_DECL() 1187706df26Smrg#define TGA_GET_IOBASE() ; 1197706df26Smrg#define TGA_GET_OFFSET() ; 1207706df26Smrg#define TGA_SAVE_OFFSET() ; 1217706df26Smrg#define TGA_FAST_WRITE_REG(v,r) TGA_WRITE_REG(v,r) 1227706df26Smrg 1237706df26Smrg#endif /* __alpha__ */ 1247706df26Smrg 1257706df26Smrg#define TGA_ROM_OFFSET 0x00000000 1267706df26Smrg#define TGA2_CLOCK_OFFSET 0x00060000 1277706df26Smrg#define TGA2_RAMDAC_OFFSET 0x00080000 1287706df26Smrg#define TGA_REGS_OFFSET 0x00100000 1297706df26Smrg#define TGA_8PLANE_FB_OFFSET 0x00200000 1307706df26Smrg#define TGA_24PLANE_FB_OFFSET 0x00800000 1317706df26Smrg#define TGA_24PLUSZ_FB_OFFSET 0x01000000 1327706df26Smrg 1337706df26Smrg#define TGA_FOREGROUND_REG 0x0020 1347706df26Smrg#define TGA_BACKGROUND_REG 0x0024 1357706df26Smrg#define TGA_PLANEMASK_REG 0x0028 1367706df26Smrg#define TGA_MODE_REG 0x0030 1377706df26Smrg#define SIMPLE 0x00 1387706df26Smrg#define Z3D 0x10 1397706df26Smrg#define OPAQUESTIPPLE 0x01 1407706df26Smrg#define FILL 0x20 1417706df26Smrg#define TRANSPARENTSTIPPLE 0x05 1427706df26Smrg#define BLOCKSTIPPLE 0x0D 1437706df26Smrg#define BLOCKFILL 0x2D 1447706df26Smrg#define OPAQUELINE 0x02 1457706df26Smrg#define TRANSPARENTLINE 0x06 1467706df26Smrg#define BPP8PACKED (0x00 << 8) 1477706df26Smrg#define BPP8UNPACK (0x01 << 8) 1487706df26Smrg#define BPP12LOW (0x02 << 8) 1497706df26Smrg#define BPP12HIGH (0x06 << 8) 1507706df26Smrg#define BPP24 (0x03 << 8) 1517706df26Smrg#define CAP_ENDS 0x8000 1527706df26Smrg#define X11 0x0000 1537706df26Smrg#define MODE_WIN32 0x2000 1547706df26Smrg /* copy mode */ 1557706df26Smrg#define COPY 0x07 1567706df26Smrg /* opaque fill mode */ 1577706df26Smrg#define OPAQUEFILL 0x21 1587706df26Smrg#define TRANSPARENTFILL 0x45 1597706df26Smrg#define TGA_RASTEROP_REG 0x0034 1607706df26Smrg#define TGA_PIXELSHIFT_REG 0x0038 1617706df26Smrg#define TGA_ADDRESS_REG 0x003c 1627706df26Smrg#define TGA_CONTINUE_REG 0x004c 1637706df26Smrg#define TGA_DEEP_REG 0x0050 1647706df26Smrg#define TGA_REVISION_REG 0x0054 /* TGA2 */ 1657706df26Smrg#define TGA_PIXELMASK_REG 0x002c 1667706df26Smrg#define TGA_PIXELMASK_PERS_REG 0x005c 1677706df26Smrg#define TGA_CURSOR_BASE_REG 0x0060 1687706df26Smrg#define TGA_HORIZ_REG 0x0064 1697706df26Smrg#define TGA_VERT_REG 0x0068 1707706df26Smrg#define TGA_BASE_ADDR_REG 0x006c 1717706df26Smrg#define TGA_VALID_REG 0x0070 1727706df26Smrg#define TGA_CURSOR_XY_REG 0x0074 1737706df26Smrg#define TGA_INTR_STAT_REG 0x007c 1747706df26Smrg /* GDAR */ 1757706df26Smrg#define TGA_DATA_REG 0x0080 1767706df26Smrg#define TGA_WIDTH_REG 0x009c 1777706df26Smrg#define TGA_SPAN_REG 0x00bc 1787706df26Smrg#define TGA_RAMDAC_SETUP_REG 0x00c0 1797706df26Smrg 1807706df26Smrg#define TGA_NOSLOPE7_REG 0x011C 1817706df26Smrg#define TGA_NOSLOPE6_REG 0x0118 1827706df26Smrg#define TGA_NOSLOPE5_REG 0x0114 1837706df26Smrg#define TGA_NOSLOPE4_REG 0x0110 1847706df26Smrg#define TGA_NOSLOPE3_REG 0x010C 1857706df26Smrg#define TGA_NOSLOPE2_REG 0x0108 1867706df26Smrg#define TGA_NOSLOPE1_REG 0x0104 1877706df26Smrg#define TGA_NOSLOPE0_REG 0x0100 1887706df26Smrg 1897706df26Smrg#define TGA_SLOPE0_REG 0x0120 1907706df26Smrg#define TGA_SLOPE1_REG 0x0124 1917706df26Smrg#define TGA_SLOPE2_REG 0x0128 1927706df26Smrg#define TGA_SLOPE3_REG 0x012C 1937706df26Smrg#define TGA_SLOPE4_REG 0x0130 1947706df26Smrg#define TGA_SLOPE5_REG 0x0134 1957706df26Smrg#define TGA_SLOPE6_REG 0x0138 1967706df26Smrg#define TGA_SLOPE7_REG 0x013C 1977706df26Smrg#define TGA_BRES3_REG 0x0048 1987706df26Smrg#define TGA_BRES2_REG 0x0044 1997706df26Smrg#define TGA_BRES1_REG 0x0040 2007706df26Smrg 2017706df26Smrg#define TGA_BLOCK_COLOR0_REG 0x0140 2027706df26Smrg#define TGA_BLOCK_COLOR1_REG 0x0144 2037706df26Smrg#define TGA_BLOCK_COLOR2_REG 0x0148 2047706df26Smrg#define TGA_BLOCK_COLOR3_REG 0x014c 2057706df26Smrg#define TGA_BLOCK_COLOR4_REG 0x0150 2067706df26Smrg#define TGA_BLOCK_COLOR5_REG 0x0154 2077706df26Smrg#define TGA_BLOCK_COLOR6_REG 0x0158 2087706df26Smrg#define TGA_BLOCK_COLOR7_REG 0x015c 2097706df26Smrg#define TGA_CLOCK_REG 0x01e8 2107706df26Smrg#define TGA_RAMDAC_REG 0x01f0 2117706df26Smrg#define TGA_CMD_STAT_REG 0x01f8 2127706df26Smrg 2137706df26Smrg#define BT485_READ_BIT 0x01 2147706df26Smrg#define BT485_WRITE_BIT 0x00 2157706df26Smrg 2167706df26Smrg#endif 217