get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/812102/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 812102,
    "url": "http://patchwork.ozlabs.org/api/patches/812102/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/20170910112149.21358-14-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": "<20170910112149.21358-14-robdclark@gmail.com>",
    "list_archive_url": null,
    "date": "2017-09-10T11:21:30",
    "name": "[U-Boot,v2,07/21] efi_loader: flesh out device-path to text",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "3043292322cd039c0c47734fd25b7a1a948ade60",
    "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/20170910112149.21358-14-robdclark@gmail.com/mbox/",
    "series": [
        {
            "id": 2383,
            "url": "http://patchwork.ozlabs.org/api/series/2383/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=2383",
            "date": "2017-09-10T11:21:17",
            "name": "efi_loader: enough UEFI for standard distro boot",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/2383/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/812102/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/812102/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=\"RrpgCC7M\"; dkim-atps=neutral"
        ],
        "Received": [
            "from lists.denx.de (dione.denx.de [81.169.180.215])\n\tby ozlabs.org (Postfix) with ESMTP id 3xqpgx5FHsz9sDB\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSun, 10 Sep 2017 21:27:41 +1000 (AEST)",
            "by lists.denx.de (Postfix, from userid 105)\n\tid 5D324C21DDF; Sun, 10 Sep 2017 11:25:48 +0000 (UTC)",
            "from lists.denx.de (localhost [IPv6:::1])\n\tby lists.denx.de (Postfix) with ESMTP id DC483C21E40;\n\tSun, 10 Sep 2017 11:23:40 +0000 (UTC)",
            "by lists.denx.de (Postfix, from userid 105)\n\tid F2B3BC21C4C; Sun, 10 Sep 2017 11:22:56 +0000 (UTC)",
            "from mail-qt0-f195.google.com (mail-qt0-f195.google.com\n\t[209.85.216.195])\n\tby lists.denx.de (Postfix) with ESMTPS id 29384C21E3C\n\tfor <u-boot@lists.denx.de>; Sun, 10 Sep 2017 11:22:51 +0000 (UTC)",
            "by mail-qt0-f195.google.com with SMTP id b1so1747208qtc.0\n\tfor <u-boot@lists.denx.de>; Sun, 10 Sep 2017 04:22:51 -0700 (PDT)",
            "from localhost ([2601:184:4780:aac0:25f8:dd96:a084:785a])\n\tby smtp.gmail.com with ESMTPSA id\n\ti39sm4510910qte.11.2017.09.10.04.22.48\n\t(version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);\n\tSun, 10 Sep 2017 04:22:48 -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=9wvjK6cnE3C9klIJHwS9ip4xCU9ANtGDr0esnZ4NAhQ=;\n\tb=RrpgCC7MoAnJJOtQbMYvqOj14VAsctkHMVFc4O2zFBYg4wGP2k7vLBExJAItC4AOor\n\tiQIFCJW93CAzvMKzyrL0O0x5v56/7fbNEbrjP5dyaLa3Qm9hf3u1HiO7F2EggAnBN0Wp\n\tatd+FCXm5rStqxuBvduplvdYXYhUUJ0cH3rMExuWy+DyakxcoYURv82r2STzzvg1B7eU\n\tvbV9Q13+rzg7pZVPMWEBaa43ZrlvfkD2ScZHjd7rQkcvgPlWDRE8UKHiBhJkVtMRjk7A\n\thjIMj3ZMMUCJT4w32l10vpCLYSR8ErWbHE4becCpUfZn7XrbmT68rkPyMurysZSZIu62\n\tfUcQ==",
        "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=9wvjK6cnE3C9klIJHwS9ip4xCU9ANtGDr0esnZ4NAhQ=;\n\tb=h5zJ0A6OkHryAQa1eL8cmwfn/IxvS57T9NbFS+8qMN8A3RhzAjNgiLHoAFe8pnaqir\n\twwkaH/3kjtiUeMquQ4sVqttvE7RUCnETFfIHwnZSjWuHzDkDTaDAMSGDXkQTrD6aFmyx\n\t+H61RNYYKx2HlZOy4xN0oWYP3+q8Ld2SOnP0t5t+a6r9xodxqvJGvwNlzxBTMWtw4u4E\n\taRFmV4mzZcOO2lKXXr753kymDEoFxGkM/7sNNXfAwKyu5Dgc5nwgkX16ICdGbYGg+d/T\n\tXXfCfnQ6OOZMnxAQMYjwXfLH9bkIF5K8aN54ZMQgRr1UClp+u7rQBpqZuHhrhqQ5Kwp4\n\tmIGg==",
        "X-Gm-Message-State": "AHPjjUjFjMUmddxupfDSJM1JKW8nh8epRHy9xUlAvfA3ZLnKRZeeZNmF\n\tKyp8i1IVkylF6ITseE8=",
        "X-Google-Smtp-Source": "AOwi7QBFI+GLboXJ0tuxFqtk1bg5TfQc6umbO15TCIUOKpj/zYMVO/dWDVBvVKp4C1b1as5XWYTIYA==",
        "X-Received": "by 10.200.27.226 with SMTP id m31mr12304437qtk.198.1505042569769;\n\tSun, 10 Sep 2017 04:22:49 -0700 (PDT)",
        "From": "Rob Clark <robdclark@gmail.com>",
        "To": "U-Boot Mailing List <u-boot@lists.denx.de>",
        "Date": "Sun, 10 Sep 2017 07:21:30 -0400",
        "Message-Id": "<20170910112149.21358-14-robdclark@gmail.com>",
        "X-Mailer": "git-send-email 2.13.5",
        "In-Reply-To": "<20170910112149.21358-1-robdclark@gmail.com>",
        "References": "<20170910112149.21358-1-robdclark@gmail.com>",
        "Cc": "Heinrich Schuchardt <xypron.glpk@gmx.de>, Peter Jones <pjones@redhat.com>",
        "Subject": "[U-Boot] [PATCH v2 07/21] efi_loader: flesh out device-path to text",
        "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": "It needs to handle more device-path node types, and also multiple levels\nof path hierarchy.  To simplify this, initially construct utf8 string to\na temporary buffer, and then allocate the real utf16 buffer that is\nreturned.  This should be mostly for debugging or at least not critical-\npath so an extra copy won't hurt, and is saner than the alternative.\n\nSigned-off-by: Rob Clark <robdclark@gmail.com>\n---\n include/efi_api.h                        |   1 +\n include/efi_loader.h                     |   2 +\n lib/efi_loader/efi_device_path_to_text.c | 241 +++++++++++++++++++++++--------\n 3 files changed, 181 insertions(+), 63 deletions(-)",
    "diff": "diff --git a/include/efi_api.h b/include/efi_api.h\nindex ac58fd58de..0c36122107 100644\n--- a/include/efi_api.h\n+++ b/include/efi_api.h\n@@ -304,6 +304,7 @@ struct efi_device_path_vendor {\n \n #define EFI_PNP_ID(ID)\t\t\t\t(u32)(((ID) << 16) | 0x41D0)\n #define EISA_PNP_ID(ID)\t\t\t\tEFI_PNP_ID(ID)\n+#define EISA_PNP_NUM(ID)\t\t\t((ID) >> 16)\n \n struct efi_device_path_acpi_path {\n \tstruct efi_device_path dp;\ndiff --git a/include/efi_loader.h b/include/efi_loader.h\nindex d052b03ab7..f39c2ee6da 100644\n--- a/include/efi_loader.h\n+++ b/include/efi_loader.h\n@@ -59,6 +59,8 @@ 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 \n+uint16_t *efi_dp_str(struct efi_device_path *dp);\n+\n extern const efi_guid_t efi_guid_console_control;\n extern const efi_guid_t efi_guid_device_path;\n extern const efi_guid_t efi_guid_loaded_image;\ndiff --git a/lib/efi_loader/efi_device_path_to_text.c b/lib/efi_loader/efi_device_path_to_text.c\nindex f9d071ac50..1a5ef3919b 100644\n--- a/lib/efi_loader/efi_device_path_to_text.c\n+++ b/lib/efi_loader/efi_device_path_to_text.c\n@@ -15,82 +15,197 @@\n const efi_guid_t efi_guid_device_path_to_text_protocol =\n \t\tEFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID;\n \n-static uint16_t *efi_convert_device_node_to_text(\n-\t\tstruct efi_device_path *device_node,\n-\t\tbool display_only,\n-\t\tbool allow_shortcuts)\n+static char *dp_unknown(char *s, struct efi_device_path *dp)\n {\n-\tunsigned long buffer_size;\n-\tefi_status_t r;\n-\tuint16_t *buffer = NULL;\n-\tint i;\n+\ts += sprintf(s, \"/UNKNOWN(%04x,%04x)\", dp->type, dp->sub_type);\n+\treturn s;\n+}\n \n-\tswitch (device_node->type) {\n-\tcase DEVICE_PATH_TYPE_END:\n-\t\treturn NULL;\n-\tcase DEVICE_PATH_TYPE_MESSAGING_DEVICE:\n-\t\tswitch (device_node->sub_type) {\n-\t\tcase DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR: {\n-\t\t\tstruct efi_device_path_mac_addr *dp =\n-\t\t\t\t(struct efi_device_path_mac_addr *)device_node;\n-\n-\t\t\tif (dp->if_type != 0 && dp->if_type != 1)\n-\t\t\t\tbreak;\n-\t\t\tr = efi_allocate_pool(EFI_ALLOCATE_ANY_PAGES,\n-\t\t\t\t\t      2 * MAC_OUTPUT_LEN,\n-\t\t\t\t\t      (void **)&buffer);\n-\t\t\tif (r != EFI_SUCCESS)\n-\t\t\t\treturn NULL;\n-\t\t\tsprintf((char *)buffer,\n-\t\t\t\t\"MAC(%02x%02x%02x%02x%02x%02x,0x%1x)\",\n-\t\t\t\tdp->mac.addr[0], dp->mac.addr[1],\n-\t\t\t\tdp->mac.addr[2], dp->mac.addr[3],\n-\t\t\t\tdp->mac.addr[4], dp->mac.addr[5],\n-\t\t\t\tdp->if_type);\n-\t\t\tfor (i = MAC_OUTPUT_LEN - 1; i >= 0; --i)\n-\t\t\t\tbuffer[i] = ((uint8_t *)buffer)[i];\n+static char *dp_hardware(char *s, struct efi_device_path *dp)\n+{\n+\tswitch (dp->sub_type) {\n+\tcase DEVICE_PATH_SUB_TYPE_VENDOR: {\n+\t\tstruct efi_device_path_vendor *vdp =\n+\t\t\t(struct efi_device_path_vendor *)dp;\n+\t\ts += sprintf(s, \"/VenHw(%pUl)\", &vdp->guid);\n+\t\tbreak;\n+\t}\n+\tdefault:\n+\t\ts = dp_unknown(s, dp);\n+\t\tbreak;\n+\t}\n+\treturn s;\n+}\n+\n+static char *dp_acpi(char *s, struct efi_device_path *dp)\n+{\n+\tswitch (dp->sub_type) {\n+\tcase DEVICE_PATH_SUB_TYPE_ACPI_DEVICE: {\n+\t\tstruct efi_device_path_acpi_path *adp =\n+\t\t\t(struct efi_device_path_acpi_path *)dp;\n+\t\ts += sprintf(s, \"/Acpi(PNP%04x\", EISA_PNP_NUM(adp->hid));\n+\t\tif (adp->uid)\n+\t\t\ts += sprintf(s, \",%d\", adp->uid);\n+\t\ts += sprintf(s, \")\");\n+\t\tbreak;\n+\t}\n+\tdefault:\n+\t\ts = dp_unknown(s, dp);\n+\t\tbreak;\n+\t}\n+\treturn s;\n+}\n+\n+static char *dp_msging(char *s, struct efi_device_path *dp)\n+{\n+\tswitch (dp->sub_type) {\n+\tcase DEVICE_PATH_SUB_TYPE_MSG_USB: {\n+\t\tstruct efi_device_path_usb *udp =\n+\t\t\t(struct efi_device_path_usb *)dp;\n+\t\ts += sprintf(s, \"/Usb(0x%x,0x%x)\", udp->parent_port_number,\n+\t\t\t     udp->usb_interface);\n+\t\tbreak;\n+\t}\n+\tcase DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR: {\n+\t\tstruct efi_device_path_mac_addr *mdp =\n+\t\t\t(struct efi_device_path_mac_addr *)dp;\n+\n+\t\tif (mdp->if_type != 0 && mdp->if_type != 1)\n \t\t\tbreak;\n-\t\t\t}\n-\t\t}\n+\n+\t\ts += sprintf(s, \"/MAC(%02x%02x%02x%02x%02x%02x,0x%1x)\",\n+\t\t\tmdp->mac.addr[0], mdp->mac.addr[1],\n+\t\t\tmdp->mac.addr[2], mdp->mac.addr[3],\n+\t\t\tmdp->mac.addr[4], mdp->mac.addr[5],\n+\t\t\tmdp->if_type);\n+\n+\t\tbreak;\n+\t}\n+\tcase DEVICE_PATH_SUB_TYPE_MSG_USB_CLASS: {\n+\t\tstruct efi_device_path_usb_class *ucdp =\n+\t\t\t(struct efi_device_path_usb_class *)dp;\n+\n+\t\ts += sprintf(s, \"/USBClass(%x,%x,%x,%x,%x)\",\n+\t\t\tucdp->vendor_id, ucdp->product_id,\n+\t\t\tucdp->device_class, ucdp->device_subclass,\n+\t\t\tucdp->device_protocol);\n+\n+\t\tbreak;\n+\t}\n+\tcase DEVICE_PATH_SUB_TYPE_MSG_SD:\n+\tcase DEVICE_PATH_SUB_TYPE_MSG_MMC: {\n+\t\tconst char *typename =\n+\t\t\t(dp->sub_type == DEVICE_PATH_SUB_TYPE_MSG_SD) ?\n+\t\t\t\t\t\"SDCard\" : \"MMC\";\n+\t\tstruct efi_device_path_sd_mmc_path *sddp =\n+\t\t\t(struct efi_device_path_sd_mmc_path *)dp;\n+\t\ts += sprintf(s, \"/%s(Slot%u)\", typename, sddp->slot_number);\n+\t\tbreak;\n+\t}\n+\tdefault:\n+\t\ts = dp_unknown(s, dp);\n \t\tbreak;\n-\tcase DEVICE_PATH_TYPE_MEDIA_DEVICE:\n-\t\tswitch (device_node->sub_type) {\n-\t\tcase DEVICE_PATH_SUB_TYPE_FILE_PATH: {\n-\t\t\tstruct efi_device_path_file_path *fp =\n-\t\t\t\t(struct efi_device_path_file_path *)device_node;\n-\t\t\tbuffer_size = device_node->length - 4;\n-\t\t\tr = efi_allocate_pool(EFI_ALLOCATE_ANY_PAGES,\n-\t\t\t\t\t      buffer_size, (void **) &buffer);\n-\t\t\tif (r != EFI_SUCCESS)\n-\t\t\t\treturn NULL;\n-\t\t\tmemcpy(buffer, fp->str, buffer_size);\n+\t}\n+\treturn s;\n+}\n+\n+static char *dp_media(char *s, struct efi_device_path *dp)\n+{\n+\tswitch (dp->sub_type) {\n+\tcase DEVICE_PATH_SUB_TYPE_HARD_DRIVE_PATH: {\n+\t\tstruct efi_device_path_hard_drive_path *hddp =\n+\t\t\t(struct efi_device_path_hard_drive_path *)dp;\n+\t\tvoid *sig = hddp->partition_signature;\n+\n+\t\tswitch (hddp->signature_type) {\n+\t\tcase SIG_TYPE_MBR:\n+\t\t\ts += sprintf(s, \"/HD(Part%d,Sig%08x)\",\n+\t\t\t\t     hddp->partition_number,\n+\t\t\t\t     *(uint32_t *)sig);\n \t\t\tbreak;\n+\t\tcase SIG_TYPE_GUID:\n+\t\t\ts += sprintf(s, \"/HD(Part%d,Sig%pUl)\",\n+\t\t\t\t     hddp->partition_number, sig);\n+\t\tdefault:\n+\t\t\ts += sprintf(s, \"/HD(Part%d,MBRType=%02x,SigType=%02x)\",\n+\t\t\t\t     hddp->partition_number, hddp->partmap_type,\n+\t\t\t\t     hddp->signature_type);\n \t\t}\n-\t\t}\n+\n+\t\tbreak;\n+\t}\n+\tcase DEVICE_PATH_SUB_TYPE_CDROM_PATH: {\n+\t\tstruct efi_device_path_cdrom_path *cddp =\n+\t\t\t(struct efi_device_path_cdrom_path *)dp;\n+\t\ts += sprintf(s, \"/CDROM(0x%x)\", cddp->boot_entry);\n+\t\tbreak;\n+\t}\n+\tcase DEVICE_PATH_SUB_TYPE_FILE_PATH: {\n+\t\tstruct efi_device_path_file_path *fp =\n+\t\t\t(struct efi_device_path_file_path *)dp;\n+\t\tint slen = (dp->length - sizeof(*dp)) / 2;\n+\t\ts += sprintf(s, \"/%-*ls\", slen, fp->str);\n+\t\tbreak;\n+\t}\n+\tdefault:\n+\t\ts = dp_unknown(s, dp);\n \t\tbreak;\n \t}\n+\treturn s;\n+}\n \n-\t/*\n-\t * For all node types that we do not yet support return\n-\t * 'UNKNOWN(type,subtype)'.\n-\t */\n-\tif (!buffer) {\n-\t\tr = efi_allocate_pool(EFI_ALLOCATE_ANY_PAGES,\n-\t\t\t\t      2 * UNKNOWN_OUTPUT_LEN,\n-\t\t\t\t      (void **)&buffer);\n-\t\tif (r != EFI_SUCCESS)\n-\t\t\treturn NULL;\n-\t\tsprintf((char *)buffer,\n-\t\t\t\"UNKNOWN(%04x,%04x)\",\n-\t\t\tdevice_node->type,\n-\t\t\tdevice_node->sub_type);\n-\t\tfor (i = UNKNOWN_OUTPUT_LEN - 1; i >= 0; --i)\n-\t\t\tbuffer[i] = ((uint8_t *)buffer)[i];\n+static uint16_t *efi_convert_device_node_to_text(\n+\t\tstruct efi_device_path *dp,\n+\t\tbool display_only,\n+\t\tbool allow_shortcuts)\n+{\n+\tunsigned long len;\n+\tefi_status_t r;\n+\tchar buf[512];  /* this ought be be big enough for worst case */\n+\tchar *str = buf;\n+\tuint16_t *out;\n+\n+\twhile (dp) {\n+\t\tswitch (dp->type) {\n+\t\tcase DEVICE_PATH_TYPE_HARDWARE_DEVICE:\n+\t\t\tstr = dp_hardware(str, dp);\n+\t\t\tbreak;\n+\t\tcase DEVICE_PATH_TYPE_ACPI_DEVICE:\n+\t\t\tstr = dp_acpi(str, dp);\n+\t\t\tbreak;\n+\t\tcase DEVICE_PATH_TYPE_MESSAGING_DEVICE:\n+\t\t\tstr = dp_msging(str, dp);\n+\t\t\tbreak;\n+\t\tcase DEVICE_PATH_TYPE_MEDIA_DEVICE:\n+\t\t\tstr = dp_media(str, dp);\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\tstr = dp_unknown(str, dp);\n+\t\t}\n+\n+\t\tdp = efi_dp_next(dp);\n \t}\n \n-\treturn buffer;\n+\t*str++ = '\\0';\n+\n+\tlen = str - buf;\n+\tr = efi_allocate_pool(EFI_ALLOCATE_ANY_PAGES, 2 * len, (void **)&out);\n+\tif (r != EFI_SUCCESS)\n+\t\treturn NULL;\n+\n+\tascii2unicode(out, buf);\n+\tout[len - 1] = 0;\n+\n+\treturn out;\n }\n \n+/* helper for debug prints.. efi_free_pool() the result. */\n+uint16_t *efi_dp_str(struct efi_device_path *dp)\n+{\n+\treturn efi_convert_device_node_to_text(dp, true, true);\n+}\n+\n+\n static uint16_t EFIAPI *efi_convert_device_node_to_text_ext(\n \t\tstruct efi_device_path *device_node,\n \t\tbool display_only,\n",
    "prefixes": [
        "U-Boot",
        "v2",
        "07/21"
    ]
}