test(fuzz): Fix single feature testing

     This change fixes an issue where a user provides a new feature
that can be fuzzed independently of the current setup of fuzzing.
Currently compile fails will cause issues if single feature fuzzing
is desired and the automated flow will disable sets that are not in
the SMC description file.  There are some small changes to the source
files to enable this behavior for both SDEI and Vendor.  There is also
a change to the automated scripting.

Change-Id: Ic768e9f1b285225f12f23c1e36acb668088ad129
Signed-off-by: Mark Dykes <mark.dykes@arm.com>
Signed-off-by: Kathleen Capella <kathleen.capella@arm.com>
diff --git a/smc_fuzz/include/sdei_fuzz_helper.h b/smc_fuzz/include/sdei_fuzz_helper.h
index b05cb91..1efbc1a 100644
--- a/smc_fuzz/include/sdei_fuzz_helper.h
+++ b/smc_fuzz/include/sdei_fuzz_helper.h
@@ -16,85 +16,6 @@
 #include <tftf_lib.h>
 #include <timer.h>
 
-#ifndef sdei_version_funcid
-#define sdei_version_funcid 0
-#endif
-#ifndef sdei_pe_unmask_funcid
-#define sdei_pe_unmask_funcid 0
-#endif
-#ifndef sdei_pe_mask_funcid
-#define sdei_pe_mask_funcid 0
-#endif
-#ifndef sdei_event_status_funcid
-#define sdei_event_status_funcid 0
-#endif
-#ifndef sdei_event_signal_funcid
-#define sdei_event_signal_funcid 0
-#endif
-#ifndef sdei_private_reset_funcid
-#define sdei_private_reset_funcid 0
-#endif
-#ifndef sdei_shared_reset_funcid
-#define sdei_shared_reset_funcid 0
-#endif
-
-
-#ifndef sdei_event_register_funcid
-#define sdei_event_register_funcid 0
-#endif
-#ifndef sdei_event_enable_funcid
-#define sdei_event_enable_funcid 0
-#endif
-#ifndef sdei_event_disable_funcid
-#define sdei_event_disable_funcid 0
-#endif
-#ifndef sdei_event_context_funcid
-#define sdei_event_context_funcid 0
-#endif
-#ifndef sdei_event_complete_funcid
-#define sdei_event_complete_funcid 0
-#endif
-#ifndef sdei_event_complete_and_resume_funcid
-#define sdei_event_complete_and_resume_funcid 0
-#endif
-#ifndef sdei_event_unregister_funcid
-#define sdei_event_unregister_funcid 0
-#endif
-#ifndef sdei_event_get_info_funcid
-#define sdei_event_get_info_funcid 0
-#endif
-#ifndef sdei_event_routing_set_funcid
-#define sdei_event_routing_set_funcid 0
-#endif
-#ifndef sdei_interrupt_bind_funcid
-#define sdei_interrupt_bind_funcid 0
-#endif
-#ifndef sdei_interrupt_release_funcid
-#define sdei_interrupt_release_funcid 0
-#endif
-#ifndef sdei_features_funcid
-#define sdei_features_funcid 0
-#endif
-#ifndef sdei_signal_hang_funcid
-#define sdei_signal_hang_funcid 0
-#endif
-#ifndef experiment_funcid
-#define experiment_funcid 0
-#endif
-#ifndef repeat_interrupt_bind_funcid
-#define repeat_interrupt_bind_funcid 0
-#endif
-#ifndef sdei_event_get_info_coverage_funcid
-#define sdei_event_get_info_coverage_funcid 0
-#endif
-#ifndef sdei_routing_set_coverage_funcid
-#define sdei_routing_set_coverage_funcid 0
-#endif
-#ifndef test_funcid
-#define test_funcid 0
-#endif
-
-
 int64_t tftf_test_sdei_noarg(int64_t (*sdei_func)(void), char *funcstr);
 void tftf_test_sdei_singlearg(int64_t (*sdei_func)(uint64_t), char *funcstr);
 void run_sdei_fuzz(int funcid, struct memmod *mmod, bool inrange, int cntid);
