From 2477a9f115678fb472b14c5a9f005ce34d6463e5 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Wed, 2 May 2012 14:10:56 +0100 Subject: port to new aBI --- src/drmmode_display.c | 2 +- src/nv_driver.c | 71 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 45 insertions(+), 28 deletions(-) diff --git a/src/drmmode_display.c b/src/drmmode_display.c index 73f1e25..46bebd6 100644 --- a/src/drmmode_display.c +++ b/src/drmmode_display.c @@ -1192,7 +1192,7 @@ Bool drmmode_pre_init(ScrnInfoPtr pScrn, int fd, int cpp) drmmode->mode_res->max_height); for (i = 0; i < drmmode->mode_res->count_crtcs; i++) { if (!xf86IsEntityShared(pScrn->entityList[0]) || - (pScrn->confScreen->device->screen == i)) + (pScrn->confScreen->devices[0]->screen == i)) drmmode_crtc_init(pScrn, drmmode, i); } diff --git a/src/nv_driver.c b/src/nv_driver.c index 98486f8..a963fda 100644 --- a/src/nv_driver.c +++ b/src/nv_driver.c @@ -40,18 +40,18 @@ static const OptionInfoRec * NVAvailableOptions(int chipid, int busid); static void NVIdentify(int flags); static Bool NVPreInit(ScrnInfoPtr pScrn, int flags); -static Bool NVScreenInit(int Index, ScreenPtr pScreen, int argc, +static Bool NVScreenInit(ScreenPtr pScreen, int argc, char **argv); -static Bool NVEnterVT(int scrnIndex, int flags); -static void NVLeaveVT(int scrnIndex, int flags); -static Bool NVCloseScreen(int scrnIndex, ScreenPtr pScreen); +static Bool NVEnterVT(ScrnInfoPtr pScrn, int flags); +static void NVLeaveVT(ScrnInfoPtr pScrn, int flags); +static Bool NVCloseScreen(ScreenPtr pScreen); static Bool NVSaveScreen(ScreenPtr pScreen, int mode); static void NVCloseDRM(ScrnInfoPtr); /* Optional functions */ -static Bool NVSwitchMode(int scrnIndex, DisplayModePtr mode, int flags); -static void NVAdjustFrame(int scrnIndex, int x, int y, int flags); -static void NVFreeScreen(int scrnIndex, int flags); +static Bool NVSwitchMode(ScrnInfoPtr pScrn, DisplayModePtr mode, int flags); +static void NVAdjustFrame(ScrnInfoPtr pScrn, int x, int y, int flags); +static void NVFreeScreen(ScrnInfoPtr pScrn, int flags); /* Internally used functions */ @@ -300,10 +300,8 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, #define MAX_CHIPS MAXSCREENS Bool -NVSwitchMode(int scrnIndex, DisplayModePtr mode, int flags) +NVSwitchMode(ScrnInfoPtr pScrn, DisplayModePtr mode, int flags) { - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; - return xf86SetSingleMode(pScrn, mode, RR_Rotate_0); } @@ -313,10 +311,8 @@ NVSwitchMode(int scrnIndex, DisplayModePtr mode, int flags) */ /* Usually mandatory */ void -NVAdjustFrame(int scrnIndex, int x, int y, int flags) +NVAdjustFrame(ScrnInfoPtr pScrn, int x, int y, int flags) { - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; - drmmode_adjust_frame(pScrn, x, y, flags); } @@ -327,9 +323,8 @@ NVAdjustFrame(int scrnIndex, int x, int y, int flags) /* Mandatory */ static Bool -NVEnterVT(int scrnIndex, int flags) +NVEnterVT(ScrnInfoPtr pScrn, int flags) { - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; NVPtr pNv = NVPTR(pScrn); int ret; @@ -355,9 +350,8 @@ NVEnterVT(int scrnIndex, int flags) /* Mandatory */ static void -NVLeaveVT(int scrnIndex, int flags) +NVLeaveVT(ScrnInfoPtr pScrn, int flags) { - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; NVPtr pNv = NVPTR(pScrn); int ret; @@ -378,8 +372,9 @@ NVFlushCallback(CallbackListPtr *list, pointer user_data, pointer call_data) nouveau_pushbuf_kick(pNv->pushbuf, pNv->pushbuf->channel); } +#if 0 static void -NVBlockHandler ( +NVBlockHandler_old ( int i, pointer blockData, pointer pTimeout, @@ -400,6 +395,29 @@ NVBlockHandler ( if (pNv->VideoTimerCallback) (*pNv->VideoTimerCallback)(pScrn, currentTime.milliseconds); } +#endif + +static void +NVBlockHandler ( + ScreenPtr pScreen, + pointer blockData, + pointer pTimeout, + pointer pReadmask +) +{ + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); + NVPtr pNv = NVPTR(pScrn); + + pScreen->BlockHandler = pNv->BlockHandler; + (*pScreen->BlockHandler) (pScreen, blockData, pTimeout, pReadmask); + pScreen->BlockHandler = NVBlockHandler; + + if (pScrn->vtSema && !pNv->NoAccel) + nouveau_pushbuf_kick(pNv->pushbuf, pNv->pushbuf->channel); + + if (pNv->VideoTimerCallback) + (*pNv->VideoTimerCallback)(pScrn, currentTime.milliseconds); +} static Bool NVCreateScreenResources(ScreenPtr pScreen) @@ -414,7 +432,7 @@ NVCreateScreenResources(ScreenPtr pScreen) pScreen->CreateScreenResources = NVCreateScreenResources; drmmode_fbcon_copy(pScreen); - if (!NVEnterVT(pScrn->scrnIndex, 0)) + if (!NVEnterVT(pScrn, 0)) return FALSE; if (!pNv->NoAccel) { @@ -434,9 +452,9 @@ NVCreateScreenResources(ScreenPtr pScreen) /* Mandatory */ static Bool -NVCloseScreen(int scrnIndex, ScreenPtr pScreen) +NVCloseScreen(ScreenPtr pScreen) { - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); NVPtr pNv = NVPTR(pScrn); drmmode_screen_fini(pScreen); @@ -445,7 +463,7 @@ NVCloseScreen(int scrnIndex, ScreenPtr pScreen) nouveau_dri2_fini(pScreen); if (pScrn->vtSema) { - NVLeaveVT(scrnIndex, 0); + NVLeaveVT(pScrn, 0); pScrn->vtSema = FALSE; } @@ -487,21 +505,20 @@ NVCloseScreen(int scrnIndex, ScreenPtr pScreen) pScrn->vtSema = FALSE; pScreen->CloseScreen = pNv->CloseScreen; pScreen->BlockHandler = pNv->BlockHandler; - return (*pScreen->CloseScreen)(scrnIndex, pScreen); + return (*pScreen->CloseScreen)(pScreen); } /* Free up any persistent data structures */ /* Optional */ static void -NVFreeScreen(int scrnIndex, int flags) +NVFreeScreen(ScrnInfoPtr pScrn, int flags) { /* * This only gets called when a screen is being deleted. It does not * get called routinely at the end of a server generation. */ - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; NVPtr pNv = NVPTR(pScrn); if (!pNv) @@ -1059,7 +1076,7 @@ NVLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, /* This gets called at the start of each server generation */ static Bool -NVScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) +NVScreenInit(ScreenPtr pScreen, int argc, char **argv) { ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); NVPtr pNv = NVPTR(pScrn); @@ -1163,7 +1180,7 @@ NVScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) } break; default: - xf86DrvMsg(scrnIndex, X_ERROR, + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Internal error: invalid bpp (%d) in NVScreenInit\n", pScrn->bitsPerPixel); ret = FALSE; -- cgit v1.2.3