add backend function register function
authorJunkyeong Kim <jk0430.kim@samsung.com>
Wed, 27 Jan 2021 06:47:52 +0000 (15:47 +0900)
committerJunkyeong Kim <jk0430.kim@samsung.com>
Wed, 27 Jan 2021 06:47:56 +0000 (15:47 +0900)
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
include/hal-tbm-interface.h
include/hal-tbm.h
src/hal-api-tbm.c

index fc7b9b16147897b0627d630a3659b1712ed99a5a..81bfd1218210fea5bc005b87c41b0150b51f6267 100644 (file)
@@ -78,7 +78,13 @@ typedef struct _hal_backend_tbm_funcs
        hal_tbm_backend_bo_func *bo_func;
 } hal_backend_tbm_funcs;
 
-int hal_tbm_backend_bufmgr_query_display_server(tbm_bufmgr bufmgr, tbm_error_e *error);
+int                          hal_tbm_backend_bufmgr_query_display_server(tbm_bufmgr bufmgr, tbm_error_e *error);
+hal_tbm_backend_bufmgr_func *hal_tbm_backend_bufmgr_alloc_bufmgr_func(tbm_bufmgr bufmgr, tbm_error_e *error);
+void                         hal_tbm_backend_bufmgr_free_bufmgr_func(tbm_bufmgr bufmgr, hal_tbm_backend_bufmgr_func *func);
+tbm_error_e                  hal_tbm_backend_bufmgr_register_bufmgr_func(tbm_bufmgr bufmgr, hal_tbm_backend_bufmgr_func *func);
+hal_tbm_backend_bo_func     *hal_tbm_backend_bufmgr_alloc_bo_func(tbm_bufmgr bufmgr, tbm_error_e *error);
+void                         hal_tbm_backend_bufmgr_free_bo_func(tbm_bufmgr bufmgr, hal_tbm_backend_bo_func *func);
+tbm_error_e                  hal_tbm_backend_bufmgr_register_bo_func(tbm_bufmgr bufmgr, hal_tbm_backend_bo_func *func);
 
 #ifdef __cplusplus
 }
