1 /* SPDX-License-Identifier: BSD-3-Clause 2 * 3 * Copyright (c) 2016-2018 Solarflare Communications Inc. 4 * All rights reserved. 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 /** Level value used by MCDI log statements */ 32 #define SFC_LOG_LEVEL_MCDI RTE_LOG_INFO 33 34 /* Log PMD message, automatically add prefix and \n */ 35 #define SFC_LOG(sa, level, type, ...) \ 36 do { \ 37 const struct sfc_adapter *__sa = (sa); \ 38 \ 39 rte_log(level, type, \ 40 RTE_FMT("PMD: sfc_efx " \ 41 PCI_PRI_FMT " #%" PRIu16 \ 42 ": " RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \ 43 __sa->pci_addr.domain, \ 44 __sa->pci_addr.bus, \ 45 __sa->pci_addr.devid, \ 46 __sa->pci_addr.function, \ 47 __sa->port_id, \ 48 RTE_FMT_TAIL(__VA_ARGS__,))); \ 49 } while (0) 50 51 #define sfc_err(sa, ...) \ 52 do { \ 53 const struct sfc_adapter *_sa = (sa); \ 54 \ 55 SFC_LOG(_sa, RTE_LOG_ERR, _sa->logtype_main, \ 56 __VA_ARGS__); \ 57 } while (0) 58 59 #define sfc_warn(sa, ...) \ 60 do { \ 61 const struct sfc_adapter *_sa = (sa); \ 62 \ 63 SFC_LOG(_sa, RTE_LOG_WARNING, _sa->logtype_main, \ 64 __VA_ARGS__); \ 65 } while (0) 66 67 #define sfc_notice(sa, ...) \ 68 do { \ 69 const struct sfc_adapter *_sa = (sa); \ 70 \ 71 SFC_LOG(_sa, RTE_LOG_NOTICE, _sa->logtype_main, \ 72 __VA_ARGS__); \ 73 } while (0) 74 75 #define sfc_info(sa, ...) \ 76 do { \ 77 const struct sfc_adapter *_sa = (sa); \ 78 \ 79 SFC_LOG(_sa, RTE_LOG_INFO, _sa->logtype_main, \ 80 __VA_ARGS__); \ 81 } while (0) 82 83 #define sfc_log_init(sa, ...) \ 84 do { \ 85 const struct sfc_adapter *_sa = (sa); \ 86 \ 87 SFC_LOG(_sa, RTE_LOG_INFO, _sa->logtype_main, \ 88 RTE_FMT("%s(): " \ 89 RTE_FMT_HEAD(__VA_ARGS__ ,), \ 90 __func__, \ 91 RTE_FMT_TAIL(__VA_ARGS__ ,))); \ 92 } while (0) 93 94 #define sfc_log_mcdi(sa, ...) \ 95 do { \ 96 const struct sfc_adapter *_sa = (sa); \ 97 \ 98 SFC_LOG(_sa, SFC_LOG_LEVEL_MCDI, _sa->mcdi.logtype, \ 99 __VA_ARGS__); \ 100 } while (0) 101 102 103 #endif /* _SFC_LOG_H_ */ 104