/** @file

  Definitions for the VirtIo MMIO Device Library

  Copyright (C) 2013, ARM Ltd

  This program and the accompanying materials are licensed and made available
  under the terms and conditions of the BSD License which accompanies this
  distribution. The full text of the license may be found at
  http://opensource.org/licenses/bsd-license.php

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
  WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

**/

#ifndef _VIRTIO_MMIO_DEVICE_LIB_H_
#define _VIRTIO_MMIO_DEVICE_LIB_H_

/**

  Initialize VirtIo Device and Install VIRTIO_DEVICE_PROTOCOL protocol

  @param[in] BaseAddress  Base Address of the VirtIo MMIO Device

  @param[in] Handle       Handle of the device the driver should be attached
                          to.

  @retval EFI_SUCCESS           The VirtIo Device has been installed
                                successfully.

  @retval EFI_OUT_OF_RESOURCES  The function failed to allocate memory required
                                by the Virtio MMIO device initialization.

  @retval EFI_UNSUPPORTED       BaseAddress does not point to a VirtIo MMIO
                                device.

  @return                       Status code returned by InstallProtocolInterface
                                Boot Service function.

**/
EFI_STATUS
VirtioMmioInstallDevice (
  IN PHYSICAL_ADDRESS       BaseAddress,
  IN EFI_HANDLE             Handle
  );

/**

  Uninstall the VirtIo Device

  @param[in] Handle       Handle of the device where the VirtIo Device protocol
                          should have been installed.

  @retval EFI_SUCCESS     The device has been un-initialized successfully.

  @return                 Status code returned by UninstallProtocolInterface
                          Boot Service function.

**/
EFI_STATUS
VirtioMmioUninstallDevice (
  IN EFI_HANDLE             Handle
  );

#endif // _VIRTIO_MMIO_DEVICE_LIB_H_
