428 lines
17 KiB
Python
428 lines
17 KiB
Python
#! python3
|
|
# @file
|
|
#
|
|
# @copyright
|
|
# INTEL CONFIDENTIAL
|
|
# Copyright (c) 2019 - 2020 Intel Corporation. All rights reserved
|
|
# This software and associated documentation (if any) is furnished
|
|
# under a license and may only be used or copied in accordance
|
|
# with the terms of the license. Except as permitted by the
|
|
# license, no part of this software or documentation may be
|
|
# reproduced, stored in a retrieval system, or transmitted in any
|
|
# form or by any means without the express written consent of
|
|
# Intel Corporation.
|
|
# This file contains a 'Sample Driver' and is licensed as such
|
|
# under the terms of your license agreement with Intel or your
|
|
# vendor. This file may be modified by the user, subject to
|
|
# the additional terms of the license agreement.
|
|
#
|
|
# @par Specification Reference:
|
|
#
|
|
|
|
import sys
|
|
from collections import OrderedDict
|
|
|
|
global reserved_index
|
|
|
|
reseved_index = 0
|
|
|
|
upd_name_change_list = OrderedDict()
|
|
|
|
if len(sys.argv) == 4:
|
|
arg_1=str(sys.argv[1])
|
|
arg_2 = str(sys.argv[2])
|
|
type=str(sys.argv[3])
|
|
header = open(arg_1, "rt").readlines()
|
|
header_replace = open(arg_1, "rt").readlines()
|
|
header_temp = open(arg_1, "rt").readlines()
|
|
upd_txt = open(arg_2, "rt").readlines()
|
|
else:
|
|
print ("please enter all argument")
|
|
|
|
if type=="fspm" or type=="Fspm" or type=="FSPM":
|
|
header_string="Fsp M"
|
|
type="Fspm"
|
|
elif type=="fsps" or type=="Fsps" or type=="FSPS":
|
|
header_string="Fsp S"
|
|
type="Fsps"
|
|
else:
|
|
print ("Please input correct header type")
|
|
|
|
output_header = open("Final" + type + "Upd.h", "wt")
|
|
|
|
def Remove_duplicate(input_list):
|
|
final_list = []
|
|
for x in input_list:
|
|
if x not in final_list:
|
|
final_list.append(x)
|
|
return final_list
|
|
|
|
def scan_main_upd(file):
|
|
temp_list=[]
|
|
for num, line in enumerate(file):
|
|
#print line.split("\n")[0]
|
|
temp_list.append(line.split("\n")[0])
|
|
return temp_list
|
|
|
|
def test_conf_exist(file):
|
|
|
|
for num, line in enumerate(file):
|
|
if header_string+" Test Configuration" in line:
|
|
return True
|
|
return False
|
|
|
|
def scan_all_upd(file):
|
|
temp_list = []
|
|
start = 0
|
|
for num, line in enumerate(file):
|
|
if header_string + " Configuration" in line:
|
|
start = 1
|
|
|
|
if header_string + " UPD Configuration" in line:
|
|
start = 0
|
|
|
|
if start == 1:
|
|
if "**/" in line:
|
|
if "typedef struct {" not in header_temp[num + 1]:
|
|
# print(header_temp[num+1].split(";\n")[0].replace(" "," ").replace(" "," ")
|
|
# .replace(" "," ").replace(" "," ")
|
|
# .replace(" "," ").replace(" "," ").split(" ")[2])
|
|
temp_upd = (header_temp[num + 1].split(";\n")[0].replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ").split(" ")[2])
|
|
if "[" in temp_upd:
|
|
temp_upd = temp_upd.split("[")[0]
|
|
temp_list.append(temp_upd)
|
|
|
|
return temp_list
|
|
|
|
def scan_all_upd_conf(file,temp_file,test_conf):
|
|
temp_list = []
|
|
start = 0
|
|
for num, line in enumerate(file):
|
|
if header_string+" Configuration" in line:
|
|
start = 1
|
|
if test_conf:
|
|
if header_string+" Test Configuration" in line:
|
|
start = 0
|
|
else:
|
|
if header_string + " UPD Configuration" in line:
|
|
start = 0
|
|
|
|
if start == 1:
|
|
if "**/" in line:
|
|
if "typedef struct {" not in temp_file[num + 1]:
|
|
#print(temp_file[num+1].split(";\n")[0].replace(" "," ").replace(" "," ")
|
|
# .replace(" "," ").replace(" "," ")
|
|
# .replace(" "," ").replace(" "," ").split(" ")[2])
|
|
temp_upd = (temp_file[num + 1].split(";\n")[0].replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ").split(" ")[2])
|
|
temp_upd_type= (temp_file[num + 1].split(";\n")[0].replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ").split(" ")[1])
|
|
|
|
#print (temp_upd+": "+temp_upd_type)
|
|
temp_list.append(temp_upd+": "+temp_upd_type)
|
|
|
|
return temp_list
|
|
|
|
def scan_all_upd_test_conf(file,temp_file):
|
|
temp_list=[]
|
|
start=0
|
|
for num, line in enumerate(file):
|
|
if header_string+" Test Configuration" in line:
|
|
start=1
|
|
|
|
if header_string+" UPD Configuration" in line:
|
|
start=0
|
|
|
|
if start==1:
|
|
if "**/" in line:
|
|
if "typedef struct {" not in temp_file[num + 1]:
|
|
#print(temp_file[num+1].split(";\n")[0].replace(" "," ").replace(" "," ")
|
|
# .replace(" "," ").replace(" "," ")
|
|
# .replace(" "," ").replace(" "," ").split(" ")[2])
|
|
temp_upd = (temp_file[num + 1].split(";\n")[0].replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ").split(" ")[2])
|
|
temp_upd_type= (temp_file[num + 1].split(";\n")[0].replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ").split(" ")[1])
|
|
|
|
#print (temp_upd+": "+temp_upd_type)
|
|
temp_list.append(temp_upd + ": " + temp_upd_type)
|
|
|
|
return temp_list
|
|
|
|
def upd_type_change(upd_list,main_upd):
|
|
temp_list=[]
|
|
for upd in upd_list:
|
|
key = upd.split(": ")[0]
|
|
value = upd.split(": ")[1]
|
|
if key not in main_upd:
|
|
type=int(value.split("UINT")[1])
|
|
array=type//8
|
|
|
|
if array!=1:
|
|
if "[" in key:
|
|
index=int(key.split("[")[1].split("]")[0]) * array
|
|
key = key.split("[")[0]
|
|
key = key + "[" + str(index) + "]"
|
|
value = "UINT8"
|
|
else:
|
|
key=key+"["+str(array)+"]"
|
|
value="UINT8"
|
|
temp_list.append(key+": "+value)
|
|
#print (key+": "+value)
|
|
else:
|
|
temp_list.append(key + ": " + value)
|
|
#print key + ": " + value
|
|
|
|
return temp_list
|
|
|
|
def get_key_value(upd_conf_list,upd,upd_type):
|
|
for x in upd_conf_list:
|
|
if upd.split("[")[0] == x.split(": ")[0].split("[")[0]:
|
|
if upd_type != x.split(": ")[1]:
|
|
return x
|
|
return None
|
|
|
|
def merge_reserved(struct,num,index):
|
|
start = 1
|
|
count = 0
|
|
main_num = num
|
|
while(start == 1):
|
|
if "/** Offset" in header_replace[num] and " - Reserved\n" not in header_replace[num]:
|
|
start = 0
|
|
if "UINT8" in header_replace[num]:
|
|
#print (header_replace[num])
|
|
temp_upd = (header_replace[num].split(";\n")[0].replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ").split(" ")[2])
|
|
if "[" in temp_upd:
|
|
#print(temp_upd +":"+ temp_upd.split("[")[1].split("]")[0])
|
|
count = count + int(temp_upd.split("[")[1].split("]")[0])
|
|
else:
|
|
count = count + 1
|
|
num = num +1
|
|
#print("Count: " + str(count))
|
|
if count == 1:
|
|
org_upd = (header_replace[main_num].split(";\n")[0].replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ").split(" ")[2])
|
|
#print("Org: " + org_upd)
|
|
#print("replaced: Reserved" + str(index))
|
|
struct.append(header_replace[main_num].replace(org_upd, "Reserved" + str(index)))
|
|
#print(header_replace[main_num].replace(org_upd, "Reserved" + str(index)))
|
|
else:
|
|
org_upd = (header_replace[main_num].split(";\n")[0].replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ").split(" ")[2])
|
|
#print("Org: " + org_upd)
|
|
#print("replaced: Reserved" + str(index) + "[" + str(count) + "]")
|
|
struct.append(header_replace[main_num].replace(org_upd,"Reserved"+str(index)+"["+str(count)+"]"))
|
|
#print(header_replace[main_num].replace(org_upd,"Reserved"+str(index)+"["+str(count)+"]"))
|
|
|
|
return struct
|
|
|
|
def merge_conf_reserved(conf_struct,test_conf):
|
|
start = 0
|
|
count_start = 0
|
|
global reseved_index
|
|
for num, line in enumerate(header):
|
|
if header_string+" Configuration" in line:
|
|
start = 1
|
|
if test_conf:
|
|
if header_string+" Test Configuration" in line:
|
|
conf_struct.pop()
|
|
conf_struct.append(header_replace[num - 2])
|
|
conf_struct.append(header_replace[num - 1])
|
|
start = 0
|
|
else:
|
|
if header_string + " UPD Configuration" in line:
|
|
conf_struct.pop()
|
|
conf_struct.append(header_replace[num-2])
|
|
conf_struct.append(header_replace[num-1])
|
|
start = 0
|
|
if start == 1:
|
|
if "/** Offset" in header_replace[num]:
|
|
if len(header_replace[num].split(" - ")) >= 2:
|
|
if header_replace[num].split("\n")[0].split(" - ")[1] == "Reserved":
|
|
if count_start == 0:
|
|
conf_struct.append(header_replace[num])
|
|
conf_struct.append(header_replace[num+1])
|
|
#print(header_replace[num].split("\n")[0])
|
|
#print(header_replace[num+1].split("\n")[0])
|
|
for x in range (10):
|
|
if "UINT" in header_replace[num+x+2].split("\n")[0]:
|
|
#print("line 2:"+header_replace[num+x+2].split("\n")[0])
|
|
conf_struct = merge_reserved(conf_struct,num+x+2,reseved_index)
|
|
#print("line 3:"+header_replace[num+x+3].split("\n")[0])
|
|
conf_struct.append(header_replace[num+x+3])
|
|
break
|
|
else:
|
|
conf_struct.append(header_replace[num+x+2])
|
|
reseved_index = reseved_index + 1
|
|
count_start = 1
|
|
else:
|
|
count_start = 0
|
|
conf_struct.append(header_replace[num])
|
|
#print(header_replace[num].split("\n")[0])
|
|
else:
|
|
if count_start == 0:
|
|
conf_struct.append(header_replace[num])
|
|
#print(header_replace[num].split("\n")[0])
|
|
else:
|
|
if count_start == 0:
|
|
conf_struct.append(header_replace[num])
|
|
#print(header_replace[num].split("\n")[0])
|
|
|
|
return conf_struct
|
|
|
|
def merge_test_conf_reserved(test_conf_struct):
|
|
start = 0
|
|
count_start = 0
|
|
global reseved_index
|
|
|
|
for num, line in enumerate(header):
|
|
if header_string+" Test Configuration" in line:
|
|
start = 1
|
|
if header_string + " UPD Configuration" in line:
|
|
test_conf_struct.pop()
|
|
test_conf_struct.append(header_replace[num - 2])
|
|
test_conf_struct.append(header_replace[num - 1])
|
|
start = 0
|
|
|
|
if start == 1:
|
|
if "/** Offset" in header_replace[num]:
|
|
if len(header_replace[num].split(" - ")) == 2:
|
|
if header_replace[num].split("\n")[0].split(" - ")[1] == "Reserved":
|
|
if count_start == 0:
|
|
test_conf_struct.append(header_replace[num])
|
|
test_conf_struct.append(header_replace[num+1])
|
|
#print(header_replace[num].split("\n")[0])
|
|
#print(header_replace[num+1].split("\n")[0])
|
|
for x in range (10):
|
|
if "UINT" in header_replace[num+x+2].split("\n")[0]:
|
|
#print("line 2:"+header_replace[num+x+2].split("\n")[0])
|
|
test_conf_struct = merge_reserved(test_conf_struct,num+x+2,reseved_index)
|
|
#print("line 3:"+header_replace[num+x+3].split("\n")[0])
|
|
test_conf_struct.append(header_replace[num+x+3])
|
|
break
|
|
else:
|
|
test_conf_struct.append(header_replace[num+x+2])
|
|
reseved_index = reseved_index + 1
|
|
count_start = 1
|
|
else:
|
|
count_start = 0
|
|
test_conf_struct.append(header_replace[num])
|
|
#print(header_replace[num].split("\n")[0])
|
|
else:
|
|
if count_start == 0:
|
|
test_conf_struct.append(header_replace[num])
|
|
#print(header_replace[num].split("\n")[0])
|
|
else:
|
|
if count_start == 0:
|
|
test_conf_struct.append(header_replace[num])
|
|
#print(header_replace[num].split("\n")[0])
|
|
|
|
return test_conf_struct
|
|
|
|
def replace_reserved_type(upd_test_conf_list):
|
|
start = 0
|
|
for num, line in enumerate(header):
|
|
if header_string + " Configuration" in line:
|
|
start=1
|
|
|
|
if header_string+" UPD Configuration" in line:
|
|
start=0
|
|
|
|
if start == 1:
|
|
if "**/" in line:
|
|
if "typedef struct {" not in header_temp[num + 1]:
|
|
temp_upd = (header_temp[num + 1].split(";\n")[0].replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ").split(" ")[2])
|
|
temp_upd_type = (header_temp[num + 1].split(";\n")[0].replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ")
|
|
.replace(" ", " ").replace(" ", " ").split(" ")[1])
|
|
if "Reserved" in temp_upd.split("[")[0]:
|
|
key_value = get_key_value(upd_test_conf_list, temp_upd, temp_upd_type)
|
|
if key_value != None:
|
|
header_replace[num + 1] = header_replace[num + 1].replace(temp_upd,
|
|
key_value.split(": ")[0]).replace(temp_upd_type, key_value.split(": ")[1])
|
|
return
|
|
|
|
def wright_header_file(conf_struct,test_conf_struct,test_conf):
|
|
start_conf = 0
|
|
start_test_conf = 0
|
|
conf_struct_index = 0
|
|
test_conf_struct_index = 0
|
|
|
|
for num, line in enumerate(header):
|
|
if header_string+" Configuration" in line:
|
|
start_conf = 1
|
|
|
|
if header_string+" Test Configuration" in line:
|
|
start_test_conf = 1
|
|
start_conf = 0
|
|
|
|
if header_string + " UPD Configuration" in line:
|
|
start_test_conf = 0
|
|
start_conf = 0
|
|
|
|
if start_conf == 1:
|
|
if len(conf_struct)-1 >= conf_struct_index:
|
|
output_header.write(conf_struct[conf_struct_index])
|
|
conf_struct_index = conf_struct_index + 1
|
|
elif start_test_conf == 1:
|
|
if len(test_conf_struct)-1 >= test_conf_struct_index:
|
|
output_header.write(test_conf_struct[test_conf_struct_index])
|
|
test_conf_struct_index = test_conf_struct_index + 1
|
|
else:
|
|
output_header.write(header_replace[num])
|
|
return
|
|
|
|
def main():
|
|
conf_struct = []
|
|
test_conf_struct = []
|
|
|
|
all_upd = scan_all_upd(header)
|
|
|
|
all_upd = Remove_duplicate(all_upd)
|
|
|
|
main_upd = scan_main_upd(upd_txt)
|
|
|
|
main_upd = Remove_duplicate(main_upd)
|
|
|
|
upd_conf_list = scan_all_upd_conf(header, header_temp,test_conf_exist(header))
|
|
|
|
upd_conf_list = Remove_duplicate(upd_conf_list)
|
|
|
|
#print "upd_conf"
|
|
upd_conf_list = upd_type_change(upd_conf_list, main_upd)
|
|
replace_reserved_type(upd_conf_list)
|
|
#print(upd_conf_list)
|
|
|
|
conf_struct=merge_conf_reserved(conf_struct,test_conf_exist(header))
|
|
|
|
if test_conf_exist(header):
|
|
upd_test_conf_list = scan_all_upd_test_conf(header, header_temp)
|
|
|
|
upd_test_conf_list = Remove_duplicate(upd_test_conf_list)
|
|
|
|
#print "upd_conf_test"
|
|
upd_test_conf_list = upd_type_change(upd_test_conf_list, main_upd)
|
|
replace_reserved_type(upd_test_conf_list)
|
|
#print(upd_test_conf_list)
|
|
test_conf_struct=merge_test_conf_reserved(test_conf_struct)
|
|
|
|
wright_header_file(conf_struct, test_conf_struct,test_conf_exist(header))
|
|
|
|
return
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|