mirror of
https://github.com/SDL-Hercules-390/hyperion.git
synced 2026-04-21 03:12:58 +02:00
ecps vtimer updates
git-svn-id: file:///home/jj/hercules.svn/trunk@3604 956126f8-22a0-4046-8f4a-272fa8102e63
This commit is contained in:
35
clock.c
35
clock.c
@@ -285,7 +285,7 @@ U64 current_tod;
|
||||
#if defined(_FEATURE_INTERVAL_TIMER)
|
||||
|
||||
|
||||
#if defined(_FEATURE_ECPSVM) && 0
|
||||
#if defined(_FEATURE_ECPSVM)
|
||||
static inline S32 ecps_vtimer(REGS *regs)
|
||||
{
|
||||
return (S32)TOD_TO_ITIMER(regs->ecps_vtimer - hw_clock());
|
||||
@@ -320,12 +320,17 @@ S32 itimer;
|
||||
obtain_lock(&sysblk.intlock);
|
||||
if(itimer < 0 && regs->old_timer >= 0)
|
||||
ON_IC_ITIMER(regs);
|
||||
#if defined(_FEATURE_ECPSVM) && 0
|
||||
// ZZ INCOMPLETE ADD VTIMER CHECK
|
||||
// ZZ MAYBE WE SHOULD USE A CPUINT BIT FOR THE VTIMER
|
||||
regs->old_timer = itimer;
|
||||
#if defined(_FEATURE_ECPSVM)
|
||||
if(regs->ecps_vtmrpt)
|
||||
{
|
||||
itimer = ecps_vtimer(regs);
|
||||
if(itimer < 0 && regs->ecps_oldtmr >= 0)
|
||||
ON_IC_ECPSVTIMER(regs);
|
||||
regs->ecps_oldtmr = itimer;
|
||||
}
|
||||
#endif /*defined(_FEATURE_ECPSVM)*/
|
||||
release_lock(&sysblk.intlock);
|
||||
regs->old_timer = itimer;
|
||||
}
|
||||
#endif /*defined(_FEATURE_INTERVAL_TIMER)*/
|
||||
|
||||
@@ -389,20 +394,14 @@ void ARCH_DEP(store_int_timer) (REGS *regs)
|
||||
S32 itimer;
|
||||
FETCH_FW(itimer, regs->psa->inttimer);
|
||||
if(itimer != regs->old_timer)
|
||||
{
|
||||
set_int_timer(regs, itimer - 0x100);
|
||||
regs->old_timer = itimer;
|
||||
}
|
||||
set_int_timer(regs, itimer);
|
||||
STORE_FW(regs->psa->inttimer, int_timer(regs));
|
||||
#if defined(FEATURE_ECPSVM) && 0
|
||||
#if defined(FEATURE_ECPSVM)
|
||||
if(regs->ecps_vtmrpt)
|
||||
{
|
||||
FETCH_FW(itimer, regs->ecps_vtmrpt)
|
||||
FETCH_FW(itimer, regs->ecps_vtmrpt);
|
||||
if(itimer != regs->ecps_oldtmr)
|
||||
{
|
||||
set_ecps_vtimer(regs, itimer - 0x100);
|
||||
regs->ecps_oldtmr = itimer;
|
||||
}
|
||||
set_ecps_vtimer(regs, itimer);
|
||||
STORE_FW(regs->ecps_vtmrpt, ecps_vtimer(regs));
|
||||
}
|
||||
#endif /*defined(FEATURE_ECPSVM)*/
|
||||
@@ -415,11 +414,11 @@ void ARCH_DEP(fetch_int_timer) (REGS *regs)
|
||||
S32 itimer;
|
||||
FETCH_FW(itimer, regs->psa->inttimer);
|
||||
set_int_timer(regs, itimer);
|
||||
#if defined(FEATURE_ECPSVM) && 0
|
||||
#if defined(FEATURE_ECPSVM)
|
||||
if(regs->ecps_vtmrpt)
|
||||
{
|
||||
FETCH_FW(itimer, regs->vtmrpt)
|
||||
set_ecps_vtimer(regs, itimer)
|
||||
FETCH_FW(itimer, regs->ecps_vtmrpt);
|
||||
set_ecps_vtimer(regs, itimer);
|
||||
}
|
||||
#endif /*defined(FEATURE_ECPSVM)*/
|
||||
}
|
||||
|
||||
24
cpuint.h
24
cpuint.h
@@ -5,7 +5,7 @@
|
||||
Floating interrupts are made pending to all CPUs, and are
|
||||
recorded in the sysblk structure, CPU specific interrupts
|
||||
are recorded in the regs structure.
|
||||
hi0m mmmm pppp p00p xxxx xxx0 xxxx hhhs : type U32
|
||||
hi0m mmmm pppp p00p xxxx xxxx xxxx hhhs : type U32
|
||||
|| | |||| |||| |--| |||| |||| |||| |||| h:mask is always '1'
|
||||
|| | |||| |||| | | |||| |||| |||| |||| s:state is always '1'
|
||||
|| | |||| |||| | | |||| |||| |||| |||+--> '1' : PSW_WAIT
|
||||
@@ -18,7 +18,7 @@
|
||||
|| | |||| |||| | | |||| |||| |+---------> '1' : INTKEY
|
||||
|| | |||| |||| | | |||| |||| +----------> '1' : ITIMER
|
||||
|| | |||| |||| | | |||| ||||
|
||||
|| | |||| |||| | | |||| |||+------------> '1' : ECPS VTIMER (NOT YET IN USE)
|
||||
|| | |||| |||| | | |||| |||+------------> '1' : ECPS VTIMER
|
||||
|| | |||| |||| | | |||| ||+-------------> '1' : SERVSIG
|
||||
|| | |||| |||| | | |||| |+--------------> '1' : PTIMER
|
||||
|| | |||| |||| | | |||| +---------------> '1' : CLKC
|
||||
@@ -88,7 +88,7 @@
|
||||
#define IC_CLKC 11 /* 0x00000800 - Architecture dependent (CR0) */
|
||||
#define IC_PTIMER 10 /* 0x00000400 - Architecture dependent (CR0) */
|
||||
#define IC_SERVSIG 9 /* 0x00000200 - Architecture dependent (CR0) */
|
||||
#define IC_UNUSED_8 8 /* 0x00000100 */
|
||||
#define IC_ECPSVTIMER 8 /* 0x00000100 - Not Architecture dependent */
|
||||
#define IC_ITIMER 7 /* 0x00000080 - Architecture dependent (CR0) */
|
||||
#define IC_INTKEY 6 /* 0x00000040 - Architecture dependent (CR0) */
|
||||
#define IC_EXTSIG 5 /* 0x00000020 - Architecture dependent (CR0) */
|
||||
@@ -120,6 +120,7 @@
|
||||
| BIT(IC_CLKC) \
|
||||
| BIT(IC_PTIMER) \
|
||||
| BIT(IC_SERVSIG) \
|
||||
| BIT(IC_ECPSVTIMER) \
|
||||
| BIT(IC_ITIMER) \
|
||||
| BIT(IC_INTKEY) \
|
||||
| BIT(IC_EXTSIG) \
|
||||
@@ -352,6 +353,14 @@
|
||||
(_regs)->ints_state |= BIT(IC_PTIMER); \
|
||||
} while (0)
|
||||
|
||||
#define ON_IC_ECPSVTIMER(_regs) \
|
||||
do { \
|
||||
if ( (_regs)->ints_mask & BIT(IC_ECPSVTIMER) ) \
|
||||
(_regs)->ints_state |= BIT(IC_INTERRUPT) | BIT(IC_ECPSVTIMER); \
|
||||
else \
|
||||
(_regs)->ints_state |= BIT(IC_ECPSVTIMER); \
|
||||
} while (0)
|
||||
|
||||
#define ON_IC_CLKC(_regs) \
|
||||
do { \
|
||||
if ( (_regs)->ints_mask & BIT(IC_CLKC) ) \
|
||||
@@ -516,6 +525,11 @@
|
||||
(_regs)->ints_state &= ~BIT(IC_PTIMER); \
|
||||
} while (0)
|
||||
|
||||
#define OFF_IC_ECPSVTIMER(_regs) \
|
||||
do { \
|
||||
(_regs)->ints_state &= ~BIT(IC_ECPSVTIMER); \
|
||||
} while (0)
|
||||
|
||||
#define OFF_IC_CLKC(_regs) \
|
||||
do { \
|
||||
(_regs)->ints_state &= ~BIT(IC_CLKC); \
|
||||
@@ -587,6 +601,7 @@
|
||||
#define IS_IC_SERVSIG ( sysblk.ints_state & BIT(IC_SERVSIG) )
|
||||
#define IS_IC_ITIMER(_regs) ( (_regs)->ints_state & BIT(IC_ITIMER) )
|
||||
#define IS_IC_PTIMER(_regs) ( (_regs)->ints_state & BIT(IC_PTIMER) )
|
||||
#define IS_IC_ECPSVTIMER(_regs) ( (_regs)->ints_state & BIT(IC_ECPSVTIMER))
|
||||
#define IS_IC_CLKC(_regs) ( (_regs)->ints_state & BIT(IC_CLKC) )
|
||||
#define IS_IC_EXTCALL(_regs) ( (_regs)->ints_state & BIT(IC_EXTCALL) )
|
||||
#define IS_IC_MALFALT(_regs) ( (_regs)->ints_state & BIT(IC_MALFALT) )
|
||||
@@ -643,6 +658,9 @@
|
||||
#define OPEN_IC_PTIMER(_regs) \
|
||||
( (_regs)->ints_state & (_regs)->ints_mask & BIT(IC_PTIMER) )
|
||||
|
||||
#define OPEN_IC_ECPSVTIMER(_regs) \
|
||||
( (_regs)->ints_state & (_regs)->ints_mask & BIT(IC_ECPSVTIMER) )
|
||||
|
||||
#define OPEN_IC_CLKC(_regs) \
|
||||
( (_regs)->ints_state & (_regs)->ints_mask & BIT(IC_CLKC) )
|
||||
|
||||
|
||||
11
ecpsvm.c
11
ecpsvm.c
@@ -190,16 +190,6 @@ struct _ECPSVM_SASTATS
|
||||
VALIDATE_AIA(regs); \
|
||||
} while(0)
|
||||
|
||||
#if defined(_FEATURE_SIE)
|
||||
#define INITSIESTATE(_regs) \
|
||||
do { \
|
||||
SIE_STATE(&(_regs)) = 0; \
|
||||
(_regs).sie_mode = 0; \
|
||||
} while(0)
|
||||
#else
|
||||
#define INITSIESTATE(_regs)
|
||||
#endif
|
||||
|
||||
#define INITPSEUDOIP(_regs) \
|
||||
do { \
|
||||
(_regs).ip="\0\0"; \
|
||||
@@ -207,7 +197,6 @@ struct _ECPSVM_SASTATS
|
||||
|
||||
#define INITPSEUDOREGS(_regs) \
|
||||
do { \
|
||||
INITSIESTATE((_regs)); \
|
||||
INITPSEUDOIP((_regs)); \
|
||||
} while(0)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user