mirror of
				https://gitlab.com/qemu-project/edk2.git
				synced 2025-11-03 07:59:00 +08:00 
			
		
		
		
	REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the OvmfPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Andrew Fish <afish@apple.com>
		
			
				
	
	
		
			278 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			278 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
  Internal definitions for the virtio-blk driver, which produces Block I/O
 | 
						|
  Protocol instances for virtio-blk devices.
 | 
						|
 | 
						|
  Copyright (C) 2012, Red Hat, Inc.
 | 
						|
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _VIRTIO_BLK_DXE_H_
 | 
						|
#define _VIRTIO_BLK_DXE_H_
 | 
						|
 | 
						|
#include <Protocol/BlockIo.h>
 | 
						|
#include <Protocol/ComponentName.h>
 | 
						|
#include <Protocol/DriverBinding.h>
 | 
						|
 | 
						|
#include <IndustryStandard/Virtio.h>
 | 
						|
 | 
						|
#define VBLK_SIG  SIGNATURE_32 ('V', 'B', 'L', 'K')
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  //
 | 
						|
  // Parts of this structure are initialized / torn down in various functions
 | 
						|
  // at various call depths. The table to the right should make it easier to
 | 
						|
  // track them.
 | 
						|
  //
 | 
						|
  //                     field                    init function       init dpth
 | 
						|
  //                     ---------------------    ------------------  ---------
 | 
						|
  UINT32                    Signature;         // DriverBindingStart  0
 | 
						|
  VIRTIO_DEVICE_PROTOCOL    *VirtIo;           // DriverBindingStart  0
 | 
						|
  EFI_EVENT                 ExitBoot;          // DriverBindingStart  0
 | 
						|
  VRING                     Ring;              // VirtioRingInit      2
 | 
						|
  EFI_BLOCK_IO_PROTOCOL     BlockIo;           // VirtioBlkInit       1
 | 
						|
  EFI_BLOCK_IO_MEDIA        BlockIoMedia;      // VirtioBlkInit       1
 | 
						|
  VOID                      *RingMap;          // VirtioRingMap       2
 | 
						|
} VBLK_DEV;
 | 
						|
 | 
						|
#define VIRTIO_BLK_FROM_BLOCK_IO(BlockIoPointer) \
 | 
						|
        CR (BlockIoPointer, VBLK_DEV, BlockIo, VBLK_SIG)
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  Device probe function for this driver.
 | 
						|
 | 
						|
  The DXE core calls this function for any given device in order to see if the
 | 
						|
  driver can drive the device.
 | 
						|
 | 
						|
  Specs relevant in the general sense:
 | 
						|
 | 
						|
  - UEFI Spec 2.3.1 + Errata C:
 | 
						|
    - 6.3 Protocol Handler Services -- for accessing the underlying device
 | 
						|
    - 10.1 EFI Driver Binding Protocol -- for exporting ourselves
 | 
						|
 | 
						|
  - Driver Writer's Guide for UEFI 2.3.1 v1.01:
 | 
						|
    - 5.1.3.4 OpenProtocol() and CloseProtocol() -- for accessing the
 | 
						|
      underlying device
 | 
						|
    - 9 Driver Binding Protocol -- for exporting ourselves
 | 
						|
 | 
						|
  @param[in]  This                The EFI_DRIVER_BINDING_PROTOCOL object
 | 
						|
                                  incorporating this driver (independently of
 | 
						|
                                  any device).
 | 
						|
 | 
						|
  @param[in] DeviceHandle         The device to probe.
 | 
						|
 | 
						|
  @param[in] RemainingDevicePath  Relevant only for bus drivers, ignored.
 | 
						|
 | 
						|
 | 
						|
  @retval EFI_SUCCESS      The driver supports the device being probed.
 | 
						|
 | 
						|
  @retval EFI_UNSUPPORTED  Based on virtio-blk discovery, we do not support
 | 
						|
                           the device.
 | 
						|
 | 
						|
  @return                  Error codes from the OpenProtocol() boot service.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
VirtioBlkDriverBindingSupported (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   DeviceHandle,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  After we've pronounced support for a specific device in
 | 
						|
  DriverBindingSupported(), we start managing said device (passed in by the
 | 
						|
  Driver Execution Environment) with the following service.
 | 
						|
 | 
						|
  See DriverBindingSupported() for specification references.
 | 
						|
 | 
						|
  @param[in]  This                The EFI_DRIVER_BINDING_PROTOCOL object
 | 
						|
                                  incorporating this driver (independently of
 | 
						|
                                  any device).
 | 
						|
 | 
						|
  @param[in] DeviceHandle         The supported device to drive.
 | 
						|
 | 
						|
  @param[in] RemainingDevicePath  Relevant only for bus drivers, ignored.
 | 
						|
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Driver instance has been created and
 | 
						|
                                initialized  for the virtio-blk device, it
 | 
						|
                                is now accessible via EFI_BLOCK_IO_PROTOCOL.
 | 
						|
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  Memory allocation failed.
 | 
						|
 | 
						|
  @return                       Error codes from the OpenProtocol() boot
 | 
						|
                                service, VirtioBlkInit(), or the
 | 
						|
                                InstallProtocolInterface() boot service.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
VirtioBlkDriverBindingStart (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   DeviceHandle,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  Stop driving a virtio-blk device and remove its BlockIo interface.
 | 
						|
 | 
						|
  This function replays the success path of DriverBindingStart() in reverse.
 | 
						|
  The host side virtio-blk device is reset, so that the OS boot loader or the
 | 
						|
  OS may reinitialize it.
 | 
						|
 | 
						|
  @param[in] This               The EFI_DRIVER_BINDING_PROTOCOL object
 | 
						|
                                incorporating this driver (independently of any
 | 
						|
                                device).
 | 
						|
 | 
						|
  @param[in] DeviceHandle       Stop driving this device.
 | 
						|
 | 
						|
  @param[in] NumberOfChildren   Since this function belongs to a device driver
 | 
						|
                                only (as opposed to a bus driver), the caller
 | 
						|
                                environment sets NumberOfChildren to zero, and
 | 
						|
                                we ignore it.
 | 
						|
 | 
						|
  @param[in] ChildHandleBuffer  Ignored (corresponding to NumberOfChildren).
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
VirtioBlkDriverBindingStop (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   DeviceHandle,
 | 
						|
  IN UINTN                        NumberOfChildren,
 | 
						|
  IN EFI_HANDLE                   *ChildHandleBuffer
 | 
						|
  );
 | 
						|
 | 
						|
//
 | 
						|
// UEFI Spec 2.3.1 + Errata C, 12.8 EFI Block I/O Protocol
 | 
						|
// Driver Writer's Guide for UEFI 2.3.1 v1.01,
 | 
						|
//   24.2 Block I/O Protocol Implementations
 | 
						|
//
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
VirtioBlkReset (
 | 
						|
  IN EFI_BLOCK_IO_PROTOCOL  *This,
 | 
						|
  IN BOOLEAN                ExtendedVerification
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  ReadBlocks() operation for virtio-blk.
 | 
						|
 | 
						|
  See
 | 
						|
  - UEFI Spec 2.3.1 + Errata C, 12.8 EFI Block I/O Protocol, 12.8 EFI Block I/O
 | 
						|
    Protocol, EFI_BLOCK_IO_PROTOCOL.ReadBlocks().
 | 
						|
  - Driver Writer's Guide for UEFI 2.3.1 v1.01, 24.2.2. ReadBlocks() and
 | 
						|
    ReadBlocksEx() Implementation.
 | 
						|
 | 
						|
  Parameter checks and conformant return values are implemented in
 | 
						|
  VerifyReadWriteRequest() and SynchronousRequest().
 | 
						|
 | 
						|
  A zero BufferSize doesn't seem to be prohibited, so do nothing in that case,
 | 
						|
  successfully.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
VirtioBlkReadBlocks (
 | 
						|
  IN  EFI_BLOCK_IO_PROTOCOL  *This,
 | 
						|
  IN  UINT32                 MediaId,
 | 
						|
  IN  EFI_LBA                Lba,
 | 
						|
  IN  UINTN                  BufferSize,
 | 
						|
  OUT VOID                   *Buffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  WriteBlocks() operation for virtio-blk.
 | 
						|
 | 
						|
  See
 | 
						|
  - UEFI Spec 2.3.1 + Errata C, 12.8 EFI Block I/O Protocol, 12.8 EFI Block I/O
 | 
						|
    Protocol, EFI_BLOCK_IO_PROTOCOL.WriteBlocks().
 | 
						|
  - Driver Writer's Guide for UEFI 2.3.1 v1.01, 24.2.3 WriteBlocks() and
 | 
						|
    WriteBlockEx() Implementation.
 | 
						|
 | 
						|
  Parameter checks and conformant return values are implemented in
 | 
						|
  VerifyReadWriteRequest() and SynchronousRequest().
 | 
						|
 | 
						|
  A zero BufferSize doesn't seem to be prohibited, so do nothing in that case,
 | 
						|
  successfully.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
VirtioBlkWriteBlocks (
 | 
						|
  IN EFI_BLOCK_IO_PROTOCOL  *This,
 | 
						|
  IN UINT32                 MediaId,
 | 
						|
  IN EFI_LBA                Lba,
 | 
						|
  IN UINTN                  BufferSize,
 | 
						|
  IN VOID                   *Buffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  FlushBlocks() operation for virtio-blk.
 | 
						|
 | 
						|
  See
 | 
						|
  - UEFI Spec 2.3.1 + Errata C, 12.8 EFI Block I/O Protocol, 12.8 EFI Block I/O
 | 
						|
    Protocol, EFI_BLOCK_IO_PROTOCOL.FlushBlocks().
 | 
						|
  - Driver Writer's Guide for UEFI 2.3.1 v1.01, 24.2.4 FlushBlocks() and
 | 
						|
    FlushBlocksEx() Implementation.
 | 
						|
 | 
						|
  If the underlying virtio-blk device doesn't support flushing (ie.
 | 
						|
  write-caching), then this function should not be called by higher layers,
 | 
						|
  according to EFI_BLOCK_IO_MEDIA characteristics set in VirtioBlkInit().
 | 
						|
  Should they do nonetheless, we do nothing, successfully.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
VirtioBlkFlushBlocks (
 | 
						|
  IN EFI_BLOCK_IO_PROTOCOL  *This
 | 
						|
  );
 | 
						|
 | 
						|
//
 | 
						|
// The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and
 | 
						|
// EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name
 | 
						|
// in English, for display on standard console devices. This is recommended for
 | 
						|
// UEFI drivers that follow the UEFI Driver Model. Refer to the Driver Writer's
 | 
						|
// Guide for UEFI 2.3.1 v1.01, 11 UEFI Driver and Controller Names.
 | 
						|
//
 | 
						|
// Device type names ("Virtio Block Device") are not formatted because the
 | 
						|
// driver supports only that device type. Therefore the driver name suffices
 | 
						|
// for unambiguous identification.
 | 
						|
//
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
VirtioBlkGetDriverName (
 | 
						|
  IN  EFI_COMPONENT_NAME_PROTOCOL  *This,
 | 
						|
  IN  CHAR8                        *Language,
 | 
						|
  OUT CHAR16                       **DriverName
 | 
						|
  );
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
VirtioBlkGetDeviceName (
 | 
						|
  IN  EFI_COMPONENT_NAME_PROTOCOL  *This,
 | 
						|
  IN  EFI_HANDLE                   DeviceHandle,
 | 
						|
  IN  EFI_HANDLE                   ChildHandle,
 | 
						|
  IN  CHAR8                        *Language,
 | 
						|
  OUT CHAR16                       **ControllerName
 | 
						|
  );
 | 
						|
 | 
						|
#endif // _VIRTIO_BLK_DXE_H_
 |