Annotation of sys/arch/mips64/include/pio.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: pio.h,v 1.3 2004/08/10 20:28:13 deraadt Exp $ */
! 2:
! 3: /*
! 4: * Copyright (c) 2001-2003 Opsycon AB (www.opsycon.se / www.opsycon.com)
! 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: *
! 15: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
! 16: * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
! 17: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 18: * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
! 19: * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 20: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 21: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 22: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 23: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 24: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 25: * SUCH DAMAGE.
! 26: *
! 27: */
! 28:
! 29: #ifndef _MIPS_PIO_H_
! 30: #define _MIPS_PIO_H_
! 31:
! 32: /*
! 33: * I/O macros.
! 34: */
! 35:
! 36: #define outb(a,v) (*(volatile unsigned char*)(a) = (v))
! 37: #define out8(a,v) (*(volatile unsigned char*)(a) = (v))
! 38: #define outw(a,v) (*(volatile unsigned short*)(a) = (v))
! 39: #define out16(a,v) outw(a,v)
! 40: #define outl(a,v) (*(volatile unsigned int*)(a) = (v))
! 41: #define out32(a,v) outl(a,v)
! 42: #define inb(a) (*(volatile unsigned char*)(a))
! 43: #define in8(a) (*(volatile unsigned char*)(a))
! 44: #define inw(a) (*(volatile unsigned short*)(a))
! 45: #define in16(a) inw(a)
! 46: #define inl(a) (*(volatile unsigned int*)(a))
! 47: #define in32(a) inl(a)
! 48:
! 49: #define out8rb(a,v) (*(volatile unsigned char*)(a) = (v))
! 50: #define out16rb(a,v) (__out16rb((volatile u_int16_t *)(a), v))
! 51: #define out32rb(a,v) (__out32rb((volatile u_int32_t *)(a), v))
! 52: #define in8rb(a) (*(volatile unsigned char*)(a))
! 53: #define in16rb(a) (__in16rb((volatile u_int16_t *)(a)))
! 54: #define in32rb(a) (__in32rb((volatile u_int32_t *)(a)))
! 55:
! 56: #define _swap_(x) \
! 57: (((x) >> 24) | ((x) << 24) | \
! 58: (((x) >> 8) & 0xff00) | (((x) & 0xff00) << 8))
! 59:
! 60: static __inline void __out32rb(volatile u_int32_t *, u_int32_t);
! 61: static __inline void __out16rb(volatile u_int16_t *, u_int16_t);
! 62: static __inline u_int32_t __in32rb(volatile u_int32_t *);
! 63: static __inline u_int16_t __in16rb(volatile u_int16_t *);
! 64:
! 65: static __inline void
! 66: __out32rb(a,v)
! 67: volatile u_int32_t *a;
! 68: u_int32_t v;
! 69: {
! 70: u_int32_t _v_ = v;
! 71:
! 72: _v_ = _swap_(_v_);
! 73: out32(a, _v_);
! 74: }
! 75:
! 76: static __inline void
! 77: __out16rb(a,v)
! 78: volatile u_int16_t *a;
! 79: u_int16_t v;
! 80: {
! 81: u_int16_t _v_;
! 82:
! 83: _v_ = ((v >> 8) & 0xff) | (v << 8);
! 84: out16(a, _v_);
! 85: }
! 86:
! 87: static __inline u_int32_t
! 88: __in32rb(a)
! 89: volatile u_int32_t *a;
! 90: {
! 91: u_int32_t _v_;
! 92:
! 93: _v_ = in32(a);
! 94: _v_ = _swap_(_v_);
! 95: return _v_;
! 96: }
! 97:
! 98: static __inline u_int16_t
! 99: __in16rb(a)
! 100: volatile u_int16_t *a;
! 101: {
! 102: u_int16_t _v_;
! 103:
! 104: _v_ = in16(a);
! 105: _v_ = ((_v_ >> 8) & 0xff) | (_v_ << 8);
! 106: return _v_;
! 107: }
! 108:
! 109: void insb(u_int8_t *, u_int8_t *,int);
! 110: void insw(u_int16_t *, u_int16_t *,int);
! 111: void insl(u_int32_t *, u_int32_t *,int);
! 112: void outsb(u_int8_t *, const u_int8_t *,int);
! 113: void outsw(u_int16_t *, const u_int16_t *,int);
! 114: void outsl(u_int32_t *, const u_int32_t *,int);
! 115:
! 116: /* Helper function to access bus 64 bit at at time in LP32 mode */
! 117: u_int64_t lp32_read8(u_int64_t *);
! 118: void lp32_write8(u_int64_t *, u_int64_t);
! 119:
! 120: #endif /* !_MIPS_PIO_H_ */
CVSweb