sphinx.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]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}(hhhhhNhNubah}(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.}(hhhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(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()).}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(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.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]console-supportah ]h"]console supportah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hLockingh]hLocking}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhhhhhK%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.)}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjGhhubh)}(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.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjGhhubh)}(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:}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hjGhhubh 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:spacepreserveuh1jhhhK0hjGhhubh)}(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&]uh1hhhhK5hjGhhubh)}(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&]uh1hhhhK8hjGhhubeh}(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}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]jjuh1jhjhhhjhKubeh}(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)}(hjOh]h,interface between serial_core and the driver}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK%hjMubah}(h]h ]h"]h$]h&]uh1jKhjHhhhj^hNubah}(h]h ]h"]h$]h&]bullet-uh1jFhj^hK%hjChhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](cstructeh"]h$]h&]domainjvobjtypejwdesctypejwnoindex 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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjhK+hjubah}(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)}(hj"h]h set_mctrl}(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.hhK6hjubj)}(hhh]h)}(h7``void ()(struct uart_port *port, unsigned int mctrl)``h]j)}(hj=h]h3void ()(struct uart_port *port, unsigned int mctrl)}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhj7hK6hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hK6hjubj)}(h:``get_mctrl`` ``unsigned int ()(struct uart_port *port)`` h](j)}(h ``get_mctrl``h]j)}(hjdh]h get_mctrl}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKIhj^ubj)}(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&]uh1hhjyhKIhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhKIhjubj)}(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.hhKqhj$ubj)}(hhh]h)}(h#``void ()(struct uart_port *port)``h]j)}(hjEh]hvoid ()(struct uart_port *port)}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhj?hKqhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hKqhjubj)}(h3``unthrottle`` ``void ()(struct uart_port *port)`` h](j)}(h``unthrottle``h]j)}(hjlh]h unthrottle}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK{hjfubj)}(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&]uh1jhjfubeh}(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)}(hj h]hvoid ()(struct uart_port *port)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(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)}(hj2h]hstart_rx}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(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)}(hjMh]hvoid ()(struct uart_port *port)}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhjGhKhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhKhjubj)}(h2``enable_ms`` ``void ()(struct uart_port *port)`` h](j)}(h ``enable_ms``h]j)}(hjth]h enable_ms}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjnubj)}(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&]uh1jhjnubeh}(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)}(hjh]hstartup}(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"``int ()(struct uart_port *port)``h]j)}(hjh]hint ()(struct uart_port *port)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj hKhjubah}(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)}(hj:h]hshutdown}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhj4ubj)}(hhh]h)}(h#``void ()(struct uart_port *port)``h]j)}(hjUh]hvoid ()(struct uart_port *port)}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhjOhKhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhKhjubj)}(h5``flush_buffer`` ``void ()(struct uart_port *port)`` h](j)}(h``flush_buffer``h]j)}(hj|h]h flush_buffer}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjvubj)}(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&]uh1jhjvubeh}(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)}(hjh]h9void ()(struct uart_port *port, struct ktermios *termios)}(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)}(hV``pm`` ``void ()(struct uart_port *port, unsigned int state, unsigned int oldstate)`` h](j)}(h``pm``h]j)}(hjCh]hpm}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMhj=ubj)}(hhh]h)}(hN``void ()(struct uart_port *port, unsigned int state, unsigned int oldstate)``h]j)}(hj^h]hJvoid ()(struct uart_port *port, unsigned int state, unsigned int oldstate)}(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.hhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjubj)}(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)}(hj h]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)}(hj%h]hint ()(struct uart_port *port)}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhjhM1hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjubj)}(h>``config_port`` ``void ()(struct uart_port *port, int type)`` h](j)}(h``config_port``h]j)}(hjLh]h config_port}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhM:hjFubj)}(hhh]h)}(h-``void ()(struct uart_port *port, int type)``h]j)}(hjgh]h)void ()(struct uart_port *port, int type)}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhjahM:hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahM: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)}(hjh]hCint ()(struct uart_port *port, unsigned int cmd, unsigned long arg)}(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.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)}(hj/ h]hint ()(struct uart_port *port)}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj- 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)}(hjV h]h poll_put_char}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhMehjP ubj)}(hhh]h)}(h5``void ()(struct uart_port *port, unsigned char ch)``h]j)}(hjq h]h1void ()(struct uart_port *port, unsigned char ch)}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo ubah}(h]h ]h"]h$]h&]uh1hhjk hMehjl ubah}(h]h ]h"]h$]h&]uh1jhjP ubeh}(h]h ]h"]h$]h&]uh1jhjk 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}(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.hhK*hj ubh)}(hELocking: none. Interrupts: caller dependent. This call must not sleeph]hELocking: none. Interrupts: caller dependent. This call must not sleep}(hjT 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 }(hjc hhhNhNubj)}(h**port**h]hport}(hjk hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc ubh to the state described by }(hjc hhhNhNubj)}(h **mctrl**h]hmctrl}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc ubh. The relevant bits of }(hjc hhhNhNubj)}(h **mctrl**h]hmctrl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc ubh are:}(hjc 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]jG)}(hhh](jL)}(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&]uh1jKhj ubjL)}(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&]uh1jKhj ubjL)}(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&]uh1jKhj ubjL)}(h``TIOCM_OUT2`` OUT2 signal.h]h)}(hj# h](j)}(h``TIOCM_OUT2``h]h TIOCM_OUT2}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj% ubh OUT2 signal.}(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&]uh1jKhj ubjL)}(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}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK ubh# Set the port into loopback mode.}(hjK hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhK;hjG ubah}(h]h ]h"]h$]h&]uh1jKhj ubeh}(h]h ]h"]h$]h&]jkjluh1jFhj 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.}(hjz 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]jG)}(hhh](jL)}(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&]uh1jKhj ubjL)}(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&]uh1jKhj ubjL)}(h$``TIOCM_DSR`` state of DSR signalh]h)}(hj h](j)}(h ``TIOCM_DSR``h]h TIOCM_DSR}(hj% hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj" ubh state of DSR signal}(hj" hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKLhj ubah}(h]h ]h"]h$]h&]uh1jKhj ubjL)}(h$``TIOCM_RI`` state of RI signal h]h)}(h#``TIOCM_RI`` state of RI signalh](j)}(h ``TIOCM_RI``h]hTIOCM_RI}(hjL hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH ubh state of RI signal}(hjH hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKMhjD ubah}(h]h ]h"]h$]h&]uh1jKhj ubeh}(h]h ]h"]h$]h&]jkjluh1jFhj 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.}(hjw 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 }(hj7 hhhNhNubj)}(h**unthrottle\(\)**h]hunthrottle()}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7 ubh+ and termios modification by the tty layer.}(hj7 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.}(hjX 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.}(hjg 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 }(hjv hhhNhNubj)}(h**throttle\(\)**h]h throttle()}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv ubh+ and termios modification by the tty layer.}(hjv 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}(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.hhKhj ubh)}(hJStop receiving characters; the **port** is in the process of being closed.h](hStop receiving characters; the }(hjhhhNhNubj)}(h**port**h]hport}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# is in the process of being closed.}(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: }(hj9hhhNhNubj)}(h**port->lock**h]h port->lock}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh> taken. Interrupts: locally disabled. This call must not sleep}(hj9hhhNhNubeh}(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.}(hjZhhhNhNubah}(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 }(hjihhhNhNubj)}(h**shutdown\(\)**h]h shutdown()}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh method is called.}(hjihhhNhNubeh}(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()}(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)}(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.}(hjhhhNhNubah}(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.}(hjhhhNhNubah}(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}(hj4hhhNhNubah}(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()}(hjFhhhNhNubah}(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 }(hj_hhhNhNubj)}(h**port->state**h]h port->state}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh once this call has completed.}(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)}(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}(hj hhhNhNubah}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**port->ignore_status_mask**h]hport->ignore_status_mask}(hj-hhhNhNubah}(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 ubjG)}(hhh](jL)}(h``CSIZE`` - word sizeh]h)}(hjKh](j)}(h ``CSIZE``h]hCSIZE}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh - word size}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjIubah}(h]h ]h"]h$]h&]uh1jKhjFubjL)}(h``CSTOPB`` - 2 stop bitsh]h)}(hjqh](j)}(h ``CSTOPB``h]hCSTOPB}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh - 2 stop bits}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjoubah}(h]h ]h"]h$]h&]uh1jKhjFubjL)}(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&]uh1jKhjFubjL)}(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&]uh1jKhjFubjL)}(hD``ADDRB`` - address bit (changed through uart_port::rs485_config()).h]h)}(hjh](j)}(h ``ADDRB``h]hADDRB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh; - address bit (changed through uart_port::rs485_config()).}(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&]uh1jKhjFubjL)}(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}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhl - enable reception of characters (if not set, still receive characters from the port, but throw them away).}(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&]uh1jKhjFubjL)}(h9``CRTSCTS`` - if set, enable CTS status change reporting.h]h)}(hjBh](j)}(h ``CRTSCTS``h]hCRTSCTS}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh. - if set, enable CTS status change reporting.}(hjDhhhNhNubeh}(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&]uh1jKhjFubjL)}(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}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh4 - if not set, enable modem status change reporting.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjfubah}(h]h ]h"]h$]h&]uh1jKhjFubeh}(h]h ]h"]h$]h&]jkjluh1jFhjhhKhj 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 ubjG)}(hhh](jL)}(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&]uh1jKhjubjL)}(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&]uh1jKhjubjL)}(h.``IGNPAR`` - ignore parity and framing errors.h]h)}(hjh](j)}(h ``IGNPAR``h]hIGNPAR}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh$ - ignore parity and framing errors.}(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&]uh1jKhjubjL)}(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}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh - ignore break errors. If }(hj/hhhNhNubj)}(h ``IGNPAR``h]hIGNPAR}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh, is also set, ignore overrun errors as well.}(hj/hhhNhNubeh}(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&]uh1jKhjubeh}(h]h ]h"]h$]h&]jkjluh1jFhjhKhj 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):}(hjjhhhNhNubah}(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}(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)}(h0h]h0}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hKhj4ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hn/ah]hn/a}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hKhjKubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h,character received, marked as ``TTY_NORMAL``h](hcharacter received, marked as }(hjehhhNhNubj)}(h``TTY_NORMAL``h]h TTY_NORMAL}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1hhj-hKhjbubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(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&]uh1jhjubj)}(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)}(hj9h]h0}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhj2ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h,character received, marked as ``TTY_PARITY``h](hcharacter received, marked as }(hjKhhhNhNubj)}(h``TTY_PARITY``h]h TTY_PARITY}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1hhjhKhjHubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hYesh]hYes}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:65: ./include/linux/serial_core.hhKhjvubah}(h]h ]h"]h$]h&]uh1jhjsubj)}(hhh]h)}(hjh]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjsubj)}(hhh]h)}(hjh]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjsubj)}(hhh]h)}(hcharacter discardedh]hcharacter discarded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1j~hj{ubah}(h]h ]h"]h$]h&]uh1jyhj 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}(hjhhhNhNubah}(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}(hjhhhNhNubah}(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}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh. }(hj&hhhNhNubj)}(h **state**h]hstate}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh: indicates the new state (defined by enum uart_pm_state), }(hj&hhhNhNubj)}(h **oldstate**h]holdstate}(hjRhhhNhNubah}(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.}(hjkhhhNhNubah}(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 }(hjzhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh9 is initially opened and finally closed, except when the }(hjzhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh5 is also the system console. This will occur even if }(hjzhhhNhNubj)}(h ``CONFIG_PM``h]h CONFIG_PM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh is not set.}(hjzhhhNhNubeh}(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 }(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.hhMhj ubh)}(h,Locking: none. Interrupts: caller dependent.h]h,Locking: none. Interrupts: caller dependent.}(hj1hhhNhNubah}(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 -}(hj@hhhNhNubj)}(h ``EBUSY``h]hEBUSY}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh on failure.}(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.}(hjahhhNhNubah}(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 }(hjphhhNhNubj)}(h**port**h]hport}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh. }(hjphhhNhNubj)}(h**type**h]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh4 contains a bit mask of the required configuration. }(hjphhhNhNubj)}(h``UART_CONFIG_TYPE``h]hUART_CONFIG_TYPE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh@ indicates that the port requires detection and identification. }(hjphhhNhNubj)}(h**port->type**h]h port->type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh% should be set to the type found, or }(hjphhhNhNubj)}(h``PORT_UNKNOWN``h]h PORT_UNKNOWN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh if no port was detected.}(hjphhhNhNubeh}(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.}(hjhhhNhNubah}(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 .}(hj5hhhNhNubah}(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.}(hjDhhhNhNubah}(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 }(hjShhhNhNubj)}(h**poll_put_char\(\)**h]hpoll_put_char()}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh and }(hjShhhNhNubj)}(h**poll_get_char\(\)**h]hpoll_get_char()}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh . Unlike }(hjShhhNhNubj)}(h**startup\(\)**h]h startup()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh%, this should not request interrupts.}(hjShhhNhNubeh}(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}(hjhhhNhNubah}(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 hjS hK*hjhhubeh}(h]uart-opsah ]h"]uart_opsah$]h&]uh1hhhhhhhhK?ubh)}(hhh](h)}(hOther functionsh]hOther functions}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hhhhhKEubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_write_wakeup (C function)c.uart_write_wakeuphNtauh1jhj9hhhNhNubj)}(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}(hjehhhNhNubah}(h]h ]ktah"]h$]h&]uh1jchj_hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chKgubj)}(h h]h }(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj_hhhjthKgubj)}(huart_write_wakeuph]j)}(huart_write_wakeuph]huart_write_wakeup}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj_hhhjthKgubhdesc_parameterlist)}(h(struct uart_port *port)h]hdesc_parameter)}(hstruct uart_port *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubh)}(hhh]j)}(h uart_porth]h uart_port}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjvreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jjsbc.uart_write_wakeupasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjubj)}(hporth]hport}(hj hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj_hhhjthKgubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj[hhhjthKgubah}(h]jVah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjthKghjXhhubjB)}(hhh]h)}(hschedule write processingh]hschedule write processing}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chKghj3hhubah}(h]h ]h"]h$]h&]uh1jAhjXhhhjthKgubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jNj}jNj~jjuh1jhhhj9hNhNubj)}(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)}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chKkhjRubj)}(hhh]j)}(h0``struct uart_port *port`` port to be processed h](j)}(h``struct uart_port *port``h]j)}(hjwh]hstruct uart_port *port}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chKhhjqubj)}(hhh]h)}(hport to be processedh]hport to be processed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhKhhjnubah}(h]h ]h"]h$]h&]uh1jhjRubh)}(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.chKjhjRubh)}(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.chKihjRubh)}(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.chKnhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j uart_update_timeout (C function)c.uart_update_timeouthNtauh1jhj9hhhNhNubj)}(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](jd)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMubj)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhj&hMubj)}(huart_update_timeouth]j)}(huart_update_timeouth]huart_update_timeout}(hj9hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj5ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjhhhj&hMubj)}(h?(struct uart_port *port, unsigned int cflag, unsigned int baud)h](j)}(hstruct uart_port *porth](j)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjQubh)}(hhh]j)}(h uart_porth]h uart_port}(hjshhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetjumodnameN classnameNjj)}j]j)}jj;sbc.uart_update_timeoutasbuh1hhjQubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubj)}(hunsigned int cflagh](jd)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjd)}(hinth]hint}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hcflagh]hcflag}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubj)}(hunsigned int baudh](jd)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjd)}(hinth]hint}(hj4hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubj)}(h h]h }(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hbaudh]hbaud}(hjPhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj&hMubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjhhhj&hMubah}(h]j ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj&hMhj hhubjB)}(hhh]h)}(h(update per-port frame timing informationh]h(update per-port frame timing information}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjwhhubah}(h]h ]h"]h$]h&]uh1jAhj hhhj&hMubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jj}jj~jjuh1jhhhj9hNhNubj)}(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}(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)}(htermios cflag valueh]htermios cflag value}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h(``unsigned int baud`` speed of the port 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.chMhj'ubj)}(hhh]h)}(hspeed of the porth]hspeed of the port}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(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 }(hj~hhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubhL frame timing information from which the FIFO timeout value is derived. The }(hj~hhhNhNubj)}(h **cflag**h]hcflag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh value should reflect the actual hardware settings as number of bits, parity, stop bits and baud rate is taken into account here.}(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)}(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&]uh1jhj9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_get_baud_rate (C function)c.uart_get_baud_ratehNtauh1jhj9hhhNhNubj)}(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](jd)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhjhMubjd)}(hinth]hint}(hj hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhjhMubj)}(huart_get_baud_rateh]j)}(huart_get_baud_rateh]huart_get_baud_rate}(hj+hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj'ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjhhhjhMubj)}(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}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h h]h }(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjCubh)}(hhh]j)}(h uart_porth]h uart_port}(hjehhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetjgmodnameN classnameNjj)}j]j)}jj-sbc.uart_get_baud_rateasbuh1hhjCubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjCubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubj)}(hstruct ktermios *termiosh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubh)}(hhh]j)}(hktermiosh]hktermios}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetjmodnameN classnameNjj)}j]jc.uart_get_baud_rateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htermiosh]htermios}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubj)}(hconst struct ktermios *oldh](j)}(hconsth]hconst}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj%ubj)}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj%ubh)}(hhh]j)}(hktermiosh]hktermios}(hjchhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetjemodnameN classnameNjj)}j]jc.uart_get_baud_rateasbuh1hhj%ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj%ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubj)}(hunsigned int minh](jd)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjd)}(hinth]hint}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hminh]hmin}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubj)}(hunsigned int maxh](jd)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjd)}(hinth]hint}(hj"hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hmaxh]hmax}(hj>hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjhMhjhhubjB)}(hhh]h)}(h&return baud rate for a particular porth]h&return baud rate for a particular port}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjehhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jj}jj~jjuh1jhhhj9hNhNubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h9``const struct ktermios *old`` old termios (or ``NULL``) h](j)}(h``const struct ktermios *old``h]j)}(hj h]hconst struct ktermios *old}(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)}(hold termios (or ``NULL``)h](hold termios (or }(hj4 hhhNhNubj)}(h``NULL``h]hNULL}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4 ubh)}(hj4 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0 hMhj1 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj0 hMhjubj)}(h2``unsigned int min`` minimum acceptable baud rate h](j)}(h``unsigned int min``h]j)}(hjf h]hunsigned int min}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd 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)}(hminimum acceptable baud rateh]hminimum 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{ 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 }(hj2!hhhNhNubj)}(h **termios**h]htermios}(hj:!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2!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”).}(hj2!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}(hjS!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&]uh1jhj9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_get_divisor (C function)c.uart_get_divisorhNtauh1jhj9hhhNhNubj)}(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](jd)}(hunsignedh]hunsigned}(hj!hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj~!hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM0ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj~!hhhj!hM0ubjd)}(hinth]hint}(hj!hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj~!hhhj!hM0ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj~!hhhj!hM0ubj)}(huart_get_divisorh]j)}(huart_get_divisorh]huart_get_divisor}(hj!hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj!ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj~!hhhj!hM0ubj)}(h+(struct uart_port *port, unsigned int baud)h](j)}(hstruct uart_port *porth](j)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj!ubh)}(hhh]j)}(h uart_porth]h uart_port}(hj!hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj!modnameN classnameNjj)}j]j)}jj!sbc.uart_get_divisorasbuh1hhj!ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj!ubj)}(hjh]h*}(hj'"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hporth]hport}(hj4"hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(hunsigned int baudh](jd)}(hunsignedh]hunsigned}(hjM"hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjI"ubj)}(h h]h }(hj["hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjI"ubjd)}(hinth]hint}(hji"hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjI"ubj)}(h h]h }(hjw"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjI"ubj)}(hbaudh]hbaud}(hj"hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjI"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubeh}(h]h ]h"]h$]h&]jjuh1jhj~!hhhj!hM0ubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjz!hhhj!hM0ubah}(h]ju!ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj!hM0hjw!hhubjB)}(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.chM0hj"hhubah}(h]h ]h"]h$]h&]uh1jAhjw!hhhj!hM0ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j"j}j"j~jjuh1jhhhj9hNhNubj)}(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.chM4hj"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.chM1hj"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#hM1hj#ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj#hM1hj"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.chM2hj##ubj)}(hhh]h)}(hdesired baud rateh]hdesired baud rate}(hjB#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>#hM2hj?#ubah}(h]h ]h"]h$]h&]uh1jhj##ubeh}(h]h ]h"]h$]h&]uh1jhj>#hM2hj"ubeh}(h]h ]h"]h$]h&]uh1jhj"ubh)}(h**Description**h]j)}(hjd#h]h Description}(hjf#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb#ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM4hj"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 }(hjz#hhhNhNubj)}(h**baud**h]hbaud}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz#ubh, appropriately rounded.}(hjz#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM3hj"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.chM6hj"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.chM9hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_get_lsr_info (C function)c.uart_get_lsr_infohNtauh1jhj9hhhNhNubj)}(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](jd)}(hinth]hint}(hj#hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj#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 ]j ah"]h$]h&]uh1jhj#hhhj#hM$ubj)}(huart_get_lsr_infoh]j)}(huart_get_lsr_infoh]huart_get_lsr_info}(hj#hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj#ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj#hhhj#hM$ubj)}(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 ]jah"]h$]h&]uh1jhj$ubj)}(h h]h }(hj#$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj4$hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj1$ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj6$modnameN classnameNjj)}j]j)}jj#sbc.uart_get_lsr_infoasbuh1hhj$ubj)}(h h]h }(hjT$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubj)}(hjh]h*}(hjb$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(httyh]htty}(hjo$hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(hstruct uart_state *stateh](j)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubh)}(hhh]j)}(h uart_stateh]h uart_state}(hj$hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj$modnameN classnameNjj)}j]jP$c.uart_get_lsr_infoasbuh1hhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hstateh]hstate}(hj$hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(hunsigned int __user *valueh](jd)}(hunsignedh]hunsigned}(hj$hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj$ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubjd)}(hinth]hint}(hj%hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj$ubj)}(h h]h }(hj"%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubh__user}(hj$hhhNhNubj)}(h h]h }(hj4%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubj)}(hjh]h*}(hjB%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hvalueh]hvalue}(hjO%hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubeh}(h]h ]h"]h$]h&]jjuh1jhj#hhhj#hM$ubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj#hhhj#hM$ubah}(h]j#ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj#hM$hj#hhubjB)}(hhh]h)}(hget line status register infoh]hget line status register info}(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%hhubah}(h]h ]h"]h$]h&]uh1jAhj#hhhj#hM$ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j%j}j%j~jjuh1jhhhj9hNhNubj)}(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.chM%hj%ubj)}(hhh]h)}(htty associated with the UARTh]htty associated with the UART}(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)}(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}(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)}(hreturned modem valueh]hreturned modem value}(hjE&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM'hjB&ubah}(h]h ]h"]h$]h&]uh1jhj&&ubeh}(h]h ]h"]h$]h&]uh1jhjA&hM(hj%ubeh}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_console_write (C function)c.uart_console_writehNtauh1jhj9hhhNhNubj)}(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](jd)}(hvoidh]hvoid}(hj&hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj&hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMBubj)}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&hhhj&hMBubj)}(huart_console_writeh]j)}(huart_console_writeh]huart_console_write}(hj&hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj&ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj&hhhj&hMBubj)}(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 ]jah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&ubh)}(hhh]j)}(h uart_porth]h uart_port}(hj&hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj&modnameN classnameNjj)}j]j)}jj&sbc.uart_console_writeasbuh1hhj&ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&ubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hporth]hport}(hj'hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(h const char *sh](j)}(hj+h]hconst}(hj5'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1'ubj)}(h h]h }(hjB'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj1'ubjd)}(hcharh]hchar}(hjP'hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj1'ubj)}(h h]h }(hj^'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj1'ubj)}(hjh]h*}(hjl'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1'ubj)}(hsh]hs}(hjy'hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj1'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(hunsigned int counth](jd)}(hunsignedh]hunsigned}(hj'hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubjd)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubj)}(hcounth]hcount}(hj'hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(h1void (*putchar)(struct uart_port*, unsigned char)h](jd)}(hvoidh]hvoid}(hj'hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]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 ]j!ah"]h$]h&]uh1jhj'ubj)}(h)h]h)}(hj((hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hj(h]h(}(hj6(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hjh]hstruct}(hjC(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hjP(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubh)}(hhh]j)}(h uart_porth]h uart_port}(hja(hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj^(ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetjc(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 ]j ah"]h$]h&]uh1jhj'ubjd)}(hunsignedh]hunsigned}(hj(hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj'ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubjd)}(hcharh]hchar}(hj(hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj'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&hMBubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj~&hhhj&hMBubah}(h]jy&ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj&hMBhj{&hhubjB)}(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.chMBhj(hhubah}(h]h ]h"]h$]h&]uh1jAhj{&hhhj&hMBubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j)j}j)j~jjuh1jhhhj9hNhNubj)}(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)}(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.chMFhj)ubj)}(hhh](j)}(h9``struct uart_port *port`` the port to write the message 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.chMChj6)ubj)}(hhh]h)}(hthe port to write the messageh]hthe port to write the message}(hjU)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ)hMChjR)ubah}(h]h ]h"]h$]h&]uh1jhj6)ubeh}(h]h ]h"]h$]h&]uh1jhjQ)hMChj3)ubj)}(h&``const char *s`` array of characters h](j)}(h``const char *s``h]j)}(hju)h]h const char *s}(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.chMDhjo)ubj)}(hhh]h)}(harray of charactersh]harray of characters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMDhj)ubah}(h]h ]h"]h$]h&]uh1jhjo)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMDhj3)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.chMEhj)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)hMEhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMEhj3)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.chMGhj)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.chMFhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMGhj3)ubeh}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j uart_parse_earlycon (C function)c.uart_parse_earlyconhNtauh1jhj9hhhNhNubj)}(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](jd)}(hinth]hint}(hjA*hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj=*hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMWubj)}(h h]h }(hjP*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj=*hhhjO*hMWubj)}(huart_parse_earlyconh]j)}(huart_parse_earlyconh]huart_parse_earlycon}(hjb*hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj^*ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj=*hhhjO*hMWubj)}(hJ(char *p, enum uart_iotype *iotype, resource_size_t *addr, char **options)h](j)}(hchar *ph](jd)}(hcharh]hchar}(hj~*hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjz*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjz*ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz*ubj)}(hjh]hp}(hj*hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjz*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjv*ubj)}(henum uart_iotype *iotypeh](j)}(henumh]henum}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj*ubh)}(hhh]j)}(h uart_iotypeh]h uart_iotype}(hj*hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj*modnameN classnameNjj)}j]j)}jjd*sbc.uart_parse_earlyconasbuh1hhj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj*ubj)}(hjh]h*}(hj +hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hiotypeh]hiotype}(hj+hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjv*ubj)}(hresource_size_t *addrh](h)}(hhh]j)}(hresource_size_th]hresource_size_t}(hj5+hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj2+ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj7+modnameN classnameNjj)}j]j*c.uart_parse_earlyconasbuh1hhj.+ubj)}(h h]h }(hjS+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.+ubj)}(hjh]h*}(hja+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.+ubj)}(haddrh]haddr}(hjn+hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj.+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjv*ubj)}(hchar **optionsh](jd)}(hcharh]hchar}(hj+hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]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 ]j!ah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjv*ubeh}(h]h ]h"]h$]h&]jjuh1jhj=*hhhjO*hMWubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj9*hhhjO*hMWubah}(h]j4*ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjO*hMWhj6*hhubjB)}(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.chMWhj+hhubah}(h]h ]h"]h$]h&]uh1jAhj6*hhhjO*hMWubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j+j}j+j~jjuh1jhhhj9hNhNubj)}(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.chMXhj",ubj)}(hhh]h)}(h-ptr to 2nd field (ie., just beyond ',')h]h1ptr to 2nd field (ie., just beyond ‘,’)}(hjA,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=,hMXhj>,ubah}(h]h ]h"]h$]h&]uh1jhj",ubeh}(h]h ]h"]h$]h&]uh1jhj=,hMXhj,ubj)}(h:``enum uart_iotype *iotype`` ptr for decoded iotype (out) h](j)}(h``enum uart_iotype *iotype``h]j)}(hja,h]henum uart_iotype *iotype}(hjc,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.chMYhj[,ubj)}(hhh]h)}(hptr for decoded iotype (out)h]hptr for decoded iotype (out)}(hjz,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjv,hMYhjw,ubah}(h]h ]h"]h$]h&]uh1jhj[,ubeh}(h]h ]h"]h$]h&]uh1jhjv,hMYhj,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.chMZhj,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,hMZhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMZhj,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[hj,ubeh}(h]h ]h"]h$]h&]uh1jhj,ubh)}(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.chM]hj,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)}(hjT-h]hLearlycon=,io|mmio|mmio16|mmio32|mmio32be|mmio32native,,}(hjV-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM]hjR-ubah}(h]h ]h"]h$]h&]uh1jKhjO-ubjL)}(hLconsole=,io|mmio|mmio16|mmio32|mmio32be|mmio32native,, h]h)}(hKconsole=,io|mmio|mmio16|mmio32|mmio32be|mmio32native,,h]hKconsole=,io|mmio|mmio16|mmio32|mmio32be|mmio32native,,}(hjn-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjK-hM^hjj-ubah}(h]h ]h"]h$]h&]uh1jKhjO-ubeh}(h]h ]h"]h$]h&]jkjuh1jFhjc-hM]hjL-ubah}(h]h ]h"]h$]h&]uh1jhj9-ubeh}(h]h ]h"]h$]h&]uh1jhjK-hM^hj6-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.chMbhj-ubj)}(hhh]jG)}(hhh](jL)}(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.chMahj-ubah}(h]h ]h"]h$]h&]uh1jKhj-ubjL)}(h"console=,0x, h]h)}(h!console=,0x,h]h!console=,0x,}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMbhj-ubah}(h]h ]h"]h$]h&]uh1jKhj-ubeh}(h]h ]h"]h$]h&]jkjuh1jFhj-hMahj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMbhj6-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.chMdhj,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.chMfhj,ubh)}(h&0 on success or -``EINVAL`` on failureh](h0 on success or -}(hj@.hhhNhNubj)}(h ``EINVAL``h]hEINVAL}(hjH.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@.ubh on failure}(hj@.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMghj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_parse_options (C function)c.uart_parse_optionshNtauh1jhj9hhhNhNubj)}(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](jd)}(hvoidh]hvoid}(hj.hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj}.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 ]j ah"]h$]h&]uh1jhj}.hhhj.hMubj)}(huart_parse_optionsh]j)}(huart_parse_optionsh]huart_parse_options}(hj.hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj.ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj}.hhhj.hMubj)}(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 ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubjd)}(hcharh]hchar}(hj.hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hoptionsh]hoptions}(hj/hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(h int *baudh](jd)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj/ubj)}(h h]h }(hj)/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj/ubj)}(hjh]h*}(hj7/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hbaudh]hbaud}(hjD/hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(h int *parityh](jd)}(hinth]hint}(hj]/hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjY/ubj)}(h h]h }(hjk/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjY/ubj)}(hjh]h*}(hjy/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY/ubj)}(hparityh]hparity}(hj/hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjY/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(h int *bitsh](jd)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj/ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hbitsh]hbits}(hj/hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(h int *flowh](jd)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj/ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hflowh]hflow}(hj 0hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubeh}(h]h ]h"]h$]h&]jjuh1jhj}.hhhj.hMubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjy.hhhj.hMubah}(h]jt.ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj.hMhjv.hhubjB)}(hhh]h)}(h0Parse serial port baud/parity/bits/flow control.h]h0Parse serial port baud/parity/bits/flow control.}(hj40hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj10hhubah}(h]h ]h"]h$]h&]uh1jAhjv.hhhj.hMubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jL0j}jL0j~jjuh1jhhhj9hNhNubj)}(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)}(hjV0h]h Parameters}(hjX0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT0ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjP0ubj)}(hhh](j)}(h1``const char *options`` pointer to option string h](j)}(h``const char *options``h]j)}(hju0h]hconst char *options}(hjw0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs0ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjo0ubj)}(hhh]h)}(hpointer to option stringh]hpointer to option string}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjo0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjl0ubj)}(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.chMhj0ubj)}(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&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjl0ubj)}(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.chMhj0ubj)}(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&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjl0ubj)}(hH``int *bits`` pointer to an 'int' variable for the number of data bits. h](j)}(h ``int *bits``h]j)}(hj 1h]h int *bits}(hj"1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj1ubj)}(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.}(hj91hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj51hMhj61ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj51hMhjl0ubj)}(hK``int *flow`` pointer to an 'int' variable for the flow control character. h](j)}(h ``int *flow``h]j)}(hjY1h]h int *flow}(hj[1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW1ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjS1ubj)}(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.chMhjP0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_set_options (C function)c.uart_set_optionshNtauh1jhj9hhhNhNubj)}(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](jd)}(hinth]hint}(hj1hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj1hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMubj)}(h h]h }(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj1hhhj1hMubj)}(huart_set_optionsh]j)}(huart_set_optionsh]huart_set_options}(hj1hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj1ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj1hhhj1hMubj)}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hj#2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2ubh)}(hhh]j)}(h uart_porth]h uart_port}(hj42hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj12ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj62modnameN classnameNjj)}j]j)}jj1sbc.uart_set_optionsasbuh1hhj2ubj)}(h h]h }(hjT2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2ubj)}(hjh]h*}(hjb2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hporth]hport}(hjo2hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(hstruct console *coh](j)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2ubh)}(hhh]j)}(hconsoleh]hconsole}(hj2hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj2modnameN classnameNjj)}j]jP2c.uart_set_optionsasbuh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hcoh]hco}(hj2hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(hint baudh](jd)}(hinth]hint}(hj2hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj2ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2ubj)}(hbaudh]hbaud}(hj3hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(h int parityh](jd)}(hinth]hint}(hj-3hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj)3ubj)}(h h]h }(hj;3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)3ubj)}(hparityh]hparity}(hjI3hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj)3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(hint bitsh](jd)}(hinth]hint}(hjb3hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj^3ubj)}(h h]h }(hjp3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj^3ubj)}(hbitsh]hbits}(hj~3hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj^3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(hint flowh](jd)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj3ubj)}(hflowh]hflow}(hj3hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubeh}(h]h ]h"]h$]h&]jjuh1jhj1hhhj1hMubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj1hhhj1hMubah}(h]j1ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj1hMhj1hhubjB)}(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&]uh1jAhj1hhhj1hMubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j3j}j3j~jjuh1jhhhj9hNhNubj)}(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)}(hj3h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj3ubj)}(hhh](j)}(hK``struct uart_port *port`` pointer to the serial ports uart_port structure h](j)}(h``struct uart_port *port``h]j)}(hj4h]hstruct uart_port *port}(hj 4hhhNhNubah}(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/pointer to the serial ports uart_port structureh]h/pointer to the serial ports uart_port structure}(hj74hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj34hMhj44ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj34hMhj4ubj)}(h'``struct console *co`` console pointer h](j)}(h``struct console *co``h]j)}(hjW4h]hstruct console *co}(hjY4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU4ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhjQ4ubj)}(hhh]h)}(hconsole pointerh]hconsole pointer}(hjp4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl4hMhjm4ubah}(h]h ]h"]h$]h&]uh1jhjQ4ubeh}(h]h ]h"]h$]h&]uh1jhjl4hMhj4ubj)}(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&]uh1jhj4hMhj4ubj)}(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&]uh1jhj4hMhj4ubj)}(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.chMhj4ubj)}(hhh]h)}(hnumber of data bitsh]hnumber of data bits}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj4ubj)}(h0``int flow`` flow control character - 'r' (rts) h](j)}(h ``int flow``h]j)}(hj;5h]hint flow}(hj=5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj95ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj55ubj)}(hhh]h)}(h"flow control character - 'r' (rts)h]h&flow control character - ‘r’ (rts)}(hjT5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjP5hMhjQ5ubah}(h]h ]h"]h$]h&]uh1jhj55ubeh}(h]h ]h"]h$]h&]uh1jhjP5hMhj4ubeh}(h]h ]h"]h$]h&]uh1jhj3ubh)}(h**Description**h]j)}(hjv5h]h Description}(hjx5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt5ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMhj3ubh)}(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.chMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!uart_register_driver (C function)c.uart_register_driverhNtauh1jhj9hhhNhNubj)}(hhh](j)}(h2int uart_register_driver (struct uart_driver *drv)h]j)}(h1int uart_register_driver(struct uart_driver *drv)h](jd)}(hinth]hint}(hj5hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj5hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj5hhhj5hM ubj)}(huart_register_driverh]j)}(huart_register_driverh]huart_register_driver}(hj5hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj5ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj5hhhj5hM ubj)}(h(struct uart_driver *drv)h]j)}(hstruct uart_driver *drvh](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj5ubh)}(hhh]j)}(h uart_driverh]h uart_driver}(hj6hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj6modnameN classnameNjj)}j]j)}jj5sbc.uart_register_driverasbuh1hhj5ubj)}(h h]h }(hj66hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj5ubj)}(hjh]h*}(hjD6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hdrvh]hdrv}(hjQ6hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubah}(h]h ]h"]h$]h&]jjuh1jhj5hhhj5hM ubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj5hhhj5hM ubah}(h]j5ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj5hM hj5hhubjB)}(hhh]h)}(h*register a driver with the uart core layerh]h*register a driver with the uart core layer}(hj{6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hjx6hhubah}(h]h ]h"]h$]h&]uh1jAhj5hhhj5hM ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j6j}j6j~jjuh1jhhhj9hNhNubj)}(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)}(hj6h]h Description}(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 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.}(hj7hhhNhNubah}(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}(hj/7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+7ubh should be }(hj+7hhhNhNubj)}(h``NULL``h]hNULL}(hjA7hhhNhNubah}(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}(hjZ7hhhNhNubah}(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&]uh1jhj9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#uart_unregister_driver (C function)c.uart_unregister_driverhNtauh1jhj9hhhNhNubj)}(hhh](j)}(h5void uart_unregister_driver (struct uart_driver *drv)h]j)}(h4void uart_unregister_driver(struct uart_driver *drv)h](jd)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj7hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7hhhj7hM ubj)}(huart_unregister_driverh]j)}(huart_unregister_driverh]huart_unregister_driver}(hj7hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj7ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj7hhhj7hM ubj)}(h(struct uart_driver *drv)h]j)}(hstruct uart_driver *drvh](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7ubh)}(hhh]j)}(h uart_driverh]h uart_driver}(hj7hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj7modnameN classnameNjj)}j]j)}jj7sbc.uart_unregister_driverasbuh1hhj7ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hdrvh]hdrv}(hj8hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubah}(h]h ]h"]h$]h&]jjuh1jhj7hhhj7hM ubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj7hhhj7hM ubah}(h]j|7ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj7hM hj~7hhubjB)}(hhh]h)}(h(remove a driver from the uart core layerh]h(remove a driver from the uart core layer}(hjI8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hjF8hhubah}(h]h ]h"]h$]h&]uh1jAhj~7hhhj7hM ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|ja8j}ja8j~jjuh1jhhhj9hNhNubj)}(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)}(hjk8h]h Parameters}(hjm8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji8ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hje8ubj)}(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&]uh1jhje8ubh)}(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 hje8ubh)}(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}(hj8hhhNhNubah}(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 hje8ubh)}(h"Locking: none, Interrupts: enabledh]h"Locking: none, Interrupts: enabled}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM hje8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_match_port (C function)c.uart_match_porthNtauh1jhj9hhhNhNubj)}(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](jd)}(hboolh]hbool}(hj=9hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj99hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chM ubj)}(h h]h }(hjL9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj99hhhjK9hM ubj)}(huart_match_porth]j)}(huart_match_porth]huart_match_port}(hj^9hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjZ9ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj99hhhjK9hM ubj)}(h>(const struct uart_port *port1, const struct uart_port *port2)h](j)}(hconst struct uart_port *port1h](j)}(hj+h]hconst}(hjz9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjv9ubj)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjv9ubh)}(hhh]j)}(h uart_porth]h uart_port}(hj9hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj9modnameN classnameNjj)}j]j)}jj`9sbc.uart_match_portasbuh1hhjv9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjv9ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv9ubj)}(hport1h]hport1}(hj9hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjv9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjr9ubj)}(hconst struct uart_port *port2h](j)}(hj+h]hconst}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubj)}(hjh]hstruct}(hj":hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hj/:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubh)}(hhh]j)}(h uart_porth]h uart_port}(hj@:hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj=:ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetjB:modnameN classnameNjj)}j]j9c.uart_match_portasbuh1hhj:ubj)}(h h]h }(hj^:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubj)}(hjh]h*}(hjl:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hport2h]hport2}(hjy:hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjr9ubeh}(h]h ]h"]h$]h&]jjuh1jhj99hhhjK9hM ubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj59hhhjK9hM ubah}(h]j09ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjK9hM hj29hhubjB)}(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.chM hj:hhubah}(h]h ]h"]h$]h&]uh1jAhj29hhhjK9hM ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j:j}j:j~jjuh1jhhhj9hNhNubj)}(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.chM 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.chM hj:ubj)}(hhh]h)}(h first porth]h first 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.``const struct uart_port *port2`` second port h](j)}(h!``const struct uart_port *port2``h]j)}(hj;h]hconst struct uart_port *port2}(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 second porth]h second port}(hj6;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2;hM hj3;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj2;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.chM 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.}(hjn;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&]uh1jhj9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#uart_handle_dcd_change (C function)c.uart_handle_dcd_changehNtauh1jhj9hhhNhNubj)}(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](jd)}(hvoidh]hvoid}(hj;hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj;hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMG ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;hhhj;hMG ubj)}(huart_handle_dcd_changeh]j)}(huart_handle_dcd_changeh]huart_handle_dcd_change}(hj;hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj;ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj;hhhj;hMG ubj)}(h&(struct uart_port *uport, bool active)h](j)}(hstruct uart_port *uporth](j)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;ubh)}(hhh]j)}(h uart_porth]h uart_port}(hj;hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj;modnameN classnameNjj)}j]j)}jj;sbc.uart_handle_dcd_changeasbuh1hhj;ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;ubj)}(hjh]h*}(hj&<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(huporth]huport}(hj3<hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(h bool activeh](jd)}(hj?9h]hbool}(hjL<hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjH<ubj)}(h h]h }(hjY<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjH<ubj)}(hactiveh]hactive}(hjg<hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjH<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubeh}(h]h ]h"]h$]h&]jjuh1jhj;hhhj;hMG ubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj;hhhj;hMG ubah}(h]j;ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj;hMG hj;hhubjB)}(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.chMG hj<hhubah}(h]h ]h"]h$]h&]uh1jAhj;hhhj;hMG ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j<j}j<j~jjuh1jhhhj9hNhNubj)}(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.chMK 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.chMH 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<hMH hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMH 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.chMI hj=ubj)}(hhh]h)}(hnew carrier detect statush]hnew carrier detect status}(hj$=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj =hMI hj!=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj =hMI hj<ubeh}(h]h ]h"]h$]h&]uh1jhj<ubh)}(h**Description**h]j)}(hjF=h]h Description}(hjH=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD=ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMK 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.chMJ hj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#uart_handle_cts_change (C function)c.uart_handle_cts_changehNtauh1jhj9hhhNhNubj)}(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](jd)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj=hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMj ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj=hhhj=hMj ubj)}(huart_handle_cts_changeh]j)}(huart_handle_cts_changeh]huart_handle_cts_change}(hj=hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj=ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj=hhhj=hMj ubj)}(h&(struct uart_port *uport, bool active)h](j)}(hstruct uart_port *uporth](j)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj=ubh)}(hhh]j)}(h uart_porth]h uart_port}(hj=hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj=modnameN classnameNjj)}j]j)}jj=sbc.uart_handle_cts_changeasbuh1hhj=ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj=ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(huporth]huport}(hj!>hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(h bool activeh](jd)}(hj?9h]hbool}(hj:>hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj6>ubj)}(h h]h }(hjG>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6>ubj)}(hactiveh]hactive}(hjU>hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj6>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubeh}(h]h ]h"]h$]h&]jjuh1jhj=hhhj=hMj ubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj=hhhj=hMj ubah}(h]j~=ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj=hMj hj=hhubjB)}(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.chMj hj|>hhubah}(h]h ]h"]h$]h&]uh1jAhj=hhhj=hMj ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j>j}j>j~jjuh1jhhhj9hNhNubj)}(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.chMn 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.chMk 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>hMk hj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMk 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.chMl hj>ubj)}(hhh]h)}(hnew clear-to-send statush]hnew clear-to-send status}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMl hj?ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj?hMl hj>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.chMn hj>ubh)}(hCaller must hold uport->lock.h]hCaller must hold uport->lock.}(hjJ?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:71: ./drivers/tty/serial/serial_core.chMm hj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"uart_try_toggle_sysrq (C function)c.uart_try_toggle_sysrqhNtauh1jhj9hhhNhNubj)}(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](jd)}(hj?9h]hbool}(hjy?hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchju?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 ]j ah"]h$]h&]uh1jhju?hhhj?hM ubj)}(huart_try_toggle_sysrqh]j)}(huart_try_toggle_sysrqh]huart_try_toggle_sysrq}(hj?hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj?ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhju?hhhj?hM ubj)}(h(struct uart_port *port, u8 ch)h](j)}(hstruct uart_port *porth](j)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj?ubh)}(hhh]j)}(h uart_porth]h uart_port}(hj?hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj?modnameN classnameNjj)}j]j)}jj?sbc.uart_try_toggle_sysrqasbuh1hhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj?ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hporth]hport}(hj@hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubj)}(hu8 chh](h)}(hhh]j)}(hu8h]hu8}(hj*@hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj'@ubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj,@modnameN classnameNjj)}j]j?c.uart_try_toggle_sysrqasbuh1hhj#@ubj)}(h h]h }(hjH@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#@ubj)}(hchh]hch}(hjV@hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj#@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubeh}(h]h ]h"]h$]h&]jjuh1jhju?hhhj?hM ubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjq?hhhj?hM ubah}(h]jl?ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj?hM hjn?hhubjB)}(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&]uh1jAhjn?hhhj?hM ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j@j}j@j~jjuh1jhhhj9hNhNubj)}(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)}(hj@h]hu8 ch}(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)}(h2new character in the sequence after received BREAKh]h2new character in the sequence after received BREAK}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM hjAubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhjAhM hj@ubeh}(h]h ]h"]h$]h&]uh1jhj@ubh)}(h**Description**h]j)}(hj5Ah]h Description}(hj7AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3Aubah}(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).}(hjKAhhhNhNubah}(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)}(hj\Ah]hReturn}(hj^AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZAubah}(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}(hjvAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrAubh if }(hjrAhhhNhNubj)}(h**ch**h]hch}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrAubhC is out of enabling sequence and should be handled some other way, }(hjrAhhhNhNubj)}(h``true``h]htrue}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrAubh if }hjrAsbj)}(h**ch**h]hch}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrAubh was consumed.}(hjrAhhhNhNubeh}(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&]uh1jhj9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_port_tx_limited (C macro)c.uart_port_tx_limitedhNtauh1jhj9hhhNhNubj)}(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 ]j!ah"]h$]h&]uh1jhjAubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjAhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMubah}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjAhhhjAhMubah}(h]jAah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjAhMhjAhhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhjAhhhjAhMubeh}(h]h ](jvmacroeh"]h$]h&]j{jvj|jBj}jBj~jjuh1jhhhj9hNhNubh)}(hG``uart_port_tx_limited (port, ch, count, tx_ready, put_char, tx_done)``h]j)}(hjBh]hCuart_port_tx_limited (port, ch, count, tx_ready, put_char, tx_done)}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhj9hhubj )}(h4- transmit helper for uart_port with count limiting h]jG)}(hhh]jL)}(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}(hjstop_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)}(hjcBh]h Parameters}(hjeBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaBubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhj]Bubj)}(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.hhMhj|Bubj)}(hhh]h)}(h uart porth]h uart port}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhj|Bubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjyBubj)}(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&]uh1jhjBhMhjyBubj)}(h(``count`` a limit of characters to send h](j)}(h ``count``h]j)}(hjBh]hcount}(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)}(ha limit of characters to sendh]ha limit of characters to send}(hj ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ChMhj Cubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj ChMhjyBubj)}(h.``tx_ready`` can HW accept more data function h](j)}(h ``tx_ready``h]j)}(hj-Ch]htx_ready}(hj/ChhhNhNubah}(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}(hjFChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBChMhjCCubah}(h]h ]h"]h$]h&]uh1jhj'Cubeh}(h]h ]h"]h$]h&]uh1jhjBChMhjyBubj)}(h+``put_char`` function to write a character h](j)}(h ``put_char``h]j)}(hjfCh]hput_char}(hjhChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdCubah}(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)}(hfunction to write a characterh]hfunction to write a character}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{ChMhj|Cubah}(h]h ]h"]h$]h&]uh1jhj`Cubeh}(h]h ]h"]h$]h&]uh1jhj{ChMhjyBubj)}(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&]uh1jhjChMhjyBubeh}(h]h ]h"]h$]h&]uh1jhj]Bubh)}(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.hhMhj]Bubh)}(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 }(hjChhhNhNubj)}(h**put_char\(\)**h]h put_char()}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh. It does so until }(hjChhhNhNubj)}(h **count**h]hcount}(hj DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh characters are sent and while }(hjChhhNhNubj)}(h **tx_ready**h]htx_ready}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh evaluates to true.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhj]Bubj)}(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:}(hjstop_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&]uh1jKhjNDubeh}(h]h ]h"]h$]h&]jkjuh1jFhjDhMhjKDubah}(h]h ]h"]h$]h&]uh1jhj8Dubeh}(h]h ]h"]h$]h&]uh1jhjJDhMhj5Dubah}(h]h ]h"]h$]h&]uh1jhj]Bubh)}(hlFor all of them, **port->lock** is held, interrupts are locally disabled and the expressions must not sleep.h](hFor all of them, }(hjEhhhNhNubj)}(h**port->lock**h]h port->lock}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubhM is held, interrupts are locally disabled and the expressions must not sleep.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhj]Bubh)}(h **Return**h]j)}(hj6Eh]hReturn}(hj8EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4Eubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhj]Bubh)}(h6the number of characters in the xmit buffer when done.h]h6the number of characters in the xmit buffer when done.}(hjLEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhj]Bubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_port_tx (C macro)c.uart_port_txhNtauh1jhj9hhhNhNubj)}(hhh](j)}(h uart_port_txh]j)}(h uart_port_txh]j)}(h uart_port_txh]j)}(hjuEh]h uart_port_tx}(hjEhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj{Eubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjwEhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMubah}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjsEhhhjEhMubah}(h]jnEah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjEhMhjpEhhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhjpEhhhjEhMubeh}(h]h ](jvmacroeh"]h$]h&]j{jvj|jEj}jEj~jjuh1jhhhj9hNhNubh)}(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.hhMhj9hhubj )}(h - transmit helper for uart_port h]jG)}(hhh]jL)}(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&]uh1jKhjEubah}(h]h ]h"]h$]h&]jkjluh1jFhjEhMhjEubah}(h]h ]h"]h$]h&]uh1j hjEhMhj9hhubj)}(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)}(hjEh]h Parameters}(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.hhMhjEubj)}(hhh](j)}(h``port`` uart port h](j)}(h``port``h]j)}(hjFh]hport}(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 uart porth]h uart port}(hj1FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-FhMhj.Fubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhj-FhMhjFubj)}(h=``ch`` variable to store a character to be written to the HW h](j)}(h``ch``h]j)}(hjQFh]hch}(hjSFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOFubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjKFubj)}(hhh]h)}(h5variable to store a character to be written to the HWh]h5variable to store a character to be written to the HW}(hjjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfFhMhjgFubah}(h]h ]h"]h$]h&]uh1jhjKFubeh}(h]h ]h"]h$]h&]uh1jhjfFhMhjFubj)}(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&]uh1jhjFhMhjFubj)}(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&]uh1jhjFhMhjFubeh}(h]h ]h"]h$]h&]uh1jhjEubh)}(h**Description**h]j)}(hjFh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjEubh)}(h,See uart_port_tx_limited() for more details.h]h,See uart_port_tx_limited() for more details.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:80: ./include/linux/serial_core.hhMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubeh}(h]other-functionsah ]h"]other functionsah$]h&]uh1hhhhhhhhKEubh)}(hhh](h)}(h Other notesh]h Other notes}(hj5GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2GhhhhhKTubh)}(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:}(hjCGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhj2Ghhubj)}(hcstruct my_port { struct uart_port port; int my_stuff; };h]hcstruct my_port { struct uart_port port; int my_stuff; };}hjQGsbah}(h]h ]h"]h$]h&]jjuh1jhhhK\hj2Ghhubeh}(h] other-notesah ]h"] other notesah$]h&]uh1hhhhhhhhKTubh)}(hhh](h)}(hModem control lines via GPIOh]hModem control lines via GPIO}(hjjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjgGhhhhhKbubh)}(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.}(hjxGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKdhjgGhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jmctrl_gpio_set (C function)c.mctrl_gpio_sethNtauh1jhjgGhhhNhNubj)}(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](jd)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjGhhhp/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 ]j ah"]h$]h&]uh1jhjGhhhjGhK.ubj)}(hmctrl_gpio_seth]j)}(hmctrl_gpio_seth]hmctrl_gpio_set}(hjGhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjGubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjGhhhjGhK.ubj)}(h/(struct mctrl_gpios *gpios, unsigned int mctrl)h](j)}(hstruct mctrl_gpios *gpiosh](j)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjGubh)}(hhh]j)}(h mctrl_gpiosh]h mctrl_gpios}(hjGhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetjGmodnameN classnameNjj)}j]j)}jjGsbc.mctrl_gpio_setasbuh1hhjGubj)}(h h]h }(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjGubj)}(hjh]h*}(hj(HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hgpiosh]hgpios}(hj5HhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubj)}(hunsigned int mctrlh](jd)}(hunsignedh]hunsigned}(hjNHhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjJHubj)}(h h]h }(hj\HhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjJHubjd)}(hinth]hint}(hjjHhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjJHubj)}(h h]h }(hjxHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjJHubj)}(hmctrlh]hmctrl}(hjHhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjJHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubeh}(h]h ]h"]h$]h&]jjuh1jhjGhhhjGhK.ubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjGhhhjGhK.ubah}(h]jGah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjGhK.hjGhhubjB)}(hhh]h)}(h"set gpios according to mctrl stateh]h"set gpios according to mctrl state}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chK.hjHhhubah}(h]h ]h"]h$]h&]uh1jAhjGhhhjGhK.ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jHj}jHj~jjuh1jhhhjgGhNhNubj)}(h**Parameters** ``struct mctrl_gpios *gpios`` gpios to set ``unsigned int mctrl`` state to set **Description** Set the gpios according to the mctrl state.h](h)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chK2hjHubj)}(hhh](j)}(h+``struct mctrl_gpios *gpios`` gpios to set h](j)}(h``struct mctrl_gpios *gpios``h]j)}(hjHh]hstruct mctrl_gpios *gpios}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chK/hjHubj)}(hhh]h)}(h gpios to seth]h gpios to set}(hj IhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhK/hjIubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjIhK/hjHubj)}(h$``unsigned int mctrl`` state to set h](j)}(h``unsigned int mctrl``h]j)}(hj*Ih]hunsigned int mctrl}(hj,IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(Iubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chK0hj$Iubj)}(hhh]h)}(h state to seth]h state to set}(hjCIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?IhK0hj@Iubah}(h]h ]h"]h$]h&]uh1jhj$Iubeh}(h]h ]h"]h$]h&]uh1jhj?IhK0hjHubeh}(h]h ]h"]h$]h&]uh1jhjHubh)}(h**Description**h]j)}(hjeIh]h Description}(hjgIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcIubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chK2hjHubh)}(h+Set the gpios according to the mctrl state.h]h+Set the gpios according to the mctrl state.}(hj{IhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chK1hjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjgGhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j mctrl_gpio_to_gpiod (C function)c.mctrl_gpio_to_gpiodhNtauh1jhjgGhhhNhNubj)}(hhh](j)}(h\struct gpio_desc * mctrl_gpio_to_gpiod (struct mctrl_gpios *gpios, enum mctrl_gpio_idx gidx)h]j)}(hZstruct gpio_desc *mctrl_gpio_to_gpiod(struct mctrl_gpios *gpios, enum mctrl_gpio_idx gidx)h](j)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chKJubj)}(h h]h }(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjIhhhjIhKJubh)}(hhh]j)}(h gpio_desch]h gpio_desc}(hjIhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetjImodnameN classnameNjj)}j]j)}jmctrl_gpio_to_gpiodsbc.mctrl_gpio_to_gpiodasbuh1hhjIhhhjIhKJubj)}(h h]h }(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjIhhhjIhKJubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjIhKJubj)}(hmctrl_gpio_to_gpiodh]j)}(hjIh]hmctrl_gpio_to_gpiod}(hj JhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjJubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjIhhhjIhKJubj)}(h5(struct mctrl_gpios *gpios, enum mctrl_gpio_idx gidx)h](j)}(hstruct mctrl_gpios *gpiosh](j)}(hjh]hstruct}(hj$JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Jubj)}(h h]h }(hj1JhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj Jubh)}(hhh]j)}(h mctrl_gpiosh]h mctrl_gpios}(hjBJhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj?Jubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetjDJmodnameN classnameNjj)}j]jIc.mctrl_gpio_to_gpiodasbuh1hhj Jubj)}(h h]h }(hj`JhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj Jubj)}(hjh]h*}(hjnJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Jubj)}(hgpiosh]hgpios}(hj{JhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj Jubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubj)}(henum mctrl_gpio_idx gidxh](j)}(hj*h]henum}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjJubh)}(hhh]j)}(hmctrl_gpio_idxh]hmctrl_gpio_idx}(hjJhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetjJmodnameN classnameNjj)}j]jIc.mctrl_gpio_to_gpiodasbuh1hhjJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjJubj)}(hgidxh]hgidx}(hjJhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubeh}(h]h ]h"]h$]h&]jjuh1jhjIhhhjIhKJubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjIhhhjIhKJubah}(h]jIah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjIhKJhjIhhubjB)}(hhh]h)}(h$obtain gpio_desc of modem line indexh]h$obtain gpio_desc of modem line index}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chKJhjKhhubah}(h]h ]h"]h$]h&]uh1jAhjIhhhjIhKJubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j Kj}j Kj~jjuh1jhhhjgGhNhNubj)}(h**Parameters** ``struct mctrl_gpios *gpios`` gpios to look into ``enum mctrl_gpio_idx gidx`` index of the modem line **Return** the gpio_desc structure associated to the modem line indexh](h)}(h**Parameters**h]j)}(hj*Kh]h Parameters}(hj,KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(Kubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chKNhj$Kubj)}(hhh](j)}(h1``struct mctrl_gpios *gpios`` gpios to look into h](j)}(h``struct mctrl_gpios *gpios``h]j)}(hjIKh]hstruct mctrl_gpios *gpios}(hjKKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGKubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chKKhjCKubj)}(hhh]h)}(hgpios to look intoh]hgpios to look into}(hjbKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^KhKKhj_Kubah}(h]h ]h"]h$]h&]uh1jhjCKubeh}(h]h ]h"]h$]h&]uh1jhj^KhKKhj@Kubj)}(h5``enum mctrl_gpio_idx gidx`` index of the modem line h](j)}(h``enum mctrl_gpio_idx gidx``h]j)}(hjKh]henum mctrl_gpio_idx gidx}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chKLhj|Kubj)}(hhh]h)}(hindex of the modem lineh]hindex of the modem line}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhKLhjKubah}(h]h ]h"]h$]h&]uh1jhj|Kubeh}(h]h ]h"]h$]h&]uh1jhjKhKLhj@Kubeh}(h]h ]h"]h$]h&]uh1jhj$Kubh)}(h **Return**h]j)}(hjKh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chKNhj$Kubh)}(h:the gpio_desc structure associated to the modem line indexh]h:the gpio_desc structure associated to the modem line index}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chKMhj$Kubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjgGhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jmctrl_gpio_get (C function)c.mctrl_gpio_gethNtauh1jhjgGhhhNhNubj)}(hhh](j)}(hLunsigned int mctrl_gpio_get (struct mctrl_gpios *gpios, unsigned int *mctrl)h]j)}(hKunsigned int mctrl_gpio_get(struct mctrl_gpios *gpios, unsigned int *mctrl)h](jd)}(hunsignedh]hunsigned}(hjLhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjKhhhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chKZubj)}(h h]h }(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjKhhhjLhKZubjd)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjKhhhjLhKZubj)}(h h]h }(hj-LhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjKhhhjLhKZubj)}(hmctrl_gpio_geth]j)}(hmctrl_gpio_geth]hmctrl_gpio_get}(hj?LhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj;Lubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjKhhhjLhKZubj)}(h0(struct mctrl_gpios *gpios, unsigned int *mctrl)h](j)}(hstruct mctrl_gpios *gpiosh](j)}(hjh]hstruct}(hj[LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWLubj)}(h h]h }(hjhLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjWLubh)}(hhh]j)}(h mctrl_gpiosh]h mctrl_gpios}(hjyLhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjvLubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj{LmodnameN classnameNjj)}j]j)}jjALsbc.mctrl_gpio_getasbuh1hhjWLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjWLubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWLubj)}(hgpiosh]hgpios}(hjLhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjWLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSLubj)}(hunsigned int *mctrlh](jd)}(hunsignedh]hunsigned}(hjLhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjLubjd)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjLubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hmctrlh]hmctrl}(hjMhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSLubeh}(h]h ]h"]h$]h&]jjuh1jhjKhhhjLhKZubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjKhhhjLhKZubah}(h]jKah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjLhKZhjKhhubjB)}(hhh]h)}(h#update mctrl with the gpios values.h]h#update mctrl with the gpios values.}(hjj?)j@huh1jhj|NhKhjdNhhubjB)}(hhh]h)}(hinitialize uart gpiosh]hinitialize uart gpios}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chKhjOhhubah}(h]h ]h"]h$]h&]uh1jAhjdNhhhj|NhKubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jOj}jOj~jjuh1jhhhjgGhNhNubj)}(hX**Parameters** ``struct uart_port *port`` port to initialize gpios for ``unsigned int idx`` index of the gpio in the **port**'s device **Description** This will get the {cts,rts,...}-gpios from device tree if they are present and request them, set direction etc, and return an allocated structure. `devm_*` functions are used, so there's no need to explicitly free. As this sets up the irq handling, make sure to not handle changes to the gpio input lines in your driver, too.h](h)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chKhjOubj)}(hhh](j)}(h8``struct uart_port *port`` port to initialize gpios for h](j)}(h``struct uart_port *port``h]j)}(hjOh]hstruct uart_port *port}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chKhjOubj)}(hhh]h)}(hport to initialize gpios forh]hport to initialize gpios for}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhKhjPubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjPhKhjOubj)}(h@``unsigned int idx`` index of the gpio in the **port**'s device h](j)}(h``unsigned int idx``h]j)}(hj5Ph]hunsigned int idx}(hj7PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3Pubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chKhj/Pubj)}(hhh]h)}(h*index of the gpio in the **port**'s deviceh](hindex of the gpio in the }(hjNPhhhNhNubj)}(h**port**h]hport}(hjVPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNPubh ’s device}(hjNPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJPhKhjKPubah}(h]h ]h"]h$]h&]uh1jhj/Pubeh}(h]h ]h"]h$]h&]uh1jhjJPhKhjOubeh}(h]h ]h"]h$]h&]uh1jhjOubh)}(h**Description**h]j)}(hjPh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chKhjOubh)}(hXEThis will get the {cts,rts,...}-gpios from device tree if they are present and request them, set direction etc, and return an allocated structure. `devm_*` functions are used, so there's no need to explicitly free. As this sets up the irq handling, make sure to not handle changes to the gpio input lines in your driver, too.h](hThis will get the {cts,rts,...}-gpios from device tree if they are present and request them, set direction etc, and return an allocated structure. }(hjPhhhNhNubhtitle_reference)}(h`devm_*`h]hdevm_*}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jPhjPubh functions are used, so there’s no need to explicitly free. As this sets up the irq handling, make sure to not handle changes to the gpio input lines in your driver, too.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chKhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjgGhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!mctrl_gpio_enable_ms (C function)c.mctrl_gpio_enable_mshNtauh1jhjgGhhhNhNubj)}(hhh](j)}(h5void mctrl_gpio_enable_ms (struct mctrl_gpios *gpios)h]j)}(h4void mctrl_gpio_enable_ms(struct mctrl_gpios *gpios)h](jd)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjPhhhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMubj)}(h h]h }(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjPhhhjPhMubj)}(hmctrl_gpio_enable_msh]j)}(hmctrl_gpio_enable_msh]hmctrl_gpio_enable_ms}(hjPhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjPubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjPhhhjPhMubj)}(h(struct mctrl_gpios *gpios)h]j)}(hstruct mctrl_gpios *gpiosh](j)}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hj%QhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjQubh)}(hhh]j)}(h mctrl_gpiosh]h mctrl_gpios}(hj6QhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj3Qubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetj8QmodnameN classnameNjj)}j]j)}jjPsbc.mctrl_gpio_enable_msasbuh1hhjQubj)}(h h]h }(hjVQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjQubj)}(hjh]h*}(hjdQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hgpiosh]hgpios}(hjqQhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubah}(h]h ]h"]h$]h&]jjuh1jhjPhhhjPhMubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjPhhhjPhMubah}(h]jPah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjPhMhjPhhubjB)}(hhh]h)}(h3enable irqs and handling of changes to the ms linesh]h3enable irqs and handling of changes to the ms lines}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMhjQhhubah}(h]h ]h"]h$]h&]uh1jAhjPhhhjPhMubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jQj}jQj~jjuh1jhhhjgGhNhNubj)}(h?**Parameters** ``struct mctrl_gpios *gpios`` gpios to enableh](h)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMhjQubj)}(hhh]j)}(h-``struct mctrl_gpios *gpios`` gpios to enableh](j)}(h``struct mctrl_gpios *gpios``h]j)}(hjQh]hstruct mctrl_gpios *gpios}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMhjQubj)}(hhh]h)}(hgpios to enableh]hgpios to enable}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjgGhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'mctrl_gpio_disable_ms_sync (C function)c.mctrl_gpio_disable_ms_synchNtauh1jhjgGhhhNhNubj)}(hhh](j)}(h;void mctrl_gpio_disable_ms_sync (struct mctrl_gpios *gpios)h]j)}(h:void mctrl_gpio_disable_ms_sync(struct mctrl_gpios *gpios)h](jd)}(hvoidh]hvoid}(hj6RhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj2Rhhhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMCubj)}(h h]h }(hjERhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2RhhhjDRhMCubj)}(hmctrl_gpio_disable_ms_synch]j)}(hmctrl_gpio_disable_ms_synch]hmctrl_gpio_disable_ms_sync}(hjWRhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjSRubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj2RhhhjDRhMCubj)}(h(struct mctrl_gpios *gpios)h]j)}(hstruct mctrl_gpios *gpiosh](j)}(hjh]hstruct}(hjsRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjoRubh)}(hhh]j)}(h mctrl_gpiosh]h mctrl_gpios}(hjRhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetjRmodnameN classnameNjj)}j]j)}jjYRsbc.mctrl_gpio_disable_ms_syncasbuh1hhjoRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjoRubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoRubj)}(hgpiosh]hgpios}(hjRhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjoRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjkRubah}(h]h ]h"]h$]h&]jjuh1jhj2RhhhjDRhMCubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj.RhhhjDRhMCubah}(h]j)Rah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjDRhMChj+RhhubjB)}(hhh]h)}(hbdisable irqs and handling of changes to the ms lines, and wait for any pending IRQ to be processedh]hbdisable irqs and handling of changes to the ms lines, and wait for any pending IRQ to be processed}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMChjRhhubah}(h]h ]h"]h$]h&]uh1jAhj+RhhhjDRhMCubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jSj}jSj~jjuh1jhhhjgGhNhNubj)}(h@**Parameters** ``struct mctrl_gpios *gpios`` gpios to disableh](h)}(h**Parameters**h]j)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMGhjSubj)}(hhh]j)}(h.``struct mctrl_gpios *gpios`` gpios to disableh](j)}(h``struct mctrl_gpios *gpios``h]j)}(hj7Sh]hstruct mctrl_gpios *gpios}(hj9ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5Subah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMIhj1Subj)}(hhh]h)}(hgpios to disableh]hgpios to disable}(hjPShhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMEhjMSubah}(h]h ]h"]h$]h&]uh1jhj1Subeh}(h]h ]h"]h$]h&]uh1jhjLShMIhj.Subah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjgGhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*mctrl_gpio_disable_ms_no_sync (C function)c.mctrl_gpio_disable_ms_no_synchNtauh1jhjgGhhhNhNubj)}(hhh](j)}(h>void 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](jd)}(hvoidh]hvoid}(hjShhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjShhhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMNubj)}(h h]h }(hjShhhNhNubah}(h]h ]j ah"]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 ]j!ah"]h$]h&]uh1jhjSubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjShhhjShMNubj)}(h(struct mctrl_gpios *gpios)h]j)}(hstruct mctrl_gpios *gpiosh](j)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(h h]h }(hjShhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjSubh)}(hhh]j)}(h mctrl_gpiosh]h mctrl_gpios}(hjShhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjvreftypej reftargetjSmodnameN classnameNjj)}j]j)}jjSsbc.mctrl_gpio_disable_ms_no_syncasbuh1hhjSubj)}(h h]h }(hj ThhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjSubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hgpiosh]hgpios}(hj'ThhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubah}(h]h ]h"]h$]h&]jjuh1jhjShhhjShMNubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjShhhjShMNubah}(h]jSah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjShMNhjShhubjB)}(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}(hjQThhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMNhjNThhubah}(h]h ]h"]h$]h&]uh1jAhjShhhjShMNubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jiTj}jiTj~jjuh1jhhhjgGhNhNubj)}(h@**Parameters** ``struct mctrl_gpios *gpios`` gpios to disableh](h)}(h**Parameters**h]j)}(hjsTh]h Parameters}(hjuThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqTubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:102: ./drivers/tty/serial/serial_mctrl_gpio.chMRhjmTubj)}(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&]uh1jhjmTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjgGhhhNhNubeh}(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}(jTjTjj jDjAjjj6j3j/Gj,GjdGjaGjTjTu nametypes}(jTjjDjj6j/GjdGjTuh}(jThj hjAjjjGj3jjjj,Gj9jVj[j jjjju!jz!j#j#jy&j~&j4*j9*jt.jy.j1j1j5j5j|7j7j09j59j;j;j~=j=jl?jq?jAjAjnEjsEjaGj2GjTjgGjGjGjIjIjKjKjbNjgNjPjPj)Rj.RjSjSu 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.