16 Commits

Author SHA1 Message Date
Michał Żygowski
2db9c66ac1 Vlv2TbltDevicePkg: Hook into HECI protocol for debugging
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
2024-04-08 15:59:24 +02:00
Michał Żygowski
d932fd287c Vlv2TbltDevicePkg/Build_IFWI.sh: Return exit codes on failure
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
2024-04-08 15:58:27 +02:00
Michał Żygowski
e37ff7e97a Vlv2TbltDevicePkg/PlatformPkgGcc.fdf: Make the debug build fit
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
2024-04-08 15:57:41 +02:00
Michał Żygowski
0988477a9e README.md: Add build instructions
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
2024-03-26 11:17:58 +01:00
Michał Żygowski
6529a9dbf7 .gitignore: Add more directories to ignore
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
2024-03-25 17:43:27 +01:00
Michał Żygowski
352c885d27 Vlv2TbltDevicePkg: Make the Boot Manager behave similarly to Dasharo
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
2024-03-25 17:42:12 +01:00
Michał Żygowski
e1c5cc9169 Vlv2TbltDevicePkg: Include TXE Tools in 8MB build as well
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
2024-03-25 17:41:28 +01:00
Michał Żygowski
62c60f9206 Vlv2TbltDevicePkg/PlatformPkgGcc.fdf: Include iPXE in the build
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
2024-03-25 17:39:06 +01:00
Michał Żygowski
62d9069c39 Vlv2TbltDevicePkg/Build_IFWI.sh: Build iPXE
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
2024-03-25 17:38:29 +01:00
Michał Żygowski
7d31ce69bb Shrink TXE region to 2MB
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
2024-03-25 17:38:04 +01:00
Michał Żygowski
fdb8a55886 .gitignore: Add gitignore file
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
2024-03-22 15:54:47 +01:00
Michał Żygowski
86f67c315e Prepare 16M builds with TXE Tools
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
2024-03-22 15:54:13 +01:00
Michał Żygowski
1bd1d19998 FW/PlatformBuildLab/Max/edk2-platforms/Vlv2TbltDevicePkg/bld_vlv.sh: Use most resent TXE image
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
2024-03-19 18:30:57 +01:00
Michał Żygowski
32f59cbab0 FW/PlatformBuildLab/Max: Enable IA32 GCC builds for MinnowMax
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
2024-03-19 18:19:29 +01:00
Michał Żygowski
c74eb5da1e FW/PlatformBuildLab/Max: Fix the MinnowBaord X64 build with edk2-docker:1.1.0
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
2024-03-19 15:27:03 +01:00
Michał Żygowski
928a6306ac FW/PlatformBuildLab/Max/edk2/BaseTools: Fix BaseTools building and usage
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
2024-03-19 14:27:24 +01:00
77 changed files with 3479 additions and 390 deletions

11
.gitignore vendored Normal file
View File

@@ -0,0 +1,11 @@
FW/PlatformBuildLab/Max/edk2/Conf
FW/PlatformBuildLab/Max/Build
FW/PlatformBuildLab/Max/edk2-platforms/Vlv2TbltDevicePkg/AutoPlatformCFG.txt
FW/PlatformBuildLab/Max/ipxe/
FW/PlatformBuildLab/Max/silicon/Vlv2MiscBinariesPkg/SEC/Ia32/
FW/PlatformBuildLab/Max/silicon/Vlv2MiscBinariesPkg/SEC/X64/
.bash_history
*.rom
*.ROM
*.bin

View File

