aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ieee1394/dma.h
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-16 18:20:36 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-16 18:20:36 -0400
commit1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch)
tree0bba044c4ce775e45a88a51686b5d9f90697ea9d /drivers/ieee1394/dma.h
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
Diffstat (limited to 'drivers/ieee1394/dma.h')
-rw-r--r--drivers/ieee1394/dma.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/drivers/ieee1394/dma.h b/drivers/ieee1394/dma.h
new file mode 100644
index 000000000000..061550a6fb99
--- /dev/null
+++ b/drivers/ieee1394/dma.h
@@ -0,0 +1,78 @@
1/*
2 * DMA region bookkeeping routines
3 *
4 * Copyright (C) 2002 Maas Digital LLC
5 *
6 * This code is licensed under the GPL. See the file COPYING in the root
7 * directory of the kernel sources for details.
8 */
9
10#ifndef IEEE1394_DMA_H
11#define IEEE1394_DMA_H
12
13#include <linux/pci.h>
14#include <asm/scatterlist.h>
15
16/* struct dma_prog_region
17
18 a small, physically-contiguous DMA buffer with random-access,
19 synchronous usage characteristics
20*/
21
22struct dma_prog_region {
23 unsigned char *kvirt; /* kernel virtual address */
24 struct pci_dev *dev; /* PCI device */
25 unsigned int n_pages; /* # of kernel pages */
26 dma_addr_t bus_addr; /* base bus address */
27};
28
29/* clear out all fields but do not allocate any memory */
30void dma_prog_region_init(struct dma_prog_region *prog);
31int dma_prog_region_alloc(struct dma_prog_region *prog, unsigned long n_bytes, struct pci_dev *dev);
32void dma_prog_region_free(struct dma_prog_region *prog);
33
34static inline dma_addr_t dma_prog_region_offset_to_bus(struct dma_prog_region *prog, unsigned long offset)
35{
36 return prog->bus_addr + offset;
37}
38
39/* struct dma_region
40
41 a large, non-physically-contiguous DMA buffer with streaming,
42 asynchronous usage characteristics
43*/
44
45struct dma_region {
46 unsigned char *kvirt; /* kernel virtual address */
47 struct pci_dev *dev; /* PCI device */
48 unsigned int n_pages; /* # of kernel pages */
49 unsigned int n_dma_pages; /* # of IOMMU pages */
50 struct scatterlist *sglist; /* IOMMU mapping */
51 int direction; /* PCI_DMA_TODEVICE, etc */
52};
53
54/* clear out all fields but do not allocate anything */
55void dma_region_init(struct dma_region *dma);
56
57/* allocate the buffer and map it to the IOMMU */
58int dma_region_alloc(struct dma_region *dma, unsigned long n_bytes, struct pci_dev *dev, int direction);
59
60/* unmap and free the buffer */
61void dma_region_free(struct dma_region *dma);
62
63/* sync the CPU's view of the buffer */
64void dma_region_sync_for_cpu(struct dma_region *dma, unsigned long offset, unsigned long len);
65/* sync the IO bus' view of the buffer */
66void dma_region_sync_for_device(struct dma_region *dma, unsigned long offset, unsigned long len);
67
68/* map the buffer into a user space process */
69int dma_region_mmap(struct dma_region *dma, struct file *file, struct vm_area_struct *vma);
70
71/* macro to index into a DMA region (or dma_prog_region) */
72#define dma_region_i(_dma, _type, _index) ( ((_type*) ((_dma)->kvirt)) + (_index) )
73
74/* return the DMA bus address of the byte with the given offset
75 relative to the beginning of the dma_region */
76dma_addr_t dma_region_offset_to_bus(struct dma_region *dma, unsigned long offset);
77
78#endif /* IEEE1394_DMA_H */