]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/PeiSmbusLib/SmbusLib.c
PeiSmbusLib & DxeSmbusLib
[mirror_edk2.git] / MdePkg / Library / PeiSmbusLib / SmbusLib.c
index da29fab5a3d1585cee842cc4b35bc99e99a58267..e71f11bef81b7c535b1222197eebc9952f5cf037 100644 (file)
@@ -66,7 +66,7 @@ SmBusQuickRead (
                           This is an optional parameter and may be NULL.\r
 \r
 **/\r
-BOOLEAN\r
+VOID\r
 EFIAPI\r
 SmBusQuickWrite (\r
   IN  UINTN                     SmBusAddress,\r
@@ -79,10 +79,6 @@ SmBusQuickWrite (
   ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);\r
 \r
   InternalSmBusExec (EfiSmbusQuickWrite, SmBusAddress, 0, NULL, Status);\r
-  //\r
-  // Bugbug: Undefined return value in spec\r
-  //\r
-  return TRUE;\r
 }\r
 \r
 /**\r
@@ -381,7 +377,7 @@ SmBusReadBlock (
   ASSERT (SMBUS_LIB_LENGTH (SmBusAddress)    == 0);\r
   ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);\r
 \r
-  return InternalSmBusExec (EfiSmbusReadBlock, SmBusAddress, 0x1f, Buffer, Status);\r
+  return InternalSmBusExec (EfiSmbusReadBlock, SmBusAddress, 0x20, Buffer, Status);\r
 }\r
 \r
 /**\r
@@ -413,10 +409,13 @@ SmBusWriteBlock (
   OUT RETURN_STATUS  *Status        OPTIONAL\r
   )\r
 {\r
+  UINTN  Length;\r
+\r
   ASSERT (Buffer != NULL);\r
   ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);\r
 \r
-  return InternalSmBusExec (EfiSmbusWriteBlock, SmBusAddress, SMBUS_LIB_LENGTH (SmBusAddress), Buffer, Status);\r
+  Length = SMBUS_LIB_LENGTH (SmBusAddress) + 1;\r
+  return InternalSmBusExec (EfiSmbusWriteBlock, SmBusAddress, Length, Buffer, Status);\r
 }\r
 \r
 /**\r
@@ -447,151 +446,21 @@ UINTN
 EFIAPI\r
 SmBusBlockProcessCall (\r
   IN  UINTN          SmBusAddress,\r
-  OUT VOID           *OutBuffer,\r
+  IN  VOID           *OutBuffer,\r
   OUT VOID           *InBuffer,\r
   OUT RETURN_STATUS  *Status        OPTIONAL\r
   )\r
 {\r
+  UINTN   Length;\r
+\r
   ASSERT (InBuffer  != NULL);\r
   ASSERT (OutBuffer != NULL);\r
   ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);\r
 \r
+  Length   = SMBUS_LIB_LENGTH (SmBusAddress) + 1;\r
   //\r
-  // BugBug: Not sure whether it's all right.\r
+  // Assuming that InBuffer is large enough to save another memory copy.\r
   //\r
-  InternalSmBusExec (EfiSmbusWriteBlock, SmBusAddress, SMBUS_LIB_LENGTH (SmBusAddress), OutBuffer, Status);\r
-\r
-  return InternalSmBusExec (EfiSmbusReadBlock, SmBusAddress, 1, InBuffer, Status);\r
-}\r
-\r
-/**\r
-  Enumerates the SMBUS and assigns slave addresses.\r
-\r
-  Executes the SMBUS enumeration algorithm and assigns a valid address to all SMBUS slave devices.\r
-  The total number of SMBUS slave devices detected is returned.\r
-  The status of the executed command is returned.\r
-  If Slave Address in SmBusAddress is not zero, then ASSERT().\r
-  If Command in SmBusAddress is not zero, then ASSERT().\r
-  If Length in SmBusAddress is not zero, then ASSERT().\r
-  If PEC in SmBusAddress is set, then ASSERT().\r
-  If any reserved bits of SmBusAddress are set, then ASSERT().\r
-\r
-  @param  SmBusAddress        Address that encodes the SMBUS Slave Address,\r
-                              SMBUS Command, SMBUS Data Length, and PEC.\r
-\r
-  @retval RETURN_SUCCESS      The SMBUS command was executed.\r
-  @retval RETURN_TIMEOUT      A timeout occurred while executing the SMBUS command.\r
-  @retval RETURN_DEVICE_ERROR The request was not completed because a failure reflected\r
-                              in the Host Status Register bit.\r
-                              Device errors are a result of a transaction collision, illegal command field,\r
-                              unclaimed cycle (host initiated), or bus errors (collisions).\r
-\r
-**/\r
-RETURN_STATUS\r
-EFIAPI\r
-SmBusArpAll (\r
-  IN UINTN  SmBusAddress\r
-  )\r
-{\r
-  ASSERT (!SMBUS_LIB_PEC (SmBusAddress));\r
-  ASSERT (SMBUS_LIB_COMMAND (SmBusAddress)       == 0);\r
-  ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress)     == 0);\r
-  ASSERT (SMBUS_LIB_LENGTH (SmBusAddress)        == 0);\r
-  ASSERT (SMBUS_LIB_SLAVE_ADDRESS (SmBusAddress) == 0);\r
-\r
-  return InternalSmBusArpDevice (SmBusAddress, NULL);\r
-}\r
-\r
-/**\r
-  Assigns an SMBUS slave addresses.\r
-\r
-  Assigns the SMBUS device specified by Uuid the slave address specified by SmBusAddress.\r
-  The status of the executed command is returned.\r
-  If Command in SmBusAddress is not zero, then ASSERT().\r
-  If Length in SmBusAddress is not zero, then ASSERT().\r
-  If PEC in SmBusAddress is set, then ASSERT().\r
-  If any reserved bits of SmBusAddress are set, then ASSERT().\r
-\r
-  @param  SmBusAddress        Address that encodes the SMBUS Slave Address,\r
-                              SMBUS Command, SMBUS Data Length, and PEC.\r
-  @param  Uuid                Pointer to the UUID of the device to assign a slave address.\r
-\r
-  @retval RETURN_SUCCESS      The SMBUS command was executed.\r
-  @retval RETURN_TIMEOUT      A timeout occurred while executing the SMBUS command.\r
-  @retval RETURN_DEVICE_ERROR The request was not completed because a failure reflected\r
-                              in the Host Status Register bit.\r
-                              Device errors are a result of a transaction collision, illegal command field,\r
-                              unclaimed cycle (host initiated), or bus errors (collisions).\r
-\r
-**/\r
-RETURN_STATUS\r
-EFIAPI\r
-SmBusArpDevice (\r
-  IN UINTN       SmBusAddress,\r
-  IN CONST GUID  *Uuid\r
-  )\r
-{\r
-  ASSERT (!SMBUS_LIB_PEC (SmBusAddress));\r
-  ASSERT (SMBUS_LIB_COMMAND (SmBusAddress)   == 0);\r
-  ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);\r
-  ASSERT (SMBUS_LIB_LENGTH (SmBusAddress)    == 0);\r
-\r
-  return InternalSmBusArpDevice (SmBusAddress, Uuid);\r
-}\r
-\r
-/**\r
-  Retrieves the UUID associated with an SMBUS slave device.\r
-\r
-  Retrieves the UUID associated with the slave address specified\r
-  by SmBusAddress and returns the UUID in Uuid.\r
-  The status of the executed command is returned.\r
-  If Command in SmBusAddress is not zero, then ASSERT().\r
-  If Length in SmBusAddress is not zero, then ASSERT().\r
-  If PEC in SmBusAddress is set, then ASSERT().\r
-  If Uuid is NULL, then ASSERT().\r
-  If any reserved bits of SmBusAddress are set, then ASSERT().\r
-\r
-  @param  SmBusAddress        Address that encodes the SMBUS Slave Address,\r
-                              SMBUS Command, SMBUS Data Length, and PEC.\r
-  @param  Uuid                Pointer to the UUID retrieved from the SMBUS slave device.\r
-\r
-  @retval RETURN_SUCCESS      The SMBUS command was executed.\r
-  @retval RETURN_TIMEOUT      A timeout occurred while executing the SMBUS command.\r
-  @retval RETURN_DEVICE_ERROR The request was not completed because a failure reflected\r
-                              in the Host Status Register bit.\r
-                              Device errors are a result of a transaction collision, illegal command field,\r
-                              unclaimed cycle (host initiated), or bus errors (collisions).\r
-\r
-**/\r
-RETURN_STATUS\r
-EFIAPI\r
-SmBusGetUuid (\r
-  IN  UINTN  SmBusAddress,\r
-  OUT GUID   *Uuid\r
-  )\r
-{\r
-  UINTN                     Length;\r
-  EFI_SMBUS_DEVICE_MAP      *SmBusDeviceMap;\r
-  RETURN_STATUS             ReturnStatus;\r
-  UINTN                     SmbusDeviceAddress;\r
-  UINTN                     Index;\r
-\r
-  ASSERT (Uuid != NULL);\r
-  ASSERT (!SMBUS_LIB_PEC (SmBusAddress));\r
-  ASSERT (SMBUS_LIB_COMMAND (SmBusAddress)   == 0);\r
-  ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);\r
-  ASSERT (SMBUS_LIB_LENGTH (SmBusAddress)    == 0);\r
-\r
-  ReturnStatus = InternalGetArpMap (&Length, &SmBusDeviceMap);\r
-  if (!RETURN_ERROR (ReturnStatus)) {\r
-    SmbusDeviceAddress = SMBUS_LIB_SLAVE_ADDRESS (SmBusAddress);\r
-    for (Index = 0; Index < Length; Index++) {\r
-      if (SmBusDeviceMap[Index].SmbusDeviceAddress.SmbusDeviceAddress == SmbusDeviceAddress) {\r
-        CopyMem (Uuid, &SmBusDeviceMap[Index].SmbusDeviceUdid, sizeof (EFI_SMBUS_UDID));\r
-        break;\r
-      }\r
-    }\r
-  }\r
-\r
-  return ReturnStatus;\r
+  InBuffer = CopyMem (InBuffer, OutBuffer, Length);\r
+  return InternalSmBusExec (EfiSmbusBWBRProcessCall, SmBusAddress, Length, InBuffer, Status);\r
 }\r