|
|
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.