• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2 Null implementation of SmBusLib class library.
3 
4 Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution.  The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php.
9 
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 
13 **/
14 
15 #include <Base.h>
16 #include <Library/SmbusLib.h>
17 #include <Library/DebugLib.h>
18 
19 /**
20   Executes an SMBUS quick read command.
21 
22   Executes an SMBUS quick read command on the SMBUS device specified by SmBusAddress.
23   Only the SMBUS slave address field of SmBusAddress is required.
24   If Status is not NULL, then the status of the executed command is returned in Status.
25   If PEC is set in SmBusAddress, then ASSERT().
26   If Command in SmBusAddress is not zero, then ASSERT().
27   If Length in SmBusAddress is not zero, then ASSERT().
28   If any reserved bits of SmBusAddress are set, then ASSERT().
29 
30   @param  SmBusAddress  Address that encodes the SMBUS Slave Address,
31                         SMBUS Command, SMBUS Data Length, and PEC.
32   @param  Status        Return status for the executed command.
33                         This is an optional parameter and may be NULL.
34                         RETURN_SUCCESS  The SMBUS command was executed.
35                         RETURN_TIMEOUT  A timeout occurred while executing the SMBUS command.
36                         RETURN_DEVICE_ERROR The request was not completed because a failure
37                         reflected in the Host Status Register bit.  Device errors are a result
38                         of a transaction collision, illegal command field, unclaimed cycle
39                         (host initiated), or bus errors (collisions).
40                         RETURN_UNSUPPORTED  The SMBus operation is not supported.
41 
42 **/
43 VOID
44 EFIAPI
SmBusQuickRead(IN UINTN SmBusAddress,OUT RETURN_STATUS * Status OPTIONAL)45 SmBusQuickRead (
46   IN  UINTN                     SmBusAddress,
47   OUT RETURN_STATUS             *Status       OPTIONAL
48   )
49 {
50   ASSERT (!SMBUS_LIB_PEC (SmBusAddress));
51   ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
52   ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
53   ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
54   if (Status != NULL) {
55     *Status = RETURN_UNSUPPORTED;
56   }
57 }
58 
59 /**
60   Executes an SMBUS quick write command.
61 
62   Executes an SMBUS quick write command on the SMBUS device specified by SmBusAddress.
63   Only the SMBUS slave address field of SmBusAddress is required.
64   If Status is not NULL, then the status of the executed command is returned in Status.
65   If PEC is set in SmBusAddress, then ASSERT().
66   If Command in SmBusAddress is not zero, then ASSERT().
67   If Length in SmBusAddress is not zero, then ASSERT().
68   If any reserved bits of SmBusAddress are set, then ASSERT().
69 
70   @param  SmBusAddress  Address that encodes the SMBUS Slave Address,
71                         SMBUS Command, SMBUS Data Length, and PEC.
72   @param  Status        Return status for the executed command.
73                         This is an optional parameter and may be NULL.
74                         RETURN_SUCCESS The SMBUS command was executed.
75                         RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
76                         RETURN_DEVICE_ERROR  The request was not completed because a failure
77                         reflected in the Host Status Register bit.  Device errors are a result
78                         of a transaction collision, illegal command field, unclaimed cycle
79                         (host initiated), or bus errors (collisions).
80                         RETURN_UNSUPPORTED  The SMBus operation is not supported.
81 
82 **/
83 VOID
84 EFIAPI
SmBusQuickWrite(IN UINTN SmBusAddress,OUT RETURN_STATUS * Status OPTIONAL)85 SmBusQuickWrite (
86   IN  UINTN                     SmBusAddress,
87   OUT RETURN_STATUS             *Status       OPTIONAL
88   )
89 {
90   ASSERT (!SMBUS_LIB_PEC (SmBusAddress));
91   ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
92   ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
93   ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
94   if (Status != NULL) {
95     *Status = RETURN_UNSUPPORTED;
96   }
97 }
98 
99 /**
100   Executes an SMBUS receive byte command.
101 
102   Executes an SMBUS receive byte command on the SMBUS device specified by SmBusAddress.
103   Only the SMBUS slave address field of SmBusAddress is required.
104   The byte received from the SMBUS is returned.
105   If Status is not NULL, then the status of the executed command is returned in Status.
106   If Command in SmBusAddress is not zero, then ASSERT().
107   If Length in SmBusAddress is not zero, then ASSERT().
108   If any reserved bits of SmBusAddress are set, then ASSERT().
109 
110   @param  SmBusAddress  Address that encodes the SMBUS Slave Address,
111                         SMBUS Command, SMBUS Data Length, and PEC.
112   @param  Status        Return status for the executed command.
113                         This is an optional parameter and may be NULL.
114                         RETURN_SUCCESS The SMBUS command was executed.
115                         RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
116                         RETURN_DEVICE_ERROR  The request was not completed because a failure
117                         reflected in the Host Status Register bit.  Device errors are a result
118                         of a transaction collision, illegal command field, unclaimed cycle
119                         (host initiated), or bus errors (collisions).
120                         RETURN_CRC_ERROR  The checksum is not correct (PEC is incorrect)
121                         RETURN_UNSUPPORTED  The SMBus operation is not supported.
122 
123   @return The byte received from the SMBUS.
124 
125 **/
126 UINT8
127 EFIAPI
SmBusReceiveByte(IN UINTN SmBusAddress,OUT RETURN_STATUS * Status OPTIONAL)128 SmBusReceiveByte (
129   IN  UINTN          SmBusAddress,
130   OUT RETURN_STATUS  *Status        OPTIONAL
131   )
132 {
133   ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
134   ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
135   ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
136   if (Status != NULL) {
137     *Status = RETURN_UNSUPPORTED;
138   }
139   return 0;
140 }
141 
142 /**
143   Executes an SMBUS send byte command.
144 
145   Executes an SMBUS send byte command on the SMBUS device specified by SmBusAddress.
146   The byte specified by Value is sent.
147   Only the SMBUS slave address field of SmBusAddress is required.  Value is returned.
148   If Status is not NULL, then the status of the executed command is returned in Status.
149   If Command in SmBusAddress is not zero, then ASSERT().
150   If Length in SmBusAddress is not zero, then ASSERT().
151   If any reserved bits of SmBusAddress are set, then ASSERT().
152 
153   @param  SmBusAddress  Address that encodes the SMBUS Slave Address,
154                         SMBUS Command, SMBUS Data Length, and PEC.
155   @param  Value         The 8-bit value to send.
156   @param  Status        Return status for the executed command.
157                         This is an optional parameter and may be NULL.
158                         RETURN_SUCCESS The SMBUS command was executed.
159                         RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
160                         RETURN_DEVICE_ERROR  The request was not completed because a failure
161                         reflected in the Host Status Register bit.  Device errors are a result
162                         of a transaction collision, illegal command field, unclaimed cycle
163                         (host initiated), or bus errors (collisions).
164                         RETURN_CRC_ERROR  The checksum is not correct (PEC is incorrect)
165                         RETURN_UNSUPPORTED  The SMBus operation is not supported.
166 
167   @return The parameter of Value.
168 
169 **/
170 UINT8
171 EFIAPI
SmBusSendByte(IN UINTN SmBusAddress,IN UINT8 Value,OUT RETURN_STATUS * Status OPTIONAL)172 SmBusSendByte (
173   IN  UINTN          SmBusAddress,
174   IN  UINT8          Value,
175   OUT RETURN_STATUS  *Status        OPTIONAL
176   )
177 {
178   ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
179   ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
180   ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
181   if (Status != NULL) {
182     *Status = RETURN_UNSUPPORTED;
183   }
184   return 0;
185 }
186 
187 /**
188   Executes an SMBUS read data byte command.
189 
190   Executes an SMBUS read data byte command on the SMBUS device specified by SmBusAddress.
191   Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
192   The 8-bit value read from the SMBUS is returned.
193   If Status is not NULL, then the status of the executed command is returned in Status.
194   If Length in SmBusAddress is not zero, then ASSERT().
195   If any reserved bits of SmBusAddress are set, then ASSERT().
196 
197   @param  SmBusAddress  Address that encodes the SMBUS Slave Address,
198                         SMBUS Command, SMBUS Data Length, and PEC.
199   @param  Status        Return status for the executed command.
200                         This is an optional parameter and may be NULL.
201                         RETURN_SUCCESS The SMBUS command was executed.
202                         RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
203                         RETURN_DEVICE_ERROR  The request was not completed because a failure
204                         reflected in the Host Status Register bit.  Device errors are a result
205                         of a transaction collision, illegal command field, unclaimed cycle
206                         (host initiated), or bus errors (collisions).
207                         RETURN_CRC_ERROR  The checksum is not correct (PEC is incorrect)
208                         RETURN_UNSUPPORTED  The SMBus operation is not supported.
209 
210   @return The byte read from the SMBUS.
211 
212 **/
213 UINT8
214 EFIAPI
SmBusReadDataByte(IN UINTN SmBusAddress,OUT RETURN_STATUS * Status OPTIONAL)215 SmBusReadDataByte (
216   IN  UINTN          SmBusAddress,
217   OUT RETURN_STATUS  *Status        OPTIONAL
218   )
219 {
220   ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
221   ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
222   if (Status != NULL) {
223     *Status = RETURN_UNSUPPORTED;
224   }
225   return 0;
226 }
227 
228 /**
229   Executes an SMBUS write data byte command.
230 
231   Executes an SMBUS write data byte command on the SMBUS device specified by SmBusAddress.
232   The 8-bit value specified by Value is written.
233   Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
234   Value is returned.
235   If Status is not NULL, then the status of the executed command is returned in Status.
236   If Length in SmBusAddress is not zero, then ASSERT().
237   If any reserved bits of SmBusAddress are set, then ASSERT().
238 
239   @param  SmBusAddress  Address that encodes the SMBUS Slave Address,
240                         SMBUS Command, SMBUS Data Length, and PEC.
241   @param  Value         The 8-bit value to write.
242   @param  Status        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                         reflected 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 errors (collisions).
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 parameter of Value.
254 
255 **/
256 UINT8
257 EFIAPI
SmBusWriteDataByte(IN UINTN SmBusAddress,IN UINT8 Value,OUT RETURN_STATUS * Status OPTIONAL)258 SmBusWriteDataByte (
259   IN  UINTN          SmBusAddress,
260   IN  UINT8          Value,
261   OUT RETURN_STATUS  *Status        OPTIONAL
262   )
263 {
264   ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
265   ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
266   if (Status != NULL) {
267     *Status = RETURN_UNSUPPORTED;
268   }
269   return 0;
270 }
271 
272 /**
273   Executes an SMBUS read data word command.
274 
275   Executes an SMBUS read data word command on the SMBUS device specified by SmBusAddress.
276   Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
277   The 16-bit value read from the SMBUS is returned.
278   If Status is not NULL, then the status of the executed command is returned in Status.
279   If Length in SmBusAddress is not zero, then ASSERT().
280   If any reserved bits of SmBusAddress are set, then ASSERT().
281 
282   @param  SmBusAddress  Address that encodes the SMBUS Slave Address,
283                         SMBUS Command, SMBUS Data Length, and PEC.
284   @param  Status        Return status for the executed command.
285                         This is an optional parameter and may be NULL.
286                         RETURN_SUCCESS The SMBUS command was executed.
287                         RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
288                         RETURN_DEVICE_ERROR  The request was not completed because a failure
289                         reflected in the Host Status Register bit.  Device errors are a result
290                         of a transaction collision, illegal command field, unclaimed cycle
291                         (host initiated), or bus errors (collisions).
292                         RETURN_CRC_ERROR  The checksum is not correct (PEC is incorrect)
293                         RETURN_UNSUPPORTED  The SMBus operation is not supported.
294 
295   @return The byte read from the SMBUS.
296 
297 **/
298 UINT16
299 EFIAPI
SmBusReadDataWord(IN UINTN SmBusAddress,OUT RETURN_STATUS * Status OPTIONAL)300 SmBusReadDataWord (
301   IN  UINTN          SmBusAddress,
302   OUT RETURN_STATUS  *Status        OPTIONAL
303   )
304 {
305   ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
306   ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
307   if (Status != NULL) {
308     *Status = RETURN_UNSUPPORTED;
309   }
310   return 0;
311 }
312 
313 /**
314   Executes an SMBUS write data word command.
315 
316   Executes an SMBUS write data word command on the SMBUS device specified by SmBusAddress.
317   The 16-bit value specified by Value is written.
318   Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
319   Value is returned.
320   If Status is not NULL, then the status of the executed command is returned in Status.
321   If Length in SmBusAddress is not zero, then ASSERT().
322   If any reserved bits of SmBusAddress are set, then ASSERT().
323 
324   @param  SmBusAddress  Address that encodes the SMBUS Slave Address,
325                         SMBUS Command, SMBUS Data Length, and PEC.
326   @param  Value         The 16-bit value to write.
327   @param  Status        Return status for the executed command.
328                         This is an optional parameter and may be NULL.
329                         RETURN_SUCCESS The SMBUS command was executed.
330                         RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
331                         RETURN_DEVICE_ERROR  The request was not completed because a failure
332                         reflected in the Host Status Register bit.  Device errors are a result
333                         of a transaction collision, illegal command field, unclaimed cycle
334                         (host initiated), or bus errors (collisions).
335                         RETURN_CRC_ERROR  The checksum is not correct (PEC is incorrect)
336                         RETURN_UNSUPPORTED  The SMBus operation is not supported.
337 
338   @return The parameter of Value.
339 
340 **/
341 UINT16
342 EFIAPI
SmBusWriteDataWord(IN UINTN SmBusAddress,IN UINT16 Value,OUT RETURN_STATUS * Status OPTIONAL)343 SmBusWriteDataWord (
344   IN  UINTN          SmBusAddress,
345   IN  UINT16         Value,
346   OUT RETURN_STATUS  *Status        OPTIONAL
347   )
348 {
349   ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
350   ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
351   if (Status != NULL) {
352     *Status = RETURN_UNSUPPORTED;
353   }
354   return 0;
355 }
356 
357 /**
358   Executes an SMBUS process call command.
359 
360   Executes an SMBUS process call command on the SMBUS device specified by SmBusAddress.
361   The 16-bit value specified by Value is written.
362   Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
363   The 16-bit value returned by the process call command is returned.
364   If Status is not NULL, then the status of the executed command is returned in Status.
365   If Length in SmBusAddress is not zero, then ASSERT().
366   If any reserved bits of SmBusAddress are set, then ASSERT().
367 
368   @param  SmBusAddress  Address that encodes the SMBUS Slave Address,
369                         SMBUS Command, SMBUS Data Length, and PEC.
370   @param  Value         The 16-bit value to write.
371   @param  Status        Return status for the executed command.
372                         This is an optional parameter and may be NULL.
373                         RETURN_SUCCESS The SMBUS command was executed.
374                         RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
375                         RETURN_DEVICE_ERROR  The request was not completed because a failure
376                         reflected in the Host Status Register bit.  Device errors are a result
377                         of a transaction collision, illegal command field, unclaimed cycle
378                         (host initiated), or bus errors (collisions).
379                         RETURN_CRC_ERROR  The checksum is not correct (PEC is incorrect)
380                         RETURN_UNSUPPORTED  The SMBus operation is not supported.
381 
382   @return The 16-bit value returned by the process call command.
383 
384 **/
385 UINT16
386 EFIAPI
SmBusProcessCall(IN UINTN SmBusAddress,IN UINT16 Value,OUT RETURN_STATUS * Status OPTIONAL)387 SmBusProcessCall (
388   IN  UINTN          SmBusAddress,
389   IN  UINT16         Value,
390   OUT RETURN_STATUS  *Status        OPTIONAL
391   )
392 {
393   ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
394   ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
395   if (Status != NULL) {
396     *Status = RETURN_UNSUPPORTED;
397   }
398   return 0;
399 }
400 
401 /**
402   Executes an SMBUS read block command.
403 
404   Executes an SMBUS read block command on the SMBUS device specified by SmBusAddress.
405   Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
406   Bytes are read from the SMBUS and stored in Buffer.
407   The number of bytes read is returned, and will never return a value larger than 32-bytes.
408   If Status is not NULL, then the status of the executed command is returned in Status.
409   It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
410   SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
411   If Length in SmBusAddress is not zero, then ASSERT().
412   If Buffer is NULL, then ASSERT().
413   If any reserved bits of SmBusAddress are set, then ASSERT().
414 
415   @param  SmBusAddress  Address that encodes the SMBUS Slave Address,
416                         SMBUS Command, SMBUS Data Length, and PEC.
417   @param  Buffer        Pointer to the buffer to store the bytes read from the SMBUS.
418   @param  Status        Return status for the executed command.
419                         This is an optional parameter and may be NULL.
420                         RETURN_SUCCESS The SMBUS command was executed.
421                         RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
422                         RETURN_DEVICE_ERROR  The request was not completed because a failure
423                         reflected in the Host Status Register bit.  Device errors are a result
424                         of a transaction collision, illegal command field, unclaimed cycle
425                         (host initiated), or bus errors (collisions).
426                         RETURN_CRC_ERROR  The checksum is not correct (PEC is incorrect)
427                         RETURN_UNSUPPORTED  The SMBus operation is not supported.
428 
429   @return The number of bytes read.
430 
431 **/
432 UINTN
433 EFIAPI
SmBusReadBlock(IN UINTN SmBusAddress,OUT VOID * Buffer,OUT RETURN_STATUS * Status OPTIONAL)434 SmBusReadBlock (
435   IN  UINTN          SmBusAddress,
436   OUT VOID           *Buffer,
437   OUT RETURN_STATUS  *Status        OPTIONAL
438   )
439 {
440   ASSERT (Buffer != NULL);
441   ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
442   ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
443   if (Status != NULL) {
444     *Status = RETURN_UNSUPPORTED;
445   }
446   return 0;
447 }
448 
449 /**
450   Executes an SMBUS write block command.
451 
452   Executes an SMBUS write block command on the SMBUS device specified by SmBusAddress.
453   The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
454   Bytes are written to the SMBUS from Buffer.
455   The number of bytes written is returned, and will never return a value larger than 32-bytes.
456   If Status is not NULL, then the status of the executed command is returned in Status.
457   If Length in SmBusAddress is zero or greater than 32, then ASSERT().
458   If Buffer is NULL, then ASSERT().
459   If any reserved bits of SmBusAddress are set, then ASSERT().
460 
461   @param  SmBusAddress  Address that encodes the SMBUS Slave Address,
462                         SMBUS Command, SMBUS Data Length, and PEC.
463   @param  Buffer        Pointer to the buffer to store the bytes read from the SMBUS.
464   @param  Status        Return status for the executed command.
465                         This is an optional parameter and may be NULL.
466                         RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
467                         RETURN_DEVICE_ERROR  The request was not completed because a failure
468                         reflected in the Host Status Register bit.  Device errors are a result
469                         of a transaction collision, illegal command field, unclaimed cycle
470                         (host initiated), or bus errors (collisions).
471                         RETURN_CRC_ERROR  The checksum is not correct (PEC is incorrect)
472                         RETURN_UNSUPPORTED  The SMBus operation is not supported.
473 
474   @return The number of bytes written.
475 
476 **/
477 UINTN
478 EFIAPI
SmBusWriteBlock(IN UINTN SmBusAddress,OUT VOID * Buffer,OUT RETURN_STATUS * Status OPTIONAL)479 SmBusWriteBlock (
480   IN  UINTN          SmBusAddress,
481   OUT VOID           *Buffer,
482   OUT RETURN_STATUS  *Status        OPTIONAL
483   )
484 {
485   ASSERT (Buffer != NULL);
486   ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) >= 1);
487   ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) <= 32);
488   ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
489   if (Status != NULL) {
490     *Status = RETURN_UNSUPPORTED;
491   }
492   return 0;
493 }
494 
495 /**
496   Executes an SMBUS block process call command.
497 
498   Executes an SMBUS block process call command on the SMBUS device specified by SmBusAddress.
499   The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
500   Bytes are written to the SMBUS from WriteBuffer.  Bytes are then read from the SMBUS into ReadBuffer.
501   If Status is not NULL, then the status of the executed command is returned in Status.
502   It is the caller's responsibility to make sure ReadBuffer is large enough for the total number of bytes read.
503   SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
504   If Length in SmBusAddress is zero or greater than 32, then ASSERT().
505   If WriteBuffer is NULL, then ASSERT().
506   If ReadBuffer is NULL, then ASSERT().
507   If any reserved bits of SmBusAddress are set, then ASSERT().
508 
509   @param  SmBusAddress  Address that encodes the SMBUS Slave Address,
510                         SMBUS Command, SMBUS Data Length, and PEC.
511   @param  WriteBuffer   Pointer to the buffer of bytes to write to the SMBUS.
512   @param  ReadBuffer    Pointer to the buffer of bytes to read from the SMBUS.
513   @param  Status        Return status for the executed command.
514                         This is an optional parameter and may be NULL.
515                         RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
516                         RETURN_DEVICE_ERROR  The request was not completed because a failure
517                         reflected in the Host Status Register bit.  Device errors are a result
518                         of a transaction collision, illegal command field, unclaimed cycle
519                         (host initiated), or bus errors (collisions).
520                         RETURN_CRC_ERROR  The checksum is not correct (PEC is incorrect)
521                         RETURN_UNSUPPORTED  The SMBus operation is not supported.
522 
523   @return The number of bytes written.
524 
525 **/
526 UINTN
527 EFIAPI
SmBusBlockProcessCall(IN UINTN SmBusAddress,IN VOID * WriteBuffer,OUT VOID * ReadBuffer,OUT RETURN_STATUS * Status OPTIONAL)528 SmBusBlockProcessCall (
529   IN  UINTN          SmBusAddress,
530   IN  VOID           *WriteBuffer,
531   OUT VOID           *ReadBuffer,
532   OUT RETURN_STATUS  *Status        OPTIONAL
533   )
534 {
535   ASSERT (WriteBuffer != NULL);
536   ASSERT (ReadBuffer  != NULL);
537   ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) >= 1);
538   ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) <= 32);
539   ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
540   if (Status != NULL) {
541     *Status = RETURN_UNSUPPORTED;
542   }
543   return 0;
544 }
545