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

📄 rf.c

📁 UNIX v6源代码 这几乎是最经典的unix版本 unix操作系统设计和莱昂氏unix源代码分析都是用的该版
💻 C
字号:
#/* *//* * RF disk driver */#include "../param.h"#include "../buf.h"#include "../conf.h"#include "../user.h"struct {	int	rfcs;	int	rfwc;	int	rfba;	int	rfda;	int	rfdae;};struct	devtab	rftab;struct	buf	rrfbuf;#define	NRFBLK	1024#define	RFADDR	0177460#define	GO	01#define	RCOM	02#define	WCOM	04#define	CTLCLR	0400#define	IENABLE	0100rfstrategy(abp)struct buf *abp;{	register struct buf *bp;	bp = abp;	if(bp->b_flags&B_PHYS)		mapalloc(bp);	if (bp->b_blkno >= NRFBLK*(bp->b_dev.d_minor+1)) {		bp->b_flags =| B_ERROR;		iodone(bp);		return;	}	bp->av_forw = 0;	spl5();	if (rftab.d_actf==0)		rftab.d_actf = bp;	else		rftab.d_actl->av_forw = bp;	rftab.d_actl = bp;	if (rftab.d_active==0)		rfstart();	spl0();}rfstart(){	register struct buf *bp;	if ((bp = rftab.d_actf) == 0)		return;	rftab.d_active++;	RFADDR->rfdae = bp->b_blkno.hibyte;	devstart(bp, &RFADDR->rfda, bp->b_blkno<<8, 0);}rfintr(){	register struct buf *bp;	if (rftab.d_active == 0)		return;	bp = rftab.d_actf;	rftab.d_active = 0;	if (RFADDR->rfcs < 0) {		/* error bit */		deverror(bp, RFADDR->rfcs, RFADDR->rfdae);		RFADDR->rfcs = CTLCLR;		if (++rftab.d_errcnt <= 10) {			rfstart();			return;		}		bp->b_flags =| B_ERROR;	}	rftab.d_errcnt = 0;	rftab.d_actf = bp->av_forw;	iodone(bp);	rfstart();}rfread(dev){	physio(rfstrategy, &rrfbuf, dev, B_READ);}rfwrite(dev){	physio(rfstrategy, &rrfbuf, dev, B_WRITE);}

⌨️ 快捷键说明

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