xref: /haiku/src/system/boot/platform/next_m68k/nextrom.h (revision c237c4ce593ee823d9867fd997e51e4c447f5623)
1 
2 /* parts from: */
3 
4 /*	$NetBSD: nextrom.h,v 1.11 2011/12/18 04:29:32 tsutsui Exp $	*/
5 /*
6  * Copyright (c) 1998 Darrin B. Jewell
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29 
30 /* parts from NeXT headers */
31 
32 #include <sys/types.h>
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
38 #define	N_SIMM		4		/* number of SIMMs in machine */
39 
40 /* SIMM types */
41 #define SIMM_SIZE       0x03
42 #define	SIMM_SIZE_EMPTY	0x00
43 #define	SIMM_SIZE_16MB	0x01
44 #define	SIMM_SIZE_4MB	0x02
45 #define	SIMM_SIZE_1MB	0x03
46 #define	SIMM_PAGE_MODE	0x04
47 #define	SIMM_PARITY	0x08 /* ?? */
48 
49 /* Space for onboard RAM
50  */
51 #define	MAX_PHYS_SEGS	(N_SIMM + 1)
52 
53 /* Machine types, used in both assembler and C sources. */
54 #define	NeXT_CUBE	0
55 #define	NeXT_WARP9	1
56 #define	NeXT_X15	2
57 #define	NeXT_WARP9C	3
58 #define NeXT_TURBO_MONO	4
59 #define NeXT_TURBO_COLOR 5			/* probed witnessed */
60 
61 #define	ROM_STACK_SIZE	(8192 - 2048)
62 
63 #if 0
64 
65 /*
66  *  The ROM monitor uses the old structure alignment for backward
67  *  compatibility with previous ROMs.  The old alignment is enabled
68  *  with the following pragma.  The kernel uses the "MG" macro to
69  *  construct an old alignment offset into the mon_global structure.
70  *  The kernel file <mon/assym.h> should be copied from the "assym.h"
71  *  found in the build directory of the current ROM release.
72  *  It will contain the proper old alignment offset constants.
73  */
74 
75 #if	MONITOR
76 #pragma	CC_OLD_STORAGE_LAYOUT_ON
77 #else	MONITOR
78 #import <mon/assym.h>
79 #define	MG(type, off) \
80 	((type) ((u_int) (mg) + off))
81 #endif	/* MONITOR */
82 
83 #endif
84 
85 #define	LMAX		128
86 #define	NBOOTFILE	64
87 #define	NADDR		8
88 
89 /* NetBSD defines macros and other stuff to deal with old alignment
90    of this structure, we rather declare it as packed aligned at 2.
91    (the __attribute__ directive does not support an argument so we use pragma)
92    (cf. src/sys/arch/next68k/next68k/nextrom.h in NetBSD)
93    */
94 
95 /* fake structs to get correct size, calculated from offset deltas */
96 
97 struct nvram_info {
98 	char data[54-22];
99 };
100 
101 struct mon_region {
102 	long	first_phys_addr;
103 	long	last_phys_addr;
104 };
105 
106 enum SIO_ARGS {
107 	SIO_ARGS_max = 1
108 };
109 
110 struct sio {
111 	enum SIO_ARGS si_args;
112 	unsigned int si_ctrl, si_unit, si_part;
113 	struct device *si_dev;
114 	unsigned int si_blklen;
115 	unsigned int si_lastlba;
116 	/*caddr_t*/void *si_sadmem;
117 	/*caddr_t*/void *si_protomem;
118 	/*caddr_t*/void *si_devmem;
119 };
120 
121 struct km_mon {
122 	char data[370-324];
123 };
124 
125 struct km_console_info
126 {
127 	int	pixels_per_word;	/* Pixels per 32 bit word: 16, 4, 2, or 1 */
128 	int	bytes_per_scanline;
129 	int	dspy_w;			/* Visible display width in pixels */
130 	int	dspy_max_w;		/* Display width in pixels */
131 	int	dspy_h;			/* Visible display height in pixels */
132 #define KM_CON_ON_NEXTBUS	1	/* flag_bits: Console is NextBus device */
133 	int	flag_bits;		/* Vendor and NeXT flags */
134 	int	color[4];		/* Bit pattern for white thru black */
135 #define KM_HIGH_SLOT	6		/* highest possible console slot. */
136 	char	slot_num;		/* Slot of console device */
137 	char	fb_num;			/* Logical frame buffer in slot for console */
138 	char	byte_lane_id;		/* A value of 1, 4, or 8 */
139 	int	start_access_pfunc;	/* P-code run before each FB access */
140 	int	end_access_pfunc;	/* P-code run after each FB access */
141 	struct	{		/* Frame buffer related addresses to be mapped */
142 			int	phys_addr;
143 			int	virt_addr;
144 			int	size;
145 #define KM_CON_MAP_ENTRIES	6
146 #define KM_CON_PCODE		0
147 #define KM_CON_FRAMEBUFFER	1
148 #define KM_CON_BACKINGSTORE	2
149 		} map_addr[KM_CON_MAP_ENTRIES];
150 	int	access_stack;
151 };
152 /*
153 struct km_console_info {
154 	char data[(936-4)-(788+16)];
155 };*/
156 
157 #pragma pack(push,2)
158 
159 struct mon_global {
160 	char mg_simm[N_SIMM];	/* MUST BE FIRST (accesed early by locore) */
161 	char mg_flags;		/* MUST BE SECOND */
162 #define	MGF_LOGINWINDOW		0x80
163 #define	MGF_UART_SETUP		0x40
164 #define	MGF_UART_STOP		0x20
165 #define	MGF_UART_TYPE_AHEAD	0x10
166 #define	MGF_ANIM_RUN		0x08
167 #define	MGF_SCSI_INTR		0x04
168 #define	MGF_KM_EVENT		0x02
169 #define	MGF_KM_TYPE_AHEAD	0x01
170 	u_int mg_sid, mg_pagesize, mg_mon_stack, mg_vbr;
171 	struct nvram_info mg_nvram;
172 	char mg_inetntoa[18];
173 	char mg_inputline[LMAX];
174 	struct mon_region mg_region[N_SIMM];
175 	void *mg_alloc_base, *mg_alloc_brk;
176 	char *mg_boot_dev, *mg_boot_arg, *mg_boot_info, *mg_boot_file;
177 	char mg_bootfile[NBOOTFILE];
178 	enum SIO_ARGS mg_boot_how;
179 	struct km_mon km;
180 	int mon_init;
181 	struct sio *mg_si;
182 	int mg_time;
183 	char *mg_sddp;
184 	char *mg_dgp;
185 	char *mg_s5cp;
186 	char *mg_odc, *mg_odd;
187 	char mg_radix;
188 	int mg_dmachip;
189 	int mg_diskchip;
190 	volatile int *mg_intrstat;
191 	volatile int *mg_intrmask;
192 	void (*mg_nofault)();
193 	char fmt;
194 	int addr[NADDR], na;
195 	int	mx, my;			/* mouse location */
196 	u_int	cursor_save[2][32];
197 	int (*mg_getc)(), (*mg_try_getc)(), (*mg_putc)(int);
198 	int (*mg_alert)(), (*mg_alert_confirm)();
199 	void *(*mg_alloc)();
200 	int (*mg_boot_slider)();
201 	volatile u_char *eventc_latch;
202 	volatile u_int event_high;
203 	struct animation *mg_animate;
204 	int mg_anim_time;
205 	void (*mg_scsi_intr)();
206 	int mg_scsi_intrarg;
207 	short mg_minor, mg_seq;
208 	int (*mg_anim_run)();
209 	short mg_major;
210 	char *mg_clientetheraddr;
211 	int mg_console_i;
212 	int mg_console_o;
213 #define	CONS_I_KBD	0
214 #define	CONS_I_SCC_A	1
215 #define	CONS_I_SCC_B	2
216 #define	CONS_I_NET	3
217 #define	CONS_O_BITMAP	0
218 #define	CONS_O_SCC_A	1
219 #define	CONS_O_SCC_B	2
220 #define	CONS_O_NET	3
221 	char *test_msg;
222 	/* Next entry should be km_coni. Mach depends on this! */
223 	struct km_console_info km_coni;	/* Console configuration info. See kmreg.h */
224 	char *mg_fdgp;
225 	char mg_machine_type, mg_board_rev;
226 	int (*mg_as_tune)();
227 	int mg_flags2;
228 #define	MGF2_PARITY	0x80000000
229 	volatile struct bmap *mg_bmap_chip;
230 	enum mg_pkg {PKG_CUBE, PKG_NS} mg_pkg;
231 	enum mg_memory_system {MEMSYS_8, MEMSYS_32} mg_memory_system;
232 	enum mg_video_system {VIDSYS_313, VIDSYS_W9C, VIDSYS_PC} mg_video_system;
233 	int mg_cpu_clk;
234 };
235 
236 #pragma pack(pop)
237 
238 extern struct mon_global *mg;
239 
240 #ifdef __cplusplus
241 }
242 #endif
243