{-# LINE 1 "src/Foreign/CUDA/Driver/Context/Primary.chs" #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE TemplateHaskell #-}
module Foreign.CUDA.Driver.Context.Primary (
status, setup, reset, retain, release,
) where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp
{-# LINE 26 "src/Foreign/CUDA/Driver/Context/Primary.chs" #-}
import Foreign.CUDA.Driver.Context.Base
import Foreign.CUDA.Driver.Device
import Foreign.CUDA.Driver.Error
import Foreign.CUDA.Internal.C2HS
import Control.Exception
import Control.Monad
import Foreign
import Foreign.C
{-# INLINEABLE status #-}
status :: Device -> IO (Bool, [ContextFlag])
status !dev =
cuDevicePrimaryCtxGetState dev >>= \(rv, !flags, !active) ->
case rv of
Success -> return (active, flags)
_ -> throwIO (ExitCode rv)
cuDevicePrimaryCtxGetState :: (Device) -> IO ((Status), ([ContextFlag]), (Bool))
cuDevicePrimaryCtxGetState a1 =
let {a1' = useDevice a1} in
alloca $ \a2' ->
alloca $ \a3' ->
cuDevicePrimaryCtxGetState'_ a1' a2' a3' >>= \res ->
let {res' = cToEnum res} in
peekFlags a2'>>= \a2'' ->
peekBool a3'>>= \a3'' ->
return (res', a2'', a3'')
{-# LINE 69 "src/Foreign/CUDA/Driver/Context/Primary.chs" #-}
where
peekFlags = liftM extractBitMasks . peek
{-# INLINEABLE setup #-}
setup :: Device -> [ContextFlag] -> IO ()
setup !dev !flags = nothingIfOk =<< cuDevicePrimaryCtxSetFlags dev flags
{-# INLINE cuDevicePrimaryCtxSetFlags #-}
cuDevicePrimaryCtxSetFlags :: (Device) -> ([ContextFlag]) -> IO ((Status))
cuDevicePrimaryCtxSetFlags a1 a2 =
let {a1' = useDevice a1} in
let {a2' = combineBitMasks a2} in
cuDevicePrimaryCtxSetFlags'_ a1' a2' >>= \res ->
let {res' = cToEnum res} in
return (res')
{-# LINE 95 "src/Foreign/CUDA/Driver/Context/Primary.chs" #-}
{-# INLINEABLE reset #-}
reset :: Device -> IO ()
reset !dev = nothingIfOk =<< cuDevicePrimaryCtxReset dev
{-# INLINE cuDevicePrimaryCtxReset #-}
cuDevicePrimaryCtxReset :: (Device) -> IO ((Status))
cuDevicePrimaryCtxReset a1 =
let {a1' = useDevice a1} in
cuDevicePrimaryCtxReset'_ a1' >>= \res ->
let {res' = cToEnum res} in
return (res')
{-# LINE 116 "src/Foreign/CUDA/Driver/Context/Primary.chs" #-}
{-# INLINEABLE release #-}
release :: Device -> IO ()
release !dev = nothingIfOk =<< cuDevicePrimaryCtxRelease dev
{-# INLINE cuDevicePrimaryCtxRelease #-}
cuDevicePrimaryCtxRelease :: (Device) -> IO ((Status))
cuDevicePrimaryCtxRelease a1 =
let {a1' = useDevice a1} in
cuDevicePrimaryCtxRelease'_ a1' >>= \res ->
let {res' = cToEnum res} in
return (res')
{-# LINE 141 "src/Foreign/CUDA/Driver/Context/Primary.chs" #-}
{-# INLINEABLE retain #-}
retain :: Device -> IO Context
retain !dev = resultIfOk =<< cuDevicePrimaryCtxRetain dev
{-# INLINE cuDevicePrimaryCtxRetain #-}
cuDevicePrimaryCtxRetain :: (Device) -> IO ((Status), (Context))
cuDevicePrimaryCtxRetain a2 =
alloca $ \a1' ->
let {a2' = useDevice a2} in
cuDevicePrimaryCtxRetain'_ a1' a2' >>= \res ->
let {res' = cToEnum res} in
peekCtx a1'>>= \a1'' ->
return (res', a1'')
{-# LINE 166 "src/Foreign/CUDA/Driver/Context/Primary.chs" #-}
where
peekCtx = liftM Context . peek
foreign import ccall unsafe "Foreign/CUDA/Driver/Context/Primary.chs.h cuDevicePrimaryCtxGetState"
cuDevicePrimaryCtxGetState'_ :: (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CUInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt))))
foreign import ccall unsafe "Foreign/CUDA/Driver/Context/Primary.chs.h cuDevicePrimaryCtxSetFlags"
cuDevicePrimaryCtxSetFlags'_ :: (C2HSImp.CInt -> (C2HSImp.CUInt -> (IO C2HSImp.CInt)))
foreign import ccall unsafe "Foreign/CUDA/Driver/Context/Primary.chs.h cuDevicePrimaryCtxReset"
cuDevicePrimaryCtxReset'_ :: (C2HSImp.CInt -> (IO C2HSImp.CInt))
foreign import ccall unsafe "Foreign/CUDA/Driver/Context/Primary.chs.h cuDevicePrimaryCtxRelease"
cuDevicePrimaryCtxRelease'_ :: (C2HSImp.CInt -> (IO C2HSImp.CInt))
foreign import ccall unsafe "Foreign/CUDA/Driver/Context/Primary.chs.h cuDevicePrimaryCtxRetain"
cuDevicePrimaryCtxRetain'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (C2HSImp.CInt -> (IO C2HSImp.CInt)))