]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Include/Library/UefiScsiLib.h
MdePkg: Clean up source files
[mirror_edk2.git] / MdePkg / Include / Library / UefiScsiLib.h
1 /** @file
2 Provides the functions to submit Scsi commands defined in SCSI-2 specification for SCSI devices.
3
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.
7
8 Copyright (c) 2006 - 2018, 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
13
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.
16
17 **/
18
19 #ifndef __SCSI_LIB_H__
20 #define __SCSI_LIB_H__
21
22 #include <Protocol/ScsiIo.h>
23
24 /**
25 Execute Test Unit Ready SCSI command on a specific SCSI target.
26
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().
34
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
37 gets returned.
38
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.
66
67 @retval EFI_SUCCESS The command was executed successfully.
68 See HostAdapterStatus, TargetStatus, SenseDataLength,
69 and SenseData in that order for additional status
70 information.
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.
89
90 **/
91 EFI_STATUS
92 EFIAPI
93 ScsiTestUnitReadyCommand (
94 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,
95 IN UINT64 Timeout,
96 IN OUT VOID *SenseData, OPTIONAL
97 IN OUT UINT8 *SenseDataLength,
98 OUT UINT8 *HostAdapterStatus,
99 OUT UINT8 *TargetStatus
100 );
101
102
103 /**
104 Execute Inquiry SCSI command on a specific SCSI target.
105
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().
114
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
117 gets returned.
118
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.
122
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
150 return values.
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.
164
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
178 status information.
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.
188
189 **/
190 EFI_STATUS
191 EFIAPI
192 ScsiInquiryCommand (
193 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,
194 IN UINT64 Timeout,
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
202 );
203
204
205 /**
206 Execute Inquiry SCSI command on a specific SCSI target.
207
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().
216
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
219 gets returned.
220
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.
224
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
252 return values.
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.
268
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
282 status information.
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.
292
293 **/
294 EFI_STATUS
295 EFIAPI
296 ScsiInquiryCommandEx (
297 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,
298 IN UINT64 Timeout,
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,
306 IN UINT8 PageCode
307 );
308
309
310 /**
311 Execute Mode Sense(10) SCSI command on a specific SCSI target.
312
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().
323
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
326 gets returned.
327
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
330 gets returned.
331
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
353 return values.
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
363 and may be NULL.
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
367 buffer.
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.
371
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
378 in DataLength.
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
383 again later.
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.
397
398 **/
399 EFI_STATUS
400 EFIAPI
401 ScsiModeSense10Command (
402 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,
403 IN UINT64 Timeout,
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,
412 IN UINT8 PageCode
413 );
414
415
416
417 /**
418 Execute Request Sense SCSI command on a specific SCSI target.
419
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().
427
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
430 gets returned.
431
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.
438
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.
447
448 **/
449 EFI_STATUS
450 EFIAPI
451 ScsiRequestSenseCommand (
452 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,
453 IN UINT64 Timeout,
454 IN OUT VOID *SenseData, OPTIONAL
455 IN OUT UINT8 *SenseDataLength,
456 OUT UINT8 *HostAdapterStatus,
457 OUT UINT8 *TargetStatus
458 );
459
460
461 /**
462 Execute Read Capacity SCSI command on a specific SCSI target.
463
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().
473
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
476 gets returned.
477
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
480 gets returned.
481
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.
491
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.
503
504 **/
505 EFI_STATUS
506 EFIAPI
507 ScsiReadCapacityCommand (
508 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,
509 IN UINT64 Timeout,
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,
516 IN BOOLEAN Pmi
517 );
518
519
520 /**
521 Execute Read Capacity SCSI 16 command on a specific SCSI target.
522
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().
532
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
535 gets returned.
536
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
539 gets returned.
540
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.
550
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.
562
563 **/
564 EFI_STATUS
565 EFIAPI
566 ScsiReadCapacity16Command (
567 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,
568 IN UINT64 Timeout,
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,
575 IN BOOLEAN Pmi
576 );
577
578
579 /**
580 Execute Read(10) SCSI command on a specific SCSI target.
581
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().
592
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
595 gets returned.
596
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
599 gets returned.
600
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.
611
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.
622
623 **/
624 EFI_STATUS
625 EFIAPI
626 ScsiRead10Command (
627 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,
628 IN UINT64 Timeout,
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,
635 IN UINT32 StartLba,
636 IN UINT32 SectorSize
637 );
638
639
640 /**
641 Execute Write(10) SCSI command on a specific SCSI target.
642
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().
653
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
656 gets returned.
657
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
660 gets returned.
661
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.
672
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.
683
684 **/
685 EFI_STATUS
686 EFIAPI
687 ScsiWrite10Command (
688 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,
689 IN UINT64 Timeout,
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,
696 IN UINT32 StartLba,
697 IN UINT32 SectorSize
698 );
699
700 /**
701 Execute Read(16) SCSI command on a specific SCSI target.
702
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().
713
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
716 gets returned.
717
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
720 gets returned.
721
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.
732
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.
743
744 **/
745 EFI_STATUS
746 EFIAPI
747 ScsiRead16Command (
748 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,
749 IN UINT64 Timeout,
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,
756 IN UINT64 StartLba,
757 IN UINT32 SectorSize
758 );
759
760
761 /**
762 Execute Write(16) SCSI command on a specific SCSI target.
763
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().
774
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
777 gets returned.
778
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
781 gets returned.
782
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.
793
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.
804
805 **/
806 EFI_STATUS
807 EFIAPI
808 ScsiWrite16Command (
809 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,
810 IN UINT64 Timeout,
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,
817 IN UINT64 StartLba,
818 IN UINT32 SectorSize
819 );
820
821
822 /**
823 Execute blocking/non-blocking Read(10) SCSI command on a specific SCSI
824 target.
825
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
836 SCSI command.
837
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().
843
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.
847
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.
851
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
871 completes.
872
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
886 Controller)
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
890 are invalid.
891 @retval EFI_OUT_OF_RESOURCES The request could not be completed due
892 to a lack of resources.
893
894 **/
895 EFI_STATUS
896 EFIAPI
897 ScsiRead10CommandEx (
898 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,
899 IN UINT64 Timeout,
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,
906 IN UINT32 StartLba,
907 IN UINT32 SectorSize,
908 IN EFI_EVENT Event OPTIONAL
909 );
910
911
912 /**
913 Execute blocking/non-blocking Write(10) SCSI command on a specific SCSI
914 target.
915
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
926 SCSI command.
927
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().
933
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.
937
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.
941
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
961 completes.
962
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
976 Controller)
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
980 are invalid.
981 @retval EFI_OUT_OF_RESOURCES The request could not be completed due
982 to a lack of resources.
983
984 **/
985 EFI_STATUS
986 EFIAPI
987 ScsiWrite10CommandEx (
988 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,
989 IN UINT64 Timeout,
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,
996 IN UINT32 StartLba,
997 IN UINT32 SectorSize,
998 IN EFI_EVENT Event OPTIONAL
999 );
1000
1001
1002 /**
1003 Execute blocking/non-blocking Read(16) SCSI command on a specific SCSI
1004 target.
1005
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
1016 SCSI command.
1017
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().
1023
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.
1027
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.
1031
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
1051 completes.
1052
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
1066 Controller)
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
1070 are invalid.
1071 @retval EFI_OUT_OF_RESOURCES The request could not be completed due
1072 to a lack of resources.
1073
1074 **/
1075 EFI_STATUS
1076 EFIAPI
1077 ScsiRead16CommandEx (
1078 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,
1079 IN UINT64 Timeout,
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,
1086 IN UINT64 StartLba,
1087 IN UINT32 SectorSize,
1088 IN EFI_EVENT Event OPTIONAL
1089 );
1090
1091
1092 /**
1093 Execute blocking/non-blocking Write(16) SCSI command on a specific SCSI
1094 target.
1095
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
1106 SCSI command.
1107
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().
1113
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.
1117
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.
1121
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
1141 completes.
1142
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
1156 Controller)
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
1160 are invalid.
1161 @retval EFI_OUT_OF_RESOURCES The request could not be completed due
1162 to a lack of resources.
1163
1164 **/
1165 EFI_STATUS
1166 EFIAPI
1167 ScsiWrite16CommandEx (
1168 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,
1169 IN UINT64 Timeout,
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,
1176 IN UINT64 StartLba,
1177 IN UINT32 SectorSize,
1178 IN EFI_EVENT Event OPTIONAL
1179 );
1180
1181 #endif