Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/812144/?format=api
{ "id": 812144, "url": "http://patchwork.ozlabs.org/api/patches/812144/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/20170910132236.14318-8-robdclark@gmail.com/", "project": { "id": 18, "url": "http://patchwork.ozlabs.org/api/projects/18/?format=api", "name": "U-Boot", "link_name": "uboot", "list_id": "u-boot.lists.denx.de", "list_email": "u-boot@lists.denx.de", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170910132236.14318-8-robdclark@gmail.com>", "list_archive_url": null, "date": "2017-09-10T13:22:28", "name": "[U-Boot,v1,07/12] efi_loader: SIMPLE_TEXT_INPUT_EX plus wire up objects properly", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "318ed702263f0d51d09414b08d8b29e0f3189e47", "submitter": { "id": 18760, "url": "http://patchwork.ozlabs.org/api/people/18760/?format=api", "name": "Rob Clark", "email": "robdclark@gmail.com" }, "delegate": { "id": 3400, "url": "http://patchwork.ozlabs.org/api/users/3400/?format=api", "username": "agraf", "first_name": "Alexander", "last_name": "Graf", "email": "agraf@suse.de" }, "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/20170910132236.14318-8-robdclark@gmail.com/mbox/", "series": [ { "id": 2401, "url": "http://patchwork.ozlabs.org/api/series/2401/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=2401", "date": "2017-09-10T13:22:21", "name": "efi_loader+video: support for Shell.efi", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/2401/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/812144/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/812144/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<u-boot-bounces@lists.denx.de>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=lists.denx.de\n\t(client-ip=81.169.180.215; helo=lists.denx.de;\n\tenvelope-from=u-boot-bounces@lists.denx.de;\n\treceiver=<UNKNOWN>)", "ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"F7lczsdj\"; dkim-atps=neutral" ], "Received": [ "from lists.denx.de (dione.denx.de [81.169.180.215])\n\tby ozlabs.org (Postfix) with ESMTP id 3xqsLN5CCQz9s7g\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSun, 10 Sep 2017 23:27:40 +1000 (AEST)", "by lists.denx.de (Postfix, from userid 105)\n\tid 79411C21F0D; Sun, 10 Sep 2017 13:26:31 +0000 (UTC)", "from lists.denx.de (localhost [IPv6:::1])\n\tby lists.denx.de (Postfix) with ESMTP id 237FCC21F74;\n\tSun, 10 Sep 2017 13:24:06 +0000 (UTC)", "by lists.denx.de (Postfix, from userid 105)\n\tid 939DFC21E40; Sun, 10 Sep 2017 13:23:16 +0000 (UTC)", "from mail-qt0-f196.google.com (mail-qt0-f196.google.com\n\t[209.85.216.196])\n\tby lists.denx.de (Postfix) with ESMTPS id 47904C21EE4\n\tfor <u-boot@lists.denx.de>; Sun, 10 Sep 2017 13:23:07 +0000 (UTC)", "by mail-qt0-f196.google.com with SMTP id u48so1297462qtc.4\n\tfor <u-boot@lists.denx.de>; Sun, 10 Sep 2017 06:23:07 -0700 (PDT)", "from localhost ([2601:184:4780:aac0:25f8:dd96:a084:785a])\n\tby smtp.gmail.com with ESMTPSA id\n\tl19sm5248416qkl.31.2017.09.10.06.23.04\n\t(version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);\n\tSun, 10 Sep 2017 06:23:04 -0700 (PDT)" ], "X-Spam-Checker-Version": "SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de", "X-Spam-Level": "", "X-Spam-Status": "No, score=-0.0 required=5.0 tests=FREEMAIL_FROM,\n\tRCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,\n\tT_DKIM_INVALID\n\tautolearn=unavailable autolearn_force=no version=3.4.0", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=r5ZC6/3pNXKFsf7NlBcHZ0Vu14dwXZhcZy36GpjGa6Y=;\n\tb=F7lczsdjBeFxI7OPnOg5/c7Tub9mQC2wEosD5Qg1uUcpa5MS11Y8T3jCQOcAQdi0cE\n\tLgGB9fl2Ol0ChPWFl90pPc8yZ2QKXih/mYT/4nWLD6uXwWK50a83veHwWKCXdzmHAdKh\n\tgCCAn6cEtKtN+1cPN1He7hKanxXVwgF1JbFB98V1G+YNwIp6jSQP0CyyDDRkHYRRQBUp\n\tg/zOJtj9yG15ylt1m2Lt+RO5YKqp0ubO0Mwa370OMNIo3/ta70h9Zq2qV2nFKfBqCILd\n\tXt1kwQt3fvw2aBGp74tewLjnTCs3mrWb/yrAERAFSmVlBoq7VFZAGAiz++dTti+HcAZU\n\teHpw==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=r5ZC6/3pNXKFsf7NlBcHZ0Vu14dwXZhcZy36GpjGa6Y=;\n\tb=GML14R1zaXhKc9FkBN7hBA9PM4hjPiVEfEF8Rc4kkI4Cq5rK3q5wwSkZHvHxdI+Gup\n\tjp+tkCNmOAxmnjWFe1fh/tYlZG0NEB/0EAwJSNAAM2uoNIU1AMn1mQSfn82bKKkA78QS\n\tn2opIzF5jT1GeEg8Uv1/P/WWjPCvrD+L3YgO292nIP4hSzGewqBE0j/AbpNjTKCyPRvR\n\tGIVdCbMCFCA9oy/azS40C6UbA+clnjfO+BcnMoakuIVBJyY5l7zKbVt24jVRXGDqpwEo\n\tEoLtjvOBHhGIp3Vl40VKr7tIS6y8ihzNSHDaTHhugggqin2XGtlL+/gO9g0I/Bt6Trsb\n\tqC7A==", "X-Gm-Message-State": "AHPjjUhLoe0+6+hn49WcuXuF+NcXoqP1aTqPrErE7oIsoHyFqH3spjGA\n\tkAO7RErq1RRWlJOmJ9U=", "X-Google-Smtp-Source": "AOwi7QBUJpCpsdvi8sOdpO41hnmfAgp/NTPyIomsJlLU4pG5h3N1WeKp5xffNoF/+rbyu4YicW2kJA==", "X-Received": "by 10.200.36.78 with SMTP id d14mr7744473qtd.136.1505049785822; \n\tSun, 10 Sep 2017 06:23:05 -0700 (PDT)", "From": "Rob Clark <robdclark@gmail.com>", "To": "U-Boot Mailing List <u-boot@lists.denx.de>", "Date": "Sun, 10 Sep 2017 09:22:28 -0400", "Message-Id": "<20170910132236.14318-8-robdclark@gmail.com>", "X-Mailer": "git-send-email 2.13.5", "In-Reply-To": "<20170910132236.14318-1-robdclark@gmail.com>", "References": "<20170910132236.14318-1-robdclark@gmail.com>", "Cc": "Heinrich Schuchardt <xypron.glpk@gmx.de>, Peter Jones <pjones@redhat.com>,\n\tLeif Lindholm <leif.lindholm@linaro.org>", "Subject": "[U-Boot] [PATCH v1 07/12] efi_loader: SIMPLE_TEXT_INPUT_EX plus\n\twire up objects properly", "X-BeenThere": "u-boot@lists.denx.de", "X-Mailman-Version": "2.1.18", "Precedence": "list", "List-Id": "U-Boot discussion <u-boot.lists.denx.de>", "List-Unsubscribe": "<https://lists.denx.de/options/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=unsubscribe>", "List-Archive": "<http://lists.denx.de/pipermail/u-boot/>", "List-Post": "<mailto:u-boot@lists.denx.de>", "List-Help": "<mailto:u-boot-request@lists.denx.de?subject=help>", "List-Subscribe": "<https://lists.denx.de/listinfo/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=subscribe>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "base64", "Errors-To": "u-boot-bounces@lists.denx.de", "Sender": "\"U-Boot\" <u-boot-bounces@lists.denx.de>" }, "content": "I think we need the _EX version for SCT.. and either way we need to wire\nup the corresponding objects in the systab properly.\n\nThis fixes some issues with SCT.efi.\n\nSigned-off-by: Rob Clark <robdclark@gmail.com>\n---\n include/efi_api.h | 60 +++++++++++++++++++-\n include/efi_loader.h | 10 +---\n lib/efi_loader/efi_boottime.c | 3 +\n lib/efi_loader/efi_console.c | 129 +++++++++++++++++++++++++++++++++++++-----\n 4 files changed, 177 insertions(+), 25 deletions(-)", "diff": "diff --git a/include/efi_api.h b/include/efi_api.h\nindex 5612dfad49..87c8ffe68e 100644\n--- a/include/efi_api.h\n+++ b/include/efi_api.h\n@@ -242,11 +242,11 @@ struct efi_system_table {\n \tstruct efi_table_hdr hdr;\n \tunsigned long fw_vendor; /* physical addr of wchar_t vendor string */\n \tu32 fw_revision;\n-\tunsigned long con_in_handle;\n+\tefi_handle_t con_in_handle;\n \tstruct efi_simple_input_interface *con_in;\n-\tunsigned long con_out_handle;\n+\tefi_handle_t con_out_handle;\n \tstruct efi_simple_text_output_protocol *con_out;\n-\tunsigned long stderr_handle;\n+\tefi_handle_t stderr_handle;\n \tstruct efi_simple_text_output_protocol *std_err;\n \tstruct efi_runtime_services *runtime;\n \tstruct efi_boot_services *boottime;\n@@ -473,6 +473,60 @@ struct efi_simple_input_interface {\n \tstruct efi_event *wait_for_key;\n };\n \n+\n+#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \\\n+\tEFI_GUID(0xdd9e7534, 0x7762, 0x4698, \\\n+\t\t 0x8c, 0x14, 0xf5, 0x85, 0x17, 0xa6, 0x25, 0xaa)\n+\n+/* key-shift state: */\n+#define EFI_SHIFT_STATE_VALID 0x80000000\n+#define EFI_RIGHT_SHIFT_PRESSED 0x00000001\n+#define EFI_LEFT_SHIFT_PRESSED 0x00000002\n+#define EFI_RIGHT_CONTROL_PRESSED 0x00000004\n+#define EFI_LEFT_CONTROL_PRESSED 0x00000008\n+#define EFI_RIGHT_ALT_PRESSED 0x00000010\n+#define EFI_EFI_LEFT_ALT_PRESSED 0x00000020\n+#define EFI_RIGHT_LOGO_PRESSED 0x00000040\n+#define EFI_LEFT_LOGO_PRESSED 0x00000080\n+#define EFI_MENU_KEY_PRESSED 0x00000100\n+#define EFI_SYS_REQ_PRESSED 0x00000200\n+\n+/* key-toggle state: */\n+#define EFI_TOGGLE_STATE_VALID 0x80\n+#define EFI_SCROLL_LOCK_ACTIVE 0x01\n+#define EFI_NUM_LOCK_ACTIVE 0x02\n+#define EFI_CAPS_LOCK_ACTIVE 0x04\n+\n+struct efi_key_state {\n+\tuint32_t key_shift_state;\n+\tuint8_t key_toggle_state;\n+};\n+\n+struct efi_key_data {\n+\tstruct efi_input_key key;\n+\tstruct efi_key_state key_state;\n+};\n+\n+struct efi_simple_text_input_ex_interface {\n+\tefi_status_t (EFIAPI *reset)(\n+\t\t\tstruct efi_simple_text_input_ex_interface *this,\n+\t\t\tbool ExtendedVerification);\n+\tefi_status_t (EFIAPI *read_key_stroke)(\n+\t\t\tstruct efi_simple_text_input_ex_interface *this,\n+\t\t\tstruct efi_key_data *key_data);\n+\tstruct efi_event *wait_for_key;\n+\tefi_status_t (EFIAPI *set_state)(\n+\t\t\tstruct efi_simple_text_input_ex_interface *this,\n+\t\t\tuint8_t key_toggle_state);\n+\tefi_status_t (EFIAPI *register_key_notify)(\n+\t\t\tstruct efi_simple_text_input_ex_interface *this,\n+\t\t\tefi_status_t (EFIAPI *notify_fn)(struct efi_key_data *key_data),\n+\t\t\tefi_handle_t *notify_handle);\n+\tefi_status_t (EFIAPI *unregister_key_notify)(\n+\t\t\tstruct efi_simple_text_input_ex_interface *this,\n+\t\t\tefi_handle_t notify_handle);\n+};\n+\n #define CONSOLE_CONTROL_GUID \\\n \tEFI_GUID(0xf42f7782, 0x12e, 0x4c12, \\\n \t\t 0x99, 0x56, 0x49, 0xf9, 0x43, 0x4, 0xf7, 0x21)\ndiff --git a/include/efi_loader.h b/include/efi_loader.h\nindex 4864b3ac77..72734b3a44 100644\n--- a/include/efi_loader.h\n+++ b/include/efi_loader.h\n@@ -54,7 +54,9 @@ const char *__efi_nesting_dec(void);\n extern struct efi_runtime_services efi_runtime_services;\n extern struct efi_system_table systab;\n \n+extern struct efi_object efi_console_output_obj;\n extern const struct efi_simple_text_output_protocol efi_con_out;\n+extern struct efi_object efi_console_input_obj;\n extern struct efi_simple_input_interface efi_con_in;\n extern const struct efi_console_control_protocol efi_console_control;\n extern const struct efi_device_path_to_text_protocol efi_device_path_to_text;\n@@ -108,14 +110,6 @@ struct efi_object {\n \tvoid *handle;\n };\n \n-#define EFI_PROTOCOL_OBJECT(_guid, _protocol) (struct efi_object){\t\\\n-\t.protocols = {{\t\t\t\t\t\t\t\\\n-\t\t.guid = &(_guid),\t \t\t\t\t\\\n-\t\t.protocol_interface = (void *)(_protocol), \t\t\\\n-\t}},\t\t\t\t\t\t\t\t\\\n-\t.handle = (void *)(_protocol),\t\t\t\t\t\\\n-}\n-\n /**\n * struct efi_event\n *\ndiff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c\nindex 7b53570354..9628bef474 100644\n--- a/lib/efi_loader/efi_boottime.c\n+++ b/lib/efi_loader/efi_boottime.c\n@@ -1394,8 +1394,11 @@ struct efi_system_table __efi_runtime_data systab = {\n \t\t.headersize = sizeof(struct efi_table_hdr),\n \t},\n \t.fw_vendor = (long)firmware_vendor,\n+\t.con_in_handle = &efi_console_input_obj,\n \t.con_in = (void*)&efi_con_in,\n+\t.con_out_handle = &efi_console_output_obj,\n \t.con_out = (void*)&efi_con_out,\n+\t.stderr_handle = &efi_console_output_obj,\n \t.std_err = (void*)&efi_con_out,\n \t.runtime = (void*)&efi_runtime_services,\n \t.boottime = (void*)&efi_boot_services,\ndiff --git a/lib/efi_loader/efi_console.c b/lib/efi_loader/efi_console.c\nindex afc725a2c7..2e13fdc096 100644\n--- a/lib/efi_loader/efi_console.c\n+++ b/lib/efi_loader/efi_console.c\n@@ -50,6 +50,10 @@ const efi_guid_t efi_guid_console_control = CONSOLE_CONTROL_GUID;\n #define cESC '\\x1b'\n #define ESC \"\\x1b\"\n \n+/*\n+ * EFI_CONSOLE_CONTROL:\n+ */\n+\n static efi_status_t EFIAPI efi_cin_get_mode(\n \t\t\tstruct efi_console_control_protocol *this,\n \t\t\tint *mode, char *uga_exists, char *std_in_locked)\n@@ -97,6 +101,11 @@ static struct simple_text_output_mode efi_con_mode = {\n \t.cursor_visible = 1,\n };\n \n+\n+/*\n+ * EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL:\n+ */\n+\n static int term_read_reply(int *n, int maxnum, char end_char)\n {\n \tchar c;\n@@ -364,6 +373,11 @@ const struct efi_simple_text_output_protocol efi_con_out = {\n \t.mode = (void*)&efi_con_mode,\n };\n \n+\n+/*\n+ * EFI_SIMPLE_TEXT_INPUT_PROTOCOL:\n+ */\n+\n static efi_status_t EFIAPI efi_cin_reset(\n \t\t\tstruct efi_simple_input_interface *this,\n \t\t\tbool extended_verification)\n@@ -372,9 +386,7 @@ static efi_status_t EFIAPI efi_cin_reset(\n \treturn EFI_EXIT(EFI_UNSUPPORTED);\n }\n \n-static efi_status_t EFIAPI efi_cin_read_key_stroke(\n-\t\t\tstruct efi_simple_input_interface *this,\n-\t\t\tstruct efi_input_key *key)\n+static efi_status_t read_key_stroke(struct efi_key_data *key_data)\n {\n \tstruct efi_input_key pressed_key = {\n \t\t.scan_code = 0,\n@@ -382,14 +394,12 @@ static efi_status_t EFIAPI efi_cin_read_key_stroke(\n \t};\n \tchar ch;\n \n-\tEFI_ENTRY(\"%p, %p\", this, key);\n-\n \t/* We don't do interrupts, so check for timers cooperatively */\n \tefi_timer_check();\n \n \tif (!tstc()) {\n \t\t/* No key pressed */\n-\t\treturn EFI_EXIT(EFI_NOT_READY);\n+\t\treturn EFI_NOT_READY;\n \t}\n \n \tch = getc();\n@@ -438,9 +448,31 @@ static efi_status_t EFIAPI efi_cin_read_key_stroke(\n \t\tch = 0x08;\n \t}\n \tpressed_key.unicode_char = ch;\n-\t*key = pressed_key;\n+\tkey_data->key = pressed_key;\n \n-\treturn EFI_EXIT(EFI_SUCCESS);\n+\t/* TODO not sure if we have a way to get this from stdin?\n+\t * We might need to use keyboard driver directly for _ex\n+\t * stuff?\n+\t */\n+\tmemset(&key_data->key_state, 0, sizeof(key_data->key_state));\n+\n+\treturn EFI_SUCCESS;\n+}\n+\n+static efi_status_t EFIAPI efi_cin_read_key_stroke(\n+\t\t\tstruct efi_simple_input_interface *this,\n+\t\t\tstruct efi_input_key *key)\n+{\n+\tstruct efi_key_data key_data;\n+\tefi_status_t ret;\n+\n+\tEFI_ENTRY(\"%p, %p\", this, key);\n+\n+\tret = read_key_stroke(&key_data);\n+\tif (ret == EFI_SUCCESS)\n+\t\t*key = key_data.key;\n+\n+\treturn EFI_EXIT(ret);\n }\n \n struct efi_simple_input_interface efi_con_in = {\n@@ -465,12 +497,81 @@ static void EFIAPI efi_console_timer_notify(struct efi_event *event,\n }\n \n \n-static struct efi_object efi_console_control_obj =\n-\tEFI_PROTOCOL_OBJECT(efi_guid_console_control, &efi_console_control);\n-static struct efi_object efi_console_output_obj =\n-\tEFI_PROTOCOL_OBJECT(EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID, &efi_con_out);\n-static struct efi_object efi_console_input_obj =\n-\tEFI_PROTOCOL_OBJECT(EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID, &efi_con_in);\n+/*\n+ * EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL\n+ */\n+\n+static efi_status_t EFIAPI efi_cin_ex_reset(\n+\t\tstruct efi_simple_text_input_ex_interface *this,\n+\t\tbool extended_verification)\n+{\n+\tEFI_ENTRY(\"%p, %d\", this, extended_verification);\n+\treturn EFI_EXIT(EFI_UNSUPPORTED);\n+}\n+\n+static efi_status_t EFIAPI efi_cin_ex_read_key_stroke(\n+\t\tstruct efi_simple_text_input_ex_interface *this,\n+\t\tstruct efi_key_data *key_data)\n+{\n+\tEFI_ENTRY(\"%p, %p\", this, key_data);\n+\treturn EFI_EXIT(read_key_stroke(key_data));\n+}\n+\n+static efi_status_t EFIAPI efi_cin_ex_set_state(\n+\t\tstruct efi_simple_text_input_ex_interface *this,\n+\t\tuint8_t key_toggle_state)\n+{\n+\tEFI_ENTRY(\"%p, %x\", this, key_toggle_state);\n+\treturn EFI_EXIT(EFI_SUCCESS);\n+}\n+\n+static efi_status_t EFIAPI efi_cin_ex_register_key_notify(\n+\t\tstruct efi_simple_text_input_ex_interface *this,\n+\t\tefi_status_t (EFIAPI *notify_fn)(struct efi_key_data *key_data),\n+\t\tefi_handle_t *notify_handle)\n+{\n+\tEFI_ENTRY(\"%p, %p, %p\", this, notify_fn, notify_handle);\n+\treturn EFI_EXIT(EFI_OUT_OF_RESOURCES);\n+}\n+\n+static efi_status_t EFIAPI efi_cin_ex_unregister_key_notify(\n+\t\tstruct efi_simple_text_input_ex_interface *this,\n+\t\tefi_handle_t notify_handle)\n+{\n+\tEFI_ENTRY(\"%p, %p\", this, notify_handle);\n+\treturn EFI_EXIT(EFI_INVALID_PARAMETER);\n+}\n+\n+static struct efi_simple_text_input_ex_interface efi_con_in_ex = {\n+\t\t.reset = efi_cin_ex_reset,\n+\t\t.read_key_stroke = efi_cin_ex_read_key_stroke,\n+\t\t.wait_for_key = NULL,\n+\t\t.set_state = efi_cin_ex_set_state,\n+\t\t.register_key_notify = efi_cin_ex_register_key_notify,\n+\t\t.unregister_key_notify = efi_cin_ex_unregister_key_notify,\n+};\n+\n+static struct efi_object efi_console_control_obj = {\n+\t.protocols = {\n+\t\t{ &efi_guid_console_control, (void *)&efi_console_control },\n+\t},\n+\t.handle = &efi_console_control_obj,\n+};\n+\n+struct efi_object efi_console_output_obj = {\n+\t.protocols = {\n+\t\t{&EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID, (void *)&efi_con_out},\n+\t},\n+\t.handle = &efi_console_output_obj,\n+};\n+\n+struct efi_object efi_console_input_obj = {\n+\t.protocols = {\n+\t\t{&EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID, (void *)&efi_con_in},\n+\t\t{&EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID, (void *)&efi_con_in_ex},\n+\t},\n+\t.handle = &efi_console_input_obj,\n+};\n \n /* This gets called from do_bootefi_exec(). */\n int efi_console_register(void)\n", "prefixes": [ "U-Boot", "v1", "07/12" ] }