xref: /arm-trusted-firmware/lib/bl_aux_params/bl_aux_params.c (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2019, Arm Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu #include <inttypes.h>
7*91f16700Schasinglulu #include <stdint.h>
8*91f16700Schasinglulu 
9*91f16700Schasinglulu #include <common/debug.h>
10*91f16700Schasinglulu #include <lib/coreboot.h>
11*91f16700Schasinglulu #include <lib/bl_aux_params/bl_aux_params.h>
12*91f16700Schasinglulu 
13*91f16700Schasinglulu void bl_aux_params_parse(u_register_t head,
14*91f16700Schasinglulu 			 bl_aux_param_handler_t handler)
15*91f16700Schasinglulu {
16*91f16700Schasinglulu 	struct bl_aux_param_header *p;
17*91f16700Schasinglulu 
18*91f16700Schasinglulu 	for (p = (void *)head; p; p = (void *)(uintptr_t)p->next) {
19*91f16700Schasinglulu 		if (handler && handler(p))
20*91f16700Schasinglulu 			continue;
21*91f16700Schasinglulu 
22*91f16700Schasinglulu 		switch (p->type) {
23*91f16700Schasinglulu #if COREBOOT
24*91f16700Schasinglulu 		case BL_AUX_PARAM_COREBOOT_TABLE:
25*91f16700Schasinglulu 			coreboot_table_setup((void *)(uintptr_t)
26*91f16700Schasinglulu 				((struct bl_aux_param_uint64 *)p)->value);
27*91f16700Schasinglulu 			break;
28*91f16700Schasinglulu #endif
29*91f16700Schasinglulu 		default:
30*91f16700Schasinglulu 			ERROR("Ignoring unknown BL aux parameter: 0x%" PRIx64,
31*91f16700Schasinglulu 			      p->type);
32*91f16700Schasinglulu 			break;
33*91f16700Schasinglulu 		}
34*91f16700Schasinglulu 	}
35*91f16700Schasinglulu }
36