Home | History | Annotate | Download | only in common
      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 (at) 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
     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
     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