1250661Sdavidcs/* 2250661Sdavidcs * Copyright (c) 2013-2014 Qlogic Corporation 3250661Sdavidcs * All rights reserved. 4250661Sdavidcs * 5250661Sdavidcs * Redistribution and use in source and binary forms, with or without 6250661Sdavidcs * modification, are permitted provided that the following conditions 7250661Sdavidcs * are met: 8250661Sdavidcs * 9250661Sdavidcs * 1. Redistributions of source code must retain the above copyright 10250661Sdavidcs * notice, this list of conditions and the following disclaimer. 11250661Sdavidcs * 2. Redistributions in binary form must reproduce the above copyright 12250661Sdavidcs * notice, this list of conditions and the following disclaimer in the 13250661Sdavidcs * documentation and/or other materials provided with the distribution. 14250661Sdavidcs * 15250661Sdavidcs * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16250661Sdavidcs * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17250661Sdavidcs * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18250661Sdavidcs * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19250661Sdavidcs * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20250661Sdavidcs * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21250661Sdavidcs * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22250661Sdavidcs * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23250661Sdavidcs * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24250661Sdavidcs * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25250661Sdavidcs * POSSIBILITY OF SUCH DAMAGE. 26250661Sdavidcs */ 27250661Sdavidcs/* 28250661Sdavidcs * File : ql_dbg.c 29250661Sdavidcs * Author : David C Somayajulu, Qlogic Corporation, Aliso Viejo, CA 92656. 30250661Sdavidcs */ 31250661Sdavidcs#include <sys/cdefs.h> 32250661Sdavidcs__FBSDID("$FreeBSD$"); 33250661Sdavidcs 34250661Sdavidcs#include "ql_os.h" 35250661Sdavidcs#include "ql_hw.h" 36250661Sdavidcs#include "ql_def.h" 37250661Sdavidcs#include "ql_inline.h" 38250661Sdavidcs#include "ql_ver.h" 39250661Sdavidcs#include "ql_glbl.h" 40250661Sdavidcs#include "ql_dbg.h" 41250661Sdavidcs 42250661Sdavidcs/* 43250661Sdavidcs * Name: ql_dump_buf32 44250661Sdavidcs * Function: dumps a buffer as 32 bit words 45250661Sdavidcs */ 46250661Sdavidcsvoid ql_dump_buf32(qla_host_t *ha, const char *msg, void *dbuf32, uint32_t len32) 47250661Sdavidcs{ 48250661Sdavidcs device_t dev; 49250661Sdavidcs uint32_t i = 0; 50250661Sdavidcs uint32_t *buf; 51250661Sdavidcs 52250661Sdavidcs dev = ha->pci_dev; 53250661Sdavidcs buf = dbuf32; 54250661Sdavidcs 55250661Sdavidcs device_printf(dev, "%s: %s dump start\n", __func__, msg); 56250661Sdavidcs 57250661Sdavidcs while (len32 >= 4) { 58250661Sdavidcs device_printf(dev,"0x%08x: 0x%08x 0x%08x 0x%08x 0x%08x\n", 59250661Sdavidcs i, buf[0], buf[1], buf[2], buf[3]); 60250661Sdavidcs i += 4 * 4; 61250661Sdavidcs len32 -= 4; 62250661Sdavidcs buf += 4; 63250661Sdavidcs } 64250661Sdavidcs switch (len32) { 65250661Sdavidcs case 1: 66250661Sdavidcs device_printf(dev,"0x%08x: 0x%08x\n", i, buf[0]); 67250661Sdavidcs break; 68250661Sdavidcs case 2: 69250661Sdavidcs device_printf(dev,"0x%08x: 0x%08x 0x%08x\n", i, buf[0], buf[1]); 70250661Sdavidcs break; 71250661Sdavidcs case 3: 72250661Sdavidcs device_printf(dev,"0x%08x: 0x%08x 0x%08x 0x%08x\n", 73250661Sdavidcs i, buf[0], buf[1], buf[2]); 74250661Sdavidcs break; 75250661Sdavidcs default: 76250661Sdavidcs break; 77250661Sdavidcs } 78250661Sdavidcs device_printf(dev, "%s: %s dump end\n", __func__, msg); 79250661Sdavidcs} 80250661Sdavidcs 81250661Sdavidcs/* 82250661Sdavidcs * Name: ql_dump_buf16 83250661Sdavidcs * Function: dumps a buffer as 16 bit words 84250661Sdavidcs */ 85250661Sdavidcsvoid ql_dump_buf16(qla_host_t *ha, const char *msg, void *dbuf16, uint32_t len16) 86250661Sdavidcs{ 87250661Sdavidcs device_t dev; 88250661Sdavidcs uint32_t i = 0; 89250661Sdavidcs uint16_t *buf; 90250661Sdavidcs 91250661Sdavidcs dev = ha->pci_dev; 92250661Sdavidcs buf = dbuf16; 93250661Sdavidcs 94250661Sdavidcs device_printf(dev, "%s: %s dump start\n", __func__, msg); 95250661Sdavidcs 96250661Sdavidcs while (len16 >= 8) { 97250661Sdavidcs device_printf(dev,"0x%08x: 0x%04x 0x%04x 0x%04x 0x%04x" 98250661Sdavidcs " 0x%04x 0x%04x 0x%04x 0x%04x\n", i, buf[0], 99250661Sdavidcs buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]); 100250661Sdavidcs i += 16; 101250661Sdavidcs len16 -= 8; 102250661Sdavidcs buf += 8; 103250661Sdavidcs } 104250661Sdavidcs switch (len16) { 105250661Sdavidcs case 1: 106250661Sdavidcs device_printf(dev,"0x%08x: 0x%04x\n", i, buf[0]); 107250661Sdavidcs break; 108250661Sdavidcs case 2: 109250661Sdavidcs device_printf(dev,"0x%08x: 0x%04x 0x%04x\n", i, buf[0], buf[1]); 110250661Sdavidcs break; 111250661Sdavidcs case 3: 112250661Sdavidcs device_printf(dev,"0x%08x: 0x%04x 0x%04x 0x%04x\n", 113250661Sdavidcs i, buf[0], buf[1], buf[2]); 114250661Sdavidcs break; 115250661Sdavidcs case 4: 116250661Sdavidcs device_printf(dev,"0x%08x: 0x%04x 0x%04x 0x%04x 0x%04x\n", i, 117250661Sdavidcs buf[0], buf[1], buf[2], buf[3]); 118250661Sdavidcs break; 119250661Sdavidcs case 5: 120250661Sdavidcs device_printf(dev,"0x%08x:" 121250661Sdavidcs " 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", i, 122250661Sdavidcs buf[0], buf[1], buf[2], buf[3], buf[4]); 123250661Sdavidcs break; 124250661Sdavidcs case 6: 125250661Sdavidcs device_printf(dev,"0x%08x:" 126250661Sdavidcs " 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", i, 127250661Sdavidcs buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]); 128250661Sdavidcs break; 129250661Sdavidcs case 7: 130250661Sdavidcs device_printf(dev,"0x%04x: 0x%04x 0x%04x 0x%04x 0x%04x" 131250661Sdavidcs " 0x%04x 0x%04x 0x%04x\n", i, buf[0], buf[1], 132250661Sdavidcs buf[2], buf[3], buf[4], buf[5], buf[6]); 133250661Sdavidcs break; 134250661Sdavidcs default: 135250661Sdavidcs break; 136250661Sdavidcs } 137250661Sdavidcs device_printf(dev, "%s: %s dump end\n", __func__, msg); 138250661Sdavidcs} 139250661Sdavidcs 140250661Sdavidcs/* 141250661Sdavidcs * Name: ql_dump_buf8 142250661Sdavidcs * Function: dumps a buffer as bytes 143250661Sdavidcs */ 144250661Sdavidcsvoid ql_dump_buf8(qla_host_t *ha, const char *msg, void *dbuf, uint32_t len) 145250661Sdavidcs{ 146250661Sdavidcs device_t dev; 147250661Sdavidcs uint32_t i = 0; 148250661Sdavidcs uint8_t *buf; 149250661Sdavidcs 150250661Sdavidcs dev = ha->pci_dev; 151250661Sdavidcs buf = dbuf; 152250661Sdavidcs 153250661Sdavidcs device_printf(dev, "%s: %s 0x%x dump start\n", __func__, msg, len); 154250661Sdavidcs 155250661Sdavidcs while (len >= 16) { 156250661Sdavidcs device_printf(dev,"0x%08x:" 157250661Sdavidcs " %02x %02x %02x %02x %02x %02x %02x %02x" 158250661Sdavidcs " %02x %02x %02x %02x %02x %02x %02x %02x\n", i, 159250661Sdavidcs buf[0], buf[1], buf[2], buf[3], 160250661Sdavidcs buf[4], buf[5], buf[6], buf[7], 161250661Sdavidcs buf[8], buf[9], buf[10], buf[11], 162250661Sdavidcs buf[12], buf[13], buf[14], buf[15]); 163250661Sdavidcs i += 16; 164250661Sdavidcs len -= 16; 165250661Sdavidcs buf += 16; 166250661Sdavidcs } 167250661Sdavidcs switch (len) { 168250661Sdavidcs case 1: 169250661Sdavidcs device_printf(dev,"0x%08x: %02x\n", i, buf[0]); 170250661Sdavidcs break; 171250661Sdavidcs case 2: 172250661Sdavidcs device_printf(dev,"0x%08x: %02x %02x\n", i, buf[0], buf[1]); 173250661Sdavidcs break; 174250661Sdavidcs case 3: 175250661Sdavidcs device_printf(dev,"0x%08x: %02x %02x %02x\n", 176250661Sdavidcs i, buf[0], buf[1], buf[2]); 177250661Sdavidcs break; 178250661Sdavidcs case 4: 179250661Sdavidcs device_printf(dev,"0x%08x: %02x %02x %02x %02x\n", i, 180250661Sdavidcs buf[0], buf[1], buf[2], buf[3]); 181250661Sdavidcs break; 182250661Sdavidcs case 5: 183250661Sdavidcs device_printf(dev,"0x%08x:" 184250661Sdavidcs " %02x %02x %02x %02x %02x\n", i, 185250661Sdavidcs buf[0], buf[1], buf[2], buf[3], buf[4]); 186250661Sdavidcs break; 187250661Sdavidcs case 6: 188250661Sdavidcs device_printf(dev,"0x%08x:" 189250661Sdavidcs " %02x %02x %02x %02x %02x %02x\n", i, 190250661Sdavidcs buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]); 191250661Sdavidcs break; 192250661Sdavidcs case 7: 193250661Sdavidcs device_printf(dev,"0x%08x:" 194250661Sdavidcs " %02x %02x %02x %02x %02x %02x %02x\n", i, 195250661Sdavidcs buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]); 196250661Sdavidcs break; 197250661Sdavidcs case 8: 198250661Sdavidcs device_printf(dev,"0x%08x:" 199250661Sdavidcs " %02x %02x %02x %02x %02x %02x %02x %02x\n", i, 200250661Sdavidcs buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], 201250661Sdavidcs buf[7]); 202250661Sdavidcs break; 203250661Sdavidcs case 9: 204250661Sdavidcs device_printf(dev,"0x%08x:" 205250661Sdavidcs " %02x %02x %02x %02x %02x %02x %02x %02x" 206250661Sdavidcs " %02x\n", i, 207250661Sdavidcs buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], 208250661Sdavidcs buf[7], buf[8]); 209250661Sdavidcs break; 210250661Sdavidcs case 10: 211250661Sdavidcs device_printf(dev,"0x%08x:" 212250661Sdavidcs " %02x %02x %02x %02x %02x %02x %02x %02x" 213250661Sdavidcs " %02x %02x\n", i, 214250661Sdavidcs buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], 215250661Sdavidcs buf[7], buf[8], buf[9]); 216250661Sdavidcs break; 217250661Sdavidcs case 11: 218250661Sdavidcs device_printf(dev,"0x%08x:" 219250661Sdavidcs " %02x %02x %02x %02x %02x %02x %02x %02x" 220250661Sdavidcs " %02x %02x %02x\n", i, 221250661Sdavidcs buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], 222250661Sdavidcs buf[7], buf[8], buf[9], buf[10]); 223250661Sdavidcs break; 224250661Sdavidcs case 12: 225250661Sdavidcs device_printf(dev,"0x%08x:" 226250661Sdavidcs " %02x %02x %02x %02x %02x %02x %02x %02x" 227250661Sdavidcs " %02x %02x %02x %02x\n", i, 228250661Sdavidcs buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], 229250661Sdavidcs buf[7], buf[8], buf[9], buf[10], buf[11]); 230250661Sdavidcs break; 231250661Sdavidcs case 13: 232250661Sdavidcs device_printf(dev,"0x%08x:" 233250661Sdavidcs " %02x %02x %02x %02x %02x %02x %02x %02x" 234250661Sdavidcs " %02x %02x %02x %02x %02x\n", i, 235250661Sdavidcs buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], 236250661Sdavidcs buf[7], buf[8], buf[9], buf[10], buf[11], buf[12]); 237250661Sdavidcs break; 238250661Sdavidcs case 14: 239250661Sdavidcs device_printf(dev,"0x%08x:" 240250661Sdavidcs " %02x %02x %02x %02x %02x %02x %02x %02x" 241250661Sdavidcs " %02x %02x %02x %02x %02x %02x\n", i, 242250661Sdavidcs buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], 243250661Sdavidcs buf[7], buf[8], buf[9], buf[10], buf[11], buf[12], 244250661Sdavidcs buf[13]); 245250661Sdavidcs break; 246250661Sdavidcs case 15: 247250661Sdavidcs device_printf(dev,"0x%08x:" 248250661Sdavidcs " %02x %02x %02x %02x %02x %02x %02x %02x" 249250661Sdavidcs " %02x %02x %02x %02x %02x %02x %02x\n", i, 250250661Sdavidcs buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], 251250661Sdavidcs buf[7], buf[8], buf[9], buf[10], buf[11], buf[12], 252250661Sdavidcs buf[13], buf[14]); 253250661Sdavidcs break; 254250661Sdavidcs default: 255250661Sdavidcs break; 256250661Sdavidcs } 257250661Sdavidcs 258250661Sdavidcs device_printf(dev, "%s: %s dump end\n", __func__, msg); 259250661Sdavidcs} 260250661Sdavidcs 261