#ifndef _PEXPERT_ARM64_VMAPPLE_H
#define _PEXPERT_ARM64_VMAPPLE_H
#define NO_MONITOR 1
#define NO_ECORE 1
#define VMAPPLE 1
#define APPLEVIRTUALPLATFORM 1
#define CPU_HAS_APPLE_PAC 1
#define HAS_PARAVIRTUALIZED_PAC 1
#define 1
#define HAS_GIC_V3 1
#define __ARM_PAN_AVAILABLE__ 1
#define __ARM_16K_PG__ 1
#define ARM_PARAMETERIZED_PMAP 1
#define __ARM_MIXED_PAGE_SIZE__ 1
#include <pexpert/arm64/apple_arm64_common.h>
#undef __ARM64_PMAP_SUBPAGE_L1__
#ifndef ASSEMBLER
#define VMAPPLE_UART
#define PLATFORM_PANIC_LOG_DISABLED
#endif
#ifdef ASSEMBLER
#define ASPSR_EL1 S3_6_c15_c8_3
#define AFPCR_EL0 S3_6_c15_c2_5
#else
#define ASPSR_EL1 "S3_6_c15_c8_3"
#define AFPCR_EL0 "S3_6_c15_c2_5"
#endif
#define GIC_SPURIOUS_IRQ 1023 // IRQ no. for GIC spurious interrupt
#define GICR_PE_SIZE 0x20000 // Size of each redistributor region
#define GICD_CTLR 0x0
#define GICD_CTLR_ENABLEGRP0 0x1
#define GICR_TYPER 0x08
#define GICR_WAKER 0x14
#define GICR_IGROUPR0 0x10080
#define GICR_ISENABLER0 0x10100
#define GICR_TYPER_AFFINITY_VALUE_SHIFT 32
#define GICR_TYPER_LAST 0x10
#define GICR_WAKER_PROCESSORSLEEP 0x2
#define GICR_WAKER_CHILDRENASLEEP 0x4
#define ICC_CTLR_EOIMODE 0x1
#define ICC_SRE_SRE 0x1
#define VMAPPLE_HVC_NAMESPACE 0xC1000000
#define VMAPPLE_PAC_SET_INITIAL_STATE (VMAPPLE_HVC_NAMESPACE | 0x0)
#define VMAPPLE_PAC_GET_DEFAULT_KEYS (VMAPPLE_HVC_NAMESPACE | 0x1)
#define VMAPPLE_PAC_SET_A_KEYS (VMAPPLE_HVC_NAMESPACE | 0x2)
#define VMAPPLE_PAC_SET_B_KEYS (VMAPPLE_HVC_NAMESPACE | 0x3)
#define VMAPPLE_PAC_SET_EL0_DIVERSIFIER (VMAPPLE_HVC_NAMESPACE | 0x4)
#define VMAPPLE_PAC_SET_EL0_DIVERSIFIER_AT_EL1 (VMAPPLE_HVC_NAMESPACE | 0x5)
#endif