[BACK]Return to obio.c CVS log [TXT][DIR] Up to [local] / funnyos / arch / testarm / dev

Annotation of funnyos/arch/testarm/dev/obio.c, Revision 1.3

1.1       init        1: /*
1.3     ! init        2:  * $Id: obio.c,v 1.2 2007/10/16 18:11: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:
                     12: /*
                     13:  * testarm obio (on-board i/o) support.
                     14:  * This is a simple memory read/writes.
                     15:  */
                     16: uint8_t        obio_read_1(struct device *, uint32_t);
                     17: uint16_t       obio_read_2(struct device *, uint32_t);
                     18: uint32_t       obio_read_4(struct device *, uint32_t);
                     19: int            obio_write_1(struct device *, uint32_t, uint8_t);
                     20: int            obio_write_2(struct device *, uint32_t, uint16_t);
                     21: int            obio_write_4(struct device *, uint32_t, uint32_t);
                     22:
                     23:
1.3     ! init       24: struct driver obio_dr = {
        !            25:        sizeof(obio_dd),
        !            26:        obio_attach,
        !            27:        obio_detach
        !            28: };
        !            29:
        !            30:
1.1       init       31: int
1.3     ! init       32: obio_attach(struct device *self, uint32_t loc, uint8_t flags)
1.1       init       33: {
1.3     ! init       34:        struct obio_dd *ddp = self->dv_devdata;
        !            35:        struct bus_handle *bhp = ddp->od_bh;
        !            36:
        !            37:        bhp->bus_read_1 = obio_read_1;
        !            38:        bhp->bus_read_2 = obio_read_2;
        !            39:        bhp->bus_read_4 = obio_read_4;
        !            40:        bhp->bus_write_1 = obio_write_1;
        !            41:        bhp->bus_write_2 = obio_write_2;
        !            42:        bhp->bus_write_4 = obio_write_4;
        !            43:
1.1       init       44:
                     45:        printf("memory-mapped i/o\n");
                     46:
                     47:        return(0);
                     48: }
                     49:
                     50:
                     51: uint8_t
1.3     ! init       52: obio_read_1(struct obio_dd *ddp, uint32_t addr)
1.1       init       53: {
                     54:        /*
                     55:         * There is only one on-board i/o bus in testarm.
                     56:         */
                     57:        return( (*(uint8_t *)addr) );
                     58: }
                     59:
                     60:
                     61: uint16_t
1.3     ! init       62: obio_read_2(struct obio_dd *ddp, uint32_t addr)
1.1       init       63: {
                     64:        return( (*(uint16_t *)addr) );
                     65: }
                     66:
                     67:
                     68: uint32_t
1.3     ! init       69: obio_read_4(struct obio_dd *ddp, uint32_t addr)
1.1       init       70: {
                     71:        return( (*(uint32_t *)addr) );
                     72: }
                     73:
                     74:
                     75: int
1.3     ! init       76: obio_write_1(struct obio_dd *ddp, uint32_t addr, uint8_t data)
1.1       init       77: {
                     78:        *((uint8_t *)addr) = data;
                     79:
                     80:        /* XXX what about write errors? */
                     81:        return(0);
                     82: }
                     83:
                     84:
                     85: int
1.3     ! init       86: obio_write_2(struct obio_dd *ddp, uint32_t addr, uint16_t data)
1.1       init       87: {
                     88:        *((uint16_t *)addr) = data;
                     89:
                     90:        return(0);
                     91: }
                     92:
                     93:
                     94: int
1.3     ! init       95: obio_write_4(struct obio_dd *ddp, uint32_t addr, uint32_t data)
1.1       init       96: {
                     97:        *((uint32_t *)addr) = data;
                     98:
                     99:        return(0);
                    100: }
                    101:

CVSweb