forked from luck/tmp_suning_uos_patched
[SCSI] libsas: Allow expander T-T attachments
Allow expander table-to-table attachments for expanders that support it. Signed-off-by: Luben Tuikov <ltuikov@yahoo.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
41e9a69641
commit
ffaac8f45b
@ -329,6 +329,7 @@ static void ex_assign_report_general(struct domain_device *dev,
|
|||||||
dev->ex_dev.ex_change_count = be16_to_cpu(rg->change_count);
|
dev->ex_dev.ex_change_count = be16_to_cpu(rg->change_count);
|
||||||
dev->ex_dev.max_route_indexes = be16_to_cpu(rg->route_indexes);
|
dev->ex_dev.max_route_indexes = be16_to_cpu(rg->route_indexes);
|
||||||
dev->ex_dev.num_phys = min(rg->num_phys, (u8)MAX_EXPANDER_PHYS);
|
dev->ex_dev.num_phys = min(rg->num_phys, (u8)MAX_EXPANDER_PHYS);
|
||||||
|
dev->ex_dev.t2t_supp = rg->t2t_supp;
|
||||||
dev->ex_dev.conf_route_table = rg->conf_route_table;
|
dev->ex_dev.conf_route_table = rg->conf_route_table;
|
||||||
dev->ex_dev.configuring = rg->configuring;
|
dev->ex_dev.configuring = rg->configuring;
|
||||||
memcpy(dev->ex_dev.enclosure_logical_id, rg->enclosure_logical_id, 8);
|
memcpy(dev->ex_dev.enclosure_logical_id, rg->enclosure_logical_id, 8);
|
||||||
@ -1133,15 +1134,17 @@ static void sas_print_parent_topology_bug(struct domain_device *child,
|
|||||||
};
|
};
|
||||||
struct domain_device *parent = child->parent;
|
struct domain_device *parent = child->parent;
|
||||||
|
|
||||||
sas_printk("%s ex %016llx phy 0x%x <--> %s ex %016llx phy 0x%x "
|
sas_printk("%s ex %016llx (T2T supp:%d) phy 0x%x <--> %s ex %016llx "
|
||||||
"has %c:%c routing link!\n",
|
"(T2T supp:%d) phy 0x%x has %c:%c routing link!\n",
|
||||||
|
|
||||||
ex_type[parent->dev_type],
|
ex_type[parent->dev_type],
|
||||||
SAS_ADDR(parent->sas_addr),
|
SAS_ADDR(parent->sas_addr),
|
||||||
|
parent->ex_dev.t2t_supp,
|
||||||
parent_phy->phy_id,
|
parent_phy->phy_id,
|
||||||
|
|
||||||
ex_type[child->dev_type],
|
ex_type[child->dev_type],
|
||||||
SAS_ADDR(child->sas_addr),
|
SAS_ADDR(child->sas_addr),
|
||||||
|
child->ex_dev.t2t_supp,
|
||||||
child_phy->phy_id,
|
child_phy->phy_id,
|
||||||
|
|
||||||
ra_char[parent_phy->routing_attr],
|
ra_char[parent_phy->routing_attr],
|
||||||
@ -1238,10 +1241,15 @@ static int sas_check_parent_topology(struct domain_device *child)
|
|||||||
sas_print_parent_topology_bug(child, parent_phy, child_phy);
|
sas_print_parent_topology_bug(child, parent_phy, child_phy);
|
||||||
res = -ENODEV;
|
res = -ENODEV;
|
||||||
}
|
}
|
||||||
} else if (parent_phy->routing_attr == TABLE_ROUTING &&
|
} else if (parent_phy->routing_attr == TABLE_ROUTING) {
|
||||||
child_phy->routing_attr != SUBTRACTIVE_ROUTING) {
|
if (child_phy->routing_attr == SUBTRACTIVE_ROUTING ||
|
||||||
sas_print_parent_topology_bug(child, parent_phy, child_phy);
|
(child_phy->routing_attr == TABLE_ROUTING &&
|
||||||
res = -ENODEV;
|
child_ex->t2t_supp && parent_ex->t2t_supp)) {
|
||||||
|
/* All good */;
|
||||||
|
} else {
|
||||||
|
sas_print_parent_topology_bug(child, parent_phy, child_phy);
|
||||||
|
res = -ENODEV;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FANOUT_DEV:
|
case FANOUT_DEV:
|
||||||
|
@ -142,8 +142,11 @@ struct expander_device {
|
|||||||
u16 ex_change_count;
|
u16 ex_change_count;
|
||||||
u16 max_route_indexes;
|
u16 max_route_indexes;
|
||||||
u8 num_phys;
|
u8 num_phys;
|
||||||
|
|
||||||
|
u8 t2t_supp:1;
|
||||||
u8 configuring:1;
|
u8 configuring:1;
|
||||||
u8 conf_route_table:1;
|
u8 conf_route_table:1;
|
||||||
|
|
||||||
u8 enclosure_logical_id[8];
|
u8 enclosure_logical_id[8];
|
||||||
|
|
||||||
struct ex_phy *ex_phy;
|
struct ex_phy *ex_phy;
|
||||||
|
@ -349,7 +349,12 @@ struct report_general_resp {
|
|||||||
|
|
||||||
u8 conf_route_table:1;
|
u8 conf_route_table:1;
|
||||||
u8 configuring:1;
|
u8 configuring:1;
|
||||||
u8 _r_b:6;
|
u8 config_others:1;
|
||||||
|
u8 orej_retry_supp:1;
|
||||||
|
u8 stp_cont_awt:1;
|
||||||
|
u8 self_config:1;
|
||||||
|
u8 zone_config:1;
|
||||||
|
u8 t2t_supp:1;
|
||||||
|
|
||||||
u8 _r_c;
|
u8 _r_c;
|
||||||
|
|
||||||
@ -536,7 +541,12 @@ struct report_general_resp {
|
|||||||
u8 _r_a;
|
u8 _r_a;
|
||||||
u8 num_phys;
|
u8 num_phys;
|
||||||
|
|
||||||
u8 _r_b:6;
|
u8 t2t_supp:1;
|
||||||
|
u8 zone_config:1;
|
||||||
|
u8 self_config:1;
|
||||||
|
u8 stp_cont_awt:1;
|
||||||
|
u8 orej_retry_supp:1;
|
||||||
|
u8 config_others:1;
|
||||||
u8 configuring:1;
|
u8 configuring:1;
|
||||||
u8 conf_route_table:1;
|
u8 conf_route_table:1;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user