本文整理汇总了C++中drmCommandWriteRead函数的典型用法代码示例。如果您正苦于以下问题:C++ drmCommandWriteRead函数的具体用法?C++ drmCommandWriteRead怎么用?C++ drmCommandWriteRead使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了drmCommandWriteRead函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: radeon_get_drm_value
static boolean radeon_get_drm_value(int fd, unsigned request,
const char *errname, uint32_t *out)
{
struct drm_radeon_info info;
int retval;
memset(&info, 0, sizeof(info));
info.value = (unsigned long)out;
info.request = request;
retval = drmCommandWriteRead(fd, DRM_RADEON_INFO, &info, sizeof(info));
if (retval) {
if (errname) {
fprintf(stderr, "radeon: Failed to get %s, error number %d\n",
errname, retval);
}
return FALSE;
}
return TRUE;
}
示例2: vmw_ioctl_fence_signalled
int
vmw_ioctl_fence_signalled(struct vmw_winsys_screen *vws,
uint32_t handle,
uint32_t flags)
{
struct drm_vmw_fence_signaled_arg arg;
uint32_t vflags = vmw_drm_fence_flags(flags);
int ret;
memset(&arg, 0, sizeof(arg));
arg.handle = handle;
arg.flags = vflags;
ret = drmCommandWriteRead(vws->ioctl.drm_fd, DRM_VMW_FENCE_SIGNALED,
&arg, sizeof(arg));
if (ret != 0)
return ret;
return (arg.signaled) ? 0 : -1;
}
示例3: drm_vc4_bo_set_flags
int drm_vc4_bo_set_flags(struct drm_vc4_bo *bo, uint32_t flags)
{
#if 0
struct drm_vc4_gem_get_flags args;
struct drm_vc4 *drm = bo->drm;
int err;
if (!bo)
return -EINVAL;
memset(&args, 0, sizeof(args));
args.handle = bo->handle;
args.flags = flags;
err = drmCommandWriteRead(drm->fd, DRM_VC4_GEM_SET_FLAGS, &args,
sizeof(args));
if (err < 0)
return -errno;
#endif
return 0;
}
示例4: amdgpu_cs_ctx_free
/**
* Release command submission context
*
* \param dev - \c [in] amdgpu device handle
* \param context - \c [in] amdgpu context handle
*
* \return 0 on success otherwise POSIX Error code
*/
int amdgpu_cs_ctx_free(amdgpu_context_handle context)
{
union drm_amdgpu_ctx args;
int r;
if (NULL == context)
return -EINVAL;
pthread_mutex_destroy(&context->sequence_mutex);
/* now deal with kernel side */
memset(&args, 0, sizeof(args));
args.in.op = AMDGPU_CTX_OP_FREE_CTX;
args.in.ctx_id = context->id;
r = drmCommandWriteRead(context->dev->fd, DRM_AMDGPU_CTX,
&args, sizeof(args));
free(context);
return r;
}
示例5: pscnv_gem_info
int pscnv_gem_info(int fd, uint32_t handle, uint32_t *cookie, uint32_t *flags, uint32_t *tile_flags, uint64_t *size, uint64_t *map_handle, uint32_t *user) {
int ret;
struct drm_pscnv_gem_info req;
req.handle = handle;
ret = drmCommandWriteRead(fd, DRM_PSCNV_GEM_INFO, &req, sizeof(req));
if (ret)
return ret;
if (cookie)
*cookie = req.cookie;
if (flags)
*flags = req.flags;
if (tile_flags)
*tile_flags = req.tile_flags;
if (size)
*size = req.size;
if (map_handle)
*map_handle = req.map_handle;
if (user)
memcpy(user, req.user, sizeof(req.user));
return 0;
}
示例6: amdgpu_bo_list_update
int amdgpu_bo_list_update(amdgpu_bo_list_handle handle,
uint32_t number_of_resources,
amdgpu_bo_handle *resources,
uint8_t *resource_prios)
{
struct drm_amdgpu_bo_list_entry *list;
union drm_amdgpu_bo_list args;
unsigned i;
int r;
if (!number_of_resources)
return -EINVAL;
/* overflow check for multiplication */
if (number_of_resources > UINT32_MAX / sizeof(struct drm_amdgpu_bo_list_entry))
return -EINVAL;
list = malloc(number_of_resources * sizeof(struct drm_amdgpu_bo_list_entry));
if (list == NULL)
return -ENOMEM;
args.in.operation = AMDGPU_BO_LIST_OP_UPDATE;
args.in.list_handle = handle->handle;
args.in.bo_number = number_of_resources;
args.in.bo_info_size = sizeof(struct drm_amdgpu_bo_list_entry);
args.in.bo_info_ptr = (uintptr_t)list;
for (i = 0; i < number_of_resources; i++) {
list[i].bo_handle = resources[i]->handle;
if (resource_prios)
list[i].bo_priority = resource_prios[i];
else
list[i].bo_priority = 0;
}
r = drmCommandWriteRead(handle->dev->fd, DRM_AMDGPU_BO_LIST,
&args, sizeof(args));
free(list);
return r;
}
示例7: drm_tegra_bo_set_tiling
int drm_tegra_bo_set_tiling(struct drm_tegra_bo *bo,
const struct drm_tegra_bo_tiling *tiling)
{
struct drm_tegra_gem_set_tiling args;
struct drm_tegra *drm = bo->drm;
int err;
if (!bo)
return -EINVAL;
memset(&args, 0, sizeof(args));
args.handle = bo->handle;
args.mode = tiling->mode;
args.value = tiling->value;
err = drmCommandWriteRead(drm->fd, DRM_TEGRA_GEM_SET_TILING, &args,
sizeof(args));
if (err < 0)
return -errno;
return 0;
}
示例8: drm_tegra_bo_get_flags
int drm_tegra_bo_get_flags(struct drm_tegra_bo *bo, uint32_t *flags)
{
struct drm_tegra_gem_get_flags args;
struct drm_tegra *drm = bo->drm;
int err;
if (!bo)
return -EINVAL;
memset(&args, 0, sizeof(args));
args.handle = bo->handle;
err = drmCommandWriteRead(drm->fd, DRM_TEGRA_GEM_GET_FLAGS, &args,
sizeof(args));
if (err < 0)
return -errno;
if (flags)
*flags = args.flags;
return 0;
}
示例9: amdgpu_bo_wait_for_idle
int amdgpu_bo_wait_for_idle(amdgpu_bo_handle bo,
uint64_t timeout_ns,
bool *busy)
{
union drm_amdgpu_gem_wait_idle args;
int r;
memset(&args, 0, sizeof(args));
args.in.handle = bo->handle;
args.in.timeout = amdgpu_cs_calculate_timeout(timeout_ns);
r = drmCommandWriteRead(bo->dev->fd, DRM_AMDGPU_GEM_WAIT_IDLE,
&args, sizeof(args));
if (r == 0) {
*busy = args.out.status;
return 0;
} else {
fprintf(stderr, "amdgpu: GEM_WAIT_IDLE failed with %i\n", r);
return r;
}
}
示例10: strncpy
int DrmControl::getVideoExtCommand()
{
if (mVideoExtCommand) {
return mVideoExtCommand;
}
int fd = Hwcomposer::getInstance().getDrm()->getDrmFd();
union drm_psb_extension_arg video_getparam_arg;
strncpy(video_getparam_arg.extension,
"lnc_video_getparam", sizeof(video_getparam_arg.extension));
int ret = drmCommandWriteRead(fd, DRM_PSB_EXTENSION,
&video_getparam_arg, sizeof(video_getparam_arg));
if (ret != 0) {
VLOGTRACE("failed to get video extension command");
return 0;
}
mVideoExtCommand = video_getparam_arg.rep.driver_ioctl_offset;
return mVideoExtCommand;
}
示例11: drmCommandWriteRead
/* allocate a new (un-tiled) buffer object */
struct etna_bo *etna_bo_new(struct etna_device *dev,
uint32_t size, uint32_t flags)
{
struct etna_bo *bo = NULL;
struct drm_vivante_gem_new req = {
.size = size,
.flags = MSM_BO_WC, // TODO figure out proper flags..
};
int ret;
ret = drmCommandWriteRead(dev->fd, DRM_VIVANTE_GEM_NEW,
&req, sizeof(req));
if (ret)
return NULL;
pthread_mutex_lock(&table_lock);
bo = bo_from_handle(dev, size, req.handle);
pthread_mutex_unlock(&table_lock);
return bo;
}
示例12: intelEmitIrqLocked
int
intelEmitIrqLocked(struct intel_context *intel)
{
drmI830IrqEmit ie;
int ret, seq;
assert(((*(int *) intel->driHwLock) & ~DRM_LOCK_CONT) ==
(DRM_LOCK_HELD | intel->hHWContext));
ie.irq_seq = &seq;
ret = drmCommandWriteRead(intel->driFd, DRM_I830_IRQ_EMIT,
&ie, sizeof(ie));
if (ret) {
fprintf(stderr, "%s: drmI830IrqEmit: %d\n", __FUNCTION__, ret);
exit(1);
}
DBG("%s --> %d\n", __FUNCTION__, seq);
return seq;
}
示例13: kgsl_bo_new_handle
/* allocate a buffer handle: */
drm_private int kgsl_bo_new_handle(struct fd_device *dev,
uint32_t size, uint32_t flags, uint32_t *handle)
{
struct drm_kgsl_gem_create req = {
.size = size,
};
int ret;
ret = drmCommandWriteRead(dev->fd, DRM_KGSL_GEM_CREATE,
&req, sizeof(req));
if (ret)
return ret;
// TODO make flags match msm driver, since kgsl is legacy..
// translate flags in kgsl..
set_memtype(dev, req.handle, flags);
*handle = req.handle;
return 0;
}
示例14: amdgpu_bo_set_metadata
int amdgpu_bo_set_metadata(amdgpu_bo_handle bo,
struct amdgpu_bo_metadata *info)
{
struct drm_amdgpu_gem_metadata args = {};
args.handle = bo->handle;
args.op = AMDGPU_GEM_METADATA_OP_SET_METADATA;
args.data.flags = info->flags;
args.data.tiling_info = info->tiling_info;
if (info->size_metadata > sizeof(args.data.data))
return -EINVAL;
if (info->size_metadata) {
args.data.data_size_bytes = info->size_metadata;
memcpy(args.data.data, info->umd_metadata, info->size_metadata);
}
return drmCommandWriteRead(bo->dev->fd,
DRM_AMDGPU_GEM_METADATA,
&args, sizeof(args));
}
示例15: amdgpu_create_bo_from_user_mem
int amdgpu_create_bo_from_user_mem(amdgpu_device_handle dev,
void *cpu,
uint64_t size,
amdgpu_bo_handle *buf_handle)
{
int r;
struct amdgpu_bo *bo;
struct drm_amdgpu_gem_userptr args;
uintptr_t cpu0;
uint32_t ps, off;
memset(&args, 0, sizeof(args));
ps = getpagesize();
cpu0 = ROUND_DOWN((uintptr_t)cpu, ps);
off = (uintptr_t)cpu - cpu0;
size = ROUND_UP(size + off, ps);
args.addr = cpu0;
args.flags = AMDGPU_GEM_USERPTR_ANONONLY | AMDGPU_GEM_USERPTR_REGISTER;
args.size = size;
r = drmCommandWriteRead(dev->fd, DRM_AMDGPU_GEM_USERPTR,
&args, sizeof(args));
if (r)
return r;
bo = calloc(1, sizeof(struct amdgpu_bo));
if (!bo)
return -ENOMEM;
atomic_set(&bo->refcount, 1);
bo->dev = dev;
bo->alloc_size = size;
bo->handle = args.handle;
*buf_handle = bo;
return r;
}