blob: f0298e17db37f3e8e2e3fce45147416cc71481e2 [file] [log] [blame]
Keith Whitwell0faa00a2004-06-10 12:47:50 +00001/* i915_drv.c -- i830,i845,i855,i865,i915 driver -*- linux-c -*-
2 */
3
4/**************************************************************************
Jon Smirlad549c52004-10-10 22:54:55 +00005 *
Keith Whitwell0faa00a2004-06-10 12:47:50 +00006 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
7 * All Rights Reserved.
Jon Smirlad549c52004-10-10 22:54:55 +00008 *
Keith Whitwell0faa00a2004-06-10 12:47:50 +00009 **************************************************************************/
10
Keith Whitwell0faa00a2004-06-10 12:47:50 +000011#include "drmP.h"
12#include "drm.h"
13#include "i915_drm.h"
14#include "i915_drv.h"
15
Jon Smirlfa6b1d12004-09-27 19:51:38 +000016#include "drm_pciids.h"
17
Jon Smirl9f9a8f12004-09-30 21:12:10 +000018int postinit(struct drm_device *dev, unsigned long flags)
Jon Smirlfa6b1d12004-09-27 19:51:38 +000019{
20 dev->counters += 4;
21 dev->types[6] = _DRM_STAT_IRQ;
22 dev->types[7] = _DRM_STAT_PRIMARY;
23 dev->types[8] = _DRM_STAT_SECONDARY;
24 dev->types[9] = _DRM_STAT_DMA;
Jon Smirl9f9a8f12004-09-30 21:12:10 +000025
26 DRM_INFO("Initialized %s %d.%d.%d %s on minor %d: %s\n",
27 DRIVER_NAME,
28 DRIVER_MAJOR,
29 DRIVER_MINOR,
30 DRIVER_PATCHLEVEL,
Jon Smirlad70dc62004-10-12 03:59:17 +000031 DRIVER_DATE, dev->primary.minor, pci_pretty_name(dev->pdev)
Jon Smirl9f9a8f12004-09-30 21:12:10 +000032 );
Jon Smirlfa6b1d12004-09-27 19:51:38 +000033 return 0;
34}
35
Jon Smirl9f9a8f12004-09-30 21:12:10 +000036static int version(drm_version_t * version)
Jon Smirlfa6b1d12004-09-27 19:51:38 +000037{
38 int len;
39
40 version->version_major = DRIVER_MAJOR;
41 version->version_minor = DRIVER_MINOR;
42 version->version_patchlevel = DRIVER_PATCHLEVEL;
Jon Smirl9f9a8f12004-09-30 21:12:10 +000043 DRM_COPY(version->name, DRIVER_NAME);
44 DRM_COPY(version->date, DRIVER_DATE);
45 DRM_COPY(version->desc, DRIVER_DESC);
Jon Smirlfa6b1d12004-09-27 19:51:38 +000046 return 0;
47}
48
49static struct pci_device_id pciidlist[] = {
50 i915_PCI_IDS
51};
52
53static drm_ioctl_desc_t ioctls[] = {
Jon Smirl9f9a8f12004-09-30 21:12:10 +000054 [DRM_IOCTL_NR(DRM_I915_INIT)] = {i915_dma_init, 1, 1},
55 [DRM_IOCTL_NR(DRM_I915_FLUSH)] = {i915_flush_ioctl, 1, 0},
56 [DRM_IOCTL_NR(DRM_I915_FLIP)] = {i915_flip_bufs, 1, 0},
57 [DRM_IOCTL_NR(DRM_I915_BATCHBUFFER)] = {i915_batchbuffer, 1, 0},
58 [DRM_IOCTL_NR(DRM_I915_IRQ_EMIT)] = {i915_irq_emit, 1, 0},
59 [DRM_IOCTL_NR(DRM_I915_IRQ_WAIT)] = {i915_irq_wait, 1, 0},
60 [DRM_IOCTL_NR(DRM_I915_GETPARAM)] = {i915_getparam, 1, 0},
61 [DRM_IOCTL_NR(DRM_I915_SETPARAM)] = {i915_setparam, 1, 1},
62 [DRM_IOCTL_NR(DRM_I915_ALLOC)] = {i915_mem_alloc, 1, 0},
63 [DRM_IOCTL_NR(DRM_I915_FREE)] = {i915_mem_free, 1, 0},
64 [DRM_IOCTL_NR(DRM_I915_INIT_HEAP)] = {i915_mem_init_heap, 1, 1},
65 [DRM_IOCTL_NR(DRM_I915_CMDBUFFER)] = {i915_cmdbuffer, 1, 0}
Jon Smirlfa6b1d12004-09-27 19:51:38 +000066};
67
Jon Smirlad70dc62004-10-12 03:59:17 +000068static int probe(struct pci_dev *pdev, const struct pci_device_id *ent);
Jon Smirlad549c52004-10-10 22:54:55 +000069static struct drm_driver driver = {
Jon Smirl9f9a8f12004-09-30 21:12:10 +000070 .driver_features =
71 DRIVER_USE_AGP | DRIVER_REQUIRE_AGP | DRIVER_USE_MTRR |
72 DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED,
Jon Smirlfa6b1d12004-09-27 19:51:38 +000073 .pretakedown = i915_driver_pretakedown,
74 .prerelease = i915_driver_prerelease,
75 .irq_preinstall = i915_driver_irq_preinstall,
76 .irq_postinstall = i915_driver_irq_postinstall,
77 .irq_uninstall = i915_driver_irq_uninstall,
78 .irq_handler = i915_driver_irq_handler,
79 .reclaim_buffers = drm_core_reclaim_buffers,
80 .get_map_ofs = drm_core_get_map_ofs,
81 .get_reg_ofs = drm_core_get_reg_ofs,
82 .postinit = postinit,
83 .version = version,
84 .ioctls = ioctls,
85 .num_ioctls = DRM_ARRAY_SIZE(ioctls),
Jon Smirl3aef3842004-09-30 18:13:33 +000086 .fops = {
Jon Smirlad70dc62004-10-12 03:59:17 +000087 .owner = THIS_MODULE,
88 .open = drm_open,
89 .release = drm_release,
90 .ioctl = drm_ioctl,
91 .mmap = drm_mmap,
Jon Smirl5e8838f2004-10-13 16:40:53 +000092 .poll = drm_poll,
Jon Smirlad70dc62004-10-12 03:59:17 +000093 .fasync = drm_fasync,
94 },
95 .pci_driver = {
96 .name = DRIVER_NAME,
97 .id_table = pciidlist,
98 .probe = probe,
99 .remove = __devexit_p(drm_cleanup_pci),
100 }
Jon Smirlfa6b1d12004-09-27 19:51:38 +0000101};
102
103static int probe(struct pci_dev *pdev, const struct pci_device_id *ent)
104{
Jon Smirlad70dc62004-10-12 03:59:17 +0000105 return drm_get_dev(pdev, ent, &driver);
Jon Smirlfa6b1d12004-09-27 19:51:38 +0000106}
107
Jon Smirlfa6b1d12004-09-27 19:51:38 +0000108static int __init i915_init(void)
109{
Jon Smirlad70dc62004-10-12 03:59:17 +0000110 return drm_init(&driver, pciidlist);
Jon Smirlfa6b1d12004-09-27 19:51:38 +0000111}
112
113static void __exit i915_exit(void)
114{
Jon Smirlad70dc62004-10-12 03:59:17 +0000115 drm_exit(&driver);
Jon Smirlfa6b1d12004-09-27 19:51:38 +0000116}
117
118module_init(i915_init);
119module_exit(i915_exit);
120
Jon Smirl9f9a8f12004-09-30 21:12:10 +0000121MODULE_AUTHOR(DRIVER_AUTHOR);
122MODULE_DESCRIPTION(DRIVER_DESC);
Jon Smirlfa6b1d12004-09-27 19:51:38 +0000123MODULE_LICENSE("GPL and additional rights");