xref: /rk3399_ARM-atf/include/services/el3_spmc_logical_sp.h (revision 1c0612d815b2fcc83f6d803e6da566d9cc7d379e)
17affa25cSMarc Bonnici /*
27affa25cSMarc Bonnici  * Copyright (c) 2022, ARM Limited and Contributors. All rights reserved.
37affa25cSMarc Bonnici  *
47affa25cSMarc Bonnici  * SPDX-License-Identifier: BSD-3-Clause
57affa25cSMarc Bonnici  */
67affa25cSMarc Bonnici #ifndef EL3_SP_H
77affa25cSMarc Bonnici #define EL3_SP_H
87affa25cSMarc Bonnici 
97affa25cSMarc Bonnici #include <common/bl_common.h>
107affa25cSMarc Bonnici #include <lib/cassert.h>
117affa25cSMarc Bonnici 
127affa25cSMarc Bonnici /*******************************************************************************
137affa25cSMarc Bonnici  * Structure definition, typedefs & constants for the Logical SPs.
147affa25cSMarc Bonnici  ******************************************************************************/
157affa25cSMarc Bonnici 
167affa25cSMarc Bonnici typedef uint64_t (*direct_msg_handler)(uint32_t smc_fid, bool secure_origin,
177affa25cSMarc Bonnici 				       uint64_t x1, uint64_t x2, uint64_t x3,
187affa25cSMarc Bonnici 				       uint64_t x4, void *cookie, void *handle,
197affa25cSMarc Bonnici 				       uint64_t flags);
207affa25cSMarc Bonnici 
217affa25cSMarc Bonnici /* Prototype for logical partition initializing function. */
227affa25cSMarc Bonnici typedef int32_t (*ffa_partition_init_t)(void);
237affa25cSMarc Bonnici 
247affa25cSMarc Bonnici /* Logical Partition Descriptor. */
257affa25cSMarc Bonnici struct el3_lp_desc {
267affa25cSMarc Bonnici 	ffa_partition_init_t init;
277affa25cSMarc Bonnici 	uint16_t sp_id;
287affa25cSMarc Bonnici 	uint32_t properties;
297affa25cSMarc Bonnici 	uint32_t uuid[4];  /* Little Endian. */
307affa25cSMarc Bonnici 	direct_msg_handler direct_req;
317affa25cSMarc Bonnici 	const char *debug_name;
327affa25cSMarc Bonnici };
337affa25cSMarc Bonnici 
347affa25cSMarc Bonnici /* Convenience macro to declare a logical partition descriptor. */
357affa25cSMarc Bonnici #define DECLARE_LOGICAL_PARTITION(_name, _init, _sp_id, _uuid, _properties, \
367affa25cSMarc Bonnici 				  _direct_req)				    \
377affa25cSMarc Bonnici 	static const struct el3_lp_desc __partition_desc_ ## _name	    \
38da04341eSChris Kay 		__section(".el3_lp_descs") __used = {			    \
397affa25cSMarc Bonnici 			.debug_name = #_name,				    \
407affa25cSMarc Bonnici 			.init = (_init),				    \
417affa25cSMarc Bonnici 			.sp_id = (_sp_id),				    \
427affa25cSMarc Bonnici 			.uuid = _uuid,					    \
437affa25cSMarc Bonnici 			.properties = (_properties),			    \
447affa25cSMarc Bonnici 			.direct_req = (_direct_req),			    \
457affa25cSMarc Bonnici 		}
467affa25cSMarc Bonnici 
477affa25cSMarc Bonnici 
487affa25cSMarc Bonnici /*******************************************************************************
497affa25cSMarc Bonnici  * Function & variable prototypes.
507affa25cSMarc Bonnici  ******************************************************************************/
517affa25cSMarc Bonnici int el3_sp_desc_validate(void);
52*01c1b3e1SRaghu Krishnamurthy 
537affa25cSMarc Bonnici IMPORT_SYM(uintptr_t, __EL3_LP_DESCS_START__,	EL3_LP_DESCS_START);
547affa25cSMarc Bonnici IMPORT_SYM(uintptr_t, __EL3_LP_DESCS_END__,	EL3_LP_DESCS_END);
557affa25cSMarc Bonnici 
567affa25cSMarc Bonnici #define EL3_LP_DESCS_COUNT ((EL3_LP_DESCS_END - EL3_LP_DESCS_START) \
577affa25cSMarc Bonnici 			  / sizeof(struct el3_lp_desc))
587affa25cSMarc Bonnici 
597affa25cSMarc Bonnici #endif /* EL3_SP_H */
60