diff options
Diffstat (limited to 'drivers/net/dgrs_ether.h')
-rw-r--r-- | drivers/net/dgrs_ether.h | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/drivers/net/dgrs_ether.h b/drivers/net/dgrs_ether.h new file mode 100644 index 00000000000..51596ce6cf8 --- /dev/null +++ b/drivers/net/dgrs_ether.h @@ -0,0 +1,135 @@ +/* + * A filtering function. There are two filters/port. Filter "0" + * is the input filter, and filter "1" is the output filter. + */ +typedef int (FILTER_FUNC)(uchar *pktp, int pktlen, ulong *scratch, int port); +#define NFILTERS 2 + +/* + * The per port structure + */ +typedef struct +{ + int chan; /* Channel number (0-3) */ + ulong portaddr; /* address of 596 port register */ + volatile ulong *ca; /* address of 596 chan attention */ + ulong intmask; /* Interrupt mask for this port */ + ulong intack; /* Ack bit for this port */ + + uchar ethaddr[6]; /* Ethernet address of this port */ + int is_promisc; /* Port is promiscuous */ + + int debug; /* Debugging turned on */ + + I596_ISCP *iscpp; /* Uncached ISCP pointer */ + I596_SCP *scpp; /* Uncached SCP pointer */ + I596_SCB *scbp; /* Uncached SCB pointer */ + + I596_ISCP iscp; + I596_SCB scb; + + /* Command Queue */ + I596_CB *cb0; + I596_CB *cbN; + I596_CB *cb_head; + I596_CB *cb_tail; + + /* Receive Queue */ + I596_RFD *rfd0; + I596_RFD *rfdN; + I596_RFD *rfd_head; + I596_RFD *rfd_tail; + + /* Receive Buffers */ + I596_RBD *rbd0; + I596_RBD *rbdN; + I596_RBD *rbd_head; + I596_RBD *rbd_tail; + int buf_size; /* Size of an RBD buffer */ + int buf_cnt; /* Total RBD's allocated */ + + /* Rx Statistics */ + ulong cnt_rx_cnt; /* Total packets rcvd, good and bad */ + ulong cnt_rx_good; /* Total good packets rcvd */ + ulong cnt_rx_bad; /* Total of all bad packets rcvd */ + /* Subtotals can be gotten from SCB */ + ulong cnt_rx_nores; /* No resources */ + ulong cnt_rx_bytes; /* Total bytes rcvd */ + + /* Tx Statistics */ + ulong cnt_tx_queued; + ulong cnt_tx_done; + ulong cnt_tx_freed; + ulong cnt_tx_nores; /* No resources */ + + ulong cnt_tx_bad; + ulong cnt_tx_err_late; + ulong cnt_tx_err_nocrs; + ulong cnt_tx_err_nocts; + ulong cnt_tx_err_under; + ulong cnt_tx_err_maxcol; + ulong cnt_tx_collisions; + + /* Special stuff for host */ +# define rfd_freed cnt_rx_cnt + ulong rbd_freed; + int host_timer; + + /* Added after first beta */ + ulong cnt_tx_races; /* Counts race conditions */ + int spanstate; + ulong cnt_st_tx; /* send span tree pkts */ + ulong cnt_st_fail_tx; /* Failures to send span tree pkts */ + ulong cnt_st_fail_rbd;/* Failures to send span tree pkts */ + ulong cnt_st_rx; /* rcv span tree pkts */ + ulong cnt_st_rx_bad; /* bogus st packets rcvd */ + ulong cnt_rx_fwd; /* Rcvd packets that were forwarded */ + + ulong cnt_rx_mcast; /* Multicast pkts received */ + ulong cnt_tx_mcast; /* Multicast pkts transmitted */ + ulong cnt_tx_bytes; /* Bytes transmitted */ + + /* + * Packet filtering + * Filter 0: input filter + * Filter 1: output filter + */ + + ulong *filter_space[NFILTERS]; + FILTER_FUNC *filter_func[NFILTERS]; + ulong filter_cnt[NFILTERS]; + ulong filter_len[NFILTERS]; + + ulong pad[ (512-300) / 4]; +} PORT; + +/* + * Port[0] is host interface + * Port[1..SE_NPORTS] are external 10 Base T ports. Fewer may be in + * use, depending on whether this is an SE-4 or + * an SE-6. + * Port[SE_NPORTS] Pseudo-port for Spanning tree and SNMP + */ +extern PORT Port[1+SE_NPORTS+1]; + +extern int Nports; /* Number of genuine ethernet controllers */ +extern int Nchan; /* ... plus one for host interface */ + +extern int FirstChan; /* 0 or 1, depedning on whether host is used */ +extern int NumChan; /* 4 or 5 */ + +/* + * A few globals + */ +extern int IsPromisc; +extern int MultiNicMode; + +/* + * Functions + */ +extern void eth_xmit_spew_on(PORT *p, int cnt); +extern void eth_xmit_spew_off(PORT *p); + +extern I596_RBD *alloc_rbds(PORT *p, int num); + +extern I596_CB * eth_cb_alloc(PORT *p); |