def gen_dsdt(dest_vm_acpi_path, passthru_devices, board_info): ''' generate dsdt.asl :param dest_vm_acpi_path: the path to store generated ACPI asl code :param passthru_devices: :return: ''' dsdt_asl = 'dsdt.asl' p_dsdt_start = r'{' (bdf_desc_map, bdf_vpid_map) = board_cfg_lib.get_pci_info(board_info) with open(os.path.join(dest_vm_acpi_path, dsdt_asl), 'w') as dest: lines = [] with open(os.path.join(TEMPLATE_ACPI_PATH, dsdt_asl), 'r') as src: for line in src.readlines(): lines.append(line) if line.startswith(p_dsdt_start): for passthru_device in passthru_devices: passthru_bdf = None passthru_vpid = None for bdf in bdf_desc_map.keys(): if bdf_desc_map[bdf].find(passthru_device) >= 0: passthru_bdf = bdf break if passthru_bdf is not None and passthru_bdf in bdf_vpid_map.keys( ): passthru_vpid = bdf_vpid_map[passthru_bdf] if passthru_device in ['TPM2']: tpm2_asl = os.path.join(TEMPLATE_ACPI_PATH, 'dsdt_tpm2.asl') start = False with open(tpm2_asl, 'r') as tpm2_src: for tpm2_line in tpm2_src.readlines(): if tpm2_line.startswith('{'): start = True continue if tpm2_line.startswith('}'): start = False continue if start: lines.append(tpm2_line) elif passthru_vpid is not None and passthru_vpid == TSN_DEVICE_LIST[ 1]: otn1_asl = os.path.join(TEMPLATE_ACPI_PATH, 'dsdt_tsn_otn1.asl') start = False with open(otn1_asl, 'r') as otn1_src: for otn1_line in otn1_src.readlines(): if otn1_line.startswith('{'): start = True continue if otn1_line.startswith('}'): start = False continue if start: lines.append(otn1_line) else: pass dest.writelines(lines)
def pci_devs_check(pci_bdf_devs, branch_tag, tag_str): """ Check vm pci devices :param item: vm pci_devs item in xml :return: None """ (bdf_desc_map, bdf_vpid_map) = board_cfg_lib.get_pci_info(common.BOARD_INFO_FILE) for id_key, pci_bdf_devs_list in pci_bdf_devs.items(): for pci_bdf_dev in pci_bdf_devs_list: if pci_bdf_dev and pci_bdf_dev not in bdf_desc_map.keys(): key = "vm:id={},{},{}".format(id_key, branch_tag, tag_str) ERR_LIST[key] = "The {} is unkonw device of PCI".format(pci_bdf_dev)
def avl_pci_devs(): pci_dev_list = [] (bdf_desc_map, bdf_vpid_map) = board_cfg_lib.get_pci_info(common.BOARD_INFO_FILE) pci_dev_list = common.get_avl_dev_info(bdf_desc_map, PT_SUB_PCI['ethernet']) tmp_pci_list = common.get_avl_dev_info(bdf_desc_map, PT_SUB_PCI['sata']) pci_dev_list.extend(tmp_pci_list) tmp_pci_list = common.get_avl_dev_info(bdf_desc_map, PT_SUB_PCI['nvme']) pci_dev_list.extend(tmp_pci_list) return pci_dev_list
def __init__(self, board_info): self.board_info = board_info (self.bdf_desc_map, self.bdf_vpid_map) = board_cfg_lib.get_pci_info(board_info)