guestrendering/guestvideodriver/ldd/src/virtualvideohwinterface.cpp
branchbug235_bringup_0
changeset 2 e8ccf068ac7f
parent 1 d8d95053303a
child 3 ccf5191a9db1
--- a/guestrendering/guestvideodriver/ldd/src/virtualvideohwinterface.cpp	Fri Aug 20 18:02:40 2010 +0100
+++ b/guestrendering/guestvideodriver/ldd/src/virtualvideohwinterface.cpp	Wed Aug 25 17:57:53 2010 +0100
@@ -1,267 +1,267 @@
-/*
- * =============================================================================
- *  Name        : virtualvideohwinterface.cpp
- *  Part of     : 
- *  Description : Implementation file for the class DVirtualVideoHwInterface.
- *  Version     : %version:3 %
- *
- *  Copyright © 2002-2009 Nokia. All rights reserved.
- *  This material, including documentation and any related
- *  computer programs, is protected by copyright controlled by
- *  Nokia. All rights are reserved. Copying, including
- *  reproducing, storing, adapting or translating, any
- *  or all of this material requires the prior written consent of
- *  Nokia. This material also contains confidential
- *  information which may not be disclosed to others without the
- *  prior written consent of Nokia.
- * =============================================================================
- */
-
-
-// INCLUDE FILES
-#include <platform.h>
-#include <kern_priv.h>
-
-#include "virtualvideointerfaceconstants.h"
-#include "virtualvideohwinterface.h"
-#include "virtualvideotracing.h"
-
-
-// CONSTANTS
-
-_LIT( KVirtualVideoHwInterfacePanic, "DVirtualVideoHwInterface" );
-
-// ============================ LOCAL DATA TYPES ===============================
-
-// Register offsets for playback and recording channels
-// Note: The orders of these must match the order of enumarations
-const TLinAddr KRegisterOffsets[] =
-    {
-    VVI_R_ID,
-    VVI_R_IRQ_ENABLE,
-    VVI_R_IRQ_STATUS,
-    VVI_R_COMMAND,
-    VVI_R_PARAMETER_LOAD,
-    VVI_R_ERROR,
-    VVI_R_INPUT_BUFFER_TAIL,
-    VVI_R_INPUT_BUFFER_HEAD,
-    VVI_R_INPUT_BUFFER_READ_COUNT,
-    VVI_R_INPUT_BUFFER_WRITE_COUNT,
-    VVI_R_INPUT_BUFFER_MAX_TAIL,
-    VVI_R_REQUEST_ID
-    };
-#define ASSERT_PANIC(c,p) __ASSERT_DEBUG(c,Kern::PanicCurrentThread(KVirtualVideoHwInterfacePanic,p));
-
-// ============================ LOCAL FUNCTIONS ================================
-
-// Get register offset for certain register range and register
-inline TLinAddr RegisterOffset( DVirtualVideoHwInterface::TRegister aRegister )
-    {
-    return KRegisterOffsets[aRegister];
-    }
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// DVirtualVideoHwInterface::DVirtualVideoHwInterface
-// -----------------------------------------------------------------------------
-//
-DVirtualVideoHwInterface::DVirtualVideoHwInterface()
-    {
-    iInputParametersMemoryChunk = NULL;
-    iOutputParametersMemoryChunk = NULL;
-    iRegisterMemoryChunk = NULL;
-    }
-
-
-// -----------------------------------------------------------------------------
-// DVirtualVideoHwInterface::~DVirtualVideoHwInterface
-// -----------------------------------------------------------------------------
-//
-DVirtualVideoHwInterface::~DVirtualVideoHwInterface()
-    {
-    // Enter critical section
-    NKern::ThreadEnterCS();
-
-    if ( iInputParametersMemoryChunk )
-        {
-        Kern::ChunkClose( iInputParametersMemoryChunk );
-        }
-
-    if ( iOutputParametersMemoryChunk )
-        {
-        Kern::ChunkClose( iOutputParametersMemoryChunk );
-        }
-
-    if ( iRegisterMemoryChunk )
-        {
-        Kern::ChunkClose( iRegisterMemoryChunk );
-        }
-
-    iInputParametersMemoryChunk = NULL;
-    iOutputParametersMemoryChunk = NULL;
-    iRegisterMemoryChunk = NULL;
-
-    // Leave critical section
-    NKern::ThreadLeaveCS();
-    }
-
-TInt DVirtualVideoHwInterface::InitParametersInputMemory()
-    {
-    return InitPhysicalMemory( VVI_PARAMETERS_INPUT_BASE_ADDRESS, 
-            VVI_PARAMETERS_INPUT_MEMORY_SIZE, iInputParametersMemoryChunk, 
-            iInputParametersChunkKernelAddress );    
-    }
-
-TInt DVirtualVideoHwInterface::InitParametersOutputMemory()
-    {
-    return InitPhysicalMemory( VVI_PARAMETERS_OUTPUT_BASE_ADDRESS, 
-            VVI_PARAMETERS_OUTPUT_MEMORY_SIZE, iOutputParametersMemoryChunk, 
-            iOutputParametersChunkKernelAddress );    
-    }
-
-TInt DVirtualVideoHwInterface::InitRegisterMemory()
-    {
-    return InitPhysicalMemory( VVI_REGISTERS_BASE_ADDRESS, 
-            VVI_REGISTERS_MEMORY_SIZE, iRegisterMemoryChunk, 
-            iRegisterChunkKernelAddress );        
-    }
-
-// -----------------------------------------------------------------------------
-// DVirtualVideoHwInterface::InitPhysicalMemory
-// -----------------------------------------------------------------------------
-//
-TInt DVirtualVideoHwInterface::InitPhysicalMemory( TUint32 aPhysicalAddress, 
-        TInt aMaxSize, DChunk*& aChunk, TLinAddr& aLinAddr )
-    {
-    TInt error = KErrNoMemory;
-    TChunkCreateInfo info;
-    info.iType = TChunkCreateInfo::ESharedKernelSingle;
-    info.iMaxSize = aMaxSize;
-	info.iMapAttr = EMapAttrFullyBlocking;
-    info.iOwnsMemory = EFalse;
-    info.iDestroyedDfc = NULL;
-    DChunk* chunk = NULL;
-    TUint32 mapAttr = 0;
-    TLinAddr chunkKernelAddress = 0;
-    
-    // Enter critical section while creating the chunk and commiting memory
-    NKern::ThreadEnterCS();
-
-    error = Kern::ChunkCreate( info, chunk, chunkKernelAddress, mapAttr );
-    if ( !error )
-        {
-        error = Kern::ChunkCommitPhysical(
-            chunk, 0, aMaxSize, aPhysicalAddress );
-        if ( error )
-            {
-            Kern::ChunkClose( chunk );
-            }
-        else
-            {
-            // Physical memory has been successfully committed to chunk
-            aChunk = chunk; 
-            aLinAddr = chunkKernelAddress;
-            }
-        }
-    chunk = NULL;
-
-    // Leave critical section
-    NKern::ThreadLeaveCS();
-    
-    VVHW_TRACE("DVirtualVideoHwInterface::InitPhysicalMemory return %d", error);
-    return error;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// DVirtualVideoHwInterface::EnableInterrupts
-// -----------------------------------------------------------------------------
-//
-void DVirtualVideoHwInterface::EnableInterrupts( TUint32 aInterruptBitField )
-    {
-    SetRegisterValue( ERegIrqEnable, aInterruptBitField );
-    }
-
-
-// -----------------------------------------------------------------------------
-// DVirtualVideoHwInterface::GetInterruptEnabledState
-// -----------------------------------------------------------------------------
-//
-void DVirtualVideoHwInterface::GetInterruptEnabledState( TUint32& aInterruptBitField )
-    {
-    GetRegisterValue( ERegIrqEnable, aInterruptBitField );
-    }
-
-
-// -----------------------------------------------------------------------------
-// DVirtualVideoHwInterface::GetInterruptStatus
-// -----------------------------------------------------------------------------
-//
-void DVirtualVideoHwInterface::GetInterruptStatus( TUint32& aInterruptBitField )
-    {
-    GetRegisterValue( ERegIrqStatus, aInterruptBitField );
-    }
-
-
-// -----------------------------------------------------------------------------
-// DVirtualVideoHwInterface::ResetInterruptStatus
-// -----------------------------------------------------------------------------
-//
-void DVirtualVideoHwInterface::ResetInterruptStatus( TUint32 aInterruptBitField )
-    {
-    SetRegisterValue( ERegIrqStatus, aInterruptBitField );
-    }
-
-
-// DVirtualVideoHwInterface::IssueCommand
-// -----------------------------------------------------------------------------
-//
-void DVirtualVideoHwInterface::IssueCommand( TUint32 aCommand )
-    {
-    SetRegisterValue( ERegCommand, aCommand );
-    }
-
-// -----------------------------------------------------------------------------
-// DVirtualVideoHwInterface::GetRegisterValue
-// -----------------------------------------------------------------------------
-//
-void DVirtualVideoHwInterface::GetRegisterValue(
-    TRegister aRegister,
-    TUint32& aValue )
-    {
-    if ( iRegisterMemoryChunk )
-        {
-        TLinAddr offset = RegisterOffset( aRegister );
-        TUint32* ptr = reinterpret_cast<TUint32*>( iRegisterChunkKernelAddress + offset );
-        aValue = *ptr;
-        }
-    else
-        {
-        Kern::PanicCurrentThread( KVirtualVideoHwInterfacePanic, KErrNotReady );
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// DVirtualVideoHwInterface::SetRegisterValue
-// -----------------------------------------------------------------------------
-//
-void DVirtualVideoHwInterface::SetRegisterValue(
-    TRegister aRegister,
-    TUint32 aValue )
-    {
-    if ( iRegisterMemoryChunk )
-        {
-        TLinAddr offset = RegisterOffset( aRegister );
-        TUint32* ptr = reinterpret_cast<TUint32*>( iRegisterChunkKernelAddress + offset );
-        *ptr = aValue;
-        }
-    else
-        {
-        Kern::PanicCurrentThread( KVirtualVideoHwInterfacePanic, KErrNotReady );
-        }
-    }
-
-
-// End of file
+/*
+ * =============================================================================
+ *  Name        : virtualvideohwinterface.cpp
+ *  Part of     : 
+ *  Description : Implementation file for the class DVirtualVideoHwInterface.
+ *  Version     : %version:3 %
+ *
+ *  Copyright © 2002-2009 Nokia. All rights reserved.
+ *  This material, including documentation and any related
+ *  computer programs, is protected by copyright controlled by
+ *  Nokia. All rights are reserved. Copying, including
+ *  reproducing, storing, adapting or translating, any
+ *  or all of this material requires the prior written consent of
+ *  Nokia. This material also contains confidential
+ *  information which may not be disclosed to others without the
+ *  prior written consent of Nokia.
+ * =============================================================================
+ */
+
+
+// INCLUDE FILES
+#include <platform.h>
+#include <kern_priv.h>
+
+#include <graphics/guestvideodriverinterfaceconstants.h>
+#include <graphics/virtualvideohwinterface.h>
+#include <graphics/virtualvideotracing.h>
+
+
+// CONSTANTS
+
+_LIT( KVirtualVideoHwInterfacePanic, "DVirtualVideoHwInterface" );
+
+// ============================ LOCAL DATA TYPES ===============================
+
+// Register offsets for playback and recording channels
+// Note: The orders of these must match the order of enumarations
+const TLinAddr KRegisterOffsets[] =
+    {
+    VVI_R_ID,
+    VVI_R_IRQ_ENABLE,
+    VVI_R_IRQ_STATUS,
+    VVI_R_COMMAND,
+    VVI_R_PARAMETER_LOAD,
+    VVI_R_ERROR,
+    VVI_R_INPUT_BUFFER_TAIL,
+    VVI_R_INPUT_BUFFER_HEAD,
+    VVI_R_INPUT_BUFFER_READ_COUNT,
+    VVI_R_INPUT_BUFFER_WRITE_COUNT,
+    VVI_R_INPUT_BUFFER_MAX_TAIL,
+    VVI_R_REQUEST_ID
+    };
+#define ASSERT_PANIC(c,p) __ASSERT_DEBUG(c,Kern::PanicCurrentThread(KVirtualVideoHwInterfacePanic,p));
+
+// ============================ LOCAL FUNCTIONS ================================
+
+// Get register offset for certain register range and register
+inline TLinAddr RegisterOffset( DVirtualVideoHwInterface::TRegister aRegister )
+    {
+    return KRegisterOffsets[aRegister];
+    }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// DVirtualVideoHwInterface::DVirtualVideoHwInterface
+// -----------------------------------------------------------------------------
+//
+DVirtualVideoHwInterface::DVirtualVideoHwInterface()
+    {
+    iInputParametersMemoryChunk = NULL;
+    iOutputParametersMemoryChunk = NULL;
+    iRegisterMemoryChunk = NULL;
+    }
+
+
+// -----------------------------------------------------------------------------
+// DVirtualVideoHwInterface::~DVirtualVideoHwInterface
+// -----------------------------------------------------------------------------
+//
+DVirtualVideoHwInterface::~DVirtualVideoHwInterface()
+    {
+    // Enter critical section
+    NKern::ThreadEnterCS();
+
+    if ( iInputParametersMemoryChunk )
+        {
+        Kern::ChunkClose( iInputParametersMemoryChunk );
+        }
+
+    if ( iOutputParametersMemoryChunk )
+        {
+        Kern::ChunkClose( iOutputParametersMemoryChunk );
+        }
+
+    if ( iRegisterMemoryChunk )
+        {
+        Kern::ChunkClose( iRegisterMemoryChunk );
+        }
+
+    iInputParametersMemoryChunk = NULL;
+    iOutputParametersMemoryChunk = NULL;
+    iRegisterMemoryChunk = NULL;
+
+    // Leave critical section
+    NKern::ThreadLeaveCS();
+    }
+
+TInt DVirtualVideoHwInterface::InitParametersInputMemory()
+    {
+    return InitPhysicalMemory( VVI_PARAMETERS_INPUT_BASE_ADDRESS, 
+            VVI_PARAMETERS_INPUT_MEMORY_SIZE, iInputParametersMemoryChunk, 
+            iInputParametersChunkKernelAddress );    
+    }
+
+TInt DVirtualVideoHwInterface::InitParametersOutputMemory()
+    {
+    return InitPhysicalMemory( VVI_PARAMETERS_OUTPUT_BASE_ADDRESS, 
+            VVI_PARAMETERS_OUTPUT_MEMORY_SIZE, iOutputParametersMemoryChunk, 
+            iOutputParametersChunkKernelAddress );    
+    }
+
+TInt DVirtualVideoHwInterface::InitRegisterMemory()
+    {
+    return InitPhysicalMemory( VVI_REGISTERS_BASE_ADDRESS, 
+            VVI_REGISTERS_MEMORY_SIZE, iRegisterMemoryChunk, 
+            iRegisterChunkKernelAddress );        
+    }
+
+// -----------------------------------------------------------------------------
+// DVirtualVideoHwInterface::InitPhysicalMemory
+// -----------------------------------------------------------------------------
+//
+TInt DVirtualVideoHwInterface::InitPhysicalMemory( TUint32 aPhysicalAddress, 
+        TInt aMaxSize, DChunk*& aChunk, TLinAddr& aLinAddr )
+    {
+    TInt error = KErrNoMemory;
+    TChunkCreateInfo info;
+    info.iType = TChunkCreateInfo::ESharedKernelSingle;
+    info.iMaxSize = aMaxSize;
+	info.iMapAttr = EMapAttrFullyBlocking;
+    info.iOwnsMemory = EFalse;
+    info.iDestroyedDfc = NULL;
+    DChunk* chunk = NULL;
+    TUint32 mapAttr = 0;
+    TLinAddr chunkKernelAddress = 0;
+    
+    // Enter critical section while creating the chunk and commiting memory
+    NKern::ThreadEnterCS();
+
+    error = Kern::ChunkCreate( info, chunk, chunkKernelAddress, mapAttr );
+    if ( !error )
+        {
+        error = Kern::ChunkCommitPhysical(
+            chunk, 0, aMaxSize, aPhysicalAddress );
+        if ( error )
+            {
+            Kern::ChunkClose( chunk );
+            }
+        else
+            {
+            // Physical memory has been successfully committed to chunk
+            aChunk = chunk; 
+            aLinAddr = chunkKernelAddress;
+            }
+        }
+    chunk = NULL;
+
+    // Leave critical section
+    NKern::ThreadLeaveCS();
+    
+    VVHW_TRACE("DVirtualVideoHwInterface::InitPhysicalMemory return %d", error);
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
+// DVirtualVideoHwInterface::EnableInterrupts
+// -----------------------------------------------------------------------------
+//
+void DVirtualVideoHwInterface::EnableInterrupts( TUint32 aInterruptBitField )
+    {
+    SetRegisterValue( ERegIrqEnable, aInterruptBitField );
+    }
+
+
+// -----------------------------------------------------------------------------
+// DVirtualVideoHwInterface::GetInterruptEnabledState
+// -----------------------------------------------------------------------------
+//
+void DVirtualVideoHwInterface::GetInterruptEnabledState( TUint32& aInterruptBitField )
+    {
+    GetRegisterValue( ERegIrqEnable, aInterruptBitField );
+    }
+
+
+// -----------------------------------------------------------------------------
+// DVirtualVideoHwInterface::GetInterruptStatus
+// -----------------------------------------------------------------------------
+//
+void DVirtualVideoHwInterface::GetInterruptStatus( TUint32& aInterruptBitField )
+    {
+    GetRegisterValue( ERegIrqStatus, aInterruptBitField );
+    }
+
+
+// -----------------------------------------------------------------------------
+// DVirtualVideoHwInterface::ResetInterruptStatus
+// -----------------------------------------------------------------------------
+//
+void DVirtualVideoHwInterface::ResetInterruptStatus( TUint32 aInterruptBitField )
+    {
+    SetRegisterValue( ERegIrqStatus, aInterruptBitField );
+    }
+
+
+// DVirtualVideoHwInterface::IssueCommand
+// -----------------------------------------------------------------------------
+//
+void DVirtualVideoHwInterface::IssueCommand( TUint32 aCommand )
+    {
+    SetRegisterValue( ERegCommand, aCommand );
+    }
+
+// -----------------------------------------------------------------------------
+// DVirtualVideoHwInterface::GetRegisterValue
+// -----------------------------------------------------------------------------
+//
+void DVirtualVideoHwInterface::GetRegisterValue(
+    TRegister aRegister,
+    TUint32& aValue )
+    {
+    if ( iRegisterMemoryChunk )
+        {
+        TLinAddr offset = RegisterOffset( aRegister );
+        TUint32* ptr = reinterpret_cast<TUint32*>( iRegisterChunkKernelAddress + offset );
+        aValue = *ptr;
+        }
+    else
+        {
+        Kern::PanicCurrentThread( KVirtualVideoHwInterfacePanic, KErrNotReady );
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// DVirtualVideoHwInterface::SetRegisterValue
+// -----------------------------------------------------------------------------
+//
+void DVirtualVideoHwInterface::SetRegisterValue(
+    TRegister aRegister,
+    TUint32 aValue )
+    {
+    if ( iRegisterMemoryChunk )
+        {
+        TLinAddr offset = RegisterOffset( aRegister );
+        TUint32* ptr = reinterpret_cast<TUint32*>( iRegisterChunkKernelAddress + offset );
+        *ptr = aValue;
+        }
+    else
+        {
+        Kern::PanicCurrentThread( KVirtualVideoHwInterfacePanic, KErrNotReady );
+        }
+    }
+
+
+// End of file