?? rf.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 + -