1359b84f8SDamian Muszynski /* SPDX-License-Identifier: GPL-2.0-only */ 2359b84f8SDamian Muszynski /* Copyright(c) 2023 Intel Corporation */ 3359b84f8SDamian Muszynski 4359b84f8SDamian Muszynski #ifndef ADF_HEARTBEAT_H_ 5359b84f8SDamian Muszynski #define ADF_HEARTBEAT_H_ 6359b84f8SDamian Muszynski 7359b84f8SDamian Muszynski #include <linux/types.h> 8359b84f8SDamian Muszynski 9359b84f8SDamian Muszynski struct adf_accel_dev; 10359b84f8SDamian Muszynski struct dentry; 11359b84f8SDamian Muszynski 12359b84f8SDamian Muszynski #define ADF_CFG_HB_TIMER_MIN_MS 200 13359b84f8SDamian Muszynski #define ADF_CFG_HB_TIMER_DEFAULT_MS 500 14359b84f8SDamian Muszynski #define ADF_CFG_HB_COUNT_THRESHOLD 3 15359b84f8SDamian Muszynski 16359b84f8SDamian Muszynski enum adf_device_heartbeat_status { 17359b84f8SDamian Muszynski HB_DEV_UNRESPONSIVE = 0, 18359b84f8SDamian Muszynski HB_DEV_ALIVE, 19359b84f8SDamian Muszynski HB_DEV_UNSUPPORTED, 20359b84f8SDamian Muszynski }; 21359b84f8SDamian Muszynski 22359b84f8SDamian Muszynski struct adf_heartbeat { 23359b84f8SDamian Muszynski unsigned int hb_sent_counter; 24359b84f8SDamian Muszynski unsigned int hb_failed_counter; 25359b84f8SDamian Muszynski unsigned int hb_timer; 26359b84f8SDamian Muszynski u64 last_hb_check_time; 27*bec61a29SDamian Muszynski bool ctrs_cnt_checked; 28359b84f8SDamian Muszynski struct hb_dma_addr { 29359b84f8SDamian Muszynski dma_addr_t phy_addr; 30359b84f8SDamian Muszynski void *virt_addr; 31359b84f8SDamian Muszynski } dma; 32359b84f8SDamian Muszynski struct { 33359b84f8SDamian Muszynski struct dentry *base_dir; 34359b84f8SDamian Muszynski struct dentry *status; 35359b84f8SDamian Muszynski struct dentry *cfg; 36359b84f8SDamian Muszynski struct dentry *sent; 37359b84f8SDamian Muszynski struct dentry *failed; 38359b84f8SDamian Muszynski } dbgfs; 39359b84f8SDamian Muszynski }; 40359b84f8SDamian Muszynski 41359b84f8SDamian Muszynski #ifdef CONFIG_DEBUG_FS 42359b84f8SDamian Muszynski int adf_heartbeat_init(struct adf_accel_dev *accel_dev); 43359b84f8SDamian Muszynski int adf_heartbeat_start(struct adf_accel_dev *accel_dev); 44359b84f8SDamian Muszynski void adf_heartbeat_shutdown(struct adf_accel_dev *accel_dev); 45359b84f8SDamian Muszynski 46359b84f8SDamian Muszynski int adf_heartbeat_ms_to_ticks(struct adf_accel_dev *accel_dev, unsigned int time_ms, 47359b84f8SDamian Muszynski uint32_t *value); 48359b84f8SDamian Muszynski int adf_heartbeat_save_cfg_param(struct adf_accel_dev *accel_dev, 49359b84f8SDamian Muszynski unsigned int timer_ms); 50359b84f8SDamian Muszynski void adf_heartbeat_status(struct adf_accel_dev *accel_dev, 51359b84f8SDamian Muszynski enum adf_device_heartbeat_status *hb_status); 52*bec61a29SDamian Muszynski void adf_heartbeat_check_ctrs(struct adf_accel_dev *accel_dev); 53359b84f8SDamian Muszynski 54359b84f8SDamian Muszynski #else adf_heartbeat_init(struct adf_accel_dev * accel_dev)55359b84f8SDamian Muszynskistatic inline int adf_heartbeat_init(struct adf_accel_dev *accel_dev) 56359b84f8SDamian Muszynski { 57359b84f8SDamian Muszynski return 0; 58359b84f8SDamian Muszynski } 59359b84f8SDamian Muszynski adf_heartbeat_start(struct adf_accel_dev * accel_dev)60359b84f8SDamian Muszynskistatic inline int adf_heartbeat_start(struct adf_accel_dev *accel_dev) 61359b84f8SDamian Muszynski { 62359b84f8SDamian Muszynski return 0; 63359b84f8SDamian Muszynski } 64359b84f8SDamian Muszynski adf_heartbeat_shutdown(struct adf_accel_dev * accel_dev)65359b84f8SDamian Muszynskistatic inline void adf_heartbeat_shutdown(struct adf_accel_dev *accel_dev) 66359b84f8SDamian Muszynski { 67359b84f8SDamian Muszynski } 68359b84f8SDamian Muszynski adf_heartbeat_save_cfg_param(struct adf_accel_dev * accel_dev,unsigned int timer_ms)69359b84f8SDamian Muszynskistatic inline int adf_heartbeat_save_cfg_param(struct adf_accel_dev *accel_dev, 70359b84f8SDamian Muszynski unsigned int timer_ms) 71359b84f8SDamian Muszynski { 72359b84f8SDamian Muszynski return 0; 73359b84f8SDamian Muszynski } 74*bec61a29SDamian Muszynski adf_heartbeat_check_ctrs(struct adf_accel_dev * accel_dev)75*bec61a29SDamian Muszynskistatic inline void adf_heartbeat_check_ctrs(struct adf_accel_dev *accel_dev) 76*bec61a29SDamian Muszynski { 77*bec61a29SDamian Muszynski } 78359b84f8SDamian Muszynski #endif 79359b84f8SDamian Muszynski #endif /* ADF_HEARTBEAT_H_ */ 80