root/sys/arch/arm/cortex/gic_reg.h
/*      $NetBSD: gic_reg.h,v 1.12 2020/11/22 19:53:47 jmcneill Exp $    */
/*-
 * Copyright (c) 2012 The NetBSD Foundation, Inc.
 * All rights reserved.
 *
 * This code is derived from software contributed to The NetBSD Foundation
 * by Matt Thomas of 3am Software Foundry.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

/*
 * ARM Generic Interrupt Controller Register Definitions
 *
 * These registers are accessible through a dedicated internal bus.
 * All accesses must be done in a little-endian manner.
 * The base address of the pages containing these registers is defined
 * by the pins PERIPHBASE[31:13] which can be obtained by doing a
 *      MRC p15,4,<Rd>,c15,c0,0; Read Configuration Base Address Register
 *      (except cortex-A9 uniprocessor)
 *
 * GIC is used by all Cortex-A cores except the A8.
 */

#ifndef _ARM_CORTEX_GICREG_H_
#define _ARM_CORTEX_GICREG_H_

#define GICC_BASE       0x0100  // Offset in PeriphBase

#define GICC_CTRL       0x0000  // CPU Interface Control Register
#define GICC_PMR        0x0004  // Interrupt Priority Mask Register
#define GICC_BPR        0x0008  // Binary Point Register
#define GICC_IAR        0x000C  // Interrupt Acknowledge Register
#define GICC_EOIR       0x0010  // End Of Interrupt Register (WO)
#define GICC_RPR        0x0014  // Running Priority Register
#define GICC_HPPIR      0x0018  // Highest Priority Pending Interrupt Registers
#define GICC_ABPR       0x001C  // Aliased Binary Point Register
#define GICC_AIAR       0x0020  // Aliased Interrupt Acknowledge Register
#define GICC_AEOIR      0x0024  // Aliased End Of Interrupt Register
#define GICC_AHPPIR     0x0028  // Aliased Highest Priority Pending Interrupt Registers
#define GICC_APR0       0x00D0  // Active Priorites Register 0
#define GICC_APR1       0x00D4  // Active Priorites Register 1
#define GICC_APR2       0x00D8  // Active Priorites Register 2
#define GICC_APR3       0x00DC  // Active Priorites Register 3
#define GICC_NSAPR0     0x00E0  // Non-secure Active Priorities Register 0
#define GICC_NSAPR1     0x00E4  // Non-secure Active Priorities Register 1
#define GICC_NSAPR2     0x00E8  // Non-secure Active Priorities Register 2
#define GICC_NSAPR3     0x00EC  // Non-secure Active Priorities Register 3
#define GICC_IIDR       0x00FC  // CPU Interface Identification Register
#define GICC_DIR        0x1000  // Deactivate Interrupt Register


#define GICC_CTRL_V1_Enable             __BIT(0) // GICv1

#define GICC_CTRL_V2_EnableGrp0         __BIT(0) // GICv2 !Secure | Secure
#define GICC_CTRL_V2_EnableGrp1         __BIT(1) // GICv2 !Secure | Secure

#define GICC_CTRL_V2S_EOImodeNS         __BIT(9) // GICv2 Secure
#define GICC_CTRL_V2S_IRQBypDisGrp1     __BIT(6) // GICv2 Secure
#define GICC_CTRL_V2S_FIQBypDisGrp1     __BIT(4) // GICv2 Secure

#define GICC_CTRL_V2NS_EOImodeNS        __BIT(10) // GICv2 !Secure
#define GICC_CTRL_V2NS_EOImodeS         __BIT(9) // GICv2 !Secure
#define GICC_CTRL_V2NS_IRQBypDisGrp1    __BIT(8) // GICv2 !Secure
#define GICC_CTRL_V2NS_FIQBypDisGrp1    __BIT(7) // GICv2 !Secure
#define GICC_CTRL_V2NS_IRQBypDisGrp0    __BIT(6) // GICv2 !Secure
#define GICC_CTRL_V2NS_FIQBypDisGrp0    __BIT(5) // GICv2 !Secure
#define GICC_CTRL_V2NS_CPBR             __BIT(4) // GICv2 !Secure
#define GICC_CTRL_V2NS_FIQEn            __BIT(3) // GICv2 !Secure
#define GICC_CTRL_V2NS_AckCtl           __BIT(2) // GICv2 !Secure

#define GICC_PMR_PRIORITY               __BITS(7,0)
#define GICC_PMR_PRIORITIES             256
#define GICC_PMR_NS_PRIORITIES          128
#define GICC_PMR_NONSECURE              0x80
#define GICC_PMR_8_LEVELS               0x1f
#define GICC_PMR_16_LEVELS              0x0f
#define GICC_PMR_32_LEVELS              0x07
#define GICC_PMR_64_LEVELS              0x03
#define GICC_PMR_128_LEVELS             0x01

#define GICC_IAR_CPUID                  __BITS(12,10)
#define GICC_IAR_IRQ                    __BITS(9,0)
#define GICC_IAR_IRQ_SPURIOUS           1023
#define GICC_IAR_IRQ_SSPURIOUS          1022    // Secure

#define GICC_EOIR_CPUID                 __BITS(12,10)
#define GICC_EOIR_InterruptID           __BITS(9,0)

#define GICC_HPPIR_CPUID                __BITS(12,10)
#define GICC_HPPIR_PendIntID            __BITS(9,0)

#define GICC_IIDR_ProductID             __BITS(31,20)
#define GICC_IIDR_ArchVersion           __BITS(19,16)
#define GICC_IIDR_Revision              __BITS(15,12)
#define GICC_IIDR_Implementer           __BITS(11,0)

#define GICC_DIR_CPUID                  __BITS(12,10)
#define GICC_DIR_InterruptID            __BITS(9,0)

#define GICD_BASE               0x1000 // Offset from PeriphBase

#define GICD_CTRL               0x000 // Distributor Control Register
#define GICD_TYPER              0x004 // Interrupt Controller Type Register
#define GICD_IIDR               0x008 // Distributor Implementer Identification Register
#define GICD_IGROUPRn(n)        (0x080+4*(n)) // Interrupt Group Registers
#define GICD_ISENABLERn(n)      (0x100+4*(n)) // Interrupt Set-Enable Registers
#define GICD_ICENABLERn(n)      (0x180+4*(n)) // Interrupt Clear-Enable Registers
#define GICD_ISPENDRn(n)        (0x200+4*(n)) // Interrupt Set-Pending Registers
#define GICD_ICPENDRn(n)        (0x280+4*(n)) // Interrupt Clear-Pending Registers
#define GICD_ISACTIVERn(n)      (0x300+4*(n)) // GICv2 Interrupt Set-Active Registers
#define GICD_ICACTIVERn(n)      (0x380+4*(n)) // Interrupt Clear-Active Registers
#define GICD_IPRIORITYRn(n)     (0x400+4*(n)) // Interrupt Priority Registers

#define GICD_ITARGETSRn(n)      (0x800+4*(n)) // Interrupt Processor Targets Registers
#define GICD_ICFGRn(n)          (0xC00+4*(n)) // Interrupt Configuration Registers
#define GICD_IGRPMODRn(n)       (0xD00+4*(n)) // Interrupt Group Modifier Registers
#define GICD_NSACRn(n)          (0xE00+4*(n)) // Non-secure Access Control Registers, optional
#define GICD_SGIR               0xF00 // Software Generated Interrupt Register
#define GICD_CPENDSGIR(n)       (0xF10+4*(n)) // SGI Clear-Pending Registers
#define GICD_SPENDSGIR(n)       (0xF20+4*(n)) // SGI Set-Pending Registers
#define GICD_IROUTER(n)         (0x6000+8*(n)) // Interrupt Routing Registers

#define GICD_CTRL_RWP                   __BIT(31)       // GICv3
#define GICD_CTRL_E1NWF                 __BIT(7)        // GICv3
#define GICD_CTRL_DS                    __BIT(6)        // GICv3
#define GICD_CTRL_ARE_NS                __BIT(4)        // GICv3
#define GICD_CTRL_EnableGrp1S           __BIT(2)        // Secure only
#define GICD_CTRL_EnableGrp1A           __BIT(1)        // GICv3
#define GICD_CTRL_Enable                __BIT(0)

#define GICD_TYPER_No1N                 __BIT(25)       // GICv3
#define GICD_TYPER_A3V                  __BIT(24)       // GICv3
#define GICD_TYPER_IDbits               __BITS(23,19)   // GICv3
#define GICD_TYPER_DVIS                 __BIT(18)       // GICv3
#define GICD_TYPER_LPIS                 __BIT(17)       // GICv3
#define GICD_TYPER_MBIS                 __BIT(16)       // GICv3
#define GICD_TYPER_LSPI                 __BITS(15,11)
#define GICD_TYPER_SecurityExtn         __BIT(10)
#define GICD_TYPER_CPUNumber            __BITS(7,5)
#define GICD_TYPER_ITLinesNumber        __BITS(4,0)     // 32*(N+1)
#define GICD_TYPER_LINES(n)             MIN(32*(__SHIFTOUT((n), GICD_TYPER_ITLinesNumber) + 1), 1020)

#define GICD_IIDR_ProductID             __BITS(31,24)
#define GICD_IIDR_Variant               __BITS(19,16)
#define GICD_IIDR_Revision              __BITS(15,12)
#define GICD_IIDR_Implementer           __BITS(11,0)

/*
 * This register is byte-accessible but always little-endian.
 */
#define GICD_IPRIORITYR_Byte3           __BITS(31,24)
#define GICD_IPRIORITYR_Byte1           __BITS(23,16)
#define GICD_IPRIORITYR_Byte2           __BITS(15,8)
#define GICD_IPRIORITYR_Byte0           __BITS(7,0)

/*
 * This register is byte-accessible but always little-endian.
 */
#define GICD_ITARGETSR_Byte3            __BITS(31,24)
#define GICD_ITARGETSR_Byte1            __BITS(23,16)
#define GICD_ITARGETSR_Byte2            __BITS(15,8)
#define GICD_ITARGETSR_Byte0            __BITS(7,0)

#define GICD_SGIR_TargetListFilter      __BITS(25,24)
#define GICD_SGIR_TargetListFilter_List __SHIFTIN(0, GICD_SGIR_TargetListFilter)
#define GICD_SGIR_TargetListFilter_NotMe __SHIFTIN(1, GICD_SGIR_TargetListFilter)
#define GICD_SGIR_TargetListFilter_Me   __SHIFTIN(2, GICD_SGIR_TargetListFilter)
#define GICD_SGIR_TargetList            __BITS(23,16)
#define GICD_SGIR_NSATT                 __BIT(15)
#define GICD_SGIR_SGIINTID              __BITS(3,0)

#define GICD_IROUTER_Aff3               __BITS(39,32)
#define GICD_IROUTER_Interrupt_Routing_mode __BIT(31)
#define GICD_IROUTER_Aff2               __BITS(23,16)
#define GICD_IROUTER_Aff1               __BITS(15,8)
#define GICD_IROUTER_Aff0               __BITS(7,0)

#define GICR_CTLR               0x0000  // Redistributor Control Register
#define GICR_IIDR               0x0004  // Implementor Identification Register
#define GICR_TYPER              0x0008  // Redistributor Type Register
#define GICR_STATUSR            0x0010  // Error Reporting Status Register, optional
#define GICR_WAKER              0x0014  // Redistributor Wake Register
#define GICR_SETLPIR            0x0040  // Set LPI Pending Register
#define GICR_CLRLPIR            0x0048  // Clear LPI Pending Register
#define GICR_PROPBASER          0x0070  // Redistributor Properties Base Address Register
#define GICR_PENDBASER          0x0078  // Redistributor LPI Pending Table Base Address Register
#define GICR_INVLPIR            0x00A0  // Redistributor Invalidate LPI Register
#define GICR_INVALLR            0x00B0  // Redistributor Invalidate All Register
#define GICR_SYNCR              0x00C0  // Redistributor Synchronize Register

#define GICR_IGROUPR0           0x10080 // Interrupt Group Register 0
#define GICR_ISENABLER0         0x10100 // Interrupt Set-Enable Register 0
#define GICR_ICENABLER0         0x10180 // Interrupt Clear-Enable Register 0
#define GICR_ISPENDR0           0x10200 // Interrupt Set-Pend Register 0
#define GICR_ICPENDR0           0x10280 // Interrupt Clear-Pend Register 0
#define GICR_ISACTIVER0         0x10300 // Interrupt Set-Active Register 0
#define GICR_ICACTIVER0         0x10380 // Interrupt Clear-Active Register 0
#define GICR_IPRIORITYRn(n)     (0x10400+4*(n)) // Interrupt Priority Registers
#define GICR_ICFGRn(n)          (0x10C00+4*(n)) // SGI (0) / PPI (1) Configuration Register
#define GICR_IGRPMODR0          0x10D00 // Interrupt Group Modifier Register 0
#define GICR_NSACR              0x10E00 // Non-Secure Access Control Register

#define GICR_CTLR_UWP                   __BIT(31)
#define GICR_CTLR_DPG1S                 __BIT(26)
#define GICR_CTLR_DPG1NS                __BIT(25)
#define GICR_CTLR_DPG0                  __BIT(24)
#define GICR_CTLR_RWP                   __BIT(3)
#define GICR_CTLR_Enable_LPIs           __BIT(0)

#define GICR_TYPER_Affinity_Value       __BITS(63,32)
#define GICR_TYPER_Affinity_Value_Aff3  __BITS(63,56)
#define GICR_TYPER_Affinity_Value_Aff2  __BITS(55,48)
#define GICR_TYPER_Affinity_Value_Aff1  __BITS(47,40)
#define GICR_TYPER_Affinity_Value_Aff0  __BITS(39,32)
#define GICR_TYPER_CommonLPIAff         __BITS(25,24)
#define GICR_TYPER_Processor_Number     __BITS(23,8)
#define GICR_TYPER_DPGS                 __BIT(5)
#define GICR_TYPER_Last                 __BIT(4)
#define GICR_TYPER_DirectLPI            __BIT(3)
#define GICR_TYPER_VLPIS                __BIT(1)
#define GICR_TYPER_PLPIS                __BIT(0)

#define GICR_WAKER_ChildrenAsleep       __BIT(2)
#define GICR_WAKER_ProcessorSleep       __BIT(1)

#define GICR_PROPBASER_OuterCache       __BITS(58,56)
#define GICR_PROPBASER_Physical_Address __BITS(51,12)
#define GICR_PROPBASER_Shareability     __BITS(11,10)
#define GICR_PROPBASER_InnerCache       __BITS(9,7)
#define GICR_PROPBASER_IDbits           __BITS(4,0)

#define GICR_PENDBASER_PTZ              __BIT(62)
#define GICR_PENDBASER_OuterCache       __BITS(58,56)
#define GICR_PENDBASER_Physical_Address __BITS(51,16)
#define GICR_PENDBASER_Shareability     __BITS(11,10)
#define GICR_PENDBASER_InnerCache       __BITS(9,7)

#define GICR_Shareability_NS            0       // Non-shareable
#define GICR_Shareability_IS            1       // Inner Shareable
#define GICR_Shareability_OS            2       // Outer Shareable

#define GICR_Cache_DEVICE_nGnRnE        0       // Device-nGnRnE
#define GICR_Cache_NORMAL_NC            1       // Non-cacheable
#define GICR_Cache_NORMAL_RA_WT         2       // Cacheable Read-allocate, Write-through
#define GICR_Cache_NORMAL_RA_WB         3       // Cacheable Read-allocate, Write-back
#define GICR_Cache_NORMAL_WA_WT         4       // Cacheable Write-allocate, Write-through
#define GICR_Cache_NORMAL_WA_WB         5       // Cacheable Write-allocate, Write-back
#define GICR_Cache_NORMAL_RA_WA_WT      6       // Cacheable Read-allocate, Write-allocate, Write-through
#define GICR_Cache_NORMAL_RA_WA_WB      7       // Cacheable Read-allocate, Write-allocate, Write-back

/*
 * GICv3 Locality-specific Peripheral Interrupts
 */

#define GIC_LPI_BASE                    0x2000  // Base LPI INTID

#define GIC_LPICONF_Priority            __BITS(7,2)
#define GIC_LPICONF_Res1                __BIT(1)
#define GIC_LPICONF_Enable              __BIT(0)

/*
 * GICv1 names
 */
#define GICv1_ICDDCR            GICD_CTLR
#define GICv1_ICDICTR           GICD_TYPER
#define GICv1_ICDIIDR           GICD_IIDR
#define GICv1_ICDISRn(n)        GICD_IGROUPRn(n)
#define GICv1_ICDABRn(n)        GICD_ISACTIVERn(n)
#define GICv1_ICDISERn(n)       GICD_ISENABLERn(n)
#define GICv1_ICDICERn(n)       GICD_ICENABLERn(n)
#define GICv1_ICDISPRn(n)       GICD_ISPENDRn(n)
#define GICv1_ICDICPRn(n)       GICD_ICPENDRn(n)
#define GICv1_ICDIPRn(n)        GICD_IPRIORITYRn(n)
#define GICv1_ICDIPTRn(n)       GICD_ITARGETSRn(n)
#define GICv1_ICDICRn(n)        GICD_ICFGRn(n)
#define GICv1_ICDSGIR           GICD_SGIR

#define GICv1_ICCICR            GICC_CTLR
#define GICv1_ICCPMR            GICC_PMR
#define GICv1_ICCBPR            GICC_BPR
#define GICv1_ICCIAR            GICC_IAR
#define GICv1_ICCEOIR           GICC_EOIR
#define GICv1_ICCRPR            GICC_RPR
#define GICv1_ICCABPR           GICC_ABPR
#define GICv1_ICCHPIR           GICC_HPPIR
#define GICv1_ICCIIDR           GICC_IIDR

/*
 * GICv2m (MSI)
 */

#define GIC_MSI_TYPER           0x0008
#define GIC_MSI_SETSPI          0x0040
#define GIC_MSI_PIDR2           0x0fe8
#define GIC_MSI_IIDR            0x0ffc

#define GIC_MSI_TYPER_BASE      __BITS(25,16)   // Starting SPI of MSIs
#define GIC_MSI_TYPER_NUMBER    __BITS(9,0)     // Count of MSIs

/*
 * GICv3 Interrupt Translation Service (ITS)
 */

#define GITS_CTLR               0x00000         // ITS control register
#define GITS_IIDR               0x00004         // ITS Identification register
#define GITS_TYPER              0x00008         // ITS Type register
#define GITS_CBASER             0x00080         // ITS Command Queue Descriptor
#define GITS_CWRITER            0x00088         // ITS Write register
#define GITS_CREADR             0x00090         // ITS Read register
#define GITS_BASERn(n)          (0x00100+8*(n)) // ITS Translation Table Descriptors
#define GITS_PIDR2              0x0FFE8         // ITS Peripheral ID2 Register
#define GITS_TRANSLATER         0x10040         // ITS Translation register

#define GITS_CTLR_Quiescent             __BIT(31)
#define GITS_CTLR_ITS_Number            __BITS(7,4)
#define GITS_CTLR_ImDe                  __BIT(1)
#define GITS_CTLR_Enabled               __BIT(0)

#define GITS_IIDR_ProductID             __BITS(31,24)
#define GITS_IIDR_Variant               __BITS(19,16)
#define GITS_IIDR_Revision              __BITS(15,12)
#define GITS_IIDR_Implementor           __BITS(11,0)

#define GITS_TYPER_VMOVP                __BIT(37)
#define GITS_TYPER_CIL                  __BIT(36)
#define GITS_TYPER_CIDbits              __BITS(35,32)
#define GITS_TYPER_HCC                  __BITS(31,24)
#define GITS_TYPER_PTA                  __BIT(19)
#define GITS_TYPER_SEIS                 __BIT(18)
#define GITS_TYPER_Devbits              __BITS(17,13)
#define GITS_TYPER_ID_bits              __BITS(12,8)
#define GITS_TYPER_ITT_entry_size       __BITS(7,4)
#define GITS_TYPER_CCT                  __BIT(2)
#define GITS_TYPER_Virtual              __BIT(1)
#define GITS_TYPER_Physical             __BIT(0)

