Add driver GUID to interfaces The driver GUID provides versioning between user-mode and kernel-mode drivers, to ensure they are compatible. This prevents using an out dated user-mode DLL with an updated kernel mode driver, and any potential subtle side effects that could have.
Signed-off-by: Fab Tillier <[email protected]> diff -dwup3 -X excl.txt -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\inc\mx_abi.h .\hw\mlx4\inc\mx_abi.h --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\inc\mx_abi.h Thu May 31 11:22:19 2012 +++ .\hw\mlx4\inc\mx_abi.h Thu May 31 12:35:10 2012 @@ -38,6 +38,10 @@ #include <complib/cl_types_osd.h> #include "user.h" +// {697925A7-84F0-4ED9-A9E8-76A941E72EB1} +DEFINE_GUID(GUID_MLX4_DRIVER, +0x697925a7, 0x84f0, 0x4ed9, 0xa9, 0xe8, 0x76, 0xa9, 0x41, 0xe7, 0x2e, 0xb1); + #pragma warning( disable : 4201) /* diff -dwup3 -X excl.txt -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\data.c .\hw\mlx4\kernel\hca\data.c --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\data.c Fri Aug 03 12:58:34 2012 +++ .\hw\mlx4\kernel\hca\data.c Thu Jul 26 15:31:14 2012 @@ -430,7 +430,6 @@ to_av( err = p_ib_dev->x.find_cached_gid((struct ib_device *)p_ib_dev, (union ib_gid *)p_ib_av_attr->grh.src_gid.raw, &port_num, &gid_index); if (err) { - HCA_PRINT(TRACE_LEVEL_ERROR ,HCA_DBG_SHIM , ("ib_find_cached_gid failed %d (%#x). Using default: sgid_index = 0\n", err, err)); gid_index = 0; @@ -482,7 +481,6 @@ int from_av( p_ib_ah_attr->port_num, p_ib_ah_attr->grh.sgid_index, (union ib_gid*)p_ib_av_attr->grh.src_gid.raw ); if (err) { - HCA_PRINT(TRACE_LEVEL_ERROR ,HCA_DBG_SHIM , ("ib_get_cached_gid failed %d (%#x). Using default: sgid_index = 0\n", err, err)); } diff -dwup3 -X excl.txt -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\drv.c .\hw\mlx4\kernel\hca\drv.c --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\drv.c Thu May 31 11:22:19 2012 +++ .\hw\mlx4\kernel\hca\drv.c Fri Aug 03 14:39:19 2012 @@ -57,7 +57,7 @@ __unmap_fdo_memory( HCA_ENTER( HCA_DBG_PNP ); - if (p_fdo->p_bus_ib_ifc) { + if (p_fdo->p_bus_ib_ifc != NULL) { pdev = p_fdo->p_bus_ib_ifc->pdev; for( i = 0; i < HCA_BAR_TYPE_MAX; i++ ) { @@ -89,6 +89,7 @@ static int __get_dev_info(PHCA_FDO_DEVIC return 0; } + /* release the resources, allocated in hca_start */ static void __hca_release_resources( @@ -110,33 +111,22 @@ __hca_release_resources( HCA_EXIT( HCA_DBG_PNP ); } -ci_interface_t* -mlx4_hca_alloc_ifc( - IN PHCA_FDO_DEVICE_DATA const p_fdo ) +void +mlx4_setup_hca_ifc( + IN PHCA_FDO_DEVICE_DATA const p_fdo, + OUT ci_interface_t* pIfc ) { - ci_interface_t *pIfc; - HCA_ENTER( HCA_DBG_PNP ); - pIfc = - (ci_interface_t*)ExAllocatePoolWithTag( NonPagedPool, sizeof(ci_interface_t), MT_TAG_KERNEL ); - if( !pIfc ) - { - HCA_PRINT( TRACE_LEVEL_ERROR,HCA_DBG_PNP, - ("Failed to allocate ci_interface_t (%d bytes).\n", - sizeof(ci_interface_t))); - return NULL; - } - setup_ci_interface( p_fdo->hca.guid, pIfc ); + pIfc->driver_id = GUID_MLX4_DRIVER; pIfc->p_hca_obj = &p_fdo->hca; pIfc->vend_id = (uint32_t)p_fdo->p_bus_ib_ifc->pdev->ven_id; pIfc->dev_id = (uint16_t)p_fdo->p_bus_ib_ifc->pdev->dev_id; pIfc->dev_revision = (uint16_t)p_fdo->hca.hw_ver; HCA_EXIT( HCA_DBG_PNP ); - return pIfc; } NTSTATUS mlx4_hca_driver_entry() @@ -226,5 +216,3 @@ int mlx4_hca_get_usecnt(PHCA_FDO_DEVICE_ { return atomic_read(&p_fdo->usecnt); } - - diff -dwup3 -X excl.txt -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\mr.c .\hw\mlx4\kernel\hca\mr.c --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\mr.c Fri Aug 03 15:05:27 2012 +++ .\hw\mlx4\kernel\hca\mr.c Tue Aug 07 09:45:21 2012 @@ -123,6 +123,7 @@ err_unsupported: HCA_EXIT(HCA_DBG_MEMORY); return status; } + ib_api_status_t mlnx_register_mr ( diff -dwup3 -X excl.txt -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\inc\iba\ib_ci.h .\inc\iba\ib_ci.h --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\inc\iba\ib_ci.h Fri Aug 03 15:05:27 2012 +++ .\inc\iba\ib_ci.h Tue Aug 07 09:44:14 2012 @@ -1623,9 +1623,10 @@ typedef ib_api_status_t */ -/****f* Verbs/ci_register_mr + +/****f* Verbs/ci_register_mr_remap * NAME -* ci_register_mr -- Register a memory region with the HCA. +* ci_register_mr_remap -- Register a memory region with the HCA. * SYNOPSIS */ typedef ib_api_status_t @@ -3193,6 +3194,12 @@ typedef struct _ci_interface * It has ib_ca_handle_t type */ void *p_hca_obj; + + /* + * The Driver ID identifies a unique driver, even if that driver can handle + * multiple device types. + */ + GUID driver_id; /* * Vendor ID, Device ID, Device Revision of the HCA diff -dwup3 -X excl.txt -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\inc\kernel\iba\ipoib_ifc.h .\inc\kernel\iba\ipoib_ifc.h --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\inc\kernel\iba\ipoib_ifc.h Thu May 31 11:22:17 2012 +++ .\inc\kernel\iba\ipoib_ifc.h Thu Jul 26 16:41:39 2012 @@ -29,9 +29,9 @@ */ - #include "iba/ib_al_ifc.h" + #if !defined _IPOIB_IFC_H_ #define _IPOIB_IFC_H_ @@ -171,6 +171,7 @@ typedef struct _port_guid_pkey char name[MAX_USER_NAME_SIZE]; } port_guid_pkey_t; + /* * The ipoib_ifc_data_t structure * @@ -178,15 +179,18 @@ typedef struct _port_guid_pkey */ typedef struct _ipoib_ifc_data { + GUID driver_id; net64_t ca_guid; port_guid_pkey_t port_guid; - uint8_t port_num; ipoib_ifc_func ibal_ipoib_ifc; } ipoib_ifc_data_t; /* * FIELDS +* driver_id +* GUID identifying the HCA driver, used to perform per-driver IBAT filtering. +* * ca_guid * HCA GUID for this IPoIB interface * diff -dwup3 -X excl.txt -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\bus\drv\drv.c .\hw\mlx4\kernel\bus\drv\drv.c --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\bus\drv\drv.c Wed Jul 25 13:28:06 2012 +++ .\hw\mlx4\kernel\bus\drv\drv.c Mon Jul 30 22:41:41 2012 @@ -886,17 +886,10 @@ __start_card( } if ( number_of_ib_ports ) { - ci_interface_t *p_fdo_ifc; RDMA_INTERFACE_VERBS rdma_ifc, *p_ifc = &rdma_ifc; WDF_QUERY_INTERFACE_CONFIG qiConfig; /* Allocate and populate our HCA interface structure. */ - p_fdo_ifc = mlx4_hca_alloc_ifc( &p_fdo->mlx4_hca_data ); - if( !p_fdo_ifc ) { - MLX4_PRINT( TRACE_LEVEL_ERROR ,MLX4_DBG_DEV ,("mlx4_hca_alloc_ifc failed.\n")); - status = STATUS_NO_MEMORY; - goto err; - } /* fill interface fields */ p_ifc->InterfaceHeader.Size = sizeof(RDMA_INTERFACE_VERBS); @@ -904,9 +897,8 @@ __start_card( p_ifc->InterfaceHeader.Context = p_fdo; p_ifc->InterfaceHeader.InterfaceReference = __ref_hca_ifc; p_ifc->InterfaceHeader.InterfaceDereference = __deref_hca_ifc; - p_ifc->Verbs = *p_fdo_ifc; + mlx4_setup_hca_ifc(&p_fdo->mlx4_hca_data, &p_ifc->Verbs); p_ifc->post_event = st_et_event_func; - ExFreePool( p_fdo_ifc ); /* create an upper interface */ WDF_QUERY_INTERFACE_CONFIG_INIT( &qiConfig, (PINTERFACE)p_ifc, diff -dwup3 -X excl.txt -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\bus\drv\drv.h .\hw\mlx4\kernel\bus\drv\drv.h --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\bus\drv\drv.h Thu Mar 29 00:15:28 2012 +++ .\hw\mlx4\kernel\bus\drv\drv.h Thu Jul 26 18:25:36 2012 @@ -344,8 +344,10 @@ extern "C" IN PHCA_FDO_DEVICE_DATA p_fdo ); - ci_interface_t* mlx4_hca_alloc_ifc( - IN PHCA_FDO_DEVICE_DATA const p_fdo + void + mlx4_setup_hca_ifc( + IN PHCA_FDO_DEVICE_DATA const p_fdo, + OUT ci_interface_t* pIfc ); #ifdef __cplusplus diff -dwup3 -X excl.txt -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\bus\kernel\bus_port_mgr.c .\core\bus\kernel\bus_port_mgr.c --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\bus\kernel\bus_port_mgr.c Tue Aug 07 11:28:12 2012 +++ .\core\bus\kernel\bus_port_mgr.c Thu Jul 26 16:38:31 2012 @@ -2081,6 +2081,7 @@ port_query_ipoib_ifc( /* Set the interface data. */ p_ipoib_data = (ipoib_ifc_data_t*)p_ifc_data->p_data; + p_ipoib_data->driver_id = p_ext->pdo.h_ca->obj.p_ci_ca->verbs.driver_id; p_ipoib_data->ca_guid = p_ext->pdo.h_ca->obj.p_ci_ca->verbs.guid; p_ipoib_data->port_guid = p_ext->port_guid; p_ipoib_data->port_num = (uint8_t)p_ext->n_port;
ndv2.29.patch
Description: ndv2.29.patch
_______________________________________________ ofw mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
