xref: /aosp_15_r20/external/arm-trusted-firmware/include/services/sdei_flags.h (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2020, ARM Limited and Contributors. All rights reserved.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park #ifndef SDEI_FLAGS_H
8*54fd6939SJiyong Park #define SDEI_FLAGS_H
9*54fd6939SJiyong Park 
10*54fd6939SJiyong Park #include <lib/utils_def.h>
11*54fd6939SJiyong Park 
12*54fd6939SJiyong Park /* Internal: SDEI flag bit positions */
13*54fd6939SJiyong Park #define SDEI_MAPF_DYNAMIC_SHIFT_	1U
14*54fd6939SJiyong Park #define SDEI_MAPF_BOUND_SHIFT_		2U
15*54fd6939SJiyong Park #define SDEI_MAPF_SIGNALABLE_SHIFT_	3U
16*54fd6939SJiyong Park #define SDEI_MAPF_PRIVATE_SHIFT_	4U
17*54fd6939SJiyong Park #define SDEI_MAPF_CRITICAL_SHIFT_	5U
18*54fd6939SJiyong Park #define SDEI_MAPF_EXPLICIT_SHIFT_	6U
19*54fd6939SJiyong Park 
20*54fd6939SJiyong Park /* SDEI event 0 */
21*54fd6939SJiyong Park #define SDEI_EVENT_0	0
22*54fd6939SJiyong Park 
23*54fd6939SJiyong Park /* Placeholder interrupt for dynamic mapping */
24*54fd6939SJiyong Park #define SDEI_DYN_IRQ	0U
25*54fd6939SJiyong Park 
26*54fd6939SJiyong Park /* SDEI flags */
27*54fd6939SJiyong Park 
28*54fd6939SJiyong Park /*
29*54fd6939SJiyong Park  * These flags determine whether or not an event can be associated with an
30*54fd6939SJiyong Park  * interrupt. Static events are permanently associated with an interrupt, and
31*54fd6939SJiyong Park  * can't be changed at runtime.  Association of dynamic events with interrupts
32*54fd6939SJiyong Park  * can be changed at run time using the SDEI_INTERRUPT_BIND and
33*54fd6939SJiyong Park  * SDEI_INTERRUPT_RELEASE calls.
34*54fd6939SJiyong Park  *
35*54fd6939SJiyong Park  * SDEI_MAPF_DYNAMIC only indicates run time configurability, where as
36*54fd6939SJiyong Park  * SDEI_MAPF_BOUND indicates interrupt association. For example:
37*54fd6939SJiyong Park  *
38*54fd6939SJiyong Park  *  - Calling SDEI_INTERRUPT_BIND on a dynamic event will have both
39*54fd6939SJiyong Park  *    SDEI_MAPF_DYNAMIC and SDEI_MAPF_BOUND set.
40*54fd6939SJiyong Park  *
41*54fd6939SJiyong Park  *  - Statically-bound events will always have SDEI_MAPF_BOUND set, and neither
42*54fd6939SJiyong Park  *    SDEI_INTERRUPT_BIND nor SDEI_INTERRUPT_RELEASE can be called on them.
43*54fd6939SJiyong Park  *
44*54fd6939SJiyong Park  * See also the is_map_bound() macro.
45*54fd6939SJiyong Park  */
46*54fd6939SJiyong Park #define SDEI_MAPF_DYNAMIC	BIT(SDEI_MAPF_DYNAMIC_SHIFT_)
47*54fd6939SJiyong Park #define SDEI_MAPF_BOUND		BIT(SDEI_MAPF_BOUND_SHIFT_)
48*54fd6939SJiyong Park #define SDEI_MAPF_EXPLICIT	BIT(SDEI_MAPF_EXPLICIT_SHIFT_)
49*54fd6939SJiyong Park 
50*54fd6939SJiyong Park #define SDEI_MAPF_SIGNALABLE	BIT(SDEI_MAPF_SIGNALABLE_SHIFT_)
51*54fd6939SJiyong Park #define SDEI_MAPF_PRIVATE	BIT(SDEI_MAPF_PRIVATE_SHIFT_)
52*54fd6939SJiyong Park 
53*54fd6939SJiyong Park #define SDEI_MAPF_NORMAL	0
54*54fd6939SJiyong Park #define SDEI_MAPF_CRITICAL	BIT(SDEI_MAPF_CRITICAL_SHIFT_)
55*54fd6939SJiyong Park 
56*54fd6939SJiyong Park #endif /* SDEI_FLAGS_H */
57