cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

vmware.h (1942B)


      1/* SPDX-License-Identifier: GPL-2.0 or MIT */
      2#ifndef _ASM_X86_VMWARE_H
      3#define _ASM_X86_VMWARE_H
      4
      5#include <asm/cpufeatures.h>
      6#include <asm/alternative.h>
      7#include <linux/stringify.h>
      8
      9/*
     10 * The hypercall definitions differ in the low word of the %edx argument
     11 * in the following way: the old port base interface uses the port
     12 * number to distinguish between high- and low bandwidth versions.
     13 *
     14 * The new vmcall interface instead uses a set of flags to select
     15 * bandwidth mode and transfer direction. The flags should be loaded
     16 * into %dx by any user and are automatically replaced by the port
     17 * number if the VMWARE_HYPERVISOR_PORT method is used.
     18 *
     19 * In short, new driver code should strictly use the new definition of
     20 * %dx content.
     21 */
     22
     23/* Old port-based version */
     24#define VMWARE_HYPERVISOR_PORT    0x5658
     25#define VMWARE_HYPERVISOR_PORT_HB 0x5659
     26
     27/* Current vmcall / vmmcall version */
     28#define VMWARE_HYPERVISOR_HB   BIT(0)
     29#define VMWARE_HYPERVISOR_OUT  BIT(1)
     30
     31/* The low bandwidth call. The low word of edx is presumed clear. */
     32#define VMWARE_HYPERCALL						\
     33	ALTERNATIVE_2("movw $" __stringify(VMWARE_HYPERVISOR_PORT) ", %%dx; " \
     34		      "inl (%%dx), %%eax",				\
     35		      "vmcall", X86_FEATURE_VMCALL,			\
     36		      "vmmcall", X86_FEATURE_VMW_VMMCALL)
     37
     38/*
     39 * The high bandwidth out call. The low word of edx is presumed to have the
     40 * HB and OUT bits set.
     41 */
     42#define VMWARE_HYPERCALL_HB_OUT						\
     43	ALTERNATIVE_2("movw $" __stringify(VMWARE_HYPERVISOR_PORT_HB) ", %%dx; " \
     44		      "rep outsb",					\
     45		      "vmcall", X86_FEATURE_VMCALL,			\
     46		      "vmmcall", X86_FEATURE_VMW_VMMCALL)
     47
     48/*
     49 * The high bandwidth in call. The low word of edx is presumed to have the
     50 * HB bit set.
     51 */
     52#define VMWARE_HYPERCALL_HB_IN						\
     53	ALTERNATIVE_2("movw $" __stringify(VMWARE_HYPERVISOR_PORT_HB) ", %%dx; " \
     54		      "rep insb",					\
     55		      "vmcall", X86_FEATURE_VMCALL,			\
     56		      "vmmcall", X86_FEATURE_VMW_VMMCALL)
     57#endif