Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /************************************************************************/ |
| 2 | /* */ |
| 3 | /* es4h.h: Hardware definition of the ES/4h Ethernet Switch, from */ |
| 4 | /* both the host and the 3051's point of view. */ |
| 5 | /* NOTE: this name is a misnomer now that there is a PCI */ |
| 6 | /* board. Everything that says "es4h" should really be */ |
| 7 | /* "se4". But we'll keep the old name for now. */ |
| 8 | /* */ |
| 9 | /* $Id: es4h.h,v 1.10 1996/08/22 17:16:53 rick Exp $ */ |
| 10 | /* */ |
| 11 | /************************************************************************/ |
| 12 | |
| 13 | /************************************************************************/ |
| 14 | /* */ |
| 15 | /* EISA I/O Registers. These are located at 0x1000 * slot-number */ |
| 16 | /* plus the indicated address. I.E. 0x4000-0x4009 for slot 4. */ |
| 17 | /* */ |
| 18 | /************************************************************************/ |
| 19 | |
| 20 | #define ES4H_MANUFmsb 0x00 /* Read-only */ |
| 21 | #define ES4H_MANUFlsb 0x01 /* Read-only */ |
| 22 | # define ES4H_MANUF_CODE 0x1049 /* = "DBI" */ |
| 23 | |
| 24 | #define ES4H_PRODUCT 0x02 /* Read-only */ |
| 25 | # define ES4H_PRODUCT_CODE 0x0A |
| 26 | # define EPC_PRODUCT_CODE 0x03 |
| 27 | |
| 28 | #define ES4H_REVISION 0x03 /* Read-only */ |
| 29 | # define ES4H_REVISION_CODE 0x01 |
| 30 | |
| 31 | #define ES4H_EC 0x04 /* EISA Control */ |
| 32 | # define ES4H_EC_RESET 0x04 /* WO, EISA reset */ |
| 33 | # define ES4H_EC_ENABLE 0x01 /* RW, EISA enable - set to */ |
| 34 | /* 1 before memory enable */ |
| 35 | #define ES4H_PC 0x05 /* Processor Control */ |
| 36 | # define ES4H_PC_RESET 0x04 /* RW, 3051 reset */ |
| 37 | # define ES4H_PC_INT 0x08 /* WO, assert 3051 intr. 3 */ |
| 38 | |
| 39 | #define ES4H_MW 0x06 /* Memory Window select and enable */ |
| 40 | # define ES4H_MW_ENABLE 0x80 /* WO, enable memory */ |
| 41 | # define ES4H_MW_SELECT_MASK 0x1f /* WO, 32k window selected */ |
| 42 | |
| 43 | #define ES4H_IS 0x07 /* Interrupt, addr select */ |
| 44 | # define ES4H_IS_INTMASK 0x07 /* WO, interrupt select */ |
| 45 | # define ES4H_IS_INTOFF 0x00 /* No IRQ */ |
| 46 | # define ES4H_IS_INT3 0x03 /* IRQ 3 */ |
| 47 | # define ES4H_IS_INT5 0x02 /* IRQ 5 */ |
| 48 | # define ES4H_IS_INT7 0x01 /* IRQ 7 */ |
| 49 | # define ES4H_IS_INT10 0x04 /* IRQ 10 */ |
| 50 | # define ES4H_IS_INT11 0x05 /* IRQ 11 */ |
| 51 | # define ES4H_IS_INT12 0x06 /* IRQ 12 */ |
| 52 | # define ES4H_IS_INT15 0x07 /* IRQ 15 */ |
| 53 | # define ES4H_IS_INTACK 0x10 /* WO, interrupt ack */ |
| 54 | # define ES4H_IS_INTPEND 0x10 /* RO, interrupt pending */ |
| 55 | # define ES4H_IS_LINEAR 0x40 /* WO, no memory windowing */ |
| 56 | # define ES4H_IS_AS15 0x80 /* RW, address select bit 15 */ |
| 57 | |
| 58 | #define ES4H_AS_23_16 0x08 /* Address select bits 23-16 */ |
| 59 | #define ES4H_AS_31_24 0x09 /* Address select bits 31-24 */ |
| 60 | |
| 61 | #define ES4H_IO_MAX 0x09 /* Size of I/O space */ |
| 62 | |
| 63 | /* |
| 64 | * PCI |
| 65 | */ |
| 66 | #define SE6_RESET PLX_USEROUT |
| 67 | |
| 68 | /************************************************************************/ |
| 69 | /* */ |
| 70 | /* 3051 Memory Map */ |
| 71 | /* */ |
| 72 | /* Note: 3051 has 4K I-cache, 2K D-cache. 1 cycle is 50 nsec. */ |
| 73 | /* */ |
| 74 | /************************************************************************/ |
| 75 | #define SE4_NPORTS 4 /* # of ethernet ports */ |
| 76 | #define SE6_NPORTS 6 /* # of ethernet ports */ |
| 77 | #define SE_NPORTS 6 /* Max # of ethernet ports */ |
| 78 | |
| 79 | #define ES4H_RAM_BASE 0x83000000 /* Base address of RAM */ |
| 80 | #define ES4H_RAM_SIZE 0x00200000 /* Size of RAM (2MB) */ |
| 81 | #define ES4H_RAM_INTBASE 0x83800000 /* Base of int-on-write RAM */ |
| 82 | /* a.k.a. PKT RAM */ |
| 83 | |
| 84 | /* Ethernet controllers */ |
| 85 | /* See: i82596.h */ |
| 86 | #define ES4H_ETHER0_PORT 0xA2000000 |
| 87 | #define ES4H_ETHER0_CMD 0xA2000100 |
| 88 | #define ES4H_ETHER1_PORT 0xA2000200 |
| 89 | #define ES4H_ETHER1_CMD 0xA2000300 |
| 90 | #define ES4H_ETHER2_PORT 0xA2000400 |
| 91 | #define ES4H_ETHER2_CMD 0xA2000500 |
| 92 | #define ES4H_ETHER3_PORT 0xA2000600 |
| 93 | #define ES4H_ETHER3_CMD 0xA2000700 |
| 94 | #define ES4H_ETHER4_PORT 0xA2000800 /* RS SE-6 only */ |
| 95 | #define ES4H_ETHER4_CMD 0xA2000900 /* RS SE-6 only */ |
| 96 | #define ES4H_ETHER5_PORT 0xA2000A00 /* RS SE-6 only */ |
| 97 | #define ES4H_ETHER5_CMD 0xA2000B00 /* RS SE-6 only */ |
| 98 | |
| 99 | #define ES4H_I8254 0xA2040000 /* 82C54 timers */ |
| 100 | /* See: i8254.h */ |
| 101 | |
| 102 | #define SE4_I8254_HZ (23000000/4) /* EISA clock input freq. */ |
| 103 | #define SE4_IDT_HZ (46000000) /* EISA CPU freq. */ |
| 104 | #define SE6_I8254_HZ (20000000/4) /* PCI clock input freq. */ |
| 105 | #define SE6_IDT_HZ (50000000) /* PCI CPU freq. */ |
| 106 | #define ES4H_I8254_HZ (23000000/4) /* EISA clock input freq. */ |
| 107 | |
| 108 | #define ES4H_GPP 0xA2050000 /* General purpose port */ |
| 109 | /* |
| 110 | * SE-4 (EISA) GPP bits |
| 111 | */ |
| 112 | # define ES4H_GPP_C0_100 0x0001 /* WO, Chan 0: 100 ohm TP */ |
| 113 | # define ES4H_GPP_C0_SQE 0x0002 /* WO, Chan 0: normal squelch */ |
| 114 | # define ES4H_GPP_C1_100 0x0004 /* WO, Chan 1: 100 ohm TP */ |
| 115 | # define ES4H_GPP_C1_SQE 0x0008 /* WO, Chan 1: normal squelch */ |
| 116 | # define ES4H_GPP_C2_100 0x0010 /* WO, Chan 2: 100 ohm TP */ |
| 117 | # define ES4H_GPP_C2_SQE 0x0020 /* WO, Chan 2: normal squelch */ |
| 118 | # define ES4H_GPP_C3_100 0x0040 /* WO, Chan 3: 100 ohm TP */ |
| 119 | # define ES4H_GPP_C3_SQE 0x0080 /* WO, Chan 3: normal squelch */ |
| 120 | # define ES4H_GPP_SQE 0x00AA /* WO, All: normal squelch */ |
| 121 | # define ES4H_GPP_100 0x0055 /* WO, All: 100 ohm TP */ |
| 122 | # define ES4H_GPP_HOSTINT 0x0100 /* RO, cause intr. to host */ |
| 123 | /* Hold high > 250 nsec */ |
| 124 | # define SE4_GPP_EED 0x0200 /* RW, EEPROM data bit */ |
| 125 | # define SE4_GPP_EECS 0x0400 /* RW, EEPROM chip select */ |
| 126 | # define SE4_GPP_EECK 0x0800 /* RW, EEPROM clock */ |
| 127 | |
| 128 | /* |
| 129 | * SE-6 (PCI) GPP bits |
| 130 | */ |
| 131 | # define SE6_GPP_EED 0x0001 /* RW, EEPROM data bit */ |
| 132 | # define SE6_GPP_EECS 0x0002 /* RW, EEPROM chip select */ |
| 133 | # define SE6_GPP_EECK 0x0004 /* RW, EEPROM clock */ |
| 134 | # define SE6_GPP_LINK 0x00fc /* R, Link status LEDs */ |
| 135 | |
| 136 | #define ES4H_INTVEC 0xA2060000 /* RO: Interrupt Vector */ |
| 137 | # define ES4H_IV_DMA0 0x01 /* Chan 0 DMA interrupt */ |
| 138 | # define ES4H_IV_PKT0 0x02 /* Chan 0 PKT interrupt */ |
| 139 | # define ES4H_IV_DMA1 0x04 /* Chan 1 DMA interrupt */ |
| 140 | # define ES4H_IV_PKT1 0x08 /* Chan 1 PKT interrupt */ |
| 141 | # define ES4H_IV_DMA2 0x10 /* Chan 2 DMA interrupt */ |
| 142 | # define ES4H_IV_PKT2 0x20 /* Chan 2 PKT interrupt */ |
| 143 | # define ES4H_IV_DMA3 0x40 /* Chan 3 DMA interrupt */ |
| 144 | # define ES4H_IV_PKT3 0x80 /* Chan 3 PKT interrupt */ |
| 145 | |
| 146 | #define ES4H_INTACK 0xA2060000 /* WO: Interrupt Ack */ |
| 147 | # define ES4H_INTACK_8254 0x01 /* Real Time Clock (int 0) */ |
| 148 | # define ES4H_INTACK_HOST 0x02 /* Host (int 1) */ |
| 149 | # define ES4H_INTACK_PKT0 0x04 /* Chan 0 Pkt (int 2) */ |
| 150 | # define ES4H_INTACK_PKT1 0x08 /* Chan 1 Pkt (int 3) */ |
| 151 | # define ES4H_INTACK_PKT2 0x10 /* Chan 2 Pkt (int 4) */ |
| 152 | # define ES4H_INTACK_PKT3 0x20 /* Chan 3 Pkt (int 5) */ |
| 153 | |
| 154 | #define SE6_PLX 0xA2070000 /* PLX 9060, SE-6 (PCI) only */ |
| 155 | /* see plx9060.h */ |
| 156 | |
| 157 | #define SE6_PCI_VENDOR_ID 0x114F /* Digi PCI vendor ID */ |
| 158 | #define SE6_PCI_DEVICE_ID 0x0003 /* RS SE-6 device ID */ |
| 159 | #define SE6_PCI_ID ((SE6_PCI_DEVICE_ID<<16) | SE6_PCI_VENDOR_ID) |
| 160 | |
| 161 | /* |
| 162 | * IDT Interrupts |
| 163 | */ |
| 164 | #define ES4H_INT_8254 IDT_INT0 |
| 165 | #define ES4H_INT_HOST IDT_INT1 |
| 166 | #define ES4H_INT_ETHER0 IDT_INT2 |
| 167 | #define ES4H_INT_ETHER1 IDT_INT3 |
| 168 | #define ES4H_INT_ETHER2 IDT_INT4 |
| 169 | #define ES4H_INT_ETHER3 IDT_INT5 |
| 170 | |
| 171 | /* |
| 172 | * Because there are differences between the SE-4 and the SE-6, |
| 173 | * we assume that the following globals will be set up at init |
| 174 | * time in main.c to containt the appropriate constants from above |
| 175 | */ |
| 176 | extern ushort Gpp; /* Softcopy of GPP register */ |
| 177 | extern ushort EEck; /* Clock bit */ |
| 178 | extern ushort EEcs; /* CS bit */ |
| 179 | extern ushort EEd; /* Data bit */ |
| 180 | extern ulong I8254_Hz; /* i8254 input frequency */ |
| 181 | extern ulong IDT_Hz; /* IDT CPU frequency */ |
| 182 | extern int Nports; /* Number of ethernet controllers */ |
| 183 | extern int Nchan; /* Nports+1 */ |