Home | History | Annotate | Line # | Download | only in include
prom.h revision 1.2
      1  1.1  chuck /*	$OpenBSD$ */
      2  1.1  chuck 
      3  1.1  chuck /*
      4  1.1  chuck  * Copyright (c) 1995 Theo de Raadt
      5  1.1  chuck  * All rights reserved.
      6  1.1  chuck  *
      7  1.1  chuck  * Redistribution and use in source and binary forms, with or without
      8  1.1  chuck  * modification, are permitted provided that the following conditions
      9  1.1  chuck  * are met:
     10  1.1  chuck  * 1. Redistributions of source code must retain the above copyright
     11  1.1  chuck  *    notice, this list of conditions and the following disclaimer.
     12  1.1  chuck  * 2. Redistributions in binary form must reproduce the above copyright
     13  1.1  chuck  *    notice, this list of conditions and the following disclaimer in the
     14  1.1  chuck  *    documentation and/or other materials provided with the distribution.
     15  1.1  chuck  * 3. All advertising materials mentioning features or use of this software
     16  1.1  chuck  *    must display the following acknowledgement:
     17  1.1  chuck  *	This product includes software developed under OpenBSD by
     18  1.1  chuck  *	Theo de Raadt for Willowglen Singapore.
     19  1.1  chuck  * 4. The name of the author may not be used to endorse or promote products
     20  1.1  chuck  *    derived from this software without specific prior written permission.
     21  1.1  chuck  *
     22  1.1  chuck  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     23  1.1  chuck  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     24  1.1  chuck  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     25  1.1  chuck  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     26  1.1  chuck  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     27  1.1  chuck  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     28  1.1  chuck  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     29  1.1  chuck  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     30  1.1  chuck  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     31  1.1  chuck  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     32  1.1  chuck  */
     33  1.1  chuck 
     34  1.1  chuck #define MVMEPROM_INCHR		0x00
     35  1.1  chuck #define MVMEPROM_INSTAT		0x01
     36  1.1  chuck #define MVMEPROM_INLN		0x02
     37  1.1  chuck #define MVMEPROM_READSTR	0x03
     38  1.1  chuck #define MVMEPROM_READLN		0x04
     39  1.1  chuck #define MVMEPROM_OUTCHR		0x20
     40  1.1  chuck #define MVMEPROM_OUTSTR		0x21
     41  1.1  chuck #define MVMEPROM_DSKRD		0x10
     42  1.1  chuck #define MVMEPROM_DSKWR		0x11
     43  1.1  chuck #define MVMEPROM_DSKCFIG	0x12
     44  1.1  chuck #define MVMEPROM_DSKFMT		0x14
     45  1.1  chuck #define MVMEPROM_DSKCTRL	0x15
     46  1.1  chuck #define MVMEPROM_NETCTRL	0x1d
     47  1.1  chuck #define MVMEPROM_OUTSTRCRLF	0x22
     48  1.1  chuck #define MVMEPROM_WRITE		0x23
     49  1.1  chuck #define MVMEPROM_WRITELN	0x24
     50  1.1  chuck #define MVMEPROM_DELAY		0x43
     51  1.1  chuck #define MVMEPROM_RTC_RD		0x53
     52  1.1  chuck #define MVMEPROM_EXIT		0x63
     53  1.1  chuck #define MVMEPROM_GETBRDID	0x70
     54  1.1  chuck #define MVMEPROM_ENVIRON	0x71
     55  1.1  chuck 
     56  1.1  chuck #define NETCTRLCMD_GETETHER	1
     57  1.1  chuck 
     58  1.1  chuck #define ENVIRONCMD_WRITE	1
     59  1.1  chuck #define ENVIRONCMD_READ		2
     60  1.1  chuck #define ENVIRONTYPE_EOL		0
     61  1.1  chuck #define ENVIRONTYPE_START	1
     62  1.1  chuck #define ENVIRONTYPE_DISKBOOT	2
     63  1.1  chuck #define ENVIRONTYPE_ROMBOOT	3
     64  1.1  chuck #define ENVIRONTYPE_NETBOOT	4
     65  1.1  chuck #define ENVIRONTYPE_MEMSIZE	5
     66  1.1  chuck 
     67  1.1  chuck #ifndef _LOCORE
     68  1.1  chuck struct prom_netctrl {
     69  1.1  chuck 	u_char	dev;
     70  1.1  chuck 	u_char	ctrl;
     71  1.1  chuck 	u_short	status;
     72  1.1  chuck 	u_long	cmd;
     73  1.1  chuck 	u_long	addr;
     74  1.1  chuck 	u_long	len;
     75  1.1  chuck 	u_long	flags;
     76  1.1  chuck };
     77  1.1  chuck 
     78  1.1  chuck struct prom_environ_hdr {
     79  1.1  chuck 	u_char	type;
     80  1.1  chuck 	u_char	len;
     81  1.1  chuck };
     82  1.1  chuck 
     83  1.1  chuck struct mvmeprom_brdid {
     84  1.1  chuck 	u_long	eye_catcher;
     85  1.1  chuck 	u_char	rev;
     86  1.1  chuck 	u_char	month;
     87  1.1  chuck 	u_char	day;
     88  1.1  chuck 	u_char	year;
     89  1.1  chuck 	u_short	size;
     90  1.1  chuck 	u_short	rsv1;
     91  1.1  chuck 	u_short	model;
     92  1.1  chuck 	u_short	suffix;
     93  1.1  chuck 	u_short	options;
     94  1.1  chuck 	u_char	family;
     95  1.1  chuck 	u_char	cpu;
     96  1.1  chuck 	u_short	ctrlun;
     97  1.1  chuck 	u_short	devlun;
     98  1.1  chuck 	u_short	devtype;
     99  1.1  chuck 	u_short	devnum;
    100  1.1  chuck 	u_long	bug;
    101  1.1  chuck 
    102  1.1  chuck 	/*
    103  1.1  chuck 	 * XXX: I have seen no documentation for these!
    104  1.1  chuck 	 *
    105  1.1  chuck 	 * The following (appears to) exist only on the MVME162 and
    106  1.1  chuck 	 * upwards. We should figure out what the other fields are.
    107  1.1  chuck 	 */
    108  1.1  chuck 	u_char	xx1[16];
    109  1.1  chuck 	u_char	xx2[4];
    110  1.1  chuck 	u_char	longname[12];
    111  1.1  chuck 	u_char	xx3[16];
    112  1.1  chuck 	u_char	speed[4];
    113  1.1  chuck 	u_char	xx4[12];
    114  1.1  chuck };
    115  1.1  chuck 
    116  1.1  chuck struct mvmeprom_time {
    117  1.1  chuck         u_char	year_BCD;
    118  1.1  chuck         u_char	month_BCD;
    119  1.1  chuck         u_char	day_BCD;
    120  1.1  chuck         u_char	wday_BCD;
    121  1.1  chuck         u_char	hour_BCD;
    122  1.1  chuck         u_char	min_BCD;
    123  1.1  chuck         u_char	sec_BCD;
    124  1.1  chuck         u_char	cal_BCD;
    125  1.1  chuck };
    126  1.1  chuck 
    127  1.1  chuck struct mvmeprom_dskio {
    128  1.1  chuck 	u_char	ctrl_lun;
    129  1.1  chuck 	u_char	dev_lun;
    130  1.1  chuck 	u_short	status;
    131  1.1  chuck 	void	*pbuffer;
    132  1.1  chuck 	u_long	blk_num;
    133  1.1  chuck 	u_short	blk_cnt;
    134  1.1  chuck 	u_char	flag;
    135  1.1  chuck #define BUG_FILE_MARK	0x80
    136  1.1  chuck #define IGNORE_FILENUM	0x02
    137  1.1  chuck #define END_OF_FILE	0x01
    138  1.1  chuck 	u_char	addr_mod;
    139  1.1  chuck };
    140  1.1  chuck #define MVMEPROM_BLOCK_SIZE	256
    141  1.1  chuck 
    142  1.1  chuck struct mvmeprom_args {
    143  1.1  chuck         u_int	dev_lun;
    144  1.1  chuck         u_int	ctrl_lun;
    145  1.1  chuck         u_int	flags;
    146  1.1  chuck         u_int	ctrl_addr;
    147  1.1  chuck         u_int	entry;
    148  1.1  chuck         u_int	conf_blk;
    149  1.1  chuck         char	*arg_start;
    150  1.1  chuck         char	*arg_end;
    151  1.1  chuck 	char	*nbarg_start;
    152  1.1  chuck 	char	*nbarg_end;
    153  1.1  chuck 	u_int	cputyp;
    154  1.1  chuck };
    155  1.1  chuck 
    156  1.1  chuck #endif
    157  1.1  chuck 
    158  1.1  chuck #define MVMEPROM_CALL(x) \
    159  1.1  chuck 	asm volatile (__CONCAT("trap #15; .short ", __STRING(x)) )
    160  1.1  chuck #define MVMEPROM_NOARG() \
    161  1.1  chuck 	asm volatile ("clrl sp@-")
    162  1.1  chuck #define MVMEPROM_ARG1(arg) \
    163  1.1  chuck 	asm volatile ("movel %0, sp@-"::"d" (arg))
    164  1.1  chuck #define MVMEPROM_ARG2(arg) \
    165  1.1  chuck 	asm volatile ("movel %0, sp@-"::"d" (arg))
    166  1.1  chuck #define MVMEPROM_GETRES(ret) \
    167  1.1  chuck 	asm volatile ("movel sp@+,%0": "=d" (ret):)
    168  1.1  chuck #define MVMEPROM_RETURN(ret) \
    169  1.1  chuck 	MVMEPROM_GETRES(ret); \
    170  1.1  chuck 	return (ret);			/* return a value (int) */
    171  1.1  chuck #define MVMEPROM_RETURN_BYTE(ret) \
    172  1.1  chuck 	MVMEPROM_GETRES(ret); \
    173  1.1  chuck 	return((ret >> 24) & 0xff);	/* return a byte, ret must be int */
    174  1.1  chuck #define MVMEPROM_STATRET(ret) \
    175  1.1  chuck 	MVMEPROM_GETRES(ret); \
    176  1.1  chuck 	return (!(ret & 0x4));		/* return a 'status' */
    177  1.1  chuck 
    178  1.1  chuck #define MVMEPROM_REG_DEVLUN	"d0"
    179  1.1  chuck #define MVMEPROM_REG_CTRLLUN	"d1"
    180  1.1  chuck #define MVMEPROM_REG_FLAGS	"d4"
    181  1.1  chuck #define MVMEPROM_REG_CTRLADDR	"a0"
    182  1.1  chuck #define MVMEPROM_REG_ENTRY	"a1"
    183  1.1  chuck #define MVMEPROM_REG_CONFBLK	"a2"
    184  1.1  chuck #define MVMEPROM_REG_NBARGSTART	"a3"
    185  1.1  chuck #define MVMEPROM_REG_NBARGEND	"a4"
    186  1.1  chuck #define MVMEPROM_REG_ARGSTART	"a5"
    187  1.1  chuck #define MVMEPROM_REG_ARGEND	"a6"
    188  1.2  chuck 
    189  1.2  chuck #ifndef RB_NOSYM
    190  1.2  chuck #define RB_NOSYM 0x400
    191  1.2  chuck #endif
    192  1.2  chuck #ifndef RB_SBOOT
    193  1.2  chuck #define RB_SBOOT 0x800
    194  1.2  chuck #endif
    195  1.2  chuck 
    196