mali_pm_domain.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. * This confidential and proprietary software may be used only as
  3. * authorised by a licensing agreement from ARM Limited
  4. * (C) COPYRIGHT 2013 ARM Limited
  5. * ALL RIGHTS RESERVED
  6. * The entire notice above must be reproduced on all authorised
  7. * copies and copies may only be made to the extent permitted
  8. * by a licensing agreement from ARM Limited.
  9. */
  10. #ifndef __MALI_PM_DOMAIN_H__
  11. #define __MALI_PM_DOMAIN_H__
  12. #include "mali_kernel_common.h"
  13. #include "mali_osk.h"
  14. #include "mali_l2_cache.h"
  15. #include "mali_group.h"
  16. #include "mali_pmu.h"
  17. typedef enum {
  18. MALI_PM_DOMAIN_ON,
  19. MALI_PM_DOMAIN_OFF,
  20. } mali_pm_domain_state;
  21. struct mali_pm_domain {
  22. mali_pm_domain_state state;
  23. _mali_osk_spinlock_irq_t *lock;
  24. s32 use_count;
  25. u32 pmu_mask;
  26. int group_count;
  27. struct mali_group *group_list;
  28. struct mali_l2_cache_core *l2;
  29. };
  30. struct mali_pm_domain *mali_pm_domain_create(u32 pmu_mask);
  31. void mali_pm_domain_add_group(u32 mask, struct mali_group *group);
  32. void mali_pm_domain_add_l2(u32 mask, struct mali_l2_cache_core *l2);
  33. void mali_pm_domain_delete(struct mali_pm_domain *domain);
  34. void mali_pm_domain_terminate(void);
  35. /** Get PM domain from domain ID
  36. */
  37. struct mali_pm_domain *mali_pm_domain_get_from_mask(u32 mask);
  38. struct mali_pm_domain *mali_pm_domain_get_from_index(u32 id);
  39. /* Ref counting */
  40. void mali_pm_domain_ref_get(struct mali_pm_domain *domain);
  41. void mali_pm_domain_ref_put(struct mali_pm_domain *domain);
  42. MALI_STATIC_INLINE struct mali_l2_cache_core *mali_pm_domain_l2_get(struct mali_pm_domain *domain)
  43. {
  44. return domain->l2;
  45. }
  46. MALI_STATIC_INLINE mali_pm_domain_state mali_pm_domain_state_get(struct mali_pm_domain *domain)
  47. {
  48. return domain->state;
  49. }
  50. mali_bool mali_pm_domain_lock_state(struct mali_pm_domain *domain);
  51. void mali_pm_domain_unlock_state(struct mali_pm_domain *domain);
  52. #define MALI_PM_DOMAIN_FOR_EACH_GROUP(group, domain) for ((group) = (domain)->group_list;\
  53. NULL != (group); (group) = (group)->pm_domain_list)
  54. #endif /* __MALI_PM_DOMAIN_H__ */