pmc_mdep.h revision 283112
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: head/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