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 format = {
132 .name = "4:2:2, packed, YUYV",
133 .fourcc = V4L2_PIX_FMT_YUYV,
139 struct scatterlist *sg;
142 /* buffer for one video frame */
144 /* common v4l buffer stuff -- must be first */
145 struct videobuf_buffer vb;
147 struct vivi_fmt *fmt;
150 struct vivi_dmaqueue {
151 struct list_head active;
153 /* thread for generating video stream*/
154 struct task_struct *kthread;
155 wait_queue_head_t wq;
156 /* Counters to control fps rate */
161 static LIST_HEAD(vivi_devlist);
164 struct list_head vivi_devlist;
171 /* various device info */
172 struct video_device *vfd;
174 struct vivi_dmaqueue vidq;
176 /* Several counters */
178 unsigned long jiffies;
181 int mv_count; /* Controls bars movement */
185 struct vivi_dev *dev;
188 struct vivi_fmt *fmt;
189 unsigned int width, height;
190 struct videobuf_queue vb_vidq;
192 enum v4l2_buf_type type;
195 /* ------------------------------------------------------------------
196 DMA and thread functions
197 ------------------------------------------------------------------*/
199 /* Bars and Colors should match positions */
212 static u8 bars[8][3] = {
214 {204, 204, 204}, /* white */
215 {208, 208, 0}, /* ambar */
216 { 0, 206, 206}, /* cyan */
217 { 0, 239, 0}, /* green */
218 {239, 0, 239}, /* magenta */
219 {205, 0, 0}, /* red */
220 { 0, 0, 255}, /* blue */
221 { 0, 0, 0}, /* black */
224 #define TO_Y(r, g, b) \
225 (((16829 * r + 33039 * g + 6416 * b + 32768) >> 16) + 16)
226 /* RGB to V(Cr) Color transform */
227 #define TO_V(r, g, b) \
228 (((28784 * r - 24103 * g - 4681 * b + 32768) >> 16) + 128)
229 /* RGB to U(Cb) Color transform */
230 #define TO_U(r, g, b) \
231 (((-9714 * r - 19070 * g + 28784 * b + 32768) >> 16) + 128)
233 #define TSTAMP_MIN_Y 24
234 #define TSTAMP_MAX_Y TSTAMP_MIN_Y+15
235 #define TSTAMP_MIN_X 64
237 static void gen_line(char *basep, int inipos, int wmax,
238 int hmax, int line, int count, char *timestr)
243 u8 chr, r, g, b, color;
245 /* We will just duplicate the second pixel at the packet */
248 /* Generate a standard color bar pattern */
249 for (w = 0; w < wmax; w++) {
250 int colorpos = ((w + count) * 8/(wmax + 1)) % 8;
251 r = bars[colorpos][0];
252 g = bars[colorpos][1];
253 b = bars[colorpos][2];
255 for (color = 0; color < 4; color++) {
261 *p = TO_Y(r, g, b); /* Luma */
264 *p = TO_U(r, g, b); /* Cb */
267 *p = TO_V(r, g, b); /* Cr */
274 /* Checks if it is possible to show timestamp */
275 if (TSTAMP_MAX_Y >= hmax)
277 if (TSTAMP_MIN_X + strlen(timestr) >= wmax)
280 /* Print stream time */
281 if (line >= TSTAMP_MIN_Y && line <= TSTAMP_MAX_Y) {
283 for (s = timestr; *s; s++) {
284 chr = rom8x16_bits[(*s-0x30)*16+line-TSTAMP_MIN_Y];
285 for (i = 0; i < 7; i++) {
286 if (chr & 1 << (7 - i)) {
292 /* Background color */
298 pos = inipos + j * 2;
299 for (color = 0; color < 4; color++) {
307 *p = TO_Y(r, g, b); /* Luma */
310 *p = TO_U(r, g, b); /* Cb */
313 *p = TO_V(r, g, b); /* Cr */
327 static void vivi_fillbuff(struct vivi_dev *dev, struct vivi_buffer *buf)
330 int hmax = buf->vb.height;
331 int wmax = buf->vb.width;
334 void *vbuf = videobuf_to_vmalloc(&buf->vb);
339 tmpbuf = kmalloc(wmax * 2, GFP_ATOMIC);
343 for (h = 0; h < hmax; h++) {
344 gen_line(tmpbuf, 0, wmax, hmax, h, dev->mv_count,
346 memcpy(vbuf + pos, tmpbuf, wmax * 2);
354 /* Updates stream time */
356 dev->ms += jiffies_to_msecs(jiffies-dev->jiffies);
357 dev->jiffies = jiffies;
358 if (dev->ms >= 1000) {
372 sprintf(dev->timestr, "%02d:%02d:%02d:%03d",
373 dev->h, dev->m, dev->s, dev->ms);
375 dprintk(dev, 2, "vivifill at %s: Buffer 0x%08lx size= %d\n",
376 dev->timestr, (unsigned long)tmpbuf, pos);
378 /* Advice that buffer was filled */
379 buf->vb.field_count++;
380 do_gettimeofday(&ts);
382 buf->vb.state = VIDEOBUF_DONE;
385 static void vivi_thread_tick(struct vivi_fh *fh)
387 struct vivi_buffer *buf;
388 struct vivi_dev *dev = fh->dev;
389 struct vivi_dmaqueue *dma_q = &dev->vidq;
391 unsigned long flags = 0;
393 dprintk(dev, 1, "Thread tick\n");
395 spin_lock_irqsave(&dev->slock, flags);
396 if (list_empty(&dma_q->active)) {
397 dprintk(dev, 1, "No active queue to serve\n");
401 buf = list_entry(dma_q->active.next,
402 struct vivi_buffer, vb.queue);
404 /* Nobody is waiting on this buffer, return */
405 if (!waitqueue_active(&buf->vb.done))
408 list_del(&buf->vb.queue);
410 do_gettimeofday(&buf->vb.ts);
413 vivi_fillbuff(dev, buf);
414 dprintk(dev, 1, "filled buffer %p\n", buf);
416 wake_up(&buf->vb.done);
417 dprintk(dev, 2, "[%p/%d] wakeup\n", buf, buf->vb. i);
419 spin_unlock_irqrestore(&dev->slock, flags);
423 #define frames_to_ms(frames) \
424 ((frames * WAKE_NUMERATOR * 1000) / WAKE_DENOMINATOR)
426 static void vivi_sleep(struct vivi_fh *fh)
428 struct vivi_dev *dev = fh->dev;
429 struct vivi_dmaqueue *dma_q = &dev->vidq;
431 DECLARE_WAITQUEUE(wait, current);
433 dprintk(dev, 1, "%s dma_q=0x%08lx\n", __func__,
434 (unsigned long)dma_q);
436 add_wait_queue(&dma_q->wq, &wait);
437 if (kthread_should_stop())
440 /* Calculate time to wake up */
441 timeout = msecs_to_jiffies(frames_to_ms(1));
443 vivi_thread_tick(fh);
445 schedule_timeout_interruptible(timeout);
448 remove_wait_queue(&dma_q->wq, &wait);
452 static int vivi_thread(void *data)
454 struct vivi_fh *fh = data;
455 struct vivi_dev *dev = fh->dev;
457 dprintk(dev, 1, "thread started\n");
464 if (kthread_should_stop())
467 dprintk(dev, 1, "thread: exit\n");
471 static int vivi_start_thread(struct vivi_fh *fh)
473 struct vivi_dev *dev = fh->dev;
474 struct vivi_dmaqueue *dma_q = &dev->vidq;
477 dma_q->ini_jiffies = jiffies;
479 dprintk(dev, 1, "%s\n", __func__);
481 dma_q->kthread = kthread_run(vivi_thread, fh, "vivi");
483 if (IS_ERR(dma_q->kthread)) {
484 printk(KERN_ERR "vivi: kernel_thread() failed\n");
485 return PTR_ERR(dma_q->kthread);
488 wake_up_interruptible(&dma_q->wq);
490 dprintk(dev, 1, "returning from %s\n", __func__);
494 static void vivi_stop_thread(struct vivi_dmaqueue *dma_q)
496 struct vivi_dev *dev = container_of(dma_q, struct vivi_dev, vidq);
498 dprintk(dev, 1, "%s\n", __func__);
499 /* shutdown control thread */
500 if (dma_q->kthread) {
501 kthread_stop(dma_q->kthread);
502 dma_q->kthread = NULL;
506 /* ------------------------------------------------------------------
508 ------------------------------------------------------------------*/
510 buffer_setup(struct videobuf_queue *vq, unsigned int *count, unsigned int *size)
512 struct vivi_fh *fh = vq->priv_data;
513 struct vivi_dev *dev = fh->dev;
515 *size = fh->width*fh->height*2;
520 while (*size * *count > vid_limit * 1024 * 1024)
523 dprintk(dev, 1, "%s, count=%d, size=%d\n", __func__,
529 static void free_buffer(struct videobuf_queue *vq, struct vivi_buffer *buf)
531 struct vivi_fh *fh = vq->priv_data;
532 struct vivi_dev *dev = fh->dev;
534 dprintk(dev, 1, "%s, state: %i\n", __func__, buf->vb.state);
539 videobuf_vmalloc_free(&buf->vb);
540 dprintk(dev, 1, "free_buffer: freed\n");
541 buf->vb.state = VIDEOBUF_NEEDS_INIT;
544 #define norm_maxw() 1024
545 #define norm_maxh() 768
547 buffer_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb,
548 enum v4l2_field field)
550 struct vivi_fh *fh = vq->priv_data;
551 struct vivi_dev *dev = fh->dev;
552 struct vivi_buffer *buf = container_of(vb, struct vivi_buffer, vb);
555 dprintk(dev, 1, "%s, field=%d\n", __func__, field);
557 BUG_ON(NULL == fh->fmt);
559 if (fh->width < 48 || fh->width > norm_maxw() ||
560 fh->height < 32 || fh->height > norm_maxh())
563 buf->vb.size = fh->width*fh->height*2;
564 if (0 != buf->vb.baddr && buf->vb.bsize < buf->vb.size)
567 /* These properties only change when queue is idle, see s_fmt */
569 buf->vb.width = fh->width;
570 buf->vb.height = fh->height;
571 buf->vb.field = field;
573 if (VIDEOBUF_NEEDS_INIT == buf->vb.state) {
574 rc = videobuf_iolock(vq, &buf->vb, NULL);
579 buf->vb.state = VIDEOBUF_PREPARED;
584 free_buffer(vq, buf);
589 buffer_queue(struct videobuf_queue *vq, struct videobuf_buffer *vb)
591 struct vivi_buffer *buf = container_of(vb, struct vivi_buffer, vb);
592 struct vivi_fh *fh = vq->priv_data;
593 struct vivi_dev *dev = fh->dev;
594 struct vivi_dmaqueue *vidq = &dev->vidq;
596 dprintk(dev, 1, "%s\n", __func__);
598 buf->vb.state = VIDEOBUF_QUEUED;
599 list_add_tail(&buf->vb.queue, &vidq->active);
602 static void buffer_release(struct videobuf_queue *vq,
603 struct videobuf_buffer *vb)
605 struct vivi_buffer *buf = container_of(vb, struct vivi_buffer, vb);
606 struct vivi_fh *fh = vq->priv_data;
607 struct vivi_dev *dev = (struct vivi_dev *)fh->dev;
609 dprintk(dev, 1, "%s\n", __func__);
611 free_buffer(vq, buf);
614 static struct videobuf_queue_ops vivi_video_qops = {
615 .buf_setup = buffer_setup,
616 .buf_prepare = buffer_prepare,
617 .buf_queue = buffer_queue,
618 .buf_release = buffer_release,
621 /* ------------------------------------------------------------------
622 IOCTL vidioc handling
623 ------------------------------------------------------------------*/
624 static int vidioc_querycap(struct file *file, void *priv,
625 struct v4l2_capability *cap)
627 strcpy(cap->driver, "vivi");
628 strcpy(cap->card, "vivi");
629 cap->version = VIVI_VERSION;
630 cap->capabilities = V4L2_CAP_VIDEO_CAPTURE |
636 static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv,
637 struct v4l2_fmtdesc *f)
642 strlcpy(f->description, format.name, sizeof(f->description));
643 f->pixelformat = format.fourcc;
647 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
648 struct v4l2_format *f)
650 struct vivi_fh *fh = priv;
652 f->fmt.pix.width = fh->width;
653 f->fmt.pix.height = fh->height;
654 f->fmt.pix.field = fh->vb_vidq.field;
655 f->fmt.pix.pixelformat = fh->fmt->fourcc;
656 f->fmt.pix.bytesperline =
657 (f->fmt.pix.width * fh->fmt->depth) >> 3;
658 f->fmt.pix.sizeimage =
659 f->fmt.pix.height * f->fmt.pix.bytesperline;
664 static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
665 struct v4l2_format *f)
667 struct vivi_fh *fh = priv;
668 struct vivi_dev *dev = fh->dev;
669 struct vivi_fmt *fmt;
670 enum v4l2_field field;
671 unsigned int maxw, maxh;
673 if (format.fourcc != f->fmt.pix.pixelformat) {
674 dprintk(dev, 1, "Fourcc format (0x%08x) invalid. "
675 "Driver accepts only 0x%08x\n",
676 f->fmt.pix.pixelformat, format.fourcc);
681 field = f->fmt.pix.field;
683 if (field == V4L2_FIELD_ANY) {
684 field = V4L2_FIELD_INTERLACED;
685 } else if (V4L2_FIELD_INTERLACED != field) {
686 dprintk(dev, 1, "Field type invalid.\n");
693 f->fmt.pix.field = field;
694 if (f->fmt.pix.height < 32)
695 f->fmt.pix.height = 32;
696 if (f->fmt.pix.height > maxh)
697 f->fmt.pix.height = maxh;
698 if (f->fmt.pix.width < 48)
699 f->fmt.pix.width = 48;
700 if (f->fmt.pix.width > maxw)
701 f->fmt.pix.width = maxw;
702 f->fmt.pix.width &= ~0x03;
703 f->fmt.pix.bytesperline =
704 (f->fmt.pix.width * fmt->depth) >> 3;
705 f->fmt.pix.sizeimage =
706 f->fmt.pix.height * f->fmt.pix.bytesperline;
711 /*FIXME: This seems to be generic enough to be at videodev2 */
712 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
713 struct v4l2_format *f)
715 struct vivi_fh *fh = priv;
716 struct videobuf_queue *q = &fh->vb_vidq;
718 int ret = vidioc_try_fmt_vid_cap(file, fh, f);
722 mutex_lock(&q->vb_lock);
724 if (videobuf_queue_is_busy(&fh->vb_vidq)) {
725 dprintk(fh->dev, 1, "%s queue busy\n", __func__);
731 fh->width = f->fmt.pix.width;
732 fh->height = f->fmt.pix.height;
733 fh->vb_vidq.field = f->fmt.pix.field;
738 mutex_unlock(&q->vb_lock);
743 static int vidioc_reqbufs(struct file *file, void *priv,
744 struct v4l2_requestbuffers *p)
746 struct vivi_fh *fh = priv;
748 return (videobuf_reqbufs(&fh->vb_vidq, p));
751 static int vidioc_querybuf(struct file *file, void *priv, struct v4l2_buffer *p)
753 struct vivi_fh *fh = priv;
755 return (videobuf_querybuf(&fh->vb_vidq, p));
758 static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *p)
760 struct vivi_fh *fh = priv;
762 return (videobuf_qbuf(&fh->vb_vidq, p));
765 static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p)
767 struct vivi_fh *fh = priv;
769 return (videobuf_dqbuf(&fh->vb_vidq, p,
770 file->f_flags & O_NONBLOCK));
773 #ifdef CONFIG_VIDEO_V4L1_COMPAT
774 static int vidiocgmbuf(struct file *file, void *priv, struct video_mbuf *mbuf)
776 struct vivi_fh *fh = priv;
778 return videobuf_cgmbuf(&fh->vb_vidq, mbuf, 8);
782 static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i)
784 struct vivi_fh *fh = priv;
786 if (fh->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
791 return videobuf_streamon(&fh->vb_vidq);
794 static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type i)
796 struct vivi_fh *fh = priv;
798 if (fh->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
803 return videobuf_streamoff(&fh->vb_vidq);
806 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *i)
811 /* only one input in this sample driver */
812 static int vidioc_enum_input(struct file *file, void *priv,
813 struct v4l2_input *inp)
818 inp->type = V4L2_INPUT_TYPE_CAMERA;
819 inp->std = V4L2_STD_525_60;
820 strcpy(inp->name, "Camera");
825 static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
831 static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
839 /* --- controls ---------------------------------------------- */
840 static int vidioc_queryctrl(struct file *file, void *priv,
841 struct v4l2_queryctrl *qc)
845 for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
846 if (qc->id && qc->id == vivi_qctrl[i].id) {
847 memcpy(qc, &(vivi_qctrl[i]),
855 static int vidioc_g_ctrl(struct file *file, void *priv,
856 struct v4l2_control *ctrl)
860 for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
861 if (ctrl->id == vivi_qctrl[i].id) {
862 ctrl->value = qctl_regs[i];
868 static int vidioc_s_ctrl(struct file *file, void *priv,
869 struct v4l2_control *ctrl)
873 for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
874 if (ctrl->id == vivi_qctrl[i].id) {
875 if (ctrl->value < vivi_qctrl[i].minimum
876 || ctrl->value > vivi_qctrl[i].maximum) {
879 qctl_regs[i] = ctrl->value;
885 /* ------------------------------------------------------------------
886 File operations for the device
887 ------------------------------------------------------------------*/
889 #define line_buf_size(norm) (norm_maxw(norm)*(format.depth+7)/8)
891 static int vivi_open(struct inode *inode, struct file *file)
893 int minor = iminor(inode);
894 struct vivi_dev *dev;
895 struct vivi_fh *fh = NULL;
899 printk(KERN_DEBUG "vivi: open called (minor=%d)\n", minor);
901 list_for_each_entry(dev, &vivi_devlist, vivi_devlist)
902 if (dev->vfd->minor == minor)
907 mutex_lock(&dev->mutex);
910 if (dev->users > 1) {
916 dprintk(dev, 1, "open minor=%d type=%s users=%d\n", minor,
917 v4l2_type_names[V4L2_BUF_TYPE_VIDEO_CAPTURE], dev->users);
919 /* allocate + initialize per filehandle data */
920 fh = kzalloc(sizeof(*fh), GFP_KERNEL);
927 mutex_unlock(&dev->mutex);
931 file->private_data = fh;
934 fh->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
939 /* Put all controls at a sane state */
940 for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
941 qctl_regs[i] = vivi_qctrl[i].default_value;
943 /* Resets frame counters */
949 dev->jiffies = jiffies;
950 sprintf(dev->timestr, "%02d:%02d:%02d:%03d",
951 dev->h, dev->m, dev->s, dev->ms);
953 videobuf_queue_vmalloc_init(&fh->vb_vidq, &vivi_video_qops,
954 NULL, &dev->slock, fh->type, V4L2_FIELD_INTERLACED,
955 sizeof(struct vivi_buffer), fh);
957 vivi_start_thread(fh);
963 vivi_read(struct file *file, char __user *data, size_t count, loff_t *ppos)
965 struct vivi_fh *fh = file->private_data;
967 if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
968 return videobuf_read_stream(&fh->vb_vidq, data, count, ppos, 0,
969 file->f_flags & O_NONBLOCK);
975 vivi_poll(struct file *file, struct poll_table_struct *wait)
977 struct vivi_fh *fh = file->private_data;
978 struct vivi_dev *dev = fh->dev;
979 struct videobuf_queue *q = &fh->vb_vidq;
981 dprintk(dev, 1, "%s\n", __func__);
983 if (V4L2_BUF_TYPE_VIDEO_CAPTURE != fh->type)
986 return videobuf_poll_stream(file, q, wait);
989 static int vivi_close(struct inode *inode, struct file *file)
991 struct vivi_fh *fh = file->private_data;
992 struct vivi_dev *dev = fh->dev;
993 struct vivi_dmaqueue *vidq = &dev->vidq;
995 int minor = iminor(inode);
997 vivi_stop_thread(vidq);
998 videobuf_stop(&fh->vb_vidq);
999 videobuf_mmap_free(&fh->vb_vidq);
1003 mutex_lock(&dev->mutex);
1005 mutex_unlock(&dev->mutex);
1007 dprintk(dev, 1, "close called (minor=%d, users=%d)\n",
1013 static int vivi_release(void)
1015 struct vivi_dev *dev;
1016 struct list_head *list;
1018 while (!list_empty(&vivi_devlist)) {
1019 list = vivi_devlist.next;
1021 dev = list_entry(list, struct vivi_dev, vivi_devlist);
1023 if (-1 != dev->vfd->minor) {
1024 printk(KERN_INFO "%s: unregistering /dev/video%d\n",
1025 VIVI_MODULE_NAME, dev->vfd->minor);
1026 video_unregister_device(dev->vfd);
1028 printk(KERN_INFO "%s: releasing /dev/video%d\n",
1029 VIVI_MODULE_NAME, dev->vfd->minor);
1030 video_device_release(dev->vfd);
1039 static int vivi_mmap(struct file *file, struct vm_area_struct *vma)
1041 struct vivi_fh *fh = file->private_data;
1042 struct vivi_dev *dev = fh->dev;
1045 dprintk(dev, 1, "mmap called, vma=0x%08lx\n", (unsigned long)vma);
1047 ret = videobuf_mmap_mapper(&fh->vb_vidq, vma);
1049 dprintk(dev, 1, "vma start=0x%08lx, size=%ld, ret=%d\n",
1050 (unsigned long)vma->vm_start,
1051 (unsigned long)vma->vm_end-(unsigned long)vma->vm_start,
1057 static const struct file_operations vivi_fops = {
1058 .owner = THIS_MODULE,
1060 .release = vivi_close,
1063 .ioctl = video_ioctl2, /* V4L2 ioctl handler */
1064 .compat_ioctl = v4l_compat_ioctl32,
1066 .llseek = no_llseek,
1069 static const struct v4l2_ioctl_ops vivi_ioctl_ops = {
1070 .vidioc_querycap = vidioc_querycap,
1071 .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap,
1072 .vidioc_g_fmt_vid_cap = vidioc_g_fmt_vid_cap,
1073 .vidioc_try_fmt_vid_cap = vidioc_try_fmt_vid_cap,
1074 .vidioc_s_fmt_vid_cap = vidioc_s_fmt_vid_cap,
1075 .vidioc_reqbufs = vidioc_reqbufs,
1076 .vidioc_querybuf = vidioc_querybuf,
1077 .vidioc_qbuf = vidioc_qbuf,
1078 .vidioc_dqbuf = vidioc_dqbuf,
1079 .vidioc_s_std = vidioc_s_std,
1080 .vidioc_enum_input = vidioc_enum_input,
1081 .vidioc_g_input = vidioc_g_input,
1082 .vidioc_s_input = vidioc_s_input,
1083 .vidioc_queryctrl = vidioc_queryctrl,
1084 .vidioc_g_ctrl = vidioc_g_ctrl,
1085 .vidioc_s_ctrl = vidioc_s_ctrl,
1086 .vidioc_streamon = vidioc_streamon,
1087 .vidioc_streamoff = vidioc_streamoff,
1088 #ifdef CONFIG_VIDEO_V4L1_COMPAT
1089 .vidiocgmbuf = vidiocgmbuf,
1093 static struct video_device vivi_template = {
1096 .ioctl_ops = &vivi_ioctl_ops,
1098 .release = video_device_release,
1100 .tvnorms = V4L2_STD_525_60,
1101 .current_norm = V4L2_STD_NTSC_M,
1103 /* -----------------------------------------------------------------
1104 Initialization and module stuff
1105 ------------------------------------------------------------------*/
1107 /* This routine allocates from 1 to n_devs virtual drivers.
1109 The real maximum number of virtual drivers will depend on how many drivers
1110 will succeed. This is limited to the maximum number of devices that
1111 videodev supports. Since there are 64 minors for video grabbers, this is
1112 currently the theoretical maximum limit. However, a further limit does
1113 exist at videodev that forbids any driver to register more than 32 video
1116 static int __init vivi_init(void)
1118 int ret = -ENOMEM, i;
1119 struct vivi_dev *dev;
1120 struct video_device *vfd;
1125 for (i = 0; i < n_devs; i++) {
1126 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1130 /* init video dma queues */
1131 INIT_LIST_HEAD(&dev->vidq.active);
1132 init_waitqueue_head(&dev->vidq.wq);
1134 /* initialize locks */
1135 spin_lock_init(&dev->slock);
1136 mutex_init(&dev->mutex);
1138 vfd = video_device_alloc();
1144 *vfd = vivi_template;
1146 ret = video_register_device(vfd, VFL_TYPE_GRABBER, video_nr);
1148 video_device_release(vfd);
1151 /* If some registers succeeded, keep driver */
1158 /* Now that everything is fine, let's add it to device list */
1159 list_add_tail(&dev->vivi_devlist, &vivi_devlist);
1161 snprintf(vfd->name, sizeof(vfd->name), "%s (%i)",
1162 vivi_template.name, vfd->minor);
1168 printk(KERN_INFO "%s: V4L2 device registered as /dev/video%d\n",
1169 VIVI_MODULE_NAME, vfd->minor);
1174 printk(KERN_INFO "Error %d while loading vivi driver\n", ret);
1176 printk(KERN_INFO "Video Technology Magazine Virtual Video "
1177 "Capture Board ver %u.%u.%u successfully loaded.\n",
1178 (VIVI_VERSION >> 16) & 0xFF, (VIVI_VERSION >> 8) & 0xFF,
1179 VIVI_VERSION & 0xFF);
1181 /* n_devs will reflect the actual number of allocated devices */
1188 static void __exit vivi_exit(void)
1193 module_init(vivi_init);
1194 module_exit(vivi_exit);
1196 MODULE_DESCRIPTION("Video Technology Magazine Virtual Video Capture Board");
1197 MODULE_AUTHOR("Mauro Carvalho Chehab, Ted Walther and John Sokol");
1198 MODULE_LICENSE("Dual BSD/GPL");
1200 module_param(video_nr, uint, 0444);
1201 MODULE_PARM_DESC(video_nr, "video iminor start number");
1203 module_param(n_devs, uint, 0444);
1204 MODULE_PARM_DESC(n_devs, "number of video devices to create");
1206 module_param_named(debug, vivi_template.debug, int, 0444);
1207 MODULE_PARM_DESC(debug, "activates debug info");
1209 module_param(vid_limit, int, 0644);
1210 MODULE_PARM_DESC(vid_limit, "capture memory limit in megabytes");