linux/Documentation/driver-api
Jiri Slaby (SUSE) 8275b48b27 tty: serial: introduce transmit helpers
Many serial drivers do the same thing:
* send x_char if set
* keep sending from the xmit circular buffer until either
  - the loop reaches the end of the xmit buffer
  - TX is stopped
  - HW fifo is full
* check for pending characters and:
  - wake up tty writers to fill for more data into xmit buffer
  - stop TX if there is nothing in the xmit buffer

The only differences are:
* how to write the character to the HW fifo
* the check of the end condition:
  - is the HW fifo full?
  - is limit of the written characters reached?

So unify the above into two helpers:
* uart_port_tx_limited() -- it performs the above taking the written
  characters limit into account, and
* uart_port_tx() -- the same as above, except it only checks the HW
  readiness, not the characters limit.

The HW specific operations (as stated as "differences" above) are passed
as arguments to the macros. They are:
* tx_ready -- returns true if HW can accept more data.
* put_char -- write a character to the device.
* tx_done -- when the write loop is done, perform arbitrary action
  before potential invocation of ops->stop_tx() happens.

Note that the above are macros. This means the code is generated in
place and the above 3 arguments are "inlined". I.e. no added penalty by
generating call instructions for every single character. Nor any
indirect calls. (As in some previous versions of this patchset.)

Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org>
Link: https://lore.kernel.org/r/20221004104927.14361-2-jirislaby@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-11-03 03:32:40 +01:00
..
80211
acpi
backlight
cxl Documentation: cxl: remove dangling kernel-doc reference 2022-08-05 08:41:02 -07:00
dmaengine dmaengine: remove DMA_MEMCPY_SG once again 2022-06-27 12:01:40 +05:30
driver-model Driver core changes for 6.1-rc1 2022-10-07 17:04:10 -07:00
early-userspace
firmware Driver core / kernfs changes for 6.0-rc1 2022-08-04 11:31:20 -07:00
fpga docs: fpga: mgr: document parse_header() callback 2022-06-24 12:12:24 +08:00
gpio This was a moderately busy cycle for documentation, but nothing all that 2022-08-02 19:24:24 -07:00
hte tegra194-hte.rst: fix reference to its binding 2022-07-07 13:10:00 -06:00
i3c
iio
md
media media: mc: entity: Rewrite media_pipeline_start() 2022-09-24 09:19:42 +02:00
mei
memory-devices
mmc
mtd
nfc
nvdimm
pci
phy
pldmfw
pm
rapidio
serial tty: serial: introduce transmit helpers 2022-11-03 03:32:40 +01:00
soundwire
surface_aggregator platform/surface: aggregator: Allow notifiers to avoid communication on unregistering 2022-06-13 17:25:07 +02:00
thermal docs: driver-api/thermal/intel_dptf: Use copyright symbol 2022-04-05 09:46:06 -06:00
tty Documentation: tty: n_gsm, use power of ReST 2022-04-14 18:24:24 +02:00
usb
xilinx
aperture.rst drm: Implement DRM aperture helpers under video/ 2022-06-27 11:07:55 +02:00
auxiliary_bus.rst
basics.rst overflow: Fix kern-doc markup for functions 2022-10-25 14:57:42 -07:00
clk.rst
component.rst
connector.rst
console.rst
dcdbas.rst
devfreq.rst
device-io.rst
device_link.rst
dma-buf.rst
edac.rst
eisa.rst
firewire.rst
frame-buffer.rst
generic-counter.rst
hsi.rst
i2c.rst
index.rst drm: Implement DRM aperture helpers under video/ 2022-06-27 11:07:55 +02:00
infiniband.rst
infrastructure.rst
input.rst
interconnect.rst
io-mapping.rst
io_ordering.rst
ioctl.rst
ipmb.rst
ipmi.rst
isa.rst Remove duplicate words inside documentation 2022-09-27 13:21:43 -06:00
isapnp.rst
libata.rst libata: Improve ATA queued command allocation 2022-04-11 09:27:44 +09:00
mailbox.rst
men-chameleon-bus.rst
message-based.rst
misc_devices.rst
miscellaneous.rst
mtdnand.rst
ntb.rst
nvmem.rst
parport-lowlevel.rst
pin-control.rst
pps.rst
ptp.rst
pwm.rst pwm: core: Get rid of unused devm_of_pwm_get() 2022-09-19 06:17:05 -07:00
regulator.rst
reset.rst
rfkill.rst
s390-drivers.rst
scsi.rst
slimbus.rst
sm501.rst
spi.rst
switchtec.rst
sync_file.rst
target.rst
uio-howto.rst
vfio-mediated-device.rst vfio/mdev: consolidate all the description sysfs into the core code 2022-10-04 12:06:58 -06:00
vfio-pci-device-specific-driver-acceptance.rst
vfio.rst
vme.rst vme: move back to staging 2022-06-10 15:38:14 +02:00
w1.rst
xillybus.rst
zorro.rst