17199356 The ibv_devinfo command cannot print the board_id of CX-3 IB-HCA (userland)
authorBoris Chiu <Boris.Chiu@Oracle.COM>
Tue, 30 Jul 2013 14:22:22 -0700
changeset 1411 1fedef581c16
parent 1410 ca9946e5736c
child 1412 5f95f7556600
17199356 The ibv_devinfo command cannot print the board_id of CX-3 IB-HCA (userland)
components/open-fabrics/libibverbs/MELLANOX.h
components/open-fabrics/libibverbs/Makefile
components/open-fabrics/libibverbs/solaris_compatibility.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/open-fabrics/libibverbs/MELLANOX.h	Tue Jul 30 14:22:22 2013 -0700
@@ -0,0 +1,306 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
+ */
+
+#ifndef _HDRS_MELLANOX_H
+#define	_HDRS_MELLANOX_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * MELLANOX.h
+ *
+ * This file contain common information related to Mellanox technologies
+ * HCA cards.
+ */
+#define	SUNW_OUI		0x0003baULL
+#define	MLX_OUI			0x0002c9ULL
+#define	MLX_DEFAULT_NODE_GUID	0x2c9000100d050ULL
+#define	MLX_DEFAULT_P1_GUID	0x2c9000100d051ULL
+#define	MLX_DEFAULT_P2_GUID	0x2c9000100d052ULL
+#define	MLX_DEFAULT_SYSIMG_GUID	0x2c9000100d053ULL
+
+/* How many bits to shift and leave just the OUI */
+#define	OUISHIFT		40
+
+#define	MLX_VPR_VIDLEN		9	/* "MELLANOX" + '\0' */
+#define	MLX_VPR_REVLEN		21	/* "%04x.%04x.%04x: %04x" + '\0' */
+
+#define	FWFLASH_IB_MAGIC_NUMBER		0xF00B0021
+
+/* Numerically largest OUI that's presently assigned */
+#define	TAVOR_MAX_OUI			0xacde48
+
+#define	FWFLASH_IB_STATE_NONE		0x00
+#define	FWFLASH_IB_STATE_IMAGE_PRI	0x01
+#define	FWFLASH_IB_STATE_IMAGE_SEC	0x02
+#define	FWFLASH_IB_STATE_MMAP		0x04
+#define	FWFLASH_IB_STATE_GUIDN		0x10
+#define	FWFLASH_IB_STATE_GUID1		0x20
+#define	FWFLASH_IB_STATE_GUID2		0x40
+#define	FWFLASH_IB_STATE_GUIDS		0x80
+#define	FWFLASH_ETH_STATE_MACS		0x100
+
+#define	FWFLASH_IB_STATE_IMAGE		FWFLASH_IB_STATE_IMAGE_PRI
+
+#define	FWFLASH_IB_STATE_PFI_IMAGE	FWFLASH_IB_STATE_IMAGE_PRI
+#define	FWFLASH_IB_STATE_SFI_IMAGE	FWFLASH_IB_STATE_IMAGE_SEC
+
+/*
+ * Structure to hold the part number, PSID, and string ID
+ * for an HCA card.
+ */
+typedef struct mlx_mdr_s {
+	char *mlx_pn;
+	char *mlx_psid;
+	char *mlx_id;
+} mlx_mdr_t;
+
+/*
+ * Magic decoder ring for matching HCA hardware/firmware.
+ * Part Number / PSID / String ID
+ */
+mlx_mdr_t mlx_mdr[] = {
+	/* Part No		PSID			Card ID */
+	{ "MHEA28-XS",		"MT_0250000001",	"Lion mini" },
+	{ "MHEA28-XSC",		"MT_0390110001",	"Lion mini" },
+	{ "MHEA28-XT",		"MT_0150000001",	"Lion mini" },
+	{ "MHEA28-XTC",		"MT_0370110001",	"Lion mini" },
+	{ "MHGA28-XT",		"MT_0150000002",	"Lion mini" },
+	{ "MHGA28-XTC",		"MT_0370110002",	"Lion mini" },
+	{ "MHGA28-XTC",		"MT_0370130002",	"Lion mini" },
+	{ "MHGA28-XS",		"MT_0250000002",	"Lion mini" },
+	{ "MHGA28-XSC",		"MT_0390110002",	"Lion mini" },
+	{ "MHGA28-XSC",		"MT_0390130002",	"Lion mini" },
+	{ "MHEL-CF128",		"MT_0190000001",	"Lion cub" },
+	{ "MHEL-CF128-T",	"MT_00A0000001",	"Lion cub" },
+	{ "MTLP25208-CF128T",	"MT_00A0000001",	"Lion cub" },
+	{ "MHEL-CF128-TC",	"MT_00A0010001",	"Lion cub" },
+	{ "MHEL-CF128-TC",	"MT_0140010001",	"Lion cub" },
+	{ "MHEL-CF128-SC",	"MT_0190010001",	"Lion cub" },
+	{ "MHEA28-1TC",		"MT_02F0110001",	"Lion cub" },
+	{ "MHEA28-1SC",		"MT_0330110001",	"Lion cub" },
+	{ "MHGA28-1T",		"MT_0200000001",	"Lion cub" },
+	{ "MHGA28-1TC",		"MT_02F0110002",	"Lion cub" },
+	{ "MHGA28-1SC",		"MT_0330110002",	"Lion cub" },
+	{ "MHGA28-1S",		"MT_0430000001",	"Lion cub" },
+	{ "MHEL-CF256-T",	"MT_00B0000001",	"Lion cub" },
+	{ "MTLP25208-CF256T",	"MT_00B0000001",	"Lion cub" },
+	{ "MHEL-CF256-TC",	"MT_00B0010001",	"Lion cub" },
+	{ "MHEA28-2TC",		"MT_0300110001",	"Lion cub" },
+	{ "MHEA28-2SC",		"MT_0340110001",	"Lion cub" },
+	{ "MHGA28-2T",		"MT_0210000001",	"Lion cub" },
+	{ "MHGA28-2TC",		"MT_0300110002",	"Lion cub" },
+	{ "MHGA28-2SC",		"MT_0340110002",	"Lion cub" },
+	{ "MHEL-CF512-T",	"MT_00C0000001",	"Lion cub" },
+	{ "MTLP25208-CF512T",	"MT_00C0000001",	"Lion cub" },
+	{ "MHGA28-5T",		"MT_0220000001",	"Lion cub" },
+	{ "375-3382-01",	"SUN0030000001",	"Sun Lion cub DDR" },
+	{ "MHES14-XSC",		"MT_0410110001",	"Tiger" },
+	{ "MHES14-XT",		"MT_01F0000001",	"Tiger" },
+	{ "MHES14-XTC",		"MT_03F0110001",	"Tiger" },
+	{ "MHES18-XS",		"MT_0260000001",	"Cheetah" },
+	{ "MHES18-XS",		"MT_0260010001",	"Cheetah" },
+	{ "MHES18-XSC",		"MT_03D0110001",	"Cheetah" },
+	{ "MHES18-XSC",		"MT_03D0120001",	"Cheetah" },
+	{ "MHES18-XSC",		"MT_03D0130001",	"Cheetah" },
+	{ "MHES18-XT",		"MT_0230000002",	"Cheetah" },
+	{ "MHES18-XT",		"MT_0230010002",	"Cheetah" },
+	{ "MHES18-XTC",		"MT_03B0110001",	"Cheetah" },
+	{ "MHES18-XTC",		"MT_03B0120001",	"Cheetah" },
+	{ "MHES18-XTC",		"MT_03B0140001",	"Cheetah" },
+	{ "MHGS18-XS",		"MT_0260000002",	"Cheetah" },
+	{ "MHGS18-XSC",		"MT_03D0110002",	"Cheetah" },
+	{ "MHGS18-XSC",		"MT_03D0120002",	"Cheetah" },
+	{ "MHGS18-XSC",		"MT_03D0130002",	"Cheetah" },
+	{ "MHGS18-XT",		"MT_0230000001",	"Cheetah" },
+	{ "MHGS18-XTC",		"MT_03B0110002",	"Cheetah" },
+	{ "MHGS18-XTC",		"MT_03B0120002",	"Cheetah" },
+	{ "MHGS18-XTC",		"MT_03B0140002",	"Cheetah" },
+	{ "MHXL-CF128",		"MT_0180000001",	"Cougar Cub 128" },
+	{ "MHXL-CF128-T",	"MT_0030000001",	"Cougar Cub 128" },
+	{ "MTLP23108-CF128T",	"MT_0030000001",	"Cougar Cub 128" },
+	{ "MHET2X-1SC",		"MT_0280110001",	"Cougar Cub 128" },
+	{ "MHET2X-1SC",		"MT_0280120001",	"Cougar Cub 128" },
+	{ "MHET2X-1TC",		"MT_0270110001",	"Cougar Cub 128" },
+	{ "MHET2X-1TC",		"MT_0270120001",	"Cougar Cub 128" },
+	{ "MHXL-CF256-T",	"MT_0040000001",	"Cougar Cub 256" },
+	{ "MHET2X-2SC",		"MT_02D0110001",	"Cougar Cub 256" },
+	{ "MHET2X-2SC",		"MT_02D0120001",	"Cougar Cub 256" },
+	{ "MHET2X-2TC",		"MT_02B0110001",	"Cougar Cub 256" },
+	{ "MHET2X-2TC",		"MT_02B0120001",	"Cougar Cub 256" },
+	{ "375-3481-01",	"SUN0040000001",	"Sun Cougar Cub SDR" },
+	{ "375-3418-01",	"SUN0040000001",	"Sun Cougar Cub SDR" },
+	{ "375-3259-01",	"SUN0010000001",	"Sun Cougar Cub 256" },
+	{ "375-3259-03",	"SUN0010000001",	"Sun Cougar Cub 256" },
+	{ "375-3260-03",	"SUN0020000001",	"Sun Cougar Cub 256" },
+	{ "MHX-CE128-T",	"MT_0000000001",	"Cougar 128" },
+	{ "MTPB23108-CE128",	"MT_0000000001",	"Cougar 128" },
+	{ "MHX-CE256-T",	"MT_0010000001",	"Cougar 256" },
+	{ "MTPB23108-CE256",	"MT_0010000001",	"Cougar 256" },
+	{ "MHX-CE512-T",	"MT_0050000001",	"Cougar 512" },
+	{ "MTPB23108-CE512",	"MT_0050000001",	"Cougar 512" },
+	{ "MHEH28-XSC",		"MT_04C0110001",	"Eagle SDR" },
+	{ "MHEH28-XSC",		"MT_04C0130005",	"Eagle SDR" },
+	{ "MHEH28-XTC",		"MT_04A0110001",	"Eagle SDR" },
+	{ "MHEH28-XTC",		"MT_04A0130005",	"Eagle SDR" },
+	{ "MHGH28-XSC",		"MT_04C0110002",	"Eagle DDR" },
+	{ "MHGH28-XSC",		"MT_04C0120002",	"Eagle DDR" },
+	{ "MHGH28-XSC",		"MT_04C0140005",	"Eagle DDR" },
+	{ "MHGH28-XTC",		"MT_04A0110002",	"Eagle DDR" },
+	{ "MHGH28-XTC",		"MT_04A0120002",	"Eagle DDR" },
+	{ "MHGH28-XTC",		"MT_04A0140005",	"Eagle DDR" },
+	{ "X1289A-Z",		"SUN0010010001",	"Sun IB NEM DDR" },
+	{ "375-3548-01",	"SUN0060000001", "Sun IB EM DDR X4216A-Z" },
+	{ "375-3549-01",	"SUN0070000001",	"Sun PCIe DDR X4217A" },
+	{ "375-3549-01",	"SUN0070130001",	"Sun Eagle DDR" },
+	{ "375-3481-01",	"SUN0050000001",	"Sun PCIe EM SDR" },
+	{ "375-3439-01",	"SUN0051000001",	"Sun PUMA" },
+	{ "MHGH29-XSC",		"MT_0A60110002", "Eagle DDR PCIe Gen 2.0" },
+	{ "MHGH29-XSC",		"MT_0A60120005", "Eagle DDR PCIe Gen 2.0" },
+	{ "MHGH29-XTC",		"MT_0A50110002", "Eagle DDR PCIe Gen 2.0" },
+	{ "MHGH29-XTC",		"MT_0A50120005", "Eagle DDR PCIe Gen 2.0" },
+	{ "375-3605-01",	"SUN0160000001",	"Sun QMirage " },
+	{ "375-3605-01",	"SUN0160000002",	"Sun QMirage " },
+	{ "375-3697-01",	"SUN0160000002",	"Sun QMirage " },
+	{ "375-3606-01",	"SUN0150000001",	"Sun Falcon QDR" },
+	{ "375-3606-02",	"SUN0150000009",	"Sun Falcon QDR" },
+	{ "375-3606-03",	"SUN0150000009",	"Sun Falcon QDR" },
+	{ "375-3606-02",	"SUN0170000009",	"Sun Falcon QDR" },
+	{ "375-3696-01",	"SUN0170000009",	"Sun Falcon QDR" },
+	{ "MHJH29-XTC",		"MT_04E0110003",	"Eagle QDR" },
+	{ "MHJH29-XSC",		"MT_0500120005", "Eagle QDR PCIe Gen 2.0" },
+	{ "MHQH29-XTC",		"MT_04E0120005", "Eagle QDR PCIe Gen 2.0" },
+	{ "MHQH19-XTC",		"MT_0C40110009", "Falcon QDR PCIe Gen 2.0" },
+	{ "MHQH29-XTC",		"MT_0BB0110003", "Falcon QDR PCIe Gen 2.0" },
+	{ "MHQH29-XTC",		"MT_0BB0120003", "Falcon QDR PCIe Gen 2.0" },
+	{ "375-3551-05",	"SUN0080000001",	"Sun C48-IB-NEM" },
+	{ "MHEH28B-XSR", "MT_0D10110001", "CX-2 2-Port HCA SDR PCIe Gen 1.0" },
+	{ "MHEH28B-XTR", "MT_0D20110001", "CX-2 2-Port HCA SDR PCIe Gen 1.0" },
+	{ "MHGH28B-XSR", "MT_0D10110002", "CX-2 2-Port HCA DDR PCIe Gen 1.0" },
+	{ "MHGH28B-XTR", "MT_0D20110002", "CX-2 2-Port HCA DDR PCIe Gen 1.0" },
+	{ "MHGH18B-XTR", "MT_0D30110002", "CX-2 1-Port HCA DDR PCIe Gen 1.0" },
+	{ "MNEH28B-XSR", "MT_0D40110004", "CX-2 2-Port NIC PCIe Gen 1.0" },
+	{ "MNEH28B-XTR", "MT_0D50110004", "CX-2 2-Port NIC PCIe Gen 1.0" },
+	{ "MNEH29B-XSR", "MT_0D40110010", "CX-2 2-Port NIC PCIe Gen 2.0" },
+	{ "MNEH29B-XTR", "MT_0D50110010", "CX-2 2-Port NIC PCIe Gen 2.0" },
+	{ "MHGH29B-XSR", "MT_0D10110008", "CX-2 2-Port HCA DDR PCIe Gen 2.0" },
+	{ "MHGH29B-XTR", "MT_0D20110008", "CX-2 2-Port HCA DDR PCIe Gen 2.0" },
+	{ "MHJH29B-XSR", "MT_0D10110009", "CX-2 2-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHJH29B-XSR", "MT_0D10120009", "CX-2 2-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHJH29B-XTR", "MT_0D20110009", "CX-2 2-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHJH29B-XTR", "MT_0D20120009", "CX-2 2-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHGH19B-XSR", "MT_0D60110008", "CX-2 1-Port HCA DDR PCIe Gen 2.0" },
+	{ "MHGH19B-XTR", "MT_0D30110008", "CX-2 1-Port HCA DDR PCIe Gen 2.0" },
+	{ "MHJH19B-XTR", "MT_0D30110009", "CX-2 1-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHQH29B-XSR", "MT_0D70110009", "CX-2 2-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHQH29B-XTR", "MT_0D80110009", "CX-2 2-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHQH29B-XTR", "MT_0D80120009", "CX-2 2-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHQH29B-XTR", "MT_0D80130009", "CX-2 2-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHQH29B-XTR", "MT_0E30110009", "CX-2 2-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHQH29C-XTR", "MT_0FC0110009", "CX-2 2-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHRH29B-XSR", "MT_0D70110008", "CX-2 2-Port HCA DDR PCIe Gen 2.0" },
+	{ "MHRH29B-XTR", "MT_0D80110008", "CX-2 2-Port HCA DDR PCIe Gen 2.0" },
+	{ "MHQH19B-XTR", "MT_0D90110009", "CX-2 1-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHRH19B-XSR", "MT_0E40110009", "CX-2 1-Port HCA DDR PCIe Gen 2.0" },
+	{ "MHRH19B-XTR", "MT_0D90110008", "CX-2 1-Port HCA DDR PCIe Gen 2.0" },
+	{ "MNPH28C-XSR", "MT_0DA0110004", "CX-2 2-Port NIC SFP+ PCIe Gen 1.0" },
+	{ "MNPH28C-XTR", "MT_0DB0110004", "CX-2 2-Port NIC SFP+ PCIe Gen 1.0" },
+	{ "MNPH29C-XSR", "MT_0DA0110010", "CX-2 2-Port NIC SFP+ PCIe Gen 2.0" },
+	{ "MNPH29C-XTR", "MT_0DB0110010", "CX-2 2-Port NIC SFP+ PCIe Gen 2.0" },
+	{ "MNPH29C-XTR", "MT_0DB0120010", "CX-2 2-Port NIC SFP+ PCIe Gen 2.0" },
+	{ "MNPH29C-XTR", "MT_0DB0130010", "CX-2 2-Port NIC SFP+ PCIe Gen 2.0" },
+	{ "MNZH29-XSR",	 "MT_0DC0110009", "CX-2 2-Port NIC PCIe Gen 2.0" },
+	{ "MNZH29-XTR",	 "MT_0DD0110009", "CX-2 2-Port NIC PCIe Gen 2.0" },
+	{ "MNZH29-XTR",	 "MT_0DD0120009", "CX-2 2-Port NIC PCIe Gen 2.0" },
+	{ "MHQH19B-XNR", "MT_0DF0110009", "CX-2 1-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHQH19B-XNR", "MT_0DF0120009", "CX-2 1-Port HCA QDR PCIe Gen 2.0" },
+	{ "MNQH19-XTR",	 "MT_0D80110017", "CX-2 1-Port NIC PCIe Gen 2.0" },
+	{ "MNQH19C-XTR", "MT_0E20110017", "CX-2 1-Port NIC PCIe Gen 2.0" },
+	{ "MHZH29B-XSR", "MT_0E80110009", "CX-2 2-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHZH29B-XTR", "MT_0E90110009", "CX-2 2-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHZH29B-XTR", "MT_0E90110009", "CX-2 2-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHQA19-XTR",	"MT_0EA0110009", "IH-III 1-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHRA19-XTR", "MT_0EB0110008", "IH-III 1-Port HCA DDR PCIe Gen 2.0" },
+	{ "MHQH29C-XTR", "MT_0EF0110009", "CX-2 2-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHQH29C-XSR", "MT_0F00110009", "CX-2 2-Port HCA QDR PCIe Gen 2.0" },
+	{ "MHRH29C-XTR", "MT_0F10110008", "CX-2 2-Port HCA DDR PCIe Gen 2.0" },
+	{ "MHRH29C-XSR", "MT_0F20110008", "CX-2 2-Port HCA DDR PCIe Gen 2.0" },
+	{ "MHPH29D-XTR", "MT_0F30110010", "CX-2 2-Port HCA SFP+ PCIe Gen 2.0" },
+	{ "MHPH29D-XSR", "MT_0F40110010", "CX-2 2-Port HCA SFP+ PCIe Gen 2.0" },
+	{ "MNPA19-XTR",	 "MT_0F60110010", "IH-III 1-Port NIC PCIe Gen 2.0" },
+	{ "MNPA19-XSR",	 "MT_0F70110010", "ID-III 1-Port NIC PCIe Gen 2.0" },
+
+	/* CX-3 cards */
+	{ "7046442", "ORC1090120019",
+				"ORACLE DUAL PORT QDR INFINIBAND ADAPTER M3" },
+	{ "MCX353A-FCA", "MT_1060110019", "CX-3 1-Port VPI FDR PCIe Gen 3.0" },
+	{ "MCX353A-FCA", "MT_1060120019", "CX-3 1-Port VPI FDR PCIe Gen 3.0" },
+	{ "MCX353A-FCB", "MT_1100110019", "CX-3 1-Port VPI FDR PCIe Gen 3.0" },
+	{ "MCX353A-FCB", "MT_1100120019", "CX-3 1-Port VPI FDR PCIe Gen 3.0" },
+	{ "MCX353A-QCA", "MT_1120110018", "CX-3 1-Port VPI QDR PCIe Gen 3.0" },
+	{ "MCX353A-QCA", "MT_1120120018", "CX-3 1-Port VPI QDR PCIe Gen 3.0" },
+	{ "MCX353A-QCB", "MT_1060110018", "CX-3 1-Port VPI QDR PCIe Gen 3.0" },
+	{ "MCX353A-TCA", "MT_1060110028", "CX-3 1-Port VPI PCIe Gen 3.0" },
+	{ "MCX353A-TCA", "MT_1060120028", "CX-3 1-Port VPI PCIe Gen 3.0" },
+	{ "MCX353A-TCB", "MT_1100110028", "CX-3 1-Port VPI PCIe Gen 3.0" },
+	{ "MCX354A-FCA", "MT_1020110019", "CX-3 2-Port VPI FDR PCIe Gen 3.0" },
+	{ "MCX354A-FCA", "MT_1020120019", "CX-3 2-Port VPI FDR PCIe Gen 3.0" },
+	{ "MCX354A-FCB", "MT_1090110019", "CX-3 2-Port VPI FDR PCIe Gen 3.0" },
+	{ "MCX354A-FCB", "MT_1090120019", "CX-3 2-Port VPI FDR PCIe Gen 3.0" },
+	{ "MCX354A-QCA", "MT_1020110018", "CX-3 2-Port VPI QDR PCIe Gen 3.0" },
+	{ "MCX354A-QCA", "MT_1020120018", "CX-3 2-Port VPI QDR PCIe Gen 3.0" },
+	{ "MCX354A-QCB", "MT_1090110018", "CX-3 2-Port VPI QDR PCIe Gen 3.0" },
+	{ "MCX354A-TCA", "MT_1020110028", "CX-3 2-Port VPI PCIe Gen 3.0" },
+	{ "MCX354A-TCA", "MT_1020120028", "CX-3 2-Port VPI PCIe Gen 3.0" },
+	{ "MCX354A-TCB", "MT_1090110028", "CX-3 2-Port VPI PCIe Gen 3.0" },
+
+	/* Ethernet cards */
+	{ "MNEH28B-XTR", "MT_0D50110004", "CX-2 2-Port NIC PCIe Gen 2.0" },
+	{ "MNEH29B-XSR", "MT_0D40110010", "CX-2 2-Port NIC PCIe Gen 2.0" },
+	{ "MNEH29B-XTR", "MT_0D50110010", "CX-2 2-Port NIC PCIe Gen 2.0" },
+	{ "MNPH28C-XSR", "MT_0DA0110004", "CX-2 2-Port NIC PCIe Gen 1.0" },
+	{ "MNPH28C-XTR", "MT_0DB0110004", "CX-2 2-Port NIC PCIe Gen 1.0" },
+	{ "MNPH29C-XSR", "MT_0DA0110010", "CX-2 2-Port NIC PCIe Gen 2.0" },
+	{ "MNPH29C-XTR", "MT_0DB0110010", "CX-2 2-Port NIC PCIe Gen 2.0" },
+	{ "X6275 M2 10GbE",	"X6275M2_10G",
+				    "Sun Blade X6275 M2 10GbE server module" }
+};
+
+/* Get mlx_mdr[] array size */
+#define	MLX_SZ_MLX_MDR		sizeof (mlx_mdr)
+#define	MLX_SZ_MLX_MDR_STRUCT	sizeof (mlx_mdr[0])
+
+#define	MLX_MAX_ID		MLX_SZ_MLX_MDR/MLX_SZ_MLX_MDR_STRUCT
+#define	MLX_PSID_SZ		16
+#define	MLX_STR_ID_SZ		64
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _HDRS_MELLANOX_H */
--- a/components/open-fabrics/libibverbs/Makefile	Tue Jul 30 10:21:11 2013 -0400
+++ b/components/open-fabrics/libibverbs/Makefile	Tue Jul 30 14:22:22 2013 -0700
@@ -53,6 +53,7 @@
 
 COMPONENT_PREP_ACTION = \
 	cp ofa_solaris.h $(@D)/include/infiniband ; \
