acrn-hypervisor/misc/services/life_mngr/uart.h
Fei Li 59e27ce49e mise: life_mngr: fix some minor bugs
1. enlarge receive Service VM message time to 10s. Now in some extreme
environments, Service VM will takes more than 1s to ACK the User VM's
requirements.
2. fix a bug to calculate string pointer size.

Tracked-On: #7215
Signed-off-by: Fei Li <fei1.li@intel.com>
2022-04-06 18:15:06 +08:00

63 lines
1.5 KiB
C

/*
* Copyright (C)2021 Intel Corporation
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef _UART_H_
#define _UART_H_
#include <sys/types.h>
#include <stdint.h>
#include <sys/queue.h>
#include <pthread.h>
#include <semaphore.h>
#include <sys/un.h>
#define TTY_PATH_MAX 32U
#define SECOND_TO_US 1000000
#define WAIT_RECV (SECOND_TO_US>>2)
#define RETRY_RECV_TIMES 100U
struct uart_dev {
char tty_path[TTY_PATH_MAX]; /**< UART device name */
int tty_fd; /**< the FD of opened UART device */
};
/**
* @brief Allocate UART device instance and initialize UART
* device according to device name
*
* @param path UART device name
* @return struct uart_dev* Ponit to UART device instance
*/
struct uart_dev *init_uart_dev(char *path);
/**
* @brief Close UART devcie and free UART device instance
*
* @param dev Poin to UART device instance
*/
void deinit_uart_dev(struct uart_dev *dev);
/**
* @brief Set handler to handle received message
*/
ssize_t send_message_by_uart(struct uart_dev *dev, const void *buf, size_t len);
/**
* @brief Receive message and retry RETRY_RECV_TIMES time to
* avoid miss message in some cases.
*/
ssize_t receive_message_by_uart(struct uart_dev *dev, void *buf, size_t len);
/**
* @brief Get the file descriptor of a UART device
*/
static inline int get_uart_dev_fd(struct uart_dev *dev)
{
return dev->tty_fd;
}
/**
* @brief Get the name of a UART device
*/
static inline char *get_uart_dev_path(struct uart_dev *dev)
{
return dev->tty_path;
}
#endif