typedef struct _hal_tbm_bufmgr_funcs hal_tbm_bufmgr_funcs;
typedef struct _hal_tbm_bo_funcs hal_tbm_bo_funcs;
+typedef hal_tbm_error (*hal_tbm_authenticated_drm_fd_handler)(hal_tbm_fd auth_fd, void *user_data);
+
struct _hal_tbm_backend_data {
hal_tbm_bufmgr *bufmgr; // handle
+ int has_drm_device;
+ struct {
+ hal_tbm_fd drm_fd;
+ int is_master;
+ hal_tbm_authenticated_drm_fd_handler auth_drm_fd_func;
+ void *user_data;
+ } drm_info;
+
hal_tbm_bufmgr_funcs *bufmgr_funcs;
hal_tbm_bo_funcs *bo_funcs;
};
struct _hal_tbm_bufmgr_funcs {
/* tbm_bufmgr_func */
hal_tbm_bufmgr_capability (*bufmgr_get_capabilities)(hal_tbm_bufmgr *bufmgr, hal_tbm_error *error);
- hal_tbm_error (*bufmgr_bind_native_display)(hal_tbm_bufmgr *bufmgr, hal_tbm_native_display *native_display);
hal_tbm_error (*bufmgr_get_supported_formats)(hal_tbm_bufmgr *bufmgr, uint32_t **formats, uint32_t *num);
hal_tbm_error (*bufmgr_get_plane_data)(hal_tbm_bufmgr *bufmgr, hal_tbm_format format, int plane_idx, int width, int height,
uint32_t *size, uint32_t *offset, uint32_t *pitch, int *bo_idx);
/* hal_tbm_backend */
hal_tbm_bufmgr *hal_tbm_backend_get_bufmgr(hal_tbm_backend *backend, hal_tbm_error *error);
+int hal_tbm_backend_has_drm_device(hal_tbm_backend *backend, hal_tbm_error *error);
+hal_tbm_fd hal_tbm_backend_get_master_drm_fd(hal_tbm_backend *backend, hal_tbm_error *error);
+
+hal_tbm_error hal_tbm_backend_set_authenticated_drm_fd(hal_tbm_backend *backend, hal_tbm_fd auth_drm_fd);
/* hal_tbm_bufmgr_funcs */
hal_tbm_bufmgr_capability hal_tbm_bufmgr_get_capabilities(hal_tbm_bufmgr *bufmgr, hal_tbm_error *error);
-hal_tbm_error hal_tbm_bufmgr_bind_native_display(hal_tbm_bufmgr *bufmgr, hal_tbm_native_display *native_display);
hal_tbm_error hal_tbm_bufmgr_get_supported_formats(hal_tbm_bufmgr *bufmgr, uint32_t **formats, uint32_t *num);
hal_tbm_error hal_tbm_bufmgr_get_plane_data(hal_tbm_bufmgr *bufmgr, hal_tbm_format format, int plane_idx, int width, int height,
uint32_t *size, uint32_t *offset, uint32_t *pitch, int *bo_idx);
return bufmgr;
}
+EXTERN int
+hal_tbm_backend_has_drm_device(hal_tbm_backend *backend, hal_tbm_error *error)
+{
+ hal_tbm_backend_data *backend_data = (hal_tbm_backend_data *)backend;
+
+ if (!backend_data || g_hal_tbm_backend_data != backend_data) {
+ _E("no backend_data\n");
+ if (error)
+ *error = HAL_TBM_ERROR_INVALID_OPERATION;
+ return 0;
+ }
+
+ return backend_data->has_drm_device;
+}
+
+EXTERN hal_tbm_fd
+hal_tbm_backend_get_master_drm_fd(hal_tbm_backend *backend, hal_tbm_error *error)
+{
+ hal_tbm_backend_data *backend_data = (hal_tbm_backend_data *)backend;
+
+ if (!backend_data || g_hal_tbm_backend_data != backend_data) {
+ _E("no backend_data\n");
+ if (error)
+ *error = HAL_TBM_ERROR_INVALID_OPERATION;
+ return -1;
+ }
+
+ if (!backend_data->drm_info.is_master) {
+ _I("no master_drm_fd");
+ return -1;
+ }
+
+ _I("master_drm_fd is %d", backend_data->drm_info.drm_fd);
+
+ return backend_data->drm_info.drm_fd;
+}
+
+EXTERN hal_tbm_error
+hal_tbm_backend_set_authenticated_drm_fd(hal_tbm_backend *backend, hal_tbm_fd auth_drm_fd)
+{
+ hal_tbm_backend_data *backend_data = (hal_tbm_backend_data *)backend;
+ int ret;
+
+ if (!backend_data || g_hal_tbm_backend_data != backend_data) {
+ _E("no backend_data\n");
+ return HAL_TBM_ERROR_INVALID_OPERATION;
+ }
+
+ if (!backend_data->drm_info.auth_drm_fd_func) {
+ _E("no backend_data->drm_info.auth_drm_fd_func\n");
+ return HAL_TBM_ERROR_INVALID_OPERATION;
+ }
+
+ ret = backend_data->drm_info.auth_drm_fd_func(auth_drm_fd, backend_data->drm_info.user_data);
+ if (ret != HAL_TBM_ERROR_NONE) {
+ _E("backend_data->drm_info.auth_drm_fd_func failed\n");
+ return ret;
+ }
+
+ return HAL_TBM_ERROR_NONE;
+}
+
/* tbm_bufmgr_func */
EXTERN hal_tbm_bufmgr_capability
hal_tbm_bufmgr_get_capabilities(hal_tbm_bufmgr *bufmgr, hal_tbm_error *error)
}
EXTERN hal_tbm_error
-hal_tbm_bufmgr_bind_native_display(hal_tbm_bufmgr *bufmgr, hal_tbm_native_display *native_display)
-{
- BUFMGR_FUNC_ENTRY(bufmgr_bind_native_display);
-
- return bufmgr_funcs->bufmgr_bind_native_display((hal_tbm_bufmgr *)bufmgr, native_display);
-}
-
-EXTERN hal_tbm_error
hal_tbm_bufmgr_get_supported_formats(hal_tbm_bufmgr *bufmgr, uint32_t **formats, uint32_t *num)
{
BUFMGR_FUNC_ENTRY(bufmgr_get_supported_formats);