summaryrefslogtreecommitdiff
path: root/sys/arch/sparc/include
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>1995-10-19 12:53:04 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>1995-10-19 12:53:04 +0000
commit13aae4d265ccfa662472a0f292aa7ec4e8853805 (patch)
treedaf8144317ab31d4c2ac504b2499bc03bfa1f324 /sys/arch/sparc/include
parent26cc0db1f3094e1ea37a1422fa6e4e80865e12e0 (diff)
sun-like eeprom.h
Diffstat (limited to 'sys/arch/sparc/include')
-rw-r--r--sys/arch/sparc/include/eeprom.h451
1 files changed, 306 insertions, 145 deletions
diff --git a/sys/arch/sparc/include/eeprom.h b/sys/arch/sparc/include/eeprom.h
index 902153d3f04..6ef5aedc2cd 100644
--- a/sys/arch/sparc/include/eeprom.h
+++ b/sys/arch/sparc/include/eeprom.h
@@ -1,7 +1,5 @@
-/* $NetBSD: eeprom.h,v 1.2 1995/08/29 22:11:58 pk Exp $ */
-
/*
- * Copyright (c) 1994 Gordon W. Ross
+ * Copyright (c) 1995 Theo de Raadt
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -12,7 +10,10 @@
* 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. The name of the author may not be used to endorse or promote products
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Theo de Raadt.
+ * 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 THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
@@ -28,156 +29,316 @@
*/
/*
- * Structure/definitions for the Sun3/Sun4 EEPROM.
+ * This structure defines the contents of the EEPROM for all Sun
+ * Workstations with the SunMon monitor.
*
- * This information is published in the Sun document:
- * "PROM User's Manual", part number 800-1736010.
+ * The EEPROM is divided into a diagnostic section, a reserved section,
+ * a ROM section, and a software section (defined in detail elsewhere).
*/
+struct ee_keymap {
+ u_char keymap[128]; /* PROM/EEPROM are 7 bit */
+};
+
+#define PW_SIZE 8 /* max size of a password entry */
+
+struct password_inf {
+ u_short bad_counter; /* illegal password count */
+ char pw_mode; /* mode */
+ char pw_bytes[PW_SIZE]; /* password */
+};
+#define NON_SECURE_MODE 0x00 /* non-secure */
+#define COMMAND_SECURE_MODE 0x01 /* command secure */
+#define FULLY_SECURE_MODE 0x5e /* fully secure */
+ /* 0, 2-0x5d, 0x5f-0xff: non secure*/
-/*
- * 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
+
+#define MAX_SLOTS 12
+#define CONFIG_SIZE 16 /* bytes of config data for each slot */
struct eeprom {
+ struct ee_diag {
+ u_int eed_test; /* 0x000: diagnostic test write area */
+ u_short eed_wrcnt[3]; /* 0x004: diag area write count (3 copies) */
+ short eed_nu1;
+
+ u_char eed_chksum[3]; /* 0x00c: diag area checksum (3 copies) */
+ char eed_nu2;
+ time_t eed_hwupdate; /* 0x010: date of last hardware update */
+
+ char eed_memsize; /* 0x014: MB's of memory in system */
+ char eed_memtest; /* 0x015: MB's of memory to test */
+
+ char eed_scrsize; /* 0x016: screen size */
+#define EED_SCR_1152X900 0x00
+#define EED_SCR_1024X1024 0x12
+#define EED_SCR_1600X1280 0x13
+#define EED_SCR_1440X1440 0x14
+#define EED_SCR_640X480 0x15
+#define EED_SCR_1280X1024 0x16
+
+ char eed_dogaction; /* 0x017: watchdog reset action */
+#define EED_DOG_MONITOR 0x00 /* return to monitor command level */
+#define EED_DOG_REBOOT 0x12 /* perform power on reset and reboot */
+
+ char eed_defboot; /* 0x018: default boot? */
+#define EED_DEFBOOT 0x00 /* do default boot */
+#define EED_NODEFBOOT 0x12 /* don't do default boot */
+
+ char eed_bootdev[2]; /* 0x019: boot device name (e.g. xy, ie) */
+
+ u_char eed_bootctrl; /* 0x01b: controller number */
+ u_char eed_bootunit; /* 0x01c: unit number */
+ u_char eed_bootpart; /* 0x01d: partition number */
+
+ char eed_kbdtype; /* 0x01f: non-Sun keyboard type - for OEM's */
+#define EED_KBD_SUN 0 /* one of the Sun keyboards */
+
+ char eed_console; /* 0x01f: console device */
+#define EED_CONS_BW 0x00 /* use b&w monitor */
+#define EED_CONS_TTYA 0x10 /* use tty A port */
+#define EED_CONS_TTYB 0x11 /* use tty B port */
+#define EED_CONS_COLOR 0x12 /* use color monitor */
+#define EED_CONS_P4 0x20 /* use the P4 monitor */
+
+ char eed_showlogo; /* 0x020: display Sun logo? */
+#define EED_LOGO 0x00
+#define EED_NOLOGO 0x12
+
+ char eed_keyclick; /* 0x021: keyboard click? */
+#define EED_NOKEYCLICK 0x00
+#define EED_KEYCLICK 0x12
+
+ char eed_diagdev[2]; /* 0x022: boot device name (e.g. xy, ie) */
+ u_char eed_diagctrl; /* 0x024: controller number */
+ u_char eed_diagunit; /* 0x025: unit number */
+ u_char eed_diagpart; /* 0x026: partition number */
+#define EED_WOB 0x12 /* bring system up white on black */
+
+ u_char eed_videobg;
+ char eed_diagpath[40]; /* 0x028: boot path of diagnostic */
+#define EED_TERM_34x80 00
+#define EED_TERM_48x120 0x12 /* for large scrn size 1600x1280 */
+ char eed_colsize; /* 0x050: number of columns */
+ char eed_rowsize; /* 0x051: number of rows */
+
+ char eed_nu5[6];
+
+ struct eed_tty_def { /* 0x058: tty port defaults */
+ char eet_sel_baud; /* user specifies baud rate */
+#define EET_DEFBAUD 0x00
+#define EET_SELBAUD 0x12
+ u_char eet_hi_baud; /* upper byte of baud rate */
+ u_char eet_lo_baud; /* lower byte of baud rate */
+ u_char eet_rtsdtr; /* flag for dtr and rts */
+#define NO_RTSDTR 0x12
+ char eet_unused[4];
+ } eed_ttya_def, eed_ttyb_def;
+
+ char eed_banner[80]; /* 0x068: replacement banner */
+ /* last two chars must be \r\n (XXX - why not \0?) */
+
+ u_short eed_pattern; /* 0x0b8: test pattern - must contain 0xAA55 */
+ short eed_nu6;
+ struct eed_conf { /* 0x0bc: system configuration, by slot */
+ union {
+ struct eec_gen {
+ u_char eec_type; /* board type code */
+ char eec_size[CONFIG_SIZE - 1];
+ } eec_gen;
+
+ char conf_byte[CONFIG_SIZE];
+ u_char eec_type; /* type of this board */
+#define EEC_TYPE_NONE 0 /* no board this slot */
+#define EEC_TYPE_CPU 0x01 /* cpu */
+ struct eec_cpu {
+ u_char eec_type; /* board type */
+ u_char eec_cpu_memsize; /* MB's on cpu */
+ int eec_cpu_unused:6;
+ int eec_cpu_dcp:1; /* dcp? */
+ int eec_cpu_68881:1; /* 68881? */
+ u_char eec_cpu_cachesize; /* KB's cache */
+ } eec_cpu;
+ struct eec_cpu_alt {
+ u_char eec_type; /* board type */
+ u_char memsize; /* MB's on cpu */
+ u_char option; /* option flags */
+#define CPU_HAS_DCP 0x02
+#define CPU_HAS_68881 0x01
+ u_char cachesize; /* KB's in cache */
+ } eec_cpu_alt;
- /* 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 */
-#define EE_CONS_P4OPT 0x20 /* - Option board on P4 */
-
- /* 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];
+#define EEC_TYPE_MEM 0x02 /* memory board */
+ struct eec_mem {
+ u_char eec_type; /* board type */
+ u_char eec_mem_size; /* MB's on card */
+ } eec_mem;
+
+#define EEC_TYPE_COLOR 0x03 /* color frame buffer */
+ struct eec_color {
+ u_char eec_type; /* board type */
+ char eec_color_type;
+#define EEC_COLOR_TYPE_CG2 2 /* cg2 color board */
+#define EEC_COLOR_TYPE_CG3 3 /* cg3 color board */
+#define EEC_COLOR_TYPE_CG5 5 /* cg5 color board */
+ } eec_color;
+
+#define EEC_TYPE_BW 0x04 /* b&w frame buffer */
+
+#define EEC_TYPE_FPA 0x05 /* floating point accelerator */
+
+#define EEC_TYPE_DISK 0x06 /* SMD disk controller */
+ struct eec_disk {
+ u_char eec_type; /* board type */
+ char eec_disk_type; /* controller type */
+#define EEC_DISK_TYPE_X450 1
+#define EEC_DISK_TYPE_X451 2
+ char eec_disk_ctlr; /* controller number */
+ char eec_disk_disks; /* number of disks */
+ char eec_disk_cap[4]; /* capacity */
+#define EEC_DISK_NONE 0
+#define EEC_DISK_130 1
+#define EEC_DISK_280 2
+#define EEC_DISK_380 3
+#define EEC_DISK_575 4
+#define EEC_DISK_900 5
+ } eec_disk;
+
+#define EEC_TYPE_TAPE 0x07 /* 1/2" tape controller */
+ struct eec_tape {
+ u_char eec_type; /* board type */
+ char eec_tape_type; /* controller type */
+#define EEC_TAPE_TYPE_XT 1 /* Xylogics 472 */
+#define EEC_TAPE_TYPE_MT 2 /* TapeMaster */
+ char eec_tape_ctlr; /* controller number */
+ char eec_tape_drives; /* number of drives */
+ } eec_tape;
+
+#define EEC_TYPE_ETHER 0x08 /* Ethernet controller */
+
+#define EEC_TYPE_TTY 0x09 /* terminal multiplexer */
+ struct eec_tty {
+ u_char eec_type; /* board type */
+ char eec_tty_lines; /* number of lines */
+#define MAX_TTY_LINES 16
+ char manufacturer; /* code for maker */
+#define EEC_TTY_UNKNOWN 0
+#define EEC_TTY_SYSTECH 1
+#define EEC_TTY_SUN 2
+ } eec_tty;
+
+#define EEC_TYPE_GP 0x0a /* graphics processor/buffer */
+ struct eec_gp {
+ u_char eec_type; /* board type */
+ char eec_gp_type;
+#define EEC_GP_TYPE_GPPLUS 1 /* GP+ graphic processor board */
+#define EEC_GP_TYPE_GP2 2 /* GP2 graphic processor board */
+ } eec_gp;
+
+#define EEC_TYPE_DCP 0x0b /* DCP ??? XXX */
+
+#define EEC_TYPE_SCSI 0x0c /* SCSI controller */
+ struct eec_scsi {
+ u_char eec_type; /* board type */
+ char eec_scsi_type; /* host adaptor type */
+#define EEC_SCSI_SUN2 2
+#define EEC_SCSI_SUN3 3
+ char eec_scsi_tapes; /* number of tapes */
+ char eec_scsi_disks; /* number of disks */
+ char eec_scsi_tape_type;
+#define EEC_SCSI_SYSG 1
+#define EEC_SCSI_MT02 2
+ char eec_scsi_disk_type;
+#define EEC_SCSI_MD21 1
+#define EEC_SCSI_ADAPT 2
+ char eec_scsi_driv_code[2];
+#define EEC_SCSI_D71 1
+#define EEC_SCSI_D141 2
+#define EEC_SCSI_D327 3
+ } eec_scsi;
+#define EEC_TYPE_IPC 0x0d
+
+#define EEC_TYPE_GB 0x0e
+
+#define EEC_TYPE_SCSI375 0x0f
+
+#define EEC_TYPE_MAPKIT 0x10
+ struct eec_mapkit {
+ u_char eec_type; /* board type */
+ char eec_mapkit_hw; /* whether INI */
+#define EEC_TYPE_MAPKIT_INI 1
+ } eec_mapkit;
+
+#define EEC_TYPE_CHANNEL 0x11
+#define EEC_TYPE_ALM2 0x12
+
+
+ struct eec_generic_net {
+#define EEC_TYPE_GENERIC_NET 0x13
+ u_char eec_devtype; /* board type */
+ u_char eec_mem_type; /* Memory type */
+ u_char gn_nu1;
+ u_char gn_nu2;
+#define ID_VME 0x0 /* Data buffers are in VME space(Shared) */
+#define ID_DVMA 0x1 /* or DVMA buffer memory type */
+ char *dev_reg_ptr;
+ } eec_generic_net;
+
+
+#define EEC_TYPE_END 0xff /* end of card cage */
+ } eec_un;
+ } eed_conf[MAX_SLOTS + 1];
+#define EEPROM_TABLE 0x58 /* 1 indicates alternate key table. */
+ u_char which_kbt; /* 0x18C: which keytable? */
+
+ /*
+ * Note. The following contains the full keyboard id
+ * returned by the type4 transmit layout command. It is not
+ * necessarily anything to do with locale of operation.
+ */
+ u_char ee_kb_type;
+ u_char ee_kb_id; /* 0x18E: keyboard id in case of EEPROM table */
+#define EEPROM_LOGO 0x12
+ u_char otherlogo; /* 0x18F: True if eeprom logo needed */
+ struct ee_keymap ee_keytab_lc[1]; /* 0x190: */
+ struct ee_keymap ee_keytab_uc[1]; /* 0x210: */
+ u_char ee_logo[64][8]; /* 0x290: A 64X64 bit space for custom/OEM designed logo icon */
+ struct password_inf ee_password_inf; /* 0x490: reserved */
+ char eed_resv[0x500 - 0x49c]; /* 0x49c: reserved */
+ } ee_diag;
+
+ struct ee_resv { /* reserved area of EEPROM */
+ u_short eev_wrcnt[3]; /* 0x500: write count (3 copies) */
+ short eev_nu1;
+ u_char eev_chksum[3]; /* 0x508: reserved area checksum (3 copies) */
+ char eev_nu2;
+ char eev_resv[0x600 - 0x50c]; /* 0x50c: */
+ } ee_resv;
+
+ struct ee_rom { /* ROM area of EEPROM */
+ u_short eer_wrcnt[3]; /* 0x600: write count (3 copies) */
+ short eer_nu1;
+ u_char eer_chksum[3]; /* 0x608: ROM area checksum (3 copies) */
+ char eer_nu2;
+ char eer_resv[0x700 - 0x60c]; /* 0x60c: */
+ } ee_rom;
+
+ /*
+ * The following area is reserved for software (i.e. UNIX).
+ * The actual contents of this area are defined elsewhere.
+ */
+ struct ee_softresv { /* software area of EEPROM */
+ u_short ees_wrcnt[3]; /* 0x700: write count (3 copies) */
+ short ees_nu1;
+ u_char ees_chksum[3]; /* 0x708: software area checksum (3 copies) */
+ char ees_nu2;
+ char ees_resv[0x800 - 0x70c]; /* 0x70c: */
+ } ee_soft;
};
-/*
- * The size of the eeprom on machines with the old clock is 2k. However,
- * on machines with the new clock (and the `eeprom' in the nvram area)
- * there are only 2040 bytes available. (???). Since we really only
- * care about the `diagnostic' area, we'll use it's size when dealing
- * with the eeprom in general.
- */
-#define EEPROM_SIZE 0x500
+#define EEPROM_BASE 0xffd04000
-#ifdef _KERNEL
+#ifdef _KERNEL
extern char *eeprom_va;
int eeprom_uio __P((struct uio *));
-#endif /* _KERNEL */
-
+#endif /* _KERNEL */