Annotation of sys/arch/alpha/isa/isafcns_jensen.c, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: isafcns_jensen.c,v 1.7 2002/06/25 21:33:21 miod Exp $ */
2: /* $NetBSD: isafcns_jensen.c,v 1.4 1996/10/13 02:59:54 christos Exp $ */
3:
4: /*
5: * Copyright (c) 1995, 1996 Carnegie-Mellon University.
6: * All rights reserved.
7: *
8: * Author: Chris G. Demetriou
9: *
10: * Permission to use, copy, modify and distribute this software and
11: * its documentation is hereby granted, provided that both the copyright
12: * notice and this permission notice appear in all copies of the
13: * software, derivative works or modified versions, and any portions
14: * thereof, and that both notices appear in supporting documentation.
15: *
16: * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
17: * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
18: * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
19: *
20: * Carnegie Mellon requests users of this software to return to
21: *
22: * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
23: * School of Computer Science
24: * Carnegie Mellon University
25: * Pittsburgh PA 15213-3890
26: *
27: * any improvements or extensions that they make and grant Carnegie the
28: * rights to redistribute these changes.
29: */
30:
31: #include <sys/types.h>
32: #include <machine/pio.h>
33: #include <machine/pte.h>
34:
35: static u_int8_t jensen_inb(int port);
36: /* static void jensen_insb(int port, void *addr, int cnt); */
37: static u_int16_t jensen_inw(int port);
38: /* static void jensen_insw(int port, void *addr, int cnt); */
39: u_int32_t jensen_inl(int port);
40: /* static void jensen_insl(int port, void *addr, int cnt); */
41:
42: static void jensen_outb(int port, u_int8_t datum);
43: /* static void jensen_outsb(int port, void *addr, int cnt); */
44: static void jensen_outw(int port, u_int16_t datum);
45: /* static void jensen_outsw(int port, void *addr, int cnt); */
46: static void jensen_outl(int port, u_int32_t datum);
47: /* static void jensen_outsl(int port, void *addr, int cnt); */
48:
49: struct alpha_isafcndesc jensen_isafcns = {
50: jensen_inb, 0 /* jensen_insb */,
51: jensen_inw, 0 /* jensen_insw */,
52: jensen_inl, 0 /* jensen_insl */,
53: jensen_outb, 0 /* jensen_outsb */,
54: jensen_outw, 0 /* jensen_outsw */,
55: jensen_outl, 0 /* jensen_outsl */,
56: };
57:
58: u_int8_t
59: jensen_inb(ioaddr)
60: int ioaddr;
61: {
62: u_int32_t *port, val;
63: u_int8_t rval;
64: int offset;
65:
66: offset = ioaddr & 3;
67: port = (int32_t *)phystok0seg(0x300000000L | 0 << 5 | ioaddr << 7);
68: val = *port;
69: rval = ((val) >> (8 * offset)) & 0xff;
70: rval = val & 0xff;
71:
72: printf("inb(0x%x) => 0x%x @ %p => 0x%x\n", ioaddr, val, port, rval);
73:
74: return rval;
75: }
76:
77: u_int16_t
78: jensen_inw(ioaddr)
79: int ioaddr;
80: {
81: u_int32_t *port, val;
82: u_int16_t rval;
83: int offset;
84:
85: offset = ioaddr & 3;
86: port = (int32_t *)phystok0seg(0x300000000L | 1 << 5 | ioaddr << 7);
87: val = *port;
88: rval = ((val) >> (8 * offset)) & 0xffff;
89: rval = val & 0xffff;
90:
91: printf("inw(0x%x) => 0x%x @ %p => 0x%x", ioaddr, val, port, rval);
92:
93: return rval;
94: }
95:
96: u_int32_t
97: jensen_inl(ioaddr)
98: int ioaddr;
99: {
100: u_int32_t *port, val;
101: u_int32_t rval;
102: int offset;
103:
104: offset = ioaddr & 3;
105: port = (int32_t *)phystok0seg(0x300000000L | 3 << 5 | ioaddr << 7);
106: val = *port;
107: rval = ((val) >> (8 * offset)) & 0xffffffff;
108: rval = val & 0xffffffff;
109:
110: printf("inl(0x%x) => 0x%x @ %p => 0x%x\n", ioaddr, val, port, rval);
111:
112: return rval;
113: }
114:
115: void
116: jensen_outb(ioaddr, val)
117: int ioaddr;
118: u_int8_t val;
119: {
120: u_int32_t *port, nval;
121: int offset;
122:
123: offset = ioaddr & 3;
124: nval = val /*<< (8 * offset)*/;
125: port = (int32_t *)phystok0seg(0x300000000L | 0 << 5 | ioaddr << 7);
126:
127: printf("outb(0x%x, 0x%x) => 0x%x @ %p\n", ioaddr, val, nval, port);
128:
129: *port = nval;
130: }
131:
132: void
133: jensen_outw(ioaddr, val)
134: int ioaddr;
135: u_int16_t val;
136: {
137: u_int32_t *port, nval;
138: int offset;
139:
140: offset = ioaddr & 3;
141: nval = val /*<< (8 * offset)*/;
142: port = (int32_t *)phystok0seg(0x300000000L | 1 << 5 | ioaddr << 7);
143:
144: printf("outb(0x%x, 0x%x) => 0x%x @ %p\n", ioaddr, val, nval, port);
145:
146: *port = nval;
147: }
148:
149: void
150: jensen_outl(ioaddr, val)
151: int ioaddr;
152: u_int32_t val;
153: {
154: u_int32_t *port, nval;
155: int offset;
156:
157: offset = ioaddr & 3;
158: nval = val /*<< (8 * offset)*/;
159: port = (int32_t *)phystok0seg(0x300000000L | 3 << 5 | ioaddr << 7);
160:
161: printf("outb(0x%x, 0x%x) => 0x%x @ %p\n", ioaddr, val, nval, port);
162:
163: *port = nval;
164: }
CVSweb