Annotation of ntddk/src/scsi/qic117/snsnt.c, revision 1.1.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:     snsnt.c
                      9: 
                     10: Abstract:
                     11: 
                     12: 
                     13: Revision History:
                     14: 
                     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: STATUS
                     36: Q117iSenseSpeed(
                     37:     IN PTAPE_EXTENSION TapeExtension
                     38:     )
                     39: 
                     40: /*++
                     41: 
                     42: Routine Description:
                     43: 
                     44:     Sense the transfer rate of the FDC.
                     45: 
                     46: Arguments:
                     47: 
                     48:     TapeExtension -
                     49: 
                     50: Return Value:
                     51: 
                     52: 
                     53: 
                     54: --*/
                     55: 
                     56: {
                     57:     UCHAR  fdcType;                         // flag to indicate an 82077 FDC
                     58:     struct DriveConfiguration driveConfig;
                     59:     STATUS retval;                           // return value
                     60:     SHORT statLength;
                     61: #if DBG
                     62: 
                     63:     UBYTE rate;
                     64: 
                     65: #endif
                     66: 
                     67:     Q117iResetFDC(TapeExtension);
                     68:     if ((retval = Q117iDGetFDC(TapeExtension, &fdcType)) != NoErr) {
                     69: 
                     70:         return(retval);
                     71: 
                     72:     }
                     73: 
                     74:     if ((retval = Q117iReport(
                     75:                     TapeExtension,
                     76:                     Report_Confg,
                     77:                     (USHORT *)&driveConfig,
                     78:                     READ_BYTE,
                     79:                     NULL)) != NoErr) {
                     80: 
                     81:         return(retval);
                     82: 
                     83:     }
                     84: 
                     85:     if (TapeExtension->DriveParms.DriveType == QIC40_DRIVE) {
                     86: 
                     87:         TapeExtension->XferRate.XferRate = (UBYTE) FAST;
                     88:         TapeExtension->XferRate.MaxRate  = (UBYTE) FAST;
                     89:         TapeExtension->XferRate.TapeSlow = (UBYTE) TAPE_250Kbps;
                     90:         TapeExtension->XferRate.TapeFast = (UBYTE) TAPE_500Kbps;
                     91:         TapeExtension->XferRate.FDC_Slow  = (UBYTE) FDC_250Kbps;
                     92:         TapeExtension->XferRate.FDC_Fast  = (UBYTE) FDC_500Kbps;
                     93:         TapeExtension->XferRate.SRT_Slow  = (UBYTE) SRT_250Kbps;
                     94:         TapeExtension->XferRate.SRT_Fast  = (UBYTE) SRT_500Kbps;
                     95: 
                     96:     } else {
                     97: 
                     98:         TapeExtension->XferRate.XferRate = (UBYTE) SLOW;
                     99:         TapeExtension->XferRate.MaxRate  = (UBYTE) SLOW;
                    100:         TapeExtension->XferRate.TapeSlow = (UBYTE) TAPE_500Kbps;
                    101:         TapeExtension->XferRate.TapeFast = (UBYTE) TAPE_1Mbps;
                    102:         TapeExtension->XferRate.FDC_Slow  = (UBYTE) FDC_500Kbps;
                    103:         TapeExtension->XferRate.FDC_Fast  = (UBYTE) FDC_1Mbps;
                    104:         TapeExtension->XferRate.SRT_Slow  = (UBYTE) SRT_500Kbps;
                    105:         TapeExtension->XferRate.SRT_Fast  = (UBYTE) SRT_1Mbps;
                    106: 
                    107:     }
                    108: 
                    109:     switch (TapeExtension->DriveParms.Flavor) {
                    110: 
                    111:     case CMS:
                    112:     case IOMEGA:
                    113:     case SUMMIT:
                    114:     case WANGTEK:
                    115: 
                    116:         if (TapeExtension->DriveParms.DriveType == QIC80_DRIVE) {
                    117: 
                    118:             if (fdcType == FDC_82077 ||
                    119:                     fdcType == FDC_82077AA ||
                    120:                     fdcType == FDC_82078_44 ||
                    121:                     fdcType == FDC_82078_64 ||
                    122:                     fdcType == FDC_NATIONAL) {
                    123: 
                    124:                 CheckedDump(QIC117INFO,( "Q117i: sns spd megabit fdc\n"));
                    125: 
                    126:                 TapeExtension->XferRate.XferRate = (UBYTE) FAST;
                    127:                 TapeExtension->XferRate.MaxRate  = (UBYTE) FAST;
                    128: 
                    129:             }
                    130: 
                    131:         }
                    132: 
                    133:         break;
                    134: 
                    135:     case ARCHIVE:
                    136: 
                    137:         if (TapeExtension->DriveParms.ArchiveNativeMode) {
                    138: 
                    139:             if (TapeExtension->DriveParms.DriveType == QIC80_DRIVE) {
                    140: 
                    141:                 if ((fdcType == FDC_82077 ||
                    142:                     fdcType == FDC_82077AA ||
                    143:                     fdcType == FDC_82078_44 ||
                    144:                     fdcType == FDC_82078_64 ||
                    145:                     fdcType == FDC_NATIONAL) &&
                    146:                     ((TapeExtension->DriveParms.ArchiveNativeMode &
                    147:                     ARCHIVE_1MB_XFER) != 0)) {
                    148: 
                    149:                         TapeExtension->XferRate.XferRate = (UBYTE) FAST;
                    150:                         TapeExtension->XferRate.MaxRate  = (UBYTE) FAST;
                    151: 
                    152:                 }
                    153: 
                    154:             }
                    155: 
                    156:         } else {
                    157: 
                    158:             switch (driveConfig.XferRate) {
                    159: 
                    160:             case TAPE_1Mbps:
                    161: 
                    162:                 if ((fdcType == FDC_82077 ||
                    163:                     fdcType == FDC_82077AA ||
                    164:                     fdcType == FDC_82078_44 ||
                    165:                     fdcType == FDC_82078_64 ||
                    166:                     fdcType == FDC_NATIONAL) &&
                    167:                     (TapeExtension->DriveParms.DriveType == QIC80_DRIVE)) {
                    168: 
                    169:                     TapeExtension->XferRate.XferRate = (UBYTE) FAST;
                    170:                     TapeExtension->XferRate.MaxRate  = (UBYTE) FAST;
                    171: 
                    172:                 } else {
                    173: 
                    174:                     CheckedDump(QIC117INFO,( "Q117i: Transfer Rate = UNSUPPORTED_RATE\n"));
                    175:                     return(UnspRate);
                    176: 
                    177:                 }
                    178: 
                    179:             case TAPE_500Kbps:
                    180: 
                    181:                 if (TapeExtension->DriveParms.DriveType == QIC40_DRIVE) {
                    182: 
                    183:                     TapeExtension->XferRate.XferRate = (UBYTE) FAST;
                    184:                     TapeExtension->XferRate.MaxRate = (UBYTE) FAST;
                    185: 
                    186:                 } else {
                    187: 
                    188:                     TapeExtension->XferRate.XferRate = (UBYTE) SLOW;
                    189:                     TapeExtension->XferRate.MaxRate = (UBYTE) SLOW;
                    190: 
                    191:                 }
                    192:                 break;
                    193: 
                    194:             case TAPE_250Kbps:
                    195: 
                    196:                 if (TapeExtension->DriveParms.DriveType == QIC40_DRIVE) {
                    197: 
                    198:                     TapeExtension->XferRate.XferRate = (UBYTE) SLOW;
                    199:                     TapeExtension->XferRate.MaxRate = (UBYTE) SLOW;
                    200: 
                    201:                 } else {
                    202: 
                    203:                     return(UnspRate);
                    204: 
                    205:                 }
                    206:                 break;
                    207: 
                    208:             default:
                    209: 
                    210:                 CheckedDump(QIC117INFO,( "Q117i: Transfer Rate = UNSUPPORTED_RATE\n"));
                    211:                 return(UnspRate);
                    212: 
                    213:             }
                    214: 
                    215:         }
                    216: 
                    217:         break;
                    218: 
                    219:     default:
                    220: 
                    221:         switch (driveConfig.XferRate) {
                    222: 
                    223:         case TAPE_1Mbps:
                    224: 
                    225:             if ((fdcType == FDC_82077 ||
                    226:                 fdcType == FDC_82077AA ||
                    227:                 fdcType == FDC_82078_44 ||
                    228:                 fdcType == FDC_82078_64 ||
                    229:                 fdcType == FDC_NATIONAL) &&
                    230:                 (TapeExtension->DriveParms.DriveType == QIC80_DRIVE)) {
                    231: 
                    232:                 TapeExtension->XferRate.XferRate = (UBYTE) FAST;
                    233:                 TapeExtension->XferRate.MaxRate  = (UBYTE) FAST;
                    234: 
                    235:             } else {
                    236: 
                    237:                 CheckedDump(QIC117INFO,( "Q117i: Transfer Rate = UNSUPPORTED_RATE\n"));
                    238:                 return(UnspRate);
                    239: 
                    240:             }
                    241: 
                    242:         case TAPE_500Kbps:
                    243: 
                    244:             if (TapeExtension->DriveParms.DriveType == QIC40_DRIVE) {
                    245: 
                    246:                 TapeExtension->XferRate.XferRate = (UBYTE) FAST;
                    247:                 TapeExtension->XferRate.MaxRate = (UBYTE) FAST;
                    248: 
                    249:             } else {
                    250: 
                    251:                 TapeExtension->XferRate.XferRate = (UBYTE) SLOW;
                    252:                 TapeExtension->XferRate.MaxRate = (UBYTE) SLOW;
                    253: 
                    254:             }
                    255:             break;
                    256: 
                    257:         case TAPE_250Kbps:
                    258: 
                    259:             if (TapeExtension->DriveParms.DriveType == QIC40_DRIVE) {
                    260: 
                    261:                 TapeExtension->XferRate.XferRate = (UBYTE) SLOW;
                    262:                 TapeExtension->XferRate.MaxRate = (UBYTE) SLOW;
                    263: 
                    264:             } else {
                    265: 
                    266:                 return(UnspRate);
                    267: 
                    268:             }
                    269:             break;
                    270: 
                    271:         default:
                    272: 
                    273:             CheckedDump(QIC117INFO,( "Q117i: Transfer Rate = UNSUPPORTED_RATE\n"));
                    274:             return(UnspRate);
                    275: 
                    276:         }
                    277: 
                    278:     }
                    279: 
                    280: 
                    281: #if DBG
                    282: 
                    283:     if (TapeExtension->XferRate.MaxRate == FAST) {
                    284:         rate = TapeExtension->XferRate.TapeFast;
                    285:     } else {
                    286:         rate = TapeExtension->XferRate.TapeSlow;
                    287:     }
                    288: 
                    289:     switch (rate) {
                    290:     case TAPE_250Kbps:
                    291:         CheckedDump(QIC117INFO,( "Q117i: Transfer Rate = 250Kbps\n"));
                    292:         break;
                    293:     case TAPE_500Kbps:
                    294:         CheckedDump(QIC117INFO,( "Q117i: Transfer Rate = 500Kbps\n"));
                    295:         break;
                    296:     case TAPE_1Mbps:
                    297:         CheckedDump(QIC117INFO,( "Q117i: Transfer Rate = 1Mbps\n"));
                    298:         break;
                    299:     case TAPE_2Mbps:
                    300:         CheckedDump(QIC117INFO,( "Q117i: Transfer Rate = 2Mbps\n"));
                    301:         break;
                    302:     default:
                    303:         CheckedDump(QIC117INFO,( "Q117i: Transfer Rate = UNSUPPORTED_RATE\n"));
                    304:     }
                    305: 
                    306: #endif
                    307: 
                    308:     return(Q117iConfigureFDC(TapeExtension));
                    309: }
                    310: 
                    311: 
                    312: 
                    313: VOID
                    314: Q117iDCR_Out(
                    315:     IN PTAPE_EXTENSION TapeExtension,
                    316:     IN SHORT speed
                    317:     )
                    318: 
                    319: /*++
                    320: 
                    321: Routine Description:
                    322: 
                    323:     Output control data to the FDC digital control register.
                    324: 
                    325: Arguments:
                    326: 
                    327:     TapeExtension -
                    328: 
                    329:     Speed -
                    330: 
                    331: Return Value:
                    332: 
                    333:     None
                    334: 
                    335: --*/
                    336: 
                    337: {
                    338:     speed = (SHORT)((UCHAR)speed & 0x03);
                    339:     WRITE_CONTROLLER(&TapeExtension->QControllerData->FDC_Addr->dcr,speed);
                    340: }

unix.superglobalmegacorp.com

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