Annotation of ntddk/src/scsi/qic117/process.c, revision 1.1

1.1     ! root        1: /*++
        !             2: 
        !             3: Copyright (c) 1993 - Colorado Memory Systems, Inc.
        !             4: All Rights Reserved
        !             5: 
        !             6: Module Name:
        !             7: 
        !             8:     process.c
        !             9: 
        !            10: Abstract:
        !            11: 
        !            12:     Processes one low-level request.
        !            13: 
        !            14: Revision History:
        !            15: 
        !            16: 
        !            17: 
        !            18: 
        !            19: --*/
        !            20: 
        !            21: //
        !            22: // include files
        !            23: //
        !            24: 
        !            25: #include <ntddk.h>                        // various NT definitions
        !            26: #include <ntdddisk.h>                    // disk device driver I/O control codes
        !            27: #include <ntiologc.h>
        !            28: #include "common.h"
        !            29: #include "drvtask.h"                     // this driver's data declarations
        !            30: #include "mt1defs.h"                     // this driver's data declarations
        !            31: #include "mt1strc.h"                     // this driver's data declarations
        !            32: #include "q117data.h"                    // this driver's data declarations
        !            33: 
        !            34: 
        !            35: 
        !            36: NTSTATUS
        !            37: Q117iProcessItem(
        !            38:    IN OUT PIRP Irp
        !            39:    )
        !            40: 
        !            41: /*++
        !            42: 
        !            43: Routine Description:
        !            44: 
        !            45:    Determine type of I/O operation being requested, Call appropriate
        !            46:    subroutines.
        !            47: 
        !            48:    In block mode operation this routine returns when done processing
        !            49:    the queue.  However, in concurrent operation (task switching or
        !            50:    non-block mode) the routine NEVER returns.  Therefore, it is up
        !            51:    to ClearIO to stop the task.
        !            52: 
        !            53: Arguments:
        !            54: 
        !            55:    Irp -
        !            56: 
        !            57: Return Value:
        !            58: 
        !            59: 
        !            60: 
        !            61: --*/
        !            62: 
        !            63: {
        !            64:    PTAPE_EXTENSION tapeExtension;
        !            65:    STATUS retval = NoErr;
        !            66:    PIO_REQUEST Item;
        !            67:    PIO_STACK_LOCATION  irpStack = IoGetCurrentIrpStackLocation(Irp);
        !            68: 
        !            69: 
        !            70:    tapeExtension = irpStack->DeviceObject->DeviceExtension;
        !            71:    tapeExtension->QDeviceObject = irpStack->DeviceObject;
        !            72:    tapeExtension->NoPause = FALSE;
        !            73:    Item = irpStack->Parameters.DeviceIoControl.Type3InputBuffer;
        !            74: 
        !            75:    if ((tapeExtension->QControllerData->DriveSelect.Selected == FALSE) &&
        !            76:       tapeExtension->QControllerData->CurrentInterrupt &&
        !            77:       tapeExtension->Found) {
        !            78: 
        !            79:       retval = Q117iSelectDrive(tapeExtension);
        !            80: 
        !            81:    }
        !            82: 
        !            83:    if (retval == NoErr) {
        !            84: 
        !            85:       switch (Item->Command) {
        !            86: 
        !            87:       case DFmt:
        !            88:             retval = Q117iSetDriveMode(tapeExtension, FORMAT_MODE);
        !            89:             break;
        !            90: 
        !            91:       case DVerify:
        !            92:             retval = Q117iSetDriveMode(tapeExtension, VERIFY_MODE);
        !            93:             break;
        !            94: 
        !            95:       default:
        !            96:             retval = Q117iSetDriveMode(tapeExtension, PRIMARY_MODE);
        !            97: 
        !            98:       }
        !            99: 
        !           100:       if (retval == NoErr) {
        !           101: 
        !           102:             retval = Q117iTapeCommands(tapeExtension, Item, Irp);
        !           103: 
        !           104:       }
        !           105: 
        !           106:       Item->FirmwareError = tapeExtension->FirmwareError;
        !           107: 
        !           108:       if (tapeExtension->QControllerData->QueueEmpty) {
        !           109: 
        !           110:             if (tapeExtension->NoPause == FALSE) {
        !           111: 
        !           112:                if (Q117iGetDriveError(tapeExtension) == NotRdy) {
        !           113: 
        !           114:                   Q117iPauseTape(tapeExtension);
        !           115: 
        !           116:                }
        !           117:             }
        !           118: 
        !           119:             if (tapeExtension->NewCart) {
        !           120: 
        !           121:                Q117iNewTape(tapeExtension);
        !           122: 
        !           123:             }
        !           124:       }
        !           125:    }
        !           126: 
        !           127:    Item->Status = retval;
        !           128: 
        !           129: #if DBG
        !           130: #define TapeExtension tapeExtension
        !           131:    DbgAddEntry(0x1234567d);
        !           132:    DbgAddEntry(Item->Command);
        !           133:    DbgAddEntry(Item->Status);
        !           134:    TapeExtension->DbgLockout = FALSE;
        !           135: #endif
        !           136: 
        !           137:    return Q117iTranslateError(tapeExtension->QDeviceObject, retval);
        !           138: }
        !           139: 
        !           140: STATUS
        !           141: Q117iSetDriveMode(
        !           142:    IN PTAPE_EXTENSION TapeExtension,
        !           143:    CHAR Mode
        !           144:    )
        !           145: 
        !           146: /*++
        !           147: 
        !           148: Routine Description:
        !           149: 
        !           150: Set the mode of the tape drive according to the command to the
        !           151: driver.
        !           152: 
        !           153: Arguments:
        !           154: 
        !           155: TapeExtension -
        !           156: 
        !           157: Mode -
        !           158: 
        !           159: Return Value:
        !           160: 
        !           161: 
        !           162: 
        !           163: --*/
        !           164: 
        !           165: {
        !           166:    STATUS retval = 0;
        !           167:    UCHAR modeCmd;
        !           168: 
        !           169:    if (Mode == TapeExtension->DriveParms.Mode) {
        !           170: 
        !           171:       return(NoErr);
        !           172: 
        !           173:    }
        !           174: 
        !           175:    if (TapeExtension->DriveParms.Mode == PRIMARY_MODE ||
        !           176:       TapeExtension->DriveParms.Mode == VERIFY_MODE ||
        !           177:       TapeExtension->DriveParms.Mode == FORMAT_MODE) {
        !           178: 
        !           179:       retval = Q117iStopTape(TapeExtension);
        !           180: 
        !           181:       if (retval != NoErr && retval != NoTape) {
        !           182: 
        !           183:             return(retval);
        !           184: 
        !           185:       }
        !           186:    }
        !           187: 
        !           188:    switch (Mode) {
        !           189: 
        !           190:    case PRIMARY_MODE:
        !           191:       modeCmd = Primary_Mode;
        !           192:       break;
        !           193: 
        !           194:    case VERIFY_MODE:
        !           195:       modeCmd = Verify_Mode;
        !           196:       break;
        !           197: 
        !           198:    case FORMAT_MODE:
        !           199:       modeCmd = Format_Mode;
        !           200:       break;
        !           201: 
        !           202:    case DIAGNOSTIC_1_MODE:
        !           203:       modeCmd = Diag_1_Mode;
        !           204:       break;
        !           205: 
        !           206:    case DIAGNOSTIC_2_MODE:
        !           207:       modeCmd = Diag_2_Mode;
        !           208:       break;
        !           209: 
        !           210:    default:
        !           211:       return(InvalCmd);
        !           212: 
        !           213:    }
        !           214: 
        !           215:    if ((retval = Q117iSendByte(TapeExtension, modeCmd)) != NoErr) {
        !           216: 
        !           217:       return(retval);
        !           218: 
        !           219:    }
        !           220: 
        !           221:    Q117iSleep(TapeExtension, mt_wt2ticks, FALSE);
        !           222: 
        !           223:    if (Mode == DIAGNOSTIC_1_MODE || Mode == DIAGNOSTIC_2_MODE) {
        !           224: 
        !           225:       if ((retval = Q117iSendByte(TapeExtension, modeCmd)) != NoErr) {
        !           226: 
        !           227:             return(retval);
        !           228: 
        !           229:       }
        !           230: 
        !           231:       Q117iSleep(TapeExtension, mt_wt2ticks, FALSE);
        !           232: 
        !           233:    } else {
        !           234: 
        !           235:       if ((retval = Q117iGetDriveError(TapeExtension)) == NotRdy) {
        !           236: 
        !           237:             retval = DriveFlt;
        !           238: 
        !           239:       }
        !           240:    }
        !           241: 
        !           242:    TapeExtension->DriveParms.Mode = Mode;
        !           243:    return(retval);
        !           244: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.