Commit Graph

208 Commits

Author SHA1 Message Date
Drew Galbraith d99624daf6 [zion] Move to using the LAPIC timer over the PIT. 2023-08-01 20:18:47 -07:00
Drew Galbraith f0add6e0c3 [zion] Enforce cap transmit permissions in more places. 2023-08-01 18:43:48 -07:00
Drew Galbraith 4e9ad6a516 [zion] Begin requiring capability transmit permission.
As a first pass require the permission when passing a capability to a
new process.
2023-08-01 18:37:20 -07:00
Drew Galbraith f0a27d30be [zion] Enfore Duplication permissions on capabilities. 2023-08-01 18:30:24 -07:00
Drew Galbraith 1364fbed9f [zion] Move to default permissions being supplied by KernelObjects 2023-08-01 18:22:41 -07:00
Drew Galbraith 48c6e5b3a4 [zion] Add a method for duplicating and scoping down VMMOs.
Use the AHCI section of the PCI config as an example POC of this.

We can now pass a memory capability instead of just the physical
address.
2023-08-01 17:46:26 -07:00
Drew Galbraith 8f84f8c3ca [zion] Remove temp PCI Memory Object create function.
Pass the PCI memory space to the yellowstone init process instead.
2023-08-01 17:13:19 -07:00
Drew Galbraith 847d37addc [zion] Add info about APIC mapping 2023-08-01 11:19:48 -07:00
Drew Galbraith 3110087498 [zion] Don't dump process states on sleep 2023-08-01 10:42:53 -07:00
Drew Galbraith 02e6b49d90 [glacier] Add a vector class 2023-06-26 15:46:03 -07:00
Drew Galbraith 64d355b20d [glacier] Move LinkedList to glacier. 2023-06-26 15:01:55 -07:00
Drew Galbraith 7f2530bc15 [zion] Rename cmake zion_lib to zion_stub. 2023-06-26 11:57:19 -07:00
Drew Galbraith 36d82370c1 [zion] Add a thread wait syscall 2023-06-22 02:17:50 -07:00
Drew Galbraith f0e8ce14a4 [victoria] Create and start VictoriaFalls process 2023-06-22 00:22:59 -07:00
Drew Galbraith dc63084d61 [zion] Move synchronization to the message queue 2023-06-21 23:57:23 -07:00
Drew Galbraith 9dd457391c [zion] Move IPC objects to share code 2023-06-21 23:47:45 -07:00
Drew Galbraith 58df2c0ed2 [zion] Move ipc syscalls to one file to prep refactor 2023-06-21 23:20:56 -07:00
Drew Galbraith c064af5fa7 Endpoint syscalls implemented 2023-06-21 23:14:42 -07:00
Drew Galbraith 69501bfe01 [all] Add stub for new Endpoint kernel object 2023-06-21 21:43:27 -07:00
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