Module Name: src Committed By: jmcneill Date: Sat Aug 21 11:54:37 UTC 2010
Modified Files: src/sys/external/bsd/drm/dist/shared-core: via_drv.c Log Message: Get viadrm working again To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm/dist/shared-core/via_drv.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/external/bsd/drm/dist/shared-core/via_drv.c diff -u src/sys/external/bsd/drm/dist/shared-core/via_drv.c:1.2 src/sys/external/bsd/drm/dist/shared-core/via_drv.c:1.3 --- src/sys/external/bsd/drm/dist/shared-core/via_drv.c:1.2 Sun Sep 27 12:39:05 2009 +++ src/sys/external/bsd/drm/dist/shared-core/via_drv.c Sat Aug 21 11:54:36 2010 @@ -1,157 +1,97 @@ -/* - * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. - * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. +/* $NetBSD: via_drv.c,v 1.3 2010/08/21 11:54:36 jmcneill Exp $ */ + +/* via_drv.c -- VIA unichrome driver -*- linux-c -*- + * Created: Fri Aug 12 2005 by anh...@freebsd.org + */ +/*- + * Copyright 2005 Eric Anholt + * Copyright 2007 Jared D. McNeill + * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sub license, + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * ERIC ANHOLT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Eric Anholt <anh...@freebsd.org> + * Jared D. McNeill <jmcne...@netbsd.org> + * */ +#include <sys/cdefs.h> +__KERNEL_RCSID(0, "$NetBSD: via_drv.c,v 1.3 2010/08/21 11:54:36 jmcneill Exp $"); + #include "drmP.h" +#include "drm.h" #include "via_drm.h" #include "via_drv.h" - #include "drm_pciids.h" - -static int dri_library_name(struct drm_device * dev, char * buf) -{ - return snprintf(buf, PAGE_SIZE, "unichrome\n"); -} - -static struct pci_device_id pciidlist[] = { +/* drv_PCI_IDs comes from drm_pciids.h, generated from drm_pciids.txt. */ +static drm_pci_id_list_t via_pciidlist[] = { viadrv_PCI_IDS }; - -#ifdef VIA_HAVE_FENCE -extern struct drm_fence_driver via_fence_driver; -#endif - -#ifdef VIA_HAVE_BUFFER - -/** - * If there's no thrashing. This is the preferred memory type order. - */ -static uint32_t via_mem_prios[] = {DRM_BO_MEM_PRIV0, DRM_BO_MEM_VRAM, DRM_BO_MEM_TT, DRM_BO_MEM_LOCAL}; - -/** - * If we have thrashing, most memory will be evicted to TT anyway, so we might as well - * just move the new buffer into TT from the start. - */ -static uint32_t via_busy_prios[] = {DRM_BO_MEM_TT, DRM_BO_MEM_PRIV0, DRM_BO_MEM_VRAM, DRM_BO_MEM_LOCAL}; - - -static struct drm_bo_driver via_bo_driver = { - .mem_type_prio = via_mem_prios, - .mem_busy_prio = via_busy_prios, - .num_mem_type_prio = DRM_ARRAY_SIZE(via_mem_prios), - .num_mem_busy_prio = DRM_ARRAY_SIZE(via_busy_prios), - .create_ttm_backend_entry = via_create_ttm_backend_entry, - .fence_type = via_fence_types, - .invalidate_caches = via_invalidate_caches, - .init_mem_type = via_init_mem_type, - .evict_flags = via_evict_flags, - .move = NULL, - .ttm_cache_flush = NULL, - .command_stream_barrier = NULL -}; -#endif - -static int probe(struct pci_dev *pdev, const struct pci_device_id *ent); -static struct drm_driver driver = { - .driver_features = - DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_HAVE_IRQ | - DRIVER_IRQ_SHARED, - .load = via_driver_load, - .unload = via_driver_unload, -#ifndef VIA_HAVE_CORE_MM - .context_ctor = via_init_context, -#endif - .context_dtor = via_final_context, - .get_vblank_counter = via_get_vblank_counter, - .enable_vblank = via_enable_vblank, - .disable_vblank = via_disable_vblank, - .irq_preinstall = via_driver_irq_preinstall, - .irq_postinstall = via_driver_irq_postinstall, - .irq_uninstall = via_driver_irq_uninstall, - .irq_handler = via_driver_irq_handler, - .dma_quiescent = via_driver_dma_quiescent, - .dri_library_name = dri_library_name, - .reclaim_buffers = drm_core_reclaim_buffers, - .reclaim_buffers_locked = NULL, -#ifdef VIA_HAVE_CORE_MM - .reclaim_buffers_idlelocked = via_reclaim_buffers_locked, - .lastclose = via_lastclose, -#endif - .get_map_ofs = drm_core_get_map_ofs, - .get_reg_ofs = drm_core_get_reg_ofs, - .ioctls = via_ioctls, - .fops = { - .owner = THIS_MODULE, - .open = drm_open, - .release = drm_release, - .ioctl = drm_ioctl, - .mmap = drm_mmap, - .poll = drm_poll, - .fasync = drm_fasync, - }, - .pci_driver = { - .name = DRIVER_NAME, - .id_table = pciidlist, - .probe = probe, - .remove = __devexit_p(drm_cleanup_pci), - }, -#ifdef VIA_HAVE_FENCE - .fence_driver = &via_fence_driver, -#endif -#ifdef VIA_HAVE_BUFFER - .bo_driver = &via_bo_driver, -#endif - .name = DRIVER_NAME, - .desc = DRIVER_DESC, - .date = VIA_DRM_DRIVER_DATE, - .major = VIA_DRM_DRIVER_MAJOR, - .minor = VIA_DRM_DRIVER_MINOR, - .patchlevel = VIA_DRM_DRIVER_PATCHLEVEL -}; - -static int probe(struct pci_dev *pdev, const struct pci_device_id *ent) +static void viadrm_configure(drm_device_t *dev) { - return drm_get_dev(pdev, ent, &driver); + dev->driver.buf_priv_size = 1; + dev->driver.load = via_driver_load; + dev->driver.unload = via_driver_unload; + dev->driver.context_ctor = via_init_context; + dev->driver.context_dtor = via_final_context; + dev->driver.vblank_wait = via_driver_vblank_wait; + dev->driver.irq_preinstall = via_driver_irq_preinstall; + dev->driver.irq_postinstall = via_driver_irq_postinstall; + dev->driver.irq_uninstall = via_driver_irq_uninstall; + dev->driver.irq_handler = via_driver_irq_handler; + dev->driver.dma_quiescent = via_driver_dma_quiescent; + + dev->driver.ioctls = via_ioctls; + dev->driver.max_ioctl = via_max_ioctl; + + dev->driver.name = DRIVER_NAME; + dev->driver.desc = DRIVER_DESC; + dev->driver.date = VIA_DRM_DRIVER_DATE; + dev->driver.major = VIA_DRM_DRIVER_MAJOR; + dev->driver.minor = VIA_DRM_DRIVER_MINOR; + dev->driver.patchlevel = VIA_DRM_DRIVER_PATCHLEVEL; + + dev->driver.use_agp = 1; + dev->driver.use_mtrr = 1; + dev->driver.use_irq = 1; + dev->driver.use_vbl_irq = 1; } -static int __init via_init(void) +static int +viadrm_probe(struct device *parent, struct cfdata *match, void *opaque) { - driver.num_ioctls = via_max_ioctl; - - via_init_command_verifier(); - return drm_init(&driver, pciidlist); + struct pci_attach_args *pa = opaque; + return drm_probe(pa, via_pciidlist); } -static void __exit via_exit(void) +static void +viadrm_attach(struct device *parent, struct device *self, void *opaque) { - drm_exit(&driver); -} + struct pci_attach_args *pa = opaque; + drm_device_t *dev = device_private(self); -module_init(via_init); -module_exit(via_exit); + viadrm_configure(dev); + drm_attach(self, pa, via_pciidlist); +} -MODULE_AUTHOR(DRIVER_AUTHOR); -MODULE_DESCRIPTION(DRIVER_DESC); -MODULE_LICENSE("GPL and additional rights"); +CFATTACH_DECL_NEW(viadrm, sizeof(drm_device_t), viadrm_probe, viadrm_attach, + drm_detach, drm_activate);