ffb_regs.h revision dbbd9e4b
1dbbd9e4bSmacallan/* 2dbbd9e4bSmacallan * Acceleration for the Creator and Creator3D framebuffer - register layout. 3dbbd9e4bSmacallan * 4dbbd9e4bSmacallan * Copyright (C) 1998,1999,2000 Jakub Jelinek (jakub@redhat.com) 5dbbd9e4bSmacallan * Copyright (C) 1998 Michal Rehacek (majkl@iname.com) 6dbbd9e4bSmacallan * Copyright (C) 1999 David S. Miller (davem@redhat.com) 7dbbd9e4bSmacallan * 8dbbd9e4bSmacallan * Permission is hereby granted, free of charge, to any person obtaining a copy 9dbbd9e4bSmacallan * of this software and associated documentation files (the "Software"), to deal 10dbbd9e4bSmacallan * in the Software without restriction, including without limitation the rights 11dbbd9e4bSmacallan * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12dbbd9e4bSmacallan * copies of the Software, and to permit persons to whom the Software is 13dbbd9e4bSmacallan * furnished to do so, subject to the following conditions: 14dbbd9e4bSmacallan * 15dbbd9e4bSmacallan * The above copyright notice and this permission notice shall be included in 16dbbd9e4bSmacallan * all copies or substantial portions of the Software. 17dbbd9e4bSmacallan * 18dbbd9e4bSmacallan * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19dbbd9e4bSmacallan * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20dbbd9e4bSmacallan * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21dbbd9e4bSmacallan * JAKUB JELINEK, MICHAL REHACEK, OR DAVID MILLER BE LIABLE FOR ANY CLAIM, 22dbbd9e4bSmacallan * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 23dbbd9e4bSmacallan * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 24dbbd9e4bSmacallan * USE OR OTHER DEALINGS IN THE SOFTWARE. 25dbbd9e4bSmacallan * 26dbbd9e4bSmacallan */ 27dbbd9e4bSmacallan/* $XFree86$ */ 28dbbd9e4bSmacallan 29dbbd9e4bSmacallan#ifndef FFBREGS_H 30dbbd9e4bSmacallan#define FFBREGS_H 31dbbd9e4bSmacallan 32dbbd9e4bSmacallan/* Auxilliary clips. */ 33dbbd9e4bSmacallantypedef struct { 34dbbd9e4bSmacallan volatile unsigned int min; 35dbbd9e4bSmacallan volatile unsigned int max; 36dbbd9e4bSmacallan} ffb_auxclip, *ffb_auxclipPtr; 37dbbd9e4bSmacallan 38dbbd9e4bSmacallan/* FFB register set. */ 39dbbd9e4bSmacallantypedef struct _ffb_fbc { 40dbbd9e4bSmacallan /* Next vertex registers, on the right we list which drawops 41dbbd9e4bSmacallan * use said register and the logical name the register has in 42dbbd9e4bSmacallan * that context. 43dbbd9e4bSmacallan */ /* DESCRIPTION DRAWOP(NAME) */ 44dbbd9e4bSmacallan/*0x00*/unsigned int pad1[3]; /* Reserved */ 45dbbd9e4bSmacallan/*0x0c*/volatile unsigned int alpha; /* ALPHA Transparency */ 46dbbd9e4bSmacallan/*0x10*/volatile unsigned int red; /* RED */ 47dbbd9e4bSmacallan/*0x14*/volatile unsigned int green; /* GREEN */ 48dbbd9e4bSmacallan/*0x18*/volatile unsigned int blue; /* BLUE */ 49dbbd9e4bSmacallan/*0x1c*/volatile unsigned int z; /* DEPTH */ 50dbbd9e4bSmacallan/*0x20*/volatile unsigned int y; /* Y triangle(DOYF) */ 51dbbd9e4bSmacallan /* aadot(DYF) */ 52dbbd9e4bSmacallan /* ddline(DYF) */ 53dbbd9e4bSmacallan /* aaline(DYF) */ 54dbbd9e4bSmacallan/*0x24*/volatile unsigned int x; /* X triangle(DOXF) */ 55dbbd9e4bSmacallan /* aadot(DXF) */ 56dbbd9e4bSmacallan /* ddline(DXF) */ 57dbbd9e4bSmacallan /* aaline(DXF) */ 58dbbd9e4bSmacallan/*0x28*/unsigned int pad2[2]; /* Reserved */ 59dbbd9e4bSmacallan/*0x30*/volatile unsigned int ryf; /* Y (alias to DOYF) ddline(RYF) */ 60dbbd9e4bSmacallan /* aaline(RYF) */ 61dbbd9e4bSmacallan /* triangle(RYF) */ 62dbbd9e4bSmacallan/*0x34*/volatile unsigned int rxf; /* X ddline(RXF) */ 63dbbd9e4bSmacallan /* aaline(RXF) */ 64dbbd9e4bSmacallan /* triangle(RXF) */ 65dbbd9e4bSmacallan/*0x38*/unsigned int pad3[2]; /* Reserved */ 66dbbd9e4bSmacallan/*0x40*/volatile unsigned int dmyf; /* Y (alias to DOYF) triangle(DMYF) */ 67dbbd9e4bSmacallan/*0x44*/volatile unsigned int dmxf; /* X triangle(DMXF) */ 68dbbd9e4bSmacallan/*0x48*/unsigned int pad4[2]; /* Reserved */ 69dbbd9e4bSmacallan/*0x50*/volatile unsigned int ebyi; /* Y (alias to RYI) polygon(EBYI) */ 70dbbd9e4bSmacallan/*0x54*/volatile unsigned int ebxi; /* X polygon(EBXI) */ 71dbbd9e4bSmacallan/*0x58*/unsigned int pad5[2]; /* Reserved */ 72dbbd9e4bSmacallan/*0x60*/volatile unsigned int by; /* Y brline(RYI) */ 73dbbd9e4bSmacallan /* fastfill(OP) */ 74dbbd9e4bSmacallan /* polygon(YI) */ 75dbbd9e4bSmacallan /* rectangle(YI) */ 76dbbd9e4bSmacallan /* bcopy(SRCY) */ 77dbbd9e4bSmacallan /* vscroll(SRCY) */ 78dbbd9e4bSmacallan/*0x64*/volatile unsigned int bx; /* X brline(RXI) */ 79dbbd9e4bSmacallan /* polygon(XI) */ 80dbbd9e4bSmacallan /* rectangle(XI) */ 81dbbd9e4bSmacallan /* bcopy(SRCX) */ 82dbbd9e4bSmacallan /* vscroll(SRCX) */ 83dbbd9e4bSmacallan /* fastfill(GO) */ 84dbbd9e4bSmacallan/*0x68*/volatile unsigned int dy; /* destination Y fastfill(DSTY) */ 85dbbd9e4bSmacallan /* bcopy(DSRY) */ 86dbbd9e4bSmacallan /* vscroll(DSRY) */ 87dbbd9e4bSmacallan/*0x6c*/volatile unsigned int dx; /* destination X fastfill(DSTX) */ 88dbbd9e4bSmacallan /* bcopy(DSTX) */ 89dbbd9e4bSmacallan /* vscroll(DSTX) */ 90dbbd9e4bSmacallan/*0x70*/volatile unsigned int bh; /* Y (alias to RYI) brline(DYI) */ 91dbbd9e4bSmacallan /* dot(DYI) */ 92dbbd9e4bSmacallan /* polygon(ETYI) */ 93dbbd9e4bSmacallan /* Height fastfill(H) */ 94dbbd9e4bSmacallan /* bcopy(H) */ 95dbbd9e4bSmacallan /* vscroll(H) */ 96dbbd9e4bSmacallan /* Y count fastfill(NY) */ 97dbbd9e4bSmacallan/*0x74*/volatile unsigned int bw; /* X dot(DXI) */ 98dbbd9e4bSmacallan /* brline(DXI) */ 99dbbd9e4bSmacallan /* polygon(ETXI) */ 100dbbd9e4bSmacallan /* fastfill(W) */ 101dbbd9e4bSmacallan /* bcopy(W) */ 102dbbd9e4bSmacallan /* vscroll(W) */ 103dbbd9e4bSmacallan /* fastfill(NX) */ 104dbbd9e4bSmacallan/*0x78*/unsigned int pad6[2]; /* Reserved */ 105dbbd9e4bSmacallan/*0x80*/unsigned int pad7[32]; /* Reserved */ 106dbbd9e4bSmacallan 107dbbd9e4bSmacallan /* Setup Unit's vertex state register */ 108dbbd9e4bSmacallan/*100*/ volatile unsigned int suvtx; 109dbbd9e4bSmacallan/*104*/ unsigned int pad8[63]; /* Reserved */ 110dbbd9e4bSmacallan 111dbbd9e4bSmacallan /* Frame Buffer Control Registers */ 112dbbd9e4bSmacallan/*200*/ volatile unsigned int ppc; /* Pixel Processor Control */ 113dbbd9e4bSmacallan/*204*/ volatile unsigned int wid; /* Current WID */ 114dbbd9e4bSmacallan/*208*/ volatile unsigned int fg; /* FG data */ 115dbbd9e4bSmacallan/*20c*/ volatile unsigned int bg; /* BG data */ 116dbbd9e4bSmacallan/*210*/ volatile unsigned int consty; /* Constant Y */ 117dbbd9e4bSmacallan/*214*/ volatile unsigned int constz; /* Constant Z */ 118dbbd9e4bSmacallan/*218*/ volatile unsigned int xclip; /* X Clip */ 119dbbd9e4bSmacallan/*21c*/ volatile unsigned int dcss; /* Depth Cue Scale Slope */ 120dbbd9e4bSmacallan/*220*/ volatile unsigned int vclipmin; /* Viewclip XY Min Bounds */ 121dbbd9e4bSmacallan/*224*/ volatile unsigned int vclipmax; /* Viewclip XY Max Bounds */ 122dbbd9e4bSmacallan/*228*/ volatile unsigned int vclipzmin; /* Viewclip Z Min Bounds */ 123dbbd9e4bSmacallan/*22c*/ volatile unsigned int vclipzmax; /* Viewclip Z Max Bounds */ 124dbbd9e4bSmacallan/*230*/ volatile unsigned int dcsf; /* Depth Cue Scale Front Bound */ 125dbbd9e4bSmacallan/*234*/ volatile unsigned int dcsb; /* Depth Cue Scale Back Bound */ 126dbbd9e4bSmacallan/*238*/ volatile unsigned int dczf; /* Depth Cue Z Front */ 127dbbd9e4bSmacallan/*23c*/ volatile unsigned int dczb; /* Depth Cue Z Back */ 128dbbd9e4bSmacallan/*240*/ unsigned int pad9; /* Reserved */ 129dbbd9e4bSmacallan/*244*/ volatile unsigned int blendc; /* Alpha Blend Control */ 130dbbd9e4bSmacallan/*248*/ volatile unsigned int blendc1; /* Alpha Blend Color 1 */ 131dbbd9e4bSmacallan/*24c*/ volatile unsigned int blendc2; /* Alpha Blend Color 2 */ 132dbbd9e4bSmacallan/*250*/ volatile unsigned int fbramitc; /* FB RAM Interleave Test Control */ 133dbbd9e4bSmacallan/*254*/ volatile unsigned int fbc; /* Frame Buffer Control */ 134dbbd9e4bSmacallan/*258*/ volatile unsigned int rop; /* Raster OPeration */ 135dbbd9e4bSmacallan/*25c*/ volatile unsigned int cmp; /* Frame Buffer Compare */ 136dbbd9e4bSmacallan/*260*/ volatile unsigned int matchab; /* Buffer AB Match Mask */ 137dbbd9e4bSmacallan/*264*/ volatile unsigned int matchc; /* Buffer C(YZ) Match Mask */ 138dbbd9e4bSmacallan/*268*/ volatile unsigned int magnab; /* Buffer AB Magnitude Mask */ 139dbbd9e4bSmacallan/*26c*/ volatile unsigned int magnc; /* Buffer C(YZ) Magnitude Mask */ 140dbbd9e4bSmacallan/*270*/ volatile unsigned int fbcfg0; /* Frame Buffer Config 0 */ 141dbbd9e4bSmacallan/*274*/ volatile unsigned int fbcfg1; /* Frame Buffer Config 1 */ 142dbbd9e4bSmacallan/*278*/ volatile unsigned int fbcfg2; /* Frame Buffer Config 2 */ 143dbbd9e4bSmacallan/*27c*/ volatile unsigned int fbcfg3; /* Frame Buffer Config 3 */ 144dbbd9e4bSmacallan/*280*/ volatile unsigned int ppcfg; /* Pixel Processor Config */ 145dbbd9e4bSmacallan/*284*/ volatile unsigned int pick; /* Picking Control */ 146dbbd9e4bSmacallan/*288*/ volatile unsigned int fillmode; /* FillMode */ 147dbbd9e4bSmacallan/*28c*/ volatile unsigned int fbramwac; /* FB RAM Write Address Control */ 148dbbd9e4bSmacallan/*290*/ volatile unsigned int pmask; /* RGB PlaneMask */ 149dbbd9e4bSmacallan/*294*/ volatile unsigned int xpmask; /* X PlaneMask */ 150dbbd9e4bSmacallan/*298*/ volatile unsigned int ypmask; /* Y PlaneMask */ 151dbbd9e4bSmacallan/*29c*/ volatile unsigned int zpmask; /* Z PlaneMask */ 152dbbd9e4bSmacallan/*2a0*/ ffb_auxclip auxclip[4]; /* Auxilliary Viewport Clip */ 153dbbd9e4bSmacallan 154dbbd9e4bSmacallan /* New 3dRAM III support regs */ 155dbbd9e4bSmacallan/*2c0*/ volatile unsigned int rawblend2; 156dbbd9e4bSmacallan/*2c4*/ volatile unsigned int rawpreblend; 157dbbd9e4bSmacallan/*2c8*/ volatile unsigned int rawstencil; 158dbbd9e4bSmacallan/*2cc*/ volatile unsigned int rawstencilctl; 159dbbd9e4bSmacallan/*2d0*/ volatile unsigned int threedram1; 160dbbd9e4bSmacallan/*2d4*/ volatile unsigned int threedram2; 161dbbd9e4bSmacallan/*2d8*/ volatile unsigned int passin; 162dbbd9e4bSmacallan/*2dc*/ volatile unsigned int rawclrdepth; 163dbbd9e4bSmacallan/*2e0*/ volatile unsigned int rawpmask; 164dbbd9e4bSmacallan/*2e4*/ volatile unsigned int rawcsrc; 165dbbd9e4bSmacallan/*2e8*/ volatile unsigned int rawmatch; 166dbbd9e4bSmacallan/*2ec*/ volatile unsigned int rawmagn; 167dbbd9e4bSmacallan/*2f0*/ volatile unsigned int rawropblend; 168dbbd9e4bSmacallan/*2f4*/ volatile unsigned int rawcmp; 169dbbd9e4bSmacallan/*2f8*/ volatile unsigned int rawwac; 170dbbd9e4bSmacallan/*2fc*/ volatile unsigned int fbramid; 171dbbd9e4bSmacallan 172dbbd9e4bSmacallan/*300*/ volatile unsigned int drawop; /* Draw OPeration */ 173dbbd9e4bSmacallan/*304*/ unsigned int pad10[2]; /* Reserved */ 174dbbd9e4bSmacallan/*30c*/ volatile unsigned int lpat; /* Line Pattern control */ 175dbbd9e4bSmacallan/*310*/ unsigned int pad11; /* Reserved */ 176dbbd9e4bSmacallan/*314*/ volatile unsigned int fontxy; /* XY Font coordinate */ 177dbbd9e4bSmacallan/*318*/ volatile unsigned int fontw; /* Font Width */ 178dbbd9e4bSmacallan/*31c*/ volatile unsigned int fontinc; /* Font Increment */ 179dbbd9e4bSmacallan/*320*/ volatile unsigned int font; /* Font bits */ 180dbbd9e4bSmacallan/*324*/ unsigned int pad12[3]; /* Reserved */ 181dbbd9e4bSmacallan/*330*/ volatile unsigned int blend2; 182dbbd9e4bSmacallan/*334*/ volatile unsigned int preblend; 183dbbd9e4bSmacallan/*338*/ volatile unsigned int stencil; 184dbbd9e4bSmacallan/*33c*/ volatile unsigned int stencilctl; 185dbbd9e4bSmacallan 186dbbd9e4bSmacallan/*340*/ unsigned int pad13[4]; /* Reserved */ 187dbbd9e4bSmacallan/*350*/ volatile unsigned int dcss1; /* Depth Cue Scale Slope 1 */ 188dbbd9e4bSmacallan/*354*/ volatile unsigned int dcss2; /* Depth Cue Scale Slope 2 */ 189dbbd9e4bSmacallan/*358*/ volatile unsigned int dcss3; /* Depth Cue Scale Slope 3 */ 190dbbd9e4bSmacallan/*35c*/ volatile unsigned int widpmask; 191dbbd9e4bSmacallan/*360*/ volatile unsigned int dcs2; 192dbbd9e4bSmacallan/*364*/ volatile unsigned int dcs3; 193dbbd9e4bSmacallan/*368*/ volatile unsigned int dcs4; 194dbbd9e4bSmacallan/*36c*/ unsigned int pad14; /* Reserved */ 195dbbd9e4bSmacallan/*370*/ volatile unsigned int dcd2; 196dbbd9e4bSmacallan/*374*/ volatile unsigned int dcd3; 197dbbd9e4bSmacallan/*378*/ volatile unsigned int dcd4; 198dbbd9e4bSmacallan/*37c*/ unsigned int pad15; /* Reserved */ 199dbbd9e4bSmacallan/*380*/ volatile unsigned int pattern[32]; /* area Pattern */ 200dbbd9e4bSmacallan/*400*/ unsigned int pad16[8]; /* Reserved */ 201dbbd9e4bSmacallan/*420*/ volatile unsigned int reset; /* chip RESET */ 202dbbd9e4bSmacallan/*424*/ unsigned int pad17[247]; /* Reserved */ 203dbbd9e4bSmacallan/*800*/ volatile unsigned int devid; /* Device ID */ 204dbbd9e4bSmacallan/*804*/ unsigned int pad18[63]; /* Reserved */ 205dbbd9e4bSmacallan/*900*/ volatile unsigned int ucsr; /* User Control & Status Register */ 206dbbd9e4bSmacallan/*904*/ unsigned int pad19[31]; /* Reserved */ 207dbbd9e4bSmacallan/*980*/ volatile unsigned int mer; /* Mode Enable Register */ 208dbbd9e4bSmacallan/*984*/ unsigned int pad20[1439]; /* Reserved */ 209dbbd9e4bSmacallan} ffb_fbc, *ffb_fbcPtr; 210dbbd9e4bSmacallan 211dbbd9e4bSmacallan/* Draw operations */ 212dbbd9e4bSmacallan#define FFB_DRAWOP_DOT 0x00 213dbbd9e4bSmacallan#define FFB_DRAWOP_AADOT 0x01 214dbbd9e4bSmacallan#define FFB_DRAWOP_BRLINECAP 0x02 215dbbd9e4bSmacallan#define FFB_DRAWOP_BRLINEOPEN 0x03 216dbbd9e4bSmacallan#define FFB_DRAWOP_DDLINE 0x04 217dbbd9e4bSmacallan#define FFB_DRAWOP_AALINE 0x05 218dbbd9e4bSmacallan#define FFB_DRAWOP_TRIANGLE 0x06 219dbbd9e4bSmacallan#define FFB_DRAWOP_POLYGON 0x07 220dbbd9e4bSmacallan#define FFB_DRAWOP_RECTANGLE 0x08 221dbbd9e4bSmacallan#define FFB_DRAWOP_FASTFILL 0x09 222dbbd9e4bSmacallan#define FFB_DRAWOP_BCOPY 0x0a /* Not implemented in any FFB, VIS is faster */ 223dbbd9e4bSmacallan#define FFB_DRAWOP_VSCROLL 0x0b /* Up to 12x faster than BCOPY, 3-4x faster than VIS */ 224dbbd9e4bSmacallan 225dbbd9e4bSmacallan/* FastFill operation codes. */ 226dbbd9e4bSmacallan#define FFB_FASTFILL_PAGE 0x01 227dbbd9e4bSmacallan#define FFB_FASTFILL_BLOCK 0x02 228dbbd9e4bSmacallan#define FFB_FASTFILL_COLOR_BLK 0x03 229dbbd9e4bSmacallan#define FFB_FASTFILL_BLOCK_X 0x04 230dbbd9e4bSmacallan 231dbbd9e4bSmacallan/* Spanfill Unit Line Pattern */ 232dbbd9e4bSmacallan#define FFB_LPAT_SCALEPTR 0xf0000000 233dbbd9e4bSmacallan#define FFB_LPAT_SCALEPTR_SHIFT 28 234dbbd9e4bSmacallan#define FFB_LPAT_PATPTR 0x0f000000 235dbbd9e4bSmacallan#define FFB_LPAT_PATPTR_SHIFT 24 236dbbd9e4bSmacallan#define FFB_LPAT_SCALEVAL 0x00f00000 237dbbd9e4bSmacallan#define FFB_LPAT_SCALEVAL_SHIFT 20 238dbbd9e4bSmacallan#define FFB_LPAT_PATLEN 0x000f0000 239dbbd9e4bSmacallan#define FFB_LPAT_PATLEN_SHIFT 16 240dbbd9e4bSmacallan#define FFB_LPAT_PATTERN 0x0000ffff 241dbbd9e4bSmacallan#define FFB_LPAT_PATTERN_SHIFT 0 242dbbd9e4bSmacallan 243dbbd9e4bSmacallan/* Pixel processor control */ 244dbbd9e4bSmacallan/* Force WID */ 245dbbd9e4bSmacallan#define FFB_PPC_FW_DISABLE 0x800000 246dbbd9e4bSmacallan#define FFB_PPC_FW_ENABLE 0xc00000 247dbbd9e4bSmacallan#define FFB_PPC_FW_MASK 0xc00000 248dbbd9e4bSmacallan/* Auxiliary clip */ 249dbbd9e4bSmacallan#define FFB_PPC_ACE_DISABLE 0x040000 250dbbd9e4bSmacallan#define FFB_PPC_ACE_AUX_SUB 0x080000 251dbbd9e4bSmacallan#define FFB_PPC_ACE_AUX_ADD 0x0c0000 252dbbd9e4bSmacallan#define FFB_PPC_ACE_MASK 0x0c0000 253dbbd9e4bSmacallan/* Depth cue */ 254dbbd9e4bSmacallan#define FFB_PPC_DCE_DISABLE 0x020000 255dbbd9e4bSmacallan#define FFB_PPC_DCE_ENABLE 0x030000 256dbbd9e4bSmacallan#define FFB_PPC_DCE_MASK 0x030000 257dbbd9e4bSmacallan/* Alpha blend */ 258dbbd9e4bSmacallan#define FFB_PPC_ABE_DISABLE 0x008000 259dbbd9e4bSmacallan#define FFB_PPC_ABE_ENABLE 0x00c000 260dbbd9e4bSmacallan#define FFB_PPC_ABE_MASK 0x00c000 261dbbd9e4bSmacallan/* View clip */ 262dbbd9e4bSmacallan#define FFB_PPC_VCE_DISABLE 0x001000 263dbbd9e4bSmacallan#define FFB_PPC_VCE_2D 0x002000 264dbbd9e4bSmacallan#define FFB_PPC_VCE_3D 0x003000 265dbbd9e4bSmacallan#define FFB_PPC_VCE_MASK 0x003000 266dbbd9e4bSmacallan/* Area pattern */ 267dbbd9e4bSmacallan#define FFB_PPC_APE_DISABLE 0x000800 268dbbd9e4bSmacallan#define FFB_PPC_APE_ENABLE 0x000c00 269dbbd9e4bSmacallan#define FFB_PPC_APE_MASK 0x000c00 270dbbd9e4bSmacallan/* Transparent background */ 271dbbd9e4bSmacallan#define FFB_PPC_TBE_OPAQUE 0x000200 272dbbd9e4bSmacallan#define FFB_PPC_TBE_TRANSPARENT 0x000300 273dbbd9e4bSmacallan#define FFB_PPC_TBE_MASK 0x000300 274dbbd9e4bSmacallan/* Z source */ 275dbbd9e4bSmacallan#define FFB_PPC_ZS_VAR 0x000080 276dbbd9e4bSmacallan#define FFB_PPC_ZS_CONST 0x0000c0 277dbbd9e4bSmacallan#define FFB_PPC_ZS_MASK 0x0000c0 278dbbd9e4bSmacallan/* Y source */ 279dbbd9e4bSmacallan#define FFB_PPC_YS_VAR 0x000020 280dbbd9e4bSmacallan#define FFB_PPC_YS_CONST 0x000030 281dbbd9e4bSmacallan#define FFB_PPC_YS_MASK 0x000030 282dbbd9e4bSmacallan/* X source */ 283dbbd9e4bSmacallan#define FFB_PPC_XS_WID 0x000004 284dbbd9e4bSmacallan#define FFB_PPC_XS_VAR 0x000008 285dbbd9e4bSmacallan#define FFB_PPC_XS_CONST 0x00000c 286dbbd9e4bSmacallan#define FFB_PPC_XS_MASK 0x00000c 287dbbd9e4bSmacallan/* Color (BGR) source */ 288dbbd9e4bSmacallan#define FFB_PPC_CS_VAR 0x000002 289dbbd9e4bSmacallan#define FFB_PPC_CS_CONST 0x000003 290dbbd9e4bSmacallan#define FFB_PPC_CS_MASK 0x000003 291dbbd9e4bSmacallan 292dbbd9e4bSmacallan/* X Clip */ 293dbbd9e4bSmacallan#define FFB_XCLIP_XREF 0x000000ff 294dbbd9e4bSmacallan#define FFB_XCLIP_TEST_MASK 0x00070000 295dbbd9e4bSmacallan#define FFB_XCLIP_TEST_ALWAYS 0x00000000 296dbbd9e4bSmacallan#define FFB_XCLIP_TEST_GT 0x00010000 297dbbd9e4bSmacallan#define FFB_XCLIP_TEST_EQ 0x00020000 298dbbd9e4bSmacallan#define FFB_XCLIP_TEST_GE 0x00030000 299dbbd9e4bSmacallan#define FFB_XCLIP_TEST_NEVER 0x00040000 300dbbd9e4bSmacallan#define FFB_XCLIP_TEST_LE 0x00050000 301dbbd9e4bSmacallan#define FFB_XCLIP_TEST_NE 0x00060000 302dbbd9e4bSmacallan#define FFB_XCLIP_TEST_LT 0x00070000 303dbbd9e4bSmacallan 304dbbd9e4bSmacallan/* FB Control register */ 305dbbd9e4bSmacallan/* Write buffer dest */ 306dbbd9e4bSmacallan#define FFB_FBC_WB_A 0x20000000 307dbbd9e4bSmacallan#define FFB_FBC_WB_B 0x40000000 308dbbd9e4bSmacallan#define FFB_FBC_WB_AB 0x60000000 309dbbd9e4bSmacallan#define FFB_FBC_WB_C 0x80000000 310dbbd9e4bSmacallan#define FFB_FBC_WB_AC 0xa0000000 311dbbd9e4bSmacallan#define FFB_FBC_WB_BC 0xc0000000 312dbbd9e4bSmacallan#define FFB_FBC_WB_ABC 0xe0000000 313dbbd9e4bSmacallan#define FFB_FBC_WB_MASK 0xe0000000 314dbbd9e4bSmacallan/* Write enable */ 315dbbd9e4bSmacallan#define FFB_FBC_WE_FORCEOFF 0x00100000 316dbbd9e4bSmacallan#define FFB_FBC_WE_FORCEON 0x00200000 317dbbd9e4bSmacallan#define FFB_FBC_WE_USE_WMASK 0x00300000 318dbbd9e4bSmacallan#define FFB_FBC_WE_MASK 0x00300000 319dbbd9e4bSmacallan/* Write group mode */ 320dbbd9e4bSmacallan#define FFB_FBC_WM_RSVD 0x00040000 321dbbd9e4bSmacallan#define FFB_FBC_WM_COMBINED 0x00080000 322dbbd9e4bSmacallan#define FFB_FBC_WM_SEPARATE 0x000c0000 323dbbd9e4bSmacallan#define FFB_FBC_WM_MASK 0x000c0000 324dbbd9e4bSmacallan/* Read buffer src */ 325dbbd9e4bSmacallan#define FFB_FBC_RB_A 0x00004000 326dbbd9e4bSmacallan#define FFB_FBC_RB_B 0x00008000 327dbbd9e4bSmacallan#define FFB_FBC_RB_C 0x0000c000 328dbbd9e4bSmacallan#define FFB_FBC_RB_MASK 0x0000c000 329dbbd9e4bSmacallan/* Stereo buf dest */ 330dbbd9e4bSmacallan#define FFB_FBC_SB_LEFT 0x00001000 331dbbd9e4bSmacallan#define FFB_FBC_SB_RIGHT 0x00002000 332dbbd9e4bSmacallan#define FFB_FBC_SB_BOTH 0x00003000 333dbbd9e4bSmacallan#define FFB_FBC_SB_MASK 0x00003000 334dbbd9e4bSmacallan/* Z plane group enable */ 335dbbd9e4bSmacallan#define FFB_FBC_ZE_OFF 0x00000400 336dbbd9e4bSmacallan#define FFB_FBC_ZE_ON 0x00000800 337dbbd9e4bSmacallan#define FFB_FBC_ZE_MASK 0x00000c00 338dbbd9e4bSmacallan/* Y plane group enable */ 339dbbd9e4bSmacallan#define FFB_FBC_YE_OFF 0x00000100 340dbbd9e4bSmacallan#define FFB_FBC_YE_ON 0x00000200 341dbbd9e4bSmacallan#define FFB_FBC_YE_MASK 0x00000300 342dbbd9e4bSmacallan/* X plane group enable */ 343dbbd9e4bSmacallan#define FFB_FBC_XE_OFF 0x00000040 344dbbd9e4bSmacallan#define FFB_FBC_XE_ON 0x00000080 345dbbd9e4bSmacallan#define FFB_FBC_XE_MASK 0x000000c0 346dbbd9e4bSmacallan/* B plane group enable */ 347dbbd9e4bSmacallan#define FFB_FBC_BE_OFF 0x00000010 348dbbd9e4bSmacallan#define FFB_FBC_BE_ON 0x00000020 349dbbd9e4bSmacallan#define FFB_FBC_BE_MASK 0x00000030 350dbbd9e4bSmacallan/* G plane group enable */ 351dbbd9e4bSmacallan#define FFB_FBC_GE_OFF 0x00000004 352dbbd9e4bSmacallan#define FFB_FBC_GE_ON 0x00000008 353dbbd9e4bSmacallan#define FFB_FBC_GE_MASK 0x0000000c 354dbbd9e4bSmacallan/* R plane group enable */ 355dbbd9e4bSmacallan#define FFB_FBC_RE_OFF 0x00000001 356dbbd9e4bSmacallan#define FFB_FBC_RE_ON 0x00000002 357dbbd9e4bSmacallan#define FFB_FBC_RE_MASK 0x00000003 358dbbd9e4bSmacallan/* Combined */ 359dbbd9e4bSmacallan#define FFB_FBC_RGBE_OFF 0x00000015 360dbbd9e4bSmacallan#define FFB_FBC_RGBE_ON 0x0000002a 361dbbd9e4bSmacallan#define FFB_FBC_RGBE_MASK 0x0000003f 362dbbd9e4bSmacallan 363dbbd9e4bSmacallan/* Raster OP */ 364dbbd9e4bSmacallan#define FFB_ROP_YZ_MASK 0x008f0000 365dbbd9e4bSmacallan#define FFB_ROP_X_MASK 0x00008f00 366dbbd9e4bSmacallan#define FFB_ROP_RGB_MASK 0x0000008f 367dbbd9e4bSmacallan 368dbbd9e4bSmacallan/* Now the rops themselves which get shifted into the 369dbbd9e4bSmacallan * above fields. 370dbbd9e4bSmacallan */ 371dbbd9e4bSmacallan#define FFB_ROP_EDIT_BIT 0x80 372dbbd9e4bSmacallan#define FFB_ROP_ZERO 0x80 373dbbd9e4bSmacallan#define FFB_ROP_NEW_AND_OLD 0x81 374dbbd9e4bSmacallan#define FFB_ROP_NEW_AND_NOLD 0x82 375dbbd9e4bSmacallan#define FFB_ROP_NEW 0x83 376dbbd9e4bSmacallan#define FFB_ROP_NNEW_AND_OLD 0x84 377dbbd9e4bSmacallan#define FFB_ROP_OLD 0x85 378dbbd9e4bSmacallan#define FFB_ROP_NEW_XOR_OLD 0x86 379dbbd9e4bSmacallan#define FFB_ROP_NEW_OR_OLD 0x87 380dbbd9e4bSmacallan#define FFB_ROP_NNEW_AND_NOLD 0x88 381dbbd9e4bSmacallan#define FFB_ROP_NNEW_XOR_NOLD 0x89 382dbbd9e4bSmacallan#define FFB_ROP_NOLD 0x8a 383dbbd9e4bSmacallan#define FFB_ROP_NEW_OR_NOLD 0x8b 384dbbd9e4bSmacallan#define FFB_ROP_NNEW 0x8c 385dbbd9e4bSmacallan#define FFB_ROP_NNEW_OR_OLD 0x8d 386dbbd9e4bSmacallan#define FFB_ROP_NNEW_OR_NOLD 0x8e 387dbbd9e4bSmacallan#define FFB_ROP_ONES 0x8f 388dbbd9e4bSmacallan 389dbbd9e4bSmacallan/* FB Compare */ 390dbbd9e4bSmacallan#define FFB_CMP_MATCHC_MASK 0x8f000000 391dbbd9e4bSmacallan#define FFB_CMP_MAGNC_MASK 0x00870000 392dbbd9e4bSmacallan#define FFB_CMP_MATCHAB_MASK 0x0000ff00 393dbbd9e4bSmacallan#define FFB_CMP_MAGNAB_MASK 0x000000ff 394dbbd9e4bSmacallan 395dbbd9e4bSmacallan/* Compare Match codes */ 396dbbd9e4bSmacallan#define FFB_CMP_MATCH_EDIT_BIT 0x80 397dbbd9e4bSmacallan#define FFB_CMP_MATCH_ALWAYS 0x80 398dbbd9e4bSmacallan#define FFB_CMP_MATCH_NEVER 0x81 399dbbd9e4bSmacallan#define FFB_CMP_MATCH_EQ 0x82 400dbbd9e4bSmacallan#define FFB_CMP_MATCH_NE 0x83 401dbbd9e4bSmacallan#define FFB_CMP_MATCH_A_ALWAYS 0xc0 402dbbd9e4bSmacallan#define FFB_CMP_MATCH_B_ALWAYS 0xa0 403dbbd9e4bSmacallan 404dbbd9e4bSmacallan/* Compare Magnitude codes */ 405dbbd9e4bSmacallan#define FFB_CMP_MAGN_EDIT_BIT 0x80 406dbbd9e4bSmacallan#define FFB_CMP_MAGN_ALWAYS 0x80 407dbbd9e4bSmacallan#define FFB_CMP_MAGN_GT 0x81 408dbbd9e4bSmacallan#define FFB_CMP_MAGN_EQ 0x82 409dbbd9e4bSmacallan#define FFB_CMP_MAGN_GE 0x83 410dbbd9e4bSmacallan#define FFB_CMP_MAGN_NEVER 0x84 411dbbd9e4bSmacallan#define FFB_CMP_MAGN_LE 0x85 412dbbd9e4bSmacallan#define FFB_CMP_MAGN_NE 0x86 413dbbd9e4bSmacallan#define FFB_CMP_MAGN_LT 0x87 414dbbd9e4bSmacallan#define FFB_CMP_MAGN_A_ALWAYS 0xc0 415dbbd9e4bSmacallan#define FFB_CMP_MAGN_B_ALWAYS 0xa0 416dbbd9e4bSmacallan 417dbbd9e4bSmacallan/* User Control and Status */ 418dbbd9e4bSmacallan#define FFB_UCSR_FIFO_MASK 0x00000fff 419dbbd9e4bSmacallan#define FFB_UCSR_PICK_NO_HIT 0x00020000 420dbbd9e4bSmacallan#define FFB_UCSR_PICK_HIT 0x00030000 421dbbd9e4bSmacallan#define FFB_UCSR_PICK_DISABLE 0x00080000 422dbbd9e4bSmacallan#define FFB_UCSR_PICK_ENABLE 0x000c0000 423dbbd9e4bSmacallan#define FFB_UCSR_FB_BUSY 0x01000000 424dbbd9e4bSmacallan#define FFB_UCSR_RP_BUSY 0x02000000 425dbbd9e4bSmacallan#define FFB_UCSR_ALL_BUSY (FFB_UCSR_RP_BUSY|FFB_UCSR_FB_BUSY) 426dbbd9e4bSmacallan#define FFB_UCSR_READ_ERR 0x40000000 427dbbd9e4bSmacallan#define FFB_UCSR_FIFO_OVFL 0x80000000 428dbbd9e4bSmacallan#define FFB_UCSR_ALL_ERRORS (FFB_UCSR_READ_ERR|FFB_UCSR_FIFO_OVFL) 429dbbd9e4bSmacallan 430dbbd9e4bSmacallan/* Mode Enable Register */ 431dbbd9e4bSmacallan#define FFB_MER_EIRA 0x00000080 /* Enable read-ahead, increasing */ 432dbbd9e4bSmacallan#define FFB_MER_EDRA 0x000000c0 /* Enable read-ahead, decreasing */ 433dbbd9e4bSmacallan#define FFB_MER_DRA 0x00000040 /* No read-ahead */ 434dbbd9e4bSmacallan 435dbbd9e4bSmacallan/* Alpha Blend Control */ 436dbbd9e4bSmacallan#define FFB_BLENDC_FORCE_ONE 0x00000010 /* Defines 0xff as 1.0 */ 437dbbd9e4bSmacallan#define FFB_BLENDC_DF_MASK 0x0000000c /* Destination Frac Mask */ 438dbbd9e4bSmacallan#define FFB_BLENDC_DF_ZERO 0x00000000 /* Destination Frac: 0.00 */ 439dbbd9e4bSmacallan#define FFB_BLENDC_DF_ONE 0x00000004 /* Destination Frac: 1.00 */ 440dbbd9e4bSmacallan#define FFB_BLENDC_DF_ONE_M_A 0x00000008 /* Destination Frac: 1.00 - Xsrc */ 441dbbd9e4bSmacallan#define FFB_BLENDC_DF_A 0x0000000c /* Destination Frac: Xsrc */ 442dbbd9e4bSmacallan#define FFB_BLENDC_SF_MASK 0x00000003 /* Source Frac Mask */ 443dbbd9e4bSmacallan#define FFB_BLENDC_SF_ZERO 0x00000000 /* Source Frac: 0.00 */ 444dbbd9e4bSmacallan#define FFB_BLENDC_SF_ONE 0x00000001 /* Source Frac: 1.00 */ 445dbbd9e4bSmacallan#define FFB_BLENDC_SF_ONE_M_A 0x00000002 /* Source Frac: 1.00 - Xsrc */ 446dbbd9e4bSmacallan#define FFB_BLENDC_SF_A 0x00000003 /* Source Frac: Xsrc */ 447dbbd9e4bSmacallan 448dbbd9e4bSmacallan/* FBram Config 0 */ 449dbbd9e4bSmacallan#define FFB_FBCFG0_RFTIME 0xff800000 450dbbd9e4bSmacallan#define FFB_FBCFG0_XMAX 0x007c0000 451dbbd9e4bSmacallan#define FFB_FBCFG0_YMAX 0x0003ffc0 452dbbd9e4bSmacallan#define FFB_FBCFG0_RES_MASK 0x00000030 453dbbd9e4bSmacallan#define FFB_FBCFG0_RES_HIGH 0x00000030 /* 1920x1360 */ 454dbbd9e4bSmacallan#define FFB_FBCFG0_RES_STD 0x00000020 /* 1280x1024 */ 455dbbd9e4bSmacallan#define FFB_FBCFG0_RES_STEREO 0x00000010 /* 960x580 */ 456dbbd9e4bSmacallan#define FFB_FBCFG0_RES_PRTRAIT 0x00000000 /* 1280x2048 */ 457dbbd9e4bSmacallan#define FFB_FBCFG0_ITRLACE 0x00000000 458dbbd9e4bSmacallan#define FFB_FBCFG0_SEQUENTIAL 0x00000008 459dbbd9e4bSmacallan#define FFB_FBCFG0_DRENA 0x00000004 460dbbd9e4bSmacallan#define FFB_FBCFG0_BPMODE 0x00000002 461dbbd9e4bSmacallan#define FFB_FBCFG0_RFRSH_RST 0x00000001 462dbbd9e4bSmacallan 463dbbd9e4bSmacallantypedef struct _ffb_dac { 464dbbd9e4bSmacallan volatile unsigned int cfg; 465dbbd9e4bSmacallan volatile unsigned int cfgdata; 466dbbd9e4bSmacallan volatile unsigned int cur; 467dbbd9e4bSmacallan volatile unsigned int curdata; 468dbbd9e4bSmacallan} ffb_dac, *ffb_dacPtr; 469dbbd9e4bSmacallan 470dbbd9e4bSmacallan/* Writing 2 32-bit registers at a time using 64-bit stores. -DaveM */ 471dbbd9e4bSmacallan#if defined(__GNUC__) && defined(USE_VIS) 472dbbd9e4bSmacallan/* 64-bit register writing support. 473dbbd9e4bSmacallan * Note: "lo" means "low address". 474dbbd9e4bSmacallan */ 475dbbd9e4bSmacallan#define FFB_WRITE64_COMMON(__regp, __lo32, __hi32, REG0, REG1) \ 476dbbd9e4bSmacallando { __extension__ register unsigned int __r0 __asm__(""#REG0); \ 477dbbd9e4bSmacallan __extension__ register unsigned int __r1 __asm__(""#REG1); \ 478dbbd9e4bSmacallan __r0 = (__lo32); \ 479dbbd9e4bSmacallan __r1 = (__hi32); \ 480dbbd9e4bSmacallan __asm__ __volatile__ ("sllx\t%0, 32, %%g1\n\t" \ 481dbbd9e4bSmacallan "srl\t%1, 0, %1\n\t" \ 482dbbd9e4bSmacallan "or\t%%g1, %1, %%g1\n\t" \ 483dbbd9e4bSmacallan "stx\t%%g1, %2" \ 484dbbd9e4bSmacallan : : "r" (__r0), "r" (__r1), "m" (*(__regp)) : "g1"); \ 485dbbd9e4bSmacallan} while(0) 486dbbd9e4bSmacallan 487dbbd9e4bSmacallan#define FFB_WRITE64P(__regp, __srcp) \ 488dbbd9e4bSmacallando { __asm__ __volatile__ ("ldx\t%0, %%g2;" \ 489dbbd9e4bSmacallan "stx\t%%g2, %1" \ 490dbbd9e4bSmacallan : : "m" (*(__srcp)), "m" (*(__regp)) \ 491dbbd9e4bSmacallan : "g2"); \ 492dbbd9e4bSmacallan} while(0) 493dbbd9e4bSmacallan 494dbbd9e4bSmacallan#define FFB_WRITE64(__regp, __lo32, __hi32) \ 495dbbd9e4bSmacallan FFB_WRITE64_COMMON(__regp, __lo32, __hi32, g2, g3) 496dbbd9e4bSmacallan#define FFB_WRITE64_2(__regp, __lo32, __hi32) \ 497dbbd9e4bSmacallan FFB_WRITE64_COMMON(__regp, __lo32, __hi32, g4, g5) 498dbbd9e4bSmacallan#define FFB_WRITE64_3(__regp, __lo32, __hi32) \ 499dbbd9e4bSmacallan FFB_WRITE64_COMMON(__regp, __lo32, __hi32, o4, o5) 500dbbd9e4bSmacallan 501dbbd9e4bSmacallan#else /* Do not use 64-bit writes. */ 502dbbd9e4bSmacallan 503dbbd9e4bSmacallan#define FFB_WRITE64(__regp, __lo32, __hi32) \ 504dbbd9e4bSmacallando { volatile unsigned int *__p = (__regp); \ 505dbbd9e4bSmacallan *__p = (__lo32); \ 506dbbd9e4bSmacallan *(__p + 1) = (__hi32); \ 507dbbd9e4bSmacallan} while(0) 508dbbd9e4bSmacallan 509dbbd9e4bSmacallan#define FFB_WRITE64P(__regp, __srcp) \ 510dbbd9e4bSmacallando { volatile unsigned int *__p = (__regp); \ 511dbbd9e4bSmacallan unsigned int *__q = (__srcp); \ 512dbbd9e4bSmacallan *__p = *__q; \ 513dbbd9e4bSmacallan *(__p + 1) = *(__q + 1); \ 514dbbd9e4bSmacallan} while(0) 515dbbd9e4bSmacallan 516dbbd9e4bSmacallan#define FFB_WRITE64_2(__regp, __lo32, __hi32) \ 517dbbd9e4bSmacallan FFB_WRITE64(__regp, __lo32, __hi32) 518dbbd9e4bSmacallan#define FFB_WRITE64_3(__regp, __lo32, __hi32) \ 519dbbd9e4bSmacallan FFB_WRITE64(__regp, __lo32, __hi32) 520dbbd9e4bSmacallan#endif 521dbbd9e4bSmacallan 522dbbd9e4bSmacallan#endif /* FFBREGS_H */ 523