Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/pci Make macros not depend on vioif_softc



details:   https://anonhg.NetBSD.org/src/rev/a0e832e9f093
branches:  trunk
changeset: 447507:a0e832e9f093
user:      yamaguchi <yamaguchi%NetBSD.org@localhost>
date:      Mon Jan 14 14:32:13 2019 +0000

description:
Make macros not depend on vioif_softc

diffstat:

 sys/dev/pci/if_vioif.c |  163 +++++++++++++++++++++---------------------------
 1 files changed, 72 insertions(+), 91 deletions(-)

diffs (229 lines):

diff -r 716fae6a0494 -r a0e832e9f093 sys/dev/pci/if_vioif.c
--- a/sys/dev/pci/if_vioif.c    Mon Jan 14 12:23:53 2019 +0000
+++ b/sys/dev/pci/if_vioif.c    Mon Jan 14 14:32:13 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_vioif.c,v 1.41 2018/06/26 06:48:01 msaitoh Exp $    */
+/*     $NetBSD: if_vioif.c,v 1.42 2019/01/14 14:32:13 yamaguchi Exp $  */
 
 /*
  * Copyright (c) 2010 Minoura Makoto.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.41 2018/06/26 06:48:01 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.42 2019/01/14 14:32:13 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -357,65 +357,56 @@
                                 "error code %d\n", r);
                goto err_dmamem_alloc;
        }
-       sc->sc_hdrs = vaddr;
+
+#define P(p, p0, p0size)       do { p0 = (void *) p;           \
+                                    p += p0size; } while (0)
        memset(vaddr, 0, allocsize);
        p = (intptr_t) vaddr;
-       p += sizeof(struct virtio_net_hdr) * rxqsize;
-#define P(name,size)   do { sc->sc_ ##name = (void*) p;        \
-                            p += size; } while (0)
-       P(tx_hdrs, sizeof(struct virtio_net_hdr) * txqsize);
+
+       P(p, sc->sc_rx_hdrs, sizeof(sc->sc_rx_hdrs[0]) * rxqsize);
+       P(p, sc->sc_tx_hdrs, sizeof(sc->sc_tx_hdrs[0]) * txqsize);
        if (sc->sc_has_ctrl) {
-               P(ctrl_cmd, sizeof(struct virtio_net_ctrl_cmd));
-               P(ctrl_status, sizeof(struct virtio_net_ctrl_status));
-               P(ctrl_rx, sizeof(struct virtio_net_ctrl_rx));
-               P(ctrl_mac_tbl_uc, sizeof(struct virtio_net_ctrl_mac_tbl));
-               P(ctrl_mac_tbl_mc,
-                 (sizeof(struct virtio_net_ctrl_mac_tbl)
-                  + ETHER_ADDR_LEN * VIRTIO_NET_CTRL_MAC_MAXENTRIES));
+               P(p, sc->sc_ctrl_cmd, sizeof(*sc->sc_ctrl_cmd));
+               P(p, sc->sc_ctrl_status, sizeof(*sc->sc_ctrl_status));
+               P(p, sc->sc_ctrl_rx, sizeof(*sc->sc_ctrl_rx));
+               P(p, sc->sc_ctrl_mac_tbl_uc, sizeof(*sc->sc_ctrl_mac_tbl_uc) + 0);
+               P(p, sc->sc_ctrl_mac_tbl_mc,
+                   (sizeof(*sc->sc_ctrl_mac_tbl_mc)
+                   + ETHER_ADDR_LEN * VIRTIO_NET_CTRL_MAC_MAXENTRIES));
        }
-#undef P
 
        allocsize2 = sizeof(bus_dmamap_t) * (rxqsize + txqsize);
        allocsize2 += sizeof(bus_dmamap_t) * (rxqsize + txqsize);
        allocsize2 += sizeof(struct mbuf*) * (rxqsize + txqsize);
-       sc->sc_arrays = kmem_zalloc(allocsize2, KM_SLEEP);
-       sc->sc_txhdr_dmamaps = sc->sc_arrays + rxqsize;
-       sc->sc_rx_dmamaps = sc->sc_txhdr_dmamaps + txqsize;
-       sc->sc_tx_dmamaps = sc->sc_rx_dmamaps + rxqsize;
-       sc->sc_rx_mbufs = (void*) (sc->sc_tx_dmamaps + txqsize);
-       sc->sc_tx_mbufs = sc->sc_rx_mbufs + rxqsize;
+       vaddr = kmem_zalloc(allocsize2, KM_SLEEP);
+       p = (intptr_t) vaddr;
+
+       P(p, sc->sc_rxhdr_dmamaps, sizeof(sc->sc_rxhdr_dmamaps[0]) * rxqsize);
+       P(p, sc->sc_txhdr_dmamaps, sizeof(sc->sc_txhdr_dmamaps[0]) * txqsize);
+       P(p, sc->sc_rx_dmamaps, sizeof(sc->sc_rx_dmamaps[0]) * rxqsize);
+       P(p, sc->sc_tx_dmamaps, sizeof(sc->sc_tx_dmamaps[0]) * txqsize);
+       P(p, sc->sc_rx_mbufs, sizeof(sc->sc_rx_mbufs[0]) * rxqsize);
+       P(p, sc->sc_tx_mbufs, sizeof(sc->sc_tx_mbufs[0]) * txqsize);
+#undef P
 
-#define C(map, buf, size, nsegs, rw, usage)                            \
-       do {                                                            \
-               r = bus_dmamap_create(virtio_dmat(vsc), size, nsegs, size, 0, \
-                                     BUS_DMA_NOWAIT|BUS_DMA_ALLOCNOW,  \
-                                     &sc->sc_ ##map);                  \
-               if (r != 0) {                                           \
-                       aprint_error_dev(sc->sc_dev,                    \
-                                        usage " dmamap creation failed, " \
-                                        "error code %d\n", r);         \
-                                        goto err_reqs;                 \
-               }                                                       \
+#define C(map, size, nsegs, usage)                                             \
+       do {                                                                    \
+               r = bus_dmamap_create(virtio_dmat(vsc), size, nsegs, size, 0,   \
+                                     BUS_DMA_NOWAIT|BUS_DMA_ALLOCNOW,          \
+                                     &map);                                    \
+               if (r != 0) {                                                   \
+                       aprint_error_dev(sc->sc_dev,                            \
+                           "%s dmamap creation failed, "                       \
+                           "error code %d\n", usage, r);                       \
+                       goto err_reqs;                                          \
+               }                                                               \
        } while (0)
-#define C_L1(map, buf, size, nsegs, rw, usage)                         \
-       C(map, buf, size, nsegs, rw, usage);                            \
+#define C_L(map, buf, size, nsegs, rw, usage)                          \
+       C(map, size, nsegs, usage);                                     \
        do {                                                            \
-               r = bus_dmamap_load(virtio_dmat(vsc), sc->sc_ ##map,    \
-                                   &sc->sc_ ##buf, size, NULL,         \
-                                   BUS_DMA_ ##rw | BUS_DMA_NOWAIT);    \
-               if (r != 0) {                                           \
-                       aprint_error_dev(sc->sc_dev,                    \
-                                        usage " dmamap load failed, "  \
-                                        "error code %d\n", r);         \
-                       goto err_reqs;                                  \
-               }                                                       \
-       } while (0)
-#define C_L2(map, buf, size, nsegs, rw, usage)                         \
-       C(map, buf, size, nsegs, rw, usage);                            \
-       do {                                                            \
-               r = bus_dmamap_load(virtio_dmat(vsc), sc->sc_ ##map,    \
-                                   sc->sc_ ##buf, size, NULL,          \
-                                   BUS_DMA_ ##rw | BUS_DMA_NOWAIT);    \
+               r = bus_dmamap_load(virtio_dmat(vsc), map,              \
+                                   buf, size, NULL,                    \
+                                   rw | BUS_DMA_NOWAIT);               \
                if (r != 0) {                                           \
                        aprint_error_dev(sc->sc_dev,                    \
                                         usage " dmamap load failed, "  \
@@ -424,50 +415,40 @@
                }                                                       \
        } while (0)
        for (i = 0; i < rxqsize; i++) {
-               C_L1(rxhdr_dmamaps[i], rx_hdrs[i],
-                   sizeof(struct virtio_net_hdr), 1,
-                   READ, "rx header");
-               C(rx_dmamaps[i], NULL, MCLBYTES, 1, 0, "rx payload");
+               C_L(sc->sc_rxhdr_dmamaps[i], &sc->sc_rx_hdrs[i], sizeof(sc->sc_rx_hdrs[0]), 1,
+                   BUS_DMA_READ, "rx header");
+               C(sc->sc_rx_dmamaps[i], MCLBYTES, 1, "rx payload");
        }
 
        for (i = 0; i < txqsize; i++) {
-               C_L1(txhdr_dmamaps[i], tx_hdrs[i],
-                   sizeof(struct virtio_net_hdr), 1,
-                   WRITE, "tx header");
-               C(tx_dmamaps[i], NULL, ETHER_MAX_LEN, VIRTIO_NET_TX_MAXNSEGS, 0,
-                 "tx payload");
+               C_L(sc->sc_txhdr_dmamaps[i], &sc->sc_tx_hdrs[i], sizeof(sc->sc_tx_hdrs[0]), 1,
+                   BUS_DMA_READ, "tx header");
+               C(sc->sc_tx_dmamaps[i], ETHER_MAX_LEN, VIRTIO_NET_TX_MAXNSEGS, "tx payload");
        }
 
        if (sc->sc_has_ctrl) {
                /* control vq class & command */
