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