libdrm全解析十九 —— 源码全解析(16)

接前一篇文章: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;
}

函数的作用是获得上下文私有映射。此函数在后文具体讲解函数的时候进行详细解析。在此先认识一下、有个印象就好。

其余宏定义将在后续文章中继续解析。

猜你喜欢

转载自blog.csdn.net/phmatthaus/article/details/132491133