systemswstubs/examplecommonisc/IscDataTransmissionBase/src/IscBufferAllocator.cpp
--- a/systemswstubs/examplecommonisc/IscDataTransmissionBase/src/IscBufferAllocator.cpp Thu Aug 19 09:36:39 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,229 +0,0 @@
-/*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Implementation of DIscBufferAllocator class
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <kernel.h>
-#include <platform.h>
-#include <kern_priv.h>
-
-#include "IscBufferAllocator.h"
-#include "IscBufferQueue.h"
-#include "IscTrace.h"
-
-// EXTERNAL DATA STRUCTURES
-
-// EXTERNAL FUNCTION PROTOTYPES
-
-// CONSTANTS
-
-// MACROS
-
-// LOCAL CONSTANTS AND MACROS
-
-// MODULE DATA STRUCTURES
-
-// LOCAL FUNCTION PROTOTYPES
-
-// FORWARD DECLARATIONS
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// DIscBufferAllocator::DIscBufferAllocator
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-DIscBufferAllocator::DIscBufferAllocator( TIscBufferEntry* aBufferConfig )
- : iBuffers( NULL )
-#ifndef __WINS__
- , iBufferChunk( NULL )
- , iCurrentAddress( NULL )
-#endif
- {
- for ( TUint16 i = 0; i < KIscBufferAmount; i++ )
- {
- iBufferConfig[i].size = aBufferConfig[i].size;
- iBufferConfig[i].count = aBufferConfig[i].count;
- }
-
- C_TRACE( ( _T( "DIscBufferAllocator::DIscBufferAllocator" ) ) );
- }
-
-// Destructor
-DIscBufferAllocator::~DIscBufferAllocator()
- {
- // delete iBuffers & chunk
- for ( TUint8 i = 0; i < KIscBufferAmount; i++ )
- {
- delete iBuffers[i];
- iBuffers[i] = NULL;
- }
- delete [] iBuffers;
- iBuffers=NULL;
-
-#ifndef __WINS__
- delete iBufferChunk;
- iBufferChunk = NULL;
- // free ram pages..
-#endif
- }
-
-// -----------------------------------------------------------------------------
-// DIscBufferAllocator::AllocBuffers
-// Allocate buffers according the multiplexer
-// ( other items were commented in a header ).
-// -----------------------------------------------------------------------------
-//
-TInt DIscBufferAllocator::AllocBuffers()
- {
- C_TRACE( ( _T( "DIscBufferAllocator::AllocBuffers()" ) ) );
- TUint8 i = 0;
-#ifndef __WINS__
- TInt memoryNeeded = 0;
- for ( i = 0; i < KIscBufferAmount; i++ )
- {
- if ( iBufferConfig[i].size > 0 && iBufferConfig[i].count> 0 )
- {
- memoryNeeded += ( iBufferConfig[i].size * iBufferConfig[i].count );
- }
- }
- C_TRACE( ( _T( "DIscBufferAllocator::AllocBuffers memory needed %d" ), memoryNeeded ) );
-
- // Check if buffers are allocated from ISC
- if ( memoryNeeded > 0 )
- {
- AllocPhMemory( memoryNeeded );
- }
- else
- {
- return KErrNone;
- }
-
- TUint8* address = ( TUint8* )iCurrentAddress;
-#else
- TUint8* address = NULL;
-#endif //WINS
-
-
-
- iBuffers = new DIscBufferQueue*[ KIscBufferAmount ];
- ASSERT_RESET_ALWAYS( iBuffers, "ISCDataTransmissionBase",EIscMemoryAllocationFailure );
-
- for ( i = 0; i < KIscBufferAmount; i++ )
- {
- if ( iBufferConfig[i].size > 0 && iBufferConfig[i].count > 0 )
- {
- iBuffers[i] = DIscBufferQueue::New( iBufferConfig[i].size, iBufferConfig[i].count, address );
- }
- }
-
- return KErrNone;
-
- }
-
-#ifndef __WINS__
-// -----------------------------------------------------------------------------
-// DIscBufferAllocator::AllocPhMemory
-// Physical buffer allocations
-// ( other items were commented in a header ).
-// -----------------------------------------------------------------------------
-//
-void DIscBufferAllocator::AllocPhMemory( TInt aMemoryNeeded )
- {
- C_TRACE( ( _T( "DIscBufferAllocator::AllocPhMemory(0x%x)" ), aMemoryNeeded ) );
-
- TPhysAddr physAddr = 0;
- NKern::ThreadEnterCS();
- TInt r = Epoc::AllocPhysicalRam( aMemoryNeeded, physAddr );
- ASSERT_RESET_ALWAYS( r == KErrNone, "IscDataTransmissionBase",EIscMemoryAllocationFailure );
- r = DPlatChunkHw::New( iBufferChunk, physAddr, aMemoryNeeded, EMapAttrSupRw );
- NKern::ThreadLeaveCS();
- ASSERT_RESET_ALWAYS( r == KErrNone, "IscDataTransmissionBase",EIscMemoryAllocationFailure );
- iCurrentAddress = iBufferChunk->LinearAddress();
-
- }
-#endif //WINS
-
-// -----------------------------------------------------------------------------
-// DIscBufferAllocator::ReserveMemoryBlock
-// Reserves pre-allocated memory block
-// ( other items were commented in a header ).
-// -----------------------------------------------------------------------------
-//
-void DIscBufferAllocator::ReserveMemoryBlock(
- TDes8*& aPtr,
- TUint16 aSize )
- {
- E_TRACE( ( _T( "IBA:Res (0x%x)" ), aSize ) );
-
- if ( iBuffers )
- {
- for ( TUint8 i = 0; i < KIscBufferAmount;i++ )
- {
- if ( aSize <= iBufferConfig[i].size && iBufferConfig[i].count > 0 )
- {
- if ( iBuffers[i] )
- {
- if ( !iBuffers[i]->Empty() )
- {
- aPtr = ( TPtr8* )iBuffers[i]->Reserve();
- if ( aPtr )
- {
- aPtr->SetLength( 0 );
- E_TRACE( ( _T( "IBA:Res 0x%x %d" ), aPtr, i ) );
- return;
- }
- }
- }
- }
- }
- }
- // If Memory block is not reserved, set NULL to aPtr
- aPtr = NULL;
- return;
- }
-
-// -----------------------------------------------------------------------------
-// DIscBufferAllocator::ReleaseMemoryBlock
-// Releases memory block allocated with ReserveMemoryBlock
-// ( other items were commented in a header ).
-// -----------------------------------------------------------------------------
-//
-void DIscBufferAllocator::ReleaseMemoryBlock(
- TDes8* aPtr )
- {
- E_TRACE( ( _T( "IBA:Rel 0x%x" ), aPtr ) );
- if ( !aPtr )
- {
- TRACE_ASSERT_ALWAYS;
- }
- else if ( KIscBufferAmount != 0 && iBuffers )
- {
- for ( TUint8 i = 0; i < KIscBufferAmount; i++ )
- {
- if ( iBufferConfig[i].size == ( ( TDes8* )aPtr )->MaxLength() )
- {
- iBuffers[i]->Release( aPtr );
- }
- }
- }
- }
-
-// End of File