How to fix the issue Code 10 (The device cannot start) which is occurring during the installation of the WLAN driver ?
Analyzed three instances :
- Fresh install : code 10
- After reboot , we can able to see the device is enumerated properly
- If I disable-enable the device, it goes to the code 10 state again
Instance 1 (Fresh install : code 10):
Observation :
When I install the driver using
pnputil /add-driver ifxwificx.inf /install
In this instance, Windows host detects the PCI device , but device failed to start
How we can confirm the Windows host detects the PCI device :
Logs from windbg:
!devnode 0 1 ifxwificx
DevNode 0xffffe605b1e91ba0 for PDO 0xffffe605b1e90060
InstancePath is "PCI\VEN_12BE&DEV_BD31..."
ServiceName is "ifxwificx"
State = DeviceNodeRemoved
Previous State = DeviceNodeStartCompletion
Problem = CM_PROB_FAILED_START
Problem Status = 0xc00000c0
Meaning of the above windbg log :
Device reached the windows host start-completion state , but start is failed with the status 0xc00000c0 (STATUS_DEVICE_DOES_NOT_EXIST)
!devstack ffffe605b1e90060
ffffe605b1e90060 \Driver\pci
At this time, the driver stack contains only PCI
Later PCI config space become inaccessible
Rd offset 0x0000 = 0xffff
Rd offset 0x0244 = 0xffffffff
Rd offset 0x0248 = 0xffffffff
Analysis :
WLAN PCIe endpoint initially enumerates, but later the PCI config space become inaccessible that leads to code 10
Instance 2 (When we reboot the device is enumerated properly):
After reboot/powercycle, the same device starts successfully
Windbg logs
!devnode 0 1 ifxwificx
State = DeviceNodeStarted
Previous State = DeviceNodeEnumerateCompletion
DeviceNodeResourcesAssigned
DeviceNodeStartPending
DeviceNodeStartCompletion
DeviceNodeStartPostWork
DeviceNodeStarted
!devstack <PDO>
\Driver\ifxwificx
\Driver\pci
The above log indicates that the driver stack is in working state
PCI endpoint also is in working condition
Device State = PciStarted
Logical Device Power State: D0
BAR0 Mem: 0x638f0000 length 0x10000
BAR2 Mem: 0x63000000 length 0x800000
Interrupt Resource: MSI, 1 message granted
Analysis:
In clean boot, PCIe power/reset/link sequencing succeeds. Windows assigns BARs and MSI, ifxwificx attaches, and the driver reaches normal runtime
PCIe power/reset/link sequencing:
Shutdown ↓ platform powers PCIe/WLAN domain down ↓ endpoint loses old internal state ↓ root port / endpoint reset state is re-established ↓ REFCLK becomes valid ↓ PERST# is asserted and later released ↓ PCIe link trains again from scratch ↓ endpoint config space becomes readable ↓ Vendor ID = 12BE ↓ Windows assigns BAR/MSI ↓ ifxwificx starts
Instance 3 (on disable and enable the device the same issue is repeated):
Observation :
After the device is working, disabling and enabling it causes the same failure pattern as fresh install.
Windbg logs
!devnode 0 1 ifxwificx
State = DeviceNodeRemoved
Previous State = DeviceNodeStartCompletion
Problem = CM_PROB_FAILED_START
Problem Status = 0xc00000c0
Driver stack only contains PCI
!devstack <PDO>
\Driver\pci
PCI extension state
Device State = PciNotStarted
Logical Device Power State: D3
PCI config space
Wr offset 0x004c = 0x200b
Rd offset 0x004c = 0xffff
Rd offset 0x0000 = 0xffff
PCI start worker
pci!PciDeviceStartWorker Rd offset 0x0000 = 0xffff
For the production ready wlan driver, the device should be up when i give ,
pnputil /add-driver ifxwificx.inf /install (during installation itself) right .?
but in our case , it is in the code 10 .?
How to resolve this code 10 issue so that during the installation itself, the driver and it's functionalities should be visible?