I have verified in winDBG in pci!PciExternalReadDeviceConfig that it
checks the offset and verifies that the aligned offset is below
0x100. If it is at or above 0x100 then the returning status is
0xC0000010 or STATUS_INVALID_DEVICE_REQUEST which is exactly what I am
getting.

This is contrary to msdn documentation http://msdn2.microsoft.com/En-US/library/aa906253.aspx
that says extended config space access is allowed:

"Drivers can read from the extended PCI device configuration space
(that is, more than 256 bytes of configuration data) using the
IRP_MN_READ_CONFIG request or the GetBusData method of
BUS_INTERFACE_STANDARD"

Please tell me that I am wrong! I really would rather not calculate
the offset from 0xe0000000 (using bus, dev, func) and manually read
physical memory at that location to get to the extended config space.
I WANT to use OS calls!

Thanks.
Gabe

Re: Vista does not allow config space reads beyond 0xFF by Gabe

Gabe
Thu Oct 11 09:42:14 PDT 2007

Ok, Actually I have found two places where this occurs: pci!
PciExternalReadDeviceConfig and pci!PciReadDeviceConfig

When I manually set the registers to pass the check in these two
locations, the read works! I'm guessing this is a bug in Vista. Since
I have verified the same behavior on Vista SP1 Beta, I doubt it will
be fixed any time soon. I guess the only alternative I see here is to
manually read from physical memory (like I explained above).

If I don't hear from MS about this, I guess I'll post how to calculate
those offsets and manually read the mapped config space so that others
don't waste as much time as I did trying to figure out what is going
wrong.


Vista does not allow config space reads beyond 0xFF by J

J
Tue Oct 16 08:55:23 PDT 2007

G> If I don't hear from MS about this, [...]

Have you _actually told_ Microsoft about it?


Re: Vista does not allow config space reads beyond 0xFF by Don

Don
Tue Oct 16 09:03:28 PDT 2007

And have you verified you can access the config space on this system? Note
the page you quoted also says:

"If a device does not have an extended configuration space or the platform
does not define a path for an extended configuration space on a device, the
read requests will return 0xFFFF and the write requests will have no effect.
"

So does your platform support it?


--
Don Burn (MVP, Windows DDK)
Windows 2k/XP/2k3 Filesystem and Driver Consulting
Website: http://www.windrvr.com
Blog: http://msmvps.com/blogs/WinDrvr
Remove StopSpam to reply


"J de Boyne Pollard" <j.deboynepollard@tesco.net> wrote in message
news:1192550123.678513.207230@v23g2000prn.googlegroups.com...
>G> If I don't hear from MS about this, [...]
>
> Have you _actually told_ Microsoft about it?
>



Re: Vista does not allow config space reads beyond 0xFF by Gabe

Gabe
Tue Oct 16 12:07:19 PDT 2007

>
> So does your platform support it?
>

I am pretty sure that the BIOS is allowing Vista to take control of
PCIe since in WinDBG I can do a !pci 0x101 3 0 0 (my device is on bus
3, dev 0, func 0):

..[Config Space 0x00-0xFF omitted]...

Enhanced Capabilities:
100: CapID 0002 Virtual Channel Capability
Version 1
NextPtr 800

800: CapID 0001 Advanced Error Reporting Capability
Version 1
NextPtr 000

However on another machine running Vista where I'm pretty sure the
BIOS does NOT implement the _OSC method, when I
run !pci 0x101 on the same device there isn't an "Enhanced
Capabilities" listing at all.

I have talked to the firmware developers for the first machine (the
one where
doing !pci 0x101 showed "Enhanced Capabilities") and I have been
told that they do indeed implement the _OSC method and that Vista
should
have control of PCIe.

I can't think of anything else to verify that my platform supports
it. If you
have any ideas what I could do, I would much appreciate it.

Thanks,
Gabe