libmetal  v2025.04.0
sys.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved.
3  * Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 /*
9  * @file freertos/xlnx/sys.h
10  * @brief freertos Xilinx common system primitives for libmetal.
11  */
12 
13 #ifndef __METAL_FREERTOS_SYS__H__
14 #error "Include metal/sys.h instead of metal/freertos/@PROJECT_MACHINE@/sys.h"
15 #endif
16 
17 #ifndef __METAL_FREERTOS_XLNX_SYS__H__
18 #define __METAL_FREERTOS_XLNX_SYS__H__
19 
20 #include <metal/cpu.h>
21 
22 #include "xscugic.h"
23 #include "FreeRTOS.h"
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 #define metal_yield() metal_cpu_yield()
30 
31 #if defined(SDT) && defined(PLATFORM_ZYNQ)
32 #define XPAR_SCUGIC_0_DIST_BASEADDR XPAR_SCUGIC_DIST_BASEADDR
33 #endif
34 
35 #ifndef XLNX_MAXIRQS
36 #define XLNX_MAXIRQS XSCUGIC_MAX_NUM_INTR_INPUTS
37 #endif
38 
47 void metal_xlnx_irq_isr(void *arg);
48 
57 int metal_xlnx_irq_init(void);
58 
59 static inline void sys_irq_enable(unsigned int vector)
60 {
61 #ifdef PLATFORM_ZYNQ
62  XScuGic_EnableIntr(XPAR_SCUGIC_0_DIST_BASEADDR, vector);
63 #else
64  vPortEnableInterrupt(vector);
65 #endif
66 }
67 
68 static inline void sys_irq_disable(unsigned int vector)
69 {
70 #ifdef PLATFORM_ZYNQ
71  XScuGic_DisableIntr(XPAR_SCUGIC_0_DIST_BASEADDR, vector);
72 #else
73  vPortDisableInterrupt(vector);
74 #endif
75 }
76 
77 #ifdef __cplusplus
78 }
79 #endif
80 
81 #endif /* __METAL_FREERTOS_XLNX_SYS__H__ */
#define XPAR_SCUGIC_0_DIST_BASEADDR
Definition: sys_devicetree.h:23
int metal_xlnx_irq_init(void)
metal_xlnx_irq_int
Definition: irq.c:62
static void sys_irq_enable(unsigned int vector)
Definition: sys.h:59
void metal_xlnx_irq_isr(void *arg)
metal_xlnx_irq_isr
Definition: irq.c:51
static void sys_irq_disable(unsigned int vector)
Definition: sys.h:68