Hans,
Can you shed some light on what this error code 0x20100004 means in the
following context? The cx23418.h and cx18-mailbox.h files don't make it
obvious, aside from saying it really is a failure since (err & 0xff) !=
0 and that its of the type "ERR_DE_...".
... cx18_start_v4l2_encode_stream() causes these lines for the MPEG stream
Mar 8 13:45:11 palomino kernel: cx180 api: CX18_CPU_DE_SET_MDL
Mar 8 13:45:11 palomino kernel: cx180 api: req: 0x0000005d args: 0x00000000
0x00dc0ea0 0x00000001 0x0000003e 0x00008000
Mar 8 13:45:11 palomino kernel: cx180 api: ack: 0x0000005d args: 0x00000000
0x00dc0ea0 0x00000001 0x0000003e 0x00008000 0x00000000 error: 0x00000000
Mar 8 13:45:11 palomino kernel: cx180 api: CX18_CPU_DE_SET_MDL
Mar 8 13:45:11 palomino kernel: cx180 api: req: 0x0000005e args: 0x00000000
0x00dc0ea8 0x00000001 0x0000003f 0x00008000
Mar 8 13:45:11 palomino kernel: cx180 api: ack: 0x0000005e args: 0x00000000
0x00dc0ea8 0x00000001 0x0000003f 0x00008000 0x00000000 error: 0x20100004
Mar 8 13:45:11 palomino kernel: cx18-0 api: CX18_CPU_CAPTURE_START
The 64th attempt to set a 1 buffer MDL before starting the capture
always errors out, and the encoder doesn't appear to use that buffer id
during the capture.
(The attached diff can be used if you wish to try and duplicate the
debug output.)
Thanks,
Andy
--- cx18-2df0b7cc7a5c/linux/drivers/media/video/cx18/cx18-mailbox.c.orig 2008-03-08 12:45:40.000000000 -0500
+++ cx18-2df0b7cc7a5c/linux/drivers/media/video/cx18/cx18-mailbox.c 2008-03-08 13:37:21.000000000 -0500
@@ -190,6 +190,7 @@ static int cx18_api_call(struct cx18 *cx
int cnt = 0;
int sig = 0;
int i;
+ char debugstrs [MAX_MB_ARGUMENTS+2][24];
if (info == NULL) {
CX18_WARN("unknown cmd %x\n", cmd);
@@ -210,8 +211,23 @@ static int cx18_api_call(struct cx18 *cx
oldreq = req - 1;
writel(cmd, &mb->cmd);
+ snprintf(debugstrs[0], 24, "req: %#010x args: ", req);
for (i = 0; i < args; i++)
+ {
+ snprintf(debugstrs[i+1], 24, "%#010x ", data[i]);
writel(data[i], &mb->args[i]);
+ }
+ for (; i < MAX_MB_ARGUMENTS; i++)
+ debugstrs[i+1][0] = '\0';
+ debugstrs[i+1][0] = '\0';
+ if (cmd == CX18_CPU_DE_SET_MDL)
+ CX18_DEBUG_HI_API("%s%s%s%s%s%s%s%s\n",
+ debugstrs[0], debugstrs[1], debugstrs[2], debugstrs[3],
+ debugstrs[4], debugstrs[5], debugstrs[6], debugstrs[7]);
+ else
+ CX18_DEBUG_API("%s%s%s%s%s%s%s%s\n",
+ debugstrs[0], debugstrs[1], debugstrs[2], debugstrs[3],
+ debugstrs[4], debugstrs[5], debugstrs[6], debugstrs[7]);
writel(0, &mb->error);
writel(req, &mb->request);
@@ -238,9 +254,24 @@ static int cx18_api_call(struct cx18 *cx
CX18_ERR("mb %s failed\n", info->name);
return -EINVAL;
}
+
+ snprintf(debugstrs[0], 24, "ack: %#010x args: ", readl(&mb->ack));
for (i = 0; i < MAX_MB_ARGUMENTS; i++)
+ {
data[i] = readl(&mb->args[i]);
+ snprintf(debugstrs[i+1], 24, "%#010x ", data[i]);
+ }
err = readl(&mb->error);
+ snprintf(debugstrs[i+1], 24, "error: %#010x", err);
+ if (cmd == CX18_CPU_DE_SET_MDL)
+ CX18_DEBUG_HI_API("%s%s%s%s%s%s%s%s\n",
+ debugstrs[0], debugstrs[1], debugstrs[2], debugstrs[3],
+ debugstrs[4], debugstrs[5], debugstrs[6], debugstrs[7]);
+ else
+ CX18_DEBUG_API("%s%s%s%s%s%s%s%s\n",
+ debugstrs[0], debugstrs[1], debugstrs[2], debugstrs[3],
+ debugstrs[4], debugstrs[5], debugstrs[6], debugstrs[7]);
+
if (!in_atomic() && (info->flags & API_SLOW))
cx18_msleep_timeout(300, 0);
return 0;
_______________________________________________
ivtv-devel mailing list
[email protected]
http://ivtvdriver.org/mailman/listinfo/ivtv-devel