Subject: procfs_machdep hack (LONG)
To: None <port-amiga@netbsd.org>
From: Radek Kujawa <streamer@cytrynka.infoland.int.pl>
List: port-amiga
Date: 11/14/2004 14:00:43
Hi.
  I noticed that mounting proc filesystem on amiga with -o linux creates
cpuinfo file, but it's empty.

a1200: {7} cat /proc/cpuinfo
a1200: {8}

So I wrote small dirty hack to display Linux/m68k-style cpuinfo.
Unfortunately I didn't know how to compute "Clocking", "BogoMips" and
"Calibration" values, so this hack shows only CPU, MMU and FPU types
(using cputype, mmutype and fputype globals).

I suspect that "Clocking" is (loop-cycles*1024)/delaydivisor.
i.e. when delay loop is 167/1024 us and CPU is 68030:
8*1024/167
Or maybe I'm wrong - I'm no kernel hacker ;).

As I have no access to other machine than my Amiga right now, I couldn't
cross compile kernel and check if this patch works. But I hope that
someone will correct it and commit ;).

--- ./procfs_machdep.c  Sun Nov 14 01:19:27 2004
+++ ./procfs_machdep_new.c        Sun Nov 14 12:25:35 2004
@@ -9,6 +9,7 @@
 #include <sys/vnode.h>
 #include <miscfs/procfs/procfs.h>

+#include <m68k/m68k.h>

 /*
  * Linux-style /proc/cpuinfo.
@@ -18,6 +19,66 @@
 procfs_getcpuinfstr(char *buf, int *len)
 {
        *len = 0;
+       const char *cpu, *mmu, *fpu;

+       switch (cputype) {
+       case CPU_68020:
+               cpu = "68020";
+               break;
+       case CPU_68030:
+               cpu = "68030";
+               break;
+       case CPU_68040:
+               cpu = "68040";
+               break;
+       case CPU_68060:
+               cpu = "68060";
+               break;
+       default:
+               cpu = "680x0";
+       }
+
+       switch (mmutype) {
+       case MMU_68851:
+               mmu = "68851";
+               break;
+       case MMU_68030:
+               mmu = "68030";
+               break;
+       case MMU_68040:
+               mmu = "68040";
+               break;
+       case MMU_68060:
+               mmu = "68060";
+               break;
+       default:
+               mmu = "unknown";
+       }
+
+       switch (fputype) {
+       case FPU_NONE:
+               fpu = "none(soft float)";
+               break;
+       case FPU_68881:
+               fpu = "68881";
+               break;
+       case FPU_68882:
+               fpu = "68882";
+               break;
+       default:
+               fpu = "none";
+       }
+
+       *len = snprintf(buf, sizeof(buf),
+               /* as seen in Linux 2.4.27 */
+               "CPU:\t\t%s\n"
+               "MMU:\t\t%s\n"
+               "FPU:\t\t%s\n",
+               /*
+                * in Linux m68k /proc/cpuinfo there are also "Clocking",
+                * "BogoMips" and "Calibration".
+                */
+               cpu, mmu, fpu);
+
        return 0;
 }



Radek Kujawa