1364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/******************************************************************************
2364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger *
3364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
4364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger *
5364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * This program is free software; you can redistribute it and/or modify it
6364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * under the terms of version 2 of the GNU General Public License as
7364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * published by the Free Software Foundation.
8364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger *
9364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * This program is distributed in the hope that it will be useful, but WITHOUT
10364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * more details.
13364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger *
14364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger ******************************************************************************/
15364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
16364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
17364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#ifndef	__ODM_DBG_H__
18364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define __ODM_DBG_H__
19364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
20364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
21364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
22364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	Define the debug levels */
23364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
24364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	1.	DBG_TRACE and DBG_LOUD are used for normal cases. */
25364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	So that, they can help SW engineer to develope or trace states changed */
26364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	and also help HW enginner to trace every operation to and from HW, */
27364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	e.g IO, Tx, Rx. */
28364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
29364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	2.	DBG_WARNNING and DBG_SERIOUS are used for unusual or error cases, */
30364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	which help us to debug SW or HW. */
31364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
32364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
33364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
34364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	Never used in a call to ODM_RT_TRACE()! */
35364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
36364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define ODM_DBG_OFF					1
37364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
38364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
39364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	Fatal bug. */
40364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	For example, Tx/Rx/IO locked up, OS hangs, memory access violation, */
41364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	resource allocation failed, unexpected HW behavior, HW BUG and so on. */
42364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
43364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define ODM_DBG_SERIOUS				2
44364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
45364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
46364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	Abnormal, rare, or unexpeted cases. */
47364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	For example, IRP/Packet/OID canceled, device suprisely unremoved and so on. */
48364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
49364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define ODM_DBG_WARNING				3
50364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
51364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
52364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	Normal case with useful information about current SW or HW state. */
53364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	For example, Tx/Rx descriptor to fill, Tx/Rx descriptor completed status, */
54364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	SW protocol state change, dynamic mechanism state change and so on. */
55364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
56364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define ODM_DBG_LOUD					4
57364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
58364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
59364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*	Normal case with detail execution flow or information. */
60364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
61364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define ODM_DBG_TRACE					5
62364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
63364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
64364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  Define the tracing components */
65364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
66364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  */
67364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/* BB Functions */
68c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_DIG				BIT(0)
69c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_RA_MASK			BIT(1)
70c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_DYNAMIC_TXPWR			BIT(2)
71c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_FA_CNT				BIT(3)
72c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_RSSI_MONITOR			BIT(4)
73c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_CCK_PD				BIT(5)
74c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_ANT_DIV			BIT(6)
75c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_PWR_SAVE			BIT(7)
76c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_PWR_TRAIN			BIT(8)
77c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_RATE_ADAPTIVE			BIT(9)
78c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_PATH_DIV			BIT(10)
79c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_PSD				BIT(11)
80c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_DYNAMIC_PRICCA			BIT(12)
81c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_RXHP				BIT(13)
82364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/* MAC Functions */
83c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_EDCA_TURBO			BIT(16)
84c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_EARLY_MODE			BIT(17)
85364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/* RF Functions */
86c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_TX_PWR_TRACK			BIT(24)
87c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_RX_GAIN_TRACK			BIT(25)
88c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_CALIBRATION			BIT(26)
89364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/* Common Functions */
90c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_COMMON				BIT(30)
91c04d002ac22614c0d9789c8bd80cb2bf868a9edaJes Sorensen#define ODM_COMP_INIT				BIT(31)
92364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
93364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*------------------------Export Macro Definition---------------------------*/
94364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	#define DbgPrint	printk
95364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	#define RT_PRINTK(fmt, args...)	DbgPrint("%s(): " fmt, __func__, ## args);
96364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
97364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#ifndef ASSERT
98364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	#define ASSERT(expr)
99364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#endif
100364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
101364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define ODM_RT_TRACE(pDM_Odm, comp, level, fmt)							\
102364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel))	\
103364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		{										\
104364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger			DbgPrint("[ODM-8723A] ");						\
105364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger			RT_PRINTK fmt;								\
106364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		}
107364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
108364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define ODM_RT_TRACE_F(pDM_Odm, comp, level, fmt)						\
109364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel))	\
110364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		{										\
111364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger			RT_PRINTK fmt;								\
112364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		}
113364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
114364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define ODM_RT_ASSERT(pDM_Odm, expr, fmt)							\
115364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		if(!(expr)) {									\
116364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger			DbgPrint("Assertion failed! %s at ......\n", #expr);			\
117364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger			DbgPrint("      ......%s,%s,line=%d\n", __FILE__, __func__, __LINE__);\
118364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger			RT_PRINTK fmt;								\
119364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger			ASSERT(false);								\
120364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		}
121364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define ODM_dbg_enter() { DbgPrint("==> %s\n", __func__); }
122364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define ODM_dbg_exit() { DbgPrint("<== %s\n", __func__); }
123364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define ODM_dbg_trace(str) { DbgPrint("%s:%s\n", __func__, str); }
124364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
125364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define ODM_PRINT_ADDR(pDM_Odm, comp, level, title_str, ptr)						\
126364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger			if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel){	\
127364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger				int __i;			\
128364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger				u8 *	__ptr = (u8 *)ptr;	\
129364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger				DbgPrint("[ODM] ");		\
130364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger				DbgPrint(title_str);		\
131364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger				DbgPrint(" ");			\
132364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger				for (__i=0; __i < 6; __i++)	\
133364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger					DbgPrint("%02X%s", __ptr[__i], (__i == 5) ? "" : "-");		\
134364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger				DbgPrint("\n");			\
135364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger			}
136364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
137364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid ODM_InitDebugSetting23a(struct dm_odm_t *pDM_Odm);
138364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
139364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#endif	/*  __ODM_DBG_H__ */
140