summaryrefslogtreecommitdiffstats
path: root/include/asm-mips/decstation.h
blob: ac04ff09744af80066fb1e515317d57523b7ef5c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
/*
 * Hardware info about DEC Personal DECStation systems (otherwise known
 * as maxine or pmax (internal DEC codenames).
 *
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 *
 * Copyright (C) 1995 by Paul M. Antoine, some code and definitions are
 * by curteousy of Chris Fraser.
 *
 * This file is under construction - you were warned!
 */

#ifndef __ASM_MIPS_PMAX_H 
#define __ASM_MIPS_PMAX_H 

/*
 * The addresses below are virtual address. The mappings are
 * created on startup via wired entries in the tlb.
 */

#define PMAX_LOCAL_IO_SPACE     0xe0000000

/*
 * Motherboard regs (kseg1 addresses)
 */
#define PMAX_SSR_ADDR		0xbc040100		/* system support reg */

/*
 * SSR defines
 */
#define PMAX_SSR_LEDMASK	0x00000001		/* power LED */

/*
 * REX functions -- these are for the new TURBOchannel style ROMs
 */
#define REX_PROM_MAGIC  0x30464354			/* passed in a2 */

#define REX_GETBITMAP		0x84			/* get mem bitmap */
#define REX_GETCHAR		0x24			/* getch() */
#define REX_PUTCHAR		0x13			/* putch() */
#define REX_HALT		0x9c			/* halt the system */
#define REX_PRINTF		0x30			/* printf() */
#define REX_PUTS		0x2c			/* puts() */
#define REX_SLOTADDR		0x6c			/* slotaddr */

#ifndef __LANGUAGE_ASSEMBLY__

extern __inline__ void pmax_set_led(unsigned int bits)
{
	volatile unsigned int *led_register = (unsigned int *) PMAX_SSR_ADDR;

	*led_register = bits & PMAX_SSR_LEDMASK;
}

/*
 * Glue code to call the PMAX boot proms.
 */
extern asmlinkage void pmax_printf(const char *);

#endif

/*
 * These are just hacked out of the JAZZ ones, no ideas really.
 */
#define PMAX_KEYBOARD_ADDRESS   0xe0005000
#define PMAX_KEYBOARD_DATA      0xe0005000
#define PMAX_KEYBOARD_COMMAND   0xe0005001

#ifndef __LANGUAGE_ASSEMBLY__

typedef struct {
	unsigned char data;
	unsigned char command;
} pmax_keyboard_hardware;

typedef struct {
	unsigned char pad0[3];
	unsigned char data;
	unsigned char pad1[3];
	unsigned char command;
} mips_keyboard_hardware;

/*
 * For now.
 */
#define keyboard_hardware       pmax_keyboard_hardware

#endif

/*
 * Serial ports on DEC - maybe!
 */

#define PMAX_SERIAL1_BASE       (unsigned int)0xe0006000
#define PMAX_SERIAL2_BASE       (unsigned int)0xe0007000

/*
 * Dummy Device Address. Used in pmaxdma.c
 */

#define PMAX_DUMMY_DEVICE       0xe000d000
     
/*
 * PMAX timer registers and interrupt no.
 * Note that the hardware timer interrupt is actually on
 * cpu level 6, but to keep compatibility with PC stuff
 * it is remapped to vector 0. See arch/mips/kernel/entry.S.
 */
#define PMAX_TIMER_INTERVAL     0xe0000228
#define PMAX_TIMER_REGISTER     0xe0000230

/*
 * DRAM configuration register
 */
#ifndef __LANGUAGE_ASSEMBLY__
#ifdef __MIPSEL__
typedef struct {
	unsigned int bank2 : 3;
	unsigned int bank1 : 3;
	unsigned int mem_bus_width : 1;
	unsigned int reserved2 : 1;
	unsigned int page_mode : 1;
	unsigned int reserved1 : 23;
} dram_configuration;
#else /* defined (__MIPSEB__) */
typedef struct {
	unsigned int reserved1 : 23;
	unsigned int page_mode : 1;
	unsigned int reserved2 : 1;
	unsigned int mem_bus_width : 1;
	unsigned int bank1 : 3;
	unsigned int bank2 : 3;
} dram_configuration;
#endif
#endif /* __LANGUAGE_ASSEMBLY__ */

#define PMAX_DRAM_CONFIG        0xe00fffe0

/*
 * PMAX interrupt control registers
 */
#define PMAX_IO_IRQ_SOURCE      0xe0100000
#define PMAX_IO_IRQ_ENABLE      0xe0100002

/*
 * PMAX interrupt enable bits
 */
