Annotation of funnyos/arch/testarm/dev/obio.c, Revision 1.7
1.1 init 1: /*
1.7 ! init 2: * $Id: obio.c,v 1.6 2007/10/16 19:05:57 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: */
1.6 init 16: int obio_attach(struct device *, uint32_t, uint8_t);
17:
18: uint8_t obio_read_1(void *, uint32_t);
19: uint16_t obio_read_2(void *, uint32_t);
20: uint32_t obio_read_4(void *, uint32_t);
21: int obio_write_1(void *, uint32_t, uint8_t);
22: int obio_write_2(void *, uint32_t, uint16_t);
23: int obio_write_4(void *, uint32_t, uint32_t);
1.1 init 24:
25:
1.3 init 26: struct driver obio_dr = {
1.5 init 27: sizeof(struct obio_dd),
1.3 init 28: obio_attach,
1.6 init 29: NULL
1.3 init 30: };
31:
32:
1.1 init 33: int
1.3 init 34: obio_attach(struct device *self, uint32_t loc, uint8_t flags)
1.1 init 35: {
1.3 init 36: struct obio_dd *ddp = self->dv_devdata;
1.6 init 37: struct bus_handle *bhp = &ddp->od_bh;
1.4 init 38:
39: ddp->od_locked = 0;
40: ddp->od_ndevices = 0;
41:
1.3 init 42: bhp->bus_read_1 = obio_read_1;
43: bhp->bus_read_2 = obio_read_2;
44: bhp->bus_read_4 = obio_read_4;
45: bhp->bus_write_1 = obio_write_1;
46: bhp->bus_write_2 = obio_write_2;
47: bhp->bus_write_4 = obio_write_4;
1.7 ! init 48: bhp->dh_ownerdevp = self; /* XXX UGLY bus_{read|write} stuff will access bus device from bus_handle using this */
1.3 init 49:
1.4 init 50: /* expose our bus_handle to the world */
51: self->dv_aux = bhp;
1.1 init 52:
53: printf("memory-mapped i/o\n");
54:
55: return(0);
56: }
57:
58:
59: uint8_t
1.6 init 60: obio_read_1(void *ddp, uint32_t addr)
1.1 init 61: {
62: /*
63: * There is only one on-board i/o bus in testarm.
64: */
65: return( (*(uint8_t *)addr) );
66: }
67:
68:
69: uint16_t
1.6 init 70: obio_read_2(void *ddp, uint32_t addr)
1.1 init 71: {
72: return( (*(uint16_t *)addr) );
73: }
74:
75:
76: uint32_t
1.6 init 77: obio_read_4(void *ddp, uint32_t addr)
1.1 init 78: {
79: return( (*(uint32_t *)addr) );
80: }
81:
82:
83: int
1.6 init 84: obio_write_1(void *ddp, uint32_t addr, uint8_t data)
1.1 init 85: {
86: *((uint8_t *)addr) = data;
87:
88: /* XXX what about write errors? */
89: return(0);
90: }
91:
92:
93: int
1.6 init 94: obio_write_2(void *ddp, uint32_t addr, uint16_t data)
1.1 init 95: {
96: *((uint16_t *)addr) = data;
97:
98: return(0);
99: }
100:
101:
102: int
1.6 init 103: obio_write_4(void *ddp, uint32_t addr, uint32_t data)
1.1 init 104: {
105: *((uint32_t *)addr) = data;
106:
107: return(0);
108: }
109:
CVSweb