firmware: Add .get_config_file_name
authorMatt Fleming <matt.fleming@intel.com>
Fri, 20 Jan 2012 15:33:29 +0000 (15:33 +0000)
committerMatt Fleming <matt.fleming@intel.com>
Thu, 2 Feb 2012 16:11:29 +0000 (16:11 +0000)
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
com32/include/syslinux/firmware.h
com32/lib/syslinux/firmware.c
core/elflink/config.c
efi/main.c

index 8253619..355cf04 100644 (file)
@@ -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;
index d4fcf64..af57a05 100644 (file)
@@ -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)
index b27aa82..1c092fd 100644 (file)
  *
  * ----------------------------------------------------------------------- */
 
+#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();
 }
index 469a0a6..5b42258 100644 (file)
@@ -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)