📄 uti596.h
字号:
/* uti596.h: Contains the defines and structures used by the uti596 driver *//* * EII: March 11: Created v. 0.0 * * $Id: uti596.h,v 1.3 2000/07/26 21:15:27 joel Exp $ */#ifndef UTI596_H#define UTI596_H#include <rtems/error.h>#include <rtems/rtems_bsdnet.h>#include <sys/param.h>#include <sys/mbuf.h>#include <sys/socket.h>#include <sys/sockio.h>#include <net/if.h>#include <netinet/in.h>#include <netinet/if_ether.h>/* Ethernet statistics */struct enet_statistics{ int rx_packets; /* total packets received */ int tx_packets; /* total packets transmitted */ int rx_errors; /* bad packets received */ int tx_errors; /* packet transmit problems */ int rx_dropped; /* no space in buffers */ int tx_dropped; int tx_retries_exceeded; /* excessive retries */ int multicast; /* multicast packets received */ int collisions; /* detailed rx_errors: */ int rx_length_errors; int rx_over_errors; /* receiver ring buff overflow */ int rx_crc_errors; /* recved pkt with crc error */ int rx_frame_errors; /* recv'd frame alignment error */ int rx_fifo_errors; /* recv'r fifo overrun */ int rx_missed_errors; /* receiver missed packet */ /* detailed tx_errors */ int tx_aborted_errors; int tx_carrier_errors; int tx_fifo_errors; int tx_heartbeat_errors; int tx_window_errors; /* NIC reset errors */ int nic_reset_count; /* The number of times uti596reset() has been called. */};#define CMD_EOL 0x8000 /* The last command of the list, stop. */#define CMD_SUSP 0x4000 /* Suspend after doing cmd. */#define CMD_INTR 0x2000 /* Interrupt after doing cmd. */#define CMD_FLEX 0x0008 /* Enable flexible memory model */#define SCB_STAT_CX 0x8000 /* Cmd completes with 'I' bit set */#define SCB_STAT_FR 0x4000 /* Frame Received */#define SCB_STAT_CNA 0x2000 /* Cmd unit Not Active */#define SCB_STAT_RNR 0x1000 /* Receiver Not Ready */#define SCB_CUS_SUSPENDED 0x0100#define SCB_CUS_ACTIVE 0x0200#define STAT_C 0x8000 /* Set to 1 after execution */#define STAT_B 0x4000 /* 1 : Cmd being executed, 0 : Cmd done. */#define STAT_OK 0x2000 /* 1: Command executed ok 0 : Error */#define STAT_A 0x1000 /* command has been aborted */#define STAT_S11 0x0800#define STAT_S10 0x0400#define STAT_S9 0x0200#define STAT_S8 0x0100#define STAT_S7 0x0080#define STAT_S6 0x0040#define STAT_S5 0x0020#define STAT_MAX_COLLS 0x000F#define RBD_STAT_P 0x4000 /* prefetch */#define RBD_STAT_F 0x4000 /* used */#define CUC_START 0x0100#define CUC_RESUME 0x0200#define CUC_SUSPEND 0x0300#define CUC_ABORT 0x0400#define RX_START 0x0010#define RX_RESUME 0x0020#define RX_SUSPEND 0x0030#define RX_ABORT 0x0040#define RU_SUSPENDED 0x0010#define RU_NO_RESOURCES 0x0020#define RU_READY 0x0040#define I596_NULL ( ( void * ) 0xffffffff)#define UTI_596_END_OF_FRAME 0x8000struct i596_tbd; /* necessary forward declaration */enum commands { CmdNOp = 0, CmdSASetup = 1, CmdConfigure = 2, CmdMulticastList = 3, CmdTx = 4, CmdTDR = 5, CmdDump = 6, CmdDiagnose = 7};/* * 82596 Dump Command Result */typedef volatile struct i596_dump_result { unsigned char bf; unsigned char config_bytes[11]; unsigned char reserved1[2]; unsigned char ia_bytes[6]; unsigned short last_tx_status; unsigned short tx_crc_byte01; unsigned short tx_crc_byte23; unsigned short rx_crc_byte01; unsigned short rx_crc_byte23; unsigned short rx_temp_mem01; unsigned short rx_temp_mem23; unsigned short rx_temp_mem45; unsigned short last_rx_status; unsigned short hash_reg01; unsigned short hash_reg23; unsigned short hash_reg45; unsigned short hash_reg67; unsigned short slot_time_counter; unsigned short wait_time_counter; unsigned short rx_frame_length; unsigned long reserved2; unsigned long cb_in3; unsigned long cb_in2; unsigned long cb_in1; unsigned long la_cb_addr; unsigned long rdb_pointer; unsigned long int_memory; unsigned long rfd_size; unsigned long tbd_pointer; unsigned long base_addr; unsigned long ru_temp_reg; unsigned long tcb_count; unsigned long next_rb_size; unsigned long next_rb_addr; unsigned long curr_rb_size; unsigned long la_rbd_addr; unsigned long next_rbd_addr; unsigned long curr_rbd_addr; unsigned long curr_rb_count; unsigned long next_fd_addr; unsigned long curr_fd_add; unsigned long temp_cu_reg; unsigned long next_tb_count; unsigned long buffer_addr; unsigned long la_tbd_addr; unsigned long next_tbd_addr; unsigned long cb_command; unsigned long next_cb_addr; unsigned long curr_cb_addr; unsigned long scb_cmd_word; unsigned long scb_pointer; unsigned long cb_stat_word; unsigned long mm_lfsr; unsigned char micro_machine_bit_array[28]; unsigned char cu_port[16]; unsigned long mm_alu; unsigned long reserved3; unsigned long mm_temp_a_rr; unsigned long mm_temp_a; unsigned long tx_dma_b_cnt; unsigned long mm_input_port_addr_reg; unsigned long tx_dma_addr; unsigned long mm_port_reg1; unsigned long rx_dma_b_cnt; unsigned long mm_port_reg2; unsigned long rx_dma_addr; unsigned long reserved4; unsigned long bus_t_timers; unsigned long diu_cntrl_reg; unsigned long reserved5; unsigned long sysbus; unsigned long biu_cntrl_reg; unsigned long mm_disp_reg; unsigned long mm_status_reg; unsigned short dump_status;} i596_dump_result;typedef volatile struct i596_selftest { unsigned long rom_signature; unsigned long results;} i596_selftest;/* * Action commands * (big endian, linear mode) */ typedef volatile struct i596_cmd { unsigned short status; unsigned short command; volatile struct i596_cmd *next;} i596_cmd;typedef volatile struct i596_nop { i596_cmd cmd;} i596_nop;typedef volatile struct i596_set_add { i596_cmd cmd; char data[8];} i596_set_add;typedef volatile struct i596_configure { i596_cmd cmd; char data[16];} i596_configure;typedef volatile struct i596_tx { i596_cmd cmd; volatile struct i596_tbd *pTbd; unsigned short count; unsigned short pad; char data[6]; unsigned short length;} i596_tx;typedef volatile struct i596_tdr { i596_cmd cmd; unsigned long data;} i596_tdr;typedef volatile struct i596_dump { i596_cmd cmd; char *pData;} i596_dump;/* * Transmit buffer descriptor */typedef volatile struct i596_tbd { unsigned short size; unsigned short pad; volatile struct i596_tbd *next; char *data; } i596_tbd;/* * Receive buffer descriptor * (flexible memory structure) */typedef volatile struct i596_rbd { unsigned short count; unsigned short offset; volatile struct i596_rbd *next; char *data; unsigned short size; unsigned short pad;} i596_rbd;/* * Receive Frame Descriptor */typedef volatile struct i596_rfd { unsigned short stat; unsigned short cmd; volatile struct i596_rfd *next; i596_rbd *pRbd; unsigned short count; unsigned short size; char data [1532]; } i596_rfd;/* * System Control Block */typedef volatile struct i596_scb { unsigned short status; unsigned short command; unsigned long cmd_pointer; unsigned long rfd_pointer; unsigned long crc_err; unsigned long align_err; unsigned long resource_err; unsigned long over_err; unsigned long rcvdt_err; unsigned long short_err; unsigned short t_off; unsigned short t_on; i596_cmd *pCmd; i596_rfd *pRfd;} i596_scb;/* * Intermediate System Configuration Pointer */typedef volatile struct i596_iscp { unsigned8 null1; /* Always zero */ unsigned8 busy; /* Busy byte */ unsigned short scb_offset; /* Not used in linear mode */ unsigned long scb_pointer; /* Swapped pointer to scb */ i596_scb *scb; /* Real pointer to scb */} i596_iscp;/* * System Configuration Pointer */typedef volatile struct i596_scp { unsigned long sysbus; /* Only low 8 bits are used */ unsigned long pad; /* Must be zero */ unsigned long iscp_pointer; /* Swapped pointer to iscp */ i596_iscp *iscp; /* Real pointer to iscp */} i596_scp;/* * Device Dependent Data Structure */typedef volatile struct uti596_softc { struct arpcom arpcom; i596_scp *pScp; /* Block aligned on 16 byte boundary */ i596_scp *base_scp; /* Unaligned block. Need for free() */ i596_iscp iscp; i596_scb scb; i596_set_add set_add; i596_configure set_conf; i596_tdr tdr; i596_nop nop; i596_tx *pTxCmd; i596_tbd *pTbd; i596_rfd *pBeginRFA; i596_rfd *pEndRFA; i596_rfd *pLastUnkRFD; i596_rbd *pLastUnkRBD; i596_rfd *pEndSavedQueue; i596_cmd *pCmdHead; i596_cmd *pCmdTail; /* unneeded, as chaining not used, but implemented */ rtems_id rxDaemonTid; rtems_id txDaemonTid; rtems_id resetDaemonTid; struct enet_statistics stats; int started; unsigned long rxInterrupts; unsigned long txInterrupts; volatile int cmdOk; unsigned short * pCurrent_command_status; int resetDone; unsigned long txRawWait; i596_rfd *pInboundFrameQueue; short int rxBdCount; short int txBdCount; short int countRFD; short int savedCount; i596_rfd *pSavedRfdQueue; rtems_name semaphore_name; rtems_id semaphore_id; char zeroes[64]; unsigned long rawsndcnt; int nic_reset; /* flag for requesting that ISR issue a reset quest */} uti596_softc_;#endif /* UTI596_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -