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