ReactOS 0.4.16-dev-2633-g8dc9e50
scsiex.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS ATA Port Driver
3 * LICENSE: MIT (https://spdx.org/licenses/MIT)
4 * PURPOSE: Extra SCSI definitions
5 * COPYRIGHT: Copyright 2026 Dmitry Borisov <di.sean@protonmail.com>
6 */
7
8#pragma once
9
10#include <pshpack1.h>
11
12typedef union _SCSI_SENSE_CODE
13{
14 struct
15 {
20 };
23
25{
33// CommandData = 1
34// SenseKeySpecificValid = 1
35
37
39{
65
67
69{
84
86
87#include <poppack.h>
88
89#define SCSI_ADSENSE_ADDRESS_MARK_NOT_FOUND_FOR_DATA_FIELD 0x13
90
91/* SAT-6 */
99
101UCHAR
103 _In_ PCDB Cdb)
104{
105 return Cdb->CDB6GENERIC.CommandUniqueBytes[2];
106}
107
109USHORT
111 _In_ PCDB Cdb)
112{
113 return (Cdb->CDB10.TransferBlocksMsb << 8) |
114 (Cdb->CDB10.TransferBlocksLsb << 0);
115}
116
118ULONG
120 _In_ PCDB Cdb)
121{
122 return (Cdb->CDB16.TransferLength[0] << 24) |
123 (Cdb->CDB16.TransferLength[1] << 16) |
124 (Cdb->CDB16.TransferLength[2] << 8) |
125 (Cdb->CDB16.TransferLength[3] << 0);
126}
127
129USHORT
131 _In_ PCDB Cdb)
132{
133 /* Bytes 7:8 */
134 return (Cdb->CDB10.TransferBlocksMsb << 8) |
135 (Cdb->CDB10.TransferBlocksLsb << 0);
136}
137
139ULONG
141 _In_ PCDB Cdb)
142{
143 /* Bytes 6:9 */
144 return (Cdb->CDB12.TransferLength[0] << 24) |
145 (Cdb->CDB12.TransferLength[1] << 16) |
146 (Cdb->CDB12.TransferLength[2] << 8) |
147 (Cdb->CDB12.TransferLength[3] << 0);
148}
149
151ULONG
153 _In_ PCDB Cdb)
154{
155 /* Bytes 10:13 */
156 return (Cdb->CDB16.TransferLength[0] << 24) |
157 (Cdb->CDB16.TransferLength[1] << 16) |
158 (Cdb->CDB16.TransferLength[2] << 8) |
159 (Cdb->CDB16.TransferLength[3] << 0);
160}
161
163ULONG
165 _In_ PCDB Cdb)
166{
167 /* Bytes 2:3 */
168 return (Cdb->CDB6READWRITE.LogicalBlockMsb0 << 8) |
169 (Cdb->CDB6READWRITE.LogicalBlockLsb << 0);
170}
171
173ULONG
175 _In_ PCDB Cdb)
176{
177 /* Bytes 2:5 */
178 return (Cdb->CDB10.LogicalBlockByte0 << 24) |
179 (Cdb->CDB10.LogicalBlockByte1 << 16) |
180 (Cdb->CDB10.LogicalBlockByte2 << 8) |
181 (Cdb->CDB10.LogicalBlockByte3 << 0);
182}
183
185ULONG
187 _In_ PCDB Cdb)
188{
189 /* Bytes 2:5 */
190 return (Cdb->CDB12.LogicalBlock[0] << 24) |
191 (Cdb->CDB12.LogicalBlock[1] << 16) |
192 (Cdb->CDB12.LogicalBlock[2] << 8) |
193 (Cdb->CDB12.LogicalBlock[3] << 0);
194}
195
199 _In_ PCDB Cdb)
200{
201 /* Bytes 2:9 */
202 return ((ULONG64)Cdb->CDB16.LogicalBlock[0] << 56) |
203 ((ULONG64)Cdb->CDB16.LogicalBlock[1] << 48) |
204 ((ULONG64)Cdb->CDB16.LogicalBlock[2] << 40) |
205 ((ULONG64)Cdb->CDB16.LogicalBlock[3] << 32) |
206 ((ULONG64)Cdb->CDB16.LogicalBlock[4] << 24) |
207 ((ULONG64)Cdb->CDB16.LogicalBlock[5] << 16) |
208 ((ULONG64)Cdb->CDB16.LogicalBlock[6] << 8) |
209 ((ULONG64)Cdb->CDB16.LogicalBlock[7] << 0);
210}
#define C_ASSERT(e)
Definition: intsafe.h:73
unsigned __int64 ULONG64
Definition: imports.h:198
#define _In_
Definition: no_sal2.h:158
unsigned short USHORT
Definition: pedump.c:61
_In_opt_ WDFREQUEST _In_ ULONG _In_ BOOLEAN _In_ PCDB Cdb
Definition: scratch.h:159
FORCEINLINE ULONG CdbGetTransferLength12(_In_ PCDB Cdb)
Definition: scsiex.h:140
struct _MODE_CACHING_PAGE_SPC5 * PMODE_CACHING_PAGE_SPC5
FORCEINLINE USHORT CdbGetAllocationLength10(_In_ PCDB Cdb)
Definition: scsiex.h:110
struct _MODE_CACHING_PAGE_SPC5 MODE_CACHING_PAGE_SPC5
FORCEINLINE ULONG CdbGetAllocationLength16(_In_ PCDB Cdb)
Definition: scsiex.h:119
FORCEINLINE ULONG CdbGetTransferLength16(_In_ PCDB Cdb)
Definition: scsiex.h:152
struct _MODE_CONTROL_EXTENSION_PAGE MODE_CONTROL_EXTENSION_PAGE
union _SCSI_SENSE_CODE SCSI_SENSE_CODE
struct _SCSI_SENSE_KEY_SPECIFIC_FIELD_POINTER * PSCSI_SENSE_KEY_SPECIFIC_FIELD_POINTER
FORCEINLINE ULONG CdbGetLogicalBlockAddress6(_In_ PCDB Cdb)
Definition: scsiex.h:164
struct _MODE_CONTROL_EXTENSION_PAGE * PMODE_CONTROL_EXTENSION_PAGE
FORCEINLINE ULONG CdbGetLogicalBlockAddress10(_In_ PCDB Cdb)
Definition: scsiex.h:174
FORCEINLINE ULONG CdbGetLogicalBlockAddress12(_In_ PCDB Cdb)
Definition: scsiex.h:186
FORCEINLINE USHORT CdbGetTransferLength10(_In_ PCDB Cdb)
Definition: scsiex.h:130
union _SCSI_SENSE_CODE * PSCSI_SENSE_CODE
FORCEINLINE UCHAR CdbGetAllocationLength6(_In_ PCDB Cdb)
Definition: scsiex.h:102
FORCEINLINE ULONG64 CdbGetLogicalBlockAddress16(_In_ PCDB Cdb)
Definition: scsiex.h:198
struct _SCSI_SENSE_KEY_SPECIFIC_FIELD_POINTER SCSI_SENSE_KEY_SPECIFIC_FIELD_POINTER
UCHAR WriteRetensionPriority
Definition: scsiex.h:48
UCHAR MaximumPrefetch[2]
Definition: scsiex.h:52
UCHAR CacheSegmentSize[2]
Definition: scsiex.h:61
UCHAR NumberOfCacheSegments
Definition: scsiex.h:60
UCHAR DisablePrefetchTransfer[2]
Definition: scsiex.h:50
UCHAR MaximumPrefetchCeiling[2]
Definition: scsiex.h:53
UCHAR MultiplicationFactor
Definition: scsiex.h:45
UCHAR ReadRetensionPriority
Definition: scsiex.h:49
UCHAR MinimumPrefetch[2]
Definition: scsiex.h:51
unsigned char UCHAR
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
Definition: cdrw_hw.h:28
struct _CDB::_CDB10 CDB10
struct _CDB::_CDB6GENERIC CDB6GENERIC
struct _CDB::_CDB12 CDB12
struct _CDB::_CDB16 CDB16
struct _CDB::_CDB6READWRITE CDB6READWRITE
UCHAR SenseKey
Definition: scsiex.h:17
UCHAR AdditionalSenseCodeQualifier
Definition: scsiex.h:19
ULONG AsULONG
Definition: scsiex.h:21
UCHAR SrbStatus
Definition: scsiex.h:16
UCHAR AdditionalSenseCode
Definition: scsiex.h:18
#define FORCEINLINE
Definition: wdftypes.h:67