From 36f7fe5127c8074cdece107d8294726678e29bf6 Mon Sep 17 00:00:00 2001 From: Matthew Wilcox Date: Sat, 18 Feb 2006 20:52:31 -0700 Subject: [PATCH] --- yaml --- r: 22537 b: refs/heads/master c: fc25307d06f524d6c04b371b236dc9e62186058c h: refs/heads/master i: 22535: 9607ffa0a57284a5d6aebb6a14ae0879a6403055 v: v3 --- [refs] | 2 +- trunk/drivers/scsi/scsi_transport_spi.c | 24 +++++++++++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 4a3c1f7710d7..1f2eb43fa724 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1bfc5d9d5eb8e1a2efacc306bc55c248ed259a8e +refs/heads/master: fc25307d06f524d6c04b371b236dc9e62186058c diff --git a/trunk/drivers/scsi/scsi_transport_spi.c b/trunk/drivers/scsi/scsi_transport_spi.c index c63adff15afa..0b29ee9989a4 100644 --- a/trunk/drivers/scsi/scsi_transport_spi.c +++ b/trunk/drivers/scsi/scsi_transport_spi.c @@ -1105,7 +1105,7 @@ static const char * const two_byte_msgs[] = { static const char * const extended_msgs[] = { /* 0x00 */ "Modify Data Pointer", "Synchronous Data Transfer Request", /* 0x02 */ "SCSI-I Extended Identify", "Wide Data Transfer Request", -/* 0x04 */ "Parallel Protocol Request" +/* 0x04 */ "Parallel Protocol Request", "Modify Bidirectional Data Pointer" }; static void print_nego(const unsigned char *msg, int per, int off, int width) @@ -1122,11 +1122,20 @@ static void print_nego(const unsigned char *msg, int per, int off, int width) printk("width = %d ", 8 << msg[width]); } +static void print_ptr(const unsigned char *msg, int msb, const char *desc) +{ + int ptr = (msg[msb] << 24) | (msg[msb+1] << 16) | (msg[msb+2] << 8) | + msg[msb+3]; + printk("%s = %d ", desc, ptr); +} + int spi_print_msg(const unsigned char *msg) { int len = 0, i; if (msg[0] == EXTENDED_MESSAGE) { - len = 3 + msg[1]; + len = 2 + msg[1]; + if (len == 2) + len += 256; if (msg[2] < ARRAY_SIZE(extended_msgs)) printk ("%s ", extended_msgs[msg[2]]); else @@ -1134,8 +1143,7 @@ int spi_print_msg(const unsigned char *msg) (int) msg[2]); switch (msg[2]) { case EXTENDED_MODIFY_DATA_POINTER: - printk("pointer = %d ", (msg[3] << 24) | - (msg[4] << 16) | (msg[5] << 8) | msg[6]); + print_ptr(msg, 3, "pointer"); break; case EXTENDED_SDTR: print_nego(msg, 3, 4, 0); @@ -1146,6 +1154,10 @@ int spi_print_msg(const unsigned char *msg) case EXTENDED_PPR: print_nego(msg, 3, 5, 6); break; + case EXTENDED_MODIFY_BIDI_DATA_PTR: + print_ptr(msg, 3, "out"); + print_ptr(msg, 7, "in"); + break; default: for (i = 2; i < len; ++i) printk("%02x ", msg[i]); @@ -1186,7 +1198,9 @@ int spi_print_msg(const unsigned char *msg) int len = 0, i; if (msg[0] == EXTENDED_MESSAGE) { - len = 3 + msg[1]; + len = 2 + msg[1]; + if (len == 2) + len += 256; for (i = 0; i < len; ++i) printk("%02x ", msg[i]); /* Identify */