📄 ether_test.h
字号:
#define BROADCAST 0 /* disabled */#define CRS 0x80 /* CDT = carrier */#define BYTE15_REQUD 0x48 /* required "1" bits */#define CONFIG_BYTE_15 (PROM_MODE | BROADCAST | CRS | BYTE15_REQUD)/* Byte 16 */#define CONFIG_BYTE_16 (0x00)/* Byte 17 */#define CONFIG_BYTE_17 (0x40)/* Byte 18 */#define STRIPPING_DISABLE 0x00#define STRIPPING_ENABLE 0x01#define PADDING_ENABLE 0x02#define XFER_CRC 0x04 /* store CRC */#define NO_XFER_CRC 0x00#define BYTE18_REQUD 0xf0 /* required "1" bits */#define CONFIG_BYTE_18 (NO_XFER_CRC | PADDING_ENABLE | STRIPPING_ENABLE | BYTE18_REQUD)/* Byte 19 */#define NO_FORCE_FDX 0x00#define FORCE_FDX 0x40#define FDX_PIN_ENAB 0x80#define CONFIG_BYTE_19_10T FORCE_FDX#define CONFIG_BYTE_19_100T NO_FORCE_FDX/* Byte 20 */#define NO_MULTI_IA 0x00#define CONFIG_BYTE_20 (NO_MULTI_IA)/* Byte 21 */#define NO_MULTI_ALL 0x00#define CONFIG_BYTE_21 (NO_MULTI_ALL)#define SCB_S_CUMASK 0x00c0 /* state mask */#define SCB_S_CUIDLE (0x00 << 6) /* CU is idle */#define SCB_S_CUSUSP (0x01 << 6) /* CU is suspended */#define SCB_S_CUACTIVE (0x02 << 6) /* CU is active */#define SCB_S_CURSV1 (0x03 << 6) /* reserved *//* * 82557 structures. NOTE: the 557 is used in 32-bit linear addressing * mode. See alignment restrictions above. *//* Result of PORT* self-test command - MUST be 16 byte aligned! */struct selfTest { UINT32 romSig; /* signature of rom */ union { /* Flag bits - as UINT32 or field */ struct { UINT32 rsrv1 : 2; UINT32 romTest : 1; UINT32 regTest : 1; UINT32 rsrv2 : 1; UINT32 diagnTest : 1; UINT32 rsrv3 : 6; UINT32 selfTest : 1; UINT32 rsrv4 : 19; } bits; UINT32 word2; } u;};/* MDI Control Register */typedef union{ struct { UINT32 data : 16; /* data to write or data read */ UINT32 regAdd : 5; /* PHY register address */ UINT32 phyAdd : 5; /* PHY address */ UINT32 op : 2; /* opcode, 1 for MDI write, 2 for MDI read */ UINT32 ready : 1; /* 1 = operation complete */ UINT32 intEnab : 1; /* 1 = interrupt at end of cycle */ UINT32 rsrv : 2; /* reserved */ } bits; UINT32 word;} MDI_CONTROL_U;/* Command/Status Word of SCB */typedef union{ struct { UINT32 rsrv1 : 2; /* Reserved */ UINT32 rus : 4; /* Receive unit status */ UINT32 cus : 2; /* Command unit status */ UINT32 rsrv2 : 2; /* Reserved */ UINT32 statack_swi : 1; /* Software generated int. */ UINT32 statack_mdi : 1; /* MDI read/write complete */ UINT32 statack_rnr : 1; /* RU not ready */ UINT32 statack_cna : 1; /* CU not active */ UINT32 statack_fr : 1; /* Frame reception done */ UINT32 statack_cx_tno : 1; /* Cmd exec completed */ UINT32 ruc : 3; /* Receive unit command */ UINT32 rsrv3 : 1; /* Reserved */ UINT32 cuc : 3; /* Command unit command */ UINT32 rsrv4 : 1; /* Reserved */ UINT32 m : 1; /* Interrupt mask bit */ UINT32 si : 1; /* Software generated int. */ UINT32 rsrv5 : 6; /* Reserved */ } bits; struct { UINT16 status; UINT16 command; } words;} CMD_STAT_U;/* System command block - on chip for the 82557 */struct SCBtype { CMD_STAT_U cmdStat; UINT32 scb_general_ptr; /* SCB General Pointer */};/* Command blocks - declared as a union; some commands have different fields */union cmdBlock { /* No operation */ struct { UINT32 rsrv1 : 13; /* reserved bits (set to 0) */ UINT32 ok : 1; /* 1 = command completed, no error */ UINT32 rsrv2 : 1; /* reserved bits (set to 0) */ UINT32 c : 1; /* 1 = command completed */ UINT32 code : 3; /* command code (0 = NOP) */ UINT32 rsrv3 : 10; /* reserved bits (set to 0) */ UINT32 i : 1; /* 1 = interrupt upon completion */ UINT32 s : 1; /* 1 = suspend CU upon completion */ UINT32 el : 1; /* 1 = last cmdBlock in list */ union cmdBlock *link; /* next block in list */ } nop; /* Individual address setup */ struct { UINT32 rsrv1 : 13; /* reserved bits (set to 0) */ UINT32 ok : 1; /* 1 = command completed, no error */ UINT32 rsrv2 : 1; /* reserved bits (set to 0) */ UINT32 c : 1; /* 1 = command completed */ UINT32 code : 3; /* command code (1 = ia setup) */ UINT32 rsrv3 : 10; /* reserved bits (set to 0) */ UINT32 i : 1; /* 1 = interrupt upon completion */ UINT32 s : 1; /* 1 = suspend CU upon completion */ UINT32 el : 1; /* 1 = last cmdBlock in list */ union cmdBlock *link; /* next block in list */ UINT8 enetAddr[6]; /* hardware ethernet address */ UINT16 rsrv4; /* padding */ } iaSetup; /* Configure */ struct { UINT32 rsrv1 : 13; /* reserved bits (set to 0) */ UINT32 ok : 1; /* 1 = command completed, no error */ UINT32 rsrv2 : 1; /* reserved bits (set to 0) */ UINT32 c : 1; /* 1 = command completed */ UINT32 code : 3; /* command code (2 = configure) */ UINT32 rsrv3 : 10; /* reserved bits (set to 0) */ UINT32 i : 1; /* 1 = interrupt upon completion */ UINT32 s : 1; /* 1 = suspend CU upon completion */ UINT32 el : 1; /* 1 = last cmdBlock in list */ union cmdBlock *link; /* next block in list */ UINT8 configData[20]; /* configuration data */ } configure; /* Multicast address setup */ struct { UINT32 rsrv1 : 13; /* reserved bits (set to 0) */ UINT32 ok : 1; /* 1 = command completed, no error */ UINT32 rsrv2 : 1; /* reserved bits (set to 0) */ UINT32 c : 1; /* 1 = command completed */ UINT32 code : 3; /* command code (3 = mc setup) */ UINT32 rsrv3 : 10; /* reserved bits (set to 0) */ UINT32 i : 1; /* 1 = interrupt upon completion */ UINT32 s : 1; /* 1 = suspend CU upon completion */ UINT32 el : 1; /* 1 = last cmdBlock in list */ union cmdBlock *link; /* next block in list */ UINT16 mcCount; /* # of bytes in mcAddrList[] */ UINT8 mcAddrList[6]; /* list of multicast addresses */ } mcSetup; /* Transmit */ struct { UINT32 rsrv1 : 12; /* reserved bits (set to 0) */ UINT32 u : 1; /* 1 = underrun was encountered */ UINT32 ok : 1; /* 1 = command completed, no error */ UINT32 rsrv2 : 1; /* reserved bits (set to 0) */ UINT32 c : 1; /* 1 = command completed */ UINT32 code : 3; /* command code (4 = transmit) */ UINT32 sf : 1; /* 1 = flexible mode */ UINT32 rsrv3 : 9; /* reserved bits (set to 0) */ UINT32 i : 1; /* 1 = interrupt upon completion */ UINT32 s : 1; /* 1 = suspend CU upon completion */ UINT32 el : 1; /* 1 = last cmdBlock in list */ union cmdBlock *link; /* next block in list */ UINT8 *tbdAddr; /* tx buf addr; all 1s for simp mode */ UINT32 tcbCount : 14; /* # bytes to be tx from cmd block */ UINT32 rsrv4 : 1; /* reserved (set to 0) */ UINT32 eof : 1; /* 1 = entire frame in cmd block */ UINT8 tx_threshold; /* # of bytes in FIFO before xmission */ UINT8 tbd_number; /* # of tx. buffers in TBD array */ UINT8 destAddr[6]; /* destination hardware address */ UINT16 length; /* 802.3 packet length (from packet) */ UINT8 txData[ETHERMTU]; /* optional data to tx */ } transmit; /* Dump 82557 registers */ struct { UINT32 rsrv1 : 13; /* reserved bits (set to 0) */ UINT32 ok : 1; /* 1 = command completed, no error */ UINT32 rsrv2 : 1; /* reserved bits (set to 0) */ UINT32 c : 1; /* 1 = command completed */ UINT32 code : 3; /* command code (6 = dump) */ UINT32 rsrv3 : 10; /* reserved bits (set to 0) */ UINT32 i : 1; /* 1 = interrupt upon completion */ UINT32 s : 1; /* 1 = suspend CU upon completion */ UINT32 el : 1; /* 1 = last cmdBlock in list */ union cmdBlock *link; /* next block in list */ UINT8 *bufAddr; /* where to dump registers */ } dump; /* Diagnose - perform self test */ struct { UINT32 rsrv1 : 11; /* reserved bits (set to 0) */ UINT32 f : 1; /* 1 = self test failed */ UINT32 rsrv2 : 1; /* reserved bits (set to 0) */ UINT32 ok : 1; /* 1 = command completed, no error */ UINT32 rsrv3 : 1; /* reserved bits (set to 0) */ UINT32 c : 1; /* 1 = command completed */ UINT32 code : 3; /* command code (7 = diagnose) */ UINT32 rsrv4 : 10; /* reserved bits (set to 0) */ UINT32 i : 1; /* 1 = interrupt upon completion */ UINT32 s : 1; /* 1 = suspend CU upon completion */ UINT32 el : 1; /* 1 = last cmdBlock in list */ union cmdBlock *link; /* next block in list */ } diagnose;};/* Receive frame descriptors (uses simplified memory structure) */struct rfd { UINT32 rxColl : 1; /* 1 = collision on reception */ UINT32 iaMatch : 1; /* Dest addr matched chip's hardware addr */ UINT32 rsrv1 : 2; /* reserved bits (set to 0) */ UINT32 rxErr : 1; /* RX_ER pin asserted during frame reception */ UINT32 typeFrame : 1; /* Type field of pkt. indicates a TYPE frame */ UINT32 rsrv2 : 1; /* reserved bits (set to 0) */ UINT32 frameTooshort : 1; UINT32 dmaOverrun : 1; /* DMA overrun (couldn't get local bus) */ UINT32 noRsrc : 1; /* No resources (out of buffer space) */ UINT32 alignErr : 1; /* CRC error on misaligned frame */ UINT32 crcErr : 1; /* CRC error on aligned frame */ UINT32 rsrv3 : 1; /* reserved bits (set to 0) */ UINT32 ok : 1; /* 1 = command completed, no error */ UINT32 rsrv4 : 1; /* reserved bits (set to 0) */ UINT32 c : 1; /* 1 = command completed */ UINT32 rsrv5 : 3; /* reserved bits (set to 0) */ UINT32 sf : 1; /* 1 = Flexible mode */ UINT32 h : 1; /* 1 = Header RFD */ UINT32 rsrv6 : 9; /* reserved bits (set to 0) */ UINT32 s : 1; /* 1 = suspend CU upon completion */ UINT32 el : 1; /* 1 = last cmdBlock in list */ union cmdBlock *link; /* next block in list */ UINT8 *rbdAddr; /* rx buf desc addr; all 1s for simple mode */ UINT32 actCount : 14; /* # bytes in this buffer (set by 82557) */ UINT32 f : 1; /* 1 = buffer used */ UINT32 eof : 1; /* 1 = last buffer for this frame */ UINT32 size : 14; /* # bytes avail in this buffer (set by CPU) */ UINT32 rsrv7 : 2; /* reserved bits (set to 0) */ UINT8 destAddr[6]; /* destination address */ UINT8 sourceAddr[6]; /* source address */ UINT16 length; /* 802.3 packet length (from packet) */ UINT8 rxData[ETHERMTU]; /* optional data (simplified mode) */};/* Forward declarations */static void portWrite ();static void resetChip ();static void makePacket ();static int checkPacket ();static int i557IntHandler (int);static int waitForInt();static void sendCommand (UINT8 cuc, UINT8 ruc, UINT32 scb_general_ptr);static UINT16 readMDI ( int unit, UINT8 phyAdd, UINT8 regAdd );static void writeMDI ( int unit, UINT8 phyAdd, UINT8 regAdd, UINT16 data );static int initPHY (UINT32 device_type, int loop_mode);static int get_ether_addr ( int unit, UINT8 *buffer, int print_flag /* TRUE to print the information */ );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -