<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=US-ASCII">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2654.45">
<TITLE>[PATCH] dev_id + vstat </TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>Fab</FONT>
</P>

<P><FONT SIZE=2>attached is patch that fix the dev id report in query_ca . It appears that the low level driver did not distinguish between Arbel 25208 and Tavor 23108 devices, and handle the both devices as Tavor</FONT></P>

<P><FONT SIZE=2>This patch fix this.</FONT>
</P>

<P><FONT SIZE=2>I also made some clean up in the vstat tool ( remove unsupported fields and add other fields that were not reported)</FONT>
</P>

<P><FONT SIZE=2>pls review and apply</FONT>
</P>

<P><FONT SIZE=2>10x </FONT>
<BR><FONT SIZE=2>Yossi </FONT>
</P>

<P><FONT SIZE=2>Singed-off-by: Yossi Leybovich (sleybo@mellanox.co.il)</FONT>
</P>

<P><FONT SIZE=2>Index: hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdCard.h</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdCard.h  (revision 531)</FONT>
<BR><FONT SIZE=2>+++ hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdCard.h  (working copy)</FONT>
<BR><FONT SIZE=2>@@ -497,7 +497,7 @@</FONT>
<BR><FONT SIZE=2>                /* for TAVOR_SD */</FONT>
<BR><FONT SIZE=2>                { L"5A5A", "mt%d_pci%d", "mt%d_pci%d",  MD_DEV_ID_TAVOR_SD, MD_DEV_IX_TAVOR_SD, TRUE,   0x00100000, 0x01000000, 0x00000000, 167000000,  4, 0 },</FONT></P>

<P><FONT SIZE=2>                /* for TAVOR_SD */</FONT>
<BR><FONT SIZE=2>-               { L"6278", "InfiniHost%d", "InfiniHosA%d",      MD_DEV_ID_ARBEL_TM, MD_DEV_IX_ARBEL_TM, TRUE,   0x00100000, 0x01000000, 0x00000000, 167000000,  4, 0 },</FONT></P>

<P><FONT SIZE=2>+               { L"6278", "InfiniHostEx%d", "InfiniHosEx%d",   MD_DEV_ID_ARBEL_TM, MD_DEV_IX_ARBEL_TM, TRUE,   0x00100000, 0x01000000, 0x00000000, 167000000,  4, 0 },</FONT></P>

