diff options
author | Dave Airlie <airlied@redhat.com> | 2012-06-07 14:59:53 +0100 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-06-07 14:59:53 +0100 |
commit | bdc99cca80b61038c76fb7b07dbefead82a10e3d (patch) | |
tree | 0a4cf2dab6c10fd57e17dd8b75da47044311795c | |
parent | 8f41e5d8bb40d6bb184b4806b701a3e11caf43c3 (diff) |
tseng: add support for new compat API
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | src/Makefile.am | 3 | ||||
-rw-r--r-- | src/compat-api.h | 105 | ||||
-rw-r--r-- | src/tseng.h | 5 | ||||
-rw-r--r-- | src/tseng_accel.c | 2 | ||||
-rw-r--r-- | src/tseng_cursor.c | 2 | ||||
-rw-r--r-- | src/tseng_dga.c | 4 | ||||
-rw-r--r-- | src/tseng_driver.c | 57 | ||||
-rw-r--r-- | src/tseng_mode.c | 6 |
8 files changed, 146 insertions, 38 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index bf3a03a..50ca7a3 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -36,4 +36,5 @@ tseng_drv_la_SOURCES = \ tseng_driver.c \ tseng.h \ tseng_mode.c \ - tseng_pcirename.h + tseng_pcirename.h \ + compat-api.h diff --git a/src/compat-api.h b/src/compat-api.h new file mode 100644 index 0000000..98ba435 --- /dev/null +++ b/src/compat-api.h @@ -0,0 +1,105 @@ +/* + * 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 WAKEUPHANDLER_ARGS_DECL int arg, pointer wakeupData, unsigned long result, pointer read_mask +#define WAKEUPHANDLER_ARGS arg, wakeupData, result, read_mask + +#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 WAKEUPHANDLER_ARGS_DECL ScreenPtr arg, unsigned long result, pointer read_mask +#define WAKEUPHANDLER_ARGS arg, result, read_mask + +#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 diff --git a/src/tseng.h b/src/tseng.h index ce2f174..b4e870c 100644 --- a/src/tseng.h +++ b/src/tseng.h @@ -43,6 +43,7 @@ #include "xf86Cursor.h" #include "xf86fbman.h" +#include "compat-api.h" /* * Contrary to the old driver, we use the "Chip Revision" here intead of * multiple chipsets like "TYPE_ET4000W32Pa", "TYPE_ET4000W32Pb", etc. @@ -208,8 +209,8 @@ void ET6000IOWrite(TsengPtr pTseng, CARD8 Offset, CARD8 Value); Bool TsengRAMDACProbe(ScrnInfoPtr pScrn); void TsengSetupClockRange(ScrnInfoPtr pScrn); Bool TsengModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode); -void TsengAdjustFrame(int scrnIndex, int x, int y, int flags); -ModeStatus TsengValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags); +void TsengAdjustFrame(ADJUST_FRAME_ARGS_DECL); +ModeStatus TsengValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode, Bool verbose, int flags); void TsengSave(ScrnInfoPtr pScrn); void TsengRestore(ScrnInfoPtr pScrn, vgaRegPtr vgaReg, TsengRegPtr tsengReg, int flags); void TsengHVSyncDPMSSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags); diff --git a/src/tseng_accel.c b/src/tseng_accel.c index 800b5dd..adeaf24 100644 --- a/src/tseng_accel.c +++ b/src/tseng_accel.c @@ -1266,7 +1266,7 @@ TsengSubsequentFillTrapezoidSolid(ytop, height, left, dxL, dyL, eL, right, dxR, Bool TsengXAAInit(ScreenPtr pScreen) { - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); TsengPtr pTseng = TsengPTR(pScrn); XAAInfoRecPtr pXAAinfo; BoxRec AvailFBArea; diff --git a/src/tseng_cursor.c b/src/tseng_cursor.c index 2412b31..3c8a70f 100644 --- a/src/tseng_cursor.c +++ b/src/tseng_cursor.c @@ -223,7 +223,7 @@ TsengLoadCursorImage(ScrnInfoPtr pScrn, unsigned char *bits) Bool TsengHWCursorInit(ScreenPtr pScreen) { - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); TsengPtr pTseng = TsengPTR(pScrn); xf86CursorInfoPtr infoPtr; diff --git a/src/tseng_dga.c b/src/tseng_dga.c index 528ba4c..c0a85a5 100644 --- a/src/tseng_dga.c +++ b/src/tseng_dga.c @@ -62,7 +62,7 @@ DGAFunctionRec TsengDGAFuncs = { Bool TsengDGAInit(ScreenPtr pScreen) { - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); TsengPtr pTseng = TsengPTR(pScrn); DGAModePtr modes = NULL, newmodes = NULL, currentMode; DisplayModePtr pMode, firstMode; @@ -182,7 +182,7 @@ Tseng_SetViewport( TsengPtr pTseng = TsengPTR(pScrn); vgaHWPtr hwp = VGAHWPTR(pScrn); - TsengAdjustFrame(pScrn->pScreen->myNum, x, y, flags); + TsengAdjustFrame(ADJUST_FRAME_ARGS(pScrn, x, y)); while((hwp->readST01(hwp) & 0x08)); while(!(hwp->readST01(hwp) & 0x08)); diff --git a/src/tseng_driver.c b/src/tseng_driver.c index d36b62c..90236b3 100644 --- a/src/tseng_driver.c +++ b/src/tseng_driver.c @@ -60,18 +60,17 @@ static const OptionInfoRec * TsengAvailableOptions(int chipid, int busid); static void TsengIdentify(int flags); static Bool TsengProbe(DriverPtr drv, int flags); static Bool TsengPreInit(ScrnInfoPtr pScrn, int flags); -static Bool TsengScreenInit(int Index, ScreenPtr pScreen, int argc, - char **argv); -static Bool TsengEnterVT(int scrnIndex, int flags); -static void TsengLeaveVT(int scrnIndex, int flags); -static Bool TsengCloseScreen(int scrnIndex, ScreenPtr pScreen); +static Bool TsengScreenInit(SCREEN_INIT_ARGS_DECL); +static Bool TsengEnterVT(VT_FUNC_ARGS_DECL); +static void TsengLeaveVT(VT_FUNC_ARGS_DECL); +static Bool TsengCloseScreen(CLOSE_SCREEN_ARGS_DECL); static Bool TsengSaveScreen(ScreenPtr pScreen, int mode); /* Required if the driver supports mode switching */ -static Bool TsengSwitchMode(int scrnIndex, DisplayModePtr mode, int flags); +static Bool TsengSwitchMode(SWITCH_MODE_ARGS_DECL); /* Optional functions */ -static void TsengFreeScreen(int scrnIndex, int flags); +static void TsengFreeScreen(FREE_SCREEN_ARGS_DECL); /* If driver-specific config file entries are needed, this must be defined */ /*static Bool TsengParseConfig(ParseInfoPtr raw); */ @@ -1215,9 +1214,9 @@ TsengPreInit(ScrnInfoPtr pScrn, int flags) } static void -TsengSetupAccelMemory(int scrnIndex, ScreenPtr pScreen) +TsengSetupAccelMemory(ScreenPtr pScreen) { - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); TsengPtr pTseng = TsengPTR(pScrn); int offscreen_videoram, videoram_end, req_videoram; int i; @@ -1236,7 +1235,7 @@ TsengSetupAccelMemory(int scrnIndex, ScreenPtr pScreen) videoram_end = pScrn->videoRam * 1024; offscreen_videoram = videoram_end - pScrn->displayWidth * pScrn->virtualY * pTseng->Bytesperpixel; - xf86DrvMsgVerb(scrnIndex, X_INFO, v, "Available off-screen memory: %d bytes.\n", + xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, v, "Available off-screen memory: %d bytes.\n", offscreen_videoram); /* @@ -1324,7 +1323,7 @@ TsengSetupAccelMemory(int scrnIndex, ScreenPtr pScreen) } } - xf86DrvMsgVerb(scrnIndex, X_INFO, v, + xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, v, "Remaining off-screen memory available for pixmap cache: %d bytes.\n", offscreen_videoram); @@ -1333,7 +1332,7 @@ end_memsetup: } static Bool -TsengScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) +TsengScreenInit(SCREEN_INIT_ARGS_DECL) { ScrnInfoPtr pScrn; TsengPtr pTseng; @@ -1345,7 +1344,7 @@ TsengScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) /* * First get the ScrnInfoRec */ - pScrn = xf86Screens[pScreen->myNum]; + pScrn = xf86ScreenToScrn(pScreen); pTseng = TsengPTR(pScrn); /* Map the Tseng memory areas */ @@ -1361,7 +1360,7 @@ TsengScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) /* Darken the screen for aesthetic reasons and set the viewport */ TsengSaveScreen(pScreen, SCREEN_SAVER_ON); - TsengAdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0); + TsengAdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0)); /* XXX Fill the screen with black */ /* @@ -1444,7 +1443,7 @@ TsengScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) /* * Initialize the acceleration interface. */ - TsengSetupAccelMemory(scrnIndex, pScreen); + TsengSetupAccelMemory(pScreen); if (pTseng->UseAccel) { tseng_init_acl(pScrn); /* set up accelerator */ if (!TsengXAAInit(pScreen)) { /* set up XAA interface */ @@ -1499,9 +1498,9 @@ TsengScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) } static Bool -TsengEnterVT(int scrnIndex, int flags) +TsengEnterVT(VT_FUNC_ARGS_DECL) { - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; + SCRN_INFO_PTR(arg); TsengPtr pTseng = TsengPTR(pScrn); PDEBUG(" TsengEnterVT\n"); @@ -1518,9 +1517,9 @@ TsengEnterVT(int scrnIndex, int flags) } static void -TsengLeaveVT(int scrnIndex, int flags) +TsengLeaveVT(VT_FUNC_ARGS_DECL) { - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; + SCRN_INFO_PTR(arg); TsengPtr pTseng = TsengPTR(pScrn); PDEBUG(" TsengLeaveVT\n"); @@ -1532,9 +1531,9 @@ TsengLeaveVT(int scrnIndex, int flags) } static Bool -TsengCloseScreen(int scrnIndex, ScreenPtr pScreen) +TsengCloseScreen(CLOSE_SCREEN_ARGS_DECL) { - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); TsengPtr pTseng = TsengPTR(pScrn); PDEBUG(" TsengCloseScreen\n"); @@ -1552,7 +1551,7 @@ TsengCloseScreen(int scrnIndex, ScreenPtr pScreen) pScrn->vtSema = FALSE; pScreen->CloseScreen = pTseng->CloseScreen; - return (*pScreen->CloseScreen) (scrnIndex, pScreen); + return (*pScreen->CloseScreen) (CLOSE_SCREEN_ARGS); } /* @@ -1577,7 +1576,7 @@ TsengCloseScreen(int scrnIndex, ScreenPtr pScreen) static Bool TsengSaveScreen(ScreenPtr pScreen, int mode) { - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); vgaHWPtr hwp = VGAHWPTR(pScrn); TsengPtr pTseng = TsengPTR(pScrn); Bool unblank; @@ -1694,17 +1693,19 @@ TsengUnmapMem(ScrnInfoPtr pScrn) } static void -TsengFreeScreen(int scrnIndex, int flags) +TsengFreeScreen(FREE_SCREEN_ARGS_DECL) { + SCRN_INFO_PTR(arg); PDEBUG(" TsengFreeScreen\n"); if (xf86LoaderCheckSymbol("vgaHWFreeHWRec")) - vgaHWFreeHWRec(xf86Screens[scrnIndex]); - TsengFreeRec(xf86Screens[scrnIndex]); + vgaHWFreeHWRec(pScrn); + TsengFreeRec(pScrn); } static Bool -TsengSwitchMode(int scrnIndex, DisplayModePtr mode, int flags) +TsengSwitchMode(SWITCH_MODE_ARGS_DECL) { + SCRN_INFO_PTR(arg); PDEBUG(" TsengSwitchMode\n"); - return TsengModeInit(xf86Screens[scrnIndex], mode); + return TsengModeInit(pScrn, mode); } diff --git a/src/tseng_mode.c b/src/tseng_mode.c index a3ff87d..c96403e 100644 --- a/src/tseng_mode.c +++ b/src/tseng_mode.c @@ -982,9 +982,9 @@ ET6000CalcClock(long freq, int min_m, int min_n1, int max_n1, int min_n2, * adjust the current video frame (viewport) to display the mousecursor. */ void -TsengAdjustFrame(int scrnIndex, int x, int y, int flags) +TsengAdjustFrame(ADJUST_FRAME_ARGS_DECL) { - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; + SCRN_INFO_PTR(arg); TsengPtr pTseng = TsengPTR(pScrn); vgaHWPtr hwp = VGAHWPTR(pScrn); int Base; @@ -1011,7 +1011,7 @@ TsengAdjustFrame(int scrnIndex, int x, int y, int flags) * */ ModeStatus -TsengValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags) +TsengValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode, Bool verbose, int flags) { PDEBUG(" TsengValidMode\n"); |