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 257706df26Smrg/* TGA hardware description (minimal) 267706df26Smrg * 277706df26Smrg * Offsets within Memory Space 287706df26Smrg * 297706df26Smrg * Portions taken from linux's own tga driver... 307706df26Smrg * Courtesy of Jay Estabrook. 317706df26Smrg */ 327706df26Smrg 337706df26Smrg#ifndef TGA_REGS_H 347706df26Smrg#define TGA_REGS_H 357706df26Smrg 367706df26Smrg#include "compiler.h" 377706df26Smrg 387706df26Smrg#define TYPE_TGA_8PLANE 0 397706df26Smrg#define TYPE_TGA_24PLANE 1 407706df26Smrg#define TYPE_TGA_24PLUSZ 3 417706df26Smrg 427706df26Smrg#if 1 437706df26Smrg#define WMB mem_barrier() 447706df26Smrg#else 457706df26Smrg#define WMB write_mem_barrier() 467706df26Smrg#endif 477706df26Smrg 487706df26Smrg#define TGA_WRITE_REG(v,r) \ 497706df26Smrg do {\ 507706df26Smrg *(unsigned int *)((char*)(pTga->IOBase)+(r)) = (v);\ 517706df26Smrg WMB;\ 527706df26Smrg } while (0) 537706df26Smrg 547706df26Smrg#define TGA_READ_REG(r) \ 557706df26Smrg ( *(unsigned int *)((char*)(pTga->IOBase)+(r))) 567706df26Smrg 577706df26Smrg#define TGA2_WRITE_CLOCK_REG(v,r) \ 587706df26Smrg do {\ 597706df26Smrg *(unsigned int *)((char*)(pTga->ClkBase)+(r)) = (v);\ 607706df26Smrg WMB;\ 617706df26Smrg } while (0) 627706df26Smrg 637706df26Smrg#define TGA2_WRITE_RAMDAC_REG(v,r) \ 647706df26Smrg do {\ 657706df26Smrg *(unsigned int *)((char*)(pTga->DACBase)+(r)) = (v);\ 667706df26Smrg WMB;\ 677706df26Smrg } while (0) 687706df26Smrg 697706df26Smrg#define TGA2_READ_RAMDAC_REG(r) \ 707706df26Smrg ( *(unsigned int *)((char*)(pTga->DACBase)+(r))) 717706df26Smrg 727706df26Smrg#if defined(__alpha__) && 0 /* ?? disable this for now ?? */ 737706df26Smrg/* we can avoid an mb() if we write to an alternate register space each time */ 747706df26Smrg 757706df26Smrg#define MAX_OFFSET 8192 767706df26Smrg#define OFFSET_INC 1024 777706df26Smrg 787706df26Smrg#define TGA_DECL() register unsigned long iobase, offset 797706df26Smrg#define TGA_GET_IOBASE() iobase = (unsigned long)pTga->IOBase; 807706df26Smrg#define TGA_GET_OFFSET() offset = pTga->regOffset; 817706df26Smrg#define TGA_SAVE_OFFSET() pTga->regOffset = offset; 827706df26Smrg 837706df26Smrg/* #define PROFILE */ 847706df26Smrg#undef PROFILE 857706df26Smrg 867706df26Smrg#ifdef PROFILE 877706df26Smrgstatic __inline__ unsigned int realcc() 887706df26Smrg{ 897706df26Smrg u_long cc; 907706df26Smrg __asm__ volatile("rpcc %0" : "=r"(cc) : : "memory"); 917706df26Smrg return cc; 927706df26Smrg} 937706df26Smrg 947706df26Smrg#define TGA_FAST_WRITE_REG(v,r) \ 957706df26Smrgdo {\ 967706df26Smrgstart = realcc();\ 977706df26Smrg *(unsigned int *)(iobase + offset + (r)) = v;\ 987706df26Smrg offset += OFFSET_INC;\ 997706df26Smrg if(offset > MAX_OFFSET) (offset = 0);\ 1007706df26Smrg stop = realcc();\ 1017706df26Smrg ErrorF("TGA_FAST_WRITE_REG = %d\n", stop - start);\ 1027706df26Smrg} while (0) 1037706df26Smrg 1047706df26Smrg#else /* PROFILE */ 1057706df26Smrg 1067706df26Smrg#define TGA_FAST_WRITE_REG(v,r) \ 1077706df26Smrgdo {\ 1087706df26Smrg *(unsigned int *)(iobase + offset + (r)) = v;\ 1097706df26Smrg offset += OFFSET_INC;\ 1107706df26Smrg if(offset > MAX_OFFSET) (offset = 0);\ 1117706df26Smrg} while (0) 1127706df26Smrg#endif /* PROFILE */ 1137706df26Smrg 1147706df26Smrg#else /* __alpha__ */ 1157706df26Smrg 1167706df26Smrg#define TGA_DECL() 1177706df26Smrg#define TGA_GET_IOBASE() ; 1187706df26Smrg#define TGA_GET_OFFSET() ; 1197706df26Smrg#define TGA_SAVE_OFFSET() ; 1207706df26Smrg#define TGA_FAST_WRITE_REG(v,r) TGA_WRITE_REG(v,r) 1217706df26Smrg 1227706df26Smrg#endif /* __alpha__ */ 1237706df26Smrg 1247706df26Smrg#define TGA_ROM_OFFSET 0x00000000 1257706df26Smrg#define TGA2_CLOCK_OFFSET 0x00060000 1267706df26Smrg#define TGA2_RAMDAC_OFFSET 0x00080000 1277706df26Smrg#define TGA_REGS_OFFSET 0x00100000 1287706df26Smrg#define TGA_8PLANE_FB_OFFSET 0x00200000 1297706df26Smrg#define TGA_24PLANE_FB_OFFSET 0x00800000 1307706df26Smrg#define TGA_24PLUSZ_FB_OFFSET 0x01000000 1317706df26Smrg 1327706df26Smrg#define TGA_FOREGROUND_REG 0x0020 1337706df26Smrg#define TGA_BACKGROUND_REG 0x0024 1347706df26Smrg#define TGA_PLANEMASK_REG 0x0028 1357706df26Smrg#define TGA_MODE_REG 0x0030 1367706df26Smrg#define SIMPLE 0x00 1377706df26Smrg#define Z3D 0x10 1387706df26Smrg#define OPAQUESTIPPLE 0x01 1397706df26Smrg#define FILL 0x20 1407706df26Smrg#define TRANSPARENTSTIPPLE 0x05 1417706df26Smrg#define BLOCKSTIPPLE 0x0D 1427706df26Smrg#define BLOCKFILL 0x2D 1437706df26Smrg#define OPAQUELINE 0x02 1447706df26Smrg#define TRANSPARENTLINE 0x06 1457706df26Smrg#define BPP8PACKED (0x00 << 8) 1467706df26Smrg#define BPP8UNPACK (0x01 << 8) 1477706df26Smrg#define BPP12LOW (0x02 << 8) 1487706df26Smrg#define BPP12HIGH (0x06 << 8) 1497706df26Smrg#define BPP24 (0x03 << 8) 1507706df26Smrg#define CAP_ENDS 0x8000 1517706df26Smrg#define X11 0x0000 1527706df26Smrg#define MODE_WIN32 0x2000 1537706df26Smrg /* copy mode */ 1547706df26Smrg#define COPY 0x07 1557706df26Smrg /* opaque fill mode */ 1567706df26Smrg#define OPAQUEFILL 0x21 1577706df26Smrg#define TRANSPARENTFILL 0x45 1587706df26Smrg#define TGA_RASTEROP_REG 0x0034 1597706df26Smrg#define TGA_PIXELSHIFT_REG 0x0038 1607706df26Smrg#define TGA_ADDRESS_REG 0x003c 1617706df26Smrg#define TGA_CONTINUE_REG 0x004c 1627706df26Smrg#define TGA_DEEP_REG 0x0050 1637706df26Smrg#define TGA_REVISION_REG 0x0054 /* TGA2 */ 1647706df26Smrg#define TGA_PIXELMASK_REG 0x002c 1657706df26Smrg#define TGA_PIXELMASK_PERS_REG 0x005c 1667706df26Smrg#define TGA_CURSOR_BASE_REG 0x0060 1677706df26Smrg#define TGA_HORIZ_REG 0x0064 1687706df26Smrg#define TGA_VERT_REG 0x0068 1697706df26Smrg#define TGA_BASE_ADDR_REG 0x006c 1707706df26Smrg#define TGA_VALID_REG 0x0070 1717706df26Smrg#define TGA_CURSOR_XY_REG 0x0074 1727706df26Smrg#define TGA_INTR_STAT_REG 0x007c 1737706df26Smrg /* GDAR */ 1747706df26Smrg#define TGA_DATA_REG 0x0080 1757706df26Smrg#define TGA_WIDTH_REG 0x009c 1767706df26Smrg#define TGA_SPAN_REG 0x00bc 1777706df26Smrg#define TGA_RAMDAC_SETUP_REG 0x00c0 1787706df26Smrg 1797706df26Smrg#define TGA_NOSLOPE7_REG 0x011C 1807706df26Smrg#define TGA_NOSLOPE6_REG 0x0118 1817706df26Smrg#define TGA_NOSLOPE5_REG 0x0114 1827706df26Smrg#define TGA_NOSLOPE4_REG 0x0110 1837706df26Smrg#define TGA_NOSLOPE3_REG 0x010C 1847706df26Smrg#define TGA_NOSLOPE2_REG 0x0108 1857706df26Smrg#define TGA_NOSLOPE1_REG 0x0104 1867706df26Smrg#define TGA_NOSLOPE0_REG 0x0100 1877706df26Smrg 1887706df26Smrg#define TGA_SLOPE0_REG 0x0120 1897706df26Smrg#define TGA_SLOPE1_REG 0x0124 1907706df26Smrg#define TGA_SLOPE2_REG 0x0128 1917706df26Smrg#define TGA_SLOPE3_REG 0x012C 1927706df26Smrg#define TGA_SLOPE4_REG 0x0130 1937706df26Smrg#define TGA_SLOPE5_REG 0x0134 1947706df26Smrg#define TGA_SLOPE6_REG 0x0138 1957706df26Smrg#define TGA_SLOPE7_REG 0x013C 1967706df26Smrg#define TGA_BRES3_REG 0x0048 1977706df26Smrg#define TGA_BRES2_REG 0x0044 1987706df26Smrg#define TGA_BRES1_REG 0x0040 1997706df26Smrg 2007706df26Smrg#define TGA_BLOCK_COLOR0_REG 0x0140 2017706df26Smrg#define TGA_BLOCK_COLOR1_REG 0x0144 2027706df26Smrg#define TGA_BLOCK_COLOR2_REG 0x0148 2037706df26Smrg#define TGA_BLOCK_COLOR3_REG 0x014c 2047706df26Smrg#define TGA_BLOCK_COLOR4_REG 0x0150 2057706df26Smrg#define TGA_BLOCK_COLOR5_REG 0x0154 2067706df26Smrg#define TGA_BLOCK_COLOR6_REG 0x0158 2077706df26Smrg#define TGA_BLOCK_COLOR7_REG 0x015c 2087706df26Smrg#define TGA_CLOCK_REG 0x01e8 2097706df26Smrg#define TGA_RAMDAC_REG 0x01f0 2107706df26Smrg#define TGA_CMD_STAT_REG 0x01f8 2117706df26Smrg 2127706df26Smrg#define BT485_READ_BIT 0x01 2137706df26Smrg#define BT485_WRITE_BIT 0x00 2147706df26Smrg 2157706df26Smrg#endif 216