From: quyq on
I didn't find much clue from Internet about this error code.
I'm working on a driver for a PCIe device. The driver works fine on our
setup but it does not work on two setup at remote sites. The scenario is:
The host is a HP XW4600 with Windows XP SP3 installed.
The driver is able to be installed without any problem.
However, our test code can only correctly access the device in a very short
period right after the driver installed.
Farther more, I did a test like this: from device manager, disable the PCIe
device, then enable it. For IRP_MN_START_DEVICE, my driver will setup a
complete routine and then invoke IoCallDriver to forward this Irp to bus
driver. But the returned Irp status is 0xC000009E, i.e.
STATUS_DEVICE_POWER_FAILURE. The device will disappear from the control panel
device list right after I enable it. If I do a scan for hardware then it will
show up in the device list again. And this time, there is no power failure
error returned. As I mentioned above, test code can access the device right
at this point but will not work after a short period.
Our PCIe driver is really simple, it does not directly handle any IRP
related to power management. All such IRP will be forward to low level bus.
I'm suspecting this is a hardware defect. Our remote site already tried to
test it with same model PC as we used. They also tried two PCIe device setup
but the result is same.
Any suggestion for what could go wrong? BTW, the PCIe device has it own
power supply, so current should not be a problem. The device is a FPGA with
3rd party's IP.
Thanks in advance.
From: Maxim S. Shatskih on
> Our PCIe driver is really simple, it does not directly handle any IRP
> related to power management. All such IRP will be forward to low level bus.

Is it a KMDF driver?

--
Maxim S. Shatskih
Windows DDK MVP
maxim(a)storagecraft.com
http://www.storagecraft.com

From: quyq on
No, it's not. The driver is updated from an old WDM driver that we developed
about five years ago. The driver basically just provide user space
application to access resource on the PCIe device. Here is psedu log when the
device is enabled:
DriverEntry -begin
DriverEntry -end
AddDevice -begin
AddDevice -end
DispatchPnp begin, MinorFunction IRP_MN_QUERYLEGACY_BUS_INFORMATION
DispatchPnp end with STATUS_NOT_SUPPORTED
DispatchPnp begin, MinorFunction IRP_MN_FILTER_RESOURCE_REQUIREMENTS:
DispatchPnp end with STATUS_SUCCESS
DispatchPnp begin, MinorFunction IRP_MN_START_DEVICE
IrpCompleteRoutine return
Return status is 0xc000009e: STATUS_DEVICE_POWER_FAILURE

With good setup, the last line of above log should be STATUS_SUCCESS.
Note, for above IRP, our driver only handle the START_DEVICE one. So I don't
think the STATUS_NOT_SUPPORTED for the query IRP is a problem.
Thanks.

"Maxim S. Shatskih" wrote:

> > Our PCIe driver is really simple, it does not directly handle any IRP
> > related to power management. All such IRP will be forward to low level bus.
>
> Is it a KMDF driver?
>
> --
> Maxim S. Shatskih
> Windows DDK MVP
> maxim(a)storagecraft.com
> http://www.storagecraft.com
>
> .
>
From: Pavel A. on
Do you get this status from some driver below yours, after passing the
IRP_MN_START_DEVICE down the stack?
WinXP does not know what is PCIe, so it should not be something specific to
PCIe.
Except if this indeed is a hardware failure, which the pci bus driver
detects in a generic way.
For example, _if_ it tries to set the power state register in the config
space to D0,
but the read-back value is unexpected.
--pa


