#define LSI_SAS1068_PCI_DEVICE_ID 0x0054\r
#define LSI_SAS1068E_PCI_DEVICE_ID 0x0058\r
\r
+#define MPT_REG_DOORBELL 0x00\r
+#define MPT_REG_WRITE_SEQ 0x04\r
+#define MPT_REG_HOST_DIAG 0x08\r
+#define MPT_REG_TEST 0x0c\r
+#define MPT_REG_DIAG_DATA 0x10\r
+#define MPT_REG_DIAG_ADDR 0x14\r
+#define MPT_REG_ISTATUS 0x30\r
+#define MPT_REG_IMASK 0x34\r
+#define MPT_REG_REQ_Q 0x40\r
+#define MPT_REG_REP_Q 0x44\r
+\r
+#define MPT_DOORBELL_RESET 0x40\r
+#define MPT_DOORBELL_HANDSHAKE 0x42\r
+\r
+#define MPT_IMASK_DOORBELL 0x01\r
+#define MPT_IMASK_REPLY 0x08\r
+\r
+#define MPT_MESSAGE_HDR_FUNCTION_SCSI_IO_REQUEST 0x00\r
+#define MPT_MESSAGE_HDR_FUNCTION_IOC_INIT 0x02\r
+\r
+#define MPT_SG_ENTRY_TYPE_SIMPLE 0x01\r
+\r
+#define MPT_IOC_WHOINIT_ROM_BIOS 0x02\r
+\r
+//\r
+// Device structures\r
+//\r
+\r
+#pragma pack (1)\r
+typedef struct {\r
+ UINT8 WhoInit;\r
+ UINT8 Reserved1;\r
+ UINT8 ChainOffset;\r
+ UINT8 Function;\r
+ UINT8 Flags;\r
+ UINT8 MaxDevices;\r
+ UINT8 MaxBuses;\r
+ UINT8 MessageFlags;\r
+ UINT32 MessageContext;\r
+ UINT16 ReplyFrameSize;\r
+ UINT16 Reserved2;\r
+ UINT32 HostMfaHighAddr;\r
+ UINT32 SenseBufferHighAddr;\r
+} MPT_IO_CONTROLLER_INIT_REQUEST;\r
+\r
+typedef struct {\r
+ UINT8 WhoInit;\r
+ UINT8 Reserved1;\r
+ UINT8 MessageLength;\r
+ UINT8 Function;\r
+ UINT8 Flags;\r
+ UINT8 MaxDevices;\r
+ UINT8 MaxBuses;\r
+ UINT8 MessageFlags;\r
+ UINT32 MessageContext;\r
+ UINT16 Reserved2;\r
+ UINT16 IocStatus;\r
+ UINT32 IocLogInfo;\r
+} MPT_IO_CONTROLLER_INIT_REPLY;\r
+\r
+typedef struct {\r
+ UINT8 TargetId;\r
+ UINT8 Bus;\r
+ UINT8 ChainOffset;\r
+ UINT8 Function;\r
+ UINT8 CdbLength;\r
+ UINT8 SenseBufferLength;\r
+ UINT8 Reserved;\r
+ UINT8 MessageFlags;\r
+ UINT32 MessageContext;\r
+ UINT8 Lun[8];\r
+ UINT32 Control;\r
+ UINT8 Cdb[16];\r
+ UINT32 DataLength;\r
+ UINT32 SenseBufferLowAddress;\r
+} MPT_SCSI_IO_REQUEST;\r
+\r
+typedef struct {\r
+ UINT32 Length: 24;\r
+ UINT32 EndOfList: 1;\r
+ UINT32 Is64BitAddress: 1;\r
+ //\r
+ // True when the buffer contains data to be transfered. Otherwise it's the\r
+ // destination buffer\r
+ //\r
+ UINT32 BufferContainsData: 1;\r
+ UINT32 LocalAddress: 1;\r
+ UINT32 ElementType: 2;\r
+ UINT32 EndOfBuffer: 1;\r
+ UINT32 LastElement: 1;\r
+ UINT64 DataBufferAddress;\r
+} MPT_SG_ENTRY_SIMPLE;\r
+\r
+typedef struct {\r
+ UINT8 TargetId;\r
+ UINT8 Bus;\r
+ UINT8 MessageLength;\r
+ UINT8 Function;\r
+ UINT8 CdbLength;\r
+ UINT8 SenseBufferLength;\r
+ UINT8 Reserved;\r
+ UINT8 MessageFlags;\r
+ UINT32 MessageContext;\r
+ UINT8 ScsiStatus;\r
+ UINT8 ScsiState;\r
+ UINT16 IocStatus;\r
+ UINT32 IocLogInfo;\r
+ UINT32 TransferCount;\r
+ UINT32 SenseCount;\r
+ UINT32 ResponseInfo;\r
+} MPT_SCSI_IO_REPLY;\r
+\r
+typedef struct {\r
+ MPT_SCSI_IO_REQUEST Header;\r
+ MPT_SG_ENTRY_SIMPLE Sg;\r
+} MPT_SCSI_REQUEST_WITH_SG;\r
+#pragma pack ()\r
+\r
+typedef union {\r
+ MPT_SCSI_IO_REPLY Data;\r
+ UINT64 Uint64; // 8 byte alignment required by HW\r
+} MPT_SCSI_IO_REPLY_ALIGNED;\r
+\r
+typedef union {\r
+ MPT_SCSI_REQUEST_WITH_SG Data;\r
+ UINT64 Uint64; // 8 byte alignment required by HW\r
+} MPT_SCSI_REQUEST_ALIGNED;\r
+\r
#endif // __FUSION_MPT_SCSI_H__\r