Switch from VMWARE_HYPERCALL macro to vmware_hypercall API.
Eliminate arch specific code. No functional changes intended.

Signed-off-by: Alexey Makhalov <alexey.makha...@broadcom.com>
Reviewed-by: Nadav Amit <nadav.a...@gmail.com>
Reviewed-by: Zack Rusin <zack.ru...@broadcom.com>
Acked-by: Dmitry Torokhov <dmitry.torok...@gmail.com>
---
 drivers/input/mouse/vmmouse.c | 78 ++++++++++-------------------------
 1 file changed, 22 insertions(+), 56 deletions(-)

diff --git a/drivers/input/mouse/vmmouse.c b/drivers/input/mouse/vmmouse.c
index ad94c835ee66..fb1d986a6895 100644
--- a/drivers/input/mouse/vmmouse.c
+++ b/drivers/input/mouse/vmmouse.c
@@ -21,19 +21,16 @@
 #include "psmouse.h"
 #include "vmmouse.h"
 
-#define VMMOUSE_PROTO_MAGIC                    0x564D5868U
-
 /*
  * Main commands supported by the vmmouse hypervisor port.
  */
-#define VMMOUSE_PROTO_CMD_GETVERSION           10
-#define VMMOUSE_PROTO_CMD_ABSPOINTER_DATA      39
-#define VMMOUSE_PROTO_CMD_ABSPOINTER_STATUS    40
-#define VMMOUSE_PROTO_CMD_ABSPOINTER_COMMAND   41
-#define VMMOUSE_PROTO_CMD_ABSPOINTER_RESTRICT   86
+#define VMWARE_CMD_ABSPOINTER_DATA     39
+#define VMWARE_CMD_ABSPOINTER_STATUS   40
+#define VMWARE_CMD_ABSPOINTER_COMMAND  41
+#define VMWARE_CMD_ABSPOINTER_RESTRICT 86
 
 /*
- * Subcommands for VMMOUSE_PROTO_CMD_ABSPOINTER_COMMAND
+ * Subcommands for VMWARE_CMD_ABSPOINTER_COMMAND
  */
 #define VMMOUSE_CMD_ENABLE                     0x45414552U
 #define VMMOUSE_CMD_DISABLE                    0x000000f5U
@@ -76,30 +73,6 @@ struct vmmouse_data {
        char dev_name[128];
 };
 
