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

📄 cdr.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include "scsireq.h"longSRblank(ScsiReq *rp, uchar type, uchar track){	uchar cmd[12];	memset(cmd, 0, sizeof(cmd));	cmd[0] = ScmdBlank;	cmd[1] = type;	cmd[2] = track>>24;	cmd[3] = track>>16;	cmd[4] = track>>8;	cmd[5] = track;	rp->cmd.p = cmd;	rp->cmd.count = sizeof(cmd);	rp->data.p = cmd;	rp->data.count = 0;	rp->data.write = 1;	return SRrequest(rp);}longSRsynccache(ScsiReq *rp){	uchar cmd[10];	memset(cmd, 0, sizeof(cmd));	cmd[0] = ScmdSynccache;	rp->cmd.p = cmd;	rp->cmd.count = sizeof(cmd);	rp->data.p = cmd;	rp->data.count = 0;	rp->data.write = 1;	return SRrequest(rp);}longSRTOC(ScsiReq *rp, void *data, int nbytes, uchar format, uchar track){	uchar cmd[10];	memset(cmd, 0, sizeof(cmd));	cmd[0] = ScmdRTOC;	cmd[2] = format;	cmd[6] = track;	cmd[7] = nbytes>>8;	cmd[8] = nbytes;	rp->cmd.p = cmd;	rp->cmd.count = sizeof(cmd);	rp->data.p = data;	rp->data.count = nbytes;	rp->data.write = 0;	return SRrequest(rp);}longSRrdiscinfo(ScsiReq *rp, void *data, int nbytes){	uchar cmd[10];	memset(cmd, 0, sizeof(cmd));	cmd[0] = ScmdRdiscinfo;	cmd[7] = nbytes>>8;	cmd[8] = nbytes;	rp->cmd.p = cmd;	rp->cmd.count = sizeof(cmd);	rp->data.p = data;	rp->data.count = nbytes;	rp->data.write = 0;	return SRrequest(rp);}longSRrtrackinfo(ScsiReq *rp, void *data, int nbytes, int track){	uchar cmd[10];	memset(cmd, 0, sizeof(cmd));	cmd[0] = ScmdRtrackinfo;	cmd[1] = 0x01;	cmd[2] = track>>24;	cmd[3] = track>>16;	cmd[4] = track>>8;	cmd[5] = track;	cmd[7] = nbytes>>8;	cmd[8] = nbytes;	rp->cmd.p = cmd;	rp->cmd.count = sizeof(cmd);	rp->data.p = data;	rp->data.count = nbytes;	rp->data.write = 0;	return SRrequest(rp);}longSRfwaddr(ScsiReq *rp, uchar track, uchar mode, uchar npa, uchar *data){	uchar cmd[10];	memset(cmd, 0, sizeof(cmd));	cmd[0] = ScmdFwaddr;	cmd[2] = track;	cmd[3] = mode;	cmd[7] = npa;	rp->cmd.p = cmd;	rp->cmd.count = sizeof(cmd);	rp->data.p = data;	rp->data.count = MaxDirData;	rp->data.write = 0;	return SRrequest(rp);}longSRtreserve(ScsiReq *rp, long nbytes){	uchar cmd[10];	long n;	if((nbytes % rp->lbsize)){		rp->status = Status_BADARG;		return -1;	}	memset(cmd, 0, sizeof(cmd));	cmd[0] = ScmdTreserve;	n = nbytes/rp->lbsize;	cmd[5] = n>>24;	cmd[6] = n>>16;	cmd[7] = n>>8;	cmd[8] = n;	rp->cmd.p = cmd;	rp->cmd.count = sizeof(cmd);	rp->data.p = cmd;	rp->data.count = 0;	rp->data.write = 1;	return SRrequest(rp);}longSRtinfo(ScsiReq *rp, uchar track, uchar *data){	uchar cmd[10];	memset(cmd, 0, sizeof(cmd));	cmd[0] = ScmdTinfo;	cmd[5] = track;	cmd[8] = MaxDirData;	rp->cmd.p = cmd;	rp->cmd.count = sizeof(cmd);	rp->data.p = data;	rp->data.count = MaxDirData;	rp->data.write = 0;	return SRrequest(rp);}longSRwtrack(ScsiReq *rp, void *buf, long nbytes, uchar track, uchar mode){	uchar cmd[10];	long m, n;	if((nbytes % rp->lbsize) || nbytes > MaxIOsize){		rp->status = Status_BADARG;		return -1;	}	memset(cmd, 0, sizeof(cmd));	cmd[0] = ScmdTwrite;	cmd[5] = track;	cmd[6] = mode;	n = nbytes/rp->lbsize;	cmd[7] = n>>8;	cmd[8] = n;	rp->cmd.p = cmd;	rp->cmd.count = sizeof(cmd);	rp->data.p = buf;	rp->data.count = nbytes;	rp->data.write = 1;	m = SRrequest(rp);	if(m < 0)		return -1;	rp->offset += n;	return m;}longSRmload(ScsiReq *rp, uchar code){	uchar cmd[12];	memset(cmd, 0, sizeof(cmd));	cmd[0] = ScmdMload;	cmd[8] = code;	rp->cmd.p = cmd;	rp->cmd.count = sizeof(cmd);	rp->data.p = cmd;	rp->data.count = 0;	rp->data.write = 1;	return SRrequest(rp);}longSRfixation(ScsiReq *rp, uchar type){	uchar cmd[10];	memset(cmd, 0, sizeof(cmd));	cmd[0] = ScmdFixation;	cmd[8] = type;	rp->cmd.p = cmd;	rp->cmd.count = sizeof(cmd);	rp->data.p = cmd;	rp->data.count = 0;	rp->data.write = 1;	return SRrequest(rp);}

⌨️ 快捷键说明

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