Understanding how USB transmission works
Farhan Khan
farhan at farhan.codes
Mon Mar 2 21:20:07 UTC 2020
Hi all,
I am trying to understand how FreeBSD's usb transfers work compared to OpenBSD by using the rum(4) driver. I am a little confused how the FreeBSD side works.
On the OpenBSD side, it seems that after allocating the pipes, you use usbd_setup_xfer and usbd_transfer(). As an example, look at OpenBSD's /usr/src/sys/dev/usb/if_rum.c, starting on line 2027-2029, I believe that corresponds to FreeBSD's /usr/src/sys/dev/usb/wlan/if_rum.c, line 2607 (rum_setup_tx_list) which goes to 807. In this function, I see that it adds rum_tx_data (tx_data[i] to the end of tx_free. However, how does it actually send the data? I believe this occurs in the callback functions, specifically with the usbd_transfer_submit function, but I am not certain how that is triggered, especially when it is triggered by the driver, such as in a send function.
Please assist.
Thank you!
Links below to make it easy to follow:
OpenBSD:
https://github.com/openbsd/src/blob/2e342c845e9966c26657b08851237fc18e7b5ff5/sys/dev/usb/if_rum.c#L2024
FreeBSD:
1. https://github.com/freebsd/freebsd/blob/499b2b565264824f2139ebcb5d1c97404a17e7e6/sys/dev/usb/wlan/if_rum.c#L2607
2. https://github.com/freebsd/freebsd/blob/499b2b565264824f2139ebcb5d1c97404a17e7e6/sys/dev/usb/wlan/if_rum.c#L807
--
Farhan Khan
PGP Fingerprint: 1312 89CE 663E 1EB2 179C 1C83 C41D 2281 F8DA C0DE
More information about the freebsd-usb
mailing list