FreeBSD kernel kern code
subr_bus_dma.c File Reference
#include <sys/cdefs.h>
#include "opt_bus.h"
#include "opt_iommu.h"
#include <sys/param.h>
#include <sys/conf.h>
#include <sys/systm.h>
#include <sys/bio.h>
#include <sys/bus.h>
#include <sys/callout.h>
#include <sys/ktr.h>
#include <sys/lock.h>
#include <sys/mbuf.h>
#include <sys/memdesc.h>
#include <sys/mutex.h>
#include <sys/proc.h>
#include <sys/uio.h>
#include <vm/vm.h>
#include <vm/vm_page.h>
#include <vm/vm_map.h>
#include <vm/pmap.h>
#include <cam/cam.h>
#include <cam/cam_ccb.h>
#include <opencrypto/cryptodev.h>
#include <machine/bus.h>
Include dependency graph for subr_bus_dma.c:

Go to the source code of this file.

Functions

 __FBSDID ("$FreeBSD$")
 
void busdma_lock_mutex (void *arg, bus_dma_lock_op_t op)
 
void _busdma_dflt_lock (void *arg, bus_dma_lock_op_t op)
 
static int _bus_dmamap_load_vlist (bus_dma_tag_t dmat, bus_dmamap_t map, bus_dma_segment_t *list, int sglist_cnt, struct pmap *pmap, int *nsegs, int flags, size_t offset, size_t length)
 
static int _bus_dmamap_load_plist (bus_dma_tag_t dmat, bus_dmamap_t map, bus_dma_segment_t *list, int sglist_cnt, int *nsegs, int flags)
 
static int _bus_dmamap_load_mbuf_epg (bus_dma_tag_t dmat, bus_dmamap_t map, struct mbuf *m, bus_dma_segment_t *segs, int *nsegs, int flags)
 
static int _bus_dmamap_load_single_mbuf (bus_dma_tag_t dmat, bus_dmamap_t map, struct mbuf *m, bus_dma_segment_t *segs, int *nsegs, int flags)
 
static int _bus_dmamap_load_mbuf_sg (bus_dma_tag_t dmat, bus_dmamap_t map, struct mbuf *m0, bus_dma_segment_t *segs, int *nsegs, int flags)
 
static int _bus_dmamap_load_bio (bus_dma_tag_t dmat, bus_dmamap_t map, struct bio *bio, int *nsegs, int flags)
 
int bus_dmamap_load_ma_triv (bus_dma_tag_t dmat, bus_dmamap_t map, struct vm_page **ma, bus_size_t tlen, int ma_offs, int flags, bus_dma_segment_t *segs, int *segp)
 
static int _bus_dmamap_load_ccb (bus_dma_tag_t dmat, bus_dmamap_t map, union ccb *ccb, int *nsegs, int flags)
 
static int _bus_dmamap_load_uio (bus_dma_tag_t dmat, bus_dmamap_t map, struct uio *uio, int *nsegs, int flags)
 
int bus_dmamap_load (bus_dma_tag_t dmat, bus_dmamap_t map, void *buf, bus_size_t buflen, bus_dmamap_callback_t *callback, void *callback_arg, int flags)
 
int bus_dmamap_load_mbuf (bus_dma_tag_t dmat, bus_dmamap_t map, struct mbuf *m0, bus_dmamap_callback2_t *callback, void *callback_arg, int flags)
 
int bus_dmamap_load_mbuf_sg (bus_dma_tag_t dmat, bus_dmamap_t map, struct mbuf *m0, bus_dma_segment_t *segs, int *nsegs, int flags)
 
int bus_dmamap_load_uio (bus_dma_tag_t dmat, bus_dmamap_t map, struct uio *uio, bus_dmamap_callback2_t *callback, void *callback_arg, int flags)
 
int bus_dmamap_load_ccb (bus_dma_tag_t dmat, bus_dmamap_t map, union ccb *ccb, bus_dmamap_callback_t *callback, void *callback_arg, int flags)
 
int bus_dmamap_load_bio (bus_dma_tag_t dmat, bus_dmamap_t map, struct bio *bio, bus_dmamap_callback_t *callback, void *callback_arg, int flags)
 
int bus_dmamap_load_mem (bus_dma_tag_t dmat, bus_dmamap_t map, struct memdesc *mem, bus_dmamap_callback_t *callback, void *callback_arg, int flags)
 
int bus_dmamap_load_crp_buffer (bus_dma_tag_t dmat, bus_dmamap_t map, struct crypto_buffer *cb, bus_dmamap_callback_t *callback, void *callback_arg, int flags)
 
int bus_dmamap_load_crp (bus_dma_tag_t dmat, bus_dmamap_t map, struct cryptop *crp, bus_dmamap_callback_t *callback, void *callback_arg, int flags)
 