<P><FONT SIZE=2>        };</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> #else</FONT>
<BR><FONT SIZE=2>Index: hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdConf.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdConf.c  (revision 531)</FONT>
<BR><FONT SIZE=2>+++ hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdConf.c  (working copy)</FONT>
<BR><FONT SIZE=2>@@ -586,7 +586,8 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>        } /* fix HCA command register from SHRIMP */</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-       if (pi_pMdDevContext->m_eDevType == MD_DEV_IX_TAVOR     ) </FONT>
<BR><FONT SIZE=2>+       if (pi_pMdDevContext->m_eDevType == MD_DEV_IX_TAVOR </FONT>
<BR><FONT SIZE=2>+               || pi_pMdDevContext->m_eDevType ==MD_DEV_IX_ARBEL_TM) </FONT>
<BR><FONT SIZE=2>        { /* fix command register for TAVOR */</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>                l_pInterface = &pi_pMdDevContext->m_Interface;</FONT>
<BR><FONT SIZE=2>@@ -680,7 +681,8 @@</FONT>
<BR><FONT SIZE=2>                        return l_Status;</FONT>
<BR><FONT SIZE=2>                }       </FONT>
<BR><FONT SIZE=2>                else</FONT>
<BR><FONT SIZE=2>-               if (pi_pMdDevContext->m_eDevType == MD_DEV_IX_TAVOR) {</FONT>
<BR><FONT SIZE=2>+               if (pi_pMdDevContext->m_eDevType == MD_DEV_IX_TAVOR || </FONT>
<BR><FONT SIZE=2>+                       pi_pMdDevContext->m_eDevType == MD_DEV_IX_ARBEL_TM) {</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>                        /* protect */</FONT>
<BR><FONT SIZE=2>                        KSEM_ACQ(&pi_pMdDevContext->m_Sem);</FONT>
<BR><FONT SIZE=2>@@ -849,7 +851,8 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>        }</FONT>
<BR><FONT SIZE=2>        else</FONT>
<BR><FONT SIZE=2>-       if (pi_pMdDevContext->m_eDevType == MD_DEV_IX_TAVOR     ) {</FONT>
<BR><FONT SIZE=2>+       if (pi_pMdDevContext->m_eDevType == MD_DEV_IX_TAVOR ||</FONT>
<BR><FONT SIZE=2>+               pi_pMdDevContext->m_eDevType == MD_DEV_IX_ARBEL_TM) {</FONT>
<BR><FONT SIZE=2>        </FONT>
<BR><FONT SIZE=2>                /* </FONT>
<BR><FONT SIZE=2>                 * HCA device</FONT>
<BR><FONT SIZE=2>@@ -936,7 +939,8 @@</FONT>
<BR><FONT SIZE=2>                }</FONT>
<BR><FONT SIZE=2>        }</FONT>
<BR><FONT SIZE=2>        else</FONT>
<BR><FONT SIZE=2>-       if (pi_pMdDevContext->m_eDevType == MD_DEV_IX_TAVOR     ) {</FONT>
<BR><FONT SIZE=2>+       if (pi_pMdDevContext->m_eDevType == MD_DEV_IX_TAVOR ||</FONT>
<BR><FONT SIZE=2>+               pi_pMdDevContext->m_eDevType == MD_DEV_IX_ARBEL_TM) {</FONT>
<BR><FONT SIZE=2>        </FONT>
<BR><FONT SIZE=2>                /* </FONT>
<BR><FONT SIZE=2>                 * Bridge device</FONT>
<BR><FONT SIZE=2>@@ -987,7 +991,8 @@</FONT>
<BR><FONT SIZE=2>                        l_Status );</FONT>
<BR><FONT SIZE=2>        }</FONT>
<BR><FONT SIZE=2>        else </FONT>
<BR><FONT SIZE=2>-       if (pi_pMdDevContext->m_eDevType == MD_DEV_IX_TAVOR) { /* we are Tavor device */</FONT>
<BR><FONT SIZE=2>+       if (pi_pMdDevContext->m_eDevType == MD_DEV_IX_TAVOR ||</FONT>
<BR><FONT SIZE=2>+               pi_pMdDevContext->m_eDevType == MD_DEV_IX_ARBEL_TM) { /* we are Tavor device */</FONT>
<BR><FONT SIZE=2>                l_Status = PciDevReset(pi_pMdDevContext, l_ResetOffset, l_ResetValue );</FONT>
<BR><FONT SIZE=2>        }</FONT>
<BR><FONT SIZE=2>        else</FONT>
<BR><FONT SIZE=2>Index: hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdIoctl.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdIoctl.c (revision 531)</FONT>
<BR><FONT SIZE=2>+++ hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdIoctl.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -140,6 +140,7 @@</FONT>
<BR><FONT SIZE=2>                                </FONT>
<BR><FONT SIZE=2>                case MD_DEV_IX_TAVOR_SD:</FONT>
<BR><FONT SIZE=2>                case MD_DEV_IX_TAVOR:</FONT>
<BR><FONT SIZE=2>+               case MD_DEV_IX_ARBEL_TM:</FONT>
<BR><FONT SIZE=2>                        l_Status = PciIoctl( l_pMdDevContext, l_pPcs, l_nIoControlCode, l_pInBuffer, </FONT>
<BR><FONT SIZE=2>                                l_nInBufLength, l_pOutBuffer, l_nOutBufLength, (PULONG)&pi_pIrp->IoStatus.Information );</FONT></P>

<P><FONT SIZE=2>                        break;</FONT>
<BR><FONT SIZE=2>Index: hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdPnp.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdPnp.c   (revision 531)</FONT>
<BR><FONT SIZE=2>+++ hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdPnp.c   (working copy)</FONT>
<BR><FONT SIZE=2>@@ -939,7 +939,9 @@</FONT>
<BR><FONT SIZE=2>         * add device to TAVOR</FONT>
<BR><FONT SIZE=2>         */ </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-       if (l_pMdDevContext->m_eDevType == MD_DEV_IX_TAVOR      && g_pDrvContext->m_fSupportTavor)</FONT>
<BR><FONT SIZE=2>+       if ((l_pMdDevContext->m_eDevType == MD_DEV_IX_TAVOR     || </FONT>
<BR><FONT SIZE=2>+               l_pMdDevContext->m_eDevType == MD_DEV_IX_ARBEL_TM)</FONT>
<BR><FONT SIZE=2>+               && g_pDrvContext->m_fSupportTavor)</FONT>
<BR><FONT SIZE=2>        { /* add HCA to Tavor functional DLLs */</FONT>
<BR><FONT SIZE=2>        </FONT>
<BR><FONT SIZE=2>                unsigned char                           l_RevId = 0;</FONT>
<BR><FONT SIZE=2>@@ -1135,7 +1137,8 @@</FONT>
<BR><FONT SIZE=2>        // stop the card by sending some commands to it or suspend all new requests and wait for the end of in-progress ones</FONT></P>

<P><FONT SIZE=2>        //</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-       if (l_pMdDevContext->m_eDevType == MD_DEV_IX_TAVOR      && g_pDrvContext->m_fSupportTavor)</FONT>
<BR><FONT SIZE=2>+       if ((l_pMdDevContext->m_eDevType == MD_DEV_IX_TAVOR     ||</FONT>
<BR><FONT SIZE=2>+               l_pMdDevContext->m_eDevType == MD_DEV_IX_ARBEL_TM)&& g_pDrvContext->m_fSupportTavor)</FONT>
<BR><FONT SIZE=2>        { /* remove HCA from Tavor functional DLLs */</FONT>
<BR><FONT SIZE=2>        </FONT>
<BR><FONT SIZE=2>                HH_ret_t                                        l_HhRet;</FONT>
<BR><FONT SIZE=2>Index: hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdRdWr.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdRdWr.c  (revision 531)</FONT>
<BR><FONT SIZE=2>+++ hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdRdWr.c  (working copy)</FONT>
<BR><FONT SIZE=2>@@ -103,8 +103,9 @@</FONT>
<BR><FONT SIZE=2>                                break;</FONT>
<BR><FONT SIZE=2>                                </FONT>
<BR><FONT SIZE=2>                        case MD_DEV_IX_TAVOR:</FONT>
<BR><FONT SIZE=2>+                       case MD_DEV_IX_ARBEL_TM:</FONT>
<BR><FONT SIZE=2>                          // MDCTL</FONT>
<BR><FONT SIZE=2>-            PciRelease( l_pMdDevContext, l_pPcs );</FONT>
<BR><FONT SIZE=2>+                               PciRelease( l_pMdDevContext, l_pPcs );</FONT>
<BR><FONT SIZE=2>                                break;</FONT>
<BR><FONT SIZE=2>                                </FONT>
<BR><FONT SIZE=2>                        case MD_DEV_IX_TAVOR_BD:</FONT>
<BR><FONT SIZE=2>Index: hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdUtil.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdUtil.c  (revision 531)</FONT>
<BR><FONT SIZE=2>+++ hw/mt23108/vapi/mlxsys/os_dep/win/tdriver/MdUtil.c  (working copy)</FONT>
<BR><FONT SIZE=2>@@ -447,6 +447,7 @@</FONT>
<BR><FONT SIZE=2>                        break;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>                case MD_DEV_IX_TAVOR:</FONT>
<BR><FONT SIZE=2>+               case MD_DEV_IX_ARBEL_TM:</FONT>
<BR><FONT SIZE=2>                        GetRegistryDword( L"DdrMapOffset",      MD_DFLT_CONF_DATA, &l_pMdDevContext->m_ulDdrMapOffset );</FONT></P>

<P><FONT SIZE=2>                        GetRegistryDword( L"DdrMapSize",        MD_DFLT_CONF_DATA, &l_pMdDevContext->m_ulDdrMapSize );</FONT>
<BR><FONT SIZE=2>                        GetRegistryDword( L"ResetCard",         MD_DFLT_CONF_DATA, &l_pMdDevContext->m_PerformReset );</FONT>
<BR><FONT SIZE=2>@@ -1415,8 +1416,9 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>        /* create Control Device names */</FONT>
<BR><FONT SIZE=2>        /* !!! from now on work with ARBEL_TM as with TAVOR */</FONT>
<BR><FONT SIZE=2>-       l_pDevInfo = (pi_DevIx == (int)MD_DEV_IX_ARBEL_TM) ? &g_DevParams[MD_DEV_IX_TAVOR] : &g_DevParams[pi_DevIx];</FONT>
<BR><FONT SIZE=2>-       if (l_pDevInfo->m_DevId == MD_DEV_ID_TAVOR)</FONT>
<BR><FONT SIZE=2>+       //l_pDevInfo = (pi_DevIx == (int)MD_DEV_IX_ARBEL_TM) ? &g_DevParams[MD_DEV_IX_TAVOR] : &g_DevParams[pi_DevIx];</FONT>
<BR><FONT SIZE=2>+       l_pDevInfo =   &g_DevParams[pi_DevIx];</FONT>
<BR><FONT SIZE=2>+       if (l_pDevInfo->m_DevId == MD_DEV_ID_TAVOR || l_pDevInfo->m_DevId == MD_DEV_ID_ARBEL_TM)</FONT>
<BR><FONT SIZE=2>                sprintf( l_DevName, l_pDevInfo->m_Format, g_pDrvContext->m_uCardNo );</FONT>
<BR><FONT SIZE=2>        else</FONT>
<BR><FONT SIZE=2>                sprintf( l_DevName, l_pDevInfo->m_Format, l_pDevInfo->m_DevId, g_pDrvContext->m_uCardNo );</FONT>
<BR><FONT SIZE=2>Index: tools/vstat/user/vstat_main.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- tools/vstat/user/vstat_main.c       (revision 101)</FONT>
<BR><FONT SIZE=2>+++ tools/vstat/user/vstat_main.c       (working copy)</FONT>
<BR><FONT SIZE=2>@@ -139,10 +139,10 @@</FONT>
<BR><FONT SIZE=2>        if(fullPrint){</FONT>
<BR><FONT SIZE=2>                printf("\t\tmax_msg_sz=0x%x     (Max message size)\n", portPtr->max_msg_size);</FONT>
<BR><FONT SIZE=2>                printf("\t\tcapability_mask=TBD\n");</FONT>
<BR><FONT SIZE=2>-               printf("\t\tmax_vl_num=0x%x     (Maximum number of VL supported by this port)\n", portPtr->max_vls);</FONT>
<BR><FONT SIZE=2>+               printf("\t\tmax_vl_num=0x%x             (Maximum number of VL supported by this port)\n", portPtr->max_vls);</FONT></P>

<P><FONT SIZE=2>                printf("\t\tbad_pkey_counter=0x%x       (Bad PKey counter)\n", portPtr->pkey_ctr);</FONT>
<BR><FONT SIZE=2>                printf("\t\tqkey_viol_counter=0x%x      (QKey violation counter)\n", portPtr->qkey_ctr);</FONT>
<BR><FONT SIZE=2>-               printf("\t\tsm_sl=0x%x  (IB_SL to be used in communication with subnet manager)\n", portPtr->sm_sl);</FONT>
<BR><FONT SIZE=2>+               printf("\t\tsm_sl=0x%x          (IB_SL to be used in communication with subnet manager)\n", portPtr->sm_sl);</FONT></P>

<P><FONT SIZE=2>                printf("\t\tpkey_tbl_len=0x%x   (Current size of pkey table)\n", portPtr->num_pkeys);</FONT>
<BR><FONT SIZE=2>                printf("\t\tgid_tbl_len=0x%x    (Current size of GID table)\n", portPtr->num_gids);</FONT>
<BR><FONT SIZE=2>                printf("\t\tsubnet_timeout=0x%x (Subnet Timeout for this port (see PortInfo))\n", portPtr->subnet_timeout);</FONT></P>

<P><FONT SIZE=2>@@ -155,53 +155,51 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-void vstat_print_ca_attr(ib_ca_attr_t* ca_attr, BOOLEAN fullPrint){</FONT>
<BR><FONT SIZE=2>+void vstat_print_ca_attr(int idx,  ib_ca_attr_t* ca_attr, BOOLEAN fullPrint){</FONT>
<BR><FONT SIZE=2>        int i;</FONT>
<BR><FONT SIZE=2>        </FONT>
<BR><FONT SIZE=2>-       printf("\thca_id=%s\n", ca_attr->dev_id==0x5a44?"InfiniHost0":"TBD"); //TODO: all HCAs and hadle multi HCAs </FONT>
<BR><FONT SIZE=2>-       printf("\tpci_location={BUS=TBD,DEV/FUNC=TBD}\n");</FONT>
<BR><FONT SIZE=2>+       printf("\thca_idx=%d\n",idx);</FONT>
<BR><FONT SIZE=2>+       printf("\tpci_location={BUS=NA,DEV/FUNC=NA}\n");</FONT>
<BR><FONT SIZE=2>        printf("\tvendor_id=0x%04x\n", ca_attr->vend_id);</FONT>
<BR><FONT SIZE=2>        printf("\tvendor_part_id=0x%04x\n", ca_attr->dev_id);</FONT>
<BR><FONT SIZE=2>        printf("\thw_ver=0x%x\n", ca_attr->revision); //TODO: ???</FONT>
<BR><FONT SIZE=2>-       printf("\tfw_ver=TBD\n");</FONT>
<BR><FONT SIZE=2>-       printf("\tPSID=TBD\n");</FONT>
<BR><FONT SIZE=2>+       printf("\tfw_ver=NA\n");</FONT>
<BR><FONT SIZE=2>+       printf("\tPSID=NA\n");</FONT>
<BR><FONT SIZE=2>        if(fullPrint){</FONT>
<BR><FONT SIZE=2>-               printf("\tnum_phys_ports =      TBD\n");</FONT>
<BR><FONT SIZE=2>+               printf("\tnum_phys_ports = %d\n",ca_attr->num_ports);</FONT>
<BR><FONT SIZE=2>                printf("\tmax_num_qp = 0x%x             (Maximum Number of QPs supported)\n", ca_attr->max_qps);</FONT>
<BR><FONT SIZE=2>-               printf("\tmax_qp_ous_wr = 0x%x  (Maximum Number of oustanding WR on any WQ)\n", ca_attr->max_wrs);</FONT>
<BR><FONT SIZE=2>-               printf("\tflags== TBD\n");</FONT>
<BR><FONT SIZE=2>+               printf("\tmax_qp_ous_wr = 0x%x          (Maximum Number of oustanding WR on any WQ)\n", ca_attr->max_wrs);</FONT></P>

<P><FONT SIZE=2>                printf("\tmax_num_sg_ent = 0x%x         (Max num of scatter/gather entries for WQE other than RD)\n", ca_attr->max_sges);</FONT></P>

<P><FONT SIZE=2>-               printf("\tmax_num_sg_ent_rd =   0x%x    (Max num of scatter/gather entries for RD WQE)\n",  ca_attr->max_rd_sges);</FONT></P>

<P><FONT SIZE=2>-               printf("\tmax_num_srq = TBD             (Maximum Number of SRQs supported)\n");</FONT>
<BR><FONT SIZE=2>-               printf("\tmax_wqe_per_srq = TBD (Maximum Number of oustanding WR on any SRQ)\n");</FONT>
<BR><FONT SIZE=2>-               printf("\tmax_srq_sentries = TBD        (Maximum Number of scatter entries for SRQ WQE)\n");</FONT>
<BR><FONT SIZE=2>-               printf("\tsrq_resize_supported = TBD    (SRQ resize supported)\n");</FONT>
<BR><FONT SIZE=2>-               printf("\tmax_num_cq = 0x%x     (Max num of supported CQs)\n", ca_attr->max_cqs);</FONT>
<BR><FONT SIZE=2>+               printf("\tmax_num_sg_ent_rd = 0x%x              (Max num of scatter/gather entries for RD WQE)\n",  ca_attr->max_rd_sges);</FONT></P>

<P><FONT SIZE=2>+               printf("\tmax_num_srq = 0                       (Maximum Number of SRQs supported)\n");</FONT>
<BR><FONT SIZE=2>+               printf("\tmax_wqe_per_srq = 0           (Maximum Number of oustanding WR on any SRQ)\n");</FONT>
<BR><FONT SIZE=2>+               printf("\tmax_srq_sentries = 0          (Maximum Number of scatter entries for SRQ WQE)\n");</FONT>
<BR><FONT SIZE=2>+               printf("\tsrq_resize_supported = 0      (SRQ resize supported)\n");</FONT>
<BR><FONT SIZE=2>+               printf("\tmax_num_cq = 0x%x             (Max num of supported CQs)\n", ca_attr->max_cqs);</FONT>
<BR><FONT SIZE=2>                printf("\tmax_num_ent_cq = 0x%x (Max num of supported entries per CQ)\n", ca_attr->max_cqes);</FONT>
<BR><FONT SIZE=2>-               printf("\tmax_num_mr = 0x%x     (Maximum number of memory region supported)\n", ca_attr->init_regions);</FONT>
<BR><FONT SIZE=2>+               printf("\tmax_num_mr = 0x%x             (Maximum number of memory region supported)\n", ca_attr->init_regions);</FONT></P>

<P><FONT SIZE=2>                printf("\tmax_mr_size = 0x%x    (Largest contigous block of memory region in bytes)\n", ca_attr->init_region_size);</FONT></P>

<P><FONT SIZE=2>-               printf("\tmax_pd_num = 0x%x     (Maximum number of protection domains supported)\n", ca_attr->max_pds);</FONT>
<BR><FONT SIZE=2>-               printf("\tpage_size_cap = TBD   (Largest page size supported by this HCA)\n");</FONT>
<BR><FONT SIZE=2>-               printf("\tmax_pkeys = TBD               (Maximum number of partitions supported)\n");</FONT>
<BR><FONT SIZE=2>+               printf("\tmax_pd_num = 0x%x             (Maximum number of protection domains supported)\n", ca_attr->max_pds);</FONT></P>

<P><FONT SIZE=2>+               printf("\tpage_size_cap = 0x%x          (Largest page size supported by this HCA)\n",ca_attr->p_page_size[ca_attr->num_page_sizes-1]);</FONT></P>

<P><FONT SIZE=2>                printGUID(ca_attr->ca_guid);</FONT>
<BR><FONT SIZE=2>-               printf("\tlocal_ca_ack_delay = 0x%x     (Log2 4.096usec Max. RX to ACK or NAK delay)\n", ca_attr->local_ack_delay);</FONT></P>

<P><FONT SIZE=2>-               printf("\tmax_qp_ous_rd_atom = TBD      (Maximum number of oust. RDMA read/atomic as target)\n");</FONT>
<BR><FONT SIZE=2>-               printf("\tmax_ee_ous_rd_atom = TBD      (EE Maximum number of outs. RDMA read/atomic as target)\n");</FONT>
<BR><FONT SIZE=2>-               printf("\tmax_res_rd_atom = TBD (Max. Num. of resources used for RDMA read/atomic as target)\n");</FONT>
<BR><FONT SIZE=2>-               printf("\tmax_qp_init_rd_atom = TBD     (Max. Num. of outs. RDMA read/atomic as initiator)\n");</FONT>
<BR><FONT SIZE=2>-               printf("\tmax_ee_init_rd_atom = TBD     (EE Max. Num. of outs. RDMA read/atomic as initiator)\n");</FONT>
<BR><FONT SIZE=2>-               printf("\tatomic_cap = TBD              (Level of Atomicity supported)\n");</FONT>
<BR><FONT SIZE=2>+               printf("\tlocal_ca_ack_delay = 0x%x             (Log2 4.096usec Max. RX to ACK or NAK delay)\n", ca_attr->local_ack_delay);</FONT></P>

<P><FONT SIZE=2>+               printf("\tmax_qp_ous_rd_atom = 0x%x             (Maximum number of oust. RDMA read/atomic as target)\n",ca_attr->max_qp_resp_res);</FONT></P>

<P><FONT SIZE=2>+               printf("\tmax_ee_ous_rd_atom = 0                (EE Maximum number of outs. RDMA read/atomic as target)\n");</FONT></P>

<P><FONT SIZE=2>+               printf("\tmax_res_rd_atom = 0x%x                (Max. Num. of resources used for RDMA read/atomic as target)\n",ca_attr->max_resp_res);</FONT></P>

<P><FONT SIZE=2>+               printf("\tmax_qp_init_rd_atom = 0x%x    (Max. Num. of outs. RDMA read/atomic as initiator)\n",ca_attr->max_qp_init_depth);</FONT></P>

<P><FONT SIZE=2>+               printf("\tmax_ee_init_rd_atom = 0               (EE Max. Num. of outs. RDMA read/atomic as initiator)\n");</FONT></P>

<P><FONT SIZE=2>+               printf("\tatomic_cap = %s               (Level of Atomicity supported)\n",ca_attr->atomicity == IB_ATOMIC_GLOBAL?"GLOBAL":</FONT></P>

<P><FONT SIZE=2>+                                                                                                                                       ca_attr->atomicity == IB_ATOMIC_LOCAL?"LOCAL":"NORMAL");</FONT></P>

<P><FONT SIZE=2>                printf("\tmax_ee_num = 0x0              (Maximum number of EEC supported)\n");</FONT>
<BR><FONT SIZE=2>                printf("\tmax_rdd_num = 0x0             (Maximum number of IB_RDD supported)\n");</FONT>
<BR><FONT SIZE=2>-               printf("\tmax_mw_num = 0x%x     (Maximum Number of memory windows supported)\n", ca_attr->init_windows);</FONT></P>

<P><FONT SIZE=2>-               printf("\tmax_raw_ipv6_qp = 0x%x        (Maximum number of Raw IPV6 QPs supported)\n", ca_attr->max_ipv6_qps);</FONT></P>

<P><FONT SIZE=2>-               printf("\tmax_raw_ethy_qp = 0x%x        (Maximum number of Raw Ethertypes QPs supported)\n", ca_attr->max_ether_qps);</FONT></P>

<P><FONT SIZE=2>+               printf("\tmax_mw_num = 0x%x             (Maximum Number of memory windows supported)\n", ca_attr->init_windows);</FONT></P>

<P><FONT SIZE=2>+               printf("\tmax_raw_ipv6_qp = 0x%x                (Maximum number of Raw IPV6 QPs supported)\n", ca_attr->max_ipv6_qps);</FONT></P>

<P><FONT SIZE=2>+               printf("\tmax_raw_ethy_qp = 0x%x                (Maximum number of Raw Ethertypes QPs supported)\n", ca_attr->max_ether_qps);</FONT></P>

<P><FONT SIZE=2>                printf("\tmax_mcast_grp_num = 0x%x      (Maximum Number of multicast groups)\n", ca_attr->max_mcast_grps);</FONT></P>

<P><FONT SIZE=2>-               printf("\tmax_mcast_qp_attach_num = 0x%x(Maximum number of QP per multicast group)\n", ca_attr->max_qps_per_mcast_grp);</FONT></P>

<P><FONT SIZE=2>-               printf("\tmax_total_mcast_qp_attach_num = 0x%x(Maximum number of QPs which can be attached to a mcast grp)\n", ca_attr->max_mcast_qps);</FONT></P>

<P><FONT SIZE=2>-               printf("\tmax_ah_num = 0x%x     (Maximum number of address handles)\n", ca_attr->max_addr_handles);</FONT>
<BR><FONT SIZE=2>-               printf("\tmax_num_fmr = TBD             (maximum number FMRs)\n");</FONT>
<BR><FONT SIZE=2>-               printf("\tmax_num_map_per_fmr = TBD     (Maximum number of (re)maps per FMR before an unmap operation in required)\n");</FONT></P>

<P><FONT SIZE=2>+               printf("\tmax_mcast_qp_attach_num = 0x%x        (Maximum number of QP per multicast group)\n", ca_attr->max_qps_per_mcast_grp);</FONT></P>

<P><FONT SIZE=2>+               printf("\tmax_ah_num = 0x%x             (Maximum number of address handles)\n", ca_attr->max_addr_handles);</FONT></P>

<P><FONT SIZE=2>+               printf("\tmax_num_fmr = 0                       (Maximum number FMRs)\n");</FONT>
<BR><FONT SIZE=2>+               printf("\tmax_num_map_per_fmr = 0               (Maximum number of (re)maps per FMR before an unmap operation in required)\n");</FONT></P>

<P><FONT SIZE=2>        }else{</FONT>
<BR><FONT SIZE=2>                printf("\tnum_phys_ports=%d\n",         ca_attr->num_ports);</FONT>
<BR><FONT SIZE=2>        }</FONT>
<BR><FONT SIZE=2>@@ -225,7 +223,7 @@</FONT>
<BR><FONT SIZE=2>        size_t                  guid_count;</FONT>
<BR><FONT SIZE=2>        ib_net64_t              *ca_guid_array;</FONT>
<BR><FONT SIZE=2>        ib_ca_attr_t            *vstat_ca_attr;</FONT>
<BR><FONT SIZE=2>-       uintn_t                         i;</FONT>
<BR><FONT SIZE=2>+       size_t                  i;</FONT>
<BR><FONT SIZE=2>        ib_ca_handle_t  h_ca = NULL;</FONT>
<BR><FONT SIZE=2>        uint32_t                        bsize;</FONT>
<BR><FONT SIZE=2>        ib_port_attr_mod_t port_attr_mod;</FONT>
<BR><FONT SIZE=2>@@ -338,7 +336,7 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>                        /* Print_ca_attributes */</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-                       vstat_print_ca_attr(vstat_ca_attr, fullPrint);</FONT>
<BR><FONT SIZE=2>+                       vstat_print_ca_attr((int)i,vstat_ca_attr, fullPrint);</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>                        /* Free the memory */</FONT>
</P>
<BR>

<P><FONT FACE="Arial" SIZE=2 COLOR="#000000"></FONT><FONT FACE="Arial" SIZE=2 COLOR="#000000"></FONT> 

</BODY>
</HTML>