eventmanager.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /*
  2. * Copyright 2015 Advanced Micro Devices, Inc.
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a
  5. * copy of this software and associated documentation files (the "Software"),
  6. * to deal in the Software without restriction, including without limitation
  7. * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8. * and/or sell copies of the Software, and to permit persons to whom the
  9. * Software is furnished to do so, subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be included in
  12. * all copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  17. * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
  18. * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  19. * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  20. * OTHER DEALINGS IN THE SOFTWARE.
  21. *
  22. */
  23. #ifndef _EVENT_MANAGER_H_
  24. #define _EVENT_MANAGER_H_
  25. #include "power_state.h"
  26. #include "pp_power_source.h"
  27. #include "hardwaremanager.h"
  28. #include "pp_asicblocks.h"
  29. struct pp_eventmgr;
  30. enum amd_pp_event;
  31. enum PEM_EventDataValid {
  32. PEM_EventDataValid_RequestedStateID = 0,
  33. PEM_EventDataValid_RequestedUILabel,
  34. PEM_EventDataValid_NewPowerState,
  35. PEM_EventDataValid_RequestedPowerSource,
  36. PEM_EventDataValid_RequestedClocks,
  37. PEM_EventDataValid_CurrentTemperature,
  38. PEM_EventDataValid_AsicBlocks,
  39. PEM_EventDataValid_ODParameters,
  40. PEM_EventDataValid_PXAdapterPrefs,
  41. PEM_EventDataValid_PXUserPrefs,
  42. PEM_EventDataValid_PXSwitchReason,
  43. PEM_EventDataValid_PXSwitchPhase,
  44. PEM_EventDataValid_HdVideo,
  45. PEM_EventDataValid_BacklightLevel,
  46. PEM_EventDatavalid_VariBrightParams,
  47. PEM_EventDataValid_VariBrightLevel,
  48. PEM_EventDataValid_VariBrightImmediateChange,
  49. PEM_EventDataValid_PercentWhite,
  50. PEM_EventDataValid_SdVideo,
  51. PEM_EventDataValid_HTLinkChangeReason,
  52. PEM_EventDataValid_HWBlocks,
  53. PEM_EventDataValid_RequestedThermalState,
  54. PEM_EventDataValid_MvcVideo,
  55. PEM_EventDataValid_Max
  56. };
  57. typedef enum PEM_EventDataValid PEM_EventDataValid;
  58. /* Number of bits in ULONG variable */
  59. #define PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD (sizeof(unsigned long)*8)
  60. /* Number of ULONG entries used by event data valid bits */
  61. #define PEM_MAX_NUM_EVENTDATAVALID_ULONG_ENTRIES \
  62. ((PEM_EventDataValid_Max + PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD - 1) / \
  63. PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD)
  64. static inline void pem_set_event_data_valid(unsigned long *fields, PEM_EventDataValid valid_field)
  65. {
  66. fields[valid_field / PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD] |=
  67. (1UL << (valid_field % PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD));
  68. }
  69. static inline void pem_unset_event_data_valid(unsigned long *fields, PEM_EventDataValid valid_field)
  70. {
  71. fields[valid_field / PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD] &=
  72. ~(1UL << (valid_field % PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD));
  73. }
  74. static inline unsigned long pem_is_event_data_valid(const unsigned long *fields, PEM_EventDataValid valid_field)
  75. {
  76. return fields[valid_field / PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD] &
  77. (1UL << (valid_field % PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD));
  78. }
  79. struct pem_event_data {
  80. unsigned long valid_fields[100];
  81. unsigned long requested_state_id;
  82. enum PP_StateUILabel requested_ui_label;
  83. struct pp_power_state *pnew_power_state;
  84. enum pp_power_source requested_power_source;
  85. struct PP_Clocks requested_clocks;
  86. bool skip_state_adjust_rules;
  87. struct phm_asic_blocks asic_blocks;
  88. /* to doPP_ThermalState requestedThermalState;
  89. enum ThermalStateRequestSrc requestThermalStateSrc;
  90. PP_Temperature currentTemperature;*/
  91. };
  92. int pem_handle_event(struct pp_eventmgr *eventmgr, enum amd_pp_event event,
  93. struct pem_event_data *event_data);
  94. bool pem_is_hw_access_blocked(struct pp_eventmgr *eventmgr);
  95. #endif /* _EVENT_MANAGER_H_ */