cpu.h revision 330897
1/*- 2 * SPDX-License-Identifier: BSD-4-Clause 3 * 4 * Copyright (C) 1995-1997 Wolfgang Solfrank. 5 * Copyright (C) 1995-1997 TooLs GmbH. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. All advertising materials mentioning features or use of this software 17 * must display the following acknowledgement: 18 * This product includes software developed by TooLs GmbH. 19 * 4. The name of TooLs GmbH may not be used to endorse or promote products 20 * derived from this software without specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR 23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25 * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 27 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 28 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 29 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 30 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 31 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 * 33 * $NetBSD: cpu.h,v 1.11 2000/05/26 21:19:53 thorpej Exp $ 34 * $FreeBSD: stable/11/sys/powerpc/include/cpu.h 330897 2018-03-14 03:19:51Z eadler $ 35 */ 36 37#ifndef _MACHINE_CPU_H_ 38#define _MACHINE_CPU_H_ 39 40#include <machine/frame.h> 41#include <machine/pcb.h> 42#include <machine/psl.h> 43 44/* 45 * CPU Feature Attributes 46 * 47 * These are defined in the PowerPC ELF ABI for the AT_HWCAP vector, 48 * and are exported to userland via the machdep.cpu_features 49 * sysctl. 50 */ 51 52extern int cpu_features; 53extern int cpu_features2; 54 55#define PPC_FEATURE_32 0x80000000 /* Always true */ 56#define PPC_FEATURE_64 0x40000000 /* Defined on a 64-bit CPU */ 57#define PPC_FEATURE_HAS_ALTIVEC 0x10000000 58#define PPC_FEATURE_HAS_FPU 0x08000000 59#define PPC_FEATURE_HAS_MMU 0x04000000 60#define PPC_FEATURE_UNIFIED_CACHE 0x01000000 61#define PPC_FEATURE_BOOKE 0x00008000 62#define PPC_FEATURE_SMT 0x00004000 63#define PPC_FEATURE_ARCH_2_05 0x00001000 64#define PPC_FEATURE_HAS_DFP 0x00000400 65#define PPC_FEATURE_ARCH_2_06 0x00000100 66#define PPC_FEATURE_HAS_VSX 0x00000080 67 68#define PPC_FEATURE2_ARCH_2_07 0x80000000 69#define PPC_FEATURE2_HAS_HTM 0x40000000 70#define PPC_FEATURE2_HAS_VCRYPTO 0x02000000 71 72#define PPC_FEATURE_BITMASK \ 73 "\20" \ 74 "\040PPC32\037PPC64\035ALTIVEC\034FPU\033MMU\031UNIFIEDCACHE" \ 75 "\020BOOKE\017SMT\015ARCH205\013DFP\011ARCH206\010VSX" 76#define PPC_FEATURE2_BITMASK \ 77 "\20" \ 78 "\040ARCH207\037HTM\032VCRYPTO" 79 80#define TRAPF_USERMODE(frame) (((frame)->srr1 & PSL_PR) != 0) 81#define TRAPF_PC(frame) ((frame)->srr0) 82 83/* 84 * CTL_MACHDEP definitions. 85 */ 86#define CPU_CACHELINE 1 87 88static __inline u_int64_t 89get_cyclecount(void) 90{ 91 u_int32_t _upper, _lower; 92 u_int64_t _time; 93 94 __asm __volatile( 95 "mftb %0\n" 96 "mftbu %1" 97 : "=r" (_lower), "=r" (_upper)); 98 99 _time = (u_int64_t)_upper; 100 _time = (_time << 32) + _lower; 101 return (_time); 102} 103 104#define cpu_getstack(td) ((td)->td_frame->fixreg[1]) 105#define cpu_spinwait() __asm __volatile("or 27,27,27") /* yield */ 106 107extern char btext[]; 108extern char etext[]; 109 110void cpu_halt(void); 111void cpu_reset(void); 112void cpu_sleep(void); 113void flush_disable_caches(void); 114void fork_trampoline(void); 115void swi_vm(void *); 116 117#endif /* _MACHINE_CPU_H_ */ 118