diff options
Diffstat (limited to 'sys/dev/drm/radeon_drv.c')
-rw-r--r-- | sys/dev/drm/radeon_drv.c | 106 |
1 files changed, 81 insertions, 25 deletions
diff --git a/sys/dev/drm/radeon_drv.c b/sys/dev/drm/radeon_drv.c index ca94080..a515780 100644 --- a/sys/dev/drm/radeon_drv.c +++ b/sys/dev/drm/radeon_drv.c @@ -1,5 +1,6 @@ /* radeon_drv.c -- ATI Radeon driver -*- linux-c -*- - * Created: Wed Feb 14 17:10:04 2001 by gareth@valinux.com */ + * Created: Wed Feb 14 17:10:04 2001 by gareth@valinux.com + */ /*- * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. * All Rights Reserved. @@ -29,36 +30,91 @@ * $FreeBSD$ */ -#include "dev/drm/radeon.h" #include "dev/drm/drmP.h" #include "dev/drm/drm.h" #include "dev/drm/radeon_drm.h" #include "dev/drm/radeon_drv.h" -#if __REALLY_HAVE_SG -#include "dev/drm/ati_pcigart.h" -#endif +#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 radeon_pciidlist[] = { + radeon_PCI_IDS +}; + +extern drm_ioctl_desc_t radeon_ioctls[]; +extern int radeon_max_ioctl; + +static void radeon_configure(drm_device_t *dev) +{ + dev->dev_priv_size = sizeof(drm_radeon_buf_priv_t); + dev->preinit = radeon_preinit; + dev->postcleanup = radeon_postcleanup; + dev->prerelease = radeon_driver_prerelease; + dev->pretakedown = radeon_driver_pretakedown; + dev->open_helper = radeon_driver_open_helper; + dev->free_filp_priv = radeon_driver_free_filp_priv; + dev->vblank_wait = radeon_driver_vblank_wait; + dev->irq_preinstall = radeon_driver_irq_preinstall; + dev->irq_postinstall = radeon_driver_irq_postinstall; + dev->irq_uninstall = radeon_driver_irq_uninstall; + dev->irq_handler = radeon_driver_irq_handler; + dev->dma_ioctl = radeon_cp_buffers; -#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_pci.h" -#include "dev/drm/drm_vm.h" -#include "dev/drm/drm_sysctl.h" -#if __HAVE_SG -#include "dev/drm/drm_scatter.h" -#endif + dev->driver_ioctls = radeon_ioctls; + dev->max_driver_ioctl = radeon_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->use_mtrr = 1; + dev->use_pci_dma = 1; + dev->use_sg = 1; + dev->use_dma = 1; + dev->use_irq = 1; + dev->use_vbl_irq = 1; +} #ifdef __FreeBSD__ -DRIVER_MODULE(radeon, pci, DRM(driver), DRM(devclass), 0, 0); -#elif defined(__NetBSD__) +static int +radeon_probe(device_t dev) +{ + return drm_probe(dev, radeon_pciidlist); +} + +static int +radeon_attach(device_t nbdev) +{ + drm_device_t *dev = device_get_softc(nbdev); + + bzero(dev, sizeof(drm_device_t)); + radeon_configure(dev); + return drm_attach(nbdev, radeon_pciidlist); +} + +static device_method_t radeon_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, radeon_probe), + DEVMETHOD(device_attach, radeon_attach), + DEVMETHOD(device_detach, drm_detach), + + { 0, 0 } +}; + +static driver_t radeon_driver = { + "drm", + radeon_methods, + sizeof(drm_device_t) +}; + +extern devclass_t drm_devclass; +DRIVER_MODULE(radeon, pci, radeon_driver, drm_devclass, 0, 0); +MODULE_DEPEND(radeon, drm, 1, 1, 1); + +#elif defined(__NetBSD__) || defined(__OpenBSD__) CFDRIVER_DECL(radeon, DV_TTY, NULL); #endif /* __FreeBSD__ */ |