acrn-config: add virtio-input support for launch

config

Add support to parse and get 'virtio-input' item value from launch config
files, these values are editable by user.

Tracked-On: #4163
Signed-off-by: Wei Liu <weix.w.liu@intel.com>
Acked-by: Victor Sun <victor.sun@intel.com>
This commit is contained in:
Wei Liu 2019-11-26 19:28:35 +08:00 committed by wenlingz
parent 9fc32043aa
commit bc9b6d1b0c
5 changed files with 54 additions and 20 deletions

View File

@ -290,11 +290,11 @@ def save_launch():
# call validate function
rename = False
try:
(error_list, pthru_sel, dm_value) = validate_launch_setting(
(error_list, pthru_sel, virtio, dm_value) = validate_launch_setting(
os.path.join(os.path.dirname(os.path.abspath(__file__)), 'res', xml_configs[0]+'.xml'),
scenario_file_path,
tmp_launch_file)
print(pthru_sel, dm_value)
print(pthru_sel, virtio, dm_value)
except Exception as error:
if os.path.isfile(tmp_launch_file):
os.remove(tmp_launch_file)

View File

@ -426,7 +426,16 @@ def xhci_args_set(names, vmid, config):
print(" -s {},xhci,1-2:2-4 \\".format(launch_cfg_lib.virtual_dev_slot("xhci")), file=config)
def dm_arg_set(names, sel, dm, vmid, config):
def vritio_args_set(virt_io, vmid, config):
# virtio-input set, the value type is a list
for input_val in virt_io['input'][vmid]:
if input_val:
print(" -s {},virtio-input,{} \\".format(
launch_cfg_lib.virtual_dev_slot("virtio-input{}".format(input_val)), input_val), file=config)
def dm_arg_set(names, sel, virt_io, dm, vmid, config):
uos_type = names['uos_types'][vmid]
board_name = names['board_name']
@ -498,6 +507,9 @@ def dm_arg_set(names, sel, dm, vmid, config):
# WA: XHCI args set
xhci_args_set(names, vmid, config)
# VIRTIO args set
vritio_args_set(virt_io, vmid, config)
# GVT args set
gvt_arg_set(uos_type, config)
@ -545,7 +557,7 @@ def dm_arg_set(names, sel, dm, vmid, config):
print("}", file=config)
def gen(names, pt_sel, dm, vmid, config):
def gen(names, pt_sel, virt_io, dm, vmid, config):
board_name = names['board_name']
uos_type = names['uos_types'][vmid]
@ -566,7 +578,7 @@ def gen(names, pt_sel, dm, vmid, config):
log_level_set(uos_type, config)
# gen acrn-dm args
dm_arg_set(names, pt_sel, dm, vmid, config)
dm_arg_set(names, pt_sel, virt_io, dm, vmid, config)
# gen launch end
launch_end(names, dm, vmid, config)

View File

@ -6,7 +6,7 @@
import os
import sys
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'library'))
from launch_item import AvailablePthru, PthruSelected, AcrnDmArgs
from launch_item import AvailablePthru, PthruSelected, VirtioDeviceSelect, AcrnDmArgs
import launch_cfg_lib
import com
@ -21,6 +21,7 @@ def get_launch_item_values(board_info):
"""
launch_item_values = {}
# passthrough devices
pthru = AvailablePthru(board_info)
pthru.get_pci_dev()
pthru.insert_nun()
@ -66,19 +67,21 @@ def validate_launch_setting(board_info, scenario_info, launch_info):
# init available pt devices and get selected pt devices
pt_avl = AvailablePthru(board_info)
pt_sel = PthruSelected(launch_info, pt_avl.bdf_desc_map, pt_avl.bdf_vpid_map)
dm = AcrnDmArgs(board_info, scenario_info, launch_info)
# get bdf/vpid list from config xml
pt_sel.get_bdf()
pt_sel.get_vpid()
pt_sel.get_slot()
dm.get_args()
# check items in config xml
pt_sel.check_item()
# virt-io devices
virtio = VirtioDeviceSelect(launch_info)
virtio.get_virtio()
# acrn dm arguments
dm = AcrnDmArgs(board_info, scenario_info, launch_info)
dm.get_args()
dm.check_item()
return (launch_cfg_lib.ERR_LIST, pt_sel, dm)
return (launch_cfg_lib.ERR_LIST, pt_sel, virtio, dm)
def ui_entry_api(board_info, scenario_info, launch_info, enable_commit=False):
@ -122,7 +125,7 @@ def get_names():
return (err_dic, names)
def generate_script_file(names, pt_sel, dm, vmid, config):
def generate_script_file(names, pt_sel, virt_io, dm, vmid, config):
uos_type = names['uos_types'][vmid]
board_name = names['board_name']
@ -133,7 +136,7 @@ def generate_script_file(names, pt_sel, dm, vmid, config):
board_name.upper(), scenario_name.upper(), uos_type.upper())
print("{}".format(header_info), file=config)
com.gen(names, pt_sel, dm, vmid, config)
com.gen(names, pt_sel, virt_io, dm, vmid, config)
if launch_cfg_lib.ERR_LIST:
return launch_cfg_lib.ERR_LIST
@ -184,7 +187,7 @@ def main(args):
return err_dic
# validate launch config file
(err_dic, pt_sel, dm) = validate_launch_setting(board_info_file, scenario_info_file, launch_info_file)
(err_dic, pt_sel, virt_io, dm) = validate_launch_setting(board_info_file, scenario_info_file, launch_info_file)
if err_dic:
return err_dic
@ -210,7 +213,7 @@ def main(args):
launch_script_file = output + script_name
config_srcs.append(launch_script_file)
with open(launch_script_file, mode = 'w', newline=None, encoding='utf-8') as config:
err_dic = generate_script_file(names, pt_sel, dm.args, vm_th, config)
err_dic = generate_script_file(names, pt_sel, virt_io.dev, dm.args, vm_th, config)
if err_dic:
return err_dic
else:
@ -219,7 +222,7 @@ def main(args):
launch_script_file = output + script_name
config_srcs.append(launch_script_file)
with open(launch_script_file, mode = 'w', newline='\n', encoding='utf-8') as config:
err_dic = generate_script_file(names, pt_sel, dm.args, post_vm_i, config)
err_dic = generate_script_file(names, pt_sel, virt_io.dev, dm.args, post_vm_i, config)
if err_dic:
return err_dic

View File

@ -142,3 +142,13 @@ class PthruSelected():
launch_cfg_lib.pt_devs_check(self.bdf["audio_codec"], self.vpid["audio_codec"], "audio_codec")
launch_cfg_lib.pt_devs_check(self.bdf["wifi"], self.vpid["wifi"], "wifi")
launch_cfg_lib.pt_devs_check(self.bdf["bluetooth"], self.vpid["bluetooth"], "bluetooth")
class VirtioDeviceSelect():
dev = {}
def __init__(self, launch_info):
self.launch_info = launch_info
def get_virtio(self):
self.dev["input"] = launch_cfg_lib.get_leaf_tag_map(self.launch_info, "virtio_devices", "input")

View File

@ -23,7 +23,7 @@ GUEST_FLAG = ["0UL", "GUEST_FLAG_SECURE_WORLD_ENABLED", "GUEST_FLAG_LAPIC_PASSTH
START_HPA_SIZE_LIST = ['0x20000000', '0x40000000', '0x80000000', 'CONFIG_SOS_RAM_SIZE', 'VM0_MEM_SIZE']
MULTI_ITEM = ["guest_flag", "pcpu_id"]
MULTI_ITEM = ["guest_flag", "pcpu_id", "input"]
class MultiItem():
@ -31,6 +31,7 @@ class MultiItem():
def __init__(self):
self.guest_flag = []
self.pcpu_id = []
self.vir_input = []
self.vir_console = []
self.vir_net = []
@ -38,7 +39,7 @@ class TmpItem():
def __init__(self):
self.tag = {}
self.multi = MultiItem
self.multi = MultiItem()
def open_license():
""" Get the license """
@ -410,6 +411,10 @@ def get_leaf_value(tmp, tag_str, leaf):
if leaf.tag == "pcpu_id" and tag_str == "pcpu_id":
tmp.multi.pcpu_id.append(leaf.text)
# get virtio-input for vm
if leaf.tag == "input" and tag_str == "input":
tmp.multi.vir_input.append(leaf.text)
def get_sub_value(tmp, tag_str, vm_id):
@ -422,6 +427,10 @@ def get_sub_value(tmp, tag_str, vm_id):
if tmp.multi.pcpu_id and tag_str == "pcpu_id":
tmp.tag[vm_id] = tmp.multi.pcpu_id
# append input for vm
if tmp.multi.vir_input and tag_str == "input":
tmp.tag[vm_id] = tmp.multi.vir_input
def get_leaf_tag_map(config_file, branch_tag, tag_str):
"""