summaryrefslogtreecommitdiff
path: root/vmwgfx
diff options
context:
space:
mode:
authorThomas Hellstrom <thellstrom@vmware.com>2011-11-22 19:56:20 +0100
committerThomas Hellstrom <thellstrom@vmware.com>2011-11-25 16:56:11 +0100
commit1c77e3d7434f04c59233ce7e497a949e386e1630 (patch)
tree09dc18a038b7b4c6cd2395cf10f6f3a117942cd6 /vmwgfx
parent2aa256c96496ed6dd9dbd5880c278f4422500b0f (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.am11
-rw-r--r--vmwgfx/vmwgfx_bootstrap.c199
-rw-r--r--vmwgfx/vmwgfx_dri2.c2
-rw-r--r--vmwgfx/vmwgfx_driver.c50
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;
}