Copyright (C) 2013, ARM Ltd.\r
Copyright (C) 2017, AMD Inc, All rights reserved.<BR>\r
\r
- This program and the accompanying materials are licensed and made available\r
- under the terms and conditions of the BSD License which accompanies this\r
- distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT\r
- WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
\r
#include "VirtioPciDevice.h"\r
\r
-STATIC VIRTIO_DEVICE_PROTOCOL mDeviceProtocolTemplate = {\r
+STATIC VIRTIO_DEVICE_PROTOCOL mDeviceProtocolTemplate = {\r
0, // Revision\r
0, // SubSystemDeviceId\r
VirtioPciGetDeviceFeatures, // GetDeviceFeatures\r
EFI_STATUS\r
EFIAPI\r
VirtioPciIoRead (\r
- IN VIRTIO_PCI_DEVICE *Dev,\r
- IN UINTN FieldOffset,\r
- IN UINTN FieldSize,\r
- IN UINTN BufferSize,\r
- OUT VOID *Buffer\r
+ IN VIRTIO_PCI_DEVICE *Dev,\r
+ IN UINTN FieldOffset,\r
+ IN UINTN FieldSize,\r
+ IN UINTN BufferSize,\r
+ OUT VOID *Buffer\r
)\r
{\r
- UINTN Count;\r
- EFI_PCI_IO_PROTOCOL_WIDTH Width;\r
- EFI_PCI_IO_PROTOCOL *PciIo;\r
+ UINTN Count;\r
+ EFI_PCI_IO_PROTOCOL_WIDTH Width;\r
+ EFI_PCI_IO_PROTOCOL *PciIo;\r
\r
ASSERT (FieldSize == BufferSize);\r
\r
//\r
Count = 2;\r
\r
- //\r
- // fall through\r
- //\r
+ //\r
+ // fall through\r
+ //\r
case 4:\r
Width = EfiPciIoWidthUint32;\r
break;\r
EFI_STATUS\r
EFIAPI\r
VirtioPciIoWrite (\r
- IN VIRTIO_PCI_DEVICE *Dev,\r
- IN UINTN FieldOffset,\r
- IN UINTN FieldSize,\r
- IN UINT64 Value\r
+ IN VIRTIO_PCI_DEVICE *Dev,\r
+ IN UINTN FieldOffset,\r
+ IN UINTN FieldSize,\r
+ IN UINT64 Value\r
)\r
{\r
- UINTN Count;\r
- EFI_PCI_IO_PROTOCOL_WIDTH Width;\r
- EFI_PCI_IO_PROTOCOL *PciIo;\r
+ UINTN Count;\r
+ EFI_PCI_IO_PROTOCOL_WIDTH Width;\r
+ EFI_PCI_IO_PROTOCOL *PciIo;\r
\r
PciIo = Dev->PciIo;\r
Count = 1;\r
//\r
Count = Count * 2;\r
\r
- //\r
- // fall through\r
- //\r
+ //\r
+ // fall through\r
+ //\r
case 4:\r
Width = EfiPciIoWidthUint32;\r
break;\r
EFI_STATUS\r
EFIAPI\r
VirtioPciDeviceBindingSupported (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE DeviceHandle,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE DeviceHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_PCI_IO_PROTOCOL *PciIo;\r
- PCI_TYPE00 Pci;\r
+ EFI_STATUS Status;\r
+ EFI_PCI_IO_PROTOCOL *PciIo;\r
+ PCI_TYPE00 Pci;\r
\r
//\r
// Attempt to open the device with the PciIo set of interfaces. On success,\r
if ((Pci.Hdr.VendorId == VIRTIO_VENDOR_ID) &&\r
(Pci.Hdr.DeviceId >= 0x1000) &&\r
(Pci.Hdr.DeviceId <= 0x103F) &&\r
- (Pci.Hdr.RevisionID == 0x00)) {\r
+ (Pci.Hdr.RevisionID == 0x00))\r
+ {\r
Status = EFI_SUCCESS;\r
} else {\r
Status = EFI_UNSUPPORTED;\r
// We needed PCI IO access only transitorily, to see whether we support the\r
// device or not.\r
//\r
- gBS->CloseProtocol (DeviceHandle, &gEfiPciIoProtocolGuid,\r
- This->DriverBindingHandle, DeviceHandle);\r
+ gBS->CloseProtocol (\r
+ DeviceHandle,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ DeviceHandle\r
+ );\r
\r
return Status;\r
}\r
EFI_STATUS\r
EFIAPI\r
VirtioPciInit (\r
- IN OUT VIRTIO_PCI_DEVICE *Device\r
+ IN OUT VIRTIO_PCI_DEVICE *Device\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_PCI_IO_PROTOCOL *PciIo;\r
- PCI_TYPE00 Pci;\r
+ EFI_STATUS Status;\r
+ EFI_PCI_IO_PROTOCOL *PciIo;\r
+ PCI_TYPE00 Pci;\r
\r
ASSERT (Device != NULL);\r
PciIo = Device->PciIo;\r
ASSERT (PciIo->Pci.Read != NULL);\r
\r
Status = PciIo->Pci.Read (\r
- PciIo, // (protocol, device)\r
- // handle\r
- EfiPciIoWidthUint32, // access width & copy\r
- // mode\r
- 0, // Offset\r
+ PciIo, // (protocol, device)\r
+ // handle\r
+ EfiPciIoWidthUint32, // access width & copy\r
+ // mode\r
+ 0, // Offset\r
sizeof (Pci) / sizeof (UINT32), // Count\r
- &Pci // target buffer\r
+ &Pci // target buffer\r
);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
//\r
// Copy protocol template\r
//\r
- CopyMem (&Device->VirtioDevice, &mDeviceProtocolTemplate,\r
- sizeof (VIRTIO_DEVICE_PROTOCOL));\r
+ CopyMem (\r
+ &Device->VirtioDevice,\r
+ &mDeviceProtocolTemplate,\r
+ sizeof (VIRTIO_DEVICE_PROTOCOL)\r
+ );\r
\r
//\r
// Initialize the protocol interface attributes\r
//\r
- Device->VirtioDevice.Revision = VIRTIO_SPEC_REVISION (0, 9, 5);\r
+ Device->VirtioDevice.Revision = VIRTIO_SPEC_REVISION (0, 9, 5);\r
Device->VirtioDevice.SubSystemDeviceId = Pci.Device.SubsystemID;\r
\r
//\r
// the offset would become 24 after enabling MSI-X.\r
//\r
Device->DeviceSpecificConfigurationOffset =\r
- VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_PCI;\r
+ VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_PCI;\r
\r
return EFI_SUCCESS;\r
}\r
@param[in, out] Dev The device to clean up.\r
\r
**/\r
-\r
STATIC\r
VOID\r
EFIAPI\r
VirtioPciUninit (\r
- IN OUT VIRTIO_PCI_DEVICE *Device\r
+ IN OUT VIRTIO_PCI_DEVICE *Device\r
)\r
{\r
// Note: This function mirrors VirtioPciInit() that does not allocate any\r
EFI_STATUS\r
EFIAPI\r
VirtioPciDeviceBindingStart (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE DeviceHandle,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE DeviceHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
{\r
- VIRTIO_PCI_DEVICE *Device;\r
- EFI_STATUS Status;\r
+ VIRTIO_PCI_DEVICE *Device;\r
+ EFI_STATUS Status;\r
\r
- Device = (VIRTIO_PCI_DEVICE *) AllocateZeroPool (sizeof *Device);\r
+ Device = (VIRTIO_PCI_DEVICE *)AllocateZeroPool (sizeof *Device);\r
if (Device == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- Status = gBS->OpenProtocol (DeviceHandle, &gEfiPciIoProtocolGuid,\r
- (VOID **)&Device->PciIo, This->DriverBindingHandle,\r
- DeviceHandle, EFI_OPEN_PROTOCOL_BY_DRIVER);\r
+ Status = gBS->OpenProtocol (\r
+ DeviceHandle,\r
+ &gEfiPciIoProtocolGuid,\r
+ (VOID **)&Device->PciIo,\r
+ This->DriverBindingHandle,\r
+ DeviceHandle,\r
+ EFI_OPEN_PROTOCOL_BY_DRIVER\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto FreeVirtioPci;\r
}\r
//\r
// For virtio-pci we only need IO space access.\r
//\r
- Status = Device->PciIo->Attributes (Device->PciIo,\r
- EfiPciIoAttributeOperationGet, 0, &Device->OriginalPciAttributes);\r
+ Status = Device->PciIo->Attributes (\r
+ Device->PciIo,\r
+ EfiPciIoAttributeOperationGet,\r
+ 0,\r
+ &Device->OriginalPciAttributes\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto ClosePciIo;\r
}\r
// interface.\r
//\r
Device->Signature = VIRTIO_PCI_DEVICE_SIGNATURE;\r
- Status = gBS->InstallProtocolInterface (&DeviceHandle,\r
- &gVirtioDeviceProtocolGuid, EFI_NATIVE_INTERFACE,\r
- &Device->VirtioDevice);\r
+ Status = gBS->InstallProtocolInterface (\r
+ &DeviceHandle,\r
+ &gVirtioDeviceProtocolGuid,\r
+ EFI_NATIVE_INTERFACE,\r
+ &Device->VirtioDevice\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto UninitDev;\r
}\r
VirtioPciUninit (Device);\r
\r
RestorePciAttributes:\r
- Device->PciIo->Attributes (Device->PciIo, EfiPciIoAttributeOperationSet,\r
- Device->OriginalPciAttributes, NULL);\r
+ Device->PciIo->Attributes (\r
+ Device->PciIo,\r
+ EfiPciIoAttributeOperationSet,\r
+ Device->OriginalPciAttributes,\r
+ NULL\r
+ );\r
\r
ClosePciIo:\r
- gBS->CloseProtocol (DeviceHandle, &gEfiPciIoProtocolGuid,\r
- This->DriverBindingHandle, DeviceHandle);\r
+ gBS->CloseProtocol (\r
+ DeviceHandle,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ DeviceHandle\r
+ );\r
\r
FreeVirtioPci:\r
FreePool (Device);\r
EFI_STATUS\r
EFIAPI\r
VirtioPciDeviceBindingStop (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE DeviceHandle,\r
- IN UINTN NumberOfChildren,\r
- IN EFI_HANDLE *ChildHandleBuffer\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE DeviceHandle,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
VIRTIO_DEVICE_PROTOCOL *VirtioDevice;\r
VIRTIO_PCI_DEVICE *Device;\r
\r
//\r
// Handle Stop() requests for in-use driver instances gracefully.\r
//\r
- Status = gBS->UninstallProtocolInterface (DeviceHandle,\r
- &gVirtioDeviceProtocolGuid, &Device->VirtioDevice);\r
+ Status = gBS->UninstallProtocolInterface (\r
+ DeviceHandle,\r
+ &gVirtioDeviceProtocolGuid,\r
+ &Device->VirtioDevice\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
VirtioPciUninit (Device);\r
\r
- Device->PciIo->Attributes (Device->PciIo, EfiPciIoAttributeOperationSet,\r
- Device->OriginalPciAttributes, NULL);\r
-\r
- Status = gBS->CloseProtocol (DeviceHandle, &gEfiPciIoProtocolGuid,\r
- This->DriverBindingHandle, DeviceHandle);\r
+ Device->PciIo->Attributes (\r
+ Device->PciIo,\r
+ EfiPciIoAttributeOperationSet,\r
+ Device->OriginalPciAttributes,\r
+ NULL\r
+ );\r
+\r
+ Status = gBS->CloseProtocol (\r
+ DeviceHandle,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ DeviceHandle\r
+ );\r
\r
FreePool (Device);\r
\r
return Status;\r
}\r
\r
-\r
//\r
// The static object that groups the Supported() (ie. probe), Start() and\r
// Stop() functions of the driver together. Refer to UEFI Spec 2.3.1 + Errata\r
// C, 10.1 EFI Driver Binding Protocol.\r
//\r
-STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = {\r
+STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = {\r
&VirtioPciDeviceBindingSupported,\r
&VirtioPciDeviceBindingStart,\r
&VirtioPciDeviceBindingStop,\r
NULL // DriverBindingHandle, ditto\r
};\r
\r
-\r
//\r
// The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and\r
// EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name\r
// Guide for UEFI 2.3.1 v1.01, 11 UEFI Driver and Controller Names.\r
//\r
STATIC\r
-EFI_UNICODE_STRING_TABLE mDriverNameTable[] = {\r
+EFI_UNICODE_STRING_TABLE mDriverNameTable[] = {\r
{ "eng;en", L"Virtio PCI Driver" },\r
- { NULL, NULL }\r
+ { NULL, NULL }\r
};\r
\r
STATIC\r
-EFI_COMPONENT_NAME_PROTOCOL gComponentName;\r
+EFI_COMPONENT_NAME_PROTOCOL gComponentName;\r
\r
EFI_STATUS\r
EFIAPI\r
VirtioPciGetDriverName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **DriverName\r
+ IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
+ IN CHAR8 *Language,\r
+ OUT CHAR16 **DriverName\r
)\r
{\r
return LookupUnicodeString2 (\r
EFI_STATUS\r
EFIAPI\r
VirtioPciGetDeviceName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN EFI_HANDLE DeviceHandle,\r
- IN EFI_HANDLE ChildHandle,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **ControllerName\r
+ IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
+ IN EFI_HANDLE DeviceHandle,\r
+ IN EFI_HANDLE ChildHandle,\r
+ IN CHAR8 *Language,\r
+ OUT CHAR16 **ControllerName\r
)\r
{\r
return EFI_UNSUPPORTED;\r
}\r
\r
STATIC\r
-EFI_COMPONENT_NAME_PROTOCOL gComponentName = {\r
+EFI_COMPONENT_NAME_PROTOCOL gComponentName = {\r
&VirtioPciGetDriverName,\r
&VirtioPciGetDeviceName,\r
"eng" // SupportedLanguages, ISO 639-2 language codes\r
};\r
\r
STATIC\r
-EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = {\r
- (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) &VirtioPciGetDriverName,\r
- (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) &VirtioPciGetDeviceName,\r
+EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = {\r
+ (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)&VirtioPciGetDriverName,\r
+ (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)&VirtioPciGetDeviceName,\r
"en" // SupportedLanguages, RFC 4646 language codes\r
};\r
\r
-\r
//\r
// Entry point of this driver.\r
//\r
EFI_STATUS\r
EFIAPI\r
VirtioPciDeviceEntryPoint (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
return EfiLibInstallDriverBindingComponentName2 (\r