public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Add full complement of SPI transport attributes
@ 2004-03-06  0:33 James Bottomley
  0 siblings, 0 replies; only message in thread
From: James Bottomley @ 2004-03-06  0:33 UTC (permalink / raw)
  To: Martin Hicks; +Cc: SCSI Mailing List

This patch does two things:

1. Add all the other ppr type transport attributes to the spi class
2. make period settable as the ppr/sdtr period, but display in ns for
the user.

James

===== drivers/scsi/scsi_transport_spi.c 1.1 vs edited =====
--- 1.1/drivers/scsi/scsi_transport_spi.c	Thu Mar  4 17:29:03 2004
+++ edited/drivers/scsi/scsi_transport_spi.c	Fri Mar  5 18:43:30 2004
@@ -43,9 +43,16 @@
 
 static int spi_setup_transport_attrs(struct scsi_device *sdev)
 {
-	/* FIXME: should callback into the driver to get these values */
-	spi_period(sdev) = -1;
-	spi_offset(sdev) = -1;
+	spi_period(sdev) = -1;	/* illegal value */
+	spi_offset(sdev) = 0;	/* async */
+	spi_width(sdev) = 0;	/* narrow */
+	spi_iu(sdev) = 0;	/* no IU */
+	spi_dt(sdev) = 0;	/* ST */
+	spi_qas(sdev) = 0;
+	spi_wr_flow(sdev) = 0;
+	spi_rd_strm(sdev) = 0;
+	spi_rti(sdev) = 0;
+	spi_pcomp_en(sdev) = 0;
 
 	return 0;
 }
@@ -71,12 +78,78 @@
 static CLASS_DEVICE_ATTR( field, S_IRUGO, show_spi_transport_##field, NULL)
 
 /* The Parallel SCSI Tranport Attributes: */
-spi_transport_rd_attr(period, "%d\n");
 spi_transport_rd_attr(offset, "%d\n");
+spi_transport_rd_attr(width, "%d\n");
+spi_transport_rd_attr(iu, "%d\n");
+spi_transport_rd_attr(dt, "%d\n");
+spi_transport_rd_attr(qas, "%d\n");
+spi_transport_rd_attr(wr_flow, "%d\n");
+spi_transport_rd_attr(rd_strm, "%d\n");
+spi_transport_rd_attr(rti, "%d\n");
+spi_transport_rd_attr(pcomp_en, "%d\n");
+
+/* Translate the period into ns according to the current spec
+ * for SDTR/PPR messages */
+static ssize_t show_spi_transport_period(struct class_device *cdev, char *buf)
+
+{
+	struct scsi_device *sdev = transport_class_to_sdev(cdev);
+	struct spi_transport_attrs *tp;
+	char *str;
+
+	tp = (struct spi_transport_attrs *)&sdev->transport_data;
+
+	switch(tp->period) {
+	case 0x00 ... 0x06:
+		str =  "reserved";
+		break;
+
+	case 0x07:
+		str = "3.125";
+		break;
+
+	case 0x08:
+		str = "6.25";
+		break;
+
+	case 0x09:
+		str = "12.5";
+		break;
+
+	case 0x0a:
+		str = "25";
+		break;
+
+	case 0x0b:
+		str = "30.3";
+		break;
+
+	case 0x0c:
+		str = "50";
+
+	case 0x0d ... 0xff:
+		return sprintf(buf, "%d\n", tp->period * 4);
+
+	default:
+		str = "unknown";
+	}
+	return sprintf(buf, "%s\n", str);
+}
+
+static CLASS_DEVICE_ATTR(period, S_IRUGO, show_spi_transport_period, NULL);
+
 
 struct class_device_attribute *spi_transport_attrs[] = {
 	&class_device_attr_period,
 	&class_device_attr_offset,
+	&class_device_attr_width,
+	&class_device_attr_iu,
+	&class_device_attr_dt,
+	&class_device_attr_qas,
+	&class_device_attr_wr_flow,
+	&class_device_attr_rd_strm,
+	&class_device_attr_rti,
+	&class_device_attr_pcomp_en,
 	NULL
 };
 
===== include/scsi/scsi_transport_spi.h 1.1 vs edited =====
--- 1.1/include/scsi/scsi_transport_spi.h	Thu Mar  4 17:29:05 2004
+++ edited/include/scsi/scsi_transport_spi.h	Fri Mar  5 18:17:53 2004
@@ -25,14 +25,29 @@
 struct scsi_transport_template;
 
 struct spi_transport_attrs {
-	int period;
+	int period;		/* value in the PPR/SDTR command */
 	int offset;
+	int width:1;		/* 0 - narrow, 1 - wide */
+	int iu:1;		/* Information Units enabled */
+	int dt:1;		/* DT clocking enabled */
+	int qas:1;		/* Quick Arbitration and Selection enabled */
+	int wr_flow:1;		/* Write Flow control enabled */
+	int rd_strm:1;		/* Read streaming enabled */
+	int rti:1;		/* Retain Training Information */
+	int pcomp_en:1;		/* Precompensation enabled */
 };
 
 /* accessor functions */
 #define spi_period(x)	(((struct spi_transport_attrs *)&(x)->transport_data)->period)
 #define spi_offset(x)	(((struct spi_transport_attrs *)&(x)->transport_data)->offset)
-
+#define spi_width(x)	(((struct spi_transport_attrs *)&(x)->transport_data)->width)
+#define spi_iu(x)	(((struct spi_transport_attrs *)&(x)->transport_data)->iu)
+#define spi_dt(x)	(((struct spi_transport_attrs *)&(x)->transport_data)->dt)
+#define spi_qas(x)	(((struct spi_transport_attrs *)&(x)->transport_data)->qas)
+#define spi_wr_flow(x)	(((struct spi_transport_attrs *)&(x)->transport_data)->wr_flow)
+#define spi_rd_strm(x)	(((struct spi_transport_attrs *)&(x)->transport_data)->rd_strm)
+#define spi_rti(x)	(((struct spi_transport_attrs *)&(x)->transport_data)->rti)
+#define spi_pcomp_en(x)	(((struct spi_transport_attrs *)&(x)->transport_data)->pcomp_en)
 extern struct scsi_transport_template spi_transport_template;
 
 #endif /* SCSI_TRANSPORT_SPI_H */


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2004-03-06  0:33 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-03-06  0:33 [PATCH] Add full complement of SPI transport attributes James Bottomley

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox