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