mirror of https://github.com/F-Stack/f-stack.git
81 lines
1.8 KiB
C
81 lines
1.8 KiB
C
/*-
|
|
* This file is in the public domain.
|
|
*
|
|
* from: src/sys/alpha/include/pmc_mdep.h,v 1.2 2005/06/09 19:45:06 jkoshy
|
|
* $FreeBSD$
|
|
*/
|
|
|
|
#ifndef _MACHINE_PMC_MDEP_H_
|
|
#define _MACHINE_PMC_MDEP_H_
|
|
|
|
#define PMC_MDEP_CLASS_INDEX_MIPS 1
|
|
|
|
union pmc_md_op_pmcallocate {
|
|
uint64_t __pad[4];
|
|
};
|
|
|
|
/* Logging */
|
|
#if defined(__mips_n64)
|
|
#define PMCLOG_READADDR PMCLOG_READ64
|
|
#define PMCLOG_EMITADDR PMCLOG_EMIT64
|
|
#else
|
|
#define PMCLOG_READADDR PMCLOG_READ32
|
|
#define PMCLOG_EMITADDR PMCLOG_EMIT32
|
|
#endif
|
|
|
|
#if _KERNEL
|
|
|
|
/*
|
|
* MIPS event codes are encoded with a select bit. The
|
|
* select bit is used when writing to CP0 so that we
|
|
* can select either counter 0/2 or 1/3. The cycle
|
|
* and instruction counters are special in that they
|
|
* can be counted on either 0/2 or 1/3.
|
|
*/
|
|
|
|
#define MIPS_CTR_ALL 255 /* Count events in any counter. */
|
|
#define MIPS_CTR_0 0 /* Counter 0 Event */
|
|
#define MIPS_CTR_1 1 /* Counter 1 Event */
|
|
|
|
struct mips_event_code_map {
|
|
uint32_t pe_ev; /* enum value */
|
|
uint8_t pe_counter; /* Which counter this can be counted in. */
|
|
uint8_t pe_code; /* numeric code */
|
|
};
|
|
|
|
struct mips_pmc_spec {
|
|
uint32_t ps_cpuclass;
|
|
uint32_t ps_cputype;
|
|
uint32_t ps_capabilities;
|
|
int ps_counter_width;
|
|
};
|
|
|
|
union pmc_md_pmc {
|
|
uint32_t pm_mips_evsel;
|
|
};
|
|
|
|
#define PMC_TRAPFRAME_TO_PC(TF) ((TF)->pc)
|
|
|
|
extern const struct mips_event_code_map mips_event_codes[];
|
|
extern const int mips_event_codes_size;
|
|
extern int mips_npmcs;
|
|
extern struct mips_pmc_spec mips_pmc_spec;
|
|
|
|
/*
|
|
* Prototypes
|
|
*/
|
|
struct pmc_mdep *pmc_mips_initialize(void);
|
|
void pmc_mips_finalize(struct pmc_mdep *_md);
|
|
|
|
/*
|
|
* CPU-specific functions
|
|
*/
|
|
|
|
uint32_t mips_get_perfctl(int cpu, int ri, uint32_t event, uint32_t caps);
|
|
uint64_t mips_pmcn_read(unsigned int pmc);
|
|
uint64_t mips_pmcn_write(unsigned int pmc, uint64_t v);
|
|
|
|
#endif /* _KERNEL */
|
|
|
|
#endif /* !_MACHINE_PMC_MDEP_H_ */
|