/* * iwmc3200top - Intel Wireless MultiCom 3200 Top Driver * drivers/misc/iwmc3200top/log.h * * Copyright (C) 2009 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * * * Author Name: Maxim Grabarnik <maxim.grabarnink@intel.com> * - * */ #ifndef __LOG_H__ #define __LOG_H__ /* log severity: * The log levels here match FW log levels * so values need to stay as is */ #define LOG_SEV_CRITICAL 0 #define LOG_SEV_ERROR 1 #define LOG_SEV_WARNING 2 #define LOG_SEV_INFO 3 #define LOG_SEV_INFOEX 4 /* Log levels not defined for FW */ #define LOG_SEV_TRACE 5 #define LOG_SEV_DUMP 6 #define LOG_SEV_FW_FILTER_ALL \ (BIT(LOG_SEV_CRITICAL) | \ BIT(LOG_SEV_ERROR) | \ BIT(LOG_SEV_WARNING) | \ BIT(LOG_SEV_INFO) | \ BIT(LOG_SEV_INFOEX)) #define LOG_SEV_FILTER_ALL \ (BIT(LOG_SEV_CRITICAL) | \ BIT(LOG_SEV_ERROR) | \ BIT(LOG_SEV_WARNING) | \ BIT(LOG_SEV_INFO) | \ BIT(LOG_SEV_INFOEX) | \ BIT(LOG_SEV_TRACE) | \ BIT(LOG_SEV_DUMP)) /* log source */ #define LOG_SRC_INIT 0 #define LOG_SRC_DEBUGFS 1 #define LOG_SRC_FW_DOWNLOAD 2 #define LOG_SRC_FW_MSG 3 #define LOG_SRC_TST 4 #define LOG_SRC_IRQ 5 #define LOG_SRC_MAX 6 #define LOG_SRC_ALL 0xFF /** * Default intitialization runtime log level */ #ifndef LOG_SEV_FILTER_RUNTIME #define LOG_SEV_FILTER_RUNTIME \ (BIT(LOG_SEV_CRITICAL) | \ BIT(LOG_SEV_ERROR) | \ BIT(LOG_SEV_WARNING)) #endif #ifndef FW_LOG_SEV_FILTER_RUNTIME #define FW_LOG_SEV_FILTER_RUNTIME LOG_SEV_FILTER_ALL #endif #ifdef CONFIG_IWMC3200TOP_DEBUG /** * Log macros */ #define priv2dev(priv) (&(priv->func)->dev) #define LOG_CRITICAL(priv, src, fmt, args...) \ do { \ if (iwmct_logdefs[LOG_SRC_ ## src] & BIT(LOG_SEV_CRITICAL)) \ dev_crit(priv2dev(priv), "%s %d: " fmt, \ __func__, __LINE__, ##args); \ } while (0) #define LOG_ERROR(priv, src, fmt, args...) \ do { \ if (iwmct_logdefs[LOG_SRC_ ## src] & BIT(LOG_SEV_ERROR)) \ dev_err(priv2dev(priv), "%s %d: " fmt, \ __func__, __LINE__, ##args); \ } while (0) #define LOG_WARNING(priv, src, fmt, args...) \ do { \ if (iwmct_logdefs[LOG_SRC_ ## src] & BIT(LOG_SEV_WARNING)) \ dev_warn(priv2dev(priv), "%s %d: " fmt, \ __func__, __LINE__, ##args); \ } while (0) #define LOG_INFO(priv, src, fmt, args...) \ do { \ if (iwmct_logdefs[LOG_SRC_ ## src] & BIT(LOG_SEV_INFO)) \ dev_info(priv2dev(priv), "%s %d: " fmt, \ __func__, __LINE__, ##args); \ } while (0) #define LOG_TRACE(priv, src, fmt, args...) \ do { \ if (iwmct_logdefs[LOG_SRC_ ## src] & BIT(LOG_SEV_TRACE)) \ dev_dbg(priv2dev(priv), "%s %d: " fmt, \ __func__, __LINE__, ##args); \ } while (0) #define LOG_HEXDUMP(src, ptr, len) \ do { \ if (iwmct_logdefs[LOG_SRC_ ## src] & BIT(LOG_SEV_DUMP)) \ print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_NONE, \ 16, 1, ptr, len, false); \ } while (0) void iwmct_log_top_message(struct iwmct_priv *priv, u8 *buf, int len); extern u8 iwmct_logdefs[]; int iwmct_log_set_filter(u8 src, u8 logmask); int iwmct_log_set_fw_filter(u8 src, u8 logmask); ssize_t show_iwmct_log_level(struct device *d, struct device_attribute *attr, char *buf); ssize_t store_iwmct_log_level(struct device *d, struct device_attribute *attr, const char *buf, size_t count); ssize_t show_iwmct_log_level_fw(struct device *d, struct device_attribute *attr, char *buf); ssize_t store_iwmct_log_level_fw(struct device *d, struct device_attribute *attr, const char *buf, size_t count); #else #define LOG_CRITICAL(priv, src, fmt, args...) #define LOG_ERROR(priv, src, fmt, args...) #define LOG_WARNING(priv, src, fmt, args...) #define LOG_INFO(priv, src, fmt, args...) #define LOG_TRACE(priv, src, fmt, args...) #define LOG_HEXDUMP(src, ptr, len) static inline void iwmct_log_top_message(struct iwmct_priv *priv, u8 *buf, int len) {} static inline int iwmct_log_set_filter(u8 src, u8 logmask) { return 0; } static inline int iwmct_log_set_fw_filter(u8 src, u8 logmask) { return 0; } #endif /* CONFIG_IWMC3200TOP_DEBUG */ int log_get_filter_str(char *buf, int size); int log_get_fw_filter_str(char *buf, int size); #endif /* __LOG_H__ */