📄 sonic.h
字号:
/************************************************************* * File: include/sonic.h * Purpose: Constant definitions for National Sonic Ethernet Chip * Author: Phil Bunce (pjb@carmel.com) * Revision History: * 960924 Added DW32 to support the SDP1000 board */#define SONIC_CR (*(SONIC_BASE+0))#define SONIC_DCR (*(SONIC_BASE+2))#define SONIC_RCR (*(SONIC_BASE+4))#define SONIC_TCR (*(SONIC_BASE+6))#define SONIC_IMR (*(SONIC_BASE+8))#define SONIC_ISR (*(SONIC_BASE+10))#define SONIC_UTDA (*(SONIC_BASE+12))#define SONIC_CTDA (*(SONIC_BASE+14))#define SONIC_TPS (*(SONIC_BASE+16))#define SONIC_TFC (*(SONIC_BASE+18))#define SONIC_TSA0 (*(SONIC_BASE+20))#define SONIC_TSA1 (*(SONIC_BASE+22))#define SONIC_TFS (*(SONIC_BASE+24))#define SONIC_URDA (*(SONIC_BASE+26))#define SONIC_CRDA (*(SONIC_BASE+28))#define SONIC_CRBA0 (*(SONIC_BASE+30))#define SONIC_CRBA1 (*(SONIC_BASE+32))#define SONIC_RBWC0 (*(SONIC_BASE+34))#define SONIC_RBWC1 (*(SONIC_BASE+36))#define SONIC_EOBC (*(SONIC_BASE+38))#define SONIC_URRA (*(SONIC_BASE+40))#define SONIC_RSA (*(SONIC_BASE+42))#define SONIC_REA (*(SONIC_BASE+44))#define SONIC_RRP (*(SONIC_BASE+46)) #define SONIC_RWP (*(SONIC_BASE+48))#define SONIC_TRBA0 (*(SONIC_BASE+50))#define SONIC_TRBA1 (*(SONIC_BASE+52))#define SONIC_TBWC0 (*(SONIC_BASE+54))#define SONIC_TBWC1 (*(SONIC_BASE+56))#define SONIC_ADDR0 (*(SONIC_BASE+58))#define SONIC_ADDR1 (*(SONIC_BASE+60))#define SONIC_LLFA (*(SONIC_BASE+62))#define SONIC_TTDA (*(SONIC_BASE+64))#define SONIC_CEP (*(SONIC_BASE+66))#define SONIC_CAP2 (*(SONIC_BASE+68))#define SONIC_CAP1 (*(SONIC_BASE+70))#define SONIC_CAP0 (*(SONIC_BASE+72))#define SONIC_CE (*(SONIC_BASE+74))#define SONIC_CDP (*(SONIC_BASE+76))#define SONIC_CDC (*(SONIC_BASE+78))#define SONIC_SR (*(SONIC_BASE+80))#define SONIC_WT0 (*(SONIC_BASE+82))#define SONIC_WT1 (*(SONIC_BASE+84))#define SONIC_RSC (*(SONIC_BASE+86))#define SONIC_CRCT (*(SONIC_BASE+88))#define SONIC_FAET (*(SONIC_BASE+90))#define SONIC_MPT (*(SONIC_BASE+92))#define SONIC_MDT (*(SONIC_BASE+94))/* isr */#define ISR_BR (1<<14)#define ISR_HBL (1<<13)#define ISR_LCD (1<<12)#define ISR_PINT (1<<11)#define ISR_PKTRX (1<<10)#define ISR_TXDN (1<<9)#define ISR_TXER (1<<8)#define ISR_TC (1<<7)#define ISR_RDE (1<<6)#define ISR_RBE (1<<5)#define ISR_RBAE (1<<4)#define ISR_CRC (1<<3)#define ISR_FAE (1<<2)#define ISR_MP (1<<1)#define ISR_RFO (1<<0)/* cr */#define CR_LCAM (1<<9)#define CR_RRRA (1<<8)#define CR_RST (1<<7)#define CR_ST (1<<5)#define CR_STP (1<<4)#define CR_RXEN (1<<3)#define CR_RXDIS (1<<2)#define CR_TXP (1<<1)#define CR_HTX (1<<0)/* rcr */#define RCR_ERR (1<<15)#define RCR_RNT (1<<14)#define RCR_BRD (1<<13)#define RCR_PRO (1<<12)#define RCR_AMC (1<<11)#define RCR_MAC (1<<9) /* MAC loopback */#define RCR_ENDEC (2<<9) /* ENDEC loopback */#define RCR_TXCVR (3<<9) /* Transceiver loopback */#define RCR_MC (1<<8)#define RCR_BC (1<<7)#define RCR_LPKT (1<<6)#define RCR_CRS (1<<5)#define RCR_COL (1<<4)#define RCR_CRC (1<<3)#define RCR_FAE (1<<2)#define RCR_LBK (1<<1)#define RCR_PRX (1<<0)/* tcr */#define TCR_PTX (1<<0)/* dcr */#define DCR_PO1 (1<<12)#define DCR_PO0 (1<<11)#define DCR_STERM (1<<10)#define DCR_WAIT0 (0<<6)#define DCR_WAIT1 (1<<6)#define DCR_WAIT2 (2<<6)#define DCR_WAIT3 (3<<6)#define DCR_DW32 (1<<5)#define DCR_TFT1 (1<<1)#define DCR_TFT0 (1<<0)/* imr */#define IMR_BREN (1<<14)#define IMR_HBLEN (1<<13)#define IMR_LCDEN (1<<12)#define IMR_PINTEN (1<<11)#define IMR_PRXEN (1<<10)#define IMR_PTXEN (1<<9)#define IMR_TXEREN (1<<8)#define IMR_TCEN (1<<7)#define IMR_RDEEN (1<<6)#define IMR_RBEEN (1<<5)#define IMR_RBAEEN (1<<4)#define IMR_CRCEN (1<<3)#define IMR_FAEEN (1<<2)#define IMR_MPEN (1<<1)#define IMR_RFOEN (1<<0)/*************** transmit descriptors **************************/#ifdef SONIC_DW32#ifdef MIPSEBtypedef struct TXrec { Ushort d1; Ushort status; Ushort d2; Ushort config; Ushort d3; Ushort pkt_size; Ushort d4; Ushort frag_count; Ushort d5; Ushort ptr0; Ushort d6; Ushort ptr1; Ushort d7; Ushort frag_size; Ushort d8; Ushort link; } TXrec;#elsetypedef struct TXrec { Ushort status; Ushort d1; Ushort config; Ushort d2; Ushort pkt_size; Ushort d3; Ushort frag_count; Ushort d4; Ushort ptr0; Ushort d5; Ushort ptr1; Ushort d6; Ushort frag_size; Ushort d7; Ushort link; Ushort d8; } TXrec;#endif#elsetypedef struct TXrec { Ushort status; Ushort config; Ushort pkt_size; Ushort frag_count; Ushort ptr0; Ushort ptr1; Ushort frag_size; Ushort link; } TXrec;#endif#define k1TXrec(p) ((TXrec *)k02k1(p))#define getTXptr(p) ((char *)phy2k1(((k1TXrec(p)->ptr1<<16)| \ k1TXrec(p)->ptr0)))#define putTXptr(p,q) (k1TXrec(p)->ptr1=gethi(log2phy(q)), \ k1TXrec(p)->ptr0=getlo(log2phy(q)) )#define getTXlink(p) ((TXrec *)phy2k1(((SONIC_UTDA<<16)| \ (k1TXrec(p)->link&~1))))#define putTXlink(p,q,f) (k1TXrec(p)->link=(getlo(log2phy(q))|f))#define getCTDA() ((TXrec *)phy2k1((SONIC_UTDA<<16)|(SONIC_CTDA&~1)))#define putCTDA(p) (SONIC_UTDA=gethi(log2phy(p)), \ SONIC_CTDA=getlo(log2phy(p)))/*************** receive descriptors **************************/#ifdef SONIC_DW32#ifdef MIPSEBtypedef struct RXrec { /* Receive descriptor */ Ushort d1; Ushort status; Ushort d2; Ushort byte_count; Ushort d3; Ushort ptr0; /* ls half off addr */ Ushort d4; Ushort ptr1; /* ms half off addr */ Ushort d5; Ushort seq_no; Ushort d6; Ushort link; /* lsb = 1 = End of List */ Ushort d7; Ushort in_use; /* 0=full 0xffff=empty */ } RXrec;#elsetypedef struct RXrec { /* Receive descriptor */ Ushort status; Ushort d1; Ushort byte_count; Ushort d2; Ushort ptr0; /* ls half off addr */ Ushort d3; Ushort ptr1; /* ms half off addr */ Ushort d4; Ushort seq_no; Ushort d5; Ushort link; /* lsb = 1 = End of List */ Ushort d6; Ushort in_use; /* 0=full 0xffff=empty */ Ushort d7; } RXrec;#endif#elsetypedef struct RXrec { /* Receive descriptor */ Ushort status; Ushort byte_count; Ushort ptr0; /* ls half off addr */ Ushort ptr1; /* ms half off addr */ Ushort seq_no; Ushort link; /* lsb = 1 = End of List */ Ushort in_use; /* 0=full 0xffff=empty */ } RXrec;#endif#define k1RXrec(p) ((RXrec *)k02k1(p))#define EMPTY 0xffff /* in_use=empty, avail for use by SONIC */#define FULL 0 /* in_use=full, ready for processing */#define getRXptr(p) ((struct ether_header *) \ phy2k1(((k1RXrec(p)->ptr1<<16)| \ k1RXrec(p)->ptr0)))#define getRXlink(p) ((RXrec *)phy2k1(((SONIC_URDA<<16)|k1RXrec(p)->link)))#define putRXlink(p,q) (k1RXrec(p)->link=getlo(log2phy(q)))#define EOL 0x0001#define LPKT (1<<6) /* status bit */#define getCRDA() ((RXrec *)phy2k1((SONIC_URDA<<16)|(SONIC_CRDA)))#define putCRDA(p) (SONIC_URDA=gethi(log2phy(p)), \ SONIC_CRDA=getlo(log2phy(p)))#define getRXpseq(p) ((k1RXrec(p)->seq_no) & 0xff)#define getRXrseq(p) ((k1RXrec(p)->seq_no)>>8)/*************** receive resources **************************/#ifdef SONIC_DW32#ifdef MIPSEBtypedef struct RRrec { /* Receive Resource */ Ushort d1; Ushort ptr0; Ushort d2; Ushort ptr1; Ushort d3; Ushort wc0; Ushort d4; Ushort wc1; } RRrec;#elsetypedef struct RRrec { /* Receive Resource */ Ushort ptr0; Ushort d1; Ushort ptr1; Ushort d2; Ushort wc0; Ushort d3; Ushort wc1; Ushort d4; } RRrec;#endif#elsetypedef struct RRrec { /* Receive Resource */ Ushort ptr0; Ushort ptr1; Ushort wc0; Ushort wc1; } RRrec;#endif#define k1RRrec(p) ((RRrec *)k02k1(p))#define putRRptr(p,q) (k1RRrec(p)->ptr1 = gethi(log2phy(q)), \ k1RRrec(p)->ptr0 = getlo(log2phy(q)) )#define getRRptr(p) ((char *)phy2k1(((k1RRrec(p)->ptr1<<16)|(p)->ptr0)))#define putRRwc(p,n) (k1RRrec(p)->wc1 = (((Ulong)(n))>>17), \ k1RRrec(p)->wc0 = ((((Ushort)(n))>>1) & 0xffff) )#define getRSA() ((RRrec *)phy2k1((SONIC_URRA<<16)|(SONIC_RSA)))#define getREA() ((RRrec *)phy2k1((SONIC_URRA<<16)|(SONIC_REA)))#define getRWP() ((RRrec *)phy2k1((SONIC_URRA<<16)|(SONIC_RWP)))#define getRRP() ((RRrec *)phy2k1((SONIC_URRA<<16)|(SONIC_RRP)))#define putRSA(p) (SONIC_URRA=gethi(log2phy(p)), \ SONIC_RSA=getlo(log2phy(p)))#define putREA(p) (SONIC_URRA=gethi(log2phy(p)), \ SONIC_REA=getlo(log2phy(p)))#define putRWP(p) (SONIC_URRA=gethi(log2phy(p)), \ SONIC_RWP=getlo(log2phy(p)))#define putRRP(p) (SONIC_URRA=gethi(log2phy(p)), \ SONIC_RRP=getlo(log2phy(p)))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -