root/drivers/media/pci/cx18/cx18-queue.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. cx18_buf_sync_for_cpu
  2. cx18_buf_sync_for_device
  3. cx18_mdl_sync_for_device
  4. cx18_mdl_swap
  5. cx18_enqueue
  6. cx18_push

   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /*
   3  *  cx18 buffer queues
   4  *
   5  *  Derived from ivtv-queue.h
   6  *
   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 
  15 static inline void cx18_buf_sync_for_cpu(struct cx18_stream *s,
  16         struct cx18_buffer *buf)
  17 {
  18         pci_dma_sync_single_for_cpu(s->cx->pci_dev, buf->dma_handle,
  19                                 s->buf_size, s->dma);
  20 }
  21 
  22 static inline void cx18_buf_sync_for_device(struct cx18_stream *s,
  23         struct cx18_buffer *buf)
  24 {
  25         pci_dma_sync_single_for_device(s->cx->pci_dev, buf->dma_handle,
  26                                 s->buf_size, s->dma);
  27 }
  28 
  29 void _cx18_mdl_sync_for_device(struct cx18_stream *s, struct cx18_mdl *mdl);
  30 
  31 static 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         else
  39                 _cx18_mdl_sync_for_device(s, mdl);
  40 }
  41 
  42 void cx18_buf_swap(struct cx18_buffer *buf);
  43 void _cx18_mdl_swap(struct cx18_mdl *mdl);
  44 
  45 static 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         else
  51                 _cx18_mdl_swap(mdl);
  52 }
  53 
  54 /* cx18_queue utility functions */
  55 struct cx18_queue *_cx18_enqueue(struct cx18_stream *s, struct cx18_mdl *mdl,
  56                                  struct cx18_queue *q, int to_front);
  57 
  58 static inline
  59 struct 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 
  65 static inline
  66 struct 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 
  72 void cx18_queue_init(struct cx18_queue *q);
  73 struct cx18_mdl *cx18_dequeue(struct cx18_stream *s, struct cx18_queue *q);
  74 struct cx18_mdl *cx18_queue_get_mdl(struct cx18_stream *s, u32 id,
  75         u32 bytesused);
  76 void cx18_flush_queues(struct cx18_stream *s);
  77 
  78 /* queue MDL reconfiguration helpers */
  79 void cx18_unload_queues(struct cx18_stream *s);
  80 void cx18_load_queues(struct cx18_stream *s);
  81 
  82 /* cx18_stream utility functions */
  83 int cx18_stream_alloc(struct cx18_stream *s);
  84 void cx18_stream_free(struct cx18_stream *s);

/* [<][>][^][v][top][bottom][index][help] */