|
4 | 4 |
|
5 | 5 | #include <asm/cpufeatures.h> |
6 | 6 | #include <asm/alternative.h> |
| 7 | +#include <linux/stringify.h> |
7 | 8 |
|
8 | 9 | /* |
9 | 10 | * The hypercall definitions differ in the low word of the %edx argument |
|
20 | 21 | */ |
21 | 22 |
|
22 | 23 | /* Old port-based version */ |
23 | | -#define VMWARE_HYPERVISOR_PORT "0x5658" |
24 | | -#define VMWARE_HYPERVISOR_PORT_HB "0x5659" |
| 24 | +#define VMWARE_HYPERVISOR_PORT 0x5658 |
| 25 | +#define VMWARE_HYPERVISOR_PORT_HB 0x5659 |
25 | 26 |
|
26 | 27 | /* Current vmcall / vmmcall version */ |
27 | 28 | #define VMWARE_HYPERVISOR_HB BIT(0) |
28 | 29 | #define VMWARE_HYPERVISOR_OUT BIT(1) |
29 | 30 |
|
30 | 31 | /* The low bandwidth call. The low word of edx is presumed clear. */ |
31 | 32 | #define VMWARE_HYPERCALL \ |
32 | | - ALTERNATIVE_2("movw $" VMWARE_HYPERVISOR_PORT ", %%dx; inl (%%dx)", \ |
| 33 | + ALTERNATIVE_2("movw $" __stringify(VMWARE_HYPERVISOR_PORT) ", %%dx; " \ |
| 34 | + "inl (%%dx), %%eax", \ |
33 | 35 | "vmcall", X86_FEATURE_VMCALL, \ |
34 | 36 | "vmmcall", X86_FEATURE_VMW_VMMCALL) |
35 | 37 |
|
|
38 | 40 | * HB and OUT bits set. |
39 | 41 | */ |
40 | 42 | #define VMWARE_HYPERCALL_HB_OUT \ |
41 | | - ALTERNATIVE_2("movw $" VMWARE_HYPERVISOR_PORT_HB ", %%dx; rep outsb", \ |
| 43 | + ALTERNATIVE_2("movw $" __stringify(VMWARE_HYPERVISOR_PORT_HB) ", %%dx; " \ |
| 44 | + "rep outsb", \ |
42 | 45 | "vmcall", X86_FEATURE_VMCALL, \ |
43 | 46 | "vmmcall", X86_FEATURE_VMW_VMMCALL) |
44 | 47 |
|
|
47 | 50 | * HB bit set. |
48 | 51 | */ |
49 | 52 | #define VMWARE_HYPERCALL_HB_IN \ |
50 | | - ALTERNATIVE_2("movw $" VMWARE_HYPERVISOR_PORT_HB ", %%dx; rep insb", \ |
| 53 | + ALTERNATIVE_2("movw $" __stringify(VMWARE_HYPERVISOR_PORT_HB) ", %%dx; " \ |
| 54 | + "rep insb", \ |
51 | 55 | "vmcall", X86_FEATURE_VMCALL, \ |
52 | 56 | "vmmcall", X86_FEATURE_VMW_VMMCALL) |
53 | 57 | #endif |
0 commit comments