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 |