/******************************Module*Header*******************************\ * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * !! !! * !! WARNING: NOT DDK SAMPLE CODE !! * !! !! * !! This source code is provided for completeness only and should not be !! * !! used as sample code for display driver development. Only those sources !! * !! marked as sample code for a given driver component should be used for !! * !! development purposes. !! * !! !! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * * Module Name: glglobal.h * * Content: * * Copyright (c) 1994-1999 3Dlabs Inc. Ltd. All rights reserved. * Copyright (c) 1995-2003 Microsoft Corporation. All rights reserved. \*****************************************************************************/ // // glglobal.h // // Common shared area for all components #ifdef __GLGLOBAL #pragma message ("FILE : "__FILE__" : Multiple inclusion") #endif #define __GLGLOBAL // Registry locations #define REGKEYROOT "SOFTWARE\\" #define REGKEYDIRECTXSUFFIX "\\DirectX" #define REGKEYDISPLAYSUFFIX "\\Display" #define REGKEYVFWSUFFIX "\\VFW" #define MAXCONTEXT 128 #define MAX_SUBBUFFERS 32 // Max no of letters in the device name. #define MAX_DEVICENAME_SIZE 32 // This many dwords to resend the bad regs every DMAA buffer #define PERMEDIA_REV1_BAD_READBACK_REGISTER_SPACE 12 #define GLINT_DMA 1 #define GLINT_NON_DMA 2 #define GLINT_FAKE_DMA 8 #define GLINT_UNKNOWN_INTERFACE 0xFF // Definitions for the various chip types. #define VENDOR_ID_3DLABS 0x3D3D #define VENDOR_ID_TI 0x104C // Allof these ID's are guaranteed to fit into 16 bits #define NOCHIP_ID 0x0 #define GLINT300SX_ID 0x1 #define GLINT500TX_ID 0x2 #define DELTA_ID 0x3 #define PERMEDIA_ID 0x4 #define TIPERMEDIA_ID 0x3d04 #define GLINTMX_ID 0x6 #define TIPERMEDIA2_ID 0x3d07 // also known as P2C or P2A as of july 98 #define GAMMA_ID 0x8 #define PERMEDIA2_ID 0x9 // also known as P2V #define PERMEDIA3_ID 0xa #define GLINTR3_ID 0xb #define PERMEDIA4_ID 0xc #define GLINTR4_ID 0xd #define GAMMA2_ID 0xe #define GAMMA3_ID 0xf #define GIGI_ID 0x8000 #define UNKNOWN_DEVICE_ID 0xffff #define GLINTRX_ID GLINTR3_ID #define GLINT_ID GLINT300SX_ID #define P3R3_ID PERMEDIA3_ID #define PERMEDIA_SUBSYSTEM_ID 0x96 #define PERMEDIA_NT_SUBSYSTEM_ID 0x98 #define PERMEDIA_LC_SUBSYSTEM_ID 0x99 #define PERMEDIA2_SUBSYSTEM_ID 0xa0 // Pointer types - used in mini\pointer.c #define SOFTWARECURSOR 0 #define HARDWARECURSOR 1 #define GLINT300SX_REV1 (0 | (GLINT300SX_ID << 16)) #define GLINT300SX_REV2 (2 | (GLINT300SX_ID << 16)) #define GLINT500TX_REV1 (1 | (GLINT500TX_ID << 16)) #define GLINTMX_REV1 (1 | (GLINTMX_ID << 16)) #define DELTA_REV1 (1 | (DELTA_ID << 16)) #define PERMEDIA_REV1 (1 | (PERMEDIA_ID << 16)) #define TI_PERMEDIA_REV1 (1 | (TIPERMEDIA_ID << 16)) #define PERMEDIA2_REV0 (0 | (PERMEDIA2_ID << 16)) #define PERMEDIA2_REV1 (1 | (PERMEDIA2_ID << 16)) #define TIPERMEDIA2_REV1 (1 | (TIPERMEDIA2_ID << 16)) #define TIPERMEDIA2_REV2 (0x11 | (TIPERMEDIA2_ID << 16)) #define PERMEDIA3_REV1 (1 | (PERMEDIA3_ID << 16)) #define GLINTR3_REV1 (1 | (GLINTR3_ID << 16)) #define PERMEDIA4_REV1 (1 | (PERMEDIA4_ID << 16)) #define GLINTR4_REV1 (1 | (GLINTR4_ID << 16)) #define GLINT_GETVERSION 1 #define GLINT_IOCTL_ADD_CONTEXT_MEMORY 2 #define GLINT_MEMORY_REQUEST 3 #define GLINT_16TO32_POINTER 4 #define GLINT_I2C 5 #define GLINT_VMI_COMMAND 6 #define GLINT_FILE_IO 7 // defined in demondef.h //#define GLINT_DEMON_COMMAND 8 #define GLINT_SIMULATOR 9 #define GLINT_GET_SOFT_ENGINE_INFO 6009 #define IOCTL_REGISTER_TEXTURE_HANDLER 0x20 #define IOCTL_REMOVE_TEXTURE_HANDLER 0x21 typedef struct { unsigned long dwDevNode; unsigned long Ring0EventHandle; // Ring zero event handle to signal. Free'd by IOCTL on failure } REGISTERTEXTUREHANDLERIN, *PREGISTERTEXTUREHANDLERIN; typedef struct { unsigned long Handle; // Returned handle unsigned long Index; } REGISTERTEXTUREHANDLEROUT, *PREGISTERTEXTUREHANDLEROUT; typedef struct { unsigned long dwDevNode; unsigned long Handle; // Handle returned from IOCTL_REGISTER_TEXTURE_HANDLER } REMOVETEXTUREHANDLERIN, *PREMOVETEXTUREHANDLERIN; typedef struct { unsigned long Unused; } REMOVETEXTUREHANDLEROUT, *PREMOVETEXTUREHANDLEROUT; // What is this request for? #define GLINT_MEMORY_ALLOCATE 1 #define GLINT_MEMORY_FREE 2 typedef struct tagALLOCREQUEST { unsigned long dwSize; unsigned long dwDevNode; unsigned long dwFlags; unsigned long dwBytes; unsigned long ptr16; // in/out unsigned long ptr32; // in/out } ALLOCREQUEST, *LPALLOCREQUEST; #define GLINT_I2C_READ 0 #define GLINT_I2C_WRITE 1 #define GLINT_I2C_RESET 2 #define GLINT_I2C_DEVICE_PRESENT 3 #define GLINT_I2C_DETECT_DATA_LOW 4 #define GLINT_I2C_READ_NOBASEADDR 5 typedef struct tagI2CREQUEST { unsigned long dwSize; unsigned long dwDevNode; unsigned long dwOperation; // What do we want to do unsigned short wSlaveAddress; // Slave we are talking to unsigned char NumItems; // Number of items to send/receive unsigned char Data[256]; // Data to send/receive unsigned long dwReserved1; // A reserved DWORD unsigned long dwReserved2; // A reserved DWORD unsigned long dwReserved3; // A reserved DWORD unsigned long dwReserved4; // A reserved DWORD } I2CREQUEST, *LPI2CREQUEST; #define GLINT_VMI_READ 0 #define GLINT_VMI_WRITE 1 #define GLINT_VMI_GETMUTEX_A 2 #define GLINT_VMI_RELEASEMUTEX_A 3 typedef struct tagVMIREQUEST { unsigned long dwSize; unsigned long dwDevNode; unsigned long dwOperation; // What do we want to do unsigned long dwRegister; // Register to talk to unsigned long dwCommand; // Command to send unsigned long dwMutex; // A reserved DWORD unsigned long dwReserved2; // A reserved DWORD unsigned long dwReserved3; // A reserved DWORD unsigned long dwReserved4; // A reserved DWORD } VMIREQUEST, *LPVMIREQUEST; #define _UNKNOWN_STREAM_CARD 0 #define _3DLBROOKTREE_DAUGHTER_INRESET 1 #define _3DLBROOKTREE_DAUGHTER 2 #define _3DLRESERVED 3 #define _GENERIC_BROOKTREE868_DAUGHTER_8BITS 4 #define _GENERIC_BROOKTREE868_DAUGHTER_16BITS 5 #define _3DLCHRONTEL_BROOKTREE_DAUGHTER 6 #define _3DLCHRONTEL_SAMSUNG_DAUGHTER 7 #define _GENERIC_CHRONTEL_DAUGHTER_8BITS 8 #define _GENERIC_CHRONTEL_DAUGHTER_16BITS 9 #define GLINT_TVOUT_ENABLED 0 #define GLINT_TVOUT_UPDATE_QUALITY 1 #define GLINT_TVOUT_UPDATE_MODE 2 #define GLINT_TVOUT_UPDATE_POSITION 3 typedef struct tagTVOUTREQUEST { unsigned long dwSize; unsigned long dwDevNode; unsigned long dwOperation; // What do we want to do unsigned long dwReturnVal; // Returned value unsigned long dwSendVal; // A sent value unsigned long dwReserved1; // A reserved DWORD unsigned long dwReserved2; // A reserved DWORD unsigned long dwReserved3; // A reserved DWORD unsigned long dwReserved4; // A reserved DWORD } TVOUTREQUEST, *LPTVOUTREQUEST; // Initialize VFW (turn off DisplayDriver heap, enable DDRAW, etc) #define GLINT_VFW_INIT 1 // De-Initialize VFW (re-enable DisplayDriver heap, etc) #define GLINT_VFW_CLOSE 2 // Setup the Streaming capture buffers // Takes a width and height, returns the stride and locations of the buffers #define GLINT_VFW_BUFFER_SETUP 3 // Capture the current buffer // Takes src and dest rects and a bitmap to upload to. // Returns the time at which it was captured relative to the clock reset #define GLINT_VFW_BUFFER_CAPTURE 4 // No longer used #define GLINT_VFW_RESERVED1 5 #define GLINT_VFW_RESERVED2 6 // Starts the streaming capture by initializing interrupts #define GLINT_VFW_STREAM_START 7 // Stops the streaming capture by stopping interrupts #define GLINT_VFW_STREAM_STOP 8 // Resets the clock. This is used at the start of the streaming. // Takes a flag to say wether the clock is timed on PAL or NTSC #define GLINT_VFW_RESETCLOCK 9 // Gets the current elapsed time #define GLINT_VFW_GETTIME 10 // Sets up the stretch buffer - this doesn't have to succeed for the capture // to work. Performance is helped if is does succeed. #define GLINT_VFW_STRETCHBUFFER_SETUP 11 // Starts and stops the video run (will cause interrupts to be turned on/off) #define GLINT_VFW_START_VIDEO 12 #define GLINT_VFW_STOP_VIDEO 13 // Gets the IRQ that the VFW driver should use #define GLINT_VFW_GET_IRQ 14 typedef struct tagVFWREQUEST { // Sent values unsigned long dwSize; unsigned long dwDevNode; unsigned long dwOperation; // What do we want to do // For buffer allocations unsigned long dwWidth; // Width of the requested buffer unsigned long dwHeight; // Height of the requested buffer // For the upload operations unsigned long dwBitmapWidth; // Width of the bitmap used when uploading unsigned long fpBuffer; // Buffer to copy into unsigned long dwSrcLeft; // Source Rect for the operation unsigned long dwSrcRight; unsigned long dwSrcTop; unsigned long dwSrcBottom; unsigned long dwDestLeft; // Dest Rect for the operation unsigned long dwDestRight; unsigned long dwDestTop; unsigned long dwDestBottom; unsigned long dwSrcBPP; // Source BPP unsigned long dwDestBPP; // Destination BPP unsigned long bSrcYUV; // Source is YUV? No need for dest as VFW only know YVU9 // and we don't do that format // Various config settings unsigned long bEurope; // Is this PAL or NTSC? unsigned long bFilterVideo; // Should we filter the video? unsigned long bBobVideo; // Should we try to bob on the upload? // Return values unsigned long dwStride; // Stride of the setup buffers unsigned long dwAddress0; // Address of buffer 0 unsigned long dwAddress1; // Address of buffer 0 unsigned long dwAddress2; // Address of buffer 0 unsigned long dwCurrentTime; // The current time in milliseconds (0 based) from the reset of the clock unsigned long dwIRQ; // The current IRQ to use unsigned long dwVFWCallback; // Callback function for interrupt } VFWREQUEST, *LPVFWREQUEST; // File IO VxD requests #define GLINT_FIO_OPEN 0 #define GLINT_FIO_READ 1 #define GLINT_FIO_WRITE 2 #define GLINT_FIO_SIZE 3 #define GLINT_FIO_CLOSE 4 typedef struct tagFIOREQUEST { unsigned long dwSize; unsigned long dwDevNode; unsigned long dwOperation; // What do we want to do unsigned long dwHandle; unsigned long dwBuff; unsigned long dwBuffLen; unsigned long dwOffset; } FIOREQUEST, *LPFIOREQUEST; // P3 Csim requests #define GLINT_SSD_STARTDMA 0 #define GLINT_SSD_READBACK 1 #define GLINT_SSD_GETOUTPUTDWORDS 2 #define GLINT_SSD_SETOUTPUTFIFO 3 #define GLINT_SSD_SETLOGFILENAME 4 #define GLINT_SSD_WRITETOLOGFILE 5 #define GLINT_SSD_WRITEFIFO 6 #define GLINT_SSD_OPENLOGFILE 7 #define GLINT_SSD_CLOSELOGFILE 8 #define GLINT_SSD_WRITETOLOGFILEMULTIPLE 9 typedef struct tagSIMREQUEST { unsigned long dwSize; unsigned long dwOperation; // What do we want to do unsigned long dwAddr; unsigned long dwTagCount; unsigned long dwData; } SIMREQUEST, *LPSIMREQUEST; // Defines for texture semaphore signalling. // Usage: Semaphore index = ((Logical Address) >> TEXTURE_SEMAPHORE_SHIFT) & TEXTURE_SEMAPHORE_MASK // Currently 6 bits of semaphore, 14 bits of texture handle #define MAX_TEXTUREHANDLERS 64 #define TEXTURE_HANDLER_SHIFT 26 #define TEXTURE_HANDLER_MASK 0x3f typedef struct { unsigned long ThreadHandle; unsigned long ThreadEvent; unsigned long ThreadFlags; unsigned long ThreadTime; } TEXTUREHANDLER, *PTEXTUREHANDLER; #define CONTEXT_GENERIC 0 #define CONTEXT_GLINT300SX 1 #define CONTEXT_GLINT500TX 2 #define CONTEXT_DELTA 3 #define CONTEXT_PERMEDIA 4 #define CONTEXT_GLINTMX 6 #define CONTEXT_PERMEDIA2 7 #define CONTEXT_PERMEDIA3 8 #define CONTEXT_GLINT_FAMILY 0x4000 #define CONTEXT_PERMEDIA_FAMILY 0x4001 #define CONTEXT_GIGI 0x8000 #define CONTEXT_ENDOFBLOCK 0xffff // Some well known context and template handles. #define CONTEXT_TEMPLATE_DISPLAY_HANDLE 0 #define CONTEXT_TEMPLATE_DIRECTDRAW_HANDLE 1 #define CONTEXT_TEMPLATE_ALLREADABLE_HANDLE 2 #define CONTEXT_TEMPLATE_DIRECT3D_HANDLE 3 #define CONTEXT_DISPLAY_HANDLE 4 #define CONTEXT_DIRECTX_HANDLE 5 #define CONTEXT_NONE 0xffff #define P3RX_CONTEXT_MASK 0xfffeffff // Everything except TextureManagement #define P3_CONTEXTDUMP_SIZE 744 // 744 regisiters for above mask. // #define P3RX_CONTEXT_MASK 0xffffffff // Everything except TextureManagement // #define P3_CONTEXTDUMP_SIZE 753 // 744 regisiters for above mask. #define INVALID_D3D_HANDLE 0 #define MAX_CONTEXTS_IN_BLOCK 32 #define NPAGES_IN_CONTEXT_BLOCK 6 #define SIZE_OF_CONTEXT_BLOCK (NPAGES_IN_CONTEXT_BLOCK * PAGESIZE) #define SIZE_CONFIGURATIONBASE 32 #define MAX_QUEUE_SIZE (MAX_SUBBUFFERS + 2) // commands to the interrupt controller on the next VBLANK typedef enum { NO_COMMAND = 0, COLOR_SPACE_BUFFER_0, COLOR_SPACE_BUFFER_1, GLINT_RACER_BUFFER_0, GLINT_RACER_BUFFER_1 } VBLANK_CONTROL_COMMAND; // interrupt status bits typedef enum { DMA_INTERRUPT_AVAILABLE = 0x1, // can use DMA interrupts VBLANK_INTERRUPT_AVAILABLE = 0x02, // can use VBLANK interrupts SUSPEND_DMA_TILL_VBLANK = 0x04, // Stop doing DMA till after next VBLANK } INTERRUPT_CONTROL; typedef enum { DIRECTX_LASTOP_UNKNOWN = 0, DIRECTX_LASTOP_2D, } DIRECTX_STATE; // bit definitions for the status words in GlintBoardStatus[]: // Currently used to indicate sync and DMA status. We have the following rules: // synced means no outstanding DMA as well as synced. DMA_COMPLETE means n // outstanding DMA but not necessarily synced. Thus when we do a wait on DMA // complete we turn off the synced bit. // XXX for the moment we don't use the synced bit as it's awkward to see where // to unset it - doing so for every access to the chip is too expensive. We // probably need a "I'm about to start downloading to the FIFO" macro which // gets put at the start of any routine which writes to the FIFO. // #define GLINT_SYNCED 0x01 #define GLINT_DMA_COMPLETE 0x02 // set when there is no outstanding DMA #define GLINT_INTR_COMPLETE 0x04 #define GLINT_INTR_CONTEXT 0x08 // set if the current context is interrupt enabled #define GLINT_2D_CHANGING 0x10 // set if 2D context is modifying pending fields typedef struct __ContextTable { unsigned long pNextContext; unsigned short pNextContext16; unsigned short nInBlock; unsigned short nUsed; unsigned short FirstFree; unsigned short nFree; unsigned short COffset[MAX_CONTEXTS_IN_BLOCK]; signed short CSize[MAX_CONTEXTS_IN_BLOCK]; unsigned short CTemplate[MAX_CONTEXTS_IN_BLOCK]; unsigned short CEndIndex[MAX_CONTEXTS_IN_BLOCK]; unsigned short CType[MAX_CONTEXTS_IN_BLOCK]; unsigned short CD3DHandle[MAX_CONTEXTS_IN_BLOCK]; } CONTEXTTABLE, *PCONTEXTTABLE; // For holding information about a single DMA Buffer typedef struct tagDMAPartition { unsigned long PhysAddr; // Physical ddress of this sub-buffer #ifndef WIN32 //int pad1; #endif ULONG * VirtAddr; // Virtual address of this sub-buffer #ifndef WIN32 //int pad2; #endif ULONG_PTR MaxAddress; // Maximum address of this sub-buffer #ifndef WIN32 //int pad3; #endif unsigned short Locked; unsigned short bStampedDMA; // Has the VXD Stamped the DMA buffer? } P3_DMAPartition; typedef struct _att21505off { unsigned char WriteAddr1; // 0000 unsigned char PixelColRam; // 0001 unsigned char PixelRdMask; // 0010 unsigned char ReadAdd1; // 0011 unsigned char WriteAddr2; // 0100 unsigned char CursorColRam; // 0101 unsigned char Ctrl0; // 0110 unsigned char ReadAdd2; // 0111 unsigned char Ctrl1; // 1000 unsigned char Ctrl2; // 1001 unsigned char Status; // 1010 unsigned char CursorPattern; // 1011 unsigned char CursorXLow; // 1100 unsigned char CursorXHigh; // 1101 unsigned char CursorYLow; // 1110 unsigned char CursorYHigh; // 1111 } ATT21505OFF; typedef struct _DMAQueue { unsigned long dwContext; // context for fragment unsigned long dwSize; // size of it (DWORDs) unsigned long dwPhys; // physical address unsigned long dwEvent; // event if required } DMAQUEUE; typedef struct _ContextRegs { unsigned short wNumRegs; unsigned short wFirstReg[1]; } CONTEXTREGS; typedef struct _VDDDISPLAYINFO { unsigned short ddiHdrSize; unsigned short ddiInfoFlags; unsigned long ddiDevNodeHandle; unsigned char ddiDriverName[16]; unsigned short ddiXRes; unsigned short ddiYRes; unsigned short ddiDPI; unsigned char ddiPlanes; unsigned char ddiBpp; unsigned short ddiRefreshRateMax; unsigned short ddiRefreshRateMin; unsigned short ddiLowHorz; unsigned short ddiHighHorz; unsigned short ddiLowVert; unsigned short ddiHighVert; unsigned long ddiMonitorDevNodeHandle; unsigned char ddiHorzSyncPolarity; unsigned char ddiVertSyncPolarity; // // new 4.1 stuff // unsigned long diUnitNumber; // device unit number unsigned long diDisplayFlags; // mode specific flags unsigned long diXDesktopPos; // position of desktop unsigned long diYDesktopPos; // ... unsigned long diXDesktopSize; // size of desktop (for panning) unsigned long diYDesktopSize; // ... } VDDDISPLAYINFO; typedef struct _GlintInfo { #ifndef WNT_DDRAW unsigned long dwDevNode; // The VXD's DevNode // Pointers unsigned long dwDSBase; // 32 bit base of data seg unsigned long dwpRegisters; unsigned long dwpFrameBuffer; unsigned long dwpLocalBuffer; // Chip Information unsigned long dwRamDacType; #endif // WNT_DDRAW volatile unsigned long dwFlags; unsigned long ddFBSize; // frame buffer size unsigned long dwScreenBase; // Screen base value for the screen unsigned long dwOffscreenBase; // Start of Offscreen heap // TV Out support unsigned long bTVEnabled; unsigned long bTVPresent; unsigned long dwStreamCardType; unsigned long dwVSBLastAddressIndex; unsigned long dwBaseOffset; unsigned long dwMacroVision; // Driver information #ifndef WNT_DDRAW unsigned long dwVideoMemorySize; #endif // WNT_DDRAW unsigned long dwScreenWidth; unsigned long dwScreenHeight; unsigned long dwVideoWidth; unsigned long dwVideoHeight; unsigned long dwBpp; unsigned long dwScreenWidthBytes; unsigned char bPixelToBytesShift; #ifdef W95_DDRAW unsigned char bPad1[3]; #endif ULONG_PTR pRegs; unsigned long PixelClockFrequency; unsigned long MClkFrequency; // Chip information. This should be filled out as much as // possible. We may not know all the information though. unsigned long dwRenderChipID; unsigned long dwRenderChipRev; unsigned long dwRenderFamily; unsigned long dwGammaRev; unsigned long dwTLChipID; unsigned long dwTLFamily; #ifndef WNT_DDRAW unsigned long dwSupportChipID; unsigned long dwSupportChipRev; unsigned long dwBoardID; unsigned long dwBoardRev; #endif // WNT_DDRAW unsigned short DisabledByGLDD; #ifdef W95_DDRAW unsigned short wPad2; #endif unsigned long bDXDriverEnabled; unsigned long bDRAMBoard; // DirectDraw and Direct3D DMA state unsigned long InterfaceType; unsigned long CurrentPartition; unsigned long NumberOfSubBuffers; P3_DMAPartition DMAPartition[MAX_SUBBUFFERS]; ULONG * volatile CurrentBuffer; // Current BufferPointer ULONG_PTR dwDirectXState; unsigned long dwDMAFlushCount; // DMA information unsigned long dw3DDMABufferSize; // size of dma buffer unsigned long dw3DDMABufferPhys; // physical addresses of buffer ULONG_PTR dw3DDMABufferVirt; // virtual ring 0 address // index offsets into the queue for the front, back and end. Using separate // front and back offsets allows the display driver to add and the interrupt // controller to remove entries without a need for locking code. volatile unsigned long frontIndex; volatile unsigned long backIndex; unsigned long endIndex; unsigned long maximumIndex; // Debugging info. Spots possible memory leaks. unsigned long iSurfaceInfoBlocksAllocated; #ifndef WNT_DDRAW unsigned long dwVideoControl; unsigned long dwDeviceHandle; char szDeviceName[16]; unsigned long dwCurrentContext; unsigned long GlintBoardStatus; // // Some overlay related variable which should be shared with mini port // volatile ULONG bOverlayEnabled; // TRUE if the overlay is on at all volatile ULONG bVBLANKUpdateOverlay; // TRUE if the overlay needs to be updated by the VBLANK routine. volatile ULONG VBLANKUpdateOverlayWidth; // overlay width (updated in vblank) volatile ULONG VBLANKUpdateOverlayHeight; // overlay height (updated in vblank) #endif // WNT_DDRAW } GlintInfo, *LPGLINTINFO; // Config register #define PM_CHIPCONFIG_AGPSIDEBAND (1 << 8) #define PM_CHIPCONFIG_AGP1XCAPABLE (1 << 9) #define PM_CHIPCONFIG_AGP2XCAPABLE (1 << 10) #define PM_CHIPCONFIG_AGP4XCAPABLE (1 << 11) // Gamma config #define G1_CHIPCONFIG_AGPSIDEBAND (1 << 1) #define G1_CHIPCONFIG_AGP1XCAPABLE (1 << 0) // DAC types #define RamDacRGB525 1 // value for RGB525 #define RamDacATT 2 // value for AT&T 21505 #define RamDacTVP3026 3 // TI TVP 3026 (Accel board) // Board types #define BID_MONTSERRAT 0 #define BID_RACER 1 #define BID_ACCEL 2 // definitions for dwFlags // Glint Interrupt Control Bits // // InterruptEnable register #define INTR_DISABLE_ALL 0x00 #define INTR_ENABLE_DMA 0x01 #define INTR_ENABLE_SYNC 0x02 #define INTR_ENABLE_EXTERNAL 0x04 #define INTR_ENABLE_ERROR 0x08 #define INTR_ENABLE_VBLANK 0x10 #define INTR_ENABLE_SCANLINE 0x20 #define INTR_TEXTURE_DOWNLOAD 0x40 #define INTR_ENABLE_BYDMA 0x80 #define INTR_ENABLE_VIDSTREAM_B 0x100 #define INTR_ENABLE_VIDSTREAM_A 0x200 // InterruptFlags register #define INTR_DMA_SET 0x01 #define INTR_SYNC_SET 0x02 #define INTR_EXTERNAL_SET 0x04 #define INTR_ERROR_SET 0x08 #define INTR_VBLANK_SET 0x10 #define INTR_SCANLINE_SET 0x20 #define INTR_BYDMA_SET 0x80 #define INTR_VIDSTREAM_B_SET 0x100 #define INTR_VIDSTREAM_A_SET 0x200 #define INTR_CLEAR_ALL 0x1f #define INTR_CLEAR_DMA 0x01 #define INTR_CLEAR_SYNC 0x02 #define INTR_CLEAR_EXTERNAL 0x04 #define INTR_CLEAR_ERROR 0x08 #define INTR_CLEAR_VBLANK 0x10 #define INTR_CLEAR_SCANLINE 0x20 #define INTR_CLEAR_BYDMA 0x80 #define INTR_CLEAR_VIDSTREAM_B 0x100 #define INTR_CLEAR_VIDSTREAM_A 0x200 #define GMVF_REV2 0x00000001 // chip is rev 2 #define GMVF_FFON 0x00000002 // fast fill enabled #define GMVF_NOIRQ 0x00000004 // IRQ disabled #define GMVF_SETUP 0x00000008 // primitive setup in progress #define GMVF_GCOP 0x00000010 // something is using 4K area (affects mouse) #define GMVF_DMAIP 0x00000020 // DMA started #define GMVF_565 0x00000080 // Run in 565 mode #define GMVF_DELTA 0x00000100 // using delta #define GMVF_8BPPRGB 0x00000200 // use 322 RGB at 8bpp #define GMVF_DISABLE_OVERLAY 0x00000400 // Disable overlay on P4 #define GMVF_SWCURSOR 0x00000800 // Never use a hardware cursor #define GMVF_INTCPTGDI 0x00001000 // Intercept GDI mode #define GMVF_OFFSCRNBM 0x00002000 // Offscreen BitMaps mode #define GMVF_HWWRITEMASK 0x00004000 // Offscreen BitMaps mode #define GMVF_ALLOWP2VLUT 0x00008000 // Driver says P2V LUTs will work #define GMVF_VBLANK_OCCURED 0x00010000 // VBlank has occured #define GMVF_VBLANK_ENABLED 0x00020000 // VBlank interrupt is enabled #define GMVF_VSA_INTERRUPT_OCCURED 0x00040000 // VPort interrupt has occured #define GMVF_FRAME_BUFFER_IS_WC 0x00080000 // Frame buffer is write-combined #define GMVF_CAN_USE_AGP_DMA 0x00100000 // DMA buffers allocated with WC #define GMVF_32BIT_SPANS_ALIGNED 0x00200000 // Must align 32bpp spans. #define GMVF_DFP_DISPLAY 0x00400000 // DFP is connected #define GMVF_QDMA 0x00800000 // 2D using QDMA system #define GMVF_GAMMA 0x01000000 // using gamma chip #define GMVF_NODMA 0x02000000 // DMA disabled #define GMVF_COLORTRANSLATE 0x04000000 // Set if Chip can translate colors #define GMVF_MMX_AVAILABLE 0x08000000 // Set if processor has MMX #define GMVF_EXPORT24BPP 0x10000000 // Set if we should export 24bpp modes #define GMVF_DONOTRESET 0x20000000 #define GMVF_TRYTOVIRTUALISE4PLANEVGA 0x40000000 // Set if we should try to virtualise 4 plane VGA #define GMVF_VIRTUALISE4PLANEVGA 0x80000000 // Set if we are virtualising 4 plane VGA modes. // Cap for the maximum FIFO entries read back on a P3/R3 chip #define MAX_P3_FIFO_ENTRIES 120 #ifndef MINIVDD extern unsigned long CreateContext(struct tagThunkedData* pThisDisplay, LPGLINTINFO, unsigned long, unsigned short, unsigned short ); extern void _cdecl ChangeContext(struct tagThunkedData* pThisDisplay, LPGLINTINFO, unsigned long); extern void DeleteContext(struct tagThunkedData* pThisDisplay, LPGLINTINFO, unsigned long); extern void _cdecl SetEndIndex(LPGLINTINFO, unsigned long, unsigned short); extern void StartDMAProper( struct tagThunkedData*, LPGLINTINFO, unsigned long, unsigned long, unsigned long ); #endif #define MINIVDD_REGISTERDISPLAYDRIVER_BASE 0x1000 // Definitions for RegisterDisplayDriver options #define MINIVDD_SHAREGLINFO MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x00 #define MINIVDD_INITIALISEMODE MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x01 #define MINIVDD_GETGLINFO MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x02 #define MINIVDD_ALLOCATEMEMORY MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x10 #define MINIVDD_FREEMEMORY MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x11 #define MINIVDD_GETREGISTRYKEY MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x20 // For free and allocating memory and selectors for use on the // 16 bit side. #define MINIVDD_MEMORYREQUEST MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x30 // For sending I2C data across the bus #define MINIVDD_I2CREQUEST MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x40 // For sending VMI data to the VideoPort #define MINIVDD_VMIREQUEST MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x41 // For talking to the video demon #define MINIVDD_DEMONREQUEST MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x42 // For sending Video For Windows commands #define MINIVDD_VFWREQUEST MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x43 // For Multi-monitor support #define MINIVDD_ENABLEINTERRUPTS MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x50 #define MINIVDD_DISABLEINTERRUPTS MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x51 #define MINIVDD_TVOUTREQUEST MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x60 //#ifdef P3_CSIMULATOR #define MINIVDD_SENDDMABUFFER MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x100 #define MINIVDD_SETDMABUFFEROUT MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x101 #define MINIVDD_GETOUTDMACOUNT MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x102 #define MINIVDD_SETTESTNAME MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x103 #define MINIVDD_WRITETAGDATATOFIFO MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x104 #define MINIVDD_READBACKDMAADDR MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x105 #define MINIVDD_SETDMAADDR MINIVDD_REGISTERDISPLAYDRIVER_BASE+0x106 //#endif #define REG_HKLM_PREFIX 0x01 #define REG_HKU_PREFIX 0x02 #define REG_HKCU_PREFIX 0x03 #define REG_HKCR_PREFIX 0x04 #define REG_HKCC_PREFIX 0x05 #define REG_HKDD_PREFIX 0x06 #define REG_DEVNODEDEFAULTPREFIX 0x07 #define REG_DEVNODEPREFIX 0x08 #define REGTYPE_STRING 0x100 #define REGTYPE_BINARY 0x300 #define REGTYPE_DWORD 0x400 // Defines for the offsets of regions within the Data Segment: #define DATA_SEGMENT_OFFSET 0x0 #define GLINT_REGISTERS_OFFSET 0x10000 #define DMA_UPLOAD_2D 0x30000 #define DMA_BUFFER_3D 0x38000 #define FONT_CACHE_OFFSET 0x180000 #define FINAL_DATA_SEGMENT_SIZE 0x280000 // Defines the maximum size of the regions #define DATA_SEGMENT_SIZE GLINT_REGISTERS_OFFSET - DATA_SEGMENT_OFFSET #define GLINT_REGISTERS_SIZE DMA_UPLOAD_2D - GLINT_REGISTERS_OFFSET #define DMA_UPLOAD_2D_SIZE DMA_BUFFER_3D - DMA_UPLOAD_2D #define DMA_BUFFER_3D_SIZE FONT_CACHE_OFFSET - DMA_BUFFER_3D #define FONT_CACHE_SIZE FINAL_DATA_SEGMENT_SIZE - FONT_CACHE_OFFSET // How much will we allow for 2D when it's using the 3D DMA buffer? And // how much can we send in one DMA? Increasing this gives a small // performance improvement on a P2. #define MAX_2D_DMA_USE DMA_BUFFER_3D_SIZE #define MAX_DMA_COUNT 0xffff #define MIN_2D_DMA_BUFFER_SIZE 0x10000 #define MAX_2D_DMA_BUFFER_SIZE 0x60000 // Various independant things that can disable the offscreen bitmap heap. #define D3D_DISABLED 1 #define DRIVER_DISABLED 2