• 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 
13 #include <machine.h>
14 #include <common/types.h>
15 #include <arch/mmu.h>
16 #include <arch/tools.h>
17 
18 /* uart register defines */
19 #define UART_RHR 0x0
20 #define UART_THR 0x0
21 #define UART_IER 0x4
22 #define UART_ISR 0x8
23 #define UART_FCR 0x8
24 #define UART_LCR 0xc
25 #define UART_MCR 0x10
26 #define UART_LSR 0x14
27 #define UART_MSR 0x18
28 #define UART_SPR 0x1c
29 
30 /* uart status register bits */
31 #define LSR_TEMT  0x40 /* Transmitter empty */
32 #define LSR_THRE  0x20 /* Transmit-hold-register empty */
33 #define LSR_EMPTY (LSR_TEMT | LSR_THRE)
34 #define LSR_DR    0x01 /* DATA Ready */
35 
serial8250_uart_flush(vaddr_t base)36 static void serial8250_uart_flush(vaddr_t base)
37 {
38     u32 state;
39 
40     /* Wait until transmit FIFO is empty */
41     do {
42         state = get32(base + UART_LSR);
43     } while ((state & LSR_EMPTY) != LSR_EMPTY);
44 }
45 
serial8250_uart_send(vaddr_t base,int c)46 static void serial8250_uart_send(vaddr_t base, int c)
47 {
48     serial8250_uart_flush(base);
49     put32(base + UART_THR, c);
50 }
51 
uart_init(void)52 void uart_init(void)
53 {
54     /* Do nothing */
55 }
56 
uart_send(int c)57 void uart_send(int c)
58 {
59     vaddr_t base = phys_to_virt(get_uart_base());
60 
61     serial8250_uart_send(base, c);
62 }
63 
uart_recv(void)64 u32 uart_recv(void)
65 {
66     return 0;
67 }
68 
nb_uart_recv(void)69 u32 nb_uart_recv(void)
70 {
71     return 0;
72 }
73