+	cp MELLANOX.h $(@D)/include/infiniband ; \
 	cp solaris_compatibility.c $(@D)/src ; \
 	cd ../libmlx4; gmake prep; \
 	cd ../librdmacm; gmake prep
--- a/components/open-fabrics/libibverbs/solaris_compatibility.c	Tue Jul 30 10:21:11 2013 -0400
+++ b/components/open-fabrics/libibverbs/solaris_compatibility.c	Tue Jul 30 14:22:22 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -55,46 +55,40 @@
 #include <alloca.h>
 #include "../include/infiniband/arch.h"
 #include "../include/infiniband/verbs.h"
+#include "../include/infiniband/MELLANOX.h"
 #include <errno.h>
 #include <pthread.h>
 #include <kstat.h>
 
+#define	min(a, b)	((a) < (b) ? (a) : (b))
+
 
 /*
- * The followings will be removed when changes in sol_uverbs_ioctl.h
+ * The followings will be removed when changes in hermon_ioctl.h
  * are delivered through ON.
  */
+#ifndef	HERMON_GET_HWINFO_IOCTL_SUP
+#define	HERMON_IOCTL_GET_HWINFO	(('t' << 8) | 0x32)
+#pragma	pack(1)
 
-#if	(IB_USER_MAD_SOLARIS_ABI_VERSION == 1)
-#undef	IB_USER_MAD_SOLARIS_ABI_VERSION
-#define	IB_USER_MAD_SOLARIS_ABI_VERSION	2
+/* Structure used for getting HW info */
+typedef struct hermon_hw_info_ioctl_s {
+	uint32_t	af_hw_info_version;
+	uint32_t	af_padding1;	/* Padding for af_hwpn to be on */
+					/* 64 byte boundary */
+	char		af_hwpn[64];
+	uint16_t	af_pn_len;
+	uint64_t	af_padding2:48;	/* Padding for af_psid to be on */
+					/* 64 byte boundary */
+	char		af_psid[16];
+	uint16_t	af_psid_len;
+	uint32_t	af_padding3;	/* Padding for reserved to be on */
+					/* 64 byte boundary */
+	uint8_t		reserved[64];
+} hermon_hw_info_ioctl_t;
+#pragma	pack()
 #endif
 