#define PMAX_IE_PARALLEL            (1 << 0)
#define PMAX_IE_FLOPPY              (1 << 1)
#define PMAX_IE_SOUND               (1 << 2)
#define PMAX_IE_VIDEO               (1 << 3)
#define PMAX_IE_ETHERNET            (1 << 4)
#define PMAX_IE_SCSI                (1 << 5)
#define PMAX_IE_KEYBOARD            (1 << 6)
#define PMAX_IE_MOUSE               (1 << 7)
#define PMAX_IE_SERIAL1             (1 << 8)
#define PMAX_IE_SERIAL2             (1 << 9)

/*
 * PMAX Interrupt Level definitions
 */

#define PMAX_TIMER_IRQ          0
#define PMAX_KEYBOARD_IRQ       1
#define PMAX_ETHERNET_IRQ       2 /* 15 */
#define PMAX_SERIAL1_IRQ        3
#define PMAX_SERIAL2_IRQ        4
#define PMAX_PARALLEL_IRQ       5
#define PMAX_FLOPPY_IRQ         6 /* needs to be consistent with floppy driver! */

/*
 * PMAX DMA Channels
 * Note: Channels 4...7 are not used with respect to the Acer PICA-61
 * chipset which does not provide these DMA channels.
 */

#define PMAX_SCSI_DMA           0              /* SCSI */
#define PMAX_FLOPPY_DMA         1              /* FLOPPY */
#define PMAX_AUDIOL_DMA         2              /* AUDIO L */
#define PMAX_AUDIOR_DMA         3              /* AUDIO R */

/*
 * PMAX R4030 MCT_ADR chip (DMA controller)
 * Note: Virtual Addresses !
 */

#define PMAX_R4030_CONFIG	0xE0000000	/* R4030 config register */
#define PMAX_R4030_REVISION     0xE0000008	/* same as PICA_ASIC_REVISION */
#define PMAX_R4030_INV_ADDR	0xE0000010	/* Invalid Address register */

#define PMAX_R4030_TRSTBL_BASE  0xE0000018	/* Translation Table Base */
#define PMAX_R4030_TRSTBL_LIM   0xE0000020	/* Translation Table Limit */
#define PMAX_R4030_TRSTBL_INV   0xE0000028	/* Translation Table Invalidate */

#define PMAX_R4030_CACHE_MTNC   0xE0000030	/* Cache Maintenance */
#define PMAX_R4030_R_FAIL_ADDR  0xE0000038	/* Remote Failed Address */
#define PMAX_R4030_M_FAIL_ADDR  0xE0000040	/* Memory Failed Adresss */

#define PMAX_R4030_CACHE_PTAG   0xE0000048	/* I/O Cache Physical Tag */
#define PMAX_R4030_CACHE_LTAG   0xE0000050	/* I/O Cache Logical Tag */
#define PMAX_R4030_CACHE_BMASK  0xE0000058	/* I/O Cache Byte Mask */
#define PMAX_R4030_CACHE_BWIN   0xE0000060	/* I/O Cache Buffer Window */

/*
 * Remote Speed Registers. 
 *
 *  0: free,      1: Ethernet,  2: SCSI,      3: Floppy,
 *  4: RTC,       5: Kb./Mouse  6: serial 1,  7: serial 2,
 *  8: parallel,  9: NVRAM,    10: CPU,      11: PROM,
 * 12: reserved, 13: free,     14: 7seg LED, 15: ???
 */

#define PMAX_R4030_REM_SPEED	0xE0000070	/* 16 Remote Speed Registers */
						/* 0xE0000070,78,80... 0xE00000E8 */
#define PMAX_R4030_IRQ_ENABLE   0xE00000E8	/* Internal Interrupt Enable */

#define PMAX_R4030_IRQ_SOURCE   0xE0000200	/* Interrupt Source Reg */
#define PMAX_R4030_I386_ERROR   0xE0000208	/* i386/EISA Bus Error */


/*
 * Access the R4030 DMA and I/O Controller
 */

#ifndef __LANGUAGE_ASSEMBLY__

extern inline unsigned short r4030_read_reg16(unsigned addr) {
	unsigned short ret = *((volatile unsigned short *)addr);
	__asm__ __volatile__("nop; nop; nop; nop;");
	return ret;
}

extern inline unsigned int r4030_read_reg32(unsigned addr) {
	unsigned int ret = *((volatile unsigned int *)addr);
	__asm__ __volatile__("nop; nop; nop; nop;");
	return ret;
}

extern inline void r4030_write_reg16(unsigned addr, unsigned val) {
	*((volatile unsigned short *)addr) = val;
	__asm__ __volatile__("nop; nop; nop; nop;");
}

extern inline unsigned int r4030_write_reg32(unsigned addr, unsigned val) {
	*((volatile unsigned int *)addr) = val;
	__asm__ __volatile__("nop; nop; nop; nop;");
}

#endif /* !LANGUAGE_ASSEMBLY__ */

	
#endif /* __ASM_MIPS_PMAX_H */