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

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

?? scsi-linux-sg.c

?? 刻錄光盤的程序
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/* @(#)scsi-linux-sg.c	1.39 99/09/17 Copyright 1997 J. Schilling */#ifndef lintstatic	char __sccsid[] =	"@(#)scsi-linux-sg.c	1.39 99/09/17 Copyright 1997 J. Schilling";#endif/* *	Interface for Linux generic SCSI implementation (sg). * *	This is the interface for the broken Linux SCSI generic driver. *	This is a hack, that tries to emulate the functionality *	of the scg driver. * *	Design flaws of the sg driver: *	-	cannot see if SCSI command could not be send *	-	cannot get SCSI status byte *	-	cannot get real dma count of tranfer *	-	cannot get number of bytes valid in auto sense data *	-	to few data in auto sense (CCS/SCSI-2/SCSI-3 needs >= 18) * *	This code contains support for the sg driver version 2 * *	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) 1997 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 <linux/version.h>#ifndef LINUX_VERSION_CODE	/* Very old kernel? */#	define LINUX_VERSION_CODE 0#endif#if LINUX_VERSION_CODE >= 0x01031a /* <linux/scsi.h> introduced in 1.3.26 */#if LINUX_VERSION_CODE >= 0x020000 /* <scsi/scsi.h> introduced somewhere. *//* Need to fine tune the ifdef so we get the transition point right. */#include <scsi/scsi.h>#else#include <linux/scsi.h>#endif#else#define __KERNEL__#include <linux/fs.h>#undef __KERNEL__#include "block/blk.h"#include "scsi/scsi.h"#endif#include "scsi/sg.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-linux-sg.c-1.39";	/* The version for this transport*/#ifndef	SCSI_IOCTL_GET_BUS_NUMBER#define SCSI_IOCTL_GET_BUS_NUMBER 0x5386#endif/* * XXX There must be a better way than duplicating things from system include * XXX files. This is stolen from /usr/src/linux/drivers/scsi/scsi.h */#ifndef	DID_OK#define DID_OK          0x00 /* NO error                                */#define DID_NO_CONNECT  0x01 /* Couldn't connect before timeout period  */#define DID_BUS_BUSY    0x02 /* BUS stayed busy through time out period */#define DID_TIME_OUT    0x03 /* TIMED OUT for other reason              */#define DID_BAD_TARGET  0x04 /* BAD target.                             */#define DID_ABORT       0x05 /* Told to abort for some other reason     */#define DID_PARITY      0x06 /* Parity error                            */#define DID_ERROR       0x07 /* Internal error                          */#define DID_RESET       0x08 /* Reset by somebody.                      */#define DID_BAD_INTR    0x09 /* Got an interrupt we weren't expecting.  */ #endif/* *  These indicate the error that occurred, and what is available. */#ifndef DRIVER_BUSY#define DRIVER_BUSY         0x01#define DRIVER_SOFT         0x02#define DRIVER_MEDIA        0x03#define DRIVER_ERROR        0x04 #define DRIVER_INVALID      0x05#define DRIVER_TIMEOUT      0x06#define DRIVER_HARD         0x07#define DRIVER_SENSE        0x08#endif/* * XXX Should add extra space in buscookies and scgfiles for a "PP bus" * XXX and for two "ATAPI busses". */#define	MAX_SCG		16	/* Max # of SCSI controllers */#define	MAX_TGT		16#define	MAX_LUN		8struct scg_local {	int	scgfile;		/* Used for SG_GET_BUFSIZE ioctl()*/	short	scgfiles[MAX_SCG][MAX_TGT][MAX_LUN];	short	buscookies[MAX_SCG];	int	pgbus;	int	pack_id;		/* Should be a random number	*/	char	*SCSIbuf;};#define scglocal(p)	((struct scg_local *)((p)->local)) #ifdef	SG_BIG_BUFF#define	MAX_DMA_LINUX	SG_BIG_BUFF	/* Defined in include/scsi/sg.h	*/#else#define	MAX_DMA_LINUX	(4*1024)	/* Old Linux versions		*/#endif#ifndef	SG_MAX_SENSE#	define	SG_MAX_SENSE	16	/* Too small for CCS / SCSI-2	*/#endif					/* But cannot be changed	*/#if	!defined(__i386) && !defined(i386) && !defined(mc68000)#define	MISALIGN#endif/*#define	MISALIGN*//*#undef	SG_GET_BUFSIZE*/#if	defined(USE_PG) && !defined(USE_PG_ONLY)#include "scsi-linux-pg.c"#endif#ifdef	MISALIGNLOCAL	int	scsi_getint	__PR((int *ip));#endifLOCAL	int	scsi_send	__PR((SCSI *scgp, int f, struct scg_cmd *sp));LOCAL	BOOL	sg_setup	__PR((SCSI *scgp, int f, int busno, int tgt, int tlun));LOCAL	void	sg_initdev	__PR((SCSI *scgp, int f));LOCAL	int	sg_mapbus	__PR((SCSI *scgp, int busno, int ino));LOCAL	BOOL	sg_mapdev	__PR((SCSI *scgp, int f, int *busp, int *tgtp, int *lunp,							int *chanp, int *inop));LOCAL	void	sg_settimeout	__PR((int f, int timeout));/* * 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	f;	register int	i;	register int	b;	register int	t;	register int	l;	register int	nopen = 0;	char		devname[64];	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 (scgp->local == NULL) {		scgp->local = malloc(sizeof(struct scg_local));		if (scgp->local == NULL)			return (0);		scglocal(scgp)->scgfile = -1;		scglocal(scgp)->pgbus = -2;		scglocal(scgp)->SCSIbuf = (char *)-1;		scglocal(scgp)->pack_id = 5;		for (b=0; b < MAX_SCG; b++) {			scglocal(scgp)->buscookies[b] = (short)-1;			for (t=0; t < MAX_TGT; t++) {				for (l=0; l < MAX_LUN ; l++)					scglocal(scgp)->scgfiles[b][t][l] = (short)-1;			}		}	}	if ((device != NULL && *device != '\0') || (busno == -2 && tgt == -2))		goto openbydev;	for (i=0; i < 32; i++) {		sprintf(devname, "/dev/sg%d", i);		f = open(devname, 2);		if (f < 0) {			if (errno != ENOENT && errno != ENXIO && errno != ENODEV) {				if (scgp->errstr)					js_snprintf(scgp->errstr, SCSI_ERRSTR_SIZE,							"Cannot open '%s'", devname);				return (0);			}		} else {			if (sg_setup(scgp, f, busno, tgt, tlun))				return (++nopen);			if (busno < 0 && tgt < 0 && tlun < 0)				nopen++;		}	}	if (nopen == 0) for (i=0; i <= 25; i++) {		sprintf(devname, "/dev/sg%c", i+'a');		f = open(devname, 2);		if (f < 0) {			if (errno != ENOENT && errno != ENXIO && errno != ENODEV) {				if (scgp->errstr)					js_snprintf(scgp->errstr, SCSI_ERRSTR_SIZE,						"Cannot open '%s'", devname);				return (0);			}		} else {			if (sg_setup(scgp, f, busno, tgt, tlun))				return (++nopen);			if (busno < 0 && tgt < 0 && tlun < 0)				nopen++;		}	}openbydev:	if (device != NULL && *device != '\0') {		f = open(device, 2);		if (f < 0 && errno == ENOENT)			goto openpg;		if (!sg_mapdev(scgp, f, &busno, &tgt, &tlun, 0, 0)) {			close(f);			goto openpg;		}		if (scgp->scsibus < 0)			scgp->scsibus = busno;		if (scgp->target < 0)			scgp->target = tgt;		if (scgp->lun < 0)			scgp->lun = tlun;		if (sg_setup(scgp, f, busno, tgt, tlun))			return (++nopen);	}openpg:#ifdef	USE_PG	nopen += pg_open(scgp, device, busno, tgt, tlun);#endif	if (scgp->debug) for (b=0; b < MAX_SCG; b++) {		printf("Bus: %d cookie: %X\n", b, scglocal(scgp)->buscookies[b]);		for (t=0; t < MAX_TGT; t++) {			for (l=0; l < MAX_LUN ; l++)				if (scglocal(scgp)->scgfiles[b][t][l] != (short)-1)					printf("file (%d,%d,%d): %d\n",						b, t, l, scglocal(scgp)->scgfiles[b][t][l]);		}	}	return (nopen);}EXPORT intscsi_close(scgp)	SCSI	*scgp;{	register int	f;	register int	b;	register int	t;	register int	l;	if (scgp->local == NULL)		return (-1);	for (b=0; b < MAX_SCG; b++) {		if (b == scglocal(scgp)->pgbus)			continue;		scglocal(scgp)->buscookies[b] = (short)-1;		for (t=0; t < MAX_TGT; t++) {			for (l=0; l < MAX_LUN ; l++)				f = scglocal(scgp)->scgfiles[b][t][l];				if (f >= 0)					close(f);				scglocal(scgp)->scgfiles[b][t][l] = (short)-1;		}	}#ifdef	USE_PG	pg_close(scgp);#endif	return (0);}LOCAL BOOLsg_setup(scgp, f, busno, tgt, tlun)	SCSI	*scgp;	int	f;	int	busno;	int	tgt;	int	tlun;{	int	n;	int	Chan;	int	Ino;	int	Bus;	int	Target;	int	Lun;	BOOL	onetarget = FALSE;	if (scgp->scsibus >= 0 && scgp->target >= 0 && scgp->lun >= 0)		onetarget = TRUE;	sg_mapdev(scgp, f, &Bus, &Target, &Lun, &Chan, &Ino);	/*	 * For old kernels try to make the best guess.	 */	Ino |= Chan << 8;	n = sg_mapbus(scgp, Bus, Ino);	if (Bus == -1) {		Bus = n;		if (scgp->debug)			printf("SCSI Bus: %d (mapped from %d)\n", Bus, Ino);	}	if (Bus < 0 || Bus >= MAX_SCG || Target < 0 || Target >= MAX_TGT ||						Lun < 0 || Lun >= MAX_LUN) {		return (FALSE);	}	if (scglocal(scgp)->scgfiles[Bus][Target][Lun] == (short)-1)		scglocal(scgp)->scgfiles[Bus][Target][Lun] = (short)f;	if (onetarget) {		if (Bus == busno && Target == tgt && Lun == tlun) {			sg_initdev(scgp, f);			scglocal(scgp)->scgfile = f;	/* remember file for ioctl's */			return (TRUE);		} else {			scglocal(scgp)->scgfiles[Bus][Target][Lun] = (short)-1;			close(f);		}	} else {		sg_initdev(scgp, f);		if (scglocal(scgp)->scgfile < 0)			scglocal(scgp)->scgfile = f;	/* remember file for ioctl's */	}	return (FALSE);}LOCAL voidsg_initdev(scgp, f)	SCSI	*scgp;	int	f;{	struct sg_rep {		struct sg_header	hd;		unsigned char		rbuf[100];	} sg_rep;	int	n;	/* Eat any unwanted garbage from prior use of this device */	n = fcntl(f, F_GETFL);	/* Be very proper about this */	fcntl(f, F_SETFL, n|O_NONBLOCK);	fillbytes((caddr_t)&sg_rep, sizeof(struct sg_header), '\0');	sg_rep.hd.reply_len = sizeof(struct sg_header);	while (read(f, &sg_rep, sizeof(sg_rep)) >= 0 || errno != EAGAIN)		;	fcntl(f, F_SETFL, n);	sg_settimeout(f, scgp->deftimeout);}LOCAL intsg_mapbus(scgp, busno, ino)	SCSI	*scgp;	int	busno;	int	ino;{	register int	i;	if (busno >= 0 && busno < MAX_SCG) {		/*		 * SCSI_IOCTL_GET_BUS_NUMBER worked.		 * Now we have the problem that Linux does not properly number		 * SCSI busses. The Bus number that Linux creates really is		 * the controller (card) number. I case of multi SCSI bus		 * cards we are lost.		 */		if (scglocal(scgp)->buscookies[busno] == (short)-1) {			scglocal(scgp)->buscookies[busno] = ino;			return (busno);		}		if (scglocal(scgp)->buscookies[busno] != (short)ino)			errmsgno(EX_BAD, "Warning Linux Bus mapping botch.\n");		return (busno);	} else for (i=0; i < MAX_SCG; i++) {		if (scglocal(scgp)->buscookies[i] == (short)-1) {			scglocal(scgp)->buscookies[i] = ino;			return (i);		}		if (scglocal(scgp)->buscookies[i] == ino)			return (i);	}	return (0);}LOCAL BOOLsg_mapdev(scgp, f, busp, tgtp, lunp, chanp, inop)	SCSI	*scgp;	int	f;	int	*busp;	int	*tgtp;	int	*lunp;	int	*chanp;	int	*inop;{	struct	sg_id {		long	l1; /* target | lun << 8 | channel << 16 | low_ino << 24 */		long	l2; /* Unique id */	} sg_id;	int	Chan;	int	Ino;	int	Bus;	int	Target;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美视频在线| 日韩一区二区三区三四区视频在线观看| 精品国产91乱码一区二区三区 | 理论片日本一区| 欧美日韩日日夜夜| 亚洲午夜日本在线观看| 91久久精品网| 性久久久久久久久久久久| 欧美日韩二区三区| 日韩1区2区日韩1区2区| 欧美老人xxxx18| 天天综合色天天| 91精品蜜臀在线一区尤物| 免费成人在线视频观看| 欧美一卡2卡3卡4卡| 久久电影网电视剧免费观看| 精品国产乱码久久久久久久久| 久草在线在线精品观看| 久久综合狠狠综合久久综合88| 国产一区二区精品久久91| 国产日韩欧美电影| 成人av综合一区| 一区二区三区在线视频观看58 | 精品久久一二三区| 狠狠色狠狠色综合日日91app| 久久综合九色综合97_久久久| 国产aⅴ精品一区二区三区色成熟| 国产午夜精品久久久久久久 | 国产成人精品亚洲777人妖 | 麻豆精品国产传媒mv男同| 精品福利一二区| 成人午夜视频在线观看| 中文字幕在线观看不卡| 日本高清不卡视频| 日本午夜一区二区| 久久亚洲综合av| 97久久超碰精品国产| 亚洲午夜一二三区视频| 日韩欧美综合在线| 懂色av一区二区夜夜嗨| 亚洲精品中文在线影院| 欧美精品 日韩| 国产精品一区二区你懂的| 中文字幕一区在线观看视频| 麻豆免费精品视频| 99久久99久久免费精品蜜臀| 一区二区三区av电影| 91精品国产福利在线观看| 国产河南妇女毛片精品久久久| 日韩理论在线观看| 欧美日韩国产另类不卡| 国产精品自拍一区| 伊人色综合久久天天| 91精品国产综合久久精品性色| 国产一区二区久久| 亚洲中国最大av网站| 精品久久一区二区| 91久久免费观看| 精品系列免费在线观看| 亚洲另类春色校园小说| 日韩欧美国产小视频| 99vv1com这只有精品| 六月丁香综合在线视频| 国产精品久久久久久妇女6080| 欧美久久免费观看| 成人国产精品免费观看动漫| 亚洲激情五月婷婷| 亚洲精品在线免费播放| 日本高清不卡视频| 韩国v欧美v亚洲v日本v| 亚洲免费大片在线观看| 亚洲精品在线观看视频| 欧美视频第二页| 丁香婷婷深情五月亚洲| 日本中文字幕一区二区视频| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 亚洲综合色婷婷| 欧美不卡一区二区三区四区| 一本久道久久综合中文字幕| 狠狠色丁香久久婷婷综合丁香| 洋洋av久久久久久久一区| 久久这里只有精品6| 欧美精品成人一区二区三区四区| 成人美女视频在线看| 免费亚洲电影在线| 一区二区三区免费观看| 中文欧美字幕免费| 欧美电影免费观看高清完整版在线| 色婷婷av一区二区三区gif| 国产美女精品在线| 不卡的av网站| 国产剧情一区二区三区| 日韩激情av在线| 亚洲乱码国产乱码精品精98午夜| 久久综合精品国产一区二区三区| 777a∨成人精品桃花网| 一本大道久久a久久综合| 成人做爰69片免费看网站| 久久精品国产第一区二区三区| 一区二区三区免费在线观看| 国产精品国产三级国产三级人妇| 久久亚洲影视婷婷| 精品欧美一区二区在线观看| 欧美高清一级片在线| 欧美亚洲动漫精品| 色天使久久综合网天天| 成人动漫一区二区| 大尺度一区二区| 国产精品亚洲а∨天堂免在线| 美女网站色91| 日韩av一区二区在线影视| 亚洲成a人片综合在线| 亚洲综合免费观看高清完整版在线| 中文字幕精品一区二区精品绿巨人| 欧美精品一区二区三区在线| 日韩美女天天操| 日韩精品综合一本久道在线视频| 欧美日韩视频专区在线播放| 欧美性猛片aaaaaaa做受| 在线欧美一区二区| 91福利社在线观看| 91福利精品第一导航| 色综合久久中文综合久久97| 91在线一区二区三区| 99国产欧美久久久精品| 成人av网站在线| av资源网一区| 色综合天天综合| 91麻豆免费观看| 色综合久久中文字幕| 在线看国产一区| 欧美亚洲一区二区三区四区| 欧美日韩中文国产| 777午夜精品免费视频| 555www色欧美视频| 日韩欧美国产综合在线一区二区三区| 欧美情侣在线播放| 日韩一区二区麻豆国产| 欧美一卡2卡3卡4卡| 26uuu国产电影一区二区| 久久免费国产精品| 国产精品久久久久久久久快鸭| 亚洲视频一区二区免费在线观看| 亚洲欧美另类久久久精品 | 亚洲视频免费在线观看| 91在线观看成人| 91黄色激情网站| 欧美性猛片xxxx免费看久爱| 在线成人免费视频| 欧美xxxx老人做受| 欧美国产97人人爽人人喊| 国产精品久久久久久久久晋中| 亚洲视频一区在线观看| 午夜精品久久久久久久99樱桃| 日韩黄色小视频| 国产精品夜夜嗨| thepron国产精品| 精品视频一区二区不卡| 欧美一区二区三区电影| 久久久久久综合| 日韩一区在线播放| 午夜亚洲国产au精品一区二区| 美女脱光内衣内裤视频久久影院| 国产乱妇无码大片在线观看| 97精品国产露脸对白| 欧美日本在线播放| 久久亚洲捆绑美女| 亚洲日穴在线视频| 午夜电影一区二区三区| 国产一区二区在线看| 99久久精品一区| 91精品国产综合久久福利软件| 欧美精品一区二区高清在线观看| 中文字幕+乱码+中文字幕一区| 亚洲影院久久精品| 免费观看一级欧美片| 成人性生交大片免费| 欧美日韩在线一区二区| 久久久99久久| 一区二区三区美女视频| 麻豆成人91精品二区三区| 成人av集中营| 欧美日韩国产bt| 国产精品丝袜久久久久久app| 亚洲国产欧美在线人成| 另类调教123区| 91视频xxxx| 精品少妇一区二区三区在线播放 | 亚洲不卡一区二区三区| 免费看日韩a级影片| 99久久精品久久久久久清纯| 欧美精品aⅴ在线视频| 亚洲国产激情av| 日韩精品成人一区二区在线| 国产成人av电影在线| 欧美精选一区二区| 国产精品你懂的在线欣赏| 日韩不卡一区二区三区| proumb性欧美在线观看| 精品日产卡一卡二卡麻豆|