Annotation of funnyos/arch/testarm/dev/obio.c, Revision 1.4
1.1 init 1: /*
1.4 ! init 2: * $Id: obio.c,v 1.3 2007/10/16 18:34:13 init Exp $
1.1 init 3: */
4: #include <sys/types.h>
5: #include <sys/device.h>
6: #include <sys/mem.h>
7: #include <sys/bus.h>
1.2 init 8:
9: #include <arch/testarm/dev/obiovar.h>
1.1 init 10: #include <libkern/printf.h>
11:
12: /*
13: * testarm obio (on-board i/o) support.
14: * This is a simple memory read/writes.
15: */
16: uint8_t obio_read_1(struct device *, uint32_t);
17: uint16_t obio_read_2(struct device *, uint32_t);
18: uint32_t obio_read_4(struct device *, uint32_t);
19: int obio_write_1(struct device *, uint32_t, uint8_t);
20: int obio_write_2(struct device *, uint32_t, uint16_t);
21: int obio_write_4(struct device *, uint32_t, uint32_t);
22:
23:
1.3 init 24: struct driver obio_dr = {
25: sizeof(obio_dd),
26: obio_attach,
27: obio_detach
28: };
29:
30:
1.1 init 31: int
1.3 init 32: obio_attach(struct device *self, uint32_t loc, uint8_t flags)
1.1 init 33: {
1.3 init 34: struct obio_dd *ddp = self->dv_devdata;
35: struct bus_handle *bhp = ddp->od_bh;
1.4 ! init 36:
! 37: ddp->od_locked = 0;
! 38: ddp->od_ndevices = 0;
! 39:
1.3 init 40: bhp->bus_read_1 = obio_read_1;
41: bhp->bus_read_2 = obio_read_2;
42: bhp->bus_read_4 = obio_read_4;
43: bhp->bus_write_1 = obio_write_1;
44: bhp->bus_write_2 = obio_write_2;
45: bhp->bus_write_4 = obio_write_4;
46:
1.4 ! init 47: /* expose our bus_handle to the world */
! 48: self->dv_aux = bhp;
1.1 init 49:
50: printf("memory-mapped i/o\n");
51:
52: return(0);
53: }
54:
55:
56: uint8_t
1.3 init 57: obio_read_1(struct obio_dd *ddp, uint32_t addr)
1.1 init 58: {
59: /*
60: * There is only one on-board i/o bus in testarm.
61: */
62: return( (*(uint8_t *)addr) );
63: }
64:
65:
66: uint16_t
1.3 init 67: obio_read_2(struct obio_dd *ddp, uint32_t addr)
1.1 init 68: {
69: return( (*(uint16_t *)addr) );
70: }
71:
72:
73: uint32_t
1.3 init 74: obio_read_4(struct obio_dd *ddp, uint32_t addr)
1.1 init 75: {
76: return( (*(uint32_t *)addr) );
77: }
78:
79:
80: int
1.3 init 81: obio_write_1(struct obio_dd *ddp, uint32_t addr, uint8_t data)
1.1 init 82: {
83: *((uint8_t *)addr) = data;
84:
85: /* XXX what about write errors? */
86: return(0);
87: }
88:
89:
90: int
1.3 init 91: obio_write_2(struct obio_dd *ddp, uint32_t addr, uint16_t data)
1.1 init 92: {
93: *((uint16_t *)addr) = data;
94:
95: return(0);
96: }
97:
98:
99: int
1.3 init 100: obio_write_4(struct obio_dd *ddp, uint32_t addr, uint32_t data)
1.1 init 101: {
102: *((uint32_t *)addr) = data;
103:
104: return(0);
105: }
106:
CVSweb