blob: caee11cf7ec4c577d3833cd568d2cb478873e079 [file] [log] [blame]
Boyan Karatotev8cef63d2025-01-07 11:26:56 +00001/*
2 * Copyright (c) 2025, Arm Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef GICV5_H
8#define GICV5_H
Boyan Karatotev13b62812024-11-20 14:02:32 +00009
10#ifndef __ASSEMBLER__
11#include <stdbool.h>
12#include <stdint.h>
13#endif
14
15#include <lib/utils_def.h>
16
17/* Interrupt Domain definitions */
18#define INTDMN_S 0
19#define INTDMN_NS 1
20#define INTDMN_EL3 2
21#define INTDMN_RL 3
22
23/* Trigger modes */
24#define TM_EDGE 0
25#define TM_LEVEL 1
26
Boyan Karatotev82b228b2024-12-09 14:26:37 +000027/* Architected PPI numbers */
28#define PPI_TRBIRQ 31
29#define PPI_CNTP 30
30#define PPI_CNTPS 29
31#define PPI_CNTHV 28
32#define PPI_CNTV 27
33#define PPI_CNTHP 26
34#define PPI_GICMNT 25
35#define PPI_CTIIRQ 24
36#define PPI_PMUIRQ 23
37#define PPI_COMMIRQ 22
38#define PPI_PMBIRQ 21
39#define PPI_CNTHPS 20
40#define PPI_CNTHVS 19
41#define PPI_DB_NS 2
42#define PPI_DB_RL 1
43#define PPI_DB_S 0
44
Boyan Karatotev13b62812024-11-20 14:02:32 +000045#ifndef __ASSEMBLER__
46
Boyan Karatotev82b228b2024-12-09 14:26:37 +000047#define _PPI_FIELD_SHIFT(_REG, _ppi_id) \
48 ((_ppi_id % (ICC_PPI_##_REG##_COUNT)) * (64 / ICC_PPI_##_REG##_COUNT))
49
50#define write_icc_ppi_domainr(_var, _ppi_id, _value) \
51 do { \
52 _var |= (uint64_t)_value << _PPI_FIELD_SHIFT(DOMAINR, _ppi_id);\
53 } while (false)
54
Boyan Karatotev13b62812024-11-20 14:02:32 +000055struct gicv5_driver_data {
56};
57
58extern const struct gicv5_driver_data plat_gicv5_driver_data;
59
60void gicv5_driver_init();
61uint8_t gicv5_get_pending_interrupt_type(void);
62bool gicv5_has_interrupt_type(unsigned int type);
Boyan Karatotev82b228b2024-12-09 14:26:37 +000063void gicv5_enable_ppis();
Boyan Karatotev13b62812024-11-20 14:02:32 +000064#endif /* __ASSEMBLER__ */
Boyan Karatotev8cef63d2025-01-07 11:26:56 +000065#endif /* GICV5_H */