|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [edk2] [PATCH RFC v2 4/7] OvmfPkg: extract OVMF info passed by Xen hvmloader
On Tue, Nov 19, 2013 at 12:38 PM, Wei Liu <wei.liu2@xxxxxxxxxx> wrote:
> Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
> ---
> OvmfPkg/PlatformPei/Xen.c | 31 +++++++++++++++++++++++++++++++
> 1 file changed, 31 insertions(+)
>
> diff --git a/OvmfPkg/PlatformPei/Xen.c b/OvmfPkg/PlatformPei/Xen.c
> index a720b91..fbb2619 100644
> --- a/OvmfPkg/PlatformPei/Xen.c
> +++ b/OvmfPkg/PlatformPei/Xen.c
> @@ -26,12 +26,15 @@
> #include <Library/HobLib.h>
> #include <Library/MemoryAllocationLib.h>
> #include <Library/PcdLib.h>
> +#include <Library/BaseMemoryLib.h>
> +#include <IndustryStandard/E820.h>
> #include <Guid/XenInfo.h>
>
> #include "Platform.h"
>
> EFI_XEN_INFO mXenInfo;
>
> +#define OVMF_INFO_PHYSICAL_ADDRESS 0x00001000
>
> /**
> Connects to the Hypervisor.
> @@ -50,6 +53,9 @@ XenConnect (
> UINT32 TransferReg;
> UINT32 TransferPages;
> UINT32 XenVersion;
> + EFI_XEN_OVMF_INFO *Info = (EFI_XEN_OVMF_INFO *) OVMF_INFO_PHYSICAL_ADDRESS;
> +
> + ZeroMem (&mXenInfo, sizeof(mXenInfo));
>
> AsmCpuid (XenLeaf + 2, &TransferPages, &TransferReg, NULL, NULL);
> mXenInfo.HyperPages = AllocatePages (TransferPages);
> @@ -72,6 +78,31 @@ XenConnect (
> /* TBD: Locate hvm_info and reserve it away. */
> mXenInfo.HvmInfo = NULL;
>
> + if (!AsciiStrCmp ((CHAR8 *) Info->Signature, "XenHVMOVMF")) {
Would AsciiStrnCmp be a good idea here? Like I mentioned in the other
patch, we normally use an integer based signature.
> + EFI_E820_ENTRY *E820Map;
> + UINTN Loop, EntryCount, Base;
> +
> + /* E820 map */
> + EntryCount = Info->E820Nr;
> + Base = Info->E820;
> +
> + E820Map = AllocateZeroPool (sizeof(EFI_E820_ENTRY) * EntryCount);
> +
> + if (!E820Map) {
> + FreePages (mXenInfo.HyperPages, TransferPages);
> + return EFI_OUT_OF_RESOURCES;
> + }
> +
> + for (Loop = 0; Loop < EntryCount; Loop++) {
> + EFI_E820_ENTRY *src = (EFI_E820_ENTRY *)Base + Loop;
> + EFI_E820_ENTRY *dst = (EFI_E820_ENTRY *)E820Map + Loop;
> + CopyMem (dst, src, sizeof(EFI_E820_ENTRY));
> + }
How about AllocateCopyPool and just copy the entire array in one shot?
-Jordan
> +
> + mXenInfo.E820 = E820Map;
> + mXenInfo.E820EntryCount = EntryCount;
> + }
> +
> BuildGuidDataHob (
> &gEfiXenInfoGuid,
> &mXenInfo,
> --
> 1.7.10.4
>
>
> ------------------------------------------------------------------------------
> Shape the Mobile Experience: Free Subscription
> Software experts and developers: Be at the forefront of tech innovation.
> Intel(R) Software Adrenaline delivers strategic insight and game-changing
> conversations that shape the rapidly evolving mobile landscape. Sign up now.
> http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@xxxxxxxxxxxxxxxxxxxxx
> https://lists.sourceforge.net/lists/listinfo/edk2-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |