13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* 23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * (C) Copyright IBM Corporation 2004 33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * All Rights Reserved. 43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * copy of this software and associated documentation files (the "Software"), 73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * to deal in the Software without restriction, including without limitation 83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * on the rights to use, copy, modify, merge, publish, distribute, sub 93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * license, and/or sell copies of the Software, and to permit persons to whom 103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the Software is furnished to do so, subject to the following conditions: 113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * The above copyright notice and this permission notice (including the next 133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * paragraph) shall be included in all copies or substantial portions of the 143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Software. 153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * USE OR OTHER DEALINGS IN THE SOFTWARE. 233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * \file mmio.h 273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Functions for properly handling memory mapped IO on various platforms. 283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * \author Ian Romanick <idr@us.ibm.com> 303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifndef MMIO_H 343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define MMIO_H 353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "main/glheader.h" 373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#if defined( __powerpc__ ) 393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic INLINE uint32_t 413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgread_MMIO_LE32( volatile void * base, unsigned long offset ) 423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org uint32_t val; 443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __asm__ __volatile__( "lwbrx %0, %1, %2 ; eieio" 463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org : "=r" (val) 473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org : "b" (base), "r" (offset) ); 483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return val; 493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#else 523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic INLINE uint32_t 543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgread_MMIO_LE32( volatile void * base, unsigned long offset ) 553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org volatile uint32_t * p = (volatile uint32_t *) (((volatile char *) base) + offset); 573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return LE32_TO_CPU( p[0] ); 583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif 613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif /* MMIO_H */ 63