iPXE
dma.c File Reference

DMA mappings. More...

#include <assert.h>
#include <errno.h>
#include <ipxe/dma.h>

Go to the source code of this file.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 FILE_SECBOOT (PERMITTED)
 PROVIDE_DMAAPI_INLINE (flat, dma_map)
 PROVIDE_DMAAPI_INLINE (flat, dma_unmap)
 PROVIDE_DMAAPI_INLINE (flat, dma_alloc)
 PROVIDE_DMAAPI_INLINE (flat, dma_free)
 PROVIDE_DMAAPI_INLINE (flat, dma_umalloc)
 PROVIDE_DMAAPI_INLINE (flat, dma_ufree)
 PROVIDE_DMAAPI_INLINE (flat, dma_set_mask)
 PROVIDE_DMAAPI_INLINE (flat, dma)
static int dma_op_map (struct dma_device *dma, struct dma_mapping *map, void *addr, size_t len, int flags)
 Map buffer for DMA.
static void dma_op_unmap (struct dma_mapping *map, size_t len)
 Unmap buffer.
static void * dma_op_alloc (struct dma_device *dma, struct dma_mapping *map, size_t len, size_t align)
 Allocate and map DMA-coherent buffer.
static void dma_op_free (struct dma_mapping *map, void *addr, size_t len)
 Unmap and free DMA-coherent buffer.
static void * dma_op_umalloc (struct dma_device *dma, struct dma_mapping *map, size_t len, size_t align)
 Allocate and map DMA-coherent buffer from external (user) memory.
static void dma_op_ufree (struct dma_mapping *map, void *addr, size_t len)
 Unmap and free DMA-coherent buffer from external (user) memory.
static void dma_op_set_mask (struct dma_device *dma, physaddr_t mask)
 Set addressable space mask.
 PROVIDE_DMAAPI (op, dma_map, dma_op_map)
 PROVIDE_DMAAPI (op, dma_unmap, dma_op_unmap)
 PROVIDE_DMAAPI (op, dma_alloc, dma_op_alloc)
 PROVIDE_DMAAPI (op, dma_free, dma_op_free)
 PROVIDE_DMAAPI (op, dma_umalloc, dma_op_umalloc)
 PROVIDE_DMAAPI (op, dma_ufree, dma_op_ufree)
 PROVIDE_DMAAPI (op, dma_set_mask, dma_op_set_mask)
 PROVIDE_DMAAPI_INLINE (op, dma)

Detailed Description

DMA mappings.

Definition in file dma.c.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED )

◆ PROVIDE_DMAAPI_INLINE() [1/9]

PROVIDE_DMAAPI_INLINE ( flat ,
dma_map  )

◆ PROVIDE_DMAAPI_INLINE() [2/9]

PROVIDE_DMAAPI_INLINE ( flat ,
dma_unmap  )

References dma_unmap().

◆ PROVIDE_DMAAPI_INLINE() [3/9]

PROVIDE_DMAAPI_INLINE ( flat ,
dma_alloc  )

References dma_alloc().

◆ PROVIDE_DMAAPI_INLINE() [4/9]

PROVIDE_DMAAPI_INLINE ( flat ,
dma_free  )

References dma_free().

◆ PROVIDE_DMAAPI_INLINE() [5/9]

PROVIDE_DMAAPI_INLINE ( flat ,
dma_umalloc  )

References dma_umalloc().

◆ PROVIDE_DMAAPI_INLINE() [6/9]

PROVIDE_DMAAPI_INLINE ( flat ,
dma_ufree  )

References dma_ufree().

◆ PROVIDE_DMAAPI_INLINE() [7/9]

PROVIDE_DMAAPI_INLINE ( flat ,
dma_set_mask  )

References dma_set_mask().

◆ PROVIDE_DMAAPI_INLINE() [8/9]

PROVIDE_DMAAPI_INLINE ( flat ,
dma  )

References dma().

◆ dma_op_map()

int dma_op_map ( struct dma_device * dma,
struct dma_mapping * map,
void * addr,
size_t len,
int flags )
static

Map buffer for DMA.

Parameters
dmaDMA device
mapDMA mapping to fill in
addrBuffer address
lenLength of buffer
flagsMapping flags
Return values
rcReturn status code

Definition at line 70 of file dma.c.

71 {
72 struct dma_operations *op = dma->op;
73
74 if ( ! op )
75 return -ENODEV;
76 return op->map ( dma, map, addr, len, flags );
77}
ring len
Length.
Definition dwmac.h:226
uint32_t addr
Buffer address.
Definition dwmac.h:9
uint8_t flags
Flags.
Definition ena.h:7
#define ENODEV
No such device.
Definition errno.h:510
static __always_inline int struct dma_mapping * map
Definition dma.h:184
physaddr_t dma(struct dma_mapping *map, void *addr)
Get DMA address from virtual address.
static uint16_t struct vmbus_xfer_pages_operations * op
Definition netvsc.h:327
DMA operations.
Definition dma.h:60

References addr, dma(), ENODEV, flags, len, map, and op.

Referenced by PROVIDE_DMAAPI().

◆ dma_op_unmap()

void dma_op_unmap ( struct dma_mapping * map,
size_t len )
static

