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] 14ARM_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] 20ARM_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] 29ARM_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] 39ARM_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] 53ARM_BE8(rev \rd, \rd) 54 tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled? 55 beq 1001f @ 56 @ FIFO enabled... 571003: 58 fifo_full \rd, \rx 59 bne 1003b 60 b 1002f 61 621001: 63 @ busy waiting for non fifo 64 ldr \rd, [\rx, # S3C2410_UTRSTAT] 65ARM_BE8(rev \rd, \rd) 66 tst \rd, #S3C2410_UTRSTAT_TXFE 67 beq 1001b 68 691002: @ exit busyuart 70 .endm 71 72 .macro waituart,rd,rx 73 ldr \rd, [\rx, # S3C2410_UFCON] 74ARM_BE8(rev \rd, \rd) 75 tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled? 76 beq 1001f @ 77 @ FIFO enabled... 781003: 79 fifo_level \rd, \rx 80 teq \rd, #0 81 bne 1003b 82 b 1002f 831001: 84 @ idle waiting for non fifo 85 ldr \rd, [\rx, # S3C2410_UTRSTAT] 86ARM_BE8(rev \rd, \rd) 87 tst \rd, #S3C2410_UTRSTAT_TXFE 88 beq 1001b 89 901002: @ exit busyuart 91 .endm 92