]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/Include/IndustryStandard/FusionMptScsi.h
OvmfPkg/MptScsiDxe: Initialize hardware
[mirror_edk2.git] / OvmfPkg / Include / IndustryStandard / FusionMptScsi.h
index df9bdc2f0348cb50f3db7100b7136711a1c893b9..655d629d902e3c9041a3100ecd36372ebaa75765 100644 (file)
 #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