From patchwork Mon Feb 21 01:17:35 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Skeggs X-Patchwork-Id: 576491 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p1L3A1kg010524 for ; Mon, 21 Feb 2011 03:10:29 GMT Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C2B259EA09 for ; Sun, 20 Feb 2011 19:10:00 -0800 (PST) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-qy0-f170.google.com (mail-qy0-f170.google.com [209.85.216.170]) by gabe.freedesktop.org (Postfix) with ESMTP id 14D3D9E82D for ; Sun, 20 Feb 2011 19:09:51 -0800 (PST) Received: by qyk32 with SMTP id 32so1342498qyk.15 for ; Sun, 20 Feb 2011 19:09:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:from:to:cc:subject:date:message-id:x-mailer; bh=hYnp623SWvNZHnS41nQHs3n2TdSjyx2frwLOmWQOREk=; b=ZR6PTWP9CRmrl9yK9hzgy3GRbn0/8F10goV4QsyS1XrnQ9F1AM5bZVSef+QmxmqlP0 jNN+c1mtgqn6Cp+DqE8taVlqyBrGTgIbxWb8nOfoq109Tl8dud1tZ9q0qf4D6Wur8Bmp b1SvfiQVBSrdgtkjGgmPIlcPUFsxZ+4xCrifM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; b=i05oBIxkBn0ftbIe4DC/FC6PmF50BhtxsKiHKryTYVmYOXLaZzAReyhfjf4EkZ4sNh 2WdqYIvJe+faWsJl7K8YQvstDz4c6MCPR1GWK7za615RGN7GS75Kd9/zFHlEH+aWlFuO UzDiwEz8YRg7i2ySJq/0rirwy7l3wHaBGE4jA= Received: by 10.224.28.76 with SMTP id l12mr661180qac.142.1298257791367; Sun, 20 Feb 2011 19:09:51 -0800 (PST) Received: from nisroch.bne.redhat.com ([66.187.239.10]) by mx.google.com with ESMTPS id nb15sm3471783qcb.26.2011.02.20.19.09.48 (version=SSLv3 cipher=OTHER); Sun, 20 Feb 2011 19:09:50 -0800 (PST) From: Ben Skeggs To: dri-devel@lists.freedesktop.org Subject: [PATCH] drm/core: add ioctl to query device/driver capabilities Date: Mon, 21 Feb 2011 11:17:35 +1000 Message-Id: <1298251055-18731-1-git-send-email-skeggsb@gmail.com> X-Mailer: git-send-email 1.7.4 Cc: airlied@redhat.com, Ben Skeggs X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Mon, 21 Feb 2011 03:10:29 +0000 (UTC) diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 271835a..ad86135 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -67,6 +67,7 @@ static struct drm_ioctl_desc drm_ioctls[] = { DRM_IOCTL_DEF(DRM_IOCTL_GET_MAP, drm_getmap, 0), DRM_IOCTL_DEF(DRM_IOCTL_GET_CLIENT, drm_getclient, 0), DRM_IOCTL_DEF(DRM_IOCTL_GET_STATS, drm_getstats, 0), + DRM_IOCTL_DEF(DRM_IOCTL_GET_CAP, drm_getcap, 0), DRM_IOCTL_DEF(DRM_IOCTL_SET_VERSION, drm_setversion, DRM_MASTER), DRM_IOCTL_DEF(DRM_IOCTL_SET_UNIQUE, drm_setunique, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index 47db4df..15a244b 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -365,6 +365,19 @@ int drm_getstats(struct drm_device *dev, void *data, } /** + * Get device/driver capabilities + */ +int drm_getcap(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + struct drm_get_cap *req = data; + + req->value = 0; + if (dev->driver->get_cap) + req->value = (*dev->driver->get_cap)(dev, req->capability); + return 0; +} + +/** * Setversion ioctl. * * \param inode device inode. diff --git a/include/drm/drm.h b/include/drm/drm.h index e5f7061..7254f1a 100644 --- a/include/drm/drm.h +++ b/include/drm/drm.h @@ -608,6 +608,12 @@ struct drm_gem_open { __u64 size; }; +/** DRM_IOCTL_GET_CAP ioctl argument type */ +struct drm_get_cap { + __u64 capability; + __u64 value; +}; + #include "drm_mode.h" #define DRM_IOCTL_BASE 'd' @@ -628,6 +634,7 @@ struct drm_gem_open { #define DRM_IOCTL_GEM_CLOSE DRM_IOW (0x09, struct drm_gem_close) #define DRM_IOCTL_GEM_FLINK DRM_IOWR(0x0a, struct drm_gem_flink) #define DRM_IOCTL_GEM_OPEN DRM_IOWR(0x0b, struct drm_gem_open) +#define DRM_IOCTL_GET_CAP DRM_IOWR(0x0c, struct drm_get_cap) #define DRM_IOCTL_SET_UNIQUE DRM_IOW( 0x10, struct drm_unique) #define DRM_IOCTL_AUTH_MAGIC DRM_IOW( 0x11, struct drm_auth) diff --git a/include/drm/drmP.h b/include/drm/drmP.h index fe29aad..a3d5ce8 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h @@ -869,6 +869,13 @@ struct drm_driver { void (*debugfs_cleanup)(struct drm_minor *minor); /** + * Driver-specific routine to query capabilities of device/driver. + * + * If not present, core drm will assume a return value of 0. + */ + u64 (*get_cap)(struct drm_device *dev, u64 cap); + + /** * Driver-specific constructor for drm_gem_objects, to set up * obj->driver_private. * @@ -1264,6 +1271,8 @@ extern int drm_getclient(struct drm_device *dev, void *data, struct drm_file *file_priv); extern int drm_getstats(struct drm_device *dev, void *data, struct drm_file *file_priv); +extern int drm_getcap(struct drm_device *dev, void *data, + struct drm_file *file_priv); extern int drm_setversion(struct drm_device *dev, void *data, struct drm_file *file_priv); extern int drm_noop(struct drm_device *dev, void *data,