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

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

?? scsi-linux-sg.c

?? 另一種方法編輯刻錄程序的代碼!要的與偶聯系呀
?? C
?? 第 1 頁 / 共 2 頁
字號:
	if (amt <= 0 || amt > scg_maxdma)		return ((void *)0);	if (debug)		printf("scsi_getbuf: %ld bytes\n", amt);	/*	 * For performance reason, we allocate pagesize()	 * bytes before the SCSI buffer to avoid	 * copying the whole buffer contents when	 * setting up the /dev/sg data structures.	 */	ret = valloc((size_t)(amt+getpagesize()));	if (ret == NULL)		return (ret);	ret += getpagesize();	SCSIbuf = ret;	return ((void *)ret);}EXPORTBOOL scsi_havebus(busno)	int	busno;{	register int	t;	register int	l;	if (busno < 0 || busno >= MAX_SCG)		return (FALSE);	for (t=0; t < MAX_TGT; t++) {		for (l=0; l < MAX_LUN ; l++)			if (scgfiles[busno][t][l] >= 0)				return (TRUE);	}	return (FALSE);}EXPORTint scsi_fileno(busno, tgt, tlun)	int	busno;	int	tgt;	int	tlun;{	if (busno < 0 || busno >= MAX_SCG ||	    tgt < 0 || tgt >= MAX_TGT ||	    tlun < 0 || tlun >= MAX_LUN)		return (-1);	return ((int)scgfiles[busno][tgt][tlun]);}EXPORTint scsi_isatapi(){#ifdef	USE_PG	if (scsibus == pgbus)		return (pg_isatapi());#endif#ifdef	SG_EMULATED_HOST	{	int	emulated = FALSE;	int	f = scsi_fileno(scsibus, target, lun);	if (ioctl(f, SG_EMULATED_HOST, &emulated) >= 0)		return (emulated != 0);	}#endif	return (-1);}EXPORTint scsireset(){#ifdef	USE_PG	if (scsibus == pgbus)		return (pg_reset());#endif	/*	 * Do we have a SCSI reset in the Linux sg driver?	 */	return (-1);}LOCAL voidsg_settimeout(f, tmo)	int	f;	int	tmo;{	tmo *= HZ;	if (tmo)		tmo += HZ/2;	if (ioctl(f, SG_SET_TIMEOUT, &tmo) < 0)		comerr("Cannot set SG_SET_TIMEOUT.\n");}/* * Get misaligned int. * Needed for all recent processors (sparc/ppc/alpha) * because the /dev/sg design forces us to do misaligned * reads of integers. */#ifdef	MISALIGNLOCAL intscsi_getint(ip)	int	*ip;{		 int	ret;	register char	*cp = (char *)ip;	register char	*tp = (char *)&ret;	register int	i;	for (i = sizeof(int); --i >= 0; )		*tp++ = *cp++;		return (ret);}#define	GETINT(a)	scsi_getint(&(a))#else#define	GETINT(a)	(a)#endifLOCAL intscsi_send(int f, struct scg_cmd *sp){	struct sg_rq	*sgp;	struct sg_rq	*sgp2;	int	i;	int	pack_len;	int	reply_len;	int	amt = sp->cdb_len;	struct sg_rq {		struct sg_header	hd;		unsigned char		buf[MAX_DMA_LINUX+SCG_MAX_CMD];	} sg_rq;#ifdef	SG_GET_BUFSIZE		/* We may use a 'sg' version 2 driver	*/	char	driver_byte;	char	host_byte;	char	msg_byte;	char	status_byte;#endif	if (f < 0) {		sp->error = SCG_FATAL;		return (0);	}#ifdef	USE_PG	if (scsibus == pgbus)		return (pg_send(f, sp));#endif	if (sp->timeout != deftimeout)		sg_settimeout(f, sp->timeout);	sgp2 = sgp = &sg_rq;	if (sp->addr == SCSIbuf) {		sgp = (struct sg_rq *)			(SCSIbuf - (sizeof(struct sg_header) + amt));		sgp2 = (struct sg_rq *)			(SCSIbuf - (sizeof(struct sg_header)));	} else {		if (debug) {			printf("DMA addr: 0x%8.8lX size: %d - using copy buffer\n",				(long)sp->addr, sp->size);		}		if (sp->size > (int)(sizeof(sg_rq.buf) - SCG_MAX_CMD)) {			errno = ENOMEM;			return (-1);		}	}	/*	 * This is done to avoid misaligned access of sgp->some_int	 */	pack_len = sizeof(struct sg_header) + amt;	reply_len = sizeof(struct sg_header);	if (sp->flags & SCG_RECV_DATA) {		reply_len += sp->size;	} else {		pack_len += sp->size;	}#ifdef	MISALIGN	/*	 * sgp->some_int may be misaligned if (sp->addr == SCSIbuf)	 * This is no problem on Intel porocessors, however	 * all other processors don't like it.	 * sizeof(struct sg_header) + amt is usually not a multiple of	 * sizeof(int). For this reason, we fill in the values into sg_rq	 * which is always corectly aligned and then copy it to the real	 * location if this location differs from sg_rq.	 * Never read/write directly to sgp->some_int !!!!!	 */	fillbytes((caddr_t)&sg_rq, sizeof(struct sg_header), '\0');	sg_rq.hd.pack_len = pack_len;	sg_rq.hd.reply_len = reply_len;	sg_rq.hd.pack_id = pack_id++;/*	sg_rq.hd.result = 0;	not needed because of fillbytes() */	if ((caddr_t)&sg_rq != (caddr_t)sgp)		movebytes((caddr_t)&sg_rq, (caddr_t)sgp, sizeof(struct sg_header));#else	fillbytes((caddr_t)sgp, sizeof(struct sg_header), '\0');	sgp->hd.pack_len = pack_len;	sgp->hd.reply_len = reply_len;	sgp->hd.pack_id = pack_id++;/*	sgp->hd.result = 0;	not needed because of fillbytes() */#endif	if (amt == 12)		sgp->hd.twelve_byte = 1;	for (i = 0; i < amt; i++ ) {		sgp->buf[i] = sp->cdb.cmd_cdb[i];;	}	if (!(sp->flags & SCG_RECV_DATA)) {		if ((void *)sp->addr != (void *)&sgp->buf[amt])			movebytes(sp->addr, &sgp->buf[amt], sp->size);		amt += sp->size;	}#ifdef	SG_GET_BUFSIZE	sgp->hd.want_new  = 1;			/* Order new behaviour	*/	sgp->hd.cdb_len	  = sp->cdb_len;	/* Set CDB length	*/	if (sp->sense_len > SG_MAX_SENSE)		sgp->hd.sense_len = SG_MAX_SENSE;	else		sgp->hd.sense_len = sp->sense_len;#endif	i = sizeof(struct sg_header) + amt;	if ((amt = write(f, sgp, i)) < 0) {			/* write */		sg_settimeout(f, deftimeout);		return (-1);	} else if (amt != i) {		errmsg("scsi_send(%s) wrote %d bytes (expected %d).\n",						scsi_command, amt, i);	}	if (sp->addr == SCSIbuf) {		movebytes(sgp, sgp2, sizeof(struct sg_header));		sgp = sgp2;	}	sgp->hd.sense_buffer[0] = 0;	if ((amt = read(f, sgp, reply_len)) < 0) {		/* read */		sg_settimeout(f, deftimeout);		return (-1);	}	if (sp->flags & SCG_RECV_DATA && ((void *)sgp->buf != (void *)sp->addr)) {		movebytes(sgp->buf, sp->addr, sp->size);	}	sp->ux_errno = GETINT(sgp->hd.result);		/* Unaligned read */	sp->error = SCG_NO_ERROR;#ifdef	SG_GET_BUFSIZE	if (sgp->hd.grant_new) {		sp->sense_count = sgp->hd.sense_len;		pack_len    = GETINT(sgp->hd.sg_cmd_status);	/* Unaligned read */		driver_byte = (pack_len  >> 24) & 0xFF;		host_byte   = (pack_len  >> 16) & 0xFF;		msg_byte    = (pack_len  >> 8) & 0xFF;		status_byte =  pack_len  & 0xFF;		switch (host_byte) {		case DID_OK:				if (sgp->hd.sense_buffer[0] != 0) {					/*					 * The Linux SCSI system up to 2.1.xx					 * trashes the status byte in the					 * kernel. Until this gets fixed, we					 * need this hack.					 */					sp->error = SCG_RETRYABLE;					status_byte = 2;					sgp->hd.sense_len = SG_MAX_SENSE;				}				break;		case DID_NO_CONNECT:	/* Arbitration won, retry NO_CONNECT? */		case DID_BAD_TARGET:				sp->error = SCG_FATAL;				break;			case DID_TIME_OUT:				sp->error = SCG_TIMEOUT;				break;		default:				sp->error = SCG_RETRYABLE;				break;		}		if ((host_byte != DID_OK || status_byte != 0) && sp->ux_errno == 0)			sp->ux_errno = EIO;		sp->u_scb.cmd_scb[0] = status_byte;		if (status_byte & 2) {			sp->sense_count = sgp->hd.sense_len;			movebytes(sgp->hd.sense_buffer, sp->u_sense.cmd_sense, sp->sense_count);		}	} else#endif	{		if (GETINT(sgp->hd.result) == EBUSY) {	/* Unaligned read */			struct timeval to;			to.tv_sec = sp->timeout;			to.tv_usec = 500000;			scsitimes();			if (cmdstop.tv_sec < to.tv_sec ||			    (cmdstop.tv_sec == to.tv_sec &&				cmdstop.tv_usec < to.tv_usec)) {				sp->ux_errno = 0;				sp->error = SCG_TIMEOUT;	/* a timeout */			} else {				sp->error = SCG_RETRYABLE;	/* may be BUS_BUSY */			}		}		if (sp->flags & SCG_RECV_DATA)			sp->resid = (sp->size + sizeof(struct sg_header)) - amt;		else			sp->resid = 0;	/* sg version1 cannot return DMA resid count */		if (sgp->hd.sense_buffer[0] != 0) {			sp->error = SCG_RETRYABLE;			sp->scb.chk = 1;			sp->sense_count = SG_MAX_SENSE;			movebytes(sgp->hd.sense_buffer, sp->u_sense.cmd_sense, sp->sense_count);			if (sp->ux_errno == 0)				sp->ux_errno = EIO;		}	}	if (verbose > 0 && debug) {#ifdef	SG_GET_BUFSIZE		printf("status: %X pack_len: %d, reply_len: %d pack_id: %d result: %d wn: %d gn: %d cdb_len: %d sense_len: %d sense[0]: %02X\n",				GETINT(sgp->hd.sg_cmd_status),				GETINT(sgp->hd.pack_len),				GETINT(sgp->hd.reply_len),				GETINT(sgp->hd.pack_id),				GETINT(sgp->hd.result),				sgp->hd.want_new,				sgp->hd.grant_new,				sgp->hd.cdb_len,				sgp->hd.sense_len,					sgp->hd.sense_buffer[0]);#else		printf("pack_len: %d, reply_len: %d pack_id: %d result: %d sense[0]: %02X\n",				GETINT(sgp->hd.pack_len),				GETINT(sgp->hd.reply_len),				GETINT(sgp->hd.pack_id),				GETINT(sgp->hd.result),				sgp->hd.sense_buffer[0]);#endif#ifdef	DEBUG		printf("sense: ");		for (i=0; i < 16; i++)			printf("%02X ", sgp->hd.sense_buffer[i]);		printf("\n");#endif	}	if (sp->timeout != deftimeout)		sg_settimeout(f, deftimeout);	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产三级一区二区| 艳妇臀荡乳欲伦亚洲一区| 91片黄在线观看| 奇米777欧美一区二区| 中文字幕中文字幕在线一区 | 欧美一区二区美女| 成人国产在线观看| 麻豆精品视频在线观看免费| 亚洲欧美日韩国产中文在线| wwwwww.欧美系列| 欧美日韩成人综合| 99re这里只有精品首页| 极品少妇xxxx偷拍精品少妇| 亚洲一本大道在线| 国产精品区一区二区三| 日韩欧美国产综合| 色综合久久久久| 国产精品乡下勾搭老头1| 男人的天堂亚洲一区| 亚洲精品高清视频在线观看| 国产精品免费av| 欧美精品一区二区三区高清aⅴ| 欧美无砖专区一中文字| 99re6这里只有精品视频在线观看| 国产在线不卡一卡二卡三卡四卡| 午夜婷婷国产麻豆精品| 亚洲一区二区三区美女| 亚洲丝袜另类动漫二区| 亚洲国产高清不卡| www亚洲一区| 亚洲精品在线观看视频| 4438x亚洲最大成人网| 欧美日韩一级视频| 欧美在线观看18| 91国模大尺度私拍在线视频| av在线这里只有精品| 成人精品免费看| 国产成人精品免费看| 国产精品亚洲一区二区三区在线| 日韩国产精品久久| 日韩不卡一二三区| 日韩激情一区二区| 蜜臀久久99精品久久久久宅男 | 日韩三级电影网址| 91精品在线观看入口| 91精品国产综合久久香蕉麻豆| 欧洲一区二区av| 欧美性色综合网| 欧美日韩一区二区三区在线| 欧美日韩一区二区在线视频| 欧美日韩精品电影| 日韩你懂的电影在线观看| 日韩欧美中文字幕精品| 日韩精品一区二区三区视频 | 中文字幕一区视频| 日韩伦理电影网| 樱花草国产18久久久久| 亚洲国产精品久久久久婷婷884| 亚洲一区二区不卡免费| 婷婷开心激情综合| 蜜臀av国产精品久久久久| 国产在线看一区| 粉嫩久久99精品久久久久久夜| 成年人午夜久久久| 欧美在线高清视频| 日韩欧美成人一区| 国产精品视频九色porn| 亚洲人成小说网站色在线| 亚欧色一区w666天堂| 久久99精品国产麻豆婷婷洗澡| 国产精品香蕉一区二区三区| 91视频在线观看| 欧美电影在哪看比较好| 久久精品一二三| 亚洲欧美激情小说另类| 日韩高清国产一区在线| 国产成人精品免费视频网站| 欧洲日韩一区二区三区| 精品国产区一区| 亚洲少妇最新在线视频| 奇米影视在线99精品| 国产a久久麻豆| 欧美日韩一级黄| 欧美国产日韩精品免费观看| 亚洲一区二区三区小说| 国产精品一二三区在线| 欧美图区在线视频| 久久看人人爽人人| 亚洲精品精品亚洲| 免费的成人av| 成人精品视频一区二区三区尤物| 欧美日韩不卡视频| 国产日韩欧美精品电影三级在线| 亚洲免费观看高清完整版在线观看 | 国产乱码精品一区二区三区忘忧草| 99久久免费精品| 欧美不卡在线视频| 亚洲中国最大av网站| 国产精品一区免费视频| 欧美军同video69gay| 中文字幕中文字幕一区| 蜜臀a∨国产成人精品| 成人国产免费视频| 日韩午夜在线播放| 一区二区三区小说| 国产成人免费xxxxxxxx| 56国语精品自产拍在线观看| 中文字幕视频一区| 国产真实精品久久二三区| 精品婷婷伊人一区三区三| 国产亚洲精品7777| 日韩精品国产精品| 在线观看国产日韩| 国产精品久线在线观看| 国产又黄又大久久| 8x8x8国产精品| 亚洲午夜视频在线观看| 99久久精品免费精品国产| 国产亚洲欧洲997久久综合| 青青草97国产精品免费观看 | 成人精品视频一区| 久久精品免视看| 免费成人结看片| 欧美日韩免费电影| 亚洲美女屁股眼交| www.亚洲人| 国产夜色精品一区二区av| 韩国av一区二区三区在线观看| 制服丝袜一区二区三区| 午夜精品成人在线视频| 色综合久久88色综合天天6| 国产精品欧美综合在线| 国产高清亚洲一区| 2014亚洲片线观看视频免费| 精品一区二区三区欧美| 日韩免费视频线观看| 久久爱www久久做| 日韩一区二区在线看片| 秋霞av亚洲一区二区三| 欧美一区二区三区男人的天堂| 午夜久久久久久电影| 欧美精品1区2区3区| 日韩高清不卡在线| 精品国产制服丝袜高跟| 国产一区二区三区最好精华液| 欧美精品一区二区久久婷婷| 国产一区二区毛片| 国产清纯美女被跳蛋高潮一区二区久久w | 一区二区不卡在线播放| 在线日韩av片| 午夜精品久久久久久久蜜桃app| 欧美日韩一区小说| 日本亚洲电影天堂| 日韩小视频在线观看专区| 蜜桃久久av一区| 精品乱人伦小说| 国产精品伊人色| 国产精品久久久99| 色久综合一二码| 首页亚洲欧美制服丝腿| 日韩免费观看高清完整版| 国产一区二区不卡在线| 久久久久97国产精华液好用吗| 国产成人欧美日韩在线电影| 国产精品美日韩| 欧美视频一区二区三区在线观看| 午夜成人免费电影| 欧美精品一区二区三区在线| 99在线热播精品免费| 午夜精品视频在线观看| 精品国产伦一区二区三区观看方式 | 国产精品美女久久久久久久| 色欧美片视频在线观看| 天堂久久久久va久久久久| 日韩欧美亚洲国产另类| 成人小视频在线| 午夜久久久久久久久| 亚洲精品一区二区三区蜜桃下载| 东方欧美亚洲色图在线| 日本欧洲一区二区| 久久久噜噜噜久噜久久综合| 成人天堂资源www在线| 亚洲一区二区精品久久av| 久久综合网色—综合色88| 在线观看视频91| 国模少妇一区二区三区| 亚洲午夜久久久久久久久久久 | 欧美少妇xxx| 国产制服丝袜一区| 亚洲一级片在线观看| 久久久午夜精品| 在线一区二区三区做爰视频网站| 麻豆成人av在线| 中文字幕日韩av资源站| 日韩一区二区三区在线视频| 91亚洲精品久久久蜜桃网站| 日韩精品午夜视频| 亚洲欧美影音先锋| 精品国产一区二区三区久久影院 | 国产精品一品二品|