| 459 | } |
| 460 | |
| 461 | const uint32_t * |
| 462 | of_get_address(const struct device_node *dev_node, size_t idx, |
| 463 | uint64_t *size, uint32_t *flags __rte_unused) |
| 464 | { |
| 465 | const struct dt_dir *d; |
| 466 | const unsigned char *buf; |
| 467 | uint32_t na = of_n_addr_cells(dev_node); |
| 468 | uint32_t ns = of_n_size_cells(dev_node); |
| 469 | |
| 470 | if (!dev_node) |
| 471 | d = &root_dir; |
| 472 | else |
| 473 | d = node2dir(dev_node); |
| 474 | if (!d->reg) |
| 475 | return NULL; |
| 476 | assert(d->reg->len % ((na + ns) * 4) == 0); |
| 477 | assert(d->reg->len / ((na + ns) * 4) > (unsigned int) idx); |
| 478 | buf = (const unsigned char *)&d->reg->buf[0]; |
| 479 | buf += (na + ns) * idx * 4; |
| 480 | if (size) |
| 481 | for (*size = 0; ns > 0; ns--, na++) |
| 482 | *size = (*size << 32) + |
| 483 | (((uint32_t)buf[4 * na] << 24) | |
| 484 | ((uint32_t)buf[4 * na + 1] << 16) | |
| 485 | ((uint32_t)buf[4 * na + 2] << 8) | |
| 486 | (uint32_t)buf[4 * na + 3]); |
| 487 | return (const uint32_t *)buf; |
| 488 | } |
| 489 | |
| 490 | uint64_t |
| 491 | of_translate_address(const struct device_node *dev_node, |
no test coverage detected