WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
gic_common.h
浏览该文件的文档.
1/* ----------------------------------------------------------------------------
2 * Copyright (c) Huawei Technologies Co., Ltd. 2018-2019. All rights reserved.
3 * Description: General interrupt controller version 3.0 (GICv3).
4 * Author: Huawei LiteOS Team
5 * Create: 2018-09-15
6 * Redistribution and use in source and binary forms, with or without modification,
7 * are permitted provided that the following conditions are met:
8 * 1. Redistributions of source code must retain the above copyright notice, this list of
9 * conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
11 * of conditions and the following disclaimer in the documentation and/or other materials
12 * provided with the distribution.
13 * 3. Neither the name of the copyright holder nor the names of its contributors may be used
14 * to endorse or promote products derived from this software without specific prior written
15 * permission.
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
18 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
20 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 * --------------------------------------------------------------------------- */
28
29#ifndef _GIC_COMMON_H
30#define _GIC_COMMON_H
31
32#include "stdint.h"
33#include "asm/platform.h"
34#include "los_config.h"
35
36#ifdef __cplusplus
37extern "C" {
38#endif /* __cplusplus */
39
40/* gic arch revision */
41enum {
42 GICV1 = 1,
45 GICV4
46};
47
48#ifndef TARGET_CPU_MASK
49#define TARGET_CPU_MASK 0x01010101 /* if not define TARGET_CPU_MASK,set external interrupts to CPU 0 */
50#endif
51
52#define GIC_REV_MASK 0xF0
53#define GIC_REV_OFFSET 0x4
54
55#define GICD_CTLR (GICD_OFFSET + 0x000) /* Distributor Control Register */
56#define GICD_TYPER (GICD_OFFSET + 0x004) /* Interrupt Controller Type Register */
57#define GICD_IIDR (GICD_OFFSET + 0x008) /* Distributor Implementer Identification Register */
58#define GICD_IGROUPR(n) (GICD_OFFSET + 0x080 + (n) * 4) /* Interrupt Group Registers */
59#define GICD_ISENABLER(n) (GICD_OFFSET + 0x100 + (n) * 4) /* Interrupt Set-Enable Registers */
60#define GICD_ICENABLER(n) (GICD_OFFSET + 0x180 + (n) * 4) /* Interrupt Clear-Enable Registers */
61#define GICD_ISPENDR(n) (GICD_OFFSET + 0x200 + (n) * 4) /* Interrupt Set-Pending Registers */
62#define GICD_ICPENDR(n) (GICD_OFFSET + 0x280 + (n) * 4) /* Interrupt Clear-Pending Registers */
63#define GICD_ISACTIVER(n) (GICD_OFFSET + 0x300 + (n) * 4) /* GICv2 Interrupt Set-Active Registers */
64#define GICD_ICACTIVER(n) (GICD_OFFSET + 0x380 + (n) * 4) /* Interrupt Clear-Active Registers */
65#define GICD_IPRIORITYR(n) (GICD_OFFSET + 0x400 + (n) * 4) /* Interrupt Priority Registers */
66#define GICD_ITARGETSR(n) (GICD_OFFSET + 0x800 + (n) * 4) /* Interrupt Processor Targets Registers */
67#define GICD_ICFGR(n) (GICD_OFFSET + 0xc00 + (n) * 4) /* Interrupt Configuration Registers */
68#define GICD_SGIR (GICD_OFFSET + 0xf00) /* Software Generated Interrupt Register */
69#define GICD_CPENDSGIR(n) (GICD_OFFSET + 0xf10 + (n) * 4) /* SGI Clear-Pending Registers; */
70#define GICD_SPENDSGIR(n) (GICD_OFFSET + 0xf20 + (n) * 4) /* SGI Set-Pending Registers; */
71#define GICD_PIDR2V2 (GICD_OFFSET + 0xfe8)
72#define GICD_PIDR2V3 (GICD_OFFSET + 0xffe8)
73
74#ifdef LOSCFG_ARM_GIC_V3
75#define GICD_IGRPMODR(n) (GICD_OFFSET + 0x0d00 + (n) * 4) /* Interrupt Group Mode Registers */
76#define GICD_IROUTER(n) (GICD_OFFSET + 0x6000 + (n) * 8) /* Interrupt Rounter Registers */
77#endif
78
79#define GIC_REG_8(reg) (*(volatile UINT8 *)((UINTPTR)(GIC_BASE_ADDR + (reg))))
80#define GIC_REG_32(reg) (*(volatile UINT32 *)((UINTPTR)(GIC_BASE_ADDR + (reg))))
81#define GIC_REG_64(reg) (*(volatile UINT64 *)((UINTPTR)(GIC_BASE_ADDR + (reg))))
82
83#define GICR_INT_DEF_PRI 0xa0U
84#define GICD_INT_DEF_PRI 0xa0U
85#define GICD_INT_DEF_PRI_X4 (((UINT32)GICD_INT_DEF_PRI << 24) | \
86 ((UINT32)GICD_INT_DEF_PRI << 16) | \
87 ((UINT32)GICD_INT_DEF_PRI << 8) | \
88 (UINT32)GICD_INT_DEF_PRI)
89
90#define GIC_MIN_SPI_NUM 32
91
92#define INT_COUNTS_4_PER_REG 4U /* Each register can be configured with 4 interrupts. */
93#define INT_COUNTS_16_PER_REG 16U /* Each register can be configured with 16 interrupts. */
94#define INT_COUNTS_32_PER_REG 32U /* Each register can be configured with 32 interrupts. */
95
96#define BIT_SHIFT_2 2
97#define BIT_SHIFT_4 4
98#define BIT_SHIFT_5 5
99
100#ifdef __cplusplus
101}
102#endif /* __cplusplus */
103
104#endif /* _GIC_COMMON_H */
@ GICV3
Definition gic_common.h:44
@ GICV1
Definition gic_common.h:42
@ GICV4
Definition gic_common.h:45
@ GICV2
Definition gic_common.h:43