mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-10 16:05:49 +00:00
acrn-config: remove the same parameters and functions from board_cfg_lib
Board config should relay on library/common.py and board_cfg_lib, then remove the duplicate parameters and functions. Tracked-On: #3854 Signed-off-by: Wei Liu <weix.w.liu@intel.com> Acked-by: Victor Sun <victor.sun@intel.com> Acked-by: Terry Zou <terry.zou@intel.com>
This commit is contained in:
parent
78ce220eb9
commit
ed8ac484ad
@ -4,6 +4,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
import board_cfg_lib
|
import board_cfg_lib
|
||||||
|
import common
|
||||||
|
|
||||||
PLATFORM_HEADER = r"""/* DO NOT MODIFY THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING!
|
PLATFORM_HEADER = r"""/* DO NOT MODIFY THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING!
|
||||||
*/
|
*/
|
||||||
@ -88,7 +89,7 @@ def multi_info_parser(config, default_platform, msg_s, msg_e):
|
|||||||
write_direct = ['PM1A_EVT_ACCESS_SIZE', 'PM1A_EVT_ADDRESS', 'PM1A_CNT_ADDRESS']
|
write_direct = ['PM1A_EVT_ACCESS_SIZE', 'PM1A_EVT_ADDRESS', 'PM1A_CNT_ADDRESS']
|
||||||
|
|
||||||
pm_ac_sz = OverridAccessSize()
|
pm_ac_sz = OverridAccessSize()
|
||||||
multi_lines = board_cfg_lib.get_info(board_cfg_lib.BOARD_INFO_FILE, msg_s, msg_e)
|
multi_lines = board_cfg_lib.get_info(common.BOARD_INFO_FILE, msg_s, msg_e)
|
||||||
|
|
||||||
# S3/S5 not supported by BIOS
|
# S3/S5 not supported by BIOS
|
||||||
sx_name = msg_s.split('_')[0].strip('<')
|
sx_name = msg_s.split('_')[0].strip('<')
|
||||||
@ -129,7 +130,7 @@ def write_direct_info_parser(config, msg_s, msg_e):
|
|||||||
:param msg_s: it is a pattern of key stings what start to match from board information
|
:param msg_s: it is a pattern of key stings what start to match from board information
|
||||||
:param msg_e: it is a pattern of key stings what end to match from board information
|
:param msg_e: it is a pattern of key stings what end to match from board information
|
||||||
"""
|
"""
|
||||||
vector_lines = board_cfg_lib.get_info(board_cfg_lib.BOARD_INFO_FILE, msg_s, msg_e)
|
vector_lines = board_cfg_lib.get_info(common.BOARD_INFO_FILE, msg_s, msg_e)
|
||||||
|
|
||||||
for vector in vector_lines:
|
for vector in vector_lines:
|
||||||
print("{}".format(vector.strip()), file=config)
|
print("{}".format(vector.strip()), file=config)
|
||||||
@ -145,7 +146,7 @@ def drhd_info_parser(config):
|
|||||||
prev_num = 0
|
prev_num = 0
|
||||||
|
|
||||||
drhd_lines = board_cfg_lib.get_info(
|
drhd_lines = board_cfg_lib.get_info(
|
||||||
board_cfg_lib.BOARD_INFO_FILE, "<DRHD_INFO>", "</DRHD_INFO>")
|
common.BOARD_INFO_FILE, "<DRHD_INFO>", "</DRHD_INFO>")
|
||||||
|
|
||||||
# write DRHD
|
# write DRHD
|
||||||
print("/* DRHD of DMAR */", file=config)
|
print("/* DRHD of DMAR */", file=config)
|
||||||
|
@ -7,6 +7,7 @@ import sys
|
|||||||
import enum
|
import enum
|
||||||
import subprocess
|
import subprocess
|
||||||
import board_cfg_lib
|
import board_cfg_lib
|
||||||
|
import common
|
||||||
|
|
||||||
class RDT(enum.Enum):
|
class RDT(enum.Enum):
|
||||||
L2 = 0
|
L2 = 0
|
||||||
@ -28,7 +29,7 @@ MSR_IA32_L3_MASK_END = 0x00000D0F
|
|||||||
def gen_dmar_structure(config):
|
def gen_dmar_structure(config):
|
||||||
"""Generate dmar structure information"""
|
"""Generate dmar structure information"""
|
||||||
|
|
||||||
dmar_info_lines = board_cfg_lib.get_info(board_cfg_lib.BOARD_INFO_FILE, "<DRHD_INFO>", "</DRHD_INFO>")
|
dmar_info_lines = board_cfg_lib.get_info(common.BOARD_INFO_FILE, "<DRHD_INFO>", "</DRHD_INFO>")
|
||||||
drhd_cnt = 0
|
drhd_cnt = 0
|
||||||
drhd_dev_scope_cnt = []
|
drhd_dev_scope_cnt = []
|
||||||
dev_scope_type = []
|
dev_scope_type = []
|
||||||
@ -119,7 +120,7 @@ def gen_rdt_res(config):
|
|||||||
err_dic = {}
|
err_dic = {}
|
||||||
rdt_res_str =""
|
rdt_res_str =""
|
||||||
res_present = [0, 0, 0]
|
res_present = [0, 0, 0]
|
||||||
(rdt_resources, rdt_res_clos_max, rdt_res_mask_max) = board_cfg_lib.clos_info_parser(board_cfg_lib.BOARD_INFO_FILE)
|
(rdt_resources, rdt_res_clos_max, rdt_res_mask_max) = board_cfg_lib.clos_info_parser(common.BOARD_INFO_FILE)
|
||||||
if len(rdt_res_clos_max) != 0:
|
if len(rdt_res_clos_max) != 0:
|
||||||
common_clos_max = min(rdt_res_clos_max)
|
common_clos_max = min(rdt_res_clos_max)
|
||||||
else:
|
else:
|
||||||
@ -159,7 +160,7 @@ def gen_rdt_res(config):
|
|||||||
print("};\n", file=config)
|
print("};\n", file=config)
|
||||||
res_present[RDT.MBA.value] = 1
|
res_present[RDT.MBA.value] = 1
|
||||||
else:
|
else:
|
||||||
err_dic['board config: generate board.c failed'] = "The input of {} was corrupted!".format(board_cfg_lib.BOARD_INFO_FILE)
|
err_dic['board config: generate board.c failed'] = "The input of {} was corrupted!".format(common.BOARD_INFO_FILE)
|
||||||
return err_dic
|
return err_dic
|
||||||
|
|
||||||
if res_present[RDT.L2.value] == 0:
|
if res_present[RDT.L2.value] == 0:
|
||||||
@ -201,9 +202,9 @@ def gen_px_cx(config):
|
|||||||
:param config: it is a file pointer of board information for writing to
|
:param config: it is a file pointer of board information for writing to
|
||||||
"""
|
"""
|
||||||
cpu_brand_lines = board_cfg_lib.get_info(
|
cpu_brand_lines = board_cfg_lib.get_info(
|
||||||
board_cfg_lib.BOARD_INFO_FILE, "<CPU_BRAND>", "</CPU_BRAND>")
|
common.BOARD_INFO_FILE, "<CPU_BRAND>", "</CPU_BRAND>")
|
||||||
cx_lines = board_cfg_lib.get_info(board_cfg_lib.BOARD_INFO_FILE, "<CX_INFO>", "</CX_INFO>")
|
cx_lines = board_cfg_lib.get_info(common.BOARD_INFO_FILE, "<CX_INFO>", "</CX_INFO>")
|
||||||
px_lines = board_cfg_lib.get_info(board_cfg_lib.BOARD_INFO_FILE, "<PX_INFO>", "</PX_INFO>")
|
px_lines = board_cfg_lib.get_info(common.BOARD_INFO_FILE, "<PX_INFO>", "</PX_INFO>")
|
||||||
|
|
||||||
gen_single_data(cx_lines, 'c', config)
|
gen_single_data(cx_lines, 'c', config)
|
||||||
gen_single_data(px_lines, 'p', config)
|
gen_single_data(px_lines, 'p', config)
|
||||||
|
@ -15,8 +15,8 @@ import misc_cfg_h
|
|||||||
import new_board_kconfig
|
import new_board_kconfig
|
||||||
import common
|
import common
|
||||||
|
|
||||||
ACRN_PATH = board_cfg_lib.SOURCE_ROOT_DIR
|
ACRN_PATH = common.SOURCE_ROOT_DIR
|
||||||
ACRN_CONFIG_TARGET = ACRN_PATH + "hypervisor/arch/x86/configs/"
|
ACRN_CONFIG_DEF = ACRN_PATH + "hypervisor/arch/x86/configs/"
|
||||||
|
|
||||||
ACRN_DEFAULT_ACPI = ACRN_PATH + "hypervisor/include/arch/x86/default_acpi_info.h"
|
ACRN_DEFAULT_ACPI = ACRN_PATH + "hypervisor/include/arch/x86/default_acpi_info.h"
|
||||||
GEN_FILE = ["pci_devices.h", "board.c", "_acpi_info.h", "misc_cfg.h", ".config"]
|
GEN_FILE = ["pci_devices.h", "board.c", "_acpi_info.h", "misc_cfg.h", ".config"]
|
||||||
@ -27,48 +27,50 @@ def main(args):
|
|||||||
This is main function to start generate source code related with board
|
This is main function to start generate source code related with board
|
||||||
:param args: it is a command line args for the script
|
:param args: it is a command line args for the script
|
||||||
"""
|
"""
|
||||||
global ACRN_CONFIG_TARGET
|
|
||||||
err_dic = {}
|
err_dic = {}
|
||||||
|
|
||||||
(err_dic, board_info_file, scenario_info_file, output_folder) = board_cfg_lib.get_param(args)
|
(err_dic, board_info_file, scenario_info_file, output_folder) = common.get_param(args)
|
||||||
if err_dic:
|
if err_dic:
|
||||||
return err_dic
|
return err_dic
|
||||||
|
|
||||||
if output_folder:
|
if output_folder:
|
||||||
ACRN_CONFIG_TARGET = os.path.abspath(output_folder) + '/'
|
common.ACRN_CONFIG_TARGET = os.path.abspath(output_folder) + '/'
|
||||||
|
|
||||||
# check env
|
# check env
|
||||||
err_dic = board_cfg_lib.prepare()
|
err_dic = common.prepare()
|
||||||
if err_dic:
|
if err_dic:
|
||||||
return err_dic
|
return err_dic
|
||||||
|
|
||||||
common.BOARD_INFO_FILE = board_info_file
|
common.BOARD_INFO_FILE = board_info_file
|
||||||
common.SCENARIO_INFO_FILE = scenario_info_file
|
common.SCENARIO_INFO_FILE = scenario_info_file
|
||||||
common.get_vm_num(scenario_info_file)
|
common.get_vm_num(scenario_info_file)
|
||||||
board_cfg_lib.BOARD_INFO_FILE = board_info_file
|
|
||||||
board_cfg_lib.SCENARIO_INFO_FILE = scenario_info_file
|
|
||||||
board_cfg_lib.get_vm_num(scenario_info_file)
|
|
||||||
|
|
||||||
# get board name
|
# get board name
|
||||||
(err_dic, board) = board_cfg_lib.get_board_name()
|
(err_dic, board) = common.get_board_name()
|
||||||
if err_dic:
|
if err_dic:
|
||||||
return err_dic
|
return err_dic
|
||||||
board_cfg_lib.BOARD_NAME = board
|
board_cfg_lib.BOARD_NAME = board
|
||||||
|
|
||||||
# check if this is the scenario config which matched board info
|
# check if this is the scenario config which matched board info
|
||||||
(err_dic, status) = board_cfg_lib.is_config_file_match()
|
(err_dic, status) = common.is_config_file_match()
|
||||||
if not status:
|
if not status:
|
||||||
err_dic['board config: Not match'] = "The board xml and scenario xml should be matched"
|
err_dic['board config: Not match'] = "The board xml and scenario xml should be matched"
|
||||||
return err_dic
|
return err_dic
|
||||||
|
|
||||||
board_dir = ACRN_CONFIG_TARGET + board + '/'
|
if common.ACRN_CONFIG_TARGET:
|
||||||
board_cfg_lib.mkdir(board_dir)
|
board_dir = common.ACRN_CONFIG_TARGET + board + '/'
|
||||||
|
else:
|
||||||
|
board_dir = ACRN_CONFIG_DEF + board + '/'
|
||||||
|
common.mkdir(board_dir)
|
||||||
|
|
||||||
config_pci = board_dir + GEN_FILE[0]
|
config_pci = board_dir + GEN_FILE[0]
|
||||||
config_board = board_dir + GEN_FILE[1]
|
config_board = board_dir + GEN_FILE[1]
|
||||||
config_acpi = board_dir + board + GEN_FILE[2]
|
config_acpi = board_dir + board + GEN_FILE[2]
|
||||||
config_misc_cfg = board_dir + GEN_FILE[3]
|
config_misc_cfg = board_dir + GEN_FILE[3]
|
||||||
config_board_kconfig = ACRN_CONFIG_TARGET + board + GEN_FILE[4]
|
if common.ACRN_CONFIG_TARGET:
|
||||||
|
config_board_kconfig = common.ACRN_CONFIG_TARGET + board + GEN_FILE[4]
|
||||||
|
else:
|
||||||
|
config_board_kconfig = ACRN_CONFIG_DEF + board + GEN_FILE[4]
|
||||||
|
|
||||||
# generate board.c
|
# generate board.c
|
||||||
with open(config_board, 'w+') as config:
|
with open(config_board, 'w+') as config:
|
||||||
@ -108,7 +110,7 @@ def ui_entry_api(board_info, scenario_info):
|
|||||||
|
|
||||||
arg_list = ['board_cfg_gen.py', '--board', board_info, '--scenario', scenario_info]
|
arg_list = ['board_cfg_gen.py', '--board', board_info, '--scenario', scenario_info]
|
||||||
|
|
||||||
err_dic = board_cfg_lib.prepare()
|
err_dic = common.prepare()
|
||||||
if err_dic:
|
if err_dic:
|
||||||
return err_dic
|
return err_dic
|
||||||
|
|
||||||
@ -123,4 +125,4 @@ if __name__ == '__main__':
|
|||||||
err_dic = main(ARGS)
|
err_dic = main(ARGS)
|
||||||
if err_dic:
|
if err_dic:
|
||||||
for err_k, err_v in err_dic.items():
|
for err_k, err_v in err_dic.items():
|
||||||
board_cfg_lib.print_red("{}: {}".format(err_k, err_v), err=True)
|
common.print_red("{}: {}".format(err_k, err_v), err=True)
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
# SPDX-License-Identifier: BSD-3-Clause
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
#
|
#
|
||||||
|
|
||||||
|
import common
|
||||||
import board_cfg_lib
|
import board_cfg_lib
|
||||||
|
|
||||||
MISC_CFG_HEADER = """
|
MISC_CFG_HEADER = """
|
||||||
@ -49,21 +50,21 @@ def parse_boot_info():
|
|||||||
err_dic = {}
|
err_dic = {}
|
||||||
vm_types = []
|
vm_types = []
|
||||||
|
|
||||||
(err_dic, scenario_name) = board_cfg_lib.get_scenario_name()
|
(err_dic, scenario_name) = common.get_scenario_name()
|
||||||
if err_dic:
|
if err_dic:
|
||||||
return (err_dic, sos_cmdlines, sos_rootfs, vuart0_dic, vuart1_dic, vm_types)
|
return (err_dic, sos_cmdlines, sos_rootfs, vuart0_dic, vuart1_dic, vm_types)
|
||||||
|
|
||||||
if scenario_name != "logical_partition":
|
if scenario_name != "logical_partition":
|
||||||
sos_cmdlines = board_cfg_lib.get_sub_leaf_tag(board_cfg_lib.SCENARIO_INFO_FILE, "board_private", "bootargs")
|
sos_cmdlines = common.get_sub_leaf_tag(common.SCENARIO_INFO_FILE, "board_private", "bootargs")
|
||||||
sos_rootfs = board_cfg_lib.get_sub_leaf_tag(board_cfg_lib.SCENARIO_INFO_FILE, "board_private", "rootfs")
|
sos_rootfs = common.get_sub_leaf_tag(common.SCENARIO_INFO_FILE, "board_private", "rootfs")
|
||||||
(err_dic, vuart0_dic, vuart1_dic) = board_cfg_lib.get_board_private_vuart("board_private", "console")
|
(err_dic, vuart0_dic, vuart1_dic) = board_cfg_lib.get_board_private_vuart("board_private", "console")
|
||||||
else:
|
else:
|
||||||
sos_cmdlines = board_cfg_lib.get_sub_leaf_tag(board_cfg_lib.SCENARIO_INFO_FILE, "os_config", "bootargs")
|
sos_cmdlines = common.get_sub_leaf_tag(common.SCENARIO_INFO_FILE, "os_config", "bootargs")
|
||||||
|
|
||||||
sos_rootfs = board_cfg_lib.get_sub_leaf_tag(board_cfg_lib.SCENARIO_INFO_FILE, "os_config", "rootfs")
|
sos_rootfs = common.get_sub_leaf_tag(common.SCENARIO_INFO_FILE, "os_config", "rootfs")
|
||||||
(err_dic, vuart0_dic, vuart1_dic) = board_cfg_lib.get_board_private_vuart("os_config", "console")
|
(err_dic, vuart0_dic, vuart1_dic) = board_cfg_lib.get_board_private_vuart("os_config", "console")
|
||||||
|
|
||||||
for i in range(board_cfg_lib.VM_COUNT):
|
for i in range(common.VM_COUNT):
|
||||||
vm_type = board_cfg_lib.get_order_type_by_vmid(i)
|
vm_type = board_cfg_lib.get_order_type_by_vmid(i)
|
||||||
vm_types.append(vm_type)
|
vm_types.append(vm_type)
|
||||||
|
|
||||||
@ -77,7 +78,7 @@ def find_hi_mmio_window(config):
|
|||||||
mmio_max = 0
|
mmio_max = 0
|
||||||
is_hi_mmio = False
|
is_hi_mmio = False
|
||||||
|
|
||||||
iomem_lines = board_cfg_lib.get_info(board_cfg_lib.BOARD_INFO_FILE, "<IOMEM_INFO>", "</IOMEM_INFO>")
|
iomem_lines = board_cfg_lib.get_info(common.BOARD_INFO_FILE, "<IOMEM_INFO>", "</IOMEM_INFO>")
|
||||||
|
|
||||||
for line in iomem_lines:
|
for line in iomem_lines:
|
||||||
if "PCI Bus" not in line:
|
if "PCI Bus" not in line:
|
||||||
@ -85,12 +86,12 @@ def find_hi_mmio_window(config):
|
|||||||
|
|
||||||
line_start_addr = int(line.split('-')[0], 16)
|
line_start_addr = int(line.split('-')[0], 16)
|
||||||
line_end_addr = int(line.split('-')[1].split()[0], 16)
|
line_end_addr = int(line.split('-')[1].split()[0], 16)
|
||||||
if line_start_addr < board_cfg_lib.SIZE_4G and line_end_addr < board_cfg_lib.SIZE_4G:
|
if line_start_addr < common.SIZE_4G and line_end_addr < common.SIZE_4G:
|
||||||
continue
|
continue
|
||||||
elif line_start_addr < board_cfg_lib.SIZE_4G and line_end_addr >= board_cfg_lib.SIZE_4G:
|
elif line_start_addr < common.SIZE_4G and line_end_addr >= common.SIZE_4G:
|
||||||
i_cnt += 1
|
i_cnt += 1
|
||||||
is_hi_mmio = True
|
is_hi_mmio = True
|
||||||
mmio_min = board_cfg_lib.SIZE_4G
|
mmio_min = common.SIZE_4G
|
||||||
mmio_max = line_end_addr
|
mmio_max = line_end_addr
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@ -116,7 +117,7 @@ def generate_file(config):
|
|||||||
Start to generate board.c
|
Start to generate board.c
|
||||||
:param config: it is a file pointer of board information for writing to
|
:param config: it is a file pointer of board information for writing to
|
||||||
"""
|
"""
|
||||||
board_cfg_lib.get_valid_irq(board_cfg_lib.BOARD_INFO_FILE)
|
board_cfg_lib.get_valid_irq(common.BOARD_INFO_FILE)
|
||||||
|
|
||||||
# get cpu processor list
|
# get cpu processor list
|
||||||
cpu_list = board_cfg_lib.get_processor_info()
|
cpu_list = board_cfg_lib.get_processor_info()
|
||||||
@ -143,14 +144,14 @@ def generate_file(config):
|
|||||||
# parse the setting ttys vuatx dic: {vmid:base/irq}
|
# parse the setting ttys vuatx dic: {vmid:base/irq}
|
||||||
vuart0_setting = Vuart()
|
vuart0_setting = Vuart()
|
||||||
vuart1_setting = Vuart()
|
vuart1_setting = Vuart()
|
||||||
vuart0_setting = board_cfg_lib.get_vuart_info_id(board_cfg_lib.SCENARIO_INFO_FILE, 0)
|
vuart0_setting = board_cfg_lib.get_vuart_info_id(common.SCENARIO_INFO_FILE, 0)
|
||||||
vuart1_setting = board_cfg_lib.get_vuart_info_id(board_cfg_lib.SCENARIO_INFO_FILE, 1)
|
vuart1_setting = board_cfg_lib.get_vuart_info_id(common.SCENARIO_INFO_FILE, 1)
|
||||||
|
|
||||||
# sos command lines information
|
# sos command lines information
|
||||||
sos_cmdlines = [i for i in sos_cmdlines[0].split() if i != '']
|
sos_cmdlines = [i for i in sos_cmdlines[0].split() if i != '']
|
||||||
|
|
||||||
# get native rootfs list from board_info.xml
|
# get native rootfs list from board_info.xml
|
||||||
(root_devs, root_dev_num) = board_cfg_lib.get_rootfs(board_cfg_lib.BOARD_INFO_FILE)
|
(root_devs, root_dev_num) = board_cfg_lib.get_rootfs(common.BOARD_INFO_FILE)
|
||||||
|
|
||||||
# start to generate misc_cfg.h
|
# start to generate misc_cfg.h
|
||||||
print("{0}".format(board_cfg_lib.HEADER_LICENSE), file=config)
|
print("{0}".format(board_cfg_lib.HEADER_LICENSE), file=config)
|
||||||
@ -160,7 +161,7 @@ def generate_file(config):
|
|||||||
print("#define MAX_PCPU_NUM\t{}U".format(max_cpu_num), file=config)
|
print("#define MAX_PCPU_NUM\t{}U".format(max_cpu_num), file=config)
|
||||||
|
|
||||||
# set macro of max clos number
|
# set macro of max clos number
|
||||||
(_, clos_max, _) = board_cfg_lib.clos_info_parser(board_cfg_lib.BOARD_INFO_FILE)
|
(_, clos_max, _) = board_cfg_lib.clos_info_parser(common.BOARD_INFO_FILE)
|
||||||
if len(clos_max) != 0:
|
if len(clos_max) != 0:
|
||||||
common_clos_max = min(clos_max)
|
common_clos_max = min(clos_max)
|
||||||
else:
|
else:
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
import board_cfg_lib
|
import board_cfg_lib
|
||||||
|
import common
|
||||||
|
|
||||||
|
|
||||||
DESC = """# Board defconfig generated by acrn-config tool
|
DESC = """# Board defconfig generated by acrn-config tool
|
||||||
@ -26,7 +27,7 @@ VM_NUM_MAP_TOTAL_HV_RAM_SIZE = {
|
|||||||
7:0x10E00000,
|
7:0x10E00000,
|
||||||
}
|
}
|
||||||
|
|
||||||
MEM_ALIGN = 2 * board_cfg_lib.SIZE_M
|
MEM_ALIGN = 2 * common.SIZE_M
|
||||||
|
|
||||||
|
|
||||||
def find_avl_memory(ram_range, hpa_size, hv_start_offset):
|
def find_avl_memory(ram_range, hpa_size, hv_start_offset):
|
||||||
@ -62,7 +63,7 @@ def get_ram_range():
|
|||||||
ram_range = {}
|
ram_range = {}
|
||||||
|
|
||||||
io_mem_lines = board_cfg_lib.get_info(
|
io_mem_lines = board_cfg_lib.get_info(
|
||||||
board_cfg_lib.BOARD_INFO_FILE, "<IOMEM_INFO>", "</IOMEM_INFO>")
|
common.BOARD_INFO_FILE, "<IOMEM_INFO>", "</IOMEM_INFO>")
|
||||||
|
|
||||||
for line in io_mem_lines:
|
for line in io_mem_lines:
|
||||||
if 'System RAM' not in line:
|
if 'System RAM' not in line:
|
||||||
@ -81,9 +82,9 @@ def get_serial_type():
|
|||||||
ttys_value = ''
|
ttys_value = ''
|
||||||
|
|
||||||
# Get ttySx information from board config file
|
# Get ttySx information from board config file
|
||||||
ttys_lines = board_cfg_lib.get_info(board_cfg_lib.BOARD_INFO_FILE, "<TTYS_INFO>", "</TTYS_INFO>")
|
ttys_lines = board_cfg_lib.get_info(common.BOARD_INFO_FILE, "<TTYS_INFO>", "</TTYS_INFO>")
|
||||||
|
|
||||||
(err_dic, scenario_name) = board_cfg_lib.get_scenario_name()
|
(err_dic, scenario_name) = common.get_scenario_name()
|
||||||
if scenario_name == "logical_partition":
|
if scenario_name == "logical_partition":
|
||||||
ttyn = 'ttyS0'
|
ttyn = 'ttyS0'
|
||||||
else:
|
else:
|
||||||
@ -112,7 +113,7 @@ def is_rdt_supported():
|
|||||||
"""
|
"""
|
||||||
Returns True if platform supports RDT else False
|
Returns True if platform supports RDT else False
|
||||||
"""
|
"""
|
||||||
(rdt_resources, rdt_res_clos_max, _) = board_cfg_lib.clos_info_parser(board_cfg_lib.BOARD_INFO_FILE)
|
(rdt_resources, rdt_res_clos_max, _) = board_cfg_lib.clos_info_parser(common.BOARD_INFO_FILE)
|
||||||
if len(rdt_resources) == 0 or len(rdt_res_clos_max) == 0:
|
if len(rdt_resources) == 0 or len(rdt_res_clos_max) == 0:
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
@ -127,10 +128,10 @@ def generate_file(config):
|
|||||||
# this dictonary mapped with 'address start':'mem range'
|
# this dictonary mapped with 'address start':'mem range'
|
||||||
ram_range = {}
|
ram_range = {}
|
||||||
|
|
||||||
if board_cfg_lib.VM_COUNT in list(VM_NUM_MAP_TOTAL_HV_RAM_SIZE.keys()):
|
if common.VM_COUNT in list(VM_NUM_MAP_TOTAL_HV_RAM_SIZE.keys()):
|
||||||
hv_ram_size = VM_NUM_MAP_TOTAL_HV_RAM_SIZE[board_cfg_lib.VM_COUNT]
|
hv_ram_size = VM_NUM_MAP_TOTAL_HV_RAM_SIZE[common.VM_COUNT]
|
||||||
else:
|
else:
|
||||||
board_cfg_lib.print_red("VM num should not be greater than 8", err=True)
|
common.print_red("VM num should not be greater than 8", err=True)
|
||||||
err_dic["board config: total vm number error"] = "VM num should not be greater than 8"
|
err_dic["board config: total vm number error"] = "VM num should not be greater than 8"
|
||||||
return err_dic
|
return err_dic
|
||||||
|
|
||||||
@ -144,10 +145,10 @@ def generate_file(config):
|
|||||||
total_size = reserved_ram + hv_ram_size
|
total_size = reserved_ram + hv_ram_size
|
||||||
avl_start_addr = find_avl_memory(ram_range, str(total_size), hv_start_offset)
|
avl_start_addr = find_avl_memory(ram_range, str(total_size), hv_start_offset)
|
||||||
hv_start_addr = int(avl_start_addr, 16) + int(hex(reserved_ram), 16)
|
hv_start_addr = int(avl_start_addr, 16) + int(hex(reserved_ram), 16)
|
||||||
hv_start_addr = board_cfg_lib.round_up(hv_start_addr, MEM_ALIGN)
|
hv_start_addr = common.round_up(hv_start_addr, MEM_ALIGN)
|
||||||
|
|
||||||
# add config scenario name
|
# add config scenario name
|
||||||
(err_dic, scenario_name) = board_cfg_lib.get_scenario_name()
|
(err_dic, scenario_name) = common.get_scenario_name()
|
||||||
|
|
||||||
print("{}".format(DESC), file=config)
|
print("{}".format(DESC), file=config)
|
||||||
print("CONFIG_{}=y".format(scenario_name.upper()), file=config)
|
print("CONFIG_{}=y".format(scenario_name.upper()), file=config)
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
import collections
|
import collections
|
||||||
import board_cfg_lib
|
import board_cfg_lib
|
||||||
|
import common
|
||||||
|
|
||||||
PCI_HEADER = r"""
|
PCI_HEADER = r"""
|
||||||
#ifndef PCI_DEVICES_H_
|
#ifndef PCI_DEVICES_H_
|
||||||
@ -59,11 +60,11 @@ def get_size(line):
|
|||||||
# get size string from format, Region n: Memory at x ... [size=NK]
|
# get size string from format, Region n: Memory at x ... [size=NK]
|
||||||
size_str = line.split()[-1].strip(']').split('=')[1]
|
size_str = line.split()[-1].strip(']').split('=')[1]
|
||||||
if 'G' in size_str:
|
if 'G' in size_str:
|
||||||
size = int(size_str.strip('G')) * board_cfg_lib.SIZE_G
|
size = int(size_str.strip('G')) * common.SIZE_G
|
||||||
elif 'M' in size_str:
|
elif 'M' in size_str:
|
||||||
size = int(size_str.strip('M')) * board_cfg_lib.SIZE_M
|
size = int(size_str.strip('M')) * common.SIZE_M
|
||||||
elif 'K' in size_str:
|
elif 'K' in size_str:
|
||||||
size = int(size_str.strip('K')) * board_cfg_lib.SIZE_K
|
size = int(size_str.strip('K')) * common.SIZE_K
|
||||||
else:
|
else:
|
||||||
size = int(size_str)
|
size = int(size_str)
|
||||||
|
|
||||||
@ -74,7 +75,7 @@ def remap_bar_addr_to_high(bar_addr, line):
|
|||||||
"""Generate vbar address"""
|
"""Generate vbar address"""
|
||||||
global HI_MMIO_OFFSET
|
global HI_MMIO_OFFSET
|
||||||
size = get_size(line)
|
size = get_size(line)
|
||||||
cur_addr = board_cfg_lib.round_up(bar_addr, size)
|
cur_addr = common.round_up(bar_addr, size)
|
||||||
HI_MMIO_OFFSET = cur_addr + size
|
HI_MMIO_OFFSET = cur_addr + size
|
||||||
return cur_addr
|
return cur_addr
|
||||||
|
|
||||||
@ -88,7 +89,7 @@ def parser_pci():
|
|||||||
cal_sub_pci_name = []
|
cal_sub_pci_name = []
|
||||||
|
|
||||||
pci_lines = board_cfg_lib.get_info(
|
pci_lines = board_cfg_lib.get_info(
|
||||||
board_cfg_lib.BOARD_INFO_FILE, "<PCI_DEVICE>", "</PCI_DEVICE>")
|
common.BOARD_INFO_FILE, "<PCI_DEVICE>", "</PCI_DEVICE>")
|
||||||
|
|
||||||
for line in pci_lines:
|
for line in pci_lines:
|
||||||
tmp_bar_mem = Bar_Mem()
|
tmp_bar_mem = Bar_Mem()
|
||||||
@ -100,7 +101,7 @@ def parser_pci():
|
|||||||
|
|
||||||
bar_addr = int(get_value_after_str(line, "at"), 16)
|
bar_addr = int(get_value_after_str(line, "at"), 16)
|
||||||
bar_num = line.split()[1].strip(':')
|
bar_num = line.split()[1].strip(':')
|
||||||
if bar_addr >= board_cfg_lib.SIZE_4G or bar_addr < board_cfg_lib.SIZE_2G:
|
if bar_addr >= common.SIZE_4G or bar_addr < common.SIZE_2G:
|
||||||
if not tmp_bar_attr.remappable:
|
if not tmp_bar_attr.remappable:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@ -155,7 +156,7 @@ def write_pbdf(i_cnt, bdf, bar_attr, config):
|
|||||||
tmp_sub_name = "_".join(bar_attr.name.split()).upper()
|
tmp_sub_name = "_".join(bar_attr.name.split()).upper()
|
||||||
else:
|
else:
|
||||||
if '-' in bar_attr.name:
|
if '-' in bar_attr.name:
|
||||||
tmp_sub_name = board_cfg_lib.undline_name(bar_attr.name) + "_" + str(i_cnt)
|
tmp_sub_name = common.undline_name(bar_attr.name) + "_" + str(i_cnt)
|
||||||
else:
|
else:
|
||||||
tmp_sub_name = "_".join(bar_attr.name.split()).upper() + "_" + str(i_cnt)
|
tmp_sub_name = "_".join(bar_attr.name.split()).upper() + "_" + str(i_cnt)
|
||||||
|
|
||||||
@ -185,7 +186,7 @@ def write_vbar(i_cnt, bdf, pci_bar_dic, bar_attr, config):
|
|||||||
align = ' ' * 48
|
align = ' ' * 48
|
||||||
ptdev_mmio_str = ''
|
ptdev_mmio_str = ''
|
||||||
|
|
||||||
tmp_sub_name = board_cfg_lib.undline_name(bar_attr.name) + "_" + str(i_cnt)
|
tmp_sub_name = common.undline_name(bar_attr.name) + "_" + str(i_cnt)
|
||||||
if bdf in pci_bar_dic.keys():
|
if bdf in pci_bar_dic.keys():
|
||||||
bar_list = list(pci_bar_dic[bdf].keys())
|
bar_list = list(pci_bar_dic[bdf].keys())
|
||||||
bar_len = len(bar_list)
|
bar_len = len(bar_list)
|
||||||
|
@ -7,18 +7,10 @@ import re
|
|||||||
import sys
|
import sys
|
||||||
import common
|
import common
|
||||||
|
|
||||||
SOURCE_ROOT_DIR = common.SOURCE_ROOT_DIR
|
|
||||||
BOARD_NAME = ''
|
BOARD_NAME = ''
|
||||||
BOARD_INFO_FILE = "board_info.txt"
|
|
||||||
SCENARIO_INFO_FILE = ""
|
|
||||||
|
|
||||||
BIOS_INFO = ['BIOS Information', 'Vendor:', 'Version:', 'Release Date:', 'BIOS Revision:']
|
BIOS_INFO = ['BIOS Information', 'Vendor:', 'Version:', 'Release Date:', 'BIOS Revision:']
|
||||||
|
|
||||||
BASE_BOARD = ['Base Board Information', 'Manufacturer:', 'Product Name:', 'Version:']
|
BASE_BOARD = ['Base Board Information', 'Manufacturer:', 'Product Name:', 'Version:']
|
||||||
|
|
||||||
BOARD_NAMES = ['apl-mrb', 'apl-nuc', 'apl-up2', 'dnv-cb2', 'nuc6cayh',
|
|
||||||
'nuc7i7dnb', 'kbl-nuc-i7', 'icl-rvp']
|
|
||||||
|
|
||||||
LEGACY_TTYS = {
|
LEGACY_TTYS = {
|
||||||
'ttyS0':'0x3F8',
|
'ttyS0':'0x3F8',
|
||||||
'ttyS1':'0x2F8',
|
'ttyS1':'0x2F8',
|
||||||
@ -28,8 +20,6 @@ LEGACY_TTYS = {
|
|||||||
|
|
||||||
NATIVE_CONSOLE_DIC = {}
|
NATIVE_CONSOLE_DIC = {}
|
||||||
VALID_LEGACY_IRQ = []
|
VALID_LEGACY_IRQ = []
|
||||||
VM_COUNT = 0
|
|
||||||
|
|
||||||
ERR_LIST = {}
|
ERR_LIST = {}
|
||||||
|
|
||||||
HEADER_LICENSE = common.open_license() + "\n"
|
HEADER_LICENSE = common.open_license() + "\n"
|
||||||
@ -40,69 +30,6 @@ KNOWN_HIDDEN_PDEVS_BOARD_DB = {
|
|||||||
'apl-up2':['00:0d:0'],
|
'apl-up2':['00:0d:0'],
|
||||||
}
|
}
|
||||||
|
|
||||||
SIZE_K = common.SIZE_K
|
|
||||||
SIZE_M = common.SIZE_M
|
|
||||||
SIZE_2G = common.SIZE_2G
|
|
||||||
SIZE_4G = common.SIZE_4G
|
|
||||||
SIZE_G = common.SIZE_G
|
|
||||||
|
|
||||||
def prepare():
|
|
||||||
""" check environment """
|
|
||||||
return common.prepare()
|
|
||||||
|
|
||||||
|
|
||||||
def print_yel(msg, warn=False):
|
|
||||||
"""
|
|
||||||
Print the message with color of yellow
|
|
||||||
:param msg: the stings which will be output to STDOUT
|
|
||||||
:param warn: the condition if needs to be output the color of yellow with 'Warning'
|
|
||||||
"""
|
|
||||||
common.print_yel(msg, warn)
|
|
||||||
|
|
||||||
|
|
||||||
def print_red(msg, err=False):
|
|
||||||
"""
|
|
||||||
Print the message with color of red
|
|
||||||
:param msg: the stings which will be output to STDOUT
|
|
||||||
:param err: the condition if needs to be output the color of red with 'Error'
|
|
||||||
"""
|
|
||||||
common.print_red(msg, err)
|
|
||||||
|
|
||||||
|
|
||||||
def get_board_name():
|
|
||||||
"""
|
|
||||||
Get board name from board.xml at fist line
|
|
||||||
:param board_info: it is a file what contains board information for script to read from
|
|
||||||
"""
|
|
||||||
return common.get_board_name()
|
|
||||||
|
|
||||||
|
|
||||||
def get_scenario_name():
|
|
||||||
"""
|
|
||||||
Get scenario name from scenario.xml at fist line
|
|
||||||
:param scenario_info: it is a file what contains board information for script to read from
|
|
||||||
"""
|
|
||||||
return common.get_scenario_name()
|
|
||||||
|
|
||||||
|
|
||||||
def is_config_file_match():
|
|
||||||
|
|
||||||
return common.is_config_file_match()
|
|
||||||
|
|
||||||
|
|
||||||
def usage(file_name):
|
|
||||||
""" This is usage for how to use this tool """
|
|
||||||
common.usage(file_name)
|
|
||||||
|
|
||||||
|
|
||||||
def get_param(args):
|
|
||||||
"""
|
|
||||||
Get the script parameters from command line
|
|
||||||
:param args: this the command line of string for the script without script name
|
|
||||||
"""
|
|
||||||
return common.get_param(args)
|
|
||||||
|
|
||||||
|
|
||||||
def get_info(board_info, msg_s, msg_e):
|
def get_info(board_info, msg_s, msg_e):
|
||||||
"""
|
"""
|
||||||
Get information which specify by argument
|
Get information which specify by argument
|
||||||
@ -145,8 +72,8 @@ def handle_bios_info(config):
|
|||||||
Handle bios information
|
Handle bios information
|
||||||
:param config: it is a file pointer of bios information for writing to
|
:param config: it is a file pointer of bios information for writing to
|
||||||
"""
|
"""
|
||||||
bios_lines = get_info(BOARD_INFO_FILE, "<BIOS_INFO>", "</BIOS_INFO>")
|
bios_lines = get_info(common.BOARD_INFO_FILE, "<BIOS_INFO>", "</BIOS_INFO>")
|
||||||
board_lines = get_info(BOARD_INFO_FILE, "<BASE_BOARD_INFO>", "</BASE_BOARD_INFO>")
|
board_lines = get_info(common.BOARD_INFO_FILE, "<BASE_BOARD_INFO>", "</BASE_BOARD_INFO>")
|
||||||
print("/*", file=config)
|
print("/*", file=config)
|
||||||
|
|
||||||
if not bios_lines or not board_lines:
|
if not bios_lines or not board_lines:
|
||||||
@ -212,17 +139,6 @@ def get_max_clos_mask(board_file):
|
|||||||
return list(re.split(', |\s |,', rdt_res)), list(map(int, rdt_res_clos_max.split(','))), list(re.split(', |\s |,', rdt_res_mask_max))
|
return list(re.split(', |\s |,', rdt_res)), list(map(int, rdt_res_clos_max.split(','))), list(re.split(', |\s |,', rdt_res_mask_max))
|
||||||
|
|
||||||
|
|
||||||
def get_sub_leaf_tag(config_file, branch_tag, tag_str=''):
|
|
||||||
"""
|
|
||||||
This is get tag value by tag_str from config file
|
|
||||||
:param config_file: it is a file what contains information for script to read from
|
|
||||||
:param branch_tag: it is key of patter to config file branch tag item
|
|
||||||
:param tag_str: it is key of pattern to config file leaf tag item
|
|
||||||
:return: value of tag_str item
|
|
||||||
"""
|
|
||||||
return common.get_sub_leaf_tag(config_file, branch_tag, tag_str)
|
|
||||||
|
|
||||||
|
|
||||||
def get_rootfs(config_file):
|
def get_rootfs(config_file):
|
||||||
"""
|
"""
|
||||||
This will get rootfs partition from board information
|
This will get rootfs partition from board information
|
||||||
@ -254,23 +170,13 @@ def clos_info_parser(board_info):
|
|||||||
return get_max_clos_mask(board_info)
|
return get_max_clos_mask(board_info)
|
||||||
|
|
||||||
|
|
||||||
def get_vm_num(config_file):
|
|
||||||
"""
|
|
||||||
This is get vm count
|
|
||||||
:param config_file: it is a file what contains vm information for script to read from
|
|
||||||
:return: number of vm
|
|
||||||
"""
|
|
||||||
global VM_COUNT
|
|
||||||
VM_COUNT = common.get_vm_num(config_file)
|
|
||||||
|
|
||||||
|
|
||||||
def get_order_type_by_vmid(idx):
|
def get_order_type_by_vmid(idx):
|
||||||
"""
|
"""
|
||||||
This is get pre launched vm count
|
This is get pre launched vm count
|
||||||
:param idx: index of vm id
|
:param idx: index of vm id
|
||||||
:return: vm type of index to vmid
|
:return: vm type of index to vmid
|
||||||
"""
|
"""
|
||||||
(err_dic, order_type) = common.get_load_order_by_vmid(SCENARIO_INFO_FILE, VM_COUNT, idx)
|
(err_dic, order_type) = common.get_load_order_by_vmid(common.SCENARIO_INFO_FILE, common.VM_COUNT, idx)
|
||||||
if err_dic:
|
if err_dic:
|
||||||
ERR_LIST.update(err_dic)
|
ERR_LIST.update(err_dic)
|
||||||
|
|
||||||
@ -304,7 +210,7 @@ def alloc_irq():
|
|||||||
|
|
||||||
def get_valid_console():
|
def get_valid_console():
|
||||||
""" Get valid console with mapping {ttyS:irq} returned """
|
""" Get valid console with mapping {ttyS:irq} returned """
|
||||||
used_console_lines = get_info(BOARD_INFO_FILE, "<TTYS_INFO>", "</TTYS_INFO>")
|
used_console_lines = get_info(common.BOARD_INFO_FILE, "<TTYS_INFO>", "</TTYS_INFO>")
|
||||||
|
|
||||||
vuart0_valid_console = []
|
vuart0_valid_console = []
|
||||||
vuart1_valid_console = ['ttyS0', 'ttyS1', 'ttyS2', 'ttyS3', 'ttyS4', 'ttyS5', 'ttyS6', 'ttyS7']
|
vuart1_valid_console = ['ttyS0', 'ttyS1', 'ttyS2', 'ttyS3', 'ttyS4', 'ttyS5', 'ttyS6', 'ttyS7']
|
||||||
@ -348,12 +254,12 @@ def parser_vuart_console():
|
|||||||
3. ttyS2
|
3. ttyS2
|
||||||
"""
|
"""
|
||||||
ttys_n = ''
|
ttys_n = ''
|
||||||
(err_dic, scenario_name) = get_scenario_name()
|
(err_dic, scenario_name) = common.get_scenario_name()
|
||||||
|
|
||||||
if scenario_name != "logical_partition":
|
if scenario_name != "logical_partition":
|
||||||
ttys = get_sub_leaf_tag(SCENARIO_INFO_FILE, "board_private", "console")
|
ttys = common.get_sub_leaf_tag(common.SCENARIO_INFO_FILE, "board_private", "console")
|
||||||
else:
|
else:
|
||||||
ttys = get_sub_leaf_tag(SCENARIO_INFO_FILE, "os_config", "console")
|
ttys = common.get_sub_leaf_tag(common.SCENARIO_INFO_FILE, "os_config", "console")
|
||||||
|
|
||||||
if not ttys or ttys[0] == None:
|
if not ttys or ttys[0] == None:
|
||||||
return (err_dic, ttys_n)
|
return (err_dic, ttys_n)
|
||||||
@ -383,7 +289,7 @@ def get_board_private_vuart(branch_tag, tag_console):
|
|||||||
|
|
||||||
if ttys_n:
|
if ttys_n:
|
||||||
|
|
||||||
(vuart0_valid_console, vuart1_valid_console, show_vuart1) = console_to_show(BOARD_INFO_FILE)
|
(vuart0_valid_console, vuart1_valid_console, show_vuart1) = console_to_show(common.BOARD_INFO_FILE)
|
||||||
|
|
||||||
# VUART0
|
# VUART0
|
||||||
if ttys_n not in list(NATIVE_CONSOLE_DIC.keys()):
|
if ttys_n not in list(NATIVE_CONSOLE_DIC.keys()):
|
||||||
@ -467,7 +373,7 @@ def get_processor_info():
|
|||||||
"""
|
"""
|
||||||
processor_list = []
|
processor_list = []
|
||||||
tmp_list = []
|
tmp_list = []
|
||||||
processor_info = get_info(BOARD_INFO_FILE, "<CPU_PROCESSOR_INFO>", "</CPU_PROCESSOR_INFO>")
|
processor_info = get_info(common.BOARD_INFO_FILE, "<CPU_PROCESSOR_INFO>", "</CPU_PROCESSOR_INFO>")
|
||||||
|
|
||||||
if not processor_info:
|
if not processor_info:
|
||||||
key = "CPU PROCESSOR_INFO error:"
|
key = "CPU PROCESSOR_INFO error:"
|
||||||
@ -578,22 +484,3 @@ def get_pci_info(board_info):
|
|||||||
pci_bdf_vpid[bdf_str] = vid_pid
|
pci_bdf_vpid[bdf_str] = vid_pid
|
||||||
|
|
||||||
return (pci_desc, pci_bdf_vpid)
|
return (pci_desc, pci_bdf_vpid)
|
||||||
|
|
||||||
|
|
||||||
def undline_name(name):
|
|
||||||
"""
|
|
||||||
This convert name which has contain '-' to '_'
|
|
||||||
:param name: name which contain '-' and ' '
|
|
||||||
:return: name_str which contain'_'
|
|
||||||
"""
|
|
||||||
return common.undline_name(name)
|
|
||||||
|
|
||||||
|
|
||||||
def round_up(addr, mem_align):
|
|
||||||
"""Keep memory align"""
|
|
||||||
return common.round_up(addr, mem_align)
|
|
||||||
|
|
||||||
|
|
||||||
def mkdir(path):
|
|
||||||
|
|
||||||
common.mkdir(path)
|
|
||||||
|
@ -10,6 +10,7 @@ import shutil
|
|||||||
import subprocess
|
import subprocess
|
||||||
import xml.etree.ElementTree as ET
|
import xml.etree.ElementTree as ET
|
||||||
|
|
||||||
|
ACRN_CONFIG_TARGET = ''
|
||||||
SOURCE_ROOT_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../../../')
|
SOURCE_ROOT_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../../../')
|
||||||
HV_LICENSE_FILE = SOURCE_ROOT_DIR + 'misc/acrn-config/library/hypervisor_license'
|
HV_LICENSE_FILE = SOURCE_ROOT_DIR + 'misc/acrn-config/library/hypervisor_license'
|
||||||
|
|
||||||
@ -258,6 +259,7 @@ def get_vm_num(config_file):
|
|||||||
:param config_file: it is a file what contains information for script to read from
|
:param config_file: it is a file what contains information for script to read from
|
||||||
:return: total vm number
|
:return: total vm number
|
||||||
"""
|
"""
|
||||||
|
global VM_COUNT
|
||||||
vm_count = 0
|
vm_count = 0
|
||||||
root = get_config_root(config_file)
|
root = get_config_root(config_file)
|
||||||
for item in root:
|
for item in root:
|
||||||
|
Loading…
Reference in New Issue
Block a user