CloverBootloader/MdeModulePkg/Core/Pei/CpuIo/CpuIo.c
2019-09-03 12:58:42 +03:00

536 lines
16 KiB
C

/** @file
The default version of EFI_PEI_CPU_IO_PPI support published by PeiServices in
PeiCore initialization phase.
EFI_PEI_CPU_IO_PPI is installed by some platform or chipset-specific PEIM that
abstracts the processor-visible I/O operations. When PeiCore is started, the
default version of EFI_PEI_CPU_IO_PPI will be assigned to PeiServices table.
Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "PeiMain.h"
///
/// This default instance of EFI_PEI_CPU_IO_PPI install assigned to EFI_PEI_SERVICE.CpuIo
/// when PeiCore's initialization.
///
EFI_PEI_CPU_IO_PPI gPeiDefaultCpuIoPpi = {
{
PeiDefaultMemRead,
PeiDefaultMemWrite
},
{
PeiDefaultIoRead,
PeiDefaultIoWrite
},
PeiDefaultIoRead8,
PeiDefaultIoRead16,
PeiDefaultIoRead32,
PeiDefaultIoRead64,
PeiDefaultIoWrite8,
PeiDefaultIoWrite16,
PeiDefaultIoWrite32,
PeiDefaultIoWrite64,
PeiDefaultMemRead8,
PeiDefaultMemRead16,
PeiDefaultMemRead32,
PeiDefaultMemRead64,
PeiDefaultMemWrite8,
PeiDefaultMemWrite16,
PeiDefaultMemWrite32,
PeiDefaultMemWrite64
};
/**
Memory-based read services.
This function is to perform the Memory Access Read service based on installed
instance of the EFI_PEI_CPU_IO_PPI.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then
return EFI_NOT_YET_AVAILABLE.
@param PeiServices An indirect pointer to the PEI Services Table
published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Width The width of the access. Enumerated in bytes.
@param Address The physical address of the access.
@param Count The number of accesses to perform.
@param Buffer A pointer to the buffer of data.
@retval EFI_SUCCESS The function completed successfully.
@retval EFI_NOT_YET_AVAILABLE The service has not been installed.
**/
EFI_STATUS
EFIAPI
PeiDefaultMemRead (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN EFI_PEI_CPU_IO_PPI_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
)
{
return EFI_NOT_AVAILABLE_YET;
}
/**
Memory-based write services.
This function is to perform the Memory Access Write service based on installed
instance of the EFI_PEI_CPU_IO_PPI.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then
return EFI_NOT_YET_AVAILABLE.
@param PeiServices An indirect pointer to the PEI Services Table
published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Width The width of the access. Enumerated in bytes.
@param Address The physical address of the access.
@param Count The number of accesses to perform.
@param Buffer A pointer to the buffer of data.
@retval EFI_SUCCESS The function completed successfully.
@retval EFI_NOT_YET_AVAILABLE The service has not been installed.
**/
EFI_STATUS
EFIAPI
PeiDefaultMemWrite (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN EFI_PEI_CPU_IO_PPI_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
)
{
return EFI_NOT_AVAILABLE_YET;
}
/**
IO-based read services.
This function is to perform the IO-base read service for the EFI_PEI_CPU_IO_PPI.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then
return EFI_NOT_YET_AVAILABLE.
@param PeiServices An indirect pointer to the PEI Services Table
published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Width The width of the access. Enumerated in bytes.
@param Address The physical address of the access.
@param Count The number of accesses to perform.
@param Buffer A pointer to the buffer of data.
@retval EFI_SUCCESS The function completed successfully.
@retval EFI_NOT_YET_AVAILABLE The service has not been installed.
**/
EFI_STATUS
EFIAPI
PeiDefaultIoRead (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN EFI_PEI_CPU_IO_PPI_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
)
{
return EFI_NOT_AVAILABLE_YET;
}
/**
IO-based write services.
This function is to perform the IO-base write service for the EFI_PEI_CPU_IO_PPI.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then
return EFI_NOT_YET_AVAILABLE.
@param PeiServices An indirect pointer to the PEI Services Table
published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Width The width of the access. Enumerated in bytes.
@param Address The physical address of the access.
@param Count The number of accesses to perform.
@param Buffer A pointer to the buffer of data.
@retval EFI_SUCCESS The function completed successfully.
@retval EFI_NOT_YET_AVAILABLE The service has not been installed.
**/
EFI_STATUS
EFIAPI
PeiDefaultIoWrite (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN EFI_PEI_CPU_IO_PPI_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
)
{
return EFI_NOT_AVAILABLE_YET;
}
/**
8-bit I/O read operations.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then
return 0.
@param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Address The physical address of the access.
@return An 8-bit value returned from the I/O space.
**/
UINT8
EFIAPI
PeiDefaultIoRead8 (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN UINT64 Address
)
{
return 0;
}
/**
Reads an 16-bit I/O port.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then
return 0.
@param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Address The physical address of the access.
@return A 16-bit value returned from the I/O space.
**/
UINT16
EFIAPI
PeiDefaultIoRead16 (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN UINT64 Address
)
{
return 0;
}
/**
Reads an 32-bit I/O port.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then
return 0.
@param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Address The physical address of the access.
@return A 32-bit value returned from the I/O space.
**/
UINT32
EFIAPI
PeiDefaultIoRead32 (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN UINT64 Address
)
{
return 0;
}
/**
Reads an 64-bit I/O port.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then
return 0.
@param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Address The physical address of the access.
@return A 64-bit value returned from the I/O space.
**/
UINT64
EFIAPI
PeiDefaultIoRead64 (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN UINT64 Address
)
{
return 0;
}
/**
8-bit I/O write operations.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then do
nothing.
@param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Address The physical address of the access.
@param Data The data to write.
**/
VOID
EFIAPI
PeiDefaultIoWrite8 (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN UINT64 Address,
IN UINT8 Data
)
{
}
/**
16-bit I/O write operations.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then do
nothing.
@param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Address The physical address of the access.
@param Data The data to write.
**/
VOID
EFIAPI
PeiDefaultIoWrite16 (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN UINT64 Address,
IN UINT16 Data
)
{
}
/**
32-bit I/O write operations.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then do
nothing.
@param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Address The physical address of the access.
@param Data The data to write.
**/
VOID
EFIAPI
PeiDefaultIoWrite32 (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN UINT64 Address,
IN UINT32 Data
)
{
}
/**
64-bit I/O write operations.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then do
nothing.
@param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Address The physical address of the access.
@param Data The data to write.
**/
VOID
EFIAPI
PeiDefaultIoWrite64 (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN UINT64 Address,
IN UINT64 Data
)
{
}
/**
8-bit memory read operations.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then
return 0.
@param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Address The physical address of the access.
@return An 8-bit value returned from the memory space.
**/
UINT8
EFIAPI
PeiDefaultMemRead8 (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN UINT64 Address
)
{
return 0;
}
/**
16-bit memory read operations.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then
return 0.
@param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Address The physical address of the access.
@return An 16-bit value returned from the memory space.
**/
UINT16
EFIAPI
PeiDefaultMemRead16 (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN UINT64 Address
)
{
return 0;
}
/**
32-bit memory read operations.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then
return 0.
@param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Address The physical address of the access.
@return An 32-bit value returned from the memory space.
**/
UINT32
EFIAPI
PeiDefaultMemRead32 (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN UINT64 Address
)
{
return 0;
}
/**
64-bit memory read operations.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then
return 0.
@param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Address The physical address of the access.
@return An 64-bit value returned from the memory space.
**/
UINT64
EFIAPI
PeiDefaultMemRead64 (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN UINT64 Address
)
{
return 0;
}
/**
8-bit memory write operations.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then do
nothing.
@param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Address The physical address of the access.
@param Data The data to write.
**/
VOID
EFIAPI
PeiDefaultMemWrite8 (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN UINT64 Address,
IN UINT8 Data
)
{
}
/**
16-bit memory write operations.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then do
nothing.
@param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Address The physical address of the access.
@param Data The data to write.
**/
VOID
EFIAPI
PeiDefaultMemWrite16 (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN UINT64 Address,
IN UINT16 Data
)
{
}
/**
32-bit memory write operations.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then do
nothing.
@param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Address The physical address of the access.
@param Data The data to write.
**/
VOID
EFIAPI
PeiDefaultMemWrite32 (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN UINT64 Address,
IN UINT32 Data
)
{
}
/**
64-bit memory write operations.
If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then do
nothing.
@param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
@param This Pointer to local data for the interface.
@param Address The physical address of the access.
@param Data The data to write.
**/
VOID
EFIAPI
PeiDefaultMemWrite64 (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN CONST EFI_PEI_CPU_IO_PPI *This,
IN UINT64 Address,
IN UINT64 Data
)
{
}