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
48static 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#ifdef CONFIG_COMPAT
55	.compat_ioctl32 = video_ioctl2, /* for ivtv_default() */
56#endif
57	.release = ivtv_v4l2_close,
58	.poll = ivtv_v4l2_enc_poll,
59};
60
61static const struct v4l2_file_operations ivtv_v4l2_dec_fops = {
62	.owner = THIS_MODULE,
63	.read = ivtv_v4l2_read,
64	.write = ivtv_v4l2_write,
65	.open = ivtv_v4l2_open,
66	.unlocked_ioctl = video_ioctl2,
67#ifdef CONFIG_COMPAT
68	.compat_ioctl32 = video_ioctl2, /* for ivtv_default() */
69#endif
70	.release = ivtv_v4l2_close,
71	.poll = ivtv_v4l2_dec_poll,
72};
73
74static const struct v4l2_file_operations ivtv_v4l2_radio_fops = {
75	.owner = THIS_MODULE,
76	.open = ivtv_v4l2_open,
77	.unlocked_ioctl = video_ioctl2,
78#ifdef CONFIG_COMPAT
79	.compat_ioctl32 = video_ioctl2, /* for ivtv_default() */
80#endif
81	.release = ivtv_v4l2_close,
82	.poll = ivtv_v4l2_enc_poll,
83};
84
85#define IVTV_V4L2_DEC_MPG_OFFSET  16	/* offset from 0 to register decoder mpg v4l2 minors on */
86#define IVTV_V4L2_ENC_PCM_OFFSET  24	/* offset from 0 to register pcm v4l2 minors on */
87#define IVTV_V4L2_ENC_YUV_OFFSET  32	/* offset from 0 to register yuv v4l2 minors on */
88#define IVTV_V4L2_DEC_YUV_OFFSET  48	/* offset from 0 to register decoder yuv v4l2 minors on */
89#define IVTV_V4L2_DEC_VBI_OFFSET   8	/* offset from 0 to register decoder vbi input v4l2 minors on */
90#define IVTV_V4L2_DEC_VOUT_OFFSET 16	/* offset from 0 to register vbi output v4l2 minors on */
91
92static struct {
93	const char *name;
94	int vfl_type;
95	int num_offset;
96	int dma, pio;
97	u32 v4l2_caps;
98	const struct v4l2_file_operations *fops;
99} ivtv_stream_info[] = {
100	{	/* IVTV_ENC_STREAM_TYPE_MPG */
101		"encoder MPG",
102		VFL_TYPE_VIDEO, 0,
103		DMA_FROM_DEVICE, 0,
104		V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER |
105			V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
106		&ivtv_v4l2_enc_fops
107	},
108	{	/* IVTV_ENC_STREAM_TYPE_YUV */
109		"encoder YUV",
110		VFL_TYPE_VIDEO, IVTV_V4L2_ENC_YUV_OFFSET,
111		DMA_FROM_DEVICE, 0,
112		V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER |
113			V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
114		&ivtv_v4l2_enc_fops
115	},
116	{	/* IVTV_ENC_STREAM_TYPE_VBI */
117		"encoder VBI",
118		VFL_TYPE_VBI, 0,
119		DMA_FROM_DEVICE, 0,
120		V4L2_CAP_VBI_CAPTURE | V4L2_CAP_SLICED_VBI_CAPTURE | V4L2_CAP_TUNER |
121			V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
122		&ivtv_v4l2_enc_fops
123	},
124	{	/* IVTV_ENC_STREAM_TYPE_PCM */
125		"encoder PCM",
126		VFL_TYPE_VIDEO, IVTV_V4L2_ENC_PCM_OFFSET,
127		DMA_FROM_DEVICE, 0,
128		V4L2_CAP_TUNER | V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
129		&ivtv_v4l2_enc_fops
130	},
131	{	/* IVTV_ENC_STREAM_TYPE_RAD */
132		"encoder radio",
133		VFL_TYPE_RADIO, 0,
134		DMA_NONE, 1,
135		V4L2_CAP_RADIO | V4L2_CAP_TUNER,
136		&ivtv_v4l2_radio_fops
137	},
138	{	/* IVTV_DEC_STREAM_TYPE_MPG */
139		"decoder MPG",
140		VFL_TYPE_VIDEO, IVTV_V4L2_DEC_MPG_OFFSET,
141		DMA_TO_DEVICE, 0,
142		V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
143		&ivtv_v4l2_dec_fops
144	},
145	{	/* IVTV_DEC_STREAM_TYPE_VBI */
146		"decoder VBI",
147		VFL_TYPE_VBI, IVTV_V4L2_DEC_VBI_OFFSET,
148		DMA_NONE, 1,
149		V4L2_CAP_SLICED_VBI_CAPTURE | V4L2_CAP_READWRITE,
150		&ivtv_v4l2_enc_fops
151	},
152	{	/* IVTV_DEC_STREAM_TYPE_VOUT */
153		"decoder VOUT",
154		VFL_TYPE_VBI, IVTV_V4L2_DEC_VOUT_OFFSET,
155		DMA_NONE, 1,
156		V4L2_CAP_SLICED_VBI_OUTPUT | V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
157		&ivtv_v4l2_dec_fops
158	},
159	{	/* IVTV_DEC_STREAM_TYPE_YUV */
160		"decoder YUV",
161		VFL_TYPE_VIDEO, IVTV_V4L2_DEC_YUV_OFFSET,
162		DMA_TO_DEVICE, 0,
163		V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
164		&ivtv_v4l2_dec_fops
165	}
166};
167
168static void ivtv_stream_init(struct ivtv *itv, int type)
169{
170	struct ivtv_stream *s = &itv->streams[type];
171
172	/* we need to keep vdev, so restore it afterwards */
173	memset(s, 0, sizeof(*s));
174
175	/* initialize ivtv_stream fields */
176	s->itv = itv;
177	s->type = type;
178	s->name = ivtv_stream_info[type].name;
179	s->vdev.device_caps = ivtv_stream_info[type].v4l2_caps;
180
181	if (ivtv_stream_info[type].pio)
182		s->dma = DMA_NONE;
183	else
184		s->dma = ivtv_stream_info[type].dma;
185	s->buf_size = itv->stream_buf_size[type];
186	if (s->buf_size)
187		s->buffers = (itv->options.kilobytes[type] * 1024 + s->buf_size - 1) / s->buf_size;
188	spin_lock_init(&s->qlock);
189	init_waitqueue_head(&s->waitq);
190	s->sg_handle = IVTV_DMA_UNMAPPED;
191	ivtv_queue_init(&s->q_free);
192	ivtv_queue_init(&s->q_full);
193	ivtv_queue_init(&s->q_dma);
194	ivtv_queue_init(&s->q_predma);
195	ivtv_queue_init(&s->q_io);
196}
197
198static int ivtv_prep_dev(struct ivtv *itv, int type)
199{
200	struct ivtv_stream *s = &itv->streams[type];
201	int num_offset = ivtv_stream_info[type].num_offset;
202	int num = itv->instance + ivtv_first_minor + num_offset;
203
204	/* These four fields are always initialized. If vdev.v4l2_dev == NULL, then
205	   this stream is not in use. In that case no other fields but these
206	   four can be used. */
207	s->vdev.v4l2_dev = NULL;
208	s->itv = itv;
209	s->type = type;
210	s->name = ivtv_stream_info[type].name;
211
212	/* Check whether the radio is supported */
213	if (type == IVTV_ENC_STREAM_TYPE_RAD && !(itv->v4l2_cap & V4L2_CAP_RADIO))
214		return 0;
215	if (type >= IVTV_DEC_STREAM_TYPE_MPG && !(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
216		return 0;
217
218	/* User explicitly selected 0 buffers for these streams, so don't
219	   create them. */
220	if (ivtv_stream_info[type].dma != DMA_NONE &&
221	    itv->options.kilobytes[type] == 0) {
222		IVTV_INFO("Disabled %s device\n", ivtv_stream_info[type].name);
223		return 0;
224	}
225
226	ivtv_stream_init(itv, type);
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_empty;
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	ivtv_set_funcs(&s->vdev);
255	return 0;
256}
257
258/* Initialize v4l2 variables and prepare v4l2 devices */
259int ivtv_streams_setup(struct ivtv *itv)
260{
261	int type;
262
263	/* Setup V4L2 Devices */
264	for (type = 0; type < IVTV_MAX_STREAMS; type++) {
265		/* Prepare device */
266		if (ivtv_prep_dev(itv, type))
267			break;
268
269		if (itv->streams[type].vdev.v4l2_dev == NULL)
270			continue;
271
272		/* Allocate Stream */
273		if (ivtv_stream_alloc(&itv->streams[type]))
274			break;
275	}
276	if (type == IVTV_MAX_STREAMS)
277		return 0;
278
279	/* One or more streams could not be initialized. Clean 'em all up. */
280	ivtv_streams_cleanup(itv);
281	return -ENOMEM;
282}
283
284static int ivtv_reg_dev(struct ivtv *itv, int type)
285{
286	struct ivtv_stream *s = &itv->streams[type];
287	int vfl_type = ivtv_stream_info[type].vfl_type;
288	const char *name;
289	int num;
290
291	if (s->vdev.v4l2_dev == NULL)
292		return 0;
293
294	num = s->vdev.num;
295	/* card number + user defined offset + device offset */
296	if (type != IVTV_ENC_STREAM_TYPE_MPG) {
297		struct ivtv_stream *s_mpg = &itv->streams[IVTV_ENC_STREAM_TYPE_MPG];
298
299		if (s_mpg->vdev.v4l2_dev)
300			num = s_mpg->vdev.num + ivtv_stream_info[type].num_offset;
301	}
302	if (itv->osd_video_pbase && (type == IVTV_DEC_STREAM_TYPE_YUV ||
303				     type == IVTV_DEC_STREAM_TYPE_MPG)) {
304		s->vdev.device_caps |= V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
305		itv->v4l2_cap |= V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
306	}
307	video_set_drvdata(&s->vdev, s);
308
309	/* Register device. First try the desired minor, then any free one. */
310	if (video_register_device_no_warn(&s->vdev, vfl_type, num)) {
311		IVTV_ERR("Couldn't register v4l2 device for %s (device node number %d)\n",
312				s->name, num);
313		return -ENOMEM;
314	}
315	name = video_device_node_name(&s->vdev);
316
317	switch (vfl_type) {
318	case VFL_TYPE_VIDEO:
319		IVTV_INFO("Registered device %s for %s (%d kB)\n",
320			name, s->name, itv->options.kilobytes[type]);
321		break;
322	case VFL_TYPE_RADIO:
323		IVTV_INFO("Registered device %s for %s\n",
324			name, s->name);
325		break;
326	case VFL_TYPE_VBI:
327		if (itv->options.kilobytes[type])
328			IVTV_INFO("Registered device %s for %s (%d kB)\n",
329				name, s->name, itv->options.kilobytes[type]);
330		else
331			IVTV_INFO("Registered device %s for %s\n",
332				name, s->name);
333		break;
334	}
335	return 0;
336}
337
338/* Register v4l2 devices */
339int ivtv_streams_register(struct ivtv *itv)
340{
341	int type;
342	int err = 0;
343
344	/* Register V4L2 devices */
345	for (type = 0; type < IVTV_MAX_STREAMS; type++)
346		err |= ivtv_reg_dev(itv, type);
347
348	if (err == 0)
349		return 0;
350
351	/* One or more streams could not be initialized. Clean 'em all up. */
352	ivtv_streams_cleanup(itv);
353	return -ENOMEM;
354}
355
356/* Unregister v4l2 devices */
357void ivtv_streams_cleanup(struct ivtv *itv)
358{
359	int type;
360
361	/* Teardown all streams */
362	for (type = 0; type < IVTV_MAX_STREAMS; type++) {
363		struct video_device *vdev = &itv->streams[type].vdev;
364
365		if (vdev->v4l2_dev == NULL)
366			continue;
367
368		video_unregister_device(vdev);
369		ivtv_stream_free(&itv->streams[type]);
370		itv->streams[type].vdev.v4l2_dev = NULL;
371	}
372}
373
374static void ivtv_vbi_setup(struct ivtv *itv)
375{
376	int raw = ivtv_raw_vbi(itv);
377	u32 data[CX2341X_MBOX_MAX_DATA];
378	int lines;
379	int i;
380
381	/* Reset VBI */
382	ivtv_vapi(itv, CX2341X_ENC_SET_VBI_LINE, 5, 0xffff , 0, 0, 0, 0);
383
384	/* setup VBI registers */
385	if (raw)
386		v4l2_subdev_call(itv->sd_video, vbi, s_raw_fmt, &itv->vbi.in.fmt.vbi);
387	else
388		v4l2_subdev_call(itv->sd_video, vbi, s_sliced_fmt, &itv->vbi.in.fmt.sliced);
389
390	/* determine number of lines and total number of VBI bytes.
391	   A raw line takes 1443 bytes: 2 * 720 + 4 byte frame header - 1
392	   The '- 1' byte is probably an unused U or V byte. Or something...
393	   A sliced line takes 51 bytes: 4 byte frame header, 4 byte internal
394	   header, 42 data bytes + checksum (to be confirmed) */
395	if (raw) {
396		lines = itv->vbi.count * 2;
397	} else {
398		lines = itv->is_60hz ? 24 : 38;
399		if (itv->is_60hz && (itv->hw_flags & IVTV_HW_CX25840))
400			lines += 2;
401	}
402
403	itv->vbi.enc_size = lines * (raw ? itv->vbi.raw_size : itv->vbi.sliced_size);
404
405	/* Note: sliced vs raw flag doesn't seem to have any effect
406	   TODO: check mode (0x02) value with older ivtv versions. */
407	data[0] = raw | 0x02 | (0xbd << 8);
408
409	/* Every X number of frames a VBI interrupt arrives (frames as in 25 or 30 fps) */
410	data[1] = 1;
411	/* The VBI frames are stored in a ringbuffer with this size (with a VBI frame as unit) */
412	data[2] = raw ? 4 : 4 * (itv->vbi.raw_size / itv->vbi.enc_size);
413	/* The start/stop codes determine which VBI lines end up in the raw VBI data area.
414	   The codes are from table 24 in the saa7115 datasheet. Each raw/sliced/video line
415	   is framed with codes FF0000XX where XX is the SAV/EAV (Start/End of Active Video)
416	   code. These values for raw VBI are obtained from a driver disassembly. The sliced
417	   start/stop codes was deduced from this, but they do not appear in the driver.
418	   Other code pairs that I found are: 0x250E6249/0x13545454 and 0x25256262/0x38137F54.
419	   However, I have no idea what these values are for. */
420	if (itv->hw_flags & IVTV_HW_CX25840) {
421		/* Setup VBI for the cx25840 digitizer */
422		if (raw) {
423			data[3] = 0x20602060;
424			data[4] = 0x30703070;
425		} else {
426			data[3] = 0xB0F0B0F0;
427			data[4] = 0xA0E0A0E0;
428		}
429		/* Lines per frame */
430		data[5] = lines;
431		/* bytes per line */
432		data[6] = (raw ? itv->vbi.raw_size : itv->vbi.sliced_size);
433	} else {
434		/* Setup VBI for the saa7115 digitizer */
435		if (raw) {
436			data[3] = 0x25256262;
437			data[4] = 0x387F7F7F;
438		} else {
439			data[3] = 0xABABECEC;
440			data[4] = 0xB6F1F1F1;
441		}
442		/* Lines per frame */
443		data[5] = lines;
444		/* bytes per line */
445		data[6] = itv->vbi.enc_size / lines;
446	}
447
448	IVTV_DEBUG_INFO(
449		"Setup VBI API header 0x%08x pkts %d buffs %d ln %d sz %d\n",
450			data[0], data[1], data[2], data[5], data[6]);
451
452	ivtv_api(itv, CX2341X_ENC_SET_VBI_CONFIG, 7, data);
453
454	/* returns the VBI encoder memory area. */
455	itv->vbi.enc_start = data[2];
456	itv->vbi.fpi = data[0];
457	if (!itv->vbi.fpi)
458		itv->vbi.fpi = 1;
459
460	IVTV_DEBUG_INFO("Setup VBI start 0x%08x frames %d fpi %d\n",
461		itv->vbi.enc_start, data[1], itv->vbi.fpi);
462
463	/* select VBI lines.
464	   Note that the sliced argument seems to have no effect. */
465	for (i = 2; i <= 24; i++) {
466		int valid;
467
468		if (itv->is_60hz) {
469			valid = i >= 10 && i < 22;
470		} else {
471			valid = i >= 6 && i < 24;
472		}
473		ivtv_vapi(itv, CX2341X_ENC_SET_VBI_LINE, 5, i - 1,
474				valid, 0 , 0, 0);
475		ivtv_vapi(itv, CX2341X_ENC_SET_VBI_LINE, 5, (i - 1) | 0x80000000,
476				valid, 0, 0, 0);
477	}
478
479	/* Remaining VBI questions:
480	   - Is it possible to select particular VBI lines only for inclusion in the MPEG
481	   stream? Currently you can only get the first X lines.
482	   - Is mixed raw and sliced VBI possible?
483	   - What's the meaning of the raw/sliced flag?
484	   - What's the meaning of params 2, 3 & 4 of the Select VBI command? */
485}
486
487int ivtv_start_v4l2_encode_stream(struct ivtv_stream *s)
488{
489	u32 data[CX2341X_MBOX_MAX_DATA];
490	struct ivtv *itv = s->itv;
491	int captype = 0, subtype = 0;
492	int enable_passthrough = 0;
493
494	if (s->vdev.v4l2_dev == NULL)
495		return -EINVAL;
496
497	IVTV_DEBUG_INFO("Start encoder stream %s\n", s->name);
498
499	switch (s->type) {
500	case IVTV_ENC_STREAM_TYPE_MPG:
501		captype = 0;
502		subtype = 3;
503
504		/* Stop Passthrough */
505		if (itv->output_mode == OUT_PASSTHROUGH) {
506			ivtv_passthrough_mode(itv, 0);
507			enable_passthrough = 1;
508		}
509		itv->mpg_data_received = itv->vbi_data_inserted = 0;
510		itv->dualwatch_jiffies = jiffies;
511		itv->dualwatch_stereo_mode = v4l2_ctrl_g_ctrl(itv->cxhdl.audio_mode);
512		itv->search_pack_header = 0;
513		break;
514
515	case IVTV_ENC_STREAM_TYPE_YUV:
516		if (itv->output_mode == OUT_PASSTHROUGH) {
517			captype = 2;
518			subtype = 11;	/* video+audio+decoder */
519			break;
520		}
521		captype = 1;
522		subtype = 1;
523		break;
524	case IVTV_ENC_STREAM_TYPE_PCM:
525		captype = 1;
526		subtype = 2;
527		break;
528	case IVTV_ENC_STREAM_TYPE_VBI:
529		captype = 1;
530		subtype = 4;
531
532		itv->vbi.frame = 0;
533		itv->vbi.inserted_frame = 0;
534		memset(itv->vbi.sliced_mpeg_size,
535			0, sizeof(itv->vbi.sliced_mpeg_size));
536		break;
537	default:
538		return -EINVAL;
539	}
540	s->subtype = subtype;
541	s->buffers_stolen = 0;
542
543	/* Clear Streamoff flags in case left from last capture */
544	clear_bit(IVTV_F_S_STREAMOFF, &s->s_flags);
545
546	if (atomic_read(&itv->capturing) == 0) {
547		int digitizer;
548
549		/* Always use frame based mode. Experiments have demonstrated that byte
550		   stream based mode results in dropped frames and corruption. Not often,
551		   but occasionally. Many thanks go to Leonard Orb who spent a lot of
552		   effort and time trying to trace the cause of the drop outs. */
553		/* 1 frame per DMA */
554		/*ivtv_vapi(itv, CX2341X_ENC_SET_DMA_BLOCK_SIZE, 2, 128, 0); */
555		ivtv_vapi(itv, CX2341X_ENC_SET_DMA_BLOCK_SIZE, 2, 1, 1);
556
557		/* Stuff from Windows, we don't know what it is */
558		ivtv_vapi(itv, CX2341X_ENC_SET_VERT_CROP_LINE, 1, 0);
559		/* According to the docs, this should be correct. However, this is
560		   untested. I don't dare enable this without having tested it.
561		   Only very few old cards actually have this hardware combination.
562		ivtv_vapi(itv, CX2341X_ENC_SET_VERT_CROP_LINE, 1,
563			((itv->hw_flags & IVTV_HW_SAA7114) && itv->is_60hz) ? 10001 : 0);
564		*/
565		ivtv_vapi(itv, CX2341X_ENC_MISC, 2, 3, !itv->has_cx23415);
566		ivtv_vapi(itv, CX2341X_ENC_MISC, 2, 8, 0);
567		ivtv_vapi(itv, CX2341X_ENC_MISC, 2, 4, 1);
568		ivtv_vapi(itv, CX2341X_ENC_MISC, 1, 12);
569
570		/* assign placeholder */
571		ivtv_vapi(itv, CX2341X_ENC_SET_PLACEHOLDER, 12,
572			0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
573
574		if (itv->card->hw_all & (IVTV_HW_SAA7115 | IVTV_HW_SAA717X))
575		    digitizer = 0xF1;
576		else if (itv->card->hw_all & IVTV_HW_SAA7114)
577		    digitizer = 0xEF;
578		else /* cx25840 */
579		    digitizer = 0x140;
580
581		ivtv_vapi(itv, CX2341X_ENC_SET_NUM_VSYNC_LINES, 2, digitizer, digitizer);
582
583		/* Setup VBI */
584		if (itv->v4l2_cap & V4L2_CAP_VBI_CAPTURE) {
585			ivtv_vbi_setup(itv);
586		}
587
588		/* assign program index info. Mask 7: select I/P/B, Num_req: 400 max */
589		ivtv_vapi_result(itv, data, CX2341X_ENC_SET_PGM_INDEX_INFO, 2, 7, 400);
590		itv->pgm_info_offset = data[0];
591		itv->pgm_info_num = data[1];
592		itv->pgm_info_write_idx = 0;
593		itv->pgm_info_read_idx = 0;
594
595		IVTV_DEBUG_INFO("PGM Index at 0x%08x with %d elements\n",
596				itv->pgm_info_offset, itv->pgm_info_num);
597
598		/* Setup API for Stream */
599		cx2341x_handler_setup(&itv->cxhdl);
600
601		/* mute if capturing radio */
602		if (test_bit(IVTV_F_I_RADIO_USER, &itv->i_flags))
603			ivtv_vapi(itv, CX2341X_ENC_MUTE_VIDEO, 1,
604				1 | (v4l2_ctrl_g_ctrl(itv->cxhdl.video_mute_yuv) << 8));
605	}
606
607	/* Vsync Setup */
608	if (itv->has_cx23415 && !test_and_set_bit(IVTV_F_I_DIG_RST, &itv->i_flags)) {
609		/* event notification (on) */
610		ivtv_vapi(itv, CX2341X_ENC_SET_EVENT_NOTIFICATION, 4, 0, 1, IVTV_IRQ_ENC_VIM_RST, -1);
611		ivtv_clear_irq_mask(itv, IVTV_IRQ_ENC_VIM_RST);
612	}
613
614	if (atomic_read(&itv->capturing) == 0) {
615		/* Clear all Pending Interrupts */
616		ivtv_set_irq_mask(itv, IVTV_IRQ_MASK_CAPTURE);
617
618		clear_bit(IVTV_F_I_EOS, &itv->i_flags);
619
620		cx2341x_handler_set_busy(&itv->cxhdl, 1);
621
622		/* Initialize Digitizer for Capture */
623		/* Avoid tinny audio problem - ensure audio clocks are going */
624		v4l2_subdev_call(itv->sd_audio, audio, s_stream, 1);
625		/* Avoid unpredictable PCI bus hang - disable video clocks */
626		if (itv->sd_video_is_streaming)
627			v4l2_subdev_call(itv->sd_video, video, s_stream, 0);
628		ivtv_msleep_timeout(300, 0);
629		ivtv_vapi(itv, CX2341X_ENC_INITIALIZE_INPUT, 0);
630		v4l2_subdev_call(itv->sd_video, video, s_stream, 1);
631		itv->sd_video_is_streaming = true;
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}
655EXPORT_SYMBOL(ivtv_start_v4l2_encode_stream);
656
657static 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.v4l2_dev == 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
722int 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.v4l2_dev == 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
775void 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.v4l2_dev == 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
790int 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.v4l2_dev == 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}
912EXPORT_SYMBOL(ivtv_stop_v4l2_encode_stream);
913
914int 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.v4l2_dev == 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
981int 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.v4l2_dev == NULL || dec_stream->vdev.v4l2_dev == 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