-               C_L2(ctrl_cmd_dmamap, ctrl_cmd,
-                   sizeof(struct virtio_net_ctrl_cmd), 1, WRITE,
-                   "control command");
-       
-               /* control vq status */
-               C_L2(ctrl_status_dmamap, ctrl_status,
-                   sizeof(struct virtio_net_ctrl_status), 1, READ,
-                   "control status");
+               C_L(sc->sc_ctrl_cmd_dmamap,  sc->sc_ctrl_cmd, sizeof(*sc->sc_ctrl_cmd), 1,
+                   BUS_DMA_WRITE, "control command");
+               C_L(sc->sc_ctrl_status_dmamap, sc->sc_ctrl_status, sizeof(*sc->sc_ctrl_status), 1,
+                   BUS_DMA_READ, "control status");
 
                /* control vq rx mode command parameter */
-               C_L2(ctrl_rx_dmamap, ctrl_rx,
-                   sizeof(struct virtio_net_ctrl_rx), 1, WRITE,
-                   "rx mode control command");
+               C_L(sc->sc_ctrl_rx_dmamap, sc->sc_ctrl_rx, sizeof(*sc->sc_ctrl_rx), 1,
+                   BUS_DMA_WRITE, "rx mode control command");
 
                /* control vq MAC filter table for unicast */
                /* do not load now since its length is variable */
