-/*
+/*-
* Copyright 2003 Eric Anholt
* All Rights Reserved.
*
* 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
- * PRECISION INSIGHT 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.
+ * 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"
-#ifdef __FreeBSD__
-
#include <sys/sysctl.h>
static int drm_name_info DRM_SYSCTL_HANDLER_ARGS;
int (*f) DRM_SYSCTL_HANDLER_ARGS;
} drm_sysctl_list[] = {
{"name", drm_name_info},
-#ifdef DEBUG_MEMORY
- {"mem", drm_mem_info},
-#endif
{"vm", drm_vm_info},
{"clients", drm_clients_info},
{"bufs", drm_bufs_info},
char name[2];
};
-int drm_sysctl_init(drm_device_t *dev)
+int drm_sysctl_init(struct drm_device *dev)
{
struct drm_sysctl_info *info;
struct sysctl_oid *oid;
struct sysctl_oid *top, *drioid;
int i;
- info = drm_alloc(sizeof *info, DRM_MEM_DRIVER);
+ info = malloc(sizeof *info, M_DRM, M_WAITOK | M_ZERO);
if ( !info )
return 1;
- bzero(info, sizeof *info);
dev->sysctl = info;
/* Add the sysctl node for DRI if it doesn't already exist */
return 1;
for (i = 0; i < DRM_SYSCTL_ENTRIES; i++) {
- oid = sysctl_add_oid( &info->ctx,
+ oid = SYSCTL_ADD_OID(&info->ctx,
SYSCTL_CHILDREN(top),
OID_AUTO,
drm_sysctl_list[i].name,
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");
+
return 0;
}
-int drm_sysctl_cleanup(drm_device_t *dev)
+int drm_sysctl_cleanup(struct drm_device *dev)
{
int error;
error = sysctl_ctx_free( &dev->sysctl->ctx );
- drm_free(dev->sysctl, sizeof *dev->sysctl, DRM_MEM_DRIVER);
+ free(dev->sysctl, M_DRM);
dev->sysctl = NULL;
return error;
static int drm_name_info DRM_SYSCTL_HANDLER_ARGS
{
- drm_device_t *dev = arg1;
+ struct drm_device *dev = arg1;
char buf[128];
int retcode;
int hasunique = 0;
- DRM_SYSCTL_PRINT("%s 0x%x", dev->driver_name, dev2udev(dev->devnode));
+ DRM_SYSCTL_PRINT("%s 0x%x", dev->driver.name, dev2udev(dev->devnode));
DRM_LOCK();
if (dev->unique) {
static int drm_vm_info DRM_SYSCTL_HANDLER_ARGS
{
- drm_device_t *dev = arg1;
+ struct drm_device *dev = arg1;
drm_local_map_t *map, *tempmaps;
- drm_map_list_entry_t *listentry;
const char *types[] = { "FB", "REG", "SHM", "AGP", "SG" };
const char *type, *yesno;
int i, mapcount;
DRM_LOCK();
mapcount = 0;
- TAILQ_FOREACH(listentry, dev->maplist, link)
+ TAILQ_FOREACH(map, &dev->maplist, link)
mapcount++;
- tempmaps = drm_alloc(sizeof(drm_local_map_t) * mapcount, DRM_MEM_MAPS);
+ tempmaps = malloc(sizeof(drm_local_map_t) * mapcount, M_DRM, M_NOWAIT);
if (tempmaps == NULL) {
DRM_UNLOCK();
return ENOMEM;
}
i = 0;
- TAILQ_FOREACH(listentry, dev->maplist, link)
- tempmaps[i++] = *listentry->map;
+ TAILQ_FOREACH(map, &dev->maplist, link)
+ tempmaps[i++] = *map;
DRM_UNLOCK();
SYSCTL_OUT(req, "", 1);
done:
- drm_free(tempmaps, sizeof(drm_local_map_t) * mapcount, DRM_MEM_MAPS);
+ free(tempmaps, M_DRM);
return retcode;
}
static int drm_bufs_info DRM_SYSCTL_HANDLER_ARGS
{
- drm_device_t *dev = arg1;
+ struct drm_device *dev = arg1;
drm_device_dma_t *dma = dev->dma;
drm_device_dma_t tempdma;
int *templists;
}
DRM_SPINLOCK(&dev->dma_lock);
tempdma = *dma;
- templists = drm_alloc(sizeof(int) * dma->buf_count, DRM_MEM_BUFS);
+ 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;
SYSCTL_OUT(req, "", 1);
done:
- drm_free(templists, sizeof(int) * dma->buf_count, DRM_MEM_BUFS);
+ free(templists, M_DRM);
return retcode;
}
static int drm_clients_info DRM_SYSCTL_HANDLER_ARGS
{
- drm_device_t *dev = arg1;
+ struct drm_device *dev = arg1;
drm_file_t *priv, *tempprivs;
char buf[128];
int retcode;
TAILQ_FOREACH(priv, &dev->files, link)
privcount++;
- tempprivs = drm_alloc(sizeof(drm_file_t) * privcount, DRM_MEM_FILES);
+ tempprivs = malloc(sizeof(drm_file_t) * privcount, M_DRM, M_NOWAIT);
if (tempprivs == NULL) {
DRM_UNLOCK();
return ENOMEM;
SYSCTL_OUT(req, "", 1);
done:
- drm_free(tempprivs, sizeof(drm_file_t) * privcount, DRM_MEM_FILES);
+ free(tempprivs, M_DRM);
return retcode;
}
-
-#elif defined(__NetBSD__)
-/* stub it out for now, sysctl is only for debugging */
-int drm_sysctl_init(drm_device_t *dev)
-{
- return 0;
-}
-
-int drm_sysctl_cleanup(drm_device_t *dev)
-{
- return 0;
-}
-#endif