/* * *************************************************************************** * FILE: unifi_dbg.c * * PURPOSE: * Handle debug signals received from UniFi. * * Copyright (C) 2007-2008 by Cambridge Silicon Radio Ltd. * * Refer to LICENSE.txt included with this source code for details on * the license terms. * * *************************************************************************** */ #include "unifi_priv.h" /* * --------------------------------------------------------------------------- * debug_string_indication * debug_word16_indication * * Handlers for debug indications. * * Arguments: * priv Pointer to private context structure. * * Returns: * None. * --------------------------------------------------------------------------- */ void debug_string_indication(unifi_priv_t *priv, const unsigned char *extra, unsigned int extralen) { const unsigned int maxlen = sizeof(priv->last_debug_string) - 1; if (extralen > maxlen) { extralen = maxlen; } strncpy(priv->last_debug_string, extra, extralen); /* Make sure the string is terminated */ priv->last_debug_string[extralen] = '\0'; unifi_info(priv, "unifi debug: %s\n", priv->last_debug_string); } /* debug_string_indication() */ void debug_word16_indication(unifi_priv_t *priv, const CSR_SIGNAL *sigptr) { int i; if (priv == NULL) { unifi_info(priv, "Priv is NULL\n"); return; } for (i = 0; i < 16; i++) { priv->last_debug_word16[i] = sigptr->u.DebugWord16Indication.DebugWords[i]; } if (priv->last_debug_word16[0] == 0xFA11) { unsigned long ts; ts = (priv->last_debug_word16[6] << 16) | priv->last_debug_word16[5]; unifi_info(priv, " %10lu: %s fault %04x, arg %04x (x%d)\n", ts, priv->last_debug_word16[3] == 0x8000 ? "MAC" : priv->last_debug_word16[3] == 0x4000 ? "PHY" : "???", priv->last_debug_word16[1], priv->last_debug_word16[2], priv->last_debug_word16[4]); } else if (priv->last_debug_word16[0] != 0xDBAC) /* suppress SDL Trace output (note: still available to unicli). */ { unifi_info(priv, "unifi debug: %04X %04X %04X %04X %04X %04X %04X %04X\n", priv->last_debug_word16[0], priv->last_debug_word16[1], priv->last_debug_word16[2], priv->last_debug_word16[3], priv->last_debug_word16[4], priv->last_debug_word16[5], priv->last_debug_word16[6], priv->last_debug_word16[7]); unifi_info(priv, " %04X %04X %04X %04X %04X %04X %04X %04X\n", priv->last_debug_word16[8], priv->last_debug_word16[9], priv->last_debug_word16[10], priv->last_debug_word16[11], priv->last_debug_word16[12], priv->last_debug_word16[13], priv->last_debug_word16[14], priv->last_debug_word16[15]); } } /* debug_word16_indication() */ void debug_generic_indication(unifi_priv_t *priv, const CSR_SIGNAL *sigptr) { unifi_info(priv, "debug: %04X %04X %04X %04X %04X %04X %04X %04X\n", sigptr->u.DebugGenericIndication.DebugWords[0], sigptr->u.DebugGenericIndication.DebugWords[1], sigptr->u.DebugGenericIndication.DebugWords[2], sigptr->u.DebugGenericIndication.DebugWords[3], sigptr->u.DebugGenericIndication.DebugWords[4], sigptr->u.DebugGenericIndication.DebugWords[5], sigptr->u.DebugGenericIndication.DebugWords[6], sigptr->u.DebugGenericIndication.DebugWords[7]); } /* debug_generic_indication() */