/* * $Id: saapbus.c,v 1.2 2007/11/09 18:13:38 init Exp $ */ #include #include #include #include #include /* * SAM7 APB (Advanced Peripheral Bus) support. */ int saapbus_attach(struct device *, uint32_t, uint8_t); uint8_t saapbus_read_1(void *, uint32_t); uint16_t saapbus_read_2(void *, uint32_t); uint32_t saapbus_read_4(void *, uint32_t); int saapbus_write_1(void *, uint32_t, uint8_t); int saapbus_write_2(void *, uint32_t, uint16_t); int saapbus_write_4(void *, uint32_t, uint32_t); struct driver saapbus_dr = { sizeof(struct saapbus_dd), saapbus_attach, NULL, NULL }; int saapbus_attach(struct device *self, uint32_t loc, uint8_t flags) { struct saapbus_dd *ddp = self->dv_devdata; struct bus_handle *bhp = &ddp->sd_bushandle; bhp->bus_read_1 = saapbus_read_1; bhp->bus_read_2 = saapbus_read_2; bhp->bus_read_4 = saapbus_read_4; bhp->bus_write_1 = saapbus_write_1; bhp->bus_write_2 = saapbus_write_2; bhp->bus_write_4 = saapbus_write_4; bhp->bh_ownerdd = self->dv_devdata; /* expose our bus_handle to the world */ self->dv_aux = bhp; printf("Advanced Peripheral Bus\n"); return(0); } uint8_t saapbus_read_1(void *ddp, uint32_t addr) { return( (*(uint8_t *)addr) ); } uint16_t saapbus_read_2(void *ddp, uint32_t addr) { return( (*(uint16_t *)addr) ); } uint32_t saapbus_read_4(void *ddp, uint32_t addr) { return( (*(uint32_t *)addr) ); } int saapbus_write_1(void *ddp, uint32_t addr, uint8_t data) { *((uint8_t *)addr) = data; return(0); } int saapbus_write_2(void *ddp, uint32_t addr, uint16_t data) { *((uint16_t *)addr) = data; return(0); } int saapbus_write_4(void *ddp, uint32_t addr, uint32_t data) { *((uint32_t *)addr) = data; return(0); }