广东省建设见证员网站,建设网站方式有哪些,网站换域名要怎么做,网站模板带有sql后台下载接前一篇文章#xff1a;libdrm全解析十八 —— 源码全解析#xff08;15#xff09; 本文参考以下博文#xff1a;
DRM 驱动程序开发#xff08;VKMS#xff09;
特此致谢#xff01; 本文继续对include/drm/drm.h中实际功能宏定义进行讲解。
27. DRM_IOCTL_SET_SAR…接前一篇文章libdrm全解析十八 —— 源码全解析15 本文参考以下博文
DRM 驱动程序开发VKMS
特此致谢 本文继续对include/drm/drm.h中实际功能宏定义进行讲解。
27. DRM_IOCTL_SET_SAREA_CTX
第27个宏是DRM_IOCTL_SET_SAREA_CTX相应代码如下
#define DRM_IOCTL_SET_SAREA_CTX DRM_IOW( 0x1c, struct drm_ctx_priv_map)
结合之前文章中的_IOW(type,nr,size)的最终定义得到如下代码
#define DRM_IOCTL_SET_SAREA_CTX ( ((1) 30) | ((d) 8) | ((0x1c) 0) | ((sizeof(struct drm_ctx_priv_map)) 16) )
struct drm_ctx_priv_map在同文件include/drm/drm.h中定义代码如下
struct drm_ctx_priv_map {unsigned int ctx_id; /** Context requesting private mapping */void *handle; /** Handle of map */
};
drm_ctx_priv_map结构中各成员的意义代码注释描述得很清楚了在此无需赘述。
DRM_IOCTL_SET_SAREA_CTX对应的Userspace API为drmAddContextPrivateMapping()。该函数也是在xf86drm.c中代码如下
drm_public int drmAddContextPrivateMapping(int fd, drm_context_t ctx_id,drm_handle_t handle)
{drm_ctx_priv_map_t map;memclear(map);map.ctx_id ctx_id;map.handle (void *)(uintptr_t)handle;if (drmIoctl(fd, DRM_IOCTL_SET_SAREA_CTX, map))return -errno;return 0;
}
函数的作用是添加上下文私有映射。此函数在后文具体讲解函数的时候进行详细解析。在此先认识一下、有个印象就好。 28. DRM_IOCTL_GET_SAREA_CTX
第28个宏是DRM_IOCTL_GET_SAREA_CTX相应代码如下
#define DRM_IOCTL_GET_SAREA_CTX DRM_IOWR(0x1d, struct drm_ctx_priv_map)
结合之前文章中的_IOWR(type,nr,size)的最终定义得到如下代码
#define DRM_IOCTL_GET_SAREA_CTX ( ((3) 30) | ((d) 8) | ((0x1d) 0) | ((sizeof(struct drm_ctx_priv_map)) 16) )
struct drm_ctx_priv_map的定义上边已给出在此不重复。
DRM_IOCTL_GET_SAREA_CTX对应的Userspace API为drmGetContextPrivateMapping()。该函数也是在xf86drm.c中代码如下
drm_public int drmGetContextPrivateMapping(int fd, drm_context_t ctx_id,drm_handle_t *handle)
{drm_ctx_priv_map_t map;memclear(map);map.ctx_id ctx_id;if (drmIoctl(fd, DRM_IOCTL_GET_SAREA_CTX, map))return -errno;if (handle)*handle (drm_handle_t)(uintptr_t)map.handle;return 0;
}
函数的作用是获得上下文私有映射。此函数在后文具体讲解函数的时候进行详细解析。在此先认识一下、有个印象就好。
其余宏定义将在后续文章中继续解析。