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