Rsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget,/translations/zh_CN/driver-api/serial/drivermodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/zh_TW/driver-api/serial/drivermodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/it_IT/driver-api/serial/drivermodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/ja_JP/driver-api/serial/drivermodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/ko_KR/driver-api/serial/drivermodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/pt_BR/driver-api/serial/drivermodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/sp_SP/driver-api/serial/drivermodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hLow Level Serial APIh]hLow Level Serial API}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhF/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver.rsthKubh paragraph)}(hThis document is meant as a brief overview of some aspects of the new serial driver. It is not complete, any questions you have should be directed to h](hThis document is meant as a brief overview of some aspects of the new serial driver. It is not complete, any questions you have should be directed to <}(hhhhhNhNubh reference)}(hrmk@arm.linux.org.ukh]hrmk@arm.linux.org.uk}(hhhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:rmk@arm.linux.org.ukuh1hhhubh>}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(h>The reference implementation is contained within amba-pl011.c.h]h>The reference implementation is contained within amba-pl011.c.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hhh](h)}(h Low Level Serial Hardware Driverh]h Low Level Serial Hardware Driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hX*The low level serial hardware driver is responsible for supplying port information (defined by uart_port) and a set of control methods (defined by uart_ops) to the core serial driver. The low level driver is also responsible for handling interrupts for the port, and providing any console support.h]hX*The low level serial hardware driver is responsible for supplying port information (defined by uart_port) and a set of control methods (defined by uart_ops) to the core serial driver. The low level driver is also responsible for handling interrupts for the port, and providing any console support.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h] low-level-serial-hardware-driverah ]h"] low level serial hardware driverah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hConsole Supporth]hConsole Support}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hhhhhKubh)}(hwThe serial core provides a few helper functions. This includes decoding command line arguments (uart_parse_options()).h]hwThe serial core provides a few helper functions. This includes decoding command line arguments (uart_parse_options()).}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj&hhubh)}(hThere is also a helper function (uart_console_write()) which performs a character by character write, translating newlines to CRLF sequences. Driver writers are recommended to use this function rather than implementing their own version.h]hThere is also a helper function (uart_console_write()) which performs a character by character write, translating newlines to CRLF sequences. Driver writers are recommended to use this function rather than implementing their own version.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj&hhubeh}(h]console-supportah ]h"]console supportah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hLockingh]hLocking}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hhhhhK%ubh)}(hIt is the responsibility of the low level hardware driver to perform the necessary locking using port->lock. There are some exceptions (which are described in the struct uart_ops listing below.)h]hIt is the responsibility of the low level hardware driver to perform the necessary locking using port->lock. There are some exceptions (which are described in the struct uart_ops listing below.)}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hj[hhubh)}(hDThere are two locks. A per-port spinlock, and an overall semaphore.h]hDThere are two locks. A per-port spinlock, and an overall semaphore.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hj[hhubh)}(hKFrom the core driver perspective, the port->lock locks the following data::h]hJFrom the core driver perspective, the port->lock locks the following data:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hj[hhubh literal_block)}(hhport->mctrl port->icount port->state->xmit.head (circ_buf->head) port->state->xmit.tail (circ_buf->tail)h]hhport->mctrl port->icount port->state->xmit.head (circ_buf->head) port->state->xmit.tail (circ_buf->tail)}hjsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jhhhK0hj[hhubh)}(hPThe low level driver is free to use this lock to provide any additional locking.h]hPThe low level driver is free to use this lock to provide any additional locking.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hj[hhubh)}(hThe port_sem semaphore is used to protect against ports being added/ removed or reconfigured at inappropriate times. Since v2.6.27, this semaphore has been the 'mutex' member of the tty_port struct, and commonly referred to as the port mutex.h]hThe port_sem semaphore is used to protect against ports being added/ removed or reconfigured at inappropriate times. Since v2.6.27, this semaphore has been the ‘mutex’ member of the tty_port struct, and commonly referred to as the port mutex.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK8hj[hhubeh}(h]lockingah ]h"]lockingah$]h&]uh1hhhhhhhhK%ubh)}(hhh](h)}(huart_opsh]huart_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK?ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singleuart_ops (C struct) c.uart_opshNtauh1jhjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhNubhdesc)}(hhh](hdesc_signature)}(huart_opsh]hdesc_signature_line)}(hstruct uart_opsh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(huart_opsh]h desc_sig_name)}(hjh]huart_ops}(hj+hhhNhNubah}(h]h ]nah"]h$]h&]uh1j)hj%ubah}(h]h ](sig-namedescnameeh"]h$]h&]jjuh1j#hjhhhjhKubeh}(h]h ]h"]h$]h&]jj add_permalinkuh1jsphinx_line_type declaratorhjhhhjhKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhKhjhhubh desc_content)}(hhh]h bullet_list)}(hhh]h list_item)}(h,interface between serial_core and the driverh]h)}(hjch]h,interface between serial_core and the driver}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK%hjaubah}(h]h ]h"]h$]h&]uh1j_hj\hhhjrhNubah}(h]h ]h"]h$]h&]bullet-uh1jZhjrhK%hjWhhubah}(h]h ]h"]h$]h&]uh1jUhjhhhjhKubeh}(h]h ](cstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjhjhNubh container)}(hX **Definition**:: 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 (*start_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, const struct ktermios *old); void (*set_ldisc)(struct uart_port *, struct ktermios *); void (*pm)(struct uart_port *, unsigned int state, unsigned int oldstate); const char *(*type)(struct uart_port *); void (*release_port)(struct uart_port *); 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; }; **Members** ``tx_empty`` ``unsigned int ()(struct uart_port *port)`` ``set_mctrl`` ``void ()(struct uart_port *port, unsigned int mctrl)`` ``get_mctrl`` ``unsigned int ()(struct uart_port *port)`` ``stop_tx`` ``void ()(struct uart_port *port)`` ``start_tx`` ``void ()(struct uart_port *port)`` ``throttle`` ``void ()(struct uart_port *port)`` ``unthrottle`` ``void ()(struct uart_port *port)`` ``send_xchar`` ``void ()(struct uart_port *port, char ch)`` ``stop_rx`` ``void ()(struct uart_port *port)`` ``start_rx`` ``void ()(struct uart_port *port)`` ``enable_ms`` ``void ()(struct uart_port *port)`` ``break_ctl`` ``void ()(struct uart_port *port, int ctl)`` ``startup`` ``int ()(struct uart_port *port)`` ``shutdown`` ``void ()(struct uart_port *port)`` ``flush_buffer`` ``void ()(struct uart_port *port)`` ``set_termios`` ``void ()(struct uart_port *port, struct ktermios *new, struct ktermios *old)`` ``set_ldisc`` ``void ()(struct uart_port *port, struct ktermios *termios)`` ``pm`` ``void ()(struct uart_port *port, unsigned int state, unsigned int oldstate)`` ``type`` ``const char *()(struct uart_port *port)`` ``release_port`` ``void ()(struct uart_port *port)`` ``request_port`` ``int ()(struct uart_port *port)`` ``config_port`` ``void ()(struct uart_port *port, int type)`` ``verify_port`` ``int ()(struct uart_port *port, struct serial_struct *serinfo)`` ``ioctl`` ``int ()(struct uart_port *port, unsigned int cmd, unsigned long arg)`` ``poll_init`` ``int ()(struct uart_port *port)`` ``poll_put_char`` ``void ()(struct uart_port *port, unsigned char ch)`` ``poll_get_char`` ``int ()(struct uart_port *port)``h](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK)hjubj)}(hXstruct 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 (*start_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, const struct ktermios *old); void (*set_ldisc)(struct uart_port *, struct ktermios *); void (*pm)(struct uart_port *, unsigned int state, unsigned int oldstate); const char *(*type)(struct uart_port *); void (*release_port)(struct uart_port *); 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; };h]hXstruct 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 (*start_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, const struct ktermios *old); void (*set_ldisc)(struct uart_port *, struct ktermios *); void (*pm)(struct uart_port *, unsigned int state, unsigned int oldstate); const char *(*type)(struct uart_port *); void (*release_port)(struct uart_port *); 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; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK+hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKKhjubhdefinition_list)}(hhh](hdefinition_list_item)}(h9``tx_empty`` ``unsigned int ()(struct uart_port *port)`` h](hterm)}(h ``tx_empty``h]hliteral)}(hjh]htx_empty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK+hjubh definition)}(hhh]h)}(h+``unsigned int ()(struct uart_port *port)``h]j)}(hjh]h'unsigned int ()(struct uart_port *port)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhjhK+hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK+hjubj)}(hF``set_mctrl`` ``void ()(struct uart_port *port, unsigned int mctrl)`` h](j)}(h ``set_mctrl``h]j)}(hj6h]h set_mctrl}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK6hj0ubj )}(hhh]h)}(h7``void ()(struct uart_port *port, unsigned int mctrl)``h]j)}(hjQh]h3void ()(struct uart_port *port, unsigned int mctrl)}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhjKhK6hjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhK6hjubj)}(h:``get_mctrl`` ``unsigned int ()(struct uart_port *port)`` h](j)}(h ``get_mctrl``h]j)}(hjxh]h get_mctrl}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKIhjrubj )}(hhh]h)}(h+``unsigned int ()(struct uart_port *port)``h]j)}(hjh]h'unsigned int ()(struct uart_port *port)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjhKIhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhKIhjubj)}(h0``stop_tx`` ``void ()(struct uart_port *port)`` h](j)}(h ``stop_tx``h]j)}(hjh]hstop_tx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK]hjubj )}(hhh]h)}(h#``void ()(struct uart_port *port)``h]j)}(hjh]hvoid ()(struct uart_port *port)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjhK]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK]hjubj)}(h1``start_tx`` ``void ()(struct uart_port *port)`` h](j)}(h ``start_tx``h]j)}(hjh]hstart_tx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKihjubj )}(hhh]h)}(h#``void ()(struct uart_port *port)``h]j)}(hjh]hvoid ()(struct uart_port *port)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjhKihjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKihjubj)}(h1``throttle`` ``void ()(struct uart_port *port)`` h](j)}(h ``throttle``h]j)}(hj>h]hthrottle}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKqhj8ubj )}(hhh]h)}(h#``void ()(struct uart_port *port)``h]j)}(hjYh]hvoid ()(struct uart_port *port)}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hhjShKqhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShKqhjubj)}(h3``unthrottle`` ``void ()(struct uart_port *port)`` h](j)}(h``unthrottle``h]j)}(hjh]h unthrottle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK{hjzubj )}(hhh]h)}(h#``void ()(struct uart_port *port)``h]j)}(hjh]hvoid ()(struct uart_port *port)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjhK{hjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhK{hjubj)}(h<``send_xchar`` ``void ()(struct uart_port *port, char ch)`` h](j)}(h``send_xchar``h]j)}(hjh]h send_xchar}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubj )}(hhh]h)}(h,``void ()(struct uart_port *port, char ch)``h]j)}(hjh]h(void ()(struct uart_port *port, char ch)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h0``stop_rx`` ``void ()(struct uart_port *port)`` h](j)}(h ``stop_rx``h]j)}(hjh]hstop_rx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubj )}(hhh]h)}(h#``void ()(struct uart_port *port)``h]j)}(hjh]hvoid ()(struct uart_port *port)}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h1``start_rx`` ``void ()(struct uart_port *port)`` h](j)}(h ``start_rx``h]j)}(hjFh]hstart_rx}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj@ubj )}(hhh]h)}(h#``void ()(struct uart_port *port)``h]j)}(hjah]hvoid ()(struct uart_port *port)}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhj[hKhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hKhjubj)}(h2``enable_ms`` ``void ()(struct uart_port *port)`` h](j)}(h ``enable_ms``h]j)}(hjh]h enable_ms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubj )}(hhh]h)}(h#``void ()(struct uart_port *port)``h]j)}(hjh]hvoid ()(struct uart_port *port)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h;``break_ctl`` ``void ()(struct uart_port *port, int ctl)`` h](j)}(h ``break_ctl``h]j)}(hjh]h break_ctl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubj )}(hhh]h)}(h,``void ()(struct uart_port *port, int ctl)``h]j)}(hjh]h(void ()(struct uart_port *port, int ctl)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h/``startup`` ``int ()(struct uart_port *port)`` h](j)}(h ``startup``h]j)}(hj h]hstartup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubj )}(hhh]h)}(h"``int ()(struct uart_port *port)``h]j)}(hj'h]hint ()(struct uart_port *port)}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhj!hKhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hKhjubj)}(h1``shutdown`` ``void ()(struct uart_port *port)`` h](j)}(h ``shutdown``h]j)}(hjNh]hshutdown}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjHubj )}(hhh]h)}(h#``void ()(struct uart_port *port)``h]j)}(hjih]hvoid ()(struct uart_port *port)}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1hhjchKhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchKhjubj)}(h5``flush_buffer`` ``void ()(struct uart_port *port)`` h](j)}(h``flush_buffer``h]j)}(hjh]h flush_buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubj )}(hhh]h)}(h#``void ()(struct uart_port *port)``h]j)}(hjh]hvoid ()(struct uart_port *port)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h```set_termios`` ``void ()(struct uart_port *port, struct ktermios *new, struct ktermios *old)`` h](j)}(h``set_termios``h]j)}(hjh]h set_termios}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubj )}(hhh]h)}(hO``void ()(struct uart_port *port, struct ktermios *new, struct ktermios *old)``h]j)}(hjh]hKvoid ()(struct uart_port *port, struct ktermios *new, struct ktermios *old)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hL``set_ldisc`` ``void ()(struct uart_port *port, struct ktermios *termios)`` h](j)}(h ``set_ldisc``h]j)}(hjh]h set_ldisc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhM hjubj )}(hhh]h)}(h=``void ()(struct uart_port *port, struct ktermios *termios)``h]j)}(hj0h]h9void ()(struct uart_port *port, struct ktermios *termios)}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hhj*hM hj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hM hjubj)}(hV``pm`` ``void ()(struct uart_port *port, unsigned int state, unsigned int oldstate)`` h](j)}(h``pm``h]j)}(hjWh]hpm}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMhjQubj )}(hhh]h)}(hN``void ()(struct uart_port *port, unsigned int state, unsigned int oldstate)``h]j)}(hjrh]hJvoid ()(struct uart_port *port, unsigned int state, unsigned int oldstate)}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjubj)}(h4``type`` ``const char *()(struct uart_port *port)`` h](j)}(h``type``h]j)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhM!hjubj )}(hhh]h)}(h*``const char *()(struct uart_port *port)``h]j)}(hjh]h&const char *()(struct uart_port *port)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjubj)}(h5``release_port`` ``void ()(struct uart_port *port)`` h](j)}(h``release_port``h]j)}(hjh]h release_port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhM)hjubj )}(hhh]h)}(h#``void ()(struct uart_port *port)``h]j)}(hjh]hvoid ()(struct uart_port *port)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjubj)}(h4``request_port`` ``int ()(struct uart_port *port)`` h](j)}(h``request_port``h]j)}(hjh]h request_port}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhM1hjubj )}(hhh]h)}(h"``int ()(struct uart_port *port)``h]j)}(hj9h]hint ()(struct uart_port *port)}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhj3hM1hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hM1hjubj)}(h>``config_port`` ``void ()(struct uart_port *port, int type)`` h](j)}(h``config_port``h]j)}(hj`h]h config_port}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhM:hjZubj )}(hhh]h)}(h-``void ()(struct uart_port *port, int type)``h]j)}(hj{h]h)void ()(struct uart_port *port, int type)}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhjuhM:hjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhM:hjubj)}(hR``verify_port`` ``int ()(struct uart_port *port, struct serial_struct *serinfo)`` h](j)}(h``verify_port``h]j)}(hjh]h verify_port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMKhjubj )}(hhh]h)}(hA``int ()(struct uart_port *port, struct serial_struct *serinfo)``h]j)}(hjh]h=int ()(struct uart_port *port, struct serial_struct *serinfo)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMKhjubj)}(hR``ioctl`` ``int ()(struct uart_port *port, unsigned int cmd, unsigned long arg)`` h](j)}(h ``ioctl``h]j)}(hjh]hioctl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMThjubj )}(hhh]h)}(hG``int ()(struct uart_port *port, unsigned int cmd, unsigned long arg)``h]j)}(hj h]hCint ()(struct uart_port *port, unsigned int cmd, unsigned long arg)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubj)}(h1``poll_init`` ``int ()(struct uart_port *port)`` h](j)}(h ``poll_init``h]j)}(hj( h]h poll_init}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj& ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhM\hj" ubj )}(hhh]h)}(h"``int ()(struct uart_port *port)``h]j)}(hjC h]hint ()(struct uart_port *port)}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA ubah}(h]h ]h"]h$]h&]uh1hhj= hM\hj> ubah}(h]h ]h"]h$]h&]uh1jhj" ubeh}(h]h ]h"]h$]h&]uh1jhj= hM\hjubj)}(hH``poll_put_char`` ``void ()(struct uart_port *port, unsigned char ch)`` h](j)}(h``poll_put_char``h]j)}(hjj h]h poll_put_char}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMehjd ubj )}(hhh]h)}(h5``void ()(struct uart_port *port, unsigned char ch)``h]j)}(hj h]h1void ()(struct uart_port *port, unsigned char ch)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhj hMehj ubah}(h]h ]h"]h$]h&]uh1jhjd ubeh}(h]h ]h"]h$]h&]uh1jhj hMehjubj)}(h4``poll_get_char`` ``int ()(struct uart_port *port)``h](j)}(h``poll_get_char``h]j)}(hj h]h poll_get_char}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMmhj ubj )}(hhh]h)}(h"``int ()(struct uart_port *port)``h]j)}(hj h]hint ()(struct uart_port *port)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMnhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMmhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhjhNubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMqhjhhubh)}(hVThis structure describes all the operations that can be done on the physical hardware.h]hVThis structure describes all the operations that can be done on the physical hardware.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK&hjhhubh block_quote)}(hXV%This function tests whether the transmitter fifo and shifter for the **port** is empty. If it is empty, this function should return ``TIOCSER_TEMT``, otherwise return 0. If the port does not support this operation, then it should return ``TIOCSER_TEMT``. Locking: none. Interrupts: caller dependent. This call must not sleep This function sets the modem control lines for **port** to the state described by **mctrl**. The relevant bits of **mctrl** are: - ``TIOCM_RTS`` RTS signal. - ``TIOCM_DTR`` DTR signal. - ``TIOCM_OUT1`` OUT1 signal. - ``TIOCM_OUT2`` OUT2 signal. - ``TIOCM_LOOP`` Set the port into loopback mode. If the appropriate bit is set, the signal should be driven active. If the bit is clear, the signal should be driven inactive. Locking: **port->lock** taken. Interrupts: locally disabled. This call must not sleep Returns the current state of modem control inputs of **port**. The state of the outputs should not be returned, since the core keeps track of their state. The state information should include: - ``TIOCM_CAR`` state of DCD signal - ``TIOCM_CTS`` state of CTS signal - ``TIOCM_DSR`` state of DSR signal - ``TIOCM_RI`` state of RI signal The bit is set if the signal is currently driven active. If the port does not support CTS, DCD or DSR, the driver should indicate that the signal is permanently active. If RI is not available, the signal should not be indicated as active. Locking: **port->lock** taken. Interrupts: locally disabled. This call must not sleep Stop transmitting characters. This might be due to the CTS line becoming inactive or the tty layer indicating we want to stop transmission due to an ``XOFF`` character. The driver should stop transmitting characters as soon as possible. Locking: **port->lock** taken. Interrupts: locally disabled. This call must not sleep Start transmitting characters. Locking: **port->lock** taken. Interrupts: locally disabled. This call must not sleep Notify the serial driver that input buffers for the line discipline are close to full, and it should somehow signal that no more characters should be sent to the serial port. This will be called only if hardware assisted flow control is enabled. Locking: serialized with **unthrottle\(\)** and termios modification by the tty layer. Notify the serial driver that characters can now be sent to the serial port without fear of overrunning the input buffers of the line disciplines. This will be called only if hardware assisted flow control is enabled. Locking: serialized with **throttle\(\)** and termios modification by the tty layer. Transmit a high priority character, even if the port is stopped. This is used to implement XON/XOFF flow control and tcflow(). If the serial driver does not implement this function, the tty core will append the character to the circular buffer and then call start_tx() / stop_tx() to flush the data out. Do not transmit if **ch** == '\0' (``__DISABLED_CHAR``). Locking: none. Interrupts: caller dependent. Start receiving characters. Locking: **port->lock** taken. Interrupts: locally disabled. This call must not sleep Stop receiving characters; the **port** is in the process of being closed. Locking: **port->lock** taken. Interrupts: locally disabled. This call must not sleep Enable the modem status interrupts. This method may be called multiple times. Modem status interrupts should be disabled when the **shutdown\(\)** method is called. Locking: **port->lock** taken. Interrupts: locally disabled. This call must not sleep Control the transmission of a break signal. If **ctl** is nonzero, the break signal should be transmitted. The signal should be terminated when another call is made with a zero **ctl**. Locking: caller holds tty_port->mutex Grab any interrupt resources and initialise any low level driver state. Enable the port for reception. It should not activate RTS nor DTR; this will be done via a separate call to **set_mctrl\(\)**. This method will only be called when the port is initially opened. Locking: port_sem taken. Interrupts: globally disabled. Disable the **port**, disable any break condition that may be in effect, and free any interrupt resources. It should not disable RTS nor DTR; this will have already been done via a separate call to **set_mctrl\(\)**. Drivers must not access **port->state** once this call has completed. This method will only be called when there are no more users of this **port**. Locking: port_sem taken. Interrupts: caller dependent. Flush any write buffers, reset any DMA state and stop any ongoing DMA transfers. This will be called whenever the **port->state->xmit** circular buffer is cleared. Locking: **port->lock** taken. Interrupts: locally disabled. This call must not sleep Change the **port** parameters, including word length, parity, stop bits. Update **port->read_status_mask** and **port->ignore_status_mask** to indicate the types of events we are interested in receiving. Relevant ktermios::c_cflag bits are: - ``CSIZE`` - word size - ``CSTOPB`` - 2 stop bits - ``PARENB`` - parity enable - ``PARODD`` - odd parity (when ``PARENB`` is in force) - ``ADDRB`` - address bit (changed through uart_port::rs485_config()). - ``CREAD`` - enable reception of characters (if not set, still receive characters from the port, but throw them away). - ``CRTSCTS`` - if set, enable CTS status change reporting. - ``CLOCAL`` - if not set, enable modem status change reporting. Relevant ktermios::c_iflag bits are: - ``INPCK`` - enable frame and parity error events to be passed to the TTY layer. - ``BRKINT`` / ``PARMRK`` - both of these enable break events to be passed to the TTY layer. - ``IGNPAR`` - ignore parity and framing errors. - ``IGNBRK`` - ignore break errors. If ``IGNPAR`` is also set, ignore overrun errors as well. The interaction of the ktermios::c_iflag bits is as follows (parity error given as an example): ============ ======= ======= ========================================= Parity error INPCK IGNPAR ============ ======= ======= ========================================= n/a 0 n/a character received, marked as ``TTY_NORMAL`` None 1 n/a character received, marked as ``TTY_NORMAL`` Yes 1 0 character received, marked as ``TTY_PARITY`` Yes 1 1 character discarded ============ ======= ======= ========================================= Other flags may be used (eg, xon/xoff characters) if your hardware supports hardware "soft" flow control. Locking: caller holds tty_port->mutex Interrupts: caller dependent. This call must not sleep Notifier for discipline change. See Documentation/driver-api/tty/tty_ldisc.rst. Locking: caller holds tty_port->mutex Perform any power management related activities on the specified **port**. **state** indicates the new state (defined by enum uart_pm_state), **oldstate** indicates the previous state. This function should not be used to grab any resources. This will be called when the **port** is initially opened and finally closed, except when the **port** is also the system console. This will occur even if ``CONFIG_PM`` is not set. Locking: none. Interrupts: caller dependent. Return a pointer to a string constant describing the specified **port**, or return ``NULL``, in which case the string 'unknown' is substituted. Locking: none. Interrupts: caller dependent. Release any memory and IO region resources currently in use by the **port**. Locking: none. Interrupts: caller dependent. Request any memory and IO region resources required by the port. If any fail, no resources should be registered when this function returns, and it should return -``EBUSY`` on failure. Locking: none. Interrupts: caller dependent. Perform any autoconfiguration steps required for the **port**. **type** contains a bit mask of the required configuration. ``UART_CONFIG_TYPE`` indicates that the port requires detection and identification. **port->type** should be set to the type found, or ``PORT_UNKNOWN`` if no port was detected. ``UART_CONFIG_IRQ`` indicates autoconfiguration of the interrupt signal, which should be probed using standard kernel autoprobing techniques. This is not necessary on platforms where ports have interrupts internally hard wired (eg, system on a chip implementations). Locking: none. Interrupts: caller dependent. Verify the new serial port information contained within **serinfo** is suitable for this port type. Locking: none. Interrupts: caller dependent. Perform any port specific IOCTLs. IOCTL commands must be defined using the standard numbering system found in . Locking: none. Interrupts: caller dependent. Called by kgdb to perform the minimal hardware initialization needed to support **poll_put_char\(\)** and **poll_get_char\(\)**. Unlike **startup\(\)**, this should not request interrupts. Locking: ``tty_mutex`` and tty_port->mutex taken. Interrupts: n/a. Called by kgdb to write a single character **ch** directly to the serial **port**. It can and should block until there is space in the TX FIFO. Locking: none. Interrupts: caller dependent. This call must not sleep Called by kgdb to read a single character directly from the serial port. If data is available, it should be returned; otherwise the function should return ``NO_POLL_CHAR`` immediately. Locking: none. Interrupts: caller dependent. This call must not sleep h](h)}(hThis function tests whether the transmitter fifo and shifter for the **port** is empty. If it is empty, this function should return ``TIOCSER_TEMT``, otherwise return 0. If the port does not support this operation, then it should return ``TIOCSER_TEMT``.h](hEThis function tests whether the transmitter fifo and shifter for the }(hj# hhhNhNubj)}(h**port**h]hport}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj# ubh7 is empty. If it is empty, this function should return }(hj# hhhNhNubj)}(h``TIOCSER_TEMT``h]h TIOCSER_TEMT}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj# ubhY, otherwise return 0. If the port does not support this operation, then it should return }(hj# hhhNhNubj)}(h``TIOCSER_TEMT``h]h TIOCSER_TEMT}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj# ubh.}(hj# hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK*hj ubh)}(hELocking: none. Interrupts: caller dependent. This call must not sleeph]hELocking: none. Interrupts: caller dependent. This call must not sleep}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK/hj ubh)}(hThis function sets the modem control lines for **port** to the state described by **mctrl**. The relevant bits of **mctrl** are:h](h/This function sets the modem control lines for }(hjw hhhNhNubj)}(h**port**h]hport}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw ubh to the state described by }(hjw hhhNhNubj)}(h **mctrl**h]hmctrl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw ubh. The relevant bits of }(hjw hhhNhNubj)}(h **mctrl**h]hmctrl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw ubh are:}(hjw hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK4hj ubj )}(h- ``TIOCM_RTS`` RTS signal. - ``TIOCM_DTR`` DTR signal. - ``TIOCM_OUT1`` OUT1 signal. - ``TIOCM_OUT2`` OUT2 signal. - ``TIOCM_LOOP`` Set the port into loopback mode. h]j[)}(hhh](j`)}(h``TIOCM_RTS`` RTS signal.h]h)}(hj h](j)}(h ``TIOCM_RTS``h]h TIOCM_RTS}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh RTS signal.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK7hj ubah}(h]h ]h"]h$]h&]uh1j_hj ubj`)}(h``TIOCM_DTR`` DTR signal.h]h)}(hj h](j)}(h ``TIOCM_DTR``h]h TIOCM_DTR}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh DTR signal.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK8hj ubah}(h]h ]h"]h$]h&]uh1j_hj ubj`)}(h``TIOCM_OUT1`` OUT1 signal.h]h)}(hj h](j)}(h``TIOCM_OUT1``h]h TIOCM_OUT1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh OUT1 signal.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK9hj ubah}(h]h ]h"]h$]h&]uh1j_hj ubj`)}(h``TIOCM_OUT2`` OUT2 signal.h]h)}(hj7 h](j)}(h``TIOCM_OUT2``h]h TIOCM_OUT2}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9 ubh OUT2 signal.}(hj9 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK:hj5 ubah}(h]h ]h"]h$]h&]uh1j_hj ubj`)}(h2``TIOCM_LOOP`` Set the port into loopback mode. h]h)}(h1``TIOCM_LOOP`` Set the port into loopback mode.h](j)}(h``TIOCM_LOOP``h]h TIOCM_LOOP}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ ubh# Set the port into loopback mode.}(hj_ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK;hj[ ubah}(h]h ]h"]h$]h&]uh1j_hj ubeh}(h]h ]h"]h$]h&]jjuh1jZhj hK7hj ubah}(h]h ]h"]h$]h&]uh1j hj hK7hj ubh)}(h~If the appropriate bit is set, the signal should be driven active. If the bit is clear, the signal should be driven inactive.h]h~If the appropriate bit is set, the signal should be driven active. If the bit is clear, the signal should be driven inactive.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK=hj ubh)}(hULocking: **port->lock** taken. Interrupts: locally disabled. This call must not sleeph](h Locking: }(hj hhhNhNubj)}(h**port->lock**h]h port->lock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh> taken. Interrupts: locally disabled. This call must not sleep}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKAhj ubh)}(hReturns the current state of modem control inputs of **port**. The state of the outputs should not be returned, since the core keeps track of their state. The state information should include:h](h5Returns the current state of modem control inputs of }(hj hhhNhNubj)}(h**port**h]hport}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh. The state of the outputs should not be returned, since the core keeps track of their state. The state information should include:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKFhj ubj )}(h- ``TIOCM_CAR`` state of DCD signal - ``TIOCM_CTS`` state of CTS signal - ``TIOCM_DSR`` state of DSR signal - ``TIOCM_RI`` state of RI signal h]j[)}(hhh](j`)}(h$``TIOCM_CAR`` state of DCD signalh]h)}(hj h](j)}(h ``TIOCM_CAR``h]h TIOCM_CAR}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh state of DCD signal}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKJhj ubah}(h]h ]h"]h$]h&]uh1j_hj ubj`)}(h$``TIOCM_CTS`` state of CTS signalh]h)}(hj h](j)}(h ``TIOCM_CTS``h]h TIOCM_CTS}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh state of CTS signal}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKKhj ubah}(h]h ]h"]h$]h&]uh1j_hj ubj`)}(h$``TIOCM_DSR`` state of DSR signalh]h)}(hj4 h](j)}(h ``TIOCM_DSR``h]h TIOCM_DSR}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6 ubh state of DSR signal}(hj6 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKLhj2 ubah}(h]h ]h"]h$]h&]uh1j_hj ubj`)}(h$``TIOCM_RI`` state of RI signal h]h)}(h#``TIOCM_RI`` state of RI signalh](j)}(h ``TIOCM_RI``h]hTIOCM_RI}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ ubh state of RI signal}(hj\ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKMhjX ubah}(h]h ]h"]h$]h&]uh1j_hj ubeh}(h]h ]h"]h$]h&]jjuh1jZhj hKJhj ubah}(h]h ]h"]h$]h&]uh1j hj hKJhj ubh)}(hThe bit is set if the signal is currently driven active. If the port does not support CTS, DCD or DSR, the driver should indicate that the signal is permanently active. If RI is not available, the signal should not be indicated as active.h]hThe bit is set if the signal is currently driven active. If the port does not support CTS, DCD or DSR, the driver should indicate that the signal is permanently active. If RI is not available, the signal should not be indicated as active.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKOhj ubh)}(hULocking: **port->lock** taken. Interrupts: locally disabled. This call must not sleeph](h Locking: }(hj hhhNhNubj)}(h**port->lock**h]h port->lock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh> taken. Interrupts: locally disabled. This call must not sleep}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKThj ubh)}(hStop transmitting characters. This might be due to the CTS line becoming inactive or the tty layer indicating we want to stop transmission due to an ``XOFF`` character.h](hStop transmitting characters. This might be due to the CTS line becoming inactive or the tty layer indicating we want to stop transmission due to an }(hj hhhNhNubj)}(h``XOFF``h]hXOFF}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh character.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKYhj ubh)}(hCThe driver should stop transmitting characters as soon as possible.h]hCThe driver should stop transmitting characters as soon as possible.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK]hj ubh)}(hULocking: **port->lock** taken. Interrupts: locally disabled. This call must not sleeph](h Locking: }(hj hhhNhNubj)}(h**port->lock**h]h port->lock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh> taken. Interrupts: locally disabled. This call must not sleep}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK_hj ubh)}(hStart transmitting characters.h]hStart transmitting characters.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKdhj ubh)}(hULocking: **port->lock** taken. Interrupts: locally disabled. This call must not sleeph](h Locking: }(hj hhhNhNubj)}(h**port->lock**h]h port->lock}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh> taken. Interrupts: locally disabled. This call must not sleep}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKfhj ubh)}(hNotify the serial driver that input buffers for the line discipline are close to full, and it should somehow signal that no more characters should be sent to the serial port. This will be called only if hardware assisted flow control is enabled.h]hNotify the serial driver that input buffers for the line discipline are close to full, and it should somehow signal that no more characters should be sent to the serial port. This will be called only if hardware assisted flow control is enabled.}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKkhj ubh)}(hVLocking: serialized with **unthrottle\(\)** and termios modification by the tty layer.h](hLocking: serialized with }(hjK hhhNhNubj)}(h**unthrottle\(\)**h]hunthrottle()}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK ubh+ and termios modification by the tty layer.}(hjK hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKphj ubh)}(hNotify the serial driver that characters can now be sent to the serial port without fear of overrunning the input buffers of the line disciplines.h]hNotify the serial driver that characters can now be sent to the serial port without fear of overrunning the input buffers of the line disciplines.}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKthj ubh)}(hFThis will be called only if hardware assisted flow control is enabled.h]hFThis will be called only if hardware assisted flow control is enabled.}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKxhj ubh)}(hTLocking: serialized with **throttle\(\)** and termios modification by the tty layer.h](hLocking: serialized with }(hj hhhNhNubj)}(h**throttle\(\)**h]h throttle()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh+ and termios modification by the tty layer.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKzhj ubh)}(hX/Transmit a high priority character, even if the port is stopped. This is used to implement XON/XOFF flow control and tcflow(). If the serial driver does not implement this function, the tty core will append the character to the circular buffer and then call start_tx() / stop_tx() to flush the data out.h]hX/Transmit a high priority character, even if the port is stopped. This is used to implement XON/XOFF flow control and tcflow(). If the serial driver does not implement this function, the tty core will append the character to the circular buffer and then call start_tx() / stop_tx() to flush the data out.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK~hj ubh)}(h8Do not transmit if **ch** == '\0' (``__DISABLED_CHAR``).h](hDo not transmit if }(hj hhhNhNubj)}(h**ch**h]hch}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh == ‘0’ (}(hj hhhNhNubj)}(h``__DISABLED_CHAR``h]h__DISABLED_CHAR}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(h,Locking: none. Interrupts: caller dependent.h]h,Locking: none. Interrupts: caller dependent.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hStart receiving characters.h]hStart receiving characters.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hULocking: **port->lock** taken. Interrupts: locally disabled. This call must not sleeph](h Locking: }(hj hhhNhNubj)}(h**port->lock**h]h port->lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh> taken. Interrupts: locally disabled. This call must not sleep}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hJStop receiving characters; the **port** is in the process of being closed.h](hStop receiving characters; the }(hj,hhhNhNubj)}(h**port**h]hport}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh# is in the process of being closed.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hULocking: **port->lock** taken. Interrupts: locally disabled. This call must not sleeph](h Locking: }(hjMhhhNhNubj)}(h**port->lock**h]h port->lock}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh> taken. Interrupts: locally disabled. This call must not sleep}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(h#Enable the modem status interrupts.h]h#Enable the modem status interrupts.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hThis method may be called multiple times. Modem status interrupts should be disabled when the **shutdown\(\)** method is called.h](h^This method may be called multiple times. Modem status interrupts should be disabled when the }(hj}hhhNhNubj)}(h**shutdown\(\)**h]h shutdown()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh method is called.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hULocking: **port->lock** taken. Interrupts: locally disabled. This call must not sleeph](h Locking: }(hjhhhNhNubj)}(h**port->lock**h]h port->lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh> taken. Interrupts: locally disabled. This call must not sleep}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hControl the transmission of a break signal. If **ctl** is nonzero, the break signal should be transmitted. The signal should be terminated when another call is made with a zero **ctl**.h](h/Control the transmission of a break signal. If }(hjhhhNhNubj)}(h**ctl**h]hctl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh{ is nonzero, the break signal should be transmitted. The signal should be terminated when another call is made with a zero }(hjhhhNhNubj)}(h**ctl**h]hctl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(h%Locking: caller holds tty_port->mutexh]h%Locking: caller holds tty_port->mutex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hGrab any interrupt resources and initialise any low level driver state. Enable the port for reception. It should not activate RTS nor DTR; this will be done via a separate call to **set_mctrl\(\)**.h](hGrab any interrupt resources and initialise any low level driver state. Enable the port for reception. It should not activate RTS nor DTR; this will be done via a separate call to }(hjhhhNhNubj)}(h**set_mctrl\(\)**h]h set_mctrl()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hBThis method will only be called when the port is initially opened.h]hBThis method will only be called when the port is initially opened.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(h7Locking: port_sem taken. Interrupts: globally disabled.h]h7Locking: port_sem taken. Interrupts: globally disabled.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hDisable the **port**, disable any break condition that may be in effect, and free any interrupt resources. It should not disable RTS nor DTR; this will have already been done via a separate call to **set_mctrl\(\)**.h](h Disable the }(hj@hhhNhNubj)}(h**port**h]hport}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh, disable any break condition that may be in effect, and free any interrupt resources. It should not disable RTS nor DTR; this will have already been done via a separate call to }(hj@hhhNhNubj)}(h**set_mctrl\(\)**h]h set_mctrl()}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hEDrivers must not access **port->state** once this call has completed.h](hDrivers must not access }(hjshhhNhNubj)}(h**port->state**h]h port->state}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh once this call has completed.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hNThis method will only be called when there are no more users of this **port**.h](hEThis method will only be called when there are no more users of this }(hjhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(h6Locking: port_sem taken. Interrupts: caller dependent.h]h6Locking: port_sem taken. Interrupts: caller dependent.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hPFlush any write buffers, reset any DMA state and stop any ongoing DMA transfers.h]hPFlush any write buffers, reset any DMA state and stop any ongoing DMA transfers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hRThis will be called whenever the **port->state->xmit** circular buffer is cleared.h](h!This will be called whenever the }(hjhhhNhNubj)}(h**port->state->xmit**h]hport->state->xmit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh circular buffer is cleared.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hULocking: **port->lock** taken. Interrupts: locally disabled. This call must not sleeph](h Locking: }(hjhhhNhNubj)}(h**port->lock**h]h port->lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh> taken. Interrupts: locally disabled. This call must not sleep}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hChange the **port** parameters, including word length, parity, stop bits. Update **port->read_status_mask** and **port->ignore_status_mask** to indicate the types of events we are interested in receiving. Relevant ktermios::c_cflag bits are:h](h Change the }(hjhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh> parameters, including word length, parity, stop bits. Update }(hjhhhNhNubj)}(h**port->read_status_mask**h]hport->read_status_mask}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**port->ignore_status_mask**h]hport->ignore_status_mask}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhe to indicate the types of events we are interested in receiving. Relevant ktermios::c_cflag bits are:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubj[)}(hhh](j`)}(h``CSIZE`` - word sizeh]h)}(hj_h](j)}(h ``CSIZE``h]hCSIZE}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh - word size}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj]ubah}(h]h ]h"]h$]h&]uh1j_hjZubj`)}(h``CSTOPB`` - 2 stop bitsh]h)}(hjh](j)}(h ``CSTOPB``h]hCSTOPB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 2 stop bits}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubah}(h]h ]h"]h$]h&]uh1j_hjZubj`)}(h``PARENB`` - parity enableh]h)}(hjh](j)}(h ``PARENB``h]hPARENB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - parity enable}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubah}(h]h ]h"]h$]h&]uh1j_hjZubj`)}(h5``PARODD`` - odd parity (when ``PARENB`` is in force)h]h)}(hjh](j)}(h ``PARODD``h]hPARODD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - odd parity (when }(hjhhhNhNubj)}(h ``PARENB``h]hPARENB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is in force)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubah}(h]h ]h"]h$]h&]uh1j_hjZubj`)}(hD``ADDRB`` - address bit (changed through uart_port::rs485_config()).h]h)}(hj h](j)}(h ``ADDRB``h]hADDRB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh; - address bit (changed through uart_port::rs485_config()).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubah}(h]h ]h"]h$]h&]uh1j_hjZubj`)}(hu``CREAD`` - enable reception of characters (if not set, still receive characters from the port, but throw them away).h]h)}(hu``CREAD`` - enable reception of characters (if not set, still receive characters from the port, but throw them away).h](j)}(h ``CREAD``h]hCREAD}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubhl - enable reception of characters (if not set, still receive characters from the port, but throw them away).}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj-ubah}(h]h ]h"]h$]h&]uh1j_hjZubj`)}(h9``CRTSCTS`` - if set, enable CTS status change reporting.h]h)}(hjVh](j)}(h ``CRTSCTS``h]hCRTSCTS}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh. - if set, enable CTS status change reporting.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjTubah}(h]h ]h"]h$]h&]uh1j_hjZubj`)}(h?``CLOCAL`` - if not set, enable modem status change reporting. h]h)}(h>``CLOCAL`` - if not set, enable modem status change reporting.h](j)}(h ``CLOCAL``h]hCLOCAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh4 - if not set, enable modem status change reporting.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjzubah}(h]h ]h"]h$]h&]uh1j_hjZubeh}(h]h ]h"]h$]h&]jjuh1jZhj|hKhj ubh)}(h$Relevant ktermios::c_iflag bits are:h]h$Relevant ktermios::c_iflag bits are:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubj[)}(hhh](j`)}(hO``INPCK`` - enable frame and parity error events to be passed to the TTY layer.h]h)}(hO``INPCK`` - enable frame and parity error events to be passed to the TTY layer.h](j)}(h ``INPCK``h]hINPCK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhF - enable frame and parity error events to be passed to the TTY layer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubah}(h]h ]h"]h$]h&]uh1j_hjubj`)}(hZ``BRKINT`` / ``PARMRK`` - both of these enable break events to be passed to the TTY layer.h]h)}(hZ``BRKINT`` / ``PARMRK`` - both of these enable break events to be passed to the TTY layer.h](j)}(h ``BRKINT``h]hBRKINT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh / }(hjhhhNhNubj)}(h ``PARMRK``h]hPARMRK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhC - both of these enable break events to be passed to the TTY layer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubah}(h]h ]h"]h$]h&]uh1j_hjubj`)}(h.``IGNPAR`` - ignore parity and framing errors.h]h)}(hjh](j)}(h ``IGNPAR``h]hIGNPAR}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ - ignore parity and framing errors.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubah}(h]h ]h"]h$]h&]uh1j_hjubj`)}(h\``IGNBRK`` - ignore break errors. If ``IGNPAR`` is also set, ignore overrun errors as well. h]h)}(h[``IGNBRK`` - ignore break errors. If ``IGNPAR`` is also set, ignore overrun errors as well.h](j)}(h ``IGNBRK``h]hIGNBRK}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh - ignore break errors. If }(hjChhhNhNubj)}(h ``IGNPAR``h]hIGNPAR}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh, is also set, ignore overrun errors as well.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj?ubah}(h]h ]h"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]jjuh1jZhjhKhj ubh)}(h_The interaction of the ktermios::c_iflag bits is as follows (parity error given as an example):h]h_The interaction of the ktermios::c_iflag bits is as follows (parity error given as an example):}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthK,uh1jhjubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(h Parity errorh]h Parity error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hINPCKh]hINPCK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hIGNPARh]hIGNPAR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubhtbody)}(hhh](j)}(hhh](j)}(hhh]h)}(hn/ah]hn/a}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj0ubah}(h]h ]h"]h$]h&]uh1jhj-ubj)}(hhh]h)}(h0h]h0}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKhjHubah}(h]h ]h"]h$]h&]uh1jhj-ubj)}(hhh]h)}(hn/ah]hn/a}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKhj_ubah}(h]h ]h"]h$]h&]uh1jhj-ubj)}(hhh]h)}(h,character received, marked as ``TTY_NORMAL``h](hcharacter received, marked as }(hjyhhhNhNubj)}(h``TTY_NORMAL``h]h TTY_NORMAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1hhjAhKhjvubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj*ubj)}(hhh](j)}(hhh]h)}(hNoneh]hNone}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h1h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hn/ah]hn/a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h,character received, marked as ``TTY_NORMAL``h](hcharacter received, marked as }(hjhhhNhNubj)}(h``TTY_NORMAL``h]h TTY_NORMAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*ubj)}(hhh](j)}(hhh]h)}(hYesh]hYes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hjh]h1}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhj0ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hjMh]h0}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhjFubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h,character received, marked as ``TTY_PARITY``h](hcharacter received, marked as }(hj_hhhNhNubj)}(h``TTY_PARITY``h]h TTY_PARITY}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1hhj)hKhj\ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*ubj)}(hhh](j)}(hhh]h)}(hYesh]hYes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hjh]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hjh]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hcharacter discardedh]hcharacter discarded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]colsKuh1jhjubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(hiOther flags may be used (eg, xon/xoff characters) if your hardware supports hardware "soft" flow control.h]hmOther flags may be used (eg, xon/xoff characters) if your hardware supports hardware “soft” flow control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(h\Locking: caller holds tty_port->mutex Interrupts: caller dependent. This call must not sleeph]h\Locking: caller holds tty_port->mutex Interrupts: caller dependent. This call must not sleep}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hONotifier for discipline change. See Documentation/driver-api/tty/tty_ldisc.rst.h]hONotifier for discipline change. See Documentation/driver-api/tty/tty_ldisc.rst.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(h%Locking: caller holds tty_port->mutexh]h%Locking: caller holds tty_port->mutex}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(hPerform any power management related activities on the specified **port**. **state** indicates the new state (defined by enum uart_pm_state), **oldstate** indicates the previous state.h](hAPerform any power management related activities on the specified }(hj:hhhNhNubj)}(h**port**h]hport}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh. }(hj:hhhNhNubj)}(h **state**h]hstate}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh: indicates the new state (defined by enum uart_pm_state), }(hj:hhhNhNubj)}(h **oldstate**h]holdstate}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh indicates the previous state.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj ubh)}(h7This function should not be used to grab any resources.h]h7This function should not be used to grab any resources.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMhj ubh)}(hThis will be called when the **port** is initially opened and finally closed, except when the **port** is also the system console. This will occur even if ``CONFIG_PM`` is not set.h](hThis will be called when the }(hjhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh9 is initially opened and finally closed, except when the }(hjhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh5 is also the system console. This will occur even if }(hjhhhNhNubj)}(h ``CONFIG_PM``h]h CONFIG_PM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not set.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMhj ubh)}(h,Locking: none. Interrupts: caller dependent.h]h,Locking: none. Interrupts: caller dependent.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMhj ubh)}(hReturn a pointer to a string constant describing the specified **port**, or return ``NULL``, in which case the string 'unknown' is substituted.h](h?Return a pointer to a string constant describing the specified }(hjhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh , or return }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh8, in which case the string ‘unknown’ is substituted.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhM hj ubh)}(h,Locking: none. Interrupts: caller dependent.h]h,Locking: none. Interrupts: caller dependent.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMhj ubh)}(hLRelease any memory and IO region resources currently in use by the **port**.h](hCRelease any memory and IO region resources currently in use by the }(hj$hhhNhNubj)}(h**port**h]hport}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMhj ubh)}(h,Locking: none. Interrupts: caller dependent.h]h,Locking: none. Interrupts: caller dependent.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMhj ubh)}(hRequest any memory and IO region resources required by the port. If any fail, no resources should be registered when this function returns, and it should return -``EBUSY`` on failure.h](hRequest any memory and IO region resources required by the port. If any fail, no resources should be registered when this function returns, and it should return -}(hjThhhNhNubj)}(h ``EBUSY``h]hEBUSY}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh on failure.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMhj ubh)}(h,Locking: none. Interrupts: caller dependent.h]h,Locking: none. Interrupts: caller dependent.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMhj ubh)}(hX+Perform any autoconfiguration steps required for the **port**. **type** contains a bit mask of the required configuration. ``UART_CONFIG_TYPE`` indicates that the port requires detection and identification. **port->type** should be set to the type found, or ``PORT_UNKNOWN`` if no port was detected.h](h5Perform any autoconfiguration steps required for the }(hjhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. }(hjhhhNhNubj)}(h**type**h]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh4 contains a bit mask of the required configuration. }(hjhhhNhNubj)}(h``UART_CONFIG_TYPE``h]hUART_CONFIG_TYPE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh@ indicates that the port requires detection and identification. }(hjhhhNhNubj)}(h**port->type**h]h port->type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% should be set to the type found, or }(hjhhhNhNubj)}(h``PORT_UNKNOWN``h]h PORT_UNKNOWN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if no port was detected.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhM"hj ubh)}(hX ``UART_CONFIG_IRQ`` indicates autoconfiguration of the interrupt signal, which should be probed using standard kernel autoprobing techniques. This is not necessary on platforms where ports have interrupts internally hard wired (eg, system on a chip implementations).h](j)}(h``UART_CONFIG_IRQ``h]hUART_CONFIG_IRQ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh indicates autoconfiguration of the interrupt signal, which should be probed using standard kernel autoprobing techniques. This is not necessary on platforms where ports have interrupts internally hard wired (eg, system on a chip implementations).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhM(hj ubh)}(h,Locking: none. Interrupts: caller dependent.h]h,Locking: none. Interrupts: caller dependent.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhM-hj ubh)}(hcVerify the new serial port information contained within **serinfo** is suitable for this port type.h](h8Verify the new serial port information contained within }(hjhhhNhNubj)}(h **serinfo**h]hserinfo}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is suitable for this port type.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhM1hj ubh)}(h,Locking: none. Interrupts: caller dependent.h]h,Locking: none. Interrupts: caller dependent.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhM4hj ubh)}(h|Perform any port specific IOCTLs. IOCTL commands must be defined using the standard numbering system found in .h]h|Perform any port specific IOCTLs. IOCTL commands must be defined using the standard numbering system found in .}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhM8hj ubh)}(h,Locking: none. Interrupts: caller dependent.h]h,Locking: none. Interrupts: caller dependent.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhM;hj ubh)}(hCalled by kgdb to perform the minimal hardware initialization needed to support **poll_put_char\(\)** and **poll_get_char\(\)**. Unlike **startup\(\)**, this should not request interrupts.h](hPCalled by kgdb to perform the minimal hardware initialization needed to support }(hjghhhNhNubj)}(h**poll_put_char\(\)**h]hpoll_put_char()}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh and }(hjghhhNhNubj)}(h**poll_get_char\(\)**h]hpoll_get_char()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh . Unlike }(hjghhhNhNubj)}(h**startup\(\)**h]h startup()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh%, this should not request interrupts.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhM?hj ubh)}(hBLocking: ``tty_mutex`` and tty_port->mutex taken. Interrupts: n/a.h](h Locking: }(hjhhhNhNubj)}(h ``tty_mutex``h]h tty_mutex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, and tty_port->mutex taken. Interrupts: n/a.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMChj ubh)}(hCalled by kgdb to write a single character **ch** directly to the serial **port**. It can and should block until there is space in the TX FIFO.h](h+Called by kgdb to write a single character }(hjhhhNhNubj)}(h**ch**h]hch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh directly to the serial }(hjhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh>. It can and should block until there is space in the TX FIFO.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMGhj ubh)}(hELocking: none. Interrupts: caller dependent. This call must not sleeph]hELocking: none. Interrupts: caller dependent. This call must not sleep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMJhj ubh)}(hCalled by kgdb to read a single character directly from the serial port. If data is available, it should be returned; otherwise the function should return ``NO_POLL_CHAR`` immediately.h](hCalled by kgdb to read a single character directly from the serial port. If data is available, it should be returned; otherwise the function should return }(hjhhhNhNubj)}(h``NO_POLL_CHAR``h]h NO_POLL_CHAR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh immediately.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMOhj ubh)}(hELocking: none. Interrupts: caller dependent. This call must not sleeph]hELocking: none. Interrupts: caller dependent. This call must not sleep}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMShj ubeh}(h]h ]h"]h$]h&]uh1j hjg hK*hjhhubeh}(h]uart-opsah ]h"]uart_opsah$]h&]uh1hhhhhhhhK?ubh)}(hhh](h)}(hOther functionsh]hOther functions}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhhhhhKEubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_write_wakeup (C function)c.uart_write_wakeuphNtauh1jhjMhhhNhNubj)}(hhh](j)}(h/void uart_write_wakeup (struct uart_port *port)h]j)}(h.void uart_write_wakeup(struct uart_port *port)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jwhjshhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chKgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjhKgubj$)}(huart_write_wakeuph]j*)}(huart_write_wakeuph]huart_write_wakeup}(hjhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hjshhhjhKgubhdesc_parameterlist)}(h(struct uart_port *port)h]hdesc_parameter)}(hstruct uart_port *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j*)}(h uart_porth]h uart_port}(hjhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jjsbc.uart_write_wakeupasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjubj*)}(hporth]hport}(hj hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjshhhjhKgubeh}(h]h ]h"]h$]h&]jjjGuh1jjHjIhjohhhjhKgubah}(h]jjah ](jMjNeh"]h$]h&]jRjS)jThuh1jhjhKghjlhhubjV)}(hhh]h)}(hschedule write processingh]hschedule write processing}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chKghjGhhubah}(h]h ]h"]h$]h&]uh1jUhjlhhhjhKgubeh}(h]h ](jfunctioneh"]h$]h&]jjjjbjjbjjjuh1jhhhjMhNhNubj)}(hXq**Parameters** ``struct uart_port *port`` port to be processed **Description** This routine is used by the interrupt handler to schedule processing in the software interrupt portion of the driver. A driver is expected to call this function when the number of characters in the transmit buffer have dropped below a threshold. Locking: **port->lock** should be heldh](h)}(h**Parameters**h]j)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chKkhjfubj)}(hhh]j)}(h0``struct uart_port *port`` port to be processed h](j)}(h``struct uart_port *port``h]j)}(hjh]hstruct uart_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chKhhjubj )}(hhh]h)}(hport to be processedh]hport to be processed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhhjubah}(h]h ]h"]h$]h&]uh1jhjfubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chKjhjfubh)}(hThis routine is used by the interrupt handler to schedule processing in the software interrupt portion of the driver. A driver is expected to call this function when the number of characters in the transmit buffer have dropped below a threshold.h]hThis routine is used by the interrupt handler to schedule processing in the software interrupt portion of the driver. A driver is expected to call this function when the number of characters in the transmit buffer have dropped below a threshold.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chKihjfubh)}(h&Locking: **port->lock** should be heldh](h Locking: }(hjhhhNhNubj)}(h**port->lock**h]h port->lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh should be held}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chKnhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j uart_update_timeout (C function)c.uart_update_timeouthNtauh1jhjMhhhNhNubj)}(hhh](j)}(hXvoid uart_update_timeout (struct uart_port *port, unsigned int cflag, unsigned int baud)h]j)}(hWvoid uart_update_timeout(struct uart_port *port, unsigned int cflag, unsigned int baud)h](jx)}(hvoidh]hvoid}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj(hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj:hMubj$)}(huart_update_timeouth]j*)}(huart_update_timeouth]huart_update_timeout}(hjMhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjIubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hj(hhhj:hMubj)}(h?(struct uart_port *port, unsigned int cflag, unsigned int baud)h](j)}(hstruct uart_port *porth](j)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjeubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hhh]j*)}(h uart_porth]h uart_port}(hjhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjOsbc.uart_update_timeoutasbuh1hhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj*)}(hporth]hport}(hjhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubj)}(hunsigned int cflagh](jx)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjx)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj*)}(hcflagh]hcflag}(hjhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubj)}(hunsigned int baudh](jx)}(hunsignedh]hunsigned}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj(ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjx)}(hinth]hint}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj(ubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj*)}(hbaudh]hbaud}(hjdhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubeh}(h]h ]h"]h$]h&]jjuh1jhj(hhhj:hMubeh}(h]h ]h"]h$]h&]jjjGuh1jjHjIhj$hhhj:hMubah}(h]jah ](jMjNeh"]h$]h&]jRjS)jThuh1jhj:hMhj!hhubjV)}(hhh]h)}(h(update per-port frame timing informationh]h(update per-port frame timing information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jUhj!hhhj:hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``struct uart_port *port`` uart_port structure describing the port ``unsigned int cflag`` termios cflag value ``unsigned int baud`` speed of the port **Description** Set the **port** frame timing information from which the FIFO timeout value is derived. The **cflag** value should reflect the actual hardware settings as number of bits, parity, stop bits and baud rate is taken into account here. Locking: caller is expected to take **port->lock**h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjubj)}(hhh](j)}(hC``struct uart_port *port`` uart_port structure describing the port h](j)}(h``struct uart_port *port``h]j)}(hjh]hstruct uart_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjubj )}(hhh]h)}(h'uart_port structure describing the porth]h'uart_port structure describing the port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h+``unsigned int cflag`` termios cflag value h](j)}(h``unsigned int cflag``h]j)}(hjh]hunsigned int cflag}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjubj )}(hhh]h)}(htermios cflag valueh]htermios cflag value}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``unsigned int baud`` speed of the port h](j)}(h``unsigned int baud``h]j)}(hjAh]hunsigned int baud}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj;ubj )}(hhh]h)}(hspeed of the porth]hspeed of the port}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj|h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjubh)}(hSet the **port** frame timing information from which the FIFO timeout value is derived. The **cflag** value should reflect the actual hardware settings as number of bits, parity, stop bits and baud rate is taken into account here.h](hSet the }(hjhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhL frame timing information from which the FIFO timeout value is derived. The }(hjhhhNhNubj)}(h **cflag**h]hcflag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh value should reflect the actual hardware settings as number of bits, parity, stop bits and baud rate is taken into account here.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjubh)}(h2Locking: caller is expected to take **port->lock**h](h$Locking: caller is expected to take }(hjhhhNhNubj)}(h**port->lock**h]h port->lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_get_baud_rate (C function)c.uart_get_baud_ratehNtauh1jhjMhhhNhNubj)}(hhh](j)}(hunsigned int uart_get_baud_rate (struct uart_port *port, struct ktermios *termios, const struct ktermios *old, unsigned int min, unsigned int max)h]j)}(hunsigned int uart_get_baud_rate(struct uart_port *port, struct ktermios *termios, const struct ktermios *old, unsigned int min, unsigned int max)h](jx)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjx)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjhhhjhMubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj$)}(huart_get_baud_rateh]j*)}(huart_get_baud_rateh]huart_get_baud_rate}(hj?hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj;ubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hjhhhjhMubj)}(hr(struct uart_port *port, struct ktermios *termios, const struct ktermios *old, unsigned int min, unsigned int max)h](j)}(hstruct uart_port *porth](j)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjWubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]j*)}(h uart_porth]h uart_port}(hjyhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj)}j]j)}jjAsbc.uart_get_baud_rateasbuh1hhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj*)}(hporth]hport}(hjhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(hstruct ktermios *termiosh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j*)}(hktermiosh]hktermios}(hjhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.uart_get_baud_rateasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj*)}(htermiosh]htermios}(hj$hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(hconst struct ktermios *oldh](j)}(hconsth]hconst}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj9ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hjh]hstruct}(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj9ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hhh]j*)}(hktermiosh]hktermios}(hjwhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj)}j]jc.uart_get_baud_rateasbuh1hhj9ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj*)}(holdh]hold}(hjhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(hunsigned int minh](jx)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjx)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj*)}(hminh]hmin}(hjhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(hunsigned int maxh](jx)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjx)}(hinth]hint}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj*)}(hmaxh]hmax}(hjRhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjGuh1jjHjIhjhhhjhMubah}(h]jah ](jMjNeh"]h$]h&]jRjS)jThuh1jhjhMhjhhubjV)}(hhh]h)}(h&return baud rate for a particular porth]h&return baud rate for a particular port}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjyhhubah}(h]h ]h"]h$]h&]uh1jUhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjMhNhNubj)}(hX@**Parameters** ``struct uart_port *port`` uart_port structure describing the port in question. ``struct ktermios *termios`` desired termios settings ``const struct ktermios *old`` old termios (or ``NULL``) ``unsigned int min`` minimum acceptable baud rate ``unsigned int max`` maximum acceptable baud rate **Description** Decode the termios structure into a numeric baud rate, taking account of the magic 38400 baud rate (with spd_* flags), and mapping the ``B0`` rate to 9600 baud. If the new baud rate is invalid, try the **old** termios setting. If it's still invalid, we try 9600 baud. If that is also invalid 0 is returned. The **termios** structure is updated to reflect the baud rate we're actually going to be using. Don't do this for the case where B0 is requested ("hang up"). Locking: caller dependenth](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjubj)}(hhh](j)}(hP``struct uart_port *port`` uart_port structure describing the port in question. h](j)}(h``struct uart_port *port``h]j)}(hjh]hstruct uart_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjubj )}(hhh]h)}(h4uart_port structure describing the port in question.h]h4uart_port structure describing the port in question.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h6``struct ktermios *termios`` desired termios settings h](j)}(h``struct ktermios *termios``h]j)}(hjh]hstruct ktermios *termios}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjubj )}(hhh]h)}(hdesired termios settingsh]hdesired termios settings}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h9``const struct ktermios *old`` old termios (or ``NULL``) h](j)}(h``const struct ktermios *old``h]j)}(hj/ h]hconst struct ktermios *old}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj- ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj) ubj )}(hhh]h)}(hold termios (or ``NULL``)h](hold termios (or }(hjH hhhNhNubj)}(h``NULL``h]hNULL}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH ubh)}(hjH hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjD hMhjE ubah}(h]h ]h"]h$]h&]uh1jhj) ubeh}(h]h ]h"]h$]h&]uh1jhjD hMhjubj)}(h2``unsigned int min`` minimum acceptable baud rate h](j)}(h``unsigned int min``h]j)}(hjz h]hunsigned int min}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjt ubj )}(hhh]h)}(hminimum acceptable baud rateh]hminimum acceptable baud rate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjt ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h2``unsigned int max`` maximum acceptable baud rate h](j)}(h``unsigned int max``h]j)}(hj h]hunsigned int max}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj ubj )}(hhh]h)}(hmaximum acceptable baud rateh]hmaximum acceptable baud rate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjubh)}(hDecode the termios structure into a numeric baud rate, taking account of the magic 38400 baud rate (with spd_* flags), and mapping the ``B0`` rate to 9600 baud.h](hDecode the termios structure into a numeric baud rate, taking account of the magic 38400 baud rate (with spd_* flags), and mapping the }(hj!hhhNhNubj)}(h``B0``h]hB0}(hj !hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh rate to 9600 baud.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjubh)}(hIf the new baud rate is invalid, try the **old** termios setting. If it's still invalid, we try 9600 baud. If that is also invalid 0 is returned.h](h)If the new baud rate is invalid, try the }(hj%!hhhNhNubj)}(h**old**h]hold}(hj-!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%!ubhc termios setting. If it’s still invalid, we try 9600 baud. If that is also invalid 0 is returned.}(hj%!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjubh)}(hThe **termios** structure is updated to reflect the baud rate we're actually going to be using. Don't do this for the case where B0 is requested ("hang up").h](hThe }(hjF!hhhNhNubj)}(h **termios**h]htermios}(hjN!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF!ubh structure is updated to reflect the baud rate we’re actually going to be using. Don’t do this for the case where B0 is requested (“hang up”).}(hjF!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjubh)}(hLocking: caller dependenth]hLocking: caller dependent}(hjg!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_get_divisor (C function)c.uart_get_divisorhNtauh1jhjMhhhNhNubj)}(hhh](j)}(hIunsigned int uart_get_divisor (struct uart_port *port, unsigned int baud)h]j)}(hHunsigned int uart_get_divisor(struct uart_port *port, unsigned int baud)h](jx)}(hunsignedh]hunsigned}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj!hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM-ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj!hM-ubjx)}(hinth]hint}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj!hhhj!hM-ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj!hM-ubj$)}(huart_get_divisorh]j*)}(huart_get_divisorh]huart_get_divisor}(hj!hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj!ubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hj!hhhj!hM-ubj)}(h+(struct uart_port *port, unsigned int baud)h](j)}(hstruct uart_port *porth](j)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hhh]j*)}(h uart_porth]h uart_port}(hj "hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj "ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j)}jj!sbc.uart_get_divisorasbuh1hhj!ubj)}(h h]h }(hj-"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hjh]h*}(hj;"hhhNhNubah}(h]+h ]jah"]h$]h&]uh1jhj!ubj*)}(hporth]hport}(hjH"hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(hunsigned int baudh](jx)}(hunsignedh]hunsigned}(hja"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj]"ubj)}(h h]h }(hjo"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]"ubjx)}(hinth]hint}(hj}"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj]"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]"ubj*)}(hbaudh]hbaud}(hj"hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj]"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubeh}(h]h ]h"]h$]h&]jjuh1jhj!hhhj!hM-ubeh}(h]h ]h"]h$]h&]jjjGuh1jjHjIhj!hhhj!hM-ubah}(h]j!ah ](jMjNeh"]h$]h&]jRjS)jThuh1jhj!hM-hj!hhubjV)}(hhh]h)}(hreturn uart clock divisorh]hreturn uart clock divisor}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM-hj"hhubah}(h]h ]h"]h$]h&]uh1jUhj!hhhj!hM-ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"jj"jjjuh1jhhhjMhNhNubj)}(hXZ**Parameters** ``struct uart_port *port`` uart_port structure describing the port ``unsigned int baud`` desired baud rate **Description** Calculate the divisor (baud_base / baud) for the specified **baud**, appropriately rounded. If 38400 baud and custom divisor is selected, return the custom divisor instead. Locking: caller dependenth](h)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM1hj"ubj)}(hhh](j)}(hC``struct uart_port *port`` uart_port structure describing the port h](j)}(h``struct uart_port *port``h]j)}(hj#h]hstruct uart_port *port}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM.hj"ubj )}(hhh]h)}(h'uart_port structure describing the porth]h'uart_port structure describing the port}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hM.hj#ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj#hM.hj"ubj)}(h(``unsigned int baud`` desired baud rate h](j)}(h``unsigned int baud``h]j)}(hj=#h]hunsigned int baud}(hj?#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;#ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM/hj7#ubj )}(hhh]h)}(hdesired baud rateh]hdesired baud rate}(hjV#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjR#hM/hjS#ubah}(h]h ]h"]h$]h&]uh1jhj7#ubeh}(h]h ]h"]h$]h&]uh1jhjR#hM/hj"ubeh}(h]h ]h"]h$]h&]uh1jhj"ubh)}(h**Description**h]j)}(hjx#h]h Description}(hjz#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv#ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM1hj"ubh)}(h[Calculate the divisor (baud_base / baud) for the specified **baud**, appropriately rounded.h](h;Calculate the divisor (baud_base / baud) for the specified }(hj#hhhNhNubj)}(h**baud**h]hbaud}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh, appropriately rounded.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM0hj"ubh)}(hPIf 38400 baud and custom divisor is selected, return the custom divisor instead.h]hPIf 38400 baud and custom divisor is selected, return the custom divisor instead.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM3hj"ubh)}(hLocking: caller dependenth]hLocking: caller dependent}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM6hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_get_lsr_info (C function)c.uart_get_lsr_infohNtauh1jhjMhhhNhNubj)}(hhh](j)}(hdint uart_get_lsr_info (struct tty_struct *tty, struct uart_state *state, unsigned int __user *value)h]j)}(hcint uart_get_lsr_info(struct tty_struct *tty, struct uart_state *state, unsigned int __user *value)h](jx)}(hinth]hint}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj#hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj#hMubj$)}(huart_get_lsr_infoh]j*)}(huart_get_lsr_infoh]huart_get_lsr_info}(hj$hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj $ubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hj#hhhj#hMubj)}(hN(struct tty_struct *tty, struct uart_state *state, unsigned int __user *value)h](j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hj*$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&$ubj)}(h h]h }(hj7$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&$ubh)}(hhh]j*)}(h tty_structh]h tty_struct}(hjH$hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjE$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJ$modnameN classnameNjj)}j]j)}jj$sbc.uart_get_lsr_infoasbuh1hhj&$ubj)}(h h]h }(hjh$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&$ubj)}(hjh]h*}(hjv$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&$ubj*)}(httyh]htty}(hj$hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj&$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"$ubj)}(hstruct uart_state *stateh](j)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hhh]j*)}(h uart_stateh]h uart_state}(hj$hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]jd$c.uart_get_lsr_infoasbuh1hhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj*)}(hstateh]hstate}(hj$hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"$ubj)}(hunsigned int __user *valueh](jx)}(hunsignedh]hunsigned}(hj %hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubjx)}(hinth]hint}(hj(%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj%ubj)}(h h]h }(hj6%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh__user}(hj%hhhNhNubj)}(h h]h }(hjH%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hjh]h*}(hjV%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj*)}(hvalueh]hvalue}(hjc%hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"$ubeh}(h]h ]h"]h$]h&]jjuh1jhj#hhhj#hMubeh}(h]h ]h"]h$]h&]jjjGuh1jjHjIhj#hhhj#hMubah}(h]j#ah ](jMjNeh"]h$]h&]jRjS)jThuh1jhj#hMhj#hhubjV)}(hhh]h)}(hget line status register infoh]hget line status register info}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj%hhubah}(h]h ]h"]h$]h&]uh1jUhj#hhhj#hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%jj%jjjuh1jhhhjMhNhNubj)}(h**Parameters** ``struct tty_struct *tty`` tty associated with the UART ``struct uart_state *state`` UART being queried ``unsigned int __user *value`` returned modem valueh](h)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM"hj%ubj)}(hhh](j)}(h8``struct tty_struct *tty`` tty associated with the UART h](j)}(h``struct tty_struct *tty``h]j)}(hj%h]hstruct tty_struct *tty}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj%ubj )}(hhh]h)}(htty associated with the UARTh]htty associated with the UART}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj%ubj)}(h0``struct uart_state *state`` UART being queried h](j)}(h``struct uart_state *state``h]j)}(hj&h]hstruct uart_state *state}(hj &hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj&ubj )}(hhh]h)}(hUART being queriedh]hUART being queried}(hj &hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hM hj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hM hj%ubj)}(h3``unsigned int __user *value`` returned modem valueh](j)}(h``unsigned int __user *value``h]j)}(hj@&h]hunsigned int __user *value}(hjB&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>&ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM"hj:&ubj )}(hhh]h)}(hreturned modem valueh]hreturned modem value}(hjY&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM!hjV&ubah}(h]h ]h"]h$]h&]uh1jhj:&ubeh}(h]h ]h"]h$]h&]uh1jhjU&hM"hj%ubeh}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_console_write (C function)c.uart_console_writehNtauh1jhjMhhhNhNubj)}(hhh](j)}(hvoid uart_console_write (struct uart_port *port, const char *s, unsigned int count, void (*putchar)(struct uart_port *, unsigned char))h]j)}(hvoid uart_console_write(struct uart_port *port, const char *s, unsigned int count, void (*putchar)(struct uart_port*, unsigned char))h](jx)}(hvoidh]hvoid}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj&hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj&hMubj$)}(huart_console_writeh]j*)}(huart_console_writeh]huart_console_write}(hj&hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj&ubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hj&hhhj&hMubj)}(hn(struct uart_port *port, const char *s, unsigned int count, void (*putchar)(struct uart_port*, unsigned char))h](j)}(hstruct uart_port *porth](j)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hhh]j*)}(h uart_porth]h uart_port}(hj&hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j)}jj&sbc.uart_console_writeasbuh1hhj&ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hjh]h*}(hj#'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj*)}(hporth]hport}(hj0'hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(h const char *sh](j)}(hj?h]hconst}(hjI'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjE'ubj)}(h h]h }(hjV'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE'ubjx)}(hcharh]hchar}(hjd'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjE'ubj)}(h h]h }(hjr'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE'ubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE'ubj*)}(hsh]hs}(hj'hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjE'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(hunsigned int counth](jx)}(hunsignedh]hunsigned}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjx)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj*)}(hcounth]hcount}(hj'hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(h1void (*putchar)(struct uart_port*, unsigned char)h](jx)}(hvoidh]hvoid}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj'ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h(h]h(}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hjh]h*}(hj!(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj*)}(hputcharh]hputchar}(hj.(hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj'ubj)}(h)h]h)}(hj<(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hj(h]h(}(hjJ(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hjh]hstruct}(hjW(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubj)}(h h]h }(hjd(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]j*)}(h uart_porth]h uart_port}(hju(hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjr(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjw(modnameN classnameNjj)}j]j'c.uart_console_writeasbuh1hhj'ubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h,h]h,}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjx)}(hunsignedh]hunsigned}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj'ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjx)}(hcharh]hchar}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj'ubj)}(hj>(h]h)}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubeh}(h]h ]h"]h$]h&]jjuh1jhj&hhhj&hMubeh}(h]h ]h"]h$]h&]jjjGuh1jjHjIhj&hhhj&hMubah}(h]j&ah ](jMjNeh"]h$]h&]jRjS)jThuh1jhj&hMhj&hhubjV)}(hhh]h)}(h(write a console message to a serial porth]h(write a console message to a serial port}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj )hhubah}(h]h ]h"]h$]h&]uh1jUhj&hhhj&hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj')jj')jjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``struct uart_port *port`` the port to write the message ``const char *s`` array of characters ``unsigned int count`` number of characters in string to write ``void (*putchar)(struct uart_port *, unsigned char)`` function to write character to porth](h)}(h**Parameters**h]j)}(hj1)h]h Parameters}(hj3)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/)ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj+)ubj)}(hhh](j)}(h9``struct uart_port *port`` the port to write the message h](j)}(h``struct uart_port *port``h]j)}(hjP)h]hstruct uart_port *port}(hjR)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN)ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjJ)ubj )}(hhh]h)}(hthe port to write the messageh]hthe port to write the message}(hji)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje)hMhjf)ubah}(h]h ]h"]h$]h&]uh1jhjJ)ubeh}(h]h ]h"]h$]h&]uh1jhje)hMhjG)ubj)}(h&``const char *s`` array of characters h](j)}(h``const char *s``h]j)}(hj)h]h const char *s}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj)ubj )}(hhh]h)}(harray of charactersh]harray of characters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjG)ubj)}(h?``unsigned int count`` number of characters in string to write h](j)}(h``unsigned int count``h]j)}(hj)h]hunsigned int count}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj)ubj )}(hhh]h)}(h'number of characters in string to writeh]h'number of characters in string to write}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjG)ubj)}(hZ``void (*putchar)(struct uart_port *, unsigned char)`` function to write character to porth](j)}(h6``void (*putchar)(struct uart_port *, unsigned char)``h]j)}(hj)h]h2void (*putchar)(struct uart_port *, unsigned char)}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj)ubj )}(hhh]h)}(h#function to write character to porth]h#function to write character to port}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj*ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjG)ubeh}(h]h ]h"]h$]h&]uh1jhj+)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j uart_parse_earlycon (C function)c.uart_parse_earlyconhNtauh1jhjMhhhNhNubj)}(hhh](j)}(hbint uart_parse_earlycon (char *p, enum uart_iotype *iotype, resource_size_t *addr, char **options)h]j)}(haint uart_parse_earlycon(char *p, enum uart_iotype *iotype, resource_size_t *addr, char **options)h](jx)}(hinth]hint}(hjU*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjQ*hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM*ubj)}(h h]h }(hjd*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ*hhhjc*hM*ubj$)}(huart_parse_earlyconh]j*)}(huart_parse_earlyconh]huart_parse_earlycon}(hjv*hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjr*ubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hjQ*hhhjc*hM*ubj)}(hJ(char *p, enum uart_iotype *iotype, resource_size_t *addr, char **options)h](j)}(hchar *ph](jx)}(hcharh]hchar}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj*)}(hjh]hp}(hj*hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(henum uart_iotype *iotypeh](j)}(henumh]henum}(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hhh]j*)}(h uart_iotypeh]h uart_iotype}(hj*hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]j)}jjx*sbc.uart_parse_earlyconasbuh1hhj*ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hjh]h*}(hj +hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj*)}(hiotypeh]hiotype}(hj-+hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(hresource_size_t *addrh](h)}(hhh]j*)}(hresource_size_th]hresource_size_t}(hjI+hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjF+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjK+modnameN classnameNjj)}j]j+c.uart_parse_earlyconasbuh1hhjB+ubj)}(h h]h }(hjg+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB+ubj)}(hjh]h*}(hju+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB+ubj*)}(haddrh]haddr}(hj+hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjB+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(hchar **optionsh](jx)}(hcharh]hchar}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj*)}(hoptionsh]hoptions}(hj+hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubeh}(h]h ]h"]h$]h&]jjuh1jhjQ*hhhjc*hM*ubeh}(h]h ]h"]h$]h&]jjjGuh1jjHjIhjM*hhhjc*hM*ubah}(h]jH*ah ](jMjNeh"]h$]h&]jRjS)jThuh1jhjc*hM*hjJ*hhubjV)}(hhh]h)}(hParse earlycon optionsh]hParse earlycon options}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM*hj+hhubah}(h]h ]h"]h$]h&]uh1jUhjJ*hhhjc*hM*ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj,jj,jjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``char *p`` ptr to 2nd field (ie., just beyond ',') ``enum uart_iotype *iotype`` ptr for decoded iotype (out) ``resource_size_t *addr`` ptr for decoded mapbase/iobase (out) ``char **options`` ptr for field; ``NULL`` if not present (out) **Description** Decodes earlycon kernel command line parameters of the form: * earlycon=,io|mmio|mmio16|mmio32|mmio32be|mmio32native,, * console=,io|mmio|mmio16|mmio32|mmio32be|mmio32native,, The optional form: * earlycon=,0x, * console=,0x, is also accepted; the returned **iotype** will be ``UPIO_MEM``. **Return** 0 on success or -``EINVAL`` on failureh](h)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM.hj,ubj)}(hhh](j)}(h:``char *p`` ptr to 2nd field (ie., just beyond ',') h](j)}(h ``char *p``h]j)}(hj<,h]hchar *p}(hj>,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:,ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM+hj6,ubj )}(hhh]h)}(h-ptr to 2nd field (ie., just beyond ',')h]h1ptr to 2nd field (ie., just beyond ‘,’)}(hjU,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ,hM+hjR,ubah}(h]h ]h"]h$]h&]uh1jhj6,ubeh}(h]h ]h"]h$]h&]uh1jhjQ,hM+hj3,ubj)}(h:``enum uart_iotype *iotype`` ptr for decoded iotype (out) h](j)}(h``enum uart_iotype *iotype``h]j)}(hju,h]henum uart_iotype *iotype}(hjw,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs,ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM,hjo,ubj )}(hhh]h)}(hptr for decoded iotype (out)h]hptr for decoded iotype (out)}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hM,hj,ubah}(h]h ]h"]h$]h&]uh1jhjo,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM,hj3,ubj)}(h?``resource_size_t *addr`` ptr for decoded mapbase/iobase (out) h](j)}(h``resource_size_t *addr``h]j)}(hj,h]hresource_size_t *addr}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM-hj,ubj )}(hhh]h)}(h$ptr for decoded mapbase/iobase (out)h]h$ptr for decoded mapbase/iobase (out)}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hM-hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM-hj3,ubj)}(hJ``char **options`` ptr for field; ``NULL`` if not present (out) h](j)}(h``char **options``h]j)}(hj,h]hchar **options}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM.hj,ubj )}(hhh]h)}(h6ptr for field; ``NULL`` if not present (out)h](hptr for field; }(hj-hhhNhNubj)}(h``NULL``h]hNULL}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh if not present (out)}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hM.hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM.hj3,ubeh}(h]h ]h"]h$]h&]uh1jhj,ubh)}(h**Description**h]j)}(hj4-h]h Description}(hj6-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2-ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM0hj,ubj)}(hhh](j)}(hDecodes earlycon kernel command line parameters of the form: * earlycon=,io|mmio|mmio16|mmio32|mmio32be|mmio32native,, * console=,io|mmio|mmio16|mmio32|mmio32be|mmio32native,, h](j)}(h,io|mmio|mmio16|mmio32|mmio32be|mmio32native,,h]h)}(hjh-h]hLearlycon=,io|mmio|mmio16|mmio32|mmio32be|mmio32native,,}(hjj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM0hjf-ubah}(h]h ]h"]h$]h&]uh1j_hjc-ubj`)}(hLconsole=,io|mmio|mmio16|mmio32|mmio32be|mmio32native,, h]h)}(hKconsole=,io|mmio|mmio16|mmio32|mmio32be|mmio32native,,h]hKconsole=,io|mmio|mmio16|mmio32|mmio32be|mmio32native,,}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_-hM1hj~-ubah}(h]h ]h"]h$]h&]uh1j_hjc-ubeh}(h]h ]h"]h$]h&]jjuh1jZhjw-hM0hj`-ubah}(h]h ]h"]h$]h&]uh1jhjM-ubeh}(h]h ]h"]h$]h&]uh1jhj_-hM1hjJ-ubj)}(h\The optional form: * earlycon=,0x, * console=,0x, h](j)}(hThe optional form:h]hThe optional form:}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM5hj-ubj )}(hhh]j[)}(hhh](j`)}(h"earlycon=,0x,h]h)}(hj-h]h"earlycon=,0x,}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM4hj-ubah}(h]h ]h"]h$]h&]uh1j_hj-ubj`)}(h"console=,0x, h]h)}(h!console=,0x,h]h!console=,0x,}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hM5hj-ubah}(h]h ]h"]h$]h&]uh1j_hj-ubeh}(h]h ]h"]h$]h&]jjuh1jZhj-hM4hj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hM5hjJ-ubeh}(h]h ]h"]h$]h&]uh1jhj,ubh)}(h?is also accepted; the returned **iotype** will be ``UPIO_MEM``.h](his also accepted; the returned }(hj .hhhNhNubj)}(h **iotype**h]hiotype}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj .ubh will be }(hj .hhhNhNubj)}(h ``UPIO_MEM``h]hUPIO_MEM}(hj#.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj .ubh.}(hj .hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM7hj,ubh)}(h **Return**h]j)}(hj>.h]hReturn}(hj@.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<.ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM9hj,ubh)}(h&0 on success or -``EINVAL`` on failureh](h0 on success or -}(hjT.hhhNhNubj)}(h ``EINVAL``h]hEINVAL}(hj\.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT.ubh on failure}(hjT.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM:hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_parse_options (C function)c.uart_parse_optionshNtauh1jhjMhhhNhNubj)}(hhh](j)}(h[void uart_parse_options (const char *options, int *baud, int *parity, int *bits, int *flow)h]j)}(hZvoid uart_parse_options(const char *options, int *baud, int *parity, int *bits, int *flow)h](jx)}(hvoidh]hvoid}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj.hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMgubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj.hMgubj$)}(huart_parse_optionsh]j*)}(huart_parse_optionsh]huart_parse_options}(hj.hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj.ubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hj.hhhj.hMgubj)}(hC(const char *options, int *baud, int *parity, int *bits, int *flow)h](j)}(hconst char *optionsh](j)}(hj?h]hconst}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubjx)}(hcharh]hchar}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hjh]h*}(hj /hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj*)}(hoptionsh]hoptions}(hj/hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(h int *baudh](jx)}(hinth]hint}(hj//hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj+/ubj)}(h h]h }(hj=/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+/ubj)}(hjh]h*}(hjK/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+/ubj*)}(hbaudh]hbaud}(hjX/hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj+/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(h int *parityh](jx)}(hinth]hint}(hjq/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjm/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm/ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm/ubj*)}(hparityh]hparity}(hj/hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjm/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(h int *bitsh](jx)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj*)}(hbitsh]hbits}(hj/hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(h int *flowh](jx)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj/ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj*)}(hflowh]hflow}(hj0hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubeh}(h]h ]h"]h$]h&]jjuh1jhj.hhhj.hMgubeh}(h]h ]h"]h$]h&]jjjGuh1jjHjIhj.hhhj.hMgubah}(h]j.ah ](jMjNeh"]h$]h&]jRjS)jThuh1jhj.hMghj.hhubjV)}(hhh]h)}(h0Parse serial port baud/parity/bits/flow control.h]h0Parse serial port baud/parity/bits/flow control.}(hjH0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMghjE0hhubah}(h]h ]h"]h$]h&]uh1jUhj.hhhj.hMgubeh}(h]h ](jfunctioneh"]h$]h&]jjjj`0jj`0jjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``const char *options`` pointer to option string ``int *baud`` pointer to an 'int' variable for the baud rate. ``int *parity`` pointer to an 'int' variable for the parity. ``int *bits`` pointer to an 'int' variable for the number of data bits. ``int *flow`` pointer to an 'int' variable for the flow control character. **Description** uart_parse_options() decodes a string containing the serial console options. The format of the string is , eg: 115200n8rh](h)}(h**Parameters**h]j)}(hjj0h]h Parameters}(hjl0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh0ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMkhjd0ubj)}(hhh](j)}(h1``const char *options`` pointer to option string h](j)}(h``const char *options``h]j)}(hj0h]hconst char *options}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhhj0ubj )}(hhh]h)}(hpointer to option stringh]hpointer to option string}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhhj0ubj)}(h>``int *baud`` pointer to an 'int' variable for the baud rate. h](j)}(h ``int *baud``h]j)}(hj0h]h int *baud}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMihj0ubj )}(hhh]h)}(h/pointer to an 'int' variable for the baud rate.h]h3pointer to an ‘int’ variable for the baud rate.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMihj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMihj0ubj)}(h=``int *parity`` pointer to an 'int' variable for the parity. h](j)}(h``int *parity``h]j)}(hj0h]h int *parity}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMjhj0ubj )}(hhh]h)}(h,pointer to an 'int' variable for the parity.h]h0pointer to an ‘int’ variable for the parity.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMjhj1ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj1hMjhj0ubj)}(hH``int *bits`` pointer to an 'int' variable for the number of data bits. h](j)}(h ``int *bits``h]j)}(hj41h]h int *bits}(hj61hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj21ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMkhj.1ubj )}(hhh]h)}(h9pointer to an 'int' variable for the number of data bits.h]h=pointer to an ‘int’ variable for the number of data bits.}(hjM1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI1hMkhjJ1ubah}(h]h ]h"]h$]h&]uh1jhj.1ubeh}(h]h ]h"]h$]h&]uh1jhjI1hMkhj0ubj)}(hK``int *flow`` pointer to an 'int' variable for the flow control character. h](j)}(h ``int *flow``h]j)}(hjm1h]h int *flow}(hjo1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk1ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMlhjg1ubj )}(hhh]h)}(h, eg: 115200n8rh]huart_parse_options() decodes a string containing the serial console options. The format of the string is , eg: 115200n8r}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMmhjd0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_set_options (C function)c.uart_set_optionshNtauh1jhjMhhhNhNubj)}(hhh](j)}(hkint uart_set_options (struct uart_port *port, struct console *co, int baud, int parity, int bits, int flow)h]j)}(hjint uart_set_options(struct uart_port *port, struct console *co, int baud, int parity, int bits, int flow)h](jx)}(hinth]hint}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj1hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhj1hMubj$)}(huart_set_optionsh]j*)}(huart_set_optionsh]huart_set_options}(hj2hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj 2ubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hj1hhhj1hMubj)}(hV(struct uart_port *port, struct console *co, int baud, int parity, int bits, int flow)h](j)}(hstruct uart_port *porth](j)}(hjh]hstruct}(hj*2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&2ubj)}(h h]h }(hj72hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&2ubh)}(hhh]j*)}(h uart_porth]h uart_port}(hjH2hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjE2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJ2modnameN classnameNjj)}j]j)}jj2sbc.uart_set_optionsasbuh1hhj&2ubj)}(h h]h }(hjh2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&2ubj)}(hjh]h*}(hjv2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&2ubj*)}(hporth]hport}(hj2hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj&2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"2ubj)}(hstruct console *coh](j)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hhh]j*)}(hconsoleh]hconsole}(hj2hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]jd2c.uart_set_optionsasbuh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj*)}(hcoh]hco}(hj2hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"2ubj)}(hint baudh](jx)}(hinth]hint}(hj 3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj*)}(hbaudh]hbaud}(hj(3hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"2ubj)}(h int parityh](jx)}(hinth]hint}(hjA3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj=3ubj)}(h h]h }(hjO3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=3ubj*)}(hparityh]hparity}(hj]3hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj=3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"2ubj)}(hint bitsh](jx)}(hinth]hint}(hjv3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjr3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr3ubj*)}(hbitsh]hbits}(hj3hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjr3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"2ubj)}(hint flowh](jx)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj*)}(hflowh]hflow}(hj3hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"2ubeh}(h]h ]h"]h$]h&]jjuh1jhj1hhhj1hMubeh}(h]h ]h"]h$]h&]jjjGuh1jjHjIhj1hhhj1hMubah}(h]j1ah ](jMjNeh"]h$]h&]jRjS)jThuh1jhj1hMhj1hhubjV)}(hhh]h)}(h#setup the serial console parametersh]h#setup the serial console parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj3hhubah}(h]h ]h"]h$]h&]uh1jUhj1hhhj1hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj 4jj 4jjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``struct uart_port *port`` pointer to the serial ports uart_port structure ``struct console *co`` console pointer ``int baud`` baud rate ``int parity`` parity character - 'n' (none), 'o' (odd), 'e' (even) ``int bits`` number of data bits ``int flow`` flow control character - 'r' (rts) **Description** Locking: Caller must hold console_list_lock in order to serialize early initialization of the serial-console lock.h](h)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj 4ubj)}(hhh](j)}(hK``struct uart_port *port`` pointer to the serial ports uart_port structure h](j)}(h``struct uart_port *port``h]j)}(hj24h]hstruct uart_port *port}(hj44hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj04ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj,4ubj )}(hhh]h)}(h/pointer to the serial ports uart_port structureh]h/pointer to the serial ports uart_port structure}(hjK4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG4hMhjH4ubah}(h]h ]h"]h$]h&]uh1jhj,4ubeh}(h]h ]h"]h$]h&]uh1jhjG4hMhj)4ubj)}(h'``struct console *co`` console pointer h](j)}(h``struct console *co``h]j)}(hjk4h]hstruct console *co}(hjm4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji4ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhje4ubj )}(hhh]h)}(hconsole pointerh]hconsole pointer}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhje4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj)4ubj)}(h``int baud`` baud rate h](j)}(h ``int baud``h]j)}(hj4h]hint baud}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj4ubj )}(hhh]h)}(h baud rateh]h baud rate}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj)4ubj)}(hD``int parity`` parity character - 'n' (none), 'o' (odd), 'e' (even) h](j)}(h``int parity``h]j)}(hj4h]h int parity}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj4ubj )}(hhh]h)}(h4parity character - 'n' (none), 'o' (odd), 'e' (even)h]h@parity character - ‘n’ (none), ‘o’ (odd), ‘e’ (even)}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj)4ubj)}(h!``int bits`` number of data bits h](j)}(h ``int bits``h]j)}(hj5h]hint bits}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj5ubj )}(hhh]h)}(hnumber of data bitsh]hnumber of data bits}(hj/5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+5hMhj,5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj+5hMhj)4ubj)}(h0``int flow`` flow control character - 'r' (rts) h](j)}(h ``int flow``h]j)}(hjO5h]hint flow}(hjQ5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM5ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjI5ubj )}(hhh]h)}(h"flow control character - 'r' (rts)h]h&flow control character - ‘r’ (rts)}(hjh5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd5hMhje5ubah}(h]h ]h"]h$]h&]uh1jhjI5ubeh}(h]h ]h"]h$]h&]uh1jhjd5hMhj)4ubeh}(h]h ]h"]h$]h&]uh1jhj 4ubh)}(h**Description**h]j)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj 4ubh)}(hrLocking: Caller must hold console_list_lock in order to serialize early initialization of the serial-console lock.h]hrLocking: Caller must hold console_list_lock in order to serialize early initialization of the serial-console lock.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj 4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!uart_register_driver (C function)c.uart_register_driverhNtauh1jhjMhhhNhNubj)}(hhh](j)}(h2int uart_register_driver (struct uart_driver *drv)h]j)}(h1int uart_register_driver(struct uart_driver *drv)h](jx)}(hinth]hint}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj5hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhj5hM ubj$)}(huart_register_driverh]j*)}(huart_register_driverh]huart_register_driver}(hj5hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj5ubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hj5hhhj5hM ubj)}(h(struct uart_driver *drv)h]j)}(hstruct uart_driver *drvh](j)}(hjh]hstruct}(hj 6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]j*)}(h uart_driverh]h uart_driver}(hj*6hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj'6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,6modnameN classnameNjj)}j]j)}jj5sbc.uart_register_driverasbuh1hhj6ubj)}(h h]h }(hjJ6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]h*}(hjX6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj*)}(hdrvh]hdrv}(hje6hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubah}(h]h ]h"]h$]h&]jjuh1jhj5hhhj5hM ubeh}(h]h ]h"]h$]h&]jjjGuh1jjHjIhj5hhhj5hM ubah}(h]j5ah ](jMjNeh"]h$]h&]jRjS)jThuh1jhj5hM hj5hhubjV)}(hhh]h)}(h*register a driver with the uart core layerh]h*register a driver with the uart core layer}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj6hhubah}(h]h ]h"]h$]h&]uh1jUhj5hhhj5hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6jj6jjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``struct uart_driver *drv`` low level driver structure **Description** Register a uart driver with the core driver. We in turn register with the tty layer, and initialise the core driver per-port state. We have a proc file in /proc/tty/driver which is named after the normal driver. **drv->port** should be ``NULL``, and the per-port structures should be registered using uart_add_one_port() after this call has succeeded. Locking: none, Interrupts: enabledh](h)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj6ubj)}(hhh]j)}(h7``struct uart_driver *drv`` low level driver structure h](j)}(h``struct uart_driver *drv``h]j)}(hj6h]hstruct uart_driver *drv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj6ubj )}(hhh]h)}(hlow level driver structureh]hlow level driver structure}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM hj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hM hj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubh)}(h**Description**h]j)}(hj 7h]h Description}(hj 7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 7ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj6ubh)}(hRegister a uart driver with the core driver. We in turn register with the tty layer, and initialise the core driver per-port state.h]hRegister a uart driver with the core driver. We in turn register with the tty layer, and initialise the core driver per-port state.}(hj!7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj6ubh)}(hOWe have a proc file in /proc/tty/driver which is named after the normal driver.h]hOWe have a proc file in /proc/tty/driver which is named after the normal driver.}(hj07hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj6ubh)}(h**drv->port** should be ``NULL``, and the per-port structures should be registered using uart_add_one_port() after this call has succeeded.h](j)}(h **drv->port**h]h drv->port}(hjC7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?7ubh should be }(hj?7hhhNhNubj)}(h``NULL``h]hNULL}(hjU7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?7ubhk, and the per-port structures should be registered using uart_add_one_port() after this call has succeeded.}(hj?7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj6ubh)}(h"Locking: none, Interrupts: enabledh]h"Locking: none, Interrupts: enabled}(hjn7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#uart_unregister_driver (C function)c.uart_unregister_driverhNtauh1jhjMhhhNhNubj)}(hhh](j)}(h5void uart_unregister_driver (struct uart_driver *drv)h]j)}(h4void uart_unregister_driver(struct uart_driver *drv)h](jx)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj7hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhj7hM ubj$)}(huart_unregister_driverh]j*)}(huart_unregister_driverh]huart_unregister_driver}(hj7hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj7ubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hj7hhhj7hM ubj)}(h(struct uart_driver *drv)h]j)}(hstruct uart_driver *drvh](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]j*)}(h uart_driverh]h uart_driver}(hj7hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]j)}jj7sbc.uart_unregister_driverasbuh1hhj7ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hjh]h*}(hj&8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj*)}(hdrvh]hdrv}(hj38hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubah}(h]h ]h"]h$]h&]jjuh1jhj7hhhj7hM ubeh}(h]h ]h"]h$]h&]jjjGuh1jjHjIhj7hhhj7hM ubah}(h]j7ah ](jMjNeh"]h$]h&]jRjS)jThuh1jhj7hM hj7hhubjV)}(hhh]h)}(h(remove a driver from the uart core layerh]h(remove a driver from the uart core layer}(hj]8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hjZ8hhubah}(h]h ]h"]h$]h&]uh1jUhj7hhhj7hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjju8jju8jjjuh1jhhhjMhNhNubj)}(hX\**Parameters** ``struct uart_driver *drv`` low level driver structure **Description** Remove all references to a driver from the core driver. The low level driver must have removed all its ports via the uart_remove_one_port() if it registered them with uart_add_one_port(). (I.e. **drv->port** is ``NULL``.) Locking: none, Interrupts: enabledh](h)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}8ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hjy8ubj)}(hhh]j)}(h7``struct uart_driver *drv`` low level driver structure h](j)}(h``struct uart_driver *drv``h]j)}(hj8h]hstruct uart_driver *drv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj8ubj )}(hhh]h)}(hlow level driver structureh]hlow level driver structure}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hM hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hM hj8ubah}(h]h ]h"]h$]h&]uh1jhjy8ubh)}(h**Description**h]j)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hjy8ubh)}(hRemove all references to a driver from the core driver. The low level driver must have removed all its ports via the uart_remove_one_port() if it registered them with uart_add_one_port(). (I.e. **drv->port** is ``NULL``.)h](hRemove all references to a driver from the core driver. The low level driver must have removed all its ports via the uart_remove_one_port() if it registered them with uart_add_one_port(). (I.e. }(hj8hhhNhNubj)}(h **drv->port**h]h drv->port}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh is }(hj8hhhNhNubj)}(h``NULL``h]hNULL}(hj 9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh.)}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hjy8ubh)}(h"Locking: none, Interrupts: enabledh]h"Locking: none, Interrupts: enabled}(hj"9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hjy8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_match_port (C function)c.uart_match_porthNtauh1jhjMhhhNhNubj)}(hhh](j)}(hSbool uart_match_port (const struct uart_port *port1, const struct uart_port *port2)h]j)}(hRbool uart_match_port(const struct uart_port *port1, const struct uart_port *port2)h](jx)}(hboolh]hbool}(hjQ9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjM9hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMp ubj)}(h h]h }(hj`9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM9hhhj_9hMp ubj$)}(huart_match_porth]j*)}(huart_match_porth]huart_match_port}(hjr9hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjn9ubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hjM9hhhj_9hMp ubj)}(h>(const struct uart_port *port1, const struct uart_port *port2)h](j)}(hconst struct uart_port *port1h](j)}(hj?h]hconst}(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hhh]j*)}(h uart_porth]h uart_port}(hj9hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]j)}jjt9sbc.uart_match_portasbuh1hhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj*)}(hport1h]hport1}(hj:hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubj)}(hconst struct uart_port *port2h](j)}(hj?h]hconst}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubj)}(h h]h }(hj(:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hjh]hstruct}(hj6:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubj)}(h h]h }(hjC:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hhh]j*)}(h uart_porth]h uart_port}(hjT:hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjQ:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjV:modnameN classnameNjj)}j]j9c.uart_match_portasbuh1hhj:ubj)}(h h]h }(hjr:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj*)}(hport2h]hport2}(hj:hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubeh}(h]h ]h"]h$]h&]jjuh1jhjM9hhhj_9hMp ubeh}(h]h ]h"]h$]h&]jjjGuh1jjHjIhjI9hhhj_9hMp ubah}(h]jD9ah ](jMjNeh"]h$]h&]jRjS)jThuh1jhj_9hMp hjF9hhubjV)}(hhh]h)}(hare the two ports equivalent?h]hare the two ports equivalent?}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMp hj:hhubah}(h]h ]h"]h$]h&]uh1jUhjF9hhhj_9hMp ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj:jj:jjjuh1jhhhjMhNhNubj)}(h**Parameters** ``const struct uart_port *port1`` first port ``const struct uart_port *port2`` second port **Description** This utility function can be used to determine whether two uart_port structures describe the same port.h](h)}(h**Parameters**h]j)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMt hj:ubj)}(hhh](j)}(h-``const struct uart_port *port1`` first port h](j)}(h!``const struct uart_port *port1``h]j)}(hj:h]hconst struct uart_port *port1}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMq hj:ubj )}(hhh]h)}(h first porth]h first port}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ;hMq hj;ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj ;hMq hj:ubj)}(h.``const struct uart_port *port2`` second port h](j)}(h!``const struct uart_port *port2``h]j)}(hj1;h]hconst struct uart_port *port2}(hj3;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/;ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMr hj+;ubj )}(hhh]h)}(h second porth]h second port}(hjJ;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjF;hMr hjG;ubah}(h]h ]h"]h$]h&]uh1jhj+;ubeh}(h]h ]h"]h$]h&]uh1jhjF;hMr hj:ubeh}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h**Description**h]j)}(hjl;h]h Description}(hjn;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj;ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMt hj:ubh)}(hgThis utility function can be used to determine whether two uart_port structures describe the same port.h]hgThis utility function can be used to determine whether two uart_port structures describe the same port.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMs hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#uart_handle_dcd_change (C function)c.uart_handle_dcd_changehNtauh1jhjMhhhNhNubj)}(hhh](j)}(hBvoid uart_handle_dcd_change (struct uart_port *uport, bool active)h]j)}(hAvoid uart_handle_dcd_change(struct uart_port *uport, bool active)h](jx)}(hvoidh]hvoid}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj;hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhj;hM ubj$)}(huart_handle_dcd_changeh]j*)}(huart_handle_dcd_changeh]huart_handle_dcd_change}(hj;hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj;ubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hj;hhhj;hM ubj)}(h&(struct uart_port *uport, bool active)h](j)}(hstruct uart_port *uporth](j)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]j*)}(h uart_porth]h uart_port}(hj <hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj <ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj)}j]j)}jj;sbc.uart_handle_dcd_changeasbuh1hhj;ubj)}(h h]h }(hj,<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(hjh]h*}(hj:<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj*)}(huporth]huport}(hjG<hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(h bool activeh](jx)}(hjS9h]hbool}(hj`<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj\<ubj)}(h h]h }(hjm<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\<ubj*)}(hactiveh]hactive}(hj{<hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj\<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubeh}(h]h ]h"]h$]h&]jjuh1jhj;hhhj;hM ubeh}(h]h ]h"]h$]h&]jjjGuh1jjHjIhj;hhhj;hM ubah}(h]j;ah ](jMjNeh"]h$]h&]jRjS)jThuh1jhj;hM hj;hhubjV)}(hhh]h)}(h'handle a change of carrier detect stateh]h'handle a change of carrier detect state}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj<hhubah}(h]h ]h"]h$]h&]uh1jUhj;hhhj;hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<jj<jjjuh1jhhhjMhNhNubj)}(h**Parameters** ``struct uart_port *uport`` uart_port structure for the open port ``bool active`` new carrier detect status **Description** Caller must hold uport->lock.h](h)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj<ubj)}(hhh](j)}(hB``struct uart_port *uport`` uart_port structure for the open port h](j)}(h``struct uart_port *uport``h]j)}(hj<h]hstruct uart_port *uport}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj<ubj )}(hhh]h)}(h%uart_port structure for the open porth]h%uart_port structure for the open port}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hM hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hM hj<ubj)}(h*``bool active`` new carrier detect status h](j)}(h``bool active``h]j)}(hj=h]h bool active}(hj!=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj=ubj )}(hhh]h)}(hnew carrier detect statush]hnew carrier detect status}(hj8=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4=hM hj5=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj4=hM hj<ubeh}(h]h ]h"]h$]h&]uh1jhj<ubh)}(h**Description**h]j)}(hjZ=h]h Description}(hj\=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX=ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj<ubh)}(hCaller must hold uport->lock.h]hCaller must hold uport->lock.}(hjp=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#uart_handle_cts_change (C function)c.uart_handle_cts_changehNtauh1jhjMhhhNhNubj)}(hhh](j)}(hBvoid uart_handle_cts_change (struct uart_port *uport, bool active)h]j)}(hAvoid uart_handle_cts_change(struct uart_port *uport, bool active)h](jx)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj=hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM7 ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhj=hM7 ubj$)}(huart_handle_cts_changeh]j*)}(huart_handle_cts_changeh]huart_handle_cts_change}(hj=hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj=ubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hj=hhhj=hM7 ubj)}(h&(struct uart_port *uport, bool active)h](j)}(hstruct uart_port *uporth](j)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hhh]j*)}(h uart_porth]h uart_port}(hj=hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]j)}jj=sbc.uart_handle_cts_changeasbuh1hhj=ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hjh]h*}(hj(>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj*)}(huporth]huport}(hj5>hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(h bool activeh](jx)}(hjS9h]hbool}(hjN>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjJ>ubj)}(h h]h }(hj[>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ>ubj*)}(hactiveh]hactive}(hji>hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjJ>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubeh}(h]h ]h"]h$]h&]jjuh1jhj=hhhj=hM7 ubeh}(h]h ]h"]h$]h&]jjjGuh1jjHjIhj=hhhj=hM7 ubah}(h]j=ah ](jMjNeh"]h$]h&]jRjS)jThuh1jhj=hM7 hj=hhubjV)}(hhh]h)}(h&handle a change of clear-to-send stateh]h&handle a change of clear-to-send state}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM7 hj>hhubah}(h]h ]h"]h$]h&]uh1jUhj=hhhj=hM7 ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>jj>jjjuh1jhhhjMhNhNubj)}(h**Parameters** ``struct uart_port *uport`` uart_port structure for the open port ``bool active`` new clear-to-send status **Description** Caller must hold uport->lock.h](h)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM; hj>ubj)}(hhh](j)}(hB``struct uart_port *uport`` uart_port structure for the open port h](j)}(h``struct uart_port *uport``h]j)}(hj>h]hstruct uart_port *uport}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM8 hj>ubj )}(hhh]h)}(h%uart_port structure for the open porth]h%uart_port structure for the open port}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hM8 hj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hM8 hj>ubj)}(h)``bool active`` new clear-to-send status h](j)}(h``bool active``h]j)}(hj ?h]h bool active}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ?ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM9 hj?ubj )}(hhh]h)}(hnew clear-to-send statush]hnew clear-to-send status}(hj&?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"?hM9 hj#?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj"?hM9 hj>ubeh}(h]h ]h"]h$]h&]uh1jhj>ubh)}(h**Description**h]j)}(hjH?h]h Description}(hjJ?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF?ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM; hj>ubh)}(hCaller must hold uport->lock.h]hCaller must hold uport->lock.}(hj^?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM: hj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"uart_try_toggle_sysrq (C function)c.uart_try_toggle_sysrqhNtauh1jhjMhhhNhNubj)}(hhh](j)}(h:bool uart_try_toggle_sysrq (struct uart_port *port, u8 ch)h]j)}(h9bool uart_try_toggle_sysrq(struct uart_port *port, u8 ch)h](jx)}(hjS9h]hbool}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj?hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhj?hM ubj$)}(huart_try_toggle_sysrqh]j*)}(huart_try_toggle_sysrqh]huart_try_toggle_sysrq}(hj?hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj?ubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hj?hhhj?hM ubj)}(h(struct uart_port *port, u8 ch)h](j)}(hstruct uart_port *porth](j)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]j*)}(h uart_porth]h uart_port}(hj?hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj)}j]j)}jj?sbc.uart_try_toggle_sysrqasbuh1hhj?ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj*)}(hporth]hport}(hj"@hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubj)}(hu8 chh](h)}(hhh]j*)}(hu8h]hu8}(hj>@hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj;@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@@modnameN classnameNjj)}j]j@c.uart_try_toggle_sysrqasbuh1hhj7@ubj)}(h h]h }(hj\@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7@ubj*)}(hchh]hch}(hjj@hhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj7@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubeh}(h]h ]h"]h$]h&]jjuh1jhj?hhhj?hM ubeh}(h]h ]h"]h$]h&]jjjGuh1jjHjIhj?hhhj?hM ubah}(h]j?ah ](jMjNeh"]h$]h&]jRjS)jThuh1jhj?hM hj?hhubjV)}(hhh]h)}(hEnables SysRq from serial lineh]hEnables SysRq from serial line}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj@hhubah}(h]h ]h"]h$]h&]uh1jUhj?hhhj?hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj@jj@jjjuh1jhhhjMhNhNubj)}(hX**Parameters** ``struct uart_port *port`` uart_port structure where char(s) after BREAK met ``u8 ch`` new character in the sequence after received BREAK **Description** Enables magic SysRq when the required sequence is met on port (see CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE). **Return** ``false`` if **ch** is out of enabling sequence and should be handled some other way, ``true`` if **ch** was consumed.h](h)}(h**Parameters**h]j)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj@ubj)}(hhh](j)}(hM``struct uart_port *port`` uart_port structure where char(s) after BREAK met h](j)}(h``struct uart_port *port``h]j)}(hj@h]hstruct uart_port *port}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj@ubj )}(hhh]h)}(h1uart_port structure where char(s) after BREAK meth]h1uart_port structure where char(s) after BREAK met}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hM hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hM hj@ubj)}(h=``u8 ch`` new character in the sequence after received BREAK h](j)}(h ``u8 ch``h]j)}(hjAh]hu8 ch}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Aubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hjAubj )}(hhh]h)}(h2new character in the sequence after received BREAKh]h2new character in the sequence after received BREAK}(hj'AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#AhM hj$Aubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj#AhM hj@ubeh}(h]h ]h"]h$]h&]uh1jhj@ubh)}(h**Description**h]j)}(hjIAh]h Description}(hjKAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGAubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj@ubh)}(hgEnables magic SysRq when the required sequence is met on port (see CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE).h]hgEnables magic SysRq when the required sequence is met on port (see CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE).}(hj_AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj@ubh)}(h **Return**h]j)}(hjpAh]hReturn}(hjrAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnAubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj@ubh)}(hv``false`` if **ch** is out of enabling sequence and should be handled some other way, ``true`` if **ch** was consumed.h](j)}(h ``false``h]hfalse}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh if }(hjAhhhNhNubj)}(h**ch**h]hch}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubhC is out of enabling sequence and should be handled some other way, }(hjAhhhNhNubj)}(h``true``h]htrue}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh if }hjAsbj)}(h**ch**h]hch}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh was consumed.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_port_tx_limited (C macro)c.uart_port_tx_limitedhNtauh1jhjMhhhNhNubj)}(hhh](j)}(huart_port_tx_limitedh]j)}(huart_port_tx_limitedh]j$)}(huart_port_tx_limitedh]j*)}(hjAh]huart_port_tx_limited}(hjAhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjAubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hjAhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMubah}(h]h ]h"]h$]h&]jjjGuh1jjHjIhjAhhhjBhMubah}(h]jAah ](jMjNeh"]h$]h&]jRjS)jThuh1jhjBhMhjAhhubjV)}(hhh]h}(h]h ]h"]h$]h&]uh1jUhjAhhhjBhMubeh}(h]h ](jmacroeh"]h$]h&]jjjj)Bjj)Bjjjuh1jhhhjMhNhNubh)}(hG``uart_port_tx_limited (port, ch, count, tx_ready, put_char, tx_done)``h]j)}(hj/Bh]hCuart_port_tx_limited (port, ch, count, tx_ready, put_char, tx_done)}(hj1BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-Bubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjMhhubj )}(h4- transmit helper for uart_port with count limiting h]j[)}(hhh]j`)}(h2transmit helper for uart_port with count limiting h]h)}(h1transmit helper for uart_port with count limitingh]h1transmit helper for uart_port with count limiting}(hjPBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjLBubah}(h]h ]h"]h$]h&]uh1j_hjIBubah}(h]h ]h"]h$]h&]jjuh1jZhj^BhMhjEBubah}(h]h ]h"]h$]h&]uh1j hj^BhMhjMhhubj)}(hX**Parameters** ``port`` uart port ``ch`` variable to store a character to be written to the HW ``count`` a limit of characters to send ``tx_ready`` can HW accept more data function ``put_char`` function to write a character ``tx_done`` function to call after the loop is done **Description** This helper transmits characters from the xmit buffer to the hardware using **put_char\(\)**. It does so until **count** characters are sent and while **tx_ready** evaluates to true. The expression in macro parameters shall be designed as follows: * **tx_ready:** should evaluate to true if the HW can accept more data to be sent. This parameter can be ``true``, which means the HW is always ready. * **put_char:** shall write **ch** to the device of **port**. * **tx_done:** when the write loop is done, this can perform arbitrary action before potential invocation of ops->stop_tx() happens. If the driver does not need to do anything, use e.g. ({}). For all of them, **port->lock** is held, interrupts are locally disabled and the expressions must not sleep. **Return** the number of characters in the xmit buffer when done.h](h)}(h**Parameters**h]j)}(hjwBh]h Parameters}(hjyBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuBubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjqBubj)}(hhh](j)}(h``port`` uart port h](j)}(h``port``h]j)}(hjBh]hport}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjBubj )}(hhh]h)}(h uart porth]h uart port}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjBubj)}(h=``ch`` variable to store a character to be written to the HW h](j)}(h``ch``h]j)}(hjBh]hch}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjBubj )}(hhh]h)}(h5variable to store a character to be written to the HWh]h5variable to store a character to be written to the HW}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjBubj)}(h(``count`` a limit of characters to send h](j)}(h ``count``h]j)}(hjCh]hcount}(hj ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjCubj )}(hhh]h)}(ha limit of characters to sendh]ha limit of characters to send}(hj!ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMhjBubj)}(h.``tx_ready`` can HW accept more data function h](j)}(h ``tx_ready``h]j)}(hjACh]htx_ready}(hjCChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Cubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhj;Cubj )}(hhh]h)}(h can HW accept more data functionh]h can HW accept more data function}(hjZChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVChMhjWCubah}(h]h ]h"]h$]h&]uh1jhj;Cubeh}(h]h ]h"]h$]h&]uh1jhjVChMhjBubj)}(h+``put_char`` function to write a character h](j)}(h ``put_char``h]j)}(hjzCh]hput_char}(hj|ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxCubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjtCubj )}(hhh]h)}(hfunction to write a characterh]hfunction to write a character}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjtCubeh}(h]h ]h"]h$]h&]uh1jhjChMhjBubj)}(h4``tx_done`` function to call after the loop is done h](j)}(h ``tx_done``h]j)}(hjCh]htx_done}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjCubj )}(hhh]h)}(h'function to call after the loop is doneh]h'function to call after the loop is done}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMhjBubeh}(h]h ]h"]h$]h&]uh1jhjqBubh)}(h**Description**h]j)}(hjCh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjqBubh)}(hThis helper transmits characters from the xmit buffer to the hardware using **put_char\(\)**. It does so until **count** characters are sent and while **tx_ready** evaluates to true.h](hLThis helper transmits characters from the xmit buffer to the hardware using }(hjDhhhNhNubj)}(h**put_char\(\)**h]h put_char()}(hj DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh. It does so until }(hjDhhhNhNubj)}(h **count**h]hcount}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh characters are sent and while }(hjDhhhNhNubj)}(h **tx_ready**h]htx_ready}(hj0DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh evaluates to true.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjqBubj)}(hhh]j)}(hXThe expression in macro parameters shall be designed as follows: * **tx_ready:** should evaluate to true if the HW can accept more data to be sent. This parameter can be ``true``, which means the HW is always ready. * **put_char:** shall write **ch** to the device of **port**. * **tx_done:** when the write loop is done, this can perform arbitrary action before potential invocation of ops->stop_tx() happens. If the driver does not need to do anything, use e.g. ({}). h](j)}(h@The expression in macro parameters shall be designed as follows:h]h@The expression in macro parameters shall be designed as follows:}(hjPDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjLDubj )}(hhh]j[)}(hhh](j`)}(h**tx_ready:** should evaluate to true if the HW can accept more data to be sent. This parameter can be ``true``, which means the HW is always ready.h]h)}(h**tx_ready:** should evaluate to true if the HW can accept more data to be sent. This parameter can be ``true``, which means the HW is always ready.h](j)}(h **tx_ready:**h]h tx_ready:}(hjmDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiDubhZ should evaluate to true if the HW can accept more data to be sent. This parameter can be }(hjiDhhhNhNubj)}(h``true``h]htrue}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiDubh%, which means the HW is always ready.}(hjiDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjeDubah}(h]h ]h"]h$]h&]uh1j_hjbDubj`)}(h;**put_char:** shall write **ch** to the device of **port**.h]h)}(hjDh](j)}(h **put_char:**h]h put_char:}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh shall write }(hjDhhhNhNubj)}(h**ch**h]hch}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh to the device of }(hjDhhhNhNubj)}(h**port**h]hport}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjDubah}(h]h ]h"]h$]h&]uh1j_hjbDubj`)}(h**tx_done:** when the write loop is done, this can perform arbitrary action before potential invocation of ops->stop_tx() happens. If the driver does not need to do anything, use e.g. ({}). h]h)}(h**tx_done:** when the write loop is done, this can perform arbitrary action before potential invocation of ops->stop_tx() happens. If the driver does not need to do anything, use e.g. ({}).h](j)}(h **tx_done:**h]htx_done:}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh when the write loop is done, this can perform arbitrary action before potential invocation of ops->stop_tx() happens. If the driver does not need to do anything, use e.g. ({}).}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjDubah}(h]h ]h"]h$]h&]uh1j_hjbDubeh}(h]h ]h"]h$]h&]jjuh1jZhjDhMhj_Dubah}(h]h ]h"]h$]h&]uh1jhjLDubeh}(h]h ]h"]h$]h&]uh1jhj^DhMhjIDubah}(h]h ]h"]h$]h&]uh1jhjqBubh)}(hlFor all of them, **port->lock** is held, interrupts are locally disabled and the expressions must not sleep.h](hFor all of them, }(hj'EhhhNhNubj)}(h**port->lock**h]h port->lock}(hj/EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'EubhM is held, interrupts are locally disabled and the expressions must not sleep.}(hj'EhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjqBubh)}(h **Return**h]j)}(hjJEh]hReturn}(hjLEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHEubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjqBubh)}(h6the number of characters in the xmit buffer when done.h]h6the number of characters in the xmit buffer when done.}(hj`EhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjqBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_port_tx (C macro)c.uart_port_txhNtauh1jhjMhhhNhNubj)}(hhh](j)}(h uart_port_txh]j)}(h uart_port_txh]j$)}(h uart_port_txh]j*)}(hjEh]h uart_port_tx}(hjEhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjEubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hjEhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMubah}(h]h ]h"]h$]h&]jjjGuh1jjHjIhjEhhhjEhMubah}(h]jEah ](jMjNeh"]h$]h&]jRjS)jThuh1jhjEhMhjEhhubjV)}(hhh]h}(h]h ]h"]h$]h&]uh1jUhjEhhhjEhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjEjjEjjjuh1jhhhjMhNhNubh)}(h/``uart_port_tx (port, ch, tx_ready, put_char)``h]j)}(hjEh]h+uart_port_tx (port, ch, tx_ready, put_char)}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjMhhubj )}(h - transmit helper for uart_port h]j[)}(hhh]j`)}(htransmit helper for uart_port h]h)}(htransmit helper for uart_porth]htransmit helper for uart_port}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjEubah}(h]h ]h"]h$]h&]uh1j_hjEubah}(h]h ]h"]h$]h&]jjuh1jZhjEhMhjEubah}(h]h ]h"]h$]h&]uh1j hjEhMhjMhhubj)}(hX**Parameters** ``port`` uart port ``ch`` variable to store a character to be written to the HW ``tx_ready`` can HW accept more data function ``put_char`` function to write a character **Description** See uart_port_tx_limited() for more details.h](h)}(h**Parameters**h]j)}(hj Fh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Fubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjFubj)}(hhh](j)}(h``port`` uart port h](j)}(h``port``h]j)}(hj,Fh]hport}(hj.FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Fubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhj&Fubj )}(hhh]h)}(h uart porth]h uart port}(hjEFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAFhMhjBFubah}(h]h ]h"]h$]h&]uh1jhj&Fubeh}(h]h ]h"]h$]h&]uh1jhjAFhMhj#Fubj)}(h=``ch`` variable to store a character to be written to the HW h](j)}(h``ch``h]j)}(hjeFh]hch}(hjgFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcFubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhj_Fubj )}(hhh]h)}(h5variable to store a character to be written to the HWh]h5variable to store a character to be written to the HW}(hj~FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzFhMhj{Fubah}(h]h ]h"]h$]h&]uh1jhj_Fubeh}(h]h ]h"]h$]h&]uh1jhjzFhMhj#Fubj)}(h.``tx_ready`` can HW accept more data function h](j)}(h ``tx_ready``h]j)}(hjFh]htx_ready}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjFubj )}(hhh]h)}(h can HW accept more data functionh]h can HW accept more data function}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhj#Fubj)}(h+``put_char`` function to write a character h](j)}(h ``put_char``h]j)}(hjFh]hput_char}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjFubj )}(hhh]h)}(hfunction to write a characterh]hfunction to write a character}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhj#Fubeh}(h]h ]h"]h$]h&]uh1jhjFubh)}(h**Description**h]j)}(hjGh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjFubh)}(h,See uart_port_tx_limited() for more details.h]h,See uart_port_tx_limited() for more details.}(hj(GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjMhhhNhNubeh}(h]other-functionsah ]h"]other functionsah$]h&]uh1hhhhhhhhKEubh)}(hhh](h)}(h Other notesh]h Other notes}(hjIGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFGhhhhhKTubh)}(hX(It is intended some day to drop the 'unused' entries from uart_port, and allow low level drivers to register their own individual uart_port's with the core. This will allow drivers to use uart_port as a pointer to a structure containing both the uart_port entry with their own extensions, thus::h]hX-It is intended some day to drop the ‘unused’ entries from uart_port, and allow low level drivers to register their own individual uart_port’s with the core. This will allow drivers to use uart_port as a pointer to a structure containing both the uart_port entry with their own extensions, thus:}(hjWGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhjFGhhubj)}(hcstruct my_port { struct uart_port port; int my_stuff; };h]hcstruct my_port { struct uart_port port; int my_stuff; };}hjeGsbah}(h]h ]h"]h$]h&]jjuh1jhhhK\hjFGhhubeh}(h] other-notesah ]h"] other notesah$]h&]uh1hhhhhhhhKTubh)}(hhh](h)}(hModem control lines via GPIOh]hModem control lines via GPIO}(hj~GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{GhhhhhKbubh)}(hKSome helpers are provided in order to set/get modem control lines via GPIO.h]hKSome helpers are provided in order to set/get modem control lines via GPIO.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKdhj{Ghhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jmctrl_gpio_set (C function)c.mctrl_gpio_sethNtauh1jhj{GhhhNhNubj)}(hhh](j)}(hCvoid mctrl_gpio_set (struct mctrl_gpios *gpios, unsigned int mctrl)h]j)}(hBvoid mctrl_gpio_set(struct mctrl_gpios *gpios, unsigned int mctrl)h](jx)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjGhhhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chK.ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjGhK.ubj$)}(hmctrl_gpio_seth]j*)}(hmctrl_gpio_seth]hmctrl_gpio_set}(hjGhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjGubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hjGhhhjGhK.ubj)}(h/(struct mctrl_gpios *gpios, unsigned int mctrl)h](j)}(hstruct mctrl_gpios *gpiosh](j)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(hhh]j*)}(h mctrl_gpiosh]h mctrl_gpios}(hjHhhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hj Hubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j)}jjGsbc.mctrl_gpio_setasbuh1hhjGubj)}(h h]h }(hj.HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hjh]h*}(hjIh]hunsigned int mctrl}(hj@IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKh]h Parameters}(hj@KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNh]h Description}(hj@NhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvoid mctrl_gpio_disable_ms_no_sync (struct mctrl_gpios *gpios)h]j)}(h=void mctrl_gpio_disable_ms_no_sync(struct mctrl_gpios *gpios)h](jx)}(hvoidh]hvoid}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjShhhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMNubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShMNubj$)}(hmctrl_gpio_disable_ms_no_synch]j*)}(hmctrl_gpio_disable_ms_no_synch]hmctrl_gpio_disable_ms_no_sync}(hjShhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjSubah}(h]h ](j<j=eh"]h$]h&]jjuh1j#hjShhhjShMNubj)}(h(struct mctrl_gpios *gpios)h]j)}(hstruct mctrl_gpios *gpiosh](j)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubh)}(hhh]j*)}(h mctrl_gpiosh]h mctrl_gpios}(hjThhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]j)}jjSsbc.mctrl_gpio_disable_ms_no_syncasbuh1hhjSubj)}(h h]h }(hj ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hjh]h*}(hj.ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj*)}(hgpiosh]hgpios}(hj;ThhhNhNubah}(h]h ]j5ah"]h$]h&]uh1j)hjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubah}(h]h ]h"]h$]h&]jjuh1jhjShhhjShMNubeh}(h]h ]h"]h$]h&]jjjGuh1jjHjIhjShhhjShMNubah}(h]jSah ](jMjNeh"]h$]h&]jRjS)jThuh1jhjShMNhjShhubjV)}(hhh]h)}(hLdisable irqs and handling of changes to the ms lines, and return immediatelyh]hLdisable irqs and handling of changes to the ms lines, and return immediately}(hjeThhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMNhjbThhubah}(h]h ]h"]h$]h&]uh1jUhjShhhjShMNubeh}(h]h ](jfunctioneh"]h$]h&]jjjj}Tjj}Tjjjuh1jhhhj{GhNhNubj)}(h@**Parameters** ``struct mctrl_gpios *gpios`` gpios to disableh](h)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMRhjTubj)}(hhh]j)}(h.``struct mctrl_gpios *gpios`` gpios to disableh](j)}(h``struct mctrl_gpios *gpios``h]j)}(hjTh]hstruct mctrl_gpios *gpios}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMThjTubj )}(hhh]h)}(hgpios to disableh]hgpios to disable}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMPhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThMThjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{GhhhNhNubeh}(h]modem-control-lines-via-gpioah ]h"]modem control lines via gpioah$]h&]uh1hhhhhhhhKbubeh}(h]low-level-serial-apiah ]h"]low level serial apiah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksjfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjUerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehʌ _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jTjTj#j jXjUjjjJjGjCGj@GjxGjuGjTjTu nametypes}(jTj#jXjjJjCGjxGjTuh}(jThj hjUj&jj[jGjjjj@GjMjjjojj$jjj!j!j#j#j&j&jH*jM*j.j.j1j1j5j5j7j7jD9jI9j;j;j=j=j?j?jAjAjEjEjuGjFGjTj{GjGjGjIjIj LjLjvNj{NjPjPj=RjBRjSjSu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.