123 lines
2.9 KiB
C
123 lines
2.9 KiB
C
/** @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
|