A z pohledu dat, je to "jenom změna pár hlaviček" a DMA jepřešoupne místo do USB fifo do PCIe fifo
Ten výslednej performance hit mě taky docela zajímá
XHCI imho nepracuje s high level streamy, ale ring bufferem pro transfer USB paketu - requestu a odpovedi.
Ale tak neni nic jednodussiho, nez se podivat do XHCI specifikace, podivat se co za primitiva to pouziva (zrejme dma+irq), jaky je format bufferu a pak to naroubovat na ten PCIe endpoint.
Performance hit tam vidim v tom, ze musite pres SW uzavrit smycku mezi requestem a odpovedi, takze tam bude velka latence / roundtrip, a pak to segmentovani payloadu do paketu, kterym musite pridat hlavicky, takze ono to nakonec nebude ciste DMA, ale sw preskladani.
Pokud ridite oba konce spojeni (jako FW pro iMX8, tak host drivery), tak by bylo lepsi ten cas obetovat do napsani optimalniho V4L2 driveru (na coz mozna snadneji najdete exampl, pro ten pcie endpoint), nez do vytvoreni XHCI abstrakce. A jako nestandardni reseni na pul cesty, by byla implementace vlastniho virtualniho USB kontroleru, kdy nemusite resit XHCI formatovani registru/bufferu, ale nejak to protistrane predate po svem.
Kdybych se mel ridit cenout a nechtel psat drivery, tak ten iMX8 vyhodim a pouziji UVC streamer ASSP od FTDI (FT600/601)