lib/efi: Cleanup read/write routines
[petitboot] / discover / platform.h
1 #ifndef PLATFORM_H
2 #define PLATFORM_H
3
4 #include <types/types.h>
5
6 struct platform {
7         const char      *name;
8         bool            (*probe)(struct platform *, void *);
9         int             (*load_config)(struct platform *, struct config *);
10         int             (*save_config)(struct platform *, struct config *);
11         void            (*pre_boot)(struct platform *,
12                                 const struct config *);
13         int             (*get_sysinfo)(struct platform *, struct system_info *);
14         uint16_t        dhcp_arch_id;
15         void            *platform_data;
16 };
17
18 int platform_init(void *ctx);
19 int platform_fini(void);
20 const struct platform *platform_get(void);
21 int platform_get_sysinfo(struct system_info *info);
22 void platform_pre_boot(void);
23
24 /* configuration interface */
25 const struct config *config_get(void);
26 int config_set(struct config *config);
27 void config_set_autoboot(bool autoboot_enabled);
28
29 /* for use by the platform-specific storage code */
30 void config_set_defaults(struct config *config);
31
32 #define __platform_ptrname(_n) __platform_ ## _n
33 #define  _platform_ptrname(_n) __platform_ptrname(_n)
34
35 #define register_platform(p) \
36         static __attribute__((section("platforms"))) \
37                 __attribute__((used)) \
38                 struct platform * _platform_ptrname(__COUNTER__) = &p;
39
40 #endif /* PLATFORM_H */
41