📄 uti596.h
字号:
/* uti596.h: Contains the defines and structures used by the uti596 driver *//* * EII: March 11: Created v. 0.0 * Jan 12/98 Added STAT bits, s11-=s5 and max_colls. * * $Id: uti596.h,v 1.2 1999/01/20 18:55:50 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. */};enum commands { CmdNOp = 0, CmdSASetup = 1, CmdConfigure = 2, CmdMulticastList = 3, CmdTx = 4, CmdTDR = 5, CmdDump = 6, CmdDiagnose = 7};#define UTI596_MUTEX 1#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 IO_ADDR 0x360#define PORT_ADDR IO_ADDR#define CHAN_ATTN PORT_ADDR + 4#define NIC_ADDR PORT_ADDR + 8struct i596_cmd { volatile unsigned short status; volatile unsigned short command; struct i596_cmd *next;};#define I596_NULL ( ( void * ) 0xffffffff)#define UTI_596_END_OF_FRAME 0x8000#define SIZE_MASK 0x3fff/* * Transmit buffer Descriptor */struct i596_tbd { unsigned short size; unsigned short pad; struct i596_tbd *next; char *data; };/* * Receive buffer Descriptor */struct i596_rbd { unsigned short count; unsigned short offset; struct i596_rbd *next; char *data; unsigned short size; unsigned short pad;};/* * Transmit Command Structure */struct tx_cmd { struct i596_cmd cmd; struct i596_tbd *pTbd; unsigned short size; unsigned short pad;} ;/* * Receive Frame Descriptor */struct i596_rfd { volatile unsigned short stat; volatile unsigned short cmd; struct i596_rfd *next; struct i596_rbd *pRbd; unsigned short count; unsigned short size; char data [1532 ]; } ;struct i596_dump { struct i596_cmd cmd; char * pData;};struct i596_set_add { struct i596_cmd cmd; char data[8];};struct i596_configure { struct i596_cmd cmd; char data[16];};struct i596_nop { struct i596_cmd cmd;};struct i596_tdr { struct i596_cmd cmd; unsigned int data;};#define RX_RING_SIZE 8/* * System Control Block */struct i596_scb { volatile unsigned short status; volatile unsigned short command; struct i596_cmd *pCmd; struct i596_rfd *pRfd; volatile unsigned long crc_err; volatile unsigned long align_err; volatile unsigned long resource_err; volatile unsigned long over_err; volatile unsigned long rcvdt_err; volatile unsigned long short_err; volatile unsigned short t_on; volatile unsigned short t_off;};/* * Intermediate System Control Block */struct i596_iscp { volatile unsigned long stat; struct i596_scb *scb;} ;/* * System Control Parameters */struct i596_scp { unsigned long sysbus; unsigned long pad; struct i596_iscp *iscp;} ;struct uti596_softc { struct arpcom arpcom; rtems_irq_connect_data irqInfo; struct i596_scp *pScp; struct i596_iscp iscp; struct i596_scb scb; struct i596_set_add set_add; struct i596_configure set_conf; struct i596_tdr tdr; struct i596_nop nop; unsigned long stat; struct tx_cmd *pTxCmd; struct i596_tbd *pTbd; int ioAddr; struct i596_rfd *pBeginRFA; struct i596_rfd *pEndRFA; struct i596_rfd *pLastUnkRFD; struct i596_rbd *pLastUnkRBD; struct i596_rfd *pEndSavedQueue; struct i596_cmd *pCmdHead; struct 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; int resetDone; unsigned long txRawWait; struct i596_rfd *pInboundFrameQueue; short int rxBdCount; short int txBdCount; short int countRFD; short int savedCount; struct i596_rfd *pSavedRfdQueue; rtems_name semaphore_name; rtems_id semaphore_id; char zeroes[64]; unsigned long rawsndcnt; int nic_reset; /* flag is for requesting that ISR issue a reset quest */} ;#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -