patch-2.2.15 linux/drivers/block/DAC960.h
Next file: linux/drivers/block/Makefile
Previous file: linux/drivers/block/DAC960.c
Back to the patch index
Back to the overall index
- Lines: 382
- Date:
Fri Apr 21 12:45:50 2000
- Orig file:
v2.2.14/drivers/block/DAC960.h
- Orig date:
Sat Aug 28 20:00:54 1999
diff -u --new-file --recursive --exclude-from ../../exclude v2.2.14/drivers/block/DAC960.h linux/drivers/block/DAC960.h
@@ -55,17 +55,17 @@
/*
- Define a 32 bit I/O Address data type.
+ Define a 32/64 bit I/O Address data type.
*/
-typedef unsigned int DAC960_IO_Address_T;
+typedef unsigned long DAC960_IO_Address_T;
/*
- Define a 32 bit PCI Bus Address data type.
+ Define a 32/64 bit PCI Bus Address data type.
*/
-typedef unsigned int DAC960_PCI_Address_T;
+typedef unsigned long DAC960_PCI_Address_T;
/*
@@ -196,6 +196,7 @@
#define DAC960_RebuildFailed_BadBlocksOnOther 0x0003 /* Consistency */
#define DAC960_RebuildFailed_NewDriveFailed 0x0004 /* Consistency */
#define DAC960_RebuildSuccessful 0x0100 /* Consistency */
+#define DAC960_RebuildSuccessfullyTerminated 0x0107 /* Consistency */
#define DAC960_AddCapacityInProgress 0x0004 /* Consistency */
#define DAC960_AddCapacityFailedOrSuspended 0x00F4 /* Consistency */
#define DAC960_Config2ChecksumError 0x0002 /* Configuration */
@@ -513,7 +514,7 @@
unsigned char SynchronousMultiplier; /* Byte 4 */
unsigned char SynchronousOffset:5; /* Byte 5 Bits 0-4 */
unsigned char :3; /* Byte 5 Bits 5-7 */
- unsigned long DiskSize __attribute__ ((packed)); /* Bytes 6-9 */
+ unsigned int DiskSize __attribute__ ((packed)); /* Bytes 6-9 */
}
DAC960_DeviceState_T;
@@ -1212,6 +1213,7 @@
unsigned char LogicalDriveCount;
unsigned char GeometryTranslationHeads;
unsigned char GeometryTranslationSectors;
+ unsigned char PendingRebuildFlag;
unsigned short ControllerQueueDepth;
unsigned short DriverQueueDepth;
unsigned short MaxBlocksPerCommand;
@@ -1247,6 +1249,9 @@
boolean NeedRebuildProgress;
boolean NeedConsistencyCheckProgress;
boolean EphemeralProgressMessage;
+ boolean RebuildFlagPending;
+ boolean RebuildStatusPending;
+ boolean DriveSpinUpMessageDisplayed;
Timer_T MonitoringTimer;
GenericDiskInfo_T GenericDiskInfo;
DAC960_Command_T *FreeCommands;
@@ -1269,6 +1274,7 @@
DAC960_EventLogEntry_T EventLogEntry;
DAC960_RebuildProgress_T RebuildProgress;
DAC960_CommandStatus_T LastRebuildStatus;
+ DAC960_CommandStatus_T PendingRebuildStatus;
DAC960_LogicalDriveInformation_T
LogicalDriveInformation[2][DAC960_MaxLogicalDrives];
DAC960_LogicalDriveState_T LogicalDriveInitialState[DAC960_MaxLogicalDrives];
@@ -1393,7 +1399,8 @@
DAC960_V5_MailboxRegister11Offset = 0x5B,
DAC960_V5_MailboxRegister12Offset = 0x5C,
DAC960_V5_StatusCommandIdentifierRegOffset = 0x5D,
- DAC960_V5_StatusRegisterOffset = 0x5E
+ DAC960_V5_StatusRegisterOffset = 0x5E,
+ DAC960_V5_ErrorStatusRegisterOffset = 0x63
}
DAC960_V5_RegisterOffsets_T;
@@ -1415,7 +1422,8 @@
} Write;
struct {
boolean HardwareMailboxEmpty:1; /* Bit 0 */
- unsigned char :7; /* Bits 1-7 */
+ boolean InitializationNotInProgress:1; /* Bit 1 */
+ unsigned char :6; /* Bits 2-7 */
} Read;
}
DAC960_V5_InboundDoorBellRegister_T;
@@ -1459,6 +1467,22 @@
/*
+ Define the structure of the DAC960 V5 Error Status Register.
+*/
+
+typedef union DAC960_V5_ErrorStatusRegister
+{
+ unsigned char All;
+ struct {
+ unsigned int :2; /* Bits 0-1 */
+ boolean ErrorStatusPending:1; /* Bit 2 */
+ unsigned int :5; /* Bits 3-7 */
+ } Bits;
+}
+DAC960_V5_ErrorStatusRegister_T;
+
+
+/*
Define inline functions to provide an abstraction for reading and writing the
DAC960 V5 Controller Interface Registers.
*/
@@ -1514,12 +1538,21 @@
}
static inline
-boolean DAC960_V5_HardwareMailboxEmptyP(void *ControllerBaseAddress)
+boolean DAC960_V5_HardwareMailboxFullP(void *ControllerBaseAddress)
{
DAC960_V5_InboundDoorBellRegister_T InboundDoorBellRegister;
InboundDoorBellRegister.All =
readb(ControllerBaseAddress + DAC960_V5_InboundDoorBellRegisterOffset);
- return InboundDoorBellRegister.Read.HardwareMailboxEmpty;
+ return !InboundDoorBellRegister.Read.HardwareMailboxEmpty;
+}
+
+static inline
+boolean DAC960_V5_InitializationInProgressP(void *ControllerBaseAddress)
+{
+ DAC960_V5_InboundDoorBellRegister_T InboundDoorBellRegister;
+ InboundDoorBellRegister.All =
+ readb(ControllerBaseAddress + DAC960_V5_InboundDoorBellRegisterOffset);
+ return !InboundDoorBellRegister.Read.InitializationNotInProgress;
}
static inline
@@ -1575,7 +1608,7 @@
void DAC960_V5_EnableInterrupts(void *ControllerBaseAddress)
{
DAC960_V5_InterruptMaskRegister_T InterruptMaskRegister;
- InterruptMaskRegister.All = 0;
+ InterruptMaskRegister.All = 0xFF;
InterruptMaskRegister.Bits.DisableInterrupts = false;
writeb(InterruptMaskRegister.All,
ControllerBaseAddress + DAC960_V5_InterruptMaskRegisterOffset);
@@ -1585,7 +1618,7 @@
void DAC960_V5_DisableInterrupts(void *ControllerBaseAddress)
{
DAC960_V5_InterruptMaskRegister_T InterruptMaskRegister;
- InterruptMaskRegister.All = 0;
+ InterruptMaskRegister.All = 0xFF;
InterruptMaskRegister.Bits.DisableInterrupts = true;
writeb(InterruptMaskRegister.All,
ControllerBaseAddress + DAC960_V5_InterruptMaskRegisterOffset);
@@ -1607,7 +1640,9 @@
NextCommandMailbox->Words[1] = CommandMailbox->Words[1];
NextCommandMailbox->Words[2] = CommandMailbox->Words[2];
NextCommandMailbox->Words[3] = CommandMailbox->Words[3];
+ wmb();
NextCommandMailbox->Words[0] = CommandMailbox->Words[0];
+ mb();
}
static inline
@@ -1637,6 +1672,26 @@
return readw(ControllerBaseAddress + DAC960_V5_StatusRegisterOffset);
}
+static inline boolean
+DAC960_V5_ReadErrorStatus(void *ControllerBaseAddress,
+ unsigned char *ErrorStatus,
+ unsigned char *Parameter0,
+ unsigned char *Parameter1)
+{
+ DAC960_V5_ErrorStatusRegister_T ErrorStatusRegister;
+ ErrorStatusRegister.All =
+ readb(ControllerBaseAddress + DAC960_V5_ErrorStatusRegisterOffset);
+ if (!ErrorStatusRegister.Bits.ErrorStatusPending) return false;
+ ErrorStatusRegister.Bits.ErrorStatusPending = false;
+ *ErrorStatus = ErrorStatusRegister.All;
+ *Parameter0 =
+ readb(ControllerBaseAddress + DAC960_V5_CommandOpcodeRegisterOffset);
+ *Parameter1 =
+ readb(ControllerBaseAddress + DAC960_V5_CommandIdentifierRegisterOffset);
+ writeb(0xFF, ControllerBaseAddress + DAC960_V5_ErrorStatusRegisterOffset);
+ return true;
+}
+
static inline
void DAC960_V5_SaveMemoryMailboxInfo(DAC960_Controller_T *Controller)
{
@@ -1695,7 +1750,8 @@
DAC960_V4_MailboxRegister11Offset = 0x100B,
DAC960_V4_MailboxRegister12Offset = 0x100C,
DAC960_V4_StatusCommandIdentifierRegOffset = 0x1018,
- DAC960_V4_StatusRegisterOffset = 0x101A
+ DAC960_V4_StatusRegisterOffset = 0x101A,
+ DAC960_V4_ErrorStatusRegisterOffset = 0x103F
}
DAC960_V4_RegisterOffsets_T;
@@ -1717,7 +1773,8 @@
} Write;
struct {
boolean HardwareMailboxFull:1; /* Bit 0 */
- unsigned int :31; /* Bits 1-31 */
+ boolean InitializationInProgress:1; /* Bit 1 */
+ unsigned int :30; /* Bits 2-31 */
} Read;
}
DAC960_V4_InboundDoorBellRegister_T;
@@ -1762,6 +1819,22 @@
/*
+ Define the structure of the DAC960 V4 Error Status Register.
+*/
+
+typedef union DAC960_V4_ErrorStatusRegister
+{
+ unsigned char All;
+ struct {
+ unsigned int :2; /* Bits 0-1 */
+ boolean ErrorStatusPending:1; /* Bit 2 */
+ unsigned int :5; /* Bits 3-7 */
+ } Bits;
+}
+DAC960_V4_ErrorStatusRegister_T;
+
+
+/*
Define inline functions to provide an abstraction for reading and writing the
DAC960 V4 Controller Interface Registers.
*/
@@ -1826,6 +1899,15 @@
}
static inline
+boolean DAC960_V4_InitializationInProgressP(void *ControllerBaseAddress)
+{
+ DAC960_V4_InboundDoorBellRegister_T InboundDoorBellRegister;
+ InboundDoorBellRegister.All =
+ readl(ControllerBaseAddress + DAC960_V4_InboundDoorBellRegisterOffset);
+ return InboundDoorBellRegister.Read.InitializationInProgress;
+}
+
+static inline
void DAC960_V4_AcknowledgeHardwareMailboxInterrupt(void *ControllerBaseAddress)
{
DAC960_V4_OutboundDoorBellRegister_T OutboundDoorBellRegister;
@@ -1914,7 +1996,9 @@
NextCommandMailbox->Words[1] = CommandMailbox->Words[1];
NextCommandMailbox->Words[2] = CommandMailbox->Words[2];
NextCommandMailbox->Words[3] = CommandMailbox->Words[3];
+ wmb();
NextCommandMailbox->Words[0] = CommandMailbox->Words[0];
+ mb();
}
static inline
@@ -1944,11 +2028,31 @@
return readw(ControllerBaseAddress + DAC960_V4_StatusRegisterOffset);
}
+static inline boolean
+DAC960_V4_ReadErrorStatus(void *ControllerBaseAddress,
+ unsigned char *ErrorStatus,
+ unsigned char *Parameter0,
+ unsigned char *Parameter1)
+{
+ DAC960_V4_ErrorStatusRegister_T ErrorStatusRegister;
+ ErrorStatusRegister.All =
+ readb(ControllerBaseAddress + DAC960_V4_ErrorStatusRegisterOffset);
+ if (!ErrorStatusRegister.Bits.ErrorStatusPending) return false;
+ ErrorStatusRegister.Bits.ErrorStatusPending = false;
+ *ErrorStatus = ErrorStatusRegister.All;
+ *Parameter0 =
+ readb(ControllerBaseAddress + DAC960_V4_CommandOpcodeRegisterOffset);
+ *Parameter1 =
+ readb(ControllerBaseAddress + DAC960_V4_CommandIdentifierRegisterOffset);
+ writeb(0, ControllerBaseAddress + DAC960_V4_ErrorStatusRegisterOffset);
+ return true;
+}
+
static inline
void DAC960_V4_SaveMemoryMailboxInfo(DAC960_Controller_T *Controller)
{
void *ControllerBaseAddress = Controller->BaseAddress;
- writel(0xAABBFFFF,
+ writel(0x743C485E,
ControllerBaseAddress + DAC960_V4_CommandOpcodeRegisterOffset);
writel((unsigned long) Controller->FirstCommandMailbox,
ControllerBaseAddress + DAC960_V4_MailboxRegister4Offset);
@@ -1966,7 +2070,7 @@
{
void *ControllerBaseAddress = Controller->BaseAddress;
if (readl(ControllerBaseAddress
- + DAC960_V4_CommandOpcodeRegisterOffset) != 0xAABBFFFF)
+ + DAC960_V4_CommandOpcodeRegisterOffset) != 0x743C485E)
return;
*MemoryMailboxAddress =
(void *) readl(ControllerBaseAddress + DAC960_V4_MailboxRegister4Offset);
@@ -2000,6 +2104,7 @@
DAC960_V3_MailboxRegister12Offset = 0x0C,
DAC960_V3_StatusCommandIdentifierRegOffset = 0x0D,
DAC960_V3_StatusRegisterOffset = 0x0E,
+ DAC960_V3_ErrorStatusRegisterOffset = 0x3F,
DAC960_V3_InboundDoorBellRegisterOffset = 0x40,
DAC960_V3_OutboundDoorBellRegisterOffset = 0x41,
DAC960_V3_InterruptEnableRegisterOffset = 0x43
@@ -2023,7 +2128,8 @@
} Write;
struct {
boolean MailboxFull:1; /* Bit 0 */
- unsigned char :7; /* Bits 1-7 */
+ boolean InitializationInProgress:1; /* Bit 1 */
+ unsigned char :6; /* Bits 2-7 */
} Read;
}
DAC960_V3_InboundDoorBellRegister_T;
@@ -2064,6 +2170,22 @@
/*
+ Define the structure of the DAC960 V3 Error Status Register.
+*/
+
+typedef union DAC960_V3_ErrorStatusRegister
+{
+ unsigned char All;
+ struct {
+ unsigned int :2; /* Bits 0-1 */
+ boolean ErrorStatusPending:1; /* Bit 2 */
+ unsigned int :5; /* Bits 3-7 */
+ } Bits;
+}
+DAC960_V3_ErrorStatusRegister_T;
+
+
+/*
Define inline functions to provide an abstraction for reading and writing the
DAC960 V3 Controller Interface Registers.
*/
@@ -2118,6 +2240,15 @@
}
static inline
+boolean DAC960_V3_InitializationInProgressP(void *ControllerBaseAddress)
+{
+ DAC960_V3_InboundDoorBellRegister_T InboundDoorBellRegister;
+ InboundDoorBellRegister.All =
+ readb(ControllerBaseAddress + DAC960_V3_InboundDoorBellRegisterOffset);
+ return InboundDoorBellRegister.Read.InitializationInProgress;
+}
+
+static inline
void DAC960_V3_AcknowledgeInterrupt(void *ControllerBaseAddress)
{
DAC960_V3_OutboundDoorBellRegister_T OutboundDoorBellRegister;
@@ -2190,6 +2321,26 @@
DAC960_V3_ReadStatusRegister(void *ControllerBaseAddress)
{
return readw(ControllerBaseAddress + DAC960_V3_StatusRegisterOffset);
+}
+
+static inline boolean
+DAC960_V3_ReadErrorStatus(void *ControllerBaseAddress,
+ unsigned char *ErrorStatus,
+ unsigned char *Parameter0,
+ unsigned char *Parameter1)
+{
+ DAC960_V3_ErrorStatusRegister_T ErrorStatusRegister;
+ ErrorStatusRegister.All =
+ readb(ControllerBaseAddress + DAC960_V3_ErrorStatusRegisterOffset);
+ if (!ErrorStatusRegister.Bits.ErrorStatusPending) return false;
+ ErrorStatusRegister.Bits.ErrorStatusPending = false;
+ *ErrorStatus = ErrorStatusRegister.All;
+ *Parameter0 =
+ readb(ControllerBaseAddress + DAC960_V3_CommandOpcodeRegisterOffset);
+ *Parameter1 =
+ readb(ControllerBaseAddress + DAC960_V3_CommandIdentifierRegisterOffset);
+ writeb(0, ControllerBaseAddress + DAC960_V3_ErrorStatusRegisterOffset);
+ return true;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)