kernel/eka/drivers/medmmc/bgahsmmcptn.cpp
author hgs
Mon, 18 Oct 2010 15:31:10 +0100
changeset 291 206a6eaaeb71
parent 287 ddfd5aa0d58f
child 300 1d28c8722707
permissions -rw-r--r--
201041_05
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     1
// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     2
// All rights reserved.
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     3
// This component and the accompanying materials are made available
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     4
// under the terms of the License "Eclipse Public License v1.0"
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     5
// which accompanies this distribution, and is available
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     7
//
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     8
// Initial Contributors:
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    10
//
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    11
// Contributors:
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    12
//
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    13
// Description:
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    14
// Partition Management for Embedded MMC devices
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    15
//
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    16
//
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    18
#include <emmcptn.h>
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
    19
#include "mmc.h"
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
#include "bgahsmmcptn.h"
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
    21
#include "medmmc.h"
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
    22
#include "toc.h"
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
    23
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
    24
//#define __DEBUG_PARTITIONS_
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
    25
//#define __DEBUG_CHECK_PARTITION_
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    26
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    27
class DBB5PartitionInfo : public DEMMCPartitionInfo
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    28
	{
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    29
public:
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    30
	 DBB5PartitionInfo();
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    31
	~DBB5PartitionInfo();
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    32
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    33
public:
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    34
	virtual TInt Initialise(DMediaDriver* aDriver);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    35
	virtual TInt PartitionInfo(TPartitionInfo& anInfo, const TMMCCallBack& aCallBack);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    36
	virtual TInt PartitionCaps(TLocDrv& aDrive, TDes8& aInfo);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    37
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    38
protected:
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    39
	void SetPartitionEntry(TPartitionEntry* aEntry, TUint aFirstSector, TUint aNumSectors);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    40
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    41
private:
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
    42
	virtual TInt ReadPartition(TUint32 aPtOffset);
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    43
	static void SessionEndCallBack(TAny* aSelf);
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
    44
	void DoSessionEndCallBack();
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    45
	virtual TInt DecodePartitionInfo();
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
    46
	TInt GetPartitionSizeInSectors(TUint aPartition, TUint32& aSize);
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
    47
	TInt GetPartitionOffset(TUint32& aPtOffset);
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
    48
	TInt SelectNextPartition();
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    49
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    50
protected:
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    51
	DMediaDriver*	iDriver;
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    52
	TPartitionInfo* iPartitionInfo;
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    53
	TMMCCallBack	iSessionEndCallBack;
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    54
	TMMCCallBack	iCallBack;		   // Where to report the PartitionInfo completion
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    55
	DMMCSession*	iSession;
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    56
	TMMCard*		iCard;
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    57
	TUint8* 		iIntBuf;
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    58
	TUint32 		iPartitionAttributes[KMaxLocalDrives];
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
    59
	TBool           iCheckTOC;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
    60
	Toc*            iTocPtr;
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
    61
	TUint32			iSelectedPartition;	
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    62
	};
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    63
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    64
DBB5PartitionInfo::DBB5PartitionInfo()
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
    65
  : iSessionEndCallBack(DBB5PartitionInfo::SessionEndCallBack, this),
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
    66
    iCheckTOC(EFalse)
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    67
	{
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    68
	}
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    69
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    70
DBB5PartitionInfo::~DBB5PartitionInfo()
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    71
	{
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    72
	delete iSession;
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    73
	}
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    74
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    75
TInt DBB5PartitionInfo::Initialise(DMediaDriver* aDriver)
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    76
	{
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    77
	iDriver = aDriver;
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    78
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    79
	DMMCSocket* socket = ((DMMCSocket*)((DPBusPrimaryMedia*)(iDriver->iPrimaryMedia))->iSocket);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    80
	if(socket == NULL)
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    81
		return(KErrNoMemory);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    82
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    83
	DMMCStack* stack = socket->Stack(0);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    84
	iCard = stack->CardP(((DPBusPrimaryMedia*)(iDriver->iPrimaryMedia))->iSlotNumber);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    85
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    86
	iSession = stack->AllocSession(iSessionEndCallBack);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    87
	if (iSession == NULL)
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    88
		return(KErrNoMemory);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    89
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    90
	iSession->SetStack(stack);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    91
	iSession->SetCard(iCard);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    92
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    93
	// this gets used before any access
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    94
	TInt bufLen, minorBufLen;
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    95
	stack->BufferInfo(iIntBuf, bufLen, minorBufLen);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    96
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
    97
	iSelectedPartition = TExtendedCSD::ESelectUserArea;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
    98
	
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    99
	return(KErrNone);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   100
	}
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   101
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   102
TInt DBB5PartitionInfo::PartitionInfo(TPartitionInfo& aInfo, const TMMCCallBack& aCallBack)
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   103
	{
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   104
	iPartitionInfo = &aInfo;
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   105
	iPartitionInfo->iPartitionCount = 0;
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   106
	iCallBack = aCallBack;
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   107
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   108
	// Always check the user partition first
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   109
	iSelectedPartition = TExtendedCSD::ESelectUserArea;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   110
	iSession->SetPartition(iSelectedPartition);
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   111
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   112
	// Preferred partition scheme is BB5, which is located in the last block of the media.
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   113
    TUint32 ptiOffset;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   114
    TInt r;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   115
    do
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   116
    	{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   117
	    r = GetPartitionOffset(ptiOffset);
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   118
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   119
	    if(r == KErrNone)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   120
	    	{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   121
		    r = ReadPartition(ptiOffset);
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   122
		    return r;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   123
	    	}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   124
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   125
	    r = SelectNextPartition();
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   126
    	}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   127
    while(r != KErrNotFound);
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   128
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   129
	return r;
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   130
	}
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   131
	
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   132
// retrieves size in terms of sectors
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   133
TInt DBB5PartitionInfo::GetPartitionSizeInSectors(TUint aPartition, TUint32& aSize)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   134
	{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   135
	TInt r = KErrNone;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   136
	
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   137
	TUint32 size = 0;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   138
	
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   139
	const TExtendedCSD& extCsd = iCard->ExtendedCSD();
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   140
	
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   141
	switch(aPartition)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   142
		{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   143
		case TExtendedCSD::ESelectUserArea:
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   144
			{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   145
			size = (TUint32)(iCard->DeviceSize64() / KSectorSize);
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   146
			
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   147
			if(extCsd.ExtendedCSDRev() >= TExtendedCSD::EExtendedCSDRev1_5)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   148
				{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   149
				TUint32 otherPartitionsSize = 
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   150
					extCsd.GeneralPurposePartition1SizeInSectors()
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   151
					+ extCsd.GeneralPurposePartition2SizeInSectors()
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   152
					+ extCsd.GeneralPurposePartition3SizeInSectors()
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   153
					+ extCsd.GeneralPurposePartition4SizeInSectors();
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   154
					
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   155
					__ASSERT_DEBUG(size >= otherPartitionsSize, Kern::Fault("DBB5PartitionInfo size mismatch", __LINE__));
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   156
					size -= otherPartitionsSize;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   157
				}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   158
			}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   159
			break;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   160
		case TExtendedCSD::ESelectBootPartition1:
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   161
		case TExtendedCSD::ESelectBootPartition2:
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   162
			size = (extCsd.ExtendedCSDRev() < TExtendedCSD::EExtendedCSDRev1_3) ? 
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   163
				0 : extCsd.BootSizeInSectors();
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   164
			break;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   165
		case TExtendedCSD::ESelectRPMB:
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   166
			size = (extCsd.ExtendedCSDRev() < TExtendedCSD::EExtendedCSDRev1_5) ? 
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   167
				0 : extCsd.RpmbSizeInSectors();
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   168
			break;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   169
		case TExtendedCSD::ESelectGPAPartition1:
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   170
			size = (extCsd.ExtendedCSDRev() < TExtendedCSD::EExtendedCSDRev1_5) ? 
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   171
				0 : extCsd.GeneralPurposePartition1SizeInSectors();
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   172
			break;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   173
		case TExtendedCSD::ESelectGPAPartition2:
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   174
			size = (extCsd.ExtendedCSDRev() < TExtendedCSD::EExtendedCSDRev1_5) ? 
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   175
				0 : extCsd.GeneralPurposePartition2SizeInSectors();
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   176
			break;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   177
		case TExtendedCSD::ESelectGPAPartition3:
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   178
			size = (extCsd.ExtendedCSDRev() < TExtendedCSD::EExtendedCSDRev1_5) ? 
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   179
				0 : extCsd.GeneralPurposePartition3SizeInSectors();
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   180
			break;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   181
		case TExtendedCSD::ESelectGPAPartition4:
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   182
			size = (extCsd.ExtendedCSDRev() < TExtendedCSD::EExtendedCSDRev1_5) ? 
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   183
				0 : extCsd.GeneralPurposePartition4SizeInSectors();
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   184
			break;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   185
		default:
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   186
			// unknown partition
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   187
			size = 0;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   188
			r = KErrNotSupported;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   189
			break;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   190
		}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   191
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   192
	aSize = size;	
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   193
	return r;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   194
	}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   195
	
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   196
TInt DBB5PartitionInfo::GetPartitionOffset(TUint32& aPtiOffset)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   197
	{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   198
	TInt r = GetPartitionSizeInSectors(iSelectedPartition, aPtiOffset);
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   199
		
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   200
	if((r != KErrNone) || (aPtiOffset == 0))
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   201
		{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   202
		// error reading or partition not supported, skip
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   203
		r = KErrNotSupported;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   204
		}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   205
	else
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   206
		{			
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   207
		// need to determine correct end of the partition
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   208
		aPtiOffset -= KPIOffsetFromMediaEnd;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   209
		}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   210
		
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   211
	return r;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   212
	}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   213
	
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   214
TInt DBB5PartitionInfo::SelectNextPartition()
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   215
	{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   216
	TExtendedCSD extCsd = iCard->ExtendedCSD();
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   217
	TUint maxPartition = TExtendedCSD::ESelectUserArea;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   218
	
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   219
	if(extCsd.ExtendedCSDRev() >= TExtendedCSD::EExtendedCSDRev1_5)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   220
		{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   221
		// v4.4 supports UDA, 2x BOOT, RPMB and 4x GPAP partitions
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   222
		maxPartition = TExtendedCSD::ESelectGPAPartition4;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   223
		}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   224
#ifdef EMMC_BOOT_PARTITION_ACCESS_ENABLED
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   225
	else if(extCsd.ExtendedCSDRev() >= TExtendedCSD::EExtendedCSDRev1_3)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   226
		{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   227
		// v4.3 supports up to two BOOT partitions
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   228
		maxPartition = TExtendedCSD::ESelectBootPartition2;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   229
		}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   230
#endif // EMMC_BOOT_PARTITION_ACCESS_ENABLED
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   231
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   232
	++iSelectedPartition;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   233
	
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   234
	// skip through to GPAP1 if either the currently selected partition is RPMB or
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   235
	// if it is one of the BOOT partitions and boot partition access is not enabled
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   236
	if((iSelectedPartition == TExtendedCSD::ESelectRPMB)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   237
#ifndef EMMC_BOOT_PARTITION_ACCESS_ENABLED 
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   238
		|| (iSelectedPartition == TExtendedCSD::ESelectBootPartition1)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   239
		|| (iSelectedPartition == TExtendedCSD::ESelectBootPartition2)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   240
#endif	   
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   241
		)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   242
		{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   243
		iSelectedPartition = TExtendedCSD::ESelectGPAPartition1;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   244
		}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   245
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   246
	TInt r = KErrNone;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   247
	if(iSelectedPartition > maxPartition)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   248
		{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   249
		r = KErrNotFound; // no more partitions to be checked
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   250
		}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   251
	else
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   252
		{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   253
		iSession->SetPartition(iSelectedPartition);
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   254
		}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   255
		
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   256
	return r;	
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   257
	}	
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   258
	
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   259
// returns KErrCompletion on success after having checked all partitions
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   260
TInt DBB5PartitionInfo::ReadPartition(TUint32 aPtOffset)
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   261
    {
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   262
	// If media driver is persistent (see EMediaDriverPersistent)
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   263
	// the card may have changed since last power down, so reset CID
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   264
	iSession->SetCard(iCard);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   265
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   266
	iSession->SetupCIMReadBlock(aPtOffset, iIntBuf);
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   267
	
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   268
	TInt r = iDriver->InCritical();
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   269
	if (r == KErrNone)
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   270
		r = iSession->Engage();
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   271
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   272
	if(r != KErrNone)
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   273
		iDriver->EndInCritical();
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   274
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   275
	return(r);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   276
	}
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   277
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   278
TInt DBB5PartitionInfo::PartitionCaps(TLocDrv& aDrive, TDes8& aInfo)
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   279
	{
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   280
	TLocalDriveCapsV6Buf& Info = static_cast< TLocalDriveCapsV6Buf&> (aInfo);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   281
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   282
	if (aDrive.iPartitionType == KPartitionTypePagedData)
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   283
		{
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   284
		Info().iFileSystemId = KDriveFileNone;
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   285
		Info().iDriveAtt |= KDriveAttHidden;
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   286
		}
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   287
	else if (aDrive.iPartitionType == KPartitionTypeRofs)
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   288
		{
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   289
		Info().iFileSystemId = KDriveFileSysROFS;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   290
		Info().iMediaAtt &= ~KMediaAttFormattable;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   291
		Info().iMediaAtt |= KMediaAttWriteProtected;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   292
		}
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   293
	else if ((aDrive.iPartitionType == KPartitionTypeROM) ||
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   294
			 (aDrive.iPartitionType == KPartitionTypeEmpty))
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   295
		{
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   296
		Info().iFileSystemId = KDriveFileNone;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   297
		Info().iMediaAtt &= ~KMediaAttFormattable;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   298
		Info().iMediaAtt |= KMediaAttWriteProtected;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   299
		}
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   300
    else if ((aDrive.iPartitionType == KPartitionTypePartitionMagic) || //CPS/PMM
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   301
             (aDrive.iPartitionType == KPartitionTypeSymbianCrashLog))
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   302
        {
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   303
        Info().iFileSystemId = KDriveFileNone;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   304
        Info().iMediaAtt |= KMediaAttFormattable;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   305
        }
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   306
	else if ( PartitionIsFAT(aDrive.iPartitionType) || PartitionIsFAT32(aDrive.iPartitionType)	)
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   307
		{		
90
947f0dc9f7a8 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 52
diff changeset
   308
		Info().iDriveAtt |= iPartitionAttributes[aDrive.iPartitionNumber];
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   309
		}
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   310
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   311
	return KErrNone;
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   312
	}
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   313
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   314
void DBB5PartitionInfo::SessionEndCallBack(TAny* aSelf)
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   315
	{
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   316
	DBB5PartitionInfo& self = *static_cast<DBB5PartitionInfo*>(aSelf);
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   317
	self.DoSessionEndCallBack();
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   318
	}
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   319
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   320
void DBB5PartitionInfo::DoSessionEndCallBack()
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   321
	{
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   322
	iDriver->EndInCritical();
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   323
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   324
	TInt r = iSession->EpocErrorCode();
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   325
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   326
	
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   327
	TInt& partitionCount = iPartitionInfo->iPartitionCount;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   328
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   329
	if (r == KErrNone)
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   330
		r = DecodePartitionInfo();
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   331
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   332
	if (iCheckTOC)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   333
		{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   334
		//BB5 table not found need to check for TOC in this partition before continuing
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   335
		if (r!=KErrNone)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   336
			{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   337
			iDriver->PartitionInfoComplete(KErrNotReady);
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   338
			}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   339
		return;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   340
		}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   341
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   342
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   343
	if(r == KErrNone)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   344
		{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   345
		// check next partition(s) for BB5
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   346
		TUint32 ptiOffset = 0;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   347
	
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   348
		r = SelectNextPartition();
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   349
		while(r != KErrNotFound)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   350
			{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   351
			if(r == KErrNone)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   352
				r = GetPartitionOffset(ptiOffset);
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   353
				
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   354
			if(r == KErrNone)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   355
				{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   356
				r = ReadPartition(ptiOffset);
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   357
				if(r != KErrNone)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   358
					break;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   359
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   360
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   361
				return;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   362
				}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   363
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   364
			r = SelectNextPartition();
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   365
			}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   366
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   367
		
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   368
		// end of partitions - reinterpret error code
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   369
		if(r != KErrNotFound)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   370
			{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   371
			__KTRACE_OPT(KPBUSDRV, Kern::Printf("Mmc:dsc: ReadPartition() failed r=%d!", r));
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   372
			r = KErrCorrupt;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   373
			}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   374
		else if(partitionCount == 0)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   375
			{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   376
			__KTRACE_OPT(KPBUSDRV, Kern::Printf("Mmc:dsc: No supported partitions found!"));
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   377
			r = KErrCorrupt;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   378
			}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   379
		else
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   380
			r = KErrCompletion;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   381
		}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   382
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   383
	// Notify medmmc that partitioninfo is complete
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   384
	iCallBack.CallBack();
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   385
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   386
	// All potential partitions checked - KErrCompletion
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   387
	// indicates that there are no more partitions to check
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   388
	r = (r == KErrCompletion) ? KErrNone : KErrNotReady;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   389
	iDriver->PartitionInfoComplete(r);
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   390
	}
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   391
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   392
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   393
TInt DBB5PartitionInfo::DecodePartitionInfo()
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   394
//
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   395
// Decode partition info that was read into internal buffer
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   396
//
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   397
	{
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   398
	__KTRACE_OPT(KPBUSDRV, Kern::Printf(">Mmc:PartitionInfo()"));
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   399
	TInt& partitionCount = iPartitionInfo->iPartitionCount;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   400
    TInt r = KErrNone;
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   401
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   402
	if (iCheckTOC)
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   403
	    {
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   404
        // Try utilising the TOC (Table Of Contents) partitioning scheme 
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   405
        const TText8* KRofsNames[KNoOfROFSPartitions] = { KTocRofs1Generic,
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   406
                                                          KTocRofs2Generic,
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   407
                                                          KTocRofs3Generic,
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   408
                                                          KTocRofs4Generic,
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   409
                                                          KTocRofs5Generic,                                                            
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   410
                                                          KTocRofs6Generic,                                                            
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   411
                                                          };
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   412
                                        
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   413
        STocItem item;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   414
        iTocPtr = reinterpret_cast<Toc*>(&iIntBuf[0]);
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   415
        iTocPtr->iTocStartSector = KTocStartSector;
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   416
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   417
// USER Drive - Only 1        
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   418
        r = iTocPtr->GetItemByName(KTocUserName, item); 
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   419
        if (KErrNone == r)
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   420
            {
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   421
            __KTRACE_OPT(KPBUSDRV, Kern::Printf("[MD  :   ] (%11s) in TOC found : Start addr = 0x%X  Size = 0x%X", item.iFileName, item.iStart, item.iSize));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   422
            iPartitionInfo->iEntry[partitionCount].iPartitionType     = KPartitionTypeFAT16;           
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   423
            iPartitionInfo->iEntry[partitionCount].iPartitionBaseAddr = (Int64)item.iStart;                         
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   424
            iPartitionInfo->iEntry[partitionCount].iPartitionLen      = (Int64)item.iSize;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   425
            iPartitionAttributes[partitionCount] = 0; // No Additional Attributes required.           
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   426
            partitionCount++;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   427
            }   
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   428
        
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   429
// ROM Drive        
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   430
        r = iTocPtr->GetItemByName(KTocRomGeneric, item); 
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   431
        if (KErrNone == r)
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   432
            {
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   433
            __KTRACE_OPT(KPBUSDRV, Kern::Printf("[MD  :   ] (%11s) in TOC found : Start addr = 0x%x  Size = 0x%x", item.iFileName, item.iStart, item.iSize));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   434
            iPartitionInfo->iEntry[partitionCount].iPartitionType     = KPartitionTypeROM;           
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   435
            iPartitionInfo->iEntry[partitionCount].iPartitionBaseAddr = (Int64) item.iStart + (KBB5HeaderSizeInSectors << KDiskSectorShift);                         
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   436
            iPartitionInfo->iEntry[partitionCount].iPartitionLen      = (Int64) item.iSize - (KBB5HeaderSizeInSectors << KDiskSectorShift);          
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   437
            partitionCount++;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   438
            }
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   439
        
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   440
// ROFS            
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   441
        for (TUint i = 0; i < KNoOfROFSPartitions; i++)
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   442
            {
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   443
            /* Search ROFSn item */            
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   444
            r = iTocPtr->GetItemByName(KRofsNames[i], item);
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   445
            if (r == KErrNone)
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   446
                {
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   447
                __KTRACE_OPT(KPBUSDRV, Kern::Printf("[MD  :   ] (%11s) in TOC found : Start addr = 0x%X  Size = 0x%X", item.iFileName, item.iStart, item.iSize));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   448
                iPartitionInfo->iEntry[partitionCount].iPartitionType     = KPartitionTypeRofs;           
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   449
                iPartitionInfo->iEntry[partitionCount].iPartitionBaseAddr = (Int64) item.iStart + (KBB5HeaderSizeInSectors << KDiskSectorShift);                         
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   450
                iPartitionInfo->iEntry[partitionCount].iPartitionLen      = (Int64) item.iSize - (KBB5HeaderSizeInSectors << KDiskSectorShift);
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   451
                partitionCount++;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   452
                }
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   453
            }         
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   454
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   455
// CPS Drive - Only 1        
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   456
        r = iTocPtr->GetItemByName(KTocCps, item); 
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   457
        if (KErrNone == r)
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   458
            {
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   459
            __KTRACE_OPT(KPBUSDRV, Kern::Printf("[MD  :   ] (%11s) in TOC found : Start addr = 0x%X  Size = 0x%X", item.iFileName, item.iStart, item.iSize));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   460
            iPartitionInfo->iEntry[partitionCount].iPartitionType     = KPartitionTypePartitionMagic;           
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   461
            iPartitionInfo->iEntry[partitionCount].iPartitionBaseAddr = (Int64) item.iStart;                         
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   462
            iPartitionInfo->iEntry[partitionCount].iPartitionLen      = (Int64) item.iSize;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   463
            partitionCount++;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   464
            }
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   465
        
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   466
// CRASH Drive - Only 1        
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   467
        r = iTocPtr->GetItemByName(KTocCrashLog, item); 
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   468
        if (KErrNone == r)
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   469
            {
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   470
            __KTRACE_OPT(KPBUSDRV, Kern::Printf("[MD  :   ] (%11s) in TOC found : Start addr = 0x%X  Size = 0x%X", item.iFileName, item.iStart, item.iSize));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   471
            iPartitionInfo->iEntry[partitionCount].iPartitionType     = KPartitionTypeSymbianCrashLog;           
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   472
            iPartitionInfo->iEntry[partitionCount].iPartitionBaseAddr = (Int64) item.iStart;                         
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   473
            iPartitionInfo->iEntry[partitionCount].iPartitionLen      = (Int64) item.iSize;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   474
            partitionCount++;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   475
            }
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   476
        
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   477
// SWAP Partition - Only 1        
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   478
        r = iTocPtr->GetItemByName(KTocSwap, item);
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   479
        if (KErrNone == r)
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   480
            {
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   481
            __KTRACE_OPT(KPBUSDRV, Kern::Printf("[MD  :   ] (%11s) in TOC found : Start addr = 0x%X  Size = 0x%X", item.iFileName, item.iStart, item.iSize));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   482
            iPartitionInfo->iEntry[partitionCount].iPartitionType     = KPartitionTypePagedData;           
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   483
            iPartitionInfo->iEntry[partitionCount].iPartitionBaseAddr = (Int64) item.iStart;                         
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   484
            iPartitionInfo->iEntry[partitionCount].iPartitionLen      = (Int64) item.iSize;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   485
            partitionCount++;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   486
            }                
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   487
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   488
#ifdef __DEBUG_PARTITIONS_
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   489
        for (TInt i = 0; i<partitionCount; i++)
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   490
            {
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   491
            Kern::Printf("iPartitionType....: %d", iPartitionInfo->iEntry[i].iPartitionType);                
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   492
            Kern::Printf("iPartitionBaseAddr: 0x%lx (sectors: %d)", iPartitionInfo->iEntry[i].iPartitionBaseAddr, (TUint32)(iPartitionInfo->iEntry[i].iPartitionBaseAddr >> KDiskSectorShift));                
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   493
            Kern::Printf("iPartitionLen.....: 0x%lx (sectors: %d)", iPartitionInfo->iEntry[i].iPartitionLen, iPartitionInfo->iEntry[i].iPartitionLen >> KDiskSectorShift);
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   494
            Kern::Printf("iPartitionAttribs.: 0x%x", iPartitionAttributes[i]);
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   495
            Kern::Printf(" ");
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   496
            }
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   497
#endif //__DEBUG_PARTITIONS_
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   498
        
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   499
		r = KErrNone;
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   500
        iCheckTOC = EFalse;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   501
	    }
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   502
	else
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   503
	    {
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   504
        // Try utilising the BB5 partitioning scheme	
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   505
        BGAHSMMCPTN_PI_STR *partitionTable = (BGAHSMMCPTN_PI_STR*)(&iIntBuf[0]);
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   506
    
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   507
        // Verify that this is the Nokia partition table
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   508
        if( memcompare( (TUint8*)&(partitionTable->iId[0]), sizeof(BGAHSMMCPTN_PI_ID), (TUint8*)BGAHSMMCPTN_PI_ID, sizeof(BGAHSMMCPTN_PI_ID)) == 0 )
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   509
            {
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   510
			__KTRACE_OPT(KPBUSDRV, Kern::Printf("Nokia partition structure found"));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   511
			__KTRACE_OPT(KPBUSDRV, Kern::Printf("partitionTable->id..............: %s", partitionTable->iId ));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   512
			__KTRACE_OPT(KPBUSDRV, Kern::Printf("partitionTable->sector_size.....: %d = 0x%x", partitionTable->iSector_size, partitionTable->iSector_size));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   513
			__KTRACE_OPT(KPBUSDRV, Kern::Printf("partitionTable->major_ver.......: %d", partitionTable->iMajor_ver));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   514
			__KTRACE_OPT(KPBUSDRV, Kern::Printf("partitionTable->minor_ver.......: %d", partitionTable->iMinor_ver));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   515
			__KTRACE_OPT(KPBUSDRV, Kern::Printf("partitionTable->partition_amount: %d", partitionTable->iPartition_amount));
90
947f0dc9f7a8 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 52
diff changeset
   516
            
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   517
            TUint8 partitionType = 0;		
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   518
            // Check Supported Version is present
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   519
            if (partitionTable->iMajor_ver <= BGAHSMMCPTN_PI_VER_MAJOR)
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   520
                {
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   521
                for( TUint8 index = 0; (index < partitionTable->iPartition_amount) && (index < BGAHSMMCPTN_LAST_DRIVE); index++ )
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   522
                    {
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   523
                    if (partitionTable->iMinor_ver >= BGAHSMMCPTN_PART_TYPE_SUPP_VER_MINOR)
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   524
                        partitionType = partitionTable->iPartitions[index].iPartition_type;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   525
                    else                    
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   526
                        partitionType = partitionTable->iPartitions[index].iPartition_id;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   527
                
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   528
                    // FAT/PMM/CPS/SWAP/CORE/ROFS/CRASH
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   529
                    if( (partitionTable->iPartitions[index].iSize > 0) &&
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   530
                        ( PartitionIsFAT(partitionType) ||
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   531
                          PartitionIsFAT32(partitionType) ||
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   532
                         (KPartitionTypeSymbianCrashLog == partitionType) ||
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   533
                         (KPartitionTypePartitionMagic == partitionType) || //CPS/PMM
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   534
                         (KPartitionTypeRofs == partitionType) || 
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   535
                         (KPartitionTypeEmpty == partitionType) ||
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   536
                         (KPartitionTypeROM == partitionType) ||
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   537
                         (KPartitionTypePagedData == partitionType) ) )
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   538
                        {                   
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   539
                        iPartitionInfo->iEntry[partitionCount].iPartitionType	  = partitionType;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   540
                        iPartitionAttributes[partitionCount]                      = partitionTable->iPartitions[index].iPartition_attributes;
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   541
	                    static_cast<DMmcMediaDriverFlash *>(iDriver)->SetEMmcPartitionMapping(partitionCount, iSelectedPartition);
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   542
                        // ROM/ROFS partitions have a BB5 checksum header that must be offset for the Symbian OS.
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   543
						const TUint32 KStartOffset = ((KPartitionTypeROM == partitionType) || (KPartitionTypeRofs == partitionType) || (KPartitionTypeEmpty == partitionType)) ? KBB5HeaderSizeInSectors : 0;
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   544
                        
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   545
                        iPartitionInfo->iEntry[partitionCount].iPartitionBaseAddr = ((Int64) partitionTable->iPartitions[index].iStart_sector + KStartOffset) << KDiskSectorShift;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   546
                        iPartitionInfo->iEntry[partitionCount].iPartitionLen      = ((Int64) partitionTable->iPartitions[index].iSize - KStartOffset) << KDiskSectorShift;
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   547
        
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   548
                    	__KTRACE_OPT(KPBUSDRV, Kern::Printf("Registering partition #%d:", partitionCount));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   549
                    	__KTRACE_OPT(KPBUSDRV, Kern::Printf("partitionCount....: %d", partitionCount));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   550
                    	__KTRACE_OPT(KPBUSDRV, Kern::Printf("startSector.......: 0x%x", partitionTable->iPartitions[index].iStart_sector ));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   551
                    	__KTRACE_OPT(KPBUSDRV, Kern::Printf("iPartitionBaseAddr: 0x%lx (sectors: %d)", iPartitionInfo->iEntry[partitionCount].iPartitionBaseAddr, (TUint32)(iPartitionInfo->iEntry[partitionCount].iPartitionBaseAddr >> KDiskSectorShift)));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   552
                    	__KTRACE_OPT(KPBUSDRV, Kern::Printf("size..............: 0x%lx", partitionTable->iPartitions[index].iSize ));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   553
                    	__KTRACE_OPT(KPBUSDRV, Kern::Printf("iPartitionLen.....: 0x%lx (sectors: %d)", iPartitionInfo->iEntry[partitionCount].iPartitionLen, iPartitionInfo->iEntry[partitionCount].iPartitionLen >> KDiskSectorShift));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   554
                    	__KTRACE_OPT(KPBUSDRV, Kern::Printf("iPartitionType....: %d", iPartitionInfo->iEntry[partitionCount].iPartitionType));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   555
                    	__KTRACE_OPT(KPBUSDRV, Kern::Printf("iPartitionAttribs.: 0x%x", iPartitionAttributes[partitionCount]));
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   556
						__KTRACE_OPT(KPBUSDRV, Kern::Printf("iPartitionMapping.: 0x%x", static_cast<DMmcMediaDriverFlash *>(iDriver)->GetEMmcPartitionMapping(partitionCount)));
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   557
                    	__KTRACE_OPT(KPBUSDRV, Kern::Printf(" "));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   558
        
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   559
                        partitionCount++;
90
947f0dc9f7a8 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 52
diff changeset
   560
                        }
947f0dc9f7a8 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 52
diff changeset
   561
                    }
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   562
                } 
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   563
            }
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   564
        else
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   565
            {
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   566
            __KTRACE_OPT(KPBUSDRV, Kern::Printf("BGAHSMMC signature not found - try TOC layout"));
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   567
            iCheckTOC = ETrue;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   568
            
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   569
            TInt r = ReadPartition(KTocStartSector);
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   570
            return r;
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   571
            }
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   572
	    }
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   573
	
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   574
	
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   575
	// Validate partition address boundaries
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   576
	if(partitionCount == 0)
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   577
		{
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   578
		__KTRACE_OPT(KPBUSDRV, Kern::Printf("Mmc: No supported partitions found!"));
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   579
		// No Supported partitions found on this physical partition
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   580
		return KErrNone;
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   581
		}
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   582
		
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   583
#ifdef __DEBUG_CHECK_PARTITION_			
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   584
	// Validate partition address boundaries
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   585
	TUint32 eMmcPartitionSizeInSectors = 0;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   586
	if(r == KErrNone)
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   587
		{
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   588
		// At least one entry for a supported partition found
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   589
		r = GetPartitionSizeInSectors(iSelectedPartition, eMmcPartitionSizeInSectors);
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   590
		
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   591
		if(r != KErrNone)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   592
			{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   593
			__KTRACE_OPT(KPBUSDRV, Kern::Printf("Mmc: Could not retrieve size for eMMC partition 0x%02X", iSelectedPartition));
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   594
			r = KErrCorrupt;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   595
			}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   596
		}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   597
		
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   598
	if(r == KErrNone)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   599
		{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   600
		TUint64 eMmcPartitionSize = eMmcPartitionSizeInSectors * KSectorSize;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   601
		
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   602
		TPartitionEntry& part = iPartitionInfo->iEntry[partitionCount - 1];
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   603
	
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   604
		// Check that the eMmcPartition address space boundary is not exceeded by the last partition
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   605
		if(part.iPartitionBaseAddr + part.iPartitionLen > eMmcPartitionSize)
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   606
			{
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   607
			__KTRACE_OPT(KPBUSDRV, Kern::Printf("Mmc: Partition #%d exceeds eMmc address space", partitionCount));
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   608
			r = KErrCorrupt;
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   609
			}
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   610
		}
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   611
		
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   612
	if(r == KErrNone)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   613
		{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   614
		// Go through all BB5 partition entries on this eMMC partition and check boundaries
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   615
		for(TInt i = partitionCount - 1; i > iPartitionInfo->iPartitionCount; i--)
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   616
			{
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   617
			const TPartitionEntry& curr = iPartitionInfo->iEntry[i];
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   618
			TPartitionEntry& prev = iPartitionInfo->iEntry[i-1];
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   619
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   620
			// Check if partitions overlap
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   621
			if(curr.iPartitionBaseAddr < (prev.iPartitionBaseAddr + prev.iPartitionLen))
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   622
				{
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   623
				__KTRACE_OPT(KPBUSDRV, Kern::Printf("Mmc: Overlapping partitions - check #%d", i));
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   624
				r = KErrCorrupt;
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   625
				}
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   626
			}
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   627
		}
202
9aca3be14c27 201027_08
hgs
parents: 90
diff changeset
   628
#endif // _DEBUG_CHECK_PARTITION_
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   629
		
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   630
	if(r == KErrNone)
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   631
		{
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   632
		iPartitionInfo->iPartitionCount = partitionCount;
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   633
		iPartitionInfo->iMediaSizeInBytes = iCard->DeviceSize64();
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   634
		}
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   635
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   636
	__KTRACE_OPT(KPBUSDRV, Kern::Printf("<Mmc:PartitionInfo (C:%d)", partitionCount));
287
ddfd5aa0d58f 201041_01
hgs
parents: 254
diff changeset
   637
	return r;
52
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   638
	}
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   639
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   640
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   641
// End - DBB5PartitionInfo
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   642
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   643
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   644
EXPORT_C DEMMCPartitionInfo* CreateEmmcPartitionInfo()
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   645
	{
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   646
	return new DBB5PartitionInfo;
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   647
	}
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   648
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   649
DECLARE_STANDARD_EXTENSION()
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   650
	{
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   651
	return KErrNone;
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   652
	}
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   653
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   654
//	End of File
2d65c2f76d7b Revision: 201005
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   655