diff options
author | Dave Airlie <airlied@redhat.com> | 2012-07-17 14:33:15 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-07-17 14:33:15 +1000 |
commit | 2c02712a860abb0a8584290a197071b8c0aa3fed (patch) | |
tree | 9080ec7b1231d3be7ac6c569e56e34b3eedf40c6 | |
parent | 09c3c15aa3bfb44e35325c3beee1de08f9366734 (diff) |
s3: port to new X server compat API
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/compat-api.h | 99 | ||||
-rw-r--r-- | src/s3.h | 9 | ||||
-rw-r--r-- | src/s3_dga.c | 4 | ||||
-rw-r--r-- | src/s3_driver.c | 48 | ||||
-rw-r--r-- | src/s3_shadow.c | 6 |
6 files changed, 133 insertions, 34 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 84f926c..bd8d4b2 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -29,6 +29,7 @@ s3_drv_la_LDFLAGS = -module -avoid-version s3_drv_ladir = @moduledir@/drivers s3_drv_la_SOURCES = \ + compat-api.h \ newmmio.h \ s3_bios.c \ s3_cursor.c \ diff --git a/src/compat-api.h b/src/compat-api.h new file mode 100644 index 0000000..6bc946f --- /dev/null +++ b/src/compat-api.h @@ -0,0 +1,99 @@ +/* + * Copyright 2012 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Author: Dave Airlie <airlied@redhat.com> + */ + +/* this file provides API compat between server post 1.13 and pre it, + it should be reused inside as many drivers as possible */ +#ifndef COMPAT_API_H +#define COMPAT_API_H + +#ifndef GLYPH_HAS_GLYPH_PICTURE_ACCESSOR +#define GetGlyphPicture(g, s) GlyphPicture((g))[(s)->myNum] +#define SetGlyphPicture(g, s, p) GlyphPicture((g))[(s)->myNum] = p +#endif + +#ifndef XF86_HAS_SCRN_CONV +#define xf86ScreenToScrn(s) xf86Screens[(s)->myNum] +#define xf86ScrnToScreen(s) screenInfo.screens[(s)->scrnIndex] +#endif + +#ifndef XF86_SCRN_INTERFACE + +#define SCRN_ARG_TYPE int +#define SCRN_INFO_PTR(arg1) ScrnInfoPtr pScrn = xf86Screens[(arg1)] + +#define SCREEN_ARG_TYPE int +#define SCREEN_PTR(arg1) ScreenPtr pScreen = screenInfo.screens[(arg1)] + +#define SCREEN_INIT_ARGS_DECL int i, ScreenPtr pScreen, int argc, char **argv + +#define BLOCKHANDLER_ARGS_DECL int arg, pointer blockData, pointer pTimeout, pointer pReadmask +#define BLOCKHANDLER_ARGS arg, blockData, pTimeout, pReadmask + +#define CLOSE_SCREEN_ARGS_DECL int scrnIndex, ScreenPtr pScreen +#define CLOSE_SCREEN_ARGS scrnIndex, pScreen + +#define ADJUST_FRAME_ARGS_DECL int arg, int x, int y, int flags +#define ADJUST_FRAME_ARGS(arg, x, y) (arg)->scrnIndex, x, y, 0 + +#define SWITCH_MODE_ARGS_DECL int arg, DisplayModePtr mode, int flags +#define SWITCH_MODE_ARGS(arg, m) (arg)->scrnIndex, m, 0 + +#define FREE_SCREEN_ARGS_DECL int arg, int flags + +#define VT_FUNC_ARGS_DECL int arg, int flags +#define VT_FUNC_ARGS pScrn->scrnIndex, 0 + +#define XF86_SCRN_ARG(x) ((x)->scrnIndex) +#else +#define SCRN_ARG_TYPE ScrnInfoPtr +#define SCRN_INFO_PTR(arg1) ScrnInfoPtr pScrn = (arg1) + +#define SCREEN_ARG_TYPE ScreenPtr +#define SCREEN_PTR(arg1) ScreenPtr pScreen = (arg1) + +#define SCREEN_INIT_ARGS_DECL ScreenPtr pScreen, int argc, char **argv + +#define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer pTimeout, pointer pReadmask +#define BLOCKHANDLER_ARGS arg, pTimeout, pReadmask + +#define CLOSE_SCREEN_ARGS_DECL ScreenPtr pScreen +#define CLOSE_SCREEN_ARGS pScreen + +#define ADJUST_FRAME_ARGS_DECL ScrnInfoPtr arg, int x, int y +#define ADJUST_FRAME_ARGS(arg, x, y) arg, x, y + +#define SWITCH_MODE_ARGS_DECL ScrnInfoPtr arg, DisplayModePtr mode +#define SWITCH_MODE_ARGS(arg, m) arg, m + +#define FREE_SCREEN_ARGS_DECL ScrnInfoPtr arg + +#define VT_FUNC_ARGS_DECL ScrnInfoPtr arg +#define VT_FUNC_ARGS pScrn + +#define XF86_SCRN_ARG(x) (x) + +#endif + +#endif @@ -48,6 +48,7 @@ #include <X11/extensions/Xv.h> #include "fourcc.h" +#include "compat-api.h" typedef struct _S3RegRec { unsigned char cr31, cr32, cr33, cr34, cr3a, cr3b, cr3c; @@ -161,7 +162,7 @@ typedef struct _S3Rec { int *indicies, LOCO *colors, VisualPtr pVisual); - Bool (*CloseScreen)(int, ScreenPtr); + Bool (*CloseScreen)(CLOSE_SCREEN_ARGS_DECL); unsigned char *imageBuffer; int imageWidth; @@ -172,7 +173,7 @@ typedef struct _S3Rec { int rotate; unsigned char * ShadowPtr; int ShadowPitch; - void (*PointerMoved)(int index, int x, int y); + void (*PointerMoved)(SCRN_ARG_TYPE arg, int x, int y); } S3Rec, *S3Ptr; @@ -198,7 +199,7 @@ Bool S3AccelInit(ScreenPtr pScreen); Bool S3AccelInitNewMMIO(ScreenPtr pScreen); Bool S3AccelInitPIO(ScreenPtr pScreen); Bool S3DGAInit(ScreenPtr pScreen); -Bool S3SwitchMode(int scrnIndex, DisplayModePtr mode, int flags); +Bool S3SwitchMode(SWITCH_MODE_ARGS_DECL); int S3GetRefClock(ScrnInfoPtr pScrn); void S3InitVideo(ScreenPtr pScreen); @@ -236,7 +237,7 @@ void S3OutTiIndReg(ScrnInfoPtr pScrn, CARD32 reg, unsigned char mask, Bool S3_CursorInit(ScreenPtr pScreen); /* in s3_shadow.c */ -void S3PointerMoved(int index, int x, int y); +void S3PointerMoved(SCRN_ARG_TYPE arg, int x, int y); void S3RefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox); void S3RefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox); void S3RefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox); diff --git a/src/s3_dga.c b/src/s3_dga.c index a1fa86b..5b61d1c 100644 --- a/src/s3_dga.c +++ b/src/s3_dga.c @@ -251,7 +251,7 @@ static Bool S3_SetMode(ScrnInfoPtr pScrn, DGAModePtr pMode) pMode->bitsPerPixel : pMode->depth); - S3SwitchMode(indx, pMode->mode, 0); + S3SwitchMode(SWITCH_MODE_ARGS(pScrn, pMode->mode)); } return TRUE; @@ -270,7 +270,7 @@ static void S3_SetViewport(ScrnInfoPtr pScrn, int x, int y, int flags) { S3Ptr pS3 = S3PTR(pScrn); - pScrn->AdjustFrame(pScrn->pScreen->myNum, x, y, flags); + pScrn->AdjustFrame(ADJUST_FRAME_ARGS(pScrn, x, y)); pS3->DGAViewportStatus = 0; } diff --git a/src/s3_driver.c b/src/s3_driver.c index 01250ba..61242ad 100644 --- a/src/s3_driver.c +++ b/src/s3_driver.c @@ -93,18 +93,17 @@ static const OptionInfoRec * S3AvailableOptions(int chipid, int busid); static void S3Identify(int flags); static Bool S3Probe(DriverPtr drv, int flags); static Bool S3PreInit(ScrnInfoPtr pScrn, int flags); -static Bool S3EnterVT(int scrnIndex, int flags); -static void S3LeaveVT(int scrnIndex, int flags); +static Bool S3EnterVT(VT_FUNC_ARGS_DECL); +static void S3LeaveVT(VT_FUNC_ARGS_DECL); static void S3Save(ScrnInfoPtr pScrn); -static Bool S3ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, - char **argv); +static Bool S3ScreenInit(SCREEN_INIT_ARGS_DECL); static Bool S3MapMem(ScrnInfoPtr pScrn); static void S3UnmapMem(ScrnInfoPtr pScrn); static Bool S3ModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode); -static void S3AdjustFrame(int scrnIndex, int x, int y, int flags); -Bool S3CloseScreen(int scrnIndex, ScreenPtr pScreen); +static void S3AdjustFrame(ADJUST_FRAME_ARGS_DECL); +Bool S3CloseScreen(CLOSE_SCREEN_ARGS_DECL); Bool S3SaveScreen(ScreenPtr pScreen, int mode); -static void S3FreeScreen(int scrnIndex, int flags); +static void S3FreeScreen(FREE_SCREEN_ARGS_DECL); static void S3GenericLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indicies, LOCO *colors, VisualPtr pVisual); @@ -738,10 +737,9 @@ static Bool S3PreInit(ScrnInfoPtr pScrn, int flags) } -static Bool S3ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, - char **argv) +static Bool S3ScreenInit(SCREEN_INIT_ARGS_DECL) { - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); S3Ptr pS3 = S3PTR(pScrn); BoxRec ScreenArea; int width, height, displayWidth; @@ -1078,9 +1076,9 @@ Bool S3SaveScreen(ScreenPtr pScreen, int mode) } -static void S3FreeScreen(int scrnIndex, int flags) +static void S3FreeScreen(FREE_SCREEN_ARGS_DECL) { - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; + SCRN_INFO_PTR(arg); vgaHWFreeHWRec(pScrn); @@ -1088,9 +1086,9 @@ static void S3FreeScreen(int scrnIndex, int flags) } -Bool S3CloseScreen(int scrnIndex, ScreenPtr pScreen) +Bool S3CloseScreen(CLOSE_SCREEN_ARGS_DECL) { - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); S3Ptr pS3 = S3PTR(pScrn); vgaHWPtr hwp = VGAHWPTR(pScrn); @@ -1107,14 +1105,14 @@ Bool S3CloseScreen(int scrnIndex, ScreenPtr pScreen) pScrn->vtSema = FALSE; pScreen->CloseScreen = pS3->CloseScreen; - return (*pScreen->CloseScreen)(scrnIndex, pScreen); + return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS); } -Bool S3SwitchMode(int scrnIndex, DisplayModePtr mode, int flags) +Bool S3SwitchMode(SWITCH_MODE_ARGS_DECL) { - return S3ModeInit(xf86Screens[scrnIndex], mode); - + SCRN_INFO_PTR(arg); + return S3ModeInit(pScrn, mode); } @@ -1742,7 +1740,7 @@ static Bool S3ModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode) outb(0x3c5, 0x00); } - pScrn->AdjustFrame(pScrn->scrnIndex, pScrn->frameX0, pScrn->frameY0, 0); + pScrn->AdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0)); vgaHWProtect(pScrn, FALSE); @@ -1794,9 +1792,9 @@ static Bool S3ModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode) } -static Bool S3EnterVT(int scrnIndex, int flags) +static Bool S3EnterVT(VT_FUNC_ARGS_DECL) { - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; + SCRN_INFO_PTR(arg); vgaHWPtr hwp = VGAHWPTR(pScrn); vgaHWUnlock(hwp); @@ -1879,9 +1877,9 @@ static void S3Restore(ScrnInfoPtr pScrn) } -static void S3LeaveVT(int scrnIndex, int flags) +static void S3LeaveVT(VT_FUNC_ARGS_DECL) { - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; + SCRN_INFO_PTR(arg); vgaHWPtr hwp = VGAHWPTR(pScrn); S3Restore(pScrn); @@ -1891,9 +1889,9 @@ static void S3LeaveVT(int scrnIndex, int flags) } -static void S3AdjustFrame(int scrnIndex, int x, int y, int flags) +static void S3AdjustFrame(ADJUST_FRAME_ARGS_DECL) { - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; + SCRN_INFO_PTR(arg); S3Ptr pS3 = S3PTR(pScrn); S3RegPtr regs = &pS3->ModeRegs; int vgaCRIndex = pS3->vgaCRIndex, vgaCRReg = pS3->vgaCRReg; diff --git a/src/s3_shadow.c b/src/s3_shadow.c index f4fbbb3..36406dd 100644 --- a/src/s3_shadow.c +++ b/src/s3_shadow.c @@ -69,9 +69,9 @@ S3RefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox) } void -S3PointerMoved(int index, int x, int y) +S3PointerMoved(SCRN_ARG_TYPE arg, int x, int y) { - ScrnInfoPtr pScrn = xf86Screens[index]; + SCRN_INFO_PTR(arg); S3Ptr pS3 = S3PTR(pScrn); int newX, newY; @@ -83,7 +83,7 @@ S3PointerMoved(int index, int x, int y) newY = pScrn->pScreen->width - x - 1; } - (*pS3->PointerMoved)(index, newX, newY); + (*pS3->PointerMoved)(arg, newX, newY); } void |