diff options
author | Matt Fleming <matt.fleming@intel.com> | 2012-01-20 15:33:29 +0000 |
---|---|---|
committer | Matt Fleming <matt.fleming@intel.com> | 2012-02-02 16:11:29 +0000 |
commit | 10f713ac7fd3951200850490e8068547fe1da528 (patch) | |
tree | 17ef59256d7efbff29efd3d8b30229bcefcb9d6a | |
parent | a2c2872c5de695939d5da0aa833b6ef37c21fddb (diff) | |
download | syslinux-10f713ac7fd3951200850490e8068547fe1da528.tar.gz syslinux-10f713ac7fd3951200850490e8068547fe1da528.tar.xz syslinux-10f713ac7fd3951200850490e8068547fe1da528.zip |
firmware: Add .get_config_file_name
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
-rw-r--r-- | com32/include/syslinux/firmware.h | 1 | ||||
-rw-r--r-- | com32/lib/syslinux/firmware.c | 3 | ||||
-rw-r--r-- | core/elflink/config.c | 10 | ||||
-rw-r--r-- | efi/main.c | 6 |
4 files changed, 18 insertions, 2 deletions
diff --git a/com32/include/syslinux/firmware.h b/com32/include/syslinux/firmware.h index 82536194..355cf045 100644 --- a/com32/include/syslinux/firmware.h +++ b/com32/include/syslinux/firmware.h @@ -27,6 +27,7 @@ struct firmware { struct disk *(*disk_init)(struct disk_private *); struct output_ops *o_ops; struct input_ops *i_ops; + char *(*get_config_file_name)(void); }; extern struct firmware *firmware; diff --git a/com32/lib/syslinux/firmware.c b/com32/lib/syslinux/firmware.c index d4fcf646..af57a05b 100644 --- a/com32/lib/syslinux/firmware.c +++ b/com32/lib/syslinux/firmware.c @@ -35,6 +35,8 @@ struct input_ops bios_input_ops = { .getchar = bios_getchar, }; +extern char *bios_get_config_file_name(void); + struct firmware bios_fw = { .init = bios_init, .scan_memory = bios_scan_memory, @@ -43,6 +45,7 @@ struct firmware bios_fw = { .disk_init = bios_disk_init, .o_ops = &bios_output_ops, .i_ops = &bios_input_ops, + .get_config_file_name = bios_get_config_file_name, }; void syslinux_register_bios(void) diff --git a/core/elflink/config.c b/core/elflink/config.c index b27aa827..1c092fdd 100644 --- a/core/elflink/config.c +++ b/core/elflink/config.c @@ -25,17 +25,23 @@ * * ----------------------------------------------------------------------- */ +#include <syslinux/firmware.h> #include <syslinux/config.h> #include <klibc/compiler.h> #include <com32.h> const char *__syslinux_config_file; -void __constructor __syslinux_get_config_file_name(void) +char *bios_get_config_file_name(void) { static com32sys_t reg; reg.eax.w[0] = 0x000e; __intcall(0x22, ®, ®); - __syslinux_config_file = MK_PTR(reg.es, reg.ebx.w[0]); + return MK_PTR(reg.es, reg.ebx.w[0]); +} + +void __constructor __syslinux_get_config_file_name(void) +{ + __syslinux_config_file = firmware->get_config_file_name(); } @@ -248,6 +248,11 @@ struct input_ops efi_iops = { .getchar = efi_getchar, }; +char *efi_get_config_file_name(void) +{ + return ConfigName; +} + extern struct disk *efi_disk_init(com32sys_t *); struct firmware efi_fw = { .init = efi_init, @@ -255,6 +260,7 @@ struct firmware efi_fw = { .disk_init = efi_disk_init, .o_ops = &efi_ops, .i_ops = &efi_iops, + .get_config_file_name = efi_get_config_file_name, }; static inline void syslinux_register_efi(void) |