include/linux/tty_port.h
Source file repositories/reference/linux-study-clean/include/linux/tty_port.h
File Facts
- System
- Linux kernel
- Corpus path
include/linux/tty_port.h- Extension
.h- Size
- 10634 bytes
- Lines
- 301
- Domain
- Core OS
- Bucket
- Core Kernel Interface
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/kfifo.hlinux/kref.hlinux/mutex.hlinux/tty_buffer.hlinux/tty_driver.hlinux/wait.h
Detected Declarations
struct attribute_groupstruct tty_portstruct tty_structstruct tty_port_operationsstruct tty_port_client_operationsstruct tty_portfunction tty_port_link_wqfunction tty_port_cts_enabledfunction tty_port_set_cts_flowfunction tty_port_activefunction tty_port_set_activefunction tty_port_check_carrierfunction tty_port_set_check_carrierfunction tty_port_suspendedfunction tty_port_set_suspendedfunction tty_port_initializedfunction tty_port_set_initializedfunction tty_port_kopenedfunction tty_port_set_kopenedfunction tty_port_usersfunction tty_port_tty_hangupfunction tty_port_tty_vhangupfunction class_tty_port_tty_constructor
Annotated Snippet
struct tty_port_operations {
bool (*carrier_raised)(struct tty_port *port);
void (*dtr_rts)(struct tty_port *port, bool active);
void (*shutdown)(struct tty_port *port);
int (*activate)(struct tty_port *port, struct tty_struct *tty);
void (*destruct)(struct tty_port *port);
};
struct tty_port_client_operations {
size_t (*receive_buf)(struct tty_port *port, const u8 *cp, const u8 *fp,
size_t count);
void (*lookahead_buf)(struct tty_port *port, const u8 *cp,
const u8 *fp, size_t count);
void (*write_wakeup)(struct tty_port *port);
};
extern const struct tty_port_client_operations tty_port_default_client_ops;
/**
* struct tty_port -- port level information
*
* @buf: buffer for this port, locked internally
* @tty: back pointer to &struct tty_struct, valid only if the tty is open. Use
* tty_port_tty_get() to obtain it (and tty_kref_put() to release).
* @itty: internal back pointer to &struct tty_struct. Avoid this. It should be
* eliminated in the long term.
* @ops: tty port operations (like activate, shutdown), see &struct
* tty_port_operations
* @client_ops: tty port client operations (like receive_buf, write_wakeup).
* By default, tty_port_default_client_ops is used.
* @lock: lock protecting @tty
* @blocked_open: # of procs waiting for open in tty_port_block_til_ready()
* @count: usage count
* @open_wait: open waiters queue (waiting e.g. for a carrier)
* @delta_msr_wait: modem status change queue (waiting for MSR changes)
* @flags: user TTY flags (%ASYNC_)
* @iflags: internal flags (%TTY_PORT_)
* @console: when set, the port is a console
* @mutex: locking, for open, shutdown and other port operations
* @buf_mutex: @xmit_buf alloc lock
* @xmit_buf: optional xmit buffer used by some drivers
* @xmit_fifo: optional xmit buffer used by some drivers
* @close_delay: delay in jiffies to wait when closing the port
* @closing_wait: delay in jiffies for output to be sent before closing
* @drain_delay: set to zero if no pure time based drain is needed else set to
* size of fifo
* @kref: references counter. Reaching zero calls @ops->destruct() if non-%NULL
* or frees the port otherwise.
* @client_data: pointer to private data, for @client_ops
*
* Each device keeps its own port level information. &struct tty_port was
* introduced as a common structure for such information. As every TTY device
* shall have a backing tty_port structure, every driver can use these members.
*
* The tty port has a different lifetime to the tty so must be kept apart.
* In addition be careful as tty -> port mappings are valid for the life
* of the tty object but in many cases port -> tty mappings are valid only
* until a hangup so don't use the wrong path.
*
* Tty port shall be initialized by tty_port_init() and shut down either by
* tty_port_destroy() (refcounting not used), or tty_port_put() (refcounting).
*
* There is a lot of helpers around &struct tty_port too. To name the most
* significant ones: tty_port_open(), tty_port_close() (or
* tty_port_close_start() and tty_port_close_end() separately if need be), and
* tty_port_hangup(). These call @ops->activate() and @ops->shutdown() as
* needed.
*/
struct tty_port {
struct tty_bufhead buf;
struct tty_struct *tty;
struct tty_struct *itty;
const struct tty_port_operations *ops;
const struct tty_port_client_operations *client_ops;
spinlock_t lock;
int blocked_open;
int count;
wait_queue_head_t open_wait;
wait_queue_head_t delta_msr_wait;
unsigned long flags;
unsigned long iflags;
unsigned char console:1;
struct mutex mutex;
struct mutex buf_mutex;
u8 *xmit_buf;
DECLARE_KFIFO_PTR(xmit_fifo, u8);
unsigned int close_delay;
unsigned int closing_wait;
int drain_delay;
struct kref kref;
Annotation
- Immediate include surface: `linux/kfifo.h`, `linux/kref.h`, `linux/mutex.h`, `linux/tty_buffer.h`, `linux/tty_driver.h`, `linux/wait.h`.
- Detected declarations: `struct attribute_group`, `struct tty_port`, `struct tty_struct`, `struct tty_port_operations`, `struct tty_port_client_operations`, `struct tty_port`, `function tty_port_link_wq`, `function tty_port_cts_enabled`, `function tty_port_set_cts_flow`, `function tty_port_active`.
- Atlas domain: Core OS / Core Kernel Interface.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.