提交 d4cae5a5 编写于 作者: M Mauro Carvalho Chehab

V4L/DVB (6292): videobuf_core init always require callback implementation

In the past, videobuf_queue_init were used to initialize PCI DMA videobuffers.
This patch renames it, to avoid confusion with the previous kernel API, doing:
	s/videobuf_queue_init/void videobuf_queue_core_init/

Also, the operations is now part of the function parameter. The function will
also add a test if this is defined, otherwise producing BUG.
Signed-off-by: NMauro Carvalho Chehab <mchehab@infradead.org>
上级 d5f1b016
...@@ -108,23 +108,25 @@ int videobuf_iolock(struct videobuf_queue* q, struct videobuf_buffer *vb, ...@@ -108,23 +108,25 @@ int videobuf_iolock(struct videobuf_queue* q, struct videobuf_buffer *vb,
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
void videobuf_queue_init(struct videobuf_queue* q, void videobuf_queue_core_init(struct videobuf_queue* q,
struct videobuf_queue_ops *ops, struct videobuf_queue_ops *ops,
void *dev, void *dev,
spinlock_t *irqlock, spinlock_t *irqlock,
enum v4l2_buf_type type, enum v4l2_buf_type type,
enum v4l2_field field, enum v4l2_field field,
unsigned int msize, unsigned int msize,
void *priv) void *priv,
struct videobuf_qtype_ops *int_ops)
{ {
memset(q,0,sizeof(*q)); memset(q,0,sizeof(*q));
q->irqlock = irqlock; q->irqlock = irqlock;
q->dev = dev; q->dev = dev;
q->type = type; q->type = type;
q->field = field; q->field = field;
q->msize = msize; q->msize = msize;
q->ops = ops; q->ops = ops;
q->priv_data = priv; q->priv_data = priv;
q->int_ops = int_ops;
/* All buffer operations are mandatory */ /* All buffer operations are mandatory */
BUG_ON (!q->ops->buf_setup); BUG_ON (!q->ops->buf_setup);
...@@ -132,6 +134,9 @@ void videobuf_queue_init(struct videobuf_queue* q, ...@@ -132,6 +134,9 @@ void videobuf_queue_init(struct videobuf_queue* q,
BUG_ON (!q->ops->buf_queue); BUG_ON (!q->ops->buf_queue);
BUG_ON (!q->ops->buf_release); BUG_ON (!q->ops->buf_release);
/* Having implementations for abstract methods are mandatory */
BUG_ON (!q->int_ops);
mutex_init(&q->lock); mutex_init(&q->lock);
INIT_LIST_HEAD(&q->stream); INIT_LIST_HEAD(&q->stream);
} }
...@@ -966,7 +971,7 @@ EXPORT_SYMBOL_GPL(videobuf_iolock); ...@@ -966,7 +971,7 @@ EXPORT_SYMBOL_GPL(videobuf_iolock);
EXPORT_SYMBOL_GPL(videobuf_alloc); EXPORT_SYMBOL_GPL(videobuf_alloc);
EXPORT_SYMBOL_GPL(videobuf_queue_init); EXPORT_SYMBOL_GPL(videobuf_queue_core_init);
EXPORT_SYMBOL_GPL(videobuf_queue_cancel); EXPORT_SYMBOL_GPL(videobuf_queue_cancel);
EXPORT_SYMBOL_GPL(videobuf_queue_is_busy); EXPORT_SYMBOL_GPL(videobuf_queue_is_busy);
......
...@@ -695,8 +695,8 @@ void videobuf_queue_pci_init(struct videobuf_queue* q, ...@@ -695,8 +695,8 @@ void videobuf_queue_pci_init(struct videobuf_queue* q,
unsigned int msize, unsigned int msize,
void *priv) void *priv)
{ {
videobuf_queue_init(q, ops, dev, irqlock, type, field, msize, priv); videobuf_queue_core_init(q, ops, dev, irqlock, type, field, msize,
q->int_ops=&pci_ops; priv, &pci_ops);
} }
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
......
...@@ -333,8 +333,8 @@ void videobuf_queue_vmalloc_init(struct videobuf_queue* q, ...@@ -333,8 +333,8 @@ void videobuf_queue_vmalloc_init(struct videobuf_queue* q,
unsigned int msize, unsigned int msize,
void *priv) void *priv)
{ {
videobuf_queue_init(q, ops, dev, irqlock, type, field, msize, priv); videobuf_queue_core_init(q, ops, dev, irqlock, type, field, msize,
q->int_ops=&qops; priv, &qops);
} }
EXPORT_SYMBOL_GPL(videobuf_queue_vmalloc_init); EXPORT_SYMBOL_GPL(videobuf_queue_vmalloc_init);
......
...@@ -181,14 +181,15 @@ int videobuf_iolock(struct videobuf_queue* q, struct videobuf_buffer *vb, ...@@ -181,14 +181,15 @@ int videobuf_iolock(struct videobuf_queue* q, struct videobuf_buffer *vb,
void *videobuf_alloc(struct videobuf_queue* q); void *videobuf_alloc(struct videobuf_queue* q);
void videobuf_queue_init(struct videobuf_queue *q, void videobuf_queue_core_init(struct videobuf_queue *q,
struct videobuf_queue_ops *ops, struct videobuf_queue_ops *ops,
void *dev, void *dev,
spinlock_t *irqlock, spinlock_t *irqlock,
enum v4l2_buf_type type, enum v4l2_buf_type type,
enum v4l2_field field, enum v4l2_field field,
unsigned int msize, unsigned int msize,
void *priv); void *priv,
struct videobuf_qtype_ops *int_ops);
int videobuf_queue_is_busy(struct videobuf_queue *q); int videobuf_queue_is_busy(struct videobuf_queue *q);
void videobuf_queue_cancel(struct videobuf_queue *q); void videobuf_queue_cancel(struct videobuf_queue *q);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册