/** @file ;****************************************************************************** ;* Copyright (c) 2012, Insyde Software Corp. All Rights Reserved. ;* ;* You may not reproduce, distribute, publish, display, perform, modify, adapt, ;* transmit, broadcast, present, recite, release, license or otherwise exploit ;* any part of this publication in any form, by any means, without the prior ;* written permission of Insyde Software Corporation. ;* ;****************************************************************************** */ #ifndef _MmioAccess_h_INCLUDED_ #define _MmioAccess_h_INCLUDED_ #define MmioAddress( BaseAddr, Register ) \ ( (UINTN)BaseAddr + \ (UINTN)(Register) \ ) // // UINT32 // #define Mmio32Ptr( BaseAddr, Register ) \ ( (volatile UINT32 *)MmioAddress( BaseAddr, Register ) ) #define Mmio32( BaseAddr, Register ) \ *Mmio32Ptr( BaseAddr, Register ) #define Mmio32Or( BaseAddr, Register, OrData ) \ Mmio32( BaseAddr, Register ) = \ (UINT32) ( \ Mmio32( BaseAddr, Register ) | \ (UINT32)(OrData) \ ) #define Mmio32And( BaseAddr, Register, AndData ) \ Mmio32( BaseAddr, Register ) = \ (UINT32) ( \ Mmio32( BaseAddr, Register ) & \ (UINT32)(AndData) \ ) #define Mmio32AndThenOr( BaseAddr, Register, AndData, OrData ) \ Mmio32( BaseAddr, Register ) = \ (UINT32) ( \ ( Mmio32( BaseAddr, Register ) & \ (UINT32)(AndData) \ ) | \ (UINT32)(OrData) \ ) // // UINT16 // #define Mmio16Ptr( BaseAddr, Register ) \ ( (volatile UINT16 *)MmioAddress( BaseAddr, Register ) ) #define Mmio16( BaseAddr, Register ) \ *Mmio16Ptr( BaseAddr, Register ) #define Mmio16Or( BaseAddr, Register, OrData ) \ Mmio16( BaseAddr, Register ) = \ (UINT16) ( \ Mmio16( BaseAddr, Register ) | \ (UINT16)(OrData) \ ) #define Mmio16And( BaseAddr, Register, AndData ) \ Mmio16( BaseAddr, Register ) = \ (UINT16) ( \ Mmio16( BaseAddr, Register ) & \ (UINT16)(AndData) \ ) #define Mmio16AndThenOr( BaseAddr, Register, AndData, OrData ) \ Mmio16( BaseAddr, Register ) = \ (UINT16) ( \ ( Mmio16( BaseAddr, Register ) & \ (UINT16)(AndData) \ ) | \ (UINT16)(OrData) \ ) // // UINT8 // #define Mmio8Ptr( BaseAddr, Register ) \ ( (volatile UINT8 *)MmioAddress( BaseAddr, Register ) ) #define Mmio8( BaseAddr, Register ) \ *Mmio8Ptr( BaseAddr, Register ) #define Mmio8Or( BaseAddr, Register, OrData ) \ Mmio8( BaseAddr, Register ) = \ (UINT8) ( \ Mmio8( BaseAddr, Register ) | \ (UINT8)(OrData) \ ) #define Mmio8And( BaseAddr, Register, AndData ) \ Mmio8( BaseAddr, Register ) = \ (UINT8) ( \ Mmio8( BaseAddr, Register ) & \ (UINT8)(AndData) \ ) #define Mmio8AndThenOr( BaseAddr, Register, AndData, OrData ) \ Mmio8( BaseAddr, Register ) = \ (UINT8) ( \ ( Mmio8( BaseAddr, Register ) & \ (UINT8)(AndData) \ ) | \ (UINT8)(OrData) \ ) #endif