add drm information from backend and to libtbm 46/253746/1
authorSooChan Lim <sc1.lim@samsung.com>
Tue, 16 Feb 2021 02:51:22 +0000 (11:51 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Wed, 17 Feb 2021 03:35:27 +0000 (12:35 +0900)
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
include/hal-tbm.h
src/hal-api-tbm.c

index f0a961a..4270636 100644 (file)
@@ -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);
index c02a2e0..85fcefe 100644 (file)
@@ -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);
index 948d452..6315492 100644 (file)
@@ -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);