# HG changeset patch # User John Imhofe # Date 1278412858 -3600 # Node ID 83c58605f0499afa2b14eb38eb0f462b9792f021 # Parent cc88aabd867b5229d63d9b98d4cfc91904ec4618# Parent bbf8bed59bcb1a95ee0601f37e6fb13c52c03470 Merge Revision 201023 into RCL_3 trunk diff -r cc88aabd867b -r 83c58605f049 bsptemplate/asspandvariant/template_variant/hal/config.hcf --- a/bsptemplate/asspandvariant/template_variant/hal/config.hcf Wed Jun 09 10:31:37 2010 +0100 +++ b/bsptemplate/asspandvariant/template_variant/hal/config.hcf Tue Jul 06 11:40:58 2010 +0100 @@ -99,3 +99,4 @@ ECustomResourceDrive : set = 0 EDisplayNumberOfScreens=0 ENumCpus=GetNumCpus +EDigitiserOrientation : set = DigitiserOrientation diff -r cc88aabd867b -r 83c58605f049 halservices/hal/inc/hal_data.h --- a/halservices/hal/inc/hal_data.h Wed Jun 09 10:31:37 2010 +0100 +++ b/halservices/hal/inc/hal_data.h Tue Jul 06 11:40:58 2010 +0100 @@ -114,7 +114,7 @@ @see HALData::TCPU */ ECPU, - + /** A revision number for the CPU architecture. @@ -1097,19 +1097,24 @@ Serial number of this board */ ESerialNumber, - - + /** Interrupt used by sampling profiler - applicable for SMP only. Each CPU_i is interrupted by interrupt number ECpuProfilingInterrupt + i */ ECpuProfilingDefaultInterruptBase, - /** Number of processors present on the device. Returns 1 on unicore. This number is constant and does not take account of power management */ ENumCpus, + /** + The orientation of the Digitiser. Usually mirrors device orientation. + + @see TDigitiserOrientation for allowed values + @capability WriteDeviceData needed to Set this attribute + */ + EDigitiserOrientation, /* * NOTE: @@ -1328,6 +1333,29 @@ EPowerBackupStatus_Good, }; + + /** + Describes the orientation of the screen digitiser, usually mirrors the + device orientation not necessarily the display rotation as this might be + limited to upright and left 90 only. The values in degrees measures + the anti-clockwise angle from the left edge of the digitiser from the + normal default position of the device. + + User-side clients can use attribute to inform the digitiser driver of the + digitiser orientation. The driver may then use this information to adjust + X.Y sampling depending on input pointer type. + + @see HALData::TAttribute + */ + enum TDigitiserOrientation + { + EDigitiserOrientation_default, ///< Driver using build-in default + EDigitiserOrientation_000, ///< Device normal 'make-call' position + EDigitiserOrientation_090, ///< Device rotated left 90 degrees + EDigitiserOrientation_180, ///< Device rotated 180 degrees + EDigitiserOrientation_270 ///< Device rotated right 90 degrees + }; + }; #endif diff -r cc88aabd867b -r 83c58605f049 halservices/hal/rom/hal.hby --- a/halservices/hal/rom/hal.hby Wed Jun 09 10:31:37 2010 +0100 +++ b/halservices/hal/rom/hal.hby Tue Jul 06 11:40:58 2010 +0100 @@ -1,4 +1,4 @@ -// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of the License "Eclipse Public License v1.0" @@ -139,3 +139,5 @@ #define ESerialNumber 117 #define ECpuProfilingDefaultInterruptBase 118 #define ENumCpus 119 +#define EDigitiserOrientation 120 + diff -r cc88aabd867b -r 83c58605f049 halservices/hal/src/userhal.cpp --- a/halservices/hal/src/userhal.cpp Wed Jun 09 10:31:37 2010 +0100 +++ b/halservices/hal/src/userhal.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -1,4 +1,4 @@ -// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 1999-2010 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of the License "Eclipse Public License v1.0" @@ -41,7 +41,8 @@ EInvalidAttribKeybd=13, EInvalidAttribPen=14, EInvalidAttribMouse=15, - EInvalidAttrib3DPointer=16 + EInvalidAttrib3DPointer=16, + EInvalidAttribDigitiserOrientation=17 }; void Panic(THalUserHalPanic aPanic) @@ -929,3 +930,27 @@ return KErrNone; } +// EDigitiserOrientation +#if defined(_DEBUG) +TInt DigitiserOrientation(TInt aDeviceNumber, TInt aAttrib, TBool aSet, TAny* aInOut) +#else +TInt DigitiserOrientation(TInt aDeviceNumber, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) +#endif + { + __ASSERT_DEBUG(aAttrib == HALData::EDigitiserOrientation, Panic(EInvalidAttribDigitiserOrientation)); + __ASSERT_DEBUG(aDeviceNumber >= 0, Panic(EInvalidAttribDigitiserOrientation)); + + if (aSet) + { + //Set + if ( ((TInt)aInOut) < 0 || ((TInt)aInOut) > HALData::EDigitiserOrientation_270) + return KErrArgument; + return UserSvr::HalFunction(EHalGroupDigitiser, EDigitiserOrientation, aInOut, (TAny*)ETrue, aDeviceNumber); + } + + //Get + __ASSERT_DEBUG(aInOut != 0, Panic(EInvalidAttribDigitiserOrientation)); + return UserSvr::HalFunction(EHalGroupDigitiser, EDigitiserOrientation, aInOut, (TAny*)EFalse, aDeviceNumber); + } + + diff -r cc88aabd867b -r 83c58605f049 halservices/hal/tsrc/t_newhal.cpp --- a/halservices/hal/tsrc/t_newhal.cpp Wed Jun 09 10:31:37 2010 +0100 +++ b/halservices/hal/tsrc/t_newhal.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -144,7 +144,7 @@ _S("ESerialNumber"), _S("ECpuProfilingDefaultInterruptBase"), _S("ENumCpus"), - + _S("EDigitiserOrientation") }; TInt MatchAbbrev(const TDesC& anInput, const TText** aList, TInt aListLen) @@ -159,7 +159,7 @@ if (r>=0) { // substring matches - if (r==0 && list_entry.Length()==anInput.Length()) + if (r==0 && list_entry.Length()==anInput.Length()) { // exact match return i; diff -r cc88aabd867b -r 83c58605f049 kernel/eka/drivers/locmedia/locmedia.cpp --- a/kernel/eka/drivers/locmedia/locmedia.cpp Wed Jun 09 10:31:37 2010 +0100 +++ b/kernel/eka/drivers/locmedia/locmedia.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -458,10 +458,12 @@ if (r==KErrNone) { __TRACE_TIMING(2); - OstTraceDefExt4( OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DLOCALDRIVE_REQUEST_READ, "ERead iDriveNumber=%d; length=0x%x; position=0x%x; TLocDrvRequest Object=0x%x", (TInt) iDrive->iDriveNumber, (TUint) m.Length(), (TUint) m.Pos(), (TUint) &m); + OstTraceDefExt2( OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DLOCALDRIVE_REQUEST_READ, "ERead iDriveNumber=%d; TLocDrvRequest Object=0x%x", (TInt) iDrive->iDriveNumber, (TUint) &m); + OstTraceDefExt4( OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DLOCALDRIVE_REQUEST_READ2, "ERead length=%x:%x, pos=%x:%x", (TUint) I64HIGH(m.Length()), (TUint) I64LOW(m.Length()), (TUint) I64HIGH(m.Pos()), (TUint) I64LOW(m.Pos())); r=iDrive->Request(m); __TRACE_TIMING(3); - OstTraceDefExt4( OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DLOCALDRIVE_REQUEST_READ_RETURN, "ERead Return iDriveNumber=%d; length=0x%x; position=0x%x; TLocDrvRequest Object=0x%x", (TInt) iDrive->iDriveNumber, (TUint) m.Length(), (TUint) m.Pos(), (TUint) &m ); + OstTraceDefExt2( OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DLOCALDRIVE_REQUEST_READ_RETURN, "ERead Return iDriveNumber=%d; TLocDrvRequest Object=0x%x", (TInt) iDrive->iDriveNumber, (TUint) &m ); + OstTraceDefExt4( OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DLOCALDRIVE_REQUEST_READ_RETURN2, "ERead Return length=%x:%x, pos=%x:%x", (TUint) I64HIGH(m.Length()), (TUint) I64LOW(m.Length()), (TUint) I64HIGH(m.Pos()), (TUint) I64LOW(m.Pos())); } m.CloseRemoteThread(); break; @@ -472,9 +474,11 @@ r=m.ProcessMessageData(a1); if (r==KErrNone) { - OstTraceDefExt4( OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DLOCALDRIVE_REQUEST_WRITE, "EWrite iDriveNumber=%d; length=0x%x; position=0x%x; TLocDrvRequest Object=0x%x", (TInt) iDrive->iDriveNumber, (TUint) m.Length(), (TUint) m.Pos(), (TUint) &m ); + OstTraceDefExt2( OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DLOCALDRIVE_REQUEST_WRITE, "EWrite iDriveNumber=%d; TLocDrvRequest Object=0x%x", (TInt) iDrive->iDriveNumber, (TUint) &m ); + OstTraceDefExt4( OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DLOCALDRIVE_REQUEST_WRITE2, "EWrite length=%x:%x, pos=%x:%x", (TUint) I64HIGH(m.Length()), (TUint) I64LOW(m.Length()), (TUint) I64HIGH(m.Pos()), (TUint) I64LOW(m.Pos())); r=iDrive->Request(m); - OstTraceDefExt4( OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DLOCALDRIVE_REQUEST_WRITE_RETURN, "EWrite Return iDriveNumber=%d; length=0x%x; position=0x%x; TLocDrvRequest Object=0x%x", (TInt) iDrive->iDriveNumber, (TUint) m.Length(), (TUint) m.Pos(), (TUint) &m ); + OstTraceDefExt2( OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DLOCALDRIVE_REQUEST_WRITE_RETURN, "EWrite Return iDriveNumber=%d; TLocDrvRequest Object=0x%x", (TInt) iDrive->iDriveNumber, (TUint) &m ); + OstTraceDefExt4( OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DLOCALDRIVE_REQUEST_WRITE_RETURN2, "EWrite Return length=%x:%x, pos=%x:%x", (TUint) I64HIGH(m.Length()), (TUint) I64LOW(m.Length()), (TUint) I64HIGH(m.Pos()), (TUint) I64LOW(m.Pos())); } m.CloseRemoteThread(); break; @@ -1412,7 +1416,7 @@ OstTraceFunctionEntry1( TLOCDRVREQUEST_CHECKANDADJUSTFORPARTITION_ENTRY, this ); TLocDrv& d=*Drive(); __KTRACE_OPT(KLOCDRV,Kern::Printf("CheckAndAdjustForPartition drive %d partition len %lx",d.iDriveNumber,d.iPartitionLen)); - OstTraceExt2( TRACE_INTERNALS, TLOCDRVREQUEST_CHECKANDADJUSTFORPARTITION1, "iDriveNumber=%d; partition length=0x%lx", d.iDriveNumber, (TInt) d.iPartitionLen ); + OstTraceExt3( TRACE_INTERNALS, TLOCDRVREQUEST_CHECKANDADJUSTFORPARTITION1, "iDriveNumber=%d; partition length=%x:%x", d.iDriveNumber, (TInt) I64HIGH (d.iPartitionLen), (TInt) I64LOW (d.iPartitionLen)); Flags() |= EAdjusted; TInt r; switch (Id()) @@ -1433,7 +1437,7 @@ } case DLocalDrive::EEnlarge: __KTRACE_OPT(KLOCDRV,Kern::Printf("Enlarge request %lx",Length())); - OstTrace1( TRACE_INTERNALS, TLOCDRVREQUEST_CHECKANDADJUSTFORPARTITION2, "Enlarge request=0x%lx", Length() ); + OstTraceExt2( TRACE_INTERNALS, TLOCDRVREQUEST_CHECKANDADJUSTFORPARTITION2, "Enlarge request=%x:%x", (TInt) I64HIGH(Length()), (TInt) I64LOW(Length()) ); if (Length()>KMaxTInt) r = KErrArgument; else @@ -1441,7 +1445,7 @@ break; case DLocalDrive::EReduce: __KTRACE_OPT(KLOCDRV,Kern::Printf("Reduce request %lx@%lx",Length(),Pos())); - OstTraceExt2( TRACE_INTERNALS, TLOCDRVREQUEST_CHECKANDADJUSTFORPARTITION3, "Reduce request length=0x%lx; position=0x%lx", (TUint) Length(), (TUint) Pos() ); + OstTraceExt4( TRACE_INTERNALS, TLOCDRVREQUEST_CHECKANDADJUSTFORPARTITION3, "Reduce request length=%x:%x; position=%x:%x", (TUint) I64HIGH(Length()), (TUint) I64LOW(Length()), (TUint) I64HIGH(Pos()), (TUint) I64LOW(Pos()) ); if (Pos()+Length()>d.iPartitionLen) r = KErrArgument; else @@ -1449,7 +1453,7 @@ break; case DLocalDrive::EFormat: __KTRACE_OPT(KLOCDRV,Kern::Printf("Format request %lx@%lx",Length(),Pos())); - OstTraceExt2( TRACE_INTERNALS, TLOCDRVREQUEST_CHECKANDADJUSTFORPARTITION4, "Format request length=0x%lx; position=0x%lx", (TUint) Length(), (TUint) Pos() ); + OstTraceExt4( TRACE_INTERNALS, TLOCDRVREQUEST_CHECKANDADJUSTFORPARTITION4, "Format request length=%x:%x; position=%x:%x", (TUint) I64HIGH(Length()),(TUint) I64LOW(Length()), (TUint) I64HIGH(Pos()), (TUint) I64LOW(Pos()) ); if (!(DriverFlags() & RLocalDrive::ELocDrvWholeMedia)) { if (Pos()>d.iPartitionLen) @@ -1477,7 +1481,7 @@ // Otherwise the media driver adjust it internally case DMediaPagingDevice::ECodePageInRequest: __KTRACE_OPT(KLOCDPAGING,Kern::Printf("Adjusted Paging read request %lx@%lx",Length(),Pos())); - OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_DEMANDPAGING, TLOCDRVREQUESTCHECKANDADJUSTFORPARTITION5, "Adjusted Paging read request length=0x%lx; position=0x%lx", (TUint) Length(), (TUint) Pos()); + OstTraceDefExt4(OST_TRACE_CATEGORY_RND, TRACE_DEMANDPAGING, TLOCDRVREQUESTCHECKANDADJUSTFORPARTITION5, "Adjusted Paging read request length=%x:%x; position=%x%:%x", (TUint) I64HIGH(Length()), (TUint) I64LOW(Length()), (TUint) I64HIGH(Pos()), (TUint) I64LOW(Pos())); if (Pos()+Length()>d.iPartitionLen) { r = KErrArgument; @@ -1490,7 +1494,7 @@ default: // read or write or fragment __KTRACE_OPT(KLOCDRV,Kern::Printf("R/W request %lx@%lx",Length(),Pos())); - OstTraceExt2( TRACE_INTERNALS, TLOCDRVREQUEST_CHECKANDADJUSTFORPARTITION6, "Read/Write request length=0x%x; position=0x%x", (TUint) Length(), (TUint) Pos() ); + OstTraceExt4( TRACE_INTERNALS, TLOCDRVREQUEST_CHECKANDADJUSTFORPARTITION6, "Read/Write request length=%x:%x; position=%x:%x", (TUint) I64HIGH(Length()), (TUint) I64LOW(Length()), (TUint) I64HIGH(Pos()), (TUint) I64LOW(Pos())); if (DriverFlags() & RLocalDrive::ELocDrvWholeMedia) { if (d.iMedia && d.iMedia->iDriver && Pos()+Length() > d.iMedia->iDriver->iTotalSizeInBytes) @@ -1795,7 +1799,8 @@ __KTRACE_OPT(KLOCDRV,Kern::Printf("DPrimaryMediaBase(%d)::Request(%08x)",iMediaId,&aReq)); __KTRACE_OPT(KLOCDRV,Kern::Printf("this=%x, ReqId=%d, Pos=%lx, Len=%lx, remote thread %O",this,aReq.Id(),aReq.Pos(),aReq.Length(),aReq.RemoteThread())); - OstTraceDefExt4(OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DPRIMARYMEDIABASE_REQUEST, "reqId=%d; length=0x%lx; position=0x%lx; remote thread=0x%x", (TInt) aReq.Id(), (TUint) aReq.Length(), (TUint) aReq.Pos(), (TUint) aReq.RemoteThread()); + OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DPRIMARYMEDIABASE_REQUEST, "reqId=%d; remote thread=0x%x", (TInt) aReq.Id(), (TUint) aReq.RemoteThread()); + OstTraceDefExt4(OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DPRIMARYMEDIABASE_REQUEST2, "length=%x:%x; position=%x:%x", (TUint) I64HIGH(aReq.Length()), (TUint) I64LOW(aReq.Length()), (TUint) I64HIGH(aReq.Pos()), (TUint) I64LOW(aReq.Pos())); TInt reqId = aReq.Id(); @@ -2088,7 +2093,8 @@ fragment.Flags() = aReq.Flags(); __KTRACE_OPT2(KLOCDPAGING,KLOCDRV,Kern::Printf("Send fragment (0x%08x) type(%d), length(0x%x), offset within original req(0x%x), pos in media(0x%lx)",&fragment,fragment.Id(), pinnedLen, pos, fragment.Pos())); - OstTraceDefExt5(OST_TRACE_CATEGORY_RND, TRACE_DEMANDPAGING, DPRIMARYMEDIABASE_PINFRAGMENTSENDRECEIVE3, "Send fragment 0x%08x; type=%d; length=0x%x; offset within original req=0x%x; position in media=0x%lx", (TUint) &fragment, (TInt) fragment.Id(), (TUint) pinnedLen, (TUint) pos, (TUint) fragment.Pos()); + OstTraceDefExt4(OST_TRACE_CATEGORY_RND, TRACE_DEMANDPAGING, DPRIMARYMEDIABASE_PINFRAGMENTSENDRECEIVE3, "Send fragment 0x%08x; type=%d; length=0x%x; offset within original req=0x%x", (TUint) &fragment, (TInt) fragment.Id(), (TUint) pinnedLen, (TUint) pos); + OstTraceDefExt3(OST_TRACE_CATEGORY_RND, TRACE_DEMANDPAGING, DPRIMARYMEDIABASE_PINFRAGMENTSENDRECEIVE4, "Send fragment 0x%08x; position in media=%x:%x",(TUint) &fragment, (TUint) I64HIGH(fragment.Pos()), (TUint) I64LOW(fragment.Pos())); #ifdef BTRACE_PAGING_MEDIA TInt buf[4]; @@ -2503,7 +2509,7 @@ DMedia* media=pL->iMedia; TInt r=KErrNone; - OstTraceDefExt3( OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DPRIMARYMEDIABASE_DOREQUEST, "req Id=%d; length=0x%x; position=0x%x", (TInt) m.Id(), (TInt) m.Length(), (TInt) m.Pos()); + OstTraceDefExt5( OST_TRACE_CATEGORY_RND, TRACE_REQUEST, DPRIMARYMEDIABASE_DOREQUEST, "req Id=%d; length=%x:%x; position=%x:%x", (TInt) m.Id(), (TUint) I64HIGH(m.Length()), (TUint) I64LOW(m.Length()), (TUint) I64HIGH(m.Pos()), (TUint) I64LOW(m.Pos()) ); // re-open this drive's media driver ? if (m.iValue == DLocalDrive::EForceMediaChange) @@ -4010,7 +4016,8 @@ m.Flags() |= TLocDrvRequest::EPhysAddrOnly; __KTRACE_OPT2(KLOCDRV,KLOCDPAGING,Kern::Printf("ReqId=%d, Pos=0x%lx, Len=0x%lx, remote Des 0x%x",m.Id(),m.Pos(),m.Length(),m.RemoteDes())); - OstTraceDefExt4(OST_TRACE_CATEGORY_RND, TRACE_DEMANDPAGING, DMEDIAPAGINGDEVICE_READ2, "reqId=%d; position=0x%lx; length=0x%x; remote Des=0x%x", (TInt) m.Id(), (TUint) m.Pos(), (TUint) m.Length(), (TUint) m.RemoteDes()); + OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_DEMANDPAGING, DMEDIAPAGINGDEVICE_READ2, "reqId=%d; remote Des=0x%x", (TInt) m.Id(), (TUint) m.RemoteDes()); + OstTraceDefExt4(OST_TRACE_CATEGORY_RND, TRACE_DEMANDPAGING, DMEDIAPAGINGDEVICE_READ3, "length=%x:%x, pos=%x:%x", (TUint) I64HIGH(m.Length()), (TUint) I64LOW(m.Length()), (TUint) I64HIGH(m.Pos()), (TUint) I64LOW(m.Pos())); __ASSERT_DEBUG(iPrimaryMedia->iBody, LOCM_FAULT()); TInt mediaChanges = iPrimaryMedia->iBody->iMediaChanges; @@ -4143,7 +4150,8 @@ m.DriverFlags() = 0; __KTRACE_OPT2(KLOCDRV,KLOCDPAGING,Kern::Printf("ReqId=%d, Pos=0x%lx, Len=0x%lx, remote Des 0x%x",m.Id(),m.Pos(),m.Length(),m.RemoteDes())); - OstTraceDefExt4(OST_TRACE_CATEGORY_RND, TRACE_DEMANDPAGING, DMEDIAPAGINGDEVICE_WRITE2, "reqId=%d; position=0x%lx; length=0x%lx; remote Des=0x%x", (TInt) m.Id(), (TUint) m.Pos(), (TUint) m.Length(), (TUint) m.RemoteDes()); + OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_DEMANDPAGING, DMEDIAPAGINGDEVICE_WRITE2, "reqId=%d; remote Des=0x%x", (TInt) m.Id(), (TUint) m.RemoteDes()); + OstTraceDefExt4(OST_TRACE_CATEGORY_RND, TRACE_DEMANDPAGING, DMEDIAPAGINGDEVICE_WRITE3, "length=%x:%x, pos=%x:%x", (TUint) I64HIGH(m.Length()), (TUint) I64LOW(m.Length()), (TUint) I64HIGH(m.Pos()), (TUint) I64LOW(m.Pos())); __ASSERT_DEBUG(iPrimaryMedia->iBody, LOCM_FAULT()); TInt mediaChanges = iPrimaryMedia->iBody->iMediaChanges; @@ -4238,8 +4246,8 @@ m.RemoteDesOffset() = 0; // pre-aligned m.DriverFlags()=0; __KTRACE_OPT2(KLOCDRV,KLOCDPAGING,Kern::Printf("ReqId=%d, Pos=0x%lx, Len=0x%lx, remote Des 0x%x",m.Id(),m.Pos(),m.Length(),m.RemoteDes())); - OstTraceDefExt4(OST_TRACE_CATEGORY_RND, TRACE_DEMANDPAGING, DMEDIAPAGINGDEVICE_DELETENOTIFY2 , "reqId=%d; position=0x%lx; length=0x%lx; remote Des=0x%x", m.Id(), m.Pos(), m.Length(), (TUint) m.RemoteDes()); - + OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_DEMANDPAGING, DMEDIAPAGINGDEVICE_DELETENOTIFY2 , "reqId=%d; remote Des=0x%x", m.Id(),(TUint) m.RemoteDes()); + OstTraceDefExt4(OST_TRACE_CATEGORY_RND, TRACE_DEMANDPAGING, DMEDIAPAGINGDEVICE_DELETENOTIFY3 , "length=%x:%x, pos=%x:%x", (TUint) I64HIGH(m.Length()), (TUint) I64LOW(m.Length()), (TUint) I64HIGH(m.Pos()), (TUint) I64LOW(m.Pos())); // send request aynchronously as we don't particularly care about the result // and waiting would slow down the thread taking the page fault iPrimaryMedia->RequestCountInc(); diff -r cc88aabd867b -r 83c58605f049 kernel/eka/drivers/medmmc/medmmc.cpp --- a/kernel/eka/drivers/medmmc/medmmc.cpp Wed Jun 09 10:31:37 2010 +0100 +++ b/kernel/eka/drivers/medmmc/medmmc.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -759,7 +759,7 @@ TUint32 length(I64LOW(iCurrentReq->Length())); __KTRACE_OPT(KPBUSDRV, Kern::Printf(">mmd:dr:0x%lx,0x%x", pos, length)); - OstTraceExt2( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_DO_READ, "Position=0x%lx; Length=0x%x", (TUint) pos, (TUint) length); + OstTraceExt3( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_DO_READ, "Position=%x:%x; Length=0x%x", (TUint) I64HIGH(pos), (TUint) I64LOW(pos), (TUint) length); __ASSERT_DEBUG(CurrentRequest() == EMReqIdle, Panic(EDRInUse)); __ASSERT_DEBUG(pos < TotalSizeInBytes(), Panic(EDRStart)); __ASSERT_DEBUG(iCurrentReq->Length() >= 0, Panic(EDRNotPositive)); @@ -830,7 +830,7 @@ // { OstTraceFunctionEntryExt( DMMCMEDIADRIVERFLASH_LAUNCHREAD_ENTRY, this ); - OstTraceExt2( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_LAUNCHREAD, "position=0x%lx; length=0x%x", (TUint) iCurrentReq->Pos(), (TUint) I64LOW(iCurrentReq->Length())); + OstTraceExt3( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_LAUNCHREAD, "position=%x:%x; length=0x%x", (TUint) I64HIGH(iCurrentReq->Pos()), (TUint) I64LOW(iCurrentReq->Pos()) ,(TUint) I64LOW(iCurrentReq->Length())); __KTRACE_OPT(KPBUSDRV, Kern::Printf(">mmd:lr:0x%lx,0x%x", aStart, aLength)); __ASSERT_DEBUG(TotalSizeInBytes() > aStart, Panic(ELRStart)); __ASSERT_DEBUG(aLength > 0, Panic(ELRNotPositive)); @@ -896,7 +896,7 @@ { OstTraceFunctionEntry1( DMMCMEDIADRIVERFLASH_LAUNCHDBREAD_ENTRY, this ); __KTRACE_OPT(KPBUSDRV, Kern::Printf(">mmd:ldbr:0x%lx,0x%x", iReqCur, I64LOW(iReqEnd - iReqCur))); - OstTraceExt2( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_LAUNCHDBREAD, "position=0x%lx; length=0x%x", (TInt) iReqCur, (TInt) I64LOW(iReqEnd - iReqCur)); + OstTraceExt3( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_LAUNCHDBREAD, "position=%x:%x; length=0x%x", (TInt) I64HIGH(iReqCur), (TInt) I64LOW(iReqCur), (TInt) I64LOW(iReqEnd - iReqCur)); __ASSERT_DEBUG(TotalSizeInBytes() > iReqCur, Panic(ELRStart)); __ASSERT_DEBUG(I64LOW(iReqEnd - iReqCur) > 0, Panic(ELRNotPositive)); __ASSERT_DEBUG(TotalSizeInBytes() >= iReqEnd, Panic(ELREnd)); @@ -957,7 +957,7 @@ // { OstTraceFunctionEntryExt( DMMCMEDIADRIVERFLASH_LAUNCHPHYSREAD_ENTRY, this ); - OstTraceExt2( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_LAUNCHPHYSREAD, "position=0x%lx; length=0x%x", (TInt) iReqCur, (TInt) I64LOW(iReqEnd - iReqCur)); + OstTraceExt3( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_LAUNCHPHYSREAD, "position=%x:%x; length=0x%x", (TInt) I64HIGH(iReqCur), (TInt) I64LOW(iReqCur), (TInt) I64LOW(iReqEnd - iReqCur)); __KTRACE_OPT(KPBUSDRV, Kern::Printf(">mmd:physr:0x%lx,0x%x", aStart, aLength)); __ASSERT_DEBUG(TotalSizeInBytes() > aStart, Panic(ELRStart)); __ASSERT_DEBUG(aLength > 0, Panic(ELRNotPositive)); @@ -1049,7 +1049,7 @@ const TUint32 length = I64LOW(iCurrentReq->Length()); __KTRACE_OPT(KPBUSDRV, Kern::Printf(">mmd:dw:0x%lx,0x%x", pos, length)); - OstTraceExt2( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_DOWRITE, "position=0x%lx; length=0x%x", (TUint) pos, (TUint) length); + OstTraceExt3( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_DOWRITE, "position=%x:%x; length=0x%x", (TUint) I64HIGH(pos), (TUint) I64LOW(pos), (TUint) length); __ASSERT_DEBUG(CurrentRequest() == EMReqIdle, Panic(EDWInUse)); __ASSERT_DEBUG(pos < TotalSizeInBytes(), Panic(EDWStart)); __ASSERT_DEBUG(length > 0, Panic(EDWNotPositive)); @@ -1084,7 +1084,7 @@ const TUint32 length = I64LOW(iCurrentReq->Length()); __KTRACE_OPT(KPBUSDRV, Kern::Printf(">mmd:df:0x%lx,0x%x", pos, length)); - OstTraceExt2( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_DOFORMAT, "position=0x%lx; length=0x%x", (TUint) pos, (TUint) length); + OstTraceExt3( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_DOFORMAT, "position=%x:%x; length=0x%x", (TUint) I64HIGH(pos), (TUint) I64LOW(pos), (TUint) length); __ASSERT_DEBUG(CurrentRequest() == EMReqIdle, Panic(EDFInUse)); __ASSERT_DEBUG(pos < TotalSizeInBytes(), Panic(EDFStart)); __ASSERT_DEBUG(length > 0, Panic(EDFNotPositive)); @@ -1125,7 +1125,7 @@ // { OstTraceFunctionEntryExt( DMMCMEDIADRIVERFLASH_LAUNCHFORMAT_ENTRY, this ); - OstTraceExt2( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_LAUNCHFORMAT, "position=0x%lx; length=0x%x", (TInt) iReqCur, (TInt) I64LOW(iReqEnd - iReqCur)); + OstTraceExt3( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_LAUNCHFORMAT, "position=%x:%x; length=0x%x", (TInt) I64HIGH(iReqCur), (TInt) I64LOW(iReqCur), (TInt) I64LOW(iReqEnd - iReqCur)); __KTRACE_OPT(KPBUSDRV, Kern::Printf(">mmd:lf:0x%lx,0x%x", aStart, aLength)); __ASSERT_DEBUG(TotalSizeInBytes() > aStart, Panic(ELFStart)); __ASSERT_DEBUG((aStart & iBlkMsk) == 0, Panic(ELWFmtStAlign)); @@ -1224,7 +1224,7 @@ // { OstTraceExt4(TRACE_FLOW, DMMCMEDIADRIVERFLASH_LAUNCHWRITE_ENTRY, "DMmcMediaDriverFlash::LaunchWrite;aStart=%Ld;aLength=%x;aMedReq=%d;this=%x", aStart, (TUint) aLength, (TInt) aMedReq, (TUint) this); - OstTraceExt2( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_LAUNCHWRITE, "position=0x%lx; length=0x%x", (TInt) iReqCur, (TInt) I64LOW(iReqEnd - iReqCur)); + OstTraceExt3( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_LAUNCHWRITE, "position=%x:%x; length=0x%x", (TInt) I64HIGH(iReqCur), (TInt) I64LOW(iReqCur),(TInt) I64LOW(iReqEnd - iReqCur)); __KTRACE_OPT(KPBUSDRV, Kern::Printf("\n>mmd:lw:0x%lx,%d,%d", aStart, aLength, aMedReq)); __ASSERT_DEBUG(aMedReq == EMReqWrite || aMedReq == EMReqFormat, Panic(ELWRequest)); __ASSERT_DEBUG(TotalSizeInBytes() > aStart, Panic(ELWStart)); @@ -2896,7 +2896,7 @@ { OstTraceFunctionEntryExt( DMMCMEDIADRIVERFLASH_READDATAUNTILCACHEEXHAUSTED_ENTRY, this ); __KTRACE_OPT(KPBUSDRV, Kern::Printf(">mmd:rdc:%x,%x", iReqCur, iReqEnd)); - OstTraceExt2( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_READDATAUNTILCACHEEXHAUSTED, "iReqCur=0x%x; iReqEnd=0x%x", (TUint) iReqCur, (TUint) iReqEnd ); + OstTraceExt3( TRACE_INTERNALS, DMMCMEDIADRIVERFLASH_READDATAUNTILCACHEEXHAUSTED, "iReqCur=%x:%x; iReqEnd=0x%x", (TUint) I64HIGH(iReqCur), (TUint) I64LOW(iReqCur), (TUint) iReqEnd ); if ( iCurrentReq->IsPhysicalAddress() #if defined(__DEMAND_PAGING__) && !defined(__WINS__) diff -r cc88aabd867b -r 83c58605f049 kernel/eka/drivers/xyin/d_xyin.cpp --- a/kernel/eka/drivers/xyin/d_xyin.cpp Wed Jun 09 10:31:37 2010 +0100 +++ b/kernel/eka/drivers/xyin/d_xyin.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -1,4 +1,4 @@ -// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 1998-2010 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of the License "Eclipse Public License v1.0" @@ -19,6 +19,7 @@ #include #include +#include _LIT(KLitDigitiser,"Digitiser"); @@ -50,7 +51,8 @@ : DPowerHandler(KLitDigitiser), iMsgQ(rxMsg,this,NULL,1), iSampleDfc(sampleDfc,this,5), - iPenUpDfc(penUpDfc,this,5) + iPenUpDfc(penUpDfc,this,5), + iOrientation(HALData::EDigitiserOrientation_default) { // iBufferIndex=0; // iLastPos=TPoint(0,0); @@ -358,6 +360,26 @@ case EDigitiserHalXYState: kumemput32(a1, (TBool*)&iPointerOn, sizeof(TBool)); break; + + // a2 = TBool aSet (ETrue for setting, EFalse for retrieval) + // a1 = TDigitizerOrientation (set) + // a1 = &TDigitizerOrientation (get) + case EDigitiserOrientation: + if ((TBool)a2) + { + // Set the orientation attribute + // In case user thread, check it has WDD capability + if(!Kern::CurrentThreadHasCapability(ECapabilityWriteDeviceData,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDigitiserOrientation"))) + return KErrPermissionDenied; + iOrientation = (TInt)a1; + } + else + { + // Get the orientation attribute, safe copy it into user memory + kumemput32(a1, &iOrientation, sizeof(TInt)); + } + break; + default: r=KErrNotSupported; break; diff -r cc88aabd867b -r 83c58605f049 kernel/eka/include/drivers/xyin.h --- a/kernel/eka/include/drivers/xyin.h Wed Jun 09 10:31:37 2010 +0100 +++ b/kernel/eka/include/drivers/xyin.h Tue Jul 06 11:40:58 2010 +0100 @@ -1,4 +1,4 @@ -// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 1998-2010 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of the License "Eclipse Public License v1.0" @@ -27,6 +27,7 @@ #include #include + #ifdef _DEBUG //#define __DIGITISER_DEBUG1__ //#define __DIGITISER_DEBUG2__ @@ -180,6 +181,7 @@ TState iState; TInt iCount; TUint8 iPointerOn; + TInt iOrientation; // HALData::TDigitizerOrientation }; diff -r cc88aabd867b -r 83c58605f049 kernel/eka/include/e32ver.h --- a/kernel/eka/include/e32ver.h Wed Jun 09 10:31:37 2010 +0100 +++ b/kernel/eka/include/e32ver.h Tue Jul 06 11:40:58 2010 +0100 @@ -28,7 +28,7 @@ const TInt KE32MajorVersionNumber=2; const TInt KE32MinorVersionNumber=0; -const TInt KE32BuildVersionNumber=2122; +const TInt KE32BuildVersionNumber=2127; const TInt KMachineConfigurationMajorVersionNumber=1; const TInt KMachineConfigurationMinorVersionNumber=0; diff -r cc88aabd867b -r 83c58605f049 kernel/eka/include/u32hal.h --- a/kernel/eka/include/u32hal.h Wed Jun 09 10:31:37 2010 +0100 +++ b/kernel/eka/include/u32hal.h Tue Jul 06 11:40:58 2010 +0100 @@ -1,4 +1,4 @@ -// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 1995-2010 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of the License "Eclipse Public License v1.0" @@ -1989,7 +1989,23 @@ @see TPckgBuf @see TDigitiserInfoV02 */ - EDigitiserHal3DInfo + EDigitiserHal3DInfo, + + /** + Get or sets the digitiser driver's current orientation property. + Requirements of the HAL function handler's 2nd, 3rd and 4th parameters: + + - TInt aFunction : This enum value. + - TAny* a1 : if Set, a TDigitiserOrientation value the driver should now use + : If Get, a pointer to a TDigitiserOrientation. The HAL function + : needs to set its value to the current value used in the driver. + - TAny* a2 : Cast to a TInt. Should be assigned the value + : EFalse - Get property; ETrue - Set property + + @see HALData::TDigitiserOrientation + @capability WriteDeviceData To set the property, None to read + */ + EDigitiserOrientation }; diff -r cc88aabd867b -r 83c58605f049 kernel/eka/memmodel/epoc/flexible/mmu/mpager.cpp --- a/kernel/eka/memmodel/epoc/flexible/mmu/mpager.cpp Wed Jun 09 10:31:37 2010 +0100 +++ b/kernel/eka/memmodel/epoc/flexible/mmu/mpager.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -498,56 +498,86 @@ } -TInt DPager::TryStealOldestPage(SPageInfo*& aPageInfoOut) +SPageInfo* DPager::StealOrAllocPage(TBool aAllowAlloc, Mmu::TRamAllocFlags aAllocFlags) { __NK_ASSERT_DEBUG(RamAllocLock::IsHeld()); __NK_ASSERT_DEBUG(MmuLock::IsHeld()); - - // The PageCleaningLock may or may not be held. This method will release the RamAllocLock if it - // has to wait for the PageCleaningLock + + // The PageCleaningLock may or may not be held to start with TBool pageCleaningLockAcquired = EFalse; - // find oldest page in list... SDblQueLink* link; + SPageInfo* pageInfo ; + +restart: + + // if there is a free page in the live list then use that (it will be at the end)... + if (iOldestCleanCount) + { + __NK_ASSERT_DEBUG(!iOldestCleanList.IsEmpty()); + link = iOldestCleanList.Last(); + pageInfo = SPageInfo::FromLink(link); + if(pageInfo->Type()==SPageInfo::EUnused) + goto try_steal_from_page_info; + } + + // maybe try getting a free page from the system pool... + if (aAllowAlloc && !HaveMaximumPages()) + { + MmuLock::Unlock(); + pageInfo = GetPageFromSystem(aAllocFlags); + MmuLock::Lock(); + if (pageInfo) + goto exit; + } + + // try stealing the oldest clean page on the live list if there is one... if (iOldestCleanCount) { __NK_ASSERT_DEBUG(!iOldestCleanList.IsEmpty()); link = iOldestCleanList.Last(); + goto try_steal_from_link; } - else if (iOldestDirtyCount) + + // no clean oldest pages, see if we can clean multiple dirty pages in one go... + if (iOldestDirtyCount > 1 && iPagesToClean > 1) { __NK_ASSERT_DEBUG(!iOldestDirtyList.IsEmpty()); - // see if we can clean multiple dirty pages in one go... - if (iPagesToClean > 1 && iOldestDirtyCount > 1) + // check if we hold page cleaning lock + TBool needPageCleaningLock = !PageCleaningLock::IsHeld(); + if (needPageCleaningLock) { - if (!PageCleaningLock::IsHeld()) - { - // temporarily release ram alloc mutex and acquire page cleaning mutex - MmuLock::Unlock(); - RamAllocLock::Unlock(); - PageCleaningLock::Lock(); - MmuLock::Lock(); - pageCleaningLockAcquired = ETrue; - } - - // there may be clean pages now if we've waited on the page cleaning mutex, if so don't - // bother cleaning but just restart - if (iOldestCleanCount == 0 && iOldestDirtyCount >= 1) - CleanSomePages(EFalse); - - if (pageCleaningLockAcquired) - { - // release page cleaning mutex and re-aquire ram alloc mutex - MmuLock::Unlock(); - PageCleaningLock::Unlock(); - RamAllocLock::Lock(); - MmuLock::Lock(); - } - - return 1; // tell caller to restart their operation + // temporarily release ram alloc mutex and acquire page cleaning mutex + MmuLock::Unlock(); + RamAllocLock::Unlock(); + PageCleaningLock::Lock(); + MmuLock::Lock(); } - + + // there may be clean pages now if we've waited on the page cleaning mutex, if so don't + // bother cleaning but just restart + if (iOldestCleanCount == 0 && iOldestDirtyCount >= 1) + CleanSomePages(EFalse); + + if (needPageCleaningLock) + { + // release page cleaning mutex and re-aquire ram alloc mutex + MmuLock::Unlock(); + PageCleaningLock::Unlock(); + RamAllocLock::Lock(); + MmuLock::Lock(); + } + + // if there are now some clean pages we restart so as to take one of them + if (iOldestCleanCount > 0) + goto restart; + } + + // otherwise just try to steal the oldest page... + if (iOldestDirtyCount) + { + __NK_ASSERT_DEBUG(!iOldestDirtyList.IsEmpty()); link = iOldestDirtyList.Last(); } else if (iOldCount) @@ -561,32 +591,44 @@ __NK_ASSERT_ALWAYS(!iYoungList.IsEmpty()); link = iYoungList.Last(); } - SPageInfo* pageInfo = SPageInfo::FromLink(link); - - if (pageInfo->IsDirty()) + +try_steal_from_link: + + // lookup page info + __NK_ASSERT_DEBUG(link); + pageInfo = SPageInfo::FromLink(link); + +try_steal_from_page_info: + + // if the page is dirty and we don't hold the page cleaning mutex then we have to wait on it, + // and restart - we clean with the ram alloc mutex held in this case + if (pageInfo->IsDirty() && !PageCleaningLock::IsHeld()) { MmuLock::Unlock(); PageCleaningLock::Lock(); MmuLock::Lock(); pageCleaningLockAcquired = ETrue; + goto restart; } // try to steal it from owning object... - TInt r = StealPage(pageInfo); - if (r == KErrNone) - { - BalanceAges(); - aPageInfoOut = pageInfo; - } - + if (StealPage(pageInfo) != KErrNone) + goto restart; + + BalanceAges(); + +exit: if (pageCleaningLockAcquired) { MmuLock::Unlock(); PageCleaningLock::Unlock(); MmuLock::Lock(); } + + __NK_ASSERT_DEBUG(RamAllocLock::IsHeld()); + __NK_ASSERT_DEBUG(MmuLock::IsHeld()); - return r; + return pageInfo; } @@ -1050,20 +1092,20 @@ __NK_ASSERT_DEBUG(MmuLock::IsHeld()); __NK_ASSERT_DEBUG(iNumberOfFreePages>0); - SPageInfo* pageInfo = NULL; - if (TryStealOldestPage(pageInfo) == KErrNone) + SPageInfo* pageInfo = StealOrAllocPage(EFalse, (Mmu::TRamAllocFlags)0); + + // StealOrAllocPage may have released the MmuLock, so check there are still enough pages + // to remove one from the live list + if (iNumberOfFreePages>0) { - // TryStealOldestPage may have released the MmuLock, so check there are still enough pages - // to remove one from the live list - if (iNumberOfFreePages>0) - { - ReturnPageToSystem(*pageInfo); - return ETrue; - } - else - AddAsFreePage(pageInfo); + ReturnPageToSystem(*pageInfo); + return ETrue; } - return EFalse; + else + { + AddAsFreePage(pageInfo); + return EFalse; + } } @@ -1092,51 +1134,23 @@ SPageInfo* DPager::PageInAllocPage(Mmu::TRamAllocFlags aAllocFlags) { - SPageInfo* pageInfo; - TPhysAddr pagePhys; - TInt r = KErrGeneral; + // ram alloc mutex may or may not be held + __NK_ASSERT_DEBUG(!MmuLock::IsHeld()); RamAllocLock::Lock(); - MmuLock::Lock(); - -find_a_page: - // try getting a free page from our live list... - if (iOldestCleanCount) + + MmuLock::Lock(); + SPageInfo* pageInfo = StealOrAllocPage(ETrue, aAllocFlags); + TBool wasAllocated = pageInfo->Type() == SPageInfo::EUnknown; + MmuLock::Unlock(); + + if (!wasAllocated) { - pageInfo = SPageInfo::FromLink(iOldestCleanList.Last()); - if(pageInfo->Type()==SPageInfo::EUnused) - goto try_steal_oldest_page; - } - - // try getting a free page from the system pool... - if(!HaveMaximumPages()) - { - MmuLock::Unlock(); - pageInfo = GetPageFromSystem(aAllocFlags); - if(pageInfo) - goto done; - MmuLock::Lock(); + // make page state same as a freshly allocated page... + TPhysAddr pagePhys = pageInfo->PhysAddr(); + TheMmu.PagesAllocated(&pagePhys,1,aAllocFlags); } - // otherwise steal a page from the live list... -try_steal_oldest_page: - __NK_ASSERT_ALWAYS(iOldestCleanCount|iOldestDirtyCount|iOldCount|iYoungCount); - r = TryStealOldestPage(pageInfo); - - // if this fails we restart whole process. - // failure can be either KErrInUse if the page was used while we were stealing, or 1 to indicate - // that some pages were cleaned and the operation should be restarted - if (r != KErrNone) - goto find_a_page; - - // otherwise we're done! - MmuLock::Unlock(); - - // make page state same as a freshly allocated page... - pagePhys = pageInfo->PhysAddr(); - TheMmu.PagesAllocated(&pagePhys,1,aAllocFlags); - -done: RamAllocLock::Unlock(); return pageInfo; @@ -2046,9 +2060,9 @@ NKern::ThreadEnterCS(); RamAllocLock::Lock(); - // We must hold this otherwise TryStealOldestPage will release the RamAllocLock while waiting - // for it. Note this method is not used in producton, so it's ok to hold both locks for longer - // than would otherwise happen. + // We must hold this otherwise StealOrAllocPage will release the RamAllocLock while waiting for + // it. Note this method is not used in producton, so it's ok to hold both locks for longer than + // would otherwise happen. PageCleaningLock::Lock(); MmuLock::Lock(); diff -r cc88aabd867b -r 83c58605f049 kernel/eka/memmodel/epoc/flexible/mmu/mpager.h --- a/kernel/eka/memmodel/epoc/flexible/mmu/mpager.h Wed Jun 09 10:31:37 2010 +0100 +++ b/kernel/eka/memmodel/epoc/flexible/mmu/mpager.h Tue Jul 06 11:40:58 2010 +0100 @@ -432,19 +432,19 @@ void RemovePage(SPageInfo* aPageInfo); /** - Attempt to steal the oldest page on the live list. + Get a page, either by stealing one from the live list or allocating one from the system. - If the oldest page is an oldest dirty page, this attempts to clean multiple pages by calling - #CleanSomePages and then returns without stealing any page. This allows the caller to restart - their operation after the lengthy cleaning process, which may no longer need to call this - function. + + + If the oldest page is an oldest dirty page, this may attempt to clean multiple pages by calling + #CleanSomePages. If the oldest page is on any other list (i.e. is an old or young page) this will steal it, aquiring the page cleaning mutex first if it is dirty. - Called from #PageInAllocPage. + Called from #PageInAllocPage and #TryReturnOldestPageToSystem. - @param aPageInfoOut Set to the SPageInfo pointer for the stolen page if any. + @param aAllowAlloc Indicates whether the method should try to allocate a page from the system @return KErrNone on success, KErrInUse if stealing failed or 1 to indicate the the oldest page was dirty and the PageCleaning mutex was not held. @@ -452,7 +452,7 @@ @pre MmuLock held @post MmuLock left unchanged. */ - TInt TryStealOldestPage(SPageInfo*& aPageInfoOut); + SPageInfo* StealOrAllocPage(TBool aAllowAlloc, Mmu::TRamAllocFlags aAllocFlags); /** Steal a page from the memory object (if any) which is using the page. diff -r cc88aabd867b -r 83c58605f049 kernel/eka/release.txt --- a/kernel/eka/release.txt Wed Jun 09 10:31:37 2010 +0100 +++ b/kernel/eka/release.txt Tue Jul 06 11:40:58 2010 +0100 @@ -1,3 +1,45 @@ +Version 2.00.2127 +================= +(Made by vfebvre 24/05/2010) + +1. jcoppear + 1. ou1cimx1#389410 ENV E32TEST T_IPCCPY hangs on H4HRP.ARMV5.UREL.FMM.ONENANDPAGE + + +Version 2.00.2126 +================= +(Made by vfebvre 20/05/2010) + +1. necliffo + 1. ou1cimx1#389444 NAND paging are in bootloop + + +Version 2.00.2125 +================= +(Made by vfebvre 19/05/2010) + +1. hengrant + 1. ou1cimx1#377066 Trace outputs truncated data for length and position + + +Version 2.00.2124 +================= +(Made by vfebvre 14/05/2010) + +1. famustaf + 1. ou1cimx1#380187 Build on Linux - Incorrect slash in #include in sf_sys.cpp + Changed backslash to forward slash. + + +Version 2.00.2123 +================= +(Made by vfebvre 12/05/2010) + +1. stmansfi + 1. RM 417-69728 KHS Digitiser HAL Changes 92 + PackageReleaseID=488421 + + Version 2.00.2122 ================= (Made by vfebvre 11/05/2010) diff -r cc88aabd867b -r 83c58605f049 kerneltest/e32test/digitiser/digi.auto.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/digitiser/digi.auto.bat Tue Jul 06 11:40:58 2010 +0100 @@ -0,0 +1,19 @@ +rem +rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +rem All rights reserved. +rem This component and the accompanying materials are made available +rem under the terms of the License "Eclipse Public License v1.0" +rem which accompanies this distribution, and is available +rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +rem +rem Initial Contributors: +rem Nokia Corporation - initial contribution. +rem +rem Contributors: +rem +rem Description: +rem + +t_userdigitisertest +t_userdigitisernocap +t_ldddigitisertest diff -r cc88aabd867b -r 83c58605f049 kerneltest/e32test/digitiser/digitiser.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/digitiser/digitiser.inf Tue Jul 06 11:40:58 2010 +0100 @@ -0,0 +1,44 @@ +// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Digitiser Driver Tests +// Convienence INF file to build just Digitiser tests "bldmake -f digitiser.inf bldfiles" +// Test MMPs also part of the offical ../group/bld.inf e32test component. +// + +/** +@file + +@SYMPurpose Kernel and User library test code +*/ + +PRJ_PLATFORMS + +BASEDEFAULT + +PRJ_TESTEXPORTS + +digitiser_tests.iby /epoc32/rom/include/digitiser_tests.iby +tshell_digitisertests.oby ../../../kernel/eka/rombuild/tshell_digitisertests.oby + +digi.auto.bat /epoc32/rom/include/digi.auto.bat + +PRJ_TESTMMPFILES + +..\group\d_ldddigitisertest support + +#ifndef SMP +..\group\t_userdigitisertest +..\group\t_userdigitisernocaps +..\group\t_ldddigitisertest +#endif diff -r cc88aabd867b -r 83c58605f049 kerneltest/e32test/digitiser/digitiser_tests.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/digitiser/digitiser_tests.iby Tue Jul 06 11:40:58 2010 +0100 @@ -0,0 +1,27 @@ +// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Digitiser Driver Test Application +// + +#ifndef __DIGITISER_TEST_IBY__ +#define __DIGITISER_TEST_IBY__ + +device[VARID]=\Epoc32\Release\##KMAIN##\##BUILD##\d_ldddigitisertest.ldd \sys\bin\d_ldddigitisertest.ldd +file=\Epoc32\Release\##MAIN##\##BUILD##\t_ldddigitisertest.exe \sys\bin\t_ldddigitisertest.exe +file=\Epoc32\Release\##MAIN##\##BUILD##\t_userdigitisertest.exe \sys\bin\t_userdigitisertest.exe +file=\Epoc32\Release\##MAIN##\##BUILD##\t_userdigitisernocaps.exe \sys\bin\t_userdigitisernocaps.exe + +data=\epoc32\rom\include\digi.auto.bat \digi.auot.bat + +#endif // __DIGITISER_TEST_IBY__ diff -r cc88aabd867b -r 83c58605f049 kerneltest/e32test/digitiser/t_traweventdigitiser.cpp --- a/kerneltest/e32test/digitiser/t_traweventdigitiser.cpp Wed Jun 09 10:31:37 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,143 +0,0 @@ -// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). -// All rights reserved. -// This component and the accompanying materials are made available -// under the terms of the License "Eclipse Public License v1.0" -// which accompanies this distribution, and is available -// at the URL "http://www.eclipse.org/legal/epl-v10.html". -// -// Initial Contributors: -// Nokia Corporation - initial contribution. -// -// Contributors: -// -// Description: -// e32test\digitiser\t_traweventdigitiser.cpp -// Overview: -// Test the TRawEvent APIS and events associated with the Digitiser and also verify the BTRACEs (manually) -// API Information: -// UserSvr -// Details: -// - Test the following 6 Events types -// 1. EPointerMove -// 2. EPointer3DInRange, -// 3. EPointer3DOutOfRange, -// 4. EPointer3DTilt, -// 5. EPointer3DRotation, -// 6. EPointer3DTiltAndMove, -// Platforms/Drives/Compatibility: -// All. -// Assumptions/Requirement/Pre-requisites: -// Failures and causes: -// -// - -#include -#include -#include -#include - -LOCAL_D RTest test(_L("t_TRawEventDigitiser")); - -class TestTRawDigitiserEvent - { -public: - TestTRawDigitiserEvent(TRawEvent::TType aType,TInt aX,TInt aY,TInt aZ,TInt aScanCode,TInt aPhi,TInt aTheta,TInt aAlpha,TUint8 aPointerNumber,TUint8 iTip); - void TestEvents(); -private: - TRawEvent::TType iType; - TInt iX; - TInt iY; - TInt iZ; - TInt iScanCode; - TInt iPhi; - TInt iTheta; - TInt iAlpha; - TUint8 iPointerNumber; - TUint8 iTip; - TRawEvent iDigitiser3DEvent; - }; - - -TestTRawDigitiserEvent::TestTRawDigitiserEvent(TRawEvent::TType aType,TInt aX,TInt aY,TInt aZ,TInt aScanCode,TInt aPhi,TInt aTheta,TInt aAlpha,TUint8 aPointerNumber,TUint8 aTip):iType(aType),iX(aX),iY(aY),iZ(aZ),iScanCode(aScanCode),iPhi(aPhi),iTheta(aTheta),iAlpha(aAlpha),iPointerNumber(aPointerNumber),iTip(aTip) - {} - - -void TestTRawDigitiserEvent::TestEvents() - { - - test(iDigitiser3DEvent.Type()==0); - iDigitiser3DEvent.Set(iType); - test(iDigitiser3DEvent.Type()==iType); - iDigitiser3DEvent.SetPointerNumber(iPointerNumber); - test(iPointerNumber == iDigitiser3DEvent.PointerNumber()); - iDigitiser3DEvent.Set(iType,iScanCode); - //Set the Type temporarily to get through the assertion - iDigitiser3DEvent.Set(TRawEvent::EKeyDown); - test(iScanCode==iDigitiser3DEvent.ScanCode()); - iDigitiser3DEvent.Set(iType,iX,iY); - //Set the Type temporarily to get through the assertion - iDigitiser3DEvent.Set(TRawEvent::EPointerMove); - test(TPoint(iX,iY)==iDigitiser3DEvent.Pos()); - iDigitiser3DEvent.Set(iType,iX,iY,iZ); - //Set the Type temporarily to get through the assertion - iDigitiser3DEvent.Set(TRawEvent::EPointerMove); - test(TPoint3D(iX,iY,iZ)==iDigitiser3DEvent.Pos3D()); - iDigitiser3DEvent.SetTip(iTip); - test(TBool(iTip) == iDigitiser3DEvent.IsTip()); - iDigitiser3DEvent.SetTilt(iType,iPhi,iTheta); - //Set the Type temporarily to get through the assertion - iDigitiser3DEvent.Set(TRawEvent::EPointer3DTilt); - TAngle3D rawEventAnge3D=iDigitiser3DEvent.Tilt(); - test((rawEventAnge3D.iPhi==iPhi) && (rawEventAnge3D.iTheta==iTheta)) ; - - - iDigitiser3DEvent.SetRotation(iType,iAlpha); - //Set the Type temporarily to get through the assertion - iDigitiser3DEvent.Set(TRawEvent::EPointer3DRotation); - test(iAlpha == iDigitiser3DEvent.Rotation()); - iDigitiser3DEvent.Set(iType,iX+1,iY+1,iZ+1,iPhi+1,iTheta+1,iAlpha+1); - //Set the Type temporarily to get through the assertion - iDigitiser3DEvent.Set(TRawEvent::EPointer3DTiltAndMove); - test(TPoint3D(iX+1,iY+1,iZ+1)==iDigitiser3DEvent.Pos3D()); - rawEventAnge3D=iDigitiser3DEvent.Tilt(); - test((rawEventAnge3D.iPhi==iPhi+1) &&(rawEventAnge3D.iTheta==iTheta+1)); - test((iAlpha+1) == iDigitiser3DEvent.Rotation()); - iDigitiser3DEvent.Set(iType,iX+2,iY+2,iZ+2,static_cast(iPointerNumber+1)); - //Set the Type temporarily to get through the assertion - iDigitiser3DEvent.Set(TRawEvent::EPointer3DTiltAndMove); - test(TPoint3D(iX+2,iY+2,iZ+2)==iDigitiser3DEvent.Pos3D()); - test((iPointerNumber+1) == iDigitiser3DEvent.PointerNumber()); - - UserSvr::AddEvent(iDigitiser3DEvent); - } - - -GLDEF_C TInt E32Main() -// -// - { - - test.Title(); - test.Start(_L("Testing Digitiser Events")); - - TestTRawDigitiserEvent digitiserEvent1(TRawEvent::EPointerMove, -890,-123, -823,455,2563,156,62,3,1); - TestTRawDigitiserEvent digitiserEvent2(TRawEvent::EPointer3DInRange, 23,45,23,1,2,6,4,2,1); - TestTRawDigitiserEvent digitiserEvent3(TRawEvent::EPointer3DOutOfRange, 23,45,23,1,2,6,4,2,0); - TestTRawDigitiserEvent digitiserEvent4(TRawEvent::EPointer3DTilt, 23,45,23,1,2,6,4,2,1); - TestTRawDigitiserEvent digitiserEvent5(TRawEvent::EPointer3DRotation, 23,45,23,1,2,6,4,2,1); - TestTRawDigitiserEvent digitiserEvent6(TRawEvent::EPointer3DTiltAndMove, 23,45,23,1,2,6,4,2,0); - - digitiserEvent1.TestEvents(); - digitiserEvent2.TestEvents(); - digitiserEvent3.TestEvents(); - digitiserEvent4.TestEvents(); - digitiserEvent5.TestEvents(); - digitiserEvent6.TestEvents(); - test.Printf(_L("T_TRAWEVENTDIGITISER: TEST Successfully Completed\n")); - test.End(); - test.Close(); - - return KErrNone; - - } - diff -r cc88aabd867b -r 83c58605f049 kerneltest/e32test/digitiser/t_userdigitisertest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/digitiser/t_userdigitisertest.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -0,0 +1,267 @@ +// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// e32test\digitiser\t_userdigitisertest.cpp +// Overview: +// Test the TRawEvent APIS and events associated with the Digitiser and also verify the BTRACEs (manually) +// Test HAL digitiser orientation attribute +// API Information: +// UserSvr +// Details: +// - Test the following 6 Events types +// 1. EPointerMove +// 2. EPointer3DInRange, +// 3. EPointer3DOutOfRange, +// 4. EPointer3DTilt, +// 5. EPointer3DRotation, +// 6. EPointer3DTiltAndMove, +// Platforms/Drives/Compatibility: +// All. +// Assumptions/Requirement/Pre-requisites: +// Failures and causes: +// +// + +#define __E32TEST_EXTENSION__ +#include +#include +#include +#include +#include + +#ifndef E32TEST_NOCAPS +LOCAL_D RTest test(_L("T_UserDigitiserTest")); +#else +LOCAL_D RTest test(_L("T_UserDigitiserNoCaps")); +#endif + +class TestTRawDigitiserEvent + { +public: + TestTRawDigitiserEvent(TRawEvent::TType aType,TInt aX,TInt aY,TInt aZ,TInt aScanCode,TInt aPhi,TInt aTheta,TInt aAlpha,TUint8 aPointerNumber,TUint8 iTip); + void TestEvents(); +private: + TRawEvent::TType iType; + TInt iX; + TInt iY; + TInt iZ; + TInt iScanCode; + TInt iPhi; + TInt iTheta; + TInt iAlpha; + TUint8 iPointerNumber; + TUint8 iTip; + TRawEvent iDigitiser3DEvent; + }; + + +TestTRawDigitiserEvent::TestTRawDigitiserEvent(TRawEvent::TType aType,TInt aX,TInt aY,TInt aZ,TInt aScanCode,TInt aPhi,TInt aTheta,TInt aAlpha,TUint8 aPointerNumber,TUint8 aTip):iType(aType),iX(aX),iY(aY),iZ(aZ),iScanCode(aScanCode),iPhi(aPhi),iTheta(aTheta),iAlpha(aAlpha),iPointerNumber(aPointerNumber),iTip(aTip) + {} + + +void TestTRawDigitiserEvent::TestEvents() + { + static TInt count = 0; + count++; + test.Printf(_L("TestTRawDigitiserEvent test case %2d\n"), count); + + test(iDigitiser3DEvent.Type()==0); + iDigitiser3DEvent.Set(iType); + test(iDigitiser3DEvent.Type()==iType); + iDigitiser3DEvent.SetPointerNumber(iPointerNumber); + test(iPointerNumber == iDigitiser3DEvent.PointerNumber()); + iDigitiser3DEvent.Set(iType,iScanCode); + //Set the Type temporarily to get through the assertion + iDigitiser3DEvent.Set(TRawEvent::EKeyDown); + test(iScanCode==iDigitiser3DEvent.ScanCode()); + iDigitiser3DEvent.Set(iType,iX,iY); + //Set the Type temporarily to get through the assertion + iDigitiser3DEvent.Set(TRawEvent::EPointerMove); + test(TPoint(iX,iY)==iDigitiser3DEvent.Pos()); + iDigitiser3DEvent.Set(iType,iX,iY,iZ); + //Set the Type temporarily to get through the assertion + iDigitiser3DEvent.Set(TRawEvent::EPointerMove); + test(TPoint3D(iX,iY,iZ)==iDigitiser3DEvent.Pos3D()); + iDigitiser3DEvent.SetTip(iTip); + test(TBool(iTip) == iDigitiser3DEvent.IsTip()); + iDigitiser3DEvent.SetTilt(iType,iPhi,iTheta); + //Set the Type temporarily to get through the assertion + iDigitiser3DEvent.Set(TRawEvent::EPointer3DTilt); + TAngle3D rawEventAnge3D=iDigitiser3DEvent.Tilt(); + test((rawEventAnge3D.iPhi==iPhi) && (rawEventAnge3D.iTheta==iTheta)) ; + + + iDigitiser3DEvent.SetRotation(iType,iAlpha); + //Set the Type temporarily to get through the assertion + iDigitiser3DEvent.Set(TRawEvent::EPointer3DRotation); + test(iAlpha == iDigitiser3DEvent.Rotation()); + iDigitiser3DEvent.Set(iType,iX+1,iY+1,iZ+1,iPhi+1,iTheta+1,iAlpha+1); + //Set the Type temporarily to get through the assertion + iDigitiser3DEvent.Set(TRawEvent::EPointer3DTiltAndMove); + test(TPoint3D(iX+1,iY+1,iZ+1)==iDigitiser3DEvent.Pos3D()); + rawEventAnge3D=iDigitiser3DEvent.Tilt(); + test((rawEventAnge3D.iPhi==iPhi+1) &&(rawEventAnge3D.iTheta==iTheta+1)); + test((iAlpha+1) == iDigitiser3DEvent.Rotation()); + iDigitiser3DEvent.Set(iType,iX+2,iY+2,iZ+2,static_cast(iPointerNumber+1)); + //Set the Type temporarily to get through the assertion + iDigitiser3DEvent.Set(TRawEvent::EPointer3DTiltAndMove); + test(TPoint3D(iX+2,iY+2,iZ+2)==iDigitiser3DEvent.Pos3D()); + test((iPointerNumber+1) == iDigitiser3DEvent.PointerNumber()); + + UserSvr::AddEvent(iDigitiser3DEvent); + } + + +struct HalAttribute_TestCase + { + HALData::TAttribute iAttr; + TInt iValueIn; + TInt iSetRC; // Set to KMaxTInt to skip set test case + TInt iGetRC; // Set to KMaxTInt to skip get test case + + }; + +static HalAttribute_TestCase gHalAttributeTests[] = + { +#ifndef E32TEST_NOCAPS + // Normal all pass tests + { HALData::EDigitiserOrientation, HALData::EDigitiserOrientation_000, KErrNone, KErrNone}, + { HALData::EDigitiserOrientation, HALData::EDigitiserOrientation_090, KErrNone, KErrNone}, + { HALData::EDigitiserOrientation, HALData::EDigitiserOrientation_180, KErrNone, KErrNone}, + { HALData::EDigitiserOrientation, HALData::EDigitiserOrientation_270, KErrNone, KErrNone}, + { HALData::EDigitiserOrientation, HALData::EDigitiserOrientation_default, KErrNone, KErrNone}, + + // Negative tests + { HALData::EDigitiserOrientation, -1, KErrArgument, KMaxTInt}, + { HALData::EDigitiserOrientation, 100, KErrArgument, KMaxTInt}, + +#else + // Platsec tests for no capabilities executable. + { HALData::EDigitiserOrientation, HALData::EDigitiserOrientation_default, KMaxTInt, KErrNone}, // Get, No caps needed + { HALData::EDigitiserOrientation, HALData::EDigitiserOrientation_default, KErrPermissionDenied, KMaxTInt}, // Set WDD cap needed +#endif + }; + +static TInt gNumHalAttributeTests = sizeof(gHalAttributeTests)/sizeof(HalAttribute_TestCase); + +void DoTestDigitiserHalAttributes() + { + __UHEAP_MARK; +#ifndef E32TEST_NOCAPS + test.Start(_L("DoTestDigitiserHalAttributes tests")); +#else + test.Start(_L("DoTestDigitiserHalAttributes NO CAPS tests")); + + // Skip No Caps testing for WDD caps when enforcement is not enabled on the + // platform i.e. when a emulator epoc.ini is missing. + if (!PlatSec::IsCapabilityEnforced(ECapabilityWriteDeviceData)) + { + test.Printf(_L("Platform security enforcement off, skipping\n")); + test.End(); + __UHEAP_MARKEND; + return; + } +#endif + + TInt i = 0; + TInt origValue = -1; + TInt r = HAL::Get(HALData::EDigitiserOrientation, origValue); + if (r == KErrNotSupported) + { + test.Printf(_L("Platform doesn't support EDigitiserOrientation, skipping\n")); + test.End(); + __UHEAP_MARKEND; + return; + } + test_KErrNone(r); + + // Attribute supported on platform, proceed with test. + TInt value = -1; + for (i=0; i < gNumHalAttributeTests; i++) + { + test.Printf(_L("DoTestDigitiserHalAttributes - step/row %2d\n"), i+1); + + if (gHalAttributeTests[i].iSetRC != KMaxTInt) // Skip set test? + { + r = HAL::Set(gHalAttributeTests[i].iAttr, gHalAttributeTests[i].iValueIn); + test_Equal( gHalAttributeTests[i].iSetRC, r); + } + + if (gHalAttributeTests[i].iGetRC != KMaxTInt) // Skip get test? + { + r = HAL::Get(gHalAttributeTests[i].iAttr, value); + test_Equal(gHalAttributeTests[i].iGetRC, r); + test_Equal(gHalAttributeTests[i].iValueIn, value); + } + } + +#ifndef E32TEST_NOCAPS + // Return system state back to before the test + r = HAL::Set(HALData::EDigitiserOrientation, origValue); + test_KErrNone(r); +#endif + + test.Printf(_L("DoTestDigitiserHalAttributes - complete\n")); + test.End(); + __UHEAP_MARKEND; + } + +#ifndef E32TEST_NOCAPS +void DoTestRawDigitiserEvent() + { + __UHEAP_MARK; + test.Start(_L("DoTestRawDigitiserEvent tests")); + + TestTRawDigitiserEvent digitiserEvent1(TRawEvent::EPointerMove, -890,-123, -823,455,2563,156,62,3,1); + TestTRawDigitiserEvent digitiserEvent2(TRawEvent::EPointer3DInRange, 23,45,23,1,2,6,4,2,1); + TestTRawDigitiserEvent digitiserEvent3(TRawEvent::EPointer3DOutOfRange, 23,45,23,1,2,6,4,2,0); + TestTRawDigitiserEvent digitiserEvent4(TRawEvent::EPointer3DTilt, 23,45,23,1,2,6,4,2,1); + TestTRawDigitiserEvent digitiserEvent5(TRawEvent::EPointer3DRotation, 23,45,23,1,2,6,4,2,1); + TestTRawDigitiserEvent digitiserEvent6(TRawEvent::EPointer3DTiltAndMove, 23,45,23,1,2,6,4,2,0); + + digitiserEvent1.TestEvents(); + digitiserEvent2.TestEvents(); + digitiserEvent3.TestEvents(); + digitiserEvent4.TestEvents(); + digitiserEvent5.TestEvents(); + digitiserEvent6.TestEvents(); + + test.End(); + __UHEAP_MARKEND; + } +#endif + + +GLDEF_C TInt E32Main() +// +// + { + __UHEAP_MARK; + + test.Title(); + test.Start(_L("User-side Digitiser Testing Events/HAL")); + + DoTestDigitiserHalAttributes(); + +#ifndef E32TEST_NOCAPS + DoTestRawDigitiserEvent(); +#endif + + test.Printf(_L("\n")); + test.End(); + test.Close(); + + __UHEAP_MARKEND; + return KErrNone; + } + diff -r cc88aabd867b -r 83c58605f049 kerneltest/e32test/digitiser/tshell_digitisertests.oby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/digitiser/tshell_digitisertests.oby Tue Jul 06 11:40:58 2010 +0100 @@ -0,0 +1,29 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#define BASE_ROM +#include + + +files= + +#include +#include "user.iby" +#include +#include + +#include diff -r cc88aabd867b -r 83c58605f049 kerneltest/e32test/group/bld.inf --- a/kerneltest/e32test/group/bld.inf Wed Jun 09 10:31:37 2010 +0100 +++ b/kerneltest/e32test/group/bld.inf Tue Jul 06 11:40:58 2010 +0100 @@ -383,7 +383,8 @@ t_newldd t_lddpowerseqtest t_ldddigitisertest -t_traweventdigitiser +t_userdigitisertest +t_userdigitisernocaps t_persistrestart manual halsettings support diff -r cc88aabd867b -r 83c58605f049 kerneltest/e32test/group/t_traweventdigitiser.mmp --- a/kerneltest/e32test/group/t_traweventdigitiser.mmp Wed Jun 09 10:31:37 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -TARGET t_traweventdigitiser.exe -TARGETTYPE EXE -SOURCEPATH ../digitiser -SOURCE t_traweventdigitiser.cpp -LIBRARY euser.lib -OS_LAYER_SYSTEMINCLUDE_SYMBIAN - - -capability all - -VENDORID 0x70000001 - -SMPSAFE diff -r cc88aabd867b -r 83c58605f049 kerneltest/e32test/group/t_userdigitisernocaps.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/group/t_userdigitisernocaps.mmp Tue Jul 06 11:40:58 2010 +0100 @@ -0,0 +1,36 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +TARGET t_userdigitisernocaps.exe +TARGETTYPE EXE + +CAPABILITY None +MACRO E32TEST_NOCAPS + +VENDORID 0x70000001 +SMPSAFE + +OS_LAYER_SYSTEMINCLUDE_SYMBIAN + +SOURCEPATH ../digitiser +SOURCE t_userdigitisertest.cpp + +LIBRARY euser.lib +LIBRARY hal.lib + + + diff -r cc88aabd867b -r 83c58605f049 kerneltest/e32test/group/t_userdigitisertest.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/group/t_userdigitisertest.mmp Tue Jul 06 11:40:58 2010 +0100 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +TARGET t_userdigitisertest.exe +TARGETTYPE EXE + +CAPABILITY SwEvent WriteDeviceData +VENDORID 0x70000001 +SMPSAFE + +OS_LAYER_SYSTEMINCLUDE_SYMBIAN + +SOURCEPATH ../digitiser +SOURCE t_userdigitisertest.cpp + +LIBRARY euser.lib +LIBRARY hal.lib + + + diff -r cc88aabd867b -r 83c58605f049 kerneltest/e32test/hcr/d_hcrut_psl.cpp --- a/kerneltest/e32test/hcr/d_hcrut_psl.cpp Wed Jun 09 10:31:37 2010 +0100 +++ b/kerneltest/e32test/hcr/d_hcrut_psl.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -127,7 +127,7 @@ #if !defined(__WINS__) && !defined(__X86__) // Note to future implementor: - // #include + // #include // First check to see if SMRIB was created during boot time. // If SSuperPageBase::iSmrData == KSuperPageAddressFieldUndefined (i.e. -1) // it does not exist, return KErrNotSupported, SMR not support by base port diff -r cc88aabd867b -r 83c58605f049 kerneltest/e32test/smr/d_smr.cpp --- a/kerneltest/e32test/smr/d_smr.cpp Wed Jun 09 10:31:37 2010 +0100 +++ b/kerneltest/e32test/smr/d_smr.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -19,7 +19,7 @@ #include "d_trace.h" -#include +#include #include #include #include diff -r cc88aabd867b -r 83c58605f049 kerneltest/f32test/ext/t_bitproxydrive.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/f32test/ext/t_bitproxydrive.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -0,0 +1,305 @@ +// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// f32test\ext\bitproxydrive.cpp +// extension to do XOR on every byte on 32 byte boundary read or written to media subsystem in same thread +// therefore RFile::Read/Write does not have this operation carried out on it +// +// + +#include + +class CBitExtProxyDrive : public CExtProxyDrive + { +public: + CBitExtProxyDrive(CMountCB* aMount, CExtProxyDriveFactory* aDevice); + ~CBitExtProxyDrive(); + +public: + virtual TInt Initialise(); + virtual TInt Dismounted(); + virtual TInt Enlarge(TInt aLength); + virtual TInt ReduceSize(TInt aPos, TInt aLength); + virtual TInt Read(TInt64 aPos, TInt aLength, const TAny* aTrg, TInt aThreadHandle, TInt aOffset, TInt aFlags); + virtual TInt Read(TInt64 aPos, TInt aLength, const TAny* aTrg, TInt aThreadHandle, TInt anOffset); + virtual TInt Read(TInt64 aPos, TInt aLength, TDes8& aTrg); + virtual TInt Write(TInt64 aPos, TInt aLength,const TAny* aSrc, TInt aThreadHandle, TInt aOffset, TInt aFlags); + virtual TInt Write(TInt64 aPos, TInt aLength, const TAny* aSrc, TInt aThreadHandle, TInt anOffset); + virtual TInt Write(TInt64 aPos,const TDesC8& aSrc); + virtual TInt Caps(TDes8& anInfo); + virtual TInt Format(TFormatInfo& aInfo); + virtual TInt Format(TInt64 aPos,TInt aLength); + virtual TInt SetInfo(const RMessage2 &msg, TAny* aMessageParam2, TAny* aMessageParam3); + virtual TInt NotifyChange(TDes8 &aChanged,TRequestStatus* aStatus); + virtual void NotifyChangeCancel(); + + TInt SetMountInfo(const TDesC8* aMountInfo,TInt aMountInfoThreadHandle=KCurrentThreadHandle); + TInt ForceRemount(TUint aFlags = 0); + TInt Unlock(TMediaPassword& aPassword, TBool aStorePassword); + TInt Lock(TMediaPassword& aOldPassword, TMediaPassword& aNewPassword, TBool aStorePassword); + TInt Clear(TMediaPassword& aPassword); + TInt ErasePassword(); + + TInt GetInterface(TInt aInterfaceId,TAny*& aInterface,TAny* aInput); + +private: + + TBusLocalDrive iDrive; + TInt iLocalDriveNumber; + TBool iChanged; + + TRequestStatus* iNotifyChangeStatus; + }; + + + +class CBitProxyDriveFactory : public CExtProxyDriveFactory + { +public: + CBitProxyDriveFactory(); + ~CBitProxyDriveFactory(); + virtual TInt Install(); + virtual TInt CreateProxyDrive(CProxyDrive*& aMountProxyDrive,CMountCB* aMount); + }; + + + + +CBitExtProxyDrive::CBitExtProxyDrive(CMountCB* aMount, CExtProxyDriveFactory* aDevice) +: CExtProxyDrive(aMount,aDevice) + { + } + +CBitExtProxyDrive::~CBitExtProxyDrive() + { + iDrive.Disconnect(); + } + +/** +Initialise the proxy drive. +@return system wide error code. +*/ +TInt CBitExtProxyDrive::Initialise() + { + TInt r = KErrNone; + return r; + } + +TInt CBitExtProxyDrive::SetInfo(const RMessage2 &msg, TAny* /*aMessageParam2*/, TAny* /*aMessageParam3*/) + { + TInt r = KErrNone; + + TPckg infoPckg(iLocalDriveNumber); + TRAP(r, msg.ReadL(2, infoPckg)); + + if(r != KErrNone) + { + RDebug::Print(_L("CBitExtProxyDrive::SetInfo(): cant read from the RMessage %d"), r); + return r; + } + + r = iDrive.Connect(iLocalDriveNumber, iChanged); + + if(r != KErrNone) + { + RDebug::Print(_L("CBitExtProxyDrive::SetInfo(): failed to connect to drive %d, r %d"), iDriveNumber, r); + return r; + } + + return r; + } + +TInt CBitExtProxyDrive::Dismounted() + { + TInt r = KErrNone; + return r; + } + +TInt CBitExtProxyDrive::Enlarge(TInt /*aLength*/) + { + return KErrNotSupported; + } + + +TInt CBitExtProxyDrive::ReduceSize(TInt /*aPos*/, TInt /*aLength*/) + { + return KErrNotSupported; + } + + +TInt CBitExtProxyDrive::Read(TInt64 aPos, TInt aLength, const TAny* aTrg, TInt aThreadHandle, TInt aOffset) + { + TInt r = iDrive.Read(aPos, aLength, aTrg, aThreadHandle, aOffset); + return r; + } + + +TInt CBitExtProxyDrive::Read(TInt64 aPos, TInt aLength, const TAny* aTrg, TInt aThreadHandle, TInt aOffset, TInt aFlags) + { + TInt r = iDrive.Read(aPos, aLength, aTrg, aThreadHandle, aOffset, aFlags); + return r; + } + +TInt CBitExtProxyDrive::Read(TInt64 aPos, TInt aLength, TDes8& aTrg) + { + TInt r = iDrive.Read(aPos, aLength, aTrg); + return r; + } + +TInt CBitExtProxyDrive::Write(TInt64 aPos, TInt aLength, const TAny* aSrc, TInt aThreadHandle, TInt aOffset) + { + TInt r = iDrive.Write(aPos, aLength, aSrc, aThreadHandle, aOffset); + return r; + } + + +TInt CBitExtProxyDrive::Write(TInt64 aPos, TInt aLength, const TAny* aSrc, TInt aThreadHandle, TInt aOffset, TInt aFlags) + { + TInt r = iDrive.Write(aPos, aLength, aSrc, aThreadHandle, aOffset, aFlags); + return r; + } + +TInt CBitExtProxyDrive::Write(TInt64 aPos,const TDesC8& aSrc) + { + TInt r = iDrive.Write(aPos, aSrc); + return r; + } + + +TInt CBitExtProxyDrive::Caps(TDes8& anInfo) + { + TLocalDriveCapsV6Buf caps; + caps.FillZ(); + +// TLocalDriveCapsV6& c = caps(); + + TInt r = iDrive.Caps(caps); + caps.SetLength( Min(caps.Length(), anInfo.MaxLength()) ); + + anInfo.Copy(caps); + + return r; + } + + + +TInt CBitExtProxyDrive::Format(TInt64 aPos, TInt aLength) + { + TInt r = iDrive.Format(aPos, aLength); + return r; + } + + +TInt CBitExtProxyDrive::Format(TFormatInfo& aInfo) + { + TInt r = iDrive.Format(aInfo); + return r; + } + + +TInt CBitExtProxyDrive::NotifyChange(TDes8& /*aChanged*/, TRequestStatus* aStatus) + { +// iDrive.NotifyChange(aStatus); + iNotifyChangeStatus = aStatus; + return KErrNone; + } + +void CBitExtProxyDrive::NotifyChangeCancel() + { +// iDrive.NotifyChangeCancel(); + if (iNotifyChangeStatus) + User::RequestComplete(iNotifyChangeStatus, KErrCancel); + } + +TInt CBitExtProxyDrive::SetMountInfo(const TDesC8* aMountInfo,TInt aMountInfoThreadHandle) + { + TInt r = iDrive.SetMountInfo(aMountInfo, aMountInfoThreadHandle); + return r; + } + +TInt CBitExtProxyDrive::ForceRemount(TUint aFlags) + { + TInt r = iDrive.ForceRemount(aFlags); + return r; + } + +TInt CBitExtProxyDrive::Unlock(TMediaPassword& aPassword, TBool aStorePassword) + { + TInt r = iDrive.Unlock(aPassword, aStorePassword); + return r; + } + +TInt CBitExtProxyDrive::Lock(TMediaPassword& aOldPassword, TMediaPassword& aNewPassword, TBool aStorePassword) + { + TInt r = iDrive.SetPassword(aOldPassword, aNewPassword, aStorePassword); + return r; + } + +TInt CBitExtProxyDrive::Clear(TMediaPassword& aPassword) + { + TInt r = iDrive.Clear(aPassword); + return r; + } + +TInt CBitExtProxyDrive::ErasePassword() + { + TInt r = iDrive.ErasePassword(); + return r; + } + +TInt CBitExtProxyDrive::GetInterface(TInt aInterfaceId, TAny*& /*aInterface*/, TAny* /*aInput*/) + { + switch(aInterfaceId) + { + case ELocalBufferSupport: + return KErrNone; + default: + return KErrNotSupported; + } + } + + + +CBitProxyDriveFactory::CBitProxyDriveFactory() + { + } + +CBitProxyDriveFactory::~CBitProxyDriveFactory() + { + } + +TInt CBitProxyDriveFactory::Install() + { + _LIT(KProxyName,"bitproxydrive"); + return SetName(&KProxyName); + } + +TInt CBitProxyDriveFactory::CreateProxyDrive(CProxyDrive*& aMountProxyDrive,CMountCB* aMount) + { + aMountProxyDrive = new CBitExtProxyDrive(aMount,this); + return (aMountProxyDrive==NULL) ? KErrNoMemory : KErrNone; + } + + +extern "C" { + + +/* +Create the proxy drive factory object for the usbhost mass storage proxy +*/ +EXPORT_C CExtProxyDriveFactory* CreateFileSystem() + { + return new CBitProxyDriveFactory(); + } +} + diff -r cc88aabd867b -r 83c58605f049 kerneltest/f32test/group/bld.inf --- a/kerneltest/f32test/group/bld.inf Wed Jun 09 10:31:37 2010 +0100 +++ b/kerneltest/f32test/group/bld.inf Tue Jul 06 11:40:58 2010 +0100 @@ -273,3 +273,5 @@ t_cp932dll support t_cp_plugin +t_bitproxydrive support +t_proxydrive1 diff -r cc88aabd867b -r 83c58605f049 kerneltest/f32test/group/t_bitproxydrive.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/f32test/group/t_bitproxydrive.mmp Tue Jul 06 11:40:58 2010 +0100 @@ -0,0 +1,33 @@ +// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// f32test/group/t_bitext.mmp +// +// + +TARGET t_bitproxydrive.pxy +TARGETTYPE fsy + +SOURCEPATH ../ext +SOURCE t_bitproxydrive.cpp + +OS_LAYER_SYSTEMINCLUDE_SYMBIAN + +LIBRARY euser.lib efile.lib + +UID 0x100039df 0x10000CEE +VENDORID 0x70000001 + +#include "../../../userlibandfileserver/fileserver/group/f32caps.mmh" // Capabilities of File Server process + +SMPSAFE diff -r cc88aabd867b -r 83c58605f049 kerneltest/f32test/group/t_proxydrive1.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/f32test/group/t_proxydrive1.mmp Tue Jul 06 11:40:58 2010 +0100 @@ -0,0 +1,35 @@ +// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// f32test/group/t_proxydrive1.mmp +// +// + +TARGET t_proxydrive1.exe +TARGETTYPE EXE +SOURCEPATH ../server +SOURCE t_proxydrive1.cpp +SOURCE t_main.cpp +SOURCEPATH ../fileutils/src +SOURCE t_chlffs.cpp f32_test_utils.cpp + + +LIBRARY euser.lib efsrv.lib hal.lib +OS_LAYER_SYSTEMINCLUDE_SYMBIAN +USERINCLUDE ../server +USERINCLUDE ../fileutils/inc + +CAPABILITY TCB DISKADMIN ALLFILES +VENDORID 0x70000001 + +SMPSAFE diff -r cc88aabd867b -r 83c58605f049 kerneltest/f32test/server/t_proxydrive1.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/f32test/server/t_proxydrive1.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -0,0 +1,166 @@ +// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// f32test\ext\t_ext1.cpp +// +// + +#include +#include +#include +#include "t_server.h" +#include "f32_test_utils.h" + +using namespace F32_Test_Utils; + + +GLDEF_D RTest test(_L("T_PROXYDRIVE1")); + + +TInt GetRemovableDrive(TInt aDriveNumber) + { + RLocalDrive d; + TBool flag=EFalse; + + //Find the local drive number corresponding to aDriveNumber + TMediaSerialNumber serialNum; + TInt r = TheFs.GetMediaSerialNumber(serialNum, aDriveNumber); + if(r!= KErrNone) + return r; + + TInt len = serialNum.Length(); + test.Printf(_L("Serial number (len %d) :\n"), len); + + for (TInt n=0; n p1; p1() = localDriveNumber; + TBuf<1> p2; + TInt driveNumber = EDriveM; + + r = TheFs.MountProxyDrive(driveNumber, KBitProxyDrive, &p1, &p2); + test.Printf(_L("MountProxyDrive(%d, %S) r %d\n"), driveNumber, &KBitProxyDrive, r); + test (r >= 0); + + _LIT(KFileSystem, "FAT"); + r = TheFs.MountFileSystem(KFileSystem, driveNumber); + test.Printf(_L("MountFileSystem(%S) r %d\n"), &KFileSystem, r); + test(r == KErrNone); + + + RFs fs; + r = fs.Connect(); + test(r == KErrNone); + + + TPath dirPath = _L("?:\\*"); + dirPath[0] = (TUint8) ('A' + driveNumber); + RDir dir; + r = dir.Open(fs, dirPath, KEntryAttNormal); + test.Printf(_L("RDir::Open(%S) r %d\n"), &dirPath, r); + + + r = TheFs.DismountFileSystem(KFileSystem, driveNumber); + test.Printf(_L("DismountFileSystem(%S) r %d\n"), &KFileSystem, r); + test (r == KErrInUse); + + // dismount failed - attempt a forced dismount + TRequestStatus stat; + TheFs.NotifyDismount(driveNumber, stat, EFsDismountForceDismount); + User::WaitForRequest(stat); + r = stat.Int(); + test.Printf(_L("DismountFileSystem(%S, EFsDismountForceDismount) r %d\n"), &KFileSystem, r); + test (r == KErrNone); + + r = TheFs.DismountProxyDrive(driveNumber); + test.Printf(_L("DismountProxyDrive(%d) r %d\n"), driveNumber, r); + test (r == KErrNone); + + + test.Printf(_L("closing dir (%S)....\n"), &dirPath, r); + dir.Close(); + + test.Printf(_L("closing file session()....\n")); + fs.Close(); + + r = TheFs.RemoveProxyDrive(KBitProxyDrive); + test (r == KErrNone); + + test.End(); + test.Close(); + } diff -r cc88aabd867b -r 83c58605f049 userlibandfileserver/fileserver/group/release.txt --- a/userlibandfileserver/fileserver/group/release.txt Wed Jun 09 10:31:37 2010 +0100 +++ b/userlibandfileserver/fileserver/group/release.txt Tue Jul 06 11:40:58 2010 +0100 @@ -1,3 +1,31 @@ +Version 2.00.2060 +================= +(Made by vfebvre 25/05/2010) + +1. migubarr + 1. ou1cimx1#393012 Crash when usb memory is dismounted during copy + +2. michcox + 1. ou1cimx1#378895 TB92 Symbian.org Bug 2544 - Possible deadlocks on f32 plugin chains + + +Version 2.00.2059 +================= +(Made by vfebvre 21/05/2010) + +1. niccox + 1. ou1cimx1#391109 Incorrect update of progress bar with format of Usb Mass Storage + + +Version 2.00.2058 +================= +(Made by vfebvre 14/05/2010) + +1. famustaf + 1. ou1cimx1#380187 Build on Linux - Incorrect slash in #include in sf_sys.cpp + Changed backslash to forward slash. + + Version 2.00.2057 ================= (Made by vfebvre 07/05/2010) diff -r cc88aabd867b -r 83c58605f049 userlibandfileserver/fileserver/inc/f32ver.h --- a/userlibandfileserver/fileserver/inc/f32ver.h Wed Jun 09 10:31:37 2010 +0100 +++ b/userlibandfileserver/fileserver/inc/f32ver.h Tue Jul 06 11:40:58 2010 +0100 @@ -58,6 +58,6 @@ @see TVersion */ -const TInt KF32BuildVersionNumber=2057; +const TInt KF32BuildVersionNumber=2060; // #endif diff -r cc88aabd867b -r 83c58605f049 userlibandfileserver/fileserver/sfat32/sl_drv.cpp --- a/userlibandfileserver/fileserver/sfat32/sl_drv.cpp Wed Jun 09 10:31:37 2010 +0100 +++ b/userlibandfileserver/fileserver/sfat32/sl_drv.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -49,6 +49,7 @@ { if((iMount != NULL) && (iMount->LocalDrive() != NULL)) { + ASSERT(iMount->LocalDrive()->Mount() == NULL || iMount->LocalDrive()->Mount() == iMount); iMount->LocalDrive()->SetMount(NULL); } diff -r cc88aabd867b -r 83c58605f049 userlibandfileserver/fileserver/sfile/sf_ext.cpp --- a/userlibandfileserver/fileserver/sfile/sf_ext.cpp Wed Jun 09 10:31:37 2010 +0100 +++ b/userlibandfileserver/fileserver/sfile/sf_ext.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -188,7 +188,7 @@ EXPORT_C CLocDrvMountCB::~CLocDrvMountCB() { __PRINT1(_L("CLocDrvMountCB::~CLocDrvMountCB() 0x%x"),this); - if(iProxyDrive && !LocalDrives::IsProxyDrive(Drive().DriveNumber()) && LocalDrives::IsValidDriveMapping(Drive().DriveNumber())) + if(iProxyDrive && !LocalDrives::IsProxyDrive(Drive().DriveNumber())) delete(iProxyDrive); } @@ -281,7 +281,6 @@ { __ASSERT_ALWAYS(iProxyDrive!=NULL,Fault(ELocDrvDismountedLocalDrive)); iProxyDrive->Dismounted(); - iProxyDrive->SetMount(NULL); } diff -r cc88aabd867b -r 83c58605f049 userlibandfileserver/fileserver/sfile/sf_local.cpp --- a/userlibandfileserver/fileserver/sfile/sf_local.cpp Wed Jun 09 10:31:37 2010 +0100 +++ b/userlibandfileserver/fileserver/sfile/sf_local.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -386,7 +386,8 @@ __ASSERT_ALWAYS(aDrive>=0 && aDrive= KMaxLocalDrives && iProxyDriveMapping[iMapping[aDrive]-KMaxLocalDrives],Fault(EClearProxyDriveMapping2)); TInt idx = iMapping[aDrive]-KMaxLocalDrives; - delete iProxyDriveMapping[idx]; + if (iProxyDriveMapping[idx]->Mount() == NULL) // don't delete if it's still owned by its mount + delete iProxyDriveMapping[idx]; iProxyDriveMapping[idx] = NULL; iMapping[aDrive] = KDriveInvalid; } diff -r cc88aabd867b -r 83c58605f049 userlibandfileserver/fileserver/sfile/sf_plugin_man.cpp --- a/userlibandfileserver/fileserver/sfile/sf_plugin_man.cpp Wed Jun 09 10:31:37 2010 +0100 +++ b/userlibandfileserver/fileserver/sfile/sf_plugin_man.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -745,11 +745,12 @@ FsPluginManager::LockChain(); TInt count = FsPluginManager::ChainCount(); + TInt oldCount = count; TInt i; for(i=0; iiCurrentPlugin = plugin; aRequest->Status() = KRequestPending; @@ -761,6 +762,12 @@ FsPluginManager::LockChain(); __ASSERT_ALWAYS(aRequest->Status().Int()==KErrNone||aRequest->Status().Int()==KErrCancel,Fault(ESessionDisconnectThread2)); count = FsPluginManager::ChainCount(); + //If a plugin was removed whilst the chain was unlocked we need to make sure we don't skip any plugins + if(count != oldCount) + { + i=0; + oldCount = count; + } } FsPluginManager::UnlockChain(); diff -r cc88aabd867b -r 83c58605f049 userlibandfileserver/fileserver/sfile/sf_plugin_ops.cpp --- a/userlibandfileserver/fileserver/sfile/sf_plugin_ops.cpp Wed Jun 09 10:31:37 2010 +0100 +++ b/userlibandfileserver/fileserver/sfile/sf_plugin_ops.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -252,8 +252,11 @@ CFsPlugin* plugin=NULL; FsPluginManager::LockChain(); TInt err = FsPluginManager::Plugin(plugin, aRequest->Message().Int2()); - if(err != KErrNone) + if(err != KErrNone) //should be ok but just in case + { + FsPluginManager::UnlockChain(); return err; + } TInt r = KErrNotFound; if(plugin) diff -r cc88aabd867b -r 83c58605f049 userlibandfileserver/fileserver/sfile/sf_sys.cpp --- a/userlibandfileserver/fileserver/sfile/sf_sys.cpp Wed Jun 09 10:31:37 2010 +0100 +++ b/userlibandfileserver/fileserver/sfile/sf_sys.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -18,7 +18,7 @@ #include "sf_std.h" #include #include "sf_file_cache.h" -#include +#include #include typedef CFileSystem*(*TFileSystemNew)(); diff -r cc88aabd867b -r 83c58605f049 userlibandfileserver/fileserver/shostmassstorage/msproxy/hostusbmsproxy.cpp --- a/userlibandfileserver/fileserver/shostmassstorage/msproxy/hostusbmsproxy.cpp Wed Jun 09 10:31:37 2010 +0100 +++ b/userlibandfileserver/fileserver/shostmassstorage/msproxy/hostusbmsproxy.cpp Tue Jul 06 11:40:58 2010 +0100 @@ -604,7 +604,7 @@ } else if (KErrGeneral == r) { - RDebug::Print(_L("<<< HOST Caps Unable to communicate with media")); + __HOSTPRINT(_L("<<< HOST Caps Unable to communicate with media")); c.iType = EMediaUnknown; } diff -r cc88aabd867b -r 83c58605f049 userlibandfileserver/fileserver/shostmassstorage/msproxy/tmsmemmap.inl --- a/userlibandfileserver/fileserver/shostmassstorage/msproxy/tmsmemmap.inl Wed Jun 09 10:31:37 2010 +0100 +++ b/userlibandfileserver/fileserver/shostmassstorage/msproxy/tmsmemmap.inl Tue Jul 06 11:40:58 2010 +0100 @@ -42,11 +42,11 @@ iSectorSize = aSectorSize; iFormatSectorShift = 0; - while(aSectorSize) - { - ++iFormatSectorShift; - aSectorSize >>= 1; - } + + while(aSectorSize >>= 1) + { + ++iFormatSectorShift; + } iDataOffset = static_cast(aFirstDataSector) * iSectorSize; iSize = static_cast(aNumSectors) * iSectorSize;