Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F144701213
D22906.id65925.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
11 KB
Referenced Files
None
Subscribers
None
D22906.id65925.diff
View Options
Index: sys/dev/mpr/mpr.c
===================================================================
--- sys/dev/mpr/mpr.c
+++ sys/dev/mpr/mpr.c
@@ -1311,6 +1311,7 @@
static int
mpr_alloc_hw_queues(struct mpr_softc *sc)
{
+ bus_dma_tag_template_t t;
bus_addr_t queues_busaddr;
uint8_t *queues;
int qsize, fqsize, pqsize;
@@ -1332,17 +1333,12 @@
pqsize = sc->pqdepth * 8;
qsize = fqsize + pqsize;
- if (bus_dma_tag_create( sc->mpr_parent_dmat, /* parent */
- 16, 0, /* algnmnt, boundary */
- BUS_SPACE_MAXADDR_32BIT,/* lowaddr */
- BUS_SPACE_MAXADDR, /* highaddr */
- NULL, NULL, /* filter, filterarg */
- qsize, /* maxsize */
- 1, /* nsegments */
- qsize, /* maxsegsize */
- 0, /* flags */
- NULL, NULL, /* lockfunc, lockarg */
- &sc->queues_dmat)) {
+ bus_dma_tag_init(sc->mpr_parent_dmat, &t);
+ t.alignment = 16;
+ t.lowaddr = BUS_SPACE_MAXADDR_32BIT;
+ t.maxsize = t.maxsegsize = qsize;
+ t.nsegments = 1;
+ if (bus_dma_tag_simple(&t, &sc->queues_dmat)) {
mpr_dprint(sc, MPR_ERROR, "Cannot allocate queues DMA tag\n");
return (ENOMEM);
}
@@ -1370,6 +1366,7 @@
static int
mpr_alloc_replies(struct mpr_softc *sc)
{
+ bus_dma_tag_template_t t;
int rsize, num_replies;
/* Store the reply frame size in bytes rather than as 32bit words */
@@ -1383,17 +1380,12 @@
num_replies = max(sc->fqdepth, sc->num_replies);
rsize = sc->replyframesz * num_replies;
- if (bus_dma_tag_create( sc->mpr_parent_dmat, /* parent */
- 4, 0, /* algnmnt, boundary */
- BUS_SPACE_MAXADDR_32BIT,/* lowaddr */
- BUS_SPACE_MAXADDR, /* highaddr */
- NULL, NULL, /* filter, filterarg */
- rsize, /* maxsize */
- 1, /* nsegments */
- rsize, /* maxsegsize */
- 0, /* flags */
- NULL, NULL, /* lockfunc, lockarg */
- &sc->reply_dmat)) {
+ bus_dma_tag_init(sc->mpr_parent_dmat, &t);
+ t.alignment = 4;
+ t.lowaddr = BUS_SPACE_MAXADDR_32BIT;
+ t.maxsize = t.maxsegsize = rsize;
+ t.nsegments = 1;
+ if (bus_dma_tag_simple(&t, &sc->reply_dmat)) {
mpr_dprint(sc, MPR_ERROR, "Cannot allocate replies DMA tag\n");
return (ENOMEM);
}
@@ -1440,21 +1432,17 @@
static int
mpr_alloc_requests(struct mpr_softc *sc)
{
+ bus_dma_tag_template_t t;
struct mpr_command *cm;
int i, rsize, nsegs;
rsize = sc->reqframesz * sc->num_reqs;
- if (bus_dma_tag_create( sc->mpr_parent_dmat, /* parent */
- 16, 0, /* algnmnt, boundary */
- BUS_SPACE_MAXADDR_32BIT,/* lowaddr */
- BUS_SPACE_MAXADDR, /* highaddr */
- NULL, NULL, /* filter, filterarg */
- rsize, /* maxsize */
- 1, /* nsegments */
- rsize, /* maxsegsize */
- 0, /* flags */
- NULL, NULL, /* lockfunc, lockarg */
- &sc->req_dmat)) {
+ bus_dma_tag_init(sc->mpr_parent_dmat, &t);
+ t.alignment = 16;
+ t.lowaddr = BUS_SPACE_MAXADDR_32BIT;
+ t.maxsize = t.maxsegsize = rsize;
+ t.nsegments = 1;
+ if (bus_dma_tag_simple(&t, &sc->req_dmat)) {
mpr_dprint(sc, MPR_ERROR, "Cannot allocate request DMA tag\n");
return (ENOMEM);
}
@@ -1476,17 +1464,11 @@
return (ENOMEM);
}
rsize = sc->chain_frame_size * sc->num_chains;
- if (bus_dma_tag_create( sc->mpr_parent_dmat, /* parent */
- 16, 0, /* algnmnt, boundary */
- BUS_SPACE_MAXADDR, /* lowaddr */
- BUS_SPACE_MAXADDR, /* highaddr */
- NULL, NULL, /* filter, filterarg */
- rsize, /* maxsize */
- howmany(rsize, PAGE_SIZE), /* nsegments */
- rsize, /* maxsegsize */
- 0, /* flags */
- NULL, NULL, /* lockfunc, lockarg */
- &sc->chain_dmat)) {
+ bus_dma_tag_init(sc->mpr_parent_dmat, &t);
+ t.alignment = 16;
+ t.maxsize = t.maxsegsize = rsize;
+ t.nsegments = howmany(rsize, PAGE_SIZE);
+ if (bus_dma_tag_simple(&t, &sc->chain_dmat)) {
mpr_dprint(sc, MPR_ERROR, "Cannot allocate chain DMA tag\n");
return (ENOMEM);
}
@@ -1504,17 +1486,11 @@
}
rsize = MPR_SENSE_LEN * sc->num_reqs;
- if (bus_dma_tag_create( sc->mpr_parent_dmat, /* parent */
- 1, 0, /* algnmnt, boundary */
- BUS_SPACE_MAXADDR_32BIT,/* lowaddr */
- BUS_SPACE_MAXADDR, /* highaddr */
- NULL, NULL, /* filter, filterarg */
- rsize, /* maxsize */
- 1, /* nsegments */
- rsize, /* maxsegsize */
- 0, /* flags */
- NULL, NULL, /* lockfunc, lockarg */
- &sc->sense_dmat)) {
+ bus_dma_tag_init(sc->mpr_parent_dmat, &t);
+ t.lowaddr = BUS_SPACE_MAXADDR_32BIT;
+ t.maxsize = t.maxsegsize = rsize;
+ t.nsegments = 1;
+ if (bus_dma_tag_simple(&t, &sc->sense_dmat)) {
mpr_dprint(sc, MPR_ERROR, "Cannot allocate sense DMA tag\n");
return (ENOMEM);
}
@@ -1540,18 +1516,12 @@
}
nsegs = (sc->maxio / PAGE_SIZE) + 1;
- if (bus_dma_tag_create( sc->mpr_parent_dmat, /* parent */
- 1, 0, /* algnmnt, boundary */
- BUS_SPACE_MAXADDR, /* lowaddr */
- BUS_SPACE_MAXADDR, /* highaddr */
- NULL, NULL, /* filter, filterarg */
- BUS_SPACE_MAXSIZE_32BIT,/* maxsize */
- nsegs, /* nsegments */
- BUS_SPACE_MAXSIZE_32BIT,/* maxsegsize */
- BUS_DMA_ALLOCNOW, /* flags */
- busdma_lock_mutex, /* lockfunc */
- &sc->mpr_mtx, /* lockarg */
- &sc->buffer_dmat)) {
+ bus_dma_tag_init(sc->mpr_parent_dmat, &t);
+ t.nsegments = nsegs;
+ t.flags = BUS_DMA_ALLOCNOW;
+ t.lockfunc = busdma_lock_mutex;
+ t.lockfuncarg = &sc->mpr_mtx;
+ if (bus_dma_tag_simple(&t, &sc->buffer_dmat)) {
mpr_dprint(sc, MPR_ERROR, "Cannot allocate buffer DMA tag\n");
return (ENOMEM);
}
@@ -1608,9 +1578,10 @@
static int
mpr_alloc_nvme_prp_pages(struct mpr_softc *sc)
{
+ bus_dma_tag_template_t t;
+ struct mpr_prp_page *prp_page;
int PRPs_per_page, PRPs_required, pages_required;
int rsize, i;
- struct mpr_prp_page *prp_page;
/*
* Assuming a MAX_IO_SIZE of 1MB and a PAGE_SIZE of 4k, the max number
@@ -1637,17 +1608,12 @@
sc->prp_buffer_size = PAGE_SIZE * pages_required;
rsize = sc->prp_buffer_size * NVME_QDEPTH;
- if (bus_dma_tag_create( sc->mpr_parent_dmat, /* parent */
- 4, 0, /* algnmnt, boundary */
- BUS_SPACE_MAXADDR_32BIT,/* lowaddr */
- BUS_SPACE_MAXADDR, /* highaddr */
- NULL, NULL, /* filter, filterarg */
- rsize, /* maxsize */
- 1, /* nsegments */
- rsize, /* maxsegsize */
- 0, /* flags */
- NULL, NULL, /* lockfunc, lockarg */
- &sc->prp_page_dmat)) {
+ bus_dma_tag_init(sc->mpr_parent_dmat, &t);
+ t.alignment = 4;
+ t.lowaddr = BUS_SPACE_MAXADDR_32BIT;
+ t.maxsize = t.maxsegsize = rsize;
+ t.nsegments = 1;
+ if (bus_dma_tag_simple(&t, &sc->prp_page_dmat)) {
mpr_dprint(sc, MPR_ERROR, "Cannot allocate NVMe PRP DMA "
"tag\n");
return (ENOMEM);
Index: sys/dev/mpr/mpr_pci.c
===================================================================
--- sys/dev/mpr/mpr_pci.c
+++ sys/dev/mpr/mpr_pci.c
@@ -220,6 +220,7 @@
static int
mpr_pci_attach(device_t dev)
{
+ bus_dma_tag_template_t t;
struct mpr_softc *sc;
struct mpr_ident *m;
int error, i;
@@ -267,17 +268,8 @@
sc->mpr_bhandle = rman_get_bushandle(sc->mpr_regs_resource);
/* Allocate the parent DMA tag */
- if (bus_dma_tag_create( bus_get_dma_tag(dev), /* parent */
- 1, 0, /* algnmnt, boundary */
- BUS_SPACE_MAXADDR, /* lowaddr */
- BUS_SPACE_MAXADDR, /* highaddr */
- NULL, NULL, /* filter, filterarg */
- BUS_SPACE_MAXSIZE_32BIT,/* maxsize */
- BUS_SPACE_UNRESTRICTED, /* nsegments */
- BUS_SPACE_MAXSIZE_32BIT,/* maxsegsize */
- 0, /* flags */
- NULL, NULL, /* lockfunc, lockarg */
- &sc->mpr_parent_dmat)) {
+ bus_dma_tag_init(bus_get_dma_tag(dev), &t);
+ if (bus_dma_tag_simple(&t, &sc->mpr_parent_dmat)) {
mpr_printf(sc, "Cannot allocate parent DMA tag\n");
mpr_pci_free(sc);
return (ENOMEM);
Index: sys/dev/mpr/mpr_user.c
===================================================================
--- sys/dev/mpr/mpr_user.c
+++ sys/dev/mpr/mpr_user.c
@@ -1452,6 +1452,7 @@
mpr_diag_register(struct mpr_softc *sc, mpr_fw_diag_register_t *diag_register,
uint32_t *return_code)
{
+ bus_dma_tag_template_t t;
mpr_fw_diagnostic_buffer_t *pBuffer;
struct mpr_busdma_context *ctx;
uint8_t extended_type, buffer_type, i;
@@ -1514,17 +1515,11 @@
*return_code = MPR_FW_DIAG_ERROR_NO_BUFFER;
return (MPR_DIAG_FAILURE);
}
- if (bus_dma_tag_create( sc->mpr_parent_dmat, /* parent */
- 1, 0, /* algnmnt, boundary */
- BUS_SPACE_MAXADDR_32BIT,/* lowaddr */
- BUS_SPACE_MAXADDR, /* highaddr */
- NULL, NULL, /* filter, filterarg */
- buffer_size, /* maxsize */
- 1, /* nsegments */
- buffer_size, /* maxsegsize */
- 0, /* flags */
- NULL, NULL, /* lockfunc, lockarg */
- &sc->fw_diag_dmat)) {
+ bus_dma_tag_init(sc->mpr_parent_dmat, &t);
+ t.lowaddr = BUS_SPACE_MAXADDR_32BIT;
+ t.maxsize = t.maxsegsize = buffer_size;
+ t.nsegments = 1;
+ if (bus_dma_tag_simple(&t, &sc->fw_diag_dmat)) {
mpr_dprint(sc, MPR_ERROR,
"Cannot allocate FW diag buffer DMA tag\n");
*return_code = MPR_FW_DIAG_ERROR_NO_BUFFER;
Index: sys/sys/bus_dma.h
===================================================================
--- sys/sys/bus_dma.h
+++ sys/sys/bus_dma.h
@@ -179,6 +179,24 @@
bus_size_t maxsegsz, int flags, bus_dma_lock_t *lockfunc,
void *lockfuncarg, bus_dma_tag_t *dmat);
+typedef struct {
+ bus_dma_tag_t parent;
+ bus_size_t alignment;
+ bus_addr_t boundary;
+ bus_addr_t lowaddr;
+ bus_addr_t highaddr;
+ bus_dma_filter_t *filtfunc;
+ void *filtfuncarg;
+ bus_size_t maxsize;
+ int nsegments;
+ bus_size_t maxsegsize;
+ int flags;
+ bus_dma_lock_t *lockfunc;
+ void *lockfuncarg;
+} bus_dma_tag_template_t;
+void bus_dma_tag_init(bus_dma_tag_t parent, bus_dma_tag_template_t *t);
+int bus_dma_tag_simple(bus_dma_tag_template_t *t, bus_dma_tag_t *dmat);
+
/*
* Set the memory domain to be used for allocations.
*
Index: sys/x86/x86/busdma_machdep.c
===================================================================
--- sys/x86/x86/busdma_machdep.c
+++ sys/x86/x86/busdma_machdep.c
@@ -238,6 +238,31 @@
return (error);
}
+void
+bus_dma_tag_init(bus_dma_tag_t parent, bus_dma_tag_template_t *t)
+{
+ t->parent = parent;
+ t->alignment = 1;
+ t->boundary = 0;
+ t->lowaddr = t->highaddr = BUS_SPACE_MAXADDR;
+ t->filtfunc = NULL;
+ t->lockfunc = NULL;
+ t->filtfuncarg = t->lockfuncarg = NULL;
+ t->maxsize = t->maxsegsize = BUS_SPACE_MAXSIZE;
+ t->nsegments = BUS_SPACE_UNRESTRICTED;
+ t->flags = 0;
+}
+
+int
+bus_dma_tag_simple(bus_dma_tag_template_t *t, bus_dma_tag_t *dmat)
+{
+
+ return (bus_dma_tag_create(t->parent, t->alignment, t->boundary,
+ t->lowaddr, t->highaddr, t->filtfunc, t->filtfuncarg, t->maxsize,
+ t->nsegments, t->maxsegsize, t->flags, t->lockfunc, t->lockfuncarg,
+ dmat));
+}
+
int
bus_dma_tag_destroy(bus_dma_tag_t dmat)
{
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Feb 12, 8:50 AM (17 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28665392
Default Alt Text
D22906.id65925.diff (11 KB)
Attached To
Mode
D22906: Simplify busdma tag creation
Attached
Detach File
Event Timeline
Log In to Comment