userlibandfileserver/fileserver/shostmassstorage/server/protocol/tblocktransfer.cpp
author hgs
Tue, 26 Oct 2010 12:49:20 +0100
changeset 297 b2826f67641f
parent 31 56f325a607ea
permissions -rw-r--r--
201043_03
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
     1
// Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     2
// All rights reserved.
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     3
// This component and the accompanying materials are made available
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     4
// under the terms of the License "Eclipse Public License v1.0"
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     5
// which accompanies this distribution, and is available
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     7
//
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     8
// Initial Contributors:
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    10
//
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    11
// Contributors:
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    12
//
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    13
// Description:
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    14
//
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    15
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    16
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    17
 @file
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    18
 @internalTechnology
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    19
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    20
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    21
#include <e32def.h>
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    22
#include <e32std.h>
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    23
#include <e32base.h>
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    24
#include "msctypes.h"
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    25
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    26
#include "mblocktransferprotocol.h"
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    27
#include "tblocktransfer.h"
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    28
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    29
#include "OstTraceDefinitions.h"
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    30
#ifdef OST_TRACE_COMPILER_IN_USE
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    31
#include "tblocktransferTraces.h"
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    32
#endif
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    33
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    34
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    35
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    36
Manage a read from a block device.
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    37
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    38
@param aProtocol A reference to object providing protocol read method
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    39
@param aPosition The position to start reading from
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    40
@param aLength The length of data to read
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    41
@param aBuf Buffer to copy the data to
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    42
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    43
void TBlockTransfer::ReadL(MBlockTransferProtocol& aProtocol,
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    44
                           TPos aPosition,
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    45
                           TInt aLength,
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    46
                           TDes8& aBuf)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    47
    {
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    48
    OstTrace1(TRACE_SHOSTMASSSTORAGE_HOST, TBLOCKTRANSFER_1,
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    49
              "blocklen = 0%lx", iBlockLength);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    50
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    51
    TInt copylen = 0;
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    52
    TInt headlen = 0;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    53
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    54
    aBuf.SetLength(0);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    55
    TPos headOffset = GetHeadBlockOffset(aPosition);
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    56
    /**** READ10 HEAD ****/
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    57
    if (headOffset)
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    58
        {
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    59
        TPos headpos = aPosition - headOffset;
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
    60
        iHeadbuf->Zero();
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    61
        headlen = ((headOffset + aLength - 1) / iBlockLength) == 0 ? aLength : (iBlockLength - headOffset);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    62
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    63
        OstTraceExt3(TRACE_SHOSTMASSSTORAGE_HOST, TBLOCKTRANSFER_10,
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    64
                     "Read head pos = 0%x %x length = 0%lx",
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    65
                    I64HIGH(headpos), I64LOW(headpos), iBlockLength);
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    66
        aProtocol.BlockReadL(headpos, *iHeadbuf, iBlockLength);
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    67
        aBuf.Append(iHeadbuf->Ptr() + headOffset, headlen);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    68
        }
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    69
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    70
    /**** READ10 BODY ****/
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    71
    TInt blocksInMain = (aLength - headlen)/iBlockLength;
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    72
    if (blocksInMain)
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    73
        {
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    74
        copylen = blocksInMain * iBlockLength;
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    75
        OstTraceExt3(TRACE_SHOSTMASSSTORAGE_HOST, TBLOCKTRANSFER_11,
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    76
                     "Read main pos = 0%x %x length = 0x%x",
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    77
                     I64HIGH(aPosition+headlen), I64LOW(aPosition+headlen), copylen);
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    78
        aProtocol.BlockReadL(aPosition+headlen, (TDes8 &)aBuf, copylen);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    79
        }
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    80
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    81
    copylen += headlen;
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    82
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    83
    /**** READ10 TAIL ****/
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    84
    TInt tailLen = aLength - copylen;
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    85
    if ((tailLen) != 0)
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    86
        {
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    87
        OstTraceExt4(TRACE_SHOSTMASSSTORAGE_HOST, TBLOCKTRANSFER_12,
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    88
                     "Read tail pos = 0%x %x length = 0%x %x",
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    89
                     I64HIGH(aPosition+copylen), I64LOW(aPosition+copylen), I64HIGH(iBlockLength), I64LOW(iBlockLength));
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    90
        iTailbuf->Zero();
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    91
        aProtocol.BlockReadL(aPosition+copylen, *iTailbuf, iBlockLength);
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
    92
        aBuf.Append(iTailbuf->Ptr(), tailLen);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    93
        }
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    94
    }
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    95
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    96
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    97
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    98
Manage a write to a block device
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    99
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   100
@param aProtocol A reference to object providing protocol read method
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   101
@param aPosition The position to start reading from
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   102
@param aLength The length of data to read
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   103
@param aBuf Buffer containing the data to write
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   104
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   105
void TBlockTransfer::WriteL(MBlockTransferProtocol& aProtocol,
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   106
                            TPos aPosition,
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   107
                            TInt aLength,
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   108
                            TDesC8& aBuf)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   109
    {
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   110
    TInt copylen = 0;
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   111
    TInt headlen = 0;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   112
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   113
    TPos headOffset = GetHeadBlockOffset(aPosition);
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   114
    /**** WRITE10 HEAD ****/
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   115
    if (headOffset)
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   116
        {
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   117
        TPos headpos = aPosition - headOffset;
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   118
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   119
        iHeadbuf->Zero();
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   120
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   121
        RBuf8& buf = *iTailbuf;
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   122
        buf.Zero();
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   123
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   124
        headlen = ((headOffset + aLength - 1) / iBlockLength) == 0 ? aLength : (iBlockLength - headOffset);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   125
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   126
        OstTraceExt3(TRACE_SHOSTMASSSTORAGE_HOST, TBLOCKTRANSFER_20,
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   127
                     "Write-Read head pos = 0%x %x length = 0%lx",
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   128
                     I64HIGH(headpos), I64LOW(headpos), iBlockLength);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   129
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   130
        aProtocol.BlockReadL(headpos, *iHeadbuf, iBlockLength);
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   131
        /* get head */
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   132
        OstTraceExt3(TRACE_SHOSTMASSSTORAGE_HOST, TBLOCKTRANSFER_21,
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   133
                     "tcopying read data pos = 0%x %x offset = 0%lx",
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   134
                     I64HIGH(headpos), I64LOW(headpos), headOffset);
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   135
        buf.Append(iHeadbuf->Ptr(), headOffset);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   136
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   137
        /* get body */
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   138
        buf.Append(aBuf.Ptr(), headlen);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   139
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   140
        /* Is it a short write and tail exist? */
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   141
        TInt headEndOffset = headOffset + headlen;
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   142
        if (headEndOffset != iBlockLength)
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   143
            {
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   144
            TInt len = iBlockLength - headEndOffset;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   145
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   146
            OstTraceExt3(TRACE_SHOSTMASSSTORAGE_HOST, TBLOCKTRANSFER_22,
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   147
                         "(short write) copying read data pos = 0%x %x length = %08x",
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   148
                         I64HIGH(headpos + headEndOffset), I64LOW(headpos + headEndOffset), len);
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   149
            buf.Append(iHeadbuf->Ptr() + headEndOffset, len);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   150
            }
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   151
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   152
        OstTraceExt3(TRACE_SHOSTMASSSTORAGE_HOST, TBLOCKTRANSFER_23,
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   153
                     "Write head pos = 0%x %x length = %08x",
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   154
                     I64HIGH(headpos), I64LOW(headpos), headlen);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   155
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   156
        aProtocol.BlockWriteL(headpos, (TDes8 &)buf, 0, iBlockLength);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   157
        }
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   158
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   159
    /**** WRITE10 BODY ****/
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   160
    TPos blocksInMain = (aLength - headlen)/iBlockLength;
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   161
    if (blocksInMain)
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   162
        {
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   163
        copylen = blocksInMain * iBlockLength;
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   164
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   165
        const TUint64 pos = aPosition + headlen;
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   166
        OstTraceExt3(TRACE_SHOSTMASSSTORAGE_HOST, TBLOCKTRANSFER_24,
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   167
                     "Write main pos = 0%x %x length = %08x",
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   168
                     I64HIGH(pos), I64LOW(pos), copylen);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   169
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   170
        /* form the body */
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   171
        aProtocol.BlockWriteL(pos, (TDes8 &)aBuf, headlen, copylen);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   172
        }
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   173
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   174
    copylen += headlen;
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   175
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   176
    /**** WRITE10 TAIL ****/
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   177
    TInt tailLen = aLength - copylen;;
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   178
    if (tailLen != 0)
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   179
        {
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   180
        RBuf8& buf = *iHeadbuf;
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   181
        buf.Zero();
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   182
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   183
        iTailbuf->Zero();
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   184
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   185
        const TUint64 pos = aPosition + copylen;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   186
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   187
        OstTraceExt3(TRACE_SHOSTMASSSTORAGE_HOST, TBLOCKTRANSFER_25,
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   188
                  "Write-Read tail pos = 0%x %x length = %08x",
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   189
                  I64HIGH(pos), I64LOW(pos), iBlockLength);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   190
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   191
        aProtocol.BlockReadL(pos, *iTailbuf, iBlockLength);
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   192
        /* get head */
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   193
        buf.Append(aBuf.Ptr() + copylen, tailLen);
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   194
        /* get tail */
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   195
        buf.Append(iTailbuf->Ptr() + tailLen, iBlockLength - tailLen);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   196
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   197
        aProtocol.BlockWriteL(pos, (TDes8 &)buf, 0, iBlockLength);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   198
        }
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   199
    }
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   200
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   201
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   202
void TBlockTransfer::SetCapacityL(TUint32 aBlockLength, TLba aLastLba)
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   203
    {
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   204
    iBlockLength = static_cast<TInt64>(aBlockLength);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   205
    iLastLba = aLastLba;
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   206
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   207
    __ASSERT_DEBUG(iHeadbuf, User::Invariant());
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   208
    __ASSERT_DEBUG(iTailbuf, User::Invariant());
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   209
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   210
    if (iHeadbuf->Length() < iBlockLength)
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   211
        {
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   212
        iHeadbuf->ReAllocL(aBlockLength);
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   213
        iTailbuf->ReAllocL(aBlockLength);
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   214
        }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   215
    }
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   216
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   217
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   218
TPos TBlockTransfer::GetHeadBlockOffset(TPos aPos)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   219
    {
297
b2826f67641f 201043_03
hgs
parents: 31
diff changeset
   220
    return (aPos % iBlockLength);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   221
    }
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   222
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   223
TLba TBlockTransfer::GetHeadBlockLbaL(TPos aPos)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   224
    {
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   225
    TLba lba = I64LOW(aPos / iBlockLength);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   226
    if (lba > iLastLba)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   227
        User::Leave(KErrArgument);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   228
    return lba;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   229
    }
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   230
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   231
TPos TBlockTransfer::GetTailBlockOffset(TPos aPos, TInt aLen)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   232
    {
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   233
    return ((aPos + aLen) % iBlockLength);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   234
    }
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   235
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   236
TLba TBlockTransfer::GetTailBlockLbaL(TPos aPos, TInt aLen)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   237
    {
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   238
    TLba lba = I64LOW((aPos + aLen) / iBlockLength);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   239
    if (lba > iLastLba)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   240
        User::Leave(KErrArgument);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   241
    return lba;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   242
    }
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   243
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   244
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   245