@@ -427,7 +427,7 @@ Scope(\_SB)
// Check for a specific OS which supports _OSI.
If(CondRefOf(\_OSI,Local0))
If(CondRefOf(\_OSI))
{
// Linux returns _OSI = TRUE for numerous Windows
// strings so that it is fully compatible with

View File

@@ -1,2 +1,2 @@
DEFINE X64_CONFIG = TRUE
DEFINE ENBDT_PF_BUILD = TRUE
DEFINE X64_CONFIG = TRUE
DEFINE ENBDT_PF_BUILD = TRUE

View File

@@ -33,6 +33,7 @@ Build_Flags=
Stitch_Flags=
Arch=X64
PLATFORM_PACKAGE=Vlv2TbltDevicePkg
CleanBuild=0
## Parse Optional arguments
if [ "$1" == "/?" ]; then
@@ -50,6 +51,7 @@ for (( i=1; i<=$#; ))
shift
elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/C" ]; then
Build_Flags="$Build_Flags /c"
CleanBuild=1
shift
elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/ECP" ]; then
Build_Flags="$Build_Flags /ecp"
@@ -64,6 +66,10 @@ for (( i=1; i<=$#; ))
Arch=X64
Build_Flags="$Build_Flags /x64"
shift
elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/IA32" ]; then
Arch=IA32
Build_Flags="$Build_Flags /IA32"
shift
elif [ "$1" == "/nG" ]; then
Stitch_Flags="$Stitch_Flags /nG"
shift
@@ -79,11 +85,15 @@ for (( i=1; i<=$#; ))
elif [ "$1" == "/yL" ]; then
Build_Flags="$Build_Flags /yL"
shift
elif [ "$1" == "/16M" ]; then
Build_Flags="$Build_Flags /16M"
shift
else
break
fi
done
## Require 2 input parameters
if [ "$2" == "" ]; then
echo "Not Enough Arguments Provided"
@@ -104,6 +114,39 @@ else
IFWI_Suffix="/S $3"
fi
if [ $Arch == "X64" ]; then
## Build iPXE
if [ ! -d ../../ipxe ]; then
git clone http://git.ipxe.org/ipxe.git ../../ipxe
if [ $? != 0 ];then
echo "Failed to clone ipxe"
exit
fi
fi
if [ ! -f ../../ipxe/src/bin-x86_64-efi-sb/ipxe.efi ]; then
cd ../../ipxe || exit 1
git reset --hard HEAD || exit 1
git clean -df || exit 1
git checkout 77b07ea4fdc259d7253c6f9df2beda6e6c7a9d85 || exit 1
if [ $CleanBuild == "1" ]; then
make clean || exit 1
fi
sed -i 's|//#define\s*IMAGE_SCRIPT.*|#define IMAGE_SCRIPT|' "src/config/general.h"
if [ ! -f dasharo.ipxe ]; then
wget http://raw.githubusercontent.com/Dasharo/dasharo-blobs/main/dasharo/dasharo.ipxe || exit 1
fi
sed -i 's|.*DOWNLOAD_PROTO_HTTPS|#define DOWNLOAD_PROTO_HTTPS|g' "src/config/general.h"
make -C src bin-x86_64-efi-sb/ipxe.efi EMBED=$PWD/dasharo.ipxe BUILD_ID_CMD="echo 0x1234567890"
if [ ! -f src/bin-x86_64-efi-sb/ipxe.efi ]; then
echo "Failed to build ipxe"
exit 1
fi
cd ../edk2-platforms/$PLATFORM_PACKAGE
fi
fi
## Go to root directory
cd ..

View File

@@ -3,15 +3,24 @@
These data is intent to decouple FVB driver with FV header.
Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
@@ -35,6 +44,9 @@ Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
#define NV_STORAGE_BASE_ADDRESS FixedPcdGet32(PcdFlashNvStorageVariableBase)
#define SYSTEM_NV_BLOCK_NUM ((FixedPcdGet32(PcdFlashNvStorageVariableSize)+ FixedPcdGet32(PcdFlashNvStorageFtwWorkingSize) + FixedPcdGet32(PcdFlashNvStorageFtwSpareSize))/ FVB_MEDIA_BLOCK_SIZE)
#define FV_TXE_TOOLS_BASE_ADDRESS FixedPcdGet32(PcdFlashTxeToolsBase)
#define TXE_TOOLS_BLOCK_NUM (FixedPcdGet32(PcdFlashTxeToolsSize) / FVB_MEDIA_BLOCK_SIZE)
typedef struct {
EFI_PHYSICAL_ADDRESS BaseAddress;
EFI_FIRMWARE_VOLUME_HEADER FvbInfo;
@@ -137,6 +149,36 @@ EFI_FVB2_MEDIA_INFO mPlatformFvbMediaInfo[] = {
0
}
}
},
//
// TXE Tools FVB
//
{
FV_TXE_TOOLS_BASE_ADDRESS,
{
{0,}, //ZeroVector[16]
EFI_FIRMWARE_FILE_SYSTEM2_GUID,
FVB_MEDIA_BLOCK_SIZE * TXE_TOOLS_BLOCK_NUM,
EFI_FVH_SIGNATURE,
0x0004feff, // check MdePkg/Include/Pi/PiFirmwareVolume.h for details on EFI_FVB_ATTRIBUTES_2
sizeof (EFI_FIRMWARE_VOLUME_HEADER) + sizeof (EFI_FV_BLOCK_MAP_ENTRY),
0, //CheckSum which will be calucated dynamically.
0, //ExtHeaderOffset
{0,}, //Reserved[1]
2, //Revision
{
{
TXE_TOOLS_BLOCK_NUM,
FVB_MEDIA_BLOCK_SIZE,
}
}
},
{
{
0,
0
}
}
}
};

View File

@@ -2,15 +2,24 @@
# This driver implement the EFI_FIRMWARE_VOLUMEN_PROTOCOL.
#
# Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
#
# This program and the accompanying materials are licensed and made available under
# the terms and conditions of the BSD License that accompanies this distribution.
# The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php.
#
# This program and the accompanying materials are licensed and made available under
# the terms and conditions of the BSD License that accompanies this distribution.
# The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php.
#
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
#
#
#
@@ -72,7 +81,9 @@
gPlatformModuleTokenSpaceGuid.PcdFlashFvMainBase
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase
gPlatformModuleTokenSpaceGuid.PcdFlashFvRecoveryBase
gPlatformModuleTokenSpaceGuid.PcdFlashTxeToolsBase
gPlatformModuleTokenSpaceGuid.PcdFlashTxeToolsSize
[FeaturePcd]
gPlatformModuleTokenSpaceGuid.PcdFeatureRecoveryDisabled

View File

@@ -5,15 +5,24 @@
It depends on which Flash Device Library to be linked with this driver.
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
@@ -1008,7 +1017,7 @@ FvbInitialize (
UINTN Idx;
UINT32 MaxLbaSize;
EFI_BOOT_MODE BootMode;
EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
UINT32 PlatformFvBaseAddress[4];
UINT32 PlatformFvBaseAddressCount;
//
@@ -1023,10 +1032,11 @@ FvbInitialize (
PlatformFvBaseAddressCount = 1;
PlatformFvBaseAddress[0] = PcdGet32 (PcdFlashNvStorageVariableBase);
} else {
//
PlatformFvBaseAddressCount = 4;
PlatformFvBaseAddress[0] = PcdGet32 (PcdFlashFvMainBase);
PlatformFvBaseAddress[1] = PcdGet32 (PcdFlashNvStorageVariableBase);
PlatformFvBaseAddress[2] = PcdGet32 (PcdFlashFvRecoveryBase);
PlatformFvBaseAddress[3] = PcdGet32 (PcdFlashTxeToolsBase);
}
//

View File

@@ -2,15 +2,24 @@
# This driver implement the EFI_SMM_FIRMWARE_VOLUMEN_PROTOCOL.
#
# Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
#
# This program and the accompanying materials are licensed and made available under
# the terms and conditions of the BSD License that accompanies this distribution.
# The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php.
#
# This program and the accompanying materials are licensed and made available under
# the terms and conditions of the BSD License that accompanies this distribution.
# The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php.
#
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
#
#
#
@@ -75,7 +84,10 @@
gPlatformModuleTokenSpaceGuid.PcdFlashFvMainBase
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase
gPlatformModuleTokenSpaceGuid.PcdFlashFvRecoveryBase
gPlatformModuleTokenSpaceGuid.PcdFlashTxeToolsBase
gPlatformModuleTokenSpaceGuid.PcdFlashTxeToolsSize
[FeaturePcd]
gPlatformModuleTokenSpaceGuid.PcdFeatureRecoveryDisabled

View File

View File

@@ -0,0 +1,66 @@
## @file
# This driver implement the EFI_FIRMWARE_VOLUMEN_PROTOCOL.
#
# Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
#
# This program and the accompanying materials are licensed and made available under
# the terms and conditions of the BSD License that accompanies this distribution.
# The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php.
#
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
#
#
#
##
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = HeciOverrideDxe
FILE_GUID = 62FC58DD-9D9F-42B8-8378-3F8FB2F006CE
MODULE_TYPE = DXE_DRIVER
VERSION_STRING = 1.0
ENTRY_POINT = ReinstallHeciProtocol
#
# The following information is for reference only and not required by the build tools.
#
# VALID_ARCHITECTURES = IA32 X64
#
[Sources]
HeciProtocol.h
HeciProtocol.c
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
[LibraryClasses]
MemoryAllocationLib
IoLib
BaseMemoryLib
DebugLib
BaseLib
UefiLib
UefiBootServicesTableLib
UefiDriverEntryPoint
[Protocols]
gEfiHeciProtocolGuid # PROTOCOL CONSUMES AND PRODUCES
[Depex]
gEfiHeciProtocolGuid

View File

@@ -0,0 +1,204 @@
#include <Uefi/UefiBaseType.h>
#include <Uefi/UefiSpec.h>
#include <Library/DebugLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/BaseLib.h>
#include <Library/UefiLib.h>
#include "HeciProtocol.h"
#if defined(SEC_DEBUG_INFO) && SEC_DEBUG_INFO
#define PRINT(x...) DEBUG ((EFI_D_INFO, x))
#else
#define PRINT(x...) Print (L ## x)
#endif
EFI_HECI_PROTOCOL mHeciProtocolOld;
EFI_HECI_PROTOCOL mHeciProtocolNew;
EFI_STATUS
EFIAPI HeciSendWithAck (
IN OUT UINT32 *Message,
IN OUT UINT32 Length,
IN OUT UINT32 *RecLength,
IN UINT8 HostAddress,
IN UINT8 SECAddress
)
{
EFI_STATUS Status;
UINT8 *Buf = (UINT8 *)Message;
PRINT ("HeciSendWithAck: Length %x, RecLength %s, HostAddr %x, SeCAddr %x\n", Length, *RecLength, HostAddress, SECAddress);
PRINT ("HeciSendWithAck: Message:\n");
for (UINT32 i = 0; i < Length; i++)
PRINT ("%02x ", Buf[i]);
PRINT ("\n");
Status = mHeciProtocolOld.SendwACK(Message, Length, RecLength, HostAddress, SECAddress);
if (!EFI_ERROR (Status)) {
PRINT ("HeciSendWithAck: Response:\n");
Buf = (UINT8 *)Message;
for (UINT32 i = 0; i < *RecLength; i++)
PRINT ("%02x ", Buf[i]);
PRINT ("\n");
} else {
PRINT ("HECI SendwACK failed %r\n", Status);
}
return Status;
}
EFI_STATUS
EFIAPI HeciSend (
IN UINT32 *Message,
IN UINT32 Length,
IN UINT8 HostAddress,
IN UINT8 SECAddress
)
{
EFI_STATUS Status;
UINT8 *Buf = (UINT8 *)Message;
PRINT ("HeciSend: Length %x, HostAddr %x, SeCAddr %x\n", Length, HostAddress, SECAddress);
PRINT ("HeciSend: Message:\n");
for (UINT32 i = 0; i < Length; i++)
PRINT ("%02x ", Buf[i]);
PRINT ("\n");
Status = mHeciProtocolOld.SendMsg(Message, Length, HostAddress, SECAddress);
if (EFI_ERROR (Status)) {
PRINT ("HECI SendMsg failed %r\n", Status);
}
return Status;
}
EFI_STATUS
EFIAPI HeciReceive (
IN UINT32 Blocking,
IN UINT32 *MessageBody,
IN OUT UINT32 *Length
)
{
EFI_STATUS Status;
UINT8 *Buf;
PRINT ("HeciReceive: Length %x, Blocking %x\n", *Length, Blocking);
Status = mHeciProtocolOld.ReadMsg(Blocking, MessageBody, Length);
if (!EFI_ERROR (Status)) {
PRINT ("HeciReceive: Response:\n");
Buf = (UINT8 *)MessageBody;
for (UINT32 i = 0; i < *Length; i++)
PRINT ("%02x ", Buf[i]);
PRINT ("\n");
} else {
PRINT ("HECI Receive failed %r\n", Status);
}
return Status;
}
EFI_STATUS
EFIAPI
ReinstallHeciProtocol(
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
EFI_HECI_PROTOCOL *ProtocolOld;
EFI_HANDLE HeciHandle;
EFI_HANDLE *HandleBuffer;
UINTN BufferSize = 0;
DEBUG ((EFI_D_INFO, ">>>>ReinstallHeciProtocol\n"));
//
// Run memory test code at this point.
//
Status = gBS->LocateProtocol (
&gEfiHeciProtocolGuid,
NULL,
(VOID **) &ProtocolOld
);
if (EFI_ERROR (Status)) {
DEBUG ((EFI_D_INFO, "gEfiHeciProtocolGuid not found: %r\n", Status));
return Status;
}
gBS->CopyMem((VOID *)&mHeciProtocolOld, (VOID *)ProtocolOld, sizeof(EFI_HECI_PROTOCOL));
BufferSize = sizeof (EFI_HANDLE);
HandleBuffer = AllocateZeroPool (BufferSize);
Status = gBS->LocateHandle(
ByProtocol,
&gEfiHeciProtocolGuid,
NULL,
&BufferSize,
HandleBuffer
);
if (EFI_ERROR (Status)) {
DEBUG ((EFI_D_INFO, "gEfiHeciProtocolGuid handles not found %r\n", Status));
return Status;
}
if (BufferSize > sizeof (EFI_HANDLE)) {
DEBUG ((EFI_D_INFO, "gEfiHeciProtocolGuid handles found %d\n", BufferSize));
return EFI_BAD_BUFFER_SIZE;
}
HeciHandle = *HandleBuffer;
FreePool (HandleBuffer);
mHeciProtocolNew.SendwACK = HeciSendWithAck;
mHeciProtocolNew.ReadMsg = HeciReceive;
mHeciProtocolNew.SendMsg = HeciSend;
mHeciProtocolNew.ResetHeci = mHeciProtocolOld.ResetHeci;
mHeciProtocolNew.InitHeci = mHeciProtocolOld.InitHeci;
mHeciProtocolNew.SeCResetWait = mHeciProtocolOld.SeCResetWait;
mHeciProtocolNew.ReInitHeci = mHeciProtocolOld.ReInitHeci;
mHeciProtocolNew.GetSeCStatus = mHeciProtocolOld.GetSeCStatus;
mHeciProtocolNew.GetSeCMode = mHeciProtocolOld.GetSeCMode;
Status = gBS->ReinstallProtocolInterface (
HeciHandle,
&gEfiHeciProtocolGuid,
ProtocolOld,
&mHeciProtocolNew
);
if (EFI_ERROR (Status)) {
DEBUG ((EFI_D_INFO, "Could not reinstall gEfiHeciProtocolGuid: %r\n", Status));
return Status;
}
DEBUG ((EFI_D_INFO, "gEfiHeciProtocolGuid reinstalled successfully\n"));
return Status;
}

View File

@@ -0,0 +1,102 @@
/**@file
EFI HECI Protocol
@copyright
Copyright (c) 1999 - 2014 Intel Corporation. All rights reserved
This software and associated documentation (if any) is furnished
under a license and may only be used or copied in accordance
with the terms of the license. Except as permitted by the
license, no part of this software or documentation may be
reproduced, stored in a retrieval system, or transmitted in any
form or by any means without the express written consent of
Intel Corporation.
This file contains an 'Intel Peripheral Driver' and is uniquely
identified as "Intel Reference Module" and is licensed for Intel
CPUs and chipsets under the terms of your license agreement with
Intel or your vendor. This file may be modified by the user, subject
to additional terms of the license agreement.
@par Specification
**/
#ifndef _EFI_HECI_H
#define _EFI_HECI_H
typedef struct _EFI_HECI_PROTOCOL EFI_HECI_PROTOCOL;
typedef
EFI_STATUS
(EFIAPI *EFI_HECI_SENDWACK) (
IN OUT UINT32 *Message,
IN OUT UINT32 Length,
IN OUT UINT32 *RecLength,
IN UINT8 HostAddress,
IN UINT8 SECAddress
);
typedef
EFI_STATUS
(EFIAPI *EFI_HECI_READ_MESSAGE) (
IN UINT32 Blocking,
IN UINT32 *MessageBody,
IN OUT UINT32 *Length
);
typedef
EFI_STATUS
(EFIAPI *EFI_HECI_SEND_MESSAGE) (
IN UINT32 *Message,
IN UINT32 Length,
IN UINT8 HostAddress,
IN UINT8 SECAddress
);
typedef
EFI_STATUS
(EFIAPI *EFI_HECI_RESET) (
VOID
);
typedef
EFI_STATUS
(EFIAPI *EFI_HECI_INIT) (
VOID
);
typedef
EFI_STATUS
(EFIAPI *EFI_HECI_REINIT) (
VOID
);
typedef
EFI_STATUS
(EFIAPI *EFI_HECI_RESET_WAIT) (
IN UINT32 Delay
);
typedef
EFI_STATUS
(EFIAPI *EFI_HECI_GET_SEC_STATUS) (
IN UINT32 *Status
);
typedef
EFI_STATUS
(EFIAPI *EFI_HECI_GET_SEC_MODE) (
IN UINT32 *Mode
);
typedef struct _EFI_HECI_PROTOCOL {
EFI_HECI_SENDWACK SendwACK;
EFI_HECI_READ_MESSAGE ReadMsg;
EFI_HECI_SEND_MESSAGE SendMsg;
EFI_HECI_RESET ResetHeci;
EFI_HECI_INIT InitHeci;
EFI_HECI_RESET_WAIT SeCResetWait;
EFI_HECI_REINIT ReInitHeci;
EFI_HECI_GET_SEC_STATUS GetSeCStatus;
EFI_HECI_GET_SEC_MODE GetSeCMode;
} EFI_HECI_PROTOCOL;
extern EFI_GUID gEfiHeciProtocolGuid;
#endif // _EFI_HECI_H

View File

@@ -1,15 +1,24 @@
/*++
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _SPIFlash_H_
@@ -22,6 +31,7 @@
typedef enum {
EnumSpiFlashW25Q64,
EnumSpiFlashW25Q128_W,
EnumSpiFlashAT25DF321A,
EnumSpiFlashAT26DF321,
EnumSpiFlashAT25DF641,
@@ -67,6 +77,7 @@ typedef enum {
#define SF_DEVICE_ID1_W25X32 0x16
#define SF_DEVICE_ID1_W25X64 0x17
#define SF_DEVICE_ID0_W25QXX 0x40
#define SF_DEVICE_ID0_W25QXX_W 0x60
#define SF_DEVICE_ID1_W25Q16 0x15
#define SF_DEVICE_ID1_W25Q32 0x16
#define SF_DEVICE_ID1_W25Q64 0x17

View File

@@ -1,15 +1,24 @@
#
#
# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
#
# This program and the accompanying materials are licensed and made available under
# the terms and conditions of the BSD License that accompanies this distribution.
# The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php.
#
# This program and the accompanying materials are licensed and made available under
# the terms and conditions of the BSD License that accompanies this distribution.
# The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php.
#
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
#
#
# Module Name:
@@ -35,11 +44,13 @@
EfiCpuVersion.c
[Sources.IA32]
MODULE_TYPE = BASE
IA32/CpuIA32.c | MSFT
IA32/CpuIA32.asm | INTEL
IA32/CpuIA32.S | GCC
[Sources.X64]
PI_SPECIFICATION_VERSION = 0x0001000A
X64/Cpu.asm | INTEL
X64/Cpu.S | GCC
[Packages]
MdePkg/MdePkg.dec

View File

@@ -1,15 +1,24 @@
#
#
# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
#
# This program and the accompanying materials are licensed and made available under
# the terms and conditions of the BSD License that accompanies this distribution.
# The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php.
#
# This program and the accompanying materials are licensed and made available under
# the terms and conditions of the BSD License that accompanies this distribution.
# The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php.
#
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
#
#
#Module Name:

View File

@@ -0,0 +1,315 @@
/*++
Copyright (c) 2004 - 2012, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
EfiBind.h
Abstract:
Processor or Compiler specific defines and types for IA-32.
We are using the ANSI C 2000 _t type definitions for basic types.
This it technically a violation of the coding standard, but they
are used to make EfiTypes.h portable. Code other than EfiTypes.h
should never use any ANSI C 2000 _t integer types.
--*/
#ifndef _EFI_BIND_H_
#define _EFI_BIND_H_
#ifdef EFI_DEBUG
#ifdef EFI_NT_EMULATOR
#define EFI_DRIVER_ENTRY_POINT(InitFunction) \
EFI_STATUS \
EFIAPI \
InitFunction ( \
EFI_HANDLE ImageHandle, \
EFI_SYSTEM_TABLE *SystemTable \
); \
\
UINTN \
__stdcall \
_DllMainCRTStartup ( \
UINTN Inst, \
UINTN reason_for_call, \
VOID *rserved \
) \
{ \
return 1; \
} \
\
EFI_STATUS \
__declspec( dllexport ) \
__cdecl \
InitializeDriver ( \
EFI_HANDLE ImageHandle, \
EFI_SYSTEM_TABLE *SystemTable \
) \
{ \
return InitFunction(ImageHandle, SystemTable); \
}
#define EFI_APPLICATION_ENTRY_POINT EFI_DRIVER_ENTRY_POINT
#else
#define EFI_DRIVER_ENTRY_POINT(InitFunction)
#define EFI_APPLICATION_ENTRY_POINT EFI_DRIVER_ENTRY_POINT
#endif
#else
#define EFI_DRIVER_ENTRY_POINT(InitFunction)
#define EFI_APPLICATION_ENTRY_POINT EFI_DRIVER_ENTRY_POINT
#endif
//
// Make sure we are useing the correct packing rules per EFI specification
//
#ifndef __GNUC__
#pragma pack()
#endif
#if __INTEL_COMPILER
//
// Disable ICC's warning: trailing comma is nonstandard
//
//#pragma warning ( disable : 271 )
//
// Disable ICC's warning: extra ";" ignored
//
#pragma warning ( disable : 424 )
//
// Disable ICC's warning: : variable "foo" was set but never used
//
#pragma warning ( disable : 593 )
//
// Disable ICC's remark #1418: external function definition with no prior declaration.
// This is legal ANSI C code so we disable the remark that is turned on with /W4
//
#pragma warning ( disable : 1418 )
//
// Disable ICC's remark #1419: external declaration in primary source file
// This is legal ANSI C code so we disable the remark that is turned on with /W4
//
#pragma warning ( disable : 1419 )
//
// Disable ICC's remark #869: "Parameter" was never referenced warning.
// This is legal ANSI C code so we disable the remark that is turned on with -Wall
//
#pragma warning ( disable : 869 )
#endif
#if _MSC_EXTENSIONS
//
// Disable warning that make it impossible to compile at /W4
// This only works for Microsoft* tools
//
//
// Disabling bitfield type checking warnings.
//
#pragma warning ( disable : 4214 )
//
// Disabling the unreferenced formal parameter warnings.
//
#pragma warning ( disable : 4100 )
//
// Disable slightly different base types warning as CHAR8 * can not be set
// to a constant string.
//
#pragma warning ( disable : 4057 )
//
// ASSERT(FALSE) or while (TRUE) are legal constructes so supress this warning
//
#pragma warning ( disable : 4127 )
//
// Int64ShllMod32 unreferenced inline function
//
#pragma warning ( disable : 4514 )
//
// Unreferenced formal parameter - We are object oriented, so we pass This even
// if we don't need them.
//
#pragma warning ( disable : 4100 )
//
// This warning is caused by empty (after preprocessing) souce file.
//
#pragma warning ( disable : 4206 )
#endif
#if defined(_MSC_EXTENSIONS)
//
// use Microsoft C complier dependent integer width types
//
typedef unsigned __int64 uint64_t;
typedef __int64 int64_t;
typedef unsigned __int32 uint32_t;
typedef __int32 int32_t;
typedef unsigned short uint16_t;
typedef short int16_t;
typedef unsigned char uint8_t;
typedef signed char int8_t;
#else
typedef unsigned long long uint64_t;
typedef long long int64_t;
typedef unsigned int uint32_t;
typedef int int32_t;
typedef unsigned short uint16_t;
typedef short int16_t;
typedef unsigned char uint8_t;
typedef signed char int8_t;
#endif
//
// Native integer size in stdint.h
//
typedef uint32_t uintn_t;
typedef int32_t intn_t;
//
// Processor specific defines
//
#define EFI_MAX_BIT 0x80000000
#define MAX_2_BITS 0xC0000000
//
// Maximum legal IA-32 address
//
#define EFI_MAX_ADDRESS 0xFFFFFFFF
//
// Bad pointer value to use in check builds.
// if you see this value you are using uninitialized or free'ed data
//
#define EFI_BAD_POINTER 0xAFAFAFAF
#define EFI_BAD_POINTER_AS_BYTE 0xAF
//
// Inject a break point in the code to assist debugging for NT Emulation Environment
// For real hardware, just put in a halt loop. Don't do a while(1) because the
// compiler will optimize away the rest of the function following, so that you run out in
// the weeds if you skip over it with a debugger.
//
#ifdef _MSC_EXTENSIONS
#define EFI_BREAKPOINT() __asm { int 3 }
#elif __GNUC__
#define EFI_BREAKPOINT() asm(" int $3");
#endif
#define EFI_DEADLOOP() { volatile UINTN __iii; __iii = 1; while (__iii); }
//
// Memory Fence forces serialization, and is needed to support out of order
// memory transactions. The Memory Fence is mainly used to make sure IO
// transactions complete in a deterministic sequence, and to syncronize locks
// an other MP code. Currently no memory fencing is required.
//
#define MEMORY_FENCE()
//
// Some compilers don't support the forward reference construct:
// typedef struct XXXXX. The forward reference is required for
// ANSI compatibility.
//
// The following macro provide a workaround for such cases.
//
#ifdef EFI_NO_INTERFACE_DECL
#define EFI_FORWARD_DECLARATION(x)
#else
#define EFI_FORWARD_DECLARATION(x) typedef struct _##x x
#endif
//
// Some C compilers optimize the calling conventions to increase performance.
// _EFIAPI is used to make all public APIs follow the standard C calling
// convention.
//
#if _MSC_EXTENSIONS
//
// Microsoft* compiler requires _EFIAPI useage, __cdecl is Microsoft* specific C.
//
#define _EFIAPI __cdecl
#else
#define _EFIAPI
#endif
#ifdef _EFI_WINNT
#define EFI_SUPPRESS_BENIGN_REDEFINITION_OF_TYPE_WARNING() \
warning ( disable : 4142 )
#define EFI_DEFAULT_BENIGN_REDEFINITION_OF_TYPE_WARNING() \
warning ( default : 4142 )
#else
#define EFI_SUPPRESS_BENIGN_REDEFINITION_OF_TYPE_WARNING() \
warning ( disable : 4068 )
#define EFI_DEFAULT_BENIGN_REDEFINITION_OF_TYPE_WARNING() \
warning ( default : 4068 )
#endif
//
// For symbol name in GNU assembly code, an extra "_" is necessary
//
#if defined(__GNUC__)
///
/// Private worker functions for ASM_PFX()
///
#define _CONCATENATE(a, b) __CONCATENATE(a, b)
#define __CONCATENATE(a, b) a ## b
///
/// The __USER_LABEL_PREFIX__ macro predefined by GNUC represents the prefix
/// on symbols in assembly language.
///
#define ASM_PFX(name) _CONCATENATE (__USER_LABEL_PREFIX__, name)
#endif
#endif

View File

@@ -1,15 +1,24 @@
/** @file
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
@@ -442,6 +451,7 @@ LibFvbFlashDeviceSupportInit (
SpiNotMatchError++;
}
} else {
DEBUG ((EFI_D_ERROR, "SPI flash transaction error: %r\n", Status));
SpiReadError++;
}
}

View File

@@ -1,22 +1,35 @@
/*++
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#include <Library/SpiFlash.H>
#ifdef BUILD_16M
#define FLASH_SIZE 0xC00000
#else
#define FLASH_SIZE 0x600000
#endif
#define FLASH_DEVICE_BASE_ADDRESS (0xFFFFFFFF-FLASH_SIZE+1)
//
@@ -49,6 +62,36 @@ SPI_INIT_TABLE mInitTable[] = {
//
((WINBOND_W25Q64_SIZE >= FLASH_SIZE) ? WINBOND_W25Q64_SIZE - FLASH_SIZE : (UINTN) (-1)),
//
// The size of the BIOS image in flash. This value is platform specific and depends on the system flash map.
//
FLASH_SIZE
},
{
SF_VENDOR_ID_WINBOND, // VendorId
SF_DEVICE_ID0_W25QXX_W, // DeviceId 0
SF_DEVICE_ID1_W25Q128, // DeviceId 1
{
SF_INST_WREN, // Prefix Opcode 0: Write Enable
SF_INST_EWSR // Prefix Opcode 1: Enable Write Status Register
},
{
{EnumSpiOpcodeReadNoAddr, SF_INST_JEDEC_READ_ID, EnumSpiCycle50MHz, EnumSpiOperationJedecId }, // Opcode 0: Read ID
{EnumSpiOpcodeRead, SF_INST_READ, EnumSpiCycle50MHz, EnumSpiOperationReadData }, // Opcode 1: Read
{EnumSpiOpcodeReadNoAddr, SF_INST_RDSR, EnumSpiCycle50MHz, EnumSpiOperationReadStatus }, // Opcode 2: Read Status Register
{EnumSpiOpcodeRead, SF_INST_SFDP, EnumSpiCycle50MHz, EnumSpiOperationDiscoveryParameters}, // Opcode 3: Serial Flash Discovery Parameters
{EnumSpiOpcodeWrite, SF_INST_SERASE, EnumSpiCycle50MHz, EnumSpiOperationErase_4K_Byte }, // Opcode 4: Sector Erase (4KB)
{EnumSpiOpcodeWrite, SF_INST_64KB_ERASE, EnumSpiCycle50MHz, EnumSpiOperationErase_64K_Byte }, // Opcode 5: Block Erase (64KB
{EnumSpiOpcodeWrite, SF_INST_PROG, EnumSpiCycle50MHz, EnumSpiOperationProgramData_1_Byte}, // Opcode 6: Byte Program
{EnumSpiOpcodeWriteNoAddr, SF_INST_WRSR, EnumSpiCycle50MHz, EnumSpiOperationWriteStatus }, // Opcode 7: Write Status Register
},
//
// The offset of the start of the BIOS image in flash. This value is platform specific
// and depends on the system flash map. If BIOS size is bigger than flash return -1.
//
((WINBOND_W25Q128_SIZE >= FLASH_SIZE) ? WINBOND_W25Q128_SIZE - FLASH_SIZE : (UINTN) (-1)),
//
// The size of the BIOS image in flash. This value is platform specific and depends on the system flash map.
//

View File

@@ -1,15 +1,24 @@
/** @file
Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
@@ -2553,7 +2562,7 @@ ShowProgressHotKey (
IN UINT16 TimeoutDefault
)
{
UINT16 TimeoutRemain;
EFI_STATUS Status;
EFI_INPUT_KEY Key;
@@ -2567,19 +2576,7 @@ ShowProgressHotKey (
}
gST->ConOut->SetAttribute(gST->ConOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK));
EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL Color;
UINT32 GpioValue;
if (TimeoutDefault == 0) {
return EFI_TIMEOUT;
}
gST->ConOut->SetAttribute(gST->ConOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK));
if (DebugAssertEnabled())
{
DEBUG ((EFI_D_INFO, "\n\nStart showing progress bar... Press any key to stop it, or press <F2> or <DEL> to enter setup page! ...Zzz....\n"));
SetMem (&Foreground, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff);
SetMem (&Background, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0x0);
SetMem (&Color, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff);
@@ -2587,8 +2584,7 @@ ShowProgressHotKey (
//
// Clear the progress status bar first
//
#endif
}
PlatformBdsShowProgress (Foreground, Background, L"", Color, 0, 0);
TimeoutRemain = TimeoutDefault;
while (TimeoutRemain != 0) {
@@ -2609,29 +2605,20 @@ ShowProgressHotKey (
//
// Show progress
//
Status = WaitForSingleEvent (gST->ConIn->WaitForKey, ONE_SECOND);
if (Status != EFI_TIMEOUT) {
break;
}
TimeoutRemain--;
//
// Show progress
//
if (TmpStr != NULL) {
PlatformBdsShowProgress (
Foreground,
Background,
L"",
Color,
((TimeoutDefault - TimeoutRemain) * 100 / TimeoutDefault),
0
);
}
//
// Timeout expired
//
if (TimeoutRemain == 0) {
0
);
}
}
//
// Timeout expired
return EFI_TIMEOUT;
}

View File

@@ -47,7 +47,8 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID *mLibTerminalType[] = {
&gEfiPcAnsiGuid,
&gEfiVT100Guid,
&gEfiVT100PlusGuid,
&gEfiVTUTF8Guid
&gEfiVTUTF8Guid,
&gEfiTtyTermGuid
};
//
@@ -651,7 +652,6 @@ BootCurrentIsInternalShell (
CHAR16 BootOptionName[16];
UINT8 *BootOption;
UINT8 *Ptr;
EFI_DEVICE_PATH_PROTOCOL *BootDevicePath;
BOOLEAN Result;
EFI_STATUS Status;
EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
@@ -659,7 +659,6 @@ BootCurrentIsInternalShell (
EFI_GUID *GuidPoint;
BootOption = NULL;
BootDevicePath = NULL;
Result = FALSE;
//
@@ -892,9 +891,9 @@ PlatformBootManagerBeforeConsole (
//
// Get default Terminal Type.
//
TerminalGuid = &gEfiPcAnsiGuid;
TerminalGuid = &gEfiTtyTermGuid;
TerminalType = PcdGet8 (PcdDefaultTerminalType);
if (TerminalType < 4) {
if (TerminalType < 5) {
TerminalGuid = mLibTerminalType[TerminalType];
}
@@ -910,6 +909,7 @@ PlatformBootManagerBeforeConsole (
//
// Restoring default serial device path.
//
CopyGuid (&((VENDOR_DEVICE_PATH *)Next)->Guid, TerminalGuid);
EfiBootManagerUpdateConsoleVariable (ConIn, NULL, Instance);
EfiBootManagerUpdateConsoleVariable (ConOut, NULL, Instance);
}
@@ -977,7 +977,7 @@ IsNeedSortBootOption (
// If setup is the first priority in boot option, we need to sort boot option.
//
if ((BootOptionCount > 1) &&
(((StrnCmp (BootOptions->Description, L"Enter Setup", StrLen (L"Enter Setup"))) == 0) ||
(((StrnCmp (BootOptions->Description, L"Setup", StrLen (L"Setup"))) == 0) ||
((StrnCmp (BootOptions->Description, L"BootManagerMenuApp", StrLen (L"BootManagerMenuApp"))) == 0))) {
return TRUE;
}
@@ -1067,4 +1067,9 @@ PlatformBootManagerAfterConsole (
if (IsNeedSortBootOption()) {
EfiBootManagerSortLoadOptionVariable (LoadOptionTypeBoot, (SORT_COMPARE)CompareBootOption);
}
Print (L"F2 to enter Setup\n");
Print (L"F7 to enter Boot Manager Menu\n");
Print (L"ENTER to boot directly\n");
}

Some files were not shown because too many files have changed in this diff Show More