1*ca853deeSEric Joyner /* SPDX-License-Identifier: BSD-3-Clause */ 2*ca853deeSEric Joyner /* Copyright (c) 2021, Intel Corporation 3*ca853deeSEric Joyner * All rights reserved. 4*ca853deeSEric Joyner * 5*ca853deeSEric Joyner * Redistribution and use in source and binary forms, with or without 6*ca853deeSEric Joyner * modification, are permitted provided that the following conditions are met: 7*ca853deeSEric Joyner * 8*ca853deeSEric Joyner * 1. Redistributions of source code must retain the above copyright notice, 9*ca853deeSEric Joyner * this list of conditions and the following disclaimer. 10*ca853deeSEric Joyner * 11*ca853deeSEric Joyner * 2. Redistributions in binary form must reproduce the above copyright 12*ca853deeSEric Joyner * notice, this list of conditions and the following disclaimer in the 13*ca853deeSEric Joyner * documentation and/or other materials provided with the distribution. 14*ca853deeSEric Joyner * 15*ca853deeSEric Joyner * 3. Neither the name of the Intel Corporation nor the names of its 16*ca853deeSEric Joyner * contributors may be used to endorse or promote products derived from 17*ca853deeSEric Joyner * this software without specific prior written permission. 18*ca853deeSEric Joyner * 19*ca853deeSEric Joyner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20*ca853deeSEric Joyner * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21*ca853deeSEric Joyner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22*ca853deeSEric Joyner * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23*ca853deeSEric Joyner * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24*ca853deeSEric Joyner * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25*ca853deeSEric Joyner * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26*ca853deeSEric Joyner * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27*ca853deeSEric Joyner * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28*ca853deeSEric Joyner * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29*ca853deeSEric Joyner * POSSIBILITY OF SUCH DAMAGE. 30*ca853deeSEric Joyner */ 31*ca853deeSEric Joyner 32*ca853deeSEric Joyner /** 33*ca853deeSEric Joyner * @file iavf_debug.h 34*ca853deeSEric Joyner * @brief Debug macros 35*ca853deeSEric Joyner * 36*ca853deeSEric Joyner * Contains definitions for useful debug macros which can be enabled by 37*ca853deeSEric Joyner * building with IAVF_DEBUG defined. 38*ca853deeSEric Joyner */ 39*ca853deeSEric Joyner #ifndef _IAVF_DEBUG_H_ 40*ca853deeSEric Joyner #define _IAVF_DEBUG_H_ 41*ca853deeSEric Joyner 42*ca853deeSEric Joyner #define MAC_FORMAT "%02x:%02x:%02x:%02x:%02x:%02x" 43*ca853deeSEric Joyner #define MAC_FORMAT_ARGS(mac_addr) \ 44*ca853deeSEric Joyner (mac_addr)[0], (mac_addr)[1], (mac_addr)[2], (mac_addr)[3], \ 45*ca853deeSEric Joyner (mac_addr)[4], (mac_addr)[5] 46*ca853deeSEric Joyner 47*ca853deeSEric Joyner #ifdef IAVF_DEBUG 48*ca853deeSEric Joyner 49*ca853deeSEric Joyner #define _DBG_PRINTF(S, ...) printf("%s: " S "\n", __func__, ##__VA_ARGS__) 50*ca853deeSEric Joyner #define _DEV_DBG_PRINTF(dev, S, ...) device_printf(dev, "%s: " S "\n", __func__, ##__VA_ARGS__) 51*ca853deeSEric Joyner #define _IF_DBG_PRINTF(ifp, S, ...) if_printf(ifp, "%s: " S "\n", __func__, ##__VA_ARGS__) 52*ca853deeSEric Joyner 53*ca853deeSEric Joyner /* Defines for printing generic debug information */ 54*ca853deeSEric Joyner #define DPRINTF(...) _DBG_PRINTF(__VA_ARGS__) 55*ca853deeSEric Joyner #define DDPRINTF(...) _DEV_DBG_PRINTF(__VA_ARGS__) 56*ca853deeSEric Joyner #define IDPRINTF(...) _IF_DBG_PRINTF(__VA_ARGS__) 57*ca853deeSEric Joyner 58*ca853deeSEric Joyner /* Defines for printing specific debug information */ 59*ca853deeSEric Joyner #define DEBUG_INIT 1 60*ca853deeSEric Joyner #define DEBUG_IOCTL 1 61*ca853deeSEric Joyner #define DEBUG_HW 1 62*ca853deeSEric Joyner 63*ca853deeSEric Joyner #define INIT_DEBUGOUT(...) if (DEBUG_INIT) _DBG_PRINTF(__VA_ARGS__) 64*ca853deeSEric Joyner #define INIT_DBG_DEV(...) if (DEBUG_INIT) _DEV_DBG_PRINTF(__VA_ARGS__) 65*ca853deeSEric Joyner #define INIT_DBG_IF(...) if (DEBUG_INIT) _IF_DBG_PRINTF(__VA_ARGS__) 66*ca853deeSEric Joyner 67*ca853deeSEric Joyner #define IOCTL_DEBUGOUT(...) if (DEBUG_IOCTL) _DBG_PRINTF(__VA_ARGS__) 68*ca853deeSEric Joyner #define IOCTL_DBG_IF2(ifp, S, ...) if (DEBUG_IOCTL) \ 69*ca853deeSEric Joyner if_printf(ifp, S "\n", ##__VA_ARGS__) 70*ca853deeSEric Joyner #define IOCTL_DBG_IF(...) if (DEBUG_IOCTL) _IF_DBG_PRINTF(__VA_ARGS__) 71*ca853deeSEric Joyner 72*ca853deeSEric Joyner #define HW_DEBUGOUT(...) if (DEBUG_HW) _DBG_PRINTF(__VA_ARGS__) 73*ca853deeSEric Joyner 74*ca853deeSEric Joyner #else /* no IAVF_DEBUG */ 75*ca853deeSEric Joyner #define DEBUG_INIT 0 76*ca853deeSEric Joyner #define DEBUG_IOCTL 0 77*ca853deeSEric Joyner #define DEBUG_HW 0 78*ca853deeSEric Joyner 79*ca853deeSEric Joyner #define DPRINTF(...) 80*ca853deeSEric Joyner #define DDPRINTF(...) 81*ca853deeSEric Joyner #define IDPRINTF(...) 82*ca853deeSEric Joyner 83*ca853deeSEric Joyner #define INIT_DEBUGOUT(...) 84*ca853deeSEric Joyner #define INIT_DBG_DEV(...) 85*ca853deeSEric Joyner #define INIT_DBG_IF(...) 86*ca853deeSEric Joyner #define IOCTL_DEBUGOUT(...) 87*ca853deeSEric Joyner #define IOCTL_DBG_IF2(...) 88*ca853deeSEric Joyner #define IOCTL_DBG_IF(...) 89*ca853deeSEric Joyner #define HW_DEBUGOUT(...) 90*ca853deeSEric Joyner #endif /* IAVF_DEBUG */ 91*ca853deeSEric Joyner 92*ca853deeSEric Joyner /** 93*ca853deeSEric Joyner * @enum iavf_dbg_mask 94*ca853deeSEric Joyner * @brief Bitmask values for various debug messages 95*ca853deeSEric Joyner * 96*ca853deeSEric Joyner * Enumeration of possible debug message categories, represented as a bitmask. 97*ca853deeSEric Joyner * 98*ca853deeSEric Joyner * Bits are set in the softc dbg_mask field indicating which messages are 99*ca853deeSEric Joyner * enabled. 100*ca853deeSEric Joyner * 101*ca853deeSEric Joyner * Used by debug print macros in order to compare the message type with the 102*ca853deeSEric Joyner * enabled bits in the dbg_mask to decide whether to print the message or not. 103*ca853deeSEric Joyner */ 104*ca853deeSEric Joyner enum iavf_dbg_mask { 105*ca853deeSEric Joyner IAVF_DBG_INFO = 0x00000001, 106*ca853deeSEric Joyner IAVF_DBG_EN_DIS = 0x00000002, 107*ca853deeSEric Joyner IAVF_DBG_AQ = 0x00000004, 108*ca853deeSEric Joyner IAVF_DBG_INIT = 0x00000008, 109*ca853deeSEric Joyner IAVF_DBG_FILTER = 0x00000010, 110*ca853deeSEric Joyner 111*ca853deeSEric Joyner IAVF_DBG_RSS = 0x00000100, 112*ca853deeSEric Joyner 113*ca853deeSEric Joyner IAVF_DBG_VC = 0x00001000, 114*ca853deeSEric Joyner 115*ca853deeSEric Joyner IAVF_DBG_SWITCH_INFO = 0x00010000, 116*ca853deeSEric Joyner 117*ca853deeSEric Joyner IAVF_DBG_ALL = 0xFFFFFFFF 118*ca853deeSEric Joyner }; 119*ca853deeSEric Joyner 120*ca853deeSEric Joyner /* Debug printing */ 121*ca853deeSEric Joyner void iavf_debug_core(device_t dev, uint32_t enabled_mask, uint32_t mask, char *fmt, ...) __printflike(4,5); 122*ca853deeSEric Joyner 123*ca853deeSEric Joyner #define iavf_dbg(sc, m, s, ...) iavf_debug_core(sc->dev, sc->dbg_mask, m, s, ##__VA_ARGS__) 124*ca853deeSEric Joyner #define iavf_dbg_init(sc, s, ...) iavf_debug_core(sc->dev, sc->dbg_mask, IAVF_DBG_INIT, s, ##__VA_ARGS__) 125*ca853deeSEric Joyner #define iavf_dbg_info(sc, s, ...) iavf_debug_core(sc->dev, sc->dbg_mask, IAVF_DBG_INFO, s, ##__VA_ARGS__) 126*ca853deeSEric Joyner #define iavf_dbg_vc(sc, s, ...) iavf_debug_core(sc->dev, sc->dbg_mask, IAVF_DBG_VC, s, ##__VA_ARGS__) 127*ca853deeSEric Joyner #define iavf_dbg_filter(sc, s, ...) iavf_debug_core(sc->dev, sc->dbg_mask, IAVF_DBG_FILTER, s, ##__VA_ARGS__) 128*ca853deeSEric Joyner #define iavf_dbg_rss(sc, s, ...) iavf_debug_core(sc->dev, sc->dbg_mask, IAVF_DBG_RSS, s, ##__VA_ARGS__) 129*ca853deeSEric Joyner 130*ca853deeSEric Joyner #endif /* _IAVF_DEBUG_H_ */ 131