Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 02 Mar 2020 14:45:40 -0700
From:      Ian Lepore <ian@freebsd.org>
To:        Farhan Khan <farhan@farhan.codes>, freebsd-usb@freebsd.org
Subject:   Re: Understanding how USB transmission works
Message-ID:  <afa2a8b22b6fa3e4988ff3baecba04829894c87c.camel@freebsd.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 Mon, 2020-03-02 at 16:19 -0500, 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.
> 
> 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
> 

I think you're probably looking for:

https://github.com/freebsd/freebsd/blob/499b2b565264824f2139ebcb5d1c97404a17e7e6/sys/dev/usb/wlan/if_rum.c#L1623

Note that I don't know anything about the if_rum driver in general, I
just know to look for occurrances of usbd_transfer_start().

-- Ian






Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?afa2a8b22b6fa3e4988ff3baecba04829894c87c.camel>