#ifndef IF_AEVAR_H
#define IF_AEVAR_H
#define VENDORID_ATTANSIC 0x1969
#define DEVICEID_ATTANSIC_L2 0x2048
#define AE_RESET_TIMEOUT 100
#define AE_IDLE_TIMEOUT 100
#define AE_MDIO_TIMEOUT 10
#define AE_VPD_TIMEOUT 10
#define AE_TX_TIMEOUT 5
#define AE_PHYADDR_DEFAULT 0
typedef struct ae_txd {
uint16_t len;
uint16_t vlan;
} __packed ae_txd_t;
typedef struct ae_txs {
uint16_t len;
uint16_t flags;
} __packed ae_txs_t;
typedef struct ae_rxd {
uint16_t len;
uint16_t flags;
uint16_t vlan;
uint16_t __pad;
uint8_t data[1528];
} __packed ae_rxd_t;
typedef struct ae_stats {
uint32_t rx_bcast;
uint32_t rx_mcast;
uint32_t rx_pause;
uint32_t rx_ctrl;
uint32_t rx_crcerr;
uint32_t rx_codeerr;
uint32_t rx_runt;
uint32_t rx_frag;
uint32_t rx_trunc;
uint32_t rx_align;
uint32_t tx_bcast;
uint32_t tx_mcast;
uint32_t tx_pause;
uint32_t tx_ctrl;
uint32_t tx_defer;
uint32_t tx_excdefer;
uint32_t tx_singlecol;
uint32_t tx_multicol;
uint32_t tx_latecol;
uint32_t tx_abortcol;
uint32_t tx_underrun;
} ae_stats_t;
typedef struct ae_softc {
if_t ifp;
device_t dev;
device_t miibus;
struct resource *mem[1];
struct resource_spec *spec_mem;
struct resource *irq[1];
struct resource_spec *spec_irq;
void *intrhand;
struct mtx mtx;
uint8_t eaddr[ETHER_ADDR_LEN];
uint8_t flags;
int if_flags;
struct callout tick_ch;
struct task int_task;
struct task link_task;
struct taskqueue *tq;
bus_dma_tag_t dma_parent_tag;
bus_dma_tag_t dma_rxd_tag;
bus_dma_tag_t dma_txd_tag;
bus_dma_tag_t dma_txs_tag;
bus_dmamap_t dma_rxd_map;
bus_dmamap_t dma_txd_map;
bus_dmamap_t dma_txs_map;
bus_addr_t dma_rxd_busaddr;
bus_addr_t dma_txd_busaddr;
bus_addr_t dma_txs_busaddr;
char *rxd_base_dma;
ae_rxd_t *rxd_base;
char *txd_base;
ae_txs_t *txs_base;
unsigned int rxd_cur;
unsigned int txd_cur;
unsigned int txs_cur;
unsigned int txs_ack;
unsigned int txd_ack;
int tx_inproc;
int wd_timer;
ae_stats_t stats;
} ae_softc_t;
#define AE_LOCK(_sc) mtx_lock(&(_sc)->mtx)
#define AE_UNLOCK(_sc) mtx_unlock(&(_sc)->mtx)
#define AE_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->mtx, MA_OWNED)
#define BUS_ADDR_LO(x) ((uint64_t) (x) & 0xFFFFFFFF)
#define BUS_ADDR_HI(x) ((uint64_t) (x) >> 32)
#define AE_FLAG_LINK 0x01
#define AE_FLAG_DETACH 0x02
#define AE_FLAG_TXAVAIL 0x04
#define AE_FLAG_MSI 0x08
#define AE_FLAG_PMG 0x10
#endif