1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * System Trace Module (STM) infrastructure 4 * Copyright (c) 2014, Intel Corporation. 5 * 6 * STM class implements generic infrastructure for System Trace Module devices 7 * as defined in MIPI STPv2 specification. 8 */ 9 10#ifndef _STM_STM_H_ 11#define _STM_STM_H_ 12 13struct stp_policy; 14struct stp_policy_node; 15 16struct stp_policy_node * 17stp_policy_node_lookup(struct stm_device *stm, char *s); 18void stp_policy_node_put(struct stp_policy_node *policy_node); 19void stp_policy_unbind(struct stp_policy *policy); 20 21void stp_policy_node_get_ranges(struct stp_policy_node *policy_node, 22 unsigned int *mstart, unsigned int *mend, 23 unsigned int *cstart, unsigned int *cend); 24int stp_configfs_init(void); 25void stp_configfs_exit(void); 26 27struct stp_master { 28 unsigned int nr_free; 29 unsigned long chan_map[0]; 30}; 31 32struct stm_device { 33 struct device dev; 34 struct module *owner; 35 struct stp_policy *policy; 36 struct mutex policy_mutex; 37 int major; 38 unsigned int sw_nmasters; 39 struct stm_data *data; 40 struct mutex link_mutex; 41 spinlock_t link_lock; 42 struct list_head link_list; 43 /* master allocation */ 44 spinlock_t mc_lock; 45 struct stp_master *masters[0]; 46}; 47 48#define to_stm_device(_d) \ 49 container_of((_d), struct stm_device, dev) 50 51struct stm_output { 52 spinlock_t lock; 53 unsigned int master; 54 unsigned int channel; 55 unsigned int nr_chans; 56}; 57 58struct stm_file { 59 struct stm_device *stm; 60 struct stp_policy_node *policy_node; 61 struct stm_output output; 62}; 63 64struct stm_device *stm_find_device(const char *name); 65void stm_put_device(struct stm_device *stm); 66 67struct stm_source_device { 68 struct device dev; 69 struct stm_source_data *data; 70 spinlock_t link_lock; 71 struct stm_device __rcu *link; 72 struct list_head link_entry; 73 /* one output per stm_source device */ 74 struct stp_policy_node *policy_node; 75 struct stm_output output; 76}; 77 78#define to_stm_source_device(_d) \ 79 container_of((_d), struct stm_source_device, dev) 80 81#endif /* _STM_STM_H_ */ 82