Build original Ada port core, V client, and x86-64 boot milestone

This commit is contained in:
Admin committed 2026-11-01 16:07:00 +08:00
1 parent 9af96aa1e1
commit fc2bee6f32
28 files changed
+865 -7

No files matched your search

+43
View File
@@ -0,0 +1,43 @@
with Interfaces;
package Agila_Ports is
-- Original Open Agila implementation. Host identity values are supplied by
-- trusted callers; a future syscall boundary must derive identity itself.
subtype Word is Interfaces.Unsigned_32;
Max_Ports : constant := 8;
Queue_Capacity : constant := 4;
type Status is (Ok, Invalid_Handle, Permission_Denied, Full, Empty,
Exhausted, Invalid_Argument);
type Message is record
Sender : Word := 0;
Value : Word := 0;
end record;
type Manager is limited private;
procedure Create (State : in out Manager; Owner : Word;
Handle : out Word; Result : out Status);
procedure Allow_Sender (State : in out Manager; Handle, Owner, Sender : Word;
Result : out Status);
procedure Revoke_Sender (State : in out Manager; Handle, Owner, Sender : Word;
Result : out Status);
procedure Send (State : in out Manager; Handle, Caller, Value : Word;
Result : out Status);
procedure Receive (State : in out Manager; Handle, Caller : Word;
Item : out Message; Result : out Status);
procedure Close (State : in out Manager; Handle, Caller : Word;
Result : out Status);
private
type Messages is array (Natural range 0 .. Queue_Capacity - 1) of Message;
type Port is record
Active : Boolean := False;
Retired : Boolean := False;
Generation : Word := 1;
Owner : Word := 0;
Allowed_Sender : Word := 0;
Head : Natural range 0 .. Queue_Capacity - 1 := 0;
Count : Natural range 0 .. Queue_Capacity := 0;
Queue : Messages := [others => (0, 0)];
end record;
type Ports is array (Natural range 0 .. Max_Ports - 1) of Port;
type Manager is limited record
Table : Ports;
end record;
end Agila_Ports;