diff options
| author | Clément Léger <[email protected]> | 2025-01-10 14:15:55 +0100 |
|---|---|---|
| committer | Anup Patel <[email protected]> | 2025-01-30 10:42:27 +0530 |
| commit | ecab71e19a951a0e42dbbb81b0e4d43840551f7e (patch) | |
| tree | 387771ad74d85b56d63fc86365767878120c78b3 /lib | |
| parent | 93f7d819fdeb3c5e82d5d761968c325f1407d517 (diff) | |
lib: sbi: sse: return SBI_ENOTSUPP for unsupported events
If a standard event was not found in the list of events that are handled
by harts but belongs to the standard event list defined by the
specification, return SBI_ENOTSUPP. Without that, we can not
distinguish a non implemented standard event from a non valid one.
Signed-off-by: Clément Léger <[email protected]>
Reviewed-by: Samuel Holland <[email protected]>
Reviewed-by: Atish Patra <[email protected]>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sbi/sbi_sse.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/sbi/sbi_sse.c b/lib/sbi/sbi_sse.c index 005eb56e..9f22375f 100644 --- a/lib/sbi/sbi_sse.c +++ b/lib/sbi/sbi_sse.c @@ -190,6 +190,31 @@ struct sse_event_info local_software_event = { static SBI_SLIST_HEAD(supported_events, sse_event_info) = SBI_SLIST_HEAD_INIT(&local_software_event); +/* + * This array is used to distinguish between standard event and platform + * events in order to return SBI_ERR_NOT_SUPPORTED for them. + */ +static const uint32_t standard_events[] = { + SBI_SSE_EVENT_LOCAL_RAS, + SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP, + SBI_SSE_EVENT_GLOBAL_RAS, + SBI_SSE_EVENT_LOCAL_PMU, + SBI_SSE_EVENT_LOCAL_SOFTWARE, + SBI_SSE_EVENT_GLOBAL_SOFTWARE, +}; + +static bool sse_is_standard_event(uint32_t event_id) +{ + int i; + + for (i = 0; i < array_size(standard_events); i++) { + if (event_id == standard_events[i]) + return true; + } + + return false; +} + static struct sse_event_info *sse_event_info_get(uint32_t event_id) { struct sse_event_info *info; @@ -295,6 +320,11 @@ static int sse_event_get(uint32_t event_id, struct sbi_sse_event **eret) } } + /* Check if the event is a standard one but not supported */ + if (sse_is_standard_event(event_id)) + return SBI_ENOTSUPP; + + /* If not supported nor a standard event, it is invalid */ return SBI_EINVAL; } |
