* Fixed a double-buffering bug in PKE, due to naive use of
complex macros with side-effects. Gripes.
This commit is contained in:
parent
1d7a3fd775
commit
370e0ef781
1 changed files with 6 additions and 5 deletions
|
@ -913,18 +913,19 @@ pke_check_stall(struct pke_device* me, enum pke_check_target what)
|
||||||
void
|
void
|
||||||
pke_flip_dbf(struct pke_device* me)
|
pke_flip_dbf(struct pke_device* me)
|
||||||
{
|
{
|
||||||
|
int newdf;
|
||||||
/* compute new TOP */
|
/* compute new TOP */
|
||||||
PKE_REG_MASK_SET(me, TOP, TOP,
|
PKE_REG_MASK_SET(me, TOP, TOP,
|
||||||
PKE_REG_MASK_GET(me, TOPS, TOPS));
|
PKE_REG_MASK_GET(me, TOPS, TOPS));
|
||||||
/* flip DBF */
|
/* flip DBF */
|
||||||
PKE_REG_MASK_SET(me, DBF, DF,
|
newdf = PKE_REG_MASK_GET(me, DBF, DF) ? 0 : 1;
|
||||||
PKE_REG_MASK_GET(me, DBF, DF) ? 0 : 1);
|
PKE_REG_MASK_SET(me, DBF, DF, newdf);
|
||||||
PKE_REG_MASK_SET(me, STAT, DBF, PKE_REG_MASK_GET(me, DBF, DF));
|
PKE_REG_MASK_SET(me, STAT, DBF, newdf);
|
||||||
/* compute new TOPS */
|
/* compute new TOPS */
|
||||||
PKE_REG_MASK_SET(me, TOPS, TOPS,
|
PKE_REG_MASK_SET(me, TOPS, TOPS,
|
||||||
(PKE_REG_MASK_GET(me, BASE, BASE) +
|
(PKE_REG_MASK_GET(me, BASE, BASE) +
|
||||||
(PKE_REG_MASK_GET(me, DBF, DF) *
|
newdf * PKE_REG_MASK_GET(me, OFST, OFFSET)));
|
||||||
PKE_REG_MASK_GET(me, OFST, OFFSET))));
|
|
||||||
/* this is equivalent to last word from okadaa (98-02-25):
|
/* this is equivalent to last word from okadaa (98-02-25):
|
||||||
1) TOP=TOPS;
|
1) TOP=TOPS;
|
||||||
2) TOPS=BASE + !DBF*OFFSET
|
2) TOPS=BASE + !DBF*OFFSET
|
||||||
|
|
Loading…
Reference in a new issue