提交 dcd938f0 编写于 作者: L Liran Alon 提交者: Paolo Bonzini

hw/i386/vmport: Define enum for all commands

No functional change.

Defining an enum for all VMPort commands have the following advantages:
* It gets rid of the error-prone requirement to update VMPORT_ENTRIES
when new VMPort commands are added to QEMU.
* It makes it clear to know by looking at one place at the source, what
are all the VMPort commands supported by QEMU.
Reviewed-by: NNikita Leshenko <nikita.leshchenko@oracle.com>
Signed-off-by: NLiran Alon <liran.alon@oracle.com>
Reviewed-by: NPhilippe Mathieu-Daudé <philmd@redhat.com>
Message-Id: <20200312165431.82118-9-liran.alon@oracle.com>
Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
上级 d8f23d61
...@@ -34,12 +34,6 @@ ...@@ -34,12 +34,6 @@
/* debug only vmmouse */ /* debug only vmmouse */
//#define DEBUG_VMMOUSE //#define DEBUG_VMMOUSE
/* VMMouse Commands */
#define VMMOUSE_GETVERSION 10
#define VMMOUSE_DATA 39
#define VMMOUSE_STATUS 40
#define VMMOUSE_COMMAND 41
#define VMMOUSE_READ_ID 0x45414552 #define VMMOUSE_READ_ID 0x45414552
#define VMMOUSE_DISABLE 0x000000f5 #define VMMOUSE_DISABLE 0x000000f5
#define VMMOUSE_REQUEST_RELATIVE 0x4c455252 #define VMMOUSE_REQUEST_RELATIVE 0x4c455252
...@@ -217,10 +211,10 @@ static uint32_t vmmouse_ioport_read(void *opaque, uint32_t addr) ...@@ -217,10 +211,10 @@ static uint32_t vmmouse_ioport_read(void *opaque, uint32_t addr)
command = data[2] & 0xFFFF; command = data[2] & 0xFFFF;
switch (command) { switch (command) {
case VMMOUSE_STATUS: case VMPORT_CMD_VMMOUSE_STATUS:
data[0] = vmmouse_get_status(s); data[0] = vmmouse_get_status(s);
break; break;
case VMMOUSE_COMMAND: case VMPORT_CMD_VMMOUSE_COMMAND:
switch (data[1]) { switch (data[1]) {
case VMMOUSE_DISABLE: case VMMOUSE_DISABLE:
vmmouse_disable(s); vmmouse_disable(s);
...@@ -239,7 +233,7 @@ static uint32_t vmmouse_ioport_read(void *opaque, uint32_t addr) ...@@ -239,7 +233,7 @@ static uint32_t vmmouse_ioport_read(void *opaque, uint32_t addr)
break; break;
} }
break; break;
case VMMOUSE_DATA: case VMPORT_CMD_VMMOUSE_DATA:
vmmouse_data(s, data, data[1]); vmmouse_data(s, data, data[1]);
break; break;
default: default:
...@@ -296,9 +290,9 @@ static void vmmouse_realizefn(DeviceState *dev, Error **errp) ...@@ -296,9 +290,9 @@ static void vmmouse_realizefn(DeviceState *dev, Error **errp)
return; return;
} }
vmport_register(VMMOUSE_STATUS, vmmouse_ioport_read, s); vmport_register(VMPORT_CMD_VMMOUSE_STATUS, vmmouse_ioport_read, s);
vmport_register(VMMOUSE_COMMAND, vmmouse_ioport_read, s); vmport_register(VMPORT_CMD_VMMOUSE_COMMAND, vmmouse_ioport_read, s);
vmport_register(VMMOUSE_DATA, vmmouse_ioport_read, s); vmport_register(VMPORT_CMD_VMMOUSE_DATA, vmmouse_ioport_read, s);
} }
static Property vmmouse_properties[] = { static Property vmmouse_properties[] = {
......
...@@ -37,10 +37,6 @@ ...@@ -37,10 +37,6 @@
#include "cpu.h" #include "cpu.h"
#include "trace.h" #include "trace.h"
#define VMPORT_CMD_GETVERSION 0x0a
#define VMPORT_CMD_GETRAMSIZE 0x14
#define VMPORT_ENTRIES 0x2c
#define VMPORT_MAGIC 0x564D5868 #define VMPORT_MAGIC 0x564D5868
/* Compatibility flags for migration */ /* Compatibility flags for migration */
...@@ -71,12 +67,9 @@ typedef struct VMPortState { ...@@ -71,12 +67,9 @@ typedef struct VMPortState {
static VMPortState *port_state; static VMPortState *port_state;
void vmport_register(unsigned char command, VMPortReadFunc *func, void *opaque) void vmport_register(VMPortCommand command, VMPortReadFunc *func, void *opaque)
{ {
if (command >= VMPORT_ENTRIES) { assert(command < VMPORT_ENTRIES);
return;
}
trace_vmport_register(command, func, opaque); trace_vmport_register(command, func, opaque);
port_state->func[command] = func; port_state->func[command] = func;
port_state->opaque[command] = opaque; port_state->opaque[command] = opaque;
......
...@@ -6,11 +6,20 @@ ...@@ -6,11 +6,20 @@
#define TYPE_VMPORT "vmport" #define TYPE_VMPORT "vmport"
typedef uint32_t (VMPortReadFunc)(void *opaque, uint32_t address); typedef uint32_t (VMPortReadFunc)(void *opaque, uint32_t address);
typedef enum {
VMPORT_CMD_GETVERSION = 10,
VMPORT_CMD_GETRAMSIZE = 20,
VMPORT_CMD_VMMOUSE_DATA = 39,
VMPORT_CMD_VMMOUSE_STATUS = 40,
VMPORT_CMD_VMMOUSE_COMMAND = 41,
VMPORT_ENTRIES
} VMPortCommand;
static inline void vmport_init(ISABus *bus) static inline void vmport_init(ISABus *bus)
{ {
isa_create_simple(bus, TYPE_VMPORT); isa_create_simple(bus, TYPE_VMPORT);
} }
void vmport_register(unsigned char command, VMPortReadFunc *func, void *opaque); void vmport_register(VMPortCommand command, VMPortReadFunc *func, void *opaque);
#endif #endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册