I can only give you better idea of what your options are. But I am not Xen source code expert, so this is rather summary information.
First, peripheral code is not directly part of Xen. It is mostly part of the Linux kernel and QEMU. Second, there are different virtualization modes. If the guest OS knows the Xen hypercall ABI, it can bypass the emulation overhead. It is called paravirtualization (PV) and is integrated into the Linux kernel. Windows can use something similar, but through special drivers, i.e. PVHVM. And finally, full virtualization (HVM) emulates generic device hardware interfaces by trapping CPU instructions. The device operation is in this case implemented in QEMU.
So, Xen virtualizes devices through either paravirtualization, full virtualization, device passthrough, or single-root i/o virtualization (SR-IOV). Device passthrough and SR-IOV have to be supported by the hardware and are close to metal access. They require guest OS with specific drivers for the actual peripheral, so this is something that you are trying to avoid, IIUC.
Full virtualization is, as I said earlier, QEMU emulation. A QEMU process in a Xen domain handles the responses to MMIO and PIO after they have been trapped by the hypervisor and redirected to it. Therefore the relevant information you need is for the emulated network cards, a list of which is available
here (for Xen HVM). This is also the slowest path, because the request travels through the guest OS kernel, traps into the hypervisor, gets redirected to QEMU in stub domain or domain 0, and gets translated to request in the kernel in domain 0 or a driver domain.
Finally, when using paravirtualization, the device request in the guest kernel is redirected at some level above the hardware. It is communicated using shared memory directly to kernel code in driver domain or domain 0. There are some different cases, but the idea is to bypass the re-translation and most of the re-transmission of QEMU emulation, and to enable zero-copy DMA. There are some documents describing the Xen hypercall ABI
here, but to use them effectively you should probably also consult the Linux network paravirtualization sources
here, and of course the Xen sources
here.
Of course, you could also adopt a modified Linux kernel instead, and substitute parts of the user space environment if you need to, like Android does. So, this is another option to consider.
P.S. A presentation
here may illustrate some of the Xen basics as well.