1331722Seadler/* 2250340Sdavidcs * Copyright (c) 2011-2013 Qlogic Corporation 3227064Sbz * All rights reserved. 4227064Sbz * 5227064Sbz * Redistribution and use in source and binary forms, with or without 6227064Sbz * modification, are permitted provided that the following conditions 7227064Sbz * are met: 8227064Sbz * 9227064Sbz * 1. Redistributions of source code must retain the above copyright 10227064Sbz * notice, this list of conditions and the following disclaimer. 11227064Sbz * 2. Redistributions in binary form must reproduce the above copyright 12227064Sbz * notice, this list of conditions and the following disclaimer in the 13227064Sbz * documentation and/or other materials provided with the distribution. 14227064Sbz * 15227064Sbz * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16227064Sbz * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17227064Sbz * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18227064Sbz * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19227064Sbz * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20227064Sbz * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21227064Sbz * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22227064Sbz * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23227064Sbz * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24227064Sbz * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25227064Sbz * POSSIBILITY OF SUCH DAMAGE. 26227064Sbz */ 27227064Sbz/* 28227064Sbz * File : qla_dbg.c 29227064Sbz * Author : David C Somayajulu, Qlogic Corporation, Aliso Viejo, CA 92656. 30227064Sbz */ 31227064Sbz 32227064Sbz#include <sys/cdefs.h> 33227064Sbz__FBSDID("$FreeBSD$"); 34227064Sbz 35227064Sbz#include "qla_os.h" 36227064Sbz#include "qla_reg.h" 37227064Sbz#include "qla_hw.h" 38227064Sbz#include "qla_def.h" 39227064Sbz#include "qla_inline.h" 40227064Sbz#include "qla_ver.h" 41227064Sbz#include "qla_glbl.h" 42227064Sbz#include "qla_dbg.h" 43227064Sbz 44227064Sbz 45227064Sbzuint32_t dbg_level = 0 ; 46227064Sbz/* 47227064Sbz * Name: qla_dump_buf32 48227064Sbz * Function: dumps a buffer as 32 bit words 49227064Sbz */ 50227064Sbzvoid qla_dump_buf32(qla_host_t *ha, char *msg, void *dbuf32, uint32_t len32) 51227064Sbz{ 52227064Sbz device_t dev; 53227064Sbz uint32_t i = 0; 54227064Sbz uint32_t *buf; 55227064Sbz 56227064Sbz dev = ha->pci_dev; 57227064Sbz buf = dbuf32; 58227064Sbz 59227064Sbz device_printf(dev, "%s: %s dump start\n", __func__, msg); 60227064Sbz 61227064Sbz while (len32 >= 4) { 62227064Sbz device_printf(dev,"0x%08x: 0x%08x 0x%08x 0x%08x 0x%08x\n", 63227064Sbz i, buf[0], buf[1], buf[2], buf[3]); 64227064Sbz i += 4 * 4; 65227064Sbz len32 -= 4; 66227064Sbz buf += 4; 67227064Sbz } 68227064Sbz switch (len32) { 69227064Sbz case 1: 70227064Sbz device_printf(dev,"0x%08x: 0x%08x\n", i, buf[0]); 71227064Sbz break; 72227064Sbz case 2: 73227064Sbz device_printf(dev,"0x%08x: 0x%08x 0x%08x\n", i, buf[0], buf[1]); 74227064Sbz break; 75227064Sbz case 3: 76227064Sbz device_printf(dev,"0x%08x: 0x%08x 0x%08x 0x%08x\n", 77227064Sbz i, buf[0], buf[1], buf[2]); 78227064Sbz break; 79227064Sbz default: 80227064Sbz break; 81227064Sbz } 82227064Sbz device_printf(dev, "%s: %s dump end\n", __func__, msg); 83227064Sbz} 84227064Sbz 85227064Sbz/* 86227064Sbz * Name: qla_dump_buf16 87227064Sbz * Function: dumps a buffer as 16 bit words 88227064Sbz */ 89227064Sbzvoid qla_dump_buf16(qla_host_t *ha, char *msg, void *dbuf16, uint32_t len16) 90227064Sbz{ 91227064Sbz device_t dev; 92227064Sbz uint32_t i = 0; 93227064Sbz uint16_t *buf; 94227064Sbz 95227064Sbz dev = ha->pci_dev; 96227064Sbz buf = dbuf16; 97227064Sbz 98227064Sbz device_printf(dev, "%s: %s dump start\n", __func__, msg); 99227064Sbz 100227064Sbz while (len16 >= 8) { 101227064Sbz device_printf(dev,"0x%08x: 0x%04x 0x%04x 0x%04x 0x%04x" 102227064Sbz " 0x%04x 0x%04x 0x%04x 0x%04x\n", i, buf[0], 103227064Sbz buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]); 104227064Sbz i += 16; 105227064Sbz len16 -= 8; 106227064Sbz buf += 8; 107227064Sbz } 108227064Sbz switch (len16) { 109227064Sbz case 1: 110227064Sbz device_printf(dev,"0x%08x: 0x%04x\n", i, buf[0]); 111227064Sbz break; 112227064Sbz case 2: 113227064Sbz device_printf(dev,"0x%08x: 0x%04x 0x%04x\n", i, buf[0], buf[1]); 114227064Sbz break; 115227064Sbz case 3: 116227064Sbz device_printf(dev,"0x%08x: 0x%04x 0x%04x 0x%04x\n", 117227064Sbz i, buf[0], buf[1], buf[2]); 118227064Sbz break; 119227064Sbz case 4: 120227064Sbz device_printf(dev,"0x%08x: 0x%04x 0x%04x 0x%04x 0x%04x\n", i, 121227064Sbz buf[0], buf[1], buf[2], buf[3]); 122227064Sbz break; 123227064Sbz case 5: 124227064Sbz device_printf(dev,"0x%08x:" 125227064Sbz " 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", i, 126227064Sbz buf[0], buf[1], buf[2], buf[3], buf[4]); 127227064Sbz break; 128227064Sbz case 6: 129227064Sbz device_printf(dev,"0x%08x:" 130227064Sbz " 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", i, 131227064Sbz buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]); 132227064Sbz break; 133227064Sbz case 7: 134227064Sbz device_printf(dev,"0x%04x: 0x%04x 0x%04x 0x%04x 0x%04x" 135227064Sbz " 0x%04x 0x%04x 0x%04x\n", i, buf[0], buf[1], 136227064Sbz buf[2], buf[3], buf[4], buf[5], buf[6]); 137227064Sbz break; 138227064Sbz default: 139227064Sbz break; 140227064Sbz } 141227064Sbz device_printf(dev, "%s: %s dump end\n", __func__, msg); 142227064Sbz} 143227064Sbz 144227064Sbz/* 145227064Sbz * Name: qla_dump_buf8 146227064Sbz * Function: dumps a buffer as bytes 147227064Sbz */ 148227064Sbzvoid qla_dump_buf8(qla_host_t *ha, char *msg, void *dbuf, uint32_t len) 149227064Sbz{ 150227064Sbz device_t dev; 151227064Sbz uint32_t i = 0; 152227064Sbz uint8_t *buf; 153227064Sbz 154227064Sbz dev = ha->pci_dev; 155227064Sbz buf = dbuf; 156227064Sbz 157227064Sbz device_printf(dev, "%s: %s 0x%x dump start\n", __func__, msg, len); 158227064Sbz 159227064Sbz while (len >= 16) { 160227064Sbz device_printf(dev,"0x%08x:" 161227064Sbz " %02x %02x %02x %02x %02x %02x %02x %02x" 162227064Sbz " %02x %02x %02x %02x %02x %02x %02x %02x\n", i, 163227064Sbz buf[0], buf[1], buf[2], buf[3], 164227064Sbz buf[4], buf[5], buf[6], buf[7], 165227064Sbz buf[8], buf[9], buf[10], buf[11], 166227064Sbz buf[12], buf[13], buf[14], buf[15]); 167227064Sbz i += 16; 168227064Sbz len -= 16; 169227064Sbz buf += 16; 170227064Sbz } 171227064Sbz switch (len) { 172227064Sbz case 1: 173227064Sbz device_printf(dev,"0x%08x: %02x\n", i, buf[0]); 174227064Sbz break; 175227064Sbz case 2: 176227064Sbz device_printf(dev,"0x%08x: %02x %02x\n", i, buf[0], buf[1]); 177227064Sbz break; 178227064Sbz case 3: 179227064Sbz device_printf(dev,"0x%08x: %02x %02x %02x\n", 180227064Sbz i, buf[0], buf[1], buf[2]); 181227064Sbz break; 182227064Sbz case 4: 183227064Sbz device_printf(dev,"0x%08x: %02x %02x %02x %02x\n", i, 184227064Sbz buf[0], buf[1], buf[2], buf[3]); 185227064Sbz break; 186227064Sbz case 5: 187227064Sbz device_printf(dev,"0x%08x:" 188227064Sbz " %02x %02x %02x %02x %02x\n", i, 189227064Sbz buf[0], buf[1], buf[2], buf[3], buf[4]); 190227064Sbz break; 191227064Sbz case 6: 192227064Sbz device_printf(dev,"0x%08x:" 193227064Sbz " %02x %02x %02x %02x %02x %02x\n", i, 194227064Sbz buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]); 195227064Sbz break; 196227064Sbz case 7: 197227064Sbz device_printf(dev,"0x%08x:" 198227064Sbz " %02x %02x %02x %02x %02x %02x %02x\n", i, 199227064Sbz buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]); 200227064Sbz break; 201227064Sbz case 8: 202227064Sbz device_printf(dev,"0x%08x:" 203227064Sbz " %02x %02x %02x %02x %02x %02x %02x %02x\n", i, 204227064Sbz buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], 205227064Sbz buf[7]); 206227064Sbz break; 207227064Sbz case 9: 208227064Sbz device_printf(dev,"0x%08x:" 209227064Sbz " %02x %02x %02x %02x %02x %02x %02x %02x" 210227064Sbz " %02x\n", i, 211227064Sbz buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], 212227064Sbz buf[7], buf[8]); 213227064Sbz break; 214227064Sbz case 10: 215227064Sbz device_printf(dev,"0x%08x:" 216227064Sbz " %02x %02x %02x %02x %02x %02x %02x %02x" 217227064Sbz " %02x %02x\n", i, 218227064Sbz buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], 219227064Sbz buf[7], buf[8], buf[9]); 220227064Sbz break; 221227064Sbz case 11: 222227064Sbz device_printf(dev,"0x%08x:" 223227064Sbz " %02x %02x %02x %02x %02x %02x %02x %02x" 224227064Sbz " %02x %02x %02x\n", i, 225227064Sbz buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], 226227064Sbz buf[7], buf[8], buf[9], buf[10]); 227227064Sbz break; 228227064Sbz case 12: 229227064Sbz device_printf(dev,"0x%08x:" 230227064Sbz " %02x %02x %02x %02x %02x %02x %02x %02x" 231227064Sbz " %02x %02x %02x %02x\n", i, 232227064Sbz buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], 233227064Sbz buf[7], buf[8], buf[9], buf[10], buf[11]); 234227064Sbz break; 235227064Sbz case 13: 236227064Sbz device_printf(dev,"0x%08x:" 237227064Sbz " %02x %02x %02x %02x %02x %02x %02x %02x" 238227064Sbz " %02x %02x %02x %02x %02x\n", i, 239227064Sbz buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], 240227064Sbz buf[7], buf[8], buf[9], buf[10], buf[11], buf[12]); 241227064Sbz break; 242227064Sbz case 14: 243227064Sbz device_printf(dev,"0x%08x:" 244227064Sbz " %02x %02x %02x %02x %02x %02x %02x %02x" 245227064Sbz " %02x %02x %02x %02x %02x %02x\n", i, 246227064Sbz buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], 247227064Sbz buf[7], buf[8], buf[9], buf[10], buf[11], buf[12], 248227064Sbz buf[13]); 249227064Sbz break; 250227064Sbz case 15: 251227064Sbz device_printf(dev,"0x%08x:" 252227064Sbz " %02x %02x %02x %02x %02x %02x %02x %02x" 253227064Sbz " %02x %02x %02x %02x %02x %02x %02x\n", i, 254227064Sbz buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], 255227064Sbz buf[7], buf[8], buf[9], buf[10], buf[11], buf[12], 256227064Sbz buf[13], buf[14]); 257227064Sbz break; 258227064Sbz default: 259227064Sbz break; 260227064Sbz } 261227064Sbz 262227064Sbz device_printf(dev, "%s: %s dump end\n", __func__, msg); 263227064Sbz} 264