| -- |
| -- 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 |