summaryrefslogtreecommitdiffstats
path: root/private/ntos/miniport/wd33c93/maynard.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--private/ntos/miniport/wd33c93/maynard.h173
1 files changed, 173 insertions, 0 deletions
diff --git a/private/ntos/miniport/wd33c93/maynard.h b/private/ntos/miniport/wd33c93/maynard.h
new file mode 100644
index 000000000..9e6576549
--- /dev/null
+++ b/private/ntos/miniport/wd33c93/maynard.h
@@ -0,0 +1,173 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ maynard.h
+
+Abstract:
+
+ The module defines the structures, and defines for the Maynard 16-bit
+ host bus adapter card.
+
+Author:
+
+ Jeff Havens (jhavens) 20-June-1991
+
+Revision History:
+
+
+--*/
+
+#ifndef _MAYNARD_
+#define _MAYNARD_
+
+//
+// Define the SCSI host adapter card register structure.
+//
+
+typedef struct _CARD_REGISTERS {
+ UCHAR InternalAddress;
+ UCHAR IoChannel;
+ UCHAR CardControl;
+ UCHAR IoChannel2;
+ UCHAR SetWriteLogic;
+ UCHAR SetReadLogic;
+ UCHAR Unused;
+}CARD_REGISTERS, *PCARD_REGISTERS;
+
+//
+// Define the SCSI host adapter card control register structure.
+//
+
+typedef struct _CARD_CONTROL {
+ UCHAR ResetScsiBus : 1;
+ UCHAR EnableDmaWrite : 1;
+ UCHAR SetBufferedIo : 1;
+ UCHAR SetIrql : 3;
+ UCHAR SetDmaRequest : 2;
+}CARD_CONTROL, *PCARD_CONTROL;
+
+//
+// Specify board dependent parameters.
+//
+
+#define CLOCK_CONVERSION_FACTOR 0x0
+#define SYNCHRONOUS_OFFSET 0x0c
+#define SYNCHRONOUS_PERIOD 0x32
+#define SYNCHRONOUS_PERIOD_STEP 0x32
+#define ASYNCHRONOUS_OFFSET 0x00
+#define ASYNCHRONOUS_PERIOD 0X02
+#define SCSI_CLOCK_SPEED 10 // Clock speed of the WD protocol chip in MHz.
+#define SELECT_TIMEOUT_VALUE (SCSI_CLOCK_SPEED * 4) // = (Input clock * 250ms timeout) / 80 rounded up.
+#define CARD_DMA_MODE DMA_NORMAL
+
+//
+// SCSI Protocol Chip Control read and write macros.
+//
+
+#define SCSI_READ(ChipAddr, Register) ( \
+ ScsiPortWritePortUchar(&((ChipAddr)->InternalAddress), \
+ (UCHAR) &((PSCSI_REGISTERS) 0)->Register), \
+ ScsiPortReadPortUchar(&((ChipAddr)->IoChannel)))
+
+#define SCSI_READ_AUX(ChipAddr, Register) (ScsiPortReadPortUchar (&((ChipAddr)->InternalAddress)))
+
+#define SCSI_WRITE(ChipAddr, Register, Value) { \
+ ScsiPortWritePortUchar(&((ChipAddr)->InternalAddress), \
+ (UCHAR) &((PSCSI_REGISTERS) 0)->Register); \
+ ScsiPortWritePortUchar(&((ChipAddr)->IoChannel), (Value)); }
+
+#define SCSI_READ_TRANSFER_COUNT(ChipAddr, Count) { \
+ ScsiPortWritePortUchar(&((ChipAddr)->InternalAddress), \
+ (UCHAR) &((PSCSI_REGISTERS) 0)->TransferCountMsb); \
+ Count = ScsiPortReadPortUchar(&((ChipAddr)->IoChannel)) << 16; \
+ Count |= ScsiPortReadPortUchar(&((ChipAddr)->IoChannel)) << 8 ; \
+ Count |= ScsiPortReadPortUchar(&((ChipAddr)->IoChannel)); }
+
+#define SCSI_WRITE_TRANSFER_COUNT(ChipAddr, Count) { \
+ SCSI_WRITE(ChipAddr, TransferCountMsb, (UCHAR)(Count >> 16)); \
+ ScsiPortWritePortUchar(&((ChipAddr)->IoChannel), (UCHAR)(Count >> 8)); \
+ ScsiPortWritePortUchar(&((ChipAddr)->IoChannel), (UCHAR)Count); }
+
+#define SCSI_RESET_BUS(DeviceExtension) { CARD_CONTROL CardControl; \
+ *((PUCHAR) &CardControl) = 0; CardControl.ResetScsiBus = 1; \
+ CardControl.SetIrql = DeviceExtension->IrqCode; \
+ CardControl.SetDmaRequest = DeviceExtension->DmaCode; \
+ ScsiPortWritePortUchar(&((DeviceExtension->Adapter)->CardControl), *((PUCHAR) & CardControl)); \
+ ScsiPortStallExecution( 25 ); CardControl.ResetScsiBus = 1; \
+ ScsiPortWritePortUchar(&((DeviceExtension->Adapter)->CardControl), *((PUCHAR) & CardControl)); \
+ }
+
+#define CARD_INITIALIZE(DeviceExtension) { CARD_CONTROL CardControl; \
+ *((PUCHAR) &CardControl) = 0; \
+ CardControl.SetIrql = DeviceExtension->IrqCode; \
+ CardControl.SetDmaRequest = DeviceExtension->DmaCode; \
+ ScsiPortWritePortUchar(&((DeviceExtension->Adapter)->CardControl), \
+ *((PUCHAR) & CardControl)); }
+
+#define CARD_DMA_INITIATE(DeviceExtension, ToDevice) {\
+ SCSI_CONTROL ScsiControl;\
+ CARD_CONTROL CardControl;\
+ *((PUCHAR) &CardControl) = 0;\
+ CardControl.EnableDmaWrite = ToDevice ? 0 : 1;\
+ CardControl.SetIrql = DeviceExtension->IrqCode;\
+ CardControl.SetDmaRequest = DeviceExtension->DmaCode;\
+ ScsiPortWritePortUchar(&((DeviceExtension->Adapter)->CardControl), *((PUCHAR)&CardControl));\
+ ScsiPortWritePortUchar(ToDevice ? &((DeviceExtension->Adapter)->SetReadLogic) : &((DeviceExtension->Adapter)->SetWriteLogic), TRUE);\
+ ScsiPortWritePortUchar(&((DeviceExtension->Adapter)->InternalAddress), (UCHAR)(&(((PSCSI_REGISTERS)0)->Control)));\
+ *((PUCHAR)&ScsiControl) = ScsiPortReadPortUchar(&((DeviceExtension->Adapter)->IoChannel));\
+ ScsiControl.DmaModeSelect = DMA_NORMAL;\
+ ScsiPortWritePortUchar(&((DeviceExtension->Adapter)->InternalAddress), (UCHAR)(&(((PSCSI_REGISTERS)0)->Control)));\
+ ScsiPortWritePortUchar(&((DeviceExtension->Adapter)->IoChannel), *((PUCHAR)&ScsiControl));}
+
+#define CARD_DMA_TERMINATE(DeviceExtension) {\
+ SCSI_CONTROL ScsiControl;\
+ ScsiPortWritePortUchar(&((DeviceExtension->Adapter)->InternalAddress), (UCHAR)(&(((PSCSI_REGISTERS)0)->Control)));\
+ *((PUCHAR)&ScsiControl) = ScsiPortReadPortUchar(&((DeviceExtension->Adapter)->IoChannel));\
+ ScsiControl.DmaModeSelect = DMA_POLLED;\
+ ScsiPortWritePortUchar(&((DeviceExtension->Adapter)->InternalAddress), (UCHAR)(&(((PSCSI_REGISTERS)0)->Control)));\
+ ScsiPortWritePortUchar(&((DeviceExtension->Adapter)->IoChannel), *((PUCHAR)&ScsiControl));}
+
+//
+// Define SCSI host adapter card configuration parameters.
+//
+
+#ifdef SCSI_VECTOR
+#undef SCSI_VECTOR
+#endif
+
+#ifdef SCSI_LEVEL
+#undef SCSI_LEVEL
+#endif
+
+#ifdef SCSI_PHYSICAL_BASE
+#undef SCSI_PHYSICAL_BASE
+#endif
+
+//
+// Define for EISA card using interrupt request level of 10.
+//
+
+#define SCSI_LEVEL 10
+#define SCSI_VECTOR 0
+#define SCSI_BUS_INTERFACE Isa
+
+//
+// Define EISA DMA channel request level of 6.
+//
+
+#define CARD_DMA_REQUEST 6
+#define CARD_DMA_WIDTH Width16Bits;
+#define CARD_DMA_SPEED TypeA;
+
+//
+// Define the default physical base address for SCSI protocol card.
+//
+
+#define SCSI_PHYSICAL_BASE 0x360
+#define SCSI_SECOND_PHYSICAL_BASE 0x370
+
+#endif
+