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 enum intel_soc_dts_interrupt_type { 16 INTEL_SOC_DTS_INTERRUPT_NONE, 17 INTEL_SOC_DTS_INTERRUPT_APIC, 18 INTEL_SOC_DTS_INTERRUPT_MSI, 19 INTEL_SOC_DTS_INTERRUPT_SCI, 20 INTEL_SOC_DTS_INTERRUPT_SMI, 21 }; 22 23 struct intel_soc_dts_sensors; 24 25 struct intel_soc_dts_sensor_entry { 26 int id; 27 u32 temp_mask; 28 u32 temp_shift; 29 u32 store_status; 30 u32 trip_mask; 31 u32 trip_count; 32 enum thermal_trip_type trip_types[2]; 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 struct intel_soc_dts_sensors *intel_soc_dts_iosf_init( 46 enum intel_soc_dts_interrupt_type intr_type, int trip_count, 47 int read_only_trip_count); 48 void intel_soc_dts_iosf_exit(struct intel_soc_dts_sensors *sensors); 49 void intel_soc_dts_iosf_interrupt_handler( 50 struct intel_soc_dts_sensors *sensors); 51 int intel_soc_dts_iosf_add_read_only_critical_trip( 52 struct intel_soc_dts_sensors *sensors, int critical_offset); 53 #endif 54