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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? scsi-linux-sg.c

?? 另一種方法編輯刻錄程序的代碼!要的與偶聯系呀
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* @(#)scsi-linux-sg.c	1.26 98/10/06 Copyright 1997 J. Schilling */#ifndef lintstatic	char __sccsid[] =	"@(#)scsi-linux-sg.c	1.26 98/10/06 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 * *	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. */#if HAVE_CONFIG_H#include <config.h>#endif#include <scsi/scsi.h>#include <scsi/sg.h>#ifdef HAVE_LINUX_PG_H#       define   USE_PG#endif#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#define	MAX_SCG		8	/* Max # of SCSI controllers */#define	MAX_TGT		8#define	MAX_LUN		8LOCAL	int	scgfile = -1;	/* Used for SG_GET_BUFSIZE ioctl()	*/LOCAL	short	scgfiles[MAX_SCG][MAX_TGT][MAX_LUN];LOCAL	short	buscookies[MAX_SCG];#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	*/LOCAL	int	pack_id = 5;		/* Should be a random number	*/LOCAL	char	*SCSIbuf = (char *)-1;#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((int f, struct scg_cmd *sp));LOCAL	BOOL	sg_setup	__PR((int f, int busno, int tgt, int tlun));LOCAL	void	sg_initdev	__PR((int f));LOCAL	int	sg_mapbus	__PR((int ino));LOCAL	BOOL	sg_mapdev	__PR((int f, int *busp, int *tgtp, int *lunp,							int *chanp, int *inop));LOCAL	void	sg_settimeout	__PR((int f, int timeout));EXPORTint scsi_open(device, busno, tgt, tlun)	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];	for (b=0; b < MAX_SCG; b++) {		buscookies[b] = (short)-1;		for (t=0; t < MAX_TGT; t++) {			for (l=0; l < MAX_LUN ; l++)				scgfiles[b][t][l] = (short)-1;		}	}	if (*device != '\0' || (busno == -2 && tgt == -2))		goto openbydev;	if (busno >= 0 && tgt >= 0 && tlun >= 0) {		if (busno >= MAX_SCG || tgt >= MAX_TGT || tlun >= MAX_LUN)			return (-1);	}	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)				comerr("Cannot open '%s'.\n", devname);		} else {			if (sg_setup(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)				comerr("Cannot open '%s'.\n", devname);		} else {			if (sg_setup(f, busno, tgt, tlun))				return (++nopen);			if (busno < 0 && tgt < 0 && tlun < 0)				nopen++;		}	}openbydev:	if (*device != '\0') {		f = open(device, 2);		if (f < 0 && errno == ENOENT)			goto openpg;		if (!sg_mapdev(f, &busno, &tgt, &tlun, 0, 0)) {			close(f);			goto openpg;		}		if (scsibus < 0)			scsibus = busno;		if (target < 0)			target = tgt;		if (lun < 0)			lun = tlun;		if (sg_setup(f, busno, tgt, tlun))			return (++nopen);	}openpg:#ifdef	USE_PG	nopen += pg_open(device, busno, tgt, tlun);#endif	return (nopen);}LOCAL BOOLsg_setup(f, busno, tgt, tlun)	int	f;	int	busno;	int	tgt;	int	tlun;{	int	n;	int	Chan;	int	Ino;	int	Bus;	int	Target;	int	Lun;	BOOL	onetarget = FALSE;	if (scsibus >= 0 && target >= 0 && lun >= 0)		onetarget = TRUE;	sg_mapdev(f, &Bus, &Target, &Lun, &Chan, &Ino);	/*	 * For old kernels try to make the best guess.	 */	Ino |= Chan << 8;	n = sg_mapbus(Ino);	if (Bus == -1) {		Bus = n;		if (debug)			printf("SCSI Bus: %d (mapped from %d)\n", Bus, Ino);	}	if (scgfiles[Bus][Target][Lun] == (short)-1)		scgfiles[Bus][Target][Lun] = (short)f;	if (onetarget) {		if (Bus == busno && Target == tgt && Lun == tlun) {			sg_initdev(f);			scgfile = f;	/* remember file for ioctl's */			return (TRUE);		} else {			scgfiles[Bus][Target][Lun] = (short)-1;			close(f);		}	} else {		sg_initdev(f);		if (scgfile < 0)			scgfile = f;	/* remember file for ioctl's */	}	return (FALSE);}LOCAL voidsg_initdev(f)	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, deftimeout);}LOCAL intsg_mapbus(ino)	int	ino;{	register int	i;	for (i=0; i < MAX_SCG; i++) {		if (buscookies[i] == (short)-1) {			buscookies[i] = ino;			return (i);		}		if (buscookies[i] == ino)			return (i);	}	return (0);}LOCAL BOOLsg_mapdev(f, busp, tgtp, lunp, chanp, inop)	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;	int	Lun;	if (ioctl(f, SCSI_IOCTL_GET_IDLUN, &sg_id))		return (FALSE);	if (debug)		printf("l1: 0x%lX l2: 0x%lX\n", sg_id.l1, sg_id.l2);	if (ioctl(f, SCSI_IOCTL_GET_BUS_NUMBER, &Bus) < 0) {		Bus = -1;	}	Target	= sg_id.l1 & 0xFF;	Lun	= (sg_id.l1 >> 8) & 0xFF;	Chan	= (sg_id.l1 >> 16) & 0xFF;	Ino	= (sg_id.l1 >> 24) & 0xFF;	if (debug) {		printf("Bus: %d Target: %d Lun: %d Chan: %d Ino: %d\n",				Bus, Target, Lun, Chan, Ino);	}	*busp = Bus;	*tgtp = Target;	*lunp = Lun;	if (chanp)		*chanp = Chan;	if (inop)		*inop = Ino;	return (TRUE);}LOCAL longscsi_maxdma(){	long maxdma = MAX_DMA_LINUX;#ifdef	SG_GET_BUFSIZE	/*	 * We assume that all /dev/sg instances use the same	 * maximum buffer size.	 */	if ((maxdma = ioctl(scgfile, SG_GET_BUFSIZE, 0)) < 0) {		if (scgfile >= 0) {			maxdma = MAX_DMA_LINUX;		}	}#endif#ifdef	USE_PG	if (scsibus == pgbus)		return (pg_maxdma());	if ((scsibus < 0) && (pg_maxdma() < maxdma))		return (pg_maxdma());#endif	return (maxdma);}EXPORT void *scsi_getbuf(amt)	long	amt;{	char	*ret;	if (scg_maxdma == 0)		scg_maxdma = scsi_maxdma();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级日韩三级国产三级| 国产精品资源在线看| 欧美激情在线免费观看| 欧美成人官网二区| 精品奇米国产一区二区三区| 久久综合九色综合久久久精品综合| 日韩一区二区高清| 日韩一级免费观看| 久久精品亚洲麻豆av一区二区| 久久综合九色综合97_久久久| 欧美精品一区二区久久久| 精品日韩99亚洲| 国产精品高清亚洲| 依依成人综合视频| 青娱乐精品视频在线| 美女视频网站久久| 国产成人免费视频网站| 99vv1com这只有精品| 欧美亚洲高清一区二区三区不卡| 日本二三区不卡| 8v天堂国产在线一区二区| 日韩一区二区在线播放| 国产午夜精品久久久久久久 | 欧美精品一区男女天堂| 久久久久国产免费免费 | 国产ts人妖一区二区| 99热精品一区二区| 日韩三级视频在线看| 久久久久久久久伊人| 亚洲国产视频在线| 日本在线不卡一区| jizz一区二区| 日韩精品一区二区三区视频播放| 国产精品视频一二| 青草国产精品久久久久久| thepron国产精品| 日韩欧美亚洲一区二区| 中文字幕在线一区二区三区| 青青草97国产精品免费观看| 91免费国产在线| 精品久久五月天| 视频精品一区二区| 97久久精品人人做人人爽| 日韩欧美一区二区久久婷婷| 一区二区三区四区不卡视频| 狠狠色狠狠色综合日日91app| 91久久奴性调教| 国产精品视频一区二区三区不卡| 日韩av高清在线观看| 欧洲一区在线观看| 亚洲日本电影在线| 国产大陆精品国产| 欧美一区二区三区免费大片| 亚洲综合网站在线观看| av网站一区二区三区| 日韩久久久久久| 五月激情综合婷婷| 欧美日韩国产综合一区二区 | 亚洲国产精品天堂| aaa亚洲精品| 日本一区二区成人在线| 久久99国内精品| 精品嫩草影院久久| 日韩av中文在线观看| 欧美日韩一区二区三区在线看| 亚洲视频1区2区| heyzo一本久久综合| 国产精品网站在线| 成人不卡免费av| 亚洲国产精品精华液2区45| 美女视频一区在线观看| 日韩亚洲欧美中文三级| 日本美女一区二区三区视频| 欧美三日本三级三级在线播放| 国产精品久久久久永久免费观看| 国产成人自拍网| 国产精品麻豆视频| 91视视频在线直接观看在线看网页在线看 | 国内精品国产成人国产三级粉色| 欧美精品粉嫩高潮一区二区| 肉丝袜脚交视频一区二区| 欧美日韩精品福利| 毛片av一区二区| 26uuu色噜噜精品一区| 国内精品在线播放| 国产无一区二区| 色综合视频在线观看| 亚洲综合丝袜美腿| 日韩午夜激情av| 国内一区二区在线| 亚洲视频在线观看一区| 91国偷自产一区二区三区观看| 一区二区三区精品久久久| 欧美羞羞免费网站| 蜜臀a∨国产成人精品| 国产亚洲女人久久久久毛片| 91小视频免费观看| 蜜臀精品一区二区三区在线观看| 2021中文字幕一区亚洲| 97超碰欧美中文字幕| 午夜日韩在线电影| 国产欧美精品一区二区色综合 | 日韩视频在线你懂得| 国产精品99久久不卡二区| 成人欧美一区二区三区白人| 欧美高清精品3d| 成人av资源在线观看| 偷偷要91色婷婷| ...xxx性欧美| 日韩欧美一级在线播放| caoporm超碰国产精品| 丝瓜av网站精品一区二区| 国产欧美日韩三级| 51精品视频一区二区三区| 成人在线综合网站| 美女诱惑一区二区| 亚洲精品国产精华液| 久久―日本道色综合久久| 欧美日韩中文精品| av在线不卡观看免费观看| 免播放器亚洲一区| 亚洲激情图片一区| 国产精品伦理在线| 精品剧情v国产在线观看在线| 在线精品视频一区二区| 高清成人免费视频| 激情欧美一区二区| 日韩电影在线看| 依依成人综合视频| 国产精品婷婷午夜在线观看| 精品国产乱码久久久久久夜甘婷婷 | 日日摸夜夜添夜夜添精品视频 | 国内国产精品久久| 理论片日本一区| 天天综合色天天| 亚洲日本青草视频在线怡红院| 国产婷婷色一区二区三区| 精品国产污污免费网站入口 | 91精品福利在线一区二区三区 | 91污在线观看| 成人激情免费电影网址| 国产91精品露脸国语对白| 国产一区在线观看麻豆| 老司机一区二区| 国产一区二区三区免费观看| 国内精品嫩模私拍在线| 精品亚洲国内自在自线福利| 美女视频黄久久| 久久99久久精品欧美| 玖玖九九国产精品| 九九精品视频在线看| 国产露脸91国语对白| 成人午夜视频免费看| 成人做爰69片免费看网站| 成人av网站在线观看免费| 成人免费看的视频| 成人av免费在线播放| 波多野结衣中文字幕一区二区三区 | 在线精品亚洲一区二区不卡| 在线国产电影不卡| 欧美艳星brazzers| 欧美精品xxxxbbbb| 日韩精品专区在线影院重磅| 欧美成人综合网站| 欧美精品一区二区三区蜜臀| 国产欧美精品一区二区三区四区| 国产日本一区二区| 亚洲欧美日韩国产一区二区三区| 亚洲精品老司机| 日韩和欧美一区二区| 久久国产精品露脸对白| 国产精品一区二区免费不卡| 成人精品鲁一区一区二区| 欧美性高清videossexo| 日韩欧美一区二区免费| 国产精品毛片a∨一区二区三区| 亚洲精品一二三区| 琪琪一区二区三区| 成人小视频免费观看| 欧美日韩日日摸| 久久久久久免费网| 伊人色综合久久天天人手人婷| 久久精品国产秦先生| 91在线播放网址| 欧美高清视频一二三区| 欧美国产国产综合| 日本三级韩国三级欧美三级| 国产精品一二三| 欧美日韩国产综合视频在线观看| 久久久久久电影| 亚洲国产日产av| 成人爱爱电影网址| 日韩女优视频免费观看| 亚洲乱码国产乱码精品精98午夜| 男女男精品视频网| 色狠狠av一区二区三区| 久久午夜国产精品| 日韩电影在线一区二区三区| 99国产一区二区三精品乱码| 精品国产乱码久久|