123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- /** @file
- Functions for access I2C MMIO register.
- Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include <PiPei.h>
- #include <Library/DebugLib.h>
- #include <Library/PeiServicesTablePointerLib.h>
- /**
- Reads an 8-bit MMIO register.
- Reads the 8-bit MMIO register specified by Address. The 8-bit read value is
- returned. This function must guarantee that all MMIO read and write
- operations are serialized.
- If 8-bit MMIO register operations are not supported, then ASSERT().
- @param Address The MMIO register to read.
- @return The value read.
- **/
- UINT8
- EFIAPI
- I2CLibPeiMmioRead8 (
- IN UINTN Address
- )
- {
- UINT8 Value;
- Value = *(volatile UINT8*)Address;
- return Value;
- }
- /**
- Reads a 16-bit MMIO register.
- Reads the 16-bit MMIO register specified by Address. The 16-bit read value is
- returned. This function must guarantee that all MMIO read and write
- operations are serialized.
- If 16-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 16-bit boundary, then ASSERT().
- @param Address The MMIO register to read.
- @return The value read.
- **/
- UINT16
- EFIAPI
- I2CLibPeiMmioRead16 (
- IN UINTN Address
- )
- {
- UINT16 Value;
- ASSERT ((Address & 1) == 0);
- Value = *(volatile UINT16*)Address;
- return Value;
- }
- /**
- Writes a 16-bit MMIO register.
- Writes the 16-bit MMIO register specified by Address with the value specified
- by Value and returns Value. This function must guarantee that all MMIO read
- and write operations are serialized.
- If 16-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 16-bit boundary, then ASSERT().
- @param Address The MMIO register to write.
- @param Value The value to write to the MMIO register.
- @return Value.
- **/
- UINT16
- EFIAPI
- I2CLibPeiMmioWrite16 (
- IN UINTN Address,
- IN UINT16 Value
- )
- {
- ASSERT ((Address & 1) == 0);
- *(volatile UINT16*)Address = Value;
- return Value;
- }
- /**
- Reads a 32-bit MMIO register.
- Reads the 32-bit MMIO register specified by Address. The 32-bit read value is
- returned. This function must guarantee that all MMIO read and write
- operations are serialized.
- If 32-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 32-bit boundary, then ASSERT().
- @param Address The MMIO register to read.
- @return The value read.
- **/
- UINT32
- EFIAPI
- I2CLibPeiMmioRead32 (
- IN UINTN Address
- )
- {
- UINT32 Value;
- ASSERT ((Address & 3) == 0);
- Value = *(volatile UINT32*)Address;
- return Value;
- }
- /**
- Writes a 32-bit MMIO register.
- Writes the 32-bit MMIO register specified by Address with the value specified
- by Value and returns Value. This function must guarantee that all MMIO read
- and write operations are serialized.
- If 32-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 32-bit boundary, then ASSERT().
- @param Address The MMIO register to write.
- @param Value The value to write to the MMIO register.
- @return Value.
- **/
- UINT32
- EFIAPI
- I2CLibPeiMmioWrite32 (
- IN UINTN Address,
- IN UINT32 Value
- )
- {
- ASSERT ((Address & 3) == 0);
- *(volatile UINT32*)Address = Value;
- return Value;
- }
- /**
- OR a 32-bit MMIO register.
- OR the 32-bit MMIO register specified by Address with the value specified
- by Value and returns Value. This function must guarantee that all MMIO read
- and write operations are serialized.
- If 32-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 32-bit boundary, then ASSERT().
- @param Address The MMIO register to write OR.
- @param Value The value to OR to the MMIO register.
- @return Value.
- **/
- UINT32
- EFIAPI
- I2CLibPeiMmioOr32 (
- IN UINTN Address,
- IN UINT32 OrData
- )
- {
- return I2CLibPeiMmioWrite32 (Address, I2CLibPeiMmioRead32(Address) | OrData);
- }
|