"quyq" <quyq(a)discussions.microsoft.com> wrote in message
news:76D21A5E-0F9A-43F8-B346-B2E183EF4E74(a)microsoft.com...
> No, it's not. The driver is updated from an old WDM driver that we
> developed
> about five years ago. The driver basically just provide user space
> application to access resource on the PCIe device. Here is psedu log when
> the
> device is enabled:
> DriverEntry -begin
> DriverEntry -end
> AddDevice -begin
> AddDevice -end
> DispatchPnp begin, MinorFunction IRP_MN_QUERYLEGACY_BUS_INFORMATION
> DispatchPnp end with STATUS_NOT_SUPPORTED
> DispatchPnp begin, MinorFunction IRP_MN_FILTER_RESOURCE_REQUIREMENTS:
> DispatchPnp end with STATUS_SUCCESS
> DispatchPnp begin, MinorFunction IRP_MN_START_DEVICE
> IrpCompleteRoutine return
> Return status is 0xc000009e: STATUS_DEVICE_POWER_FAILURE
>
> With good setup, the last line of above log should be STATUS_SUCCESS.
> Note, for above IRP, our driver only handle the START_DEVICE one. So I
> don't
> think the STATUS_NOT_SUPPORTED for the query IRP is a problem.
> Thanks.
>
> "Maxim S. Shatskih" wrote:
>
>> > Our PCIe driver is really simple, it does not directly handle any IRP
>> > related to power management. All such IRP will be forward to low level
>> > bus.
>>
>> Is it a KMDF driver?
>>
>> --
>> Maxim S. Shatskih
>> Windows DDK MVP
>> maxim(a)storagecraft.com
>> http://www.storagecraft.com
>>
>> .
>>
From: quyq on
Yes, the status is returned from driver below ours. I guess it is Microsoft's
PCI bus driver. I also studied some Microsoft document(white paper) that
claimed windows XP will treat PCIe device same way as PCI. AFAIK, our PCIe
device does not need any special configuration for power state. The weird
thing is sometimes the windows XP bus driver can successfully start the
device without any error returned, but after several seconds our application
will lost the accessibility to the device. We are also suspecting some float
hardware pin is causing problem. I'm trying to get the h/w from our remote
site.

"Pavel A." wrote:

> Do you get this status from some driver below yours, after passing the
> IRP_MN_START_DEVICE down the stack?
> WinXP does not know what is PCIe, so it should not be something specific to
> PCIe.
> Except if this indeed is a hardware failure, which the pci bus driver
> detects in a generic way.
> For example, _if_ it tries to set the power state register in the config
> space to D0,
> but the read-back value is unexpected.
> --pa
>
>
> "quyq" <quyq(a)discussions.microsoft.com> wrote in message
> news:76D21A5E-0F9A-43F8-B346-B2E183EF4E74(a)microsoft.com...
> > No, it's not. The driver is updated from an old WDM driver that we
> > developed
> > about five years ago. The driver basically just provide user space
> > application to access resource on the PCIe device. Here is psedu log when
> > the
> > device is enabled:
> > DriverEntry -begin
> > DriverEntry -end
> > AddDevice -begin
> > AddDevice -end
> > DispatchPnp begin, MinorFunction IRP_MN_QUERYLEGACY_BUS_INFORMATION
> > DispatchPnp end with STATUS_NOT_SUPPORTED
> > DispatchPnp begin, MinorFunction IRP_MN_FILTER_RESOURCE_REQUIREMENTS:
> > DispatchPnp end with STATUS_SUCCESS
> > DispatchPnp begin, MinorFunction IRP_MN_START_DEVICE
> > IrpCompleteRoutine return
> > Return status is 0xc000009e: STATUS_DEVICE_POWER_FAILURE
> >
> > With good setup, the last line of above log should be STATUS_SUCCESS.
> > Note, for above IRP, our driver only handle the START_DEVICE one. So I
> > don't
> > think the STATUS_NOT_SUPPORTED for the query IRP is a problem.
> > Thanks.
> >
> > "Maxim S. Shatskih" wrote:
> >
> >> > Our PCIe driver is really simple, it does not directly handle any IRP
> >> > related to power management. All such IRP will be forward to low level
> >> > bus.
> >>
> >> Is it a KMDF driver?
> >>
> >> --
> >> Maxim S. Shatskih
> >> Windows DDK MVP
> >> maxim(a)storagecraft.com
> >> http://www.storagecraft.com
> >>
> >> .
> >>