• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * (C) Copyright IBM Corporation 2004
3  * All Rights Reserved.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * on the rights to use, copy, modify, merge, publish, distribute, sub
9  * license, and/or sell copies of the Software, and to permit persons to whom
10  * the Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
19  * IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
20  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
21  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22  * USE OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
25 /**
26  * \file mmio.h
27  * Functions for properly handling memory mapped IO on various platforms.
28  *
29  * \author Ian Romanick <idr@us.ibm.com>
30  */
31 
32 
33 #ifndef MMIO_H
34 #define MMIO_H
35 
36 #include "main/glheader.h"
37 
38 #if defined( __powerpc__ )
39 
40 static INLINE uint32_t
read_MMIO_LE32(volatile void * base,unsigned long offset)41 read_MMIO_LE32( volatile void * base, unsigned long offset )
42 {
43    uint32_t val;
44 
45    __asm__ __volatile__( "lwbrx	%0, %1, %2 ; eieio"
46 			 : "=r" (val)
47 			 : "b" (base), "r" (offset) );
48    return val;
49 }
50 
51 #else
52 
53 static INLINE uint32_t
read_MMIO_LE32(volatile void * base,unsigned long offset)54 read_MMIO_LE32( volatile void * base, unsigned long offset )
55 {
56    volatile uint32_t * p = (volatile uint32_t *) (((volatile char *) base) + offset);
57    return LE32_TO_CPU( p[0] );
58 }
59 
60 #endif
61 
62 #endif /* MMIO_H */
63