|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.