1a818c563SMathieu Poirier /* 2a818c563SMathieu Poirier * Copyright(C) 2015 Linaro Limited. All rights reserved. 3a818c563SMathieu Poirier * Author: Mathieu Poirier <mathieu.poirier@linaro.org> 4a818c563SMathieu Poirier * 5a818c563SMathieu Poirier * This program is free software; you can redistribute it and/or modify it 6a818c563SMathieu Poirier * under the terms of the GNU General Public License version 2 as published by 7a818c563SMathieu Poirier * the Free Software Foundation. 8a818c563SMathieu Poirier * 9a818c563SMathieu Poirier * This program is distributed in the hope that it will be useful, but WITHOUT 10a818c563SMathieu Poirier * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11a818c563SMathieu Poirier * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12a818c563SMathieu Poirier * more details. 13a818c563SMathieu Poirier * 14a818c563SMathieu Poirier * You should have received a copy of the GNU General Public License along with 15a818c563SMathieu Poirier * this program. If not, see <http://www.gnu.org/licenses/>. 16a818c563SMathieu Poirier */ 17a818c563SMathieu Poirier 18a818c563SMathieu Poirier #ifndef INCLUDE__UTIL_PERF_CS_ETM_H__ 19a818c563SMathieu Poirier #define INCLUDE__UTIL_PERF_CS_ETM_H__ 20a818c563SMathieu Poirier 21440a23b3SMathieu Poirier #include "util/event.h" 22440a23b3SMathieu Poirier #include "util/session.h" 23440a23b3SMathieu Poirier 24a818c563SMathieu Poirier /* Versionning header in case things need tro change in the future. That way 25a818c563SMathieu Poirier * decoding of old snapshot is still possible. 26a818c563SMathieu Poirier */ 27a818c563SMathieu Poirier enum { 28a818c563SMathieu Poirier /* Starting with 0x0 */ 29a818c563SMathieu Poirier CS_HEADER_VERSION_0, 30a818c563SMathieu Poirier /* PMU->type (32 bit), total # of CPUs (32 bit) */ 31a818c563SMathieu Poirier CS_PMU_TYPE_CPUS, 32a818c563SMathieu Poirier CS_ETM_SNAPSHOT, 33a818c563SMathieu Poirier CS_HEADER_VERSION_0_MAX, 34a818c563SMathieu Poirier }; 35a818c563SMathieu Poirier 36a818c563SMathieu Poirier /* Beginning of header common to both ETMv3 and V4 */ 37a818c563SMathieu Poirier enum { 38a818c563SMathieu Poirier CS_ETM_MAGIC, 39a818c563SMathieu Poirier CS_ETM_CPU, 40a818c563SMathieu Poirier }; 41a818c563SMathieu Poirier 42a818c563SMathieu Poirier /* ETMv3/PTM metadata */ 43a818c563SMathieu Poirier enum { 44a818c563SMathieu Poirier /* Dynamic, configurable parameters */ 45a818c563SMathieu Poirier CS_ETM_ETMCR = CS_ETM_CPU + 1, 46a818c563SMathieu Poirier CS_ETM_ETMTRACEIDR, 47a818c563SMathieu Poirier /* RO, taken from sysFS */ 48a818c563SMathieu Poirier CS_ETM_ETMCCER, 49a818c563SMathieu Poirier CS_ETM_ETMIDR, 50a818c563SMathieu Poirier CS_ETM_PRIV_MAX, 51a818c563SMathieu Poirier }; 52a818c563SMathieu Poirier 53a818c563SMathieu Poirier /* ETMv4 metadata */ 54a818c563SMathieu Poirier enum { 55a818c563SMathieu Poirier /* Dynamic, configurable parameters */ 56a818c563SMathieu Poirier CS_ETMV4_TRCCONFIGR = CS_ETM_CPU + 1, 57a818c563SMathieu Poirier CS_ETMV4_TRCTRACEIDR, 58a818c563SMathieu Poirier /* RO, taken from sysFS */ 59a818c563SMathieu Poirier CS_ETMV4_TRCIDR0, 60a818c563SMathieu Poirier CS_ETMV4_TRCIDR1, 61a818c563SMathieu Poirier CS_ETMV4_TRCIDR2, 62a818c563SMathieu Poirier CS_ETMV4_TRCIDR8, 63a818c563SMathieu Poirier CS_ETMV4_TRCAUTHSTATUS, 64a818c563SMathieu Poirier CS_ETMV4_PRIV_MAX, 65a818c563SMathieu Poirier }; 66a818c563SMathieu Poirier 67cd8bfd8cSTor Jeremiassen /* RB tree for quick conversion between traceID and CPUs */ 68cd8bfd8cSTor Jeremiassen struct intlist *traceid_list; 69cd8bfd8cSTor Jeremiassen 70a818c563SMathieu Poirier #define KiB(x) ((x) * 1024) 71a818c563SMathieu Poirier #define MiB(x) ((x) * 1024 * 1024) 72a818c563SMathieu Poirier 73a818c563SMathieu Poirier #define CS_ETM_HEADER_SIZE (CS_HEADER_VERSION_0_MAX * sizeof(u64)) 74a818c563SMathieu Poirier 75a818c563SMathieu Poirier static const u64 __perf_cs_etmv3_magic = 0x3030303030303030ULL; 76a818c563SMathieu Poirier static const u64 __perf_cs_etmv4_magic = 0x4040404040404040ULL; 77a818c563SMathieu Poirier #define CS_ETMV3_PRIV_SIZE (CS_ETM_PRIV_MAX * sizeof(u64)) 78a818c563SMathieu Poirier #define CS_ETMV4_PRIV_SIZE (CS_ETMV4_PRIV_MAX * sizeof(u64)) 79a818c563SMathieu Poirier 80440a23b3SMathieu Poirier #ifdef HAVE_CSTRACE_SUPPORT 81440a23b3SMathieu Poirier int cs_etm__process_auxtrace_info(union perf_event *event, 82440a23b3SMathieu Poirier struct perf_session *session); 83440a23b3SMathieu Poirier #else 84440a23b3SMathieu Poirier static inline int 85440a23b3SMathieu Poirier cs_etm__process_auxtrace_info(union perf_event *event __maybe_unused, 86440a23b3SMathieu Poirier struct perf_session *session __maybe_unused) 87440a23b3SMathieu Poirier { 88440a23b3SMathieu Poirier return -1; 89440a23b3SMathieu Poirier } 90440a23b3SMathieu Poirier #endif 91440a23b3SMathieu Poirier 92a818c563SMathieu Poirier #endif 93