⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scsi_all.c

📁 基于组件方式开发操作系统的OSKIT源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * Implementation of Utility functions for all SCSI device types. * * Copyright (c) 1997, 1998 Justin T. Gibbs. * Copyright (c) 1997, 1998 Kenneth D. Merry. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions, and the following disclaimer, *    without modification, immediately at the beginning of the file. * 2. The name of the author may not be used to endorse or promote products *    derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * *	$Id: scsi_all.c,v 1.9 1998/12/11 03:53:05 gibbs Exp $ */#include <sys/param.h>#ifdef KERNEL#include <opt_scsi.h>#include <sys/systm.h>#else#include <errno.h>#include <stdio.h>#include <string.h>#endif#include <cam/cam.h>#include <cam/cam_ccb.h>#include <cam/cam_xpt.h>#include <cam/cam_xpt_periph.h>#include <cam/scsi/scsi_all.h>#ifndef KERNEL#include <camlib.h>#ifndef FALSE#define FALSE   0#endif /* FALSE */#ifndef TRUE#define TRUE    1#endif /* TRUE */#define ERESTART        -1              /* restart syscall */#define EJUSTRETURN     -2              /* don't modify regs, just return */#endif /* !KERNEL */const char *scsi_sense_key_text[] = {	"NO SENSE",	"RECOVERED ERROR",	"NOT READY",	"MEDIUM ERROR",	"HARDWARE FAILURE",	"ILLEGAL REQUEST",	"UNIT ATTENTION",	"DATA PROTECT",	"BLANK CHECK",	"Vendor Specific",	"COPY ABORTED",	"ABORTED COMMAND",	"EQUAL",	"VOLUME OVERFLOW",	"MISCOMPARE",	"RESERVED"};#if !defined(SCSI_NO_OP_STRINGS)#define D 0x001#define T 0x002#define L 0x004#define P 0x008#define W 0x010#define R 0x020#define S 0x040#define O 0x080#define M 0x100#define C 0x200#define A 0x400#define E 0x800#define ALL 0xFFF/* * WARNING:  You must update the num_ops field below for this quirk table  * entry if you add more entries. */static struct op_table_entry plextor_cd_ops[] = {	{0xD8, R, "CD-DA READ"}};static struct scsi_op_quirk_entry scsi_op_quirk_table[] = {	{		/*		 * I believe that 0xD8 is the Plextor proprietary command		 * to read CD-DA data.  I'm not sure which Plextor CDROM		 * models support the command, though.  I know for sure		 * that the 4X, 8X, and 12X models do, and presumably the		 * 12-20X does.  I don't know about any earlier models,		 * though.  If anyone has any more complete information,		 * feel free to change this quirk entry.		 */		{T_CDROM, SIP_MEDIA_REMOVABLE, "PLEXTOR", "CD-ROM PX*", "*"},		1, /* number of vendor-specific opcodes for this entry */		plextor_cd_ops	}};static struct op_table_entry scsi_op_codes[] = {/* * From: ftp://ftp.symbios.com/pub/standards/io/t10/drafts/spc/op-num.txt * Modifications by Kenneth Merry (ken@FreeBSD.ORG) * * Note:  order is important in this table, scsi_op_desc() currently * depends on the opcodes in the table being in order to save search time. *//*   * File: OP-NUM.TXT * * SCSI Operation Codes * Numeric Sorted Listing * as of 11/13/96 *  *     D - DIRECT ACCESS DEVICE (SBC)                    device column key *     .T - SEQUENTIAL ACCESS DEVICE (SSC)              ------------------- *     . L - PRINTER DEVICE (SSC)                       M = Mandatory *     .  P - PROCESSOR DEVICE (SPC)                    O = Optional *     .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)    V = Vendor specific *     .  . R - CD DEVICE (MMC)                         R = Reserved *     .  .  S - SCANNER DEVICE (SGC)                   Z = Obsolete *     .  .  .O - OPTICAL MEMORY DEVICE (SBC) *     .  .  . M - MEDIA CHANGER DEVICE (SMC) *     .  .  .  C - COMMUNICATION DEVICE (SSC) *     .  .  .  .A - STORAGE ARRAY DEVICE (SCC) *     .  .  .  . E - ENCLOSURE SERVICES DEVICE (SES) * OP  DTLPWRSOMCAE  Description * --  ------------  ---------------------------------------------------- *//* 00  MMMMMMMMMMMM  TEST UNIT READY */{0x00, ALL, 		"TEST UNIT READY"},/* 01   M            REWIND */{0x01, T,           "REWIND"},/* 01  Z V ZO ZO     REZERO UNIT */{0x01, D|L|W|O|M,   "REZERO UNIT"},/* 02  VVVVVV  V   *//* 03  MMMMMMMMMMMM  REQUEST SENSE */{0x03, ALL,         "REQUEST SENSE"},/* 04  M    O O      FORMAT UNIT */{0x04, D|R|O,       "FORMAT UNIT"},/* 04   O            FORMAT MEDIUM */{0x04, T,           "FORMAT MEDIUM"},/* 04    O           FORMAT */{0x04, L,           "FORMAT"},/* 05  VMVVVV  V     READ BLOCK LIMITS */{0x05, T,           "READ BLOCK LIMITS"},/* 06  VVVVVV  V   *//* 07  OVV O  OV     REASSIGN BLOCKS */{0x07, D|W|O,       "REASSIGN BLOCKS"},/* 07          O     INITIALIZE ELEMENT STATUS */{0x07, M,           "INITIALIZE ELEMENT STATUS"},/* 08  OMV OO OV     READ(06) */{0x08, D|T|W|R|O,   "READ(06)"},/* 08     O          RECEIVE */{0x08, P,           "RECEIVE"},/* 08           M    GET MESSAGE(06) */{0x08, C,           "GET MESSAGE(06)"},/* 09  VVVVVV  V   *//* 0A  OM  O  OV     WRITE(06) */{0x0A, D|T|W|O, "WRITE(06)"},/* 0A     M          SEND(06) */{0x0A, P,           "SEND(06)"},/* 0A           M    SEND MESSAGE(06) */{0x0A, C,           "SEND MESSAGE(06)"},/* 0A    M           PRINT */{0x0A, L,           "PRINT"},/* 0B  Z   ZO ZV     SEEK(06) */{0x0B, D|W|R|O,     "SEEK(06)"},/* 0B    O           SLEW AND PRINT */{0x0B, L,           "SLEW AND PRINT"},/* 0C  VVVVVV  V   *//* 0D  VVVVVV  V   *//* 0E  VVVVVV  V   *//* 0F  VOVVVV  V     READ REVERSE */{0x0F, T,           "READ REVERSE"},/* 10  VM VVV        WRITE FILEMARKS */{0x10, T,           "WRITE FILEMARKS"},/* 10    O O         SYNCHRONIZE BUFFER */{0x10, L|W,         "SYNCHRONIZE BUFFER"},/* 11  VMVVVV        SPACE */{0x11, T,           "SPACE"},/* 12  MMMMMMMMMMMM  INQUIRY */{0x12, ALL,         "INQUIRY"},/* 13  VOVVVV        VERIFY(06) */{0x13, T,           "VERIFY(06)"},/* 14  VOOVVV        RECOVER BUFFERED DATA */{0x14, T|L,         "RECOVER BUFFERED DATA"},/* 15  OMO OOOOOOOO  MODE SELECT(06) */{0x15, ALL & ~(P),    "MODE SELECT(06)"},/* 16  MMMOMMMM   O  RESERVE(06) */{0x16, D|T|L|P|W|R|S|O|E, "RESERVE(06)"},/* 16          M     RESERVE ELEMENT(06) */{0x16, M,           "RESERVE ELEMENT(06)"},/* 17  MMMOMMMM   O  RELEASE(06) */{0x17, ALL & ~(M|C|A), "RELEASE(06)"},/* 17          M     RELEASE ELEMENT(06) */{0x17, M,           "RELEASE ELEMENT(06)"},/* 18  OOOOOOOO      COPY */{0x18, ALL & ~(M|C|A|E), "COPY"},/* 19  VMVVVV        ERASE */{0x19, T,           "ERASE"},/* 1A  OMO OOOOOOOO  MODE SENSE(06) */{0x1A, ALL & ~(P),  "MODE SENSE(06)"},/* 1B  O   OM O      STOP START UNIT */{0x1B, D|W|R|O,     "STOP START UNIT"},/* 1B   O            LOAD UNLOAD */{0x1B, T,           "LOAD UNLOAD"},/* 1B        O       SCAN */{0x1B, S,           "SCAN"},/* 1B    O           STOP PRINT */{0x1B, L,           "STOP PRINT"},/* 1C  OOOOOOOOOO M  RECEIVE DIAGNOSTIC RESULTS */{0x1C, ALL & ~(A),  "RECEIVE DIAGNOSTIC RESULTS"},/* 1D  MMMMMMMMMMMM  SEND DIAGNOSTIC */{0x1D, ALL,         "SEND DIAGNOSTIC"},/* 1E  OO  OM OO     PREVENT ALLOW MEDIUM REMOVAL */{0x1E, D|T|W|R|O|M, "PREVENT ALLOW MEDIUM REMOVAL"},/* 1F *//* 20  V   VV V *//* 21  V   VV V *//* 22  V   VV V *//* 23  V   VV V *//* 24  V   VVM       SET WINDOW */{0x24, S,           "SET WINDOW"},/* 25  M   M  M      READ CAPACITY */{0x25, D|W|O,       "READ CAPACITY"},/* 25       M        READ CD RECORDED CAPACITY */{0x25, R,           "READ CD RECORDED CAPACITY"},/* 25        O       GET WINDOW */{0x25, S,           "GET WINDOW"},/* 26  V   VV *//* 27  V   VV *//* 28  M   MMMM      READ(10) */{0x28, D|W|R|S|O,   "READ(10)"},/* 28           O    GET MESSAGE(10) */{0x28, C,           "GET MESSAGE(10)"},/* 29  V   VV O      READ GENERATION */{0x29, O,           "READ GENERATION"},/* 2A  M   MM M      WRITE(10) */{0x2A, D|W|R|O,     "WRITE(10)"},/* 2A        O       SEND(10) */{0x2A, S,           "SEND(10)"},/* 2A           O    SEND MESSAGE(10) */{0x2A, C,           "SEND MESSAGE(10)"},/* 2B  O   OM O      SEEK(10) */{0x2B, D|W|R|O,     "SEEK(10)"},/* 2B   O            LOCATE */{0x2B, T,           "LOCATE"},/* 2B          O     POSITION TO ELEMENT */{0x2B, M,           "POSITION TO ELEMENT"},/* 2C  V      O      ERASE(10) */{0x2C, O,           "ERASE(10)"},/* 2D  V   O  O      READ UPDATED BLOCK */{0x2D, W|O,         "READ UPDATED BLOCK"},/* 2E  O   O  O      WRITE AND VERIFY(10) */{0x2E, D|W|O,       "WRITE AND VERIFY(10)"},/* 2F  O   OO O      VERIFY(10) */{0x2F, D|W|R|O,     "VERIFY(10)"},/* 30  Z   ZO Z      SEARCH DATA HIGH(10) */{0x30, D|W|R|O,     "SEARCH DATA HIGH(10)"},/* 31  Z   ZO Z      SEARCH DATA EQUAL(10) */{0x31, D|W|R|O,     "SEARCH DATA EQUAL(10)"},/* 31        O       OBJECT POSITION */{0x31, S,           "OBJECT POSITION"},/* 32  Z   ZO Z      SEARCH DATA LOW(10) */{0x32, D|W|R|O,     "SEARCH DATA LOW(10"},/* 33  O   OO O      SET LIMITS(10) */{0x33, D|W|R|O,     "SET LIMITS(10)"},/* 34  O   OO O      PRE-FETCH */{0x34, D|W|R|O,     "PRE-FETCH"},/* 34   O            READ POSITION */{0x34, T,           "READ POSITION"},/* 34        O       GET DATA BUFFER STATUS */{0x34, S,           "GET DATA BUFFER STATUS"},/* 35  O   OM O      SYNCHRONIZE CACHE */{0x35, D|W|R|O,     "SYNCHRONIZE CACHE"},/* 36  O   OO O      LOCK UNLOCK CACHE */{0x36, D|W|R|O,     "LOCK UNLOCK CACHE"},/* 37  O      O      READ DEFECT DATA(10) */{0x37, D|O,         "READ DEFECT DATA(10)"},/* 38      O  O      MEDIUM SCAN */{0x38, W|O,         "MEDIUM SCAN"},/* 39  OOOOOOOO      COMPARE */{0x39, ALL & ~(M|C|A|E), "COMPARE"},/* 3A  OOOOOOOO      COPY AND VERIFY */{0x3A, ALL & ~(M|C|A|E), "COPY AND VERIFY"},/* 3B  OOOOOOOOOO O  WRITE BUFFER */{0x3B, ALL & ~(A),  "WRITE BUFFER"},/* 3C  OOOOOOOOOO    READ BUFFER */{0x3C, ALL & ~(A|E),"READ BUFFER"},/* 3D      O  O      UPDATE BLOCK */{0x3D, W|O,         "UPDATE BLOCK"},/* 3E  O   OO O      READ LONG */{0x3E, D|W|R|O,     "READ LONG"},/* 3F  O   O  O      WRITE LONG */{0x3F, D|W|O,       "WRITE LONG"},/* 40  OOOOOOOOOO    CHANGE DEFINITION */{0x40, ALL & ~(A|E),"CHANGE DEFINITION"},/* 41  O             WRITE SAME */{0x41, D,           "WRITE SAME"},/* 42       M        READ SUB-CHANNEL */{0x42, R,           "READ SUB-CHANNEL"}, /* 43       M        READ TOC/PMA/ATIP {MMC Proposed} */{0x43, R,           "READ TOC/PMA/ATIP {MMC Proposed}"},/* 44   M            REPORT DENSITY SUPPORT */{0x44, T,           "REPORT DENSITY SUPPORT"},/* 44       M        READ HEADER */{0x44, R,           "READ HEADER"},/* 45       O        PLAY AUDIO(10) */{0x45, R,           "PLAY AUDIO(10)"},/* 46 *//* 47       O        PLAY AUDIO MSF */{0x47, R,           "PLAY AUDIO MSF"},/* 48       O        PLAY AUDIO TRACK INDEX */{0x48, R,           "PLAY AUDIO TRACK INDEX"},/* 49       O        PLAY TRACK RELATIVE(10) */{0x49, R,           "PLAY TRACK RELATIVE(10)"},/* 4A *//* 4B       O        PAUSE/RESUME */{0x4B, R,           "PAUSE/RESUME"},/* 4C  OOOOOOOOOOO   LOG SELECT */{0x4C, ALL & ~(E),  "LOG SELECT"},/* 4D  OOOOOOOOOOO   LOG SENSE */{0x4D, ALL & ~(E),  "LOG SENSE"},/* 4E       O        STOP PLAY/SCAN {MMC Proposed} */{0x4E, R,           "STOP PLAY/SCAN {MMC Proposed}"},/* 4F */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -