]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
add files for ibat
authortzachid <tzachid@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Tue, 7 Mar 2006 15:55:40 +0000 (15:55 +0000)
committertzachid <tzachid@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Tue, 7 Mar 2006 15:55:40 +0000 (15:55 +0000)
sync with trunk
qp_num,port was added to ib_wc

git-svn-id: svn://openib.tc.cornell.edu/gen1@231 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

branches/MTHCA/core/al/kernel/al_cm_cep.c
branches/MTHCA/core/bus/kernel/bus_port_mgr.c
branches/MTHCA/inc/iba/ib_types.h
branches/MTHCA/ulp/ipoib/kernel/ipoib_ibat.c [new file with mode: 0644]
branches/MTHCA/ulp/ipoib/kernel/ipoib_ibat.h [new file with mode: 0644]
branches/MTHCA/ulp/ipoib/kernel/ipoib_log.mc [new file with mode: 0644]

index c563969e3a1d9a1aca2c8c083e241d2482a8a6dd..1667b4f78a8b857a8298dbc19acb9cc8eeff2877 100644 (file)
@@ -4012,7 +4012,7 @@ pdata_cmp:
                 * If an existing listen doesn't have a compare buffer,\r
                 * then we found a duplicate.\r
                 */\r
-               if( !p_listen->p_cmp_buf )\r
+               if( !p_listen->p_cmp_buf || !p_listen_info->p_cmp_buf )\r
                        break;\r
 \r
                if( p_listen_info->p_cmp_buf )\r
