Re: Vista fixes PCIe re-install problem ... why ?
- From: "Eliyas Yakub [MSFT]" <eliyasy@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: Fri, 22 Dec 2006 06:50:51 -0800
From our PCI dev:
There are two more possibilities I thought of. First is that I believe we
made a change to Vista to correct a bug where we were not waiting the
requisite 10ms after putting a device into D0 before carrying on with the
enumeration of a device. He could test this by putting the device into D0
at some point after the uninstall and before the reinstall through the
debugger. This would cause Server 2003 to avoid the power state transition
and make the delay a non-issue.
A second possibility is that the device clears a theoretically read-only
register when it goes through a D3->D0 transition. The Subsystem ID
register is the most likely culprit. One possibility is that we saw this
device in our internal testing of Vista and added it to a hack database of
devices that act in this way. Devices on the hack list won't fail Start if
their subsystem ID changes.
If he sends the vendor/device IDs of the device, I can check this out. If
it's the power issue, I'll look into what the backporting status of the fix
is.
However, the timing issue is still a possibility. We cache the
vendor/device IDs of a device when it is first found, when we create a PDO
for the device. These cached IDs are what is used for driver matching, and
since a driver uninstall/reinstall doesn't cause the PDO to be recreated,
the fact that we found the right driver the second time around doesn't mean
that the device was still present at that time - we used cached IDs. Also,
two of the big transitions that can cause a device to disappear for some
period of time are device firmware download and power state transitions.
The first, if it applies to this device, would only happen in AddDevice or
Start. The second happens in Start. In both cases it is reasonable for the
entire driver load to happen properly but for the device to disappear during
Start if one of these situations is happening.
To debug, you can set a breakpoint on PcipIsSameDevice. This will compare a
config header read from the hardware with the cached values in the PDO. It
should be possible to step through this routine and see where the mismatch
is occurring. If the config header buffer contains all FF's, then we're
probably talking about a timing problem where the device momentarily becomes
unavailable. If it looks right but the subsystem ID is wrong, we're
probably talking about the subsystem ID problem above.
If it is one of these kinds of problems, then it's not reasonable for OS's
to preserve behavior across versions - we're talking about hardware bugs.
We make every effort to provide consistent backwards compatibility, but
preserving perfect compatibility, even for non-compliant hardware, means
that we can't make any changes, not even bugfixes.
-Eliyas
.
- References:
- Re: Vista fixes PCIe re-install problem ... why ?
- From: Eliyas Yakub [MSFT]
- Re: Vista fixes PCIe re-install problem ... why ?
- Prev by Date: Re: Windows VISTA Driver Development Kit.
- Next by Date: Re: How to install driver like NDIS on Win XP pro with command line?
- Previous by thread: Re: Vista fixes PCIe re-install problem ... why ?
- Next by thread: ieee1394 driver resume blue screen
- Index(es):
Relevant Pages
|