mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2025-12-29 12:40:15 +01:00
radeon: add support for busy/domain check interface.
airlied: modified the interface to drop busy return value, just return it normally, also fixed int->uint32_t for domain Signed-off-by: Pauli Nieminen <suokkos@gmail.com>
This commit is contained in:
parent
cbb3ae3dab
commit
caad8d8555
3 changed files with 31 additions and 1 deletions
|
|
@ -73,6 +73,7 @@ struct radeon_bo_funcs {
|
|||
uint32_t pitch);
|
||||
int (*bo_get_tiling)(struct radeon_bo *bo, uint32_t *tiling_flags,
|
||||
uint32_t *pitch);
|
||||
int (*bo_is_busy)(struct radeon_bo *bo, uint32_t *domain);
|
||||
};
|
||||
|
||||
struct radeon_bo_manager {
|
||||
|
|
@ -166,6 +167,15 @@ static inline int _radeon_bo_wait(struct radeon_bo *bo,
|
|||
return bo->bom->funcs->bo_wait(bo);
|
||||
}
|
||||
|
||||
static inline int _radeon_bo_is_busy(struct radeon_bo *bo,
|
||||
uint32_t *domain,
|
||||
const char *file,
|
||||
const char *func,
|
||||
int line)
|
||||
{
|
||||
return bo->bom->funcs->bo_is_busy(bo, domain);
|
||||
}
|
||||
|
||||
static inline int radeon_bo_set_tiling(struct radeon_bo *bo,
|
||||
uint32_t tiling_flags, uint32_t pitch)
|
||||
{
|
||||
|
|
@ -199,5 +209,7 @@ static inline int radeon_bo_is_static(struct radeon_bo *bo)
|
|||
_radeon_bo_debug(bo, opcode, __FILE__, __FUNCTION__, __LINE__)
|
||||
#define radeon_bo_wait(bo) \
|
||||
_radeon_bo_wait(bo, __FILE__, __func__, __LINE__)
|
||||
#define radeon_bo_is_busy(bo, domain) \
|
||||
_radeon_bo_is_busy(bo, domain, __FILE__, __func__, __LINE__)
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -209,6 +209,21 @@ static int bo_wait(struct radeon_bo *bo)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int bo_is_busy(struct radeon_bo *bo, uint32_t *domain)
|
||||
{
|
||||
struct drm_radeon_gem_busy args;
|
||||
int ret;
|
||||
|
||||
args.handle = bo->handle;
|
||||
args.domain = 0;
|
||||
|
||||
ret = drmCommandWriteRead(bo->bom->fd, DRM_RADEON_GEM_BUSY,
|
||||
&args, sizeof(args));
|
||||
|
||||
*domain = args.domain;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int bo_set_tiling(struct radeon_bo *bo, uint32_t tiling_flags,
|
||||
uint32_t pitch)
|
||||
{
|
||||
|
|
@ -257,6 +272,7 @@ static struct radeon_bo_funcs bo_gem_funcs = {
|
|||
NULL,
|
||||
bo_set_tiling,
|
||||
bo_get_tiling,
|
||||
bo_is_busy,
|
||||
};
|
||||
|
||||
struct radeon_bo_manager *radeon_bo_manager_gem_ctor(int fd)
|
||||
|
|
|
|||
|
|
@ -505,6 +505,7 @@ typedef struct {
|
|||
#define DRM_RADEON_INFO 0x27
|
||||
#define DRM_RADEON_GEM_SET_TILING 0x28
|
||||
#define DRM_RADEON_GEM_GET_TILING 0x29
|
||||
#define DRM_RADEON_GEM_BUSY 0x2a
|
||||
|
||||
#define DRM_IOCTL_RADEON_CP_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t)
|
||||
#define DRM_IOCTL_RADEON_CP_START DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_START)
|
||||
|
|
@ -545,6 +546,7 @@ typedef struct {
|
|||
#define DRM_IOCTL_RADEON_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INFO, struct drm_radeon_info)
|
||||
#define DRM_IOCTL_RADEON_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_SET_TILING, struct drm_radeon_gem_set_tiling)
|
||||
#define DRM_IOCTL_RADEON_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_GET_TILING, struct drm_radeon_gem_get_tiling)
|
||||
#define DRM_IOCTL_RADEON_GEM_BUSY DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_BUSY, struct drm_radeon_gem_busy)
|
||||
|
||||
typedef struct drm_radeon_init {
|
||||
enum {
|
||||
|
|
@ -835,7 +837,7 @@ struct drm_radeon_gem_wait_idle {
|
|||
|
||||
struct drm_radeon_gem_busy {
|
||||
uint32_t handle;
|
||||
uint32_t busy;
|
||||
uint32_t domain;
|
||||
};
|
||||
|
||||
struct drm_radeon_gem_pread {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue