Sockeye: Start implementation of net builder
[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.Map(Map)
19
20 {-
21 Nodes are identfied by a namespace and a name
22 -}
23 data NodeId = NodeId
24     { namespace :: [String]
25     , name      :: !String
26     } deriving (Eq, Ord, Show)
27
28 {-
29 Addresses are natural numbers
30 -}
31 newtype Addr = Addr Word
32   deriving (Eq, Ord, Show)
33
34 {-
35 A block is a contigous set of addresses
36 -}
37 data BlockSpec = BlockSpec
38     { base  :: Addr
39     , limit :: Addr
40     } deriving (Eq, Ord, Show)
41
42 {-
43 A mapping of a source address block to a destination node
44 at a base address
45 -}
46 data MapSpec = MapSpec
47     { srcBlock :: BlockSpec
48     , destNode :: NodeId
49     , destBase :: Addr
50     } deriving (Show)
51
52 {-
53 Node can either be memory, device or other
54 -}
55 data NodeType
56     = Memory
57     | Device
58     | Other
59
60 instance Show NodeType where
61     show Memory = "memory"
62     show Device = "device"
63     show Other  = "other"
64
65 {-
66 A node is specified as a list of blocks it accepts,
67 a list of mappings and possibly an overlay on another block
68 -}
69 data NodeSpec = NodeSpec
70     { nodeType  :: NodeType
71     , accept    :: [BlockSpec]
72     , translate :: [MapSpec]
73     , overlay   :: Maybe NodeId
74     } deriving (Show)
75
76 {-
77 A decoding net is specified as a list 
78 of Node IDs mapped to Nodes
79 -}
80 newtype NetSpec = NetSpec (Map NodeId NodeSpec)
81     deriving (Show)