tizen 2.4 release
[adaptation/xorg/driver/xserver-xorg-module-xdbg.git] / module / xdbg_module_options.c
index b885835..86795f7 100644 (file)
@@ -47,18 +47,65 @@ typedef enum
     OPTION_LOG_LEVEL,
     OPTION_EVLOG_PATH,
     OPTION_EVLOG_RULE_PATH,
+    OPTION_XERROR_LOG_PATH,
+    OPTION_TRACE_CNT,
 } ModuleOption;
 
 static const OptionInfoRec module_options[] =
 {
-    { OPTION_DLOG,                     "dlog",                 OPTV_BOOLEAN,   {0},    FALSE },
-    { OPTION_LOG_PATH,         "log_path",             OPTV_STRING,    {0},    FALSE },
-    { OPTION_LOG_LEVEL,                "log_level",    OPTV_INTEGER,   {0},    FALSE },
-    { OPTION_EVLOG_PATH,       "evlog_path",   OPTV_STRING,    {0},    FALSE },
-    { OPTION_EVLOG_RULE_PATH,  "evlog_rule_path",              OPTV_STRING,    {0},    FALSE },
-    { -1,                              NULL,                           OPTV_NONE,              {0},    FALSE }
+    { OPTION_DLOG,             "dlog",             OPTV_BOOLEAN,  {0},    FALSE },
+    { OPTION_LOG_PATH,         "log_path",         OPTV_STRING,   {0},    FALSE },
+    { OPTION_LOG_LEVEL,        "log_level",        OPTV_INTEGER,  {0},    FALSE },
+    { OPTION_EVLOG_PATH,       "evlog_path",       OPTV_STRING,   {0},    FALSE },
+    { OPTION_EVLOG_RULE_PATH,  "evlog_rule_path",  OPTV_STRING,   {0},    FALSE },
+    { OPTION_XERROR_LOG_PATH,  "xerror_log_path",  OPTV_STRING,   {0},    FALSE },
+    { OPTION_TRACE_CNT,        "trace_cnt",        OPTV_INTEGER,  {0},    FALSE },
+    { -1,                      NULL,               OPTV_NONE,     {0},    FALSE }
 };
 
+static void
+xDbgModuleInitTraceClientOptions (XDbgModule *pMod, XF86OptionPtr pOpt)
+{
+    int i = 0;
+    char name[128];
+    char *option = NULL;
+
+    pMod->trace_options = (ModuleTraceClientOption*) calloc (pMod->trace_cnt, sizeof(ModuleTraceClientOption));
+
+    for (i = 0 ; i < pMod->trace_cnt ; i++)
+    {
+        snprintf (name, sizeof(name), "trace_client%d", i+1);
+
+        option = xf86SetStrOption (pOpt, name, NULL);
+        XDBG_INFO (MXDBG, "trace_client%d : %s\n", i+1, option);
+        if (option)
+        {
+            char *token = NULL;
+            char *tokp = NULL;
+
+            token = strtok_r (option, ":", &tokp);
+            if (token)
+                strncpy (pMod->trace_options[i].name, token, strlen(token)+1);
+            else
+                XDBG_WARNING (MXDBG, "fail to parse trace client name:%s\n", option);
+
+            token = strtok_r (NULL, ":", &tokp);
+            if (token)
+                strncpy (pMod->trace_options[i].action, token, strlen(token)+1);
+            else
+                XDBG_WARNING (MXDBG, "fail to parse trace client action:%s\n", option);
+
+            token = strtok_r (NULL, ":", &tokp);
+            if (token)
+                strncpy (pMod->trace_options[i].cmd, token, strlen(token)+1);
+            else
+                XDBG_WARNING (MXDBG, "fail to parse trace client log or cmd:%s\n", option);
+
+            free (option);
+        }
+    }
+}
+
 void
 xDbgModuleParseOptions (XDbgModule *pMod, XF86OptionPtr pOpt)
 {
@@ -108,5 +155,21 @@ xDbgModuleParseOptions (XDbgModule *pMod, XF86OptionPtr pOpt)
         xDbgModuleCommandInitEvlogRulePath (pMod, temp);
     }
 
+    /* xerror_log_path */
+    path = xf86GetOptValString (options, OPTION_XERROR_LOG_PATH);
+    if (path)
+    {
+        pMod->xerror_log_path = strdup (path);
+        xDbgModuleEvlogXErrorSetPath (pMod->xerror_log_path);
+        XDBG_INFO (MXDBG, "evlog log path: \"%s\"\n", path);
+    }
+    else
+        pMod->xerror_log_path = NULL;
+
+    xf86GetOptValInteger (options, OPTION_TRACE_CNT, &pMod->trace_cnt);
+    XDBG_INFO (MXDBG, "trace_cnt: %d\n", pMod->trace_cnt);
+
+    xDbgModuleInitTraceClientOptions (pMod, pOpt);
+
     free (options);
 }