All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] consolidate and log scsi command on send and completion
@ 2003-10-01  0:21 Patrick Mansfield
  2003-10-01  0:23 ` Patrick Mansfield
  0 siblings, 1 reply; 3+ messages in thread
From: Patrick Mansfield @ 2003-10-01  0:21 UTC (permalink / raw)
  To: James Bottomley, linux-scsi

Hi -

Patch against 2.6.0-test6.

Consolidate and nicely log the scsi_device and scsi command before sending
and after completing a command to an adapter driver.

diff -uprN -X /home/patman/dontdiff bl-25/drivers/scsi/scsi.c bl-25-scmd-log/drivers/scsi/scsi.c
--- bl-25/drivers/scsi/scsi.c	Mon Sep 29 12:21:09 2003
+++ bl-25-scmd-log/drivers/scsi/scsi.c	Tue Sep 30 14:24:17 2003
@@ -351,6 +351,124 @@ void scsi_destroy_command_freelist(struc
 	up(&host_cmd_pool_mutex);
 }
 
+#ifdef CONFIG_SCSI_LOGGING
+void scsi_log_send(struct scsi_cmnd *cmd)
+{
+	unsigned int level;
+	struct scsi_device *sdev;
+
+	/*
+	 * If ML QUEUE log level is greater than or equal to:
+	 *
+	 * 1: nothing (match completion)
+	 *
+	 * 2: log opcode + command of all commands
+	 *
+	 * 3: same as 2 plus dump cmd address
+	 *
+	 * 4: same as 3 plus dump extra junk
+	 */
+	if (unlikely(scsi_logging_level)) {
+		level = SCSI_LOG_LEVEL(SCSI_LOG_MLQUEUE_SHIFT,
+				       SCSI_LOG_MLQUEUE_BITS);
+		if (level > 1) {
+			sdev = cmd->device;
+			printk(KERN_INFO "scsi <%d:%d:%d:%d> send ",
+			       sdev->host->host_no, sdev->channel, sdev->id,
+			       sdev->lun);
+			if (level > 2)
+				printk("0x%p ", cmd);
+			/*
+			 * spaces to match disposition and cmd->result
+			 * output in scsi_log_completion.
+			 */
+			printk("                 ");
+			print_command(cmd->cmnd);
+			if (level > 3) {
+				printk(KERN_INFO "buffer = 0x%p, bufflen = %d,"
+				       " done = 0x%p, queuecommand 0x%p\n",
+					cmd->buffer, cmd->bufflen,
+					cmd->done,
+					sdev->host->hostt->queuecommand);
+
+			}
+		}
+	}
+}
+
+void scsi_log_completion(struct scsi_cmnd *cmd, int disposition)
+{
+	unsigned int level;
+	struct scsi_device *sdev;
+
+	/*
+	 * If ML COMPLETE log level is greater than or equal to:
+	 *
+	 * 1: log disposition, result, opcode + command, and conditionally
+	 * sense data for failures or non SUCCESS dispositions.
+	 *
+	 * 2: same as 1 but for all command completions.
+	 *
+	 * 3: same as 2 plus dump cmd address
+	 *
+	 * 4: same as 3 plus dump extra junk
+	 */
+	if (unlikely(scsi_logging_level)) {
+		level = SCSI_LOG_LEVEL(SCSI_LOG_MLCOMPLETE_SHIFT,
+				       SCSI_LOG_MLCOMPLETE_BITS);
+		if (((level > 0) && (cmd->result || disposition != SUCCESS)) ||
+		    (level > 1)) {
+			sdev = cmd->device;
+			printk(KERN_INFO "scsi <%d:%d:%d:%d> done ",
+			       sdev->host->host_no, sdev->channel, sdev->id,
+			       sdev->lun);
+			if (level > 2)
+				printk("0x%p ", cmd);
+			/*
+			 * Dump truncated values, so we usually fit within
+			 * 80 chars.
+			 */
+			switch (disposition) {
+			case SUCCESS:
+				printk("SUCCESS");
+				break;
+			case NEEDS_RETRY:
+				printk("RETRY  ");
+				break;
+			case ADD_TO_MLQUEUE:
+				printk("MLQUEUE");
+				break;
+			case FAILED:
+				printk("FAILED ");
+				break;
+			case TIMEOUT:
+				/* 
+				 * If called via scsi_times_out.
+				 */
+				printk("TIMEOUT");
+				break;
+			default:
+				printk("UNKNOWN");
+			}
+			printk(" %8x ", cmd->result);
+			print_command(cmd->cmnd);
+			if (status_byte(cmd->result) & CHECK_CONDITION) {
+				/*
+				 * XXX The print_sense formatting/prefix
+				 * doesn't match this function.
+				 */
+				print_sense("", cmd);
+			}
+			if (level > 3) {
+				printk(KERN_INFO "scsi host busy %d failed %d\n",
+				       sdev->host->host_busy,
+				       sdev->host->host_failed);
+			}
+		}
+	}
+}
+#endif
+
 /*
  * Function:    scsi_dispatch_command
  *
@@ -406,16 +524,12 @@ int scsi_dispatch_cmd(struct scsi_cmnd *
 
 	scsi_add_timer(cmd, cmd->timeout_per_command, scsi_times_out);
 
+	scsi_log_send(cmd);
+
 	/*
 	 * We will use a queued command if possible, otherwise we will
 	 * emulate the queuing and calling of completion function ourselves.
 	 */
-	SCSI_LOG_MLQUEUE(3, printk("scsi_dispatch_cmnd (host = %d, "
-				"channel = %d, target = %d, command = %p, "
-				"buffer = %p, \nbufflen = %d, done = %p)\n",
-				host->host_no, cmd->device->channel,
-				cmd->device->id, cmd->cmnd, cmd->buffer,
-				cmd->bufflen, cmd->done));
 
 	cmd->state = SCSI_STATE_QUEUED;
 	cmd->owner = SCSI_OWNER_LOWLEVEL;
@@ -435,9 +549,6 @@ int scsi_dispatch_cmd(struct scsi_cmnd *
 		goto out;
 	}
 
-	SCSI_LOG_MLQUEUE(3, printk("queuecommand : routine at %p\n",
-				   host->hostt->queuecommand));
-
 	spin_lock_irqsave(host->host_lock, flags);
 	if (unlikely(test_bit(SHOST_CANCEL, &host->shost_state))) {
 		cmd->result = (DID_NO_CONNECT << 16);
@@ -594,6 +705,7 @@ void scsi_done(struct scsi_cmnd *cmd)
  */
 static void scsi_softirq(struct softirq_action *h)
 {
+	int disposition;
 	LIST_HEAD(local_q);
 
 	local_irq_disable();
@@ -605,75 +717,19 @@ static void scsi_softirq(struct softirq_
 						   struct scsi_cmnd, eh_entry);
 		list_del_init(&cmd->eh_entry);
 
-		switch (scsi_decide_disposition(cmd)) {
+		disposition = scsi_decide_disposition(cmd);
+		scsi_log_completion(cmd, disposition);
+		switch (disposition) {
 		case SUCCESS:
-			/*
-			 * Add to BH queue.
-			 */
-			SCSI_LOG_MLCOMPLETE(3,
-					    printk("Command finished %d %d "
-						   "0x%x\n",
-					   cmd->device->host->host_busy,
-					   cmd->device->host->host_failed,
-						   cmd->result));
-
 			scsi_finish_command(cmd);
 			break;
 		case NEEDS_RETRY:
-			/*
-			 * We only come in here if we want to retry a
-			 * command.  The test to see whether the
-			 * command should be retried should be keeping
-			 * track of the number of tries, so we don't
-			 * end up looping, of course.
-			 */
-			SCSI_LOG_MLCOMPLETE(3, printk("Command needs retry "
-						      "%d %d 0x%x\n",
-					      cmd->device->host->host_busy,
-					      cmd->device->host->host_failed,
-						      cmd->result));
-
 			scsi_retry_command(cmd);
 			break;
 		case ADD_TO_MLQUEUE:
-			/* 
-			 * This typically happens for a QUEUE_FULL
-			 * message - typically only when the queue
-			 * depth is only approximate for a given
-			 * device.  Adding a command to the queue for
-			 * the device will prevent further commands
-			 * from being sent to the device, so we
-			 * shouldn't end up with tons of things being
-			 * sent down that shouldn't be.
-			 */
-			SCSI_LOG_MLCOMPLETE(3, printk("Command rejected as "
-						      "device queue full, "
-						      "put on ml queue %p\n",
-						      cmd));
 			scsi_queue_insert(cmd, SCSI_MLQUEUE_DEVICE_BUSY);
 			break;
 		default:
-			/*
-			 * Here we have a fatal error of some sort.
-			 * Turn it over to the error handler.
-			 */
-			SCSI_LOG_MLCOMPLETE(3,
-					    printk("Command failed %p %x "
-						   "busy=%d failed=%d\n",
-						   cmd, cmd->result,
-					   cmd->device->host->host_busy,
-					   cmd->device->host->host_failed));
-
-			/*
-			 * Dump the sense information too.
-			 */
-			if (status_byte(cmd->result) & CHECK_CONDITION)
-				SCSI_LOG_MLCOMPLETE(3, print_sense("bh", cmd));
-
-			/*
-			 * We only fail here if the error recovery thread
-			 * has died.
-			 */
 			if (!scsi_eh_scmd_add(cmd, 0))
 				scsi_finish_command(cmd);
 		}
@@ -739,7 +795,7 @@ void scsi_finish_command(struct scsi_cmn
 	if (SCSI_SENSE_VALID(cmd))
 		cmd->result |= (DRIVER_SENSE << 24);
 
-	SCSI_LOG_MLCOMPLETE(3, printk("Notifying upper driver of completion "
+	SCSI_LOG_MLCOMPLETE(4, printk("Notifying upper driver of completion "
 				"for device %d %x\n", sdev->id, cmd->result));
 
 	cmd->owner = SCSI_OWNER_HIGHLEVEL;
diff -uprN -X /home/patman/dontdiff bl-25/drivers/scsi/scsi_error.c bl-25-scmd-log/drivers/scsi/scsi_error.c
--- bl-25/drivers/scsi/scsi_error.c	Mon Sep 29 12:21:09 2003
+++ bl-25-scmd-log/drivers/scsi/scsi_error.c	Mon Sep 29 12:37:28 2003
@@ -164,14 +164,11 @@ int scsi_delete_timer(struct scsi_cmnd *
  **/
 void scsi_times_out(struct scsi_cmnd *scmd)
 {
+	scsi_log_completion(scmd, TIMEOUT);
 	if (unlikely(!scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD))) {
 		panic("Error handler thread not present at %p %p %s %d",
 		      scmd, scmd->device->host, __FILE__, __LINE__);
 	}
-
-	SCSI_LOG_TIMEOUT(3, printk("Command timed out busy=%d failed=%d\n",
-				   scmd->device->host->host_busy,
-				   scmd->device->host->host_failed));
 }
 
 /**
@@ -446,10 +443,12 @@ static int scsi_send_eh_cmnd(struct scsi
 	scmd->request->rq_status = RQ_SCSI_BUSY;
 
 	spin_lock_irqsave(scmd->device->host->host_lock, flags);
+	scsi_log_send(scmd);
 	host->hostt->queuecommand(scmd, scsi_eh_done);
 	spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
 
 	down(&sem);
+	scsi_log_completion(scmd, SUCCESS);
 
 	scmd->device->host->eh_action = NULL;
 
diff -uprN -X /home/patman/dontdiff bl-25/drivers/scsi/scsi_logging.h bl-25-scmd-log/drivers/scsi/scsi_logging.h
--- bl-25/drivers/scsi/scsi_logging.h	Mon Sep 22 13:08:53 2003
+++ bl-25-scmd-log/drivers/scsi/scsi_logging.h	Mon Sep 29 12:37:28 2003
@@ -40,10 +40,13 @@
 extern unsigned int scsi_logging_level;
 
 #ifdef CONFIG_SCSI_LOGGING
+
+#define SCSI_LOG_LEVEL(SHIFT, BITS)				\
+        ((scsi_logging_level >> (SHIFT)) & ((1 << (BITS)) - 1))
+
 #define SCSI_CHECK_LOGGING(SHIFT, BITS, LEVEL, CMD)		\
 {								\
-        unsigned int mask = (1 << (BITS)) - 1;			\
-        if (((scsi_logging_level >> (SHIFT)) & mask) > (LEVEL))	\
+        if ((SCSI_LOG_LEVEL(SHIFT, BITS)) > (LEVEL))		\
 		(CMD);						\
 }
 #else
diff -uprN -X /home/patman/dontdiff bl-25/drivers/scsi/scsi_priv.h bl-25-scmd-log/drivers/scsi/scsi_priv.h
--- bl-25/drivers/scsi/scsi_priv.h	Mon Sep 29 12:21:09 2003
+++ bl-25-scmd-log/drivers/scsi/scsi_priv.h	Mon Sep 29 12:37:28 2003
@@ -83,6 +83,15 @@ extern int scsi_insert_special_req(struc
 extern void scsi_init_cmd_from_req(struct scsi_cmnd *cmd,
 		struct scsi_request *sreq);
 extern void __scsi_release_request(struct scsi_request *sreq);
+#ifdef CONFIG_SCSI_LOGGING
+void scsi_log_send(struct scsi_cmnd *cmd);
+void scsi_log_completion(struct scsi_cmnd *cmd, int disposition);
+#else
+static inline void scsi_log_send(struct scsi_cmnd *cmd) 
+	{ };
+static inline void scsi_log_completion(struct scsi_cmnd *cmd, int disposition)
+	{ };
+#endif
 
 /* scsi_devinfo.c */
 extern int scsi_get_device_flags(unsigned char *vendor, unsigned char *model);
diff -uprN -X /home/patman/dontdiff bl-25/include/scsi/scsi.h bl-25-scmd-log/include/scsi/scsi.h
--- bl-25/include/scsi/scsi.h	Mon Sep 29 12:21:10 2003
+++ bl-25-scmd-log/include/scsi/scsi.h	Mon Sep 29 12:39:10 2003
@@ -302,6 +302,7 @@ struct scsi_lun {
 #define QUEUED          0x2004
 #define SOFT_ERROR      0x2005
 #define ADD_TO_MLQUEUE  0x2006
+#define TIMEOUT         0x2007
 
 /*
  * Midlevel queue return values.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] consolidate and log scsi command on send and completion
  2003-10-01  0:21 [PATCH] consolidate and log scsi command on send and completion Patrick Mansfield
@ 2003-10-01  0:23 ` Patrick Mansfield
  2003-10-01  1:22   ` [PATCH] constants.c [was: consolidate and log scsi command on send and completion] Douglas Gilbert
  0 siblings, 1 reply; 3+ messages in thread
From: Patrick Mansfield @ 2003-10-01  0:23 UTC (permalink / raw)
  To: James Bottomley, linux-scsi

Some sample output showing the command logging (with CONFIG_SCSI_CONSTANTS
enabled).

Of course after shutting off syslogd :-(

And with scsi logging for ml queue of 2 and ml complete of 2 via:

	sysctl -w dev.scsi.logging_level=0x2400

FYI, if you want both ml queue and ml complete both set:

	to 	use scsi_logging_level
	1		0x1200
	2		0x2400
	3		0x3600
	4		0x4800

Output for scanning host3 id 0, a0 is REPORT LUNS, interspersed with writes 
to the root disk <0:0:0:0>, and partition information:

scsi <3:0:0:0> send                  UNKNOWN(0xa0) 00 00 00 00 00 00 00 04 08 00 00 
scsi <3:0:0:0> done SUCCESS        0 UNKNOWN(0xa0) 00 00 00 00 00 00 00 04 08 00 00 
scsi <3:0:0:1> send                  Inquiry 00 00 00 24 00 
scsi <3:0:0:1> done SUCCESS        0 Inquiry 00 00 00 24 00 
  Vendor: IBM       Model: 3542              Rev: 0520
  Type:   Direct-Access                      ANSI SCSI revision: 03
scsi(3:0:0:1): Enabled tagged queuing, queue depth 64.
scsi <3:0:0:1> send                  Test Unit Ready 00 00 00 00 00 
scsi <3:0:0:1> done SUCCESS        0 Test Unit Ready 00 00 00 00 00 
scsi <3:0:0:1> send                  Read Capacity 00 00 00 00 00 00 00 00 00 
scsi <3:0:0:1> done SUCCESS        0 Read Capacity 00 00 00 00 00 00 00 00 00 
SCSI device sdi: 11087872 512-byte hdwr sectors (5677 MB)
scsi <3:0:0:1> send                  Mode Sense 00 08 00 04 00 
scsi <3:0:0:1> done SUCCESS        0 Mode Sense 00 08 00 04 00 
scsi <3:0:0:1> send                  Mode Sense 00 08 00 20 00 
scsi <3:0:0:1> done SUCCESS<6>scsi <0:0:0:0> send                  Write (10) 00 00 28 00 47 00 00 08 00 
scsi <0:0:0:0> done SUCCESS        0 Write (10) 00 00 28 00 47 00 00 08 00 
scsi <0:0:0:0> send                  Write (10) 00 00 28 02 67 00 00 08 00 
scsi <0:0:0:0> done SUCCESS        0 Write (10) 00 00 28 02 67 00 00 08 00 
scsi <0:0:0:0> send                  Write (10) 00 00 28 18 3f 00 00 08 00 
scsi <0:0:0:0> done SUCCESS        0 Write (10) 00 00 28 18 3f 00 00 08 00 
scsi <0:0:0:0> send                  Write (10) 00 00 34 00 a7 00 00 08 00 
        0 Mode Sense 00 08 00 20 00 
scsi <0:0:0:0> done <5>SCSI device sdi: drive cache: write back
 sdi:<6>scsi <3:0:0:1> send                  Read (10) 00 00 00 00 00 00 00 08 00 
scsi <3:0:0:1> done SUCCESS        0 Read (10) 00 00 00 00 00 00 00 08 00 
 unknown partition table
Attached scsi disk sdi at scsi3, channel 0, id 0, lun 1
SUCCESS        0 Write (10) 00 00 34 00 a7 00 00 08 00 


Example of a device not supporting INQUIRY page code 0x83 (with sense data
dump):

scsi <0:0:0:0> send                  Inquiry 01 83 00 ff 00 
scsi <0:0:0:0> done SUCCESS        2 Inquiry 01 83 00 ff 00 
Current sda: sense key Illegal Request
Additional sense: Invalid field in cdb
scsi <0:0:0:0> done SUCCESS        2 Inquiry 01 83 00 ff 00 
Current sda: sense key Illegal Request
Additional sense: Invalid field in cdb


Ard example output on timeout, with scsi logging for ml queue of 3 and ml
complete of 3:


scsi <2:0:0:0> done 0xf4abd560 TIMEOUT        0 Read (10) 00 00 00 00 00 00 00 80 00 
scsi <2:0:0:0> send 0xf4abd560                  Test Unit Ready 00 00 00 00 00 
scsi <2:0:0:0> done 0xf4abd560 SUCCESS        0 Test Unit Ready 00 00 00 00 00 
Inserting command f4abd560 into mlqueue
scsi <2:0:0:0> send 0xf4abd560                  Read (10) 00 00 00 00 00 00 00 80 00 
scsi <2:0:0:0> done 0xf4abd560 SUCCESS        0 Read (10) 00 00 00 00 00 00 00 80 00 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH] constants.c [was: consolidate and log scsi command on send and completion]
  2003-10-01  0:23 ` Patrick Mansfield
