arch/x86/include/asm/vmware.h
Source file repositories/reference/linux-study-clean/arch/x86/include/asm/vmware.h
File Facts
- System
- Linux kernel
- Corpus path
arch/x86/include/asm/vmware.h- Extension
.h- Size
- 9607 bytes
- Lines
- 328
- Domain
- Architecture Layer
- Bucket
- arch/x86
- Inferred role
- Architecture Layer: implementation source
- Status
- source implementation candidate
Why This File Exists
CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
Dependency Surface
asm/cpufeatures.hasm/alternative.hlinux/stringify.h
Detected Declarations
function vmware_hypercall1function vmware_hypercall3function vmware_hypercall4function vmware_hypercall5function vmware_hypercall6function vmware_hypercall7function cc_platform_hasfunction vmware_hypercall_hb_in
Annotated Snippet
#ifndef _ASM_X86_VMWARE_H
#define _ASM_X86_VMWARE_H
#include <asm/cpufeatures.h>
#include <asm/alternative.h>
#include <linux/stringify.h>
/*
* VMware hypercall ABI.
*
* - Low bandwidth (LB) hypercalls (I/O port based, vmcall and vmmcall)
* have up to 6 input and 6 output arguments passed and returned using
* registers: %eax (arg0), %ebx (arg1), %ecx (arg2), %edx (arg3),
* %esi (arg4), %edi (arg5).
* The following input arguments must be initialized by the caller:
* arg0 - VMWARE_HYPERVISOR_MAGIC
* arg2 - Hypercall command
* arg3 bits [15:0] - Port number, LB and direction flags
*
* - Low bandwidth TDX hypercalls (x86_64 only) are similar to LB
* hypercalls. They also have up to 6 input and 6 output on registers
* arguments, with different argument to register mapping:
* %r12 (arg0), %rbx (arg1), %r13 (arg2), %rdx (arg3),
* %rsi (arg4), %rdi (arg5).
*
* - High bandwidth (HB) hypercalls are I/O port based only. They have
* up to 7 input and 7 output arguments passed and returned using
* registers: %eax (arg0), %ebx (arg1), %ecx (arg2), %edx (arg3),
* %esi (arg4), %edi (arg5), %ebp (arg6).
* The following input arguments must be initialized by the caller:
* arg0 - VMWARE_HYPERVISOR_MAGIC
* arg1 - Hypercall command
* arg3 bits [15:0] - Port number, HB and direction flags
*
* For compatibility purposes, x86_64 systems use only lower 32 bits
* for input and output arguments.
*
* The hypercall definitions differ in the low word of the %edx (arg3)
* in the following way: the old I/O port based interface uses the port
* number to distinguish between high- and low bandwidth versions, and
* uses IN/OUT instructions to define transfer direction.
*
* The new vmcall interface instead uses a set of flags to select
* bandwidth mode and transfer direction. The flags should be loaded
* into arg3 by any user and are automatically replaced by the port
* number if the I/O port method is used.
*/
#define VMWARE_HYPERVISOR_HB BIT(0)
#define VMWARE_HYPERVISOR_OUT BIT(1)
#define VMWARE_HYPERVISOR_PORT 0x5658
#define VMWARE_HYPERVISOR_PORT_HB (VMWARE_HYPERVISOR_PORT | \
VMWARE_HYPERVISOR_HB)
#define VMWARE_HYPERVISOR_MAGIC 0x564d5868U
#define VMWARE_CMD_GETVERSION 10
#define VMWARE_CMD_GETHZ 45
#define VMWARE_CMD_GETVCPU_INFO 68
#define VMWARE_CMD_STEALCLOCK 91
/*
* Hypercall command mask:
* bits [6:0] command, range [0, 127]
* bits [19:16] sub-command, range [0, 15]
*/
#define VMWARE_CMD_MASK 0xf007fU
#define CPUID_VMWARE_FEATURES_ECX_VMMCALL BIT(0)
#define CPUID_VMWARE_FEATURES_ECX_VMCALL BIT(1)
extern unsigned long vmware_hypercall_slow(unsigned long cmd,
unsigned long in1, unsigned long in3,
unsigned long in4, unsigned long in5,
u32 *out1, u32 *out2, u32 *out3,
u32 *out4, u32 *out5);
#define VMWARE_TDX_VENDOR_LEAF 0x1af7e4909ULL
#define VMWARE_TDX_HCALL_FUNC 1
extern unsigned long vmware_tdx_hypercall(unsigned long cmd,
unsigned long in1, unsigned long in3,
unsigned long in4, unsigned long in5,
u32 *out1, u32 *out2, u32 *out3,
u32 *out4, u32 *out5);
/*
* The low bandwidth call. The low word of %edx is presumed to have OUT bit
* set. The high word of %edx may contain input data from the caller.
*/
Annotation
- Immediate include surface: `asm/cpufeatures.h`, `asm/alternative.h`, `linux/stringify.h`.
- Detected declarations: `function vmware_hypercall1`, `function vmware_hypercall3`, `function vmware_hypercall4`, `function vmware_hypercall5`, `function vmware_hypercall6`, `function vmware_hypercall7`, `function cc_platform_has`, `function vmware_hypercall_hb_in`.
- Atlas domain: Architecture Layer / arch/x86.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.