1-- 2-- Copyright 2014, General Dynamics C4 Systems 3-- 4-- This software may be distributed and modified according to the terms of 5-- the GNU General Public License version 2. Note that NO WARRANTY is provided. 6-- See "LICENSE_GPLv2.txt" for details. 7-- 8-- @TAG(GD_GPL) 9-- 10 11{-# LANGUAGE EmptyDataDecls, ForeignFunctionInterface, GeneralizedNewtypeDeriving #-} 12 13module SEL4.Machine.Hardware.ARM.Callbacks where 14 15import Prelude hiding (Word) 16import SEL4.Machine.RegisterSet 17import Foreign.Ptr 18import Data.Bits 19import Data.Word(Word8) 20 21 22data CallbackData 23 24type MachineData = Ptr CallbackData 25 26newtype PAddr = PAddr { fromPAddr :: Word } 27 deriving (Integral, Real, Show, Eq, Num, Bits, FiniteBits, Ord, Enum, Bounded) 28 29plusPtr :: PAddr -> Int -> PAddr 30plusPtr a b = a + (fromIntegral b) 31 32foreign import ccall unsafe "qemu_load_word_phys" 33 loadWordCallback :: Ptr CallbackData -> PAddr -> IO Word 34 35foreign import ccall unsafe "qemu_store_word_phys" 36 storeWordCallback :: Ptr CallbackData -> PAddr -> Word -> IO () 37 38foreign import ccall unsafe "qemu_tlb_flush" 39 invalidateLocalTLBCallback :: Ptr CallbackData -> IO () 40 41foreign import ccall unsafe "qemu_tlb_flush_asid" 42 invalidateLocalTLB_ASIDCallback :: Ptr CallbackData -> Word8 -> IO () 43 44foreign import ccall unsafe "qemu_tlb_flush_vptr" 45 invalidateLocalTLB_VAASIDCallback :: Ptr CallbackData -> Word -> IO () 46 47foreign import ccall unsafe "qemu_set_asid" 48 setHardwareASID :: Ptr CallbackData -> Word8 -> IO () 49 50-- FIXME qemu_set_root is still expecting the pointer, not its mangled 51-- word version, per haskell-kernel-emulator/interface/callbacks.c 52foreign import ccall unsafe "qemu_set_root" 53 writeTTBR0 :: Ptr CallbackData -> Word -> IO () 54 55foreign import ccall unsafe "qemu_arm_get_ifsr" 56 getIFSR :: Ptr CallbackData -> IO Word 57 58foreign import ccall unsafe "qemu_arm_get_dfsr" 59 getDFSR :: Ptr CallbackData -> IO Word 60 61foreign import ccall unsafe "qemu_arm_get_far" 62 getFAR :: Ptr CallbackData -> IO VPtr 63 64