Hello NTDEV community members,
May I ask your opinion/help on below query -
**
In short** - Is it possible to issue FLR from user application?
In Details - A multi function NVMe drive has changed one of its function IOQ pair and/or Interrupt vector. To get this effected on host the BAR register need to be re-read by host OS. The best way to achieve this is to use FLR on the device.
On Linux I can use ‘echo 1 > /sys/bus/pci/devices/BDF…’ and rescan to achieve it.
On Windows, I tried to search the same. I could find the below link -
https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/resetting-and-recovering-a-device
It specifically calls out that FLR can be implemented either by bus driver or by ACPI firmware.
I was giving up the hope that I can do FLR on windows from user space.
But then I came across Discrete Device Assignment (DDA) on Windows -
https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/deploy/deploying-storage-devices-using-dda#dismount-the-device
If I follow below steps -
1. Disable (Disable-PnpDevice -InstanceId -Confirm:$false)
2. Unmount (Dismount-VMHostAssignableDevice -LocationPath $locationPath)
3. mount (Mount-VMHostAssignableDevice -LocationPath $locationPath)
4. Enable (Enble-PnpDevice -InstanceId -Confirm:$false)
The device BAR is reread – essentially FLR is achieved in different way from user space.
Based on above finding I was trying to achieve above effect of steps (1 to 4 above) without having hyper-V services.
My understanding is - if FLR can be achieved by above steps with hyper-V services enabled, there must be a way to achieve FLR by using either devcon.exe or SetupDI* calls without hyper-V.
But my search for this effect has not yielded any result so far.
Does anyone from this group provide some hints on it.
Note: Sorry to posting here though it is not related to driver development directly. But I am not able to find more suitable group for this question.