summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/dev/pci/drm/drmP.h59
-rw-r--r--sys/dev/pci/drm/drm_drv.c1
-rw-r--r--sys/dev/pci/drm/drm_sysctl.c430
-rw-r--r--sys/dev/pci/drm/files.drm3
4 files changed, 3 insertions, 490 deletions
diff --git a/sys/dev/pci/drm/drmP.h b/sys/dev/pci/drm/drmP.h
index 9186a79698f..5d88c44af37 100644
--- a/sys/dev/pci/drm/drmP.h
+++ b/sys/dev/pci/drm/drmP.h
@@ -46,31 +46,17 @@ typedef struct drm_file drm_file_t;
#include <sys/systm.h>
#include <sys/conf.h>
#include <sys/stat.h>
-#if __FreeBSD_version >= 700000
-#include <sys/priv.h>
-#endif
#include <sys/proc.h>
+#include <sys/resource.h>
+#include <sys/resourcevar.h>
#include <sys/lock.h>
#include <sys/fcntl.h>
#include <sys/uio.h>
#include <sys/filio.h>
-#include <sys/sysctl.h>
-#ifdef __FreeBSD__
-#include <sys/bus.h>
-#include <sys/module.h>
-#include <sys/taskqueue.h>
-#include <vm/vm.h>
-#include <vm/pmap.h>
-#include <vm/vm_extern.h>
-#include <vm/vm_map.h>
-#include <vm/vm_param.h>
-#include <machine/resource.h>
-#endif
#include <sys/signalvar.h>
#include <sys/poll.h>
#include <sys/tree.h>
#include <machine/param.h>
-#include <machine/pmap.h>
#include <machine/bus.h>
#include <machine/param.h>
#include <machine/bus.h>
@@ -79,37 +65,6 @@ typedef struct drm_file drm_file_t;
#endif
#include <sys/endian.h>
#include <sys/mman.h>
-#if defined(__FreeBSD__)
-#include <sys/rman.h>
-#include <dev/pci/agpvar.h>
-#include <sys/memrange.h>
-#include <sys/agpio.h>
-#if __FreeBSD_version >= 500000
-#include <sys/mutex.h>
-#include <sys/selinfo.h>
-#else /* __FreeBSD_version >= 500000 */
-#include <dev/pci/pcivar.h>
-#include <sys/select.h>
-#endif /* __FreeBSD_version < 500000 */
-#elif defined(__NetBSD__)
-#ifndef DRM_NO_MTRR
-#include <machine/mtrr.h>
-#endif
-#include <sys/vnode.h>
-#include <sys/select.h>
-#include <sys/device.h>
-#include <sys/resourcevar.h>
-#include <sys/agpio.h>
-#include <sys/ttycom.h>
-#include <sys/mman.h>
-#include <sys/kauth.h>
-#include <sys/types.h>
-#include <sys/file.h>
-#include <uvm/uvm.h>
-#include <dev/pci/pcireg.h>
-#include <dev/pci/pcivar.h>
-#include <dev/pci/agpvar.h>
-#elif defined(__OpenBSD__)
#include <sys/types.h>
#include <sys/conf.h>
#include <sys/stdint.h>
@@ -124,7 +79,6 @@ typedef struct drm_file drm_file_t;
#include <dev/pci/agpvar.h>
#include <dev/pci/vga_pcivar.h>
#include <dev/pci/pcivar.h>
-#endif
#include "drm.h"
#include "drm_linux_list.h"
@@ -966,9 +920,6 @@ struct drm_device {
pid_t buf_pgid;
#endif
- /* Sysctl support */
- struct drm_sysctl_info *sysctl;
-
drm_agp_head_t *agp;
drm_sg_mem_t *sg; /* Scatter gather memory */
atomic_t *ctx_bitmap;
@@ -1117,12 +1068,6 @@ int drm_agp_unbind(drm_device_t *dev, drm_agp_binding_t *request);
void drm_sg_cleanup(drm_sg_mem_t *entry);
int drm_sg_alloc(drm_device_t * dev, drm_scatter_gather_t * request);
-#if defined(__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__)
-/* sysctl support (drm_sysctl.h) */
-extern int drm_sysctl_init(drm_device_t *dev);
-extern int drm_sysctl_cleanup(drm_device_t *dev);
-#endif /* __FreeBSD__ */
-
/* ATI PCIGART support (ati_pcigart.c) */
int drm_ati_pcigart_init(drm_device_t *, struct drm_ati_pcigart_info *);
int drm_ati_pcigart_cleanup(drm_device_t *, struct drm_ati_pcigart_info *);
diff --git a/sys/dev/pci/drm/drm_drv.c b/sys/dev/pci/drm/drm_drv.c
index e5d64077e56..3f21301559a 100644
--- a/sys/dev/pci/drm/drm_drv.c
+++ b/sys/dev/pci/drm/drm_drv.c
@@ -414,7 +414,6 @@ drm_load(drm_device_t *dev)
return 0;
error:
- drm_sysctl_cleanup(dev);
DRM_LOCK();
drm_lastclose(dev);
DRM_UNLOCK();
diff --git a/sys/dev/pci/drm/drm_sysctl.c b/sys/dev/pci/drm/drm_sysctl.c
deleted file mode 100644
index 43a97dfdd07..00000000000
--- a/sys/dev/pci/drm/drm_sysctl.c
+++ /dev/null
@@ -1,430 +0,0 @@
-/*-
- * Copyright 2003 Eric Anholt
- * 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
- * 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.
- */
-
-/** @file drm_sysctl.c
- * Implementation of various sysctls for controlling DRM behavior and reporting
- * debug information.
- */
-
-#include "drmP.h"
-#include "drm.h"
-
-#include <sys/sysctl.h>
-
-static int drm_name_info DRM_SYSCTL_HANDLER_ARGS;
-static int drm_vm_info DRM_SYSCTL_HANDLER_ARGS;
-static int drm_clients_info DRM_SYSCTL_HANDLER_ARGS;
-static int drm_bufs_info DRM_SYSCTL_HANDLER_ARGS;
-
-struct drm_sysctl_list {
- const char *name;
- int (*f) DRM_SYSCTL_HANDLER_ARGS;
-} drm_sysctl_list[] = {
- {"name", drm_name_info},
- {"vm", drm_vm_info},
- {"clients", drm_clients_info},
- {"bufs", drm_bufs_info},
-};
-#define DRM_SYSCTL_ENTRIES (sizeof(drm_sysctl_list)/sizeof(drm_sysctl_list[0]))
-
-struct drm_sysctl_info {
-#ifdef __FreeBSD__
- struct sysctl_ctx_list ctx;
-#elif defined __NetBSD__
- const struct sysctlnode *dri, *dri_card, *dri_debug;
- const struct sysctlnode *dri_rest[DRM_SYSCTL_ENTRIES];
-#endif
- char name[2];
-};
-
-int
-drm_sysctl_init(drm_device_t *dev)
-{
-#ifndef __OpenBSD__
- struct drm_sysctl_info *info;
-#ifdef __FreeBSD__
- struct sysctl_oid *oid;
- struct sysctl_oid *top, *drioid;
-#endif
- int i;
-
- info = malloc(sizeof *info, M_DRM, M_WAITOK | M_ZERO);
- if ( !info )
- return 1;
- dev->sysctl = info;
-
-#ifdef __FreeBSD__
- /* Add the sysctl node for DRI if it doesn't already exist */
- drioid = SYSCTL_ADD_NODE( &info->ctx, &sysctl__hw_children, OID_AUTO, "dri", CTLFLAG_RW, NULL, "DRI Graphics");
- if (!drioid)
- return 1;
-
- /* Find the next free slot under hw.dri */
- i = 0;
- SLIST_FOREACH(oid, SYSCTL_CHILDREN(drioid), oid_link) {
- if (i <= oid->oid_arg2)
- i = oid->oid_arg2 + 1;
- }
- if (i>9)
- return 1;
-
- /* Add the hw.dri.x for our device */
- info->name[0] = '0' + i;
- info->name[1] = 0;
- top = SYSCTL_ADD_NODE( &info->ctx, SYSCTL_CHILDREN(drioid), OID_AUTO, info->name, CTLFLAG_RW, NULL, NULL);
- if (!top)
- return 1;
-
- for (i = 0; i < DRM_SYSCTL_ENTRIES; i++) {
- oid = SYSCTL_ADD_OID(&info->ctx,
- SYSCTL_CHILDREN(top),
- OID_AUTO,
- drm_sysctl_list[i].name,
- CTLTYPE_INT | CTLFLAG_RD,
- dev,
- 0,
- drm_sysctl_list[i].f,
- "A",
- NULL);
- if (!oid)
- return 1;
- }
- SYSCTL_ADD_INT(&info->ctx, SYSCTL_CHILDREN(top), OID_AUTO, "debug",
- CTLFLAG_RW, &drm_debug_flag, sizeof(drm_debug_flag),
- "Enable debugging output");
-#elif defined(__NetBSD__)
- sysctl_createv(NULL, 0, NULL, &info->dri,
- CTLFLAG_READWRITE, CTLTYPE_NODE,
- "dri", SYSCTL_DESCR("DRI Graphics"), NULL, 0, NULL, 0,
- CTL_HW, CTL_CREATE);
- snprintf(info->name, 7, "card%d", dev->unit);
- sysctl_createv(NULL, 0, NULL, &info->dri_card,
- CTLFLAG_READWRITE, CTLTYPE_NODE,
- info->name, NULL, NULL, 0, NULL, 0,
- CTL_HW, info->dri->sysctl_num, CTL_CREATE);
- for (i = 0; i < DRM_SYSCTL_ENTRIES; i++)
- sysctl_createv(NULL, 0, NULL, &(info->dri_rest[i]),
- CTLFLAG_READONLY, CTLTYPE_STRING,
- drm_sysctl_list[i].name, NULL,
- drm_sysctl_list[i].f, 0, dev,
- sizeof(drm_device_t*),
- CTL_HW,
- info->dri->sysctl_num,
- info->dri_card->sysctl_num, CTL_CREATE);
- sysctl_createv(NULL, 0, NULL, &info->dri_debug,
- CTLFLAG_READWRITE, CTLTYPE_INT,
- "debug", SYSCTL_DESCR("Enable debugging output"),
- NULL, 0,
- &drm_debug_flag, sizeof(drm_debug_flag),
- CTL_HW, info->dri->sysctl_num, CTL_CREATE);
-#endif
-#endif /* !__OpenBSD__ */
-
- return 0;
-}
-
-int
-drm_sysctl_cleanup(drm_device_t *dev)
-{
- int error=0;
-#ifdef __FreeBSD__
- error = sysctl_ctx_free( &dev->sysctl->ctx );
-#elif defined(__NetBSD__)
- int i;
-
- sysctl_destroyv(NULL, CTL_HW, dev->sysctl->dri->sysctl_num,
- dev->sysctl->dri_debug->sysctl_num,
- CTL_DESTROY);
- for (i = 0; i < DRM_SYSCTL_ENTRIES; i++)
- sysctl_destroyv(NULL, CTL_HW, dev->sysctl->dri->sysctl_num,
- dev->sysctl->dri_card->sysctl_num,
- dev->sysctl->dri_rest[i]->sysctl_num,
- CTL_DESTROY);
- sysctl_destroyv(NULL, CTL_HW, dev->sysctl->dri->sysctl_num,
- dev->sysctl->dri_card->sysctl_num,
- CTL_DESTROY);
- sysctl_destroyv(NULL, CTL_HW, dev->sysctl->dri->sysctl_num, CTL_DESTROY);
-#endif
-
- if(dev->sysctl)
- free(dev->sysctl, M_DRM);
- dev->sysctl = NULL;
-
- return error;
-}
-
-#ifdef __NetBSD__
-#define SYSCTL_OUT(x, y, z) \
- (len+=z,(len<*oldlenp)?(strcat((char*)oldp, y),0):EOVERFLOW)
-#endif
-
-#define DRM_SYSCTL_PRINT(fmt, arg...) \
-do { \
- snprintf(buf, sizeof(buf), fmt, ##arg); \
- retcode = SYSCTL_OUT(req, buf, strlen(buf)); \
- if (retcode) \
- goto done; \
-} while (0)
-
-static int
-drm_name_info DRM_SYSCTL_HANDLER_ARGS
-{
-#ifndef __OpenBSD__
-#ifdef __FreeBSD__
- drm_device_t *dev = arg1;
-#elif defined(__NetBSD__)
- int len = 0;
- drm_device_t *dev = rnode->sysctl_data;
-#endif
- char buf[128];
- int retcode;
- int hasunique = 0;
-
-#ifdef __NetBSD__
- if(oldp == NULL) return EINVAL;
- *((char*)oldp) = '\0';
-#endif
-
-#ifdef __FreeBSD__
- DRM_SYSCTL_PRINT("%s 0x%x", dev->driver.name, dev2udev(dev->devnode));
-#elif defined(__NetBSD__)
- DRM_SYSCTL_PRINT("%s", dev->driver.name);
-#endif
-
- DRM_LOCK();
- if (dev->unique) {
- snprintf(buf, sizeof(buf), " %s", dev->unique);
- hasunique = 1;
- }
- DRM_UNLOCK();
-
- if (hasunique)
- SYSCTL_OUT(req, buf, strlen(buf));
-
- SYSCTL_OUT(req, "", 1);
-
-done:
- return retcode;
-#endif /* !__OpenBSD__ */
- return 0;
-}
-
-static int
-drm_vm_info DRM_SYSCTL_HANDLER_ARGS
-{
-#ifndef __OpenBSD__
-#ifdef __FreeBSD__
- drm_device_t *dev = arg1;
-#elif defined(__NetBSD__)
- int len = 0;
- drm_device_t *dev = rnode->sysctl_data;
-#endif
- drm_local_map_t *map, *tempmaps;
- const char *types[] = { "FB", "REG", "SHM", "AGP", "SG" };
- const char *type, *yesno;
- int i, mapcount;
- char buf[128];
- int retcode;
-
-#ifdef __NetBSD__
- if(oldp == NULL) return EINVAL;
- *((char*)oldp) = '\0';
-#endif
-
- /* We can't hold the lock while doing SYSCTL_OUTs, so allocate a
- * temporary copy of all the map entries and then SYSCTL_OUT that.
- */
- DRM_LOCK();
-
- mapcount = 0;
- TAILQ_FOREACH(map, &dev->maplist, link)
- mapcount++;
-
- tempmaps = malloc(sizeof(drm_local_map_t) * mapcount, M_DRM, M_NOWAIT);
- if (tempmaps == NULL) {
- DRM_UNLOCK();
- return ENOMEM;
- }
-
- i = 0;
- TAILQ_FOREACH(map, &dev->maplist, link)
- tempmaps[i++] = *map;
-
- DRM_UNLOCK();
-
- DRM_SYSCTL_PRINT("\nslot offset size type flags "
- "address mtrr\n");
-
- for (i = 0; i < mapcount; i++) {
- map = &tempmaps[i];
-
- if (map->type < 0 || map->type > 4)
- type = "??";
- else
- type = types[map->type];
-
- if (!map->mtrr)
- yesno = "no";
- else
- yesno = "yes";
-
- DRM_SYSCTL_PRINT(
- "%4d 0x%08lx 0x%08lx %4.4s 0x%02x 0x%08lx %s\n", i,
- map->offset, map->size, type, map->flags,
- (unsigned long)map->handle, yesno);
- }
- SYSCTL_OUT(req, "", 1);
-
-done:
- free(tempmaps, M_DRM);
- return retcode;
-#endif
- return 0;
-}
-
-static int
-drm_bufs_info DRM_SYSCTL_HANDLER_ARGS
-{
-#ifndef __OpenBSD__
-#ifdef __FreeBSD__
- drm_device_t *dev = arg1;
-#elif defined(__NetBSD__)
- int len = 0;
- drm_device_t *dev = rnode->sysctl_data;
-#endif
- drm_device_dma_t *dma = dev->dma;
- drm_device_dma_t tempdma;
- int *templists;
- int i;
- char buf[128];
- int retcode;
-
-#ifdef __NetBSD__
- if(oldp == NULL) return EINVAL;
- *((char*)oldp) = '\0';
-#endif
-
- /* We can't hold the locks around DRM_SYSCTL_PRINT, so make a temporary
- * copy of the whole structure and the relevant data from buflist.
- */
- DRM_LOCK();
- if (dma == NULL) {
- DRM_UNLOCK();
- return 0;
- }
- DRM_SPINLOCK(&dev->dma_lock);
- tempdma = *dma;
- templists = malloc(sizeof(int) * dma->buf_count, M_DRM, M_NOWAIT);
- for (i = 0; i < dma->buf_count; i++)
- templists[i] = dma->buflist[i]->list;
- dma = &tempdma;
- DRM_SPINUNLOCK(&dev->dma_lock);
- DRM_UNLOCK();
-
- DRM_SYSCTL_PRINT("\n o size count free segs pages kB\n");
- for (i = 0; i <= DRM_MAX_ORDER; i++) {
- if (dma->bufs[i].buf_count)
- DRM_SYSCTL_PRINT("%2d %8d %5d %5d %5d %5d %5d\n",
- i,
- dma->bufs[i].buf_size,
- dma->bufs[i].buf_count,
- atomic_read(&dma->bufs[i]
- .freelist.count),
- dma->bufs[i].seg_count,
- dma->bufs[i].seg_count
- *(1 << dma->bufs[i].page_order),
- (dma->bufs[i].seg_count
- * (1 << dma->bufs[i].page_order))
- * PAGE_SIZE / 1024);
- }
- DRM_SYSCTL_PRINT("\n");
- for (i = 0; i < dma->buf_count; i++) {
- if (i && !(i%32)) DRM_SYSCTL_PRINT("\n");
- DRM_SYSCTL_PRINT(" %d", templists[i]);
- }
- DRM_SYSCTL_PRINT("\n");
-
- SYSCTL_OUT(req, "", 1);
-done:
- free(templists, M_DRM);
- return retcode;
-#endif
-return 0;
-}
-
-static int
-drm_clients_info DRM_SYSCTL_HANDLER_ARGS
-{
-#ifndef __OpenBSD__
-#ifdef __FreeBSD__
- drm_device_t *dev = arg1;
-#elif defined(__NetBSD__)
- int len = 0;
- drm_device_t *dev = rnode->sysctl_data;
-#endif
- drm_file_t *priv, *tempprivs;
- char buf[128];
- int retcode;
- int privcount, i;
-
-#ifdef __NetBSD__
- if(oldp == NULL) return EINVAL;
- *((char*)oldp) = '\0';
-#endif
-
- DRM_LOCK();
-
- privcount = 0;
- TAILQ_FOREACH(priv, &dev->files, link)
- privcount++;
-
- tempprivs = malloc(sizeof(drm_file_t) * privcount, M_DRM, M_NOWAIT);
- if (tempprivs == NULL) {
- DRM_UNLOCK();
- return ENOMEM;
- }
- i = 0;
- TAILQ_FOREACH(priv, &dev->files, link)
- tempprivs[i++] = *priv;
-
- DRM_UNLOCK();
-
- DRM_SYSCTL_PRINT("\na dev pid uid magic ioctls\n");
- for (i = 0; i < privcount; i++) {
- priv = &tempprivs[i];
- DRM_SYSCTL_PRINT("%c %3d %5d %5d %10u %10lu\n",
- priv->authenticated ? 'y' : 'n',
- priv->minor,
- priv->pid,
- priv->uid,
- priv->magic,
- priv->ioctl_count);
- }
-
- SYSCTL_OUT(req, "", 1);
-done:
- free(tempprivs, M_DRM);
- return retcode;
-#endif
- return 0;
-}
diff --git a/sys/dev/pci/drm/files.drm b/sys/dev/pci/drm/files.drm
index 1032f492cef..087d996ef04 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.2 2008/06/12 19:14:53 oga Exp $
+# $OpenBSD: files.drm,v 1.3 2008/06/26 17:01:03 oga Exp $
# direct rendering modules
define drmbase
@@ -18,7 +18,6 @@ file dev/pci/drm/drm_memory.c drmbase
file dev/pci/drm/drm_memrange.c drmbase
file dev/pci/drm/drm_pci.c drmbase
file dev/pci/drm/drm_scatter.c drmbase
-file dev/pci/drm/drm_sysctl.c drmbase
file dev/pci/drm/drm_vm.c drmbase
device inteldrm: drmbase