Drew Galbraith
0ec2fa3e76
[glacier] Move Pair to glacier.
2023-06-21 20:47:40 -07:00
Drew Galbraith
c2dfe17363
[zion] Use ErrorOr in PciConfiguration
2023-06-21 18:46:06 -07:00
Drew Galbraith
0b86a94f14
Migrate to error constants in glacier
2023-06-21 18:28:54 -07:00
Drew Galbraith
3ab9b4d818
[zion] Move Channel and Port blocked threads to IntrusiveList.
2023-06-21 16:34:30 -07:00
Drew Galbraith
a99096b0ff
[zion] Move the scheduler to the IntrusiveList for runnable threads
2023-06-21 16:28:42 -07:00
Drew Galbraith
e1af79b975
[zion/glacier] Move RefPtr to glacier.
2023-06-21 15:07:40 -07:00
Drew Galbraith
8bcb574677
[zion/glacier] Move RefCounted to glacier.
2023-06-21 14:52:40 -07:00
Drew Galbraith
56eae3d4e5
[zion/glacier] Move SharedPtr to glacier
2023-06-21 14:48:29 -07:00
Drew Galbraith
f3443cf4de
[zion] Link against glacier as a POC
2023-06-21 14:42:37 -07:00
Drew Galbraith
172bf51db7
[zion] Move capability validation to capability.h
2023-06-20 15:50:49 -07:00
Drew Galbraith
93cf8f2740
[zion] Cleanup syscall entrance.
2023-06-20 15:40:21 -07:00
Drew Galbraith
d60b2bdc61
[zion] Move channel to use the message queue.
2023-06-20 15:36:17 -07:00
Drew Galbraith
fe1641ac38
[zion] Create a message queue to be shared between the port and channel
2023-06-20 15:29:32 -07:00
Drew Galbraith
1edd5023ce
[zion] Move the final syscalls to the new format.
2023-06-20 15:03:33 -07:00
Drew Galbraith
bd431b94ce
[zion] Move port calls to new syscall process.
2023-06-20 14:55:54 -07:00
Drew Galbraith
77bb3acfb4
[zion] Move channel syscalls to new format.
2023-06-20 14:41:44 -07:00
Drew Galbraith
1a70ce4855
[zion] Move memory syscalls to the new format
2023-06-20 14:26:06 -07:00
Drew Galbraith
f755cd38fe
[zion] Move thread syscalls to the new format.
2023-06-20 14:10:28 -07:00
Drew Galbraith
c6dd0bbb0f
[zion] Migrate process syscalls to new format.
2023-06-20 14:01:43 -07:00
Drew Galbraith
76107b7db7
[zion] Handle syscall cases by macro as well.
2023-06-20 13:50:18 -07:00
Drew Galbraith
5fc7296b20
[zion] POC for defining syscalls using macros
2023-06-20 13:43:12 -07:00
Drew Galbraith
4fef54084f
[zion] Remove legacy capability method.
2023-06-19 23:48:06 -07:00
Drew Galbraith
164309eada
[zion] Add utility to zero out a page when allocating one.
2023-06-19 23:44:33 -07:00
Drew Galbraith
0b9e0adfbb
[zion] Remove legacy capability table method.
2023-06-19 23:32:49 -07:00
Drew Galbraith
1cebe547c0
[zion] Allow the sleep thread to be preempted.
...
We can't yield it when the next thread is unblocked for now because it
may still be holding a lock that the prempted thread is waiting on.
2023-06-19 21:47:37 -07:00
Drew Galbraith
27f540e9ae
Move ipc calls to take a void*
2023-06-19 18:39:46 -07:00
Drew Galbraith
685070d65e
Get rid of the type field on zmessage
2023-06-17 02:01:21 -07:00
Drew Galbraith
7bd6aa42b0
[zion] Declare z_cap_t and start replacing existing types
2023-06-17 01:53:19 -07:00
Drew Galbraith
5e99dbf7d1
Refactor all Zion decls into one header
2023-06-17 01:45:53 -07:00
Drew Galbraith
7dcbbd671e
[denali] Get all caps from the init port.
...
This allows us to remove the bootstrap capabilities for good woo hoo!
2023-06-17 01:30:47 -07:00
Drew Galbraith
6e86ce67f0
[zion] Fix capability permission issues
2023-06-17 01:24:07 -07:00
Drew Galbraith
424b032146
[zion] Remove old debug messages
2023-06-17 01:09:48 -07:00
Drew Galbraith
bbc31a0d2b
[zion] Return proper code from PortCreate
2023-06-17 01:05:51 -07:00
Drew Galbraith
857b7fae03
[zion] Add a port send syscall
2023-06-17 01:05:10 -07:00
Drew Galbraith
cc191cd6bb
[zion] Add a syscall to duplicate capabilities
2023-06-17 00:59:44 -07:00
Drew Galbraith
378ced6b6c
[zion] Add a port create syscall
2023-06-17 00:31:02 -07:00
Drew Galbraith
09ac87e6f5
[yellowstone] Recieve all caps via init port.
2023-06-17 00:17:43 -07:00
Drew Galbraith
2ea1f90690
[zion] Add a direct port write for the kernel
2023-06-17 00:07:58 -07:00
Drew Galbraith
0a909eae0e
Print exit codes in hex
2023-06-17 00:03:09 -07:00
Drew Galbraith
528723e490
[mammoth] Create a method for getting initial caps.
2023-06-16 23:51:49 -07:00
Drew Galbraith
35f24e7c77
Add a Port poll operation
2023-06-16 23:15:28 -07:00
Drew Galbraith
21b73b5b92
[zion] [yellowstone] Pass the denali VMMO by port as a POC.
...
Preparing to bootsrap via port write rather than hard coding capability
ids.
2023-06-16 15:58:50 -07:00
Drew Galbraith
75b1f2d21c
[zion] Store capability ids on the CapabilityTable.
...
This is preferable to storing it in the capability itself since the id
is really just an index for the containing process.
2023-06-16 15:27:09 -07:00
Drew Galbraith
b27672d5de
[zion] Update LinkedList iterator semantics.
2023-06-16 15:24:38 -07:00
Drew Galbraith
242a18ae3c
[zion] Finish cleaning up process capability interface.
...
Make all functions generic and specify existing/vs new cap.
2023-06-16 15:09:15 -07:00
Drew Galbraith
fc94bc5bf5
[zion] Update process interface to simplify capability insertion.
...
Take a templated KernelObject with explicit permissions.
2023-06-16 15:04:33 -07:00
Drew Galbraith
a47bac9966
[zion] Dynamically check Capability type.
...
Instead of passing an enum with the capability when creating it, relying
on polymorphism and a template struct tag to determine the object type
at runtime.
This is cleaner and avoids errors where we pass the wrong capability
type with the cap and do a bad cast at runtime.
2023-06-16 14:53:57 -07:00
Drew Galbraith
b4902a79ef
[zion] Add per-process CapabilityTable object
...
Store this information in it's own object to make the API clearer.
2023-06-16 14:25:54 -07:00
Drew Galbraith
be12fa9a19
Add mutex fixme
2023-06-16 14:25:23 -07:00
Drew Galbraith
4e328c2f7a
Set RSP0 on context switch
...
Previously we only set it on thread init which caused interrupts to
stomp on the stack of the most recently started thread, potentially
overwriting their cr3 and other variables and causing a crash.
2023-06-16 01:52:59 -07:00
Drew Galbraith
71e51730b7
Mark unblocked threads as runnable before enqueueing them
2023-06-16 01:29:00 -07:00
Drew Galbraith
ffa2d97a64
First iteration of denali server
2023-06-15 16:20:29 -07:00
Drew Galbraith
b8b6576b7f
Cleanup AHCI Ident a bit and reduce logging
2023-06-12 23:32:24 -07:00
Drew Galbraith
72885190e9
Resolved page faults from user stacks
2023-06-12 23:28:23 -07:00
Drew Galbraith
6986f534f8
Add a method for blocking threads on ports.
...
Additionally add the first lock class since we are becoming more
concurrent.
2023-06-12 20:56:25 -07:00
Drew Galbraith
b6735d3175
[zion] Fix an over-allocation bug when creating a memory object
2023-06-12 20:55:53 -07:00
Drew Galbraith
0f0e39d1e9
Further parse AHCI information.
...
Send an IDENTIFY command to each drive and set up a hook to handle
interrupts.
2023-06-12 19:20:51 -07:00
Drew Galbraith
4e1888bd24
Set eflags properly for jump to userspace
2023-06-12 19:20:42 -07:00
Drew Galbraith
8ac5366882
[zion] Add ability to dump MADT (APIC) tables
2023-06-12 19:17:00 -07:00
Drew Galbraith
c35cef65fe
Don't mistakenly mask interrupts in user space
2023-06-12 19:01:09 -07:00
Drew Galbraith
30bb10207e
Add the Denali disk driver.
...
Begin enumerating information from the PCI structure and HBA AHCI
structures.
Currently the PCI structure address is hardcoded but it should be
passed via a capability from the init process in the future.
2023-06-08 02:36:59 -07:00
Drew Galbraith
47e3d11060
Add a syscall for creating a physical memory VMO
2023-06-08 02:36:47 -07:00
Drew Galbraith
56789400d7
Allow mapping the PCI Config so Yellowstone can map it.
...
This is a temp system call. Evemtually we should probably supply the
root process with all of the system physical memory objects.
2023-06-07 22:45:42 -07:00
Drew Galbraith
bd32e85164
Fix race condition in page fault handler.
...
We enabled interrupts before getting the value of cr2 in the handler.
If the handler was preempted, cr2 could have been overriden by a page
fault in a separate thread or process.
2023-06-07 22:24:50 -07:00
Drew Galbraith
3e1e37bf03
Probe RSDP for PCIe Config
2023-06-07 16:24:13 -07:00
Drew Galbraith
4bd7f972c1
Add additional physical memory logging
2023-06-07 16:22:39 -07:00
Drew Galbraith
53ff49b265
Add preprocessor directives to supress logs per file.
...
Makes the output much cleaner by default but allows for getting more
infor if debugging in the future.
2023-06-07 13:51:13 -07:00
Drew Galbraith
add533071b
Use APIC for interrupts rather than PIC.
...
Still rely on the PIT for now rather than the local APIC timer.
2023-06-07 13:40:36 -07:00
Drew Galbraith
7c9d1075eb
Move sys/test to Yellowstone init process.
2023-06-07 11:18:35 -07:00
Drew Galbraith
eb04242a59
Add a debug mode for the KernelHeap.
2023-06-07 10:01:22 -07:00
Drew Galbraith
40b21d9c75
[Mammoth] Add Channel object for simple IPC messages
2023-06-07 09:37:16 -07:00
Drew Galbraith
a5c4d40575
Refactor error types and error reporting
2023-06-07 08:51:23 -07:00
Drew Galbraith
81b925eea0
Add a basic IPC setup with Channel Object.
...
Pass a process a channel endpoint on startup that it will use to
get it's initial capabilities.
2023-06-07 08:24:10 -07:00
Drew Galbraith
b79ec07636
Return Z_OK on all syscall paths
2023-06-07 07:15:25 -07:00
Drew Galbraith
55340e2917
Make Capability RefCounted
2023-06-07 06:21:36 -07:00
Drew Galbraith
6c10c57bfa
Mass rename memory object variables.
...
Use shorthand:
AddressSpace -> vmas
MemoryObject -> vmmo
The VM prefix makes these a little more distinguishable in code.
2023-06-07 00:30:26 -07:00
Drew Galbraith
e246f28d9c
Get the second process elf from a MemoryObject instead of hardcoding.
...
Allows us to delete the CopyIntoNonResidentProcess function and simply
rely on the MemoryObject copy functions.
2023-06-07 00:19:15 -07:00
Drew Galbraith
eb454300e6
Move elf loader into the init loader in the kernel
2023-06-07 00:08:21 -07:00
Drew Galbraith
23895b5c6c
Spawn Processes using memory primitives rather than and elf loader.
...
This allows us to remove the temporary syscall for that style of process
spawn.
2023-06-07 00:04:53 -07:00
Drew Galbraith
b06c76e477
Create a MemoryObject class and use it to load programs.
2023-06-06 21:44:10 -07:00
Drew Galbraith
1fda0f3fae
Move VirtualMemory to AddressSpace Object
2023-06-06 20:43:15 -07:00
Drew Galbraith
b5ad454ad1
Move Process & Thread to the object folder.
2023-06-06 20:18:53 -07:00
Drew Galbraith
4e278a4664
Make a KernelObject base class for all Capabilities.
2023-06-06 20:13:07 -07:00
Drew Galbraith
d358c1d672
Move process be to RefCounted
2023-06-06 19:12:46 -07:00
Drew Galbraith
2e1357255c
Create a RefCounted type and use it for Thread.
...
This should prevent me from actually creating 2 shared ptrs of
a single kernel object with their separate ref counts.
2023-06-06 19:05:03 -07:00
Drew Galbraith
d9b17d96d7
Cleanup Thread constructor
2023-06-06 18:40:32 -07:00
Drew Galbraith
b0c2a6732b
Always create threads in CREATED state.
...
Simplify the process class to have threads marked as runnable
separately.
2023-06-06 16:27:25 -07:00
Drew Galbraith
ef8eb5d993
Add a threading syscall API.
2023-06-06 16:24:03 -07:00
Drew Galbraith
e2aad55a8a
Only dump bootloader modules once.
2023-06-06 15:04:34 -07:00
Drew Galbraith
a092a57483
Begin defining the process/thread api
2023-06-06 15:01:31 -07:00
Drew Galbraith
69b5cd001f
Add a skeleton framework for capabilities.
...
Use the first capability to spawn a child process.
2023-05-30 23:55:42 -07:00
Drew Galbraith
09b8136ef9
Fix formatting on panic
2023-05-30 23:52:50 -07:00
Drew Galbraith
9e3df0ccd0
Add pid/tid to all log messages
2023-05-30 23:22:29 -07:00
Drew Galbraith
2eefda6114
add a class to allocate and manage user space stacks
2023-05-30 22:35:57 -07:00
Drew Galbraith
1db93e5b12
Move PML4 initialization into the VirtualMemory class.
2023-05-30 21:39:19 -07:00
Drew Galbraith
f22dd66c8d
Manage KernelStacks separately rather than just allocing bytes.
...
Create a global KernelStackManager that will handle the relevant allocs.
2023-05-30 21:28:44 -07:00
Drew Galbraith
3c3341a90f
Add a process spawn syscall and use it to start a proc.
...
Also add a skeleton VirtualMemory manager to be used per process.
2023-05-30 20:55:03 -07:00
Drew Galbraith
5bcf1f4e4a
Add a second process to be loaded by the bootloader.
2023-05-30 20:54:37 -07:00
Drew Galbraith
b9b45c5e45
Add the ability to copy memory to non resident process.
...
Use/Test this by loading the user space elf from the kernel process
before it starts rather than as a part of the first thread.
This simplifies thread start a fair bit.
2023-05-30 01:27:47 -07:00
Drew Galbraith
f6609983d2
Move away from using recursive mapping for page tables.
...
Having the HHDM-based mapping allows us to more easily map data into
non-resident processes.
2023-05-30 01:06:01 -07:00