void bus_dma_template_init (bus_dma_template_t *t, bus_dma_tag_t parent)
 
int bus_dma_template_tag (bus_dma_template_t *t, bus_dma_tag_t *dmat)
 
void bus_dma_template_fill (bus_dma_template_t *t, bus_dma_param_t *kv, u_int count)
 
bool bus_dma_iommu_set_buswide (device_t dev)
 
int bus_dma_iommu_load_ident (bus_dma_tag_t dmat, bus_dmamap_t map, vm_paddr_t start, vm_size_t length, int flags)
 

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ _bus_dmamap_load_bio()

static int _bus_dmamap_load_bio ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
struct bio *  bio,
int *  nsegs,
int  flags 
)
static

Definition at line 266 of file subr_bus_dma.c.

References _bus_dmamap_load_vlist(), and flags.

Referenced by _bus_dmamap_load_ccb(), bus_dmamap_load_bio(), and bus_dmamap_load_mem().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _bus_dmamap_load_ccb()

static int _bus_dmamap_load_ccb ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
union ccb *  ccb,
int *  nsegs,
int  flags 
)
static

Definition at line 311 of file subr_bus_dma.c.

References _bus_dmamap_load_bio(), _bus_dmamap_load_plist(), _bus_dmamap_load_vlist(), flags, and panic().

Referenced by bus_dmamap_load_ccb(), and bus_dmamap_load_mem().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _bus_dmamap_load_mbuf_epg()

static int _bus_dmamap_load_mbuf_epg ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
struct mbuf *  m,
bus_dma_segment_t *  segs,
int *  nsegs,
int  flags 
)
static

Definition at line 159 of file subr_bus_dma.c.

References flags.

Referenced by _bus_dmamap_load_mbuf_sg(), and _bus_dmamap_load_single_mbuf().

Here is the caller graph for this function:

◆ _bus_dmamap_load_mbuf_sg()

static int _bus_dmamap_load_mbuf_sg ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
struct mbuf *  m0,
bus_dma_segment_t *  segs,
int *  nsegs,
int  flags 
)
static

Definition at line 239 of file subr_bus_dma.c.

References _bus_dmamap_load_mbuf_epg(), and flags.

Referenced by bus_dmamap_load_crp_buffer(), bus_dmamap_load_mbuf(), bus_dmamap_load_mbuf_sg(), and bus_dmamap_load_mem().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _bus_dmamap_load_plist()

static int _bus_dmamap_load_plist ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
bus_dma_segment_t *  list,
int  sglist_cnt,
int *  nsegs,
int  flags 
)
static

Definition at line 139 of file subr_bus_dma.c.

References flags.

Referenced by _bus_dmamap_load_ccb(), and bus_dmamap_load_mem().

Here is the caller graph for this function:

◆ _bus_dmamap_load_single_mbuf()

static int _bus_dmamap_load_single_mbuf ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
struct mbuf *  m,
bus_dma_segment_t *  segs,
int *  nsegs,
int  flags 
)
static

Definition at line 218 of file subr_bus_dma.c.

References _bus_dmamap_load_mbuf_epg(), and flags.

Referenced by bus_dmamap_load_crp_buffer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _bus_dmamap_load_uio()

static int _bus_dmamap_load_uio ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
struct uio *  uio,
int *  nsegs,
int  flags 
)
static

Definition at line 399 of file subr_bus_dma.c.

References addr, and flags.

Referenced by bus_dmamap_load_crp_buffer(), bus_dmamap_load_mem(), and bus_dmamap_load_uio().

Here is the caller graph for this function:

◆ _bus_dmamap_load_vlist()

static int _bus_dmamap_load_vlist ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
bus_dma_segment_t *  list,
int  sglist_cnt,
struct pmap *  pmap,
int *  nsegs,
int  flags,
size_t  offset,
size_t  length 
)
static

Definition at line 107 of file subr_bus_dma.c.

References addr, and flags.

Referenced by _bus_dmamap_load_bio(), _bus_dmamap_load_ccb(), and bus_dmamap_load_mem().

Here is the caller graph for this function:

◆ _busdma_dflt_lock()

void _busdma_dflt_lock ( void *  arg,
bus_dma_lock_op_t  op 
)

Definition at line 94 of file subr_bus_dma.c.

References panic().

Here is the call graph for this function:

◆ bus_dma_iommu_load_ident()

int bus_dma_iommu_load_ident ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
vm_paddr_t  start,
vm_size_t  length,
int  flags 
)

Definition at line 899 of file subr_bus_dma.c.

◆ bus_dma_iommu_set_buswide()

bool bus_dma_iommu_set_buswide ( device_t  dev)

Definition at line 893 of file subr_bus_dma.c.

