x86/efi: Deduplicate efi_char16_printk()
authorLukas Wunner <lukas@wunner.de>
Tue, 31 Jan 2017 13:21:34 +0000 (13:21 +0000)
committerIngo Molnar <mingo@kernel.org>
Wed, 1 Feb 2017 07:45:43 +0000 (08:45 +0100)
Eliminate the separate 32-bit and 64x- bit code paths by way of the shiny
new efi_call_proto() macro.

No functional change intended.

Signed-off-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Matt Fleming <matt@codeblueprint.co.uk>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-efi@vger.kernel.org
Link: http://lkml.kernel.org/r/1485868902-20401-3-git-send-email-ard.biesheuvel@linaro.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/boot/compressed/eboot.c
include/linux/efi.h

index f1cf284..6d3aeab 100644 (file)
@@ -101,30 +101,8 @@ efi_open_volume(efi_system_table_t *sys_table, void *__image, void **__fh)
 
 void efi_char16_printk(efi_system_table_t *table, efi_char16_t *str)
 {
-       unsigned long output_string;
-       size_t offset;
-
-       if (efi_early->is64) {
-               struct efi_simple_text_output_protocol_64 *out;
-               u64 *func;
-
-               offset = offsetof(typeof(*out), output_string);
-               output_string = efi_early->text_output + offset;
-               out = (typeof(out))(unsigned long)efi_early->text_output;
-               func = (u64 *)output_string;
-
-               efi_early->call(*func, out, str);
-       } else {
-               struct efi_simple_text_output_protocol_32 *out;
-               u32 *func;
-
-               offset = offsetof(typeof(*out), output_string);
-               output_string = efi_early->text_output + offset;
-               out = (typeof(out))(unsigned long)efi_early->text_output;
-               func = (u32 *)output_string;
-
-               efi_early->call(*func, out, str);
-       }
+       efi_call_proto(efi_simple_text_output_protocol, output_string,
+                      efi_early->text_output, str);
 }
 
 static efi_status_t
index 5b1af30..6642c4d 100644 (file)
@@ -1240,17 +1240,17 @@ struct efivar_entry {
        bool deleting;
 };
 
-struct efi_simple_text_output_protocol_32 {
+typedef struct {
        u32 reset;
        u32 output_string;
        u32 test_string;
-};
+} efi_simple_text_output_protocol_32_t;
 
-struct efi_simple_text_output_protocol_64 {
+typedef struct {
        u64 reset;
        u64 output_string;
        u64 test_string;
-};
+} efi_simple_text_output_protocol_64_t;
 
 struct efi_simple_text_output_protocol {
        void *reset;