Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski...
[cascardo/linux.git] / drivers / hwtracing / coresight / coresight-etm-perf.h
1 /*
2  * Copyright(C) 2015 Linaro Limited. All rights reserved.
3  * Author: Mathieu Poirier <mathieu.poirier@linaro.org>
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 as published by
7  * the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12  * more details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
17
18 #ifndef _CORESIGHT_ETM_PERF_H
19 #define _CORESIGHT_ETM_PERF_H
20
21 #include "coresight-priv.h"
22
23 struct coresight_device;
24
25 /*
26  * In both ETMv3 and v4 the maximum number of address comparator implentable
27  * is 8.  The actual number is implementation specific and will be checked
28  * when filters are applied.
29  */
30 #define ETM_ADDR_CMP_MAX        8
31
32 /**
33  * struct etm_filter - single instruction range or start/stop configuration.
34  * @start_addr: The address to start tracing on.
35  * @stop_addr:  The address to stop tracing on.
36  * @type:       Is this a range or start/stop filter.
37  */
38 struct etm_filter {
39         unsigned long start_addr;
40         unsigned long stop_addr;
41         enum etm_addr_type type;
42 };
43
44 /**
45  * struct etm_filters - set of filters for a session
46  * @etm_filter: All the filters for this session.
47  * @nr_filters: Number of filters
48  * @ssstatus:   Status of the start/stop logic.
49  */
50 struct etm_filters {
51         struct etm_filter       etm_filter[ETM_ADDR_CMP_MAX];
52         unsigned int            nr_filters;
53         bool                    ssstatus;
54 };
55
56
57 #ifdef CONFIG_CORESIGHT
58 int etm_perf_symlink(struct coresight_device *csdev, bool link);
59
60 #else
61 static inline int etm_perf_symlink(struct coresight_device *csdev, bool link)
62 { return -EINVAL; }
63
64 #endif /* CONFIG_CORESIGHT */
65
66 #endif