IpmiPlatformHookLib.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /** @file
  2. This file implements the IPMI Platform hook functions
  3. Copyright (c) 2021, American Megatrends International LLC. <BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include <Uefi.h>
  7. #include <Ppi/DynamicSiLibraryPpi.h>
  8. #include <Library/PeiServicesLib.h>
  9. #include <Library/DebugLib.h>
  10. #define KCS_BASE_ADDRESS_MASK 0xFFF0
  11. #define NUMBER_OF_BYTES_TO_DECODE 0x10
  12. /**
  13. This function sets IO Decode Range in LPC registers
  14. @param[in] IpmiIoBase - IPMI Base IO address
  15. @retval EFI_SUCCESS - Operation success.
  16. **/
  17. EFI_STATUS
  18. EFIAPI
  19. PlatformIpmiIoRangeSet (
  20. UINT16 IpmiIoBase
  21. )
  22. {
  23. EFI_STATUS Status;
  24. DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi;
  25. DynamicSiLibraryPpi = NULL;
  26. DEBUG ((DEBUG_INFO, "PlatformIpmiIoRangeSet IpmiIoBase %x\n", IpmiIoBase));
  27. Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, (VOID **) &DynamicSiLibraryPpi);
  28. if (EFI_ERROR (Status)) {
  29. DEBUG ((DEBUG_ERROR, "PeiServicesLocatePpi for gDynamicSiLibraryPpiGuid failed. Status %r\n", Status));
  30. ASSERT_EFI_ERROR (Status);
  31. return Status;
  32. }
  33. DynamicSiLibraryPpi->PchLpcGenIoRangeSet ((IpmiIoBase & KCS_BASE_ADDRESS_MASK), NUMBER_OF_BYTES_TO_DECODE);
  34. return EFI_SUCCESS;
  35. }