- 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