=================================================================== RCS file: /cvs/funnyos/arch/testarm/dev/obio.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- funnyos/arch/testarm/dev/obio.c 2007/10/16 19:11:47 1.2 +++ funnyos/arch/testarm/dev/obio.c 2007/10/16 19:34:13 1.3 @@ -1,5 +1,5 @@ /* - * $Id: obio.c,v 1.2 2007/10/16 18:11:47 init Exp $ + * $Id: obio.c,v 1.3 2007/10/16 18:34:13 init Exp $ */ #include #include @@ -21,21 +21,27 @@ int obio_write_4(struct device *, uint32_t, uint32_t); +struct driver obio_dr = { + sizeof(obio_dd), + obio_attach, + obio_detach +}; + + int -obio_attach(struct device *self) +obio_attach(struct device *self, uint32_t loc, uint8_t flags) { - struct busops *aux = self->dv_aux; - aux = (struct busops *)kmalloc(sizeof(struct busops)); - /* - * Link bus ops. - */ - aux->bus_read_1 = obio_read_1; - aux->bus_read_2 = obio_read_2; - aux->bus_read_4 = obio_read_4; - aux->bus_write_1 = obio_write_1; - aux->bus_write_2 = obio_write_2; - aux->bus_write_4 = obio_write_4; + struct obio_dd *ddp = self->dv_devdata; + struct bus_handle *bhp = ddp->od_bh; + + bhp->bus_read_1 = obio_read_1; + bhp->bus_read_2 = obio_read_2; + bhp->bus_read_4 = obio_read_4; + bhp->bus_write_1 = obio_write_1; + bhp->bus_write_2 = obio_write_2; + bhp->bus_write_4 = obio_write_4; + printf("memory-mapped i/o\n"); return(0); @@ -43,10 +49,9 @@ uint8_t -obio_read_1(struct device *devp, uint32_t addr) +obio_read_1(struct obio_dd *ddp, uint32_t addr) { /* - * struct device is not used in obio. * There is only one on-board i/o bus in testarm. */ return( (*(uint8_t *)addr) ); @@ -54,21 +59,21 @@ uint16_t -obio_read_2(struct device *devp, uint32_t addr) +obio_read_2(struct obio_dd *ddp, uint32_t addr) { return( (*(uint16_t *)addr) ); } uint32_t -obio_read_4(struct device *devp, uint32_t addr) +obio_read_4(struct obio_dd *ddp, uint32_t addr) { return( (*(uint32_t *)addr) ); } int -obio_write_1(struct device *devp, uint32_t addr, uint8_t data) +obio_write_1(struct obio_dd *ddp, uint32_t addr, uint8_t data) { *((uint8_t *)addr) = data; @@ -78,7 +83,7 @@ int -obio_write_2(struct device *devp, uint32_t addr, uint16_t data) +obio_write_2(struct obio_dd *ddp, uint32_t addr, uint16_t data) { *((uint16_t *)addr) = data; @@ -87,7 +92,7 @@ int -obio_write_4(struct device *devp, uint32_t addr, uint32_t data) +obio_write_4(struct obio_dd *ddp, uint32_t addr, uint32_t data) { *((uint32_t *)addr) = data;