Here is a quick listing of the new generic DMA routines alongside their 2.4
equivalents. See the associated
for a more thorough discussion of how the DMA support layer has
changed in 2.5.
| 2.4 PCI version | 2.5 Generic version |
int pci_set_dma_mask (struct pci_dev *dev,
u64 mask);
|
int dma_set_mask (struct device *dev,
u64 mask);
|
void *pci_alloc_consistent(struct pci_dev *dev,
size_t size,
dma_addr_t *dma_handle);
|
void *dma_alloc_coherent(struct device *dev,
size_t size,
dma_addr_t *dma_handle,
int flag);
(flag is a GFP_ allocation flag).
|
void pci_free_consistent(struct pci_dev *dev,
size_t size,
void *cpu_addr,
dma_addr_t dma_handle);
|
void dma_free_coherent(struct device *dev,
size_t size,
void *cpu_addr,
dma_addr_t dma_handle);
|
PCI_DMA_NONE
PCI_DMA_BIDIRECTIONAL
PCI_DMA_TODEVICE
PCI_DMA_FROMDEVICE
(Integer macros).
|
DMA_NONE
DMA_BIDIRECTIONAL
DMA_TODEVICE
DMA_FROMDEVICE
(Members of enum dma_data_direction).
|
dma_addr_t
pci_map_single(struct pci_device *dev,
void *addr,
size_t size,
int direction);
|
dma_addr_t
dma_map_single(struct device *dev,
void *addr,
size_t size,
enum dma_data_direction direction);
|
void
pci_unmap_single(struct pci_device *dev,
dma_addr_t dma_handle,
size_t size,
int direction);
|
void
dma_unmap_single(struct device *dev,
dma_addr_t dma_address,
size_t size,
enum dma_data_direction direction);
|
dma_addr_t
pci_map_page(struct pci_device *dev,
struct page *page,
unsigned long offset,
size_t size,
int direction);
|
dma_addr_t
dma_map_page(struct device *dev,
struct page *page,
unsigned long offset,
size_t size,
enum dma_data_direction direction);
|
void
pci_unmap_page(struct pci_device *dev,
dma_addr_t dma_address,
size_t size,
int direction);
|
void
dma_unmap_page(struct device *dev,
dma_addr_t dma_address,
size_t size,
enum dma_data_direction direction);
|
int
pci_map_sg(struct pci_device *dev,
struct scatterlist *sglist,
int nents,
int direction);
|
int
dma_map_sg(struct device *dev,
struct scatterlist *sglist,
int nents,
enum dma_data_direction direction);
(No address member in scatterlist structure; must use
page pointers).
|
void
pci_unmap_sg(struct pci_device *dev,
struct scatterlist *sglist,
int nents,
int direction);
|
void
dma_unmap_sg(struct device *dev,
struct scatterlist *sglist,
int nents,
enum dma_data_direction direction);
|
void
pci_dma_sync_single(struct pci_dev *dev,
dma_addr_t dma_address,
size_t size,
int direction);
|
void
dma_sync_single(struct device *dev,
dma_addr_t dma_address,
size_t size,
enum dma_data_direction direction);
|
void
pci_dma_sync_sg(struct pci_dev *dev,
struct scatterlist *sglist,
int nents,
int direction);
|
void
dma_sync_sg(struct device *dev,
struct scatterlist *sglist,
int nents,
enum dma_data_direction direction);
|