ecps vtimer updates

git-svn-id: file:///home/jj/hercules.svn/trunk@3604 956126f8-22a0-4046-8f4a-272fa8102e63
This commit is contained in:
Jan Jaeger
2006-01-13 11:00:39 +00:00
parent 3dcba0f8d9
commit 4742847648
4 changed files with 42 additions and 32 deletions

35
clock.c
View File

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

View File

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

View File

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

View File

@@ -43,6 +43,10 @@
#define _FEATURE_INTERVAL_TIMER
#endif
#if defined(FEATURE_ECPSVM)
#define _FEATURE_ECPSVM
#endif
#if defined(FEATURE_VECTOR_FACILITY)
#define _FEATURE_VECTOR_FACILITY
#endif