tizen 2.4 release
[adaptation/xorg/driver/xserver-xorg-module-xdbg.git] / module / xdbg_module_options.c
1 /**************************************************************************
2
3 xdbg
4
5 Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
6
7 Contact: Boram Park <boram1288.park@samsung.com>
8          Sangjin LEE <lsj119@samsung.com>
9
10 Permission is hereby granted, free of charge, to any person obtaining a
11 copy of this software and associated documentation files (the
12 "Software"), to deal in the Software without restriction, including
13 without limitation the rights to use, copy, modify, merge, publish,
14 distribute, sub license, and/or sell copies of the Software, and to
15 permit persons to whom the Software is furnished to do so, subject to
16 the following conditions:
17
18 The above copyright notice and this permission notice (including the
19 next paragraph) shall be included in all copies or substantial portions
20 of the Software.
21
22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
25 IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
26 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
27 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
28 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29
30 **************************************************************************/
31
32 #ifdef HAVE_CONFIG_H
33 #include "config.h"
34 #endif
35
36 #include <xdbg.h>
37
38 #include "xdbg_module.h"
39 #include "xdbg_module_command.h"
40 #include "xdbg_module_evlog.h"
41
42 /* Supported options */
43 typedef enum
44 {
45     OPTION_DLOG,
46     OPTION_LOG_PATH,
47     OPTION_LOG_LEVEL,
48     OPTION_EVLOG_PATH,
49     OPTION_EVLOG_RULE_PATH,
50     OPTION_XERROR_LOG_PATH,
51     OPTION_TRACE_CNT,
52 } ModuleOption;
53
54 static const OptionInfoRec module_options[] =
55 {
56     { OPTION_DLOG,             "dlog",             OPTV_BOOLEAN,  {0},    FALSE },
57     { OPTION_LOG_PATH,         "log_path",         OPTV_STRING,   {0},    FALSE },
58     { OPTION_LOG_LEVEL,        "log_level",        OPTV_INTEGER,  {0},    FALSE },
59     { OPTION_EVLOG_PATH,       "evlog_path",       OPTV_STRING,   {0},    FALSE },
60     { OPTION_EVLOG_RULE_PATH,  "evlog_rule_path",  OPTV_STRING,   {0},    FALSE },
61     { OPTION_XERROR_LOG_PATH,  "xerror_log_path",  OPTV_STRING,   {0},    FALSE },
62     { OPTION_TRACE_CNT,        "trace_cnt",        OPTV_INTEGER,  {0},    FALSE },
63     { -1,                      NULL,               OPTV_NONE,     {0},    FALSE }
64 };
65
66 static void
67 xDbgModuleInitTraceClientOptions (XDbgModule *pMod, XF86OptionPtr pOpt)
68 {
69     int i = 0;
70     char name[128];
71     char *option = NULL;
72
73     pMod->trace_options = (ModuleTraceClientOption*) calloc (pMod->trace_cnt, sizeof(ModuleTraceClientOption));
74
75     for (i = 0 ; i < pMod->trace_cnt ; i++)
76     {
77         snprintf (name, sizeof(name), "trace_client%d", i+1);
78
79         option = xf86SetStrOption (pOpt, name, NULL);
80         XDBG_INFO (MXDBG, "trace_client%d : %s\n", i+1, option);
81         if (option)
82         {
83             char *token = NULL;
84             char *tokp = NULL;
85
86             token = strtok_r (option, ":", &tokp);
87             if (token)
88                 strncpy (pMod->trace_options[i].name, token, strlen(token)+1);
89             else
90                 XDBG_WARNING (MXDBG, "fail to parse trace client name:%s\n", option);
91
92             token = strtok_r (NULL, ":", &tokp);
93             if (token)
94                 strncpy (pMod->trace_options[i].action, token, strlen(token)+1);
95             else
96                 XDBG_WARNING (MXDBG, "fail to parse trace client action:%s\n", option);
97
98             token = strtok_r (NULL, ":", &tokp);
99             if (token)
100                 strncpy (pMod->trace_options[i].cmd, token, strlen(token)+1);
101             else
102                 XDBG_WARNING (MXDBG, "fail to parse trace client log or cmd:%s\n", option);
103
104             free (option);
105         }
106     }
107 }
108
109 void
110 xDbgModuleParseOptions (XDbgModule *pMod, XF86OptionPtr pOpt)
111 {
112     OptionInfoPtr options = xnfalloc (sizeof (module_options));
113     const char *path;
114     char temp[256];
115     int log_level = XLOG_LEVEL_DEFAULT;
116
117     memcpy (options, module_options, sizeof(module_options));
118
119     xf86ProcessOptions (-1, pOpt, options);
120
121     /* dlog */
122     xf86GetOptValBool (options, OPTION_DLOG, &pMod->dlog);
123     XDBG_INFO (MXDBG, "dlog: \"%s\"\n", (pMod->dlog)?"on":"off");
124     xDbgLogEnableDlog (pMod->dlog);
125
126     /* log_path */
127     path = xf86GetOptValString (options, OPTION_LOG_PATH);
128     XDBG_INFO (MXDBG, "log path: \"%s\"\n", (path)?path:"none");
129     if (path)
130     {
131         snprintf (temp, sizeof(temp), "%s", path);
132         xDbgModuleCommandInitLogPath (pMod, temp);
133     }
134
135     /* log_level */
136     xf86GetOptValInteger (options, OPTION_LOG_LEVEL, &log_level);
137     XDBG_INFO (MXDBG, "log default level: %d\n", log_level);
138     xDbgLogSetLevel (XDBG_ALL_MODULE, log_level);
139
140     /* evlog_path */
141     path = xf86GetOptValString (options, OPTION_EVLOG_PATH);
142     XDBG_INFO (MXDBG, "evlog path: \"%s\"\n", (path)?path:"none");
143     if (path)
144     {
145         snprintf (temp, sizeof(temp), "%s", path);
146         xDbgModuleEvlogSetEvlogPath (pMod, -1, temp, NULL, NULL);
147     }
148
149     /* evlog_rule_path */
150     path = xf86GetOptValString (options, OPTION_EVLOG_RULE_PATH);
151     XDBG_INFO (MXDBG, "evlog rule path: \"%s\"\n", (path)?path:"none");
152     if (path)
153     {
154         snprintf (temp, sizeof(temp), "%s", path);
155         xDbgModuleCommandInitEvlogRulePath (pMod, temp);
156     }
157
158     /* xerror_log_path */
159     path = xf86GetOptValString (options, OPTION_XERROR_LOG_PATH);
160     if (path)
161     {
162         pMod->xerror_log_path = strdup (path);
163         xDbgModuleEvlogXErrorSetPath (pMod->xerror_log_path);
164         XDBG_INFO (MXDBG, "evlog log path: \"%s\"\n", path);
165     }
166     else
167         pMod->xerror_log_path = NULL;
168
169     xf86GetOptValInteger (options, OPTION_TRACE_CNT, &pMod->trace_cnt);
170     XDBG_INFO (MXDBG, "trace_cnt: %d\n", pMod->trace_cnt);
171
172     xDbgModuleInitTraceClientOptions (pMod, pOpt);
173
174     free (options);
175 }