File: [local] / funnyos / arch / testarm / dev / obio.c (download)
Revision 1.3, Tue Oct 16 18:34:13 2007 UTC (16 years, 11 months ago) by init
Branch: MAIN
Changes since 1.2: +25 -20 lines
change first parameter in read/write funcs; matches bus_handle
|
/*
* $Id: obio.c,v 1.3 2007/10/16 18:34:13 init Exp $
*/
#include <sys/types.h>
#include <sys/device.h>
#include <sys/mem.h>
#include <sys/bus.h>
#include <arch/testarm/dev/obiovar.h>
#include <libkern/printf.h>
/*
* testarm obio (on-board i/o) support.
* This is a simple memory read/writes.
*/
uint8_t obio_read_1(struct device *, uint32_t);
uint16_t obio_read_2(struct device *, uint32_t);
uint32_t obio_read_4(struct device *, uint32_t);
int obio_write_1(struct device *, uint32_t, uint8_t);
int obio_write_2(struct device *, uint32_t, uint16_t);
int obio_write_4(struct device *, uint32_t, uint32_t);
struct driver obio_dr = {
sizeof(obio_dd),
obio_attach,
obio_detach
};
int
obio_attach(struct device *self, uint32_t loc, uint8_t flags)
{
struct obio_dd *ddp = self->dv_devdata;
struct bus_handle *bhp = ddp->od_bh;
bhp->bus_read_1 = obio_read_1;
bhp->bus_read_2 = obio_read_2;
bhp->bus_read_4 = obio_read_4;
bhp->bus_write_1 = obio_write_1;
bhp->bus_write_2 = obio_write_2;
bhp->bus_write_4 = obio_write_4;
printf("memory-mapped i/o\n");
return(0);
}
uint8_t
obio_read_1(struct obio_dd *ddp, uint32_t addr)
{
/*
* There is only one on-board i/o bus in testarm.
*/
return( (*(uint8_t *)addr) );
}
uint16_t
obio_read_2(struct obio_dd *ddp, uint32_t addr)
{
return( (*(uint16_t *)addr) );
}
uint32_t
obio_read_4(struct obio_dd *ddp, uint32_t addr)
{
return( (*(uint32_t *)addr) );
}
int
obio_write_1(struct obio_dd *ddp, uint32_t addr, uint8_t data)
{
*((uint8_t *)addr) = data;
/* XXX what about write errors? */
return(0);
}
int
obio_write_2(struct obio_dd *ddp, uint32_t addr, uint16_t data)
{
*((uint16_t *)addr) = data;
return(0);
}
int
obio_write_4(struct obio_dd *ddp, uint32_t addr, uint32_t data)
{
*((uint32_t *)addr) = data;
return(0);
}