diff options
| author | Srikanth Suravajhala <srikanth.suravajhala@oracle.com> | 2010-06-25 17:30:31 -0400 |
|---|---|---|
| committer | Srikanth Suravajhala <srikanth.suravajhala@oracle.com> | 2010-06-25 17:30:31 -0400 |
| commit | 688a63ed70eca66e1dc82c8f096cb66f8bd94013 (patch) | |
| tree | a60d06d14e7d438c6b39fe32c7b26c4ad011c18c /usr/src | |
| parent | 6e7514aea2b79ddf20753fec3d234c35b6495971 (diff) | |
| download | illumos-joyent-688a63ed70eca66e1dc82c8f096cb66f8bd94013.tar.gz | |
6960217 Maguro+: Internal Thebe listed as unknown in BUI and CLI
Diffstat (limited to 'usr/src')
| -rw-r--r-- | usr/src/uts/common/io/scsi/adapters/pmcs/pmcs_nvram.c | 25 | ||||
| -rw-r--r-- | usr/src/uts/common/sys/scsi/adapters/pmcs/pmcs_iomb.h | 8 |
2 files changed, 29 insertions, 4 deletions
diff --git a/usr/src/uts/common/io/scsi/adapters/pmcs/pmcs_nvram.c b/usr/src/uts/common/io/scsi/adapters/pmcs/pmcs_nvram.c index bfda7fe43b..bd5e18fb30 100644 --- a/usr/src/uts/common/io/scsi/adapters/pmcs/pmcs_nvram.c +++ b/usr/src/uts/common/io/scsi/adapters/pmcs/pmcs_nvram.c @@ -466,13 +466,32 @@ pmcs_validate_vpd(pmcs_hw_t *pwp, uint8_t *data) * Make sure we understand the format of this data */ - if (vpd_header->eeprom_version < PMCS_VPD_VERSION) { + /* + * Only VPD version 1 is VALID for Thebe-INT cards and + * Only VPD version 2 is valid for Thebe-EXT cards + */ + if ((vpd_header->eeprom_version == PMCS_EEPROM_INT_VERSION && + vpd_header->subsys_pid[0] == PMCS_EEPROM_INT_SSID_BYTE1 && + vpd_header->subsys_pid[1] == PMCS_EEPROM_INT_SSID_BYTE2) || + (vpd_header->eeprom_version == PMCS_EEPROM_EXT_VERSION && + vpd_header->subsys_pid[0] == PMCS_EEPROM_EXT_SSID_BYTE1 && + vpd_header->subsys_pid[1] == PMCS_EEPROM_EXT_SSID_BYTE2)) { + goto valid_version; + } else { + pmcs_prt(pwp, PMCS_PRT_DEBUG, NULL, NULL, + "%s: Detected Thebe card with SSID(%02x%02x)", __func__, + vpd_header->subsys_pid[0], vpd_header->subsys_pid[1]); pmcs_prt(pwp, PMCS_PRT_DEBUG, NULL, NULL, - "%s: VPD version(%d) unsupported; requires version %d.", - __func__, vpd_header->eeprom_version, PMCS_VPD_VERSION); + "%s: EEPROM(%d) unsupported; requires %d for INT(%02x%02x) " + " and %d for EXT(%02x%02x) cards.", __func__, + vpd_header->eeprom_version, + PMCS_EEPROM_INT_VERSION, PMCS_EEPROM_INT_SSID_BYTE1, + PMCS_EEPROM_INT_SSID_BYTE2, PMCS_EEPROM_EXT_VERSION, + PMCS_EEPROM_EXT_SSID_BYTE1, PMCS_EEPROM_EXT_SSID_BYTE2); return (B_FALSE); } +valid_version: /* * Do we have a valid SAS WWID? */ diff --git a/usr/src/uts/common/sys/scsi/adapters/pmcs/pmcs_iomb.h b/usr/src/uts/common/sys/scsi/adapters/pmcs/pmcs_iomb.h index c8860b6376..cd0c4d8b1e 100644 --- a/usr/src/uts/common/sys/scsi/adapters/pmcs/pmcs_iomb.h +++ b/usr/src/uts/common/sys/scsi/adapters/pmcs/pmcs_iomb.h @@ -323,12 +323,18 @@ typedef enum { * VPD data layout */ +#define PMCS_EEPROM_INT_VERSION 1 /* supported version for Thebe INT */ +#define PMCS_EEPROM_EXT_VERSION 2 /* supported version for Thebe EXT */ #define PMCS_VPD_DATA_PAGE 2 /* VPD starts at offset 512 */ -#define PMCS_VPD_VERSION 2 /* Expected version number */ #define PMCS_VPD_RO_BYTE 0x90 /* Start of "read-only" data */ #define PMCS_VPD_START 0x82 /* VPD start byte */ #define PMCS_VPD_END 0x78 /* VPD end byte */ +#define PMCS_EEPROM_INT_SSID_BYTE1 0x02 /* Byte 1 of Thebe INT SSID */ +#define PMCS_EEPROM_INT_SSID_BYTE2 0x02 /* Byte 2 of Thebe INT SSID */ +#define PMCS_EEPROM_EXT_SSID_BYTE1 0x00 /* Byte 1 of Thebe EXT SSID */ +#define PMCS_EEPROM_EXT_SSID_BYTE2 0x22 /* Byte 2 of Thebe EXT SSID */ + /* * This structure defines the "header" for the VPD data. Everything * following this structure is self-defining. The consumer just needs |
