mem_desc
const uint64_t v1 = ((const struct mem_desc *)a)->base;
const uint64_t v2 = ((const struct mem_desc *)b)->base;
struct mem_desc avail[4];
struct mem_desc mem[nitems(region) + 3]; /* up to 3 holes */
struct mem_desc *md;
qsort(avail, i, sizeof(struct mem_desc), mem_desc_cmp);
qsort(mem, n, sizeof(struct mem_desc), mem_desc_cmp);
struct dma_memory_desc *mem_desc;
mem_desc = &sc->ioctl_sge[i];
if (mem_desc->addr && mem_desc->dma_addr) {
bus_dmamap_unload(mem_desc->tag, mem_desc->dmamap);
bus_dmamem_free(mem_desc->tag, mem_desc->addr, mem_desc->dmamap);
mem_desc->addr = NULL;
if (mem_desc->tag != NULL)
bus_dma_tag_destroy(mem_desc->tag);
mem_desc = &sc->ioctl_chain_sge;
if (mem_desc->addr && mem_desc->dma_addr) {
bus_dmamap_unload(mem_desc->tag, mem_desc->dmamap);
bus_dmamem_free(mem_desc->tag, mem_desc->addr, mem_desc->dmamap);
mem_desc->addr = NULL;
if (mem_desc->tag != NULL)
bus_dma_tag_destroy(mem_desc->tag);
mem_desc = &sc->ioctl_resp_sge;
if (mem_desc->addr && mem_desc->dma_addr) {
bus_dmamap_unload(mem_desc->tag, mem_desc->dmamap);
bus_dmamem_free(mem_desc->tag, mem_desc->addr, mem_desc->dmamap);
mem_desc->addr = NULL;
if (mem_desc->tag != NULL)
bus_dma_tag_destroy(mem_desc->tag);
struct dma_memory_desc *mem_desc;
mem_desc = &sc->ioctl_sge[i];
mem_desc->size = MPI3MR_IOCTL_SGE_SIZE;
mem_desc->size, /* maxsize */
mem_desc->size, /* maxsegsize */
&mem_desc->tag)) {
if (bus_dmamem_alloc(mem_desc->tag, (void **)&mem_desc->addr,
BUS_DMA_NOWAIT, &mem_desc->dmamap)) {
bzero(mem_desc->addr, mem_desc->size);
bus_dmamap_load(mem_desc->tag, mem_desc->dmamap, mem_desc->addr, mem_desc->size,
mpi3mr_memaddr_cb, &mem_desc->dma_addr, BUS_DMA_NOWAIT);
if (!mem_desc->addr)
mem_desc = &sc->ioctl_chain_sge;
mem_desc->size = MPI3MR_4K_PGSZ;
mem_desc->size, /* maxsize */
mem_desc->size, /* maxsegsize */
&mem_desc->tag)) {
if (bus_dmamem_alloc(mem_desc->tag, (void **)&mem_desc->addr,
BUS_DMA_NOWAIT, &mem_desc->dmamap)) {
bzero(mem_desc->addr, mem_desc->size);
bus_dmamap_load(mem_desc->tag, mem_desc->dmamap, mem_desc->addr, mem_desc->size,
mpi3mr_memaddr_cb, &mem_desc->dma_addr, BUS_DMA_NOWAIT);
if (!mem_desc->addr)
mem_desc = &sc->ioctl_resp_sge;
mem_desc->size = MPI3MR_4K_PGSZ;
mem_desc->size, /* maxsize */
mem_desc->size, /* maxsegsize */
&mem_desc->tag)) {
if (bus_dmamem_alloc(mem_desc->tag, (void **)&mem_desc->addr,
BUS_DMA_NOWAIT, &mem_desc->dmamap)) {
bzero(mem_desc->addr, mem_desc->size);
bus_dmamap_load(mem_desc->tag, mem_desc->dmamap, mem_desc->addr, mem_desc->size,
mpi3mr_memaddr_cb, &mem_desc->dma_addr, BUS_DMA_NOWAIT);
if (!mem_desc->addr)
struct dma_memory_desc *mem_desc)
if (mem_desc->dma_addr)
bus_dmamap_unload(mem_desc->tag, mem_desc->dmamap);
if (mem_desc->addr != NULL) {
bus_dmamem_free(mem_desc->tag, mem_desc->addr, mem_desc->dmamap);
mem_desc->addr = NULL;
if (mem_desc->tag != NULL)
bus_dma_tag_destroy(mem_desc->tag);
struct dma_memory_desc *mem_desc)
mem_desc->size, /* maxsize */
mem_desc->size, /* maxsize */
&mem_desc->tag)) {
if (bus_dmamem_alloc(mem_desc->tag, (void **)&mem_desc->addr,
BUS_DMA_NOWAIT, &mem_desc->dmamap)) {
bzero(mem_desc->addr, mem_desc->size);
bus_dmamap_load(mem_desc->tag, mem_desc->dmamap, mem_desc->addr, mem_desc->size,
mpi3mr_memaddr_cb, &mem_desc->dma_addr, BUS_DMA_NOWAIT);
if (!mem_desc->addr) {
mpi3mr_free_dma_mem(sc, mem_desc);
struct dma_memory_desc mem_desc = {0};
mem_desc.size = sizeof(Mpi3ConfigPageHeader_t);
mem_desc.size = le16toh(cfg_hdr->PageLength) * 4;
retval = mpi3mr_alloc_dma_mem(sc, &mem_desc);
mem_desc.size, mem_desc.dma_addr);
memcpy(cfg_buf, mem_desc.addr, min(mem_desc.size, cfg_buf_sz));
mpi3mr_free_dma_mem(sc, &mem_desc);
#define PIOCGMEM _IOWR('P', 2, struct mem_desc) /* Get memory map */
#define PIOCSMEM _IOW('P', 3, struct mem_desc) /* Set memory map */