From c1663795f18ac6641540b4b5c004c8297590db8e Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Wed, 11 Apr 2012 19:24:42 -0700 Subject: [PATCH] Added VAX idle support for newer versions of NetBSD and OpenBSD guests if they use IPL 1 as the idle trigger --- VAX/vax_cpu.c | 12 +++++------- VAX/vax_cpu1.c | 3 +++ VAX/vax_defs.h | 8 ++++++++ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/VAX/vax_cpu.c b/VAX/vax_cpu.c index 9f31abaf..dcf712f5 100644 --- a/VAX/vax_cpu.c +++ b/VAX/vax_cpu.c @@ -188,10 +188,6 @@ #define UNIT_CONH (1u << UNIT_V_CONH) #define UNIT_MSIZE (1u << UNIT_V_MSIZE) #define GET_CUR acc = ACC_MASK (PSL_GETCUR (PSL)) -#define VAX_IDLE_VMS 0x01 -#define VAX_IDLE_ULT 0x02 -#define VAX_IDLE_ULTOLD 0x04 -#define VAX_IDLE_QUAD 0x08 #define OPND_SIZE 16 #define INST_SIZE 52 @@ -3428,13 +3424,15 @@ struct os_idle { static struct os_idle os_tab[] = { { "VMS", VAX_IDLE_VMS }, - { "NETBSD", VAX_IDLE_ULTOLD }, + { "NETBSDOLD", VAX_IDLE_ULTOLD }, + { "NETBSD", VAX_IDLE_BSDNEW }, { "ULTRIX", VAX_IDLE_ULT }, { "ULTRIXOLD", VAX_IDLE_ULTOLD }, - { "OPENBSD", VAX_IDLE_QUAD }, + { "OPENBSDOLD", VAX_IDLE_QUAD }, + { "OPENBSD", VAX_IDLE_BSDNEW }, { "QUASIJARUS", VAX_IDLE_QUAD }, { "32V", VAX_IDLE_QUAD }, - { "ALL", VAX_IDLE_VMS|VAX_IDLE_ULTOLD|VAX_IDLE_ULT|VAX_IDLE_QUAD }, + { "ALL", VAX_IDLE_VMS|VAX_IDLE_ULTOLD|VAX_IDLE_ULT|VAX_IDLE_QUAD|VAX_IDLE_BSDNEW }, { NULL, 0 } }; diff --git a/VAX/vax_cpu1.c b/VAX/vax_cpu1.c index 6e903e60..cb91fa54 100644 --- a/VAX/vax_cpu1.c +++ b/VAX/vax_cpu1.c @@ -1520,6 +1520,9 @@ switch (prn) { /* case on reg # */ case MT_IPL: /* IPL */ PSL = (PSL & ~PSL_IPL) | ((val & PSL_M_IPL) << PSL_V_IPL); + if ((VAX_IDLE_BSDNEW & cpu_idle_mask) && /* New NetBSD and OpenBSD */ + (val == 1)) /* IPL 1 */ + cpu_idle(); /* idle loop */ break; case MT_ASTLVL: /* ASTLVL */ diff --git a/VAX/vax_defs.h b/VAX/vax_defs.h index 608f8662..5592a066 100644 --- a/VAX/vax_defs.h +++ b/VAX/vax_defs.h @@ -718,6 +718,14 @@ enum opcodes { else cc = 0; \ if (((uint32) s1) < ((uint32) s2)) cc = cc | CC_C +#define VAX_IDLE_VMS 0x01 +#define VAX_IDLE_ULT 0x02 +#define VAX_IDLE_ULTOLD 0x04 +#define VAX_IDLE_QUAD 0x08 +#define VAX_IDLE_BSDNEW 0x10 +extern uint32 cpu_idle_mask; /* idle mask */ +void cpu_idle (void); + /* Model dependent definitions */ #if defined (VAX_780)