1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* |
3 | * Copyright 2005, 2007 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> |
6 | */ |
7 | |
8 | #include <linux/serial_s3c.h> |
9 | |
10 | /* The S5PV210/S5PC110 implementations are as belows. */ |
11 | |
12 | .macro fifo_level_s5pv210 rd, rx |
13 | ldr \rd, [\rx, # S3C2410_UFSTAT] |
14 | ARM_BE8(rev \rd, \rd) |
15 | and \rd, \rd, #S5PV210_UFSTAT_TXMASK |
16 | .endm |
17 | |
18 | .macro fifo_full_s5pv210 rd, rx |
19 | ldr \rd, [\rx, # S3C2410_UFSTAT] |
20 | ARM_BE8(rev \rd, \rd) |
21 | tst \rd, #S5PV210_UFSTAT_TXFULL |
22 | .endm |
23 | |
24 | /* The S3C2440 implementations are used by default as they are the |
25 | * most widely re-used */ |
26 | |
27 | .macro fifo_level_s3c2440 rd, rx |
28 | ldr \rd, [\rx, # S3C2410_UFSTAT] |
29 | ARM_BE8(rev \rd, \rd) |
30 | and \rd, \rd, #S3C2440_UFSTAT_TXMASK |
31 | .endm |
32 | |
33 | #ifndef fifo_level |
34 | #define fifo_level fifo_level_s3c2440 |
35 | #endif |
36 | |
37 | .macro fifo_full_s3c2440 rd, rx |
38 | ldr \rd, [\rx, # S3C2410_UFSTAT] |
39 | ARM_BE8(rev \rd, \rd) |
40 | tst \rd, #S3C2440_UFSTAT_TXFULL |
41 | .endm |
42 | |
43 | #ifndef fifo_full |
44 | #define fifo_full fifo_full_s3c2440 |
45 | #endif |
46 | |
47 | .macro senduart,rd,rx |
48 | strb \rd, [\rx, # S3C2410_UTXH] |
49 | .endm |
50 | |
51 | .macro busyuart, rd, rx |
52 | ldr \rd, [\rx, # S3C2410_UFCON] |
53 | ARM_BE8(rev \rd, \rd) |
54 | tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled? |
55 | beq 1001f @ |
56 | @ FIFO enabled... |
57 | 1003: |
58 | fifo_full \rd, \rx |
59 | bne 1003b |
60 | b 1002f |
61 | |
62 | 1001: |
63 | @ busy waiting for non fifo |
64 | ldr \rd, [\rx, # S3C2410_UTRSTAT] |
65 | ARM_BE8(rev \rd, \rd) |
66 | tst \rd, #S3C2410_UTRSTAT_TXFE |
67 | beq 1001b |
68 | |
69 | 1002: @ exit busyuart |
70 | .endm |
71 | |
72 | .macro waituartcts,rd,rx |
73 | .endm |
74 | |
75 | .macro waituarttxrdy,rd,rx |
76 | ldr \rd, [\rx, # S3C2410_UFCON] |
77 | ARM_BE8(rev \rd, \rd) |
78 | tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled? |
79 | beq 1001f @ |
80 | @ FIFO enabled... |
81 | 1003: |
82 | fifo_level \rd, \rx |
83 | teq \rd, #0 |
84 | bne 1003b |
85 | b 1002f |
86 | 1001: |
87 | @ idle waiting for non fifo |
88 | ldr \rd, [\rx, # S3C2410_UTRSTAT] |
89 | ARM_BE8(rev \rd, \rd) |
90 | tst \rd, #S3C2410_UTRSTAT_TXFE |
91 | beq 1001b |
92 | |
93 | 1002: @ exit busyuart |
94 | .endm |
95 | |