Annotation of src/sys/arch/amd64/include/cpu.h, Revision 1.69
1.69 ! rillig 1: /* $NetBSD: cpu.h,v 1.68 2020/03/17 17:18:49 maxv Exp $ */
1.1 fvdl 2:
3: /*-
4: * Copyright (c) 1990 The Regents of the University of California.
5: * All rights reserved.
6: *
7: * This code is derived from software contributed to Berkeley by
8: * William Jolitz.
9: *
10: * Redistribution and use in source and binary forms, with or without
11: * modification, are permitted provided that the following conditions
12: * are met:
13: * 1. Redistributions of source code must retain the above copyright
14: * notice, this list of conditions and the following disclaimer.
15: * 2. Redistributions in binary form must reproduce the above copyright
16: * notice, this list of conditions and the following disclaimer in the
17: * documentation and/or other materials provided with the distribution.
1.2 agc 18: * 3. Neither the name of the University nor the names of its contributors
1.1 fvdl 19: * may be used to endorse or promote products derived from this software
20: * without specific prior written permission.
21: *
22: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32: * SUCH DAMAGE.
33: *
34: * @(#)cpu.h 5.4 (Berkeley) 5/9/91
35: */
36:
37: #ifndef _AMD64_CPU_H_
38: #define _AMD64_CPU_H_
39:
1.58 mrg 40: #ifdef __x86_64__
41:
1.55 ad 42: #include <x86/cpu.h>
1.1 fvdl 43:
1.56 ad 44: #ifdef _KERNEL
45:
1.59 pooka 46: #if defined(__GNUC__) && !defined(_MODULE)
1.65 maxv 47:
1.27 ad 48: static struct cpu_info *x86_curcpu(void);
49: static lwp_t *x86_curlwp(void);
50:
1.67 maxv 51: __inline static struct cpu_info * __unused __nomsan
1.27 ad 52: x86_curcpu(void)
53: {
54: struct cpu_info *ci;
55:
56: __asm volatile("movq %%gs:%1, %0" :
57: "=r" (ci) :
58: "m"
59: (*(struct cpu_info * const *)offsetof(struct cpu_info, ci_self)));
60: return ci;
61: }
62:
1.67 maxv 63: __inline static lwp_t * __unused __nomsan __attribute__ ((const))
1.27 ad 64: x86_curlwp(void)
65: {
66: lwp_t *l;
67:
68: __asm volatile("movq %%gs:%1, %0" :
69: "=r" (l) :
70: "m"
71: (*(struct cpu_info * const *)offsetof(struct cpu_info, ci_curlwp)));
72: return l;
73: }
1.65 maxv 74:
1.59 pooka 75: #endif /* __GNUC__ && !_MODULE */
1.27 ad 76:
1.64 cherry 77: #ifdef XENPV
1.63 cherry 78: #define CLKF_USERMODE(frame) (curcpu()->ci_xen_clockf_usermode)
79: #define CLKF_PC(frame) (curcpu()->ci_xen_clockf_pc)
1.64 cherry 80: #else /* XENPV */
1.61 maxv 81: #define CLKF_USERMODE(frame) USERMODE((frame)->cf_if.if_tf.tf_cs)
1.37 dsl 82: #define CLKF_PC(frame) ((frame)->cf_if.if_tf.tf_rip)
1.64 cherry 83: #endif /* XENPV */
1.25 ad 84: #define CLKF_INTR(frame) (curcpu()->ci_idepth > 0)
1.1 fvdl 85: #define LWP_PC(l) ((l)->l_md.md_regs->tf_rip)
86:
1.69 ! rillig 87: void *cpu_uarea_alloc(bool);
1.68 maxv 88: bool cpu_uarea_free(void *);
89:
1.56 ad 90: #endif /* _KERNEL */
91:
1.58 mrg 92: #else /* __x86_64__ */
93:
94: #include <i386/cpu.h>
95:
96: #endif /* __x86_64__ */
97:
1.1 fvdl 98: #endif /* !_AMD64_CPU_H_ */
CVSweb <webmaster@jp.NetBSD.org>