[BACK]Return to pio.h CVS log [TXT][DIR] Up to [local] / sys / arch / powerpc / include

Annotation of sys/arch/powerpc/include/pio.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: pio.h,v 1.9 2002/09/15 09:01:59 deraadt Exp $ */
                      2:
                      3: /*
                      4:  * Copyright (c) 1997 Per Fogelstrom, Opsycon AB and RTMX Inc, USA.
                      5:  *
                      6:  * Redistribution and use in source and binary forms, with or without
                      7:  * modification, are permitted provided that the following conditions
                      8:  * are met:
                      9:  * 1. Redistributions of source code must retain the above copyright
                     10:  *    notice, this list of conditions and the following disclaimer.
                     11:  * 2. Redistributions in binary form must reproduce the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer in the
                     13:  *    documentation and/or other materials provided with the distribution.
                     14:  * 3. All advertising materials mentioning features or use of this software
                     15:  *    must display the following acknowledgement:
                     16:  *     This product includes software developed under OpenBSD by
                     17:  *     Per Fogelstrom Opsycon AB for RTMX Inc, North Carolina, USA.
                     18:  * 4. The name of the author may not be used to endorse or promote products
                     19:  *    derived from this software without specific prior written permission.
                     20:  *
                     21:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
                     22:  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
                     23:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     24:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
                     25:  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     26:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     27:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     28:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     29:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     30:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     31:  * SUCH DAMAGE.
                     32:  *
                     33:  */
                     34:
                     35: #ifndef _POWERPC_PIO_H_
                     36: #define _POWERPC_PIO_H_
                     37: /*
                     38:  * I/O macros.
                     39:  */
                     40: void *mapiodev(paddr_t pa, psize_t len);
                     41: void unmapiodev(void * va, psize_t len);
                     42:
                     43: static __inline void
                     44: __outb(volatile u_int8_t *a, int v)
                     45: {
                     46:        *a = v;
                     47:        __asm__ volatile("eieio");
                     48: }
                     49:
                     50: static __inline void
                     51: __outw(volatile u_int16_t *a, u_int16_t v)
                     52: {
                     53:        *a = v;
                     54:        __asm__ volatile("eieio");
                     55: }
                     56:
                     57: static __inline void
                     58: __outl(volatile u_int32_t *a, int v)
                     59: {
                     60:        *a = v;
                     61:        __asm__ volatile("eieio");
                     62: }
                     63:
                     64: static __inline void
                     65: __outwrb(volatile u_int16_t *a, u_int16_t v)
                     66: {
                     67:        u_int32_t _p_ = (u_int32_t)a;
                     68:
                     69:        __asm__ volatile("sthbrx %0, 0, %1" :: "r"(v), "r"(_p_));
                     70:        __asm__ volatile("eieio");
                     71: }
                     72:
                     73: static __inline void
                     74: __outlrb(volatile u_int32_t *a, u_int32_t v)
                     75: {
                     76:        u_int32_t _p_ = (u_int32_t)a;
                     77:
                     78:        __asm__ volatile("stwbrx %0, 0, %1" :: "r"(v), "r"(_p_));
                     79:        __asm__ volatile("eieio");
                     80: }
                     81:
                     82: static __inline u_int8_t
                     83: __inb(volatile u_int8_t *a)
                     84: {
                     85:        u_int8_t _v_;
                     86:
                     87:        __asm__ volatile("eieio");
                     88:        _v_ = *a;
                     89:        return _v_;
                     90: }
                     91:
                     92: static __inline u_int16_t
                     93: __inw(volatile u_int16_t *a)
                     94: {
                     95:        u_int16_t _v_;
                     96:
                     97:        __asm__ volatile("eieio");
                     98:        _v_ = *a;
                     99:        return _v_;
                    100: }
                    101:
                    102: static __inline u_int32_t
                    103: __inl(volatile u_int32_t *a)
                    104: {
                    105:        u_int32_t _v_;
                    106:
                    107:        __asm__ volatile("eieio");
                    108:        _v_ = *a;
                    109:        return _v_;
                    110: }
                    111:
                    112: static __inline u_int16_t
                    113: __inwrb(volatile u_int16_t *a)
                    114: {
                    115:        u_int16_t _v_;
                    116:        u_int32_t _p_ = (u_int32_t)a;
                    117:
                    118:        __asm__ volatile("eieio");
                    119:        __asm__ volatile("lhbrx %0, 0, %1" : "=r"(_v_) : "r"(_p_));
                    120:        return _v_;
                    121: }
                    122:
                    123: static __inline u_int32_t
                    124: __inlrb(volatile u_int32_t *a)
                    125: {
                    126:        u_int32_t _v_;
                    127:        u_int32_t _p_ = (u_int32_t)a;
                    128:
                    129:        __asm__ volatile("eieio");
                    130:        __asm__ volatile("lwbrx %0, 0, %1" : "=r"(_v_) : "r"(_p_));
                    131:        return _v_;
                    132: }
                    133:
                    134:
                    135: #define        outb(a,v)       (__outb((volatile u_int8_t *)(a), v))
                    136: #define        out8(a,v)       outb(a,v)
                    137: #define        outw(a,v)       (__outw((volatile u_int16_t *)(a), v))
                    138: #define        out16(a,v)      outw(a,v)
                    139: #define        outl(a,v)       (__outl((volatile u_int32_t *)(a), v))
                    140: #define        out32(a,v)      outl(a,v)
                    141: #define        inb(a)          (__inb((volatile u_int8_t *)(a)))
                    142: #define        in8(a)          inb(a)
                    143: #define        inw(a)          (__inw((volatile u_int16_t *)(a)))
                    144: #define        in16(a)         inw(a)
                    145: #define        inl(a)          (__inl((volatile u_int32_t *)(a)))
                    146: #define        in32(a)         inl(a)
                    147:
                    148: #define        out8rb(a,v)     outb(a,v)
                    149: #define        outwrb(a,v)     (__outwrb((volatile u_int16_t *)(a), v))
                    150: #define        out16rb(a,v)    outwrb(a,v)
                    151: #define        outlrb(a,v)     (__outlrb((volatile u_int32_t *)(a), v))
                    152: #define        out32rb(a,v)    outlrb(a,v)
                    153: #define        in8rb(a)        inb(a)
                    154: #define        inwrb(a)        (__inwrb((volatile u_int16_t *)(a)))
                    155: #define        in16rb(a)       inwrb(a)
                    156: #define        inlrb(a)        (__inlrb((volatile u_int32_t *)(a)))
                    157: #define        in32rb(a)       inlrb(a)
                    158:
                    159: #ifdef DEBUG_SPEC
                    160: static __inline void
                    161: __flash_led(bits, count)
                    162:        int bits;
                    163: {
                    164:        int i, v = 0;
                    165:
                    166:        if(bits == 0) {
                    167:                v = 1; bits = 3;
                    168:        }
                    169:        bits &= 3;
                    170:        count += count;
                    171:        v |= (*(volatile u_int8_t *)(MPC106_V_ISA_IO_SPACE + 0x01f4)) & ~3;
                    172:        while(count--) {
                    173:                v ^= bits;
                    174:                for(i = 100000; i > 0; i--)
                    175:                        *(volatile u_int8_t *)(MPC106_V_ISA_IO_SPACE + 0x01f4) = v;
                    176:        }
                    177:        *(u_int8_t *)(MPC106_V_ISA_IO_SPACE + 0x01f4) &= ~3;
                    178: }
                    179: #endif /* DEBUG */
                    180:
                    181: #endif /*_POWERPC_PIO_H_*/

CVSweb