sfxge(4): cope with code duplication on SW events composition
Sponsored by: Solarflare Communications, Inc. MFC after: 2 days Differential Revision: https://reviews.freebsd.org/D6666
This commit is contained in:
parent
ffcce084cb
commit
e6a8398ae1
@ -130,6 +130,26 @@ enum sfxge_sw_ev {
|
||||
#define SFXGE_SW_EV_MAGIC(_sw_ev) \
|
||||
(SFXGE_MAGIC_RESERVED | ((_sw_ev) << SFXGE_MAGIC_DMAQ_LABEL_WIDTH))
|
||||
|
||||
static inline uint16_t
|
||||
sfxge_sw_ev_mk_magic(enum sfxge_sw_ev sw_ev, unsigned int label)
|
||||
{
|
||||
KASSERT((label & SFXGE_MAGIC_DMAQ_LABEL_MASK) == label,
|
||||
("(label & SFXGE_MAGIC_DMAQ_LABEL_MASK) != label"));
|
||||
return SFXGE_SW_EV_MAGIC(sw_ev) | label;
|
||||
}
|
||||
|
||||
static inline uint16_t
|
||||
sfxge_sw_ev_rxq_magic(enum sfxge_sw_ev sw_ev, struct sfxge_rxq *rxq)
|
||||
{
|
||||
return sfxge_sw_ev_mk_magic(sw_ev, 0);
|
||||
}
|
||||
|
||||
static inline uint16_t
|
||||
sfxge_sw_ev_txq_magic(enum sfxge_sw_ev sw_ev, struct sfxge_txq *txq)
|
||||
{
|
||||
return sfxge_sw_ev_mk_magic(sw_ev, txq->type);
|
||||
}
|
||||
|
||||
enum sfxge_evq_state {
|
||||
SFXGE_EVQ_UNINITIALIZED = 0,
|
||||
SFXGE_EVQ_INITIALIZED,
|
||||
|
@ -207,7 +207,6 @@ sfxge_ev_rxq_flush_done(void *arg, uint32_t rxq_index)
|
||||
struct sfxge_softc *sc;
|
||||
struct sfxge_rxq *rxq;
|
||||
unsigned int index;
|
||||
unsigned int label;
|
||||
uint16_t magic;
|
||||
|
||||
evq = (struct sfxge_evq *)arg;
|
||||
@ -226,11 +225,7 @@ sfxge_ev_rxq_flush_done(void *arg, uint32_t rxq_index)
|
||||
}
|
||||
|
||||
evq = sc->evq[index];
|
||||
|
||||
label = 0;
|
||||
KASSERT((label & SFXGE_MAGIC_DMAQ_LABEL_MASK) == label,
|
||||
("(label & SFXGE_MAGIC_DMAQ_LABEL_MASK) != level"));
|
||||
magic = SFXGE_SW_EV_MAGIC(SFXGE_SW_EV_RX_QFLUSH_DONE) | label;
|
||||
magic = sfxge_sw_ev_rxq_magic(SFXGE_SW_EV_RX_QFLUSH_DONE, rxq);
|
||||
|
||||
KASSERT(evq->init_state == SFXGE_EVQ_STARTED,
|
||||
("evq not started"));
|
||||
@ -246,7 +241,6 @@ sfxge_ev_rxq_flush_failed(void *arg, uint32_t rxq_index)
|
||||
struct sfxge_softc *sc;
|
||||
struct sfxge_rxq *rxq;
|
||||
unsigned int index;
|
||||
unsigned int label;
|
||||
uint16_t magic;
|
||||
|
||||
evq = (struct sfxge_evq *)arg;
|
||||
@ -260,11 +254,7 @@ sfxge_ev_rxq_flush_failed(void *arg, uint32_t rxq_index)
|
||||
/* Resend a software event on the correct queue */
|
||||
index = rxq->index;
|
||||
evq = sc->evq[index];
|
||||
|
||||
label = 0;
|
||||
KASSERT((label & SFXGE_MAGIC_DMAQ_LABEL_MASK) == label,
|
||||
("(label & SFXGE_MAGIC_DMAQ_LABEL_MASK) != label"));
|
||||
magic = SFXGE_SW_EV_MAGIC(SFXGE_SW_EV_RX_QFLUSH_FAILED) | label;
|
||||
magic = sfxge_sw_ev_rxq_magic(SFXGE_SW_EV_RX_QFLUSH_FAILED, rxq);
|
||||
|
||||
KASSERT(evq->init_state == SFXGE_EVQ_STARTED,
|
||||
("evq not started"));
|
||||
@ -331,7 +321,6 @@ sfxge_ev_txq_flush_done(void *arg, uint32_t txq_index)
|
||||
struct sfxge_evq *evq;
|
||||
struct sfxge_softc *sc;
|
||||
struct sfxge_txq *txq;
|
||||
unsigned int label;
|
||||
uint16_t magic;
|
||||
|
||||
evq = (struct sfxge_evq *)arg;
|
||||
@ -351,11 +340,7 @@ sfxge_ev_txq_flush_done(void *arg, uint32_t txq_index)
|
||||
|
||||
/* Resend a software event on the correct queue */
|
||||
evq = sc->evq[txq->evq_index];
|
||||
|
||||
label = txq->type;
|
||||
KASSERT((label & SFXGE_MAGIC_DMAQ_LABEL_MASK) == label,
|
||||
("(label & SFXGE_MAGIC_DMAQ_LABEL_MASK) != label"));
|
||||
magic = SFXGE_SW_EV_MAGIC(SFXGE_SW_EV_TX_QFLUSH_DONE) | label;
|
||||
magic = sfxge_sw_ev_txq_magic(SFXGE_SW_EV_TX_QFLUSH_DONE, txq);
|
||||
|
||||
KASSERT(evq->init_state == SFXGE_EVQ_STARTED,
|
||||
("evq not started"));
|
||||
|
@ -175,17 +175,12 @@ sfxge_rx_post_refill(void *arg)
|
||||
struct sfxge_softc *sc;
|
||||
unsigned int index;
|
||||
struct sfxge_evq *evq;
|
||||
unsigned int label;
|
||||
uint16_t magic;
|
||||
|
||||
sc = rxq->sc;
|
||||
index = rxq->index;
|
||||
evq = sc->evq[index];
|
||||
|
||||
label = 0;
|
||||
KASSERT((label & SFXGE_MAGIC_DMAQ_LABEL_MASK) == label,
|
||||
("(label & SFXGE_MAGIC_DMAQ_LABEL_MASK) != level"));
|
||||
magic = SFXGE_SW_EV_MAGIC(SFXGE_SW_EV_RX_QREFILL) | label;
|
||||
magic = sfxge_sw_ev_rxq_magic(SFXGE_SW_EV_RX_QREFILL, rxq);
|
||||
|
||||
/* This is guaranteed due to the start/stop order of rx and ev */
|
||||
KASSERT(evq->init_state == SFXGE_EVQ_STARTED,
|
||||
|
Loading…
x
Reference in New Issue
Block a user