FreeBSD kernel kern code
subr_mbpool.c File Reference
#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/kernel.h>
#include <sys/systm.h>
#include <sys/malloc.h>
#include <sys/module.h>
#include <machine/bus.h>
#include <sys/mbpool.h>
Include dependency graph for subr_mbpool.c:

Go to the source code of this file.

Data Structures

struct  mbtrail
 
struct  mbfree
 
struct  mbpage
 
struct  mbpool
 

Macros

#define MBP_CARD   0x8000
 
#define MBP_USED   0x4000
 
#define MBP_PMSK   0x3fff /* page number mask */
 
#define MBP_CMSK   0x01ff /* chunk number mask */
 
#define C2T(P, C)
 
#define N2C(P, PG, C)
 
#define HMAKE(P, C)   ((((P) & MBP_PMSK) << 16) | ((C) << 7))
 
#define HPAGE(H)   (((H) >> 16) & MBP_PMSK)
 
#define HCHUNK(H)   (((H) >> 7) & MBP_CMSK)
 

Functions

 __FBSDID ("$BSDSUniX$")
 
 MODULE_VERSION (libmbpool, 1)
 
static MALLOC_DEFINE (M_MBPOOL,"mbpools","mbuf pools")
 
int mbp_create (struct mbpool **pp, const char *name, bus_dma_tag_t dmat, u_int max_pages, size_t page_size, size_t chunk_size)
 
void mbp_destroy (struct mbpool *p)
 
static void mbp_callback (void *arg, bus_dma_segment_t *segs, int nsegs, int error)
 
static void mbp_alloc_page (struct mbpool *p)
 
void * mbp_alloc (struct mbpool *p, bus_addr_t *pap, uint32_t *hp)
 
void mbp_free (struct mbpool *p, void *ptr)
 
void mbp_ext_free (void *buf, void *arg)
 
void mbp_card_free (struct mbpool *p)
 
void mbp_count (struct mbpool *p, u_int *used, u_int *card, u_int *free)
 
void * mbp_get (struct mbpool *p, uint32_t h)
 
void * mbp_get_keep (struct mbpool *p, uint32_t h)
 
void mbp_sync (struct mbpool *p, uint32_t h, bus_addr_t off, bus_size_t len, u_int op)
 

Macro Definition Documentation

#define C2T (   P,
 
)
Value:
((struct mbtrail *)((char *)(C) + (P)->chunk_size - \
sizeof(struct mbtrail)))

Definition at line 98 of file subr_mbpool.c.

Referenced by mbp_alloc(), mbp_alloc_page(), mbp_card_free(), mbp_count(), mbp_destroy(), mbp_free(), mbp_get(), and mbp_get_keep().

#define HCHUNK (   H)    (((H) >> 7) & MBP_CMSK)

Definition at line 112 of file subr_mbpool.c.

Referenced by mbp_get(), mbp_get_keep(), and mbp_sync().

#define HMAKE (   P,
 
)    ((((P) & MBP_PMSK) << 16) | ((C) << 7))

Definition at line 110 of file subr_mbpool.c.

Referenced by mbp_alloc().

#define HPAGE (   H)    (((H) >> 16) & MBP_PMSK)

Definition at line 111 of file subr_mbpool.c.

Referenced by mbp_get(), mbp_get_keep(), and mbp_sync().

#define MBP_CARD   0x8000
#define MBP_CMSK   0x01ff /* chunk number mask */

Definition at line 67 of file subr_mbpool.c.

#define MBP_PMSK   0x3fff /* page number mask */

Definition at line 66 of file subr_mbpool.c.

Referenced by mbp_card_free().

#define MBP_USED   0x4000

Definition at line 65 of file subr_mbpool.c.

Referenced by mbp_alloc(), mbp_count(), mbp_destroy(), and mbp_free().

#define N2C (   P,
  PG,
 
)
Value:
((struct mbfree *)((char *)(PG)->va + \
(C) * (P)->chunk_size))

Definition at line 104 of file subr_mbpool.c.

