#define __PLATFORM_OVERRIDE_H__
#include <sbi/sbi_types.h>
+#include <sbi/sbi_trap.h>
struct platform_override {
const struct fdt_match *match_table;
void (*early_exit)(const struct fdt_match *match);
void (*final_exit)(const struct fdt_match *match);
int (*fdt_fixup)(void *fdt, const struct fdt_match *match);
+ int (*vendor_ext_check)(long extid, const struct fdt_match *match);
+ int (*vendor_ext_provider)(long extid, long funcid,
+ const struct sbi_trap_regs *regs,
+ unsigned long *out_value,
+ struct sbi_trap_info *out_trap,
+ const struct fdt_match *match);
};
#endif
return 0;
}
+static int generic_vendor_ext_check(long extid)
+{
+ if (generic_plat && generic_plat->vendor_ext_check)
+ return generic_plat->vendor_ext_check(extid,
+ generic_plat_match);
+
+ return 0;
+}
+
+static int generic_vendor_ext_provider(long extid, long funcid,
+ const struct sbi_trap_regs *regs,
+ unsigned long *out_value,
+ struct sbi_trap_info *out_trap)
+{
+ if (generic_plat && generic_plat->vendor_ext_provider) {
+ return generic_plat->vendor_ext_provider(extid, funcid, regs,
+ out_value, out_trap,
+ generic_plat_match);
+ }
+
+ return SBI_ENOTSUPP;
+}
+
static void generic_early_exit(void)
{
if (generic_plat && generic_plat->early_exit)
.get_tlbr_flush_limit = generic_tlbr_flush_limit,
.timer_init = fdt_timer_init,
.timer_exit = fdt_timer_exit,
+ .vendor_ext_check = generic_vendor_ext_check,
+ .vendor_ext_provider = generic_vendor_ext_provider,
};
struct sbi_platform platform = {