From: Waldemar Kozaczuk <[email protected]>
Committer: Waldemar Kozaczuk <[email protected]>
Branch: master

arm: add memory-mapped isa console

This patch adds the mmio (memory-mapped IO) isa
console class to be used on firecracker. Next patches
will add logic to detect and enable this console.

Signed-off-by: Waldemar Kozaczuk <[email protected]>

---
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -817,6 +817,7 @@ drivers += drivers/xenplatform-pci.o
 endif # x64
 
 ifeq ($(arch),aarch64)
+drivers += drivers/mmio-isa-serial.o
 drivers += drivers/pl011.o
 drivers += drivers/xenconsole.o
 drivers += drivers/virtio.o
diff --git a/drivers/mmio-isa-serial.cc b/drivers/mmio-isa-serial.cc
--- a/drivers/mmio-isa-serial.cc
+++ b/drivers/mmio-isa-serial.cc
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2013 Cloudius Systems, Ltd.
+ *
+ * This work is open source software, licensed under the terms of the
+ * BSD license as described in the LICENSE file in the top-level directory.
+ */
+
+#include "mmio-isa-serial.hh"
+
+namespace console {
+
+mmioaddr_t mmio_isa_serial_console::_addr_mmio;
+u64 mmio_isa_serial_console::_phys_mmio_address;
+
+u8 isa_serial_console_base::read_byte(int reg) {
+    return mmio_getb(mmio_isa_serial_console::_addr_mmio + reg);
+};
+
+void isa_serial_console_base::write_byte(u8 val, int reg) {
+    mmio_setb(mmio_isa_serial_console::_addr_mmio + reg, val);
+};
+
+void mmio_isa_serial_console::early_init(u64 mmio_phys_address)
+{
+    _phys_mmio_address = mmio_phys_address;
+    _addr_mmio = reinterpret_cast<char*>(mmio_phys_address);
+
+    common_early_init();
+}
+
+void mmio_isa_serial_console::memory_map()
+{
+    if (_phys_mmio_address) {
+        _addr_mmio = mmio_map(_phys_mmio_address, mmu::page_size);
+    }
+}
+
+void mmio_isa_serial_console::dev_start() {
+    _irq.reset(new spi_interrupt(gic::irq_type::IRQ_TYPE_EDGE, 64,
+                                 [&] { return true; },
+                                 [&] { _thread->wake(); }));
+    enable_interrupt();
+}
+
+}
diff --git a/drivers/mmio-isa-serial.hh b/drivers/mmio-isa-serial.hh
--- a/drivers/mmio-isa-serial.hh
+++ b/drivers/mmio-isa-serial.hh
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2013 Cloudius Systems, Ltd.
+ *
+ * This work is open source software, licensed under the terms of the
+ * BSD license as described in the LICENSE file in the top-level directory.
+ */
+
+#ifndef DRIVERS_MMIO_ISA_SERIAL_HH
+#define DRIVERS_MMIO_ISA_SERIAL_HH
+
+#include "isa-serial-base.hh"
+
+namespace console {
+
+class mmio_isa_serial_console : public isa_serial_console_base {
+public:
+    void set_irqid(int irqid) { this->irqid = irqid; }
+    static void early_init(u64 mmio_phys_address);
+    static void memory_map();
+    static mmioaddr_t _addr_mmio;
+    static u64 _phys_mmio_address;
+private:
+    unsigned int irqid;
+    std::unique_ptr<spi_interrupt> _irq;
+    virtual void dev_start();
+    virtual const char *thread_name() { return "mmio-isa-serial-input"; }
+};
+
+}
+
+#endif

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/000000000000f386b505a8f20473%40google.com.

Reply via email to