ofw_fdt.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. * Copyright (c) 2006-2022, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2022-08-25 GuEe-GUI first version
  9. */
  10. #ifndef __OFW_FDT_H__
  11. #define __OFW_FDT_H__
  12. #include <mm_page.h>
  13. #include <drivers/ofw.h>
  14. struct rt_fdt_earlycon
  15. {
  16. union { rt_ubase_t mmio, port; };
  17. union { rt_ubase_t size, width; };
  18. void *fdt;
  19. char options[32];
  20. long nodeoffset;
  21. void *data;
  22. void (*console_putc)(void *data, char c);
  23. #define FDT_EARLYCON_KICK_UPDATE 0
  24. #define FDT_EARLYCON_KICK_COMPLETED 1
  25. void (*console_kick)(struct rt_fdt_earlycon *earlycon, int why);
  26. long msg_idx;
  27. char msg[RT_FDT_EARLYCON_MSG_SIZE * 1024];
  28. };
  29. struct rt_fdt_earlycon_id
  30. {
  31. char *name;
  32. char *type;
  33. char *compatible;
  34. rt_err_t (*setup)(struct rt_fdt_earlycon *earlycon, const char *options);
  35. };
  36. #define RT_FDT_EARLYCON_EXPORT(_name, _type, _compatible, _setup) \
  37. static const struct rt_fdt_earlycon_id __rt_fdt_##_name##_earlycon \
  38. rt_used RT_OFW_SYMBOL(earlycon, _) = \
  39. { \
  40. .name = #_name, \
  41. .type = _type, \
  42. .compatible = _compatible, \
  43. .setup = _setup, \
  44. }
  45. const char *rt_fdt_node_name(const char *full_name);
  46. rt_uint64_t rt_fdt_read_number(const fdt32_t *cell, int size);
  47. rt_uint64_t rt_fdt_next_cell(const fdt32_t **cellptr, int size);
  48. rt_uint64_t rt_fdt_translate_address(void *fdt, int nodeoffset, rt_uint64_t address);
  49. rt_bool_t rt_fdt_device_is_available(void *fdt, int nodeoffset);
  50. rt_err_t rt_fdt_commit_memregion_early(rt_region_t *region, rt_bool_t is_reserved);
  51. rt_err_t rt_fdt_commit_memregion_request(rt_region_t **out_region, rt_size_t *out_nr, rt_bool_t is_reserved);
  52. rt_err_t rt_fdt_prefetch(void *fdt);
  53. rt_err_t rt_fdt_scan_root(void);
  54. rt_err_t rt_fdt_scan_memory(void);
  55. rt_err_t rt_fdt_scan_initrd(rt_uint64_t *ranges);
  56. rt_err_t rt_fdt_model_dump(void);
  57. rt_err_t rt_fdt_boot_dump(void);
  58. void rt_fdt_earlycon_output(const char *str);
  59. void rt_fdt_earlycon_kick(int why);
  60. rt_err_t rt_fdt_scan_chosen_stdout(void);
  61. rt_err_t rt_fdt_bootargs_select(const char *key, int index, const char **out_result);
  62. rt_err_t rt_fdt_unflatten(void);
  63. struct rt_ofw_node *rt_fdt_unflatten_single(void *fdt);
  64. #endif /* __OFW_FDT_H__ */