|
|
1.1 root 1: /*++
2:
3: Copyright (c) 1993 - Colorado Memory Systems, Inc.
4: All Rights Reserved
5:
6: Module Name:
7:
8: resetfdc.c
9:
10: Abstract:
11:
12: Resets the FDC and cleans up the sense status.
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: VOID
36: Q117iResetFDC(
37: IN PTAPE_EXTENSION TapeExtension
38: )
39:
40: /*++
41:
42: Routine Description:
43:
44: To reset the floppy controller chip.
45:
46: Arguments:
47:
48: TapeExtension -
49:
50: Return Value -
51:
52: None.
53:
54: --*/
55:
56: {
57: UCHAR resetByte;
58: SHORT statLength;
59: struct sns_int_cmd senseInt;
60: FDC_STATUS rStat;
61: SHORT resetRetry = 5;
62:
63: senseInt.command = FDC_SNS_INT;
64:
65: TapeExtension->QControllerData->CommandHasResultPhase = FALSE;
66: (VOID) Q117iResetInterruptEvent(TapeExtension);
67:
68: if (!TapeExtension->Found) {
69:
70: TapeExtension->QControllerData->DriveSelect.Selected = FALSE;
71:
72: WRITE_CONTROLLER(
73: &TapeExtension->QControllerData->FDC_Addr->dor, alloff);
74: Q117iShortTimer(t0010us);
75: WRITE_CONTROLLER(
76: &TapeExtension->QControllerData->FDC_Addr->dor,dselb);
77:
78: } else {
79:
80: if (TapeExtension->QControllerData->DriveSelect.Selected == TRUE) {
81:
82: resetByte =
83: TapeExtension->QControllerData->DriveSelect.SelectByte;
84:
85: } else {
86:
87: resetByte =
88: TapeExtension->QControllerData->DriveSelect.DeselectByte;
89:
90: }
91:
92: resetByte &= 0xfb;
93: WRITE_CONTROLLER(&TapeExtension->QControllerData->FDC_Addr->dor,
94: (SHORT)resetByte);
95: Q117iShortTimer(t0010us);
96: resetByte |= 0x0c;
97: WRITE_CONTROLLER(&TapeExtension->QControllerData->FDC_Addr->dor,
98: (SHORT)resetByte);
99:
100: }
101:
102: if (Q117iSleep(TapeExtension, mt_wt500ms, TRUE) == NoErr) {
103:
104: Q117iReadFDC(TapeExtension, (CHAR *)&rStat, (SHORT *)&statLength);
105: --resetRetry;
106:
107: }
108:
109: do {
110:
111: if (Q117iProgramFDC(TapeExtension,
112: (CHAR *)&senseInt,
113: sizeof(senseInt),
114: FALSE) != NoErr) {
115:
116: TapeExtension->QControllerData->FDC_Pcn = 0;
117: return;
118:
119: }
120:
121: Q117iReadFDC(TapeExtension, (CHAR *)&rStat, (SHORT *)&statLength);
122: --resetRetry;
123: Q117iSleep(TapeExtension, mt_wt2ticks, FALSE);
124:
125: } while (((rStat.ST0 & ST0_US) < 3) && resetRetry);
126:
127: Q117iConfigureFDC(TapeExtension);
128: TapeExtension->QControllerData->FDC_Pcn = 0;
129: TapeExtension->QControllerData->PerpendicularMode = FALSE;
130: }
131:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.