1#!/usr/bin/env python3 2# 3# Copyright (C) 2022 Intel Corporation. 4# 5# SPDX-License-Identifier: BSD-3-Clause 6# 7 8import sys, os, re 9sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'library')) 10import acrn_config_utilities, lib.error, lib.lib 11from collections import namedtuple 12from acrn_config_utilities import get_node 13 14class GuestFlagPolicy(namedtuple("GuestFlagPolycy", ["condition", "guest_flag"])): 15 pass 16 17policies = [ 18 GuestFlagPolicy(".//lapic_passthrough = 'y'", "GUEST_FLAG_LAPIC_PASSTHROUGH"), 19 GuestFlagPolicy(".//io_completion_polling = 'y'", "GUEST_FLAG_IO_COMPLETION_POLLING"), 20 GuestFlagPolicy(".//virtual_cat_support = 'y'", "GUEST_FLAG_VCAT_ENABLED"), 21 GuestFlagPolicy(".//secure_world_support = 'y'", "GUEST_FLAG_SECURE_WORLD_ENABLED"), 22 GuestFlagPolicy(".//hide_mtrr_support = 'y'", "GUEST_FLAG_HIDE_MTRR"), 23 GuestFlagPolicy(".//nested_virtualization_support = 'y'", "GUEST_FLAG_NVMX_ENABLED"), 24 GuestFlagPolicy(".//virtual_thermal_monitor = 'y'", "GUEST_FLAG_VTM"), 25 GuestFlagPolicy(".//security_vm = 'y'", "GUEST_FLAG_SECURITY_VM"), 26 GuestFlagPolicy(".//vm_type = 'RTVM'", "GUEST_FLAG_RT"), 27 GuestFlagPolicy(".//vm_type = 'RTVM' and .//load_order = 'PRE_LAUNCHED_VM' and //hv/BUILD_TYPE= 'debug'", "GUEST_FLAG_PMU_PASSTHROUGH"), 28 GuestFlagPolicy(".//vm_type = 'TEE_VM'", "GUEST_FLAG_TEE"), 29 GuestFlagPolicy(".//vm_type = 'REE_VM'", "GUEST_FLAG_REE"), 30 GuestFlagPolicy("(.//load_order = 'PRE_LAUNCHED_VM' and .//stateless = 'y') or (.//vm_type = 'TEE_VM')", "GUEST_FLAG_STATELESS"), 31] 32 33def fn(board_etree, scenario_etree, allocation_etree): 34 for vm_node in scenario_etree.xpath("//vm"): 35 vm_id = vm_node.get('id') 36 allocation_vm_node = get_node(f"/acrn-config/vm[@id = '{vm_id}']", allocation_etree) 37 if allocation_vm_node is None: 38 allocation_vm_node = acrn_config_utilities.append_node("/acrn-config/vm", None, allocation_etree, id = vm_id) 39 for policy in policies: 40 if vm_node.xpath(policy.condition): 41 acrn_config_utilities.append_node("./guest_flags/guest_flag", str(policy.guest_flag), allocation_vm_node) 42 acrn_config_utilities.append_node("./guest_flags/guest_flag",'GUEST_FLAG_STATIC_VM', allocation_vm_node) 43 if board_etree.xpath("//capability[@id = 'hwp_supported']") and get_node(".//own_pcpu/text()", vm_node) == "y" and get_node(".//os_type/text()", vm_node) != "Windows OS": 44 acrn_config_utilities.append_node("./guest_flags/guest_flag", 'GUEST_FLAG_VHWP', allocation_vm_node) 45