// Device offsets and constants\r
//\r
\r
-#define PCI_VENDOR_ID_VMWARE (0x15ad)\r
-#define PCI_DEVICE_ID_VMWARE_PVSCSI (0x07c0)\r
+#define PCI_VENDOR_ID_VMWARE (0x15ad)\r
+#define PCI_DEVICE_ID_VMWARE_PVSCSI (0x07c0)\r
\r
//\r
// CDB (Command Descriptor Block) with size above this constant\r
// should be considered out-of-band\r
//\r
-#define PVSCSI_CDB_MAX_SIZE (16)\r
+#define PVSCSI_CDB_MAX_SIZE (16)\r
\r
typedef enum {\r
- PvScsiRegOffsetCommand = 0x0,\r
- PvScsiRegOffsetCommandData = 0x4,\r
- PvScsiRegOffsetCommandStatus = 0x8,\r
- PvScsiRegOffsetLastSts0 = 0x100,\r
- PvScsiRegOffsetLastSts1 = 0x104,\r
- PvScsiRegOffsetLastSts2 = 0x108,\r
- PvScsiRegOffsetLastSts3 = 0x10c,\r
- PvScsiRegOffsetIntrStatus = 0x100c,\r
- PvScsiRegOffsetIntrMask = 0x2010,\r
- PvScsiRegOffsetKickNonRwIo = 0x3014,\r
- PvScsiRegOffsetDebug = 0x3018,\r
- PvScsiRegOffsetKickRwIo = 0x4018,\r
+ PvScsiRegOffsetCommand = 0x0,\r
+ PvScsiRegOffsetCommandData = 0x4,\r
+ PvScsiRegOffsetCommandStatus = 0x8,\r
+ PvScsiRegOffsetLastSts0 = 0x100,\r
+ PvScsiRegOffsetLastSts1 = 0x104,\r
+ PvScsiRegOffsetLastSts2 = 0x108,\r
+ PvScsiRegOffsetLastSts3 = 0x10c,\r
+ PvScsiRegOffsetIntrStatus = 0x100c,\r
+ PvScsiRegOffsetIntrMask = 0x2010,\r
+ PvScsiRegOffsetKickNonRwIo = 0x3014,\r
+ PvScsiRegOffsetDebug = 0x3018,\r
+ PvScsiRegOffsetKickRwIo = 0x4018,\r
} PVSCSI_BAR0_OFFSETS;\r
\r
//\r
// Define Interrupt-Status register flags\r
//\r
-#define PVSCSI_INTR_CMPL_0 BIT0\r
-#define PVSCSI_INTR_CMPL_1 BIT1\r
-#define PVSCSI_INTR_CMPL_MASK (PVSCSI_INTR_CMPL_0 | PVSCSI_INTR_CMPL_1)\r
+#define PVSCSI_INTR_CMPL_0 BIT0\r
+#define PVSCSI_INTR_CMPL_1 BIT1\r
+#define PVSCSI_INTR_CMPL_MASK (PVSCSI_INTR_CMPL_0 | PVSCSI_INTR_CMPL_1)\r
\r
typedef enum {\r
- PvScsiCmdFirst = 0,\r
- PvScsiCmdAdapterReset = 1,\r
- PvScsiCmdIssueScsi = 2,\r
- PvScsiCmdSetupRings = 3,\r
- PvScsiCmdResetBus = 4,\r
- PvScsiCmdResetDevice = 5,\r
- PvScsiCmdAbortCmd = 6,\r
- PvScsiCmdConfig = 7,\r
- PvScsiCmdSetupMsgRing = 8,\r
- PvScsiCmdDeviceUnplug = 9,\r
- PvScsiCmdLast = 10\r
+ PvScsiCmdFirst = 0,\r
+ PvScsiCmdAdapterReset = 1,\r
+ PvScsiCmdIssueScsi = 2,\r
+ PvScsiCmdSetupRings = 3,\r
+ PvScsiCmdResetBus = 4,\r
+ PvScsiCmdResetDevice = 5,\r
+ PvScsiCmdAbortCmd = 6,\r
+ PvScsiCmdConfig = 7,\r
+ PvScsiCmdSetupMsgRing = 8,\r
+ PvScsiCmdDeviceUnplug = 9,\r
+ PvScsiCmdLast = 10\r
} PVSCSI_COMMANDS;\r
\r
-#define PVSCSI_SETUP_RINGS_MAX_NUM_PAGES (32)\r
+#define PVSCSI_SETUP_RINGS_MAX_NUM_PAGES (32)\r
\r
#pragma pack (1)\r
typedef struct {\r
- UINT32 ReqRingNumPages;\r
- UINT32 CmpRingNumPages;\r
- UINT64 RingsStatePPN;\r
- UINT64 ReqRingPPNs[PVSCSI_SETUP_RINGS_MAX_NUM_PAGES];\r
- UINT64 CmpRingPPNs[PVSCSI_SETUP_RINGS_MAX_NUM_PAGES];\r
+ UINT32 ReqRingNumPages;\r
+ UINT32 CmpRingNumPages;\r
+ UINT64 RingsStatePPN;\r
+ UINT64 ReqRingPPNs[PVSCSI_SETUP_RINGS_MAX_NUM_PAGES];\r
+ UINT64 CmpRingPPNs[PVSCSI_SETUP_RINGS_MAX_NUM_PAGES];\r
} PVSCSI_CMD_DESC_SETUP_RINGS;\r
#pragma pack ()\r
\r
\r
#pragma pack (1)\r
typedef struct {\r
- UINT32 ReqProdIdx;\r
- UINT32 ReqConsIdx;\r
- UINT32 ReqNumEntriesLog2;\r
+ UINT32 ReqProdIdx;\r
+ UINT32 ReqConsIdx;\r
+ UINT32 ReqNumEntriesLog2;\r
\r
- UINT32 CmpProdIdx;\r
- UINT32 CmpConsIdx;\r
- UINT32 CmpNumEntriesLog2;\r
+ UINT32 CmpProdIdx;\r
+ UINT32 CmpConsIdx;\r
+ UINT32 CmpNumEntriesLog2;\r
\r
- UINT8 Pad[104];\r
+ UINT8 Pad[104];\r
\r
- UINT32 MsgProdIdx;\r
- UINT32 MsgConsIdx;\r
- UINT32 MsgNumEntriesLog2;\r
+ UINT32 MsgProdIdx;\r
+ UINT32 MsgConsIdx;\r
+ UINT32 MsgNumEntriesLog2;\r
} PVSCSI_RINGS_STATE;\r
#pragma pack ()\r
\r
//\r
// Define PVSCSI request descriptor tags\r
//\r
-#define PVSCSI_SIMPLE_QUEUE_TAG (0x20)\r
+#define PVSCSI_SIMPLE_QUEUE_TAG (0x20)\r
\r
//\r
// Define PVSCSI request descriptor flags\r
//\r
-#define PVSCSI_FLAG_CMD_WITH_SG_LIST BIT0\r
-#define PVSCSI_FLAG_CMD_OUT_OF_BAND_CDB BIT1\r
-#define PVSCSI_FLAG_CMD_DIR_NONE BIT2\r
-#define PVSCSI_FLAG_CMD_DIR_TOHOST BIT3\r
-#define PVSCSI_FLAG_CMD_DIR_TODEVICE BIT4\r
+#define PVSCSI_FLAG_CMD_WITH_SG_LIST BIT0\r
+#define PVSCSI_FLAG_CMD_OUT_OF_BAND_CDB BIT1\r
+#define PVSCSI_FLAG_CMD_DIR_NONE BIT2\r
+#define PVSCSI_FLAG_CMD_DIR_TOHOST BIT3\r
+#define PVSCSI_FLAG_CMD_DIR_TODEVICE BIT4\r
\r
#pragma pack (1)\r
typedef struct {\r
- UINT64 Context;\r
- UINT64 DataAddr;\r
- UINT64 DataLen;\r
- UINT64 SenseAddr;\r
- UINT32 SenseLen;\r
- UINT32 Flags;\r
- UINT8 Cdb[16];\r
- UINT8 CdbLen;\r
- UINT8 Lun[8];\r
- UINT8 Tag;\r
- UINT8 Bus;\r
- UINT8 Target;\r
- UINT8 VcpuHint;\r
- UINT8 Unused[59];\r
+ UINT64 Context;\r
+ UINT64 DataAddr;\r
+ UINT64 DataLen;\r
+ UINT64 SenseAddr;\r
+ UINT32 SenseLen;\r
+ UINT32 Flags;\r
+ UINT8 Cdb[16];\r
+ UINT8 CdbLen;\r
+ UINT8 Lun[8];\r
+ UINT8 Tag;\r
+ UINT8 Bus;\r
+ UINT8 Target;\r
+ UINT8 VcpuHint;\r
+ UINT8 Unused[59];\r
} PVSCSI_RING_REQ_DESC;\r
#pragma pack ()\r
\r
// Host adapter status/error codes\r
//\r
typedef enum {\r
- PvScsiBtStatSuccess = 0x00, // CCB complete normally with no errors\r
+ PvScsiBtStatSuccess = 0x00, // CCB complete normally with no errors\r
PvScsiBtStatLinkedCommandCompleted = 0x0a,\r
PvScsiBtStatLinkedCommandCompletedWithFlag = 0x0b,\r
- PvScsiBtStatDataUnderrun = 0x0c,\r
- PvScsiBtStatSelTimeout = 0x11, // SCSI selection timeout\r
- PvScsiBtStatDatarun = 0x12, // Data overrun/underrun\r
- PvScsiBtStatBusFree = 0x13, // Unexpected bus free\r
- PvScsiBtStatInvPhase = 0x14, //\r
- // Invalid bus phase or sequence requested\r
- // by target\r
- //\r
- PvScsiBtStatLunMismatch = 0x17, //\r
- // Linked CCB has different LUN from first\r
- // CCB\r
- //\r
- PvScsiBtStatSensFailed = 0x1b, // Auto request sense failed\r
- PvScsiBtStatTagReject = 0x1c, //\r
- // SCSI II tagged queueing message rejected\r
- // by target\r
- //\r
- PvScsiBtStatBadMsg = 0x1d, //\r
- // Unsupported message received by the host\r
- // adapter\r
- //\r
- PvScsiBtStatHaHardware = 0x20, // Host adapter hardware failed\r
- PvScsiBtStatNoResponse = 0x21, //\r
- // Target did not respond to SCSI ATN sent\r
- // a SCSI RST\r
- //\r
- PvScsiBtStatSentRst = 0x22, // Host adapter asserted a SCSI RST\r
- PvScsiBtStatRecvRst = 0x23, // Other SCSI devices asserted a SCSI RST\r
- PvScsiBtStatDisconnect = 0x24, //\r
- // Target device reconnected improperly\r
- // (w/o tag)\r
- //\r
- PvScsiBtStatBusReset = 0x25, // Host adapter issued BUS device reset\r
- PvScsiBtStatAbortQueue = 0x26, // Abort queue generated\r
- PvScsiBtStatHaSoftware = 0x27, // Host adapter software error\r
- PvScsiBtStatHaTimeout = 0x30, // Host adapter hardware timeout error\r
- PvScsiBtStatScsiParity = 0x34, // SCSI parity error detected\r
+ PvScsiBtStatDataUnderrun = 0x0c,\r
+ PvScsiBtStatSelTimeout = 0x11, // SCSI selection timeout\r
+ PvScsiBtStatDatarun = 0x12, // Data overrun/underrun\r
+ PvScsiBtStatBusFree = 0x13, // Unexpected bus free\r
+ PvScsiBtStatInvPhase = 0x14, //\r
+ // Invalid bus phase or sequence requested\r
+ // by target\r
+ //\r
+ PvScsiBtStatLunMismatch = 0x17, //\r
+ // Linked CCB has different LUN from first\r
+ // CCB\r
+ //\r
+ PvScsiBtStatSensFailed = 0x1b, // Auto request sense failed\r
+ PvScsiBtStatTagReject = 0x1c, //\r
+ // SCSI II tagged queueing message rejected\r
+ // by target\r
+ //\r
+ PvScsiBtStatBadMsg = 0x1d, //\r
+ // Unsupported message received by the host\r
+ // adapter\r
+ //\r
+ PvScsiBtStatHaHardware = 0x20, // Host adapter hardware failed\r
+ PvScsiBtStatNoResponse = 0x21, //\r
+ // Target did not respond to SCSI ATN sent\r
+ // a SCSI RST\r
+ //\r
+ PvScsiBtStatSentRst = 0x22, // Host adapter asserted a SCSI RST\r
+ PvScsiBtStatRecvRst = 0x23, // Other SCSI devices asserted a SCSI RST\r
+ PvScsiBtStatDisconnect = 0x24, //\r
+ // Target device reconnected improperly\r
+ // (w/o tag)\r
+ //\r
+ PvScsiBtStatBusReset = 0x25, // Host adapter issued BUS device reset\r
+ PvScsiBtStatAbortQueue = 0x26, // Abort queue generated\r
+ PvScsiBtStatHaSoftware = 0x27, // Host adapter software error\r
+ PvScsiBtStatHaTimeout = 0x30, // Host adapter hardware timeout error\r
+ PvScsiBtStatScsiParity = 0x34, // SCSI parity error detected\r
} PVSCSI_HOST_BUS_ADAPTER_STATUS;\r
\r
#pragma pack (1)\r
typedef struct {\r
- UINT64 Context;\r
- UINT64 DataLen;\r
- UINT32 SenseLen;\r
- UINT16 HostStatus;\r
- UINT16 ScsiStatus;\r
- UINT32 Pad[2];\r
+ UINT64 Context;\r
+ UINT64 DataLen;\r
+ UINT32 SenseLen;\r
+ UINT16 HostStatus;\r
+ UINT16 ScsiStatus;\r
+ UINT32 Pad[2];\r
} PVSCSI_RING_CMP_DESC;\r
#pragma pack ()\r
\r