|
|
1.1 root 1: Ethernet error handling
2:
3: Transmit errors
4:
5: * All errors: we don't know which buffer caused error, due to the design
6: of the TE. In all cases we have to dequeue everything and throw them
7: all away.
8:
9: * channel errorInterrupt, busError
10: -- action:
11: reset, dequeue and discard all frames
12:
13: << the rest of these are in etxAddlInt_t >>
14:
15: * Late collision
16: -- Disables channel
17: -- action:
18: reset, dequeue and discard all frames
19:
20: * underrun
21: -- Disables channel
22: -- action:
23: reset, dequeue and discard all frames
24:
25: * No Heart beat
26: -- Only useful for TPE; mask off for thin wire
27: -- Channel not disabled
28: -- action:
29: reset, dequeue and discard all frames;
30: enJam();
31:
32: * > 15 retries
33: -- Disables channel
34: -- action:
35: reset, dequeue and discard all frames;
36: enJam();
37:
38: Receive errors
39:
40: * descriptor chan_status errors
41: * short packet - should never happen
42: * alignment error
43: * CRC error
44: * collided packet
45: -- Action:
46: drop packet on floor.
47:
48: * channel errorInterrupt, busError
49: -- Disables channel (maybe...)
50: -- action:
51: dmaAbort (to be sure);
52: dequeue completed frames and restart;
53:
54: * overrun
55: -- Disables channel
56: -- action:
57: dequeue completed frames and restart;
58:
59: * CRC error - mask this interrupt; detected in descriptor chan_status
60:
61: * Alignment error - mask this interrupt; detected in descriptor user status
62:
63: Net Jammed errors
64:
65: * detected:
66: -- > 15 retries, s/w retry count exceeded
67: -- No heart beat, s/w retry count exceeded
68: -- timeout on TX interrupt
69:
70: * Action:
71:
72: m68k en_jam() {
73: if TPE selected {
74: if link integrity OK
75: return good;
76: else {
77: select Thin wire;
78: enable LoopBack (??);
79: return error;
80: }
81:
82: }
83: else (thin wire selected) {
84: if link integrity of TPE OK {
85: select TPE;
86: Enable loopback (??);
87: return GOOD;
88: }
89: else {
90: log "Net Jammed" message if we haven't already done so;
91: set ENF_JAMMED flag;
92: if_down();
93: timeout(antijam); // clears ENF_JAMMED flag after 10
94: // seconds
95: return error;
96: }
97: }
98: }
99:
100: m88k enJam() {
101:
102: if (++retry_count < max)
103: return good;
104:
105: remember current I/F mode (TPE or thin);
106: select TPE;
107: wait some h/w delay for Link Integrity to settle down;
108: if link integrity good {
109: return good;
110: }
111: else if (mode was TPE on entry) {
112: select Thin wire;
113: return good;
114: }
115:
116: /*
117: * Net down.
118: */
119: dequeue and free all frames;
120: set net_down flag; set timeout to clear it in 10 seconds;
121: if_down();
122: return bad;
123: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.