brintos

brintos / linux-shallow public Read only

0
0
Text · 2.3 KiB · 26f2097 Raw
85 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 *  cx18 buffer queues4 *5 *  Derived from ivtv-queue.h6 *7 *  Copyright (C) 2007  Hans Verkuil <hverkuil@xs4all.nl>8 *  Copyright (C) 2008  Andy Walls <awalls@md.metrocast.net>9 */10 11#define CX18_DMA_UNMAPPED	((u32) -1)12 13/* cx18_buffer utility functions */14 15static inline void cx18_buf_sync_for_cpu(struct cx18_stream *s,16	struct cx18_buffer *buf)17{18	dma_sync_single_for_cpu(&s->cx->pci_dev->dev, buf->dma_handle,19				s->buf_size, s->dma);20}21 22static inline void cx18_buf_sync_for_device(struct cx18_stream *s,23	struct cx18_buffer *buf)24{25	dma_sync_single_for_device(&s->cx->pci_dev->dev, buf->dma_handle,26				   s->buf_size, s->dma);27}28 29void _cx18_mdl_sync_for_device(struct cx18_stream *s, struct cx18_mdl *mdl);30 31static inline void cx18_mdl_sync_for_device(struct cx18_stream *s,32					    struct cx18_mdl *mdl)33{34	if (list_is_singular(&mdl->buf_list))35		cx18_buf_sync_for_device(s, list_first_entry(&mdl->buf_list,36							     struct cx18_buffer,37							     list));38	else39		_cx18_mdl_sync_for_device(s, mdl);40}41 42void cx18_buf_swap(struct cx18_buffer *buf);43void _cx18_mdl_swap(struct cx18_mdl *mdl);44 45static inline void cx18_mdl_swap(struct cx18_mdl *mdl)46{47	if (list_is_singular(&mdl->buf_list))48		cx18_buf_swap(list_first_entry(&mdl->buf_list,49					       struct cx18_buffer, list));50	else51		_cx18_mdl_swap(mdl);52}53 54/* cx18_queue utility functions */55struct cx18_queue *_cx18_enqueue(struct cx18_stream *s, struct cx18_mdl *mdl,56				 struct cx18_queue *q, int to_front);57 58static inline59struct cx18_queue *cx18_enqueue(struct cx18_stream *s, struct cx18_mdl *mdl,60				struct cx18_queue *q)61{62	return _cx18_enqueue(s, mdl, q, 0); /* FIFO */63}64 65static inline66struct cx18_queue *cx18_push(struct cx18_stream *s, struct cx18_mdl *mdl,67			     struct cx18_queue *q)68{69	return _cx18_enqueue(s, mdl, q, 1); /* LIFO */70}71 72void cx18_queue_init(struct cx18_queue *q);73struct cx18_mdl *cx18_dequeue(struct cx18_stream *s, struct cx18_queue *q);74struct cx18_mdl *cx18_queue_get_mdl(struct cx18_stream *s, u32 id,75	u32 bytesused);76void cx18_flush_queues(struct cx18_stream *s);77 78/* queue MDL reconfiguration helpers */79void cx18_unload_queues(struct cx18_stream *s);80void cx18_load_queues(struct cx18_stream *s);81 82/* cx18_stream utility functions */83int cx18_stream_alloc(struct cx18_stream *s);84void cx18_stream_free(struct cx18_stream *s);85