Module Name: src
Committed By: maxv
Date: Fri Nov 10 08:05:38 UTC 2017
Modified Files:
src/sys/arch/amd64/stand/prekern: locore.S prekern.h
Log Message:
Add cpuid and rdseed.
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/amd64/stand/prekern/locore.S
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/amd64/stand/prekern/prekern.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/amd64/stand/prekern/locore.S
diff -u src/sys/arch/amd64/stand/prekern/locore.S:1.3 src/sys/arch/amd64/stand/prekern/locore.S:1.4
--- src/sys/arch/amd64/stand/prekern/locore.S:1.3 Sun Oct 29 11:28:30 2017
+++ src/sys/arch/amd64/stand/prekern/locore.S Fri Nov 10 08:05:38 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.S,v 1.3 2017/10/29 11:28:30 maxv Exp $ */
+/* $NetBSD: locore.S,v 1.4 2017/11/10 08:05:38 maxv Exp $ */
/*
* Copyright (c) 1998, 2000, 2007, 2008, 2016, 2017 The NetBSD Foundation, Inc.
@@ -583,9 +583,24 @@ END(start)
/* -------------------------------------------------------------------------- */
+ENTRY(cpuid)
+ movq %rbx,%r8
+ movq %rdi,%rax
+ movq %rsi,%rcx
+ movq %rdx,%rsi
+ cpuid
+ movl %eax,0(%rsi)
+ movl %ebx,4(%rsi)
+ movl %ecx,8(%rsi)
+ movl %edx,12(%rsi)
+ movq %r8,%rbx
+ ret
+END(cpuid)
+
ENTRY(lidt)
lidt (%rdi)
ret
+END(lidt)
ENTRY(rdtsc)
xorq %rax,%rax
@@ -593,9 +608,21 @@ ENTRY(rdtsc)
shlq $32,%rdx
orq %rdx,%rax
ret
+END(rdtsc)
+
+ENTRY(rdseed)
+ rdseed %rax
+ jc .Lsuccess
+ movq $(-1),%rax
+ ret
+.Lsuccess:
+ movq %rax,(%rdi)
+ xorq %rax,%rax
+ ret
+END(rdseed)
ENTRY(jump_kernel)
movq _C_LABEL(stkva),%rsp
movq $exec_kernel,%rax
jmpq *%rax
-
+END(jump_kernel)
Index: src/sys/arch/amd64/stand/prekern/prekern.h
diff -u src/sys/arch/amd64/stand/prekern/prekern.h:1.6 src/sys/arch/amd64/stand/prekern/prekern.h:1.7
--- src/sys/arch/amd64/stand/prekern/prekern.h:1.6 Thu Nov 9 15:56:56 2017
+++ src/sys/arch/amd64/stand/prekern/prekern.h Fri Nov 10 08:05:38 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: prekern.h,v 1.6 2017/11/09 15:56:56 maxv Exp $ */
+/* $NetBSD: prekern.h,v 1.7 2017/11/10 08:05:38 maxv Exp $ */
/*
* Copyright (c) 2017 The NetBSD Foundation, Inc. All rights reserved.
@@ -144,8 +144,10 @@ void elf_build_boot(vaddr_t, paddr_t);
vaddr_t elf_kernel_reloc();
/* locore.S */
+void cpuid(uint32_t, uint32_t, uint32_t *);
void lidt(void *);
uint64_t rdtsc();
+int rdseed(uint64_t *);
void jump_kernel();
/* mm.c */