Annotation of funnyos/arch/testarm/dev/obio.c, Revision 1.1
1.1 ! init 1: /*
! 2: * $Id: obio.c,v 1.2 2007/10/12 08:54:20 init Exp $
! 3: */
! 4: #include <sys/types.h>
! 5: #include <sys/device.h>
! 6: #include <sys/mem.h>
! 7: #include <sys/bus.h>
! 8: #include <libkern/printf.h>
! 9:
! 10: /*
! 11: * testarm obio (on-board i/o) support.
! 12: * This is a simple memory read/writes.
! 13: */
! 14: uint8_t obio_read_1(struct device *, uint32_t);
! 15: uint16_t obio_read_2(struct device *, uint32_t);
! 16: uint32_t obio_read_4(struct device *, uint32_t);
! 17: int obio_write_1(struct device *, uint32_t, uint8_t);
! 18: int obio_write_2(struct device *, uint32_t, uint16_t);
! 19: int obio_write_4(struct device *, uint32_t, uint32_t);
! 20:
! 21:
! 22: int
! 23: obio_attach(struct device *self)
! 24: {
! 25: struct busops *aux = self->dv_aux;
! 26: aux = (struct busops *)kmalloc(sizeof(struct busops));
! 27: /*
! 28: * Link bus ops.
! 29: */
! 30: aux->bus_read_1 = obio_read_1;
! 31: aux->bus_read_2 = obio_read_2;
! 32: aux->bus_read_4 = obio_read_4;
! 33: aux->bus_write_1 = obio_write_1;
! 34: aux->bus_write_2 = obio_write_2;
! 35: aux->bus_write_4 = obio_write_4;
! 36:
! 37: printf("memory-mapped i/o\n");
! 38:
! 39: return(0);
! 40: }
! 41:
! 42:
! 43: uint8_t
! 44: obio_read_1(struct device *devp, uint32_t addr)
! 45: {
! 46: /*
! 47: * struct device is not used in obio.
! 48: * There is only one on-board i/o bus in testarm.
! 49: */
! 50: return( (*(uint8_t *)addr) );
! 51: }
! 52:
! 53:
! 54: uint16_t
! 55: obio_read_2(struct device *devp, uint32_t addr)
! 56: {
! 57: return( (*(uint16_t *)addr) );
! 58: }
! 59:
! 60:
! 61: uint32_t
! 62: obio_read_4(struct device *devp, uint32_t addr)
! 63: {
! 64: return( (*(uint32_t *)addr) );
! 65: }
! 66:
! 67:
! 68: int
! 69: obio_write_1(struct device *devp, uint32_t addr, uint8_t data)
! 70: {
! 71: *((uint8_t *)addr) = data;
! 72:
! 73: /* XXX what about write errors? */
! 74: return(0);
! 75: }
! 76:
! 77:
! 78: int
! 79: obio_write_2(struct device *devp, uint32_t addr, uint16_t data)
! 80: {
! 81: *((uint16_t *)addr) = data;
! 82:
! 83: return(0);
! 84: }
! 85:
! 86:
! 87: int
! 88: obio_write_4(struct device *devp, uint32_t addr, uint32_t data)
! 89: {
! 90: *((uint32_t *)addr) = data;
! 91:
! 92: return(0);
! 93: }
! 94:
CVSweb