1# Copyright (C) 2021-2022 Intel Corporation.
2#
3# SPDX-License-Identifier: BSD-3-Clause
4#
5
6import logging
7import lxml.etree
8
9from memmapparser import parse_e820, e820
10from extractors.helpers import get_node, add_child
11
12def extract_layout(memory_node):
13    e820_table = parse_e820()
14    for e820_entry in e820_table:
15        if e820_entry.type == e820.E820_TYPE_RAM:
16            start = "0x{:016x}".format(e820_entry.start)
17            end = "0x{:016x}".format(e820_entry.end)
18            size = e820_entry.end - e820_entry.start + 1
19            add_child(memory_node, "range", start=start, end=end, size=str(size))
20
21def extract(args, board_etree):
22    memory_node = get_node(board_etree, "//memory")
23    extract_layout(memory_node)
24