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

📄 rk.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
/* * Copyright (c) 1986 Regents of the University of California. * All rights reserved.  The Berkeley software License Agreement * specifies the terms and conditions for redistribution. * *	@(#)rk.c	2.1 (2.11BSD) 1995/06/08 *//* * RK disk driver */#include <sys/param.h>#include <sys/inode.h>#include "saio.h"/* bits in rkcs */#define RKCS_ERR        0100000         /* error */#define RKCS_HE         0040000         /* hard error */#define RKCS_SCP        0020000         /* search complete *//* bit 12 is unused */#define RKCS_INHBA      0004000         /* inhibit bus address increment */#define RKCS_FMT        0002000         /* format *//* bit 9 is unused */#define RKCS_SSE        0000400         /* stop on soft error */#define RKCS_RDY        0000200         /* control ready */#define RKCS_IDE        0000100         /* interrupt on done enable *//* bits 5-4 are the UNIBUS extension bits *//* bits 3-1 is the command */#define RKCS_GO         0000001         /* go */#define RKCS_BITS       \"\10\20ERR\17HE\16SCP\15INHBA\14FMT\13SSE\12RDY\11IDE\1GO"/* commands */#define RKCS_RESET      0000000         /* control reset */#define RKCS_WCOM       0000002         /* write */#define RKCS_RCOM       0000004         /* read */#define RKCS_WCHK       0000006         /* write check */#define RKCS_SEEK       0000010         /* seek */#define RKCS_RCHK       0000012         /* read check */#define RKCS_DRESET     0000014         /* drive reset */#define RKCS_WLCK       0000016         /* write lock */struct  rkdevice{        short   rkds;        short   rker;        short   rkcs;        short   rkwc;        caddr_t rkba;        short   rkda;};#define	NRK	2	struct	rkdevice *RKcsr[NRK + 1] =		{		(struct rkdevice *)0177400,		(struct	rkdevice *)0,		(struct rkdevice *)-1		};rkstrategy(io, func)	register struct iob *io;{	register com;	register struct rkdevice *rkaddr;	daddr_t bn;	int dn, cn, sn, bae, lo16;	bn = io->i_bn;	dn = io->i_unit;	cn = bn/12;	sn = bn%12;	rkaddr = RKcsr[io->i_ctlr];	rkaddr->rkda = (dn<<13) | (cn<<4) | sn;	rkaddr->rkba = (caddr_t)lo16;	rkaddr->rkwc = -(io->i_cc>>1);	com = (bae<<4)|RKCS_GO;	if (func == READ)		com |= RKCS_RCOM;	else		com |= RKCS_WCOM;	rkaddr->rkcs = com;	while ((rkaddr->rkcs & RKCS_RDY) == 0)		continue;	if (rkaddr->rkcs<0) {	/* error bit */		printf("RK%d,%d err cy=%d sc=%d, er=%o, ds=%o\n",		    io->i_ctlr, io->i_unit, cn, sn, rkaddr->rker, rkaddr->rkds);		return(-1);	}	return(io->i_cc);}

⌨️ 快捷键说明

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