struct nfe_tx_data {
bus_dmamap_t map;
struct mbuf *m;
};
struct nfe_tx_ring {
bus_dma_tag_t tag;
bus_dmamap_t map;
bus_addr_t physaddr;
struct nfe_desc32 *desc32;
struct nfe_desc64 *desc64;
bus_dma_tag_t data_tag;
struct nfe_tx_data *data;
int queued;
int cur;
int next;
};
struct nfe_softc;
struct nfe_jbuf {
struct nfe_softc *sc;
struct nfe_rx_ring *ring;
int inuse;
int slot;
caddr_t buf;
bus_addr_t physaddr;
SLIST_ENTRY(nfe_jbuf) jnext;
};
struct nfe_rx_data {
bus_dmamap_t map;
struct mbuf *m;
};
struct nfe_rx_ring {
bus_dma_tag_t tag;
bus_dmamap_t map;
bus_addr_t physaddr;
struct nfe_desc32 *desc32;
struct nfe_desc64 *desc64;
bus_dma_tag_t jtag;
bus_dmamap_t jmap;
caddr_t jpool;
struct nfe_jbuf *jbuf;
SLIST_HEAD(, nfe_jbuf) jfreelist;
bus_dma_tag_t data_tag;
bus_dmamap_t data_tmpmap;
struct nfe_rx_data *data;
int bufsz;
int cur;
int next;
};
struct nfe_softc {
struct arpcom arpcom;
int sc_mem_rid;
time_t sc_rate_second;
int sc_rate_acc;
int sc_rate_avg;
struct resource *sc_mem_res;
bus_space_handle_t sc_memh;
bus_space_tag_t sc_memt;
int sc_irq_rid;
struct resource *sc_irq_res;
void *sc_ih;
device_t sc_miibus;
struct callout sc_tick_ch;
int sc_if_flags;
uint32_t sc_caps;
#define NFE_JUMBO_SUP 0x01
#define NFE_40BIT_ADDR 0x02
#define NFE_HW_CSUM 0x04
#define NFE_HW_VLAN 0x08
#define NFE_FIX_EADDR 0x10
#define NFE_NO_PWRCTL 0x20
#define NFE_WORDALIGN 0x40
uint32_t sc_flags;
#define NFE_F_USE_JUMBO 0x01
#define NFE_F_DYN_IM 0x02
#define NFE_F_IRQ_TIMER 0x04
uint32_t rxtxctl_desc;
uint32_t rxtxctl;
uint8_t mii_phyaddr;
struct ifpoll_compat sc_npoll;
bus_dma_tag_t sc_dtag;
struct nfe_tx_ring txq;
struct nfe_rx_ring rxq;
uint32_t sc_irq_enable;
int sc_tx_spare;
int sc_imtime;
int sc_rx_ring_count;
int sc_tx_ring_count;
int sc_debug;
struct lwkt_serialize sc_jbuf_serializer;
};
#define NFE_IRQ_ENABLE(sc) \
((sc)->sc_imtime == 0 ? NFE_IRQ_NOIMTIMER : \
(((sc)->sc_flags & NFE_F_DYN_IM) ? NFE_IRQ_NOIMTIMER: NFE_IRQ_IMTIMER))
#define NFE_ADDR_HI(addr) ((uint64_t) (addr) >> 32)
#define NFE_ADDR_LO(addr) ((uint64_t) (addr) & 0xffffffff)