diff options
Diffstat (limited to 'drivers/gpu/mali/mali400ko/driver/src/devicedrv/mali/common/pmm/mali_pmm_policy.h')
-rw-r--r-- | drivers/gpu/mali/mali400ko/driver/src/devicedrv/mali/common/pmm/mali_pmm_policy.h | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/drivers/gpu/mali/mali400ko/driver/src/devicedrv/mali/common/pmm/mali_pmm_policy.h b/drivers/gpu/mali/mali400ko/driver/src/devicedrv/mali/common/pmm/mali_pmm_policy.h new file mode 100644 index 00000000000..83cb7f29a92 --- /dev/null +++ b/drivers/gpu/mali/mali400ko/driver/src/devicedrv/mali/common/pmm/mali_pmm_policy.h @@ -0,0 +1,155 @@ +/* + * Copyright (C) 2010-2011 ARM Limited. All rights reserved. + * + * This program is free software and is provided to you under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence. + * + * A copy of the licence is included with the program, and can also be obtained from Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** + * @file mali_pmm_policy.h + * Defines the power management module policies + */ + +#ifndef __MALI_PMM_POLICY_H__ +#define __MALI_PMM_POLICY_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +/** + * @addtogroup pmmapi Power Management Module APIs + * + * @{ + * + * @defgroup pmmapi_policy Power Management Module Policies + * + * @{ + */ + +/** @brief Generic timer for use with policies + */ +typedef struct _pmm_policy_timer +{ + u32 timeout; /**< Timeout for this timer in ticks */ + mali_pmm_event_id event_id; /**< Event id that will be raised when timer expires */ + _mali_osk_timer_t *timer; /**< Timer */ + mali_bool set; /**< Timer set */ + mali_bool expired; /**< Timer expired - event needs to be raised */ + u32 start; /**< Timer start ticks */ +} _pmm_policy_timer_t; + +/** @brief Policy timer initialization + * + * This will create a timer for use in policies, but won't start it + * + * @param pptimer An empty timer structure to be initialized + * @param timeout Timeout in ticks for the timer + * @param id Event id that will be raised on timeout + * @return _MALI_OSK_ERR_OK if the policy could be initialized, or a suitable + * _mali_osk_errcode_t otherwise. + */ +_mali_osk_errcode_t pmm_policy_timer_init( _pmm_policy_timer_t *pptimer, u32 timeout, mali_pmm_event_id id ); + +/** @brief Policy timer termination + * + * This will clean up a timer that was previously used in policies, it + * will also stop it if started + * + * @param pptimer An initialized timer structure to be terminated + */ +void pmm_policy_timer_term( _pmm_policy_timer_t *pptimer ); + +/** @brief Policy timer start + * + * This will start a previously created timer for use in policies + * When the timer expires after the initialized timeout it will raise + * a PMM event of the event id given on initialization + * As data for the event it will pass the start time of the timer + * + * @param pptimer A previously initialized policy timer + * @return MALI_TRUE if the timer was started, MALI_FALSE if it is already started + */ +mali_bool pmm_policy_timer_start( _pmm_policy_timer_t *pptimer ); + +/** @brief Policy timer stop + * + * This will stop a previously created timer for use in policies + * + * @param pptimer A previously started policy timer + * @return MALI_TRUE if the timer was stopped, MALI_FALSE if it is already stopped + */ +mali_bool pmm_policy_timer_stop( _pmm_policy_timer_t *pptimer ); + +/** @brief Policy timer stop + * + * This raise an event for an expired timer + * + * @param pptimer An expired policy timer + * @return MALI_TRUE if an event was raised, else MALI_FALSE + */ +mali_bool pmm_policy_timer_raise_event( _pmm_policy_timer_t *pptimer ); + +/** @brief Policy timer valid checker + * + * This will check that a timer was started after a given time + * + * @param timer_start Time the timer was started + * @param other_start Time when another event or action occurred + * @return MALI_TRUE if the timer was started after the other time, else MALI_FALSE + */ +mali_bool pmm_policy_timer_valid( u32 timer_start, u32 other_start ); + + +/** @brief Common policy initialization + * + * This will initialize the current policy + * + * @note Any previously initialized policy should be terminated first + * + * @return _MALI_OSK_ERR_OK if the policy could be initialized, or a suitable + * _mali_osk_errcode_t otherwise. + */ +_mali_osk_errcode_t pmm_policy_init( _mali_pmm_internal_state_t *pmm ); + +/** @brief Common policy termination + * + * This will terminate the current policy. + * @note This can be called when a policy has not been initialized + */ +void pmm_policy_term( _mali_pmm_internal_state_t *pmm ); + +/** @brief Common policy state changer + * + * Given the next available event message, this routine passes it to + * the current policy for processing + * + * @param pmm internal PMM state + * @param event PMM event to process + * @return _MALI_OSK_ERR_OK if the policy state completed okay, or a suitable + * _mali_osk_errcode_t otherwise. + */ +_mali_osk_errcode_t pmm_policy_process( _mali_pmm_internal_state_t *pmm, mali_pmm_message_t *event ); + + +/** @brief Common policy checker + * + * If a policy timer fires then this function will be called to + * allow the policy to take the correct action + * + * @param pmm internal PMM state + */ +void pmm_policy_check_policy( _mali_pmm_internal_state_t *pmm ); + +/** @} */ /* End group pmmapi_policy */ +/** @} */ /* End group pmmapi */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MALI_PMM_POLICY_H__ */ |