[BACK]Return to cpu.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / arch / amd64 / include

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>