Re: [PATCH] drm/radeon/kms: add query for crtc hw id from crtc id to get info

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, May 8, 2010 at 1:18 AM, Jerome Glisse <jglisse@xxxxxxxxxx> 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.
>
> Signed-off-by: Jerome Glisse <jglisse@xxxxxxxxxx>
> ---
>  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);

Don't drm error or hardcode 6 here.

we have rdev->num_crtc and DRM erroring from a path triggerable
directly from a user doing something bad is generally a bad idea.

Dave.
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel


[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux