Blame view
include/media/videobuf-dma-sg.h
3.29 KB
7a7d9a89d V4L/DVB (6251): R... |
1 |
/* |
0705135e5 V4L/DVB (7237): C... |
2 |
* helper functions for SG DMA video4linux capture buffers |
7a7d9a89d V4L/DVB (6251): R... |
3 |
* |
5d6aaf50e V4L/DVB (8340): v... |
4 |
* The functions expect the hardware being able to scatter gather |
7a7d9a89d V4L/DVB (6251): R... |
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
* (i.e. the buffers are not linear in physical memory, but fragmented * into PAGE_SIZE chunks). They also assume the driver does not need * to touch the video data. * * (c) 2007 Mauro Carvalho Chehab, <mchehab@infradead.org> * * Highly based on video-buf written originally by: * (c) 2001,02 Gerd Knorr <kraxel@bytesex.org> * (c) 2006 Mauro Carvalho Chehab, <mchehab@infradead.org> * (c) 2006 Ted Walther and John Sokol * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 */ |
7a02264ca V4L/DVB: v4l: vid... |
20 21 |
#ifndef _VIDEOBUF_DMA_SG_H #define _VIDEOBUF_DMA_SG_H |
7a7d9a89d V4L/DVB (6251): R... |
22 23 24 25 26 27 |
#include <media/videobuf-core.h> /* --------------------------------------------------------------------- */ /* |
7a7d9a89d V4L/DVB (6251): R... |
28 29 30 31 32 33 34 35 36 |
* A small set of helper functions to manage buffers (both userland * and kernel) for DMA. * * videobuf_dma_init_*() * creates a buffer. The userland version takes a userspace * pointer + length. The kernel version just wants the size and * does memory allocation too using vmalloc_32(). * * videobuf_dma_*() |
395cf9691 doc: fix broken r... |
37 |
* see Documentation/DMA-API-HOWTO.txt, these functions to |
7a7d9a89d V4L/DVB (6251): R... |
38 39 40 41 42 43 44 45 46 47 48 49 50 |
* basically the same. The map function does also build a * scatterlist for the buffer (and unmap frees it ...) * * videobuf_dma_free() * no comment ... * */ struct videobuf_dmabuf { u32 magic; /* for userland buffer */ int offset; |
2fc11536c V4L/DVB: videobuf... |
51 |
size_t size; |
7a7d9a89d V4L/DVB (6251): R... |
52 53 54 |
struct page **pages; /* for kernel buffers */ |
bb6dbe748 V4L/DVB: videobuf... |
55 |
void *vaddr; |
7a7d9a89d V4L/DVB (6251): R... |
56 |
|
7a7d9a89d V4L/DVB (6251): R... |
57 58 59 60 61 62 63 64 65 |
/* for overlay buffers (pci-pci dma) */ dma_addr_t bus_addr; /* common */ struct scatterlist *sglist; int sglen; int nr_pages; int direction; }; |
7a02264ca V4L/DVB: v4l: vid... |
66 |
struct videobuf_dma_sg_memory { |
7a7d9a89d V4L/DVB (6251): R... |
67 68 69 |
u32 magic; /* for mmap'ed buffers */ |
7a7d9a89d V4L/DVB (6251): R... |
70 71 |
struct videobuf_dmabuf dma; }; |
952684035 V4L/DVB: videobuf... |
72 73 74 75 76 77 78 79 80 81 |
/* * Scatter-gather DMA buffer API. * * These functions provide a simple way to create a page list and a * scatter-gather list from a kernel, userspace of physical address and map the * memory for DMA operation. * * Despite the name, this is totally unrelated to videobuf, except that * videobuf-dma-sg uses the same API internally. */ |
7a7d9a89d V4L/DVB (6251): R... |
82 83 84 85 86 87 88 89 |
void videobuf_dma_init(struct videobuf_dmabuf *dma); int videobuf_dma_init_user(struct videobuf_dmabuf *dma, int direction, unsigned long data, unsigned long size); int videobuf_dma_init_kernel(struct videobuf_dmabuf *dma, int direction, int nr_pages); int videobuf_dma_init_overlay(struct videobuf_dmabuf *dma, int direction, dma_addr_t addr, int nr_pages); int videobuf_dma_free(struct videobuf_dmabuf *dma); |
952684035 V4L/DVB: videobuf... |
90 91 |
int videobuf_dma_map(struct device *dev, struct videobuf_dmabuf *dma); int videobuf_dma_unmap(struct device *dev, struct videobuf_dmabuf *dma); |
7a02264ca V4L/DVB: v4l: vid... |
92 |
struct videobuf_dmabuf *videobuf_to_dma(struct videobuf_buffer *buf); |
7a7d9a89d V4L/DVB (6251): R... |
93 |
|
0705135e5 V4L/DVB (7237): C... |
94 |
void *videobuf_sg_alloc(size_t size); |
7a7d9a89d V4L/DVB (6251): R... |
95 |
|
7a02264ca V4L/DVB: v4l: vid... |
96 |
void videobuf_queue_sg_init(struct videobuf_queue *q, |
38a54f35a V4L/DVB (13377): ... |
97 |
const struct videobuf_queue_ops *ops, |
0705135e5 V4L/DVB (7237): C... |
98 |
struct device *dev, |
7a7d9a89d V4L/DVB (6251): R... |
99 100 101 102 |
spinlock_t *irqlock, enum v4l2_buf_type type, enum v4l2_field field, unsigned int msize, |
08bff03ed V4L/DVB: videobuf... |
103 104 |
void *priv, struct mutex *ext_lock); |
7a7d9a89d V4L/DVB (6251): R... |
105 |
|
7a02264ca V4L/DVB: v4l: vid... |
106 |
#endif /* _VIDEOBUF_DMA_SG_H */ |