vmm_util.c revision 221828
1221828Sgrehan/*- 2221828Sgrehan * Copyright (c) 2011 NetApp, Inc. 3221828Sgrehan * All rights reserved. 4221828Sgrehan * 5221828Sgrehan * Redistribution and use in source and binary forms, with or without 6221828Sgrehan * modification, are permitted provided that the following conditions 7221828Sgrehan * are met: 8221828Sgrehan * 1. Redistributions of source code must retain the above copyright 9221828Sgrehan * notice, this list of conditions and the following disclaimer. 10221828Sgrehan * 2. Redistributions in binary form must reproduce the above copyright 11221828Sgrehan * notice, this list of conditions and the following disclaimer in the 12221828Sgrehan * documentation and/or other materials provided with the distribution. 13221828Sgrehan * 14221828Sgrehan * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND 15221828Sgrehan * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16221828Sgrehan * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17221828Sgrehan * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE 18221828Sgrehan * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19221828Sgrehan * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20221828Sgrehan * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21221828Sgrehan * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22221828Sgrehan * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23221828Sgrehan * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24221828Sgrehan * SUCH DAMAGE. 25221828Sgrehan * 26221828Sgrehan * $FreeBSD$ 27221828Sgrehan */ 28221828Sgrehan 29221828Sgrehan#include <sys/cdefs.h> 30221828Sgrehan__FBSDID("$FreeBSD$"); 31221828Sgrehan 32221828Sgrehan#include <sys/param.h> 33221828Sgrehan#include <sys/libkern.h> 34221828Sgrehan 35221828Sgrehan#include <machine/md_var.h> 36221828Sgrehan 37221828Sgrehan#include "vmm_util.h" 38221828Sgrehan 39221828Sgrehanboolean_t 40221828Sgrehanvmm_is_intel(void) 41221828Sgrehan{ 42221828Sgrehan 43221828Sgrehan if (strcmp(cpu_vendor, "GenuineIntel") == 0) 44221828Sgrehan return (TRUE); 45221828Sgrehan else 46221828Sgrehan return (FALSE); 47221828Sgrehan} 48221828Sgrehan 49221828Sgrehanboolean_t 50221828Sgrehanvmm_is_amd(void) 51221828Sgrehan{ 52221828Sgrehan if (strcmp(cpu_vendor, "AuthenticAMD") == 0) 53221828Sgrehan return (TRUE); 54221828Sgrehan else 55221828Sgrehan return (FALSE); 56221828Sgrehan} 57221828Sgrehan 58221828Sgrehanboolean_t 59221828Sgrehanvmm_supports_1G_pages(void) 60221828Sgrehan{ 61221828Sgrehan unsigned int regs[4]; 62221828Sgrehan 63221828Sgrehan /* 64221828Sgrehan * CPUID.80000001:EDX[bit 26] = 1 indicates support for 1GB pages 65221828Sgrehan * 66221828Sgrehan * Both Intel and AMD support this bit. 67221828Sgrehan */ 68221828Sgrehan if (cpu_exthigh >= 0x80000001) { 69221828Sgrehan do_cpuid(0x80000001, regs); 70221828Sgrehan if (regs[3] & (1 << 26)) 71221828Sgrehan return (TRUE); 72221828Sgrehan } 73221828Sgrehan return (FALSE); 74221828Sgrehan} 75221828Sgrehan 76221828Sgrehan#include <sys/proc.h> 77221828Sgrehan#include <machine/frame.h> 78221828Sgrehan#define DUMP_REG(x) printf(#x "\t\t0x%016lx\n", (long)(tf->tf_ ## x)) 79221828Sgrehan#define DUMP_SEG(x) printf(#x "\t\t0x%04x\n", (unsigned)(tf->tf_ ## x)) 80221828Sgrehanvoid 81221828Sgrehandump_trapframe(struct trapframe *tf) 82221828Sgrehan{ 83221828Sgrehan DUMP_REG(rdi); 84221828Sgrehan DUMP_REG(rsi); 85221828Sgrehan DUMP_REG(rdx); 86221828Sgrehan DUMP_REG(rcx); 87221828Sgrehan DUMP_REG(r8); 88221828Sgrehan DUMP_REG(r9); 89221828Sgrehan DUMP_REG(rax); 90221828Sgrehan DUMP_REG(rbx); 91221828Sgrehan DUMP_REG(rbp); 92221828Sgrehan DUMP_REG(r10); 93221828Sgrehan DUMP_REG(r11); 94221828Sgrehan DUMP_REG(r12); 95221828Sgrehan DUMP_REG(r13); 96221828Sgrehan DUMP_REG(r14); 97221828Sgrehan DUMP_REG(r15); 98221828Sgrehan DUMP_REG(trapno); 99221828Sgrehan DUMP_REG(addr); 100221828Sgrehan DUMP_REG(flags); 101221828Sgrehan DUMP_REG(err); 102221828Sgrehan DUMP_REG(rip); 103221828Sgrehan DUMP_REG(rflags); 104221828Sgrehan DUMP_REG(rsp); 105221828Sgrehan DUMP_SEG(cs); 106221828Sgrehan DUMP_SEG(ss); 107221828Sgrehan DUMP_SEG(fs); 108221828Sgrehan DUMP_SEG(gs); 109221828Sgrehan DUMP_SEG(es); 110221828Sgrehan DUMP_SEG(ds); 111221828Sgrehan} 112