#define MY_PAR0 0x0
#define MY_PAR1 0x04
#define MY_MAR0 0x08
#define MY_MAR1 0x0C
#define MY_FAR0 0x10
#define MY_FAR1 0x14
#define MY_TCRRCR 0x18
#define MY_BCR 0x1C
#define MY_TXPDR 0x20
#define MY_RXPDR 0x24
#define MY_RXCWP 0x28
#define MY_TXLBA 0x2C
#define MY_RXLBA 0x30
#define MY_ISR 0x34
#define MY_IMR 0x38
#define MY_FTH 0x3C
#define MY_MANAGEMENT 0x40
#define MY_TALLY 0x44
#define MY_TSR 0x48
#define MY_PHYBASE 0x4c
#define MY_RXRUN 0x00008000
#define MY_EIEN 0x00004000
#define MY_RFCEN 0x00002000
#define MY_NDFA 0x00001000
#define MY_RBLEN 0x00000800
#define MY_RPBLE1 0x00000000
#define MY_RPBLE4 0x00000100
#define MY_RPBLE8 0x00000200
#define MY_RPBLE16 0x00000300
#define MY_RPBLE32 0x00000400
#define MY_RPBLE64 0x00000500
#define MY_RPBLE128 0x00000600
#define MY_RPBLE512 0x00000700
#define MY_PROM 0x000000080
#define MY_AB 0x000000040
#define MY_AM 0x000000020
#define MY_ARP 0x000000008
#define MY_ALP 0x000000004
#define MY_SEP 0x000000002
#define MY_RE 0x000000001
#define MY_TXRUN 0x04000000
#define MY_Enhanced 0x02000000
#define MY_TFCEN 0x01000000
#define MY_TFT64 0x00000000
#define MY_TFT32 0x00200000
#define MY_TFT128 0x00400000
#define MY_TFT256 0x00600000
#define MY_TFT512 0x00800000
#define MY_TFT768 0x00A00000
#define MY_TFT1024 0x00C00000
#define MY_TFTSF 0x00E00000
#define MY_FD 0x00100000
#define MY_PS10 0x00080000
#define MY_TE 0x00040000
#define MY_PS1000 0x00010000
#define MY_PROG 0x00000200
#define MY_RLE 0x00000100
#define MY_RME 0x00000080
#define MY_WIE 0x00000040
#define MY_PBL1 0x00000000
#define MY_PBL4 0x00000008
#define MY_PBL8 0x00000010
#define MY_PBL16 0x00000018
#define MY_PBL32 0x00000020
#define MY_PBL64 0x00000028
#define MY_PBL128 0x00000030
#define MY_PBL512 0x00000038
#define MY_ABR 0x00000004
#define MY_BLS 0x00000002
#define MY_SWR 0x00000001
#define MY_TxPollDemand 0x1
#define MY_RxPollDemand 0x01
#define MY_RFCON 0x00020000
#define MY_RFCOFF 0x00010000
#define MY_LSCStatus 0x00008000
#define MY_ANCStatus 0x00004000
#define MY_FBE 0x00002000
#define MY_FBEMask 0x00001800
#define MY_ParityErr 0x00000000
#define MY_MasterErr 0x00000800
#define MY_TargetErr 0x00001000
#define MY_TUNF 0x00000400
#define MY_ROVF 0x00000200
#define MY_ETI 0x00000100
#define MY_ERI 0x00000080
#define MY_CNTOVF 0x00000040
#define MY_RBU 0x00000020
#define MY_TBU 0x00000010
#define MY_TI 0x00000008
#define MY_RI 0x00000004
#define MY_RxErr 0x00000002
#define MY_MRFCON 0x00020000
#define MY_MRFCOFF 0x00010000
#define MY_MLSCStatus 0x00008000
#define MY_MANCStatus 0x00004000
#define MY_MFBE 0x00002000
#define MY_MFBEMask 0x00001800
#define MY_MTUNF 0x00000400
#define MY_MROVF 0x00000200
#define MY_METI 0x00000100
#define MY_MERI 0x00000080
#define MY_MCNTOVF 0x00000040
#define MY_MRBU 0x00000020
#define MY_MTBU 0x00000010
#define MY_MTI 0x00000008
#define MY_MRI 0x00000004
#define MY_MRxErr 0x00000002
#define MY_INTRS MY_MRBU|MY_TBU|MY_MTI|MY_MRI|MY_METI
#define MY_FCHTShift 16
#define MY_FCLTShift 0
#define MY_MASK_MIIR_MII_READ 0x00000000
#define MY_MASK_MIIR_MII_WRITE 0x00000008
#define MY_MASK_MIIR_MII_MDO 0x00000004
#define MY_MASK_MIIR_MII_MDI 0x00000002
#define MY_MASK_MIIR_MII_MDC 0x00000001
#define MY_TCOVF 0x80000000
#define MY_CRCMask 0x7fff0000
#define MY_CRCShift 16
#define MY_TMOVF 0x00008000
#define MY_MPAMask 0x00007fff
#define MY_MPAShift 0
#define MY_AbortMask 0xff000000
#define MY_AbortShift 24
#define MY_LColMask 0x00ff0000
#define MY_LColShift 16
#define MY_NCRMask 0x0000ffff
#define MY_NCRShift 0
struct my_desc {
u_int32_t my_status;
u_int32_t my_ctl;
u_int32_t my_data;
u_int32_t my_next;
};
#define MY_OWNByNIC 0x80000000
#define MY_OWNByDriver 0x0
#define MY_RXOWN 0x80000000
#define MY_FLNGMASK 0x0fff0000
#define MY_FLNGShift 16
#define MY_MARSTATUS 0x00004000
#define MY_BARSTATUS 0x00002000
#define MY_PHYSTATUS 0x00001000
#define MY_RXFSD 0x00000800
#define MY_RXLSD 0x00000400
#define MY_ES 0x00000080
#define MY_RUNT 0x00000040
#define MY_LONG 0x00000020
#define MY_FAE 0x00000010
#define MY_CRC 0x00000008
#define MY_RXER 0x00000004
#define MY_RDES0CHECK 0x000078fc
#define MY_RXIC 0x00800000
#define MY_RBSMASK 0x000007ff
#define MY_RBSShift 0
#define MY_TXERR 0x00008000
#define MY_JABTO 0x00004000
#define MY_CSL 0x00002000
#define MY_LC 0x00001000
#define MY_EC 0x00000800
#define MY_UDF 0x00000400
#define MY_DFR 0x00000200
#define MY_HF 0x00000100
#define MY_NCRMASK 0x000000ff
#define MY_NCRShift 0
#define MY_TXIC 0x80000000
#define MY_ETIControl 0x40000000
#define MY_TXLD 0x20000000
#define MY_TXFD 0x10000000
#define MY_CRCDisable 0x00000000
#define MY_CRCEnable 0x08000000
#define MY_PADDisable 0x00000000
#define MY_PADEnable 0x04000000
#define MY_RetryTxLC 0x02000000
#define MY_PKTShift 11
#define MY_TBSMASK 0x000007ff
#define MY_TBSShift 0
#define MY_MAXFRAGS 1
#define MY_RX_LIST_CNT 64
#define MY_TX_LIST_CNT 64
#define MY_MIN_FRAMELEN 60
struct my_txdesc {
struct my_desc my_frag[MY_MAXFRAGS];
};
#define MY_TXSTATUS(x) x->my_ptr->my_frag[x->my_lastdesc].my_status
#define MY_TXCTL(x) x->my_ptr->my_frag[x->my_lastdesc].my_ctl
#define MY_TXDATA(x) x->my_ptr->my_frag[x->my_lastdesc].my_data
#define MY_TXNEXT(x) x->my_ptr->my_frag[x->my_lastdesc].my_next
#define MY_TXOWN(x) x->my_ptr->my_frag[0].my_status
#define MY_UNSENT 0x1234
struct my_list_data {
struct my_desc my_rx_list[MY_RX_LIST_CNT];
struct my_txdesc my_tx_list[MY_TX_LIST_CNT];
};
struct my_chain {
struct my_txdesc *my_ptr;
struct mbuf *my_mbuf;
struct my_chain *my_nextdesc;
u_int8_t my_lastdesc;
};
struct my_chain_onefrag {
struct my_desc *my_ptr;
struct mbuf *my_mbuf;
struct my_chain_onefrag *my_nextdesc;
u_int8_t my_rlast;
};
struct my_chain_data {
struct my_chain_onefrag my_rx_chain[MY_RX_LIST_CNT];
struct my_chain my_tx_chain[MY_TX_LIST_CNT];
struct my_chain_onefrag *my_rx_head;
struct my_chain *my_tx_head;
struct my_chain *my_tx_tail;
struct my_chain *my_tx_free;
};
struct my_type {
u_int16_t my_vid;
u_int16_t my_did;
char *my_name;
};
#define MY_FLAG_FORCEDELAY 1
#define MY_FLAG_SCHEDDELAY 2
#define MY_FLAG_DELAYTIMEO 3
struct my_softc {
if_t my_ifp;
device_t my_dev;
struct ifmedia ifmedia;
bus_space_handle_t my_bhandle;
bus_space_tag_t my_btag;
struct my_type *my_info;
struct my_type *my_pinfo;
struct resource *my_res;
struct resource *my_irq;
void *my_intrhand;
u_int8_t my_phy_addr;
u_int8_t my_tx_pend;
u_int8_t my_want_auto;
u_int8_t my_autoneg;
u_int16_t my_txthresh;
u_int8_t my_stats_no_timeout;
caddr_t my_ldata_ptr;
struct my_list_data *my_ldata;
struct my_chain_data my_cdata;
device_t my_miibus;
struct mtx my_mtx;
struct callout my_autoneg_timer;
struct callout my_watchdog;
int my_timer;
};
#define MY_LOCK(_sc) mtx_lock(&(_sc)->my_mtx)
#define MY_UNLOCK(_sc) mtx_unlock(&(_sc)->my_mtx)
#define MY_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->my_mtx, MA_OWNED)
#define CSR_WRITE_4(sc, reg, val) \
bus_space_write_4(sc->my_btag, sc->my_bhandle, reg, val)
#define CSR_WRITE_2(sc, reg, val) \
bus_space_write_2(sc->my_btag, sc->my_bhandle, reg, val)
#define CSR_WRITE_1(sc, reg, val) \
bus_space_write_1(sc->my_btag, sc->my_bhandle, reg, val)
#define CSR_READ_4(sc, reg) \
bus_space_read_4(sc->my_btag, sc->my_bhandle, reg)
#define CSR_READ_2(sc, reg) \
bus_space_read_2(sc->my_btag, sc->my_bhandle, reg)
#define CSR_READ_1(sc, reg) \
bus_space_read_1(sc->my_btag, sc->my_bhandle, reg)
#define MY_TIMEOUT 1000
#define MYSONVENDORID 0x1516
#define MTD800ID 0x0800
#define MTD803ID 0x0803
#define MTD891ID 0x0891
#define MY_OP_READ 0x6000
#define MY_OP_WRITE 0x5002
#define MysonPHYID0 0x0300
#define SeeqPHYID0 0x0016
#define SEEQ_MIIRegister18 18
#define SEEQ_SPD_DET_100 0x80
#define SEEQ_DPLX_DET_FULL 0x40
#define AhdocPHYID0 0x0022
#define AHDOC_DiagnosticReg 18
#define AHDOC_DPLX_FULL 0x0800
#define AHDOC_Speed_100 0x0400
#define MarvellPHYID0 0x0141
#define LevelOnePHYID0 0x0013
#define Marvell_SpecificStatus 17
#define Marvell_Speed1000 0x8000
#define Marvell_Speed100 0x4000
#define Marvell_FullDuplex 0x2000
#define MY_PCI_VENDOR_ID 0x00
#define MY_PCI_DEVICE_ID 0x02
#define MY_PCI_COMMAND 0x04
#define MY_PCI_STATUS 0x06
#define MY_PCI_CLASSCODE 0x09
#define MY_PCI_LATENCY_TIMER 0x0D
#define MY_PCI_HEADER_TYPE 0x0E
#define MY_PCI_LOIO 0x10
#define MY_PCI_LOMEM 0x14
#define MY_PCI_BIOSROM 0x30
#define MY_PCI_INTLINE 0x3C
#define MY_PCI_INTPIN 0x3D
#define MY_PCI_MINGNT 0x3E
#define MY_PCI_MINLAT 0x0F
#define MY_PCI_RESETOPT 0x48
#define MY_PCI_EEPROM_DATA 0x4C
#define PHY_UNKNOWN 3
#define MY_PHYADDR_MIN 0x00
#define MY_PHYADDR_MAX 0x1F
#define PHY_BMCR 0x00
#define PHY_BMSR 0x01
#define PHY_VENID 0x02
#define PHY_DEVID 0x03
#define PHY_ANAR 0x04
#define PHY_LPAR 0x05
#define PHY_ANEXP 0x06
#define PHY_NPTR 0x07
#define PHY_LPNPR 0x08
#define PHY_1000CR 0x09
#define PHY_1000SR 0x0a
#define PHY_ANAR_NEXTPAGE 0x8000
#define PHY_ANAR_RSVD0 0x4000
#define PHY_ANAR_TLRFLT 0x2000
#define PHY_ANAR_RSVD1 0x1000
#define PHY_ANAR_RSVD2 0x0800
#define PHY_ANAR_RSVD3 0x0400
#define PHY_ANAR_100BT4 0x0200L
#define PHY_ANAR_100BTXFULL 0x0100
#define PHY_ANAR_100BTXHALF 0x0080
#define PHY_ANAR_10BTFULL 0x0040
#define PHY_ANAR_10BTHALF 0x0020
#define PHY_ANAR_PROTO4 0x0010
#define PHY_ANAR_PROTO3 0x0008
#define PHY_ANAR_PROTO2 0x0004
#define PHY_ANAR_PROTO1 0x0002
#define PHY_ANAR_PROTO0 0x0001
#define PHY_1000SR_1000BTXFULL 0x0800
#define PHY_1000SR_1000BTXHALF 0x0400
#define PHY_BMCR_RESET 0x8000
#define PHY_BMCR_LOOPBK 0x4000
#define PHY_BMCR_SPEEDSEL 0x2000
#define PHY_BMCR_AUTONEGENBL 0x1000
#define PHY_BMCR_RSVD0 0x0800
#define PHY_BMCR_ISOLATE 0x0400
#define PHY_BMCR_AUTONEGRSTR 0x0200
#define PHY_BMCR_DUPLEX 0x0100
#define PHY_BMCR_COLLTEST 0x0080
#define PHY_BMCR_1000 0x0040
#define PHY_BMCR_RSVD2 0x0020
#define PHY_BMCR_RSVD3 0x0010
#define PHY_BMCR_RSVD4 0x0008
#define PHY_BMCR_RSVD5 0x0004
#define PHY_BMCR_RSVD6 0x0002
#define PHY_BMCR_RSVD7 0x0001
#define PHY_BMSR_100BT4 0x8000
#define PHY_BMSR_100BTXFULL 0x4000
#define PHY_BMSR_100BTXHALF 0x2000
#define PHY_BMSR_10BTFULL 0x1000
#define PHY_BMSR_10BTHALF 0x0800
#define PHY_BMSR_RSVD1 0x0400
#define PHY_BMSR_RSVD2 0x0200
#define PHY_BMSR_RSVD3 0x0100
#define PHY_BMSR_RSVD4 0x0080
#define PHY_BMSR_MFPRESUP 0x0040
#define PHY_BMSR_AUTONEGCOMP 0x0020
#define PHY_BMSR_REMFAULT 0x0010
#define PHY_BMSR_CANAUTONEG 0x0008
#define PHY_BMSR_LINKSTAT 0x0004
#define PHY_BMSR_JABBER 0x0002
#define PHY_BMSR_EXTENDED 0x0001