blob: f7a1e248f798c1b32409d75b85b861926871a3b8 [file] [log] [blame]
Vishal Bhoj82c80712015-12-15 21:13:33 +05301/** @file
2 Smbus Library Services that conduct SMBus transactions and enable the operatation
3 to be replayed during an S3 resume. This library class maps directly on top
4 of the SmbusLib class.
5
6 Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
7
8 This program and the accompanying materials
9 are licensed and made available under the terms and conditions
10 of the BSD License which accompanies this distribution. The
11 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 __S3_SMBUS_LIB_H__
20#define __S3_SMBUS_LIB_H__
21
22/**
23 Executes an SMBUS quick read command, and saves the value in the S3 script to be replayed
24 on S3 resume.
25
26 Executes an SMBUS quick read command on the SMBUS device specified by SmBusAddress.
27 Only the SMBUS slave address field of SmBusAddress is required.
28 If Status is not NULL, then the status of the executed command is returned in Status.
29 If PEC is set in SmBusAddress, then ASSERT().
30 If Command in SmBusAddress is not zero, then ASSERT().
31 If Length in SmBusAddress is not zero, then ASSERT().
32 If any reserved bits of SmBusAddress are set, then ASSERT().
33
34 @param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
35 SMBUS Command, SMBUS Data Length, and PEC.
36 @param[out] Status The return status for the executed command.
37 This is an optional parameter and may be NULL.
38 RETURN_SUCCESS The SMBUS command was executed.
39 RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
40 RETURN_DEVICE_ERROR The request was not completed because a failure
41 was recorded in the Host Status Register bit. Device errors are a result
42 of a transaction collision, illegal command field, unclaimed cycle
43 (host initiated), or bus error (collision).
44 RETURN_UNSUPPORTED The SMBus operation is not supported.
45
46**/
47VOID
48EFIAPI
49S3SmBusQuickRead (
50 IN UINTN SmBusAddress,
51 OUT RETURN_STATUS *Status OPTIONAL
52 );
53
54/**
55 Executes an SMBUS quick write command, and saves the value in the S3 script to be replayed
56 on S3 resume.
57
58 Executes an SMBUS quick write command on the SMBUS device specified by SmBusAddress.
59 Only the SMBUS slave address field of SmBusAddress is required.
60 If Status is not NULL, then the status of the executed command is returned in Status.
61 If PEC is set in SmBusAddress, then ASSERT().
62 If Command in SmBusAddress is not zero, then ASSERT().
63 If Length in SmBusAddress is not zero, then ASSERT().
64 If any reserved bits of SmBusAddress are set, then ASSERT().
65
66 @param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
67 SMBUS Command, SMBUS Data Length, and PEC.
68 @param[out] Status The return status for the executed command.
69 This is an optional parameter and may be NULL.
70 RETURN_SUCCESS The SMBUS command was executed.
71 RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
72 RETURN_DEVICE_ERROR The request was not completed because a failure
73 was recorded in the Host Status Register bit. Device errors are a result
74 of a transaction collision, illegal command field, unclaimed cycle
75 (host initiated), or bus error (collision).
76 RETURN_UNSUPPORTED The SMBus operation is not supported.
77
78**/
79VOID
80EFIAPI
81S3SmBusQuickWrite (
82 IN UINTN SmBusAddress,
83 OUT RETURN_STATUS *Status OPTIONAL
84 );
85
86/**
87 Executes an SMBUS receive byte command, and saves the value in the S3 script to be replayed
88 on S3 resume.
89
90 Executes an SMBUS receive byte command on the SMBUS device specified by SmBusAddress.
91 Only the SMBUS slave address field of SmBusAddress is required.
92 The byte received from the SMBUS is returned.
93 If Status is not NULL, then the status of the executed command is returned in Status.
94 If Command in SmBusAddress is not zero, then ASSERT().
95 If Length in SmBusAddress is not zero, then ASSERT().
96 If any reserved bits of SmBusAddress are set, then ASSERT().
97
98 @param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
99 SMBUS Command, SMBUS Data Length, and PEC.
100 @param[out] Status The return status for the executed command.
101 This is an optional parameter and may be NULL.
102 RETURN_SUCCESS The SMBUS command was executed.
103 RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
104 RETURN_DEVICE_ERROR The request was not completed because a failure
105 was recorded in the Host Status Register bit. Device errors are a result
106 of a transaction collision, illegal command field, unclaimed cycle
107 (host initiated), or bus error (collision).
108 RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
109 RETURN_UNSUPPORTED The SMBus operation is not supported.
110
111 @return The byte received from the SMBUS.
112
113**/
114UINT8
115EFIAPI
116S3SmBusReceiveByte (
117 IN UINTN SmBusAddress,
118 OUT RETURN_STATUS *Status OPTIONAL
119 );
120
121/**
122 Executes an SMBUS send byte command, and saves the value in the S3 script to be replayed
123 on S3 resume.
124
125 Executes an SMBUS send byte command on the SMBUS device specified by SmBusAddress.
126 The byte specified by Value is sent.
127 Only the SMBUS slave address field of SmBusAddress is required. Value is returned.
128 If Status is not NULL, then the status of the executed command is returned in Status.
129 If Command in SmBusAddress is not zero, then ASSERT().
130 If Length in SmBusAddress is not zero, then ASSERT().
131 If any reserved bits of SmBusAddress are set, then ASSERT().
132
133 @param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
134 SMBUS Command, SMBUS Data Length, and PEC.
135 @param[in] Value The 8-bit value to send.
136 @param[out] Status The return status for the executed command.
137 This is an optional parameter and may be NULL.
138 RETURN_SUCCESS The SMBUS command was executed.
139 RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
140 RETURN_DEVICE_ERROR The request was not completed because a failure
141 was recorded in the Host Status Register bit. Device errors are a result
142 of a transaction collision, illegal command field, unclaimed cycle
143 (host initiated), or bus errors (collisions).
144 RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
145 RETURN_UNSUPPORTED The SMBus operation is not supported.
146
147 @return The parameter of Value.
148
149**/
150UINT8
151EFIAPI
152S3SmBusSendByte (
153 IN UINTN SmBusAddress,
154 IN UINT8 Value,
155 OUT RETURN_STATUS *Status OPTIONAL
156 );
157
158/**
159 Executes an SMBUS read data byte command, and saves the value in the S3 script to be replayed
160 on S3 resume.
161
162 Executes an SMBUS read data byte command on the SMBUS device specified by SmBusAddress.
163 Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
164 The 8-bit value read from the SMBUS is returned.
165 If Status is not NULL, then the status of the executed command is returned in Status.
166 If Length in SmBusAddress is not zero, then ASSERT().
167 If any reserved bits of SmBusAddress are set, then ASSERT().
168
169 @param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
170 SMBUS Command, SMBUS Data Length, and PEC.
171 @param[out] Status The return status for the executed command.
172 This is an optional parameter and may be NULL.
173 RETURN_SUCCESS The SMBUS command was executed.
174 RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
175 RETURN_DEVICE_ERROR The request was not completed because a failure
176 was recorded in the Host Status Register bit. Device errors are a result
177 of a transaction collision, illegal command field, unclaimed cycle
178 (host initiated), or bus error (collision).
179 RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
180 RETURN_UNSUPPORTED The SMBus operation is not supported.
181
182 @return The byte read from the SMBUS.
183
184**/
185UINT8
186EFIAPI
187S3SmBusReadDataByte (
188 IN UINTN SmBusAddress,
189 OUT RETURN_STATUS *Status OPTIONAL
190 );
191
192/**
193 Executes an SMBUS write data byte command, and saves the value in the S3 script to be replayed
194 on S3 resume.
195
196 Executes an SMBUS write data byte command on the SMBUS device specified by SmBusAddress.
197 The 8-bit value specified by Value is written.
198 Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
199 Value is returned.
200 If Status is not NULL, then the status of the executed command is returned in Status.
201 If Length in SmBusAddress is not zero, then ASSERT().
202 If any reserved bits of SmBusAddress are set, then ASSERT().
203
204 @param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
205 SMBUS Command, SMBUS Data Length, and PEC.
206 @param[in] Value The 8-bit value to write.
207 @param[out] Status The return status for the executed command.
208 This is an optional parameter and may be NULL.
209 RETURN_SUCCESS The SMBUS command was executed.
210 RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
211 RETURN_DEVICE_ERROR The request was not completed because a failure
212 was recorded in the Host Status Register bit. Device errors are a result
213 of a transaction collision, illegal command field, unclaimed cycle
214 (host initiated), or bus error (collision).
215 RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
216 RETURN_UNSUPPORTED The SMBus operation is not supported.
217
218 @return The parameter of Value.
219
220**/
221UINT8
222EFIAPI
223S3SmBusWriteDataByte (
224 IN UINTN SmBusAddress,
225 IN UINT8 Value,
226 OUT RETURN_STATUS *Status OPTIONAL
227 );
228
229/**
230 Executes an SMBUS read data word command, and saves the value in the S3 script to be replayed
231 on S3 resume.
232
233 Executes an SMBUS read data word command on the SMBUS device specified by SmBusAddress.
234 Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
235 The 16-bit value read from the SMBUS is returned.
236 If Status is not NULL, then the status of the executed command is returned in Status.
237 If Length in SmBusAddress is not zero, then ASSERT().
238 If any reserved bits of SmBusAddress are set, then ASSERT().
239
240 @param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
241 SMBUS Command, SMBUS Data Length, and PEC.
242 @param[out] Status The return status for the executed command.
243 This is an optional parameter and may be NULL.
244 RETURN_SUCCESS The SMBUS command was executed.
245 RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
246 RETURN_DEVICE_ERROR The request was not completed because a failure
247 was recorded in the Host Status Register bit. Device errors are a result
248 of a transaction collision, illegal command field, unclaimed cycle
249 (host initiated), or bus error (collision).
250 RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
251 RETURN_UNSUPPORTED The SMBus operation is not supported.
252
253 @return The byte read from the SMBUS.
254
255**/
256UINT16
257EFIAPI
258S3SmBusReadDataWord (
259 IN UINTN SmBusAddress,
260 OUT RETURN_STATUS *Status OPTIONAL
261 );
262
263/**
264 Executes an SMBUS write data word command, and saves the value in the S3 script to be replayed
265 on S3 resume.
266
267 Executes an SMBUS write data word command on the SMBUS device specified by SmBusAddress.
268 The 16-bit value specified by Value is written.
269 Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
270 Value is returned.
271 If Status is not NULL, then the status of the executed command is returned in Status.
272 If Length in SmBusAddress is not zero, then ASSERT().
273 If any reserved bits of SmBusAddress are set, then ASSERT().
274
275 @param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
276 SMBUS Command, SMBUS Data Length, and PEC.
277 @param[in] Value The 16-bit value to write.
278 @param[out] Status The return status for the executed command.
279 This is an optional parameter and may be NULL.
280 RETURN_SUCCESS The SMBUS command was executed.
281 RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
282 RETURN_DEVICE_ERROR The request was not completed because a failure
283 was recorded in the Host Status Register bit. Device errors are a result
284 of a transaction collision, illegal command field, unclaimed cycle
285 (host initiated), or bus error (collision).
286 RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
287 RETURN_UNSUPPORTED The SMBus operation is not supported.
288
289 @return The parameter of Value.
290
291**/
292UINT16
293EFIAPI
294S3SmBusWriteDataWord (
295 IN UINTN SmBusAddress,
296 IN UINT16 Value,
297 OUT RETURN_STATUS *Status OPTIONAL
298 );
299
300/**
301 Executes an SMBUS process call command, and saves the value in the S3 script to be replayed
302 on S3 resume.
303
304 Executes an SMBUS process call command on the SMBUS device specified by SmBusAddress.
305 The 16-bit value specified by Value is written.
306 Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
307 The 16-bit value returned by the process call command is returned.
308 If Status is not NULL, then the status of the executed command is returned in Status.
309 If Length in SmBusAddress is not zero, then ASSERT().
310 If any reserved bits of SmBusAddress are set, then ASSERT().
311
312 @param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
313 SMBUS Command, SMBUS Data Length, and PEC.
314 @param[in] Value The 16-bit value to write.
315 @param[out] Status The return status for the executed command.
316 This is an optional parameter and may be NULL.
317 RETURN_SUCCESS The SMBUS command was executed.
318 RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
319 RETURN_DEVICE_ERROR The request was not completed because a failure
320 was recorded in the Host Status Register bit. Device errors are a result
321 of a transaction collision, illegal command field, unclaimed cycle
322 (host initiated), or bus error (collision).
323 RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
324 RETURN_UNSUPPORTED The SMBus operation is not supported.
325
326 @return The 16-bit value returned by the process call command.
327
328**/
329UINT16
330EFIAPI
331S3SmBusProcessCall (
332 IN UINTN SmBusAddress,
333 IN UINT16 Value,
334 OUT RETURN_STATUS *Status OPTIONAL
335 );
336
337/**
338 Executes an SMBUS read block command, and saves the value in the S3 script to be replayed
339 on S3 resume.
340
341 Executes an SMBUS read block command on the SMBUS device specified by SmBusAddress.
342 Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
343 Bytes are read from the SMBUS and stored in Buffer.
344 The number of bytes read is returned, and will never return a value larger than 32-bytes.
345 If Status is not NULL, then the status of the executed command is returned in Status.
346 It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
347 SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
348 If Length in SmBusAddress is not zero, then ASSERT().
349 If Buffer is NULL, then ASSERT().
350 If any reserved bits of SmBusAddress are set, then ASSERT().
351
352 @param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
353 SMBUS Command, SMBUS Data Length, and PEC.
354 @param[out] Buffer The pointer to the buffer to store the bytes read from the SMBUS.
355 @param[out] Status The return status for the executed command.
356 This is an optional parameter and may be NULL.
357 RETURN_SUCCESS The SMBUS command was executed.
358 RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
359 RETURN_DEVICE_ERROR The request was not completed because a failure
360 was recorded in the Host Status Register bit. Device errors are a result
361 of a transaction collision, illegal command field, unclaimed cycle
362 (host initiated), or bus error (collision).
363 RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
364 RETURN_UNSUPPORTED The SMBus operation is not supported.
365
366 @return The number of bytes read.
367
368**/
369UINTN
370EFIAPI
371S3SmBusReadBlock (
372 IN UINTN SmBusAddress,
373 OUT VOID *Buffer,
374 OUT RETURN_STATUS *Status OPTIONAL
375 );
376
377/**
378 Executes an SMBUS write block command, and saves the value in the S3 script to be replayed
379 on S3 resume.
380
381 Executes an SMBUS write block command on the SMBUS device specified by SmBusAddress.
382 The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
383 Bytes are written to the SMBUS from Buffer.
384 The number of bytes written is returned, and will never return a value larger than 32-bytes.
385 If Status is not NULL, then the status of the executed command is returned in Status.
386 If Length in SmBusAddress is zero or greater than 32, then ASSERT().
387 If Buffer is NULL, then ASSERT().
388 If any reserved bits of SmBusAddress are set, then ASSERT().
389
390 @param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
391 SMBUS Command, SMBUS Data Length, and PEC.
392 @param[out] Buffer The pointer to the buffer to store the bytes read from the SMBUS.
393 @param[out] Status The return status for the executed command.
394 This is an optional parameter and may be NULL.
395 RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
396 RETURN_DEVICE_ERROR The request was not completed because a failure
397 was recorded in the Host Status Register bit. Device errors are a result
398 of a transaction collision, illegal command field, unclaimed cycle
399 (host initiated), or bus error (collision).
400 RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
401 RETURN_UNSUPPORTED The SMBus operation is not supported.
402
403 @return The number of bytes written.
404
405**/
406UINTN
407EFIAPI
408S3SmBusWriteBlock (
409 IN UINTN SmBusAddress,
410 OUT VOID *Buffer,
411 OUT RETURN_STATUS *Status OPTIONAL
412 );
413
414/**
415 Executes an SMBUS block process call command, and saves the value in the S3 script to be replayed
416 on S3 resume.
417
418 Executes an SMBUS block process call command on the SMBUS device specified by SmBusAddress.
419 The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
420 Bytes are written to the SMBUS from WriteBuffer. Bytes are then read from the SMBUS into ReadBuffer.
421 If Status is not NULL, then the status of the executed command is returned in Status.
422 It is the caller's responsibility to make sure ReadBuffer is large enough for the total number of bytes read.
423 SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
424 If Length in SmBusAddress is zero or greater than 32, then ASSERT().
425 If WriteBuffer is NULL, then ASSERT().
426 If ReadBuffer is NULL, then ASSERT().
427 If any reserved bits of SmBusAddress are set, then ASSERT().
428
429 @param[in] SmBusAddress The address that encodes the SMBUS Slave Address,
430 SMBUS Command, SMBUS Data Length, and PEC.
431 @param[in] WriteBuffer The pointer to the buffer of bytes to write to the SMBUS.
432 @param[out] ReadBuffer The pointer to the buffer of bytes to read from the SMBUS.
433 @param[out] Status The return status for the executed command.
434 This is an optional parameter and may be NULL.
435 RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
436 RETURN_DEVICE_ERROR The request was not completed because a failure
437 was recorded in the Host Status Register bit. Device errors are a result
438 of a transaction collision, illegal command field, unclaimed cycle
439 (host initiated), or bus error (collision).
440 RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
441 RETURN_UNSUPPORTED The SMBus operation is not supported.
442
443 @return The number of bytes written.
444
445**/
446UINTN
447EFIAPI
448S3SmBusBlockProcessCall (
449 IN UINTN SmBusAddress,
450 IN VOID *WriteBuffer,
451 OUT VOID *ReadBuffer,
452 OUT RETURN_STATUS *Status OPTIONAL
453 );
454
455#endif