Browse Source

delete old hpet code

Fabian 6 months ago
parent
commit
55f1c32ab9
6 changed files with 8 additions and 323 deletions
  1. 1 1
      Makefile
  2. 1 1
      debug.html
  3. 0 4
      src/config.js
  4. 1 2
      src/const.js
  5. 5 20
      src/cpu.js
  6. 0 295
      src/hpet.js

+ 1 - 1
Makefile

@@ -79,7 +79,7 @@ CARGO_FLAGS_SAFE=\
 CARGO_FLAGS=$(CARGO_FLAGS_SAFE) -C target-feature=+bulk-memory -C target-feature=+multivalue -C target-feature=+simd128
 
 CORE_FILES=const.js config.js io.js main.js lib.js buffer.js ide.js pci.js floppy.js \
-	   memory.js dma.js pit.js vga.js ps2.js rtc.js uart.js hpet.js \
+	   memory.js dma.js pit.js vga.js ps2.js rtc.js uart.js \
 	   acpi.js apic.js ioapic.js \
 	   state.js ne2k.js sb16.js virtio.js bus.js log.js \
 	   cpu.js debug.js \

+ 1 - 1
debug.html

@@ -10,7 +10,7 @@
 var CORE_FILES =
     "const.js config.js log.js lib.js buffer.js cpu.js debug.js " +
     "io.js main.js ide.js pci.js floppy.js " +
-    "memory.js dma.js pit.js vga.js ps2.js rtc.js uart.js acpi.js apic.js ioapic.js hpet.js sb16.js " +
+    "memory.js dma.js pit.js vga.js ps2.js rtc.js uart.js acpi.js apic.js ioapic.js sb16.js " +
     "ne2k.js state.js virtio.js bus.js elf.js kernel.js";
 
 var BROWSER_FILES = "main.js screen.js keyboard.js mouse.js speaker.js serial.js network.js starter.js worker_bus.js print_stats.js filestorage.js";

+ 0 - 4
src/config.js

@@ -43,10 +43,6 @@ var LOG_LEVEL = LOG_ALL & ~LOG_PS2 & ~LOG_PIT & ~LOG_VIRTIO & ~LOG_9P & ~LOG_PIC
  */
 var DEBUG_SCREEN_LAYERS = DEBUG && false;
 
-
-/** @const */
-var ENABLE_HPET = DEBUG && false;
-
 /**
  * @const
  * How many ticks the TSC does per millisecond

+ 1 - 2
src/const.js

@@ -21,7 +21,7 @@ var
 /** @const */ LOG_SERIAL = 0x004000,
 /** @const */ LOG_DISK =   0x008000,
 /** @const */ LOG_RTC =    0x010000,
-/** @const */ LOG_HPET =   0x020000,
+// unused                  0x020000,
 /** @const */ LOG_ACPI =   0x040000,
 /** @const */ LOG_APIC =   0x080000,
 /** @const */ LOG_NET =    0x100000,
@@ -52,7 +52,6 @@ var LOG_NAMES = [
     [LOG_FLOPPY, "FLOP"],
     [LOG_SERIAL, "SERI"],
     [LOG_RTC, "RTC"],
-    [LOG_HPET, "HPET"],
     [LOG_ACPI, "ACPI"],
     [LOG_APIC, "APIC"],
     [LOG_NET, "NET"],

+ 5 - 20
src/cpu.js

@@ -377,7 +377,7 @@ CPU.prototype.get_state = function()
     state[48] = this.devices.pci;
     state[49] = this.devices.dma;
     state[50] = this.devices.acpi;
-    state[51] = this.devices.hpet;
+    // 51 (formerly hpet)
     state[52] = this.devices.vga;
     state[53] = this.devices.ps2;
     state[54] = this.devices.uart0;
@@ -473,7 +473,7 @@ CPU.prototype.set_state = function(state)
     this.devices.pci && this.devices.pci.set_state(state[48]);
     this.devices.dma && this.devices.dma.set_state(state[49]);
     this.devices.acpi && this.devices.acpi.set_state(state[50]);
-    this.devices.hpet && this.devices.hpet.set_state(state[51]);
+    // 51 (formerly hpet)
     this.devices.vga && this.devices.vga.set_state(state[52]);
     this.devices.ps2 && this.devices.ps2.set_state(state[53]);
     this.devices.uart0 && this.devices.uart0.set_state(state[54]);
@@ -831,11 +831,6 @@ CPU.prototype.init = function(settings, device_bus)
 
         this.devices.dma = new DMA(this);
 
-        if(ENABLE_HPET)
-        {
-            this.devices.hpet = new HPET(this);
-        }
-
         this.devices.vga = new VGAScreen(this, device_bus,
                 settings.vga_memory_size || 8 * 1024 * 1024);
 
@@ -1376,18 +1371,8 @@ CPU.prototype.dump_function_code = function(block_ptr, count)
 
 CPU.prototype.run_hardware_timers = function(now)
 {
-    if(ENABLE_HPET)
-    {
-        var pit_time = this.devices.pit.timer(now, this.devices.hpet.legacy_mode);
-        var rtc_time = this.devices.rtc.timer(now, this.devices.hpet.legacy_mode);
-        var hpet_time = this.devices.hpet.timer(now);
-    }
-    else
-    {
-        var pit_time = this.devices.pit.timer(now, false);
-        var rtc_time = this.devices.rtc.timer(now, false);
-        var hpet_time = 100;
-    }
+    const pit_time = this.devices.pit.timer(now, false);
+    const rtc_time = this.devices.rtc.timer(now, false);
 
     let acpi_time = 100;
     let apic_time = 100;
@@ -1397,7 +1382,7 @@ CPU.prototype.run_hardware_timers = function(now)
         apic_time = this.devices.apic.timer(now);
     }
 
-    return Math.min(pit_time, rtc_time, hpet_time, acpi_time, apic_time);
+    return Math.min(pit_time, rtc_time, acpi_time, apic_time);
 };
 
 CPU.prototype.device_raise_irq = function(i)

