From abea19dbe10720a4ef4f9e688996d71a493cebe9 Mon Sep 17 00:00:00 2001 From: qhuang8 Date: Tue, 25 Apr 2006 05:51:23 +0000 Subject: =?UTF-8?q?PeiSmbusLib=20&=20DxeSmbusLib=20=09Remove=20Arp=20Relat?= =?UTF-8?q?ed=20interfaces=20=09Change=20the=20return=20type=20of=20SmbusQ?= =?UTF-8?q?uickWrite=20from=20=E2=80=9CBOOLEAN=E2=80=9D=20to=20=E2=80=9CVO?= =?UTF-8?q?ID=E2=80=9D=20=09Complete=20interface=20SmBusBlockProcessCall()?= =?UTF-8?q?=20=09Make=20the=20PEC=20bit=20=E2=80=9Cbit=2021=E2=80=9D=20of?= =?UTF-8?q?=20SMBUS=20address.=20If=20data=20show=20that=20MSB=20helps=20t?= =?UTF-8?q?o=20save=20code=20size=20in=20BaseSmbusLib,=20we=20may=20simply?= =?UTF-8?q?=20redefine=20it=20to=20be=20MAX=5FBIT.=20UefiLib=20=09Modify?= =?UTF-8?q?=20the=20interfaces=20in=20UefiNotTiano.c=20to=20sync=20with=20?= =?UTF-8?q?spec=20MemoryAllocationLib=20=09Add=20extra=20checking=20in=20?= =?UTF-8?q?=E2=80=9CAligned=E2=80=9D=20Memory=20services=20to=20prevent=20?= =?UTF-8?q?=E2=80=9CAllocationSize=20+=20OverAllocation=E2=80=9D=20overflo?= =?UTF-8?q?w=20in=20DxeMemoryAllocationLib.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@23 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/DxeSmbusLib/DxeSmbusLib.c | 70 +----------- MdePkg/Library/DxeSmbusLib/InternalSmbusLib.h | 66 ++--------- MdePkg/Library/DxeSmbusLib/SmbusLib.c | 157 +++----------------------- 3 files changed, 22 insertions(+), 271 deletions(-) (limited to 'MdePkg/Library/DxeSmbusLib') diff --git a/MdePkg/Library/DxeSmbusLib/DxeSmbusLib.c b/MdePkg/Library/DxeSmbusLib/DxeSmbusLib.c index 4c888370eb..2991350e24 100644 --- a/MdePkg/Library/DxeSmbusLib/DxeSmbusLib.c +++ b/MdePkg/Library/DxeSmbusLib/DxeSmbusLib.c @@ -43,11 +43,7 @@ SmbusLibConstructor ( { EFI_STATUS Status; - Status = gBS->LocateProtocol ( - &gEfiCpuIoProtocolGuid, - NULL, - (VOID**) &mSmbus - ); + Status = gBS->LocateProtocol (&gEfiSmbusProtocolGuid, NULL, (VOID**) &mSmbus); ASSERT_EFI_ERROR (Status); ASSERT (mSmbus != NULL); @@ -80,7 +76,7 @@ InternalSmBusExec ( IN EFI_SMBUS_OPERATION SmbusOperation, IN UINTN SmBusAddress, IN UINTN Length, - IN VOID *Buffer, + IN OUT VOID *Buffer, OUT RETURN_STATUS *Status OPTIONAL ) { @@ -104,65 +100,3 @@ InternalSmBusExec ( return Length; } - -/** - Assigns an SMBUS slave addresses. - - Assigns the SMBUS device specified by Uuid the slave address specified by SmBusAddress. - The status of the executed command is returned. - - @param SmBusAddress Address that encodes the SMBUS Slave Address, - SMBUS Command, SMBUS Data Length, and PEC. - @param Uuid Pointer to the UUID of the device to assign a slave address. - It will assign to all SMBUS slave devices if it is NULL. - - @retval RETURN_SUCCESS The SMBUS command was executed. - @retval RETURN_TIMEOUT A timeout occurred while executing the SMBUS command. - @retval RETURN_DEVICE_ERROR The request was not completed because a failure reflected - in the Host Status Register bit. - Device errors are a result of a transaction collision, illegal command field, - unclaimed cycle (host initiated), or bus errors (collisions). - -**/ -RETURN_STATUS -InternalSmBusArpDevice ( - IN UINTN SmBusAddress, - IN CONST GUID *Uuid OPTIONAL - ) -{ - EFI_SMBUS_DEVICE_ADDRESS SmbusDeviceAddress; - - SmbusDeviceAddress.SmbusDeviceAddress = SMBUS_LIB_SLAVE_ADDRESS (SmBusAddress); - return (RETURN_STATUS) mSmbus->ArpDevice ( - mSmbus, - (BOOLEAN) (Uuid == NULL), - (EFI_SMBUS_UDID *) Uuid, - &SmbusDeviceAddress - ); -} - -/** - Retrieves the mapping of all the SMBus devices. - - The GetArpMap() function returns the mapping of all the SMBus devices - that are enumerated by the SMBus host driver. - - @param Length Size of the buffer that contains the SMBus device map. - @param SmbusDeviceMap The pointer to the device map as enumerated by the SMBus controller driver. - - @retval RETURN_SUCCESS The SMBUS command was executed. - @retval RETURN_TIMEOUT A timeout occurred while executing the SMBUS command. - @retval RETURN_DEVICE_ERROR The request was not completed because a failure reflected - in the Host Status Register bit. - Device errors are a result of a transaction collision, illegal command field, - unclaimed cycle (host initiated), or bus errors (collisions). - -**/ -RETURN_STATUS -InternalGetArpMap ( - OUT UINTN *Length, - OUT EFI_SMBUS_DEVICE_MAP **SmbusDeviceMap - ) -{ - return (RETURN_STATUS) mSmbus->GetArpMap (mSmbus, Length, SmbusDeviceMap); -} diff --git a/MdePkg/Library/DxeSmbusLib/InternalSmbusLib.h b/MdePkg/Library/DxeSmbusLib/InternalSmbusLib.h index 3c0b597fc5..bd6d57f2d3 100644 --- a/MdePkg/Library/DxeSmbusLib/InternalSmbusLib.h +++ b/MdePkg/Library/DxeSmbusLib/InternalSmbusLib.h @@ -18,11 +18,11 @@ Module Name: SmbusLib.c #ifndef __INTERNAL_SMBUS_LIB_H #define __INTERNAL_SMBUS_LIB_H -#define SMBUS_LIB_PEC(SmBusAddress) ((BOOLEAN) ((SmBusAddress) & 0x01)) -#define SMBUS_LIB_SLAVE_ADDRESS(SmBusAddress) (((SmBusAddress) >> 1) & 0x7f) -#define SMBUS_LIB_COMMAND(SmBusAddress) (((SmBusAddress) >> 8) & 0xff) -#define SMBUS_LIB_LENGTH(SmBusAddress) (((SmBusAddress) >> 16) & 0x1f) -#define SMBUS_LIB_RESEARVED(SmBusAddress) (((SmBusAddress) >> 21)) +#define SMBUS_LIB_SLAVE_ADDRESS(SmBusAddress) (((SmBusAddress) >> 1) & 0x7f) +#define SMBUS_LIB_COMMAND(SmBusAddress) (((SmBusAddress) >> 8) & 0xff) +#define SMBUS_LIB_LENGTH(SmBusAddress) (((SmBusAddress) >> 16) & 0x1f) +#define SMBUS_LIB_PEC(SmBusAddress) ((BOOLEAN) (((SmBusAddress) & SMBUS_LIB_PEC_BIT) != 0)) +#define SMBUS_LIB_RESEARVED(SmBusAddress) ((SmBusAddress) & ~(((1 << 21) - 2) | SMBUS_LIB_PEC_BIT)) // // Declaration for internal functions @@ -45,7 +45,7 @@ Module Name: SmbusLib.c @param Status Return status for the executed command. This is an optional parameter and may be NULL. - @return The actual number of bytes that are executed for this operation.. + @return The actual number of bytes that are executed for this operation. **/ UINTN @@ -53,60 +53,8 @@ InternalSmBusExec ( IN EFI_SMBUS_OPERATION SmbusOperation, IN UINTN SmBusAddress, IN UINTN Length, - IN VOID *Buffer, + IN OUT VOID *Buffer, OUT RETURN_STATUS *Status OPTIONAL ); -/** - Assigns an SMBUS slave addresses. - - Assigns the SMBUS device specified by Uuid the slave address specified by SmBusAddress. - The status of the executed command is returned. - If Command in SmBusAddress is not zero, then ASSERT(). - If Length in SmBusAddress is not zero, then ASSERT(). - If PEC in SmBusAddress is set, then ASSERT(). - If any reserved bits of SmBusAddress are set, then ASSERT(). - - @param SmBusAddress Address that encodes the SMBUS Slave Address, - SMBUS Command, SMBUS Data Length, and PEC. - @param Uuid Pointer to the UUID of the device to assign a slave address. - It will assign to all SMBUS slave devices if it is NULL. - - @retval RETURN_SUCCESS The SMBUS command was executed. - @retval RETURN_TIMEOUT A timeout occurred while executing the SMBUS command. - @retval RETURN_DEVICE_ERROR The request was not completed because a failure reflected - in the Host Status Register bit. - Device errors are a result of a transaction collision, illegal command field, - unclaimed cycle (host initiated), or bus errors (collisions). - -**/ -RETURN_STATUS -InternalSmBusArpDevice ( - IN UINTN SmBusAddress, - IN CONST GUID *Uuid OPTIONAL - ); - -/** - Retrieves the mapping of all the SMBus devices. - - The GetArpMap() function returns the mapping of all the SMBus devices - that are enumerated by the SMBus host driver. - - @param Length Size of the buffer that contains the SMBus device map. - @param SmbusDeviceMap The pointer to the device map as enumerated by the SMBus controller driver. - - @retval RETURN_SUCCESS The SMBUS command was executed. - @retval RETURN_TIMEOUT A timeout occurred while executing the SMBUS command. - @retval RETURN_DEVICE_ERROR The request was not completed because a failure reflected - in the Host Status Register bit. - Device errors are a result of a transaction collision, illegal command field, - unclaimed cycle (host initiated), or bus errors (collisions). - -**/ -RETURN_STATUS -InternalGetArpMap ( - OUT UINTN *Length, - OUT EFI_SMBUS_DEVICE_MAP **SmbusDeviceMap - ); - #endif diff --git a/MdePkg/Library/DxeSmbusLib/SmbusLib.c b/MdePkg/Library/DxeSmbusLib/SmbusLib.c index da29fab5a3..e71f11bef8 100644 --- a/MdePkg/Library/DxeSmbusLib/SmbusLib.c +++ b/MdePkg/Library/DxeSmbusLib/SmbusLib.c @@ -66,7 +66,7 @@ SmBusQuickRead ( This is an optional parameter and may be NULL. **/ -BOOLEAN +VOID EFIAPI SmBusQuickWrite ( IN UINTN SmBusAddress, @@ -79,10 +79,6 @@ SmBusQuickWrite ( ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0); InternalSmBusExec (EfiSmbusQuickWrite, SmBusAddress, 0, NULL, Status); - // - // Bugbug: Undefined return value in spec - // - return TRUE; } /** @@ -381,7 +377,7 @@ SmBusReadBlock ( ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0); ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0); - return InternalSmBusExec (EfiSmbusReadBlock, SmBusAddress, 0x1f, Buffer, Status); + return InternalSmBusExec (EfiSmbusReadBlock, SmBusAddress, 0x20, Buffer, Status); } /** @@ -413,10 +409,13 @@ SmBusWriteBlock ( OUT RETURN_STATUS *Status OPTIONAL ) { + UINTN Length; + ASSERT (Buffer != NULL); ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0); - return InternalSmBusExec (EfiSmbusWriteBlock, SmBusAddress, SMBUS_LIB_LENGTH (SmBusAddress), Buffer, Status); + Length = SMBUS_LIB_LENGTH (SmBusAddress) + 1; + return InternalSmBusExec (EfiSmbusWriteBlock, SmBusAddress, Length, Buffer, Status); } /** @@ -447,151 +446,21 @@ UINTN EFIAPI SmBusBlockProcessCall ( IN UINTN SmBusAddress, - OUT VOID *OutBuffer, + IN VOID *OutBuffer, OUT VOID *InBuffer, OUT RETURN_STATUS *Status OPTIONAL ) { + UINTN Length; + ASSERT (InBuffer != NULL); ASSERT (OutBuffer != NULL); ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0); + Length = SMBUS_LIB_LENGTH (SmBusAddress) + 1; // - // BugBug: Not sure whether it's all right. + // Assuming that InBuffer is large enough to save another memory copy. // - InternalSmBusExec (EfiSmbusWriteBlock, SmBusAddress, SMBUS_LIB_LENGTH (SmBusAddress), OutBuffer, Status); - - return InternalSmBusExec (EfiSmbusReadBlock, SmBusAddress, 1, InBuffer, Status); -} - -/** - Enumerates the SMBUS and assigns slave addresses. - - Executes the SMBUS enumeration algorithm and assigns a valid address to all SMBUS slave devices. - The total number of SMBUS slave devices detected is returned. - The status of the executed command is returned. - If Slave Address in SmBusAddress is not zero, then ASSERT(). - If Command in SmBusAddress is not zero, then ASSERT(). - If Length in SmBusAddress is not zero, then ASSERT(). - If PEC in SmBusAddress is set, then ASSERT(). - If any reserved bits of SmBusAddress are set, then ASSERT(). - - @param SmBusAddress Address that encodes the SMBUS Slave Address, - SMBUS Command, SMBUS Data Length, and PEC. - - @retval RETURN_SUCCESS The SMBUS command was executed. - @retval RETURN_TIMEOUT A timeout occurred while executing the SMBUS command. - @retval RETURN_DEVICE_ERROR The request was not completed because a failure reflected - in the Host Status Register bit. - Device errors are a result of a transaction collision, illegal command field, - unclaimed cycle (host initiated), or bus errors (collisions). - -**/ -RETURN_STATUS -EFIAPI -SmBusArpAll ( - IN UINTN SmBusAddress - ) -{ - ASSERT (!SMBUS_LIB_PEC (SmBusAddress)); - ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0); - ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0); - ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0); - ASSERT (SMBUS_LIB_SLAVE_ADDRESS (SmBusAddress) == 0); - - return InternalSmBusArpDevice (SmBusAddress, NULL); -} - -/** - Assigns an SMBUS slave addresses. - - Assigns the SMBUS device specified by Uuid the slave address specified by SmBusAddress. - The status of the executed command is returned. - If Command in SmBusAddress is not zero, then ASSERT(). - If Length in SmBusAddress is not zero, then ASSERT(). - If PEC in SmBusAddress is set, then ASSERT(). - If any reserved bits of SmBusAddress are set, then ASSERT(). - - @param SmBusAddress Address that encodes the SMBUS Slave Address, - SMBUS Command, SMBUS Data Length, and PEC. - @param Uuid Pointer to the UUID of the device to assign a slave address. - - @retval RETURN_SUCCESS The SMBUS command was executed. - @retval RETURN_TIMEOUT A timeout occurred while executing the SMBUS command. - @retval RETURN_DEVICE_ERROR The request was not completed because a failure reflected - in the Host Status Register bit. - Device errors are a result of a transaction collision, illegal command field, - unclaimed cycle (host initiated), or bus errors (collisions). - -**/ -RETURN_STATUS -EFIAPI -SmBusArpDevice ( - IN UINTN SmBusAddress, - IN CONST GUID *Uuid - ) -{ - ASSERT (!SMBUS_LIB_PEC (SmBusAddress)); - ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0); - ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0); - ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0); - - return InternalSmBusArpDevice (SmBusAddress, Uuid); -} - -/** - Retrieves the UUID associated with an SMBUS slave device. - - Retrieves the UUID associated with the slave address specified - by SmBusAddress and returns the UUID in Uuid. - The status of the executed command is returned. - If Command in SmBusAddress is not zero, then ASSERT(). - If Length in SmBusAddress is not zero, then ASSERT(). - If PEC in SmBusAddress is set, then ASSERT(). - If Uuid is NULL, then ASSERT(). - If any reserved bits of SmBusAddress are set, then ASSERT(). - - @param SmBusAddress Address that encodes the SMBUS Slave Address, - SMBUS Command, SMBUS Data Length, and PEC. - @param Uuid Pointer to the UUID retrieved from the SMBUS slave device. - - @retval RETURN_SUCCESS The SMBUS command was executed. - @retval RETURN_TIMEOUT A timeout occurred while executing the SMBUS command. - @retval RETURN_DEVICE_ERROR The request was not completed because a failure reflected - in the Host Status Register bit. - Device errors are a result of a transaction collision, illegal command field, - unclaimed cycle (host initiated), or bus errors (collisions). - -**/ -RETURN_STATUS -EFIAPI -SmBusGetUuid ( - IN UINTN SmBusAddress, - OUT GUID *Uuid - ) -{ - UINTN Length; - EFI_SMBUS_DEVICE_MAP *SmBusDeviceMap; - RETURN_STATUS ReturnStatus; - UINTN SmbusDeviceAddress; - UINTN Index; - - ASSERT (Uuid != NULL); - ASSERT (!SMBUS_LIB_PEC (SmBusAddress)); - ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0); - ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0); - ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0); - - ReturnStatus = InternalGetArpMap (&Length, &SmBusDeviceMap); - if (!RETURN_ERROR (ReturnStatus)) { - SmbusDeviceAddress = SMBUS_LIB_SLAVE_ADDRESS (SmBusAddress); - for (Index = 0; Index < Length; Index++) { - if (SmBusDeviceMap[Index].SmbusDeviceAddress.SmbusDeviceAddress == SmbusDeviceAddress) { - CopyMem (Uuid, &SmBusDeviceMap[Index].SmbusDeviceUdid, sizeof (EFI_SMBUS_UDID)); - break; - } - } - } - - return ReturnStatus; + InBuffer = CopyMem (InBuffer, OutBuffer, Length); + return InternalSmBusExec (EfiSmbusBWBRProcessCall, SmBusAddress, Length, InBuffer, Status); } -- cgit v1.2.3