[BACK]Return to obio.c CVS log [TXT][DIR] Up to [local] / funnyos / arch / testarm / dev

File: [local] / funnyos / arch / testarm / dev / obio.c (download)

Revision 1.2, Tue Oct 16 18:11:47 2007 UTC (16 years, 7 months ago) by init
Branch: MAIN
Changes since 1.1: +3 -1 lines

include obiovar.h

/*
 * $Id: obio.c,v 1.2 2007/10/16 18:11:47 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);


int
obio_attach(struct device *self)
{
	struct busops *aux = self->dv_aux;
	aux = (struct busops *)kmalloc(sizeof(struct busops));
	/*
	 * Link bus ops.
	 */
	aux->bus_read_1 = obio_read_1;
	aux->bus_read_2 = obio_read_2;
	aux->bus_read_4 = obio_read_4;
	aux->bus_write_1 = obio_write_1;
	aux->bus_write_2 = obio_write_2;
	aux->bus_write_4 = obio_write_4;

	printf("memory-mapped i/o\n");

	return(0);
}


uint8_t
obio_read_1(struct device *devp, uint32_t addr)
{
	/*
	 * struct device is not used in obio.
	 * There is only one on-board i/o bus in testarm.
	 */
	return( (*(uint8_t *)addr) );
}


uint16_t
obio_read_2(struct device *devp, uint32_t addr)
{
	return( (*(uint16_t *)addr) );
}


uint32_t
obio_read_4(struct device *devp, uint32_t addr)
{
	return( (*(uint32_t *)addr) );
}


int
obio_write_1(struct device *devp, uint32_t addr, uint8_t data)
{
	*((uint8_t *)addr) = data;

	/* XXX what about write errors? */
	return(0);
}


int
obio_write_2(struct device *devp, uint32_t addr, uint16_t data)
{
	*((uint16_t *)addr) = data;

	return(0);
}


int
obio_write_4(struct device *devp, uint32_t addr, uint32_t data)
{
	*((uint32_t *)addr) = data;

	return(0);
}