| 100 | } |
| 101 | |
| 102 | static rt_err_t ofw_get_address(struct rt_ofw_node *np, int index, rt_uint64_t *out_address, rt_uint64_t *out_size) |
| 103 | { |
| 104 | rt_ssize_t len; |
| 105 | rt_err_t err = RT_EOK; |
| 106 | int addr_cells = rt_ofw_io_addr_cells(np); |
| 107 | int size_cells = rt_ofw_io_size_cells(np); |
| 108 | int skip_cells = (addr_cells + size_cells) * index; |
| 109 | const fdt32_t *cell = rt_ofw_prop_read_raw(np, "reg", &len); |
| 110 | |
| 111 | if (cell && skip_cells < (len / sizeof(*cell))) |
| 112 | { |
| 113 | cell += skip_cells; |
| 114 | *out_address = rt_fdt_next_cell(&cell, addr_cells); |
| 115 | *out_address = rt_ofw_translate_address(np, RT_NULL, *out_address); |
| 116 | *out_size = rt_fdt_read_number(cell, size_cells); |
| 117 | } |
| 118 | else |
| 119 | { |
| 120 | err = -RT_EINVAL; |
| 121 | } |
| 122 | |
| 123 | return err; |
| 124 | } |
| 125 | |
| 126 | rt_err_t rt_ofw_get_address(struct rt_ofw_node *np, int index, rt_uint64_t *out_address, rt_uint64_t *out_size) |
| 127 | { |
no test coverage detected