blob: 0e0a24990cbd382798b70b694c0200d70be99a48 [file] [log] [blame]
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02001/*
2 * Copyright (c) 2018, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef __SDEI_H__
8#define __SDEI_H__
9
10#define SDEI_VERSION 0xC4000020
11#define SDEI_EVENT_REGISTER 0xC4000021
12#define SDEI_EVENT_ENABLE 0xC4000022
13#define SDEI_EVENT_DISABLE 0xC4000023
14#define SDEI_EVENT_CONTEXT 0xC4000024
15#define SDEI_EVENT_COMPLETE 0xC4000025
16#define SDEI_EVENT_COMPLETE_AND_RESUME 0xC4000026
17
18#define SDEI_EVENT_UNREGISTER 0xC4000027
19#define SDEI_EVENT_STATUS 0xC4000028
20#define SDEI_EVENT_GET_INFO 0xC4000029
21#define SDEI_EVENT_ROUTING_SET 0xC400002A
22#define SDEI_PE_MASK 0xC400002B
23#define SDEI_PE_UNMASK 0xC400002C
24
25#define SDEI_INTERRUPT_BIND 0xC400002D
26#define SDEI_INTERRUPT_RELEASE 0xC400002E
27#define SDEI_EVENT_SIGNAL 0xC400002F
28#define SDEI_FEATURES 0xC4000030
29#define SDEI_PRIVATE_RESET 0xC4000031
30#define SDEI_SHARED_RESET 0xC4000032
31
32/* For debug */
33#define SDEI_SHOW_DEBUG 0xC400003F
34
35/* SDEI_EVENT_REGISTER flags */
36#define SDEI_REGF_RM_ANY 0
37#define SDEI_REGF_RM_PE 1
38
39/* SDEI_EVENT_COMPLETE status flags */
40#define SDEI_EV_HANDLED 0
41#define SDEI_EV_FAILED 1
42
43/* sde event status values in bit position */
44#define SDEI_STATF_REGISTERED 0
45#define SDEI_STATF_ENABLED 1
46#define SDEI_STATF_RUNNING 2
47
48#define SDEI_INFOF_TYPE 0
49#define SDEI_INFOF_SIGNALABLE 1
50#define SDEI_INFOF_ROUTING_MODE 2
51#define SDEI_INFOF_ROUTING_AFF 3
52
53#define SMC_EINVAL 2
54#define SMC_EDENY 3
55#define SMC_EPEND 5
56#define SMC_ENOMEM 10
57
58#define MAKE_SDEI_VERSION(_major, _minor, _vendor) \
59 (((uint64_t)(_major)) << 48 | \
60 ((uint64_t)(_minor)) << 32 | \
61 (_vendor))
62
63#ifndef __ASSEMBLY__
64#include <stdint.h>
65
66struct sdei_intr_ctx {
67 unsigned int priority;
68 unsigned int num;
69 unsigned int enabled;
70};
71
72typedef int sdei_handler_t(int ev, uint64_t arg);
73
74void sdei_trigger_event(void);
75void sdei_handler_done(void);
76
77int64_t sdei_version(void);
78int64_t sdei_interrupt_bind(int intr, struct sdei_intr_ctx *intr_ctx);
79int64_t sdei_interrupt_release(int intr, const struct sdei_intr_ctx *intr_ctx);
80int64_t sdei_event_register(int ev, sdei_handler_t *ep,
81 uint64_t ep_arg, int flags, uint64_t mpidr);
82int64_t sdei_event_unregister(int ev);
83int64_t sdei_event_enable(int ev);
84int64_t sdei_event_disable(int ev);
85int64_t sdei_pe_mask(void);
86int64_t sdei_pe_unmask(void);
87int64_t sdei_private_reset(void);
88int64_t sdei_shared_reset(void);
89int64_t sdei_event_signal(uint64_t mpidr);
90int64_t sdei_event_status(int32_t ev);
91int64_t sdei_event_routing_set(int32_t ev, uint64_t flags);
92int64_t sdei_event_context(uint32_t param);
93int64_t sdei_event_complete(uint32_t flags);
94int64_t sdei_event_complete_and_resume(uint64_t addr);
95#endif /* __ASSEMBLY__ */
96
97#endif /* __SDEI_H__ */