3 VMware PVSCSI Device specific type and macro definitions.
5 Copyright (C) 2020, Oracle and/or its affiliates.
7 SPDX-License-Identifier: BSD-2-Clause-Patent
15 // Device offsets and constants
18 #define PCI_VENDOR_ID_VMWARE (0x15ad)
19 #define PCI_DEVICE_ID_VMWARE_PVSCSI (0x07c0)
22 // CDB (Command Descriptor Block) with size above this constant
23 // should be considered out-of-band
25 #define PVSCSI_CDB_MAX_SIZE (16)
28 PvScsiRegOffsetCommand
= 0x0,
29 PvScsiRegOffsetCommandData
= 0x4,
30 PvScsiRegOffsetCommandStatus
= 0x8,
31 PvScsiRegOffsetLastSts0
= 0x100,
32 PvScsiRegOffsetLastSts1
= 0x104,
33 PvScsiRegOffsetLastSts2
= 0x108,
34 PvScsiRegOffsetLastSts3
= 0x10c,
35 PvScsiRegOffsetIntrStatus
= 0x100c,
36 PvScsiRegOffsetIntrMask
= 0x2010,
37 PvScsiRegOffsetKickNonRwIo
= 0x3014,
38 PvScsiRegOffsetDebug
= 0x3018,
39 PvScsiRegOffsetKickRwIo
= 0x4018,
40 } PVSCSI_BAR0_OFFSETS
;
43 // Define Interrupt-Status register flags
45 #define PVSCSI_INTR_CMPL_0 BIT0
46 #define PVSCSI_INTR_CMPL_1 BIT1
47 #define PVSCSI_INTR_CMPL_MASK (PVSCSI_INTR_CMPL_0 | PVSCSI_INTR_CMPL_1)
51 PvScsiCmdAdapterReset
= 1,
52 PvScsiCmdIssueScsi
= 2,
53 PvScsiCmdSetupRings
= 3,
54 PvScsiCmdResetBus
= 4,
55 PvScsiCmdResetDevice
= 5,
56 PvScsiCmdAbortCmd
= 6,
58 PvScsiCmdSetupMsgRing
= 8,
59 PvScsiCmdDeviceUnplug
= 9,
63 #define PVSCSI_SETUP_RINGS_MAX_NUM_PAGES (32)
67 UINT32 ReqRingNumPages
;
68 UINT32 CmpRingNumPages
;
70 UINT64 ReqRingPPNs
[PVSCSI_SETUP_RINGS_MAX_NUM_PAGES
];
71 UINT64 CmpRingPPNs
[PVSCSI_SETUP_RINGS_MAX_NUM_PAGES
];
72 } PVSCSI_CMD_DESC_SETUP_RINGS
;
75 #define PVSCSI_MAX_CMD_DATA_WORDS \
76 (sizeof (PVSCSI_CMD_DESC_SETUP_RINGS) / sizeof (UINT32))
82 UINT32 ReqNumEntriesLog2
;
86 UINT32 CmpNumEntriesLog2
;
92 UINT32 MsgNumEntriesLog2
;
97 // Define PVSCSI request descriptor tags
99 #define PVSCSI_SIMPLE_QUEUE_TAG (0x20)
102 // Define PVSCSI request descriptor flags
104 #define PVSCSI_FLAG_CMD_WITH_SG_LIST BIT0
105 #define PVSCSI_FLAG_CMD_OUT_OF_BAND_CDB BIT1
106 #define PVSCSI_FLAG_CMD_DIR_NONE BIT2
107 #define PVSCSI_FLAG_CMD_DIR_TOHOST BIT3
108 #define PVSCSI_FLAG_CMD_DIR_TODEVICE BIT4
126 } PVSCSI_RING_REQ_DESC
;
130 // Host adapter status/error codes
133 PvScsiBtStatSuccess
= 0x00, // CCB complete normally with no errors
134 PvScsiBtStatLinkedCommandCompleted
= 0x0a,
135 PvScsiBtStatLinkedCommandCompletedWithFlag
= 0x0b,
136 PvScsiBtStatDataUnderrun
= 0x0c,
137 PvScsiBtStatSelTimeout
= 0x11, // SCSI selection timeout
138 PvScsiBtStatDatarun
= 0x12, // Data overrun/underrun
139 PvScsiBtStatBusFree
= 0x13, // Unexpected bus free
140 PvScsiBtStatInvPhase
= 0x14, //
141 // Invalid bus phase or sequence requested
144 PvScsiBtStatLunMismatch
= 0x17, //
145 // Linked CCB has different LUN from first
148 PvScsiBtStatSensFailed
= 0x1b, // Auto request sense failed
149 PvScsiBtStatTagReject
= 0x1c, //
150 // SCSI II tagged queueing message rejected
153 PvScsiBtStatBadMsg
= 0x1d, //
154 // Unsupported message received by the host
157 PvScsiBtStatHaHardware
= 0x20, // Host adapter hardware failed
158 PvScsiBtStatNoResponse
= 0x21, //
159 // Target did not respond to SCSI ATN sent
162 PvScsiBtStatSentRst
= 0x22, // Host adapter asserted a SCSI RST
163 PvScsiBtStatRecvRst
= 0x23, // Other SCSI devices asserted a SCSI RST
164 PvScsiBtStatDisconnect
= 0x24, //
165 // Target device reconnected improperly
168 PvScsiBtStatBusReset
= 0x25, // Host adapter issued BUS device reset
169 PvScsiBtStatAbortQueue
= 0x26, // Abort queue generated
170 PvScsiBtStatHaSoftware
= 0x27, // Host adapter software error
171 PvScsiBtStatHaTimeout
= 0x30, // Host adapter hardware timeout error
172 PvScsiBtStatScsiParity
= 0x34, // SCSI parity error detected
173 } PVSCSI_HOST_BUS_ADAPTER_STATUS
;
183 } PVSCSI_RING_CMP_DESC
;
186 #endif // __PVSCSI_H_