123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // SPDX-License-Identifier: Intel
- /*
- * Copyright (C) 2013, Intel Corporation
- * Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com>
- */
- #include <common.h>
- #include <asm/hob.h>
- /**
- * Returns the next instance of a HOB type from the starting HOB.
- *
- * @type: HOB type to search
- * @hob_list: A pointer to the HOB list
- *
- * @return A HOB object with matching type; Otherwise NULL.
- */
- const struct hob_header *hob_get_next_hob(uint type, const void *hob_list)
- {
- const struct hob_header *hdr;
- hdr = hob_list;
- /* Parse the HOB list until end of list or matching type is found */
- while (!end_of_hob(hdr)) {
- if (hdr->type == type)
- return hdr;
- hdr = get_next_hob(hdr);
- }
- return NULL;
- }
- /**
- * Returns the next instance of the matched GUID HOB from the starting HOB.
- *
- * @guid: GUID to search
- * @hob_list: A pointer to the HOB list
- *
- * @return A HOB object with matching GUID; Otherwise NULL.
- */
- const struct hob_header *hob_get_next_guid_hob(const efi_guid_t *guid,
- const void *hob_list)
- {
- const struct hob_header *hdr;
- struct hob_guid *guid_hob;
- hdr = hob_list;
- while ((hdr = hob_get_next_hob(HOB_TYPE_GUID_EXT, hdr))) {
- guid_hob = (struct hob_guid *)hdr;
- if (!guidcmp(guid, &guid_hob->name))
- break;
- hdr = get_next_hob(hdr);
- }
- return hdr;
- }
- /**
- * This function retrieves a GUID HOB data buffer and size.
- *
- * @hob_list: A HOB list pointer.
- * @len: A pointer to the GUID HOB data buffer length.
- * If the GUID HOB is located, the length will be updated.
- * @guid A pointer to HOB GUID.
- *
- * @return NULL: Failed to find the GUID HOB.
- * @return others: GUID HOB data buffer pointer.
- */
- void *hob_get_guid_hob_data(const void *hob_list, u32 *len,
- const efi_guid_t *guid)
- {
- const struct hob_header *guid_hob;
- guid_hob = hob_get_next_guid_hob(guid, hob_list);
- if (!guid_hob)
- return NULL;
- if (len)
- *len = get_guid_hob_data_size(guid_hob);
- return get_guid_hob_data(guid_hob);
- }
|