#ifndef _VGIC_V3_REG_H_
#define _VGIC_V3_REG_H_
#define ICH_EISR_EL2_STATUS_MASK 0xffff
#define ICH_EISR_EL2_EOI_NOT_HANDLED(lr) ((1 << lr) & ICH_EISR_EL2_STATUS_MASK)
#define ICH_ELSR_EL2_STATUS_MASK 0xffff
#define ICH_ELSR_EL2_LR_EMPTY(x) ((1 << x) & ICH_ELSR_EL2_STATUS_MASK)
#define ICH_HCR_EL2_EOICOUNT_SHIFT 27
#define ICH_HCR_EL2_EOICOUNT_MASK (0x1f << ICH_HCR_EL2_EOICOUNT_SHIFT)
#define ICH_HCR_EL2_TDIR (1 << 14)
#define ICH_HCR_EL2_TSEI (1 << 14)
#define ICH_HCR_EL2_TALL1 (1 << 12)
#define ICH_HCR_EL2_TALL0 (1 << 11)
#define ICH_HCR_EL2_TC (1 << 10)
#define ICH_HCR_EL2_VGRP1DIE (1 << 7)
#define ICH_HCR_EL2_VGRP1EIE (1 << 6)
#define ICH_HCR_EL2_VGRP0DIE (1 << 5)
#define ICH_HCR_EL2_VGRP0EIE (1 << 4)
#define ICH_HCR_EL2_NPIE (1 << 3)
#define ICH_HCR_EL2_LRENPIE (1 << 2)
#define ICH_HCR_EL2_UIE (1 << 1)
#define ICH_HCR_EL2_En (1 << 0)
#define ICH_LR_EL2_VINTID_MASK 0xffffffff
#define ICH_LR_EL2_VINTID(x) ((x) & ICH_LR_EL2_VINTID_MASK)
#define ICH_LR_EL2_PINTID_SHIFT 32
#define ICH_LR_EL2_PINTID_MASK (0x3fUL << ICH_LR_EL2_PINTID_SHIFT)
#define ICH_LR_EL2_EOI (1UL << 41)
#define ICH_LR_EL2_PRIO_SHIFT 48
#define ICH_LR_EL2_PRIO_MASK (0xffUL << ICH_LR_EL2_PRIO_SHIFT)
#define ICH_LR_EL2_GROUP_SHIFT 60
#define ICH_LR_EL2_GROUP1 (1UL << ICH_LR_EL2_GROUP_SHIFT)
#define ICH_LR_EL2_HW (1UL << 61)
#define ICH_LR_EL2_STATE_SHIFT 62
#define ICH_LR_EL2_STATE_MASK (0x3UL << ICH_LR_EL2_STATE_SHIFT)
#define ICH_LR_EL2_STATE(x) ((x) & ICH_LR_EL2_STATE_MASK)
#define ICH_LR_EL2_STATE_INACTIVE (0x0UL << ICH_LR_EL2_STATE_SHIFT)
#define ICH_LR_EL2_STATE_PENDING (0x1UL << ICH_LR_EL2_STATE_SHIFT)
#define ICH_LR_EL2_STATE_ACTIVE (0x2UL << ICH_LR_EL2_STATE_SHIFT)
#define ICH_LR_EL2_STATE_PENDING_ACTIVE (0x3UL << ICH_LR_EL2_STATE_SHIFT)
#define ICH_MISR_EL2_VGRP1D (1 << 7)
#define ICH_MISR_EL2_VGRP1E (1 << 6)
#define ICH_MISR_EL2_VGRP0D (1 << 5)
#define ICH_MISR_EL2_VGRP0E (1 << 4)
#define ICH_MISR_EL2_NP (1 << 3)
#define ICH_MISR_EL2_LRENP (1 << 2)
#define ICH_MISR_EL2_U (1 << 1)
#define ICH_MISR_EL2_EOI (1 << 0)
#define ICH_VMCR_EL2_VPMR_SHIFT 24
#define ICH_VMCR_EL2_VPMR_MASK (0xff << ICH_VMCR_EL2_VPMR_SHIFT)
#define ICH_VMCR_EL2_VPMR_PRIO_LOWEST (0xff << ICH_VMCR_EL2_VPMR_SHIFT)
#define ICH_VMCR_EL2_VPMR_PRIO_HIGHEST (0x00 << ICH_VMCR_EL2_VPMR_SHIFT)
#define ICH_VMCR_EL2_VBPR0_SHIFT 21
#define ICH_VMCR_EL2_VBPR0_MASK (0x7 << ICH_VMCR_EL2_VBPR0_SHIFT)
#define ICH_VMCR_EL2_VBPR0_NO_PREEMPTION \
(0x7 << ICH_VMCR_EL2_VBPR0_SHIFT)
#define ICH_VMCR_EL2_VBPR1_SHIFT 18
#define ICH_VMCR_EL2_VBPR1_MASK (0x7 << ICH_VMCR_EL2_VBPR1_SHIFT)
#define ICH_VMCR_EL2_VBPR1_NO_PREEMPTION \
(0x7 << ICH_VMCR_EL2_VBPR1_SHIFT)
#define ICH_VMCR_EL2_VEOIM (1 << 9)
#define ICH_VMCR_EL2_VCBPR (1 << 4)
#define ICH_VMCR_EL2_VFIQEN (1 << 3)
#define ICH_VMCR_EL2_VACKCTL (1 << 2)
#define ICH_VMCR_EL2_VENG1 (1 << 1)
#define ICH_VMCR_EL2_VENG0 (1 << 0)
#define ICH_VTR_EL2_PRIBITS_SHIFT 29
#define ICH_VTR_EL2_PRIBITS_MASK (0x7 << ICH_VTR_EL2_PRIBITS_SHIFT)
#define ICH_VTR_EL2_PRIBITS(x) \
((((x) & ICH_VTR_EL2_PRIBITS_MASK) >> ICH_VTR_EL2_PRIBITS_SHIFT) + 1)
#define ICH_VTR_EL2_PREBITS_SHIFT 26
#define ICH_VTR_EL2_PREBITS_MASK (0x7 << ICH_VTR_EL2_PREBITS_SHIFT)
#define ICH_VTR_EL2_PREBITS(x) \
(((x) & ICH_VTR_EL2_PREBITS_MASK) >> ICH_VTR_EL2_PREBITS_SHIFT)
#define ICH_VTR_EL2_SEIS (1 << 22)
#define ICH_VTR_EL2_A3V (1 << 21)
#define ICH_VTR_EL2_NV4 (1 << 20)
#define ICH_VTR_EL2_TDS (1 << 19)
#define ICH_VTR_EL2_LISTREGS_MASK 0x1f
#define ICH_VTR_EL2_LISTREGS(x) (((x) & ICH_VTR_EL2_LISTREGS_MASK) + 1)
#endif