• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Institute of Parallel And Distributed Systems (IPADS), Shanghai Jiao Tong University (SJTU)
3  * Licensed under the Mulan PSL v2.
4  * You can use this software according to the terms and conditions of the Mulan PSL v2.
5  * You may obtain a copy of Mulan PSL v2 at:
6  *     http://license.coscl.org.cn/MulanPSL2
7  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
8  * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
9  * PURPOSE.
10  * See the Mulan PSL v2 for more details.
11  */
12 #include <machine.h>
13 #include <common/types.h>
14 #include <arch/mmu.h>
15 #include <arch/tools.h>
16 
17 /* uart register defines */
18 #define UART_RHR 0x0
19 #define UART_THR 0x0
20 #define UART_IER 0x4
21 #define UART_ISR 0x8
22 #define UART_FCR 0x8
23 #define UART_LCR 0xc
24 #define UART_MCR 0x10
25 #define UART_LSR 0x14
26 #define UART_MSR 0x18
27 #define UART_SPR 0x1c
28 
29 /* uart status register bits */
30 #define LSR_TEMT  0x40 /* Transmitter empty */
31 #define LSR_THRE  0x20 /* Transmit-hold-register empty */
32 #define LSR_EMPTY (LSR_TEMT | LSR_THRE)
33 #define LSR_DR    0x01 /* DATA Ready */
34 
serial8250_uart_flush(vaddr_t base)35 static void serial8250_uart_flush(vaddr_t base)
36 {
37     u32 state;
38 
39     /* Wait until transmit FIFO is empty */
40     do {
41         state = get32(base + UART_LSR);
42     } while ((state & LSR_EMPTY) != LSR_EMPTY);
43 }
44 
serial8250_uart_send(vaddr_t base,int c)45 static void serial8250_uart_send(vaddr_t base, int c)
46 {
47     serial8250_uart_flush(base);
48     put32(base + UART_THR, c);
49 }
50 
uart_init(void)51 void uart_init(void)
52 {
53     /* Do nothing */
54 }
55 
uart_send(int c)56 void uart_send(int c)
57 {
58     vaddr_t base = phys_to_virt(get_uart_base());
59 
60     serial8250_uart_send(base, c);
61 }
62 
uart_recv(void)63 u32 uart_recv(void)
64 {
65     return 0;
66 }
67 
nb_uart_recv(void)68 u32 nb_uart_recv(void)
69 {
70     return 0;
71 }
72