Sockeye: Implement port mappings
[barrelfish] / tools / sockeye / SockeyeASTDecodingNet.hs
1 {-
2   SockeyeASTDecodingNet.hs: Decoding net AST for Sockeye
3
4   Part of Sockeye
5
6   Copyright (c) 2017, ETH Zurich.
7
8   All rights reserved.
9
10   This file is distributed under the terms in the attached LICENSE file.
11   If you do not find this file, copies can be found by writing to:
12   ETH Zurich D-INFK, CAB F.78, Universitaetstr. 6, CH-8092 Zurich,
13   Attn: Systems Group.
14 -}
15
16 module SockeyeASTDecodingNet where
17
18 import Data.List (intercalate)
19 import Data.Map (Map)
20
21 newtype NetSpec =
22     NetSpec
23         { net :: Map NodeId NodeSpec }
24     deriving (Show)
25
26 data NodeId = NodeId
27     { namespace :: Namespace
28     , name      :: !String
29     } deriving (Eq, Ord)
30
31 instance Show NodeId where
32     show (NodeId namespace name) = 
33         case ns namespace of
34             [] -> name
35             _  -> concat [show namespace, ".", name]
36
37 newtype Namespace = Namespace
38     { ns :: [String] }
39     deriving (Eq, Ord)
40
41 instance Show Namespace where
42     show (Namespace ns) = intercalate "." $ ns
43
44 data NodeSpec
45     = NodeSpec
46         { nodeType  :: NodeType
47         , accept    :: [BlockSpec]
48         , translate :: [MapSpec]
49         , overlay   :: Maybe NodeId
50         }
51     deriving (Show)
52
53 data NodeType
54     = Memory
55     | Device
56     | Other
57     deriving (Show)
58
59 data BlockSpec = BlockSpec
60     { base  :: Address
61     , limit :: Address
62     } deriving (Show)
63
64 data MapSpec = MapSpec
65     { srcBlock :: BlockSpec
66     , destNode :: NodeId
67     , destBase :: Address
68     } deriving (Show)
69
70 newtype Address =
71     Address
72         { address :: Word }
73     deriving (Show)