]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * include/asm-mips/dec/prom.h | |
3 | * | |
4 | * DECstation PROM interface. | |
5 | * | |
6 | * Copyright (C) 2002 Maciej W. Rozycki | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or | |
9 | * modify it under the terms of the GNU General Public License | |
10 | * as published by the Free Software Foundation; either version | |
11 | * 2 of the License, or (at your option) any later version. | |
12 | * | |
13 | * Based on arch/mips/dec/prom/prom.h by the Anonymous. | |
14 | */ | |
15 | #ifndef _ASM_DEC_PROM_H | |
16 | #define _ASM_DEC_PROM_H | |
17 | ||
18 | #include <linux/config.h> | |
19 | #include <linux/types.h> | |
20 | ||
21 | #include <asm/addrspace.h> | |
22 | ||
23 | /* | |
24 | * PMAX/3MAX PROM entry points for DS2100/3100's and DS5000/2xx's. | |
25 | * Many of these will work for MIPSen as well! | |
26 | */ | |
27 | #define VEC_RESET (u64 *)KSEG1ADDR(0x1fc00000) | |
28 | /* Prom base address */ | |
29 | ||
30 | #define PMAX_PROM_ENTRY(x) (VEC_RESET + (x)) /* Prom jump table */ | |
31 | ||
32 | #define PMAX_PROM_HALT PMAX_PROM_ENTRY(2) /* valid on MIPSen */ | |
33 | #define PMAX_PROM_AUTOBOOT PMAX_PROM_ENTRY(5) /* valid on MIPSen */ | |
34 | #define PMAX_PROM_OPEN PMAX_PROM_ENTRY(6) | |
35 | #define PMAX_PROM_READ PMAX_PROM_ENTRY(7) | |
36 | #define PMAX_PROM_CLOSE PMAX_PROM_ENTRY(10) | |
37 | #define PMAX_PROM_LSEEK PMAX_PROM_ENTRY(11) | |
38 | #define PMAX_PROM_GETCHAR PMAX_PROM_ENTRY(12) | |
39 | #define PMAX_PROM_PUTCHAR PMAX_PROM_ENTRY(13) /* 12 on MIPSen */ | |
40 | #define PMAX_PROM_GETS PMAX_PROM_ENTRY(15) | |
41 | #define PMAX_PROM_PRINTF PMAX_PROM_ENTRY(17) | |
42 | #define PMAX_PROM_GETENV PMAX_PROM_ENTRY(33) /* valid on MIPSen */ | |
43 | ||
44 | ||
45 | /* | |
46 | * Magic number indicating REX PROM available on DECstation. Found in | |
47 | * register a2 on transfer of control to program from PROM. | |
48 | */ | |
49 | #define REX_PROM_MAGIC 0x30464354 | |
50 | ||
875d43e7 | 51 | #ifdef CONFIG_64BIT |
1da177e4 LT |
52 | |
53 | #define prom_is_rex(magic) 1 /* KN04 and KN05 are REX PROMs. */ | |
54 | ||
875d43e7 | 55 | #else /* !CONFIG_64BIT */ |
1da177e4 LT |
56 | |
57 | #define prom_is_rex(magic) ((magic) == REX_PROM_MAGIC) | |
58 | ||
875d43e7 | 59 | #endif /* !CONFIG_64BIT */ |
1da177e4 LT |
60 | |
61 | ||
62 | /* | |
63 | * 3MIN/MAXINE PROM entry points for DS5000/1xx's, DS5000/xx's and | |
64 | * DS5000/2x0. | |
65 | */ | |
66 | #define REX_PROM_GETBITMAP 0x84/4 /* get mem bitmap */ | |
67 | #define REX_PROM_GETCHAR 0x24/4 /* getch() */ | |
68 | #define REX_PROM_GETENV 0x64/4 /* get env. variable */ | |
69 | #define REX_PROM_GETSYSID 0x80/4 /* get system id */ | |
70 | #define REX_PROM_GETTCINFO 0xa4/4 | |
71 | #define REX_PROM_PRINTF 0x30/4 /* printf() */ | |
72 | #define REX_PROM_SLOTADDR 0x6c/4 /* slotaddr */ | |
73 | #define REX_PROM_BOOTINIT 0x54/4 /* open() */ | |
74 | #define REX_PROM_BOOTREAD 0x58/4 /* read() */ | |
75 | #define REX_PROM_CLEARCACHE 0x7c/4 | |
76 | ||
77 | ||
78 | /* | |
79 | * Used by rex_getbitmap(). | |
80 | */ | |
81 | typedef struct { | |
82 | int pagesize; | |
83 | unsigned char bitmap[0]; | |
84 | } memmap; | |
85 | ||
86 | ||
87 | /* | |
88 | * Function pointers as read from a PROM's callback vector. | |
89 | */ | |
90 | extern int (*__rex_bootinit)(void); | |
91 | extern int (*__rex_bootread)(void); | |
92 | extern int (*__rex_getbitmap)(memmap *); | |
93 | extern unsigned long *(*__rex_slot_address)(int); | |
94 | extern void *(*__rex_gettcinfo)(void); | |
95 | extern int (*__rex_getsysid)(void); | |
96 | extern void (*__rex_clear_cache)(void); | |
97 | ||
98 | extern int (*__prom_getchar)(void); | |
99 | extern char *(*__prom_getenv)(char *); | |
100 | extern int (*__prom_printf)(char *, ...); | |
101 | ||
102 | extern int (*__pmax_open)(char*, int); | |
103 | extern int (*__pmax_lseek)(int, long, int); | |
104 | extern int (*__pmax_read)(int, void *, int); | |
105 | extern int (*__pmax_close)(int); | |
106 | ||
107 | ||
875d43e7 | 108 | #ifdef CONFIG_64BIT |
1da177e4 LT |
109 | |
110 | /* | |
111 | * On MIPS64 we have to call PROM functions via a helper | |
112 | * dispatcher to accomodate ABI incompatibilities. | |
113 | */ | |
114 | #define __DEC_PROM_O32 __attribute__((alias("call_o32"))) | |
115 | ||
116 | int _rex_bootinit(int (*)(void)) __DEC_PROM_O32; | |
117 | int _rex_bootread(int (*)(void)) __DEC_PROM_O32; | |
118 | int _rex_getbitmap(int (*)(memmap *), memmap *) __DEC_PROM_O32; | |
119 | unsigned long *_rex_slot_address(unsigned long *(*)(int), int) __DEC_PROM_O32; | |
120 | void *_rex_gettcinfo(void *(*)(void)) __DEC_PROM_O32; | |
121 | int _rex_getsysid(int (*)(void)) __DEC_PROM_O32; | |
122 | void _rex_clear_cache(void (*)(void)) __DEC_PROM_O32; | |
123 | ||
124 | int _prom_getchar(int (*)(void)) __DEC_PROM_O32; | |
125 | char *_prom_getenv(char *(*)(char *), char *) __DEC_PROM_O32; | |
126 | int _prom_printf(int (*)(char *, ...), char *, ...) __DEC_PROM_O32; | |
127 | ||
128 | ||
129 | #define rex_bootinit() _rex_bootinit(__rex_bootinit) | |
130 | #define rex_bootread() _rex_bootread(__rex_bootread) | |
131 | #define rex_getbitmap(x) _rex_getbitmap(__rex_getbitmap, x) | |
132 | #define rex_slot_address(x) _rex_slot_address(__rex_slot_address, x) | |
133 | #define rex_gettcinfo() _rex_gettcinfo(__rex_gettcinfo) | |
134 | #define rex_getsysid() _rex_getsysid(__rex_getsysid) | |
135 | #define rex_clear_cache() _rex_clear_cache(__rex_clear_cache) | |
136 | ||
137 | #define prom_getchar() _prom_getchar(__prom_getchar) | |
138 | #define prom_getenv(x) _prom_getenv(__prom_getenv, x) | |
139 | #define prom_printf(x...) _prom_printf(__prom_printf, x) | |
140 | ||
875d43e7 | 141 | #else /* !CONFIG_64BIT */ |
1da177e4 LT |
142 | |
143 | /* | |
144 | * On plain MIPS we just call PROM functions directly. | |
145 | */ | |
146 | #define rex_bootinit __rex_bootinit | |
147 | #define rex_bootread __rex_bootread | |
148 | #define rex_getbitmap __rex_getbitmap | |
149 | #define rex_slot_address __rex_slot_address | |
150 | #define rex_gettcinfo __rex_gettcinfo | |
151 | #define rex_getsysid __rex_getsysid | |
152 | #define rex_clear_cache __rex_clear_cache | |
153 | ||
154 | #define prom_getchar __prom_getchar | |
155 | #define prom_getenv __prom_getenv | |
156 | #define prom_printf __prom_printf | |
157 | ||
158 | #define pmax_open __pmax_open | |
159 | #define pmax_lseek __pmax_lseek | |
160 | #define pmax_read __pmax_read | |
161 | #define pmax_close __pmax_close | |
162 | ||
875d43e7 | 163 | #endif /* !CONFIG_64BIT */ |
1da177e4 LT |
164 | |
165 | ||
166 | extern void prom_meminit(u32); | |
167 | extern void prom_identify_arch(u32); | |
168 | extern void prom_init_cmdline(s32, s32 *, u32); | |
169 | ||
170 | extern void register_prom_console(void); | |
171 | extern void unregister_prom_console(void); | |
172 | ||
173 | #endif /* _ASM_DEC_PROM_H */ |