Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
[linux-2.6] / include / asm-sparc / sun4prom.h
1 /*
2  * sun4prom.h -- interface to sun4 PROM monitor.  We don't use most of this,
3  *               so most of these are just placeholders.
4  */
5
6 #ifndef _SUN4PROM_H_
7 #define _SUN4PROM_H_
8
9 /*
10  * Although this looks similar to an romvec for a OpenProm machine, it is 
11  * actually closer to what was used in the Sun2 and Sun3.
12  *
13  * V2 entries exist only in version 2 PROMs and later, V3 in version 3 and later.
14  * 
15  * Many of the function prototypes are guesses.  Some are certainly wrong.
16  * Use with care.
17  */
18
19 typedef struct {
20         char            *initSP;                /* Initial system stack ptr */
21         void            (*startmon)(void);      /* Initial PC for hardware */
22         int             *diagberr;              /* Bus err handler for diags */
23         struct linux_arguments_v0 **bootParam; /* Info for bootstrapped pgm */
24         unsigned int    *memorysize;            /* Usable memory in bytes */
25         unsigned char   (*getchar)(void);       /* Get char from input device */ 
26         void            (*putchar)(char);       /* Put char to output device */
27         int             (*mayget)(void);        /* Maybe get char, or -1 */
28         int             (*mayput)(int);         /* Maybe put char, or -1 */
29         unsigned char   *echo;                  /* Should getchar echo? */
30         unsigned char   *insource;              /* Input source selector */
31         unsigned char   *outsink;               /* Output sink selector */
32         int             (*getkey)(void);        /* Get next key if one exists */
33         void            (*initgetkey)(void);    /* Initialize get key */
34         unsigned int    *translation;           /* Kbd translation selector */
35         unsigned char   *keybid;                /* Keyboard ID byte */
36         int             *screen_x;              /* V2: Screen x pos (r/o) */
37         int             *screen_y;              /* V2: Screen y pos (r/o) */
38         struct keybuf   *keybuf;                /* Up/down keycode buffer */
39         char            *monid;                 /* Monitor version ID */
40         void            (*fbwritechar)(char);   /* Write a character to FB */
41         int             *fbAddr;                /* Address of frame buffer */
42         char            **font;                 /* Font table for FB */
43         void            (*fbwritestr)(char *);  /* Write string to FB */
44         void            (*reboot)(char *);      /* e.g. reboot("sd()vmlinux") */
45         unsigned char   *linebuf;               /* The line input buffer */
46         unsigned char   **lineptr;              /* Cur pointer into linebuf */
47         int             *linesize;              /* length of line in linebuf */
48         void            (*getline)(char *);     /* Get line from user */
49         unsigned char   (*getnextchar)(void);   /* Get next char from linebuf */
50         unsigned char   (*peeknextchar)(void);  /* Peek at next char */
51         int             *fbthere;               /* =1 if frame buffer there */
52         int             (*getnum)(void);        /* Grab hex num from line */
53         int             (*printf)(char *, ...); /* See prom_printf() instead */ 
54         void            (*printhex)(int);       /* Format N digits in hex */
55         unsigned char   *leds;                  /* RAM copy of LED register */
56         void            (*setLEDs)(unsigned char *);    /* Sets LED's and RAM copy */
57         void            (*NMIaddr)(void *);     /* Addr for level 7 vector */
58         void            (*abortentry)(void);    /* Entry for keyboard abort */
59         int             *nmiclock;              /* Counts up in msec */
60         int             *FBtype;                /* Frame buffer type */
61         unsigned int    romvecversion;          /* Version number for this romvec */
62         struct globram  *globram;               /* monitor global variables ??? */
63         void *          kbdaddr;                /* Addr of keyboard in use */
64         int             *keyrinit;              /* ms before kbd repeat */
65         unsigned char   *keyrtick;              /* ms between repetitions */
66         unsigned int    *memoryavail;           /* V1: Main mem usable size */
67         long            *resetaddr;             /* where to jump on a reset */
68         long            *resetmap;              /* pgmap entry for resetaddr */
69         void            (*exittomon)(void);     /* Exit from user program */
70         unsigned char   **memorybitmap;         /* V1: &{0 or &bits} */
71         void            (*setcxsegmap)(int ctxt, char *va, int pmeg);   /* Set seg in any context */
72         void            (**vector_cmd)(void *); /* V2: Handler for 'v' cmd */
73         unsigned long   *expectedtrapsig;       /* V3: Location of the expected trap signal */
74         unsigned long   *trapvectorbasetable;   /* V3: Address of the trap vector table */
75         int             unused1;
76         int             unused2;
77         int             unused3;
78         int             unused4;
79 } linux_sun4_romvec;
80
81 extern linux_sun4_romvec *sun4_romvec;
82
83 #endif /* _SUN4PROM_H_ */