/* pm2v.h ... Permedia2v driver, kernel module include file */ #define GLINT_MAJOR 50 #define GLINT_MINOR_PERMEDIA2V 9 #define PM2_CONTROL_SIZE (144*1024) /* fbsize can be detected from bits 29-30 of MemConfig register */ #define FB_SIZE_WORDS (2*1024*1024) #define ONE_PAGE (4096) #define THE_BIG_BUCKET (128*1024) #define MAX_DMA (THE_BIG_BUCKET - ONE_PAGE) #define DMA_HEADER_SIZE 32 #define NUM_DMA_BUFS 8 #define BIND_CONTROL 0 #define BIND_FRAMEB 1 #define BIND_LOCALB 2 #define BIND_DMA 3 #define VMODE 4 #define GRAB_FRAMEBUFFER 5 #define START_DMA 6 #define V_OFF 0 #define V_800x600_75Hz 1 struct pm2v_device { unsigned int p_control_base; unsigned int *k_control_base; unsigned int *u_control_base; unsigned int p_frame_buffer_base; unsigned int *k_frame_buffer_base; unsigned int *u_frame_buffer_base; unsigned char pci_irq; struct dmagob { unsigned int pbase; unsigned int *ubase; unsigned int *kbase; int stored_count; } dmagob[NUM_DMA_BUFS]; int filling; int draining; } pm2v; /* the registers */ #define ResetStatus (0x0000) #define IntEnable (0x0008) #define IntFlags (0x0010) #define InFIFOSpace (0x0018) #define OutFIFOWords (0x0020) #define DMAAddress (0x0028) #define DMACount (0x0030) #define ErrorFlags (0x0038) #define VClkCtl (0x0040) #define TestRegister (0x0048) #define ApertureOne (0x0050) #define ApertureTwo (0x0058) #define DMAControl (0x0060) #define FIFODiscon (0x0068) #define ChipConfig (0x0070) #define OutDMAAddress (0x0080) #define OutDMACount (0x0088) #define DFIFODiscon (0x0868) #define Reboot (0x1000) #define MemControl (0x1040) #define BootAddress (0x1080) #define MemConfig (0x10c0) #define BypassWriteMask (0x1100) #define FramebufferWriteMask (0x1140) #define Counter (0x1180) #define RawFIFO (0x2000) #define ScreenBase (0x3000) #define ScreenStride (0x3008) #define HTotal (0x3010) #define HgEnd (0x3018) #define HbEnd (0x3020) #define HsStart (0x3028) #define HsEnd (0x3030) #define VTotal (0x3038) #define VbEnd (0x3040) #define VsStart (0x3048) #define VsEnd (0x3050) #define VideoControl (0x3058) #define InterruptLine (0x3060) #define DisplayData (0x3068) #define LineCount (0x3070) #define FifoControl (0x3078) #define ScreenBaseRight (0x3080) #define RDPaletteWriteAddress (0x4000) #define RDPaletteData (0x4008) #define RDPixelMask (0x4010) #define RDPaletteReadAddress (0x4018) /* * these two conflict with Permedia2V offsets below * #define RDCursorColorAddress (0x4020) * #define RDCursorColorData (0x4028) */ #define RDIndexedData (0x4050) #define RDCursorRAMData (0x4058) #define RDCursorXLow (0x4060) #define RDCursorXHigh (0x4068) #define RDCursorYLow (0x4070) #define RDCursorYHigh (0x4078) /* some ramdac registers must be accessed indirectly */ /* indirect index choices */ #define RDCursorControl 0x06 #define RDColorMode 0x18 #define RDModeControl 0x19 #define RDPalettePage 0x1c #define RDMiscControl 0x1e #define RDPixelClockA1 0x20 #define RDPixelClockA2 0x21 #define RDPixelClockA3 0x22 #define RDPixelClockB1 0x23 #define RDPixelClockB2 0x24 #define RDPixelClockB3 0x25 #define RDPixelClockC1 0x26 #define RDPixelClockC2 0x27 #define RDPixelClockC3 0x28 #define RDPixelClockStatus 0x29 #define RDMemoryClock1 0x30 #define RDMemoryClock2 0x31 #define RDMemoryClock3 0x32 #define RDMemoryClockStatus 0x33 #define RDColorKeyControl 0x40 #define RDOverlayKey 0x41 #define RDRedKey 0x42 #define RDGreenKey 0x43 #define RDBlueKey 0x44 /* registers (continued) */ #define VGARegBase (0x6000) #define VGAAddressReg (0x63c4) #define VGADataReg (0x63c5) #define StartXDom (0x8000) #define dXDom (0x8008) #define StartXSub (0x8010) #define dXSub (0x8018) #define StartY (0x8020) #define dY (0x8028) #define Count (0x8030) #define Render (0x8038) #define ContinueNewLine (0x8040) #define ContinueNewDom (0x8048) #define ContinueNewSub (0x8050) #define Continue (0x8058) #define BitMaskPattern (0x8068) #define RectangleOrigin (0x80d0) #define RectangleSize (0x80d8) #define RasterizerMode (0x80a0) #define Ylimits (0x80a8) #define WaitForCompletion (0x80b8) #define Xlimits (0x80c8) #define PackedDataLimits (0x8150) #define ScissorMode (0x8180) #define ScissorMinXY (0x8188) #define ScissorMaxXY (0x8190) #define ScreenSize (0x8198) #define AreaStippleMode (0x81a0) #define WindowOrigin (0x81c8) #define AreaStipplePattern (0x8200) #define LBReadMode (0x8880) #define LBReadFormat (0x8888) #define LBSourceOffset (0x8890) #define LBData (0x8898) #define LBStencil (0x88a8) #define LBDepth (0x88b0) #define LBWindowBase (0x88b8) #define LBWriteMode (0x88c0) #define LBWriteFormat (0x88c8) #define Window (0x8980) #define StencilMode (0x8988) #define StencilData (0x8990) #define Stencil (0x8998) #define DepthMode (0x89a0) #define Depth (0x89a8) #define ZStartU (0x89b0) #define ZStartL (0x89b8) #define dZdxU (0x89c0) #define dZdxL (0x89c8) #define dZdyDomU (0x89d0) #define dZdyDomL (0x89d8) #define TextureAddressMode (0x8380) #define SStart (0x8388) #define dSdx (0x8390) #define dSdyDom (0x8398) #define TStart (0x83a0) #define dTdx (0x83a8) #define dTdyDom (0x83b0) #define QStart (0x83b8) #define dQdx (0x83c0) #define dQdyDom (0x83c8) #define TextureBaseAddress (0x8580) #define TextureMapFormat (0x8588) #define TextureDataFormat (0x8590) #define Texel0 (0x8600) #define TextureReadMode (0x8670) #define TexelLUTMode (0x8678) #define TexelLUT (0x8e80) #define AlphaMapUpperBound (0x8f18) #define AlphaMapLowerBound (0x8f20) #define TexelLUTIndex (0x84c0) #define TexelLUTData (0x84c8) #define TexelLUTAddress (0x84d0) #define TexelLUTTransfer (0x84d8) #define TextureID (0x8f70) #define TexelLUTID (0x8f78) #define YUVMode (0x8f00) #define ChromaUpperBound (0x8f08) #define ChromaLowerBound (0x8f10) #define FBReadMode (0x8a80) #define FBSourceOffset (0x8a88) #define FBPixelOffset (0x8a90) #define FBColor (0x8a98) #define FBData (0x8aa0) #define FBSourceData (0x8aa8) #define FBWindowBase (0x8ab0) #define FBWriteMode (0x8ab8) #define FBHardwareWriteMask (0x8ac0) #define FBBlockColor (0x8ac8) #define FBReadPixel (0x8ad0) #define TextureData (0x88e8) #define TextureDownloadOffset (0x88f0) #define SuspendUntilFrameBlank (0x8c78) #define FBBlockColorU (0x8c68) #define FBBlockColorL (0x8c70) #define FBSourceBase (0x8d80) #define FBSourceDelta (0x8d88) #define RStart (0x8780) #define dRdx (0x8788) #define dRdyDom (0x8790) #define GStart (0x8798) #define dGdx (0x87a0) #define dGdyDom (0x87a8) #define BStart (0x87b0) #define dBdx (0x87b8) #define dBdyDom (0x87c0) #define AStart (0x87c8) #define ColorDDAMode (0x87e0) #define ConstantColor (0x87e8) #define Color (0x87f0) #define TextureColorMode (0x8680) #define FogMode (0x8690) #define FogColor (0x8698) #define FStart (0x86a0) #define dFdx (0x86a8) #define dFdyDom (0x86b0) #define KsStart (0x86c8) #define dKsdx (0x86d0) #define dKsdyDom (0x86d8) #define KdStart (0x86e0) #define dKddx (0x86e8) #define dKddyDom (0x86f0) #define AlphaBlendMode (0x8810) #define DitherMode (0x8818) #define FBSoftwareWriteMask (0x8820) #define LogicalOpMode (0x8828) #define FilterMode (0x8c00) #define StatisticMode (0x8c08) #define MinRegion (0x8c10) #define MaxRegion (0x8c18) #define ResetPickResult (0x8c20) #define MinHitRegion (0x8c28) #define MaxHitRegion (0x8c30) #define PickResult (0x8c38) #define Sync (0x8c40) #define Config (0x8d90) #define V0Fixed (0x9000) #define V1Fixed (0x9080) #define V2Fixed (0x9100) #define V0Float (0x9180) #define V0FloatTXs (0x9180) #define V0FloatTXt (0x9188) #define V0FloatTXq (0x9190) #define V0FloatTXKs (0x9198) #define V0FloatTXKd (0x91a0) #define V0FloatRed (0x91a8) #define V0FloatGreen (0x91b0) #define V0FloatBlue (0x91b8) #define V0FloatAlpha (0x91c0) #define V0FloatFog (0x91c8) #define V0FloatX (0x91d0) #define V0FloatY (0x91d8) #define V0FloatZ (0x91e0) #define V1Float (0x9200) #define V1FloatTXs (0x9200) #define V1FloatTXt (0x9208) #define V1FloatTXq (0x9210) #define V1FloatTXKs (0x9218) #define V1FloatTXKd (0x9220) #define V1FloatRed (0x9228) #define V1FloatGreen (0x9230) #define V1FloatBlue (0x9238) #define V1FloatAlpha (0x9240) #define V1FloatFog (0x9248) #define V1FloatX (0x9250) #define V1FloatY (0x9258) #define V1FloatZ (0x9260) #define V2Float (0x9280) #define V2FloatTXs (0x9280) #define V2FloatTXt (0x9288) #define V2FloatTXq (0x9290) #define V2FloatTXKs (0x9298) #define V2FloatTXKd (0x92a0) #define V2FloatRed (0x92a8) #define V2FloatGreen (0x92b0) #define V2FloatBlue (0x92b8) #define V2FloatAlpha (0x92c0) #define V2FloatFog (0x92c8) #define V2FloatX (0x92d0) #define V2FloatY (0x92d8) #define V2FloatZ (0x92e0) #define DeltaMode (0x9300) #define DrawTriangle (0x9308) #define RepeatTriangle (0x9310) #define DrawLine01 (0x9318) #define Drawline10 (0x9320) #define RepeatLine (0x9328) /* Permedia 2V register extensions */ /* offsets for indirect load */ #define PM2VDACRDMiscControl 0x000 #define PM2VDACRDSyncControl 0x001 #define PM2VDACRDDACControl 0x002 #define PM2VDACRDPixelSize 0x003 #define PM2VDACRDColorFormat 0x004 #define PM2VDACRDCursorMode 0x005 #define PM2VDACRDCursorXLow 0x007 #define PM2VDACRDCursorXHigh 0x008 #define PM2VDACRDCursorYLow 0x009 #define PM2VDACRDCursorYHigh 0x00A #define PM2VDACRDCursorHotSpotX 0x00B #define PM2VDACRDCursorHotSpotY 0x00C #define PM2VDACRDOverlayKey 0x00D #define PM2VDACRDPan 0x00E #define PM2VDACRDSense 0x00F #define PM2VDACRDCheckControl 0x018 #define PM2VDACIndexClockControl 0x200 #define PM2VDACRDDClk0m 0x201 #define PM2VDACRDDClk0n 0x202 #define PM2VDACRDDClk0p 0x203 #define PM2VDACRDDClk1m 0x204 #define PM2VDACRDDClk1n 0x205 #define PM2VDACRDDClk1p 0x206 #define PM2VDACRDMClkControl 0x20D #define PM2VDACRDMClkm 0x20E #define PM2VDACRDMClkn 0x20F #define PM2VDACRDMClkp 0x210 #define PM2VDACRDCursorPalette 0x303 #define PM2VDACRDCursorPattern 0x400 /* direct load */ #define PM2VDACIndexRegLow (0x4020) #define PM2VDACIndexRegHigh (0x4028) #define PM2VDACIndexData (0x4030) #define PM2VDACRDIndexControl (0x4038) unsigned int K_READ_INDIRECT_REG(unsigned int iindex) { unsigned int result; K_WRITE_REG(PM2VDACIndexRegHigh,((iindex)>>8)&0xff); K_WRITE_REG(PM2VDACIndexRegLow,(iindex)&0xff); udelay(1); result = K_READ_REG(PM2VDACIndexData); udelay(1); return(result); } void K_WRITE_INDIRECT_REG(unsigned int iindex, unsigned int value) { K_WRITE_REG(PM2VDACIndexRegHigh,((iindex)>>8)&0xff); K_WRITE_REG(PM2VDACIndexRegLow,(iindex)&0xff); udelay(1); K_WRITE_REG(PM2VDACIndexData,value); udelay(1); } #define FIFOSYNC while(K_READ_REG(InFIFOSpace)<0x102)