GNU Linux-libre 5.19-rc6-gnu
[releases.git] / drivers / media / pci / ivtv / ivtv-streams.c
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 #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
61 static 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
74 static 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
92 static 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
168 static 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
198 static 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 */
259 int 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
284 static 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 */
339 int 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 */
357 void 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
374 static 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
487 int 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                 v4l2_subdev_call(itv->sd_video, video, s_stream, 0);
627                 ivtv_msleep_timeout(300, 0);
628                 ivtv_vapi(itv, CX2341X_ENC_INITIALIZE_INPUT, 0);
629                 v4l2_subdev_call(itv->sd_video, video, s_stream, 1);
630         }
631
632         /* begin_capture */
633         if (ivtv_vapi(itv, CX2341X_ENC_START_CAPTURE, 2, captype, subtype))
634         {
635                 IVTV_DEBUG_WARN( "Error starting capture!\n");
636                 return -EINVAL;
637         }
638
639         /* Start Passthrough */
640         if (enable_passthrough) {
641                 ivtv_passthrough_mode(itv, 1);
642         }
643
644         if (s->type == IVTV_ENC_STREAM_TYPE_VBI)
645                 ivtv_clear_irq_mask(itv, IVTV_IRQ_ENC_VBI_CAP);
646         else
647                 ivtv_clear_irq_mask(itv, IVTV_IRQ_MASK_CAPTURE);
648
649         /* you're live! sit back and await interrupts :) */
650         atomic_inc(&itv->capturing);
651         return 0;
652 }
653 EXPORT_SYMBOL(ivtv_start_v4l2_encode_stream);
654
655 static int ivtv_setup_v4l2_decode_stream(struct ivtv_stream *s)
656 {
657         u32 data[CX2341X_MBOX_MAX_DATA];
658         struct ivtv *itv = s->itv;
659         int datatype;
660         u16 width;
661         u16 height;
662
663         if (s->vdev.v4l2_dev == NULL)
664                 return -EINVAL;
665
666         IVTV_DEBUG_INFO("Setting some initial decoder settings\n");
667
668         width = itv->cxhdl.width;
669         height = itv->cxhdl.height;
670
671         /* set audio mode to left/stereo  for dual/stereo mode. */
672         ivtv_vapi(itv, CX2341X_DEC_SET_AUDIO_MODE, 2, itv->audio_bilingual_mode, itv->audio_stereo_mode);
673
674         /* set number of internal decoder buffers */
675         ivtv_vapi(itv, CX2341X_DEC_SET_DISPLAY_BUFFERS, 1, 0);
676
677         /* prebuffering */
678         ivtv_vapi(itv, CX2341X_DEC_SET_PREBUFFERING, 1, 1);
679
680         /* extract from user packets */
681         ivtv_vapi_result(itv, data, CX2341X_DEC_EXTRACT_VBI, 1, 1);
682         itv->vbi.dec_start = data[0];
683
684         IVTV_DEBUG_INFO("Decoder VBI RE-Insert start 0x%08x size 0x%08x\n",
685                 itv->vbi.dec_start, data[1]);
686
687         /* set decoder source settings */
688         /* Data type: 0 = mpeg from host,
689            1 = yuv from encoder,
690            2 = yuv_from_host */
691         switch (s->type) {
692         case IVTV_DEC_STREAM_TYPE_YUV:
693                 if (itv->output_mode == OUT_PASSTHROUGH) {
694                         datatype = 1;
695                 } else {
696                         /* Fake size to avoid switching video standard */
697                         datatype = 2;
698                         width = 720;
699                         height = itv->is_out_50hz ? 576 : 480;
700                 }
701                 IVTV_DEBUG_INFO("Setup DEC YUV Stream data[0] = %d\n", datatype);
702                 break;
703         case IVTV_DEC_STREAM_TYPE_MPG:
704         default:
705                 datatype = 0;
706                 break;
707         }
708         if (ivtv_vapi(itv, CX2341X_DEC_SET_DECODER_SOURCE, 4, datatype,
709                         width, height, itv->cxhdl.audio_properties)) {
710                 IVTV_DEBUG_WARN("Couldn't initialize decoder source\n");
711         }
712
713         /* Decoder sometimes dies here, so wait a moment */
714         ivtv_msleep_timeout(10, 0);
715
716         /* Known failure point for firmware, so check */
717         return ivtv_firmware_check(itv, "ivtv_setup_v4l2_decode_stream");
718 }
719
720 int ivtv_start_v4l2_decode_stream(struct ivtv_stream *s, int gop_offset)
721 {
722         struct ivtv *itv = s->itv;
723         int rc;
724
725         if (s->vdev.v4l2_dev == NULL)
726                 return -EINVAL;
727
728         if (test_and_set_bit(IVTV_F_S_STREAMING, &s->s_flags))
729                 return 0;       /* already started */
730
731         IVTV_DEBUG_INFO("Starting decode stream %s (gop_offset %d)\n", s->name, gop_offset);
732
733         rc = ivtv_setup_v4l2_decode_stream(s);
734         if (rc < 0) {
735                 clear_bit(IVTV_F_S_STREAMING, &s->s_flags);
736                 return rc;
737         }
738
739         /* set dma size to 65536 bytes */
740         ivtv_vapi(itv, CX2341X_DEC_SET_DMA_BLOCK_SIZE, 1, 65536);
741
742         /* Clear Streamoff */
743         clear_bit(IVTV_F_S_STREAMOFF, &s->s_flags);
744
745         /* Zero out decoder counters */
746         writel(0, &itv->dec_mbox.mbox[IVTV_MBOX_DMA_END].data[0]);
747         writel(0, &itv->dec_mbox.mbox[IVTV_MBOX_DMA_END].data[1]);
748         writel(0, &itv->dec_mbox.mbox[IVTV_MBOX_DMA_END].data[2]);
749         writel(0, &itv->dec_mbox.mbox[IVTV_MBOX_DMA_END].data[3]);
750         writel(0, &itv->dec_mbox.mbox[IVTV_MBOX_DMA].data[0]);
751         writel(0, &itv->dec_mbox.mbox[IVTV_MBOX_DMA].data[1]);
752         writel(0, &itv->dec_mbox.mbox[IVTV_MBOX_DMA].data[2]);
753         writel(0, &itv->dec_mbox.mbox[IVTV_MBOX_DMA].data[3]);
754
755         /* turn on notification of dual/stereo mode change */
756         ivtv_vapi(itv, CX2341X_DEC_SET_EVENT_NOTIFICATION, 4, 0, 1, IVTV_IRQ_DEC_AUD_MODE_CHG, -1);
757
758         /* start playback */
759         ivtv_vapi(itv, CX2341X_DEC_START_PLAYBACK, 2, gop_offset, 0);
760
761         /* Let things settle before we actually start */
762         ivtv_msleep_timeout(10, 0);
763
764         /* Clear the following Interrupt mask bits for decoding */
765         ivtv_clear_irq_mask(itv, IVTV_IRQ_MASK_DECODE);
766         IVTV_DEBUG_IRQ("IRQ Mask is now: 0x%08x\n", itv->irqmask);
767
768         /* you're live! sit back and await interrupts :) */
769         atomic_inc(&itv->decoding);
770         return 0;
771 }
772
773 void ivtv_stop_all_captures(struct ivtv *itv)
774 {
775         int i;
776
777         for (i = IVTV_MAX_STREAMS - 1; i >= 0; i--) {
778                 struct ivtv_stream *s = &itv->streams[i];
779
780                 if (s->vdev.v4l2_dev == NULL)
781                         continue;
782                 if (test_bit(IVTV_F_S_STREAMING, &s->s_flags)) {
783                         ivtv_stop_v4l2_encode_stream(s, 0);
784                 }
785         }
786 }
787
788 int ivtv_stop_v4l2_encode_stream(struct ivtv_stream *s, int gop_end)
789 {
790         struct ivtv *itv = s->itv;
791         DECLARE_WAITQUEUE(wait, current);
792         int cap_type;
793         int stopmode;
794
795         if (s->vdev.v4l2_dev == NULL)
796                 return -EINVAL;
797
798         /* This function assumes that you are allowed to stop the capture
799            and that we are actually capturing */
800
801         IVTV_DEBUG_INFO("Stop Capture\n");
802
803         if (s->type == IVTV_DEC_STREAM_TYPE_VOUT)
804                 return 0;
805         if (atomic_read(&itv->capturing) == 0)
806                 return 0;
807
808         switch (s->type) {
809         case IVTV_ENC_STREAM_TYPE_YUV:
810                 cap_type = 1;
811                 break;
812         case IVTV_ENC_STREAM_TYPE_PCM:
813                 cap_type = 1;
814                 break;
815         case IVTV_ENC_STREAM_TYPE_VBI:
816                 cap_type = 1;
817                 break;
818         case IVTV_ENC_STREAM_TYPE_MPG:
819         default:
820                 cap_type = 0;
821                 break;
822         }
823
824         /* Stop Capture Mode */
825         if (s->type == IVTV_ENC_STREAM_TYPE_MPG && gop_end) {
826                 stopmode = 0;
827         } else {
828                 stopmode = 1;
829         }
830
831         /* end_capture */
832         /* when: 0 =  end of GOP  1 = NOW!, type: 0 = mpeg, subtype: 3 = video+audio */
833         ivtv_vapi(itv, CX2341X_ENC_STOP_CAPTURE, 3, stopmode, cap_type, s->subtype);
834
835         if (!test_bit(IVTV_F_S_PASSTHROUGH, &s->s_flags)) {
836                 if (s->type == IVTV_ENC_STREAM_TYPE_MPG && gop_end) {
837                         /* only run these if we're shutting down the last cap */
838                         unsigned long duration;
839                         unsigned long then = jiffies;
840
841                         add_wait_queue(&itv->eos_waitq, &wait);
842
843                         set_current_state(TASK_INTERRUPTIBLE);
844
845                         /* wait 2s for EOS interrupt */
846                         while (!test_bit(IVTV_F_I_EOS, &itv->i_flags) &&
847                                 time_before(jiffies,
848                                             then + msecs_to_jiffies(2000))) {
849                                 schedule_timeout(msecs_to_jiffies(10));
850                         }
851
852                         /* To convert jiffies to ms, we must multiply by 1000
853                          * and divide by HZ.  To avoid runtime division, we
854                          * convert this to multiplication by 1000/HZ.
855                          * Since integer division truncates, we get the best
856                          * accuracy if we do a rounding calculation of the constant.
857                          * Think of the case where HZ is 1024.
858                          */
859                         duration = ((1000 + HZ / 2) / HZ) * (jiffies - then);
860
861                         if (!test_bit(IVTV_F_I_EOS, &itv->i_flags)) {
862                                 IVTV_DEBUG_WARN("%s: EOS interrupt not received! stopping anyway.\n", s->name);
863                                 IVTV_DEBUG_WARN("%s: waited %lu ms.\n", s->name, duration);
864                         } else {
865                                 IVTV_DEBUG_INFO("%s: EOS took %lu ms to occur.\n", s->name, duration);
866                         }
867                         set_current_state(TASK_RUNNING);
868                         remove_wait_queue(&itv->eos_waitq, &wait);
869                         set_bit(IVTV_F_S_STREAMOFF, &s->s_flags);
870                 }
871
872                 /* Handle any pending interrupts */
873                 ivtv_msleep_timeout(100, 0);
874         }
875
876         atomic_dec(&itv->capturing);
877
878         /* Clear capture and no-read bits */
879         clear_bit(IVTV_F_S_STREAMING, &s->s_flags);
880
881         if (s->type == IVTV_ENC_STREAM_TYPE_VBI)
882                 ivtv_set_irq_mask(itv, IVTV_IRQ_ENC_VBI_CAP);
883
884         if (atomic_read(&itv->capturing) > 0) {
885                 return 0;
886         }
887
888         cx2341x_handler_set_busy(&itv->cxhdl, 0);
889
890         /* Set the following Interrupt mask bits for capture */
891         ivtv_set_irq_mask(itv, IVTV_IRQ_MASK_CAPTURE);
892         del_timer(&itv->dma_timer);
893
894         /* event notification (off) */
895         if (test_and_clear_bit(IVTV_F_I_DIG_RST, &itv->i_flags)) {
896                 /* type: 0 = refresh */
897                 /* on/off: 0 = off, intr: 0x10000000, mbox_id: -1: none */
898                 ivtv_vapi(itv, CX2341X_ENC_SET_EVENT_NOTIFICATION, 4, 0, 0, IVTV_IRQ_ENC_VIM_RST, -1);
899                 ivtv_set_irq_mask(itv, IVTV_IRQ_ENC_VIM_RST);
900         }
901
902         /* Raw-passthrough is implied on start. Make sure it's stopped so
903            the encoder will re-initialize when next started */
904         ivtv_vapi(itv, CX2341X_ENC_STOP_CAPTURE, 3, 1, 2, 7);
905
906         wake_up(&s->waitq);
907
908         return 0;
909 }
910 EXPORT_SYMBOL(ivtv_stop_v4l2_encode_stream);
911
912 int ivtv_stop_v4l2_decode_stream(struct ivtv_stream *s, int flags, u64 pts)
913 {
914         static const struct v4l2_event ev = {
915                 .type = V4L2_EVENT_EOS,
916         };
917         struct ivtv *itv = s->itv;
918
919         if (s->vdev.v4l2_dev == NULL)
920                 return -EINVAL;
921
922         if (s->type != IVTV_DEC_STREAM_TYPE_YUV && s->type != IVTV_DEC_STREAM_TYPE_MPG)
923                 return -EINVAL;
924
925         if (!test_bit(IVTV_F_S_STREAMING, &s->s_flags))
926                 return 0;
927
928         IVTV_DEBUG_INFO("Stop Decode at %llu, flags: %x\n", (unsigned long long)pts, flags);
929
930         /* Stop Decoder */
931         if (!(flags & V4L2_DEC_CMD_STOP_IMMEDIATELY) || pts) {
932                 u32 tmp = 0;
933
934                 /* Wait until the decoder is no longer running */
935                 if (pts) {
936                         ivtv_vapi(itv, CX2341X_DEC_STOP_PLAYBACK, 3,
937                                 0, (u32)(pts & 0xffffffff), (u32)(pts >> 32));
938                 }
939                 while (1) {
940                         u32 data[CX2341X_MBOX_MAX_DATA];
941                         ivtv_vapi_result(itv, data, CX2341X_DEC_GET_XFER_INFO, 0);
942                         if (s->q_full.buffers + s->q_dma.buffers == 0) {
943                                 if (tmp == data[3])
944                                         break;
945                                 tmp = data[3];
946                         }
947                         if (ivtv_msleep_timeout(100, 1))
948                                 break;
949                 }
950         }
951         ivtv_vapi(itv, CX2341X_DEC_STOP_PLAYBACK, 3, flags & V4L2_DEC_CMD_STOP_TO_BLACK, 0, 0);
952
953         /* turn off notification of dual/stereo mode change */
954         ivtv_vapi(itv, CX2341X_DEC_SET_EVENT_NOTIFICATION, 4, 0, 0, IVTV_IRQ_DEC_AUD_MODE_CHG, -1);
955
956         ivtv_set_irq_mask(itv, IVTV_IRQ_MASK_DECODE);
957         del_timer(&itv->dma_timer);
958
959         clear_bit(IVTV_F_S_NEEDS_DATA, &s->s_flags);
960         clear_bit(IVTV_F_S_STREAMING, &s->s_flags);
961         ivtv_flush_queues(s);
962
963         /* decoder needs time to settle */
964         ivtv_msleep_timeout(40, 0);
965
966         /* decrement decoding */
967         atomic_dec(&itv->decoding);
968
969         set_bit(IVTV_F_I_EV_DEC_STOPPED, &itv->i_flags);
970         wake_up(&itv->event_waitq);
971         v4l2_event_queue(&s->vdev, &ev);
972
973         /* wake up wait queues */
974         wake_up(&s->waitq);
975
976         return 0;
977 }
978
979 int ivtv_passthrough_mode(struct ivtv *itv, int enable)
980 {
981         struct ivtv_stream *yuv_stream = &itv->streams[IVTV_ENC_STREAM_TYPE_YUV];
982         struct ivtv_stream *dec_stream = &itv->streams[IVTV_DEC_STREAM_TYPE_YUV];
983
984         if (yuv_stream->vdev.v4l2_dev == NULL || dec_stream->vdev.v4l2_dev == NULL)
985                 return -EINVAL;
986
987         IVTV_DEBUG_INFO("ivtv ioctl: Select passthrough mode\n");
988
989         /* Prevent others from starting/stopping streams while we
990            initiate/terminate passthrough mode */
991         if (enable) {
992                 if (itv->output_mode == OUT_PASSTHROUGH) {
993                         return 0;
994                 }
995                 if (ivtv_set_output_mode(itv, OUT_PASSTHROUGH) != OUT_PASSTHROUGH)
996                         return -EBUSY;
997
998                 /* Fully initialize stream, and then unflag init */
999                 set_bit(IVTV_F_S_PASSTHROUGH, &dec_stream->s_flags);
1000                 set_bit(IVTV_F_S_STREAMING, &dec_stream->s_flags);
1001
1002                 /* Setup YUV Decoder */
1003                 ivtv_setup_v4l2_decode_stream(dec_stream);
1004
1005                 /* Start Decoder */
1006                 ivtv_vapi(itv, CX2341X_DEC_START_PLAYBACK, 2, 0, 1);
1007                 atomic_inc(&itv->decoding);
1008
1009                 /* Setup capture if not already done */
1010                 if (atomic_read(&itv->capturing) == 0) {
1011                         cx2341x_handler_setup(&itv->cxhdl);
1012                         cx2341x_handler_set_busy(&itv->cxhdl, 1);
1013                 }
1014
1015                 /* Start Passthrough Mode */
1016                 ivtv_vapi(itv, CX2341X_ENC_START_CAPTURE, 2, 2, 11);
1017                 atomic_inc(&itv->capturing);
1018                 return 0;
1019         }
1020
1021         if (itv->output_mode != OUT_PASSTHROUGH)
1022                 return 0;
1023
1024         /* Stop Passthrough Mode */
1025         ivtv_vapi(itv, CX2341X_ENC_STOP_CAPTURE, 3, 1, 2, 11);
1026         ivtv_vapi(itv, CX2341X_DEC_STOP_PLAYBACK, 3, 1, 0, 0);
1027
1028         atomic_dec(&itv->capturing);
1029         atomic_dec(&itv->decoding);
1030         clear_bit(IVTV_F_S_PASSTHROUGH, &dec_stream->s_flags);
1031         clear_bit(IVTV_F_S_STREAMING, &dec_stream->s_flags);
1032         itv->output_mode = OUT_NONE;
1033         if (atomic_read(&itv->capturing) == 0)
1034                 cx2341x_handler_set_busy(&itv->cxhdl, 0);
1035
1036         return 0;
1037 }