summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2012-06-07 14:59:53 +0100
committerDave Airlie <airlied@redhat.com>2012-06-07 14:59:53 +0100
commitbdc99cca80b61038c76fb7b07dbefead82a10e3d (patch)
tree0a4cf2dab6c10fd57e17dd8b75da47044311795c
parent8f41e5d8bb40d6bb184b4806b701a3e11caf43c3 (diff)
tseng: add support for new compat API
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--src/Makefile.am3
-rw-r--r--src/compat-api.h105
-rw-r--r--src/tseng.h5
-rw-r--r--src/tseng_accel.c2
-rw-r--r--src/tseng_cursor.c2
-rw-r--r--src/tseng_dga.c4
-rw-r--r--src/tseng_driver.c57
-rw-r--r--src/tseng_mode.c6
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");