diff options
author | Thomas Hellstrom <thellstrom@vmware.com> | 2011-11-22 19:56:20 +0100 |
---|---|---|
committer | Thomas Hellstrom <thellstrom@vmware.com> | 2011-11-25 16:56:11 +0100 |
commit | 1c77e3d7434f04c59233ce7e497a949e386e1630 (patch) | |
tree | 09dc18a038b7b4c6cd2395cf10f6f3a117942cd6 /vmwgfx | |
parent | 2aa256c96496ed6dd9dbd5880c278f4422500b0f (diff) |
vmware: Hook up vmwgfx to be tried before falling back to legacy
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
Diffstat (limited to 'vmwgfx')
-rw-r--r-- | vmwgfx/Makefile.am | 11 | ||||
-rw-r--r-- | vmwgfx/vmwgfx_bootstrap.c | 199 | ||||
-rw-r--r-- | vmwgfx/vmwgfx_dri2.c | 2 | ||||
-rw-r--r-- | vmwgfx/vmwgfx_driver.c | 50 |
4 files changed, 14 insertions, 248 deletions
diff --git a/vmwgfx/Makefile.am b/vmwgfx/Makefile.am index e956b64..8fe3e71 100644 --- a/vmwgfx/Makefile.am +++ b/vmwgfx/Makefile.am @@ -1,11 +1,9 @@ -vmwgfx_drv_la_LTLIBRARIES = vmwgfx_drv.la -vmwgfx_drv_la_LDFLAGS = -module -avoid-version -vmwgfx_drv_la_CFLAGS = $(CWARNFLAGS) $(XORG_CFLAGS) @LIBDRM_CFLAGS@ @XATRACKER_CFLAGS@ -I$(top_srcdir)/src -I$(top_srcdir)/saa -vmwgfx_drv_la_LIBADD = @LIBDRM_LIBS@ $(top_srcdir)/saa/libsaa.la\ +noinst_LTLIBRARIES = libvmwgfx.la +libvmwgfx_la_CFLAGS = $(CWARNFLAGS) $(XORG_CFLAGS) @LIBDRM_CFLAGS@ @XATRACKER_CFLAGS@ -I$(top_srcdir)/src -I$(top_srcdir)/saa +libvmwgfx_la_LIBADD = @LIBDRM_LIBS@ $(top_srcdir)/saa/libsaa.la\ @XATRACKER_LIBS@ -vmwgfx_drv_ladir = @moduledir@/drivers -vmwgfx_drv_la_SOURCES = \ +libvmwgfx_la_SOURCES = \ vmwgfx_driver.c \ vmwgfx_driver.h \ vmwgfx_crtc.c \ @@ -16,7 +14,6 @@ vmwgfx_drv_la_SOURCES = \ vmwgfx_saa.h \ vmwgfx_drmi.c \ vmwgfx_drmi.h \ - vmwgfx_bootstrap.c \ vmwgfx_overlay.c \ vmwgfx_ctrl.c \ vmwgfx_ctrl.h \ diff --git a/vmwgfx/vmwgfx_bootstrap.c b/vmwgfx/vmwgfx_bootstrap.c deleted file mode 100644 index 5e8e9e1..0000000 --- a/vmwgfx/vmwgfx_bootstrap.c +++ /dev/null @@ -1,199 +0,0 @@ -/********************************************************** - * Copyright 2008-2011 VMware, Inc. All rights reserved. - * - * 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 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. - * - **********************************************************/ - -/** - * @file - * Bootstrap file for the vmwgfx xorg driver. - * - * @author Alan Hourihane <alanh@tungstengraphics.com> - * @author Jakob Bornecrantz <wallbraker@gmail.com> - * @author Thomas Hellstrom <thellstrom@vmware.com> - */ - -#include "xorg-server.h" -#include "xf86.h" -#include "pciaccess.h" - -#ifndef XSERVER_LIBPCIACCESS -#error "libpciaccess needed" -#endif - -void xorg_tracker_set_functions(ScrnInfoPtr scrn); -const OptionInfoRec * xorg_tracker_available_options(int chipid, int busid); - - -/* - * Defines and modinfo - */ - -#define VMWGFX_DRIVER_NAME "vmwgfx" - -#define VMW_STRING_INNER(s) #s -#define VMW_STRING(str) VMW_STRING_INNER(str) - -#define VMWGFX_VERSION_MAJOR 11 -#define VMWGFX_VERSION_MINOR 0 -#define VMWGFX_VERSION_PATCH 0 -#define VMWGFX_VERSION_STRING_MAJOR VMW_STRING(VMWGFX_VERSION_MAJOR) -#define VMWGFX_VERSION_STRING_MINOR VMW_STRING(VMWGFX_VERSION_MINOR) -#define VMWGFX_VERSION_STRING_PATCH VMW_STRING(VMWGFX_VERSION_PATCH) - -#define VMWGFX_DRIVER_VERSION \ - (VMWGFX_VERSION_MAJOR * 65536 + VMWGFX_VERSION_MINOR * 256 + VMWGFX_VERSION_PATCH) -#define VMWGFX_DRIVER_VERSION_STRING \ - VMWGFX_VERSION_STRING_MAJOR "." VMWGFX_VERSION_STRING_MINOR \ - "." VMWGFX_VERSION_STRING_PATCH - -/* - * Standard four digit version string expected by VMware Tools installer. - * As the driver's version is only {major, minor, patchlevel}, simply append an - * extra zero for the fourth digit. - */ -#ifdef __GNUC__ -_X_EXPORT const char vmwgfx_drv_modinfo[] __attribute__((section(".modinfo"),unused)) = - "version=" VMWGFX_DRIVER_VERSION_STRING ".0"; -#endif - -static void vmw_xorg_identify(int flags); -_X_EXPORT Bool vmw_xorg_pci_probe(DriverPtr driver, - int entity_num, - struct pci_device *device, - intptr_t match_data); - - -/* - * Tables - */ - -static const struct pci_id_match vmw_xorg_device_match[] = { - {0x15ad, PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0}, -}; - -static SymTabRec vmw_xorg_chipsets[] = { - {PCI_MATCH_ANY, "VMware SVGA Device"}, - {-1, NULL} -}; - -static PciChipsets vmw_xorg_pci_devices[] = { - {PCI_MATCH_ANY, PCI_MATCH_ANY, NULL}, - {-1, -1, NULL} -}; - -static XF86ModuleVersionInfo vmw_xorg_version = { - VMWGFX_DRIVER_NAME, - MODULEVENDORSTRING, - MODINFOSTRING1, - MODINFOSTRING2, - XORG_VERSION_CURRENT, - VMWGFX_VERSION_MAJOR, VMWGFX_VERSION_MINOR, VMWGFX_VERSION_PATCH, - ABI_CLASS_VIDEODRV, - ABI_VIDEODRV_VERSION, - MOD_CLASS_VIDEODRV, - {0, 0, 0, 0} -}; - -/* - * Xorg driver exported structures - */ - -_X_EXPORT DriverRec vmwgfx = { - 1, - VMWGFX_DRIVER_NAME, - vmw_xorg_identify, - NULL, - xorg_tracker_available_options, - NULL, - 0, - NULL, - vmw_xorg_device_match, - vmw_xorg_pci_probe -}; - -static MODULESETUPPROTO(vmw_xorg_setup); - -_X_EXPORT XF86ModuleData vmwgfxModuleData = { - &vmw_xorg_version, - vmw_xorg_setup, - NULL -}; - - -/* - * Xorg driver functions - */ - -static pointer -vmw_xorg_setup(pointer module, pointer opts, int *errmaj, int *errmin) -{ - static Bool setupDone = 0; - - /* This module should be loaded only once, but check to be sure. - */ - if (!setupDone) { - setupDone = 1; - xf86AddDriver(&vmwgfx, module, HaveDriverFuncs); - - /* - * The return value must be non-NULL on success even though there - * is no TearDownProc. - */ - return (pointer) 1; - } else { - if (errmaj) - *errmaj = LDR_ONCEONLY; - return NULL; - } -} - -static void -vmw_xorg_identify(int flags) -{ - xf86PrintChipsets("vmwgfx", "Driver for VMware SVGA device", - vmw_xorg_chipsets); -} - -_X_EXPORT Bool -vmw_xorg_pci_probe(DriverPtr driver, - int entity_num, struct pci_device *device, intptr_t match_data) -{ - ScrnInfoPtr scrn = NULL; - EntityInfoPtr entity; - - scrn = xf86ConfigPciEntity(scrn, 0, entity_num, vmw_xorg_pci_devices, - NULL, NULL, NULL, NULL, NULL); - if (scrn != NULL) { - scrn->driverVersion = 1; - scrn->driverName = "vmwgfx"; - scrn->name = "vmwgfx"; - scrn->Probe = NULL; - - entity = xf86GetEntityInfo(entity_num); - - /* Use all the functions from the xorg tracker */ - xorg_tracker_set_functions(scrn); - } - return scrn != NULL; -} diff --git a/vmwgfx/vmwgfx_dri2.c b/vmwgfx/vmwgfx_dri2.c index b3fb1e8..ddeaf1d 100644 --- a/vmwgfx/vmwgfx_dri2.c +++ b/vmwgfx/vmwgfx_dri2.c @@ -376,7 +376,7 @@ xorg_dri2_init(ScreenPtr pScreen) dri2info.version = min(DRI2INFOREC_VERSION, 3); dri2info.fd = ms->fd; - dri2info.driverName = pScrn->driverName; + dri2info.driverName = "vmwgfx"; dri2info.deviceName = "/dev/dri/card0"; /* FIXME */ dri2info.CreateBuffer = dri2_create_buffer; diff --git a/vmwgfx/vmwgfx_driver.c b/vmwgfx/vmwgfx_driver.c index a3d7860..69fef8c 100644 --- a/vmwgfx/vmwgfx_driver.c +++ b/vmwgfx/vmwgfx_driver.c @@ -58,6 +58,7 @@ #include <saa.h> #include "vmwgfx_saa.h" +#include "../src/vmware_bootstrap.h" #define XA_VERSION_MINOR_REQUIRED 0 #define DRM_VERSION_MAJOR_REQUIRED 2 @@ -97,47 +98,15 @@ static ModeStatus drv_valid_mode(int scrnIndex, DisplayModePtr mode, Bool verbos int flags); extern void xorg_tracker_set_functions(ScrnInfoPtr scrn); -extern const OptionInfoRec * xorg_tracker_available_options(int chipid, - int busid); - - -typedef enum -{ - OPTION_SW_CURSOR, - OPTION_RENDER_ACCEL, - OPTION_DRI, - OPTION_DIRECT_PRESENTS, - OPTION_HW_PRESENTS -} drv_option_enums; - -static const OptionInfoRec drv_options[] = { - {OPTION_SW_CURSOR, "SWcursor", OPTV_BOOLEAN, {0}, FALSE}, - {OPTION_RENDER_ACCEL, "RenderAccel", OPTV_BOOLEAN, {0}, FALSE}, - {OPTION_DRI, "DRI", OPTV_BOOLEAN, {0}, FALSE}, - {OPTION_DIRECT_PRESENTS, "DirectPresents", OPTV_BOOLEAN, {0}, FALSE}, - {OPTION_HW_PRESENTS, "HWPresents", OPTV_BOOLEAN, {0}, FALSE}, - {-1, NULL, OPTV_NONE, {0}, FALSE} -}; - - -/* - * Exported Xorg driver functions to winsys - */ - -const OptionInfoRec * -xorg_tracker_available_options(int chipid, int busid) -{ - return drv_options; -} void -xorg_tracker_set_functions(ScrnInfoPtr scrn) +vmwgfx_hookup(ScrnInfoPtr pScrn) { - scrn->PreInit = drv_pre_init; - scrn->ScreenInit = drv_screen_init; - scrn->SwitchMode = drv_switch_mode; - scrn->FreeScreen = drv_free_screen; - scrn->ValidMode = drv_valid_mode; + pScrn->PreInit = drv_pre_init; + pScrn->ScreenInit = drv_screen_init; + pScrn->SwitchMode = drv_switch_mode; + pScrn->FreeScreen = drv_free_screen; + pScrn->ValidMode = drv_valid_mode; } /* @@ -399,9 +368,8 @@ drv_pre_init(ScrnInfoPtr pScrn, int flags) /* Process the options */ xf86CollectOptions(pScrn, NULL); - if (!(ms->Options = malloc(sizeof(drv_options)))) + if (!(ms->Options = VMWARECopyOptions())) return FALSE; - memcpy(ms->Options, drv_options, sizeof(drv_options)); xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, ms->Options); ms->accelerate_render = TRUE; @@ -461,7 +429,7 @@ drv_pre_init(ScrnInfoPtr pScrn, int flags) } - if (xf86ReturnOptValBool(ms->Options, OPTION_SW_CURSOR, FALSE)) { + if (!xf86ReturnOptValBool(ms->Options, OPTION_HW_CURSOR, TRUE)) { ms->SWCursor = TRUE; } |