On 01/08/16 02:16, Ni, Ruiyu wrote:
> On 2016/1/8 3:19, Laszlo Ersek wrote:
>> On 01/07/16 06:10, Ruiyu Ni wrote:
>>> PciHostBridgeDxe driver needs PciHostBridgeLib implemented by platform
>>> to provide the root bridge related information and may call into
>>> PciHostBridgeLib when resource conflicts happen.
>>>
>>> Contributed-under: TianoCore Contribution Agreement 1.0
>>> Signed-off-by: Ruiyu Ni <[email protected]>
>>> Cc: Feng Tian <[email protected]>
>>> Cc: Jeff Fan <[email protected]>
>>> Cc: Michael Kinney <[email protected]>
>>>
>>> # Conflicts:
>>> #    MdeModulePkg/MdeModulePkg.dec
>>>
>>> Signed-off-by: Ruiyu Ni <[email protected]>
>>> ---
>>>   MdeModulePkg/Include/Library/PciHostBridgeLib.h | 86
>>> +++++++++++++++++++++++++
>>>   MdeModulePkg/MdeModulePkg.dec                   |  6 +-
>>>   2 files changed, 91 insertions(+), 1 deletion(-)
>>>   create mode 100644 MdeModulePkg/Include/Library/PciHostBridgeLib.h
>>>
>>> diff --git a/MdeModulePkg/Include/Library/PciHostBridgeLib.h
>>> b/MdeModulePkg/Include/Library/PciHostBridgeLib.h
>>> new file mode 100644
>>> index 0000000..da87502
>>> --- /dev/null
>>> +++ b/MdeModulePkg/Include/Library/PciHostBridgeLib.h
>>> @@ -0,0 +1,86 @@
>>> +/** @file
>>> +  PCI Host Bridge Library consumed by PciHostBridgeDxe driver returning
>>> +  the platform specific information about the PCI Host Bridge.
>>> +
>>> +  Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
>>> +  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 _PCI_HOST_BRIDGE_LIB_H__
>>> +#define _PCI_HOST_BRIDGE_LIB_H__
>>> +
>>> +typedef struct {
>>> +  UINT64 Base;
>>> +  UINT64 Limit;
>>> +} PCI_ROOT_BRIDGE_APERTURE;
>>> +
>>> +typedef struct {
>>> +  UINT32                   Segment;
>>> +  UINT64                   Supports;
>>> +  UINT64                   Attributes;
>>> +  BOOLEAN                  DmaAbove4G;
>>> +  UINT64                   AllocationAttributes; //
>>> PMEM_MEM_COMBINE/ MEM64
>>> +  PCI_ROOT_BRIDGE_APERTURE Bus;
>>> +  PCI_ROOT_BRIDGE_APERTURE Io;
>>> +  PCI_ROOT_BRIDGE_APERTURE Mem;
>>> +  PCI_ROOT_BRIDGE_APERTURE MemAbove4G;
>>> +  PCI_ROOT_BRIDGE_APERTURE PMem;
>>> +  PCI_ROOT_BRIDGE_APERTURE PMemAbove4G;
>>> +  EFI_DEVICE_PATH_PROTOCOL *DevicePath;
>>> +} PCI_ROOT_BRIDGE;
>>
>> Could you document here how a library instance can signal that a given
>> kind of aperture is not available?
>>
> sure. I will document it in the library class header file as the
> comments for PCI_ROOT_BRIDGE_APERTURE.
> Limit < Base indicates an aperture is not available.
>>> +
>>> +/**
>>> +  Return all the root bridge instances in an array.
>>> +
>>> +  @param Count  Return the count of root bridge instances.
>>> +
>>> +  @return All the root bridge instances in an array.
>>> +          The array should be passed into
>>> PciHostBridgeFreeRootBridges()
>>> +          when it's not used.
>>> +**/
>>> +PCI_ROOT_BRIDGE *
>>> +EFIAPI
>>> +PciHostBridgeGetRootBridges (
>>> +  UINTN *Count
>>> +  );
>>
>> Is this function allowed to fail, and/or return zero bridges?
>>
> Failure of this function will cause the PciHostBridgeDxe fail to start.
> 
>>> +
>>> +/**
>>> +  Free the root bridge instances array returned from
>>> PciHostBridgeGetRootBridges().
>>> +
>>> +  @param  The root bridge instances array.
>>> +  @param  The count of the array.
>>> +**/
>>> +VOID
>>> +EFIAPI
>>> +PciHostBridgeFreeRootBridges (
>>> +  PCI_ROOT_BRIDGE *Bridges,
>>> +  UINTN           Count
>>> +  );
>>> +
>>> +/**
>>> +  Inform the platform that the resource conflict happens.
>>> +
>>> +  @param HostBridgeHandle Handle of the Host Bridge.
>>> +  @param Configuration    Pointer to PCI I/O and PCI memory resource
>>> descriptors.
>>> +                          The Configuration contains the resources
>>> for all the
>>> +                          root bridges. The resource for each root
>>> bridge is
>>> +                          terminated with END descriptor and an
>>> additional END
>>> +                          is appended indicating the end of the
>>> entire resources.
>>> +                          The resource descriptor field values
>>> follow the description
>>> +                          in
>>> EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL.SubmitResources().
>>> +**/
>>> +VOID
>>> +EFIAPI
>>> +PciHostBridgeResourceConflict (
>>> +  EFI_HANDLE           HostBridgeHandle,
>>> +  VOID                 *Configuration
>>> +  );
>>
>> What is this function supposed to do?
> Platform can have implementation to listen the resource conflict event.
> A typical thing it can do is to reserve more MMIO / IO resources for the
> PCI bus in next boot by saving the requested resource size to a NV
> variable for example.

That makes a lot of sense (although it doesn't seem applicable to QEMU /
OVMF specifically).

Thanks!
Laszlo

> 
>>
>> Thanks
>> Laszlo
>>
>>
>>> +
>>> +#endif
>>> \ No newline at end of file
>>> diff --git a/MdeModulePkg/MdeModulePkg.dec
>>> b/MdeModulePkg/MdeModulePkg.dec
>>> index 0d8aede..5c5a9ee 100644
>>> --- a/MdeModulePkg/MdeModulePkg.dec
>>> +++ b/MdeModulePkg/MdeModulePkg.dec
>>> @@ -3,7 +3,7 @@
>>>   # It also provides the definitions(including PPIs/PROTOCOLs/GUIDs
>>> and library classes)
>>>   # and libraries instances, which are used for those modules.
>>>   #
>>> -# Copyright (c) 2007 - 2015, Intel Corporation. All rights
>>> reserved.<BR>
>>> +# Copyright (c) 2007 - 2016, Intel Corporation. All rights
>>> reserved.<BR>
>>>   # This program and the accompanying materials are licensed and made
>>> available under
>>>   # the terms and conditions of the BSD License that accompanies this
>>> distribution.
>>>   # The full text of the license may be found at
>>> @@ -147,6 +147,10 @@
>>>     #
>>>     IpmiLib|Include/Library/IpmiLib.h
>>>
>>> +  ## @libraryclass  Provides interfaces for platform to return root
>>> bridge information to PciHostBridgeDxe driver.
>>> +  #
>>> +  PciHostBridgeLib|Include/Library/PciHostBridgeLib.h
>>> +
>>>   [Guids]
>>>     ## MdeModule package token space guid
>>>     # Include/Guid/MdeModulePkgTokenSpace.h
>>>
> 

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to