[libdrm] Restart all ioctls on signal receipt

Receiving a signal should be ignored by the library, so just restart any
ioctl which returns EINTR or EAGAIN.
main
Keith Packard 2008-06-13 16:03:22 -07:00
parent 217beb9c8d
commit 8b9ab108ec
1 changed files with 92 additions and 80 deletions

View File

@ -171,6 +171,19 @@ static char *drmStrdup(const char *s)
return retval; return retval;
} }
/**
* Call ioctl, restarting if it is interupted
*/
static int
drmIoctl(int fd, int request, void *arg)
{
int ret;
do {
ret = ioctl(fd, request, arg);
} while (ret == -1 && (errno == EINTR || errno == EAGAIN));
return ret;
}
static unsigned long drmGetKeyFromFd(int fd) static unsigned long drmGetKeyFromFd(int fd)
{ {
@ -668,7 +681,7 @@ drmVersionPtr drmGetVersion(int fd)
version->desc_len = 0; version->desc_len = 0;
version->desc = NULL; version->desc = NULL;
if (ioctl(fd, DRM_IOCTL_VERSION, version)) { if (drmIoctl(fd, DRM_IOCTL_VERSION, version)) {
drmFreeKernelVersion(version); drmFreeKernelVersion(version);
return NULL; return NULL;
} }
@ -680,7 +693,7 @@ drmVersionPtr drmGetVersion(int fd)
if (version->desc_len) if (version->desc_len)
version->desc = drmMalloc(version->desc_len + 1); version->desc = drmMalloc(version->desc_len + 1);
if (ioctl(fd, DRM_IOCTL_VERSION, version)) { if (drmIoctl(fd, DRM_IOCTL_VERSION, version)) {
drmMsg("DRM_IOCTL_VERSION: %s\n", strerror(errno)); drmMsg("DRM_IOCTL_VERSION: %s\n", strerror(errno));
drmFreeKernelVersion(version); drmFreeKernelVersion(version);
return NULL; return NULL;
@ -766,10 +779,10 @@ char *drmGetBusid(int fd)
u.unique_len = 0; u.unique_len = 0;
u.unique = NULL; u.unique = NULL;
if (ioctl(fd, DRM_IOCTL_GET_UNIQUE, &u)) if (drmIoctl(fd, DRM_IOCTL_GET_UNIQUE, &u))
return NULL; return NULL;
u.unique = drmMalloc(u.unique_len + 1); u.unique = drmMalloc(u.unique_len + 1);
if (ioctl(fd, DRM_IOCTL_GET_UNIQUE, &u)) if (drmIoctl(fd, DRM_IOCTL_GET_UNIQUE, &u))
return NULL; return NULL;
u.unique[u.unique_len] = '\0'; u.unique[u.unique_len] = '\0';
@ -796,7 +809,7 @@ int drmSetBusid(int fd, const char *busid)
u.unique = (char *)busid; u.unique = (char *)busid;
u.unique_len = strlen(busid); u.unique_len = strlen(busid);
if (ioctl(fd, DRM_IOCTL_SET_UNIQUE, &u)) { if (drmIoctl(fd, DRM_IOCTL_SET_UNIQUE, &u)) {
return -errno; return -errno;
} }
return 0; return 0;
@ -807,7 +820,7 @@ int drmGetMagic(int fd, drm_magic_t * magic)
drm_auth_t auth; drm_auth_t auth;
*magic = 0; *magic = 0;
if (ioctl(fd, DRM_IOCTL_GET_MAGIC, &auth)) if (drmIoctl(fd, DRM_IOCTL_GET_MAGIC, &auth))
return -errno; return -errno;
*magic = auth.magic; *magic = auth.magic;
return 0; return 0;
@ -818,7 +831,7 @@ int drmAuthMagic(int fd, drm_magic_t magic)
drm_auth_t auth; drm_auth_t auth;
auth.magic = magic; auth.magic = magic;
if (ioctl(fd, DRM_IOCTL_AUTH_MAGIC, &auth)) if (drmIoctl(fd, DRM_IOCTL_AUTH_MAGIC, &auth))
return -errno; return -errno;
return 0; return 0;
} }
@ -883,7 +896,7 @@ int drmAddMap(int fd, drm_handle_t offset, drmSize size, drmMapType type,
map.handle = 0; map.handle = 0;
map.type = type; map.type = type;
map.flags = flags; map.flags = flags;
if (ioctl(fd, DRM_IOCTL_ADD_MAP, &map)) if (drmIoctl(fd, DRM_IOCTL_ADD_MAP, &map))
return -errno; return -errno;
if (handle) if (handle)
*handle = (drm_handle_t)map.handle; *handle = (drm_handle_t)map.handle;
@ -896,7 +909,7 @@ int drmRmMap(int fd, drm_handle_t handle)
map.handle = (void *)handle; map.handle = (void *)handle;
if(ioctl(fd, DRM_IOCTL_RM_MAP, &map)) if(drmIoctl(fd, DRM_IOCTL_RM_MAP, &map))
return -errno; return -errno;
return 0; return 0;
} }
@ -929,7 +942,7 @@ int drmAddBufs(int fd, int count, int size, drmBufDescFlags flags,
request.flags = flags; request.flags = flags;
request.agp_start = agp_offset; request.agp_start = agp_offset;
if (ioctl(fd, DRM_IOCTL_ADD_BUFS, &request)) if (drmIoctl(fd, DRM_IOCTL_ADD_BUFS, &request))
return -errno; return -errno;
return request.count; return request.count;
} }
@ -942,7 +955,7 @@ int drmMarkBufs(int fd, double low, double high)
info.count = 0; info.count = 0;
info.list = NULL; info.list = NULL;
if (ioctl(fd, DRM_IOCTL_INFO_BUFS, &info)) if (drmIoctl(fd, DRM_IOCTL_INFO_BUFS, &info))
return -EINVAL; return -EINVAL;
if (!info.count) if (!info.count)
@ -951,7 +964,7 @@ int drmMarkBufs(int fd, double low, double high)
if (!(info.list = drmMalloc(info.count * sizeof(*info.list)))) if (!(info.list = drmMalloc(info.count * sizeof(*info.list))))
return -ENOMEM; return -ENOMEM;
if (ioctl(fd, DRM_IOCTL_INFO_BUFS, &info)) { if (drmIoctl(fd, DRM_IOCTL_INFO_BUFS, &info)) {
int retval = -errno; int retval = -errno;
drmFree(info.list); drmFree(info.list);
return retval; return retval;
@ -960,7 +973,7 @@ int drmMarkBufs(int fd, double low, double high)
for (i = 0; i < info.count; i++) { for (i = 0; i < info.count; i++) {
info.list[i].low_mark = low * info.list[i].count; info.list[i].low_mark = low * info.list[i].count;
info.list[i].high_mark = high * info.list[i].count; info.list[i].high_mark = high * info.list[i].count;
if (ioctl(fd, DRM_IOCTL_MARK_BUFS, &info.list[i])) { if (drmIoctl(fd, DRM_IOCTL_MARK_BUFS, &info.list[i])) {
int retval = -errno; int retval = -errno;
drmFree(info.list); drmFree(info.list);
return retval; return retval;
@ -992,7 +1005,7 @@ int drmFreeBufs(int fd, int count, int *list)
request.count = count; request.count = count;
request.list = list; request.list = list;
if (ioctl(fd, DRM_IOCTL_FREE_BUFS, &request)) if (drmIoctl(fd, DRM_IOCTL_FREE_BUFS, &request))
return -errno; return -errno;
return 0; return 0;
} }
@ -1081,14 +1094,14 @@ drmBufInfoPtr drmGetBufInfo(int fd)
info.count = 0; info.count = 0;
info.list = NULL; info.list = NULL;
if (ioctl(fd, DRM_IOCTL_INFO_BUFS, &info)) if (drmIoctl(fd, DRM_IOCTL_INFO_BUFS, &info))
return NULL; return NULL;
if (info.count) { if (info.count) {
if (!(info.list = drmMalloc(info.count * sizeof(*info.list)))) if (!(info.list = drmMalloc(info.count * sizeof(*info.list))))
return NULL; return NULL;
if (ioctl(fd, DRM_IOCTL_INFO_BUFS, &info)) { if (drmIoctl(fd, DRM_IOCTL_INFO_BUFS, &info)) {
drmFree(info.list); drmFree(info.list);
return NULL; return NULL;
} }
@ -1132,7 +1145,7 @@ drmBufMapPtr drmMapBufs(int fd)
bufs.count = 0; bufs.count = 0;
bufs.list = NULL; bufs.list = NULL;
bufs.virtual = NULL; bufs.virtual = NULL;
if (ioctl(fd, DRM_IOCTL_MAP_BUFS, &bufs)) if (drmIoctl(fd, DRM_IOCTL_MAP_BUFS, &bufs))
return NULL; return NULL;
if (!bufs.count) if (!bufs.count)
@ -1141,7 +1154,7 @@ drmBufMapPtr drmMapBufs(int fd)
if (!(bufs.list = drmMalloc(bufs.count * sizeof(*bufs.list)))) if (!(bufs.list = drmMalloc(bufs.count * sizeof(*bufs.list))))
return NULL; return NULL;
if (ioctl(fd, DRM_IOCTL_MAP_BUFS, &bufs)) { if (drmIoctl(fd, DRM_IOCTL_MAP_BUFS, &bufs)) {
drmFree(bufs.list); drmFree(bufs.list);
return NULL; return NULL;
} }
@ -1256,7 +1269,7 @@ int drmGetLock(int fd, drm_context_t context, drmLockFlags flags)
if (flags & DRM_HALT_ALL_QUEUES) lock.flags |= _DRM_HALT_ALL_QUEUES; if (flags & DRM_HALT_ALL_QUEUES) lock.flags |= _DRM_HALT_ALL_QUEUES;
if (flags & DRM_HALT_CUR_QUEUES) lock.flags |= _DRM_HALT_CUR_QUEUES; if (flags & DRM_HALT_CUR_QUEUES) lock.flags |= _DRM_HALT_CUR_QUEUES;
while (ioctl(fd, DRM_IOCTL_LOCK, &lock)) while (drmIoctl(fd, DRM_IOCTL_LOCK, &lock))
; ;
return 0; return 0;
} }
@ -1279,7 +1292,7 @@ int drmUnlock(int fd, drm_context_t context)
lock.context = context; lock.context = context;
lock.flags = 0; lock.flags = 0;
return ioctl(fd, DRM_IOCTL_UNLOCK, &lock); return drmIoctl(fd, DRM_IOCTL_UNLOCK, &lock);
} }
drm_context_t *drmGetReservedContextList(int fd, int *count) drm_context_t *drmGetReservedContextList(int fd, int *count)
@ -1291,7 +1304,7 @@ drm_context_t *drmGetReservedContextList(int fd, int *count)
res.count = 0; res.count = 0;
res.contexts = NULL; res.contexts = NULL;
if (ioctl(fd, DRM_IOCTL_RES_CTX, &res)) if (drmIoctl(fd, DRM_IOCTL_RES_CTX, &res))
return NULL; return NULL;
if (!res.count) if (!res.count)
@ -1305,7 +1318,7 @@ drm_context_t *drmGetReservedContextList(int fd, int *count)
} }
res.contexts = list; res.contexts = list;
if (ioctl(fd, DRM_IOCTL_RES_CTX, &res)) if (drmIoctl(fd, DRM_IOCTL_RES_CTX, &res))
return NULL; return NULL;
for (i = 0; i < res.count; i++) for (i = 0; i < res.count; i++)
@ -1344,7 +1357,7 @@ int drmCreateContext(int fd, drm_context_t *handle)
drm_ctx_t ctx; drm_ctx_t ctx;
ctx.flags = 0; /* Modified with functions below */ ctx.flags = 0; /* Modified with functions below */
if (ioctl(fd, DRM_IOCTL_ADD_CTX, &ctx)) if (drmIoctl(fd, DRM_IOCTL_ADD_CTX, &ctx))
return -errno; return -errno;
*handle = ctx.handle; *handle = ctx.handle;
return 0; return 0;
@ -1355,7 +1368,7 @@ int drmSwitchToContext(int fd, drm_context_t context)
drm_ctx_t ctx; drm_ctx_t ctx;
ctx.handle = context; ctx.handle = context;
if (ioctl(fd, DRM_IOCTL_SWITCH_CTX, &ctx)) if (drmIoctl(fd, DRM_IOCTL_SWITCH_CTX, &ctx))
return -errno; return -errno;
return 0; return 0;
} }
@ -1376,7 +1389,7 @@ int drmSetContextFlags(int fd, drm_context_t context, drm_context_tFlags flags)
ctx.flags |= _DRM_CONTEXT_PRESERVED; ctx.flags |= _DRM_CONTEXT_PRESERVED;
if (flags & DRM_CONTEXT_2DONLY) if (flags & DRM_CONTEXT_2DONLY)
ctx.flags |= _DRM_CONTEXT_2DONLY; ctx.flags |= _DRM_CONTEXT_2DONLY;
if (ioctl(fd, DRM_IOCTL_MOD_CTX, &ctx)) if (drmIoctl(fd, DRM_IOCTL_MOD_CTX, &ctx))
return -errno; return -errno;
return 0; return 0;
} }
@ -1387,7 +1400,7 @@ int drmGetContextFlags(int fd, drm_context_t context,
drm_ctx_t ctx; drm_ctx_t ctx;
ctx.handle = context; ctx.handle = context;
if (ioctl(fd, DRM_IOCTL_GET_CTX, &ctx)) if (drmIoctl(fd, DRM_IOCTL_GET_CTX, &ctx))
return -errno; return -errno;
*flags = 0; *flags = 0;
if (ctx.flags & _DRM_CONTEXT_PRESERVED) if (ctx.flags & _DRM_CONTEXT_PRESERVED)
@ -1418,7 +1431,7 @@ int drmDestroyContext(int fd, drm_context_t handle)
{ {
drm_ctx_t ctx; drm_ctx_t ctx;
ctx.handle = handle; ctx.handle = handle;
if (ioctl(fd, DRM_IOCTL_RM_CTX, &ctx)) if (drmIoctl(fd, DRM_IOCTL_RM_CTX, &ctx))
return -errno; return -errno;
return 0; return 0;
} }
@ -1426,7 +1439,7 @@ int drmDestroyContext(int fd, drm_context_t handle)
int drmCreateDrawable(int fd, drm_drawable_t *handle) int drmCreateDrawable(int fd, drm_drawable_t *handle)
{ {
drm_draw_t draw; drm_draw_t draw;
if (ioctl(fd, DRM_IOCTL_ADD_DRAW, &draw)) if (drmIoctl(fd, DRM_IOCTL_ADD_DRAW, &draw))
return -errno; return -errno;
*handle = draw.handle; *handle = draw.handle;
return 0; return 0;
@ -1436,7 +1449,7 @@ int drmDestroyDrawable(int fd, drm_drawable_t handle)
{ {
drm_draw_t draw; drm_draw_t draw;
draw.handle = handle; draw.handle = handle;
if (ioctl(fd, DRM_IOCTL_RM_DRAW, &draw)) if (drmIoctl(fd, DRM_IOCTL_RM_DRAW, &draw))
return -errno; return -errno;
return 0; return 0;
} }
@ -1452,7 +1465,7 @@ int drmUpdateDrawableInfo(int fd, drm_drawable_t handle,
update.num = num; update.num = num;
update.data = (unsigned long long)(unsigned long)data; update.data = (unsigned long long)(unsigned long)data;
if (ioctl(fd, DRM_IOCTL_UPDATE_DRAW, &update)) if (drmIoctl(fd, DRM_IOCTL_UPDATE_DRAW, &update))
return -errno; return -errno;
return 0; return 0;
@ -1472,7 +1485,7 @@ int drmUpdateDrawableInfo(int fd, drm_drawable_t handle,
*/ */
int drmAgpAcquire(int fd) int drmAgpAcquire(int fd)
{ {
if (ioctl(fd, DRM_IOCTL_AGP_ACQUIRE, NULL)) if (drmIoctl(fd, DRM_IOCTL_AGP_ACQUIRE, NULL))
return -errno; return -errno;
return 0; return 0;
} }
@ -1490,7 +1503,7 @@ int drmAgpAcquire(int fd)
*/ */
int drmAgpRelease(int fd) int drmAgpRelease(int fd)
{ {
if (ioctl(fd, DRM_IOCTL_AGP_RELEASE, NULL)) if (drmIoctl(fd, DRM_IOCTL_AGP_RELEASE, NULL))
return -errno; return -errno;
return 0; return 0;
} }
@ -1513,7 +1526,7 @@ int drmAgpEnable(int fd, unsigned long mode)
drm_agp_mode_t m; drm_agp_mode_t m;
m.mode = mode; m.mode = mode;
if (ioctl(fd, DRM_IOCTL_AGP_ENABLE, &m)) if (drmIoctl(fd, DRM_IOCTL_AGP_ENABLE, &m))
return -errno; return -errno;
return 0; return 0;
} }
@ -1544,7 +1557,7 @@ int drmAgpAlloc(int fd, unsigned long size, unsigned long type,
b.size = size; b.size = size;
b.handle = 0; b.handle = 0;
b.type = type; b.type = type;
if (ioctl(fd, DRM_IOCTL_AGP_ALLOC, &b)) if (drmIoctl(fd, DRM_IOCTL_AGP_ALLOC, &b))
return -errno; return -errno;
if (address != 0UL) if (address != 0UL)
*address = b.physical; *address = b.physical;
@ -1571,7 +1584,7 @@ int drmAgpFree(int fd, drm_handle_t handle)
b.size = 0; b.size = 0;
b.handle = handle; b.handle = handle;
if (ioctl(fd, DRM_IOCTL_AGP_FREE, &b)) if (drmIoctl(fd, DRM_IOCTL_AGP_FREE, &b))
return -errno; return -errno;
return 0; return 0;
} }
@ -1596,7 +1609,7 @@ int drmAgpBind(int fd, drm_handle_t handle, unsigned long offset)
b.handle = handle; b.handle = handle;
b.offset = offset; b.offset = offset;
if (ioctl(fd, DRM_IOCTL_AGP_BIND, &b)) if (drmIoctl(fd, DRM_IOCTL_AGP_BIND, &b))
return -errno; return -errno;
return 0; return 0;
} }
@ -1620,7 +1633,7 @@ int drmAgpUnbind(int fd, drm_handle_t handle)
b.handle = handle; b.handle = handle;
b.offset = 0; b.offset = 0;
if (ioctl(fd, DRM_IOCTL_AGP_UNBIND, &b)) if (drmIoctl(fd, DRM_IOCTL_AGP_UNBIND, &b))
return -errno; return -errno;
return 0; return 0;
} }
@ -1641,7 +1654,7 @@ int drmAgpVersionMajor(int fd)
{ {
drm_agp_info_t i; drm_agp_info_t i;
if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i)) if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
return -errno; return -errno;
return i.agp_version_major; return i.agp_version_major;
} }
@ -1662,7 +1675,7 @@ int drmAgpVersionMinor(int fd)
{ {
drm_agp_info_t i; drm_agp_info_t i;
if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i)) if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
return -errno; return -errno;
return i.agp_version_minor; return i.agp_version_minor;
} }
@ -1683,7 +1696,7 @@ unsigned long drmAgpGetMode(int fd)
{ {
drm_agp_info_t i; drm_agp_info_t i;
if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i)) if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
return 0; return 0;
return i.mode; return i.mode;
} }
@ -1704,7 +1717,7 @@ unsigned long drmAgpBase(int fd)
{ {
drm_agp_info_t i; drm_agp_info_t i;
if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i)) if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
return 0; return 0;
return i.aperture_base; return i.aperture_base;
} }
@ -1725,7 +1738,7 @@ unsigned long drmAgpSize(int fd)
{ {
drm_agp_info_t i; drm_agp_info_t i;
if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i)) if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
return 0; return 0;
return i.aperture_size; return i.aperture_size;
} }
@ -1746,7 +1759,7 @@ unsigned long drmAgpMemoryUsed(int fd)
{ {
drm_agp_info_t i; drm_agp_info_t i;
if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i)) if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
return 0; return 0;
return i.memory_used; return i.memory_used;
} }
@ -1767,7 +1780,7 @@ unsigned long drmAgpMemoryAvail(int fd)
{ {
drm_agp_info_t i; drm_agp_info_t i;
if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i)) if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
return 0; return 0;
return i.memory_allowed; return i.memory_allowed;
} }
@ -1788,7 +1801,7 @@ unsigned int drmAgpVendorId(int fd)
{ {
drm_agp_info_t i; drm_agp_info_t i;
if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i)) if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
return 0; return 0;
return i.id_vendor; return i.id_vendor;
} }
@ -1809,7 +1822,7 @@ unsigned int drmAgpDeviceId(int fd)
{ {
drm_agp_info_t i; drm_agp_info_t i;
if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i)) if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
return 0; return 0;
return i.id_device; return i.id_device;
} }
@ -1821,7 +1834,7 @@ int drmScatterGatherAlloc(int fd, unsigned long size, drm_handle_t *handle)
*handle = 0; *handle = 0;
sg.size = size; sg.size = size;
sg.handle = 0; sg.handle = 0;
if (ioctl(fd, DRM_IOCTL_SG_ALLOC, &sg)) if (drmIoctl(fd, DRM_IOCTL_SG_ALLOC, &sg))
return -errno; return -errno;
*handle = sg.handle; *handle = sg.handle;
return 0; return 0;
@ -1833,7 +1846,7 @@ int drmScatterGatherFree(int fd, drm_handle_t handle)
sg.size = 0; sg.size = 0;
sg.handle = handle; sg.handle = handle;
if (ioctl(fd, DRM_IOCTL_SG_FREE, &sg)) if (drmIoctl(fd, DRM_IOCTL_SG_FREE, &sg))
return -errno; return -errno;
return 0; return 0;
} }
@ -1854,7 +1867,7 @@ int drmWaitVBlank(int fd, drmVBlankPtr vbl)
int ret; int ret;
do { do {
ret = ioctl(fd, DRM_IOCTL_WAIT_VBLANK, vbl); ret = drmIoctl(fd, DRM_IOCTL_WAIT_VBLANK, vbl);
vbl->request.type &= ~DRM_VBLANK_RELATIVE; vbl->request.type &= ~DRM_VBLANK_RELATIVE;
} while (ret && errno == EINTR); } while (ret && errno == EINTR);
@ -1904,7 +1917,7 @@ int drmCtlInstHandler(int fd, int irq)
ctl.func = DRM_INST_HANDLER; ctl.func = DRM_INST_HANDLER;
ctl.irq = irq; ctl.irq = irq;
if (ioctl(fd, DRM_IOCTL_CONTROL, &ctl)) if (drmIoctl(fd, DRM_IOCTL_CONTROL, &ctl))
return -errno; return -errno;
return 0; return 0;
} }
@ -1927,7 +1940,7 @@ int drmCtlUninstHandler(int fd)
ctl.func = DRM_UNINST_HANDLER; ctl.func = DRM_UNINST_HANDLER;
ctl.irq = 0; ctl.irq = 0;
if (ioctl(fd, DRM_IOCTL_CONTROL, &ctl)) if (drmIoctl(fd, DRM_IOCTL_CONTROL, &ctl))
return -errno; return -errno;
return 0; return 0;
} }
@ -1944,7 +1957,7 @@ int drmFinish(int fd, int context, drmLockFlags flags)
if (flags & DRM_LOCK_FLUSH_ALL) lock.flags |= _DRM_LOCK_FLUSH_ALL; if (flags & DRM_LOCK_FLUSH_ALL) lock.flags |= _DRM_LOCK_FLUSH_ALL;
if (flags & DRM_HALT_ALL_QUEUES) lock.flags |= _DRM_HALT_ALL_QUEUES; if (flags & DRM_HALT_ALL_QUEUES) lock.flags |= _DRM_HALT_ALL_QUEUES;
if (flags & DRM_HALT_CUR_QUEUES) lock.flags |= _DRM_HALT_CUR_QUEUES; if (flags & DRM_HALT_CUR_QUEUES) lock.flags |= _DRM_HALT_CUR_QUEUES;
if (ioctl(fd, DRM_IOCTL_FINISH, &lock)) if (drmIoctl(fd, DRM_IOCTL_FINISH, &lock))
return -errno; return -errno;
return 0; return 0;
} }
@ -1970,7 +1983,7 @@ int drmGetInterruptFromBusID(int fd, int busnum, int devnum, int funcnum)
p.busnum = busnum; p.busnum = busnum;
p.devnum = devnum; p.devnum = devnum;
p.funcnum = funcnum; p.funcnum = funcnum;
if (ioctl(fd, DRM_IOCTL_IRQ_BUSID, &p)) if (drmIoctl(fd, DRM_IOCTL_IRQ_BUSID, &p))
return -errno; return -errno;
return p.irq; return p.irq;
} }
@ -2012,7 +2025,7 @@ int drmAddContextPrivateMapping(int fd, drm_context_t ctx_id,
map.ctx_id = ctx_id; map.ctx_id = ctx_id;
map.handle = (void *)handle; map.handle = (void *)handle;
if (ioctl(fd, DRM_IOCTL_SET_SAREA_CTX, &map)) if (drmIoctl(fd, DRM_IOCTL_SET_SAREA_CTX, &map))
return -errno; return -errno;
return 0; return 0;
} }
@ -2024,7 +2037,7 @@ int drmGetContextPrivateMapping(int fd, drm_context_t ctx_id,
map.ctx_id = ctx_id; map.ctx_id = ctx_id;
if (ioctl(fd, DRM_IOCTL_GET_SAREA_CTX, &map)) if (drmIoctl(fd, DRM_IOCTL_GET_SAREA_CTX, &map))
return -errno; return -errno;
if (handle) if (handle)
*handle = (drm_handle_t)map.handle; *handle = (drm_handle_t)map.handle;
@ -2039,7 +2052,7 @@ int drmGetMap(int fd, int idx, drm_handle_t *offset, drmSize *size,
drm_map_t map; drm_map_t map;
map.offset = idx; map.offset = idx;
if (ioctl(fd, DRM_IOCTL_GET_MAP, &map)) if (drmIoctl(fd, DRM_IOCTL_GET_MAP, &map))
return -errno; return -errno;
*offset = map.offset; *offset = map.offset;
*size = map.size; *size = map.size;
@ -2056,7 +2069,7 @@ int drmGetClient(int fd, int idx, int *auth, int *pid, int *uid,
drm_client_t client; drm_client_t client;
client.idx = idx; client.idx = idx;
if (ioctl(fd, DRM_IOCTL_GET_CLIENT, &client)) if (drmIoctl(fd, DRM_IOCTL_GET_CLIENT, &client))
return -errno; return -errno;
*auth = client.auth; *auth = client.auth;
*pid = client.pid; *pid = client.pid;
@ -2071,7 +2084,7 @@ int drmGetStats(int fd, drmStatsT *stats)
drm_stats_t s; drm_stats_t s;
int i; int i;
if (ioctl(fd, DRM_IOCTL_GET_STATS, &s)) if (drmIoctl(fd, DRM_IOCTL_GET_STATS, &s))
return -errno; return -errno;
stats->count = 0; stats->count = 0;
@ -2213,7 +2226,7 @@ int drmSetInterfaceVersion(int fd, drmSetVersion *version)
sv.drm_dd_major = version->drm_dd_major; sv.drm_dd_major = version->drm_dd_major;
sv.drm_dd_minor = version->drm_dd_minor; sv.drm_dd_minor = version->drm_dd_minor;
if (ioctl(fd, DRM_IOCTL_SET_VERSION, &sv)) { if (drmIoctl(fd, DRM_IOCTL_SET_VERSION, &sv)) {
retcode = -errno; retcode = -errno;
} }
@ -2244,7 +2257,7 @@ int drmCommandNone(int fd, unsigned long drmCommandIndex)
request = DRM_IO( DRM_COMMAND_BASE + drmCommandIndex); request = DRM_IO( DRM_COMMAND_BASE + drmCommandIndex);
if (ioctl(fd, request, data)) { if (drmIoctl(fd, request, data)) {
return -errno; return -errno;
} }
return 0; return 0;
@ -2273,7 +2286,7 @@ int drmCommandRead(int fd, unsigned long drmCommandIndex, void *data,
request = DRM_IOC( DRM_IOC_READ, DRM_IOCTL_BASE, request = DRM_IOC( DRM_IOC_READ, DRM_IOCTL_BASE,
DRM_COMMAND_BASE + drmCommandIndex, size); DRM_COMMAND_BASE + drmCommandIndex, size);
if (ioctl(fd, request, data)) { if (drmIoctl(fd, request, data)) {
return -errno; return -errno;
} }
return 0; return 0;
@ -2302,7 +2315,7 @@ int drmCommandWrite(int fd, unsigned long drmCommandIndex, void *data,
request = DRM_IOC( DRM_IOC_WRITE, DRM_IOCTL_BASE, request = DRM_IOC( DRM_IOC_WRITE, DRM_IOCTL_BASE,
DRM_COMMAND_BASE + drmCommandIndex, size); DRM_COMMAND_BASE + drmCommandIndex, size);
if (ioctl(fd, request, data)) { if (drmIoctl(fd, request, data)) {
return -errno; return -errno;
} }
return 0; return 0;
@ -2331,9 +2344,8 @@ int drmCommandWriteRead(int fd, unsigned long drmCommandIndex, void *data,
request = DRM_IOC( DRM_IOC_READ|DRM_IOC_WRITE, DRM_IOCTL_BASE, request = DRM_IOC( DRM_IOC_READ|DRM_IOC_WRITE, DRM_IOCTL_BASE,
DRM_COMMAND_BASE + drmCommandIndex, size); DRM_COMMAND_BASE + drmCommandIndex, size);
if (ioctl(fd, request, data)) { if (drmIoctl(fd, request, data))
return -errno; return -errno;
}
return 0; return 0;
} }
@ -2355,7 +2367,7 @@ int drmFenceCreate(int fd, unsigned flags, int fence_class, unsigned type,
arg.type = type; arg.type = type;
arg.fence_class = fence_class; arg.fence_class = fence_class;
if (ioctl(fd, DRM_IOCTL_FENCE_CREATE, &arg)) if (drmIoctl(fd, DRM_IOCTL_FENCE_CREATE, &arg))
return -errno; return -errno;
fence->handle = arg.handle; fence->handle = arg.handle;
fence->fence_class = arg.fence_class; fence->fence_class = arg.fence_class;
@ -2379,7 +2391,7 @@ int drmFenceBuffers(int fd, unsigned flags, uint32_t fence_class, drmFence *fenc
arg.flags = flags; arg.flags = flags;
arg.fence_class = fence_class; arg.fence_class = fence_class;
if (ioctl(fd, DRM_IOCTL_FENCE_BUFFERS, &arg)) if (drmIoctl(fd, DRM_IOCTL_FENCE_BUFFERS, &arg))
return -errno; return -errno;
fence->handle = arg.handle; fence->handle = arg.handle;
fence->fence_class = arg.fence_class; fence->fence_class = arg.fence_class;
@ -2397,7 +2409,7 @@ int drmFenceReference(int fd, unsigned handle, drmFence *fence)
memset(&arg, 0, sizeof(arg)); memset(&arg, 0, sizeof(arg));
arg.handle = handle; arg.handle = handle;
if (ioctl(fd, DRM_IOCTL_FENCE_REFERENCE, &arg)) if (drmIoctl(fd, DRM_IOCTL_FENCE_REFERENCE, &arg))
return -errno; return -errno;
fence->handle = arg.handle; fence->handle = arg.handle;
fence->fence_class = arg.fence_class; fence->fence_class = arg.fence_class;
@ -2414,7 +2426,7 @@ int drmFenceUnreference(int fd, const drmFence *fence)
memset(&arg, 0, sizeof(arg)); memset(&arg, 0, sizeof(arg));
arg.handle = fence->handle; arg.handle = fence->handle;
if (ioctl(fd, DRM_IOCTL_FENCE_UNREFERENCE, &arg)) if (drmIoctl(fd, DRM_IOCTL_FENCE_UNREFERENCE, &arg))
return -errno; return -errno;
return 0; return 0;
} }
@ -2427,7 +2439,7 @@ int drmFenceFlush(int fd, drmFence *fence, unsigned flush_type)
arg.handle = fence->handle; arg.handle = fence->handle;
arg.type = flush_type; arg.type = flush_type;
if (ioctl(fd, DRM_IOCTL_FENCE_FLUSH, &arg)) if (drmIoctl(fd, DRM_IOCTL_FENCE_FLUSH, &arg))
return -errno; return -errno;
fence->fence_class = arg.fence_class; fence->fence_class = arg.fence_class;
fence->type = arg.type; fence->type = arg.type;
@ -2442,7 +2454,7 @@ int drmFenceUpdate(int fd, drmFence *fence)
memset(&arg, 0, sizeof(arg)); memset(&arg, 0, sizeof(arg));
arg.handle = fence->handle; arg.handle = fence->handle;
if (ioctl(fd, DRM_IOCTL_FENCE_SIGNALED, &arg)) if (drmIoctl(fd, DRM_IOCTL_FENCE_SIGNALED, &arg))
return -errno; return -errno;
fence->fence_class = arg.fence_class; fence->fence_class = arg.fence_class;
fence->type = arg.type; fence->type = arg.type;
@ -2482,7 +2494,7 @@ int drmFenceEmit(int fd, unsigned flags, drmFence *fence, unsigned emit_type)
arg.handle = fence->handle; arg.handle = fence->handle;
arg.type = emit_type; arg.type = emit_type;
if (ioctl(fd, DRM_IOCTL_FENCE_EMIT, &arg)) if (drmIoctl(fd, DRM_IOCTL_FENCE_EMIT, &arg))
return -errno; return -errno;
fence->fence_class = arg.fence_class; fence->fence_class = arg.fence_class;
fence->type = arg.type; fence->type = arg.type;
@ -2520,7 +2532,7 @@ drmIoctlTimeout(int fd, unsigned long request, void *argp)
int ret; int ret;
do { do {
ret = ioctl(fd, request, argp); ret = drmIoctl(fd, request, argp);
if (ret != 0 && errno == EAGAIN) { if (ret != 0 && errno == EAGAIN) {
if (!haveThen) { if (!haveThen) {
gettimeofday(&then, NULL); gettimeofday(&then, NULL);
@ -2630,7 +2642,7 @@ int drmBOReference(int fd, unsigned handle, drmBO *buf)
memset(&arg, 0, sizeof(arg)); memset(&arg, 0, sizeof(arg));
req->handle = handle; req->handle = handle;
if (ioctl(fd, DRM_IOCTL_BO_REFERENCE, &arg)) if (drmIoctl(fd, DRM_IOCTL_BO_REFERENCE, &arg))
return -errno; return -errno;
drmBOCopyReply(rep, buf); drmBOCopyReply(rep, buf);
@ -2654,7 +2666,7 @@ int drmBOUnreference(int fd, drmBO *buf)
memset(&arg, 0, sizeof(arg)); memset(&arg, 0, sizeof(arg));
arg.handle = buf->handle; arg.handle = buf->handle;
if (ioctl(fd, DRM_IOCTL_BO_UNREFERENCE, &arg)) if (drmIoctl(fd, DRM_IOCTL_BO_UNREFERENCE, &arg))
return -errno; return -errno;
buf->handle = 0; buf->handle = 0;
@ -2724,7 +2736,7 @@ int drmBOUnmap(int fd, drmBO *buf)
memset(&arg, 0, sizeof(arg)); memset(&arg, 0, sizeof(arg));
arg.handle = buf->handle; arg.handle = buf->handle;
if (ioctl(fd, DRM_IOCTL_BO_UNMAP, &arg)) { if (drmIoctl(fd, DRM_IOCTL_BO_UNMAP, &arg)) {
return -errno; return -errno;
} }
buf->mapCount--; buf->mapCount--;
@ -2770,7 +2782,7 @@ int drmBOInfo(int fd, drmBO *buf)
memset(&arg, 0, sizeof(arg)); memset(&arg, 0, sizeof(arg));
req->handle = buf->handle; req->handle = buf->handle;
ret = ioctl(fd, DRM_IOCTL_BO_INFO, &arg); ret = drmIoctl(fd, DRM_IOCTL_BO_INFO, &arg);
if (ret) if (ret)
return -errno; return -errno;
@ -2825,7 +2837,7 @@ int drmMMInit(int fd, unsigned long pOffset, unsigned long pSize,
arg.p_size = pSize; arg.p_size = pSize;
arg.mem_type = memType; arg.mem_type = memType;
if (ioctl(fd, DRM_IOCTL_MM_INIT, &arg)) if (drmIoctl(fd, DRM_IOCTL_MM_INIT, &arg))
return -errno; return -errno;
return 0; return 0;
} }
@ -2837,7 +2849,7 @@ int drmMMTakedown(int fd, unsigned memType)
memset(&arg, 0, sizeof(arg)); memset(&arg, 0, sizeof(arg));
arg.mem_type = memType; arg.mem_type = memType;
if (ioctl(fd, DRM_IOCTL_MM_TAKEDOWN, &arg)) if (drmIoctl(fd, DRM_IOCTL_MM_TAKEDOWN, &arg))
return -errno; return -errno;
return 0; return 0;
} }
@ -2879,7 +2891,7 @@ int drmMMInfo(int fd, unsigned memType, uint64_t *size)
arg.mem_type = memType; arg.mem_type = memType;
if (ioctl(fd, DRM_IOCTL_MM_INFO, &arg)) if (drmIoctl(fd, DRM_IOCTL_MM_INFO, &arg))
return -errno; return -errno;
*size = arg.p_size; *size = arg.p_size;
@ -2894,7 +2906,7 @@ int drmBOVersion(int fd, unsigned int *major,
int ret; int ret;
memset(&arg, 0, sizeof(arg)); memset(&arg, 0, sizeof(arg));
ret = ioctl(fd, DRM_IOCTL_BO_VERSION, &arg); ret = drmIoctl(fd, DRM_IOCTL_BO_VERSION, &arg);
if (ret) if (ret)
return -errno; return -errno;