Module Name: src Committed By: christos Date: Fri Dec 8 21:51:07 UTC 2017
Modified Files: src/sys/dev/pcmcia: if_ray.c src/sys/dev/usb: xhci.c src/sys/lib/libkern: Makefile.libkern libkern.h Added Files: src/sys/lib/libkern: hexdump.c Log Message: coalesce the two copies of hexdump into libkern To generate a diff of this commit: cvs rdiff -u -r1.86 -r1.87 src/sys/dev/pcmcia/if_ray.c cvs rdiff -u -r1.78 -r1.79 src/sys/dev/usb/xhci.c cvs rdiff -u -r1.40 -r1.41 src/sys/lib/libkern/Makefile.libkern cvs rdiff -u -r0 -r1.1 src/sys/lib/libkern/hexdump.c cvs rdiff -u -r1.124 -r1.125 src/sys/lib/libkern/libkern.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/pcmcia/if_ray.c diff -u src/sys/dev/pcmcia/if_ray.c:1.86 src/sys/dev/pcmcia/if_ray.c:1.87 --- src/sys/dev/pcmcia/if_ray.c:1.86 Fri Jan 13 09:48:18 2017 +++ src/sys/dev/pcmcia/if_ray.c Fri Dec 8 16:51:07 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: if_ray.c,v 1.86 2017/01/13 14:48:18 maya Exp $ */ +/* $NetBSD: if_ray.c,v 1.87 2017/12/08 21:51:07 christos Exp $ */ /* * Copyright (c) 2000 Christian E. Hopps @@ -57,7 +57,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_ray.c,v 1.86 2017/01/13 14:48:18 maya Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_ray.c,v 1.87 2017/12/08 21:51:07 christos Exp $"); #include "opt_inet.h" @@ -368,10 +368,6 @@ static struct timeval rtv, tv1, tv2, *tt printf x ; \ } } while (0) -#define HEXDF_NOCOMPRESS 0x1 -#define HEXDF_NOOFFSET 0x2 -#define HEXDF_NOASCII 0x4 -void hexdump(const u_int8_t *, int, int, int, int); static void ray_dump_mbuf(struct ray_softc *, struct mbuf *); #else /* !RAY_DEBUG */ @@ -1295,7 +1291,7 @@ ray_recv(struct ray_softc *sc, bus_size_ #ifdef RAY_DEBUG /* have a look if you want to see how the card rx works :) */ if (ray_debug && ray_debug_dump_desc) - hexdump((char *)sc->sc_memh + RAY_RCS_BASE, 0x400, 16, 4, 0); + hexdump(__func__, (char *)sc->sc_memh + RAY_RCS_BASE, 0x400); #endif m = 0; @@ -1448,7 +1444,7 @@ done: RAY_DPRINTF(("%s: mgt packet not supported\n", device_xname(sc->sc_dev))); #ifdef RAY_DEBUG - hexdump((const u_int8_t*)frame, pktlen, 16, 4, 0); + hexdump(__func__, (const u_int8_t*)frame, pktlen); #endif RAY_DPRINTF(("\n")); break; @@ -1537,7 +1533,7 @@ ray_recv_auth(struct ray_softc *sc, stru RAY_DPRINTF(("%s: recv auth packet:\n", device_xname(sc->sc_dev))); #ifdef RAY_DEBUG - hexdump((const u_int8_t *)frame, sizeof(*frame) + 6, 16, 4, 0); + hexdump(__func__, (const u_int8_t *)frame, sizeof(*frame) + 6); #endif RAY_DPRINTF(("\n")); @@ -3067,108 +3063,13 @@ ray_write_region(struct ray_softc *sc, b #ifdef RAY_DEBUG -#define PRINTABLE(c) ((c) >= 0x20 && (c) <= 0x7f) - -void -hexdump(const u_int8_t *d, int len, int br, int div, int fl) -{ - int i, j, offw, first, tlen, ni, nj, sp; - - sp = br / div; - offw = 0; - if (len && (fl & HEXDF_NOOFFSET) == 0) { - tlen = len; - do { - offw++; - } while (tlen /= br); - } - if (offw) - printf("%0*x: ", offw, 0); - for (i = 0; i < len; i++, d++) { - if (i && (i % br) == 0) { - if ((fl & HEXDF_NOASCII) == 0) { - printf(" "); - d -= br; - for (j = 0; j < br; d++, j++) { - if (j && (j % sp) == 0) - printf(" "); - if (PRINTABLE(*d)) - printf("%c", (int)*d); - else - printf("."); - } - } - if (offw) - printf("\n%0*x: ", offw, i); - else - printf("\n"); - if ((fl & HEXDF_NOCOMPRESS) == 0) { - first = 1; - while (len - i >= br) { - if (memcmp(d, d - br, br)) - break; - d += br; - i += br; - if (first) { - printf("*"); - first = 0; - } - } - if (len == i) { - printf("\n%0*x", offw, i); - return; - } - } - } else if (i && (i % sp) == 0) - printf(" "); - printf("%02x ", *d); - } - if (len && (((i - 1) % br) || i == 1)) { - if ((fl & HEXDF_NOASCII) == 0) { - i = i % br ? i % br : br; - ni = (br - i) % br; - j = (i - 1) / sp; - nj = (div - j - 1) % div; - j = 3 * ni + nj + 3; - printf("%*s", j, ""); - d -= i; - for (j = 0; j < i; d++, j++) { - if (j && (j % sp) == 0) - printf(" "); - if (PRINTABLE(*d)) - printf("%c", (int)*d); - else - printf("."); - } - } - printf("\n"); - } -} - - - static void ray_dump_mbuf(struct ray_softc *sc, struct mbuf *m) { - u_int8_t *d, *ed; - u_int i; - printf("%s: pkt dump:", device_xname(sc->sc_dev)); - i = 0; for (; m; m = m->m_next) { - d = mtod(m, u_int8_t *); - ed = d + m->m_len; - - for (; d < ed; i++, d++) { - if ((i % 16) == 0) - printf("\n\t"); - else if ((i % 8) == 0) - printf(" "); - printf(" %02x", *d); - } + hexdump(NULL, mtod(m, void *), m->m_len); } - if ((i - 1) % 16) - printf("\n"); } #endif /* RAY_DEBUG */ Index: src/sys/dev/usb/xhci.c diff -u src/sys/dev/usb/xhci.c:1.78 src/sys/dev/usb/xhci.c:1.79 --- src/sys/dev/usb/xhci.c:1.78 Thu Dec 7 17:56:23 2017 +++ src/sys/dev/usb/xhci.c Fri Dec 8 16:51:07 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: xhci.c,v 1.78 2017/12/07 22:56:23 christos Exp $ */ +/* $NetBSD: xhci.c,v 1.79 2017/12/08 21:51:07 christos Exp $ */ /* * Copyright (c) 2013 Jonathan A. Kollasch @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xhci.c,v 1.78 2017/12/07 22:56:23 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xhci.c,v 1.79 2017/12/08 21:51:07 christos Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -73,6 +73,11 @@ __KERNEL_RCSID(0, "$NetBSD: xhci.c,v 1.7 #ifndef XHCI_DEBUG #define xhcidebug 0 #else /* !XHCI_DEBUG */ +#define HEXDUMP(a, b, c) \ + do { \ + if (xhcidebug > 0) \ + hexdump(a, b, c); \ + } while (/*CONSTCOND*/0) static int xhcidebug = 0; SYSCTL_SETUP(sysctl_hw_xhci_setup, "sysctl hw.xhci setup") @@ -105,6 +110,10 @@ fail: #endif /* !XHCI_DEBUG */ #endif /* USB_DEBUG */ +#ifndef HEXDUMP +#define HEXDUMP(a, b, c) +#endif + #define DPRINTFN(N,FMT,A,B,C,D) USBHIST_LOGN(xhcidebug,N,FMT,A,B,C,D) #define XHCIHIST_FUNC() USBHIST_FUNC() #define XHCIHIST_CALLED(name) USBHIST_CALLED(xhcidebug) @@ -720,35 +729,6 @@ xhci_hc_reset(struct xhci_softc * const } -static void -hexdump(const char *msg, const void *base, size_t len) -{ -#if 0 - size_t cnt; - const uint32_t *p; - extern paddr_t vtophys(vaddr_t); - - p = base; - cnt = 0; - - printf("*** %s (%zu bytes @ %p %p)\n", msg, len, base, - (void *)vtophys((vaddr_t)base)); - - while (cnt < len) { - if (cnt % 16 == 0) - printf("%p: ", p); - else if (cnt % 8 == 0) - printf(" |"); - printf(" %08x", *p++); - cnt += 4; - if (cnt % 16 == 0) - printf("\n"); - } - if (cnt % 16 != 0) - printf("\n"); -#endif -} - /* 7.2 xHCI Support Protocol Capability */ static void xhci_id_protocols(struct xhci_softc *sc, bus_size_t ecp) @@ -1184,10 +1164,8 @@ xhci_init(struct xhci_softc *sc) xhci_op_write_8(sc, XHCI_CRCR, xhci_ring_trbp(&sc->sc_cr, 0) | sc->sc_cr.xr_cs); -#if 0 - hexdump("eventst", KERNADDR(&sc->sc_eventst_dma, 0), + HEXDUMP("eventst", KERNADDR(&sc->sc_eventst_dma, 0), XHCI_ERSTE_SIZE * XHCI_EVENT_RING_SEGMENTS); -#endif if ((sc->sc_quirks & XHCI_DEFERRED_START) == 0) xhci_start(sc); @@ -1363,7 +1341,9 @@ xhci_configure_endpoint(struct usbd_pipe { struct xhci_softc * const sc = XHCI_PIPE2SC(pipe); struct xhci_slot * const xs = pipe->up_dev->ud_hcpriv; +#ifdef XHCI_DEBUG const u_int dci = xhci_ep_get_dci(pipe->up_endpoint->ue_edesc); +#endif struct xhci_trb trb; usbd_status err; @@ -1379,9 +1359,9 @@ xhci_configure_endpoint(struct usbd_pipe /* set up context */ xhci_setup_ctx(pipe); - hexdump("input control context", xhci_slot_get_icv(sc, xs, 0), + HEXDUMP("input control context", xhci_slot_get_icv(sc, xs, 0), sc->sc_ctxsz * 1); - hexdump("input endpoint context", xhci_slot_get_icv(sc, xs, + HEXDUMP("input endpoint context", xhci_slot_get_icv(sc, xs, xhci_dci_to_ici(dci)), sc->sc_ctxsz * 1); trb.trb_0 = xhci_slot_get_icp(sc, xs, 0); @@ -1392,7 +1372,7 @@ xhci_configure_endpoint(struct usbd_pipe err = xhci_do_command(sc, &trb, USBD_DEFAULT_TIMEOUT); usb_syncmem(&xs->xs_dc_dma, 0, sc->sc_pgsz, BUS_DMASYNC_POSTREAD); - hexdump("output context", xhci_slot_get_dcv(sc, xs, dci), + HEXDUMP("output context", xhci_slot_get_dcv(sc, xs, dci), sc->sc_ctxsz * 1); return err; @@ -2363,7 +2343,7 @@ xhci_new_device(device_t parent, struct usbd_delay_ms(dev, USB_SET_ADDRESS_SETTLE); cp = xhci_slot_get_dcv(sc, xs, XHCI_DCI_SLOT); - //hexdump("slot context", cp, sc->sc_ctxsz); + HEXDUMP("slot context", cp, sc->sc_ctxsz); uint8_t addr = XHCI_SCTX_3_DEV_ADDR_GET(le32toh(cp[3])); DPRINTFN(4, "device address %ju", addr, 0, 0, 0); /* @@ -2821,7 +2801,7 @@ xhci_update_ep0_mps(struct xhci_softc * /* sync input contexts before they are read from memory */ usb_syncmem(&xs->xs_ic_dma, 0, sc->sc_pgsz, BUS_DMASYNC_PREWRITE); - hexdump("input context", xhci_slot_get_icv(sc, xs, 0), + HEXDUMP("input context", xhci_slot_get_icv(sc, xs, 0), sc->sc_ctxsz * 4); trb.trb_0 = xhci_slot_get_icp(sc, xs, 0); @@ -2942,7 +2922,7 @@ xhci_set_address(struct usbd_device *dev xhci_setup_ctx(dev->ud_pipe0); - hexdump("input context", xhci_slot_get_icv(sc, xs, 0), + HEXDUMP("input context", xhci_slot_get_icv(sc, xs, 0), sc->sc_ctxsz * 3); xhci_set_dcba(sc, DMAADDR(&xs->xs_dc_dma, 0), slot); @@ -2950,7 +2930,7 @@ xhci_set_address(struct usbd_device *dev err = xhci_address_device(sc, xhci_slot_get_icp(sc, xs, 0), slot, bsr); usb_syncmem(&xs->xs_dc_dma, 0, sc->sc_pgsz, BUS_DMASYNC_POSTREAD); - hexdump("output context", xhci_slot_get_dcv(sc, xs, 0), + HEXDUMP("output context", xhci_slot_get_dcv(sc, xs, 0), sc->sc_ctxsz * 2); return err; Index: src/sys/lib/libkern/Makefile.libkern diff -u src/sys/lib/libkern/Makefile.libkern:1.40 src/sys/lib/libkern/Makefile.libkern:1.41 --- src/sys/lib/libkern/Makefile.libkern:1.40 Thu Nov 30 00:47:24 2017 +++ src/sys/lib/libkern/Makefile.libkern Fri Dec 8 16:51:07 2017 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.libkern,v 1.40 2017/11/30 05:47:24 riastradh Exp $ +# $NetBSD: Makefile.libkern,v 1.41 2017/12/08 21:51:07 christos Exp $ # # Variable definitions for libkern. @@ -89,6 +89,8 @@ SRCS+= xlat_mbr_fstype.c SRCS+= heapsort.c ptree.c rb.c +SRCS+= hexdump.c + # for crypto SRCS+= explicit_memset.c consttime_memequal.c Index: src/sys/lib/libkern/libkern.h diff -u src/sys/lib/libkern/libkern.h:1.124 src/sys/lib/libkern/libkern.h:1.125 --- src/sys/lib/libkern/libkern.h:1.124 Thu Jul 7 02:55:43 2016 +++ src/sys/lib/libkern/libkern.h Fri Dec 8 16:51:07 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: libkern.h,v 1.124 2016/07/07 06:55:43 msaitoh Exp $ */ +/* $NetBSD: libkern.h,v 1.125 2017/12/08 21:51:07 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -448,6 +448,7 @@ intmax_t strtoi(const char * __restrict, intmax_t, int *); uintmax_t strtou(const char * __restrict, char ** __restrict, int, uintmax_t, uintmax_t, int *); +void hexdump(const char *, const void *, size_t); int snprintb(char *, size_t, const char *, uint64_t); int snprintb_m(char *, size_t, const char *, uint64_t, size_t); Added files: Index: src/sys/lib/libkern/hexdump.c diff -u /dev/null src/sys/lib/libkern/hexdump.c:1.1 --- /dev/null Fri Dec 8 16:51:07 2017 +++ src/sys/lib/libkern/hexdump.c Fri Dec 8 16:51:07 2017 @@ -0,0 +1,69 @@ +/*- + * Copyright (c) 2017 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Christos Zoulas. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#include <sys/cdefs.h> +__KERNEL_RCSID(0, "$NetBSD: hexdump.c,v 1.1 2017/12/08 21:51:07 christos Exp $"); + +#include <lib/libkern/libkern.h> +#include <sys/systm.h> + +void +hexdump(const char *msg, const void *ptr, size_t len) +{ + size_t i; + const unsigned char *u = ptr; + + if (msg) + printf("%s: %zu bytes @ %p\n", msg, len, ptr); + for (i = 0; i < len; ) { + printf("%02x ", u[i++]); + if (!(i & 0x7)) + printf(" "); + if (!(i & 0xf)) { + printf("| "); + for (size_t j = i - 16; j < i; j++) { + unsigned char c = u[j]; + printf("%c", isprint(c) ? c : '.'); + } + printf("\n"); + } + } + if ((i = (len & 0xf)) != 0) { + for (size_t j = 16 - i; j > 0; j--) { + printf(" "); + if (!(j & 0x7) && i != 8) + printf(" "); + } + printf(" | "); + for (size_t j = len - i; j < len; j++) { + unsigned char c = u[j]; + printf("%c", isprint(c) ? c : '.'); + } + printf("\n"); + } +}