Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 59d34489 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

V4L/DVB (7566): videobuf-dvb: allow its usage with videobuf-vmalloc



videobuf-dvb were still using a function that were videobuf-dma-sg
dependent. This patch creates a generic handler for this function. This
way, videobuf-dvb can now work with all videobuf implementations.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 3b5fa928
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -94,6 +94,13 @@ int videobuf_iolock(struct videobuf_queue *q, struct videobuf_buffer *vb,
	return CALL(q, iolock, q, vb, fbuf);
}

void *videobuf_queue_to_vmalloc (struct videobuf_queue *q,
			   struct videobuf_buffer *buf)
{
	return CALL(q, vmalloc, buf);
}
EXPORT_SYMBOL_GPL(videobuf_queue_to_vmalloc);

/* --------------------------------------------------------------------- */


+11 −0
Original line number Diff line number Diff line
@@ -432,6 +432,16 @@ static void *__videobuf_alloc(size_t size)
	return vb;
}

static void *__videobuf_to_vmalloc (struct videobuf_buffer *buf)
{
	struct videobuf_dma_sg_memory *mem = buf->priv;
	BUG_ON(!mem);

	MAGIC_CHECK(mem->magic, MAGIC_SG_MEM);

	return mem->dma.vmalloc;
}

static int __videobuf_iolock (struct videobuf_queue* q,
			      struct videobuf_buffer *vb,
			      struct v4l2_framebuffer *fbuf)
@@ -677,6 +687,7 @@ static struct videobuf_qtype_ops sg_ops = {
	.mmap_mapper  = __videobuf_mmap_mapper,
	.video_copy_to_user = __videobuf_copy_to_user,
	.copy_stream  = __videobuf_copy_stream,
	.vmalloc      = __videobuf_to_vmalloc,
};

void *videobuf_sg_alloc(size_t size)
+6 −4
Original line number Diff line number Diff line
@@ -20,9 +20,10 @@
#include <linux/fs.h>
#include <linux/kthread.h>
#include <linux/file.h>

#include <linux/freezer.h>

#include <media/videobuf-dma-sg.h>
#include <media/videobuf-core.h>
#include <media/videobuf-dvb.h>

/* ------------------------------------------------------------------ */
@@ -45,7 +46,7 @@ static int videobuf_dvb_thread(void *data)
	struct videobuf_buffer *buf;
	unsigned long flags;
	int err;
	struct videobuf_dmabuf *dma;
	void *outp;

	dprintk("dvb thread started\n");
	set_freezable();
@@ -66,9 +67,10 @@ static int videobuf_dvb_thread(void *data)
		try_to_freeze();

		/* feed buffer data to demux */
		dma=videobuf_to_dma(buf);
		outp = videobuf_queue_to_vmalloc (&dvb->dvbq, buf);

		if (buf->state == VIDEOBUF_DONE)
			dvb_dmx_swfilter(&dvb->demux, dma->vmalloc,
			dvb_dmx_swfilter(&dvb->demux, outp,
					 buf->size);

		/* requeue buffer */
+1 −0
Original line number Diff line number Diff line
@@ -387,6 +387,7 @@ static struct videobuf_qtype_ops qops = {
	.mmap_mapper  = __videobuf_mmap_mapper,
	.video_copy_to_user = __videobuf_copy_to_user,
	.copy_stream  = __videobuf_copy_stream,
	.vmalloc      = videobuf_to_vmalloc,
};

void videobuf_queue_vmalloc_init(struct videobuf_queue* q,
+10 −8
Original line number Diff line number Diff line
@@ -13,6 +13,9 @@
 * the Free Software Foundation; either version 2
 */

#ifndef _VIDEOBUF_CORE_H
#define _VIDEOBUF_CORE_H

#include <linux/poll.h>
#ifdef CONFIG_VIDEO_V4L1_COMPAT
#include <linux/videodev.h>
@@ -124,6 +127,7 @@ struct videobuf_qtype_ops {
	u32                     magic;

	void *(*alloc)		(size_t size);
	void *(*vmalloc)	(struct videobuf_buffer *buf);
	int (*iolock)		(struct videobuf_queue* q,
				 struct videobuf_buffer *vb,
				 struct v4l2_framebuffer *fbuf);
@@ -185,6 +189,10 @@ int videobuf_iolock(struct videobuf_queue* q, struct videobuf_buffer *vb,

void *videobuf_alloc(struct videobuf_queue* q);

/* Used on videobuf-dvb */
void *videobuf_queue_to_vmalloc (struct videobuf_queue* q,
				 struct videobuf_buffer *buf);

void videobuf_queue_core_init(struct videobuf_queue *q,
			 struct videobuf_queue_ops *ops,
			 struct device *dev,
@@ -233,10 +241,4 @@ int videobuf_mmap_free(struct videobuf_queue *q);
int videobuf_mmap_mapper(struct videobuf_queue *q,
			 struct vm_area_struct *vma);

/* --------------------------------------------------------------------- */

/*
 * Local variables:
 * c-basic-offset: 8
 * End:
 */
#endif
Loading