⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eeprom.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#ifndef lintstatic  char sccsid[] = "@(#)eeprom.c 1.1 92/07/30 Copyright Sun Micro";#endif/* * Copyright (c) 1989 by Sun Microsystems, Inc. */#ifdef	sun386/******************************************************************************* Notify procedure for the "EEPROM" button.*******************************************************************************//*ARGSUSED*/eeprom_proc(){	(void)confirm("The EEPROM feature is not available on SunX86!", 1);}#else	sun386#include <stdio.h>#include <sys/types.h>#ifdef sun3#include <sun3/eeprom.h>#endif#ifdef sun4#include <sun4/eeprom.h>#endif#include <sys/time.h>#include "sundiag.h"#include "../../lib/include/libonline.h"#define	EE_TRUE	0x12#define	eeoff	 (char *)&eeprom + (int)&((struct eeprom *)0)char	*eeprom_dev = "/dev/eeprom";char buffer[100];	/* Global storage buffer */char *bufp;		/* Storage buffer pointer */void i_byte();char *o_byte();void i_bool();char *o_bool();void i_date();char *o_date();void i_bootdev(); char *o_bootdev();void i_console();char *o_console();void i_scrsize();char *o_scrsize(); 	void i_banner();char *o_banner();void i_diagpath();char *o_diagpath();void i_baud();char *o_baud();char *o_string();void eefix_chksum();static Frame eeprom_frame=NULL;static Panel eeprom_panel;Panel_item	hwupdate_item;Panel_item	memsize_item;Panel_item	memtest_item;Panel_item	scrsize_item;Panel_item	watchdog_reboot_item;Panel_item	default_boot_item;Panel_item	bootdev_item;	Panel_item	kbdtype_item;Panel_item	keyclick_item;Panel_item	console_item;	Panel_item	custom_banner_item;Panel_item	banner_item;Panel_item	diagdev_item;Panel_item	diagpath_item;Panel_item	ttya_rtsdtr_item;Panel_item	ttyb_rtsdtr_item;Panel_item	columns_item;Panel_item	rows_item;struct	eeprom eeprom;int	errors = 0;extern	u_char chksum();extern	char *ctime(), *strncpy();extern  long lseek();/****************************************************************************** * Notify procedure for the "EEPROM" button.				      * ******************************************************************************//***** global flag(switch) variables. *****/int watchdog_reboot_file = 0;	/* Watchdog reboot */int default_boot_file = 0;	/* Default boot */int custom_banner_file = 0;	/* Custom logo */int ttya_rtsdtr_file = 0;	/* Assert rst/dtr on port A ? */int ttyb_rtsdtr_file = 0;	/* Assert rst/dtr on port B ? */int keyclick_file = 0;		/* keyboard click */int memsize_file = 0;		/* Memory size */int memtest_file = 0;		/* Megabytes of memory to test */int kbdtype_file = 0;		/* Type of Keyboard ( O for all SUN keyboards ) */int columns_file = 0;		/* Number of columns on screen */int rows_file    = 0;		/* Number of rows on screen */int scrsize_file = 0;		/* screen size */int console_file = 0;		/* console type */char bootdev_file[15];		/* Boot device */char banner_file[81];		/* Banner string */char diagdev_file[15];		/* Diagnostic boot device */char diagpath_file[41];		/* Diagnostic boot path */char hwupdate_file[41];		/* Last EEPROM update *//***** forward references *****/int eeprom_done_proc();static eeprom_default_proc();static eeprom_cancel_proc();/*ARGSUSED*/eeprom_proc(){	char tmp1[6];	int which_row=0;#ifdef sun4	/* Check for Sun4c */	if ( cpu_is_sun4c() )		return;#endif sun4	if (running == GO) return;	/* repaint the eeprom option popup */	if (eeprom_frame != NULL)	  frame_destroy_proc(eeprom_frame);	eeprom_get_proc();	/* read contents of eeprom */	eeprom_frame = window_create(sundiag_frame, FRAME,	    FRAME_SHOW_LABEL,	TRUE,	    FRAME_LABEL,	"EEPROM Option Menu",	    WIN_X,	(int)((STATUS_WIDTH+PERFMON_WIDTH)*frame_width)+15,	    WIN_Y,	20,            FRAME_DONE_PROC, frame_destroy_proc, 0);	eeprom_panel = window_create(eeprom_frame, PANEL, 0);	(void)panel_create_item(eeprom_panel, PANEL_MESSAGE,            PANEL_LABEL_STRING,         "LAST UPDATE:",            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row),            0);	(void)panel_create_item(eeprom_panel, PANEL_MESSAGE,            PANEL_LABEL_STRING,         hwupdate_file,            PANEL_ITEM_X,               ATTR_COL(18),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	ttya_rtsdtr_item = panel_create_item(eeprom_panel, PANEL_CYCLE,            PANEL_LABEL_STRING,         "Assert SCC Port A DTR/RTS:    ",	    PANEL_CHOICE_STRINGS,	"yes ", "no", 0,	    PANEL_VALUE,		ttya_rtsdtr_file,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	ttyb_rtsdtr_item = panel_create_item(eeprom_panel, PANEL_CYCLE,            PANEL_LABEL_STRING,         "Assert SCC Port B DTR/RTS:    ",	    PANEL_CHOICE_STRINGS,	"yes ", "no", 0,	    PANEL_VALUE,		ttyb_rtsdtr_file,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	console_item = panel_create_item(eeprom_panel, PANEL_CYCLE,            PANEL_LABEL_STRING,         "Console type:                 ",	    PANEL_CHOICE_STRINGS,	"on-board fb","ttya", "ttyb",					"VME fb","P4 fb", 0,	    PANEL_VALUE,		console_file,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	scrsize_item = panel_create_item(eeprom_panel, PANEL_CYCLE,            PANEL_LABEL_STRING,         "Screen size:                  ",	    PANEL_CHOICE_STRINGS,	"1024x1024","1152x900", 	    				"1600x1280","1440x1440", 0,	    PANEL_VALUE,		scrsize_file,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	keyclick_item = panel_create_item(eeprom_panel, PANEL_CYCLE,            PANEL_LABEL_STRING,         "Keyboard click:               ",	    PANEL_CHOICE_STRINGS,	"no ", "yes", 0,	    PANEL_VALUE,		keyclick_file,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	watchdog_reboot_item = panel_create_item(eeprom_panel, PANEL_CYCLE,            PANEL_LABEL_STRING,         "Watchdog reboot:              ",	    PANEL_CHOICE_STRINGS,	"no ", "yes", 0,	    PANEL_VALUE,		watchdog_reboot_file,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	default_boot_item = panel_create_item(eeprom_panel, PANEL_CYCLE,            PANEL_LABEL_STRING,         "Unix boot path:               ",	    PANEL_CHOICE_STRINGS,	"poll", "eeprom", 0,	    PANEL_VALUE,		default_boot_file,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	bootdev_item = panel_create_item(eeprom_panel, PANEL_TEXT,            PANEL_LABEL_STRING,         "Unix boot device:             ",	    PANEL_VALUE,		bootdev_file,	    PANEL_VALUE_DISPLAY_LENGTH,	9,	    PANEL_VALUE_STORED_LENGTH,	9,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	custom_banner_item = panel_create_item(eeprom_panel, PANEL_CYCLE,            PANEL_LABEL_STRING,         "Custom banner:                ",	    PANEL_CHOICE_STRINGS,	"no ", "yes", 0,	    PANEL_VALUE,		custom_banner_file,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	banner_item = panel_create_item(eeprom_panel, PANEL_TEXT,            PANEL_LABEL_STRING,         "Banner string:                ",	    PANEL_VALUE,		banner_file,	    PANEL_VALUE_DISPLAY_LENGTH,	8,	    PANEL_VALUE_STORED_LENGTH,	80,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	diagpath_item = panel_create_item(eeprom_panel, PANEL_TEXT,            PANEL_LABEL_STRING,         "Diagnostic boot path:         ",	    PANEL_VALUE,		diagpath_file,	    PANEL_VALUE_DISPLAY_LENGTH,	8,	    PANEL_VALUE_STORED_LENGTH,	40,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	diagdev_item = panel_create_item(eeprom_panel, PANEL_TEXT,            PANEL_LABEL_STRING,         "Diagnostic boot device:       ",	    PANEL_VALUE,		diagdev_file,	    PANEL_VALUE_DISPLAY_LENGTH,	9,	    PANEL_VALUE_STORED_LENGTH,	9,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	(void)sprintf(tmp1,"%u", kbdtype_file);	kbdtype_item = panel_create_item(eeprom_panel, PANEL_TEXT,            PANEL_LABEL_STRING,         "Keyboard type:                ",	    PANEL_VALUE,		tmp1,	    PANEL_VALUE_DISPLAY_LENGTH,	1,	    PANEL_VALUE_STORED_LENGTH,	1,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	(void)sprintf(tmp1,"%u", memsize_file);	memsize_item = panel_create_item(eeprom_panel, PANEL_TEXT,            PANEL_LABEL_STRING,         "Memory size (Mb):             ",	    PANEL_VALUE,		tmp1,	    PANEL_VALUE_DISPLAY_LENGTH,	3,	    PANEL_VALUE_STORED_LENGTH,	3,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	(void)sprintf(tmp1,"%u", memtest_file);	memtest_item = panel_create_item(eeprom_panel, PANEL_TEXT,            PANEL_LABEL_STRING,         "Memory test size (Mb):        ",	    PANEL_VALUE,		tmp1,	    PANEL_VALUE_DISPLAY_LENGTH,	3,	    PANEL_VALUE_STORED_LENGTH,	3,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	(void)sprintf(tmp1,"%u", columns_file);	columns_item = panel_create_item(eeprom_panel, PANEL_TEXT,            PANEL_LABEL_STRING,         "# of cols on screen:          ",	    PANEL_VALUE,		tmp1,	    PANEL_VALUE_DISPLAY_LENGTH,	3,	    PANEL_VALUE_STORED_LENGTH,	3,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	(void)sprintf(tmp1,"%u", rows_file);	rows_item = panel_create_item(eeprom_panel, PANEL_TEXT,            PANEL_LABEL_STRING,         "# of rows on screen:          ",	    PANEL_VALUE,		tmp1,	    PANEL_VALUE_DISPLAY_LENGTH,	2,	    PANEL_VALUE_STORED_LENGTH,	2,            PANEL_ITEM_X,               ATTR_COL(1),            PANEL_ITEM_Y,               ATTR_ROW(which_row++),            0);	(void)panel_create_item(eeprom_panel, PANEL_BUTTON,	    PANEL_LABEL_IMAGE,		panel_button_image(eeprom_panel,					"Default", 7, (Pixfont *)NULL),	    PANEL_ITEM_X,		ATTR_COL(1),	    PANEL_ITEM_Y,		ATTR_ROW(which_row),	    PANEL_NOTIFY_PROC,		eeprom_default_proc,	    0);	(void)panel_create_item(eeprom_panel, PANEL_BUTTON,	    PANEL_LABEL_IMAGE,		panel_button_image(eeprom_panel,					"Done", 7, (Pixfont *)NULL),	    PANEL_NOTIFY_PROC,		eeprom_done_proc,	    0);	(void)panel_create_item(eeprom_panel, PANEL_BUTTON,	    PANEL_LABEL_IMAGE,		panel_button_image(eeprom_panel,					"Cancel", 7, (Pixfont *)NULL),	    PANEL_NOTIFY_PROC,		eeprom_cancel_proc,	    0);	window_fit(eeprom_panel);	window_fit(eeprom_frame);        (void)window_set(eeprom_frame, WIN_SHOW, TRUE, 0);	}/****************************************************************************** * Panel notify procedure for the "default" button item in "EEPROM Options"   * * popup subwindow.							      * ******************************************************************************/static eeprom_default_proc(){/* *	Note:	Only these items are changed to default  *		values, when the default button is pressed. *		The other items in the eeprom menu remain  *		the same as the previous eeprom settings. */  (void)panel_set(keyclick_item, PANEL_VALUE, 0, 0);  (void)panel_set(watchdog_reboot_item, PANEL_VALUE, 0, 0);  (void)panel_set(default_boot_item, PANEL_VALUE, 0, 0);  (void)panel_set(custom_banner_item, PANEL_VALUE, 0, 0);  (void)panel_set(kbdtype_item, PANEL_VALUE, "0", 0);}eeprom_get_proc(){#ifdef sun4	/* Check for sun4c */	if ( cpu_is_sun4c() )		return;#endif 	read_eeprom();		/* Read the eeprom contents */	fix_chksum();		/* Fix checksums if they are wrong */  	sprintf(hwupdate_file,"%s",o_date(eeoff->ee_diag.eed_hwupdate));  	sprintf(bootdev_file,"%s", o_bootdev(eeoff->ee_diag.eed_bootdev[0]));  	sprintf(banner_file,"%s",o_banner(eeoff->ee_diag.eed_banner[0]));  	sprintf(diagdev_file,"%s", o_bootdev(eeoff->ee_diag.eed_diagdev[0]));  	sprintf(diagpath_file,"%s", o_diagpath(eeoff->ee_diag.eed_diagpath[0]));  	watchdog_reboot_file = atoi(o_bool(eeoff->ee_diag.eed_dogaction));  	default_boot_file = atoi(o_bool(eeoff->ee_diag.eed_defboot));  	keyclick_file = atoi(o_bool(eeoff->ee_diag.eed_keyclick));  	custom_banner_file = atoi(o_bool(eeoff->ee_diag.eed_showlogo));  	ttya_rtsdtr_file =atoi(o_bool(eeoff->ee_diag.eed_ttya_def.eet_rtsdtr));  	ttyb_rtsdtr_file =atoi(o_bool(eeoff->ee_diag.eed_ttyb_def.eet_rtsdtr));	memsize_file = (*(u_char *)o_byte(eeoff->ee_diag.eed_memsize));	memtest_file = (*(u_char *)o_byte(eeoff->ee_diag.eed_memtest));	kbdtype_file = (*(u_char *)o_byte(eeoff->ee_diag.eed_kbdtype));	columns_file = (*(u_char *)o_byte(eeoff->ee_diag.eed_colsize));	rows_file = (*(u_char *)o_byte(eeoff->ee_diag.eed_rowsize));  	scrsize_file =atoi(o_scrsize(eeoff->ee_diag.eed_scrsize));  	console_file =atoi(o_console(eeoff->ee_diag.eed_console));}/****************************************************************************** * Panel notify procedure for the "Done" button item in "EEPROM Options"      * * popup subwindow.							      * ******************************************************************************/eeprom_done_proc(){	(void)strcpy(bootdev_file , (char *)panel_get_value(bootdev_item)) ;	(void)strcpy(banner_file , (char *)panel_get_value(banner_item)) ;	(void)strcpy(diagdev_file ,(char *)panel_get_value(diagdev_item)) ;	(void)strcpy(diagpath_file , (char *)panel_get_value(diagpath_item)) ;	watchdog_reboot_file = (int)panel_get_value(watchdog_reboot_item) ;	default_boot_file = (int)panel_get_value(default_boot_item) ;	keyclick_file = (int)panel_get_value(keyclick_item) ;	custom_banner_file = (int)panel_get_value(custom_banner_item) ;	ttya_rtsdtr_file = (int)panel_get_value(ttya_rtsdtr_item) ;	ttyb_rtsdtr_file = (int)panel_get_value(ttyb_rtsdtr_item) ;  	memsize_file = atoi(panel_get_value(memsize_item));  	memtest_file = atoi(panel_get_value(memtest_item));  	kbdtype_file = atoi(panel_get_value(kbdtype_item));  	columns_file = atoi(panel_get_value(columns_item));  	rows_file = atoi(panel_get_value(rows_item));	scrsize_file = (int)panel_get_value(scrsize_item);	console_file = (int)panel_get_value(console_item);	write_eeprom();			/* Write new settings to eeprom. */	fix_chksum();			/* Fix checksums if wrong. */		  (void)window_set(eeprom_frame, FRAME_NO_CONFIRM, TRUE, 0);  (void)window_destroy(eeprom_frame);  eeprom_frame = NULL;}/*  * Do the write to the eeprom structure. */write_eestruct(){	i_bootdev(bootdev_file, eeoff->ee_diag.eed_bootdev[0]);	i_banner(banner_file, eeoff->ee_diag.eed_banner[0]);	i_bootdev(diagdev_file, eeoff->ee_diag.eed_diagdev[0]);	i_diagpath(diagpath_file, eeoff->ee_diag.eed_diagpath[0]);	i_bool(watchdog_reboot_file, eeoff->ee_diag.eed_dogaction);	i_bool(default_boot_file, eeoff->ee_diag.eed_defboot);	i_bool(keyclick_file, eeoff->ee_diag.eed_keyclick);	i_bool(custom_banner_file, eeoff->ee_diag.eed_showlogo);	i_bool(ttya_rtsdtr_file, eeoff->ee_diag.eed_ttya_def.eet_rtsdtr);	i_bool(ttyb_rtsdtr_file, eeoff->ee_diag.eed_ttyb_def.eet_rtsdtr);	i_byte(memsize_file, eeoff->ee_diag.eed_memsize);	i_byte(memtest_file, eeoff->ee_diag.eed_memtest);	i_byte(kbdtype_file, eeoff->ee_diag.eed_kbdtype);	i_byte(columns_file, eeoff->ee_diag.eed_colsize);	i_byte(rows_file, eeoff->ee_diag.eed_rowsize);	i_scrsize(scrsize_file, eeoff->ee_diag.eed_scrsize);	i_console(console_file, eeoff->ee_diag.eed_console);	i_date(eeoff->ee_diag.eed_hwupdate);}/****************************************************************************** * Panel notify procedure for the "Cancel" button item in "EEPROM Options"      * * popup subwindow.							      * ******************************************************************************/static eeprom_cancel_proc(){  (void)window_set(eeprom_frame, FRAME_NO_CONFIRM, TRUE, 0);  (void)window_destroy(eeprom_frame);  eeprom_frame = NULL;}/* * Read the EEPROM into *ep. */eeread(ep)	struct eeprom *ep;{	int fd;	if ((fd = open(eeprom_dev, 0)) < 0) {		fprintf(stderr, "%s: open error.", eeprom_dev);		perror(eeprom_dev);		exit(1);	}	if (read(fd, (char *)ep, sizeof (*ep)) != sizeof (*ep)) {		fprintf(stderr, "%s: read error.", eeprom_dev);		perror(eeprom_dev);		exit(1);	}	close(fd);}/* * Write out the new EEPROM *ep if there were any changes. * Update the checksums and write counts. */eewrite(ep)	struct eeprom *ep;{	int fd;	struct eeprom eeorig;	register char *op, *np;		/* old and new update dates */	int written = 0;	if ((fd = open(eeprom_dev, 2)) < 0) {		fprintf(stderr, "%s: open error.", eeprom_dev);		perror(eeprom_dev);		exit(1);	}	if (read(fd, (char *)&eeorig, sizeof (eeorig)) != sizeof (eeorig)) {		fprintf(stderr, "%s: read error.", eeprom_dev);		perror(eeprom_dev);		exit(1);	}	op = (char *)&eeorig.ee_diag.eed_hwupdate;	np = (char *)&ep->ee_diag.eed_hwupdate;	/*	 * Write diagnostic section.	 */	while (op < (char *)&eeorig.ee_resv) {		if (*np != *op) {			lseek(fd, (long) (np - (char *)ep), 0);			write(fd, np, 1);			written = 1;		}		op++;		np++;	}	if (written) {		/*

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -