summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorSrikanth Suravajhala <srikanth.suravajhala@oracle.com>2010-06-25 17:30:31 -0400
committerSrikanth Suravajhala <srikanth.suravajhala@oracle.com>2010-06-25 17:30:31 -0400
commit688a63ed70eca66e1dc82c8f096cb66f8bd94013 (patch)
treea60d06d14e7d438c6b39fe32c7b26c4ad011c18c /usr/src
parent6e7514aea2b79ddf20753fec3d234c35b6495971 (diff)
downloadillumos-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.c25
-rw-r--r--usr/src/uts/common/sys/scsi/adapters/pmcs/pmcs_iomb.h8
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