mirror of
https://github.com/AsahiLinux/m1n1
synced 2024-11-14 19:27:06 +00:00
90b10ef9f7
Signed-off-by: Hector Martin <marcan@marcan.st>
39 lines
865 B
C
39 lines
865 B
C
/* SPDX-License-Identifier: MIT */
|
|
|
|
#ifndef __SMP_H__
|
|
#define __SMP_H__
|
|
|
|
#include "types.h"
|
|
#include "utils.h"
|
|
|
|
#define MAX_CPUS 8
|
|
|
|
#define SECONDARY_STACK_SIZE 0x10000
|
|
extern u8 secondary_stacks[MAX_CPUS][SECONDARY_STACK_SIZE];
|
|
|
|
void smp_secondary_entry(void);
|
|
|
|
void smp_start_secondaries(void);
|
|
|
|
#define smp_call0(i, f) smp_call(i, f, 0, 0, 0, 0)
|
|
#define smp_call1(i, f, a) smp_call(i, f, a, 0, 0, 0)
|
|
#define smp_call2(i, f, a, b) smp_call(i, f, a, b, 0, 0)
|
|
#define smp_call3(i, f, a, b, c) smp_call(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);
|
|
int smp_get_mpidr(int cpu);
|
|
u64 smp_get_release_addr(int cpu);
|
|
|
|
static inline int smp_id(void)
|
|
{
|
|
if (in_el2())
|
|
return mrs(TPIDR_EL2);
|
|
else
|
|
return mrs(TPIDR_EL1);
|
|
}
|
|
|
|
#endif
|