diff options
author | Emil Velikov <emil.l.velikov@gmail.com> | 2012-11-02 03:57:40 +0000 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2012-11-05 19:19:48 +1000 |
commit | 78f24dc3798d635fca2e20856a09012c28bbbb8b (patch) | |
tree | bbe84ec2f23961731c292fe63789d3884e82d866 | |
parent | 47457fbd5006070ea9a06238a5a69ca8167dac77 (diff) |
nouveau: introduce NVInitScrn()
Common/helper function for NV{Pci,Platform}Probe()
This introduces some the following functions to the
NVPlatformProbe codepath
* xf86SetEntitySharable()
* xf86SetEntityInstanceForScreen()
Necessary for dualhead, xinerama and/or zaphodhead
v2: Rename nouveau_init_scrn() to NVInitScrn()
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r-- | src/nv_driver.c | 91 |
1 files changed, 47 insertions, 44 deletions
diff --git a/src/nv_driver.c b/src/nv_driver.c index c885e73..dc4f3b2 100644 --- a/src/nv_driver.c +++ b/src/nv_driver.c @@ -74,36 +74,10 @@ static Bool NVPciProbe ( DriverPtr drv, intptr_t match_data ); #ifdef XSERVER_PLATFORM_BUS -static Bool -NVPlatformProbe(DriverPtr driver, - int entity_num, int flags, struct xf86_platform_device *dev, intptr_t dev_match_data) -{ - ScrnInfoPtr scrn = NULL; - uint32_t scr_flags = 0; - - if (!dev->pdev) - return FALSE; - - if (flags & PLATFORM_PROBE_GPU_SCREEN) - scr_flags = XF86_ALLOCATE_GPU_SCREEN; - - scrn = xf86AllocateScreen(driver, scr_flags); - xf86AddEntityToScreen(scrn, entity_num); - - scrn->driverVersion = NV_VERSION; - scrn->driverName = NV_DRIVER_NAME; - scrn->name = NV_NAME; - - scrn->Probe = NULL; - scrn->PreInit = NVPreInit; - scrn->ScreenInit = NVScreenInit; - scrn->SwitchMode = NVSwitchMode; - scrn->AdjustFrame = NVAdjustFrame; - scrn->EnterVT = NVEnterVT; - scrn->LeaveVT = NVLeaveVT; - scrn->FreeScreen = NVFreeScreen; - return scrn != NULL; -} +static Bool NVPlatformProbe(DriverPtr driver, + int entity_num, int flags, + struct xf86_platform_device *dev, + intptr_t dev_match_data); #endif /* @@ -251,6 +225,27 @@ NVDriverFunc(ScrnInfoPtr scrn, xorgDriverFuncOp op, void *data) } } +static void +NVInitScrn(ScrnInfoPtr pScrn, int entity_num) +{ + pScrn->driverVersion = NV_VERSION; + pScrn->driverName = NV_DRIVER_NAME; + pScrn->name = NV_NAME; + + pScrn->Probe = NULL; + pScrn->PreInit = NVPreInit; + pScrn->ScreenInit = NVScreenInit; + pScrn->SwitchMode = NVSwitchMode; + pScrn->AdjustFrame = NVAdjustFrame; + pScrn->EnterVT = NVEnterVT; + pScrn->LeaveVT = NVLeaveVT; + pScrn->FreeScreen = NVFreeScreen; + + xf86SetEntitySharable(entity_num); + xf86SetEntityInstanceForScreen(pScrn, entity_num, + xf86GetNumEntityInstances(entity_num) - 1); +} + static Bool NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, intptr_t match_data) @@ -325,25 +320,33 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, if (!pScrn) return FALSE; - pScrn->driverVersion = NV_VERSION; - pScrn->driverName = NV_DRIVER_NAME; - pScrn->name = NV_NAME; + NVInitScrn(pScrn, entity_num); - pScrn->Probe = NULL; - pScrn->PreInit = NVPreInit; - pScrn->ScreenInit = NVScreenInit; - pScrn->SwitchMode = NVSwitchMode; - pScrn->AdjustFrame = NVAdjustFrame; - pScrn->EnterVT = NVEnterVT; - pScrn->LeaveVT = NVLeaveVT; - pScrn->FreeScreen = NVFreeScreen; + return TRUE; +} - xf86SetEntitySharable(entity_num); - xf86SetEntityInstanceForScreen(pScrn, entity_num, - xf86GetNumEntityInstances(entity_num) - 1); +#ifdef XSERVER_PLATFORM_BUS +static Bool +NVPlatformProbe(DriverPtr driver, + int entity_num, int flags, struct xf86_platform_device *dev, intptr_t dev_match_data) +{ + ScrnInfoPtr scrn = NULL; + uint32_t scr_flags = 0; + + if (!dev->pdev) + return FALSE; + + if (flags & PLATFORM_PROBE_GPU_SCREEN) + scr_flags = XF86_ALLOCATE_GPU_SCREEN; + + scrn = xf86AllocateScreen(driver, scr_flags); + xf86AddEntityToScreen(scrn, entity_num); + + NVInitScrn(scrn, entity_num); return TRUE; } +#endif #define MAX_CHIPS MAXSCREENS |