Annotation of ntddk/src/scsi/qic117/mt1strc.h, revision 1.1.1.1

1.1       root        1: /*++
                      2: 
                      3: Copyright (c) 1993 - Colorado Memory Systems, Inc.
                      4: All Rights Reserved
                      5: 
                      6: Module Name:
                      7: 
                      8:    mt1strc.h
                      9: 
                     10: Abstract:
                     11: 
                     12: Revision History:
                     13: 
                     14: 
                     15: --*/
                     16: 
                     17: #pragma pack(1)
                     18: 
                     19: //
                     20: //   Tape Drive Status
                     21: //    returned from Report Drive Status command.
                     22: //
                     23: 
                     24: struct DriveStatus {
                     25:     UBYTE Ready:1;              // drive ready
                     26:     UBYTE Error:1;              // error detected
                     27:     UBYTE CartPresent:1;       // cartridge present
                     28:     UBYTE WriteProtect:1;  // cartridge write protected
                     29:     UBYTE NewCart:1;           // new cartridge
                     30:     UBYTE Referenced:1;     // cartridge referenced
                     31:     UBYTE BOT:1;                    // at physical beginning of tape
                     32:     UBYTE EOT:1;                    // at physical end of tape
                     33: };
                     34: 
                     35: 
                     36: //
                     37: //   CMS Status
                     38: //    returned from Report CMS Status command.
                     39: //
                     40: 
                     41: struct CmsStatus {
                     42:     UBYTE NoBurst:1;           // no burst seek if 1
                     43:     UBYTE CmsMode:1;           // cms mode if 1
                     44:     UBYTE Threshold:1;         // Threshold load if 1
                     45:     UBYTE DriveType:1;         // qic40=1, qic80=0
                     46:     UBYTE BurstOnly:1;         // Burst only gain set if 1
                     47:     UBYTE Pegasus:1;           // If Pegasus tape 1, else 0
                     48:     UBYTE Eagle:1;             // Eagle
                     49:     UBYTE Reserved2:1;         // not defined
                     50: };
                     51: 
                     52: //
                     53: //   Tape Drive Configuration
                     54: //    returned from Report Drive Configuration command.
                     55: //
                     56: 
                     57: struct DriveConfiguration {
                     58:     UBYTE Reserved:3;   // reserved (response = 0)
                     59:     UBYTE XferRate:2;  // Transfer Rate    =   00  250 Kbps
                     60:                             //                          01  Reserved
                     61:                             //                          10  500 Kbps
                     62:                             //                          11  Reserved
                     63:     UBYTE Reserved1:1;
                     64:     UBYTE XL_Tape:1;    // extra length tape detected
                     65:     UBYTE QIC80:1;      // QIC-80 mode
                     66: };
                     67: 
                     68: 
                     69: //
                     70: //   Tape Drive Error Status
                     71: //    returned from Report Error Code command.
                     72: //
                     73: 
                     74: struct DriveError {
                     75:     UWORD Error:8;      // error code
                     76:     UWORD Command:8;    // associated command
                     77: };
                     78: 
                     79: struct TapeFormatLgth {
                     80:     UWORD Format:4;          /* Format of the tape */
                     81:     UWORD Length:4;          /* Length of the tape */
                     82: };
                     83: 
                     84: 
                     85: //
                     86: //   Tape Drive Parameters
                     87: //
                     88: 
                     89: struct DriveParameters {
                     90:     UCHAR Flavor;                   // CMS or ALIEN
                     91:     UCHAR Version;                  // Firmware Version
                     92:     UCHAR DriveType;                // QIC-40 or QIC-80
                     93:     UCHAR SeekMode;                 // seek mode supported by the drive
                     94:     SHORT DriveSelect;              // current drive identifier
                     95:     CHAR Mode;                      // drive mode (Primary, Format, Verify)
                     96:     USHORT ArchiveNativeMode;       // Archive Native Mode Data
                     97:     struct DriveStatus Status;      // last read tape drive status byte
                     98: };
                     99: 
                    100: typedef struct DriveParameters DRIVE_PARAMETERS;
                    101: 
                    102: //
                    103: //   Tape Parameters
                    104: //
                    105: 
                    106: struct TapeParameters {
                    107:     CHAR TapeType;          //  QIC40/QIC80 SHORT/LONG
                    108:     SHORT FsectSeg;         //  floppy sectors per segment
                    109:     SHORT SegFtrack;        //  segments per floppy track
                    110:     UWORD FsectFtrack;      //  floppy sectors per floppy track
                    111:     UWORD RwGapLength;      //  write gap length
                    112:     USHORT NumTtrack;       //  number of tape tracks
                    113:     SHORT FtrackFside;      //  floppy tracks per floppy side
                    114:     USHORT SegTtrack;       //  segments per tape track
                    115:     ULONG FsectFside;       //  floppy sectors per floppy side
                    116:     ULONG LogSectors;       //  number of logical sectors on a tape
                    117:     ULONG FsectTtrack;      //  floppy sectors per tape track
                    118:     USHORT TapeFormatCode;  //  the tape format code
                    119:     USHORT FormattableSegs; //  the number of formattable segments
                    120:     QIC_TIME TimeOut[3];    //  time_out for the QIC-117 commands
                    121:                             //  time_out[0] = logical_slow, time_out[1] = logical_fast,
                    122:                             //  time[2] = physical.
                    123: };
                    124: 
                    125: typedef struct TapeParameters TAPE_PARAMETERS;
                    126: 
                    127: //
                    128: //   Drive Select Parameters
                    129: //    These are select/deselect bytes used to select and deselect the tape
                    130: //    drive.
                    131: //
                    132: 
                    133: struct DriveSelect {
                    134:     CHAR    Selected;           // drive selected flag.
                    135:     UBYTE   DeselectByte;      // bits to make drive select line inactive
                    136:     UBYTE   SelectByte;        // bits to make drive select line   active
                    137: };
                    138: 
                    139: typedef struct DriveSelect DRIVE_SELECT;
                    140: 
                    141: //
                    142: //   Transfer Rate Parameters
                    143: //
                    144: 
                    145: struct TransferRate {
                    146:     UBYTE XferRate;    // current transfer rate (SLOW or FAST)
                    147:     UBYTE MaxRate;     // maximum transfer rate (SLOW or FAST)
                    148:     UBYTE TapeSlow;    // Program tape drive slow (250 or 500 Kbps)
                    149:     UBYTE TapeFast;    // Program tape drive fast (500 or 1000 Kbps)
                    150:     UBYTE FDC_Slow;     // Program FDC slow (250 or 500 Kbps)
                    151:     UBYTE FDC_Fast;     // Program FDC fast (500 or 1000 Kbps)
                    152:     UBYTE SRT_Slow;     // FDC step rate for slow xfer rate
                    153:     UBYTE SRT_Fast;     // FDC step rate for fast xfer rate
                    154: };
                    155: 
                    156: typedef struct TransferRate TRANSFER_RATE;
                    157: 
                    158: //
                    159: //   Tape Position Parameters
                    160: //
                    161: 
                    162: struct TapePosition {
                    163:     CHAR    LogFwd;                // indicates that the driver thinks that
                    164:                                     //  the tape is going logical forward
                    165:     SHORT   C_Segment;          // current tape block, (floppy track)
                    166:     SHORT   C_Track;            // current physical track
                    167:     SHORT   D_Segment;          // desired tape segment, (floppy track)
                    168:     SHORT   D_Track;                // desired physical tape track
                    169: };
                    170: 
                    171: typedef struct TapePosition TAPE_POSITION;
                    172: 
                    173: 
                    174: //
                    175: //   Commands to the Floppy Controller.  FDC commands and the corresponding
                    176: //    driver structures are listed below.
                    177: //
                    178: //         FDC Command                         Command Struct      Response Struct
                    179: //         -----------                         --------------      ---------------
                    180: //         Read Data                           rdv_command         stat
                    181: //         Read Deleted Data                   N/A                 N/A
                    182: //         Write Data                          rdv_command         stat
                    183: //         Write Deleted Data              rdv_command         stat
                    184: //         Read a Track                        N/A                 N/A
                    185: //         Verify (82077)                      N/A                 N/A
                    186: //         Version (82077)                 version_cmd         N/A
                    187: //         Read ID                             read_id_cmd         stat
                    188: //         Format a Track                      format_cmd          stat
                    189: //         Scan Equal (765)                    N/A                 N/A
                    190: //         Scan Low or Equal (765)         N/A                 N/A
                    191: //         Scan High or Equal (765)        N/A                 N/A
                    192: //         Recalibrate                         N/A                 N/A
                    193: //         Sense Interrupt Status          sns_int_cmd         fdc_result
                    194: //         Specify                             specify_cmd         N/A
                    195: //         Sense Drive Status              sns_stat_cmd        stat
                    196: //         Seek                                    seek_cmd                N/A
                    197: //         Configure (82077)                   config_cmd          N/A
                    198: //         Relative Seek (82077)           N/A                 N/A
                    199: //         Dump Registers (82077)          N/A                 N/A
                    200: //         Perpendicular Mode (82077)      N/A                 N/A
                    201: //         Invalid                             invalid_cmd         N/A
                    202: //
                    203: 
                    204: 
                    205: struct  rdv_command {
                    206:     UBYTE   command;                // command UBYTE
                    207:     UBYTE   drive;                  // drive specifier
                    208:     UBYTE   C;                      // cylinder number
                    209:     UBYTE   H;                      // head address
                    210:     UBYTE   R;                      // record (sector number)
                    211:     UBYTE   N;                      // number of UBYTEs per sector
                    212:     UBYTE   EOT;                    // end of track
                    213:     UBYTE   GPL;                    // gap length
                    214:     UBYTE   DTL;                    // data length
                    215: };
                    216: 
                    217: typedef struct rdv_command RDV_COMMAND;
                    218: 
                    219: struct  read_id_cmd {
                    220:     UBYTE command;              // command byte
                    221:     UBYTE drive;                    // drive specifier
                    222: };
                    223: 
                    224: struct  format_cmd {
                    225:     UBYTE command;              // command byte
                    226:     UBYTE drive;                    // drive specifier
                    227:     UBYTE N;                        // number of bytes per sector
                    228:     UBYTE SC;                       // sectors per track (segment)
                    229:     UBYTE GPL;                  // gap length
                    230:     UBYTE D;                        // format filler byte
                    231: };
                    232: 
                    233: typedef struct  format_cmd FORMAT_CMD;
                    234: 
                    235: struct  sns_int_cmd {
                    236:     UBYTE command;              // command byte
                    237: };
                    238: 
                    239: struct  version_cmd {
                    240:     UBYTE command;              // command byte
                    241: };
                    242: 
                    243: struct  national_cmd    {
                    244:     UBYTE command;              // command byte
                    245: };
                    246: 
                    247: struct  specify_cmd {
                    248:     UBYTE command;              // command byte
                    249:     UBYTE SRT_HUT;              // step rate time (bits 7-4)
                    250:                                 // head unload time bits (3-0)
                    251:     UBYTE HLT_ND;               // head load time (bits 7-1)
                    252:                                 // non-DMA mode flag (bit 0)
                    253: };
                    254: 
                    255: struct  sns_stat_cmd    {
                    256:     UBYTE command;              // command byte
                    257:     UBYTE drive;                // drive specifier
                    258: };
                    259: 
                    260: struct  recalibrate_cmd    {
                    261:     UBYTE command;              // command byte
                    262:     UBYTE drive;                // drive specifier
                    263: };
                    264: 
                    265: struct  seek_cmd {
                    266:     UBYTE cmd;                  // command byte
                    267:     UBYTE drive;                // drive specifier
                    268:     UBYTE NCN;                  // new cylinder number
                    269: };
                    270: 
                    271: struct config_cmd {
                    272:     UBYTE cmd;                  // command byte
                    273:     UBYTE czero;                // null byte
                    274:     UWORD FIFOTHR:4;            // FIFO threshold
                    275:     UWORD POLL:1;               // Disable polling of drives
                    276:     UWORD EFIFO:1;              // Enable FIFO
                    277:     UWORD EIS:1;                // Enable implied seek
                    278:     UWORD reserved:1;           // reserved
                    279:     UWORD PRETRK:8;             // Pre-compensation start track number
                    280: };
                    281: 
                    282: struct  invalid_cmd {
                    283:     UBYTE command;              // command byte
                    284: };
                    285: 
                    286: struct _FDC_STATUS {
                    287:     UBYTE ST0;                  // status register 0
                    288:     UBYTE ST1;                  // status register 1
                    289:     UBYTE ST2;                  // status register 2
                    290:     UBYTE C;                    // cylinder number
                    291:     UBYTE H;                    // head address
                    292:     UBYTE R;                    // record (sector number)
                    293:     UBYTE N;                    // number of bytes per sector
                    294: };
                    295: 
                    296: typedef struct _FDC_STATUS FDC_STATUS;
                    297: 
                    298: 
                    299: struct fdc_result {
                    300:     UBYTE ST0;                  // status register 0
                    301:     UBYTE PCN;                  // present cylinder number
                    302: };
                    303: 
                    304: //
                    305: //   FDC Sector Header Data used for formatting
                    306: //
                    307: 
                    308: union format_header {
                    309:     struct {
                    310:         UBYTE C;                    // cylinder number
                    311:         UBYTE H;                    // head address
                    312:         UBYTE R;                    // record (sector number)
                    313:         UBYTE N;                    // bytes per sector
                    314:     } hdr_struct;
                    315:     ULONG hdr_all;
                    316: };
                    317: 
                    318: // This command is only valid on the 82078 Enhanced controller
                    319: 
                    320: struct part_id_cmd {
                    321:         UBYTE command;
                    322: };
                    323: 
                    324: union drvspec {
                    325:     struct {
                    326:         UBYTE drive_density:2;
                    327:         UBYTE data_rate_table:2;
                    328:         UBYTE precomp:1;
                    329:         UBYTE floppy_select:2;
                    330:         UBYTE reserved:1;
                    331:     } spec;
                    332:     struct {
                    333:         UBYTE reserved:6;
                    334:         UBYTE no_report:1;
                    335:         UBYTE cmd_done:1;
                    336:     } spec_end;
                    337:     UBYTE spec_all;
                    338: };
                    339: 
                    340: typedef union drvspec DrvSpec;
                    341: 
                    342: // This command is only valid on the 82078 Enhanced controller
                    343: 
                    344: struct drive_specification {
                    345:         UBYTE    command;
                    346:         DrvSpec  drive[5];
                    347: };
                    348: 
                    349: struct drive_specification_status {
                    350:         DrvSpec    drive[4];
                    351: };
                    352: 
                    353: typedef struct drive_specification_status DrvSpecStatus;
                    354: 
                    355: struct PerpMode {
                    356:         UBYTE command;
                    357:         UBYTE wgate:1;
                    358:         UBYTE gap:1;
                    359:         UBYTE drive_select:4;
                    360:         UBYTE reserved:1;
                    361:         UBYTE over_write:1;
                    362: };
                    363: 
                    364: // This command is only valid on the 82078 64 pin Enhanced controller
                    365: 
                    366: struct SaveCmd {
                    367:         UBYTE command;
                    368: };
                    369: 
                    370: struct SaveResult {
                    371:         UBYTE reserved1:7;
                    372:         UBYTE clk48:1;
                    373:         UBYTE reserved2;
                    374:         UBYTE reserved3;
                    375:         UBYTE reserved4;
                    376:         UBYTE reserved5;
                    377:         UBYTE reserved6;
                    378:         UBYTE reserved7;
                    379:         UBYTE reserved8;
                    380:         UBYTE reserved9;
                    381:         UBYTE reserved10;
                    382:         UBYTE reserved11;
                    383:         UBYTE reserved12;
                    384:         UBYTE reserved13;
                    385:         UBYTE reserved14;
                    386:         UBYTE reserved15;
                    387:         UBYTE reserved16;
                    388: };
                    389: 
                    390: 
                    391: struct FormatParameters {
                    392:     SHORT  Segments;    // tape track segment counter
                    393:     UCHAR  Cylinder;    // floppy cylinder number
                    394:     UCHAR  Head;        // floppy head number
                    395:     UCHAR  Sector;      // floppy sector number
                    396:     PMDL   MdlAddress;  // Memory desciptor list for format data
                    397:     UBYTE  NCN;         // new cylinder number
                    398:     ULONG  *HdrPtr;     // pointer to sector id data for format
                    399:     STATUS retval;      // Format status
                    400: };
                    401: 
                    402: typedef struct FormatParameters FMT_PARAMETERS;
                    403: 
                    404: #pragma pack()
                    405: 
                    406: 
                    407: 
                    408: //
                    409: //    Structure for the miscellaneous drive information
                    410: //
                    411: 
                    412: struct MiscDriveInfo {
                    413:         CHAR DriveType;                        // Drive_type: QIC40 or QIC80
                    414:         UCHAR ROM_Version;      // ROM Version of the drive's firmware
                    415:         CHAR InfoExists;               // Indicates the existance of the drive train info
                    416:         UCHAR SerialNumber[4]; // Four byte array used for the drive serial number
                    417:         UCHAR ManDate[2];          // Two byte field used for the date of manufacture
                    418:         CHAR Oem[20];                           // Twenty byte field used for the OEM name
                    419: };
                    420: 
                    421: typedef struct MiscDriveInfo MISC_DRIVE_INFO;
                    422: 

unix.superglobalmegacorp.com

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