1 /*
2 * bootinfo.h -- Definition of the Linux/MIPS boot information structure
3 *
4 * Copyright (C) 1994 by Waldorf Electronics
5 * Written by Ralf Baechle and Andreas Busse
6 *
7 * Based on Linux/68k linux/include/linux/bootstrap.h
8 * Copyright (C) 1992 by Greg Harp
9 *
10 * This file is subject to the terms and conditions of the GNU General Public
11 * License. See the file README.legal in the main directory of this archive
12 * for more details.
13 */
14 #ifndef __ASM_MIPS_BOOTINFO_H
15 #define __ASM_MIPS_BOOTINFO_H
16
17 /*
18 * Valid machtype values
19 */
20 #define MACH_UNKNOWN 0 /* whatever... */
21 #define MACH_DESKSTATION_RPC44 1 /* Deskstation rPC44 */
22 #define MACH_DESKSTATION_TYNE 2 /* Deskstation Tyne */
23 #define MACH_ACER_PICA_61 3 /* Acer PICA-61 (PICA1) */
24 #define MACH_MIPS_MAGNUM_4000 4 /* Mips Magnum 4000 "RC4030" */
25 #define MACH_OLIVETTI_M700 5 /* Olivetti M700 */
26 #define MACH_LAST 5
27
28 #define MACH_NAMES { "unknown", "Deskstation rPC44", "Deskstation Tyne", \
29 "Acer PICA 61", "Mips Magnum 4000", "Olivetti M700" }
30
31 /*
32 * Valid cputype values
33 */
34 #define CPU_UNKNOWN 0
35 #define CPU_R2000 1
36 #define CPU_R3000 2
37 #define CPU_R3000A 3
38 #define CPU_R3041 4
39 #define CPU_R3051 5
40 #define CPU_R3052 6
41 #define CPU_R3081 7
42 #define CPU_R3081E 8
43 #define CPU_R4000PC 9
44 #define CPU_R4000SC 10
45 #define CPU_R4000MC 11
46 #define CPU_R4200 12
47 #define CPU_R4400PC 13
48 #define CPU_R4400SC 14
49 #define CPU_R4400MC 15
50 #define CPU_R4600 16
51 #define CPU_R6000 17
52 #define CPU_R6000A 18
53 #define CPU_R8000 19
54 #define CPU_R10000 20
55 #define CPU_LAST 20
56
57 #define CPU_NAMES { "unknown", "R2000", "R3000", "R3000A", "R3041", "R3051", \
58 "R3052", "R3081", "R3081E", "R4000PC", "R4000SC", "R4000MC", \
59 "R4200", "R4400PC", "R4400SC", "R4400MC", "R4600", "R6000", \
60 "R6000A", "R8000", "R10000" }
61
62 #define CL_SIZE (80)
63
64 #ifndef __LANGUAGE_ASSEMBLY__
65
66 /*
67 * Some machine parameters passed by MILO. Note that bootinfo
68 * *must* be in the data segment since the kernel clears the
69 * bss segment directly after startup.
70 */
71
72 struct drive_info_struct {
73 char dummy[32];
74 };
75
76 struct bootinfo {
77 /*
78 * machine type
79 */
80 unsigned long machtype;
81
82 /*
83 * system CPU & FPU
84 */
85 unsigned long cputype;
86
87 /*
88 * Installed RAM
89 */
90 unsigned long memlower;
91 unsigned long memupper;
92
93 /*
94 * Cache Sizes (0xffffffff = unknown)
95 */
96 unsigned long icache_size;
97 unsigned long icache_linesize;
98 unsigned long dcache_size;
99 unsigned long dcache_linesize;
100 unsigned long scache_size;
101 unsigned long scache_linesize;
102
103 /*
104 * TLB Info
105 */
106 unsigned long tlb_entries;
107
108 /*
109 * DMA buffer size (Deskstation only)
110 */
111 unsigned long dma_cache_size;
112 unsigned long dma_cache_base;
113
114 /*
115 * Ramdisk Info
116 */
117 unsigned long ramdisk_flags; /* ramdisk flags */
118 unsigned long ramdisk_base; /* address of the ram disk in mem */
119
120 /*
121 * Boot flags for the kernel
122 */
123 unsigned long mount_root_rdonly;
124 struct drive_info_struct drive_info;
125
126 /*
127 * Video ram info (not in tty.h)
128 */
129 unsigned long vram_base; /* video ram base address */
130
131 char command_line[CL_SIZE]; /* kernel command line parameters */
132
133 };
134
135 #if 0
136 /*
137 * New style bootinfo
138 *
139 * Add new tags only at the end of the enum; *never* remove any tags
140 * or you'll break compatibility!
141 */
142 enum bi_tag {
143 /*
144 * not a real tag
145 */
146 dummy,
147
148 /*
149 * machine type
150 */
151 machtype,
152
153 /*
154 * system CPU & FPU
155 */
156 cputype,
157
158 /*
159 * Installed RAM
160 */
161 memlower,
162 memupper,
163
164 /*
165 * Cache Sizes (0xffffffff = unknown)
166 */
167 icache_size,
168 icache_linesize,
169 dcache_size,
170 dcache_linesize,
171 scache_size,
172 scache_linesize,
173
174 /*
175 * TLB Info
176 */
177 tlb_entries,
178
179 /*
180 * DMA buffer size (Deskstation only)
181 */
182 dma_cache_size,
183 dma_cache_base,
184
185 /*
186 * Ramdisk Info
187 */
188 ramdisk_size, /* ramdisk size in 1024 byte blocks */
189 ramdisk_base, /* address of the ram disk in mem */
190
191 /*
192 * Boot flags for the kernel
193 */
194 mount_root_rdonly,
195 drive_info,
196
197 /*
198 * Video ram info (not in tty.h)
199 */
200 vram_base, /* video ram base address */
201
202 command_line /* kernel command line parameters */
203
204 };
205
206 typedef struct {
207 bi_tag tag;
208 unsigned long size;
209 } tag;
210 #endif
211
212 extern struct bootinfo boot_info;
213
214 /*
215 * Defaults, may be overwritten by milo. We initialize
216 * them to make sure that both boot_info and screen_info
217 * are in the .data segment since the .bss segment is
218 * cleared during startup.
219 */
220 #define BOOT_INFO { 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, {{0,}}, 0, "" }
221 #define SCREEN_INFO {0, 0, {0, }, 52, 3, 80, 4626, 3, 9, 50}
222
223 #else /* !__LANGUAGE_ASSEMBLY__ */
224
225 /*
226 * Same structure, but as offsets for usage within assembler source.
227 * Don't mess with struct bootinfo without changing offsets too!
228 */
229
230 #define OFFSET_BOOTINFO_MACHTYPE 0
231 #define OFFSET_BOOTINFO_CPUTYPE 4
232 #define OFFSET_BOOTINFO_MEMLOWER 8
233 #define OFFSET_BOOTINFO_MEMUPPER 12
234 #define OFFSET_BOOTINFO_ICACHE_SIZE 16
235 #define OFFSET_BOOTINFO_ICACHE_LINESIZE 20
236 #define OFFSET_BOOTINFO_DCACHE_SIZE 24
237 #define OFFSET_BOOTINFO_DCACHE_LINESIZE 28
238 #define OFFSET_BOOTINFO_SCACHE_SIZE 32
239 #define OFFSET_BOOTINFO_SCACHE_LINESIZE 36
240 #define OFFSET_BOOTINFO_TLB_ENTRIES 40
241 #define OFFSET_BOOTINFO_DMA_CACHE_SIZE 44
242 #define OFFSET_BOOTINFO_DMA_CACHE_BASE 48
243 #define OFFSET_BOOTINFO_RAMDISK_SIZE 52
244 #define OFFSET_BOOTINFO_RAMDISK_BASE 56
245 #define OFFSET_BOOTINFO_MOUNT_RD_ONLY 60
246 #define OFFSET_BOOTINFO_DRIVE_INFO 64
247 #define OFFSET_BOOTINFO_VRAM_BASE 96
248 #define OFFSET_BOOTINFO_COMMAND_LINE 100
249
250 #endif /* __LANGUAGE_ASSEMBLY__ */
251
252 #endif /* __ASM_MIPS_BOOTINFO_H */