-/*
- * Hypervisor-specific bi-directional communication channel
- * implementing the vmmouse protocol. Should never execute on
- * bare metal hardware.
- */
-#define VMMOUSE_CMD(cmd, in1, out1, out2, out3, out4)  \
-({                                                     \
-       unsigned long __dummy1, __dummy2;               \
-       __asm__ __volatile__ (VMWARE_HYPERCALL :        \
-               "=a"(out1),                             \
-               "=b"(out2),                             \
-               "=c"(out3),                             \
-               "=d"(out4),                             \
-               "=S"(__dummy1),                         \
-               "=D"(__dummy2) :                        \
-         [port] "i" (VMWARE_HYPERVISOR_PORT),          \
-         [mode] "m" (vmware_hypercall_mode),           \
-               "a"(VMMOUSE_PROTO_MAGIC),               \
-               "b"(in1),                               \
-               "c"(VMMOUSE_PROTO_CMD_##cmd),           \
-               "d"(0) :                                \
-               "memory");                              \
-})
-
 /**
  * vmmouse_report_button - report button state on the correct input device
  *
@@ -147,14 +120,12 @@ static psmouse_ret_t vmmouse_report_events(struct psmouse 
*psmouse)
        struct input_dev *abs_dev = priv->abs_dev;
        struct input_dev *pref_dev;
        u32 status, x, y, z;
-       u32 dummy1, dummy2, dummy3;
        unsigned int queue_length;
        unsigned int count = 255;
 
        while (count--) {
                /* See if we have motion data. */
-               VMMOUSE_CMD(ABSPOINTER_STATUS, 0,
-                           status, dummy1, dummy2, dummy3);
+               status = vmware_hypercall1(VMWARE_CMD_ABSPOINTER_STATUS, 0);
                if ((status & VMMOUSE_ERROR) == VMMOUSE_ERROR) {
                        psmouse_err(psmouse, "failed to fetch status data\n");
                        /*
@@ -174,7 +145,8 @@ static psmouse_ret_t vmmouse_report_events(struct psmouse 
*psmouse)
                }
 
                /* Now get it */
-               VMMOUSE_CMD(ABSPOINTER_DATA, 4, status, x, y, z);
+               status = vmware_hypercall4(VMWARE_CMD_ABSPOINTER_DATA, 4,
+                                          &x, &y, &z);
 
                /*
                 * And report what we've got. Prefer to report button
@@ -249,14 +221,10 @@ static psmouse_ret_t vmmouse_process_byte(struct psmouse 
*psmouse)
 static void vmmouse_disable(struct psmouse *psmouse)
 {
        u32 status;
-       u32 dummy1, dummy2, dummy3, dummy4;
-
-       VMMOUSE_CMD(ABSPOINTER_COMMAND, VMMOUSE_CMD_DISABLE,
-                   dummy1, dummy2, dummy3, dummy4);
 
-       VMMOUSE_CMD(ABSPOINTER_STATUS, 0,
-                   status, dummy1, dummy2, dummy3);
+       vmware_hypercall1(VMWARE_CMD_ABSPOINTER_COMMAND, VMMOUSE_CMD_DISABLE);
 
+       status = vmware_hypercall1(VMWARE_CMD_ABSPOINTER_STATUS, 0);
        if ((status & VMMOUSE_ERROR) != VMMOUSE_ERROR)
                psmouse_warn(psmouse, "failed to disable vmmouse device\n");
 }
@@ -273,26 +241,24 @@ static void vmmouse_disable(struct psmouse *psmouse)
 static int vmmouse_enable(struct psmouse *psmouse)
 {
        u32 status, version;
-       u32 dummy1, dummy2, dummy3, dummy4;
 
        /*
         * Try enabling the device. If successful, we should be able to
         * read valid version ID back from it.
         */
-       VMMOUSE_CMD(ABSPOINTER_COMMAND, VMMOUSE_CMD_ENABLE,
-                   dummy1, dummy2, dummy3, dummy4);
+       vmware_hypercall1(VMWARE_CMD_ABSPOINTER_COMMAND, VMMOUSE_CMD_ENABLE);
 
        /*
         * See if version ID can be retrieved.
         */
-       VMMOUSE_CMD(ABSPOINTER_STATUS, 0, status, dummy1, dummy2, dummy3);
+       status = vmware_hypercall1(VMWARE_CMD_ABSPOINTER_STATUS, 0);
        if ((status & 0x0000ffff) == 0) {
                psmouse_dbg(psmouse, "empty flags - assuming no device\n");
                return -ENXIO;
        }
 
-       VMMOUSE_CMD(ABSPOINTER_DATA, 1 /* single item */,
-                   version, dummy1, dummy2, dummy3);
+       version = vmware_hypercall1(VMWARE_CMD_ABSPOINTER_DATA,
+                                   1 /* single item */);
        if (version != VMMOUSE_VERSION_ID) {
                psmouse_dbg(psmouse, "Unexpected version value: %u vs %u\n",
                            (unsigned) version, VMMOUSE_VERSION_ID);
@@ -303,11 +269,11 @@ static int vmmouse_enable(struct psmouse *psmouse)
        /*
         * Restrict ioport access, if possible.
         */
-       VMMOUSE_CMD(ABSPOINTER_RESTRICT, VMMOUSE_RESTRICT_CPL0,
-                   dummy1, dummy2, dummy3, dummy4);
+       vmware_hypercall1(VMWARE_CMD_ABSPOINTER_RESTRICT,
+                         VMMOUSE_RESTRICT_CPL0);
 
-       VMMOUSE_CMD(ABSPOINTER_COMMAND, VMMOUSE_CMD_REQUEST_ABSOLUTE,
-                   dummy1, dummy2, dummy3, dummy4);
+       vmware_hypercall1(VMWARE_CMD_ABSPOINTER_COMMAND,
+                         VMMOUSE_CMD_REQUEST_ABSOLUTE);
 
        return 0;
 }
@@ -344,7 +310,7 @@ static bool vmmouse_check_hypervisor(void)
  */
 int vmmouse_detect(struct psmouse *psmouse, bool set_properties)
 {
-       u32 response, version, dummy1, dummy2;
+       u32 response, version, type;
 
        if (!vmmouse_check_hypervisor()) {
                psmouse_dbg(psmouse,
@@ -353,9 +319,9 @@ int vmmouse_detect(struct psmouse *psmouse, bool 
set_properties)
        }
 
        /* Check if the device is present */
-       response = ~VMMOUSE_PROTO_MAGIC;
-       VMMOUSE_CMD(GETVERSION, 0, version, response, dummy1, dummy2);
-       if (response != VMMOUSE_PROTO_MAGIC || version == 0xffffffffU)
+       response = ~VMWARE_HYPERVISOR_MAGIC;
+       version = vmware_hypercall3(VMWARE_CMD_GETVERSION, 0, &response, &type);
+       if (response != VMWARE_HYPERVISOR_MAGIC || version == 0xffffffffU)
                return -ENXIO;
 
        if (set_properties) {
-- 
2.39.0

Reply via email to