From 7ff0459739cd164592638fddfa2621a3b7c2ad2e Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Tue, 30 Jun 2020 11:49:00 +0100 Subject: EmbeddedPkg: Fix build error for MmcDxe The following command line: build -b NOOPT -a IA32 -t VS2017 -p edk2\EmbeddedPkg\EmbeddedPkg.dsc Generates the following error: MmcDxe.lib(Diagnostics.obj) : error LNK2001: unresolved external symbol __allshl MmcDxe.lib(Diagnostics.obj) : error LNK2001: unresolved external symbol __aullshr MmcDxe.lib(MmcBlockIo.obj) : error LNK2001: unresolved external symbol __allmul These erros are due to the use of shift/multiply operations on UINT64 variable on a IA32 architecture. Signed-off-by: Pierre Gondois Reviewed-by: Leif Lindholm --- EmbeddedPkg/Universal/MmcDxe/Diagnostics.c | 10 +++++++--- EmbeddedPkg/Universal/MmcDxe/MmcBlockIo.c | 6 +++--- 2 files changed, 10 insertions(+), 6 deletions(-) (limited to 'EmbeddedPkg') diff --git a/EmbeddedPkg/Universal/MmcDxe/Diagnostics.c b/EmbeddedPkg/Universal/MmcDxe/Diagnostics.c index 20defeb874..49b0690430 100644 --- a/EmbeddedPkg/Universal/MmcDxe/Diagnostics.c +++ b/EmbeddedPkg/Universal/MmcDxe/Diagnostics.c @@ -1,7 +1,7 @@ /** @file Diagnostics Protocol implementation for the MMC DXE driver - Copyright (c) 2011-2014, ARM Limited. All rights reserved. + Copyright (c) 2011-2020, ARM Limited. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent @@ -56,7 +56,7 @@ GenerateRandomBuffer ( UINT64* Buffer64 = (UINT64*)Buffer; for (i = 0; i < (BufferSize >> 3); i++) { - *Buffer64 = i | (~i << 32); + *Buffer64 = i | LShiftU64 (~i, 32); Buffer64++; } } @@ -227,7 +227,11 @@ MmcDriverDiagnosticsRunDiagnostics ( // LBA=10 Size=BlockSize DiagnosticLog (L"MMC Driver Diagnostics - Test: Any Block\n"); - Status = MmcReadWriteDataTest (MmcHostInstance, MmcHostInstance->BlockIo.Media->LastBlock >> 1, MmcHostInstance->BlockIo.Media->BlockSize); + Status = MmcReadWriteDataTest ( + MmcHostInstance, + RShiftU64 (MmcHostInstance->BlockIo.Media->LastBlock, 1), + MmcHostInstance->BlockIo.Media->BlockSize + ); // LBA=LastBlock Size=BlockSize DiagnosticLog (L"MMC Driver Diagnostics - Test: Last Block\n"); diff --git a/EmbeddedPkg/Universal/MmcDxe/MmcBlockIo.c b/EmbeddedPkg/Universal/MmcDxe/MmcBlockIo.c index b508c466d9..2a5d72d4da 100644 --- a/EmbeddedPkg/Universal/MmcDxe/MmcBlockIo.c +++ b/EmbeddedPkg/Universal/MmcDxe/MmcBlockIo.c @@ -1,6 +1,6 @@ /** @file * -* Copyright (c) 2011-2015, ARM Limited. All rights reserved. +* Copyright (c) 2011-2020, ARM Limited. All rights reserved. * * SPDX-License-Identifier: BSD-2-Clause-Patent * @@ -149,7 +149,7 @@ MmcTransferBlock ( if (MmcHostInstance->CardInfo.OCRData.AccessMode & SD_CARD_CAPACITY) { CmdArg = Lba; } else { - CmdArg = Lba * This->Media->BlockSize; + CmdArg = MultU64x32 (Lba, This->Media->BlockSize); } } else { //Set command argument based on the card access mode (Byte mode or Block mode) @@ -157,7 +157,7 @@ MmcTransferBlock ( MMC_OCR_ACCESS_SECTOR) { CmdArg = Lba; } else { - CmdArg = Lba * This->Media->BlockSize; + CmdArg = MultU64x32 (Lba, This->Media->BlockSize); } } -- cgit v1.2.3