Annotation of src/sys/arch/i386/include/cpu.h, Revision 1.165.2.1
1.165.2.1! yamt 1: /* $NetBSD: cpu.h,v 1.165 2008/02/27 20:18:56 xtraeme Exp $ */
1.24 cgd 2:
1.1 cgd 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.103 agc 18: * 3. Neither the name of the University nor the names of its contributors
1.1 cgd 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: *
1.24 cgd 34: * @(#)cpu.h 5.4 (Berkeley) 5/9/91
1.1 cgd 35: */
36:
1.14 mycroft 37: #ifndef _I386_CPU_H_
38: #define _I386_CPU_H_
39:
1.165.2.1! yamt 40: #include <x86/cpu.h>
1.82 fvdl 41:
1.165.2.1! yamt 42: #ifdef _KERNEL
1.82 fvdl 43:
1.165.2.1! yamt 44: #if defined(__GNUC__) && !defined(_LKM)
1.146 ad 45: static struct cpu_info *x86_curcpu(void);
46: static lwp_t *x86_curlwp(void);
1.105 yamt 47:
1.153 perry 48: __inline static struct cpu_info * __unused
1.146 ad 49: x86_curcpu(void)
1.105 yamt 50: {
51: struct cpu_info *ci;
52:
1.119 perry 53: __asm volatile("movl %%fs:%1, %0" :
1.105 yamt 54: "=r" (ci) :
55: "m"
1.115 yamt 56: (*(struct cpu_info * const *)offsetof(struct cpu_info, ci_self)));
1.105 yamt 57: return ci;
58: }
59:
1.153 perry 60: __inline static lwp_t * __unused
1.146 ad 61: x86_curlwp(void)
62: {
63: lwp_t *l;
64:
65: __asm volatile("movl %%fs:%1, %0" :
66: "=r" (l) :
67: "m"
68: (*(struct cpu_info * const *)offsetof(struct cpu_info, ci_curlwp)));
69: return l;
70: }
1.165.2.1! yamt 71: __inline static void __unused
! 72: cpu_set_curpri(int pri)
! 73: {
1.1 cgd 74:
1.165.2.1! yamt 75: __asm volatile(
! 76: "movl %1, %%fs:%0" :
! 77: "=m" (*(struct cpu_info *)offsetof(struct cpu_info, ci_schedstate.spc_curpriority)) :
! 78: "r" (pri)
! 79: );
! 80: }
! 81: #endif
1.1 cgd 82:
1.118 cube 83: #define CLKF_USERMODE(frame) USERMODE((frame)->cf_if.if_cs, (frame)->cf_if.if_eflags)
84: #define CLKF_PC(frame) ((frame)->cf_if.if_eip)
1.130 yamt 85: #define CLKF_INTR(frame) (curcpu()->ci_idepth > 0)
1.95 thorpej 86: #define LWP_PC(l) ((l)->l_md.md_regs->tf_eip)
1.12 mycroft 87:
1.165.2.1! yamt 88: #endif /* _KERNEL */
1.52 fvdl 89:
1.14 mycroft 90: #endif /* !_I386_CPU_H_ */
CVSweb <webmaster@jp.NetBSD.org>