summaryrefslogblamecommitdiffstats
path: root/private/ntos/miniport/wd33c93/wd33c93.h
blob: 0fb684bab0e985e5bdb156211194a506581ee954 (plain) (tree)
















































































































































































































































































































                                                                               
/*++

Copyright (c) 1991  Microsoft Corporation

Module Name:

    wd33c93.h

Abstract:

    The module defines the structures, and defines for the Western Digital
    WD33C93 host bus adapter chip.

Author:

    Jeff Havens  (jhavens) 10-June-1991

Revision History:


--*/

#ifndef _WD33C93_
#define _WD33C93_

//
// SCSI host bus adapter Western Digital WD33C93 chip definitions.
//

//
// Define the register type
//
typedef struct _SCSI_REGISTER{
    UCHAR Value;
}SCSI_REGISTER, *PSCSI_REGISTER;

//
// Define the chip registers.
//
typedef struct _SCSI_REGISTERS{
    SCSI_REGISTER CdbSize;
    SCSI_REGISTER Control;
    SCSI_REGISTER Timeout;
    SCSI_REGISTER Cdb[12];
    SCSI_REGISTER TargetLun;
    SCSI_REGISTER CommandPhase;
    SCSI_REGISTER Synchronous;
    SCSI_REGISTER TransferCountMsb;
    SCSI_REGISTER TransferCount2;
    SCSI_REGISTER TransferCountLsb;
    SCSI_REGISTER DestinationId;
    SCSI_REGISTER SourceId;
    SCSI_REGISTER Status;
    SCSI_REGISTER Command;
    SCSI_REGISTER Data;
    SCSI_REGISTER AuxiliaryStatus;
}SCSI_REGISTERS, *PSCSI_REGISTERS;

//
// Define SCSI Auxiliary Status register structure.
//

typedef struct _AUXILIARY_STATUS{
    ULONG DataBufferReady : 1;
    ULONG ParityError : 1;
    ULONG Reserved : 2;
    ULONG CommandInProgress : 1;
    ULONG ChipBusy : 1;
    ULONG LastCommandIgnored : 1;
    ULONG Interrupt : 1;
}AUXILIARY_STATUS, *PAUXILIARY_STATUS;

//
// Define SCSI Own Id register structure.
//

typedef struct _OWN_ID{
    ULONG InitiatorId : 3;
    ULONG AdvancedFeatures : 1;
    ULONG EnableHostParity : 1;
    ULONG Reserved : 1;
    ULONG FrequencySelect : 2;
}OWN_ID, *POWN_ID;

//
// Define Frequency Select values.
//

#define CLOCK_10MHZ  0
#define CLOCK_15MHZ  1
#define CLOCK_16MHZ  2
#define CLOCK_20MHZ  2

//
// Define SCSI control register structure.
//
typedef struct _SCSI_CONTROL{
    ULONG HaltOnParity : 1;
    ULONG HaltOnAtn : 1;
    ULONG IntermediateDisconnectInt : 1;
    ULONG EndingDisconnectInt : 1;
    ULONG HaltOnHostParity : 1;
    ULONG DmaModeSelect : 3;
}SCSI_CONTROL, *PSCSI_CONTROL;

//
// Define SCSI DMA Mode Select values.
//

#define DMA_POLLED 0
#define DMA_BURST  1
#define DMA_WD_BUS 2
#define DMA_NORMAL 4

//
// Define the SCSI Target LUN register structure.
//

typedef struct _TARGET_LUN{
    ULONG LogicalUnitNumber : 3;
    ULONG Reserved : 3;
    ULONG DisconnectOk : 1;
    ULONG TargetLunValid : 1;
}TARGET_LUN, *PTARGET_LUN;

//
// Define the SCSI Synchronous Transfer register structure.
//

typedef struct _SCSI_SYNCHRONOUS{
    ULONG SynchronousOffset : 4;
    ULONG SynchronousPeriod : 3;
    ULONG Reserved : 1;
}SCSI_SYNCHRONOUS, *PSCSI_SYNCHRONOUS;

//
// Define SCSI Destination Id register.
//

typedef struct _DESTINATION_ID{
    ULONG TargetId : 3;
    ULONG Reserved : 3;
    ULONG DataDirection : 1;
    ULONG SelectCommandChain : 1;
}DESTINATION_ID, *PDESTINATION_ID;

//
// Define SCSI Source Id register.
//

typedef struct _SOURCE_ID{
    ULONG TargetId : 3;
    ULONG TargetIdValid : 1;
    ULONG Reserved : 1;
    ULONG DisableParitySelect : 1;
    ULONG EnableSelection : 1;
    ULONG EnableReselection : 1;
}SOURCE_ID, *PSOURCE_ID;

//
// Define the SCSI Status register structure.
//

typedef struct _SCSI_STATUS{
    ULONG PhaseState : 3;
    ULONG PhaseStateValid : 1;
    ULONG CommandComplete : 1;
    ULONG AbortedPaused : 1;
    ULONG Terminated : 1;
    ULONG ServiceRequired : 1;
}SCSI_STATUS, *PSCSI_STATUS;

//
// Define SCSI protocol chip SCSI status PhaseState values for command complete
// interrupts.
//

#define COMPLETE_RESELECT           0x00
#define COMPLETE_SELECT             0x01
#define COMPLETE_TARGET_COMMAND     0x03
#define COMPLETE_TARGET_WITH_ATN    0x04
#define COMPLETE_TRANSLATE_ADDRESS  0x05
#define COMPLETE_SELECT_AND_TRANS   0x06

//
// Define SCSI protocol chip SCSI status PhaseState values for aborted paused
// interrupts.
//

#define PAUSED_MESSAGE_IN_DONE      0x00
#define PAUSED_SAVE_POINTER_MESSAGE 0x01
#define PAUSED_RESELECT_OR_SELECT   0x02
#define PAUSED_TARGET_TRANS_ERROR   0x03
#define PAUSED_TRANS_WITH_ATN       0x04
#define PAUSED_DURING_RESELECT      0x05
#define PAUSED_NEW_TARGET_RESELECT  0x07

//
// Define SCSI protocol chip SCSI status PhaseState values for service required
// interrupts.
//

#define SERVICE_RESELECTED          0x00
#define SERVICE_RESELECTED_IDENTIFY 0x01
#define SERVICE_SELECTED_NO_ATN     0x02
#define SERVICE_SELECTED_WITH_ATH   0x03
#define SERVICE_ATN_ASSERTED        0x04
#define SERVICE_DISCONNECTED        0x05
#define SERVICE_UNKNWON_CDB_TYPE    0x07

//
// Define SCSI protocol chip SCSI status PhaseState values for terminated
// interrupts.
//

#define TERMINATE_INVALID_COMMAND   0x00
#define TERMINATE_UNEXPECTED_DISC   0x01
#define TERMINATE_SELECT_TIMEOUT    0x02
#define TERMINATE_PARITY_NO_ATN     0x03
#define TERMINATE_PARITY_WITH_ATN   0x04
#define TERMINATE_BAD_ADDRESS       0x05
#define TERMINATE_NEW_TRAGET_NO_ID  0x06
#define TERMINATE_PARITY_STATUS_IN  0x07


//
// Define SCSI protocol chip SCSI status PhaseState values for reset
// interrupts.
//

#define RESET_STATUS                0x00
#define RESET_WITH_ADVANCED         0x01

//
// Define SCSI Phase Codes.
//

#define DATA_OUT 0x0
#define DATA_IN 0x1
#define COMMAND_OUT 0x2
#define STATUS_IN 0x3
#define MESSAGE_OUT 0x6
#define MESSAGE_IN 0x7


//
// Define SCSI command register structure.
//

typedef struct _SCSI_COMMAND{
    ULONG OpCode : 7;
    ULONG SingleByte : 1;
}SCSI_COMMAND, *PSCSI_COMMAND;

//
// Define SCSI OpCode command values.
//

#define RESET_SCSI_CHIP             0x00
#define ABORT_SCSI_CHIP             0x01
#define ASSERT_ATN                  0x02
#define NEGATE_ACK                  0x03
#define DISCONNECT_FROM_BUS         0x04
#define RESELECT                    0x05
#define SELECT_WITH_ATN             0x06
#define SELECT_WITHOUT_ATN          0x07
#define SELECT_ATN_AND_TRANSFER     0x08
#define SELECT_AND_TRANSFER         0x09
#define RESELECT_AND_RECEIVE_DATA   0x0a
#define RESELECT_AND_SEND_DATA      0x0b
#define WAIT_FOR_SELECT_RECEIVE     0x0c
#define SEND_STATUS_AND_COMPETE     0x0d
#define SEND_DISCONNECT_MESSAGE     0x0e
#define SET_DISCONNECT_INTERRUPT    0x0f
#define RECEIVE_COMMAND             0x10
#define RECEIVE_DATA                0x11
#define RECEIVE_MESSEAG_OUT         0x12
#define RECEIVE_UNSPECIFIED_OUT     0x13
#define SEND_STATUS                 0x14
#define SEND_DATA                   0x15
#define SEND_MESSAGE_IN             0x16
#define SEND_UNSPECIFIED_DATA_IN    0x17
#define TRANSLATE_ADDRESS           0x18
#define TRANSFER_INFORMATION        0x20

//
// Define SCSI protocol chip command phase values.
//

#define PHASE_NO_SELECT             0x00
#define PHASE_SELECTED              0x10
#define PHASE_IDENTIFY_SENT         0x20
#define PHASE_COMMAND_OUT           0x30
#define PHASE_SAVE_DATA_RECEIVED    0x41
#define PHASE_DISCONNECT_RECEIVED   0x42
#define PHASE_LEGAL_DISCONNECT      0x43
#define PHASE_RESELECTED            0x44
#define PHASE_IDENTIFY_RECEIVED     0x45
#define PHASE_DATA_TRANSFER_DONE    0x46
#define PHASE_STATUS_STARTED        0x47
#define PHASE_STATUS_RECEIVED       0x50
#define PHASE_COMPLETE_RECEIVED     0x60

#endif