-#if	(IB_USER_VERBS_SOLARIS_ABI_VERSION == 1)
-#undef	IB_USER_VERBS_SOLARIS_ABI_VERSION
-#define	IB_USER_VERBS_SOLARIS_ABI_VERSION	2
-#define	IB_USER_VERBS_V2_IN_V1
-typedef struct sol_uverbs_hca_info_v2_s {
-	char		uverbs_hca_psid_string[MAXNAMELEN];
-	char		uverbs_hca_ibdev_name[MAXNAMELEN];
-	char		uverbs_hca_driver_name[MAXNAMELEN];
-	uint32_t	uverbs_hca_driver_instance;
-	uint32_t	uverbs_hca_vendorid;
-	uint16_t	uverbs_hca_deviceid;
-	uint16_t	uverbs_hca_devidx;
-	uint8_t		uverbs_hca_pad1[4];
-} sol_uverbs_hca_info_v2_t;
-
-typedef struct sol_uverbs_info_v2_s {
-	int32_t			uverbs_abi_version;
-	int32_t			uverbs_solaris_abi_version;
-	int16_t			uverbs_hca_cnt;
-	int8_t			uverbs_pad1[6];    /* Padding for alignment */
-	sol_uverbs_hca_info_v2_t	uverbs_hca_info[];
-} sol_uverbs_info_v2_t;
-#endif
-
-/* end of sol_uverbs_ioctl.h contents */
 
 /*
  * duplicate ABI definitions for HCAs as the HCA abi headers are not
@@ -170,6 +164,7 @@
 	char		ibd_fw_ver[16];
 	char		ibd_name[8];
 	int		ibd_boardid_index;
+	uint_t		ibd_device_id;
 } ibdev_cache_info_t;
 
 /* hermon - hence 2 */
