Achilleas Anagnostopoulos
d180348116
Define DriverInfo and registration helpers
2017-07-18 08:23:43 +01:00
Achilleas Anagnostopoulos
a86a1bd8cd
Merge pull request #46 from boomshroom/patch-1
...
Check grub on non-dpkg systems.
2017-07-17 07:36:30 +01:00
me
93e2985473
Check grub on non-dpkg systems.
...
Also makes checking for grub-mkrescure more in line with the check for xorriso.
2017-07-16 21:32:25 -07:00
Achilleas Anagnostopoulos
37e32d9960
Provide correct implementation for cpu.FlushTLBEntry
...
The previous version worked under qemu (or qemu does not implement TLB
caching) but caused an unrecoverable page fault when running under
virtualbox.
2017-07-15 17:25:04 +01:00
Achilleas Anagnostopoulos
a05c135355
Merge pull request #45 from achilleasa/enable-support-for-defer
...
Enable support for defer
2017-07-14 08:11:37 +01:00
Achilleas Anagnostopoulos
66d471f442
Defer kernel panic when Kmain returns
2017-07-14 08:05:59 +01:00
Achilleas Anagnostopoulos
ccba8877ce
Enable support for deferred calls
2017-07-14 08:05:54 +01:00
Achilleas Anagnostopoulos
9567f259bd
Set m.curg = g0
2017-07-14 07:45:56 +01:00
Achilleas Anagnostopoulos
bc52b65615
Merge pull request #44 from achilleasa/implement-vesa-fb-console-driver
...
Implement vesa fb console driver with support for bitmap fonts and logos
2017-07-14 06:16:52 +01:00
Achilleas Anagnostopoulos
16ad4c856e
Set framebuffer tag in multiboot header and add vesa grub menu entries
2017-07-13 23:35:20 +01:00
Achilleas Anagnostopoulos
eaeae85600
Implement LogoSetter interface for vesa fb driver
2017-07-13 23:35:20 +01:00
Achilleas Anagnostopoulos
c7fc9f0ac9
Add gopher logos (64, 96 and 128 pixels tall)
...
The gopher images were obtained from: https://github.com/golang-samples/gopher-vector
2017-07-13 23:35:20 +01:00
Achilleas Anagnostopoulos
4af2ed62a0
Display the best-fit logo on logo-capable console devices
...
Logos can be disabled by passing the "consoleLogo=off" boot command line
parameter.
2017-07-13 23:35:20 +01:00
Achilleas Anagnostopoulos
cb7ae66556
Define LogoSetter interface and BestFit selection helper
2017-07-13 23:35:20 +01:00
Achilleas Anagnostopoulos
a5c6828fc2
Create tool for converting images to compatible console logo files
...
The tool processes an image and converts it to a logo.Image struct which
can be assigned to a logo-capable console.
2017-07-13 23:35:20 +01:00
Achilleas Anagnostopoulos
99977294aa
Disable bounds-checking for release builds and use std vga with qemu
...
By passing "-std vga" to qemu we can access all sorts of useful
resolutions for testing the kernel (e.g 2560x1600x32)
2017-07-13 23:35:20 +01:00
Achilleas Anagnostopoulos
540f288e61
Select appropriate font for console devices with font support
...
The hal package automatically selects the best font from the list of
available fonts based on the console dimensions and the font priorities. The font
selection can be overriden by passing the "consoleFont" boot commandline
parameter to the kernel (e.g. consoleFont=terminus8x16)
2017-07-13 23:35:20 +01:00
Achilleas Anagnostopoulos
d71c4c1eea
Add 8x16, 10x18 and 14x28 fonts based on the terminus font
2017-07-13 23:35:20 +01:00
Achilleas Anagnostopoulos
72feb11acb
Document exported symbols
2017-07-13 23:35:20 +01:00
Achilleas Anagnostopoulos
f4f3745073
Extend vesa driver support to 15 and 16bpp framebuffers
2017-07-13 23:35:20 +01:00
Achilleas Anagnostopoulos
f02c767257
Extend vesa driver to support 24 and 32 bpp
2017-07-13 23:35:20 +01:00
Achilleas Anagnostopoulos
13ba4bbbed
Implement vesa console driver for 8bpp framebuffers
2017-07-13 23:35:10 +01:00
Achilleas Anagnostopoulos
cbf0c82702
Change Dimensions() signature to support querying for characters or pixels
2017-07-13 22:06:50 +01:00
Achilleas Anagnostopoulos
952d0bf4a5
Define FontSetter interface, the Font type and helper methods
...
The helper methods provide support for selecting the best-fit font for
the console dimensions and for looking up a font by name.
2017-07-13 22:06:50 +01:00
Achilleas Anagnostopoulos
4e5cee30ba
Merge pull request #43 from achilleasa/setup-granular-pdt-for-kernel
...
Setup granular PDT for kernel
2017-07-13 06:57:01 +01:00
Achilleas Anagnostopoulos
6195f3fc3b
Setup a more granular PDT based on the ELF image section addresses
2017-07-13 06:35:22 +01:00
Achilleas Anagnostopoulos
cc4364f55c
Pass the virtual page offset for the kernel to kernel.Kmain
...
Ths page offset is defined in arch/XXX/constants.inc and needs to be
passed to the kernel so we can correctly calculate the physical frame
addresses that correspond to the ELF section virtual memory addresses.
2017-07-13 00:08:40 +01:00
Achilleas Anagnostopoulos
a2d58f8949
Switch to a visitor-based no-alloc implementation for fetching ELF sections
...
This change is required as the code to create a new PDT should execute
before the Go allocator is bootstrapped.
2017-07-13 00:08:40 +01:00
Achilleas Anagnostopoulos
fdd5611220
Fix bug in the ASM code used to load the PDT to the CR2 register
...
The previous implementation in Go assembly did not translate to the
correct assembly instructions for loading CR2
2017-07-13 00:08:40 +01:00
Achilleas Anagnostopoulos
4e0ad81770
Reload GDT with the descriptor VMA once the CPU switches to 64-bit mode
...
The GDT is initially loaded in the 32-bit rt0 code where we cannot use
the 48-bit VMA for the GDT table and instead we use its physical
address. This approach works as the rt0 code establishes an identity
mapping for the region 0-8M. However, when the kernel creates a more
granular PDT it only includes the VMA addresses for the kernel ELF image
sections making the 0-8M invalid. Unless the GDT is reloaded with the
VMA of the table, the CPU will cause a non-recoverable page fault when
it tries to restore the segment registers while returning from a
recoverable page fault.
2017-07-13 00:08:40 +01:00
Achilleas Anagnostopoulos
9d2e53bac4
Redirect runtime.init to an empty stub
2017-07-13 00:08:35 +01:00
Achilleas Anagnostopoulos
8a0fd0ade4
Merge pull request #42 from achilleasa/parse-additional-multiboot-tags
...
Parse additional multiboot tags
2017-07-10 19:23:44 +01:00
Achilleas Anagnostopoulos
a79be7c268
Support parsing of 64-bit ELF section tags off from the multiboot data
2017-07-10 19:08:28 +01:00
Achilleas Anagnostopoulos
af9613e336
Support extraction of boot cmdline off the multiboot data
2017-07-10 19:05:49 +01:00
Achilleas Anagnostopoulos
5ef344010b
Support parsing of framebuffer color info out of the multiboot data
2017-07-10 19:05:01 +01:00
Achilleas Anagnostopoulos
86609fea06
Merge pull request #40 from achilleasa/map-vga-text-fb
...
Map vga text console framebuffer
2017-07-08 22:25:49 +01:00
Achilleas Anagnostopoulos
13ef4cd08d
Map physical address of the vga text console framebuffer in DriverInit
...
Currently, the kernel can write to 0xb80000 because this is part of the
initial identify mapping set up by the rt0 code. When we establish new
mappings for the kernel using its real VMA address then writes to the
framebuffer will cause a page fault unless we explicitly map it.
2017-07-08 22:18:24 +01:00
Achilleas Anagnostopoulos
8ac2ba82cc
Implement function for mapping a contiguous physical memory region
...
The MapRegion function can be used by device drivers to ensure that they
can access memory mapped by the various devices.
2017-07-08 22:17:34 +01:00
Achilleas Anagnostopoulos
42e6802323
Merge pull request #39 from achilleasa/enhance-hal-output-log
...
Enhance hal output log
2017-07-08 22:15:06 +01:00
Achilleas Anagnostopoulos
1b697fd125
Pass PrefixWriter with driver name and version to DriverInit calls
2017-07-08 22:09:19 +01:00
Achilleas Anagnostopoulos
3485523cdc
Update the Driver.DriverInit method signature to accept an io.Writer
...
Drivers can use the writer as an argument to kfmt.Fprintf to log
additional output during their initialization.
2017-07-08 22:09:19 +01:00
Achilleas Anagnostopoulos
da279cf3ff
Implement PrefixWriter
...
PrefixWriter is a passthrough io.Writer that prepends a prefix to the
beginning of each line.
2017-07-08 22:09:13 +01:00
Achilleas Anagnostopoulos
b1084c1362
Fix broken unit tests
2017-07-08 13:02:15 +01:00
Achilleas Anagnostopoulos
ffb8f86a9c
Each driver should manually register a probe function for use by hal
...
This commit removes the HWProbes() function from the console and tty
packages and replaces it with a global ProbeFuncs slice which is fetched
by the hal package when the hardware autodetection code runs.
Each driver should provide an init() function that appends a probe function
to the global ProbeFuncs slice.
This approach allows us to support conditional compilation of drivers in
the future (e.g. using build tags)
2017-07-08 12:26:40 +01:00
Achilleas Anagnostopoulos
4845f7a4ca
Use uint32 instead of uint16 for TTY coordinates
2017-07-08 12:26:40 +01:00
Achilleas Anagnostopoulos
fd3ca91138
Use uint32 for console coordinates and fix dimension bug
2017-07-08 12:26:40 +01:00
Achilleas Anagnostopoulos
d804b17ed8
Merge pull request #38 from achilleasa/refactor-console-and-tty-drivers
...
Refactor console and tty drivers
2017-07-07 21:44:15 +01:00
Achilleas Anagnostopoulos
562fae2028
Detect hw and wire active console and TTY
2017-07-07 21:37:00 +01:00
Achilleas Anagnostopoulos
eca1f6c26e
Change early.Printf calls to kfmt.Printf
2017-07-07 21:37:00 +01:00
Achilleas Anagnostopoulos
545a18fccc
Support pluggable output sinks for Printf with a ring-buffer fallback
...
The implementation of Printf has been moved from the early package to
the kfmt package. The dependency to ActiveTerminal has been removed and
the code now uses an io.Writer for its output. As Go interfaces cannot
be used before bootstrapping the Go runtime, the code uses a ring-buffer
fallback for storing any kernel output emitted before that point.
2017-07-07 21:37:00 +01:00