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

📄 boot_tp.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#if !defined(lint) && !defined(BOOTBLOCK)static char	sccsid[] = "@(#)boot_tp.c 1.1 92/07/30 SMI";#endif/* * Copyright (c) 1989 Sun Microsystems, Inc. * * SAIO tape device driver using OPENPROMs ROMvec calls */#include <sys/types.h>#include <stand/saio.h>#include "boot/conf.h"extern int romdev, rompclose(), nullprobe(), nullboot();int tapeopen(), tapestrategy();struct boottab tapedriver = {	"tp", nullprobe, nullboot, tapeopen, rompclose, tapestrategy,	0, 	/* b_desc  descriptive string */	0, 	/* b_devinfo memory allocation stuff */};inttapeopen(sip)register struct saioreq *sip;{	char namebuf[50];	register struct binfo *bd;#ifndef	sun4m	extern void formatdevname();#endif	sun4m	if (prom_getversion() > 0) {		bd = (struct binfo *)sip->si_devdata;		/* get path name from si_devdata */		romdev = prom_open(bd->name);		/* save file descriptor into si_devdata */		bd->ihandle = romdev;		return (prom_seek(romdev, 0, 0));	}#ifndef sun4m	formatdevname(namebuf, sip);#ifdef DEBUG	printf("tapeopen(%s)\n", namebuf);#endif DEBUG	if ((romdev = prom_open(namebuf)) < 0)		return (-1);#ifdef DEBUG	printf("skipping %d files\n", sip->si_boff);#endif DEBUG	return (prom_seek(romdev, sip->si_boff, 0));#endif !sun4m}/*ARGSUSED*/inttapestrategy(sip, rw)register struct saioreq *sip;register int rw;{	int i;	register struct binfo *bd;#ifdef DEBUG	printf("tapestrategy(): %x %x %x ", sip->si_cc, sip->si_ma);#endif DEBUG	if (prom_getversion() > 0) {		/* get file descriptor */		bd = (struct binfo *)sip->si_devdata;		romdev = bd->ihandle;		if (rw == READ)			i = (*romp->op2_read)(romdev, sip->si_ma, sip->si_cc);		else			i = (*romp->op2_write)(romdev, sip->si_ma, sip->si_cc);#ifdef DEBUG		printf("xfered %x bytes\n", i);#endif DEBUG		return (sip->si_cc);	}#ifndef sun4m	/*	 * XXX: so what does offset mean??	 * offset from starting position?  offset from current position?	 * I'll give it 0 for now	 */	if (rw == READ)		i = (*romp->v_read_bytes)(romdev, sip->si_cc, 0, sip->si_ma);	else		i = (*romp->v_write_bytes)(romdev, sip->si_cc, 0, sip->si_ma);#ifdef DEBUG	printf("xfered %x bytes\n", i);#endif DEBUG	return (sip->si_cc);#endif !sun4m}

⌨️ 快捷键说明

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