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)}(hThe serial core provides a few helper functions. This includes identifying the correct port structure (via uart_get_console()) and decoding command line arguments (uart_parse_options()).h]hThe serial core provides a few helper functions. This includes identifying the correct port structure (via uart_get_console()) and 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:spacepreserveuh1jhhhK1hjGhhubh)}(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&]uh1hhhhK6hjGhhubh)}(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&]uh1hhhhK9hjGhhubeh}(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:66: ./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:66: ./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:66: ./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)}(hX4**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)`` 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 ``set_mctrl`` ``void ()(struct uart_port *port, unsigned int mctrl)`` 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 ``get_mctrl`` ``unsigned int ()(struct uart_port *port)`` 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_tx`` ``void ()(struct uart_port *port)`` 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_tx`` ``void ()(struct uart_port *port)`` Start transmitting characters. Locking: **port->lock** taken. Interrupts: locally disabled. This call must not sleep ``throttle`` ``void ()(struct uart_port *port)`` 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. ``unthrottle`` ``void ()(struct uart_port *port)`` 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. ``send_xchar`` ``void ()(struct uart_port *port, char ch)`` 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. ``stop_rx`` ``void ()(struct uart_port *port)`` Stop receiving characters; the **port** is in the process of being closed. Locking: **port->lock** taken. Interrupts: locally disabled. This call must not sleep ``start_rx`` ``void ()(struct uart_port *port)`` Start receiving characters. Locking: **port->lock** taken. Interrupts: locally disabled. This call must not sleep ``enable_ms`` ``void ()(struct uart_port *port)`` 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 ``break_ctl`` ``void ()(struct uart_port *port, int ctl)`` 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 ``startup`` ``int ()(struct uart_port *port)`` 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. ``shutdown`` ``void ()(struct uart_port *port)`` 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_buffer`` ``void ()(struct uart_port *port)`` 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 ``set_termios`` ``void ()(struct uart_port *port, struct ktermios *new, struct ktermios *old)`` 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 ``set_ldisc`` ``void ()(struct uart_port *port, struct ktermios *termios)`` Notifier for discipline change. See Documentation/driver-api/tty/tty_ldisc.rst. Locking: caller holds tty_port->mutex ``pm`` ``void ()(struct uart_port *port, unsigned int state, unsigned int oldstate)`` 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. ``type`` ``const char *()(struct uart_port *port)`` 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_port`` ``void ()(struct uart_port *port)`` Release any memory and IO region resources currently in use by the **port**. Locking: none. Interrupts: caller dependent. ``request_port`` ``int ()(struct uart_port *port)`` 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. ``config_port`` ``void ()(struct uart_port *port, int type)`` 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_port`` ``int ()(struct uart_port *port, struct serial_struct *serinfo)`` Verify the new serial port information contained within **serinfo** is suitable for this port type. Locking: none. Interrupts: caller dependent. ``ioctl`` ``int ()(struct uart_port *port, unsigned int cmd, unsigned long arg)`` Perform any port specific IOCTLs. IOCTL commands must be defined using the standard numbering system found in . Locking: none. Interrupts: caller dependent. ``poll_init`` ``int ()(struct uart_port *port)`` 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. ``poll_put_char`` ``void ()(struct uart_port *port, unsigned char ch)`` 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 ``poll_get_char`` ``int ()(struct uart_port *port)`` 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 sleeph](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:66: ./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:66: ./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:66: ./include/linux/serial_core.hhKKhjubhdefinition_list)}(hhh](hdefinition_list_item)}(hX``tx_empty`` ``unsigned int ()(struct uart_port *port)`` 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 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:66: ./include/linux/serial_core.hhK4hjubh 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&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhK+hjubh)}(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 }(hjhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh7 is empty. If it is empty, this function should return }(hjhhhNhNubj)}(h``TIOCSER_TEMT``h]h TIOCSER_TEMT}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhY, otherwise return 0. If the port does not support this operation, then it should return }(hjhhhNhNubj)}(h``TIOCSER_TEMT``h]h TIOCSER_TEMT}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhK-hjubh)}(hELocking: none. Interrupts: caller dependent. This call must not sleeph]hELocking: none. Interrupts: caller dependent. This call must not sleep}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhK2hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK4hjubj)}(hXz``set_mctrl`` ``void ()(struct uart_port *port, unsigned int mctrl)`` 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 h](j)}(h ``set_mctrl``h]j)}(hjwh]h set_mctrl}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKGhjqubj)}(hhh](h)}(h7``void ()(struct uart_port *port, unsigned int mctrl)``h]j)}(hjh]h3void ()(struct uart_port *port, unsigned int mctrl)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhK6hjubh)}(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 }(hjhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to the state described by }(hjhhhNhNubj)}(h **mctrl**h]hmctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. The relevant bits of }(hjhhhNhNubj)}(h **mctrl**h]hmctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh are:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhK8hjubh block_quote)}(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)}(hjh](j)}(h ``TIOCM_RTS``h]h TIOCM_RTS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh RTS signal.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhK;hjubah}(h]h ]h"]h$]h&]uh1jKhjubjL)}(h``TIOCM_DTR`` DTR signal.h]h)}(hjh](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:66: ./include/linux/serial_core.hhKhjhubah}(h]h ]h"]h$]h&]uh1jKhjubjL)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# Set the port into loopback mode.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhK?hjubah}(h]h ]h"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]jkjluh1jFhjhK;hjubah}(h]h ]h"]h$]h&]uh1jhjhK;hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKAhjubh)}(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:66: ./include/linux/serial_core.hhKEhjubeh}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhKGhjubj)}(hX``get_mctrl`` ``unsigned int ()(struct uart_port *port)`` 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 h](j)}(h ``get_mctrl``h]j)}(hjh]h get_mctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhK[hjubj)}(hhh](h)}(h+``unsigned int ()(struct uart_port *port)``h]j)}(hjh]h'unsigned int ()(struct uart_port *port)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKIhjubh)}(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 }(hj4hhhNhNubj)}(h**port**h]hport}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh. The state of the outputs should not be returned, since the core keeps track of their state. The state information should include:}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKKhjubj)}(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}(hjchhhNhNubah}(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:66: ./include/linux/serial_core.hhKOhj\ubah}(h]h ]h"]h$]h&]uh1jKhjYubjL)}(h$``TIOCM_CTS`` state of CTS signalh]h)}(hjh](j)}(h ``TIOCM_CTS``h]h TIOCM_CTS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh state of CTS signal}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKPhjubah}(h]h ]h"]h$]h&]uh1jKhjYubjL)}(h$``TIOCM_DSR`` state of DSR signalh]h)}(hjh](j)}(h ``TIOCM_DSR``h]h TIOCM_DSR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh state of DSR signal}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKQhjubah}(h]h ]h"]h$]h&]uh1jKhjYubjL)}(h$``TIOCM_RI`` state of RI signal h]h)}(h#``TIOCM_RI`` state of RI signalh](j)}(h ``TIOCM_RI``h]hTIOCM_RI}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh state of RI signal}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKRhjubah}(h]h ]h"]h$]h&]uh1jKhjYubeh}(h]h ]h"]h$]h&]jkjluh1jFhj{hKOhjUubah}(h]h ]h"]h$]h&]uh1jhj{hKOhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKThjubh)}(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:66: ./include/linux/serial_core.hhKYhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK[hjubj)}(hXv``stop_tx`` ``void ()(struct uart_port *port)`` 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 h](j)}(h ``stop_tx``h]j)}(hjCh]hstop_tx}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKghj=ubj)}(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&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhK]hjYubh)}(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 }(hjthhhNhNubj)}(h``XOFF``h]hXOFF}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh character.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhK_hjYubh)}(hCThe driver should stop transmitting characters as soon as possible.h]hCThe driver should stop transmitting characters as soon as possible.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKchjYubh)}(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:66: ./include/linux/serial_core.hhKehjYubeh}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhKghjubj)}(h``start_tx`` ``void ()(struct uart_port *port)`` Start transmitting characters. Locking: **port->lock** taken. Interrupts: locally disabled. This call must not sleep 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:66: ./include/linux/serial_core.hhKohjubj)}(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&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKihjubh)}(hStart transmitting characters.h]hStart transmitting characters.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKkhjubh)}(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:66: ./include/linux/serial_core.hhKmhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKohjubj)}(hX``throttle`` ``void ()(struct uart_port *port)`` 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. h](j)}(h ``throttle``h]j)}(hjJh]hthrottle}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKyhjDubj)}(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&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKqhj`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:66: ./include/linux/serial_core.hhKshj`ubh)}(hVLocking: serialized with **unthrottle\(\)** and termios modification by the tty layer.h](hLocking: serialized with }(hjhhhNhNubj)}(h**unthrottle\(\)**h]hunthrottle()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh+ and termios modification by the tty layer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKxhj`ubeh}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hKyhjubj)}(hXe``unthrottle`` ``void ()(struct uart_port *port)`` 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. h](j)}(h``unthrottle``h]j)}(hjh]h unthrottle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjubj)}(hhh](h)}(h#``void ()(struct uart_port *port)``h]j)}(hjh]hvoid ()(struct uart_port *port)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhK{hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhK}hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjubh)}(hTLocking: serialized with **throttle\(\)** and termios modification by the tty layer.h](hLocking: serialized with }(hj hhhNhNubj)}(h**throttle\(\)**h]h throttle()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh+ and termios modification by the tty layer.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hX``send_xchar`` ``void ()(struct uart_port *port, char ch)`` 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. h](j)}(h``send_xchar``h]j)}(hj?h]h send_xchar}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhj9ubj)}(hhh](h)}(h,``void ()(struct uart_port *port, char ch)``h]j)}(hjZh]h(void ()(struct uart_port *port, char ch)}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjUubh)}(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.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjUubh)}(h8Do not transmit if **ch** == '\0' (``__DISABLED_CHAR``).h](hDo not transmit if }(hjhhhNhNubj)}(h**ch**h]hch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == ‘0’ (}(hjhhhNhNubj)}(h``__DISABLED_CHAR``h]h__DISABLED_CHAR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjUubh)}(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:66: ./include/linux/serial_core.hhKhjUubeh}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThKhjubj)}(h``stop_rx`` ``void ()(struct uart_port *port)`` Stop receiving characters; the **port** is in the process of being closed. Locking: **port->lock** taken. Interrupts: locally disabled. This call must not sleep 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:66: ./include/linux/serial_core.hhKhjubj)}(hhh](h)}(h#``void ()(struct uart_port *port)``h]j)}(hjh]hvoid ()(struct uart_port *port)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjubh)}(hJStop receiving characters; the **port** is in the process of being closed.h](hStop receiving characters; the }(hj hhhNhNubj)}(h**port**h]hport}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh# is in the process of being closed.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjubh)}(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:66: ./include/linux/serial_core.hhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``start_rx`` ``void ()(struct uart_port *port)`` Start receiving characters. Locking: **port->lock** taken. Interrupts: locally disabled. This call must not sleep h](j)}(h ``start_rx``h]j)}(hjX h]hstart_rx}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjR ubj)}(hhh](h)}(h#``void ()(struct uart_port *port)``h]j)}(hjs h]hvoid ()(struct uart_port *port)}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjn 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:66: ./include/linux/serial_core.hhKhjn 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:66: ./include/linux/serial_core.hhKhjn ubeh}(h]h ]h"]h$]h&]uh1jhjR ubeh}(h]h ]h"]h$]h&]uh1jhjm hKhjubj)}(hX0``enable_ms`` ``void ()(struct uart_port *port)`` 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 h](j)}(h ``enable_ms``h]j)}(hj h]h enable_ms}(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:66: ./include/linux/serial_core.hhKhj ubj)}(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&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhj ubh)}(h#Enable the modem status interrupts.h]h#Enable the modem status interrupts.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhj ubh)}(hThis method may be called multiple times. Modem status interrupts should be disabled when the **shutdown\(\)** method is called.h](h^This method may be called multiple times. Modem status interrupts should be disabled when the }(hj hhhNhNubj)}(h**shutdown\(\)**h]h shutdown()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh method is called.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./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}(hj4 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:66: ./include/linux/serial_core.hhKhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(hX``break_ctl`` ``void ()(struct uart_port *port, int ctl)`` 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 h](j)}(h ``break_ctl``h]j)}(hj_ h]h break_ctl}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj] ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjY ubj)}(hhh](h)}(h,``void ()(struct uart_port *port, int ctl)``h]j)}(hjz h]h(void ()(struct uart_port *port, int ctl)}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhju 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 }(hj hhhNhNubj)}(h**ctl**h]hctl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh{ is nonzero, the break signal should be transmitted. The signal should be terminated when another call is made with a zero }(hj hhhNhNubj)}(h**ctl**h]hctl}(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:66: ./include/linux/serial_core.hhKhju ubh)}(h%Locking: caller holds tty_port->mutexh]h%Locking: caller holds tty_port->mutex}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjt hKhju ubeh}(h]h ]h"]h$]h&]uh1jhjY ubeh}(h]h ]h"]h$]h&]uh1jhjt hKhjubj)}(hXt``startup`` ``int ()(struct uart_port *port)`` 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. h](j)}(h ``startup``h]j)}(hj h]hstartup}(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:66: ./include/linux/serial_core.hhKhj 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:66: ./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 }(hj hhhNhNubj)}(h**set_mctrl\(\)**h]h set_mctrl()}(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:66: ./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.}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhj ubh)}(h7Locking: port_sem taken. Interrupts: globally disabled.h]h7Locking: port_sem taken. Interrupts: globally disabled.}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(hX``shutdown`` ``void ()(struct uart_port *port)`` 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. h](j)}(h ``shutdown``h]j)}(hje h]hshutdown}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhj_ ubj)}(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&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./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}(hj hhhNhNubah}(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()}(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:66: ./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}(hj hhhNhNubah}(h]h ]h"]h$]h&V]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:66: ./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 }(hj hhhNhNubj)}(h**port**h]hport}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhj{ ubh)}(h6Locking: port_sem taken. Interrupts: caller dependent.h]h6Locking: port_sem taken. Interrupts: caller dependent.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhj{ ubeh}(h]h ]h"]h$]h&]uh1jhj_ ubeh}(h]h ]h"]h$]h&]uh1jhjz hKhjubj)}(hX2``flush_buffer`` ``void ()(struct uart_port *port)`` 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 h](j)}(h``flush_buffer``h]j)}(hj, h]h flush_buffer}(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:66: ./include/linux/serial_core.hhKhj& ubj)}(hhh](h)}(h#``void ()(struct uart_port *port)``h]j)}(hjG h]hvoid ()(struct uart_port *port)}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjB 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.}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjB ubh)}(hRThis will be called whenever the **port->state->xmit** circular buffer is cleared.h](h!This will be called whenever the }(hjl hhhNhNubj)}(h**port->state->xmit**h]hport->state->xmit}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl ubh circular buffer is cleared.}(hjl hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjB 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:66: ./include/linux/serial_core.hhKhjB ubeh}(h]h ]h"]h$]h&]uh1jhj& ubeh}(h]h ]h"]h$]h&]uh1jhjA hKhjubj)}(hXd``set_termios`` ``void ()(struct uart_port *port, struct ktermios *new, struct ktermios *old)`` 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 h](j)}(h``set_termios``h]j)}(hj h]h set_termios}(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:66: ./include/linux/serial_core.hhMhj ubj)}(hhh](h)}(hO``void ()(struct uart_port *port, struct ktermios *new, struct ktermios *old)``h]j)}(hj h]hKvoid ()(struct uart_port *port, struct ktermios *new, struct ktermios *old)}(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:66: ./include/linux/serial_core.hhKhj ubj)}(hXOChange 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 h](h)}(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 }(hj hhhNhNubj)}(h**port**h]hport}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh> parameters, including word length, parity, stop bits. Update }(hj hhhNhNubj)}(h**port->read_status_mask**h]hport->read_status_mask}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh and }(hj hhhNhNubj)}(h**port->ignore_status_mask**h]hport->ignore_status_mask}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhe to indicate the types of events we are interested in receiving. Relevant ktermios::c_cflag bits are:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhj ubjG)}(hhh](jL)}(h``CSIZE`` - word sizeh]h)}(hj? h](j)}(h ``CSIZE``h]hCSIZE}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA ubh - word size}(hjA hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhj= ubah}(h]h ]h"]h$]h&]uh1jKhj: ubjL)}(h``CSTOPB`` - 2 stop bitsh]h)}(hje h](j)}(h ``CSTOPB``h]hCSTOPB}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg ubh - 2 stop bits}(hjg hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjc ubah}(h]h ]h"]h$]h&]uh1jKhj: ubjL)}(h``PARENB`` - parity enableh]h)}(hj h](j)}(h ``PARENB``h]hPARENB}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh - parity enable}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhj ubah}(h]h ]h"]h$]h&]uh1jKhj: ubjL)}(h5``PARODD`` - odd parity (when ``PARENB`` is in force)h]h)}(hj h](j)}(h ``PARODD``h]hPARODD}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh - odd parity (when }(hj hhhNhNubj)}(h ``PARENB``h]hPARENB}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh is in force)}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhj ubah}(h]h ]h"]h$]h&]uh1jKhj: ubjL)}(hD``ADDRB`` - address bit (changed through uart_port::rs485_config()).h]h)}(hj h](j)}(h ``ADDRB``h]hADDRB}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh; - address bit (changed through uart_port::rs485_config()).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhj ubah}(h]h ]h"]h$]h&]uh1jKhj: ubjL)}(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}(hjhhhNhNubah}(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:66: ./include/linux/serial_core.hhKhj ubah}(h]h ]h"]h$]h&]uh1jKhj: ubjL)}(h9``CRTSCTS`` - if set, enable CTS status change reporting.h]h)}(hj6h](j)}(h ``CRTSCTS``h]hCRTSCTS}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh. - if set, enable CTS status change reporting.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhj4ubah}(h]h ]h"]h$]h&]uh1jKhj: ubjL)}(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}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh4 - if not set, enable modem status change reporting.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjZubah}(h]h ]h"]h$]h&]uh1jKhj: ubeh}(h]h ]h"]h$]h&]jkjluh1jFhj\ hKhj ubh)}(h$Relevant ktermios::c_iflag bits are:h]h$Relevant ktermios::c_iflag bits are:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./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:66: ./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:66: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ - ignore parity and framing errors.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./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}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh - ignore break errors. If }(hj#hhhNhNubj)}(h ``IGNPAR``h]hIGNPAR}(hj9hhhNhNubah}(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:66: ./include/linux/serial_core.hhKhjubah}(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):}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhj ubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jwhjtubjx)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jwhjtubjx)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jwhjtubjx)}(hhh]h}(h]h ]h"]h$]h&]colwidthK,uh1jwhjtubhthead)}(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:66: ./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&]uh1jhjtubhtbody)}(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:66: ./include/linux/serial_core.hhKhjubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h0h]h0}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hKhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hn/ah]hn/a}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hKhj?ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h,character received, marked as ``TTY_NORMAL``h](hcharacter received, marked as }(hjYhhhNhNubj)}(h``TTY_NORMAL``h]h TTY_NORMAL}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1hhj!hKhjVubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh](j)}(hhh]h)}(hNoneh]hNone}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h1h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hn/ah]hn/a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h,character received, marked as ``TTY_NORMAL``h](hcharacter received, marked as }(hjhhhNhNubj)}(h``TTY_NORMAL``h]h TTY_NORMAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh](j)}(hhh]h)}(hYesh]hYes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hjh]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hj-h]h0}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj&ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h,character received, marked as ``TTY_PARITY``h](hcharacter received, marked as }(hj?hhhNhNubj)}(h``TTY_PARITY``h]h TTY_PARITY}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1hhj hKhj<ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh](j)}(hhh]h)}(hYesh]hYes}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMhjjubah}(h]h ]h"]h$]h&]uh1jhjgubj)}(hhh]h)}(hjh]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhjubah}(h]h ]h"]h$]h&]uh1jhjgubj)}(hhh]h)}(hjh]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhjubah}(h]h ]h"]h$]h&]uh1jhjgubj)}(hhh]h)}(hcharacter discardedh]hcharacter discarded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]colsKuh1jrhjoubah}(h]h ]h"]h$]h&]uh1jmhj 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:66: ./include/linux/serial_core.hhMhj 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:66: ./include/linux/serial_core.hhMhj ubeh}(h]h ]h"]h$]h&]uh1jhj9 hKhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h``set_ldisc`` ``void ()(struct uart_port *port, struct ktermios *termios)`` Notifier for discipline change. See Documentation/driver-api/tty/tty_ldisc.rst. Locking: caller holds tty_port->mutex 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:66: ./include/linux/serial_core.hhMhjubj)}(hhh](h)}(h=``void ()(struct uart_port *port, struct ktermios *termios)``h]j)}(hj/h]h9void ()(struct uart_port *port, struct ktermios *termios)}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhM hj*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.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhM hj*ubh)}(h%Locking: caller holds tty_port->mutexh]h%Locking: caller holds tty_port->mutex}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj*ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjubj)}(hXZ``pm`` ``void ()(struct uart_port *port, unsigned int state, unsigned int oldstate)`` 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. h](j)}(h``pm``h]j)}(hjth]hpm}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMhjnubj)}(hhh](h)}(hN``void ()(struct uart_port *port, unsigned int state, unsigned int oldstate)``h]j)}(hjh]hJvoid ()(struct uart_port *port, unsigned int state, unsigned int oldstate)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMhjubj)}(hXPerform 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. h](h)}(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 }(hjhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. }(hjhhhNhNubj)}(h **state**h]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh: indicates the new state (defined by enum uart_pm_state), }(hjhhhNhNubj)}(h **oldstate**h]holdstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh indicates the previous state.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMhjubh)}(h7This function should not be used to grab any resources.h]h7This function should not be used to grab any resources.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMhjubh)}(hThis will be called when the **port** is initially opened and finally closed, except when the **port** is also the system console. This will occur even if ``CONFIG_PM`` is not set.h](hThis will be called when the }(hjhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh9 is initially opened and finally closed, except when the }(hjhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh5 is also the system console. This will occur even if }(hjhhhNhNubj)}(h ``CONFIG_PM``h]h CONFIG_PM}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not set.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMhjubh)}(h,Locking: none. Interrupts: caller dependent.h]h,Locking: none. Interrupts: caller dependent.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``type`` ``const char *()(struct uart_port *port)`` 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. h](j)}(h``type``h]j)}(hjih]htype}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhM'hjcubj)}(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&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhM!hjubh)}(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:66: ./include/linux/serial_core.hhM#hjubh)}(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:66: ./include/linux/serial_core.hhM&hjubeh}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hM'hjubj)}(h``release_port`` ``void ()(struct uart_port *port)`` Release any memory and IO region resources currently in use by the **port**. Locking: none. Interrupts: caller dependent. 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:66: ./include/linux/serial_core.hhM/hjubj)}(hhh](h)}(h#``void ()(struct uart_port *port)``h]j)}(hj h]hvoid ()(struct uart_port *port)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhM)hjubh)}(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}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhM+hjubh)}(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:66: ./include/linux/serial_core.hhM.hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM/hjubj)}(hX``request_port`` ``int ()(struct uart_port *port)`` 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. h](j)}(h``request_port``h]j)}(hjah]h request_port}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhM8hj[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&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhM1hjwubh)}(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 -}(hjhhhNhNubj)}(h ``EBUSY``h]hEBUSY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh on failure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhM3hjwubh)}(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:66: ./include/linux/serial_core.hhM7hjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhM8hjubj)}(hX``config_port`` ``void ()(struct uart_port *port, int type)`` 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. h](j)}(h``config_port``h]j)}(hjh]h config_port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMHhjubj)}(hhh](h)}(h-``void ()(struct uart_port *port, int type)``h]j)}(hjh]h)void ()(struct uart_port *port, int type)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhM:hjubh)}(hX+Perform any autoconfiguration steps required for the **port**. **type** contains a bit mask of the required configuration. ``UART_CONFIG_TYPE`` indicates that the port requires detection and identification. **port->type** should be set to the type found, or ``PORT_UNKNOWN`` if no port was detected.h](h5Perform any autoconfiguration steps required for the }(hjhhhNhNubj)}(h**port**h]hport}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. }(hjhhhNhNubj)}(h**type**h]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh4 contains a bit mask of the required configuration. }(hjhhhNhNubj)}(h``UART_CONFIG_TYPE``h]hUART_CONFIG_TYPE}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh@ indicates that the port requires detection and identification. }(hjhhhNhNubj)}(h**port->type**h]h port->type}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% should be set to the type found, or }(hjhhhNhNubj)}(h``PORT_UNKNOWN``h]h PORT_UNKNOWN}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if no port was detected.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhM<hjubh)}(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}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh 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).}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMBhjubh)}(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:66: ./include/linux/serial_core.hhMGhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjubj)}(h``verify_port`` ``int ()(struct uart_port *port, struct serial_struct *serinfo)`` Verify the new serial port information contained within **serinfo** is suitable for this port type. Locking: none. Interrupts: caller dependent. 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:66: ./include/linux/serial_core.hhMQhjubj)}(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:66: ./include/linux/serial_core.hhMJhjubj)}(hVerify the new serial port information contained within **serinfo** is suitable for this port type. Locking: none. Interrupts: caller dependent. h](h)}(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}(hjhhhNhNubah}(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:66: ./include/linux/serial_core.hhMMhjubh)}(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:66: ./include/linux/serial_core.hhMPhjubeh}(h]h ]h"]h$]h&]uh1jhjhMMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjubj)}(hX``ioctl`` ``int ()(struct uart_port *port, unsigned int cmd, unsigned long arg)`` Perform any port specific IOCTLs. IOCTL commands must be defined using the standard numbering system found in . Locking: none. Interrupts: caller dependent. h](j)}(h ``ioctl``h]j)}(hj)h]hioctl}(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:66: ./include/linux/serial_core.hhMZhj#ubj)}(hhh](h)}(hG``int ()(struct uart_port *port, unsigned int cmd, unsigned long arg)``h]j)}(hjDh]hCint ()(struct uart_port *port, unsigned int cmd, unsigned long arg)}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMShj?ubj)}(hPerform any port specific IOCTLs. IOCTL commands must be defined using the standard numbering system found in . Locking: none. Interrupts: caller dependent. h](h)}(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 .}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMVhjZubh)}(h,Locking: none. Interrupts: caller dependent.h]h,Locking: none. Interrupts: caller dependent.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMYhjZubeh}(h]h ]h"]h$]h&]uh1jhjlhMVhj?ubeh}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hMZhjubj)}(hX3``poll_init`` ``int ()(struct uart_port *port)`` 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. h](j)}(h ``poll_init``h]j)}(hjh]h poll_init}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMchjubj)}(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&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhM\hjubh)}(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 }(hjhhhNhNubj)}(h**poll_put_char\(\)**h]hpoll_put_char()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**poll_get_char\(\)**h]hpoll_get_char()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh . Unlike }(hjhhhNhNubj)}(h**startup\(\)**h]h startup()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh%, this should not request interrupts.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhM^hjubh)}(hBLocking: ``tty_mutex`` and tty_port->mutex taken. Interrupts: n/a.h](h Locking: }(hj hhhNhNubj)}(h ``tty_mutex``h]h tty_mutex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, and tty_port->mutex taken. Interrupts: n/a.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMbhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMchjubj)}(hX ``poll_put_char`` ``void ()(struct uart_port *port, unsigned char ch)`` 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 h](j)}(h``poll_put_char``h]j)}(hj=h]h poll_put_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:66: ./include/linux/serial_core.hhMlhj7ubj)}(hhh](h)}(h5``void ()(struct uart_port *port, unsigned char ch)``h]j)}(hjXh]h1void ()(struct uart_port *port, unsigned char ch)}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMehjSubh)}(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 }(hjnhhhNhNubj)}(h**ch**h]hch}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh directly to the serial }(hjnhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh>. It can and should block until there is space in the TX FIFO.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMghjSubh)}(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:66: ./include/linux/serial_core.hhMjhjSubeh}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMlhjubj)}(hX5``poll_get_char`` ``int ()(struct uart_port *port)`` 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 sleeph](j)}(h``poll_get_char``h]j)}(hjh]h poll_get_char}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMuhjubj)}(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&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhMnhjubh)}(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:66: ./include/linux/serial_core.hhMphjubh)}(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:66: ./include/linux/serial_core.hhMthjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMuhjubeh}(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:66: ./include/linux/serial_core.hhMyhjhhubh)}(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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:66: ./include/linux/serial_core.hhK&hjhhubeh}(h]uart-opsah ]h"]uart_opsah$]h&]uh1hhhhhhhhK@ubh)}(hhh](h)}(hOther functionsh]hOther functions}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhhhhhKFubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_write_wakeup (C function)c.uart_write_wakeuphNtauh1jhjkhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chKpubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhjhKpubj)}(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&]jjuh1jhjhhhjhKpubhdesc_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)}j jsbc.uart_write_wakeupasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubhdesc_sig_punctuation)}(h*h]h*}(hj/hhhNhNubah}(h]h ]pah"]h$]h&]uh1j-hjubj)}(hporth]hport}(hj>hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKpubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjhhhjhKpubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjhKphjhhubjB)}(hhh]h)}(hschedule write processingh]hschedule write processing}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chKfhjehhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKpubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jj}jj~jjuh1jhhhjkhNhNubj)}(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)}(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:72: ./drivers/tty/serial/serial_core.chKjhjubj)}(hhh]j)}(h0``struct uart_port *port`` port to be processed h](j)}(h``struct uart_port *port``h]j)}(hjh]hstruct uart_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chKghjubj)}(hhh]h)}(hport to be processedh]hport to be processed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKghjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(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:72: ./drivers/tty/serial/serial_core.chKihjubh)}(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:72: ./drivers/tty/serial/serial_core.chKihjubh)}(h&Locking: **port->lock** should be heldh](h Locking: }(hj hhhNhNubj)}(h**port->lock**h]h port->lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh should be held}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chKnhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j uart_update_timeout (C function)c.uart_update_timeouthNtauh1jhjkhhhNhNubj)}(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](j)}(hvoidh]hvoid}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMubj)}(h h]h }(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjFhhhjXhMubj)}(huart_update_timeouth]j)}(huart_update_timeouth]huart_update_timeout}(hjkhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjgubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjFhhhjXhMubj)}(h?(struct uart_port *port, unsigned int cflag, unsigned int baud)h](j)}(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&] refdomainjvreftypej  reftargetjmodnameN classnameNjj)}j]j)}j jmsbc.uart_update_timeoutasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj.)}(hj1h]h*}(hjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int cflagh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hcflagh]hcflag}(hj1hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int baudh](j)}(hunsignedh]hunsigned}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjFubj)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjthhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjFubj)}(hbaudh]hbaud}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjFhhhjXhMubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjBhhhjXhMubah}(h]j=ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjXhMhj?hhubjB)}(hhh]h)}(h(update per-port frame timing informationh]h(update per-port frame timing information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhj?hhhjXhMubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jj}jj~jjuh1jhhhjkhNhNubj)}(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:72: ./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:72: ./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)}(hj&h]hunsigned int cflag}(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:72: ./drivers/tty/serial/serial_core.chMhj ubj)}(hhh]h)}(htermios cflag valueh]htermios cflag value}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(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}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhjYubj)}(hhh]h)}(hspeed of the porth]hspeed of the port}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(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:72: ./drivers/tty/serial/serial_core.chMhjubh)}(hSet the **port** frame timing information from which the FIFO timeout value is derived. The **cflag** value should reflect the actual hardware settings as number of bits, parity, stop bits and baud rate is taken into account here.h](hSet the }(hjhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhL frame timing information from which the FIFO timeout value is derived. The }(hjhhhNhNubj)}(h **cflag**h]hcflag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh value should reflect the actual hardware settings as number of bits, parity, stop bits and baud rate is taken into account here.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./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:72: ./drivers/tty/serial/serial_core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_get_baud_rate (C function)c.uart_get_baud_ratehNtauh1jhjkhhhNhNubj)}(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](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMubj)}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhj.hMubj)}(hinth]hint}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj.hMubj)}(h h]h }(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhj.hMubj)}(huart_get_baud_rateh]j)}(huart_get_baud_rateh]huart_get_baud_rate}(hj]hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjYubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjhhhj.hMubj)}(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}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjuubh)}(hhh]j)}(h uart_porth]h uart_port}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetjmodnameN classnameNjj)}j]j)}j j_sbc.uart_get_baud_rateasbuh1hhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjuubj.)}(hj1h]h*}(hjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjuubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubj)}(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}(hj hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetj modnameN classnameNjj)}j]jc.uart_get_baud_rateasbuh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj.)}(hj1h]h*}(hj5hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(htermiosh]htermios}(hjBhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubj)}(hconst struct ktermios *oldh](j)}(hconsth]hconst}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjihhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjWubj)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjWubh)}(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_rateasbuh1hhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjWubj.)}(hj1h]h*}(hjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjWubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubj)}(hunsigned int minh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(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&]noemphjjuh1jhjqubj)}(hunsigned int maxh](j)}(hunsignedh]hunsigned}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj4ubj)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj4ubj)}(hmaxh]hmax}(hjphhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj.hMubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjhhhj.hMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj.hMhjhhubjB)}(hhh]h)}(h&return baud rate for a particular porth]h&return baud rate for a particular port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj.hMubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jj}jj~jjuh1jhhhjkhNhNubj)}(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:72: ./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:72: ./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)}(hj h]hstruct ktermios *termios}(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:72: ./drivers/tty/serial/serial_core.chMhj ubj)}(hhh]h)}(hdesired termios settingsh]hdesired termios settings}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj) hMhj* ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj) hMhjubj)}(h9``const struct ktermios *old`` old termios (or ``NULL``) h](j)}(h``const struct ktermios *old``h]j)}(hjM h]hconst struct ktermios *old}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhjG ubj)}(hhh]h)}(hold termios (or ``NULL``)h](hold termios (or }(hjf hhhNhNubj)}(h``NULL``h]hNULL}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf ubh)}(hjf hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjb hMhjc ubah}(h]h ]h"]h$]h&]uh1jhjG ubeh}(h]h ]h"]h$]h&]uh1jhjb hMhjubj)}(h2``unsigned int min`` minimum acceptable baud rate h](j)}(h``unsigned int min``h]j)}(hj h]hunsigned int min}(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:72: ./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:72: ./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:72: ./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:72: ./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 }(hjC!hhhNhNubj)}(h**old**h]hold}(hjK!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC!ubhc termios setting. If it’s still invalid, we try 9600 baud. If that is also invalid 0 is returned.}(hjC!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./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 }(hjd!hhhNhNubj)}(h **termios**h]htermios}(hjl!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd!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”).}(hjd!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhjubh)}(hLocking: caller dependenth]hLocking: caller dependent}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_get_divisor (C function)c.uart_get_divisorhNtauh1jhjkhhhNhNubj)}(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](j)}(hunsignedh]hunsigned}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM;ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj!hhhj!hM;ubj)}(hinth]hint}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj!hM;ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj!hhhj!hM;ubj)}(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!hM;ubj)}(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)}j j!sbc.uart_get_divisorasbuh1hhj "ubj)}(h h]h }(hjK"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj "ubj.)}(hj1h]h*}(hjY"hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj "ubj)}(hporth]hport}(hjf"hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj "ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"ubj)}(hunsigned int baudh](j)}(hunsignedh]hunsigned}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj{"ubj)}(hinth]hint}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj{"ubj)}(hbaudh]hbaud}(hj"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)}(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:72: ./drivers/tty/serial/serial_core.chM/hj"hhubah}(h]h ]h"]h$]h&]uh1jAhj!hhhj!hM;ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j"j}j"j~jjuh1jhhhjkhNhNubj)}(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:72: ./drivers/tty/serial/serial_core.chM3hj"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:72: ./drivers/tty/serial/serial_core.chM0hj#ubj)}(hhh]h)}(h'uart_port structure describing the porth]h'uart_port structure describing the port}(hj;#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7#hM0hj8#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj7#hM0hj#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&]uh1jhjY#ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM1hjU#ubj)}(hhh]h)}(hdesired baud rateh]hdesired baud rate}(hjt#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjp#hM1hjq#ubah}(h]h ]h"]h$]h&]uh1jhjU#ubeh}(h]h ]h"]h$]h&]uh1jhjp#hM1hj#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:72: ./drivers/tty/serial/serial_core.chM3hj"ubh)}(h[Calculate the divisor (baud_base / baud) for the specified **baud**, appropriately rounded.h](h;Calculate the divisor (baud_base / baud) for the specified }(hj#hhhNhNubj)}(h**baud**h]hbaud}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh, appropriately rounded.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./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:72: ./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:72: ./drivers/tty/serial/serial_core.chM9hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_get_lsr_info (C function)c.uart_get_lsr_infohNtauh1jhjkhhhNhNubj)}(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](j)}(hinth]hint}(hj $hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./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}(hjH$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD$ubj)}(h h]h }(hjU$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjD$ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjf$hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjc$ubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetjh$modnameN classnameNjj)}j]j)}j j.$sbc.uart_get_lsr_infoasbuh1hhjD$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjD$ubj.)}(hj1h]h*}(hj$hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjD$ubj)}(httyh]htty}(hj$hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjD$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]j$c.uart_get_lsr_infoasbuh1hhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubj.)}(hj1h]h*}(hj%hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj$ubj)}(hstateh]hstate}(hj%hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj@$ubj)}(hunsigned int __user *valueh](j)}(hunsignedh]hunsigned}(hj*%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&%ubj)}(h h]h }(hj8%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&%ubj)}(hinth]hint}(hjF%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&%ubj)}(h h]h }(hjT%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&%ubh__user}(hj&%hhhNhNubj)}(h h]h }(hjf%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&%ubj.)}(hj1h]h*}(hjt%hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj&%ubj)}(hvalueh]hvalue}(hj%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}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM#hj%hhubah}(h]h ]h"]h$]h&]uh1jAhj$hhhj$hM(ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j%j}j%j~jjuh1jhhhjkhNhNubj)}(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:72: ./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:72: ./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:72: ./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:72: ./drivers/tty/serial/serial_core.chM'hjX&ubj)}(hhh]h)}(hreturned modem valueh]hreturned modem value}(hjw&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM&hjt&ubah}(h]h ]h"]h$]h&]uh1jhjX&ubeh}(h]h ]h"]h$]h&]uh1jhjs&hM'hj%ubeh}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_console_write (C function)c.uart_console_writehNtauh1jhjkhhhNhNubj)}(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](j)}(hvoidh]hvoid}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMIubj)}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&hhhj&hMIubj)}(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&hMIubj)}(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)}j j&sbc.uart_console_writeasbuh1hhj&ubj)}(h h]h }(hj3'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&ubj.)}(hj1h]h*}(hjA'hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj&ubj)}(hporth]hport}(hjN'hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(h const char *sh](j)}(hj]h]hconst}(hjg'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc'ubj)}(h h]h }(hjt'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjc'ubj)}(hcharh]hchar}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjc'ubj.)}(hj1h]h*}(hj'hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjc'ubj)}(hsh]hs}(hj'hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjc'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(hunsigned int counth](j)}(hunsignedh]hunsigned}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubj)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'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](j)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj#(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj(ubj.)}(h(h]h(}(hj1(hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj(ubj.)}(hj1h]h*}(hj?(hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj(ubj)}(hputcharh]hputchar}(hjL(hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj(ubj.)}(h)h]h)}(hjZ(hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj(ubj.)}(hj3(h]h(}(hjh(hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj(ubj)}(hjh]hstruct}(hju(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/'c.uart_console_writeasbuh1hhj(ubj.)}(hj1h]h*}(hj(hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj(ubj.)}(h,h]h,}(hj(hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj(ubj)}(hunsignedh]hunsigned}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj(ubj)}(hcharh]hchar}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj.)}(hj\(h]h)}(hj)hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubeh}(h]h ]h"]h$]h&]jjuh1jhj&hhhj&hMIubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj&hhhj&hMIubah}(h]j&ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj&hMIhj&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:72: ./drivers/tty/serial/serial_core.chMChj*)hhubah}(h]h ]h"]h$]h&]uh1jAhj&hhhj&hMIubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jE)j}jE)j~jjuh1jhhhjkhNhNubj)}(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)}(hjO)h]h Parameters}(hjQ)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM)ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMGhjI)ubj)}(hhh](j)}(h9``struct uart_port *port`` the port to write the message h](j)}(h``struct uart_port *port``h]j)}(hjn)h]hstruct uart_port *port}(hjp)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl)ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMDhjh)ubj)}(hhh]h)}(hthe port to write the messageh]hthe port to write the message}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMDhj)ubah}(h]h ]h"]h$]h&]uh1jhjh)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMDhje)ubj)}(h&``const char *s`` array of characters h](j)}(h``const char *s``h]j)}(hj)h]h const char *s}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMEhj)ubj)}(hhh]h)}(harray of charactersh]harray of characters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMEhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMEhje)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:72: ./drivers/tty/serial/serial_core.chMFhj)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)hMFhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMFhje)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:72: ./drivers/tty/serial/serial_core.chMHhj*ubj)}(hhh]h)}(h#function to write character to porth]h#function to write character to port}(hj2*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMGhj/*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj.*hMHhje)ubeh}(h]h ]h"]h$]h&]uh1jhjI)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_get_console (C function)c.uart_get_consolehNtauh1jhjkhhhNhNubj)}(hhh](j)}(hYstruct uart_port * uart_get_console (struct uart_port *ports, int nr, struct console *co)h]j)}(hWstruct uart_port *uart_get_console(struct uart_port *ports, int nr, struct console *co)h](j)}(hjh]hstruct}(hjs*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo*hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMaubj)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjo*hhhj*hMaubh)}(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)}j uart_get_consolesbc.uart_get_consoleasbuh1hhjo*hhhj*hMaubj)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjo*hhhj*hMaubj.)}(hj1h]h*}(hj*hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjo*hhhj*hMaubj)}(huart_get_consoleh]j)}(hj*h]huart_get_console}(hj*hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj*ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjo*hhhj*hMaubj)}(h5(struct uart_port *ports, int nr, struct console *co)h](j)}(hstruct uart_port *portsh](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*c.uart_get_consoleasbuh1hhj*ubj)}(h h]h }(hj)+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj*ubj.)}(hj1h]h*}(hj7+hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj*ubj)}(hportsh]hports}(hjD+hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(hint nrh](j)}(hinth]hint}(hj]+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY+ubj)}(h h]h }(hjk+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjY+ubj)}(hnrh]hnr}(hjy+hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjY+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(hstruct console *coh](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)}(hconsoleh]hconsole}(hj+hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetj+modnameN classnameNjj)}j]j*c.uart_get_consoleasbuh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+ubj.)}(hj1h]h*}(hj+hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj+ubj)}(hcoh]hco}(hj+hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubeh}(h]h ]h"]h$]h&]jjuh1jhjo*hhhj*hMaubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjk*hhhj*hMaubah}(h]jf*ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj*hMahjh*hhubjB)}(hhh]h)}(hget uart port for consoleh]hget uart port for console}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMXhj,hhubah}(h]h ]h"]h$]h&]uh1jAhjh*hhhj*hMaubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j+,j}j+,j~jjuh1jhhhjkhNhNubj)}(hXm**Parameters** ``struct uart_port *ports`` ports to search in ``int nr`` number of **ports** ``struct console *co`` console to search for **Return** uart_port for the console **co** **Description** Check whether an invalid uart number has been specified (as **co->index**), and if so, search for the first available port that does have console support.h](h)}(h**Parameters**h]j)}(hj5,h]h Parameters}(hj7,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3,ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM\hj/,ubj)}(hhh](j)}(h/``struct uart_port *ports`` ports to search in h](j)}(h``struct uart_port *ports``h]j)}(hjT,h]hstruct uart_port *ports}(hjV,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR,ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMYhjN,ubj)}(hhh]h)}(hports to search inh]hports to search in}(hjm,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji,hMYhjj,ubah}(h]h ]h"]h$]h&]uh1jhjN,ubeh}(h]h ]h"]h$]h&]uh1jhji,hMYhjK,ubj)}(h``int nr`` number of **ports** h](j)}(h ``int nr``h]j)}(hj,h]hint nr}(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:72: ./drivers/tty/serial/serial_core.chMZhj,ubj)}(hhh]h)}(hnumber of **ports**h](h number of }(hj,hhhNhNubj)}(h **ports**h]hports}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1hhj,hMZhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMZhjK,ubj)}(h-``struct console *co`` console to search for h](j)}(h``struct console *co``h]j)}(hj,h]hstruct console *co}(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:72: ./drivers/tty/serial/serial_core.chM[hj,ubj)}(hhh]h)}(hconsole to search forh]hconsole to search for}(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[hjK,ubeh}(h]h ]h"]h$]h&]uh1jhj/,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:72: ./drivers/tty/serial/serial_core.chM]hj/,ubh)}(h uart_port for the console **co**h](huart_port for the console }(hj%-hhhNhNubj)}(h**co**h]hco}(hj--hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%-ubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM\hj/,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:72: ./drivers/tty/serial/serial_core.chM^hj/,ubh)}(hCheck whether an invalid uart number has been specified (as **co->index**), and if so, search for the first available port that does have console support.h](hindex**h]h co->index}(hjb-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ-ubhQ), and if so, search for the first available port that does have console support.}(hjZ-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM^hj/,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j uart_parse_earlycon (C function)c.uart_parse_earlyconhNtauh1jhjkhhhNhNubj)}(hhh](j)}(h_int uart_parse_earlycon (char *p, unsigned char *iotype, resource_size_t *addr, char **options)h]j)}(h^int uart_parse_earlycon(char *p, unsigned char *iotype, resource_size_t *addr, char **options)h](j)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-hhhj-hMubj)}(huart_parse_earlyconh]j)}(huart_parse_earlyconh]huart_parse_earlycon}(hj-hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj-ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj-hhhj-hMubj)}(hG(char *p, unsigned char *iotype, resource_size_t *addr, char **options)h](j)}(hchar *ph](j)}(hcharh]hchar}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubj.)}(hj1h]h*}(hj-hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj-ubj)}(hj:h]hp}(hj.hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-ubj)}(hunsigned char *iotypeh](j)}(hunsignedh]hunsigned}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj'.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj)}(hcharh]hchar}(hj5.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hjC.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj.)}(hj1h]h*}(hjQ.hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj.ubj)}(hiotypeh]hiotype}(hj^.hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-ubj)}(hresource_size_t *addrh](h)}(hhh]j)}(hresource_size_th]hresource_size_t}(hjz.hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjw.ubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetj|.modnameN classnameNjj)}j]j)}j j-sbc.uart_parse_earlyconasbuh1hhjs.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjs.ubj.)}(hj1h]h*}(hj.hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjs.ubj)}(haddrh]haddr}(hj.hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjs.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-ubj)}(hchar **optionsh](j)}(hcharh]hchar}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj.)}(hj1h]h*}(hj.hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj.ubj.)}(hj1h]h*}(hj.hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj.ubj)}(hoptionsh]hoptions}(hj/hhhNhNubah}(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&]jjj3uh1jj4j5hj-hhhj-hMubah}(h]j-ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj-hMhj-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:72: ./drivers/tty/serial/serial_core.chMshj+/hhubah}(h]h ]h"]h$]h&]uh1jAhj-hhhj-hMubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jF/j}jF/j~jjuh1jhhhjkhNhNubj)}(hX**Parameters** ``char *p`` ptr to 2nd field (ie., just beyond ',') ``unsigned char *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)}(hjP/h]h Parameters}(hjR/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN/ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMwhjJ/ubj)}(hhh](j)}(h:``char *p`` ptr to 2nd field (ie., just beyond ',') h](j)}(h ``char *p``h]j)}(hjo/h]hchar *p}(hjq/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm/ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMthji/ubj)}(hhh]h)}(h-ptr to 2nd field (ie., just beyond ',')h]h1ptr to 2nd field (ie., just beyond ‘,’)}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMthj/ubah}(h]h ]h"]h$]h&]uh1jhji/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMthjf/ubj)}(h7``unsigned char *iotype`` ptr for decoded iotype (out) h](j)}(h``unsigned char *iotype``h]j)}(hj/h]hunsigned char *iotype}(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:72: ./drivers/tty/serial/serial_core.chMuhj/ubj)}(hhh]h)}(hptr for decoded iotype (out)h]hptr for decoded iotype (out)}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMuhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMuhjf/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:72: ./drivers/tty/serial/serial_core.chMvhj/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/hMvhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMvhjf/ubj)}(hJ``char **options`` ptr for field; ``NULL`` if not present (out) h](j)}(h``char **options``h]j)}(hj0h]hchar **options}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMwhj0ubj)}(hhh]h)}(h6ptr for field; ``NULL`` if not present (out)h](hptr for field; }(hj30hhhNhNubj)}(h``NULL``h]hNULL}(hj;0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj30ubh if not present (out)}(hj30hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/0hMwhj00ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj/0hMwhjf/ubeh}(h]h ]h"]h$]h&]uh1jhjJ/ubh)}(h**Description**h]j)}(hjg0h]h Description}(hji0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje0ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMyhjJ/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)}(hj0h]hLearlycon=,io|mmio|mmio16|mmio32|mmio32be|mmio32native,,}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMzhj0ubah}(h]h ]h"]h$]h&]uh1jKhj0ubjL)}(hLconsole=,io|mmio|mmio16|mmio32|mmio32be|mmio32native,, h]h)}(hKconsole=,io|mmio|mmio16|mmio32|mmio32be|mmio32native,,h]hKconsole=,io|mmio|mmio16|mmio32|mmio32be|mmio32native,,}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hM{hj0ubah}(h]h ]h"]h$]h&]uh1jKhj0ubeh}(h]h ]h"]h$]h&]jkj1uh1jFhj0hMzhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hM{hj}0ubj)}(h\The optional form: * earlycon=,0x, * console=,0x, h](j)}(hThe optional form:h]hThe optional form:}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhj0ubj)}(hhh]jG)}(hhh](jL)}(h"earlycon=,0x,h]h)}(hj0h]h"earlycon=,0x,}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM~hj0ubah}(h]h ]h"]h$]h&]uh1jKhj0ubjL)}(h"console=,0x, h]h)}(h!console=,0x,h]h!console=,0x,}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj 1ubah}(h]h ]h"]h$]h&]uh1jKhj0ubeh}(h]h ]h"]h$]h&]jkj1uh1jFhj1hM~hj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj}0ubeh}(h]h ]h"]h$]h&]uh1jhjJ/ubh)}(h?is also accepted; the returned **iotype** will be ``UPIO_MEM``.h](his also accepted; the returned }(hj<1hhhNhNubj)}(h **iotype**h]hiotype}(hjD1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<1ubh will be }(hj<1hhhNhNubj)}(h ``UPIO_MEM``h]hUPIO_MEM}(hjV1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<1ubh.}(hj<1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhjJ/ubh)}(h **Return**h]j)}(hjq1h]hReturn}(hjs1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo1ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhjJ/ubh)}(h&0 on success or -``EINVAL`` on failureh](h0 on success or -}(hj1hhhNhNubj)}(h ``EINVAL``h]hEINVAL}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh on failure}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhjJ/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_parse_options (C function)c.uart_parse_optionshNtauh1jhjkhhhNhNubj)}(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](j)}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMubj)}(h h]h }(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj1hhhj1hMubj)}(huart_parse_optionsh]j)}(huart_parse_optionsh]huart_parse_options}(hj1hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj1ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj1hhhj1hMubj)}(hC(const char *options, int *baud, int *parity, int *bits, int *flow)h](j)}(hconst char *optionsh](j)}(hj]h]hconst}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2ubj)}(hcharh]hchar}(hj 2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hj.2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2ubj.)}(hj1h]h*}(hj<2hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj2ubj)}(hoptionsh]hoptions}(hjI2hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubj)}(h int *baudh](j)}(hinth]hint}(hjb2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^2ubj)}(h h]h }(hjp2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj^2ubj.)}(hj1h]h*}(hj~2hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj^2ubj)}(hbaudh]hbaud}(hj2hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj^2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubj)}(h int *parityh](j)}(hinth]hint}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2ubj.)}(hj1h]h*}(hj2hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj2ubj)}(hparityh]hparity}(hj2hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubj)}(h int *bitsh](j)}(hinth]hint}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2ubj.)}(hj1h]h*}(hj3hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj2ubj)}(hbitsh]hbits}(hj3hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubj)}(h int *flowh](j)}(hinth]hint}(hj(3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$3ubj)}(h h]h }(hj63hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$3ubj.)}(hj1h]h*}(hjD3hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj$3ubj)}(hflowh]hflow}(hjQ3hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj$3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubeh}(h]h ]h"]h$]h&]jjuh1jhj1hhhj1hMubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj1hhhj1hMubah}(h]j1ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj1hMhj1hhubjB)}(hhh]h)}(h0Parse serial port baud/parity/bits/flow control.h]h0Parse serial port baud/parity/bits/flow control.}(hj{3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhjx3hhubah}(h]h ]h"]h$]h&]uh1jAhj1hhhj1hMubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j3j}j3j~jjuh1jhhhjkhNhNubj)}(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)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhj3ubj)}(hhh](j)}(h1``const char *options`` pointer to option string h](j)}(h``const char *options``h]j)}(hj3h]hconst char *options}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhj3ubj)}(hhh]h)}(hpointer to option stringh]hpointer to option string}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj3ubj)}(h>``int *baud`` pointer to an 'int' variable for the baud rate. h](j)}(h ``int *baud``h]j)}(hj3h]h int *baud}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhj3ubj)}(hhh]h)}(h/pointer to an 'int' variable for the baud rate.h]h3pointer to an ‘int’ variable for the baud rate.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 4hMhj 4ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj 4hMhj3ubj)}(h=``int *parity`` pointer to an 'int' variable for the parity. h](j)}(h``int *parity``h]j)}(hj.4h]h int *parity}(hj04hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,4ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhj(4ubj)}(hhh]h)}(h,pointer to an 'int' variable for the parity.h]h0pointer to an ‘int’ variable for the parity.}(hjG4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC4hMhjD4ubah}(h]h ]h"]h$]h&]uh1jhj(4ubeh}(h]h ]h"]h$]h&]uh1jhjC4hMhj3ubj)}(hH``int *bits`` pointer to an 'int' variable for the number of data bits. h](j)}(h ``int *bits``h]j)}(hjg4h]h int *bits}(hji4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje4ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhja4ubj)}(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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|4hMhj}4ubah}(h]h ]h"]h$]h&]uh1jhja4ubeh}(h]h ]h"]h$]h&]uh1jhj|4hMhj3ubj)}(hK``int *flow`` pointer to an 'int' variable for the flow control character. h](j)}(h ``int *flow``h]j)}(hj4h]h int *flow}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhj4ubj)}(hhh]h)}(h, eg: 115200n8rh]huart_parse_options() decodes a string containing the serial console options. The format of the string is , eg: 115200n8r}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_set_options (C function)c.uart_set_optionshNtauh1jhjkhhhNhNubj)}(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](j)}(hinth]hint}(hj 5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMubj)}(h h]h }(hj/5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj5hhhj.5hMubj)}(huart_set_optionsh]j)}(huart_set_optionsh]huart_set_options}(hjA5hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj=5ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj5hhhj.5hMubj)}(hV(struct uart_port *port, struct console *co, int baud, int parity, int bits, int flow)h](j)}(hstruct uart_port *porth](j)}(hjh]hstruct}(hj]5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY5ubj)}(h h]h }(hjj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjY5ubh)}(hhh]j)}(h uart_porth]h uart_port}(hj{5hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjx5ubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetj}5modnameN classnameNjj)}j]j)}j jC5sbc.uart_set_optionsasbuh1hhjY5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjY5ubj.)}(hj1h]h*}(hj5hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjY5ubj)}(hporth]hport}(hj5hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjY5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjU5ubj)}(hstruct console *coh](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj5ubh)}(hhh]j)}(hconsoleh]hconsole}(hj5hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetj5modnameN classnameNjj)}j]j5c.uart_set_optionsasbuh1hhj5ubj)}(h h]h }(hj 6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj5ubj.)}(hj1h]h*}(hj6hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj5ubj)}(hcoh]hco}(hj&6hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjU5ubj)}(hint baudh](j)}(hinth]hint}(hj?6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;6ubj)}(h h]h }(hjM6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;6ubj)}(hbaudh]hbaud}(hj[6hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj;6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjU5ubj)}(h int parityh](j)}(hinth]hint}(hjt6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjp6ubj)}(hparityh]hparity}(hj6hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjp6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjU5ubj)}(hint bitsh](j)}(hinth]hint}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6ubj)}(hbitsh]hbits}(hj6hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjU5ubj)}(hint flowh](j)}(hinth]hint}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6ubj)}(hflowh]hflow}(hj6hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjU5ubeh}(h]h ]h"]h$]h&]jjuh1jhj5hhhj.5hMubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj5hhhj.5hMubah}(h]j5ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj.5hMhj5hhubjB)}(hhh]h)}(h#setup the serial console parametersh]h#setup the serial console parameters}(hj$7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhj!7hhubah}(h]h ]h"]h$]h&]uh1jAhj5hhhj.5hMubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j<7j}j<7j~jjuh1jhhhjkhNhNubj)}(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)}(hjF7h]h Parameters}(hjH7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD7ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhj@7ubj)}(hhh](j)}(hK``struct uart_port *port`` pointer to the serial ports uart_port structure h](j)}(h``struct uart_port *port``h]j)}(hje7h]hstruct uart_port *port}(hjg7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc7ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhj_7ubj)}(hhh]h)}(h/pointer to the serial ports uart_port structureh]h/pointer to the serial ports uart_port structure}(hj~7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjz7hMhj{7ubah}(h]h ]h"]h$]h&]uh1jhj_7ubeh}(h]h ]h"]h$]h&]uh1jhjz7hMhj\7ubj)}(h'``struct console *co`` console pointer h](j)}(h``struct console *co``h]j)}(hj7h]hstruct console *co}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhj7ubj)}(hhh]h)}(hconsole pointerh]hconsole pointer}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj\7ubj)}(h``int baud`` baud rate h](j)}(h ``int baud``h]j)}(hj7h]hint baud}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhj7ubj)}(hhh]h)}(h baud rateh]h baud rate}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj\7ubj)}(hD``int parity`` parity character - 'n' (none), 'o' (odd), 'e' (even) h](j)}(h``int parity``h]j)}(hj8h]h int parity}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhj 8ubj)}(hhh]h)}(h4parity character - 'n' (none), 'o' (odd), 'e' (even)h]h@parity character - ‘n’ (none), ‘o’ (odd), ‘e’ (even)}(hj)8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%8hMhj&8ubah}(h]h ]h"]h$]h&]uh1jhj 8ubeh}(h]h ]h"]h$]h&]uh1jhj%8hMhj\7ubj)}(h!``int bits`` number of data bits h](j)}(h ``int bits``h]j)}(hjI8h]hint bits}(hjK8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG8ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhjC8ubj)}(hhh]h)}(hnumber of data bitsh]hnumber of data bits}(hjb8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^8hMhj_8ubah}(h]h ]h"]h$]h&]uh1jhjC8ubeh}(h]h ]h"]h$]h&]uh1jhj^8hMhj\7ubj)}(h0``int flow`` flow control character - 'r' (rts) h](j)}(h ``int flow``h]j)}(hj8h]hint flow}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhj|8ubj)}(hhh]h)}(h"flow control character - 'r' (rts)h]h&flow control character - ‘r’ (rts)}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj|8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj\7ubeh}(h]h ]h"]h$]h&]uh1jhj@7ubh)}(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:72: ./drivers/tty/serial/serial_core.chMhj@7ubh)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMhj@7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!uart_register_driver (C function)c.uart_register_driverhNtauh1jhjkhhhNhNubj)}(hhh](j)}(h2int uart_register_driver (struct uart_driver *drv)h]j)}(h1int uart_register_driver(struct uart_driver *drv)h](j)}(hinth]hint}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj8hhhj9hM ubj)}(huart_register_driverh]j)}(huart_register_driverh]huart_register_driver}(hj#9hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj9ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj8hhhj9hM ubj)}(h(struct uart_driver *drv)h]j)}(hstruct uart_driver *drvh](j)}(hjh]hstruct}(hj?9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;9ubj)}(h h]h }(hjL9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;9ubh)}(hhh]j)}(h uart_driverh]h uart_driver}(hj]9hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjZ9ubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetj_9modnameN classnameNjj)}j]j)}j j%9sbc.uart_register_driverasbuh1hhj;9ubj)}(h h]h }(hj}9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;9ubj.)}(hj1h]h*}(hj9hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj;9ubj)}(hdrvh]hdrv}(hj9hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj;9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj79ubah}(h]h ]h"]h$]h&]jjuh1jhj8hhhj9hM ubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj8hhhj9hM ubah}(h]j8ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj9hM hj8hhubjB)}(hhh]h)}(h*register a driver with the uart core layerh]h*register a driver with the uart core layer}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hj9hhubah}(h]h ]h"]h$]h&]uh1jAhj8hhhj9hM ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j9j}j9j~jjuh1jhhhjkhNhNubj)}(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)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hj9ubj)}(hhh]j)}(h7``struct uart_driver *drv`` low level driver structure h](j)}(h``struct uart_driver *drv``h]j)}(hj:h]hstruct uart_driver *drv}(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:72: ./drivers/tty/serial/serial_core.chM hj9ubj)}(hhh]h)}(hlow level driver structureh]hlow level driver structure}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hM hj:ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj:hM hj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubh)}(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:72: ./drivers/tty/serial/serial_core.chM hj9ubh)}(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.}(hjT:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hj9ubh)}(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.}(hjc:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hj9ubh)}(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}(hjv:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr:ubh should be }(hjr:hhhNhNubj)}(h``NULL``h]hNULL}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr:ubhk, and the per-port structures should be registered using uart_add_one_port() after this call has succeeded.}(hjr:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hj9ubh)}(h"Locking: none, Interrupts: enabledh]h"Locking: none, Interrupts: enabled}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#uart_unregister_driver (C function)c.uart_unregister_driverhNtauh1jhjkhhhNhNubj)}(hhh](j)}(h5void uart_unregister_driver (struct uart_driver *drv)h]j)}(h4void uart_unregister_driver(struct uart_driver *drv)h](j)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM, ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:hhhj:hM, ubj)}(huart_unregister_driverh]j)}(huart_unregister_driverh]huart_unregister_driver}(hj:hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj:ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj:hhhj:hM, ubj)}(h(struct uart_driver *drv)h]j)}(hstruct uart_driver *drvh](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_driverh]h uart_driver}(hj+;hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj(;ubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetj-;modnameN classnameNjj)}j]j)}j j:sbc.uart_unregister_driverasbuh1hhj ;ubj)}(h h]h }(hjK;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ;ubj.)}(hj1h]h*}(hjY;hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj ;ubj)}(hdrvh]hdrv}(hjf;hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj ;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubah}(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)}(h(remove a driver from the uart core layerh]h(remove a driver from the uart core layer}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM# hj;hhubah}(h]h ]h"]h$]h&]uh1jAhj:hhhj:hM, ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j;j}j;j~jjuh1jhhhjkhNhNubj)}(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)}(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:72: ./drivers/tty/serial/serial_core.chM' hj;ubj)}(hhh]j)}(h7``struct uart_driver *drv`` low level driver structure h](j)}(h``struct uart_driver *drv``h]j)}(hj;h]hstruct uart_driver *drv}(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:72: ./drivers/tty/serial/serial_core.chM$ hj;ubj)}(hhh]h)}(hlow level driver structureh]hlow level driver structure}(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;ubah}(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:72: ./drivers/tty/serial/serial_core.chM& hj;ubh)}(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. }(hj"<hhhNhNubj)}(h **drv->port**h]h drv->port}(hj*<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"<ubh is }(hj"<hhhNhNubj)}(h``NULL``h]hNULL}(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:72: ./drivers/tty/serial/serial_core.chM& hj;ubh)}(h"Locking: none, Interrupts: enabledh]h"Locking: none, Interrupts: enabled}(hjU<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM* hj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_match_port (C function)c.uart_match_porthNtauh1jhjkhhhNhNubj)}(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](j)}(hboolh]hbool}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj<hhhj<hM ubj)}(huart_match_porth]j)}(huart_match_porth]huart_match_port}(hj<hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj<ubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj<hhhj<hM ubj)}(h>(const struct uart_port *port1, const struct uart_port *port2)h](j)}(hconst struct uart_port *port1h](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  reftargetj<modnameN classnameNjj)}j]j)}j j<sbc.uart_match_portasbuh1hhj<ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj<ubj.)}(hj1h]h*}(hj(=hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj<ubj)}(hport1h]hport1}(hj5=hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubj)}(hconst struct uart_port *port2h](j)}(hj]h]hconst}(hjN=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ=ubj)}(h h]h }(hj[=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjJ=ubj)}(hjh]hstruct}(hji=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ=ubj)}(h h]h }(hjv=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjJ=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=c.uart_match_portasbuh1hhjJ=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjJ=ubj.)}(hj1h]h*}(hj=hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjJ=ubj)}(hport2h]hport2}(hj=hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjJ=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]jw<ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj<hM hjy<hhubjB)}(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:72: ./drivers/tty/serial/serial_core.chM hj=hhubah}(h]h ]h"]h$]h&]uh1jAhjy<hhhj<hM ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j>j}j>j~jjuh1jhhhjkhNhNubj)}(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:72: ./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:72: ./drivers/tty/serial/serial_core.chM hj%>ubj)}(hhh]h)}(h first porth]h first port}(hjD>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@>hM hjA>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)}(hjd>h]hconst struct uart_port *port2}(hjf>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb>ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hj^>ubj)}(hhh]h)}(h second porth]h second port}(hj}>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy>hM hjz>ubah}(h]h ]h"]h$]h&]uh1jhj^>ubeh}(h]h ]h"]h$]h&]uh1jhjy>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:72: ./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.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#uart_handle_dcd_change (C function)c.uart_handle_dcd_changehNtauh1jhjkhhhNhNubj)}(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](j)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMn ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj>hhhj>hMn 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>hMn 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&]uh1jhjhhhj>hMn ubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj>hhhj>hMn ubah}(h]j>ah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj>hMn 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:72: ./drivers/tty/serial/serial_core.chMh hj?hhubah}(h]h ]h"]h$]h&]uh1jAhj>hhhj>hMn ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|j?j}j?j~jjuh1jhhhjkhNhNubj)}(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:72: ./drivers/tty/serial/serial_core.chMl 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:72: ./drivers/tty/serial/serial_core.chMi hj@ubj)}(hhh]h)}(h%uart_port structure for the open porth]h%uart_port structure for the open port}(hj2@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@ubj)}(h*``bool active`` new carrier detect status h](j)}(h``bool active``h]j)}(hjR@h]h bool active}(hjT@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP@ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chMj hjL@ubj)}(hhh]h)}(hnew carrier detect statush]hnew carrier detect status}(hjk@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg@hMj hjh@ubah}(h]h ]h"]h$]h&]uh1jhjL@ubeh}(h]h ]h"]h$]h&]uh1jhjg@hMj 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:72: ./drivers/tty/serial/serial_core.chMl 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:72: ./drivers/tty/serial/serial_core.chMl hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#uart_handle_cts_change (C function)c.uart_handle_cts_changehNtauh1jhjkhhhNhNubj)}(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](j)}(hvoidh]hvoid}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj@hhhj@hM 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@hM ubj)}(h&(struct uart_port *uport, bool active)h](j)}(hstruct uart_port *uporth](j)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Aubj)}(h h]h }(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj Aubh)}(hhh]j)}(h uart_porth]h uart_port}(hj-AhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj*Aubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetj/AmodnameN classnameNjj)}j]j)}j j@sbc.uart_handle_cts_changeasbuh1hhj Aubj)}(h h]h }(hjMAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj Aubj.)}(hj1h]h*}(hj[AhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj Aubj)}(huporth]huport}(hjhAhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj Aubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubj)}(h bool activeh](j)}(hj<h]hbool}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}Aubj)}(h h]h }(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj}Aubj)}(hactiveh]hactive}(hjAhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj}Aubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubeh}(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)}(h&handle a change of clear-to-send stateh]h&handle a change of clear-to-send state}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hjAhhubah}(h]h ]h"]h$]h&]uh1jAhj@hhhj@hM ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jAj}jAj~jjuh1jhhhjkhNhNubj)}(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)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hjAubj)}(hhh](j)}(hB``struct uart_port *uport`` uart_port structure for the open port h](j)}(h``struct uart_port *uport``h]j)}(hjBh]hstruct uart_port *uport}(hj BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hjBubj)}(hhh]h)}(h%uart_port structure for the open porth]h%uart_port structure for the open port}(hj BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhM hjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM hjAubj)}(h)``bool active`` new clear-to-send status h](j)}(h``bool active``h]j)}(hj@Bh]h bool active}(hjBBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>Bubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hj:Bubj)}(hhh]h)}(hnew clear-to-send statush]hnew clear-to-send status}(hjYBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUBhM hjVBubah}(h]h ]h"]h$]h&]uh1jhj:Bubeh}(h]h ]h"]h$]h&]uh1jhjUBhM hjAubeh}(h]h ]h"]h$]h&]uh1jhjAubh)}(h**Description**h]j)}(hj{Bh]h Description}(hj}BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyBubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hjAubh)}(hCaller must hold uport->lock.h]hCaller must hold uport->lock.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"uart_try_toggle_sysrq (C function)c.uart_try_toggle_sysrqhNtauh1jhjkhhhNhNubj)}(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](j)}(hj<h]hbool}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjBhhhjBhM ubj)}(huart_try_toggle_sysrqh]j)}(huart_try_toggle_sysrqh]huart_try_toggle_sysrq}(hjBhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjBubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjBhhhjBhM ubj)}(h(struct uart_port *port, u8 ch)h](j)}(hstruct uart_port *porth](j)}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hj ChhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjBubh)}(hhh]j)}(h uart_porth]h uart_port}(hjChhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetjCmodnameN classnameNjj)}j]j)}j jBsbc.uart_try_toggle_sysrqasbuh1hhjBubj)}(h h]h }(hj:ChhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjBubj.)}(hj1h]h*}(hjHChhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjBubj)}(hporth]hport}(hjUChhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjBubj)}(hu8 chh](h)}(hhh]j)}(hu8h]hu8}(hjqChhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjnCubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetjsCmodnameN classnameNjj)}j]j6Cc.uart_try_toggle_sysrqasbuh1hhjjCubj)}(h h]h }(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjjCubj)}(hchh]hch}(hjChhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjjCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjBubeh}(h]h ]h"]h$]h&]jjuh1jhjBhhhjBhM ubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjBhhhjBhM ubah}(h]jBah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjBhM hjBhhubjB)}(hhh]h)}(hEnables SysRq from serial lineh]hEnables SysRq from serial line}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hjChhubah}(h]h ]h"]h$]h&]uh1jAhjBhhhjBhM ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jCj}jCj~jjuh1jhhhjkhNhNubj)}(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)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hjCubj)}(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)}(hjDh]hstruct uart_port *port}(hj DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hjDubj)}(hhh]h)}(h1uart_port structure where char(s) after BREAK meth]h1uart_port structure where char(s) after BREAK met}(hj!DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhM hjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhM hjCubj)}(h=``u8 ch`` new character in the sequence after received BREAK h](j)}(h ``u8 ch``h]j)}(hjADh]hu8 ch}(hjCDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Dubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hj;Dubj)}(hhh]h)}(h2new character in the sequence after received BREAKh]h2new character in the sequence after received BREAK}(hjZDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVDhM hjWDubah}(h]h ]h"]h$]h&]uh1jhj;Dubeh}(h]h ]h"]h$]h&]uh1jhjVDhM hjCubeh}(h]h ]h"]h$]h&]uh1jhjCubh)}(h**Description**h]j)}(hj|Dh]h Description}(hj~DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzDubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hjCubh)}(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).}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hjCubh)}(h **Return**h]j)}(hjDh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hjCubh)}(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}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh if }(hjDhhhNhNubj)}(h**ch**h]hch}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubhC is out of enabling sequence and should be handled some other way, }(hjDhhhNhNubj)}(h``true``h]htrue}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh if }hjDsbj)}(h**ch**h]hch}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh was consumed.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:72: ./drivers/tty/serial/serial_core.chM hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](juart_port_tx_limited (C macro)c.uart_port_tx_limitedhNtauh1jhjkhhhNhNubj)}(hhh](j)}(huart_port_tx_limitedh]j)}(huart_port_tx_limitedh]j)}(huart_port_tx_limitedh]j)}(hj&Eh]huart_port_tx_limited}(hj0EhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj,Eubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhj(Ehhhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMubah}(h]h ]h"]h$]h&]jjj3uh1jj4j5hj$EhhhjCEhMubah}(h]jEah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjCEhMhj!EhhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhj!EhhhjCEhMubeh}(h]h ](jvmacroeh"]h$]h&]j{jvj|j\Ej}j\Ej~jjuh1jhhhjkhNhNubh)}(hG``uart_port_tx_limited (port, ch, count, tx_ready, put_char, tx_done)``h]j)}(hjbEh]hCuart_port_tx_limited (port, ch, count, tx_ready, put_char, tx_done)}(hjdEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`Eubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjkhhubj)}(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}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjEubah}(h]h ]h"]h$]h&]uh1jKhj|Eubah}(h]h ]h"]h$]h&]jkjluh1jFhjEhMhjxEubah}(h]h ]h"]h$]h&]uh1jhjEhMhjkhhubj)}(hX**Parameters** ``port`` uart port ``ch`` variable to store a character to be written to the HW ``count`` a limit of characters to send ``tx_ready`` can HW accept more data function ``put_char`` function to write a character ``tx_done`` function to call after the loop is done **Description** This helper transmits characters from the xmit buffer to the hardware using **put_char\(\)**. It does so until **count** characters are sent and while **tx_ready** evaluates to true. The expression in macro parameters shall be designed as follows: * **tx_ready:** should evaluate to true if the HW can accept more data to be sent. This parameter can be ``true``, which means the HW is always ready. * **put_char:** shall write **ch** to the device of **port**. * **tx_done:** when the write loop is done, this can perform arbitrary action before potential invocation of ops->stop_tx() happens. If the driver does not need to do anything, use e.g. ({}). For all of them, **port->lock** is held, interrupts are locally disabled and the expressions must not sleep. **Return** the number of characters in the xmit buffer when done.h](h)}(h**Parameters**h]j)}(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:81: ./include/linux/serial_core.hhMhjEubj)}(hhh](j)}(h``port`` uart port h](j)}(h``port``h]j)}(hjEh]hport}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjEubj)}(hhh]h)}(h uart porth]h uart port}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjEubj)}(h=``ch`` variable to store a character to be written to the HW h](j)}(h``ch``h]j)}(hjFh]hch}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjEubj)}(hhh]h)}(h5variable to store a character to be written to the HWh]h5variable to store a character to be written to the HW}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjEubj)}(h(``count`` a limit of characters to send h](j)}(h ``count``h]j)}(hj;Fh]hcount}(hj=FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Fubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhj5Fubj)}(hhh]h)}(ha limit of characters to sendh]ha limit of characters to send}(hjTFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPFhMhjQFubah}(h]h ]h"]h$]h&]uh1jhj5Fubeh}(h]h ]h"]h$]h&]uh1jhjPFhMhjEubj)}(h.``tx_ready`` can HW accept more data function h](j)}(h ``tx_ready``h]j)}(hjtFh]htx_ready}(hjvFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrFubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjnFubj)}(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&]uh1jhjnFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjEubj)}(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:81: ./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&]uh1jhjFhMhjEubj)}(h4``tx_done`` function to call after the loop is done h](j)}(h ``tx_done``h]j)}(hjFh]htx_done}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjFubj)}(hhh]h)}(h'function to call after the loop is doneh]h'function to call after the loop is done}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjEubeh}(h]h ]h"]h$]h&]uh1jhjEubh)}(h**Description**h]j)}(hj!Gh]h Description}(hj#GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjEubh)}(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 }(hj7GhhhNhNubj)}(h**put_char\(\)**h]h put_char()}(hj?GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7Gubh. It does so until }(hj7GhhhNhNubj)}(h **count**h]hcount}(hjQGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7Gubh characters are sent and while }(hj7GhhhNhNubj)}(h **tx_ready**h]htx_ready}(hjcGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7Gubh evaluates to true.}(hj7GhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjEubj)}(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:}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjGubj)}(hhh]jG)}(hhh](jL)}(h**tx_ready:** should evaluate to true if the HW can accept more data to be sent. This parameter can be ``true``, which means the HW is always ready.h]h)}(h**tx_ready:** should evaluate to true if the HW can accept more data to be sent. This parameter can be ``true``, which means the HW is always ready.h](j)}(h **tx_ready:**h]h tx_ready:}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubhZ should evaluate to true if the HW can accept more data to be sent. This parameter can be }(hjGhhhNhNubj)}(h``true``h]htrue}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh%, which means the HW is always ready.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjGubah}(h]h ]h"]h$]h&]uh1jKhjGubjL)}(h;**put_char:** shall write **ch** to the device of **port**.h]h)}(hjGh](j)}(h **put_char:**h]h put_char:}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh shall write }(hjGhhhNhNubj)}(h**ch**h]hch}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh to the device of }(hjGhhhNhNubj)}(h**port**h]hport}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjGubah}(h]h ]h"]h$]h&]uh1jKhjGubjL)}(h**tx_done:** when the write loop is done, this can perform arbitrary action before potential invocation of ops->stop_tx() happens. If the driver does not need to do anything, use e.g. ({}). h]h)}(h**tx_done:** when the write loop is done, this can perform arbitrary action before potential invocation of ops->stop_tx() happens. If the driver does not need to do anything, use e.g. ({}).h](j)}(h **tx_done:**h]htx_done:}(hj#HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh 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. ({}).}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjHubah}(h]h ]h"]h$]h&]uh1jKhjGubeh}(h]h ]h"]h$]h&]jkj1uh1jFhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhj|Gubah}(h]h ]h"]h$]h&]uh1jhjEubh)}(hlFor all of them, **port->lock** is held, interrupts are locally disabled and the expressions must not sleep.h](hFor all of them, }(hjZHhhhNhNubj)}(h**port->lock**h]h port->lock}(hjbHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZHubhM is held, interrupts are locally disabled and the expressions must not sleep.}(hjZHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjEubh)}(h **Return**h]j)}(hj}Hh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{Hubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjEubh)}(h6the number of characters in the xmit buffer when done.h]h6the number of characters in the xmit buffer when done.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj)}(Mhhh]h}(h]h ]h"]h$]h&]entries](juart_port_tx (C macro)c.uart_port_txhNtauh1jhjkhhhNhNubj)}(hhh](j)}(h uart_port_txh]j)}(h uart_port_txh]j)}(h uart_port_txh]j)}(hjHh]h uart_port_tx}(hjHhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjHubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjHhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMubah}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjHhhhjHhMubah}(h]jHah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjHhMhjHhhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhjHhhhjHhMubeh}(h]h ](jvmacroeh"]h$]h&]j{jvj|jHj}jHj~jjuh1jhhhjkhNhNubh)}(h/``uart_port_tx (port, ch, tx_ready, put_char)``h]j)}(hjHh]h+uart_port_tx (port, ch, tx_ready, put_char)}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjkhhubj)}(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}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjIubah}(h]h ]h"]h$]h&]uh1jKhjIubah}(h]h ]h"]h$]h&]jkjluh1jFhj'IhMhjIubah}(h]h ]h"]h$]h&]uh1jhj'IhMhjkhhubj)}(hX**Parameters** ``port`` uart port ``ch`` variable to store a character to be written to the HW ``tx_ready`` can HW accept more data function ``put_char`` function to write a character **Description** See uart_port_tx_limited() for more details.h](h)}(h**Parameters**h]j)}(hj@Ih]h Parameters}(hjBIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>Iubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhj:Iubj)}(hhh](j)}(h``port`` uart port h](j)}(h``port``h]j)}(hj_Ih]hport}(hjaIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]Iubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjYIubj)}(hhh]h)}(h uart porth]h uart port}(hjxIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjtIhMhjuIubah}(h]h ]h"]h$]h&]uh1jhjYIubeh}(h]h ]h"]h$]h&]uh1jhjtIhMhjVIubj)}(h=``ch`` variable to store a character to be written to the HW h](j)}(h``ch``h]j)}(hjIh]hch}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjIubj)}(hhh]h)}(h5variable to store a character to be written to the HWh]h5variable to store a character to be written to the HW}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjVIubj)}(h.``tx_ready`` can HW accept more data function h](j)}(h ``tx_ready``h]j)}(hjIh]htx_ready}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjIubj)}(hhh]h)}(h can HW accept more data functionh]h can HW accept more data function}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjVIubj)}(h+``put_char`` function to write a character h](j)}(h ``put_char``h]j)}(hj Jh]hput_char}(hj JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhjJubj)}(hhh]h)}(hfunction to write a characterh]hfunction to write a character}(hj#JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhj Jubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjVIubeh}(h]h ]h"]h$]h&]uh1jhj:Iubh)}(h**Description**h]j)}(hjEJh]h Description}(hjGJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCJubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhj:Iubh)}(h,See uart_port_tx_limited() for more details.h]h,See uart_port_tx_limited() for more details.}(hj[JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:81: ./include/linux/serial_core.hhMhj:Iubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubeh}(h]other-functionsah ]h"]other functionsah$]h&]uh1hhhhhhhhKFubh)}(hhh](h)}(h Other notesh]h Other notes}(hj|JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyJhhhhhKUubh)}(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:}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhjyJhhubj)}(hcstruct my_port { struct uart_port port; int my_stuff; };h]hcstruct my_port { struct uart_port port; int my_stuff; };}hjJsbah}(h]h ]h"]h$]h&]jjuh1jhhhK]hjyJhhubeh}(h] other-notesah ]h"] other notesah$]h&]uh1hhhhhhhhKUubh)}(hhh](h)}(hModem control lines via GPIOh]hModem control lines via GPIO}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhhhhhKcubh)}(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.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKehjJhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jmctrl_gpio_set (C function)c.mctrl_gpio_sethNtauh1jhjJhhhNhNubj)}(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](j)}(hvoidh]hvoid}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chK4ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjJhhhjJhK4ubj)}(hmctrl_gpio_seth]j)}(hmctrl_gpio_seth]hmctrl_gpio_set}(hjKhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjKubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjJhhhjJhK4ubj)}(h/(struct mctrl_gpios *gpios, unsigned int mctrl)h](j)}(hstruct mctrl_gpios *gpiosh](j)}(hjh]hstruct}(hj#KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hj0KhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjKubh)}(hhh]j)}(h mctrl_gpiosh]h mctrl_gpios}(hjAKhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj>Kubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetjCKmodnameN classnameNjj)}j]j)}j j Ksbc.mctrl_gpio_setasbuh1hhjKubj)}(h h]h }(hjaKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjKubj.)}(hj1h]h*}(hjoKhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjKubj)}(hgpiosh]hgpios}(hj|KhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjKubj)}(hunsigned int mctrlh](j)}(hunsignedh]hunsigned}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjKubj)}(hinth]hint}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjKubj)}(hmctrlh]hmctrl}(hjKhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjKubeh}(h]h ]h"]h$]h&]jjuh1jhjJhhhjJhK4ubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjJhhhjJhK4ubah}(h]jJah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjJhK4hjJhhubjB)}(hhh]h)}(h"set gpios according to mctrl stateh]h"set gpios according to mctrl state}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chK.hjKhhubah}(h]h ]h"]h$]h&]uh1jAhjJhhhjJhK4ubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jLj}jLj~jjuh1jhhhjJhNhNubj)}(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)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chK2hjLubj)}(hhh](j)}(h+``struct mctrl_gpios *gpios`` gpios to set h](j)}(h``struct mctrl_gpios *gpios``h]j)}(hj8Lh]hstruct mctrl_gpios *gpios}(hj:LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Lubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chK/hj2Lubj)}(hhh]h)}(h gpios to seth]h gpios to set}(hjQLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMLhK/hjNLubah}(h]h ]h"]h$]h&]uh1jhj2Lubeh}(h]h ]h"]h$]h&]uh1jhjMLhK/hj/Lubj)}(h$``unsigned int mctrl`` state to set h](j)}(h``unsigned int mctrl``h]j)}(hjqLh]hunsigned int mctrl}(hjsLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoLubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chK0hjkLubj)}(hhh]h)}(h state to seth]h state to set}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhK0hjLubah}(h]h ]h"]h$]h&]uh1jhjkLubeh}(h]h ]h"]h$]h&]uh1jhjLhK0hj/Lubeh}(h]h ]h"]h$]h&]uh1jhjLubh)}(h**Description**h]j)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chK2hjLubh)}(h+Set the gpios according to the mctrl state.h]h+Set the gpios according to the mctrl state.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chK2hjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjJhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j mctrl_gpio_to_gpiod (C function)c.mctrl_gpio_to_gpiodhNtauh1jhjJhhhNhNubj)}(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}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chKOubj)}(h h]h }(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjLhhhjLhKOubh)}(hhh]j)}(h gpio_desch]h gpio_desc}(hjMhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj Mubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetjMmodnameN classnameNjj)}j]j)}j mctrl_gpio_to_gpiodsbc.mctrl_gpio_to_gpiodasbuh1hhjLhhhjLhKOubj)}(h h]h }(hj1MhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjLhhhjLhKOubj.)}(hj1h]h*}(hj?MhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjLhhhjLhKOubj)}(hmctrl_gpio_to_gpiodh]j)}(hj.Mh]hmctrl_gpio_to_gpiod}(hjPMhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjLMubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjLhhhjLhKOubj)}(h5(struct mctrl_gpios *gpios, enum mctrl_gpio_idx gidx)h](j)}(hstruct mctrl_gpios *gpiosh](j)}(hjh]hstruct}(hjkMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgMubj)}(h h]h }(hjxMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjgMubh)}(hhh]j)}(h mctrl_gpiosh]h mctrl_gpios}(hjMhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetjMmodnameN classnameNjj)}j]j,Mc.mctrl_gpio_to_gpiodasbuh1hhjgMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjgMubj.)}(hj1h]h*}(hjMhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjgMubj)}(hgpiosh]hgpios}(hjMhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjgMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjcMubj)}(henum mctrl_gpio_idx gidxh](j)}(henumh]henum}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjMubh)}(hhh]j)}(hmctrl_gpio_idxh]hmctrl_gpio_idx}(hjMhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetjMmodnameN classnameNjj)}j]j,Mc.mctrl_gpio_to_gpiodasbuh1hhjMubj)}(h h]h }(hjNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjMubj)}(hgidxh]hgidx}(hj&NhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjcMubeh}(h]h ]h"]h$]h&]jjuh1jhjLhhhjLhKOubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjLhhhjLhKOubah}(h]jLah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjLhKOhjLhhubjB)}(hhh]h)}(h$obtain gpio_desc of modem line indexh]h$obtain gpio_desc of modem line index}(hjPNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chKJhjMNhhubah}(h]h ]h"]h$]h&]uh1jAhjLhhhjLhKOubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jhNj}jhNj~jjuh1jhhhjJhNhNubj)}(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)}(hjrNh]h Parameters}(hjtNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chKNhjlNubj)}(hhh](j)}(h1``struct mctrl_gpios *gpios`` gpios to look into h](j)}(h``struct mctrl_gpios *gpios``h]j)}(hjNh]hstruct mctrl_gpios *gpios}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chKKhjNubj)}(hhh]h)}(hgpios to look intoh]hgpios to look into}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhKKhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhKKhjNubj)}(h5``enum mctrl_gpio_idx gidx`` index of the modem line h](j)}(h``enum mctrl_gpio_idx gidx``h]j)}(hjNh]henum mctrl_gpio_idx gidx}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chKLhjNubj)}(hhh]h)}(hindex of the modem lineh]hindex of the modem line}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhKLhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhKLhjNubeh}(h]h ]h"]h$]h&]uh1jhjlNubh)}(h **Return**h]j)}(hjOh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chKNhjlNubh)}(h:the gpio_desc structure associated to the modem line indexh]h:the gpio_desc structure associated to the modem line index}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chKMhjlNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjJhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jmctrl_gpio_get (C function)c.mctrl_gpio_gethNtauh1jhjJhhhNhNubj)}(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](j)}(hunsignedh]hunsigned}(hjJOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFOhhhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chKaubj)}(h h]h }(hjYOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjFOhhhjXOhKaubj)}(hinth]hint}(hjgOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFOhhhjXOhKaubj)}(h h]h }(hjuOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjFOhhhjXOhKaubj)}(hmctrl_gpio_geth]j)}(hmctrl_gpio_geth]hmctrl_gpio_get}(hjOhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjOubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjFOhhhjXOhKaubj)}(h0(struct mctrl_gpios *gpios, unsigned int *mctrl)h](j)}(hstruct mctrl_gpios *gpiosh](j)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjOubh)}(hhh]j)}(h mctrl_gpiosh]h mctrl_gpios}(hjOhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetjOmodnameN classnameNjj)}j]j)}j jOsbc.mctrl_gpio_getasbuh1hhjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjOubj.)}(hj1h]h*}(hjOhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjOubj)}(hgpiosh]hgpios}(hjOhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubj)}(hunsigned int *mctrlh](j)}(hunsignedh]hunsigned}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hj#PhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjPubj)}(hinth]hint}(hj1PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hj?PhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjPubj.)}(hj1h]h*}(hjMPhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjPubj)}(hmctrlh]hmctrl}(hjZPhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubeh}(h]h ]h"]h$]h&]jjuh1jhjFOhhhjXOhKaubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjBOhhhjXOhKaubah}(h]j=Oah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjXOhKahj?OhhubjB)}(hhh]h)}(h#update mctrl with the gpios values.h]h#update mctrl with the gpios values.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chKZhjPhhubah}(h]h ]h"]h$]h&]uh1jAhj?OhhhjXOhKaubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jPj}jPj~jjuh1jhhhjJhNhNubj)}(h**Parameters** ``struct mctrl_gpios *gpios`` gpios to get the info from ``unsigned int *mctrl`` mctrl to set **Return** modified mctrl (the same value as in **mctrl**) **Description** Update mctrl with the gpios values.h](h)}(h**Parameters**h]j)}(hjPh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chK^hjPubj)}(hhh](j)}(h9``struct mctrl_gpios *gpios`` gpios to get the info from h](j)}(h``struct mctrl_gpios *gpios``h]j)}(hjPh]hstruct mctrl_gpios *gpios}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chK[hjPubj)}(hhh]h)}(hgpios to get the info fromh]hgpios to get the info from}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhK[hjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhK[hjPubj)}(h%``unsigned int *mctrl`` mctrl to set h](j)}(h``unsigned int *mctrl``h]j)}(hjPh]hunsigned int *mctrl}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chK\hjPubj)}(hhh]h)}(h mctrl to seth]h mctrl to set}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhK\hjQubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjQhK\hjPubeh}(h]h ]h"]h$]h&]uh1jhjPubh)}(h **Return**h]j)}(hj9Qh]hReturn}(hj;QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7Qubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chK^hjPubh)}(h/modified mctrl (the same value as in **mctrl**)h](h%modified mctrl (the same value as in }(hjOQhhhNhNubj)}(h **mctrl**h]hmctrl}(hjWQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOQubh)}(hjOQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chK]hjPubh)}(h**Description**h]j)}(hjrQh]h Description}(hjtQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpQubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chK_hjPubh)}(h#Update mctrl with the gpios values.h]h#Update mctrl with the gpios values.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chK_hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjJhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jmctrl_gpio_init (C function)c.mctrl_gpio_inithNtauh1jhjJhhhNhNubj)}(hhh](j)}(hOstruct mctrl_gpios * mctrl_gpio_init (struct uart_port *port, unsigned int idx)h]j)}(hMstruct mctrl_gpios *mctrl_gpio_init(struct uart_port *port, unsigned int idx)h](j)}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chKubj)}(h h]h }(hjQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjQhhhjQhKubh)}(hhh]j)}(h mctrl_gpiosh]h mctrl_gpios}(hjQhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetjQmodnameN classnameNjj)}j]j)}j mctrl_gpio_initsbc.mctrl_gpio_initasbuh1hhjQhhhjQhKubj)}(h h]h }(hjQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjQhhhjQhKubj.)}(hj1h]h*}(hjRhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjQhhhjQhKubj)}(hmctrl_gpio_inith]j)}(hjQh]hmctrl_gpio_init}(hjRhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjRubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjQhhhjQhKubj)}(h*(struct uart_port *port, unsigned int idx)h](j)}(hstruct uart_port *porth](j)}(hjh]hstruct}(hj1RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-Rubj)}(h h]h }(hj>RhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-Rubh)}(hhh]j)}(h uart_porth]h uart_port}(hjORhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjLRubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetjQRmodnameN classnameNjj)}j]jQc.mctrl_gpio_initasbuh1hhj-Rubj)}(h h]h }(hjmRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-Rubj.)}(hj1h]h*}(hj{RhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj-Rubj)}(hporth]hport}(hjRhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj-Rubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)Rubj)}(hunsigned int idxh](j)}(hunsignedh]hunsigned}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjRubj)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjRubj)}(hidxh]hidx}(hjRhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)Rubeh}(h]h ]h"]h$]h&]jjuh1jhjQhhhjQhKubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjQhhhjQhKubah}(h]jQah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjQhKhjQhhubjB)}(hhh]h)}(hinitialize uart gpiosh]hinitialize uart gpios}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chKhjShhubah}(h]h ]h"]h$]h&]uh1jAhjQhhhjQhKubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jSj}jSj~jjuh1jhhhjJhNhNubj)}(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)}(hj%Sh]h Parameters}(hj'ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#Subah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chKhjSubj)}(hhh](j)}(h8``struct uart_port *port`` port to initialize gpios for h](j)}(h``struct uart_port *port``h]j)}(hjDSh]hstruct uart_port *port}(hjFShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBSubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chKhj>Subj)}(hhh]h)}(hport to initialize gpios forh]hport to initialize gpios for}(hj]ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYShKhjZSubah}(h]h ]h"]h$]h&]uh1jhj>Subeh}(h]h ]h"]h$]h&]uh1jhjYShKhj;Subj)}(h@``unsigned int idx`` index of the gpio in the **port**'s device h](j)}(h``unsigned int idx``h]j)}(hj}Sh]hunsigned int idx}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{Subah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chKhjwSubj)}(hhh]h)}(h*index of the gpio in the **port**'s deviceh](hindex of the gpio in the }(hjShhhNhNubj)}(h**port**h]hport}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh ’s device}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjShKhjSubah}(h]h ]h"]h$]h&]uh1jhjwSubeh}(h]h ]h"]h$]h&]uh1jhjShKhj;Subeh}(h]h ]h"]h$]h&]uh1jhjSubh)}(h**Description**h]j)}(hjSh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chKhjSubh)}(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. }(hjShhhNhNubhtitle_reference)}(h`devm_*`h]hdevm_*}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jShjSubh 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.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chKhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjJhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!mctrl_gpio_enable_ms (C function)c.mctrl_gpio_enable_mshNtauh1jhjJhhhNhNubj)}(hhh](j)}(h5void mctrl_gpio_enable_ms (struct mctrl_gpios *gpios)h]j)}(h4void mctrl_gpio_enable_ms(struct mctrl_gpios *gpios)h](j)}(hvoidh]hvoid}(hj#ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chMubj)}(h h]h }(hj2ThhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjThhhj1ThMubj)}(hmctrl_gpio_enable_msh]j)}(hmctrl_gpio_enable_msh]hmctrl_gpio_enable_ms}(hjDThhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj@Tubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjThhhj1ThMubj)}(h(struct mctrl_gpios *gpios)h]j)}(hstruct mctrl_gpios *gpiosh](j)}(hjh]hstruct}(hj`ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\Tubj)}(h h]h }(hjmThhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj\Tubh)}(hhh]j)}(h mctrl_gpiosh]h mctrl_gpios}(hj~ThhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj{Tubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetjTmodnameN classnameNjj)}j]j)}j jFTsbc.mctrl_gpio_enable_msasbuh1hhj\Tubj)}(h h]h }(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj\Tubj.)}(hj1h]h*}(hjThhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj\Tubj)}(hgpiosh]hgpios}(hjThhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj\Tubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjXTubah}(h]h ]h"]h$]h&]jjuh1jhjThhhj1ThMubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjThhhj1ThMubah}(h]jTah ](j9j:eh"]h$]h&]j>j?)j@huh1jhj1ThMhjThhubjB)}(hhh]h)}(h3enable irqs and handling of changes to the ms linesh]h3enable irqs and handling of changes to the ms lines}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chMhjThhubah}(h]h ]h"]h$]h&]uh1jAhjThhhj1ThMubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jTj}jTj~jjuh1jhhhjJhNhNubj)}(h?**Parameters** ``struct mctrl_gpios *gpios`` gpios to enableh](h)}(h**Parameters**h]j)}(hjUh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chMhjTubj)}(hhh]j)}(h-``struct mctrl_gpios *gpios`` gpios to enableh](j)}(h``struct mctrl_gpios *gpios``h]j)}(hj$Uh]hstruct mctrl_gpios *gpios}(hj&UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"Uubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chMhjUubj)}(hhh]h)}(hgpios to enableh]hgpios to enable}(hj=UhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chMhj:Uubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhj9UhMhjUubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjJhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'mctrl_gpio_disable_ms_sync (C function)c.mctrl_gpio_disable_ms_synchNtauh1jhjJhhhNhNubj)}(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](j)}(hvoidh]hvoid}(hj~UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzUhhhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chMGubj)}(h h]h }(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjzUhhhjUhMGubj)}(hmctrl_gpio_disable_ms_synch]j)}(hmctrl_gpio_disable_ms_synch]hmctrl_gpio_disable_ms_sync}(hjUhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjUubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjzUhhhjUhMGubj)}(h(struct mctrl_gpios *gpios)h]j)}(hstruct mctrl_gpios *gpiosh](j)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjUubh)}(hhh]j)}(h mctrl_gpiosh]h mctrl_gpios}(hjUhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetjUmodnameN classnameNjj)}j]j)}j jUsbc.mctrl_gpio_disable_ms_syncasbuh1hhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjUubj.)}(hj1h]h*}(hjVhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjUubj)}(hgpiosh]hgpios}(hjVhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubah}(h]h ]h"]h$]h&]jjuh1jhjzUhhhjUhMGubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjvUhhhjUhMGubah}(h]jqUah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjUhMGhjsUhhubjB)}(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}(hj>VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chMChj;Vhhubah}(h]h ]h"]h$]h&]uh1jAhjsUhhhjUhMGubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jVVj}jVVj~jjuh1jhhhjJhNhNubj)}(h@**Parameters** ``struct mctrl_gpios *gpios`` gpios to disableh](h)}(h**Parameters**h]j)}(hj`Vh]h Parameters}(hjbVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Vubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chMGhjZVubj)}(hhh]j)}(h.``struct mctrl_gpios *gpios`` gpios to disableh](j)}(h``struct mctrl_gpios *gpios``h]j)}(hjVh]hstruct mctrl_gpios *gpios}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}Vubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chMIhjyVubj)}(hhh]h)}(hgpios to disableh]hgpios to disable}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chMEhjVubah}(h]h ]h"]h$]h&]uh1jhjyVubeh}(h]h ]h"]h$]h&]uh1jhjVhMIhjvVubah}(h]h ]h"]h$]h&]uh1jhjZVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjJhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*mctrl_gpio_disable_ms_no_sync (C function)c.mctrl_gpio_disable_ms_no_synchNtauh1jhjJhhhNhNubj)}(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](j)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chMRubj)}(h h]h }(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjVhhhjVhMRubj)}(hmctrl_gpio_disable_ms_no_synch]j)}(hmctrl_gpio_disable_ms_no_synch]hmctrl_gpio_disable_ms_no_sync}(hjVhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjVubah}(h]h ](j(j)eh"]h$]h&]jjuh1jhjVhhhjVhMRubj)}(h(struct mctrl_gpios *gpios)h]j)}(hstruct mctrl_gpios *gpiosh](j)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hj#WhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjWubh)}(hhh]j)}(h mctrl_gpiosh]h mctrl_gpios}(hj4WhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj1Wubah}(h]h ]h"]h$]h&] refdomainjvreftypej  reftargetj6WmodnameN classnameNjj)}j]j)}j jVsbc.mctrl_gpio_disable_ms_no_syncasbuh1hhjWubj)}(h h]h }(hjTWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjWubj.)}(hj1h]h*}(hjbWhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjWubj)}(hgpiosh]hgpios}(hjoWhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubah}(h]h ]h"]h$]h&]jjuh1jhjVhhhjVhMRubeh}(h]h ]h"]h$]h&]jjj3uh1jj4j5hjVhhhjVhMRubah}(h]jVah ](j9j:eh"]h$]h&]j>j?)j@huh1jhjVhMRhjVhhubjB)}(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}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chMNhjWhhubah}(h]h ]h"]h$]h&]uh1jAhjVhhhjVhMRubeh}(h]h ](jvfunctioneh"]h$]h&]j{jvj|jWj}jWj~jjuh1jhhhjJhNhNubj)}(h@**Parameters** ``struct mctrl_gpios *gpios`` gpios to disableh](h)}(h**Parameters**h]j)}(hjWh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chMRhjWubj)}(hhh]j)}(h.``struct mctrl_gpios *gpios`` gpios to disableh](j)}(h``struct mctrl_gpios *gpios``h]j)}(hjWh]hstruct mctrl_gpios *gpios}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chMThjWubj)}(hhh]h)}(hgpios to disableh]hgpios to disable}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/driver-api/serial/driver:103: ./drivers/tty/serial/serial_mctrl_gpio.chMPhjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhMThjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjJhhhNhNubeh}(h]modem-control-lines-via-gpioah ]h"]modem control lines via gpioah$]h&]uh1hhhhhhhhKcubeh}(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_handlerjMXerror_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}(j(Xj%Xjj jDjAjjjhjejvJjsJjJjJj XjXu nametypes}(j(XjjDjjhjvJjJj Xuh}(j%Xhj hjAjjjGjejjjjsJjkjjj=jBjjj!j!j#j$j&j&jf*jk*j-j-j1j1j5j5j8j8j:j:jw<j|<j>j>j@j@jBjBjEj$EjHjHjJjyJjXjJjJjJjLjLj=OjBOjQjQjTjTjqUjvUjVjVu 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.