18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * intel_soc_dts_iosf.h
48c2ecf20Sopenharmony_ci * Copyright (c) 2015, Intel Corporation.
58c2ecf20Sopenharmony_ci */
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci#ifndef _INTEL_SOC_DTS_IOSF_CORE_H
88c2ecf20Sopenharmony_ci#define _INTEL_SOC_DTS_IOSF_CORE_H
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#include <linux/thermal.h>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci/* DTS0 and DTS 1 */
138c2ecf20Sopenharmony_ci#define SOC_MAX_DTS_SENSORS	2
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_cienum intel_soc_dts_interrupt_type {
168c2ecf20Sopenharmony_ci	INTEL_SOC_DTS_INTERRUPT_NONE,
178c2ecf20Sopenharmony_ci	INTEL_SOC_DTS_INTERRUPT_APIC,
188c2ecf20Sopenharmony_ci	INTEL_SOC_DTS_INTERRUPT_MSI,
198c2ecf20Sopenharmony_ci	INTEL_SOC_DTS_INTERRUPT_SCI,
208c2ecf20Sopenharmony_ci	INTEL_SOC_DTS_INTERRUPT_SMI,
218c2ecf20Sopenharmony_ci};
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_cistruct intel_soc_dts_sensors;
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_cistruct intel_soc_dts_sensor_entry {
268c2ecf20Sopenharmony_ci	int id;
278c2ecf20Sopenharmony_ci	u32 store_status;
288c2ecf20Sopenharmony_ci	u32 trip_mask;
298c2ecf20Sopenharmony_ci	u32 trip_count;
308c2ecf20Sopenharmony_ci	enum thermal_trip_type trip_types[2];
318c2ecf20Sopenharmony_ci	struct thermal_zone_device *tzone;
328c2ecf20Sopenharmony_ci	struct intel_soc_dts_sensors *sensors;
338c2ecf20Sopenharmony_ci};
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_cistruct intel_soc_dts_sensors {
368c2ecf20Sopenharmony_ci	u32 tj_max;
378c2ecf20Sopenharmony_ci	spinlock_t intr_notify_lock;
388c2ecf20Sopenharmony_ci	struct mutex dts_update_lock;
398c2ecf20Sopenharmony_ci	enum intel_soc_dts_interrupt_type intr_type;
408c2ecf20Sopenharmony_ci	struct intel_soc_dts_sensor_entry soc_dts[SOC_MAX_DTS_SENSORS];
418c2ecf20Sopenharmony_ci};
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_cistruct intel_soc_dts_sensors *intel_soc_dts_iosf_init(
448c2ecf20Sopenharmony_ci	enum intel_soc_dts_interrupt_type intr_type, int trip_count,
458c2ecf20Sopenharmony_ci	int read_only_trip_count);
468c2ecf20Sopenharmony_civoid intel_soc_dts_iosf_exit(struct intel_soc_dts_sensors *sensors);
478c2ecf20Sopenharmony_civoid intel_soc_dts_iosf_interrupt_handler(
488c2ecf20Sopenharmony_ci				struct intel_soc_dts_sensors *sensors);
498c2ecf20Sopenharmony_ciint intel_soc_dts_iosf_add_read_only_critical_trip(
508c2ecf20Sopenharmony_ci	struct intel_soc_dts_sensors *sensors, int critical_offset);
518c2ecf20Sopenharmony_ci#endif
52