1/*-
  2 * SPDX-License-Identifier: BSD-3-Clause
  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.
 18 * 3. Neither the name of the University nor the names of its contributors
 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 *	from: @(#)cpu.h	5.4 (Berkeley) 5/9/91
 35 */
 36
 37#ifndef _MACHINE_CPU_H_
 38#define	_MACHINE_CPU_H_
 39
 40/*
 41 * Definitions unique to i386 cpu support.
 42 */
 43#include <machine/psl.h>
 44#include <machine/frame.h>
 45#include <machine/segments.h>
 46
 47#define	cpu_exec(p)	/* nothing */
 48#define	cpu_swapin(p)	/* nothing */
 49#define	cpu_getstack(td)		((td)->td_frame->tf_rsp)
 50#define	cpu_setstack(td, ap)		((td)->td_frame->tf_rsp = (ap))
 51#define	cpu_spinwait()			ia32_pause()
 52
 53#define	TRAPF_USERMODE(framep) \
 54	(ISPL((framep)->tf_cs) == SEL_UPL)
 55#define	TRAPF_PC(framep)	((framep)->tf_rip)
 56
 57#ifdef _KERNEL
 58/*
 59 * Struct containing pointers to CPU management functions whose
 60 * implementation is run time selectable.  Selection can be made,
 61 * for example, based on detection of a particular CPU variant or
 62 * hypervisor environment.
 63 */
 64struct cpu_ops {
 65	void (*cpu_init)(void);
 66	void (*cpu_resume)(void);
 67};
 68
 69extern struct	cpu_ops cpu_ops;
 70extern char	brwsection[];
 71extern char	btext[];
 72extern char	_end[];
 73extern char	etext[];
 74
 75/* Resume hook for VMM. */
 76extern	void (*vmm_resume_p)(void);
 77
 78void	cpu_halt(void);
 79void	cpu_lock_delay(void);
 80void	cpu_reset(void);
 81void	fork_trampoline(void);
 82
 83/*
 84 * Return contents of in-cpu fast counter as a sort of "bogo-time"
 85 * for random-harvesting purposes.
 86 */
 87static __inline u_int64_t
 88get_cyclecount(void)
 89{
 90
 91	return (rdtsc());
 92}
 93
 94#define MEMSET_EARLY_FUNC       memset_std
 95#define MEMCPY_EARLY_FUNC       memcpy_std
 96#define MEMMOVE_EARLY_FUNC      memmove_std
 97
 98#endif
 99
100#endif /* !_MACHINE_CPU_H_ */