1*b6262570Sthorpej /* $NetBSD: cpu_counter.h,v 1.7 2020/10/10 03:05:04 thorpej Exp $ */
2a42ba8d2Snakayama
3a42ba8d2Snakayama /*-
4a42ba8d2Snakayama * Copyright (c) 2000 The NetBSD Foundation, Inc.
5a42ba8d2Snakayama * All rights reserved.
6a42ba8d2Snakayama *
7a42ba8d2Snakayama * This code is derived from software contributed to The NetBSD Foundation
8a42ba8d2Snakayama * by Jason R. Thorpe.
9a42ba8d2Snakayama *
10a42ba8d2Snakayama * Redistribution and use in source and binary forms, with or without
11a42ba8d2Snakayama * modification, are permitted provided that the following conditions
12a42ba8d2Snakayama * are met:
13a42ba8d2Snakayama * 1. Redistributions of source code must retain the above copyright
14a42ba8d2Snakayama * notice, this list of conditions and the following disclaimer.
15a42ba8d2Snakayama * 2. Redistributions in binary form must reproduce the above copyright
16a42ba8d2Snakayama * notice, this list of conditions and the following disclaimer in the
17a42ba8d2Snakayama * documentation and/or other materials provided with the distribution.
18a42ba8d2Snakayama *
19a42ba8d2Snakayama * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20a42ba8d2Snakayama * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21a42ba8d2Snakayama * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22a42ba8d2Snakayama * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23a42ba8d2Snakayama * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24a42ba8d2Snakayama * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25a42ba8d2Snakayama * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26a42ba8d2Snakayama * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27a42ba8d2Snakayama * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28a42ba8d2Snakayama * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29a42ba8d2Snakayama * POSSIBILITY OF SUCH DAMAGE.
30a42ba8d2Snakayama */
31a42ba8d2Snakayama
32a42ba8d2Snakayama #ifndef _ALPHA_CPU_COUNTER_H_
33a42ba8d2Snakayama #define _ALPHA_CPU_COUNTER_H_
34a42ba8d2Snakayama
35a42ba8d2Snakayama /*
36a42ba8d2Snakayama * Machine-specific support for CPU counter.
37a42ba8d2Snakayama */
38a42ba8d2Snakayama
39a42ba8d2Snakayama #ifdef _KERNEL
40a42ba8d2Snakayama
41a42ba8d2Snakayama #include <machine/cpu.h>
42a42ba8d2Snakayama #include <machine/rpb.h>
43a42ba8d2Snakayama
44*b6262570Sthorpej #define cc_get_primary_cc() \
45*b6262570Sthorpej alpha_send_ipi(hwrpb->rpb_primary_cpu_id, ALPHA_IPI_PRIMARY_CC)
4613084fc8Stsutsui
47a42ba8d2Snakayama /* Process Cycle Counter is always available. */
48a42ba8d2Snakayama #define cpu_hascounter() (1)
49a42ba8d2Snakayama #define cpu_counter() cpu_counter32()
50a42ba8d2Snakayama
51fbae48b9Sperry static __inline uint32_t
cpu_counter32(void)52a42ba8d2Snakayama cpu_counter32(void)
53a42ba8d2Snakayama {
54a42ba8d2Snakayama
55a42ba8d2Snakayama /*
56a42ba8d2Snakayama * Only the lower 32 bits of the PCC are an actual cycle
57a42ba8d2Snakayama * counter. Thankfully, the rnd(4) code only wants a
58a42ba8d2Snakayama * 32-bit value anyway.
59a42ba8d2Snakayama */
60a42ba8d2Snakayama return (alpha_rpcc() & 0xffffffffU);
61a42ba8d2Snakayama }
62a42ba8d2Snakayama
63fbae48b9Sperry static __inline uint64_t
cpu_frequency(struct cpu_info * ci)64a42ba8d2Snakayama cpu_frequency(struct cpu_info *ci)
65a42ba8d2Snakayama {
66a42ba8d2Snakayama
6713084fc8Stsutsui return (ci->ci_pcc_freq);
68a42ba8d2Snakayama }
69a42ba8d2Snakayama
70a42ba8d2Snakayama #endif /* _KERNEL */
71a42ba8d2Snakayama
72a42ba8d2Snakayama #endif /* !_ALPHA_CPU_COUNTER_H_ */
73