Annotation of sys/arch/mips64/include/pio.h, Revision 1.1.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