mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-27 01:58:19 +00:00 
			
		
		
		
	As part of bringing the master branch back in to next, we need to allow for all of these changes to exist here. Reported-by: Jonas Karlman <jonas@kwiboo.se> Signed-off-by: Tom Rini <trini@konsulko.com>
		
			
				
	
	
		
			84 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: Intel
 | |
| /*
 | |
|  * Copyright (C) 2013, Intel Corporation
 | |
|  * Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com>
 | |
|  */
 | |
| 
 | |
| #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);
 | |
| }
 |