|
|
1.1 ! root 1: /***************************************************************** ! 2: * ! 3: * defines for 3Com Etherlink Plus adapter ! 4: * ! 5: *****************************************************************/ ! 6: ! 7: /* ! 8: * I/O register offsets ! 9: */ ! 10: #define PORT_COMMAND 0x00 /* read/write, 8-bit */ ! 11: #define PORT_STATUS 0x02 /* read only, 8-bit */ ! 12: #define PORT_AUXDMA 0x02 /* write only, 8-bit */ ! 13: #define PORT_DATA 0x04 /* read/write, 16-bit */ ! 14: #define PORT_CONTROL 0x06 /* read/write, 8-bit */ ! 15: ! 16: #define ELP_IO_EXTENT 0x10 /* size of used IO registers */ ! 17: ! 18: /* ! 19: * host control registers bits ! 20: */ ! 21: #define ATTN 0x80 /* attention */ ! 22: #define FLSH 0x40 /* flush data register */ ! 23: #define DMAE 0x20 /* DMA enable */ ! 24: #define DIR 0x10 /* direction */ ! 25: #define TCEN 0x08 /* terminal count interrupt enable */ ! 26: #define CMDE 0x04 /* command register interrupt enable */ ! 27: #define HSF2 0x02 /* host status flag 2 */ ! 28: #define HSF1 0x01 /* host status flag 1 */ ! 29: ! 30: /* ! 31: * combinations of HSF flags used for PCB transmission ! 32: */ ! 33: #define HSF_PCB_ACK HSF1 ! 34: #define HSF_PCB_NAK HSF2 ! 35: #define HSF_PCB_END (HSF2|HSF1) ! 36: #define HSF_PCB_MASK (HSF2|HSF1) ! 37: ! 38: /* ! 39: * host status register bits ! 40: */ ! 41: #define HRDY 0x80 /* data register ready */ ! 42: #define HCRE 0x40 /* command register empty */ ! 43: #define ACRF 0x20 /* adapter command register full */ ! 44: /* #define DIR 0x10 direction - same as in control register */ ! 45: #define DONE 0x08 /* DMA done */ ! 46: #define ASF3 0x04 /* adapter status flag 3 */ ! 47: #define ASF2 0x02 /* adapter status flag 2 */ ! 48: #define ASF1 0x01 /* adapter status flag 1 */ ! 49: ! 50: /* ! 51: * combinations of ASF flags used for PCB reception ! 52: */ ! 53: #define ASF_PCB_ACK ASF1 ! 54: #define ASF_PCB_NAK ASF2 ! 55: #define ASF_PCB_END (ASF2|ASF1) ! 56: #define ASF_PCB_MASK (ASF2|ASF1) ! 57: ! 58: /* ! 59: * host aux DMA register bits ! 60: */ ! 61: #define DMA_BRST 0x01 /* DMA burst */ ! 62: ! 63: /* ! 64: * maximum amount of data allowed in a PCB ! 65: */ ! 66: #define MAX_PCB_DATA 62 ! 67: ! 68: /***************************************************************** ! 69: * ! 70: * timeout value ! 71: * this is a rough value used for loops to stop them from ! 72: * locking up the whole machine in the case of failure or ! 73: * error conditions ! 74: * ! 75: *****************************************************************/ ! 76: ! 77: #define TIMEOUT 300 ! 78: ! 79: /***************************************************************** ! 80: * ! 81: * PCB commands ! 82: * ! 83: *****************************************************************/ ! 84: ! 85: enum { ! 86: /* ! 87: * host PCB commands ! 88: */ ! 89: CMD_CONFIGURE_ADAPTER_MEMORY = 0x01, ! 90: CMD_CONFIGURE_82586 = 0x02, ! 91: CMD_STATION_ADDRESS = 0x03, ! 92: CMD_DMA_DOWNLOAD = 0x04, ! 93: CMD_DMA_UPLOAD = 0x05, ! 94: CMD_PIO_DOWNLOAD = 0x06, ! 95: CMD_PIO_UPLOAD = 0x07, ! 96: CMD_RECEIVE_PACKET = 0x08, ! 97: CMD_TRANSMIT_PACKET = 0x09, ! 98: CMD_NETWORK_STATISTICS = 0x0a, ! 99: CMD_LOAD_MULTICAST_LIST = 0x0b, ! 100: CMD_CLEAR_PROGRAM = 0x0c, ! 101: CMD_DOWNLOAD_PROGRAM = 0x0d, ! 102: CMD_EXECUTE_PROGRAM = 0x0e, ! 103: CMD_SELF_TEST = 0x0f, ! 104: CMD_SET_STATION_ADDRESS = 0x10, ! 105: CMD_ADAPTER_INFO = 0x11, ! 106: NUM_TRANSMIT_CMDS, ! 107: ! 108: /* ! 109: * adapter PCB commands ! 110: */ ! 111: CMD_CONFIGURE_ADAPTER_RESPONSE = 0x31, ! 112: CMD_CONFIGURE_82586_RESPONSE = 0x32, ! 113: CMD_ADDRESS_RESPONSE = 0x33, ! 114: CMD_DOWNLOAD_DATA_REQUEST = 0x34, ! 115: CMD_UPLOAD_DATA_REQUEST = 0x35, ! 116: CMD_RECEIVE_PACKET_COMPLETE = 0x38, ! 117: CMD_TRANSMIT_PACKET_COMPLETE = 0x39, ! 118: CMD_NETWORK_STATISTICS_RESPONSE = 0x3a, ! 119: CMD_LOAD_MULTICAST_RESPONSE = 0x3b, ! 120: CMD_CLEAR_PROGRAM_RESPONSE = 0x3c, ! 121: CMD_DOWNLOAD_PROGRAM_RESPONSE = 0x3d, ! 122: CMD_EXECUTE_RESPONSE = 0x3e, ! 123: CMD_SELF_TEST_RESPONSE = 0x3f, ! 124: CMD_SET_ADDRESS_RESPONSE = 0x40, ! 125: CMD_ADAPTER_INFO_RESPONSE = 0x41 ! 126: }; ! 127: ! 128: /* Definitions for the PCB data structure */ ! 129: ! 130: /* Data units */ ! 131: typedef unsigned char byte; ! 132: typedef unsigned short int word; ! 133: typedef unsigned long int dword; ! 134: ! 135: /* Data structures */ ! 136: struct Memconf { ! 137: word cmd_q, ! 138: rcv_q, ! 139: mcast, ! 140: frame, ! 141: rcv_b, ! 142: progs; ! 143: }; ! 144: ! 145: struct Rcv_pkt { ! 146: word buf_ofs, ! 147: buf_seg, ! 148: buf_len, ! 149: timeout; ! 150: }; ! 151: ! 152: struct Xmit_pkt { ! 153: word buf_ofs, ! 154: buf_seg, ! 155: pkt_len; ! 156: }; ! 157: ! 158: struct Rcv_resp { ! 159: word buf_ofs, ! 160: buf_seg, ! 161: buf_len, ! 162: pkt_len, ! 163: timeout, ! 164: status; ! 165: dword timetag; ! 166: }; ! 167: ! 168: struct Xmit_resp { ! 169: word buf_ofs, ! 170: buf_seg, ! 171: c_stat, ! 172: status; ! 173: }; ! 174: ! 175: ! 176: struct Netstat { ! 177: dword tot_recv, ! 178: tot_xmit; ! 179: word err_CRC, ! 180: err_align, ! 181: err_res, ! 182: err_ovrrun; ! 183: }; ! 184: ! 185: ! 186: struct Selftest { ! 187: word error; ! 188: union { ! 189: word ROM_cksum; ! 190: struct { ! 191: word ofs, seg; ! 192: } RAM; ! 193: word i82586; ! 194: } failure; ! 195: }; ! 196: ! 197: struct Info { ! 198: byte minor_vers, ! 199: major_vers; ! 200: word ROM_cksum, ! 201: RAM_sz, ! 202: free_ofs, ! 203: free_seg; ! 204: }; ! 205: ! 206: struct Memdump { ! 207: word size, ! 208: off, ! 209: seg; ! 210: }; ! 211: ! 212: /* ! 213: Primary Command Block. The most important data structure. All communication ! 214: between the host and the adapter is done with these. (Except for the actual ! 215: ethernet data, which has different packaging.) ! 216: */ ! 217: typedef struct { ! 218: byte command; ! 219: byte length; ! 220: union { ! 221: struct Memconf memconf; ! 222: word configure; ! 223: struct Rcv_pkt rcv_pkt; ! 224: struct Xmit_pkt xmit_pkt; ! 225: byte multicast[10][6]; ! 226: byte eth_addr[6]; ! 227: byte failed; ! 228: struct Rcv_resp rcv_resp; ! 229: struct Xmit_resp xmit_resp; ! 230: struct Netstat netstat; ! 231: struct Selftest selftest; ! 232: struct Info info; ! 233: struct Memdump memdump; ! 234: byte raw[62]; ! 235: } data; ! 236: } pcb_struct; ! 237: ! 238: /* These defines for 'configure' */ ! 239: #define RECV_STATION 0x00 ! 240: #define RECV_BROAD 0x01 ! 241: #define RECV_MULTI 0x02 ! 242: #define RECV_PROMISC 0x04 ! 243: #define NO_LOOPBACK 0x00 ! 244: #define INT_LOOPBACK 0x08 ! 245: #define EXT_LOOPBACK 0x10
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.