Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9d1b39a9 authored by Gleb Natapov's avatar Gleb Natapov Committed by Avi Kivity
Browse files

KVM: emulator: make x86 emulation modes enum instead of defines



Signed-off-by: default avatarGleb Natapov <gleb@redhat.com>
Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
parent 716d51ab
Loading
Loading
Loading
Loading
+10 −12
Original line number Original line Diff line number Diff line
@@ -249,6 +249,15 @@ struct read_cache {
	unsigned long end;
	unsigned long end;
};
};


/* Execution mode, passed to the emulator. */
enum x86emul_mode {
	X86EMUL_MODE_REAL,	/* Real mode.             */
	X86EMUL_MODE_VM86,	/* Virtual 8086 mode.     */
	X86EMUL_MODE_PROT16,	/* 16-bit protected mode. */
	X86EMUL_MODE_PROT32,	/* 32-bit protected mode. */
	X86EMUL_MODE_PROT64,	/* 64-bit (long) mode.    */
};

struct x86_emulate_ctxt {
struct x86_emulate_ctxt {
	const struct x86_emulate_ops *ops;
	const struct x86_emulate_ops *ops;


@@ -256,7 +265,7 @@ struct x86_emulate_ctxt {
	unsigned long eflags;
	unsigned long eflags;
	unsigned long eip; /* eip before instruction emulation */
	unsigned long eip; /* eip before instruction emulation */
	/* Emulated execution mode, represented by an X86EMUL_MODE value. */
	/* Emulated execution mode, represented by an X86EMUL_MODE value. */
	int mode;
	enum x86emul_mode mode;


	/* interruptibility state, as a result of execution of STI or MOV SS */
	/* interruptibility state, as a result of execution of STI or MOV SS */
	int interruptibility;
	int interruptibility;
@@ -308,17 +317,6 @@ struct x86_emulate_ctxt {
#define REPE_PREFIX	0xf3
#define REPE_PREFIX	0xf3
#define REPNE_PREFIX	0xf2
#define REPNE_PREFIX	0xf2


/* Execution mode, passed to the emulator. */
#define X86EMUL_MODE_REAL     0	/* Real mode.             */
#define X86EMUL_MODE_VM86     1	/* Virtual 8086 mode.     */
#define X86EMUL_MODE_PROT16   2	/* 16-bit protected mode. */
#define X86EMUL_MODE_PROT32   4	/* 32-bit protected mode. */
#define X86EMUL_MODE_PROT64   8	/* 64-bit (long) mode.    */

/* any protected mode   */
#define X86EMUL_MODE_PROT     (X86EMUL_MODE_PROT16|X86EMUL_MODE_PROT32| \
			       X86EMUL_MODE_PROT64)

/* CPUID vendors */
/* CPUID vendors */
#define X86EMUL_CPUID_VENDOR_AuthenticAMD_ebx 0x68747541
#define X86EMUL_CPUID_VENDOR_AuthenticAMD_ebx 0x68747541
#define X86EMUL_CPUID_VENDOR_AuthenticAMD_ecx 0x444d4163
#define X86EMUL_CPUID_VENDOR_AuthenticAMD_ecx 0x444d4163
+3 −1
Original line number Original line Diff line number Diff line
@@ -2268,6 +2268,8 @@ static int em_sysenter(struct x86_emulate_ctxt *ctxt)
		if (msr_data == 0x0)
		if (msr_data == 0x0)
			return emulate_gp(ctxt, 0);
			return emulate_gp(ctxt, 0);
		break;
		break;
	default:
		break;
	}
	}


	ctxt->eflags &= ~(EFLG_VM | EFLG_IF | EFLG_RF);
	ctxt->eflags &= ~(EFLG_VM | EFLG_IF | EFLG_RF);
@@ -4400,7 +4402,7 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
	}
	}


	/* Instruction can only be executed in protected mode */
	/* Instruction can only be executed in protected mode */
	if ((ctxt->d & Prot) && !(ctxt->mode & X86EMUL_MODE_PROT)) {
	if ((ctxt->d & Prot) && ctxt->mode < X86EMUL_MODE_PROT16) {
		rc = emulate_ud(ctxt);
		rc = emulate_ud(ctxt);
		goto done;
		goto done;
	}
	}