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