1*7e6ad469SVishal Kulkarni /* 2*7e6ad469SVishal Kulkarni * This file and its contents are supplied under the terms of the 3*7e6ad469SVishal Kulkarni * Common Development and Distribution License ("CDDL"), version 1.0. 4*7e6ad469SVishal Kulkarni * You may only use this file in accordance with the terms of version 5*7e6ad469SVishal Kulkarni * 1.0 of the CDDL. 6*7e6ad469SVishal Kulkarni * 7*7e6ad469SVishal Kulkarni * A full copy of the text of the CDDL should have accompanied this 8*7e6ad469SVishal Kulkarni * source. A copy of the CDDL is also available via the Internet at 9*7e6ad469SVishal Kulkarni * http://www.illumos.org/license/CDDL. 10*7e6ad469SVishal Kulkarni */ 11*7e6ad469SVishal Kulkarni 12*7e6ad469SVishal Kulkarni /*- 13*7e6ad469SVishal Kulkarni * Copyright (c) 2019 Chelsio Communications, Inc. 14*7e6ad469SVishal Kulkarni * All rights reserved. 15*7e6ad469SVishal Kulkarni * * Redistribution and use in source and binary forms, with or without 16*7e6ad469SVishal Kulkarni * modification, are permitted provided that the following conditions * are met: 17*7e6ad469SVishal Kulkarni * 1. Redistributions of source code must retain the above copyright 18*7e6ad469SVishal Kulkarni * notice, this list of conditions and the following disclaimer. 19*7e6ad469SVishal Kulkarni * 2. Redistributions in binary form must reproduce the above copyright 20*7e6ad469SVishal Kulkarni * notice, this list of conditions and the following disclaimer in the 21*7e6ad469SVishal Kulkarni * documentation and/or other materials provided with the distribution. 22*7e6ad469SVishal Kulkarni * 23*7e6ad469SVishal Kulkarni * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 24*7e6ad469SVishal Kulkarni * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25*7e6ad469SVishal Kulkarni * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26*7e6ad469SVishal Kulkarni * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 27*7e6ad469SVishal Kulkarni * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28*7e6ad469SVishal Kulkarni * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29*7e6ad469SVishal Kulkarni * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30*7e6ad469SVishal Kulkarni * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31*7e6ad469SVishal Kulkarni * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32*7e6ad469SVishal Kulkarni * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33*7e6ad469SVishal Kulkarni * SUCH DAMAGE. 34*7e6ad469SVishal Kulkarni */ 35*7e6ad469SVishal Kulkarni 36*7e6ad469SVishal Kulkarni /* 37*7e6ad469SVishal Kulkarni * Chelsio Unified Debug Interface header file. 38*7e6ad469SVishal Kulkarni * Version 1.1 39*7e6ad469SVishal Kulkarni */ 40*7e6ad469SVishal Kulkarni #ifndef _CUDBG_IF_H_ 41*7e6ad469SVishal Kulkarni #define _CUDBG_IF_H_ 42*7e6ad469SVishal Kulkarni 43*7e6ad469SVishal Kulkarni #ifndef _KERNEL 44*7e6ad469SVishal Kulkarni #include <stdlib.h> 45*7e6ad469SVishal Kulkarni #endif 46*7e6ad469SVishal Kulkarni 47*7e6ad469SVishal Kulkarni #include "cudbg_lib_common.h" 48*7e6ad469SVishal Kulkarni 49*7e6ad469SVishal Kulkarni #ifdef __GNUC__ 50*7e6ad469SVishal Kulkarni #define ATTRIBUTE_UNUSED __attribute__ ((unused)) 51*7e6ad469SVishal Kulkarni #else 52*7e6ad469SVishal Kulkarni #define ATTRIBUTE_UNUSED 53*7e6ad469SVishal Kulkarni #endif 54*7e6ad469SVishal Kulkarni 55*7e6ad469SVishal Kulkarni #if defined(CONFIG_CUDBG_DEBUG) 56*7e6ad469SVishal Kulkarni #define cudbg_debug(pdbg_init, format, ...) do {\ 57*7e6ad469SVishal Kulkarni pdbg_init->print(format, ##__VA_ARGS__); \ 58*7e6ad469SVishal Kulkarni } while (0) 59*7e6ad469SVishal Kulkarni #else 60*7e6ad469SVishal Kulkarni #define cudbg_debug(pdbg_init, format, ...) do { } while (0) 61*7e6ad469SVishal Kulkarni #endif 62*7e6ad469SVishal Kulkarni 63*7e6ad469SVishal Kulkarni #define OUT 64*7e6ad469SVishal Kulkarni #define IN 65*7e6ad469SVishal Kulkarni #define INOUT 66*7e6ad469SVishal Kulkarni 67*7e6ad469SVishal Kulkarni /* Error codes */ 68*7e6ad469SVishal Kulkarni 69*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_SUCCESS 0 70*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_NOSPACE -2 71*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_FLASH_WRITE_FAIL -3 72*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_FLASH_READ_FAIL -4 73*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_UNDEFINED_OUT_BUF -5 74*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_UNDEFINED_CBFN -6 75*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_UNDEFINED_PRINTF_CBFN -7 76*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_ADAP_INVALID -8 77*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_FLASH_EMPTY -9 78*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_NO_ADAPTER -10 79*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_NO_SIGNATURE -11 80*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_MULTIPLE_REG -12 81*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_UNREGISTERED -13 82*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_UNDEFINED_ENTITY -14 83*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_REG_FAIlED -15 84*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_DEVLOG_FAILED -16 85*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_SMALL_BUFF -17 86*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_CHKSUM_MISSMATCH -18 87*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_NO_SCRATCH_MEM -19 88*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_OUTBUFF_OVERFLOW -20 89*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_INVALID_BUFF -21 /* Invalid magic */ 90*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_FILE_OPEN_FAIL -22 91*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_DEVLOG_INT_FAIL -23 92*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_ENTITY_NOT_FOUND -24 93*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_DECOMPRESS_FAIL -25 94*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_BUFFER_SHORT -26 95*7e6ad469SVishal Kulkarni #define CUDBG_METADATA_VERSION_MISMATCH -27 96*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_NOT_IMPLEMENTED -28 97*7e6ad469SVishal Kulkarni #define CUDBG_SYSTEM_ERROR -29 98*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_MMAP_FAILED -30 99*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_FILE_WRITE_FAILED -31 100*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_CCLK_NOT_DEFINED -32 101*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_FLASH_FULL -33 102*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_SECTOR_EMPTY -34 103*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_ENTITY_NOT_REQUESTED -35 104*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_NOT_SUPPORTED -36 105*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_FILE_READ_FAILED -37 106*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_CORRUPTED -38 107*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_INVALID_INDEX -39 108*7e6ad469SVishal Kulkarni 109*7e6ad469SVishal Kulkarni #define CUDBG_MAJOR_VERSION 1 110*7e6ad469SVishal Kulkarni #define CUDBG_MINOR_VERSION 14 111*7e6ad469SVishal Kulkarni #define CUDBG_BUILD_VERSION 0 112*7e6ad469SVishal Kulkarni 113*7e6ad469SVishal Kulkarni #define CUDBG_FILE_NAME_LEN 256 114*7e6ad469SVishal Kulkarni #define CUDBG_DIR_NAME_LEN 256 115*7e6ad469SVishal Kulkarni #define CUDBG_MAX_BITMAP_LEN 16 116*7e6ad469SVishal Kulkarni 117*7e6ad469SVishal Kulkarni static char ATTRIBUTE_UNUSED * err_msg[] = { 118*7e6ad469SVishal Kulkarni "Success", 119*7e6ad469SVishal Kulkarni "Unknown", 120*7e6ad469SVishal Kulkarni "No space", 121*7e6ad469SVishal Kulkarni "Flash write fail", 122*7e6ad469SVishal Kulkarni "Flash read fail", 123*7e6ad469SVishal Kulkarni "Undefined out buf", 124*7e6ad469SVishal Kulkarni "Callback function undefined", 125*7e6ad469SVishal Kulkarni "Print callback function undefined", 126*7e6ad469SVishal Kulkarni "ADAP invalid", 127*7e6ad469SVishal Kulkarni "Flash empty", 128*7e6ad469SVishal Kulkarni "No adapter", 129*7e6ad469SVishal Kulkarni "No signature", 130*7e6ad469SVishal Kulkarni "Multiple registration", 131*7e6ad469SVishal Kulkarni "Unregistered", 132*7e6ad469SVishal Kulkarni "Undefined entity", 133*7e6ad469SVishal Kulkarni "Reg failed", 134*7e6ad469SVishal Kulkarni "Devlog failed", 135*7e6ad469SVishal Kulkarni "Small buff", 136*7e6ad469SVishal Kulkarni "Checksum mismatch", 137*7e6ad469SVishal Kulkarni "No scratch memory", 138*7e6ad469SVishal Kulkarni "Outbuff overflow", 139*7e6ad469SVishal Kulkarni "Invalid buffer", 140*7e6ad469SVishal Kulkarni "File open fail", 141*7e6ad469SVishal Kulkarni "Devlog int fail", 142*7e6ad469SVishal Kulkarni "Entity not found", 143*7e6ad469SVishal Kulkarni "Decompress fail", 144*7e6ad469SVishal Kulkarni "Buffer short", 145*7e6ad469SVishal Kulkarni "Version mismatch", 146*7e6ad469SVishal Kulkarni "Not implemented", 147*7e6ad469SVishal Kulkarni "System error", 148*7e6ad469SVishal Kulkarni "Mmap failed", 149*7e6ad469SVishal Kulkarni "File write failed", 150*7e6ad469SVishal Kulkarni "cclk not defined", 151*7e6ad469SVishal Kulkarni "Flash full", 152*7e6ad469SVishal Kulkarni "Sector empty", 153*7e6ad469SVishal Kulkarni "Entity not requested", 154*7e6ad469SVishal Kulkarni "Not supported", 155*7e6ad469SVishal Kulkarni "File read fail", 156*7e6ad469SVishal Kulkarni "Corrupted", 157*7e6ad469SVishal Kulkarni "Invalid Index" 158*7e6ad469SVishal Kulkarni }; 159*7e6ad469SVishal Kulkarni 160*7e6ad469SVishal Kulkarni enum CUDBG_DBG_ENTITY_TYPE { 161*7e6ad469SVishal Kulkarni CUDBG_ALL = 0, 162*7e6ad469SVishal Kulkarni CUDBG_REG_DUMP = 1, 163*7e6ad469SVishal Kulkarni CUDBG_DEV_LOG = 2, 164*7e6ad469SVishal Kulkarni CUDBG_CIM_LA = 3, 165*7e6ad469SVishal Kulkarni CUDBG_CIM_MA_LA = 4, 166*7e6ad469SVishal Kulkarni CUDBG_CIM_QCFG = 5, 167*7e6ad469SVishal Kulkarni CUDBG_CIM_IBQ_TP0 = 6, 168*7e6ad469SVishal Kulkarni CUDBG_CIM_IBQ_TP1 = 7, 169*7e6ad469SVishal Kulkarni CUDBG_CIM_IBQ_ULP = 8, 170*7e6ad469SVishal Kulkarni CUDBG_CIM_IBQ_SGE0 = 9, 171*7e6ad469SVishal Kulkarni CUDBG_CIM_IBQ_SGE1 = 10, 172*7e6ad469SVishal Kulkarni CUDBG_CIM_IBQ_NCSI = 11, 173*7e6ad469SVishal Kulkarni CUDBG_CIM_OBQ_ULP0 = 12, 174*7e6ad469SVishal Kulkarni CUDBG_CIM_OBQ_ULP1 = 13, 175*7e6ad469SVishal Kulkarni CUDBG_CIM_OBQ_ULP2 = 14, 176*7e6ad469SVishal Kulkarni CUDBG_CIM_OBQ_ULP3 = 15, 177*7e6ad469SVishal Kulkarni CUDBG_CIM_OBQ_SGE = 16, 178*7e6ad469SVishal Kulkarni CUDBG_CIM_OBQ_NCSI = 17, 179*7e6ad469SVishal Kulkarni CUDBG_EDC0 = 18, 180*7e6ad469SVishal Kulkarni CUDBG_EDC1 = 19, 181*7e6ad469SVishal Kulkarni CUDBG_MC0 = 20, 182*7e6ad469SVishal Kulkarni CUDBG_MC1 = 21, 183*7e6ad469SVishal Kulkarni CUDBG_RSS = 22, 184*7e6ad469SVishal Kulkarni CUDBG_RSS_PF_CONF = 23, 185*7e6ad469SVishal Kulkarni CUDBG_RSS_KEY = 24, 186*7e6ad469SVishal Kulkarni CUDBG_RSS_VF_CONF = 25, 187*7e6ad469SVishal Kulkarni CUDBG_RSS_CONF = 26, 188*7e6ad469SVishal Kulkarni CUDBG_PATH_MTU = 27, 189*7e6ad469SVishal Kulkarni CUDBG_SW_STATE = 28, 190*7e6ad469SVishal Kulkarni CUDBG_WTP = 29, 191*7e6ad469SVishal Kulkarni CUDBG_PM_STATS = 30, 192*7e6ad469SVishal Kulkarni CUDBG_HW_SCHED = 31, 193*7e6ad469SVishal Kulkarni CUDBG_TCP_STATS = 32, 194*7e6ad469SVishal Kulkarni CUDBG_TP_ERR_STATS = 33, 195*7e6ad469SVishal Kulkarni CUDBG_FCOE_STATS = 34, 196*7e6ad469SVishal Kulkarni CUDBG_RDMA_STATS = 35, 197*7e6ad469SVishal Kulkarni CUDBG_TP_INDIRECT = 36, 198*7e6ad469SVishal Kulkarni CUDBG_SGE_INDIRECT = 37, 199*7e6ad469SVishal Kulkarni CUDBG_CPL_STATS = 38, 200*7e6ad469SVishal Kulkarni CUDBG_DDP_STATS = 39, 201*7e6ad469SVishal Kulkarni CUDBG_WC_STATS = 40, 202*7e6ad469SVishal Kulkarni CUDBG_ULPRX_LA = 41, 203*7e6ad469SVishal Kulkarni CUDBG_LB_STATS = 42, 204*7e6ad469SVishal Kulkarni CUDBG_TP_LA = 43, 205*7e6ad469SVishal Kulkarni CUDBG_MEMINFO = 44, 206*7e6ad469SVishal Kulkarni CUDBG_CIM_PIF_LA = 45, 207*7e6ad469SVishal Kulkarni CUDBG_CLK = 46, 208*7e6ad469SVishal Kulkarni CUDBG_CIM_OBQ_RXQ0 = 47, 209*7e6ad469SVishal Kulkarni CUDBG_CIM_OBQ_RXQ1 = 48, 210*7e6ad469SVishal Kulkarni CUDBG_MAC_STATS = 49, 211*7e6ad469SVishal Kulkarni CUDBG_PCIE_INDIRECT = 50, 212*7e6ad469SVishal Kulkarni CUDBG_PM_INDIRECT = 51, 213*7e6ad469SVishal Kulkarni CUDBG_FULL = 52, 214*7e6ad469SVishal Kulkarni CUDBG_TX_RATE = 53, 215*7e6ad469SVishal Kulkarni CUDBG_TID_INFO = 54, 216*7e6ad469SVishal Kulkarni CUDBG_PCIE_CONFIG = 55, 217*7e6ad469SVishal Kulkarni CUDBG_DUMP_CONTEXT = 56, 218*7e6ad469SVishal Kulkarni CUDBG_MPS_TCAM = 57, 219*7e6ad469SVishal Kulkarni CUDBG_VPD_DATA = 58, 220*7e6ad469SVishal Kulkarni CUDBG_LE_TCAM = 59, 221*7e6ad469SVishal Kulkarni CUDBG_CCTRL = 60, 222*7e6ad469SVishal Kulkarni CUDBG_MA_INDIRECT = 61, 223*7e6ad469SVishal Kulkarni CUDBG_ULPTX_LA = 62, 224*7e6ad469SVishal Kulkarni CUDBG_EXT_ENTITY = 63, 225*7e6ad469SVishal Kulkarni CUDBG_UP_CIM_INDIRECT = 64, 226*7e6ad469SVishal Kulkarni CUDBG_PBT_TABLE = 65, 227*7e6ad469SVishal Kulkarni CUDBG_MBOX_LOG = 66, 228*7e6ad469SVishal Kulkarni CUDBG_HMA_INDIRECT = 67, 229*7e6ad469SVishal Kulkarni CUDBG_MAX_ENTITY = 68, 230*7e6ad469SVishal Kulkarni }; 231*7e6ad469SVishal Kulkarni 232*7e6ad469SVishal Kulkarni #define ENTITY_FLAG_NULL 0 233*7e6ad469SVishal Kulkarni #define ENTITY_FLAG_REGISTER 1 234*7e6ad469SVishal Kulkarni #define ENTITY_FLAG_BINARY 2 235*7e6ad469SVishal Kulkarni #define ENTITY_FLAG_FW_NO_ATTACH 3 236*7e6ad469SVishal Kulkarni 237*7e6ad469SVishal Kulkarni /* file_name matches Linux cxgb4 debugfs entry names. */ 238*7e6ad469SVishal Kulkarni struct el {char *name; char *file_name; int bit; u32 flag; }; 239*7e6ad469SVishal Kulkarni static struct el ATTRIBUTE_UNUSED entity_list[] = { 240*7e6ad469SVishal Kulkarni {"all", "all", CUDBG_ALL, ENTITY_FLAG_NULL}, 241*7e6ad469SVishal Kulkarni {"regdump", "regdump", CUDBG_REG_DUMP, 1 << ENTITY_FLAG_REGISTER}, 242*7e6ad469SVishal Kulkarni {"devlog", "devlog", CUDBG_DEV_LOG, ENTITY_FLAG_NULL}, 243*7e6ad469SVishal Kulkarni {"cimla", "cim_la", CUDBG_CIM_LA, ENTITY_FLAG_NULL}, 244*7e6ad469SVishal Kulkarni {"cimmala", "cim_ma_la", CUDBG_CIM_MA_LA, ENTITY_FLAG_NULL}, 245*7e6ad469SVishal Kulkarni {"cimqcfg", "cim_qcfg", CUDBG_CIM_QCFG, ENTITY_FLAG_NULL}, 246*7e6ad469SVishal Kulkarni {"ibqtp0", "ibq_tp0", CUDBG_CIM_IBQ_TP0, ENTITY_FLAG_NULL}, 247*7e6ad469SVishal Kulkarni {"ibqtp1", "ibq_tp1", CUDBG_CIM_IBQ_TP1, ENTITY_FLAG_NULL}, 248*7e6ad469SVishal Kulkarni {"ibqulp", "ibq_ulp", CUDBG_CIM_IBQ_ULP, ENTITY_FLAG_NULL}, 249*7e6ad469SVishal Kulkarni {"ibqsge0", "ibq_sge0", CUDBG_CIM_IBQ_SGE0, ENTITY_FLAG_NULL}, 250*7e6ad469SVishal Kulkarni {"ibqsge1", "ibq_sge1", CUDBG_CIM_IBQ_SGE1, ENTITY_FLAG_NULL}, 251*7e6ad469SVishal Kulkarni {"ibqncsi", "ibq_ncsi", CUDBG_CIM_IBQ_NCSI, ENTITY_FLAG_NULL}, 252*7e6ad469SVishal Kulkarni {"obqulp0", "obq_ulp0", CUDBG_CIM_OBQ_ULP0, ENTITY_FLAG_NULL}, 253*7e6ad469SVishal Kulkarni {"obqulp1", "obq_ulp1", CUDBG_CIM_OBQ_ULP1, ENTITY_FLAG_NULL}, 254*7e6ad469SVishal Kulkarni {"obqulp2", "obq_ulp2", CUDBG_CIM_OBQ_ULP2, ENTITY_FLAG_NULL}, 255*7e6ad469SVishal Kulkarni {"obqulp3", "obq_ulp3", CUDBG_CIM_OBQ_ULP3, ENTITY_FLAG_NULL}, 256*7e6ad469SVishal Kulkarni {"obqsge", "obq_sge", CUDBG_CIM_OBQ_SGE, ENTITY_FLAG_NULL}, 257*7e6ad469SVishal Kulkarni {"obqncsi", "obq_ncsi", CUDBG_CIM_OBQ_NCSI, ENTITY_FLAG_NULL}, 258*7e6ad469SVishal Kulkarni {"edc0", "edc0", CUDBG_EDC0, (1 << ENTITY_FLAG_BINARY)}, 259*7e6ad469SVishal Kulkarni {"edc1", "edc1", CUDBG_EDC1, (1 << ENTITY_FLAG_BINARY)}, 260*7e6ad469SVishal Kulkarni {"mc0", "mc0", CUDBG_MC0, (1 << ENTITY_FLAG_BINARY)}, 261*7e6ad469SVishal Kulkarni {"mc1", "mc1", CUDBG_MC1, (1 << ENTITY_FLAG_BINARY)}, 262*7e6ad469SVishal Kulkarni {"rss", "rss", CUDBG_RSS, ENTITY_FLAG_NULL}, 263*7e6ad469SVishal Kulkarni {"rss_pf_config", "rss_pf_config", CUDBG_RSS_PF_CONF, ENTITY_FLAG_NULL}, 264*7e6ad469SVishal Kulkarni {"rss_key", "rss_key", CUDBG_RSS_KEY, ENTITY_FLAG_NULL}, 265*7e6ad469SVishal Kulkarni {"rss_vf_config", "rss_vf_config", CUDBG_RSS_VF_CONF, ENTITY_FLAG_NULL}, 266*7e6ad469SVishal Kulkarni {"rss_config", "rss_config", CUDBG_RSS_CONF, ENTITY_FLAG_NULL}, 267*7e6ad469SVishal Kulkarni {"pathmtu", "path_mtus", CUDBG_PATH_MTU, ENTITY_FLAG_NULL}, 268*7e6ad469SVishal Kulkarni {"swstate", "sw_state", CUDBG_SW_STATE, ENTITY_FLAG_NULL}, 269*7e6ad469SVishal Kulkarni {"wtp", "wtp", CUDBG_WTP, ENTITY_FLAG_NULL}, 270*7e6ad469SVishal Kulkarni {"pmstats", "pm_stats", CUDBG_PM_STATS, ENTITY_FLAG_NULL}, 271*7e6ad469SVishal Kulkarni {"hwsched", "hw_sched", CUDBG_HW_SCHED, ENTITY_FLAG_NULL}, 272*7e6ad469SVishal Kulkarni {"tcpstats", "tcp_stats", CUDBG_TCP_STATS, ENTITY_FLAG_NULL}, 273*7e6ad469SVishal Kulkarni {"tperrstats", "tp_err_stats", CUDBG_TP_ERR_STATS, ENTITY_FLAG_NULL}, 274*7e6ad469SVishal Kulkarni {"fcoestats", "fcoe_stats", CUDBG_FCOE_STATS, ENTITY_FLAG_NULL}, 275*7e6ad469SVishal Kulkarni {"rdmastats", "rdma_stats", CUDBG_RDMA_STATS, ENTITY_FLAG_NULL}, 276*7e6ad469SVishal Kulkarni {"tpindirect", "tp_indirect", CUDBG_TP_INDIRECT, 277*7e6ad469SVishal Kulkarni 1 << ENTITY_FLAG_REGISTER}, 278*7e6ad469SVishal Kulkarni {"sgeindirect", "sge_indirect", CUDBG_SGE_INDIRECT, 279*7e6ad469SVishal Kulkarni 1 << ENTITY_FLAG_REGISTER}, 280*7e6ad469SVishal Kulkarni {"cplstats", "cpl_stats", CUDBG_CPL_STATS, ENTITY_FLAG_NULL}, 281*7e6ad469SVishal Kulkarni {"ddpstats", "ddp_stats", CUDBG_DDP_STATS, ENTITY_FLAG_NULL}, 282*7e6ad469SVishal Kulkarni {"wcstats", "wc_stats", CUDBG_WC_STATS, ENTITY_FLAG_NULL}, 283*7e6ad469SVishal Kulkarni {"ulprxla", "ulprx_la", CUDBG_ULPRX_LA, ENTITY_FLAG_NULL}, 284*7e6ad469SVishal Kulkarni {"lbstats", "lb_stats", CUDBG_LB_STATS, ENTITY_FLAG_NULL}, 285*7e6ad469SVishal Kulkarni {"tpla", "tp_la", CUDBG_TP_LA, ENTITY_FLAG_NULL}, 286*7e6ad469SVishal Kulkarni {"meminfo", "meminfo", CUDBG_MEMINFO, ENTITY_FLAG_NULL}, 287*7e6ad469SVishal Kulkarni {"cimpifla", "cim_pif_la", CUDBG_CIM_PIF_LA, ENTITY_FLAG_NULL}, 288*7e6ad469SVishal Kulkarni {"clk", "clk", CUDBG_CLK, ENTITY_FLAG_NULL}, 289*7e6ad469SVishal Kulkarni {"obq_sge_rx_q0", "obq_sge_rx_q0", CUDBG_CIM_OBQ_RXQ0, 290*7e6ad469SVishal Kulkarni ENTITY_FLAG_NULL}, 291*7e6ad469SVishal Kulkarni {"obq_sge_rx_q1", "obq_sge_rx_q1", CUDBG_CIM_OBQ_RXQ1, 292*7e6ad469SVishal Kulkarni ENTITY_FLAG_NULL}, 293*7e6ad469SVishal Kulkarni {"macstats", "mac_stats", CUDBG_MAC_STATS, ENTITY_FLAG_NULL}, 294*7e6ad469SVishal Kulkarni {"pcieindirect", "pcie_indirect", CUDBG_PCIE_INDIRECT, 295*7e6ad469SVishal Kulkarni 1 << ENTITY_FLAG_REGISTER}, 296*7e6ad469SVishal Kulkarni {"pmindirect", "pm_indirect", CUDBG_PM_INDIRECT, 297*7e6ad469SVishal Kulkarni 1 << ENTITY_FLAG_REGISTER}, 298*7e6ad469SVishal Kulkarni {"full", "full", CUDBG_FULL, ENTITY_FLAG_NULL}, 299*7e6ad469SVishal Kulkarni {"txrate", "tx_rate", CUDBG_TX_RATE, ENTITY_FLAG_NULL}, 300*7e6ad469SVishal Kulkarni {"tidinfo", "tids", CUDBG_TID_INFO, ENTITY_FLAG_NULL | 301*7e6ad469SVishal Kulkarni (1 << ENTITY_FLAG_FW_NO_ATTACH)}, 302*7e6ad469SVishal Kulkarni {"pcieconfig", "pcie_config", CUDBG_PCIE_CONFIG, ENTITY_FLAG_NULL}, 303*7e6ad469SVishal Kulkarni {"dumpcontext", "dump_context", CUDBG_DUMP_CONTEXT, ENTITY_FLAG_NULL}, 304*7e6ad469SVishal Kulkarni {"mpstcam", "mps_tcam", CUDBG_MPS_TCAM, ENTITY_FLAG_NULL}, 305*7e6ad469SVishal Kulkarni {"vpddata", "vpd_data", CUDBG_VPD_DATA, ENTITY_FLAG_NULL}, 306*7e6ad469SVishal Kulkarni {"letcam", "le_tcam", CUDBG_LE_TCAM, ENTITY_FLAG_NULL}, 307*7e6ad469SVishal Kulkarni {"cctrl", "cctrl", CUDBG_CCTRL, ENTITY_FLAG_NULL}, 308*7e6ad469SVishal Kulkarni {"maindirect", "ma_indirect", CUDBG_MA_INDIRECT, 309*7e6ad469SVishal Kulkarni 1 << ENTITY_FLAG_REGISTER}, 310*7e6ad469SVishal Kulkarni {"ulptxla", "ulptx_la", CUDBG_ULPTX_LA, ENTITY_FLAG_NULL}, 311*7e6ad469SVishal Kulkarni {"extentity", "ext_entity", CUDBG_EXT_ENTITY, ENTITY_FLAG_NULL}, 312*7e6ad469SVishal Kulkarni {"upcimindirect", "up_cim_indirect", CUDBG_UP_CIM_INDIRECT, 313*7e6ad469SVishal Kulkarni 1 << ENTITY_FLAG_REGISTER}, 314*7e6ad469SVishal Kulkarni {"pbttables", "pbt_tables", CUDBG_PBT_TABLE, ENTITY_FLAG_NULL}, 315*7e6ad469SVishal Kulkarni {"mboxlog", "mboxlog", CUDBG_MBOX_LOG, ENTITY_FLAG_NULL}, 316*7e6ad469SVishal Kulkarni {"hmaindirect", "hma_indirect", CUDBG_HMA_INDIRECT, 317*7e6ad469SVishal Kulkarni 1 << ENTITY_FLAG_REGISTER}, 318*7e6ad469SVishal Kulkarni }; 319*7e6ad469SVishal Kulkarni 320*7e6ad469SVishal Kulkarni #ifdef _KERNEL 321*7e6ad469SVishal Kulkarni typedef int (*cudbg_print_cb) (dev_info_t *dip, ...); 322*7e6ad469SVishal Kulkarni #else 323*7e6ad469SVishal Kulkarni typedef int (*cudbg_print_cb) (char *, ...); 324*7e6ad469SVishal Kulkarni #endif 325*7e6ad469SVishal Kulkarni 326*7e6ad469SVishal Kulkarni struct cudbg_init_hdr { 327*7e6ad469SVishal Kulkarni u8 major_ver; 328*7e6ad469SVishal Kulkarni u8 minor_ver; 329*7e6ad469SVishal Kulkarni u8 build_ver; 330*7e6ad469SVishal Kulkarni u8 res; 331*7e6ad469SVishal Kulkarni u16 init_struct_size; 332*7e6ad469SVishal Kulkarni }; 333*7e6ad469SVishal Kulkarni 334*7e6ad469SVishal Kulkarni struct cudbg_flash_hdr { 335*7e6ad469SVishal Kulkarni u32 signature; 336*7e6ad469SVishal Kulkarni u8 major_ver; 337*7e6ad469SVishal Kulkarni u8 minor_ver; 338*7e6ad469SVishal Kulkarni u8 build_ver; 339*7e6ad469SVishal Kulkarni u8 res; 340*7e6ad469SVishal Kulkarni u64 timestamp; 341*7e6ad469SVishal Kulkarni u64 time_res; 342*7e6ad469SVishal Kulkarni u32 hdr_len; 343*7e6ad469SVishal Kulkarni u32 data_len; 344*7e6ad469SVishal Kulkarni u32 hdr_flags; 345*7e6ad469SVishal Kulkarni u32 sec_seq_no; 346*7e6ad469SVishal Kulkarni u32 reserved[22]; 347*7e6ad469SVishal Kulkarni }; 348*7e6ad469SVishal Kulkarni 349*7e6ad469SVishal Kulkarni struct cudbg_param { 350*7e6ad469SVishal Kulkarni u16 param_type; 351*7e6ad469SVishal Kulkarni u16 reserved; 352*7e6ad469SVishal Kulkarni union { 353*7e6ad469SVishal Kulkarni struct { 354*7e6ad469SVishal Kulkarni u32 memtype; /* which memory (EDC0, EDC1, MC) */ 355*7e6ad469SVishal Kulkarni u32 start; /* start of log in firmware memory */ 356*7e6ad469SVishal Kulkarni u32 size; /* size of log */ 357*7e6ad469SVishal Kulkarni } devlog_param; 358*7e6ad469SVishal Kulkarni struct { 359*7e6ad469SVishal Kulkarni struct mbox_cmd_log *log; 360*7e6ad469SVishal Kulkarni u16 mbox_cmds; 361*7e6ad469SVishal Kulkarni } mboxlog_param; 362*7e6ad469SVishal Kulkarni struct { 363*7e6ad469SVishal Kulkarni u8 caller_string[100]; 364*7e6ad469SVishal Kulkarni u8 os_type; 365*7e6ad469SVishal Kulkarni } sw_state_param; 366*7e6ad469SVishal Kulkarni u64 time; 367*7e6ad469SVishal Kulkarni u8 tcb_bit_param; 368*7e6ad469SVishal Kulkarni void *adap; 369*7e6ad469SVishal Kulkarni void *access_lock; 370*7e6ad469SVishal Kulkarni } u; 371*7e6ad469SVishal Kulkarni }; 372*7e6ad469SVishal Kulkarni 373*7e6ad469SVishal Kulkarni /* params for tcb_bit_param */ 374*7e6ad469SVishal Kulkarni #define CUDBG_TCB_BRIEF_PARAM 0x1 375*7e6ad469SVishal Kulkarni #define CUDBG_TCB_FROM_CARD_PARAM 0x2 376*7e6ad469SVishal Kulkarni #define CUDBG_TCB_AS_SCB_PARAM 0x4 377*7e6ad469SVishal Kulkarni 378*7e6ad469SVishal Kulkarni enum { 379*7e6ad469SVishal Kulkarni /* params for os_type */ 380*7e6ad469SVishal Kulkarni CUDBG_OS_TYPE_WINDOWS = 1, 381*7e6ad469SVishal Kulkarni CUDBG_OS_TYPE_LINUX = 2, 382*7e6ad469SVishal Kulkarni CUDBG_OS_TYPE_ESX = 3, 383*7e6ad469SVishal Kulkarni CUDBG_OS_TYPE_UNKNOWN = 4, 384*7e6ad469SVishal Kulkarni }; 385*7e6ad469SVishal Kulkarni 386*7e6ad469SVishal Kulkarni /* 387*7e6ad469SVishal Kulkarni * * What is OFFLINE_VIEW_ONLY mode? 388*7e6ad469SVishal Kulkarni * 389*7e6ad469SVishal Kulkarni * cudbg frame work will be used only to interpret previously collected 390*7e6ad469SVishal Kulkarni * data store in a file (i.e NOT hw flash) 391*7e6ad469SVishal Kulkarni */ 392*7e6ad469SVishal Kulkarni 393*7e6ad469SVishal Kulkarni struct cudbg_init { 394*7e6ad469SVishal Kulkarni struct cudbg_init_hdr header; 395*7e6ad469SVishal Kulkarni struct adapter *adap; /* Pointer to adapter structure 396*7e6ad469SVishal Kulkarni with filled fields */ 397*7e6ad469SVishal Kulkarni cudbg_print_cb print; /* Platform dependent print 398*7e6ad469SVishal Kulkarni function */ 399*7e6ad469SVishal Kulkarni u32 verbose:1; /* Turn on verbose print */ 400*7e6ad469SVishal Kulkarni u32 use_flash:1; /* Use flash to collect or view 401*7e6ad469SVishal Kulkarni debug */ 402*7e6ad469SVishal Kulkarni u32 full_mode:1; /* If set, cudbg will pull in 403*7e6ad469SVishal Kulkarni common code */ 404*7e6ad469SVishal Kulkarni u32 no_compress:1; /* Dont compress will storing 405*7e6ad469SVishal Kulkarni the collected debug */ 406*7e6ad469SVishal Kulkarni u32 info:1; /* Show just the info, Dont 407*7e6ad469SVishal Kulkarni interpret */ 408*7e6ad469SVishal Kulkarni u32 reserved:27; 409*7e6ad469SVishal Kulkarni u8 dbg_bitmap[CUDBG_MAX_BITMAP_LEN]; 410*7e6ad469SVishal Kulkarni /* Bit map to select the dbg 411*7e6ad469SVishal Kulkarni data type to be collected 412*7e6ad469SVishal Kulkarni or viewed */ 413*7e6ad469SVishal Kulkarni }; 414*7e6ad469SVishal Kulkarni 415*7e6ad469SVishal Kulkarni struct cudbg_private { 416*7e6ad469SVishal Kulkarni struct cudbg_init dbg_init; 417*7e6ad469SVishal Kulkarni #ifdef _KERNEL 418*7e6ad469SVishal Kulkarni struct cudbg_flash_sec_info sec_info; 419*7e6ad469SVishal Kulkarni #endif 420*7e6ad469SVishal Kulkarni }; 421*7e6ad469SVishal Kulkarni 422*7e6ad469SVishal Kulkarni /********************************* Helper functions *************************/ 423*7e6ad469SVishal Kulkarni void set_dbg_bitmap(u8 *bitmap, enum CUDBG_DBG_ENTITY_TYPE type); 424*7e6ad469SVishal Kulkarni void reset_dbg_bitmap(u8 *bitmap, enum CUDBG_DBG_ENTITY_TYPE type); 425*7e6ad469SVishal Kulkarni struct cudbg_init * cudbg_get_init(void *handle); 426*7e6ad469SVishal Kulkarni 427*7e6ad469SVishal Kulkarni /** 428*7e6ad469SVishal Kulkarni * cudbg_collect - Collect and store debug information. 429*7e6ad469SVishal Kulkarni * ## Parameters ## 430*7e6ad469SVishal Kulkarni * @handle : A pointer returned by cudbg_alloc_handle. 431*7e6ad469SVishal Kulkarni * @outbuf : pointer to output buffer, to store the collected information 432*7e6ad469SVishal Kulkarni * or to use it as a scratch buffer in case HW flash is used to 433*7e6ad469SVishal Kulkarni * store the debug information. 434*7e6ad469SVishal Kulkarni * @outbuf_size : Size of output buffer. 435*7e6ad469SVishal Kulkarni * ## Return ## 436*7e6ad469SVishal Kulkarni * If the function succeeds, the return value will be size of debug information 437*7e6ad469SVishal Kulkarni * collected and stored. 438*7e6ad469SVishal Kulkarni * -ve value represent error. 439*7e6ad469SVishal Kulkarni */ 440*7e6ad469SVishal Kulkarni int cudbg_collect(void *handle, void *outbuf, u32 *outbuf_size); 441*7e6ad469SVishal Kulkarni 442*7e6ad469SVishal Kulkarni int cudbg_view(void *handle, void *pinbuf, u32 inbuf_size, 443*7e6ad469SVishal Kulkarni void *poutbuf, s64 *poutbuf_size); 444*7e6ad469SVishal Kulkarni void init_cudbg_hdr(struct cudbg_init_hdr *hdr); 445*7e6ad469SVishal Kulkarni void * cudbg_alloc_handle(void); 446*7e6ad469SVishal Kulkarni void cudbg_free_handle(void *handle); 447*7e6ad469SVishal Kulkarni #endif /* _CUDBG_IF_H_ */ 448