+/**\r
+ Get the hypervisor features bitmap\r
+\r
+**/\r
+STATIC\r
+UINT64\r
+GetHypervisorFeature (\r
+ VOID\r
+ )\r
+{\r
+ UINT64 Status;\r
+ GHCB *Ghcb;\r
+ MSR_SEV_ES_GHCB_REGISTER Msr;\r
+ BOOLEAN InterruptState;\r
+ UINT64 Features;\r
+\r
+ Msr.GhcbPhysicalAddress = AsmReadMsr64 (MSR_SEV_ES_GHCB);\r
+ Ghcb = Msr.Ghcb;\r
+\r
+ //\r
+ // Initialize the GHCB\r
+ //\r
+ VmgInit (Ghcb, &InterruptState);\r
+\r
+ //\r
+ // Query the Hypervisor Features.\r
+ //\r
+ Status = VmgExit (Ghcb, SVM_EXIT_HYPERVISOR_FEATURES, 0, 0);\r
+ if ((Status != 0)) {\r
+ SevEsProtocolFailure (GHCB_TERMINATE_GHCB_GENERAL);\r
+ }\r
+\r
+ Features = Ghcb->SaveArea.SwExitInfo2;\r
+\r
+ VmgDone (Ghcb, InterruptState);\r
+\r
+ return Features;\r
+}\r
+\r