Unmap buffer.

Parameters
mapDMA mapping
lenUsed length

Definition at line 85 of file dma.c.

85 {
86 struct dma_device *dma = map->dma;
87
88 assert ( dma != NULL );
89 assert ( dma->op != NULL );
90 dma->op->unmap ( dma, map, len );
91}
#define NULL
NULL pointer (VOID *)
Definition Base.h:322
#define assert(condition)
Assert a condition at run-time.
Definition assert.h:50
A DMA-capable device.
Definition dma.h:48

References assert, dma(), len, map, and NULL.

Referenced by PROVIDE_DMAAPI().

◆ dma_op_alloc()

void * dma_op_alloc ( struct dma_device * dma,
struct dma_mapping * map,
size_t len,
size_t align )
static

Allocate and map DMA-coherent buffer.

Parameters
dmaDMA device
mapDMA mapping to fill in
lenLength of buffer
alignPhysical alignment
Return values
addrBuffer address, or NULL on error

Definition at line 102 of file dma.c.

103 {
104 struct dma_operations *op = dma->op;
105
106 if ( ! op )
107 return NULL;
108 return op->alloc ( dma, map, len, align );
109}

References dma(), len, map, NULL, and op.

Referenced by PROVIDE_DMAAPI().

◆ dma_op_free()

void dma_op_free ( struct dma_mapping * map,
void * addr,
size_t len )
static

Unmap and free DMA-coherent buffer.

Parameters
mapDMA mapping
addrBuffer address
lenLength of buffer

Definition at line 118 of file dma.c.

118 {
119 struct dma_device *dma = map->dma;
120
121 assert ( dma != NULL );
122 assert ( dma->op != NULL );
123 dma->op->free ( dma, map, addr, len );
124}

References addr, assert, dma(), len, map, and NULL.

Referenced by PROVIDE_DMAAPI().

◆ dma_op_umalloc()

void * dma_op_umalloc ( struct dma_device * dma,
struct dma_mapping * map,
size_t len,
size_t align )
static

Allocate and map DMA-coherent buffer from external (user) memory.

Parameters
dmaDMA device
mapDMA mapping to fill in
lenLength of buffer
alignPhysical alignment
Return values
addrBuffer address, or NULL on error

Definition at line 135 of file dma.c.

137 {
138 struct dma_operations *op = dma->op;
139
140 if ( ! op )
141 return NULL;
142 return op->umalloc ( dma, map, len, align );
143}

References dma(), len, map, NULL, and op.

Referenced by PROVIDE_DMAAPI().

◆ dma_op_ufree()

void dma_op_ufree ( struct dma_mapping * map,
void * addr,
size_t len )
static

Unmap and free DMA-coherent buffer from external (user) memory.

Parameters
mapDMA mapping
addrBuffer address
lenLength of buffer

Definition at line 152 of file dma.c.

152 {
153 struct dma_device *dma = map->dma;
154
155 assert ( dma != NULL );
156 assert ( dma->op != NULL );
157 dma->op->ufree ( dma, map, addr, len );
158}

References addr, assert, dma(), len, map, and NULL.

Referenced by PROVIDE_DMAAPI().

◆ dma_op_set_mask()

void dma_op_set_mask ( struct dma_device * dma,
physaddr_t mask )
static

Set addressable space mask.

Parameters
dmaDMA device
maskAddressable space mask

Definition at line 166 of file dma.c.

166 {
167 struct dma_operations *op = dma->op;
168
169 if ( op )
170 op->set_mask ( dma, mask );
171}

References dma(), and op.

Referenced by PROVIDE_DMAAPI().

◆ PROVIDE_DMAAPI() [1/7]

PROVIDE_DMAAPI ( op ,
dma_map ,
dma_op_map  )

References dma_op_map(), and op.

◆ PROVIDE_DMAAPI() [2/7]

PROVIDE_DMAAPI ( op ,
dma_unmap ,
dma_op_unmap  )

References dma_op_unmap(), dma_unmap(), and op.

◆ PROVIDE_DMAAPI() [3/7]

PROVIDE_DMAAPI ( op ,
dma_alloc ,
dma_op_alloc  )

References dma_alloc(), dma_op_alloc(), and op.

◆ PROVIDE_DMAAPI() [4/7]

PROVIDE_DMAAPI ( op ,
dma_free ,
dma_op_free  )

References dma_free(), dma_op_free(), and op.

◆ PROVIDE_DMAAPI() [5/7]

PROVIDE_DMAAPI ( op ,
dma_umalloc ,
dma_op_umalloc  )

References dma_op_umalloc(), dma_umalloc(), and op.

◆ PROVIDE_DMAAPI() [6/7]

PROVIDE_DMAAPI ( op ,
dma_ufree ,
dma_op_ufree  )

References dma_op_ufree(), dma_ufree(), and op.

◆ PROVIDE_DMAAPI() [7/7]

PROVIDE_DMAAPI ( op ,
dma_set_mask ,
dma_op_set_mask  )

References dma_op_set_mask(), dma_set_mask(), and op.

◆ PROVIDE_DMAAPI_INLINE() [9/9]

PROVIDE_DMAAPI_INLINE ( op ,
dma  )

References dma(), and op.