uboot/lib/efi/efi_info.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 * Copyright (c) 2015 Google, Inc
   4 *
   5 * Access to the EFI information table
   6 */
   7
   8#include <common.h>
   9#include <efi.h>
  10#include <errno.h>
  11#include <mapmem.h>
  12
  13int efi_info_get(enum efi_entry_t type, void **datap, int *sizep)
  14{
  15        struct efi_entry_hdr *entry;
  16        struct efi_info_hdr *info;
  17        int ret;
  18
  19        if (!gd->arch.table)
  20                return -ENODATA;
  21
  22        info = map_sysmem(gd->arch.table, 0);
  23        if (info->version != EFI_TABLE_VERSION) {
  24                ret = -EPROTONOSUPPORT;
  25                goto err;
  26        }
  27
  28        entry = (struct efi_entry_hdr *)((ulong)info + info->hdr_size);
  29        while (entry->type != EFIET_END) {
  30                if (entry->type == type) {
  31                        if (entry->addr)
  32                                *datap = map_sysmem(entry->addr, entry->size);
  33                        else
  34                                *datap = entry + 1;
  35                        *sizep = entry->size;
  36                        return 0;
  37                }
  38                entry = (struct efi_entry_hdr *)((ulong)entry + entry->link);
  39        }
  40
  41        ret = -ENOENT;
  42err:
  43        unmap_sysmem(info);
  44
  45        return ret;
  46}
  47