| /* | |
| * Copyright 2015 Advanced Micro Devices, Inc. | |
| * | |
| * Permission is hereby granted, free of charge, to any person obtaining a | |
| * copy of this software and associated documentation files (the "Software"), | |
| * to deal in the Software without restriction, including without limitation | |
| * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
| * and/or sell copies of the Software, and to permit persons to whom the | |
| * Software is furnished to do so, subject to the following conditions: | |
| * | |
| * The above copyright notice and this permission notice shall be included in | |
| * all copies or substantial portions of the Software. | |
| * | |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | |
| * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | |
| * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | |
| * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | |
| * OTHER DEALINGS IN THE SOFTWARE. | |
| * | |
| */ | |
| #ifndef _EVENT_MANAGER_H_ | |
| #define _EVENT_MANAGER_H_ | |
| #include "power_state.h" | |
| #include "pp_power_source.h" | |
| #include "hardwaremanager.h" | |
| #include "pp_asicblocks.h" | |
| struct pp_eventmgr; | |
| enum amd_pp_event; | |
| enum PEM_EventDataValid { | |
| PEM_EventDataValid_RequestedStateID = 0, | |
| PEM_EventDataValid_RequestedUILabel, | |
| PEM_EventDataValid_NewPowerState, | |
| PEM_EventDataValid_RequestedPowerSource, | |
| PEM_EventDataValid_RequestedClocks, | |
| PEM_EventDataValid_CurrentTemperature, | |
| PEM_EventDataValid_AsicBlocks, | |
| PEM_EventDataValid_ODParameters, | |
| PEM_EventDataValid_PXAdapterPrefs, | |
| PEM_EventDataValid_PXUserPrefs, | |
| PEM_EventDataValid_PXSwitchReason, | |
| PEM_EventDataValid_PXSwitchPhase, | |
| PEM_EventDataValid_HdVideo, | |
| PEM_EventDataValid_BacklightLevel, | |
| PEM_EventDatavalid_VariBrightParams, | |
| PEM_EventDataValid_VariBrightLevel, | |
| PEM_EventDataValid_VariBrightImmediateChange, | |
| PEM_EventDataValid_PercentWhite, | |
| PEM_EventDataValid_SdVideo, | |
| PEM_EventDataValid_HTLinkChangeReason, | |
| PEM_EventDataValid_HWBlocks, | |
| PEM_EventDataValid_RequestedThermalState, | |
| PEM_EventDataValid_MvcVideo, | |
| PEM_EventDataValid_Max | |
| }; | |
| typedef enum PEM_EventDataValid PEM_EventDataValid; | |
| /* Number of bits in ULONG variable */ | |
| #define PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD (sizeof(unsigned long)*8) | |
| /* Number of ULONG entries used by event data valid bits */ | |
| #define PEM_MAX_NUM_EVENTDATAVALID_ULONG_ENTRIES \ | |
| ((PEM_EventDataValid_Max + PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD - 1) / \ | |
| PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD) | |
| static inline void pem_set_event_data_valid(unsigned long *fields, PEM_EventDataValid valid_field) | |
| { | |
| fields[valid_field / PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD] |= | |
| (1UL << (valid_field % PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD)); | |
| } | |
| static inline void pem_unset_event_data_valid(unsigned long *fields, PEM_EventDataValid valid_field) | |
| { | |
| fields[valid_field / PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD] &= | |
| ~(1UL << (valid_field % PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD)); | |
| } | |
| static inline unsigned long pem_is_event_data_valid(const unsigned long *fields, PEM_EventDataValid valid_field) | |
| { | |
| return fields[valid_field / PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD] & | |
| (1UL << (valid_field % PEM_MAX_NUM_EVENTDATAVALID_BITS_PER_FIELD)); | |
| } | |
| struct pem_event_data { | |
| unsigned long valid_fields[100]; | |
| unsigned long requested_state_id; | |
| enum PP_StateUILabel requested_ui_label; | |
| struct pp_power_state *pnew_power_state; | |
| enum pp_power_source requested_power_source; | |
| struct PP_Clocks requested_clocks; | |
| bool skip_state_adjust_rules; | |
| struct phm_asic_blocks asic_blocks; | |
| /* to doPP_ThermalState requestedThermalState; | |
| enum ThermalStateRequestSrc requestThermalStateSrc; | |
| PP_Temperature currentTemperature;*/ | |
| }; | |
| int pem_handle_event(struct pp_eventmgr *eventmgr, enum amd_pp_event event, | |
| struct pem_event_data *event_data); | |
| bool pem_is_hw_access_blocked(struct pp_eventmgr *eventmgr); | |
| #endif /* _EVENT_MANAGER_H_ */ |