OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-m68k/] [openprom.h] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1276 phoenix
/* $Id: openprom.h,v 1.1.1.1 2004-04-15 02:58:28 phoenix Exp $ */
2
#ifndef __SPARC_OPENPROM_H
3
#define __SPARC_OPENPROM_H
4
 
5
/* openprom.h:  Prom structures and defines for access to the OPENBOOT
6
 *              prom routines and data areas.
7
 *
8
 * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
9
 */
10
 
11
#include <linux/config.h>
12
 
13
/* Empirical constants... */
14
#ifdef CONFIG_SUN3
15
#define KADB_DEBUGGER_BEGVM     0x0fee0000    /* There is no kadb yet but...*/
16
#define LINUX_OPPROM_BEGVM      0x0fef0000
17
#define LINUX_OPPROM_ENDVM      0x0ff10000    /* I think this is right - tm */
18
#else
19
#define KADB_DEBUGGER_BEGVM     0xffc00000    /* Where kern debugger is in virt-mem */
20
#define LINUX_OPPROM_BEGVM      0xffd00000
21
#define LINUX_OPPROM_ENDVM      0xfff00000
22
#define LINUX_OPPROM_MAGIC      0x10010407
23
#endif
24
 
25
#ifndef __ASSEMBLY__
26
/* V0 prom device operations. */
27
struct linux_dev_v0_funcs {
28
        int (*v0_devopen)(char *device_str);
29
        int (*v0_devclose)(int dev_desc);
30
        int (*v0_rdblkdev)(int dev_desc, int num_blks, int blk_st, char *buf);
31
        int (*v0_wrblkdev)(int dev_desc, int num_blks, int blk_st, char *buf);
32
        int (*v0_wrnetdev)(int dev_desc, int num_bytes, char *buf);
33
        int (*v0_rdnetdev)(int dev_desc, int num_bytes, char *buf);
34
        int (*v0_rdchardev)(int dev_desc, int num_bytes, int dummy, char *buf);
35
        int (*v0_wrchardev)(int dev_desc, int num_bytes, int dummy, char *buf);
36
        int (*v0_seekdev)(int dev_desc, long logical_offst, int from);
37
};
38
 
39
/* V2 and later prom device operations. */
40
struct linux_dev_v2_funcs {
41
        int (*v2_inst2pkg)(int d);      /* Convert ihandle to phandle */
42
        char * (*v2_dumb_mem_alloc)(char *va, unsigned sz);
43
        void (*v2_dumb_mem_free)(char *va, unsigned sz);
44
 
45
        /* To map devices into virtual I/O space. */
46
        char * (*v2_dumb_mmap)(char *virta, int which_io, unsigned paddr, unsigned sz);
47
        void (*v2_dumb_munmap)(char *virta, unsigned size);
48
 
49
        int (*v2_dev_open)(char *devpath);
50
        void (*v2_dev_close)(int d);
51
        int (*v2_dev_read)(int d, char *buf, int nbytes);
52
        int (*v2_dev_write)(int d, char *buf, int nbytes);
53
        int (*v2_dev_seek)(int d, int hi, int lo);
54
 
55
        /* Never issued (multistage load support) */
56
        void (*v2_wheee2)(void);
57
        void (*v2_wheee3)(void);
58
};
59
 
60
struct linux_mlist_v0 {
61
        struct linux_mlist_v0 *theres_more;
62
        char *start_adr;
63
        unsigned num_bytes;
64
};
65
 
66
struct linux_mem_v0 {
67
        struct linux_mlist_v0 **v0_totphys;
68
        struct linux_mlist_v0 **v0_prommap;
69
        struct linux_mlist_v0 **v0_available; /* What we can use */
70
};
71
 
72
/* Arguments sent to the kernel from the boot prompt. */
73
struct linux_arguments_v0 {
74
        char *argv[8];
75
        char args[100];
76
        char boot_dev[2];
77
        int boot_dev_ctrl;
78
        int boot_dev_unit;
79
        int dev_partition;
80
        char *kernel_file_name;
81
        void *aieee1;           /* XXX */
82
};
83
 
84
/* V2 and up boot things. */
85
struct linux_bootargs_v2 {
86
        char **bootpath;
87
        char **bootargs;
88
        int *fd_stdin;
89
        int *fd_stdout;
90
};
91
 
