blob: 000dbaf4d22d194d40ca9448a6b9ef478931661f [file] [log] [blame]
Mark Dykes50297972024-03-15 12:49:22 -05001#
2# Copyright (c) 2025 Arm Limited. All rights reserved.
3#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6
Mark Dykes2b6c1402025-03-06 10:01:19 -06007import re
8
Mark Dykes50297972024-03-15 12:49:22 -05009def gen_arg_struct_def(asdname,argfieldname,arglst,argnumfield):
10 asdfile = open(asdname, "w")
11 hline = "/*\n"
12 hline += " * Copyright (c) 2024, Arm Limited. All rights reserved.\n"
13 hline += " *\n"
14 hline += " * SPDX-License-Identifier: BSD-3-Clause\n"
15 hline += " */\n"
16 hline += "\n"
17 hline += "#ifndef ARG_STRUCT_DEF_H\n"
18 hline += "#define ARG_STRUCT_DEF_H\n"
19 hline += "\n"
20 asdfile.write(hline)
21 smccount = 0
22 argcount = 0
Mark Dykes2b6c1402025-03-06 10:01:19 -060023 featset = {}
24 hline = ""
25 for sn in argfieldname:
26 featdes = re.search(r'^([A-Z]+)_.+',sn)
27 if featdes:
28 if featdes.group(1) not in featset:
29 hline += "#define "
30 hline += featdes.group(1) + "_INCLUDE" + " 1\n"
31 featset[featdes.group(1)] = 1
32 hline += "\n"
33 asdfile.write(hline)
34 hline = ""
Mark Dykes50297972024-03-15 12:49:22 -050035 for sn in argfieldname:
36 hline = "#define "
37 hline += sn
38 hline += " "
39 hline += str(smccount)
40 hline += "\n"
41 asdfile.write(hline)
42 smccount = smccount + 1
43 smccount = smccount - 1
44 hline = "#define MAX_SMC_CALLS "
45 hline += str(smccount)
46 hline += "\n"
47 asdfile.write(hline)
48 asdfile.write("\n")
49 for sn in arglst:
50 for an in arglst[sn]:
51 hline = "#define "
52 hline += sn
53 hline += "_ARG" + str(an) + " " + str(argcount)
54 hline += "\n"
55 asdfile.write(hline)
56 argcount = argcount + 1
57 argcount = argcount - 1
58 hline = "#define MAX_ARG_LENGTH "
59 hline += str(argcount)
60 hline += "\n\n"
61 asdfile.write(hline)
62 for sn in argnumfield:
63 for ag in argnumfield[sn]:
64 fieldcount = 0
65 for fn in argnumfield[sn][ag]:
66 hline = "#define " + sn + "_ARG" + str(argnumfield[sn][ag][fn]) + "_" + fn.upper() + "_CNT " + str(fieldcount)
67 hline += "\n"
68 asdfile.write(hline)
69 fieldcount = fieldcount + 1
70 fieldcount = 0
71 hline = "\n\n"
72 asdfile.write(hline)
73 for sn in argnumfield:
74 for ag in argnumfield[sn]:
75 for fn in argnumfield[sn][ag]:
76 hline = "#define " + sn + "_ARG" + str(argnumfield[sn][ag][fn]) + "_" + fn.upper() + " " + str(fieldcount)
77 hline += "\n"
78 asdfile.write(hline)
79 fieldcount = fieldcount + 1
80 hline = "\n#endif /* ARG_STRUCT_DEF_H */\n"
81 asdfile.write(hline)
82
83 asdfile.close()