Beispiel #1
0
def collect_memory_pool_el(memory_pool_el, namespace, machine,
                           bootinfo, pools, virtual):
    """ Record a memory pool."""

    if virtual:
        pool = weaver.bootinfo.VirtPool(memory_pool_el.name, machine,
                                        pools)
        bootinfo.add_virtpool(pool)
    else:
        pool = weaver.bootinfo.PhysPool(memory_pool_el.name, machine,
                                        pools)
        bootinfo.add_physpool(pool)

    # New namespace for the memory pool's caps.
    new_namespace = namespace.add_namespace(memory_pool_el.name)

    # Add the standard caps for the pool.
    create_standard_caps(pool, new_namespace)

    for el in memory_pool_el.children:
        if el.tag == 'memory':
            src  = getattr(el, 'src', None)
            base = getattr(el, 'base', None)
            size = getattr(el, 'size', None)
            
            pool.add_memory(src = src, base = base, size = size,
                            machine=machine, pools=pools)

    if not virtual and getattr(memory_pool_el, "direct", False):
        pool.set_direct(True)

        for base, end, mem_type in pool.pool.get_freelist():
            size = end - base + 1
            pools.add_direct_memory(base, size, mem_type)
Beispiel #2
0
def setup_direct_pool(namespace, machine, bootinfo, pools):
    # At the moment we just have a special virtpool.
    direct_pool = weaver.bootinfo.VirtPool("direct", machine, pools)
    bootinfo.add_virtpool(direct_pool)
    new_namespace = namespace.add_namespace("direct")

    # This cap is probably never used.
    master = weaver.bootinfo.Cap("master", ["master"])
    direct_pool.add_cap(master)
    new_namespace.add(master.get_name(), master)