zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

hwpmc_uncore.h (3371B) - Raw


      1 /*-
      2  * SPDX-License-Identifier: BSD-2-Clause
      3  *
      4  * Copyright (c) 2010 Fabien Thomas
      5  * All rights reserved.
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in the
     14  *    documentation and/or other materials provided with the distribution.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     26  * SUCH DAMAGE.
     27  */
     28 
     29 #ifndef _DEV_HWPMC_UNCORE_H_
     30 #define	_DEV_HWPMC_UNCORE_H_ 1
     31 
     32 /*
     33  * Fixed-function PMCs.
     34  */
     35 struct pmc_md_ucf_op_pmcallocate {
     36 	uint16_t	pm_ucf_flags;	/* additional flags */
     37 };
     38 
     39 #define	UCF_EN		0x1
     40 #define	UCF_PMI		0x4
     41 
     42 /*
     43  * Programmable PMCs.
     44  */
     45 struct pmc_md_ucp_op_pmcallocate {
     46 	uint64_t	pm_ucp_config;
     47 };
     48 
     49 #define	UCP_EVSEL(C)	((C) & 0xFF)
     50 #define	UCP_UMASK(C)	((C) & 0xFF00)
     51 #define	UCP_CTRR	(1 << 17)
     52 #define	UCP_EDGE	(1 << 18)
     53 #define	UCP_INT		(1 << 20)
     54 #define	UCP_EN		(1 << 22)
     55 #define	UCP_INV		(1 << 23)
     56 #define	UCP_CMASK(C)	(((C) & 0xFF) << 24)
     57 #ifdef	_KERNEL
     58 
     59 #define	DCTL_FLAG_UNC_PMI	(1ULL << 13)
     60 
     61 /*
     62  * Fixed-function counters.
     63  */
     64 
     65 #define	UCF_MASK				0xF
     66 
     67 #define	UCF_CTR0				0x394
     68 
     69 #define	UCF_OFFSET				32
     70 #define UCF_OFFSET_SB				29
     71 #define	UCF_CTRL				0x395
     72 
     73 /*
     74  * Programmable counters.
     75  */
     76 
     77 #define	UCP_PMC0				0x3B0
     78 #define	UCP_EVSEL0				0x3C0
     79 #define UCP_OPCODE_MATCH			0x396
     80 #define UCP_CB0_EVSEL0				0x700
     81 
     82 /*
     83  * Simplified programming interface in Intel Performance Architecture
     84  * v2 and later.
     85  */
     86 
     87 #define	UC_GLOBAL_STATUS			0x392
     88 #define	UC_GLOBAL_CTRL				0x391
     89 #define	UC_GLOBAL_OVF_CTRL			0x393
     90 
     91 #define	UC_GLOBAL_STATUS_FLAG_CLRCHG		(1ULL << 63)
     92 #define	UC_GLOBAL_STATUS_FLAG_OVFPMI		(1ULL << 61)
     93 #define	UC_GLOBAL_CTRL_FLAG_FRZ			(1ULL << 63)
     94 #define	UC_GLOBAL_CTRL_FLAG_ENPMICORE0		(1ULL << 48)
     95 
     96 /*
     97  * Model specific registers.
     98  */
     99 
    100 #define MSR_GQ_SNOOP_MESF			0x301
    101 
    102 struct pmc_md_ucf_pmc {
    103 	uint64_t	pm_ucf_ctrl;
    104 };
    105 
    106 struct pmc_md_ucp_pmc {
    107 	uint64_t	pm_ucp_evsel;
    108 };
    109 
    110 /*
    111  * Prototypes.
    112  */
    113 
    114 int	pmc_uncore_initialize(struct pmc_mdep *_md, int _maxcpu);
    115 void	pmc_uncore_finalize(struct pmc_mdep *_md);
    116 
    117 int	pmc_ucf_initialize(struct pmc_mdep *_md, int _maxcpu, int _npmc, int _width);
    118 void	pmc_ucf_finalize(struct pmc_mdep *_md);
    119 
    120 int	pmc_ucp_initialize(struct pmc_mdep *_md, int _maxcpu, int _npmc, int _width,
    121 	    int _flags);
    122 void	pmc_ucp_finalize(struct pmc_mdep *_md);
    123 
    124 #endif	/* _KERNEL */
    125 #endif	/* _DEV_HWPMC_UNCORE_H */