diff --git a/arch/misoc/include/irq.h b/arch/misoc/include/irq.h index a21987b00a4..882c37a0fbf 100644 --- a/arch/misoc/include/irq.h +++ b/arch/misoc/include/irq.h @@ -53,11 +53,7 @@ * Pre-processor Definitions ****************************************************************************/ -/* 32 True interrupts plus the sofware interrupt */ -#define MISOC_NINTERRUPTS 32 -#define MISOC_IRQ_SWINT 32 -#define NR_IRQS 33 /**************************************************************************** * Public Function Prototypes diff --git a/arch/misoc/include/lm32/irq.h b/arch/misoc/include/lm32/irq.h index 782bb06ae9e..2e5e51e83a6 100644 --- a/arch/misoc/include/lm32/irq.h +++ b/arch/misoc/include/lm32/irq.h @@ -48,6 +48,12 @@ * Pre-processor Definitions ****************************************************************************/ +/* 32 True interrupts plus the sofware interrupt */ + +#define LM32_NINTERRUPTS 32 +#define LM32_IRQ_SWINT 32 +#define NR_IRQS 33 + /* Registers */ #define REG_X0_NDX 0 /* Holds the value zero */ diff --git a/arch/misoc/src/common/misoc_uart.c b/arch/misoc/src/common/misoc_uart.c deleted file mode 100644 index 76cdd487034..00000000000 --- a/arch/misoc/src/common/misoc_uart.c +++ /dev/null @@ -1,233 +0,0 @@ -/**************************************************************************** - * arch/misoc/src/common/misoc_uart.c - * - * Copyright (C) 2016 Gregory Nutt. All rights reserved. - * Author: Ramtin Amin - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * 3. Neither the name NuttX 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 OWNER 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. - * - ****************************************************************************/ - -/**************************************************************************** - * Included Files - ****************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef CONFIG_SERIAL_TERMIOS -# include -#endif - -#include -#include -#include - -#include -#include - -#include "hw/flags.h" -#include "misoc_uart.h" - -#include "chip.h" - -/**************************************************************************** - * Pre-processor Definitions - ****************************************************************************/ - -/* Buffer sizes must be a power of 2 so that modulos can be computed - * with logical AND. - */ - -#define UART_RINGBUFFER_SIZE_RX 128 -#define UART_RINGBUFFER_MASK_RX (UART_RINGBUFFER_SIZE_RX-1) - -#define UART_RINGBUFFER_SIZE_TX 128 -#define UART_RINGBUFFER_MASK_TX (UART_RINGBUFFER_SIZE_TX-1) - -/**************************************************************************** - * Private Data - ****************************************************************************/ - -static char rx_buf[UART_RINGBUFFER_SIZE_RX]; -static volatile unsigned int rx_produce; -static unsigned int rx_consume; - -static char tx_buf[UART_RINGBUFFER_SIZE_TX]; -static unsigned int tx_produce; -static volatile unsigned int tx_consume; - -/**************************************************************************** - * Private Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: uart_interrupt - ****************************************************************************/ - -static int uart_interrupt(int irq, void *context) -{ - unsigned int stat, rx_produce_next; - - stat = uart_ev_pending_read(); - - if ((stat & UART_EV_RX) != 0) - { - while (!uart_rxempty_read()) - { - rx_produce_next = (rx_produce + 1) & UART_RINGBUFFER_MASK_RX; - if (rx_produce_next != rx_consume) - { - rx_buf[rx_produce] = uart_rxtx_read(); - rx_produce = rx_produce_next; - } - - uart_ev_pending_write(UART_EV_RX); - } - } - - if ((stat & UART_EV_TX) != 0) - { - uart_ev_pending_write(UART_EV_TX); - while ((tx_consume != tx_produce) && !uart_txfull_read()) - { - uart_rxtx_write(tx_buf[tx_consume]); - tx_consume = (tx_consume + 1) & UART_RINGBUFFER_MASK_TX; - } - } - - return OK; -} - -/**************************************************************************** - * Public Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: uart_read - * - * Do not use in interrupt handlers! - * - ****************************************************************************/ - -char uart_read(void) -{ - char c; - - if (irq_getie()) - { - while (rx_consume == rx_produce); - } - else if (rx_consume == rx_produce) - { - return 0; - } - - c = rx_buf[rx_consume]; - rx_consume = (rx_consume + 1) & UART_RINGBUFFER_MASK_RX; - return c; -} - -/**************************************************************************** - * Name: uart_read_nonblock - ****************************************************************************/ - -int uart_read_nonblock(void) -{ - return (rx_consume != rx_produce); -} - -/**************************************************************************** - * Name: up_putc - ****************************************************************************/ - -int up_putc(int ch) -{ - unsigned int oldmask; - unsigned int tx_produce_next = (tx_produce + 1) & UART_RINGBUFFER_MASK_TX; - - if (irq_getie()) - { - while (tx_produce_next == tx_consume); - } - else if (tx_produce_next == tx_consume) - { - return ch; - } - - oldmask = irq_getmask(); - irq_setmask(oldmask & ~(1 << UART_INTERRUPT)); - - if ((tx_consume != tx_produce) || uart_txfull_read()) - { - tx_buf[tx_produce] = ch; - tx_produce = tx_produce_next; - } - else - { - uart_rxtx_write(ch); - } - - irq_setmask(oldmask); - return ch; -} - -/**************************************************************************** - * Name: uart_init - ****************************************************************************/ - -void uart_init(void) -{ - rx_produce = 0; - rx_consume = 0; - - tx_produce = 0; - tx_consume = 0; - - uart_ev_pending_write(uart_ev_pending_read()); - uart_ev_enable_write(UART_EV_TX | UART_EV_RX); - irq_setmask(irq_getmask() | (1 << UART_INTERRUPT)); - - irq_attach(1 << UART_INTERRUPT, uart_interrupt); -} - -/**************************************************************************** - * Name: uart_sync - ****************************************************************************/ - -void uart_sync(void) -{ - while (tx_consume != tx_produce); -} diff --git a/arch/misoc/src/common/misoc_uart.h b/arch/misoc/src/common/misoc_uart.h deleted file mode 100644 index 74fcc7c0acf..00000000000 --- a/arch/misoc/src/common/misoc_uart.h +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** - * arch/misoc/src/common/misoc_uart.c - * - * Copyright (C) 2016 Gregory Nutt. All rights reserved. - * Author: Ramtin Amin - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * 3. Neither the name NuttX 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 OWNER 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. - * - ****************************************************************************/ - -#ifndef __ARCH_MISOC_SRC_COMMON_MISOC_UART_H -#define __ARCH_MISOC_SRC_COMMON_MISOC_UART_H 1 - -/**************************************************************************** - * Public Function Prototypes - ****************************************************************************/ - -#ifdef __cplusplus -extern "C" -{ -#endif - -void uart_init(void); -void uart_isr(void); -void uart_sync(void); - -void uart_write(char c); -char uart_read(void); -int uart_read_nonblock(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __ARCH_MISOC_SRC_COMMON_MISOC_UART_H */ diff --git a/arch/misoc/src/lm32/lm32_decodeirq.c b/arch/misoc/src/lm32/lm32_decodeirq.c index 1cb792cedf4..ea55e3a0b7e 100644 --- a/arch/misoc/src/lm32/lm32_decodeirq.c +++ b/arch/misoc/src/lm32/lm32_decodeirq.c @@ -74,7 +74,7 @@ uint32_t *lm32_decodeirq(uint32_t intstat, uint32_t *regs) /* Decode and dispatch interrupts */ - for (irq = 0; irq < MISOC_NINTERRUPTS && intstat != 0; irq++) + for (irq = 0; irq < LM32_NINTERRUPTS && intstat != 0; irq++) { uint32_t bit = (1 << irq); diff --git a/arch/misoc/src/lm32/lm32_irq.c b/arch/misoc/src/lm32/lm32_irq.c index dab24189e66..eb5313810d4 100644 --- a/arch/misoc/src/lm32/lm32_irq.c +++ b/arch/misoc/src/lm32/lm32_irq.c @@ -71,7 +71,7 @@ void lm32_irq_initialize(void) /* Attach the software interrupt */ - (void)irq_attach(MISOC_IRQ_SWINT, lm32_swint); + (void)irq_attach(LM32_IRQ_SWINT, lm32_swint); /* Enable interrupts */ @@ -129,7 +129,7 @@ void up_disable_irq(int irq) /* Ignore any attempt to disable software interrupts */ - if (irq < MISOC_NINTERRUPTS) + if (irq < LM32_NINTERRUPTS) { /* Disable interrupts by clearing the bit that corresponds to the irq */ @@ -154,7 +154,7 @@ void up_enable_irq(int irq) /* Ignore any attempt to enable software interrupts */ - if (irq < MISOC_NINTERRUPTS) + if (irq < LM32_NINTERRUPTS) { /* Enable interrupts by setting the bit that corresponds to the irq */ diff --git a/arch/misoc/src/lm32/lm32_vectors.S b/arch/misoc/src/lm32/lm32_vectors.S index 95cfd260010..94521a3a692 100644 --- a/arch/misoc/src/lm32/lm32_vectors.S +++ b/arch/misoc/src/lm32/lm32_vectors.S @@ -152,7 +152,7 @@ _syscall_handler: sw (sp+0), ra addi ea, ea, 4 calli .save_all - mvi r1, MISOC_IRQ_SWINT + mvi r1, LM32_IRQ_SWINT calli lm32_doirq bi .restore_all_and_eret nop