mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.9 KiB
57 lines
1.9 KiB
/* SPDX-License-Identifier: GPL-2.0 or MIT */ |
|
#ifndef _ASM_X86_VMWARE_H |
|
#define _ASM_X86_VMWARE_H |
|
|
|
#include <asm/cpufeatures.h> |
|
#include <asm/alternative.h> |
|
#include <linux/stringify.h> |
|
|
|
/* |
|
* The hypercall definitions differ in the low word of the %edx argument |
|
* in the following way: the old port base interface uses the port |
|
* number to distinguish between high- and low bandwidth versions. |
|
* |
|
* The new vmcall interface instead uses a set of flags to select |
|
* bandwidth mode and transfer direction. The flags should be loaded |
|
* into %dx by any user and are automatically replaced by the port |
|
* number if the VMWARE_HYPERVISOR_PORT method is used. |
|
* |
|
* In short, new driver code should strictly use the new definition of |
|
* %dx content. |
|
*/ |
|
|
|
/* Old port-based version */ |
|
#define VMWARE_HYPERVISOR_PORT 0x5658 |
|
#define VMWARE_HYPERVISOR_PORT_HB 0x5659 |
|
|
|
/* Current vmcall / vmmcall version */ |
|
#define VMWARE_HYPERVISOR_HB BIT(0) |
|
#define VMWARE_HYPERVISOR_OUT BIT(1) |
|
|
|
/* The low bandwidth call. The low word of edx is presumed clear. */ |
|
#define VMWARE_HYPERCALL \ |
|
ALTERNATIVE_2("movw $" __stringify(VMWARE_HYPERVISOR_PORT) ", %%dx; " \ |
|
"inl (%%dx), %%eax", \ |
|
"vmcall", X86_FEATURE_VMCALL, \ |
|
"vmmcall", X86_FEATURE_VMW_VMMCALL) |
|
|
|
/* |
|
* The high bandwidth out call. The low word of edx is presumed to have the |
|
* HB and OUT bits set. |
|
*/ |
|
#define VMWARE_HYPERCALL_HB_OUT \ |
|
ALTERNATIVE_2("movw $" __stringify(VMWARE_HYPERVISOR_PORT_HB) ", %%dx; " \ |
|
"rep outsb", \ |
|
"vmcall", X86_FEATURE_VMCALL, \ |
|
"vmmcall", X86_FEATURE_VMW_VMMCALL) |
|
|
|
/* |
|
* The high bandwidth in call. The low word of edx is presumed to have the |
|
* HB bit set. |
|
*/ |
|
#define VMWARE_HYPERCALL_HB_IN \ |
|
ALTERNATIVE_2("movw $" __stringify(VMWARE_HYPERVISOR_PORT_HB) ", %%dx; " \ |
|
"rep insb", \ |
|
"vmcall", X86_FEATURE_VMCALL, \ |
|
"vmmcall", X86_FEATURE_VMW_VMMCALL) |
|
#endif
|
|
|