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