^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /*******************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) * This file is part of the Emulex Linux Device Driver for *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Fibre Channel Host Bus Adapters. *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright (C) 2017-2019 Broadcom. All Rights Reserved. The term *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright (C) 2007-2011 Emulex. All rights reserved. *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * EMULEX and SLI are trademarks of Emulex. *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * www.broadcom.com *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * This program is free software; you can redistribute it and/or *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * modify it under the terms of version 2 of the GNU General *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * Public License as published by the Free Software Foundation. *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * This program is distributed in the hope that it will be useful. *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) * DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * TO BE LEGALLY INVALID. See the GNU General Public License for *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * more details, a copy of which can be found in the file COPYING *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * included with this package. *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) *******************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #ifndef _H_LPFC_DEBUG_FS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define _H_LPFC_DEBUG_FS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #ifdef CONFIG_SCSI_LPFC_DEBUG_FS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) /* size of output line, for discovery_trace and slow_ring_trace */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define LPFC_DEBUG_TRC_ENTRY_SIZE 100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) /* nodelist output buffer size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define LPFC_NODELIST_SIZE 8192
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #define LPFC_NODELIST_ENTRY_SIZE 120
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) /* dumpHBASlim output buffer size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define LPFC_DUMPHBASLIM_SIZE 4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) /* dumpHostSlim output buffer size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define LPFC_DUMPHOSTSLIM_SIZE 4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) /* dumpSLIqinfo output buffer size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #define LPFC_DUMPSLIQINFO_SIZE 4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) /* hbqinfo output buffer size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define LPFC_HBQINFO_SIZE 8192
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) /* nvmestat output buffer size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define LPFC_NVMESTAT_SIZE 8192
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #define LPFC_IOKTIME_SIZE 8192
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define LPFC_NVMEIO_TRC_SIZE 8192
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) /* scsistat output buffer size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define LPFC_SCSISTAT_SIZE 8192
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define LPFC_DEBUG_OUT_LINE_SZ 80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) * For SLI4 iDiag debugfs diagnostics tool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) /* pciConf */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #define LPFC_PCI_CFG_BROWSE 0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define LPFC_PCI_CFG_RD_CMD_ARG 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define LPFC_PCI_CFG_WR_CMD_ARG 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define LPFC_PCI_CFG_SIZE 4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #define LPFC_PCI_CFG_RD_SIZE (LPFC_PCI_CFG_SIZE/4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define IDIAG_PCICFG_WHERE_INDX 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) #define IDIAG_PCICFG_COUNT_INDX 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define IDIAG_PCICFG_VALUE_INDX 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) /* barAcc */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) #define LPFC_PCI_BAR_BROWSE 0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #define LPFC_PCI_BAR_RD_CMD_ARG 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define LPFC_PCI_BAR_WR_CMD_ARG 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) #define LPFC_PCI_IF0_BAR0_SIZE (1024 * 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define LPFC_PCI_IF0_BAR1_SIZE (1024 * 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define LPFC_PCI_IF0_BAR2_SIZE (1024 * 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define LPFC_PCI_IF2_BAR0_SIZE (1024 * 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #define LPFC_PCI_BAR_RD_BUF_SIZE 4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) #define LPFC_PCI_BAR_RD_SIZE (LPFC_PCI_BAR_RD_BUF_SIZE/4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #define LPFC_PCI_IF0_BAR0_RD_SIZE (LPFC_PCI_IF0_BAR0_SIZE/4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #define LPFC_PCI_IF0_BAR1_RD_SIZE (LPFC_PCI_IF0_BAR1_SIZE/4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) #define LPFC_PCI_IF0_BAR2_RD_SIZE (LPFC_PCI_IF0_BAR2_SIZE/4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) #define LPFC_PCI_IF2_BAR0_RD_SIZE (LPFC_PCI_IF2_BAR0_SIZE/4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #define IDIAG_BARACC_BAR_NUM_INDX 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) #define IDIAG_BARACC_OFF_SET_INDX 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #define IDIAG_BARACC_ACC_MOD_INDX 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) #define IDIAG_BARACC_REG_VAL_INDX 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) #define IDIAG_BARACC_BAR_SZE_INDX 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) #define IDIAG_BARACC_BAR_0 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) #define IDIAG_BARACC_BAR_1 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #define IDIAG_BARACC_BAR_2 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define SINGLE_WORD 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) /* queue info */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define LPFC_QUE_INFO_GET_BUF_SIZE 4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) /* queue acc */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #define LPFC_QUE_ACC_BROWSE 0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) #define LPFC_QUE_ACC_RD_CMD_ARG 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define LPFC_QUE_ACC_WR_CMD_ARG 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define LPFC_QUE_ACC_BUF_SIZE 4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define LPFC_QUE_ACC_SIZE (LPFC_QUE_ACC_BUF_SIZE/2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #define LPFC_IDIAG_EQ 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #define LPFC_IDIAG_CQ 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #define LPFC_IDIAG_MQ 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define LPFC_IDIAG_WQ 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #define LPFC_IDIAG_RQ 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define IDIAG_QUEACC_QUETP_INDX 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define IDIAG_QUEACC_QUEID_INDX 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define IDIAG_QUEACC_INDEX_INDX 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define IDIAG_QUEACC_COUNT_INDX 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define IDIAG_QUEACC_OFFST_INDX 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define IDIAG_QUEACC_VALUE_INDX 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) /* doorbell register acc */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define LPFC_DRB_ACC_ALL 0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define LPFC_DRB_ACC_RD_CMD_ARG 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define LPFC_DRB_ACC_WR_CMD_ARG 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define LPFC_DRB_ACC_BUF_SIZE 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define LPFC_DRB_EQ 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define LPFC_DRB_CQ 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) #define LPFC_DRB_MQ 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define LPFC_DRB_WQ 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define LPFC_DRB_RQ 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define LPFC_DRB_MAX 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #define IDIAG_DRBACC_REGID_INDX 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #define IDIAG_DRBACC_VALUE_INDX 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) /* control register acc */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) #define LPFC_CTL_ACC_ALL 0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define LPFC_CTL_ACC_RD_CMD_ARG 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #define LPFC_CTL_ACC_WR_CMD_ARG 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) #define LPFC_CTL_ACC_BUF_SIZE 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #define LPFC_CTL_PORT_SEM 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) #define LPFC_CTL_PORT_STA 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) #define LPFC_CTL_PORT_CTL 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #define LPFC_CTL_PORT_ER1 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) #define LPFC_CTL_PORT_ER2 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) #define LPFC_CTL_PDEV_CTL 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) #define LPFC_CTL_MAX 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) #define IDIAG_CTLACC_REGID_INDX 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #define IDIAG_CTLACC_VALUE_INDX 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) /* mailbox access */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) #define LPFC_MBX_DMP_ARG 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #define LPFC_MBX_ACC_BUF_SIZE 512
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) #define LPFC_MBX_ACC_LBUF_SZ 128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) #define LPFC_MBX_DMP_MBX_WORD 0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) #define LPFC_MBX_DMP_MBX_BYTE 0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) #define LPFC_MBX_DMP_MBX_ALL (LPFC_MBX_DMP_MBX_WORD | LPFC_MBX_DMP_MBX_BYTE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) #define LPFC_BSG_DMP_MBX_RD_MBX 0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) #define LPFC_BSG_DMP_MBX_RD_BUF 0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) #define LPFC_BSG_DMP_MBX_WR_MBX 0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) #define LPFC_BSG_DMP_MBX_WR_BUF 0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) #define LPFC_BSG_DMP_MBX_ALL (LPFC_BSG_DMP_MBX_RD_MBX | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) LPFC_BSG_DMP_MBX_RD_BUF | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) LPFC_BSG_DMP_MBX_WR_MBX | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) LPFC_BSG_DMP_MBX_WR_BUF)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) #define LPFC_MBX_DMP_ALL 0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) #define LPFC_MBX_ALL_CMD 0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) #define IDIAG_MBXACC_MBCMD_INDX 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) #define IDIAG_MBXACC_DPMAP_INDX 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) #define IDIAG_MBXACC_DPCNT_INDX 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) #define IDIAG_MBXACC_WDCNT_INDX 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) /* extents access */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) #define LPFC_EXT_ACC_CMD_ARG 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) #define LPFC_EXT_ACC_BUF_SIZE 4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) #define LPFC_EXT_ACC_AVAIL 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) #define LPFC_EXT_ACC_ALLOC 0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) #define LPFC_EXT_ACC_DRIVR 0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) #define LPFC_EXT_ACC_ALL (LPFC_EXT_ACC_DRIVR | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) LPFC_EXT_ACC_AVAIL | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) LPFC_EXT_ACC_ALLOC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) #define IDIAG_EXTACC_EXMAP_INDX 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) #define SIZE_U8 sizeof(uint8_t)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) #define SIZE_U16 sizeof(uint16_t)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #define SIZE_U32 sizeof(uint32_t)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #define lpfc_nvmeio_data(phba, fmt, arg...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) if (phba->nvmeio_trc_on) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) lpfc_debugfs_nvme_trc(phba, fmt, ##arg); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) struct lpfc_debug {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) char *i_private;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) char op;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) #define LPFC_IDIAG_OP_RD 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) #define LPFC_IDIAG_OP_WR 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) char *buffer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) int len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) struct lpfc_debugfs_trc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) char *fmt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) uint32_t data1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) uint32_t data2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) uint32_t data3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) uint32_t seq_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) unsigned long jif;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) struct lpfc_debugfs_nvmeio_trc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) char *fmt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) uint16_t data1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) uint16_t data2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) uint32_t data3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) struct lpfc_idiag_offset {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) uint32_t last_rd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) #define LPFC_IDIAG_CMD_DATA_SIZE 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) struct lpfc_idiag_cmd {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) uint32_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) #define LPFC_IDIAG_CMD_PCICFG_RD 0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) #define LPFC_IDIAG_CMD_PCICFG_WR 0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) #define LPFC_IDIAG_CMD_PCICFG_ST 0x00000003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) #define LPFC_IDIAG_CMD_PCICFG_CL 0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) #define LPFC_IDIAG_CMD_BARACC_RD 0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) #define LPFC_IDIAG_CMD_BARACC_WR 0x00000009
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) #define LPFC_IDIAG_CMD_BARACC_ST 0x0000000a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) #define LPFC_IDIAG_CMD_BARACC_CL 0x0000000b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) #define LPFC_IDIAG_CMD_QUEACC_RD 0x00000011
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) #define LPFC_IDIAG_CMD_QUEACC_WR 0x00000012
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) #define LPFC_IDIAG_CMD_QUEACC_ST 0x00000013
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) #define LPFC_IDIAG_CMD_QUEACC_CL 0x00000014
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) #define LPFC_IDIAG_CMD_DRBACC_RD 0x00000021
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) #define LPFC_IDIAG_CMD_DRBACC_WR 0x00000022
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) #define LPFC_IDIAG_CMD_DRBACC_ST 0x00000023
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) #define LPFC_IDIAG_CMD_DRBACC_CL 0x00000024
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) #define LPFC_IDIAG_CMD_CTLACC_RD 0x00000031
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) #define LPFC_IDIAG_CMD_CTLACC_WR 0x00000032
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) #define LPFC_IDIAG_CMD_CTLACC_ST 0x00000033
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) #define LPFC_IDIAG_CMD_CTLACC_CL 0x00000034
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) #define LPFC_IDIAG_CMD_MBXACC_DP 0x00000041
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) #define LPFC_IDIAG_BSG_MBXACC_DP 0x00000042
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) #define LPFC_IDIAG_CMD_EXTACC_RD 0x00000051
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) uint32_t data[LPFC_IDIAG_CMD_DATA_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) struct lpfc_idiag {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) uint32_t active;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) struct lpfc_idiag_cmd cmd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) struct lpfc_idiag_offset offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) void *ptr_private;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) #define lpfc_nvmeio_data(phba, fmt, arg...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) no_printk(fmt, ##arg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) /* multixripool output buffer size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) #define LPFC_DUMP_MULTIXRIPOOL_SIZE 8192
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) DUMP_IO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) DUMP_MBX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) DUMP_ELS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) DUMP_NVMELS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) /* Mask for discovery_trace */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) #define LPFC_DISC_TRC_ELS_CMD 0x1 /* Trace ELS commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) #define LPFC_DISC_TRC_ELS_RSP 0x2 /* Trace ELS response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) #define LPFC_DISC_TRC_ELS_UNSOL 0x4 /* Trace ELS rcv'ed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) #define LPFC_DISC_TRC_ELS_ALL 0x7 /* Trace ELS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) #define LPFC_DISC_TRC_MBOX_VPORT 0x8 /* Trace vport MBOXs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) #define LPFC_DISC_TRC_MBOX 0x10 /* Trace other MBOXs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) #define LPFC_DISC_TRC_MBOX_ALL 0x18 /* Trace all MBOXs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) #define LPFC_DISC_TRC_CT 0x20 /* Trace disc CT requests */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) #define LPFC_DISC_TRC_DSM 0x40 /* Trace DSM events */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) #define LPFC_DISC_TRC_RPORT 0x80 /* Trace rport events */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) #define LPFC_DISC_TRC_NODE 0x100 /* Trace ndlp state changes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) #define LPFC_DISC_TRC_DISCOVERY 0xef /* common mask for general
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) * discovery */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) #endif /* H_LPFC_DEBUG_FS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) * Driver debug utility routines outside of debugfs. The debug utility
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) * routines implemented here is intended to be used in the instrumented
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) * debug driver for debugging host or port issues.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) * lpfc_debug_dump_qe - dump an specific entry from a queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) * @q: Pointer to the queue descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) * @idx: Index to the entry on the queue.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) * This function dumps an entry indexed by @idx from a queue specified by the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) * queue descriptor @q.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) **/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) lpfc_debug_dump_qe(struct lpfc_queue *q, uint32_t idx)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) char line_buf[LPFC_LBUF_SZ];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) int i, esize, qe_word_cnt, len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) uint32_t *pword;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) /* sanity checks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) if (!q)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) if (idx >= q->entry_count)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) esize = q->entry_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) qe_word_cnt = esize / sizeof(uint32_t);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) pword = lpfc_sli4_qe(q, idx);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) len = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) len += scnprintf(line_buf+len, LPFC_LBUF_SZ-len, "QE[%04d]: ", idx);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) if (qe_word_cnt > 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) printk(KERN_ERR "%s\n", line_buf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) for (i = 0; i < qe_word_cnt; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) if (!(i % 8)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) if (i != 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) printk(KERN_ERR "%s\n", line_buf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) if (qe_word_cnt > 8) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) len = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) memset(line_buf, 0, LPFC_LBUF_SZ);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) len += scnprintf(line_buf+len, LPFC_LBUF_SZ-len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) "%03d: ", i);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) len += scnprintf(line_buf+len, LPFC_LBUF_SZ-len, "%08x ",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) ((uint32_t)*pword) & 0xffffffff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) pword++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) if (qe_word_cnt <= 8 || (i - 1) % 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) printk(KERN_ERR "%s\n", line_buf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) * lpfc_debug_dump_q - dump all entries from an specific queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) * @q: Pointer to the queue descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) * This function dumps all entries from a queue specified by the queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) * descriptor @q.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) **/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) lpfc_debug_dump_q(struct lpfc_queue *q)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) int idx, entry_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) /* sanity check */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) if (!q)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) dev_printk(KERN_ERR, &(((q->phba))->pcidev)->dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) "%d: [qid:%d, type:%d, subtype:%d, "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) "qe_size:%d, qe_count:%d, "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) "host_index:%d, port_index:%d]\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) (q->phba)->brd_no,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) q->queue_id, q->type, q->subtype,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) q->entry_size, q->entry_count,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) q->host_index, q->hba_index);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) entry_count = q->entry_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) for (idx = 0; idx < entry_count; idx++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) lpfc_debug_dump_qe(q, idx);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) printk(KERN_ERR "\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) * lpfc_debug_dump_wq - dump all entries from the fcp or nvme work queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) * @phba: Pointer to HBA context object.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) * @wqidx: Index to a FCP or NVME work queue.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) * This function dumps all entries from a FCP or NVME work queue specified
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) * by the wqidx.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) **/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) lpfc_debug_dump_wq(struct lpfc_hba *phba, int qtype, int wqidx)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) struct lpfc_queue *wq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) char *qtypestr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) if (qtype == DUMP_IO) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) wq = phba->sli4_hba.hdwq[wqidx].io_wq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) qtypestr = "IO";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) } else if (qtype == DUMP_MBX) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) wq = phba->sli4_hba.mbx_wq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) qtypestr = "MBX";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) } else if (qtype == DUMP_ELS) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) wq = phba->sli4_hba.els_wq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) qtypestr = "ELS";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) } else if (qtype == DUMP_NVMELS) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) wq = phba->sli4_hba.nvmels_wq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) qtypestr = "NVMELS";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) } else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) if (qtype == DUMP_IO)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) pr_err("%s WQ: WQ[Idx:%d|Qid:%d]\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) qtypestr, wqidx, wq->queue_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) pr_err("%s WQ: WQ[Qid:%d]\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) qtypestr, wq->queue_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) lpfc_debug_dump_q(wq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) * lpfc_debug_dump_cq - dump all entries from a fcp or nvme work queue's
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) * cmpl queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) * @phba: Pointer to HBA context object.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) * @wqidx: Index to a FCP work queue.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) * This function dumps all entries from a FCP or NVME completion queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) * which is associated to the work queue specified by the @wqidx.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) **/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) lpfc_debug_dump_cq(struct lpfc_hba *phba, int qtype, int wqidx)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) struct lpfc_queue *wq, *cq, *eq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) char *qtypestr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) int eqidx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) /* io wq and cq are 1:1, thus same indexes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) eq = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) if (qtype == DUMP_IO) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) wq = phba->sli4_hba.hdwq[wqidx].io_wq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) cq = phba->sli4_hba.hdwq[wqidx].io_cq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) qtypestr = "IO";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) } else if (qtype == DUMP_MBX) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) wq = phba->sli4_hba.mbx_wq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) cq = phba->sli4_hba.mbx_cq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) qtypestr = "MBX";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) } else if (qtype == DUMP_ELS) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) wq = phba->sli4_hba.els_wq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) cq = phba->sli4_hba.els_cq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) qtypestr = "ELS";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) } else if (qtype == DUMP_NVMELS) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) wq = phba->sli4_hba.nvmels_wq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) cq = phba->sli4_hba.nvmels_cq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) qtypestr = "NVMELS";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) } else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) for (eqidx = 0; eqidx < phba->cfg_hdw_queue; eqidx++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) eq = phba->sli4_hba.hdwq[eqidx].hba_eq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) if (cq->assoc_qid == eq->queue_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) if (eqidx == phba->cfg_hdw_queue) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) pr_err("Couldn't find EQ for CQ. Using EQ[0]\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) eqidx = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) eq = phba->sli4_hba.hdwq[0].hba_eq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) if (qtype == DUMP_IO)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) pr_err("%s CQ: WQ[Idx:%d|Qid%d]->CQ[Idx%d|Qid%d]"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) "->EQ[Idx:%d|Qid:%d]:\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) qtypestr, wqidx, wq->queue_id, wqidx, cq->queue_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) eqidx, eq->queue_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) pr_err("%s CQ: WQ[Qid:%d]->CQ[Qid:%d]"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) "->EQ[Idx:%d|Qid:%d]:\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) qtypestr, wq->queue_id, cq->queue_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) eqidx, eq->queue_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) lpfc_debug_dump_q(cq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) * lpfc_debug_dump_hba_eq - dump all entries from a fcp work queue's evt queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) * @phba: Pointer to HBA context object.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) * @fcp_wqidx: Index to a FCP work queue.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) * This function dumps all entries from a FCP event queue which is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) * associated to the FCP work queue specified by the @fcp_wqidx.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) **/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) lpfc_debug_dump_hba_eq(struct lpfc_hba *phba, int qidx)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) struct lpfc_queue *qp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) qp = phba->sli4_hba.hdwq[qidx].hba_eq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) pr_err("EQ[Idx:%d|Qid:%d]\n", qidx, qp->queue_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) lpfc_debug_dump_q(qp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) * lpfc_debug_dump_dat_rq - dump all entries from the receive data queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) * @phba: Pointer to HBA context object.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) * This function dumps all entries from the receive data queue.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) **/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) lpfc_debug_dump_dat_rq(struct lpfc_hba *phba)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) printk(KERN_ERR "DAT RQ: RQ[Qid:%d]\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) phba->sli4_hba.dat_rq->queue_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) lpfc_debug_dump_q(phba->sli4_hba.dat_rq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) * lpfc_debug_dump_hdr_rq - dump all entries from the receive header queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) * @phba: Pointer to HBA context object.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) * This function dumps all entries from the receive header queue.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) **/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) lpfc_debug_dump_hdr_rq(struct lpfc_hba *phba)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) printk(KERN_ERR "HDR RQ: RQ[Qid:%d]\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) phba->sli4_hba.hdr_rq->queue_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) lpfc_debug_dump_q(phba->sli4_hba.hdr_rq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) * lpfc_debug_dump_wq_by_id - dump all entries from a work queue by queue id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) * @phba: Pointer to HBA context object.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) * @qid: Work queue identifier.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) * This function dumps all entries from a work queue identified by the queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) * identifier.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) **/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) lpfc_debug_dump_wq_by_id(struct lpfc_hba *phba, int qid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) int wq_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) for (wq_idx = 0; wq_idx < phba->cfg_hdw_queue; wq_idx++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) if (phba->sli4_hba.hdwq[wq_idx].io_wq->queue_id == qid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) if (wq_idx < phba->cfg_hdw_queue) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) pr_err("IO WQ[Idx:%d|Qid:%d]\n", wq_idx, qid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) lpfc_debug_dump_q(phba->sli4_hba.hdwq[wq_idx].io_wq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) if (phba->sli4_hba.els_wq->queue_id == qid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) pr_err("ELS WQ[Qid:%d]\n", qid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) lpfc_debug_dump_q(phba->sli4_hba.els_wq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) if (phba->sli4_hba.nvmels_wq->queue_id == qid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) pr_err("NVME LS WQ[Qid:%d]\n", qid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) lpfc_debug_dump_q(phba->sli4_hba.nvmels_wq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) * lpfc_debug_dump_mq_by_id - dump all entries from a mbox queue by queue id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) * @phba: Pointer to HBA context object.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) * @qid: Mbox work queue identifier.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) * This function dumps all entries from a mbox work queue identified by the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) * queue identifier.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) **/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) lpfc_debug_dump_mq_by_id(struct lpfc_hba *phba, int qid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) if (phba->sli4_hba.mbx_wq->queue_id == qid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) printk(KERN_ERR "MBX WQ[Qid:%d]\n", qid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) lpfc_debug_dump_q(phba->sli4_hba.mbx_wq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) * lpfc_debug_dump_rq_by_id - dump all entries from a receive queue by queue id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) * @phba: Pointer to HBA context object.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) * @qid: Receive queue identifier.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) * This function dumps all entries from a receive queue identified by the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) * queue identifier.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) **/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) lpfc_debug_dump_rq_by_id(struct lpfc_hba *phba, int qid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) if (phba->sli4_hba.hdr_rq->queue_id == qid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) printk(KERN_ERR "HDR RQ[Qid:%d]\n", qid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) lpfc_debug_dump_q(phba->sli4_hba.hdr_rq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) if (phba->sli4_hba.dat_rq->queue_id == qid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) printk(KERN_ERR "DAT RQ[Qid:%d]\n", qid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) lpfc_debug_dump_q(phba->sli4_hba.dat_rq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) * lpfc_debug_dump_cq_by_id - dump all entries from a cmpl queue by queue id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) * @phba: Pointer to HBA context object.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) * @qid: Complete queue identifier.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) * This function dumps all entries from a complete queue identified by the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) * queue identifier.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) **/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) lpfc_debug_dump_cq_by_id(struct lpfc_hba *phba, int qid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) int cq_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) for (cq_idx = 0; cq_idx < phba->cfg_hdw_queue; cq_idx++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) if (phba->sli4_hba.hdwq[cq_idx].io_cq->queue_id == qid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) if (cq_idx < phba->cfg_hdw_queue) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) pr_err("IO CQ[Idx:%d|Qid:%d]\n", cq_idx, qid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) lpfc_debug_dump_q(phba->sli4_hba.hdwq[cq_idx].io_cq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) if (phba->sli4_hba.els_cq->queue_id == qid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) pr_err("ELS CQ[Qid:%d]\n", qid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) lpfc_debug_dump_q(phba->sli4_hba.els_cq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) if (phba->sli4_hba.nvmels_cq->queue_id == qid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) pr_err("NVME LS CQ[Qid:%d]\n", qid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) lpfc_debug_dump_q(phba->sli4_hba.nvmels_cq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) if (phba->sli4_hba.mbx_cq->queue_id == qid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) pr_err("MBX CQ[Qid:%d]\n", qid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) lpfc_debug_dump_q(phba->sli4_hba.mbx_cq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) * lpfc_debug_dump_eq_by_id - dump all entries from an event queue by queue id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) * @phba: Pointer to HBA context object.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) * @qid: Complete queue identifier.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) * This function dumps all entries from an event queue identified by the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) * queue identifier.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) **/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) lpfc_debug_dump_eq_by_id(struct lpfc_hba *phba, int qid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) int eq_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) for (eq_idx = 0; eq_idx < phba->cfg_hdw_queue; eq_idx++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) if (phba->sli4_hba.hdwq[eq_idx].hba_eq->queue_id == qid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) if (eq_idx < phba->cfg_hdw_queue) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) printk(KERN_ERR "FCP EQ[Idx:%d|Qid:%d]\n", eq_idx, qid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) lpfc_debug_dump_q(phba->sli4_hba.hdwq[eq_idx].hba_eq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) void lpfc_debug_dump_all_queues(struct lpfc_hba *);