* 'linux-4.14.y' of github.com:openela/kernel-lts:
LTS: Update to 4.14.348
docs: kernel_include.py: Cope with docutils 0.21
serial: kgdboc: Fix NMI-safety problems from keyboard reset code
btrfs: add missing mutex_unlock in btrfs_relocate_sys_chunks()
dm: limit the number of targets and parameter size area
Revert "selftests: mm: fix map_hugetlb failure on 64K page size systems"
LTS: Update to 4.14.347
rds: Fix build regression.
RDS: IB: Use DEFINE_PER_CPU_SHARED_ALIGNED for rds_ib_stats
af_unix: Suppress false-positive lockdep splat for spin_lock() in __unix_gc().
net: fix out-of-bounds access in ops_init
drm/vmwgfx: Fix invalid reads in fence signaled events
dyndbg: fix old BUG_ON in >control parser
tipc: fix UAF in error path
usb: gadget: f_fs: Fix a race condition when processing setup packets.
usb: gadget: composite: fix OS descriptors w_value logic
firewire: nosy: ensure user_length is taken into account when fetching packet contents
af_unix: Fix garbage collector racing against connect()
af_unix: Do not use atomic ops for unix_sk(sk)->inflight.
ipv6: fib6_rules: avoid possible NULL dereference in fib6_rule_action()
net/ipv6: Refactor fib6_rule_action
net: bridge: fix corrupted ethernet header on multicast-to-unicast
net: bridge: use DEV_STATS_INC()
phonet: fix rtm_phonet_notify() skb allocation
rtnetlink: Correct nested IFLA_VF_VLAN_LIST attribute validation
Bluetooth: l2cap: fix null-ptr-deref in l2cap_chan_timeout
Bluetooth: Fix use-after-free bugs caused by sco_sock_timeout
tcp: defer shutdown(SEND_SHUTDOWN) for TCP_SYN_RECV sockets
tcp: remove redundant check on tskb
net:usb:qmi_wwan: support Rolling modules
fs/9p: drop inodes immediately on non-.L too
gpio: crystalcove: Use -ENOTSUPP consistently
gpio: wcove: Use -ENOTSUPP consistently
9p: explicitly deny setlease attempts
fs/9p: translate O_TRUNC into OTRUNC
fs/9p: only translate RWX permissions for plain 9P2000
selftests: timers: Fix valid-adjtimex signed left-shift undefined behavior
scsi: target: Fix SELinux error when systemd-modules loads the target module
tools/power turbostat: Fix Bzy_MHz documentation typo
tools/power turbostat: Fix added raw MSR output
firewire: ohci: mask bus reset interrupts between ISR and bottom half
ata: sata_gemini: Check clk_enable() result
net: bcmgenet: Reset RBUF on first open
ALSA: line6: Zero-initialize message buffers
scsi: bnx2fc: Remove spin_lock_bh while releasing resources after upload
net: mark racy access on sk->sk_rcvbuf
wifi: mac80211: fix ieee80211_bss_*_flags kernel-doc
scsi: lpfc: Update lpfc_ramp_down_queue_handler() logic
tipc: fix a possible memleak in tipc_buf_append
net: bridge: fix multicast-to-unicast with fraglist GSO
net: dsa: mv88e6xxx: Fix number of databases for 88E6141 / 88E6341
net: dsa: mv88e6xxx: Fix name of switch 88E6141
net: dsa: mv88e6xxx: Add number of MACs in the ATU
net l2tp: drop flow hash on forward
nsh: Restore skb->{protocol,data,mac_header} for outer header in nsh_gso_segment().
bna: ensure the copied buf is NUL terminated
pinctrl: devicetree: fix refcount leak in pinctrl_dt_to_map()
power: rt9455: hide unused rt9455_boost_voltage_values
pinctrl: core: delete incorrect free in pinctrl_enable()
ethernet: Add helper for assigning packet type when dest address does not match device address
ethernet: add a helper for assigning port addresses
net: create netdev->dev_addr assignment helpers
net: slightly optimize eth_type_trans
wifi: nl80211: don't free NULL coalescing rule
dmaengine: Revert "dmaengine: pl330: issue_pending waits until WFP state"
dmaengine: pl330: issue_pending waits until WFP state
LTS: Update to 4.14.346
Simplify major/minor non-dynamic logic
net: fix unused variable warning in do_tcp_setsockopt()
serial: core: fix kernel-doc for uart_port_unlock_irqrestore()
HID: i2c-hid: remove I2C_HID_READ_PENDING flag to prevent lock-up
i2c: smbus: fix NULL function pointer dereference
i2c: add param sanity check to i2c_transfer()
idma64: Don't try to serve interrupts when device is powered off
mtd: diskonchip: work around ubsan link failure
stackdepot: respect __GFP_NOLOCKDEP allocation flag
net: b44: set pause params only when interface is up
irqchip/gic-v3-its: Prevent double free on error
arm64: dts: rockchip: enable internal pull-up for Q7_THRM# on RK3399 Puma
btrfs: fix information leak in btrfs_ioctl_logical_to_ino()
Bluetooth: Fix type of len in {l2cap,sco}_sock_getsockopt_old()
tracing: Increase PERF_MAX_TRACE_SIZE to handle Sentinel1 and docker together
tracing: Show size of requested perf buffer
Revert "crypto: api - Disallow identical driver names"
drm/amdgpu: validate the parameters of bo mapping operations more clearly
amdgpu: validate offset_in_bo of drm_amdgpu_gem_va
drm/amdgpu: restrict bo mapping within gpu address limits
serial: mxs-auart: add spinlock around changing cts state
serial: core: Provide port lock wrappers
i40e: Do not use WQ_MEM_RECLAIM flag for workqueue
ipvs: Fix checksumming on GSO of SCTP packets
bpf: fix bpf_skb_adjust_net/bpf_skb_proto_xlat to deal with gso sctp skbs
docs: segmentation-offloads.txt: add SCTP info
net: gtp: Fix Use-After-Free in gtp_dellink
net: usb: ax88179_178a: stop lying about skb->truesize
NFC: trf7970a: disable all regulators on removal
mlxsw: core: Unregister EMAD trap using FORWARD action
vxlan: drop packets from invalid src-address
ARC: [plat-hsdk]: Remove misplaced interrupt-cells property
arm64: dts: rockchip: enable internal pull-up on PCIE_WAKE# for RK3399 Puma
arm64: dts: rockchip: fix alphabetical ordering RK3399 puma
nilfs2: fix OOB in nilfs_set_de_type
fs: sysfs: Fix reference leak in sysfs_break_active_protection()
speakup: Avoid crash on very long word
usb: dwc2: host: Fix dereference issue in DDMA completion flow.
Revert "usb: cdc-wdm: close race between read and workqueue"
USB: serial: option: add Telit FN920C04 rmnet compositions
USB: serial: option: add Rolling RW101-GL and RW135-GL support
USB: serial: option: support Quectel EM060K sub-models
USB: serial: option: add Lonsung U8300/U9300 product
USB: serial: option: add support for Fibocom FM650/FG650
USB: serial: option: add Fibocom FM135-GL variants
serial/pmac_zilog: Remove flawed mitigation for rx irq flood
comedi: vmk80xx: fix incomplete endpoint checking
drm: nv04: Fix out of bounds access
tun: limit printing rate when illegal packet received by tun dev
netfilter: nf_tables: Fix potential data-race in __nft_expr_type_get()
netfilter: nf_tables: __nft_expr_type_get() selects specific family type
Revert "tracing/trigger: Fix to return error if failed to alloc snapshot"
kprobes: Fix possible use-after-free issue on kprobe registration
selftests/ftrace: Limit length in subsystem-enable tests
x86/apic: Force native_apic_mem_read() to use the MOV instruction
selftests: timers: Fix abs() warning in posix_timers test
vhost: Add smp_rmb() in vhost_vq_avail_empty()
tracing: hide unused ftrace_event_id_fops
net/mlx5: Properly link new fs rules into the tree
ipv6: fix race condition between ipv6_get_ifaddr and ipv6_del_addr
ipv4/route: avoid unused-but-set-variable warning
geneve: fix header validation in geneve[6]_xmit_skb
nouveau: fix function cast warning
Bluetooth: Fix memory leak in hci_req_sync_complete()
batman-adv: Avoid infinite loop trying to resize local TT
LTS: Update to 4.14.345
net: check vlan filter feature in vlan_vids_add_by_dev() and vlan_vids_del_by_dev()
Revert "net: check vlan filter feature in vlan_vids_add_by_dev() and vlan_vids_del_by_dev()"
netfilter: nftables: exthdr: fix 4-byte stack OOB write
ext4: fix to check return value of freeze_bdev() in ext4_shutdown()
Revert "ext4: fix to check return value of freeze_bdev() in ext4_shutdown()"
VMCI: Fix possible memcpy() run-time warning in vmci_datagram_invoke_guest_handler()
Bluetooth: btintel: Fixe build regression
x86/mm/pat: fix VM_PAT handling in COW mappings
virtio: reenable config if freezing device failed
tty: n_gsm: require CAP_NET_ADMIN to attach N_GSM0710 ldisc
fbmon: prevent division by zero in fb_videomode_from_videomode()
fbdev: viafb: fix typo in hw_bitblt_1 and hw_bitblt_2
usb: sl811-hcd: only defined function checkdone if QUIRK2 is defined
tools: iio: replace seekdir() in iio_generic_buffer
block: prevent division by zero in blk_rq_stat_sum()
SUNRPC: increase size of rpc_wait_queue.qlen from unsigned short to unsigned int
media: sta2x11: fix irq handler cast
isofs: handle CDs with bad root inode but good Joliet root directory
scsi: lpfc: Fix possible memory leak in lpfc_rcv_padisc()
sysv: don't call sb_bread() with pointers_lock held
Input: synaptics-rmi4 - fail probing if memory allocation for "phys" fails
Bluetooth: btintel: Fix null ptr deref in btintel_read_version
btrfs: send: handle path ref underflow in header iterate_inode_ref()
btrfs: export: handle invalid inode or root reference in btrfs_get_parent()
btrfs: handle chunk tree lookup error in btrfs_relocate_sys_chunks()
tools/power x86_energy_perf_policy: Fix file leak in get_pkg_num()
arm64: dts: rockchip: fix rk3399 hdmi ports node
VMCI: Fix memcpy() run-time warning in dg_dispatch_as_host()
wifi: ath9k: fix LNA selection in ath_ant_try_scan()
ALSA: hda/realtek: Update Panasonic CF-SZ6 quirk to support headset with microphone
ata: sata_mv: Fix PCI device ID table declaration compilation warning
ata: sata_sx4: fix pdc20621_get_from_dimm() on 64-bit
ASoC: ops: Fix wraparound for mask in snd_soc_get_volsw
init: open /initrd.image with O_LARGEFILE
staging: vc04_services: fix information leak in create_component()
staging: vc04_services: changen strncpy() to strscpy_pad()
staging: mmal-vchiq: Fix client_component for 64 bit kernel
staging: mmal-vchiq: Allocate and free components as required
staging: mmal-vchiq: Avoid use of bool in structures
ipv6: Fix infinite recursion in fib6_dump_done().
selftests: reuseaddr_conflict: add missing new line at the end of the output
net/sched: act_skbmod: prevent kernel-infoleak
net: stmmac: fix rx queue priority assignment
net: stmmac: Fix issues when number of Queues >= 4
mm, vmscan: prevent infinite loop for costly GFP_NOIO | __GFP_RETRY_MAYFAIL allocations
Revert "x86/mm/ident_map: Use gbpages only where full GB page should be mapped."
netfilter: nf_tables: disallow timeout for anonymous sets
Bluetooth: Fix TOCTOU in HCI debugfs implementation
Bluetooth: hci_event: set the conn encrypted before conn establishes
tcp: properly terminate timers for kernel sockets
mptcp: add sk_stop_timer_sync helper
nfc: nci: Fix uninit-value in nci_dev_up and nci_ntf_packet
USB: core: Fix deadlock in usb_deauthorize_interface()
scsi: lpfc: Correct size for wqe for memset()
x86/cpu: Enable STIBP on AMD if Automatic IBRS is enabled
scsi: qla2xxx: Fix command flush on cable pull
usb: udc: remove warning when queue disabled ep
usb: dwc2: host: Fix ISOC flow in DDMA mode
usb: dwc2: host: Fix hibernation flow
powerpc: xor_vmx: Add '-mhard-float' to CFLAGS
efivarfs: Request at most 512 bytes for variable names
perf/core: Fix reentry problem in perf_output_read_group()
loop: Call loop_config_discard() only after new config is applied
Revert "loop: Check for overflow while configuring loop"
btrfs: allocate btrfs_ioctl_defrag_range_args on stack
btrfs: add define for oldest generation
printk: Update @console_may_schedule in console_trylock_spinning()
fs/aio: Check IOCB_AIO_RW before the struct aio_kiocb conversion
ALSA: sh: aica: reorder cleanup operations to avoid UAF bugs
ALSA: aica: Fix a long-time build breakage
ALSA: sh: aica: Convert timers to use timer_setup()
usb: cdc-wdm: close race between read and workqueue
USB: cdc-wdm: Fix use after free in service_outstanding_interrupt().
exec: Fix NOMMU linux_binprm::exec in transfer_args_to_stack()
wifi: mac80211: check/clear fast rx for non-4addr sta VLAN changes
mm/migrate: set swap entry values of THP tail pages properly.
mm/memory-failure: fix an incorrect use of tail pages
vt: fix memory overlapping when deleting chars in the buffer
tty: serial: fsl_lpuart: avoid idle preamble pending if CTS is enabled
usb: port: Don't try to peer unused USB ports based on location
usb: gadget: ncm: Fix handling of zero block length packets
USB: usb-storage: Prevent divide-by-0 error in isd200_ata_command
ALSA: hda/realtek - Fix headset Mic no show at resume back for Lenovo ALC897 platform
xfrm: Avoid clang fortify warning in copy_to_user_tmpl()
netfilter: nf_tables: reject constant set with timeout
netfilter: nf_tables: disallow anonymous set with timeout flag
comedi: comedi_test: Prevent timers rescheduling during deletion
ahci: asm1064: asm1166: don't limit reported ports
ahci: asm1064: correct count of reported ports
nilfs2: prevent kernel bug at submit_bh_wbc()
nilfs2: use a more common logging style
nilfs2: fix failure to detect DAT corruption in btree and direct mappings
memtest: use {READ,WRITE}_ONCE in memory scanning
drm/vc4: hdmi: do not return negative values from .get_modes()
drm/imx/ipuv3: do not return negative values from .get_modes()
s390/zcrypt: fix reference counting on zcrypt card objects
soc: fsl: qbman: Use raw spinlock for cgr_lock
soc: fsl: qbman: Add CGR update function
soc: fsl: qbman: Add helper for sanity checking cgr ops
soc: fsl: qbman: Always disable interrupts when taking cgr_lock
vfio/platform: Disable virqfds on cleanup
kbuild: Move -Wenum-{compare-conditional,enum-conversion} into W=1
speakup: Fix 8bit characters from direct synth
ext4: fix corruption during on-line resize
hwmon: (amc6821) add of_match table
mmc: core: Fix switch on gp3 partition
dm-raid: fix lockdep waring in "pers->hot_add_disk"
Revert "Revert "md/raid5: Wait for MD_SB_CHANGE_PENDING in raid5d""
PCI/PM: Drain runtime-idle callbacks before driver removal
PCI: Drop pci_device_remove() test of pci_dev->driver
fuse: don't unhash root
mmc: tmio: avoid concurrent runs of mmc_request_done()
PM: sleep: wakeirq: fix wake irq warning in system suspend
USB: serial: cp210x: add pid/vid for TDK NC0110013M and MM0110113M
USB: serial: option: add MeiG Smart SLM320 product
USB: serial: cp210x: add ID for MGP Instruments PDS100
USB: serial: add device ID for VeriFone adapter
USB: serial: ftdi_sio: add support for GMC Z216C Adapter IR-USB
powerpc/fsl: Fix mfpmr build errors with newer binutils
clk: qcom: mmcc-msm8974: fix terminating of frequency table arrays
clk: qcom: mmcc-apq8084: fix terminating of frequency table arrays
PM: suspend: Set mem_sleep_current during kernel command line setup
parisc: Strip upper 32 bit of sum in csum_ipv6_magic for 64-bit builds
parisc: Fix csum_ipv6_magic on 64-bit systems
parisc: Fix csum_ipv6_magic on 32-bit systems
parisc: Fix ip_fast_csum
parisc: Do not hardcode registers in checksum functions
ubi: correct the calculation of fastmap size
ubi: Check for too small LEB size in VTBL code
ubifs: Set page uptodate in the correct place
fat: fix uninitialized field in nostale filehandles
crypto: qat - resolve race condition during AER recovery
crypto: qat - fix double free during reset
sparc64: NMI watchdog: fix return value of __setup handler
KVM: Always flush async #PF workqueue when vCPU is being destroyed
media: xc4000: Fix atomicity violation in xc4000_get_frequency
arm: dts: marvell: Fix maxium->maxim typo in brownstone dts
ARM: dts: mmp2-brownstone: Don't redeclare phandle references
smack: Handle SMACK64TRANSMUTE in smack_inode_setsecurity()
smack: Set SMACK64TRANSMUTE only for dirs in smack_inode_setxattr()
wifi: brcmfmac: Fix use-after-free bug in brcmf_cfg80211_detach
x86/bugs: Use sysfs_emit()
x86/pti: Don't report XenPV as vulnerable
x86/cpu: Support AMD Automatic IBRS
Documentation/hw-vuln: Update spectre doc
LTS: Update to 4.14.344
binder: signal epoll threads of self-work
ANDROID: binder: Add thread->process_todo flag.
scsi: bnx2fc: Fix skb double free in bnx2fc_rcv()
scsi: bnx2fc: Remove set but not used variable 'oxid'
net: check dev->gso_max_size in gso_features_check()
driver: staging: count ashmem_range into SLAB_RECLAIMBLE
net: warn if gso_type isn't set for a GSO SKB
staging: android: ashmem: Remove use of unlikely()
ALSA: hda/realtek: Enable headset on Lenovo M90 Gen5
ALSA: hda/realtek: Enable headset onLenovo M70/M90
ALSA: hda/realtek: Add quirk for Lenovo TianYi510Pro-14IOB
ALSA: hda/realtek - ALC897 headset MIC no sound
ALSA: hda/realtek - Add headset Mic support for Lenovo ALC897 platform
ALSA: hda/realtek: Fix the mic type detection issue for ASUS G551JW
ALSA: hda/realtek - The front Mic on a HP machine doesn't work
ALSA: hda/realtek - Enable the headset of Acer N50-600 with ALC662
ALSA: hda/realtek - Enable headset mic of Acer X2660G with ALC662
ALSA: hda/realtek - Add Headset Mic supported for HP cPC
ALSA: hda/realtek - More constifications
Add Acer Aspire Ethos 8951G model quirk
devcoredump: Send uevent once devcd is ready
devcoredump : Serialize devcd_del work
netfilter: xt_owner: Fix for unsafe access of sk->sk_socket
netfilter: xt_owner: Add supplementary groups option
mtd: cfi_cmdset_0001: Byte swap OTP info
mtd: cfi_cmdset_0001: Support the absence of protection registers
s390/cmma: fix detection of DAT pages
s390/mm: fix phys vs virt confusion in mark_kernel_pXd() functions family
ALSA: hda/realtek: Headset Mic VREF to 100%
hfsplus: unmap the page in the "fail_page" label
ALSA: hda/realtek - Fix microphone noise on ASUS TUF B550M-PLUS
ALSA: hda/realtek: Enable audio jacks of ASUS D700SA with ALC887
ALSA: hda/realtek - Add quirk for Tuxedo XC 1509
ALSA: hda/realtek - Headset microphone and internal speaker support for System76 oryp5
ALSA: hda/realtek - Clevo P950ER ALC1220 Fixup
ALSA: hda/realtek - Add support for ALC1220
hv_netvsc: Fix race of register_netdevice_notifier and VF register
hv_netvsc: use reciprocal divide to speed up percent calculation
pwm: sti: Reduce number of allocations and drop usage of chip_data
pwm: sti: Avoid conditional gotos
tools: iio: iio_generic_buffer ensure alignment
tools: iio: iio_generic_buffer: Fix some integer type and calculation
tools: iio: privatize globals and functions in iio_generic_buffer.c file
leds: trigger: ledtrig-cpu:: Fix 'output may be truncated' issue for 'cpu'
ledtrig-cpu: Limit to 8 CPUs
leds: pwm: Don't disable the PWM when the LED should be off
leds: pwm: convert to atomic PWM API
leds: pwm: simplify if condition
regmap: debugfs: Fix a erroneous check after snprintf()
regmap: Allow missing device in regmap_name_read_file()
tcp_metrics: add missing barriers on delete
tcp: batch tcp_net_metrics_exit
tcp: fix excessive TLP and RACK timeouts from HZ rounding
tcp: Namespace-ify sysctl_tcp_early_retrans
net: nfc: fix races in nfc_llcp_sock_get() and nfc_llcp_sock_get_sn()
ata: libata-core: Do not register PM operations for SAS ports
libata: make ata_port_type const
libata: Add new med_power_with_dipm link_power_management_policy setting
ALSA: hda: Disable power save for solving pop issue on Lenovo ThinkCentre M70q
ALSA: hda - add Lenovo IdeaCentre B550 to the power_save_blacklist
ALSA: hda: Add Intel NUC7i3BNB to the power_save blacklist
ext4: mark group as trimmed only if it was fully scanned
ext4: add new helper interface ext4_try_to_trim_range()
ext4: remove the 'group' parameter of ext4_trim_extent
scsi: qla2xxx: Remove unsupported ql2xenabledif option
scsi: qla2xxx: Add protection mask module parameters
scsi: qla2xxx: Add option for use reserve exch for ELS
scsi: qla2xxx: Reinstate module parameter ql2xenablemsix
scsi: lpfc: remove redundant null check on eqe
usb: typec: tcpci: clear the fault status bit
usb: typec: add fwnode to tcpc
staging: typec: fix endianness mismatch identified by sparse
staging: typec: tcpm: Document data structures
serial: sc16is7xx: fix broken port 0 uart init
sc16is7xx: Set iobase to device index
dlm: fix plock lookup when using multiple lockspaces
drm/tegra: dpaux: Fix incorrect return value of platform_get_irq
drm/tegra: Remove superfluous error messages around platform_get_irq()
ARM: dts: BCM53573: Drop nonexistent #usb-cells
ARM: dts: BCM5301X: Harmonize EHCI/OHCI DT nodes name
wifi: ath9k: fix races between ath9k_wmi_cmd and ath9k_wmi_ctrl_rx
ath9k: use irqsave() in USB's complete callback
wifi: mwifiex: fix error recovery in PCIE buffer descriptor management
mwifiex: switch from 'pci_' to 'dma_' API
mwifiex: drop 'set_consistent_dma_mask' log message
bonding: fix macvlan over alb bond support
net: remove bond_slave_has_mac_rcu()
fbdev: fix potential OOB read in fast_imageblit()
fbdev: Fix sys_imageblit() for arbitrary image widths
fbdev: Improve performance of sys_imageblit()
tty: serial: fsl_lpuart: add earlycon for imx8ulp platform
Revert "tty: serial: fsl_lpuart: drop earlycon entry for i.MX8QXP"
MIPS: cpu-features: Use boot_cpu_type for CPU type based features
MIPS: cpu-features: Enable octeon_cache by cpu_type
fs: dlm: fix mismatch of plock results from userspace
fs: dlm: use dlm_plock_info for do_unlock_close
fs: dlm: change plock interrupted message to debug again
fs: dlm: add pid to debug log
dlm: replace usage of found with dedicated list iterator variable
dlm: improve plock logging if interrupted
nfsd: Remove incorrect check in nfsd4_validate_stateid
nfsd4: kill warnings on testing stateids with mismatched clientids
mmc: meson-gx: remove redundant mmc_request_done() call from irq context
mmc: meson-gx: remove useless lock
PM: sleep: wakeirq: fix wake irq arming
PM / wakeirq: support enabling wake-up irq after runtime_suspend called
scsi: zfcp: Defer fc_rport blocking until after ADISC response
scsi: zfcp: workqueue: set description for port work items with their WWPN as context
btrfs: check for commit error at btrfs_attach_transaction_barrier()
btrfs: simplify IS_ERR/PTR_ERR checks
fs: dlm: interrupt posix locks only when process is killed
dlm: rearrange async condition return
dlm: cleanup plock_op vs plock_xop
ext4: Fix reusing stale buffer heads from last failed mounting
ext4: rename journal_dev to s_journal_dev inside ext4_sb_info
tcp: annotate data-races around tp->linger2
net: Replace the limit of TCP_LINGER2 with TCP_FIN_TIMEOUT_MAX
ceph: don't let check_caps skip sending responses for revoke msgs
ceph: define argument structure for handle_cap_grant
net: bcmgenet: Ensure MDIO unregistration has clocks enabled
net: bcmgenet: Avoid calling platform_device_put() twice in bcmgenet_mii_exit()
net: tcp_input: Neaten DBGUNDO
i2c: xiic: Don't try to handle more interrupt events after error
i2c: xiic: Defer xiic_wakeup() and __xiic_start_xfer() in xiic_process()
i2c: xiic: Fix broken locking on tx_msg
i2c: xiic: Change code alignment to 1 space only
i2c: xiic: Add timeout to the rx fifo wait loop
i2c: xiic: Fix kerneldoc warnings
hwrng: virtio - Fix race on data_avail and actual data
hwrng: virtio - always add a pending request
hwrng: virtio - don't waste entropy
hwrng: virtio - don't wait on cleanup
hwrng: virtio - add an internal buffer
nfc: llcp: fix possible use of uninitialized variable in nfc_llcp_send_connect()
nfc: constify several pointers to u8, char and sk_buff
irqchip/jcore-aic: Fix missing allocation of IRQ descriptors
irqchip/jcore-aic: Kill use of irq_create_strict_mappings()
Documentation: fix little inconsistencies
usb: musb: fix MUSB_QUIRK_B_DISCONNECT_99 handling
net/rose: fix races in rose_kill_by_device()
reset: Fix crash when freeing non-existent optional resets
ksmbd: fix wrong name of SMB2_CREATE_ALLOCATION_SIZE
PCI: keystone: Don't discard .probe() callback
PCI: keystone: Don't discard .remove() callback
can: dev: can_restart(): fix race condition between controller restart and netif_carrier_on()
can: dev: can_restart(): don't crash kernel if carrier is OK
r8169: fix the KCSAN reported data-race in rtl_tx while reading TxDescArray[entry].opts1
xen-netback: use default TX queue size for vifs
MIPS: Alchemy: only build mmc support helpers if au1xmmc is enabled
arm64: dts: qcom: msm8996: Add missing interrupt to the USB2 controller
sched/rt: pick_next_rt_entity(): check list_entry
regmap: Account for register length in SMBus I/O limits
x86/topology: Fix erroneous smp_num_siblings on Intel Hybrid platforms
ASoC: cs42l51: fix driver to properly autoload with automatic module loading
PCI: qcom: Disable write access to read only registers for IP v2.3.3
pinctrl: amd: Only use special debounce behavior for GPIO 0
IB/hfi1: Fix sdma.h tx->num_descs off-by-one error
usb: fotg210-hcd: delete an incorrect bounds test
smb: client: fix OOB in smbCalcSize()
btrfs: do not allow non subvolume root targets for snapshot
pinctrl: at91-pio4: use dedicated lock class for IRQ
net: check vlan filter feature in vlan_vids_add_by_dev() and vlan_vids_del_by_dev()
arm64: dts: mediatek: mt8173-evb: Fix regulator-fixed node names
IB/isert: Fix unaligned immediate-data handling
fbdev: stifb: Make the STI next font pointer a 32-bit signed offset
smb3: fix touch -h of symlink
MIPS: KVM: Fix a build warning about variable set but not used
cifs: spnego: add ';' in HOST_KEY_LEN
macvlan: Don't propagate promisc change to lower dev in passthru
ppp: limit MRU to 64K
ptp: annotate data-race around q->head and q->tail
xen/events: fix delayed eoi list handling
tipc: Fix kernel-infoleak due to uninitialized TLV value
tty: Fix uninit-value access in ppp_sync_receive()
iio: exynos-adc: request second interupt only when touchscreen mode is used
selftests/ftrace: Add new test case which checks non unique symbol
media: v4l2-fwnode: fix v4l2_fwnode_parse_link handling
block: fix signed int overflow in Amiga partition support
iio: addac: stx104: Fix race condition for stx104_write_raw()
ext4: fix to check return value of freeze_bdev() in ext4_shutdown()
btrfs: fix extent buffer leak after tree mod log failure at split_node()
pinctrl: amd: Detect internal GPIO0 debounce handling
ALSA: jack: Fix mutex call in snd_jack_report()
IB/hfi1: Fix sdma.h tx->num_descs off-by-one errors
ARM: 9303/1: kprobes: avoid missing-declaration warnings
LTS: Update to 4.14.343
crypto: af_alg - Work around empty control messages without MSG_MORE
crypto: af_alg - Fix regression on empty requests
spi: spi-mt65xx: Fix NULL pointer access in interrupt handler
net/bnx2x: Prevent access to a freed page in page_pool
hsr: Handle failures in module init
rds: introduce acquire/release ordering in acquire/release_in_xmit()
hsr: Fix uninit-value access in hsr_get_node()
net: hsr: fix placement of logical operator in a multi-line statement
usb: gadget: net2272: Use irqflags in the call to net2272_probe_fin
staging: greybus: fix get_channel_from_mode() failure path
serial: 8250_exar: Don't remove GPIO device on suspend
rtc: mt6397: select IRQ_DOMAIN instead of depending on it
rtc: mediatek: enhance the description for MediaTek PMIC based RTC
tty: serial: samsung: fix tx_empty() to return TIOCSER_TEMT
serial: max310x: fix syntax error in IRQ error message
clk: qcom: gdsc: Add support to update GDSC transition delay
NFS: Fix an off by one in root_nfs_cat()
net: sunrpc: Fix an off by one in rpc_sockaddr2uaddr()
scsi: bfa: Fix function pointer type mismatch for hcb_qe->cbfn
scsi: csiostor: Avoid function pointer casts
ALSA: usb-audio: Stop parsing channels bits when all channels are found.
sparc32: Fix section mismatch in leon_pci_grpci
backlight: lp8788: Fully initialize backlight_properties during probe
backlight: lm3639: Fully initialize backlight_properties during probe
backlight: da9052: Fully initialize backlight_properties during probe
backlight: lm3630a: Don't set bl->props.brightness in get_brightness
backlight: lm3630a: Initialize backlight_properties on init
powerpc/embedded6xx: Fix no previous prototype for avr_uart_send() etc.
powerpc/hv-gpci: Fix the H_GET_PERF_COUNTER_INFO hcall return value checks
drm/mediatek: Fix a null pointer crash in mtk_drm_crtc_finish_page_flip
media: go7007: fix a memleak in go7007_load_encoder
media: dvb-frontends: avoid stack overflow warnings with clang
media: pvrusb2: fix uaf in pvr2_context_set_notify
drm/amdgpu: Fix missing break in ATOM_ARG_IMM Case of atom_get_src_int()
mtd: rawnand: lpc32xx_mlc: fix irq handler prototype
crypto: arm/sha - fix function cast warnings
crypto: arm - Rename functions to avoid conflict with crypto/sha256.h
mfd: syscon: Call of_node_put() only when of_parse_phandle() takes a ref
drm/tegra: put drm_gem_object ref on error in tegra_fb_create
clk: hisilicon: hi3519: Release the correct number of gates in hi3519_clk_unregister()
PCI: Mark 3ware-9650SE Root Port Extended Tags as broken
drm/mediatek: dsi: Fix DSI RGB666 formats and definitions
media: pvrusb2: fix pvr2_stream_callback casts
media: go7007: add check of return value of go7007_read_addr()
ALSA: seq: fix function cast warnings
drm/radeon/ni: Fix wrong firmware size logging in ni_init_microcode()
perf thread_map: Free strlist on normal path in thread_map__new_by_tid_str()
quota: Fix rcu annotations of inode dquot pointers
quota: Fix potential NULL pointer dereference
quota: simplify drop_dquot_ref()
quota: check time limit when back out space/inode change
fs/quota: erase unused but set variable warning
quota: code cleanup for __dquot_alloc_space()
clk: qcom: reset: Ensure write completion on reset de/assertion
clk: qcom: reset: Commonize the de/assert functions
clk: qcom: reset: support resetting multiple bits
clk: qcom: reset: Allow specifying custom reset delay
media: edia: dvbdev: fix a use-after-free
media: dvb-core: Fix use-after-free due to race at dvb_register_device()
media: dvbdev: convert DVB device types into an enum
media: dvbdev: fix error logic at dvb_register_device()
media: dvbdev: Fix memleak in dvb_register_device
media: media/dvb: Use kmemdup rather than duplicating its implementation
media: dvbdev: remove double-unlock
media: v4l2-tpg: fix some memleaks in tpg_alloc
media: em28xx: annotate unchecked call to media_device_register()
media: tc358743: register v4l2 async device only after successful setup
drm: Don't treat 0 as -1 in drm_fixp2int_ceil
drm/rockchip: inno_hdmi: Fix video timing
drm/tegra: dsi: Fix missing pm_runtime_disable() in the error handling path of tegra_dsi_probe()
drm/tegra: dsi: Fix some error handling paths in tegra_dsi_probe()
drm/tegra: dsi: Make use of the helper function dev_err_probe()
gpu: host1x: mipi: Update tegra_mipi_request() to be node based
drm/tegra: dsi: Add missing check for of_find_device_by_node
dm: call the resume method on internal suspend
dm raid: fix false positive for requeue needed during reshape
net/x25: fix incorrect parameter validation in the x25_getsockopt() function
net: kcm: fix incorrect parameter validation in the kcm_getsockopt) function
udp: fix incorrect parameter validation in the udp_lib_getsockopt() function
l2tp: fix incorrect parameter validation in the pppol2tp_getsockopt() function
tcp: fix incorrect parameter validation in the do_tcp_getsockopt() function
ipv6: fib6_rules: flush route cache when rule is changed
bpf: Fix stackmap overflow check on 32-bit arches
bpf: Fix hashtab overflow check on 32-bit arches
sr9800: Add check for usbnet_get_endpoints
Bluetooth: hci_core: Fix possible buffer overflow
Bluetooth: Remove superfluous call to hci_conn_check_pending()
igb: Fix missing time sync events
igb: move PEROUT and EXTTS isr logic to separate functions
mmc: wmt-sdmmc: remove an incorrect release_mem_region() call in the .remove function
SUNRPC: fix some memleaks in gssx_dec_option_array
x86, relocs: Ignore relocations in .notes section
ACPI: scan: Fix device check notification handling
ARM: dts: arm: realview: Fix development chip ROM compatible value
wifi: brcmsmac: avoid function pointer casts
iommu/amd: Mark interrupt as managed
bus: tegra-aconnect: Update dependency to ARCH_TEGRA
ACPI: processor_idle: Fix memory leak in acpi_processor_power_exit()
wifi: libertas: fix some memleaks in lbs_allocate_cmd_buffer()
af_unix: Annotate data-race of gc_in_progress in wait_for_unix_gc().
sock_diag: annotate data-races around sock_diag_handlers[family]
sock_diag: request _diag module only when the family or proto has been registered
wifi: mwifiex: debugfs: Drop unnecessary error check for debugfs_create_dir()
wifi: b43: Disable QoS for bcm4331
wifi: b43: Stop correct queue in DMA worker when QoS is disabled
b43: main: Fix use true/false for bool type
wifi: b43: Stop/wake correct queue in PIO Tx path when QoS is disabled
wifi: b43: Stop/wake correct queue in DMA Tx path when QoS is disabled
b43: dma: Fix use true/false for bool type variable
timekeeping: Fix cross-timestamp interpolation for non-x86
timekeeping: Fix cross-timestamp interpolation corner case decision
timekeeping: Fix cross-timestamp interpolation on counter wrap
aoe: fix the potential use-after-free problem in aoecmd_cfg_pkts
md: Don't clear MD_CLOSING when the raid is about to stop
md: implement ->set_read_only to hook into BLKROSET processing
block: add a new set_read_only method
md: switch to ->check_events for media change notifications
fs/select: rework stack allocation hack for clang
do_sys_name_to_handle(): use kzalloc() to fix kernel-infoleak
crypto: algif_aead - Only wake up when ctx->more is zero
crypto: af_alg - make some functions static
ASoC: wm8962: Fix up incorrect error message in wm8962_set_fll
ASoC: wm8962: Enable both SPKOUTR_ENA and SPKOUTL_ENA in mono mode
ASoC: wm8962: Enable oscillator if selecting WM8962_FLL_OSC
Input: gpio_keys_polled - suppress deferred probe error for gpio
firewire: core: use long bus reset on gap count error
Bluetooth: rfcomm: Fix null-ptr-deref in rfcomm_check_security
scsi: mpt3sas: Prevent sending diag_reset when the controller is ready
dm-verity, dm-crypt: align "struct bvec_iter" correctly
block: sed-opal: handle empty atoms when parsing response
net/iucv: fix the allocation size of iucv_path_table array
MIPS: Clear Cause.BD in instruction_pointer_set
x86/xen: Add some null pointer checking to smp.c
x86/xen: Fix memory leak in xen_smp_intr_init{_pv}()
xen/events: only register debug interrupt for 2-level events
LTS: Update to 4.14.342
selftests/vm: fix map_hugetlb length used for testing read and write
selftests/vm: fix display of page size in map_hugetlb
getrusage: use sig->stats_lock rather than lock_task_sighand()
getrusage: use __for_each_thread()
getrusage: move thread_group_cputime_adjusted() outside of lock_task_sighand()
getrusage: add the "signal_struct *sig" local variable
hv_netvsc: use netif_is_bond_master() instead of open code
um: allow not setting extra rpaths in the linux binary
selftests: mm: fix map_hugetlb failure on 64K page size systems
tools/selftest/vm: allow choosing mem size and page size in map_hugetlb
netrom: Fix data-races around sysctl_net_busy_read
netrom: Fix a data-race around sysctl_netrom_link_fails_count
netrom: Fix a data-race around sysctl_netrom_routing_control
netrom: Fix a data-race around sysctl_netrom_transport_no_activity_timeout
netrom: Fix a data-race around sysctl_netrom_transport_requested_window_size
netrom: Fix a data-race around sysctl_netrom_transport_busy_delay
netrom: Fix a data-race around sysctl_netrom_transport_acknowledge_delay
netrom: Fix a data-race around sysctl_netrom_transport_maximum_tries
netrom: Fix a data-race around sysctl_netrom_transport_timeout
netrom: Fix data-races around sysctl_netrom_network_ttl_initialiser
netrom: Fix a data-race around sysctl_netrom_obsolescence_count_initialiser
netrom: Fix a data-race around sysctl_netrom_default_path_quality
netfilter: nf_conntrack_h323: Add protection for bmp length out of range
netfilter: nf_ct_h323: Extend nf_h323_error_boundary to work on bits as well
netfilter: nf_ct_h323: Convert CHECK_BOUND macro to function
netfilter: nf_ct_h323: Out Of Bound Read in Netfilter Conntrack
netfilter: nf_conntrack_h323: Remove typedef struct
geneve: make sure to pull inner header in geneve_rx()
net: geneve: modify IP header check in geneve6_xmit_skb and geneve_xmit_skb
net: move definition of pcpu_lstats to header file
net: lan78xx: fix runtime PM count underflow on link stop
lan78xx: Fix race conditions in suspend/resume handling
lan78xx: Fix partial packet errors on suspend/resume
lan78xx: Add missing return code checks
lan78xx: Fix white space and style issues
net: usb: lan78xx: Remove lots of set but unused 'ret' variables
net: usb: lan78xx: Disable interrupts before calling generic_handle_irq()
net: lan78xx: Allow for VLAN headers in timeout calcs
ip: validate header length on virtual device xmit
LTS: Update to 4.14.341
gpio: 74x164: Enable output pins after registers are reset
cachefiles: fix memory leak in cachefiles_add_cache()
mmc: core: Fix eMMC initialization with 1-bit bus connection
btrfs: dev-replace: properly validate device names
wifi: nl80211: reject iftype change with mesh ID change
gtp: fix use-after-free and null-ptr-deref in gtp_newlink()
ALSA: Drop leftover snd-rtctimer stuff from Makefile
power: supply: bq27xxx-i2c: Do not free non existing IRQ
efi/capsule-loader: fix incorrect allocation size
Bluetooth: Enforce validation on max value of connection interval
Bluetooth: hci_event: Fix handling of HCI_EV_IO_CAPA_REQUEST
Bluetooth: Avoid potential use-after-free in hci_error_reset
net: usb: dm9601: fix wrong return value in dm9601_mdio_read
lan78xx: enable auto speed configuration for LAN7850 if no EEPROM is detected
netlink: Fix kernel-infoleak-after-free in __skb_datagram_iter
Conflicts:
drivers/android/binder.c
fs/aio.c
fs/select.c
include/net/netns/ipv4.h
mm/memory-failure.c
mm/page_alloc.c
net/core/filter.c
net/ipv4/sysctl_net_ipv4.c
net/ipv4/tcp_ipv4.c
sound/usb/stream.c
Change-Id: I8096aaa78b418b341e428ada23445295d781a238
645 lines
20 KiB
C
645 lines
20 KiB
C
/*
|
|
* linux/drivers/char/serial_core.h
|
|
*
|
|
* Copyright (C) 2000 Deep Blue Solutions Ltd.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
#ifndef LINUX_SERIAL_CORE_H
|
|
#define LINUX_SERIAL_CORE_H
|
|
|
|
#include <linux/bitops.h>
|
|
#include <linux/compiler.h>
|
|
#include <linux/interrupt.h>
|
|
#include <linux/circ_buf.h>
|
|
#include <linux/spinlock.h>
|
|
#include <linux/sched.h>
|
|
#include <linux/tty.h>
|
|
#include <linux/mutex.h>
|
|
#include <linux/sysrq.h>
|
|
#include <uapi/linux/serial_core.h>
|
|
|
|
#ifdef CONFIG_SERIAL_CORE_CONSOLE
|
|
#define uart_console(port) \
|
|
((port)->cons && (port)->cons->index == (port)->line)
|
|
#else
|
|
#define uart_console(port) ({ (void)port; 0; })
|
|
#endif
|
|
|
|
struct uart_port;
|
|
struct serial_struct;
|
|
struct device;
|
|
|
|
/*
|
|
* This structure describes all the operations that can be done on the
|
|
* physical hardware. See Documentation/serial/driver for details.
|
|
*/
|
|
struct uart_ops {
|
|
unsigned int (*tx_empty)(struct uart_port *);
|
|
void (*set_mctrl)(struct uart_port *, unsigned int mctrl);
|
|
unsigned int (*get_mctrl)(struct uart_port *);
|
|
void (*stop_tx)(struct uart_port *);
|
|
void (*start_tx)(struct uart_port *);
|
|
void (*throttle)(struct uart_port *);
|
|
void (*unthrottle)(struct uart_port *);
|
|
void (*send_xchar)(struct uart_port *, char ch);
|
|
void (*stop_rx)(struct uart_port *);
|
|
void (*enable_ms)(struct uart_port *);
|
|
void (*break_ctl)(struct uart_port *, int ctl);
|
|
int (*startup)(struct uart_port *);
|
|
void (*shutdown)(struct uart_port *);
|
|
void (*flush_buffer)(struct uart_port *);
|
|
void (*set_termios)(struct uart_port *, struct ktermios *new,
|
|
struct ktermios *old);
|
|
void (*set_ldisc)(struct uart_port *, struct ktermios *);
|
|
void (*pm)(struct uart_port *, unsigned int state,
|
|
unsigned int oldstate);
|
|
void (*wake_peer)(struct uart_port *);
|
|
|
|
/*
|
|
* Return a string describing the type of the port
|
|
*/
|
|
const char *(*type)(struct uart_port *);
|
|
|
|
/*
|
|
* Release IO and memory resources used by the port.
|
|
* This includes iounmap if necessary.
|
|
*/
|
|
void (*release_port)(struct uart_port *);
|
|
|
|
/*
|
|
* Request IO and memory resources used by the port.
|
|
* This includes iomapping the port if necessary.
|
|
*/
|
|
int (*request_port)(struct uart_port *);
|
|
void (*config_port)(struct uart_port *, int);
|
|
int (*verify_port)(struct uart_port *, struct serial_struct *);
|
|
int (*ioctl)(struct uart_port *, unsigned int, unsigned long);
|
|
#ifdef CONFIG_CONSOLE_POLL
|
|
int (*poll_init)(struct uart_port *);
|
|
void (*poll_put_char)(struct uart_port *, unsigned char);
|
|
int (*poll_get_char)(struct uart_port *);
|
|
#endif
|
|
};
|
|
|
|
#define NO_POLL_CHAR 0x00ff0000
|
|
#define UART_CONFIG_TYPE (1 << 0)
|
|
#define UART_CONFIG_IRQ (1 << 1)
|
|
|
|
struct uart_icount {
|
|
__u32 cts;
|
|
__u32 dsr;
|
|
__u32 rng;
|
|
__u32 dcd;
|
|
__u32 rx;
|
|
__u32 tx;
|
|
__u32 frame;
|
|
__u32 overrun;
|
|
__u32 parity;
|
|
__u32 brk;
|
|
__u32 buf_overrun;
|
|
};
|
|
|
|
typedef unsigned int __bitwise upf_t;
|
|
typedef unsigned int __bitwise upstat_t;
|
|
|
|
struct uart_port {
|
|
spinlock_t lock; /* port lock */
|
|
unsigned long iobase; /* in/out[bwl] */
|
|
unsigned char __iomem *membase; /* read/write[bwl] */
|
|
unsigned int (*serial_in)(struct uart_port *, int);
|
|
void (*serial_out)(struct uart_port *, int, int);
|
|
void (*set_termios)(struct uart_port *,
|
|
struct ktermios *new,
|
|
struct ktermios *old);
|
|
void (*set_ldisc)(struct uart_port *,
|
|
struct ktermios *);
|
|
unsigned int (*get_mctrl)(struct uart_port *);
|
|
void (*set_mctrl)(struct uart_port *, unsigned int);
|
|
int (*startup)(struct uart_port *port);
|
|
void (*shutdown)(struct uart_port *port);
|
|
void (*throttle)(struct uart_port *port);
|
|
void (*unthrottle)(struct uart_port *port);
|
|
int (*handle_irq)(struct uart_port *);
|
|
void (*pm)(struct uart_port *, unsigned int state,
|
|
unsigned int old);
|
|
void (*handle_break)(struct uart_port *);
|
|
int (*rs485_config)(struct uart_port *,
|
|
struct serial_rs485 *rs485);
|
|
unsigned int irq; /* irq number */
|
|
unsigned long irqflags; /* irq flags */
|
|
unsigned int uartclk; /* base uart clock */
|
|
unsigned int fifosize; /* tx fifo size */
|
|
unsigned char x_char; /* xon/xoff char */
|
|
unsigned char regshift; /* reg offset shift */
|
|
unsigned char iotype; /* io access style */
|
|
unsigned char quirks; /* internal quirks */
|
|
|
|
#define UPIO_PORT (SERIAL_IO_PORT) /* 8b I/O port access */
|
|
#define UPIO_HUB6 (SERIAL_IO_HUB6) /* Hub6 ISA card */
|
|
#define UPIO_MEM (SERIAL_IO_MEM) /* driver-specific */
|
|
#define UPIO_MEM32 (SERIAL_IO_MEM32) /* 32b little endian */
|
|
#define UPIO_AU (SERIAL_IO_AU) /* Au1x00 and RT288x type IO */
|
|
#define UPIO_TSI (SERIAL_IO_TSI) /* Tsi108/109 type IO */
|
|
#define UPIO_MEM32BE (SERIAL_IO_MEM32BE) /* 32b big endian */
|
|
#define UPIO_MEM16 (SERIAL_IO_MEM16) /* 16b little endian */
|
|
|
|
/* quirks must be updated while holding port mutex */
|
|
#define UPQ_NO_TXEN_TEST BIT(0)
|
|
|
|
unsigned int read_status_mask; /* driver specific */
|
|
unsigned int ignore_status_mask; /* driver specific */
|
|
struct uart_state *state; /* pointer to parent state */
|
|
struct uart_icount icount; /* statistics */
|
|
|
|
struct console *cons; /* struct console, if any */
|
|
#if defined(CONFIG_SERIAL_CORE_CONSOLE) || defined(SUPPORT_SYSRQ)
|
|
unsigned long sysrq; /* sysrq timeout */
|
|
unsigned int sysrq_ch; /* char for sysrq */
|
|
#endif
|
|
|
|
/* flags must be updated while holding port mutex */
|
|
upf_t flags;
|
|
|
|
/*
|
|
* These flags must be equivalent to the flags defined in
|
|
* include/uapi/linux/tty_flags.h which are the userspace definitions
|
|
* assigned from the serial_struct flags in uart_set_info()
|
|
* [for bit definitions in the UPF_CHANGE_MASK]
|
|
*
|
|
* Bits [0..UPF_LAST_USER] are userspace defined/visible/changeable
|
|
* The remaining bits are serial-core specific and not modifiable by
|
|
* userspace.
|
|
*/
|
|
#define UPF_FOURPORT ((__force upf_t) ASYNC_FOURPORT /* 1 */ )
|
|
#define UPF_SAK ((__force upf_t) ASYNC_SAK /* 2 */ )
|
|
#define UPF_SPD_HI ((__force upf_t) ASYNC_SPD_HI /* 4 */ )
|
|
#define UPF_SPD_VHI ((__force upf_t) ASYNC_SPD_VHI /* 5 */ )
|
|
#define UPF_SPD_CUST ((__force upf_t) ASYNC_SPD_CUST /* 0x0030 */ )
|
|
#define UPF_SPD_WARP ((__force upf_t) ASYNC_SPD_WARP /* 0x1010 */ )
|
|
#define UPF_SPD_MASK ((__force upf_t) ASYNC_SPD_MASK /* 0x1030 */ )
|
|
#define UPF_SKIP_TEST ((__force upf_t) ASYNC_SKIP_TEST /* 6 */ )
|
|
#define UPF_AUTO_IRQ ((__force upf_t) ASYNC_AUTO_IRQ /* 7 */ )
|
|
#define UPF_HARDPPS_CD ((__force upf_t) ASYNC_HARDPPS_CD /* 11 */ )
|
|
#define UPF_SPD_SHI ((__force upf_t) ASYNC_SPD_SHI /* 12 */ )
|
|
#define UPF_LOW_LATENCY ((__force upf_t) ASYNC_LOW_LATENCY /* 13 */ )
|
|
#define UPF_BUGGY_UART ((__force upf_t) ASYNC_BUGGY_UART /* 14 */ )
|
|
#define UPF_MAGIC_MULTIPLIER ((__force upf_t) ASYNC_MAGIC_MULTIPLIER /* 16 */ )
|
|
|
|
#define UPF_NO_THRE_TEST ((__force upf_t) (1 << 19))
|
|
/* Port has hardware-assisted h/w flow control */
|
|
#define UPF_AUTO_CTS ((__force upf_t) (1 << 20))
|
|
#define UPF_AUTO_RTS ((__force upf_t) (1 << 21))
|
|
#define UPF_HARD_FLOW ((__force upf_t) (UPF_AUTO_CTS | UPF_AUTO_RTS))
|
|
/* Port has hardware-assisted s/w flow control */
|
|
#define UPF_SOFT_FLOW ((__force upf_t) (1 << 22))
|
|
#define UPF_CONS_FLOW ((__force upf_t) (1 << 23))
|
|
#define UPF_SHARE_IRQ ((__force upf_t) (1 << 24))
|
|
#define UPF_EXAR_EFR ((__force upf_t) (1 << 25))
|
|
#define UPF_BUG_THRE ((__force upf_t) (1 << 26))
|
|
/* The exact UART type is known and should not be probed. */
|
|
#define UPF_FIXED_TYPE ((__force upf_t) (1 << 27))
|
|
#define UPF_BOOT_AUTOCONF ((__force upf_t) (1 << 28))
|
|
#define UPF_FIXED_PORT ((__force upf_t) (1 << 29))
|
|
#define UPF_DEAD ((__force upf_t) (1 << 30))
|
|
#define UPF_IOREMAP ((__force upf_t) (1 << 31))
|
|
|
|
#define __UPF_CHANGE_MASK 0x17fff
|
|
#define UPF_CHANGE_MASK ((__force upf_t) __UPF_CHANGE_MASK)
|
|
#define UPF_USR_MASK ((__force upf_t) (UPF_SPD_MASK|UPF_LOW_LATENCY))
|
|
|
|
#if __UPF_CHANGE_MASK > ASYNC_FLAGS
|
|
#error Change mask not equivalent to userspace-visible bit defines
|
|
#endif
|
|
|
|
/*
|
|
* Must hold termios_rwsem, port mutex and port lock to change;
|
|
* can hold any one lock to read.
|
|
*/
|
|
upstat_t status;
|
|
|
|
#define UPSTAT_CTS_ENABLE ((__force upstat_t) (1 << 0))
|
|
#define UPSTAT_DCD_ENABLE ((__force upstat_t) (1 << 1))
|
|
#define UPSTAT_AUTORTS ((__force upstat_t) (1 << 2))
|
|
#define UPSTAT_AUTOCTS ((__force upstat_t) (1 << 3))
|
|
#define UPSTAT_AUTOXOFF ((__force upstat_t) (1 << 4))
|
|
|
|
int hw_stopped; /* sw-assisted CTS flow state */
|
|
unsigned int mctrl; /* current modem ctrl settings */
|
|
unsigned int timeout; /* character-based timeout */
|
|
unsigned int type; /* port type */
|
|
const struct uart_ops *ops;
|
|
unsigned int custom_divisor;
|
|
unsigned int line; /* port index */
|
|
unsigned int minor;
|
|
resource_size_t mapbase; /* for ioremap */
|
|
resource_size_t mapsize;
|
|
struct device *dev; /* parent device */
|
|
unsigned char hub6; /* this should be in the 8250 driver */
|
|
unsigned char suspended;
|
|
unsigned char unused[2];
|
|
const char *name; /* port name */
|
|
struct attribute_group *attr_group; /* port specific attributes */
|
|
const struct attribute_group **tty_groups; /* all attributes (serial core use only) */
|
|
struct serial_rs485 rs485;
|
|
void *private_data; /* generic platform data pointer */
|
|
};
|
|
|
|
/**
|
|
* uart_port_lock - Lock the UART port
|
|
* @up: Pointer to UART port structure
|
|
*/
|
|
static inline void uart_port_lock(struct uart_port *up)
|
|
{
|
|
spin_lock(&up->lock);
|
|
}
|
|
|
|
/**
|
|
* uart_port_lock_irq - Lock the UART port and disable interrupts
|
|
* @up: Pointer to UART port structure
|
|
*/
|
|
static inline void uart_port_lock_irq(struct uart_port *up)
|
|
{
|
|
spin_lock_irq(&up->lock);
|
|
}
|
|
|
|
/**
|
|
* uart_port_lock_irqsave - Lock the UART port, save and disable interrupts
|
|
* @up: Pointer to UART port structure
|
|
* @flags: Pointer to interrupt flags storage
|
|
*/
|
|
static inline void uart_port_lock_irqsave(struct uart_port *up, unsigned long *flags)
|
|
{
|
|
spin_lock_irqsave(&up->lock, *flags);
|
|
}
|
|
|
|
/**
|
|
* uart_port_trylock - Try to lock the UART port
|
|
* @up: Pointer to UART port structure
|
|
*
|
|
* Returns: True if lock was acquired, false otherwise
|
|
*/
|
|
static inline bool uart_port_trylock(struct uart_port *up)
|
|
{
|
|
return spin_trylock(&up->lock);
|
|
}
|
|
|
|
/**
|
|
* uart_port_trylock_irqsave - Try to lock the UART port, save and disable interrupts
|
|
* @up: Pointer to UART port structure
|
|
* @flags: Pointer to interrupt flags storage
|
|
*
|
|
* Returns: True if lock was acquired, false otherwise
|
|
*/
|
|
static inline bool uart_port_trylock_irqsave(struct uart_port *up, unsigned long *flags)
|
|
{
|
|
return spin_trylock_irqsave(&up->lock, *flags);
|
|
}
|
|
|
|
/**
|
|
* uart_port_unlock - Unlock the UART port
|
|
* @up: Pointer to UART port structure
|
|
*/
|
|
static inline void uart_port_unlock(struct uart_port *up)
|
|
{
|
|
spin_unlock(&up->lock);
|
|
}
|
|
|
|
/**
|
|
* uart_port_unlock_irq - Unlock the UART port and re-enable interrupts
|
|
* @up: Pointer to UART port structure
|
|
*/
|
|
static inline void uart_port_unlock_irq(struct uart_port *up)
|
|
{
|
|
spin_unlock_irq(&up->lock);
|
|
}
|
|
|
|
/**
|
|
* uart_port_unlock_irqrestore - Unlock the UART port, restore interrupts
|
|
* @up: Pointer to UART port structure
|
|
* @flags: The saved interrupt flags for restore
|
|
*/
|
|
static inline void uart_port_unlock_irqrestore(struct uart_port *up, unsigned long flags)
|
|
{
|
|
spin_unlock_irqrestore(&up->lock, flags);
|
|
}
|
|
|
|
static inline int serial_port_in(struct uart_port *up, int offset)
|
|
{
|
|
return up->serial_in(up, offset);
|
|
}
|
|
|
|
static inline void serial_port_out(struct uart_port *up, int offset, int value)
|
|
{
|
|
up->serial_out(up, offset, value);
|
|
}
|
|
|
|
/**
|
|
* enum uart_pm_state - power states for UARTs
|
|
* @UART_PM_STATE_ON: UART is powered, up and operational
|
|
* @UART_PM_STATE_OFF: UART is powered off
|
|
* @UART_PM_STATE_UNDEFINED: sentinel
|
|
*/
|
|
enum uart_pm_state {
|
|
UART_PM_STATE_ON = 0,
|
|
UART_PM_STATE_OFF = 3, /* number taken from ACPI */
|
|
UART_PM_STATE_UNDEFINED,
|
|
};
|
|
|
|
/*
|
|
* This is the state information which is persistent across opens.
|
|
*/
|
|
struct uart_state {
|
|
struct tty_port port;
|
|
|
|
enum uart_pm_state pm_state;
|
|
struct circ_buf xmit;
|
|
|
|
atomic_t refcount;
|
|
wait_queue_head_t remove_wait;
|
|
struct uart_port *uart_port;
|
|
};
|
|
|
|
#define UART_XMIT_SIZE PAGE_SIZE
|
|
|
|
|
|
/* number of characters left in xmit buffer before we ask for more */
|
|
#define WAKEUP_CHARS 256
|
|
|
|
/**
|
|
* uart_xmit_advance - Advance xmit buffer and account Tx'ed chars
|
|
* @up: uart_port structure describing the port
|
|
* @chars: number of characters sent
|
|
*
|
|
* This function advances the tail of circular xmit buffer by the number of
|
|
* @chars transmitted and handles accounting of transmitted bytes (into
|
|
* @up's icount.tx).
|
|
*/
|
|
static inline void uart_xmit_advance(struct uart_port *up, unsigned int chars)
|
|
{
|
|
struct circ_buf *xmit = &up->state->xmit;
|
|
|
|
xmit->tail = (xmit->tail + chars) & (UART_XMIT_SIZE - 1);
|
|
up->icount.tx += chars;
|
|
}
|
|
|
|
struct module;
|
|
struct tty_driver;
|
|
|
|
struct uart_driver {
|
|
struct module *owner;
|
|
const char *driver_name;
|
|
const char *dev_name;
|
|
int major;
|
|
int minor;
|
|
int nr;
|
|
struct console *cons;
|
|
|
|
/*
|
|
* these are private; the low level driver should not
|
|
* touch these; they should be initialised to NULL
|
|
*/
|
|
struct uart_state *state;
|
|
struct tty_driver *tty_driver;
|
|
};
|
|
|
|
void uart_write_wakeup(struct uart_port *port);
|
|
|
|
/*
|
|
* Baud rate helpers.
|
|
*/
|
|
void uart_update_timeout(struct uart_port *port, unsigned int cflag,
|
|
unsigned int baud);
|
|
unsigned int uart_get_baud_rate(struct uart_port *port, struct ktermios *termios,
|
|
struct ktermios *old, unsigned int min,
|
|
unsigned int max);
|
|
unsigned int uart_get_divisor(struct uart_port *port, unsigned int baud);
|
|
|
|
/* Base timer interval for polling */
|
|
static inline int uart_poll_timeout(struct uart_port *port)
|
|
{
|
|
int timeout = port->timeout;
|
|
|
|
return timeout > 6 ? (timeout / 2 - 2) : 1;
|
|
}
|
|
|
|
/*
|
|
* Console helpers.
|
|
*/
|
|
struct earlycon_device {
|
|
struct console *con;
|
|
struct uart_port port;
|
|
char options[16]; /* e.g., 115200n8 */
|
|
unsigned int baud;
|
|
};
|
|
|
|
struct earlycon_id {
|
|
char name[15];
|
|
char name_term; /* In case compiler didn't '\0' term name */
|
|
char compatible[128];
|
|
int (*setup)(struct earlycon_device *, const char *options);
|
|
};
|
|
|
|
extern const struct earlycon_id *__earlycon_table[];
|
|
extern const struct earlycon_id *__earlycon_table_end[];
|
|
|
|
#if defined(CONFIG_SERIAL_EARLYCON) && !defined(MODULE)
|
|
#define EARLYCON_USED_OR_UNUSED __used
|
|
#else
|
|
#define EARLYCON_USED_OR_UNUSED __maybe_unused
|
|
#endif
|
|
|
|
#define _OF_EARLYCON_DECLARE(_name, compat, fn, unique_id) \
|
|
static const struct earlycon_id unique_id \
|
|
EARLYCON_USED_OR_UNUSED __initconst \
|
|
= { .name = __stringify(_name), \
|
|
.compatible = compat, \
|
|
.setup = fn }; \
|
|
static const struct earlycon_id EARLYCON_USED_OR_UNUSED \
|
|
__section(__earlycon_table) \
|
|
* const __PASTE(__p, unique_id) = &unique_id
|
|
|
|
#define OF_EARLYCON_DECLARE(_name, compat, fn) \
|
|
_OF_EARLYCON_DECLARE(_name, compat, fn, \
|
|
__UNIQUE_ID(__earlycon_##_name))
|
|
|
|
#define EARLYCON_DECLARE(_name, fn) OF_EARLYCON_DECLARE(_name, "", fn)
|
|
|
|
extern int of_setup_earlycon(const struct earlycon_id *match,
|
|
unsigned long node,
|
|
const char *options);
|
|
|
|
#ifdef CONFIG_SERIAL_EARLYCON
|
|
extern bool earlycon_init_is_deferred __initdata;
|
|
int setup_earlycon(char *buf);
|
|
#else
|
|
static const bool earlycon_init_is_deferred;
|
|
static inline int setup_earlycon(char *buf) { return 0; }
|
|
#endif
|
|
|
|
struct uart_port *uart_get_console(struct uart_port *ports, int nr,
|
|
struct console *c);
|
|
int uart_parse_earlycon(char *p, unsigned char *iotype, resource_size_t *addr,
|
|
char **options);
|
|
void uart_parse_options(char *options, int *baud, int *parity, int *bits,
|
|
int *flow);
|
|
int uart_set_options(struct uart_port *port, struct console *co, int baud,
|
|
int parity, int bits, int flow);
|
|
struct tty_driver *uart_console_device(struct console *co, int *index);
|
|
void uart_console_write(struct uart_port *port, const char *s,
|
|
unsigned int count,
|
|
void (*putchar)(struct uart_port *, int));
|
|
|
|
/*
|
|
* Port/driver registration/removal
|
|
*/
|
|
int uart_register_driver(struct uart_driver *uart);
|
|
void uart_unregister_driver(struct uart_driver *uart);
|
|
int uart_add_one_port(struct uart_driver *reg, struct uart_port *port);
|
|
int uart_remove_one_port(struct uart_driver *reg, struct uart_port *port);
|
|
int uart_match_port(struct uart_port *port1, struct uart_port *port2);
|
|
|
|
/*
|
|
* Power Management
|
|
*/
|
|
int uart_suspend_port(struct uart_driver *reg, struct uart_port *port);
|
|
int uart_resume_port(struct uart_driver *reg, struct uart_port *port);
|
|
|
|
#define uart_circ_empty(circ) ((circ)->head == (circ)->tail)
|
|
#define uart_circ_clear(circ) ((circ)->head = (circ)->tail = 0)
|
|
|
|
#define uart_circ_chars_pending(circ) \
|
|
(CIRC_CNT((circ)->head, (circ)->tail, UART_XMIT_SIZE))
|
|
|
|
#define uart_circ_chars_free(circ) \
|
|
(CIRC_SPACE((circ)->head, (circ)->tail, UART_XMIT_SIZE))
|
|
|
|
static inline int uart_tx_stopped(struct uart_port *port)
|
|
{
|
|
struct tty_struct *tty = port->state->port.tty;
|
|
if ((tty && tty->stopped) || port->hw_stopped)
|
|
return 1;
|
|
return 0;
|
|
}
|
|
|
|
static inline bool uart_cts_enabled(struct uart_port *uport)
|
|
{
|
|
return !!(uport->status & UPSTAT_CTS_ENABLE);
|
|
}
|
|
|
|
static inline bool uart_softcts_mode(struct uart_port *uport)
|
|
{
|
|
upstat_t mask = UPSTAT_CTS_ENABLE | UPSTAT_AUTOCTS;
|
|
|
|
return ((uport->status & mask) == UPSTAT_CTS_ENABLE);
|
|
}
|
|
|
|
/*
|
|
* The following are helper functions for the low level drivers.
|
|
*/
|
|
|
|
extern void uart_handle_dcd_change(struct uart_port *uport,
|
|
unsigned int status);
|
|
extern void uart_handle_cts_change(struct uart_port *uport,
|
|
unsigned int status);
|
|
|
|
extern void uart_insert_char(struct uart_port *port, unsigned int status,
|
|
unsigned int overrun, unsigned int ch, unsigned int flag);
|
|
|
|
#if defined(SUPPORT_SYSRQ) && defined(CONFIG_MAGIC_SYSRQ_SERIAL)
|
|
static inline int
|
|
uart_handle_sysrq_char(struct uart_port *port, unsigned int ch)
|
|
{
|
|
if (port->sysrq) {
|
|
if (ch && time_before(jiffies, port->sysrq)) {
|
|
handle_sysrq(ch);
|
|
port->sysrq = 0;
|
|
return 1;
|
|
}
|
|
port->sysrq = 0;
|
|
}
|
|
return 0;
|
|
}
|
|
static inline int
|
|
uart_prepare_sysrq_char(struct uart_port *port, unsigned int ch)
|
|
{
|
|
if (port->sysrq) {
|
|
if (ch && time_before(jiffies, port->sysrq)) {
|
|
port->sysrq_ch = ch;
|
|
port->sysrq = 0;
|
|
return 1;
|
|
}
|
|
port->sysrq = 0;
|
|
}
|
|
return 0;
|
|
}
|
|
static inline void
|
|
uart_unlock_and_check_sysrq(struct uart_port *port, unsigned long irqflags)
|
|
{
|
|
int sysrq_ch;
|
|
|
|
sysrq_ch = port->sysrq_ch;
|
|
port->sysrq_ch = 0;
|
|
|
|
spin_unlock_irqrestore(&port->lock, irqflags);
|
|
|
|
if (sysrq_ch)
|
|
handle_sysrq(sysrq_ch);
|
|
}
|
|
#else
|
|
static inline int
|
|
uart_handle_sysrq_char(struct uart_port *port, unsigned int ch) { return 0; }
|
|
static inline int
|
|
uart_prepare_sysrq_char(struct uart_port *port, unsigned int ch) { return 0; }
|
|
static inline void
|
|
uart_unlock_and_check_sysrq(struct uart_port *port, unsigned long irqflags)
|
|
{
|
|
spin_unlock_irqrestore(&port->lock, irqflags);
|
|
}
|
|
#endif
|
|
|
|
/*
|
|
* We do the SysRQ and SAK checking like this...
|
|
*/
|
|
static inline int uart_handle_break(struct uart_port *port)
|
|
{
|
|
struct uart_state *state = port->state;
|
|
|
|
if (port->handle_break)
|
|
port->handle_break(port);
|
|
|
|
#ifdef SUPPORT_SYSRQ
|
|
if (port->cons && port->cons->index == port->line) {
|
|
if (!port->sysrq) {
|
|
port->sysrq = jiffies + HZ*5;
|
|
return 1;
|
|
}
|
|
port->sysrq = 0;
|
|
}
|
|
#endif
|
|
if (port->flags & UPF_SAK)
|
|
do_SAK(state->port.tty);
|
|
return 0;
|
|
}
|
|
|
|
/*
|
|
* UART_ENABLE_MS - determine if port should enable modem status irqs
|
|
*/
|
|
#define UART_ENABLE_MS(port,cflag) ((port)->flags & UPF_HARDPPS_CD || \
|
|
(cflag) & CRTSCTS || \
|
|
!((cflag) & CLOCAL))
|
|
|
|
#endif /* LINUX_SERIAL_CORE_H */
|