|
|
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.