In USB 3.0 application environments where multiple USB 3.0 device connections are supported on a host (especially with multiple 4 and 7-port USB 3.0 hubs), it is possible to exceed the resources allocated for the XHCI USB 3.0 controller. In this circumstance, USB 3.0-dependent peripherals will not function normally and Windows will prompt the user with a message that reads “Not enough USB controller resources. The controller does not have enough resources for this device."
XHCI controllers have a finite number of USB 3.0 endpoints (endpoints are uniquely addressable data buffers in a USB device - e.g. USB 3.0 hubs typically require 2-3 endpoints, while display adapters or wireless adapters can require 16 or more!) which can be simultaneously supported.
For example, the Intel 8 Series Chipset's USB 3.0 XHCI host controller supports 96 endpoints. However, the system memory allocation for these endpoints is managed and performed within the BIOS prior to the operating system being loaded - this is done to guarantee that system memory will be available to USB devices inserted at runtime. [Note: The amount of memory that the BIOS allocates to support USB 3.0 devices may not necessarily be enough to support the maximum number of endpoints permitted by the XHCI controller.]
The BIOS allocates memory up to its defined (by the independent BIOS vendor's internal specifications) limit. XHCI/USB 3.0 endpoints are pre-allocated 8KB of system memory (which includes 4KB for EHCI-backward compatibility). For example, an XHCI-enabled system which exhibits the “Not enough USB controller resources" error after 64 endpoint resources were consumed by USB 3.0 devices can be understood to have a maximum of: 8KB * 64 = 512KB maximum system memory allocated to support USB 3.0 devices.
This maximum system memory allocation for XHCI endpoints is not end-user modifiable in the operating system, or by changing BIOS settings. The actual BIOS vendors who produce the platform BIOS code are responsible for this value and it is not commonly advertised to the end-user.
This problem can be directly overcome by selecting a USB 3.0 host system which is known to support a higher number of XHCI endpoints. Or, by reducing the number of simultaneous active XHCI/USB 3.0 endpoints. Many USB 3.0 devices can perform satisfactorily when connected to a USB 2.0 (EHCI) host port, to provide the best backward-compatibility experience possible. EHCI endpoints require only 4KB of system memory to be allocated to service each endpoint and therefore the theoretical maximum number of EHCI/USB 2.0 endpoints is higher than the number of XHCI endpoints, on the same USB host. Some BIOS menus permit selection of whether XHCI or EHCI is enabled on a given USB host port (in other words, enabling USB 3.0 & USB 2.0, or USB 2.0 only). Consider enabling EHCI upon USB host ports where the attached devices may not necessarily require USB 3.0 for the desired operation, as this will permit additional USB 3.0 endpoint resources to be consumed elsewhere.