diff options
Diffstat (limited to 'xc/programs/Xserver/hw/xfree86/drivers/vmware/vmware.h')
-rw-r--r-- | xc/programs/Xserver/hw/xfree86/drivers/vmware/vmware.h | 758 |
1 files changed, 758 insertions, 0 deletions
diff --git a/xc/programs/Xserver/hw/xfree86/drivers/vmware/vmware.h b/xc/programs/Xserver/hw/xfree86/drivers/vmware/vmware.h new file mode 100644 index 000000000..ab42e10f1 --- /dev/null +++ b/xc/programs/Xserver/hw/xfree86/drivers/vmware/vmware.h @@ -0,0 +1,758 @@ +/* ********************************************************** + * Copyright (C) 1998-2001 VMware, Inc. + * 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.1 2001/04/05 19:29:44 dawes Exp $ */ + +#ifndef VMWARE_H +#define VMWARE_H + +#include "xf86.h" +#include "xf86_OSproc.h" +#include "xf86_ansic.h" +#include "xf86Resources.h" + +#include "compiler.h" /* inb/outb */ + +#include "xf86PciInfo.h" /* pci vendor id */ +#include "xf86Pci.h" /* pci */ + +#include "mipointer.h" /* sw cursor */ +#include "mibstore.h" /* backing store */ +#include "micmap.h" /* mi color map */ +#include "vgaHW.h" /* VGA hardware */ +#define PSZ 8 /* 8bpp */ +#include "cfb.h" +#undef PSZ +#include "cfb16.h" /* 16bpp */ +#include "cfb24.h" /* 24bpp */ +#include "cfb32.h" /* 32bpp */ + +#include "xf86cmap.h" /* xf86HandleColormaps */ + +#include "vm_basic_types.h" +#include "svga_reg.h" + +typedef struct { + CARD32 svga_reg_enable; + CARD32 svga_reg_width; + CARD32 svga_reg_height; +} VMWARERegRec, *VMWARERegPtr; + +typedef struct { + DisplayModePtr mode; +} VMWAREFBLayout; + +typedef struct { + EntityInfoPtr pEnt; + pciVideoPtr PciInfo; + PCITAG PciTag; + Bool Primary; + int depth; + int bitsPerPixel; + rgb weight; + rgb offset; + int defaultVisual; + int videoRam; + unsigned long memPhysBase; + unsigned long fbOffset; + unsigned long fbPitch; + unsigned long ioBase; + int maxWidth; + int maxHeight; + unsigned int vmwareCapability; + + unsigned char* FbBase; + unsigned long FbSize; + + VMWARERegRec SavedReg; + VMWARERegRec ModeReg; + + VMWAREFBLayout CurrentLayout; + Bool noAccel; + Bool hwCursor; + Bool cursorDefined; + Bool mouseHidden; + + unsigned long mmioPhysBase; + unsigned long mmioSize; + + unsigned char* mmioVirtBase; + CARD32* vmwareFIFO; + Bool vmwareFIFOMarkSet; + BoxRec vmwareAccelArea; + struct { + BoxRec Box; + unsigned int Width; + unsigned int Height; + unsigned int XHot; + unsigned int YHot; + } Mouse; + Bool checkCursorColor; + unsigned int vmwareBBLevel; + unsigned long Pmsk; + + uint16 indexReg, valueReg; + + RegionPtr (*pcfbCopyPlane) (DrawablePtr, DrawablePtr, GCPtr, + int, int, int, int, int, int, + unsigned long); + ScreenRec ScrnFuncs; + /* ... */ +} VMWARERec, *VMWAREPtr; + +#define VMWAREPTR(p) ((VMWAREPtr)((p)->driverPrivate)) + +static __inline ScrnInfoPtr infoFromScreen(ScreenPtr s) { + return xf86Screens[s->myNum]; +} + +#include "gcstruct.h" + +#define MIN(a,b) ((a)<(b)?(a):(b)) +#define MAX(a,b) ((a)>(b)?(a):(b)) + +#define GC_FUNC_PROLOGUE(pGC) \ +{ \ + vmwarePrivGCPtr pGCPriv = (vmwarePrivGCPtr) (pGC)->devPrivates[vmwareGCPrivateIndex].ptr; \ + (pGC)->funcs = pGCPriv->wrapFuncs; \ + (pGC)->ops = pGCPriv->wrapOps; \ +} + +#define GC_FUNC_EPILOGUE(pGC) \ +{ \ + vmwarePrivGCPtr pGCPriv = (vmwarePrivGCPtr) (pGC)->devPrivates[vmwareGCPrivateIndex].ptr; \ + pGCPriv->wrapFuncs = (pGC)->funcs; \ + (pGC)->funcs = &vmwareGCFuncs; \ + pGCPriv->wrapOps = (pGC)->ops; \ + (pGC)->ops = &vmwareGCOps; \ +} + +#define GC_OPS(pGC) ((vmwarePrivGCPtr) (pGC)->devPrivates[vmwareGCPrivateIndex].ptr)->wrapOps + +#define MOUSE_ID 1 + +#define UPDATE_ACCEL_AREA(pVMWARE,box) \ +{ \ + if (!(pVMWARE)->vmwareFIFOMarkSet) { \ + (pVMWARE)->vmwareFIFOMarkSet = TRUE; \ + (pVMWARE)->vmwareAccelArea.x1 = (box).x1; \ + (pVMWARE)->vmwareAccelArea.y1 = (box).y1; \ + (pVMWARE)->vmwareAccelArea.x2 = (box).x2; \ + (pVMWARE)->vmwareAccelArea.y2 = (box).y2; \ + } else { \ + if ((box).x1 < (pVMWARE)->vmwareAccelArea.x1) \ + (pVMWARE)->vmwareAccelArea.x1 = (box).x1; \ + if ((box).y1 < (pVMWARE)->vmwareAccelArea.y1) \ + (pVMWARE)->vmwareAccelArea.y1 = (box).y1; \ + if ((box).x2 > (pVMWARE)->vmwareAccelArea.x2) \ + (pVMWARE)->vmwareAccelArea.x2 = (box).x2; \ + if ((box).y2 > (pVMWARE)->vmwareAccelArea.y2) \ + (pVMWARE)->vmwareAccelArea.y2 = (box).y2; \ + } \ +} + +#define ABS(x) (((x) >= 0) ? (x) : -(x)) +#define BOX_INTERSECT(a, b) \ + (ABS(((a).x1 + (a).x2) - ((b).x1 + (b).x2)) <= \ + ((a).x2 - (a).x1) + ((b).x2 - (b).x1) && \ + ABS(((a).y1 + (a).y2) - ((b).y1 + (b).y2)) <= \ + ((a).y2 - (a).y1) + ((b).y2 - (b).y1)) + +#define HIDE_CURSOR(vmPtr,box) \ +{ \ + if (!(vmPtr)->mouseHidden) { \ + if ((vmPtr)->hwCursor && (vmPtr)->cursorDefined && \ + BOX_INTERSECT((vmPtr)->Mouse.Box, box)) { \ + (vmPtr)->mouseHidden = TRUE; \ + if ((vmPtr)->vmwareCapability & SVGA_CAP_CURSOR_BYPASS) { \ + vmwareWriteReg(vmPtr, SVGA_REG_CURSOR_ID, MOUSE_ID); \ + vmwareWriteReg(vmPtr, SVGA_REG_CURSOR_ON, 0); \ + } else { \ + vmwareWriteWordToFIFO(vmPtr, SVGA_CMD_DISPLAY_CURSOR); \ + vmwareWriteWordToFIFO(vmPtr, MOUSE_ID); \ + vmwareWriteWordToFIFO(vmPtr, 0); \ + UPDATE_ACCEL_AREA(vmPtr,(vmPtr)->Mouse.Box); \ + } \ + } \ + } \ +} + +#define HIDE_CURSOR_ACCEL(vmPtr,box) \ +{ \ + if (!(vmPtr)->mouseHidden) { \ + if ((vmPtr)->hwCursor && (vmPtr)->cursorDefined && \ + !((vmPtr)->vmwareCapability & SVGA_CAP_CURSOR_BYPASS) && \ + BOX_INTERSECT((vmPtr)->Mouse.Box, box)) { \ + (vmPtr)->mouseHidden = TRUE; \ + vmwareWriteWordToFIFO(vmPtr, SVGA_CMD_DISPLAY_CURSOR); \ + vmwareWriteWordToFIFO(vmPtr, MOUSE_ID); \ + vmwareWriteWordToFIFO(vmPtr, 0); \ + UPDATE_ACCEL_AREA(vmPtr,(vmPtr)->Mouse.Box); \ + } \ + } \ +} + + +#define SHOW_CURSOR(vmPtr,box) \ +{ \ + if ((vmPtr)->mouseHidden) { \ + if ((vmPtr)->hwCursor && (vmPtr)->cursorDefined && \ + BOX_INTERSECT((vmPtr)->Mouse.Box, box)) { \ + (vmPtr)->mouseHidden = FALSE; \ + if ((vmPtr)->vmwareCapability & SVGA_CAP_CURSOR_BYPASS) { \ + vmwareWriteReg(vmPtr, SVGA_REG_CURSOR_ID, MOUSE_ID); \ + vmwareWriteReg(vmPtr, SVGA_REG_CURSOR_ON, 1); \ + } else { \ + vmwareWriteWordToFIFO(vmPtr, SVGA_CMD_DISPLAY_CURSOR); \ + vmwareWriteWordToFIFO(vmPtr, MOUSE_ID); \ + vmwareWriteWordToFIFO(vmPtr, 1); \ + UPDATE_ACCEL_AREA(vmPtr,(vmPtr)->Mouse.Box); \ + } \ + } \ + } \ +} + +/* Only use this for debugging */ + +#define HIDE_CURSOR_ALWAYS(vmPtr,box) \ +{ \ + vmwareWriteWordToFIFO(vmPtr, SVGA_CMD_DISPLAY_CURSOR); \ + vmwareWriteWordToFIFO(vmPtr, MOUSE_ID); \ + vmwareWriteWordToFIFO(vmPtr, 0); \ + (vmPtr)->mouseHidden = TRUE; \ + vmwareFIFOMarkSet = TRUE; \ + UPDATE_ACCEL_AREA(vmPtr,(vmPtr)->Mouse.Box); \ +} + +#define SHOW_CURSOR_ALWAYS(vmPtr,box) \ +{ \ + vmwareWriteWordToFIFO(vmPtr, SVGA_CMD_DISPLAY_CURSOR); \ + vmwareWriteWordToFIFO(vmPtr, MOUSE_ID); \ + vmwareWriteWordToFIFO(vmPtr, 1); \ + (vmPtr)->mouseHidden = FALSE; \ + vmwareFIFOMarkSet = TRUE; \ +} + +/*#define DEBUG_LOGGING*/ +#undef DEBUG_LOGGING +#ifdef DEBUG_LOGGING +#define VmwareLog(args) ErrorF args +#define TRACEPOINT VmwareLog((__FUNCTION__ ":" __FILE__ "\n")); +#else +#define VmwareLog(args) +#define TRACEPOINT +#endif + +/* Undefine this to kill all acceleration */ +#define ACCELERATE_OPS + +typedef struct vmwarePrivGC +{ + GCFuncs *wrapFuncs; + GCOps *wrapOps; +} +vmwarePrivGC, *vmwarePrivGCPtr; + + +extern int vmwareGCPrivateIndex; + +#define GEN_FUNC_WRAPPER(cond,init,setBB,op) \ + if ((cond)) { \ + init; \ + \ + if (pVMWARE->vmwareBBLevel == 0) { \ + BoxRec BB; \ + \ + setBB; \ + HIDE_CURSOR(pVMWARE, BB); \ + vmwareWaitForFB(pVMWARE); \ + pVMWARE->vmwareBBLevel++; \ + op; \ + pVMWARE->vmwareBBLevel--; \ + vmwareSendSVGACmdUpdate(pVMWARE, &BB); \ + SHOW_CURSOR(pVMWARE, BB); \ + } else { \ + vmwareWaitForFB(pVMWARE); \ + op; \ + } \ + } else { \ + op; \ + } +#define VM_FUNC_WRAPPER(cond,setBB,op) \ + GEN_FUNC_WRAPPER(cond,,setBB,op) + +#define GC_FUNC_WRAPPER(cond,screen,setBB,op) \ + GEN_FUNC_WRAPPER(cond, VMWAREPtr pVMWARE = VMWAREPTR(infoFromScreen(screen)), setBB, op) + +#define GC_FUNC_ACCEL_WRAPPER(cond,screen,setBB,accelcond,accel,op) \ + GEN_FUNC_WRAPPER(cond, \ + VMWAREPtr pVMWARE = VMWAREPTR(infoFromScreen(screen)); \ + if (accelcond) { \ + BoxRec BB; \ + Bool hidden = pVMWARE->mouseHidden; \ + \ + setBB; \ + if (!hidden) { \ + HIDE_CURSOR_ACCEL(pVMWARE, BB); \ + } \ + accel; \ + if (!hidden) { \ + SHOW_CURSOR(pVMWARE, BB); \ + } \ + UPDATE_ACCEL_AREA(pVMWARE, BB); \ + return; \ + }, \ + setBB, op) + +void vmwareWriteReg( +#if NeedFunctionPrototypes + VMWAREPtr pVMWARE, int index, CARD32 value +#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 + ); + +/* vmwaregc.c */ + +void vmwareInitGC( +#if NeedFunctionPrototypes + void +#endif + ); + +Bool vmwareCreateGC( +#if NeedFunctionPrototypes + GCPtr pGC +#endif + ); + +void vmwareValidateGC( +#if NeedFunctionPrototypes + GCPtr pGC, unsigned long changes, DrawablePtr pDrawable +#endif + ); + +void vmwareChangeGC( +#if NeedFunctionPrototypes + GCPtr pGC, unsigned long changes +#endif + ); + +void vmwareCopyGC( +#if NeedFunctionPrototypes + GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst +#endif + ); + +void vmwareDestroyGC( +#if NeedFunctionPrototypes + GCPtr pGC +#endif + ); + +void vmwareChangeClip( +#if NeedFunctionPrototypes + GCPtr pGC, int type, pointer pValue, int nrects +#endif + ); + +void vmwareDestroyClip( +#if NeedFunctionPrototypes + GCPtr pGC +#endif + ); + +void vmwareCopyClip( +#if NeedFunctionPrototypes + GCPtr pGCDst, GCPtr pGCSrc +#endif + ); + +/* vmwareinit.c */ + +void vmwareInitEnvironment( +#if NeedFunctionPrototypes + void +#endif + ); + +void vmwareInitDisplay( +#if NeedFunctionPrototypes + int screen_idx +#endif + ); + +void vmwareCleanUp( +#if NeedFunctionPrototypes + void +#endif + ); + +/* vmwarescrin.c */ +CARD32 vmwareCalculateOffset(CARD32 mask); + +Bool vmwareScreenInit( +#if NeedFunctionPrototypes + ScreenPtr pScreen, + pointer pbits, int xsize, int ysize, int dpix, int dpiy, int width +#endif + ); + +/* vmwarevga.c */ + +void vmwareSaveVGAInfo( +#if NeedFunctionPrototypes + int screen_idx +#endif + ); + +void vmwareRestoreVGAInfo( +#if NeedFunctionPrototypes + void +#endif + ); + +/* vmwarecmap.c */ + +void vmwareSetPaletteBase( +#if NeedFunctionPrototypes + int pal +#endif + ); + +int vmwareListInstalledColormaps( +#if NeedFunctionPrototypes + ScreenPtr pScreen, Colormap * pmaps +#endif + ); + +int vmwareGetInstalledColormaps( +#if NeedFunctionPrototypes + ScreenPtr pScreen, ColormapPtr * pmap +#endif + ); + +void vmwareStoreColors( +#if NeedFunctionPrototypes + ColormapPtr pmap, int ndef, xColorItem * pdefs +#endif + ); + +void vmwareInstallColormap( +#if NeedFunctionPrototypes + ColormapPtr pmap +#endif + ); + +void vmwareUninstallColormap( +#if NeedFunctionPrototypes + ColormapPtr pmap +#endif + ); + +void vmwareRestoreColor0( +#if NeedFunctionPrototypes + ScreenPtr pScreen +#endif + ); + +/* vmwarecurs.c */ +Bool vmwareCursorInit( +#if NeedFunctionPrototypes + char *pm, ScreenPtr pScr +#endif + ); + +Bool vmwareRealizeCursor( +#if NeedFunctionPrototypes + ScreenPtr pScr, CursorPtr pCurs +#endif + ); + +Bool vmwareUnrealizeCursor( +#if NeedFunctionPrototypes + ScreenPtr pScr, CursorPtr pCurs +#endif + ); + +void vmwareSetCursor( +#if NeedFunctionPrototypes + ScreenPtr pScr, CursorPtr pCurs, int x, int y +#endif + ); + +void vmwareRepositionCursor( +#if NeedFunctionPrototypes + ScreenPtr pScr +#endif + ); + +void vmwareRestoreCursor( +#if NeedFunctionPrototypes + ScreenPtr pScr +#endif + ); + +void vmwareMoveCursor( +#if NeedFunctionPrototypes + ScreenPtr pScr, int x, int y +#endif + ); + +void vmwareRenewCursorColor( +#if NeedFunctionPrototypes + ScreenPtr pScr +#endif + ); + +void vmwareRecolorCursor( +#if NeedFunctionPrototypes + ScreenPtr pScr, CursorPtr pCurs, Bool displayed +#endif + ); + +void vmwareWarpCursor( +#if NeedFunctionPrototypes + ScreenPtr pScr, int x, int y +#endif + ); + +void vmwareQueryBestSize( +#if NeedFunctionPrototypes + int class, unsigned short *pwidth, unsigned short *pheight, ScreenPtr pScr +#endif + ); + +void vmwareCursorOff( +#if NeedFunctionPrototypes + VMWAREPtr pVMWARE +#endif + ); + +void vmwareClearSavedCursor( +#if NeedFunctionPrototypes + int scr_index +#endif + ); + +void vmwareBlockHandler( +#if NeedFunctionPrototypes + int i, pointer blockData, pointer pTimeout, pointer pReadmask +#endif + ); + +/* BEGIN Screen functions that draw */ + +void vmwareCopyWindow( +#if NeedFunctionPrototypes + WindowPtr pWindow, DDXPointRec ptOldOrg, RegionPtr prgnSrc +#endif + ); + +void vmwarePaintWindow( +#if NeedFunctionPrototypes + WindowPtr pWindow, RegionPtr pRegion, int what +#endif + ); + +void vmwareGetSpans( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, + int wMax, DDXPointPtr pPoints, int *pWidths, int nSpans, char *pDst +#endif + ); + +void vmwareGetImage( +#if NeedFunctionPrototypes + DrawablePtr src, + int x, + int y, + int w, + int h, unsigned int format, unsigned long planeMask, char *pBinImage +#endif + ); + +void vmwareSaveDoomedAreas( +#if NeedFunctionPrototypes + WindowPtr pWin, RegionPtr prgnSave, int xorg, int yorg +#endif + ); + +RegionPtr vmwareRestoreAreas( +#if NeedFunctionPrototypes + WindowPtr pWin, + RegionPtr prgnRestore +#endif + ); + +/* END Screen functions that draw */ + +/* BEGIN GCOps */ + +void vmwareFillSpans( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, + GCPtr pGC, int nInit, DDXPointPtr pptInit, int *pwidthInit, int fSorted +#endif + ); + +void vmwareSetSpans( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, + GCPtr pGC, + char *psrc, DDXPointPtr ppt, int *pwidth, int nspans, int fSorted +#endif + ); + +void vmwarePutImage( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, + GCPtr pGC, + int depth, + int x, int y, int w, int h, int leftPad, int format, char *pBits +#endif + ); + +void vmwareDoBitblt(DrawablePtr pSrc, +#if NeedFunctionPrototypes + DrawablePtr pDst, + int alu, RegionPtr prgnDst, DDXPointPtr pptSrc, unsigned long planemask, unsigned long bitplane +#endif + ); + +RegionPtr vmwareCopyArea( +#if NeedFunctionPrototypes + DrawablePtr pSrc, + DrawablePtr pDst, + GCPtr pGC, int srcx, int srcy, int w, int h, int dstx, int dsty +#endif + ); + +RegionPtr vmwareCopyPlane( +#if NeedFunctionPrototypes + DrawablePtr pSrcDrawable, + DrawablePtr pDstDrawable, + GCPtr pGC, + int srcx, + int srcy, + int width, int height, int dstx, int dsty, unsigned long bitPlane +#endif + ); + +void vmwarePolyPoint( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit +#endif + ); + +void vmwarePolylines( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit +#endif + ); + +void vmwarePolySegment( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pSegs +#endif + ); + +void vmwarePolyRectangle( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, GCPtr pGC, int nrects, xRectangle * pRects +#endif + ); + +void vmwarePolyArc( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc * parcs +#endif + ); + +void vmwareFillPolygon( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, + GCPtr pGC, int shape, int mode, int count, DDXPointPtr pPts +#endif + ); + +void vmwarePolyFillRect( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, GCPtr pGC, int nrectFill, xRectangle * prectInit +#endif + ); + +void vmwarePolyFillArc( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc * parcs +#endif + ); + +int vmwarePolyText8( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, char *chars +#endif + ); + +int vmwarePolyText16( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, + GCPtr pGC, int x, int y, int count, unsigned short *chars +#endif + ); + +void vmwareImageText8( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, char *chars +#endif + ); + +void vmwareImageText16( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, + GCPtr pGC, int x, int y, int count, unsigned short *chars +#endif + ); + +void vmwareImageGlyphBlt( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, + GCPtr pGC, + int x, int y, unsigned int nglyph, CharInfoPtr * ppci, pointer pglyphBase +#endif + ); + +void vmwarePolyGlyphBlt( +#if NeedFunctionPrototypes + DrawablePtr pDrawable, + GCPtr pGC, + int x, int y, unsigned int nglyph, CharInfoPtr * ppci, pointer pglyphBase +#endif + ); + +void vmwarePushPixels( +#if NeedFunctionPrototypes + GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst, int w, int h, int x, int y +#endif + ); + +/* END GCOps */ +#endif |