]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Include/Library/ScsiLib.h
Use ebp as frame buffer in DivU64x32. Fix a typo in GetPowerOfTwo.
[mirror_edk2.git] / MdePkg / Include / Library / ScsiLib.h
CommitLineData
842f5579
A
1/** @file\r
2 Common Libarary for SCSI\r
fb3df220 3\r
842f5579
A
4 Copyright (c) 2006 - 2007, Intel Corporation\r
5 All rights reserved. This program and the accompanying materials \r
6 are licensed and made available under the terms and conditions of the BSD License \r
7 which accompanies this distribution. The full text of the license may be found at \r
8 http://opensource.org/licenses/bsd-license.php \r
fb3df220 9\r
842f5579
A
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
fb3df220 12\r
842f5579 13**/\r
fb3df220 14\r
15#ifndef _SCSI_LIB_H\r
16#define _SCSI_LIB_H\r
17\r
c7d265a9 18#include <Protocol/ScsiIo.h>\r
19\r
fb3df220 20//\r
21// the time unit is 100ns, since the SCSI I/O defines timeout in 100ns unit.\r
22//\r
23#define EFI_SCSI_STALL_1_MICROSECOND 10\r
24#define EFI_SCSI_STALL_1_MILLISECOND 10000\r
25#define EFI_SCSI_STALL_1_SECOND 10000000\r
26\r
27//\r
28// this macro cannot be directly used by the gBS->Stall(),\r
29// since the value output by this macro is in 100ns unit,\r
30// not 1us unit (1us = 1000ns)\r
31//\r
32#define EfiScsiStallSeconds(a) (a) * EFI_SCSI_STALL_1_SECOND\r
33\r
bf231ea6
A
34\r
35/**
36 Function test the ready status of the SCSI unit.\r
37
38 @param[in] ScsiIo A pointer to SCSI IO protocol.
39 @param[in] Timeout The length of timeout period.
40 @param[out] SenseData A pointer to output sense data.
41 @param[out] SenseDataLength The length of output sense data.
42 @param[out] HostAdapterStatus The status of Host Adapter.
43 @param[out] TargetStatus The status of the target.
44
45 @retval EFI_SUCCESS The status of the unit is tested successfully.\r
46 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, \r
47 but the entire DataBuffer could not be transferred.\r
48 The actual number of bytes transferred is returned\r
49 in InTransferLength.\r
50 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because \r
51 there are too many SCSI Command Packets already \r
52 queued.\r
53 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send \r
54 the SCSI Request Packet.\r
55 @retval EFI_INVALID_PARAMETER The contents of CommandPacket are invalid. \r
56 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet\r
57 is not supported by the SCSI initiator(i.e., SCSI \r
58 Host Controller).\r
59 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI \r
60 Request Packet to execute.\r
61
62**/\r
fb3df220 63EFI_STATUS\r
373b5cf9 64EFIAPI\r
d35be2a4 65ScsiTestUnitReadyCommand (\r
fb3df220 66 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
67 IN UINT64 Timeout,\r
68 OUT VOID *SenseData,\r
69 OUT UINT8 *SenseDataLength,\r
70 OUT UINT8 *HostAdapterStatus,\r
71 OUT UINT8 *TargetStatus\r
bf231ea6
A
72 );\r
73\r
74\r
75/**
76 Function to submit SCSI inquiry command.\r
77
78 @param[in] ScsiIo SCSI IO Protocol to use
79 @param[in] Timeout The length of timeout period.
80 @param[out] SenseData A pointer to output sense data.
81 @param[in,out] SenseDataLength The length of output sense data.
82 @param[out] HostAdapterStatus The status of Host Adapter.
83 @param[out] TargetStatus The status of the target.
84 @param[in,out] InquirydataBuffer A pointer to inquiry data buffer.
85 @param[in,out] InquiryDataLength The length of inquiry data buffer.
86 @param[in] EnableVitalProductData Boolean to enable Vital Product Data.
87
88 @retval EFI_SUCCESS The status of the unit is tested successfully.\r
89 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, \r
90 but the entire DataBuffer could not be transferred.\r
91 The actual number of bytes transferred is returned\r
92 in TransferLength.\r
93 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because \r
94 there are too many SCSI Command Packets already \r
95 queued.\r
96 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send \r
97 the SCSI Request Packet.\r
98 @retval EFI_INVALID_PARAMETER The contents of CommandPacket are invalid. \r
99 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet\r
100 is not supported by the SCSI initiator(i.e., SCSI \r
101 Host Controller).\r
102 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI \r
103 Request Packet to execute.\r
104
105**/\r
fb3df220 106EFI_STATUS\r
373b5cf9 107EFIAPI\r
d35be2a4 108ScsiInquiryCommand (\r
fb3df220 109 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
110 IN UINT64 Timeout,\r
111 IN VOID *SenseData,\r
112 IN OUT UINT8 *SenseDataLength,\r
113 OUT UINT8 *HostAdapterStatus,\r
114 OUT UINT8 *TargetStatus,\r
115 IN OUT VOID *InquiryDataBuffer,\r
116 IN OUT UINT32 *InquiryDataLength,\r
117 IN BOOLEAN EnableVitalProductData\r
bf231ea6
A
118 );\r
119\r
120\r
121/**
122 Function to submit SCSI mode sense 10 command.\r
123
124 @param[in] ScsiIo A pointer to SCSI IO protocol.
125 @param[in] Timeout The length of timeout period.
126 @param[out] SenseData A pointer to output sense data.
127 @param[in,out] SenseDataLength The length of output sense data.
128 @param[out] HostAdapterStatus The status of Host Adapter.
129 @param[out] TargetStatus The status of the target.
130 @param[in] DataBuffer A pointer to input data buffer.
131 @param[in,out] DataLength The length of input data buffer.
132 @param[in] DBDField The DBD Field (Optional).
133 @param[in] PageControl Page Control.
134 @param[in] PageCode Page code.
135
136 @retval EFI_SUCCESS The status of the unit is tested successfully.\r
c7a54f25 137 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, \r
bf231ea6
A
138 but the entire DataBuffer could not be transferred.\r
139 The actual number of bytes transferred is returned\r
140 in TransferLength.\r
141 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because \r
142 there are too many SCSI Command Packets already \r
143 queued.\r
144 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send \r
145 the SCSI Request Packet.\r
146 @retval EFI_INVALID_PARAMETER The contents of CommandPacket are invalid. \r
147 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet\r
148 is not supported by the SCSI initiator(i.e., SCSI \r
149 Host Controller).\r
150 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI \r
151 Request Packet to execute.\r
152
153**/\r
fb3df220 154EFI_STATUS\r
373b5cf9 155EFIAPI\r
d35be2a4 156ScsiModeSense10Command (\r
fb3df220 157 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
158 IN UINT64 Timeout,\r
159 IN VOID *SenseData,\r
160 IN OUT UINT8 *SenseDataLength,\r
161 OUT UINT8 *HostAdapterStatus,\r
162 OUT UINT8 *TargetStatus,\r
163 IN VOID *DataBuffer,\r
164 IN OUT UINT32 *DataLength,\r
165 IN UINT8 DBDField, OPTIONAL\r
166 IN UINT8 PageControl,\r
167 IN UINT8 PageCode\r
bf231ea6
A
168 );\r
169\r
170\r
171\r
172/**
173 Function to submit SCSI request sense command.\r
174 ScsiIo - A pointer to SCSI IO protocol.\r
175 Timeout - The length of timeout period.\r
176 SenseData - A pointer to output sense data.\r
177 SenseDataLength - The length of output sense data.\r
178 HostAdapterStatus - The status of Host Adapter.\r
179 TargetStatus - The status of the target.\r
180
181 @param[in] ScsiIo SCSI IO Protocol to use
182 @param[in] Timeout TODO:
183 @param[out] SenseData TODO:
184 @param[in,out] SenseDataLength TODO:
185 @param[out] HostAdapterStatus TODO:
186 @param[out] TargetStatus TODO:
187
188 @retval EFI_SUCCESS Valid data returned
189 @retval EFI_SUCCESS The status of the unit is tested successfully.\r
c7a54f25 190 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, \r
bf231ea6
A
191 but the entire DataBuffer could not be transferred.\r
192 The actual number of bytes transferred is returned\r
193 in TransferLength.\r
194 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because \r
195 there are too many SCSI Command Packets already \r
196 queued.\r
197 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send \r
198 the SCSI Request Packet.\r
199 @retval EFI_INVALID_PARAMETER The contents of CommandPacket are invalid. \r
200 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet\r
201 is not supported by the SCSI initiator(i.e., SCSI \r
202 Host Controller).\r
203 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI \r
204 Request Packet to execute.\r
205
206**/\r
fb3df220 207EFI_STATUS\r
373b5cf9 208EFIAPI\r
d35be2a4 209ScsiRequestSenseCommand (\r
fb3df220 210 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
211 IN UINT64 Timeout,\r
212 IN VOID *SenseData,\r
213 IN OUT UINT8 *SenseDataLength,\r
214 OUT UINT8 *HostAdapterStatus,\r
215 OUT UINT8 *TargetStatus\r
bf231ea6
A
216 );\r
217\r
218\r
219/**
220 Function to submit read capacity command.\r
221\r
222 @param[in] ScsiIo A pointer to SCSI IO protocol.
223 @param[in] Timeout The length of timeout period.
224 @param[out] SenseData A pointer to output sense data.
225 @param[in,out] SenseDataLength The length of output sense data.
226 @param[out] HostAdapterStatus The status of Host Adapter.
227 @param[out] TargetStatus The status of the target.
228 @param[out] DataBuffer A pointer to a data buffer.
229 @param[in,out] DataLength The length of data buffer.
230 @param[in] PMI Partial medium indicator.
231
232 @retval EFI_SUCCESS The status of the unit is tested successfully.\r
c7a54f25 233 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, \r
bf231ea6
A
234 but the entire DataBuffer could not be transferred.\r
235 The actual number of bytes transferred is returned\r
236 in TransferLength.\r
237 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because \r
238 there are too many SCSI Command Packets already \r
239 queued.\r
240 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send \r
241 the SCSI Request Packet.\r
242 @retval EFI_INVALID_PARAMETER The contents of CommandPacket are invalid. \r
243 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet\r
244 is not supported by the SCSI initiator(i.e., SCSI \r
245 Host Controller).\r
246 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI \r
247 Request Packet to execute.\r
248
249**/\r
fb3df220 250EFI_STATUS\r
d35be2a4 251ScsiReadCapacityCommand (\r
fb3df220 252 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
253 IN UINT64 Timeout,\r
254 IN VOID *SenseData,\r
255 IN OUT UINT8 *SenseDataLength,\r
256 OUT UINT8 *HostAdapterStatus,\r
257 OUT UINT8 *TargetStatus,\r
258 OUT VOID *DataBuffer,\r
259 IN OUT UINT32 *DataLength,\r
260 IN BOOLEAN PMI\r
bf231ea6
A
261 );\r
262\r
263\r
264/**
265 Function to submit read 10 command.\r
266
267 @param[in] ScsiIo A pointer to SCSI IO protocol.
268 @param[in] Timeout The length of timeout period.
269 @param[out] SenseData A pointer to output sense data.
270 @param[in,out] SenseDataLength The length of output sense data.
271 @param[out] HostAdapterStatus The status of Host Adapter.
272 @param[out] TargetStatus The status of the target.
273 @param[out] DataBuffer Read 10 command data.
274 @param[in,out] DataLength The length of data buffer.
275 @param[in] StartLba The start address of LBA.
276 @param[in] SectorSize The sector size.
277
278 @retval EFI_SUCCESS The status of the unit is tested successfully.\r
c7a54f25 279 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, \r
bf231ea6
A
280 but the entire DataBuffer could not be transferred.\r
281 The actual number of bytes transferred is returned\r
282 in TransferLength.\r
283 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because \r
284 there are too many SCSI Command Packets already \r
285 queued.\r
286 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send \r
287 the SCSI Request Packet.\r
288 @retval EFI_INVALID_PARAMETER The contents of CommandPacket are invalid. \r
289 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet\r
290 is not supported by the SCSI initiator(i.e., SCSI \r
291 Host Controller).\r
292 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI \r
293 Request Packet to execute.\r
294
295**/\r
fb3df220 296EFI_STATUS\r
373b5cf9 297EFIAPI\r
d35be2a4 298ScsiRead10Command (\r
fb3df220 299 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
300 IN UINT64 Timeout,\r
301 IN VOID *SenseData,\r
302 IN OUT UINT8 *SenseDataLength,\r
303 OUT UINT8 *HostAdapterStatus,\r
304 OUT UINT8 *TargetStatus,\r
305 OUT VOID *DataBuffer,\r
306 IN OUT UINT32 *DataLength,\r
307 IN UINT32 StartLba,\r
308 IN UINT32 SectorSize\r
bf231ea6
A
309 );\r
310\r
311\r
312/**
313 Function to submit SCSI write 10 command.\r
314
315 @param[in] ScsiIo SCSI IO Protocol to use
316 @param[in] Timeout The length of timeout period.
317 @param[out] SenseData A pointer to output sense data.
318 @param[in,out] SenseDataLength The length of output sense data.
319 @param[out] HostAdapterStatus The status of Host Adapter.
320 @param[out] TargetStatus The status of the target.
321 @param[out] DataBuffer A pointer to a data buffer.
322 @param[in,out] DataLength The length of data buffer.
323 @param[in] StartLba The start address of LBA.
324 @param[in] SectorSize The sector size.
325
326 @retval EFI_SUCCESS The status of the unit is tested successfully.\r
c7a54f25 327 @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, \r
bf231ea6
A
328 but the entire DataBuffer could not be transferred.\r
329 The actual number of bytes transferred is returned\r
330 in InTransferLength.\r
331 @retval EFI_NOT_READY The SCSI Request Packet could not be sent because \r
332 there are too many SCSI Command Packets already \r
333 queued.\r
334 @retval EFI_DEVICE_ERROR A device error occurred while attempting to send \r
335 the SCSI Request Packet.\r
336 @retval EFI_INVALID_PARAMETER The contents of CommandPacket are invalid. \r
337 @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet\r
338 is not supported by the SCSI initiator(i.e., SCSI \r
339 Host Controller).\r
340 @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI \r
341 Request Packet to execute.\r
342
343**/\r
fb3df220 344EFI_STATUS\r
373b5cf9 345EFIAPI\r
d35be2a4 346ScsiWrite10Command (\r
fb3df220 347 IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
348 IN UINT64 Timeout,\r
349 IN VOID *SenseData,\r
350 IN OUT UINT8 *SenseDataLength,\r
351 OUT UINT8 *HostAdapterStatus,\r
352 OUT UINT8 *TargetStatus,\r
353 OUT VOID *DataBuffer,\r
354 IN OUT UINT32 *DataLength,\r
355 IN UINT32 StartLba,\r
356 IN UINT32 SectorSize\r
bf231ea6 357 );\r
fb3df220 358\r
fb3df220 359\r
360#endif\r