console.h 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. * Copyright (c) 2013-2023, ARM Limited and Contributors. All rights reserved.
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. */
  6. #ifndef CONSOLE_H
  7. #define CONSOLE_H
  8. #include <lib/utils_def.h>
  9. #define CONSOLE_T_NEXT (U(0) * REGSZ)
  10. #define CONSOLE_T_FLAGS (U(1) * REGSZ)
  11. #define CONSOLE_T_PUTC (U(2) * REGSZ)
  12. #if ENABLE_CONSOLE_GETC
  13. #define CONSOLE_T_GETC (U(3) * REGSZ)
  14. #define CONSOLE_T_FLUSH (U(4) * REGSZ)
  15. #define CONSOLE_T_BASE (U(5) * REGSZ)
  16. #define CONSOLE_T_DRVDATA (U(6) * REGSZ)
  17. #else
  18. #define CONSOLE_T_FLUSH (U(3) * REGSZ)
  19. #define CONSOLE_T_BASE (U(4) * REGSZ)
  20. #define CONSOLE_T_DRVDATA (U(5) * REGSZ)
  21. #endif
  22. #define CONSOLE_FLAG_BOOT (U(1) << 0)
  23. #define CONSOLE_FLAG_RUNTIME (U(1) << 1)
  24. #define CONSOLE_FLAG_CRASH (U(1) << 2)
  25. /* Bits 3 to 7 reserved for additional scopes in future expansion. */
  26. #define CONSOLE_FLAG_SCOPE_MASK ((U(1) << 8) - 1)
  27. /* Bits 8 to 31 for non-scope use. */
  28. #define CONSOLE_FLAG_TRANSLATE_CRLF (U(1) << 8)
  29. /* Returned by getc callbacks when receive FIFO is empty. */
  30. #define ERROR_NO_PENDING_CHAR (-1)
  31. /* Returned by console_xxx() if no registered console implements xxx. */
  32. #define ERROR_NO_VALID_CONSOLE (-128)
  33. #ifndef __ASSEMBLER__
  34. #include <stdint.h>
  35. typedef struct console {
  36. struct console *next;
  37. /*
  38. * Only the low 32 bits are used. The type is u_register_t to align the
  39. * fields of the struct to 64 bits in AArch64 and 32 bits in AArch32
  40. */
  41. u_register_t flags;
  42. int (*const putc)(int character, struct console *console);
  43. #if ENABLE_CONSOLE_GETC
  44. int (*const getc)(struct console *console);
  45. #endif
  46. void (*const flush)(struct console *console);
  47. uintptr_t base;
  48. /* Additional private driver data may follow here. */
  49. } console_t;
  50. extern console_t *console_list;
  51. /* offset macro assertions for console_t */
  52. #include <drivers/console_assertions.h>
  53. /*
  54. * Add a console_t instance to the console list. This should only be called by
  55. * console drivers after they have initialized all fields in the console
  56. * structure. Platforms seeking to register a new console need to call the
  57. * respective console__register() function instead.
  58. */
  59. int console_register(console_t *console);
  60. /* Remove a single console_t instance from the console list. Return a pointer to
  61. * the console that was removed if it was found, or NULL if not. */
  62. console_t *console_unregister(console_t *console);
  63. /* Returns 1 if this console is already registered, 0 if not */
  64. int console_is_registered(console_t *console);
  65. /*
  66. * Set scope mask of a console that determines in what states it is active.
  67. * By default they are registered with (CONSOLE_FLAG_BOOT|CONSOLE_FLAG_CRASH).
  68. */
  69. void console_set_scope(console_t *console, unsigned int scope);
  70. /* Switch to a new global console state (CONSOLE_FLAG_BOOT/RUNTIME/CRASH). */
  71. void console_switch_state(unsigned int new_state);
  72. /* Output a character on all consoles registered for the current state. */
  73. int console_putc(int c);
  74. #if ENABLE_CONSOLE_GETC
  75. /* Read a character (blocking) from any console registered for current state. */
  76. int console_getc(void);
  77. #endif
  78. /* Flush all consoles registered for the current state. */
  79. void console_flush(void);
  80. #endif /* __ASSEMBLER__ */
  81. #endif /* CONSOLE_H */