2 Provides the functions to submit Scsi commands defined in SCSI-2 specification for SCSI devices.
4 This library class provides the functions to submit SCSI commands defined in SCSI-2 specification
5 for hard drive, CD and DVD devices that are the most common SCSI boot targets used by UEFI platforms.
6 This library class depends on SCSI I/O Protocol defined in UEFI Specification and SCSI-2 industry standard.
8 Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
9 This program and the accompanying materials
10 are licensed and made available under the terms and conditions of the BSD License
11 which accompanies this distribution. The full text of the license may be found at
12 http://opensource.org/licenses/bsd-license.php
14 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
15 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
19 #ifndef __SCSI_LIB_H__
20 #define __SCSI_LIB_H__
22 #include <Protocol/ScsiIo.h>
25 Execute Test Unit Ready SCSI command on a specific SCSI target.
27 Executes the Test Unit Ready command on the SCSI target specified by ScsiIo.
28 If Timeout is zero, then this function waits indefinitely for the command to complete.
29 If Timeout is greater than zero, then the command is executed and will timeout after Timeout 100 ns units.
30 If ScsiIo is NULL, then ASSERT().
31 If SenseDataLength is NULL, then ASSERT().
32 If HostAdapterStatus is NULL, then ASSERT().
33 If TargetStatus is NULL, then ASSERT().
35 If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer
36 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
39 @param[in] ScsiIo A pointer to the SCSI I/O Protocol instance
40 for the specific SCSI target.
41 @param[in] Timeout The timeout in 100 ns units to use for the execution
42 of this SCSI Request Packet. A Timeout value of
43 zero means that this function will wait indefinitely
44 for the SCSI Request Packet to execute. If Timeout
45 is greater than zero, then this function will return
46 EFI_TIMEOUT if the time required to execute the SCSI
47 Request Packet is greater than Timeout.
48 @param[in, out] SenseData A pointer to sense data that was generated by
49 the execution of the SCSI Request Packet. This
50 buffer must be allocated by the caller.
51 If SenseDataLength is 0, then this parameter is
52 optional and may be NULL.
53 @param[in, out] SenseDataLength On input, a pointer to the length in bytes of
54 the SenseData buffer. On output, a pointer to
55 the number of bytes written to the SenseData buffer.
56 @param[out] HostAdapterStatus The status of the SCSI Host Controller that produces
57 the SCSI bus containing the SCSI target specified by
58 ScsiIo when the SCSI Request Packet was executed.
59 See the EFI SCSI I/O Protocol in the UEFI Specification
60 for details on the possible return values.
61 @param[out] TargetStatus The status returned by the SCSI target specified
62 by ScsiIo when the SCSI Request Packet was executed
63 on the SCSI Host Controller. See the EFI SCSI I/O
64 Protocol in the UEFI Specification for details on
65 the possible return values.
67 @retval EFI_SUCCESS The command was executed successfully.
68 See HostAdapterStatus, TargetStatus, SenseDataLength,
69 and SenseData in that order for additional status
71 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because
72 there are too many SCSI Command Packets already
73 queued. The SCSI Request Packet was not sent, so
74 no additional status information is available.
75 The caller may retry again later.
76 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send
77 SCSI Request Packet. See HostAdapterStatus,
78 TargetStatus, SenseDataLength, and SenseData in that
79 order for additional status information.
80 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet
81 is not supported by the SCSI initiator(i.e., SCSI
82 Host Controller). The SCSI Request Packet was not
83 sent, so no additional status information is available.
84 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request
85 Packet to execute. See HostAdapterStatus, TargetStatus,
86 SenseDataLength, and SenseData in that order for
87 additional status information.
88 @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid.
93 ScsiTestUnitReadyCommand (
94 IN EFI_SCSI_IO_PROTOCOL
*ScsiIo
,
96 IN OUT VOID
*SenseData
, OPTIONAL
97 IN OUT UINT8
*SenseDataLength
,
98 OUT UINT8
*HostAdapterStatus
,
99 OUT UINT8
*TargetStatus
104 Execute Inquiry SCSI command on a specific SCSI target.
106 Executes the Inquiry command on the SCSI target specified by ScsiIo.
107 If Timeout is zero, then this function waits indefinitely for the command to complete.
108 If Timeout is greater than zero, then the command is executed and will timeout after Timeout 100 ns units.
109 If ScsiIo is NULL, then ASSERT().
110 If SenseDataLength is NULL, then ASSERT().
111 If HostAdapterStatus is NULL, then ASSERT().
112 If TargetStatus is NULL, then ASSERT().
113 If InquiryDataLength is NULL, then ASSERT().
115 If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer
116 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
119 If InquiryDataLength is non-zero and InquiryDataBuffer is not NULL, InquiryDataBuffer
120 must meet buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise
121 EFI_INVALID_PARAMETER gets returned.
123 @param[in] ScsiIo A pointer to the SCSI I/O Protocol instance
124 for the specific SCSI target.
125 @param[in] Timeout The timeout in 100 ns units to use for the
126 execution of this SCSI Request Packet. A Timeout
127 value of zero means that this function will wait
128 indefinitely for the SCSI Request Packet to execute.
129 If Timeout is greater than zero, then this function
130 will return EFI_TIMEOUT if the time required to
131 execute the SCSI Request Packet is greater than Timeout.
132 @param[in, out] SenseData A pointer to sense data that was generated
133 by the execution of the SCSI Request Packet.
134 This buffer must be allocated by the caller.
135 If SenseDataLength is 0, then this parameter
136 is optional and may be NULL.
137 @param[in, out] SenseDataLength On input, the length in bytes of the SenseData buffer.
138 On output, the number of bytes written to the SenseData buffer.
139 @param[out] HostAdapterStatus The status of the SCSI Host Controller that
140 produces the SCSI bus containing the SCSI
141 target specified by ScsiIo when the SCSI
142 Request Packet was executed. See the EFI
143 SCSI I/O Protocol in the UEFI Specification
144 for details on the possible return values.
145 @param[out] TargetStatus The status returned by the SCSI target specified
146 by ScsiIo when the SCSI Request Packet was
147 executed on the SCSI Host Controller.
148 See the EFI SCSI I/O Protocol in the UEFI
149 Specification for details on the possible
151 @param[in, out] InquiryDataBuffer A pointer to inquiry data that was generated
152 by the execution of the SCSI Request Packet.
153 This buffer must be allocated by the caller.
154 If InquiryDataLength is 0, then this parameter
155 is optional and may be NULL.
156 @param[in, out] InquiryDataLength On input, a pointer to the length in bytes
157 of the InquiryDataBuffer buffer.
158 On output, a pointer to the number of bytes
159 written to the InquiryDataBuffer buffer.
160 @param[in] EnableVitalProductData If TRUE, then the supported vital product
161 data is returned in InquiryDataBuffer.
162 If FALSE, then the standard inquiry data is
163 returned in InquiryDataBuffer.
165 @retval EFI_SUCCESS The command was executed successfully. See HostAdapterStatus,
166 TargetStatus, SenseDataLength, and SenseData in that order
167 for additional status information.
168 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire
169 InquiryDataBuffer could not be transferred. The actual
170 number of bytes transferred is returned in InquiryDataLength.
171 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there
172 are too many SCSI Command Packets already queued.
173 The SCSI Request Packet was not sent, so no additional
174 status information is available. The caller may retry again later.
175 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI
176 Request Packet. See HostAdapterStatus, TargetStatus,
177 SenseDataLength, and SenseData in that order for additional
179 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not
180 supported by the SCSI initiator(i.e., SCSI Host Controller).
181 The SCSI Request Packet was not sent, so no additional
182 status information is available.
183 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request
184 Packet to execute. See HostAdapterStatus, TargetStatus,
185 SenseDataLength, and SenseData in that order for
186 additional status information.
187 @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid.
193 IN EFI_SCSI_IO_PROTOCOL
*ScsiIo
,
195 IN OUT VOID
*SenseData
, OPTIONAL
196 IN OUT UINT8
*SenseDataLength
,
197 OUT UINT8
*HostAdapterStatus
,
198 OUT UINT8
*TargetStatus
,
199 IN OUT VOID
*InquiryDataBuffer
, OPTIONAL
200 IN OUT UINT32
*InquiryDataLength
,
201 IN BOOLEAN EnableVitalProductData
206 Execute Inquiry SCSI command on a specific SCSI target.
208 Executes the Inquiry command on the SCSI target specified by ScsiIo.
209 If Timeout is zero, then this function waits indefinitely for the command to complete.
210 If Timeout is greater than zero, then the command is executed and will timeout after Timeout 100 ns units.
211 If ScsiIo is NULL, then ASSERT().
212 If SenseDataLength is NULL, then ASSERT().
213 If HostAdapterStatus is NULL, then ASSERT().
214 If TargetStatus is NULL, then ASSERT().
215 If InquiryDataLength is NULL, then ASSERT().
217 If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer
218 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
221 If InquiryDataLength is non-zero and InquiryDataBuffer is not NULL, InquiryDataBuffer
222 must meet buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise
223 EFI_INVALID_PARAMETER gets returned.
225 @param[in] ScsiIo A pointer to the SCSI I/O Protocol instance
226 for the specific SCSI target.
227 @param[in] Timeout The timeout in 100 ns units to use for the
228 execution of this SCSI Request Packet. A Timeout
229 value of zero means that this function will wait
230 indefinitely for the SCSI Request Packet to execute.
231 If Timeout is greater than zero, then this function
232 will return EFI_TIMEOUT if the time required to
233 execute the SCSI Request Packet is greater than Timeout.
234 @param[in, out] SenseData A pointer to sense data that was generated
235 by the execution of the SCSI Request Packet.
236 This buffer must be allocated by the caller.
237 If SenseDataLength is 0, then this parameter
238 is optional and may be NULL.
239 @param[in, out] SenseDataLength On input, the length in bytes of the SenseData buffer.
240 On output, the number of bytes written to the SenseData buffer.
241 @param[out] HostAdapterStatus The status of the SCSI Host Controller that
242 produces the SCSI bus containing the SCSI
243 target specified by ScsiIo when the SCSI
244 Request Packet was executed. See the EFI
245 SCSI I/O Protocol in the UEFI Specification
246 for details on the possible return values.
247 @param[out] TargetStatus The status returned by the SCSI target specified
248 by ScsiIo when the SCSI Request Packet was
249 executed on the SCSI Host Controller.
250 See the EFI SCSI I/O Protocol in the UEFI
251 Specification for details on the possible
253 @param[in, out] InquiryDataBuffer A pointer to inquiry data that was generated
254 by the execution of the SCSI Request Packet.
255 This buffer must be allocated by the caller.
256 If InquiryDataLength is 0, then this parameter
257 is optional and may be NULL.
258 @param[in, out] InquiryDataLength On input, a pointer to the length in bytes
259 of the InquiryDataBuffer buffer.
260 On output, a pointer to the number of bytes
261 written to the InquiryDataBuffer buffer.
262 @param[in] EnableVitalProductData If TRUE, then the supported vital product
263 data for the PageCode is returned in InquiryDataBuffer.
264 If FALSE, then the standard inquiry data is
265 returned in InquiryDataBuffer and PageCode is ignored.
266 @param[in] PageCode The page code of the vital product data.
267 It's ignored if EnableVitalProductData is FALSE.
269 @retval EFI_SUCCESS The command executed successfully. See HostAdapterStatus,
270 TargetStatus, SenseDataLength, and SenseData in that order
271 for additional status information.
272 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire
273 InquiryDataBuffer could not be transferred. The actual
274 number of bytes transferred is returned in InquiryDataLength.
275 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there
276 are too many SCSI Command Packets already queued.
277 The SCSI Request Packet was not sent, so no additional
278 status information is available. The caller may retry again later.
279 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI
280 Request Packet. See HostAdapterStatus, TargetStatus,
281 SenseDataLength, and SenseData in that order for additional
283 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not
284 supported by the SCSI initiator(i.e., SCSI Host Controller).
285 The SCSI Request Packet was not sent, so no additional
286 status information is available.
287 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request
288 Packet to execute. See HostAdapterStatus, TargetStatus,
289 SenseDataLength, and SenseData in that order for
290 additional status information.
291 @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid.
296 ScsiInquiryCommandEx (
297 IN EFI_SCSI_IO_PROTOCOL
*ScsiIo
,
299 IN OUT VOID
*SenseData
, OPTIONAL
300 IN OUT UINT8
*SenseDataLength
,
301 OUT UINT8
*HostAdapterStatus
,
302 OUT UINT8
*TargetStatus
,
303 IN OUT VOID
*InquiryDataBuffer
, OPTIONAL
304 IN OUT UINT32
*InquiryDataLength
,
305 IN BOOLEAN EnableVitalProductData
,
311 Execute Mode Sense(10) SCSI command on a specific SCSI target.
313 Executes the SCSI Mode Sense(10) command on the SCSI target specified by ScsiIo.
314 If Timeout is zero, then this function waits indefinitely for the command to complete.
315 If Timeout is greater than zero, then the command is executed and will timeout
316 after Timeout 100 ns units. The DBDField, PageControl, and PageCode parameters
317 are used to construct the CDB for this SCSI command.
318 If ScsiIo is NULL, then ASSERT().
319 If SenseDataLength is NULL, then ASSERT().
320 If HostAdapterStatus is NULL, then ASSERT().
321 If TargetStatus is NULL, then ASSERT().
322 If DataLength is NULL, then ASSERT().
324 If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer
325 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
328 If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet buffer
329 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
332 @param[in] ScsiIo A pointer to the SCSI I/O Protocol instance
333 for the specific SCSI target.
334 @param[in] Timeout The timeout in 100 ns units to use for the
335 execution of this SCSI Request Packet. A Timeout
336 value of zero means that this function will wait
337 indefinitely for the SCSI Request Packet to execute.
338 If Timeout is greater than zero, then this function
339 will return EFI_TIMEOUT if the time required to
340 execute the SCSI Request Packet is greater than Timeout.
341 @param[in, out] SenseData A pointer to sense data that was generated
342 by the execution of the SCSI Request Packet.
343 This buffer must be allocated by the caller.
344 If SenseDataLength is 0, then this parameter
345 is optional and may be NULL.
346 @param[in, out] SenseDataLength On input, the length in bytes of the SenseData buffer.
347 On output, the number of bytes written to the SenseData buffer.
348 @param[out] HostAdapterStatus The status of the SCSI Host Controller that
349 produces the SCSI bus containing the SCSI target
350 specified by ScsiIo when the SCSI Request Packet
351 was executed. See the EFI SCSI I/O Protocol in the
352 UEFI Specification for details on the possible
354 @param[out] TargetStatus The status returned by the SCSI target specified
355 by ScsiIo when the SCSI Request Packet was executed
356 on the SCSI Host Controller. See the EFI SCSI
357 I/O Protocol in the UEFI Specification for details
358 on the possible return values.
359 @param[in, out] DataBuffer A pointer to data that was generated by the
360 execution of the SCSI Request Packet. This
361 buffer must be allocated by the caller. If
362 DataLength is 0, then this parameter is optional
364 @param[in, out] DataLength On input, a pointer to the length in bytes of
365 the DataBuffer buffer. On output, a pointer
366 to the number of bytes written to the DataBuffer
368 @param[in] DBDField Specifies the DBD field of the CDB for this SCSI Command.
369 @param[in] PageControl Specifies the PC field of the CDB for this SCSI Command.
370 @param[in] PageCode Specifies the Page Control field of the CDB for this SCSI Command.
372 @retval EFI_SUCCESS The command was executed successfully.
373 See HostAdapterStatus, TargetStatus, SenseDataLength,
374 and SenseData in that order for additional status information.
375 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the
376 entire DataBuffer could not be transferred.
377 The actual number of bytes transferred is returned
379 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because
380 there are too many SCSI Command Packets already queued.
381 The SCSI Request Packet was not sent, so no additional
382 status information is available. The caller may retry
384 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send
385 SCSI Request Packet. See HostAdapterStatus, TargetStatus,
386 SenseDataLength, and SenseData in that order for
387 additional status information.
388 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet
389 is not supported by the SCSI initiator(i.e., SCSI
390 Host Controller). The SCSI Request Packet was not
391 sent, so no additional status information is available.
392 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI
393 Request Packet to execute. See HostAdapterStatus,
394 TargetStatus, SenseDataLength, and SenseData in that
395 order for additional status information.
396 @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid.
401 ScsiModeSense10Command (
402 IN EFI_SCSI_IO_PROTOCOL
*ScsiIo
,
404 IN OUT VOID
*SenseData
, OPTIONAL
405 IN OUT UINT8
*SenseDataLength
,
406 OUT UINT8
*HostAdapterStatus
,
407 OUT UINT8
*TargetStatus
,
408 IN OUT VOID
*DataBuffer
, OPTIONAL
409 IN OUT UINT32
*DataLength
,
410 IN UINT8 DBDField
, OPTIONAL
411 IN UINT8 PageControl
,
418 Execute Request Sense SCSI command on a specific SCSI target.
420 Executes the Request Sense command on the SCSI target specified by ScsiIo.
421 If Timeout is zero, then this function waits indefinitely for the command to complete.
422 If Timeout is greater than zero, then the command is executed and will timeout after Timeout 100 ns units.
423 If ScsiIo is NULL, then ASSERT().
424 If SenseDataLength is NULL, then ASSERT().
425 If HostAdapterStatus is NULL, then ASSERT().
426 If TargetStatus is NULL, then ASSERT().
428 If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer
429 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
432 @param[in] ScsiIo A pointer to SCSI IO protocol.
433 @param[in] Timeout The length of timeout period.
434 @param[in, out] SenseData A pointer to output sense data.
435 @param[in, out] SenseDataLength The length of output sense data.
436 @param[out] HostAdapterStatus The status of Host Adapter.
437 @param[out] TargetStatus The status of the target.
439 @retval EFI_SUCCESS Command is executed successfully.
440 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are
441 too many SCSI Command Packets already queued.
442 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.
443 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by
444 the SCSI initiator(i.e., SCSI Host Controller)
445 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.
446 @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid.
451 ScsiRequestSenseCommand (
452 IN EFI_SCSI_IO_PROTOCOL
*ScsiIo
,
454 IN OUT VOID
*SenseData
, OPTIONAL
455 IN OUT UINT8
*SenseDataLength
,
456 OUT UINT8
*HostAdapterStatus
,
457 OUT UINT8
*TargetStatus
462 Execute Read Capacity SCSI command on a specific SCSI target.
464 Executes the SCSI Read Capacity command on the SCSI target specified by ScsiIo.
465 If Timeout is zero, then this function waits indefinitely for the command to complete.
466 If Timeout is greater than zero, then the command is executed and will timeout after
467 Timeout 100 ns units. The Pmi parameter is used to construct the CDB for this SCSI command.
468 If ScsiIo is NULL, then ASSERT().
469 If SenseDataLength is NULL, then ASSERT().
470 If HostAdapterStatus is NULL, then ASSERT().
471 If TargetStatus is NULL, then ASSERT().
472 If DataLength is NULL, then ASSERT().
474 If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer
475 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
478 If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet buffer
479 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
482 @param[in] ScsiIo A pointer to SCSI IO protocol.
483 @param[in] Timeout The length of timeout period.
484 @param[in, out] SenseData A pointer to output sense data.
485 @param[in, out] SenseDataLength The length of output sense data.
486 @param[out] HostAdapterStatus The status of Host Adapter.
487 @param[out] TargetStatus The status of the target.
488 @param[in, out] DataBuffer A pointer to a data buffer.
489 @param[in, out] DataLength The length of data buffer.
490 @param[in] Pmi Partial medium indicator.
492 @retval EFI_SUCCESS Command is executed successfully.
493 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire
494 DataBuffer could not be transferred. The actual
495 number of bytes transferred is returned in DataLength.
496 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because
497 there are too many SCSI Command Packets already queued.
498 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.
499 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet
500 is not supported by the SCSI initiator(i.e., SCSI Host Controller)
501 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.
502 @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid.
507 ScsiReadCapacityCommand (
508 IN EFI_SCSI_IO_PROTOCOL
*ScsiIo
,
510 IN OUT VOID
*SenseData
, OPTIONAL
511 IN OUT UINT8
*SenseDataLength
,
512 OUT UINT8
*HostAdapterStatus
,
513 OUT UINT8
*TargetStatus
,
514 IN OUT VOID
*DataBuffer
, OPTIONAL
515 IN OUT UINT32
*DataLength
,
521 Execute Read Capacity SCSI 16 command on a specific SCSI target.
523 Executes the SCSI Read Capacity 16 command on the SCSI target specified by ScsiIo.
524 If Timeout is zero, then this function waits indefinitely for the command to complete.
525 If Timeout is greater than zero, then the command is executed and will timeout after
526 Timeout 100 ns units. The Pmi parameter is used to construct the CDB for this SCSI command.
527 If ScsiIo is NULL, then ASSERT().
528 If SenseDataLength is NULL, then ASSERT().
529 If HostAdapterStatus is NULL, then ASSERT().
530 If TargetStatus is NULL, then ASSERT().
531 If DataLength is NULL, then ASSERT().
533 If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer
534 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
537 If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet buffer
538 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
541 @param[in] ScsiIo A pointer to SCSI IO protocol.
542 @param[in] Timeout The length of timeout period.
543 @param[in, out] SenseData A pointer to output sense data.
544 @param[in, out] SenseDataLength The length of output sense data.
545 @param[out] HostAdapterStatus The status of Host Adapter.
546 @param[out] TargetStatus The status of the target.
547 @param[in, out] DataBuffer A pointer to a data buffer.
548 @param[in, out] DataLength The length of data buffer.
549 @param[in] Pmi Partial medium indicator.
551 @retval EFI_SUCCESS Command is executed successfully.
552 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire
553 DataBuffer could not be transferred. The actual
554 number of bytes transferred is returned in DataLength.
555 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because
556 there are too many SCSI Command Packets already queued.
557 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.
558 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet
559 is not supported by the SCSI initiator(i.e., SCSI Host Controller)
560 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.
561 @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid.
566 ScsiReadCapacity16Command (
567 IN EFI_SCSI_IO_PROTOCOL
*ScsiIo
,
569 IN OUT VOID
*SenseData
, OPTIONAL
570 IN OUT UINT8
*SenseDataLength
,
571 OUT UINT8
*HostAdapterStatus
,
572 OUT UINT8
*TargetStatus
,
573 IN OUT VOID
*DataBuffer
, OPTIONAL
574 IN OUT UINT32
*DataLength
,
580 Execute Read(10) SCSI command on a specific SCSI target.
582 Executes the SCSI Read(10) command on the SCSI target specified by ScsiIo.
583 If Timeout is zero, then this function waits indefinitely for the command to complete.
584 If Timeout is greater than zero, then the command is executed and will timeout
585 after Timeout 100 ns units. The StartLba and SectorSize parameters are used to
586 construct the CDB for this SCSI command.
587 If ScsiIo is NULL, then ASSERT().
588 If SenseDataLength is NULL, then ASSERT().
589 If HostAdapterStatus is NULL, then ASSERT().
590 If TargetStatus is NULL, then ASSERT().
591 If DataLength is NULL, then ASSERT().
593 If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer
594 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
597 If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet buffer
598 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
601 @param[in] ScsiIo A pointer to SCSI IO protocol.
602 @param[in] Timeout The length of timeout period.
603 @param[in, out] SenseData A pointer to output sense data.
604 @param[in, out] SenseDataLength The length of output sense data.
605 @param[out] HostAdapterStatus The status of Host Adapter.
606 @param[out] TargetStatus The status of the target.
607 @param[in, out] DataBuffer Read 10 command data.
608 @param[in, out] DataLength The length of data buffer.
609 @param[in] StartLba The start address of LBA.
610 @param[in] SectorSize The number of contiguous logical blocks of data that shall be transferred.
612 @retval EFI_SUCCESS Command is executed successfully.
613 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire DataBuffer could
614 not be transferred. The actual number of bytes transferred is returned in DataLength.
615 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are too many
616 SCSI Command Packets already queued.
617 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.
618 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by
619 the SCSI initiator(i.e., SCSI Host Controller)
620 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.
621 @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid.
627 IN EFI_SCSI_IO_PROTOCOL
*ScsiIo
,
629 IN OUT VOID
*SenseData
, OPTIONAL
630 IN OUT UINT8
*SenseDataLength
,
631 OUT UINT8
*HostAdapterStatus
,
632 OUT UINT8
*TargetStatus
,
633 IN OUT VOID
*DataBuffer
, OPTIONAL
634 IN OUT UINT32
*DataLength
,
641 Execute Write(10) SCSI command on a specific SCSI target.
643 Executes the SCSI Write(10) command on the SCSI target specified by ScsiIo.
644 If Timeout is zero, then this function waits indefinitely for the command to complete.
645 If Timeout is greater than zero, then the command is executed and will timeout after
646 Timeout 100 ns units. The StartLba and SectorSize parameters are used to construct
647 the CDB for this SCSI command.
648 If ScsiIo is NULL, then ASSERT().
649 If SenseDataLength is NULL, then ASSERT().
650 If HostAdapterStatus is NULL, then ASSERT().
651 If TargetStatus is NULL, then ASSERT().
652 If DataLength is NULL, then ASSERT().
654 If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer
655 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
658 If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet buffer
659 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
662 @param[in] ScsiIo SCSI IO Protocol to use
663 @param[in] Timeout The length of timeout period.
664 @param[in, out] SenseData A pointer to output sense data.
665 @param[in, out] SenseDataLength The length of output sense data.
666 @param[out] HostAdapterStatus The status of Host Adapter.
667 @param[out] TargetStatus The status of the target.
668 @param[in, out] DataBuffer A pointer to a data buffer.
669 @param[in, out] DataLength The length of data buffer.
670 @param[in] StartLba The start address of LBA.
671 @param[in] SectorSize The number of contiguous logical blocks of data that shall be transferred.
673 @retval EFI_SUCCESS Command is executed successfully.
674 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire DataBuffer could
675 not be transferred. The actual number of bytes transferred is returned in DataLength.
676 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are too many
677 SCSI Command Packets already queued.
678 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.
679 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by
680 the SCSI initiator(i.e., SCSI Host Controller)
681 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.
682 @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid.
688 IN EFI_SCSI_IO_PROTOCOL
*ScsiIo
,
690 IN OUT VOID
*SenseData
, OPTIONAL
691 IN OUT UINT8
*SenseDataLength
,
692 OUT UINT8
*HostAdapterStatus
,
693 OUT UINT8
*TargetStatus
,
694 IN OUT VOID
*DataBuffer
, OPTIONAL
695 IN OUT UINT32
*DataLength
,
701 Execute Read(16) SCSI command on a specific SCSI target.
703 Executes the SCSI Read(16) command on the SCSI target specified by ScsiIo.
704 If Timeout is zero, then this function waits indefinitely for the command to complete.
705 If Timeout is greater than zero, then the command is executed and will timeout
706 after Timeout 100 ns units. The StartLba and SectorSize parameters are used to
707 construct the CDB for this SCSI command.
708 If ScsiIo is NULL, then ASSERT().
709 If SenseDataLength is NULL, then ASSERT().
710 If HostAdapterStatus is NULL, then ASSERT().
711 If TargetStatus is NULL, then ASSERT().
712 If DataLength is NULL, then ASSERT().
714 If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer
715 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
718 If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet buffer
719 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
722 @param[in] ScsiIo A pointer to SCSI IO protocol.
723 @param[in] Timeout The length of timeout period.
724 @param[in, out] SenseData A pointer to output sense data.
725 @param[in, out] SenseDataLength The length of output sense data.
726 @param[out] HostAdapterStatus The status of Host Adapter.
727 @param[out] TargetStatus The status of the target.
728 @param[in, out] DataBuffer Read 16 command data.
729 @param[in, out] DataLength The length of data buffer.
730 @param[in] StartLba The start address of LBA.
731 @param[in] SectorSize The number of contiguous logical blocks of data that shall be transferred.
733 @retval EFI_SUCCESS Command is executed successfully.
734 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire DataBuffer could
735 not be transferred. The actual number of bytes transferred is returned in DataLength.
736 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are too many
737 SCSI Command Packets already queued.
738 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.
739 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by
740 the SCSI initiator(i.e., SCSI Host Controller)
741 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.
742 @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid.
748 IN EFI_SCSI_IO_PROTOCOL
*ScsiIo
,
750 IN OUT VOID
*SenseData
, OPTIONAL
751 IN OUT UINT8
*SenseDataLength
,
752 OUT UINT8
*HostAdapterStatus
,
753 OUT UINT8
*TargetStatus
,
754 IN OUT VOID
*DataBuffer
, OPTIONAL
755 IN OUT UINT32
*DataLength
,
762 Execute Write(16) SCSI command on a specific SCSI target.
764 Executes the SCSI Write(16) command on the SCSI target specified by ScsiIo.
765 If Timeout is zero, then this function waits indefinitely for the command to complete.
766 If Timeout is greater than zero, then the command is executed and will timeout after
767 Timeout 100 ns units. The StartLba and SectorSize parameters are used to construct
768 the CDB for this SCSI command.
769 If ScsiIo is NULL, then ASSERT().
770 If SenseDataLength is NULL, then ASSERT().
771 If HostAdapterStatus is NULL, then ASSERT().
772 If TargetStatus is NULL, then ASSERT().
773 If DataLength is NULL, then ASSERT().
775 If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer
776 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
779 If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet buffer
780 alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER
783 @param[in] ScsiIo SCSI IO Protocol to use
784 @param[in] Timeout The length of timeout period.
785 @param[in, out] SenseData A pointer to output sense data.
786 @param[in, out] SenseDataLength The length of output sense data.
787 @param[out] HostAdapterStatus The status of Host Adapter.
788 @param[out] TargetStatus The status of the target.
789 @param[in, out] DataBuffer A pointer to a data buffer.
790 @param[in, out] DataLength The length of data buffer.
791 @param[in] StartLba The start address of LBA.
792 @param[in] SectorSize The number of contiguous logical blocks of data that shall be transferred.
794 @retval EFI_SUCCESS Command is executed successfully.
795 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire DataBuffer could
796 not be transferred. The actual number of bytes transferred is returned in DataLength.
797 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are too many
798 SCSI Command Packets already queued.
799 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.
800 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by
801 the SCSI initiator(i.e., SCSI Host Controller)
802 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.
803 @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid.
809 IN EFI_SCSI_IO_PROTOCOL
*ScsiIo
,
811 IN OUT VOID
*SenseData
, OPTIONAL
812 IN OUT UINT8
*SenseDataLength
,
813 OUT UINT8
*HostAdapterStatus
,
814 OUT UINT8
*TargetStatus
,
815 IN OUT VOID
*DataBuffer
, OPTIONAL
816 IN OUT UINT32
*DataLength
,
823 Execute blocking/non-blocking Read(10) SCSI command on a specific SCSI
826 Executes the SCSI Read(10) command on the SCSI target specified by ScsiIo.
827 When Event is NULL, blocking command will be executed. Otherwise non-blocking
828 command will be executed.
829 For blocking I/O, if Timeout is zero, this function will wait indefinitely
830 for the command to complete. If Timeout is greater than zero, then the
831 command is executed and will timeout after Timeout 100 ns units.
832 For non-blocking I/O, if Timeout is zero, Event will be signaled only after
833 the command to completes. If Timeout is greater than zero, Event will also be
834 signaled after Timeout 100 ns units.
835 The StartLba and SectorSize parameters are used to construct the CDB for this
838 If ScsiIo is NULL, then ASSERT().
839 If SenseDataLength is NULL, then ASSERT().
840 If HostAdapterStatus is NULL, then ASSERT().
841 If TargetStatus is NULL, then ASSERT().
842 If DataLength is NULL, then ASSERT().
844 If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet
845 buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise
846 EFI_INVALID_PARAMETER gets returned.
848 If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet
849 buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise
850 EFI_INVALID_PARAMETER gets returned.
852 @param[in] ScsiIo A pointer to SCSI IO protocol.
853 @param[in] Timeout The length of timeout period.
854 @param[in, out] SenseData A pointer to output sense data.
855 @param[in, out] SenseDataLength The length of output sense data.
856 @param[out] HostAdapterStatus The status of Host Adapter.
857 @param[out] TargetStatus The status of the target.
858 @param[in, out] DataBuffer Read 16 command data.
859 @param[in, out] DataLength The length of data buffer.
860 @param[in] StartLba The start address of LBA.
861 @param[in] SectorSize The number of contiguous logical blocks
862 of data that shall be transferred.
863 @param[in] Event If the SCSI target does not support
864 non-blocking I/O, then Event is ignored,
865 and blocking I/O is performed. If Event
866 is NULL, then blocking I/O is performed.
867 If Event is not NULL and non-blocking
868 I/O is supported, then non-blocking I/O
869 is performed, and Event will be signaled
870 when the SCSI Read(10) command
873 @retval EFI_SUCCESS Command is executed successfully.
874 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed,
875 but the entire DataBuffer could not be
876 transferred. The actual number of bytes
877 transferred is returned in DataLength.
878 @retval EFI_NOT_READY The SCSI Request Packet could not be
879 sent because there are too many SCSI
880 Command Packets already queued.
881 @retval EFI_DEVICE_ERROR A device error occurred while attempting
882 to send SCSI Request Packet.
883 @retval EFI_UNSUPPORTED The command described by the SCSI
884 Request Packet is not supported by the
885 SCSI initiator(i.e., SCSI Host
887 @retval EFI_TIMEOUT A timeout occurred while waiting for the
888 SCSI Request Packet to execute.
889 @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet
891 @retval EFI_OUT_OF_RESOURCES The request could not be completed due
892 to a lack of resources.
897 ScsiRead10CommandEx (
898 IN EFI_SCSI_IO_PROTOCOL
*ScsiIo
,
900 IN OUT VOID
*SenseData
, OPTIONAL
901 IN OUT UINT8
*SenseDataLength
,
902 OUT UINT8
*HostAdapterStatus
,
903 OUT UINT8
*TargetStatus
,
904 IN OUT VOID
*DataBuffer
, OPTIONAL
905 IN OUT UINT32
*DataLength
,
907 IN UINT32 SectorSize
,
908 IN EFI_EVENT Event OPTIONAL
913 Execute blocking/non-blocking Write(10) SCSI command on a specific SCSI
916 Executes the SCSI Write(10) command on the SCSI target specified by ScsiIo.
917 When Event is NULL, blocking command will be executed. Otherwise non-blocking
918 command will be executed.
919 For blocking I/O, if Timeout is zero, this function will wait indefinitely
920 for the command to complete. If Timeout is greater than zero, then the
921 command is executed and will timeout after Timeout 100 ns units.
922 For non-blocking I/O, if Timeout is zero, Event will be signaled only after
923 the command to completes. If Timeout is greater than zero, Event will also be
924 signaled after Timeout 100 ns units.
925 The StartLba and SectorSize parameters are used to construct the CDB for this
928 If ScsiIo is NULL, then ASSERT().
929 If SenseDataLength is NULL, then ASSERT().
930 If HostAdapterStatus is NULL, then ASSERT().
931 If TargetStatus is NULL, then ASSERT().
932 If DataLength is NULL, then ASSERT().
934 If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet
935 buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise
936 EFI_INVALID_PARAMETER gets returned.
938 If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet
939 buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise
940 EFI_INVALID_PARAMETER gets returned.
942 @param[in] ScsiIo SCSI IO Protocol to use
943 @param[in] Timeout The length of timeout period.
944 @param[in, out] SenseData A pointer to output sense data.
945 @param[in, out] SenseDataLength The length of output sense data.
946 @param[out] HostAdapterStatus The status of Host Adapter.
947 @param[out] TargetStatus The status of the target.
948 @param[in, out] DataBuffer A pointer to a data buffer.
949 @param[in, out] DataLength The length of data buffer.
950 @param[in] StartLba The start address of LBA.
951 @param[in] SectorSize The number of contiguous logical blocks
952 of data that shall be transferred.
953 @param[in] Event If the SCSI target does not support
954 non-blocking I/O, then Event is ignored,
955 and blocking I/O is performed. If Event
956 is NULL, then blocking I/O is performed.
957 If Event is not NULL and non-blocking
958 I/O is supported, then non-blocking I/O
959 is performed, and Event will be signaled
960 when the SCSI Write(10) command
963 @retval EFI_SUCCESS Command is executed successfully.
964 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed,
965 but the entire DataBuffer could not be
966 transferred. The actual number of bytes
967 transferred is returned in DataLength.
968 @retval EFI_NOT_READY The SCSI Request Packet could not be
969 sent because there are too many SCSI
970 Command Packets already queued.
971 @retval EFI_DEVICE_ERROR A device error occurred while attempting
972 to send SCSI Request Packet.
973 @retval EFI_UNSUPPORTED The command described by the SCSI
974 Request Packet is not supported by the
975 SCSI initiator(i.e., SCSI Host
977 @retval EFI_TIMEOUT A timeout occurred while waiting for the
978 SCSI Request Packet to execute.
979 @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet
981 @retval EFI_OUT_OF_RESOURCES The request could not be completed due
982 to a lack of resources.
987 ScsiWrite10CommandEx (
988 IN EFI_SCSI_IO_PROTOCOL
*ScsiIo
,
990 IN OUT VOID
*SenseData
, OPTIONAL
991 IN OUT UINT8
*SenseDataLength
,
992 OUT UINT8
*HostAdapterStatus
,
993 OUT UINT8
*TargetStatus
,
994 IN OUT VOID
*DataBuffer
, OPTIONAL
995 IN OUT UINT32
*DataLength
,
997 IN UINT32 SectorSize
,
998 IN EFI_EVENT Event OPTIONAL
1003 Execute blocking/non-blocking Read(16) SCSI command on a specific SCSI
1006 Executes the SCSI Read(16) command on the SCSI target specified by ScsiIo.
1007 When Event is NULL, blocking command will be executed. Otherwise non-blocking
1008 command will be executed.
1009 For blocking I/O, if Timeout is zero, this function will wait indefinitely
1010 for the command to complete. If Timeout is greater than zero, then the
1011 command is executed and will timeout after Timeout 100 ns units.
1012 For non-blocking I/O, if Timeout is zero, Event will be signaled only after
1013 the command to completes. If Timeout is greater than zero, Event will also be
1014 signaled after Timeout 100 ns units.
1015 The StartLba and SectorSize parameters are used to construct the CDB for this
1018 If ScsiIo is NULL, then ASSERT().
1019 If SenseDataLength is NULL, then ASSERT().
1020 If HostAdapterStatus is NULL, then ASSERT().
1021 If TargetStatus is NULL, then ASSERT().
1022 If DataLength is NULL, then ASSERT().
1024 If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet
1025 buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise
1026 EFI_INVALID_PARAMETER gets returned.
1028 If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet
1029 buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise
1030 EFI_INVALID_PARAMETER gets returned.
1032 @param[in] ScsiIo A pointer to SCSI IO protocol.
1033 @param[in] Timeout The length of timeout period.
1034 @param[in, out] SenseData A pointer to output sense data.
1035 @param[in, out] SenseDataLength The length of output sense data.
1036 @param[out] HostAdapterStatus The status of Host Adapter.
1037 @param[out] TargetStatus The status of the target.
1038 @param[in, out] DataBuffer Read 16 command data.
1039 @param[in, out] DataLength The length of data buffer.
1040 @param[in] StartLba The start address of LBA.
1041 @param[in] SectorSize The number of contiguous logical blocks
1042 of data that shall be transferred.
1043 @param[in] Event If the SCSI target does not support
1044 non-blocking I/O, then Event is ignored,
1045 and blocking I/O is performed. If Event
1046 is NULL, then blocking I/O is performed.
1047 If Event is not NULL and non-blocking
1048 I/O is supported, then non-blocking I/O
1049 is performed, and Event will be signaled
1050 when the SCSI Read(16) command
1053 @retval EFI_SUCCESS Command is executed successfully.
1054 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed,
1055 but the entire DataBuffer could not be
1056 transferred. The actual number of bytes
1057 transferred is returned in DataLength.
1058 @retval EFI_NOT_READY The SCSI Request Packet could not be
1059 sent because there are too many SCSI
1060 Command Packets already queued.
1061 @retval EFI_DEVICE_ERROR A device error occurred while attempting
1062 to send SCSI Request Packet.
1063 @retval EFI_UNSUPPORTED The command described by the SCSI
1064 Request Packet is not supported by the
1065 SCSI initiator(i.e., SCSI Host
1067 @retval EFI_TIMEOUT A timeout occurred while waiting for the
1068 SCSI Request Packet to execute.
1069 @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet
1071 @retval EFI_OUT_OF_RESOURCES The request could not be completed due
1072 to a lack of resources.
1077 ScsiRead16CommandEx (
1078 IN EFI_SCSI_IO_PROTOCOL
*ScsiIo
,
1080 IN OUT VOID
*SenseData
, OPTIONAL
1081 IN OUT UINT8
*SenseDataLength
,
1082 OUT UINT8
*HostAdapterStatus
,
1083 OUT UINT8
*TargetStatus
,
1084 IN OUT VOID
*DataBuffer
, OPTIONAL
1085 IN OUT UINT32
*DataLength
,
1087 IN UINT32 SectorSize
,
1088 IN EFI_EVENT Event OPTIONAL
1093 Execute blocking/non-blocking Write(16) SCSI command on a specific SCSI
1096 Executes the SCSI Write(16) command on the SCSI target specified by ScsiIo.
1097 When Event is NULL, blocking command will be executed. Otherwise non-blocking
1098 command will be executed.
1099 For blocking I/O, if Timeout is zero, this function will wait indefinitely
1100 for the command to complete. If Timeout is greater than zero, then the
1101 command is executed and will timeout after Timeout 100 ns units.
1102 For non-blocking I/O, if Timeout is zero, Event will be signaled only after
1103 the command to completes. If Timeout is greater than zero, Event will also be
1104 signaled after Timeout 100 ns units.
1105 The StartLba and SectorSize parameters are used to construct the CDB for this
1108 If ScsiIo is NULL, then ASSERT().
1109 If SenseDataLength is NULL, then ASSERT().
1110 If HostAdapterStatus is NULL, then ASSERT().
1111 If TargetStatus is NULL, then ASSERT().
1112 If DataLength is NULL, then ASSERT().
1114 If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet
1115 buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise
1116 EFI_INVALID_PARAMETER gets returned.
1118 If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet
1119 buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise
1120 EFI_INVALID_PARAMETER gets returned.
1122 @param[in] ScsiIo SCSI IO Protocol to use
1123 @param[in] Timeout The length of timeout period.
1124 @param[in, out] SenseData A pointer to output sense data.
1125 @param[in, out] SenseDataLength The length of output sense data.
1126 @param[out] HostAdapterStatus The status of Host Adapter.
1127 @param[out] TargetStatus The status of the target.
1128 @param[in, out] DataBuffer A pointer to a data buffer.
1129 @param[in, out] DataLength The length of data buffer.
1130 @param[in] StartLba The start address of LBA.
1131 @param[in] SectorSize The number of contiguous logical blocks
1132 of data that shall be transferred.
1133 @param[in] Event If the SCSI target does not support
1134 non-blocking I/O, then Event is ignored,
1135 and blocking I/O is performed. If Event
1136 is NULL, then blocking I/O is performed.
1137 If Event is not NULL and non-blocking
1138 I/O is supported, then non-blocking I/O
1139 is performed, and Event will be signaled
1140 when the SCSI Write(16) command
1143 @retval EFI_SUCCESS Command is executed successfully.
1144 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed,
1145 but the entire DataBuffer could not be
1146 transferred. The actual number of bytes
1147 transferred is returned in DataLength.
1148 @retval EFI_NOT_READY The SCSI Request Packet could not be
1149 sent because there are too many SCSI
1150 Command Packets already queued.
1151 @retval EFI_DEVICE_ERROR A device error occurred while attempting
1152 to send SCSI Request Packet.
1153 @retval EFI_UNSUPPORTED The command described by the SCSI
1154 Request Packet is not supported by the
1155 SCSI initiator(i.e., SCSI Host
1157 @retval EFI_TIMEOUT A timeout occurred while waiting for the
1158 SCSI Request Packet to execute.
1159 @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet
1161 @retval EFI_OUT_OF_RESOURCES The request could not be completed due
1162 to a lack of resources.
1167 ScsiWrite16CommandEx (
1168 IN EFI_SCSI_IO_PROTOCOL
*ScsiIo
,
1170 IN OUT VOID
*SenseData
, OPTIONAL
1171 IN OUT UINT8
*SenseDataLength
,
1172 OUT UINT8
*HostAdapterStatus
,
1173 OUT UINT8
*TargetStatus
,
1174 IN OUT VOID
*DataBuffer
, OPTIONAL
1175 IN OUT UINT32
*DataLength
,
1177 IN UINT32 SectorSize
,
1178 IN EFI_EVENT Event OPTIONAL