| /* SPDX-License-Identifier: GPL-2.0 */ | 
 | /* | 
 |  * System Trace Module (STM) infrastructure | 
 |  * Copyright (c) 2014, Intel Corporation. | 
 |  * | 
 |  * STM class implements generic infrastructure for  System Trace Module devices | 
 |  * as defined in MIPI STPv2 specification. | 
 |  */ | 
 |  | 
 | #ifndef _STM_STM_H_ | 
 | #define _STM_STM_H_ | 
 |  | 
 | struct stp_policy; | 
 | struct stp_policy_node; | 
 |  | 
 | struct stp_policy_node * | 
 | stp_policy_node_lookup(struct stm_device *stm, char *s); | 
 | void stp_policy_node_put(struct stp_policy_node *policy_node); | 
 | void stp_policy_unbind(struct stp_policy *policy); | 
 |  | 
 | void stp_policy_node_get_ranges(struct stp_policy_node *policy_node, | 
 | 				unsigned int *mstart, unsigned int *mend, | 
 | 				unsigned int *cstart, unsigned int *cend); | 
 | int stp_configfs_init(void); | 
 | void stp_configfs_exit(void); | 
 |  | 
 | struct stp_master { | 
 | 	unsigned int	nr_free; | 
 | 	unsigned long	chan_map[0]; | 
 | }; | 
 |  | 
 | struct stm_device { | 
 | 	struct device		dev; | 
 | 	struct module		*owner; | 
 | 	struct stp_policy	*policy; | 
 | 	struct mutex		policy_mutex; | 
 | 	int			major; | 
 | 	unsigned int		sw_nmasters; | 
 | 	struct stm_data		*data; | 
 | 	struct mutex		link_mutex; | 
 | 	spinlock_t		link_lock; | 
 | 	struct list_head	link_list; | 
 | 	/* master allocation */ | 
 | 	spinlock_t		mc_lock; | 
 | 	struct stp_master	*masters[0]; | 
 | }; | 
 |  | 
 | #define to_stm_device(_d)				\ | 
 | 	container_of((_d), struct stm_device, dev) | 
 |  | 
 | struct stm_output { | 
 | 	spinlock_t		lock; | 
 | 	unsigned int		master; | 
 | 	unsigned int		channel; | 
 | 	unsigned int		nr_chans; | 
 | }; | 
 |  | 
 | struct stm_file { | 
 | 	struct stm_device	*stm; | 
 | 	struct stp_policy_node	*policy_node; | 
 | 	struct stm_output	output; | 
 | }; | 
 |  | 
 | struct stm_device *stm_find_device(const char *name); | 
 | void stm_put_device(struct stm_device *stm); | 
 |  | 
 | struct stm_source_device { | 
 | 	struct device		dev; | 
 | 	struct stm_source_data	*data; | 
 | 	spinlock_t		link_lock; | 
 | 	struct stm_device __rcu	*link; | 
 | 	struct list_head	link_entry; | 
 | 	/* one output per stm_source device */ | 
 | 	struct stp_policy_node	*policy_node; | 
 | 	struct stm_output	output; | 
 | }; | 
 |  | 
 | #define to_stm_source_device(_d)				\ | 
 | 	container_of((_d), struct stm_source_device, dev) | 
 |  | 
 | #endif /* _STM_STM_H_ */ |