return status;\r
}\r
\r
+ \r
+NTSTATUS\r
+__read_dev_params(IN WDFDEVICE Device, struct mlx4_dev_params *dev_params)\r
+{\r
+ NTSTATUS status = STATUS_SUCCESS;\r
+ WDFKEY hKey = NULL;\r
+ WDFKEY hParamsKey = NULL;\r
+ DECLARE_CONST_UNICODE_STRING(Parameters, L"Parameters");\r
+ DECLARE_CONST_UNICODE_STRING(PortType, L"PortType");\r
+#define MAX_UVALUE 100\r
+ WCHAR uvalue_data[MAX_UVALUE];\r
+ UNICODE_STRING uvalue;\r
+ status = WdfDeviceOpenRegistryKey(Device, PLUGPLAY_REGKEY_DRIVER, \r
+ STANDARD_RIGHTS_ALL, WDF_NO_OBJECT_ATTRIBUTES, &hKey);\r
+ if( !NT_SUCCESS( status ) ) {\r
+ MLX4_PRINT( TRACE_LEVEL_ERROR ,MLX4_DBG_DEV ,("WdfDeviceOpenRegistryKey Failed status = 0x%x\n", status));\r
+ goto err;\r
+ }\r
+\r
+ status = WdfRegistryOpenKey(hKey, &Parameters, STANDARD_RIGHTS_ALL, WDF_NO_OBJECT_ATTRIBUTES, &hParamsKey);\r
+ if( !NT_SUCCESS( status ) ) {\r
+ MLX4_PRINT( TRACE_LEVEL_ERROR ,MLX4_DBG_DEV ,("WdfRegistryOpenKey Failed status = 0x%x\n", status));\r
+ goto err;\r
+ }\r
+\r
+ uvalue.Buffer = uvalue_data;\r
+ uvalue.MaximumLength = MAX_UVALUE;\r
+ uvalue.Length = 0;\r
+\r
+ status = WdfRegistryQueryUnicodeString(hParamsKey, &PortType, NULL, &uvalue);\r
+ if (NT_SUCCESS (status)) {\r
+ if (!wcscmp(uvalue_data, L"ib,ib")) {\r
+ dev_params->mod_port_type[0] = MLX4_PORT_TYPE_IB;\r
+ dev_params->mod_port_type[1] = MLX4_PORT_TYPE_IB;\r
+ } else\r
+ if (!wcscmp(uvalue_data, L"ib,eth")) {\r
+ dev_params->mod_port_type[0] = MLX4_PORT_TYPE_IB;\r
+ dev_params->mod_port_type[1] = MLX4_PORT_TYPE_ETH;\r
+ } else\r
+ if (!wcscmp(uvalue_data, L"eth,ib")) {\r
+ dev_params->mod_port_type[0] = MLX4_PORT_TYPE_ETH;\r
+ dev_params->mod_port_type[1] = MLX4_PORT_TYPE_IB;\r
+ } else\r
+ if (!wcscmp(uvalue_data, L"eth,eth")) {\r
+ dev_params->mod_port_type[0] = MLX4_PORT_TYPE_ETH;\r
+ dev_params->mod_port_type[1] = MLX4_PORT_TYPE_ETH;\r
+ }\r
+ }\r
+ else {\r
+ dev_params->mod_port_type[0] = MLX4_PORT_TYPE_IB;\r
+ dev_params->mod_port_type[1] = MLX4_PORT_TYPE_IB;\r
+ }\r
+\r
+err:\r
+ if (hKey != NULL) \r
+ WdfRegistryClose(hKey);\r
+\r
+ if (hParamsKey != NULL) \r
+ WdfRegistryClose(hParamsKey);\r
+\r
+ return status;\r
+}\r
+\r
+\r
static \r
NTSTATUS\r
-__start_card( \r
+__start_card(\r
+ IN WDFDEVICE Device,\r
IN PFDO_DEVICE_DATA p_fdo \r
)\r
{\r
int err;\r
NTSTATUS status = STATUS_SUCCESS;\r
struct pci_dev *pdev = &p_fdo->pci_dev;\r
+ struct mlx4_dev_params dev_params;\r
\r
MLX4_ENTER(MLX4_DBG_DRV);\r
\r
if ( p_fdo->card_started )\r
goto err; \r
- \r
+\r
+ status = __read_dev_params(Device, &dev_params);\r
+ if( !NT_SUCCESS( status ) ) \r
+ goto err;\r
+\r
// enable the card\r
status = pci_hca_enable( &pdev->bus_pci_ifc, &pdev->pci_cfg_space );\r
if( !NT_SUCCESS( status ) ) \r
#endif \r
\r
// NET library\r
- err = mlx4_init_one( &p_fdo->pci_dev );\r
+ err = mlx4_init_one( &p_fdo->pci_dev, &dev_params );\r
if (err) {\r
status = errno_to_ntstatus(err);\r
goto err;\r
\r
p_fdo->bus_ib_ifc.pdev = &p_fdo->pci_dev;\r
p_fdo->bus_ib_ifc.p_ibdev = p_fdo->pci_dev.ib_dev;\r
- p_fdo->bus_ib_ifc.is_livefish = mlx4_is_livefish(p_fdo->pci_dev.dev); \r
- if ( p_fdo->bus_ib_ifc.is_livefish == 0 ) {\r
- p_fdo->bus_ib_ifc.pmlx4_dev = to_mdev(p_fdo->pci_dev.ib_dev)->dev; \r
- if ( p_fdo->bus_ib_ifc.pmlx4_dev->flags & MLX4_FLAG_MSI_X )\r
- p_fdo->bus_ib_ifc.n_msi_vectors = p_fdo->pci_dev.n_msi_vectors - 2;\r
- }\r
+ p_fdo->bus_ib_ifc.is_livefish = mlx4_is_livefish(p_fdo->pci_dev.dev); \r
+ if ( p_fdo->bus_ib_ifc.is_livefish == 0 ) {\r
+ p_fdo->bus_ib_ifc.pmlx4_dev = to_mdev(p_fdo->pci_dev.ib_dev)->dev; \r
+ if ( p_fdo->bus_ib_ifc.pmlx4_dev->flags & MLX4_FLAG_MSI_X )\r
+ p_fdo->bus_ib_ifc.n_msi_vectors = p_fdo->pci_dev.n_msi_vectors - 2;\r
+ }\r
\r
p_fdo->card_started = TRUE;\r
\r
\r
// start card (needed after Hibernetion)\r
if (PreviousState > WdfPowerDeviceD0)\r
- __start_card( p_fdo );\r
+ __start_card( Device, p_fdo );\r
mdev = pdev->dev;\r
\r
// create child device\r
}\r
\r
// start the card\r
- status = __start_card( p_fdo );\r
+ status = __start_card(Device, p_fdo );\r
\r
err:\r
MLX4_EXIT( MLX4_DBG_DRV );\r
// "Measure the interrupt from the first packet (default 1)"\r
DECLARE_CONST_UNICODE_STRING(InterruptFromFirstPacket, L"InterruptFromFirstPacket"); \r
\r
- // "Ports L2 type (ib/eth/auto, entry per port, comma seperated, default ib for all)"\r
- DECLARE_CONST_UNICODE_STRING(PortType, L"PortType");\r
-\r
// "ProcessorAffinity"\r
DECLARE_CONST_UNICODE_STRING(ProcessorAffinity, L"ProcessorAffinity");\r
\r
ULONG value;\r
WDFKEY hKey = NULL;\r
NTSTATUS status = STATUS_SUCCESS;\r
-\r
- UNICODE_STRING uvalue;\r
-#define MAX_UVALUE 100\r
- WCHAR uvalue_data[MAX_UVALUE];\r
\r
status = WdfDriverOpenParametersRegistryKey( *hDriver,\r
STANDARD_RIGHTS_ALL, WDF_NO_OBJECT_ATTRIBUTES, &hKey );\r
else\r
g.mod_affinity = 0;\r
\r
- uvalue.Buffer = uvalue_data;\r
- uvalue.MaximumLength = MAX_UVALUE;\r
- uvalue.Length = 0;\r
-\r
- status = WdfRegistryQueryUnicodeString(hKey, &PortType, NULL, &uvalue);\r
- if (NT_SUCCESS (status)) {\r
- if (!wcscmp(uvalue_data, L"ib,ib")) {\r
- g.mod_port_type [0] = MLX4_PORT_TYPE_IB;\r
- g.mod_port_type [1] = MLX4_PORT_TYPE_IB;\r
- } else\r
- if (!wcscmp(uvalue_data, L"ib,eth")) {\r
- g.mod_port_type [0] = MLX4_PORT_TYPE_IB;\r
- g.mod_port_type [1] = MLX4_PORT_TYPE_ETH;\r
- } else\r
- if (!wcscmp(uvalue_data, L"eth,ib")) {\r
- g.mod_port_type [0] = MLX4_PORT_TYPE_ETH;\r
- g.mod_port_type [1] = MLX4_PORT_TYPE_IB;\r
- } else\r
- if (!wcscmp(uvalue_data, L"eth,eth")) {\r
- g.mod_port_type [0] = MLX4_PORT_TYPE_ETH;\r
- g.mod_port_type [1] = MLX4_PORT_TYPE_ETH;\r
- }\r
- }\r
- else {\r
- g.mod_port_type [0] = MLX4_PORT_TYPE_IB;\r
- g.mod_port_type [1] = MLX4_PORT_TYPE_IB;\r
- }\r
-\r
\r
WdfRegistryClose(hKey);\r
status = STATUS_SUCCESS;\r
\r
[MLX4BUS.DDInstall.ntx86]\r
CopyFiles = MLX4BUS.CopyFiles\r
+AddReg = MLX4BUS.SoftwareReg\r
\r
[MLX4BUS.DDInstall.ntamd64]\r
CopyFiles = MLX4BUS.CopyFiles\r
+AddReg = MLX4BUS.SoftwareReg\r
\r
[MLX4BUS.DDInstall.ntia64]\r
CopyFiles = MLX4BUS.CopyFiles\r
+AddReg = MLX4BUS.SoftwareReg\r
\r
[MLX4BUS.DDInstall.ntx86.Services]\r
AddService = mlx4_bus,%SPSVCINST_ASSOCSERVICE%,MLX4BUS.ServiceInstall,MLX4BUS.EventLog\r
HKR, , EventMessageFile, 0x00020000, "%%SystemRoot%%\System32\IoLogMsg.dll;%%SystemRoot%%\System32\drivers\mlx4_bus.sys"\r
HKR, , TypesSupported, 0x00010001, 7\r
\r
+[MLX4BUS.SoftwareReg]\r
+HKR,"Parameters","PortType",%REG_SZ%,"ib,ib"\r
+\r
[MLX4BUS.ParamsReg]\r
HKR,,DeviceCharacteristics,0x10001,0x0100 ; Use same security checks on relative opens\r
HKR,,Security,,"D:P(A;;GA;;;BA)(A;;GA;;;SY)" ; Allow generic-all access to Built-in administrators and Local system \r
HKR,"Parameters","NumMac",%REG_DWORD%,0x00000001\r
HKR,"Parameters","NumVlan",%REG_DWORD%,0x00000000\r
HKR,"Parameters","UsePrio",%REG_DWORD%,0x00000000\r
-HKR,"Parameters","PortType",%REG_SZ%,"ib,ib"\r
+\r
\r
\r
HKLM,"System\CurrentControlSet\Control\WMI\GlobalLogger\E51BB6E2-914A-4e21-93C0-192F4801BBFF","Flags",%REG_DWORD%,0xffff\r