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

📄 scsi_all.c

📁 基于组件方式开发操作系统的OSKIT源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/* 50  O             XDWRITE(10) */{0x50, D,           "XDWRITE(10)"},/* 51  O             XPWRITE(10) */{0x51, D,           "XPWRITE(10)"},/* 51       M        READ DISC INFORMATION {MMC Proposed} */{0x51, R,           "READ DISC INFORMATION {MMC Proposed}"},/* 52  O             XDREAD(10) */{0x52, D,           "XDREAD(10)"},/* 52       M        READ TRACK INFORMATION {MMC Proposed} */{0x52, R,           "READ TRACK INFORMATION {MMC Proposed}"},/* 53       M        RESERVE TRACK {MMC Proposed} */{0x53, R,           "RESERVE TRACK {MMC Proposed}"},/* 54       O        SEND OPC INFORMATION {MMC Proposed} */{0x54, R,           "SEND OPC INFORMATION {MMC Proposed}"},/* 55  OOO OOOOOOOO  MODE SELECT(10) */{0x55, ALL & ~(P),  "MODE SELECT(10)"},/* 56  MMMOMMMM   O  RESERVE(10) */{0x56, ALL & ~(M|C|A), "RESERVE(10)"},/* 56          M     RESERVE ELEMENT(10) */{0x56, M,           "RESERVE ELEMENT(10)"},/* 57  MMMOMMMM   O  RELEASE(10) */{0x57, ALL & ~(M|C|A), "RELEASE(10"},/* 57          M     RELEASE ELEMENT(10) */{0x57, M,           "RELEASE ELEMENT(10)"},/* 58       O        REPAIR TRACK {MMC Proposed} */{0x58, R,           "REPAIR TRACK {MMC Proposed}"},/* 59       O        READ MASTER CUE {MMC Proposed} */{0x59, R,           "READ MASTER CUE {MMC Proposed}"},/* 5A  OOO OOOOOOOO  MODE SENSE(10) */{0x5A, ALL & ~(P),  "MODE SENSE(10)"},/* 5B       M        CLOSE TRACK/SESSION {MMC Proposed} */{0x5B, R,           "CLOSE TRACK/SESSION {MMC Proposed}"},/* 5C       O        READ BUFFER CAPACITY {MMC Proposed} */{0x5C, R,           "READ BUFFER CAPACITY {MMC Proposed}"},/* 5D       O        SEND CUE SHEET {MMC Proposed} */{0x5D, R,           "SEND CUE SHEET {MMC Proposed}"},/* 5E  OOOOOOOOO  O  PERSISTENT RESERVE IN */{0x5E, ALL & ~(C|A),"PERSISTENT RESERVE IN"},/* 5F  OOOOOOOOO  O  PERSISTENT RESERVE OUT */{0x5F, ALL & ~(C|A),"PERSISTENT RESERVE OUT"},/* 80  O             XDWRITE EXTENDED(16) */{0x80, D,           "XDWRITE EXTENDED(16)"},/* 81  O             REBUILD(16) */{0x81, D,           "REBUILD(16)"},/* 82  O             REGENERATE(16) */{0x82, D,           "REGENERATE(16)"},/* 83 *//* 84 *//* 85 *//* 86 *//* 87 *//* 88 *//* 89 *//* 8A *//* 8B *//* 8C *//* 8D *//* 8E *//* 8F *//* 90 *//* 91 *//* 92 *//* 93 *//* 94 *//* 95 *//* 96 *//* 97 *//* 98 *//* 99 *//* 9A *//* 9B *//* 9C *//* 9D *//* 9E *//* 9F *//* A0  OOOOOOOOOOO   REPORT LUNS */{0xA0, ALL & ~(E),  "REPORT LUNS"},/* A1       O        BLANK {MMC Proposed} */{0xA1, R,           "BLANK {MMC Proposed}"},/* A2       O        WRITE CD MSF {MMC Proposed} */{0xA2, R,           "WRITE CD MSF {MMC Proposed}"},/* A3            M   MAINTENANCE (IN) */{0xA3, A,           "MAINTENANCE (IN)"},/* A4            O   MAINTENANCE (OUT) */{0xA4, A,           "MAINTENANCE (OUT)"},/* A5   O      M     MOVE MEDIUM */{0xA5, T|M,         "MOVE MEDIUM"},/* A5       O        PLAY AUDIO(12) */{0xA5, R,           "PLAY AUDIO(12)"},/* A6          O     EXCHANGE MEDIUM */{0xA6, M,           "EXCHANGE MEDIUM"},/* A6       O        LOAD/UNLOAD CD {MMC Proposed} */{0xA6, R,           "LOAD/UNLOAD CD {MMC Proposed}"},/* A7  OO  OO OO     MOVE MEDIUM ATTACHED */{0xA7, D|T|W|R|O|M, "MOVE MEDIUM ATTACHED"},/* A8      OM O      READ(12) */{0xA8, W|R|O,       "READ(12)"},/* A8           O    GET MESSAGE(12) */{0xA8, C,           "GET MESSAGE(12)"},/* A9       O        PLAY TRACK RELATIVE(12) */{0xA9, R,           "PLAY TRACK RELATIVE(12)"},/* AA      O  O      WRITE(12) */{0xAA, W|O,         "WRITE(12)"},/* AA       O        WRITE CD(12) {MMC Proposed} */{0xAA, R,           "WRITE CD(12) {MMC Proposed}"},/* AA           O    SEND MESSAGE(12) */{0xAA, C,           "SEND MESSAGE(12)"},/* AB *//* AC         O      ERASE(12) */{0xAC, O,           "ERASE(12)"},/* AD *//* AE      O  O      WRITE AND VERIFY(12) */{0xAE, W|O,         "WRITE AND VERIFY(12)"},/* AF      OO O      VERIFY(12) */{0xAF, W|R|O,       "VERIFY(12)"},/* B0      ZO Z      SEARCH DATA HIGH(12) */{0xB0, W|R|O,       "SEARCH DATA HIGH(12)"},/* B1      ZO Z      SEARCH DATA EQUAL(12) */{0xB1, W|R|O,       "SEARCH DATA EQUAL(12)"},/* B2      ZO Z      SEARCH DATA LOW(12) */{0xB2, W|R|O,       "SEARCH DATA LOW(12)"},/* B3      OO O      SET LIMITS(12) */{0xB3, W|R|O,       "SET LIMITS(12)"},/* B4  OO  OO OO     READ ELEMENT STATUS ATTACHED */{0xB4, D|T|W|R|O|M, "READ ELEMENT STATUS ATTACHED"},/* B5          O     REQUEST VOLUME ELEMENT ADDRESS */{0xB5, M,           "REQUEST VOLUME ELEMENT ADDRESS"},/* B6          O     SEND VOLUME TAG */{0xB6, M,           "SEND VOLUME TAG"},/* B7         O      READ DEFECT DATA(12) */{0xB7, O,           "READ DEFECT DATA(12)"},/* B8   O      M     READ ELEMENT STATUS */{0xB8, T|M,         "READ ELEMENT STATUS"},/* B8       O        SET CD SPEED {MMC Proposed} */{0xB8, R,           "SET CD SPEED {MMC Proposed}"},/* B9       M        READ CD MSF {MMC Proposed} */{0xB9, R,           "READ CD MSF {MMC Proposed}"},/* BA       O        SCAN {MMC Proposed} */{0xBA, R,           "SCAN {MMC Proposed}"},/* BA            M   REDUNDANCY GROUP (IN) */{0xBA, A,           "REDUNDANCY GROUP (IN)"},/* BB       O        SET CD-ROM SPEED {proposed} */{0xBB, R,           "SET CD-ROM SPEED {proposed}"},/* BB            O   REDUNDANCY GROUP (OUT) */{0xBB, A,           "REDUNDANCY GROUP (OUT)"},/* BC       O        PLAY CD {MMC Proposed} */{0xBC, R,           "PLAY CD {MMC Proposed}"},/* BC            M   SPARE (IN) */{0xBC, A,           "SPARE (IN)"},/* BD       M        MECHANISM STATUS {MMC Proposed} */{0xBD, R,           "MECHANISM STATUS {MMC Proposed}"},/* BD            O   SPARE (OUT) */{0xBD, A,           "SPARE (OUT)"},/* BE       O        READ CD {MMC Proposed} */{0xBE, R,           "READ CD {MMC Proposed}"},/* BE            M   VOLUME SET (IN) */{0xBE, A,           "VOLUME SET (IN)"},/* BF            O   VOLUME SET (OUT) */{0xBF, A,           "VOLUME SET (OUT)"}};const char *scsi_op_desc(u_int16_t opcode, struct scsi_inquiry_data *inq_data){	caddr_t match;	int i, j;	u_int16_t opmask;	u_int16_t pd_type;	int       num_ops[2];	struct op_table_entry *table[2];	int num_tables;	pd_type = SID_TYPE(inq_data);	match = cam_quirkmatch((caddr_t)inq_data,			       (caddr_t)scsi_op_quirk_table,			       sizeof(scsi_op_quirk_table)/			       sizeof(*scsi_op_quirk_table),			       sizeof(*scsi_op_quirk_table),			       scsi_inquiry_match);	if (match != NULL) {		table[0] = ((struct scsi_op_quirk_entry *)match)->op_table;		num_ops[0] = ((struct scsi_op_quirk_entry *)match)->num_ops;		table[1] = scsi_op_codes;		num_ops[1] = sizeof(scsi_op_codes)/sizeof(scsi_op_codes[0]);		num_tables = 2;	} else {		/*			 * If this is true, we have a vendor specific opcode that		 * wasn't covered in the quirk table.		 */		if ((opcode > 0xBF) || ((opcode > 0x5F) && (opcode < 0x80)))			return("Vendor Specific Command");		table[0] = scsi_op_codes;		num_ops[0] = sizeof(scsi_op_codes)/sizeof(scsi_op_codes[0]);		num_tables = 1;	}	opmask = 1 << pd_type;	for (j = 0; j < num_tables; j++) {		for (i = 0;i < num_ops[j] && table[j][i].opcode <= opcode; i++){			if ((table[j][i].opcode == opcode) 			 && ((table[j][i].opmask & opmask) != 0))				return(table[j][i].desc);		}	}		/*	 * If we can't find a match for the command in the table, we just	 * assume it's a vendor specifc command.	 */	return("Vendor Specific Command");}#else /* SCSI_NO_OP_STRINGS */const char *scsi_op_desc(u_int16_t opcode, struct scsi_inquiry_data *inq_data){	return("");}#endif#include <sys/param.h>#if !defined(SCSI_NO_SENSE_STRINGS)#define SST(asc, ascq, action, desc) \	asc, ascq, action, desc#else #define SST(asc, ascq, action, desc) \	asc, asc, action#endif /* * If we're in the kernel, 'quantum' is already defined in cam_xpt.c. * Otherwise, we need to define it. */#ifdef KERNELextern const char quantum[];#elsestatic const char quantum[] = "QUANTUM";#endif/* * WARNING:  You must update the num_ascs field below for this quirk table  * entry if you add more entries. */static struct asc_table_entry quantum_fireball_entries[] = {	{SST(0x04, 0x0b, SS_START|SSQ_DECREMENT_COUNT|ENXIO, 	     "Logical unit not ready, initializing cmd. required")}};static struct scsi_sense_quirk_entry asc_quirk_table[] = {	{		/*		 * The Quantum Fireball ST and SE like to return 0x04 0x0b when		 * they really should return 0x04 0x02.  0x04,0x0b isn't		 * defined in any SCSI spec, and it isn't mentioned in the		 * hardware manual for these drives.		 */		{T_DIRECT, SIP_MEDIA_FIXED, "QUANTUM", "FIREBALL S*", "*"},		1, /* number of vendor-specific sense codes for this entry */		quantum_fireball_entries	}};static struct asc_table_entry asc_text[] = {/* * From File: ASC-NUM.TXT * SCSI ASC/ASCQ Assignments * Numeric Sorted Listing * as of  5/12/97 * * D - DIRECT ACCESS DEVICE (SBC)                     device column key * .T - SEQUENTIAL ACCESS DEVICE (SSC)               ------------------- * . L - PRINTER DEVICE (SSC)                           blank = reserved * .  P - PROCESSOR DEVICE (SPC)                     not blank = allowed * .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC) * .  . R - CD DEVICE (MMC) * .  .  S - SCANNER DEVICE (SGC) * .  .  .O - OPTICAL MEMORY DEVICE (SBC) * .  .  . M - MEDIA CHANGER DEVICE (SMC) * .  .  .  C - COMMUNICATION DEVICE (SSC) * .  .  .  .A - STORAGE ARRAY DEVICE (SCC) * .  .  .  . E - ENCLOSURE SERVICES DEVICE (SES) * DTLPWRSOMCAE        ASC   ASCQ  Action  Description * ------------        ----  ----  ------  -----------------------------------*//* DTLPWRSOMCAE */{SST(0x00, 0x00, SS_NEPDEF,			"No additional sense information") },/*  T    S      */{SST(0x00, 0x01, SS_DEF,			"Filemark detected") },/*  T    S      */{SST(0x00, 0x02, SS_DEF,			"End-of-partition/medium detected") },/*  T           */{SST(0x00, 0x03, SS_DEF,			"Setmark detected") },/*  T    S      */{SST(0x00, 0x04, SS_DEF,			"Beginning-of-partition/medium detected") },/*  T    S      */{SST(0x00, 0x05, SS_DEF,			"End-of-data detected") },/* DTLPWRSOMCAE */{SST(0x00, 0x06, SS_DEF,			"I/O process terminated") },/*      R       */{SST(0x00, 0x11, SS_NEDEF|EBUSY,			"Audio play operation in progress") },/*      R       */{SST(0x00, 0x12, SS_NEDEF,			"Audio play operation paused") },/*      R       */{SST(0x00, 0x13, SS_NEDEF,			"Audio play operation successfully completed") },/*      R       */{SST(0x00, 0x14, SS_DEF,			"Audio play operation stopped due to error") },/*      R       */{SST(0x00, 0x15, SS_DEF,			"No current audio status to return") },/* DTLPWRSOMCAE */{SST(0x00, 0x16, SS_NEDEF|EBUSY,			"Operation in progress") },/* DTL WRSOM AE */{SST(0x00, 0x17, SS_DEF,			"Cleaning requested") },/* D   W  O     */{SST(0x01, 0x00, SS_DEF,			"No index/sector signal") },/* D   WR OM    */{SST(0x02, 0x00, SS_DEF,			"No seek complete") },/* DTL W SO     */{SST(0x03, 0x00, SS_DEF,			"Peripheral device write fault") },/*  T           */{SST(0x03, 0x01, SS_DEF,			"No write current") },/*  T           */{SST(0x03, 0x02, SS_DEF,			"Excessive write errors") },/* DTLPWRSOMCAE */{SST(0x04, 0x00, SS_TUR|SSQ_MANY|SSQ_DECREMENT_COUNT|EIO,			"Logical unit not ready, cause not reportable") },/* DTLPWRSOMCAE */{SST(0x04, 0x01, SS_TUR|SSQ_MANY|SSQ_DECREMENT_COUNT|EBUSY,			"Logical unit is in process of becoming ready") },/* DTLPWRSOMCAE */{SST(0x04, 0x02, SS_START|SSQ_DECREMENT_COUNT|ENXIO,			"Logical unit not ready, initializing cmd. required") },/* DTLPWRSOMCAE */{SST(0x04, 0x03, SS_NEDEF|ENXIO,			"Logical unit not ready, manual intervention required")},/* DTL    O     */{SST(0x04, 0x04, SS_NEDEF|EBUSY,			"Logical unit not ready, format in progress") },/* DT  W  OMCA  */{SST(0x04, 0x05, SS_NEDEF|EBUSY,			"Logical unit not ready, rebuild in progress") },/* DT  W  OMCA  */{SST(0x04, 0x06, SS_NEDEF|EBUSY,			"Logical unit not ready, recalculation in progress") },/* DTLPWRSOMCAE */{SST(0x04, 0x07, SS_NEDEF|EBUSY,			"Logical unit not ready, operation in progress") },/*      R       */{SST(0x04, 0x08, SS_NEDEF|EBUSY,			"Logical unit not ready, long write in progress") },/* DTL WRSOMCAE */{SST(0x05, 0x00, SS_DEF,			"Logical unit does not respond to selection") },/* D   WR OM    */{SST(0x06, 0x00, SS_DEF,			"No reference position found") },/* DTL WRSOM    */{SST(0x07, 0x00, SS_DEF,			"Multiple peripheral devices selected") },/* DTL WRSOMCAE */{SST(0x08, 0x00, SS_DEF,			"Logical unit communication failure") },/* DTL WRSOMCAE */{SST(0x08, 0x01, SS_DEF,			"Logical unit communication time-out") },/* DTL WRSOMCAE */{SST(0x08, 0x02, SS_DEF,			"Logical unit communication parity error") },/* DT   R OM    */{SST(0x08, 0x03, SS_DEF,			"Logical unit communication crc error (ultra-dma/32)")},/* DT  WR O     */{SST(0x09, 0x00, SS_DEF,			"Track following error") },/*     WR O     */{SST(0x09, 0x01, SS_DEF,			"Tracking servo failure") },/*     WR O     */{SST(0x09, 0x02, SS_DEF,			"Focus servo failure") },/*     WR O     */{SST(0x09, 0x03, SS_DEF,

⌨️ 快捷键说明

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