|
|
1.1 ! root 1: /*++ ! 2: ! 3: Copyright (c) 1993 - Colorado Memory Systems, Inc. ! 4: All Rights Reserved ! 5: ! 6: Module Name: ! 7: ! 8: readfdc.c ! 9: ! 10: Abstract: ! 11: ! 12: Read FDC result bytes. ! 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: STATUS ! 36: Q117iReadFDC( ! 37: IN PTAPE_EXTENSION TapeExtension, ! 38: OUT UCHAR *Status, ! 39: OUT SHORT *Length ! 40: ) ! 41: ! 42: /*++ ! 43: ! 44: Routine Description: ! 45: ! 46: Read result data from the Floppy Disk Controller. The result data ! 47: is read during the result phase of the FDC command sequence. ! 48: n ! 49: For each byte of response data, wait up to 3 msecs for the FDC to ! 50: become ready. ! 51: ! 52: Read result data until the FDC is no longer sending data or until ! 53: more than 7 result bytes have been read. Seven is the maximum ! 54: legal number of result bytes that the FDC is specified to send. ! 55: ! 56: Arguments: ! 57: ! 58: TapeExtension - ! 59: ! 60: Status - ! 61: ! 62: Length - ! 63: ! 64: Return Value: ! 65: ! 66: ! 67: ! 68: --*/ ! 69: ! 70: { ! 71: ! 72: SHORT mainStatusRegister; ! 73: SHORT waitCount; ! 74: ! 75: *Length = 0; ! 76: ! 77: DbgAddEntry(0x12345679); ! 78: ! 79: if (TapeExtension->QControllerData->CommandHasResultPhase) { ! 80: ! 81: *Status++ = TapeExtension->QControllerData->FifoByte; ! 82: DbgAddEntry(TapeExtension->QControllerData->FifoByte); ! 83: ++*Length; ! 84: ! 85: } ! 86: ! 87: ! 88: do { ! 89: ! 90: waitCount = FDC_MSR_RETRIES; ! 91: ! 92: do { ! 93: ! 94: if ((mainStatusRegister = ! 95: READ_CONTROLLER( ! 96: &TapeExtension->QControllerData->FDC_Addr->MSDSR.msr )) & ! 97: MSR_RQM) { ! 98: ! 99: break; ! 100: ! 101: } ! 102: ! 103: Q117iShortTimer(t0012us); ! 104: ! 105: } while (--waitCount > 0); ! 106: ! 107: if (waitCount == 0) { ! 108: ! 109: return(NECFlt); ! 110: ! 111: } ! 112: ! 113: if (!(mainStatusRegister & MSR_DIO)) { ! 114: ! 115: break; ! 116: ! 117: } ! 118: ! 119: *Status = (CHAR)READ_CONTROLLER( ! 120: &TapeExtension->QControllerData->FDC_Addr->dr); ! 121: ! 122: ! 123: DbgAddEntry(*Status); ! 124: ! 125: ++Status; ! 126: ! 127: if (++*Length > 7) { ! 128: *Length = -1; ! 129: break; ! 130: ! 131: } ! 132: ! 133: Q117iShortTimer(t0012us); ! 134: ! 135: } while (TRUE); ! 136: ! 137: return(NoErr); ! 138: } ! 139:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.