1/*
2 * report.h
3 *
4 * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 *  * Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 *  * Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in
15 *    the documentation and/or other materials provided with the
16 *    distribution.
17 *  * Neither the name Texas Instruments nor the names of its
18 *    contributors may be used to endorse or promote products derived
19 *    from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34
35/***************************************************************************/
36/*                                                                          */
37/*    MODULE:   report.h                                                    */
38/*    PURPOSE:  Report module internal header API                           */
39/*                                                                          */
40/***************************************************************************/
41#ifndef __REPORT_H__
42#define __REPORT_H__
43
44/** \file  report.h
45 * \brief Report module API	\n
46 * APIs which are used for reporting messages to the User while running. \n\n
47 *
48 * The report mechanism: Messages are reported per file and severity Level	\n
49 * Therefore, each file has a report flag which indicate if reporting for that file is enabled, \n
50 * and each severity has a severity flag which indicate if reporting for that severity is enabled.	\n
51 * Only if both flags are enabled, the message is printed. \n
52 * The report flags of all file are indicated in a bit map Table which is contained in the report module handle	\n
53 * The report flags of all severities  are indicated in a bit map Table which is contained in the report module handle	\n
54 */
55
56/* in order to work without the driver logger use that definition here
57 * #define PRINTF_ROLLBACK
58 */
59
60#include "osApi.h"
61#include "commonTypes.h"
62
63#define MAX_STRING_LEN         32
64
65
66/*******************************/
67/*      Report Files IDs       */
68/*******************************/
69
70typedef enum
71{
72	FILE_ID_0	   ,    /*   timer                    */
73	FILE_ID_1	   ,    /*   measurementMgr			  */
74	FILE_ID_2	   ,    /*   measurementMgrSM         */
75	FILE_ID_3	   ,    /*   regulatoryDomain         */
76	FILE_ID_4	   ,    /*   requestHandler           */
77	FILE_ID_5	   ,    /*   SoftGemini               */
78	FILE_ID_6	   ,    /*   spectrumMngmntMgr        */
79	FILE_ID_7	   ,    /*   SwitchChannel            */
80	FILE_ID_8	   ,    /*   roamingMngr              */
81	FILE_ID_9	   ,    /*   scanMngr                 */
82	FILE_ID_10	   ,    /*   admCtrlXCC               */
83	FILE_ID_11	   ,    /*   XCCMngr                  */
84	FILE_ID_12	   ,    /*   XCCRMMngr                */
85	FILE_ID_13	   ,    /*   XCCTSMngr                */
86	FILE_ID_14	   ,    /*   rogueAp                  */
87	FILE_ID_15	   ,    /*   TransmitPowerXCC         */
88	FILE_ID_16	   ,    /*   admCtrl                  */
89	FILE_ID_17	   ,    /*   admCtrlNone              */
90	FILE_ID_18	   ,    /*   admCtrlWep               */
91	FILE_ID_19	   ,    /*   admCtrlWpa               */
92	FILE_ID_20	   ,    /*   admCtrlWpa2              */
93	FILE_ID_21	   ,    /*   apConn                   */
94	FILE_ID_22	   ,    /*   broadcastKey802_1x       */
95	FILE_ID_23	   ,    /*   broadcastKeyNone         */
96	FILE_ID_24	   ,    /*   broadcastKeySM           */
97	FILE_ID_25	   ,    /*   conn                     */
98	FILE_ID_26	   ,    /*   connIbss                 */
99	FILE_ID_27	   ,    /*   connInfra                */
100	FILE_ID_28	   ,    /*   keyDerive                */
101	FILE_ID_29	   ,    /*   keyDeriveAes             */
102	FILE_ID_30	   ,    /*   keyDeriveCkip            */
103	FILE_ID_31	   ,    /*   keyDeriveTkip            */
104	FILE_ID_32	   ,    /*   keyDeriveWep             */
105	FILE_ID_33	   ,    /*   keyParser                */
106	FILE_ID_34	   ,    /*   keyParserExternal        */
107	FILE_ID_35	   ,    /*   keyParserWep             */
108	FILE_ID_36	   ,    /*   mainKeysSm               */
109	FILE_ID_37	   ,    /*   mainSecKeysOnly          */
110	FILE_ID_38	   ,    /*   mainSecNull              */
111	FILE_ID_39	   ,    /*   mainSecSm                */
112	FILE_ID_40	   ,    /*   rsn                      */
113	FILE_ID_41	   ,    /*   sme                      */
114	FILE_ID_42	   ,    /*   smeSelect                */
115	FILE_ID_43	   ,    /*   smeSm                    */
116	FILE_ID_44	   ,    /*   unicastKey802_1x         */
117	FILE_ID_45	   ,    /*   unicastKeyNone           */
118	FILE_ID_46	   ,    /*   unicastKeySM             */
119	FILE_ID_47	   ,    /*   CmdDispatcher            */
120	FILE_ID_48	   ,    /*   CmdHndlr                 */
121	FILE_ID_49	   ,    /*   DrvMain                  */
122	FILE_ID_50	   ,    /*   EvHandler                */
123	FILE_ID_51	   ,    /*   Ctrl                     */
124	FILE_ID_52	   ,    /*   GeneralUtil              */
125	FILE_ID_53	   ,    /*   RateAdaptation           */
126	FILE_ID_54	   ,    /*   rx                       */
127	FILE_ID_55	   ,    /*   TrafficMonitor           */
128	FILE_ID_56	   ,    /*   txCtrl                   */
129	FILE_ID_57	   ,    /*   txCtrlParams             */
130	FILE_ID_58	   ,    /*   txCtrlServ               */
131	FILE_ID_59	   ,    /*   TxDataClsfr              */
132	FILE_ID_60	   ,    /*   txDataQueue              */
133	FILE_ID_61	   ,    /*   txMgmtQueue              */
134	FILE_ID_62	   ,    /*   txPort                   */
135	FILE_ID_63	   ,    /*   assocSM                  */
136	FILE_ID_64	   ,    /*   authSm                   */
137	FILE_ID_65	   ,    /*   currBss                  */
138	FILE_ID_66	   ,    /*   healthMonitor            */
139	FILE_ID_67	   ,    /*   mlmeBuilder              */
140	FILE_ID_68	   ,    /*   mlmeParser               */
141	FILE_ID_69	   ,    /*   mlmeSm                   */
142	FILE_ID_70	   ,    /*   openAuthSm               */
143	FILE_ID_71	   ,    /*   PowerMgr                 */
144	FILE_ID_72	   ,    /*   PowerMgrDbgPrint         */
145	FILE_ID_73	   ,    /*   PowerMgrKeepAlive        */
146	FILE_ID_74	   ,    /*   qosMngr                  */
147	FILE_ID_75	   ,    /*   roamingInt               */
148	FILE_ID_76	   ,    /*   ScanCncn                 */
149	FILE_ID_77	   ,    /*   ScanCncnApp              */
150	FILE_ID_78	   ,    /*   ScanCncnOsSm             */
151	FILE_ID_79	   ,    /*   ScanCncnSm               */
152	FILE_ID_80	   ,    /*   ScanCncnSmSpecific       */
153	FILE_ID_81	   ,    /*   scanResultTable          */
154	FILE_ID_82	   ,    /*   scr                      */
155	FILE_ID_83	   ,    /*   sharedKeyAuthSm          */
156	FILE_ID_84	   ,    /*   siteHash                 */
157	FILE_ID_85	   ,    /*   siteMgr                  */
158	FILE_ID_86	   ,    /*   StaCap                   */
159	FILE_ID_87	   ,    /*   systemConfig             */
160	FILE_ID_88	   ,    /*   templates                */
161	FILE_ID_89	   ,    /*   trafficAdmControl        */
162	FILE_ID_90	   ,    /*   CmdBld                   */
163	FILE_ID_91	   ,    /*   CmdBldCfg                */
164	FILE_ID_92	   ,    /*   CmdBldCfgIE              */
165	FILE_ID_93	   ,    /*   CmdBldCmd                */
166	FILE_ID_94	   ,    /*   CmdBldCmdIE              */
167	FILE_ID_95	   ,    /*   CmdBldItr                */
168	FILE_ID_96	   ,    /*   CmdBldItrIE              */
169	FILE_ID_97	   ,    /*   CmdQueue                 */
170	FILE_ID_98	   ,    /*   RxQueue                  */
171	FILE_ID_99	   ,    /*   txCtrlBlk                */
172	FILE_ID_100	   ,    /*   txHwQueue                */
173	FILE_ID_101	   ,    /*   CmdMBox                  */
174	FILE_ID_102	   ,    /*   eventMbox                */
175	FILE_ID_103	   ,    /*   fwDebug                  */
176	FILE_ID_104	   ,    /*   FwEvent                  */
177	FILE_ID_105	   ,    /*   HwInit                   */
178	FILE_ID_106	   ,    /*   RxXfer                   */
179	FILE_ID_107	   ,    /*   txResult                 */
180	FILE_ID_108	   ,    /*   txXfer                   */
181	FILE_ID_109	   ,    /*   MacServices              */
182	FILE_ID_110	   ,    /*   MeasurementSrv           */
183	FILE_ID_111	   ,    /*   measurementSrvDbgPrint   */
184	FILE_ID_112	   ,    /*   MeasurementSrvSM         */
185	FILE_ID_113	   ,    /*   PowerSrv                 */
186	FILE_ID_114	   ,    /*   PowerSrvSM               */
187	FILE_ID_115	   ,    /*   ScanSrv                  */
188	FILE_ID_116	   ,    /*   ScanSrvSM                */
189	FILE_ID_117	   ,    /*   TWDriver                 */
190	FILE_ID_118	   ,    /*   TWDriverCtrl             */
191	FILE_ID_119	   ,    /*   TWDriverRadio            */
192	FILE_ID_120	   ,    /*   TWDriverTx               */
193	FILE_ID_121	   ,    /*   TwIf                     */
194	FILE_ID_122	   ,    /*   SdioBusDrv               */
195	FILE_ID_123	   ,    /*   TxnQueue                 */
196	FILE_ID_124	   ,    /*   WspiBusDrv               */
197	FILE_ID_125	   ,    /*   context                  */
198	FILE_ID_126	   ,    /*   freq                     */
199	FILE_ID_127	   ,    /*   fsm                      */
200	FILE_ID_128	   ,    /*   GenSM                    */
201	FILE_ID_129	   ,    /*   mem                      */
202	FILE_ID_130	   ,    /*   queue                    */
203	FILE_ID_131	   ,    /*   rate                     */
204	FILE_ID_132	   ,    /*   report                   */
205	FILE_ID_133	   ,    /*   stack                    */
206    FILE_ID_134	   ,    /*   externalSec              */
207    FILE_ID_135	   ,    /*   roamingMngr_autoSM       */
208    FILE_ID_136	   ,    /*   roamingMngr_manualSM     */
209	FILE_ID_137	   ,    /*   cmdinterpretoid          */
210    FILE_ID_138	   ,    /*   wlandrvif                */
211	REPORT_FILES_NUM	/*   Number of files with trace reports   */
212
213} EReportFiles;
214
215
216/************************************/
217/*      Report Severity values      */
218/************************************/
219
220/** \enum EReportSeverity
221 * \brief Report Severity Types
222 *
223 * \par Description
224 * All available severity Levels of the events which are reported to user.\n
225 *
226 * \sa
227 */
228typedef enum
229{
230    REPORT_SEVERITY_INIT           =  1,	/**< Init Level (event happened during initialization)			*/
231    REPORT_SEVERITY_INFORMATION    =  2,	/**< Information Level											*/
232    REPORT_SEVERITY_WARNING        =  3,	/**< Warning Level												*/
233    REPORT_SEVERITY_ERROR          =  4,	/**< Error Level (error accored)  		 						*/
234    REPORT_SEVERITY_FATAL_ERROR    =  5,	/**< Fatal-Error Level (fatal-error accored)					*/
235    REPORT_SEVERITY_SM             =  6,	/**< State-Machine Level (event happened in State-Machine)		*/
236    REPORT_SEVERITY_CONSOLE        =  7,	/**< Consol Level (event happened in Consol) 					*/
237    REPORT_SEVERITY_MAX            = REPORT_SEVERITY_CONSOLE + 1	/**< Maximum number of report severity levels	*/
238
239} EReportSeverity;
240
241/** \enum EProblemType
242 * \brief used to handle SW problems according to their types.
243 *
244 * \par Description
245 * All available SW problem types checked in run time.\n
246 *
247 * \sa
248 */
249typedef enum
250{
251    PROBLEM_BUF_SIZE_VIOLATION    =  1,
252    PROBLEM_NULL_VALUE_PTR        =  2,
253
254    PROBLEM_MAX_VALUE
255
256} EProblemType;
257/** \struct TReport
258 * \brief Report Module Object
259 *
260 * \par Description
261 * All the Databases and other parameters which are needed for reporting messages to user
262 *
263 * \sa
264 */
265typedef struct
266{
267    TI_HANDLE       hOs;												/**< Handle to Operating System Object																									*/
268    TI_UINT8        aSeverityTable[REPORT_SEVERITY_MAX];				/**< Severities Table: Table which holds for each severity level a flag which indicates whether the severity is enabled for reporting	*/
269	char            aSeverityDesc[REPORT_SEVERITY_MAX][MAX_STRING_LEN];	/**< Severities Descriptors Table: Table which holds for each severity a string of its name, which is used in severity's reported messages		*/
270    TI_UINT8        aFileEnable[REPORT_FILES_NUM];					    /**< Files table indicating per file if it is enabled for reporting	 */
271
272#ifdef PRINTF_ROLLBACK
273    char            aFileName[REPORT_FILES_NUM][MAX_STRING_LEN];	    /**< Files names table inserted in the file's reported messages		 */
274#endif
275
276} TReport;
277
278/** \struct TReportParamInfo
279 * \brief Report Parameter Information
280 *
281 * \par Description
282 * Struct which defines all the Databases and other parameters which are needed
283 * for reporting messages to user.
284 * The actual Content of the Report Parameter Could be one of the followed (held in union):
285 * Severety Table | Module Table | Enable/Disable indication of debug module usage
286 *
287 * \sa	EExternalParam, ETwdParam
288 */
289typedef struct
290{
291    TI_UINT32       paramType;								/**< The reported parameter type - one of External Parameters (which includes Set,Get, Module, internal number etc.)
292															* of Report Module. Used by user for Setting or Getting Report Module Paramters, for exaple Set/Get severety table
293															* to/from Report Module
294															*/
295    TI_UINT32       paramLength;							/**< Length of reported parameter	*/
296
297    union
298    {
299        TI_UINT8    aSeverityTable[REPORT_SEVERITY_MAX];	/**< Table which holds severity flag for every available LOG severity level.
300															* This flag indicates for each severity - whether it is enabled for Logging or not.
301															* User can Set/Get this Tabel
302															*/
303        TI_UINT8    aFileEnable[REPORT_FILES_NUM]; 		/**< Table which holds file flag for every available LOG file.
304															* This flag indicates for each file - whether it is enabled for Logging or not.
305															* User can Set/Get this Tabel
306															*/
307        TI_UINT32   uReportPPMode;							/**< Used by user for Indicating if Debug Module should be enabled/disabled																	*/
308
309    } content;
310
311} TReportParamInfo;
312
313/** \struct TReportInitParams
314 * \brief Report Init Parameters
315 *
316 * \par Description
317 * Struct which defines all the Databases needed for init and set the defualts of the Report Module.
318 *
319 */
320typedef struct
321{
322    /* Note: The arrays sizes are aligned to 4 byte to avoid padding added by the compiler! */
323	TI_UINT8   aSeverityTable[(REPORT_SEVERITY_MAX + 3) & ~3];	/**< Table in the size of all available LOG severity levels which indicates for each severity - whether it is enabled for Logging or not.	*/
324	TI_UINT8   aFileEnable   [(REPORT_FILES_NUM    + 3) & ~3];	/**< Table in the size of all available LOG files which indicates for each file - whether it is enabled for Logging or not				*/
325
326} TReportInitParams;
327
328
329
330/****************************/
331/* report module Macros		*/
332/****************************/
333
334/* The report mechanism is like that:
335    Each file has a report flag. Each severity has a severity flag.
336    Only if bits are enabled, the message is printed */
337/* The modules which have their report flag enable are indicated by a bit map in the reportModule
338    variable contained in the report handle*/
339/* The severities which have are enabled are indicated by a bit map in the reportSeverity
340    variable contained in the report handle*/
341/* general trace messages */
342#ifndef PRINTF_ROLLBACK
343
344#define TRACE0(hReport, level, str) \
345	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
346{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 0); } } while(0)
347
348#define TRACE1(hReport, level, str, p1) \
349	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
350{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 1, (TI_UINT32)p1); } } while(0)
351
352#define TRACE2(hReport, level, str, p1, p2) \
353	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
354{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 2, (TI_UINT32)p1, (TI_UINT32)p2); } } while(0)
355
356#define TRACE3(hReport, level, str, p1, p2, p3) \
357	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
358{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 3, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3); } } while(0)
359
360#define TRACE4(hReport, level, str, p1, p2, p3, p4) \
361	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
362{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 4, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4); } } while(0)
363
364#define TRACE5(hReport, level, str, p1, p2, p3, p4, p5) \
365	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
366{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 5, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5); } } while(0)
367
368#define TRACE6(hReport, level, str, p1, p2, p3, p4, p5, p6) \
369	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
370{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 6, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6); } } while(0)
371
372#define TRACE7(hReport, level, str, p1, p2, p3, p4, p5, p6, p7) \
373	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
374{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 7, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7); } } while(0)
375
376#define TRACE8(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8) \
377	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
378{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 8, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8); } } while(0)
379
380#define TRACE9(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9) \
381	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
382{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 9, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8, (TI_UINT32)p9); } } while(0)
383
384#define TRACE10(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) \
385	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
386{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 10, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8, (TI_UINT32)p9, (TI_UINT32)p10); } } while(0)
387
388#define TRACE11(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) \
389	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
390{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 11, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8, (TI_UINT32)p9, (TI_UINT32)p10, (TI_UINT32)p11); } } while(0)
391
392#define TRACE12(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) \
393	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
394{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 12, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8, (TI_UINT32)p9, (TI_UINT32)p10, (TI_UINT32)p11, (TI_UINT32)p12); } } while(0)
395
396#define TRACE13(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) \
397	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
398{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 13, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8, (TI_UINT32)p9, (TI_UINT32)p10, (TI_UINT32)p11, (TI_UINT32)p12, (TI_UINT32)p13); } } while(0)
399
400#define TRACE14(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) \
401	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
402{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 14, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8, (TI_UINT32)p9, (TI_UINT32)p10, (TI_UINT32)p11, (TI_UINT32)p12, (TI_UINT32)p13, (TI_UINT32)p14); } } while(0)
403
404#define TRACE15(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) \
405	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
406{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 15, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8, (TI_UINT32)p9, (TI_UINT32)p10, (TI_UINT32)p11, (TI_UINT32)p12, (TI_UINT32)p13, (TI_UINT32)p14, (TI_UINT32)p15); } } while(0)
407
408#define TRACE16(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16) \
409	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
410{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 16, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8, (TI_UINT32)p9, (TI_UINT32)p10, (TI_UINT32)p11, (TI_UINT32)p12, (TI_UINT32)p13, (TI_UINT32)p14, (TI_UINT32)p15, (TI_UINT32)p16); } } while(0)
411
412#define TRACE17(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17) \
413	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
414{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 17, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8, (TI_UINT32)p9, (TI_UINT32)p10, (TI_UINT32)p11, (TI_UINT32)p12, (TI_UINT32)p13, (TI_UINT32)p14, (TI_UINT32)p15, (TI_UINT32)p16, (TI_UINT32)p17); } } while(0)
415
416#define TRACE18(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18) \
417	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
418{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 18, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8, (TI_UINT32)p9, (TI_UINT32)p10, (TI_UINT32)p11, (TI_UINT32)p12, (TI_UINT32)p13, (TI_UINT32)p14, (TI_UINT32)p15, (TI_UINT32)p16, (TI_UINT32)p17, (TI_UINT32)p18); } } while(0)
419
420#define TRACE19(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19) \
421	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
422{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 19, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8, (TI_UINT32)p9, (TI_UINT32)p10, (TI_UINT32)p11, (TI_UINT32)p12, (TI_UINT32)p13, (TI_UINT32)p14, (TI_UINT32)p15, (TI_UINT32)p16, (TI_UINT32)p17, (TI_UINT32)p18, (TI_UINT32)p19); } } while(0)
423
424#define TRACE20(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20) \
425	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
426{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 20, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8, (TI_UINT32)p9, (TI_UINT32)p10, (TI_UINT32)p11, (TI_UINT32)p12, (TI_UINT32)p13, (TI_UINT32)p14, (TI_UINT32)p15, (TI_UINT32)p16, (TI_UINT32)p17, (TI_UINT32)p18, (TI_UINT32)p19, (TI_UINT32)p20); } } while(0)
427
428#define TRACE21(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21) \
429	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
430{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 21, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8, (TI_UINT32)p9, (TI_UINT32)p10, (TI_UINT32)p11, (TI_UINT32)p12, (TI_UINT32)p13, (TI_UINT32)p14, (TI_UINT32)p15, (TI_UINT32)p16, (TI_UINT32)p17, (TI_UINT32)p18, (TI_UINT32)p19, (TI_UINT32)p20, (TI_UINT32)p21); } } while(0)
431
432#define TRACE22(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22) \
433	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
434{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 22, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8, (TI_UINT32)p9, (TI_UINT32)p10, (TI_UINT32)p11, (TI_UINT32)p12, (TI_UINT32)p13, (TI_UINT32)p14, (TI_UINT32)p15, (TI_UINT32)p16, (TI_UINT32)p17, (TI_UINT32)p18, (TI_UINT32)p19, (TI_UINT32)p20, (TI_UINT32)p21, (TI_UINT32)p22); } } while(0)
435
436#define TRACE25(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25) \
437	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
438{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 22, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8, (TI_UINT32)p9, (TI_UINT32)p10, (TI_UINT32)p11, (TI_UINT32)p12, (TI_UINT32)p13, (TI_UINT32)p14, (TI_UINT32)p15, (TI_UINT32)p16, (TI_UINT32)p17, (TI_UINT32)p18, (TI_UINT32)p19, (TI_UINT32)p20, (TI_UINT32)p21, (TI_UINT32)p22, (TI_UINT32)p23, (TI_UINT32)p24, (TI_UINT32)p25); } } while(0)
439
440#define TRACE31(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31) \
441	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
442{ os_Trace((((TReport *)hReport)->hOs), level, __FILE_ID__, __LINE__, 22, (TI_UINT32)p1, (TI_UINT32)p2, (TI_UINT32)p3, (TI_UINT32)p4, (TI_UINT32)p5, (TI_UINT32)p6, (TI_UINT32)p7, (TI_UINT32)p8, (TI_UINT32)p9, (TI_UINT32)p10, (TI_UINT32)p11, (TI_UINT32)p12, (TI_UINT32)p13, (TI_UINT32)p14, (TI_UINT32)p15, (TI_UINT32)p16, (TI_UINT32)p17, (TI_UINT32)p18, (TI_UINT32)p19, (TI_UINT32)p20, (TI_UINT32)p21, (TI_UINT32)p22, (TI_UINT32)p23, (TI_UINT32)p24, (TI_UINT32)p25, (TI_UINT32)p26, (TI_UINT32)p27, (TI_UINT32)p28, (TI_UINT32)p29, (TI_UINT32)p30, (TI_UINT32)p31); } } while(0)
443
444
445#else /* PRINTF_ROLLBACK */
446
447#define TRACE0(hReport, level, str) \
448	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
449{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str); } } while(0)
450
451#define TRACE1(hReport, level, str, p1) \
452	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
453{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1); } } while(0)
454
455#define TRACE2(hReport, level, str, p1, p2) \
456	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
457{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2); } } while(0)
458
459#define TRACE3(hReport, level, str, p1, p2, p3) \
460	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
461{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3); } } while(0)
462
463#define TRACE4(hReport, level, str, p1, p2, p3, p4) \
464	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
465{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4); } } while(0)
466
467#define TRACE5(hReport, level, str, p1, p2, p3, p4, p5) \
468	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
469{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5); } } while(0)
470
471#define TRACE6(hReport, level, str, p1, p2, p3, p4, p5, p6) \
472	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
473{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6); } } while(0)
474
475#define TRACE7(hReport, level, str, p1, p2, p3, p4, p5, p6, p7) \
476	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
477{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7); } } while(0)
478
479#define TRACE8(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8) \
480	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
481{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8); } } while(0)
482
483#define TRACE9(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9) \
484	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
485{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8, p9); } } while(0)
486
487#define TRACE10(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) \
488	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
489{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); } } while(0)
490
491#define TRACE11(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) \
492	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
493{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); } } while(0)
494
495#define TRACE12(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) \
496	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
497{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); } } while(0)
498
499#define TRACE13(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) \
500	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
501{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13); } } while(0)
502
503#define TRACE14(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) \
504	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
505{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14); } } while(0)
506
507#define TRACE15(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) \
508	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
509{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15); } } while(0)
510
511#define TRACE16(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16) \
512	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
513{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16); } } while(0)
514
515#define TRACE17(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17) \
516	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
517{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17); } } while(0)
518
519#define TRACE18(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18) \
520	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
521{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18); } } while(0)
522
523#define TRACE19(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19) \
524	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
525{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19); } } while(0)
526
527#define TRACE20(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20) \
528	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
529{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20); } } while(0)
530
531#define TRACE21(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21) \
532	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
533{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21); } } while(0)
534
535#define TRACE22(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22) \
536	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
537{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22); } } while(0)
538
539#define TRACE25(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25) \
540	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
541{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25); } } while(0)
542
543#define TRACE31(hReport, level, str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31) \
544	do { if (hReport && (((TReport *)hReport)->aSeverityTable[level]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
545{ os_printf ("%s, %s:", ((TReport *)hReport)->aFileName[__FILE_ID__], ((TReport *)hReport)->aSeverityDesc[level]); os_printf (str, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p27, p27, p28, p29, p30, p31); } } while(0)
546
547#endif /* #ifdef PRINTF_ROLLBACK */
548
549
550/****************************/
551/* report module Macros		*/
552/****************************/
553
554/* The report mechanism is like that:
555Each file has a report flag. Each severity has a severity flag.
556Only if bits are enabled, the message is printed */
557/* The modules which have their report flag enable are indicated by a bit map in the reportModule
558variable contained in the report handle*/
559/* The severities which have are enabled are indicated by a bit map in the reportSeverity
560variable contained in the report handle*/
561
562#ifdef REPORT_LOG
563
564/** \def WLAN_OS_REPORT
565* \brief Macro which writes a message to user via specific Operating System printf.
566* E.g. print is done using the relevant used OS printf method.
567*/
568#define WLAN_OS_REPORT(msg)                                           \
569	do { os_printf msg;} while(0)
570
571
572#ifdef INIT_MESSAGES
573/** \def WLAN_INIT_REPORT
574* \brief Macro which writes a message to user via specific Operating System printf.
575* E.g. print is done using the relevant used OS printf method.
576*/
577#define WLAN_INIT_REPORT(msg)                                         \
578	do { os_printf msg;} while(0)
579#else
580/** \def WLAN_INIT_REPORT
581* \brief Macro which writes a message to user via specific Operating System printf.
582* E.g. print is done using the relevant used OS printf method.
583*/
584#define WLAN_INIT_REPORT(msg)
585#endif
586#define TRACE_INFO_HEX(hReport, data, datalen) \
587	do { if (hReport && (((TReport *)hReport)->aSeverityTable[REPORT_SEVERITY_INFORMATION]) && (((TReport *)hReport)->aFileEnable[__FILE_ID__])) \
588{ report_PrintDump (data, datalen); } } while(0)
589
590
591#else   /* REPORT_LOG */
592
593/* NOTE: Keep a dummy report function call to treat compilation warnings */
594
595/** \def WLAN_OS_REPORT
596* \brief Dummy macro: Nothing is done
597*/
598#define WLAN_OS_REPORT(msg)                                           \
599	do { } while (0)
600
601/** \def WLAN_INIT_REPORT
602* \brief Dummy macro: Nothing is done
603*/
604#define WLAN_INIT_REPORT(msg)                                         \
605	do { } while (0)
606
607
608#define TRACE_INFO_HEX(hReport, data, datalen) \
609	do { } while (0)
610
611#endif  /* REPORT_LOG */
612
613
614/****************************/
615/* report module prototypes */
616/****************************/
617
618/** \brief  Create Report Module Object
619 * \param  hOs   			- OS module object handle
620 * \return Handle to the report module on success, NULL otherwise
621 *
622 * \par Description
623 * Report module creation function, called by the config mgr in creation phase	\n
624 * performs the following:	\n
625 *	-   Allocate the report handle
626 */
627TI_HANDLE report_Create (TI_HANDLE hOs);
628/** \brief  Set Report Module Defaults
629 * \param  hReport   	- Report module object handle
630 * \param  pInitParams	- Pointer to Input Init Parameters
631 * \return TI_OK on success or TI_NOK on failure
632 *
633 * \par Description
634 * Report module configuration function, called by the config mgr in configuration phase	\n
635 * performs the following:	\n
636 *	-   Reset & init local variables
637 *	-   Resets all report modules bits
638 *	-   Resets all severities bits
639 *	-   Init the description strings *
640 */
641TI_STATUS report_SetDefaults            (TI_HANDLE hReport, TReportInitParams *pInitParams);
642/** \brief  Unload Report Module
643 * \param  hReport   	- Report module object handle
644 * \return TI_OK on success or TI_NOK on failure
645 *
646 * \par Description
647 * Report Module unload function, called by the config mgr in the unload phase	\n
648 * performs the following:	\n
649 *	-   Free all memory allocated by the module
650 */
651TI_STATUS report_Unload                 (TI_HANDLE hReport);
652/** \brief  Set Report Module
653 * \param  hReport   	- Report module object handle
654 * \return TI_OK on success or TI_NOK on failure
655 *
656 * \par Description
657 * Enables the relevant module for reporting -  according to the received module index
658 */
659TI_STATUS report_SetReportModule        (TI_HANDLE hReport, TI_UINT8 module_index);
660/** \brief  Clear Report Module
661 * \param  hReport   	- Report module object handle
662 * \param  module_index	- Index of file to be disable for reporting
663 * \return TI_OK on success or TI_NOK on failure
664 *
665 * \par Description
666 * Disables the relevant module for reporting -  according to the received module index
667 */
668TI_STATUS report_ClearReportModule      (TI_HANDLE hReport, TI_UINT8 module_index);
669/** \brief  Get Report files Table
670 * \param  hReport   	- Report module object handle
671 * \param  pFiles		- Pointer to output files Table
672 * \return TI_OK on success or TI_NOK on failure
673 *
674 * \par Description
675 * Returns the Modules Table (the table which holds Modules reporting indication) held in Report Module Object
676 */
677TI_STATUS report_GetReportFilesTable    (TI_HANDLE hReport, TI_UINT8 *pFiles);
678/** \brief  Set Report Files Table
679 * \param  hReport   	- Report module object handle
680 * \param  pFiles		- Pointer to input files Table
681 * \return TI_OK on success or TI_NOK on failure
682 *
683 * \par Description
684 * Updates the Modules Table: copies the input Modules Table (the table which holds Modules reporting indication)
685 * to the Modules Table which is held in Report Module Object
686 */
687TI_STATUS report_SetReportFilesTable    (TI_HANDLE hReport, TI_UINT8 *pFiles);
688/** \brief  Get Report Severity Table
689 * \param  hReport   	- Report module object handle
690 * \param  pSeverities	- Pointer to input Severity Table
691 * \return TI_OK on success or TI_NOK on failure
692 *
693 * \par Description
694 * Returns the Severities Table (the table which holds Severities reporting indication) held in Report Module Object
695 */
696TI_STATUS report_GetReportSeverityTable (TI_HANDLE hReport, TI_UINT8 *pSeverities);
697/** \brief  Set Report Severity Table
698 * \param  hReport   	- Report module object handle
699 * \param  pSeverities	- Pointer to input Severity Table
700 * \return TI_OK on success or TI_NOK on failure
701 *
702 * \par Description
703 * Updates the Severities Table: copies the input Severities Table (the table which holds Severities reporting indication)
704 * to the Severities Table which is held in Report Module Object
705 */
706TI_STATUS report_SetReportSeverityTable (TI_HANDLE hReport, TI_UINT8 *pSeverities);
707/** \brief  Set Report Parameters
708 * \param  hReport   	- Report module object handle
709 * \param  pParam		- Pointer to input Report Parameters Information
710 * \return TI_OK on success or TI_NOK on failure
711 *
712 * \par Description
713 * Report set param function sets parameter/s to Report Module Object.
714 * Called by the following:
715 *	-   configuration Manager in order to set a parameter/s from the OS abstraction layer
716 *	-   Form inside the driver
717 */
718TI_STATUS report_SetParam               (TI_HANDLE hReport, TReportParamInfo *pParam);
719/** \brief  Get Report Parameters
720 * \param  hReport   	- Report module object handle
721 * \param  pParam		- Pointer to output Report Parameters Information
722 * \return TI_OK on success or TI_NOK on failure
723 *
724 * \par Description
725 * Report get param function gets parameter/s from Report Module Object.
726 * Called by the following:
727 *	-   configuration Manager in order to get a parameter/s from the OS abstraction layer
728 *	-   from inside the driver
729 */
730TI_STATUS report_GetParam               (TI_HANDLE hReport, TReportParamInfo *pParam);
731/** \brief Report Dump
732 * \param  pBuffer  - Pointer to input HEX buffer
733 * \param  pString	- Pointer to output string
734 * \param  size		- size of output string
735 * \return TI_OK on success or TI_NOK on failure
736 *
737 * \par Description
738 * Converts hex buffer to string buffer
739 * NOTE:	1. The caller has to make sure that the string size is at lease: ((Size * 2) + 1)
740 * 	      	2. A string terminator is inserted into lase char of the string
741 */
742TI_STATUS report_Dump 					(TI_UINT8 *pBuffer, char *pString, TI_UINT32 size);
743/** \brief Report Print Dump
744 * \param  pData  	- Pointer to input data buffer
745 * \param  datalen	- size of input data buffer
746 * \return TI_OK on success or TI_NOK on failure
747 *
748 * \par Description
749 * Performs HEX dump of input Data buffer. Used for debug only!
750 */
751TI_STATUS report_PrintDump 				(TI_UINT8 *pData, TI_UINT32 datalen);
752
753/** \brief Sets bRedirectOutputToLogger
754* \param  value  	    - True if to direct output to remote PC
755* \param  hEvHandler	- Event handler
756*/
757void os_setDebugOutputToLogger(TI_BOOL value);
758
759/** \brief Sets handles a SW running problem
760* \param  problemType  	- used for different problem handling depending on problem type
761*/
762void handleRunProblem(EProblemType prType);
763
764#endif /* __REPORT_H__ */
765
766
767