Added VAX idle support for newer versions of NetBSD and OpenBSD guests if they use IPL 1 as the idle trigger

This commit is contained in:
Mark Pizzolato 2012-04-11 19:24:42 -07:00
parent 95a1cb71df
commit c1663795f1
3 changed files with 16 additions and 7 deletions

View file

@ -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 }
};

View file

@ -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 */

View file

@ -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)