WorkArea.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /** @file
  2. Work Area structure definition
  3. Copyright (c) 2021, AMD Inc.
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #ifndef __OVMF_WORK_AREA_H__
  7. #define __OVMF_WORK_AREA_H__
  8. #include <ConfidentialComputingGuestAttr.h>
  9. #include <IndustryStandard/Tpm20.h>
  10. //
  11. // Confidential computing work area header definition. Any change
  12. // to the structure need to be kept in sync with the
  13. // PcdOvmfConfidentialComputingWorkAreaHeader.
  14. //
  15. // PcdOvmfConfidentialComputingWorkAreaHeader ==
  16. // sizeof (CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER)
  17. // PcdOvmfConfidentialComputingWorkAreaHeader defined in:
  18. // OvmfPkg/OvmfPkg.dec
  19. // OvmfPkg/Include/Fdf/OvmfPkgDefines.fdf.inc
  20. typedef struct _CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER {
  21. UINT8 GuestType;
  22. UINT8 Reserved1[3];
  23. } CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER;
  24. //
  25. // Internal structure for holding SEV-ES information needed during SEC phase
  26. // and valid only during SEC phase and early PEI during platform
  27. // initialization.
  28. //
  29. // This structure is also used by assembler files:
  30. // OvmfPkg/ResetVector/ResetVector.nasmb
  31. // OvmfPkg/ResetVector/Ia32/PageTables64.asm
  32. // OvmfPkg/ResetVector/Ia32/Flat32ToFlat64.asm
  33. // any changes must stay in sync with its usage.
  34. //
  35. typedef struct _SEC_SEV_ES_WORK_AREA {
  36. //
  37. // Hold the SevStatus MSR value read by OvmfPkg/ResetVector/Ia32/AmdSev.c
  38. //
  39. UINT64 SevStatusMsrValue;
  40. UINT64 RandomData;
  41. UINT64 EncryptionMask;
  42. //
  43. // Indicator that the VC handler is called. It is used during the SevFeature
  44. // detection in OvmfPkg/ResetVector/Ia32/AmdSev.c
  45. //
  46. UINT8 ReceivedVc;
  47. } SEC_SEV_ES_WORK_AREA;
  48. //
  49. // The SEV work area definition.
  50. //
  51. typedef struct _SEV_WORK_AREA {
  52. CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER Header;
  53. SEC_SEV_ES_WORK_AREA SevEsWorkArea;
  54. } SEV_WORK_AREA;
  55. //
  56. // Start of TDX Specific WorkArea definition
  57. //
  58. #define TDX_MEASUREMENT_TDHOB_BITMASK 0x1
  59. #define TDX_MEASUREMENT_CFVIMG_BITMASK 0x2
  60. typedef struct _TDX_MEASUREMENTS_DATA {
  61. UINT32 MeasurementsBitmap;
  62. UINT8 TdHobHashValue[SHA384_DIGEST_SIZE];
  63. UINT8 CfvImgHashValue[SHA384_DIGEST_SIZE];
  64. } TDX_MEASUREMENTS_DATA;
  65. //
  66. // The TDX work area definition
  67. //
  68. typedef struct _SEC_TDX_WORK_AREA {
  69. UINT32 PageTableReady;
  70. UINT32 Gpaw;
  71. UINT64 HobList;
  72. TDX_MEASUREMENTS_DATA TdxMeasurementsData;
  73. } SEC_TDX_WORK_AREA;
  74. typedef struct _TDX_WORK_AREA {
  75. CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER Header;
  76. SEC_TDX_WORK_AREA SecTdxWorkArea;
  77. } TDX_WORK_AREA;
  78. //
  79. // End of TDX Specific WorkArea definition
  80. //
  81. typedef union {
  82. CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER Header;
  83. SEV_WORK_AREA SevWorkArea;
  84. TDX_WORK_AREA TdxWorkArea;
  85. } OVMF_WORK_AREA;
  86. #endif