char rcsId_vmware[] =
"Id: vmware.c,v 1.11 2001/02/23 02:10:39 yoel Exp $";
#endif
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/vmware/vmware.c,v 1.17 2003/02/18 19:10:36 alanh Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/vmware/vmware.c,v 1.19 2003/10/30 17:37:16 tsi Exp $ */
/*
* TODO: support the vmware linux kernel fb driver (Option "UseFBDev").
pVMWARE->PciInfo->ioBase[0] + SVGA_VALUE_PORT;
}
xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
- "VMware SVGA regs at (0x%04x, 0x%04x)\n",
+ "VMware SVGA regs at (0x%04lx, 0x%04lx)\n",
pVMWARE->indexReg, pVMWARE->valueReg);
id = VMXGetVMwareSvgaId(pVMWARE);
xf86DrvMsgVerb(pScrn->scrnIndex, X_PROBED, 2, "bpp: %d\n", pVMWARE->bitsPerPixel);
xf86DrvMsgVerb(pScrn->scrnIndex, X_PROBED, 2, "vram: %d\n", pVMWARE->videoRam);
- xf86DrvMsgVerb(pScrn->scrnIndex, X_PROBED, 2, "pbase: %p\n", pVMWARE->memPhysBase);
+ xf86DrvMsgVerb(pScrn->scrnIndex, X_PROBED, 2, "pbase: 0x%08lx\n", pVMWARE->memPhysBase);
xf86DrvMsgVerb(pScrn->scrnIndex, X_PROBED, 2, "mwidt: %d\n", pVMWARE->maxWidth);
xf86DrvMsgVerb(pScrn->scrnIndex, X_PROBED, 2, "mheig: %d\n", pVMWARE->maxHeight);
xf86DrvMsgVerb(pScrn->scrnIndex, X_PROBED,
2, "bpp: %d\n", pVMWARE->bitsPerPixel);
xf86DrvMsgVerb(pScrn->scrnIndex, X_PROBED,
- 2, "w.red: %d\n", pVMWARE->weight.red);
+ 2, "w.red: %d\n", (int)pVMWARE->weight.red);
xf86DrvMsgVerb(pScrn->scrnIndex, X_PROBED,
- 2, "w.grn: %d\n", pVMWARE->weight.green);
+ 2, "w.grn: %d\n", (int)pVMWARE->weight.green);
xf86DrvMsgVerb(pScrn->scrnIndex, X_PROBED,
- 2, "w.blu: %d\n", pVMWARE->weight.blue);
+ 2, "w.blu: %d\n", (int)pVMWARE->weight.blue);
xf86DrvMsgVerb(pScrn->scrnIndex, X_PROBED,
2, "vis: %d\n", pVMWARE->defaultVisual);
pScrn->chipset = (char*)xf86TokenToString(VMWAREChipsets, pVMWARE->PciInfo->chipType);
if (!pScrn->chipset) {
- xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "ChipID 0x%04 is not recognised\n", pVMWARE->PciInfo->chipType);
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "ChipID 0x%04x is not recognised\n", pVMWARE->PciInfo->chipType);
return FALSE;
}
VMWAREFreeRec(xf86Screens[scrnIndex]);
}
-static Bool
+static ModeStatus
VMWAREValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
{
return MODE_OK;
* All Rights Reserved
* Id: vmware.h,v 1.6 2001/01/30 18:13:47 bennett Exp $
* **********************************************************/
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/vmware/vmware.h,v 1.10 2003/02/04 01:39:53 dawes Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/vmware/vmware.h,v 1.12 2003/11/17 22:20:38 dawes Exp $ */
#ifndef VMWARE_H
#define VMWARE_H
#ifdef RENDER
CompositeProcPtr Composite;
+ void (*EnableDisableFBAccess)(int, Bool);
#endif /* RENDER */
unsigned long mmioPhysBase;
#define ACCELERATE_OPS
void vmwareWriteReg(
-#if NeedFunctionPrototypes
VMWAREPtr pVMWARE, int index, CARD32 value
-#endif
);
CARD32 vmwareReadReg(
-#if NeedFunctionPrototypes
VMWAREPtr pVMWARE, int index
-#endif
);
void vmwareWriteWordToFIFO(
-#if NeedFunctionPrototypes
VMWAREPtr pVMWARE, CARD32 value
-#endif
);
void vmwareWaitForFB(
-#ifdef NeedFunctionPrototypes
VMWAREPtr pVMWARE
-#endif
);
void vmwareSendSVGACmdUpdate(
-#if NeedFunctionPrototypes
VMWAREPtr pVMWARE, BoxPtr pBB
-#endif
);
/* vmwarecurs.c */
Bool vmwareCursorInit(
-#if NeedFunctionPrototypes
ScreenPtr pScr
-#endif
);
void vmwareCursorModeInit(
-#if NeedFunctionPrototypes
ScrnInfoPtr pScrn,
DisplayModePtr mode
-#endif
);
void vmwareCursorCloseScreen(
-#if NeedFunctionPrototypes
ScreenPtr pScr
-#endif
);
void vmwareWriteCursorRegs(
-#if NeedFunctionPrototypes
VMWAREPtr pVMWARE,
Bool visible,
Bool force
-#endif
);
void vmwareCursorHookWrappers(
-#if NeedFunctionPrototypes
ScreenPtr pScreen
-#endif
);
/* vmwarexaa.c */
Bool vmwareXAAScreenInit(
-#if NeedFunctionPrototypes
ScreenPtr pScreen
-#endif
);
Bool vmwareXAAModeInit(
-#if NeedFunctionPrototypes
ScrnInfoPtr pScrn, DisplayModePtr mode
-#endif
);
void vmwareXAACloseScreen(
-#if NeedFunctionPrototypes
ScreenPtr pScreen
-#endif
);
#endif
char rcsId_vmwarexaa[] =
"Id: $";
#endif
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/vmware/vmwarexaa.c,v 1.5 2003/02/04 01:39:53 dawes Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/vmware/vmwarexaa.c,v 1.6 2003/04/13 18:09:27 dawes Exp $ */
#include "vmware.h"
int srcx, int srcy,
int width, int height);
+static void vmwareXAAEnableDisableFBAccess(int index, Bool enable);
+
CARD32 vmwareAlphaTextureFormats[2] = {PICT_a8, 0};
CARD32 vmwareTextureFormats[2] = {PICT_a8r8g8b8, 0};
#endif
+#define SCRATCH_SIZE_BYTES(pvmware) \
+ (((OFFSCREEN_SCRATCH_SIZE + (pvmware)->fbPitch - 1) / \
+ (pvmware)->fbPitch) * (pvmware)->fbPitch)
+
+static void vmwareXAACreateHeap(ScreenPtr pScreen, ScrnInfoPtr pScrn,
+ VMWAREPtr pVMWARE) {
+ int scratchSizeBytes = SCRATCH_SIZE_BYTES(pVMWARE);
+ CARD8* osPtr = pVMWARE->FbBase + pVMWARE->videoRam - scratchSizeBytes;
+
+ pVMWARE->heap = vmwareHeap_Create(osPtr,
+ scratchSizeBytes,
+ OFFSCREEN_SCRATCH_MAX_SLOTS,
+ pVMWARE->videoRam - scratchSizeBytes,
+ pScrn->virtualX,
+ pScrn->virtualY,
+ pVMWARE->bitsPerPixel,
+ pVMWARE->fbPitch,
+ pVMWARE->fbOffset);
+ pVMWARE->frontBuffer = vmwareHeap_GetFrontBuffer(pVMWARE->heap);
+}
+
#define DESTROY_XAA_INFO(pVMWARE) \
if (pVMWARE->xaaInfo) { XAADestroyInfoRec(pVMWARE->xaaInfo); \
pVMWARE->xaaInfo = NULL; }
}
if (pVMWARE->vmwareCapability & SVGA_CAP_OFFSCREEN_1) {
- int scratchSizeBytes = ((OFFSCREEN_SCRATCH_SIZE + pVMWARE->fbPitch - 1) /
- pVMWARE->fbPitch) * pVMWARE->fbPitch;
+ int scratchSizeBytes = SCRATCH_SIZE_BYTES(pVMWARE);
BoxRec box;
RegionRec region;
if (pVMWARE->vmwareCapability & SVGA_CAP_ALPHA_BLEND &&
pScrn->bitsPerPixel > 8) {
if (box.y2 - (scratchSizeBytes / pVMWARE->fbPitch) > box.y1 + 4) {
- CARD8* osPtr = pVMWARE->FbBase + pVMWARE->videoRam -
- scratchSizeBytes;
box.y2 -= scratchSizeBytes / pVMWARE->fbPitch;
VmwareLog(("Allocated %d bytes at offset %d for alpha scratch\n",
scratchSizeBytes,
pVMWARE->videoRam - scratchSizeBytes));
- pVMWARE->heap = vmwareHeap_Create(osPtr,
- scratchSizeBytes,
- OFFSCREEN_SCRATCH_MAX_SLOTS,
- pVMWARE->videoRam - scratchSizeBytes,
- pScrn->virtualX,
- pScrn->virtualY,
- pVMWARE->bitsPerPixel,
- pVMWARE->fbPitch,
- pVMWARE->fbOffset);
- pVMWARE->frontBuffer = vmwareHeap_GetFrontBuffer(pVMWARE->heap);
+ vmwareXAACreateHeap(pScreen, pScrn, pVMWARE);
xaaInfo->SetupForCPUToScreenAlphaTexture =
vmwareSetupForCPUToScreenAlphaTexture;
return FALSE;
}
+#ifdef RENDER
+ if (pVMWARE->heap) {
+ pVMWARE->EnableDisableFBAccess = pScrn->EnableDisableFBAccess;
+ pScrn->EnableDisableFBAccess = vmwareXAAEnableDisableFBAccess;
+ }
+#endif
+
return TRUE;
}
#ifdef RENDER
if (pVMWARE->heap) {
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ pScrn->EnableDisableFBAccess = pVMWARE->EnableDisableFBAccess;
vmwareHeap_Destroy(pVMWARE->heap);
pVMWARE->heap = NULL;
}
vmwareWriteWordToFIFO(pVMWARE, 0); /* param1 */
vmwareWriteWordToFIFO(pVMWARE, 0); /* param2 */
}
+
+void
+vmwareXAAEnableDisableFBAccess(int index, Bool enable)
+{
+ ScrnInfoPtr pScrn = xf86Screens[index];
+ ScreenPtr pScreen = pScrn->pScreen;
+ VMWAREPtr pVMWARE = VMWAREPTR(pScrn);
+
+ if (enable && pVMWARE->heap) {
+ vmwareHeap_Destroy(pVMWARE->heap);
+ vmwareXAACreateHeap(pScreen, pScrn, pVMWARE);
+ }
+
+ (*pVMWARE->EnableDisableFBAccess)(index, enable);
+}
+
#endif