# HG changeset patch # User Boris Chiu # Date 1375219342 25200 # Node ID 1fedef581c165894a0a43e07fc65d44205d8cb4e # Parent ca9946e5736ca221bc0982b8635fe9ecdf3f90de 17199356 The ibv_devinfo command cannot print the board_id of CX-3 IB-HCA (userland) diff -r ca9946e5736c -r 1fedef581c16 components/open-fabrics/libibverbs/MELLANOX.h --- /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 */ diff -r ca9946e5736c -r 1fedef581c16 components/open-fabrics/libibverbs/Makefile --- 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 diff -r ca9946e5736c -r 1fedef581c16 components/open-fabrics/libibverbs/solaris_compatibility.c --- 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 #include "../include/infiniband/arch.h" #include "../include/infiniband/verbs.h" +#include "../include/infiniband/MELLANOX.h" #include #include #include +#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: