Summary of the work flow I've been following to add drm ioctls... First read this: http://valgrind.org/docs/manual/dist.readme-missing.html - Search this file for the case I want to add - Add it to coregrind/m_syswrap/syswrap-linux.c PRE(sys_ioctl) along with all the other drm ioctls. Note: As I've been adding them I've maintained the same order as this file. - git grep in linux for DRM_IOCTL_DEF|grep to find the kernelspace code code: e.g. git grep DRM_IOCTL_DEF|grep DRM_IOCTL_VERSION - Also git grep in libdrm for the ioctl to find the userspace code - figure out what gets read/written from/to and complete the syswrap code - If any writes are done, copy the code to POST(sys_ioctl) - remove the lines relating to READS - s/PRE_MEM_WRITE/POST_MEM_WRITE/ - remove the first string argument not accepted by POST_MEM_WRITE case VKI_DRM_IOCTL_VERSION: if (ARG3) { struct vki_drm_version *data = (struct vki_drm_version *)ARG3; PRE_MEM_READ("ioctl(DRM_VERSION).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_VERSION).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_version) */ } break; case VKI_DRM_IOCTL_GET_UNIQUE: if (ARG3) { struct vki_drm_unique *data = (struct vki_drm_unique *)ARG3; PRE_MEM_READ("ioctl(DRM_GET_UNIQUE).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_GET_UNIQUE).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_unique) */ } break; case VKI_DRM_IOCTL_GET_MAGIC: if (ARG3) { struct vki_drm_auth *data = (struct vki_drm_auth *)ARG3; PRE_MEM_WRITE("ioctl(DRM_GET_MAGIC).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOR, struct vki_drm_auth) */ } break; case VKI_DRM_IOCTL_IRQ_BUSID: if (ARG3) { struct vki_drm_irq_busid *data = (struct vki_drm_irq_busid *)ARG3; PRE_MEM_READ("ioctl(DRM_IRQ_BUSID).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_IRQ_BUSID).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_irq_busid) */ } break; case VKI_DRM_IOCTL_GET_MAP: if (ARG3) { struct vki_drm_map *data = (struct vki_drm_map *)ARG3; PRE_MEM_READ("ioctl(DRM_GET_MAP).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_GET_MAP).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_map) */ } break; case VKI_DRM_IOCTL_GET_CLIENT: if (ARG3) { struct vki_drm_client *data = (struct vki_drm_client *)ARG3; PRE_MEM_READ("ioctl(DRM_GET_CLIENT).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_GET_CLIENT).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_client) */ } break; case VKI_DRM_IOCTL_GET_STATS: if (ARG3) { struct vki_drm_stats *data = (struct vki_drm_stats *)ARG3; PRE_MEM_WRITE("ioctl(DRM_GET_STATS).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOR, struct vki_drm_stats) */ } break; case VKI_DRM_IOCTL_SET_VERSION: if (ARG3) { struct vki_drm_set_version *data = (struct vki_drm_set_version *)ARG3; PRE_MEM_READ("ioctl(DRM_SET_VERSION).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_SET_VERSION).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_set_version) */ } break; case VKI_DRM_IOCTL_MODESET_CTL: if (ARG3) { struct vki_drm_modeset_ctl *data = (struct vki_drm_modeset_ctl *)ARG3; PRE_MEM_READ("ioctl(DRM_MODESET_CTL).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_modeset_ctl) */ } break; case VKI_DRM_IOCTL_GEM_CLOSE: if (ARG3) { struct vki_drm_gem_close *data = (struct vki_drm_gem_close *)ARG3; PRE_MEM_READ("ioctl(DRM_GEM_CLOSE).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_gem_close) */ } break; case VKI_DRM_IOCTL_GEM_FLINK: if (ARG3) { struct vki_drm_gem_flink *data = (struct vki_drm_gem_flink *)ARG3; PRE_MEM_READ("ioctl(DRM_GEM_FLINK).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_GEM_FLINK).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_gem_flink) */ } break; case VKI_DRM_IOCTL_GEM_OPEN: if (ARG3) { struct vki_drm_gem_open *data = (struct vki_drm_gem_open *)ARG3; PRE_MEM_READ("ioctl(DRM_GEM_OPEN).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_GEM_OPEN).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_gem_open) */ } break; case VKI_DRM_IOCTL_SET_UNIQUE: if (ARG3) { struct vki_drm_unique *data = (struct vki_drm_unique *)ARG3; PRE_MEM_READ("ioctl(DRM_SET_UNIQUE).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_unique) */ } break; case VKI_DRM_IOCTL_AUTH_MAGIC: if (ARG3) { struct vki_drm_auth *data = (struct vki_drm_auth *)ARG3; PRE_MEM_READ("ioctl(DRM_AUTH_MAGIC).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_auth) */ } break; case VKI_DRM_IOCTL_BLOCK: if (ARG3) { struct vki_drm_block *data = (struct vki_drm_block *)ARG3; PRE_MEM_READ("ioctl(DRM_BLOCK).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_BLOCK).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_block) */ } break; case VKI_DRM_IOCTL_UNBLOCK: if (ARG3) { struct vki_drm_block *data = (struct vki_drm_block *)ARG3; PRE_MEM_READ("ioctl(DRM_UNBLOCK).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_UNBLOCK).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_block) */ } break; case VKI_DRM_IOCTL_CONTROL: if (ARG3) { struct vki_drm_control *data = (struct vki_drm_control *)ARG3; PRE_MEM_READ("ioctl(DRM_CONTROL).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_control) */ } break; case VKI_DRM_IOCTL_ADD_MAP: if (ARG3) { struct vki_drm_map *data = (struct vki_drm_map *)ARG3; PRE_MEM_READ("ioctl(DRM_ADD_MAP).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_ADD_MAP).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_map) */ } break; case VKI_DRM_IOCTL_ADD_BUFS: if (ARG3) { if (ARG3) { struct vki_drm_buf_desc *data = (struct vki_drm_buf_desc *)ARG3; PRE_MEM_READ("ioctl(DRM_ADD_BUFS).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_ADD_BUFS).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_buf_desc) */ } } break; case VKI_DRM_IOCTL_MARK_BUFS: if (ARG3) { struct vki_drm_buf_desc *data = (struct vki_drm_buf_desc *)ARG3; PRE_MEM_READ("ioctl(DRM_MARK_BUFS).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_buf_desc) */ } break; case VKI_DRM_IOCTL_INFO_BUFS: if (ARG3) { struct vki_drm_buf_info *data = (struct vki_drm_buf_info *)ARG3; PRE_MEM_READ("ioctl(DRM_INFO_BUFS).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_INFO_BUFS).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_buf_info) */ } break; case VKI_DRM_IOCTL_MAP_BUFS: if (ARG3) { struct vki_drm_buf_map *data = (struct vki_drm_buf_map *)ARG3; PRE_MEM_READ("ioctl(DRM_MAP_BUFS).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MAP_BUFS).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_buf_map) */ } break; case VKI_DRM_IOCTL_FREE_BUFS: if (ARG3) { struct vki_drm_buf_free *data = (struct vki_drm_buf_free *)ARG3; PRE_MEM_READ("ioctl(DRM_FREE_BUFS).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_buf_free) */ } break; case VKI_DRM_IOCTL_RM_MAP: if (ARG3) { struct vki_drm_map *data = (struct vki_drm_map *)ARG3; PRE_MEM_READ("ioctl(DRM_RM_MAP).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_map) */ } break; case VKI_DRM_IOCTL_SET_SAREA_CTX: if (ARG3) { struct vki_drm_ctx_priv_map *data = (struct vki_drm_ctx_priv_map *)ARG3; PRE_MEM_READ("ioctl(DRM_SET_SAREA_CTX).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_ctx_priv_map) */ } break; case VKI_DRM_IOCTL_GET_SAREA_CTX: if (ARG3) { struct vki_drm_ctx_priv_map *data = (struct vki_drm_ctx_priv_map *)ARG3; PRE_MEM_READ("ioctl(DRM_GET_SAREA_CTX).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_GET_SAREA_CTX).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_ctx_priv_map) */ } break; case VKI_DRM_IOCTL_SET_MASTER: VKI_DRM_IO, ) break; case VKI_DRM_IOCTL_DROP_MASTER: VKI_DRM_IO, ) break; case VKI_DRM_IOCTL_ADD_CTX: if (ARG3) { struct vki_drm_ctx *data = (struct vki_drm_ctx *)ARG3; PRE_MEM_READ("ioctl(DRM_ADD_CTX).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_ADD_CTX).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_ctx) */ } break; case VKI_DRM_IOCTL_RM_CTX: if (ARG3) { struct vki_drm_ctx *data = (struct vki_drm_ctx *)ARG3; PRE_MEM_READ("ioctl(DRM_RM_CTX).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_RM_CTX).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_ctx) */ } break; case VKI_DRM_IOCTL_MOD_CTX: if (ARG3) { struct vki_drm_ctx *data = (struct vki_drm_ctx *)ARG3; PRE_MEM_READ("ioctl(DRM_MOD_CTX).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_ctx) */ } break; case VKI_DRM_IOCTL_GET_CTX: if (ARG3) { struct vki_drm_ctx *data = (struct vki_drm_ctx *)ARG3; PRE_MEM_READ("ioctl(DRM_GET_CTX).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_GET_CTX).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_ctx) */ } break; case VKI_DRM_IOCTL_SWITCH_CTX: if (ARG3) { struct vki_drm_ctx *data = (struct vki_drm_ctx *)ARG3; PRE_MEM_READ("ioctl(DRM_SWITCH_CTX).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_ctx) */ } break; case VKI_DRM_IOCTL_NEW_CTX: if (ARG3) { struct vki_drm_ctx *data = (struct vki_drm_ctx *)ARG3; PRE_MEM_READ("ioctl(DRM_NEW_CTX).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_ctx) */ } break; case VKI_DRM_IOCTL_RES_CTX: if (ARG3) { struct vki_drm_ctx_res *data = (struct vki_drm_ctx_res *)ARG3; PRE_MEM_READ("ioctl(DRM_RES_CTX).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_RES_CTX).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_ctx_res) */ } break; case VKI_DRM_IOCTL_ADD_DRAW: if (ARG3) { struct vki_drm_draw *data = (struct vki_drm_draw *)ARG3; PRE_MEM_READ("ioctl(DRM_ADD_DRAW).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_ADD_DRAW).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_draw) */ } break; case VKI_DRM_IOCTL_RM_DRAW: if (ARG3) { struct vki_drm_draw *data = (struct vki_drm_draw *)ARG3; PRE_MEM_READ("ioctl(DRM_RM_DRAW).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_RM_DRAW).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_draw) */ } break; case VKI_DRM_IOCTL_DMA: if (ARG3) { struct vki_drm_dma *data = (struct vki_drm_dma *)ARG3; PRE_MEM_READ("ioctl(DRM_DMA).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_DMA).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_dma) */ } break; case VKI_DRM_IOCTL_LOCK: if (ARG3) { struct vki_drm_lock *data = (struct vki_drm_lock *)ARG3; PRE_MEM_READ("ioctl(DRM_LOCK).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_lock) */ } break; case VKI_DRM_IOCTL_UNLOCK: if (ARG3) { struct vki_drm_lock *data = (struct vki_drm_lock *)ARG3; PRE_MEM_READ("ioctl(DRM_UNLOCK).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_lock) */ } break; case VKI_DRM_IOCTL_FINISH: if (ARG3) { struct vki_drm_lock *data = (struct vki_drm_lock *)ARG3; PRE_MEM_READ("ioctl(DRM_FINISH).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_lock) */ } break; case VKI_DRM_IOCTL_AGP_ACQUIRE: VKI_DRM_IO, ) break; case VKI_DRM_IOCTL_AGP_RELEASE: VKI_DRM_IO, ) break; case VKI_DRM_IOCTL_AGP_ENABLE: if (ARG3) { struct vki_drm_agp_mode *data = (struct vki_drm_agp_mode *)ARG3; PRE_MEM_READ("ioctl(DRM_AGP_ENABLE).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_agp_mode) */ } break; case VKI_DRM_IOCTL_AGP_INFO: if (ARG3) { struct vki_drm_agp_info *data = (struct vki_drm_agp_info *)ARG3; PRE_MEM_WRITE("ioctl(DRM_AGP_INFO).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOR, struct vki_drm_agp_info) */ } break; case VKI_DRM_IOCTL_AGP_ALLOC: if (ARG3) { struct vki_drm_agp_buffer *data = (struct vki_drm_agp_buffer *)ARG3; PRE_MEM_READ("ioctl(DRM_AGP_ALLOC).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_AGP_ALLOC).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_agp_buffer) */ } break; case VKI_DRM_IOCTL_AGP_FREE: if (ARG3) { struct vki_drm_agp_buffer *data = (struct vki_drm_agp_buffer *)ARG3; PRE_MEM_READ("ioctl(DRM_AGP_FREE).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_agp_buffer) */ } break; case VKI_DRM_IOCTL_AGP_BIND: if (ARG3) { struct vki_drm_agp_binding *data = (struct vki_drm_agp_binding *)ARG3; PRE_MEM_READ("ioctl(DRM_AGP_BIND).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_agp_binding) */ } break; case VKI_DRM_IOCTL_AGP_UNBIND: if (ARG3) { struct vki_drm_agp_binding *data = (struct vki_drm_agp_binding *)ARG3; PRE_MEM_READ("ioctl(DRM_AGP_UNBIND).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_agp_binding) */ } break; case VKI_DRM_IOCTL_SG_ALLOC: if (ARG3) { struct vki_drm_scatter_gather *data = (struct vki_drm_scatter_gather *)ARG3; PRE_MEM_READ("ioctl(DRM_SG_ALLOC).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_SG_ALLOC).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_scatter_gather) */ } break; case VKI_DRM_IOCTL_SG_FREE: if (ARG3) { struct vki_drm_scatter_gather *data = (struct vki_drm_scatter_gather *)ARG3; PRE_MEM_READ("ioctl(DRM_SG_FREE).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_scatter_gather) */ } break; case VKI_DRM_IOCTL_WAIT_VBLANK: if (ARG3) { union vki_drm_wait_vblank *data = (union vki_drm_wait_vblank *)ARG3; PRE_MEM_READ("ioctl(DRM_WAIT_VBLANK).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_WAIT_VBLANK).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, union vki_drm_wait_vblank) */ } break; case VKI_DRM_IOCTL_UPDATE_DRAW: if (ARG3) { struct vki_drm_update_draw *data = (struct vki_drm_update_draw *)ARG3; PRE_MEM_READ("ioctl(DRM_UPDATE_DRAW).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_update_draw) */ } break; case VKI_DRM_IOCTL_MODE_GETRESOURCES: if (ARG3) { struct vki_drm_mode_card_res *data = (struct vki_drm_mode_card_res *)ARG3; PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_mode_card_res) */ } break; case VKI_DRM_IOCTL_MODE_GETCRTC: if (ARG3) { struct vki_drm_mode_crtc *data = (struct vki_drm_mode_crtc *)ARG3; PRE_MEM_READ("ioctl(DRM_MODE_GETCRTC).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_mode_crtc) */ } break; case VKI_DRM_IOCTL_MODE_SETCRTC: if (ARG3) { struct vki_drm_mode_crtc *data = (struct vki_drm_mode_crtc *)ARG3; PRE_MEM_READ("ioctl(DRM_MODE_SETCRTC).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MODE_SETCRTC).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_mode_crtc) */ } break; case VKI_DRM_IOCTL_MODE_CURSOR: if (ARG3) { struct vki_drm_mode_cursor *data = (struct vki_drm_mode_cursor *)ARG3; PRE_MEM_READ("ioctl(DRM_MODE_CURSOR).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MODE_CURSOR).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_mode_cursor) */ } break; case VKI_DRM_IOCTL_MODE_GETGAMMA: if (ARG3) { struct vki_drm_mode_crtc_lut *data = (struct vki_drm_mode_crtc_lut *)ARG3; PRE_MEM_READ("ioctl(DRM_MODE_GETGAMMA).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MODE_GETGAMMA).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_mode_crtc_lut) */ } break; case VKI_DRM_IOCTL_MODE_SETGAMMA: if (ARG3) { struct vki_drm_mode_crtc_lut *data = (struct vki_drm_mode_crtc_lut *)ARG3; PRE_MEM_READ("ioctl(DRM_MODE_SETGAMMA).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MODE_SETGAMMA).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_mode_crtc_lut) */ } break; case VKI_DRM_IOCTL_MODE_GETENCODER: if (ARG3) { struct vki_drm_mode_get_encoder *data = (struct vki_drm_mode_get_encoder *)ARG3; PRE_MEM_READ("ioctl(DRM_MODE_GETENCODER).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MODE_GETENCODER).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_mode_get_encoder) */ } break; case VKI_DRM_IOCTL_MODE_GETCONNECTOR: if (ARG3) { struct vki_drm_mode_get_connector *data = (struct vki_drm_mode_get_connector *)ARG3; PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_mode_get_connector) */ } break; case VKI_DRM_IOCTL_MODE_ATTACHMODE: if (ARG3) { struct vki_drm_mode_mode_cmd *data = (struct vki_drm_mode_mode_cmd *)ARG3; PRE_MEM_READ("ioctl(DRM_MODE_ATTACHMODE).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MODE_ATTACHMODE).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_mode_mode_cmd) */ } break; case VKI_DRM_IOCTL_MODE_DETACHMODE: if (ARG3) { struct vki_drm_mode_mode_cmd *data = (struct vki_drm_mode_mode_cmd *)ARG3; PRE_MEM_READ("ioctl(DRM_MODE_DETACHMODE).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MODE_DETACHMODE).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_mode_mode_cmd) */ } break; case VKI_DRM_IOCTL_MODE_GETPROPERTY: if (ARG3) { struct vki_drm_mode_get_property *data = (struct vki_drm_mode_get_property *)ARG3; PRE_MEM_READ("ioctl(DRM_MODE_GETPROPERTY).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MODE_GETPROPERTY).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_mode_get_property) */ } break; case VKI_DRM_IOCTL_MODE_SETPROPERTY: if (ARG3) { struct vki_drm_mode_connector_set_property *data = (struct vki_drm_mode_connector_set_property *)ARG3; PRE_MEM_READ("ioctl(DRM_MODE_SETPROPERTY).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MODE_SETPROPERTY).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_mode_connector_set_property) */ } break; case VKI_DRM_IOCTL_MODE_GETPROPBLOB: if (ARG3) { struct vki_drm_mode_get_blob *data = (struct vki_drm_mode_get_blob *)ARG3; PRE_MEM_READ("ioctl(DRM_MODE_GETPROPBLOB).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MODE_GETPROPBLOB).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_mode_get_blob) */ } break; case VKI_DRM_IOCTL_MODE_GETFB: if (ARG3) { struct vki_drm_mode_fb_cmd *data = (struct vki_drm_mode_fb_cmd *)ARG3; PRE_MEM_READ("ioctl(DRM_MODE_GETFB).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MODE_GETFB).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_mode_fb_cmd) */ } break; case VKI_DRM_IOCTL_MODE_ADDFB: if (ARG3) { struct vki_drm_mode_fb_cmd *data = (struct vki_drm_mode_fb_cmd *)ARG3; PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MODE_ADDFB).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_mode_fb_cmd) */ } break; case VKI_DRM_IOCTL_MODE_RMFB: if (ARG3) { unsigned int *data = (unsigned int *)ARG3; PRE_MEM_READ("ioctl(DRM_MODE_RMFB).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_MODE_RMFB).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, unsigned int) */ } break; case VKI_DRM_IOCTL_I915_INIT: if (ARG3) { vki_drm_i915_init_t *data = (vki_drm_i915_init_t *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_INIT).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, vki_drm_i915_init_t) */ } break; case VKI_DRM_IOCTL_I915_FLUSH: VKI_DRM_IO, ) break; case VKI_VKI_DRM_IOCTL_I915_FLIP: VKI_DRM_IO, ) break; case VKI_VKI_DRM_IOCTL_I915_BATCHBUFFER: if (ARG3) { vki_drm_i915_batchbuffer_t *data = (vki_drm_i915_batchbuffer_t *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_BATCHBUFFER).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, vki_drm_i915_batchbuffer_t) */ } break; case VKI_DRM_IOCTL_I915_IRQ_EMIT: if (ARG3) { vki_drm_i915_irq_emit_t *data = (vki_drm_i915_irq_emit_t *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_IRQ_EMIT).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_I915_IRQ_EMIT).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, vki_drm_i915_irq_emit_t) */ } break; case VKI_DRM_IOCTL_I915_IRQ_WAIT: if (ARG3) { vki_drm_i915_irq_wait_t *data = (vki_drm_i915_irq_wait_t *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_IRQ_WAIT).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, vki_drm_i915_irq_wait_t) */ } break; case VKI_DRM_IOCTL_I915_GETPARAM: if (ARG3) { vki_drm_i915_getparam_t *data = (vki_drm_i915_getparam_t *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_GETPARAM).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_I915_GETPARAM).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, vki_drm_i915_getparam_t) */ } break; case VKI_DRM_IOCTL_I915_SETPARAM: if (ARG3) { vki_drm_i915_setparam_t *data = (vki_drm_i915_setparam_t *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_SETPARAM).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, vki_drm_i915_setparam_t) */ } break; case VKI_DRM_IOCTL_I915_ALLOC: if (ARG3) { vki_drm_i915_mem_alloc_t *data = (vki_drm_i915_mem_alloc_t *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_ALLOC).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_I915_ALLOC).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, vki_drm_i915_mem_alloc_t) */ } break; case VKI_DRM_IOCTL_I915_FREE: if (ARG3) { vki_drm_i915_mem_free_t *data = (vki_drm_i915_mem_free_t *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_FREE).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, vki_drm_i915_mem_free_t) */ } break; case VKI_DRM_IOCTL_I915_INIT_HEAP: if (ARG3) { vki_drm_i915_mem_init_heap_t *data = (vki_drm_i915_mem_init_heap_t *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_INIT_HEAP).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, vki_drm_i915_mem_init_heap_t) */ } break; case VKI_DRM_IOCTL_I915_CMDBUFFER: if (ARG3) { vki_drm_i915_cmdbuffer_t *data = (vki_drm_i915_cmdbuffer_t *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_CMDBUFFER).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, vki_drm_i915_cmdbuffer_t) */ } break; case VKI_DRM_IOCTL_I915_DESTROY_HEAP: if (ARG3) { vki_drm_i915_mem_destroy_heap_t *data = (vki_drm_i915_mem_destroy_heap_t *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_DESTROY_HEAP).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, vki_drm_i915_mem_destroy_heap_t) */ } break; case VKI_DRM_IOCTL_I915_SET_VBLANK_PIPE: if (ARG3) { vki_drm_i915_vblank_pipe_t *data = (vki_drm_i915_vblank_pipe_t *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_SET_VBLANK_PIPE).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, vki_drm_i915_vblank_pipe_t) */ } break; case VKI_DRM_IOCTL_I915_GET_VBLANK_PIPE: if (ARG3) { vki_drm_i915_vblank_pipe_t *data = (vki_drm_i915_vblank_pipe_t *)ARG3; PRE_MEM_WRITE("ioctl(DRM_I915_GET_VBLANK_PIPE).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOR, vki_drm_i915_vblank_pipe_t) */ } break; case VKI_DRM_IOCTL_I915_VBLANK_SWAP: if (ARG3) { vki_drm_i915_vblank_swap_t *data = (vki_drm_i915_vblank_swap_t *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_VBLANK_SWAP).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_I915_VBLANK_SWAP).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, vki_drm_i915_vblank_swap_t) */ } break; case VKI_DRM_IOCTL_I915_GEM_INIT: if (ARG3) { struct vki_drm_i915_gem_init *data = (struct vki_drm_i915_gem_init *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_GEM_INIT).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_i915_gem_init) */ } break; case VKI_DRM_IOCTL_I915_GEM_EXECBUFFER: if (ARG3) { struct vki_drm_i915_gem_execbuffer *data = (struct vki_drm_i915_gem_execbuffer *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_GEM_EXECBUFFER).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_i915_gem_execbuffer) */ } break; case VKI_DRM_IOCTL_I915_GEM_PIN: if (ARG3) { struct vki_drm_i915_gem_pin *data = (struct vki_drm_i915_gem_pin *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_GEM_PIN).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_I915_GEM_PIN).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_i915_gem_pin) */ } break; case VKI_DRM_IOCTL_I915_GEM_UNPIN: if (ARG3) { struct vki_drm_i915_gem_unpin *data = (struct vki_drm_i915_gem_unpin *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_GEM_UNPIN).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_i915_gem_unpin) */ } break; case VKI_DRM_IOCTL_I915_GEM_BUSY: if (ARG3) { struct vki_drm_i915_gem_busy *data = (struct vki_drm_i915_gem_busy *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_GEM_BUSY).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_I915_GEM_BUSY).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_i915_gem_busy) */ } break; case VKI_DRM_IOCTL_I915_GEM_THROTTLE: VKI_DRM_IO, ) break; case VKI_DRM_IOCTL_I915_GEM_ENTERVT: VKI_DRM_IO, ) break; case VKI_DRM_IOCTL_I915_GEM_LEAVEVT: VKI_DRM_IO, ) break; case VKI_DRM_IOCTL_I915_GEM_CREATE: if (ARG3) { struct vki_drm_i915_gem_create *data = (struct vki_drm_i915_gem_create *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_GEM_CREATE).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_I915_GEM_CREATE).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_i915_gem_create) */ } break; case VKI_DRM_IOCTL_I915_GEM_PREAD: if (ARG3) { struct vki_drm_i915_gem_pread *data = (struct vki_drm_i915_gem_pread *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_GEM_PREAD).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_i915_gem_pread) */ } break; case VKI_DRM_IOCTL_I915_GEM_PWRITE: if (ARG3) { struct vki_drm_i915_gem_pwrite *data = (struct vki_drm_i915_gem_pwrite *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_GEM_PWRITE).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_i915_gem_pwrite) */ } break; case VKI_DRM_IOCTL_I915_GEM_MMAP: if (ARG3) { struct vki_drm_i915_gem_mmap *data = (struct vki_drm_i915_gem_mmap *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAP).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_I915_GEM_MMAP).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_i915_gem_mmap) */ } break; case VKI_DRM_IOCTL_I915_GEM_MMAP_GTT: if (ARG3) { struct vki_drm_i915_gem_mmap_gtt *data = (struct vki_drm_i915_gem_mmap_gtt *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAP_GTT).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_I915_GEM_MMAP_GTT).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_i915_gem_mmap_gtt) */ } break; case VKI_DRM_IOCTL_I915_GEM_SET_DOMAIN: if (ARG3) { struct vki_drm_i915_gem_set_domain *data = (struct vki_drm_i915_gem_set_domain *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_GEM_SET_DOMAIN).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_i915_gem_set_domain) */ } break; case VKI_DRM_IOCTL_I915_GEM_SW_FINISH: if (ARG3) { struct vki_drm_i915_gem_sw_finish *data = (struct vki_drm_i915_gem_sw_finish *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_GEM_SW_FINISH).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOW, struct vki_drm_i915_gem_sw_finish) */ } break; case VKI_DRM_IOCTL_I915_GEM_SET_TILING: if (ARG3) { struct vki_drm_i915_gem_set_tiling *data = (struct vki_drm_i915_gem_set_tiling *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_GEM_SET_TILING).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_I915_GEM_SET_TILING).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_i915_gem_set_tiling) */ } break; case VKI_DRM_IOCTL_I915_GEM_GET_TILING: if (ARG3) { struct vki_drm_i915_gem_get_tiling *data = (struct vki_drm_i915_gem_get_tiling *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_GEM_GET_TILING).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_I915_GEM_GET_TILING).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_i915_gem_get_tiling) */ } break; case VKI_DRM_IOCTL_I915_GEM_GET_APERTURE: if (ARG3) { struct vki_drm_i915_gem_get_aperture *data = (struct vki_drm_i915_gem_get_aperture *)ARG3; PRE_MEM_WRITE("ioctl(DRM_I915_GEM_GET_APERTURE).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOR, struct vki_drm_i915_gem_get_aperture) */ } break; case VKI_DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID: if (ARG3) { struct vki_drm_intel_get_pipe_from_crtc_id *data = (struct vki_drm_intel_get_pipe_from_crtc_id *)ARG3; PRE_MEM_READ("ioctl(DRM_I915_GET_PIPE_FROM_CRTC_ID).FIXME", (Addr)&??data->??, sizeof(data->??)); PRE_MEM_WRITE("ioctl(DRM_I915_GET_PIPE_FROM_CRTC_ID).FIXME", (Addr)&??data->??, sizeof(data->??)); /* VKI_DRM_IOWR, struct vki_drm_intel_get_pipe_from_crtc_id) */ } break;