123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- /** @file
- Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include <PiDxe.h>
- #include "PciPlatform.h"
- #include <Library/PcdLib.h>
- #ifdef EFI_PCI_IOV_SUPPORT
- #include "PciIovPlatformPolicy.h"
- #endif
- PCI_PLATFORM_PRIVATE_DATA mPciPrivateData;
- BOOLEAN FirstCall = TRUE;
- UINT8 sSataRaidLoadEfiDriverOption;
- UINT8 SataRaidLoadEfiDriverOption;
- UINT8 BootNetworkOption;
- /**
- Set the PciPolicy as EFI_RESERVE_ISA_IO_NO_ALIAS | EFI_RESERVE_VGA_IO_NO_ALIAS.
- @param This - The pointer to the Protocol itself.
- PciPolicy - the returned Policy.
- @retval EFI_UNSUPPORTED - Function not supported.
- @retval EFI_INVALID_PARAMETER - Invalid PciPolicy value.
- **/
- EFI_STATUS
- EFIAPI
- GetPlatformPolicy (
- IN CONST EFI_PCI_PLATFORM_PROTOCOL *This,
- OUT EFI_PCI_PLATFORM_POLICY *PciPolicy
- )
- {
- if (PciPolicy == NULL) {
- return EFI_INVALID_PARAMETER;
- }
- return EFI_UNSUPPORTED;
- }
- /**
- Return a PCI ROM image for the onboard device represented by PciHandle.
- @param This - Protocol instance pointer.
- PciHandle - PCI device to return the ROM image for.
- RomImage - PCI Rom Image for onboard device.
- RomSize - Size of RomImage in bytes.
- @retval EFI_SUCCESS - RomImage is valid.
- @retval EFI_NOT_FOUND - No RomImage.
- **/
- EFI_STATUS
- EFIAPI
- GetPciRom (
- IN CONST EFI_PCI_PLATFORM_PROTOCOL *This,
- IN EFI_HANDLE PciHandle,
- OUT VOID **RomImage,
- OUT UINTN *RomSize
- )
- {
- return EFI_NOT_FOUND;
- }
- /**
- GC_TODO: Add function description
- @param This - GC_TODO: add argument description
- @param Function - GC_TODO: add argument description
- @param Phase - GC_TODO: add argument description
- @retval EFI_INVALID_PARAMETER - GC_TODO: Add description for return value
- @retval EFI_INVALID_PARAMETER - GC_TODO: Add description for return value
- @retval EFI_UNSUPPORTED - GC_TODO: Add description for return value
- @retval EFI_SUCCESS - GC_TODO: Add description for return value
- **/
- EFI_STATUS
- EFIAPI
- RegisterPciCallback (
- IN EFI_PCI_CALLBACK_PROTOCOL *This,
- IN EFI_PCI_CALLBACK_FUNC Function,
- IN EFI_PCI_ENUMERATION_PHASE Phase
- )
- {
- LIST_ENTRY *NodeEntry;
- PCI_CALLBACK_DATA *PciCallbackData;
- if (Function == NULL) {
- return EFI_INVALID_PARAMETER;
- }
- if ( (Phase & (EfiPciEnumerationDeviceScanning | EfiPciEnumerationBusNumberAssigned \
- | EfiPciEnumerationResourceAssigned)) == 0) {
- return EFI_INVALID_PARAMETER;
- }
- //
- // Check if the node has been added
- //
- NodeEntry = GetFirstNode (&mPciPrivateData.PciCallbackList);
- while (!IsNull (&mPciPrivateData.PciCallbackList, NodeEntry)) {
- PciCallbackData = PCI_CALLBACK_DATA_FROM_LINK (NodeEntry);
- if (PciCallbackData->Function == Function) {
- return EFI_UNSUPPORTED;
- }
- NodeEntry = GetNextNode (&mPciPrivateData.PciCallbackList, NodeEntry);
- }
- PciCallbackData = NULL;
- PciCallbackData = AllocateZeroPool (sizeof (PCI_CALLBACK_DATA));
- ASSERT (PciCallbackData != NULL);
- if(PciCallbackData != NULL){
- PciCallbackData->Signature = PCI_CALLBACK_DATA_SIGNATURE;
- PciCallbackData->Function = Function;
- PciCallbackData->Phase = Phase;
- InsertTailList (&mPciPrivateData.PciCallbackList, &PciCallbackData->Link);
- return EFI_SUCCESS;
- } else {
- return EFI_UNSUPPORTED;
- }
- }
- /**
- Main Entry point of the Pci Platform Driver.
-
- @param ImageHandle - Handle to the image.
- @param SystemTable - Handle to System Table.
-
- @retval EFI_STATUS - Status of the function calling.
- **/
- EFI_STATUS
- EFIAPI
- PciPlatformDriverEntry (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
- {
- EFI_STATUS Status;
- ZeroMem (&mPciPrivateData, sizeof (mPciPrivateData));
- InitializeListHead (&mPciPrivateData.PciCallbackList);
- mPciPrivateData.PciPlatform.PlatformNotify = PhaseNotify;
- mPciPrivateData.PciPlatform.PlatformPrepController = PlatformPrepController;
- mPciPrivateData.PciPlatform.GetPlatformPolicy = GetPlatformPolicy;
- mPciPrivateData.PciPlatform.GetPciRom = GetPciRom;
- mPciPrivateData.PciCallback.RegisterPciCallback = RegisterPciCallback;
- #ifdef EFI_PCI_IOV_SUPPORT
- mPciPrivateData.PciIovPlatform.GetSystemLowestPageSize = GetSystemLowestPageSize;
- mPciPrivateData.PciIovPlatform.GetPlatformPolicy = GetIovPlatformPolicy;
- #endif
- //
- // Install on a new handle
- //
- Status = gBS->InstallMultipleProtocolInterfaces (
- &mPciPrivateData.PciPlatformHandle,
- &gEfiPciPlatformProtocolGuid,
- &mPciPrivateData.PciPlatform,
- &gEfiPciCallbackProtocolGuid,
- &mPciPrivateData.PciCallback,
- #ifdef EFI_PCI_IOV_SUPPORT
- &gEfiPciIovPlatformProtocolGuid,
- &mPciPrivateData.PciIovPlatform,
- #endif
- NULL
- );
- return Status;
- }
|