Esempio n. 1
0
static void wd33c93Disconnect(WD33C93* wd33c93)
{
    if (wd33c93->phase != BusFree) {
        if ((wd33c93->targetId >= 0) && (wd33c93->targetId < wd33c93->maxDev)) {
            scsiDeviceDisconnect(TARGET);
        }
        if (wd33c93->regs[REG_SCSI_STATUS] != SS_XFER_END) {
            wd33c93->regs[REG_SCSI_STATUS] = SS_DISCONNECT;
        }
        wd33c93->regs[REG_AUX_STATUS]  = AS_INT;
        wd33c93->phase          = BusFree;
        //wd33c93->nextPhase    = -1;
    }

    //wd33c93->mci          = -1;
    wd33c93->tc             = 0;
    //wd33c93->atn          = 0;

    SCSILOG("busfree()\n\n");
    scsiDeviceLogFlush();
}
Esempio n. 2
0
static void mb89352Disconnect(MB89352* spc)
{
    if (spc->phase != BusFree) {
        if ((spc->targetId >= 0) && (spc->targetId < 8)) {
            scsiDeviceDisconnect(TARGET);
        }
        spc->regs[REG_INTS] |= INTS_Disconnected;
        spc->phase      = BusFree;
        spc->nextPhase  = -1;
    }

    spc->regs[REG_PSNS] = 0;
    spc->isBusy         = 0;
    spc->isTransfer     = 0;
    spc->counter        = 0;
    spc->tc             = 0;
    spc->atn            = 0;

    SCSILOG("busfree()\n\n");
    scsiDeviceLogFlush();
}
Esempio n. 3
0
void wd33c93Reset(WD33C93* wd33c93, int scsireset)
{
    int i;

    SCSILOG("wd33c93 reset\n");
    scsiDeviceLogFlush();

    // initialized register
    memset(wd33c93->regs, 0, 0x1b);
    memset(wd33c93->regs + 0x1b, 0xff, 4);
    wd33c93->regs[REG_AUX_STATUS] = AS_INT;
    wd33c93->myId   = 0;
    wd33c93->latch  = 0;
    wd33c93->tc     = 0;
    wd33c93->phase  = BusFree;
    wd33c93->pBuf   = wd33c93->buffer;
    if (scsireset) {
        for (i = 0; i < wd33c93->maxDev; ++i) {
            scsiDeviceReset(wd33c93->dev[i]);
        }
    }
}