[PATCH] drm/radeon/kms: add query for crtc hw id from crtc id to get info
Alex Deucher
alexdeucher at gmail.com
Fri May 7 08:40:41 PDT 2010
On Fri, May 7, 2010 at 11:18 AM, Jerome Glisse <jglisse at redhat.com> wrote:
> Userspace need to know the hw crtc id (0, 1, 2, ...) from the drm
> crtc id. Bump the minor version so userspace can enable conditionaly
> features depend on this.
Just curious what we need this for? Couldn't the id be handled in the
drm via relocs?
Alex
>
> Signed-off-by: Jerome Glisse <jglisse at redhat.com>
> ---
> drivers/gpu/drm/radeon/radeon_drv.c | 3 ++-
> drivers/gpu/drm/radeon/radeon_kms.c | 18 ++++++++++++++++++
> include/drm/radeon_drm.h | 1 +
> 3 files changed, 21 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> index b3749d4..df96ace 100644
> --- a/drivers/gpu/drm/radeon/radeon_drv.c
> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> @@ -44,9 +44,10 @@
> * - 2.1.0 - add square tiling interface
> * - 2.2.0 - add r6xx/r7xx const buffer support
> * - 2.3.0 - add MSPOS + 3D texture + r500 VAP regs
> + * - 2.4.0 - add crtc id query
> */
> #define KMS_DRIVER_MAJOR 2
> -#define KMS_DRIVER_MINOR 3
> +#define KMS_DRIVER_MINOR 4
> #define KMS_DRIVER_PATCHLEVEL 0
> int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
> int radeon_driver_unload_kms(struct drm_device *dev);
> diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
> index d3657dc..04ad452 100644
> --- a/drivers/gpu/drm/radeon/radeon_kms.c
> +++ b/drivers/gpu/drm/radeon/radeon_kms.c
> @@ -98,11 +98,15 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
> {
> struct radeon_device *rdev = dev->dev_private;
> struct drm_radeon_info *info;
> + struct radeon_mode_info *minfo = &rdev->mode_info;
> uint32_t *value_ptr;
> uint32_t value;
> + struct drm_crtc *crtc;
> + int i, found;
>
> info = data;
> value_ptr = (uint32_t *)((unsigned long)info->value);
> + value = *value_ptr;
> switch (info->request) {
> case RADEON_INFO_DEVICE_ID:
> value = dev->pci_device;
> @@ -116,6 +120,20 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
> case RADEON_INFO_ACCEL_WORKING:
> value = rdev->accel_working;
> break;
> + case RADEON_INFO_CRTC_FROM_ID:
> + for (i = 0, found = 0; i < 6; i++) {
> + crtc = (struct drm_crtc *)minfo->crtcs[i];
> + if (crtc && crtc->base.id == value) {
> + value = i;
> + found = 1;
> + break;
> + }
> + }
> + if (!found) {
> + DRM_ERROR("unknown crtc id %d\n", value);
> + return -EINVAL;
> + }
> + break;
> default:
> DRM_DEBUG("Invalid request %d\n", info->request);
> return -EINVAL;
> diff --git a/include/drm/radeon_drm.h b/include/drm/radeon_drm.h
> index 81e614b..3ff9fc0 100644
> --- a/include/drm/radeon_drm.h
> +++ b/include/drm/radeon_drm.h
> @@ -902,6 +902,7 @@ struct drm_radeon_cs {
> #define RADEON_INFO_NUM_GB_PIPES 0x01
> #define RADEON_INFO_NUM_Z_PIPES 0x02
> #define RADEON_INFO_ACCEL_WORKING 0x03
> +#define RADEON_INFO_CRTC_FROM_ID 0x04
>
> struct drm_radeon_info {
> uint32_t request;
> --
> 1.7.0.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
More information about the dri-devel
mailing list