[SCSI] SAS: consolidate linkspeed definitions
James Bottomley [Wed, 6 Sep 2006 22:36:13 +0000 (17:36 -0500)]
At the moment we have two separate linkspeed enumerations covering
roughly the same values.  This patch consolidates on a single one enum
sas_linkspeed in scsi_transport_sas.h and uses it everywhere in the
aic94xx driver.  Eventually I'll get around to removing the duplicated
fields in asd_sas_phy and sas_phy ...

Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>

drivers/scsi/aic94xx/aic94xx_hwi.c
drivers/scsi/aic94xx/aic94xx_init.c
drivers/scsi/aic94xx/aic94xx_scb.c
drivers/scsi/libsas/sas_expander.c
drivers/scsi/libsas/sas_internal.h
include/scsi/libsas.h
include/scsi/sas.h
include/scsi/scsi_transport_sas.h

index 075cea8..a242013 100644 (file)
@@ -96,7 +96,7 @@ static int asd_init_phy(struct asd_phy *phy)
        sas_phy->type = PHY_TYPE_PHYSICAL;
        sas_phy->role = PHY_ROLE_INITIATOR;
        sas_phy->oob_mode = OOB_NOT_CONNECTED;
-       sas_phy->linkrate = PHY_LINKRATE_NONE;
+       sas_phy->linkrate = SAS_LINK_RATE_UNKNOWN;
 
        phy->id_frm_tok = asd_alloc_coherent(asd_ha,
                                             sizeof(*phy->identify_frame),
index 69aa708..302b54f 100644 (file)
@@ -240,10 +240,14 @@ static int __devinit asd_common_setup(struct asd_ha_struct *asd_ha)
        /* All phys are enabled, by default. */
        asd_ha->hw_prof.enabled_phys = 0xFF;
        for (i = 0; i < ASD_MAX_PHYS; i++) {
-               asd_ha->hw_prof.phy_desc[i].max_sas_lrate = PHY_LINKRATE_3;
-               asd_ha->hw_prof.phy_desc[i].min_sas_lrate = PHY_LINKRATE_1_5;
-               asd_ha->hw_prof.phy_desc[i].max_sata_lrate= PHY_LINKRATE_1_5;
-               asd_ha->hw_prof.phy_desc[i].min_sata_lrate= PHY_LINKRATE_1_5;
+               asd_ha->hw_prof.phy_desc[i].max_sas_lrate =
+                       SAS_LINK_RATE_3_0_GBPS;
+               asd_ha->hw_prof.phy_desc[i].min_sas_lrate =
+                       SAS_LINK_RATE_1_5_GBPS;
+               asd_ha->hw_prof.phy_desc[i].max_sata_lrate =
+                       SAS_LINK_RATE_1_5_GBPS;
+               asd_ha->hw_prof.phy_desc[i].min_sata_lrate =
+                       SAS_LINK_RATE_1_5_GBPS;
        }
 
        return 0;
index fc1b743..ef8ca08 100644 (file)
@@ -55,15 +55,15 @@ static inline void get_lrate_mode(struct asd_phy *phy, u8 oob_mode)
        switch (oob_mode & 7) {
        case PHY_SPEED_60:
                /* FIXME: sas transport class doesn't have this */
-               phy->sas_phy.linkrate = PHY_LINKRATE_6;
+               phy->sas_phy.linkrate = SAS_LINK_RATE_6_0_GBPS;
                phy->sas_phy.phy->negotiated_linkrate = SAS_LINK_RATE_6_0_GBPS;
                break;
        case PHY_SPEED_30:
-               phy->sas_phy.linkrate = PHY_LINKRATE_3;
+               phy->sas_phy.linkrate = SAS_LINK_RATE_3_0_GBPS;
                phy->sas_phy.phy->negotiated_linkrate = SAS_LINK_RATE_3_0_GBPS;
                break;
        case PHY_SPEED_15:
-               phy->sas_phy.linkrate = PHY_LINKRATE_1_5;
+               phy->sas_phy.linkrate = SAS_LINK_RATE_1_5_GBPS;
                phy->sas_phy.phy->negotiated_linkrate = SAS_LINK_RATE_1_5_GBPS;
                break;
        }
@@ -540,39 +540,39 @@ static inline void set_speed_mask(u8 *speed_mask, struct asd_phy_desc *pd)
                | SATA_SPEED_30_DIS | SATA_SPEED_15_DIS;
 
        switch (pd->max_sas_lrate) {
-       case PHY_LINKRATE_6:
+       case SAS_LINK_RATE_6_0_GBPS:
                *speed_mask &= ~SAS_SPEED_60_DIS;
        default:
-       case PHY_LINKRATE_3:
+       case SAS_LINK_RATE_3_0_GBPS:
                *speed_mask &= ~SAS_SPEED_30_DIS;
-       case PHY_LINKRATE_1_5:
+       case SAS_LINK_RATE_1_5_GBPS:
                *speed_mask &= ~SAS_SPEED_15_DIS;
        }
 
        switch (pd->min_sas_lrate) {
-       case PHY_LINKRATE_6:
+       case SAS_LINK_RATE_6_0_GBPS:
                *speed_mask |= SAS_SPEED_30_DIS;
-       case PHY_LINKRATE_3:
+       case SAS_LINK_RATE_3_0_GBPS:
                *speed_mask |= SAS_SPEED_15_DIS;
        default:
-       case PHY_LINKRATE_1_5:
+       case SAS_LINK_RATE_1_5_GBPS:
                /* nothing to do */
                ;
        }
 
        switch (pd->max_sata_lrate) {
-       case PHY_LINKRATE_3:
+       case SAS_LINK_RATE_3_0_GBPS:
                *speed_mask &= ~SATA_SPEED_30_DIS;
        default:
-       case PHY_LINKRATE_1_5:
+       case SAS_LINK_RATE_1_5_GBPS:
                *speed_mask &= ~SATA_SPEED_15_DIS;
        }
 
        switch (pd->min_sata_lrate) {
-       case PHY_LINKRATE_3:
+       case SAS_LINK_RATE_3_0_GBPS:
                *speed_mask |= SATA_SPEED_15_DIS;
        default:
-       case PHY_LINKRATE_1_5:
+       case SAS_LINK_RATE_1_5_GBPS:
                /* nothing to do */
                ;
        }
index b653a26..02e796e 100644 (file)
@@ -191,20 +191,7 @@ static void sas_set_ex_phy(struct domain_device *dev, int phy_id,
        phy->phy->maximum_linkrate_hw = SAS_LINK_RATE_3_0_GBPS;
        phy->phy->minimum_linkrate = SAS_LINK_RATE_1_5_GBPS;
        phy->phy->maximum_linkrate = SAS_LINK_RATE_3_0_GBPS;
-       switch (phy->linkrate) {
-       case PHY_LINKRATE_1_5:
-               phy->phy->negotiated_linkrate = SAS_LINK_RATE_1_5_GBPS;
-               break;
-       case PHY_LINKRATE_3:
-               phy->phy->negotiated_linkrate = SAS_LINK_RATE_3_0_GBPS;
-               break;
-       case PHY_LINKRATE_6:
-               phy->phy->negotiated_linkrate = SAS_LINK_RATE_6_0_GBPS;
-               break;
-       default:
-               phy->phy->negotiated_linkrate = SAS_LINK_RATE_UNKNOWN;
-               break;
-       }
+       phy->phy->negotiated_linkrate = phy->linkrate;
 
        if (!rediscover)
                sas_phy_add(phy->phy);
@@ -450,7 +437,7 @@ static void sas_ex_disable_phy(struct domain_device *dev, int phy_id)
        struct ex_phy *phy = &ex->ex_phy[phy_id];
 
        sas_smp_phy_control(dev, phy_id, PHY_FUNC_DISABLE);
-       phy->linkrate = PHY_DISABLED;
+       phy->linkrate = SAS_PHY_DISABLED;
 }
 
 static void sas_ex_disable_port(struct domain_device *dev, u8 *sas_addr)
@@ -743,7 +730,7 @@ static int sas_ex_discover_dev(struct domain_device *dev, int phy_id)
        int res = 0;
 
        /* Phy state */
-       if (ex_phy->linkrate == PHY_SPINUP_HOLD) {
+       if (ex_phy->linkrate == SAS_SATA_SPINUP_HOLD) {
                if (!sas_smp_phy_control(dev, phy_id, PHY_FUNC_LINK_RESET))
                        res = sas_ex_phy_discover(dev, phy_id);
                if (res)
@@ -773,7 +760,7 @@ static int sas_ex_discover_dev(struct domain_device *dev, int phy_id)
                        sas_configure_routing(dev, ex_phy->attached_sas_addr);
                }
                return 0;
-       } else if (ex_phy->linkrate == PHY_LINKRATE_UNKNOWN)
+       } else if (ex_phy->linkrate == SAS_LINK_RATE_UNKNOWN)
                return 0;
 
        if (ex_phy->attached_dev_type != SAS_END_DEV &&
@@ -922,9 +909,9 @@ static int sas_ex_discover_devices(struct domain_device *dev, int single)
                        continue;
 
                switch (ex_phy->linkrate) {
-               case PHY_DISABLED:
-               case PHY_RESET_PROBLEM:
-               case PHY_PORT_SELECTOR:
+               case SAS_PHY_DISABLED:
+               case SAS_PHY_RESET_PROBLEM:
+               case SAS_SATA_PORT_SELECTOR:
                        continue;
                default:
                        res = sas_ex_discover_dev(dev, i);
index 89c3976..0d69ede 100644 (file)
@@ -43,7 +43,7 @@ void sas_scsi_recover_host(struct Scsi_Host *shost);
 
 int sas_show_class(enum sas_class class, char *buf);
 int sas_show_proto(enum sas_proto proto, char *buf);
-int sas_show_linkrate(enum sas_phy_linkrate linkrate, char *buf);
+int sas_show_linkrate(enum sas_linkrate linkrate, char *buf);
 int sas_show_oob_mode(enum sas_oob_mode oob_mode, char *buf);
 
 int  sas_register_phys(struct sas_ha_struct *sas_ha);
index 72acdab..8d91313 100644 (file)
@@ -114,7 +114,7 @@ struct ex_phy {
        enum ex_phy_state phy_state;
 
        enum sas_dev_type attached_dev_type;
-       enum sas_phy_linkrate linkrate;
+       enum sas_linkrate linkrate;
 
        u8   attached_sata_host:1;
        u8   attached_sata_dev:1;
@@ -170,9 +170,9 @@ struct sata_device {
 struct domain_device {
         enum sas_dev_type dev_type;
 
-        enum sas_phy_linkrate linkrate;
-        enum sas_phy_linkrate min_linkrate;
-        enum sas_phy_linkrate max_linkrate;
+        enum sas_linkrate linkrate;
+        enum sas_linkrate min_linkrate;
+        enum sas_linkrate max_linkrate;
 
         int  pathways;
 
@@ -220,7 +220,7 @@ struct asd_sas_port {
        struct domain_device *port_dev;
        spinlock_t dev_list_lock;
        struct list_head dev_list;
-       enum   sas_phy_linkrate linkrate;
+       enum   sas_linkrate linkrate;
 
        struct sas_phy *phy;
        struct work_struct work;
@@ -276,7 +276,7 @@ struct asd_sas_phy {
        enum sas_phy_type  type;
        enum sas_phy_role  role;
        enum sas_oob_mode  oob_mode;
-       enum sas_phy_linkrate linkrate;
+       enum sas_linkrate linkrate;
 
        u8   *sas_addr;           /* must be set */
        u8   attached_sas_addr[SAS_ADDR_SIZE]; /* class:RO, driver: R/W */
@@ -368,7 +368,7 @@ void sas_hash_addr(u8 *hashed, const u8 *sas_addr);
 static inline void sas_phy_disconnected(struct asd_sas_phy *phy)
 {
        phy->oob_mode = OOB_NOT_CONNECTED;
-       phy->linkrate = PHY_LINKRATE_NONE;
+       phy->linkrate = SAS_LINK_RATE_UNKNOWN;
 }
 
 /* ---------- Tasks ---------- */
index 752853a..9c8a5b9 100644 (file)
@@ -102,20 +102,6 @@ enum sas_dev_type {
        SATA_PM_PORT= 8,
 };
 
-enum sas_phy_linkrate {
-       PHY_LINKRATE_NONE = 0,
-       PHY_LINKRATE_UNKNOWN = 0,
-       PHY_DISABLED,
-       PHY_RESET_PROBLEM,
-       PHY_SPINUP_HOLD,
-       PHY_PORT_SELECTOR,
-       PHY_LINKRATE_1_5 = 0x08,
-       PHY_LINKRATE_G1  = PHY_LINKRATE_1_5,
-       PHY_LINKRATE_3   = 0x09,
-       PHY_LINKRATE_G2  = PHY_LINKRATE_3,
-       PHY_LINKRATE_6   = 0x0A,
-};
-
 /* Partly from IDENTIFY address frame. */
 enum sas_proto {
        SATA_PROTO    = 1,
index eeb2200..87de518 100644 (file)
@@ -24,15 +24,23 @@ enum sas_protocol {
 };
 
 enum sas_linkrate {
-       SAS_LINK_RATE_UNKNOWN,
-       SAS_PHY_DISABLED,
-       SAS_LINK_RATE_FAILED,
-       SAS_SATA_SPINUP_HOLD,
-       SAS_SATA_PORT_SELECTOR,
-       SAS_LINK_RATE_1_5_GBPS,
-       SAS_LINK_RATE_3_0_GBPS,
-       SAS_LINK_RATE_6_0_GBPS,
-       SAS_LINK_VIRTUAL,
+       /* These Values are defined in the SAS standard */
+       SAS_LINK_RATE_UNKNOWN = 0,
+       SAS_PHY_DISABLED = 1,
+       SAS_PHY_RESET_PROBLEM = 2,
+       SAS_SATA_SPINUP_HOLD = 3,
+       SAS_SATA_PORT_SELECTOR = 4,
+       SAS_PHY_RESET_IN_PROGRESS = 5,
+       SAS_LINK_RATE_1_5_GBPS = 8,
+       SAS_LINK_RATE_G1 = SAS_LINK_RATE_1_5_GBPS,
+       SAS_LINK_RATE_3_0_GBPS = 9,
+       SAS_LINK_RATE_G2 = SAS_LINK_RATE_3_0_GBPS,
+       SAS_LINK_RATE_6_0_GBPS = 10,
+       /* These are virtual to the transport class and may never
+        * be signalled normally since the standard defined field
+        * is only 4 bits */
+       SAS_LINK_RATE_FAILED = 0x10,
+       SAS_PHY_VIRTUAL = 0x11,
 };
 
 struct sas_identify {