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

1.1       root        1: /*++
                      2: 
                      3: Copyright (c) 1990  Microsoft Corporation
                      4: 
                      5: Module Name:
                      6: 
                      7:     ncr53c9x.h
                      8: 
                      9: Abstract:
                     10: 
                     11:     The module defines the structures, defines and functions for the NCR 53c9x
                     12:     family of host bus adapter chips.
                     13: 
                     14: Author:
                     15: 
                     16:     Jeff Havens  (jhavens) 28-Feb-1991
                     17: 
                     18: Revision History:
                     19: 
                     20: --*/
                     21: 
                     22: #ifndef _NCR53C9X_
                     23: #define _NCR53C9X_
                     24: 
                     25: 
                     26: //
                     27: // Define SCSI Protocol Chip register format.
                     28: //
                     29: 
                     30: #if defined(DECSTATION)
                     31: 
                     32: typedef struct _SCSI_REGISTER {
                     33:     UCHAR Byte;
                     34:     UCHAR Fill[3];
                     35: } SCSI_REGISTER, *PSCSI_REGISTER;
                     36: 
                     37: #else
                     38: 
                     39: #define SCSI_REGISTER UCHAR
                     40: 
                     41: #endif // DECSTATION
                     42: 
                     43: //
                     44: // SCSI Protocol Chip Definitions.
                     45: //
                     46: // Define SCSI Protocol Chip Read registers structure.
                     47: //
                     48: 
                     49: typedef struct _SCSI_READ_REGISTERS {
                     50:     SCSI_REGISTER TransferCountLow;
                     51:     SCSI_REGISTER TransferCountHigh;
                     52:     SCSI_REGISTER Fifo;
                     53:     SCSI_REGISTER Command;
                     54:     SCSI_REGISTER ScsiStatus;
                     55:     SCSI_REGISTER ScsiInterrupt;
                     56:     SCSI_REGISTER SequenceStep;
                     57:     SCSI_REGISTER FifoFlags;
                     58:     SCSI_REGISTER Configuration1;
                     59:     SCSI_REGISTER Reserved1;
                     60:     SCSI_REGISTER Reserved2;
                     61:     SCSI_REGISTER Configuration2;
                     62:     SCSI_REGISTER Configuration3;
                     63:     SCSI_REGISTER Configuration4;
                     64:     SCSI_REGISTER TransferCountPage;
                     65:     SCSI_REGISTER FifoBottem;
                     66: } SCSI_READ_REGISTERS, *PSCSI_READ_REGISTERS;
                     67: 
                     68: //
                     69: // Define SCSI Protocol Chip Write registers structure.
                     70: //
                     71: 
                     72: typedef struct _SCSI_WRITE_REGISTERS {
                     73:     SCSI_REGISTER TransferCountLow;
                     74:     SCSI_REGISTER TransferCountHigh;
                     75:     SCSI_REGISTER Fifo;
                     76:     SCSI_REGISTER Command;
                     77:     SCSI_REGISTER DestinationId;
                     78:     SCSI_REGISTER SelectTimeOut;
                     79:     SCSI_REGISTER SynchronousPeriod;
                     80:     SCSI_REGISTER SynchronousOffset;
                     81:     SCSI_REGISTER Configuration1;
                     82:     SCSI_REGISTER ClockConversionFactor;
                     83:     SCSI_REGISTER TestMode;
                     84:     SCSI_REGISTER Configuration2;
                     85:     SCSI_REGISTER Configuration3;
                     86:     SCSI_REGISTER Configuration4;
                     87:     SCSI_REGISTER TransferCountPage;
                     88:     SCSI_REGISTER FifoBottem;
                     89: } SCSI_WRITE_REGISTERS, *PSCSI_WRITE_REGISTERS;
                     90: 
                     91: typedef union _SCSI_REGISTERS {
                     92:     SCSI_READ_REGISTERS  ReadRegisters;
                     93:     SCSI_WRITE_REGISTERS WriteRegisters;
                     94: } SCSI_REGISTERS, *PSCSI_REGISTERS;
                     95: 
                     96: //
                     97: // Define SCSI Command Codes.
                     98: //
                     99: 
                    100: #define NO_OPERATION_DMA            0x80
                    101: #define FLUSH_FIFO                  0x1
                    102: #define RESET_SCSI_CHIP             0x2
                    103: #define RESET_SCSI_BUS              0x3
                    104: #define TRANSFER_INFORMATION        0x10
                    105: #define TRANSFER_INFORMATION_DMA    0x90
                    106: #define COMMAND_COMPLETE            0x11
                    107: #define MESSAGE_ACCEPTED            0x12
                    108: #define TRANSFER_PAD                0x18
                    109: #define SET_ATTENTION               0x1a
                    110: #define RESET_ATTENTION             0x1b
                    111: #define RESELECT                    0x40
                    112: #define SELECT_WITHOUT_ATTENTION    0x41
                    113: #define SELECT_WITH_ATTENTION       0x42
                    114: #define SELECT_WITH_ATTENTION_STOP  0x43
                    115: #define ENABLE_SELECTION_RESELECTION 0x44
                    116: #define DISABLE_SELECTION_RESELECTION 0x45
                    117: #define SELECT_WITH_ATTENTION3      0x46
                    118: 
                    119: //
                    120: // Define SCSI Status Register structure.
                    121: //
                    122: typedef struct _SCSI_STATUS {
                    123:     UCHAR Phase                 : 3;
                    124:     UCHAR ValidGroup            : 1;
                    125:     UCHAR TerminalCount         : 1;
                    126:     UCHAR ParityError           : 1;
                    127:     UCHAR GrossError            : 1;
                    128:     UCHAR Interrupt             : 1;
                    129: } SCSI_STATUS, *PSCSI_STATUS;
                    130: 
                    131: //
                    132: // Define SCSI Phase Codes.
                    133: //
                    134: 
                    135: #define DATA_OUT        0x0
                    136: #define DATA_IN         0x1
                    137: #define COMMAND_OUT     0x2
                    138: #define STATUS_IN       0x3
                    139: #define MESSAGE_OUT     0x6
                    140: #define MESSAGE_IN      0x7
                    141: 
                    142: //
                    143: // Define SCSI Interrupt Register structure.
                    144: //
                    145: 
                    146: typedef struct _SCSI_INTERRUPT {
                    147:     UCHAR Selected              : 1;
                    148:     UCHAR SelectedWithAttention : 1;
                    149:     UCHAR Reselected            : 1;
                    150:     UCHAR FunctionComplete      : 1;
                    151:     UCHAR BusService            : 1;
                    152:     UCHAR Disconnect            : 1;
                    153:     UCHAR IllegalCommand        : 1;
                    154:     UCHAR ScsiReset             : 1;
                    155: } SCSI_INTERRUPT, *PSCSI_INTERRUPT;
                    156: 
                    157: //
                    158: // Define SCSI Sequence Step Register structure.
                    159: //
                    160: 
                    161: typedef struct _SCSI_SEQUENCE_STEP {
                    162:     UCHAR Step                  : 3;
                    163:     UCHAR MaximumOffset         : 1;
                    164:     UCHAR Reserved              : 4;
                    165: } SCSI_SEQUENCE_STEP, *PSCSI_SEQUENCE_STEP;
                    166: 
                    167: //
                    168: // Define SCSI Fifo Flags Register structure.
                    169: //
                    170: 
                    171: typedef struct _SCSI_FIFO_FLAGS {
                    172:     UCHAR ByteCount             : 5;
                    173:     UCHAR FifoStep              : 3;
                    174: } SCSI_FIFO_FLAGS, *PSCSI_FIFO_FLAGS;
                    175: 
                    176: //
                    177: // Define SCSI Configuration 1 Register structure.
                    178: //
                    179: 
                    180: typedef struct _SCSI_CONFIGURATION1 {
                    181:     UCHAR HostBusId             : 3;
                    182:     UCHAR ChipTestEnable        : 1;
                    183:     UCHAR ParityEnable          : 1;
                    184:     UCHAR ParityTestMode        : 1;
                    185:     UCHAR ResetInterruptDisable : 1;
                    186:     UCHAR SlowCableMode         : 1;
                    187: } SCSI_CONFIGURATION1, *PSCSI_CONFIGURATION1;
                    188: 
                    189: //
                    190: // Define SCSI Configuration 2 Register structure.
                    191: //
                    192: 
                    193: typedef struct _SCSI_CONFIGURATION2 {
                    194:     UCHAR DmaParityEnable       : 1;
                    195:     UCHAR RegisterParityEnable  : 1;
                    196:     UCHAR TargetBadParityAbort  : 1;
                    197:     UCHAR Scsi2                 : 1;
                    198:     UCHAR HighImpedance         : 1;
                    199:     UCHAR EnableByteControl     : 1;
                    200:     UCHAR EnablePhaseLatch      : 1;
                    201:     UCHAR ReserveFifoByte       : 1;
                    202: } SCSI_CONFIGURATION2, *PSCSI_CONFIGURATION2;
                    203: 
                    204: //
                    205: // Define SCSI Configuration 3 Register structure.
                    206: //
                    207: 
                    208: typedef struct _SCSI_CONFIGURATION3 {
                    209:     UCHAR Threshold8            : 1;
                    210:     UCHAR AlternateDmaMode      : 1;
                    211:     UCHAR SaveResidualByte      : 1;
                    212:     UCHAR FastClock             : 1;
                    213:     UCHAR FastScsi              : 1;
                    214:     UCHAR EnableCdb10           : 1;
                    215:     UCHAR EnableQueue           : 1;
                    216:     UCHAR CheckIdMessage        : 1;
                    217: } SCSI_CONFIGURATION3, *PSCSI_CONFIGURATION3;
                    218: 
                    219: //
                    220: // Define SCSI Configuration 4 Register structure.
                    221: //
                    222: 
                    223: typedef struct _SCSI_CONFIGURATION4 {
                    224:     UCHAR ActiveNegation        : 1;
                    225:     UCHAR TestTransferCounter   : 1;
                    226:     UCHAR BackToBackTransfer    : 1;
                    227:     UCHAR Reserved              : 5;
                    228: } SCSI_CONFIGURATION4, *PSCSI_CONFIGURATION4;
                    229: 
                    230: //
                    231: // Define Emulex FAS 218 unique part Id code.
                    232: //
                    233: 
                    234: typedef struct _NCR_PART_CODE {
                    235:     UCHAR RevisionLevel         : 3;
                    236:     UCHAR ChipFamily            : 5;
                    237: }NCR_PART_CODE, *PNCR_PART_CODE;
                    238: 
                    239: #define EMULEX_FAS_216  2
                    240: #define NCR_53c96       0x14
                    241: 
                    242: //
                    243: // SCSI Protocol Chip Control read and write macros.
                    244: //
                    245: 
                    246: #if defined(DECSTATION)
                    247: 
                    248: #define SCSI_READ(ChipAddr, Register) \
                    249:     (READ_REGISTER_UCHAR (&((ChipAddr)->ReadRegisters.Register.Byte)))
                    250: 
                    251: #define SCSI_WRITE(ChipAddr, Register, Value) \
                    252:     WRITE_REGISTER_UCHAR(&((ChipAddr)->WriteRegisters.Register.Byte), (Value))
                    253: 
                    254: #else
                    255: 
                    256: #define SCSI_READ(ChipAddr, Register) \
                    257:     (READ_REGISTER_UCHAR (&((ChipAddr)->ReadRegisters.Register)))
                    258: 
                    259: #define SCSI_WRITE(ChipAddr, Register, Value) \
                    260:     WRITE_REGISTER_UCHAR(&((ChipAddr)->WriteRegisters.Register), (Value))
                    261: 
                    262: #endif
                    263: 
                    264: 
                    265: //
                    266: // Define SCSI Adapter Specific Read registers structure
                    267: //
                    268: 
                    269: typedef struct _ADAPTER_READ_REGISTERS {
                    270:     UCHAR Reserved00;
                    271:     UCHAR Reserved01;
                    272:     UCHAR OptionSelect1;
                    273:     UCHAR OptionSelect2;
                    274:     UCHAR Reserved04;
                    275:     UCHAR OptionSelect5;
                    276:     UCHAR Reserved06;
                    277:     UCHAR Reserved07;
                    278:     UCHAR Reserved08;
                    279:     UCHAR Reserved09;
                    280:     UCHAR Reserved0a;
                    281:     UCHAR Reserved0b;
                    282:     UCHAR DmaStatus;
                    283:     UCHAR Reserved0d;
                    284:     UCHAR Reserved0e;
                    285:     UCHAR Reserved0f;
                    286: } ADAPTER_READ_REGISTERS, *PADAPTER_READ_REGISTERS;
                    287: 
                    288: //
                    289: // Define SCSI Adapter Specific Write registers structure
                    290: //
                    291: 
                    292: typedef struct _ADAPTER_WRITE_REGISTERS {
                    293:     UCHAR Reserved00;
                    294:     UCHAR Reserved01;
                    295:     UCHAR OptionSelect1;
                    296:     UCHAR OptionSelect2;
                    297:     UCHAR Reserved04;
                    298:     UCHAR OptionSelect5;
                    299:     UCHAR Reserved06;
                    300:     UCHAR Reserved07;
                    301:     UCHAR Reserved08;
                    302:     UCHAR Reserved09;
                    303:     UCHAR DmaDecode;
                    304:     UCHAR Reserved0b;
                    305:     UCHAR Reserved0c;
                    306:     UCHAR Reserved0d;
                    307:     UCHAR Reserved0e;
                    308:     UCHAR Reserved0f;
                    309: } ADAPTER_WRITE_REGISTERS, *PADAPTER_WRITE_REGISTERS;
                    310: 
                    311: 
                    312: 
                    313: typedef union _ADAPTER_REGISTERS {
                    314:     ADAPTER_READ_REGISTERS ReadRegisters;
                    315:     ADAPTER_WRITE_REGISTERS WriteRegisters;
                    316: } ADAPTER_REGISTERS, *PADAPTER_REGISTERS;
                    317: 
                    318: 
                    319: 
                    320: //
                    321: // Define Option Select Register structures.
                    322: //
                    323: 
                    324: typedef struct _POS_DATA_1 {
                    325:     UCHAR AdapterEnable         : 1;
                    326:     UCHAR IoAddressSelects      : 3;
                    327:     UCHAR InterruptSelects      : 2;
                    328:     UCHAR InterruptEnable       : 1;
                    329:     UCHAR Reserved              : 1;
                    330: } POS_DATA_1, *PPOS_DATA_1;
                    331: 
                    332: typedef struct _POS_DATA_2 {
                    333:     UCHAR DmaSelects            : 3;
                    334:     UCHAR UnusedDmaSelect       : 1;
                    335:     UCHAR AdapterFairness       : 1;
                    336:     UCHAR PreemptCount          : 2;
                    337:     UCHAR DmaEnable             : 1;
                    338: } POS_DATA_2, *PPOS_DATA_2;
                    339: 
                    340: typedef struct _POS_DATA_3 {
                    341:     UCHAR Reserved              : 3;
                    342:     UCHAR SramAddressSelects    : 3;  // 7f4c only
                    343:     UCHAR HostIdSelects         : 2;  // 7f4c only
                    344: } POS_DATA_3, *PPOS_DATA_3;
                    345: 
                    346: typedef struct _POS_DATA_4 {
                    347:     UCHAR Reserved0             : 5;
                    348:     UCHAR HostIdSelects         : 1;  // 7f4d & 7f4f only
                    349:     UCHAR Reserved1             : 2;
                    350: } POS_DATA_4, *PPOS_DATA_4;
                    351: 
                    352: //
                    353: // Define SCSI Dma Status Register structure.
                    354: //
                    355: 
                    356: typedef struct _SCSI_DMA_STATUS {
                    357:     UCHAR Interrupt             : 1;
                    358:     UCHAR DmaRequest            : 1;
                    359:     UCHAR Reserved              : 6;
                    360: } SCSI_DMA_STATUS, *PSCSI_DMA_STATUS;
                    361: 
                    362: //
                    363: // Adapter configuration Information.
                    364: //
                    365: 
                    366: #define ONBOARD_C94_ADAPTER_ID  0x7f4c
                    367: #define ONBOARD_C90_ADAPTER_ID  0x7f4d
                    368: #define PLUGIN_C90_ADAPTER_ID   0x7f4f
                    369: 
                    370: typedef struct _POS_DATA {
                    371:     USHORT AdapterId;
                    372:     UCHAR OptionData1;
                    373:     UCHAR OptionData2;
                    374:     UCHAR OptionData3;
                    375:     UCHAR OptionData4;
                    376: } POS_DATA, *PPOS_DATA;
                    377: 
                    378: typedef struct _INIT_DATA {
                    379:     ULONG AdapterId;
                    380:     ULONG CardSlot;
                    381:     POS_DATA PosData[8];
                    382: }INIT_DATA, *PINIT_DATA;
                    383: 
                    384: static const PVOID
                    385: AdapterBaseAddress[] = {
                    386:     (PVOID) 0x0000,
                    387:     (PVOID) 0x0240,
                    388:     (PVOID) 0x0340,
                    389:     (PVOID) 0x0400,
                    390:     (PVOID) 0x0420,
                    391:     (PVOID) 0x3240,
                    392:     (PVOID) 0x8240,
                    393:     (PVOID) 0xa240
                    394: };
                    395: 
                    396: static const UCHAR
                    397: AdapterInterruptLevel[] = {
                    398:     0x03,
                    399:     0x05,
                    400:     0x07,
                    401:     0x09
                    402: };
                    403: 
                    404: static const UCHAR
                    405: AdapterDmaLevel[] = {
                    406:     0x00,
                    407:     0x01,
                    408:     0x02,      // invalid setting
                    409:     0x03,
                    410:     0x04,      // invalid setting
                    411:     0x05,
                    412:     0x06,
                    413:     0x07
                    414: };
                    415: 
                    416: static const UCHAR
                    417: AdapterScsiIdC90[] = {
                    418:     0x06,
                    419:     0x07
                    420: };
                    421: 
                    422: static const UCHAR
                    423: AdapterScsiIdC94[] = {
                    424:     0x04,
                    425:     0x05,
                    426:     0x06,
                    427:     0x07
                    428: };
                    429: 
                    430: #endif

unix.superglobalmegacorp.com

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