Looks good to me. -Fab
> -----Original Message----- > From: Smith, Stan > Sent: Wednesday, June 29, 2011 10:13 AM > > Hello, > > In the function cl_pnp_po.c::cl_pnp() there is no handler for the following > PNP minor functions: > IRP_MN_QUERY_LEGACY_BUS_INFORMATION > IRP_MN_DEVICE_ENUMERATED (new for win7) > > Which at first discovery (DEBUG only with CL_DBG_PNP) appears to be a > problem as they are output as 'Unknown IRP minor function 0x%x'. > This patch does not change the behavior of how these IRP minor functions > are handled, the difference is in actual case statements for the minor > functions and DEBUG output. > Case statements show someone has investigated the missing support and > leaves a framework should IBAL need to handle these minor functions in the > future. > > Also repair short lines split by pretty-print, combine back into a single > line of > code for readability. > Split long lines inserted after pretty print was run. > > Signed-off-by: stan smith <[email protected]> > > --- core/complib/kernel/cl_pnp_po.c Tue Jun 28 14:01:37 2011 > +++ core/complib/kernel/cl_pnp_po.c Mon Jun 27 13:22:09 2011 > @@ -194,8 +194,8 @@ > CL_TRACE_EXIT( CL_DBG_ERROR, p_ext->dbg_lvl, > ("IoAcquireRemoveLock returned %08x.\n", status) ); > p_io_stack = IoGetCurrentIrpStackLocation( p_irp ); > - CL_TRACE( CL_DBG_PNP, p_ext->dbg_lvl, > - ("Minor function %x for %s\n", p_io_stack- > >MinorFunction, p_ext->vfptr_pnp_po->identity) ); > + CL_TRACE( CL_DBG_PNP, p_ext->dbg_lvl, ("Minor function > %x for %s\n", > + p_io_stack->MinorFunction, p_ext- > >vfptr_pnp_po->identity) ); > p_irp->IoStatus.Status = status; > IoCompleteRequest( p_irp, IO_NO_INCREMENT ); > return status; > @@ -260,8 +260,7 @@ > CL_TRACE( CL_DBG_PNP, p_ext->dbg_lvl, > ("IRP_MN_QUERY_CAPABILITIES for %s\n", > p_ext->vfptr_pnp_po->identity) ); > - status = p_ext->vfptr_pnp_po->pfn_query_capabilities( > - p_dev_obj, p_irp, &action ); > + status = p_ext->vfptr_pnp_po->pfn_query_capabilities( > p_dev_obj, p_irp, &action ); > break; > > case IRP_MN_QUERY_PNP_DEVICE_STATE: > @@ -275,8 +274,7 @@ > CL_TRACE( CL_DBG_PNP, p_ext->dbg_lvl, > ("IRP_MN_FILTER_RESOURCE_REQUIREMENTS for > %s\n", > p_ext->vfptr_pnp_po->identity) ); > - status = p_ext->vfptr_pnp_po->pfn_filter_res_req( > - p_dev_obj, p_irp, &action ); > + status = p_ext->vfptr_pnp_po->pfn_filter_res_req( > p_dev_obj, p_irp, &action ); > break; > > case IRP_MN_DEVICE_USAGE_NOTIFICATION: > @@ -296,16 +294,14 @@ > case IRP_MN_QUERY_RESOURCES: > CL_TRACE( CL_DBG_PNP, p_ext->dbg_lvl, > ("IRP_MN_QUERY_RESOURCES for %s\n", > p_ext->vfptr_pnp_po->identity) ); > - status = p_ext->vfptr_pnp_po->pfn_query_resources( > - p_dev_obj, p_irp, &action ); > + status = p_ext->vfptr_pnp_po->pfn_query_resources( > p_dev_obj, p_irp, &action ); > break; > > case IRP_MN_QUERY_RESOURCE_REQUIREMENTS: > CL_TRACE( CL_DBG_PNP, p_ext->dbg_lvl, > ("IRP_MN_QUERY_RESOURCE_REQUIREMENTS for > %s\n", > p_ext->vfptr_pnp_po->identity) ); > - status = p_ext->vfptr_pnp_po->pfn_query_res_req( > - p_dev_obj, p_irp, &action ); > + status = p_ext->vfptr_pnp_po->pfn_query_res_req( > p_dev_obj, p_irp, &action ); > break; > > case IRP_MN_QUERY_ID: > @@ -346,30 +342,52 @@ > case IRP_MN_WRITE_CONFIG: > CL_TRACE( CL_DBG_PNP, p_ext->dbg_lvl, > ("IRP_MN_WRITE_CONFIG for %s\n", p_ext- > >vfptr_pnp_po->identity) ); > - status = p_ext->vfptr_pnp_po->pfn_write_config( > - p_dev_obj, p_irp, &action ); > + status = p_ext->vfptr_pnp_po->pfn_write_config( > p_dev_obj, p_irp, &action ); > break; > > case IRP_MN_EJECT: > CL_TRACE( CL_DBG_PNP, p_ext->dbg_lvl, > ("IRP_MN_EJECT for %s\n", p_ext->vfptr_pnp_po- > >identity) ); > - status = p_ext->vfptr_pnp_po->pfn_eject( > - p_dev_obj, p_irp, &action ); > + status = p_ext->vfptr_pnp_po->pfn_eject( p_dev_obj, > p_irp, &action ); > break; > > case IRP_MN_SET_LOCK: > CL_TRACE( CL_DBG_PNP, p_ext->dbg_lvl, > ("IRP_MN_SET_LOCK for %s\n", p_ext- > >vfptr_pnp_po->identity) ); > - status = p_ext->vfptr_pnp_po->pfn_set_lock( > - p_dev_obj, p_irp, &action ); > + status = p_ext->vfptr_pnp_po->pfn_set_lock( p_dev_obj, > p_irp, &action ); > + break; > + > + case IRP_MN_QUERY_LEGACY_BUS_INFORMATION: > + /* See WinDDK\*\inc\ddk\wdm.h */ > + CL_TRACE( CL_DBG_PNP, p_ext->dbg_lvl, > + ("Unsupported > IRP_MN_QUERY_LEGACY_BUS_INFORMATION for %s\n", > + p_ext->vfptr_pnp_po->identity) ); > + status = p_ext->vfptr_pnp_po->pfn_unknown( p_dev_obj, > p_irp, &action ); > + break; > + > +#if (NTDDI_VERSION >= NTDDI_WIN7) > + case IRP_MN_DEVICE_ENUMERATED: > + /* sent to the bus driver's pdo to tell the bus driver that the > pdo is a > + * real/valid pdo. In between the pdo being created and > reported in > + * busrelations and this minor code, the pdo is not a valid pdo > (eg. if > + * you passed this PDO to an Ioxxx api which requires a pdo > you will > + * bugcheck), so once this minor code is received, the PDO is > 'valid' > + * and will not bugcheck. > + * The good news is IBAL does not use the PDO prior to this > call so the > + * bugcheck is not an issue [6-21-111]. > + */ > + CL_TRACE( CL_DBG_PNP, p_ext->dbg_lvl, > + ("Unsupported IRP_MN_DEVICE_ENUMERATED for > %s\n", > + p_ext->vfptr_pnp_po->identity) ); > + status = p_ext->vfptr_pnp_po->pfn_unknown( p_dev_obj, > p_irp, &action ); > break; > +#endif > > default: > CL_TRACE( CL_DBG_PNP, p_ext->dbg_lvl, > ("Unknown IRP minor function 0x%x for %s\n", > - p_io_stack->MinorFunction, p_ext->vfptr_pnp_po- > >identity) ); > - status = p_ext->vfptr_pnp_po->pfn_unknown( > - p_dev_obj, p_irp, &action ); > + p_io_stack->MinorFunction, p_ext- > >vfptr_pnp_po->identity) ); > + status = p_ext->vfptr_pnp_po->pfn_unknown( p_dev_obj, > p_irp, &action ); > break; > } > > @@ -377,8 +395,9 @@ > { > case IrpPassDown: > p_irp->IoStatus.Status = status; > - CL_TRACE( CL_DBG_PNP, p_ext->dbg_lvl, ("IrpPassDown: > passing down to PDO %p, ext %p, status %#x\n", > - p_ext->p_next_do, p_ext, p_irp->IoStatus.Status) ); > + CL_TRACE( CL_DBG_PNP, p_ext->dbg_lvl, > + ("IrpPassDown: passing down to PDO %p, ext %p, > status %#x\n", > + p_ext->p_next_do, p_ext, p_irp- > >IoStatus.Status) ); > IoCopyCurrentIrpStackLocationToNext( p_irp ); > status = IoCallDriver( p_ext->p_next_do, p_irp ); > break; > @@ -387,8 +406,9 @@ > p_irp->IoStatus.Status = status; > > case IrpIgnore: > - CL_TRACE( CL_DBG_PNP, p_ext->dbg_lvl, > ("IrpSkip/IrpIgnore: skipping down to PDO %p, ext %p, status %#x\n", > - p_ext->p_next_do, p_ext, p_irp->IoStatus.Status) ); > + CL_TRACE( CL_DBG_PNP, p_ext->dbg_lvl, > + ("IrpSkip/IrpIgnore: skipping down to PDO %p, ext > %p, status %#x\n", > + p_ext->p_next_do, p_ext, p_irp- > >IoStatus.Status) ); > IoSkipCurrentIrpStackLocation( p_irp ); > status = IoCallDriver( p_ext->p_next_do, p_irp ); > break; > @@ -405,8 +425,9 @@ > break; > } > > - CL_TRACE_EXIT( CL_DBG_PNP, p_ext->dbg_lvl, ("returned with > status %#x, p_irp->IoStatus.Status %#x\n", > - status, p_irp->IoStatus.Status ) ); > + CL_TRACE_EXIT( CL_DBG_PNP, p_ext->dbg_lvl, > + ("returned with status %#x, p_irp->IoStatus.Status %#x\n", > + status, p_irp->IoStatus.Status ) ); > > if( action != IrpDoNothing ) > IoReleaseRemoveLock( &p_ext->remove_lock, p_irp ); > > > _______________________________________________ > ofw mailing list > [email protected] > http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw _______________________________________________ ofw mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
