Sockeye: Add possibility to add reserved blocks
[barrelfish] / tools / sockeye / SockeyeAST.hs
index 066c45a..535ddf3 100644 (file)
@@ -16,7 +16,6 @@
 module SockeyeAST where
 
 import Data.Map (Map)
-import Data.Set (Set)
 
 newtype SockeyeSpec = SockeyeSpec
     { modules :: Map String Module }
@@ -41,7 +40,14 @@ instance Show ModuleParamType where
     show AddressParam = "addr"
 
 data Port
-    = Port Identifier
+    = InputPort 
+        { portId    :: Identifier
+        , portWidth :: !Integer
+        }
+    | OutputPort
+        { portId    :: Identifier
+        , portWidth :: !Integer
+        }
     | MultiPort (For Port)
     deriving (Show)
 
@@ -57,8 +63,8 @@ data ModuleInst
     deriving (Show)
 
 data ModuleArg
-    = AddressArg !Word
-    | NaturalArg !Word
+    = AddressArg !Integer
+    | NaturalArg !Integer
     | ParamArg !String
     deriving (Show)
 
@@ -91,7 +97,8 @@ data NodeSpec = NodeSpec
     { nodeType  :: Maybe NodeType
     , accept    :: [BlockSpec]
     , translate :: [MapSpec]
-    , overlay   :: Maybe Identifier
+    , reserved  :: [BlockSpec]
+    , overlay   :: Maybe OverlaySpec
     } deriving (Show)
 
 data NodeType
@@ -108,7 +115,7 @@ data BlockSpec
         }
     | LengthBlock
         { base :: Address
-        , bits :: !Word
+        , bits :: !Integer
         }
     deriving (Show)
 
@@ -119,8 +126,14 @@ data MapSpec
         , destBase :: Maybe Address
         } deriving (Show)
 
+data OverlaySpec
+    = OverlaySpec
+        { over  :: Identifier
+        , width :: !Integer
+        } deriving (Show)
+
 data Address
-    = LiteralAddress !Word
+    = LiteralAddress !Integer
     | ParamAddress !String
     deriving (Show)
 
@@ -137,6 +150,6 @@ data ForRange
     } deriving (Show)
 
 data ForLimit 
-    = LiteralLimit !Word
+    = LiteralLimit !Integer
     | ParamLimit !String
     deriving (Show)