1) Fix for Bug 3157 - Compilation error in gui_common.h
2) Fix for Bug 3158 - Compilation error in qemu-char.c
3) Fix for Bug 3160 - [GCCE] Illegal instruction in baseport/syborg/bootstrap/syborg.s
4) Fix for Bug 3162 - [GCCE] VFP math support needs excluded to build syborg ROM
5) Fix for Bug 3163 - [GCCE] Syborg baseport build breaks when EPOCROOT is not filesystem root
6) Fix for Bug 3164 - [GCCE] baseport/syborg/bld.inf needs to discriminate GCCE from ARMCC
/*
* 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:
* Accenture Ltd
*
* Contributors:
*
* Description: This file is a part of sound driver for Syborg adaptation.
*
*/
#include "virtio.h"
namespace VirtIo
{
#define MIN(x,y) (((x)<=(y))?(x):(y))
#define INVALID_PHYSADDR(x) ((x)==TPhysAddr(-1))
TInt LinearToSGL( TAny* aVirtual, TUint aSize, TAddrLen aSGL[], TUint& aSGLCount )
{
const TUint pageSize = Kern::RoundToPageSize(1);
TUint8* virtAddr = reinterpret_cast<TUint8*>( aVirtual );
TPhysAddr physAddr = Epoc::LinearToPhysical( TLinAddr(virtAddr) );
if (INVALID_PHYSADDR(physAddr))
{ return KErrArgument; }
TUint sglLimit = aSGLCount;
aSGLCount = 0;
TUint left = aSize;
while (left)
{
TPhysAddr startPhysAddr = physAddr;
TUint8* startVirtAddr = virtAddr;
while ( (left)
&& ( Epoc::LinearToPhysical( TLinAddr(virtAddr) ) == physAddr ) )
{
TUint size = MIN(left, pageSize);
physAddr += size;
virtAddr += size;
left -= size;
}
if (INVALID_PHYSADDR(physAddr))
{ return KErrArgument; }
if ((aSGL) && (aSGLCount<sglLimit))
{
aSGL[aSGLCount].iAddr = (TUint32) startPhysAddr;
aSGL[aSGLCount].iLen = virtAddr - startVirtAddr;
}
aSGLCount++;
}
return (aSGLCount<=sglLimit)?KErrNone:KErrNoMemory;
}
} // namespace VirtIo