@ 2003-10-01  1:22   ` Douglas Gilbert
  0 siblings, 0 replies; 3+ messages in thread
From: Douglas Gilbert @ 2003-10-01  1:22 UTC (permalink / raw)
  To: Patrick Mansfield; +Cc: James Bottomley, linux-scsi

[-- Attachment #1: Type: text/plain, Size: 914 bytes --]

Patrick Mansfield wrote:
> Some sample output showing the command logging (with CONFIG_SCSI_CONSTANTS
> enabled).
> 
> Of course after shutting off syslogd :-(
> 
> And with scsi logging for ml queue of 2 and ml complete of 2 via:
> 
> 	sysctl -w dev.scsi.logging_level=0x2400
> 
> FYI, if you want both ml queue and ml complete both set:
> 
> 	to 	use scsi_logging_level
> 	1		0x1200
> 	2		0x2400
> 	3		0x3600
> 	4		0x4800
> 
> Output for scanning host3 id 0, a0 is REPORT LUNS, interspersed with writes 
> to the root disk <0:0:0:0>, and partition information:
> 
> scsi <3:0:0:0> send                  UNKNOWN(0xa0) 00 00 00 00 00 00 00 04 08 00 00 
> scsi <3:0:0:0> done SUCCESS        0 UNKNOWN(0xa0) 00 00 00 00 00 00 00 04 08 00 00 

looks good ....

However, drivers/scsi/constants.c does know about Report Luns??
Looks like a merging problem by Andries and me sometime back.
See attachment.

Doug Gilbert

[-- Attachment #2: s_consts_c260t6.diff --]
[-- Type: text/plain, Size: 4260 bytes --]

--- linux/drivers/scsi/constants.c	2003-07-31 01:37:47.000000000 +1000
+++ linux/drivers/scsi/constants.c260t6pl	2003-10-01 11:12:35.000000000 +1000
@@ -62,42 +62,54 @@
 
 
 static const char *group_2_commands[] = {
-/* 40-41 */ "Change Definition", "Write Same", 
-/* 42-48 */ "Read sub-channel", "Read TOC", "Read header", 
-            "Play audio (10)", unknown, "Play audio msf",
-            "Play audio track/index", 
-/* 49-4f */ "Play track relative (10)", unknown, "Pause/resume", 
-            "Log Select", "Log Sense", unknown, unknown,
-/* 50-55 */ unknown, unknown, unknown, unknown, unknown, "Mode Select (10)",
-/* 56-5b */ unknown, unknown, unknown, unknown, "Mode Sense (10)", unknown,
-/* 5c-5f */ unknown, unknown, unknown,
+/* 40-41 */ "Change Definition", "Write Same",
+/* 42-48 */ "Read sub-channel", "Read TOC", "Read header",
+            "Play audio (10)", "Get configuration", "Play audio msf",
+            "Play audio track/index",
+/* 49-4f */ "Play track relative (10)", "Get event status notification",
+            "Pause/resume", "Log Select", "Log Sense", "Stop play/scan",
+            unknown,
+/* 50-55 */ "Xdwrite", "Xpwrite, Read disk info", "Xdread, Read track info",
+            "Reserve track", "Send OPC onfo", "Mode Select (10)",
+/* 56-5b */ "Reserve (10)", "Release (10)", "Repair track", "Read master cue",
+            "Mode Sense (10)", "Close track/session",
+/* 5c-5f */ "Read buffer capacity", "Send cue sheet", "Persistent reserve in",
+            "Persistent reserve out",
 };
 
 
 /* The following are 16 byte commands in group 4 */
 static const char *group_4_commands[] = {
-/* 80-84 */ unknown, unknown, unknown, unknown, unknown,
-/* 85-89 */ "Memory Export In (16)", unknown, unknown, unknown,
-            "Memory Export Out (16)",
-/* 8a-8f */ unknown, unknown, unknown, unknown, unknown, unknown,
-/* 90-94 */ unknown, unknown, unknown, unknown, unknown,
+/* 80-84 */ "Xdwrite (16)", "Rebuild (16)", "Regenerate (16)", "Extended copy",
+            "Receive copy results",
+/* 85-89 */ "Memory Export In (16)", "Access control in", "Access control out",
+            "Read (16)", "Memory Export Out (16)",
+/* 8a-8f */ "Write (16)", unknown, "Read attributes", "Write attributes",
+            "Write and verify (16)", "Verify (16)",
+/* 90-94 */ "Pre-fetch (16)", "Synchronize cache (16)",
+            "Lock/unlock cache (16)", "Write same (16)", unknown,
 /* 95-99 */ unknown, unknown, unknown, unknown, unknown,
-/* 9a-9f */ unknown, unknown, unknown, unknown, unknown, unknown,
+/* 9a-9f */ unknown, unknown, unknown, unknown, "Service action in",
+            "Service action out",
 };
 
-
 /* The following are 12 byte commands in group 5 */
 static const char *group_5_commands[] = {
-/* a0-a5 */ unknown, unknown, unknown, unknown, unknown,
-            "Move medium/play audio(12)",
-/* a6-a9 */ "Exchange medium", unknown, "Read(12)", "Play track relative(12)", 
-/* aa-ae */ "Write(12)", unknown, "Erase(12)", unknown, 
-            "Write and verify(12)", 
+/* a0-a5 */ "Report luns", "Blank", "Send event", "Maintenance (in)",
+            "Maintenance (out)", "Move medium/play audio(12)",
+/* a6-a9 */ "Exchange medium", "Move medium attached", "Read(12)",
+            "Play track relative(12)",
+/* aa-ae */ "Write(12)", unknown, "Erase(12), Get Performance",
+            "Read DVD structure", "Write and verify(12)",
 /* af-b1 */ "Verify(12)", "Search data high(12)", "Search data equal(12)",
-/* b2-b4 */ "Search data low(12)", "Set limits(12)", unknown,
-/* b5-b6 */ "Request volume element address", "Send volume tag",
-/* b7-b9 */ "Read defect data(12)", "Read element status", unknown,
-/* ba-bf */ unknown, unknown, unknown, unknown, unknown, unknown,
+/* b2-b4 */ "Search data low(12)", "Set limits(12)",
+            "Read element status attached",
+/* b5-b6 */ "Request volume element address", "Send volume tag, set streaming",
+/* b7-b9 */ "Read defect data(12)", "Read element status", "Read CD msf",
+/* ba-bc */ "Redundancy group (in), Scan",
+            "Redundancy group (out), Set cd-rom speed", "Spare (in), Play cd",
+/* bd-bf */ "Spare (out), Mechanism status", "Volume set (in), Read cd",
+            "Volume set (out), Send DVD structure",
 };
 
 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2003-10-01  1:23 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-10-01  0:21 [PATCH] consolidate and log scsi command on send and completion Patrick Mansfield
2003-10-01  0:23 ` Patrick Mansfield
2003-10-01  1:22   ` [PATCH] constants.c [was: consolidate and log scsi command on send and completion] Douglas Gilbert

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.