Re: Trouble loading firmware to USB device
- Reply: Hans Petter Selasky : "Re: Trouble loading firmware to USB device"
- In reply to: Hans Petter Selasky : "Re: Trouble loading firmware to USB device"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 19 Apr 2022 03:51:10 UTC
On 4/18/22 14:57, Hans Petter Selasky wrote:
> Hi,
>
> error = tsleep(&usc->wait_msg_id, 0, "athnfw", 5);
>
> This means wait 5 ticks which is typically 5ms before timing out,
> which is probably too short!
>
> This code is wrong for FreeBSD.
>
> The lock should cover the whole section and you should use msleep
> instead.
>
> ATHN_LOCK(sc);
> error = usbd_do_request(usc->sc_udev, &sc->sc_mtx, &req, NULL);
> if (error == 0 && usc->wait_msg_id != 0) {
> printf("Error is %d\n", error);
> error = msleep(&usc->wait_msg_id, 0, "athnfw", hz); /* wait 1
> second at most */
> if (error) {
> ATHN_UNLOCK(sc);
> printf("Exiting condition %d\n", error);
> return error;
> }
> }
> ATHN_UNLOCK(sc);
>
> --HPS
Thank you! I made the changes, but the problem remains, namely the
athn_usb_intr INTR RX callback is never called.
-----
ATHN_LOCK(sc);
error = usbd_do_request(usc->sc_udev, &sc->sc_mtx, &req, NULL);
if (error == 0 && usc->wait_msg_id != 0) {
printf("Error is %d\n", error);
error = msleep(&usc->wait_msg_id, &sc->sc_mtx, 0, "athnfw",
hz); /* Wait 1 second at most */
if (error) {
ATHN_UNLOCK(sc);
printf("Exiting condition %d\n", error);
return error;
}
}
ATHN_UNLOCK(sc);
-----
Is this something I need to call manually? We spoke earlier about how
the RX INTR callbacks are not automatically done and must be done by the
driver. The only time the athn_usb_intr RX Intr is called is when I
manually do so at initialization.
- Farhan