1*2ed98337SAymeric Wibo /*- 2*2ed98337SAymeric Wibo * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3*2ed98337SAymeric Wibo * 4*2ed98337SAymeric Wibo * Copyright (c) 2022 Scott Long 5*2ed98337SAymeric Wibo * All rights reserved. 6*2ed98337SAymeric Wibo * 7*2ed98337SAymeric Wibo * Redistribution and use in source and binary forms, with or without 8*2ed98337SAymeric Wibo * modification, are permitted provided that the following conditions 9*2ed98337SAymeric Wibo * are met: 10*2ed98337SAymeric Wibo * 1. Redistributions of source code must retain the above copyright 11*2ed98337SAymeric Wibo * notice, this list of conditions and the following disclaimer. 12*2ed98337SAymeric Wibo * 2. Redistributions in binary form must reproduce the above copyright 13*2ed98337SAymeric Wibo * notice, this list of conditions and the following disclaimer in the 14*2ed98337SAymeric Wibo * documentation and/or other materials provided with the distribution. 15*2ed98337SAymeric Wibo * 16*2ed98337SAymeric Wibo * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17*2ed98337SAymeric Wibo * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18*2ed98337SAymeric Wibo * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19*2ed98337SAymeric Wibo * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20*2ed98337SAymeric Wibo * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21*2ed98337SAymeric Wibo * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22*2ed98337SAymeric Wibo * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23*2ed98337SAymeric Wibo * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24*2ed98337SAymeric Wibo * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25*2ed98337SAymeric Wibo * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26*2ed98337SAymeric Wibo * SUCH DAMAGE. 27*2ed98337SAymeric Wibo * 28*2ed98337SAymeric Wibo * Thunderbolt 3 driver debug strings 29*2ed98337SAymeric Wibo * 30*2ed98337SAymeric Wibo * $FreeBSD$ 31*2ed98337SAymeric Wibo */ 32*2ed98337SAymeric Wibo 33*2ed98337SAymeric Wibo #ifndef _TB_DEBUG_H 34*2ed98337SAymeric Wibo #define _TB_DEBUG_H 35*2ed98337SAymeric Wibo 36*2ed98337SAymeric Wibo typedef struct { 37*2ed98337SAymeric Wibo uintmax_t key; 38*2ed98337SAymeric Wibo const char * value; 39*2ed98337SAymeric Wibo } tb_string_t; 40*2ed98337SAymeric Wibo 41*2ed98337SAymeric Wibo const char * tb_get_string(uintmax_t, tb_string_t *); 42*2ed98337SAymeric Wibo int tb_debug_sysctl(SYSCTL_HANDLER_ARGS); 43*2ed98337SAymeric Wibo void tb_parse_debug(u_int *, char *); 44*2ed98337SAymeric Wibo 45*2ed98337SAymeric Wibo extern tb_string_t nhi_outmailcmd_opmode[]; 46*2ed98337SAymeric Wibo extern tb_string_t nhi_frame_pdf[]; 47*2ed98337SAymeric Wibo extern tb_string_t tb_security_level[]; 48*2ed98337SAymeric Wibo extern tb_string_t tb_rdy_connmode[]; 49*2ed98337SAymeric Wibo extern tb_string_t tb_mbox_connmode[]; 50*2ed98337SAymeric Wibo extern tb_string_t tb_device_power[]; 51*2ed98337SAymeric Wibo extern tb_string_t tb_notify_code[]; 52*2ed98337SAymeric Wibo extern tb_string_t tb_adapter_type[]; 53*2ed98337SAymeric Wibo extern tb_string_t tb_adapter_state[]; 54*2ed98337SAymeric Wibo extern tb_string_t tb_notify_event[]; 55*2ed98337SAymeric Wibo 56*2ed98337SAymeric Wibo enum { 57*2ed98337SAymeric Wibo /* Debug subsystems */ 58*2ed98337SAymeric Wibo DBG_NONE = 0, 59*2ed98337SAymeric Wibo DBG_INIT = (1 << 0), 60*2ed98337SAymeric Wibo DBG_INFO = (1 << 1), 61*2ed98337SAymeric Wibo DBG_RXQ = (1 << 2), 62*2ed98337SAymeric Wibo DBG_TXQ = (1 << 3), 63*2ed98337SAymeric Wibo DBG_INTR = (1 << 4), 64*2ed98337SAymeric Wibo DBG_TB = (1 << 5), 65*2ed98337SAymeric Wibo DBG_MBOX = (1 << 6), 66*2ed98337SAymeric Wibo DBG_BRIDGE = (1 << 7), 67*2ed98337SAymeric Wibo DBG_CFG = (1 << 8), 68*2ed98337SAymeric Wibo DBG_ROUTER = (1 << 9), 69*2ed98337SAymeric Wibo DBG_PORT = (1 << 10), 70*2ed98337SAymeric Wibo DBG_HCM = (1 << 11), 71*2ed98337SAymeric Wibo /* Debug levels */ 72*2ed98337SAymeric Wibo DBG_EXTRA = (1 << 30), 73*2ed98337SAymeric Wibo DBG_NOISY = (1 << 31), 74*2ed98337SAymeric Wibo DBG_FULL = DBG_EXTRA | DBG_NOISY 75*2ed98337SAymeric Wibo }; 76*2ed98337SAymeric Wibo 77*2ed98337SAymeric Wibo /* 78*2ed98337SAymeric Wibo * Macros to wrap printing. 79*2ed98337SAymeric Wibo * Each softc type needs a `dev` and `debug` field. Do tbdbg_printf as a 80*2ed98337SAymeric Wibo * function to make format errors more clear during compile. 81*2ed98337SAymeric Wibo */ 82*2ed98337SAymeric Wibo void tbdbg_dprintf(device_t dev, u_int debug, u_int val, const char *fmt, ...) __printflike(4, 5); 83*2ed98337SAymeric Wibo 84*2ed98337SAymeric Wibo #if defined(THUNDERBOLT_DEBUG) && (THUNDERBOLT_DEBUG > 0) 85*2ed98337SAymeric Wibo #define tb_debug(sc, level, fmt...) \ 86*2ed98337SAymeric Wibo tbdbg_dprintf((sc)->dev, (sc)->debug, level, ##fmt) 87*2ed98337SAymeric Wibo #else 88*2ed98337SAymeric Wibo #define tb_debug(sc, level, fmt...) 89*2ed98337SAymeric Wibo #endif 90*2ed98337SAymeric Wibo #define tb_printf(sc, fmt...) \ 91*2ed98337SAymeric Wibo device_printf((sc)->dev, ##fmt) 92*2ed98337SAymeric Wibo 93*2ed98337SAymeric Wibo #endif /* _TB_DEBUG_H */ 94