1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * intel_soc_dts_iosf.h 4 * Copyright (c) 2015, Intel Corporation. 5 */ 6 7 #ifndef _INTEL_SOC_DTS_IOSF_CORE_H 8 #define _INTEL_SOC_DTS_IOSF_CORE_H 9 10 #include <linux/thermal.h> 11 12 /* DTS0 and DTS 1 */ 13 #define SOC_MAX_DTS_SENSORS 2 14 15 /* Only 2 out of 4 is allowed for OSPM */ 16 #define SOC_MAX_DTS_TRIPS 2 17 18 enum intel_soc_dts_interrupt_type { 19 INTEL_SOC_DTS_INTERRUPT_NONE, 20 INTEL_SOC_DTS_INTERRUPT_APIC, 21 INTEL_SOC_DTS_INTERRUPT_MSI, 22 INTEL_SOC_DTS_INTERRUPT_SCI, 23 INTEL_SOC_DTS_INTERRUPT_SMI, 24 }; 25 26 struct intel_soc_dts_sensors; 27 28 struct intel_soc_dts_sensor_entry { 29 int id; 30 u32 store_status; 31 u32 trip_mask; 32 struct thermal_trip trips[SOC_MAX_DTS_TRIPS]; 33 struct thermal_zone_device *tzone; 34 struct intel_soc_dts_sensors *sensors; 35 }; 36 37 struct intel_soc_dts_sensors { 38 u32 tj_max; 39 spinlock_t intr_notify_lock; 40 struct mutex dts_update_lock; 41 enum intel_soc_dts_interrupt_type intr_type; 42 struct intel_soc_dts_sensor_entry soc_dts[SOC_MAX_DTS_SENSORS]; 43 }; 44 45 46 struct intel_soc_dts_sensors * 47 intel_soc_dts_iosf_init(enum intel_soc_dts_interrupt_type intr_type, 48 bool critical_trip, int crit_offset); 49 void intel_soc_dts_iosf_exit(struct intel_soc_dts_sensors *sensors); 50 void intel_soc_dts_iosf_interrupt_handler( 51 struct intel_soc_dts_sensors *sensors); 52 #endif 53