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