summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/nv/include/nvddk_uart.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-tegra/nv/include/nvddk_uart.h')
-rw-r--r--arch/arm/mach-tegra/nv/include/nvddk_uart.h627
1 files changed, 627 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/nv/include/nvddk_uart.h b/arch/arm/mach-tegra/nv/include/nvddk_uart.h
new file mode 100644
index 000000000000..68e98839c563
--- /dev/null
+++ b/arch/arm/mach-tegra/nv/include/nvddk_uart.h
@@ -0,0 +1,627 @@
+/*
+ * Copyright (c) 2007-2009 NVIDIA Corporation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of the NVIDIA Corporation nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/**
+ * @file
+ * <b>NVIDIA Driver Development Kit: UART Driver Interface</b>
+ *
+ * @b Description: This file defines the interface to the UART driver.
+ */
+
+#ifndef INCLUDED_NVDDK_UART_H
+#define INCLUDED_NVDDK_UART_H
+
+/**
+ * @defgroup nvddk_uart UART Driver Interface
+ *
+ * This is the Universal Asynchronous Receiver Transmitter (UART) interface.
+ * There may be more than one UART in the SOC, which communicate with other
+ * systems. This interface provides the communication channel configuration,
+ * basic data transfer (receive and transmit) and hardware flow control (modem
+ * flow control).
+ * This driver does not support any software protocols, like IrDA SIR protocol.
+ *
+ * @ingroup nvddk_modules
+ * @{
+ */
+
+#include "nvcommon.h"
+#include "nvos.h"
+#include "nvrm_init.h"
+#include "nvrm_module.h"
+
+#if defined(__cplusplus)
+extern "C"
+{
+#endif
+
+/** Opaque context to the NvDdkUartRec interface.
+ */
+typedef struct NvDdkUartRec *NvDdkUartHandle;
+
+
+/**
+ * Defines the UART communication signal configuration for parity bit.
+ */
+typedef enum
+{
+ /// Specifies parity to be none.
+ NvDdkUartParity_None = 0x1,
+ /// Specifies parity to be odd.
+ NvDdkUartParity_Odd,
+ /// Specifies even parity to be even.
+ NvDdkUartParity_Even,
+ /// Ignore -- Forces compilers to make 32-bit enums.
+ NvDdkUartParity_Force32 = 0x7FFFFFFF
+} NvDdkUartParity;
+
+/**
+ * Defines the UART communication signal configuration for stop bit.
+ */
+typedef enum
+{
+ /// Specifies stop bit 1, word length can be 5, 6, 7, or 8.
+ NvDdkUartStopBit_1= 0x1,
+ /// Specifies stop bit 2, word length can be 6, 7, or 8.
+ NvDdkUartStopBit_2,
+ /// Specifies stop bit 1.5, word length should be 5 only.
+ NvDdkUartStopBit_1_5,
+ /// Ignore -- Forces compilers to make 32-bit enums.
+ NvDdkUartStopBit_Force32 = 0x7FFFFFFF
+} NvDdkUartStopBit;
+
+/**
+ * Defines the UART modem signal name to get/set the status/value.
+ */
+typedef enum
+{
+ /// Specifies a modem signal name of RxD.
+ NvDdkUartSignalName_Rxd = 0x1,
+ /// Specifies a modem signal name of TxD.
+ NvDdkUartSignalName_Txd = 0x2,
+ /// Specifies a modem signal name of RTS.
+ NvDdkUartSignalName_Rts = 0x4,
+ /// Specifies a modem signal name of CTS.
+ NvDdkUartSignalName_Cts = 0x8,
+ /// Specifies a modem signal name of DTR.
+ NvDdkUartSignalName_Dtr = 0x10,
+ /// Specifies a modem signal name of DSR.
+ NvDdkUartSignalName_Dsr = 0x20,
+ /// Specifies a modem signal name for ring indicator.
+ NvDdkUartSignalName_Ri = 0x40,
+ /// Specifies a modem signal name for carrier detect.
+ NvDdkUartSignalName_Cd = 0x80,
+ /// Ignore -- Forces compilers to make 32-bit enums.
+ NvDdkUartSignalName_Force32 = 0x7FFFFFFF
+} NvDdkUartSignalName;
+
+/**
+ * Defines the HW flow control signal states and their behavior.
+ * This is applicable for the modem flow control signal, like RTS, CTS, DSR, DTR,
+ * RI, and CD.
+ * The handshake flow control is configured for the RTS and CTS. When RTS and CTS
+ * lines are set for the handshake the driver will transfer the data based on
+ * status of the line.
+ */
+typedef enum
+{
+ /// Disable the flow control. The output signal state will be low.
+ NvDdkUartFlowControl_Disable = 0x1,
+
+ /// Enable the flow control. The output signal state will be high.
+ NvDdkUartFlowControl_Enable,
+
+ /// Enable the handshake of the flow control line.
+ /// This is applicable for the RTS and CTS line.
+ /// For RTS line, when the buffer is full or UART driver is not able to
+ /// receive the data, it will deactivate the line.
+ /// For CTS line, the data is transmitted only when the CTS line is active,
+ /// otherwise it will not send the data.
+ NvDdkUartFlowControl_Handshake,
+ /// Ignore -- Forces compilers to make 32-bit enums.
+ NvDdkUartFlowControl_Force32 = 0x7FFFFFFF
+} NvDdkUartFlowControl;
+
+ /**
+ * Combines the UART port configuration parameter, like baud rate,
+ * parity, data length, stop bit, IrDA modulation, and interfacing type.
+ */
+typedef struct
+{
+ /// Holds the baud rate. Baudrate should be in the bps (bit per second).
+ NvU32 UartBaudRate;
+
+ /// Holds the parity bit. This can be even, odd, or none.
+ NvDdkUartParity UartParityBit;
+
+ /// Holds the data length in number of bits per UART asynchronous frame.
+ /// This is number of bits between start and stop bit of UART asynch frame.
+ /// The valid length are 5,6,7, and 8.
+ NvU8 UartDataLength;
+
+ /// Holds the stop bit.
+ /// The UART controller does not support all stop bits with all data
+ /// lengths (16550 compatible UART).
+ /// The valid combinations are:
+ /// 1 stop bit for data length 5, 6, 7, or 8.
+ /// 1.5 stop bit for data length 5.
+ /// 2 stop bit for data length 6, 7, or 8.
+ NvDdkUartStopBit UartStopBit;
+
+ /// Holds whether IrDA signal modulation is enabled or not.
+ NvBool IsEnableIrdaModulation;
+} NvDdkUartConfiguarations;
+
+/**
+ * Opens the UART channel and creates the handle of UART. This function
+ * allocates the memory/OS resources for the requested UART channel and
+ * returns the handle to the client. The client will call other API by
+ * passing this handle.
+ * This initializes the UART controller.
+ *
+ * @param hDevice Handle to the Rm device that is required by DDK to acquire
+ * the resources from RM.
+ * @param ChannelId Specifies the UART channel ID for which context handle is
+ * required. Valid instance ID start from 0.
+ * @param phUart A pointer to the UART handle where the allocated handle pointer
+ * will be stored.
+ *
+ * @retval NvSuccess Indicates the controller successfully initialized.
+ * @retval NvError_InsufficientMemory Indicates that function fails to allocate
+ * the memory for handle.
+ * @retval NvError_AlreadyOpen Indicates a channel is already open and so it
+ * returns the NULL handle.
+ * @retval NvError_BadValue Indicates that the channel ID is not valid. It may
+ * be more than supported channel ID.
+ * @retval NvError_MemoryMapFailed Indicates that the memory mapping for
+ * controller register failed.
+ * @retval NvError_MutexCreateFailed Indicates that the creation of mutex
+ * failed. Mutex is required to provide the thread safety.
+ * @retval NvError_SemaphoreCreateFailed Indicates that the creation of
+ * semaphore failed. Semaphore is required to provide the synchronous
+ * operation.
+ */
+NvError
+NvDdkUartOpen(
+ NvRmDeviceHandle hDevice,
+ NvU32 ChannelId,
+ NvDdkUartHandle *phUart);
+
+/**
+ * Deinitialize the UART controller and release the UART handle. This
+ * frees the memory/OS resources which is allocated for the UART driver related
+ * to this channel ID. After calling this API by client, client should not call
+ * any other APIs related to this handle.
+ *
+ * @param hUart Handle to the UART which is allocated from Open().
+ */
+void NvDdkUartClose(NvDdkUartHandle hUart);
+
+
+/**
+ * Sets the different UART port configuration. It will set the
+ * baud rate, parity bit, data length, stop bit, line interfacing type, Irda
+ * modulation, flow control. It returns the related error if any of the
+ * parameter is out of range or not supported.
+ *
+ * The baud rate should be less than the supported maximum baudrate.
+ * The UART controller does not support all stop bits with all data lengths
+ * (16550 compatible UART). The valid combinations are:
+ * - 1 stop bit for data length 5, 6, 7, or 8
+ * - 1.5 stop bit for data length 5
+ * - 2 stop bit for data length 6, 7, or 8
+ *
+ * @note It is recommended that client first call the
+ * NvDdkUartGetConfiguration() to get the current setting and change only those
+ * parameters that are required to change. Do not touch the other parameters and
+ * then call this function.
+ *
+ * @param hUart Handle to the UART.
+ * @param pUartDriverConfiguration A pointer to the structure where the settings
+ * are stored.
+ *
+ * @retval NvSuccess Indicates the operation succeeded.
+ * @retval NvError_NotInitialized Indicates that the UART channel is not opened.
+ * @retval NvError_BadValue Indicates that illegal value specified for the
+ * parameter.
+ * The possible cases for this error are:
+ * - The data length is illegal, e.g. it is not 5,6,7, or 8.
+ * - The stop bit restriction is not matching with the data length.
+ * - The baud rate is more than maximum supported baud rate.
+ * @retval NvError_NotSupported There may be many case to return this error.
+ * Possible cases are:
+ * - Requested baudrate is not supported because of the it may be not
+ * possible to set the correct timing related to this baud rate.
+ * - The requested parity bit is not supported.
+ */
+NvError
+NvDdkUartSetConfiguration(
+ NvDdkUartHandle hUart,
+ const NvDdkUartConfiguarations* const pUartDriverConfiguration);
+
+/**
+ * Gets the UART port configuration parameter which is configured.
+ * Client can get the configuration parameter after calling this function.
+ *
+ * @note If client wants to set any port parameter, it is better to first call
+ * this function for getting the default value and then change the desired
+ * parameter with new value and call the NvDdkUartSetConfiguration().
+ *
+ * @param hUart Handle to the UART.
+ * @param pUartDriverConfiguration A pointer to the structure where the
+ * information will be stored.
+ *
+ * @retval NvSuccess Indicates the operation succeeded.
+ * @retval NvError_NotInitialized Indicates that the UART channel is not opened.
+ * @retval NvError_BadValue Indicates that illegal value specified for the
+ * parameter.
+ */
+NvError
+NvDdkUartGetConfiguration(
+ NvDdkUartHandle hUart,
+ NvDdkUartConfiguarations* const pUartDriverConfiguration);
+
+/**
+ * Start the read opeartion from the HW and store the receive data in
+ * the local buffer created locally at the driver level with the buffer size.
+ * This function will create the local buffer for the receive
+ * data as requested by client. The receive data will be stored in this local
+ * buffer if there is no read call from client side and data arrived. When
+ * client makes the read call, it will first copied the data from the local buffer
+ * to the requested buffer and then it will wait for reading the remaining
+ * data (if requested number of bytes was not available on the local buffer).
+ *
+ * It will also signal the semaphore \a hRxEventSema if the number of bytes
+ * available in the local buffer changes from 0 to any value and if there is no
+ * read call. Means if there is no read call and there is no data available on
+ * the local buffer and when data arrives, the data will be copied into the
+ * local buffer and it signals the semaphore. This will be use by the client
+ * that data are available in the local buffer, and so client can made the read
+ * call.
+ *
+ * It also notifies to the client by signalling the semaphore \a hRxEventSema
+ * if there is any error or break condition received in the receive line.
+ *
+ * @param hUart Handle to the UART.
+ * @param hRxEventSema The semaphore ID which is signalled if any data is
+ * recevived or there is any error in the receive flow.
+ * @param BufferSize Size of the local buffer where received data will be
+ * buffered.
+ *
+ * @retval NvSuccess Indicates the operation succeeded.
+ * @retval NvError_NotInitialized Indicates that the UART channel is not opened.
+ * @retval NvError_BadValue Indicates that illegal value specified for the local
+ * \a BufferSize.
+ * @retval NvError_InsufficientMemory Indicates that it is not able to create
+ * the memory for requested size.
+ */
+
+NvError
+NvDdkUartStartReadOnBuffer(
+ NvDdkUartHandle hUart,
+ NvOsSemaphoreHandle hRxEventSema,
+ NvU32 BufferSize);
+
+/**
+ * Clears the receive buffer. All data will be cleared and the
+ * counter which keeps the number of bytes available will be reset to 0.
+ *
+ * @param hUart Handle to the UART.
+ *
+ * @retval NvSuccess Indicates the operation succeeded.
+ * @retval NvError_NotInitialized Indicates that the UART channel is not opened.
+ * @retval NvError_NotSupported Indicates that this feature is not supported.
+ */
+NvError NvDdkUartClearReceiveBuffer(NvDdkUartHandle hUart);
+
+/**
+ * Update the local buffer if the data arrives in the UART.
+ * This API reads the data from HW FIFO to the local buffer once the data has
+ * arrived. This also returns the number of bytes available in the FIFO.
+ * This API should be called once the client gets the notification from the DDK.
+ *
+ * @param hUart Handle to the UART.
+ * @param pAvailableBytes Returns the number of bytes available in the local
+ * buffer.
+ *
+ * @retval NvSuccess Indicates the operation succeeded.
+ * @retval NvError_NotInitialized Indicates that the UART channel is not opened.
+ * @retval NvError_NotSupported Indicates that this feature is not supported.
+ */
+NvError
+NvDdkUartUpdateReceiveBuffer(
+ NvDdkUartHandle hUart,
+ NvU32 *pAvailableBytes);
+
+/**
+ * Starts the data receiving with the buffer provided. This is blocking
+ * type.
+ *
+ * First it copies the available data from the local buffer to the client
+ * buffer, and if bytes are remaining to read then:
+ * - It will wait for reading the remaining data (synchronous ops), or
+ * - keep reading from the UART channel to the client buffer and signal
+ * when there is no remaining data (async ops) or
+ * - no more reading of the remaining data in the client buffer (read only
+ * from local buffer).
+ *
+ * If non-zero timeout is selected then it will wait maximum for a given
+ * timeout for reading the data from channel. It can also wait for forever
+ * based on the argument passed.
+ * If zero timeout is selected then it just copies from local buffer to the
+ * client buffer with available number of bytes (if it is less than the
+ * requested size) or requested number of bytes (if available data is more
+ * than the requested size) and immediately return.
+ *
+ * @note If previous read is going on then this read call will return an error.
+ *
+ * @param hUart Handle to the UART.
+ * @param pReceiveBuffer A pointer to the receive buffer where data
+ * will be stored.
+ * @param BytesRequested Number of bytes need to be read.
+ * @param pBytesRead A pointer to the variable that stores the number of bytes
+ * requested to read when it is called and stores the actual number of bytes
+ * read when return from the function.
+ * @param WaitTimeoutMs The time needed to wait in milliseconds. If
+ * it is zero then it will be returned immediately with reading the
+ * number of bytes available in local buffer.
+ * If is non-zero, then it will wait for a requested timeout. If it is
+ * ::NV_WAIT_INFINITE then it will wait for infinitely until the transaction
+ * completes.
+ *
+ * @retval NvSuccess Indicates the operation succeeded.
+ * @retval NvError_NotInitialized Indicates that the UART channel is not opened.
+ * @retval NvError_Timeout Indicates the operation is not completed in a given
+ * timeout.
+ * @retval NvError_UartOverrun Indicates that overrun error occur during
+ * receiving of the data.
+ * @retval NvError_UartFifo Indicates the operation is not completed because of
+ * FIFO error.
+ * @retval NvError_UartBreakReceived Indicates the break condition received.
+ * @retval NvError_UartFraming Indicates the operation is not completed due to
+ * framing error.
+ * @retval NvError_UartParity Indicates the operation is not completed due to
+ * parity error.
+ * @retval NvError_InvalidState Indicates that the last read call is not
+ * completed/stopped.
+ */
+NvError
+NvDdkUartRead(
+ NvDdkUartHandle hUart,
+ NvU8 *pReceiveBuffer,
+ NvU32 BytesRequested,
+ NvU32 *pBytesRead,
+ NvU32 WaitTimeoutMs);
+
+/**
+ * Stops the read operation. The NvDdkUartRead() will be aborted.
+ * The DDK will keep reading the data from the external interface to the local
+ * buffer and it will not be cleared.
+ *
+ * @param hUart Handle to the UART.
+ *
+ */
+void NvDdkUartStopRead( NvDdkUartHandle hUart);
+
+
+/**
+ * Starts the data transfer with the buffer provided. This is blocking
+ * type call. If zero timeout is selected then it will return immediately
+ * without transferring any data.
+ *
+ * @param hUart Handle to the UART.
+ * @param pTransmitBuffer A pointer to the transmit buffer where transmitted
+ * data are available.
+ * @param BytesRequested Number of bytes to be sent.
+ * @param pBytesWritten A pointer to the variable that stores the number of
+ * bytes requested to transmit when it is called and stores the actual number of
+ * bytes transmitted when returning from the function.
+ * @param WaitTimeoutMs The time need to wait in milliseconds. If
+ * it is zero then it will be returned immediately without sending any data.
+ *
+ * @retval NvSuccess Indicates the operation succeeded.
+ * @retval NvError_NotInitialized Indicates that the UART channel is not opened.
+ * @retval NvError_Timeout Indicates the operation is not completed in a given
+ * timeout.
+ * @retval NvError_UartTransmit Indicates that a transmit error happened during
+ * sending of the data.
+ * @retval NvError_InvalidState Indicates that there is already write call made
+ * that is not completed yet.
+ */
+NvError
+NvDdkUartWrite(
+ NvDdkUartHandle hUart,
+ NvU8 *pTransmitBuffer,
+ NvU32 BytesRequested,
+ NvU32 *pBytesWritten,
+ NvU32 WaitTimeoutMs);
+
+/**
+ * Stops the write operation. No more data will be transmitted from the
+ * buffer, which was passed with the function NvDdkUartWrite().
+ *
+ * @param hUart Handle to the UART provided after getting the channel.
+ */
+void NvDdkUartStopWrite( NvDdkUartHandle hUart);
+
+/**
+ * Gets the current transfer status at the UART channel. This API
+ * returns the number of bytes remaining to send on the channel, transmit status,
+ * number of bytes available in the rx buffer, and receive status.
+ * This API returns the status at the calling time and after calling this API,
+ * the data may be changed as data transfer may be still going on.
+ * This is just polling type query about the data transfer status.
+ *
+ * @param hUart Handle to the UART provided after getting the channel.
+ * @param pTxBytesToRemain A pointer to variable where number of bytes remaining
+ * to transfer is stored.
+ * @param pTxStatus A pointer to variable where tramsit status is stored.
+ * @param pRxBytesAvailable A pointer to variable where number of bytes available
+ * in rx buffer is returned.
+ * @param pRxStatus A pointer to variable where receive status is returned.
+ *
+ */
+void
+NvDdkUartGetTransferStatus(
+ NvDdkUartHandle hUart,
+ NvU32 *pTxBytesToRemain,
+ NvError *pTxStatus,
+ NvU32 *pRxBytesAvailable,
+ NvError *pRxStatus);
+
+
+/**
+ * Starts/stops sending the break signal from the channel.
+ * The break siganl can be started by calling this function with \a IsStart = NV_TRUE,
+ * and it can be stopped by calling this API with \a isStart = NV_FALSE.
+ *
+ * @param hUart Handle to the UART.
+ * @param IsStart NV_TRUE to start sending the break signal, or NV_FALSE to stop.
+ *
+ * @retval NvSuccess Indicates the operation succeeded.
+ * @retval NvError_NotInitialized Indicates that the UART channel is not opened.
+ * @retval NvError_NotSupported Indicates that this feature is not supported.
+ */
+NvError NvDdkUartSetBreakSignal(NvDdkUartHandle hUart, NvBool IsStart);
+
+/**
+ * Sets the flow control signal to be disabled, enabled, or in handshake mode.
+ *
+ * @param hUart Handle to the UART.
+ * @param SignalName Specifies the name of the signal to set.
+ * @param FlowControl Specifies whether this is disabled, enable, or in handshake
+ * mode.
+ *
+ * @retval NvSuccess Indicates the operation succeeded.
+ * @retval NvError_NotInitialized Indicates that the UART channel is not opened.
+ * @retval NvError_NotSupported Indicates that requested functionality is not
+ * supported for given signal.
+ * @retval NvError_BadValue Indicates that illegal value specified for the
+ * parameter. This may be because the signal name is not valid for this operation.
+ */
+NvError
+NvDdkUartSetFlowControlSignal(
+ NvDdkUartHandle hUart,
+ NvDdkUartSignalName SignalName,
+ NvDdkUartFlowControl FlowControl);
+
+/**
+ * Gets the flow control signal level. This will tell the actual level of
+ * the signal on the UART pins.
+ * This API can be called by more than one signal name by ORing them.
+ * The state of the signal (high or low) can be determined by the position of the
+ * bit state.
+ *
+ * @param hUart Handle to the UART.
+ * @param SignalName Specifies the name of the signal whose status need to be
+ * queried. Can be more than one signal name by ORing them.
+ * @param pSignalState The state of the signal. The 1 in corresponding location
+ * shows that state is high, otherwise it shows as low.
+ *
+ * @retval NvSuccess Indicates the operation succeeded.
+ * @retval NvError_NotInitialized Indicates that the UART channel is not opened.
+ * @retval NvError_NotSupported Indicates that requested functionality is not
+ * supported for given signal.
+ * @retval NvError_BadValue Indicates an illegal value was specified for the
+ * parameter. This may be because the signal name is not valid for this operation.
+ */
+NvError
+NvDdkUartGetFlowControlSignalLevel(
+ NvDdkUartHandle hUart,
+ NvDdkUartSignalName SignalName,
+ NvU32 *pSignalState);
+
+typedef void (*NvDdkUartSignalChangeCallback)(void *args);
+
+/**
+ * Registers a callback funciton for the modem signal state change.
+ * Whenever the modem signal change, this API is called.
+ * Callback typically will call NvDdkUartGetFlowControlSignalLevel() for
+ * finding the signal status.
+ *
+ * Clients can pass NULL callback function for unregistering the signal
+ * change.
+ *
+ * The callback function is called from the ISR/IST.
+ *
+ * @param hUart Handle to the UART.
+ * @param SignalName Specifies the name of the signal to observe.
+ * @param Callback Callback function which is called from ISR/IST of DDK whenever
+ * signal change is detected by the DDK.
+ * @param args Argument to the signal change handler.
+ *
+ * @retval NvSuccess Indicates the operation succeeded.
+ * @retval NvError_NotInitialized Indicates that the UART channel is not opened.
+ * @retval NvError_NotSupported Indicates that requested functionality is not
+ * supported.
+ * @retval NvError_BadValue Indicates that an illegal value was specified for the
+ * parameter.
+ */
+NvError
+NvDdkUartRegisterModemSignalChange(
+ NvDdkUartHandle hUart,
+ NvDdkUartSignalName SignalName,
+ NvDdkUartSignalChangeCallback Callback,
+ void *args);
+
+/**
+ * Power mode suspend the UART controller.
+ *
+ * @param hUart Handle to the UART.
+ *
+ * @retval NvSuccess Indicates the operation succeeded.
+ * @retval NvError_NotSupported Indicates that requested functionality is not
+ * supported.
+ */
+NvError NvDdkUartSuspend(NvDdkUartHandle hUart);
+
+/**
+ * Power mode resume the UART controller. This will resume the controller
+ * from the suspend states.
+ *
+ * @param hUart Handle to the UART.
+ *
+ * @retval NvSuccess Indicates the operation succeeded.
+ * @retval NvError_NotSupported Indicates that requested functionality is not
+ * supported.
+ */
+NvError NvDdkUartResume(NvDdkUartHandle hUart);
+
+
+/** @} */
+
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif // INCLUDED_NVDDK_UART_H