Annotation of funnyos/arch/testarm/dev/obio.c, Revision 1.3
1.1 init 1: /*
1.3 ! init 2: * $Id: obio.c,v 1.2 2007/10/16 18:11:47 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;
! 36:
! 37: bhp->bus_read_1 = obio_read_1;
! 38: bhp->bus_read_2 = obio_read_2;
! 39: bhp->bus_read_4 = obio_read_4;
! 40: bhp->bus_write_1 = obio_write_1;
! 41: bhp->bus_write_2 = obio_write_2;
! 42: bhp->bus_write_4 = obio_write_4;
! 43:
1.1 init 44:
45: printf("memory-mapped i/o\n");
46:
47: return(0);
48: }
49:
50:
51: uint8_t
1.3 ! init 52: obio_read_1(struct obio_dd *ddp, uint32_t addr)
1.1 init 53: {
54: /*
55: * There is only one on-board i/o bus in testarm.
56: */
57: return( (*(uint8_t *)addr) );
58: }
59:
60:
61: uint16_t
1.3 ! init 62: obio_read_2(struct obio_dd *ddp, uint32_t addr)
1.1 init 63: {
64: return( (*(uint16_t *)addr) );
65: }
66:
67:
68: uint32_t
1.3 ! init 69: obio_read_4(struct obio_dd *ddp, uint32_t addr)
1.1 init 70: {
71: return( (*(uint32_t *)addr) );
72: }
73:
74:
75: int
1.3 ! init 76: obio_write_1(struct obio_dd *ddp, uint32_t addr, uint8_t data)
1.1 init 77: {
78: *((uint8_t *)addr) = data;
79:
80: /* XXX what about write errors? */
81: return(0);
82: }
83:
84:
85: int
1.3 ! init 86: obio_write_2(struct obio_dd *ddp, uint32_t addr, uint16_t data)
1.1 init 87: {
88: *((uint16_t *)addr) = data;
89:
90: return(0);
91: }
92:
93:
94: int
1.3 ! init 95: obio_write_4(struct obio_dd *ddp, uint32_t addr, uint32_t data)
1.1 init 96: {
97: *((uint32_t *)addr) = data;
98:
99: return(0);
100: }
101:
CVSweb