Hi,
Just some links:
USB stack for dos unreal mode and pascal ;) http://se.aminet.net/pub/OS2/hobbes/dos/Usb4pas.zip
Also http://git.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=tree;f=drivers/usb;hb=H... (u-boot is the bootloader for ARM/MIps/PowerPC/SH4...)
As for the SMI handler. Maybe we can hide the libpayload USB stack in SMI, it would allow us to run it in 32bit The 16bit code would be just some SMI trap like:
mov ax, trap command .... mov dx, PMIO+2F out dx, ax
The advantage would be that we will have good libpayload USB stack and we could share it easily. I think USB might be forced to generate SMI on USB interrupt which would make irqs transparent too. The only problem is quite hard to debug such code (when running in SMM).
Rudolf