Commit 3b5df8ea authored by Andy Walls's avatar Andy Walls Committed by Mauro Carvalho Chehab

V4L/DVB (8774): cx18: Have CX23418 release buffers at end of capture.

cx18: Have CX23418 release buffers at end of capture.  The CX23418 reuses task
handles so we need to have it release the buffers associated with a task handle
at the end of a capture.  If we don't, buffer ids used for one type of stream
in the driver (MPEG, TS, PCM), could be used for another type of stream by the
CX23418, if a previously used handle is assigned to a different type of stream.
The driver would drop valid buffers when this happened.
Signed-off-by: default avatarAndy Walls <awalls@radix.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent d3c5e707
...@@ -82,6 +82,7 @@ static const struct cx18_api_info api_info[] = { ...@@ -82,6 +82,7 @@ static const struct cx18_api_info api_info[] = {
API_ENTRY(CPU, CX18_CPU_DE_SET_MDL_ACK, 0), API_ENTRY(CPU, CX18_CPU_DE_SET_MDL_ACK, 0),
API_ENTRY(CPU, CX18_CPU_DE_SET_MDL, API_FAST), API_ENTRY(CPU, CX18_CPU_DE_SET_MDL, API_FAST),
API_ENTRY(CPU, CX18_APU_RESETAI, API_FAST), API_ENTRY(CPU, CX18_APU_RESETAI, API_FAST),
API_ENTRY(CPU, CX18_CPU_DE_RELEASE_MDL, 0),
API_ENTRY(0, 0, 0), API_ENTRY(0, 0, 0),
}; };
......
...@@ -488,7 +488,14 @@ int cx18_start_v4l2_encode_stream(struct cx18_stream *s) ...@@ -488,7 +488,14 @@ int cx18_start_v4l2_encode_stream(struct cx18_stream *s)
/* begin_capture */ /* begin_capture */
if (cx18_vapi(cx, CX18_CPU_CAPTURE_START, 1, s->handle)) { if (cx18_vapi(cx, CX18_CPU_CAPTURE_START, 1, s->handle)) {
CX18_DEBUG_WARN("Error starting capture!\n"); CX18_DEBUG_WARN("Error starting capture!\n");
/* Ensure we're really not capturing before releasing MDLs */
if (s->type == CX18_ENC_STREAM_TYPE_MPG)
cx18_vapi(cx, CX18_CPU_CAPTURE_STOP, 2, s->handle, 1);
else
cx18_vapi(cx, CX18_CPU_CAPTURE_STOP, 1, s->handle);
cx18_vapi(cx, CX18_CPU_DE_RELEASE_MDL, 1, s->handle);
cx18_vapi(cx, CX18_DESTROY_TASK, 1, s->handle); cx18_vapi(cx, CX18_DESTROY_TASK, 1, s->handle);
/* FIXME - clean-up DSP0_INT mask, i_flags, s_flags, etc. */
return -EINVAL; return -EINVAL;
} }
...@@ -540,6 +547,9 @@ int cx18_stop_v4l2_encode_stream(struct cx18_stream *s, int gop_end) ...@@ -540,6 +547,9 @@ int cx18_stop_v4l2_encode_stream(struct cx18_stream *s, int gop_end)
CX18_INFO("ignoring gop_end: not (yet?) supported by the firmware\n"); CX18_INFO("ignoring gop_end: not (yet?) supported by the firmware\n");
} }
/* Tell the CX23418 it can't use our buffers anymore */
cx18_vapi(cx, CX18_CPU_DE_RELEASE_MDL, 1, s->handle);
if (s->type != CX18_ENC_STREAM_TYPE_TS) if (s->type != CX18_ENC_STREAM_TYPE_TS)
atomic_dec(&cx->ana_capturing); atomic_dec(&cx->ana_capturing);
atomic_dec(&cx->tot_capturing); atomic_dec(&cx->tot_capturing);
......
...@@ -351,7 +351,7 @@ ...@@ -351,7 +351,7 @@
Descriptor Lists to the driver Descriptor Lists to the driver
IN[0] - Task handle. Handle of the task to start IN[0] - Task handle. Handle of the task to start
ReturnCode - One of the ERR_DE_... */ ReturnCode - One of the ERR_DE_... */
/* #define CX18_CPU_DE_ReleaseMDL (CPU_CMD_MASK_DE | 0x0006) */ #define CX18_CPU_DE_RELEASE_MDL (CPU_CMD_MASK_DE | 0x0006)
/* Description: This command signals the cpu that the dat buffer has been /* Description: This command signals the cpu that the dat buffer has been
consumed and ready for re-use. consumed and ready for re-use.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment