亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
精品亚洲免费视频| av中文字幕亚洲| 91久久精品午夜一区二区| 在线亚洲+欧美+日本专区| 亚洲精品美国一| 欧美三级三级三级爽爽爽| 日韩精品一级中文字幕精品视频免费观看 | 国产欧美日韩视频在线观看| 国产麻豆视频精品| 亚洲视频一区在线| 日韩一级成人av| 丁香桃色午夜亚洲一区二区三区| 中文字幕av资源一区| 91丝袜美腿高跟国产极品老师 | 欧美美女网站色| 国产一区二区三区在线观看免费| 国产精品蜜臀在线观看| 欧美日韩在线一区二区| 国产在线播放一区二区三区| 日韩精品视频网| 成人av网址在线| 成人欧美一区二区三区1314 | 日韩一区欧美一区| 欧美一区二区三区视频在线| 国产精品综合网| 天天综合色天天| 亚洲男人天堂av网| 久久视频一区二区| 6080日韩午夜伦伦午夜伦| jiyouzz国产精品久久| 日本免费新一区视频| 成人中文字幕电影| 久久久精品综合| 在线成人av影院| 91成人免费电影| 不卡一区二区中文字幕| 乱中年女人伦av一区二区| 亚洲精品乱码久久久久久| 欧美精品一区二区三区高清aⅴ| 在线视频亚洲一区| eeuss影院一区二区三区| 韩国一区二区在线观看| 亚洲超碰精品一区二区| 亚洲免费在线播放| 日本一区二区三区在线不卡| 欧美精品丝袜久久久中文字幕| 97se狠狠狠综合亚洲狠狠| 国产精品乡下勾搭老头1| 激情文学综合网| 激情五月激情综合网| 99久久99久久精品免费看蜜桃| 国产一区二区三区在线观看免费视频 | 国产视频一区二区在线| 国产亚洲欧美色| 国产欧美日韩在线视频| 国产精品久久久久婷婷| 自拍av一区二区三区| 亚洲精品日韩综合观看成人91| 国产精品动漫网站| 亚洲另类春色国产| 香蕉av福利精品导航| 蜜臀av性久久久久蜜臀av麻豆| 美女看a上一区| 国产做a爰片久久毛片| 成人网男人的天堂| 91久久线看在观草草青青| 在线观看国产精品网站| 69精品人人人人| 精品少妇一区二区三区| 日本一区二区三区在线观看| 一区二区三区在线免费| 日本午夜精品视频在线观看 | 欧美日韩和欧美的一区二区| 91精品国产免费| 日本一区二区成人在线| 亚洲最大的成人av| 韩国一区二区在线观看| 99re6这里只有精品视频在线观看| 2021国产精品久久精品| 中文字幕日韩av资源站| 日本人妖一区二区| 成av人片一区二区| 欧美一区二区在线看| 亚洲视频资源在线| 捆绑调教一区二区三区| 91丨九色丨蝌蚪富婆spa| 欧美一区二区人人喊爽| 亚洲欧美一区二区三区国产精品 | 亚洲一区电影777| 国产福利一区在线| 91精品福利在线一区二区三区| 久久午夜国产精品| 免费成人小视频| 色欧美日韩亚洲| 国产欧美日韩中文久久| 精品在线视频一区| 欧美日韩精品欧美日韩精品 | 精品电影一区二区| 午夜精品视频一区| 日本电影欧美片| 亚洲欧美在线另类| av高清不卡在线| 国产欧美综合色| 国产东北露脸精品视频| 日韩精品一区二区三区视频 | 国产精品一区在线观看乱码 | 日本一区二区综合亚洲| 国产经典欧美精品| 久久久亚洲精华液精华液精华液| 日本强好片久久久久久aaa| 欧美视频精品在线观看| 夜夜亚洲天天久久| 欧美日韩综合在线免费观看| 亚洲一卡二卡三卡四卡无卡久久| 日韩欧美的一区二区| 国产亚洲欧美激情| 天天色天天爱天天射综合| 欧美主播一区二区三区美女| 亚洲欧美福利一区二区| 91福利国产成人精品照片| 亚洲乱码国产乱码精品精的特点| 91麻豆精品一区二区三区| 亚洲精品免费在线播放| 欧美日韩亚洲丝袜制服| 五月综合激情婷婷六月色窝| 欧美一区二区三区公司| 国产一区二区三区四| 国产视频不卡一区| 欧洲激情一区二区| 日本欧美一区二区三区乱码| www国产亚洲精品久久麻豆| 国产精华液一区二区三区| 一区二区三区免费看视频| 91精品国产综合久久精品app | 久久伊人中文字幕| 99久久伊人久久99| 日韩高清中文字幕一区| 久久蜜桃一区二区| 在线视频欧美精品| 国产一区免费电影| 亚洲综合久久av| 亚洲精品一区二区三区福利| 91在线无精精品入口| 日韩制服丝袜av| 欧美高清一级片在线观看| 在线一区二区三区四区| 国精产品一区一区三区mba桃花 | 在线中文字幕一区二区| 国产主播一区二区| 偷拍一区二区三区| 国产精品亲子伦对白| 91麻豆精品国产91久久久久| 一本久久a久久精品亚洲 | 中文字幕免费不卡| 日韩精品专区在线影院观看| 91福利社在线观看| 99久久精品免费精品国产| 激情亚洲综合在线| 日本不卡视频在线| 亚洲一区二区三区在线| 国产精品久久久久久妇女6080| 日韩一区二区电影在线| 在线精品视频一区二区三四| yourporn久久国产精品| 成人一区二区三区视频 | 色综合久久综合中文综合网| 亚洲一二三四久久| 亚洲影院免费观看| 亚洲视频中文字幕| 久久久久久久久久久99999| 日韩一区二区不卡| 欧美日韩激情一区二区三区| 色香色香欲天天天影视综合网| 大陆成人av片| 国产精品88av| 国产成人三级在线观看| 天堂影院一区二区| 亚洲电影在线播放| 亚洲永久免费av| 亚洲国产成人av网| 午夜欧美在线一二页| 一区二区三区四区精品在线视频 | 成人av综合一区| 粉嫩在线一区二区三区视频| 国内久久婷婷综合| 国产高清视频一区| 成人v精品蜜桃久久一区| 国产一区在线观看麻豆| 国产一区二区不卡老阿姨| 国产又黄又大久久| 成人激情图片网| 欧美午夜精品久久久| 欧美日韩久久不卡| 亚洲视频一区在线观看| 亚洲在线观看免费| 奇米色一区二区| 国产精品996| jlzzjlzz亚洲日本少妇| 精品视频一区二区不卡| 日韩精品一区在线|