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