92
#if defined(CONFIG_SUN3) || defined(CONFIG_SUN3X)
93
struct linux_romvec {
94
        char            *pv_initsp;
95
        int             (*pv_startmon)(void);
96
 
97
        int             *diagberr;
98
 
99
        struct linux_arguments_v0 **pv_v0bootargs;
100
        unsigned        *pv_sun3mem;
101
 
102
        unsigned char   (*pv_getchar)(void);
103
        int             (*pv_putchar)(int ch);
104
        int             (*pv_nbgetchar)(void);
105
        int             (*pv_nbputchar)(int ch);
106
        unsigned char   *pv_echo;
107
        unsigned char   *pv_insource;
108
        unsigned char   *pv_outsink;
109
 
110
        int             (*pv_getkey)(void);
111
        int             (*pv_initgetkey)(void);
112
        unsigned int    *pv_translation;
113
        unsigned char   *pv_keybid;
114
        int             *pv_screen_x;
115
        int             *pv_screen_y;
116
        struct keybuf   *pv_keybuf;
117
 
118
        char            *pv_monid;
119
 
120
        /*
121
         * Frame buffer output and terminal emulation
122
         */
123
 
124
        int             (*pv_fbwritechar)(char);
125
        int             *pv_fbaddr;
126
        char            **pv_font;
127
        int             (*pv_fbwritestr)(char);
128
 
129
        void            (*pv_reboot)(char *bootstr);
130
 
131
        /*
132
         * Line input and parsing
133
         */
134
 
135
        unsigned char   *pv_linebuf;
136
        unsigned char   **pv_lineptr;
137
        int             *pv_linesize;
138
        int             (*pv_getline)(void);
139
        unsigned char   (*pv_getnextchar)(void);
140
        unsigned char   (*pv_peeknextchar)(void);
141
        int             *pv_fbthere;
142
        int             (*pv_getnum)(void);
143
 
144
        void            (*pv_printf)(const char *fmt, ...);
145
        int             (*pv_printhex)(void);
146
 
147
        unsigned char   *pv_leds;
148
        int             (*pv_setleds)(void);
149
 
150
        /*
151
         * Non-maskable interrupt  (nmi) information
152
         */
153
 
154
        int             (*pv_nmiaddr)(void);
155
        int             (*pv_abortentry)(void);
156
        int             *pv_nmiclock;
157
 
158
        int             *pv_fbtype;
159
 
160
        /*
161
         * Assorted other things
162
         */
163
 
164
        unsigned        pv_romvers;
165
        struct globram  *pv_globram;
166
        char            *pv_kbdzscc;
167
 
168
        int             *pv_keyrinit;
169
        unsigned char   *pv_keyrtick;
170
        unsigned        *pv_memoryavail;
171
        long            *pv_resetaddr;
172
        long            *pv_resetmap;
173
 
174
        void            (*pv_halt)(void);
175
        unsigned char   *pv_memorybitmap;
176
 
177
#ifdef CONFIG_SUN3
178
        void            (*pv_setctxt)(int ctxt, char *va, int pmeg);
179
        void            (*pv_vector_cmd)(void);
180
        int             dummy1z;
181
        int             dummy2z;
182
        int             dummy3z;
183
        int             dummy4z;
184
#endif
185
};
186
#else
187
/* The top level PROM vector. */
188
struct linux_romvec {
189
        /* Version numbers. */
190
        unsigned int pv_magic_cookie;
191
        unsigned int pv_romvers;
192
        unsigned int pv_plugin_revision;
193
        unsigned int pv_printrev;
194
 
195
        /* Version 0 memory descriptors. */
196
        struct linux_mem_v0 pv_v0mem;
197
 
198
        /* Node operations. */
199
        struct linux_nodeops *pv_nodeops;
200
 
201
        char **pv_bootstr;
202
        struct linux_dev_v0_funcs pv_v0devops;
203
 
204
        char *pv_stdin;
205
        char *pv_stdout;
206
#define PROMDEV_KBD     0                /* input from keyboard */
207
#define PROMDEV_SCREEN  0                /* output to screen */
208
#define PROMDEV_TTYA    1               /* in/out to ttya */
209
#define PROMDEV_TTYB    2               /* in/out to ttyb */
210
 
211
        /* Blocking getchar/putchar.  NOT REENTRANT! (grr) */
212
        int (*pv_getchar)(void);
213
        void (*pv_putchar)(int ch);
214
 
215
        /* Non-blocking variants. */
216
        int (*pv_nbgetchar)(void);
217
        int (*pv_nbputchar)(int ch);
218
 
219
        void (*pv_putstr)(char *str, int len);
220
 
221
        /* Miscellany. */
222
        void (*pv_reboot)(char *bootstr);
223
        void (*pv_printf)(__const__ char *fmt, ...);
224
        void (*pv_abort)(void);
225
        __volatile__ int *pv_ticks;
226
        void (*pv_halt)(void);
227
        void (**pv_synchook)(void);
228
 
229
        /* Evaluate a forth string, not different proto for V0 and V2->up. */
230
        union {
231
                void (*v0_eval)(int len, char *str);
232
                void (*v2_eval)(char *str);
233
        } pv_fortheval;
234
 
235
        struct linux_arguments_v0 **pv_v0bootargs;
236
 
237
        /* Get ether address. */
238
        unsigned int (*pv_enaddr)(int d, char *enaddr);
239
 
240
        struct linux_bootargs_v2 pv_v2bootargs;
241
        struct linux_dev_v2_funcs pv_v2devops;
242
 
243
        int filler[15];
244
 
245
        /* This one is sun4c/sun4 only. */
246
        void (*pv_setctxt)(int ctxt, char *va, int pmeg);
247
 
248
        /* Prom version 3 Multiprocessor routines. This stuff is crazy.
249
         * No joke. Calling these when there is only one cpu probably
250
         * crashes the machine, have to test this. :-)
251
         */
252
 
253
        /* v3_cpustart() will start the cpu 'whichcpu' in mmu-context
254
         * 'thiscontext' executing at address 'prog_counter'
255
         */
256
        int (*v3_cpustart)(unsigned int whichcpu, int ctxtbl_ptr,
257
                           int thiscontext, char *prog_counter);
258
 
259
        /* v3_cpustop() will cause cpu 'whichcpu' to stop executing
260
         * until a resume cpu call is made.
261
         */
262
        int (*v3_cpustop)(unsigned int whichcpu);
263
 
264
        /* v3_cpuidle() will idle cpu 'whichcpu' until a stop or
265
         * resume cpu call is made.
266
         */
267
        int (*v3_cpuidle)(unsigned int whichcpu);
268
 
269
        /* v3_cpuresume() will resume processor 'whichcpu' executing
270
         * starting with whatever 'pc' and 'npc' were left at the
271
         * last 'idle' or 'stop' call.
272
         */
273
        int (*v3_cpuresume)(unsigned int whichcpu);
274
};
275
#endif
276
 
