diff options
Diffstat (limited to 'discover/platform.h')
-rw-r--r-- | discover/platform.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/discover/platform.h b/discover/platform.h new file mode 100644 index 0000000..44315fa --- /dev/null +++ b/discover/platform.h @@ -0,0 +1,34 @@ +#ifndef PLATFORM_H +#define PLATFORM_H + +#include <types/types.h> + +struct platform { + const char *name; + bool (*probe)(struct platform *, void *); + int (*load_config)(struct platform *, struct config *); + int (*save_config)(struct platform *, struct config *); + void *platform_data; +}; + +int platform_init(void *ctx); +int platform_fini(void); + +/* configuration interface */ +const struct config *config_get(void); +int config_set(struct config *config); +void config_set_autoboot(bool autoboot_enabled); + +/* for use by the platform-specific storage code */ +void config_set_defaults(struct config *config); + +#define __platform_ptrname(_n) __platform_ ## _n +#define _platform_ptrname(_n) __platform_ptrname(_n) + +#define register_platform(p) \ + static __attribute__((section("platforms"))) \ + __attribute__((used)) \ + struct platform * _platform_ptrname(__COUNTER__) = &p; + +#endif /* PLATFORM_H */ + |