define the backend ABI version 07/179707/1
authorSooChan Lim <sc1.lim@samsung.com>
Mon, 21 May 2018 07:46:11 +0000 (16:46 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Mon, 21 May 2018 08:48:13 +0000 (17:48 +0900)
The TDM backend ABI version should be separated with TDM front-end ABI.
Therefore, tdm defines the TDM backend ABI version at the tbm_backend.h.
The tdm checks the module ABI version with this backend ABI version
when the libtdm loads the backend modules.

Change-Id: I80d842f225d261f7fc024c6928dc66c9d4a95a65

include/tdm_backend.h
src/tdm.c
src/tdm_backend.c

index 53f979a..e9fc70d 100644 (file)
@@ -1134,6 +1134,11 @@ typedef tdm_error (*tdm_event_loop_timer_handler)(void *user_data);
        (((major) << 16) & TDM_BACKEND_MAJOR_VERSION_MASK) | \
        ((minor) & TDM_BACKEND_MINOR_VERSION_MASK)
 
+
+#define TDM_BACKEND_ABI_VERSION_1_0 TDM_BACKEND_SET_ABI_VERSION(1, 0)
+#define TDM_BACKEND_ABI_VERSION_2_0 TDM_BACKEND_SET_ABI_VERSION(2, 0)
+#define TDM_BACKEND_ABI_LATEST_VERSION TDM_BACKEND_ABI_VERSION_2_0 /**< the latest version of the tdm backend abi  */
+
 /**
  * @brief
  * This MACRO is deprecated since 1.2.0. Use TDM_BACKEND_SET_ABI_VERSION instead of this.
index bc59c3c..6f938ec 100644 (file)
--- a/src/tdm.c
+++ b/src/tdm.c
@@ -745,10 +745,14 @@ static pthread_mutex_t gLock = PTHREAD_MUTEX_INITIALIZER;
 static tdm_error
 _tdm_display_check_module(tdm_backend_module *module)
 {
-       int major, minor;
+       int tdm_backend_major, tdm_backend_minor;
+       int backend_module_major, backend_module_minor;
 
-       TDM_INFO("TDM ABI version : %d.%d",
-                        TDM_MAJOR_VERSION, TDM_MINOR_VERSION);
+       tdm_backend_major = TDM_BACKEND_GET_ABI_MAJOR(TDM_BACKEND_ABI_LATEST_VERSION);
+       tdm_backend_minor = TDM_BACKEND_GET_ABI_MINOR(TDM_BACKEND_ABI_LATEST_VERSION);
+
+       TDM_INFO("TDM Backend ABI version : %d.%d",
+                        tdm_backend_major, tdm_backend_minor);
 
        if (!module->name) {
                TDM_ERR("TDM backend doesn't have name");
@@ -760,22 +764,23 @@ _tdm_display_check_module(tdm_backend_module *module)
                return TDM_ERROR_BAD_MODULE;
        }
 
-       major = TDM_BACKEND_GET_ABI_MAJOR(module->abi_version);
-       minor = TDM_BACKEND_GET_ABI_MINOR(module->abi_version);
+       backend_module_major = TDM_BACKEND_GET_ABI_MAJOR(module->abi_version);
+       backend_module_minor = TDM_BACKEND_GET_ABI_MINOR(module->abi_version);
 
        TDM_INFO("TDM module name: %s", module->name);
        TDM_INFO("'%s' vendor: %s", module->name, module->vendor);
-       TDM_INFO("'%s' version: %d.%d", module->name, major, minor);
+       TDM_INFO("'%s' backend ABI version: %d.%d", module->name, backend_module_major, backend_module_minor);
 
-       if (major != TDM_MAJOR_VERSION) {
-               TDM_ERR("'%s' major version mismatch, %d != %d",
-                               module->name, major, TDM_MAJOR_VERSION);
+       if (backend_module_major > tdm_backend_major) {
+               TDM_ERR("'%s' major version(%d) is newer than %d",
+                               module->name, backend_module_major, tdm_backend_major);
                return TDM_ERROR_BAD_MODULE;
        }
 
-       if (minor > TDM_MINOR_VERSION) {
+       if (tdm_backend_major == backend_module_major &&
+               backend_module_minor > tdm_backend_minor) {
                TDM_ERR("'%s' minor version(%d) is newer than %d",
-                               module->name, minor, TDM_MINOR_VERSION);
+                               module->name, backend_module_minor, tdm_backend_minor);
                return TDM_ERROR_BAD_MODULE;
        }
 
index 13ea24c..c979129 100644 (file)
@@ -146,10 +146,7 @@ tdm_backend_register_func_hwc(tdm_display *dpy, tdm_func_hwc *func_hwc)
        assert(private_display->current_module);
 
        module = private_display->current_module->module_data;
-       /* FIX ME:
-                  Temporarily, we set the version of hwc window to 1.1 for the development.
-                  Originally the hwc window version is 2.0. */
-       if (_check_abi_version(module, 1, 1) < 0)
+       if (_check_abi_version(module, 2, 0) < 0)
                return TDM_ERROR_BAD_MODULE;
 
        private_display->current_module->func_hwc = *func_hwc;
@@ -171,10 +168,7 @@ tdm_backend_register_func_hwc_window(tdm_display *dpy, tdm_func_hwc_window *func
        assert(private_display->current_module);
 
        module = private_display->current_module->module_data;
-       /* FIX ME:
-                  Temporarily, we set the version of hwc window to 1.1 for the development.
-                  Originally the hwc window version is 2.0. */
-       if (_check_abi_version(module, 1, 1) < 0)
+       if (_check_abi_version(module, 2, 0) < 0)
                return TDM_ERROR_BAD_MODULE;
 
        private_display->current_module->func_hwc_window = *func_hwc_window;