mirror of
https://github.com/opnsense/src.git
synced 2026-02-12 23:36:07 -05:00
The tty layer uses tsw_busy to poll for busy/idle status of the transmitter hardware during close() and tcdrain(). The ucom layer defines ULSR_TXRDY and ULSR_TSRE bits for the line status register; when both are set, the transmitter is idle. Not all chip drivers maintain those bits in the sc_lsr field, and if the bits never get set the transmitter will always appear busy, causing hangs in tcdrain(). These changes add a new sc_flag bit, UCOM_FLAG_LSRTXIDLE. When this flag is set, ucom_busy() uses the lsr bits to return busy vs. idle state, otherwise it always returns idle (which is effectively what happened before this change because tsw_busy wasn't implemented). For the uftdi chip driver, these changes stop masking out the tx idle bits when processing the status register (because now they're useful), and it calls ucom_use_lsr_txbits() to indicate the bits are maintained by the driver and can be used by ucom_busy(). Differential Revision: https://reviews.freebsd.org/D9183 |
||
|---|---|---|
| .. | ||
| u3g.c | ||
| uark.c | ||
| ubsa.c | ||
| ubser.c | ||
| uchcom.c | ||
| ucycom.c | ||
| ufoma.c | ||
| uftdi.c | ||
| uftdi_reg.h | ||
| ugensa.c | ||
| uipaq.c | ||
| ulpt.c | ||
| umcs.c | ||
| umcs.h | ||
| umct.c | ||
| umodem.c | ||
| umoscom.c | ||
| uplcom.c | ||
| usb_serial.c | ||
| usb_serial.h | ||
| uslcom.c | ||
| uvisor.c | ||
| uvscom.c | ||