diff --git a/smc_fuzz/script/gen_arg_struct_def.py b/smc_fuzz/script/gen_arg_struct_def.py
index ce24679..000dbaf 100755
--- a/smc_fuzz/script/gen_arg_struct_def.py
+++ b/smc_fuzz/script/gen_arg_struct_def.py
@@ -4,6 +4,8 @@
 # SPDX-License-Identifier: BSD-3-Clause
 #
 
+import re
+
 def gen_arg_struct_def(asdname,argfieldname,arglst,argnumfield):
 	asdfile = open(asdname, "w")
 	hline = "/*\n"
@@ -18,6 +20,18 @@
 	asdfile.write(hline)
 	smccount = 0
 	argcount = 0
+	featset = {}
+	hline = ""
+	for sn in argfieldname:
+		featdes = re.search(r'^([A-Z]+)_.+',sn)
+		if featdes:
+			if featdes.group(1) not in featset:
+				hline += "#define "
+				hline += featdes.group(1) + "_INCLUDE" + " 1\n"
+				featset[featdes.group(1)] = 1
+	hline += "\n"
+	asdfile.write(hline)
+	hline = ""
 	for sn in argfieldname:
 		hline = "#define "
 		hline += sn
diff --git a/smc_fuzz/src/runtestfunction_helpers.c b/smc_fuzz/src/runtestfunction_helpers.c
index 411949c..fbee707 100644
--- a/smc_fuzz/src/runtestfunction_helpers.c
+++ b/smc_fuzz/src/runtestfunction_helpers.c
@@ -4,6 +4,7 @@
  * SPDX-License-Identifier: BSD-3-Clause
  */
 
+#include <arg_struct_def.h>
 #include <sdei_fuzz_helper.h>
 #include "smcmalloc.h"
 #include <tsp_fuzz_helper.h>
@@ -19,10 +20,13 @@
 {
 	bool inrange = (cntid >= SMC_FUZZ_CALL_START) && (cntid < SMC_FUZZ_CALL_END);
 	inrange = inrange && (funcid != EXCLUDE_FUNCID);
-
+#ifdef SDEI_INCLUDE
 	run_sdei_fuzz(funcid, mmod, inrange, cntid);
+#endif
 	run_tsp_fuzz(funcid);
+#ifdef VEN_INCLUDE
 	run_ven_el3_fuzz(funcid, mmod);
+#endif
 
 	cntid++;
 }
diff --git a/smc_fuzz/src/sdei_fuzz_helper.c b/smc_fuzz/src/sdei_fuzz_helper.c
index 5a1d866..7387161 100644
--- a/smc_fuzz/src/sdei_fuzz_helper.c
+++ b/smc_fuzz/src/sdei_fuzz_helper.c
@@ -13,6 +13,8 @@
 #include <fuzz_names.h>
 #include <sdei_fuzz_helper.h>
 
+#ifdef SDEI_INCLUDE
+
 int stbev = 0;
 
 #define MIN_PPI_ID		U(16)
@@ -785,3 +787,5 @@
 		}
 	}
 }
+
+#endif
diff --git a/smc_fuzz/src/vendor_fuzz_helper.c b/smc_fuzz/src/vendor_fuzz_helper.c
index 2de10b4..1e1cb48 100644
--- a/smc_fuzz/src/vendor_fuzz_helper.c
+++ b/smc_fuzz/src/vendor_fuzz_helper.c
@@ -14,6 +14,8 @@
 #include <smccc.h>
 #include <uuid_utils.h>
 
+#ifdef VEN_INCLUDE
+
 /*
  * Vendor-Specific EL3 UUID as returned by the implementation in the Trusted
  * Firmware.
@@ -109,3 +111,5 @@
 		}
 	}
 }
+
+#endif