aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Fleming <matt.fleming@intel.com>2012-01-20 15:33:29 +0000
committerMatt Fleming <matt.fleming@intel.com>2012-02-02 16:11:29 +0000
commit10f713ac7fd3951200850490e8068547fe1da528 (patch)
tree17ef59256d7efbff29efd3d8b30229bcefcb9d6a
parenta2c2872c5de695939d5da0aa833b6ef37c21fddb (diff)
downloadsyslinux-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.h1
-rw-r--r--com32/lib/syslinux/firmware.c3
-rw-r--r--core/elflink/config.c10
-rw-r--r--efi/main.c6
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, &reg, &reg);
- __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();
}
diff --git a/efi/main.c b/efi/main.c
index 469a0a68..5b42258c 100644
--- a/efi/main.c
+++ b/efi/main.c
@@ -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)