blob: 38d57085a26a9dfa17e916ba70fd2dacfa1cf107 [file] [log] [blame]
/*
* ***************************************************************************
* 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() */