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

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

?? scsiseqlib.c

?? VxWorks操作系統內核源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
/* scsiSeqLib.c - SCSI sequential access device library (SCSI-2) *//* Copyright 1989-1994 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------02k,21feb99,jdi  doc: listed errnos.02j,09jul97,dgp  doc: correct fonts per SPR 785302i,06mar97,dds  SPR 8120: fixed scsiRdTape to return the actual number of                 bytes or blocks read, 0 if end of file, or ERROR.02h,29oct96,dgp  doc: editing for newly published SCSI libraries02g,16sep96,dds  removed compiler warnings.02f,23jul96,dds  SPR 6718: added support for tranfers above 16 MB.02e,06may96,jds  more doc tweaks02d,01may96,jds  doc tweaks02c,20sep95,jds  changed scsiStatusCheck to scsiSeqStatusCheck and made it		 global02b,26jul95,jds  maxVarBlockLimit to be set by scsiPhysDevCreate (Wrt & Rd) 02a,10may95,jds  reworked for use with enhanced SCSI-2 library; added tagType,		 and priority ; removed the idea of retrying command upon		 UNIT_ATTENTION which should be managed by higher level layer.01e,28jun94,ccc  doc tweaks.01d,21jun94,ccc  changed dataAddress from NONE to NULL.01c,27apr94,jdi	 doc tweaks.01b,20apr94,jds	 enhanced scsiWrtTape and scsiRdTape to correctly handle fixed		 block transfers and variable block transfers with maxBlockLimit01a,24jan94,ccc  created to support sequential access SCSI devices.*//*DESCRIPTIONThis library contains commands common to all sequential-access SCSI devices.Sequential-access SCSI devices are usually SCSI tape devices.These routines are separated from scsi2Lib in order to create an additionallayer for better support of all SCSI sequential devices.SCSI commands in this library include:.TStab(|);lf3 lf3l l.Command			| Op Code_ERASE			| (0x19)MODE SELECT (6)		| (0x15)MODE_SENSE (6)		| (0x1a)READ (6)		| (0x08)READ BLOCK LIMITS	| (0x05)RELEASE UNIT		| (0x17)RESERVE UNIT		| (0x16)REWIND			| (0x01)SPACE			| (0x11)WRITE (6)		| (0x0a)WRITE FILEMARKS		| (0x10)LOAD/UNLOAD		| (0x1b).TEThe SCSI routines implemented here operate mostly on a SCSI_SEQ_DEVstructure.  This structure acts as an interface between this libraryand a higher-level layer.  The SEQ_DEV structure is analogous to theBLK_DEV structure for block devices.  The scsiSeqDevCreate() routine creates a SCSI_SEQ_DEV structure whose first element is a SEQ_DEV, operated upon by higher layers.  This routine publishesall functions to be invoked byhigher layers and maintains some state information (for example, block size)for tracking SCSI-sequential-device information.INCLUDE FILESscsiLib.h, scsi2Lib.hSEE ALSO: tapeFsLib, scsi2Lib,.pG "I/O System, Local File Systems"*/#define  INCLUDE_SCSI2#include "vxWorks.h"#include "ioLib.h"#include "ctype.h"#include "stdlib.h"#include "errnoLib.h"#include "taskLib.h"#include "logLib.h"#include "string.h"#include "stdio.h"#include "scsiLib.h"#include "sysLib.h"#define MODE_BUF_LENGTH 	  0xff#define SCSI_MAX_XFER_BLOCKS  0xffffff#define SCSI_READ             0x00#define SCSI_WRITE            0x01/* globals */IMPORT BOOL scsiDebug;			/* enable task level debug messages */IMPORT BOOL scsiIntsDebug;		/* enable int level debug messages *//* select timeout to use when creating a SCSI_PHYS_DEV */IMPORT UINT32 scsiSelectTimeout;IMPORT SCSI_CTRL *pSysScsiCtrl;		/* ptr to default SCSI_CTRL struct */LOCAL VOID scsiXactionFill (SCSI_TRANSACTION *, SCSI_COMMAND, BOOL, int, UINT,			    int, UINT8 *);LOCAL VOID scsiCmdFill (SCSI_SEQ_DEV *, SCSI_COMMAND , BOOL, BOOL, int);LOCAL int scsiRdTapeFixedBlocks (SCSI_SEQ_DEV *, UINT, char * );LOCAL int scsiRdTapeVariableBlocks (SCSI_SEQ_DEV *, UINT, char * );LOCAL int scsiCalcDataRead (SCSI_SEQ_DEV *, UINT);/********************************************************************************* scsiSeqDevCreate - create a SCSI sequential device** This routine creates a SCSI sequential device and saves a pointer to this* SEQ_DEV in the SCSI physical device. The following functions are* initialized in this structure:** .TS* tab(|);* l l.* sd_seqRd           | -  scsiRdTape()* sd_seqWrt          | -  scsiWrtTape()* sd_ioctl           | -  scsiIoctl() (in scsiLib)* sd_seqWrtFileMarks | -  scsiWrtFileMarks()* sd_statusChk       | -  scsiSeqStatusCheck()* sd_reset           | -  (not used)* sd_rewind          | -  scsiRewind()* sd_reserve         | -  scsiReserve()* sd_release         | -  scsiRelease()* sd_readBlkLim      | -  scsiSeqReadBlockLimits()* sd_load            | -  scsiLoadUnit()* sd_space           | -  scsiSpace()* sd_erase           | -  scsiErase()* .TE** Only one SEQ_DEV per SCSI_PHYS_DEV is allowed, unlike BLK_DEVs where an * entire list is maintained. Therefore, this routine can be called only * once per creation of a sequential device.** RETURNS: A pointer to the SEQ_DEV structure, or NULL if the command fails. * */SEQ_DEV *scsiSeqDevCreate    (    SCSI_PHYS_DEV *pScsiPhysDev  /* ptr to SCSI physical device info */    )    {    SCSI_SEQ_DEV      *pScsiSeqDev;     /* ptr to SCSI sequential dev struct */    /* check parameter for validity */    if (pScsiPhysDev == NULL)	{	errnoSet (S_scsiLib_ILLEGAL_PARAMETER);	SCSI_DEBUG_MSG ("scsiSeqDevCreate: Invalid input parameter(s).\n",				0, 0, 0, 0, 0, 0);	return ((SEQ_DEV *) NULL);	}    /* Check if sequential device alread exists */    if (pScsiPhysDev->pScsiSeqDev != NULL)	{        errnoSet (S_scsiLib_ILLEGAL_OPERATION);        SCSI_DEBUG_MSG ("scsiSeqDevCreate: SEQ_DEV already exists.\n", 							0, 0, 0, 0, 0, 0);        return ((SEQ_DEV *) NULL);        }    /* return NULL if not a sequential access device */    if (pScsiPhysDev->scsiDevType != SCSI_DEV_SEQ_ACCESS)        {        errnoSet (S_scsiLib_ILLEGAL_OPERATION);        SCSI_DEBUG_MSG ("scsiSeqDevCreate:", 0, 0, 0, 0, 0, 0);        SCSI_DEBUG_MSG ("Physical device is not a sequential device.\n",                        0, 0, 0, 0, 0, 0);        return ((SEQ_DEV *) NULL);        }    if (!pScsiPhysDev->removable)        SCSI_DEBUG_MSG ("scsiSeqDevCreate: Odd! Non removable tape!!\n",						0, 0, 0, 0, 0, 0);    pScsiSeqDev = (SCSI_SEQ_DEV *) calloc (1, sizeof (SCSI_SEQ_DEV));    if (pScsiSeqDev == NULL)	return ((SEQ_DEV *) NULL);    pScsiSeqDev->seqDev.sd_seqRd           = (FUNCPTR) scsiRdTape;    pScsiSeqDev->seqDev.sd_seqWrt          = (FUNCPTR) scsiWrtTape;    pScsiSeqDev->seqDev.sd_ioctl           = (FUNCPTR) scsiIoctl;    pScsiSeqDev->seqDev.sd_seqWrtFileMarks = (FUNCPTR) scsiWrtFileMarks;    pScsiSeqDev->seqDev.sd_rewind 	   = (FUNCPTR) scsiRewind;    pScsiSeqDev->seqDev.sd_reserve 	   = (FUNCPTR) scsiReserveUnit;    pScsiSeqDev->seqDev.sd_release 	   = (FUNCPTR) scsiReleaseUnit;    pScsiSeqDev->seqDev.sd_readBlkLim	   = (FUNCPTR) scsiSeqReadBlockLimits;    pScsiSeqDev->seqDev.sd_load 	   = (FUNCPTR) scsiLoadUnit;    pScsiSeqDev->seqDev.sd_space 	   = (FUNCPTR) scsiSpace;    pScsiSeqDev->seqDev.sd_erase 	   = (FUNCPTR) scsiErase;    pScsiSeqDev->seqDev.sd_statusChk       = (FUNCPTR) scsiSeqStatusCheck;    pScsiSeqDev->seqDev.sd_reset           = (FUNCPTR) NULL;    pScsiSeqDev->seqDev.sd_readyChanged    = TRUE;    pScsiSeqDev->pScsiPhysDev = pScsiPhysDev;    pScsiPhysDev->pScsiSeqDev = pScsiSeqDev;    /* Note: sd_blkSize and sd_mode are left uninitialized */    /* this should be the same as returning (SEQ_DEV *) pScsiSeqDev ?? */    return (&pScsiSeqDev->seqDev);    }    /********************************************************************************* scsiErase - issue an ERASE command to a SCSI device** This routine issues an ERASE command to a specified SCSI device.** RETURNS: OK, or ERROR if the command fails.*/STATUS scsiErase    (    SCSI_PHYS_DEV *pScsiPhysDev,	/* ptr to SCSI physical device */    BOOL longErase			/* TRUE for entire tape erase  */    )    {    SCSI_COMMAND eraseCommand;		/* SCSI command byte array */    SCSI_TRANSACTION scsiXaction;	/* info on a SCSI transaction */    STATUS status;			/* status of transaction */    SCSI_DEBUG_MSG ("scsiErase:\n", 0, 0, 0, 0, 0, 0);    /*     * Build the SCSI command. Do not use scsiCmdBuild, because that function     * is used only for direct access commands.     */    eraseCommand[0] = SCSI_OPCODE_ERASE;    eraseCommand[1] = (UINT8) ((pScsiPhysDev->scsiDevLUN & 0x7) << 5);    if (longErase)	eraseCommand [1] |= 0x01;	/* set long bit */    eraseCommand[2] = (UINT8) 0;    eraseCommand[3] = (UINT8) 0;    eraseCommand[4] = (UINT8) 0;    eraseCommand[5] = (UINT8) 0;    scsiXaction.cmdAddress    = eraseCommand;    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);    }/********************************************************************************* scsiTapeModeSelect - issue a MODE_SELECT command to a SCSI tape device** This routine issues a MODE_SELECT command to a specified SCSI device.** RETURNS: OK, or ERROR if the command fails.*/STATUS scsiTapeModeSelect    (    SCSI_PHYS_DEV *pScsiPhysDev,/* ptr to SCSI physical device            */    int pageFormat,             /* value of the page format bit (0-1)     */    int saveParams,             /* value of the save parameters bit (0-1) */    char *buffer,               /* ptr to output data buffer              */    int bufLength               /* length of buffer in bytes              */    )    {    SCSI_COMMAND scsiCommand;		/* SCSI command byte array */    SCSI_TRANSACTION scsiXaction;	/* info on a SCSI transaction */    STATUS status;			/* status of transaction */    SCSI_DEBUG_MSG ("scsiTapeModeSelect:\n", 0, 0, 0, 0, 0, 0);    scsiCommand[0] = SCSI_OPCODE_MODE_SELECT;    scsiCommand[1] = (UINT8) ((pScsiPhysDev->scsiDevLUN & 0x7) << 5);    scsiCommand[1] |= ((UINT8) ((pageFormat & 1) << 4) |		       (UINT8) (saveParams & 1));    scsiCommand[2] = (UINT8) 0;    scsiCommand[3] = (UINT8) 0;    scsiCommand[4] = (UINT8) (bufLength & 0xff);    scsiCommand[5] = (UINT8) 0;    scsiXaction.cmdAddress    = scsiCommand;    scsiXaction.cmdLength     = SCSI_GROUP_0_CMD_LENGTH;    scsiXaction.dataAddress   = (UINT8 *) buffer;    scsiXaction.dataDirection = O_WRONLY;    scsiXaction.dataLength    = min (0xff, bufLength);    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);    }/********************************************************************************* scsiTapeModeSense - issue a MODE_SENSE command to a SCSI tape device** This routine issues a MODE_SENSE command to a specified SCSI tape device.** RETURNS: OK, or ERROR if the command fails.*/STATUS scsiTapeModeSense    (    SCSI_PHYS_DEV *pScsiPhysDev,/* ptr to SCSI physical device           */    int pageControl,            /* value of the page control field (0-3) */    int pageCode,               /* value of the page code field (0-0x3f) */    char *buffer,               /* ptr to input data buffer              */    int bufLength               /* length of buffer in bytes             */    )    {    SCSI_COMMAND scsiCommand;	/* SCSI command byte array */    SCSI_TRANSACTION scsiXaction;	/* info on a SCSI transaction */    STATUS status;			/* status of transaction */    SCSI_DEBUG_MSG ("scsiModeSense: cmdAddress 0x%x\n", (int) scsiCommand,								0, 0, 0, 0, 0);    scsiCommand[0] = SCSI_OPCODE_MODE_SENSE;    scsiCommand[1] = (UINT8) ((pScsiPhysDev->scsiDevLUN & 0x7) << 5);    scsiCommand[2] = (UINT8) ((pageControl << 6) | pageCode);    scsiCommand[3] = (UINT8) 0;    scsiCommand[4] = (UINT8) (bufLength & 0xff);    scsiCommand[5] = (UINT8) 0;    scsiXaction.cmdAddress    = scsiCommand;    scsiXaction.cmdLength     = SCSI_GROUP_0_CMD_LENGTH;    scsiXaction.dataAddress   = (UINT8 *) buffer;    scsiXaction.dataDirection = O_RDONLY;    scsiXaction.dataLength    = min (0xff, bufLength);    scsiXaction.addLengthByte = MODE_SENSE_ADD_LENGTH_BYTE;    scsiXaction.cmdTimeout    = SCSI_TIMEOUT_5SEC;    scsiXaction.tagType       = SCSI_TAG_DEFAULT;    scsiXaction.priority      = SCSI_THREAD_TASK_PRIORITY;    status = (*pScsiPhysDev->pScsiCtrl->scsiTransact)	      (pScsiPhysDev, &scsiXaction);    return (status);    }/********************************************************************************* scsiReadBlockLimits - issue a READ_BLOCK_LIMITS command to a SCSI device** This routine issues a READ_BLOCK_LIMITS command to a specified SCSI device.** RETURNS: OK, or ERROR if the command fails.** NOMANUAL*/STATUS scsiReadBlockLimits    (    SCSI_PHYS_DEV * pScsiPhysDev,/* ptr to SCSI physical device          */    int    *pMaxBlockLength,     /* where to return maximum block length */    UINT16 *pMinBlockLength      /* where to return minimum block length */    )    {    SCSI_COMMAND readBlockLimitCommand;	/* SCSI command byte array */    RD_BLOCK_LIMIT_DATA readBlkLimitData; /* data structure for results */    SCSI_TRANSACTION scsiXaction;	  /* info on a SCSI transaction */    STATUS status;			  /* status of the transaction */    SCSI_DEBUG_MSG ("scsiReadBlockLimit:\n", 0, 0, 0, 0, 0, 0);    readBlockLimitCommand[0] = SCSI_OPCODE_READ_BLOCK_LIMITS;    readBlockLimitCommand[1] = (UINT8) ((pScsiPhysDev->scsiDevLUN & 0x7) << 5);    readBlockLimitCommand[2] = (UINT8) 0;    readBlockLimitCommand[3] = (UINT8) 0;    readBlockLimitCommand[4] = (UINT8) 0;    readBlockLimitCommand[5] = (UINT8) 0;    scsiXaction.cmdAddress    = readBlockLimitCommand;    scsiXaction.cmdLength     = SCSI_GROUP_0_CMD_LENGTH;    scsiXaction.dataAddress   = (UINT8 *) &readBlkLimitData;    scsiXaction.dataDirection = O_RDONLY;    scsiXaction.dataLength    = sizeof (readBlkLimitData);    scsiXaction.addLengthByte = NULL;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美国产综合| 国产精品素人一区二区| 国产中文字幕精品| 亚洲视频一区二区免费在线观看| 日韩欧美一级二级| 欧美日本不卡视频| 在线观看免费视频综合| 91亚洲精品久久久蜜桃| 成人免费视频网站在线观看| 成人午夜电影网站| 不卡av电影在线播放| 91小视频在线免费看| 99久久免费精品| 91久久精品网| 欧美三级一区二区| 欧美日韩国产成人在线免费| 91国模大尺度私拍在线视频| 91国偷自产一区二区使用方法| 色诱亚洲精品久久久久久| 在线观看国产91| 欧美日韩国产一级二级| 欧美第一区第二区| 国产精品欧美综合在线| 亚洲一区国产视频| 亚洲国产精品av| 亚洲精品国产a| 免费看日韩精品| 国产999精品久久久久久绿帽| 99免费精品视频| 欧美日韩久久不卡| 久久久91精品国产一区二区精品 | 久久99精品国产麻豆婷婷洗澡| 美女视频黄久久| 国产精品一区专区| 在线观看视频一区二区 | 日韩一区二区免费在线观看| 日韩欧美二区三区| 国产精品的网站| 亚洲bt欧美bt精品| 丁香桃色午夜亚洲一区二区三区| 99精品国产一区二区三区不卡| 一本大道av一区二区在线播放| 欧美一区二区三区啪啪| 国产精品福利一区| 蜜桃一区二区三区在线| 色哦色哦哦色天天综合| 久久网站热最新地址| 亚洲午夜激情网页| 成人永久免费视频| 精品精品国产高清a毛片牛牛| 亚洲视频在线观看一区| 国产综合色视频| 欧美日产国产精品| 亚洲视频在线一区观看| 国产成人午夜视频| 日韩视频永久免费| 亚洲成人精品一区| 91看片淫黄大片一级| 久久精品一区二区三区不卡| 一区二区三区欧美日| 春色校园综合激情亚洲| 精品国产91洋老外米糕| 亚洲电影一级黄| 色老头久久综合| 最近中文字幕一区二区三区| 国产美女视频91| 亚洲精品中文在线| 国内精品伊人久久久久影院对白| 在线一区二区三区做爰视频网站| 国产欧美日韩精品在线| 久久国产尿小便嘘嘘尿| 3atv在线一区二区三区| 一区二区三区免费在线观看| av网站免费线看精品| 久久精品欧美一区二区三区麻豆| 蜜桃精品在线观看| 欧美区视频在线观看| 亚洲综合成人在线| 欧美亚洲综合网| 洋洋av久久久久久久一区| 色视频一区二区| 一区二区三区鲁丝不卡| 色综合久久久久网| 一区二区三区产品免费精品久久75| 粉嫩久久99精品久久久久久夜| 国产亚洲综合在线| 国产白丝精品91爽爽久久| 久久综合九色综合欧美就去吻 | 久久国产生活片100| 日韩一区二区三区视频| 麻豆91在线播放免费| 日韩精品一区二区三区在线播放| 麻豆一区二区99久久久久| 精品va天堂亚洲国产| 国产成人丝袜美腿| 亚洲天堂网中文字| 欧美丝袜丝交足nylons图片| 性久久久久久久久久久久| 91精品国产品国语在线不卡| 久久se精品一区精品二区| 中文字幕av一区 二区| 91蜜桃视频在线| 首页欧美精品中文字幕| 精品日韩av一区二区| 成人av网址在线| 夜夜爽夜夜爽精品视频| 欧美一区二区三区婷婷月色| 国产精品一区二区三区乱码| 中文字幕一区二区三区乱码在线| 欧美在线一区二区三区| 激情图区综合网| 亚洲三级免费电影| 欧美喷潮久久久xxxxx| 韩国v欧美v亚洲v日本v| 国产精品久久午夜| 91精品免费在线观看| 国产成人av电影免费在线观看| 日韩一区欧美一区| 欧美本精品男人aⅴ天堂| www.成人在线| 麻豆精品新av中文字幕| 亚洲三级在线免费观看| 久久亚洲影视婷婷| 欧美日韩高清在线播放| 粉嫩aⅴ一区二区三区四区五区| 偷拍与自拍一区| 最新成人av在线| 国产日韩一级二级三级| 欧美久久一二区| 一本大道久久精品懂色aⅴ| 狠狠色丁香久久婷婷综合丁香| 亚洲精品乱码久久久久久日本蜜臀| 精品国一区二区三区| 制服丝袜av成人在线看| 91成人在线免费观看| 成人伦理片在线| 国产一区二区三区在线看麻豆| 亚洲福利视频导航| 亚洲女人小视频在线观看| 国产亚洲欧美色| 精品国产免费视频| 3d动漫精品啪啪一区二区竹菊| 91蝌蚪porny九色| 色94色欧美sute亚洲13| 国产不卡视频在线播放| 国产最新精品精品你懂的| 日韩专区中文字幕一区二区| 一区二区三区免费网站| 一区二区视频在线看| 中文字幕日韩av资源站| 欧美激情一区在线| 久久亚洲春色中文字幕久久久| 日韩午夜在线影院| 欧美一区二区视频在线观看2020 | 国产在线一区观看| 美国十次综合导航| 老司机精品视频导航| 久久国产人妖系列| 国内精品伊人久久久久av影院 | 国产一区二区三区在线观看免费 | 亚洲美女免费在线| 国产精品激情偷乱一区二区∴| 日本一区二区三区国色天香| 日本一区二区三区在线不卡| 国产精品视频免费看| 日韩一区在线看| 亚洲一区二区精品久久av| 午夜电影网一区| 精品一区二区在线播放| 国产精品一区二区三区乱码| 国产激情精品久久久第一区二区 | 91美女在线看| 欧美亚洲国产一区在线观看网站 | 风间由美一区二区三区在线观看 | 亚洲人一二三区| 亚洲一区二区三区在线播放| 亚洲一区视频在线| 日本欧美大码aⅴ在线播放| 青青青爽久久午夜综合久久午夜| 久久精品二区亚洲w码| 国产福利不卡视频| 99久久免费国产| 在线观看精品一区| 精品伦理精品一区| 亚洲欧洲韩国日本视频| 亚洲国产精品一区二区www| 久久成人av少妇免费| 成人精品一区二区三区中文字幕| 92精品国产成人观看免费| 欧美日韩亚洲不卡| 国产日韩v精品一区二区| 一区二区三区高清在线| 久久99精品久久久久久国产越南 | 国产成人精品午夜视频免费| 成人动漫一区二区在线| 色香蕉成人二区免费| 日韩欧美一区二区三区在线| 国产精品久久久久久久岛一牛影视| 亚洲成人免费在线观看| 国产成人在线观看|