Annotation of sys/arch/sparc/include/eeprom.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: eeprom.h,v 1.11 2007/04/10 17:47:54 miod Exp $ */
! 2:
! 3: /*
! 4: * Copyright (c) 1995 Theo de Raadt
! 5: * All rights reserved.
! 6: * Portions Copyright (c) 1997, Jason Downs. All rights reserved.
! 7: *
! 8: * Redistribution and use in source and binary forms, with or without
! 9: * modification, are permitted provided that the following conditions
! 10: * are met:
! 11: * 1. Redistributions of source code must retain the above copyright
! 12: * notice, this list of conditions and the following disclaimer.
! 13: * 2. Redistributions in binary form must reproduce the above copyright
! 14: * notice, this list of conditions and the following disclaimer in the
! 15: * documentation and/or other materials provided with the distribution.
! 16: *
! 17: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
! 18: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
! 19: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
! 20: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
! 21: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
! 22: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
! 23: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
! 24: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
! 25: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
! 26: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
! 27: */
! 28:
! 29: /*
! 30: * This structure defines the contents of the EEPROM for all Sun
! 31: * Workstations with the SunMon monitor.
! 32: *
! 33: * The EEPROM is divided into a diagnostic section, a reserved section,
! 34: * a ROM section, and a software section (defined in detail elsewhere).
! 35: */
! 36:
! 37: /*
! 38: * Note that most places where the PROM stores a "true/false" flag,
! 39: * the true value is 0x12 and false is the usual zero. Such flags
! 40: * all take the values EE_TRUE or EE_FALSE so this file does not
! 41: * need to define so many value macros.
! 42: */
! 43: #define EE_TRUE 0x12
! 44: #define EE_FALSE 0x00
! 45:
! 46: struct ee_keymap {
! 47: u_char keymap[128]; /* PROM/EEPROM are 7 bit */
! 48: };
! 49:
! 50: #define PW_SIZE 8 /* max size of a password entry */
! 51:
! 52: struct password_inf {
! 53: u_short bad_counter; /* illegal password count */
! 54: char pw_mode; /* mode */
! 55: char pw_bytes[PW_SIZE]; /* password */
! 56: };
! 57: #define NON_SECURE_MODE 0x00 /* non-secure */
! 58: #define COMMAND_SECURE_MODE 0x01 /* command secure */
! 59: #define FULLY_SECURE_MODE 0x5e /* fully secure */
! 60: /* 0, 2-0x5d, 0x5f-0xff: non secure*/
! 61:
! 62:
! 63: #define MAX_SLOTS 12
! 64: #define CONFIG_SIZE 16 /* bytes of config data for each slot */
! 65:
! 66: struct eeprom {
! 67: struct ee_diag {
! 68: u_int eed_test; /* 0x000: diagnostic test write area */
! 69: u_short eed_wrcnt[3]; /* 0x004: diag area write count (3 copies) */
! 70: short eed_nu1;
! 71:
! 72: u_char eed_chksum[3]; /* 0x00c: diag area checksum (3 copies) */
! 73: char eed_nu2;
! 74: time_t eed_hwupdate; /* 0x010: date of last hardware update */
! 75:
! 76: char eed_memsize; /* 0x014: MB's of memory in system */
! 77: char eed_memtest; /* 0x015: MB's of memory to test */
! 78:
! 79: char eed_scrsize; /* 0x016: screen size */
! 80: #define EED_SCR_1152X900 0x00
! 81: #define EED_SCR_1024X1024 0x12
! 82: #define EED_SCR_1600X1280 0x13
! 83: #define EED_SCR_1440X1440 0x14
! 84: #define EED_SCR_640X480 0x15
! 85: #define EED_SCR_1280X1024 0x16
! 86:
! 87: char eed_dogaction; /* 0x017: watchdog reset action */
! 88: #define EED_DOG_MONITOR 0x00 /* return to monitor command level */
! 89: #define EED_DOG_REBOOT 0x12 /* perform power on reset and reboot */
! 90:
! 91: char eed_defboot; /* 0x018: default boot? */
! 92: #define EED_DEFBOOT 0x00 /* do default boot */
! 93: #define EED_NODEFBOOT 0x12 /* don't do default boot */
! 94:
! 95: char eed_bootdev[2]; /* 0x019: boot device name (e.g. xy, ie) */
! 96:
! 97: u_char eed_bootctrl; /* 0x01b: controller number */
! 98: u_char eed_bootunit; /* 0x01c: unit number */
! 99: u_char eed_bootpart; /* 0x01d: partition number */
! 100:
! 101: char eed_kbdtype; /* 0x01f: non-Sun keyboard type - for OEM's */
! 102: #define EED_KBD_SUN 0 /* one of the Sun keyboards */
! 103:
! 104: char eed_console; /* 0x01f: console device */
! 105: #define EED_CONS_BW 0x00 /* use b&w monitor */
! 106: #define EED_CONS_TTYA 0x10 /* use tty A port */
! 107: #define EED_CONS_TTYB 0x11 /* use tty B port */
! 108: #define EED_CONS_COLOR 0x12 /* use color monitor */
! 109: #define EED_CONS_P4 0x20 /* use the P4 monitor */
! 110:
! 111: char eed_showlogo; /* 0x020: display Sun logo? */
! 112: #define EED_LOGO 0x00
! 113: #define EED_NOLOGO 0x12
! 114:
! 115: char eed_keyclick; /* 0x021: keyboard click? */
! 116: #define EED_NOKEYCLICK 0x00
! 117: #define EED_KEYCLICK 0x12
! 118:
! 119: char eed_diagdev[2]; /* 0x022: boot device name (e.g. xy, ie) */
! 120: u_char eed_diagctrl; /* 0x024: controller number */
! 121: u_char eed_diagunit; /* 0x025: unit number */
! 122: u_char eed_diagpart; /* 0x026: partition number */
! 123: #define EED_WOB 0x12 /* bring system up white on black */
! 124:
! 125: u_char eed_videobg;
! 126: char eed_diagpath[40]; /* 0x028: boot path of diagnostic */
! 127: #define EED_TERM_34x80 00
! 128: #define EED_TERM_48x120 0x12 /* for large scrn size 1600x1280 */
! 129: u_char eed_colsize; /* 0x050: number of columns */
! 130: u_char eed_rowsize; /* 0x051: number of rows */
! 131:
! 132: char eed_nu5[6];
! 133:
! 134: struct eed_tty_def { /* 0x058: tty port defaults */
! 135: char eet_sel_baud; /* user specifies baud rate */
! 136: #define EET_DEFBAUD 0x00
! 137: #define EET_SELBAUD 0x12
! 138: u_char eet_hi_baud; /* upper byte of baud rate */
! 139: u_char eet_lo_baud; /* lower byte of baud rate */
! 140: u_char eet_rtsdtr; /* flag for dtr and rts */
! 141: #define NO_RTSDTR 0x12
! 142: char eet_unused[4];
! 143: } eed_ttya_def, eed_ttyb_def;
! 144:
! 145: char eed_banner[80]; /* 0x068: replacement banner */
! 146: /* last two chars must be \r\n (XXX - why not \0?) */
! 147:
! 148: u_short eed_pattern; /* 0x0b8: test pattern - must contain 0xAA55 */
! 149: short eed_nu6;
! 150: struct eed_conf { /* 0x0bc: system configuration, by slot */
! 151: union {
! 152: struct eec_gen {
! 153: u_char eec_type; /* board type code */
! 154: char eec_size[CONFIG_SIZE - 1];
! 155: } eec_gen;
! 156:
! 157: char conf_byte[CONFIG_SIZE];
! 158: u_char eec_type; /* type of this board */
! 159: #define EEC_TYPE_NONE 0 /* no board this slot */
! 160: #define EEC_TYPE_CPU 0x01 /* cpu */
! 161: struct eec_cpu {
! 162: u_char eec_type; /* board type */
! 163: u_char eec_cpu_memsize; /* MB's on cpu */
! 164: int eec_cpu_unused:6;
! 165: int eec_cpu_dcp:1; /* dcp? */
! 166: int eec_cpu_68881:1; /* 68881? */
! 167: u_char eec_cpu_cachesize; /* KB's cache */
! 168: } eec_cpu;
! 169: struct eec_cpu_alt {
! 170: u_char eec_type; /* board type */
! 171: u_char memsize; /* MB's on cpu */
! 172: u_char option; /* option flags */
! 173: #define CPU_HAS_DCP 0x02
! 174: #define CPU_HAS_68881 0x01
! 175: u_char cachesize; /* KB's in cache */
! 176: } eec_cpu_alt;
! 177:
! 178: #define EEC_TYPE_MEM 0x02 /* memory board */
! 179: struct eec_mem {
! 180: u_char eec_type; /* board type */
! 181: u_char eec_mem_size; /* MB's on card */
! 182: } eec_mem;
! 183:
! 184: #define EEC_TYPE_COLOR 0x03 /* color frame buffer */
! 185: struct eec_color {
! 186: u_char eec_type; /* board type */
! 187: char eec_color_type;
! 188: #define EEC_COLOR_TYPE_CG2 2 /* cg2 color board */
! 189: #define EEC_COLOR_TYPE_CG3 3 /* cg3 color board */
! 190: #define EEC_COLOR_TYPE_CG5 5 /* cg5 color board */
! 191: } eec_color;
! 192:
! 193: #define EEC_TYPE_BW 0x04 /* b&w frame buffer */
! 194:
! 195: #define EEC_TYPE_FPA 0x05 /* floating point accelerator */
! 196:
! 197: #define EEC_TYPE_DISK 0x06 /* SMD disk controller */
! 198: struct eec_disk {
! 199: u_char eec_type; /* board type */
! 200: char eec_disk_type; /* controller type */
! 201: #define EEC_DISK_TYPE_X450 1
! 202: #define EEC_DISK_TYPE_X451 2
! 203: char eec_disk_ctlr; /* controller number */
! 204: char eec_disk_disks; /* number of disks */
! 205: char eec_disk_cap[4]; /* capacity */
! 206: #define EEC_DISK_NONE 0
! 207: #define EEC_DISK_130 1
! 208: #define EEC_DISK_280 2
! 209: #define EEC_DISK_380 3
! 210: #define EEC_DISK_575 4
! 211: #define EEC_DISK_900 5
! 212: } eec_disk;
! 213:
! 214: #define EEC_TYPE_TAPE 0x07 /* 1/2" tape controller */
! 215: struct eec_tape {
! 216: u_char eec_type; /* board type */
! 217: char eec_tape_type; /* controller type */
! 218: #define EEC_TAPE_TYPE_XT 1 /* Xylogics 472 */
! 219: #define EEC_TAPE_TYPE_MT 2 /* TapeMaster */
! 220: char eec_tape_ctlr; /* controller number */
! 221: char eec_tape_drives; /* number of drives */
! 222: } eec_tape;
! 223:
! 224: #define EEC_TYPE_ETHER 0x08 /* Ethernet controller */
! 225:
! 226: #define EEC_TYPE_TTY 0x09 /* terminal multiplexer */
! 227: struct eec_tty {
! 228: u_char eec_type; /* board type */
! 229: char eec_tty_lines; /* number of lines */
! 230: #define MAX_TTY_LINES 16
! 231: char manufacturer; /* code for maker */
! 232: #define EEC_TTY_UNKNOWN 0
! 233: #define EEC_TTY_SYSTECH 1
! 234: #define EEC_TTY_SUN 2
! 235: } eec_tty;
! 236:
! 237: #define EEC_TYPE_GP 0x0a /* graphics processor/buffer */
! 238: struct eec_gp {
! 239: u_char eec_type; /* board type */
! 240: char eec_gp_type;
! 241: #define EEC_GP_TYPE_GPPLUS 1 /* GP+ graphic processor board */
! 242: #define EEC_GP_TYPE_GP2 2 /* GP2 graphic processor board */
! 243: } eec_gp;
! 244:
! 245: #define EEC_TYPE_DCP 0x0b /* DCP ??? XXX */
! 246:
! 247: #define EEC_TYPE_SCSI 0x0c /* SCSI controller */
! 248: struct eec_scsi {
! 249: u_char eec_type; /* board type */
! 250: char eec_scsi_type; /* host adaptor type */
! 251: #define EEC_SCSI_SUN2 2
! 252: #define EEC_SCSI_SUN3 3
! 253: char eec_scsi_tapes; /* number of tapes */
! 254: char eec_scsi_disks; /* number of disks */
! 255: char eec_scsi_tape_type;
! 256: #define EEC_SCSI_SYSG 1
! 257: #define EEC_SCSI_MT02 2
! 258: char eec_scsi_disk_type;
! 259: #define EEC_SCSI_MD21 1
! 260: #define EEC_SCSI_ADAPT 2
! 261: char eec_scsi_driv_code[2];
! 262: #define EEC_SCSI_D71 1
! 263: #define EEC_SCSI_D141 2
! 264: #define EEC_SCSI_D327 3
! 265: } eec_scsi;
! 266: #define EEC_TYPE_IPC 0x0d
! 267:
! 268: #define EEC_TYPE_GB 0x0e
! 269:
! 270: #define EEC_TYPE_SCSI375 0x0f
! 271:
! 272: #define EEC_TYPE_MAPKIT 0x10
! 273: struct eec_mapkit {
! 274: u_char eec_type; /* board type */
! 275: char eec_mapkit_hw; /* whether INI */
! 276: #define EEC_TYPE_MAPKIT_INI 1
! 277: } eec_mapkit;
! 278:
! 279: #define EEC_TYPE_CHANNEL 0x11
! 280: #define EEC_TYPE_ALM2 0x12
! 281:
! 282:
! 283: struct eec_generic_net {
! 284: #define EEC_TYPE_GENERIC_NET 0x13
! 285: u_char eec_devtype; /* board type */
! 286: u_char eec_mem_type; /* Memory type */
! 287: u_char gn_nu1;
! 288: u_char gn_nu2;
! 289: #define ID_VME 0x0 /* Data buffers are in VME space(Shared) */
! 290: #define ID_DVMA 0x1 /* or DVMA buffer memory type */
! 291: char *dev_reg_ptr;
! 292: } eec_generic_net;
! 293:
! 294:
! 295: #define EEC_TYPE_END 0xff /* end of card cage */
! 296: } eec_un;
! 297: } eed_conf[MAX_SLOTS + 1];
! 298: #define EEPROM_TABLE 0x58 /* 1 indicates alternate key table. */
! 299: u_char which_kbt; /* 0x18C: which keytable? */
! 300:
! 301: /*
! 302: * Note. The following contains the full keyboard id
! 303: * returned by the type4 transmit layout command. It is not
! 304: * necessarily anything to do with locale of operation.
! 305: */
! 306: u_char ee_kb_type;
! 307: u_char ee_kb_id; /* 0x18E: keyboard id in case of EEPROM table */
! 308: #define EEPROM_LOGO 0x12
! 309: u_char otherlogo; /* 0x18F: True if eeprom logo needed */
! 310: struct ee_keymap ee_keytab_lc[1]; /* 0x190: */
! 311: struct ee_keymap ee_keytab_uc[1]; /* 0x210: */
! 312: u_char ee_logo[64][8]; /* 0x290: A 64X64 bit space for custom/OEM designed logo icon */
! 313: struct password_inf ee_password_inf; /* 0x490: reserved */
! 314: char eed_resv[0x500 - 0x49c]; /* 0x49c: reserved */
! 315: } ee_diag;
! 316:
! 317: struct ee_resv { /* reserved area of EEPROM */
! 318: u_short eev_wrcnt[3]; /* 0x500: write count (3 copies) */
! 319: short eev_nu1;
! 320: u_char eev_chksum[3]; /* 0x508: reserved area checksum (3 copies) */
! 321: char eev_nu2;
! 322: char eev_resv[0x600 - 0x50c]; /* 0x50c: */
! 323: } ee_resv;
! 324:
! 325: struct ee_rom { /* ROM area of EEPROM */
! 326: u_short eer_wrcnt[3]; /* 0x600: write count (3 copies) */
! 327: short eer_nu1;
! 328: u_char eer_chksum[3]; /* 0x608: ROM area checksum (3 copies) */
! 329: char eer_nu2;
! 330: char eer_resv[0x700 - 0x60c]; /* 0x60c: */
! 331: } ee_rom;
! 332:
! 333: /*
! 334: * The following area is reserved for software (i.e. UNIX).
! 335: * The actual contents of this area are defined elsewhere.
! 336: */
! 337: struct ee_softresv { /* software area of EEPROM */
! 338: u_short ees_wrcnt[3]; /* 0x700: write count (3 copies) */
! 339: short ees_nu1;
! 340: u_char ees_chksum[3]; /* 0x708: software area checksum (3 copies) */
! 341: char ees_nu2;
! 342: char ees_resv[0x800 - 0x70c]; /* 0x70c: */
! 343: } ee_soft;
! 344: };
! 345:
! 346: #define EEPROM_BASE 0xffd04000
! 347:
! 348: /*
! 349: * The size of the eeprom on machines with the old clock is 2k. However,
! 350: * on machines with the new clock (and the `eeprom' in the nvram area)
! 351: * there are only 2040 bytes available. (???). Since we really only
! 352: * care about the `diagnostic' area, we'll use its size when dealing
! 353: * with the eeprom in general.
! 354: */
! 355: #define EEPROM_SIZE 0x500
! 356:
! 357: #ifdef _KERNEL
! 358: extern char *eeprom_va;
! 359: int eeprom_uio(struct uio *);
! 360:
! 361: /*
! 362: * Compatibility defines with NetBSD's eeprom.h.
! 363: *
! 364: * The goal here is to provide enough compatibility for kernel drivers to
! 365: * compile without changes; not to make userland utilities compile. Userland
! 366: * should use the native interface.
! 367: */
! 368: #define EE_CONS_BW EED_CONS_BW
! 369: #define EE_CONS_TTYA EED_CONS_TTYA
! 370: #define EE_CONS_TTYB EED_CONS_TTYB
! 371: #define EE_CONS_COLOR EED_CONS_COLOR
! 372: #define EE_CONS_P4OPT EED_CONS_P4
! 373:
! 374: #define EE_SCR_1152X900 EED_SCR_1152X900
! 375: #define EE_SCR_1024X1024 EED_SCR_1024X1024
! 376: #define EE_SCR_1600X1280 EED_SCR_1600X1280
! 377: #define EE_SCR_1440X1440 EED_SCR_1440X1440
! 378: #define EE_SCR_640X480 EED_SCR_640X480
! 379: #define EE_SCR_1280X1024 EED_SCR_1280X1024
! 380:
! 381: #define eeConsole ee_diag.eed_console
! 382: #define eeTtyRows ee_diag.eed_rowsize
! 383: #define eeTtyCols ee_diag.eed_colsize
! 384: #define eeScreenSize ee_diag.eed_scrsize
! 385:
! 386: #endif /* _KERNEL */
CVSweb