From 441a12e75110f44dab1aadc8a6aa8366d3155c26 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Tue, 16 Feb 2021 11:51:22 +0900 Subject: [PATCH] add drm information from backend and to libtbm When tbm backend has master_drm_fd, hal-api-tbm sends it to libtbm. when tbm backend has no master_drm_fd, hal-api-tbm gets the authenticated fd from libtbm. Change-Id: I5858b8949680230f7f8c218ce3058448a8b88f0e --- include/hal-tbm-interface.h | 11 ++++++- include/hal-tbm.h | 5 +++- src/hal-api-tbm.c | 70 +++++++++++++++++++++++++++++++++++++++------ 3 files changed, 76 insertions(+), 10 deletions(-) diff --git a/include/hal-tbm-interface.h b/include/hal-tbm-interface.h index f0a961a..4270636 100644 --- a/include/hal-tbm-interface.h +++ b/include/hal-tbm-interface.h @@ -44,9 +44,19 @@ typedef struct _hal_tbm_backend_data hal_tbm_backend_data; 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; }; @@ -54,7 +64,6 @@ struct _hal_tbm_backend_data { 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); diff --git a/include/hal-tbm.h b/include/hal-tbm.h index c02a2e0..85fcefe 100644 --- a/include/hal-tbm.h +++ b/include/hal-tbm.h @@ -45,10 +45,13 @@ hal_tbm_error hal_tbm_put_backend(hal_tbm_backend *backend_data); /* 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); diff --git a/src/hal-api-tbm.c b/src/hal-api-tbm.c index 948d452..6315492 100644 --- a/src/hal-api-tbm.c +++ b/src/hal-api-tbm.c @@ -191,6 +191,68 @@ hal_tbm_backend_get_bufmgr(hal_tbm_backend *backend, hal_tbm_error *error) 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) @@ -207,14 +269,6 @@ fail: } 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); -- 2.7.4