1 |
1275 |
phoenix |
/************************************************************************/
|
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: dgrs_es4h.h,v 1.1.1.1 2004-04-15 01:40:44 phoenix 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 */
|