Commit df7e9a26 authored by Julien's avatar Julien
Browse files

Update the VxWorks configuration generator

parent ffe3e41f
-- with Locations;
with Ocarina.ME_AADL;
with Ocarina.ME_AADL.AADL_Instances.Nodes;
with Ocarina.ME_AADL.AADL_Instances.Nutils;
with Ocarina.ME_AADL.AADL_Instances.Entities;
with Ocarina.Backends.XML_Tree.Nodes;
with Ocarina.Backends.XML_Tree.Nutils;
-- with Ocarina.Backends.Vxworks653_Conf.Mapping;
package body Ocarina.Backends.Vxworks653_Conf.Connections is
-- use Locations;
use Ocarina.ME_AADL;
use Ocarina.ME_AADL.AADL_Instances.Nodes;
use Ocarina.ME_AADL.AADL_Instances.Entities;
use Ocarina.Backends.XML_Tree.Nutils;
-- use Ocarina.Backends.Vxworks653_Conf.Mapping;
package AINU renames Ocarina.ME_AADL.AADL_Instances.Nutils;
package XTN renames Ocarina.Backends.XML_Tree.Nodes;
Root_Node : Node_Id := No_Node;
Schedules_Node : Node_Id := No_Node;
procedure Visit_Architecture_Instance (E : Node_Id);
procedure Visit_Component_Instance (E : Node_Id);
procedure Visit_System_Instance (E : Node_Id);
procedure Visit_Process_Instance (E : Node_Id);
procedure Visit_Processor_Instance (E : Node_Id);
procedure Visit_Bus_Instance (E : Node_Id);
procedure Visit_Virtual_Processor_Instance (E : Node_Id);
-----------
-- Visit --
-----------
procedure Visit (E : Node_Id) is
begin
case Kind (E) is
when K_Architecture_Instance =>
Visit_Architecture_Instance (E);
when K_Component_Instance =>
Visit_Component_Instance (E);
when others =>
null;
end case;
end Visit;
---------------------------------
-- Visit_Architecture_Instance --
---------------------------------
procedure Visit_Architecture_Instance (E : Node_Id) is
begin
Root_Node := Root_System (E);
Visit (Root_Node);
end Visit_Architecture_Instance;
------------------------------
-- Visit_Component_Instance --
------------------------------
procedure Visit_Component_Instance (E : Node_Id) is
Category : constant Component_Category := Get_Category_Of_Component (E);
begin
case Category is
when CC_System =>
Visit_System_Instance (E);
when CC_Process =>
Visit_Process_Instance (E);
when CC_Processor =>
Visit_Processor_Instance (E);
when CC_Bus =>
Visit_Bus_Instance (E);
when CC_Virtual_Processor =>
Visit_Virtual_Processor_Instance (E);
when others =>
null;
end case;
end Visit_Component_Instance;
----------------------------
-- Visit_Process_Instance --
----------------------------
procedure Visit_Process_Instance (E : Node_Id) is
S : Node_Id;
begin
if not AINU.Is_Empty (Subcomponents (E)) then
S := First_Node (Subcomponents (E));
while Present (S) loop
-- Visit the component instance corresponding to the
-- subcomponent S.
Visit (Corresponding_Instance (S));
S := Next_Node (S);
end loop;
end if;
end Visit_Process_Instance;
---------------------------
-- Visit_System_Instance --
---------------------------
procedure Visit_System_Instance (E : Node_Id) is
S : Node_Id;
begin
if not AINU.Is_Empty (Subcomponents (E)) then
S := First_Node (Subcomponents (E));
while Present (S) loop
-- Visit the component instance corresponding to the
-- subcomponent S.
if AINU.Is_Processor (Corresponding_Instance (S)) then
Visit (Corresponding_Instance (S));
end if;
S := Next_Node (S);
end loop;
end if;
end Visit_System_Instance;
------------------------
-- Visit_Bus_Instance --
------------------------
procedure Visit_Bus_Instance (E : Node_Id) is
pragma Unreferenced (E);
begin
null;
end Visit_Bus_Instance;
------------------------------
-- Visit_Processor_Instance --
------------------------------
procedure Visit_Processor_Instance (E : Node_Id) is
U : Node_Id;
P : Node_Id;
begin
U := XTN.Unit (Backend_Node (Identifier (E)));
P := XTN.Node (Backend_Node (Identifier (E)));
Push_Entity (P);
Push_Entity (U);
Current_XML_Node := XTN.Root_Node (XTN.XML_File (U));
Schedules_Node := Make_XML_Node ("Connections");
Append_Node_To_List
(Schedules_Node,
XTN.Subitems (Current_XML_Node));
Pop_Entity;
Pop_Entity;
end Visit_Processor_Instance;
--------------------------------------
-- Visit_Virtual_Processor_Instance --
--------------------------------------
procedure Visit_Virtual_Processor_Instance (E : Node_Id) is
pragma Unreferenced (E);
begin
null;
end Visit_Virtual_Processor_Instance;
end Ocarina.Backends.Vxworks653_Conf.Connections;
package Ocarina.Backends.Vxworks653_Conf.Connections is
procedure Visit (E : Node_Id);
end Ocarina.Backends.Vxworks653_Conf.Connections;
with Ada.Strings; use Ada.Strings;
with Ada.Strings.Fixed; use Ada.Strings.Fixed;
with Ocarina.Namet; use Ocarina.Namet;
-- with Locations;
......@@ -23,6 +22,7 @@ package body Ocarina.Backends.Vxworks653_Conf.Hm is
-- use Ocarina.Backends.Properties;
-- use Ocarina.Backends.Vxworks653_Conf.Mapping;
package AIN renames Ocarina.ME_AADL.AADL_Instances.Nodes;
package AINU renames Ocarina.ME_AADL.AADL_Instances.Nutils;
package XTN renames Ocarina.Backends.XML_Tree.Nodes;
package XTU renames Ocarina.Backends.XML_Tree.Nutils;
......@@ -44,8 +44,13 @@ package body Ocarina.Backends.Vxworks653_Conf.Hm is
procedure Add_Error_Action (XML_Node : Node_Id;
Identifier : String;
Level : String;
Action : String);
pragma Unreferenced (Add_System_Error);
function Generate_Partition_HM_Table
(Virtual_Processor : Node_Id) return Node_Id;
-----------
-- Visit --
-----------
......@@ -173,14 +178,12 @@ package body Ocarina.Backends.Vxworks653_Conf.Hm is
procedure Add_Error_Action (XML_Node : Node_Id;
Identifier : String;
Level : String;
Action : String) is
Intermediate : Node_Id;
begin
Intermediate := Make_XML_Node ("ErrorAction");
XTU.Add_Attribute ("ErrorIdentifierRef", Identifier, Intermediate);
XTU.Add_Attribute ("ErrorLevel", Level, Intermediate);
XTU.Add_Attribute ("ModuleRecoveryAction", Action, Intermediate);
Intermediate := Make_XML_Node ("ErrorIDAction");
XTU.Add_Attribute ("ErrorIdentifier", Identifier, Intermediate);
XTU.Add_Attribute ("ErrorAction", Action, Intermediate);
Append_Node_To_List
(Intermediate, XTN.Subitems (XML_Node));
end Add_Error_Action;
......@@ -193,10 +196,11 @@ package body Ocarina.Backends.Vxworks653_Conf.Hm is
S : Node_Id;
U : Node_Id;
P : Node_Id;
System_Errors : Node_Id;
Multi_Partition_HM : Node_Id;
Partition_HM : Node_Id;
Partition_Identifier : Unsigned_Long_Long;
System_HM_Table_Node : Node_Id;
Module_HM_Table_Node : Node_Id;
System_State_Node : Node_Id;
Error_Id_Level_Node : Node_Id;
Settings_Node : Node_Id;
begin
U := XTN.Unit (Backend_Node (Identifier (E)));
P := XTN.Node (Backend_Node (Identifier (E)));
......@@ -206,56 +210,128 @@ package body Ocarina.Backends.Vxworks653_Conf.Hm is
Current_XML_Node := XTN.Root_Node (XTN.XML_File (U));
Partition_Identifier := 1;
--
-- For now, just generate the default HM policy.
--
HM_Node := Make_XML_Node ("HealthMonitoring");
Append_Node_To_List
(HM_Node,
XTN.Subitems (Current_XML_Node));
System_Errors := Make_XML_Node ("SystemErrors");
Append_Node_To_List
(System_Errors,
XTN.Subitems (HM_Node));
Add_System_Error (System_Errors, "1", "processorSpecific");
Add_System_Error (System_Errors, "2", "floatingPoint");
Add_System_Error (System_Errors, "3", "accessViolation");
Add_System_Error (System_Errors, "4", "powerTransient");
Add_System_Error (System_Errors, "5", "platformSpecific");
Add_System_Error (System_Errors, "6", "frameResync");
Add_System_Error (System_Errors, "7", "deadlineMissed");
Add_System_Error (System_Errors, "8", "applicationError");
Add_System_Error (System_Errors, "9", "illegalRequest");
Add_System_Error (System_Errors, "10", "stackOverflow");
--
-- The MultiPartitionHM
--
Multi_Partition_HM := Make_XML_Node ("MultiPartitionHM");
XTU.Add_Attribute ("TableIdentifier", "1", Multi_Partition_HM);
XTU.Add_Attribute ("TableName",
"default MultiPartitionHM",
Multi_Partition_HM);
Append_Node_To_List
(Multi_Partition_HM,
XTN.Subitems (HM_Node));
Add_Error_Action (Multi_Partition_HM, "1", "MODULE", "IGNORE");
Add_Error_Action (Multi_Partition_HM, "2", "MODULE", "IGNORE");
Add_Error_Action (Multi_Partition_HM, "3", "MODULE", "IGNORE");
Add_Error_Action (Multi_Partition_HM, "4", "MODULE", "IGNORE");
Add_Error_Action (Multi_Partition_HM, "5", "MODULE", "IGNORE");
Add_Error_Action (Multi_Partition_HM, "6", "MODULE", "IGNORE");
Add_Error_Action (Multi_Partition_HM, "7", "MODULE", "IGNORE");
Add_Error_Action (Multi_Partition_HM, "8", "MODULE", "IGNORE");
Add_Error_Action (Multi_Partition_HM, "9", "MODULE", "IGNORE");
Add_Error_Action (Multi_Partition_HM, "10", "MODULE", "IGNORE");
HM_Node := Make_XML_Node ("HealthMonitor");
Append_Node_To_List (HM_Node, XTN.Subitems (Current_XML_Node));
-- Building the SystemHMTable first.
System_HM_Table_Node := Make_XML_Node ("SystemHMTable");
XTU.Add_Attribute ("Name", "systemHm", System_HM_Table_Node);
Append_Node_To_List (System_HM_Table_Node, XTN.Subitems (HM_Node));
System_State_Node := Make_XML_Node ("SystemState");
XTU.Add_Attribute ("SystemState",
"HM_PARTITION_MODE",
System_State_Node);
Append_Node_To_List (System_State_Node,
XTN.Subitems (System_HM_Table_Node));
Error_Id_Level_Node := Make_XML_Node ("ErrorIDLevel");
XTU.Add_Attribute ("ErrorIdentifier",
"HME_DEFAULT",
System_State_Node);
XTU.Add_Attribute ("ErrorLevel",
"HM_PARTITION_LVL",
System_State_Node);
Append_Node_To_List (Error_Id_Level_Node,
XTN.Subitems (System_State_Node));
System_State_Node := Make_XML_Node ("SystemState");
XTU.Add_Attribute ("SystemState",
"HM_MODULE_MODE",
System_State_Node);
Append_Node_To_List (System_State_Node,
XTN.Subitems (System_HM_Table_Node));
Error_Id_Level_Node := Make_XML_Node ("ErrorIDLevel");
XTU.Add_Attribute ("ErrorIdentifier",
"HME_DEFAULT",
System_State_Node);
XTU.Add_Attribute ("ErrorLevel",
"HM_MODULE_LVL",
System_State_Node);
Append_Node_To_List (Error_Id_Level_Node,
XTN.Subitems (System_State_Node));
System_State_Node := Make_XML_Node ("SystemState");
XTU.Add_Attribute ("SystemState",
"HM_PROCESS_MODE",
System_State_Node);
Append_Node_To_List (System_State_Node,
XTN.Subitems (System_HM_Table_Node));
Error_Id_Level_Node := Make_XML_Node ("ErrorIDLevel");
XTU.Add_Attribute ("ErrorIdentifier",
"HME_DEFAULT", System_State_Node);
XTU.Add_Attribute ("ErrorLevel",
"HM_PROCESS_LVL", System_State_Node);
Append_Node_To_List (Error_Id_Level_Node,
XTN.Subitems (System_State_Node));
-- Building the ModuleHMTable then.
Module_HM_Table_Node := Make_XML_Node ("ModuleHMTable");
XTU.Add_Attribute ("Name", "moduleHm", Module_HM_Table_Node);
Append_Node_To_List (Module_HM_Table_Node, XTN.Subitems (HM_Node));
Settings_Node := Make_XML_Node ("Settings");
XTU.Add_Attribute ("maxQueueDepth", "34", Settings_Node);
XTU.Add_Attribute ("queueThreShold", "32", Settings_Node);
XTU.Add_Attribute ("stackSize", "16384", Settings_Node);
XTU.Add_Attribute ("maxLogEntries", "100", Settings_Node);
XTU.Add_Attribute ("logEntriesThreshold", "98", Settings_Node);
XTU.Add_Attribute ("attributeMask", "0x00000001", Settings_Node);
XTU.Add_Attribute ("notificationHandler", "", Settings_Node);
XTU.Add_Attribute ("notifMaxQueueDepth", "0", Settings_Node);
XTU.Add_Attribute ("eventFilterMask", "0x00000000", Settings_Node);
XTU.Add_Attribute ("maxErrorHandlerQueueDepth", "0", Settings_Node);
XTU.Add_Attribute ("errorHandlerQueueThreshold", "0", Settings_Node);
Append_Node_To_List (Settings_Node, XTN.Subitems (Module_HM_Table_Node));
System_State_Node := Make_XML_Node ("SystemState");
Append_Node_To_List (System_State_Node,
XTN.Subitems (Module_HM_Table_Node));
Add_Error_Action (System_State_Node,
"HME_UNKNOWN", "hmDefaultHandler");
Add_Error_Action (System_State_Node,
"HME_NUMERIC_ERROR", "");
Add_Error_Action (System_State_Node,
"HME_POWER_FAIL", "hmDH_HME_POWER_FAILT");
Add_Error_Action (System_State_Node,
"HME_KERNEL", "hmDH_HME_KERNEL");
Add_Error_Action (System_State_Node,
"HME_CONFIG_ERROR", "hmDH_EventLog");
Add_Error_Action (System_State_Node,
"HME_INIT_ERROR", "hmDH_HME_INIT_ERROR");
Add_Error_Action (System_State_Node,
"HME_PARTITION_OVERFLOW", "hmDefaultHandler");
Add_Error_Action (System_State_Node,
"HME_PARTITION_MODE_SET",
"hmDH_HME_PARTITION_MODE_SET");
Add_Error_Action (System_State_Node,
"HME_APEX_INTERNAL_ERROR", "hmDefaultHandler");
Add_Error_Action (System_State_Node,
"HME_HM_INTERNAL_ERROR", "hmDefaultHandler");
Add_Error_Action (System_State_Node,
"HME_PORT_INTERNAL_ERROR", "hmDefaultHandler");
Add_Error_Action (System_State_Node,
"HME_LOST_TICKS", "hmDH_HME_LOST_TICKS");
Add_Error_Action (System_State_Node,
"HME_HM_ERROR", "hmDefaultHandler");
Add_Error_Action (System_State_Node,
"HME_HMQ_OVERFLOW", "hmDefaultHandler");
Add_Error_Action (System_State_Node,
"HME_DATA_LOSS", "");
Add_Error_Action (System_State_Node,
"HME_HM_DEADLINE_MISSED", "hmDefaultHandler");
Add_Error_Action (System_State_Node,
"HME_HM_MSG", "hmDH_EventLog");
Add_Error_Action (System_State_Node,
"HME_DEFAULT", "hmDefaultHandler");
if not AINU.Is_Empty (Subcomponents (E)) then
S := First_Node (Subcomponents (E));
......@@ -264,30 +340,9 @@ package body Ocarina.Backends.Vxworks653_Conf.Hm is
-- subcomponent S.
if AINU.Is_Virtual_Processor (Corresponding_Instance (S)) then
Visit (Corresponding_Instance (S));
--
-- The PartitionHM
--
Partition_HM := Make_XML_Node ("PartitionHM");
Append_Node_To_List
(Partition_HM,
(Generate_Partition_HM_Table (Corresponding_Instance (S)),
XTN.Subitems (HM_Node));
XTU.Add_Attribute ("TableIdentifier",
Trim (Unsigned_Long_Long'Image
(Partition_Identifier), Left),
Partition_HM);
XTU.Add_Attribute ("TableName",
"Unique name for partition " &
Trim (Unsigned_Long_Long'Image
(Partition_Identifier), Left),
Partition_HM);
XTU.Add_Attribute ("MultiPartitionHMTableNameRef",
"default MultiPartitionHM",
Partition_HM);
Partition_Identifier := Partition_Identifier + 1;
end if;
S := Next_Node (S);
end loop;
......@@ -314,4 +369,94 @@ package body Ocarina.Backends.Vxworks653_Conf.Hm is
end if;
end Visit_Virtual_Processor_Instance;
---------------------------------
-- Generate_Partition_HM_Table --
---------------------------------
function Generate_Partition_HM_Table
(Virtual_Processor : Node_Id)
return Node_Id is
Partition_HM_Table_Node : Node_Id;
System_State_Node : Node_Id;
Settings_Node : Node_Id;
Trusted_Partition_Node : Node_Id;
begin
Partition_HM_Table_Node := Make_XML_Node ("PartitionHMTable");
XTU.Add_Attribute ("Name",
Get_Name_String
(AIN.Name
(Identifier
(Parent_Subcomponent
(Virtual_Processor)))),
Partition_HM_Table_Node);
Settings_Node := Make_XML_Node ("Settings");
XTU.Add_Attribute ("maxQueueDepth", "34", Settings_Node);
XTU.Add_Attribute ("queueThreShold", "32", Settings_Node);
XTU.Add_Attribute ("stackSize", "16384", Settings_Node);
XTU.Add_Attribute ("maxLogEntries", "100", Settings_Node);
XTU.Add_Attribute ("logEntriesThreshold", "98", Settings_Node);
XTU.Add_Attribute ("attributeMask", "0x00000001", Settings_Node);
XTU.Add_Attribute ("notificationHandler", "", Settings_Node);
XTU.Add_Attribute ("notifMaxQueueDepth", "0", Settings_Node);
XTU.Add_Attribute ("eventFilterMask", "0xFFFFFFFF", Settings_Node);
XTU.Add_Attribute ("maxErrorHandlerQueueDepth", "128", Settings_Node);
XTU.Add_Attribute ("errorHandlerQueueThreshold", "126", Settings_Node);
Append_Node_To_List (Settings_Node,
XTN.Subitems (Partition_HM_Table_Node));
Trusted_Partition_Node := Make_XML_Node ("TrustedPartition");
XTU.Add_Attribute ("NameRef",
Get_Name_String
(AIN.Name
(Identifier
(Parent_Subcomponent
(Virtual_Processor)))),
Settings_Node);
Append_Node_To_List (Trusted_Partition_Node,
XTN.Subitems (Settings_Node));
System_State_Node := Make_XML_Node ("SystemState");
Append_Node_To_List (System_State_Node,
XTN.Subitems (Partition_HM_Table_Node));
Add_Error_Action (System_State_Node,
"HME_UNKNOWN", "hmDefaultHandler");
Add_Error_Action (System_State_Node,
"HME_NUMERIC_ERROR", "");
Add_Error_Action (System_State_Node,
"HME_POWER_FAIL", "hmDH_HME_POWER_FAILT");
Add_Error_Action (System_State_Node,
"HME_KERNEL", "hmDH_HME_KERNEL");
Add_Error_Action (System_State_Node,
"HME_CONFIG_ERROR", "hmDH_EventLog");
Add_Error_Action (System_State_Node,
"HME_INIT_ERROR", "hmDH_HME_INIT_ERROR");
Add_Error_Action (System_State_Node,
"HME_PARTITION_OVERFLOW", "hmDefaultHandler");
Add_Error_Action (System_State_Node,
"HME_PARTITION_MODE_SET",
"hmDH_HME_PARTITION_MODE_SET");
Add_Error_Action (System_State_Node,
"HME_APEX_INTERNAL_ERROR", "hmDefaultHandler");
Add_Error_Action (System_State_Node,
"HME_HM_INTERNAL_ERROR", "hmDefaultHandler");
Add_Error_Action (System_State_Node,
"HME_PORT_INTERNAL_ERROR", "hmDefaultHandler");
Add_Error_Action (System_State_Node,
"HME_LOST_TICKS", "hmDH_HME_LOST_TICKS");
Add_Error_Action (System_State_Node,
"HME_HM_ERROR", "hmDefaultHandler");
Add_Error_Action (System_State_Node,
"HME_HMQ_OVERFLOW", "hmDefaultHandler");
Add_Error_Action (System_State_Node,
"HME_DATA_LOSS", "");
Add_Error_Action (System_State_Node,
"HME_HM_DEADLINE_MISSED", "hmDefaultHandler");
Add_Error_Action (System_State_Node,
"HME_HM_MSG", "hmDH_EventLog");
Add_Error_Action (System_State_Node,
"HME_DEFAULT", "hmDefaultHandler");
return Partition_HM_Table_Node;
end Generate_Partition_HM_Table;
end Ocarina.Backends.Vxworks653_Conf.Hm;
-- with Locations;
with Ocarina.ME_AADL;
with Ocarina.ME_AADL.AADL_Instances.Nodes;
with Ocarina.ME_AADL.AADL_Instances.Nutils;
with Ocarina.ME_AADL.AADL_Instances.Entities;
with Ocarina.Backends.XML_Tree.Nodes;
with Ocarina.Backends.XML_Tree.Nutils;
-- with Ocarina.Backends.Vxworks653_Conf.Mapping;
package body Ocarina.Backends.Vxworks653_Conf.Payloads is
-- use Locations;
use Ocarina.ME_AADL;
use Ocarina.ME_AADL.AADL_Instances.Nodes;
use Ocarina.ME_AADL.AADL_Instances.Entities;
use Ocarina.Backends.XML_Tree.Nutils;
-- use Ocarina.Backends.Properties;
-- use Ocarina.Backends.Vxworks653_Conf.Mapping;
package AINU renames Ocarina.ME_AADL.AADL_Instances.Nutils;
package XTN renames Ocarina.Backends.XML_Tree.Nodes;
Root_Node : Node_Id := No_Node;
procedure Visit_Architecture_Instance (E : Node_Id);
procedure Visit_Component_Instance (E : Node_Id);
procedure Visit_System_Instance (E : Node_Id);
procedure Visit_Process_Instance (E : Node_Id);
procedure Visit_Processor_Instance (E : Node_Id);
procedure Visit_Bus_Instance (E : Node_Id);
procedure Visit_Virtual_Processor_Instance (E : Node_Id);
-----------
-- Visit --
-----------
procedure Visit (E : Node_Id) is
begin
case Kind (E) is
when K_Architecture_Instance =>
Visit_Architecture_Instance (E);
when K_Component_Instance =>