xref: /linux/drivers/media/pci/ivtv/ivtv-streams.c (revision b889fcf63cb62e7fdb7816565e28f44dbe4a76a5)
1 /*
2     init/start/stop/exit stream functions
3     Copyright (C) 2003-2004  Kevin Thayer <nufan_wfk at yahoo.com>
4     Copyright (C) 2004  Chris Kennedy <c@groovy.org>
5     Copyright (C) 2005-2007  Hans Verkuil <hverkuil@xs4all.nl>
6 
7     This program is free software; you can redistribute it and/or modify
8     it under the terms of the GNU General Public License as published by
9     the Free Software Foundation; either version 2 of the License, or
10     (at your option) any later version.
11 
12     This program is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15     GNU General Public License for more details.
16 
17     You should have received a copy of the GNU General Public License
18     along with this program; if not, write to the Free Software
19     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  */
21 
22 /* License: GPL
23  * Author: Kevin Thayer <nufan_wfk at yahoo dot com>
24  *
25  * This file will hold API related functions, both internal (firmware api)
26  * and external (v4l2, etc)
27  *
28  * -----
29  * MPG600/MPG160 support by  T.Adachi <tadachi@tadachi-net.com>
30  *                      and Takeru KOMORIYA<komoriya@paken.org>
31  *
32  * AVerMedia M179 GPIO info by Chris Pinkham <cpinkham@bc2va.org>
33  *                using information provided by Jiun-Kuei Jung @ AVerMedia.
34  */
35 
36 #include "ivtv-driver.h"
37 #include "ivtv-fileops.h"
38 #include "ivtv-queue.h"
39 #include "ivtv-mailbox.h"
40 #include "ivtv-ioctl.h"
41 #include "ivtv-irq.h"
42 #include "ivtv-yuv.h"
43 #include "ivtv-cards.h"
44 #include "ivtv-streams.h"
45 #include "ivtv-firmware.h"
46 #include <media/v4l2-event.h>
47 
48 static const struct v4l2_file_operations ivtv_v4l2_enc_fops = {
49 	.owner = THIS_MODULE,
50 	.read = ivtv_v4l2_read,
51 	.write = ivtv_v4l2_write,
52 	.open = ivtv_v4l2_open,
53 	.unlocked_ioctl = video_ioctl2,
54 	.release = ivtv_v4l2_close,
55 	.poll = ivtv_v4l2_enc_poll,
56 };
57 
58 static const struct v4l2_file_operations ivtv_v4l2_dec_fops = {
59 	.owner = THIS_MODULE,
60 	.read = ivtv_v4l2_read,
61 	.write = ivtv_v4l2_write,
62 	.open = ivtv_v4l2_open,
63 	.unlocked_ioctl = video_ioctl2,
64 	.release = ivtv_v4l2_close,
65 	.poll = ivtv_v4l2_dec_poll,
66 };
67 
68 static const struct v4l2_file_operations ivtv_v4l2_radio_fops = {
69 	.owner = THIS_MODULE,
70 	.open = ivtv_v4l2_open,
71 	.unlocked_ioctl = video_ioctl2,
72 	.release = ivtv_v4l2_close,
73 	.poll = ivtv_v4l2_enc_poll,
74 };
75 
76 #define IVTV_V4L2_DEC_MPG_OFFSET  16	/* offset from 0 to register decoder mpg v4l2 minors on */
77 #define IVTV_V4L2_ENC_PCM_OFFSET  24	/* offset from 0 to register pcm v4l2 minors on */
78 #define IVTV_V4L2_ENC_YUV_OFFSET  32	/* offset from 0 to register yuv v4l2 minors on */
79 #define IVTV_V4L2_DEC_YUV_OFFSET  48	/* offset from 0 to register decoder yuv v4l2 minors on */
80 #define IVTV_V4L2_DEC_VBI_OFFSET   8	/* offset from 0 to register decoder vbi input v4l2 minors on */
81 #define IVTV_V4L2_DEC_VOUT_OFFSET 16	/* offset from 0 to register vbi output v4l2 minors on */
82 
83 static struct {
84 	const char *name;
85 	int vfl_type;
86 	int num_offset;
87 	int dma, pio;
88 	u32 v4l2_caps;
89 	const struct v4l2_file_operations *fops;
90 } ivtv_stream_info[] = {
91 	{	/* IVTV_ENC_STREAM_TYPE_MPG */
92 		"encoder MPG",
93 		VFL_TYPE_GRABBER, 0,
94 		PCI_DMA_FROMDEVICE, 0,
95 		V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER |
96 			V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
97 		&ivtv_v4l2_enc_fops
98 	},
99 	{	/* IVTV_ENC_STREAM_TYPE_YUV */
100 		"encoder YUV",
101 		VFL_TYPE_GRABBER, IVTV_V4L2_ENC_YUV_OFFSET,
102 		PCI_DMA_FROMDEVICE, 0,
103 		V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER |
104 			V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
105 		&ivtv_v4l2_enc_fops
106 	},
107 	{	/* IVTV_ENC_STREAM_TYPE_VBI */
108 		"encoder VBI",
109 		VFL_TYPE_VBI, 0,
110 		PCI_DMA_FROMDEVICE, 0,
111 		V4L2_CAP_VBI_CAPTURE | V4L2_CAP_SLICED_VBI_CAPTURE | V4L2_CAP_TUNER |
112 			V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
113 		&ivtv_v4l2_enc_fops
114 	},
115 	{	/* IVTV_ENC_STREAM_TYPE_PCM */
116 		"encoder PCM",
117 		VFL_TYPE_GRABBER, IVTV_V4L2_ENC_PCM_OFFSET,
118 		PCI_DMA_FROMDEVICE, 0,
119 		V4L2_CAP_TUNER | V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
120 		&ivtv_v4l2_enc_fops
121 	},
122 	{	/* IVTV_ENC_STREAM_TYPE_RAD */
123 		"encoder radio",
124 		VFL_TYPE_RADIO, 0,
125 		PCI_DMA_NONE, 1,
126 		V4L2_CAP_RADIO | V4L2_CAP_TUNER,
127 		&ivtv_v4l2_radio_fops
128 	},
129 	{	/* IVTV_DEC_STREAM_TYPE_MPG */
130 		"decoder MPG",
131 		VFL_TYPE_GRABBER, IVTV_V4L2_DEC_MPG_OFFSET,
132 		PCI_DMA_TODEVICE, 0,
133 		V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
134 		&ivtv_v4l2_dec_fops
135 	},
136 	{	/* IVTV_DEC_STREAM_TYPE_VBI */
137 		"decoder VBI",
138 		VFL_TYPE_VBI, IVTV_V4L2_DEC_VBI_OFFSET,
139 		PCI_DMA_NONE, 1,
140 		V4L2_CAP_SLICED_VBI_CAPTURE | V4L2_CAP_READWRITE,
141 		&ivtv_v4l2_enc_fops
142 	},
143 	{	/* IVTV_DEC_STREAM_TYPE_VOUT */
144 		"decoder VOUT",
145 		VFL_TYPE_VBI, IVTV_V4L2_DEC_VOUT_OFFSET,
146 		PCI_DMA_NONE, 1,
147 		V4L2_CAP_SLICED_VBI_OUTPUT | V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
148 		&ivtv_v4l2_dec_fops
149 	},
150 	{	/* IVTV_DEC_STREAM_TYPE_YUV */
151 		"decoder YUV",
152 		VFL_TYPE_GRABBER, IVTV_V4L2_DEC_YUV_OFFSET,
153 		PCI_DMA_TODEVICE, 0,
154 		V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
155 		&ivtv_v4l2_dec_fops
156 	}
157 };
158 
159 static void ivtv_stream_init(struct ivtv *itv, int type)
160 {
161 	struct ivtv_stream *s = &itv->streams[type];
162 	struct video_device *vdev = s->vdev;
163 
164 	/* we need to keep vdev, so restore it afterwards */
165 	memset(s, 0, sizeof(*s));
166 	s->vdev = vdev;
167 
168 	/* initialize ivtv_stream fields */
169 	s->itv = itv;
170 	s->type = type;
171 	s->name = ivtv_stream_info[type].name;
172 	s->caps = ivtv_stream_info[type].v4l2_caps;
173 
174 	if (ivtv_stream_info[type].pio)
175 		s->dma = PCI_DMA_NONE;
176 	else
177 		s->dma = ivtv_stream_info[type].dma;
178 	s->buf_size = itv->stream_buf_size[type];
179 	if (s->buf_size)
180 		s->buffers = (itv->options.kilobytes[type] * 1024 + s->buf_size - 1) / s->buf_size;
181 	spin_lock_init(&s->qlock);
182 	init_waitqueue_head(&s->waitq);
183 	s->sg_handle = IVTV_DMA_UNMAPPED;
184 	ivtv_queue_init(&s->q_free);
185 	ivtv_queue_init(&s->q_full);
186 	ivtv_queue_init(&s->q_dma);
187 	ivtv_queue_init(&s->q_predma);
188 	ivtv_queue_init(&s->q_io);
189 }
190 
191 static int ivtv_prep_dev(struct ivtv *itv, int type)
192 {
193 	struct ivtv_stream *s = &itv->streams[type];
194 	int num_offset = ivtv_stream_info[type].num_offset;
195 	int num = itv->instance + ivtv_first_minor + num_offset;
196 
197 	/* These four fields are always initialized. If vdev == NULL, then
198 	   this stream is not in use. In that case no other fields but these
199 	   four can be used. */
200 	s->vdev = NULL;
201 	s->itv = itv;
202 	s->type = type;
203 	s->name = ivtv_stream_info[type].name;
204 
205 	/* Check whether the radio is supported */
206 	if (type == IVTV_ENC_STREAM_TYPE_RAD && !(itv->v4l2_cap & V4L2_CAP_RADIO))
207 		return 0;
208 	if (type >= IVTV_DEC_STREAM_TYPE_MPG && !(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
209 		return 0;
210 
211 	/* User explicitly selected 0 buffers for these streams, so don't
212 	   create them. */
213 	if (ivtv_stream_info[type].dma != PCI_DMA_NONE &&
214 	    itv->options.kilobytes[type] == 0) {
215 		IVTV_INFO("Disabled %s device\n", ivtv_stream_info[type].name);
216 		return 0;
217 	}
218 
219 	ivtv_stream_init(itv, type);
220 
221 	/* allocate and initialize the v4l2 video device structure */
222 	s->vdev = video_device_alloc();
223 	if (s->vdev == NULL) {
224 		IVTV_ERR("Couldn't allocate v4l2 video_device for %s\n", s->name);
225 		return -ENOMEM;
226 	}
227 
228 	snprintf(s->vdev->name, sizeof(s->vdev->name), "%s %s",
229 			itv->v4l2_dev.name, s->name);
230 
231 	s->vdev->num = num;
232 	s->vdev->v4l2_dev = &itv->v4l2_dev;
233 	if (ivtv_stream_info[type].v4l2_caps &
234 			(V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_SLICED_VBI_OUTPUT))
235 		s->vdev->vfl_dir = VFL_DIR_TX;
236 	s->vdev->fops = ivtv_stream_info[type].fops;
237 	s->vdev->ctrl_handler = itv->v4l2_dev.ctrl_handler;
238 	s->vdev->release = video_device_release;
239 	s->vdev->tvnorms = V4L2_STD_ALL;
240 	s->vdev->lock = &itv->serialize_lock;
241 	if (s->type == IVTV_DEC_STREAM_TYPE_VBI) {
242 		v4l2_disable_ioctl(s->vdev, VIDIOC_S_AUDIO);
243 		v4l2_disable_ioctl(s->vdev, VIDIOC_G_AUDIO);
244 		v4l2_disable_ioctl(s->vdev, VIDIOC_ENUMAUDIO);
245 		v4l2_disable_ioctl(s->vdev, VIDIOC_ENUMINPUT);
246 		v4l2_disable_ioctl(s->vdev, VIDIOC_S_INPUT);
247 		v4l2_disable_ioctl(s->vdev, VIDIOC_G_INPUT);
248 		v4l2_disable_ioctl(s->vdev, VIDIOC_S_FREQUENCY);
249 		v4l2_disable_ioctl(s->vdev, VIDIOC_G_FREQUENCY);
250 		v4l2_disable_ioctl(s->vdev, VIDIOC_S_TUNER);
251 		v4l2_disable_ioctl(s->vdev, VIDIOC_G_TUNER);
252 		v4l2_disable_ioctl(s->vdev, VIDIOC_S_STD);
253 	}
254 	set_bit(V4L2_FL_USE_FH_PRIO, &s->vdev->flags);
255 	ivtv_set_funcs(s->vdev);
256 	return 0;
257 }
258 
259 /* Initialize v4l2 variables and prepare v4l2 devices */
260 int ivtv_streams_setup(struct ivtv *itv)
261 {
262 	int type;
263 
264 	/* Setup V4L2 Devices */
265 	for (type = 0; type < IVTV_MAX_STREAMS; type++) {
266 		/* Prepare device */
267 		if (ivtv_prep_dev(itv, type))
268 			break;
269 
270 		if (itv->streams[type].vdev == NULL)
271 			continue;
272 
273 		/* Allocate Stream */
274 		if (ivtv_stream_alloc(&itv->streams[type]))
275 			break;
276 	}
277 	if (type == IVTV_MAX_STREAMS)
278 		return 0;
279 
280 	/* One or more streams could not be initialized. Clean 'em all up. */
281 	ivtv_streams_cleanup(itv, 0);
282 	return -ENOMEM;
283 }
284 
285 static int ivtv_reg_dev(struct ivtv *itv, int type)
286 {
287 	struct ivtv_stream *s = &itv->streams[type];
288 	int vfl_type = ivtv_stream_info[type].vfl_type;
289 	const char *name;
290 	int num;
291 
292 	if (s->vdev == NULL)
293 		return 0;
294 
295 	num = s->vdev->num;
296 	/* card number + user defined offset + device offset */
297 	if (type != IVTV_ENC_STREAM_TYPE_MPG) {
298 		struct ivtv_stream *s_mpg = &itv->streams[IVTV_ENC_STREAM_TYPE_MPG];
299 
300 		if (s_mpg->vdev)
301 			num = s_mpg->vdev->num + ivtv_stream_info[type].num_offset;
302 	}
303 	video_set_drvdata(s->vdev, s);
304 
305 	/* Register device. First try the desired minor, then any free one. */
306 	if (video_register_device_no_warn(s->vdev, vfl_type, num)) {
307 		IVTV_ERR("Couldn't register v4l2 device for %s (device node number %d)\n",
308 				s->name, num);
309 		video_device_release(s->vdev);
310 		s->vdev = NULL;
311 		return -ENOMEM;
312 	}
313 	name = video_device_node_name(s->vdev);
314 
315 	switch (vfl_type) {
316 	case VFL_TYPE_GRABBER:
317 		IVTV_INFO("Registered device %s for %s (%d kB)\n",
318 			name, s->name, itv->options.kilobytes[type]);
319 		break;
320 	case VFL_TYPE_RADIO:
321 		IVTV_INFO("Registered device %s for %s\n",
322 			name, s->name);
323 		break;
324 	case VFL_TYPE_VBI:
325 		if (itv->options.kilobytes[type])
326 			IVTV_INFO("Registered device %s for %s (%d kB)\n",
327 				name, s->name, itv->options.kilobytes[type]);
328 		else
329 			IVTV_INFO("Registered device %s for %s\n",
330 				name, s->name);
331 		break;
332 	}
333 	return 0;
334 }
335 
336 /* Register v4l2 devices */
337 int ivtv_streams_register(struct ivtv *itv)
338 {
339 	int type;
340 	int err = 0;
341 
342 	/* Register V4L2 devices */
343 	for (type = 0; type < IVTV_MAX_STREAMS; type++)
344 		err |= ivtv_reg_dev(itv, type);
345 
346 	if (err == 0)
347 		return 0;
348 
349 	/* One or more streams could not be initialized. Clean 'em all up. */
350 	ivtv_streams_cleanup(itv, 1);
351 	return -ENOMEM;
352 }
353 
354 /* Unregister v4l2 devices */
355 void ivtv_streams_cleanup(struct ivtv *itv, int unregister)
356 {
357 	int type;
358 
359 	/* Teardown all streams */
360 	for (type = 0; type < IVTV_MAX_STREAMS; type++) {
361 		struct video_device *vdev = itv->streams[type].vdev;
362 
363 		itv->streams[type].vdev = NULL;
364 		if (vdev == NULL)
365 			continue;
366 
367 		ivtv_stream_free(&itv->streams[type]);
368 		/* Unregister or release device */
369 		if (unregister)
370 			video_unregister_device(vdev);
371 		else
372 			video_device_release(vdev);
373 	}
374 }
375 
376 static void ivtv_vbi_setup(struct ivtv *itv)
377 {
378 	int raw = ivtv_raw_vbi(itv);
379 	u32 data[CX2341X_MBOX_MAX_DATA];
380 	int lines;
381 	int i;
382 
383 	/* Reset VBI */
384 	ivtv_vapi(itv, CX2341X_ENC_SET_VBI_LINE, 5, 0xffff , 0, 0, 0, 0);
385 
386 	/* setup VBI registers */
387 	if (raw)
388 		v4l2_subdev_call(itv->sd_video, vbi, s_raw_fmt, &itv->vbi.in.fmt.vbi);
389 	else
390 		v4l2_subdev_call(itv->sd_video, vbi, s_sliced_fmt, &itv->vbi.in.fmt.sliced);
391 
392 	/* determine number of lines and total number of VBI bytes.
393 	   A raw line takes 1443 bytes: 2 * 720 + 4 byte frame header - 1
394 	   The '- 1' byte is probably an unused U or V byte. Or something...
395 	   A sliced line takes 51 bytes: 4 byte frame header, 4 byte internal
396 	   header, 42 data bytes + checksum (to be confirmed) */
397 	if (raw) {
398 		lines = itv->vbi.count * 2;
399 	} else {
400 		lines = itv->is_60hz ? 24 : 38;
401 		if (itv->is_60hz && (itv->hw_flags & IVTV_HW_CX25840))
402 			lines += 2;
403 	}
404 
405 	itv->vbi.enc_size = lines * (raw ? itv->vbi.raw_size : itv->vbi.sliced_size);
406 
407 	/* Note: sliced vs raw flag doesn't seem to have any effect
408 	   TODO: check mode (0x02) value with older ivtv versions. */
409 	data[0] = raw | 0x02 | (0xbd << 8);
410 
411 	/* Every X number of frames a VBI interrupt arrives (frames as in 25 or 30 fps) */
412 	data[1] = 1;
413 	/* The VBI frames are stored in a ringbuffer with this size (with a VBI frame as unit) */
414 	data[2] = raw ? 4 : 4 * (itv->vbi.raw_size / itv->vbi.enc_size);
415 	/* The start/stop codes determine which VBI lines end up in the raw VBI data area.
416 	   The codes are from table 24 in the saa7115 datasheet. Each raw/sliced/video line
417 	   is framed with codes FF0000XX where XX is the SAV/EAV (Start/End of Active Video)
418 	   code. These values for raw VBI are obtained from a driver disassembly. The sliced
419 	   start/stop codes was deduced from this, but they do not appear in the driver.
420 	   Other code pairs that I found are: 0x250E6249/0x13545454 and 0x25256262/0x38137F54.
421 	   However, I have no idea what these values are for. */
422 	if (itv->hw_flags & IVTV_HW_CX25840) {
423 		/* Setup VBI for the cx25840 digitizer */
424 		if (raw) {
425 			data[3] = 0x20602060;
426 			data[4] = 0x30703070;
427 		} else {
428 			data[3] = 0xB0F0B0F0;
429 			data[4] = 0xA0E0A0E0;
430 		}
431 		/* Lines per frame */
432 		data[5] = lines;
433 		/* bytes per line */
434 		data[6] = (raw ? itv->vbi.raw_size : itv->vbi.sliced_size);
435 	} else {
436 		/* Setup VBI for the saa7115 digitizer */
437 		if (raw) {
438 			data[3] = 0x25256262;
439 			data[4] = 0x387F7F7F;
440 		} else {
441 			data[3] = 0xABABECEC;
442 			data[4] = 0xB6F1F1F1;
443 		}
444 		/* Lines per frame */
445 		data[5] = lines;
446 		/* bytes per line */
447 		data[6] = itv->vbi.enc_size / lines;
448 	}
449 
450 	IVTV_DEBUG_INFO(
451 		"Setup VBI API header 0x%08x pkts %d buffs %d ln %d sz %d\n",
452 			data[0], data[1], data[2], data[5], data[6]);
453 
454 	ivtv_api(itv, CX2341X_ENC_SET_VBI_CONFIG, 7, data);
455 
456 	/* returns the VBI encoder memory area. */
457 	itv->vbi.enc_start = data[2];
458 	itv->vbi.fpi = data[0];
459 	if (!itv->vbi.fpi)
460 		itv->vbi.fpi = 1;
461 
462 	IVTV_DEBUG_INFO("Setup VBI start 0x%08x frames %d fpi %d\n",
463 		itv->vbi.enc_start, data[1], itv->vbi.fpi);
464 
465 	/* select VBI lines.
466 	   Note that the sliced argument seems to have no effect. */
467 	for (i = 2; i <= 24; i++) {
468 		int valid;
469 
470 		if (itv->is_60hz) {
471 			valid = i >= 10 && i < 22;
472 		} else {
473 			valid = i >= 6 && i < 24;
474 		}
475 		ivtv_vapi(itv, CX2341X_ENC_SET_VBI_LINE, 5, i - 1,
476 				valid, 0 , 0, 0);
477 		ivtv_vapi(itv, CX2341X_ENC_SET_VBI_LINE, 5, (i - 1) | 0x80000000,
478 				valid, 0, 0, 0);
479 	}
480 
481 	/* Remaining VBI questions:
482 	   - Is it possible to select particular VBI lines only for inclusion in the MPEG
483 	   stream? Currently you can only get the first X lines.
484 	   - Is mixed raw and sliced VBI possible?
485 	   - What's the meaning of the raw/sliced flag?
486 	   - What's the meaning of params 2, 3 & 4 of the Select VBI command? */
487 }
488 
489 int ivtv_start_v4l2_encode_stream(struct ivtv_stream *s)
490 {
491 	u32 data[CX2341X_MBOX_MAX_DATA];
492 	struct ivtv *itv = s->itv;
493 	int captype = 0, subtype = 0;
494 	int enable_passthrough = 0;
495 
496 	if (s->vdev == NULL)
497 		return -EINVAL;
498 
499 	IVTV_DEBUG_INFO("Start encoder stream %s\n", s->name);
500 
501 	switch (s->type) {
502 	case IVTV_ENC_STREAM_TYPE_MPG:
503 		captype = 0;
504 		subtype = 3;
505 
506 		/* Stop Passthrough */
507 		if (itv->output_mode == OUT_PASSTHROUGH) {
508 			ivtv_passthrough_mode(itv, 0);
509 			enable_passthrough = 1;
510 		}
511 		itv->mpg_data_received = itv->vbi_data_inserted = 0;
512 		itv->dualwatch_jiffies = jiffies;
513 		itv->dualwatch_stereo_mode = v4l2_ctrl_g_ctrl(itv->cxhdl.audio_mode);
514 		itv->search_pack_header = 0;
515 		break;
516 
517 	case IVTV_ENC_STREAM_TYPE_YUV:
518 		if (itv->output_mode == OUT_PASSTHROUGH) {
519 			captype = 2;
520 			subtype = 11;	/* video+audio+decoder */
521 			break;
522 		}
523 		captype = 1;
524 		subtype = 1;
525 		break;
526 	case IVTV_ENC_STREAM_TYPE_PCM:
527 		captype = 1;
528 		subtype = 2;
529 		break;
530 	case IVTV_ENC_STREAM_TYPE_VBI:
531 		captype = 1;
532 		subtype = 4;
533 
534 		itv->vbi.frame = 0;
535 		itv->vbi.inserted_frame = 0;
536 		memset(itv->vbi.sliced_mpeg_size,
537 			0, sizeof(itv->vbi.sliced_mpeg_size));
538 		break;
539 	default:
540 		return -EINVAL;
541 	}
542 	s->subtype = subtype;
543 	s->buffers_stolen = 0;
544 
545 	/* Clear Streamoff flags in case left from last capture */
546 	clear_bit(IVTV_F_S_STREAMOFF, &s->s_flags);
547 
548 	if (atomic_read(&itv->capturing) == 0) {
549 		int digitizer;
550 
551 		/* Always use frame based mode. Experiments have demonstrated that byte
552 		   stream based mode results in dropped frames and corruption. Not often,
553 		   but occasionally. Many thanks go to Leonard Orb who spent a lot of
554 		   effort and time trying to trace the cause of the drop outs. */
555 		/* 1 frame per DMA */
556 		/*ivtv_vapi(itv, CX2341X_ENC_SET_DMA_BLOCK_SIZE, 2, 128, 0); */
557 		ivtv_vapi(itv, CX2341X_ENC_SET_DMA_BLOCK_SIZE, 2, 1, 1);
558 
559 		/* Stuff from Windows, we don't know what it is */
560 		ivtv_vapi(itv, CX2341X_ENC_SET_VERT_CROP_LINE, 1, 0);
561 		/* According to the docs, this should be correct. However, this is
562 		   untested. I don't dare enable this without having tested it.
563 		   Only very few old cards actually have this hardware combination.
564 		ivtv_vapi(itv, CX2341X_ENC_SET_VERT_CROP_LINE, 1,
565 			((itv->hw_flags & IVTV_HW_SAA7114) && itv->is_60hz) ? 10001 : 0);
566 		*/
567 		ivtv_vapi(itv, CX2341X_ENC_MISC, 2, 3, !itv->has_cx23415);
568 		ivtv_vapi(itv, CX2341X_ENC_MISC, 2, 8, 0);
569 		ivtv_vapi(itv, CX2341X_ENC_MISC, 2, 4, 1);
570 		ivtv_vapi(itv, CX2341X_ENC_MISC, 1, 12);
571 
572 		/* assign placeholder */
573 		ivtv_vapi(itv, CX2341X_ENC_SET_PLACEHOLDER, 12,
574 			0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
575 
576 		if (itv->card->hw_all & (IVTV_HW_SAA7115 | IVTV_HW_SAA717X))
577 		    digitizer = 0xF1;
578 		else if (itv->card->hw_all & IVTV_HW_SAA7114)
579 		    digitizer = 0xEF;
580 		else /* cx25840 */
581 		    digitizer = 0x140;
582 
583 		ivtv_vapi(itv, CX2341X_ENC_SET_NUM_VSYNC_LINES, 2, digitizer, digitizer);
584 
585 		/* Setup VBI */
586 		if (itv->v4l2_cap & V4L2_CAP_VBI_CAPTURE) {
587 			ivtv_vbi_setup(itv);
588 		}
589 
590 		/* assign program index info. Mask 7: select I/P/B, Num_req: 400 max */
591 		ivtv_vapi_result(itv, data, CX2341X_ENC_SET_PGM_INDEX_INFO, 2, 7, 400);
592 		itv->pgm_info_offset = data[0];
593 		itv->pgm_info_num = data[1];
594 		itv->pgm_info_write_idx = 0;
595 		itv->pgm_info_read_idx = 0;
596 
597 		IVTV_DEBUG_INFO("PGM Index at 0x%08x with %d elements\n",
598 				itv->pgm_info_offset, itv->pgm_info_num);
599 
600 		/* Setup API for Stream */
601 		cx2341x_handler_setup(&itv->cxhdl);
602 
603 		/* mute if capturing radio */
604 		if (test_bit(IVTV_F_I_RADIO_USER, &itv->i_flags))
605 			ivtv_vapi(itv, CX2341X_ENC_MUTE_VIDEO, 1,
606 				1 | (v4l2_ctrl_g_ctrl(itv->cxhdl.video_mute_yuv) << 8));
607 	}
608 
609 	/* Vsync Setup */
610 	if (itv->has_cx23415 && !test_and_set_bit(IVTV_F_I_DIG_RST, &itv->i_flags)) {
611 		/* event notification (on) */
612 		ivtv_vapi(itv, CX2341X_ENC_SET_EVENT_NOTIFICATION, 4, 0, 1, IVTV_IRQ_ENC_VIM_RST, -1);
613 		ivtv_clear_irq_mask(itv, IVTV_IRQ_ENC_VIM_RST);
614 	}
615 
616 	if (atomic_read(&itv->capturing) == 0) {
617 		/* Clear all Pending Interrupts */
618 		ivtv_set_irq_mask(itv, IVTV_IRQ_MASK_CAPTURE);
619 
620 		clear_bit(IVTV_F_I_EOS, &itv->i_flags);
621 
622 		cx2341x_handler_set_busy(&itv->cxhdl, 1);
623 
624 		/* Initialize Digitizer for Capture */
625 		/* Avoid tinny audio problem - ensure audio clocks are going */
626 		v4l2_subdev_call(itv->sd_audio, audio, s_stream, 1);
627 		/* Avoid unpredictable PCI bus hang - disable video clocks */
628 		v4l2_subdev_call(itv->sd_video, video, s_stream, 0);
629 		ivtv_msleep_timeout(300, 0);
630 		ivtv_vapi(itv, CX2341X_ENC_INITIALIZE_INPUT, 0);
631 		v4l2_subdev_call(itv->sd_video, video, s_stream, 1);
632 	}
633 
634 	/* begin_capture */
635 	if (ivtv_vapi(itv, CX2341X_ENC_START_CAPTURE, 2, captype, subtype))
636 	{
637 		IVTV_DEBUG_WARN( "Error starting capture!\n");
638 		return -EINVAL;
639 	}
640 
641 	/* Start Passthrough */
642 	if (enable_passthrough) {
643 		ivtv_passthrough_mode(itv, 1);
644 	}
645 
646 	if (s->type == IVTV_ENC_STREAM_TYPE_VBI)
647 		ivtv_clear_irq_mask(itv, IVTV_IRQ_ENC_VBI_CAP);
648 	else
649 		ivtv_clear_irq_mask(itv, IVTV_IRQ_MASK_CAPTURE);
650 
651 	/* you're live! sit back and await interrupts :) */
652 	atomic_inc(&itv->capturing);
653 	return 0;
654 }
655 EXPORT_SYMBOL(ivtv_start_v4l2_encode_stream);
656 
657 static int ivtv_setup_v4l2_decode_stream(struct ivtv_stream *s)
658 {
659 	u32 data[CX2341X_MBOX_MAX_DATA];
660 	struct ivtv *itv = s->itv;
661 	int datatype;
662 	u16 width;
663 	u16 height;
664 
665 	if (s->vdev == NULL)
666 		return -EINVAL;
667 
668 	IVTV_DEBUG_INFO("Setting some initial decoder settings\n");
669 
670 	width = itv->cxhdl.width;
671 	height = itv->cxhdl.height;
672 
673 	/* set audio mode to left/stereo  for dual/stereo mode. */
674 	ivtv_vapi(itv, CX2341X_DEC_SET_AUDIO_MODE, 2, itv->audio_bilingual_mode, itv->audio_stereo_mode);
675 
676 	/* set number of internal decoder buffers */
677 	ivtv_vapi(itv, CX2341X_DEC_SET_DISPLAY_BUFFERS, 1, 0);
678 
679 	/* prebuffering */
680 	ivtv_vapi(itv, CX2341X_DEC_SET_PREBUFFERING, 1, 1);
681 
682 	/* extract from user packets */
683 	ivtv_vapi_result(itv, data, CX2341X_DEC_EXTRACT_VBI, 1, 1);
684 	itv->vbi.dec_start = data[0];
685 
686 	IVTV_DEBUG_INFO("Decoder VBI RE-Insert start 0x%08x size 0x%08x\n",
687 		itv->vbi.dec_start, data[1]);
688 
689 	/* set decoder source settings */
690 	/* Data type: 0 = mpeg from host,
691 	   1 = yuv from encoder,
692 	   2 = yuv_from_host */
693 	switch (s->type) {
694 	case IVTV_DEC_STREAM_TYPE_YUV:
695 		if (itv->output_mode == OUT_PASSTHROUGH) {
696 			datatype = 1;
697 		} else {
698 			/* Fake size to avoid switching video standard */
699 			datatype = 2;
700 			width = 720;
701 			height = itv->is_out_50hz ? 576 : 480;
702 		}
703 		IVTV_DEBUG_INFO("Setup DEC YUV Stream data[0] = %d\n", datatype);
704 		break;
705 	case IVTV_DEC_STREAM_TYPE_MPG:
706 	default:
707 		datatype = 0;
708 		break;
709 	}
710 	if (ivtv_vapi(itv, CX2341X_DEC_SET_DECODER_SOURCE, 4, datatype,
711 			width, height, itv->cxhdl.audio_properties)) {
712 		IVTV_DEBUG_WARN("Couldn't initialize decoder source\n");
713 	}
714 
715 	/* Decoder sometimes dies here, so wait a moment */
716 	ivtv_msleep_timeout(10, 0);
717 
718 	/* Known failure point for firmware, so check */
719 	return ivtv_firmware_check(itv, "ivtv_setup_v4l2_decode_stream");
720 }
721 
722 int ivtv_start_v4l2_decode_stream(struct ivtv_stream *s, int gop_offset)
723 {
724 	struct ivtv *itv = s->itv;
725 	int rc;
726 
727 	if (s->vdev == NULL)
728 		return -EINVAL;
729 
730 	if (test_and_set_bit(IVTV_F_S_STREAMING, &s->s_flags))
731 		return 0;	/* already started */
732 
733 	IVTV_DEBUG_INFO("Starting decode stream %s (gop_offset %d)\n", s->name, gop_offset);
734 
735 	rc = ivtv_setup_v4l2_decode_stream(s);
736 	if (rc < 0) {
737 		clear_bit(IVTV_F_S_STREAMING, &s->s_flags);
738 		return rc;
739 	}
740 
741 	/* set dma size to 65536 bytes */
742 	ivtv_vapi(itv, CX2341X_DEC_SET_DMA_BLOCK_SIZE, 1, 65536);
743 
744 	/* Clear Streamoff */
745 	clear_bit(IVTV_F_S_STREAMOFF, &s->s_flags);
746 
747 	/* Zero out decoder counters */
748 	writel(0, &itv->dec_mbox.mbox[IVTV_MBOX_DMA_END].data[0]);
749 	writel(0, &itv->dec_mbox.mbox[IVTV_MBOX_DMA_END].data[1]);
750 	writel(0, &itv->dec_mbox.mbox[IVTV_MBOX_DMA_END].data[2]);
751 	writel(0, &itv->dec_mbox.mbox[IVTV_MBOX_DMA_END].data[3]);
752 	writel(0, &itv->dec_mbox.mbox[IVTV_MBOX_DMA].data[0]);
753 	writel(0, &itv->dec_mbox.mbox[IVTV_MBOX_DMA].data[1]);
754 	writel(0, &itv->dec_mbox.mbox[IVTV_MBOX_DMA].data[2]);
755 	writel(0, &itv->dec_mbox.mbox[IVTV_MBOX_DMA].data[3]);
756 
757 	/* turn on notification of dual/stereo mode change */
758 	ivtv_vapi(itv, CX2341X_DEC_SET_EVENT_NOTIFICATION, 4, 0, 1, IVTV_IRQ_DEC_AUD_MODE_CHG, -1);
759 
760 	/* start playback */
761 	ivtv_vapi(itv, CX2341X_DEC_START_PLAYBACK, 2, gop_offset, 0);
762 
763 	/* Let things settle before we actually start */
764 	ivtv_msleep_timeout(10, 0);
765 
766 	/* Clear the following Interrupt mask bits for decoding */
767 	ivtv_clear_irq_mask(itv, IVTV_IRQ_MASK_DECODE);
768 	IVTV_DEBUG_IRQ("IRQ Mask is now: 0x%08x\n", itv->irqmask);
769 
770 	/* you're live! sit back and await interrupts :) */
771 	atomic_inc(&itv->decoding);
772 	return 0;
773 }
774 
775 void ivtv_stop_all_captures(struct ivtv *itv)
776 {
777 	int i;
778 
779 	for (i = IVTV_MAX_STREAMS - 1; i >= 0; i--) {
780 		struct ivtv_stream *s = &itv->streams[i];
781 
782 		if (s->vdev == NULL)
783 			continue;
784 		if (test_bit(IVTV_F_S_STREAMING, &s->s_flags)) {
785 			ivtv_stop_v4l2_encode_stream(s, 0);
786 		}
787 	}
788 }
789 
790 int ivtv_stop_v4l2_encode_stream(struct ivtv_stream *s, int gop_end)
791 {
792 	struct ivtv *itv = s->itv;
793 	DECLARE_WAITQUEUE(wait, current);
794 	int cap_type;
795 	int stopmode;
796 
797 	if (s->vdev == NULL)
798 		return -EINVAL;
799 
800 	/* This function assumes that you are allowed to stop the capture
801 	   and that we are actually capturing */
802 
803 	IVTV_DEBUG_INFO("Stop Capture\n");
804 
805 	if (s->type == IVTV_DEC_STREAM_TYPE_VOUT)
806 		return 0;
807 	if (atomic_read(&itv->capturing) == 0)
808 		return 0;
809 
810 	switch (s->type) {
811 	case IVTV_ENC_STREAM_TYPE_YUV:
812 		cap_type = 1;
813 		break;
814 	case IVTV_ENC_STREAM_TYPE_PCM:
815 		cap_type = 1;
816 		break;
817 	case IVTV_ENC_STREAM_TYPE_VBI:
818 		cap_type = 1;
819 		break;
820 	case IVTV_ENC_STREAM_TYPE_MPG:
821 	default:
822 		cap_type = 0;
823 		break;
824 	}
825 
826 	/* Stop Capture Mode */
827 	if (s->type == IVTV_ENC_STREAM_TYPE_MPG && gop_end) {
828 		stopmode = 0;
829 	} else {
830 		stopmode = 1;
831 	}
832 
833 	/* end_capture */
834 	/* when: 0 =  end of GOP  1 = NOW!, type: 0 = mpeg, subtype: 3 = video+audio */
835 	ivtv_vapi(itv, CX2341X_ENC_STOP_CAPTURE, 3, stopmode, cap_type, s->subtype);
836 
837 	if (!test_bit(IVTV_F_S_PASSTHROUGH, &s->s_flags)) {
838 		if (s->type == IVTV_ENC_STREAM_TYPE_MPG && gop_end) {
839 			/* only run these if we're shutting down the last cap */
840 			unsigned long duration;
841 			unsigned long then = jiffies;
842 
843 			add_wait_queue(&itv->eos_waitq, &wait);
844 
845 			set_current_state(TASK_INTERRUPTIBLE);
846 
847 			/* wait 2s for EOS interrupt */
848 			while (!test_bit(IVTV_F_I_EOS, &itv->i_flags) &&
849 				time_before(jiffies,
850 					    then + msecs_to_jiffies(2000))) {
851 				schedule_timeout(msecs_to_jiffies(10));
852 			}
853 
854 			/* To convert jiffies to ms, we must multiply by 1000
855 			 * and divide by HZ.  To avoid runtime division, we
856 			 * convert this to multiplication by 1000/HZ.
857 			 * Since integer division truncates, we get the best
858 			 * accuracy if we do a rounding calculation of the constant.
859 			 * Think of the case where HZ is 1024.
860 			 */
861 			duration = ((1000 + HZ / 2) / HZ) * (jiffies - then);
862 
863 			if (!test_bit(IVTV_F_I_EOS, &itv->i_flags)) {
864 				IVTV_DEBUG_WARN("%s: EOS interrupt not received! stopping anyway.\n", s->name);
865 				IVTV_DEBUG_WARN("%s: waited %lu ms.\n", s->name, duration);
866 			} else {
867 				IVTV_DEBUG_INFO("%s: EOS took %lu ms to occur.\n", s->name, duration);
868 			}
869 			set_current_state(TASK_RUNNING);
870 			remove_wait_queue(&itv->eos_waitq, &wait);
871 			set_bit(IVTV_F_S_STREAMOFF, &s->s_flags);
872 		}
873 
874 		/* Handle any pending interrupts */
875 		ivtv_msleep_timeout(100, 0);
876 	}
877 
878 	atomic_dec(&itv->capturing);
879 
880 	/* Clear capture and no-read bits */
881 	clear_bit(IVTV_F_S_STREAMING, &s->s_flags);
882 
883 	if (s->type == IVTV_ENC_STREAM_TYPE_VBI)
884 		ivtv_set_irq_mask(itv, IVTV_IRQ_ENC_VBI_CAP);
885 
886 	if (atomic_read(&itv->capturing) > 0) {
887 		return 0;
888 	}
889 
890 	cx2341x_handler_set_busy(&itv->cxhdl, 0);
891 
892 	/* Set the following Interrupt mask bits for capture */
893 	ivtv_set_irq_mask(itv, IVTV_IRQ_MASK_CAPTURE);
894 	del_timer(&itv->dma_timer);
895 
896 	/* event notification (off) */
897 	if (test_and_clear_bit(IVTV_F_I_DIG_RST, &itv->i_flags)) {
898 		/* type: 0 = refresh */
899 		/* on/off: 0 = off, intr: 0x10000000, mbox_id: -1: none */
900 		ivtv_vapi(itv, CX2341X_ENC_SET_EVENT_NOTIFICATION, 4, 0, 0, IVTV_IRQ_ENC_VIM_RST, -1);
901 		ivtv_set_irq_mask(itv, IVTV_IRQ_ENC_VIM_RST);
902 	}
903 
904 	/* Raw-passthrough is implied on start. Make sure it's stopped so
905 	   the encoder will re-initialize when next started */
906 	ivtv_vapi(itv, CX2341X_ENC_STOP_CAPTURE, 3, 1, 2, 7);
907 
908 	wake_up(&s->waitq);
909 
910 	return 0;
911 }
912 EXPORT_SYMBOL(ivtv_stop_v4l2_encode_stream);
913 
914 int ivtv_stop_v4l2_decode_stream(struct ivtv_stream *s, int flags, u64 pts)
915 {
916 	static const struct v4l2_event ev = {
917 		.type = V4L2_EVENT_EOS,
918 	};
919 	struct ivtv *itv = s->itv;
920 
921 	if (s->vdev == NULL)
922 		return -EINVAL;
923 
924 	if (s->type != IVTV_DEC_STREAM_TYPE_YUV && s->type != IVTV_DEC_STREAM_TYPE_MPG)
925 		return -EINVAL;
926 
927 	if (!test_bit(IVTV_F_S_STREAMING, &s->s_flags))
928 		return 0;
929 
930 	IVTV_DEBUG_INFO("Stop Decode at %llu, flags: %x\n", (unsigned long long)pts, flags);
931 
932 	/* Stop Decoder */
933 	if (!(flags & V4L2_DEC_CMD_STOP_IMMEDIATELY) || pts) {
934 		u32 tmp = 0;
935 
936 		/* Wait until the decoder is no longer running */
937 		if (pts) {
938 			ivtv_vapi(itv, CX2341X_DEC_STOP_PLAYBACK, 3,
939 				0, (u32)(pts & 0xffffffff), (u32)(pts >> 32));
940 		}
941 		while (1) {
942 			u32 data[CX2341X_MBOX_MAX_DATA];
943 			ivtv_vapi_result(itv, data, CX2341X_DEC_GET_XFER_INFO, 0);
944 			if (s->q_full.buffers + s->q_dma.buffers == 0) {
945 				if (tmp == data[3])
946 					break;
947 				tmp = data[3];
948 			}
949 			if (ivtv_msleep_timeout(100, 1))
950 				break;
951 		}
952 	}
953 	ivtv_vapi(itv, CX2341X_DEC_STOP_PLAYBACK, 3, flags & V4L2_DEC_CMD_STOP_TO_BLACK, 0, 0);
954 
955 	/* turn off notification of dual/stereo mode change */
956 	ivtv_vapi(itv, CX2341X_DEC_SET_EVENT_NOTIFICATION, 4, 0, 0, IVTV_IRQ_DEC_AUD_MODE_CHG, -1);
957 
958 	ivtv_set_irq_mask(itv, IVTV_IRQ_MASK_DECODE);
959 	del_timer(&itv->dma_timer);
960 
961 	clear_bit(IVTV_F_S_NEEDS_DATA, &s->s_flags);
962 	clear_bit(IVTV_F_S_STREAMING, &s->s_flags);
963 	ivtv_flush_queues(s);
964 
965 	/* decoder needs time to settle */
966 	ivtv_msleep_timeout(40, 0);
967 
968 	/* decrement decoding */
969 	atomic_dec(&itv->decoding);
970 
971 	set_bit(IVTV_F_I_EV_DEC_STOPPED, &itv->i_flags);
972 	wake_up(&itv->event_waitq);
973 	v4l2_event_queue(s->vdev, &ev);
974 
975 	/* wake up wait queues */
976 	wake_up(&s->waitq);
977 
978 	return 0;
979 }
980 
981 int ivtv_passthrough_mode(struct ivtv *itv, int enable)
982 {
983 	struct ivtv_stream *yuv_stream = &itv->streams[IVTV_ENC_STREAM_TYPE_YUV];
984 	struct ivtv_stream *dec_stream = &itv->streams[IVTV_DEC_STREAM_TYPE_YUV];
985 
986 	if (yuv_stream->vdev == NULL || dec_stream->vdev == NULL)
987 		return -EINVAL;
988 
989 	IVTV_DEBUG_INFO("ivtv ioctl: Select passthrough mode\n");
990 
991 	/* Prevent others from starting/stopping streams while we
992 	   initiate/terminate passthrough mode */
993 	if (enable) {
994 		if (itv->output_mode == OUT_PASSTHROUGH) {
995 			return 0;
996 		}
997 		if (ivtv_set_output_mode(itv, OUT_PASSTHROUGH) != OUT_PASSTHROUGH)
998 			return -EBUSY;
999 
1000 		/* Fully initialize stream, and then unflag init */
1001 		set_bit(IVTV_F_S_PASSTHROUGH, &dec_stream->s_flags);
1002 		set_bit(IVTV_F_S_STREAMING, &dec_stream->s_flags);
1003 
1004 		/* Setup YUV Decoder */
1005 		ivtv_setup_v4l2_decode_stream(dec_stream);
1006 
1007 		/* Start Decoder */
1008 		ivtv_vapi(itv, CX2341X_DEC_START_PLAYBACK, 2, 0, 1);
1009 		atomic_inc(&itv->decoding);
1010 
1011 		/* Setup capture if not already done */
1012 		if (atomic_read(&itv->capturing) == 0) {
1013 			cx2341x_handler_setup(&itv->cxhdl);
1014 			cx2341x_handler_set_busy(&itv->cxhdl, 1);
1015 		}
1016 
1017 		/* Start Passthrough Mode */
1018 		ivtv_vapi(itv, CX2341X_ENC_START_CAPTURE, 2, 2, 11);
1019 		atomic_inc(&itv->capturing);
1020 		return 0;
1021 	}
1022 
1023 	if (itv->output_mode != OUT_PASSTHROUGH)
1024 		return 0;
1025 
1026 	/* Stop Passthrough Mode */
1027 	ivtv_vapi(itv, CX2341X_ENC_STOP_CAPTURE, 3, 1, 2, 11);
1028 	ivtv_vapi(itv, CX2341X_DEC_STOP_PLAYBACK, 3, 1, 0, 0);
1029 
1030 	atomic_dec(&itv->capturing);
1031 	atomic_dec(&itv->decoding);
1032 	clear_bit(IVTV_F_S_PASSTHROUGH, &dec_stream->s_flags);
1033 	clear_bit(IVTV_F_S_STREAMING, &dec_stream->s_flags);
1034 	itv->output_mode = OUT_NONE;
1035 	if (atomic_read(&itv->capturing) == 0)
1036 		cx2341x_handler_set_busy(&itv->cxhdl, 0);
1037 
1038 	return 0;
1039 }
1040