亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? scsi-osf.c

?? 刻錄光盤的程序
?? C
字號:
/* @(#)scsi-osf.c	1.12 99/10/15 Copyright 1998 J. Schilling */#ifndef lintstatic	char __sccsid[] =	"@(#)scsi-osf.c	1.12 99/10/15 Copyright 1998 J. Schilling";#endif/* *	Interface for Digital UNIX (OSF/1 generic SCSI implementation (/dev/cam). * *	Created out of the hacks from: *		Stefan Traby <stefan@sime.com> and *		Bruno Achauer <bruno@tk.uni-linz.ac.at> * *	Warning: you may change this source, but if you do that *	you need to change the _scg_version and _scg_auth* string below. *	You may not return "schily" for an SCG_AUTHOR request anymore. *	Choose your name instead of "schily" and make clear that the version *	string is related to a modified source. * *	Copyright (c) 1998 J. Schilling *//* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING.  If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */#include <sys/types.h>#include <io/common/iotypes.h>#include <io/cam/cam.h>#include <io/cam/uagt.h> /* *	Warning: you may change this source, but if you do that *	you need to change the _scg_version and _scg_auth* string below. *	You may not return "schily" for an SCG_AUTHOR request anymore. *	Choose your name instead of "schily" and make clear that the version *	string is related to a modified source. */LOCAL	char	_scg_trans_version[] = "scsi-osf.c-1.12";	/* The version for this transport*/#define	MAX_SCG		16	/* Max # of SCSI controllers */#define	MAX_TGT		16#define	MAX_LUN		8struct scg_local {	int	scgfile;	/* Used for ioctl()	*/	short	scgfiles[MAX_SCG][MAX_TGT][MAX_LUN];};#define scglocal(p)	((struct scg_local *)((p)->local)) LOCAL	BOOL	scsi_checktgt	__PR((SCSI *scgp, int f, int busno, int tgt, int tlun));/* * I don't have any documentation about CAM */#define	MAX_DMA_OSF_CAM	(64*1024)#ifndef	AUTO_SENSE_LEN#	define	AUTO_SENSE_LEN	32	/* SCG_MAX_SENSE */#endif/* * Return version information for the low level SCSI transport code. * This has been introduced to make it easier to trace down problems * in applications. */EXPORT char *scg__version(scgp, what)	SCSI	*scgp;	int	what;{	if (scgp != (SCSI *)0) {		switch (what) {		case SCG_VERSION:			return (_scg_trans_version);		/*		 * If you changed this source, you are not allowed to		 * return "schily" for the SCG_AUTHOR request.		 */		case SCG_AUTHOR:			return (_scg_auth_schily);		case SCG_SCCS_ID:			return (__sccsid);		}	}	return ((char *)0);}EXPORT intscsi_open(scgp, device, busno, tgt, tlun)	SCSI	*scgp;	char	*device;	int	busno;	int	tgt;	int	tlun;{	register int	b;	register int	t;	register int	l;	if (busno >= MAX_SCG || tgt >= MAX_TGT || tlun >= MAX_LUN) {		errno = EINVAL;		if (scgp->errstr)			js_snprintf(scgp->errstr, SCSI_ERRSTR_SIZE,				"Illegal value for busno, target or lun '%d,%d,%d'",				busno, tgt, tlun);		return (-1);	}	if ((device != NULL && *device != '\0') || (busno == -2 && tgt == -2)) {		errno = EINVAL;		if (scgp->errstr)			js_snprintf(scgp->errstr, SCSI_ERRSTR_SIZE,				"Open by 'devname' not supported on this OS");		return (-1);	}	if (scgp->local == NULL) {		scgp->local = malloc(sizeof(struct scg_local));		if (scgp->local == NULL)			return (0);		scglocal(scgp)->scgfile = -1;		for (b=0; b < MAX_SCG; b++) {			for (t=0; t < MAX_TGT; t++) {				for (l=0; l < MAX_LUN ; l++)					scglocal(scgp)->scgfiles[b][t][l] = 0;			}		}	}	if (scglocal(scgp)->scgfile != -1)	/* multiple opens ??? */		return (1);			/* not yet ready .... */	if ((scglocal(scgp)->scgfile = open("/dev/cam", O_RDWR, 0)) < 0) {		if (scgp->errstr)			js_snprintf(scgp->errstr, SCSI_ERRSTR_SIZE,				"Cannot open '/dev/cam'");		return (-1);	}	if (busno >= 0 && tgt >= 0 && tlun >= 0) {		/* scsi_checktgt() ??? */		for (l=0; l < MAX_LUN ; l++)			scglocal(scgp)->scgfiles[b][t][l] = 1;		return (1);	}	/*	 * There seems to be no clean way to check whether	 * a SCSI bus is present in the current system.	 * scsi_checktgt() is used as a workaround for this problem.	 */	for (b=0; b < MAX_SCG; b++) {		for (t=0; t < MAX_TGT; t++) {			if (scsi_checktgt(scgp, scglocal(scgp)->scgfile, b, t, 0)) {				for (l=0; l < MAX_LUN ; l++)					scglocal(scgp)->scgfiles[b][t][l] = 1;				/*				 * Found a target on this bus.				 * Comment the 'break' for a complete scan.				 */				break;			}		}	}	return (1);}EXPORT intscsi_close(scgp)	SCSI	*scgp;{	if (scgp->local == NULL)		return (-1);	if (scglocal(scgp)->scgfile >= 0)		close(scglocal(scgp)->scgfile);	scglocal(scgp)->scgfile = -1;	return (0);}/* * We send a test unit ready command to the target to check whether the * OS is considering this target to be valid. */LOCAL BOOLscsi_checktgt(scgp, f, busno, tgt, tlun)	SCSI	*scgp;	int	f;	int	busno;	int	tgt;	int	tlun;{	struct scg_cmd	sc;	int	obus = scgp->scsibus;	int	otgt = scgp->target;	int	olun = scgp->lun;	scgp->scsibus = busno;	scgp->target  = tgt;	scgp->lun     = tlun;		fillbytes((caddr_t)&sc, sizeof(sc), '\0');	sc.addr = (caddr_t)0;	sc.size = 0;	sc.flags = SCG_DISRE_ENA | SCG_SILENT;	sc.cdb_len = SC_G0_CDBLEN;	sc.sense_len = CCS_SENSE_LEN;	sc.target = scgp->target;	sc.cdb.g0_cdb.cmd = SC_TEST_UNIT_READY;	sc.cdb.g0_cdb.lun = scgp->lun;	scsi_send(scgp, f, &sc);	scgp->scsibus = obus;	scgp->target  = otgt;	scgp->lun     = olun;	if (sc.error != SCG_FATAL)		return (TRUE);	return (sc.ux_errno != EINVAL);}LOCAL longscsi_maxdma(scgp)	SCSI	*scgp;{	long maxdma = MAX_DMA_OSF_CAM;	return (maxdma);}EXPORT void *scsi_getbuf(scgp, amt)	SCSI	*scgp;	long	amt;{	if (amt <= 0 || amt > scsi_maxdma(scgp))		return ((void *)0);	if (scgp->debug)		printf("scsi_getbuf: %ld bytes\n", amt);	scgp->bufbase = valloc((size_t)(amt));	return (scgp->bufbase);}EXPORT voidscsi_freebuf(scgp)	SCSI	*scgp;{	if (scgp->bufbase)		free(scgp->bufbase);	scgp->bufbase = NULL;}EXPORTBOOL scsi_havebus(scgp, busno)	SCSI	*scgp;	int	busno;{	register int	t;	if (busno < 0 || busno >= MAX_SCG)		return (FALSE);	if (scgp->local == NULL)		return (FALSE);	for (t=0; t < MAX_TGT; t++) {		if (scglocal(scgp)->scgfiles[busno][t][0] != 0)			return (TRUE);	}	return (FALSE);}EXPORTint scsi_fileno(scgp, busno, tgt, tlun)	SCSI	*scgp;	int	busno;	int	tgt;	int	tlun;{	if (scgp->local == NULL)		return (-1);	return (busno < 0 || busno >= MAX_SCG) ? -1 : scglocal(scgp)->scgfile;}EXPORT intscsi_initiator_id(scgp)	SCSI	*scgp;{	return (-1);}EXPORTint scsi_isatapi(scgp)	SCSI	*scgp;{	return (FALSE);}EXPORTint scsireset(scgp)	SCSI	*scgp;{#ifdef	XXX	int	f = scsi_fileno(scgp, scgp->scsibus, scgp->target, scgp->lun);	return (ioctl(f, SCGIORESET, 0));#else	return (-1);#endif}LOCAL intscsi_send(scgp, f, sp)	SCSI		*scgp;	int		f;	struct scg_cmd	*sp;{	CCB_SCSIIO ccb;	UAGT_CAM_CCB ua;	unsigned char  *cdb;	CCB_RELSIM relsim;	UAGT_CAM_CCB relua;	int             i;	if (f < 0) {		sp->error = SCG_FATAL;		return (0);	}	fillbytes(&ua, sizeof(UAGT_CAM_CCB), 0);	fillbytes(&ccb, sizeof(CCB_SCSIIO), 0);	ua.uagt_ccb = (CCB_HEADER *) &ccb;	ua.uagt_ccblen = sizeof(CCB_SCSIIO);	ccb.cam_ch.my_addr = (CCB_HEADER *) &ccb;	ccb.cam_ch.cam_ccb_len = sizeof(CCB_SCSIIO);	ua.uagt_snsbuf = ccb.cam_sense_ptr = sp->u_sense.cmd_sense;	ua.uagt_snslen = ccb.cam_sense_len = AUTO_SENSE_LEN;	cdb = (unsigned char *) ccb.cam_cdb_io.cam_cdb_bytes;	ccb.cam_timeout = sp->timeout;	ccb.cam_data_ptr = ua.uagt_buffer = (u_char *) sp->addr;	ccb.cam_dxfer_len = ua.uagt_buflen = sp->size;	ccb.cam_ch.cam_func_code = XPT_SCSI_IO;	ccb.cam_ch.cam_flags = 0;	/* CAM_DIS_CALLBACK; */	if (sp->size == 0) {		ccb.cam_data_ptr = ua.uagt_buffer = (u_char *) NULL;		ccb.cam_ch.cam_flags |= CAM_DIR_NONE;	} else {		if (sp->flags & SCG_RECV_DATA) {			ccb.cam_ch.cam_flags |= CAM_DIR_IN;		} else {			ccb.cam_ch.cam_flags |= CAM_DIR_OUT;		}	}	ccb.cam_cdb_len = sp->cdb_len;	for (i = 0; i < sp->cdb_len; i++)		cdb[i] = sp->cdb.cmd_cdb[i];	ccb.cam_ch.cam_path_id	  = scgp->scsibus;	ccb.cam_ch.cam_target_id  = scgp->target;	ccb.cam_ch.cam_target_lun = scgp->lun;	sp->sense_count = 0;	sp->ux_errno = 0;	sp->error = SCG_NO_ERROR;	if (ioctl(f, UAGT_CAM_IO, (caddr_t) &ua) < 0) {		sp->ux_errno = geterrno();		sp->error = SCG_FATAL;		if (scgp->debug) {			errmsg("ioctl(f, UAGT_CAM_IO, dev=%d,%d,%d) failed.\n",					scgp->scsibus, scgp->target, scgp->lun);		}		return (0);	}	if (scgp->debug) {		errmsgno(EX_BAD, "cam_status = 0x%.2X dev=%d,%d,%d\n",					ccb.cam_ch.cam_status,					scgp->scsibus, scgp->target, scgp->lun);		fflush(stderr);	}	switch (ccb.cam_ch.cam_status & CAM_STATUS_MASK) {	case CAM_REQ_CMP:	break;	case CAM_SEL_TIMEOUT:	sp->error = SCG_FATAL;				sp->ux_errno = EIO;				break;	case CAM_CMD_TIMEOUT:	sp->error = SCG_TIMEOUT;				sp->ux_errno = EIO;				break;	default:		sp->error = SCG_RETRYABLE;				sp->ux_errno = EIO;				break;	}	sp->u_scb.cmd_scb[0] = ccb.cam_scsi_status;	if (ccb.cam_ch.cam_status & CAM_AUTOSNS_VALID) {		sp->sense_count = MIN(ccb.cam_sense_len - ccb.cam_sense_resid,			SCG_MAX_SENSE);		sp->sense_count = MIN(sp->sense_count, sp->sense_len);		if (sp->sense_len < 0)			sp->sense_count = 0;	}	sp->resid = ccb.cam_resid;	/*	 * this is perfectly wrong.	 * But without this, we hang...	 */	if (ccb.cam_ch.cam_status & CAM_SIM_QFRZN) {		fillbytes(&relsim, sizeof(CCB_RELSIM), 0);		relsim.cam_ch.cam_ccb_len = sizeof(CCB_SCSIIO);		relsim.cam_ch.cam_func_code = XPT_REL_SIMQ;		relsim.cam_ch.cam_flags = CAM_DIR_IN | CAM_DIS_CALLBACK;		relsim.cam_ch.cam_path_id	= scgp->scsibus;		relsim.cam_ch.cam_target_id	= scgp->target;		relsim.cam_ch.cam_target_lun	= scgp->lun;		relua.uagt_ccb = (struct ccb_header *) & relsim;	/* wrong cast */		relua.uagt_ccblen = sizeof(relsim);		relua.uagt_buffer = NULL;		relua.uagt_buflen = 0;		if (ioctl(f, UAGT_CAM_IO, (caddr_t) & relua) < 0)			errmsg("DEC CAM -> LMA\n");	}	return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级专区免费大片| 久久免费国产精品| 精品影视av免费| 亚洲精品水蜜桃| 久久日韩粉嫩一区二区三区| 在线免费不卡视频| 国产精品自拍网站| 免费在线观看精品| 亚洲最大的成人av| 国产精品家庭影院| 国产网站一区二区| 欧美大白屁股肥臀xxxxxx| 欧美无砖砖区免费| 色哟哟在线观看一区二区三区| 国产一区二区视频在线| 日韩成人一区二区三区在线观看| 亚洲精品国产高清久久伦理二区| 欧美韩国日本不卡| 久久精品视频一区二区| 欧美大片一区二区三区| 91精品久久久久久久91蜜桃| 色噜噜狠狠成人网p站| 成人一区二区三区在线观看| 激情综合网激情| 免费一级片91| 秋霞影院一区二区| 日韩黄色小视频| 丝袜亚洲另类欧美| 亚洲一区欧美一区| 一区二区三区**美女毛片| 中文字幕一区二区三区在线播放 | eeuss鲁片一区二区三区在线看 | 91麻豆精品视频| 不卡视频免费播放| av在线播放一区二区三区| 成人动漫一区二区三区| www.激情成人| 色婷婷综合久久久久中文一区二区 | 欧美成人精品福利| 精品伦理精品一区| 老司机午夜精品99久久| 日韩精品一二三四| 美国毛片一区二区| 老司机免费视频一区二区三区| 久久福利资源站| 精品一区二区三区在线播放| 狠狠色狠狠色合久久伊人| 国产一区中文字幕| 成人av在线看| 在线一区二区观看| 欧美日韩精品系列| 欧美一区二区三区视频免费 | 亚洲愉拍自拍另类高清精品| 亚洲综合激情另类小说区| 亚洲高清久久久| 日韩电影免费一区| 国产精品正在播放| 91蜜桃视频在线| 欧美女孩性生活视频| 欧美草草影院在线视频| 久久中文娱乐网| 日韩理论电影院| 午夜激情一区二区三区| 久久国产精品露脸对白| 波多野结衣一区二区三区| 欧洲中文字幕精品| 欧美xxx久久| 亚洲视频在线观看三级| 丝袜亚洲另类欧美综合| 国产成人在线视频网址| 日本高清不卡视频| 欧美不卡激情三级在线观看| 国产精品免费视频一区| 亚洲国产精品综合小说图片区| 精品一区免费av| 91免费观看视频在线| 91精品国产91久久综合桃花| 日本一区二区三区视频视频| 亚洲一区二区三区爽爽爽爽爽| 美国欧美日韩国产在线播放| 97久久超碰精品国产| 91麻豆精品国产91久久久使用方法 | 懂色av一区二区三区蜜臀| 在线看不卡av| 久久精品日产第一区二区三区高清版| 亚洲精品网站在线观看| 国产乱国产乱300精品| 欧美午夜片在线看| 欧美激情综合五月色丁香小说| 亚洲一卡二卡三卡四卡五卡| 极品少妇一区二区| 欧美日韩一区三区四区| 国产精品小仙女| 在线观看成人免费视频| 久久男人中文字幕资源站| 五月天激情小说综合| kk眼镜猥琐国模调教系列一区二区| 日韩一级黄色片| 亚洲综合久久久久| 成人av免费观看| 久久久久久电影| 日本伊人精品一区二区三区观看方式| av在线这里只有精品| 久久久久久久综合| 蜜臀va亚洲va欧美va天堂| 91传媒视频在线播放| 国产精品―色哟哟| 国产美女精品人人做人人爽| 欧美高清视频一二三区| 亚洲精品亚洲人成人网| 本田岬高潮一区二区三区| 久久这里只精品最新地址| 偷拍与自拍一区| 91福利精品视频| 亚洲人快播电影网| 成人免费毛片a| 久久综合久色欧美综合狠狠| 蜜臀久久久99精品久久久久久| 欧美视频在线一区| 一区二区欧美在线观看| 99在线热播精品免费| 欧美激情中文字幕一区二区| 另类调教123区| 日韩欧美电影一二三| 日韩成人精品在线| 3d动漫精品啪啪一区二区竹菊| 一区二区三区在线看| 色综合久久中文字幕综合网 | 亚洲第四色夜色| 91激情五月电影| 亚洲一区在线看| 欧美日韩国产高清一区二区| 亚洲一区二区在线播放相泽| 日本国产一区二区| 亚洲一区二区三区精品在线| 色先锋资源久久综合| 亚洲一区二区三区免费视频| 欧美三级欧美一级| 亚洲国产aⅴ天堂久久| 欧美日韩免费一区二区三区视频 | 久久99精品国产.久久久久久| 日韩一区二区三区精品视频| 美女mm1313爽爽久久久蜜臀| 欧美刺激午夜性久久久久久久| 狠狠色丁香久久婷婷综合_中| 337p日本欧洲亚洲大胆色噜噜| 精品一区二区影视| 国产午夜亚洲精品午夜鲁丝片| 国产一区二区91| 国产精品麻豆久久久| 91丨国产丨九色丨pron| 亚洲一区二区三区视频在线播放 | 色94色欧美sute亚洲线路一ni| 亚洲色图另类专区| 欧美性猛片aaaaaaa做受| 午夜视频在线观看一区二区三区| 777奇米四色成人影色区| 国产在线日韩欧美| 中文字幕不卡的av| 91久久一区二区| 免费成人小视频| 国产精品天干天干在观线| 一本一本大道香蕉久在线精品| 亚洲制服丝袜在线| 日韩精品一区二区三区swag| 国产成人免费视频网站| 一区二区三区不卡在线观看| 日韩视频国产视频| 成人一级黄色片| 亚洲国产裸拍裸体视频在线观看乱了| 欧美一区二区福利视频| 国产91精品在线观看| 亚洲一区精品在线| 久久精品水蜜桃av综合天堂| 色综合久久66| 激情综合色综合久久综合| 国产精品久久久久一区二区三区共 | 一区二区三区在线视频观看58 | 久久久久久99久久久精品网站| 色综合网站在线| 久久成人免费网站| 亚洲同性gay激情无套| 欧美一卡二卡在线| 色综合久久久网| 国产一区二区三区免费| 亚洲制服丝袜av| 国产三级欧美三级日产三级99| 欧美日韩一区二区三区不卡 | 国产一二精品视频| 亚洲一区二区欧美激情| 国产欧美视频一区二区三区| 在线播放一区二区三区| 不卡一卡二卡三乱码免费网站| 日韩在线播放一区二区| 日本一二三不卡| 日韩一区二区三区观看| 色婷婷av一区二区三区软件| 国产激情视频一区二区在线观看 | 亚洲视频免费观看| 久久综合中文字幕|