1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
/*
* Copyright (c) 2018, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "asm_macros.S"
#include "platform.h"
/*
* PL011 UART registers
*/
/* UART Flag Register */
#define UARTFR 0x018
/* Transmit FIFO full bit in UARTFR register */
#define PL011_UARTFR_TXFF_BIT 5
/* UART Data Register */
#define UARTDR 0x000
.text
.global print_string
.global print_char
/*
* void print_char(unsigned int c);
* clobbers: x3, x4
*/
func print_char
ldr x3, =UART_BASE
1:
/* Check if the transmit FIFO is full */
ldr w4, [x3, #UARTFR]
tbnz w4, #PL011_UARTFR_TXFF_BIT, 1b
str w0, [x3, #UARTDR]
ret
endfunc print_char
/*
* void print_string(const char *str);
* clobbers: x0, x1, x2, x9
*/
func print_string
ldr x1, =UART_BASE
mov x2, x0
1:
ldrb w0, [x2], #1
cmp wzr, w0
b.eq 2f
mov x9, x30
bl print_char
mov x30, x9
b 1b
2:
ret
endfunc print_string
|