|  | /* 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_ */ |