V9/sys/sun3/eeprom.h

Compare this file to the similar file:
Show the results in this format:

/*      @(#)eeprom.h 1.1 86/02/03 SMI      */

/*
 * Copyright (c) 1985 by Sun Microsystems, Inc.
 */

/*
 * The EEPROM consists of one 2816 type EEPROM providing 2K bytes
 * of electically erasable storage.  To modify the EEPROM, each
 * byte must be written separately.  After writing each byte
 * a 10 millisecond pause must be observed before the EEPROM can
 * read or written again.  The majority of the EEPROM is diagnostic
 * and is defined in ../mon/eeprom.h.  The software specific
 * information (struct ee_soft) is defined here.  This structure
 * is 0x100 bytes big.
 */

struct ee_soft {
	u_short	ees_wrcnt[3];		/* write count (3 copies) */
	u_short	ees_nu1;		/* not used */
	u_char	ees_chksum[3];		/* software area checksum (3 copies) */
	u_char	ees_nu2;		/* not used */
	u_char	ees_resv[0x100-0xc];	/* XXX - figure this out sometime */
};

#define EE_SOFT_DEFINED		/* tells ../mon/eeprom.h to use this ee_soft */

#ifdef KERNEL
/*      @(#)eeprom.h 1.3 85/10/11 SMI      */

/*
 * Copyright (c) 1985 by Sun Microsystems, Inc.
 */

/*
 * This structure defines the contents to the EEPROM for the Sun-3.
 * It is divided into a diagnostic section, a reserved section,
 * a ROM section, and a software section (defined in detail
 * elsewhere).
 */
#ifndef _EPROM_
#define _EPROM_

struct	eeprom {
	struct	ee_diag {		/* diagnostic's area of EEPROM */
/* 0x000 */	u_int	eed_test;	/* diagnostic test write area */
/* 0x004 */	u_short	eed_wrcnt[3];	/* diag area write count (3 copies) */
		short	eed_nu1;	/* not used */
/* 0x00c */	u_char	eed_chksum[3];	/* diag area checksum (3 copies) */
		char	eed_nu2;	/* not used */
/* 0x010 */	time_t	eed_hwupdate;	/* date of last hardware update */
/* 0x014 */	char	eed_memsize;	/* MB's of memory in system */
/* 0x015 */	char	eed_memtest;	/* MB's of memory to test on powerup */
/* 0x016 */	char	eed_scrsize;	/* screen size, in pixels */
#define	EED_SCR_1152X900	0x00
#define	EED_SCR_1024X1024	0x12
/* 0x017 */	char	eed_dogaction;	/* action to take on watchdog reset */
#define	EED_DOG_MONITOR		0x00	/* return to monitor command level */
#define	EED_DOG_REBOOT		0x12	/* perform power on reset and reboot */
/* 0x018 */	char	eed_defboot;	/* default boot? */
#define	EED_DEFBOOT		0x00	/* do default boot */
#define	EED_NODEFBOOT		0x12	/* don't do default boot */
/* 0x019 */	char	eed_bootdev[2];	/* name of boot device (e.g. xy, ie) */
/* 0x01b */	char	eed_bootctrl;	/* controller number to boot from */
/* 0x01c */	char	eed_bootunit;	/* unit number to boot from */
/* 0x01d */	char	eed_bootpart;	/* partition number to boot from */
/* 0x01e */	char	eed_kbdtype;	/* non-Sun keyboard type - for OEM's */
#define	EED_KBD_SUN	0		/* one of the Sun keyboards */
/* 0x01f */	char	eed_console;	/* device to use for console */
#define	EED_CONS_BW	0x00		/* use b&w monitor for console */
#define	EED_CONS_TTYA	0x10		/* use tty A port for console */
#define	EED_CONS_TTYB	0x11		/* use tty B port for console */
#define	EED_CONS_COLOR	0x12		/* use color monitor for console */
/* 0x020 */	char	eed_showlogo;	/* display Sun logo? */
#define	EED_LOGO	0x00
#define	EED_NOLOGO	0x12
/* 0x021 */	char	eed_keyclick;	/* keyboard click? */
#define	EED_NOKEYCLICK	0x00
#define	EED_KEYCLICK	0x12
/* 0x022 */	char    eed_diagdev[2]; /* name of boot device (e.g. xy, ie) */
/* 0x024 */	char    eed_diagctrl;   /* controller number to boot from */
/* 0x025 */	char    eed_diagunit;   /* unit number to boot from */
/* 0x026 */	char    eed_diagpart;   /* partition number to boot from */
/* 0x027 */	char    eed_diagnu;     /* not used */
/* 0x028 */	char    eed_diagpath[40]; /* boot path of diagnostic */
/* 0x050 */	char	eed_nu5[8];	/* not used */
/* 0x058 */	struct	eed_tty_def {	/* tty port defaults */
			char	eet_unused[8];
		} eed_ttya_def, eed_ttyb_def;
/* 0x068 */	char	eed_banner[80];	/* banner if not displaying Sun logo */
					/* last two chars must be \r\n (XXX - why not \0?) */
/* 0x0b8 */	u_short	eed_pattern;	/* test pattern - must contain 0xAA55 */
/* 0x0ba */	short	eed_nu6;	/* not used */
/* 0x0bc */	struct	eed_conf {	/* system configuration, by slot */
			union {
			struct	eec_gen {
				char	eec_type;	/* type of this board */
				char	eec_size[7];	/* size of each entry */
			} eec_gen;

#define	EEC_TYPE_CPU	0x01			/* cpu */
			struct	eec_cpu {
				char	eec_type;	/* type of this board */
				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? */
				char	eec_cpu_cachesize;	/* KB's in cache */
			} eec_cpu;

#define	EEC_TYPE_MEM	0x02			/* memory board */
			struct	eec_mem {
				char	eec_type;	/* type of this board */
				char	eec_mem_size;	/* MB's on card */
			} eec_mem;

#define	EEC_TYPE_COLOR	0x03			/* color frame buffer */
			struct	eec_color {
				char	eec_type;	/* type of this board */
				char	eec_color_type;
#define	EEC_COLOR_TYPE_CG2	2	/* cg2 color board */
#define	EEC_COLOR_TYPE_CG3	3	/* cg3 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 {
				char	eec_type;	/* type of this board */
				char	eec_disk_type;	/* controller type */
				char	eec_disk_ctlr;	/* controller number */
				char	eec_disk_disks;	/* number of disks */
			} eec_disk;

#define	EEC_TYPE_TAPE	0x07			/* 1/2" tape controller */
			struct eec_tape {
				char	eec_type;	/* type of this board */
				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 {
				char	eec_type;	/* type of this board */
				char	eec_tty_lines;	/* number of lines */
			} eec_tty;

#define	EEC_TYPE_GPGB	0x0a			/* graphics processor/buffer */

#define	EEC_TYPE_DCP	0x0b			/* DCP ??? XXX */

#define	EEC_TYPE_SCSI	0x0c			/* SCSI controller */
			struct	eec_scsi {
				char	eec_type;	/* type of this board */
				char	eec_scsi_type;	/* controller type */
				char	eec_scsi_tapes;	/* number of tapes */
				char	eec_scsi_disks;	/* number of disks */
			} eec_scsi;

#define	EEC_TYPE_END	0xff			/* end of card cage */
			} eec_un;
		} eed_conf[13];
/* 0x124 */	char	eed_resv[0x500-0x124];	/* reserved */
	} ee_diag;

