[bus] Use new bus creation strategy
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Fri, 21 May 2010 19:33:32 +0000 (15:33 -0400)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Fri, 21 May 2010 19:33:32 +0000 (15:33 -0400)
commitee22e3f47b5745cbbd82bd4dbe61ae079b690082
tree09c7de233603ae4bda7f033c10071f060f8316e9
parent09743972d1ed6483a9ac1be0a6011f991390b9b5
[bus] Use new bus creation strategy

When creating the boot bus or when a user manually installs
a bus device, the bus module will use the new device creation
scheme.

When the bus module initializes, it creates the boot bus,
which is a root-enumerated device via IoReportDetectedDevice().
Using this kernel function means that the PnpManager owns the
PDO.  If a user manually installs a bus device, PnpManager also
owns the PDO.  So the create_pdo() routine for a bus doesn't
make a lot of sense, except for indirectly for the case of the
boot bus only.

Also, when the IoReportDetectedDevice() is used, we must
manually call our attach_fdo() function to create the
DEVICE_OBJECT which we own and which we will associate with
the driver-internal bus & device details.

There is a really big nasty TODO left over in this commit
which should be removed as soon as possible.  In shifting to
the new device classing scheme, we are part-way through,
where some devices use a DEVICE_OBJECT's DeviceExtension as
a device__type_ptr, and the bus uses it as a device__type_ptr*.
So for now, we have the mini IRP handling system sense if it
should compensate for this.

The next steps will be to move all of the various disk types
to use counterpart strategies for device classing.  But hey,
it still boots.
src/aoe/driver.c
src/include/bus.h
src/include/device.h
src/winvblock/bus/bus.c
src/winvblock/bus/dev_ctl.c
src/winvblock/bus/pnp.c
src/winvblock/disk/pnp.c
src/winvblock/irp.c