diff options
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/pci/drm/drmP.h | 6 | ||||
-rw-r--r-- | sys/dev/pci/drm/drm_drv.c | 65 | ||||
-rw-r--r-- | sys/dev/pci/drm/drm_ioctl.c | 98 | ||||
-rw-r--r-- | sys/dev/pci/drm/files.drm | 3 |
4 files changed, 67 insertions, 105 deletions
diff --git a/sys/dev/pci/drm/drmP.h b/sys/dev/pci/drm/drmP.h index fd3f9b05e4b..6996284f636 100644 --- a/sys/dev/pci/drm/drmP.h +++ b/sys/dev/pci/drm/drmP.h @@ -658,11 +658,6 @@ int drm_ati_pcigart_cleanup(struct drm_device *, int drm_lock(struct drm_device *, void *, struct drm_file *); int drm_unlock(struct drm_device *, void *, struct drm_file *); int drm_version(struct drm_device *, void *, struct drm_file *); -int drm_setversion(struct drm_device *, void *, struct drm_file *); - -/* Misc. IOCTL support (drm_ioctl.c) */ -int drm_irq_by_busid(struct drm_device *, void *, struct drm_file *); -int drm_getunique(struct drm_device *, void *, struct drm_file *); /* Context IOCTL support (drm_context.c) */ int drm_resctx(struct drm_device *, void *, struct drm_file *); @@ -689,6 +684,7 @@ int drm_dma(struct drm_device *, void *, struct drm_file *); /* IRQ support (drm_irq.c) */ int drm_control(struct drm_device *, void *, struct drm_file *); int drm_wait_vblank(struct drm_device *, void *, struct drm_file *); +int drm_irq_by_busid(struct drm_device *, void *, struct drm_file *); /* AGP/GART support (drm_agpsupport.c) */ int drm_agp_acquire_ioctl(struct drm_device *, void *, struct drm_file *); diff --git a/sys/dev/pci/drm/drm_drv.c b/sys/dev/pci/drm/drm_drv.c index 9b9d72bdd9f..d5d7d43185d 100644 --- a/sys/dev/pci/drm/drm_drv.c +++ b/sys/dev/pci/drm/drm_drv.c @@ -56,6 +56,9 @@ int drm_detach(struct device *, int); int drm_activate(struct device *, enum devact); int drmprint(void *, const char *); +int drm_getunique(struct drm_device *, void *, struct drm_file *); +int drm_setversion(struct drm_device *, void *, struct drm_file *); + /* * attach drm to a pci-based driver. * @@ -785,3 +788,65 @@ drmmmap(dev_t kdev, off_t offset, int prot) } /* NOTREACHED */ } + +/* + * Beginning in revision 1.1 of the DRM interface, getunique will return + * a unique in the form pci:oooo:bb:dd.f (o=domain, b=bus, d=device, f=function) + * before setunique has been called. The format for the bus-specific part of + * the unique is not defined for any other bus. + */ +int +drm_getunique(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + struct drm_unique *u = data; + + if (u->unique_len >= dev->unique_len) { + if (DRM_COPY_TO_USER(u->unique, dev->unique, dev->unique_len)) + return EFAULT; + } + u->unique_len = dev->unique_len; + + return 0; +} + +#define DRM_IF_MAJOR 1 +#define DRM_IF_MINOR 2 + +int +drm_setversion(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + struct drm_set_version ver, *sv = data; + int if_version; + + /* Save the incoming data, and set the response before continuing + * any further. + */ + ver = *sv; + sv->drm_di_major = DRM_IF_MAJOR; + sv->drm_di_minor = DRM_IF_MINOR; + sv->drm_dd_major = dev->driver->major; + sv->drm_dd_minor = dev->driver->minor; + + /* + * We no longer support interface versions less than 1.1, so error + * out if the xserver is too old. 1.1 always ties the drm to a + * certain busid, this was done on attach + */ + if (ver.drm_di_major != -1) { + if (ver.drm_di_major != DRM_IF_MAJOR || ver.drm_di_minor < 1 || + ver.drm_di_minor > DRM_IF_MINOR) { + return EINVAL; + } + if_version = DRM_IF_VERSION(ver.drm_di_major, ver.drm_dd_minor); + dev->if_version = DRM_MAX(if_version, dev->if_version); + } + + if (ver.drm_dd_major != -1) { + if (ver.drm_dd_major != dev->driver->major || + ver.drm_dd_minor < 0 || + ver.drm_dd_minor > dev->driver->minor) + return EINVAL; + } + + return 0; +} diff --git a/sys/dev/pci/drm/drm_ioctl.c b/sys/dev/pci/drm/drm_ioctl.c deleted file mode 100644 index 9cdbb612c0f..00000000000 --- a/sys/dev/pci/drm/drm_ioctl.c +++ /dev/null @@ -1,98 +0,0 @@ -/*- - * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * 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, 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 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 NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS 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. - * - * Authors: - * Rickard E. (Rik) Faith <faith@valinux.com> - * Gareth Hughes <gareth@valinux.com> - * - */ - -/** @file drm_ioctl.c - * Varios minor DRM ioctls not applicable to other files, such as versioning - * information and reporting DRM information to userland. - */ - -#include "drmP.h" - -/* - * Beginning in revision 1.1 of the DRM interface, getunique will return - * a unique in the form pci:oooo:bb:dd.f (o=domain, b=bus, d=device, f=function) - * before setunique has been called. The format for the bus-specific part of - * the unique is not defined for any other bus. - */ -int -drm_getunique(struct drm_device *dev, void *data, struct drm_file *file_priv) -{ - struct drm_unique *u = data; - - if (u->unique_len >= dev->unique_len) { - if (DRM_COPY_TO_USER(u->unique, dev->unique, dev->unique_len)) - return EFAULT; - } - u->unique_len = dev->unique_len; - - return 0; -} - -#define DRM_IF_MAJOR 1 -#define DRM_IF_MINOR 2 - -int -drm_setversion(struct drm_device *dev, void *data, struct drm_file *file_priv) -{ - struct drm_set_version ver, *sv = data; - int if_version; - - /* Save the incoming data, and set the response before continuing - * any further. - */ - ver = *sv; - sv->drm_di_major = DRM_IF_MAJOR; - sv->drm_di_minor = DRM_IF_MINOR; - sv->drm_dd_major = dev->driver->major; - sv->drm_dd_minor = dev->driver->minor; - - /* - * We no longer support interface versions less than 1.1, so error - * out if the xserver is too old. 1.1 always ties the drm to a - * certain busid, this was done on attach - */ - if (ver.drm_di_major != -1) { - if (ver.drm_di_major != DRM_IF_MAJOR || ver.drm_di_minor < 1 || - ver.drm_di_minor > DRM_IF_MINOR) { - return EINVAL; - } - if_version = DRM_IF_VERSION(ver.drm_di_major, ver.drm_dd_minor); - dev->if_version = DRM_MAX(if_version, dev->if_version); - } - - if (ver.drm_dd_major != -1) { - if (ver.drm_dd_major != dev->driver->major || - ver.drm_dd_minor < 0 || - ver.drm_dd_minor > dev->driver->minor) - return EINVAL; - } - - return 0; -} diff --git a/sys/dev/pci/drm/files.drm b/sys/dev/pci/drm/files.drm index e4da9d91bf2..5b2267feb08 100644 --- a/sys/dev/pci/drm/files.drm +++ b/sys/dev/pci/drm/files.drm @@ -1,5 +1,5 @@ # $NetBSD: files.drm,v 1.2 2007/03/28 11:29:37 jmcneill Exp $ -# $OpenBSD: files.drm,v 1.9 2009/01/29 11:44:05 oga Exp $ +# $OpenBSD: files.drm,v 1.10 2009/01/29 11:50:16 oga Exp $ # direct rendering modules define drmbase {} @@ -11,7 +11,6 @@ file dev/pci/drm/drm_bufs.c drm file dev/pci/drm/drm_context.c drm file dev/pci/drm/drm_dma.c drm file dev/pci/drm/drm_drv.c drm needs-flag -file dev/pci/drm/drm_ioctl.c drm file dev/pci/drm/drm_irq.c drm file dev/pci/drm/drm_lock.c drm file dev/pci/drm/drm_memory.c drm |