-               C(ctrl_tbl_uc_dmamap, NULL,
-                 sizeof(struct virtio_net_ctrl_mac_tbl) + 0, 1, WRITE,
-                 "unicast MAC address filter command");
+               C(sc->sc_ctrl_tbl_uc_dmamap, sizeof(*sc->sc_ctrl_mac_tbl_uc) + 0, 1,
+                   "unicast MAC address filter command");
 
                /* control vq MAC filter table for multicast */
-               C(ctrl_tbl_mc_dmamap, NULL,
-                 (sizeof(struct virtio_net_ctrl_mac_tbl)
-                  + ETHER_ADDR_LEN * VIRTIO_NET_CTRL_MAC_MAXENTRIES),
-                 1, WRITE, "multicast MAC address filter command");
+               C(sc->sc_ctrl_tbl_mc_dmamap,
+                   sizeof(*sc->sc_ctrl_mac_tbl_mc)
+                   + ETHER_ADDR_LEN * VIRTIO_NET_CTRL_MAC_MAXENTRIES, 1,
+                   "multicast MAC address filter command");
        }
-#undef C_L2
-#undef C_L1
+#undef C_L
 #undef C
 
        return 0;
@@ -475,23 +456,23 @@
 err_reqs:
 #define D(map)                                                         \
        do {                                                            \
-               if (sc->sc_ ##map) {                                    \
-                       bus_dmamap_destroy(virtio_dmat(vsc), sc->sc_ ##map); \
-                       sc->sc_ ##map = NULL;                           \
+               if (map) {                                              \
+                       bus_dmamap_destroy(virtio_dmat(vsc), map);      \
+                       map = NULL;                                     \
                }                                                       \
        } while (0)
-       D(ctrl_tbl_mc_dmamap);
-       D(ctrl_tbl_uc_dmamap);
-       D(ctrl_rx_dmamap);
-       D(ctrl_status_dmamap);
-       D(ctrl_cmd_dmamap);
+       D(sc->sc_ctrl_tbl_mc_dmamap);
+       D(sc->sc_ctrl_tbl_uc_dmamap);
+       D(sc->sc_ctrl_rx_dmamap);
+       D(sc->sc_ctrl_status_dmamap);
+       D(sc->sc_ctrl_cmd_dmamap);
        for (i = 0; i < txqsize; i++) {
-               D(tx_dmamaps[i]);
-               D(txhdr_dmamaps[i]);
+               D(sc->sc_tx_dmamaps[i]);
+               D(sc->sc_txhdr_dmamaps[i]);
        }
        for (i = 0; i < rxqsize; i++) {
-               D(rx_dmamaps[i]);
-               D(rxhdr_dmamaps[i]);
+               D(sc->sc_rx_dmamaps[i]);
+               D(sc->sc_rxhdr_dmamaps[i]);
        }
 #undef D
        if (sc->sc_arrays) {



Home | Main Index | Thread Index | Old Index