Annotation of funnyos/arch/testarm/dev/obio.c, Revision 1.6
1.1 init 1: /*
1.6 ! init 2: * $Id: obio.c,v 1.5 2007/10/16 18:55:30 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;
48:
1.4 init 49: /* expose our bus_handle to the world */
50: self->dv_aux = bhp;
1.1 init 51:
52: printf("memory-mapped i/o\n");
53:
54: return(0);
55: }
56:
57:
58: uint8_t
1.6 ! init 59: obio_read_1(void *ddp, uint32_t addr)
1.1 init 60: {
61: /*
62: * There is only one on-board i/o bus in testarm.
63: */
64: return( (*(uint8_t *)addr) );
65: }
66:
67:
68: uint16_t
1.6 ! init 69: obio_read_2(void *ddp, uint32_t addr)
1.1 init 70: {
71: return( (*(uint16_t *)addr) );
72: }
73:
74:
75: uint32_t
1.6 ! init 76: obio_read_4(void *ddp, uint32_t addr)
1.1 init 77: {
78: return( (*(uint32_t *)addr) );
79: }
80:
81:
82: int
1.6 ! init 83: obio_write_1(void *ddp, uint32_t addr, uint8_t data)
1.1 init 84: {
85: *((uint8_t *)addr) = data;
86:
87: /* XXX what about write errors? */
88: return(0);
89: }
90:
91:
92: int
1.6 ! init 93: obio_write_2(void *ddp, uint32_t addr, uint16_t data)
1.1 init 94: {
95: *((uint16_t *)addr) = data;
96:
97: return(0);
98: }
99:
100:
101: int
1.6 ! init 102: obio_write_4(void *ddp, uint32_t addr, uint32_t data)
1.1 init 103: {
104: *((uint32_t *)addr) = data;
105:
106: return(0);
107: }
108:
CVSweb