1 /* SPDX-License-Identifier: BSD-3-Clause 2 * 3 * Copyright(c) 2019-2021 Xilinx, Inc. 4 * Copyright(c) 2016-2019 Solarflare Communications Inc. 5 * 6 * This software was jointly developed between OKTET Labs (under contract 7 * for Solarflare) and Solarflare Communications, Inc. 8 */ 9 10 #ifndef _SFC_LOG_H_ 11 #define _SFC_LOG_H_ 12 13 /** Generic driver log type */ 14 extern int sfc_logtype_driver; 15 16 /** Log PMD generic message, add a prefix and a line break */ 17 #define SFC_GENERIC_LOG(level, ...) \ 18 rte_log(RTE_LOG_ ## level, sfc_logtype_driver, \ 19 RTE_FMT("PMD: " RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \ 20 RTE_FMT_TAIL(__VA_ARGS__ ,))) 21 22 /** Name prefix for the per-device log type used to report basic information */ 23 #define SFC_LOGTYPE_MAIN_STR RTE_STR(RTE_LOG_DEFAULT_LOGTYPE) ".main" 24 25 /** Device MCDI log type name prefix */ 26 #define SFC_LOGTYPE_MCDI_STR RTE_STR(RTE_LOG_DEFAULT_LOGTYPE) ".mcdi" 27 28 #define SFC_LOG_PREFIX_MAX 32 29 30 /* Log PMD message, automatically add prefix and \n */ 31 #define SFC_LOG(sas, level, type, ...) \ 32 do { \ 33 const struct sfc_adapter_shared *_sas = (sas); \ 34 \ 35 rte_log(level, type, \ 36 RTE_FMT("%s" RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \ 37 _sas->log_prefix, \ 38 RTE_FMT_TAIL(__VA_ARGS__,))); \ 39 } while (0) 40 41 #define sfc_err(sa, ...) \ 42 do { \ 43 const struct sfc_adapter *_sa = (sa); \ 44 \ 45 SFC_LOG(_sa->priv.shared, RTE_LOG_ERR, \ 46 _sa->priv.logtype_main, __VA_ARGS__); \ 47 } while (0) 48 49 #define sfc_warn(sa, ...) \ 50 do { \ 51 const struct sfc_adapter *_sa = (sa); \ 52 \ 53 SFC_LOG(_sa->priv.shared, RTE_LOG_WARNING, \ 54 _sa->priv.logtype_main, __VA_ARGS__); \ 55 } while (0) 56 57 #define sfc_notice(sa, ...) \ 58 do { \ 59 const struct sfc_adapter *_sa = (sa); \ 60 \ 61 SFC_LOG(_sa->priv.shared, RTE_LOG_NOTICE, \ 62 _sa->priv.logtype_main, __VA_ARGS__); \ 63 } while (0) 64 65 #define sfc_info(sa, ...) \ 66 do { \ 67 const struct sfc_adapter *_sa = (sa); \ 68 \ 69 SFC_LOG(_sa->priv.shared, RTE_LOG_INFO, \ 70 _sa->priv.logtype_main, __VA_ARGS__); \ 71 } while (0) 72 73 #define sfc_dbg(sa, ...) \ 74 do { \ 75 const struct sfc_adapter *_sa = (sa); \ 76 \ 77 SFC_LOG(_sa->priv.shared, RTE_LOG_DEBUG, \ 78 _sa->priv.logtype_main, __VA_ARGS__); \ 79 } while (0) 80 81 #define sfc_log_init(sa, ...) \ 82 do { \ 83 const struct sfc_adapter *_sa = (sa); \ 84 \ 85 SFC_LOG(_sa->priv.shared, RTE_LOG_INFO, \ 86 _sa->priv.logtype_main, \ 87 RTE_FMT("%s(): " \ 88 RTE_FMT_HEAD(__VA_ARGS__ ,), \ 89 __func__, \ 90 RTE_FMT_TAIL(__VA_ARGS__ ,))); \ 91 } while (0) 92 93 94 #endif /* _SFC_LOG_H_ */ 95