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