pmc_mdep.h revision 235831
1145332Smarcel/*- 2200928Srpaulo * Copyright (c) 2009 Rui Paulo <rpaulo@FreeBSD.org> 3200928Srpaulo * All rights reserved. 4145332Smarcel * 5200928Srpaulo * Redistribution and use in source and binary forms, with or without 6200928Srpaulo * modification, are permitted provided that the following conditions 7200928Srpaulo * are met: 8200928Srpaulo * 1. Redistributions of source code must retain the above copyright 9200928Srpaulo * notice, this list of conditions and the following disclaimer. 10200928Srpaulo * 2. Redistributions in binary form must reproduce the above copyright 11200928Srpaulo * notice, this list of conditions and the following disclaimer in the 12200928Srpaulo * documentation and/or other materials provided with the distribution. 13200928Srpaulo * 14200928Srpaulo * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 15200928Srpaulo * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16200928Srpaulo * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17200928Srpaulo * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 18200928Srpaulo * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19200928Srpaulo * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 20200928Srpaulo * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21200928Srpaulo * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 22200928Srpaulo * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 23200928Srpaulo * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 24200928Srpaulo * POSSIBILITY OF SUCH DAMAGE. 25200928Srpaulo * 26145332Smarcel * $FreeBSD: head/sys/arm/include/pmc_mdep.h 235831 2012-05-23 13:23:40Z fabient $ 27145332Smarcel */ 28145332Smarcel 29145332Smarcel#ifndef _MACHINE_PMC_MDEP_H_ 30145332Smarcel#define _MACHINE_PMC_MDEP_H_ 31145332Smarcel 32233628Sfabient#define PMC_MDEP_CLASS_INDEX_XSCALE 1 33200928Srpaulo/* 34200928Srpaulo * On the ARM platform we support the following PMCs. 35200928Srpaulo * 36200928Srpaulo * XSCALE Intel XScale processors 37200928Srpaulo */ 38200928Srpaulo#include <dev/hwpmc/hwpmc_xscale.h> 39200928Srpaulo 40147191Sjkoshyunion pmc_md_op_pmcallocate { 41147191Sjkoshy uint64_t __pad[4]; 42147191Sjkoshy}; 43147191Sjkoshy 44147191Sjkoshy/* Logging */ 45147191Sjkoshy#define PMCLOG_READADDR PMCLOG_READ32 46147191Sjkoshy#define PMCLOG_EMITADDR PMCLOG_EMIT32 47147191Sjkoshy 48200928Srpaulo#ifdef _KERNEL 49147191Sjkoshyunion pmc_md_pmc { 50200928Srpaulo struct pmc_md_xscale_pmc pm_xscale; 51147191Sjkoshy}; 52147191Sjkoshy 53200928Srpaulo#define PMC_TRAPFRAME_TO_PC(TF) ((TF)->tf_pc) 54200928Srpaulo#define PMC_TRAPFRAME_TO_FP(TF) ((TF)->tf_usr_lr) 55200928Srpaulo#define PMC_TRAPFRAME_TO_SP(TF) ((TF)->tf_usr_sp) 56174405Sjkoshy 57235831Sfabient/* Build a fake kernel trapframe from current instruction pointer. */ 58235831Sfabient#define PMC_FAKE_TRAPFRAME(TF) \ 59235831Sfabient do { \ 60235831Sfabient __asm __volatile("mov %0, pc" : "=r" ((TF)->tf_pc)); \ 61235831Sfabient } while (0) 62235831Sfabient 63200928Srpaulo/* 64200928Srpaulo * Prototypes 65200928Srpaulo */ 66200928Srpaulostruct pmc_mdep *pmc_xscale_initialize(void); 67200928Srpaulovoid pmc_xscale_finalize(struct pmc_mdep *_md); 68200928Srpaulo#endif /* _KERNEL */ 69147191Sjkoshy 70145332Smarcel#endif /* !_MACHINE_PMC_MDEP_H_ */ 71