summaryrefslogtreecommitdiff
path: root/sys/dev/fdt/pscivar.h
blob: f11666a6185e66596d5ebb6c7eca77fc26f93fff (plain)
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
51
52
53
/* Public Domain */

#ifndef _SYS_DEV_FDT_PSCIVAR_H_
#define _SYS_DEV_FDT_PSCIVAR_H_

#define PSCI_SUCCESS		0
#define PSCI_NOT_SUPPORTED	-1

#define PSCI_METHOD_NONE	0
#define PSCI_METHOD_HVC		1
#define PSCI_METHOD_SMC		2

#define PSCI_VERSION		0x84000000
#ifdef __LP64__
#define CPU_SUSPEND		0xc4000001
#else
#define CPU_SUSPEND		0x84000001
#endif
#define CPU_OFF			0x84000002
#ifdef __LP64__
#define CPU_ON			0xc4000003
#else
#define CPU_ON			0x84000003
#endif
#define SYSTEM_OFF		0x84000008
#define SYSTEM_RESET		0x84000009
#define PSCI_FEATURES		0x8400000a
#ifdef __LP64__
#define SYSTEM_SUSPEND		0xc400000e
#else
#define SYSTEM_SUSPEND		0x8400000e
#endif

#define PSCI_FEATURE_POWER_STATE_EXT		(1 << 1)
#define  PSCI_POWER_STATE_POWERDOWN		(1 << 16)
#define  PSCI_POWER_STATE_EXT_POWERDOWN		(1 << 30)

int	psci_can_suspend(void);

int32_t	psci_system_suspend(register_t, register_t);
int32_t	psci_cpu_on(register_t, register_t, register_t);
int32_t	psci_cpu_off(void);
int32_t	psci_cpu_suspend(register_t, register_t, register_t);
int32_t	psci_features(uint32_t);
void	psci_flush_bp(void);
int	psci_method(void);

int32_t	smccc(uint32_t, register_t, register_t, register_t);

void	smccc_enable_arch_workaround_2(void);
int	smccc_needs_arch_workaround_3(void);

#endif /* _SYS_DEV_FDT_PSCIVAR_H_ */