@@ -195,209 +190,6 @@
 static umad_cache_info_t	umad_dev_cache[MAX_HCAS * MAX_HCA_PORTS];
 static int			umad_abi_version = -1;
 
-/*
- * Structure to hold the part number  & PSID for an HCA card
- * This is a sub-set of the file :
- * /ws/onnv-clone/usr/src/cmd/fwflash/plugins/hdrs/MELLANOX.h
- */
-typedef struct mlx_mdr_s {
-	char *mlx_pn;
-	char *mlx_psid;
-} mlx_mdr_t;
-
-/*
- * Magic decoder ring for matching HCA hardware/firmware.
- * Part Number / PSID / String ID
- */
-mlx_mdr_t mlx_mdr[] = {
-	/* For failure case, use unknown as "board-id" */
-	{ "unknown",		"unknown"	},
-
-	/* Part No		PSID		*/
-	{ "375-3605-01",	"SUN0160000001" },
-	{ "375-3382-01",	"SUN0030000001" },
-	{ "375-3481-01",	"SUN0040000001" },
-	{ "375-3418-01",	"SUN0040000001" },
-	{ "375-3259-01",	"SUN0010000001" },
-	{ "375-3259-03",	"SUN0010000001" },
-	{ "X1289A-Z",		"SUN0010010001" },
-	{ "375-3548-01",	"SUN0060000001" },
-	{ "375-3549-01",	"SUN0070000001" },
-	{ "375-3549-01",	"SUN0070130001" },
-	{ "375-3481-01",	"SUN0050000001" },
-	{ "375-3439-01",	"SUN0051000001" },
-	{ "375-3260-03",	"SUN0020000001" },
-	{ "375-3605-01",	"SUN0160000002" },
-	{ "375-3697-01",	"SUN0160000002" },
-	{ "375-3606-01",	"SUN0150000001" },
-	{ "375-3606-02",	"SUN0150000009" },
-	{ "375-3606-03",	"SUN0150000009" },
-	{ "375-3606-02",	"SUN0170000009" },
-	{ "375-3696-01",	"SUN0170000009" },
-	{ "375-3551-05",	"SUN0080000001" },
-	{ "MHEA28-XS",		"MT_0250000001" },
-	{ "MHEA28-XSC",		"MT_0390110001" },
-	{ "MHEA28-XT",		"MT_0150000001" },
-	{ "MHEA28-XTC",		"MT_0370110001" },
-	{ "MHGA28-XT",		"MT_0150000002" },
-	{ "MHGA28-XTC",		"MT_0370110002" },
-	{ "MHGA28-XTC",		"MT_0370130002" },
-	{ "MHGA28-XS",		"MT_0250000002" },
-	{ "MHGA28-XSC",		"MT_0390110002" },
-	{ "MHGA28-XSC",		"MT_0390130002" },
-	{ "MHEL-CF128",		"MT_0190000001" },
-	{ "MHEL-CF128-T",	"MT_00A0000001" },
-	{ "MTLP25208-CF128T",	"MT_00A0000001" },
-	{ "MHEL-CF128-TC",	"MT_00A0010001" },
-	{ "MHEL-CF128-TC",	"MT_0140010001" },
-	{ "MHEL-CF128-SC",	"MT_0190010001" },
-	{ "MHEA28-1TC",		"MT_02F0110001" },
-	{ "MHEA28-1SC",		"MT_0330110001" },
-	{ "MHGA28-1T",		"MT_0200000001" },
-	{ "MHGA28-1TC",		"MT_02F0110002" },
-	{ "MHGA28-1SC",		"MT_0330110002" },
-	{ "MHGA28-1S",		"MT_0430000001" },
-	{ "MHEL-CF256-T",	"MT_00B0000001" },
-	{ "MTLP25208-CF256T",	"MT_00B0000001" },
-	{ "MHEL-CF256-TC",	"MT_00B0010001" },
-	{ "MHEA28-2TC",		"MT_0300110001" },
-	{ "MHEA28-2SC",		"MT_0340110001" },
-	{ "MHGA28-2T",		"MT_0210000001" },
-	{ "MHGA28-2TC",		"MT_0300110002" },
-	{ "MHGA28-2SC",		"MT_0340110002" },
-	{ "MHEL-CF512-T",	"MT_00C0000001" },
-	{ "MTLP25208-CF512T",	"MT_00C0000001" },
-	{ "MHGA28-5T",		"MT_0220000001" },
-	{ "MHES14-XSC",		"MT_0410110001" },
-	{ "MHES14-XT",		"MT_01F0000001" },
-	{ "MHES14-XTC",		"MT_03F0110001" },
-	{ "MHES18-XS",		"MT_0260000001" },
-	{ "MHES18-XS",		"MT_0260010001" },
-	{ "MHES18-XSC",		"MT_03D0110001" },
-	{ "MHES18-XSC",		"MT_03D0120001" },
-	{ "MHES18-XSC",		"MT_03D0130001" },
-	{ "MHES18-XT",		"MT_0230000002" },
-	{ "MHES18-XT",		"MT_0230010002" },
-	{ "MHES18-XTC",		"MT_03B0110001" },
-	{ "MHES18-XTC",		"MT_03B0120001" },
-	{ "MHES18-XTC",		"MT_03B0140001" },
-	{ "MHGS18-XS",		"MT_0260000002" },
-	{ "MHGS18-XSC",		"MT_03D0110002" },
-	{ "MHGS18-XSC",		"MT_03D0120002" },
-	{ "MHGS18-XSC",		"MT_03D0130002" },
-	{ "MHGS18-XT",		"MT_0230000001" },
-	{ "MHGS18-XTC",		"MT_03B0110002" },
-	{ "MHGS18-XTC",		"MT_03B0120002" },
-	{ "MHGS18-XTC",		"MT_03B0140002" },
-	{ "MHXL-CF128",		"MT_0180000001" },
-	{ "MHXL-CF128-T",	"MT_0030000001" },
-	{ "MTLP23108-CF128T",	"MT_0030000001" },
-	{ "MHET2X-1SC",		"MT_0280110001" },
-	{ "MHET2X-1SC",		"MT_0280120001" },
-	{ "MHET2X-1TC",		"MT_0270110001" },
-	{ "MHET2X-1TC",		"MT_0270120001" },
-	{ "MHXL-CF256-T",	"MT_0040000001" },
-	{ "MHET2X-2SC",		"MT_02D0110001" },
-	{ "MHET2X-2SC",		"MT_02D0120001" },
-	{ "MHET2X-2TC",		"MT_02B0110001" },
-	{ "MHET2X-2TC",		"MT_02B0120001" },
-	{ "MHX-CE128-T",	"MT_0000000001" },
-	{ "MTPB23108-CE128",	"MT_0000000001" },
-	{ "MHX-CE256-T",	"MT_0010000001" },
-	{ "MTPB23108-CE256",	"MT_0010000001" },
-	{ "MHX-CE512-T",	"MT_0050000001" },
-	{ "MTPB23108-CE512",	"MT_0050000001" },
-	{ "MHEH28-XSC",		"MT_04C0110001" },
-	{ "MHEH28-XSC",		"MT_04C0130005" },
-	{ "MHEH28-XTC",		"MT_04A0110001" },
-	{ "MHEH28-XTC",		"MT_04A0130005" },
-	{ "MHGH28-XSC",		"MT_04C0110002" },
-	{ "MHGH28-XSC",		"MT_04C0120002" },
-	{ "MHGH28-XSC",		"MT_04C0140005" },
-	{ "MHGH28-XTC",		"MT_04A0110002" },
-	{ "MHGH28-XTC",		"MT_04A0120002" },
-	{ "MHGH28-XTC",		"MT_04A0140005" },
-	{ "MHGH29-XSC",		"MT_0A60110002" },
-	{ "MHGH29-XSC",		"MT_0A60120005" },
-	{ "MHGH29-XTC",		"MT_0A50110002" },
-	{ "MHGH29-XTC",		"MT_0A50120005" },
-	{ "MHJH29-XTC",		"MT_04E0110003" },
-	{ "MHJH29-XSC",		"MT_0500120005" },
-	{ "MHQH29-XTC",		"MT_04E0120005" },
-	{ "MHQH19-XTC",		"MT_0C40110009" },
-	{ "MHQH29-XTC",		"MT_0BB0110003" },
-	{ "MHQH29-XTC",		"MT_0BB0120003" },
-	{ "MHEH28B-XSR",	"MT_0D10110001" },
-	{ "MHEH28B-XTR",	"MT_0D20110001" },
-	{ "MHGH28B-XSR",	"MT_0D10110002" },
-	{ "MHGH28B-XTR",	"MT_0D20110002" },
-	{ "MHGH18B-XTR",	"MT_0D30110002" },
-	{ "MNEH28B-XSR",	"MT_0D40110004" },
-	{ "MNEH28B-XTR",	"MT_0D50110004" },
-	{ "MNEH29B-XSR",	"MT_0D40110010" },
-	{ "MNEH29B-XTR",	"MT_0D50110010" },
-	{ "MHGH29B-XSR",	"MT_0D10110008" },
-	{ "MHGH29B-XTR",	"MT_0D20110008" },
-	{ "MHJH29B-XSR",	"MT_0D10110009" },
-	{ "MHJH29B-XSR",	"MT_0D10120009" },
-	{ "MHJH29B-XTR",	"MT_0D20110009" },
-	{ "MHJH29B-XTR",	"MT_0D20120009" },
-	{ "MHGH19B-XSR",	"MT_0D60110008" },
-	{ "MHGH19B-XTR",	"MT_0D30110008" },
-	{ "MHJH19B-XTR",	"MT_0D30110009" },
-	{ "MHQH29B-XSR",	"MT_0D70110009" },
-	{ "MHQH29B-XTR",	"MT_0D80110009" },
-	{ "MHQH29B-XTR",	"MT_0D80120009" },
-	{ "MHQH29B-XTR",	"MT_0D80130009" },
-	{ "MHQH29B-XTR",	"MT_0E30110009" },
-	{ "MHRH29B-XSR",	"MT_0D70110008" },
-	{ "MHRH29B-XTR",	"MT_0D80110008" },
-	{ "MHQH19B-XTR",	"MT_0D90110009" },
-	{ "MHRH19B-XSR",	"MT_0E40110009" },
-	{ "MHRH19B-XTR",	"MT_0D90110008" },
-	{ "MNPH28C-XSR",	"MT_0DA0110004" },
-	{ "MNPH28C-XTR",	"MT_0DB0110004" },
-	{ "MNPH29C-XSR",	"MT_0DA0110010" },
-	{ "MNPH29C-XTR",	"MT_0DB0110010" },
-	{ "MNPH29C-XTR",	"MT_0DB0120010" },
-	{ "MNPH29C-XTR",	"MT_0DB0130010" },
-	{ "MNZH29-XSR",		"MT_0DC0110009" },
-	{ "MNZH29-XTR",		"MT_0DD0110009" },
-	{ "MNZH29-XTR",		"MT_0DD0120009" },
-	{ "MHQH19B-XNR",	"MT_0DF0110009" },
-	{ "MHQH19B-XNR",	"MT_0DF0120009" },
-	{ "MNQH19-XTR",		"MT_0D80110017" },
-	{ "MNQH19C-XTR",	"MT_0E20110017" },
-	{ "MHZH29B-XSR",	"MT_0E80110009" },
-	{ "MHZH29B-XTR",	"MT_0E90110009" },
-	{ "MHZH29B-XTR",	"MT_0E90110009" },
-	{ "MHQA19-XTR",		"MT_0EA0110009" },
-	{ "MHRA19-XTR",		"MT_0EB0110008" },
-	{ "MHQH29C-XTR",	"MT_0EF0110009" },
-	{ "MHQH29C-XSR",	"MT_0F00110009" },
-	{ "MHRH29C-XTR",	"MT_0F10110008" },
-	{ "MHRH29C-XSR",	"MT_0F20110008" },
-	{ "MHPH29D-XTR",	"MT_0F30110010" },
-	{ "MHPH29D-XSR",	"MT_0F40110010" },
-	{ "MNPA19-XTR",		"MT_0F60110010" },
-	{ "MNPA19-XSR",		"MT_0F70110010" },
-
-	/* Ethernet cards */
-	{ "MNEH28B-XTR",	"MT_0D50110004" },
-	{ "MNEH29B-XSR",	"MT_0D40110010" },
-	{ "MNEH29B-XTR",	"MT_0D50110010" },
-	{ "MNPH28C-XSR",	"MT_0DA0110004" },
-	{ "MNPH28C-XTR",	"MT_0DB0110004" },
-	{ "MNPH29C-XSR",	"MT_0DA0110010" },
-	{ "MNPH29C-XTR",	"MT_0DB0110010" },
-	{ "X6275 M2 10GbE",	"X6275M2_10G"   }
-};
-
-/* Get mlx_mdr[] array size */
-#define	MLX_SZ_MLX_MDR		sizeof (mlx_mdr)
-#define	MLX_SZ_MLX_MDR_STRUCT	sizeof (mlx_mdr[0])
-#define	MLX_MAX_ID		(MLX_SZ_MLX_MDR / MLX_SZ_MLX_MDR_STRUCT)
-
 pthread_once_t		oneTimeInit = PTHREAD_ONCE_INIT;
 static int 		umad_cache_cnt = 0;
 static int 		ibdev_cache_cnt = 0;