	struct	ee_resv {		/* reserved area of EEPROM */
/* 0x500 */	u_short	eev_wrcnt[3];	/* write count (3 copies) */
		short	eev_nu1;	/* not used */
/* 0x508 */	u_char	eev_chksum[3];	/* reserved area checksum (3 copies) */
		char	eev_nu2;	/* not used */
/* 0x50c */	char	eev_resv[0x600-0x50c];
	} ee_resv;

	struct	ee_rom {		/* ROM area of EEPROM */
/* 0x600 */	u_short	eer_wrcnt[3];	/* write count (3 copies) */
		short	eer_nu1;	/* not used */
/* 0x608 */	u_char	eer_chksum[3];	/* ROM area checksum (3 copies) */
		char	eer_nu2;	/* not used */
/* 0x60c */	char	eer_resv[0x700-0x60c];
	} ee_rom;

	/*
	 * The following area is reserved for software (i.e. UNIX).
	 * The actual contents of this area are defined elsewhere.
	 */
#ifndef EE_SOFT_DEFINED
	struct	ee_softresv {		/* software area of EEPROM */
/* 0x700 */	u_short	ees_wrcnt[3];	/* write count (3 copies) */
		short	ees_nu1;	/* not used */
/* 0x708 */	u_char	ees_chksum[3];	/* software area checksum (3 copies) */
		char	ees_nu2;	/* not used */
/* 0x70c */	char	ees_resv[0x800-0x70c];
	} ee_soft;
#else
	struct	ee_soft ee_soft;
#endif
};
#endif !_EPROM_
#endif

#define	EEPROM_SIZE		0x800	/* size of eeprom in bytes */
#define	OBIO_EEPROM_ADDR	0x40000	/* address of eeprom in obio space */

#define	EEPROM_ADDR	0x0FFE0000	/* virtual address we map eeprom to */

#define	EEPROM		((struct eeprom *)EEPROM_ADDR)