Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 2 Mar 2020 22:48:38 +0100
From:      Hans Petter Selasky <hps@selasky.org>
To:        Farhan Khan <farhan@farhan.codes>, freebsd-usb@freebsd.org
Subject:   Re: Understanding how USB transmission works
Message-ID:  <497ed8b0-9d9b-8c35-74f5-e9fd2e32fc08@selasky.org>
In-Reply-To: <8d84a572-f70f-4080-bfe2-263b7f97993c@www.fastmail.com>
References:  <8d84a572-f70f-4080-bfe2-263b7f97993c@www.fastmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2020-03-02 22:19, Farhan Khan wrote:
> 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.

In FreeBSD USB transfers are a statemachine. In the beginning you call 
the start method, and that invokes the statemachine callback in the 
SETUP state. There you setup all parameters, buffers, lengths etc. and 
then you can submit the USB transfer, which invoke the host controller 
drivers routines, which actually lay out the required DMA descriptors 
for data transfer. When the USB transfer is completed the statemachine 
callback is invoked again and you can choose what to do.

--HPS

> 
> 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
> 
> _______________________________________________
> freebsd-usb@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-usb
> To unsubscribe, send any mail to "freebsd-usb-unsubscribe@freebsd.org"
> 




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?497ed8b0-9d9b-8c35-74f5-e9fd2e32fc08>