/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2014 QLogic Corporation * The contents of this file are subject to the terms of the * QLogic End User License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the License at * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/ * QLogic_End_User_Software_License.txt * See the License for the specific language governing permissions * and limitations under the License. */ #include "bnxe.h" #define BNXE_LOG_LEN 256 #ifdef DBG void DbgMessageFunc(void * pDev, int level, char * pFmt, ...) { um_device_t * pUM = (um_device_t *)pDev; va_list argp; int ce; if ((pUM != NULL) && (((pUM->devParams.debug_level & level & CP_ALL) != (level & CP_ALL)) || ((pUM->devParams.debug_level & LV_MASK) < (level & LV_MASK)))) { return; } ce = (((level & LV_VERBOSE) == LV_VERBOSE) ? CE_NOTE : ((level & LV_INFORM) == LV_INFORM) ? CE_NOTE : ((level & LV_WARN) == LV_WARN) ? CE_WARN : CE_PANIC); va_start(argp, pFmt); vcmn_err(ce, pFmt, argp); va_end(argp); } #endif /* DBG */ void elink_cb_dbg(struct elink_dev * bp, char * fmt) { um_device_t * pUM = (um_device_t *)bp; char buf[BNXE_LOG_LEN]; #ifdef DBG if ((pUM->devParams.debug_level & LV_MASK) < LV_WARN) { return; } snprintf(buf, sizeof(buf), fmt); cmn_err(CE_NOTE, "!%s: ELINK %s", BnxeDevName(pUM), buf); #endif } void elink_cb_dbg1(struct elink_dev * bp, char * fmt, u32 arg1) { um_device_t * pUM = (um_device_t *)bp; char buf[BNXE_LOG_LEN]; #ifdef DBG if ((pUM->devParams.debug_level & LV_MASK) < LV_WARN) { return; } snprintf(buf, sizeof(buf), fmt, arg1); cmn_err(CE_NOTE, "!%s: ELINK %s", BnxeDevName(pUM), buf); #endif } void elink_cb_dbg2(struct elink_dev * bp, char * fmt, u32 arg1, u32 arg2) { um_device_t * pUM = (um_device_t *)bp; char buf[BNXE_LOG_LEN]; #ifdef DBG if ((pUM->devParams.debug_level & LV_MASK) < LV_WARN) { return; } snprintf(buf, sizeof(buf), fmt, arg1, arg2); cmn_err(CE_NOTE, "!%s: ELINK %s", BnxeDevName(pUM), buf); #endif } void elink_cb_dbg3(struct elink_dev * bp, char * fmt, u32 arg1, u32 arg2, u32 arg3) { um_device_t * pUM = (um_device_t *)bp; char buf[BNXE_LOG_LEN]; #ifdef DBG if ((pUM->devParams.debug_level & LV_MASK) < LV_WARN) { return; } snprintf(buf, sizeof(buf), fmt, arg1, arg2, arg3); cmn_err(CE_NOTE, "!%s: ELINK %s", BnxeDevName(pUM), buf); #endif } void BnxeLogInfo(void * pDev, char * pFmt, ...) { um_device_t * pUM = (um_device_t *)pDev; char buf[BNXE_LOG_LEN]; va_list argp; /* * Info message are logged to syslog only if logEnable is * turned on. They are never logged to the console. If * pUM is NULL then the log is allowed through as if logEnable * was turned on. */ if (pUM && !pUM->devParams.logEnable) { return; } /* if !pUM then let the log through */ va_start(argp, pFmt); vsnprintf(buf, sizeof(buf), pFmt, argp); va_end(argp); cmn_err(CE_NOTE, "!%s: %s", BnxeDevName(pUM), buf); } void BnxeLogWarn(void * pDev, char * pFmt, ...) { um_device_t * pUM = (um_device_t *)pDev; char buf[BNXE_LOG_LEN]; va_list argp; /* * Warning message are always logged to syslog. They are * never logged to the console. */ va_start(argp, pFmt); vsnprintf(buf, sizeof(buf), pFmt, argp); va_end(argp); cmn_err(CE_WARN, "!%s: %s", BnxeDevName(pUM), buf); } #ifdef DBG void BnxeLogDbg(void * pDev, char * pFmt, ...) { um_device_t * pUM = (um_device_t *)pDev; char buf[BNXE_LOG_LEN]; va_list argp; /* * Debug message are always logged to syslog. They are * never logged to the console. Debug messages are only * available when the DEBUG compile time flag is turned on. */ va_start(argp, pFmt); vsnprintf(buf, sizeof(buf), pFmt, argp); va_end(argp); cmn_err(CE_WARN, "!%s: %s", BnxeDevName(pUM), buf); } #endif /* DBG */ void BnxeDumpMem(um_device_t * pUM, char * pTag, u8_t * pMem, u32_t len) { char buf[256]; char c[32]; int xx; mutex_enter(&bnxeLoaderMutex); cmn_err(CE_WARN, "!%s ++++++++++++ %s", BnxeDevName(pUM), pTag); strcpy(buf, "!** 000: "); for (xx = 0; xx < len; xx++) { if ((xx != 0) && (xx % 16 == 0)) { cmn_err(CE_WARN, buf); strcpy(buf, "!** "); snprintf(c, sizeof(c), "%03x", xx); strcat(buf, c); strcat(buf, ": "); } snprintf(c, sizeof(c), "%02x ", *pMem); strcat(buf, c); pMem++; } cmn_err(CE_WARN, buf); cmn_err(CE_WARN, "!%s ------------ %s", BnxeDevName(pUM), pTag); mutex_exit(&bnxeLoaderMutex); } void BnxeDumpPkt(um_device_t * pUM, char * pTag, mblk_t * pMblk, boolean_t contents) { char buf[256]; char c[32]; u8_t * pMem; int i, xx = 0; mutex_enter(&bnxeLoaderMutex); cmn_err(CE_WARN, "!%s ++++++++++++ %s", BnxeDevName(pUM), pTag); while (pMblk) { pMem = pMblk->b_rptr; strcpy(buf, "!** > "); snprintf(c, sizeof(c), "%03x", xx); strcat(buf, c); strcat(buf, ": "); if (contents) { for (i = 0; i < MBLKL(pMblk); i++) { if ((xx != 0) && (xx % 16 == 0)) { cmn_err(CE_WARN, buf); strcpy(buf, "!** "); snprintf(c, sizeof(c), "%03x", xx); strcat(buf, c); strcat(buf, ": "); } snprintf(c, sizeof(c), "%02x ", *pMem); strcat(buf, c); pMem++; xx++; } } else { snprintf(c, sizeof(c), "%d", (int)MBLKL(pMblk)); strcat(buf, c); xx += MBLKL(pMblk); } cmn_err(CE_WARN, buf); pMblk = pMblk->b_cont; } cmn_err(CE_WARN, "!%s ------------ %s", BnxeDevName(pUM), pTag); mutex_exit(&bnxeLoaderMutex); }