version 1.7, 2007/10/16 21:01:40 |
version 1.10, 2007/10/26 14:34:47 |
|
|
#include <arch/testarm/dev/obiovar.h> |
#include <arch/testarm/dev/obiovar.h> |
#include <libkern/printf.h> |
#include <libkern/printf.h> |
|
|
|
/* #define OBIO_DEBUG */ |
|
|
|
#ifdef OBIO_DEBUG |
|
#define DPRINTF(x...) do { printf(x); } while (0) |
|
#else |
|
#define DPRINTF(x...) { } |
|
#endif |
|
|
/* |
/* |
* testarm obio (on-board i/o) support. |
* testarm obio (on-board i/o) support. |
* This is a simple memory read/writes. |
* This is a simple memory read/writes. |
|
|
bhp->bus_write_1 = obio_write_1; |
bhp->bus_write_1 = obio_write_1; |
bhp->bus_write_2 = obio_write_2; |
bhp->bus_write_2 = obio_write_2; |
bhp->bus_write_4 = obio_write_4; |
bhp->bus_write_4 = obio_write_4; |
bhp->dh_ownerdevp = self; /* XXX UGLY bus_{read|write} stuff will access bus device from bus_handle using this */ |
bhp->bh_ownerdd = self->dv_devdata; /* XXX UGLY bus_{read|write} stuff will access bus device from bus_handle using this */ |
|
|
/* expose our bus_handle to the world */ |
/* expose our bus_handle to the world */ |
self->dv_aux = bhp; |
self->dv_aux = bhp; |
|
|
/* |
/* |
* There is only one on-board i/o bus in testarm. |
* There is only one on-board i/o bus in testarm. |
*/ |
*/ |
|
DPRINTF("obio_read_1: read @0x%x\n", addr); |
return( (*(uint8_t *)addr) ); |
return( (*(uint8_t *)addr) ); |
} |
} |
|
|
|
|
uint16_t |
uint16_t |
obio_read_2(void *ddp, uint32_t addr) |
obio_read_2(void *ddp, uint32_t addr) |
{ |
{ |
|
DPRINTF("obio_read_2: read @0x%x\n", addr); |
return( (*(uint16_t *)addr) ); |
return( (*(uint16_t *)addr) ); |
} |
} |
|
|
|
|
uint32_t |
uint32_t |
obio_read_4(void *ddp, uint32_t addr) |
obio_read_4(void *ddp, uint32_t addr) |
{ |
{ |
|
DPRINTF("obio_read_4: read @0x%x\n", addr); |
return( (*(uint32_t *)addr) ); |
return( (*(uint32_t *)addr) ); |
} |
} |
|
|
|
|
int |
int |
obio_write_1(void *ddp, uint32_t addr, uint8_t data) |
obio_write_1(void *ddp, uint32_t addr, uint8_t data) |
{ |
{ |
|
DPRINTF("obio_write_1: write @0x%x data %d\n", addr, data); |
|
|
*((uint8_t *)addr) = data; |
*((uint8_t *)addr) = data; |
|
|
/* XXX what about write errors? */ |
/* XXX what about write errors? */ |
|
|
int |
int |
obio_write_2(void *ddp, uint32_t addr, uint16_t data) |
obio_write_2(void *ddp, uint32_t addr, uint16_t data) |
{ |
{ |
|
DPRINTF("obio_write_2: write @0x%x data %d\n", addr, data); |
|
|
*((uint16_t *)addr) = data; |
*((uint16_t *)addr) = data; |
|
|
return(0); |
return(0); |
|
|
int |
int |
obio_write_4(void *ddp, uint32_t addr, uint32_t data) |
obio_write_4(void *ddp, uint32_t addr, uint32_t data) |
{ |
{ |
|
DPRINTF("obio_write_4: write @0x%x data %d\n", addr, data); |
|
|
*((uint32_t *)addr) = data; |
*((uint32_t *)addr) = data; |
|
|
return(0); |
return(0); |