blob: 4725c159e2c7dae25a79806fd9db4cd2c3d6855b [file] [log] [blame]
Raghu Krishnamurthy7f046c12023-02-25 13:26:10 -08001/*
2 * Copyright (c) 2023, ARM Limited and Contributors. All rights reserved.
3 * SPDX-License-Identifier: BSD-3-Clause
4 */
5#ifndef EL3_SPMD_LOGICAL_SP_H
6#define EL3_SPMD_LOGICAL_SP_H
7
8#include <common/bl_common.h>
9#include <lib/cassert.h>
10#include <services/ffa_svc.h>
11
12/*******************************************************************************
13 * Structure definition, typedefs & constants for the SPMD Logical Partitions.
14 ******************************************************************************/
15
16/* Prototype for SPMD logical partition initializing function. */
17typedef int32_t (*ffa_spmd_lp_init_t)(void);
18
19/* SPMD Logical Partition Descriptor. */
20struct spmd_lp_desc {
21 ffa_spmd_lp_init_t init;
22 uint16_t sp_id;
23 uint32_t properties;
24 uint32_t uuid[4]; /* Little Endian. */
25 const char *debug_name;
26};
27
28/* Convenience macro to declare a SPMD logical partition descriptor. */
29#define DECLARE_SPMD_LOGICAL_PARTITION(_name, _init, _sp_id, _uuid, _properties) \
30 static const struct spmd_lp_desc __partition_desc_ ## _name \
31 __section(".spmd_lp_descs") __used = { \
32 .debug_name = #_name, \
33 .init = (_init), \
34 .sp_id = (_sp_id), \
35 .uuid = _uuid, \
36 .properties = (_properties), \
37 }
38
39IMPORT_SYM(uintptr_t, __SPMD_LP_DESCS_START__, SPMD_LP_DESCS_START);
40IMPORT_SYM(uintptr_t, __SPMD_LP_DESCS_END__, SPMD_LP_DESCS_END);
41
42#define SPMD_LP_DESCS_COUNT ((SPMD_LP_DESCS_END - SPMD_LP_DESCS_START) \
43 / sizeof(struct spmd_lp_desc))
44CASSERT(sizeof(struct spmd_lp_desc) == 40, assert_spmd_lp_desc_size_mismatch);
45
46/*
47 * Reserve 63 IDs for SPMD Logical Partitions. Currently, 0xFFC0 to 0xFFFE
48 * is reserved.
49 */
50#define SPMD_LP_ID_END (SPMD_DIRECT_MSG_ENDPOINT_ID - 1)
51#define SPMD_LP_ID_START (SPMD_LP_ID_END - 62)
52
53static inline bool is_spmd_lp_id(unsigned int id)
54{
55 return (id >= SPMD_LP_ID_START && id <= SPMD_LP_ID_END);
56}
57
58void spmd_logical_sp_set_spmc_initialized(void);
59void spmc_logical_sp_set_spmc_failure(void);
60
61int32_t spmd_logical_sp_init(void);
62
63#endif /* EL3_SPMD_LOGICAL_SP_H */