/efe/src/efe.h
https://bitbucket.org/0xffea/driver-gate · C++ Header · 458 lines · 350 code · 61 blank · 47 comment · 0 complexity · 25194e03e38de7725189f62460f93a88 MD5 · raw file
- /*
- * Copyright (c) 2010 Steven Stallion. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * 3. Neither the name of the copyright owner nor the names of any
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- #ifndef _EFE_H
- #define _EFE_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define VENDOR_ID 0x10B8
- #define DEVICE_ID 0x0005
- #define RESET_DELAY 1
- #define RESET_TEST_CYCLES 16
- #define STOP_DELAY 10
- #define STOP_DELAY_CYCLES 160
- #define MII_DELAY 1
- #define MII_DELAY_CYCLES 16
- #define EEPROM_DELAY 3
- #define EEPROM_WORDSZ 16
- #define AT93C46_ADDRLEN 6
- #define AT93C56_ADDRLEN 8
- #define FLAG_RUNNING (1UL << 0)
- #define FLAG_SUSPENDED (1UL << 1)
- #define MCHASHL 64
- #define MCHASHSZ 16
- #define BURSTLEN 0x3F
- #define RXDESCL 128
- #define TXDESCL 128
- #define BUFSZ 1536
- /*
- * Control/Status registers.
- */
- #define CSR_COMMAND 0x00 /* Control Register */
- #define CSR_INTSTAT 0x04 /* Interrupt Status Register */
- #define CSR_INTMASK 0x08 /* Interrupt Mask Register */
- #define CSR_GENCTL 0x0C /* General Control Register */
- #define CSR_NVCTL 0x10 /* Non-volatile Control Register */
- #define CSR_EECTL 0x14 /* EEPROM Control Register */
- #define CSR_PBLCNT 0x18 /* Programmable Burst Length Counter */
- #define CSR_TEST 0x1C /* Test Register */
- #define CSR_CRCCNT 0x20 /* CRC Error Counter */
- #define CSR_ALICNT 0x24 /* Frame Alignment Error Counter */
- #define CSR_MPCNT 0x28 /* Missed Packet Counter */
- #define CSR_RXFIFO 0x2C /* Receive FIFO Contents */
- #define CSR_MMCTL 0x30 /* MII Control Register */
- #define CSR_MMDATA 0x34 /* MII Interface Register */
- #define CSR_MMCFG 0x38 /* MII Configuration Register */
- #define CSR_IPG 0x3C /* Interpacket Gap Register */
- #define CSR_LAN0 0x40 /* LAN Address Register 0 */
- #define CSR_LAN1 0x44 /* LAN Address Register 1 */
- #define CSR_LAN2 0x48 /* LAN Address Register 2 */
- #define CSR_IDCHK 0x4C /* Board ID/Checksum Register */
- #define CSR_MC0 0x50 /* Multicast Address Register 0 */
- #define CSR_MC1 0x54 /* Multicast Address Register 1 */
- #define CSR_MC2 0x58 /* Multicast Address Register 2 */
- #define CSR_MC3 0x5C /* Multicast Address Register 3 */
- #define CSR_RXCON 0x60 /* Receive Control Register */
- #define CSR_RXSTAT 0x64 /* Receive Status Register */
- #define CSR_RXCNT 0x68 /* Receive Byte Count */
- #define CSR_RXTEST 0x6C /* Receive Test */
- #define CSR_TXCON 0x70 /* Transmit Control Register */
- #define CSR_TXSTAT 0x74 /* Transmit Status Register */
- #define CSR_TDPAR 0x78 /* Transmit Packet Address */
- #define CSR_TXTEST 0x7C /* Transmit Test */
- #define CSR_PRFDAR 0x80 /* PCI Receive First Descriptor Address */
- #define CSR_PRCDAR 0x84 /* PCI Receive Current Descriptor Address */
- #define CSR_PRHDAR 0x88 /* PCI Receive Host Data Address */
- #define CSR_PRFLAR 0x8C /* PCI Receive Fragment List Address */
- #define CSR_PRDLGTH 0x90 /* PCI Receive DMA Length/Control */
- #define CSR_PRFCNT 0x94 /* PCI Receive Fragment Count */
- #define CSR_PRLCAR 0x98 /* PCI Receive RAM Current Address */
- #define CSR_PRLPAR 0x9C /* PCI Receive RAM Packet Address */
- #define CSR_PREFAR 0xA0 /* PCI Receive End of Frame Address */
- #define CSR_PRSTAT 0xA4 /* PCI Receive DMA Status Register */
- #define CSR_PRBUF 0xA8 /* Receive RAM Buffer */
- #define CSR_RDNCAR 0xAC /* Receive MTU Current Address */
- #define CSR_PRCPTHR 0xB0 /* PCI Receive Copy Threshold Register */
- #define CSR_ROMDATA 0xB4 /* ROMDATA */
- #define CSR_PREEMPR 0xBC /* Preemptive Interrupt */
- #define CSR_PTFDAR 0xC0 /* PCI Transmit First Descriptor Address */
- #define CSR_PTCDAR 0xC4 /* PCI Transmit Current Descriptor Address */
- #define CSR_PTHDAR 0xC8 /* PCI Transmit Host Data Address */
- #define CSR_PTFLAR 0xCC /* PCI Transmit Fragment List Address */
- #define CSR_PTDLGTH 0xD0 /* PCI Transmit DMA Length/Control */
- #define CSR_PTFCNT 0xD4 /* PCI Transmit Fragment Count */
- #define CSR_PTLCAR 0xD8 /* PCI Transmit RAM Current Address */
- #define CSR_ETXTHR 0xDC /* PCI Early Transmit Threshold Register */
- #define CSR_PTETXC 0xE0 /* PCI Early Transmit Count */
- #define CSR_PTSTAT 0xE4 /* PCI Transmit DMA Status */
- #define CSR_PTBUF 0xE8 /* Transmit RAM Buffer */
- #define CSR_PTFDAR2 0xEC /* PCI Transmit 2 First Descriptor Address */
- #define CSR_FEVTR 0xF0 /* CardBus (UNUSED) */
- #define CSR_FEVTRMSKR 0xF4 /* CardBus (UNUSED) */
- #define CSR_FPRSTSTR 0xF8 /* CardBus (UNUSED) */
- #define CSR_FFRCEVTR 0xFF /* CardBus (UNUSED) */
- /*
- * Register fields.
- */
- #define COMMAND_STOP_RX (1UL << 0) /* Stop Receiver */
- #define COMMAND_START_RX (1UL << 1) /* Start Receiver */
- #define COMMAND_TXQUEUED (1UL << 2) /* Queue TX Descriptor */
- #define COMMAND_RXQUEUED (1UL << 3) /* Queue RX Descriptor */
- #define COMMAND_NEXTFRAME (1UL << 4) /* Release RX Frame */
- #define COMMAND_STOP_TDMA (1UL << 5) /* Stop TX DMA */
- #define COMMAND_STOP_RDMA (1UL << 6) /* Stop RX DMA */
- #define COMMAND_TXUGO (1UL << 7) /* Restart Transmission */
- #define INTSTAT_RCC (1UL << 0) /* Receive Copy Complete */
- #define INTSTAT_HCC (1UL << 1) /* Header Copy Complete */
- #define INTSTAT_RQE (1UL << 2) /* Receive Queue Empty */
- #define INTSTAT_OVW (1UL << 3) /* Receive Overflow */
- #define INTSTAT_RXE (1UL << 4) /* Receive Error */
- #define INTSTAT_TXC (1UL << 5) /* Transmit Complete */
- #define INTSTAT_TCC (1UL << 6) /* Transmit Chain Complete */
- #define INTSTAT_TQE (1UL << 7) /* Transmit Queue Empty */
- #define INTSTAT_TXU (1UL << 8) /* Transmit Underrun */
- #define INTSTAT_CNT (1UL << 9) /* Counter Overflow */
- #define INTSTAT_PREI (1UL << 10) /* Preemptive Interrupt */
- #define INTSTAT_RCT (1UL << 11) /* Receive Copy Threshold */
- #define INTSTAT_FATAL (1UL << 12) /* Fatal Error */
- #define INTSTAT_PME (1UL << 14) /* Power Management Event */
- #define INTSTAT_GP2 (1UL << 15) /* GPIO Event */
- #define INTSTAT_ACTV (1UL << 16) /* Interrupt Active */
- #define INTSTAT_RXIDLE (1UL << 17) /* Receive Idle */
- #define INTSTAT_TXIDLE (1UL << 18) /* Transmit Idle */
- #define INTSTAT_RCIP (1UL << 19) /* Receive Copy in Progress */
- #define INTSTAT_TCIP (1UL << 20) /* Transmit Copy in Progress */
- #define INTSTAT_RBE (1UL << 21) /* Receive Buffers Empty */
- #define INTSTAT_RCTS (1UL << 22) /* Receive Copy Threshold Status */
- #define INTSTAT_RSV (1UL << 23) /* Receive Status Valid */
- #define INTSTAT_DPE (1UL << 24) /* PCI Data Parity Error */
- #define INTSTAT_APE (1UL << 25) /* PCI Address Parity Error */
- #define INTSTAT_PMA (1UL << 26) /* PCI Master Abort */
- #define INTSTAT_PTA (1UL << 27) /* PCI Target Abort */
- #define INTMASK_RCC (1UL << 0) /* Receive Copy Complete */
- #define INTMASK_HCC (1UL << 1) /* Header Copy Complete */
- #define INTMASK_RQE (1UL << 2) /* Receive Queue Empty */
- #define INTMASK_OVW (1UL << 3) /* Receive Overflow */
- #define INTMASK_RXE (1UL << 4) /* Receive Error */
- #define INTMASK_TXC (1UL << 5) /* Transmit Complete */
- #define INTMASK_TCC (1UL << 6) /* Transmit Chain Complete */
- #define INTMASK_TQE (1UL << 7) /* Transmit Queue Empty */
- #define INTMASK_TXU (1UL << 8) /* Transmit Underrun */
- #define INTMASK_CNT (1UL << 9) /* Counter Overflow */
- #define INTMASK_PREI (1UL << 10) /* Preemptive Interrupt */
- #define INTMASK_RCT (1UL << 11) /* Receive Copy Threshold */
- #define INTMASK_FATAL (1UL << 12) /* Fatal Error */
- #define INTMASK_PME (1UL << 14) /* Power Management Event */
- #define INTMASK_GP2 (1UL << 15) /* GPIO Event */
- #define GENCTL_RESET (1UL << 0) /* Soft Reset */
- #define GENCTL_INT (1UL << 1) /* Interrupt Enable */
- #define GENCTL_SWINT (1UL << 2) /* Software Interrupt */
- #define GENCTL_PWRDWN (1UL << 3) /* Power Down */
- #define GENCTL_ONECOPY (1UL << 4) /* One Copy per Receive Frame */
- #define GENCTL_BE (1UL << 5) /* Big Endian */
- #define GENCTL_RDP (1UL << 6) /* Receive DMA Priority */
- #define GENCTL_TDP (1UL << 7) /* Transmit DMA Priority */
- #define GENCTL_RFT_32 (0UL << 8) /* Receive FIFO Threshold (1/4) */
- #define GENCTL_RFT_64 (1UL << 8) /* Receive FIFO Threshold (1/2) */
- #define GENCTL_RFT_96 (2UL << 8) /* Receive FIFO Threshold (3/4) */
- #define GENCTL_RFT_128 (3UL << 8) /* Receive FIFO Threshold (FULL) */
- #define GENCTL_MRM (1UL << 10) /* Memory Read Multiple */
- #define GENCTL_MRL (1UL << 11) /* Memory Read Line */
- #define GENCTL_SOFT0 (1UL << 12) /* Software Bit 0 */
- #define GENCTL_SOFT1 (1UL << 13) /* Software Bit 1 */
- #define GENCTL_RSTPHY (1UL << 14) /* PHY Reset */
- #define GENCTL_SCLK (1UL << 16) /* System Clock */
- #define GENCTL_RD (1UL << 17) /* Reset Disable */
- #define GENCTL_MPE (1UL << 18) /* Magic Packet Enable */
- #define GENCTL_PME (1UL << 19) /* PME Interrupt Enable */
- #define GENCTL_PS_00 (0UL << 20) /* Power State "00" */
- #define GENCTL_PS_01 (1UL << 20) /* Power State "01" */
- #define GENCTL_PS_10 (2UL << 20) /* Power State "10" */
- #define GENCTL_PS_11 (3UL << 20) /* Power State "11" */
- #define GENCTL_OPLE (1UL << 22) /* On Power Loss Enable */
- #define NVCTL_EMM (1UL << 0) /* Enable Memory Map */
- #define NVCTL_CRS (1UL << 1) /* Clock Run Supported */
- #define NVCTL_GPOE1 (1UL << 2) /* General Purpose Output Enable 1 */
- #define NVCTL_GPOE2 (1UL << 3) /* General Purpose Output Enable 2 */
- #define NVCTL_GPIO1 (1UL << 4) /* General Purpose I/O 1 */
- #define NVCTL_GPIO2 (1UL << 5) /* General Purpose I/O 2 */
- #define NVCTL_CB_MODE (1UL << 6) /* CardBus (UNUSED) */
- #define NVCTL_IPG_DLY 7 /* Inter-packet Gap Timer Delay */
- #define EECTL_ENABLE (1UL << 0) /* EEPROM Enable */
- #define EECTL_EECS (1UL << 1) /* EEPROM Chip Select */
- #define EECTL_EESK (1UL << 2) /* EEPROM Clock */
- #define EECTL_EEDI (1UL << 3) /* EEPROM Data Input */
- #define EECTL_EEDO (1UL << 4) /* EEPROM Data Output */
- #define EECTL_EERDY (1UL << 5) /* EEPROM Ready */
- #define EECTL_SIZE (1UL << 6) /* EEPROM Size */
- #define TEST_CLOCK (1UL << 3) /* Clock Test */
- #define MMCTL_READ (1UL << 0) /* MII Read */
- #define MMCTL_WRITE (1UL << 1) /* MII Write */
- #define MMCTL_RESPONDER (1UL << 3) /* MII Responder */
- #define MMCTL_PHYREG 4 /* PHY Address */
- #define MMCTL_PHYADDR 9 /* PHY Register Address */
- #define MMCFG_SME (1UL << 0) /* Serial Mode Enable */
- #define MMCFG_EN694 (1UL << 1) /* EN694 Pin */
- #define MMCFG_694LNK (1UL << 2) /* 694LNK Pin */
- #define MMCFG_PHY (1UL << 3) /* PHY Present */
- #define MMCFG_SMI (1UL << 4) /* Enable Serial Management */
- #define MMCFG_ALTCS (1UL << 5) /* Alternate Clock Source */
- #define MMCFG_ALTDATA (1UL << 6) /* Alternate Data */
- #define MMCFG_STXC (1UL << 14) /* Select TX Clock */
- #define MMCFG_SNTXC (1UL << 15) /* Set No TX Clock */
- #define RXCON_SEP (1UL << 0) /* Save Errored Packets */
- #define RXCON_RRF (1UL << 1) /* Receive Runt Frames */
- #define RXCON_RBF (1UL << 2) /* Receive Broadcast Frames */
- #define RXCON_RMF (1UL << 3) /* Receive Multicast Frames */
- #define RXCON_RIIA (1UL << 4) /* Receive Inverse Addresses */
- #define RXCON_PROMISC (1UL << 5) /* Promiscuous Mode */
- #define RXCON_MONITOR (1UL << 6) /* Monitor Mode */
- #define RXCON_ERE (1UL << 7) /* Early Receive Enable */
- #define RXCON_EB_INT (0UL << 8) /* External Buffer (Inernal) */
- #define RXCON_EB_16K (1UL << 8) /* External Buffer (16K) */
- #define RXCON_EB_32K (2UL << 8) /* External Buffer (32K) */
- #define RXCON_EB_128K (3UL << 8) /* External Buffer (128K) */
- #define RXSTAT_PRI (1UL << 0) /* Packet Received Intact */
- #define RXSTAT_FAE (1UL << 1) /* Frame Alignment Error */
- #define RXSTAT_CRC (1UL << 2) /* CRC Error */
- #define RXSTAT_MP (1UL << 3) /* Missed Packet */
- #define RXSTAT_MAR (1UL << 4) /* Multicast Address Recognized */
- #define RXSTAT_BAR (1UL << 5) /* Broadcast Address Recognized */
- #define RXSTAT_RD (1UL << 6) /* Receiver Disabled */
- #define RXSTAT_NSV (1UL << 12) /* Network Status Valid */
- #define RXSTAT_FLE (1UL << 13) /* Fragment List Error */
- #define RXSTAT_HC (1UL << 14) /* Header Copied */
- #define RXSTAT_OWNER (1UL << 15) /* Descriptor Ownership Bit */
- #define RXCTL_FRAGLIST (1UL << 0) /* Fragment List */
- #define RXCTL_LFFORM (1UL << 1) /* Fragment List Format */
- #define RXCTL_HEADER (1UL << 2) /* Header Copy */
- #define TXCON_ETE (1UL << 0) /* Early Transmit Enable */
- #define TXCON_LB_0 (0UL << 1) /* Normal Operation */
- #define TXCON_LB_1 (1UL << 1) /* Internal Loopback */
- #define TXCON_LB_2 (2UL << 1) /* External Loopback */
- #define TXCON_LB_3 (3UL << 1) /* Full Duplex Mode */
- #define TXCON_SLOT 3 /* Slot Time */
- #define TXSTAT_PTX (1UL << 0) /* Packet Transmitted */
- #define TXSTAT_ND (1UL << 1) /* Non-deferred Transmission */
- #define TXSTAT_COLL (1UL << 2) /* Transmitted w/Collisions */
- #define TXSTAT_CSL (1UL << 3) /* Carrier Sense Lost */
- #define TXSTAT_UFLO (1UL << 4) /* TX Underrun */
- #define TXSTAT_CDH (1UL << 5) /* Collision Detect Heartbeat */
- #define TXSTAT_OWC (1UL << 6) /* Out of Window Collision */
- #define TXSTAT_DEFER (1UL << 7) /* IGP Deferring */
- #define TXSTAT_CCNT 8 /* Collision Count */
- #define TXSTAT_CCNTMASK 0x1F /* Collision Count Mask */
- #define TXSTAT_EXCOLL (1UL << 12) /* Excessive Collisions */
- #define TXSTAT_OWNER (1UL << 15) /* Descriptor Ownership Bit */
- #define TXCTL_FRAGLIST (1UL << 0) /* Fragment List */
- #define TXCTL_LFFORM (1UL << 1) /* Fragment List Format */
- #define TXCTL_IAF (1UL << 2) /* Interrupt After Frame */
- #define TXCTL_NOCRC (1UL << 3) /* Disable CRC Generation */
- #define TXCTL_LASTDESCR (1UL << 4) /* Last Transmit Descriptor */
- /*
- * Register access.
- */
- #define GETCSR(efep, reg) \
- ddi_get32((efep)->efe_regs_acch, \
- (uint32_t *)((efep)->efe_regs + (reg)))
- #define PUTCSR(efep, reg, val) \
- ddi_put32((efep)->efe_regs_acch, \
- (uint32_t *)((efep)->efe_regs + (reg)), (val))
- #define CLRBIT(efep, reg, bit) \
- PUTCSR(efep, reg, (GETCSR(efep, reg) & ~(bit)))
- #define SETBIT(efep, reg, bit) \
- PUTCSR(efep, reg, (GETCSR(efep, reg) | (bit)))
- /*
- * DMA access.
- */
- #define DESCSZ(x) (sizeof (efe_desc_t) * (x))
- #define BUFPSZ(x) (sizeof (efe_buf_t *) * (x))
- #define DESCADDR(rp, x) ((rp)->r_dmac.dmac_address + DESCSZ(x))
- #define DESCLEN(rp) ((rp)->r_len)
- #define BUFADDR(bp) ((bp)->b_dmac.dmac_address)
- #define BUFLEN(bp) ((bp)->b_len)
- #define NEXTDESC(rp, x) (((x) + 1) % (rp)->r_len)
- #define NEXTDESCADDR(rp, x) DESCADDR(rp, NEXTDESC(rp, x))
- #define GETDESC(rp, x) (&(rp)->r_descp[(x)])
- #define GETDESC16(rp, addr) \
- ddi_get16((rp)->r_acch, (addr))
- #define PUTDESC16(rp, addr, val) \
- ddi_put16((rp)->r_acch, (addr), (val))
- #define GETDESC32(rp, addr) \
- ddi_get32((rp)->r_acch, (addr))
- #define PUTDESC32(rp, addr, val) \
- ddi_put32((rp)->r_acch, (addr), (val))
- #define SYNCDESC(rp, x, type) \
- (void) ddi_dma_sync((rp)->r_dmah, DESCSZ(x), \
- sizeof (efe_desc_t), (type))
- #define GETBUF(rp, x) ((rp)->r_bufpp[(x)])
- #define SYNCBUF(bp, type) \
- (void) ddi_dma_sync((bp)->b_dmah, 0, (bp)->b_len, (type))
- /*
- * Soft state.
- */
- typedef struct {
- uint16_t d_status;
- uint16_t d_len;
- uint32_t d_bufaddr;
- uint16_t d_buflen;
- uint16_t d_control;
- uint32_t d_next;
- } efe_desc_t;
- typedef struct {
- ddi_dma_handle_t b_dmah;
- ddi_acc_handle_t b_acch;
- ddi_dma_cookie_t b_dmac;
- size_t b_len;
- caddr_t b_kaddr;
- } efe_buf_t;
- typedef struct {
- ddi_dma_handle_t r_dmah;
- ddi_acc_handle_t r_acch;
- ddi_dma_cookie_t r_dmac;
- size_t r_len;
- efe_desc_t *r_descp;
- efe_buf_t **r_bufpp;
- } efe_ring_t;
- typedef struct {
- dev_info_t *efe_dip;
- mii_handle_t efe_miih;
- mac_handle_t efe_mh;
- uint32_t *efe_regs;
- ddi_acc_handle_t efe_regs_acch;
- ddi_intr_handle_t efe_intrh;
- kmutex_t efe_intrlock;
- kmutex_t efe_txlock;
- int efe_flags;
- boolean_t efe_promisc;
- uint8_t efe_macaddr[ETHERADDRL];
- uint_t efe_mccount[MCHASHL];
- uint16_t efe_mchash[MCHASHL / MCHASHSZ];
- efe_ring_t *efe_rx_ring;
- uint_t efe_rx_desc;
- efe_ring_t *efe_tx_ring;
- uint_t efe_tx_desc;
- uint_t efe_tx_sent;
- /*
- * Driver statistics.
- */
- uint64_t efe_multircv;
- uint64_t efe_brdcstrcv;
- uint64_t efe_multixmt;
- uint64_t efe_brdcstxmt;
- uint64_t efe_norcvbuf;
- uint64_t efe_ierrors;
- uint64_t efe_noxmtbuf;
- uint64_t efe_oerrors;
- uint64_t efe_collisions;
- uint64_t efe_rbytes;
- uint64_t efe_ipackets;
- uint64_t efe_obytes;
- uint64_t efe_opackets;
- uint64_t efe_uflo;
- uint64_t efe_oflo;
- uint64_t efe_align_errors;
- uint64_t efe_fcs_errors;
- uint64_t efe_first_collisions;
- uint64_t efe_tx_late_collisions;
- uint64_t efe_defer_xmts;
- uint64_t efe_ex_collisions;
- uint64_t efe_macxmt_errors;
- uint64_t efe_carrier_errors;
- uint64_t efe_toolong_errors;
- uint64_t efe_macrcv_errors;
- uint64_t efe_runt_errors;
- uint64_t efe_jabber_errors;
- } efe_t;
- #ifdef __cplusplus
- }
- #endif
- #endif /* _EFE_H */