Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/amd64/vmm/vmm_util.c
39536 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2011 NetApp, Inc.
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
*
16
* THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND
17
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
* ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE
20
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26
* SUCH DAMAGE.
27
*/
28
29
#include <sys/param.h>
30
#include <sys/libkern.h>
31
32
#include <machine/md_var.h>
33
34
#include "vmm_util.h"
35
36
bool
37
vmm_is_hw_supported(void)
38
{
39
return (vmm_is_intel() || vmm_is_svm());
40
}
41
42
bool
43
vmm_is_intel(void)
44
{
45
46
return (strcmp(cpu_vendor, "GenuineIntel") == 0);
47
}
48
49
bool
50
vmm_is_svm(void)
51
{
52
return (strcmp(cpu_vendor, "AuthenticAMD") == 0 ||
53
strcmp(cpu_vendor, "HygonGenuine") == 0);
54
}
55
56
bool
57
vmm_supports_1G_pages(void)
58
{
59
unsigned int regs[4];
60
61
/*
62
* CPUID.80000001:EDX[bit 26] = 1 indicates support for 1GB pages
63
*
64
* Both Intel and AMD support this bit.
65
*/
66
if (cpu_exthigh >= 0x80000001) {
67
do_cpuid(0x80000001, regs);
68
if (regs[3] & (1 << 26))
69
return (true);
70
}
71
return (false);
72
}
73
74
#include <sys/proc.h>
75
#include <machine/frame.h>
76
#define DUMP_REG(x) printf(#x "\t\t0x%016lx\n", (long)(tf->tf_ ## x))
77
#define DUMP_SEG(x) printf(#x "\t\t0x%04x\n", (unsigned)(tf->tf_ ## x))
78
void
79
dump_trapframe(struct trapframe *tf)
80
{
81
DUMP_REG(rdi);
82
DUMP_REG(rsi);
83
DUMP_REG(rdx);
84
DUMP_REG(rcx);
85
DUMP_REG(r8);
86
DUMP_REG(r9);
87
DUMP_REG(rax);
88
DUMP_REG(rbx);
89
DUMP_REG(rbp);
90
DUMP_REG(r10);
91
DUMP_REG(r11);
92
DUMP_REG(r12);
93
DUMP_REG(r13);
94
DUMP_REG(r14);
95
DUMP_REG(r15);
96
DUMP_REG(trapno);
97
DUMP_REG(addr);
98
DUMP_REG(flags);
99
DUMP_REG(err);
100
DUMP_REG(rip);
101
DUMP_REG(rflags);
102
DUMP_REG(rsp);
103
DUMP_SEG(cs);
104
DUMP_SEG(ss);
105
DUMP_SEG(fs);
106
DUMP_SEG(gs);
107
DUMP_SEG(es);
108
DUMP_SEG(ds);
109
}
110
111