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

File: [local] / funnyos / arch / sam7s64 / dev / saapbus.c (download)

Revision 1.1, Fri Nov 9 16:03:49 2007 UTC (16 years, 8 months ago) by init
Branch: MAIN

driver for APB, Advanced Peripheral Bus found in SAM7 (and other);
this is a simple memory reads/writes (just for use with bus_handle);

/*
 * $Id: saapbus.c,v 1.1 2007/11/09 16:03:49 init Exp $
 */
#include <sys/types.h>
#include <sys/device.h>
#include <sys/bus.h>

#include <arch/sam7s64/dev/saapbusvar.h>
#include <libkern/printf.h>

/*
 * 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, uint32_t flags)
{
	struct saapbus_dd *ddp = self->dv_devdata;
	struct bus_handle *bhp = &ddp->od_bh;

	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);
}