1280364Sandrew/*-
2280364Sandrew * Copyright (c) 2009 Rui Paulo <rpaulo@FreeBSD.org>
3280364Sandrew * All rights reserved.
4280364Sandrew *
5280364Sandrew * Redistribution and use in source and binary forms, with or without
6280364Sandrew * modification, are permitted provided that the following conditions
7280364Sandrew * are met:
8280364Sandrew * 1. Redistributions of source code must retain the above copyright
9280364Sandrew *    notice, this list of conditions and the following disclaimer.
10280364Sandrew * 2. Redistributions in binary form must reproduce the above copyright
11280364Sandrew *    notice, this list of conditions and the following disclaimer in the
12280364Sandrew *    documentation and/or other materials provided with the distribution.
13280364Sandrew *
14280364Sandrew * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15280364Sandrew * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16280364Sandrew * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17280364Sandrew * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
18280364Sandrew * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19280364Sandrew * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20280364Sandrew * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21280364Sandrew * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
22280364Sandrew * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
23280364Sandrew * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24280364Sandrew * POSSIBILITY OF SUCH DAMAGE.
25280364Sandrew *
26280364Sandrew * $FreeBSD: releng/11.0/sys/arm64/include/pmc_mdep.h 283112 2015-05-19 15:25:47Z br $
27280364Sandrew */
28280364Sandrew
29280364Sandrew#ifndef _MACHINE_PMC_MDEP_H_
30280364Sandrew#define	_MACHINE_PMC_MDEP_H_
31280364Sandrew
32283112Sbr#define	PMC_MDEP_CLASS_INDEX_ARMV8	1
33283112Sbr/*
34283112Sbr * On the ARMv8 platform we support the following PMCs.
35283112Sbr *
36283112Sbr * ARMV8	ARM Cortex-A53/57/72 processors
37283112Sbr */
38283112Sbr#include <dev/hwpmc/hwpmc_arm64.h>
39283112Sbr
40280364Sandrewunion pmc_md_op_pmcallocate {
41280364Sandrew	uint64_t		__pad[4];
42280364Sandrew};
43280364Sandrew
44280364Sandrew/* Logging */
45280364Sandrew#define	PMCLOG_READADDR		PMCLOG_READ64
46280364Sandrew#define	PMCLOG_EMITADDR		PMCLOG_EMIT64
47280364Sandrew
48280364Sandrew#ifdef	_KERNEL
49280364Sandrewunion pmc_md_pmc {
50283112Sbr	struct pmc_md_arm64_pmc		pm_arm64;
51280364Sandrew};
52280364Sandrew
53283112Sbr#define	PMC_IN_KERNEL_STACK(S,START,END)		\
54283112Sbr	((S) >= (START) && (S) < (END))
55283112Sbr#define	PMC_IN_KERNEL(va)	INKERNEL((va))
56283112Sbr#define	PMC_IN_USERSPACE(va) ((va) <= VM_MAXUSER_ADDRESS)
57283112Sbr#define	PMC_TRAPFRAME_TO_PC(TF)		((TF)->tf_lr)
58283112Sbr#define	PMC_TRAPFRAME_TO_FP(TF)		((TF)->tf_x[29])
59280364Sandrew
60283112Sbr/*
61283112Sbr * Prototypes
62283112Sbr */
63283112Sbrstruct pmc_mdep *pmc_arm64_initialize(void);
64283112Sbrvoid	pmc_arm64_finalize(struct pmc_mdep *_md);
65280364Sandrew#endif /* _KERNEL */
66280364Sandrew
67280364Sandrew#endif /* !_MACHINE_PMC_MDEP_H_ */
68