[U-Boot] [RFC v2 08/15] efi_loader: console: convert efi console input/output to DM

AKASHI Takahiro takahiro.akashi at linaro.org
Fri Feb 8 08:15:35 UTC 2019


Signed-off-by: AKASHI Takahiro <takahiro.akashi at linaro.org>
---
 drivers/serial/serial-uclass.c |  6 ++++
 lib/efi_loader/efi_console.c   | 64 ++++++++++++++++++++++++++--------
 lib/efi_loader/efi_setup.c     |  3 --
 3 files changed, 56 insertions(+), 17 deletions(-)

diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c
index ffcd6d15af2b..22103e313051 100644
--- a/drivers/serial/serial-uclass.c
+++ b/drivers/serial/serial-uclass.c
@@ -168,6 +168,12 @@ int serial_init(void)
 void serial_initialize(void)
 {
 	serial_init();
+#if CONFIG_IS_ENABLED(EFI_LOADER)
+	extern int efi_console_register(void);
+
+	if (gd->cur_serial_dev)
+		efi_console_register();
+#endif
 }
 
 static void _serial_putc(struct udevice *dev, char ch)
diff --git a/lib/efi_loader/efi_console.c b/lib/efi_loader/efi_console.c
index 66c33a551d5d..1d016934b494 100644
--- a/lib/efi_loader/efi_console.c
+++ b/lib/efi_loader/efi_console.c
@@ -12,6 +12,8 @@
 #include <stdio_dev.h>
 #include <video_console.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 #define EFI_COUT_MODE_2 2
 #define EFI_MAX_COUT_MODE 3
 
@@ -1051,34 +1053,29 @@ static void EFIAPI efi_key_notify(struct efi_event *event, void *context)
 efi_status_t efi_console_register(void)
 {
 	efi_status_t r;
-	efi_handle_t console_output_handle;
-	efi_handle_t console_input_handle;
+	efi_handle_t handle;
 
 	/* Set up mode information */
 	query_console_size();
 
 	/* Create handles */
-	r = efi_create_handle(&console_output_handle);
+	handle = gd->cur_serial_dev;
+	r = efi_add_handle(handle);
 	if (r != EFI_SUCCESS)
 		goto out_of_memory;
 
-	r = efi_add_protocol(console_output_handle,
+	r = efi_add_protocol(handle,
 			     &efi_guid_text_output_protocol, &efi_con_out);
 	if (r != EFI_SUCCESS)
 		goto out_of_memory;
-	systab.con_out_handle = console_output_handle;
-	systab.stderr_handle = console_output_handle;
-
-	r = efi_create_handle(&console_input_handle);
-	if (r != EFI_SUCCESS)
-		goto out_of_memory;
-
-	r = efi_add_protocol(console_input_handle,
+	systab.con_out_handle = handle;
+	systab.stderr_handle = handle;
+	r = efi_add_protocol(handle,
 			     &efi_guid_text_input_protocol, &efi_con_in);
 	if (r != EFI_SUCCESS)
 		goto out_of_memory;
-	systab.con_in_handle = console_input_handle;
-	r = efi_add_protocol(console_input_handle,
+	systab.con_in_handle = handle;
+	r = efi_add_protocol(handle,
 			     &efi_guid_text_input_ex_protocol, &efi_con_in_ex);
 	if (r != EFI_SUCCESS)
 		goto out_of_memory;
@@ -1107,3 +1104,42 @@ out_of_memory:
 	printf("ERROR: Out of memory\n");
 	return r;
 }
+
+static int efi_simple_text_input_ex_probe(struct udevice *dev)
+{
+	device_set_name(dev, "SIMPLE_TEXT_INPUT_EX");
+
+	return 0;
+}
+
+U_BOOT_DRIVER(efi_simple_text_input_ex) = {
+	.name = "efi_simple_text_input_ex",
+	.id = UCLASS_EFI_PROTOCOL,
+	.probe = efi_simple_text_input_ex_probe,
+};
+
+static int efi_simple_text_input_probe(struct udevice *dev)
+{
+	device_set_name(dev, "SIMPLE_TEXT_INPUT");
+
+	return 0;
+}
+
+U_BOOT_DRIVER(efi_simple_text_input) = {
+	.name = "efi_simple_text_input",
+	.id = UCLASS_EFI_PROTOCOL,
+	.probe = efi_simple_text_input_probe,
+};
+
+static int efi_simple_text_output_probe(struct udevice *dev)
+{
+	device_set_name(dev, "SIMPLE_TEXT_OUTPUT");
+
+	return 0;
+}
+
+U_BOOT_DRIVER(efi_simple_text_output) = {
+	.name = "efi_simple_text_output",
+	.id = UCLASS_EFI_PROTOCOL,
+	.probe = efi_simple_text_output_probe,
+};
diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c
index 83f1b842e6be..a0f80948c99c 100644
--- a/lib/efi_loader/efi_setup.c
+++ b/lib/efi_loader/efi_setup.c
@@ -50,9 +50,6 @@ static efi_status_t efi_system_init(void)
 	if (ret != EFI_SUCCESS)
 		goto out;
 
-	ret = efi_console_register();
-	if (ret != EFI_SUCCESS)
-		goto out;
 #ifdef CONFIG_PARTITIONS
 	ret = efi_disk_register();
 	if (ret != EFI_SUCCESS)
-- 
2.19.1



More information about the U-Boot mailing list