samsung.S 1.9 KB

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