summaryrefslogtreecommitdiffstats
path: root/sys/dev/drm/mga_drv.c
diff options
context:
space:
mode:
authoranholt <anholt@FreeBSD.org>2005-04-16 03:44:47 +0000
committeranholt <anholt@FreeBSD.org>2005-04-16 03:44:47 +0000
commited881e3d943468fbc6be48896b366e62289da086 (patch)
treea78e79aa5b7b85f67ae2b321bc1be28f19b499b2 /sys/dev/drm/mga_drv.c
parent9de8e0daf94d3598eba43ca102b8629938c52342 (diff)
downloadFreeBSD-src-ed881e3d943468fbc6be48896b366e62289da086.zip
FreeBSD-src-ed881e3d943468fbc6be48896b366e62289da086.tar.gz
Update to DRM CVS as of 2005-04-12, bringing many changes:
- Split core DRM routines back into their own module, rather than using the nasty templated system like before. - Development-class R300 support in radeon driver (requires userland pieces, of course). - Mach64 driver (haven't tested in a while -- my mach64s no longer fit in the testbox). Covers Rage Pros, Rage Mobility P/M, Rage XL, and some others. - i915 driver files, which just need to get drm_drv.c fixed to allow attachment to the drmsub device. Covers i830 through i915 integrated graphics. - savage driver files, which should require minimal changes to work. Covers the Savage3D, Savage IX/MX, Savage 4, ProSavage. - Support for color and texture tiling and HyperZ features of Radeon. Thanks to: scottl (much p4 handholding) Jung-uk Kim (helpful prodding) PR: [1] kern/76879, [2] kern/72548 Submitted by: [1] Alex, lesha at intercaf dot ru [2] Shaun Jurrens, shaun at shamz dot net
Diffstat (limited to 'sys/dev/drm/mga_drv.c')
-rw-r--r--sys/dev/drm/mga_drv.c95
1 files changed, 77 insertions, 18 deletions
diff --git a/sys/dev/drm/mga_drv.c b/sys/dev/drm/mga_drv.c
index 6de110a..05569a9 100644
--- a/sys/dev/drm/mga_drv.c
+++ b/sys/dev/drm/mga_drv.c
@@ -1,5 +1,6 @@
/* mga_drv.c -- Matrox G200/G400 driver -*- linux-c -*-
- * Created: Mon Dec 13 01:56:22 1999 by jhartmann@precisioninsight.com */
+ * Created: Mon Dec 13 01:56:22 1999 by jhartmann@precisioninsight.com
+ */
/*-
* Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
* Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
@@ -31,29 +32,87 @@
* $FreeBSD$
*/
-#include "dev/drm/mga.h"
#include "dev/drm/drmP.h"
#include "dev/drm/drm.h"
#include "dev/drm/mga_drm.h"
#include "dev/drm/mga_drv.h"
+#include "dev/drm/drm_pciids.h"
+
+/* drv_PCI_IDs comes from drm_pciids.h, generated from drm_pciids.txt. */
+static drm_pci_id_list_t mga_pciidlist[] = {
+ mga_PCI_IDS
+};
+
+extern drm_ioctl_desc_t mga_ioctls[];
+extern int mga_max_ioctl;
+
+static void mga_configure(drm_device_t *dev)
+{
+ dev->dev_priv_size = sizeof(drm_mga_buf_priv_t);
+ /* XXX dev->prerelease = mga_driver_prerelease; */
+ dev->pretakedown = mga_driver_pretakedown;
+ dev->vblank_wait = mga_driver_vblank_wait;
+ dev->irq_preinstall = mga_driver_irq_preinstall;
+ dev->irq_postinstall = mga_driver_irq_postinstall;
+ dev->irq_uninstall = mga_driver_irq_uninstall;
+ dev->irq_handler = mga_driver_irq_handler;
+ dev->dma_ioctl = mga_dma_buffers;
+ dev->dma_quiescent = mga_driver_dma_quiescent;
-#include "dev/drm/drm_agpsupport.h"
-#include "dev/drm/drm_auth.h"
-#include "dev/drm/drm_bufs.h"
-#include "dev/drm/drm_context.h"
-#include "dev/drm/drm_dma.h"
-#include "dev/drm/drm_drawable.h"
-#include "dev/drm/drm_drv.h"
-#include "dev/drm/drm_fops.h"
-#include "dev/drm/drm_ioctl.h"
-#include "dev/drm/drm_irq.h"
-#include "dev/drm/drm_lock.h"
-#include "dev/drm/drm_memory.h"
-#include "dev/drm/drm_vm.h"
-#include "dev/drm/drm_sysctl.h"
+ dev->driver_ioctls = mga_ioctls;
+ dev->max_driver_ioctl = mga_max_ioctl;
+
+ dev->driver_name = DRIVER_NAME;
+ dev->driver_desc = DRIVER_DESC;
+ dev->driver_date = DRIVER_DATE;
+ dev->driver_major = DRIVER_MAJOR;
+ dev->driver_minor = DRIVER_MINOR;
+ dev->driver_patchlevel = DRIVER_PATCHLEVEL;
+
+ dev->use_agp = 1;
+ dev->require_agp = 1;
+ dev->use_mtrr = 1;
+ dev->use_dma = 1;
+ dev->use_irq = 1;
+ dev->use_vbl_irq = 1;
+}
#ifdef __FreeBSD__
-DRIVER_MODULE(mga, pci, mga_driver, mga_devclass, 0, 0);
-#elif defined(__NetBSD__)
+static int
+mga_probe(device_t dev)
+{
+ return drm_probe(dev, mga_pciidlist);
+}
+
+static int
+mga_attach(device_t nbdev)
+{
+ drm_device_t *dev = device_get_softc(nbdev);
+
+ bzero(dev, sizeof(drm_device_t));
+ mga_configure(dev);
+ return drm_attach(nbdev, mga_pciidlist);
+}
+
+static device_method_t mga_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_probe, mga_probe),
+ DEVMETHOD(device_attach, mga_attach),
+ DEVMETHOD(device_detach, drm_detach),
+
+ { 0, 0 }
+};
+
+static driver_t mga_driver = {
+ "drm",
+ mga_methods,
+ sizeof(drm_device_t)
+};
+
+extern devclass_t drm_devclass;
+DRIVER_MODULE(mga, pci, mga_driver, drm_devclass, 0, 0);
+MODULE_DEPEND(mga, drm, 1, 1, 1);
+
+#elif defined(__NetBSD__) || defined(__OpenBSD__)
CFDRIVER_DECL(mga, DV_TTY, NULL);
#endif
OpenPOWER on IntegriCloud