Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  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 <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 */
 89 
  This page was automatically generated by the LXR engine.