^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) * Logging Support for MPT (Message Passing Technology) based controllers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * This code is based on drivers/scsi/mpt3sas/mpt3sas_debug.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (C) 2012-2014 LSI Corporation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright (C) 2013-2014 Avago Technologies
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * (mailto: MPT-FusionLinux.pdl@avagotech.com)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * This program is free software; you can redistribute it and/or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * modify it under the terms of the GNU General Public License
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * as published by the Free Software Foundation; either version 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * of the License, or (at your option) any later version.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) * This program is distributed in the hope that it will be useful,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * but WITHOUT ANY WARRANTY; without even the implied warranty of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) * GNU General Public License for more details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * NO WARRANTY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * solely responsible for determining the appropriateness of using and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * distributing the Program and assumes all risks associated with its
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * exercise of rights under this Agreement, including but not limited to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * the risks and costs of program errors, damage to or loss of data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) * programs or equipment, and unavailability or interruption of operations.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) * DISCLAIMER OF LIABILITY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) * NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) * USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) * HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) * You should have received a copy of the GNU General Public License
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) * along with this program; if not, write to the Free Software
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) * USA.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #ifndef MPT3SAS_DEBUG_H_INCLUDED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define MPT3SAS_DEBUG_H_INCLUDED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define MPT_DEBUG 0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #define MPT_DEBUG_MSG_FRAME 0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define MPT_DEBUG_SG 0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define MPT_DEBUG_EVENTS 0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define MPT_DEBUG_EVENT_WORK_TASK 0x00000010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define MPT_DEBUG_INIT 0x00000020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define MPT_DEBUG_EXIT 0x00000040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define MPT_DEBUG_FAIL 0x00000080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define MPT_DEBUG_TM 0x00000100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define MPT_DEBUG_REPLY 0x00000200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define MPT_DEBUG_HANDSHAKE 0x00000400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #define MPT_DEBUG_CONFIG 0x00000800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) #define MPT_DEBUG_DL 0x00001000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) #define MPT_DEBUG_RESET 0x00002000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #define MPT_DEBUG_SCSI 0x00004000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define MPT_DEBUG_IOCTL 0x00008000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define MPT_DEBUG_SAS 0x00020000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define MPT_DEBUG_TRANSPORT 0x00040000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #define MPT_DEBUG_TASK_SET_FULL 0x00080000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define MPT_DEBUG_TRIGGER_DIAG 0x00200000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #define MPT_CHECK_LOGGING(IOC, CMD, BITS) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) if (IOC->logging_level & BITS) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) CMD; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) * debug macros
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #define dprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #define dsgprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) #define devtprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_EVENTS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #define dewtprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_EVENT_WORK_TASK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) #define dinitprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_INIT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) #define dexitprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_EXIT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) #define dfailprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_FAIL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define dtmprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_TM)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define dreplyprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_REPLY)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define dhsprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_HANDSHAKE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define dcprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_CONFIG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #define ddlprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_DL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define drsprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_RESET)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define dsprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SCSI)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define dctlprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_IOCTL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define dsasprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SAS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define dsastransport(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SAS_WIDE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define dmfprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_MSG_FRAME)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define dtsfprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_TASK_SET_FULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define dtransportprintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_TRANSPORT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #define dTriggerDiagPrintk(IOC, CMD) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_TRIGGER_DIAG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) /* inline functions for dumping debug data*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) * _debug_dump_mf - print message frame contents
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) * @mpi_request: pointer to message frame
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) * @sz: number of dwords
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) _debug_dump_mf(void *mpi_request, int sz)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) __le32 *mfp = (__le32 *)mpi_request;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) pr_info("mf:\n\t");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) for (i = 0; i < sz; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) if (i && ((i % 8) == 0))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) pr_info("\n\t");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) pr_info("%08x ", le32_to_cpu(mfp[i]));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) pr_info("\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) * _debug_dump_reply - print message frame contents
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) * @mpi_request: pointer to message frame
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) * @sz: number of dwords
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) _debug_dump_reply(void *mpi_request, int sz)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) __le32 *mfp = (__le32 *)mpi_request;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) pr_info("reply:\n\t");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) for (i = 0; i < sz; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) if (i && ((i % 8) == 0))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) pr_info("\n\t");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) pr_info("%08x ", le32_to_cpu(mfp[i]));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) pr_info("\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) * _debug_dump_config - print config page contents
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) * @mpi_request: pointer to message frame
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) * @sz: number of dwords
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) _debug_dump_config(void *mpi_request, int sz)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) __le32 *mfp = (__le32 *)mpi_request;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) pr_info("config:\n\t");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) for (i = 0; i < sz; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) if (i && ((i % 8) == 0))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) pr_info("\n\t");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) pr_info("%08x ", le32_to_cpu(mfp[i]));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) pr_info("\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) #endif /* MPT3SAS_DEBUG_H_INCLUDED */