index 214ece81cc81986ebc5dcf4fc4f986562768688f..81182bf7978565085269f79d2897a2e420ea8d5c 100644 (file)
@@ -37,8 +37,8 @@
 extern "C" {
 #endif
 
-int hal_tbm_get_backend(void);
-int hal_tbm_put_backend(void);
+tbm_error_e hal_tbm_get_backend(tbm_bufmgr bufmgr);
+void hal_tbm_put_backend(void);
 
 /* tbm_bufmgr_func */
 tbm_bufmgr_capability hal_tbm_bufmgr_get_capabilities(tbm_backend_bufmgr_data *bufmgr_data, tbm_error_e *error);
index c49d06699cb9d7df60789e0f4dbe6564a397793b..c476ec20597c3c4273917b7b949a5d7bd036dc87 100644 (file)
@@ -32,6 +32,7 @@
 
 #include <stdio.h>
 #include <stdint.h>
+#include <stdlib.h>
 #include <dlfcn.h>
 #include <dlog.h>
 
 
 static hal_backend_tbm_funcs *g_tbm_funcs = NULL;
 
-EXTERN
-int hal_tbm_get_backend(void)
+EXTERN tbm_error_e
+hal_tbm_get_backend(tbm_bufmgr bufmgr)
 {
        int ret;
 
+       if (!bufmgr)
+               return TBM_ERROR_INVALID_PARAMETER;
+
        if (g_tbm_funcs)
-               return 0;
+               return TBM_ERROR_INVALID_OPERATION;
 
-       ret = hal_common_get_backend(HAL_MODULE_TBM, (void **)&g_tbm_funcs);
+       g_tbm_funcs = calloc(1, sizeof(hal_backend_tbm_funcs));
+       if (!g_tbm_funcs)
+               return TBM_ERROR_OUT_OF_MEMORY;
+
+       ret = hal_common_get_backend(HAL_MODULE_TBM, (void **)&bufmgr);
        if (ret < 0) {
                 _E("Failed to get backend\n");
-               return -EINVAL;
+                free(g_tbm_funcs);
+                g_tbm_funcs = NULL;
+               return TBM_ERROR_NOT_SUPPORTED;
        }
 
-       return 0;
+       _I("hal_tbm_get_backend");
+
+       return TBM_ERROR_NONE;
 }
 
-EXTERN
-int hal_tbm_put_backend(void)
+EXTERN void
+hal_tbm_put_backend(void)
 {
        if (!g_tbm_funcs)
-               return 0;
+               return;
 
-       hal_common_put_backend(HAL_MODULE_TBM, (void *)g_tbm_funcs);
+       hal_common_put_backend(HAL_MODULE_TBM, NULL);
+       free(g_tbm_funcs);
        g_tbm_funcs = NULL;
 
-       return 0;
+       _I("hal_tbm_put_backend");
 }
 
 
@@ -303,3 +316,81 @@ hal_tbm_backend_bufmgr_query_display_server(tbm_bufmgr bufmgr, tbm_error_e *erro
 {
        return tbm_backend_bufmgr_query_display_server(bufmgr, error);
 }
+
+EXTERN hal_tbm_backend_bufmgr_func *
+hal_tbm_backend_bufmgr_alloc_bufmgr_func(tbm_bufmgr bufmgr, tbm_error_e *error)
+{
+       hal_tbm_backend_bufmgr_func *bufmgr_func;
+
+       bufmgr_func = calloc(1, sizeof(hal_tbm_backend_bufmgr_func));
+       if (!bufmgr_func) {
+               _E("error: fail to allocate the tbm_backend_bufmgr_func\n");
+               if (error)
+                       *error = TBM_ERROR_OUT_OF_MEMORY;
+               return NULL;
+       }
+
+       if (error)
+               *error = TBM_ERROR_NONE;
+
+       return bufmgr_func;
+}
+
+EXTERN void
+hal_tbm_backend_bufmgr_free_bufmgr_func(tbm_bufmgr bufmgr, hal_tbm_backend_bufmgr_func *func)
+{
+       if (!bufmgr)
+               return;
+
+       if (func)
+               free(func);
+}
+
+EXTERN tbm_error_e
+hal_tbm_backend_bufmgr_register_bufmgr_func(tbm_bufmgr bufmgr, hal_tbm_backend_bufmgr_func *func)
+{
+       if (!g_tbm_funcs) return TBM_ERROR_INVALID_OPERATION;
+       if (g_tbm_funcs->bufmgr_func) return TBM_ERROR_INVALID_OPERATION;
+       if (!bufmgr || !func) return TBM_ERROR_INVALID_PARAMETER;
+       g_tbm_funcs->bufmgr_func = func;
+       return TBM_ERROR_NONE;
+}
+
+EXTERN hal_tbm_backend_bo_func *
+hal_tbm_backend_bufmgr_alloc_bo_func(tbm_bufmgr bufmgr, tbm_error_e *error)
+{
+       hal_tbm_backend_bo_func *bo_func;
+
+       bo_func = calloc(1, sizeof(hal_tbm_backend_bo_func));
+       if (!bo_func) {
+               _E("error: fail to allocate the tbm_backend_bufmgr_func\n");
+               if (error)
+                       *error = TBM_ERROR_OUT_OF_MEMORY;
+               return NULL;
+       }
+
+       if (error)
+               *error = TBM_ERROR_NONE;
+
+       return bo_func;
+}
+
+EXTERN void
+hal_tbm_backend_bufmgr_free_bo_func(tbm_bufmgr bufmgr, hal_tbm_backend_bo_func *func)
+{
+       if (!bufmgr)
+               return;
+
+       if (func)
+               free(func);
+}
+
+EXTERN tbm_error_e
+hal_tbm_backend_bufmgr_register_bo_func(tbm_bufmgr bufmgr, hal_tbm_backend_bo_func *func)
+{
+       if (!g_tbm_funcs) return TBM_ERROR_INVALID_OPERATION;
+       if (g_tbm_funcs->bo_func) return TBM_ERROR_INVALID_OPERATION;
+       if (!bufmgr || !func) return TBM_ERROR_INVALID_PARAMETER;
+       g_tbm_funcs->bo_func = func;
+       return TBM_ERROR_NONE;
+}
\ No newline at end of file