Pass a softc pointer around everywhere, and use it when we need the name of

the device.

Don't pretend that fpe0 and fpu0 exist as devices (they don't).

G/C a few items related to /dev/cpu* support.
This commit is contained in:
bjh21 2001-03-11 15:05:43 +00:00
parent ffe630e7c3
commit 5f8b55f7c3

View File

@ -1,4 +1,4 @@
/* $NetBSD: cpu.c,v 1.14 2001/03/10 21:27:06 bjh21 Exp $ */
/* $NetBSD: cpu.c,v 1.15 2001/03/11 15:05:43 bjh21 Exp $ */
/*
* Copyright (c) 1995 Mark Brinicombe.
@ -62,8 +62,7 @@
#endif /* ARMFPE */
struct cpu_softc {
struct device sc_device;
int sc_open;
struct device sc_dev;
};
/* Array of cpu structures, one per possible cpu */
@ -74,9 +73,9 @@ volatile int undefined_test; /* Used for FPA test */
extern int cpuctrl; /* cpu control register value */
/* Prototypes */
void identify_master_cpu __P((int cpu_number, char *dev_name));
void identify_arm_cpu __P((int cpu_number));
void identify_arm_fpu __P((int cpu_number));
void identify_master_cpu __P((struct cpu_softc *sc, int cpu_number));
void identify_arm_cpu __P((struct cpu_softc *sc, int cpu_number));
void identify_arm_fpu __P((struct cpu_softc *sc, int cpu_number));
/*
@ -108,20 +107,19 @@ cpuattach(parent, self, aux)
struct device *self;
void *aux;
{
struct cpu_softc *sc = (void *)self;
int loop;
for (loop = 0; loop < MAX_CPUS; ++loop)
memset(&cpus[loop], 0, sizeof(cpu_t));
identify_master_cpu(CPU_MASTER, self->dv_xname);
identify_master_cpu(sc, CPU_MASTER);
}
struct cfattach cpu_ca = {
sizeof(struct cpu_softc), cpumatch, cpuattach
};
extern struct cfdriver cpu_cd;
/*
* Used to test for an FPA. The following function is installed as a coproc1
* handler on the undefined instruction vector and then we issue a FPA
@ -168,9 +166,9 @@ fpa_handler(address, instruction, frame, fault_code)
*/
void
identify_master_cpu(cpu_number, dev_name)
identify_master_cpu(sc, cpu_number)
struct cpu_softc *sc;
int cpu_number;
char *dev_name;
{
u_int fpsr;
@ -180,19 +178,20 @@ identify_master_cpu(cpu_number, dev_name)
cpus[cpu_number].cpu_id = cpu_id();
identify_arm_cpu(cpu_number);
identify_arm_cpu(sc, cpu_number);
strcpy(cpu_model, cpus[cpu_number].cpu_model);
if (cpus[CPU_MASTER].cpu_class == CPU_CLASS_SA1
&& (cpus[CPU_MASTER].cpu_id & CPU_ID_REVISION_MASK) < 3) {
printf("%s: SA-110 with bugged STM^ instruction\n", dev_name);
printf("%s: SA-110 with bugged STM^ instruction\n",
sc->sc_dev.dv_xname);
}
#ifdef CPU_ARM8
if ((cpus[CPU_MASTER].cpu_id & CPU_ID_CPU_MASK) == CPU_ID_ARM810) {
int clock = arm8_clock_config(0, 0);
char *fclk;
printf("%s: ARM810 cp15=%02x", dev_name, clock);
printf("%s: ARM810 cp15=%02x", sc->sc_dev.dv_xname, clock);
printf(" clock:%s", (clock & 1) ? " dynamic" : "");
printf("%s", (clock & 2) ? " sync" : "");
switch ((clock >> 2) & 3) {
@ -266,14 +265,14 @@ identify_master_cpu(cpu_number, dev_name)
ptr = strstr(boot_args, "noarmfpe");
if (!ptr) {
if (initialise_arm_fpe(&cpus[cpu_number]) != 0)
identify_arm_fpu(cpu_number);
identify_arm_fpu(sc, cpu_number);
}
}
#endif
}
identify_arm_fpu(cpu_number);
identify_arm_fpu(sc, cpu_number);
}
struct cpuidtab {
@ -339,7 +338,8 @@ const struct cpu_classtab cpu_classes[] = {
*/
void
identify_arm_cpu(cpu_number)
identify_arm_cpu(sc, cpu_number)
struct cpu_softc *sc;
int cpu_number;
{
cpu_t *cpu;
@ -428,13 +428,15 @@ identify_arm_cpu(cpu_number)
break;
default:
if (cpu_classes[cpu->cpu_class].class_option != NULL)
printf("WARNING: %s does not fully support this CPU."
"\n", ostype);
else
printf("WARNING: This kernel does not fully support "
"this CPU.\nRecompile with \"options %s\" to "
"correct this.\n",
printf("%s: %s does not fully support this CPU."
"\n", sc->sc_dev.dv_xname, ostype);
else {
printf("%s: This kernel does not fully support "
"this CPU.\n", sc->sc_dev.dv_xname);
printf("%s: Recompile with \"options %s\" to "
"correct this.\n", sc->sc_dev.dv_xname,
cpu_classes[cpu->cpu_class].class_option);
}
break;
}
@ -448,7 +450,8 @@ identify_arm_cpu(cpu_number)
*/
void
identify_arm_fpu(cpu_number)
identify_arm_fpu(sc, cpu_number)
struct cpu_softc *sc;
int cpu_number;
{
cpu_t *cpu;
@ -462,19 +465,17 @@ identify_arm_fpu(cpu_number)
strcpy(cpu->fpu_model, "None");
break;
case FPU_CLASS_FPE :
printf("fpe%d at cpu%d: %s\n", cpu_number, cpu_number,
cpu->fpu_model);
printf("fpe%d: no hardware found\n", cpu_number);
printf("%s: FPE: %s\n", sc->sc_dev.dv_xname, cpu->fpu_model);
printf("%s: no FP hardware found\n", sc->sc_dev.dv_xname);
break;
case FPU_CLASS_FPA :
printf("fpe%d at cpu%d: %s\n", cpu_number, cpu_number,
cpu->fpu_model);
printf("%s: FPE: %s\n", sc->sc_dev.dv_xname, cpu->fpu_model);
if (cpu->fpu_type == FPU_TYPE_FPA11) {
strcpy(cpu->fpu_model, "FPA11");
printf("fpe%d: FPA11 found\n", cpu_number);
printf("%s: FPA11 found\n", sc->sc_dev.dv_xname);
} else {
strcpy(cpu->fpu_model, "FPA");
printf("fpe%d: FPA10 found\n", cpu_number);
printf("%s: FPA10 found\n", sc->sc_dev.dv_xname);
}
if ((cpu->fpu_flags & 4) == 0)
strcat(cpu->fpu_model, "");
@ -484,8 +485,7 @@ identify_arm_fpu(cpu_number)
case FPU_CLASS_FPU :
sprintf(cpu->fpu_model, "Unknown FPU (ID=%02x)\n",
cpu->fpu_type);
printf("fpu%d at cpu%d: %s\n", cpu_number, cpu_number,
cpu->fpu_model);
printf("%s: %s\n", sc->sc_dev.dv_xname, cpu->fpu_model);
break;
}
}