Referenced by mbp_alloc_page(), mbp_card_free(), mbp_count(), mbp_destroy(), mbp_get(), and mbp_get_keep().

Function Documentation

__FBSDID ( "$BSDSUniX$"  )
static MALLOC_DEFINE ( M_MBPOOL  ,
"mbpools"  ,
"mbuf pools"   
)
static
void* mbp_alloc ( struct mbpool p,
bus_addr_t *  pap,
uint32_t *  hp 
)

Definition at line 237 of file subr_mbpool.c.

References C2T, mbtrail::chunk, mbpool::chunk_size, mbpool::free_lock, HMAKE, mbp_alloc_page(), MBP_CARD, MBP_USED, and mbtrail::page.

Here is the call graph for this function:

static void mbp_alloc_page ( struct mbpool p)
static

Definition at line 194 of file subr_mbpool.c.

References bus_dmamap_load(), C2T, mbtrail::chunk, mbpool::dmat, mbpage::map, mbpool::max_pages, mbp_callback(), N2C, mbpool::name, mbtrail::page, mbpool::page_size, mbpage::phy, printf(), and mbpage::va.

Referenced by mbp_alloc().

Here is the call graph for this function:

Here is the caller graph for this function:

static void mbp_callback ( void *  arg,
bus_dma_segment_t *  segs,
int  nsegs,
int  error 
)
static

Definition at line 184 of file subr_mbpool.c.

Referenced by mbp_alloc_page().

Here is the caller graph for this function:

void mbp_card_free ( struct mbpool p)

Definition at line 292 of file subr_mbpool.c.

References C2T, mbpool::free_lock, MBP_CARD, MBP_PMSK, N2C, and mbtrail::page.

void mbp_count ( struct mbpool p,
u_int *  used,
u_int *  card,
u_int *  free 
)

Definition at line 318 of file subr_mbpool.c.

References C2T, mbpool::free_lock, MBP_CARD, MBP_USED, N2C, and mbtrail::page.

int mbp_create ( struct mbpool **  pp,
const char *  name,
bus_dma_tag_t  dmat,
u_int  max_pages,
size_t  page_size,
size_t  chunk_size 
)

Definition at line 118 of file subr_mbpool.c.

References mbpool::chunk_size, mbpool::dmat, malloc(), mbpool::max_pages, mtx_init(), mbpool::name, and mbpool::page_size.

Here is the call graph for this function:

void mbp_destroy ( struct mbpool p)

Definition at line 150 of file subr_mbpool.c.

References C2T, mbpool::dmat, free(), mbpool::free_lock, mbpage::map, MBP_CARD, MBP_USED, mtx_destroy(), N2C, mbpool::name, mbtrail::page, printf(), and mbpage::va.

Here is the call graph for this function:

void mbp_ext_free ( void *  buf,
void *  arg 
)

Definition at line 283 of file subr_mbpool.c.

References mbp_free().

Here is the call graph for this function:

void mbp_free ( struct mbpool p,
void *  ptr 
)

Definition at line 268 of file subr_mbpool.c.

References C2T, mbpool::free_lock, MBP_CARD, MBP_USED, and mbtrail::page.

Referenced by mbp_ext_free().

Here is the caller graph for this function:

void* mbp_get ( struct mbpool p,
uint32_t  h 
)

Definition at line 346 of file subr_mbpool.c.

References C2T, HCHUNK, HPAGE, MBP_CARD, N2C, mbpool::name, mbtrail::page, and printf().

Here is the call graph for this function:

void* mbp_get_keep ( struct mbpool p,
uint32_t  h 
)

Definition at line 368 of file subr_mbpool.c.

References C2T, HCHUNK, HPAGE, MBP_CARD, N2C, mbpool::name, mbtrail::page, and printf().

Here is the call graph for this function:

void mbp_sync ( struct mbpool p,
uint32_t  h,
bus_addr_t  off,
bus_size_t  len,
u_int  op 
)

Definition at line 389 of file subr_mbpool.c.

References mbpool::chunk_size, mbpool::dmat, HCHUNK, and HPAGE.

MODULE_VERSION ( libmbpool  ,
 
)