{\r
NTSTATUS status;\r
ib_al_ifc_data_t data;\r
- IO_STACK_LOCATION io_stack;\r
+ IO_STACK_LOCATION io_stack, *p_fwd_io_stack;\r
DEVICE_OBJECT *p_pdo;\r
+ IRP *p_irp;\r
+ KEVENT event;\r
+ IO_STATUS_BLOCK io_status;\r
\r
IPOIB_ENTER( IPOIB_DBG_INIT );\r
\r
io_stack.Parameters.QueryInterface.InterfaceType = \r
&GUID_IB_AL_INTERFACE;\r
\r
- status = cl_fwd_query_ifc( p_pdo, &io_stack );\r
+ KeInitializeEvent( &event, NotificationEvent, FALSE );\r
+\r
+ /* Build the IRP for the HCA. */\r
+ p_irp = IoBuildSynchronousFsdRequest( IRP_MJ_PNP, p_pdo,\r
+ NULL, 0, NULL, &event, &io_status );\r
+ if( !p_irp )\r
+ {\r
+ IPOIB_TRACE_EXIT( IPOIB_DBG_ERROR,\r
+ ("Failed to allocate query interface IRP.\n") );\r
+ return STATUS_INSUFFICIENT_RESOURCES;\r
+ }\r
+\r
+ /* Copy the request query parameters. */\r
+ p_fwd_io_stack = IoGetNextIrpStackLocation( p_irp );\r
+ p_fwd_io_stack->MinorFunction = IRP_MN_QUERY_INTERFACE;\r
+ p_fwd_io_stack->Parameters.QueryInterface =\r
+ io_stack.Parameters.QueryInterface;\r
+ p_irp->IoStatus.Status = STATUS_NOT_SUPPORTED;\r
+\r
+ /* Send the IRP. */\r
+ status = IoCallDriver( p_pdo, p_irp );\r
+ if( status == STATUS_PENDING )\r
+ {\r
+ KeWaitForSingleObject( &event, Executive, KernelMode,\r
+ FALSE, NULL );\r
+ status = io_status.Status;\r
+ }\r
+\r
if( !NT_SUCCESS( status ) )\r
{\r
IPOIB_TRACE_EXIT( IPOIB_DBG_ERROR,\r