]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / OvmfPkg / VirtioPciDeviceDxe / VirtioPciDevice.c
index d4b4ec21c34d75d8b389538c3b97d417ae6b6eb9..b4ac195b0d52b07ebe38488f5479415fa4d54f6f 100644 (file)
@@ -7,13 +7,7 @@
   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
@@ -26,7 +20,7 @@
 \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
@@ -73,16 +67,16 @@ STATIC VIRTIO_DEVICE_PROTOCOL mDeviceProtocolTemplate = {
 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
@@ -111,9 +105,9 @@ VirtioPciIoRead (
       //\r
       Count = 2;\r
 \r
-      //\r
-      // fall through\r
-      //\r
+    //\r
+    // fall through\r
+    //\r
     case 4:\r
       Width = EfiPciIoWidthUint32;\r
       break;\r
@@ -156,15 +150,15 @@ VirtioPciIoRead (
 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
@@ -191,9 +185,9 @@ VirtioPciIoWrite (
       //\r
       Count = Count * 2;\r
 \r
-      //\r
-      // fall through\r
-      //\r
+    //\r
+    // fall through\r
+    //\r
     case 4:\r
       Width = EfiPciIoWidthUint32;\r
       break;\r
@@ -242,14 +236,14 @@ STATIC
 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
@@ -290,7 +284,8 @@ VirtioPciDeviceBindingSupported (
     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
@@ -301,8 +296,12 @@ VirtioPciDeviceBindingSupported (
   // 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
@@ -327,12 +326,12 @@ STATIC
 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
@@ -340,13 +339,13 @@ VirtioPciInit (
   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
@@ -355,13 +354,16 @@ VirtioPciInit (
   //\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
@@ -369,7 +371,7 @@ VirtioPciInit (
   //       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
@@ -382,12 +384,11 @@ VirtioPciInit (
   @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
@@ -426,22 +427,27 @@ STATIC
 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
@@ -457,8 +463,12 @@ VirtioPciDeviceBindingStart (
   //\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
@@ -488,9 +498,12 @@ VirtioPciDeviceBindingStart (
   // 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
@@ -501,12 +514,20 @@ UninitDev:
   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
@@ -543,13 +564,13 @@ STATIC
 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
@@ -570,32 +591,42 @@ VirtioPciDeviceBindingStop (
   //\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
@@ -605,7 +636,6 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = {
   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
@@ -614,20 +644,20 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = {
 // 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
@@ -642,39 +672,38 @@ VirtioPciGetDriverName (
 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