From abcbbb14a44a83b4cdf90137307a62e7b58e6720 Mon Sep 17 00:00:00 2001 From: Anthony PERARD Date: Wed, 29 Oct 2014 06:49:10 +0000 Subject: OvmfPkg/XenBusDxe: Add support to make Xen Hypercalls. Change in V4: - Replace the license by the commonly used file header text. - add file header to XenHypercall.h (license, copyright, brief desc) Change in V3: - adding IA32 support. (not reviewed yet) both XenBusDxe/Ia32/hypercall.{S,asm} file are new Change in V2: - file header, copyright - Add License - Add push/pop instruction. - fix types - Comment of exported functions - Improve coding style - Add error handling in the main init function (of the drivers) - Comment assembly Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Anthony PERARD Reviewed-by: Konrad Rzeszutek Wilk Reviewed-by: Jordan Justen git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16260 6f19259b-4bc3-4df7-8a09-765794883524 --- OvmfPkg/XenBusDxe/XenBusDxe.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'OvmfPkg/XenBusDxe/XenBusDxe.c') diff --git a/OvmfPkg/XenBusDxe/XenBusDxe.c b/OvmfPkg/XenBusDxe/XenBusDxe.c index f3c74e1fbe..4c638b85f1 100644 --- a/OvmfPkg/XenBusDxe/XenBusDxe.c +++ b/OvmfPkg/XenBusDxe/XenBusDxe.c @@ -29,6 +29,8 @@ #include "XenBusDxe.h" +#include "XenHypercall.h" + /// /// Driver Binding Protocol instance @@ -264,6 +266,8 @@ NotifyExitBoot ( @retval EFI_SUCCESS The device was started. @retval EFI_DEVICE_ERROR The device could not be started due to a device error.Currently not implemented. @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources. + @retval EFI_UNSUPPORTED Something is missing on the system that + prevent to start the edvice. @retval Others The driver failded to start the device. **/ @@ -295,6 +299,20 @@ XenBusDxeDriverBindingStart ( mMyDevice = Dev; EfiReleaseLock (&mMyDeviceLock); + Status = XenHyperpageInit (Dev); + if (EFI_ERROR (Status)) { + DEBUG ((EFI_D_ERROR, "XenBus: Unable to retrieve the hyperpage.\n")); + Status = EFI_UNSUPPORTED; + goto ErrorAllocated; + } + + Status = XenGetSharedInfoPage (Dev); + if (EFI_ERROR (Status)) { + DEBUG ((EFI_D_ERROR, "XenBus: Unable to get the shared info page.\n")); + Status = EFI_UNSUPPORTED; + goto ErrorAllocated; + } + Status = gBS->CreateEvent (EVT_SIGNAL_EXIT_BOOT_SERVICES, TPL_CALLBACK, NotifyExitBoot, (VOID*) Dev, -- cgit v1.2.3