-
-
Notifications
You must be signed in to change notification settings - Fork 268
Expand file tree
/
Copy pathsmp.h
More file actions
50 lines (37 loc) · 1.17 KB
/
smp.h
File metadata and controls
50 lines (37 loc) · 1.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/* SPDX-License-Identifier: MIT */
#ifndef __SMP_H__
#define __SMP_H__
#include "types.h"
#include "utils.h"
#define MAX_CPUS 24
#define MAX_EL3_CPUS 4
#define SECONDARY_STACK_SIZE 0x10000
extern u8 *secondary_stacks[MAX_CPUS];
extern u8 *secondary_stacks_el3[MAX_EL3_CPUS];
void smp_secondary_entry(void);
void smp_secondary_prep_el3(void);
void smp_start_secondaries(void);
void smp_stop_secondaries(bool deep_sleep);
int smp_switch_boot_cpu(int cpu_index);
#define smp_call0(i, f) smp_call4(i, f, 0, 0, 0, 0)
#define smp_call1(i, f, a) smp_call4(i, f, a, 0, 0, 0)
#define smp_call2(i, f, a, b) smp_call4(i, f, a, b, 0, 0)
#define smp_call3(i, f, a, b, c) smp_call4(i, f, a, b, c, 0)
void smp_call4(int cpu, void *func, u64 arg0, u64 arg1, u64 arg2, u64 arg3);
u64 smp_wait(int cpu);
bool smp_is_alive(int cpu);
uint64_t smp_get_mpidr(int cpu);
u64 smp_get_release_addr(int cpu);
void smp_set_wfe_mode(bool new_mode);
void smp_send_ipi(int cpu);
static inline int smp_id(void)
{
if (in_el3())
return mrs(TPIDR_EL3);
else if (in_el2())
return mrs(TPIDR_EL2);
else
return mrs(TPIDR_EL1);
}
extern int boot_cpu_idx;
#endif