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