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 uint32_t sfc_logtype_driver; 15 16 /** Common log type name prefix */ 17 #define SFC_LOGTYPE_PREFIX "pmd.net.sfc." 18 19 /** Log PMD generic message, add a prefix and a line break */ 20 #define SFC_GENERIC_LOG(level, ...) \ 21 rte_log(RTE_LOG_ ## level, sfc_logtype_driver, \ 22 RTE_FMT("PMD: " RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \ 23 RTE_FMT_TAIL(__VA_ARGS__ ,))) 24 25 /** Name prefix for the per-device log type used to report basic information */ 26 #define SFC_LOGTYPE_MAIN_STR SFC_LOGTYPE_PREFIX "main" 27 28 /** Device MCDI log type name prefix */ 29 #define SFC_LOGTYPE_MCDI_STR SFC_LOGTYPE_PREFIX "mcdi" 30 31 #define SFC_LOG_PREFIX_MAX 32 32 33 /* Log PMD message, automatically add prefix and \n */ 34 #define SFC_LOG(sas, level, type, ...) \ 35 do { \ 36 const struct sfc_adapter_shared *_sas = (sas); \ 37 \ 38 rte_log(level, type, \ 39 RTE_FMT("%s" RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \ 40 _sas->log_prefix, \ 41 RTE_FMT_TAIL(__VA_ARGS__,))); \ 42 } while (0) 43 44 #define sfc_err(sa, ...) \ 45 do { \ 46 const struct sfc_adapter *_sa = (sa); \ 47 \ 48 SFC_LOG(_sa->priv.shared, RTE_LOG_ERR, \ 49 _sa->priv.logtype_main, __VA_ARGS__); \ 50 } while (0) 51 52 #define sfc_warn(sa, ...) \ 53 do { \ 54 const struct sfc_adapter *_sa = (sa); \ 55 \ 56 SFC_LOG(_sa->priv.shared, RTE_LOG_WARNING, \ 57 _sa->priv.logtype_main, __VA_ARGS__); \ 58 } while (0) 59 60 #define sfc_notice(sa, ...) \ 61 do { \ 62 const struct sfc_adapter *_sa = (sa); \ 63 \ 64 SFC_LOG(_sa->priv.shared, RTE_LOG_NOTICE, \ 65 _sa->priv.logtype_main, __VA_ARGS__); \ 66 } while (0) 67 68 #define sfc_info(sa, ...) \ 69 do { \ 70 const struct sfc_adapter *_sa = (sa); \ 71 \ 72 SFC_LOG(_sa->priv.shared, RTE_LOG_INFO, \ 73 _sa->priv.logtype_main, __VA_ARGS__); \ 74 } while (0) 75 76 #define sfc_log_init(sa, ...) \ 77 do { \ 78 const struct sfc_adapter *_sa = (sa); \ 79 \ 80 SFC_LOG(_sa->priv.shared, RTE_LOG_INFO, \ 81 _sa->priv.logtype_main, \ 82 RTE_FMT("%s(): " \ 83 RTE_FMT_HEAD(__VA_ARGS__ ,), \ 84 __func__, \ 85 RTE_FMT_TAIL(__VA_ARGS__ ,))); \ 86 } while (0) 87 88 89 #endif /* _SFC_LOG_H_ */ 90