diff --git a/sys/arch/sun3/include/eeprom.h b/sys/arch/sun3/include/eeprom.h new file mode 100644 index 000000000000..45de047ab1c8 --- /dev/null +++ b/sys/arch/sun3/include/eeprom.h @@ -0,0 +1,171 @@ +/* + * Copyright (c) 1994 Gordon W. Ross + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Gordon W. Ross. + * 4. The name of the Author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY Gordon W. Ross ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE Gordon W. Ross BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Header: /cvsroot/src/sys/arch/sun3/include/eeprom.h,v 1.1 1994/03/16 04:34:00 glass Exp $ + */ + +/* + * Structure/definitions for the Sun3 EEPROM. + * + * This information is published in the Sun document: + * "PROM User's Manual", part number 800-1736010. + */ + + +/* + * Note that most places where the PROM stores a "true/false" flag, + * the true value is 0x12 and false is the usual zero. Such flags + * all take the values EE_TRUE or EE_FALSE so this file does not + * need to define so many value macros. + */ +#define EE_TRUE 0x12 +#define EE_FALSE 0 + +struct eeprom { + + /* 0x00 */ + u_char eeTestArea[4]; /* Factory Defined */ + u_short eeWriteCount[4]; /* || || */ + u_char eeChecksum[4]; /* || || */ + time_t eeLastHwUpdate; /* || || */ + + /* 0x14 */ + u_char eeInstalledMem; /* Megabytes */ + u_char eeMemTestSize; /* || */ + + /* 0x16 */ + u_char eeScreenSize; +#define EE_SCR_1152X900 0x00 +#define EE_SCR_1024X1024 0x12 +#define EE_SCR_1600X1280 0x13 +#define EE_SCR_1440X1440 0x14 + + u_char eeWatchDogDoesReset; /* Watchdog timeout action: + * true: reset/reboot + * false: return to monitor + */ + /* 0x18 */ + u_char eeBootDevStored; /* Is the boot device stored: + * true: use stored device spec. + * false: use default (try all) + */ + /* Stored boot device spec. i.e.: "sd(Ctlr,Unit,Part)" */ + u_char eeBootDevName[2]; /* xy,xd,sd,ie,le,st,xt,mt,... */ + u_char eeBootDevCtlr; + u_char eeBootDevUnit; + u_char eeBootDevPart; + + /* 0x1E */ + u_char eeKeyboardType; /* zero for sun keyboards */ + u_char eeConsole; /* What to use for the console */ +#define EE_CONS_BW 0x00 /* - On-board B&W / keyboard */ +#define EE_CONS_TTYA 0x10 /* - serial port A */ +#define EE_CONS_TTYB 0x11 /* - serial port B */ +#define EE_CONS_COLOR 0x12 /* - Color FB / keyboard */ + + /* 0x20 */ + u_char eeCustomBanner; /* Is there a custom banner: + * true: use text at 0x68 + * false: use Sun banner + */ + + u_char eeKeyClick; /* true/false */ + + /* Boot device with "Diag" switch in Diagnostic mode: */ + u_char eeDiagDevName[2]; + u_char eeDiagDevCtlr; + u_char eeDiagDevUnit; + u_char eeDiagDevPart; + + /* Video white-on-black (not implemented) */ + u_char eeWhiteOnBlack; /* true/false */ + + /* 0x28 */ + char eeDiagPath[40]; /* path name of diag program */ + + /* 0x50 */ + u_char eeTtyCols; /* normally 80 */ + u_char eeTtyRows; /* normally 34 */ + u_char ee_x52[6]; /* unused */ + + /* 0x58 */ + /* Default parameters for tty A and tty B: */ + struct eeTtyDef { + u_char eetBaudSet; /* Is the baud rate set? + * true: use values here + * false: use default (9600) + */ + u_char eetBaudHi; /* i.e. 96.. */ + u_char eetBaudLo; /* ..00 */ + u_char eetNoRtsDtr; /* true: disable H/W flow + * false: enable H/W flow */ + u_char eet_pad[4]; + } eeTtyDefA, eeTtyDefB; + + /* 0x68 */ + char eeBannerString[80]; /* see eeCustomBanner above */ + + /* 0xB8 */ + u_short eeTestPattern; /* must be 0xAA55 */ + u_short ee_xBA; /* unused */ + + /* 0xBC */ + /* Configuration data. Hopefully we don't need it. */ + struct eeConf { + u_char eecData[16]; + } eeConf[12+1]; + + /* 0x18c */ + u_char eeAltKeyTable; /* What Key table to use: + * 0x58: EEPROM tables + * else: PROM key tables + */ + u_char eeKeyboardLocale; /* extended keyboard type */ + u_char eeKeyboardID; /* for EEPROM key tables */ + u_char eeCustomLogo; /* true: use eeLogoBitmap */ + + /* 0x190 */ + u_char eeKeymapLC[0x80]; + u_char eeKeymapUC[0x80]; + + /* 0x290 */ + u_char eeLogoBitmap[64][8]; /* 64x64 bit custom logo */ + + /* 0x490 */ + u_char ee_x490[0x500-0x490]; /* unused */ + + /* Other stuff we don't care about... */ + /* 0x500 */ + u_char eeReserved[0x100]; + /* 0x600 */ + u_char eeROM_Area[0x100]; + /* 0x700 */ + u_char eeUnixArea[0x100]; +}; diff --git a/sys/arch/sun3/include/obio.h b/sys/arch/sun3/include/obio.h index 00089fd19244..a9a3f284e2f7 100644 --- a/sys/arch/sun3/include/obio.h +++ b/sys/arch/sun3/include/obio.h @@ -28,7 +28,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Header: /cvsroot/src/sys/arch/sun3/include/Attic/obio.h,v 1.7 1994/02/23 08:29:17 glass Exp $ + * $Header: /cvsroot/src/sys/arch/sun3/include/Attic/obio.h,v 1.8 1994/03/16 04:34:01 glass Exp $ */ /* @@ -92,4 +92,6 @@ void obio_probe __P((caddr_t addr)); #ifdef KERNEL +extern vm_offset_t eeprom_va; + #endif diff --git a/sys/arch/sun3/sun3/mem.c b/sys/arch/sun3/sun3/mem.c index 4d3584c30ecc..113808a1f410 100644 --- a/sys/arch/sun3/sun3/mem.c +++ b/sys/arch/sun3/sun3/mem.c @@ -106,13 +106,14 @@ #include #include +#include extern caddr_t vmmap; /* * Sun3: XXXXX * - * Need support for eeprom, various vme spaces, and is /dev/zero right? + * Need support for various vme spaces, and is /dev/zero right? * Also make the unit constants into macros. * */ @@ -174,6 +175,17 @@ mmrw(dev, uio, flags) uio->uio_resid = 0; return (0); +/* minor device 11 (/dev/eeprom) accesses Non-Volatile RAM */ + case 11: + if (eeprom_va == NULL) + return (ENXIO); + o = uio->uio_offset; + if (o >= OBIO_EEPROM_SIZE) + return (EFAULT); /* Not ENXIO? -gwr */ + c = MIN(uio->uio_resid, OBIO_EEPROM_SIZE - o); + error = uiomove(eeprom_va + o, (int)c, uio); + return (error); + /* minor device 12 (/dev/zero) is source of nulls on read, rathole on write */ case 12: if (uio->uio_rw == UIO_WRITE) { diff --git a/sys/arch/sun3/sun3/obio.h b/sys/arch/sun3/sun3/obio.h index ea7daaf8467c..4eea7168e0c3 100644 --- a/sys/arch/sun3/sun3/obio.h +++ b/sys/arch/sun3/sun3/obio.h @@ -28,7 +28,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Header: /cvsroot/src/sys/arch/sun3/sun3/obio.h,v 1.7 1994/02/23 08:29:17 glass Exp $ + * $Header: /cvsroot/src/sys/arch/sun3/sun3/obio.h,v 1.8 1994/03/16 04:34:01 glass Exp $ */ /* @@ -92,4 +92,6 @@ void obio_probe __P((caddr_t addr)); #ifdef KERNEL +extern vm_offset_t eeprom_va; + #endif