Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * A filtering function. There are two filters/port. Filter "0" | |
3 | * is the input filter, and filter "1" is the output filter. | |
4 | */ | |
5 | typedef int (FILTER_FUNC)(uchar *pktp, int pktlen, ulong *scratch, int port); | |
6 | #define NFILTERS 2 | |
7 | ||
8 | /* | |
9 | * The per port structure | |
10 | */ | |
11 | typedef struct | |
12 | { | |
13 | int chan; /* Channel number (0-3) */ | |
14 | ulong portaddr; /* address of 596 port register */ | |
15 | volatile ulong *ca; /* address of 596 chan attention */ | |
16 | ulong intmask; /* Interrupt mask for this port */ | |
17 | ulong intack; /* Ack bit for this port */ | |
18 | ||
19 | uchar ethaddr[6]; /* Ethernet address of this port */ | |
20 | int is_promisc; /* Port is promiscuous */ | |
21 | ||
22 | int debug; /* Debugging turned on */ | |
23 | ||
24 | I596_ISCP *iscpp; /* Uncached ISCP pointer */ | |
25 | I596_SCP *scpp; /* Uncached SCP pointer */ | |
26 | I596_SCB *scbp; /* Uncached SCB pointer */ | |
27 | ||
28 | I596_ISCP iscp; | |
29 | I596_SCB scb; | |
30 | ||
31 | /* Command Queue */ | |
32 | I596_CB *cb0; | |
33 | I596_CB *cbN; | |
34 | I596_CB *cb_head; | |
35 | I596_CB *cb_tail; | |
36 | ||
37 | /* Receive Queue */ | |
38 | I596_RFD *rfd0; | |
39 | I596_RFD *rfdN; | |
40 | I596_RFD *rfd_head; | |
41 | I596_RFD *rfd_tail; | |
42 | ||
43 | /* Receive Buffers */ | |
44 | I596_RBD *rbd0; | |
45 | I596_RBD *rbdN; | |
46 | I596_RBD *rbd_head; | |
47 | I596_RBD *rbd_tail; | |
48 | int buf_size; /* Size of an RBD buffer */ | |
49 | int buf_cnt; /* Total RBD's allocated */ | |
50 | ||
51 | /* Rx Statistics */ | |
52 | ulong cnt_rx_cnt; /* Total packets rcvd, good and bad */ | |
53 | ulong cnt_rx_good; /* Total good packets rcvd */ | |
54 | ulong cnt_rx_bad; /* Total of all bad packets rcvd */ | |
55 | /* Subtotals can be gotten from SCB */ | |
56 | ulong cnt_rx_nores; /* No resources */ | |
57 | ulong cnt_rx_bytes; /* Total bytes rcvd */ | |
58 | ||
59 | /* Tx Statistics */ | |
60 | ulong cnt_tx_queued; | |
61 | ulong cnt_tx_done; | |
62 | ulong cnt_tx_freed; | |
63 | ulong cnt_tx_nores; /* No resources */ | |
64 | ||
65 | ulong cnt_tx_bad; | |
66 | ulong cnt_tx_err_late; | |
67 | ulong cnt_tx_err_nocrs; | |
68 | ulong cnt_tx_err_nocts; | |
69 | ulong cnt_tx_err_under; | |
70 | ulong cnt_tx_err_maxcol; | |
71 | ulong cnt_tx_collisions; | |
72 | ||
73 | /* Special stuff for host */ | |
74 | # define rfd_freed cnt_rx_cnt | |
75 | ulong rbd_freed; | |
76 | int host_timer; | |
77 | ||
78 | /* Added after first beta */ | |
79 | ulong cnt_tx_races; /* Counts race conditions */ | |
80 | int spanstate; | |
81 | ulong cnt_st_tx; /* send span tree pkts */ | |
82 | ulong cnt_st_fail_tx; /* Failures to send span tree pkts */ | |
83 | ulong cnt_st_fail_rbd;/* Failures to send span tree pkts */ | |
84 | ulong cnt_st_rx; /* rcv span tree pkts */ | |
85 | ulong cnt_st_rx_bad; /* bogus st packets rcvd */ | |
86 | ulong cnt_rx_fwd; /* Rcvd packets that were forwarded */ | |
87 | ||
88 | ulong cnt_rx_mcast; /* Multicast pkts received */ | |
89 | ulong cnt_tx_mcast; /* Multicast pkts transmitted */ | |
90 | ulong cnt_tx_bytes; /* Bytes transmitted */ | |
91 | ||
92 | /* | |
93 | * Packet filtering | |
94 | * Filter 0: input filter | |
95 | * Filter 1: output filter | |
96 | */ | |
97 | ||
98 | ulong *filter_space[NFILTERS]; | |
99 | FILTER_FUNC *filter_func[NFILTERS]; | |
100 | ulong filter_cnt[NFILTERS]; | |
101 | ulong filter_len[NFILTERS]; | |
102 | ||
103 | ulong pad[ (512-300) / 4]; | |
104 | } PORT; | |
105 | ||
106 | /* | |
107 | * Port[0] is host interface | |
108 | * Port[1..SE_NPORTS] are external 10 Base T ports. Fewer may be in | |
109 | * use, depending on whether this is an SE-4 or | |
110 | * an SE-6. | |
111 | * Port[SE_NPORTS] Pseudo-port for Spanning tree and SNMP | |
112 | */ | |
113 | extern PORT Port[1+SE_NPORTS+1]; | |
114 | ||
115 | extern int Nports; /* Number of genuine ethernet controllers */ | |
116 | extern int Nchan; /* ... plus one for host interface */ | |
117 | ||
118 | extern int FirstChan; /* 0 or 1, depedning on whether host is used */ | |
119 | extern int NumChan; /* 4 or 5 */ | |
120 | ||
121 | /* | |
122 | * A few globals | |
123 | */ | |
124 | extern int IsPromisc; | |
125 | extern int MultiNicMode; | |
126 | ||
127 | /* | |
128 | * Functions | |
129 | */ | |
130 | extern void eth_xmit_spew_on(PORT *p, int cnt); | |
131 | extern void eth_xmit_spew_off(PORT *p); | |
132 | ||
133 | extern I596_RBD *alloc_rbds(PORT *p, int num); | |
134 | ||
135 | extern I596_CB * eth_cb_alloc(PORT *p); |