radeon_drv.c revision 183833
1193326Sed/* radeon_drv.c -- ATI Radeon driver -*- linux-c -*-
2193326Sed * Created: Wed Feb 14 17:10:04 2001 by gareth@valinux.com
3193326Sed */
4193326Sed/*-
5193326Sed * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
6193326Sed * All Rights Reserved.
7193326Sed *
8193326Sed * Permission is hereby granted, free of charge, to any person obtaining a
9193326Sed * copy of this software and associated documentation files (the "Software"),
10193326Sed * to deal in the Software without restriction, including without limitation
11193326Sed * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12193326Sed * and/or sell copies of the Software, and to permit persons to whom the
13193326Sed * Software is furnished to do so, subject to the following conditions:
14193326Sed *
15193326Sed * The above copyright notice and this permission notice (including the next
16198954Srdivacky * paragraph) shall be included in all copies or substantial portions of the
17193326Sed * Software.
18193326Sed *
19193326Sed * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20193326Sed * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21199482Srdivacky * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
22193326Sed * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23193326Sed * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24193326Sed * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25193326Sed * OTHER DEALINGS IN THE SOFTWARE.
26193326Sed *
27193326Sed * Authors:
28198092Srdivacky *    Gareth Hughes <gareth@valinux.com>
29193326Sed *
30193326Sed */
31193326Sed
32193326Sed#include <sys/cdefs.h>
33193326Sed__FBSDID("$FreeBSD: head/sys/dev/drm/radeon_drv.c 183833 2008-10-13 18:03:27Z rnoland $");
34193326Sed
35193326Sed#include "dev/drm/drmP.h"
36193326Sed#include "dev/drm/drm.h"
37193326Sed#include "dev/drm/radeon_drm.h"
38193326Sed#include "dev/drm/radeon_drv.h"
39193326Sed#include "dev/drm/drm_pciids.h"
40193326Sed
41193326Sedint radeon_no_wb;
42193326Sed
43193326Sed/* drv_PCI_IDs comes from drm_pciids.h, generated from drm_pciids.txt. */
44193326Sedstatic drm_pci_id_list_t radeon_pciidlist[] = {
45198092Srdivacky	radeon_PCI_IDS
46193326Sed};
47193326Sed
48193326Sedstatic void radeon_configure(struct drm_device *dev)
49193326Sed{
50193326Sed	dev->driver->driver_features =
51193326Sed	    DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_PCI_DMA |
52193326Sed	    DRIVER_SG | DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ;
53199990Srdivacky
54199990Srdivacky	dev->driver->buf_priv_size	= sizeof(drm_radeon_buf_priv_t);
55199990Srdivacky	dev->driver->load		= radeon_driver_load;
56199990Srdivacky	dev->driver->unload		= radeon_driver_unload;
57199990Srdivacky	dev->driver->firstopen		= radeon_driver_firstopen;
58199990Srdivacky	dev->driver->open		= radeon_driver_open;
59202379Srdivacky	dev->driver->preclose		= radeon_driver_preclose;
60202379Srdivacky	dev->driver->postclose		= radeon_driver_postclose;
61199990Srdivacky	dev->driver->lastclose		= radeon_driver_lastclose;
62199990Srdivacky	dev->driver->get_vblank_counter	= radeon_get_vblank_counter;
63202379Srdivacky	dev->driver->enable_vblank	= radeon_enable_vblank;
64202379Srdivacky	dev->driver->disable_vblank	= radeon_disable_vblank;
65202379Srdivacky	dev->driver->irq_preinstall	= radeon_driver_irq_preinstall;
66202379Srdivacky	dev->driver->irq_postinstall	= radeon_driver_irq_postinstall;
67199990Srdivacky	dev->driver->irq_uninstall	= radeon_driver_irq_uninstall;
68199990Srdivacky	dev->driver->irq_handler	= radeon_driver_irq_handler;
69203955Srdivacky	dev->driver->dma_ioctl		= radeon_cp_buffers;
70203955Srdivacky
71203955Srdivacky	dev->driver->ioctls		= radeon_ioctls;
72203955Srdivacky	dev->driver->max_ioctl		= radeon_max_ioctl;
73203955Srdivacky
74198954Srdivacky	dev->driver->name		= DRIVER_NAME;
75203955Srdivacky	dev->driver->desc		= DRIVER_DESC;
76198954Srdivacky	dev->driver->date		= DRIVER_DATE;
77198954Srdivacky	dev->driver->major		= DRIVER_MAJOR;
78203955Srdivacky	dev->driver->minor		= DRIVER_MINOR;
79203955Srdivacky	dev->driver->patchlevel		= DRIVER_PATCHLEVEL;
80203955Srdivacky}
81203955Srdivacky
82203955Srdivackystatic int
83203955Srdivackyradeon_probe(device_t dev)
84203955Srdivacky{
85203955Srdivacky	return drm_probe(dev, radeon_pciidlist);
86193326Sed}
87198954Srdivacky
88198954Srdivackystatic int
89198954Srdivackyradeon_attach(device_t nbdev)
90198954Srdivacky{
91198954Srdivacky	struct drm_device *dev = device_get_softc(nbdev);
92203955Srdivacky
93203955Srdivacky	dev->driver = malloc(sizeof(struct drm_driver_info), DRM_MEM_DRIVER,
94198954Srdivacky	    M_WAITOK | M_ZERO);
95198954Srdivacky
96198954Srdivacky	radeon_configure(dev);
97198954Srdivacky
98198954Srdivacky	return drm_attach(nbdev, radeon_pciidlist);
99198954Srdivacky}
100198954Srdivacky
101198954Srdivackystatic int
102198954Srdivackyradeon_detach(device_t nbdev)
103203955Srdivacky{
104203955Srdivacky	struct drm_device *dev = device_get_softc(nbdev);
105198954Srdivacky	int ret;
106198954Srdivacky
107198954Srdivacky	ret = drm_detach(nbdev);
108198954Srdivacky
109198954Srdivacky	free(dev->driver, DRM_MEM_DRIVER);
110203955Srdivacky
111203955Srdivacky	return ret;
112203955Srdivacky}
113203955Srdivacky
114203955Srdivackystatic device_method_t radeon_methods[] = {
115198954Srdivacky	/* Device interface */
116198954Srdivacky	DEVMETHOD(device_probe,		radeon_probe),
117203955Srdivacky	DEVMETHOD(device_attach,	radeon_attach),
118203955Srdivacky	DEVMETHOD(device_detach,	radeon_detach),
119199990Srdivacky
120199990Srdivacky	{ 0, 0 }
121203955Srdivacky};
122203955Srdivacky
123198954Srdivackystatic driver_t radeon_driver = {
124198954Srdivacky	"drm",
125203955Srdivacky	radeon_methods,
126198954Srdivacky	sizeof(struct drm_device)
127198954Srdivacky};
128203955Srdivacky
129193326Sedextern devclass_t drm_devclass;
130193326Sed#if __FreeBSD_version >= 700010
131193326SedDRIVER_MODULE(radeon, vgapci, radeon_driver, drm_devclass, 0, 0);
132193326Sed#else
133193326SedDRIVER_MODULE(radeon, pci, radeon_driver, drm_devclass, 0, 0);
134193326Sed#endif
135198398SrdivackyMODULE_DEPEND(radeon, drm, 1, 1, 1);
136193326Sed