usbmgmt/usbmgr/device/classdrivers/ncm/classimplementation/ncmpktdrv/pktdrv/inc/ncmbuffermanager.h
author hgs
Wed, 07 Jul 2010 14:16:40 +0800
changeset 28 f1fd07aa74c9
permissions -rw-r--r--
201025_08
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
28
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
     1
// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
     2
// All rights reserved.
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
     4
// under the terms of the License "Eclipse Public License v1.0"
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
     7
//
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
     8
// Initial Contributors:
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    10
//
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    11
// Contributors:
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    12
//
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    13
// Description:
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    14
// 
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    15
//
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    16
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    17
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    18
/**
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    19
@file
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    20
@internalComponent
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    21
*/
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    22
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    23
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    24
#ifndef NCMBUFFERMANAGER_H
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    25
#define NCMBUFFERMANAGER_H
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    26
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    27
#include <e32base.h>
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    28
#include "ncmpktdrvcommon.h"
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    29
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    30
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    31
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    32
/**
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    33
Responsible for share chunk buffer managerment
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    34
*/
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    35
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    36
NONSHARABLE_CLASS(CNcmBufferManager) : public CBase
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    37
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    38
    {
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    39
public:
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    40
    static CNcmBufferManager* NewL();
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    41
    ~CNcmBufferManager();
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    42
    /**
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    43
    * get a free buffer block
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    44
    *
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    45
    * @param aBuffer to store the buffer block
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    46
    * @return KErrNone        if success
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    47
    *         KErrCongestion  if there is not enough buffer block, should start flow control
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    48
    */
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    49
    TInt GetBuffer(TNcmBuffer& aBuffer);
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    50
    /**
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    51
    * free a buffer block
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    52
    *
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    53
    * @param aBuffer store the buffer block to free
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    54
    */
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    55
    void FreeBuffer(const TNcmBuffer& aBuffer);
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    56
    void InitBufferArea(TAny* aBuf, TInt aLength);
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    57
    /**
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    58
    * get a free buffer block
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    59
    *
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    60
    * @param aSize new ntb size
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    61
    * @return KErrNone        if success
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    62
    *         KErrUnknown  if too big ntb size, can't create enought buffer block
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    63
    */    
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    64
    TInt SetBufferCellSize(TInt aSize);
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    65
    TBool IsCongestion();
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    66
    TInt RequiredBufferCount();	
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    67
    inline void SetAlignSize(TInt aSize);	
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    68
    inline TInt FreeBufferCount();		
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    69
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    70
private:
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    71
    CNcmBufferManager();
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    72
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    73
private:
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    74
    /**
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    75
    * array of free buffer blocks 
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    76
    */
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    77
    RArray<TNcmBuffer> iFreeQueue;
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    78
    /**
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    79
    * share chunk LDD buffer area 
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    80
    */
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    81
    TUint8*            iBuf;
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    82
    TInt               iLen;
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    83
    TInt               iCellSize;
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    84
    TInt               iAlignSize;	
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    85
    /**
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    86
    * there is enough buffer blocks or not 
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    87
    */
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    88
    TBool              iIsCongestion;
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    89
    
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    90
    };
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    91
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    92
inline void CNcmBufferManager::SetAlignSize(TInt aSize)
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    93
    {
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    94
    iAlignSize = aSize;
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    95
    }
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    96
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    97
inline TInt CNcmBufferManager::FreeBufferCount()
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    98
    {
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
    99
    return iFreeQueue.Count();
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
   100
    }
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
   101
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
   102
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
   103
#endif    //NCMBUFFERMANAGER_H
f1fd07aa74c9 201025_08
hgs
parents:
diff changeset
   104