843e19887f64dde75055cf8842fc4db2171eff45johnlev/*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * CDDL HEADER START
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * The contents of this file are subject to the terms of the
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Common Development and Distribution License (the "License").
843e19887f64dde75055cf8842fc4db2171eff45johnlev * You may not use this file except in compliance with the License.
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
843e19887f64dde75055cf8842fc4db2171eff45johnlev * or http://www.opensolaris.org/os/licensing.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * See the License for the specific language governing permissions
843e19887f64dde75055cf8842fc4db2171eff45johnlev * and limitations under the License.
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * When distributing Covered Code, include this CDDL HEADER in each
843e19887f64dde75055cf8842fc4db2171eff45johnlev * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * If applicable, add the following below this CDDL HEADER, with the
843e19887f64dde75055cf8842fc4db2171eff45johnlev * fields enclosed by brackets "[]" replaced with your own identifying
843e19887f64dde75055cf8842fc4db2171eff45johnlev * information: Portions Copyright [yyyy] [name of copyright owner]
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * CDDL HEADER END
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev/*
26a04d6751d8dbdcf709884101e1cb3d48723af2Dave Plauger * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Use is subject to license terms.
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev/
843e19887f64dde75055cf8842fc4db2171eff45johnlev/ Inline functions for the x86 kernel running on the hypervisor
843e19887f64dde75055cf8842fc4db2171eff45johnlev/
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev .inline __hypercall0, 4
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl (%esp), %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev int $0x82
843e19887f64dde75055cf8842fc4db2171eff45johnlev .end
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev .inline __hypercall1, 8
843e19887f64dde75055cf8842fc4db2171eff45johnlev pushl %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 4(%esp), %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 8(%esp), %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev int $0x82
843e19887f64dde75055cf8842fc4db2171eff45johnlev popl %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev .end
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev .inline __hypercall2, 12
843e19887f64dde75055cf8842fc4db2171eff45johnlev pushl %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 4(%esp), %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 8(%esp), %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 12(%esp), %ecx
843e19887f64dde75055cf8842fc4db2171eff45johnlev int $0x82
843e19887f64dde75055cf8842fc4db2171eff45johnlev popl %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev .end
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev .inline __hypercall3, 16
843e19887f64dde75055cf8842fc4db2171eff45johnlev pushl %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 4(%esp), %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 8(%esp), %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 12(%esp), %ecx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 16(%esp), %edx
843e19887f64dde75055cf8842fc4db2171eff45johnlev int $0x82
843e19887f64dde75055cf8842fc4db2171eff45johnlev popl %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev .end
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev .inline __hypercall4, 20
843e19887f64dde75055cf8842fc4db2171eff45johnlev pushl %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev pushl %esi
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 8(%esp), %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 12(%esp), %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 16(%esp), %ecx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 20(%esp), %edx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 24(%esp), %esi
843e19887f64dde75055cf8842fc4db2171eff45johnlev int $0x82
843e19887f64dde75055cf8842fc4db2171eff45johnlev popl %esi
843e19887f64dde75055cf8842fc4db2171eff45johnlev popl %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev .end
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev .inline __hypercall5, 24
843e19887f64dde75055cf8842fc4db2171eff45johnlev pushl %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev pushl %esi
843e19887f64dde75055cf8842fc4db2171eff45johnlev pushl %edi
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 12(%esp), %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 16(%esp), %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 20(%esp), %ecx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 24(%esp), %edx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 28(%esp), %esi
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 32(%esp), %edi
843e19887f64dde75055cf8842fc4db2171eff45johnlev int $0x82
843e19887f64dde75055cf8842fc4db2171eff45johnlev popl %edi
843e19887f64dde75055cf8842fc4db2171eff45johnlev popl %esi
843e19887f64dde75055cf8842fc4db2171eff45johnlev popl %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev .end
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev/*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Read the -real- TSC.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * This is difficult to virtualize on the hypervisor given there is
843e19887f64dde75055cf8842fc4db2171eff45johnlev * no way to prevent preemption; thus this inline function
843e19887f64dde75055cf8842fc4db2171eff45johnlev * should only be used in the middle of the paravirtualized
843e19887f64dde75055cf8842fc4db2171eff45johnlev * implementation of tsc_read.
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev .inline __rdtsc_insn, 0
843e19887f64dde75055cf8842fc4db2171eff45johnlev rdtsc
843e19887f64dde75055cf8842fc4db2171eff45johnlev .end