◆ bus_dma_template_fill()

void bus_dma_template_fill ( bus_dma_template_t *  t,
bus_dma_param_t *  kv,
u_int  count 
)

Definition at line 835 of file subr_bus_dma.c.

References count.

◆ bus_dma_template_init()

void bus_dma_template_init ( bus_dma_template_t *  t,
bus_dma_tag_t  parent 
)

Definition at line 804 of file subr_bus_dma.c.

References parent.

◆ bus_dma_template_tag()

int bus_dma_template_tag ( bus_dma_template_t *  t,
bus_dma_tag_t *  dmat 
)

Definition at line 822 of file subr_bus_dma.c.

◆ bus_dmamap_load()

int bus_dmamap_load ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
void *  buf,
bus_size_t  buflen,
bus_dmamap_callback_t *  callback,
void *  callback_arg,
int  flags 
)

Definition at line 441 of file subr_bus_dma.c.

References buf, callback, and flags.

◆ bus_dmamap_load_bio()

int bus_dmamap_load_bio ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
struct bio *  bio,
bus_dmamap_callback_t *  callback,
void *  callback_arg,
int  flags 
)

Definition at line 615 of file subr_bus_dma.c.

References _bus_dmamap_load_bio(), callback, and flags.

Here is the call graph for this function:

◆ bus_dmamap_load_ccb()

int bus_dmamap_load_ccb ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
union ccb *  ccb,
bus_dmamap_callback_t *  callback,
void *  callback_arg,
int  flags 
)

Definition at line 565 of file subr_bus_dma.c.

References _bus_dmamap_load_ccb(), callback, and flags.

Here is the call graph for this function:

◆ bus_dmamap_load_crp()

int bus_dmamap_load_crp ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
struct cryptop *  crp,
bus_dmamap_callback_t *  callback,
void *  callback_arg,
int  flags 
)

Definition at line 796 of file subr_bus_dma.c.

References bus_dmamap_load_crp_buffer(), callback, and flags.

Here is the call graph for this function:

◆ bus_dmamap_load_crp_buffer()

int bus_dmamap_load_crp_buffer ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
struct crypto_buffer *  cb,
bus_dmamap_callback_t *  callback,
void *  callback_arg,
int  flags 
)

Definition at line 735 of file subr_bus_dma.c.

References _bus_dmamap_load_mbuf_sg(), _bus_dmamap_load_single_mbuf(), _bus_dmamap_load_uio(), callback, and flags.

Referenced by bus_dmamap_load_crp().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bus_dmamap_load_ma_triv()

int bus_dmamap_load_ma_triv ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
struct vm_page **  ma,
bus_size_t  tlen,
int  ma_offs,
int  flags,
bus_dma_segment_t *  segs,
int *  segp 
)

Definition at line 286 of file subr_bus_dma.c.

References flags.

◆ bus_dmamap_load_mbuf()

int bus_dmamap_load_mbuf ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
struct mbuf *  m0,
bus_dmamap_callback2_t *  callback,
void *  callback_arg,
int  flags 
)

Definition at line 488 of file subr_bus_dma.c.

References _bus_dmamap_load_mbuf_sg(), callback, and flags.

Here is the call graph for this function:

◆ bus_dmamap_load_mbuf_sg()

int bus_dmamap_load_mbuf_sg ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
struct mbuf *  m0,
bus_dma_segment_t *  segs,
int *  nsegs,
int  flags 
)

Definition at line 518 of file subr_bus_dma.c.

References _bus_dmamap_load_mbuf_sg(), and flags.

Here is the call graph for this function:

◆ bus_dmamap_load_mem()

int bus_dmamap_load_mem ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
struct memdesc *  mem,
bus_dmamap_callback_t *  callback,
void *  callback_arg,
int  flags 
)

Definition at line 659 of file subr_bus_dma.c.

References _bus_dmamap_load_bio(), _bus_dmamap_load_ccb(), _bus_dmamap_load_mbuf_sg(), _bus_dmamap_load_plist(), _bus_dmamap_load_uio(), _bus_dmamap_load_vlist(), callback, and flags.

Referenced by busdma_swi().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bus_dmamap_load_uio()

int bus_dmamap_load_uio ( bus_dma_tag_t  dmat,
bus_dmamap_t  map,
struct uio *  uio,
bus_dmamap_callback2_t *  callback,
void *  callback_arg,
int  flags 
)

Definition at line 537 of file subr_bus_dma.c.

References _bus_dmamap_load_uio(), callback, and flags.

Here is the call graph for this function:

◆ busdma_lock_mutex()

void busdma_lock_mutex ( void *  arg,
bus_dma_lock_op_t  op 
)

Definition at line 69 of file subr_bus_dma.c.

References mtx, and panic().

Here is the call graph for this function: