gic_v3_cpu_interface.hh revision 13760
113531Sjairo.balart@metempsy.com/*
213531Sjairo.balart@metempsy.com * Copyright (c) 2018 Metempsy Technology Consulting
313531Sjairo.balart@metempsy.com * All rights reserved.
413531Sjairo.balart@metempsy.com *
513531Sjairo.balart@metempsy.com * Redistribution and use in source and binary forms, with or without
613531Sjairo.balart@metempsy.com * modification, are permitted provided that the following conditions are
713531Sjairo.balart@metempsy.com * met: redistributions of source code must retain the above copyright
813531Sjairo.balart@metempsy.com * notice, this list of conditions and the following disclaimer;
913531Sjairo.balart@metempsy.com * redistributions in binary form must reproduce the above copyright
1013531Sjairo.balart@metempsy.com * notice, this list of conditions and the following disclaimer in the
1113531Sjairo.balart@metempsy.com * documentation and/or other materials provided with the distribution;
1213531Sjairo.balart@metempsy.com * neither the name of the copyright holders nor the names of its
1313531Sjairo.balart@metempsy.com * contributors may be used to endorse or promote products derived from
1413531Sjairo.balart@metempsy.com * this software without specific prior written permission.
1513531Sjairo.balart@metempsy.com *
1613531Sjairo.balart@metempsy.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1713531Sjairo.balart@metempsy.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1813531Sjairo.balart@metempsy.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1913531Sjairo.balart@metempsy.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2013531Sjairo.balart@metempsy.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2113531Sjairo.balart@metempsy.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2213531Sjairo.balart@metempsy.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2313531Sjairo.balart@metempsy.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2413531Sjairo.balart@metempsy.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2513531Sjairo.balart@metempsy.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2613531Sjairo.balart@metempsy.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2713531Sjairo.balart@metempsy.com *
2813531Sjairo.balart@metempsy.com * Authors: Jairo Balart
2913531Sjairo.balart@metempsy.com */
3013531Sjairo.balart@metempsy.com
3113531Sjairo.balart@metempsy.com#ifndef __DEV_ARM_GICV3_CPU_INTERFACE_H__
3213531Sjairo.balart@metempsy.com#define __DEV_ARM_GICV3_CPU_INTERFACE_H__
3313531Sjairo.balart@metempsy.com
3413531Sjairo.balart@metempsy.com#include "arch/arm/isa_device.hh"
3513531Sjairo.balart@metempsy.com#include "dev/arm/gic_v3.hh"
3613531Sjairo.balart@metempsy.com
3713760Sjairo.balart@metempsy.comclass Gicv3Distributor;
3813531Sjairo.balart@metempsy.comclass Gicv3Redistributor;
3913531Sjairo.balart@metempsy.com
4013531Sjairo.balart@metempsy.comclass Gicv3CPUInterface : public ArmISA::BaseISADevice, public Serializable
4113531Sjairo.balart@metempsy.com{
4213531Sjairo.balart@metempsy.com  private:
4313531Sjairo.balart@metempsy.com
4413760Sjairo.balart@metempsy.com    friend class Gicv3Distributor;
4513531Sjairo.balart@metempsy.com    friend class Gicv3Redistributor;
4613531Sjairo.balart@metempsy.com
4713531Sjairo.balart@metempsy.com  protected:
4813531Sjairo.balart@metempsy.com
4913531Sjairo.balart@metempsy.com    Gicv3 * gic;
5013531Sjairo.balart@metempsy.com    Gicv3Redistributor * redistributor;
5113531Sjairo.balart@metempsy.com    Gicv3Distributor * distributor;
5213531Sjairo.balart@metempsy.com    uint32_t cpuId;
5313531Sjairo.balart@metempsy.com
5413760Sjairo.balart@metempsy.com    BitUnion64(ICC_CTLR_EL1)
5513760Sjairo.balart@metempsy.com        Bitfield<63, 20> res0_3;
5613760Sjairo.balart@metempsy.com        Bitfield<19>     ExtRange;
5713760Sjairo.balart@metempsy.com        Bitfield<18>     RSS;
5813760Sjairo.balart@metempsy.com        Bitfield<17, 16> res0_2;
5913760Sjairo.balart@metempsy.com        Bitfield<15>     A3V;
6013760Sjairo.balart@metempsy.com        Bitfield<14>     SEIS;
6113760Sjairo.balart@metempsy.com        Bitfield<13, 11> IDbits;
6213760Sjairo.balart@metempsy.com        Bitfield<10, 8>  PRIbits;
6313760Sjairo.balart@metempsy.com        Bitfield<7>      res0_1;
6413760Sjairo.balart@metempsy.com        Bitfield<6>      PMHE;
6513760Sjairo.balart@metempsy.com        Bitfield<5, 2>   res0_0;
6613760Sjairo.balart@metempsy.com        Bitfield<1>      EOImode;
6713760Sjairo.balart@metempsy.com        Bitfield<0>      CBPR;
6813760Sjairo.balart@metempsy.com    EndBitUnion(ICC_CTLR_EL1)
6913531Sjairo.balart@metempsy.com
7013760Sjairo.balart@metempsy.com    BitUnion64(ICC_CTLR_EL3)
7113760Sjairo.balart@metempsy.com        Bitfield<63, 20> res0_2;
7213760Sjairo.balart@metempsy.com        Bitfield<19>     ExtRange;
7313760Sjairo.balart@metempsy.com        Bitfield<18>     RSS;
7413760Sjairo.balart@metempsy.com        Bitfield<17>     nDS;
7513760Sjairo.balart@metempsy.com        Bitfield<16>     res0_1;
7613760Sjairo.balart@metempsy.com        Bitfield<15>     A3V;
7713760Sjairo.balart@metempsy.com        Bitfield<14>     SEIS;
7813760Sjairo.balart@metempsy.com        Bitfield<13, 11> IDbits;
7913760Sjairo.balart@metempsy.com        Bitfield<10, 8>  PRIbits;
8013760Sjairo.balart@metempsy.com        Bitfield<7>      res0_0;
8113760Sjairo.balart@metempsy.com        Bitfield<6>      PMHE;
8213760Sjairo.balart@metempsy.com        Bitfield<5>      RM;
8313760Sjairo.balart@metempsy.com        Bitfield<4>      EOImode_EL1NS;
8413760Sjairo.balart@metempsy.com        Bitfield<3>      EOImode_EL1S;
8513760Sjairo.balart@metempsy.com        Bitfield<2>      EOImode_EL3;
8613760Sjairo.balart@metempsy.com        Bitfield<1>      CBPR_EL1NS;
8713760Sjairo.balart@metempsy.com        Bitfield<0>      CBPR_EL1S;
8813760Sjairo.balart@metempsy.com    EndBitUnion(ICC_CTLR_EL3)
8913531Sjairo.balart@metempsy.com
9013760Sjairo.balart@metempsy.com    BitUnion64(ICC_IGRPEN0_EL1)
9113760Sjairo.balart@metempsy.com        Bitfield<63, 1> res0;
9213760Sjairo.balart@metempsy.com        Bitfield<0>     Enable;
9313760Sjairo.balart@metempsy.com    EndBitUnion(ICC_IGRPEN0_EL1)
9413531Sjairo.balart@metempsy.com
9513760Sjairo.balart@metempsy.com    BitUnion64(ICC_IGRPEN1_EL1)
9613760Sjairo.balart@metempsy.com        Bitfield<63, 1> res0;
9713760Sjairo.balart@metempsy.com        Bitfield<0>     Enable;
9813760Sjairo.balart@metempsy.com    EndBitUnion(ICC_IGRPEN1_EL1)
9913531Sjairo.balart@metempsy.com
10013760Sjairo.balart@metempsy.com    BitUnion64(ICC_IGRPEN1_EL3)
10113760Sjairo.balart@metempsy.com        Bitfield<63, 2> res0;
10213760Sjairo.balart@metempsy.com        Bitfield<1>     EnableGrp1S;
10313760Sjairo.balart@metempsy.com        Bitfield<0>     EnableGrp1NS;
10413760Sjairo.balart@metempsy.com    EndBitUnion(ICC_IGRPEN1_EL3)
10513531Sjairo.balart@metempsy.com
10613760Sjairo.balart@metempsy.com    BitUnion64(ICC_SRE_EL1)
10713760Sjairo.balart@metempsy.com        Bitfield<63, 3> res0;
10813760Sjairo.balart@metempsy.com        Bitfield<2>     DIB;
10913760Sjairo.balart@metempsy.com        Bitfield<1>     DFB;
11013760Sjairo.balart@metempsy.com        Bitfield<0>     SRE;
11113760Sjairo.balart@metempsy.com    EndBitUnion(ICC_SRE_EL1)
11213531Sjairo.balart@metempsy.com
11313760Sjairo.balart@metempsy.com    BitUnion64(ICC_SRE_EL2)
11413760Sjairo.balart@metempsy.com        Bitfield<63, 4> res0;
11513760Sjairo.balart@metempsy.com        Bitfield<3>     Enable;
11613760Sjairo.balart@metempsy.com        Bitfield<2>     DIB;
11713760Sjairo.balart@metempsy.com        Bitfield<1>     DFB;
11813760Sjairo.balart@metempsy.com        Bitfield<0>     SRE;
11913760Sjairo.balart@metempsy.com    EndBitUnion(ICC_SRE_EL2)
12013760Sjairo.balart@metempsy.com
12113760Sjairo.balart@metempsy.com    BitUnion64(ICC_SRE_EL3)
12213760Sjairo.balart@metempsy.com        Bitfield<63, 4> res0;
12313760Sjairo.balart@metempsy.com        Bitfield<3>     Enable;
12413760Sjairo.balart@metempsy.com        Bitfield<2>     DIB;
12513760Sjairo.balart@metempsy.com        Bitfield<1>     DFB;
12613760Sjairo.balart@metempsy.com        Bitfield<0>     SRE;
12713760Sjairo.balart@metempsy.com    EndBitUnion(ICC_SRE_EL3)
12813531Sjairo.balart@metempsy.com
12913531Sjairo.balart@metempsy.com    static const uint8_t PRIORITY_BITS = 5;
13013531Sjairo.balart@metempsy.com
13113760Sjairo.balart@metempsy.com    // Minimum BPR for Secure, or when security not enabled
13213531Sjairo.balart@metempsy.com    static const uint8_t GIC_MIN_BPR = 2;
13313760Sjairo.balart@metempsy.com    //  Minimum BPR for Nonsecure when security is enabled
13413531Sjairo.balart@metempsy.com    static const uint8_t GIC_MIN_BPR_NS = GIC_MIN_BPR + 1;
13513531Sjairo.balart@metempsy.com
13613760Sjairo.balart@metempsy.com    static const uint8_t VIRTUAL_PRIORITY_BITS   = 5;
13713531Sjairo.balart@metempsy.com    static const uint8_t VIRTUAL_PREEMPTION_BITS = 5;
13813760Sjairo.balart@metempsy.com    static const uint8_t VIRTUAL_NUM_LIST_REGS   = 16;
13913531Sjairo.balart@metempsy.com
14013531Sjairo.balart@metempsy.com    static const uint8_t GIC_MIN_VBPR = 7 - VIRTUAL_PREEMPTION_BITS;
14113531Sjairo.balart@metempsy.com
14213531Sjairo.balart@metempsy.com    typedef struct {
14313531Sjairo.balart@metempsy.com        uint32_t intid;
14413531Sjairo.balart@metempsy.com        uint8_t prio;
14513531Sjairo.balart@metempsy.com        Gicv3::GroupId group;
14613531Sjairo.balart@metempsy.com    } hppi_t;
14713531Sjairo.balart@metempsy.com
14813531Sjairo.balart@metempsy.com    hppi_t hppi;
14913531Sjairo.balart@metempsy.com
15013531Sjairo.balart@metempsy.com    // GIC CPU interface memory mapped control registers (legacy)
15113531Sjairo.balart@metempsy.com    enum {
15213760Sjairo.balart@metempsy.com        GICC_CTLR    = 0x0000,
15313760Sjairo.balart@metempsy.com        GICC_PMR     = 0x0004,
15413760Sjairo.balart@metempsy.com        GICC_BPR     = 0x0008,
15513760Sjairo.balart@metempsy.com        GICC_IAR     = 0x000C,
15613760Sjairo.balart@metempsy.com        GICC_EOIR    = 0x0010,
15713760Sjairo.balart@metempsy.com        GICC_RPR     = 0x0014,
15813760Sjairo.balart@metempsy.com        GICC_HPPI    = 0x0018,
15913760Sjairo.balart@metempsy.com        GICC_ABPR    = 0x001C,
16013760Sjairo.balart@metempsy.com        GICC_AIAR    = 0x0020,
16113760Sjairo.balart@metempsy.com        GICC_AEOIR   = 0x0024,
16213760Sjairo.balart@metempsy.com        GICC_AHPPIR  = 0x0028,
16313531Sjairo.balart@metempsy.com        GICC_STATUSR = 0x002C,
16413760Sjairo.balart@metempsy.com        GICC_IIDR    = 0x00FC,
16513531Sjairo.balart@metempsy.com    };
16613531Sjairo.balart@metempsy.com
16713531Sjairo.balart@metempsy.com    static const AddrRange GICC_APR;
16813531Sjairo.balart@metempsy.com    static const AddrRange GICC_NSAPR;
16913531Sjairo.balart@metempsy.com
17013531Sjairo.balart@metempsy.com    // GIC CPU virtual interface memory mapped control registers (legacy)
17113531Sjairo.balart@metempsy.com    enum {
17213760Sjairo.balart@metempsy.com        GICH_HCR   = 0x0000,
17313760Sjairo.balart@metempsy.com        GICH_VTR   = 0x0004,
17413760Sjairo.balart@metempsy.com        GICH_VMCR  = 0x0008,
17513760Sjairo.balart@metempsy.com        GICH_MISR  = 0x0010,
17613760Sjairo.balart@metempsy.com        GICH_EISR  = 0x0020,
17713531Sjairo.balart@metempsy.com        GICH_ELRSR = 0x0030,
17813531Sjairo.balart@metempsy.com    };
17913531Sjairo.balart@metempsy.com
18013531Sjairo.balart@metempsy.com    static const AddrRange GICH_APR;
18113531Sjairo.balart@metempsy.com    static const AddrRange GICH_LR;
18213531Sjairo.balart@metempsy.com
18313760Sjairo.balart@metempsy.com    BitUnion64(ICH_HCR_EL2)
18413760Sjairo.balart@metempsy.com        Bitfield<63, 32> res0_2;
18513760Sjairo.balart@metempsy.com        Bitfield<31, 27> EOIcount;
18613760Sjairo.balart@metempsy.com        Bitfield<26, 15> res0_1;
18713760Sjairo.balart@metempsy.com        Bitfield<14>     TDIR;
18813760Sjairo.balart@metempsy.com        Bitfield<13>     TSEI;
18913760Sjairo.balart@metempsy.com        Bitfield<12>     TALL1;
19013760Sjairo.balart@metempsy.com        Bitfield<11>     TALL0;
19113760Sjairo.balart@metempsy.com        Bitfield<10>     TC;
19213760Sjairo.balart@metempsy.com        Bitfield<9, 8>   res0_0;
19313760Sjairo.balart@metempsy.com        Bitfield<7>      VGrp1DIE;
19413760Sjairo.balart@metempsy.com        Bitfield<6>      VGrp1EIE;
19513760Sjairo.balart@metempsy.com        Bitfield<5>      VGrp0DIE;
19613760Sjairo.balart@metempsy.com        Bitfield<4>      VGrp0EIE;
19713760Sjairo.balart@metempsy.com        Bitfield<3>      NPIE;
19813760Sjairo.balart@metempsy.com        Bitfield<2>      LRENPIE;
19913760Sjairo.balart@metempsy.com        Bitfield<1>      UIE;
20013760Sjairo.balart@metempsy.com        Bitfield<0>      En;
20113760Sjairo.balart@metempsy.com    EndBitUnion(ICH_HCR_EL2)
20213531Sjairo.balart@metempsy.com
20313760Sjairo.balart@metempsy.com    BitUnion64(ICH_LR_EL2)
20413760Sjairo.balart@metempsy.com        Bitfield<63, 62> State;
20513760Sjairo.balart@metempsy.com        Bitfield<61>     HW;
20613760Sjairo.balart@metempsy.com        Bitfield<60>     Group;
20713760Sjairo.balart@metempsy.com        Bitfield<59, 56> res0_1;
20813760Sjairo.balart@metempsy.com        Bitfield<55, 48> Priority;
20913760Sjairo.balart@metempsy.com        Bitfield<47, 45> res0_0;
21013760Sjairo.balart@metempsy.com        Bitfield<44, 32> pINTID;
21113760Sjairo.balart@metempsy.com        Bitfield<41>     EOI;
21213760Sjairo.balart@metempsy.com        Bitfield<31, 0>  vINTID;
21313760Sjairo.balart@metempsy.com    EndBitUnion(ICH_LR_EL2)
21413760Sjairo.balart@metempsy.com
21513760Sjairo.balart@metempsy.com    static const uint64_t ICH_LR_EL2_STATE_INVALID        = 0;
21613760Sjairo.balart@metempsy.com    static const uint64_t ICH_LR_EL2_STATE_PENDING        = 1;
21713760Sjairo.balart@metempsy.com    static const uint64_t ICH_LR_EL2_STATE_ACTIVE         = 2;
21813531Sjairo.balart@metempsy.com    static const uint64_t ICH_LR_EL2_STATE_ACTIVE_PENDING = 3;
21913531Sjairo.balart@metempsy.com
22013760Sjairo.balart@metempsy.com    BitUnion32(ICH_LRC)
22113760Sjairo.balart@metempsy.com        Bitfield<31, 30> State;
22213760Sjairo.balart@metempsy.com        Bitfield<29>     HW;
22313760Sjairo.balart@metempsy.com        Bitfield<28>     Group;
22413760Sjairo.balart@metempsy.com        Bitfield<27, 24> res0_1;
22513760Sjairo.balart@metempsy.com        Bitfield<23, 16> Priority;
22613760Sjairo.balart@metempsy.com        Bitfield<15, 13> res0_0;
22713760Sjairo.balart@metempsy.com        Bitfield<12, 0>  pINTID;
22813760Sjairo.balart@metempsy.com        Bitfield<9>      EOI;
22913760Sjairo.balart@metempsy.com    EndBitUnion(ICH_LRC)
23013531Sjairo.balart@metempsy.com
23113760Sjairo.balart@metempsy.com    BitUnion64(ICH_MISR_EL2)
23213760Sjairo.balart@metempsy.com        Bitfield<63, 8> res0;
23313760Sjairo.balart@metempsy.com        Bitfield<7>     VGrp1D;
23413760Sjairo.balart@metempsy.com        Bitfield<6>     VGrp1E;
23513760Sjairo.balart@metempsy.com        Bitfield<5>     VGrp0D;
23613760Sjairo.balart@metempsy.com        Bitfield<4>     VGrp0E;
23713760Sjairo.balart@metempsy.com        Bitfield<3>     NP;
23813760Sjairo.balart@metempsy.com        Bitfield<2>     LRENP;
23913760Sjairo.balart@metempsy.com        Bitfield<1>     U;
24013760Sjairo.balart@metempsy.com        Bitfield<0>     EOI;
24113760Sjairo.balart@metempsy.com    EndBitUnion(ICH_MISR_EL2)
24213531Sjairo.balart@metempsy.com
24313760Sjairo.balart@metempsy.com    BitUnion64(ICH_VMCR_EL2)
24413760Sjairo.balart@metempsy.com        Bitfield<63, 32> res0_2;
24513760Sjairo.balart@metempsy.com        Bitfield<31, 24> VPMR;
24613760Sjairo.balart@metempsy.com        Bitfield<23, 21> VBPR0;
24713760Sjairo.balart@metempsy.com        Bitfield<20, 18> VBPR1;
24813760Sjairo.balart@metempsy.com        Bitfield<17, 10> res0_1;
24913760Sjairo.balart@metempsy.com        Bitfield<9>      VEOIM;
25013760Sjairo.balart@metempsy.com        Bitfield<8, 5>   res0_0;
25113760Sjairo.balart@metempsy.com        Bitfield<4>      VCBPR;
25213760Sjairo.balart@metempsy.com        Bitfield<3>      VFIQEn;
25313760Sjairo.balart@metempsy.com        Bitfield<2>      VAckCtl;
25413760Sjairo.balart@metempsy.com        Bitfield<1>      VENG1;
25513760Sjairo.balart@metempsy.com        Bitfield<0>      VENG0;
25613760Sjairo.balart@metempsy.com    EndBitUnion(ICH_VMCR_EL2)
25713531Sjairo.balart@metempsy.com
25813760Sjairo.balart@metempsy.com    BitUnion64(ICH_VTR_EL2)
25913760Sjairo.balart@metempsy.com        Bitfield<63, 32> res0_1;
26013760Sjairo.balart@metempsy.com        Bitfield<31, 29> PRIbits;
26113760Sjairo.balart@metempsy.com        Bitfield<28, 26> PREbits;
26213760Sjairo.balart@metempsy.com        Bitfield<25, 23> IDbits;
26313760Sjairo.balart@metempsy.com        Bitfield<22>     SEIS;
26413760Sjairo.balart@metempsy.com        Bitfield<21>     A3V;
26513760Sjairo.balart@metempsy.com        Bitfield<20>     res1;
26613760Sjairo.balart@metempsy.com        Bitfield<19>     TDS;
26713760Sjairo.balart@metempsy.com        Bitfield<18, 5>  res0_0;
26813760Sjairo.balart@metempsy.com        Bitfield<4, 0>   ListRegs;
26913760Sjairo.balart@metempsy.com    EndBitUnion(ICH_VTR_EL2)
27013760Sjairo.balart@metempsy.com
27113760Sjairo.balart@metempsy.com    BitUnion64(ICV_CTLR_EL1)
27213760Sjairo.balart@metempsy.com        Bitfield<63, 19> res0_2;
27313760Sjairo.balart@metempsy.com        Bitfield<18>     RSS;
27413760Sjairo.balart@metempsy.com        Bitfield<17, 16> res0_1;
27513760Sjairo.balart@metempsy.com        Bitfield<15>     A3V;
27613760Sjairo.balart@metempsy.com        Bitfield<14>     SEIS;
27713760Sjairo.balart@metempsy.com        Bitfield<13, 11> IDbits;
27813760Sjairo.balart@metempsy.com        Bitfield<10, 8>  PRIbits;
27913760Sjairo.balart@metempsy.com        Bitfield<7, 2>   res0_0;
28013760Sjairo.balart@metempsy.com        Bitfield<1>      EOImode;
28113760Sjairo.balart@metempsy.com        Bitfield<0>      CBPR;
28213760Sjairo.balart@metempsy.com    EndBitUnion(ICV_CTLR_EL1)
28313760Sjairo.balart@metempsy.com
28413760Sjairo.balart@metempsy.com  protected:
28513760Sjairo.balart@metempsy.com
28613760Sjairo.balart@metempsy.com    void activateIRQ(uint32_t intid, Gicv3::GroupId group);
28713760Sjairo.balart@metempsy.com    int currEL() const;
28813760Sjairo.balart@metempsy.com    void deactivateIRQ(uint32_t intid, Gicv3::GroupId group);
28913760Sjairo.balart@metempsy.com    void dropPriority(Gicv3::GroupId group);
29013760Sjairo.balart@metempsy.com    uint64_t eoiMaintenanceInterruptStatus() const;
29113760Sjairo.balart@metempsy.com    bool getHCREL2FMO() const;
29213760Sjairo.balart@metempsy.com    bool getHCREL2IMO() const;
29313760Sjairo.balart@metempsy.com    uint32_t getHPPIR0() const;
29413760Sjairo.balart@metempsy.com    uint32_t getHPPIR1() const;
29513760Sjairo.balart@metempsy.com    int getHPPVILR() const;
29613760Sjairo.balart@metempsy.com    bool groupEnabled(Gicv3::GroupId group) const;
29713760Sjairo.balart@metempsy.com    uint32_t groupPriorityMask(Gicv3::GroupId group) const;
29813760Sjairo.balart@metempsy.com    bool haveEL(ArmISA::ExceptionLevel el) const;
29913760Sjairo.balart@metempsy.com    int highestActiveGroup() const;
30013760Sjairo.balart@metempsy.com    uint8_t highestActivePriority() const;
30113760Sjairo.balart@metempsy.com    bool hppiCanPreempt() const;
30213760Sjairo.balart@metempsy.com    bool hppviCanPreempt(int lrIdx) const;
30313760Sjairo.balart@metempsy.com    bool inSecureState() const;
30413760Sjairo.balart@metempsy.com    ArmISA::InterruptTypes intSignalType(Gicv3::GroupId group) const;
30513760Sjairo.balart@metempsy.com    bool isAA64() const;
30613760Sjairo.balart@metempsy.com    bool isEL3OrMon() const;
30713760Sjairo.balart@metempsy.com    bool isEOISplitMode() const;
30813760Sjairo.balart@metempsy.com    bool isSecureBelowEL3() const;
30913760Sjairo.balart@metempsy.com    ICH_MISR_EL2 maintenanceInterruptStatus() const;
31013760Sjairo.balart@metempsy.com    RegVal readMiscReg(int misc_reg) override;
31113760Sjairo.balart@metempsy.com    void reset();
31213760Sjairo.balart@metempsy.com    void serialize(CheckpointOut & cp) const override;
31313760Sjairo.balart@metempsy.com    void setMiscReg(int misc_reg, RegVal val) override;
31413760Sjairo.balart@metempsy.com    void unserialize(CheckpointIn & cp) override;
31513760Sjairo.balart@metempsy.com    void update();
31613760Sjairo.balart@metempsy.com    void virtualActivateIRQ(uint32_t lrIdx);
31713760Sjairo.balart@metempsy.com    void virtualDeactivateIRQ(int lrIdx);
31813760Sjairo.balart@metempsy.com    uint8_t virtualDropPriority();
31913760Sjairo.balart@metempsy.com    int virtualFindActive(uint32_t intid) const;
32013760Sjairo.balart@metempsy.com    uint32_t virtualGroupPriorityMask(Gicv3::GroupId group) const;
32113760Sjairo.balart@metempsy.com    uint8_t virtualHighestActivePriority() const;
32213760Sjairo.balart@metempsy.com    void virtualIncrementEOICount();
32313760Sjairo.balart@metempsy.com    bool virtualIsEOISplitMode() const;
32413760Sjairo.balart@metempsy.com    void virtualUpdate();
32513531Sjairo.balart@metempsy.com
32613531Sjairo.balart@metempsy.com  public:
32713531Sjairo.balart@metempsy.com
32813531Sjairo.balart@metempsy.com    Gicv3CPUInterface(Gicv3 * gic, uint32_t cpu_id);
32913760Sjairo.balart@metempsy.com
33013531Sjairo.balart@metempsy.com    void init();
33113531Sjairo.balart@metempsy.com    void initState();
33213531Sjairo.balart@metempsy.com};
33313531Sjairo.balart@metempsy.com
33413531Sjairo.balart@metempsy.com#endif //__DEV_ARM_GICV3_CPU_INTERFACE_H__
335