diff options
Diffstat (limited to 'sys/dev/ntb/ntb_transport.c')
-rw-r--r-- | sys/dev/ntb/ntb_transport.c | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/sys/dev/ntb/ntb_transport.c b/sys/dev/ntb/ntb_transport.c index bb3287d5f058..869b53476882 100644 --- a/sys/dev/ntb/ntb_transport.c +++ b/sys/dev/ntb/ntb_transport.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2016 Alexander Motin <mav@FreeBSD.org> + * Copyright (c) 2016-2017 Alexander Motin <mav@FreeBSD.org> * Copyright (C) 2013 Intel Corporation * Copyright (C) 2015 EMC Corporation * All rights reserved. @@ -188,6 +188,7 @@ struct ntb_transport_mw { struct ntb_transport_child { device_t dev; + int consumer; int qpoff; int qpcnt; struct ntb_transport_child *next; @@ -343,9 +344,6 @@ ntb_transport_attach(device_t dev) KASSERT(db_bitmap == (1 << db_count) - 1, ("Doorbells are not sequential (%jx).\n", db_bitmap)); - device_printf(dev, "%d memory windows, %d scratchpads, " - "%d doorbells\n", nt->mw_count, spad_count, db_count); - if (nt->mw_count == 0) { device_printf(dev, "At least 1 memory window required.\n"); return (ENXIO); @@ -409,6 +407,7 @@ ntb_transport_attach(device_t dev) } nc = malloc(sizeof(*nc), M_DEVBUF, M_WAITOK | M_ZERO); + nc->consumer = i; nc->qpoff = qpu; nc->qpcnt = qp; nc->dev = device_add_child(dev, name, -1); @@ -496,6 +495,35 @@ ntb_transport_detach(device_t dev) return (0); } +static int +ntb_transport_print_child(device_t dev, device_t child) +{ + struct ntb_transport_child *nc = device_get_ivars(child); + int retval; + + retval = bus_print_child_header(dev, child); + if (nc->qpcnt > 0) { + printf(" queue %d", nc->qpoff); + if (nc->qpcnt > 1) + printf("-%d", nc->qpoff + nc->qpcnt - 1); + } + retval += printf(" at consumer %d", nc->consumer); + retval += bus_print_child_domain(dev, child); + retval += bus_print_child_footer(dev, child); + + return (retval); +} + +static int +ntb_transport_child_location_str(device_t dev, device_t child, char *buf, + size_t buflen) +{ + struct ntb_transport_child *nc = device_get_ivars(child); + + snprintf(buf, buflen, "consumer=%d", nc->consumer); + return (0); +} + int ntb_transport_queue_count(device_t dev) { @@ -1552,6 +1580,9 @@ static device_method_t ntb_transport_methods[] = { DEVMETHOD(device_probe, ntb_transport_probe), DEVMETHOD(device_attach, ntb_transport_attach), DEVMETHOD(device_detach, ntb_transport_detach), + /* Bus interface */ + DEVMETHOD(bus_child_location_str, ntb_transport_child_location_str), + DEVMETHOD(bus_print_child, ntb_transport_print_child), DEVMETHOD_END }; |