Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/msk/if_msk.c
Show First 20 Lines • Show All 3,578 Lines • ▼ Show 20 Lines | bus_dmamap_sync( | ||||
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); | BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); | ||||
CSR_WRITE_2(sc, Y2_PREF_Q_ADDR(sc_if->msk_rxq, | CSR_WRITE_2(sc, Y2_PREF_Q_ADDR(sc_if->msk_rxq, | ||||
PREF_UNIT_PUT_IDX_REG), sc_if->msk_cdata.msk_rx_prod); | PREF_UNIT_PUT_IDX_REG), sc_if->msk_cdata.msk_rx_prod); | ||||
} | } | ||||
static int | static int | ||||
msk_handle_events(struct msk_softc *sc) | msk_handle_events(struct msk_softc *sc) | ||||
{ | { | ||||
struct epoch_tracker et; | |||||
struct msk_if_softc *sc_if; | struct msk_if_softc *sc_if; | ||||
int rxput[2]; | int rxput[2]; | ||||
struct msk_stat_desc *sd; | struct msk_stat_desc *sd; | ||||
uint32_t control, status; | uint32_t control, status; | ||||
int cons, len, port, rxprog; | int cons, len, port, rxprog; | ||||
if (sc->msk_stat_cons == CSR_READ_2(sc, STAT_PUT_IDX)) | if (sc->msk_stat_cons == CSR_READ_2(sc, STAT_PUT_IDX)) | ||||
return (0); | return (0); | ||||
Show All 30 Lines | case OP_RXCHKSVLAN: | ||||
sc_if->msk_vtag = ntohs(len); | sc_if->msk_vtag = ntohs(len); | ||||
/* FALLTHROUGH */ | /* FALLTHROUGH */ | ||||
case OP_RXCHKS: | case OP_RXCHKS: | ||||
sc_if->msk_csum = status; | sc_if->msk_csum = status; | ||||
break; | break; | ||||
case OP_RXSTAT: | case OP_RXSTAT: | ||||
if (!(sc_if->msk_ifp->if_drv_flags & IFF_DRV_RUNNING)) | if (!(sc_if->msk_ifp->if_drv_flags & IFF_DRV_RUNNING)) | ||||
break; | break; | ||||
NET_EPOCH_ENTER(et); | |||||
if (sc_if->msk_framesize > | if (sc_if->msk_framesize > | ||||
(MCLBYTES - MSK_RX_BUF_ALIGN)) | (MCLBYTES - MSK_RX_BUF_ALIGN)) | ||||
msk_jumbo_rxeof(sc_if, status, control, len); | msk_jumbo_rxeof(sc_if, status, control, len); | ||||
else | else | ||||
msk_rxeof(sc_if, status, control, len); | msk_rxeof(sc_if, status, control, len); | ||||
NET_EPOCH_EXIT(et); | |||||
rxprog++; | rxprog++; | ||||
/* | /* | ||||
* Because there is no way to sync single Rx LE | * Because there is no way to sync single Rx LE | ||||
* put the DMA sync operation off until the end of | * put the DMA sync operation off until the end of | ||||
* event processing. | * event processing. | ||||
*/ | */ | ||||
rxput[port]++; | rxput[port]++; | ||||
/* Update prefetch unit if we've passed water mark. */ | /* Update prefetch unit if we've passed water mark. */ | ||||
▲ Show 20 Lines • Show All 965 Lines • Show Last 20 Lines |