| /* | |
| * System Trace Module (STM) infrastructure | |
| * Copyright (c) 2014, Intel Corporation. | |
| * | |
| * This program is free software; you can redistribute it and/or modify it | |
| * under the terms and conditions of the GNU General Public License, | |
| * version 2, as published by the Free Software Foundation. | |
| * | |
| * This program is distributed in the hope it will be useful, but WITHOUT | |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
| * more details. | |
| * | |
| * 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_ */ |