r128_drv.c revision b5e89ed53ed8d24f83ba1941c07382af00ed238e
1b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland/* r128_drv.c -- ATI Rage 128 driver -*- linux-c -*- 2b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * Created: Mon Dec 13 09:47:27 1999 by faith@precisioninsight.com 3cf45b752c9f23939e40d823b0600bf876e97b0e0Bob Peterson * 4b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. 5b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. 6b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * All Rights Reserved. 7e9fc2aa091ab8fa46e60d4c9d06a89305c441652Steven Whitehouse * 8b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * Permission is hereby granted, free of charge, to any person obtaining a 9b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * copy of this software and associated documentation files (the "Software"), 10b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * to deal in the Software without restriction, including without limitation 11b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * the rights to use, copy, modify, merge, publish, distribute, sublicense, 12b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * and/or sell copies of the Software, and to permit persons to whom the 13b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * Software is furnished to do so, subject to the following conditions: 14b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * 15b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * The above copyright notice and this permission notice (including the next 16b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * paragraph) shall be included in all copies or substantial portions of the 178638460540749ddb1beca9e9a68d655a6fe6df65Abhijith Das * Software. 188638460540749ddb1beca9e9a68d655a6fe6df65Abhijith Das * 195c676f6d359b0404d53f542f02e1359583cb2895Steven Whitehouse * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20fe64d517df0970a68417184a12fcd4ba0589cc28Steven Whitehouse * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21cc632e7f93465597896862cf9e50baefb1999215Steven Whitehouse * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 23b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 245c676f6d359b0404d53f542f02e1359583cb2895Steven Whitehouse * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 25da6dd40d59fa9617ed697b90114e197036901632Bob Peterson * OTHER DEALINGS IN THE SOFTWARE. 26b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * 27b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * Authors: 28b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * Rickard E. (Rik) Faith <faith@valinux.com> 29b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * Gareth Hughes <gareth@valinux.com> 30b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland */ 31b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland 32b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#include <linux/config.h> 335c676f6d359b0404d53f542f02e1359583cb2895Steven Whitehouse#include "drmP.h" 34bb3b0e3df5420fdf2c6bbb4417525c6d2ef55bbbSteven Whitehouse#include "drm.h" 359ac1b4d9b6f885ccd7d8f56bceb609003a920ff7Steven Whitehouse#include "r128_drm.h" 36b52896813c2f16bcc5c5b67bb3c3f75bc084439bSteven Whitehouse#include "r128_drv.h" 3763997775b795f97ef51f3e56bc3abc9edc04bbb0Steven Whitehouse 38b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#include "drm_pciids.h" 39b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland 40b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandstatic int postinit(struct drm_device *dev, unsigned long flags) 41b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland{ 429b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse DRM_INFO("Initialized %s %d.%d.%d %s on minor %d: %s\n", 439b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse DRIVER_NAME, 449b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse DRIVER_MAJOR, 459b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse DRIVER_MINOR, 469b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse DRIVER_PATCHLEVEL, 479b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse DRIVER_DATE, dev->primary.minor, pci_pretty_name(dev->pdev) 489b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse ); 499b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse return 0; 509b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse} 519b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse 529b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehousestatic int version(drm_version_t * version) 539b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse{ 549b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse int len; 559b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse 569b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse version->version_major = DRIVER_MAJOR; 579b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse version->version_minor = DRIVER_MINOR; 589b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse version->version_patchlevel = DRIVER_PATCHLEVEL; 599b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse DRM_COPY(version->name, DRIVER_NAME); 609b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse DRM_COPY(version->date, DRIVER_DATE); 619b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse DRM_COPY(version->desc, DRIVER_DESC); 629b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse return 0; 639b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse} 649b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse 659b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehousestatic struct pci_device_id pciidlist[] = { 669b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse r128_PCI_IDS 679b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse}; 689b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse 699b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouseextern drm_ioctl_desc_t r128_ioctls[]; 709b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouseextern int r128_max_ioctl; 719b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse 72b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandstatic struct drm_driver driver = { 73b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .driver_features = 74b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_PCI_DMA | DRIVER_SG | 75b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | 7685d1da67f7e1239afa3494d05be87da6fc3ecadaSteven Whitehouse DRIVER_IRQ_VBL, 77b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .dev_priv_size = sizeof(drm_r128_buf_priv_t), 78b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .prerelease = r128_driver_prerelease, 79b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .pretakedown = r128_driver_pretakedown, 805c676f6d359b0404d53f542f02e1359583cb2895Steven Whitehouse .vblank_wait = r128_driver_vblank_wait, 81b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .irq_preinstall = r128_driver_irq_preinstall, 82b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .irq_postinstall = r128_driver_irq_postinstall, 83b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .irq_uninstall = r128_driver_irq_uninstall, 84b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .irq_handler = r128_driver_irq_handler, 85e402746a945ceb9d0486a8e3d5917c9228fa4404Steven Whitehouse .reclaim_buffers = drm_core_reclaim_buffers, 86e402746a945ceb9d0486a8e3d5917c9228fa4404Steven Whitehouse .get_map_ofs = drm_core_get_map_ofs, 87b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .get_reg_ofs = drm_core_get_reg_ofs, 88b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .postinit = postinit, 89b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .version = version, 90f55ab26a8f92a23988c3e6da28dae4741933a4e2Steven Whitehouse .ioctls = r128_ioctls, 91b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .dma_ioctl = r128_cce_buffers, 92b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .fops = { 93b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .owner = THIS_MODULE, 94b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .open = drm_open, 95b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .release = drm_release, 96f55ab26a8f92a23988c3e6da28dae4741933a4e2Steven Whitehouse .ioctl = drm_ioctl, 97b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .mmap = drm_mmap, 98b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .poll = drm_poll, 99f55ab26a8f92a23988c3e6da28dae4741933a4e2Steven Whitehouse .fasync = drm_fasync, 10037b2c8377c98acb60cf4d0126e385ef2153bded9Steven Whitehouse#ifdef CONFIG_COMPAT 101813e0c46c9e2a0c6f0b6e774faac82afd7a2e812Steven Whitehouse .compat_ioctl = r128_compat_ioctl, 102813e0c46c9e2a0c6f0b6e774faac82afd7a2e812Steven Whitehouse#endif 103b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland } 104b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland , 105b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .pci_driver = { 106b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .name = DRIVER_NAME, 107b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland .id_table = pciidlist, 108b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland } 109b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland}; 110d7b616e252b125f12b007c392f7644053bb6f140Steven Whitehouse 111b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandstatic int __init r128_init(void) 11271b86f562b5eb6f94ea00bba060caa64d0137969Steven Whitehouse{ 113b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland driver.num_ioctls = r128_max_ioctl; 114b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland return drm_init(&driver); 115b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland} 116484adff8a06cb5d952832f5487ae863f54c0fb69Steven Whitehouse 11716615be18cadf53ee6f8a4f0bdd647f0753421b1Steven Whitehousestatic void __exit r128_exit(void) 11816615be18cadf53ee6f8a4f0bdd647f0753421b1Steven Whitehouse{ 119b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland drm_exit(&driver); 120b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland} 121b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland 122f55ab26a8f92a23988c3e6da28dae4741933a4e2Steven Whitehousemodule_init(r128_init); 123b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandmodule_exit(r128_exit); 124b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland 125b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid TeiglandMODULE_AUTHOR(DRIVER_AUTHOR); 126b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid TeiglandMODULE_DESCRIPTION(DRIVER_DESC); 127b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid TeiglandMODULE_LICENSE("GPL and additional rights"); 1289b8df98fc8973ad1c5f0d7c4cf71c7fb84fe22c5Steven Whitehouse