277
/* Routines for traversing the prom device tree. */
278
struct linux_nodeops {
279
        int (*no_nextnode)(int node);
280
        int (*no_child)(int node);
281
        int (*no_proplen)(int node, char *name);
282
        int (*no_getprop)(int node, char *name, char *val);
283
        int (*no_setprop)(int node, char *name, char *val, int len);
284
        char * (*no_nextprop)(int node, char *name);
285
};
286
 
287
/* More fun PROM structures for device probing. */
288
#define PROMREG_MAX     16
289
#define PROMVADDR_MAX   16
290
#define PROMINTR_MAX    15
291
 
292
struct linux_prom_registers {
293
        int which_io;         /* is this in OBIO space? */
294
        char *phys_addr;      /* The physical address of this register */
295
        int reg_size;         /* How many bytes does this register take up? */
296
};
297
 
298
struct linux_prom_irqs {
299
        int pri;    /* IRQ priority */
300
        int vector; /* This is foobar, what does it do? */
301
};
302
 
303
/* Element of the "ranges" vector */
304
struct linux_prom_ranges {
305
        unsigned int ot_child_space;
306
        unsigned int ot_child_base;             /* Bus feels this */
307
        unsigned int ot_parent_space;
308
        unsigned int ot_parent_base;            /* CPU looks from here */
309
        unsigned int or_size;
310
};
311
 
312
#endif /* !(__ASSEMBLY__) */
313
 
314
#endif /* !(__SPARC_OPENPROM_H) */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.