drivers/serial/pl011: add FAR specifier
Signed-off-by: chao an <anchao@lixiang.com>
This commit is contained in:
parent
1dd9f64287
commit
c04f1e7789
@ -209,7 +209,7 @@ struct pl011_regs
|
|||||||
|
|
||||||
struct pl011_config
|
struct pl011_config
|
||||||
{
|
{
|
||||||
volatile struct pl011_regs *uart;
|
FAR volatile struct pl011_regs *uart;
|
||||||
uint32_t sys_clk_freq;
|
uint32_t sys_clk_freq;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -228,18 +228,19 @@ struct pl011_uart_port_s
|
|||||||
unsigned int irq_num;
|
unsigned int irq_num;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int pl011_setup(struct uart_dev_s *dev);
|
static int pl011_setup(FAR struct uart_dev_s *dev);
|
||||||
static void pl011_shutdown(struct uart_dev_s *dev);
|
static void pl011_shutdown(FAR struct uart_dev_s *dev);
|
||||||
static int pl011_attach(struct uart_dev_s *dev);
|
static int pl011_attach(FAR struct uart_dev_s *dev);
|
||||||
static void pl011_detach(struct uart_dev_s *dev);
|
static void pl011_detach(FAR struct uart_dev_s *dev);
|
||||||
static int pl011_ioctl(struct file *filep, int cmd, unsigned long arg);
|
static int pl011_ioctl(FAR struct file *filep, int cmd, unsigned long arg);
|
||||||
static int pl011_receive(struct uart_dev_s *dev, unsigned int *status);
|
static int pl011_receive(FAR struct uart_dev_s *dev,
|
||||||
static void pl011_rxint(struct uart_dev_s *dev, bool enable);
|
FAR unsigned int *status);
|
||||||
static bool pl011_rxavailable(struct uart_dev_s *dev);
|
static void pl011_rxint(FAR struct uart_dev_s *dev, bool enable);
|
||||||
static void pl011_send(struct uart_dev_s *dev, int ch);
|
static bool pl011_rxavailable(FAR struct uart_dev_s *dev);
|
||||||
static void pl011_txint(struct uart_dev_s *dev, bool enable);
|
static void pl011_send(FAR struct uart_dev_s *dev, int ch);
|
||||||
static bool pl011_txready(struct uart_dev_s *dev);
|
static void pl011_txint(FAR struct uart_dev_s *dev, bool enable);
|
||||||
static bool pl011_txempty(struct uart_dev_s *dev);
|
static bool pl011_txready(FAR struct uart_dev_s *dev);
|
||||||
|
static bool pl011_txempty(FAR struct uart_dev_s *dev);
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* Private Data
|
* Private Data
|
||||||
@ -299,7 +300,7 @@ static struct pl011_uart_port_s g_uart0priv =
|
|||||||
|
|
||||||
.config =
|
.config =
|
||||||
{
|
{
|
||||||
.uart = (volatile struct pl011_regs *)CONFIG_UART0_BASE,
|
.uart = (FAR volatile struct pl011_regs *)CONFIG_UART0_BASE,
|
||||||
.sys_clk_freq = 24000000,
|
.sys_clk_freq = 24000000,
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -342,7 +343,7 @@ static struct pl011_uart_port_s g_uart1priv =
|
|||||||
|
|
||||||
.config =
|
.config =
|
||||||
{
|
{
|
||||||
.uart = (volatile struct pl011_regs *)CONFIG_UART1_BASE,
|
.uart = (FAR volatile struct pl011_regs *)CONFIG_UART1_BASE,
|
||||||
.sys_clk_freq = 24000000,
|
.sys_clk_freq = 24000000,
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -385,7 +386,7 @@ static struct pl011_uart_port_s g_uart2priv =
|
|||||||
|
|
||||||
.config =
|
.config =
|
||||||
{
|
{
|
||||||
.uart = (volatile struct pl011_regs *)CONFIG_UART2_BASE,
|
.uart = (FAR volatile struct pl011_regs *)CONFIG_UART2_BASE,
|
||||||
.sys_clk_freq = 24000000,
|
.sys_clk_freq = 24000000,
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -428,7 +429,7 @@ static struct pl011_uart_port_s g_uart3priv =
|
|||||||
|
|
||||||
.config =
|
.config =
|
||||||
{
|
{
|
||||||
.uart = (volatile struct pl011_regs *)CONFIG_UART3_BASE,
|
.uart = (FAR volatile struct pl011_regs *)CONFIG_UART3_BASE,
|
||||||
.sys_clk_freq = 24000000,
|
.sys_clk_freq = 24000000,
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -487,38 +488,38 @@ static struct uart_dev_s g_uart3port =
|
|||||||
* Private Functions
|
* Private Functions
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
static void pl011_enable(const struct pl011_uart_port_s *sport)
|
static void pl011_enable(FAR const struct pl011_uart_port_s *sport)
|
||||||
{
|
{
|
||||||
const struct pl011_config *config = &sport->config;
|
FAR const struct pl011_config *config = &sport->config;
|
||||||
|
|
||||||
config->uart->cr |= PL011_CR_UARTEN;
|
config->uart->cr |= PL011_CR_UARTEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pl011_disable(const struct pl011_uart_port_s *sport)
|
static void pl011_disable(FAR const struct pl011_uart_port_s *sport)
|
||||||
{
|
{
|
||||||
const struct pl011_config *config = &sport->config;
|
FAR const struct pl011_config *config = &sport->config;
|
||||||
|
|
||||||
config->uart->cr &= ~PL011_CR_UARTEN;
|
config->uart->cr &= ~PL011_CR_UARTEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pl011_enable_fifo(const struct pl011_uart_port_s *sport)
|
static void pl011_enable_fifo(FAR const struct pl011_uart_port_s *sport)
|
||||||
{
|
{
|
||||||
const struct pl011_config *config = &sport->config;
|
FAR const struct pl011_config *config = &sport->config;
|
||||||
|
|
||||||
config->uart->lcr_h |= PL011_LCRH_FEN;
|
config->uart->lcr_h |= PL011_LCRH_FEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pl011_disable_fifo(const struct pl011_uart_port_s *sport)
|
static void pl011_disable_fifo(FAR const struct pl011_uart_port_s *sport)
|
||||||
{
|
{
|
||||||
const struct pl011_config *config = &sport->config;
|
FAR const struct pl011_config *config = &sport->config;
|
||||||
|
|
||||||
config->uart->lcr_h &= ~PL011_LCRH_FEN;
|
config->uart->lcr_h &= ~PL011_LCRH_FEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pl011_set_baudrate(const struct pl011_uart_port_s *sport,
|
static int pl011_set_baudrate(FAR const struct pl011_uart_port_s *sport,
|
||||||
uint32_t clk, uint32_t baudrate)
|
uint32_t clk, uint32_t baudrate)
|
||||||
{
|
{
|
||||||
const struct pl011_config *config = &sport->config;
|
FAR const struct pl011_config *config = &sport->config;
|
||||||
|
|
||||||
/* Avoiding float calculations, bauddiv is left shifted by 6 */
|
/* Avoiding float calculations, bauddiv is left shifted by 6 */
|
||||||
|
|
||||||
@ -549,47 +550,47 @@ static int pl011_set_baudrate(const struct pl011_uart_port_s *sport,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pl011_irq_tx_enable(const struct pl011_uart_port_s *sport)
|
static void pl011_irq_tx_enable(FAR const struct pl011_uart_port_s *sport)
|
||||||
{
|
{
|
||||||
const struct pl011_config *config = &sport->config;
|
FAR const struct pl011_config *config = &sport->config;
|
||||||
|
|
||||||
config->uart->imsc |= PL011_IMSC_TXIM;
|
config->uart->imsc |= PL011_IMSC_TXIM;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pl011_irq_tx_disable(const struct pl011_uart_port_s *sport)
|
static void pl011_irq_tx_disable(FAR const struct pl011_uart_port_s *sport)
|
||||||
{
|
{
|
||||||
const struct pl011_config *config = &sport->config;
|
FAR const struct pl011_config *config = &sport->config;
|
||||||
|
|
||||||
config->uart->imsc &= ~PL011_IMSC_TXIM;
|
config->uart->imsc &= ~PL011_IMSC_TXIM;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pl011_irq_rx_enable(const struct pl011_uart_port_s *sport)
|
static void pl011_irq_rx_enable(FAR const struct pl011_uart_port_s *sport)
|
||||||
{
|
{
|
||||||
const struct pl011_config *config = &sport->config;
|
FAR const struct pl011_config *config = &sport->config;
|
||||||
|
|
||||||
config->uart->imsc |= PL011_IMSC_RXIM | PL011_IMSC_RTIM;
|
config->uart->imsc |= PL011_IMSC_RXIM | PL011_IMSC_RTIM;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pl011_irq_rx_disable(const struct pl011_uart_port_s *sport)
|
static void pl011_irq_rx_disable(FAR const struct pl011_uart_port_s *sport)
|
||||||
{
|
{
|
||||||
const struct pl011_config *config = &sport->config;
|
FAR const struct pl011_config *config = &sport->config;
|
||||||
|
|
||||||
config->uart->imsc &= ~(PL011_IMSC_RXIM | PL011_IMSC_RTIM);
|
config->uart->imsc &= ~(PL011_IMSC_RXIM | PL011_IMSC_RTIM);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pl011_irq_tx_complete(const struct pl011_uart_port_s *sport)
|
static int pl011_irq_tx_complete(FAR const struct pl011_uart_port_s *sport)
|
||||||
{
|
{
|
||||||
const struct pl011_config *config = &sport->config;
|
FAR const struct pl011_config *config = &sport->config;
|
||||||
|
|
||||||
/* check for TX FIFO empty */
|
/* check for TX FIFO empty */
|
||||||
|
|
||||||
return config->uart->fr & PL011_FR_TXFE;
|
return config->uart->fr & PL011_FR_TXFE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pl011_irq_rx_ready(const struct pl011_uart_port_s *sport)
|
static int pl011_irq_rx_ready(FAR const struct pl011_uart_port_s *sport)
|
||||||
{
|
{
|
||||||
const struct pl011_config *config = &sport->config;
|
FAR const struct pl011_config *config = &sport->config;
|
||||||
const struct pl011_data *data = &sport->data;
|
FAR const struct pl011_data *data = &sport->data;
|
||||||
|
|
||||||
if (!data->sbsa && !(config->uart->cr & PL011_CR_RXE))
|
if (!data->sbsa && !(config->uart->cr & PL011_CR_RXE))
|
||||||
{
|
{
|
||||||
@ -608,11 +609,11 @@ static int pl011_irq_rx_ready(const struct pl011_uart_port_s *sport)
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
static bool pl011_txready(struct uart_dev_s *dev)
|
static bool pl011_txready(FAR struct uart_dev_s *dev)
|
||||||
{
|
{
|
||||||
struct pl011_uart_port_s *sport = dev->priv;
|
FAR struct pl011_uart_port_s *sport = dev->priv;
|
||||||
const struct pl011_config *config = &sport->config;
|
FAR const struct pl011_config *config = &sport->config;
|
||||||
struct pl011_data *data = &sport->data;
|
FAR struct pl011_data *data = &sport->data;
|
||||||
|
|
||||||
if (!data->sbsa && !(config->uart->cr & PL011_CR_TXE))
|
if (!data->sbsa && !(config->uart->cr & PL011_CR_TXE))
|
||||||
{
|
{
|
||||||
@ -631,9 +632,9 @@ static bool pl011_txready(struct uart_dev_s *dev)
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
static bool pl011_txempty(struct uart_dev_s *dev)
|
static bool pl011_txempty(FAR struct uart_dev_s *dev)
|
||||||
{
|
{
|
||||||
struct pl011_uart_port_s *sport = dev->priv;
|
FAR struct pl011_uart_port_s *sport = dev->priv;
|
||||||
|
|
||||||
return pl011_irq_tx_complete(sport);
|
return pl011_irq_tx_complete(sport);
|
||||||
}
|
}
|
||||||
@ -646,10 +647,10 @@ static bool pl011_txempty(struct uart_dev_s *dev)
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
static void pl011_send(struct uart_dev_s *dev, int ch)
|
static void pl011_send(FAR struct uart_dev_s *dev, int ch)
|
||||||
{
|
{
|
||||||
struct pl011_uart_port_s *sport = dev->priv;
|
FAR struct pl011_uart_port_s *sport = dev->priv;
|
||||||
const struct pl011_config *config = &sport->config;
|
FAR const struct pl011_config *config = &sport->config;
|
||||||
|
|
||||||
config->uart->dr = ch;
|
config->uart->dr = ch;
|
||||||
}
|
}
|
||||||
@ -662,11 +663,11 @@ static void pl011_send(struct uart_dev_s *dev, int ch)
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
static bool pl011_rxavailable(struct uart_dev_s *dev)
|
static bool pl011_rxavailable(FAR struct uart_dev_s *dev)
|
||||||
{
|
{
|
||||||
struct pl011_uart_port_s *sport = dev->priv;
|
FAR struct pl011_uart_port_s *sport = dev->priv;
|
||||||
const struct pl011_config *config = &sport->config;
|
FAR const struct pl011_config *config = &sport->config;
|
||||||
struct pl011_data *data = &sport->data;
|
FAR struct pl011_data *data = &sport->data;
|
||||||
|
|
||||||
if (!data->sbsa &&
|
if (!data->sbsa &&
|
||||||
(!(config->uart->cr & PL011_CR_UARTEN) ||
|
(!(config->uart->cr & PL011_CR_UARTEN) ||
|
||||||
@ -686,9 +687,9 @@ static bool pl011_rxavailable(struct uart_dev_s *dev)
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
static void pl011_rxint(struct uart_dev_s *dev, bool enable)
|
static void pl011_rxint(FAR struct uart_dev_s *dev, bool enable)
|
||||||
{
|
{
|
||||||
struct pl011_uart_port_s *sport = dev->priv;
|
FAR struct pl011_uart_port_s *sport = dev->priv;
|
||||||
|
|
||||||
if (enable)
|
if (enable)
|
||||||
{
|
{
|
||||||
@ -708,9 +709,9 @@ static void pl011_rxint(struct uart_dev_s *dev, bool enable)
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
static void pl011_txint(struct uart_dev_s *dev, bool enable)
|
static void pl011_txint(FAR struct uart_dev_s *dev, bool enable)
|
||||||
{
|
{
|
||||||
struct pl011_uart_port_s *sport = dev->priv;
|
FAR struct pl011_uart_port_s *sport = dev->priv;
|
||||||
irqstate_t flags;
|
irqstate_t flags;
|
||||||
|
|
||||||
flags = enter_critical_section();
|
flags = enter_critical_section();
|
||||||
@ -743,10 +744,11 @@ static void pl011_txint(struct uart_dev_s *dev, bool enable)
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
static int pl011_receive(struct uart_dev_s *dev, unsigned int *status)
|
static int pl011_receive(FAR struct uart_dev_s *dev,
|
||||||
|
FAR unsigned int *status)
|
||||||
{
|
{
|
||||||
struct pl011_uart_port_s *sport = dev->priv;
|
FAR struct pl011_uart_port_s *sport = dev->priv;
|
||||||
const struct pl011_config *config = &sport->config;
|
FAR const struct pl011_config *config = &sport->config;
|
||||||
unsigned int rx;
|
unsigned int rx;
|
||||||
|
|
||||||
rx = config->uart->dr;
|
rx = config->uart->dr;
|
||||||
@ -765,7 +767,7 @@ static int pl011_receive(struct uart_dev_s *dev, unsigned int *status)
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
static int pl011_ioctl(struct file *filep, int cmd, unsigned long arg)
|
static int pl011_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
|
||||||
{
|
{
|
||||||
int ret = OK;
|
int ret = OK;
|
||||||
UNUSED(filep);
|
UNUSED(filep);
|
||||||
@ -795,10 +797,10 @@ static int pl011_ioctl(struct file *filep, int cmd, unsigned long arg)
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
static int pl011_irq_handler(int irq, void *context, void *arg)
|
static int pl011_irq_handler(int irq, FAR void *context, FAR void *arg)
|
||||||
{
|
{
|
||||||
struct uart_dev_s *dev = arg;
|
FAR struct uart_dev_s *dev = arg;
|
||||||
struct pl011_uart_port_s *sport;
|
FAR struct pl011_uart_port_s *sport;
|
||||||
UNUSED(irq);
|
UNUSED(irq);
|
||||||
UNUSED(context);
|
UNUSED(context);
|
||||||
|
|
||||||
@ -828,9 +830,9 @@ static int pl011_irq_handler(int irq, void *context, void *arg)
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
static void pl011_detach(struct uart_dev_s *dev)
|
static void pl011_detach(FAR struct uart_dev_s *dev)
|
||||||
{
|
{
|
||||||
struct pl011_uart_port_s *sport = dev->priv;
|
FAR struct pl011_uart_port_s *sport = dev->priv;
|
||||||
|
|
||||||
up_disable_irq(sport->irq_num);
|
up_disable_irq(sport->irq_num);
|
||||||
irq_detach(sport->irq_num);
|
irq_detach(sport->irq_num);
|
||||||
@ -853,10 +855,10 @@ static void pl011_detach(struct uart_dev_s *dev)
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
static int pl011_attach(struct uart_dev_s *dev)
|
static int pl011_attach(FAR struct uart_dev_s *dev)
|
||||||
{
|
{
|
||||||
struct pl011_uart_port_s *sport;
|
FAR struct pl011_uart_port_s *sport;
|
||||||
struct pl011_data *data;
|
FAR struct pl011_data *data;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
sport = dev->priv;
|
sport = dev->priv;
|
||||||
@ -890,20 +892,20 @@ static int pl011_attach(struct uart_dev_s *dev)
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
static void pl011_shutdown(struct uart_dev_s *dev)
|
static void pl011_shutdown(FAR struct uart_dev_s *dev)
|
||||||
{
|
{
|
||||||
UNUSED(dev);
|
UNUSED(dev);
|
||||||
sinfo("%s: call unexpected\n", __func__);
|
sinfo("%s: call unexpected\n", __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pl011_setup(struct uart_dev_s *dev)
|
static int pl011_setup(FAR struct uart_dev_s *dev)
|
||||||
{
|
{
|
||||||
struct pl011_uart_port_s *sport = dev->priv;
|
FAR struct pl011_uart_port_s *sport = dev->priv;
|
||||||
const struct pl011_config *config = &sport->config;
|
FAR const struct pl011_config *config = &sport->config;
|
||||||
struct pl011_data *data = &sport->data;
|
FAR struct pl011_data *data = &sport->data;
|
||||||
int ret;
|
int ret;
|
||||||
uint32_t lcrh;
|
uint32_t lcrh;
|
||||||
irqstate_t i_flags;
|
irqstate_t i_flags;
|
||||||
|
|
||||||
i_flags = up_irq_save();
|
i_flags = up_irq_save();
|
||||||
|
|
||||||
@ -1020,7 +1022,7 @@ void pl011_serialinit(void)
|
|||||||
#ifdef HAVE_PL011_CONSOLE
|
#ifdef HAVE_PL011_CONSOLE
|
||||||
int up_putc(int ch)
|
int up_putc(int ch)
|
||||||
{
|
{
|
||||||
struct uart_dev_s *dev = &CONSOLE_DEV;
|
FAR struct uart_dev_s *dev = &CONSOLE_DEV;
|
||||||
|
|
||||||
/* Check for LF */
|
/* Check for LF */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user