/***************************************************************************** * * Copyright (c) 2016-2018 Samsung Electronics Co., Ltd. All rights reserved * *****************************************************************************/ #ifndef _SCSC_LOGRING_H_ #define _SCSC_LOGRING_H_ #include #include #include #include #include #include /* NOTE_CREATING_TAGS: when adding a tag here REMEMBER to add it also * where required, taking care to maintain the same ordering. * (Search 4 NOTE_CREATING_TAGS) * * You must update "int *scsc_droplevels[]" to match. */ enum scsc_logring_tags { FIRST_TAG, FIRST_BIN_TAG = FIRST_TAG, BINARY = FIRST_BIN_TAG, BIN_WIFI_CTRL_RX, BIN_WIFI_DATA_RX, BIN_WIFI_CTRL_TX, BIN_WIFI_DATA_TX, LAST_BIN_TAG = BIN_WIFI_DATA_TX, NO_TAG, WLBT = NO_TAG, WIFI_RX, WIFI_TX, BT_COMMON, BT_H4, BT_FW, BT_RX, BT_TX, CPKTBUFF, FW_LOAD, FW_PANIC, GDB_TRANS, MIF, CLK20, CLK20_TEST, FM, FM_TEST, MX_FILE, MX_FW, MX_SAMPLER, MXLOG_TRANS, MXMAN, MXMAN_TEST, MXMGT_TRANS, MX_MMAP, MX_PROC, PANIC_MON, PCIE_MIF, PLAT_MIF, KIC_COMMON, WLBTD, WLOG, LERNA, MX_CFG, #ifdef CONFIG_SCSC_DEBUG_COMPATIBILITY SLSI_INIT_DEINIT, SLSI_NETDEV, SLSI_CFG80211, SLSI_MLME, SLSI_SUMMARY_FRAMES, SLSI_HYDRA, SLSI_TX, SLSI_RX, SLSI_UDI, SLSI_WIFI_FCQ, SLSI_HIP, SLSI_HIP_INIT_DEINIT, SLSI_HIP_FW_DL, SLSI_HIP_SDIO_OP, SLSI_HIP_PS, SLSI_HIP_TH, SLSI_HIP_FH, SLSI_HIP_SIG, SLSI_FUNC_TRACE, SLSI_TEST, SLSI_SRC_SINK, SLSI_FW_TEST, SLSI_RX_BA, SLSI_TDLS, SLSI_GSCAN, SLSI_MBULK, SLSI_FLOWC, SLSI_SMAPPER, #endif TEST_ME, MAX_TAG = TEST_ME /* keep it last */ }; #define NODEV_LABEL "" #define SCSC_SDEV_2_DEV(sdev) \ (((sdev) && (sdev)->wiphy) ? &((sdev)->wiphy->dev) : NULL) #define SCSC_NDEV_2_DEV(ndev) \ ((ndev) ? SCSC_SDEV_2_DEV(((struct netdev_vif *)netdev_priv(ndev))->sdev) : NULL) #define SCSC_PREFIX "wlbt: " /* prepended to log statements */ #define SCSC_TAG_FMT(tag, fmt) SCSC_PREFIX"[" # tag "]: %-5s: - %s: "fmt #define SCSC_TAG_DBG_FMT(tag, fmt) SCSC_PREFIX"[" # tag "]: %s: "fmt #define SCSC_DEV_FMT(fmt) SCSC_PREFIX"%-5s: - %s: "fmt #define SCSC_DBG_FMT(fmt) SCSC_PREFIX"%s: "fmt int scsc_logring_enable(bool logging_enable); #ifdef CONFIG_SCSC_PRINTK int scsc_printk_tag(int force, int tag, const char *fmt, ...); int scsc_printk_tag_dev(int force, int tag, struct device *dev, const char *fmt, ...); int scsc_printk_tag_dev_lvl(int force, int tag, struct device *dev, int lvl, const char *fmt, ...); int scsc_printk_tag_lvl(int tag, int lvl, const char *fmt, ...); int scsc_printk_bin(int force, int tag, int dlev, const void *start, size_t len); /** * This fields helps in trimming the behavior respect the kernel ring buffer: * - NO_FORCE_PRK: the tag-based filtering mechanism is obeyed. * - FORCE_PRK: the tag-based filtering is bypassed by this macro and message * always get to the kernel ring buffer * - NO_ECHO_PRK: disable completely the printk redirect. */ #define NO_FORCE_PRK 0 #define FORCE_PRK 1 #define NO_ECHO_PRK 2 #define SCSC_PRINTK(args ...) scsc_printk_tag(NO_FORCE_PRK, WLBT, \ args) #define SCSC_PRINTK_TAG(tag, args ...) scsc_printk_tag(NO_FORCE_PRK, (tag), \ args) #define SCSC_PRINTK_BIN(start, len) scsc_printk_bin(NO_FORCE_PRK, BINARY, \ -1, (start), (len)) #define SCSC_EMERG(fmt, args...) scsc_printk_tag(NO_FORCE_PRK, WLBT, \ KERN_EMERG SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_ALERT(fmt, args...) scsc_printk_tag(NO_FORCE_PRK, WLBT, \ KERN_ALERT SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_CRIT(fmt, args...) scsc_printk_tag(NO_FORCE_PRK, WLBT, \ KERN_CRIT SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_ERR(fmt, args...) scsc_printk_tag(NO_FORCE_PRK, WLBT, \ KERN_ERR SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_WARNING(fmt, args...) scsc_printk_tag(NO_FORCE_PRK, WLBT, \ KERN_WARNING SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_NOTICE(fmt, args...) scsc_printk_tag(NO_FORCE_PRK, WLBT, \ KERN_NOTICE SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_INFO(fmt, args...) scsc_printk_tag(NO_FORCE_PRK, WLBT, \ KERN_INFO SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_DEBUG(fmt, args...) scsc_printk_tag(NO_FORCE_PRK, WLBT, \ KERN_DEBUG SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_TAG_EMERG(tag, fmt, args...) scsc_printk_tag(NO_FORCE_PRK, (tag), \ KERN_EMERG SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_TAG_ALERT(tag, fmt, args...) scsc_printk_tag(NO_FORCE_PRK, (tag), \ KERN_ALERT SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_TAG_CRIT(tag, fmt, args ...) scsc_printk_tag(NO_FORCE_PRK, (tag), \ KERN_CRIT SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_TAG_ERR(tag, fmt, args...) scsc_printk_tag(NO_FORCE_PRK, (tag), \ KERN_ERR SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_TAG_WARNING(tag, fmt, args...) scsc_printk_tag(NO_FORCE_PRK, (tag), \ KERN_WARNING SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_TAG_NOTICE(tag, fmt, args...) scsc_printk_tag(NO_FORCE_PRK, (tag), \ KERN_NOTICE SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_TAG_INFO(tag, fmt, args...) scsc_printk_tag(NO_FORCE_PRK, (tag), \ KERN_INFO SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_TAG_DEBUG(tag, fmt, args...) scsc_printk_tag(NO_FORCE_PRK, (tag), \ KERN_DEBUG SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_TAG_ERR_SDEV(sdev, tag, fmt, args...) \ scsc_printk_tag_dev(NO_FORCE_PRK, (tag), SCSC_SDEV_2_DEV((sdev)), \ KERN_ERR SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_TAG_WARNING_SDEV(sdev, tag, fmt, args...) \ scsc_printk_tag_dev(NO_FORCE_PRK, (tag), SCSC_SDEV_2_DEV((sdev)), \ KERN_WARNING SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_TAG_INFO_SDEV(sdev, tag, fmt, args...) \ scsc_printk_tag_dev(NO_FORCE_PRK, (tag), SCSC_SDEV_2_DEV((sdev)), \ KERN_INFO SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_TAG_DEBUG_SDEV(sdev, tag, fmt, args...) \ scsc_printk_tag_dev(NO_FORCE_PRK, (tag), SCSC_SDEV_2_DEV((sdev)), \ KERN_DEBUG SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_TAG_ERR_NDEV(ndev, tag, fmt, args...) \ scsc_printk_tag_dev(NO_FORCE_PRK, (tag), SCSC_NDEV_2_DEV((ndev)), \ KERN_ERR SCSC_DEV_FMT(fmt), \ ((ndev) ? netdev_name(ndev) : NODEV_LABEL), \ __func__, ## args) #define SCSC_TAG_WARNING_NDEV(ndev, tag, fmt, args...) \ scsc_printk_tag_dev(NO_FORCE_PRK, (tag), SCSC_NDEV_2_DEV((ndev)), \ KERN_WARNING SCSC_DEV_FMT(fmt), \ ((ndev) ? netdev_name(ndev) : NODEV_LABEL), \ __func__, ## args) #define SCSC_TAG_INFO_NDEV(ndev, tag, fmt, args...) \ scsc_printk_tag_dev(NO_FORCE_PRK, (tag), SCSC_NDEV_2_DEV((ndev)), \ KERN_INFO SCSC_DEV_FMT(fmt), \ ((ndev) ? netdev_name(ndev) : NODEV_LABEL), \ __func__, ## args) #define SCSC_TAG_DEBUG_NDEV(ndev, tag, fmt, args...) \ scsc_printk_tag_dev(NO_FORCE_PRK, (tag), SCSC_NDEV_2_DEV((ndev)), \ KERN_DEBUG SCSC_DEV_FMT(fmt), \ ((ndev) ? netdev_name(ndev) : NODEV_LABEL), \ __func__, ## args) #define SCSC_TAG_ERR_DEV(tag, dev, fmt, args...) \ scsc_printk_tag_dev(NO_FORCE_PRK, (tag), dev, \ KERN_ERR SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_TAG_WARNING_DEV(tag, dev, fmt, args...) \ scsc_printk_tag_dev(NO_FORCE_PRK, (tag), dev, \ KERN_WARNING SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_TAG_INFO_DEV(tag, dev, fmt, args...) \ scsc_printk_tag_dev(NO_FORCE_PRK, (tag), dev, \ KERN_INFO SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_TAG_DEBUG_DEV(tag, dev, fmt, args...) \ scsc_printk_tag_dev(NO_FORCE_PRK, (tag), dev, \ KERN_DEBUG SCSC_DBG_FMT(fmt), \ __func__, ## args) #define SCSC_ERR_SDEV(sdev, fmt, args...) \ SCSC_TAG_ERR_SDEV(sdev, WLBT, fmt, ## args) #define SCSC_WARNING_SDEV(sdev, fmt, args...) \ SCSC_TAG_WARNING_SDEV(sdev, WLBT, fmt, ## args) #define SCSC_INFO_SDEV(sdev, fmt, args...) \ SCSC_TAG_INFO_SDEV(sdev, WLBT, fmt, ## args) #define SCSC_ERR_NDEV(ndev, fmt, args...) \ SCSC_TAG_ERR_NDEV(ndev, WLBT, fmt, ## args) #define SCSC_WARNING_NDEV(ndev, fmt, args...) \ SCSC_TAG_WARNING_NDEV(ndev, WLBT, fmt, ## args) #define SCSC_INFO_NDEV(ndev, fmt, args...) \ SCSC_TAG_INFO_NDEV(ndev, WLBT, fmt, ## args) #define SCSC_BIN_EMERG(start, len) scsc_printk_bin(NO_FORCE_PRK, BINARY, 0, \ (start), (len)) #define SCSC_BIN_ALERT(start, len) scsc_printk_bin(NO_FORCE_PRK, BINARY, 1, \ (start), (len)) #define SCSC_BIN_CRIT(start, len) scsc_printk_bin(NO_FORCE_PRK, BINARY, 2, \ (start), (len)) #define SCSC_BIN_ERR(start, len) scsc_printk_bin(NO_FORCE_PRK, BINARY, 3, \ (start), (len)) #define SCSC_BIN_WARNING(start, len) scsc_printk_bin(NO_FORCE_PRK, BINARY, 4, \ (start), (len)) #define SCSC_BIN_NOTICE(start, len) scsc_printk_bin(NO_FORCE_PRK, BINARY, 5, \ (start), (len)) #define SCSC_BIN_INFO(start, len) scsc_printk_bin(NO_FORCE_PRK, BINARY, 6, \ (start), (len)) #define SCSC_BIN_DEBUG(start, len) scsc_printk_bin(NO_FORCE_PRK, BINARY, 7, \ (start), (len)) #define SCSC_BIN_TAG_EMERG(tag, start, len) scsc_printk_bin(NO_FORCE_PRK, (tag), 0, \ (start), (len)) #define SCSC_BIN_TAG_ALERT(tag, start, len) scsc_printk_bin(NO_FORCE_PRK, (tag), 1, \ (start), (len)) #define SCSC_BIN_TAG_CRIT(tag, start, len) scsc_printk_bin(NO_FORCE_PRK, (tag), 2, \ (start), (len)) #define SCSC_BIN_TAG_ERR(tag, start, len) scsc_printk_bin(NO_FORCE_PRK, (tag), 3, \ (start), (len)) #define SCSC_BIN_TAG_WARNING(tag, start, len) scsc_printk_bin(NO_FORCE_PRK, (tag), 4, \ (start), (len)) #define SCSC_BIN_TAG_NOTICE(tag, start, len) scsc_printk_bin(NO_FORCE_PRK, (tag), 5, \ (start), (len)) #define SCSC_BIN_TAG_INFO(tag, start, len) scsc_printk_bin(NO_FORCE_PRK, (tag), 6, \ (start), (len)) #define SCSC_BIN_TAG_DEBUG(tag, start, len) scsc_printk_bin(NO_FORCE_PRK, (tag), 7, \ (start), (len)) /* * These macros forces a redundant copy of their output to kernel log buffer and * console through standard kernel facilities, NO matter how the tag-based * filtering is configured and NO matter what the value in * scsc_redirect_to_printk_droplvl module param. */ #define SCSC_PRINTK_FF(args ...) scsc_printk_tag(FORCE_PRK, WLBT, args) #define SCSC_PRINTK_TAG_FF(tag, args ...) scsc_printk_tag(FORCE_PRK, (tag), args) #define SCSC_PRINTK_BIN_FF(start, len) scsc_printk_bin(FORCE_PRK, -1, \ (start), (len)) #define SCSC_EMERG_FF(args ...) scsc_printk_tag(FORCE_PRK, WLBT, \ KERN_EMERG SCSC_PREFIX args) #define SCSC_ALERT_FF(args ...) scsc_printk_tag(FORCE_PRK, WLBT, \ KERN_ALERT SCSC_PREFIX args) #define SCSC_CRIT_FF(args ...) scsc_printk_tag(FORCE_PRK, WLBT, \ KERN_CRIT SCSC_PREFIX args) #define SCSC_ERR_FF(args ...) scsc_printk_tag(FORCE_PRK, WLBT, \ KERN_ERR SCSC_PREFIX args) #define SCSC_WARNING_FF(args ...) scsc_printk_tag(FORCE_PRK, WLBT, \ KERN_WARNING SCSC_PREFIX args) #define SCSC_NOTICE_FF(args ...) scsc_printk_tag(FORCE_PRK, WLBT, \ KERN_NOTICE SCSC_PREFIX args) #define SCSC_INFO_FF(args ...) scsc_printk_tag(FORCE_PRK, WLBT, \ KERN_INFO SCSC_PREFIX args) #define SCSC_DEBUG_FF(args ...) scsc_printk_tag(FORCE_PRK, WLBT, \ KERN_DEBUG SCSC_PREFIX args) #define SCSC_TAG_EMERG_FF(tag, args ...) scsc_printk_tag(FORCE_PRK, (tag), \ KERN_EMERG SCSC_PREFIX args) #define SCSC_TAG_ALERT_FF(tag, args ...) scsc_printk_tag(FORCE_PRK, (tag), \ KERN_ALERT SCSC_PREFIX args) #define SCSC_TAG_CRIT_FF(tag, args ...) scsc_printk_tag(FORCE_PRK, (tag), \ KERN_CRIT SCSC_PREFIX args) #define SCSC_TAG_ERR_FF(tag, args ...) scsc_printk_tag(FORCE_PRK, (tag), \ KERN_ERR SCSC_PREFIX args) #define SCSC_TAG_WARNING_FF(tag, args ...) scsc_printk_tag(FORCE_PRK, (tag), \ KERN_WARNING SCSC_PREFIX args) #define SCSC_TAG_NOTICE_FF(tag, args ...) scsc_printk_tag(FORCE_PRK, (tag), \ KERN_NOTICE SCSC_PREFIX args) #define SCSC_TAG_INFO_FF(tag, args ...) scsc_printk_tag(FORCE_PRK, (tag), \ KERN_INFO SCSC_PREFIX args) #define SCSC_TAG_DEBUG_FF(tag, args ...) scsc_printk_tag(FORCE_PRK, (tag), \ KERN_DEBUG SCSC_PREFIX args) #define SCSC_BIN_EMERG_FF(start, len) scsc_printk_bin(FORCE_PRK, 0, \ (start), (len)) #define SCSC_BIN_ALERT_FF(start, len) scsc_printk_bin(FORCE_PRK, 1, \ (start), (len)) #define SCSC_BIN_CRIT_FF(start, len) scsc_printk_bin(FORCE_PRK, 2, \ (start), (len)) #define SCSC_BIN_ERR_FF(start, len) scsc_printk_bin(FORCE_PRK, 3, \ (start), (len)) #define SCSC_BIN_WARNING_FF(start, len) scsc_printk_bin(FORCE_PRK, 4, \ (start), (len)) #define SCSC_BIN_NOTICE_FF(start, len) scsc_printk_bin(FORCE_PRK, 5, \ (start), (len)) #define SCSC_BIN_INFO_FF(start, len) scsc_printk_bin(FORCE_PRK, 6, \ (start), (len)) #define SCSC_BIN_DEBUG_FF(start, len) scsc_printk_bin(FORCE_PRK, 7, \ (start), (len)) #define SCSC_TAG_LVL(tag, lvl, fmt, args...) \ scsc_printk_tag_lvl((tag), (lvl), fmt, ## args) #define SCSC_TAG_DEV_LVL(tag, lvl, dev, fmt, args...) \ scsc_printk_tag_dev_lvl(NO_FORCE_PRK, (tag), (dev), (lvl), fmt, ## args) #define SCSC_TAG_DBG1_SDEV(sdev, tag, fmt, args...) \ SCSC_TAG_DEV_LVL((tag), 7, SCSC_SDEV_2_DEV((sdev)), \ SCSC_DBG_FMT(fmt), __func__, ## args) #define SCSC_TAG_DBG2_SDEV(sdev, tag, fmt, args...) \ SCSC_TAG_DEV_LVL((tag), 8, SCSC_SDEV_2_DEV((sdev)), \ SCSC_DBG_FMT(fmt), __func__, ## args) #define SCSC_TAG_DBG3_SDEV(sdev, tag, fmt, args...) \ SCSC_TAG_DEV_LVL((tag), 9, SCSC_SDEV_2_DEV((sdev)), \ SCSC_DBG_FMT(fmt), __func__, ## args) #define SCSC_TAG_DBG4_SDEV(sdev, tag, fmt, args...) \ SCSC_TAG_DEV_LVL((tag), 10, SCSC_SDEV_2_DEV((sdev)), \ SCSC_DBG_FMT(fmt), __func__, ## args) #define SCSC_TAG_DBG1_NDEV(ndev, tag, fmt, args...) \ SCSC_TAG_DEV_LVL((tag), 7, SCSC_NDEV_2_DEV((ndev)), SCSC_DEV_FMT(fmt), \ ((ndev) ? netdev_name(ndev) : NODEV_LABEL), \ __func__, ## args) #define SCSC_TAG_DBG2_NDEV(ndev, tag, fmt, args...) \ SCSC_TAG_DEV_LVL((tag), 8, SCSC_NDEV_2_DEV((ndev)), SCSC_DEV_FMT(fmt), \ ((ndev) ? netdev_name(ndev) : NODEV_LABEL), \ __func__, ## args) #define SCSC_TAG_DBG3_NDEV(ndev, tag, fmt, args...) \ SCSC_TAG_DEV_LVL((tag), 9, SCSC_NDEV_2_DEV((ndev)), SCSC_DEV_FMT(fmt), \ ((ndev) ? netdev_name(ndev) : NODEV_LABEL), \ __func__, ## args) #define SCSC_TAG_DBG4_NDEV(ndev, tag, fmt, args...) \ SCSC_TAG_DEV_LVL((tag), 10, SCSC_NDEV_2_DEV((ndev)), SCSC_DEV_FMT(fmt), \ ((ndev) ? netdev_name(ndev) : NODEV_LABEL), \ __func__, ## args) #define SCSC_TAG_DBG1(tag, fmt, args ...) \ SCSC_TAG_LVL((tag), 7, fmt, ## args) #define SCSC_TAG_DBG2(tag, fmt, args ...) \ SCSC_TAG_LVL((tag), 8, fmt, ## args) #define SCSC_TAG_DBG3(tag, fmt, args ...) \ SCSC_TAG_LVL((tag), 9, fmt, ## args) #define SCSC_TAG_DBG4(tag, fmt, args ...) \ SCSC_TAG_LVL((tag), 10, fmt, ## args) #else /* CONFIG_SCSC_PRINTK */ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0)) #define SCSC_TAG_LVL(tag, lvl, fmt, args...) \ do {\ if ((lvl) < 7)\ dev_printk_emit((lvl), NULL, fmt, ## args);\ } while (0) #else #define SCSC_TAG_DEV_LVL(tag, lvl, dev, fmt, args...) \ do {\ if ((lvl) < 7)\ printk_emit((lvl), (dev), fmt, ## args);\ } while (0) #endif #define SCSC_PRINTK(fmt, args ...) printk(SCSC_PREFIX fmt, ## args) #define SCSC_PRINTK_TAG(tag, fmt, args ...) printk(SCSC_PREFIX "[" # tag "] "fmt, ## args) #define SCSC_PRINTK_BIN(start, len) print_hex_dump(KERN_INFO, \ SCSC_PREFIX"[BINARY]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_PRINTK_FF(fmt, args ...) printk(SCSC_PREFIX fmt, ## args) #define SCSC_PRINTK_TAG_FF(tag, fmt, args ...) printk(SCSC_PREFIX"[" # tag "] "fmt, ## args) #define SCSC_PRINTK_BIN_FF(start, len) print_hex_dump(KERN_INFO, \ SCSC_PREFIX"[BINARY]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_EMERG(fmt, args...) pr_emerg(SCSC_DBG_FMT(fmt), __func__, ## args) #define SCSC_ALERT(fmt, args...) pr_alert(SCSC_DBG_FMT(fmt), __func__, ## args) #define SCSC_CRIT(fmt, args...) pr_crit(SCSC_DBG_FMT(fmt), __func__, ## args) #define SCSC_ERR(fmt, args...) pr_err(SCSC_DBG_FMT(fmt), __func__, ## args) #define SCSC_WARNING(fmt, args...) pr_warn(SCSC_DBG_FMT(fmt), __func__, ## args) #define SCSC_NOTICE(fmt, args...) pr_notice(SCSC_DBG_FMT(fmt), __func__, ## args) #define SCSC_INFO(fmt, args...) pr_info(SCSC_DBG_FMT(fmt), __func__, ## args) #define SCSC_DEBUG(args...) do {} while (0) /* Reverting to pr_* keeping the [tag] */ #define SCSC_TAG_EMERG(tag, fmt, args...) \ pr_emerg(SCSC_TAG_DBG_FMT(tag, fmt), __func__, ## args) #define SCSC_TAG_ALERT(tag, fmt, args...) \ pr_alert(SCSC_TAG_DBG_FMT(tag, fmt), __func__, ## args) #define SCSC_TAG_CRIT(tag, fmt, args...) \ pr_crit(SCSC_TAG_DBG_FMT(tag, fmt), __func__, ## args) #define SCSC_TAG_ERR(tag, fmt, args...) \ pr_err(SCSC_TAG_DBG_FMT(tag, fmt), __func__, ## args) #define SCSC_TAG_WARNING(tag, fmt, args...) \ pr_warn(SCSC_TAG_DBG_FMT(tag, fmt), __func__, ## args) #define SCSC_TAG_NOTICE(tag, fmt, args...) \ pr_notice(SCSC_TAG_DBG_FMT(tag, fmt), __func__, ## args) #define SCSC_TAG_INFO(tag, fmt, args...) \ pr_info(SCSC_TAG_DBG_FMT(tag, fmt), __func__, ## args) #define SCSC_TAG_DEBUG(tag, fmt, args...) do {} while (0) #define SCSC_BIN_EMERG(start, len) print_hex_dump(KERN_EMERG, \ SCSC_PREFIX"[BINARY]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_ALERT(start, len) print_hex_dump(KERN_ALERT, \ SCSC_PREFIX"[BINARY]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_CRIT(start, len) print_hex_dump(KERN_CRIT, \ SCSC_PREFIX"[BINARY]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_ERR(start, len) print_hex_dump(KERN_ERR, \ SCSC_PREFIX"[BINARY]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_WARNING(start, len) print_hex_dump(KERN_WARNING, \ SCSC_PREFIX"[BINARY]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_NOTICE(start, len) print_hex_dump(KERN_NOTICE, \ SCSC_PREFIX"[BINARY]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_INFO(start, len) print_hex_dump(KERN_INFO, \ SCSC_PREFIX"[BINARY]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_DEBUG(start, len) do {} while (0) #define SCSC_BIN_TAG_EMERG(tag, start, len) print_hex_dump(KERN_EMERG, \ SCSC_PREFIX"[" # tag "]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_TAG_ALERT(tag, start, len) print_hex_dump(KERN_ALERT, \ SCSC_PREFIX"[" # tag "]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_TAG_CRIT(tag, start, len) print_hex_dump(KERN_CRIT, \ SCSC_PREFIX"[" # tag "]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_TAG_ERR(tag, start, len) print_hex_dump(KERN_ERR, \ SCSC_PREFIX"[" # tag "]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_TAG_WARNING(tag, start, len) print_hex_dump(KERN_WARNING, \ SCSC_PREFIX"[" # tag "]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_TAG_NOTICE(tag, start, len) print_hex_dump(KERN_NOTICE, \ SCSC_PREFIX"[" # tag "]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_TAG_INFO(tag, start, len) print_hex_dump(KERN_INFO, \ SCSC_PREFIX"[" # tag "]->|", \ DUMP_PREFIX_NONE, \ 16, 1, start, \ len, false) #define SCSC_BIN_TAG_DEBUG(tag, start, len) do {} while (0) #define SCSC_EMERG_FF(args ...) pr_emerg(SCSC_PREFIX args) #define SCSC_ALERT_FF(args ...) pr_alert(SCSC_PREFIX args) #define SCSC_CRIT_FF(args ...) pr_crit(SCSC_PREFIX args) #define SCSC_ERR_FF(args ...) pr_err(SCSC_PREFIX args) #define SCSC_WARNING_FF(args ...) pr_warn(SCSC_PREFIX args) #define SCSC_NOTICE_FF(args ...) pr_notice(SCSC_PREFIX args) #define SCSC_INFO_FF(args ...) pr_info(SCSC_PREFIX args) #define SCSC_DEBUG_FF(args ...) do {} while (0) #define SCSC_TAG_EMERG_FF(tag, fmt, args ...) pr_emerg(SCSC_TAG_DBG_FMT(tag, fmt), \ __func__, ## args) #define SCSC_TAG_ALERT_FF(tag, fmt, args ...) pr_alert(SCSC_TAG_DBG_FMT(tag, fmt), \ __func__, ## args) #define SCSC_TAG_CRIT_FF(tag, fmt, args ...) pr_crit(SCSC_TAG_DBG_FMT(tag, fmt), \ __func__, ## args) #define SCSC_TAG_ERR_FF(tag, fmt, args ...) pr_err(SCSC_TAG_DBG_FMT(tag, fmt), \ __func__, ## args) #define SCSC_TAG_WARNING_FF(tag, fmt, args ...) pr_warn(SCSC_TAG_DBG_FMT(tag, fmt), \ __func__, ## args) #define SCSC_TAG_NOTICE_FF(tag, fmt, args ...) pr_notice(SCSC_TAG_DBG_FMT(tag, fmt), \ __func__, ## args) #define SCSC_TAG_INFO_FF(tag, fmt, args ...) pr_info(SCSC_TAG_DBG_FMT(tag, fmt), \ __func__, ## args) #define SCSC_TAG_DEBUG_FF(tag, fmt, args ...) do {} while (0) #define SCSC_BIN_EMERG_FF(start, len) print_hex_dump(KERN_EMERG, \ SCSC_PREFIX"[BINARY]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_ALERT_FF(start, len) print_hex_dump(KERN_ALERT, \ SCSC_PREFIX"[BINARY]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_CRIT_FF(start, len) print_hex_dump(KERN_CRIT, \ SCSC_PREFIX"[BINARY]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_ERR_FF(start, len) print_hex_dump(KERN_ERR, \ SCSC_PREFIX"[BINARY]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_WARNING_FF(start, len) print_hex_dump(KERN_WARNING, \ SCSC_PREFIX"[BINARY]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_NOTICE_FF(start, len) print_hex_dump(KERN_NOTICE, \ SCSC_PREFIX"[BINARY]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_INFO_FF(start, len) print_hex_dump(KERN_INFO, \ SCSC_PREFIX"[BINARY]->|", \ DUMP_PREFIX_ADDRESS, \ 16, 4, start, \ len, true) #define SCSC_BIN_DEBUG_FF(start, len) do {} while (0) #define SCSC_TAG_ERR_SDEV(sdev, tag, fmt, args...) \ dev_err(SCSC_SDEV_2_DEV((sdev)), SCSC_TAG_DBG_FMT(tag, fmt), \ __func__, ## args) #define SCSC_TAG_WARNING_SDEV(sdev, tag, fmt, args...) \ dev_warn(SCSC_SDEV_2_DEV((sdev)), SCSC_TAG_DBG_FMT(tag, fmt), \ __func__, ## args) #define SCSC_TAG_INFO_SDEV(sdev, tag, fmt, args...) \ dev_info(SCSC_SDEV_2_DEV((sdev)), SCSC_TAG_DBG_FMT(tag, fmt), \ __func__, ## args) #define SCSC_TAG_DEBUG_SDEV(sdev, tag, fmt, args...) do {} while (0) #define SCSC_TAG_ERR_NDEV(ndev, tag, fmt, args...) \ dev_err(SCSC_NDEV_2_DEV((ndev)), SCSC_TAG_FMT(tag, fmt), \ ((ndev) ? netdev_name(ndev) : NODEV_LABEL), __func__, ## args) #define SCSC_TAG_WARNING_NDEV(ndev, tag, fmt, args...) \ dev_warn(SCSC_NDEV_2_DEV((ndev)), SCSC_TAG_FMT(tag, fmt), \ ((ndev) ? netdev_name(ndev) : NODEV_LABEL), __func__, ## args) #define SCSC_TAG_INFO_NDEV(ndev, tag, fmt, args...) \ dev_info(SCSC_NDEV_2_DEV((ndev)), SCSC_TAG_FMT(tag, fmt), \ ((ndev) ? netdev_name(ndev) : NODEV_LABEL), __func__, ## args) #define SCSC_TAG_DEBUG_NDEV(ndev, tag, fmt, args...) do {} while (0) #define SCSC_TAG_ERR_DEV(tag, dev, fmt, args...) \ dev_err(dev, SCSC_TAG_DBG_FMT(tag, fmt), \ __func__, ## args) #define SCSC_TAG_WARNING_DEV(tag, dev, fmt, args...) \ dev_warn(dev, SCSC_TAG_DBG_FMT(tag, fmt), \ __func__, ## args) #define SCSC_TAG_INFO_DEV(tag, dev, fmt, args...) \ dev_info(dev, SCSC_TAG_DBG_FMT(tag, fmt), \ __func__, ## args) #define SCSC_TAG_DEBUG_DEV(tag, dev, fmt, args...) do {} while (0) #define SCSC_ERR_SDEV(sdev, fmt, args...) \ SCSC_TAG_ERR_SDEV(sdev, WLBT, fmt, ## args) #define SCSC_WARNING_SDEV(sdev, fmt, args...) \ SCSC_TAG_WARNING_SDEV(sdev, WLBT, fmt, ## args) #define SCSC_INFO_SDEV(sdev, fmt, args...) \ SCSC_TAG_INFO_SDEV(sdev, WLBT, fmt, ## args) #define SCSC_ERR_NDEV(ndev, fmt, args...) \ SCSC_TAG_ERR_NDEV(ndev, WLBT, fmt, ## args) #define SCSC_WARNING_NDEV(ndev, fmt, args...) \ SCSC_TAG_WARNING_NDEV(ndev, WLBT, fmt, ## args) #define SCSC_INFO_NDEV(ndev, fmt, args...) \ SCSC_TAG_INFO_NDEV(ndev, WLBT, fmt, ## args) #define SCSC_TAG_DBG1_SDEV(sdev, tag, fmt, args...) do {} while (0) #define SCSC_TAG_DBG2_SDEV(sdev, tag, fmt, args...) do {} while (0) #define SCSC_TAG_DBG3_SDEV(sdev, tag, fmt, args...) do {} while (0) #define SCSC_TAG_DBG4_SDEV(sdev, tag, fmt, args...) do {} while (0) #define SCSC_TAG_DBG1_NDEV(ndev, tag, fmt, args...) do {} while (0) #define SCSC_TAG_DBG2_NDEV(ndev, tag, fmt, args...) do {} while (0) #define SCSC_TAG_DBG3_NDEV(ndev, tag, fmt, args...) do {} while (0) #define SCSC_TAG_DBG4_NDEV(ndev, tag, fmt, args...) do {} while (0) #define SCSC_TAG_DBG1(tag, fmt, args ...) do {} while (0) #define SCSC_TAG_DBG2(tag, fmt, args ...) do {} while (0) #define SCSC_TAG_DBG3(tag, fmt, args ...) do {} while (0) #define SCSC_TAG_DBG4(tag, fmt, args ...) do {} while (0) #endif /* callbacks to mxman */ struct scsc_logring_mx_cb { int (*scsc_logring_register_observer)(struct scsc_logring_mx_cb *mx_cb, char *name); int (*scsc_logring_unregister_observer)(struct scsc_logring_mx_cb *mx_cb, char *name); }; int scsc_logring_register_mx_cb(struct scsc_logring_mx_cb *mx_cb); int scsc_logring_unregister_mx_cb(struct scsc_logring_mx_cb *mx_cb); #endif /* _SCSC_LOGRING_H_ */