summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsruffell <sruffell@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2009-01-05 19:21:16 +0000
committersruffell <sruffell@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2009-01-05 19:21:16 +0000
commitfb28ed9ed847fa846b539db8a37e6e99d06bf0a7 (patch)
tree88bb173e842df011974db90dbcf8caed24813b22
parent119214b1ddc94cb8f932caa7d629fffd94ee1a4e (diff)
Print more information to the kernel log when the transcoder sends us a
diagnostic message. git-svn-id: http://svn.digium.com/svn/zaptel/branches/1.4@4605 5390a7c7-147a-4af0-8ec9-7488f05a26cb
-rw-r--r--kernel/wctc4xxp/base.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/kernel/wctc4xxp/base.c b/kernel/wctc4xxp/base.c
index 4ba40e6..8946940 100644
--- a/kernel/wctc4xxp/base.c
+++ b/kernel/wctc4xxp/base.c
@@ -258,6 +258,7 @@ struct csm_create_channel_cmd {
/* Supervisor function codes */
#define SUPVSR_CREATE_CHANNEL 0x0010
+#define MONITOR_LIVE_INDICATION_TYPE 0x75
#define CONFIG_CHANGE_TYPE 0x00
#define CONFIG_DEVICE_CLASS 0x06
@@ -1875,6 +1876,38 @@ is_response(const struct csm_encaps_hdr *hdr)
return ((0x02 == hdr->type) || (0x04 == hdr->type)) ? 1 : 0;
}
+static void
+print_command(struct wcdte *wc, const struct tcb *cmd)
+{
+ int i, curlength;
+ const struct csm_encaps_hdr *hdr = cmd->data;
+ char *buffer;
+ const int BUFFER_SIZE = 1024;
+ int parameters = ((hdr->length - 8)/sizeof(__le16));
+
+ buffer = kzalloc(BUFFER_SIZE + 1, GFP_ATOMIC);
+ if (!buffer) {
+ DTE_PRINTK(DEBUG, "Failed print_command\n");
+ return;
+ }
+ curlength = snprintf(buffer, BUFFER_SIZE,
+ "opcode: %04x seq: %02x control: %02x "
+ "channel: %04x ", be16_to_cpu(hdr->op_code),
+ hdr->seq_num, hdr->control, be16_to_cpu(hdr->channel));
+ curlength += snprintf(buffer + curlength, BUFFER_SIZE - curlength,
+ "length: %02x index: %02x type: %02x "
+ "class: %02x function: %04x",
+ hdr->length, hdr->index, hdr->type, hdr->class,
+ le16_to_cpu(hdr->function));
+ for (i = 0; i < parameters; ++i) {
+ curlength += snprintf(buffer + curlength,
+ BUFFER_SIZE - curlength, " %04x",
+ le16_to_cpu(hdr->params[i]));
+ }
+ DTE_PRINTK(DEBUG, "%s\n", buffer);
+ kfree(buffer);
+}
+
static void
receive_csm_encaps_packet(struct wcdte *wc, struct tcb *cmd)
{
@@ -1911,6 +1944,10 @@ receive_csm_encaps_packet(struct wcdte *wc, struct tcb *cmd)
wake_up(&wc->waitq);
}
free_cmd(cmd);
+ } else if (MONITOR_LIVE_INDICATION_TYPE == hdr->type) {
+ DTE_PRINTK(WARNING, "Received diagnostic message:\n");
+ print_command(wc, cmd);
+ free_cmd(cmd);
} else {
DTE_PRINTK(WARNING, "Unknown command type received. %02x\n", hdr->type);
free_cmd(cmd);