Add new drm_intel_get_pipe_from_crtc_id function.
This wraps the new DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID ioctl, allowing applications to discover the pipe number corresponding to a given CRTC ID. This is necessary for doing pipe-specific operations such as waiting for vblank on a given CRTC.main
parent
8b8e20e0f9
commit
afd245dd7f
|
@ -120,6 +120,8 @@ int drm_intel_gem_bo_map_gtt(drm_intel_bo *bo);
|
||||||
int drm_intel_gem_bo_unmap_gtt(drm_intel_bo *bo);
|
int drm_intel_gem_bo_unmap_gtt(drm_intel_bo *bo);
|
||||||
void drm_intel_gem_bo_start_gtt_access(drm_intel_bo *bo, int write_enable);
|
void drm_intel_gem_bo_start_gtt_access(drm_intel_bo *bo, int write_enable);
|
||||||
|
|
||||||
|
int drm_intel_get_pipe_from_crtc_id(drm_intel_bufmgr *bufmgr, int crtc_id);
|
||||||
|
|
||||||
/* drm_intel_bufmgr_fake.c */
|
/* drm_intel_bufmgr_fake.c */
|
||||||
drm_intel_bufmgr *drm_intel_bufmgr_fake_init(int fd,
|
drm_intel_bufmgr *drm_intel_bufmgr_fake_init(int fd,
|
||||||
unsigned long low_offset,
|
unsigned long low_offset,
|
||||||
|
|
|
@ -815,6 +815,29 @@ drm_intel_gem_bo_subdata (drm_intel_bo *bo, unsigned long offset,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
drm_intel_get_pipe_from_crtc_id (drm_intel_bufmgr *bufmgr, int crtc_id)
|
||||||
|
{
|
||||||
|
drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bufmgr;
|
||||||
|
struct drm_i915_get_pipe_from_crtc_id get_pipe_from_crtc_id;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
get_pipe_from_crtc_id.crtc_id = crtc_id;
|
||||||
|
ret = ioctl (bufmgr_gem->fd, DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID,
|
||||||
|
&get_pipe_from_crtc_id);
|
||||||
|
if (ret != 0) {
|
||||||
|
/* We're intentionally silent here so that there is no
|
||||||
|
* complaint when simply running with an older kernel that
|
||||||
|
* doesn't have the GET_PIPE_FROM_CRTC_ID ioctly. In that
|
||||||
|
* case, we just punt and try to sync on pipe 0, which is
|
||||||
|
* hopefully the right pipe in some cases at least.
|
||||||
|
*/
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return get_pipe_from_crtc_id.pipe;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
drm_intel_gem_bo_get_subdata (drm_intel_bo *bo, unsigned long offset,
|
drm_intel_gem_bo_get_subdata (drm_intel_bo *bo, unsigned long offset,
|
||||||
unsigned long size, void *data)
|
unsigned long size, void *data)
|
||||||
|
|
|
@ -205,6 +205,7 @@ typedef struct drm_i915_sarea {
|
||||||
#define DRM_I915_GEM_GET_TILING 0x22
|
#define DRM_I915_GEM_GET_TILING 0x22
|
||||||
#define DRM_I915_GEM_GET_APERTURE 0x23
|
#define DRM_I915_GEM_GET_APERTURE 0x23
|
||||||
#define DRM_I915_GEM_MMAP_GTT 0x24
|
#define DRM_I915_GEM_MMAP_GTT 0x24
|
||||||
|
#define DRM_I915_GET_PIPE_FROM_CRTC_ID 0x25
|
||||||
|
|
||||||
#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
|
#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
|
||||||
#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
|
#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
|
||||||
|
@ -242,6 +243,7 @@ typedef struct drm_i915_sarea {
|
||||||
#define DRM_IOCTL_I915_GEM_SET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_SET_TILING, struct drm_i915_gem_set_tiling)
|
#define DRM_IOCTL_I915_GEM_SET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_SET_TILING, struct drm_i915_gem_set_tiling)
|
||||||
#define DRM_IOCTL_I915_GEM_GET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_TILING, struct drm_i915_gem_get_tiling)
|
#define DRM_IOCTL_I915_GEM_GET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_TILING, struct drm_i915_gem_get_tiling)
|
||||||
#define DRM_IOCTL_I915_GEM_GET_APERTURE DRM_IOR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_APERTURE, struct drm_i915_gem_get_aperture)
|
#define DRM_IOCTL_I915_GEM_GET_APERTURE DRM_IOR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_APERTURE, struct drm_i915_gem_get_aperture)
|
||||||
|
#define DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_PIPE_FROM_CRTC_ID, struct drm_i915_get_pipe_from_crtc_id)
|
||||||
|
|
||||||
/* Asynchronous page flipping:
|
/* Asynchronous page flipping:
|
||||||
*/
|
*/
|
||||||
|
@ -769,4 +771,12 @@ struct drm_i915_gem_get_aperture {
|
||||||
uint64_t aper_available_size;
|
uint64_t aper_available_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct drm_i915_get_pipe_from_crtc_id {
|
||||||
|
/** ID of CRTC being requested **/
|
||||||
|
uint32_t crtc_id;
|
||||||
|
|
||||||
|
/** pipe of requested CRTC **/
|
||||||
|
uint32_t pipe;
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* _I915_DRM_H_ */
|
#endif /* _I915_DRM_H_ */
|
||||||
|
|
Loading…
Reference in New Issue