#define CPUWINDOWS_BASE_MASK 0xFFFFFFFFFFF00000UL
#define CPUWINDOWS_BASE (VM_MAX_KERNEL_ADDRESS & CPUWINDOWS_BASE_MASK)
#endif
+#define CPUWINDOWS_TOP (CPUWINDOWS_BASE + (MAX_CPUS * CPUWINDOWS_MAX * PAGE_SIZE))
typedef struct cpu_data_entry {
void *cpu_data_paddr; /* Cpu data physical address */
unsigned short cpu_flags;
vm_offset_t istackptr;
vm_offset_t intstack_top;
- vm_offset_t fiqstackptr;
- vm_offset_t fiqstack_top;
#if __arm64__
vm_offset_t excepstackptr;
vm_offset_t excepstack_top;
boolean_t cluster_master;
+#else
+ vm_offset_t fiqstackptr;
+ vm_offset_t fiqstack_top;
#endif
boolean_t interrupts_enabled;
thread_t cpu_active_thread;
void *cpu_tbd_hardware_val;
void *cpu_console_buf;
- void *cpu_chud;
void *cpu_idle_notify;
uint64_t cpu_idle_latency;
uint64_t cpu_idle_pop;
-#if __arm__
+#if __arm__ || __ARM_KERNEL_PROTECT__
vm_offset_t cpu_exc_vectors;
-#endif
+#endif /* __ARM_KERNEL_PROTECT__ */
vm_offset_t cpu_reset_handler;
uint32_t cpu_reset_type;
uintptr_t cpu_reset_assist;
#if MONOTONIC
struct mt_cpu cpu_monotonic;
#endif /* MONOTONIC */
- struct prngContext *cpu_prng;
cluster_type_t cpu_cluster_type;
uint32_t cpu_cluster_id;
uint32_t cpu_l2_id;
extern cpu_data_t *cpu_datap(int cpu);
extern cpu_data_t *cpu_data_alloc(boolean_t is_boot);
-extern void cpu_data_init(cpu_data_t *cpu_data_ptr);
-extern void cpu_data_free(cpu_data_t *cpu_data_ptr);
-extern kern_return_t cpu_data_register(cpu_data_t *cpu_data_ptr);
+extern void cpu_stack_alloc(cpu_data_t*);
+extern void cpu_data_init(cpu_data_t *cpu_data_ptr);
+extern void cpu_data_free(cpu_data_t *cpu_data_ptr);
+extern kern_return_t cpu_data_register(cpu_data_t *cpu_data_ptr);
extern cpu_data_t *processor_to_cpu_datap( processor_t processor);
#if __arm64__