via_priv.h revision 7e6fb56f
1/* 2 * Copyright 2006-2007 The Openchrome Project [openchrome.org] 3 * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. 4 * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the "Software"), 8 * to deal in the Software without restriction, including without limitation 9 * the rights to use, copy, modify, merge, publish, distribute, sub license, 10 * and/or sell copies of the Software, and to permit persons to whom the 11 * Software is furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice (including the 14 * next paragraph) shall be included in all copies or substantial portions 15 * of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 23 * DEALINGS IN THE SOFTWARE. 24 */ 25 26#ifndef _VIA_PRIV_H_ 27#define _VIA_PRIV_H_ 1 28 29#ifdef XF86DRI 30#include "via_drm.h" 31#endif 32#include "exa.h" 33 34/* 35 * Alignment macro functions 36 */ 37#define ALIGN_TO(f, alignment) (((f) + ((alignment)-1)) & ~((alignment)-1)) 38 39/* 40 * FOURCC definitions 41 */ 42 43#define FOURCC_XVMC (('C' << 24) + ('M' << 16) + ('V' << 8) + 'X') 44#define FOURCC_RV15 (('5' << 24) + ('1' << 16) + ('V' << 8) + 'R') 45#define FOURCC_RV16 (('6' << 24) + ('1' << 16) + ('V' << 8) + 'R') 46#define FOURCC_RV32 (('2' << 24) + ('3' << 16) + ('V' << 8) + 'R') 47 48/* 49 * Structures for create surface 50 */ 51typedef struct _SWDEVICE 52{ 53 unsigned char * lpSWOverlaySurface[2]; /* Max 2 Pointers to SW Overlay Surface*/ 54 unsigned long dwSWPhysicalAddr[2]; /*Max 2 Physical address to SW Overlay Surface */ 55 unsigned long dwSWCbPhysicalAddr[2]; /* Physical address to SW Cb Overlay Surface, for YV12 format use */ 56 unsigned long dwSWCrPhysicalAddr[2]; /* Physical address to SW Cr Overlay Surface, for YV12 format use */ 57 unsigned long dwHQVAddr[3]; /* Physical address to HQV surface -- CLE_C0 */ 58 /*unsigned long dwHQVAddr[2];*/ /*Max 2 Physical address to SW HQV Overlay Surface*/ 59 unsigned long dwWidth; /*SW Source Width, not changed*/ 60 unsigned long dwHeight; /*SW Source Height, not changed*/ 61 unsigned long dwPitch; /*SW frame buffer pitch*/ 62 unsigned long gdwSWSrcWidth; /*SW Source Width, changed if window is out of screen*/ 63 unsigned long gdwSWSrcHeight; /*SW Source Height, changed if window is out of screen*/ 64 unsigned long gdwSWDstWidth; /*SW Destination Width*/ 65 unsigned long gdwSWDstHeight; /*SW Destination Height*/ 66 unsigned long gdwSWDstLeft; /*SW Position : Left*/ 67 unsigned long gdwSWDstTop; /*SW Position : Top*/ 68 unsigned long dwDeinterlaceMode; /*BOB / WEAVE*/ 69}SWDEVICE; 70typedef SWDEVICE * LPSWDEVICE; 71 72typedef struct _DDUPDATEOVERLAY 73{ 74 CARD32 SrcLeft; 75 CARD32 SrcTop; 76 CARD32 SrcRight; 77 CARD32 SrcBottom; 78 79 CARD32 DstLeft; 80 CARD32 DstTop; 81 CARD32 DstRight; 82 CARD32 DstBottom; 83 84 unsigned long dwFlags; /* flags */ 85 unsigned long dwColorSpaceLowValue; 86} DDUPDATEOVERLAY; 87typedef DDUPDATEOVERLAY * LPDDUPDATEOVERLAY; 88 89/* Definition for dwFlags */ 90#define DDOVER_KEYDEST 1 91#define DDOVER_INTERLEAVED 2 92#define DDOVER_BOB 4 93 94#define FOURCC_HQVSW 0x34565148 /*HQV4*/ 95 96typedef struct 97{ 98 CARD32 dwWidth; 99 CARD32 dwHeight; 100 CARD32 dwOffset; 101 CARD32 dwUVoffset; 102 CARD32 dwFlipTime; 103 CARD32 dwFlipTag; 104 CARD32 dwStartAddr; 105 CARD32 dwV1OriWidth; 106 CARD32 dwV1OriHeight; 107 CARD32 dwV1OriPitch; 108 CARD32 dwV1SrcWidth; 109 CARD32 dwV1SrcHeight; 110 CARD32 dwV1SrcLeft; 111 CARD32 dwV1SrcRight; 112 CARD32 dwV1SrcTop; 113 CARD32 dwV1SrcBot; 114 CARD32 dwSPWidth; 115 CARD32 dwSPHeight; 116 CARD32 dwSPLeft; 117 CARD32 dwSPRight; 118 CARD32 dwSPTop; 119 CARD32 dwSPBot; 120 CARD32 dwSPOffset; 121 CARD32 dwSPstartAddr; 122 CARD32 dwDisplayPictStruct; 123 CARD32 dwDisplayBuffIndex; /* Display buffer Index. 0 to ( dwBufferNumber -1) */ 124 CARD32 dwFetchAlignment; 125 CARD32 dwSPPitch; 126 unsigned long dwHQVAddr[3]; /* CLE_C0 */ 127 /*unsigned long dwHQVAddr[2];*/ 128 CARD32 dwMPEGDeinterlaceMode; /* default value : VIA_DEINTERLACE_WEAVE */ 129 CARD32 dwMPEGProgressiveMode; /* default value : VIA_PROGRESSIVE */ 130 CARD32 dwHQVheapInfo; /* video memory heap of the HQV buffer */ 131 CARD32 dwVideoControl; /* video control flag */ 132 CARD32 dwminifyH; /* Horizontal minify factor */ 133 CARD32 dwminifyV; /* Vertical minify factor */ 134 CARD32 dwMpegDecoded; 135} OVERLAYRECORD; 136 137#define MEM_BLOCKS 4 138 139typedef struct { 140 unsigned long base; /* Offset into fb */ 141 int pool; /* Pool we drew from */ 142#ifdef XF86DRI 143 int drm_fd; /* Fd in DRM mode */ 144 drm_via_mem_t drm; /* DRM management object */ 145#endif 146 void *pVia; /* VIA driver pointer */ 147 FBLinearPtr linear; /* X linear pool info ptr */ 148 ExaOffscreenArea *exa; 149 ScrnInfoPtr pScrn; 150} VIAMem; 151 152typedef VIAMem *VIAMemPtr; 153 154 155 156typedef struct { 157 unsigned long gdwVideoFlagSW; 158 unsigned long gdwVideoFlagMPEG; 159 unsigned long gdwAlphaEnabled; /* For Alpha blending use*/ 160 161 VIAMem SWOVMem; 162 VIAMem HQVMem; 163 VIAMem SWfbMem; 164 165 CARD32 SrcFourCC; 166 DDUPDATEOVERLAY UpdateOverlayBackup; /* For HQVcontrol func use 167 // To save MPEG updateoverlay info.*/ 168 169/* device struct */ 170 SWDEVICE SWDevice; 171 OVERLAYRECORD overlayRecordV1; 172 OVERLAYRECORD overlayRecordV3; 173 174 BoxRec AvailFBArea; 175 FBLinearPtr SWOVlinear; 176 177 Bool MPEG_ON; 178 Bool SWVideo_ON; 179 180/*To solve the bandwidth issue */ 181 unsigned long gdwUseExtendedFIFO; 182 183/* For panning mode use */ 184 int panning_x; 185 int panning_y; 186 int oldPanningX; 187 int oldPanningY; 188 189/* Maximum resolution with interpolation */ 190 unsigned long maxWInterp; 191 unsigned long maxHInterp; 192 193} swovRec, *swovPtr; 194 195#endif /* _VIA_PRIV_H_ */ 196