xref: /OK3568_Linux_fs/external/xserver/hw/xfree86/common/xf86fbman.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun 
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 1998-2001 by The XFree86 Project, Inc.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Permission is hereby granted, free of charge, to any person obtaining a
6*4882a593Smuzhiyun  * copy of this software and associated documentation files (the "Software"),
7*4882a593Smuzhiyun  * to deal in the Software without restriction, including without limitation
8*4882a593Smuzhiyun  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9*4882a593Smuzhiyun  * and/or sell copies of the Software, and to permit persons to whom the
10*4882a593Smuzhiyun  * Software is furnished to do so, subject to the following conditions:
11*4882a593Smuzhiyun  *
12*4882a593Smuzhiyun  * The above copyright notice and this permission notice shall be included in
13*4882a593Smuzhiyun  * all copies or substantial portions of the Software.
14*4882a593Smuzhiyun  *
15*4882a593Smuzhiyun  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*4882a593Smuzhiyun  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*4882a593Smuzhiyun  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
19*4882a593Smuzhiyun  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20*4882a593Smuzhiyun  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21*4882a593Smuzhiyun  * OTHER DEALINGS IN THE SOFTWARE.
22*4882a593Smuzhiyun  *
23*4882a593Smuzhiyun  * Except as contained in this notice, the name of the copyright holder(s)
24*4882a593Smuzhiyun  * and author(s) shall not be used in advertising or otherwise to promote
25*4882a593Smuzhiyun  * the sale, use or other dealings in this Software without prior written
26*4882a593Smuzhiyun  * authorization from the copyright holder(s) and author(s).
27*4882a593Smuzhiyun  */
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #ifndef _XF86FBMAN_H
30*4882a593Smuzhiyun #define _XF86FBMAN_H
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun #include "scrnintstr.h"
33*4882a593Smuzhiyun #include "regionstr.h"
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun #define FAVOR_AREA_THEN_WIDTH		0
36*4882a593Smuzhiyun #define FAVOR_AREA_THEN_HEIGHT		1
37*4882a593Smuzhiyun #define FAVOR_WIDTH_THEN_AREA		2
38*4882a593Smuzhiyun #define FAVOR_HEIGHT_THEN_AREA		3
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun #define PRIORITY_LOW			0
41*4882a593Smuzhiyun #define PRIORITY_NORMAL			1
42*4882a593Smuzhiyun #define PRIORITY_EXTREME		2
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun typedef struct _FBArea {
45*4882a593Smuzhiyun     ScreenPtr pScreen;
46*4882a593Smuzhiyun     BoxRec box;
47*4882a593Smuzhiyun     int granularity;
48*4882a593Smuzhiyun     void (*MoveAreaCallback) (struct _FBArea *, struct _FBArea *);
49*4882a593Smuzhiyun     void (*RemoveAreaCallback) (struct _FBArea *);
50*4882a593Smuzhiyun     DevUnion devPrivate;
51*4882a593Smuzhiyun } FBArea, *FBAreaPtr;
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun typedef struct _FBLinear {
54*4882a593Smuzhiyun     ScreenPtr pScreen;
55*4882a593Smuzhiyun     int size;
56*4882a593Smuzhiyun     int offset;
57*4882a593Smuzhiyun     int granularity;
58*4882a593Smuzhiyun     void (*MoveLinearCallback) (struct _FBLinear *, struct _FBLinear *);
59*4882a593Smuzhiyun     void (*RemoveLinearCallback) (struct _FBLinear *);
60*4882a593Smuzhiyun     DevUnion devPrivate;
61*4882a593Smuzhiyun } FBLinear, *FBLinearPtr;
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun typedef void (*FreeBoxCallbackProcPtr) (ScreenPtr, RegionPtr, void *);
64*4882a593Smuzhiyun typedef void (*MoveAreaCallbackProcPtr) (FBAreaPtr, FBAreaPtr);
65*4882a593Smuzhiyun typedef void (*RemoveAreaCallbackProcPtr) (FBAreaPtr);
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun typedef void (*MoveLinearCallbackProcPtr) (FBLinearPtr, FBLinearPtr);
68*4882a593Smuzhiyun typedef void (*RemoveLinearCallbackProcPtr) (FBLinearPtr);
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun typedef struct {
71*4882a593Smuzhiyun     FBAreaPtr(*AllocateOffscreenArea) (ScreenPtr pScreen,
72*4882a593Smuzhiyun                                        int w, int h,
73*4882a593Smuzhiyun                                        int granularity,
74*4882a593Smuzhiyun                                        MoveAreaCallbackProcPtr moveCB,
75*4882a593Smuzhiyun                                        RemoveAreaCallbackProcPtr removeCB,
76*4882a593Smuzhiyun                                        void *privData);
77*4882a593Smuzhiyun     void (*FreeOffscreenArea) (FBAreaPtr area);
78*4882a593Smuzhiyun     Bool (*ResizeOffscreenArea) (FBAreaPtr area, int w, int h);
79*4882a593Smuzhiyun     Bool (*QueryLargestOffscreenArea) (ScreenPtr pScreen,
80*4882a593Smuzhiyun                                        int *width, int *height,
81*4882a593Smuzhiyun                                        int granularity,
82*4882a593Smuzhiyun                                        int preferences, int priority);
83*4882a593Smuzhiyun     Bool (*RegisterFreeBoxCallback) (ScreenPtr pScreen,
84*4882a593Smuzhiyun                                      FreeBoxCallbackProcPtr FreeBoxCallback,
85*4882a593Smuzhiyun                                      void *devPriv);
86*4882a593Smuzhiyun /* linear functions */
87*4882a593Smuzhiyun      FBLinearPtr(*AllocateOffscreenLinear) (ScreenPtr pScreen,
88*4882a593Smuzhiyun                                             int size,
89*4882a593Smuzhiyun                                             int granularity,
90*4882a593Smuzhiyun                                             MoveLinearCallbackProcPtr moveCB,
91*4882a593Smuzhiyun                                             RemoveLinearCallbackProcPtr
92*4882a593Smuzhiyun                                             removeCB, void *privData);
93*4882a593Smuzhiyun     void (*FreeOffscreenLinear) (FBLinearPtr area);
94*4882a593Smuzhiyun     Bool (*ResizeOffscreenLinear) (FBLinearPtr area, int size);
95*4882a593Smuzhiyun     Bool (*QueryLargestOffscreenLinear) (ScreenPtr pScreen,
96*4882a593Smuzhiyun                                          int *size,
97*4882a593Smuzhiyun                                          int granularity, int priority);
98*4882a593Smuzhiyun     Bool (*PurgeOffscreenAreas) (ScreenPtr);
99*4882a593Smuzhiyun } FBManagerFuncs, *FBManagerFuncsPtr;
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun extern _X_EXPORT Bool xf86RegisterOffscreenManager(ScreenPtr pScreen,
102*4882a593Smuzhiyun                                                    FBManagerFuncsPtr funcs);
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun extern _X_EXPORT Bool
105*4882a593Smuzhiyun  xf86InitFBManagerRegion(ScreenPtr pScreen, RegionPtr ScreenRegion);
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun extern _X_EXPORT Bool
108*4882a593Smuzhiyun  xf86InitFBManagerArea(ScreenPtr pScreen, int PixalArea, int Verbosity);
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun extern _X_EXPORT Bool
111*4882a593Smuzhiyun  xf86InitFBManager(ScreenPtr pScreen, BoxPtr FullBox);
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun extern _X_EXPORT Bool
114*4882a593Smuzhiyun  xf86InitFBManagerLinear(ScreenPtr pScreen, int offset, int size);
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun extern _X_EXPORT Bool
117*4882a593Smuzhiyun  xf86FBManagerRunning(ScreenPtr pScreen);
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun extern _X_EXPORT FBAreaPtr
120*4882a593Smuzhiyun xf86AllocateOffscreenArea(ScreenPtr pScreen,
121*4882a593Smuzhiyun                           int w, int h,
122*4882a593Smuzhiyun                           int granularity,
123*4882a593Smuzhiyun                           MoveAreaCallbackProcPtr moveCB,
124*4882a593Smuzhiyun                           RemoveAreaCallbackProcPtr removeCB, void *privData);
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun extern _X_EXPORT FBAreaPtr
127*4882a593Smuzhiyun xf86AllocateLinearOffscreenArea(ScreenPtr pScreen,
128*4882a593Smuzhiyun                                 int length,
129*4882a593Smuzhiyun                                 int granularity,
130*4882a593Smuzhiyun                                 MoveAreaCallbackProcPtr moveCB,
131*4882a593Smuzhiyun                                 RemoveAreaCallbackProcPtr removeCB,
132*4882a593Smuzhiyun                                 void *privData);
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun extern _X_EXPORT FBLinearPtr
135*4882a593Smuzhiyun xf86AllocateOffscreenLinear(ScreenPtr pScreen,
136*4882a593Smuzhiyun                             int length,
137*4882a593Smuzhiyun                             int granularity,
138*4882a593Smuzhiyun                             MoveLinearCallbackProcPtr moveCB,
139*4882a593Smuzhiyun                             RemoveLinearCallbackProcPtr removeCB,
140*4882a593Smuzhiyun                             void *privData);
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun extern _X_EXPORT void xf86FreeOffscreenArea(FBAreaPtr area);
143*4882a593Smuzhiyun extern _X_EXPORT void xf86FreeOffscreenLinear(FBLinearPtr area);
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun extern _X_EXPORT Bool
146*4882a593Smuzhiyun  xf86ResizeOffscreenArea(FBAreaPtr resize, int w, int h);
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun extern _X_EXPORT Bool
149*4882a593Smuzhiyun  xf86ResizeOffscreenLinear(FBLinearPtr resize, int size);
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun extern _X_EXPORT Bool
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun xf86RegisterFreeBoxCallback(ScreenPtr pScreen,
154*4882a593Smuzhiyun                             FreeBoxCallbackProcPtr FreeBoxCallback,
155*4882a593Smuzhiyun                             void *devPriv);
156*4882a593Smuzhiyun 
157*4882a593Smuzhiyun extern _X_EXPORT Bool
158*4882a593Smuzhiyun  xf86PurgeUnlockedOffscreenAreas(ScreenPtr pScreen);
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun extern _X_EXPORT Bool
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun xf86QueryLargestOffscreenArea(ScreenPtr pScreen,
163*4882a593Smuzhiyun                               int *width, int *height,
164*4882a593Smuzhiyun                               int granularity, int preferences, int priority);
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun extern _X_EXPORT Bool
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun xf86QueryLargestOffscreenLinear(ScreenPtr pScreen,
169*4882a593Smuzhiyun                                 int *size, int granularity, int priority);
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun #endif                          /* _XF86FBMAN_H */
172