summaryrefslogtreecommitdiff
path: root/xc/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c
diff options
context:
space:
mode:
Diffstat (limited to 'xc/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c')
-rw-r--r--xc/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c210
1 files changed, 127 insertions, 83 deletions
diff --git a/xc/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c b/xc/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c
index 76f0b0620..df222f6ef 100644
--- a/xc/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c
+++ b/xc/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c
@@ -28,7 +28,7 @@
* this work is sponsored by S.u.S.E. GmbH, Fuerth, Elsa GmbH, Aachen,
* Siemens Nixdorf Informationssysteme and Appian Graphics.
*/
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c,v 1.125.2.4 2001/05/29 11:32:22 alanh Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c,v 1.135 2001/08/18 11:37:30 alanh Exp $ */
#include "fb.h"
#include "cfb8_32.h"
@@ -45,6 +45,7 @@
#include "xf86RAC.h"
#include "xf86Resources.h"
#include "xf86int10.h"
+#include "dixstruct.h"
#include "vbe.h"
#include "compiler.h"
@@ -66,7 +67,6 @@
#include "extensions/dpms.h"
#define DEBUG 0
-#define PM3Video 1
#if DEBUG
# define TRACE_ENTER(str) ErrorF("glint: " str " %d\n",pScrn->scrnIndex)
@@ -130,15 +130,18 @@ DriverRec GLINT = {
static SymTabRec GLINTVGAChipsets[] = {
{ PCI_VENDOR_TI_CHIP_PERMEDIA2, "ti_pm2" },
{ PCI_VENDOR_TI_CHIP_PERMEDIA, "ti_pm" },
+ { PCI_VENDOR_3DLABS_CHIP_PERMEDIA4, "pm4" },
{ PCI_VENDOR_3DLABS_CHIP_PERMEDIA3, "pm3" },
{ PCI_VENDOR_3DLABS_CHIP_PERMEDIA2V, "pm2v" },
{ PCI_VENDOR_3DLABS_CHIP_PERMEDIA2, "pm2" },
{ PCI_VENDOR_3DLABS_CHIP_PERMEDIA, "pm" },
+ {-1, NULL }
};
static PciChipsets GLINTVGAPciChipsets[] = {
{ PCI_VENDOR_TI_CHIP_PERMEDIA2, PCI_VENDOR_TI_CHIP_PERMEDIA2, RES_SHARED_VGA },
{ PCI_VENDOR_TI_CHIP_PERMEDIA, PCI_VENDOR_TI_CHIP_PERMEDIA, NULL },
+ { PCI_VENDOR_3DLABS_CHIP_PERMEDIA4, PCI_VENDOR_3DLABS_CHIP_PERMEDIA4, RES_SHARED_VGA },
{ PCI_VENDOR_3DLABS_CHIP_PERMEDIA3, PCI_VENDOR_3DLABS_CHIP_PERMEDIA3, RES_SHARED_VGA },
{ PCI_VENDOR_3DLABS_CHIP_PERMEDIA2V, PCI_VENDOR_3DLABS_CHIP_PERMEDIA2V, RES_SHARED_VGA },
{ PCI_VENDOR_3DLABS_CHIP_PERMEDIA2, PCI_VENDOR_3DLABS_CHIP_PERMEDIA2, RES_SHARED_VGA },
@@ -150,6 +153,7 @@ static SymTabRec GLINTChipsets[] = {
{ PCI_VENDOR_3DLABS_CHIP_GAMMA, "gamma" },
{ PCI_VENDOR_TI_CHIP_PERMEDIA2, "ti_pm2" },
{ PCI_VENDOR_TI_CHIP_PERMEDIA, "ti_pm" },
+ { PCI_VENDOR_3DLABS_CHIP_PERMEDIA4, "pm4" },
{ PCI_VENDOR_3DLABS_CHIP_PERMEDIA3, "pm3" },
{ PCI_VENDOR_3DLABS_CHIP_PERMEDIA2V, "pm2v" },
{ PCI_VENDOR_3DLABS_CHIP_PERMEDIA2, "pm2" },
@@ -165,6 +169,7 @@ static PciChipsets GLINTPciChipsets[] = {
{ PCI_VENDOR_3DLABS_CHIP_GAMMA, PCI_VENDOR_3DLABS_CHIP_GAMMA, NULL },
{ PCI_VENDOR_TI_CHIP_PERMEDIA2, PCI_VENDOR_TI_CHIP_PERMEDIA2, RES_SHARED_VGA },
{ PCI_VENDOR_TI_CHIP_PERMEDIA, PCI_VENDOR_TI_CHIP_PERMEDIA, NULL },
+ { PCI_VENDOR_3DLABS_CHIP_PERMEDIA4, PCI_VENDOR_3DLABS_CHIP_PERMEDIA4, RES_SHARED_VGA },
{ PCI_VENDOR_3DLABS_CHIP_PERMEDIA3, PCI_VENDOR_3DLABS_CHIP_PERMEDIA3, RES_SHARED_VGA },
{ PCI_VENDOR_3DLABS_CHIP_PERMEDIA2V, PCI_VENDOR_3DLABS_CHIP_PERMEDIA2V, RES_SHARED_VGA },
{ PCI_VENDOR_3DLABS_CHIP_PERMEDIA2, PCI_VENDOR_3DLABS_CHIP_PERMEDIA2, RES_SHARED_VGA },
@@ -185,7 +190,8 @@ typedef enum {
OPTION_OVERLAY,
OPTION_SHADOW_FB,
OPTION_FBDEV,
- OPTION_FLATPANEL
+ OPTION_FLATPANEL,
+ OPTION_VIDEO_KEY
} GLINTOpts;
static const OptionInfoRec GLINTOptions[] = {
@@ -198,6 +204,7 @@ static const OptionInfoRec GLINTOptions[] = {
{ OPTION_SHADOW_FB, "ShadowFB", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_FBDEV, "UseFBDev", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_FLATPANEL, "UseFlatPanel", OPTV_BOOLEAN, {0}, FALSE },
+ { OPTION_VIDEO_KEY, "VideoKey", OPTV_BOOLEAN, {0}, FALSE },
{ -1, NULL, OPTV_NONE, {0}, FALSE }
};
@@ -215,42 +222,40 @@ static RamDacSupportedInfoRec TIRamdacs[] = {
};
static const char *xf8_32bppSymbols[] = {
+ "cfb8_32ScreenInit",
"xf86Overlay8Plus32Init",
NULL
};
static const char *xaaSymbols[] = {
- "XAADestroyInfoRec",
"XAACreateInfoRec",
+ "XAADestroyInfoRec",
+ "XAAFillSolidRects",
"XAAInit",
- "XAAStippleScanlineFuncLSBFirst",
- "XAAOverlayFBfuncs",
- "XAACachePlanarMonoStipple",
- "XAAScreenIndex",
"XAAPolyLines",
"XAAPolySegment",
- "XAAFillSolidRects",
+ "XAAScreenIndex",
NULL
};
static const char *fbSymbols[] = {
- "cfb8_32ScreenInit",
+ "fbBres",
"fbPictureInit",
"fbScreenInit",
- "fbBres",
NULL
};
static const char *ddcSymbols[] = {
"xf86PrintEDID",
- "xf86DoEDID_DDC1",
"xf86DoEDID_DDC2",
+ "xf86SetDDCproperties",
NULL
};
static const char *i2cSymbols[] = {
"xf86CreateI2CBusRec",
"xf86DestroyI2CBusRec",
+ "xf86DestroyI2CDevRec",
"xf86I2CBusInit",
"xf86I2CDevInit",
"xf86I2CProbeAddress",
@@ -271,12 +276,30 @@ static const char *vbeSymbols[] = {
NULL
};
+static const char *ramdacSymbols[] = {
+ "IBMramdac526CalculateMNPCForClock",
+ "IBMramdac640CalculateMNPCForClock",
+ "IBMramdacProbe",
+ "RamDacCreateInfoRec",
+ "RamDacDestroyInfoRec",
+ "RamDacFreeRec",
+ "RamDacGetHWIndex",
+ "RamDacHandleColormaps",
+ "RamDacInit",
+ "TIramdacCalculateMNPForClock",
+ "TIramdacLoadPalette",
+ "TIramdacProbe",
+ "xf86CreateCursorInfoRec",
+ "xf86DestroyCursorInfoRec",
+ "xf86InitCursor",
+ NULL
+};
+
+
static const char *fbdevHWSymbols[] = {
- "fbdevHWInit",
"fbdevHWFreeRec",
+ "fbdevHWInit",
"fbdevHWProbe",
- "fbdevHWFreeRec",
- "fbdevHWGetName",
"fbdevHWUseBuildinMode",
"fbdevHWGetDepth",
@@ -286,18 +309,18 @@ static const char *fbdevHWSymbols[] = {
"fbdevHWLoadPalette",
/* ScrnInfo hooks */
- "fbdevHWSwitchMode",
"fbdevHWAdjustFrame",
"fbdevHWEnterVT",
"fbdevHWLeaveVT",
- "fbdevHWValidMode",
- "fbdevHWRestore",
+ "fbdevHWMapMMIO",
+ "fbdevHWMapVidmem",
"fbdevHWModeInit",
+ "fbdevHWRestore",
"fbdevHWSave",
+ "fbdevHWSwitchMode",
"fbdevHWUnmapMMIO",
"fbdevHWUnmapVidmem",
- "fbdevHWMapMMIO",
- "fbdevHWMapVidmem",
+ "fbdevHWValidMode",
NULL
};
@@ -312,27 +335,22 @@ static const char *int10Symbols[] = {
static const char *drmSymbols[] = {
"drmAddBufs",
"drmAddMap",
- "drmCtlAddCommand",
"drmCtlInstHandler",
- "drmGetInterruptFromBusID",
- "drmMapBufs",
- "drmMarkBufs",
- "drmUnmapBufs",
"drmFreeVersion",
"drmGetVersion",
+ "drmMapBufs",
+ "drmUnmapBufs",
NULL
};
static const char *driSymbols[] = {
- "DRIGetDrawableIndex",
- "DRIFinishScreenInit",
- "DRIDestroyInfoRec",
"DRICloseScreen",
- "DRIDestroyInfoRec",
- "DRIScreenInit",
- "DRIDestroyInfoRec",
"DRICreateInfoRec",
+ "DRIDestroyInfoRec",
+ "DRIFinishScreenInit",
+ "DRIGetDrawableIndex",
"DRIQueryVersion",
+ "DRIScreenInit",
"GlxSetVisualConfigs",
NULL
};
@@ -369,7 +387,7 @@ glintSetup(pointer module, pointer opts, int *errmaj, int *errmin)
LoaderRefSymLists(fbSymbols, ddcSymbols, i2cSymbols,
xaaSymbols, xf8_32bppSymbols,
shadowSymbols, fbdevHWSymbols, int10Symbols,
- vbeSymbols,
+ vbeSymbols, ramdacSymbols,
#ifdef XF86DRI
drmSymbols, driSymbols,
#endif
@@ -575,9 +593,7 @@ static void
GLINTProbeDDC(ScrnInfoPtr pScrn, int index)
{
vbeInfoPtr pVbe;
-#ifdef XFree86LOADER
if (xf86LoadSubModule(pScrn, "vbe"))
-#endif
{
pVbe = VBEInit(NULL,index);
vbeDoEDID(pVbe, NULL);
@@ -856,6 +872,7 @@ GetAccelPitchValues(ScrnInfoPtr pScrn)
linep = &partprod500TX[0];
break;
case PCI_CHIP_PERMEDIA:
+ case PCI_CHIP_TI_PERMEDIA:
linep = &partprodPermedia[0];
break;
}
@@ -946,6 +963,7 @@ GLINTPreInit(ScrnInfoPtr pScrn, int flags)
ClockRangePtr clockRanges;
char *mod = NULL;
const char *s;
+ const char **syms = NULL;
TRACE_ENTER("GLINTPreInit");
@@ -1002,6 +1020,7 @@ GLINTPreInit(ScrnInfoPtr pScrn, int flags)
pPci = xf86GetPciInfoForEntity(pEnt->index);
if ( (pPci->chipType == PCI_CHIP_MX) ||
(pPci->chipType == PCI_CHIP_PERMEDIA) ||
+ (pPci->chipType == PCI_CHIP_TI_PERMEDIA) ||
(pPci->chipType == PCI_CHIP_500TX) ||
(pPci->chipType == PCI_CHIP_300SX) ||
(pPci->chipType == PCI_CHIP_PERMEDIA3) ) {
@@ -1175,6 +1194,16 @@ GLINTPreInit(ScrnInfoPtr pScrn, int flags)
xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
"Using \"Shadow Framebuffer\" - acceleration disabled\n");
}
+ if(xf86GetOptValInteger(pGlint->Options, OPTION_VIDEO_KEY,
+ &(pGlint->videoKey))) {
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "video key set to 0x%x\n",
+ pGlint->videoKey);
+ } else {
+ /* Needs 8bit values for all modes */
+ pGlint->videoKey = (1 << 16) |
+ (1 << 8) |
+ ((pScrn->mask.blue - 1) << 0);
+ }
/* Check whether to use the FBDev stuff and fill in the rest of pScrn */
if (xf86ReturnOptValBool(pGlint->Options, OPTION_FBDEV, FALSE)) {
@@ -1412,7 +1441,8 @@ GLINTPreInit(ScrnInfoPtr pScrn, int flags)
int temp, base3copro, offset;
if( (basedelta & 0x20000) ^ (basecopro & 0x20000) ) {
- if (pGlint->MultiChip == PCI_CHIP_PERMEDIA) {
+ if ((pGlint->MultiChip == PCI_CHIP_PERMEDIA) ||
+ (pGlint->MultiChip == PCI_CHIP_TI_PERMEDIA)) {
offset = 0x20; /* base4 */
} else {
offset = 0x1c; /* base3 */
@@ -1490,6 +1520,7 @@ GLINTPreInit(ScrnInfoPtr pScrn, int flags)
pScrn->videoRam = (((GLINT_READ_REG(PMMemConfig) >> 29) &
0x03) + 1) * 2048;
break;
+ case PCI_VENDOR_3DLABS_CHIP_PERMEDIA4:
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA3:
pScrn->videoRam = Permedia3MemorySizeDetect(pScrn);
break;
@@ -1497,6 +1528,7 @@ GLINTPreInit(ScrnInfoPtr pScrn, int flags)
case PCI_VENDOR_3DLABS_CHIP_GAMMA:
switch (pGlint->MultiChip) {
case PCI_CHIP_PERMEDIA:
+ case PCI_CHIP_TI_PERMEDIA:
xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
"Attached Rasterizer is GLINT Permedia\n");
pScrn->videoRam = (((GLINT_READ_REG(PMMemConfig)>>29) &
@@ -1590,6 +1622,8 @@ GLINTPreInit(ScrnInfoPtr pScrn, int flags)
if (!xf86LoadSubModule(pScrn, "ramdac"))
return FALSE;
+ xf86LoaderReqSymLists(ramdacSymbols, NULL);
+
/* Let's check what type of DAC we have and reject if necessary */
switch (pGlint->Chipset) {
case PCI_VENDOR_TI_CHIP_PERMEDIA2:
@@ -1627,6 +1661,7 @@ GLINTPreInit(ScrnInfoPtr pScrn, int flags)
return FALSE;
}
break;
+ case PCI_VENDOR_3DLABS_CHIP_PERMEDIA4:
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA3:
pGlint->FIFOSize = 120;
maxheight = 4096;
@@ -1694,6 +1729,7 @@ GLINTPreInit(ScrnInfoPtr pScrn, int flags)
pGlint->FIFOSize = 15;
switch (pGlint->MultiChip) {
case PCI_CHIP_PERMEDIA:
+ case PCI_CHIP_TI_PERMEDIA:
maxheight = 1024;
maxwidth = 1536;
GLINTProbeIBMramdac(pScrn);
@@ -1889,7 +1925,8 @@ GLINTPreInit(ScrnInfoPtr pScrn, int flags)
if ( (pGlint->Chipset == PCI_VENDOR_TI_CHIP_PERMEDIA) ||
(pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA) ||
((pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_DELTA) &&
- (pGlint->MultiChip == PCI_CHIP_PERMEDIA)) ) {
+ ((pGlint->MultiChip == PCI_CHIP_PERMEDIA) ||
+ (pGlint->MultiChip == PCI_CHIP_TI_PERMEDIA))) ) {
switch (pScrn->bitsPerPixel) {
case 8:
pGlint->MaxClock = 200000;
@@ -1924,6 +1961,7 @@ GLINTPreInit(ScrnInfoPtr pScrn, int flags)
}
}
if ((pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA3) ||
+ (pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA4) ||
((pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_GAMMA) &&
(pGlint->MultiChip == PCI_CHIP_PERMEDIA3)) )
pGlint->MaxClock = 300000;
@@ -1953,6 +1991,7 @@ GLINTPreInit(ScrnInfoPtr pScrn, int flags)
/* Select valid modes from those available */
if ((pGlint->NoAccel) ||
(pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA3) ||
+ (pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA4) ||
((pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_GAMMA) &&
(pGlint->MultiChip == PCI_CHIP_PERMEDIA3)) ) {
/*
@@ -2103,6 +2142,7 @@ GLINTPreInit(ScrnInfoPtr pScrn, int flags)
pGlint->bppalign = 0;
break;
case PCI_CHIP_PERMEDIA:
+ case PCI_CHIP_TI_PERMEDIA:
pGlint->pprod = partprodPermedia[pScrn->displayWidth >> 5];
pGlint->bppalign = bppand[(pScrn->bitsPerPixel>>3)-1];
break;
@@ -2212,22 +2252,25 @@ GLINTPreInit(ScrnInfoPtr pScrn, int flags)
case 16:
case 24:
mod = "fb";
+ syms = fbSymbols;
break;
case 32:
if (pScrn->overlayFlags & OVERLAY_8_32_PLANAR) {
- if (xf86LoadSubModule(pScrn, "xf8_32bpp") == NULL) {
- GLINTFreeRec(pScrn);
- return FALSE;
- } else
- xf86LoaderReqSymLists(xf8_32bppSymbols,NULL);
- } else
+ mod = "xf8_32bpp";
+ syms = xf8_32bppSymbols;
+ } else {
mod = "fb";
+ syms = fbSymbols;
+ }
break;
}
if (mod && xf86LoadSubModule(pScrn, mod) == NULL) {
GLINTFreeRec(pScrn);
return FALSE;
}
+ if (mod && syms) {
+ xf86LoaderReqSymLists(syms, NULL);
+ }
/* Load XAA if needed */
if (!pGlint->NoAccel) {
@@ -2252,14 +2295,17 @@ GLINTPreInit(ScrnInfoPtr pScrn, int flags)
GLINTFreeRec(pScrn);
return FALSE;
}
+ xf86LoaderReqSymLists(ddcSymbols, NULL);
/* Load I2C if needed */
if ((pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA2) ||
(pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA2V) ||
(pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA3) ||
+ (pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA4) ||
(pGlint->Chipset == PCI_VENDOR_TI_CHIP_PERMEDIA2)) {
if (xf86LoadSubModule(pScrn, "i2c")) {
I2CBusPtr pBus;
+ xf86LoaderReqSymLists(i2cSymbols, NULL);
if ((pBus = xf86CreateI2CBusRec())) {
pBus->BusName = "DDC";
pBus->scrnIndex = pScrn->scrnIndex;
@@ -2407,6 +2453,7 @@ GLINTSave(ScrnInfoPtr pScrn)
Permedia2VSave(pScrn, glintReg);
break;
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA3:
+ case PCI_VENDOR_3DLABS_CHIP_PERMEDIA4:
Permedia3Save(pScrn, glintReg);
break;
case PCI_VENDOR_TI_CHIP_PERMEDIA:
@@ -2438,6 +2485,7 @@ GLINTSave(ScrnInfoPtr pScrn)
(*pGlint->RamDac->Save)(pScrn, pGlint->RamDacRec, RAMDACreg);
break;
case PCI_CHIP_PERMEDIA:
+ case PCI_CHIP_TI_PERMEDIA:
PermediaSave(pScrn, glintReg);
(*pGlint->RamDac->Save)(pScrn, pGlint->RamDacRec, RAMDACreg);
break;
@@ -2483,6 +2531,7 @@ GLINTModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
ret = Permedia2VInit(pScrn, mode);
break;
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA3:
+ case PCI_VENDOR_3DLABS_CHIP_PERMEDIA4:
ret = Permedia3Init(pScrn, mode, glintReg);
break;
case PCI_VENDOR_TI_CHIP_PERMEDIA:
@@ -2508,6 +2557,7 @@ GLINTModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
ret = TXInit(pScrn, mode, glintReg);
break;
case PCI_CHIP_PERMEDIA:
+ case PCI_CHIP_TI_PERMEDIA:
ret = PermediaInit(pScrn, mode);
break;
case PCI_CHIP_PERMEDIA3:
@@ -2540,6 +2590,7 @@ GLINTModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
Permedia2VRestore(pScrn, glintReg);
break;
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA3:
+ case PCI_VENDOR_3DLABS_CHIP_PERMEDIA4:
Permedia3Restore(pScrn, glintReg);
break;
case PCI_VENDOR_TI_CHIP_PERMEDIA:
@@ -2571,6 +2622,7 @@ GLINTModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
(*pGlint->RamDac->Restore)(pScrn, pGlint->RamDacRec, RAMDACreg);
break;
case PCI_CHIP_PERMEDIA:
+ case PCI_CHIP_TI_PERMEDIA:
PermediaRestore(pScrn, glintReg);
(*pGlint->RamDac->Restore)(pScrn, pGlint->RamDacRec, RAMDACreg);
break;
@@ -2623,10 +2675,7 @@ GLINTRestore(ScrnInfoPtr pScrn)
Permedia2VRestore(pScrn, glintReg);
break;
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA3:
-#ifdef PM3Video
- TRACE("PM3Video : VideoLeaveVT");
- Permedia3VideoLeaveVT(pScrn);
-#endif
+ case PCI_VENDOR_3DLABS_CHIP_PERMEDIA4:
Permedia3Restore(pScrn, glintReg);
break;
case PCI_VENDOR_TI_CHIP_PERMEDIA:
@@ -2658,14 +2707,11 @@ GLINTRestore(ScrnInfoPtr pScrn)
(*pGlint->RamDac->Restore)(pScrn, pGlint->RamDacRec, RAMDACreg);
break;
case PCI_CHIP_PERMEDIA:
+ case PCI_CHIP_TI_PERMEDIA:
PermediaRestore(pScrn, glintReg);
(*pGlint->RamDac->Restore)(pScrn, pGlint->RamDacRec, RAMDACreg);
break;
case PCI_CHIP_PERMEDIA3:
-#ifdef PM3Video
- TRACE("PM3Video : VideoLeaveVT");
- Permedia3VideoLeaveVT(pScrn);
-#endif
if (pGlint->numMultiDevices == 2) {
ACCESSCHIP2();
Permedia3Restore(pScrn, glintReg2);
@@ -2691,6 +2737,7 @@ GLINTScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
GLINTPtr pGlint = GLINTPTR(pScrn);
int ret, displayWidth;
+ int init_picture = 0;
unsigned char *FBStart;
VisualPtr visual;
@@ -2812,8 +2859,7 @@ GLINTScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
pScrn->virtualX, pScrn->virtualY,
pScrn->xDpi, pScrn->yDpi,
displayWidth, pScrn->bitsPerPixel);
- if (ret)
- fbPictureInit(pScreen, 0, 0);
+ init_picture = 1;
break;
case 32:
if(pScrn->overlayFlags & OVERLAY_8_32_PLANAR)
@@ -2826,8 +2872,7 @@ GLINTScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
pScrn->virtualX, pScrn->virtualY,
pScrn->xDpi, pScrn->yDpi,
displayWidth, pScrn->bitsPerPixel);
- if (ret)
- fbPictureInit(pScreen, 0, 0);
+ init_picture = 1;
}
break;
default:
@@ -2865,6 +2910,9 @@ GLINTScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
}
}
+ /* must be after RGB ordering fixed */
+ if (init_picture)
+ fbPictureInit(pScreen, 0, 0);
if (!pGlint->NoAccel) {
switch (pGlint->Chipset)
{
@@ -2874,6 +2922,7 @@ GLINTScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
Permedia2AccelInit(pScreen);
break;
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA3:
+ case PCI_VENDOR_3DLABS_CHIP_PERMEDIA4:
Permedia3AccelInit(pScreen);
break;
case PCI_VENDOR_TI_CHIP_PERMEDIA:
@@ -2895,6 +2944,7 @@ GLINTScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
SXAccelInit(pScreen);
break;
case PCI_CHIP_PERMEDIA:
+ case PCI_CHIP_TI_PERMEDIA:
PermediaAccelInit(pScreen);
break;
case PCI_CHIP_PERMEDIA3:
@@ -2923,6 +2973,7 @@ GLINTScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
else
if ((pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA2V) ||
(pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA3) ||
+ (pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA4) ||
((pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_GAMMA) &&
(pGlint->MultiChip == PCI_CHIP_PERMEDIA3)) )
Permedia2vHWCursorInit(pScreen);
@@ -2943,6 +2994,7 @@ GLINTScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
return FALSE;
if ((pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA3) ||
+ (pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA4) ||
((pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_GAMMA) &&
(pGlint->MultiChip == PCI_CHIP_PERMEDIA3)) ) {
if (!xf86HandleColormaps(pScreen, 256, pScrn->rgbBits,
@@ -3006,6 +3058,8 @@ GLINTScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
}
#endif
+ pScrn->fbOffset = 0;
+
pGlint->CloseScreen = pScreen->CloseScreen;
pScreen->CloseScreen = GLINTCloseScreen;
pScreen->SaveScreen = GLINTSaveScreen;
@@ -3021,18 +3075,15 @@ GLINTScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA2V:
Permedia2VideoInit(pScreen);
break;
-#ifdef PM3Video
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA3:
- TRACE("PM3Video : VideoInit");
- Permedia3VideoInit(pScreen);
+ case PCI_VENDOR_3DLABS_CHIP_PERMEDIA4:
+ Permedia3InitVideo(pScreen);
break;
case PCI_VENDOR_3DLABS_CHIP_GAMMA:
switch (pGlint->MultiChip) {
case PCI_CHIP_PERMEDIA3:
- TRACE("PM3Video : VideoInit");
- Permedia3VideoInit(pScreen);
+ Permedia3InitVideo(pScreen);
}
-#endif
}
#if 0
@@ -3067,6 +3118,7 @@ GLINTSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
Permedia2InitializeEngine(pScrn);
break;
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA3:
+ case PCI_VENDOR_3DLABS_CHIP_PERMEDIA4:
Permedia3InitializeEngine(pScrn);
break;
case PCI_VENDOR_TI_CHIP_PERMEDIA:
@@ -3091,6 +3143,7 @@ GLINTSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
SXInitializeEngine(pScrn);
break;
case PCI_CHIP_PERMEDIA:
+ case PCI_CHIP_TI_PERMEDIA:
PermediaInitializeEngine(pScrn);
break;
case PCI_CHIP_PERMEDIA3:
@@ -3145,6 +3198,7 @@ GLINTAdjustFrame(int scrnIndex, int x, int y, int flags)
GLINT_SLOW_WRITE_REG(base, PMScreenBase);
break;
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA3:
+ case PCI_VENDOR_3DLABS_CHIP_PERMEDIA4:
base = (y * pScrn->displayWidth + x) >> pGlint->BppShift;
GLINT_SLOW_WRITE_REG(base, PMScreenBase);
break;
@@ -3156,6 +3210,7 @@ GLINTAdjustFrame(int scrnIndex, int x, int y, int flags)
GLINT_SLOW_WRITE_REG(base, PMScreenBase);
break;
case PCI_CHIP_PERMEDIA:
+ case PCI_CHIP_TI_PERMEDIA:
GLINT_SLOW_WRITE_REG(base, PMScreenBase);
break;
}
@@ -3194,18 +3249,6 @@ GLINTEnterVT(int scrnIndex, int flags)
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA2V:
Permedia2VideoEnterVT(pScrn);
break;
-#ifdef PM3Video
- case PCI_VENDOR_3DLABS_CHIP_PERMEDIA3:
- TRACE("PM3Video : VideoEnterVT");
- Permedia3VideoEnterVT(pScrn);
- break;
- case PCI_VENDOR_3DLABS_CHIP_GAMMA:
- switch (pGlint->MultiChip) {
- case PCI_CHIP_PERMEDIA3:
- TRACE("PM3Video : VideoEnterVT");
- Permedia3VideoEnterVT(pScrn);
- }
-#endif
}
if (!pGlint->NoAccel) {
@@ -3216,6 +3259,7 @@ GLINTEnterVT(int scrnIndex, int flags)
Permedia2InitializeEngine(pScrn);
break;
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA3:
+ case PCI_VENDOR_3DLABS_CHIP_PERMEDIA4:
Permedia3InitializeEngine(pScrn);
break;
case PCI_VENDOR_TI_CHIP_PERMEDIA:
@@ -3240,6 +3284,7 @@ GLINTEnterVT(int scrnIndex, int flags)
SXInitializeEngine(pScrn);
break;
case PCI_CHIP_PERMEDIA:
+ case PCI_CHIP_TI_PERMEDIA:
PermediaInitializeEngine(pScrn);
break;
case PCI_CHIP_PERMEDIA3:
@@ -3305,17 +3350,6 @@ GLINTCloseScreen(int scrnIndex, ScreenPtr pScreen)
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA2V:
Permedia2VideoUninit(pScrn);
break;
-#ifdef PM3Video
- case PCI_VENDOR_3DLABS_CHIP_PERMEDIA3:
- TRACE("PM3Video : VideoUninit");
- Permedia3VideoUninit(pScrn);
- case PCI_VENDOR_3DLABS_CHIP_GAMMA:
- switch (pGlint->MultiChip) {
- case PCI_CHIP_PERMEDIA3:
- TRACE("PM3Video : VideoUninit");
- Permedia3VideoUninit(pScrn);
- }
-#endif
}
if (pScrn->vtSema) {
@@ -3389,6 +3423,7 @@ GLINTValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
* side appears if not aligned properly */
switch (pGlint->Chipset) {
case PCI_VENDOR_TI_CHIP_PERMEDIA2:
+ case PCI_VENDOR_3DLABS_CHIP_PERMEDIA4:
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA3:
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA2V:
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA2:
@@ -3448,6 +3483,7 @@ GLINTSaveScreen(ScreenPtr pScreen, int mode)
switch (pGlint->Chipset) {
case PCI_VENDOR_TI_CHIP_PERMEDIA2:
case PCI_VENDOR_TI_CHIP_PERMEDIA:
+ case PCI_VENDOR_3DLABS_CHIP_PERMEDIA4:
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA3:
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA2V:
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA2:
@@ -3466,6 +3502,7 @@ GLINTSaveScreen(ScreenPtr pScreen, int mode)
switch (pGlint->MultiChip) {
case PCI_CHIP_PERMEDIA3:
case PCI_CHIP_PERMEDIA:
+ case PCI_CHIP_TI_PERMEDIA:
temp = GLINT_READ_REG(PMVideoControl);
if (unblank) temp |= 1;
else temp &= 0xFFFFFFFE;
@@ -3500,6 +3537,11 @@ GLINTBlockHandler (
pScreen->BlockHandler = pGlint->BlockHandler;
(*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
pScreen->BlockHandler = GLINTBlockHandler;
+
+ if(pGlint->VideoTimerCallback) {
+ UpdateCurrentTime();
+ (*pGlint->VideoTimerCallback)(pScrn, currentTime.milliseconds);
+ }
}
#ifdef DEBUG
@@ -3651,6 +3693,7 @@ Shiftbpp(ScrnInfoPtr pScrn, int value)
logbytesperaccess = 2;
break;
case PCI_VENDOR_3DLABS_CHIP_PERMEDIA3:
+ case PCI_VENDOR_3DLABS_CHIP_PERMEDIA4:
logbytesperaccess = 4;
break;
case PCI_VENDOR_3DLABS_CHIP_300SX:
@@ -3675,6 +3718,7 @@ Shiftbpp(ScrnInfoPtr pScrn, int value)
logbytesperaccess = 3;
break;
case PCI_CHIP_PERMEDIA:
+ case PCI_CHIP_TI_PERMEDIA:
logbytesperaccess = 2;
break;
case PCI_CHIP_PERMEDIA3: