Good stuff, Christoph!
Luben
--- Christoph Hellwig <[EMAIL PROTECTED]> wrote:
> This is a minmal, bottom-up SAS transport class. So far it only exposed
> information about the SAS port/phy and SAS device (scsi target). I hope
> this will integrate nicely with the top-down work Luben has done once he
> finally releases it publically, but for now I think we should have
> something so SAS drivers can go in the tree.
>
> In detail this transport class does:
>
> - introduces a SAS port object between the Scsi_Host and scsi_target,
> this is used to hold all information specific to the SAS port and
> PHY - right now they're used interchangable as I haven't found the
> right abstraction for wide ports yet - if there is a proper solution
> at all as the SAS spec leaves binding PHYs together to wide ports
> up to the implementation.
> - adds some attributes to the scsi_target, and an API call to
> preinitialize them.
>
> It does not:
>
> - handle any managment interfaces or chaning of attributes
> - any SAS devices that are not scsi targets, most importantly there's
> no support for SMP and extenders yet
> - wide ports (as mentioned above)
> - software device discovery (although I know Luben has some nice code
> for that)
> - everythig not mentioned here
>
> A bit of warning: I've only tested this with an SATA disk attached to
> a SAS HBA so far because I don't have any real SAS storage yet.
>
> To use the transport class you need a patched fusion driver for now,
> use the LSI tarball at:
>
>
>
ftp://ftp.lsil.com/HostAdapterDrivers/linux/Fusion-MPT/mptlinux-3.02.55-src.tar.gz
>
> plus my patch at:
>
> http://verein.lst.de/~hch/fusion-sas-transport-class.diff
>
> I'll try to port my changes plus basic SAS support over to the mainline
> driver, but the driver is currently not endian clean which makes it hard
> for me to actually test it.
>
> Signed-off-by: Christoph Hellwig <[EMAIL PROTECTED]>
>
> Index: scsi-misc-2.6/drivers/scsi/Kconfig
> ===================================================================
> --- scsi-misc-2.6.orig/drivers/scsi/Kconfig 2005-08-13 13:53:51.000000000
> +0200
> +++ scsi-misc-2.6/drivers/scsi/Kconfig 2005-08-15 15:34:56.000000000
> +0200
> @@ -229,6 +229,13 @@
> each attached iSCSI device to sysfs, say Y.
> Otherwise, say N.
>
> +config SCSI_SAS_ATTRS
> + tristate "SAS Transport Attributes"
> + depends on SCSI
> + help
> + If you wish to export transport-specific information about
> + each attached SAS device to sysfs, say Y.
> +
> endmenu
>
> menu "SCSI low-level drivers"
> Index: scsi-misc-2.6/drivers/scsi/Makefile
> ===================================================================
> --- scsi-misc-2.6.orig/drivers/scsi/Makefile 2005-08-13 13:53:51.000000000
> +0200
> +++ scsi-misc-2.6/drivers/scsi/Makefile 2005-08-15 15:35:12.000000000
> +0200
> @@ -29,6 +29,7 @@
> obj-$(CONFIG_SCSI_SPI_ATTRS) += scsi_transport_spi.o
> obj-$(CONFIG_SCSI_FC_ATTRS) += scsi_transport_fc.o
> obj-$(CONFIG_SCSI_ISCSI_ATTRS) += scsi_transport_iscsi.o
> +obj-$(CONFIG_SCSI_SAS_ATTRS) += scsi_transport_sas.o
>
> obj-$(CONFIG_SCSI_AMIGA7XX) += amiga7xx.o 53c7xx.o
> obj-$(CONFIG_A3000_SCSI) += a3000.o wd33c93.o
> Index: scsi-misc-2.6/drivers/scsi/scsi_transport_sas.c
> ===================================================================
> --- /dev/null 1970-01-01 00:00:00.000000000 +0000
> +++ scsi-misc-2.6/drivers/scsi/scsi_transport_sas.c 2005-08-15
> 15:40:00.000000000 +0200
> @@ -0,0 +1,491 @@
> +/*
> + * Copyright (C) 2005 Dell Inc.
> + * Released under GPL v2.
> + *
> + * Based on the FC transport class work by James Smart, Emulex Corporation.
> + */
> +
> +#include <linux/init.h>
> +#include <linux/module.h>
> +#include <linux/err.h>
> +
> +#include <scsi/scsi_device.h>
> +#include <scsi/scsi_host.h>
> +#include <scsi/scsi_transport.h>
> +#include <scsi/scsi_transport_sas.h>
> +
> +
> +#define SAS_TARGET_ATTRS 25
> +#define SAS_PORT_ATTRS 25
> +
> +struct sas_internal {
> + struct scsi_transport_template t;
> + struct sas_function_template *f;
> +
> + struct class_device_attribute private_target_attrs[SAS_TARGET_ATTRS];
> + struct class_device_attribute private_port_attrs[SAS_TARGET_ATTRS];
> +
> + struct transport_container port_attr_cont;
> +
> + /*
> + * The array of null terminated pointers to attributes
> + * needed by scsi_sysfs.c
> + */
> + struct class_device_attribute *target_attrs[SAS_TARGET_ATTRS];
> + struct class_device_attribute *port_attrs[SAS_PORT_ATTRS + 1];
> +};
> +#define to_sas_internal(tmpl) container_of(tmpl, struct sas_internal,
> t)
> +
> +/*
> + * Hack to allow attributes of the same name in different objects.
> + */
> +#define SAS_CLASS_DEVICE_ATTR(_prefix,_name,_mode,_show,_store) \
> + struct class_device_attribute class_device_attr_##_prefix##_##_name = \
> + __ATTR(_name,_mode,_show,_store)
> +
> +
> +/*
> + * Pretty printing helpers
> + */
> +
> +#define sas_bitfield_name_match(title, table) \
> +static ssize_t \
> +get_sas_##title##_names(u32 table_key, char *buf) \
> +{ \
> + char *prefix = ""; \
> + ssize_t len = 0; \
> + int i; \
> + \
> + for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) { \
> + if (table[i].value & table_key) { \
> + len += sprintf(buf + len, "%s%s", \
> + prefix, table[i].name); \
> + prefix = ", "; \
> + } \
> + } \
> + len += sprintf(buf + len, "\n"); \
> + return len; \
> +}
> +
> +#define sas_bitfield_name_search(title, table) \
> +static ssize_t \
> +get_sas_##title##_names(u32 table_key, char *buf) \
> +{ \
> + ssize_t len = 0; \
> + int i; \
> + \
> + for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) { \
> + if (table[i].value == table_key) { \
> + len += sprintf(buf + len, "%s", \
> + table[i].name); \
> + break; \
> + } \
> + } \
> + len += sprintf(buf + len, "\n"); \
> + return len; \
> +}
> +
> +static struct {
> + u32 value;
> + char *name;
> +} sas_device_type_names[] = {
> + { SAS_PHY_UNUSED, "unused" },
> + { SAS_END_DEVICE, "end device" },
> + { SAS_EDGE_EXPANDER_DEVICE, "edge expander" },
> + { SAS_FANOUT_EXPANDER_DEVICE, "fanout expander" },
> +};
> +sas_bitfield_name_search(device_type, sas_device_type_names)
> +
> +
> +static struct {
> + u32 value;
> + char *name;
> +} sas_protocol_names[] = {
> + { SAS_PROTOCOL_SATA, "sata" },
> + { SAS_PROTOCOL_SMP, "smp" },
> + { SAS_PROTOCOL_STP, "stp" },
> + { SAS_PROTOCOL_SSP, "ssp" },
> +};
> +sas_bitfield_name_match(protocol, sas_protocol_names)
> +
> +static struct {
> + u32 value;
> + char *name;
> +} sas_linkspeed_names[] = {
> + { SAS_LINK_RATE_UNKNOWN, "Unknown" },
> + { SAS_PHY_DISABLED, "Phy disabled" },
> + { SAS_LINK_RATE_FAILED, "Link Rate failed" },
>
=== message truncated ===
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html