Achilleas Anagnostopoulos
1d5d1dc3ec
acpi: implement VM entity lookup and visit wrappers
2017-12-04 06:35:26 +00:00
Achilleas Anagnostopoulos
64f3dae485
acpi: define VM type and structs to maintain execution state
2017-12-04 06:35:26 +00:00
Achilleas Anagnostopoulos
692155b44b
acpi: refine post-parse entity processing rules
...
This commit updates the post-parse step so that:
- the visitor not longer recurses into method bodies. Since code inside
methods may potentially generate dynamic/scoped entities or even use
conditional invocations (if CondRefOf(X) { X(...) }), symbol resolution
will be deferred to the AML interpreter.
- parent-child relationships between entities are checked and updated if
not properly specified
2017-12-03 10:54:21 +00:00
Achilleas Anagnostopoulos
70c798f40a
acpi: add pre-process step to capture arg counts for all function decls
...
Since the ACPI standard allows forward function declarations this step
is required so we can properly parse the argument list for function
invocations. Contrary to other AML entities, method invocations do not
include any sort of pkgLength information so unless we track the
expected argument count for each function, our parser will not be able
to figure out where the argument list ends.
2017-12-03 10:21:40 +00:00
Achilleas Anagnostopoulos
7983394390
acpi: implement resolver interface for methodInvocation entities
2017-12-03 10:17:41 +00:00
Achilleas Anagnostopoulos
0a05164703
acpi: change scopeVisit to visit entities in a visited entity's arglist
2017-12-01 08:01:17 +00:00
Achilleas Anagnostopoulos
d9bd6f104e
acpi: fix linter warnings for unhandled errors in AML parser
2017-11-27 07:15:11 +00:00
Achilleas Anagnostopoulos
61a033e2ad
acpi: tweak parser and add tests for parser errors
2017-09-30 16:40:53 +01:00
Achilleas Anagnostopoulos
d020045887
acpi: tag entities with the handle of the table that defines them
...
This allows us to implement the Unload opcode which given a handle,
removes all entities that are tagged by it.
2017-09-30 16:36:26 +01:00
Achilleas Anagnostopoulos
2a84c75d8e
acpi: implement AML parser for all AML opcodes in the ACPI 6.2 spec
2017-09-30 16:36:22 +01:00
Achilleas Anagnostopoulos
4dd7c0b077
acpi: implement functions for working with AML scopes
...
The scope resolution rules are specified in page 252 of the ACPI 6.2
spec.
2017-09-30 16:25:34 +01:00
Achilleas Anagnostopoulos
130e11507c
acpi: define structs for basic AML entities
2017-09-30 16:25:29 +01:00
Achilleas Anagnostopoulos
5171822ba6
acpi: define mappings and helpers for AML opcodes
2017-09-30 14:08:55 +01:00
Achilleas Anagnostopoulos
93125caa8a
acpi: implement memory-based reader for AML byte-code streams
2017-09-30 13:45:30 +01:00
Achilleas Anagnostopoulos
7d959af0a9
acpi: import and register ACPI driver with hal
2017-08-28 07:28:31 +01:00
Achilleas Anagnostopoulos
78d5fac550
acpi: probe for RSDT and enumerate/map other ACPI tables (inc. DSDT)
2017-08-28 07:28:31 +01:00
Achilleas Anagnostopoulos
49dfc5c9de
acpi: define structs for standard header and various ACPI tables
2017-08-28 07:28:27 +01:00
Achilleas Anagnostopoulos
7bcaf0ee8d
vmm: implement identity mapping function for contiguous physical mem regions
...
vmm.IdentityMapRegion can be used by device drivers that want to
establish an identity mapping for a contiguous physical memory block in
order to access some hardware or table.
2017-08-28 07:28:04 +01:00
Achilleas Anagnostopoulos
0a271b206b
pmm: implement FrameFromAddress
...
This is equivalent to vmm.PageFromAddress but returns back a pmm.Frame
2017-08-28 07:28:04 +01:00
Achilleas Anagnostopoulos
d17298acaa
vga_text: Map EGA color indices to correct DAC entries for the VGA hw
2017-08-19 10:33:38 +01:00
Achilleas Anagnostopoulos
b53912757c
Refactor hal code to use preferred driver detection order
2017-07-18 08:27:50 +01:00
Achilleas Anagnostopoulos
1ef27b3226
Update device drivers to use the device.RegisterDriver
2017-07-18 08:26:56 +01:00
Achilleas Anagnostopoulos
d180348116
Define DriverInfo and registration helpers
2017-07-18 08:23:43 +01: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
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
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
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
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
9d2e53bac4
Redirect runtime.init to an empty stub
2017-07-13 00:08:35 +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
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
1b697fd125
Pass PrefixWriter with driver name and version to DriverInit calls
2017-07-08 22:09:19 +01:00