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

📄 openprom.h

📁 操作系统SunOS 4.1.3版本的源码
💻 H
字号:
/* * @(#)openprom.h 1.1 92/07/30 SMI * Copyright (c) 1989, 1990 Sun Microsystems, Inc. * *//* * NOTICE: This should only be included by a very limitted number * of PROM library functions that interface directly to the PROM. * All others should use the library interface functions to avoid * dealing with the various differences in the PROM interface versions. * * This file defines the interface between the Open Boot Prom Monitor * and the programs that may request its services. * This interface, defined as a vector of pointers to useful things, * has been traditionally referred to as `the romvec'. * * The address of the romvec is passed as the first argument to the standalone * program, obviating the need for the address to be at a known fixed location. * Typically, the stand-alone's srt0.s file (which contains the _start entry) * would take care of all of `this'. * In SPARC assembler, `this' would be: * *	.data *	.global _romp * _romp: *	.word 0 *	.text * _start: *	set	_romp, %o1	! any register other than %o0 will probably do *	st	%o0, [%o1]	! save it away *	.......			! set up your stack, etc...... */#ifndef _mon_openprom_h#define	_mon_openprom_h#include <mon/obpdefs.h>extern struct sunromvec *romp;		/* as per the above discussion *//* * Autoconfig operations */struct config_ops {	dnode_t	(*devr_next)();		/* next(nodeid); */	dnode_t	(*devr_child)();	/* child(nodeid); */	int	(*devr_getproplen)();	/* getproplen(nodeid, name); */	int	(*devr_getprop)();	/* getprop(nodeid, name, buf); */	int	(*devr_setprop)();	/* setprop(nodeid, name, val, size); */	caddr_t	(*devr_nextprop)();	/* nextprop(nodeid, latpropname); */};/* * Other than the first four fields of the sunromvec, * the fields in the V3 romvec are not aligned since * they don't have compatability with the old fields. * * KEY: *		op_XXX:		Interfaces common to *all* versions. *		v_XXX:		V0 Interface (included in V2 for compatability) *		op2_XXX:	V2 and later only *		op3_XXX:	V3 and later only * *	It's a fatal error (results are completely undefined and range from *	unkown behaviour to deadlock) to call a non-existant interface. *	(I.e.: A V0 interface from a V3 PROM or an MP-only interface on a *	UP.)  The structures line up for programmers convenience only! */struct sunromvec {	u_int		op_magic;	  /* magic mushroom */	u_int		op_romvec_version; /* Version number of "romvec" */	u_int		op_plugin_version; /* Plugin Architecture version */	u_int		op_mon_id;	  /* version # of monitor firmware */	struct memlist	**v_physmemory;	/* total physical memory list */	struct memlist	**v_virtmemory;	/* taken virtual memory list */	struct memlist	**v_availmemory; /* available physical memory */	struct config_ops *op_config_ops; /* dev_info configuration access */	/*	 * storage device access facilities	 */	char		**v_bootcommand;  /* expanded with PROM defaults */	u_int		(*v_open)();	/* v_open(char *name); */	u_int		(*v_close)();	/* v_close(ihandle_t fileid); */	/*	 * block-oriented device access	 */	u_int		(*v_read_blocks)();	u_int		(*v_write_blocks)();	/*	 * network device access	 */	u_int		(*v_xmit_packet)();	u_int		(*v_poll_packet)();	/*	 * byte-oriented device access	 */	u_int		(*v_read_bytes)();	u_int		(*v_write_bytes)();	/*	 * 'File' access - i.e.,  Tapes for byte devices.	 * TFTP for network devices	 */	u_int 		(*v_seek)();	/*	 * single character I/O	 */	u_char		*v_insource;	/* Current source of input */	u_char		*v_outsink;	/* Currrent output sink */	u_char		(*v_getchar)();	/* Get a character from input */	void		(*v_putchar)();	/* Put a character to output sink. */	int		(*v_mayget)();	/* Maybe get a character, or "-1". */	int		(*v_mayput)();	/* Maybe put a character, or "-1". */	/*	 * Frame buffer	 */	void		(*v_fwritestr)(); /* write a string to framebuffer */	/*	 * Miscellaneous Goodies	 */	void		(*op_boot)();	/* reboot machine */	int		(*v_printf)();	/* handles fmt string plus 5 args */	void		(*op_enter)();	/* Entry for keyboard abort. */	int 		*op_milliseconds; /* Counts in milliseconds. */	void		(*op_exit)();	/* Exit from user program. */	/*	 * Note:  Different semantics for V0 versus other op_vector_cmd:	 */	void		(**op_vector_cmd)(); /* Handler for the vector */	void		(*op_interpret)();  /* interpret forth string */	struct bootparam **v_bootparam;	/* boot parameters and `old' style */					/* device access */	u_int		(*v_mac_address)(); /* Copyout ether address */				/* v_mac_address(int fd, caddr_t buf); */	/*	 * new V2 openprom stuff	 */	char	**op2_bootpath;		/* Full path name of boot device */	char	**op2_bootargs;		/* Boot command line after dev spec */	ihandle_t	*op2_stdin;		/* Console input device */	ihandle_t	*op2_stdout;		/* Console output device */	phandle_t	(*op2_phandle)(); /* Convert ihandle to phandle */						/* op2_phandle(ihandle_t); */	caddr_t	(*op2_alloc)();		/* Allocate physical memory */				/* op2_alloc(caddr_t virthint, u_int size); */	void	(*op2_free)();		/* Deallocate physical memory */				/* op2_free(caddr_t virt, u_int size); */	caddr_t	(*op2_map)();		/* Create device mapping */				/* (*op2_map)(caddr_t virthint, u_int space, */					/* u_int phys, u_int size); */	void	(*op2_unmap)();		/* Destroy device mapping */				/* *op2_unmap(caddr_t virt, u_int size); */	ihandle_t  (*op2_open)();	/* ihandle_t op2_open(char *name); */	u_int	(*op2_close)();		/* u_int op2_close(ihandle_t fileid); */	int	(*op2_read)();			/* op2_read(ihandle_t fileid, caddr_t buf, u_int len) */	int	(*op2_write)();			/* op2_write(ihandle_t f_id, caddr_t buf, u_int len) */	int	(*op2_seek)();			/* op2_seek(ihandle_t f_id, u_int offsh, u_int offsl) */	void	(*op2_chain)();				/* op2_chain)(caddr_t virt, u_int size,  */					/* caddr_t entry, caddr_t argaddr,  */					/* u_int arglen); */	void	(*op2_release)();  /* op2_release(caddr_t virt, u_int size); */	/*	 * End V2 stuff	 */	int	*v_reserved[15];	/*	 * Sun4c specific romvec routines (From sys/sun4c/machine/romvec.h)	 * Common to all PROM versions.	 */	void	(*op_setcxsegmap)();	/* Set segment in any context. */	/*	 * V3 MP only functions: It's a fatal error to call these from a UP.	 */	int (*op3_startcpu)();				/* op3_startcpu(dnode_t moduleid, */					/* dev_reg_t contextable, */					/* int whichcontext,  */					/* addr_t pc); */	int (*op3_stopcpu)();	/* op3_stopcpu(dnode_t); */	int (*op3_idlecpu)();	/* op3_idlecpu(dnode_t); */	int (*op3_resumecpu)();	/* op3_resumecpu(dnode_t); */};/* * XXX - This is not, strictly speaking, correct: we should never * depend upon "magic addresses". However, the MONSTART/MONEND * addresses are wired into too many standalones, and they are * not likely to change in any event. */#if	defined(sun4c) || defined(sun4m)#define	MONSTART	(0xffd00000)#define	MONEND		(0xfff00000)#endif/* * Common Interfaces in all OBP versions: *//* * boot(char *bootcommand) */#define	OBP_BOOT		(*romp->op_boot)/* * Abort/enter to the monitor (may be resumed) */#define	OBP_ENTER_MON		(*romp->op_enter)/* * Abort/exit to monitor (may not be resumed) */#define	OBP_EXIT_TO_MON		(*romp->op_exit)/* * PROM Interpreter: (char *forth_string) */#define	OBP_INTERPRET		(*romp->op_interpret)/* * Callback handler:  (Set it to your handler) * * WARNING: The handler code is different in V0 vs. Later interfaces. */#define	OBP_CB_HANDLER	(*romp->op_vector_cmd)/* * Unreferenced time in milliseconds */#define	OBP_MILLISECONDS	(*romp->op_milliseconds)/* * Configuration ops: (all OBP versions) */#define	OBP_DEVR_NEXT		(*romp->op_config_ops->devr_next)#define	OBP_DEVR_CHILD		(*romp->op_config_ops->devr_child)#define	OBP_DEVR_GETPROPLEN	(*romp->op_config_ops->devr_getproplen)#define	OBP_DEVR_GETPROP	(*romp->op_config_ops->devr_getprop)#define	OBP_DEVR_SETPROP	(*romp->op_config_ops->devr_setprop)#define	OBP_DEVR_NEXTPROP	(*romp->op_config_ops->devr_nextprop)/* * sun4/sun4c ONLY... For Sun MMU's  It's undefined to use these on other * architectures, SO DON'T DO IT! */#define	OBP_SETCXSEGMAP		(*romp->op_setcxsegmap)/* * V0/V2 Only Interfaces: (They're only in V2 for compatability.) * Where possible, should use the V2/V3 interfaces.  For V2, probably * the only required interface is the insource/outsink since there's * no V2 interface corresponding to root node properties stdin-path/stdout-path. */#define	OBP_V0_PHYSMEMORY	(*romp->v_physmemory)#define	OBP_V0_VIRTMEMORY	(*romp->v_virtmemory)#define	OBP_V0_AVAILMEMORY	(*romp->v_availmemory)#define	OBP_V0_BOOTCMD		(*romp->v_bootcmd)#define	OBP_V0_OPEN		(*romp->v_open)#define	OBP_V0_CLOSE		(*romp->v_close)#define	OBP_V0_READ_BLOCKS	(*romp->v_read_blocks)#define	OBP_V0_WRITE_BLOCKS	(*romp->v_write_blocks)#define	OBP_V0_XMIT_PACKET	(*romp->v_xmit_packet)#define	OBP_V0_POLL_PACKET	(*romp->v_poll_packet)#define	OBP_V0_READ_BYTES	(*romp->v_read_bytes)#define	OBP_V0_WRITE_BYTES	(*romp->v_write_bytes)#define	OBP_V0_SEEK		(*romp->v_seek)#define	OBP_V0_INSOURCE		(*romp->v_insource)#define	OBP_V0_OUTSINK		(*romp->v_outsink)#define	OBP_V0_GETCHAR		(*romp->v_getchar)#define	OBP_V0_PUTCHAR		(*romp->v_putchar)#define	OBP_V0_MAYGET		(*romp->v_mayget)#define	OBP_V0_MAYPUT		(*romp->v_mayput)#define	OBP_V0_FWRITESTR	(*romp->v_fwritestr)#define	OBP_V0_PRINTF		(*romp->v_printf)#define	OBP_V0_BOOTPARAM	(*romp->v_bootparam)#define	OBP_V0_MAC_ADDRESS	(*romp->v_mac_address)/* * V2 and V3 interfaces: */#define	OBP_V2_BOOTPATH		(*romp->op2_bootpath)#define	OBP_V2_BOOTARGS		(*romp->op2_bootargs)#define	OBP_V2_STDIN		(*romp->op2_stdin)#define	OBP_V2_STDOUT		(*romp->op2_stdout)#define	OBP_V2_PHANDLE		(*romp->op2_phandle)#define	OBP_V2_ALLOC		(*romp->op2_alloc)#define	OBP_V2_FREE		(*romp->op2_free)#define	OBP_V2_MAP		(*romp->op2_map)#define	OBP_V2_UNMAP		(*romp->op2_unmap)#define	OBP_V2_OPEN		(*romp->op2_open)#define	OBP_V2_CLOSE		(*romp->op2_close)#define	OBP_V2_READ		(*romp->op2_read)#define	OBP_V2_WRITE		(*romp->op2_write)#define	OBP_V2_SEEK		(*romp->op2_seek)#define	OBP_V2_CHAIN		(*romp->op2_chain)#define	OBP_V2_RELEASE		(*romp->op2_release)/* * V3 Only MP Interfaces: */#define	OBP_V3_STARTCPU		(*romp->op3_startcpu)#define	OBP_V3_STOPCPU		(*romp->op3_stopcpu)#define	OBP_V3_IDLECPU		(*romp->op3_idlecpu)#define	OBP_V3_RESUMECPU	(*romp->op3_resumecpu)#endif _mon_openprom_h

⌨️ 快捷键说明

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