File: [local] / funnyos / dev / cpu.c (download)
Revision 1.4, Mon Oct 29 21:10:02 2007 UTC (16 years, 10 months ago) by init
Branch: MAIN
Changes since 1.3: +2 -1 lines
use new dr_interrupt pointer in struct driver for future interrupts support
|
/*
* $Id: cpu.c,v 1.4 2007/10/29 21:10:02 init Exp $
*/
#include <sys/types.h>
#include <sys/device.h>
#include <libkern/printf.h>
#include <dev/cpuvar.h>
int cpu_attach(struct device *, uint32_t, uint8_t);
struct driver cpu_dr = {
sizeof(struct cpu_dd),
cpu_attach,
NULL,
NULL
};
void cpu_identify(struct cpu_dd *);
int
cpu_attach(struct device *self, uint32_t loc, uint8_t flags)
{
struct cpu_dd *ddp = self->dv_devdata;
/* identify CPU */
cpu_identify(ddp);
printf("%s CPU at %d MHz (flags=0x%x)\n", ddp->cpu_name,
ddp->cpu_freq, ddp->cpu_flags);
return(0);
}
void
cpu_identify(struct cpu_dd *ddp)
{
/*
* Identify given CPU using cp15 (System Control Co-Processor) register 0 (ID)
*/
uint32_t rd;
/* store cp15 ID register into rd */
// __asm __volatile("mrc p15 0, %0, c0, c0, 0"
// :"=r" (rd));
/* parse ID; See the ARM Architecture Reference Manual for details. */
/* XXX */
ddp->cpu_name = "StrongARM SA110";
ddp->cpu_freq = 233;
ddp->cpu_flags = CPU_HAVE_ICACHE | CPU_HAVE_DCACHE | CPU_HAVE_MMU;
}