diff options
author | Soby Mathew <soby.mathew@arm.com> | 2015-01-06 15:36:38 +0000 |
---|---|---|
committer | Soby Mathew <soby.mathew@arm.com> | 2015-01-23 15:14:36 +0000 |
commit | 78879b9a5e5c31b80830046007c9955a6fcf0dd1 (patch) | |
tree | 764ed94af46c3200852b61aec4405366996329fb /services/std_svc/psci/psci_private.h | |
parent | 2f5aadedc4b722841155f0ff6630e220dac3f30b (diff) |
Rework internal API to save non-secure entry point info
This patch replaces the internal psci_save_ns_entry() API with a
psci_get_ns_ep_info() API. The new function splits the work done by the
previous one such that it populates and returns an 'entry_point_info_t'
structure with the information to enter the normal world upon completion
of the CPU_SUSPEND or CPU_ON call. This information is used to populate
the non-secure context structure separately.
This allows the new internal API `psci_get_ns_ep_info` to return error
and enable the code to return safely.
Change-Id: Ifd87430a4a3168eac0ebac712f59c93cbad1b231
Diffstat (limited to 'services/std_svc/psci/psci_private.h')
-rw-r--r-- | services/std_svc/psci/psci_private.h | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/services/std_svc/psci/psci_private.h b/services/std_svc/psci/psci_private.h index 9a8ef73d..3a4ee3c8 100644 --- a/services/std_svc/psci/psci_private.h +++ b/services/std_svc/psci/psci_private.h @@ -33,6 +33,7 @@ #include <arch.h> #include <bakery_lock.h> +#include <bl_common.h> #include <psci.h> /* @@ -101,9 +102,8 @@ int get_power_on_target_afflvl(void); void psci_afflvl_power_on_finish(int, int, afflvl_power_on_finisher_t *); -int psci_save_ns_entry(uint64_t mpidr, - uint64_t entrypoint, uint64_t context_id, - uint32_t caller_scr_el3, uint32_t caller_sctlr_el1); +int psci_get_ns_ep_info(entry_point_info_t *ep, + uint64_t entrypoint, uint64_t context_id); int psci_check_afflvl_range(int start_afflvl, int end_afflvl); void psci_do_afflvl_state_mgmt(uint32_t start_afflvl, uint32_t end_afflvl, @@ -129,21 +129,20 @@ int psci_get_aff_map_nodes(unsigned long mpidr, aff_map_node_t *psci_get_aff_map_node(unsigned long, int); /* Private exported functions from psci_affinity_on.c */ -int psci_afflvl_on(unsigned long, - unsigned long, - unsigned long, - int, - int); +int psci_afflvl_on(unsigned long target_cpu, + entry_point_info_t *ep, + int start_afflvl, + int end_afflvl); /* Private exported functions from psci_affinity_off.c */ int psci_afflvl_off(int, int); /* Private exported functions from psci_affinity_suspend.c */ -int psci_afflvl_suspend(unsigned long, - unsigned long, - unsigned int, - int, - int); +int psci_afflvl_suspend(entry_point_info_t *ep, + unsigned int power_state, + int start_afflvl, + int end_afflvl); + unsigned int psci_afflvl_suspend_finish(int, int); void psci_set_suspend_power_state(unsigned int power_state); |