diff mbox series

[v2,10/31] OvmfPkg/XenPlatformPei: Detect OVMF_INFO from hvmloader

Message ID 20190409110844.14746-11-anthony.perard@citrix.com (mailing list archive)
State New, archived
Headers show
Series Specific platform to run OVMF in Xen PVH and HVM guests | expand

Commit Message

Anthony PERARD April 9, 2019, 11:08 a.m. UTC
This struct is only useful to retrieve the E820 table. The
mXenHvmloaderInfo isn't used yet, but will be use in a further patch to
retrieve the E820 table.

Also remove the unused pointer from the XenInfo HOB as that information
is only useful in the XenPlatformPei.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 OvmfPkg/Include/Guid/XenInfo.h |  4 ----
 OvmfPkg/PlatformPei/Xen.c      |  3 ---
 OvmfPkg/XenPlatformPei/Xen.c   | 23 ++++++++++++++++++--
 3 files changed, 21 insertions(+), 9 deletions(-)

Comments

Laszlo Ersek April 11, 2019, 11:47 a.m. UTC | #1
On 04/09/19 13:08, Anthony PERARD wrote:
> This struct is only useful to retrieve the E820 table. The

(1) please replace "this struct" with the name of the struct.

> mXenHvmloaderInfo isn't used yet, but will be use in a further patch to
> retrieve the E820 table.
> 
> Also remove the unused pointer from the XenInfo HOB as that information
> is only useful in the XenPlatformPei.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> ---
>  OvmfPkg/Include/Guid/XenInfo.h |  4 ----
>  OvmfPkg/PlatformPei/Xen.c      |  3 ---
>  OvmfPkg/XenPlatformPei/Xen.c   | 23 ++++++++++++++++++--
>  3 files changed, 21 insertions(+), 9 deletions(-)
> 
> diff --git a/OvmfPkg/Include/Guid/XenInfo.h b/OvmfPkg/Include/Guid/XenInfo.h
> index d512b0b63f..5d4579f244 100644
> --- a/OvmfPkg/Include/Guid/XenInfo.h
> +++ b/OvmfPkg/Include/Guid/XenInfo.h
> @@ -24,10 +24,6 @@ typedef struct {
>    ///
>    VOID *HyperPages;
>    ///
> -  /// Location of the hvm_info page.
> -  ///
> -  VOID *HvmInfo;
> -  ///
>    /// Hypervisor major version.
>    ///
>    UINT16 VersionMajor;
> diff --git a/OvmfPkg/PlatformPei/Xen.c b/OvmfPkg/PlatformPei/Xen.c
> index ab38f97a67..75181be2fd 100644
> --- a/OvmfPkg/PlatformPei/Xen.c
> +++ b/OvmfPkg/PlatformPei/Xen.c
> @@ -104,9 +104,6 @@ XenConnect (
>    mXenInfo.VersionMajor = (UINT16)(XenVersion >> 16);
>    mXenInfo.VersionMinor = (UINT16)(XenVersion & 0xFFFF);
>  
> -  /* TBD: Locate hvm_info and reserve it away. */
> -  mXenInfo.HvmInfo = NULL;
> -
>    BuildGuidDataHob (
>      &gEfiXenInfoGuid,
>      &mXenInfo,
> diff --git a/OvmfPkg/XenPlatformPei/Xen.c b/OvmfPkg/XenPlatformPei/Xen.c
> index 7c82e5b69b..a866641b67 100644
> --- a/OvmfPkg/XenPlatformPei/Xen.c
> +++ b/OvmfPkg/XenPlatformPei/Xen.c
> @@ -39,6 +39,12 @@ STATIC UINT32 mXenLeaf = 0;
>  
>  EFI_XEN_INFO mXenInfo;
>  
> +//
> +// Location of the firmware info struct setup by hvmloader.
> +// Only the E820 table is used by OVMF.
> +//
> +EFI_XEN_OVMF_INFO *mXenHvmloaderInfo;
> +
>  /**
>    Returns E820 map provided by Xen
>  
> @@ -84,6 +90,8 @@ XenConnect (
>    UINT32 TransferReg;
>    UINT32 TransferPages;
>    UINT32 XenVersion;
> +  EFI_XEN_OVMF_INFO *Info;
> +  CHAR8 Sig[sizeof (Info->Signature) + 1];
>  
>    AsmCpuid (XenLeaf + 2, &TransferPages, &TransferReg, NULL, NULL);
>    mXenInfo.HyperPages = AllocatePages (TransferPages);
> @@ -103,8 +111,19 @@ XenConnect (
>    mXenInfo.VersionMajor = (UINT16)(XenVersion >> 16);
>    mXenInfo.VersionMinor = (UINT16)(XenVersion & 0xFFFF);
>  
> -  /* TBD: Locate hvm_info and reserve it away. */
> -  mXenInfo.HvmInfo = NULL;
> +  //
> +  // Check if there are information left by hvmloader
> +  //
> +
> +  Info = (EFI_XEN_OVMF_INFO *)(UINTN) OVMF_INFO_PHYSICAL_ADDRESS;
> +  // Copy the signature, and make it null-terminated.

(2) Please use the following style:

  //
  // Copy the signature, and make it null-terminated.
  //

> +  AsciiStrnCpyS(Sig, sizeof (Sig),
> +                (CHAR8 *) &Info->Signature, sizeof (Info->Signature));

(3) This should be indented as:

  AsciiStrnCpyS (
    Sig,
    sizeof (Sig),
    (CHAR8 *) &Info->Signature,
    sizeof (Info->Signature)
    );

or:

  AsciiStrnCpyS (Sig, sizeof (Sig), (CHAR8 *) &Info->Signature,
    sizeof (Info->Signature));

(note the whitespace before the opening paren, after the function
designator)


I'm not checking the correctness of the parameters, for now.

With (1) and (3) addressed:

Acked-by: Laszlo Ersek <lersek@redhat.com>

If you can, please verify the comment style and the indentation style in
the other patches too.

Thanks
Laszlo

> +  if (AsciiStrCmp (Sig, "XenHVMOVMF") == 0) {
> +    mXenHvmloaderInfo = Info;
> +  } else {
> +    mXenHvmloaderInfo = NULL;
> +  }
>  
>    BuildGuidDataHob (
>      &gEfiXenInfoGuid,
>
Laszlo Ersek April 11, 2019, 11:47 a.m. UTC | #2
On 04/11/19 13:47, Laszlo Ersek wrote:
> On 04/09/19 13:08, Anthony PERARD wrote:
>> This struct is only useful to retrieve the E820 table. The
> 
> (1) please replace "this struct" with the name of the struct.
> 
>> mXenHvmloaderInfo isn't used yet, but will be use in a further patch to
>> retrieve the E820 table.
>>
>> Also remove the unused pointer from the XenInfo HOB as that information
>> is only useful in the XenPlatformPei.
>>
>> Contributed-under: TianoCore Contribution Agreement 1.1
>> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
>> ---
>>  OvmfPkg/Include/Guid/XenInfo.h |  4 ----
>>  OvmfPkg/PlatformPei/Xen.c      |  3 ---
>>  OvmfPkg/XenPlatformPei/Xen.c   | 23 ++++++++++++++++++--
>>  3 files changed, 21 insertions(+), 9 deletions(-)
>>
>> diff --git a/OvmfPkg/Include/Guid/XenInfo.h b/OvmfPkg/Include/Guid/XenInfo.h
>> index d512b0b63f..5d4579f244 100644
>> --- a/OvmfPkg/Include/Guid/XenInfo.h
>> +++ b/OvmfPkg/Include/Guid/XenInfo.h
>> @@ -24,10 +24,6 @@ typedef struct {
>>    ///
>>    VOID *HyperPages;
>>    ///
>> -  /// Location of the hvm_info page.
>> -  ///
>> -  VOID *HvmInfo;
>> -  ///
>>    /// Hypervisor major version.
>>    ///
>>    UINT16 VersionMajor;
>> diff --git a/OvmfPkg/PlatformPei/Xen.c b/OvmfPkg/PlatformPei/Xen.c
>> index ab38f97a67..75181be2fd 100644
>> --- a/OvmfPkg/PlatformPei/Xen.c
>> +++ b/OvmfPkg/PlatformPei/Xen.c
>> @@ -104,9 +104,6 @@ XenConnect (
>>    mXenInfo.VersionMajor = (UINT16)(XenVersion >> 16);
>>    mXenInfo.VersionMinor = (UINT16)(XenVersion & 0xFFFF);
>>  
>> -  /* TBD: Locate hvm_info and reserve it away. */
>> -  mXenInfo.HvmInfo = NULL;
>> -
>>    BuildGuidDataHob (
>>      &gEfiXenInfoGuid,
>>      &mXenInfo,
>> diff --git a/OvmfPkg/XenPlatformPei/Xen.c b/OvmfPkg/XenPlatformPei/Xen.c
>> index 7c82e5b69b..a866641b67 100644
>> --- a/OvmfPkg/XenPlatformPei/Xen.c
>> +++ b/OvmfPkg/XenPlatformPei/Xen.c
>> @@ -39,6 +39,12 @@ STATIC UINT32 mXenLeaf = 0;
>>  
>>  EFI_XEN_INFO mXenInfo;
>>  
>> +//
>> +// Location of the firmware info struct setup by hvmloader.
>> +// Only the E820 table is used by OVMF.
>> +//
>> +EFI_XEN_OVMF_INFO *mXenHvmloaderInfo;
>> +
>>  /**
>>    Returns E820 map provided by Xen
>>  
>> @@ -84,6 +90,8 @@ XenConnect (
>>    UINT32 TransferReg;
>>    UINT32 TransferPages;
>>    UINT32 XenVersion;
>> +  EFI_XEN_OVMF_INFO *Info;
>> +  CHAR8 Sig[sizeof (Info->Signature) + 1];
>>  
>>    AsmCpuid (XenLeaf + 2, &TransferPages, &TransferReg, NULL, NULL);
>>    mXenInfo.HyperPages = AllocatePages (TransferPages);
>> @@ -103,8 +111,19 @@ XenConnect (
>>    mXenInfo.VersionMajor = (UINT16)(XenVersion >> 16);
>>    mXenInfo.VersionMinor = (UINT16)(XenVersion & 0xFFFF);
>>  
>> -  /* TBD: Locate hvm_info and reserve it away. */
>> -  mXenInfo.HvmInfo = NULL;
>> +  //
>> +  // Check if there are information left by hvmloader
>> +  //
>> +
>> +  Info = (EFI_XEN_OVMF_INFO *)(UINTN) OVMF_INFO_PHYSICAL_ADDRESS;
>> +  // Copy the signature, and make it null-terminated.
> 
> (2) Please use the following style:
> 
>   //
>   // Copy the signature, and make it null-terminated.
>   //
> 
>> +  AsciiStrnCpyS(Sig, sizeof (Sig),
>> +                (CHAR8 *) &Info->Signature, sizeof (Info->Signature));
> 
> (3) This should be indented as:
> 
>   AsciiStrnCpyS (
>     Sig,
>     sizeof (Sig),
>     (CHAR8 *) &Info->Signature,
>     sizeof (Info->Signature)
>     );
> 
> or:
> 
>   AsciiStrnCpyS (Sig, sizeof (Sig), (CHAR8 *) &Info->Signature,
>     sizeof (Info->Signature));
> 
> (note the whitespace before the opening paren, after the function
> designator)
> 
> 
> I'm not checking the correctness of the parameters, for now.
> 
> With (1) and (3) addressed:

sigh, I meant "(1) through (3)".

> Acked-by: Laszlo Ersek <lersek@redhat.com>
> 
> If you can, please verify the comment style and the indentation style in
> the other patches too.
> 
> Thanks
> Laszlo
> 
>> +  if (AsciiStrCmp (Sig, "XenHVMOVMF") == 0) {
>> +    mXenHvmloaderInfo = Info;
>> +  } else {
>> +    mXenHvmloaderInfo = NULL;
>> +  }
>>  
>>    BuildGuidDataHob (
>>      &gEfiXenInfoGuid,
>>
>
diff mbox series

Patch

diff --git a/OvmfPkg/Include/Guid/XenInfo.h b/OvmfPkg/Include/Guid/XenInfo.h
index d512b0b63f..5d4579f244 100644
--- a/OvmfPkg/Include/Guid/XenInfo.h
+++ b/OvmfPkg/Include/Guid/XenInfo.h
@@ -24,10 +24,6 @@  typedef struct {
   ///
   VOID *HyperPages;
   ///
-  /// Location of the hvm_info page.
-  ///
-  VOID *HvmInfo;
-  ///
   /// Hypervisor major version.
   ///
   UINT16 VersionMajor;
diff --git a/OvmfPkg/PlatformPei/Xen.c b/OvmfPkg/PlatformPei/Xen.c
index ab38f97a67..75181be2fd 100644
--- a/OvmfPkg/PlatformPei/Xen.c
+++ b/OvmfPkg/PlatformPei/Xen.c
@@ -104,9 +104,6 @@  XenConnect (
   mXenInfo.VersionMajor = (UINT16)(XenVersion >> 16);
   mXenInfo.VersionMinor = (UINT16)(XenVersion & 0xFFFF);
 
-  /* TBD: Locate hvm_info and reserve it away. */
-  mXenInfo.HvmInfo = NULL;
-
   BuildGuidDataHob (
     &gEfiXenInfoGuid,
     &mXenInfo,
diff --git a/OvmfPkg/XenPlatformPei/Xen.c b/OvmfPkg/XenPlatformPei/Xen.c
index 7c82e5b69b..a866641b67 100644
--- a/OvmfPkg/XenPlatformPei/Xen.c
+++ b/OvmfPkg/XenPlatformPei/Xen.c
@@ -39,6 +39,12 @@  STATIC UINT32 mXenLeaf = 0;
 
 EFI_XEN_INFO mXenInfo;
 
+//
+// Location of the firmware info struct setup by hvmloader.
+// Only the E820 table is used by OVMF.
+//
+EFI_XEN_OVMF_INFO *mXenHvmloaderInfo;
+
 /**
   Returns E820 map provided by Xen
 
@@ -84,6 +90,8 @@  XenConnect (
   UINT32 TransferReg;
   UINT32 TransferPages;
   UINT32 XenVersion;
+  EFI_XEN_OVMF_INFO *Info;
+  CHAR8 Sig[sizeof (Info->Signature) + 1];
 
   AsmCpuid (XenLeaf + 2, &TransferPages, &TransferReg, NULL, NULL);
   mXenInfo.HyperPages = AllocatePages (TransferPages);
@@ -103,8 +111,19 @@  XenConnect (
   mXenInfo.VersionMajor = (UINT16)(XenVersion >> 16);
   mXenInfo.VersionMinor = (UINT16)(XenVersion & 0xFFFF);
 
-  /* TBD: Locate hvm_info and reserve it away. */
-  mXenInfo.HvmInfo = NULL;
+  //
+  // Check if there are information left by hvmloader
+  //
+
+  Info = (EFI_XEN_OVMF_INFO *)(UINTN) OVMF_INFO_PHYSICAL_ADDRESS;
+  // Copy the signature, and make it null-terminated.
+  AsciiStrnCpyS(Sig, sizeof (Sig),
+                (CHAR8 *) &Info->Signature, sizeof (Info->Signature));
+  if (AsciiStrCmp (Sig, "XenHVMOVMF") == 0) {
+    mXenHvmloaderInfo = Info;
+  } else {
+    mXenHvmloaderInfo = NULL;
+  }
 
   BuildGuidDataHob (
     &gEfiXenInfoGuid,