diff options
author | Daniel Stone <daniel@fooishbar.org> | 2012-10-24 16:23:28 +1100 |
---|---|---|
committer | Daniel Stone <daniel@fooishbar.org> | 2012-10-24 16:24:01 +1100 |
commit | 5b083465ddd0d7f90e9069fa76a3ffe4d845e56b (patch) | |
tree | 53af775321f19fac7d6973b79ef3eb7077d54752 | |
parent | 8044a6ae5b5b04a95459256ecba4a426750585b3 (diff) |
Adapt to scrnIndex removal and API changes
Import compat-api.h from xf86-video-intel and make use of it where
necessary.
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
-rw-r--r-- | src/Makefile.am | 3 | ||||
-rw-r--r-- | src/compat-api.h | 106 | ||||
-rw-r--r-- | src/wlshm.c | 80 |
3 files changed, 148 insertions, 41 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 3d27981..7c84179 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -33,4 +33,5 @@ wlshm_drv_ladir = @moduledir@/drivers wlshm_drv_la_SOURCES = \ wlshm.c \ - wlshm.h + wlshm.h \ + compat-api.h diff --git a/src/compat-api.h b/src/compat-api.h new file mode 100644 index 0000000..6b76572 --- /dev/null +++ b/src/compat-api.h @@ -0,0 +1,106 @@ +/* + * 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 scrn = xf86Screens[(arg1)] + +#define SCREEN_ARG_TYPE int +#define SCREEN_PTR(arg1) ScreenPtr screen = screenInfo.screens[(arg1)] + +#define SCREEN_INIT_ARGS_DECL int scrnIndex, ScreenPtr screen, int argc, char **argv + +#define BLOCKHANDLER_ARGS_DECL int arg, pointer blockData, pointer timeout, pointer read_mask +#define BLOCKHANDLER_ARGS arg, blockData, timeout, read_mask + +#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 screen +#define CLOSE_SCREEN_ARGS scrnIndex, screen + +#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(flags) scrn->scrnIndex, (flags) + +#define XF86_ENABLEDISABLEFB_ARG(x) ((x)->scrnIndex) + +#else +#define SCRN_ARG_TYPE ScrnInfoPtr +#define SCRN_INFO_PTR(arg1) ScrnInfoPtr scrn = (arg1) + +#define SCREEN_ARG_TYPE ScreenPtr +#define SCREEN_PTR(arg1) ScreenPtr screen = (arg1) + +#define SCREEN_INIT_ARGS_DECL ScreenPtr screen, int argc, char **argv + +#define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer timeout, pointer read_mask +#define BLOCKHANDLER_ARGS arg, timeout, read_mask + +#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 screen +#define CLOSE_SCREEN_ARGS screen + +#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(flags) scrn + +#define XF86_ENABLEDISABLEFB_ARG(x) (x) + +#endif + +#endif diff --git a/src/wlshm.c b/src/wlshm.c index 30206d0..308c5d0 100644 --- a/src/wlshm.c +++ b/src/wlshm.c @@ -1,4 +1,3 @@ - /* * Copyright 2002, SuSE Linux AG, Author: Egbert Eich * Copyright 2010, commonIT, Author: Corentin Chary @@ -30,6 +29,7 @@ * Driver data structures. */ #include "wlshm.h" +#include "compat-api.h" #include <sys/mman.h> #include <unistd.h> @@ -99,24 +99,24 @@ wlshm_save_screen(ScreenPtr pScreen, int mode) } static Bool -wlshm_enter_vt(int scrnIndex, int flags) +wlshm_enter_vt(VT_FUNC_ARGS_DECL) { return TRUE; } static void -wlshm_leave_vt(int scrnIndex, int flags) +wlshm_leave_vt(VT_FUNC_ARGS_DECL) { } static Bool -wlshm_switch_mode(int scrnIndex, DisplayModePtr mode, int flags) +wlshm_switch_mode(SWITCH_MODE_ARGS_DECL) { return TRUE; } static void -wlshm_adjust_frame(int scrnIndex, int x, int y, int flags) +wlshm_adjust_frame(ADJUST_FRAME_ARGS_DECL) { } @@ -131,9 +131,9 @@ wlshm_flush_callback(CallbackListPtr *list, } static Bool -wlshm_close_screen(int scrnIndex, ScreenPtr pScreen) +wlshm_close_screen(CLOSE_SCREEN_ARGS_DECL) { - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; + ScrnInfoPtr pScrn = xf86Screens[screen->myNum]; struct wlshm_device *wlshm = wlshm_scrninfo_priv(pScrn); DeleteCallback(&FlushCallback, wlshm_flush_callback, wlshm); @@ -145,15 +145,15 @@ wlshm_close_screen(int scrnIndex, ScreenPtr pScreen) xwl_screen_close(wlshm->xwl_screen); pScrn->vtSema = FALSE; - pScreen->CloseScreen = wlshm->CloseScreen; - return (*pScreen->CloseScreen)(scrnIndex, pScreen); + screen->CloseScreen = wlshm->CloseScreen; + return (*screen->CloseScreen)(CLOSE_SCREEN_ARGS); } static void -wlshm_free_screen(int scrnIndex, int flags) +wlshm_free_screen(FREE_SCREEN_ARGS_DECL) { - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; - struct wlshm_device *wlshm = wlshm_scrninfo_priv(pScrn); + SCRN_INFO_PTR(arg); + struct wlshm_device *wlshm = wlshm_scrninfo_priv(scrn); if (wlshm) { if (wlshm->xwl_screen) @@ -161,11 +161,11 @@ wlshm_free_screen(int scrnIndex, int flags) wlshm->xwl_screen = NULL; } - wlshm_free_device(pScrn); + wlshm_free_device(scrn); } static ModeStatus -wlshm_valid_mode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags) +wlshm_valid_mode(SCRN_ARG_TYPE arg, DisplayModePtr mode, Bool verbose, int flags) { return MODE_OK; } @@ -274,7 +274,7 @@ wlshm_create_window(WindowPtr pWin) } static Bool -wlshm_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) +wlshm_screen_init(SCREEN_INIT_ARGS_DECL) { ScrnInfoPtr pScrn; struct wlshm_device *wlshm; @@ -287,8 +287,8 @@ wlshm_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) * we need to get the ScrnInfoRec for this screen, so let's allocate * one first thing */ - pScrn = xf86Screens[pScreen->myNum]; - wlshm = wlshm_screen_priv(pScreen); + pScrn = xf86Screens[screen->myNum]; + wlshm = wlshm_screen_priv(screen); /* * Reset visual list. @@ -314,7 +314,7 @@ wlshm_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) * Call the framebuffer layer's ScreenInit function, and fill in other * pScreen fields. */ - ret = fbScreenInit(pScreen, wlshm->fb, + ret = fbScreenInit(screen, wlshm->fb, pScrn->virtualX, pScrn->virtualY, pScrn->xDpi, pScrn->yDpi, pScrn->displayWidth, pScrn->bitsPerPixel); @@ -323,8 +323,8 @@ wlshm_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) if (pScrn->depth > 8) { /* Fixup RGB ordering */ - visual = pScreen->visuals + pScreen->numVisuals; - while (--visual >= pScreen->visuals) { + visual = screen->visuals + screen->numVisuals; + while (--visual >= screen->visuals) { if ((visual->class | DynamicClass) == DirectColor) { visual->offsetRed = pScrn->offset.red; visual->offsetGreen = pScrn->offset.green; @@ -337,9 +337,9 @@ wlshm_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) } /* must be after RGB ordering fixed */ - fbPictureInit(pScreen, 0, 0); + fbPictureInit(screen, 0, 0); - xf86SetBlackWhitePixels(pScreen); + xf86SetBlackWhitePixels(screen); { BoxRec AvailFBArea; @@ -349,39 +349,39 @@ wlshm_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) AvailFBArea.x2 = pScrn->displayWidth; AvailFBArea.y2 = pScrn->virtualY; - xf86InitFBManager(pScreen, &AvailFBArea); + xf86InitFBManager(screen, &AvailFBArea); } - xf86SetBackingStore(pScreen); - xf86SetSilkenMouse(pScreen); + xf86SetBackingStore(screen); + xf86SetSilkenMouse(screen); /* Initialise cursor functions */ - miDCInitialize (pScreen, xf86GetPointerScreenFuncs()); + miDCInitialize (screen, xf86GetPointerScreenFuncs()); /* FIXME: colourmap */ - miCreateDefColormap(pScreen); + miCreateDefColormap(screen); - pScreen->SaveScreen = wlshm_save_screen; + screen->SaveScreen = wlshm_save_screen; /* Wrap the current CloseScreen function */ - wlshm->CloseScreen = pScreen->CloseScreen; - pScreen->CloseScreen = wlshm_close_screen; + wlshm->CloseScreen = screen->CloseScreen; + screen->CloseScreen = wlshm_close_screen; /* Wrap the current CreateWindow function */ - wlshm->CreateWindow = pScreen->CreateWindow; - pScreen->CreateWindow = wlshm_create_window; + wlshm->CreateWindow = screen->CreateWindow; + screen->CreateWindow = wlshm_create_window; /* Wrap the current DestroyWindow function */ - wlshm->DestroyWindow = pScreen->DestroyWindow; - pScreen->DestroyWindow = wlshm_destroy_window; + wlshm->DestroyWindow = screen->DestroyWindow; + screen->DestroyWindow = wlshm_destroy_window; /* Wrap the current UnrealizeWindow function */ - wlshm->UnrealizeWindow = pScreen->UnrealizeWindow; - pScreen->UnrealizeWindow = wlshm_unrealize_window; + wlshm->UnrealizeWindow = screen->UnrealizeWindow; + screen->UnrealizeWindow = wlshm_unrealize_window; /* Wrap the current SetWindowPixmap function */ - wlshm->SetWindowPixmap = pScreen->SetWindowPixmap; - pScreen->SetWindowPixmap = wlshm_set_window_pixmap; + wlshm->SetWindowPixmap = screen->SetWindowPixmap; + screen->SetWindowPixmap = wlshm_set_window_pixmap; AddCallback(&FlushCallback, wlshm_flush_callback, wlshm); @@ -390,10 +390,10 @@ wlshm_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) xf86ShowUnusedOptions(pScrn->scrnIndex, pScrn->options); } - miScreenDevPrivateInit(pScreen, pScreen->width, wlshm->fb); + miScreenDevPrivateInit(screen, screen->width, wlshm->fb); if (wlshm->xwl_screen) - return (xwl_screen_init(wlshm->xwl_screen, pScreen) == Success); + return (xwl_screen_init(wlshm->xwl_screen, screen) == Success); return TRUE; } |