OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [ieee1394/] [dma.h] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
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 <asm/types.h>
14
 
15
struct pci_dev;
16
struct scatterlist;
17
struct vm_area_struct;
18
 
19
/**
20
 * struct dma_prog_region - small contiguous DMA buffer
21
 * @kvirt:    kernel virtual address
22
 * @dev:      PCI device
23
 * @n_pages:  number of kernel pages
24
 * @bus_addr: base bus address
25
 *
26
 * a small, physically contiguous DMA buffer with random-access, synchronous
27
 * usage characteristics
28
 */
29
struct dma_prog_region {
30
        unsigned char *kvirt;
31
        struct pci_dev *dev;
32
        unsigned int n_pages;
33
        dma_addr_t bus_addr;
34
};
35
 
36
/* clear out all fields but do not allocate any memory */
37
void dma_prog_region_init(struct dma_prog_region *prog);
38
int dma_prog_region_alloc(struct dma_prog_region *prog, unsigned long n_bytes,
39
                          struct pci_dev *dev);
40
void dma_prog_region_free(struct dma_prog_region *prog);
41
 
42
static inline dma_addr_t dma_prog_region_offset_to_bus(
43
                struct dma_prog_region *prog, unsigned long offset)
44
{
45
        return prog->bus_addr + offset;
46
}
47
 
48
/**
49
 * struct dma_region - large non-contiguous DMA buffer
50
 * @virt:        kernel virtual address
51
 * @dev:         PCI device
52
 * @n_pages:     number of kernel pages
53
 * @n_dma_pages: number of IOMMU pages
54
 * @sglist:      IOMMU mapping
55
 * @direction:   PCI_DMA_TODEVICE, etc.
56
 *
57
 * a large, non-physically-contiguous DMA buffer with streaming, asynchronous
58
 * usage characteristics
59
 */
60
struct dma_region {
61
        unsigned char *kvirt;
62
        struct pci_dev *dev;
63
        unsigned int n_pages;
64
        unsigned int n_dma_pages;
65
        struct scatterlist *sglist;
66
        int direction;
67
};
68
 
69
void dma_region_init(struct dma_region *dma);
70
int dma_region_alloc(struct dma_region *dma, unsigned long n_bytes,
71
                     struct pci_dev *dev, int direction);
72
void dma_region_free(struct dma_region *dma);
73
void dma_region_sync_for_cpu(struct dma_region *dma, unsigned long offset,
74
                             unsigned long len);
75
void dma_region_sync_for_device(struct dma_region *dma, unsigned long offset,
76
                                unsigned long len);
77
int  dma_region_mmap(struct dma_region *dma, struct file *file,
78
                     struct vm_area_struct *vma);
79
dma_addr_t dma_region_offset_to_bus(struct dma_region *dma,
80
                                    unsigned long offset);
81
 
82
/**
83
 * dma_region_i - macro to index into a DMA region (or dma_prog_region)
84
 */
85
#define dma_region_i(_dma, _type, _index) \
86
        ( ((_type*) ((_dma)->kvirt)) + (_index) )
87
 
88
#endif /* IEEE1394_DMA_H */

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.