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

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

?? scsiseqlib.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
	    	    if ((scsiSpace (pScsiSeqDev, -1, SPACE_CODE_FILEMARK)) == ERROR)	        {		printf ("Backward space unsuccessful\n");	        return (ERROR);		}  	    }	return (unitsRead);	}    return (numDataUnits);    }/********************************************************************************* scsiWrtTape - write data to a SCSI tape device** This routine writes data to the current block on a specified physical* device.  If the boolean <fixedSize> is true, then <numBytes>* represents the number of blocks of size <blockSize>,  * defined in the `pScsiPhysDev' structure.  If variable block sizes are used* (<fixedSize> = FALSE), then <numBytes> represents the actual number of bytes* to be written.  If <numBytes> is greater than the `maxBytesLimit' field* defined in the `pScsiPhysDev' structure, then more than one SCSI transaction* is used to transfer the data.** RETURNS: OK, or ERROR if the data cannot be written or zero bytes are * written.*/STATUS scsiWrtTape    (    SCSI_SEQ_DEV *pScsiSeqDev,    /* ptr to SCSI sequential device info  */    int numBytes,                 /* total bytes or blocks to be written */    char *buffer,                 /* ptr to input data buffer            */    BOOL fixedSize		  /* if variable size blocks             */    )    {    SCSI_COMMAND scsiCommand;	  /* SCSI command byte array          */    SCSI_TRANSACTION scsiXaction; /* info on a SCSI transaction       */    SCSI_PHYS_DEV *pScsiPhysDev;  /* ptr to SCSI physical device info */    STATUS status = ERROR;	  /* status of transaction            */    UINT8 * bufPtr;               /*  ptr to input data buffer        */    UINT timeout;                 /* scsi command timeout             */    int  xferLength;              /* transfer length                  */    int  numBlocks;    int  maxVarBlockLimit;    int  writeBytes;    int  xferBlocks;    SCSI_DEBUG_MSG ("scsiWrtTape:\n", 0, 0, 0, 0, 0, 0);    pScsiPhysDev = pScsiSeqDev->pScsiPhysDev;    /*     * Fixed block size transfer. The block size must be defined in      * pScsiPhysDev prior to calling this function      */    if (fixedSize)        {	numBlocks = numBytes; /* numBytes means numBlocks for fixed blk size */		if (numBlocks > SCSI_MAX_XFER_BLOCKS)	    return (ERROR);	/*	 * Check if the number of blocks to be transferred	 * is less than the max permissible size 	 */	if (numBlocks <= (pScsiPhysDev->pScsiCtrl->maxBytesPerXfer / 			  pScsiSeqDev->seqDev.sd_blkSize))   	    {	    scsiCmdFill (pScsiSeqDev, scsiCommand, SCSI_WRITE, TRUE, 			 numBlocks);	    bufPtr = (UINT8 *) buffer;	    xferLength = numBlocks * pScsiSeqDev->seqDev.sd_blkSize;	    /* 	     * timeout value is based on 100kB/sec xfer and a 5 	     * sec threshold 	     */	    timeout = SCSI_TIMEOUT_5SEC * 50 + (10 * numBlocks *						pScsiPhysDev->blockSize);	    scsiXactionFill (&scsiXaction, scsiCommand, SCSI_WRITE,			     SCSI_GROUP_0_CMD_LENGTH, timeout, xferLength,			     bufPtr);	    	    status = (*pScsiPhysDev->pScsiCtrl->scsiTransact)		     (pScsiPhysDev, &scsiXaction);	    return (status);	    }	else	    {	    /* determine the max number of blocks that can be transferred */            xferBlocks = (pScsiPhysDev->pScsiCtrl->maxBytesPerXfer) /	                 (pScsiSeqDev->seqDev.sd_blkSize);	    while (numBlocks > 0)                {   		scsiCmdFill (pScsiSeqDev, scsiCommand, SCSI_WRITE, TRUE, 			     xferBlocks);		bufPtr = (UINT8 *) buffer;		xferLength = xferBlocks * pScsiSeqDev->seqDev.sd_blkSize;				/* 		 * timeout value is based on 100kB/sec xfer and a 5 		 * sec threshold 		 */		timeout = SCSI_TIMEOUT_5SEC * 50 + (10 * xferBlocks *						    pScsiPhysDev->blockSize);		scsiXactionFill (&scsiXaction, scsiCommand, SCSI_WRITE,				 SCSI_GROUP_0_CMD_LENGTH, timeout, xferLength,				 bufPtr);		status = (*pScsiPhysDev->pScsiCtrl->scsiTransact)		  (pScsiPhysDev, &scsiXaction);		if (status == OK )		    {		     numBlocks -= xferBlocks;		     buffer += (xferBlocks * pScsiSeqDev->seqDev.sd_blkSize);		     if (numBlocks <= 			 (pScsiPhysDev->pScsiCtrl->maxBytesPerXfer /			  pScsiSeqDev->seqDev.sd_blkSize))		       xferBlocks = numBlocks; 		    }		else		    return (status);   		}	    return (status);	    }	}    /* get the maximum variable block size for the device */            maxVarBlockLimit = pScsiPhysDev->maxVarBlockLimit;    if ( maxVarBlockLimit > pScsiPhysDev->pScsiCtrl->maxBytesPerXfer)	maxVarBlockLimit = pScsiPhysDev->pScsiCtrl->maxBytesPerXfer;    /* multiple transactions needed if numBytes > maxVarBlockLimit */    for (writeBytes=0; numBytes > maxVarBlockLimit;	        numBytes -= maxVarBlockLimit, writeBytes += maxVarBlockLimit)        {	scsiCmdFill (pScsiSeqDev, scsiCommand, SCSI_WRITE, FALSE, 		     maxVarBlockLimit);	bufPtr = (UINT8 *) buffer + writeBytes;	xferLength = maxVarBlockLimit;	timeout = SCSI_TIMEOUT_5SEC * 50 + (maxVarBlockLimit * 10);	scsiXactionFill (&scsiXaction, scsiCommand, SCSI_WRITE,			 SCSI_GROUP_0_CMD_LENGTH, timeout, xferLength,			 bufPtr);        status = (*pScsiPhysDev->pScsiCtrl->scsiTransact)    	           (pScsiPhysDev, &scsiXaction);        if (status == ERROR)	    return (status);        }    if (numBytes > 0)	{	scsiCmdFill (pScsiSeqDev, scsiCommand, SCSI_WRITE, FALSE, numBytes);	bufPtr = (UINT8 *) buffer + writeBytes;	xferLength = numBytes;	timeout = SCSI_TIMEOUT_5SEC * 50 + (numBytes * 10);	scsiXactionFill (&scsiXaction, scsiCommand, SCSI_WRITE,			 SCSI_GROUP_0_CMD_LENGTH, timeout, xferLength,			 bufPtr);        status = (*pScsiPhysDev->pScsiCtrl->scsiTransact)    	           (pScsiPhysDev, &scsiXaction);        }    return (status);    }/********************************************************************************* scsiRewind - issue a REWIND command to a SCSI device** This routine issues a REWIND command to a specified SCSI device.** RETURNS: OK, or ERROR if the command fails.*/STATUS scsiRewind    (    SCSI_SEQ_DEV *pScsiSeqDev	/* ptr to SCSI Sequential device */    )    {    SCSI_COMMAND rewindCommand;		/* SCSI command byte array     */    SCSI_TRANSACTION scsiXaction;	/* info on a SCSI transaction  */    SCSI_PHYS_DEV * pScsiPhysDev;    	/* ptr to SCSI physical device */    STATUS status;			/* holds status of transaction */    SCSI_DEBUG_MSG ("scsiRewind:\n", 0, 0, 0, 0, 0, 0);    pScsiPhysDev = pScsiSeqDev->pScsiPhysDev;    rewindCommand[0] = SCSI_OPCODE_REWIND;    rewindCommand[1] = (UINT8) ((pScsiPhysDev->scsiDevLUN & 0x7) << 5);    rewindCommand[2] = (UINT8) 0;    rewindCommand[3] = (UINT8) 0;    rewindCommand[4] = (UINT8) 0;    rewindCommand[5] = (UINT8) 0;    scsiXaction.cmdAddress    = rewindCommand;    scsiXaction.cmdLength     = SCSI_GROUP_0_CMD_LENGTH;    scsiXaction.dataAddress   = (UINT8 *) NULL;    scsiXaction.dataDirection = O_WRONLY;    scsiXaction.dataLength    = 0;    scsiXaction.addLengthByte = NULL;    scsiXaction.cmdTimeout    = SCSI_TIMEOUT_FULL;    scsiXaction.tagType       = SCSI_TAG_DEFAULT;    scsiXaction.priority      = SCSI_THREAD_TASK_PRIORITY;    status = (*pScsiPhysDev->pScsiCtrl->scsiTransact)	      (pScsiPhysDev, &scsiXaction);    return (status);    }/********************************************************************************* scsiReserveUnit - issue a RESERVE UNIT command to a SCSI device** This routine issues a RESERVE UNIT command to a specified SCSI device.** RETURNS: OK, or ERROR if the command fails.*/STATUS scsiReserveUnit    (    SCSI_SEQ_DEV *pScsiSeqDev	/* ptr to SCSI sequential device */    )    {    SCSI_COMMAND reserveUnitCommand;	/* SCSI command byte array     */    SCSI_TRANSACTION scsiXaction;	/* info on a SCSI transaction  */    SCSI_PHYS_DEV *pScsiPhysDev;        /* ptr to SCSI physical device */    STATUS status;			/* status of transaction       */    SCSI_DEBUG_MSG ("scsiReserveUnit:\n", 0, 0, 0, 0, 0, 0);    pScsiPhysDev = pScsiSeqDev->pScsiPhysDev;    reserveUnitCommand[0] = SCSI_OPCODE_RESERVE;    reserveUnitCommand[1] = (UINT8) 0;    reserveUnitCommand[2] = (UINT8) 0;    reserveUnitCommand[3] = (UINT8) 0;    reserveUnitCommand[4] = (UINT8) 0;    reserveUnitCommand[5] = (UINT8) 0;    scsiXaction.cmdAddress    = reserveUnitCommand;    scsiXaction.cmdLength     = SCSI_GROUP_0_CMD_LENGTH;    scsiXaction.dataAddress   = (UINT8 *) NULL;    scsiXaction.dataDirection = O_WRONLY;    scsiXaction.dataLength    = 0;    scsiXaction.addLengthByte = NULL;    scsiXaction.cmdTimeout    = SCSI_TIMEOUT_5SEC;    scsiXaction.tagType       = SCSI_TAG_DEFAULT;    scsiXaction.priority      = SCSI_THREAD_TASK_PRIORITY;    status = (*pScsiPhysDev->pScsiCtrl->scsiTransact)	      (pScsiPhysDev, &scsiXaction);    return (status);    }/********************************************************************************* scsiReleaseUnit - issue a RELEASE UNIT command to a SCSI device** This routine issues a RELEASE UNIT command to a specified SCSI device.** RETURNS: OK, or ERROR if the command fails.*/STATUS scsiReleaseUnit    (    SCSI_SEQ_DEV *pScsiSeqDev	/* ptr to SCSI sequential device */    )    {    SCSI_COMMAND releaseUnitCommand;	/* SCSI command byte array     */    SCSI_TRANSACTION scsiXaction;	/* info on a SCSI transaction  */    SCSI_PHYS_DEV *pScsiPhysDev;        /* ptr to SCSI physical device */    STATUS status;			/* status of transaction       */    SCSI_DEBUG_MSG ("scsiReleaseUnit:\n", 0, 0, 0, 0, 0, 0);    pScsiPhysDev = pScsiSeqDev->pScsiPhysDev;    releaseUnitCommand[0] = SCSI_OPCODE_RELEASE;    releaseUnitCommand[1] = (UINT8) 0;    releaseUnitCommand[2] = (UINT8) 0;    releaseUnitCommand[3] = (UINT8) 0;    releaseUnitCommand[4] = (UINT8) 0;    releaseUnitCommand[5] = (UINT8) 0;    scsiXaction.cmdAddress    = releaseUnitCommand;    scsiXaction.cmdLength     = SCSI_GROUP_0_CMD_LENGTH;    scsiXaction.dataAddress   = (UINT8 *) NULL;    scsiXaction.dataDirection = O_WRONLY;    scsiXaction.dataLength    = 0;    scsiXaction.addLengthByte = NULL;    scsiXaction.cmdTimeout    = SCSI_TIMEOUT_5SEC;    scsiXaction.tagType       = SCSI_TAG_DEFAULT;    scsiXaction.priority      = SCSI_THREAD_TASK_PRIORITY;    status = (*pScsiPhysDev->pScsiCtrl->scsiTransact)	      (pScsiPhysDev, &scsiXaction);    return (status);    }/********************************************************************************* scsiLoadUnit - issue a LOAD/UNLOAD command to a SCSI device** This routine issues a LOAD/UNLOAD command to a specified SCSI device.** RETURNS: OK, or ERROR if the command fails.*/STATUS scsiLoadUnit    (    SCSI_SEQ_DEV * pScsiSeqDev,	        /* ptr to SCSI physical device */    BOOL           load,		/* TRUE=load, FALSE=unload     */    BOOL	   reten,		/* TRUE=retention and unload   */    BOOL	   eot			/* TRUE=end of tape and unload */    )    {    SCSI_COMMAND loadCommand;		/* SCSI command byte array     */    SCSI_TRANSACTION scsiXaction;	/* info on a SCSI transaction  */    SCSI_PHYS_DEV *pScsiPhysDev;	/* ptr to SCSI physical device */    STATUS status;			/* status of transaction       */    SCSI_DEBUG_MSG ("scsiLoadUnit:\n", 0, 0, 0, 0, 0, 0);    pScsiPhysDev = pScsiSeqDev->pScsiPhysDev;    loadCommand[0] = SCSI_OPCODE_LOAD_UNLOAD;    loadCommand[1] = (UINT8) 0;    loadCommand[2] = (UINT8) 0;    loadCommand[3] = (UINT8) 0;    /*      * Check for load, retension and eot (TRUE/FALSE) conditions.     * Byte4 bit2 of CDB: eot     * Byte4 bit1 of CDB: reten     * Byte4 bit0 of CDB: load     */    if (load && eot) 		/* invalid condition */	return (ERROR);    if (load)        loadCommand[4] = (UINT8) 1;    else /* unload */	{        loadCommand[4] = (UINT8) 0;        if (eot)	    loadCommand[4] |= (0x1 << 2);        }    if (reten)    	loadCommand[4] |= (0x1 << 1);    loadCommand[5] = (UINT8) 0;    scsiXaction.cmdAddress    = loadCommand;    scsiXaction.cmdLength     = SCSI_GROUP_0_CMD_LENGTH;    scsiXaction.dataAddress   = (UINT8 *) NULL;    scsiXaction.dataDirection = O_WRONLY;    scsiXaction.dataLength    = 0;    scsiXaction.addLengthByte = NULL;    scsiXaction.cmdTimeout    = SCSI_TIMEOUT_5SEC * 10;    scsiXaction.tagType       = SCSI_TAG_DEFAULT;    scsiXaction.priority      = SCSI_THREAD_TASK_PRIORITY;    status = (*pScsiPhysDev->pScsiCtrl->scsiTransact)	      (pScsiPhysDev, &scsiXaction);    return (status);    }/********************************************************************************* scsiWrtFileMarks - write file marks to a SCSI sequential device** This routine writes file marks to a specified physical device.** RETURNS: OK, or ERROR if the file mark cannot be written.*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩电影在线观看网站| 成人aa视频在线观看| 日本美女一区二区| 日韩黄色在线观看| 亚洲成人av资源| 午夜成人在线视频| 精品一区二区在线视频| 成人av在线观| 欧美日韩视频不卡| 精品久久久久一区二区国产| 136国产福利精品导航| 亚洲综合在线视频| 久久国产三级精品| 成人av网站在线观看免费| 91亚洲午夜精品久久久久久| 欧美午夜寂寞影院| 日韩欧美一级二级三级久久久| 国产精品欧美经典| 亚洲最新视频在线观看| 国产在线精品一区二区夜色| av在线不卡电影| 日韩一区二区电影在线| 中文字幕精品综合| 五月综合激情网| 欧美一卡2卡3卡4卡| 国产午夜精品美女毛片视频| 亚洲免费观看高清完整版在线 | 亚洲精品国产精华液| 三级在线观看一区二区| 国产精品一区二区黑丝| 91精品国产综合久久久久久| 亚洲国产精品v| 久久成人av少妇免费| 99这里只有久久精品视频| 欧美大片顶级少妇| 亚洲欧美另类小说视频| 国内精品伊人久久久久av一坑| 91网站视频在线观看| 精品伦理精品一区| 一区二区三区精品在线| 国产激情一区二区三区四区| 日韩一级片网站| 亚洲免费在线观看视频| 国产99一区视频免费| 欧美日韩在线精品一区二区三区激情| 国产欧美日韩久久| 日韩高清在线一区| 欧洲精品一区二区三区在线观看| 26uuu亚洲综合色欧美| 日韩在线播放一区二区| 色综合久久综合网| 欧美激情一区二区三区在线| 男人的天堂亚洲一区| 久久99最新地址| 欧美一区二区视频免费观看| 日韩理论片在线| 成人免费看视频| 久久免费看少妇高潮| 麻豆视频一区二区| 欧美色网站导航| 中文字幕一区二区三中文字幕| 九九国产精品视频| 欧美日韩成人综合在线一区二区| 亚洲少妇30p| 成人激情校园春色| 久久这里只有精品6| 免费高清在线一区| 欧美日本视频在线| 国产精品二三区| 成人性色生活片| 久久丝袜美腿综合| 免费xxxx性欧美18vr| 欧美唯美清纯偷拍| 亚洲线精品一区二区三区八戒| 白白色 亚洲乱淫| 国产三级久久久| 国产原创一区二区三区| 91精品麻豆日日躁夜夜躁| 一区二区三区久久| 91国偷自产一区二区三区观看| 中文字幕亚洲一区二区va在线| 国产成人免费xxxxxxxx| 久久久夜色精品亚洲| 日本不卡高清视频| 日韩一区二区视频| 日本不卡高清视频| 这里是久久伊人| 琪琪久久久久日韩精品| 在线播放国产精品二区一二区四区| 一区二区三区日韩精品| 91捆绑美女网站| 亚洲女同女同女同女同女同69| 成人午夜碰碰视频| 亚洲国产精品激情在线观看| 成人黄色软件下载| 亚洲欧洲日本在线| 91免费看片在线观看| 一区二区三区四区乱视频| 色婷婷av一区二区三区gif| 亚洲免费观看高清在线观看| 丁香亚洲综合激情啪啪综合| 综合电影一区二区三区 | 欧美一个色资源| 日本亚洲一区二区| 欧美xxxx老人做受| 国产iv一区二区三区| 欧美高清一级片在线观看| 波多野洁衣一区| 一区二区三区四区视频精品免费| 91影视在线播放| 国产精品嫩草影院com| 成人av网在线| 一区二区三区国产豹纹内裤在线| 欧美亚洲日本国产| 日本成人在线一区| 久久久久亚洲综合| av在线一区二区| 性欧美大战久久久久久久久| 日韩一区二区三区观看| 国产精品自拍在线| 亚洲同性gay激情无套| 欧美色图12p| 美国毛片一区二区| 中文在线免费一区三区高中清不卡| www.色综合.com| 亚洲国产精品久久久久婷婷884| 日韩精品专区在线影院重磅| 精品一区二区三区在线观看 | 国产精品美女久久久久久| 色香蕉成人二区免费| 亚洲高清不卡在线观看| 久久综合色播五月| 91影视在线播放| 美女脱光内衣内裤视频久久网站 | 日本一区二区三区在线观看| 色婷婷久久久久swag精品| 无码av中文一区二区三区桃花岛| 欧美一级艳片视频免费观看| 国内精品自线一区二区三区视频| 国产精品丝袜一区| 日韩欧美资源站| 色综合亚洲欧洲| 久久电影国产免费久久电影| 亚洲三级视频在线观看| 日韩欧美一区中文| 色婷婷久久一区二区三区麻豆| 奇米精品一区二区三区在线观看 | 1000部国产精品成人观看| 在线电影国产精品| 丁香另类激情小说| 美女视频一区在线观看| 亚洲美女免费视频| 精品99999| 91福利国产精品| 久久99久久精品| 亚洲乱码精品一二三四区日韩在线| 日韩三级视频在线看| 在线视频你懂得一区| 国产精品99久久久久久有的能看| 亚洲图片有声小说| 国产精品美日韩| 欧美成人video| 精品视频在线免费| 99国产精品国产精品毛片| 国内久久婷婷综合| 日韩高清国产一区在线| 国产精品国模大尺度视频| 日韩免费高清av| 欧美揉bbbbb揉bbbbb| av成人免费在线观看| 国产一区二区三区电影在线观看 | 国产精品18久久久久久vr| 日精品一区二区三区| 一区二区三区国产精品| 国产女人aaa级久久久级| 日韩欧美国产一区二区在线播放| 欧美性感一区二区三区| 91在线精品一区二区| 国产成人精品亚洲777人妖 | 91高清视频免费看| av在线这里只有精品| 国产iv一区二区三区| 看电影不卡的网站| 男人的j进女人的j一区| 亚洲最大的成人av| 亚洲少妇中出一区| 国产精品家庭影院| 中文字幕电影一区| 久久久国产精品午夜一区ai换脸| 日韩色在线观看| 欧美一级高清片| 欧美色视频一区| 色伊人久久综合中文字幕| 国产a级毛片一区| av在线不卡电影| 91蜜桃在线免费视频| av色综合久久天堂av综合| 风间由美一区二区三区在线观看 | 亚洲成人av在线电影| 一区二区三区四区蜜桃|