drm/radeon/kms: add query for crtc hw id from crtc id to get info V2
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. V2 use num_crtc and avoid DRM_ERROR Signed-off-by: Jerome Glisse <jglisse@redhat.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Родитель
61dd98fad5
Коммит
bc35afdb18
|
@ -44,9 +44,10 @@
|
||||||
* - 2.1.0 - add square tiling interface
|
* - 2.1.0 - add square tiling interface
|
||||||
* - 2.2.0 - add r6xx/r7xx const buffer support
|
* - 2.2.0 - add r6xx/r7xx const buffer support
|
||||||
* - 2.3.0 - add MSPOS + 3D texture + r500 VAP regs
|
* - 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_MAJOR 2
|
||||||
#define KMS_DRIVER_MINOR 3
|
#define KMS_DRIVER_MINOR 4
|
||||||
#define KMS_DRIVER_PATCHLEVEL 0
|
#define KMS_DRIVER_PATCHLEVEL 0
|
||||||
int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
|
int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
|
||||||
int radeon_driver_unload_kms(struct drm_device *dev);
|
int radeon_driver_unload_kms(struct drm_device *dev);
|
||||||
|
|
|
@ -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 radeon_device *rdev = dev->dev_private;
|
||||||
struct drm_radeon_info *info;
|
struct drm_radeon_info *info;
|
||||||
|
struct radeon_mode_info *minfo = &rdev->mode_info;
|
||||||
uint32_t *value_ptr;
|
uint32_t *value_ptr;
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
|
struct drm_crtc *crtc;
|
||||||
|
int i, found;
|
||||||
|
|
||||||
info = data;
|
info = data;
|
||||||
value_ptr = (uint32_t *)((unsigned long)info->value);
|
value_ptr = (uint32_t *)((unsigned long)info->value);
|
||||||
|
value = *value_ptr;
|
||||||
switch (info->request) {
|
switch (info->request) {
|
||||||
case RADEON_INFO_DEVICE_ID:
|
case RADEON_INFO_DEVICE_ID:
|
||||||
value = dev->pci_device;
|
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:
|
case RADEON_INFO_ACCEL_WORKING:
|
||||||
value = rdev->accel_working;
|
value = rdev->accel_working;
|
||||||
break;
|
break;
|
||||||
|
case RADEON_INFO_CRTC_FROM_ID:
|
||||||
|
for (i = 0, found = 0; i < rdev->num_crtc; i++) {
|
||||||
|
crtc = (struct drm_crtc *)minfo->crtcs[i];
|
||||||
|
if (crtc && crtc->base.id == value) {
|
||||||
|
value = i;
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
DRM_DEBUG("unknown crtc id %d\n", value);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
DRM_DEBUG("Invalid request %d\n", info->request);
|
DRM_DEBUG("Invalid request %d\n", info->request);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
@ -902,6 +902,7 @@ struct drm_radeon_cs {
|
||||||
#define RADEON_INFO_NUM_GB_PIPES 0x01
|
#define RADEON_INFO_NUM_GB_PIPES 0x01
|
||||||
#define RADEON_INFO_NUM_Z_PIPES 0x02
|
#define RADEON_INFO_NUM_Z_PIPES 0x02
|
||||||
#define RADEON_INFO_ACCEL_WORKING 0x03
|
#define RADEON_INFO_ACCEL_WORKING 0x03
|
||||||
|
#define RADEON_INFO_CRTC_FROM_ID 0x04
|
||||||
|
|
||||||
struct drm_radeon_info {
|
struct drm_radeon_info {
|
||||||
uint32_t request;
|
uint32_t request;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче