videobuf-core.h 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. /*
  2. * generic helper functions for handling video4linux capture buffers
  3. *
  4. * (c) 2007 Mauro Carvalho Chehab, <mchehab@infradead.org>
  5. *
  6. * Highly based on video-buf written originally by:
  7. * (c) 2001,02 Gerd Knorr <kraxel@bytesex.org>
  8. * (c) 2006 Mauro Carvalho Chehab, <mchehab@infradead.org>
  9. * (c) 2006 Ted Walther and John Sokol
  10. *
  11. * This program is free software; you can redistribute it and/or modify
  12. * it under the terms of the GNU General Public License as published by
  13. * the Free Software Foundation; either version 2
  14. */
  15. #ifndef _VIDEOBUF_CORE_H
  16. #define _VIDEOBUF_CORE_H
  17. #include <linux/poll.h>
  18. #ifdef CONFIG_VIDEO_V4L1_COMPAT
  19. #define __MIN_V4L1
  20. #include <linux/videodev.h>
  21. #endif
  22. #include <linux/videodev2.h>
  23. #define UNSET (-1U)
  24. struct videobuf_buffer;
  25. struct videobuf_queue;
  26. /* --------------------------------------------------------------------- */
  27. /*
  28. * A small set of helper functions to manage video4linux buffers.
  29. *
  30. * struct videobuf_buffer holds the data structures used by the helper
  31. * functions, additionally some commonly used fields for v4l buffers
  32. * (width, height, lists, waitqueue) are in there. That struct should
  33. * be used as first element in the drivers buffer struct.
  34. *
  35. * about the mmap helpers (videobuf_mmap_*):
  36. *
  37. * The mmaper function allows to map any subset of contingous buffers.
  38. * This includes one mmap() call for all buffers (which the original
  39. * video4linux API uses) as well as one mmap() for every single buffer
  40. * (which v4l2 uses).
  41. *
  42. * If there is a valid mapping for a buffer, buffer->baddr/bsize holds
  43. * userspace address + size which can be feeded into the
  44. * videobuf_dma_init_user function listed above.
  45. *
  46. */
  47. struct videobuf_mapping {
  48. unsigned int count;
  49. unsigned long start;
  50. unsigned long end;
  51. struct videobuf_queue *q;
  52. };
  53. enum videobuf_state {
  54. VIDEOBUF_NEEDS_INIT = 0,
  55. VIDEOBUF_PREPARED = 1,
  56. VIDEOBUF_QUEUED = 2,
  57. VIDEOBUF_ACTIVE = 3,
  58. VIDEOBUF_DONE = 4,
  59. VIDEOBUF_ERROR = 5,
  60. VIDEOBUF_IDLE = 6,
  61. };
  62. struct videobuf_buffer {
  63. unsigned int i;
  64. u32 magic;
  65. /* info about the buffer */
  66. unsigned int width;
  67. unsigned int height;
  68. unsigned int bytesperline; /* use only if != 0 */
  69. unsigned long size;
  70. unsigned int input;
  71. enum v4l2_field field;
  72. enum videobuf_state state;
  73. struct list_head stream; /* QBUF/DQBUF list */
  74. /* touched by irq handler */
  75. struct list_head queue;
  76. wait_queue_head_t done;
  77. unsigned int field_count;
  78. struct timeval ts;
  79. /* Memory type */
  80. enum v4l2_memory memory;
  81. /* buffer size */
  82. size_t bsize;
  83. /* buffer offset (mmap + overlay) */
  84. size_t boff;
  85. /* buffer addr (userland ptr!) */
  86. unsigned long baddr;
  87. /* for mmap'ed buffers */
  88. struct videobuf_mapping *map;
  89. /* Private pointer to allow specific methods to store their data */
  90. int privsize;
  91. void *priv;
  92. };
  93. struct videobuf_queue_ops {
  94. int (*buf_setup)(struct videobuf_queue *q,
  95. unsigned int *count, unsigned int *size);
  96. int (*buf_prepare)(struct videobuf_queue *q,
  97. struct videobuf_buffer *vb,
  98. enum v4l2_field field);
  99. void (*buf_queue)(struct videobuf_queue *q,
  100. struct videobuf_buffer *vb);
  101. void (*buf_release)(struct videobuf_queue *q,
  102. struct videobuf_buffer *vb);
  103. };
  104. #define MAGIC_QTYPE_OPS 0x12261003
  105. /* Helper operations - device type dependent */
  106. struct videobuf_qtype_ops {
  107. u32 magic;
  108. void *(*alloc) (size_t size);
  109. void *(*vmalloc) (struct videobuf_buffer *buf);
  110. int (*iolock) (struct videobuf_queue* q,
  111. struct videobuf_buffer *vb,
  112. struct v4l2_framebuffer *fbuf);
  113. int (*mmap) (struct videobuf_queue *q,
  114. unsigned int *count,
  115. unsigned int *size,
  116. enum v4l2_memory memory);
  117. int (*sync) (struct videobuf_queue* q,
  118. struct videobuf_buffer *buf);
  119. int (*video_copy_to_user)(struct videobuf_queue *q,
  120. char __user *data,
  121. size_t count,
  122. int nonblocking);
  123. int (*copy_stream) (struct videobuf_queue *q,
  124. char __user *data,
  125. size_t count,
  126. size_t pos,
  127. int vbihack,
  128. int nonblocking);
  129. int (*mmap_free) (struct videobuf_queue *q);
  130. int (*mmap_mapper) (struct videobuf_queue *q,
  131. struct vm_area_struct *vma);
  132. };
  133. struct videobuf_queue {
  134. struct mutex vb_lock;
  135. spinlock_t *irqlock;
  136. struct device *dev;
  137. wait_queue_head_t wait; /* wait if queue is empty */
  138. enum v4l2_buf_type type;
  139. unsigned int inputs; /* for V4L2_BUF_FLAG_INPUT */
  140. unsigned int msize;
  141. enum v4l2_field field;
  142. enum v4l2_field last; /* for field=V4L2_FIELD_ALTERNATE */
  143. struct videobuf_buffer *bufs[VIDEO_MAX_FRAME];
  144. struct videobuf_queue_ops *ops;
  145. struct videobuf_qtype_ops *int_ops;
  146. unsigned int streaming:1;
  147. unsigned int reading:1;
  148. unsigned int is_mmapped:1;
  149. /* capture via mmap() + ioctl(QBUF/DQBUF) */
  150. struct list_head stream;
  151. /* capture via read() */
  152. unsigned int read_off;
  153. struct videobuf_buffer *read_buf;
  154. /* driver private data */
  155. void *priv_data;
  156. };
  157. int videobuf_waiton(struct videobuf_buffer *vb, int non_blocking, int intr);
  158. int videobuf_iolock(struct videobuf_queue* q, struct videobuf_buffer *vb,
  159. struct v4l2_framebuffer *fbuf);
  160. void *videobuf_alloc(struct videobuf_queue* q);
  161. /* Used on videobuf-dvb */
  162. void *videobuf_queue_to_vmalloc (struct videobuf_queue* q,
  163. struct videobuf_buffer *buf);
  164. void videobuf_queue_core_init(struct videobuf_queue *q,
  165. struct videobuf_queue_ops *ops,
  166. struct device *dev,
  167. spinlock_t *irqlock,
  168. enum v4l2_buf_type type,
  169. enum v4l2_field field,
  170. unsigned int msize,
  171. void *priv,
  172. struct videobuf_qtype_ops *int_ops);
  173. int videobuf_queue_is_busy(struct videobuf_queue *q);
  174. void videobuf_queue_cancel(struct videobuf_queue *q);
  175. enum v4l2_field videobuf_next_field(struct videobuf_queue *q);
  176. int videobuf_reqbufs(struct videobuf_queue *q,
  177. struct v4l2_requestbuffers *req);
  178. int videobuf_querybuf(struct videobuf_queue *q, struct v4l2_buffer *b);
  179. int videobuf_qbuf(struct videobuf_queue *q,
  180. struct v4l2_buffer *b);
  181. int videobuf_dqbuf(struct videobuf_queue *q,
  182. struct v4l2_buffer *b, int nonblocking);
  183. #ifdef CONFIG_VIDEO_V4L1_COMPAT
  184. int videobuf_cgmbuf(struct videobuf_queue *q,
  185. struct video_mbuf *mbuf, int count);
  186. #endif
  187. int videobuf_streamon(struct videobuf_queue *q);
  188. int videobuf_streamoff(struct videobuf_queue *q);
  189. void videobuf_stop(struct videobuf_queue *q);
  190. int videobuf_read_start(struct videobuf_queue *q);
  191. void videobuf_read_stop(struct videobuf_queue *q);
  192. ssize_t videobuf_read_stream(struct videobuf_queue *q,
  193. char __user *data, size_t count, loff_t *ppos,
  194. int vbihack, int nonblocking);
  195. ssize_t videobuf_read_one(struct videobuf_queue *q,
  196. char __user *data, size_t count, loff_t *ppos,
  197. int nonblocking);
  198. unsigned int videobuf_poll_stream(struct file *file,
  199. struct videobuf_queue *q,
  200. poll_table *wait);
  201. int videobuf_mmap_setup(struct videobuf_queue *q,
  202. unsigned int bcount, unsigned int bsize,
  203. enum v4l2_memory memory);
  204. int __videobuf_mmap_setup(struct videobuf_queue *q,
  205. unsigned int bcount, unsigned int bsize,
  206. enum v4l2_memory memory);
  207. int videobuf_mmap_free(struct videobuf_queue *q);
  208. int videobuf_mmap_mapper(struct videobuf_queue *q,
  209. struct vm_area_struct *vma);
  210. #endif