PDP11, VAX: Cleaned MSCP/TMSCP packet queues to be uint16
This commit is contained in:
parent
12f43e660f
commit
14b9265af3
3 changed files with 25 additions and 42 deletions
|
@ -166,8 +166,8 @@ extern int32 MMR2;
|
||||||
#define UNIT_NOAUTO (1 << UNIT_V_NOAUTO)
|
#define UNIT_NOAUTO (1 << UNIT_V_NOAUTO)
|
||||||
#define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE)
|
#define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE)
|
||||||
#define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE)
|
#define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE)
|
||||||
#define cpkt u3 /* current packet */
|
#define cpkt us9 /* current packet */
|
||||||
#define pktq u4 /* packet queue */
|
#define pktq us10 /* packet queue */
|
||||||
#define uf buf /* settable unit flags */
|
#define uf buf /* settable unit flags */
|
||||||
#define cnum wait /* controller index */
|
#define cnum wait /* controller index */
|
||||||
#define io_status u5 /* io status from callback */
|
#define io_status u5 /* io status from callback */
|
||||||
|
@ -1514,14 +1514,10 @@ if (cp->csta < CST_UP) { /* still init? */
|
||||||
} /* end if */
|
} /* end if */
|
||||||
|
|
||||||
for (i = 0; i < RQ_NUMDR; i++) { /* chk unit q's */
|
for (i = 0; i < RQ_NUMDR; i++) { /* chk unit q's */
|
||||||
uint16 tpktq;
|
|
||||||
|
|
||||||
nuptr = dptr->units + i; /* ptr to unit */
|
nuptr = dptr->units + i; /* ptr to unit */
|
||||||
if (nuptr->cpkt || (nuptr->pktq == 0))
|
if (nuptr->cpkt || (nuptr->pktq == 0))
|
||||||
continue;
|
continue;
|
||||||
tpktq = (uint16)nuptr->pktq;
|
pkt = rq_deqh (cp, &nuptr->pktq); /* get top of q */
|
||||||
pkt = rq_deqh (cp, &tpktq); /* get top of q */
|
|
||||||
nuptr->pktq = tpktq;
|
|
||||||
if (!rq_mscp (cp, pkt, FALSE)) /* process */
|
if (!rq_mscp (cp, pkt, FALSE)) /* process */
|
||||||
return SCPE_OK;
|
return SCPE_OK;
|
||||||
}
|
}
|
||||||
|
@ -1663,17 +1659,17 @@ tpkt = 0; /* set no mtch */
|
||||||
if ((uptr = rq_getucb (cp, lu))) { /* get unit */
|
if ((uptr = rq_getucb (cp, lu))) { /* get unit */
|
||||||
if (uptr->cpkt && /* curr pkt? */
|
if (uptr->cpkt && /* curr pkt? */
|
||||||
(GETP32 (uptr->cpkt, CMD_REFL) == ref)) { /* match ref? */
|
(GETP32 (uptr->cpkt, CMD_REFL) == ref)) { /* match ref? */
|
||||||
tpkt = (uint16)uptr->cpkt; /* save match */
|
tpkt = uptr->cpkt; /* save match */
|
||||||
uptr->cpkt = 0; /* gonzo */
|
uptr->cpkt = 0; /* gonzo */
|
||||||
sim_cancel (uptr); /* cancel unit */
|
sim_cancel (uptr); /* cancel unit */
|
||||||
sim_activate (dptr->units + RQ_QUEUE, rq_qtime);
|
sim_activate (dptr->units + RQ_QUEUE, rq_qtime);
|
||||||
}
|
}
|
||||||
else if (uptr->pktq && /* head of q? */
|
else if (uptr->pktq && /* head of q? */
|
||||||
(GETP32 (uptr->pktq, CMD_REFL) == ref)) { /* match ref? */
|
(GETP32 (uptr->pktq, CMD_REFL) == ref)) { /* match ref? */
|
||||||
tpkt = (uint16)uptr->pktq; /* save match */
|
tpkt = uptr->pktq; /* save match */
|
||||||
uptr->pktq = cp->pak[tpkt].link; /* unlink */
|
uptr->pktq = cp->pak[tpkt].link; /* unlink */
|
||||||
}
|
}
|
||||||
else if ((prv = (uint16)uptr->pktq)) { /* srch pkt q */
|
else if ((prv = uptr->pktq)) { /* srch pkt q */
|
||||||
while ((tpkt = cp->pak[prv].link)) { /* walk list */
|
while ((tpkt = cp->pak[prv].link)) { /* walk list */
|
||||||
if (GETP32 (tpkt, RSP_REFL) == ref) { /* match? unlink */
|
if (GETP32 (tpkt, RSP_REFL) == ref) { /* match? unlink */
|
||||||
cp->pak[prv].link = cp->pak[tpkt].link;
|
cp->pak[prv].link = cp->pak[tpkt].link;
|
||||||
|
@ -1707,10 +1703,7 @@ sim_debug (DBG_TRC, rq_devmap[cp->cnum], "rq_avl\n");
|
||||||
|
|
||||||
if ((uptr = rq_getucb (cp, lu))) { /* unit exist? */
|
if ((uptr = rq_getucb (cp, lu))) { /* unit exist? */
|
||||||
if (q && uptr->cpkt) { /* need to queue? */
|
if (q && uptr->cpkt) { /* need to queue? */
|
||||||
uint16 tpktq = (uint16)uptr->pktq;
|
rq_enqt (cp, &uptr->pktq, pkt); /* do later */
|
||||||
|
|
||||||
rq_enqt (cp, &tpktq, pkt); /* do later */
|
|
||||||
uptr->pktq = tpktq;
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
uptr->flags = uptr->flags & ~UNIT_ONL; /* not online */
|
uptr->flags = uptr->flags & ~UNIT_ONL; /* not online */
|
||||||
|
@ -1807,10 +1800,7 @@ sim_debug (DBG_TRC, rq_devmap[cp->cnum], "rq_onl\n");
|
||||||
|
|
||||||
if ((uptr = rq_getucb (cp, lu))) { /* unit exist? */
|
if ((uptr = rq_getucb (cp, lu))) { /* unit exist? */
|
||||||
if (q && uptr->cpkt) { /* need to queue? */
|
if (q && uptr->cpkt) { /* need to queue? */
|
||||||
uint16 tpktq = (uint16)uptr->pktq;
|
rq_enqt (cp, &uptr->pktq, pkt); /* do later */
|
||||||
|
|
||||||
rq_enqt (cp, &tpktq, pkt); /* do later */
|
|
||||||
uptr->pktq = tpktq;
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
if ((uptr->flags & UNIT_ATT) == 0) /* not attached? */
|
if ((uptr->flags & UNIT_ATT) == 0) /* not attached? */
|
||||||
|
@ -1882,10 +1872,7 @@ sim_debug (DBG_TRC, rq_devmap[cp->cnum], "rq_suc\n");
|
||||||
|
|
||||||
if ((uptr = rq_getucb (cp, lu))) { /* unit exist? */
|
if ((uptr = rq_getucb (cp, lu))) { /* unit exist? */
|
||||||
if (q && uptr->cpkt) { /* need to queue? */
|
if (q && uptr->cpkt) { /* need to queue? */
|
||||||
uint16 tpktq = (uint16)uptr->pktq;
|
rq_enqt (cp, &uptr->pktq, pkt); /* do later */
|
||||||
|
|
||||||
rq_enqt (cp, &tpktq, pkt); /* do later */
|
|
||||||
uptr->pktq = tpktq;
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
if ((uptr->flags & UNIT_ATT) == 0) /* not attached? */
|
if ((uptr->flags & UNIT_ATT) == 0) /* not attached? */
|
||||||
|
@ -1916,10 +1903,7 @@ sim_debug (DBG_TRC, rq_devmap[cp->cnum], "rq_fmt\n");
|
||||||
|
|
||||||
if ((uptr = rq_getucb (cp, lu))) { /* unit exist? */
|
if ((uptr = rq_getucb (cp, lu))) { /* unit exist? */
|
||||||
if (q && uptr->cpkt) { /* need to queue? */
|
if (q && uptr->cpkt) { /* need to queue? */
|
||||||
uint16 tpktq = (uint16)uptr->pktq;
|
rq_enqt (cp, &uptr->pktq, pkt); /* do later */
|
||||||
|
|
||||||
rq_enqt (cp, &tpktq, pkt); /* do later */
|
|
||||||
uptr->pktq = tpktq;
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
if (GET_DTYPE (uptr->flags) != RX33_DTYPE) /* RX33? */
|
if (GET_DTYPE (uptr->flags) != RX33_DTYPE) /* RX33? */
|
||||||
|
@ -2273,7 +2257,7 @@ return SCPE_OK;
|
||||||
|
|
||||||
t_bool rq_rw_end (MSC *cp, UNIT *uptr, uint16 flg, uint16 sts)
|
t_bool rq_rw_end (MSC *cp, UNIT *uptr, uint16 flg, uint16 sts)
|
||||||
{
|
{
|
||||||
uint16 pkt = (uint16)uptr->cpkt; /* packet */
|
uint16 pkt = uptr->cpkt; /* packet */
|
||||||
uint16 cmd = GETP (pkt, CMD_OPC, OPC); /* get cmd */
|
uint16 cmd = GETP (pkt, CMD_OPC, OPC); /* get cmd */
|
||||||
uint32 bc = GETP32 (pkt, RW_BCL); /* init bc */
|
uint32 bc = GETP32 (pkt, RW_BCL); /* init bc */
|
||||||
uint32 wbc = GETP32 (pkt, RW_WBCL); /* work bc */
|
uint32 wbc = GETP32 (pkt, RW_WBCL); /* work bc */
|
||||||
|
@ -2313,7 +2297,7 @@ if ((cp->cflgs & CF_THS) == 0) /* logging? */
|
||||||
return OK;
|
return OK;
|
||||||
if (!rq_deqf (cp, &pkt)) /* get log pkt */
|
if (!rq_deqf (cp, &pkt)) /* get log pkt */
|
||||||
return ERR;
|
return ERR;
|
||||||
tpkt = (uint16)uptr->cpkt; /* rw pkt */
|
tpkt = uptr->cpkt; /* rw pkt */
|
||||||
lu = cp->pak[tpkt].d[CMD_UN]; /* unit # */
|
lu = cp->pak[tpkt].d[CMD_UN]; /* unit # */
|
||||||
lbn = GETP32 (tpkt, RW_WBLL); /* recent LBN */
|
lbn = GETP32 (tpkt, RW_WBLL); /* recent LBN */
|
||||||
dtyp = GET_DTYPE (uptr->flags); /* drv type */
|
dtyp = GET_DTYPE (uptr->flags); /* drv type */
|
||||||
|
@ -2367,7 +2351,7 @@ if ((cp->cflgs & CF_THS) == 0) /* logging? */
|
||||||
return OK;
|
return OK;
|
||||||
if (!rq_deqf (cp, &pkt)) /* get log pkt */
|
if (!rq_deqf (cp, &pkt)) /* get log pkt */
|
||||||
return ERR;
|
return ERR;
|
||||||
tpkt = (uint16)uptr->cpkt; /* rw pkt */
|
tpkt = uptr->cpkt; /* rw pkt */
|
||||||
cp->pak[pkt].d[ELP_REFL] = cp->pak[tpkt].d[CMD_REFL]; /* copy cmd ref */
|
cp->pak[pkt].d[ELP_REFL] = cp->pak[tpkt].d[CMD_REFL]; /* copy cmd ref */
|
||||||
cp->pak[pkt].d[ELP_REFH] = cp->pak[tpkt].d[CMD_REFH];
|
cp->pak[pkt].d[ELP_REFH] = cp->pak[tpkt].d[CMD_REFH];
|
||||||
cp->pak[pkt].d[ELP_UN] = cp->pak[tpkt].d[CMD_UN]; /* copy unit */
|
cp->pak[pkt].d[ELP_UN] = cp->pak[tpkt].d[CMD_UN]; /* copy unit */
|
||||||
|
|
|
@ -117,8 +117,8 @@
|
||||||
#define UNIT_SXC (1 << UNIT_V_SXC)
|
#define UNIT_SXC (1 << UNIT_V_SXC)
|
||||||
#define UNIT_POL (1 << UNIT_V_POL)
|
#define UNIT_POL (1 << UNIT_V_POL)
|
||||||
#define UNIT_TMK (1 << UNIT_V_TMK)
|
#define UNIT_TMK (1 << UNIT_V_TMK)
|
||||||
#define cpkt u3 /* current packet */
|
#define cpkt us9 /* current packet */
|
||||||
#define pktq u4 /* packet queue */
|
#define pktq us10 /* packet queue */
|
||||||
#define uf buf /* settable unit flags */
|
#define uf buf /* settable unit flags */
|
||||||
#define objp wait /* object position */
|
#define objp wait /* object position */
|
||||||
#define io_status u5 /* io status from callback */
|
#define io_status u5 /* io status from callback */
|
||||||
|
@ -730,7 +730,7 @@ for (i = 0; i < TQ_NUMDR; i++) { /* chk unit q's */
|
||||||
nuptr = tq_dev.units + i; /* ptr to unit */
|
nuptr = tq_dev.units + i; /* ptr to unit */
|
||||||
if (nuptr->cpkt || (nuptr->pktq == 0))
|
if (nuptr->cpkt || (nuptr->pktq == 0))
|
||||||
continue;
|
continue;
|
||||||
tpkt = (uint16)nuptr->pktq;
|
tpkt = nuptr->pktq;
|
||||||
pkt = tq_deqh (&tpkt); /* get top of q */
|
pkt = tq_deqh (&tpkt); /* get top of q */
|
||||||
nuptr->pktq = tpkt;
|
nuptr->pktq = tpkt;
|
||||||
if (!tq_mscp (pkt, FALSE)) /* process */
|
if (!tq_mscp (pkt, FALSE)) /* process */
|
||||||
|
@ -836,10 +836,7 @@ else { /* valid cmd */
|
||||||
if ((uptr = tq_getucb (lu))) { /* valid unit? */
|
if ((uptr = tq_getucb (lu))) { /* valid unit? */
|
||||||
if (q && (tq_cmf[cmd] & CMF_SEQ) && /* queueing, seq, */
|
if (q && (tq_cmf[cmd] & CMF_SEQ) && /* queueing, seq, */
|
||||||
(uptr->cpkt || uptr->pktq)) { /* and active? */
|
(uptr->cpkt || uptr->pktq)) { /* and active? */
|
||||||
uint16 tpktq = (uint16)uptr->pktq;
|
tq_enqt (&uptr->pktq, pkt); /* do later */
|
||||||
|
|
||||||
tq_enqt (&tpktq, pkt); /* do later */
|
|
||||||
uptr->pktq = tpktq;
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
/* if (tq_cmf[cmd] & MD_CDL) *//* clr cch lost? */
|
/* if (tq_cmf[cmd] & MD_CDL) *//* clr cch lost? */
|
||||||
|
@ -920,17 +917,17 @@ tpkt = 0; /* set no mtch */
|
||||||
if ((uptr = tq_getucb (lu))) { /* get unit */
|
if ((uptr = tq_getucb (lu))) { /* get unit */
|
||||||
if (uptr->cpkt && /* curr pkt? */
|
if (uptr->cpkt && /* curr pkt? */
|
||||||
(GETP32 (uptr->cpkt, CMD_REFL) == ref)) { /* match ref? */
|
(GETP32 (uptr->cpkt, CMD_REFL) == ref)) { /* match ref? */
|
||||||
tpkt = (uint16)uptr->cpkt; /* save match */
|
tpkt = uptr->cpkt; /* save match */
|
||||||
uptr->cpkt = 0; /* gonzo */
|
uptr->cpkt = 0; /* gonzo */
|
||||||
sim_cancel (uptr); /* cancel unit */
|
sim_cancel (uptr); /* cancel unit */
|
||||||
sim_activate (&tq_unit[TQ_QUEUE], tq_qtime);
|
sim_activate (&tq_unit[TQ_QUEUE], tq_qtime);
|
||||||
}
|
}
|
||||||
else if (uptr->pktq && /* head of q? */
|
else if (uptr->pktq && /* head of q? */
|
||||||
(GETP32 (uptr->pktq, CMD_REFL) == ref)) { /* match ref? */
|
(GETP32 (uptr->pktq, CMD_REFL) == ref)) { /* match ref? */
|
||||||
tpkt = (uint16)uptr->pktq; /* save match */
|
tpkt = uptr->pktq; /* save match */
|
||||||
uptr->pktq = tq_pkt[tpkt].link; /* unlink */
|
uptr->pktq = tq_pkt[tpkt].link; /* unlink */
|
||||||
}
|
}
|
||||||
else if ((prv = (uint16)uptr->pktq)) { /* srch pkt q */
|
else if ((prv = uptr->pktq)) { /* srch pkt q */
|
||||||
while ((tpkt = tq_pkt[prv].link)) { /* walk list */
|
while ((tpkt = tq_pkt[prv].link)) { /* walk list */
|
||||||
if (GETP32 (tpkt, RSP_REFL) == ref) { /* match ref? */
|
if (GETP32 (tpkt, RSP_REFL) == ref) { /* match ref? */
|
||||||
tq_pkt[prv].link = tq_pkt[tpkt].link; /* unlink */
|
tq_pkt[prv].link = tq_pkt[tpkt].link; /* unlink */
|
||||||
|
@ -1508,7 +1505,7 @@ return SCPE_IOERR;
|
||||||
|
|
||||||
t_bool tq_mot_end (UNIT *uptr, uint32 flg, uint16 sts, uint32 rsiz)
|
t_bool tq_mot_end (UNIT *uptr, uint32 flg, uint16 sts, uint32 rsiz)
|
||||||
{
|
{
|
||||||
uint16 pkt = (uint16)uptr->cpkt; /* packet */
|
uint16 pkt = uptr->cpkt; /* packet */
|
||||||
uint32 cmd = GETP (pkt, CMD_OPC, OPC); /* get cmd */
|
uint32 cmd = GETP (pkt, CMD_OPC, OPC); /* get cmd */
|
||||||
uint16 lnt = RW_LNT_T; /* assume rw */
|
uint16 lnt = RW_LNT_T; /* assume rw */
|
||||||
|
|
||||||
|
@ -1645,7 +1642,7 @@ if ((tq_cflgs & CF_THS) == 0) /* logging? */
|
||||||
return OK;
|
return OK;
|
||||||
if (!tq_deqf (&pkt)) /* get log pkt */
|
if (!tq_deqf (&pkt)) /* get log pkt */
|
||||||
return ERR;
|
return ERR;
|
||||||
tpkt = (uint16)uptr->cpkt; /* rw pkt */
|
tpkt = uptr->cpkt; /* rw pkt */
|
||||||
lu = tq_pkt[tpkt].d[CMD_UN]; /* unit # */
|
lu = tq_pkt[tpkt].d[CMD_UN]; /* unit # */
|
||||||
|
|
||||||
tq_pkt[pkt].d[ELP_REFL] = tq_pkt[tpkt].d[CMD_REFL]; /* copy cmd ref */
|
tq_pkt[pkt].d[ELP_REFL] = tq_pkt[tpkt].d[CMD_REFL]; /* copy cmd ref */
|
||||||
|
@ -1681,7 +1678,7 @@ if ((tq_cflgs & CF_THS) == 0) /* logging? */
|
||||||
return OK;
|
return OK;
|
||||||
if (!tq_deqf (&pkt)) /* get log pkt */
|
if (!tq_deqf (&pkt)) /* get log pkt */
|
||||||
return ERR;
|
return ERR;
|
||||||
tpkt = (uint16)uptr->cpkt; /* rw pkt */
|
tpkt = uptr->cpkt; /* rw pkt */
|
||||||
tq_pkt[pkt].d[ELP_REFL] = tq_pkt[tpkt].d[CMD_REFL]; /* copy cmd ref */
|
tq_pkt[pkt].d[ELP_REFL] = tq_pkt[tpkt].d[CMD_REFL]; /* copy cmd ref */
|
||||||
tq_pkt[pkt].d[ELP_REFH] = tq_pkt[tpkt].d[CMD_REFH]; /* copy cmd ref */
|
tq_pkt[pkt].d[ELP_REFH] = tq_pkt[tpkt].d[CMD_REFH]; /* copy cmd ref */
|
||||||
tq_pkt[pkt].d[ELP_UN] = tq_pkt[tpkt].d[CMD_UN]; /* copy unit */
|
tq_pkt[pkt].d[ELP_UN] = tq_pkt[tpkt].d[CMD_UN]; /* copy unit */
|
||||||
|
|
|
@ -552,6 +552,8 @@ struct UNIT {
|
||||||
int32 u6; /* device specific */
|
int32 u6; /* device specific */
|
||||||
void *up7; /* device specific */
|
void *up7; /* device specific */
|
||||||
void *up8; /* device specific */
|
void *up8; /* device specific */
|
||||||
|
uint16 us9; /* device specific */
|
||||||
|
uint16 us10; /* device specific */
|
||||||
void *tmxr; /* TMXR linkage */
|
void *tmxr; /* TMXR linkage */
|
||||||
t_bool (*cancel)(UNIT *);
|
t_bool (*cancel)(UNIT *);
|
||||||
double usecs_remaining; /* time balance for long delays */
|
double usecs_remaining; /* time balance for long delays */
|
||||||
|
|
Loading…
Add table
Reference in a new issue