/****************************************************************************** * This function finds the highest power level which will be powered down * amongst all the power levels specified in the 'state_info' structure *****************************************************************************/ unsigned int psci_find_max_off_lvl(const psci_power_state_t *state_info) { int i; for (i = PLAT_MAX_PWR_LVL; i >= PSCI_CPU_PWR_LVL; i--) { if (is_local_state_off(state_info->pwr_domain_state[i])) return i; } return PSCI_INVALID_PWR_LVL; }
/* * This functions returns the index into the `psci_stat_t` array given the * local power state and power domain level. If the platform implements the * `get_pwr_lvl_state_idx` pm hook, then that will be used to return the index. */ static int get_stat_idx(plat_local_state_t local_state, int pwr_lvl) { int idx; if (psci_plat_pm_ops->get_pwr_lvl_state_idx == NULL) { assert(PLAT_MAX_PWR_LVL_STATES == 2); if (is_local_state_retn(local_state)) return 0; assert(is_local_state_off(local_state)); return 1; } idx = psci_plat_pm_ops->get_pwr_lvl_state_idx(local_state, pwr_lvl); assert((idx >= 0) && (idx < PLAT_MAX_PWR_LVL_STATES)); return idx; }