iPXE
Functions
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. More...
 
static void dma_op_unmap (struct dma_mapping *map, size_t len)
 Unmap buffer. More...
 
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. More...
 
static void dma_op_free (struct dma_mapping *map, void *addr, size_t len)
 Unmap and free DMA-coherent buffer. More...
 
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. More...
 
static void dma_op_ufree (struct dma_mapping *map, void *addr, size_t len)
 Unmap and free DMA-coherent buffer from external (user) memory. More...
 
static void dma_op_set_mask (struct dma_device *dma, physaddr_t mask)
 Set addressable space mask. More...
 
 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   
)

◆ PROVIDE_DMAAPI_INLINE() [3/9]

PROVIDE_DMAAPI_INLINE ( flat  ,
dma_alloc   
)

◆ PROVIDE_DMAAPI_INLINE() [4/9]

PROVIDE_DMAAPI_INLINE ( flat  ,
dma_free   
)

◆ PROVIDE_DMAAPI_INLINE() [5/9]

PROVIDE_DMAAPI_INLINE ( flat  ,
dma_umalloc   
)

◆ PROVIDE_DMAAPI_INLINE() [6/9]

PROVIDE_DMAAPI_INLINE ( flat  ,
dma_ufree   
)

◆ PROVIDE_DMAAPI_INLINE() [7/9]

PROVIDE_DMAAPI_INLINE ( flat  ,
dma_set_mask   
)

◆ PROVIDE_DMAAPI_INLINE() [8/9]

PROVIDE_DMAAPI_INLINE ( flat  ,
dma   
)

◆ dma_op_map()

static 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:231
uint8_t flags
Flags.
Definition: ena.h:18
uint32_t addr
Buffer address.
Definition: dwmac.h:20
#define ENODEV
No such device.
Definition: errno.h:510
DMA operations.
Definition: dma.h:60
static uint16_t struct vmbus_xfer_pages_operations * op
Definition: netvsc.h:327
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.

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

◆ dma_op_unmap()

static 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 }
struct dma_device * dma
DMA device (if unmapping is required)
Definition: dma.h:42
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
ring len
Length.
Definition: dwmac.h:231
static __always_inline int struct dma_mapping * map
Definition: dma.h:184
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
physaddr_t dma(struct dma_mapping *map, void *addr)
Get DMA address from virtual address.
A DMA-capable device.
Definition: dma.h:48

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

◆ dma_op_alloc()

static 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 }
ring len
Length.
Definition: dwmac.h:231
DMA operations.
Definition: dma.h:60
static uint16_t struct vmbus_xfer_pages_operations * op
Definition: netvsc.h:327
static __always_inline int struct dma_mapping * map
Definition: dma.h:184
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
physaddr_t dma(struct dma_mapping *map, void *addr)
Get DMA address from virtual address.

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

◆ dma_op_free()

static 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 }
struct dma_device * dma
DMA device (if unmapping is required)
Definition: dma.h:42
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
ring len
Length.
Definition: dwmac.h:231
uint32_t addr
Buffer address.
Definition: dwmac.h:20
static __always_inline int struct dma_mapping * map
Definition: dma.h:184
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
physaddr_t dma(struct dma_mapping *map, void *addr)
Get DMA address from virtual address.
A DMA-capable device.
Definition: dma.h:48

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

◆ dma_op_umalloc()

static 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 }
ring len
Length.
Definition: dwmac.h:231
DMA operations.
Definition: dma.h:60
static uint16_t struct vmbus_xfer_pages_operations * op
Definition: netvsc.h:327
static __always_inline int struct dma_mapping * map
Definition: dma.h:184
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
physaddr_t dma(struct dma_mapping *map, void *addr)
Get DMA address from virtual address.

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

◆ dma_op_ufree()

static 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 }
struct dma_device * dma
DMA device (if unmapping is required)
Definition: dma.h:42
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
ring len
Length.
Definition: dwmac.h:231
uint32_t addr
Buffer address.
Definition: dwmac.h:20
static __always_inline int struct dma_mapping * map
Definition: dma.h:184
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
physaddr_t dma(struct dma_mapping *map, void *addr)
Get DMA address from virtual address.
A DMA-capable device.
Definition: dma.h:48

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

◆ dma_op_set_mask()

static 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 }
DMA operations.
Definition: dma.h:60
static uint16_t struct vmbus_xfer_pages_operations * op
Definition: netvsc.h:327
physaddr_t dma(struct dma_mapping *map, void *addr)
Get DMA address from virtual address.

References dma(), and op.

◆ PROVIDE_DMAAPI() [1/7]

PROVIDE_DMAAPI ( op  ,
dma_map  ,
dma_op_map   
)

◆ PROVIDE_DMAAPI() [2/7]

PROVIDE_DMAAPI ( op  ,
dma_unmap  ,
dma_op_unmap   
)

◆ PROVIDE_DMAAPI() [3/7]

PROVIDE_DMAAPI ( op  ,
dma_alloc  ,
dma_op_alloc   
)

◆ PROVIDE_DMAAPI() [4/7]

PROVIDE_DMAAPI ( op  ,
dma_free  ,
dma_op_free   
)

◆ PROVIDE_DMAAPI() [5/7]

PROVIDE_DMAAPI ( op  ,
dma_umalloc  ,
dma_op_umalloc   
)

◆ PROVIDE_DMAAPI() [6/7]

PROVIDE_DMAAPI ( op  ,
dma_ufree  ,
dma_op_ufree   
)

◆ PROVIDE_DMAAPI() [7/7]

PROVIDE_DMAAPI ( op  ,
dma_set_mask  ,
dma_op_set_mask   
)

◆ PROVIDE_DMAAPI_INLINE() [9/9]

PROVIDE_DMAAPI_INLINE ( op  ,
dma   
)