summaryrefslogtreecommitdiffstats
path: root/sys/dev/netmap/if_re_netmap.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/netmap/if_re_netmap.h')
-rw-r--r--sys/dev/netmap/if_re_netmap.h40
1 files changed, 18 insertions, 22 deletions
diff --git a/sys/dev/netmap/if_re_netmap.h b/sys/dev/netmap/if_re_netmap.h
index 10abe4f..98f6143 100644
--- a/sys/dev/netmap/if_re_netmap.h
+++ b/sys/dev/netmap/if_re_netmap.h
@@ -65,10 +65,10 @@ re_netmap_reg(struct netmap_adapter *na, int onoff)
* Reconcile kernel and user view of the transmit ring.
*/
static int
-re_netmap_txsync(struct netmap_adapter *na, u_int ring_nr, int flags)
+re_netmap_txsync(struct netmap_kring *kring, int flags)
{
+ struct netmap_adapter *na = kring->na;
struct ifnet *ifp = na->ifp;
- struct netmap_kring *kring = &na->tx_rings[ring_nr];
struct netmap_ring *ring = kring->ring;
u_int nm_i; /* index into the netmap ring */
u_int nic_i; /* index into the NIC ring */
@@ -96,14 +96,14 @@ re_netmap_txsync(struct netmap_adapter *na, u_int ring_nr, int flags)
struct netmap_slot *slot = &ring->slot[nm_i];
u_int len = slot->len;
uint64_t paddr;
- void *addr = PNMB(slot, &paddr);
+ void *addr = PNMB(na, slot, &paddr);
/* device-specific */
struct rl_desc *desc = &sc->rl_ldata.rl_tx_list[nic_i];
int cmd = slot->len | RL_TDESC_CMD_EOF |
RL_TDESC_CMD_OWN | RL_TDESC_CMD_SOF ;
- NM_CHECK_ADDR_LEN(addr, len);
+ NM_CHECK_ADDR_LEN(na, addr, len);
if (nic_i == lim) /* mark end of ring */
cmd |= RL_TDESC_CMD_EOR;
@@ -112,7 +112,7 @@ re_netmap_txsync(struct netmap_adapter *na, u_int ring_nr, int flags)
/* buffer has changed, reload map */
desc->rl_bufaddr_lo = htole32(RL_ADDR_LO(paddr));
desc->rl_bufaddr_hi = htole32(RL_ADDR_HI(paddr));
- netmap_reload_map(sc->rl_ldata.rl_tx_mtag,
+ netmap_reload_map(na, sc->rl_ldata.rl_tx_mtag,
txd[nic_i].tx_dmamap, addr);
}
slot->flags &= ~(NS_REPORT | NS_BUF_CHANGED);
@@ -169,10 +169,10 @@ re_netmap_txsync(struct netmap_adapter *na, u_int ring_nr, int flags)
* Reconcile kernel and user view of the receive ring.
*/
static int
-re_netmap_rxsync(struct netmap_adapter *na, u_int ring_nr, int flags)
+re_netmap_rxsync(struct netmap_kring *kring, int flags)
{
+ struct netmap_adapter *na = kring->na;
struct ifnet *ifp = na->ifp;
- struct netmap_kring *kring = &na->rx_rings[ring_nr];
struct netmap_ring *ring = kring->ring;
u_int nm_i; /* index into the netmap ring */
u_int nic_i; /* index into the NIC ring */
@@ -240,12 +240,12 @@ re_netmap_rxsync(struct netmap_adapter *na, u_int ring_nr, int flags)
for (n = 0; nm_i != head; n++) {
struct netmap_slot *slot = &ring->slot[nm_i];
uint64_t paddr;
- void *addr = PNMB(slot, &paddr);
+ void *addr = PNMB(na, slot, &paddr);
struct rl_desc *desc = &sc->rl_ldata.rl_rx_list[nic_i];
- int cmd = NETMAP_BUF_SIZE | RL_RDESC_CMD_OWN;
+ int cmd = NETMAP_BUF_SIZE(na) | RL_RDESC_CMD_OWN;
- if (addr == netmap_buffer_base) /* bad buf */
+ if (addr == NETMAP_BUF_BASE(na)) /* bad buf */
goto ring_reset;
if (nic_i == lim) /* mark end of ring */
@@ -255,7 +255,7 @@ re_netmap_rxsync(struct netmap_adapter *na, u_int ring_nr, int flags)
/* buffer has changed, reload map */
desc->rl_bufaddr_lo = htole32(RL_ADDR_LO(paddr));
desc->rl_bufaddr_hi = htole32(RL_ADDR_HI(paddr));
- netmap_reload_map(sc->rl_ldata.rl_rx_mtag,
+ netmap_reload_map(na, sc->rl_ldata.rl_rx_mtag,
rxd[nic_i].rx_dmamap, addr);
slot->flags &= ~NS_BUF_CHANGED;
}
@@ -296,14 +296,10 @@ re_netmap_tx_init(struct rl_softc *sc)
struct netmap_adapter *na = NA(sc->rl_ifp);
struct netmap_slot *slot;
- if (!na || !(na->na_flags & NAF_NATIVE_ON)) {
- return;
- }
-
slot = netmap_reset(na, NR_TX, 0, 0);
- /* slot is NULL if we are not in netmap mode */
+ /* slot is NULL if we are not in native netmap mode */
if (!slot)
- return; // XXX cannot happen
+ return;
/* in netmap mode, overwrite addresses and maps */
txd = sc->rl_ldata.rl_tx_desc;
desc = sc->rl_ldata.rl_tx_list;
@@ -313,11 +309,11 @@ re_netmap_tx_init(struct rl_softc *sc)
for (i = 0; i < n; i++) {
uint64_t paddr;
int l = netmap_idx_n2k(&na->tx_rings[0], i);
- void *addr = PNMB(slot + l, &paddr);
+ void *addr = PNMB(na, slot + l, &paddr);
desc[i].rl_bufaddr_lo = htole32(RL_ADDR_LO(paddr));
desc[i].rl_bufaddr_hi = htole32(RL_ADDR_HI(paddr));
- netmap_load_map(sc->rl_ldata.rl_tx_mtag,
+ netmap_load_map(na, sc->rl_ldata.rl_tx_mtag,
txd[i].tx_dmamap, addr);
}
}
@@ -344,15 +340,15 @@ re_netmap_rx_init(struct rl_softc *sc)
uint64_t paddr;
uint32_t nm_i = netmap_idx_n2k(&na->rx_rings[0], nic_i);
- addr = PNMB(slot + nm_i, &paddr);
+ addr = PNMB(na, slot + nm_i, &paddr);
- netmap_reload_map(sc->rl_ldata.rl_rx_mtag,
+ netmap_reload_map(na, sc->rl_ldata.rl_rx_mtag,
sc->rl_ldata.rl_rx_desc[nic_i].rx_dmamap, addr);
bus_dmamap_sync(sc->rl_ldata.rl_rx_mtag,
sc->rl_ldata.rl_rx_desc[nic_i].rx_dmamap, BUS_DMASYNC_PREREAD);
desc[nic_i].rl_bufaddr_lo = htole32(RL_ADDR_LO(paddr));
desc[nic_i].rl_bufaddr_hi = htole32(RL_ADDR_HI(paddr));
- cmdstat = NETMAP_BUF_SIZE;
+ cmdstat = NETMAP_BUF_SIZE(na);
if (nic_i == n - 1) /* mark the end of ring */
cmdstat |= RL_RDESC_CMD_EOR;
if (nic_i < max_avail)
OpenPOWER on IntegriCloud