Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/netmap/if_re_netmap.h
Show First 20 Lines • Show All 41 Lines • ▼ Show 20 Lines | |||||
/* | /* | ||||
* Register/unregister. We are already under netmap lock. | * Register/unregister. We are already under netmap lock. | ||||
*/ | */ | ||||
static int | static int | ||||
re_netmap_reg(struct netmap_adapter *na, int onoff) | re_netmap_reg(struct netmap_adapter *na, int onoff) | ||||
{ | { | ||||
struct ifnet *ifp = na->ifp; | if_t ifp = na->ifp; | ||||
struct rl_softc *adapter = ifp->if_softc; | struct rl_softc *adapter = if_getsoftc(ifp); | ||||
RL_LOCK(adapter); | RL_LOCK(adapter); | ||||
re_stop(adapter); /* also clears IFF_DRV_RUNNING */ | re_stop(adapter); /* also clears IFF_DRV_RUNNING */ | ||||
if (onoff) { | if (onoff) { | ||||
nm_set_native_flags(na); | nm_set_native_flags(na); | ||||
} else { | } else { | ||||
nm_clear_native_flags(na); | nm_clear_native_flags(na); | ||||
} | } | ||||
re_init_locked(adapter); /* also enables intr */ | re_init_locked(adapter); /* also enables intr */ | ||||
RL_UNLOCK(adapter); | RL_UNLOCK(adapter); | ||||
return (ifp->if_drv_flags & IFF_DRV_RUNNING ? 0 : 1); | return (if_getdrvflags(ifp) & IFF_DRV_RUNNING ? 0 : 1); | ||||
} | } | ||||
/* | /* | ||||
* Reconcile kernel and user view of the transmit ring. | * Reconcile kernel and user view of the transmit ring. | ||||
*/ | */ | ||||
static int | static int | ||||
re_netmap_txsync(struct netmap_kring *kring, int flags) | re_netmap_txsync(struct netmap_kring *kring, int flags) | ||||
{ | { | ||||
struct netmap_adapter *na = kring->na; | struct netmap_adapter *na = kring->na; | ||||
struct ifnet *ifp = na->ifp; | if_t ifp = na->ifp; | ||||
struct netmap_ring *ring = kring->ring; | struct netmap_ring *ring = kring->ring; | ||||
u_int nm_i; /* index into the netmap ring */ | u_int nm_i; /* index into the netmap ring */ | ||||
u_int nic_i; /* index into the NIC ring */ | u_int nic_i; /* index into the NIC ring */ | ||||
u_int n; | u_int n; | ||||
u_int const lim = kring->nkr_num_slots - 1; | u_int const lim = kring->nkr_num_slots - 1; | ||||
u_int const head = kring->rhead; | u_int const head = kring->rhead; | ||||
/* device-specific */ | /* device-specific */ | ||||
struct rl_softc *sc = ifp->if_softc; | struct rl_softc *sc = if_getsoftc(ifp); | ||||
struct rl_txdesc *txd = sc->rl_ldata.rl_tx_desc; | struct rl_txdesc *txd = sc->rl_ldata.rl_tx_desc; | ||||
bus_dmamap_sync(sc->rl_ldata.rl_tx_list_tag, | bus_dmamap_sync(sc->rl_ldata.rl_tx_list_tag, | ||||
sc->rl_ldata.rl_tx_list_map, | sc->rl_ldata.rl_tx_list_map, | ||||
BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); // XXX extra postwrite ? | BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); // XXX extra postwrite ? | ||||
/* | /* | ||||
* First part: process new packets to send. | * First part: process new packets to send. | ||||
▲ Show 20 Lines • Show All 76 Lines • ▼ Show 20 Lines | |||||
/* | /* | ||||
* Reconcile kernel and user view of the receive ring. | * Reconcile kernel and user view of the receive ring. | ||||
*/ | */ | ||||
static int | static int | ||||
re_netmap_rxsync(struct netmap_kring *kring, int flags) | re_netmap_rxsync(struct netmap_kring *kring, int flags) | ||||
{ | { | ||||
struct netmap_adapter *na = kring->na; | struct netmap_adapter *na = kring->na; | ||||
struct ifnet *ifp = na->ifp; | if_t ifp = na->ifp; | ||||
struct netmap_ring *ring = kring->ring; | struct netmap_ring *ring = kring->ring; | ||||
u_int nm_i; /* index into the netmap ring */ | u_int nm_i; /* index into the netmap ring */ | ||||
u_int nic_i; /* index into the NIC ring */ | u_int nic_i; /* index into the NIC ring */ | ||||
u_int const lim = kring->nkr_num_slots - 1; | u_int const lim = kring->nkr_num_slots - 1; | ||||
u_int const head = kring->rhead; | u_int const head = kring->rhead; | ||||
int force_update = (flags & NAF_FORCE_READ) || kring->nr_kflags & NKR_PENDINTR; | int force_update = (flags & NAF_FORCE_READ) || kring->nr_kflags & NKR_PENDINTR; | ||||
/* device-specific */ | /* device-specific */ | ||||
struct rl_softc *sc = ifp->if_softc; | struct rl_softc *sc = if_getsoftc(ifp); | ||||
struct rl_rxdesc *rxd = sc->rl_ldata.rl_rx_desc; | struct rl_rxdesc *rxd = sc->rl_ldata.rl_rx_desc; | ||||
if (head > lim) | if (head > lim) | ||||
return netmap_ring_reinit(kring); | return netmap_ring_reinit(kring); | ||||
bus_dmamap_sync(sc->rl_ldata.rl_rx_list_tag, | bus_dmamap_sync(sc->rl_ldata.rl_rx_list_tag, | ||||
sc->rl_ldata.rl_rx_list_map, | sc->rl_ldata.rl_rx_list_map, | ||||
BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); | BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); | ||||
▲ Show 20 Lines • Show All 182 Lines • Show Last 20 Lines |