<!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>