diff options
author | Andy Walls <awalls@radix.net> | 2009-01-01 10:35:06 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-03-30 11:42:24 -0400 |
commit | 50299994181b835e5a6ee2882df2ee07e7fb4491 (patch) | |
tree | 10a76d566ed810542c2acdc1dd33aeddf9cdd216 /drivers/media/video/cx18/cx18-mailbox.c | |
parent | 903bfeac50ecc7725db606c19edbbc93966772c2 (diff) |
V4L/DVB (10275): cx18: Additional debug to display outgoing mailbox parameters
Added debug display of outgoing mailbox arguments. Fixed a minor problem
with display of stale incoming mailbox contents, when user was not looking for
debug warnings.
Signed-off-by: Andy Walls <awalls@radix.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/cx18/cx18-mailbox.c')
-rw-r--r-- | drivers/media/video/cx18/cx18-mailbox.c | 42 |
1 files changed, 30 insertions, 12 deletions
diff --git a/drivers/media/video/cx18/cx18-mailbox.c b/drivers/media/video/cx18/cx18-mailbox.c index de5e723fdf44..89c033112e1f 100644 --- a/drivers/media/video/cx18/cx18-mailbox.c +++ b/drivers/media/video/cx18/cx18-mailbox.c | |||
@@ -98,21 +98,30 @@ static const struct cx18_api_info *find_api_info(u32 cmd) | |||
98 | return NULL; | 98 | return NULL; |
99 | } | 99 | } |
100 | 100 | ||
101 | static void dump_mb(struct cx18 *cx, struct cx18_mailbox *mb, char *name) | 101 | /* Call with buf of n*11+1 bytes */ |
102 | static char *u32arr2hex(u32 data[], int n, char *buf) | ||
102 | { | 103 | { |
103 | char argstr[MAX_MB_ARGUMENTS*11+1]; | ||
104 | char *p; | 104 | char *p; |
105 | int i; | 105 | int i; |
106 | 106 | ||
107 | for (i = 0, p = buf; i < n; i++, p += 11) { | ||
108 | /* kernel snprintf() appends '\0' always */ | ||
109 | snprintf(p, 12, " %#010x", data[i]); | ||
110 | } | ||
111 | *p = '\0'; | ||
112 | return buf; | ||
113 | } | ||
114 | |||
115 | static void dump_mb(struct cx18 *cx, struct cx18_mailbox *mb, char *name) | ||
116 | { | ||
117 | char argstr[MAX_MB_ARGUMENTS*11+1]; | ||
118 | |||
107 | if (!(cx18_debug & CX18_DBGFLG_API)) | 119 | if (!(cx18_debug & CX18_DBGFLG_API)) |
108 | return; | 120 | return; |
109 | 121 | ||
110 | for (i = 0, p = argstr; i < MAX_MB_ARGUMENTS; i++, p += 11) { | ||
111 | /* kernel snprintf() appends '\0' always */ | ||
112 | snprintf(p, 12, " %#010x", mb->args[i]); | ||
113 | } | ||
114 | CX18_DEBUG_API("%s: req %#010x ack %#010x cmd %#010x err %#010x args%s" | 122 | CX18_DEBUG_API("%s: req %#010x ack %#010x cmd %#010x err %#010x args%s" |
115 | "\n", name, mb->request, mb->ack, mb->cmd, mb->error, argstr); | 123 | "\n", name, mb->request, mb->ack, mb->cmd, mb->error, |
124 | u32arr2hex(mb->args, MAX_MB_ARGUMENTS, argstr)); | ||
116 | } | 125 | } |
117 | 126 | ||
118 | 127 | ||
@@ -439,7 +448,8 @@ void cx18_api_epu_cmd_irq(struct cx18 *cx, int rpu) | |||
439 | "incoming %s to EPU mailbox (sequence no. %u)" | 448 | "incoming %s to EPU mailbox (sequence no. %u)" |
440 | "\n", | 449 | "\n", |
441 | rpu_str[rpu], rpu_str[rpu], order_mb->request); | 450 | rpu_str[rpu], rpu_str[rpu], order_mb->request); |
442 | dump_mb(cx, order_mb, "incoming"); | 451 | if (cx18_debug & CX18_DBGFLG_WARN) |
452 | dump_mb(cx, order_mb, "incoming"); | ||
443 | order->flags = CX18_F_EWO_MB_STALE_UPON_RECEIPT; | 453 | order->flags = CX18_F_EWO_MB_STALE_UPON_RECEIPT; |
444 | } | 454 | } |
445 | 455 | ||
@@ -468,16 +478,24 @@ static int cx18_api_call(struct cx18 *cx, u32 cmd, int args, u32 data[]) | |||
468 | struct mutex *mb_lock; | 478 | struct mutex *mb_lock; |
469 | long int timeout, ret; | 479 | long int timeout, ret; |
470 | int i; | 480 | int i; |
481 | char argstr[MAX_MB_ARGUMENTS*11+1]; | ||
471 | 482 | ||
472 | if (info == NULL) { | 483 | if (info == NULL) { |
473 | CX18_WARN("unknown cmd %x\n", cmd); | 484 | CX18_WARN("unknown cmd %x\n", cmd); |
474 | return -EINVAL; | 485 | return -EINVAL; |
475 | } | 486 | } |
476 | 487 | ||
477 | if (cmd == CX18_CPU_DE_SET_MDL) | 488 | if (cx18_debug & CX18_DBGFLG_API) { /* only call u32arr2hex if needed */ |
478 | CX18_DEBUG_HI_API("%s\n", info->name); | 489 | if (cmd == CX18_CPU_DE_SET_MDL) { |
479 | else | 490 | if (cx18_debug & CX18_DBGFLG_HIGHVOL) |
480 | CX18_DEBUG_API("%s\n", info->name); | 491 | CX18_DEBUG_HI_API("%s\tcmd %#010x args%s\n", |
492 | info->name, cmd, | ||
493 | u32arr2hex(data, args, argstr)); | ||
494 | } else | ||
495 | CX18_DEBUG_API("%s\tcmd %#010x args%s\n", | ||
496 | info->name, cmd, | ||
497 | u32arr2hex(data, args, argstr)); | ||
498 | } | ||
481 | 499 | ||
482 | switch (info->rpu) { | 500 | switch (info->rpu) { |
483 | case APU: | 501 | case APU: |