diff options
Diffstat (limited to 'sys/dev/psci')
| -rw-r--r-- | sys/dev/psci/psci.c | 13 | ||||
| -rw-r--r-- | sys/dev/psci/psci.h | 1 | 
2 files changed, 14 insertions, 0 deletions
| diff --git a/sys/dev/psci/psci.c b/sys/dev/psci/psci.c index 497b23d2d4c3..2b250401ae83 100644 --- a/sys/dev/psci/psci.c +++ b/sys/dev/psci/psci.c @@ -474,6 +474,19 @@ psci_cpu_on(unsigned long cpu, unsigned long entry, unsigned long context_id)  	return (psci_call(fnid, cpu, entry, context_id));  } +int +psci_cpu_off(void) +{ +	uint32_t fnid; + +	fnid = PSCI_FNID_CPU_OFF; +	if (psci_softc != NULL) +		fnid = psci_softc->psci_fnids[PSCI_FN_CPU_OFF]; + +	/* Returns PSCI_RETVAL_DENIED on error. */ +	return (psci_call(fnid, 0, 0, 0)); +} +  static void  psci_shutdown(void *xsc, int howto)  { diff --git a/sys/dev/psci/psci.h b/sys/dev/psci/psci.h index 451d40c0178d..6704eaf26c71 100644 --- a/sys/dev/psci/psci.h +++ b/sys/dev/psci/psci.h @@ -39,6 +39,7 @@ typedef int (*psci_callfn_t)(register_t, register_t, register_t, register_t,  extern bool psci_present;  int	psci_cpu_on(unsigned long, unsigned long, unsigned long); +int	psci_cpu_off(void);	/* Operates on caller. */  void	psci_reset(void);  int32_t	psci_features(uint32_t);  int	psci_get_version(void); | 
