Hi, All,
Recently, we run a 3rd party app/win driver package on Win8.1 64bit OS, for loopback test.
We found this case:
Our PCIe device (xHCI USB HOST) claim only 32bit support in its capability registers.
But the driver give a 64 bit physical address(randomly) to the PCIe device, for example
0x0000 0001 C845 3100, where bit32 is not 0.
So our device just consider the address as 0x0000 0000 C845 3100, where 32th bit is 0, and definitely cause the wrong action, loopback check of data integraty failed.
My question is:
According to the xHCI spec, our xHCI host implementation is right as following:
What reason could cause the host driver set a non-32bit physical/bus address for 32-bit only support xhci host processing?
************************************************************
64-bit Addressing Capability
(AC64).This flag documents the addressing range capability
of this implementation. The value of this flag determines whether the xHC has implemented the
high order 32 bits of 64 bit register and data structure pointer fields. Values for this flag have
the following interpretation:
Value Description
0 32-bit address memory pointers implemented
1 64-bit address memory pointers implemented
If 32-bit address memory pointers are implemented, the xHC shall ignore the high order 32 bits
of 64 bit data structure pointer fields, and systemsoftware shall ignore the high order 32 bits of
64 bit xHC registers.
*****************************************************
- can this cause by driver uncorrectly set the DEVICE_DESCRIPTION, Dma64BitAddresses & Dma32BitAddresses?
Does this mean that the DMA device support 64 bit or not?
Why DEVICE_DESCRIPTION have only one member, instead of two, such as Dma64BitAddresses, if it is trun, then it support 64, or not if false?
- if 32bit only support xhci host or any other 32bit only device, should they could only use the physical address between 0-4GB only
How does this 32bit only device use physicall memory with address larger than 4GB?
- check the WDK 7600 HELP
**************************************************
The InterfaceType specifies the bus interface. At present, its value can be one of the following: Internal, Isa, Eisa, or PCIBus. Additional types of buses will be supported in future versions of the operating system. The upper bound on the types of buses supported is always MaximumInterfaceType.
If the ScatterGather member is set to TRUE and the InterfaceType member is set to PCIBus, the Dma32BitAddresses member is ignored and the device is assumed to support 32-bit DMA addresses.
****************************************************
- does Win8.1 still support 4 type, what about PCIe?
- And does ScatterGather true, and interfaceType PCIBus, in this case, only 32bit supported, why?