Annotation of ntddk/src/scsi/atdisk/atd_data.h, revision 1.1

1.1     ! root        1: /*++
        !             2: 
        !             3: Copyright (c) 1991  Microsoft Corporation
        !             4: 
        !             5: Module Name:
        !             6: 
        !             7:     atd_data.h
        !             8: 
        !             9: Abstract:
        !            10: 
        !            11:     This file includes data and hardware (non-platform-dependent)
        !            12:     declarations for the AT disk (aka ST506 and standard hard disk)
        !            13:     driver for NT.
        !            14: 
        !            15: Author:
        !            16: 
        !            17:     Chad Schwitters (chads) 21-Feb-1991.
        !            18: 
        !            19: Environment:
        !            20: 
        !            21:     Kernel mode only.
        !            22: 
        !            23: Notes:
        !            24: 
        !            25: Revision History:
        !            26: 
        !            27: --*/
        !            28: 
        !            29: 
        !            30: 
        !            31: //
        !            32: // Define our out dbg print routines.
        !            33: //
        !            34: 
        !            35: #if DBG
        !            36: extern ULONG AtDebugLevel;
        !            37: #define ATBUGCHECK           ((ULONG)0x80000000)
        !            38: #define ATDIAG1              ((ULONG)0x00000001)
        !            39: #define ATDIAG2              ((ULONG)0x00000002)
        !            40: #define ATERRORS             ((ULONG)0x00000004)
        !            41: #define ATINIT               ((ULONG)0x00000008)
        !            42: #define AtDump(LEVEL,STRING) \
        !            43:         do { \
        !            44:             ULONG _level = (LEVEL); \
        !            45:             if (AtDebugLevel & _level) { \
        !            46:                 DbgPrint STRING; \
        !            47:             } \
        !            48:             if (_level == ATBUGCHECK) { \
        !            49:                 ASSERT(FALSE); \
        !            50:             } \
        !            51:         } while (0)
        !            52: #else
        !            53: #define AtDump(LEVEL,STRING) do {NOTHING;} while (0)
        !            54: #endif
        !            55: 
        !            56: //BUGBUG delete TemporaryArcNamePrefix when HalGetNumberOfBusses is defined
        !            57: 
        !            58: #if defined(i386) || (defined(MIPS) && defined(COMPAQ))
        !            59: static CCHAR TemporaryArcNamePrefix[] = { "\\ArcName\\multi(0)" };
        !            60: #else
        !            61: static CCHAR TemporaryArcNamePrefix[] = { "\\ArcName\\eisa(0)" };
        !            62: #endif
        !            63: 
        !            64: //
        !            65: // The number of controllers is arbitrary.  No machines with more than
        !            66: // two are known, but we'll use a larger number to be safe.  The number
        !            67: // of disks per controller is a hardware limitation, and some of the code
        !            68: // takes advantage of the fact that it's known to be 2.
        !            69: //
        !            70: 
        !            71: #define MAXIMUM_NUMBER_OF_CONTROLLERS           6
        !            72: #define MAXIMUM_NUMBER_OF_DISKS_PER_CONTROLLER  2
        !            73: 
        !            74: //
        !            75: // For device name manipulation, we allocate a buffer since there is no
        !            76: // preset limit on name size.  The system hands us a prefix, and we
        !            77: // allocate the buffer to be the size of that prefix plus the delta defined
        !            78: // below.  This size gives us room for
        !            79: //     PREFIX + <disk number> + \partition + <partition number>
        !            80: // with up to five digits per number.
        !            81: //
        !            82: 
        !            83: #define DEVICE_NAME_DELTA            20
        !            84: 
        !            85: //
        !            86: // Partitions need to be linked to ARC names, in case we're booting off
        !            87: // the partition.  The system hands us a prefix, and we allocate the
        !            88: // buffer to be the size of that prefix plus the delta defined below.
        !            89: // This size gives us room for
        !            90: //      PREFIX + disk(<#>)rdisk(<#>)partition(<#>)
        !            91: // with up to five digits per number.
        !            92: //
        !            93: 
        !            94: #define ARC_NAME_DELTA               39
        !            95: 
        !            96: //
        !            97: // When writing a message to the error log file, we need to allocate a
        !            98: // buffer for the message.  This is the message structure we impose, along
        !            99: // with some values for the first field.
        !           100: //
        !           101: 
        !           102: typedef struct _ERROR_LOG_ENTRY {
        !           103:     CCHAR ErrorType;
        !           104:     CCHAR Data1;
        !           105:     CCHAR Data2;
        !           106:     CCHAR Data3;
        !           107:     CCHAR Data4;
        !           108:     CCHAR Data5;
        !           109: } ERROR_LOG_ENTRY;
        !           110: typedef ERROR_LOG_ENTRY *PERROR_LOG_ENTRY;
        !           111: 
        !           112: #define ERROR_LOG_ENTRY_LENGTH       sizeof( ERROR_LOG_ENTRY )
        !           113: 
        !           114: #define ERROR_LOG_TYPE_CORRECTABLE_ERROR    1
        !           115: #define ERROR_LOG_TYPE_ERROR                2
        !           116: #define ERROR_LOG_TYPE_TIMEOUT              3
        !           117: #define ERROR_LOG_TYPE_TIMEOUT_DURING_RESET 4
        !           118: 
        !           119: //
        !           120: // If the hardware state gets messed up, we'll retry the current packet.
        !           121: // This says how many times we'll retry before giving up and returning
        !           122: // an error.  Note that the hardware invisibly retries 8 times.
        !           123: //
        !           124: 
        !           125: #define RETRY_IRP_MAXIMUM_COUNT 10
        !           126: 
        !           127: //
        !           128: // When we're resetting the controller, we have to go through some states
        !           129: // as various operations finish (that is, interrupt).  Here's the states
        !           130: // in order.
        !           131: //
        !           132: 
        !           133: #define RESET_NOT_RESETTING                 0
        !           134: #define RESET_FIRST_DRIVE_SET               1
        !           135: #define RESET_FIRST_DRIVE_RECALIBRATED      2
        !           136: #define RESET_SECOND_DRIVE_SET              3
        !           137: #define RESET_SECOND_DRIVE_RECALIBRATED     4
        !           138: 
        !           139: //
        !           140: // The I/O system calls our timer routine once every second.  If the timer
        !           141: // counter is -1, the timer is "off" and the timer routine will just return.
        !           142: // When we want to make sure a hardware event will occur, we set the timer.
        !           143: // The timer routine decrements the counter once a second.  The timer
        !           144: // expires if the counter hits 0.  We give the timer extra time for
        !           145: // recalibrates since they're so slow.
        !           146: //
        !           147: 
        !           148: #define CANCEL_TIMER                 -1
        !           149: #define EXPIRED_TIMER                0
        !           150: #define START_TIMER                  9
        !           151: #define START_TIMER_FOR_RECALIBRATE  11
        !           152: #define START_BUSY_COUNTDOWN 60
        !           153: 
        !           154: //
        !           155: // ST506 controller commands for the command register.
        !           156: //
        !           157: 
        !           158: #define READ_COMMAND                 0x20 // retries enabled
        !           159: #define WRITE_COMMAND                0x30 // retries enabled
        !           160: #define RECALIBRATE_COMMAND          0x10 // move drive heads to track 0
        !           161: #define SEEK_COMMAND                 0x70 // normally implied in read/write
        !           162: #define SET_DRIVE_PARAMETERS_COMMAND 0x91 // set drive parameters
        !           163: #define IDENTIFY_COMMAND             0xEC // identify drive parameters
        !           164: 
        !           165: //
        !           166: // ST506 controller bit masks for the status register.
        !           167: //
        !           168: 
        !           169: #define BUSY_STATUS                  0x80 // busy bit in status register
        !           170: #define ERROR_STATUS                 0x01 // error bit in status register
        !           171: #define CORRECTED_ERROR_STATUS       0x04 // corrected error in status register
        !           172: #define DATA_REQUEST_STATUS          0x08 // data request bit in status register
        !           173: 
        !           174: //
        !           175: // ST506 controller bit masks for the drive select/head register.
        !           176: //
        !           177: 
        !           178: #define DRIVE_1                      0xA0 // drive 1 (C:), 512 bytes/sector
        !           179:                                           // DRIVE/HEAD port, ext bit on
        !           180: #define DRIVE_2_SELECTED             0x10 // bit that says drive 2 is selected
        !           181: 
        !           182: #define DRIVE_2                      DRIVE_1 | DRIVE_2_SELECTED
        !           183: 
        !           184: //
        !           185: // Define object extensions used by the driver.  The first is a controller
        !           186: // extension, which starts at the end of each controller object.
        !           187: //
        !           188: 
        !           189: typedef struct _CONTROLLER_EXTENSION {
        !           190:     PCONTROLLER_OBJECT ControllerObject;  // "extension" points to object
        !           191:     struct _CONTROLLER_EXTENSION *NextControllerExtension; // link 'em together
        !           192:     struct _DISK_EXTENSION *Disk1;        // have to access the disks from ISR
        !           193:     struct _DISK_EXTENSION *Disk2;        // this one's NULL if only one disk
        !           194:     PKPOWER_NOTIFY PowerNotifyObject;     // ptr to power notify object
        !           195:     PKPOWER_STATUS PowerStatusObject1;    // ptr to 1st power status object
        !           196:     PKPOWER_STATUS PowerStatusObject2;    // ptr to 2nd power status object
        !           197:     PKDPC PowerNotifyDpcObject;           // ptr to DPC object for power notify
        !           198:     PDEVICE_OBJECT WhichDeviceObject;     // set to D.O. that expects interrupt
        !           199:     PDEVICE_OBJECT FirstFailingDeviceObject; // for timeout while resetting
        !           200:     PUCHAR ControllerAddress;             // base addr of controller registers
        !           201:     PUCHAR ControlPortAddress;
        !           202:     LONG InterruptTimer;                  // used to time out operations
        !           203:     CCHAR ResettingController;            // >0 while controller is being reset
        !           204:     CCHAR ControlFlags;                   // OR into CONTROL_PORT
        !           205:     BOOLEAN InterruptRequiresDpc;         // true if ISR should queue DPC
        !           206:     BOOLEAN PowerFailed;                  // system sets to TRUE @ power fail
        !           207:     BOOLEAN PowerRecoveryNotDone;
        !           208:     BOOLEAN ControllerAddressMapped;
        !           209:     BOOLEAN ControllerPortMapped;
        !           210:     struct _DISK_EXTENSION *BusyDevice;   // Set when we find the device is
        !           211:                                           // busy (e.g. spin up on laptop)
        !           212:     LONG BusyCountDown;
        !           213:     PKINTERRUPT InterruptObject;          // only one needed per controller
        !           214:     CCHAR GarbageCan[1];                  // THIS MUST BE AT THE END OF
        !           215:                                           // OF THE CONTROLLER EXTENSION!!!
        !           216:                                           // When the controller extension
        !           217:                                           // is allocated we will actually
        !           218:                                           // allocate
        !           219:                                           // sizeof(CONTROLLER_EXTENSION) +
        !           220:                                           // (BYTES_PER_INTERRUPT-1) where
        !           221:                                           // GarbageCan will be an array
        !           222:                                           // of size BYTES_PER_INTERRUPT.
        !           223:                                           // This array is used to fill
        !           224:                                           // and empty the controller cache
        !           225:                                           // in case of an error.
        !           226: } CONTROLLER_EXTENSION;
        !           227: 
        !           228: typedef CONTROLLER_EXTENSION *PCONTROLLER_EXTENSION;
        !           229: 
        !           230: //
        !           231: // This is the disk extension, which is attached to all partition 0
        !           232: // device objects (which represent the disk).  Note that the first three
        !           233: // fields are identical to those of the partition extension, so that the
        !           234: // same code can access the disk via partition 0 or partition n.
        !           235: //
        !           236: 
        !           237: typedef struct _DISK_EXTENSION {
        !           238:     struct _DISK_EXTENSION *Partition0;   // ptr to self; must be first field
        !           239:     LARGE_INTEGER StartingOffset;         // first disk sector of this partition
        !           240:     LARGE_INTEGER PartitionLength;        // number of sectors in partition
        !           241:     PCONTROLLER_EXTENSION ControllerExtension; // ptr to disk's controller
        !           242:     PDEVICE_OBJECT DeviceObject;          // ptr to this disk's object
        !           243:     PDEVICE_OBJECT PartitionObjects;      // ptr to chain of partition objects
        !           244:     struct _DISK_EXTENSION *OtherDiskExtension; // other disk on controller
        !           245:     ULONG FirstSectorOfRequest;           // start sector of whole request
        !           246:     ULONG FirstSectorOfTransfer;          // start sector for current transfer
        !           247:     ULONG RemainingRequestLength;         // # of sectors left in current op
        !           248:     ULONG TotalTransferLength;            // length of current transfer
        !           249:     ULONG RemainingTransferLength;        // length left in current transfer
        !           250:     ULONG SequenceNumber;                 // Sequence number that is incremented
        !           251:                                           // on every new irp for this device.
        !           252:     HANDLE DirectoryHandle;               // handle to disk's device directory
        !           253:     PCCHAR CurrentAddress;                // working address in user's buffer
        !           254:     USHORT BytesPerSector;                // disk-specific values
        !           255:     USHORT SectorsPerTrack;               // ...
        !           256:     USHORT PretendSectorsPerTrack;        // ...
        !           257:     USHORT NumberOfCylinders;             // ...
        !           258:     USHORT PretendNumberOfCylinders;      // ...
        !           259:     USHORT TracksPerCylinder;             // ...
        !           260:     USHORT PretendTracksPerCylinder;      // ...
        !           261:     USHORT WritePrecomp;                  // ...
        !           262:     USHORT BytesPerInterrupt;             // ...
        !           263:     CCHAR ByteShiftToSector;              // ...
        !           264:     CCHAR ReadCommand;                    // ...
        !           265:     CCHAR WriteCommand;                   // ...
        !           266:     CCHAR VerifyCommand;                  // ...
        !           267:     CCHAR OperationType;                  // current command (ie IRP_MJ_READ)
        !           268:     UCHAR DeviceUnit;                     // which disk we are to the controller
        !           269:     CCHAR IrpRetryCount;                  // count of retries by driver
        !           270:     BOOLEAN PacketIsBeingRetried;         // when driver calls AtDiskStartIo
        !           271: } DISK_EXTENSION;
        !           272: 
        !           273: typedef DISK_EXTENSION *PDISK_EXTENSION;
        !           274: 
        !           275: //
        !           276: // This is the partition extension, which is attached to all partition
        !           277: // "n" device objects - except for partition 0, which gets a disk
        !           278: // extension.  Note that the first three fields are identical to those of
        !           279: // the disk extension, so that the same code can access the disk via
        !           280: // partition 0 or partition n.
        !           281: //
        !           282: 
        !           283: typedef struct _PARTITION_EXTENSION {
        !           284:     PDISK_EXTENSION Partition0;           // ptr to partn. 0, must be 1st field
        !           285:     LARGE_INTEGER StartingOffset;         // first disk sector of this partition
        !           286:     LARGE_INTEGER PartitionLength;        // number of sectors in partition
        !           287:     LARGE_INTEGER HiddenSectors;          // number of hidden sectors
        !           288:     PDEVICE_OBJECT NextPartitionObject;   // ptr to next partition's object
        !           289:     ULONG PartitionNumber;                // 1-based number of partition
        !           290:     UCHAR PartitionType;                  // type of this partition
        !           291:     BOOLEAN BootIndicator;                // indicates partition bootable or not
        !           292: } PARTITION_EXTENSION;
        !           293: typedef PARTITION_EXTENSION *PPARTITION_EXTENSION;
        !           294: 
        !           295: //
        !           296: // Fixed disk parameter table structure
        !           297: //
        !           298: 
        !           299: #pragma pack(1)                                 // This structure is packed
        !           300: typedef struct _FIXED_DISK_PARAMETER_TABLE {
        !           301:     USHORT MaxCylinders;
        !           302:     CCHAR  MaxHeads;
        !           303:     UCHAR  Signature;
        !           304:     UCHAR  TranslatedSectorsPerTrack;
        !           305:     USHORT StartWritePrecomp;
        !           306:     CCHAR  EccBurstLength;
        !           307:     CCHAR  ControlFlags;
        !           308:     USHORT TranslatedMaxCylinders;
        !           309:     UCHAR  TranslatedMaxHeads;
        !           310:     USHORT LandingZone;
        !           311:     CCHAR  SectorsPerTrack;
        !           312:     UCHAR  ReservedForFuture;
        !           313:     } FIXED_DISK_PARAMETER_TABLE;
        !           314: 
        !           315: typedef FIXED_DISK_PARAMETER_TABLE *PFIXED_DISK_PARAMETER_TABLE;
        !           316: 
        !           317: #pragma pack()
        !           318: 
        !           319: //
        !           320: // This structure holds all of the configuration data; it's filled in by
        !           321: // AtGetConfigInfo() and read by other initialization routines.
        !           322: //
        !           323: 
        !           324: typedef struct _DRIVE_DATA {
        !           325:     PFIXED_DISK_PARAMETER_TABLE ParameterTableAddress;
        !           326:     USHORT NumberOfCylinders;
        !           327:     USHORT TracksPerCylinder;
        !           328:     USHORT SectorsPerTrack;
        !           329:     USHORT PretendNumberOfCylinders;
        !           330:     USHORT PretendTracksPerCylinder;
        !           331:     USHORT PretendSectorsPerTrack;
        !           332:     USHORT BytesPerSector;
        !           333:     USHORT BytesPerInterrupt;
        !           334:     USHORT WritePrecomp;
        !           335:     UCHAR DriveType;
        !           336:     CCHAR ReadCommand;
        !           337:     CCHAR WriteCommand;
        !           338:     CCHAR VerifyCommand;
        !           339:     BOOLEAN DisableReadCache;
        !           340: } DRIVE_DATA, *PDRIVE_DATA;
        !           341: 
        !           342: typedef struct _CONTROLLER_DATA {
        !           343:     DRIVE_DATA Disk[MAXIMUM_NUMBER_OF_DISKS_PER_CONTROLLER];
        !           344:     PUCHAR ControllerBaseAddress;
        !           345:     PUCHAR ControlPortAddress;
        !           346:     PHYSICAL_ADDRESS OriginalControllerBaseAddress;
        !           347:     PHYSICAL_ADDRESS OriginalControlPortAddress;
        !           348:     KINTERRUPT_MODE InterruptMode;
        !           349:     KAFFINITY ProcessorNumber;
        !           350:     INTERFACE_TYPE InterfaceType;
        !           351:     ULONG BusNumber;
        !           352:     ULONG RangeOfControllerBase;
        !           353:     ULONG RangeOfControlPort;
        !           354:     BOOLEAN SaveFloatState;
        !           355:     BOOLEAN SharableVector;
        !           356:     BOOLEAN ControllerBaseMapped;
        !           357:     BOOLEAN ControlPortMapped;
        !           358:     BOOLEAN OkToUseThisController;
        !           359:     KIRQL ControllerIrql;
        !           360:     KIRQL OriginalControllerIrql;
        !           361:     ULONG ControllerVector;
        !           362:     CCHAR ControlFlags;
        !           363:     UCHAR OriginalControllerVector;
        !           364: } CONTROLLER_DATA, *PCONTROLLER_DATA;
        !           365: 
        !           366: 
        !           367: typedef struct _CONFIG_DATA {
        !           368:     PCCHAR NtNamePrefix;
        !           369:     PCCHAR ArcNamePrefix;
        !           370:     PULONG HardDiskCount;
        !           371:     HANDLE DeviceKey;
        !           372:     CONTROLLER_DATA Controller[MAXIMUM_NUMBER_OF_CONTROLLERS];
        !           373: } CONFIG_DATA, *PCONFIG_DATA;
        !           374: 
        !           375: //
        !           376: // IDENTIFY data
        !           377: //
        !           378: 
        !           379: typedef struct _IDENTIFY_DATA {
        !           380:     USHORT GeneralConfiguration;            // 00
        !           381:     USHORT NumberOfCylinders;               // 02
        !           382:     USHORT Reserved1;                       // 04
        !           383:     USHORT NumberOfHeads;                   // 06
        !           384:     USHORT UnformattedBytesPerTrack;        // 08
        !           385:     USHORT UnformattedBytesPerSector;       // 0A
        !           386:     USHORT SectorsPerTrack;                 // 0C
        !           387:     USHORT VendorUnique1[3];                // 0E
        !           388:     USHORT SerialNumber[10];                // 14
        !           389:     USHORT BufferType;                      // 28
        !           390:     USHORT BufferSectorSize;                // 2A
        !           391:     USHORT NumberOfEccBytes;                // 2C
        !           392:     USHORT FirmwareRevision[4];             // 2E
        !           393:     USHORT ModelNumber[20];                 // 36
        !           394:     UCHAR  MaximumBlockTransfer;            // 5E
        !           395:     UCHAR  VendorUnique2;                   // 5F
        !           396:     USHORT DoubleWordIo;                    // 60
        !           397:     USHORT Capabilities;                    // 62
        !           398:     USHORT Reserved2;                       // 64
        !           399:     UCHAR  VendorUnique3;                   // 66
        !           400:     UCHAR  PioCycleTimingMode;              // 67
        !           401:     UCHAR  VendorUnique4;                   // 68
        !           402:     UCHAR  DmaCycleTimingMode;              // 69
        !           403:     USHORT TranslationFieldsValid:1;        // 6A
        !           404:     USHORT Reserved3:15;
        !           405:     USHORT NumberOfCurrentCylinders;        // 6C
        !           406:     USHORT NumberOfCurrentHeads;            // 6E
        !           407:     USHORT CurrentSectorsPerTrack;          // 70
        !           408:     ULONG  CurrentSectorCapacity;           // 72
        !           409:     USHORT Reserved4[197];                  // 76
        !           410: } IDENTIFY_DATA, *PIDENTIFY_DATA;
        !           411: 
        !           412: //
        !           413: // Prototypes of external routines.
        !           414: //
        !           415: 
        !           416: int
        !           417: sprintf(
        !           418:     char *s,
        !           419:     const char *format,
        !           420:     ...
        !           421:     );
        !           422: 
        !           423: //
        !           424: // Device driver routine declarations.
        !           425: //
        !           426: 
        !           427: NTSTATUS
        !           428: DriverEntry(
        !           429:     IN OUT PDRIVER_OBJECT DriverObject,
        !           430:     IN PUNICODE_STRING RegistryPath
        !           431:     );
        !           432: 
        !           433: NTSTATUS
        !           434: AtGetConfigInfo(
        !           435:     IN PDRIVER_OBJECT DriverObject,
        !           436:     IN PUNICODE_STRING RegistryPath,
        !           437:     IN OUT PCONFIG_DATA ConfigData
        !           438:     );
        !           439: 
        !           440: NTSTATUS
        !           441: AtInitializeController(
        !           442:     IN struct _CONFIG_DATA *ConfigData,
        !           443:     IN CCHAR ControllerNumber,
        !           444:     IN PDRIVER_OBJECT DriverObject
        !           445:     );
        !           446: 
        !           447: NTSTATUS
        !           448: AtInitializePowerFail(
        !           449:     IN PCONTROLLER_EXTENSION ControllerExtension
        !           450:     );
        !           451: 
        !           452: NTSTATUS
        !           453: AtInitializeDisk(
        !           454:     IN struct _CONFIG_DATA *ConfigData,
        !           455:     IN CCHAR ContNumber,
        !           456:     IN CCHAR DiskNumber,
        !           457:     IN PDRIVER_OBJECT DriverObject,
        !           458:     IN PCONTROLLER_EXTENSION ControllerExtension
        !           459:     );
        !           460: 
        !           461: NTSTATUS
        !           462: AtDiskDispatchCreateClose(
        !           463:     IN PDEVICE_OBJECT DeviceObject,
        !           464:     IN PIRP Irp
        !           465:     );
        !           466: 
        !           467: NTSTATUS
        !           468: AtDiskDispatchDeviceControl(
        !           469:     IN PDEVICE_OBJECT DeviceObject,
        !           470:     IN PIRP Irp
        !           471:     );
        !           472: 
        !           473: NTSTATUS
        !           474: AtDiskDispatchReadWrite(
        !           475:     IN PDEVICE_OBJECT DeviceObject,
        !           476:     IN PIRP Irp
        !           477:     );
        !           478: 
        !           479: VOID
        !           480: AtDiskStartIo(
        !           481:     IN PDEVICE_OBJECT DeviceObject,
        !           482:     IN PIRP Irp
        !           483:     );
        !           484: 
        !           485: IO_ALLOCATION_ACTION
        !           486: AtInitiate(
        !           487:     IN PDEVICE_OBJECT DeviceObject,
        !           488:     IN PIRP Irp,
        !           489:     IN PVOID MapRegisterBase,
        !           490:     IN PVOID Context
        !           491:     );
        !           492: 
        !           493: BOOLEAN
        !           494: AtStartDevice(
        !           495:     IN PVOID Context
        !           496:     );
        !           497: 
        !           498: BOOLEAN
        !           499: AtDiskInterruptService(
        !           500:     IN PKINTERRUPT Interrupt,
        !           501:     IN PVOID Context
        !           502:     );
        !           503: 
        !           504: VOID
        !           505: AtDiskDeferredProcedure(
        !           506:     IN PKDPC Dpc,
        !           507:     IN PVOID DeferredContext,
        !           508:     IN PVOID SystemArgument1,
        !           509:     IN PVOID SystemArgument2
        !           510:     );
        !           511: 
        !           512: BOOLEAN
        !           513: AtDiskStartReset(
        !           514:     IN PVOID Context
        !           515:     );
        !           516: 
        !           517: VOID
        !           518: AtDiskUnloadDriver(
        !           519:     IN PDRIVER_OBJECT DriverObject
        !           520:     );
        !           521: 
        !           522: VOID
        !           523: AtDiskCheckTimer(
        !           524:     IN PDEVICE_OBJECT DeviceObject,
        !           525:     IN PVOID TimerCounter
        !           526:     );
        !           527: 
        !           528: BOOLEAN
        !           529: AtCheckTimerSync(
        !           530:     IN PVOID Context
        !           531:     );
        !           532: 
        !           533: NTSTATUS
        !           534: AtWaitControllerBusy(
        !           535:     PUCHAR StatusRegisterAddress,
        !           536:     ULONG MicrosecondsToDelay,
        !           537:     ULONG TimesToDelay
        !           538:     );
        !           539: 
        !           540: NTSTATUS
        !           541: AtWaitControllerReady(
        !           542:     IN PCONTROLLER_EXTENSION ControllerExtension,
        !           543:     IN ULONG MicrosecondsToDelay,
        !           544:     IN ULONG TimesToDelay
        !           545:     );
        !           546: 
        !           547: VOID
        !           548: AtLogError(
        !           549:     IN PDEVICE_OBJECT DeviceObject,
        !           550:     IN ULONG SequenceNumber,
        !           551:     IN UCHAR MajorFunctionCode,
        !           552:     IN UCHAR RetryCount,
        !           553:     IN ULONG UniqueErrorValue,
        !           554:     IN NTSTATUS FinalStatus,
        !           555:     IN NTSTATUS SpecificIOStatus,
        !           556:     IN CCHAR ErrorType,
        !           557:     IN UCHAR Parameter1,
        !           558:     IN UCHAR Parameter2,
        !           559:     IN UCHAR Parameter3,
        !           560:     IN UCHAR Parameter4,
        !           561:     IN UCHAR Parameter5,
        !           562:     IN UCHAR Parameter6,
        !           563:     IN UCHAR Parameter7
        !           564:     );
        !           565: 
        !           566: PVOID
        !           567: AtGetTranslatedMemory(
        !           568:     IN INTERFACE_TYPE BusType,
        !           569:     IN ULONG BusNumber,
        !           570:     IN PHYSICAL_ADDRESS IoAddress,
        !           571:     IN ULONG NumberOfBytes,
        !           572:     IN BOOLEAN InIoSpace,
        !           573:     OUT PBOOLEAN MappedAddress
        !           574:     );
        !           575: 
        !           576: BOOLEAN
        !           577: AtReportUsage(
        !           578:     IN PCONFIG_DATA ConfigData,
        !           579:     IN UCHAR ControllerNumber,
        !           580:     IN PDRIVER_OBJECT DriverObject
        !           581:     );
        !           582: 
        !           583: VOID
        !           584: AtBuildDeviceMap(
        !           585:     IN ULONG ControllerNumber,
        !           586:     IN ULONG DiskNumber,
        !           587:     IN PHYSICAL_ADDRESS ControllerAddress,
        !           588:     IN KIRQL Irql,
        !           589:     IN PDRIVE_DATA Disk,
        !           590:     IN PIDENTIFY_DATA DiskData
        !           591:     );
        !           592: 
        !           593: BOOLEAN
        !           594: AtDiskControllerInfo(
        !           595:     IN PDRIVER_OBJECT DriverObject,
        !           596:     IN PUNICODE_STRING RegistryPath,
        !           597:     IN ULONG WhichController,
        !           598:     IN OUT PCONTROLLER_DATA Controller,
        !           599:     IN PHYSICAL_ADDRESS DefaultBaseAddress,
        !           600:     IN PHYSICAL_ADDRESS DefaultPortAddress,
        !           601:     IN KIRQL DefaultIrql,
        !           602:     IN INTERFACE_TYPE DefaultInterfaceType,
        !           603:     IN ULONG DefaultBusNumber,
        !           604:     IN BOOLEAN UseDefaults
        !           605:     );
        !           606: 
        !           607: BOOLEAN
        !           608: AtResetController(
        !           609:     IN PUCHAR StatusRegAddress,
        !           610:     IN PUCHAR DriveControlAddress,
        !           611:     IN CCHAR ControlFlags
        !           612:     );
        !           613: 
        !           614: BOOLEAN
        !           615: AtControllerPresent(
        !           616:     PCONTROLLER_DATA ControllerData
        !           617:     );

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.