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 60typedef unsigned char u8; 61typedef unsigned short u16; 62typedef unsigned long u32; 63 64#define NoSEQRegs 0x20 65#define NoCRTRegs 0x1F 66#define NoGRCRegs 0x09 67#define NoATCRegs 0x15 68 69enum { 70 XR80, XRC0, XRD0, XRE0, XRE8, XREC, XR140, XR144, XR148, XR14C, NoEXRegs 71}; 72 73typedef 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 81typedef 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 92typedef 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 185typedef struct { 186 u16 ca; 187 u8 font; 188 u8 pad; 189} ApmFontBuf; 190 191typedef struct { 192 u16 ca; 193 u8 font; 194 u8 pad; 195 u16 ca2; 196 u8 font2; 197 u8 pad2; 198} ApmTextBuf; 199 200enum ApmChipId { 201 AP6422 = 0x6422, 202 AT24 = 0x6424, 203 AT3D = 0x643D 204}; 205 206typedef 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 217extern int ApmHWCursorInit(ScreenPtr pScreen); 218extern int ApmDGAInit(ScreenPtr pScreen); 219extern int ApmAccelInit(ScreenPtr pScreen); 220extern Bool ApmI2CInit(ScrnInfoPtr pScrn); 221extern void XFree86RushExtensionInit(ScreenPtr pScreen); 222extern void ApmInitVideo(ScreenPtr pScreen); 223extern void ApmInitVideo_IOP(ScreenPtr pScreen); 224#ifdef HAVE_XAA_H 225extern void ApmSetupXAAInfo(ApmPtr pApm, XAAInfoRecPtr pXAAinfo); 226#endif 227extern Bool ApmSwitchMode(SWITCH_MODE_ARGS_DECL); 228extern void ApmAdjustFrame(ADJUST_FRAME_ARGS_DECL); 229extern void ApmHWCursorReserveSpace(ApmPtr pApm); 230extern void ApmAccelReserveSpace(ApmPtr pApm); 231 232#ifdef XF86RUSH 233extern 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