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