This is an optional parameter and may be NULL.\r
\r
**/\r
-BOOLEAN\r
+VOID\r
EFIAPI\r
SmBusQuickWrite (\r
IN UINTN SmBusAddress,\r
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
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
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
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