@@ -540,6 +332,7 @@
 
 		(void) strcpy(info.ibd_fw_ver, device_attr.fw_ver);
 		info.ibd_hw_rev = device_attr.hw_ver;
+		info.ibd_device_id = device_attr.vendor_part_id;
 
 		ibdev = ibv_get_device_name(*dev_list);
 		if (strncmp(ibdev, "mlx4_", 5) == 0) {
@@ -1356,6 +1149,33 @@
 	return (len);
 }
 
+/*
+ * This function passes the HW PSID / HWPN string obtained from
+ * driver HERMON_IOCTL_GET_HWINFO IOCTL. The memory for "hca_hwpsid"
+ * & "hca_hwpn" argument has to be passed by the caller and has to
+ * be at least 16 bytes & 64 bytes in size.
+ */
+static int
+get_hca_psid_pn(char *ibd_name, int fd, char *hca_hwpsid,
+    char *hca_hwpn)
+{
+	hermon_hw_info_ioctl_t		hermon_hw_info;
+	int				rc;
+
+	if (strncmp(ibd_name, "mlx4_", 5) == 0) {
+		if ((rc = ioctl(fd, HERMON_IOCTL_GET_HWINFO,
+		    &hermon_hw_info)) != 0)
+			return (rc);
+
+		strncpy(hca_hwpsid, hermon_hw_info.af_psid, 16);
+		strncpy(hca_hwpn, hermon_hw_info.af_hwpn, 64);
+	} else {
+		fprintf(stderr, "libibverbs: sol_uverbs unsupported "
+		    "device: %s\n", ibd_name);
+		return (1);
+	}
+	return (0);
+}
 
 /*
  * This function passes the HW Part number string obtained from driver
@@ -1384,11 +1204,12 @@
 static void
 init_boardid_index(ibdev_cache_info_t *ibd_info)
 {
-	int	i;
-	int	fd;
-	char	hca_hwpn[64];
-	char	*hwpnp;
-
+	int		i;
+	int		fd;
+	char		hca_hwpsid[16];
+	char		hca_hwpn[64];
+	char		*pn_psidp;
+	boolean_t	psid_valid, pn_valid;
 
 	if (pthread_mutex_lock(&uverbs_cache_mutex) != 0) {
 		fprintf(stderr, "failed: to acquire "
@@ -1429,23 +1250,54 @@
 		goto boardid_err;
 	}
 
-	if (get_hca_hwpn_str(ibd_info->ibd_name, fd, hca_hwpn)) {
-		close(fd);
-		goto boardid_err;
+	psid_valid = pn_valid = B_FALSE;
+	if (get_hca_psid_pn(ibd_info->ibd_name, fd,
+	    hca_hwpsid, hca_hwpn)) {
+		if (get_hca_hwpn_str(ibd_info->ibd_name, fd, hca_hwpn)) {
+			close(fd);
+			goto boardid_err;
+		} else {
+			if (hca_hwpn[0]) {
+				if ((pn_psidp = strchr(
+				    hca_hwpn, ' ')) != NULL)
+					*pn_psidp = '\0';
+				pn_valid = B_TRUE;
+			}
+		}
+	} else {
+		if (hca_hwpsid[0]) {
+			if ((pn_psidp = strchr(
+			    hca_hwpsid, ' ')) != NULL)
+				*pn_psidp = '\0';
+			psid_valid = B_TRUE;
+		} else if (hca_hwpn[0]) {
+			if ((pn_psidp = strchr(
+			    hca_hwpn, ' ')) != NULL)
+				*pn_psidp = '\0';
+			pn_valid = B_TRUE;
+		}
 	}
 	close(fd);
-	if ((hwpnp = strchr(hca_hwpn, ' ')) != NULL)
-		*hwpnp = '\0';
+
+	if (pn_valid == B_FALSE && psid_valid == B_FALSE)
+		goto boardid_err;
 
-	/*
-	 * Find part number, set the boardid_index,
-	 * Skip index 0, as it is for failure "unknown"
-	 * case.
-	 */
-	for (i = 1; i < MLX_MAX_ID; i++) {
-		if (strcmp((const char *)hca_hwpn,
-		    mlx_mdr[i].mlx_pn) == 0) {
-
+	for (i = 0; i < MLX_MAX_ID; i++) {
+		/*
+		 * Find PSID number, set the boardid_index,
+		 * Skip index 0, as it is for failure "unknown"
+		 * case
+		 */
+		if ((psid_valid == B_TRUE &&
+		    strncmp(mlx_mdr[i].mlx_psid,
+		    (const char *)hca_hwpsid,
+		    min(strlen(hca_hwpsid),
+		    strlen(mlx_mdr[i].mlx_psid))) == 0) ||
+		    (pn_valid == B_TRUE &&
+		    strncmp(mlx_mdr[i].mlx_pn,
+		    (const char *)hca_hwpn,
+		    min(strlen(hca_hwpn),
+		    strlen(mlx_mdr[i].mlx_pn))) == 0)) {
 			/* Set boardid_index */
 			ibd_info->ibd_boardid_index = i;
 			return;
@@ -1454,7 +1306,7 @@
 
 boardid_err:
 	/* Failure case, default to "unknown" */
-	ibd_info->ibd_boardid_index = 0;
+	ibd_info->ibd_boardid_index = -2;
 }
 
 static int
@@ -1494,15 +1346,21 @@
 			len = 1 + sprintf(buf, "%d", info->ibd_hw_rev);
 		} else if (strcmp(path, "hca_type") == 0) {
 			if (!(strncmp(info->ibd_name, "mlx4", 4)))
-				len = 1 + sprintf(buf, "%d", 0);
+				len = 1 + sprintf(buf, "MT%d",
+				    info->ibd_device_id);
 			else
 				len = 1 + sprintf(buf, "unavailable");
 		} else if (strcmp(path, "board_id") == 0) {
 			if (info->ibd_boardid_index == -1)
 				init_boardid_index(info);
 
-			len = 1 + sprintf(buf, "%s",
-			    mlx_mdr[info->ibd_boardid_index].mlx_psid);
+			if (info->ibd_boardid_index >= 0) {
+				len = 1 + sprintf(buf, "%s",
+				    mlx_mdr[info->ibd_boardid_index].mlx_psid);
+			} else {
+				len = 1 + sprintf(buf, "%s",
+				    "unknown");
+			}
 		}
 	}
 exit: