Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
ncr53C94.h
Abstract:
The module defines the structures, defines and functions for the NCR 53C94 host bus adapter chip.
Author:
Jeff Havens (jhavens) 28-Feb-1991
Revision History:
R.D. Lanser (DEC) 05-Oct-1991 Copied SCSI_REGISTER structure from d3scsidd.c and added check for DECSTATION. Changed the UCHAR's in the read/write register structures with SCSI_REGISTER, and added the dot Byte member reference to SCSI_WRITE and SCSI_READ macros.
--*/
#ifndef _NCR53C94_
#define _NCR53C94_
//
// Define SCSI Protocol Chip register format.
//
#if defined(DECSTATION)
typedef struct _SCSI_REGISTER { UCHAR Byte; UCHAR Fill[3]; } SCSI_REGISTER, *PSCSI_REGISTER;
#else
#define SCSI_REGISTER UCHAR
#endif // DECSTATION
//
// SCSI Protocol Chip Definitions.
//
// Define SCSI Protocol Chip Read registers structure.
//
typedef struct _SCSI_READ_REGISTERS { SCSI_REGISTER TransferCountLow; SCSI_REGISTER TransferCountHigh; SCSI_REGISTER Fifo; SCSI_REGISTER Command; SCSI_REGISTER ScsiStatus; SCSI_REGISTER ScsiInterrupt; SCSI_REGISTER SequenceStep; SCSI_REGISTER FifoFlags; SCSI_REGISTER Configuration1; SCSI_REGISTER Reserved1; SCSI_REGISTER Reserved2; SCSI_REGISTER Configuration2; SCSI_REGISTER Configuration3; SCSI_REGISTER Reserved; SCSI_REGISTER TransferCountPage; SCSI_REGISTER FifoBottem; } SCSI_READ_REGISTERS, *PSCSI_READ_REGISTERS;
//
// Define SCSI Protocol Chip Write registers structure.
//
typedef struct _SCSI_WRITE_REGISTERS { SCSI_REGISTER TransferCountLow; SCSI_REGISTER TransferCountHigh; SCSI_REGISTER Fifo; SCSI_REGISTER Command; SCSI_REGISTER DestinationId; SCSI_REGISTER SelectTimeOut; SCSI_REGISTER SynchronousPeriod; SCSI_REGISTER SynchronousOffset; SCSI_REGISTER Configuration1; SCSI_REGISTER ClockConversionFactor; SCSI_REGISTER TestMode; SCSI_REGISTER Configuration2; SCSI_REGISTER Configuration3; SCSI_REGISTER Reserved; SCSI_REGISTER TransferCountPage; SCSI_REGISTER FifoBottem; } SCSI_WRITE_REGISTERS, *PSCSI_WRITE_REGISTERS;
typedef union _SCSI_REGISTERS { SCSI_READ_REGISTERS ReadRegisters; SCSI_WRITE_REGISTERS WriteRegisters; } SCSI_REGISTERS, *PSCSI_REGISTERS;
//
// Define SCSI Command Codes.
//
#define NO_OPERATION_DMA 0x80
#define FLUSH_FIFO 0x1
#define RESET_SCSI_CHIP 0x2
#define RESET_SCSI_BUS 0x3
#define TRANSFER_INFORMATION 0x10
#define TRANSFER_INFORMATION_DMA 0x90
#define COMMAND_COMPLETE 0x11
#define MESSAGE_ACCEPTED 0x12
#define TRANSFER_PAD 0x18
#define SET_ATTENTION 0x1a
#define RESET_ATTENTION 0x1b
#define RESELECT 0x40
#define SELECT_WITHOUT_ATTENTION 0x41
#define SELECT_WITH_ATTENTION 0x42
#define SELECT_WITH_ATTENTION_STOP 0x43
#define ENABLE_SELECTION_RESELECTION 0x44
#define DISABLE_SELECTION_RESELECTION 0x45
#define SELECT_WITH_ATTENTION3 0x46
//
// Define SCSI Status Register structure.
//
typedef struct _SCSI_STATUS { UCHAR Phase : 3; UCHAR ValidGroup : 1; UCHAR TerminalCount : 1; UCHAR ParityError : 1; UCHAR GrossError : 1; UCHAR Interrupt : 1; } SCSI_STATUS, *PSCSI_STATUS;
//
// 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 Interrupt Register structure.
//
typedef struct _SCSI_INTERRUPT { UCHAR Selected : 1; UCHAR SelectedWithAttention : 1; UCHAR Reselected : 1; UCHAR FunctionComplete : 1; UCHAR BusService : 1; UCHAR Disconnect : 1; UCHAR IllegalCommand : 1; UCHAR ScsiReset : 1; } SCSI_INTERRUPT, *PSCSI_INTERRUPT;
//
// Define SCSI Sequence Step Register structure.
//
typedef struct _SCSI_SEQUENCE_STEP { UCHAR Step : 3; UCHAR MaximumOffset : 1; UCHAR Reserved : 4; } SCSI_SEQUENCE_STEP, *PSCSI_SEQUENCE_STEP;
//
// Define SCSI Fifo Flags Register structure.
//
typedef struct _SCSI_FIFO_FLAGS { UCHAR ByteCount : 5; UCHAR FifoStep : 3; } SCSI_FIFO_FLAGS, *PSCSI_FIFO_FLAGS;
//
// Define SCSI Configuration 1 Register structure.
//
typedef struct _SCSI_CONFIGURATION1 { UCHAR HostBusId : 3; UCHAR ChipTestEnable : 1; UCHAR ParityEnable : 1; UCHAR ParityTestMode : 1; UCHAR ResetInterruptDisable : 1; UCHAR SlowCableMode : 1; } SCSI_CONFIGURATION1, *PSCSI_CONFIGURATION1;
//
// Define SCSI Configuration 2 Register structure.
//
typedef struct _SCSI_CONFIGURATION2 { UCHAR DmaParityEnable : 1; UCHAR RegisterParityEnable : 1; UCHAR TargetBadParityAbort : 1; UCHAR Scsi2 : 1; UCHAR HighImpedance : 1; UCHAR EnableByteControl : 1; UCHAR EnablePhaseLatch : 1; UCHAR ReserveFifoByte : 1; } SCSI_CONFIGURATION2, *PSCSI_CONFIGURATION2;
//
// Define SCSI Configuration 3 Register structure.
//
typedef struct _SCSI_CONFIGURATION3 { UCHAR Threshold8 : 1; UCHAR AlternateDmaMode : 1; UCHAR SaveResidualByte : 1; UCHAR FastClock : 1; UCHAR FastScsi : 1; UCHAR EnableCdb10 : 1; UCHAR EnableQueue : 1; UCHAR CheckIdMessage : 1; } SCSI_CONFIGURATION3, *PSCSI_CONFIGURATION3;
//
// Define Emulex FAS 218 unique part Id code.
//
typedef struct _NCR_PART_CODE { UCHAR RevisionLevel : 3; UCHAR ChipFamily : 5; }NCR_PART_CODE, *PNCR_PART_CODE;
#define EMULEX_FAS_216 2
//
// SCSI Protocol Chip Control read and write macros.
//
#if defined(DECSTATION)
#define SCSI_READ(ChipAddr, Register) \
(READ_REGISTER_UCHAR (&((ChipAddr)->ReadRegisters.Register.Byte)))
#define SCSI_WRITE(ChipAddr, Register, Value) \
WRITE_REGISTER_UCHAR(&((ChipAddr)->WriteRegisters.Register.Byte), (Value))
#else
#define SCSI_READ(ChipAddr, Register) \
(READ_REGISTER_UCHAR (&((ChipAddr)->ReadRegisters.Register)))
#define SCSI_WRITE(ChipAddr, Register, Value) \
WRITE_REGISTER_UCHAR(&((ChipAddr)->WriteRegisters.Register), (Value))
#endif
#endif
|