apm.h revision 8e0ed500
1 2#include "apm_pcirename.h" 3#include <string.h> 4 5/* All drivers should typically include these */ 6#include "xf86.h" 7#include "xf86_OSproc.h" 8 9/* All drivers need this */ 10 11/* Everything using inb/outb, etc needs "compiler.h" */ 12#include "compiler.h" 13 14/* Drivers for PCI hardware need this */ 15#include "xf86PciInfo.h" 16 17/* Drivers that need to access the PCI config space directly need this */ 18#include "xf86Pci.h" 19 20/* All drivers using the vgahw module need this */ 21#include "vgaHW.h" 22 23/* Drivers using the mi banking wrapper need this */ 24#include "mibank.h" 25 26/* All drivers using the mi colormap manipulation need this */ 27#include "micmap.h" 28 29/* Needed for the 1 and 4 bpp framebuffers */ 30#ifdef HAVE_XF1BPP 31#include "xf1bpp.h" 32#endif 33#ifdef HAVE_XF4BPP 34#include "xf4bpp.h" 35#endif 36 37#include "fb.h" 38 39/* Drivers using the XAA interface ... */ 40#include "xaa.h" 41#include "xaalocal.h" 42#include "xf86Cursor.h" 43#include "xf86fbman.h" 44 45/* All drivers initialising the SW cursor need this */ 46#include "mipointer.h" 47 48/* All drivers implementing backing store need this */ 49#include "mibstore.h" 50 51/* I2C support */ 52#include "xf86i2c.h" 53 54/* DDC support */ 55#include "xf86DDC.h" 56 57#include "xf86xv.h" 58#include <X11/extensions/Xv.h> 59 60#ifdef TRUE 61#undef TRUE 62#endif 63#define TRUE (1) 64 65#define rdinx(port, ind) (outb((port), (ind)), inb((port) + 1)) 66#define wrinx(port, ind, val) outb((port), (ind)), outb((port) + 1, (val)) 67#define modinx(port, ind, mask, bits) \ 68 do { \ 69 unsigned char tmp; \ 70 tmp = (rdinx((port), (ind)) & ~(mask)) | ((bits) & (mask)); \ 71 wrinx((port), (ind), tmp); \ 72 } while(0) 73 74typedef unsigned char u8; 75typedef unsigned short u16; 76typedef unsigned long u32; 77 78#define NoSEQRegs 0x20 79#define NoCRTRegs 0x1F 80#define NoGRCRegs 0x09 81#define NoATCRegs 0x15 82 83enum { 84 XR80, XRC0, XRD0, XRE0, XRE8, XREC, XR140, XR144, XR148, XR14C, NoEXRegs 85}; 86 87typedef struct { 88 unsigned char SEQ[NoSEQRegs]; 89 unsigned char CRT[NoCRTRegs]; 90 unsigned char GRC[NoGRCRegs]; 91 unsigned char ATC[NoATCRegs]; 92 unsigned int EX[NoEXRegs]; 93} ApmRegStr, *ApmRegPtr; 94 95typedef struct { 96 int displayWidth, displayHeight; 97 int bitsPerPixel, bytesPerScanline; 98 int depth, Scanlines; 99 CARD32 mask32; /* Mask to have 32bit aligned data */ 100 unsigned int Setup_DEC; 101 DisplayModePtr pMode; 102} ApmFBLayout; 103 104#define APM_CACHE_NUMBER 32 105 106typedef struct { 107 pciVideoPtr PciInfo; 108#ifndef XSERVER_LIBPCIACCESS 109 PCITAG PciTag; 110#endif 111 int scrnIndex; 112 int Chipset; 113 int ChipRev; 114 CARD32 LinAddress; 115 unsigned long LinMapSize; 116 CARD32 FbMapSize; 117 pointer LinMap; 118 pointer FbBase; 119 char *VGAMap; 120 char *MemMap; 121 pointer BltMap; 122 Bool UnlockCalled; 123 IOADDRESS iobase, xport, xbase; 124 unsigned char savedSR10; 125 CARD8 MiscOut; 126 CARD8 c9, d9, db, Rush; 127 unsigned int saveCmd; 128 pointer FontInfo; 129 Bool hwCursor; 130 Bool noLinear; 131 ApmRegStr ModeReg, SavedReg; 132 CloseScreenProcPtr CloseScreen; 133 Bool UsePCIRetry; /* Do we use PCI-retry or busy-waiting */ 134 Bool NoAccel; /* Do we use XAA acceleration architecture */ 135 int MinClock; /* Min ramdac clock */ 136 int MaxClock; /* Max ramdac clock */ 137 ApmFBLayout CurrentLayout, SavedLayout; 138 EntityInfoPtr pEnt; 139 XAAInfoRecPtr AccelInfoRec, DGAXAAInfo; 140 xf86CursorInfoPtr CursorInfoRec; 141 int DGAactive, numDGAModes; 142 DGAModePtr DGAModes; 143 int BaseCursorAddress,CursorAddress,DisplayedCursorAddress; 144 int OffscreenReserved; 145 int blitxdir, blitydir; 146 Bool apmTransparency, apmClip, ShadowFB, I2C; 147 int rop, Bg8x8, Fg8x8; 148 I2CBusPtr I2CPtr; 149 struct ApmStippleCacheRec { 150 XAACacheInfoRec apmStippleCache; 151 FBAreaPtr area; 152 unsigned int apmStippleCached:1; 153 } apmCache[APM_CACHE_NUMBER]; 154 int apmCachePtr; 155 unsigned char regcurr[0x54]; 156 ScreenPtr pScreen; 157 int Generation; 158 int apmLock, pixelStride, RushY[7], CopyMode; 159 int PutImageStride; 160 Bool (*DestroyPixmap)(PixmapPtr); 161 PixmapPtr (*CreatePixmap)(ScreenPtr, int, int, int); 162 void (*SetupForSolidFill)(ScrnInfoPtr pScrn, int color, int rop, 163 unsigned int planemask); 164 void (*SubsequentSolidFillRect)(ScrnInfoPtr pScrn, int x, int y, 165 int w, int h); 166 void (*SetupForSolidFill24)(ScrnInfoPtr pScrn, int color, int rop, 167 unsigned int planemask); 168 void (*SubsequentSolidFillRect24)(ScrnInfoPtr pScrn, int x, int y, 169 int w, int h); 170 void (*SetupForScreenToScreenCopy)(ScrnInfoPtr pScrn, int xdir, int ydir, 171 int rop, unsigned int planemask, 172 int transparency_color); 173 void (*SubsequentScreenToScreenCopy)(ScrnInfoPtr pScrn, int x1, int y1, 174 int x2, int y2, int w, int h); 175 void (*SetupForScreenToScreenCopy24)(ScrnInfoPtr pScrn, int xdir, int ydir, 176 int rop, unsigned int planemask, 177 int transparency_color); 178 void (*SubsequentScreenToScreenCopy24)(ScrnInfoPtr pScrn, int x1, int y1, 179 int x2, int y2, int w, int h); 180 int MemClk; 181 unsigned char *ShadowPtr; 182 int ShadowPitch; 183 memType ScratchMem, ScratchMemSize, ScratchMemOffset; 184 memType ScratchMemPtr, ScratchMemEnd; 185 int ScratchMemWidth; 186 CARD32 color; 187 XF86VideoAdaptorPtr adaptor; 188 int timerIsOn; 189 Time offTime; 190 OptionInfoPtr Options; 191 char DPMSMask[4]; 192} ApmRec, *ApmPtr; 193 194#define curr ((unsigned char *)pApm->regcurr) 195 196typedef struct { 197 u16 ca; 198 u8 font; 199 u8 pad; 200} ApmFontBuf; 201 202typedef struct { 203 u16 ca; 204 u8 font; 205 u8 pad; 206 u16 ca2; 207 u8 font2; 208 u8 pad2; 209} ApmTextBuf; 210 211enum ApmChipId { 212 AP6422 = 0x6422, 213 AT24 = 0x6424, 214 AT3D = 0x643D 215}; 216 217typedef struct { 218 BoxRec box; 219 int num; 220 MoveAreaCallbackProcPtr MoveAreaCallback; 221 RemoveAreaCallbackProcPtr RemoveAreaCallback; 222 void *devPriv; 223} ApmPixmapRec, *ApmPixmapPtr; 224 225#define APMDECL(p) ApmPtr pApm = ((ApmPtr)(((ScrnInfoPtr)(p))->driverPrivate)) 226#define APMPTR(p) ((ApmPtr)(((ScrnInfoPtr)(p))->driverPrivate)) 227 228extern int ApmHWCursorInit(ScreenPtr pScreen); 229extern int ApmDGAInit(ScreenPtr pScreen); 230extern int ApmAccelInit(ScreenPtr pScreen); 231extern Bool ApmI2CInit(ScrnInfoPtr pScrn); 232extern void XFree86RushExtensionInit(ScreenPtr pScreen); 233extern void ApmInitVideo(ScreenPtr pScreen); 234extern void ApmInitVideo_IOP(ScreenPtr pScreen); 235extern void ApmSetupXAAInfo(ApmPtr pApm, XAAInfoRecPtr pXAAinfo); 236extern Bool ApmSwitchMode(int scrnIndex, DisplayModePtr mode, 237 int flags); 238extern void ApmAdjustFrame(int scrnIndex, int x, int y, int flags); 239extern void ApmHWCursorReserveSpace(ApmPtr pApm); 240extern void ApmAccelReserveSpace(ApmPtr pApm); 241 242#ifdef XF86RUSH 243extern int ApmPixmapIndex; 244#define APM_GET_PIXMAP_PRIVATE(pix)\ 245 ((ApmPixmapPtr)(((PixmapPtr)(pix))->devPrivates[ApmPixmapIndex].ptr)) 246#endif 247 248#include "apm_regs.h" 249