|
|
1.1 root 1: /*++
2:
3: Copyright (c) 1993 - Colorado Memory Systems, Inc.
4: All Rights Reserved
5:
6: Module Name:
7:
8: q117data.h
9:
10: Abstract:
11:
12:
13: Revision History:
14:
15:
16:
17:
18: --*/
19:
20:
21:
22: //
23: // Define the maximum number of controllers and floppies per controller
24: // that this driver will support.
25: //
26: // The number of floppies per controller is fixed at 4, since the
27: // controllers don't have enough bits to select more than that (and
28: // actually, many controllers will only support 2). The number of
29: // controllers per machine is arbitrary; 3 should be more than enough.
30: //
31:
32: #define MAXIMUM_CONTROLLERS_PER_MACHINE 3
33:
34: //
35: // Macros to access the controller. Note that the *_PORT_UCHAR macros
36: // work on all machines, whether the I/O ports are separate or in
37: // memory space.
38: //
39:
40: #define READ_CONTROLLER( Address ) \
41: READ_PORT_UCHAR( ( PUCHAR )Address )
42:
43: #define WRITE_CONTROLLER( Address, Value ) \
44: WRITE_PORT_UCHAR( ( PUCHAR )Address, ( UCHAR )Value )
45:
46:
47: //
48: // Floppy register structure. The base address of the controller is
49: // passed in by configuration management. Note that this is the 82077
50: // structure, which is a superset of the PD765 structure. Not all of
51: // the registers are used.
52: //
53:
54: typedef struct _TAPE_ADDRESS {
55: UCHAR StatusA;
56: UCHAR StatusB;
57: UCHAR dor;
58: UCHAR tdr;
59: union {
60: UCHAR msr;
61: UCHAR dsr;
62: } MSDSR;
63: UCHAR dr;
64: UCHAR Reserved2;
65: UCHAR dcr;
66: } TAPE_ADDRESS, *PTAPE_ADDRESS;
67:
68:
69: //
70: // Define the maximum number of tape drives per controller
71: // that this driver will support.
72: //
73: // The number of tape drives per controller is fixed at 1, since the
74: // software select schemes generally work for one drive only.
75: //
76:
77: #define MAXIMUM_TAPE_DRIVES_PER_CONTROLLER 1
78:
79:
80: //
81: // This structure holds all of the configuration data. It is filled in
82: // by FlGetConfigurationInformation(), which gets the information from
83: // the configuration manager or the hardware architecture layer (HAL).
84: //
85:
86: typedef struct _CONFIG_CONTROLLER_DATA {
87: PHYSICAL_ADDRESS OriginalBaseAddress;
88: PTAPE_ADDRESS ControllerBaseAddress;
89: PADAPTER_OBJECT AdapterObject;
90: ULONG SpanOfControllerAddress;
91: ULONG NumberOfMapRegisters;
92: ULONG BusNumber;
93: ULONG OriginalIrql;
94: ULONG OriginalVector;
95: ULONG OriginalDmaChannel;
96: PKEVENT ControllerEvent;
97: LONG ActualControllerNumber;
98: INTERFACE_TYPE InterfaceType;
99: KINTERRUPT_MODE InterruptMode;
100: KAFFINITY ProcessorMask;
101: KIRQL ControllerIrql;
102: BOOLEAN SaveFloatState;
103: BOOLEAN SharableVector;
104: BOOLEAN MappedAddress;
105: BOOLEAN OkToUseThisController;
106: ULONG ControllerVector;
107: UCHAR NumberOfTapeDrives;
108: UCHAR DriveType[MAXIMUM_TAPE_DRIVES_PER_CONTROLLER];
109: } CONFIG_CONTROLLER_DATA,*PCONFIG_CONTROLLER_DATA;
110:
111: typedef struct _CONFIG_DATA {
112: ULONG FloppyTapeCount;
113: UCHAR NumberOfControllers;
114: CONFIG_CONTROLLER_DATA Controller[MAXIMUM_CONTROLLERS_PER_MACHINE];
115: } CONFIG_DATA;
116:
117: typedef CONFIG_DATA *PCONFIG_DATA;
118:
119:
120:
121:
122: typedef struct _TAPE_CONTROLLER_DATA {
123: LIST_ENTRY ListEntry;
124: KEVENT ClearQueueEvent;
125: KEVENT InterruptEvent;
126: KEVENT AllocateAdapterChannelEvent;
127: HANDLE ControllerEventHandle;
128: PKEVENT ControllerEvent;
129: KSEMAPHORE RequestSemaphore;
130: KSPIN_LOCK ListSpinLock;
131: PKINTERRUPT InterruptObject;
132: PVOID MapRegisterBase;
133: LONG ActualControllerNumber;
134: PADAPTER_OBJECT AdapterObject;
135: ULONG NumberOfMapRegisters;
136: PDEVICE_OBJECT CurrentDeviceObject;
137: PTAPE_ADDRESS FDC_Addr;
138: LONG FloppyControllerEventTimer;
139: PVOID TapeExtension;
140: INTERFACE_TYPE InterfaceType;
141: DRIVE_SELECT DriveSelect;
142: FORMAT_CMD FmtCmd;
143: FDC_STATUS FdcStat;
144: BOOLEAN CommandHasResultPhase;
145: BOOLEAN UnloadingDriver;
146: UCHAR NumberOfTapeDrives;
147: UCHAR FDC_Pcn;
148: UCHAR FifoByte;
149: BOOLEAN QueueEmpty;
150: BOOLEAN ClearQueue;
151: BOOLEAN AbortRequested;
152: BOOLEAN CurrentInterrupt;
153: BOOLEAN PerpendicularMode;
154: BOOLEAN StartFormatMode;
155: BOOLEAN EndFormatMode;
156: BOOLEAN AdapterLocked;
157: UCHAR PerpModeSelect;
158: } TAPE_CONTROLLER_DATA;
159:
160: typedef TAPE_CONTROLLER_DATA *PTAPE_CONTROLLER_DATA;
161:
162: typedef struct _TAPE_OPERATION_STATUS {
163: ULONG BytesTransferredSoFar;
164: ULONG TotalBytesOfTransfer;
165: ULONG CurLst;
166: SHORT DataAmount;
167: SHORT Scount;
168: SHORT NoDat;
169: SHORT D_Amt;
170: SHORT RetryCount;
171: SHORT RetryTimes;
172: UCHAR D_FTK;
173: UCHAR D_Sect;
174: CHAR D_Head;
175: UCHAR RetrySectorId;
176: CHAR SeekFlag;
177: UCHAR S_Sect;
178: } TAPE_OPERATION_STATUS,*PTAPE_OPERATION_STATUS;
179:
180:
181: typedef struct _TAPE_EXTENSION {
182: PDEVICE_OBJECT QDeviceObject;
183: PTAPE_CONTROLLER_DATA QControllerData;
184: ULONG BytesPerSector;
185: ULONG ByteCapacity;
186: ULONG ErrorSequence;
187: ULONG TapeNumber;
188: MEDIA_TYPE MediaType;
189: DRIVE_PARAMETERS DriveParms;
190: TRANSFER_RATE XferRate;
191: TAPE_PARAMETERS TapeParms;
192: TAPE_POSITION TapePosition;
193: MISC_DRIVE_INFO MiscDriveInfo;
194: TAPE_OPERATION_STATUS RdWrOp;
195: FMT_PARAMETERS FmtOp;
196: SHORT RetrySeqNum;
197: USHORT NumTracks;
198: FIRMWARE_ERROR FirmwareError;
199: UCHAR DriveType;
200: UCHAR DeviceUnit;
201: UCHAR DriveOnValue;
202: BOOLEAN NoPause;
203: BOOLEAN PersistentNewCart;
204: BOOLEAN NewCart;
205: BOOLEAN NoCart;
206: BOOLEAN SpeedChangeOK;
207: BOOLEAN Found;
208: BOOLEAN PegasusSupported;
209: #if DBG
210: #define DBG_SIZE 4096
211: ULONG DbgCommand[DBG_SIZE];
212: int DbgHead;
213: int DbgTail;
214: BOOLEAN DbgLockout;
215: #define DbgAddEntry(data) \
216: TapeExtension->DbgCommand[TapeExtension->DbgTail] = (data); \
217: \
218: if (!TapeExtension->DbgLockout) \
219: ++TapeExtension->DbgTail; \
220: \
221: if (TapeExtension->DbgTail >= DBG_SIZE) { \
222: TapeExtension->DbgTail = 0; \
223: }
224:
225: #else
226: #define DbgAddEntry(data)
227: #endif
228:
229: } TAPE_EXTENSION;
230:
231: typedef TAPE_EXTENSION *PTAPE_EXTENSION;
232:
233: //
234: // Prototypes of driver routines.
235: //
236:
237: NTSTATUS
238: DriverEntry(
239: IN OUT PDRIVER_OBJECT DriverObject,
240: IN PUNICODE_STRING RegistryPath
241: );
242:
243: NTSTATUS
244: Q117iConfigCallBack(
245: IN PVOID Context,
246: IN PUNICODE_STRING PathName,
247: IN INTERFACE_TYPE BusType,
248: IN ULONG BusNumber,
249: IN PKEY_VALUE_FULL_INFORMATION *BusInformation,
250: IN CONFIGURATION_TYPE ControllerType,
251: IN ULONG ControllerNumber,
252: IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
253: IN CONFIGURATION_TYPE PeripheralType,
254: IN ULONG PeripheralNumber,
255: IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation
256: );
257:
258: NTSTATUS
259: Q117iGetConfigurationInformation(
260: OUT PCONFIG_DATA *ConfigData
261: );
262:
263: NTSTATUS
264: Q117iInitializeController(
265: IN PCONFIG_DATA ConfigData,
266: IN UCHAR ControllerNumber,
267: IN PDRIVER_OBJECT DriverObject,
268: IN PUNICODE_STRING RegistryPath
269: );
270:
271: BOOLEAN
272: Q117iReportResources(
273: IN PDRIVER_OBJECT DriverObject,
274: IN PCONFIG_DATA ConfigData,
275: IN UCHAR ControllerNumber
276: );
277:
278: NTSTATUS
279: Q117iInitializeControllerHardware(
280: IN PTAPE_CONTROLLER_DATA ControllerData,
281: IN PDEVICE_OBJECT DeviceObject
282: );
283:
284: NTSTATUS
285: Q117iInitializeDrive(
286: IN PCONFIG_DATA ConfigData,
287: IN PTAPE_CONTROLLER_DATA ControllerData,
288: IN UCHAR ControllerNum,
289: IN PDRIVER_OBJECT DriverObject,
290: IN PUNICODE_STRING RegistryPath
291: );
292:
293: NTSTATUS
294: Q117iTapeDispatchInternalDeviceControl(
295: IN PDEVICE_OBJECT DeviceObject,
296: IN OUT PIRP Irp
297: );
298:
299: NTSTATUS
300: Q117iTapeDispatchReadWrite(
301: IN PDEVICE_OBJECT DeviceObject,
302: IN OUT PIRP Irp
303: );
304:
305: BOOLEAN
306: Q117iTapeInterruptService(
307: IN PKINTERRUPT Interrupt,
308: IN OUT PVOID Context
309: );
310:
311: VOID
312: Q117iTapeDeferredProcedure(
313: IN PKDPC Dpc,
314: IN PVOID DeferredContext,
315: IN PVOID SystemArgument1,
316: IN PVOID SystemArgument2
317: );
318:
319: VOID
320: Q117iTapeUnloadDriver(
321: IN PDRIVER_OBJECT DriverObject
322: );
323:
324: VOID
325: Q117iTapeMotorOffDpc(
326: IN PDEVICE_OBJECT DeviceObject,
327: IN OUT PVOID InterruptTimer
328: );
329:
330: NTSTATUS
331: Q117iRecalibrateDrive(
332: IN PTAPE_EXTENSION TapeExtension
333: );
334:
335: NTSTATUS
336: Q117iDatarateSpecifyConfigure(
337: IN PTAPE_EXTENSION TapeExtension
338: );
339:
340: NTSTATUS
341: Q117iResetController(
342: IN OUT PTAPE_CONTROLLER_DATA ControllerData,
343: IN UCHAR DataRate
344: );
345:
346: NTSTATUS
347: Q117iStartDrive(
348: IN OUT PTAPE_EXTENSION TapeExtension,
349: IN BOOLEAN WriteOperation,
350: IN BOOLEAN SetUpMedia
351: );
352:
353: NTSTATUS
354: Q117iDetermineMediaType(
355: IN OUT PTAPE_EXTENSION TapeExtension
356: );
357:
358: VOID
359: Q117iTapeThread(
360: IN OUT PTAPE_CONTROLLER_DATA ControllerData
361: );
362:
363: IO_ALLOCATION_ACTION
364: Q117iTapeAllocateAdapterChannel(
365: IN PDEVICE_OBJECT DeviceObject,
366: IN PIRP Irp,
367: IN PVOID MapRegisterBase,
368: IN PVOID Context
369: );
370:
371: NTSTATUS
372: Q117iFormat(
373: IN PTAPE_EXTENSION TapeExtension,
374: IN PIRP Irp
375: );
376:
377: NTSTATUS
378: Q117iIssueCommand(
379: IN DRIVER_COMMAND Command,
380: IN OUT PTAPE_EXTENSION TapeExtension
381: );
382:
383: ULONG
384: Q117iGetControllerBase(
385: IN INTERFACE_TYPE BusType,
386: IN ULONG BusNumber,
387: IN PHYSICAL_ADDRESS IoAddress,
388: IN ULONG NumberOfBytes,
389: IN BOOLEAN InIoSpace,
390: OUT PBOOLEAN MappedAddress
391: );
392:
393: NTSTATUS
394: Q117iProcessItem(
395: IN OUT PIRP Irp
396: );
397:
398: NTSTATUS
399: Q117iClearIO(
400: IN OUT PIRP Irp
401: );
402:
403: NTSTATUS
404: Q117iTranslateError(
405: IN PDEVICE_OBJECT DeviceObject,
406: IN STATUS Retval
407: );
408:
409: VOID
410: Q117iResetInterruptEvent(
411: IN PTAPE_EXTENSION TapeExtension
412: );
413:
414: VOID
415: Q117iResetFDC(
416: IN PTAPE_EXTENSION TapeExtension
417: );
418:
419: VOID
420: Q117iDLockUnlockDMA(
421: IN PTAPE_EXTENSION TapeExtension,
422: IN BOOLEAN Lock
423: );
424:
425: VOID
426: hio_ProgramDMA(
427: IN PTAPE_EXTENSION TapeExtension,
428: IN PIRP Irp,
429: IN BOOLEAN WriteOperation
430: );
431:
432: VOID
433: hio_FlushDMA(
434: IN PTAPE_EXTENSION TapeExtension,
435: IN PIRP Irp,
436: IN BOOLEAN WriteOperation
437: );
438:
439: VOID
440: Q117iShortTimer(
441: IN QIC_TIME StallTime
442: );
443:
444: STATUS
445: Q117iSleep(
446: IN PTAPE_EXTENSION TapeExtension,
447: IN QIC_TIME WaitTime,
448: IN BOOLEAN InterruptSleep
449: );
450:
451: STATUS
452: Q117iDLocateDrv(
453: IN PTAPE_EXTENSION TapeExtension
454: );
455:
456: STATUS
457: Q117iDDeselect(
458: IN PTAPE_EXTENSION TapeExtension
459: );
460:
461: STATUS
462: Q117iConvertFirmwareError(
463: IN FIRMWARE_ERROR FirmwareError
464: );
465:
466: STATUS
467: Q117iSetDriveMode(
468: IN PTAPE_EXTENSION TapeExtension,
469: IN CHAR Mode
470: );
471:
472: STATUS
473: Q117iProgramFDC(
474: IN PTAPE_EXTENSION TapeExtension,
475: IN UCHAR *Command,
476: IN SHORT Length,
477: IN BOOLEAN Result
478: );
479:
480: STATUS
481: Q117iConfigureDrive(
482: IN PTAPE_EXTENSION TapeExtension
483: );
484:
485: STATUS
486: Q117iConfigureFDC(
487: IN PTAPE_EXTENSION TapeExtension
488: );
489:
490: STATUS
491: Q117iSelectDrive(
492: IN PTAPE_EXTENSION TapeExtension
493: );
494:
495: STATUS
496: Q117iDeselectDrive(
497: IN PTAPE_EXTENSION TapeExtension
498: );
499:
500: STATUS
501: Q117iDFmt(
502: IN PTAPE_EXTENSION TapeExtension,
503: IN PIRP Irp,
504: IN OUT PIO_REQUEST Ioqucrnt
505: );
506:
507: STATUS
508: Q117iFormatTrack(
509: IN PTAPE_EXTENSION TapeExtension,
510: IN PIRP Irp,
511: IN SHORT Track,
512: IN OUT PIO_REQUEST Ioqucrnt
513: );
514:
515: STATUS
516: Q117iFormatSegment(
517: IN PTAPE_EXTENSION TapeExtension,
518: IN PIRP Irp,
519: IN OUT PIO_REQUEST Ioqucrnt,
520: IN UCHAR Cylinder,
521: IN UCHAR Head,
522: IN UCHAR Sector
523: );
524:
525: STATUS
526: Q117iWriteReferenceBurst(
527: IN PTAPE_EXTENSION TapeExtension
528: );
529:
530: STATUS
531: Q117iReadWrite(
532: IN PTAPE_EXTENSION TapeExtension,
533: IN OUT PIO_REQUEST Ioqucrnt,
534: IN OUT PIRP Irp
535: );
536:
537: STATUS
538: Q117iCalcPosition(
539: IN PTAPE_EXTENSION TapeExtension,
540: IN ULONG Block,
541: IN UCHAR Number
542: );
543:
544: VOID
545: Q117iGetRetryCounts(
546: IN PTAPE_EXTENSION TapeExtension,
547: IN DRIVER_COMMAND Command
548: );
549:
550: VOID
551: Q117iNextGoodSectors(
552: IN PTAPE_EXTENSION TapeExtension
553: );
554:
555: STATUS
556: Q117iRW_Timeout(
557: IN PTAPE_EXTENSION TapeExtension,
558: IN OUT PIO_REQUEST Ioqucrnt,
559: IN STATUS *Status
560: );
561:
562: STATUS
563: Q117iRW_Normal(
564: IN PTAPE_EXTENSION TapeExtension,
565: IN OUT PIO_REQUEST Ioqucrnt,
566: OUT STATUS *Status
567: );
568:
569: STATUS
570: Q117iRetryCode(
571: IN PTAPE_EXTENSION TapeExtension,
572: IN OUT PIO_REQUEST Ioqucrnt,
573: OUT FDC_STATUS *FdcStatus,
574: OUT STATUS *Status
575: );
576:
577: STATUS
578: Q117iNextTry(
579: IN PTAPE_EXTENSION TapeExtension,
580: IN DRIVER_COMMAND Command
581: );
582:
583: STATUS
584: Q117iSetBack(
585: IN PTAPE_EXTENSION TapeExtension,
586: IN DRIVER_COMMAND Command
587: );
588:
589: STATUS
590: Q117iStartTape(
591: IN PTAPE_EXTENSION TapeExtension
592: );
593:
594: STATUS
595: Q117iReadFDC(
596: IN PTAPE_EXTENSION TapeExtension,
597: OUT UCHAR *Status,
598: OUT SHORT *Length
599: );
600:
601: VOID
602: Q117iResetFDC(
603: IN PTAPE_EXTENSION TapeExtension
604: );
605:
606: STATUS
607: Q117iGetDriveError(
608: IN PTAPE_EXTENSION TapeExtension
609: );
610:
611: STATUS
612: Q117iReport(
613: IN PTAPE_EXTENSION TapeExtension,
614: IN CHAR Command,
615: OUT USHORT *ReportData,
616: IN SHORT ReportSize,
617: OUT CHAR *ESDRetry
618: );
619:
620: STATUS
621: Q117iWaitCommandComplete(
622: IN PTAPE_EXTENSION TapeExtension,
623: IN QIC_TIME WaitTime
624: );
625:
626:
627: STATUS
628: Q117iGetStatus(
629: IN PTAPE_EXTENSION TapeExtension,
630: OUT UCHAR *StatReg3
631: );
632:
633: STATUS
634: Q117iPauseTape(
635: IN PTAPE_EXTENSION TapeExtension
636: );
637:
638: STATUS
639: Q117iSeek(
640: IN PTAPE_EXTENSION TapeExtension
641: );
642:
643: STATUS
644: Q117iChangeTrack(
645: IN PTAPE_EXTENSION TapeExtension,
646: IN SHORT dest_track
647: );
648:
649: STATUS
650: Q117iReadIDRepeat(
651: IN PTAPE_EXTENSION TapeExtension
652: );
653:
654: STATUS
655: Q117iDoReadID(
656: IN PTAPE_EXTENSION TapeExtension,
657: IN QIC_TIME ReadIdDelay,
658: OUT FDC_STATUS *ReadIdStatus
659: );
660:
661: VOID
662: Q117iGetComFirmStr(
663: IN PTAPE_EXTENSION TapeExtension,
664: OUT CHAR **ptr,
665: IN SHORT index
666: );
667:
668: STATUS
669: Q117iLogicalBOT(
670: IN PTAPE_EXTENSION TapeExtension
671: );
672:
673: STATUS
674: Q117iAdjustTapeZone(
675: IN PTAPE_EXTENSION TapeExtension,
676: IN SHORT TapePosition
677: );
678:
679: STATUS
680: Q117iHighSpeedSeek(
681: IN PTAPE_EXTENSION TapeExtension
682: );
683:
684: STATUS
685: Q117iWaitSeek(
686: IN PTAPE_EXTENSION TapeExtension,
687: IN SHORT SeekDelay
688: );
689:
690: STATUS
691: Q117iReceiveByte(
692: IN PTAPE_EXTENSION TapeExtension,
693: IN SHORT ReceiveLength,
694: OUT USHORT *ReceiveData
695: );
696:
697: STATUS
698: Q117iWaitActive(
699: IN PTAPE_EXTENSION TapeExtension
700: );
701:
702: STATUS
703: Q117iTapeCommands(
704: IN PTAPE_EXTENSION TapeExtension,
705: IN OUT PIO_REQUEST Ioqucrnt,
706: IN OUT PIRP Irp
707: );
708:
709: STATUS
710: Q117iDEject(
711: IN PTAPE_EXTENSION TapeExtension
712: );
713:
714: STATUS
715: Q117iDReten(
716: IN PTAPE_EXTENSION TapeExtension
717: );
718:
719: STATUS
720: Q117iDFast_DSlow(
721: IN PTAPE_EXTENSION TapeExtension,
722: IN DRIVER_COMMAND Command
723: );
724:
725: STATUS
726: Q117iDGetRev(
727: IN PTAPE_EXTENSION TapeExtension,
728: OUT PUCHAR Version
729: );
730:
731: STATUS
732: Q117iDGetCap(
733: IN PTAPE_EXTENSION TapeExtension,
734: OUT struct S_O_DGetCap *Capacity
735: );
736:
737: STATUS
738: Q117iDComFirm(
739: IN PTAPE_EXTENSION TapeExtension,
740: IN OUT PUCHAR CommandString
741: );
742:
743: STATUS
744: Q117iDSndWPro(
745: IN PTAPE_EXTENSION TapeExtension
746: );
747:
748: STATUS
749: Q117iDSndReel(
750: IN PTAPE_EXTENSION TapeExtension
751: );
752:
753: STATUS
754: Q117iDGetCart(
755: IN PTAPE_EXTENSION TapeExtension,
756: OUT PUCHAR TapeType
757: );
758:
759: STATUS
760: Q117iDChkDrv(
761: IN PTAPE_EXTENSION TapeExtension,
762: OUT PUCHAR DriveType
763: );
764:
765: STATUS
766: Q117iDGetSpeed(
767: IN PTAPE_EXTENSION TapeExtension,
768: OUT struct S_O_DGetSpeed *XferRate
769: );
770:
771: STATUS
772: Q117iDStatus(
773: IN PTAPE_EXTENSION TapeExtension,
774: OUT struct S_O_DStatus *DriveStatus
775: );
776:
777: STATUS
778: Q117iDGetFDC(
779: IN PTAPE_EXTENSION TapeExtension,
780: OUT PUCHAR FdcType
781: );
782:
783: STATUS
784: Q117iDGetDriveInfo(
785: IN PTAPE_EXTENSION TapeExtension,
786: OUT struct S_O_DMiscInfo *MiscInfoPtr
787: );
788:
789: STATUS
790: Q117iDChkFmt(
791: IN PTAPE_EXTENSION TapeExtension
792: );
793:
794: STATUS
795: Q117iDReportProtoVer(
796: IN PTAPE_EXTENSION TapeExtension,
797: OUT PUCHAR ProtoVer
798: );
799:
800: STATUS Q117iDFndDrv(
801: IN PTAPE_EXTENSION TapeExtension
802: );
803:
804: STATUS
805: Q117iClearTapeError(
806: IN PTAPE_EXTENSION TapeExtension
807: );
808:
809: STATUS Q117iLookForDrive(
810: IN PTAPE_EXTENSION TapeExtension,
811: IN UCHAR DriveSelector,
812: IN BOOLEAN WaitForTape
813: );
814:
815: STATUS Q117iGetDriveType(
816: IN PTAPE_EXTENSION TapeExtension
817: );
818:
819: STATUS Q117iGetDriveSize(
820: IN PTAPE_EXTENSION TapeExtension,
821: IN BOOLEAN ReportFailed,
822: IN USHORT VendorId,
823: IN UCHAR Signature
824: );
825:
826: STATUS Q117iNewTape(
827: IN PTAPE_EXTENSION TapeExtension
828: );
829:
830: STATUS
831: Q117iReadWrtProtect(
832: IN PTAPE_EXTENSION TapeExtension,
833: OUT SHORT *WriteProtect
834: );
835:
836: STATUS
837: Q117iGetTapeParameters(
838: IN PTAPE_EXTENSION TapeExtension
839: );
840:
841: VOID
842: Q117iCalcFmtSegmentsAndTracks(
843: IN PTAPE_EXTENSION TapeExtension
844: );
845:
846: STATUS
847: Q117iMtnPreamble(
848: IN PTAPE_EXTENSION TapeExtension,
849: IN BOOLEAN Select
850: );
851:
852: STATUS
853: Q117iGetDriveInfo(
854: IN PTAPE_EXTENSION TapeExtension
855: );
856:
857: STATUS
858: Q117iStopTape(
859: IN PTAPE_EXTENSION TapeExtension
860: );
861:
862: STATUS
863: Q117iSendByte(
864: IN PTAPE_EXTENSION TapeExtension,
865: IN FIRMWARE_CMD Command
866: );
867:
868: STATUS
869: Q117iSenseSpeed(
870: IN PTAPE_EXTENSION TapeExtension
871: );
872:
873: VOID
874: Q117iDCR_Out(
875: IN PTAPE_EXTENSION TapeExtension,
876: IN SHORT Speed
877: );
878:
879: VOID
880: Q117iExtractFloppyConfig(
881: IN OUT PCONFIG_DATA ConfigData,
882: IN PDEVICE_OBJECT DeviceObject
883: );
884:
885: STATUS
886: Q117iRecalibrateFDC(
887: IN PTAPE_EXTENSION TapeExtension
888: );
889:
890: VOID
891: q117iUpdateRegistryInfo(
892: IN PTAPE_EXTENSION TapeExtension
893: );
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.