Build original Ada port core, V client, and x86-64 boot milestone
This commit is contained in:
1 parent
9af96aa1e1
commit
fc2bee6f32
28 files changed
+865
-7
No files matched your search
@@ -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;
|
||||
Reference in new issue
Block a user