diff --git a/misc/acrn-config/config_app/views.py b/misc/acrn-config/config_app/views.py index 4214e17bb..cf91fab43 100644 --- a/misc/acrn-config/config_app/views.py +++ b/misc/acrn-config/config_app/views.py @@ -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) diff --git a/misc/acrn-config/launch_config/com.py b/misc/acrn-config/launch_config/com.py index 11755edb6..a6a06f9f0 100644 --- a/misc/acrn-config/launch_config/com.py +++ b/misc/acrn-config/launch_config/com.py @@ -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) diff --git a/misc/acrn-config/launch_config/launch_cfg_gen.py b/misc/acrn-config/launch_config/launch_cfg_gen.py index 6121f53e8..ef2ae43ec 100644 --- a/misc/acrn-config/launch_config/launch_cfg_gen.py +++ b/misc/acrn-config/launch_config/launch_cfg_gen.py @@ -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 diff --git a/misc/acrn-config/launch_config/launch_item.py b/misc/acrn-config/launch_config/launch_item.py index f8345f4e4..5466a182a 100644 --- a/misc/acrn-config/launch_config/launch_item.py +++ b/misc/acrn-config/launch_config/launch_item.py @@ -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") diff --git a/misc/acrn-config/library/common.py b/misc/acrn-config/library/common.py index 61cbf1381..07ee6efa5 100644 --- a/misc/acrn-config/library/common.py +++ b/misc/acrn-config/library/common.py @@ -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): """