#define GITS_CBASER_Valid               __BIT(63)
#define GITS_CBASER_InnerCache          __BITS(61,59)
#define GITS_CBASER_OuterCache          __BITS(55,53)
#define GITS_CBASER_Physical_Address    __BITS(51,12)
#define GITS_CBASER_Shareability        __BITS(11,10)
#define GITS_CBASER_Size                __BITS(7,0)

#define GITS_CWRITER_Offset             __BITS(19,5)
#define GITS_CWRITER_Retry              __BIT(0)

#define GITS_CREADR_Offset              __BITS(19,5)
#define GITS_CREADR_Stalled             __BIT(0)

#define GITS_BASER_Valid                __BIT(63)
#define GITS_BASER_Indirect             __BIT(62)
#define GITS_BASER_InnerCache           __BITS(61,59)
#define GITS_BASER_Type                 __BITS(58,56)
#define GITS_BASER_OuterCache           __BITS(55,53)
#define GITS_BASER_Entry_Size           __BITS(52,48)
#define GITS_BASER_Physical_Address     __BITS(47,12)
#define GITS_BASER_Shareability         __BITS(11,10)
#define GITS_BASER_Page_Size            __BITS(9,8)
#define GITS_BASER_Size                 __BITS(7,0)

#define GITS_Shareability_NS            0       // Non-shareable
#define GITS_Shareability_IS            1       // Inner Shareable
#define GITS_Shareability_OS            2       // Outer Shareable

#define GITS_Cache_DEVICE_nGnRnE        0       // Device-nGnRnE
#define GITS_Cache_NORMAL_NC            1       // Non-cacheable
#define GITS_Cache_NORMAL_RA_WT         2       // Cacheable Read-allocate, Write-through
#define GITS_Cache_NORMAL_RA_WB         3       // Cacheable Read-allocate, Write-back
#define GITS_Cache_NORMAL_WA_WT         4       // Cacheable Write-allocate, Write-through
#define GITS_Cache_NORMAL_WA_WB         5       // Cacheable Write-allocate, Write-back
#define GITS_Cache_NORMAL_RA_WA_WT      6       // Cacheable Read-allocate, Write-allocate, Write-through
#define GITS_Cache_NORMAL_RA_WA_WB      7       // Cacheable Read-allocate, Write-allocate, Write-back

#define GITS_Type_Unimplemented         0       // Unimplemented
#define GITS_Type_Devices               1       // Devices table
#define GITS_Type_vPEs                  2       // vPEs table
#define GITS_Type_InterruptCollections  4       // Interrupt collections table

#define GITS_Page_Size_4KB              0
#define GITS_Page_Size_16KB             1
#define GITS_Page_Size_64KB             2

struct gicv3_its_command {
        uint64_t        dw[4];
};

#define GITS_CMD_MOVI                   0x01
#define GITS_CMD_INT                    0x03
#define GITS_CMD_CLEAR                  0x04
#define GITS_CMD_SYNC                   0x05
#define GITS_CMD_MAPD                   0x08
#define GITS_CMD_MAPC                   0x09
#define GITS_CMD_MAPTI                  0x0A
#define GITS_CMD_MAPI                   0x0B
#define GITS_CMD_INV                    0x0C
#define GITS_CMD_INVALL                 0x0D
#define GITS_CMD_MOVALL                 0x0E
#define GITS_CMD_DISCARD                0x0F
#define GITS_CMD_VMOVI                  0x21
#define GITS_CMD_VMOVP                  0x22
#define GITS_CMD_VSYNC                  0x25
#define GITS_CMD_VMAPP                  0x29
#define GITS_CMD_VMAPTI                 0x2A
#define GITS_CMD_VMAPI                  0x2B
#define GITS_CMD_VINVALL                0x2D

#endif /* !_ARM_CORTEX_GICREG_H_ */