V4L/DVB (6862): ivtv: really remove i2c legacy support from drivers that no longer...
[linux-2.6] / drivers / media / video / vivi.c
1 /*
2  * Virtual Video driver - This code emulates a real video device with v4l2 api
3  *
4  * Copyright (c) 2006 by:
5  *      Mauro Carvalho Chehab <mchehab--a.t--infradead.org>
6  *      Ted Walther <ted--a.t--enumera.com>
7  *      John Sokol <sokol--a.t--videotechnology.com>
8  *      http://v4l.videotechnology.com/
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the BSD Licence, GNU General Public License
12  * as published by the Free Software Foundation; either version 2 of the
13  * License, or (at your option) any later version
14  */
15 #include <linux/module.h>
16 #include <linux/delay.h>
17 #include <linux/errno.h>
18 #include <linux/fs.h>
19 #include <linux/kernel.h>
20 #include <linux/slab.h>
21 #include <linux/mm.h>
22 #include <linux/ioport.h>
23 #include <linux/init.h>
24 #include <linux/sched.h>
25 #include <linux/pci.h>
26 #include <linux/random.h>
27 #include <linux/version.h>
28 #include <linux/mutex.h>
29 #include <linux/videodev2.h>
30 #include <linux/dma-mapping.h>
31 #ifdef CONFIG_VIDEO_V4L1_COMPAT
32 /* Include V4L1 specific functions. Should be removed soon */
33 #include <linux/videodev.h>
34 #endif
35 #include <linux/interrupt.h>
36 #include <media/videobuf-vmalloc.h>
37 #include <media/v4l2-common.h>
38 #include <linux/kthread.h>
39 #include <linux/highmem.h>
40 #include <linux/freezer.h>
41
42 /* Wake up at about 30 fps */
43 #define WAKE_NUMERATOR 30
44 #define WAKE_DENOMINATOR 1001
45 #define BUFFER_TIMEOUT     msecs_to_jiffies(500)  /* 0.5 seconds */
46
47 #include "font.h"
48
49 #define VIVI_MAJOR_VERSION 0
50 #define VIVI_MINOR_VERSION 4
51 #define VIVI_RELEASE 0
52 #define VIVI_VERSION \
53         KERNEL_VERSION(VIVI_MAJOR_VERSION, VIVI_MINOR_VERSION, VIVI_RELEASE)
54
55 /* Declare static vars that will be used as parameters */
56 static unsigned int vid_limit = 16;     /* Video memory limit, in Mb */
57 static int video_nr = -1;               /* /dev/videoN, -1 for autodetect */
58 static int n_devs = 1;                  /* Number of virtual devices */
59
60 /* supported controls */
61 static struct v4l2_queryctrl vivi_qctrl[] = {
62         {
63                 .id            = V4L2_CID_AUDIO_VOLUME,
64                 .name          = "Volume",
65                 .minimum       = 0,
66                 .maximum       = 65535,
67                 .step          = 65535/100,
68                 .default_value = 65535,
69                 .flags         = 0,
70                 .type          = V4L2_CTRL_TYPE_INTEGER,
71         }, {
72                 .id            = V4L2_CID_BRIGHTNESS,
73                 .type          = V4L2_CTRL_TYPE_INTEGER,
74                 .name          = "Brightness",
75                 .minimum       = 0,
76                 .maximum       = 255,
77                 .step          = 1,
78                 .default_value = 127,
79                 .flags         = 0,
80         }, {
81                 .id            = V4L2_CID_CONTRAST,
82                 .type          = V4L2_CTRL_TYPE_INTEGER,
83                 .name          = "Contrast",
84                 .minimum       = 0,
85                 .maximum       = 255,
86                 .step          = 0x1,
87                 .default_value = 0x10,
88                 .flags         = 0,
89         }, {
90                 .id            = V4L2_CID_SATURATION,
91                 .type          = V4L2_CTRL_TYPE_INTEGER,
92                 .name          = "Saturation",
93                 .minimum       = 0,
94                 .maximum       = 255,
95                 .step          = 0x1,
96                 .default_value = 127,
97                 .flags         = 0,
98         }, {
99                 .id            = V4L2_CID_HUE,
100                 .type          = V4L2_CTRL_TYPE_INTEGER,
101                 .name          = "Hue",
102                 .minimum       = -128,
103                 .maximum       = 127,
104                 .step          = 0x1,
105                 .default_value = 0,
106                 .flags         = 0,
107         }
108 };
109
110 static int qctl_regs[ARRAY_SIZE(vivi_qctrl)];
111
112 #define dprintk(dev, level, fmt, arg...)                                \
113         do {                                                            \
114                 if (dev->vfd->debug >= (level))                         \
115                         printk(KERN_DEBUG "vivi: " fmt , ## arg);       \
116         } while (0)
117
118 /* ------------------------------------------------------------------
119         Basic structures
120    ------------------------------------------------------------------*/
121
122 struct vivi_fmt {
123         char  *name;
124         u32   fourcc;          /* v4l2 format id */
125         int   depth;
126 };
127
128 static struct vivi_fmt format = {
129         .name     = "4:2:2, packed, YUYV",
130         .fourcc   = V4L2_PIX_FMT_YUYV,
131         .depth    = 16,
132 };
133
134 struct sg_to_addr {
135         int pos;
136         struct scatterlist *sg;
137 };
138
139 /* buffer for one video frame */
140 struct vivi_buffer {
141         /* common v4l buffer stuff -- must be first */
142         struct videobuf_buffer vb;
143
144         struct vivi_fmt        *fmt;
145 };
146
147 struct vivi_dmaqueue {
148         struct list_head       active;
149         struct list_head       queued;
150         struct timer_list      timeout;
151
152         /* thread for generating video stream*/
153         struct task_struct         *kthread;
154         wait_queue_head_t          wq;
155         /* Counters to control fps rate */
156         int                        frame;
157         int                        ini_jiffies;
158 };
159
160 static LIST_HEAD(vivi_devlist);
161
162 struct vivi_dev {
163         struct list_head           vivi_devlist;
164
165         struct mutex               lock;
166         spinlock_t                 slock;
167
168         int                        users;
169
170         /* various device info */
171         struct video_device        *vfd;
172
173         struct vivi_dmaqueue       vidq;
174
175         /* Several counters */
176         int                        h, m, s, us, jiffies;
177         char                       timestr[13];
178
179         int                        mv_count;    /* Controls bars movement */
180 };
181
182 struct vivi_fh {
183         struct vivi_dev            *dev;
184
185         /* video capture */
186         struct vivi_fmt            *fmt;
187         unsigned int               width, height;
188         struct videobuf_queue      vb_vidq;
189
190         enum v4l2_buf_type         type;
191 };
192
193 /* ------------------------------------------------------------------
194         DMA and thread functions
195    ------------------------------------------------------------------*/
196
197 /* Bars and Colors should match positions */
198
199 enum colors {
200         WHITE,
201         AMBAR,
202         CYAN,
203         GREEN,
204         MAGENTA,
205         RED,
206         BLUE,
207         BLACK,
208 };
209
210 static u8 bars[8][3] = {
211         /* R   G   B */
212         {204, 204, 204},  /* white */
213         {208, 208,   0},  /* ambar */
214         {  0, 206, 206},  /* cyan */
215         {  0, 239,   0},  /* green */
216         {239,   0, 239},  /* magenta */
217         {205,   0,   0},  /* red */
218         {  0,   0, 255},  /* blue */
219         {  0,   0,   0},  /* black */
220 };
221
222 #define TO_Y(r, g, b) \
223         (((16829 * r + 33039 * g + 6416 * b  + 32768) >> 16) + 16)
224 /* RGB to  V(Cr) Color transform */
225 #define TO_V(r, g, b) \
226         (((28784 * r - 24103 * g - 4681 * b  + 32768) >> 16) + 128)
227 /* RGB to  U(Cb) Color transform */
228 #define TO_U(r, g, b) \
229         (((-9714 * r - 19070 * g + 28784 * b + 32768) >> 16) + 128)
230
231 #define TSTAMP_MIN_Y 24
232 #define TSTAMP_MAX_Y TSTAMP_MIN_Y+15
233 #define TSTAMP_MIN_X 64
234
235 static void gen_line(char *basep, int inipos, int wmax,
236                 int hmax, int line, int count, char *timestr)
237 {
238         int  w, i, j, y;
239         int pos = inipos;
240         char *p, *s;
241         u8   chr, r, g, b, color;
242
243         /* We will just duplicate the second pixel at the packet */
244         wmax /= 2;
245
246         /* Generate a standard color bar pattern */
247         for (w = 0; w < wmax; w++) {
248                 int colorpos = ((w + count) * 8/(wmax + 1)) % 8;
249                 r = bars[colorpos][0];
250                 g = bars[colorpos][1];
251                 b = bars[colorpos][2];
252
253                 for (color = 0; color < 4; color++) {
254                         p = basep + pos;
255
256                         switch (color) {
257                         case 0:
258                         case 2:
259                                 *p = TO_Y(r, g, b);     /* Luma */
260                                 break;
261                         case 1:
262                                 *p = TO_U(r, g, b);     /* Cb */
263                                 break;
264                         case 3:
265                                 *p = TO_V(r, g, b);     /* Cr */
266                                 break;
267                         }
268                         pos++;
269                 }
270         }
271
272         /* Checks if it is possible to show timestamp */
273         if (TSTAMP_MAX_Y >= hmax)
274                 goto end;
275         if (TSTAMP_MIN_X + strlen(timestr) >= wmax)
276                 goto end;
277
278         /* Print stream time */
279         if (line >= TSTAMP_MIN_Y && line <= TSTAMP_MAX_Y) {
280                 j = TSTAMP_MIN_X;
281                 for (s = timestr; *s; s++) {
282                         chr = rom8x16_bits[(*s-0x30)*16+line-TSTAMP_MIN_Y];
283                         for (i = 0; i < 7; i++) {
284                                 if (chr & 1 << (7 - i)) {
285                                         /* Font color*/
286                                         r = 0;
287                                         g = 198;
288                                         b = 0;
289                                 } else {
290                                         /* Background color */
291                                         r = bars[BLACK][0];
292                                         g = bars[BLACK][1];
293                                         b = bars[BLACK][2];
294                                 }
295
296                                 pos = inipos + j * 2;
297                                 for (color = 0; color < 4; color++) {
298                                         p = basep + pos;
299
300                                         y = TO_Y(r, g, b);
301
302                                         switch (color) {
303                                         case 0:
304                                         case 2:
305                                                 *p = TO_Y(r, g, b); /* Luma */
306                                                 break;
307                                         case 1:
308                                                 *p = TO_U(r, g, b); /* Cb */
309                                                 break;
310                                         case 3:
311                                                 *p = TO_V(r, g, b); /* Cr */
312                                                 break;
313                                         }
314                                         pos++;
315                                 }
316                                 j++;
317                         }
318                 }
319         }
320
321 end:
322         return;
323 }
324 static void vivi_fillbuff(struct vivi_dev *dev, struct vivi_buffer *buf)
325 {
326         int h , pos = 0;
327         int hmax  = buf->vb.height;
328         int wmax  = buf->vb.width;
329         struct timeval ts;
330         char *tmpbuf = kmalloc(wmax * 2, GFP_KERNEL);
331         void *vbuf = videobuf_to_vmalloc(&buf->vb);
332
333         if (!tmpbuf)
334                 return;
335
336         for (h = 0; h < hmax; h++) {
337                 gen_line(tmpbuf, 0, wmax, hmax, h, dev->mv_count,
338                          dev->timestr);
339                 /* FIXME: replacing to __copy_to_user */
340                 if (copy_to_user(vbuf + pos, tmpbuf, wmax * 2) != 0)
341                         dprintk(dev, 2, "vivifill copy_to_user failed.\n");
342                 pos += wmax*2;
343         }
344
345         dev->mv_count++;
346
347         kfree(tmpbuf);
348
349         /* Updates stream time */
350
351         dev->us += jiffies_to_usecs(jiffies-dev->jiffies);
352         dev->jiffies = jiffies;
353         if (dev->us >= 1000000) {
354                 dev->us -= 1000000;
355                 dev->s++;
356                 if (dev->s >= 60) {
357                         dev->s -= 60;
358                         dev->m++;
359                         if (dev->m > 60) {
360                                 dev->m -= 60;
361                                 dev->h++;
362                                 if (dev->h > 24)
363                                         dev->h -= 24;
364                         }
365                 }
366         }
367         sprintf(dev->timestr, "%02d:%02d:%02d:%03d",
368                         dev->h, dev->m, dev->s,  (dev->us + 500) / 1000);
369
370         dprintk(dev, 2, "vivifill at %s: Buffer 0x%08lx size= %d\n",
371                         dev->timestr, (unsigned long)tmpbuf, pos);
372
373         /* Advice that buffer was filled */
374         buf->vb.state = VIDEOBUF_DONE;
375         buf->vb.field_count++;
376         do_gettimeofday(&ts);
377         buf->vb.ts = ts;
378
379         list_del(&buf->vb.queue);
380         wake_up(&buf->vb.done);
381 }
382
383 static int restart_video_queue(struct vivi_dmaqueue *dma_q);
384
385 static void vivi_thread_tick(struct vivi_dmaqueue  *dma_q)
386 {
387         struct vivi_buffer    *buf;
388         struct vivi_dev *dev = container_of(dma_q, struct vivi_dev, vidq);
389
390         int bc;
391
392         spin_lock(&dev->slock);
393         /* Announces videobuf that all went ok */
394         for (bc = 0;; bc++) {
395                 if (list_empty(&dma_q->active)) {
396                         dprintk(dev, 1, "No active queue to serve\n");
397                         break;
398                 }
399
400                 buf = list_entry(dma_q->active.next,
401                                  struct vivi_buffer, vb.queue);
402
403                 /* Nobody is waiting something to be done, just return */
404                 if (!waitqueue_active(&buf->vb.done)) {
405                         mod_timer(&dma_q->timeout, jiffies+BUFFER_TIMEOUT);
406                         spin_unlock(&dev->slock);
407                         return;
408                 }
409
410                 do_gettimeofday(&buf->vb.ts);
411                 dprintk(dev, 2, "[%p/%d] wakeup\n", buf, buf->vb. i);
412
413                 /* Fill buffer */
414                 vivi_fillbuff(dev, buf);
415
416                 if (list_empty(&dma_q->active)) {
417                         del_timer(&dma_q->timeout);
418                 } else {
419                         mod_timer(&dma_q->timeout, jiffies + BUFFER_TIMEOUT);
420                 }
421         }
422         if (bc != 1)
423                 dprintk(dev, 1, "%s: %d buffers handled (should be 1)\n",
424                         __FUNCTION__, bc);
425         spin_unlock(&dev->slock);
426 }
427
428 #define frames_to_ms(frames)                                    \
429         ((frames * WAKE_NUMERATOR * 1000) / WAKE_DENOMINATOR)
430
431 static void vivi_sleep(struct vivi_dmaqueue  *dma_q)
432 {
433         struct vivi_dev *dev = container_of(dma_q, struct vivi_dev, vidq);
434         int timeout, running_time;
435         DECLARE_WAITQUEUE(wait, current);
436
437         dprintk(dev, 1, "%s dma_q=0x%08lx\n", __FUNCTION__,
438                 (unsigned long)dma_q);
439
440         add_wait_queue(&dma_q->wq, &wait);
441         if (kthread_should_stop())
442                 goto stop_task;
443
444         running_time = jiffies - dma_q->ini_jiffies;
445         dma_q->frame++;
446
447         /* Calculate time to wake up */
448         timeout = msecs_to_jiffies(frames_to_ms(dma_q->frame)) - running_time;
449
450         if (timeout > msecs_to_jiffies(frames_to_ms(2)) || timeout <= 0) {
451                 int old = dma_q->frame;
452                 int nframes;
453
454                 dma_q->frame = (jiffies_to_msecs(running_time) /
455                                frames_to_ms(1)) + 1;
456
457                 timeout = msecs_to_jiffies(frames_to_ms(dma_q->frame))
458                           - running_time;
459
460                 if (unlikely (timeout <= 0))
461                         timeout = 1;
462
463                 nframes = (dma_q->frame > old)?
464                                   dma_q->frame - old : old - dma_q->frame;
465
466                 dprintk(dev, 1, "%ld: %s %d frames. "
467                         "Current frame is %d. Will sleep for %d jiffies\n",
468                         jiffies,
469                         (dma_q->frame > old)? "Underrun, losed" : "Overrun of",
470                         nframes, dma_q->frame, timeout);
471         } else
472                 dprintk(dev, 1, "will sleep for %d jiffies\n", timeout);
473
474         vivi_thread_tick(dma_q);
475
476         schedule_timeout_interruptible(timeout);
477
478 stop_task:
479         remove_wait_queue(&dma_q->wq, &wait);
480         try_to_freeze();
481 }
482
483 static int vivi_thread(void *data)
484 {
485         struct vivi_dmaqueue  *dma_q = data;
486         struct vivi_dev *dev = container_of(dma_q, struct vivi_dev, vidq);
487
488         dprintk(dev, 1, "thread started\n");
489
490         mod_timer(&dma_q->timeout, jiffies+BUFFER_TIMEOUT);
491         set_freezable();
492
493         for (;;) {
494                 vivi_sleep(dma_q);
495
496                 if (kthread_should_stop())
497                         break;
498         }
499         dprintk(dev, 1, "thread: exit\n");
500         return 0;
501 }
502
503 static int vivi_start_thread(struct vivi_dmaqueue  *dma_q)
504 {
505         struct vivi_dev *dev = container_of(dma_q, struct vivi_dev, vidq);
506
507         dma_q->frame = 0;
508         dma_q->ini_jiffies = jiffies;
509
510         dprintk(dev, 1, "%s\n", __FUNCTION__);
511
512         dma_q->kthread = kthread_run(vivi_thread, dma_q, "vivi");
513
514         if (IS_ERR(dma_q->kthread)) {
515                 printk(KERN_ERR "vivi: kernel_thread() failed\n");
516                 return PTR_ERR(dma_q->kthread);
517         }
518         /* Wakes thread */
519         wake_up_interruptible(&dma_q->wq);
520
521         dprintk(dev, 1, "returning from %s\n", __FUNCTION__);
522         return 0;
523 }
524
525 static void vivi_stop_thread(struct vivi_dmaqueue  *dma_q)
526 {
527         struct vivi_dev *dev = container_of(dma_q, struct vivi_dev, vidq);
528
529         dprintk(dev, 1, "%s\n", __FUNCTION__);
530         /* shutdown control thread */
531         if (dma_q->kthread) {
532                 kthread_stop(dma_q->kthread);
533                 dma_q->kthread = NULL;
534         }
535 }
536
537 static int restart_video_queue(struct vivi_dmaqueue *dma_q)
538 {
539         struct vivi_dev *dev = container_of(dma_q, struct vivi_dev, vidq);
540         struct vivi_buffer *buf, *prev;
541
542         dprintk(dev, 1, "%s dma_q=0x%08lx\n", __FUNCTION__,
543                 (unsigned long)dma_q);
544
545         if (!list_empty(&dma_q->active)) {
546                 buf = list_entry(dma_q->active.next,
547                                  struct vivi_buffer, vb.queue);
548                 dprintk(dev, 2, "restart_queue [%p/%d]: restart dma\n",
549                         buf, buf->vb.i);
550
551                 dprintk(dev, 1, "Restarting video dma\n");
552                 vivi_stop_thread(dma_q);
553
554                 /* cancel all outstanding capture / vbi requests */
555                 list_for_each_entry_safe(buf, prev, &dma_q->active, vb.queue) {
556                         list_del(&buf->vb.queue);
557                         buf->vb.state = VIDEOBUF_ERROR;
558                         wake_up(&buf->vb.done);
559                 }
560                 mod_timer(&dma_q->timeout, jiffies+BUFFER_TIMEOUT);
561
562                 return 0;
563         }
564
565         prev = NULL;
566         for (;;) {
567                 if (list_empty(&dma_q->queued))
568                         return 0;
569                 buf = list_entry(dma_q->queued.next,
570                                  struct vivi_buffer, vb.queue);
571                 if (NULL == prev) {
572                         list_del(&buf->vb.queue);
573                         list_add_tail(&buf->vb.queue, &dma_q->active);
574
575                         dprintk(dev, 1, "Restarting video dma\n");
576                         vivi_stop_thread(dma_q);
577                         vivi_start_thread(dma_q);
578
579                         buf->vb.state = VIDEOBUF_ACTIVE;
580                         mod_timer(&dma_q->timeout, jiffies+BUFFER_TIMEOUT);
581                         dprintk(dev, 2,
582                                 "[%p/%d] restart_queue - first active\n",
583                                 buf, buf->vb.i);
584
585                 } else if (prev->vb.width  == buf->vb.width  &&
586                            prev->vb.height == buf->vb.height &&
587                            prev->fmt       == buf->fmt) {
588                         list_del(&buf->vb.queue);
589                         list_add_tail(&buf->vb.queue, &dma_q->active);
590                         buf->vb.state = VIDEOBUF_ACTIVE;
591                         dprintk(dev, 2,
592                                 "[%p/%d] restart_queue - move to active\n",
593                                 buf, buf->vb.i);
594                 } else {
595                         return 0;
596                 }
597                 prev = buf;
598         }
599 }
600
601 static void vivi_vid_timeout(unsigned long data)
602 {
603         struct vivi_dev      *dev  = (struct vivi_dev *)data;
604         struct vivi_dmaqueue *vidq = &dev->vidq;
605         struct vivi_buffer   *buf;
606
607         spin_lock(&dev->slock);
608
609         while (!list_empty(&vidq->active)) {
610                 buf = list_entry(vidq->active.next,
611                                  struct vivi_buffer, vb.queue);
612                 list_del(&buf->vb.queue);
613                 buf->vb.state = VIDEOBUF_ERROR;
614                 wake_up(&buf->vb.done);
615                 printk(KERN_INFO "vivi/0: [%p/%d] timeout\n", buf, buf->vb.i);
616         }
617         restart_video_queue(vidq);
618
619         spin_unlock(&dev->slock);
620 }
621
622 /* ------------------------------------------------------------------
623         Videobuf operations
624    ------------------------------------------------------------------*/
625 static int
626 buffer_setup(struct videobuf_queue *vq, unsigned int *count, unsigned int *size)
627 {
628         struct vivi_fh  *fh = vq->priv_data;
629         struct vivi_dev *dev  = fh->dev;
630
631         *size = fh->width*fh->height*2;
632
633         if (0 == *count)
634                 *count = 32;
635
636         while (*size * *count > vid_limit * 1024 * 1024)
637                 (*count)--;
638
639         dprintk(dev, 1, "%s, count=%d, size=%d\n", __FUNCTION__,
640                 *count, *size);
641
642         return 0;
643 }
644
645 static void free_buffer(struct videobuf_queue *vq, struct vivi_buffer *buf)
646 {
647         struct vivi_fh  *fh = vq->priv_data;
648         struct vivi_dev *dev  = fh->dev;
649
650         dprintk(dev, 1, "%s\n", __FUNCTION__);
651
652         if (in_interrupt())
653                 BUG();
654
655         videobuf_waiton(&buf->vb, 0, 0);
656         videobuf_vmalloc_free(&buf->vb);
657         buf->vb.state = VIDEOBUF_NEEDS_INIT;
658 }
659
660 #define norm_maxw() 1024
661 #define norm_maxh() 768
662 static int
663 buffer_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb,
664                                                 enum v4l2_field field)
665 {
666         struct vivi_fh     *fh  = vq->priv_data;
667         struct vivi_dev    *dev = fh->dev;
668         struct vivi_buffer *buf = container_of(vb, struct vivi_buffer, vb);
669         int rc, init_buffer = 0;
670
671         dprintk(dev, 1, "%s, field=%d\n", __FUNCTION__, field);
672
673         BUG_ON(NULL == fh->fmt);
674         if (fh->width  < 48 || fh->width  > norm_maxw() ||
675             fh->height < 32 || fh->height > norm_maxh())
676                 return -EINVAL;
677         buf->vb.size = fh->width*fh->height*2;
678         if (0 != buf->vb.baddr  &&  buf->vb.bsize < buf->vb.size)
679                 return -EINVAL;
680
681         if (buf->fmt       != fh->fmt    ||
682             buf->vb.width  != fh->width  ||
683             buf->vb.height != fh->height ||
684         buf->vb.field  != field) {
685                 buf->fmt       = fh->fmt;
686                 buf->vb.width  = fh->width;
687                 buf->vb.height = fh->height;
688                 buf->vb.field  = field;
689                 init_buffer = 1;
690         }
691
692         if (VIDEOBUF_NEEDS_INIT == buf->vb.state) {
693                 rc = videobuf_iolock(vq, &buf->vb, NULL);
694                 if (rc < 0)
695                         goto fail;
696         }
697
698         buf->vb.state = VIDEOBUF_PREPARED;
699
700         return 0;
701
702 fail:
703         free_buffer(vq, buf);
704         return rc;
705 }
706
707 static void
708 buffer_queue(struct videobuf_queue *vq, struct videobuf_buffer *vb)
709 {
710         struct vivi_buffer    *buf  = container_of(vb, struct vivi_buffer, vb);
711         struct vivi_fh        *fh   = vq->priv_data;
712         struct vivi_dev       *dev  = fh->dev;
713         struct vivi_dmaqueue  *vidq = &dev->vidq;
714         struct vivi_buffer    *prev;
715
716         if (!list_empty(&vidq->queued)) {
717                 dprintk(dev, 1, "adding vb queue=0x%08lx\n",
718                         (unsigned long)&buf->vb.queue);
719                 list_add_tail(&buf->vb.queue, &vidq->queued);
720                 buf->vb.state = VIDEOBUF_QUEUED;
721                 dprintk(dev, 2, "[%p/%d] buffer_queue - append to queued\n",
722                         buf, buf->vb.i);
723         } else if (list_empty(&vidq->active)) {
724                 list_add_tail(&buf->vb.queue, &vidq->active);
725
726                 buf->vb.state = VIDEOBUF_ACTIVE;
727                 mod_timer(&vidq->timeout, jiffies+BUFFER_TIMEOUT);
728                 dprintk(dev, 2, "[%p/%d] buffer_queue - first active\n",
729                         buf, buf->vb.i);
730
731                 vivi_start_thread(vidq);
732         } else {
733                 prev = list_entry(vidq->active.prev,
734                                   struct vivi_buffer, vb.queue);
735                 if (prev->vb.width  == buf->vb.width  &&
736                     prev->vb.height == buf->vb.height &&
737                     prev->fmt       == buf->fmt) {
738                         list_add_tail(&buf->vb.queue, &vidq->active);
739                         buf->vb.state = VIDEOBUF_ACTIVE;
740                         dprintk(dev, 2,
741                                 "[%p/%d] buffer_queue - append to active\n",
742                                 buf, buf->vb.i);
743
744                 } else {
745                         list_add_tail(&buf->vb.queue, &vidq->queued);
746                         buf->vb.state = VIDEOBUF_QUEUED;
747                         dprintk(dev, 2,
748                                 "[%p/%d] buffer_queue - first queued\n",
749                                 buf, buf->vb.i);
750                 }
751         }
752 }
753
754 static void buffer_release(struct videobuf_queue *vq,
755                            struct videobuf_buffer *vb)
756 {
757         struct vivi_buffer   *buf  = container_of(vb, struct vivi_buffer, vb);
758         struct vivi_fh       *fh   = vq->priv_data;
759         struct vivi_dev      *dev  = (struct vivi_dev *)fh->dev;
760         struct vivi_dmaqueue *vidq = &dev->vidq;
761
762         dprintk(dev, 1, "%s\n", __FUNCTION__);
763
764         vivi_stop_thread(vidq);
765
766         free_buffer(vq, buf);
767 }
768
769 static struct videobuf_queue_ops vivi_video_qops = {
770         .buf_setup      = buffer_setup,
771         .buf_prepare    = buffer_prepare,
772         .buf_queue      = buffer_queue,
773         .buf_release    = buffer_release,
774 };
775
776 /* ------------------------------------------------------------------
777         IOCTL vidioc handling
778    ------------------------------------------------------------------*/
779 static int vidioc_querycap(struct file *file, void  *priv,
780                                         struct v4l2_capability *cap)
781 {
782         strcpy(cap->driver, "vivi");
783         strcpy(cap->card, "vivi");
784         cap->version = VIVI_VERSION;
785         cap->capabilities =     V4L2_CAP_VIDEO_CAPTURE |
786                                 V4L2_CAP_STREAMING     |
787                                 V4L2_CAP_READWRITE;
788         return 0;
789 }
790
791 static int vidioc_enum_fmt_cap(struct file *file, void  *priv,
792                                         struct v4l2_fmtdesc *f)
793 {
794         if (f->index > 0)
795                 return -EINVAL;
796
797         strlcpy(f->description, format.name, sizeof(f->description));
798         f->pixelformat = format.fourcc;
799         return 0;
800 }
801
802 static int vidioc_g_fmt_cap(struct file *file, void *priv,
803                                         struct v4l2_format *f)
804 {
805         struct vivi_fh *fh = priv;
806
807         f->fmt.pix.width        = fh->width;
808         f->fmt.pix.height       = fh->height;
809         f->fmt.pix.field        = fh->vb_vidq.field;
810         f->fmt.pix.pixelformat  = fh->fmt->fourcc;
811         f->fmt.pix.bytesperline =
812                 (f->fmt.pix.width * fh->fmt->depth) >> 3;
813         f->fmt.pix.sizeimage =
814                 f->fmt.pix.height * f->fmt.pix.bytesperline;
815
816         return (0);
817 }
818
819 static int vidioc_try_fmt_cap(struct file *file, void *priv,
820                         struct v4l2_format *f)
821 {
822         struct vivi_fh  *fh  = priv;
823         struct vivi_dev *dev = fh->dev;
824         struct vivi_fmt *fmt;
825         enum v4l2_field field;
826         unsigned int maxw, maxh;
827
828         if (format.fourcc != f->fmt.pix.pixelformat) {
829                 dprintk(dev, 1, "Fourcc format (0x%08x) invalid. "
830                         "Driver accepts only 0x%08x\n",
831                         f->fmt.pix.pixelformat, format.fourcc);
832                 return -EINVAL;
833         }
834         fmt = &format;
835
836         field = f->fmt.pix.field;
837
838         if (field == V4L2_FIELD_ANY) {
839                 field = V4L2_FIELD_INTERLACED;
840         } else if (V4L2_FIELD_INTERLACED != field) {
841                 dprintk(dev, 1, "Field type invalid.\n");
842                 return -EINVAL;
843         }
844
845         maxw  = norm_maxw();
846         maxh  = norm_maxh();
847
848         f->fmt.pix.field = field;
849         if (f->fmt.pix.height < 32)
850                 f->fmt.pix.height = 32;
851         if (f->fmt.pix.height > maxh)
852                 f->fmt.pix.height = maxh;
853         if (f->fmt.pix.width < 48)
854                 f->fmt.pix.width = 48;
855         if (f->fmt.pix.width > maxw)
856                 f->fmt.pix.width = maxw;
857         f->fmt.pix.width &= ~0x03;
858         f->fmt.pix.bytesperline =
859                 (f->fmt.pix.width * fmt->depth) >> 3;
860         f->fmt.pix.sizeimage =
861                 f->fmt.pix.height * f->fmt.pix.bytesperline;
862
863         return 0;
864 }
865
866 /*FIXME: This seems to be generic enough to be at videodev2 */
867 static int vidioc_s_fmt_cap(struct file *file, void *priv,
868                                         struct v4l2_format *f)
869 {
870         struct vivi_fh  *fh = priv;
871         int ret = vidioc_try_fmt_cap(file, fh, f);
872         if (ret < 0)
873                 return (ret);
874
875         fh->fmt           = &format;
876         fh->width         = f->fmt.pix.width;
877         fh->height        = f->fmt.pix.height;
878         fh->vb_vidq.field = f->fmt.pix.field;
879         fh->type          = f->type;
880
881         return (0);
882 }
883
884 static int vidioc_reqbufs(struct file *file, void *priv,
885                           struct v4l2_requestbuffers *p)
886 {
887         struct vivi_fh  *fh = priv;
888
889         return (videobuf_reqbufs(&fh->vb_vidq, p));
890 }
891
892 static int vidioc_querybuf(struct file *file, void *priv, struct v4l2_buffer *p)
893 {
894         struct vivi_fh  *fh = priv;
895
896         return (videobuf_querybuf(&fh->vb_vidq, p));
897 }
898
899 static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *p)
900 {
901         struct vivi_fh *fh = priv;
902
903         return (videobuf_qbuf(&fh->vb_vidq, p));
904 }
905
906 static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p)
907 {
908         struct vivi_fh  *fh = priv;
909
910         return (videobuf_dqbuf(&fh->vb_vidq, p,
911                                 file->f_flags & O_NONBLOCK));
912 }
913
914 #ifdef CONFIG_VIDEO_V4L1_COMPAT
915 static int vidiocgmbuf(struct file *file, void *priv, struct video_mbuf *mbuf)
916 {
917         struct vivi_fh  *fh = priv;
918
919         return videobuf_cgmbuf(&fh->vb_vidq, mbuf, 8);
920 }
921 #endif
922
923 static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i)
924 {
925         struct vivi_fh  *fh = priv;
926
927         if (fh->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
928                 return -EINVAL;
929         if (i != fh->type)
930                 return -EINVAL;
931
932         return videobuf_streamon(&fh->vb_vidq);
933 }
934
935 static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type i)
936 {
937         struct vivi_fh  *fh = priv;
938
939         if (fh->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
940                 return -EINVAL;
941         if (i != fh->type)
942                 return -EINVAL;
943
944         return videobuf_streamoff(&fh->vb_vidq);
945 }
946
947 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *i)
948 {
949         return 0;
950 }
951
952 /* only one input in this sample driver */
953 static int vidioc_enum_input(struct file *file, void *priv,
954                                 struct v4l2_input *inp)
955 {
956         if (inp->index != 0)
957                 return -EINVAL;
958
959         inp->type = V4L2_INPUT_TYPE_CAMERA;
960         inp->std = V4L2_STD_525_60;
961         strcpy(inp->name, "Camera");
962
963         return (0);
964 }
965
966 static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
967 {
968         *i = 0;
969
970         return (0);
971 }
972 static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
973 {
974         if (i > 0)
975                 return -EINVAL;
976
977         return (0);
978 }
979
980         /* --- controls ---------------------------------------------- */
981 static int vidioc_queryctrl(struct file *file, void *priv,
982                             struct v4l2_queryctrl *qc)
983 {
984         int i;
985
986         for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
987                 if (qc->id && qc->id == vivi_qctrl[i].id) {
988                         memcpy(qc, &(vivi_qctrl[i]),
989                                 sizeof(*qc));
990                         return (0);
991                 }
992
993         return -EINVAL;
994 }
995
996 static int vidioc_g_ctrl(struct file *file, void *priv,
997                          struct v4l2_control *ctrl)
998 {
999         int i;
1000
1001         for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
1002                 if (ctrl->id == vivi_qctrl[i].id) {
1003                         ctrl->value = qctl_regs[i];
1004                         return (0);
1005                 }
1006
1007         return -EINVAL;
1008 }
1009 static int vidioc_s_ctrl(struct file *file, void *priv,
1010                                 struct v4l2_control *ctrl)
1011 {
1012         int i;
1013
1014         for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
1015                 if (ctrl->id == vivi_qctrl[i].id) {
1016                         if (ctrl->value < vivi_qctrl[i].minimum
1017                             || ctrl->value > vivi_qctrl[i].maximum) {
1018                                         return (-ERANGE);
1019                                 }
1020                         qctl_regs[i] = ctrl->value;
1021                         return (0);
1022                 }
1023         return -EINVAL;
1024 }
1025
1026 /* ------------------------------------------------------------------
1027         File operations for the device
1028    ------------------------------------------------------------------*/
1029
1030 #define line_buf_size(norm) (norm_maxw(norm)*(format.depth+7)/8)
1031
1032 static int vivi_open(struct inode *inode, struct file *file)
1033 {
1034         int minor = iminor(inode);
1035         struct vivi_dev *dev;
1036         struct vivi_fh *fh;
1037         int i;
1038
1039         printk(KERN_DEBUG "vivi: open called (minor=%d)\n", minor);
1040
1041         list_for_each_entry(dev, &vivi_devlist, vivi_devlist)
1042                 if (dev->vfd->minor == minor)
1043                         goto found;
1044         return -ENODEV;
1045
1046 found:
1047         /* If more than one user, mutex should be added */
1048         dev->users++;
1049
1050         dprintk(dev, 1, "open minor=%d type=%s users=%d\n", minor,
1051                 v4l2_type_names[V4L2_BUF_TYPE_VIDEO_CAPTURE], dev->users);
1052
1053         /* allocate + initialize per filehandle data */
1054         fh = kzalloc(sizeof(*fh), GFP_KERNEL);
1055         if (NULL == fh) {
1056                 dev->users--;
1057                 return -ENOMEM;
1058         }
1059
1060         file->private_data = fh;
1061         fh->dev      = dev;
1062
1063         fh->type     = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1064         fh->fmt      = &format;
1065         fh->width    = 640;
1066         fh->height   = 480;
1067
1068         /* Put all controls at a sane state */
1069         for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
1070                 qctl_regs[i] = vivi_qctrl[i].default_value;
1071
1072         /* Resets frame counters */
1073         dev->h = 0;
1074         dev->m = 0;
1075         dev->s = 0;
1076         dev->us = 0;
1077         dev->mv_count = 0;
1078         dev->jiffies = jiffies;
1079         sprintf(dev->timestr, "%02d:%02d:%02d:%03d",
1080                         dev->h, dev->m, dev->s, (dev->us + 500) / 1000);
1081
1082         videobuf_queue_vmalloc_init(&fh->vb_vidq, &vivi_video_qops,
1083                         NULL, &dev->slock, fh->type, V4L2_FIELD_INTERLACED,
1084                         sizeof(struct vivi_buffer), fh);
1085
1086         return 0;
1087 }
1088
1089 static ssize_t
1090 vivi_read(struct file *file, char __user *data, size_t count, loff_t *ppos)
1091 {
1092         struct vivi_fh *fh = file->private_data;
1093
1094         if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
1095                 return videobuf_read_stream(&fh->vb_vidq, data, count, ppos, 0,
1096                                         file->f_flags & O_NONBLOCK);
1097         }
1098         return 0;
1099 }
1100
1101 static unsigned int
1102 vivi_poll(struct file *file, struct poll_table_struct *wait)
1103 {
1104         struct vivi_fh        *fh = file->private_data;
1105         struct vivi_dev       *dev = fh->dev;
1106         struct videobuf_queue *q = &fh->vb_vidq;
1107
1108         dprintk(dev, 1, "%s\n", __FUNCTION__);
1109
1110         if (V4L2_BUF_TYPE_VIDEO_CAPTURE != fh->type)
1111                 return POLLERR;
1112
1113         return videobuf_poll_stream(file, q, wait);
1114 }
1115
1116 static int vivi_close(struct inode *inode, struct file *file)
1117 {
1118         struct vivi_fh         *fh = file->private_data;
1119         struct vivi_dev *dev       = fh->dev;
1120         struct vivi_dmaqueue *vidq = &dev->vidq;
1121
1122         int minor = iminor(inode);
1123
1124         vivi_stop_thread(vidq);
1125         videobuf_stop(&fh->vb_vidq);
1126         videobuf_mmap_free(&fh->vb_vidq);
1127
1128         kfree(fh);
1129
1130         dev->users--;
1131
1132         dprintk(dev, 1, "close called (minor=%d, users=%d)\n",
1133                 minor, dev->users);
1134
1135         return 0;
1136 }
1137
1138 static int vivi_release(void)
1139 {
1140         struct vivi_dev *dev;
1141         struct list_head *list;
1142
1143         while (!list_empty(&vivi_devlist)) {
1144                 list = vivi_devlist.next;
1145                 list_del(list);
1146                 dev = list_entry(list, struct vivi_dev, vivi_devlist);
1147
1148                 if (-1 != dev->vfd->minor)
1149                         video_unregister_device(dev->vfd);
1150                 else
1151                         video_device_release(dev->vfd);
1152
1153                 kfree(dev);
1154         }
1155
1156         return 0;
1157 }
1158
1159 static int vivi_mmap(struct file *file, struct vm_area_struct *vma)
1160 {
1161         struct vivi_fh  *fh = file->private_data;
1162         struct vivi_dev *dev = fh->dev;
1163         int ret;
1164
1165         dprintk(dev, 1, "mmap called, vma=0x%08lx\n", (unsigned long)vma);
1166
1167         ret = videobuf_mmap_mapper(&fh->vb_vidq, vma);
1168
1169         dprintk(dev, 1, "vma start=0x%08lx, size=%ld, ret=%d\n",
1170                 (unsigned long)vma->vm_start,
1171                 (unsigned long)vma->vm_end-(unsigned long)vma->vm_start,
1172                 ret);
1173
1174         return ret;
1175 }
1176
1177 static const struct file_operations vivi_fops = {
1178         .owner          = THIS_MODULE,
1179         .open           = vivi_open,
1180         .release        = vivi_close,
1181         .read           = vivi_read,
1182         .poll           = vivi_poll,
1183         .ioctl          = video_ioctl2, /* V4L2 ioctl handler */
1184         .mmap           = vivi_mmap,
1185         .llseek         = no_llseek,
1186 };
1187
1188 static struct video_device vivi_template = {
1189         .name           = "vivi",
1190         .type           = VID_TYPE_CAPTURE,
1191         .fops           = &vivi_fops,
1192         .minor          = -1,
1193         .release        = video_device_release,
1194
1195         .vidioc_querycap      = vidioc_querycap,
1196         .vidioc_enum_fmt_cap  = vidioc_enum_fmt_cap,
1197         .vidioc_g_fmt_cap     = vidioc_g_fmt_cap,
1198         .vidioc_try_fmt_cap   = vidioc_try_fmt_cap,
1199         .vidioc_s_fmt_cap     = vidioc_s_fmt_cap,
1200         .vidioc_reqbufs       = vidioc_reqbufs,
1201         .vidioc_querybuf      = vidioc_querybuf,
1202         .vidioc_qbuf          = vidioc_qbuf,
1203         .vidioc_dqbuf         = vidioc_dqbuf,
1204         .vidioc_s_std         = vidioc_s_std,
1205         .vidioc_enum_input    = vidioc_enum_input,
1206         .vidioc_g_input       = vidioc_g_input,
1207         .vidioc_s_input       = vidioc_s_input,
1208         .vidioc_queryctrl     = vidioc_queryctrl,
1209         .vidioc_g_ctrl        = vidioc_g_ctrl,
1210         .vidioc_s_ctrl        = vidioc_s_ctrl,
1211         .vidioc_streamon      = vidioc_streamon,
1212         .vidioc_streamoff     = vidioc_streamoff,
1213 #ifdef CONFIG_VIDEO_V4L1_COMPAT
1214         .vidiocgmbuf          = vidiocgmbuf,
1215 #endif
1216         .tvnorms              = V4L2_STD_525_60,
1217         .current_norm         = V4L2_STD_NTSC_M,
1218 };
1219 /* -----------------------------------------------------------------
1220         Initialization and module stuff
1221    ------------------------------------------------------------------*/
1222
1223 static int __init vivi_init(void)
1224 {
1225         int ret = -ENOMEM, i;
1226         struct vivi_dev *dev;
1227         struct video_device *vfd;
1228
1229         for (i = 0; i < n_devs; i++) {
1230                 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1231                 if (NULL == dev)
1232                         break;
1233
1234                 list_add_tail(&dev->vivi_devlist, &vivi_devlist);
1235
1236                 /* init video dma queues */
1237                 INIT_LIST_HEAD(&dev->vidq.active);
1238                 INIT_LIST_HEAD(&dev->vidq.queued);
1239                 init_waitqueue_head(&dev->vidq.wq);
1240
1241                 /* initialize locks */
1242                 mutex_init(&dev->lock);
1243                 spin_lock_init(&dev->slock);
1244
1245                 dev->vidq.timeout.function = vivi_vid_timeout;
1246                 dev->vidq.timeout.data     = (unsigned long)dev;
1247                 init_timer(&dev->vidq.timeout);
1248
1249                 vfd = video_device_alloc();
1250                 if (NULL == vfd)
1251                         break;
1252
1253                 *vfd = vivi_template;
1254
1255                 ret = video_register_device(vfd, VFL_TYPE_GRABBER, video_nr);
1256                 if (ret < 0)
1257                         break;
1258
1259                 snprintf(vfd->name, sizeof(vfd->name), "%s (%i)",
1260                          vivi_template.name, vfd->minor);
1261
1262                 if (video_nr >= 0)
1263                         video_nr++;
1264
1265                 dev->vfd = vfd;
1266         }
1267
1268         if (ret < 0) {
1269                 vivi_release();
1270                 printk(KERN_INFO "Error %d while loading vivi driver\n", ret);
1271         } else
1272                 printk(KERN_INFO "Video Technology Magazine Virtual Video "
1273                                  "Capture Board successfully loaded.\n");
1274         return ret;
1275 }
1276
1277 static void __exit vivi_exit(void)
1278 {
1279         vivi_release();
1280 }
1281
1282 module_init(vivi_init);
1283 module_exit(vivi_exit);
1284
1285 MODULE_DESCRIPTION("Video Technology Magazine Virtual Video Capture Board");
1286 MODULE_AUTHOR("Mauro Carvalho Chehab, Ted Walther and John Sokol");
1287 MODULE_LICENSE("Dual BSD/GPL");
1288
1289 module_param(video_nr, int, 0);
1290 MODULE_PARM_DESC(video_nr, "video iminor start number");
1291
1292 module_param(n_devs, int, 0);
1293 MODULE_PARM_DESC(n_devs, "number of video devices to create");
1294
1295 module_param_named(debug, vivi_template.debug, int, 0444);
1296 MODULE_PARM_DESC(debug, "activates debug info");
1297
1298 module_param(vid_limit, int, 0644);
1299 MODULE_PARM_DESC(vid_limit, "capture memory limit in megabytes");