1# Copyright (C) 2019-2022 Intel Corporation. 2# 3# SPDX-License-Identifier: BSD-3-Clause 4# 5 6 7import os 8import sys 9sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'library')) 10import board_cfg_lib 11import board_c 12import board_info_h 13import pci_devices_h 14import acpi_platform_h 15import acrn_config_utilities 16 17ACRN_PATH = acrn_config_utilities.SOURCE_ROOT_DIR 18ACRN_CONFIG_DEF = ACRN_PATH + "misc/config_tools/data/" 19 20ACRN_DEFAULT_ACPI = ACRN_PATH + "hypervisor/include/arch/x86/asm/default_acpi_info.h" 21GEN_FILE = ["pci_devices.h", "board.c", "platform_acpi_info.h", "misc_cfg.h", 22 "board_info.h", "vbar_base.h"] 23 24 25def main(args): 26 """ 27 This is main function to start generate source code related with board 28 :param args: it is a command line args for the script 29 """ 30 err_dic = {} 31 32 (err_dic, params) = acrn_config_utilities.get_param(args) 33 if err_dic: 34 return err_dic 35 36 # check env 37 err_dic = acrn_config_utilities.prepare() 38 if err_dic: 39 return err_dic 40 41 acrn_config_utilities.BOARD_INFO_FILE = params['--board'] 42 acrn_config_utilities.SCENARIO_INFO_FILE = params['--scenario'] 43 acrn_config_utilities.get_vm_num(params['--scenario']) 44 acrn_config_utilities.get_load_order() 45 46 if acrn_config_utilities.VM_COUNT > acrn_config_utilities.MAX_VM_NUM: 47 err_dic['vm count'] = "The number of VMs in the scenario XML file should be no greater than " \ 48 "hv.CAPACITIES.MAX_VM_NUM. Its current value is {}.".format(acrn_config_utilities.MAX_VM_NUM) 49 return err_dic 50 51 # check if this is the scenario config which matched board info 52 # get board name 53 (err_dic, board) = acrn_config_utilities.get_board_name() 54 if err_dic: 55 return err_dic 56 57 (err_dic, scenario) = acrn_config_utilities.get_scenario_name() 58 if err_dic: 59 return err_dic 60 board_cfg_lib.BOARD_NAME = board 61 62 output = '' 63 if params['--out']: 64 if os.path.isabs(params['--out']): 65 output = params['--out'] 66 else: 67 output = ACRN_PATH + params['--out'] 68 else: 69 output = ACRN_CONFIG_DEF 70 71 board_fix_dir = os.path.join(output, "boards/") 72 scen_board_dir = os.path.join(output, "scenarios/" + scenario + "/") 73 acrn_config_utilities.mkdir(board_fix_dir) 74 acrn_config_utilities.mkdir(scen_board_dir) 75 76 config_pci = board_fix_dir + GEN_FILE[0] 77 config_board = board_fix_dir + GEN_FILE[1] 78 config_acpi = board_fix_dir + GEN_FILE[2] 79 config_board_h = board_fix_dir + GEN_FILE[4] 80 81 # generate pci_devices.h 82 with open(config_pci, 'w+') as config: 83 pci_devices_h.generate_file(config) 84 85 # generate board_info.h 86 with open(config_board_h, 'w+') as config: 87 err_dic = board_info_h.generate_file(config) 88 if err_dic: 89 return err_dic 90 91 # generate board.c 92 with open(config_board, 'w+') as config: 93 err_dic = board_c.generate_file(config) 94 if err_dic: 95 return err_dic 96 97 # generate platform_acpi_info.h 98 with open(config_acpi, 'w+') as config: 99 acpi_platform_h.generate_file(config, ACRN_DEFAULT_ACPI) 100 101 if not err_dic: 102 print("Board configurations for {} is generated successfully.".format(board)) 103 else: 104 print("Board configurations for {} is generated failed.".format(board)) 105 106 return err_dic 107 108 109def ui_entry_api(board_info, scenario_info, out=''): 110 111 arg_list = ['board_cfg_gen.py', '--board', board_info, '--scenario', scenario_info, '--out', out] 112 113 err_dic = acrn_config_utilities.prepare() 114 if err_dic: 115 return err_dic 116 117 err_dic = main(arg_list) 118 119 return err_dic 120 121 122if __name__ == '__main__': 123 124 ARGS = sys.argv 125 err_dic = main(ARGS) 126 if err_dic: 127 for err_k, err_v in err_dic.items(): 128 acrn_config_utilities.print_red("{}: {}".format(err_k, err_v), err=True) 129 sys.exit(1 if err_dic else 0) 130