summaryrefslogtreecommitdiff
path: root/os/pc/archmp.c
diff options
context:
space:
mode:
authorKonstantin Kirik (snegovick) <snegovick@uprojects.org>2025-12-28 12:27:31 +0300
committerKonstantin Kirik (snegovick) <snegovick@uprojects.org>2025-12-28 12:27:31 +0300
commit78ee7d5717807e6ac779293d0d3c78341de6130a (patch)
treea43e3b0f61318ac45e6d907c7cc5bad2c6d7f497 /os/pc/archmp.c
parentbdaf46cf45bbb59261da245d548a179d95a42768 (diff)
Move existing boards into subdits split per arch
Diffstat (limited to 'os/pc/archmp.c')
-rw-r--r--os/pc/archmp.c138
1 files changed, 0 insertions, 138 deletions
diff --git a/os/pc/archmp.c b/os/pc/archmp.c
deleted file mode 100644
index fbbda091..00000000
--- a/os/pc/archmp.c
+++ /dev/null
@@ -1,138 +0,0 @@
-#include "u.h"
-#include "../port/lib.h"
-#include "mem.h"
-#include "dat.h"
-#include "fns.h"
-#include "io.h"
-
-#include "mp.h"
-
-#define cpuserver 1
-
-_MP_ *_mp_;
-
-static _MP_*
-mpscan(uchar *addr, int len)
-{
- uchar *e, *p, sum;
- int i;
-
- e = addr+len;
- for(p = addr; p < e; p += sizeof(_MP_)){
- if(memcmp(p, "_MP_", 4))
- continue;
- sum = 0;
- for(i = 0; i < sizeof(_MP_); i++)
- sum += p[i];
- if(sum == 0)
- return (_MP_*)p;
- }
- return 0;
-}
-
-static _MP_*
-mpsearch(void)
-{
- uchar *bda;
- ulong p;
- _MP_ *mp;
-
- /*
- * Search for the MP Floating Pointer Structure:
- * 1) in the first KB of the EBDA;
- * 2) in the last KB of system base memory;
- * 3) in the BIOS ROM between 0xE0000 and 0xFFFFF.
- */
- bda = KADDR(0x400);
- if((p = (bda[0x0F]<<8)|bda[0x0E])){
- if(mp = mpscan(KADDR(p), 1024))
- return mp;
- }
- else{
- p = ((bda[0x14]<<8)|bda[0x13])*1024;
- if(mp = mpscan(KADDR(p-1024), 1024))
- return mp;
- }
- return mpscan(KADDR(0xF0000), 0x10000);
-}
-
-static int identify(void);
-
-PCArch archmp = {
-.id= "_MP_",
-.ident= identify,
-.reset= mpshutdown,
-.intrinit= mpinit,
-.intrenable= mpintrenable,
-.fastclock= i8253read,
-.timerset= lapictimerset,
-};
-
-static int
-identify(void)
-{
- PCMP *pcmp;
- uchar *p, sum;
- ulong length;
-
- if(getconf("*nomp"))
- return 1;
-
- /*
- * Search for an MP configuration table. For now,
- * don't accept the default configurations (physaddr == 0).
- * Check for correct signature, calculate the checksum and,
- * if correct, check the version.
- * To do: check extended table checksum.
- */
- if((_mp_ = mpsearch()) == 0 || _mp_->physaddr == 0)
- return 1;
-
- pcmp = KADDR(_mp_->physaddr);
- if(memcmp(pcmp, "PCMP", 4))
- return 1;
-
- length = pcmp->length;
- sum = 0;
- for(p = (uchar*)pcmp; length; length--)
- sum += *p++;
-
- if(sum || (pcmp->version != 1 && pcmp->version != 4))
- return 1;
-
- if(cpuserver && m->havetsc)
- archmp.fastclock = tscticks;
- return 0;
-}
-
-Lock mpsynclock;
-
-void
-syncclock(void)
-{
- uvlong x;
-
- if(arch->fastclock != tscticks)
- return;
-
- if(m->machno == 0){
- wrmsr(0x10, 0);
- m->tscticks = 0;
- } else {
- x = MACHP(0)->tscticks;
- while(x == MACHP(0)->tscticks)
- ;
- wrmsr(0x10, MACHP(0)->tscticks);
- cycles(&m->tscticks);
- }
-}
-
-uvlong
-tscticks(uvlong *hz)
-{
- if(hz != nil)
- *hz = m->cpuhz;
-
- cycles(&m->tscticks); /* Uses the rdtsc instruction */
- return m->tscticks;
-}