index 14a3729af0c31265cbd1f18a32cac484e47f12fc..9e276e0d996053c8c17afd7e17ca9ffa8e3874ea 100644 (file)
@@ -1187,6 +1187,7 @@ port_query_ipoib_ifc(
 \r
        p_ipoib_data->ca_guid = p_ext->pdo.h_ca->obj.p_ci_ca->verbs.guid;\r
        p_ipoib_data->port_guid = p_ext->port_guid;\r
+       p_ipoib_data->port_num = (uint8_t)p_ext->n_port;\r
 \r
        BUS_EXIT( BUS_DBG_PNP );\r
        return STATUS_SUCCESS;\r
index c5e1bec0f032cde3c35027b8b5049543ba1c63c7..6a4119c412db39a820df1970fb8755bb3c7fe116 100644 (file)
@@ -9001,10 +9001,12 @@ typedef struct _ib_wc
        uint64_t                                wr_id;\r
        ib_wc_type_t                    wc_type;\r
 \r
-       uint32_t                                length;\r
+       uint32_t                        length;\r
        ib_wc_status_t                  status;\r
-       uint64_t                                vendor_specific;\r
-\r
+       uint64_t                        vendor_specific;\r
+       // 2 fields for low level driver\r
+       uint32_t                        qp_num;\r
+       uint8_t                         port_num;\r
        union _wc_recv\r
        {\r
                struct _wc_conn\r
diff --git a/branches/MTHCA/ulp/ipoib/kernel/ipoib_ibat.c b/branches/MTHCA/ulp/ipoib/kernel/ipoib_ibat.c
new file mode 100644 (file)
index 0000000..30220dc
--- /dev/null
@@ -0,0 +1,472 @@
+/*\r
+ * Copyright (c) 2005 Mellanox Technologies.  All rights reserved.\r
+ * Copyright (c) 2005 SilverStorm Technologies.  All rights reserved.\r
+ *\r
+ * This software is available to you under the OpenIB.org BSD license\r
+ * below:\r
+ *\r
+ *     Redistribution and use in source and binary forms, with or\r
+ *     without modification, are permitted provided that the following\r
+ *     conditions are met:\r
+ *\r
+ *      - Redistributions of source code must retain the above\r
+ *        copyright notice, this list of conditions and the following\r
+ *        disclaimer.\r
+ *\r
+ *      - Redistributions in binary form must reproduce the above\r
+ *        copyright notice, this list of conditions and the following\r
+ *        disclaimer in the documentation and/or other materials\r
+ *        provided with the distribution.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
+ * SOFTWARE.\r
+ *\r
+ * $Id: ipoib_ibat.c 202 2005-12-09 19:59:19Z ftillier $\r
+ */\r
+\r
+\r
+#include "ipoib_driver.h"\r
+#include "ipoib_adapter.h"\r
+#include "ipoib_port.h"\r
+#include "ipoib_debug.h"\r
+#include <iba/ib_at_ioctl.h>\r
+\r
+\r
+static NTSTATUS\r
+__ipoib_create(\r
+       IN                              DEVICE_OBJECT* const            pDevObj,\r
+       IN                              IRP* const                                      pIrp );\r
+\r
+static NTSTATUS\r
+__ipoib_cleanup(\r
+       IN                              DEVICE_OBJECT* const            pDevObj,\r
+       IN                              IRP* const                                      pIrp );\r
+\r
+static NTSTATUS\r
+__ipoib_close(\r
+       IN                              DEVICE_OBJECT* const            pDevObj,\r
+       IN                              IRP* const                                      pIrp );\r
+\r
+static NTSTATUS\r
+__ipoib_dispatch(\r
+       IN                              DEVICE_OBJECT* const            pDevObj,\r
+       IN                              IRP* const                                      pIrp );\r
+\r
+\r
+static NTSTATUS\r
+__ibat_get_ports(\r
+       IN                              IRP                                                     *pIrp,\r
+       IN                              IO_STACK_LOCATION                       *pIoStack )\r
+{\r
+       IOCTL_IBAT_PORTS_IN             *pIn;\r
+       IOCTL_IBAT_PORTS_OUT    *pOut;\r
+       KLOCK_QUEUE_HANDLE              hdl;\r
+       cl_list_item_t                  *pItem;\r
+       ipoib_adapter_t                 *pAdapter;\r
+       LONG                                    nPorts;\r
+\r
+       IPOIB_ENTER(IPOIB_DBG_IOCTL);\r
+\r
+       if( pIoStack->Parameters.DeviceIoControl.InputBufferLength !=\r
+               sizeof(IOCTL_IBAT_PORTS_IN) )\r
+       {\r
+               IPOIB_TRACE_EXIT( IPOIB_DBG_ERROR, ("Invalid input buffer size.\n") );\r
+               return STATUS_INVALID_PARAMETER;\r
+       }\r
+       \r
+       if( pIoStack->Parameters.DeviceIoControl.OutputBufferLength <\r
+               sizeof(IOCTL_IBAT_PORTS_OUT) )\r
+       {\r
+               IPOIB_TRACE_EXIT( IPOIB_DBG_ERROR, ("Invalid output buffer size.\n") );\r
+               return STATUS_INVALID_PARAMETER;\r
+       }\r
+\r
+       pIn = pIrp->AssociatedIrp.SystemBuffer;\r
+       pOut = pIrp->AssociatedIrp.SystemBuffer;\r
+\r
+       if( pIn->Version != IBAT_IOCTL_VERSION )\r
+       {\r
+               IPOIB_TRACE_EXIT( IPOIB_DBG_ERROR, ("Invalid version.\n") );\r
+               return STATUS_INVALID_PARAMETER;\r
+       }\r
+\r
+       KeAcquireInStackQueuedSpinLock( &g_ipoib.lock, &hdl );\r
+       nPorts = (LONG)cl_qlist_count( &g_ipoib.adapter_list );\r
+       switch( nPorts )\r
+       {\r
+       case 0:\r
+               cl_memclr( pOut->Ports, sizeof(pOut->Ports) );\r
+               /* Fall through */\r
+       case 1:\r
+               pOut->Size = sizeof(IOCTL_IBAT_PORTS_OUT);\r
+               break;\r
+\r
+       default:\r
+               pOut->Size = sizeof(IOCTL_IBAT_PORTS_OUT) + \r
+                       (sizeof(IBAT_PORT_RECORD) * (nPorts - 1));\r
+               break;\r
+       }\r
+\r
+       pIrp->IoStatus.Information = pOut->Size;\r
+\r
+       if( pOut->Size > pIoStack->Parameters.DeviceIoControl.OutputBufferLength )\r
+       {\r
+               nPorts = 1 +\r
+                       (pIoStack->Parameters.DeviceIoControl.OutputBufferLength -\r
+                       sizeof(IOCTL_IBAT_PORTS_OUT)) / sizeof(IBAT_PORT_RECORD);\r
+\r
+               pIrp->IoStatus.Information = sizeof(IOCTL_IBAT_PORTS_OUT) +\r
+                       ((nPorts - 1) * sizeof(IBAT_PORT_RECORD));\r
+       }\r
+\r
+       pOut->NumPorts = 0;\r
+       pItem = cl_qlist_head( &g_ipoib.adapter_list );\r
+       while( pOut->NumPorts != nPorts )\r
+       {\r
+               pAdapter = CONTAINING_RECORD( pItem, ipoib_adapter_t, entry );\r
+               pOut->Ports[pOut->NumPorts].CaGuid = pAdapter->guids.ca_guid;\r
+               pOut->Ports[pOut->NumPorts].PortGuid = pAdapter->guids.port_guid;\r
+               pOut->NumPorts++;\r
+\r
+               pItem = cl_qlist_next( pItem );\r
+       }\r
+\r
+       KeReleaseInStackQueuedSpinLock( &hdl );\r
+       return STATUS_SUCCESS;\r
+}\r
+\r
+\r
+static NTSTATUS\r
+__ibat_get_ips(\r
+       IN                              IRP                                                     *pIrp,\r
+       IN                              IO_STACK_LOCATION                       *pIoStack )\r
+{\r
+       IOCTL_IBAT_IP_ADDRESSES_IN      *pIn;\r
+       IOCTL_IBAT_IP_ADDRESSES_OUT     *pOut;\r
+       KLOCK_QUEUE_HANDLE                      hdl;\r
+       cl_list_item_t                          *pItem;\r
+       ipoib_adapter_t                         *pAdapter;\r
+       LONG                                            nIps, maxIps;\r
+       size_t                                          idx;\r
+       net_address_item_t                      *pAddr;\r
+       UINT64                                          PortGuid;\r
+\r
+       IPOIB_ENTER(IPOIB_DBG_IOCTL);\r
+\r
+       if( pIoStack->Parameters.DeviceIoControl.InputBufferLength !=\r
+               sizeof(IOCTL_IBAT_IP_ADDRESSES_IN) )\r
+       {\r
+               IPOIB_TRACE_EXIT( IPOIB_DBG_ERROR, ("Invalid input buffer size.\n") );\r
+               return STATUS_INVALID_PARAMETER;\r
+       }\r
+       \r
+       if( pIoStack->Parameters.DeviceIoControl.OutputBufferLength <\r
+               sizeof(IOCTL_IBAT_IP_ADDRESSES_OUT) )\r
+       {\r
+               IPOIB_TRACE_EXIT( IPOIB_DBG_ERROR, ("Invalid output buffer size.\n") );\r
+               return STATUS_INVALID_PARAMETER;\r
+       }\r
+\r
+       pIn = pIrp->AssociatedIrp.SystemBuffer;\r
+       pOut = pIrp->AssociatedIrp.SystemBuffer;\r
+\r
+       if( pIn->Version != IBAT_IOCTL_VERSION )\r
+       {\r
+               IPOIB_TRACE_EXIT( IPOIB_DBG_ERROR, ("Invalid version.\n") );\r
+               return STATUS_INVALID_PARAMETER;\r
+       }\r
+\r
+       PortGuid = pIn->PortGuid;\r
+\r
+       nIps = 0;\r
+       pOut->AddressCount = 0;\r
+       maxIps = 1 +\r
+               ((pIoStack->Parameters.DeviceIoControl.OutputBufferLength -\r
+               sizeof(IOCTL_IBAT_IP_ADDRESSES_OUT)) / sizeof(IP_ADDRESS));\r
+\r
+       KeAcquireInStackQueuedSpinLock( &g_ipoib.lock, &hdl );\r
+       for( pItem = cl_qlist_head( &g_ipoib.adapter_list );\r
+               pItem != cl_qlist_end( &g_ipoib.adapter_list );\r
+               pItem = cl_qlist_next( pItem ) )\r
+       {\r
+               pAdapter = CONTAINING_RECORD( pItem, ipoib_adapter_t, entry );\r
+               if( PortGuid && pAdapter->guids.port_guid != PortGuid )\r
+                       continue;\r
+\r
+               cl_obj_lock( &pAdapter->obj );\r
+               nIps += (LONG)cl_vector_get_size( &pAdapter->ip_vector );\r
+\r
+               for( idx = 0;\r
+                       idx < cl_vector_get_size( &pAdapter->ip_vector );\r
+                       idx++ )\r
+               {\r
+                       if( pOut->AddressCount == maxIps )\r
+                               break;\r
+\r
+                       pAddr = (net_address_item_t*)\r
+                               cl_vector_get_ptr( &pAdapter->ip_vector, idx );\r
+\r
+                       pOut->Address[pOut->AddressCount].IpVersion = 4;\r
+                       cl_memclr( &pOut->Address[pOut->AddressCount].Address,\r
+                               sizeof(IP_ADDRESS) );\r
+                       cl_memcpy( &pOut->Address[pOut->AddressCount].Address[12],\r
+                               pAddr->address.as_bytes, IPV4_ADDR_SIZE );\r
+\r
+                       pOut->AddressCount++;\r
+               }\r
+               cl_obj_unlock( &pAdapter->obj );\r
+       }\r
+\r
+       pOut->Size = sizeof(IOCTL_IBAT_IP_ADDRESSES_OUT);\r
+       if( --nIps )\r
+               pOut->Size += sizeof(IP_ADDRESS) * nIps;\r
+\r
+       pIrp->IoStatus.Information = sizeof(IOCTL_IBAT_IP_ADDRESSES_OUT);\r
+       if( --maxIps < nIps )\r
+               pIrp->IoStatus.Information += (sizeof(IP_ADDRESS) * maxIps);\r
+       else\r
+               pIrp->IoStatus.Information += (sizeof(IP_ADDRESS) * nIps);\r
+\r
+       KeReleaseInStackQueuedSpinLock( &hdl );\r
+       return STATUS_SUCCESS;\r
+}\r
+\r
+\r
+static NTSTATUS\r
+__ibat_mac_to_gid(\r
+       IN                              IRP                                                     *pIrp,\r
+       IN                              IO_STACK_LOCATION                       *pIoStack )\r
+{\r
+       NTSTATUS                                        status = STATUS_INVALID_PARAMETER;\r
+       IOCTL_IBAT_MAC_TO_GID_IN        *pIn;\r
+       IOCTL_IBAT_MAC_TO_GID_OUT       *pOut;\r
+       KLOCK_QUEUE_HANDLE                      hdl;\r
+       cl_list_item_t                          *pItem;\r
+       ipoib_adapter_t                         *pAdapter;\r
+\r
+       IPOIB_ENTER(IPOIB_DBG_IOCTL);\r
+\r
+       if( pIoStack->Parameters.DeviceIoControl.InputBufferLength !=\r
+               sizeof(IOCTL_IBAT_MAC_TO_GID_IN) )\r
+       {\r
+               IPOIB_TRACE_EXIT( IPOIB_DBG_ERROR, ("Invalid input buffer size.\n") );\r
+               return STATUS_INVALID_PARAMETER;\r
+       }\r
+       \r
+       if( pIoStack->Parameters.DeviceIoControl.OutputBufferLength !=\r
+               sizeof(IOCTL_IBAT_MAC_TO_GID_OUT) )\r
+       {\r
+               IPOIB_TRACE_EXIT( IPOIB_DBG_ERROR, ("Invalid output buffer size.\n") );\r
+               return STATUS_INVALID_PARAMETER;\r
+       }\r
+\r
+       pIn = pIrp->AssociatedIrp.SystemBuffer;\r
+       pOut = pIrp->AssociatedIrp.SystemBuffer;\r
+\r
+       if( pIn->Version != IBAT_IOCTL_VERSION )\r
+       {\r
+               IPOIB_TRACE_EXIT( IPOIB_DBG_ERROR, ("Invalid version.\n") );\r
+               return STATUS_INVALID_PARAMETER;\r
+       }\r
+\r
+       KeAcquireInStackQueuedSpinLock( &g_ipoib.lock, &hdl );\r
+\r
+       for( pItem = cl_qlist_head( &g_ipoib.adapter_list );\r
+               pItem != cl_qlist_end( &g_ipoib.adapter_list );\r
+               pItem = cl_qlist_next( pItem ) )\r
+       {\r
+               pAdapter = CONTAINING_RECORD( pItem, ipoib_adapter_t, entry );\r
+               if( pIn->PortGuid != pAdapter->guids.port_guid )\r
+                       continue;\r
+\r
+               /* Found the port - lookup the MAC. */\r
+               cl_obj_lock( &pAdapter->obj );\r
+               if( pAdapter->p_port )\r
+               {\r
+                       status = ipoib_mac_to_gid(\r
+                               pAdapter->p_port, *(mac_addr_t*)pIn->DestMac, &pOut->DestGid );\r
+                       if( NT_SUCCESS( status ) )\r
+                       {\r
+                               pIrp->IoStatus.Information =\r
+                                       sizeof(IOCTL_IBAT_MAC_TO_GID_OUT);\r
+                       }\r
+               }\r
+               cl_obj_unlock( &pAdapter->obj );\r
+               break;\r
+       }\r
+\r
+       KeReleaseInStackQueuedSpinLock( &hdl );\r
+\r
+       return status;\r
+}\r
+\r
+\r
+void\r
+ipoib_ref_ibat()\r
+{\r
+       NDIS_STATUS                     status;\r
+       NDIS_STRING                     DeviceName;\r
+       NDIS_STRING                     DeviceLinkUnicodeString;\r
+       PDRIVER_DISPATCH        DispatchTable[IRP_MJ_MAXIMUM_FUNCTION+1];\r
+       DEVICE_OBJECT           *p_dev_obj;\r
+\r
+       IPOIB_ENTER( IPOIB_DBG_IOCTL );\r
+\r
+       if( InterlockedIncrement( &g_ipoib.ibat_ref ) == 1 )\r
+       {\r
+               NdisInitUnicodeString( &DeviceName, IBAT_DEV_NAME );\r
+               NdisInitUnicodeString( &DeviceLinkUnicodeString, IBAT_DOS_DEV_NAME );\r
+\r
+               NdisZeroMemory( DispatchTable, sizeof(DispatchTable) );\r
+\r
+               DispatchTable[IRP_MJ_CREATE] = __ipoib_create;\r
+               DispatchTable[IRP_MJ_CLEANUP] = __ipoib_cleanup;\r
+               DispatchTable[IRP_MJ_CLOSE] = __ipoib_close;\r
+               DispatchTable[IRP_MJ_DEVICE_CONTROL] = __ipoib_dispatch;\r
+               DispatchTable[IRP_MJ_INTERNAL_DEVICE_CONTROL] = __ipoib_dispatch;\r
+\r
+               status = NdisMRegisterDevice( g_ipoib.h_ndis_wrapper,\r
+                       &DeviceName, &DeviceLinkUnicodeString, &DispatchTable[0],\r
+                       &p_dev_obj, &g_ipoib.h_ibat_dev );\r
+               if( status != NDIS_STATUS_SUCCESS )\r
+               {\r
+                       IPOIB_TRACE( IPOIB_DBG_ERROR, \r
+                               ("NdisMRegisterDevice failed with status of %d\n", status) );\r
+               }\r
+       }\r
+\r
+       IPOIB_EXIT( IPOIB_DBG_IOCTL );\r
+}\r
+\r
+\r
+void\r
+ipoib_deref_ibat()\r
+{\r
+       IPOIB_ENTER( IPOIB_DBG_IOCTL );\r
+\r
+       if( InterlockedDecrement( &g_ipoib.ibat_ref ) )\r
+       {\r
+               IPOIB_EXIT( IPOIB_DBG_IOCTL );\r
+               return;\r
+       }\r
+\r
+       if( g_ipoib.h_ibat_dev )\r
+       {\r
+               NdisMDeregisterDevice( g_ipoib.h_ibat_dev );\r
+               g_ipoib.h_ibat_dev = NULL;\r
+       }\r
+\r
+       IPOIB_EXIT( IPOIB_DBG_IOCTL );\r
+}\r
+\r
+\r
+static NTSTATUS\r
+__ipoib_create(\r
+       IN                              DEVICE_OBJECT* const            pDevObj,\r
+       IN                              IRP* const                                      pIrp )\r
+{\r
+       IPOIB_ENTER( IPOIB_DBG_IOCTL );\r
+\r
+       UNREFERENCED_PARAMETER( pDevObj );\r
+\r
+       ipoib_ref_ibat();\r
+\r
+       pIrp->IoStatus.Status = STATUS_SUCCESS;\r
+       pIrp->IoStatus.Information = 0;\r
+       IoCompleteRequest( pIrp, IO_NO_INCREMENT );\r
+\r
+       IPOIB_EXIT( IPOIB_DBG_IOCTL );\r
+       return STATUS_SUCCESS;\r
+}\r
+\r
+\r
+static NTSTATUS\r
+__ipoib_cleanup(\r
+       IN                              DEVICE_OBJECT* const            pDevObj,\r
+       IN                              IRP* const                                      pIrp )\r
+{\r
+       IPOIB_ENTER( IPOIB_DBG_IOCTL );\r
+\r
+       UNREFERENCED_PARAMETER( pDevObj );\r
+\r
+       ipoib_deref_ibat();\r
+\r
+       pIrp->IoStatus.Status = STATUS_SUCCESS;\r
+       pIrp->IoStatus.Information = 0;\r
+       IoCompleteRequest( pIrp, IO_NO_INCREMENT );\r
+\r
+       IPOIB_EXIT( IPOIB_DBG_IOCTL );\r
+       return STATUS_SUCCESS;\r
+}\r
+\r
+\r
+static NTSTATUS\r
+__ipoib_close(\r
+       IN                              DEVICE_OBJECT* const            pDevObj,\r
+       IN                              IRP* const                                      pIrp )\r
+{\r
+       IPOIB_ENTER( IPOIB_DBG_IOCTL );\r
+\r
+       UNREFERENCED_PARAMETER( pDevObj );\r
+\r
+       pIrp->IoStatus.Status = STATUS_SUCCESS;\r
+       pIrp->IoStatus.Information = 0;\r
+       IoCompleteRequest( pIrp, IO_NO_INCREMENT );\r
+\r
+       IPOIB_EXIT( IPOIB_DBG_IOCTL );\r
+       return STATUS_SUCCESS;\r
+}\r
+\r
+\r
+static NTSTATUS\r
+__ipoib_dispatch(\r
+       IN                              DEVICE_OBJECT* const            pDevObj,\r
+       IN                              IRP* const                                      pIrp )\r
+{\r
+       IO_STACK_LOCATION       *pIoStack;\r
+       NTSTATUS                        status = STATUS_SUCCESS;\r
+\r
+       IPOIB_ENTER( IPOIB_DBG_IOCTL );\r
+\r
+       UNREFERENCED_PARAMETER( pDevObj );\r
+\r
+       pIoStack = IoGetCurrentIrpStackLocation( pIrp );\r
+\r
+       pIrp->IoStatus.Information = 0;\r
+\r
+       switch( pIoStack->Parameters.DeviceIoControl.IoControlCode )\r
+       {\r
+       case IOCTL_IBAT_PORTS:\r
+               IPOIB_TRACE( IPOIB_DBG_IOCTL, ("IOCTL_IBAT_PORTS recieved\n") );\r
+               status = __ibat_get_ports( pIrp, pIoStack );\r
+               break;\r
+\r
+       case IOCTL_IBAT_IP_ADDRESSES:\r
+               IPOIB_TRACE( IPOIB_DBG_IOCTL, ("IOCTL_IBAT_IP_ADDRESSES recieved\n" ));\r
+               status = __ibat_get_ips( pIrp, pIoStack );\r
+               break;\r
+\r
+       case IOCTL_IBAT_MAC_TO_GID:\r
+               IPOIB_TRACE( IPOIB_DBG_IOCTL, ("IOCTL_IBAT_MAC_TO_GID recieved\n" ));\r
+               status = __ibat_mac_to_gid( pIrp, pIoStack );\r
+               break;\r
+\r
+       default:\r
+               IPOIB_TRACE( IPOIB_DBG_WARN, ("unknow IOCTL code = 0x%x\n",\r
+                       pIoStack->Parameters.DeviceIoControl.IoControlCode) );\r
+               status = STATUS_INVALID_PARAMETER;\r
+       }\r
+\r
+       pIrp->IoStatus.Status = status;\r
+       IoCompleteRequest( pIrp, IO_NO_INCREMENT );\r
+\r
+       IPOIB_EXIT( IPOIB_DBG_IOCTL );\r
+       return status;\r
+}\r
+\r
diff --git a/branches/MTHCA/ulp/ipoib/kernel/ipoib_ibat.h b/branches/MTHCA/ulp/ipoib/kernel/ipoib_ibat.h
new file mode 100644 (file)
index 0000000..6a884e5
--- /dev/null
@@ -0,0 +1,45 @@
+/*\r
+ * Copyright (c) 2005 Mellanox Technologies.  All rights reserved.\r
+ * Copyright (c) 2005 SilverStorm Technologies.  All rights reserved.\r
+ *\r
+ * This software is available to you under the OpenIB.org BSD license\r
+ * below:\r
+ *\r
+ *     Redistribution and use in source and binary forms, with or\r
+ *     without modification, are permitted provided that the following\r
+ *     conditions are met:\r
+ *\r
+ *      - Redistributions of source code must retain the above\r
+ *        copyright notice, this list of conditions and the following\r
+ *        disclaimer.\r
+ *\r
+ *      - Redistributions in binary form must reproduce the above\r
+ *        copyright notice, this list of conditions and the following\r
+ *        disclaimer in the documentation and/or other materials\r
+ *        provided with the distribution.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
+ * SOFTWARE.\r
+ *\r
+ * $Id: ipoib_ibat.h 195 2005-12-06 21:41:40Z ftillier $\r
+ */\r
+\r
+\r
+#ifndef _IPOIB_IBAT_H_\r
+#define _IPOIB_IBAT_H_\r
+\r
+\r
+void\r
+ipoib_ref_ibat();\r
+\r
+void\r
+ipoib_deref_ibat();\r
+\r
+\r
+#endif /* _IPOIB_IBAT_H_ */\r
diff --git a/branches/MTHCA/ulp/ipoib/kernel/ipoib_log.mc b/branches/MTHCA/ulp/ipoib/kernel/ipoib_log.mc
new file mode 100644 (file)
index 0000000..9676ff2
--- /dev/null
@@ -0,0 +1,285 @@
+;/*++\r
+;=============================================================================\r
+;Copyright (c) 2001 Mellanox Technologies\r
+;\r
+;Module Name:\r
+;\r
+;    ipoiblog.mc\r
+;\r
+;Abstract:\r
+;\r
+;    IPoIB Driver event log messages\r
+;\r
+;Authors:\r
+;\r
+;    Yossi Leybovich\r
+;\r
+;Environment:\r
+;\r
+;   Kernel Mode .\r
+;\r
+;=============================================================================\r
+;--*/\r
+;\r
+MessageIdTypedef = NDIS_ERROR_CODE\r
+\r
+SeverityNames = (\r
+       Success                 = 0x0:STATUS_SEVERITY_SUCCESS\r
+       Informational   = 0x1:STATUS_SEVERITY_INFORMATIONAL\r
+       Warning                 = 0x2:STATUS_SEVERITY_WARNING\r
+       Error                   = 0x3:STATUS_SEVERITY_ERROR\r
+       )\r
+\r
+FacilityNames = (\r
+       System                  = 0x0\r
+       RpcRuntime              = 0x2:FACILITY_RPC_RUNTIME\r
+       RpcStubs                = 0x3:FACILITY_RPC_STUBS\r
+       Io                              = 0x4:FACILITY_IO_ERROR_CODE\r
+       IPoIB                   = 0x7:FACILITY_IPOIB_ERROR_CODE\r
+       )\r
+\r
+\r
+MessageId=0x0001\r
+Facility=IPoIB\r
+Severity=Warning\r
+SymbolicName=EVENT_IPOIB_PORT_DOWN\r
+Language=English\r
+%2: Network controller link is down.\r
+.\r
+\r
+MessageId=0x0002\r
+Facility=IPoIB\r
+Severity=Informational\r
+SymbolicName=EVENT_IPOIB_PORT_UP\r
+Language=English\r
+%2: Network controller link is up.\r
+.\r
+\r
+\r
+MessageId=0x0003\r
+Facility=IPoIB\r
+Severity=Informational\r
+SymbolicName=EVENT_IPOIB_PORT_UP1\r
+Language=English\r
+%2: Network controller link is up at 2.5Gbps.\r
+.\r
+\r
+MessageId=0x0004\r
+Facility=IPoIB\r
+Severity=Informational\r
+SymbolicName=EVENT_IPOIB_PORT_UP2\r
+Language=English\r
+%2: Network controller link is up at 5Gbps.\r
+.\r
+\r
+MessageId=0x0006\r
+Facility=IPoIB\r
+Severity=Informational\r
+SymbolicName=EVENT_IPOIB_PORT_UP3\r
+Language=English\r
+%2: Network controller link is up at 10Gbps.\r
+.\r
+\r
+MessageId=0x000a\r
+Facility=IPoIB\r
+Severity=Informational\r
+SymbolicName=EVENT_IPOIB_PORT_UP4\r
+Language=English\r
+%2: Network controller link is up at 20Gps.\r
+.\r
+\r
+MessageId=0x000e\r
+Facility=IPoIB\r
+Severity=Informational\r
+SymbolicName=EVENT_IPOIB_PORT_UP5\r
+Language=English\r
+%2: Network controller link is up at 30Gps.\r
+.\r
+\r
+MessageId=0x0012\r
+Facility=IPoIB\r
+Severity=Informational\r
+SymbolicName=EVENT_IPOIB_PORT_UP6\r
+Language=English\r
+%2: Network controller link is up at 40Gps.\r
+.\r
+\r
+MessageId=0x001a\r
+Facility=IPoIB\r
+Severity=Informational\r
+SymbolicName=EVENT_IPOIB_PORT_UP7\r
+Language=English\r
+%2: Network controller link is up at 60Gps.\r
+.\r
+\r
+MessageId=0x0032\r
+Facility=IPoIB\r
+Severity=Informational\r
+SymbolicName=EVENT_IPOIB_PORT_UP8\r
+Language=English\r
+%2: Network controller link is up at 120Gps.\r
+.\r
+\r
+MessageId=0x0040\r
+Facility=IPoIB\r
+Severity=Informational\r
+SymbolicName=EVENT_IPOIB_INIT_SUCCESS\r
+Language=English\r
+%2: Driver Initialized succesfully.\r
+.\r
+\r
+MessageId=0x0041\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_OPEN_CA\r
+Language=English\r
+%2: Failed to open Channel Adapter.\r
+.\r
+\r
+MessageId=0x0042\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_ALLOC_PD\r
+Language=English\r
+%2: Failed to allocate Protection Domain.\r
+.\r
+\r
+MessageId=0x0043\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_CREATE_RECV_CQ\r
+Language=English\r
+%2: Failed to create receive Completion Queue.\r
+.\r
+\r
+MessageId=0x0044\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_CREATE_SEND_CQ\r
+Language=English\r
+%2: Failed to create send Completion Queue.\r
+.\r
+\r
+MessageId=0x0045\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_CREATE_QP\r
+Language=English\r
+%2: Failed to create Queue Pair.\r
+.\r
+\r
+MessageId=0x0046\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_QUERY_QP\r
+Language=English\r
+%2: Failed to get Queue Pair number.\r
+.\r
+\r
+MessageId=0x0047\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_REG_PHYS\r
+Language=English\r
+%2: Failed to create DMA Memory Region.\r
+.\r
+\r
+MessageId=0x0048\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_RECV_POOL\r
+Language=English\r
+%2: Failed to create receive descriptor pool.\r
+.\r
+\r
+MessageId=0x0049\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_RECV_PKT_POOL\r
+Language=English\r
+%2: Failed to create NDIS_PACKET pool for receive indications.\r
+.\r
+\r
+MessageId=0x004A\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_RECV_BUF_POOL\r
+Language=English\r
+%2: Failed to create NDIS_BUFFER pool for receive indications.\r
+.\r
+\r
+MessageId=0x004B\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_SEND_PKT_POOL\r
+Language=English\r
+%2: Failed to create NDIS_PACKET pool for send processing.\r
+.\r
+\r
+MessageId=0x004C\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_SEND_BUF_POOL\r
+Language=English\r
+%2: Failed to create NDIS_BUFFER pool for send processing.\r
+.\r
+\r
+MessageId=0x004D\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_RECV_PKT_ARRAY\r
+Language=English\r
+%2: Failed to allocate receive indication array.\r
+.\r
+\r
+MessageId=0x004E\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_PORT_INFO_TIMEOUT\r
+Language=English\r
+%2: Subnet Administrator query for port information timed out. \r
+Make sure the SA is functioning properly.  Increasing the number\r
+of retries and retry timeout adapter parameters may solve the\r
+issue.\r
+.\r
+\r
+MessageId=0x004F\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_PORT_INFO_REJECT\r
+Language=English\r
+%2: Subnet Administrator failed the query for port information.\r
+Make sure the SA is functioning properly and compatible.\r
+.\r
+\r
+MessageId=0x0050\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_QUERY_PORT_INFO\r
+Language=English\r
+%2: Subnet Administrator query for port information failed.\r
+.\r
+\r
+MessageId=0x0055\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_BCAST_GET\r
+Language=English\r
+%2: Subnet Administrator failed query for broadcast group information.\r
+.\r
+\r
+MessageId=0x0056\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_BCAST_JOIN\r
+Language=English\r
+%2: Subnet Administrator failed request to joing broadcast group.\r
+.\r
+\r
+MessageId=0x0057\r
+Facility=IPoIB\r
+Severity=Error\r
+SymbolicName=EVENT_IPOIB_BCAST_RATE\r
+Language=English\r
+%2: The local port rate is too slow for the existing broadcast MC group.\r
+.\r