Annotation of ntddk/src/scsi/aha174x/aha174x.h, revision 1.1.1.1

1.1       root        1: 
                      2: /*++
                      3: 
                      4: Copyright (c) 1991  Microsoft Corporation
                      5: 
                      6: Module Name:
                      7: 
                      8:     174x.h
                      9: 
                     10: Abstract:
                     11: 
                     12:     This module contains the structures, specific to the Adaptec 174x
                     13:     host bus adapter, used by the SCSI port driver. Data structures
                     14:     that are part of standard ANSI SCSI will be defined in a header
                     15:     file that will be available to all SCSI device drivers.
                     16: 
                     17: Author:
                     18: 
                     19:     Mike Glass
                     20: 
                     21: Revision History:
                     22: 
                     23: --*/
                     24: 
                     25: #include "scsi.h"
                     26: 
                     27: #define MAXIMUM_EISA_SLOTS              0x10
                     28: #define EISA_ADDRESS_BASE               0x0C80
                     29: #define MAXIMUM_SGL_DESCRIPTORS         0x11
                     30: #define MAXIMUM_DESCRIPTOR_SIZE         0x3FFFFF
                     31: #define MAXIMUM_TRANSFER_SIZE           0xFFFFFF
                     32: #define REQUEST_SENSE_BUFFER_SIZE       0x18
                     33: 
                     34: //***************
                     35: //              *
                     36: // Status Block *
                     37: //              *
                     38: //***************
                     39: 
                     40: typedef struct _STATUS_BLOCK {
                     41:     USHORT StatusWord;
                     42:     UCHAR HaStatus;
                     43:     UCHAR TargetStatus;
                     44:     ULONG ResidualByteCount;
                     45:     ULONG ResidualAddress;
                     46:     USHORT AdditionalStatusLength;
                     47:     UCHAR RequestSenseLength;
                     48:     UCHAR Reserved0;
                     49:     ULONG Reserved1;
                     50:     ULONG Reserved2;
                     51:     USHORT Reserved3;
                     52:     UCHAR Cdb[6];
                     53: } STATUS_BLOCK, *PSTATUS_BLOCK;
                     54: 
                     55: //
                     56: // Status Word Bit Values
                     57: //
                     58: 
                     59: #define SB_STATUS_NO_ERROR              0x0001
                     60: #define SB_STATUS_DATA_UNDERRUN         0x0002
                     61: #define SB_STATUS_HA_QUEUE_FULL         0x0008
                     62: #define SB_STATUS_SPECIFICATION_CHECK   0x0010
                     63: #define SB_STATUS_DATA_OVERRUN          0x0020
                     64: #define SB_STATUS_CHAINING_HALTED       0x0040
                     65: #define SB_STATUS_SCB_INTERRUPT         0x0080
                     66: #define SB_STATUS_ADDITIONAL_STATUS     0x0100
                     67: #define SB_STATUS_SENSE_INFORMATION     0x0200
                     68: #define SB_STATUS_INIT_REQUIRED         0x0800
                     69: #define SB_STATUS_MAJOR_ERROR           0x1000
                     70: #define SB_STATUS_EXT_CONT_ALLEGIANCE   0x4000
                     71: 
                     72: //
                     73: // HOST_ADAPTER_STATUS
                     74: //
                     75: 
                     76: #define SB_HASTATUS_HOST_ABORTED            0x04
                     77: #define SB_HASTATUS_ADAPTER_ABORTED         0x05
                     78: #define SB_HASTATUS_FW_NOT_DOWNLOADED       0x08
                     79: #define SB_HASTATUS_TARGET_NOT_USED         0x0A
                     80: #define SB_HASTATUS_SELECTION_TIMEOUT       0x11
                     81: #define SB_HASTATUS_DATA_OVERUNDER_RUN      0x12
                     82: #define SB_HASTATUS_UNEXPECTED_BUS_FREE     0x13
                     83: #define SB_HASTATUS_INVALID_BUS_PHASE       0x14
                     84: #define SB_HASTATUS_INVALID_OPERATION       0x16
                     85: #define SB_HASTATUS_INVALID_SCSI_LINK       0x17
                     86: #define SB_HASTATUS_INVALID_ECB             0x18
                     87: #define SB_HASTATUS_DUPLICATE_TARGET        0x19
                     88: #define SB_HASTATUS_INVALID_SGL             0x1A
                     89: #define SB_HASTATUS_REQUEST_SENSE_FAILED    0x1B
                     90: #define SB_HASTATUS_TAGGED_QUEUE_REJECTED   0x1C
                     91: #define SB_HASTATUS_ADAPTER_HARDWARE_ERROR  0x20
                     92: #define SB_HASTATUS_TARGET_NO_RESPOND       0x21
                     93: #define SB_HASTATUS_ADAPTER_RESET_BUS       0x22
                     94: #define SB_HASTATUS_DEVICE_RESET_BUS        0x23
                     95: #define SB_HASTATUS_CHECKSUM_FAILURE        0x80
                     96: 
                     97: //
                     98: // Target Status - See SCSI.H
                     99: //
                    100: 
                    101: //**********************
                    102: //                     *
                    103: // Scatter Gather List *
                    104: //                     *
                    105: //**********************
                    106: 
                    107: typedef struct _SG_DESCRIPTOR {
                    108:     ULONG Address;
                    109:     ULONG Length;
                    110: } SG_DESCRIPTOR, *PSG_DESCRIPTOR;
                    111: 
                    112: typedef struct _SGL {
                    113:     SG_DESCRIPTOR Descriptor[MAXIMUM_SGL_DESCRIPTORS];
                    114: } SGL, *PSGL;
                    115: 
                    116: //**************************
                    117: //                         *
                    118: // Enhanced Control Block  *
                    119: //                         *
                    120: //**************************
                    121: 
                    122: typedef struct _ECB {
                    123:     USHORT Command;
                    124:     USHORT Flags[2];
                    125:     USHORT Reserved1;
                    126:     ULONG PhysicalSgl;
                    127:     ULONG SglLength;
                    128:     ULONG StatusBlockAddress;
                    129:     ULONG NextEcb;
                    130:     ULONG Reserved2;
                    131:     ULONG SenseInfoAddress;
                    132:     UCHAR SenseInfoLength;
                    133:     UCHAR CdbLength;
                    134:     USHORT DataCheckSum;
                    135:     UCHAR Cdb[12];
                    136:     PVOID SrbAddress;
                    137:     PSCSI_REQUEST_BLOCK AbortSrb;
                    138:     SGL Sgl;
                    139:     STATUS_BLOCK StatusBlock;
                    140: } ECB, *PECB;
                    141: 
                    142: //
                    143: // Commands
                    144: //
                    145: 
                    146: #define ECB_COMMAND_NO_OPERATION        0x0000
                    147: #define ECB_COMMAND_INITIATOR_COMMAND   0x0001
                    148: #define ECB_COMMAND_RUN_DIAGNOSTICS     0x0005
                    149: #define ECB_COMMAND_INITIALIZE_SCSI     0x0006
                    150: #define ECB_COMMAND_READ_SENSE_INFO     0x0008
                    151: #define ECB_COMMAND_DOWNLOAD_FIRMWARE   0x0009
                    152: #define ECB_COMMAND_READ_INQUIRY_DATA   0x000A
                    153: #define ECB_COMMAND_TARGET_COMMAND      0x0010
                    154: 
                    155: //
                    156: // Flag word 1
                    157: //
                    158: 
                    159: #define ECB_FLAGS_CHAIN_NO_ERROR        0x0001
                    160: #define ECB_FLAGS_DISABLE_INTERRUPT     0x0080
                    161: #define ECB_FLAGS_SUPPRESS_UNDERRUN     0x0400
                    162: #define ECB_FLAGS_SCATTER_GATHER        0x1000
                    163: #define ECB_FLAGS_DISABLE_STATUS_BLOCK  0x4000
                    164: #define ECB_FLAGS_AUTO_REQUEST_SENSE    0x8000
                    165: 
                    166: //
                    167: // Flag word 2
                    168: //
                    169: 
                    170: #define ECB_FLAGS_SIMPLE_QUEUE_TAG      0x0008
                    171: #define ECB_FLAGS_HEAD_QUEUE_TAG        0x0018
                    172: #define ECB_FLAGS_ORDERED_QUEUE_TAG     0x0028
                    173: #define ECB_FLAGS_NO_DISCONNECT         0x0040
                    174: #define ECB_FLAGS_DATA_TRANSFER         0x0100
                    175: #define ECB_FLAGS_READ                  0x0300
                    176: #define ECB_FLAGS_WRITE                 0x0100
                    177: #define ECB_FLAGS_SUPPRESS_TRANSFER     0x0400
                    178: #define ECB_FLAGS_CALCULATE_CHECKSUM    0x0800
                    179: #define ECB_FLAGS_ERROR_RECOVERY        0x4000
                    180: 
                    181: //****************************
                    182: //                           *
                    183: // EISA Controller registers *
                    184: //                           *
                    185: //****************************
                    186: 
                    187: typedef struct _EISA_CONTROLLER {
                    188: 
                    189:     UCHAR BoardId[4];                       // zC80
                    190:     UCHAR EBControl;                        // zC84
                    191:     UCHAR Unused[0x3B];                     // zC85
                    192:     UCHAR PortAddress;                      // zCC0
                    193:     UCHAR BiosAddress;                      // zCC1
                    194:     UCHAR Interrupt;                        // zCC2
                    195:     UCHAR ScsiId;                           // zCC3
                    196:     UCHAR DmaChannel;                       // zCC4
                    197:     UCHAR Reserved[11];                     // zCC5
                    198:     ULONG MailBoxOut;                       // zCD0
                    199:     UCHAR Attention;                        // zCD4
                    200:     UCHAR Control;                          // zCD5
                    201:     UCHAR InterruptStatus;                  // zCD6
                    202:     UCHAR Status;                           // zCD7
                    203:     ULONG MailBoxIn;                        // zCD8
                    204:     UCHAR MoreStatus;                       // zCDC
                    205: 
                    206: } EISA_CONTROLLER, *PEISA_CONTROLLER;
                    207: 
                    208: //
                    209: // PortAddress Register Definition
                    210: //
                    211: 
                    212: #define ENHANCED_INTERFACE_ENABLED          0x80
                    213: 
                    214: //
                    215: // Bios address mask.
                    216: //
                    217: 
                    218: #define BIOS_ADDRESS                        0x0f
                    219: #define BIOS_ENABLED                        0x40
                    220: #define BIOS_LENGTH                         0x4000
                    221: 
                    222: //
                    223: // Attention Register Bit Definitions
                    224: //
                    225: 
                    226: #define IMMEDIATE_COMMAND               0x10
                    227: #define START_ECB                       0x40
                    228: #define ABORT_ECB                       0x50
                    229: 
                    230: 
                    231: //
                    232: // Control Register Bit Definitions
                    233: //
                    234: 
                    235: #define SET_HOST_READY                  0x20
                    236: #define CLEAR_INTERRUPT                 0x40
                    237: #define HARD_RESET                      0x80
                    238: 
                    239: //
                    240: // Interrupt Status Register Bit Definitions
                    241: //
                    242: 
                    243: #define ECB_COMPLETE_SUCCESS            0x01
                    244: #define ECB_COMPLETE_SUCCESS_RETRY      0x05
                    245: #define ADAPTER_FAILURE                 0x07
                    246: #define IMMEDIATE_COMMAND_SUCCESS       0x0A
                    247: #define ECB_COMPLETE_ERROR              0x0C
                    248: #define ASYNCHRONOUS_EVENT_NOTIFICATION 0x0D
                    249: #define IMMEDIATE_COMMAND_ERROR         0x0E
                    250: 
                    251: //
                    252: // Status Register Bit Definition
                    253: //
                    254: 
                    255: #define ADAPTER_BUSY                    0x01
                    256: #define INTERRUPT_PENDING               0x02
                    257: #define MAILBOX_OUT_EMPTY               0x04
                    258: 
                    259: //
                    260: // Immediate commands
                    261: //
                    262: 
                    263: #define ECB_IMMEDIATE_RESET             0x00000080
                    264: #define ECB_IMMEDIATE_RESUME            0x00000090
                    265: 
                    266: //
                    267: // Status2 Register Definition
                    268: //
                    269: 
                    270: #define HOST_READY                      0x01

unix.superglobalmegacorp.com

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