| -- | |
| -- Copyright 2020, Data61, CSIRO (ABN 41 687 119 230) | |
| -- | |
| -- SPDX-License-Identifier: BSD-2-Clause | |
| -- | |
| {-# LANGUAGE DeriveDataTypeable #-} | |
| module CapDL.AST where | |
| import CapDL.Model | |
| import Prelude () | |
| import Prelude.Compat | |
| import Data.Data | |
| import Data.Word | |
| -- AST | |
| type Name = String | |
| type QName = [NameRef] | |
| data Range = Only Word | |
| | FromTo Word Word | |
| | From Word | |
| | To Word | |
| | All | |
| deriving (Show, Eq, Ord, Typeable, Data) | |
| type NameRef = (Name, [Range]) | |
| data CNodeExtraParam = | |
| HasUntyped { | |
| has_untyped :: Bool } | |
| deriving (Show, Eq, Ord, Typeable, Data) | |
| data TCBExtraParam = | |
| Addr { | |
| addr :: Word } | |
| | IP { | |
| ip :: Word } | |
| | SP { | |
| sp :: Word } | |
| | Prio { | |
| prio :: Integer } | |
| | MaxPrio { | |
| max_prio :: Integer } | |
| | Affinity { | |
| affinity :: Integer } | |
| | Resume { | |
| resume :: Bool } | |
| deriving (Show, Eq, Ord, Typeable, Data) | |
| data FrameExtraParam = | |
| Fill { fill :: [[String]] } | |
| deriving (Show, Eq, Ord, Typeable, Data) | |
| data SCExtraParam = | |
| Period { | |
| period :: Word64 } | |
| | Budget { | |
| budget :: Word64 } | |
| | SCData { | |
| scData :: Word } | |
| deriving (Show, Eq, Ord, Typeable, Data) | |
| data CBExtraParam = | |
| CBNumber { | |
| cbNumber :: Word } | |
| deriving (Eq, Show, Ord, Typeable, Data) | |
| data IOAPICIRQExtraParam = | |
| IOAPIC { | |
| ioapic :: Word } | |
| | Pin { | |
| pin :: Word } | |
| | Level { | |
| ioapic_level :: Word } | |
| | Polarity { | |
| polarity :: Word } | |
| deriving (Show, Eq, Ord, Typeable, Data) | |
| data MSIIRQExtraParam = | |
| MSIHandle { | |
| handle :: Word } | |
| | MSIPCIBus { | |
| bus :: Word } | |
| | MSIPCIDev { | |
| dev :: Word } | |
| | MSIPCIFun { | |
| fun :: Word } | |
| deriving (Show, Eq, Ord, Typeable, Data) | |
| data ARMIRQExtraParam = | |
| ARMIRQTrigger { | |
| trigger :: Word } | |
| | ARMIRQTarget { | |
| target_core :: Word } | |
| deriving (Show, Eq, Ord, Typeable, Data) | |
| data ObjParam = | |
| BitSize { | |
| bits :: Word } | |
| | VMSize { | |
| vmSize :: Word } | |
| | IOPTLevel { | |
| level :: Word } | |
| | Paddr { | |
| paddr :: Word } | |
| | CNodeExtraParam { | |
| cnode_extraParam :: CNodeExtraParam } | |
| | TCBExtraParam { | |
| extraParam :: TCBExtraParam } | |
| | FrameExtraParam { | |
| frameExtraParam :: FrameExtraParam} | |
| | SCExtraParam { | |
| sc_extraParam :: SCExtraParam } | |
| | CBExtraParam { | |
| cb_extraParam :: CBExtraParam } | |
| | IOAPICIRQExtraParam { | |
| ioapic_irq_extraParam :: IOAPICIRQExtraParam } | |
| | MSIIRQExtraParam { | |
| msi_irq_extraParam :: MSIIRQExtraParam } | |
| | ARMIRQExtraParam { | |
| arm_irq_extraParam :: ARMIRQExtraParam } | |
| | InitArguments { | |
| arguments :: [Word] } | |
| | DomainID { | |
| domainID :: Word } | |
| | ARMIOSpace { | |
| armiospace :: Word } | |
| | PCIDevice { | |
| pciDevice :: (Word, Word, Word) } | |
| | Dom { | |
| dom :: Integer } | |
| | FaultEP { | |
| faulEP :: Word } | |
| | Ports { | |
| theRange :: (Word, Word) } | |
| | AsidHigh { | |
| asidHigh :: Word } | |
| deriving (Show, Eq, Ord, Typeable, Data) | |
| data KO = Obj { | |
| koType :: KOType, | |
| params :: [ObjParam], | |
| objDecls :: [Either KODecl NameRef] | |
| } deriving (Show, Eq) | |
| -- obj and slot or declared name | |
| type SlotRef = Either (NameRef, Word) NameRef | |
| data CapParam | |
| = Rights { | |
| rights :: CapRights } | |
| | Masked { | |
| rights :: CapRights } | |
| | Guard { | |
| guard :: Word } | |
| | GuardSize { | |
| guardSize :: Word } | |
| | IRQRef | |
| | Badge { | |
| theBadge :: Word } | |
| | Core { | |
| theCore :: Word } | |
| | Reply | |
| | MasterReply | |
| | Asid { | |
| asid :: Asid } | |
| | Cached { | |
| cached :: Bool } | |
| | FrameMapping { | |
| container :: NameRef, | |
| slotIndex :: Word } | |
| deriving (Show, Eq, Ord, Typeable, Data) | |
| data CapMapping | |
| = CapMapping { | |
| slot :: Maybe Word, | |
| capName :: Maybe NameRef, | |
| objRef :: NameRef, | |
| capParams :: [CapParam], | |
| maybeParent :: Maybe SlotRef | |
| } | |
| | CopyOf { | |
| slot :: Maybe Word, | |
| capName :: Maybe NameRef, | |
| target :: NameRef, | |
| copyParams :: [CapParam], | |
| maybeParent :: Maybe SlotRef | |
| } | |
| | IRQMapping { | |
| slot :: Maybe Word, | |
| objRef :: NameRef | |
| } | |
| | ASIDMapping { | |
| slot :: Maybe Word, | |
| objRef :: NameRef | |
| } | |
| deriving Show | |
| data KODecl = KODecl { | |
| objName :: QName, | |
| object :: KO | |
| } deriving (Show, Eq) | |
| data Decl | |
| = ObjDecl { | |
| theKODecl :: KODecl } | |
| | CapDecl { | |
| nameRef :: NameRef, | |
| mappings :: [CapMapping] } | |
| | CapNameDecl { | |
| declCapName :: Name, | |
| declObjRef :: NameRef, | |
| declSlot :: Word } | |
| | IRQDecl { | |
| irqs :: [CapMapping] } | |
| | ASIDDecl { | |
| asids :: [CapMapping] } | |
| | CDTDecl { | |
| parentRef :: SlotRef, | |
| children :: [Either Decl SlotRef] } | |
| deriving Show | |
| data Module = Module { | |
| theArch :: Arch, | |
| decls :: [Decl] | |
| } deriving Show |