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