drm/vmwgfx: Update the backdoor call with support for new instructions
Use the definition provided by include/asm/vmware.h Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> Signed-off-by: Borislav Petkov <bp@suse.de> Reviewed-by: Doug Covelli <dcovelli@vmware.com> Acked-by: Dave Airlie <airlied@redhat.com> Cc: Daniel Vetter <daniel@ffwll.ch> Cc: dri-devel@lists.freedesktop.org Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: pv-drivers@vmware.com Cc: Thomas Gleixner <tglx@linutronix.de> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com> Cc: x86-ml <x86@kernel.org> Link: https://lkml.kernel.org/r/20190828080353.12658-4-thomas_os@shipmail.org
This commit is contained in:

committed by
Borislav Petkov

parent
b4dd4f6e36
commit
6abe3778cf
@@ -32,6 +32,7 @@
|
||||
#ifndef _VMWGFX_MSG_H
|
||||
#define _VMWGFX_MSG_H
|
||||
|
||||
#include <asm/vmware.h>
|
||||
|
||||
/**
|
||||
* Hypervisor-specific bi-directional communication channel. Should never
|
||||
@@ -44,7 +45,7 @@
|
||||
* @in_ebx: [IN] Message Len, through EBX
|
||||
* @in_si: [IN] Input argument through SI, set to 0 if not used
|
||||
* @in_di: [IN] Input argument through DI, set ot 0 if not used
|
||||
* @port_num: [IN] port number + [channel id]
|
||||
* @flags: [IN] hypercall flags + [channel id]
|
||||
* @magic: [IN] hypervisor magic value
|
||||
* @eax: [OUT] value of EAX register
|
||||
* @ebx: [OUT] e.g. status from an HB message status command
|
||||
@@ -54,10 +55,10 @@
|
||||
* @di: [OUT]
|
||||
*/
|
||||
#define VMW_PORT(cmd, in_ebx, in_si, in_di, \
|
||||
port_num, magic, \
|
||||
flags, magic, \
|
||||
eax, ebx, ecx, edx, si, di) \
|
||||
({ \
|
||||
asm volatile ("inl %%dx, %%eax;" : \
|
||||
asm volatile (VMWARE_HYPERCALL : \
|
||||
"=a"(eax), \
|
||||
"=b"(ebx), \
|
||||
"=c"(ecx), \
|
||||
@@ -67,7 +68,7 @@
|
||||
"a"(magic), \
|
||||
"b"(in_ebx), \
|
||||
"c"(cmd), \
|
||||
"d"(port_num), \
|
||||
"d"(flags), \
|
||||
"S"(in_si), \
|
||||
"D"(in_di) : \
|
||||
"memory"); \
|
||||
@@ -85,7 +86,7 @@
|
||||
* @in_ecx: [IN] Message Len, through ECX
|
||||
* @in_si: [IN] Input argument through SI, set to 0 if not used
|
||||
* @in_di: [IN] Input argument through DI, set to 0 if not used
|
||||
* @port_num: [IN] port number + [channel id]
|
||||
* @flags: [IN] hypercall flags + [channel id]
|
||||
* @magic: [IN] hypervisor magic value
|
||||
* @bp: [IN]
|
||||
* @eax: [OUT] value of EAX register
|
||||
@@ -98,12 +99,12 @@
|
||||
#ifdef __x86_64__
|
||||
|
||||
#define VMW_PORT_HB_OUT(cmd, in_ecx, in_si, in_di, \
|
||||
port_num, magic, bp, \
|
||||
flags, magic, bp, \
|
||||
eax, ebx, ecx, edx, si, di) \
|
||||
({ \
|
||||
asm volatile ("push %%rbp;" \
|
||||
"mov %12, %%rbp;" \
|
||||
"rep outsb;" \
|
||||
VMWARE_HYPERCALL_HB_OUT \
|
||||
"pop %%rbp;" : \
|
||||
"=a"(eax), \
|
||||
"=b"(ebx), \
|
||||
@@ -114,7 +115,7 @@
|
||||
"a"(magic), \
|
||||
"b"(cmd), \
|
||||
"c"(in_ecx), \
|
||||
"d"(port_num), \
|
||||
"d"(flags), \
|
||||
"S"(in_si), \
|
||||
"D"(in_di), \
|
||||
"r"(bp) : \
|
||||
@@ -123,12 +124,12 @@
|
||||
|
||||
|
||||
#define VMW_PORT_HB_IN(cmd, in_ecx, in_si, in_di, \
|
||||
port_num, magic, bp, \
|
||||
flags, magic, bp, \
|
||||
eax, ebx, ecx, edx, si, di) \
|
||||
({ \
|
||||
asm volatile ("push %%rbp;" \
|
||||
"mov %12, %%rbp;" \
|
||||
"rep insb;" \
|
||||
VMWARE_HYPERCALL_HB_IN \
|
||||
"pop %%rbp" : \
|
||||
"=a"(eax), \
|
||||
"=b"(ebx), \
|
||||
@@ -139,7 +140,7 @@
|
||||
"a"(magic), \
|
||||
"b"(cmd), \
|
||||
"c"(in_ecx), \
|
||||
"d"(port_num), \
|
||||
"d"(flags), \
|
||||
"S"(in_si), \
|
||||
"D"(in_di), \
|
||||
"r"(bp) : \
|
||||
@@ -157,13 +158,13 @@
|
||||
* just pushed it.
|
||||
*/
|
||||
#define VMW_PORT_HB_OUT(cmd, in_ecx, in_si, in_di, \
|
||||
port_num, magic, bp, \
|
||||
flags, magic, bp, \
|
||||
eax, ebx, ecx, edx, si, di) \
|
||||
({ \
|
||||
asm volatile ("push %12;" \
|
||||
"push %%ebp;" \
|
||||
"mov 0x04(%%esp), %%ebp;" \
|
||||
"rep outsb;" \
|
||||
VMWARE_HYPERCALL_HB_OUT \
|
||||
"pop %%ebp;" \
|
||||
"add $0x04, %%esp;" : \
|
||||
"=a"(eax), \
|
||||
@@ -175,7 +176,7 @@
|
||||
"a"(magic), \
|
||||
"b"(cmd), \
|
||||
"c"(in_ecx), \
|
||||
"d"(port_num), \
|
||||
"d"(flags), \
|
||||
"S"(in_si), \
|
||||
"D"(in_di), \
|
||||
"m"(bp) : \
|
||||
@@ -184,13 +185,13 @@
|
||||
|
||||
|
||||
#define VMW_PORT_HB_IN(cmd, in_ecx, in_si, in_di, \
|
||||
port_num, magic, bp, \
|
||||
flags, magic, bp, \
|
||||
eax, ebx, ecx, edx, si, di) \
|
||||
({ \
|
||||
asm volatile ("push %12;" \
|
||||
"push %%ebp;" \
|
||||
"mov 0x04(%%esp), %%ebp;" \
|
||||
"rep insb;" \
|
||||
VMWARE_HYPERCALL_HB_IN \
|
||||
"pop %%ebp;" \
|
||||
"add $0x04, %%esp;" : \
|
||||
"=a"(eax), \
|
||||
@@ -202,7 +203,7 @@
|
||||
"a"(magic), \
|
||||
"b"(cmd), \
|
||||
"c"(in_ecx), \
|
||||
"d"(port_num), \
|
||||
"d"(flags), \
|
||||
"S"(in_si), \
|
||||
"D"(in_di), \
|
||||
"m"(bp) : \
|
||||
|
Reference in New Issue
Block a user