+ 0 - 295
src/hpet.js

@@ -1,295 +0,0 @@
-"use strict";
-
-
-var HPET_ADDR = 0xFED00000,
-    HPET_PERIOD = 0x05F5E100, // in nano seconds
-    HPET_FREQ_MS = 1e12 / HPET_PERIOD, // in kHZ
-    HPET_SUPPORT_64 = 0,
-    HPET_COUNTER_CONFIG = 1 << 4 | HPET_SUPPORT_64 << 5,
-    HPET_COUNTER_CONFIG_MASK = 1 << 4 | 1 << 5 | 1 << 15,
-    HPET_NUM_COUNTERS = 4;
-
-/**
- * HPET - High Precision Event Timer
- * http://wiki.osdev.org/HPET
- *
- * @constructor
- * @param {CPU} cpu
- */
-function HPET(cpu)
-{
-    var me = this,
-
-        hpet_enabled = false,
-        hpet_start = Date.now(),
-
-        hpet_offset_low = 0,
-        hpet_offset_high = 0,
-
-        counter_read_acc_next = false,
-        interrupt_status = 0,
-
-        counter_config = new Int32Array(HPET_NUM_COUNTERS << 1),
-        counter_comparator = new Int32Array(HPET_NUM_COUNTERS << 1),
-        counter_accumulator = new Int32Array(HPET_NUM_COUNTERS << 1);
-
-    //var counter_last_irq = new Int32Array(HPET_NUM_COUNTERS << 1);
-
-
-    var last_check = 0;
-
-
-    this.legacy_mode = false;
-
-    this.timer = function(now)
-    {
-        if(!hpet_enabled)
-        {
-            return 100;
-        }
-
-        var
-            counter_value = get_counter() >>> 0,
-            config,
-            //last_irq,
-            comparator,
-            do_irq;
-
-        for(var i = 0; i < HPET_NUM_COUNTERS; i++)
-        {
-            config = counter_config[i << 1];
-            //last_irq = counter_last_irq[i << 1] >>> 0;
-            comparator = counter_comparator[i << 1] >>> 0;
-
-            if(last_check <= counter_value ?
-                    comparator > last_check && comparator <= counter_value :
-                    comparator > last_check || comparator <= counter_value
-            ) {
-                do_irq = config & 4;
-                //counter_last_irq[i << 1] = comparator;
-
-                if(config & 2)
-                {
-                    // level triggered
-                    do_irq = do_irq && !(interrupt_status & 1 << i);
-                    interrupt_status |= 1 << i;
-                }
-                else
-                {
-                    // edge-triggered
-                    interrupt_status &= ~(1 << i);
-                }
-
-                if(config & 1 << 3)
-                {
-                    // periodic mode
-                    counter_comparator[i << 1] += counter_accumulator[i << 1];
-                }
-
-                //dbg_log("do_irq=" + do_irq, LOG_HPET);
-                if(do_irq)
-                {
-                    if(me.legacy_mode && i === 0)
-                    {
-                        cpu.device_raise_irq(0);
-                    }
-                    else if(me.legacy_mode && i === 1)
-                    {
-                        cpu.device_raise_irq(0);
-                    }
-                    else
-                    {
-                        // TODO
-                        cpu.device_raise_irq(0);
-                    }
-                }
-            }
-        }
-
-        last_check = counter_value;
-
-        return 100; // TODO
-    };
-
-    function get_counter()
-    {
-        if(hpet_enabled)
-        {
-            return (Date.now() - hpet_start) * HPET_FREQ_MS + hpet_offset_low | 0;
-        }
-        else
-        {
-            return hpet_offset_low;
-        }
-    }
-
-    function get_counter_high()
-    {
-        if(HPET_SUPPORT_64)
-        {
-            if(hpet_enabled)
-            {
-                return (Date.now() - hpet_start) * (HPET_FREQ_MS / 0x100000000) + hpet_offset_high | 0;
-            }
-            else
-            {
-                return hpet_offset_high;
-            }
-        }
-        else
-        {
-            return 0;
-        }
-    }
-
-    cpu.io.mmap_register(HPET_ADDR, 0x4000, mmio_read, mmio_write);
-
-
-
-    function mmio_read(addr)
-    {
-        dbg_log("Read " + h(addr, 4) + " (ctr=" + h(get_counter() >>> 0) + ")", LOG_HPET);
-
-        switch(addr)
-        {
-            case 0:
-                return 1 << 16 | HPET_NUM_COUNTERS - 1 << 8 | 0x8000 | 0x01 | HPET_SUPPORT_64 << 13;
-            case 4:
-                return HPET_PERIOD;
-
-            case 0x10:
-                return me.legacy_mode << 1 | hpet_enabled;
-
-            case 0xF0:
-                return get_counter();
-
-            case 0xF4:
-                return get_counter_high();
-        }
-
-        // read from counter register
-        var register = addr >> 2 & 7,
-            counter = addr - 0x100 >> 5;
-
-        if(addr < 0x100 || counter >= HPET_NUM_COUNTERS || register > 5)
-        {
-            dbg_log("Read reserved address: " + h(addr), LOG_HPET);
-            return 0;
-        }
-
-        dbg_log("Read counter: addr=" + h(addr) + " counter=" + h(counter, 2) +
-                " reg=" + h(register), LOG_HPET);
-
-        switch(register)
-        {
-            case 0:
-                return counter_config[counter << 1] & ~HPET_COUNTER_CONFIG_MASK | HPET_COUNTER_CONFIG;
-            case 1:
-                return counter_config[counter << 1 | 1];
-
-            case 2:
-                return counter_comparator[counter << 1];
-            case 3:
-                return counter_comparator[counter << 1 | 1];
-
-            case 4:
-            case 5:
-                // TODO interrupt route register
-                return 0;
-        }
-    }
-
-    function mmio_write(addr, data)
-    {
-        dbg_log("Write " + h(addr, 4) + ": " + h(data, 2), LOG_HPET);
-
-        switch(addr)
-        {
-            case 0x10:
-                dbg_log("conf: enabled=" + (data & 1) + " legacy=" + (data >> 1 & 1), LOG_HPET);
-
-                if((hpet_enabled ^ data) & 1)
-                {
-                    if(data & 1)
-                    {
-                        // counter is enabled now, start counting now
-                        hpet_start = Date.now();
-                    }
-                    else
-                    {
-                        // counter is disabled now, save current count
-                        hpet_offset_low = get_counter();
-                        hpet_offset_high = get_counter_high();
-                    }
-                }
-
-                hpet_enabled = (data & 1) === 1;
-                me.legacy_mode = (data & 2) === 2;
-
-                return;
-
-            case 0x20:
-                // writing a 1 clears bits
-                interrupt_status &= ~data;
-                return;
-
-            case 0xF0:
-                hpet_offset_low = data;
-                return;
-
-            case 0xF4:
-                hpet_offset_high = data;
-                return;
-        }
-
-        // read from counter register
-        var register = addr >> 2 & 7,
-            counter = addr - 0x100 >> 5;
-
-        if(addr < 0x100 || counter >= HPET_NUM_COUNTERS || register > 2)
-        {
-            dbg_log("Write reserved address: " + h(addr) + " data=" + h(data), LOG_HPET);
-            return;
-        }
-
-        dbg_log("Write counter: addr=" + h(addr) + " counter=" + h(counter, 2) +
-                " reg=" + h(register) + " data=" + h(data, 2), LOG_HPET);
-
-        switch(register)
-        {
-            case 0:
-                counter_config[counter << 1] = data;
-                break;
-            case 1:
-                //counter_config[counter << 1 | 1] = data;
-                break;
-
-            case 2:
-                if(counter_read_acc_next)
-                {
-                    counter_accumulator[counter << 1] = data;
-                    counter_read_acc_next = false;
-                    dbg_log("Accumulator acc=" + h(data >>> 0, 8) + " ctr=" + h(counter, 2), LOG_HPET);
-                }
-                else
-                {
-                    counter_comparator[counter << 1] = data;
-
-                    if(counter_config[counter << 1] & 1 << 6)
-                    {
-                        counter_read_acc_next = true;
-                        counter_config[counter << 1] &= ~(1 << 6);
-                    }
-                }
-                break;
-            case 3:
-                counter_comparator[counter << 1 | 1] = data;
-                break;
-
-            case 4:
-            case 5:
-                // TODO interrupt route register
-
-        }
-    }
-}