imsm: detail_platform_imsm supports Intel SAS controller (isci driver)

Added support in detail_platform_imsm for Intel (R) SAS controller.
Function supports AHCI and ISCI controllers. RAID properties are derived
from common OROM for both types.

Based on code From: Artur Wojcik <artur.wojcik@intel.com>
Signed-off-by: Marcin Labun <marcin.labun@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Labun Marcin 2011-01-25 17:44:11 +11:00 committed by NeilBrown
parent 120dc88745
commit 155cbb4c2c
1 changed files with 15 additions and 11 deletions

View File

@ -1297,12 +1297,15 @@ static int ahci_enumerate_ports(const char *hba_path, int port_count, int host_b
}
static void print_found_intel_controllers(struct sys_dev *elem)
{
for (; elem; elem = elem->next) {
fprintf(stderr, Name ": found Intel(R) ");
if (elem->type == SYS_DEV_SATA)
fprintf(stderr, "SATA ");
else if (elem->type == SYS_DEV_SAS)
fprintf(stderr, "SAS ");
fprintf(stderr, "RAID controller");
if (elem->pci_id)
fprintf(stderr, " at %s", elem->pci_id);
@ -1311,7 +1314,6 @@ static void print_found_intel_controllers(struct sys_dev *elem)
fflush(stderr);
}
static int ahci_get_port_count(const char *hba_path, int *port_count)
{
struct dirent *ent;
@ -1364,22 +1366,19 @@ static int detail_platform_imsm(int verbose, int enumerate_only)
return 2;
}
list = find_driver_devices("pci", "ahci");
for (hba = list; hba; hba = hba->next)
if (devpath_to_vendor(hba->path) == 0x8086)
break;
if (!hba) {
list = find_intel_devices();
if (!list) {
if (verbose)
fprintf(stderr, Name ": unable to find active ahci controller\n");
fprintf(stderr, Name ": no active Intel(R) RAID "
"controller found.\n");
free_sys_dev(&list);
return 2;
} else if (verbose)
fprintf(stderr, Name ": found Intel SATA AHCI Controller\n");
print_found_intel_controllers(list);
print_found_intel_controllers(list);
orom = find_imsm_orom();
if (!orom) {
free_sys_dev(&list);
if (verbose)
fprintf(stderr, Name ": imsm option-rom not found\n");
return 2;
@ -1414,7 +1413,6 @@ static int detail_platform_imsm(int verbose, int enumerate_only)
printf(" Max Disks : %d\n", orom->tds);
printf(" Max Volumes : %d\n", orom->vpa);
for (hba = list; hba; hba = hba->next) {
printf(" I/O Controller : %s (%s)\n",
hba->path, get_sys_dev_type(hba->type));
@ -1427,8 +1425,14 @@ static int detail_platform_imsm(int verbose, int enumerate_only)
"ports on SATA controller at %s.", hba->pci_id);
result |= 2;
}
} else if (hba->type == SYS_DEV_SAS) {
if (verbose)
fprintf(stderr, Name ": failed to enumerate "
"devices on SAS controller at %s.", hba->pci_id);
result |= 2;
}
}
free_sys_dev(&list);
return result;
}