version 1.1, 2007/10/16 09:41:04 |
version 1.3, 2007/10/16 19:34:13 |
|
|
#include <sys/device.h> |
#include <sys/device.h> |
#include <sys/mem.h> |
#include <sys/mem.h> |
#include <sys/bus.h> |
#include <sys/bus.h> |
|
|
|
#include <arch/testarm/dev/obiovar.h> |
#include <libkern/printf.h> |
#include <libkern/printf.h> |
|
|
/* |
/* |
|
|
int obio_write_4(struct device *, uint32_t, uint32_t); |
int obio_write_4(struct device *, uint32_t, uint32_t); |
|
|
|
|
|
struct driver obio_dr = { |
|
sizeof(obio_dd), |
|
obio_attach, |
|
obio_detach |
|
}; |
|
|
|
|
int |
int |
obio_attach(struct device *self) |
obio_attach(struct device *self, uint32_t loc, uint8_t flags) |
{ |
{ |
struct busops *aux = self->dv_aux; |
struct obio_dd *ddp = self->dv_devdata; |
aux = (struct busops *)kmalloc(sizeof(struct busops)); |
struct bus_handle *bhp = ddp->od_bh; |
/* |
|
* Link bus ops. |
bhp->bus_read_1 = obio_read_1; |
*/ |
bhp->bus_read_2 = obio_read_2; |
aux->bus_read_1 = obio_read_1; |
bhp->bus_read_4 = obio_read_4; |
aux->bus_read_2 = obio_read_2; |
bhp->bus_write_1 = obio_write_1; |
aux->bus_read_4 = obio_read_4; |
bhp->bus_write_2 = obio_write_2; |
aux->bus_write_1 = obio_write_1; |
bhp->bus_write_4 = obio_write_4; |
aux->bus_write_2 = obio_write_2; |
|
aux->bus_write_4 = obio_write_4; |
|
|
|
|
|
printf("memory-mapped i/o\n"); |
printf("memory-mapped i/o\n"); |
|
|
return(0); |
return(0); |
|
|
|
|
|
|
uint8_t |
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. |
* There is only one on-board i/o bus in testarm. |
*/ |
*/ |
return( (*(uint8_t *)addr) ); |
return( (*(uint8_t *)addr) ); |
|
|
|
|
|
|
uint16_t |
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) ); |
return( (*(uint16_t *)addr) ); |
} |
} |
|
|
|
|
uint32_t |
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) ); |
return( (*(uint32_t *)addr) ); |
} |
} |
|
|
|
|
int |
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; |
*((uint8_t *)addr) = data; |
|
|
|
|
|
|
|
|
int |
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; |
*((uint16_t *)addr) = data; |
|
|
|
|
|
|
|
|
int |
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; |
*((uint32_t *)addr) = data; |
|
|