亚洲欧美第一页_禁久久精品乱码_粉嫩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成人免费在线| 2023国产精华国产精品| 麻豆精品在线播放| 精品电影一区二区| 国产91丝袜在线18| 亚洲视频一区二区在线| 91久久免费观看| 成人国产一区二区三区精品| 国产精品美女久久久久aⅴ| proumb性欧美在线观看| 亚洲视频小说图片| 欧美日韩一区二区三区在线看| 亚洲一区二区三区激情| 日韩一区二区三区观看| 国产在线看一区| 国产精品素人一区二区| 色94色欧美sute亚洲线路一ni| 亚洲bt欧美bt精品| 精品国产麻豆免费人成网站| 成人黄色小视频| 亚洲地区一二三色| 久久久久成人黄色影片| 色乱码一区二区三区88| 久久国产精品99精品国产| 国产精品私人影院| 91精品欧美一区二区三区综合在 | 久久综合九色综合欧美亚洲| hitomi一区二区三区精品| 亚洲成在人线免费| 国产欧美视频在线观看| 欧美在线观看你懂的| 国产一区二区不卡老阿姨| 亚洲美女在线一区| 精品成a人在线观看| 色88888久久久久久影院按摩| 日韩高清不卡一区| 中文字幕一区二区三区不卡| 7777精品伊人久久久大香线蕉的 | 久久福利视频一区二区| 中文字幕综合网| 日韩视频在线观看一区二区| 99精品久久99久久久久| 黄页视频在线91| 亚洲黄色av一区| 国产欧美一区二区精品忘忧草 | 精品国产麻豆免费人成网站| 在线观看区一区二| 成人深夜福利app| 精品一区二区三区视频| 亚洲一区二区三区免费视频| 中文文精品字幕一区二区| 日韩视频免费观看高清完整版 | 日韩高清一级片| 亚洲精品视频一区二区| 国产精品日日摸夜夜摸av| 日韩精品一区二区在线| 欧美猛男男办公室激情| 色伊人久久综合中文字幕| 国产不卡在线播放| 久久精品国产亚洲高清剧情介绍 | 久久福利资源站| 午夜久久久久久电影| 一区二区三区四区激情| 亚洲欧洲国产日本综合| 国产精品久久久久一区| 欧美精品一区二区久久婷婷| 欧美一区二区三区在线| 欧美性受xxxx黑人xyx| 91社区在线播放| eeuss国产一区二区三区| 夫妻av一区二区| 国产电影精品久久禁18| 久久99精品久久久久久动态图 | 91麻豆自制传媒国产之光| www.欧美色图| 成人h精品动漫一区二区三区| 风流少妇一区二区| 波多野结衣精品在线| 99久久亚洲一区二区三区青草| 成人avav在线| 日本乱码高清不卡字幕| 91在线免费播放| 99久久久精品免费观看国产蜜| 91亚洲精品乱码久久久久久蜜桃| av不卡免费电影| 色香蕉久久蜜桃| 欧美午夜精品电影| 欧美丰满一区二区免费视频| 91超碰这里只有精品国产| 日韩一卡二卡三卡国产欧美| 日韩女优电影在线观看| 久久这里只有精品视频网| 欧美激情中文不卡| 中文字幕日本乱码精品影院| 一区二区三区欧美亚洲| 丝袜亚洲另类丝袜在线| 老色鬼精品视频在线观看播放| 精品一区二区三区影院在线午夜| 国产传媒欧美日韩成人| 成人精品鲁一区一区二区| 色综合天天性综合| 欧美情侣在线播放| 久久先锋影音av鲁色资源网| 亚洲国产高清在线观看视频| 成人欧美一区二区三区| jiyouzz国产精品久久| 色中色一区二区| 日韩欧美专区在线| 中文字幕精品—区二区四季| 亚洲精品视频在线看| 久久精品国产精品青草| 99久免费精品视频在线观看| 欧美性受xxxx| 欧美精品一区二区三区四区| 亚洲免费观看高清完整版在线观看| 亚洲aⅴ怡春院| 成人影视亚洲图片在线| 欧美日韩一卡二卡三卡| 中文字幕高清不卡| 五月天亚洲精品| 国产91丝袜在线播放九色| 91精品蜜臀在线一区尤物| 欧美国产欧美亚州国产日韩mv天天看完整 | 国产在线一区二区| 91久久精品网| 国产欧美日韩综合| 日本在线不卡一区| 日本韩国欧美在线| 国产欧美日韩另类视频免费观看| 亚洲线精品一区二区三区八戒| 国产另类ts人妖一区二区| 欧美日韩一级视频| 综合亚洲深深色噜噜狠狠网站| 日本午夜一区二区| 一本色道久久综合狠狠躁的推荐| 91精品麻豆日日躁夜夜躁| 欧美激情资源网| 日本在线不卡视频| 91老师国产黑色丝袜在线| 日韩网站在线看片你懂的| 日韩一区中文字幕| 久草中文综合在线| 91精品国产手机| 亚洲蜜桃精久久久久久久| 国产一区在线精品| 欧美日本韩国一区| 亚洲成人免费在线观看| 国产91精品入口| 欧美岛国在线观看| 亚洲成年人网站在线观看| 91视频com| 欧美国产成人精品| 久久99国产乱子伦精品免费| 欧美在线视频不卡| 亚洲国产综合色| 成人精品电影在线观看| 精品奇米国产一区二区三区| 亚洲高清视频中文字幕| 在线一区二区三区四区| 国产精品午夜电影| 国产剧情一区二区三区| 日韩午夜电影av| 久久se这里有精品| 91麻豆精品国产91久久久久| 综合激情成人伊人| 日韩不卡一二三区| 日韩视频在线观看一区二区| 亚洲第一成人在线| 91高清在线观看| 久久―日本道色综合久久| 国产美女精品一区二区三区| 日韩精品在线一区二区| 蜜臀久久99精品久久久画质超高清| 99国产精品久久久久久久久久久 | 国内精品视频一区二区三区八戒| 在线不卡免费av| 亚洲欧美日韩国产中文在线| 国产在线一区观看| 日韩精品一区二区在线| 亚洲日本在线看| 99精品偷自拍| 中文字幕一区三区| 成人av在线一区二区| 亚洲精品久久久蜜桃| 91精品福利视频| 亚洲午夜在线视频| 99久久免费视频.com| 中文一区二区在线观看| 97久久超碰国产精品电影| 日韩理论在线观看| 在线观看不卡视频| 午夜精品免费在线| 日韩视频一区二区三区在线播放| 国产精品影音先锋| 国产精品入口麻豆九色| 色综合天天综合在线视频| 亚洲精品免费在线播放| 日韩一级免费一区| 粉嫩一区二区三区性色av|