2 * Virtual Video driver - This code emulates a real video device with v4l2 api
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/
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
15 #include <linux/module.h>
16 #include <linux/delay.h>
17 #include <linux/errno.h>
19 #include <linux/kernel.h>
20 #include <linux/slab.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>
35 #include <linux/interrupt.h>
36 #include <media/videobuf-vmalloc.h>
37 #include <media/v4l2-common.h>
38 #include <media/v4l2-ioctl.h>
39 #include <linux/kthread.h>
40 #include <linux/highmem.h>
41 #include <linux/freezer.h>
43 #define VIVI_MODULE_NAME "vivi"
45 /* Wake up at about 30 fps */
46 #define WAKE_NUMERATOR 30
47 #define WAKE_DENOMINATOR 1001
48 #define BUFFER_TIMEOUT msecs_to_jiffies(500) /* 0.5 seconds */
52 #define VIVI_MAJOR_VERSION 0
53 #define VIVI_MINOR_VERSION 5
54 #define VIVI_RELEASE 0
55 #define VIVI_VERSION \
56 KERNEL_VERSION(VIVI_MAJOR_VERSION, VIVI_MINOR_VERSION, VIVI_RELEASE)
58 /* Declare static vars that will be used as parameters */
59 static unsigned int vid_limit = 16; /* Video memory limit, in Mb */
60 static int video_nr = -1; /* /dev/videoN, -1 for autodetect */
61 static int n_devs = 1; /* Number of virtual devices */
63 /* supported controls */
64 static struct v4l2_queryctrl vivi_qctrl[] = {
66 .id = V4L2_CID_AUDIO_VOLUME,
71 .default_value = 65535,
73 .type = V4L2_CTRL_TYPE_INTEGER,
75 .id = V4L2_CID_BRIGHTNESS,
76 .type = V4L2_CTRL_TYPE_INTEGER,
84 .id = V4L2_CID_CONTRAST,
85 .type = V4L2_CTRL_TYPE_INTEGER,
90 .default_value = 0x10,
93 .id = V4L2_CID_SATURATION,
94 .type = V4L2_CTRL_TYPE_INTEGER,
103 .type = V4L2_CTRL_TYPE_INTEGER,
113 static int qctl_regs[ARRAY_SIZE(vivi_qctrl)];
115 #define dprintk(dev, level, fmt, arg...) \
117 if (dev->vfd->debug >= (level)) \
118 printk(KERN_DEBUG "vivi: " fmt , ## arg); \
121 /* ------------------------------------------------------------------
123 ------------------------------------------------------------------*/
127 u32 fourcc; /* v4l2 format id */
131 static struct vivi_fmt formats[] = {
133 .name = "4:2:2, packed, YUYV",
134 .fourcc = V4L2_PIX_FMT_YUYV,
138 .name = "4:2:2, packed, UYVY",
139 .fourcc = V4L2_PIX_FMT_UYVY,
144 static struct vivi_fmt *get_format(struct v4l2_format *f)
146 struct vivi_fmt *fmt;
149 for (k = 0; k < ARRAY_SIZE(formats); k++) {
151 if (fmt->fourcc == f->fmt.pix.pixelformat)
155 if (k == ARRAY_SIZE(formats))
163 struct scatterlist *sg;
166 /* buffer for one video frame */
168 /* common v4l buffer stuff -- must be first */
169 struct videobuf_buffer vb;
171 struct vivi_fmt *fmt;
174 struct vivi_dmaqueue {
175 struct list_head active;
177 /* thread for generating video stream*/
178 struct task_struct *kthread;
179 wait_queue_head_t wq;
180 /* Counters to control fps rate */
185 static LIST_HEAD(vivi_devlist);
188 struct list_head vivi_devlist;
195 /* various device info */
196 struct video_device *vfd;
198 struct vivi_dmaqueue vidq;
200 /* Several counters */
202 unsigned long jiffies;
205 int mv_count; /* Controls bars movement */
209 struct vivi_dev *dev;
212 struct vivi_fmt *fmt;
213 unsigned int width, height;
214 struct videobuf_queue vb_vidq;
216 enum v4l2_buf_type type;
217 unsigned char bars[8][3];
220 /* ------------------------------------------------------------------
221 DMA and thread functions
222 ------------------------------------------------------------------*/
224 /* Bars and Colors should match positions */
237 static u8 bars[8][3] = {
239 {204, 204, 204}, /* white */
240 {208, 208, 0}, /* ambar */
241 { 0, 206, 206}, /* cyan */
242 { 0, 239, 0}, /* green */
243 {239, 0, 239}, /* magenta */
244 {205, 0, 0}, /* red */
245 { 0, 0, 255}, /* blue */
246 { 0, 0, 0}, /* black */
249 #define TO_Y(r, g, b) \
250 (((16829 * r + 33039 * g + 6416 * b + 32768) >> 16) + 16)
251 /* RGB to V(Cr) Color transform */
252 #define TO_V(r, g, b) \
253 (((28784 * r - 24103 * g - 4681 * b + 32768) >> 16) + 128)
254 /* RGB to U(Cb) Color transform */
255 #define TO_U(r, g, b) \
256 (((-9714 * r - 19070 * g + 28784 * b + 32768) >> 16) + 128)
258 #define TSTAMP_MIN_Y 24
259 #define TSTAMP_MAX_Y TSTAMP_MIN_Y+15
260 #define TSTAMP_MIN_X 64
262 static void gen_twopix(struct vivi_fh *fh, unsigned char *buf, int colorpos)
264 unsigned char r_y, g_u, b_v;
268 r_y = fh->bars[colorpos][0]; /* R or precalculated Y */
269 g_u = fh->bars[colorpos][1]; /* G or precalculated U */
270 b_v = fh->bars[colorpos][2]; /* B or precalculated V */
272 for (color = 0; color < 4; color++) {
275 switch (fh->fmt->fourcc) {
276 case V4L2_PIX_FMT_YUYV:
290 case V4L2_PIX_FMT_UYVY:
308 static void gen_line(struct vivi_fh *fh, char *basep, int inipos, int wmax,
309 int hmax, int line, int count, char *timestr)
316 /* We will just duplicate the second pixel at the packet */
319 /* Generate a standard color bar pattern */
320 for (w = 0; w < wmax; w++) {
321 int colorpos = ((w + count) * 8/(wmax + 1)) % 8;
323 gen_twopix(fh, basep + pos, colorpos);
324 pos += 4; /* only 16 bpp supported for now */
327 /* Checks if it is possible to show timestamp */
328 if (TSTAMP_MAX_Y >= hmax)
330 if (TSTAMP_MIN_X + strlen(timestr) >= wmax)
333 /* Print stream time */
334 if (line >= TSTAMP_MIN_Y && line <= TSTAMP_MAX_Y) {
336 for (s = timestr; *s; s++) {
337 chr = rom8x16_bits[(*s-0x30)*16+line-TSTAMP_MIN_Y];
338 for (i = 0; i < 7; i++) {
339 pos = inipos + j * 2;
340 /* Draw white font on black background */
341 if (chr & 1 << (7 - i))
342 gen_twopix(fh, basep + pos, WHITE);
344 gen_twopix(fh, basep + pos, BLACK);
354 static void vivi_fillbuff(struct vivi_fh *fh, struct vivi_buffer *buf)
356 struct vivi_dev *dev = fh->dev;
358 int hmax = buf->vb.height;
359 int wmax = buf->vb.width;
362 void *vbuf = videobuf_to_vmalloc(&buf->vb);
367 tmpbuf = kmalloc(wmax * 2, GFP_ATOMIC);
371 for (h = 0; h < hmax; h++) {
372 gen_line(fh, tmpbuf, 0, wmax, hmax, h, dev->mv_count,
374 memcpy(vbuf + pos, tmpbuf, wmax * 2);
382 /* Updates stream time */
384 dev->ms += jiffies_to_msecs(jiffies-dev->jiffies);
385 dev->jiffies = jiffies;
386 if (dev->ms >= 1000) {
400 sprintf(dev->timestr, "%02d:%02d:%02d:%03d",
401 dev->h, dev->m, dev->s, dev->ms);
403 dprintk(dev, 2, "vivifill at %s: Buffer 0x%08lx size= %d\n",
404 dev->timestr, (unsigned long)tmpbuf, pos);
406 /* Advice that buffer was filled */
407 buf->vb.field_count++;
408 do_gettimeofday(&ts);
410 buf->vb.state = VIDEOBUF_DONE;
413 static void vivi_thread_tick(struct vivi_fh *fh)
415 struct vivi_buffer *buf;
416 struct vivi_dev *dev = fh->dev;
417 struct vivi_dmaqueue *dma_q = &dev->vidq;
419 unsigned long flags = 0;
421 dprintk(dev, 1, "Thread tick\n");
423 spin_lock_irqsave(&dev->slock, flags);
424 if (list_empty(&dma_q->active)) {
425 dprintk(dev, 1, "No active queue to serve\n");
429 buf = list_entry(dma_q->active.next,
430 struct vivi_buffer, vb.queue);
432 /* Nobody is waiting on this buffer, return */
433 if (!waitqueue_active(&buf->vb.done))
436 list_del(&buf->vb.queue);
438 do_gettimeofday(&buf->vb.ts);
441 vivi_fillbuff(fh, buf);
442 dprintk(dev, 1, "filled buffer %p\n", buf);
444 wake_up(&buf->vb.done);
445 dprintk(dev, 2, "[%p/%d] wakeup\n", buf, buf->vb. i);
447 spin_unlock_irqrestore(&dev->slock, flags);
451 #define frames_to_ms(frames) \
452 ((frames * WAKE_NUMERATOR * 1000) / WAKE_DENOMINATOR)
454 static void vivi_sleep(struct vivi_fh *fh)
456 struct vivi_dev *dev = fh->dev;
457 struct vivi_dmaqueue *dma_q = &dev->vidq;
459 DECLARE_WAITQUEUE(wait, current);
461 dprintk(dev, 1, "%s dma_q=0x%08lx\n", __func__,
462 (unsigned long)dma_q);
464 add_wait_queue(&dma_q->wq, &wait);
465 if (kthread_should_stop())
468 /* Calculate time to wake up */
469 timeout = msecs_to_jiffies(frames_to_ms(1));
471 vivi_thread_tick(fh);
473 schedule_timeout_interruptible(timeout);
476 remove_wait_queue(&dma_q->wq, &wait);
480 static int vivi_thread(void *data)
482 struct vivi_fh *fh = data;
483 struct vivi_dev *dev = fh->dev;
485 dprintk(dev, 1, "thread started\n");
492 if (kthread_should_stop())
495 dprintk(dev, 1, "thread: exit\n");
499 static int vivi_start_thread(struct vivi_fh *fh)
501 struct vivi_dev *dev = fh->dev;
502 struct vivi_dmaqueue *dma_q = &dev->vidq;
505 dma_q->ini_jiffies = jiffies;
507 dprintk(dev, 1, "%s\n", __func__);
509 dma_q->kthread = kthread_run(vivi_thread, fh, "vivi");
511 if (IS_ERR(dma_q->kthread)) {
512 printk(KERN_ERR "vivi: kernel_thread() failed\n");
513 return PTR_ERR(dma_q->kthread);
516 wake_up_interruptible(&dma_q->wq);
518 dprintk(dev, 1, "returning from %s\n", __func__);
522 static void vivi_stop_thread(struct vivi_dmaqueue *dma_q)
524 struct vivi_dev *dev = container_of(dma_q, struct vivi_dev, vidq);
526 dprintk(dev, 1, "%s\n", __func__);
527 /* shutdown control thread */
528 if (dma_q->kthread) {
529 kthread_stop(dma_q->kthread);
530 dma_q->kthread = NULL;
534 /* ------------------------------------------------------------------
536 ------------------------------------------------------------------*/
538 buffer_setup(struct videobuf_queue *vq, unsigned int *count, unsigned int *size)
540 struct vivi_fh *fh = vq->priv_data;
541 struct vivi_dev *dev = fh->dev;
543 *size = fh->width*fh->height*2;
548 while (*size * *count > vid_limit * 1024 * 1024)
551 dprintk(dev, 1, "%s, count=%d, size=%d\n", __func__,
557 static void free_buffer(struct videobuf_queue *vq, struct vivi_buffer *buf)
559 struct vivi_fh *fh = vq->priv_data;
560 struct vivi_dev *dev = fh->dev;
562 dprintk(dev, 1, "%s, state: %i\n", __func__, buf->vb.state);
567 videobuf_vmalloc_free(&buf->vb);
568 dprintk(dev, 1, "free_buffer: freed\n");
569 buf->vb.state = VIDEOBUF_NEEDS_INIT;
572 #define norm_maxw() 1024
573 #define norm_maxh() 768
575 buffer_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb,
576 enum v4l2_field field)
578 struct vivi_fh *fh = vq->priv_data;
579 struct vivi_dev *dev = fh->dev;
580 struct vivi_buffer *buf = container_of(vb, struct vivi_buffer, vb);
583 dprintk(dev, 1, "%s, field=%d\n", __func__, field);
585 BUG_ON(NULL == fh->fmt);
587 if (fh->width < 48 || fh->width > norm_maxw() ||
588 fh->height < 32 || fh->height > norm_maxh())
591 buf->vb.size = fh->width*fh->height*2;
592 if (0 != buf->vb.baddr && buf->vb.bsize < buf->vb.size)
595 /* These properties only change when queue is idle, see s_fmt */
597 buf->vb.width = fh->width;
598 buf->vb.height = fh->height;
599 buf->vb.field = field;
601 if (VIDEOBUF_NEEDS_INIT == buf->vb.state) {
602 rc = videobuf_iolock(vq, &buf->vb, NULL);
607 buf->vb.state = VIDEOBUF_PREPARED;
612 free_buffer(vq, buf);
617 buffer_queue(struct videobuf_queue *vq, struct videobuf_buffer *vb)
619 struct vivi_buffer *buf = container_of(vb, struct vivi_buffer, vb);
620 struct vivi_fh *fh = vq->priv_data;
621 struct vivi_dev *dev = fh->dev;
622 struct vivi_dmaqueue *vidq = &dev->vidq;
624 dprintk(dev, 1, "%s\n", __func__);
626 buf->vb.state = VIDEOBUF_QUEUED;
627 list_add_tail(&buf->vb.queue, &vidq->active);
630 static void buffer_release(struct videobuf_queue *vq,
631 struct videobuf_buffer *vb)
633 struct vivi_buffer *buf = container_of(vb, struct vivi_buffer, vb);
634 struct vivi_fh *fh = vq->priv_data;
635 struct vivi_dev *dev = (struct vivi_dev *)fh->dev;
637 dprintk(dev, 1, "%s\n", __func__);
639 free_buffer(vq, buf);
642 static struct videobuf_queue_ops vivi_video_qops = {
643 .buf_setup = buffer_setup,
644 .buf_prepare = buffer_prepare,
645 .buf_queue = buffer_queue,
646 .buf_release = buffer_release,
649 /* ------------------------------------------------------------------
650 IOCTL vidioc handling
651 ------------------------------------------------------------------*/
652 static int vidioc_querycap(struct file *file, void *priv,
653 struct v4l2_capability *cap)
655 strcpy(cap->driver, "vivi");
656 strcpy(cap->card, "vivi");
657 cap->version = VIVI_VERSION;
658 cap->capabilities = V4L2_CAP_VIDEO_CAPTURE |
664 static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv,
665 struct v4l2_fmtdesc *f)
667 struct vivi_fmt *fmt;
669 if (f->index >= ARRAY_SIZE(formats))
672 fmt = &formats[f->index];
674 strlcpy(f->description, fmt->name, sizeof(f->description));
675 f->pixelformat = fmt->fourcc;
679 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
680 struct v4l2_format *f)
682 struct vivi_fh *fh = priv;
684 f->fmt.pix.width = fh->width;
685 f->fmt.pix.height = fh->height;
686 f->fmt.pix.field = fh->vb_vidq.field;
687 f->fmt.pix.pixelformat = fh->fmt->fourcc;
688 f->fmt.pix.bytesperline =
689 (f->fmt.pix.width * fh->fmt->depth) >> 3;
690 f->fmt.pix.sizeimage =
691 f->fmt.pix.height * f->fmt.pix.bytesperline;
696 static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
697 struct v4l2_format *f)
699 struct vivi_fh *fh = priv;
700 struct vivi_dev *dev = fh->dev;
701 struct vivi_fmt *fmt;
702 enum v4l2_field field;
703 unsigned int maxw, maxh;
707 dprintk(dev, 1, "Fourcc format (0x%08x) invalid.\n",
708 f->fmt.pix.pixelformat);
712 field = f->fmt.pix.field;
714 if (field == V4L2_FIELD_ANY) {
715 field = V4L2_FIELD_INTERLACED;
716 } else if (V4L2_FIELD_INTERLACED != field) {
717 dprintk(dev, 1, "Field type invalid.\n");
724 f->fmt.pix.field = field;
725 if (f->fmt.pix.height < 32)
726 f->fmt.pix.height = 32;
727 if (f->fmt.pix.height > maxh)
728 f->fmt.pix.height = maxh;
729 if (f->fmt.pix.width < 48)
730 f->fmt.pix.width = 48;
731 if (f->fmt.pix.width > maxw)
732 f->fmt.pix.width = maxw;
733 f->fmt.pix.width &= ~0x03;
734 f->fmt.pix.bytesperline =
735 (f->fmt.pix.width * fmt->depth) >> 3;
736 f->fmt.pix.sizeimage =
737 f->fmt.pix.height * f->fmt.pix.bytesperline;
742 /*FIXME: This seems to be generic enough to be at videodev2 */
743 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
744 struct v4l2_format *f)
746 struct vivi_fh *fh = priv;
747 struct videobuf_queue *q = &fh->vb_vidq;
748 unsigned char r, g, b;
751 int ret = vidioc_try_fmt_vid_cap(file, fh, f);
755 mutex_lock(&q->vb_lock);
757 if (videobuf_queue_is_busy(&fh->vb_vidq)) {
758 dprintk(fh->dev, 1, "%s queue busy\n", __func__);
763 fh->fmt = get_format(f);
764 fh->width = f->fmt.pix.width;
765 fh->height = f->fmt.pix.height;
766 fh->vb_vidq.field = f->fmt.pix.field;
769 /* precalculate color bar values to speed up rendering */
770 for (k = 0; k < 8; k++) {
776 switch (fh->fmt->fourcc) {
777 case V4L2_PIX_FMT_YUYV:
778 case V4L2_PIX_FMT_UYVY:
784 fh->bars[k][0] = TO_Y(r, g, b); /* Luma */
785 fh->bars[k][1] = TO_U(r, g, b); /* Cb */
786 fh->bars[k][2] = TO_V(r, g, b); /* Cr */
796 mutex_unlock(&q->vb_lock);
801 static int vidioc_reqbufs(struct file *file, void *priv,
802 struct v4l2_requestbuffers *p)
804 struct vivi_fh *fh = priv;
806 return (videobuf_reqbufs(&fh->vb_vidq, p));
809 static int vidioc_querybuf(struct file *file, void *priv, struct v4l2_buffer *p)
811 struct vivi_fh *fh = priv;
813 return (videobuf_querybuf(&fh->vb_vidq, p));
816 static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *p)
818 struct vivi_fh *fh = priv;
820 return (videobuf_qbuf(&fh->vb_vidq, p));
823 static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p)
825 struct vivi_fh *fh = priv;
827 return (videobuf_dqbuf(&fh->vb_vidq, p,
828 file->f_flags & O_NONBLOCK));
831 #ifdef CONFIG_VIDEO_V4L1_COMPAT
832 static int vidiocgmbuf(struct file *file, void *priv, struct video_mbuf *mbuf)
834 struct vivi_fh *fh = priv;
836 return videobuf_cgmbuf(&fh->vb_vidq, mbuf, 8);
840 static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i)
842 struct vivi_fh *fh = priv;
844 if (fh->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
849 return videobuf_streamon(&fh->vb_vidq);
852 static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type i)
854 struct vivi_fh *fh = priv;
856 if (fh->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
861 return videobuf_streamoff(&fh->vb_vidq);
864 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *i)
869 /* only one input in this sample driver */
870 static int vidioc_enum_input(struct file *file, void *priv,
871 struct v4l2_input *inp)
876 inp->type = V4L2_INPUT_TYPE_CAMERA;
877 inp->std = V4L2_STD_525_60;
878 strcpy(inp->name, "Camera");
883 static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
889 static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
897 /* --- controls ---------------------------------------------- */
898 static int vidioc_queryctrl(struct file *file, void *priv,
899 struct v4l2_queryctrl *qc)
903 for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
904 if (qc->id && qc->id == vivi_qctrl[i].id) {
905 memcpy(qc, &(vivi_qctrl[i]),
913 static int vidioc_g_ctrl(struct file *file, void *priv,
914 struct v4l2_control *ctrl)
918 for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
919 if (ctrl->id == vivi_qctrl[i].id) {
920 ctrl->value = qctl_regs[i];
926 static int vidioc_s_ctrl(struct file *file, void *priv,
927 struct v4l2_control *ctrl)
931 for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
932 if (ctrl->id == vivi_qctrl[i].id) {
933 if (ctrl->value < vivi_qctrl[i].minimum
934 || ctrl->value > vivi_qctrl[i].maximum) {
937 qctl_regs[i] = ctrl->value;
943 /* ------------------------------------------------------------------
944 File operations for the device
945 ------------------------------------------------------------------*/
947 static int vivi_open(struct inode *inode, struct file *file)
949 int minor = iminor(inode);
950 struct vivi_dev *dev;
951 struct vivi_fh *fh = NULL;
955 printk(KERN_DEBUG "vivi: open called (minor=%d)\n", minor);
958 list_for_each_entry(dev, &vivi_devlist, vivi_devlist)
959 if (dev->vfd->minor == minor)
965 mutex_lock(&dev->mutex);
968 if (dev->users > 1) {
974 dprintk(dev, 1, "open minor=%d type=%s users=%d\n", minor,
975 v4l2_type_names[V4L2_BUF_TYPE_VIDEO_CAPTURE], dev->users);
977 /* allocate + initialize per filehandle data */
978 fh = kzalloc(sizeof(*fh), GFP_KERNEL);
985 mutex_unlock(&dev->mutex);
991 file->private_data = fh;
994 fh->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
995 fh->fmt = &formats[0];
999 /* Put all controls at a sane state */
1000 for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
1001 qctl_regs[i] = vivi_qctrl[i].default_value;
1003 /* Resets frame counters */
1009 dev->jiffies = jiffies;
1010 sprintf(dev->timestr, "%02d:%02d:%02d:%03d",
1011 dev->h, dev->m, dev->s, dev->ms);
1013 videobuf_queue_vmalloc_init(&fh->vb_vidq, &vivi_video_qops,
1014 NULL, &dev->slock, fh->type, V4L2_FIELD_INTERLACED,
1015 sizeof(struct vivi_buffer), fh);
1017 vivi_start_thread(fh);
1024 vivi_read(struct file *file, char __user *data, size_t count, loff_t *ppos)
1026 struct vivi_fh *fh = file->private_data;
1028 if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
1029 return videobuf_read_stream(&fh->vb_vidq, data, count, ppos, 0,
1030 file->f_flags & O_NONBLOCK);
1036 vivi_poll(struct file *file, struct poll_table_struct *wait)
1038 struct vivi_fh *fh = file->private_data;
1039 struct vivi_dev *dev = fh->dev;
1040 struct videobuf_queue *q = &fh->vb_vidq;
1042 dprintk(dev, 1, "%s\n", __func__);
1044 if (V4L2_BUF_TYPE_VIDEO_CAPTURE != fh->type)
1047 return videobuf_poll_stream(file, q, wait);
1050 static int vivi_close(struct inode *inode, struct file *file)
1052 struct vivi_fh *fh = file->private_data;
1053 struct vivi_dev *dev = fh->dev;
1054 struct vivi_dmaqueue *vidq = &dev->vidq;
1056 int minor = iminor(inode);
1058 vivi_stop_thread(vidq);
1059 videobuf_stop(&fh->vb_vidq);
1060 videobuf_mmap_free(&fh->vb_vidq);
1064 mutex_lock(&dev->mutex);
1066 mutex_unlock(&dev->mutex);
1068 dprintk(dev, 1, "close called (minor=%d, users=%d)\n",
1074 static int vivi_release(void)
1076 struct vivi_dev *dev;
1077 struct list_head *list;
1079 while (!list_empty(&vivi_devlist)) {
1080 list = vivi_devlist.next;
1082 dev = list_entry(list, struct vivi_dev, vivi_devlist);
1084 if (-1 != dev->vfd->minor) {
1085 printk(KERN_INFO "%s: unregistering /dev/video%d\n",
1086 VIVI_MODULE_NAME, dev->vfd->minor);
1087 video_unregister_device(dev->vfd);
1089 printk(KERN_INFO "%s: releasing /dev/video%d\n",
1090 VIVI_MODULE_NAME, dev->vfd->minor);
1091 video_device_release(dev->vfd);
1100 static int vivi_mmap(struct file *file, struct vm_area_struct *vma)
1102 struct vivi_fh *fh = file->private_data;
1103 struct vivi_dev *dev = fh->dev;
1106 dprintk(dev, 1, "mmap called, vma=0x%08lx\n", (unsigned long)vma);
1108 ret = videobuf_mmap_mapper(&fh->vb_vidq, vma);
1110 dprintk(dev, 1, "vma start=0x%08lx, size=%ld, ret=%d\n",
1111 (unsigned long)vma->vm_start,
1112 (unsigned long)vma->vm_end-(unsigned long)vma->vm_start,
1118 static const struct file_operations vivi_fops = {
1119 .owner = THIS_MODULE,
1121 .release = vivi_close,
1124 .ioctl = video_ioctl2, /* V4L2 ioctl handler */
1125 .compat_ioctl = v4l_compat_ioctl32,
1127 .llseek = no_llseek,
1130 static const struct v4l2_ioctl_ops vivi_ioctl_ops = {
1131 .vidioc_querycap = vidioc_querycap,
1132 .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap,
1133 .vidioc_g_fmt_vid_cap = vidioc_g_fmt_vid_cap,
1134 .vidioc_try_fmt_vid_cap = vidioc_try_fmt_vid_cap,
1135 .vidioc_s_fmt_vid_cap = vidioc_s_fmt_vid_cap,
1136 .vidioc_reqbufs = vidioc_reqbufs,
1137 .vidioc_querybuf = vidioc_querybuf,
1138 .vidioc_qbuf = vidioc_qbuf,
1139 .vidioc_dqbuf = vidioc_dqbuf,
1140 .vidioc_s_std = vidioc_s_std,
1141 .vidioc_enum_input = vidioc_enum_input,
1142 .vidioc_g_input = vidioc_g_input,
1143 .vidioc_s_input = vidioc_s_input,
1144 .vidioc_queryctrl = vidioc_queryctrl,
1145 .vidioc_g_ctrl = vidioc_g_ctrl,
1146 .vidioc_s_ctrl = vidioc_s_ctrl,
1147 .vidioc_streamon = vidioc_streamon,
1148 .vidioc_streamoff = vidioc_streamoff,
1149 #ifdef CONFIG_VIDEO_V4L1_COMPAT
1150 .vidiocgmbuf = vidiocgmbuf,
1154 static struct video_device vivi_template = {
1157 .ioctl_ops = &vivi_ioctl_ops,
1159 .release = video_device_release,
1161 .tvnorms = V4L2_STD_525_60,
1162 .current_norm = V4L2_STD_NTSC_M,
1164 /* -----------------------------------------------------------------
1165 Initialization and module stuff
1166 ------------------------------------------------------------------*/
1168 /* This routine allocates from 1 to n_devs virtual drivers.
1170 The real maximum number of virtual drivers will depend on how many drivers
1171 will succeed. This is limited to the maximum number of devices that
1172 videodev supports. Since there are 64 minors for video grabbers, this is
1173 currently the theoretical maximum limit. However, a further limit does
1174 exist at videodev that forbids any driver to register more than 32 video
1177 static int __init vivi_init(void)
1179 int ret = -ENOMEM, i;
1180 struct vivi_dev *dev;
1181 struct video_device *vfd;
1186 for (i = 0; i < n_devs; i++) {
1187 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1191 /* init video dma queues */
1192 INIT_LIST_HEAD(&dev->vidq.active);
1193 init_waitqueue_head(&dev->vidq.wq);
1195 /* initialize locks */
1196 spin_lock_init(&dev->slock);
1197 mutex_init(&dev->mutex);
1199 vfd = video_device_alloc();
1205 *vfd = vivi_template;
1207 ret = video_register_device(vfd, VFL_TYPE_GRABBER, video_nr);
1209 video_device_release(vfd);
1212 /* If some registers succeeded, keep driver */
1219 /* Now that everything is fine, let's add it to device list */
1220 list_add_tail(&dev->vivi_devlist, &vivi_devlist);
1222 snprintf(vfd->name, sizeof(vfd->name), "%s (%i)",
1223 vivi_template.name, vfd->minor);
1229 printk(KERN_INFO "%s: V4L2 device registered as /dev/video%d\n",
1230 VIVI_MODULE_NAME, vfd->minor);
1235 printk(KERN_INFO "Error %d while loading vivi driver\n", ret);
1237 printk(KERN_INFO "Video Technology Magazine Virtual Video "
1238 "Capture Board ver %u.%u.%u successfully loaded.\n",
1239 (VIVI_VERSION >> 16) & 0xFF, (VIVI_VERSION >> 8) & 0xFF,
1240 VIVI_VERSION & 0xFF);
1242 /* n_devs will reflect the actual number of allocated devices */
1249 static void __exit vivi_exit(void)
1254 module_init(vivi_init);
1255 module_exit(vivi_exit);
1257 MODULE_DESCRIPTION("Video Technology Magazine Virtual Video Capture Board");
1258 MODULE_AUTHOR("Mauro Carvalho Chehab, Ted Walther and John Sokol");
1259 MODULE_LICENSE("Dual BSD/GPL");
1261 module_param(video_nr, uint, 0444);
1262 MODULE_PARM_DESC(video_nr, "video iminor start number");
1264 module_param(n_devs, uint, 0444);
1265 MODULE_PARM_DESC(n_devs, "number of video devices to create");
1267 module_param_named(debug, vivi_template.debug, int, 0444);
1268 MODULE_PARM_DESC(debug, "activates debug info");
1270 module_param(vid_limit, int, 0644);
1271 MODULE_PARM_DESC(vid_limit, "capture memory limit in megabytes");