aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/usb
Commit message (Collapse)AuthorAgeFilesLines
...
* usb/if_mos.c: Fix incorrect SPDX IDAlexander Ziaee2025-05-281-2/+2
| | | | | | | | Fixes: 718cf2ccb995 (further adoption of SPDX) MFC after: 3 days Reviewed by: carlavilla, imp, mhorne Approved by: carlavilla, mhorne (mentors) Differential Revision: https://reviews.freebsd.org/D50374
* dwc_otg_fdt: do not create and leak extra usbus childAndriy Gapon2025-05-191-4/+0
| | | | | | | | dwc_otg_init() already takes care of creating the bus and setting up sc to point to it. Fixes: 518da7ace813e MFC after: 1 week
* usb/quirks: Remove overly broad quirksWarner Losh2025-05-071-10/+0
| | | | | | | | | | | | | | | | | | | | Now that we have a safe way to detect the vast majority of problems with SYNCHRONIEZ CACHE, and since I have devices from many of these vendors that work just fine (one of which will hang if you send it a SYNCHROMIZE CACHE), I think these should all be reverted. The details of when they were added are sketchy, the age of the devices in question means these vendors have many generations of products after and the general over-quirking of SYNCHRONIZE CACHE all point to just removing them and adding back specific quirks should any need arise after trying other means to debug. The APPLE quirk was added because the autoquirk code would hang an ipod with RockBox with a reset loop in the firmware. Since it was quirked, it disabled the autoprobe and started working. Now that we've disabled the autoprobe, we can remove it for sure. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D49478
* usb: Make autoquirk code optional and opt outWarner Losh2025-05-073-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There are significant problems with the current autoquirk code. This results in quite a bit of bogus over-quirking. Most commands don't do the proper "sense" dance to get the scsi sense codes to see if the failures are interesting or not. A number of 'sleeps' are used to try to get around this, but they are racy. Rather than fix these, use better hueristics just introduced to catch SYNCHRONIZE CACHE problems, etc. The test for getting max lun number was bogus. It would set this quirk both on errors and when 0 was returned. It appears to be an attempt to filter our REPORT LUNS error messages that are actually benign (we ignore the errors properly). These errors are also only filtered sometimes, so the test is unreliable. In addition, it's doing exactly the same test that the umass driver is doing and recovering in the same way. There's no value add here. The TEST UNIT READY almost always fails because the drive is becoming ready. The SENSE is usually UNIT ATTENTION 28/0 "Drive went from not ready to ready" which is a normal condition. The crazy looping to get INQUIRY data is odd. It shouldn't be needed and rarely actually fails (I've not seen any, despite using this code on some really sketchy drives). It should set a NO_INQUIRY quirk if it fails, but instead sets a whole bunch of other, mostly unrelated quirks if it fails. The INQUIRY code also doesn't recognie RBC devices as well as DIRECT devices. This means it fails on some older generations of cameras that could actually benefit from this code. The SYNCHRONIZE CACHE test is flawed. It will do the same failed test over and over again in the event the command succeeds. There are better ways to detect probelms. The START STOP test is useless. It doesn't really help on any of the devices I've tested on. It appears to be another result of the failure to properly obtain the SENSE code and do appropriate things with it. The PREVENT ALLOW test is useless. It is overwhelmingly used to prevent an error message later. However, after it was added the error message was changed to be informative and not scary. We properly probe this at runtime on all the devices I tested on. At the end of the tests, we try to clear the SENSE errors, but do so imperfectly. Only one is cleared and we use INQUIRY rather than the better TEST UNIT READY. Attempted re-write to fix this caused additional problems as the reset code was not at all robust (the same sequnce in umass / CAM worked when we disabled this code). In addition, the over-quirking and hair-triggered declaration that SYNCHRONIE CACHE is bad would mean that some working drives that have cache wouldn't flush the cache when WCE=1, leading to corruption. Thankfully, nearly all (but not all) the USB sticks I have default to WCE=0. One, however, did default to WCE=1 and some allow setting it (despite the fact this is a bad idea on removeable devices). However, for real disks attached via USB could be tripped up over this. When we do reset, some small subset of drives are now failing to probe. There are reports on the FreeBSD forums that at least one ebook reader no longer works. A different ebook reads is affected as well (one of my long-time friends has htis). in my collection, one USB memory stick, one SD card reader and one USB to generic PATA adapter no longer work. All of them are pretty obscure (you could literally say they were found in my junk drawer), but are troubling. These problems appear to disappear if we stop doing the auto-quirk code. For all these reasons, I'm turning this off and will likely remove it entirely in the future once the alternative SYNC CACHE code has provent itself. Differential Revision: https://reviews.freebsd.org/D49477 Sponsored by: Netflix
* umass: Bring in small fix from NetBSD's umassWarner Losh2025-05-071-4/+9
| | | | | | | | | | | | | | When completing a request for UFI, don't fail the request on non-zero asc/ascq values if we've done a request sense. This idea is from umass.c 1.100 by mycroft. He used it to help elminate the INQUIRY_SHORT quirk that we still have. However, it will make little difference because we treat both return values the same for CBI. And it appears we have (maybe bogusly) some devices that specify this quirk that aren't CBI. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D49475
* umass: Fix a direct call to sc_transformWarner Losh2025-05-071-5/+9
| | | | | | | | | | Call umass_std_transform instead of following the sc_transform member to get the standard transforms now that has moved to umass_std_transform. Pass NULL as the CCB so that we don't stomp on the status that was just set (and allow that in std_transform). Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D49474
* umass: Be more consistent about how we fail bad commandsWarner Losh2025-05-071-4/+1
| | | | | | | | Elsewhere, if we fail a command, we use SCSI code ILLEGAL REQUEST/24/00, but here we were using the CAM code for illegal request. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D49473
* umass: Move INQUIRY and TEST UNIT READY quirks to umass_std_transformWarner Losh2025-05-071-64/+36
| | | | | | | | Only doing a short inquiry and converting TUR to START STOP UNIT are the same everywhere, so move those quirks to umass_std_transform. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D49472
* umass: Move common code into umass_std_transformWarner Losh2025-05-071-43/+11
| | | | | | | | | | Move the length checks, and byte copying into umass_std_transform. The copies are typically small and this simplifies the code a lot. Move zeroing the buffer now to only when we change TEST UNIT READY to START STOP. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D49471
* umass: make *_transform() return a boolWarner Losh2025-05-071-32/+31
| | | | | | | These are now boolean, so make them return a boolean. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D49470
* umass: Simplify umass_std_transform to eliminate fake successWarner Losh2025-05-071-13/+6
| | | | | | | | Now that nothing returns (2) to fake the success of the command, eliminate that magic number by eliminating the case. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D49469
* umass: Fail SYNCHRONIZE_CACHE for UFIWarner Losh2025-05-071-4/+3
| | | | | | | | | Just go ahead and fail SYNCHRONIZE_CACHE commands for UFI. This standard doesn't have a cache to flush, and the upper layers (aka da) will notice sync cache failed and won't send it again. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D49468
* umass: Document the ideal that it's better to fail bad commandsWarner Losh2025-05-071-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | Generally, lying to the periph drivers about commands working is a bad idea. They cannot get a global insight into the actual capacities of the device when commands just work. There's good reason to intercept bad commands at times, and to prevent the device from being exposed to commands that, for example, hand the device. However, upper layer periph drivers is the better place to cope with devices that don't support the commands since it can make other inferences about the device when it has wider knowledge. But this represents a change in philosphy, so document that as well. This shift happened for some commands a while ago. Many of the quirks existed only to avoid whining errors on boot that were benign and were a big burden. So da and cd slowly stopped the whining. Except in cases where the command hangs the drive, we should limit new quirks and avoid overly broad quirks (things work, but are less performant or reliable, again mostly to avoid harmless errors that are no longer printed). Other sims will likely need some help with this. Differential Revision: https://reviews.freebsd.org/D49467 Sponsored by: Netflix
* umass: fail synchronize_cacheWarner Losh2025-05-071-3/+1
| | | | | | | | | | | | | | | | | | | | When we know the umass device doesn't support synchronize cache (either probed or hard quirk), fail the command w/o sending it to the device. The da driver is the only driver that sends this command, and since this filter was written has grown the ability to catch the failure and never send the command again. In an ideal world, we'd let the da driver work this out. However, there's a lot of devices that hang when this command is sent in a way that's impossible to detect other than a black list. There's also a number that require a hard USB endpoint reset to recover, which the autoquirk code takes care of. So umass has to act as a filter. By failing this command, we're able to avoid upper level BIO_FLUSH commands by tagging the underlying disk as not supporting that. Differential Revision: https://reviews.freebsd.org/D49466 Sponsored by: Netflix
* umass: Move illegal opcode return to a functionWarner Losh2025-05-071-14/+25
| | | | | | | | | | | | Move illegal opcode completion of ccb to its own function. da can cope with a number of different failures now (it didn't used to), so we should return the unnsupported commands as illegal rather than faking completion. This will allow da to, in the future, do more intelligent things in response to these quirks. Other SIMs will need to do this too. Differential Revision: https://reviews.freebsd.org/D49465 Sponsored by: Netflix
* hidraw(4): Add additional hidraw input/output report ioctlsVladimir Kondratyev2025-04-271-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | to Linux hidraw compatibility API. Respective Linux commit f43d3870cafa made by Dean Camera message is: Currently the hidraw module can only read and write feature HID reports on demand, via dedicated ioctls. Input reports are read from the device through the read() interface, while output reports are written through the write interface(). This is insufficient; it is desirable in many situations to be able to read and write input and output reports through the control interface to cover additional scenarios: - Reading an input report by its report ID, to get initial state - Writing an input report, to set initial input state in the device - Reading an output report by its report ID, to obtain current state - Writing an output report by its report ID, out of band This patch adds these missing ioctl requests to read and write the remaining HID report types. Note that not all HID backends will neccesarily support this (e.g. while the USB link layer supports setting Input reports, others may not). FreeBSD native uhid(4) compatible API already has similar ioctls. MFC after: 3 days
* usb: if_ure: stop touching the mbuf accounting on rxq insertionKyle Evans2025-04-202-2/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | uether_rxmbuf() assumes the uether_newbuf() model where the caller has just set m_len to the entire size of the mbuf, and passed the final size into uether_rxmbuf() for finalization. In if_ure we're creating our own mbuf chains, and the accounting is all already accurate. uether_rxmbuf's logic won't work at all for a chain, so let's add an assertion to that effect (but I think the other callers were all OK). This fixes a panic on my Windows DevKit when undergoing any kind of network stress that surfaces after the bogus mbuf is injected into the network stack (usually observed in `m_dup`). markj and I had spent some time investigating it and decided there's some kind of buffer underrun happening; the rx packet descriptor reports a length longer than what's actually available. We discard the rest of the transfer, but then we end up fetching it in a subsequent transfer and end up casting packet data to a `struct ure_rxpkt` incorrectly. It would be better to fix the underlying root cause, but this is a reasonable mitigation in the interim. Reviewed by: markj Fixes: 7d5522e16a ("A major update to the ure driver.") Differential Revision: https://reviews.freebsd.org/D43465
* if_run: Add sitecom device idNia Alarie2025-04-012-0/+2
| | | | | | Reviewed by: thj, adrian Obtained from: NetBSD Differential Revision: https://reviews.freebsd.org/D49588
* if_rsu: Add sitecom device idNia Alarie2025-04-012-0/+2
| | | | | | Approved by: thj, adrian Obtained from: NetBSD Differential Revision: https://reviews.freebsd.org/D49588
* mtw: fix compilation with IEEE80211_SUPPORT_SUPERG enabledAdrian Chadd2025-03-281-3/+6
| | | | | | | | It looks like this was missed during the driver development and porting. Differential Revision: https://reviews.freebsd.org/D49512 Reviewed by: thj
* uath: add support for GCMP-128 encryptionAdrian Chadd2025-03-271-0/+6
| | | | | | | | | | | | Explicitly set the software ciphers; add support for GCMP-128. Locally tested: * AR5523 11abg NIC, 2/5GHz STA operation, GCMP forced in wpa_supplicant.conf Differential Revision: https://reviews.freebsd.org/D49370 Reviewed by: bz
* usb-msctest: Be more conservative setting GETMAXLUN quirkWarner Losh2025-03-161-9/+4
| | | | | | | | | | Only set the GETMAXLUN quirk when it causes an error, but don't set it when it returns 0. Since we reset the device when we set any quirk, only set this quirk when it generates an error so umass will avoid it. When the command works, there's no reason for umass to avoid it at all. MFC After: 1 week Sponsored by: Netflix
* umass/quirk: Remove useless quirk for Transcend flashWarner Losh2025-03-161-2/+0
| | | | | | | | | | | | | | | I have several of these. They all work without these quirks (either the auto quirk mechanism does the right thing, or a likely soon-to-be-removed vendor catch-all does the right thing, or no probing at all does the right hting). Both PREVENT ALLOW and SYNCHRONIZE CACHE are (a) unimplemented but (b) return the proper asc/ascq code so da just does the right thing, quirk or no. This was a left-over from the days where you'd get scary error messages, but we'd work just fine. Now that the scary error messages are gone (and only a calm one under bootverbose), this can be deleted. Sponsored by: Netflix
* umass/quirks: Remove nonsensical NO_GETMAXLUN quirksWarner Losh2025-03-161-10/+9
| | | | | | | | | | We only try to do a GETMAXLUN query of BBB devices. If we're forcing the device to be CBI, then it's not BBB. Delete the quirks from there. Also, UFI devices are all CBI as well, so remove the quirk from there as well. Confirmed this isn't needed with three different floppy disk drives I have. Sponsored by: Netflix
* usb: Use bus_detach_children instead of bus_generic_detachJohn Baldwin2025-03-121-1/+1
| | | | | | | | | The USB bus performs additional teardown steps in between detaching child devices and deleting child devices. Reported by: phk, thj Tested by: phk Fixes: e9d3857040a1 ("Use bus_detach_children instead of bus_generic_detach")
* umass: Remove some 20-year-old dead codeWarner Losh2025-03-111-4/+0
| | | | | | | | | | | | | | | A REQUEST SENSE CDB was just copied into the cmd buffer, so testing for INQUIRY will always fail. Remove the dead code. This code was added, apparently by mistake in 2003. 8541fbec7900e merged changes from NetBSD's umass_scsipi.c 1.8 to address some BBB bulk-in clear problems. NetBSD had fixed a problem in the FORCE_SHORT_INQUIRY quirk code they had ported from FreeBSD that FreeBSD also needed. That merge also included the dead code, which was not in NetBSD. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D49311
* wsp: Fix whitespacesJoshua Rogers2025-03-071-9/+11
| | | | Signed-off-by: Joshua Rogers <Joshua@Joshua.Hu>
* wsp: Rename max_finger_area sysctl to max_finger_diameterJoshua Rogers2025-03-071-9/+9
| | | | | | The value of this sysctl is not an area, but a maximum diameter. Signed-off-by: Joshua Rogers <Joshua@Joshua.Hu>
* wsp: Handle horizontal scrolling and create tunable for swipe/scroll.Joshua Rogers2025-03-071-31/+82
| | | | | | | | | | | | | | | | | | | | | | | | Previously, a two-finger horizontal scroll would result in a forwards/backwards keyboard event being performed. This patch changes that functionality to be specified via two new sysctls: horizontal_swipe_finger_count and scroll_finger_count. The former specifies how many fingers are used to perform the aforementioned forwards/backwards keyboard event, while the latter specifies how many fingers are used to perform horizontal scrolling. 0 disables each of them. The threshold for scrolling has been coupled into a single tunable: scr_threshold. This tunable is used for both scrolling and the horizontal swipe. t_factor and t_invert tunables have been created in the same manner as their z-axis counterparts. Horizontal scrolling is disabled by default, as it requires the sysctl hw.usb.wsp.t_factor to 3 (wsp mode). Horizontal swiping is enabled by default with a three-finger tap. Also rewrite much of, and improve, documentation. Signed-off-by: Joshua Rogers <Joshua@Joshua.Hu>
* wsp: Fix typo in function name.Joshua Rogers2025-03-071-2/+2
| | | | Signed-off-by: Joshua Rogers <Joshua@Joshua.Hu>
* wsp: Add hw.usb.wsp.max_scroll_finger_distance for two-finger scrollingJoshua Rogers2025-03-071-2/+7
| | | | | | | | | | | | | | | The hw.usb.wsp.max_scroll_finger_distance sysctl may be used to specify the maximum distance between two fingers which are registered as a z-axis (vertical scroll with mousepad) movement. Previously, this was shared with the tunable hw.usb.wsp.max_double_tap_distance which is used to specify the maximum distance between two fingers which register as a right-click. This patch also cleans up and add new information to the manpage for wsp(4). Signed-off-by: Joshua Rogers <Joshua@Joshua.Hu>
* wsp: Raise the default scr_hor_threshold sysctl.Joshua Rogers2025-03-071-1/+1
| | | | | | | The previous value caused nearly every horizontal movement to be classed as a left/right-keyboard button-click. Signed-off-by: Joshua Rogers <Joshua@Joshua.Hu>
* usb: Kill left-over cdefs.h includesWarner Losh2025-03-0468-69/+0
| | | | | | | | | These includes were for __FBSD_RCSID() macro. They weren't formatted like the rest of the tree so weren't trimmed automatically when that script was run. Trim them now. MFC After: 1 week Sponsored by: Netflix
* sys: convert ni->ni_txrate references use to the new net80211 APIAdrian Chadd2025-02-267-11/+18
| | | | | | | | | | | This just mechanically converts things. * For linuxkpi, it was just used for display. * For uath, it was just used for display, as firmware doesn't report it up. Differential Revision: https://reviews.freebsd.org/D48602 Reviewed by: bz, thj
* mtw: Use correct cmd for radioJesper Schmitz Mouridsen2025-02-141-1/+1
| | | | | Approved by: adrian, wireless Differential Revision: https://reviews.freebsd.org/D49003
* mtw: Pass the right pointer to the constructed command in mtw_mcu_radioJohn Baldwin2025-02-121-1/+1
| | | | | | This was just using random stack garbage before. Reported by: GCC -Wunused-but-set-variable
* uath: Avoid a NULL dereferenceJose Luis Duran2025-02-121-4/+6
| | | | | | | | PR: 284643 Reviewed by: adrian Approved by: emaste (mentor) MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D48948
* mt7601U: Importing if_mtw from OpenBSDJesper Schmitz Mouridsen2025-02-034-1/+6503
| | | | | | | | | Added ht20 mode, based on if_run from FreeBSD, and if_mtw.c from OpenBSD. PR: 247545 Approved by: adrian, wireless Differential Revision: https://reviews.freebsd.org/D45179
* umass: Print quirks with %bWarner Losh2025-02-031-1/+21
| | | | | | | Print the quirks in a more human-readable form. When testing a dozen different removeable devices, the hex numbers quickly blur... Sponsored by: Netflix
* umass: Add comment for ASC/ASCQ 24h/00h INVALID FIELD IN CDBWarner Losh2025-01-281-1/+1
| | | | | | | Add a comment for what this asc/ascq combo means. Very few people have this memorized. Sponsored by: Netflix
* ure(4): Add support for ELECOM EDC-QUA3CFUKAUMI Naoki2025-01-242-0/+2
| | | | | | | | | | | | | | ELECOM EDC-QUA3C is a USB3.1 Gen1 Type-A/C 2.5GBASE-T network adapter. This also works as a cdce(4) device by: usbconfig -d X.Y set_config 1 or usbconfig -d X.Y set_config 2 Signed-off-by: FUKAUMI Naoki <naoki@radxa.com> MFC after: 2 weeks Pull Request: https://github.com/freebsd/freebsd-src/pull/1578
* umb: Introduce the USB umb(4) network driverAdrian Chadd2025-01-203-0/+4100
| | | | | | | | | | | | | | | | | | | | | | | This includes the port of a driver originally from OpenBSD, later ported to NetBSD by the author: * The umb(4) kernel driver * The umbctl(8) companion tool This driver supports USB network devices implementing the Mobile Broadband Interface Model (MBIM), often found in modern (internal) USB models for 4G/LTE mobile broadband access. It is currently limited to IPv4. umbctl has to be used to display or set MBIM cellular modem interface parameters (4G/LTE). Differential Revision: https://reviews.freebsd.org/D48167 Approved by: adrian, zlei Sponsored by: FreeBSD Foundation PR: kern/263783 Submitted by: Pierre Pronchery <khorben@defora.org>
* riscv: enable Allwinner D1 USB driversMitchell Horne2025-01-101-2/+3
| | | | | | | | | | | Add the generic USB drivers and FDT glue to the build. Make small tweaks to the aw_usbphy and aw_musb drivers for the Allwinner D1. Reviewed by: manu Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D48126
* Use bus_generic_detach to detach and delete child devices during detachJohn Baldwin2025-01-021-5/+3
| | | | | | | This is simpler and more robust than individual calls to device_delete_child. Differential Revision: https://reviews.freebsd.org/D47972
* Use bus_generic_detach instead of device_delete_children in detachJohn Baldwin2025-01-0216-38/+58
| | | | | | | While here, check for errors from bus_generic_detach and move it to the start of detach if necessary. Differential Revision: https://reviews.freebsd.org/D47969
* Remove now-redundant calls to device_delete_childrenJohn Baldwin2025-01-022-2/+0
| | | | | | | Earlier calls to bus_generic_detach now take care of deleting children. Differential Revision: https://reviews.freebsd.org/D47962
* Use the new bus_generic_detach directly in place of home-grown versionsJohn Baldwin2025-01-021-15/+2
| | | | Differential Revision: https://reviews.freebsd.org/D47960
* usb: serial: make more commands execute synchronouslyKyle Evans2024-12-111-13/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | The termios layer wants some level of guarantee that we've actually submitted param changes to the hardware when our functions return, so we need to do a little more waiting to avoid violating those guarantees. This is especially important as some hardware has some minimum timing specifications around this stuff, and without being less asynchronous the software dealing with these devices can't reasonably operate the hardware without more excessive delays than they should need. More specifically, we make sure that: - The command to start transfers is finished before we toggle DTR/RTS - The status_change command finishes before we return, which may change some fields in the softc that we need for a subsequent call into usb_serial - cfg_param finishes before we re-enable transfers, and we ensure that RTS is appropriately toggled before we return to userland This has been observed to fix some flakiness in connecting to some ESP32 devices. Tested by: kenrap from Libera Reviewed by: imp, kib Differential Revision: https://reviews.freebsd.org/D47952
* usb: serial: allow the open/close sleep to be interruptibleKyle Evans2024-12-114-17/+69
| | | | | | | | | | | ucom_queue_command will issue commands for open/close, then wait on them to be finished. In the spirit of playing it safe, allow ucom_queue_command's wait to be interrupted in case the usb process gets jammed up waiting on the hardware -- we can at least recover the user thread that initiated it, even if we can't recover the usb process. Reviewed by: imp, kib Differential Revision: https://reviews.freebsd.org/D47951
* usb: serial: propagate errors from ucom_queue_command()Kyle Evans2024-12-111-18/+31
| | | | | | | | | There's only one error that we can get back right now, but future changes will add some more cases that we need to watch out for. Start by returning errors and propagating them back. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D47950