Move syborg baseport from old src/cedar/generic layout to baseport/syborg
authorWilliam Roberts <williamr@symbian.org>
Tue, 04 Aug 2009 10:28:23 +0100
changeset 2 d55eb581a87c
parent 1 2fb8b9db1c86
child 3 c2946f91d81f
Move syborg baseport from old src/cedar/generic layout to baseport/syborg
baseport/src/cedar/generic/base/syborg/armv5.mbc
baseport/src/cedar/generic/base/syborg/armv5test.mbc
baseport/src/cedar/generic/base/syborg/base.iby
baseport/src/cedar/generic/base/syborg/bld.inf
baseport/src/cedar/generic/base/syborg/bootstrap/syborg.inc
baseport/src/cedar/generic/base/syborg/bootstrap/syborg.s
baseport/src/cedar/generic/base/syborg/config.inc
baseport/src/cedar/generic/base/syborg/eabi/kasyborg.def
baseport/src/cedar/generic/base/syborg/estart.txt
baseport/src/cedar/generic/base/syborg/ethernet/pdd/enet.mmp
baseport/src/cedar/generic/base/syborg/ethernet/pdd/ethernet.cpp
baseport/src/cedar/generic/base/syborg/ethernet/pdd/ethernet_device.cpp
baseport/src/cedar/generic/base/syborg/ethernet/pdd/ethernet_device.h
baseport/src/cedar/generic/base/syborg/ethernet/test/ethernet_test.cpp
baseport/src/cedar/generic/base/syborg/ethernet/test/ethernet_test.mmp
baseport/src/cedar/generic/base/syborg/fb/fb.mmp
baseport/src/cedar/generic/base/syborg/fb/syborg_fb.cpp
baseport/src/cedar/generic/base/syborg/fb/syborg_fb.h
baseport/src/cedar/generic/base/syborg/hal/config.hcf
baseport/src/cedar/generic/base/syborg/hal/hal.mmp
baseport/src/cedar/generic/base/syborg/hal/values.hda
baseport/src/cedar/generic/base/syborg/kasyborg.mmp
baseport/src/cedar/generic/base/syborg/keyboard/keyboard.mmp
baseport/src/cedar/generic/base/syborg/keyboard/syborg_keyboard.cpp
baseport/src/cedar/generic/base/syborg/keyboard/syborg_keyboard.h
baseport/src/cedar/generic/base/syborg/keymap/keymap.cpp
baseport/src/cedar/generic/base/syborg/keymap/keymap.mmp
baseport/src/cedar/generic/base/syborg/monitor/monap.mmp
baseport/src/cedar/generic/base/syborg/monitor/monitor.cpp
baseport/src/cedar/generic/base/syborg/pointer/pointer.mmp
baseport/src/cedar/generic/base/syborg/pointer/syborg_pointer.cpp
baseport/src/cedar/generic/base/syborg/pointer/syborg_pointer.h
baseport/src/cedar/generic/base/syborg/rom/base_syborg.iby
baseport/src/cedar/generic/base/syborg/rom/header.iby
baseport/src/cedar/generic/base/syborg/rom/kernel.iby
baseport/src/cedar/generic/base/syborg/serial/serial.mmp
baseport/src/cedar/generic/base/syborg/serial/syborg_serial.cpp
baseport/src/cedar/generic/base/syborg/serial/syborg_serial.h
baseport/src/cedar/generic/base/syborg/specific/assp.cpp
baseport/src/cedar/generic/base/syborg/specific/highrestimer.h
baseport/src/cedar/generic/base/syborg/specific/interrupts.cia
baseport/src/cedar/generic/base/syborg/specific/interrupts.cpp
baseport/src/cedar/generic/base/syborg/specific/syborg.cfg
baseport/src/cedar/generic/base/syborg/specific/syborg.cia
baseport/src/cedar/generic/base/syborg/specific/syborg.cpp
baseport/src/cedar/generic/base/syborg/specific/syborg.h
baseport/src/cedar/generic/base/syborg/specific/syborg_priv.h
baseport/src/cedar/generic/base/syborg/specific/system.h
baseport/src/cedar/generic/base/syborg/specific/system_priv.h
baseport/src/cedar/generic/base/syborg/specific/variantmediadef.h
baseport/src/cedar/generic/base/syborg/svphostfs/driver/stringops.c
baseport/src/cedar/generic/base/syborg/svphostfs/driver/svphostfsdriver.cpp
baseport/src/cedar/generic/base/syborg/svphostfs/driver/svphostfsdriver.h
baseport/src/cedar/generic/base/syborg/svphostfs/fs/rsvphostfsdriver.cpp
baseport/src/cedar/generic/base/syborg/svphostfs/fs/svphost.cpp
baseport/src/cedar/generic/base/syborg/svphostfs/fs/svphostdir.cpp
baseport/src/cedar/generic/base/syborg/svphostfs/fs/svphostfil.cpp
baseport/src/cedar/generic/base/syborg/svphostfs/fs/svphostfsstart.cpp
baseport/src/cedar/generic/base/syborg/svphostfs/fs/svphostfsy.cpp
baseport/src/cedar/generic/base/syborg/svphostfs/fs/svphostfsy.h
baseport/src/cedar/generic/base/syborg/svphostfs/fs/svphostmain.cpp
baseport/src/cedar/generic/base/syborg/svphostfs/fs/svphostmnt.cpp
baseport/src/cedar/generic/base/syborg/svphostfs/inc/rsvphostfsdriver.h
baseport/src/cedar/generic/base/syborg/svphostfs/svphostfs.mmp
baseport/src/cedar/generic/base/syborg/svphostfs/svphostfsdriver.mmp
baseport/src/cedar/generic/base/syborg/svphostfs/svphostfsstart.mmp
baseport/src/cedar/generic/base/syborg/svphostfs/svphostfsy.mmp
baseport/src/cedar/generic/base/syborg/svpplatform/fdt.mmp
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/Makefile.libfdt
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/TODO
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/bswap.h
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/config-host.h
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt.c
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt.cpp
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt.h
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_ro.c
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_ro.cpp
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_rw.c
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_rw.cpp
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_strerror.c
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_strerror.cpp
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_sw.c
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_sw.cpp
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_wip.c
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_wip.cpp
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/libfdt.h
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/libfdt_env.h
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/libfdt_internal.h
baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/patch.libfdt
baseport/src/cedar/generic/base/syborg/svpsnapdriver/snapapp.mmp
baseport/src/cedar/generic/base/syborg/svpsnapdriver/src/rsvpsnapdriver.cpp
baseport/src/cedar/generic/base/syborg/svpsnapdriver/src/rsvpsnapdriver.h
baseport/src/cedar/generic/base/syborg/svpsnapdriver/src/snapapp.cpp
baseport/src/cedar/generic/base/syborg/svpsnapdriver/src/svpsnapdriver.cpp
baseport/src/cedar/generic/base/syborg/svpsnapdriver/src/svpsnapdriver.h
baseport/src/cedar/generic/base/syborg/svpsnapdriver/svpsnapdriver.mmp
baseport/src/cedar/generic/base/syborg/syborg-elf.cfg
baseport/src/cedar/generic/base/syborg/syborg.dtb
baseport/src/cedar/generic/base/syborg/syborg.dts
baseport/src/cedar/generic/base/syborg/syborg.oby
baseport/src/cedar/generic/base/syborg/test/ABLD.BAT
baseport/src/cedar/generic/base/syborg/test/autoexec.bat
baseport/src/cedar/generic/base/syborg/test/bld.inf
baseport/src/cedar/generic/base/syborg/test/variant_test.mmh
baseport/src/cedar/generic/base/syborg/trk_l1.ini
baseport/src/cedar/generic/base/syborg/variant.mmh
baseport/syborg/armv5.mbc
baseport/syborg/armv5test.mbc
baseport/syborg/base.iby
baseport/syborg/bld.inf
baseport/syborg/bootstrap/syborg.inc
baseport/syborg/bootstrap/syborg.s
baseport/syborg/config.inc
baseport/syborg/eabi/kasyborg.def
baseport/syborg/estart.txt
baseport/syborg/ethernet/pdd/enet.mmp
baseport/syborg/ethernet/pdd/ethernet.cpp
baseport/syborg/ethernet/pdd/ethernet_device.cpp
baseport/syborg/ethernet/pdd/ethernet_device.h
baseport/syborg/ethernet/test/ethernet_test.cpp
baseport/syborg/ethernet/test/ethernet_test.mmp
baseport/syborg/fb/fb.mmp
baseport/syborg/fb/syborg_fb.cpp
baseport/syborg/fb/syborg_fb.h
baseport/syborg/hal/config.hcf
baseport/syborg/hal/hal.mmp
baseport/syborg/hal/values.hda
baseport/syborg/kasyborg.mmp
baseport/syborg/keyboard/keyboard.mmp
baseport/syborg/keyboard/syborg_keyboard.cpp
baseport/syborg/keyboard/syborg_keyboard.h
baseport/syborg/keymap/keymap.cpp
baseport/syborg/keymap/keymap.mmp
baseport/syborg/monitor/monap.mmp
baseport/syborg/monitor/monitor.cpp
baseport/syborg/pointer/pointer.mmp
baseport/syborg/pointer/syborg_pointer.cpp
baseport/syborg/pointer/syborg_pointer.h
baseport/syborg/rom/base_syborg.iby
baseport/syborg/rom/header.iby
baseport/syborg/rom/kernel.iby
baseport/syborg/serial/serial.mmp
baseport/syborg/serial/syborg_serial.cpp
baseport/syborg/serial/syborg_serial.h
baseport/syborg/specific/assp.cpp
baseport/syborg/specific/highrestimer.h
baseport/syborg/specific/interrupts.cia
baseport/syborg/specific/interrupts.cpp
baseport/syborg/specific/syborg.cfg
baseport/syborg/specific/syborg.cia
baseport/syborg/specific/syborg.cpp
baseport/syborg/specific/syborg.h
baseport/syborg/specific/syborg_priv.h
baseport/syborg/specific/system.h
baseport/syborg/specific/system_priv.h
baseport/syborg/specific/variantmediadef.h
baseport/syborg/svphostfs/driver/stringops.c
baseport/syborg/svphostfs/driver/svphostfsdriver.cpp
baseport/syborg/svphostfs/driver/svphostfsdriver.h
baseport/syborg/svphostfs/fs/rsvphostfsdriver.cpp
baseport/syborg/svphostfs/fs/svphost.cpp
baseport/syborg/svphostfs/fs/svphostdir.cpp
baseport/syborg/svphostfs/fs/svphostfil.cpp
baseport/syborg/svphostfs/fs/svphostfsstart.cpp
baseport/syborg/svphostfs/fs/svphostfsy.cpp
baseport/syborg/svphostfs/fs/svphostfsy.h
baseport/syborg/svphostfs/fs/svphostmain.cpp
baseport/syborg/svphostfs/fs/svphostmnt.cpp
baseport/syborg/svphostfs/inc/rsvphostfsdriver.h
baseport/syborg/svphostfs/svphostfs.mmp
baseport/syborg/svphostfs/svphostfsdriver.mmp
baseport/syborg/svphostfs/svphostfsstart.mmp
baseport/syborg/svphostfs/svphostfsy.mmp
baseport/syborg/svpplatform/fdt.mmp
baseport/syborg/svpplatform/libfdt/Makefile.libfdt
baseport/syborg/svpplatform/libfdt/TODO
baseport/syborg/svpplatform/libfdt/bswap.h
baseport/syborg/svpplatform/libfdt/config-host.h
baseport/syborg/svpplatform/libfdt/fdt.c
baseport/syborg/svpplatform/libfdt/fdt.cpp
baseport/syborg/svpplatform/libfdt/fdt.h
baseport/syborg/svpplatform/libfdt/fdt_ro.c
baseport/syborg/svpplatform/libfdt/fdt_ro.cpp
baseport/syborg/svpplatform/libfdt/fdt_rw.c
baseport/syborg/svpplatform/libfdt/fdt_rw.cpp
baseport/syborg/svpplatform/libfdt/fdt_strerror.c
baseport/syborg/svpplatform/libfdt/fdt_strerror.cpp
baseport/syborg/svpplatform/libfdt/fdt_sw.c
baseport/syborg/svpplatform/libfdt/fdt_sw.cpp
baseport/syborg/svpplatform/libfdt/fdt_wip.c
baseport/syborg/svpplatform/libfdt/fdt_wip.cpp
baseport/syborg/svpplatform/libfdt/libfdt.h
baseport/syborg/svpplatform/libfdt/libfdt_env.h
baseport/syborg/svpplatform/libfdt/libfdt_internal.h
baseport/syborg/svpplatform/libfdt/patch.libfdt
baseport/syborg/svpsnapdriver/snapapp.mmp
baseport/syborg/svpsnapdriver/src/rsvpsnapdriver.cpp
baseport/syborg/svpsnapdriver/src/rsvpsnapdriver.h
baseport/syborg/svpsnapdriver/src/snapapp.cpp
baseport/syborg/svpsnapdriver/src/svpsnapdriver.cpp
baseport/syborg/svpsnapdriver/src/svpsnapdriver.h
baseport/syborg/svpsnapdriver/svpsnapdriver.mmp
baseport/syborg/syborg-elf.cfg
baseport/syborg/syborg.dtb
baseport/syborg/syborg.dts
baseport/syborg/syborg.oby
baseport/syborg/test/ABLD.BAT
baseport/syborg/test/autoexec.bat
baseport/syborg/test/bld.inf
baseport/syborg/test/variant_test.mmh
baseport/syborg/trk_l1.ini
baseport/syborg/variant.mmh
--- a/baseport/src/cedar/generic/base/syborg/armv5.mbc	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +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:
-*
-*/
-
-SECTION_COMMANDS
-
-bldmake bldfiles armv5
-abld export
-
-abld makefile armv5
-abld reallyclean armv5
-
-bldmake bldfiles armv5
-abld export
-
-abld makefile armv5
-abld library armv5
-abld -k target armv5
-
-SECTION_DIRS
-..\e32utils\group
-..\e32
-..\e32\compsupp
-..\f32\group
-..\hal
-..\syborg
-..\domain\group
-
-..\e32\drivers\pbus\mmc\sdcard\sdcard3c
-..\e32\drivers\pbus\mmc\sdcard\sdcard4c
-
-..\e32\drivers\usbho
-..\e32\drivers\usbho\usbd
-
-..\e32\drivers\bsp
-..\e32\drivers\debug
-..\e32\drivers\ecomm
-..\e32\drivers\esound
-..\e32\drivers\ethernet
-..\e32\drivers\locmedia
-..\e32\drivers\media
-..\e32\drivers\trace
-..\e32\drivers\usbc
-..\e32\euser
-..\e32\ewsrv
-
-..\f32\estart
-..\f32\etshell
-..\f32\iso9660
-..\f32\ntfs
-..\f32\scomp
-..\f32\sfat
-..\f32\sfat32
-..\f32\sftl
-..\f32\slffs
-..\f32\smassstorage
-..\f32\srofs
-..\f32\srom
-
-..\e32test\group
-..\syborg\test
--- a/baseport/src/cedar/generic/base/syborg/armv5test.mbc	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +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:
-*
-*/
-
-SECTION_COMMANDS
-
-bldmake bldfiles armv5
-abld export
-abld test export
-
-abld makefile armv5
-abld test makefile armv5
-abld reallyclean armv5
-abld test reallyclean armv5
-
-bldmake bldfiles armv5
-abld export
-
-abld makefile armv5
-abld test makefile armv5
-abld library armv5
-abld test library armv5
-abld -k target armv5
-abld test -k target armv5
-
-SECTION_DIRS
-..\e32test\group
-..\syborg\test
--- a/baseport/src/cedar/generic/base/syborg/base.iby	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +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:
-*
-*/
-
-#ifndef __BASE_IBY__
-#define __BASE_IBY__
-
-REM Base operating system, including all assp-specific files
-
-#if defined(__MISA__)
-#include <base_assabet.iby>
-#elif defined(__MI920__)
-#include <base_integrator920.iby>
-#elif defined(__NI1136__)
-#include <base_integrator1136.iby>
-#elif defined(__MCOT__)
-#include <base_lubbock.iby>
-#elif defined(__TEMPLATE__)
-#include <base_template.iby>
-#elif defined(__MOMAP16XX_H2__)
-#include <base_h2.iby>
-#elif defined(__MOMAP24XX_H4HRP__)
-#include <base_h4hrp.iby>
-#elif defined(__X86PCHRP__)
-#include <base_x86pc.iby>
-#elif defined(__NE1_TB__)
-#include <base_ne1_tb.iby>
-#elif defined(__SYBORG__)
-#include <base_syborg.iby>
-#endif
-
-#include <compsupp.iby>
-
-file=ABI_DIR\DEBUG_DIR\EUSER_DLL							\sys\bin\EUser.dll
-file=ABI_DIR\DEBUG_DIR\RPIPE.DLL							\sys\bin\rpipe.dll
-
-file=ABI_DIR\DEBUG_DIR\ektran.dll							\sys\bin\EKTran.dll
-file=ABI_DIR\DEBUG_DIR\HAL_DLL								\sys\bin\Hal.dll
-
-#ifndef SYMBIAN_EXCLUDE_KEYMAP
-file=ABI_DIR\DEBUG_DIR\KEYMAP_FILE.dll						\sys\bin\EKData.dll
-#endif //SYMBIAN_EXCLUDE_KEYMAP
-
-secondary=ABI_DIR\DEBUG_DIR\efile.exe						\sys\bin\efile.exe  FIXED HEAPMAX(0x40000)
-file=ABI_DIR\DEBUG_DIR\efsrv.dll							\sys\bin\EFSrv.dll
-
-#ifndef CUSTOM_ELOCAL
-#ifdef WITH_FAT32
-file=ABI_DIR\DEBUG_DIR\efat32.fsy							\sys\bin\ELocal.fsy
-#else
-file=ABI_DIR\DEBUG_DIR\elocal.fsy							\sys\bin\ELocal.fsy
-#endif
-#endif
-
-#ifdef WITH_LFFS
-file=ABI_DIR\DEBUG_DIR\elffs.fsy							\sys\bin\ELffs.fsy
-#endif
-
-#ifdef WITH_NAND
-file=ABI_DIR\BUILD_DIR\nandftl.fxt							\sys\bin\nandftl.fxt
-file=ABI_DIR\BUILD_DIR\ecomp.fsy							\sys\bin\ecomp.fsy
-file=ABI_DIR\BUILD_DIR\erofs.fsy							\sys\bin\erofs.fsy
-#endif
-
-#ifdef WITH_NAND2
-file=ABI_DIR\BUILD_DIR\ecomp.fsy							\sys\bin\ecomp.fsy
-file=ABI_DIR\BUILD_DIR\erofs.fsy							\sys\bin\erofs.fsy
-#endif
-
-#ifdef WITH_ISO9660
-file=ABI_DIR\DEBUG_DIR\iso9660.fsy							\sys\bin\Iso9660.fsy
-#endif
-
-#ifdef WITH_NTFS
-file=ABI_DIR\DEBUG_DIR\ntfs.fsy								\sys\bin\Ntfs.fsy
-#endif
-
-#ifdef WITH_MASS_STORAGE
-file=ABI_DIR\DEBUG_DIR\msfs.fsy								\sys\bin\msfs.fsy
-#endif
-
-file=ABI_DIR\DEBUG_DIR\ESTART_EXE							\sys\bin\EStart.exe	HEAPMAX(0x10000)
-
-file=ABI_DIR\DEBUG_DIR\domainSrv.exe						\sys\bin\domainSrv.exe
-file=ABI_DIR\DEBUG_DIR\domainCli.dll						\sys\bin\domainCli.dll
-file=ABI_DIR\DEBUG_DIR\domainPolicy.dll						\sys\bin\domainPolicy.dll
-
-#if defined(_NAND) || defined(_NAND2)
-#if !defined PAGED_ROM || defined EFFICIENT_ROM_PAGING || defined CODE_PAGING_FROM_ROFS
-REM Start of ROFS image
-ROM_IMAGE[1] {
-#endif
-#endif
-
-#ifndef SYMBIAN_EXCLUDE_D_EXC
-file=ABI_DIR\DEBUG_DIR\d_exc.exe							\sys\bin\d_exc.exe
-#endif //SYMBIAN_EXCLUDE_D_EXC
-
-#ifndef SYMBIAN_EXCLUDE_SCDV
-file=ABI_DIR\DEBUG_DIR\SCDV_DLL								\sys\bin\ScDv.dll
-#endif // SYMBIAN_EXCLUDE_SCDV
-
-#endif
--- a/baseport/src/cedar/generic/base/syborg/bld.inf	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +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:
-*
-*/
-
-PRJ_PLATFORMS
-ARMV5
-
-PRJ_EXPORTS
-syborg.oby						\epoc32\rom\include\	//
-base.iby						\epoc32\rom\include\	//
-rom\base_syborg.iby				\epoc32\rom\include\	//
-rom\header.iby					\epoc32\rom\syborg\		//
-rom\kernel.iby					\epoc32\rom\syborg\		//
-specific\syborg.cfg				\epoc32\rom\syborg\		//
-estart.txt						\epoc32\rom\syborg\		//
-trk_l1.ini						\epoc32\data\Z\trk\trk_syborg.ini
-
-PRJ_EXTENSIONS
-start		extension		base/genexec
-option		EXTRA_SRC_PATH  $(TO_BLDINF)/../e32/kernel
-end
-
-PRJ_MMPFILES
-..\e32\kernel\ekern
-..\e32\kernel\kc_exe
-..\e32\kernel\exmoncommon
-..\e32\drivers\medint\medint
-..\f32\etshell\eshell
-..\e32\drivers\trace\btracex
-..\e32\euser\variant_euser
-
-// SYBORG components
-kasyborg						// Variant library
-serial\serial					// Serial / UART ports
-fb\fb							// Framebuffer
-keyboard\keyboard				// Keyboard
-pointer\pointer					// Pointer
-monitor\monap					// Crash Debugger output
-
-keymap\keymap					// Key mapping library
-
-// platform device library - for flattened device tree (FDT)
-svpplatform\fdt
-
-//Host Filesystem
-svphostfs\svphostfs
-svphostfs\svphostfsdriver
-svphostfs\svphostfsstart
-svphostfs\svphostfsy
-
-//Snap Device
-svpsnapdriver\svpsnapdriver
-svpsnapdriver\snapapp
-
-PRJ_EXTENSIONS
-start		extension		base/config
-option		PREFIX			_syborg_
-option		HALPATH			$(TO_BLDINF)/..
-option		SOURCE			$(TO_BLDINF)/hal
-end
-
-PRJ_MMPFILES
-hal\hal
-
-PRJ_EXTENSIONS
-start		extension		base/bootstrap
-option		NAME			_syborg_bootloader_bootrom
-option		MEMMODEL		multiple
-//option		MEMMODEL		flexible
-//option		MEMMODEL		moving
-option		SOURCES			syborg.s
-option		INCLUDES		config.inc syborg.inc
-option		E32PATH			$(TO_BLDINF)/..
-option		EXTRA_INC_PATH	$(TO_BLDINF)/bootstrap
-option		EXTRA_SRC_PATH	$(TO_BLDINF)/bootstrap 
-end
--- a/baseport/src/cedar/generic/base/syborg/bootstrap/syborg.inc	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +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:
-;*
-;*/
-
-;---------------------------------------------------------------------------
-;  Physical Addresses of Memory                                             
-;---------------------------------------------------------------------------
-
-KHwRamBaseAddr		EQU    0x00000000
-KHwRamSizeMb            EQU    128			; 128MB
-
-KHwNorFlashBaseAddr     EQU    0x40000000
-KHwNorFlashSize         EQU    0x04000000   ; 64MB
-KHwNorFlashCodeSize     EQU    0x02000000   ; 32MB for code, 32MB for LFFS
-
-;---------------------------------------------------------------------------
-;  Physical Addresses of Peripherals
-;---------------------------------------------------------------------------
-
-KHwBaseRegisters	EQU     0xC0000000
-
-KHwBaseSic		EQU	KHwBaseRegisters + 0x00000
-KHwBaseRtc		EQU	KHwBaseRegisters + 0x01000
-KHwBaseTimer		EQU	KHwBaseRegisters + 0x02000
-KHwBaseKmiKeyboard	EQU     KHwBaseRegisters + 0x03000
-KHwBaseKmiPointer	EQU     KHwBaseRegisters + 0x04000
-KHwBaseClcd		EQU	KHwBaseRegisters + 0x05000
-KHwBaseUart0		EQU	KHwBaseRegisters + 0x06000
-KHwBaseUart1		EQU	KHwBaseRegisters + 0x07000
-KHwBaseUart2		EQU	KHwBaseRegisters + 0x08000
-KHwBaseUart3		EQU     KHwBaseRegisters + 0x09000
-KHwBaseHostFs		EQU     KHwBaseRegisters + 0x0a000
-KHwBaseSnap		EQU     KHwBaseRegisters + 0x0b000
-KHwBaseNet		EQU     KHwBaseRegisters + 0x0c000
-KHwBaseNand		EQU     KHwBaseRegisters + 0x0d000
-KHwBaseAudio		EQU     KHwBaseRegisters + 0x0e000
-KHwBasePlatform		EQU     KHwBaseRegisters + 0x0f000
-;-----------------------------------------------------------------------------
-; Module linear bases
-;-----------------------------------------------------------------------------
-
-; Register group linear separation: 4K
-KHwLinSeparation	EQU	0x1000
-
-KHwLinBaseRegisters	EQU	KPrimaryIOBase
-
-KHwLinBaseSic		EQU	KHwLinBaseRegisters + 0x00*KHwLinSeparation
-KHwLinBaseRtc		EQU	KHwLinBaseRegisters + 0x01*KHwLinSeparation
-KHwLinBaseTimer		EQU	KHwLinBaseRegisters + 0x02*KHwLinSeparation
-KHwLinBaseKmiKeyboard	EQU	KHwLinBaseRegisters + 0x03*KHwLinSeparation   
-KHwLinBaseKmiPointer    EQU	KHwLinBaseRegisters + 0x04*KHwLinSeparation
-KHwLinBaseClcd		EQU	KHwLinBaseRegisters + 0x05*KHwLinSeparation
-KHwLinBaseUart0		EQU	KHwLinBaseRegisters + 0x06*KHwLinSeparation
-KHwLinBaseUart1		EQU	KHwLinBaseRegisters + 0x07*KHwLinSeparation
-KHwLinBaseUart2		EQU	KHwLinBaseRegisters + 0x08*KHwLinSeparation
-KHwLinBaseUart3		EQU	KHwLinBaseRegisters + 0x09*KHwLinSeparation
-KHwLinBaseHostFs	EQU	KHwLinBaseRegisters + 0x0a*KHwLinSeparation
-KHwLinBaseSnap		EQU	KHwLinBaseRegisters + 0x0b*KHwLinSeparation
-KHwLinBaseNet		EQU	KHwLinBaseRegisters + 0x0c*KHwLinSeparation
-KHwLinBaseNand		EQU	KHwLinBaseRegisters + 0x0d*KHwLinSeparation
-KHwLinBaseAudio		EQU	KHwLinBaseRegisters + 0x0e*KHwLinSeparation
-KHwLinBasePlatform	EQU	KHwLinBaseRegisters + 0x0f*KHwLinSeparation
-	
-	END
--- a/baseport/src/cedar/generic/base/syborg/bootstrap/syborg.s	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,603 +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:
-;*
-;*/
-		
-		GBLL	__VARIANT_S__       ; indicates that this is platform-specific code
-		GBLL	__SYBORG_S__		; indicates which source file this is
-
-		INCLUDE	bootcpu.inc
-		INCLUDE syborg.inc
-;
-;*******************************************************************************
-;
-        IMPORT	ResetEntry
-;
-;*******************************************************************************
-;
-        AREA |Boot$$Code|, CODE, READONLY, ALIGN=6
-;
-;*******************************************************************************
-; Initialise Hardware
-;	Determine the hardware configuration
-;	Determine the reset reason. If it is wakeup from a low power mode, perform
-;		whatever reentry sequence is required and jump back to the kernel.
-;	Set up the memory controller so that at least some RAM is available
-;	Set R10 to point to the super page or to a temporary version of the super page
-;		with at least the following fields valid:
-;		iBootTable, iCodeBase, iActiveVariant, iCpuId
-;	Initialise the debug serial port
-;
-; Enter with:
-;	R12 points to TRomHeader
-;	NO STACK
-;	R14 = return address (as usual)
-;
-; All registers may be modified by this call
-;*******************************************************************************
-	EXPORT	InitialiseHardware
-InitialiseHardware	ROUT
-		mov		r13, lr							    ; save return address
-
-		adrl	r1, ParameterTable	        ; pass address of parameter table
-		bl		InitCpu				        ; initialise CPU/MMU registers
-						
-;*******************************************************************************
-; DoInitialise Hardware
-;	Initialise CPU registers
-;	Determine the hardware configuration
-;	Determine the reset reason. If it is wakeup from a low power mode, perform
-;		whatever reentry sequence is required and jump back to the kernel.
-;	Set up the memory controller so that at least some RAM is available
-;	Set R10 to point to the super page or to a temporary version of the super page
-;		with at least the following fields valid:
-;		iBootTable, iCodeBase, iActiveVariant, iCpuId
-;	In debug builds initialise the debug serial port
-;
-; Enter with:
-;	R12 points to TRomHeader
-;	NO STACK
-;	R13 = return address (as usual)
-;
-; All registers may be modified by this call
-;*******************************************************************************
-DoInitialiseHardware	ROUT
-		
-; Hardware memory size is 128MB - 32MB reserved for bootloader
-		mov		r4, #KHwRamSizeMb
-
-		bl		InitDebugPort
-
-		ldr		r7, =CFG_HWVD					; variant number
-
-		lsl		r10, r4, #20				    ; R10 = top of RAM
-		sub		r10, #0x2000				    ; put super page at end for now
-
-; Set up the required super page values
-		str		r7, [r10, #SSuperPageBase_iActiveVariant]
-
-		mov		r1, #0
-		str		r1, [r10, #SSuperPageBase_iHwStartupReason]	; reset reason (from hardware)
-
-		add		r1, r10, #CpuPageOffset
-		str		r1, [r10, #SSuperPageBase_iMachineData]
-		bl		GetBootTableAddress
-		str		r0, [r10, #SSuperPageBase_iBootTable]		; set the boot function table
-		str		r12, [r10, #SSuperPageBase_iCodeBase]		; set the base address of bootstrap code
-		mrc		p15, 0, r0, c0, c0, 0						; read CPU ID from CP15 (remove if no CP15)
-		str		r0, [r10, #SSuperPageBase_iCpuId]
-
-		mov		r0, r13
-		add		sp, r10, #CpuBootStackTop		            ; set up a boot stack
-		push    {r0}						                ; save return address
-		bl		DoInitHw2						            ; any extra CPU-dependent stuff
-				
-		ldr		r7, [r10, #SSuperPageBase_iActiveVariant]
-		DWORD	r7, "ActiveVariant"
-
-		pop     {pc}						                ; return
-
-;*******************************************************************************
-DoInitHw2	ROUT
-		mrc		p15, 0, r0, c0, c0, 0
-		DWORD	r0, "MMUID"
-		mrc		p15, 0, r0, c0, c0, 1
-		DWORD	r0, "CacheType"
-		mrc		p15, 0, r0, c0, c0, 2
-		DWORD	r0, "TCMType"
-		mrc		p15, 0, r0, c0, c0, 3
-		DWORD	r0, "TLBType"
-        bx      lr
-
-;*******************************************************************************
-; Get a pointer to the list of hardware banks
-;
-; The pointer returned should point to a list of hardware banks declared with
-; the HW_MAPPING and/or HW_MAPPING_EXT macros. A zero word terminates the list.
-; For the direct memory model, all hardware on the system should be mapped here
-; and the mapping will set linear address = physical address.
-; For the moving or multiple model, only the hardware required to boot the kernel
-; and do debug tracing needs to be mapped here. The linear addresses used will
-; start at KPrimaryIOBase and step up as required with the order of banks in
-; the list being maintained in the linear addresses used.
-;
-; HW_MAPPING PB, SIZE, MULT
-;	This declares a block of I/O with physical base PB and address range SIZE
-;	blocks each of which has a size determined by MULT. The page size used for
-;	the mapping is determined by MULT. The linear address base of the mapping
-;	will be the next free linear address rounded up to the size specified by
-;	MULT.
-;	The permissions used for the mapping are the standard I/O permissions (BTP_Hw).
-;
-; HW_MAPPING_EXT PB, SIZE, MULT
-;	This declares a block of I/O with physical base PB and address range SIZE
-;	blocks each of which has a size determined by MULT. The page size used for
-;	the mapping is determined by MULT. The linear address base of the mapping
-;	will be the next free linear address rounded up to the size specified by
-;	MULT.
-;	The permissions used for the mapping are determined by a BTP_ENTRY macro
-;	immediately following this macro in the HW bank list or by a DCD directive
-;	specifying a different standard permission type.
-;
-; Configurations without an MMU need not implement this function.
-;
-; Enter with :
-;		R10 points to super page
-;		R12 points to ROM header
-;		R13 points to valid stack
-;
-; Leave with :
-;		R0 = pointer
-;		Nothing else modified
-;*******************************************************************************
-	EXPORT	GetHwBanks
-GetHwBanks	ROUT
-		adr		r0, %FT1
-		bx      lr
-1
-		HW_MAPPING		KHwBaseSic,			1,	HW_MULT_4K
-		HW_MAPPING		KHwBaseRtc,			1,	HW_MULT_4K
-		HW_MAPPING		KHwBaseTimer,			1,	HW_MULT_4K	
-		HW_MAPPING		KHwBaseKmiKeyboard,		1,	HW_MULT_4K
-		HW_MAPPING		KHwBaseKmiPointer,		1,	HW_MULT_4K
-		HW_MAPPING		KHwBaseClcd,			1,	HW_MULT_4K
-		HW_MAPPING		KHwBaseUart0,			1,	HW_MULT_4K
-		HW_MAPPING		KHwBaseUart1,			1,	HW_MULT_4K
-		HW_MAPPING		KHwBaseUart2,			1,	HW_MULT_4K
-		HW_MAPPING		KHwBaseUart3,    		1,	HW_MULT_4K
-		HW_MAPPING		KHwBaseHostFs,    		1,	HW_MULT_4K
-		HW_MAPPING		KHwBaseSnap,    		1,	HW_MULT_4K
-		HW_MAPPING		KHwBaseNet,			1,	HW_MULT_4K
-		HW_MAPPING		KHwBaseNand,    		1,	HW_MULT_4K
-		HW_MAPPING		KHwBaseAudio,    		1,	HW_MULT_4K
-		HW_MAPPING		KHwBasePlatform,    		8,	HW_MULT_4K
-	
-		DCD     0   ; terminator
-
-;*******************************************************************************
-; Notify an unrecoverable error during the boot process
-;
-; Enter with:
-;	R14 = address at which fault detected
-;
-; Don't return
-;*******************************************************************************
-	EXPORT	Fault
-Fault	ROUT
-		b		BasicFaultHandler	; generic handler dumps registers via debug
-									; serial port
-
-;*******************************************************************************
-; Reboot the system
-;
-; Enter with:
-;		R0 = reboot reason code
-;
-; Don't return (of course)
-;*******************************************************************************
-	ALIGN	32, 0
-	EXPORT	RestartEntry
-RestartEntry	ROUT
-
-; Save R0 parameter in HW dependent register which is preserved over reset
-; Put HW specific code here to reset system
-	    GETCPSR	r1
-		orr		r1, #0xC0
-		SETCPSR	r1										; disable interrupts
-
-        ldr     r10, =KSuperPageLinAddr
-        adr     r0, Run_Physical
-        bl      RomLinearToPhysical                 ; physical address in r0
-
-; Disable MMU
-		mrc		p15, 0, r1, c1, c0, 0		        ; get MMUCR
-		bic		r1, #MMUCR_M		                ; clear M bit
-		mcr		p15, 0, r1, c1, c0, 0		        ; set MMUCR
-        bx      r0                                  ; jump to the physical address
-        
-; Now running from physical address
-
-Run_Physical
-        mov     r3, #KHwNorFlashBaseAddr            ; r3 = NOR flash image base
-        
-; Jump to the NOR flash image
-        bx      r3                              
-
-;*******************************************************************************
-; Get a pointer to the list of RAM banks
-;
-; The pointer returned should point to a list of {BASE; MAXSIZE;} pairs, where
-; BASE is the physical base address of the bank and MAXSIZE is the maximum
-; amount of RAM which may be present in that bank. MAXSIZE should be a power of
-; 2 and BASE should be a multiple of MAXSIZE. The generic code will examine the
-; specified range of addresses and determine the actual amount of RAM if any
-; present in the bank. The list is terminated by an entry with zero size.
-;
-; The pointer returned will usually be to constant data, but could equally well
-; point to RAM if dynamic determination of the list is required.
-;
-; Enter with :
-;		R10 points to super page
-;		R12 points to ROM header
-;		R13 points to valid stack
-;
-; Leave with :
-;		R0 = pointer
-;		Nothing else modified
-;*******************************************************************************
-	EXPORT	GetRamBanks
-GetRamBanks	ROUT
-	    push    {r1-r3,lr}
-		mov		r0, #KHwRamSizeMb
-		lsl		r2, r0, #20			    ; R2 = RAM size in bytes
-		mov		r1, #KHwRamBaseAddr		; R1 = base address of usable RAM area
-		sub		r2, r1				    ; R2 = size of usable RAM area
-		orr		r1, #RAM_VERBATIM   	; prevent testing (overlay would break it)
-		mov		r3, #0
-		mov		lr, #0					; terminator
-		add		r0, r10, #CpuPageOffset	;
-		stm	    r0, {r1-r3,lr}			; store single bank descriptor and terminator
-		pop     {r1-r3,pc}
-
-;*******************************************************************************
-; Get a pointer to the list of ROM banks
-;
-; The pointer returned should point to a list of entries of SRomBank structures,
-; usually declared with the ROM_BANK macro.
-; The list is terminated by a zero size entry (four zero words)
-;
-; ROM_BANK	PB, SIZE, LB, W, T, RS, SS
-; PB = physical base address of bank
-; SIZE = size of bank
-; LB = linear base if override required - usually set this to 0
-; W = bus width (ROM_WIDTH_8, ROM_WIDTH_16, ROM_WIDTH_32)
-; T = type (see TRomType enum in kernboot.h)
-; RS = random speed
-; SS = sequential speed
-;
-; Only PB, SIZE, LB are used by the rest of the bootstrap.
-; The information given here can be modified by the SetupRomBank call, if
-; dynamic detection and sizing of ROMs is required.
-;
-; Enter with :
-;		R10 points to super page
-;		R12 points to ROM header
-;		R13 points to valid stack
-;
-; Leave with :
-;		R0 = pointer
-;		Nothing else modified
-;*******************************************************************************
-	EXPORT	GetRomBanks
-GetRomBanks	ROUT
-        adr		r0, RomBanksFlashTable      ; NOR flash
-        bx      lr
-
-RomBanksFlashTable
-		ROM_BANK	KHwNorFlashBaseAddr, KHwNorFlashCodeSize, 0, ROM_WIDTH_32, ERomTypeXIPFlash, 0, 0
-		DCD		0,0,0,0			; terminator
-
-;*******************************************************************************
-; Set up RAM bank
-;
-; Do any additional RAM controller initialisation for each RAM bank which wasn't
-; done by InitialiseHardware.
-; Called twice for each RAM bank :-
-;	First with R3 = 0xFFFFFFFF before bank has been probed
-;	Then, if RAM is present, with R3 indicating validity of each byte lane, ie
-;	R3 bit 0=1 if D0-7 are valid, bit1=1 if D8-15 are valid etc.
-; For each call R1 specifies the bank physical base address.
-;
-; Enter with :
-;		R10 points to super page
-;		R12 points to ROM header
-;		R13 points to stack
-;		R1 = physical base address of bank
-;		R3 = width (bottom 4 bits indicate validity of byte lanes)
-;			 0xffffffff = preliminary initialise
-;
-; Leave with :
-;		No registers modified
-;*******************************************************************************
-	EXPORT	SetupRamBank
-SetupRamBank	ROUT
-		bx      lr
-
-;*******************************************************************************
-; Set up ROM bank
-;
-; Do any required autodetection and autosizing of ROMs and any additional memory
-; controller initialisation for each ROM bank which wasn't done by
-; InitialiseHardware.
-;
-; The first time this function is called R11=0 and R0 points to the list of
-; ROM banks returned by the BTF_RomBanks call. This allows any preliminary setup
-; before autodetection begins.
-;
-; This function is subsequently called once for each ROM bank with R11 pointing
-; to the current information held about that ROM bank (SRomBank structure).
-; The structure pointed to by R11 should be updated with the size and width
-; determined. The size should be set to zero if there is no ROM present in the
-; bank.
-;
-; Enter with :
-;		R10 points to super page
-;		R12 points to ROM header
-;		R13 points to stack
-;		R11 points to SRomBank info for this bank
-;		R11 = 0 for preliminary initialise (all banks)
-;
-; Leave with :
-;		Update SRomBank info with detected size/width
-;		Set the size field to 0 if the ROM bank is absent
-;		Can modify R0-R4 but not other registers
-;
-;*******************************************************************************
-	EXPORT	SetupRomBank
-SetupRomBank	ROUT						    ; only get here if running from ROM
-		cmp		r11, #0
-		bxeq	lr						        ; don't do anything for preliminary
-		ldm	    r11, {r0,r1}				    ; r0 = base, r1 = size
-        lsr     r0, pc, #20
-        lsl     r0, #20                         ; r0 = image base
-   		ldr		r1, [r12, #TRomHeader_iRomSize] ; r1 = size of ROM block
-		stm 	r11, {r0,r1}
-        bx      lr
-
-;*******************************************************************************
-; Reserve physical memory
-;
-; Reserve any physical RAM needed for platform-specific purposes before the
-; bootstrap begins allocating RAM for page tables/kernel data etc.
-;
-; There are two methods for this:
-;	1.	The function ExciseRamArea may be used. This will remove a contiguous
-;		region of physical RAM from the RAM bank list. That region will never
-;		again be identified as RAM.
-;	2.	A list of excluded physical address ranges may be written at [R11].
-;		This should be a list of (base,size) pairs terminated by a (0,0) entry.
-;		This RAM will still be identified as RAM by the kernel but will not
-;		be allocated by the bootstrap and will subsequently be marked as
-;		allocated by the kernel immediately after boot.
-;
-; Enter with :
-;		R10 points to super page
-;		R11 indicates where preallocated RAM list should be written.
-;		R12 points to ROM header
-;		R13 points to stack
-;
-; Leave with :
-;		R0-R3 may be modified. Other registers should be preserved.
-;*******************************************************************************
-	EXPORT	ReservePhysicalMemory
-ReservePhysicalMemory	ROUT
-		bx      lr
-
-;*******************************************************************************
-; Do final platform-specific initialisation before booting the kernel
-;
-; Typical uses for this call would be:
-;	1.	Mapping cache flushing areas
-;	2.	Setting up pointers to routines in the bootstrap which are used by
-;		the variant or drivers (eg idle code).
-;
-; Enter with :
-;		R10 points to super page
-;		R11 points to TRomImageHeader for the kernel
-;		R12 points to ROM header
-;		R13 points to stack
-;
-; Leave with :
-;		R0-R9 may be modified. Other registers should be preserved.
-;
-;*******************************************************************************
-	EXPORT	FinalInitialise
-FinalInitialise ROUT
-		bx      lr
-
-;*******************************************************************************
-; Debug port write routine associated with debug port in the super page
-; Enter with :
-;		R0  character to be written
-;		R12 points to rom header
-;		R13 points to valid stack
-;
-; Leave with :
-;		nothing modified 
-;*******************************************************************************
-	EXPORT	DoWriteC
-DoWriteC	ROUT
-	IF	CFG_DebugBootRom
-		push    {r1,lr}
-		bl		GetDebugPortBase			; r1 = base address of UART registers
-	
-		str		r0, [r1, #4]				; Store to data register
-
-		pop     {r1,pc}
-	ELSE
-		bx      lr
-	ENDIF
-
-;*******************************************************************************
-; Initialise the debug port
-;
-; Enter with :
-;		R12 points to ROM header
-;		There is no valid stack
-;
-; Leave with :
-;		R0-R2 modified
-;		Other registers unmodified
-;*******************************************************************************
-InitDebugPort	ROUT
-		GET_ADDRESS	r1, KHwBaseUart0, KHwLinBaseUart0
-		ldr		r0,[r1, #0]		
-		bx		lr
-
-;*******************************************************************************
-; Get the base address of the debug UART
-;
-; Enter with :
-;		R12 points to ROM header
-;		There may be no stack
-;
-; Leave with :
-;		R1 = base address of port, 0 for JTAG
-;		Z flag set for JTAG, clear for non-JTAG
-;		No other registers modified
-;*******************************************************************************
-GetDebugPortBase	ROUT
-		ldr		r1, [r12, #TRomHeader_iDebugPort]
-		cmp		r1, #42							; JTAG?
-		movseq	r1, #0
-		bxeq	lr							    ; yes - return 0 and set Z
-		cmp		r1, #1
-        blo     GetUartPort0          
-        beq     GetUartPort1
-		cmp		r1, #3
-        blo     GetUartPort2
-		beq		GetUartPort3
-GetUartPort0
-		GET_ADDRESS	r1, KHwBaseUart0, KHwLinBaseUart0
-		movs	r1, r1							; clear Z
-		bx      lr
-
-GetUartPort1
-		GET_ADDRESS	r1, KHwBaseUart1, KHwLinBaseUart1
-		movs	r1, r1							; clear Z
-		bx      lr
-
-GetUartPort2
-		GET_ADDRESS	r1, KHwBaseUart2, KHwLinBaseUart2
-		movs	r1, r1							; clear Z
-		bx      lr
-
-GetUartPort3
-		GET_ADDRESS	r1, KHwBaseUart3, KHwLinBaseUart3
-		movs	r1, r1							; clear Z
-		bx      lr
-
-;*******************************************************************************
-; Return parameter specified by R0 (see TBootParam enum)
-;
-; Enter with :
-;		R0 = parameter number
-;
-; Leave with :
-;		If parameter value is supplied, R0 = value and N flag clear
-;		If parameter value is not supplied, N flag set. In this case the
-;		parameter may be defaulted or the system may fault.
-;		R0, R1 modified. No other registers modified.
-;
-;*******************************************************************************
-GetParameters ROUT
-		adr		r1, ParameterTable
-		b		FindParameter
-
-ParameterTable
-		DCD		-1								; terminator
-
-;*******************************************************************************
-; BOOT FUNCTION TABLE
-;*******************************************************************************
-GetBootTableAddress	ROUT
-		adr		r0, SyborgBootTable
-        bx      lr
-
-SyborgBootTable
-		DCD	DoWriteC					; output a debug character
-		DCD	GetRamBanks					; get list of RAM banks
-		DCD	SetupRamBank				; set up a RAM bank
-		DCD	GetRomBanks					; get list of ROM banks
-		DCD	SetupRomBank				; set up a ROM bank
-		DCD	GetHwBanks					; get list of HW banks
-		DCD	ReservePhysicalMemory		; reserve physical RAM if required
-		DCD	GetParameters				; get addresses for direct memory model
-		DCD	FinalInitialise				; Final initialisation before booting the kernel
-		DCD	HandleAllocRequest			; allocate memory (usually in generic code)
-		DCD	GetPdeValue					; usually in generic code
-		DCD	GetPteValue					; usually in generic code
-		DCD	PageTableUpdate				; usually in generic code
-		DCD	EnableMmu					; Enable the MMU (usually in generic code)
-
-; These entries specify the standard MMU permissions for various areas
-		
-	IF  CFG_MMMultiple
-;	IF  CFG_MMFlexible
-	    IF CFG_ARMV7
-		BTP_ENTRY   CLIENT_DOMAIN, PERM_RORO, MEMORY_FULLY_CACHED,       	1,  1,  0,  0   ; ROM
-		BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, MEMORY_FULLY_CACHED,       	0,  1,  0,  0   ; kernel data/stack/heap
-		BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, MEMORY_FULLY_CACHED,       	0,  1,  0,  0   ; super page/CPU page
-		BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, MEMORY_FULLY_CACHED,  	0,  1,  0,  0   ; page directory/tables
-		BTP_ENTRY   CLIENT_DOMAIN, PERM_RONO, MEMORY_FULLY_CACHED,       	1,  1,  0,  0   ; exception vectors
-		BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, MEMORY_STRONGLY_ORDERED,      0,  1,  0,  0   ; hardware registers
-		DCD         0                                                           ; unused (minicache flush)
-		DCD         0                                                           ; unused (maincache flush)
-		BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, MEMORY_FULLY_CACHED,       	0,  1,  0,  0   ; page table info
-		BTP_ENTRY   CLIENT_DOMAIN, PERM_RWRW, MEMORY_FULLY_CACHED,       	1,  1,  0,  0   ; user RAM
-		BTP_ENTRY   CLIENT_DOMAIN, PERM_RONO, MEMORY_STRONGLY_ORDERED,      1,  1,  0,  0   ; temporary identity mapping
-		BTP_ENTRY   CLIENT_DOMAIN, UNC_PERM,  MEMORY_STRONGLY_ORDERED,      0,  1,  0,  0   ; uncached
-	    ENDIF	
-	    IF CFG_ARMV6
-		BTP_ENTRY   CLIENT_DOMAIN, PERM_RORO, CACHE_WBWA,       1,  1,  0,  0       ; ROM
-	        BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, CACHE_WBWA,       0,  1,  0,  0       ; kernel data/stack/heap
-	        BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, CACHE_WBWA,       0,  1,  0,  0       ; super page/CPU page
-		BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, CACHE_WBWA,		0,  1,  0,  0       ; page directory/tables
-	        BTP_ENTRY   CLIENT_DOMAIN, PERM_RONO, CACHE_WTRA,       1,  1,  0,  0       ; exception vectors
-		BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, CACHE_SO,         0,  1,  0,  0       ; hardware registers
-		DCD			0										; unused (minicache flush)
-		DCD			0										; unused (maincache flush)
-	        BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, CACHE_WBWA,       0,  1,  0,  0       ; page table info
-	        BTP_ENTRY   CLIENT_DOMAIN, PERM_RWRW, CACHE_WBWA,       1,  1,  0,  0       ; user RAM
-		BTP_ENTRY   CLIENT_DOMAIN, PERM_RONO, CACHE_SO,         1,  1,  0,  0       ; temporary identity mapping
-	        BTP_ENTRY   CLIENT_DOMAIN, UNC_PERM,  CACHE_SO,         0,  1,  0,  0       ; uncached
-	    ENDIF
-	ENDIF
-	IF CFG_MMMoving
-		BTP_ENTRY	CLIENT_DOMAIN, PERM_RORO, CACHE_WT		; ROM
-		BTP_ENTRY	CLIENT_DOMAIN, PERM_RWNO, CACHE_WB		; kernel data/stack/heap
-		BTP_ENTRY	CLIENT_DOMAIN, PERM_RWNO, CACHE_WB		; super page/CPU page
-		BTP_ENTRY	CLIENT_DOMAIN, PERM_RWNO, CACHE_WT		; page directory/tables
-		BTP_ENTRY	CLIENT_DOMAIN, PERM_RORO, CACHE_WT		; exception vectors
-		BTP_ENTRY	CLIENT_DOMAIN, PERM_RWRO, CACHE_NCNB	; hardware registers
-		DCD			0										; unused (minicache flush)
-		DCD			0										; unused (maincache flush)
-		BTP_ENTRY	CLIENT_DOMAIN, PERM_RWNO, CACHE_WB		; page table info
-		BTP_ENTRY	CLIENT_DOMAIN, PERM_RWRW, CACHE_WB		; user RAM
-		BTP_ENTRY	CLIENT_DOMAIN, PERM_RORO, CACHE_NCNB	; temporary identity mapping
-		BTP_ENTRY	CLIENT_DOMAIN, UNC_PERM,  CACHE_NCNB	; uncached
-	ENDIF
-
-	END
--- a/baseport/src/cedar/generic/base/syborg/config.inc	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +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:
-;*
-;*/
-
-; Include to enable tracing
-;	GBLL	CFG_DebugBootRom
-
-; Include one of these to select the CPU
-;	GBLL	CFG_CPU_ARM926J
-;	GBLL	CFG_CPU_ARM1136
-	GBLL    CFG_CPU_CORTEX_A8N
-;	GBLL	CFG_CPU_ARM1136_ERRATUM_399234_FIXED
-;	GBLL    CFG_CPU_ARM1136_ERRATUM_411920_FIXED
-; Include the following lines if this is a bootloader bootstrap
-;	GBLL	CFG_BootLoader
-
-; If you want to supply a custom set of initial vectors (including reset vector) include the following line
-;	GBLL	CFG_CustomVectors
-;
-; and provide a custom_vectors.inc file
-
-; On ARM architecture 6 processors, include the following line to override the threshold
-; on total physical RAM size at which the multiple memory model switches into large address space mode
-; i.e. size>threshold -> 2Gb per process, size<=threshold -> 1Gb per process
-; Defaults to 32Mb.
-;	INIT_NUMERIC_CONSTANT	CFG_ARMV6_LARGE_CONFIG_THRESHOLD, <value>
-
-; For the direct memory model only, include the following line if you wish the exception vectors at the
-; start of the bootstrap to be used at all times. This is only relevant if an MMU is present - this option
-; is mandatory if not.
-;	GBLL	CFG_UseBootstrapVectors
-;
-; If the above option is in use (including if no MMU is present) the following symbol should be defined
-; to specify the offset from the bootstrap to the kernel image.
-;	INIT_NUMERIC_CONSTANT	KernelCodeOffset, 0x4000
-
-; Include the following line if you wish to include the ROM autodetection code based on data bus
-; capacitance and image repeats.
-;	GBLL	CFG_AutoDetectROM
-
-; Include the following line to minimise the initial kernel heap size
-; On the direct memory model the size of the kernel data area (super page to end of kernel heap) 
-; is rounded up to the next 1Mb if this is not included, 4K if it is.
-; On the moving and multiple models, the size of the initial kernel heap area is rounded up to
-; the next 64K if this is not included, 4K if it is.
-;	GBLL	CFG_MinimiseKernelHeap
-
-; On the moving or multiple memory models, include either or both of the following lines to
-; specify the size of the initial kernel heap
-;	INIT_NUMERIC_CONSTANT	CFG_KernelHeapMultiplier, <multiplier>
-;	INIT_NUMERIC_CONSTANT	CFG_KernelHeapBaseSize, <base>
-;
-; The initial kernel heap size is MAX( <base> + <multiplier> * N / 16, value specified in ROMBUILD )
-; where N is the total physical RAM size in pages.
-; <base> defaults to 24K and <multiplier> defaults to 9*16 (ie 9 bytes per page).
-
-; Specific stuff for integrator
-;	GBLL	CFG_Integrator_DontSetClock
-	INIT_NUMERIC_CONSTANT	CFG_HWVD, 0x0B0A0001
-
-; Copy NOR Flash image to SDRAM
-	GBLL    CFG_CopyFlashToRam
-    
-
-	END
--- a/baseport/src/cedar/generic/base/syborg/eabi/kasyborg.def	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-EXPORTS
-	_Z17VariantInitialisev @ 1 NONAME
-	_Z14AsicInitialisev @ 2 NONAME
-	_ZN6Syborg11DebugOutputEj @ 3 NONAME
-	_ZN6Syborg12MsTickPeriodEv @ 4 NONAME
-	_ZN6Syborg13StartupReasonEv @ 5 NONAME
-	_ZN6Syborg27SystemTimeInSecondsFrom2000ERi @ 6 NONAME
-	_ZN6Syborg30SetSystemTimeInSecondsFrom2000Ei @ 7 NONAME
-	_ZN6Syborg5Init1Ev @ 8 NONAME
-	_ZN6Syborg5Init3Ev @ 9 NONAME
-	_ZN6Syborg9DebugInitEv @ 10 NONAME
-	_ZN6SyborgC1Ev @ 11 NONAME
-	_ZN6SyborgC2Ev @ 12 NONAME
-	_ZN7TSyborg10DisableIntEj @ 13 NONAME
-	_ZN7TSyborg10TimerValueEj @ 14 NONAME
-	_ZN7TSyborg11EnableTimerEjNS_6TStateE @ 15 NONAME
-	_ZN7TSyborg12SetTimerLoadEjm @ 16 NONAME
-	_ZN7TSyborg12SetTimerModeEjNS_10TTimerModeE @ 17 NONAME
-	_ZN7TSyborg12VideoRamPhysEv @ 18 NONAME
-	_ZN7TSyborg12VideoRamSizeEv @ 19 NONAME
-	_ZN7TSyborg13ClearTimerIntEj @ 20 NONAME
-	_ZN7TSyborg13DebugPortAddrEv @ 21 NONAME
-	_ZN7TSyborg14IsTimerEnabledEj @ 22 NONAME
-	_ZN7TSyborg16MarkDebugPortOffEv @ 23 NONAME
-	_ZN7TSyborg18VideoRamPhysSecureEv @ 24 NONAME
-	_ZN7TSyborg20EnableTimerInterruptEj @ 25 NONAME
-	_ZN7TSyborg21DisableTimerInterruptEj @ 26 NONAME
-	_ZN7TSyborg9EnableIntEj @ 27 NONAME
-	_ZN7TSyborg9TimerLoadEj @ 28 NONAME
-	_ZN7TSyborg9TimerModeEj @ 29 NONAME
-	_ZN9Interrupt11SetPriorityEii @ 30 NONAME
-	_ZN9Interrupt4BindEiPFvPvES0_ @ 31 NONAME
-	_ZN9Interrupt5ClearEi @ 32 NONAME
-	_ZN9Interrupt6EnableEi @ 33 NONAME
-	_ZN9Interrupt6UnbindEi @ 34 NONAME
-	_ZN9Interrupt7DisableEi @ 35 NONAME
-	_ZTI6Syborg @ 36 NONAME
-	_ZTV6Syborg @ 37 NONAME
-
--- a/baseport/src/cedar/generic/base/syborg/estart.txt	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-C: 0  ELOCAL FAT  0       FS_FORMAT_COLD,FS_SYNC_DRIVE # IRAM
--- a/baseport/src/cedar/generic/base/syborg/ethernet/pdd/enet.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +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:
-*
-*/
-
-#include <variant.mmh>
-#include "kernel\kern_ext.mmh"
-
-TARGET			VariantTarget(ethernet,pdd)
-TARGETTYPE		pdd
-ROMTARGET       ethernet.pdd
-
-SYSTEMINCLUDE	\epoc32\include\drivers
-SYSTEMINCLUDE	AsspNKernIncludePath
-SOURCEPATH	    .
-
-SOURCE		    ethernet.cpp   ethernet_device.cpp
-
-LIBRARY	    PlatformLib 
-
-UID			0x100039d0 0x1000015c
-VENDORID    0x70000001
-
-CAPABILITY	all
--- a/baseport/src/cedar/generic/base/syborg/ethernet/pdd/ethernet.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +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:
-*
-*/
-
-#include <ethernet.h>
-#include <e32hal.h>
-#include <system.h>
-#include "ethernet_device.h"
-
-#pragma diag_suppress 1441
-
-_LIT(KEthPddName, "Ethernet.Syborg");
-
-// needs ldd version..
-const TInt KMinimumLddMajorVersion	= 1;
-const TInt KMinimumLddMinorVersion	= 0;
-const TInt KMinimumLddBuild			= 122;
-
-//
-// Class to identify the driver as PDD
-//
-class DDriverEthernet : public DPhysicalDevice
-{
-public:
-	DDriverEthernet();
-	
-	//
-	// Functions that we must implement as we are inheriting from abstract base class
-	//
-	virtual TInt Install();
-	virtual void GetCaps(TDes8 &aDes) const;
-	virtual TInt Create(DBase*& aChannel, TInt aUnit, const TDesC8* anInfo, const TVersion &aVer);
-	virtual TInt Validate(TInt aUnit, const TDesC8* anInfo, const TVersion &aVer);
-};
-
-//////////////////////////////////////////
-// Implementation of DDriverEthernet class
-//////////////////////////////////////////
-
-DDriverEthernet::DDriverEthernet()
-{
-	DP("** (PDD) DDriverEthernet::DDriverEthernet()");
-	__KTRACE_OPT(KHARDWARE, Kern::Printf("DDriverEthernet::DDriverEthernet()"));
-	
-	iUnitsMask=0x1;	
-	iVersion=TVersion(KEthernetMajorVersionNumber,
-					  KEthernetMinorVersionNumber,
-					  KEthernetBuildVersionNumber);
-}
-
-TInt DDriverEthernet::Install()
-{
-	DP("** (PDD) DDriverEthernet::Install()");
-	__KTRACE_OPT(KHARDWARE, Kern::Printf("DDriverEthernet::Install()"));
-	
-	return SetName(&KEthPddName);
-}
-
-void DDriverEthernet::GetCaps(TDes8 &aDes) const
-{
-	DP("** (PDD) DDriverEthernet::GetCaps");
-	__KTRACE_OPT(KHARDWARE, Kern::Printf("DDriverEthernet::GetCaps"));
-	
-	TEthernetCaps capsBuf;
-
-	aDes.FillZ(aDes.MaxLength());
-	aDes=capsBuf.Left(Min(capsBuf.Length(),aDes.MaxLength()));
-}
-
-TInt DDriverEthernet::Create(DBase*& aChannel, TInt aUnit, const TDesC8* anInfo, const TVersion& aVer)
-{
-	DP("** (PDD) DDriverEthernet::Create");
-	__KTRACE_OPT(KHARDWARE, Kern::Printf("DDriverEthernet::Create"));
-	
-    TInt r = KErrNoMemory;
-
-	EthernetDevice	*VirtioEthernet = new EthernetDevice;
-	if(VirtioEthernet)
-		{
-		DP("** (PDD) DDriverEthernet:: EthernetDevice created successfully");
-		r = VirtioEthernet->DoCreate(aUnit, anInfo);
-		}
-	aChannel = VirtioEthernet;
-       return r;
-}
-
-TInt DDriverEthernet::Validate(TInt aUnit, const TDesC8* anInfo, const TVersion& aVer)
-{
-	DP("** (PDD) DDriverEthernet::Validate");
-	__KTRACE_OPT(KHARDWARE, Kern::Printf("DDriverEthernet::Validate"));
-	
-	if((!Kern::QueryVersionSupported(iVersion,aVer)) || 
-		(!Kern::QueryVersionSupported(aVer,TVersion(KMinimumLddMajorVersion,
-													KMinimumLddMinorVersion,
-													KMinimumLddBuild))))
-	{
-		return KErrNotSupported;
-	}
-	if(aUnit != 0)
-	{
-		return KErrNotSupported;
-	}
-	return KErrNone;
-}
-
-DECLARE_STANDARD_PDD()
-{
-	DP("** (DPhysicalDevice) Ethernet PDD Factory created");
-	return new DDriverEthernet;
-}
--- a/baseport/src/cedar/generic/base/syborg/ethernet/pdd/ethernet_device.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,411 +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:
-*
-*/
-
-#include <ethernet.h>
-#include <e32hal.h>
-#include <e32cmn.h> 
-#include "ethernet_device.h"
-
-// Constants specific to this file
-const TInt K1000mSecDelay	= 1000;
-
-/////////////////////////////////////////
-// Implementation of EthernetDevice class
-/////////////////////////////////////////
-
-EthernetDevice::EthernetDevice() : iRxDfc(RxDfc, this)
-{
-	DP("** (PDD) EthernetDevice()");
-		
-	iInterruptId=-1;
-	iCreated = FALSE;
-	iStarted = FALSE;
-	iRxDfc.SetDfcQ(Kern::DfcQue0());
-}
-
-EthernetDevice::~EthernetDevice()
-{
-	DP("** (PDD) ~EthernetDevice()");
-	DP("** (PDD) ~EthernetDevice Unbind Interrupt");
-	Interrupt::Unbind(EIntNet0);
-}
-
-void EthernetDevice::GetConfig(TEthernetConfigV01 &aConfig) const
-{
-	DP("** (PDD) EthernetDevice::GetConfig");
-	aConfig = iDefaultConfig;
-}
-
-TInt EthernetDevice::ValidateConfig(const TEthernetConfigV01 &aConfig) const
-{
-	DP("** (PDD) EthernetDevice::ValidateConfig");
-		
-	switch(aConfig.iEthSpeed)
-	{
-		case KEthSpeedUnknown:
-			return KErrNotSupported;
-		default:		
-			break;
-	}
-
-	switch(aConfig.iEthDuplex)
-	{
-		case KEthDuplexUnknown:
-			return KErrNotSupported;
-		default:
-			break;
-	}
-
-	return KErrNone;
-}
-
-void EthernetDevice::Caps(TDes8 &aCaps) const
-{
-	DP("** (PDD) EthernetDevice::Caps");
-	TEthernetCaps capsBuf;
-
-	aCaps.FillZ(aCaps.MaxLength());
-	aCaps=capsBuf.Left(Min(capsBuf.Length(),aCaps.MaxLength()));
-}
-
-TDfcQue* EthernetDevice::DfcQ(TInt aUnit)
-{
-	DP("** (PDD) EthernetDevice::DfcQ");
-	return Kern::DfcQue0();
-}
-
-TInt EthernetDevice::DisableIrqs()
-{
-	DP("** (PDD) EthernetDevice::DisableIrqs");
-	return NKern::DisableInterrupts(1);
-}
-
-void EthernetDevice::RestoreIrqs(TInt aLevel)
-{
-	DP("** (PDD) EthernetDevice::RestoreIrqs");
-	NKern::RestoreInterrupts(aLevel);
-}
-
-//
-// Enable Ethernet interrupt line, allocate memory for Rx/Tx paths and send QEMU frames for Rx transmission.  
-//
-TInt EthernetDevice::DoCreate(TInt aUnit, const TDesC8* anInfo)
-{
-	DP("** (PDD) Enter: EthernetDevice::DoCreate");
-	
-	if(iCreated)
-		return KErrNone;
-	
-	// Bind to Ethernet interrupt
-	Interrupt::Bind(EIntNet0,Isr,this);
-	SetMacAddress();
-	
-	DP("** (PDD) EthernetDevice::DoCreate - VNET[VIRTIO_STATUS]");
-	
-   VNET[VIRTIO_STATUS] = VIRTIO_CONFIG_S_ACKNOWLEDGE
-     			| VIRTIO_CONFIG_S_DRIVER;
-	 
-   AllocRings();
-	VNET[VIRTIO_STATUS] |= VIRTIO_CONFIG_S_DRIVER_OK;
-   AddRx();
-	VNET[VIRTIO_INT_ENABLE] = 1;
-	  
-	iCreated = TRUE;
-	
-	DP("** (PDD) Exit: EthernetDevice::DoCreate");
-	
-	return KErrNone;
-}
-
-TInt EthernetDevice::Start()
-{
-	DP("** (PDD) EthernetDevice::Start()");
-		
-	if(iStarted)
-		return KErrNone;
-		   			       		   			   
-    // wait for 1 sec as negotiation is going on... hopefully auto-neg completes by then
- 	NKern::Sleep(K1000mSecDelay);
- 	Interrupt::Enable(EIntNet0);
-	
-	iStarted = TRUE;
-	
-	return KErrNone;
-}
-
-void EthernetDevice::Stop(TStopMode aMode)
-{
-	DP("** (PDD) EthernetDevice::Stop(TStopMode aMode)");
-		
-	switch (aMode)
-	{
-		case EStopNormal:
-		case EStopEmergency:
-			iRxDfc.Cancel();
-         //Should we disable QEMU interrupts here?
-			break;					
-        default:
-            break;
-	}
-	
-	iStarted = FALSE;	
-	Interrupt::Disable(EIntNet0);
-}
-
-//
-// Transmit Tx data to QEMU and increment iTxAvail idx counter to indicate to QEMU that a new frame is available.  
-//
-TInt EthernetDevice::Send(TBuf8<KMaxEthernetPacket+32> &aBuffer)
-{
-	DP("** (PDD) EthernetDevice::Send");
-		
-	TInt err = KErrNone;
-	TUint32 length = aBuffer.Length();
-	iTxBuffer = aBuffer;
-
-   DP ("** (PDD) Value of iTxAvail->idx = %d\n", iTxAvail->idx);	
-   TInt ring_slot = iTxAvail->idx & (tx_ring_size - 1);
-   DP ("** (PDD) Value of ring_slot = %d\n", ring_slot);
-
-   memset(&tx_header, 0, sizeof(tx_header));
-
-   iTxDesc[0].addr = Epoc::LinearToPhysical((TUint32)&tx_header);
-   iTxDesc[0].len = sizeof(tx_header);
-   iTxDesc[0].flags = VRING_DESC_F_NEXT;
-   iTxDesc[0].next = 1;
-   iTxDesc[1].addr = Epoc::LinearToPhysical((TUint32) iTxBuffer.Ptr());
-   iTxDesc[1].len = length;
-   iTxDesc[1].flags = 0;
-   iTxAvail->ring[ring_slot] = 0;
-
-   iTxAvail->idx++;   
-   DP ("** (PDD)iTxAvail->idx = %x, rx_last_used=%d\n", iTxAvail->idx, rx_last_used);
-  
-   VNET[VIRTIO_QUEUE_NOTIFY] = TX_QUEUE;
-
-   DP ("** (PDD) iTxDesc[0].addr = %x\n", iTxDesc[0].addr);
-   DP ("** (PDD) iTxDesc[0].len = %d\n", iTxDesc[0].len);
-   DP ("** (PDD) iTxDesc[0].flags = %d\n", iTxDesc[0].flags);
-   DP ("** (PDD) iTxDesc[0].next = %d\n", iTxDesc[0].next);
-   DP ("** (PDD) iTxDesc[1].addr = %x\n", iTxDesc[1].addr);
-   DP ("** (PDD) iTxDesc[1].len = %d\n", iTxDesc[1].len);
-   DP ("** (PDD) iTxDesc[1].flags = %d\n", iTxDesc[1].flags);
-    					 	   		
-	return err;
-}
-
-TInt EthernetDevice::ReceiveFrame(TBuf8<KMaxEthernetPacket+32> &aBuffer, 
-									TBool okToUse)
-{
-	DP("** (PDD) EthernetDevice::ReceiveFrame");
-    
-   //If no buffer available dump frame
-   if (!okToUse)
-   {
-    DP("** (PDD) EthernetDevice::ReceiveFrame - dumping frame");
-    return KErrGeneral;
-   }
-   
-   aBuffer.Copy(iRxBuffer.Ptr(), ETHERNET_PAYLOAD_SIZE); 
-   AddRx();
- 
-	return KErrNone;
-}
-
-void EthernetDevice::Isr(TAny* aPtr)
-{
-	DP("** (PDD) EthernetDevice::Isr(TAny* aPtr)");
-
-   Interrupt::Clear(EIntNet0);	
-   VNET[VIRTIO_INT_STATUS] = 1;
-   EthernetDevice& d=*(EthernetDevice*)aPtr;
-   d.iRxDfc.Add();                   			
-}
-
-void EthernetDevice::RxDfc(TAny* aPtr)
-{
-	DP("** (PDD) EthernetDevice::RxDfc");
-	EthernetDevice& d=*(EthernetDevice*)aPtr;
-   
-   TInt x = VNET[VIRTIO_INT_STATUS];
-   DP("** (PDD) EthernetDevice::RxDfc - value of x=%d", x);
-
-   TInt ring_slot = d.iRxUsed->idx & (d.rx_ring_size - 1);
-
-   DP("**(PDD) RxDfc  (d.iTxAvail->idx) = %d (d.iRxAvail->idx) = %d", d.iTxAvail->idx, d.iRxAvail->idx);
-   DP("**(PDD) RxDfc  (d.iRxUsed->idx) = %d ", d.iRxUsed->idx);
-   DP("**(PDD) RxDfc  ring_slot=%d,  (d.iRxUsed->ring[%d].id) = %d", ring_slot, ring_slot, d.iRxUsed->ring[ring_slot].id);
-   DP("**(PDD) RxDfc  d.iRxDesc[1].next = %d", d.iRxDesc[1].next); 
-
-   //check to see if this is a Rx or Tx
-   if (d.iRxUsed->idx != d.rx_last_used)
-   {
-   DP("** (PDD) Received Rx Interrupt");
-   d.rx_last_used++;
-   DP("** (PDD) Value of rx_last_used=%d", d.rx_last_used);
-   d.ReceiveIsr();
-   }
-}
-
-void EthernetDevice::MacConfigure(TEthernetConfigV01 &aConfig)
-{
-	DP("** (PDD) EthernetDevice::MacConfigure");
-	
-	iDefaultConfig.iEthAddress[0] = aConfig.iEthAddress[0];
-	iDefaultConfig.iEthAddress[1] = aConfig.iEthAddress[1];
-	iDefaultConfig.iEthAddress[2] = aConfig.iEthAddress[2];
-	iDefaultConfig.iEthAddress[3] = aConfig.iEthAddress[3];
-	iDefaultConfig.iEthAddress[4] = aConfig.iEthAddress[4];
-	iDefaultConfig.iEthAddress[5] = aConfig.iEthAddress[5];
-	
-	DP ("** (PDD) macaddr %02x:%02x:%02x:%02x:%02x:%02x\n",
-			iDefaultConfig.iEthAddress[0], 
-			iDefaultConfig.iEthAddress[1], 
-			iDefaultConfig.iEthAddress[2], 
-			iDefaultConfig.iEthAddress[3], 
-			iDefaultConfig.iEthAddress[4], 
-			iDefaultConfig.iEthAddress[5]);
-}
-
-//Descriptor list and vring_used must start on a 4k page boundary. 
-TAny * EthernetDevice::AllocAligned(TUint16 size)
-{
-	DP("** (PDD) Enter: EthernetDevice::alloc_aligned");
-	DP("** (PDD) size=%d",size);
-
-   TAny * p = Kern::Alloc(size + 4095);
-	
-   DP("** (PDD) BEFORE: p=%x",p);
-   p = (TAny *)(((TUint32)p + 4095) & ~4095);
-   DP("** (PDD) AFTER: p=%x",p);
-	
-	DP("** (PDD) Exit: EthernetDevice::alloc_aligned");
-	
-	return p;
-}
-	
-TAny EthernetDevice::AllocRings()
-{	
-	DP("** (PDD) Enter: EthernetDevice::AllocRings");
-	
-	TUint size;
-	TUint used_offset;
-	TUint32 p;
-
-	VNET[VIRTIO_QUEUE_SEL] = TX_QUEUE;
-   tx_ring_size = VNET[VIRTIO_QUEUE_NUM];
-
-	DP ("** (PDD) tx_ring_size = %d\n", tx_ring_size);
-	
-	size = (tx_ring_size * (16 + 2)) + 4;
-	used_offset = (size + 4095) & ~1024;
-	DP ("** (PDD) used_offset = %d", used_offset);
-	size = used_offset + 4 + (tx_ring_size * 8);
-	DP ("** (PDD) size = %d", size);
-	
-	p = (TUint32)AllocAligned(size);
-	DP ("** (PDD) p = %x\n", p);
-
-	VNET[VIRTIO_QUEUE_BASE] = Epoc::LinearToPhysical(p);
-
-	iTxDesc = reinterpret_cast<vring_desc*>(p);
-	iTxAvail = reinterpret_cast<vring_avail*>(p + tx_ring_size * 16);
-	iTxUsed = reinterpret_cast<vring_used*>(p + used_offset); 
-    
-   DP ("** (PDD) iTxDesc = %x", iTxDesc);
-   DP ("** (PDD) iTxAvail = %x", iTxAvail);
-   DP ("** (PDD) iTxUsed = %x", iTxUsed);
-    
-	VNET[VIRTIO_QUEUE_SEL] = RX_QUEUE;
-	rx_ring_size = VNET[VIRTIO_QUEUE_NUM];
-	
-	size = (rx_ring_size * (16 + 2)) + 4;
-	used_offset = (size + 4095) & ~4095;
-	size = used_offset + 4 + (rx_ring_size * 8);
-	p = (TUint32)AllocAligned(size);
-    DP ("** (PDD)  p = %x\n", p);
-	VNET[VIRTIO_QUEUE_BASE] = Epoc::LinearToPhysical(p);
-	
-	iRxDesc = reinterpret_cast<vring_desc*>(p);
-	iRxAvail = reinterpret_cast<vring_avail*>(p + rx_ring_size * 16);
-	iRxUsed = reinterpret_cast<vring_used*>(p + used_offset);
-
-    DP ("** (PDD) iRxDesc = %x", iRxDesc);
-    DP ("** (PDD) iRxAvail = %x", iRxAvail);
-    DP ("** (PDD) iRxUsed = %x", iRxUsed);
-
-	DP("** (PDD) Exit: EthernetDevice::AllocRings");
-}
-
-void EthernetDevice::AddRx()
-{
-    DP("** (PDD) Enter: EthernetDevice::AddRx"); 
-   
-    TInt n = iRxAvail->idx & (rx_ring_size - 1);
-    memset(&rx_header, 0, sizeof(rx_header));
-    iRxDesc[0].addr = Epoc::LinearToPhysical((TUint32)&rx_header);
-    iRxDesc[0].len = sizeof(rx_header);
-    iRxDesc[0].flags = VRING_DESC_F_NEXT | VRING_DESC_F_WRITE;
-    iRxDesc[0].next = 1;
-    iRxDesc[1].addr = Epoc::LinearToPhysical((TUint32) iRxBuffer.Ptr());
-    iRxDesc[1].len = ETHERNET_PAYLOAD_SIZE;
-    iRxDesc[1].flags = VRING_DESC_F_WRITE;
-    iRxAvail->ring[n] = 0;
-    iRxAvail->idx++;
-    VNET[VIRTIO_QUEUE_NOTIFY] = RX_QUEUE;
-
-    DP("** (PDD) Exit: EthernetDevice::AddRx");
-}
-
-
-
-void EthernetDevice::SetMacAddress(void)
-	{
-	DP("** (PDD) Enter: EthernetDevice::SetMacAddress");
-	
-	iDefaultConfig.iEthAddress[0] = VNET_MAC[0];
-	iDefaultConfig.iEthAddress[1] = VNET_MAC[1];
-	iDefaultConfig.iEthAddress[2] = VNET_MAC[2];
-	iDefaultConfig.iEthAddress[3] = VNET_MAC[3];
-	iDefaultConfig.iEthAddress[4] = VNET_MAC[4];
-	iDefaultConfig.iEthAddress[5] = VNET_MAC[5];
-	
-	DP ("** (PDD) macaddr %02x:%02x:%02x:%02x:%02x:%02x\n",
-			iDefaultConfig.iEthAddress[0], 
-			iDefaultConfig.iEthAddress[1], 
-			iDefaultConfig.iEthAddress[2], 
-			iDefaultConfig.iEthAddress[3], 
-			iDefaultConfig.iEthAddress[4], 
-			iDefaultConfig.iEthAddress[5]);
-	
-	DP("** (PDD) Exit: EthernetDevice::SetMacAddress");
-	}
-
-//
-// Functions that are just stubs
-//
-
-void EthernetDevice::CheckConfig(TEthernetConfigV01& aConfig)
-{
-	DP("** (PDD) EthernetDevice::CheckConfig");
-}
-
-TInt EthernetDevice::Configure(TEthernetConfigV01 &aConfig)
-{
-	DP("** (PDD) EthernetDevice::Configure");
-	return KErrNone;
-}
--- a/baseport/src/cedar/generic/base/syborg/ethernet/pdd/ethernet_device.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,174 +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: Register definitions and base classes for Ethernet Virtio. 
-*
-*/
-
-#ifndef __QEMUETHERNET_
-#define __QEMUETHERNET_
-
-#include <ethernet.h>
-#include <system.h>
-
-#define SVPDBG
-#ifdef SVPDBG
-#define DP(format...) Kern::Printf(format)
-#else
-#define DP(format...)
-#endif
-
-#define ETHERNET_PAYLOAD_SIZE 1500
-
-#define VIRTIO_CONFIG_S_ACKNOWLEDGE     1
-#define VIRTIO_CONFIG_S_DRIVER          2
-#define VIRTIO_CONFIG_S_DRIVER_OK       4
-#define VIRTIO_CONFIG_S_FAILED          0x80
-
-/* This marks a buffer as continuing via the next field. */
-#define VRING_DESC_F_NEXT       1
-/* This marks a buffer as write-only (otherwise read-only). */
-#define VRING_DESC_F_WRITE      2
-
-#define TX_QUEUE 1
-#define RX_QUEUE 0
-
-#define VNET_MAC ((volatile TUint8 *)(0xc600c000 + 0x100))
-#define VNET ((volatile TUint32 *)0xc600c000)
-
-enum {
-    VIRTIO_ID             = 0,
-    VIRTIO_DEVTYPE        = 1,
-    VIRTIO_HOST_FEATURES  = 2,
-    VIRTIO_GUEST_FEATURES = 3,
-    VIRTIO_QUEUE_BASE     = 4,
-    VIRTIO_QUEUE_NUM      = 5,
-    VIRTIO_QUEUE_SEL      = 6,
-    VIRTIO_QUEUE_NOTIFY   = 7,
-    VIRTIO_STATUS	  	  = 8,
-    VIRTIO_INT_ENABLE     = 9,
-    VIRTIO_INT_STATUS     = 10
-};
-
-typedef struct
-{
-#define VIRTIO_NET_HDR_F_NEEDS_CSUM     1       // Use csum_start, csum_offset
- TUint8 flags;
-#define VIRTIO_NET_HDR_GSO_NONE         0       // Not a GSO frame
-#define VIRTIO_NET_HDR_GSO_TCPV4        1       // GSO frame, IPv4 TCP (TSO)
-#define VIRTIO_NET_HDR_GSO_UDP          3       // GSO frame, IPv4 UDP (UFO)
-#define VIRTIO_NET_HDR_GSO_TCPV6        4       // GSO frame, IPv6 TCP
-#define VIRTIO_NET_HDR_GSO_ECN          0x80    // TCP has ECN set
-  TUint8 gso_type;
-  TUint16 hdr_len;
-  TUint16 gso_size;
-  TUint16 csum_start;
-  TUint16 csum_offset;
-} virtio_net_hdr;
-
-typedef struct
-{
-  TUint64 addr;
-  TUint32 len;
-  TUint16 flags;
-  TUint16 next;
-} vring_desc;
-
-typedef struct
-{
-  TUint16 flags;
-  TUint16 idx;
-  TUint16 ring[16];
-
-} vring_avail;
-
-typedef struct
-{
-  TUint16 flags;
-  TUint16 idx;
-  struct {
-  	TUint32 id;
-  	TUint32 len;
-  } ring[16];
-} vring_used;
-
-
-//
-// Class to identify the device as ethernet device for Symbian
-//
-class EthernetDevice : public DEthernet
-{
-public:
-	EthernetDevice();
-	~EthernetDevice();
-	TInt DoCreate(TInt aUnit, const TDesC8* anInfo);
-	static void Isr(TAny* aPtr);
-	
-	//
-	// Functions that we must implement as we are inheriting from abstract base class
-	//
-	virtual TInt Start();
-	virtual void Stop(TStopMode aMode);
-	virtual void GetConfig(TEthernetConfigV01 &aConfig) const;
-	virtual TInt ValidateConfig(const TEthernetConfigV01 &aConfig) const;
-	virtual void CheckConfig(TEthernetConfigV01 &aConfig);
-	virtual TInt Configure(TEthernetConfigV01 &aConfig);
-	virtual void MacConfigure(TEthernetConfigV01 &aConfig);
-	virtual void Caps(TDes8 &aCaps) const;
-	virtual TInt DisableIrqs();
-	virtual void RestoreIrqs(TInt aIrq);
-	virtual TDfcQue* DfcQ(TInt aUnit);
-	virtual TInt Send(TBuf8<KMaxEthernetPacket+32> &aBuffer);
-	virtual TInt ReceiveFrame(TBuf8<KMaxEthernetPacket+32> &aBuffer, TBool okToUse);
-							  						  
-private:
-
-   TEthernetConfigV01   iDefaultConfig;
-	TInt  			   	iInterruptId;
-	TDfc				      iRxDfc;
-	TUint32				   iCreated;
-	TUint32				   iStarted;
-	
-	//Virtio structs for transmitting data to QEMU.
-	volatile vring_desc  *iTxDesc;
-	volatile vring_avail *iTxAvail;
-	volatile vring_used  *iTxUsed;
-   //Ring size hardcoded in QEMU.    
-	TUint tx_ring_size;
-	
-   //Virtio structs for receiving data from QEMU. 
-	volatile vring_desc  *iRxDesc;
-	volatile vring_avail *iRxAvail;
-	volatile vring_used  *iRxUsed;
-	
-	TUint rx_ring_size;
-   TUint rx_last_used;
-
-   //Virtio packet header definitions. 
-	virtio_net_hdr rx_header;
-	virtio_net_hdr tx_header;
-	
-	//Buffers for Rx/Tx transmission.
-	TBuf8<KMaxEthernetPacket+32> iTxBuffer;
-	TBuf8<KMaxEthernetPacket+32> iRxBuffer;
-		
-	static void RxDfc(TAny* aPtr);
-	
-	//QEMU specific member functions
-	void AllocRings();
-	void* AllocAligned(TUint16 size);
-	void AddRx();
-	void SetMacAddress(void);
-};
-
-#endif // __QEMUETHERNET_
--- a/baseport/src/cedar/generic/base/syborg/ethernet/test/ethernet_test.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +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:
-*
-*/
-
-#include <e32test.h>
-#include <e32debug.h>
-#include <d32ethernet.h>
-
-LOCAL_D RTest test(_L("DRIVER1_TEST"));
-
-_LIT(KDriver1LddFileName,"enet");
-_LIT(KDriver1PddFileName,"ethernet");
-
-_LIT8(KTestSendData,"abcdefghijklmnopqrstuvwxyz");
-_LIT8(KTestLargeSendData,"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
-
-GLDEF_C TInt E32Main()
-    {
-	test.Title();
-
-	TInt r;
-	RDebug::Printf(">>>>>>E32Main()");
-	
-	test.Start(_L("Load Physical Device"));
-	r=User::LoadPhysicalDevice(KDriver1PddFileName);
-	if (r != KErrNone)
-		RDebug::Printf("LoadPhysicalDevice: value of error =%d", r);
-		test(r==KErrNone || r==KErrAlreadyExists);
-
-	test.Next(_L("Load Logical Device"));
-	r=User::LoadLogicalDevice(KDriver1LddFileName);
-	if (r != KErrNone)
-			RDebug::Printf("LoadLogicalDevice: value of error =%d", r);
-			test(r==KErrNone || r==KErrAlreadyExists);
-
-	__KHEAP_MARK;
-
-	test.Next(_L("Open Logical Channel"));
-	RBusDevEthernet ldd;
-
-	r=ldd.Open(0);
-	RDebug::Printf("Value returned from ldd.Open()=%d", r);
-	test(r==KErrNone);
-
-	test.Next(_L("SendData"));
-	TRequestStatus status;
-	ldd.Write(status,KTestSendData);
-	
-	test.Next(_L("SendDataCancel"));
-	ldd.WriteCancel();
-	User::WaitForRequest(status);
-	r=status.Int();
-	//test(r==KErrCancel);
-
-	test.Next(_L("SendData"));
-	ldd.Write(status,KTestSendData);
-	User::WaitForRequest(status);
-	r=status.Int();
-	//test(r==KErrNone);
-
-	test.Next(_L("ReceiveData"));
-	TBuf8<256> buffer;
-	ldd.Read(status,buffer);
-
-	test.Next(_L("ReceiveDataCancel"));
-	ldd.ReadCancel();
-	User::WaitForRequest(status);
-	r=status.Int();
-	test(r==KErrCancel);
-
-	test.Next(_L("Close Logical Channel"));
-	ldd.Close();
-
-	__KHEAP_MARKEND;
-
-	test.End();
-
-	return(0);
-
-  }
-
-
--- a/baseport/src/cedar/generic/base/syborg/ethernet/test/ethernet_test.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +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			ethernet_testapp.exe        
-targettype		exe
-source			ethernet_test.cpp
-library			euser.lib
-systeminclude	/epoc32/include
-
-CAPABILITY	all -tcb
-
-SMPSAFE
--- a/baseport/src/cedar/generic/base/syborg/fb/fb.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +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:
-*
-*/
-
-#include <variant.mmh>
-#include "kernel\kern_ext.mmh"
-
-TARGET			VariantTarget(lcd,dll)
-TARGETTYPE		kext
-
-SYSTEMINCLUDE	AsspNKernIncludePath
-SYSTEMINCLUDE	.
-
-SOURCEPATH		.
-SOURCE			syborg_fb.cpp
-
-LIBRARY			PlatformLib
-
-EPOCALLOWDLLDATA
-
-UID			    0x1000008d 0x100039e8
-VENDORID        0x70000001
-
-ROMTARGET		lcd.dll
-
-CAPABILITY		all
--- a/baseport/src/cedar/generic/base/syborg/fb/syborg_fb.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,487 +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: Minimalistic frame buffer driver
-*
-*/
-
-#include <syborg_priv.h>
-#include "syborg_fb.h"
-
-TPhysAddr Syborg::VideoRamPhys;
-TPhysAddr Syborg::VideoRamPhysSecure;		// Secure display memory
-
-TPhysAddr TSyborg::VideoRamPhys()
-{
-  __KTRACE_OPT(KEXTENSION,Kern::Printf("TSyborg::VideoRamPhys: VideoRamPhys=0x%x", Syborg::VideoRamPhys));
-  return Syborg::VideoRamPhys;
-}
-
-TPhysAddr TSyborg::VideoRamPhysSecure()
-{
-  return Syborg::VideoRamPhysSecure;
-}
-
-LOCAL_C TInt DoHalFunction(TAny* aPtr, TInt aFunction, TAny* a1, TAny* a2)
-{
-  DLcdPowerHandler* pH=(DLcdPowerHandler*)aPtr;
-  return pH->HalFunction(aFunction,a1,a2);
-}
-
-static void rxMsg(TAny* aPtr)
-{
-  DLcdPowerHandler& h=*(DLcdPowerHandler*)aPtr;
-  TMessageBase* pM = h.iMsgQ.iMessage;
-  if(pM)
-	h.HandleMsg(pM);
-}
-
-static void power_up_dfc(TAny* aPtr)
-{
-  ((DLcdPowerHandler*)aPtr)->PowerUpDfc();
-}
-
-void power_down_dfc(TAny* aPtr)
-{
-  ((DLcdPowerHandler*)aPtr)->PowerDownDfc();
-}
-
-void DLcdPowerHandler::DisplayOn()
-{ 
-  PowerUpLcd(iSecureDisplay);
-  iDisplayOn = ETrue;
-}
-
-void DLcdPowerHandler::DisplayOff()
-{
-  PowerDownLcd();
-  iDisplayOn = EFalse;
-}
-
-void DLcdPowerHandler::SwitchDisplay(TBool aSecure)
- {
-   if(aSecure)
-	 {
-	   if(!iSecureDisplay)
-		 {
-		   DisplayOff();
-		   iSecureDisplay = ETrue;
-		   DisplayOn();
-		 }
-	 }
-   else
-	 {
-	   if(iSecureDisplay)
-		 {
-		   DisplayOff();
-		   iSecureDisplay = EFalse;
-		   DisplayOn();
-		 }
-	 }
- }
-
-void DLcdPowerHandler::PowerUpDfc()
-{
-  DisplayOn();
-  PowerUpDone();
-}
-
-void DLcdPowerHandler::PowerDownDfc()
-{
-  DisplayOff();
-  PowerDownDone();
-}
-
-void DLcdPowerHandler::PowerDown(TPowerState)
-{
-  iPowerDownDfc.Enque();
-}
-
-void DLcdPowerHandler::PowerUp()
-{
-  iPowerUpDfc.Enque();
-}
-
-void DLcdPowerHandler::PowerUpLcd(TBool aSecure)
-{
-#if 1
-  WriteReg(iPortAddr, FB_ENABLED, 0);
-  WriteReg(iPortAddr, FB_BASE, aSecure ? iSecurevRamPhys : ivRamPhys);
-  WriteReg(iPortAddr, FB_WIDTH, iVideoInfo.iSizeInPixels.iWidth);
-  WriteReg(iPortAddr, FB_BLANK, 0);
-  WriteReg(iPortAddr, FB_BPP, 32);
-  WriteReg(iPortAddr, FB_COLOR_ORDER, 0);
-  WriteReg(iPortAddr, FB_BYTE_ORDER, 0);
-  WriteReg(iPortAddr, FB_PIXEL_ORDER, 0);
-  WriteReg(iPortAddr, FB_INT_MASK, 0);
-  WriteReg(iPortAddr, FB_ENABLED, 1);
-  WriteReg(iPortAddr, FB_HEIGHT, iVideoInfo.iSizeInPixels.iHeight);
-#endif
-}
-
-void DLcdPowerHandler::PowerDownLcd()
-{
-  WriteReg(iPortAddr, FB_BLANK, 1);
-}
-
-DLcdPowerHandler::DLcdPowerHandler()
-	:	DPowerHandler(KLitLcd),
-		iMsgQ(rxMsg,this,NULL,1),
-		iPowerUpDfc(&power_up_dfc,this,6),
-		iPowerDownDfc(&power_down_dfc,this,7)
-{
-}
-
-void DLcdPowerHandler::ScreenInfo(TScreenInfoV01& anInfo)
-{
-  anInfo.iWindowHandleValid = EFalse;
-  anInfo.iWindowHandle = NULL;
-  anInfo.iScreenAddressValid = ETrue;
-  anInfo.iScreenAddress = (TAny *)(iChunk->LinearAddress());
-  anInfo.iScreenSize.iWidth = iVideoInfo.iSizeInPixels.iWidth;
-  anInfo.iScreenSize.iHeight = iVideoInfo.iSizeInPixels.iHeight;
-}
-
-void DLcdPowerHandler::HandleMsg(TMessageBase* aMsg)
-{
-  if(aMsg->iValue)
-	DisplayOn();
-  else
-	DisplayOff();
-  aMsg->Complete(KErrNone,ETrue);
-}
-
-void DLcdPowerHandler::WsSwitchOnScreen()
-{
-  TThreadMessage& m = Kern::Message();
-  m.iValue = ETrue;
-  m.SendReceive(&iMsgQ);
-}
-
-void DLcdPowerHandler::WsSwitchOffScreen()
-{
-  TThreadMessage& m = Kern::Message();
-  m.iValue = EFalse;
-  m.SendReceive(&iMsgQ);
-}
-
-TInt DLcdPowerHandler::GetCurrentDisplayModeInfo(TVideoInfoV01& aInfo, TBool aSecure)
-{
-  NKern::FMWait(&iLock);
-  if(aSecure)
-	aInfo = iSecureVideoInfo;
-  else
-	aInfo = iVideoInfo;
-  NKern::FMSignal(&iLock);
-  return KErrNone;
-}
-
-TInt DLcdPowerHandler::GetSpecifiedDisplayModeInfo(TInt aMode, TVideoInfoV01& aInfo)
-{
-  if(aMode < 0 || aMode >= KConfigLcdNumberOfDisplayModes)
-	return KErrArgument;
-  
-  NKern::FMWait(&iLock);
-  aInfo = iVideoInfo;
-  NKern::FMSignal(&iLock);
-
-  if(aMode != aInfo.iDisplayMode)
-	{
-	  aInfo.iOffsetToFirstPixel = KCOnfigOffsetToFirstPixel;
-	  aInfo.iIsPalettized       = KConfigIsPalettized;
-	  aInfo.iOffsetBetweenLines = KCOnfigOffsetBetweenLines;
-	  aInfo.iBitsPerPixel       = KConfigBitsPerPixel;
-	}
-  return KErrNone;
-}
-
-TInt DLcdPowerHandler::AllocateFrameBuffer()
-{
-	// Allocate physical RAM for video
-	TInt vSize = TSyborg::VideoRamSize();
-
-	NKern::ThreadEnterCS();
-	TInt r = Epoc::AllocPhysicalRam(vSize,Syborg::VideoRamPhys);
-	if (r != KErrNone)
-	{
-	        NKern::ThreadLeaveCS();
-		Kern::Fault("AllocVideoRam",r);
-	}
-
-	// Map the video RAM
-	ivRamPhys = TSyborg::VideoRamPhys();
-
-	r = DPlatChunkHw::New(iChunk,ivRamPhys,vSize,EMapAttrUserRw|EMapAttrBufferedC);
-
-	NKern::ThreadLeaveCS();
-
-	if(r != KErrNone)
-	  return r;
-
-	TUint* pV = (TUint*)iChunk->LinearAddress();
-
-	// Allocate physical RAM for secure display
-	NKern::ThreadEnterCS();
-	r = Epoc::AllocPhysicalRam(vSize,Syborg::VideoRamPhysSecure);
-	if (r != KErrNone)
-	{
-	        NKern::ThreadLeaveCS();
-		Kern::Fault("AllocVideoRam 2",r);
-	}
-	iSecurevRamPhys = ivRamPhys + vSize;
-	TInt r2 = DPlatChunkHw::New(iSecureChunk,iSecurevRamPhys,vSize,EMapAttrUserRw|EMapAttrBufferedC);
-
-	NKern::ThreadLeaveCS();
-
-	if(r2 != KErrNone)
-	  return r2;
-
-	TUint* pV2 = (TUint*)iSecureChunk->LinearAddress();
-
-	iVideoInfo.iSizeInPixels.iWidth  = KConfigLcdWidth;
-	iVideoInfo.iSizeInPixels.iHeight = KConfigLcdHeight;
-	iVideoInfo.iDisplayMode = KConfigLcdDisplayMode;
-	iVideoInfo.iOffsetToFirstPixel = KCOnfigOffsetToFirstPixel;
-	iVideoInfo.iOffsetBetweenLines = KCOnfigOffsetBetweenLines;
-	iVideoInfo.iIsPalettized = KConfigIsPalettized;
-	iVideoInfo.iBitsPerPixel = KConfigBitsPerPixel;
-	iVideoInfo.iSizeInTwips.iWidth = KConfigLcdWidthInTwips;
-	iVideoInfo.iSizeInTwips.iHeight = KConfigLcdHeightInTwips;
-	iVideoInfo.iIsMono = KConfigIsMono;
-	iVideoInfo.iVideoAddress = (TInt)pV;
-	iVideoInfo.iIsPixelOrderLandscape = KConfigPixelOrderLandscape;
-	iVideoInfo.iIsPixelOrderRGB = KConfigPixelOrderRGB;
-
-	iSecureVideoInfo = iVideoInfo;
-	iSecureVideoInfo.iVideoAddress = (TInt)pV2;
-
-#if 0
-	WriteReg(iPortAddr, FB_ENABLED, 0);
-	WriteReg(IPortAddr, FB_INT_MASK, 0);
-	WriteReg(iPortAddr, FB_BASE, iSecureDisplay ? iSecurevRamPhys : ivRamPhys);
-	WriteReg(iPortAddr, FB_WIDTH, iVideoInfo.iSizeInPixels.iWidth);
-	WriteReg(iPortAddr, FB_HEIGHT, iVideoInfo.iSizeInPixels.iHeight);
-	WriteReg(iPortAddr, FB_BLANK, 0);
-	WriteReg(iPortAddr, FB_ENABLED, 1);
-#endif
-	
-	return KErrNone;
-}
-
-
-TInt DLcdPowerHandler::SetDisplayMode(TInt aMode)
-{
-  if(aMode < 0 || aMode >= KConfigLcdNumberOfDisplayModes)
-	return KErrArgument;
-
-  // store the current mode
-  iVideoInfo.iDisplayMode = aMode;
-
-  // store the current mode for secure screen
-  iSecureVideoInfo.iDisplayMode = aMode;
-
-  return KErrNone;
-}
-
-TInt DLcdPowerHandler::HalFunction(TInt aFunction, TAny* a1, TAny* a2)
-{
-  TInt r=KErrNone;
-  switch(aFunction)
-	{
-	case EDisplayHalScreenInfo:
-	  {
-		TPckgBuf<TScreenInfoV01> vPckg;
-		ScreenInfo(vPckg());
-		Kern::InfoCopy(*(TDes8*)a1,vPckg);
-		break;
-	  }
-	case EDisplayHalWsRegisterSwitchOnScreenHandling:
-	  {
-		iWsSwitchOnScreen=(TBool)a1;
-		break;
-	  }
-	case EDisplayHalWsSwitchOnScreen:
-	  {
-		WsSwitchOnScreen();
-		break;
-	  }
-	case EDisplayHalModeCount:
-	  {
-		TInt ndm = KConfigLcdNumberOfDisplayModes;
-		kumemput32(a1, &ndm, sizeof(ndm));
-		break;
-	  }
-	case EDisplayHalSetMode:
-	  {
-		__KTRACE_OPT(KEXTENSION,Kern::Printf("EDisplayHalSetMode"));
-		__SECURE_KERNEL(
-						if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDisplayHalSetMode")))
-						return KErrPermissionDenied;
-						)
-		  r = SetDisplayMode((TInt)a1);
-		break;
-	  }
-	case EDisplayHalMode:
-	  {
-		kumemput32(a1, &iVideoInfo.iDisplayMode, sizeof(iVideoInfo.iDisplayMode));
-		r = KErrNone;
-		break;
-	  }
-	case EDisplayHalSetPaletteEntry:
-	  {
-		__SECURE_KERNEL(
-						if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDisplayHalSetPaletteEntry")))
-						return KErrPermissionDenied;
-						)
-		  r = KErrNotSupported;
-		break;
-	  }
-	case EDisplayHalPaletteEntry:
-	  {
-		TInt entry;
-		kumemget32(&entry, a1, sizeof(TInt));
-		r = KErrNotSupported;
-		break;
-	  }
-	case EDisplayHalSetState:
-	  {
-		__SECURE_KERNEL(
-						if(!Kern::CurrentThreadHasCapability(ECapabilityPowerMgmt,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDisplayHalSetState")))
-						return KErrPermissionDenied;
-						)
-		  if((TBool)a1)
-			WsSwitchOnScreen();
-		  else
-			WsSwitchOffScreen();
-		break;
-	  }
-	case EDisplayHalState:
-	  {
-		kumemput32(a1, &iDisplayOn, sizeof(TBool));
-		break;
-	  }
-	case EDisplayHalColors:
-	  {
-		TInt mdc = 1<<24;
-		kumemput32(a1, &mdc, sizeof(mdc));
-		break;
-	  }
-	case EDisplayHalCurrentModeInfo:
-	  {
-		TPckgBuf<TVideoInfoV01> vPckg;
-		r = GetCurrentDisplayModeInfo(vPckg(), (TBool)a2);
-		if(KErrNone == r)
-		  Kern::InfoCopy(*(TDes8*)a1,vPckg);
-		break;
-	  }
-	case EDisplayHalSpecifiedModeInfo:
-	  {
-		TPckgBuf<TVideoInfoV01> vPckg;
-		TInt mode;
-		kumemget32(&mode, a1, sizeof(mode));
-		r = GetSpecifiedDisplayModeInfo(mode, vPckg());
-		if(KErrNone == r)
-		  Kern::InfoCopy(*(TDes8*)a2,vPckg);
-		break;
-	  }	
-	case EDisplayHalSecure:
-	  {
-		kumemput32(a1, &iSecureDisplay, sizeof(TBool));
-		break;
-	  }
-	case EDisplayHalSetSecure:
-	  {
-		__SECURE_KERNEL(
-						if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDisplayHalSetSecure")))
-						return KErrPermissionDenied;
-						)
-		  SwitchDisplay((TBool)a1);
-		break;
-	  }
-	default:
-	  {
-		r = KErrNotSupported;
-		break;
-	  }			
-	}
-  return r;
-}
-
-TInt DLcdPowerHandler::Create()
-{
-	iDfcQ = Kern::DfcQue0();	// use low priority DFC queue for this driver 
-
-	iPortAddr = KHwBaseClcd;
-
-	// !@!
-#if 0	
-	// Map the video RAM
-	TInt vSize = TSyborg::VideoRamSize();
-	ivRamPhys = TSyborg::VideoRamPhys();
-
-	TInt r = DPlatChunkHw::New(iChunk,ivRamPhys,vSize,EMapAttrUserRw|EMapAttrBufferedC);
-	if(r != KErrNone)
-	  return r;
-
-	TUint* pV = (TUint*)iChunk->LinearAddress();
-
-	iSecurevRamPhys = ivRamPhys + vSize;
-	TInt r2 = DPlatChunkHw::New(iSecureChunk,iSecurevRamPhys,vSize,EMapAttrUserRw|EMapAttrBufferedC);
-	if(r2 != KErrNone)
-	  return r2;
-
-	TUint* pV2 = (TUint*)iSecureChunk->LinearAddress();
-#endif
-
-	iVideoInfo.iSizeInPixels.iWidth  = KConfigLcdWidth;
-	iVideoInfo.iSizeInPixels.iHeight = KConfigLcdHeight;
-	iVideoInfo.iDisplayMode = KConfigLcdDisplayMode;
-	iVideoInfo.iOffsetToFirstPixel = KCOnfigOffsetToFirstPixel;
-	iVideoInfo.iOffsetBetweenLines = KCOnfigOffsetBetweenLines;
-	iVideoInfo.iIsPalettized = KConfigIsPalettized;
-	iVideoInfo.iBitsPerPixel = KConfigBitsPerPixel;
-	iVideoInfo.iSizeInTwips.iWidth = KConfigLcdWidthInTwips;
-	iVideoInfo.iSizeInTwips.iHeight = KConfigLcdHeightInTwips;
-	iVideoInfo.iIsMono = KConfigIsMono;
-	// !@!	iVideoInfo.iVideoAddress = (TInt)pV;
-	iVideoInfo.iIsPixelOrderLandscape = KConfigPixelOrderLandscape;
-	iVideoInfo.iIsPixelOrderRGB = KConfigPixelOrderRGB;
-
-	iSecureVideoInfo = iVideoInfo;
-	// !@! iSecureVideoInfo.iVideoAddress = (TInt)pV2;
-
-	AllocateFrameBuffer();
-	TInt r = Kern::AddHalEntry(EHalGroupDisplay,DoHalFunction,this);
-	if(r != KErrNone)
-	  return r;
-
-	iPowerUpDfc.SetDfcQ(iDfcQ);
-	iPowerDownDfc.SetDfcQ(iDfcQ);
-	iMsgQ.SetDfcQ(iDfcQ);
-	iMsgQ.Receive();
-
-	Add();
-	DisplayOn();
-
-	return KErrNone;
-}
-
-DECLARE_STANDARD_EXTENSION()
-{
-  TInt r = KErrNoMemory;
-  DLcdPowerHandler* pH=new DLcdPowerHandler;
-  if(pH)
-	r = pH->Create();
-  
-  return r;
-}
--- a/baseport/src/cedar/generic/base/syborg/fb/syborg_fb.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +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: Minimalistic frame buffer driver
-*
-*/
-
-#ifndef _SYBORG_FB_H
-#define _SYBORG_FB_H
-
-#include <videodriver.h>
-#include <nkern.h>
-#include <kernel.h>
-#include <kpower.h>
-#include <system.h>
-
-_LIT(KLitLcd,"SYBORG_FB");
-
-const TUint KConfigLcdWidth            = 640;
-const TUint	KConfigLcdHeight	       = 480;
-const TInt	KConfigLcdWidthInTwips     = 9638;
-const TInt	KConfigLcdHeightInTwips    = 7370;
-const TBool KConfigIsMono              = 0;
-const TBool KConfigIsPalettized        = 0;
-const TInt  KCOnfigOffsetToFirstPixel  = 0;
-const TBool KConfigPixelOrderRGB       = 0;
-const TBool KConfigPixelOrderLandscape = 1;
-const TInt  KConfigLcdDisplayMode       = 2;
-//const TInt  KConfigLcdDisplayMode       = 1;
-const TInt  KConfigLcdNumberOfDisplayModes = 3;
-
-
-const TInt  KConfigBitsPerPixel        = 24;
-const TInt  KCOnfigOffsetBetweenLines  = 2560;
-
-class DLcdPowerHandler : public DPowerHandler
-{
-public: // from DPowerHandler
-  void PowerDown(TPowerState);
-  void PowerUp();
-public:	// to prevent a race condition with WServer trying to power up/down at the same time
-  void PowerUpDfc();
-  void PowerDownDfc();
-public:
-  DLcdPowerHandler();
-  TInt Create();
-  void DisplayOn();
-  void DisplayOff();
-  TInt HalFunction(TInt aFunction, TAny* a1, TAny* a2);
-
-  void PowerUpLcd(TBool aSecure);
-  void PowerDownLcd();
-
-  void ScreenInfo(TScreenInfoV01& aInfo);
-  void WsSwitchOnScreen();
-  void WsSwitchOffScreen();
-  void HandleMsg(TMessageBase* aMsg);
-  void SwitchDisplay(TBool aSecure);
-
-private:
-  TInt GetCurrentDisplayModeInfo(TVideoInfoV01& aInfo, TBool aSecure);
-  TInt GetSpecifiedDisplayModeInfo(TInt aMode, TVideoInfoV01& aInfo);
-  TInt SetDisplayMode(TInt aMode);
-  TInt AllocateFrameBuffer();
-  
-  TBool iDisplayOn;
-  DPlatChunkHw* iChunk;
-  DPlatChunkHw* iSecureChunk;
-  TBool iWsSwitchOnScreen;
-  TBool iSecureDisplay;
-
-public:
-  TDfcQue* iDfcQ;
-  TMessageQue iMsgQ;					// to prevent a race condition with Power Manager trying to power up/down at the same time
-  TDfc iPowerUpDfc;
-  TDfc iPowerDownDfc;	
-
-private:
-  TVideoInfoV01 iVideoInfo;
-  TVideoInfoV01 iSecureVideoInfo;
-  NFastMutex iLock;
-  TPhysAddr ivRamPhys;
-  TPhysAddr iSecurevRamPhys;
-
-public:
-  TLinAddr iPortAddr;
-
-enum {
-    FB_ID               = 0,
-    FB_BASE             = 1,
-    FB_HEIGHT           = 2,
-    FB_WIDTH            = 3,
-    FB_ORIENTATION      = 4,
-    FB_BLANK            = 5,
-    FB_INT_MASK         = 6,
-    /* begin new interface */
-    FB_INTERRUPT_CAUSE  = 7,
-    FB_BPP              = 8,
-    FB_COLOR_ORDER      = 9,
-    FB_BYTE_ORDER       = 10,
-    FB_PIXEL_ORDER      = 11,
-    FB_ROW_PITCH        = 12,
-    FB_ENABLED          = 13,
-    FB_PALETTE_START    = 0x400 >> 2,
-    FB_PALETTE_END   = FB_PALETTE_START+256-1,
-    /* end new interface */
-};
-
-#define FB_INT_VSYNC            (1U << 0)
-#define FB_INT_BASE_UPDATE_DONE (1U << 1)
-
-};
-
-#endif
--- a/baseport/src/cedar/generic/base/syborg/hal/config.hcf	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-EManufacturer=0
-EManufacturerHardwareRev=0
-EManufacturerSoftwareRev=0
-EManufacturerSoftwareBuild=0
-EModel=0
-EMachineUid=0
-EDeviceFamily=0
-EDeviceFamilyRev=0
-ECPU=0
-ECPUArch=0
-ECPUABI=0
-ECPUSpeed = GetCPUSpeed
-ESystemStartupReason = GetSystemStartupReason
-ESystemException = GetSystemException
-ESystemTickPeriod=0
-EMemoryRAM = GetRAMSize
-EMemoryRAMFree = GetFreeRAM
-EMemoryROM = GetROMSize
-EMemoryPageSize=0
-EPowerGood=0
-EPowerBackup=0
-EPowerExternal=0
-EKeyboard=0
-EKeyboardDeviceKeys=0
-EKeyboardAppKeys=0
-EKeyboardClick=0
-EDisplayXPixels=ProcessDisplayCurrentModeInfo
-EDisplayYPixels=ProcessDisplayCurrentModeInfo
-EDisplayXTwips=ProcessDisplayCurrentModeInfo
-EDisplayYTwips=ProcessDisplayCurrentModeInfo
-EDisplayColors=ProcessDisplayColors
-EDisplayState : set = ProcessDisplayState
-EDisplayContrast : set = ProcessDisplayContrast
-EDisplayContrastMax=ProcessDisplayMaxContrast
-EBacklight=0
-EBacklightState :set = ProcessBacklightState
-EPen=0
-EPenX=0
-EPenY=0
-EPenDisplayOn : set = ProcessPenDisplayOnState
-EPenClick=0
-EMouse=0
-EMouseState : set = ProcessMouseState
-EMouseSpeed : set = ProcessMouseSpeed
-EMouseAcceleration : set = ProcessMouseAcceleration
-EMouseButtons=0
-EMouseButtonState = GetMouseButtonState
-ECaseSwitch=0
-ELEDs=0
-ELEDmask : set = ProcessLEDMask
-ESwitches=GetSwitches
-EIntegratedPhone=0
-EDisplayBrightness : set = ProcessDisplayBrightness
-EDisplayBrightnessMax=ProcessDisplayMaxBrightness
-ELanguageIndex : set = 0
-EDisplayIsMono=ProcessDisplaySpecifiedModeInfo
-EDisplayIsPalettized=ProcessDisplaySpecifiedModeInfo
-EDisplayBitsPerPixel=ProcessDisplaySpecifiedModeInfo
-EDisplayNumModes = ProcessDisplayNumModes
-EDisplayMemoryAddress=ProcessDisplayCurrentModeInfo
-EDisplayOffsetToFirstPixel=ProcessDisplaySpecifiedModeInfo
-EDisplayOffsetBetweenLines=ProcessDisplaySpecifiedModeInfo
-EDisplayPaletteEntry : set = ProcessDisplayPaletteEntry
-EDisplayIsPixelOrderRGB=ProcessDisplayCurrentModeInfo
-EDisplayIsPixelOrderLandscape=ProcessDisplayCurrentModeInfo
-EDisplayMode : set = ProcessDisplayMode
-EDebugPort : set = ProcessDebugPort
-EClipboardDrive=0
-ESystemDrive : set = 0
-EDisplayNumberOfScreens=0
-ENanoTickPeriod=0
-EFastCounterFrequency=0
-EFastCounterCountsUp=0
-EHardwareFloatingPoint = GetHardwareFloatingPoint
-
--- a/baseport/src/cedar/generic/base/syborg/hal/hal.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +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:
-*
-*/
-
-#include        <variant.mmh>
-
-TARGET		    VariantTarget(hal,dll)
-TARGETTYPE		dll
-LINKAS			hal.dll
-NOEXPORTLIBRARY
-
-SOURCEPATH		..\..\hal\src
-SOURCE			hal_main.cpp userhal.cpp
-
-SOURCEPATH		\epoc32\build\generatedcpp\hal
-SOURCE			VariantTarget(values,cpp) VariantTarget(config,cpp)
-
-SYSTEMINCLUDE	\epoc32\include \epoc32\include\kernel
-
-LIBRARY			euser.lib
-DEFFILE			..\..\hal\~\hal.def
-
-UID				0x1000008d 0x100039e8
-VENDORID        0x70000001
-
-CAPABILITY		all	
--- a/baseport/src/cedar/generic/base/syborg/hal/values.hda	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-EManufacturer=intel
-EManufacturerHardwareRev=0x1
-EManufacturerSoftwareRev=0x100
-EManufacturerSoftwareBuild=0x250
-EModel=0x42525453
-EMachineUid=OmapH4
-EDeviceFamily=crystal
-EDeviceFamilyRev=0x001
-ECPU=arm
-ECPUArch=0x400
-ECPUABI=arm5
-ECPUSpeed=0
-ESystemStartupReason=cold
-ESystemException=0
-ESystemTickPeriod=15625
-EMemoryRAM=4
-EMemoryRAMFree=2
-EMemoryROM=12
-EMemoryPageSize=0x1000
-EPowerGood=1
-EPowerExternal=1
-EMouse=1
-EMouseState=1
-EMouseSpeed=1
-EMouseAcceleration=1
-EMouseButtons=2
-EMouseButtonState=0
-EMouseX=640
-EMouseY=480
-ECaseSwitch=0
-EIntegratedPhone=0
-ELanguageIndex=0
-EDebugPort=0
-EClipboardDrive=2
-ESystemDrive=0xffff
-EDisplayNumberOfScreens=1
-ENanoTickPeriod=1000
-EFastCounterFrequency=1000000
-EFastCounterCountsUp=1
-
-
--- a/baseport/src/cedar/generic/base/syborg/kasyborg.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +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:
-*
-*/
-
-#include <variant.mmh>
-#include "kernel\kern_ext.mmh"
-
-TARGET			VariantTarget(kasyborg,dll)
-TARGETTYPE		var
-
-EXPORTLIBRARY	kasyborg
-LINKAS			kasyborg.dll
-
-SYSTEMINCLUDE   .\specific
-
-SOURCEPATH		.\specific
-SOURCE		    syborg.cpp interrupts.cpp assp.cpp
-SOURCE		    syborg.cia interrupts.cia
-
-// now specified in kern_ext.lib
-//LIBRARY			ekern.lib
-
-DEFFILE			.\~\kasyborg.def
-
-NOSTRICTDEF
-
-EPOCALLOWDLLDATA
-
-UID				0x1000008d 0x100039e8
-VENDORID        0x70000001
-
-CAPABILITY		all
--- a/baseport/src/cedar/generic/base/syborg/keyboard/keyboard.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +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:
-*
-*/
-
-#include <variant.mmh>
-#include "kernel\kern_ext.mmh"
-
-TARGET			VariantTarget(ekeyb,dll)
-TARGETTYPE		kext
-ROMTARGET		ekeyb.dll
-
-SYSTEMINCLUDE	AsspNKernIncludePath
-
-SOURCEPATH		.
-SOURCE			syborg_keyboard.cpp
-
-//LIBRARY			ekern.lib
-LIBRARY			PlatformLib
-
-//NOEXPORTLIBRARY
-
-//DEFFILE			..\e32\~\empty.def
-//DEFFILE			.\~\exkey.def
-
-//NOSTRICTDEF
-
-UID				0x100039cf 0x100000db
-VENDORID        0x70000001
-
-CAPABILITY		all
--- a/baseport/src/cedar/generic/base/syborg/keyboard/syborg_keyboard.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,227 +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: Minimalistic keyboard driver
-*
-*/
-
-//#define DEBUG
-
-#include "syborg_keyboard.h"
-
-LOCAL_C TInt halFunction(TAny* aPtr, TInt aFunction, TAny* a1, TAny* a2)
-{
-  DKeyboardPs2Soc* pH=(DKeyboardPs2Soc*)aPtr;
-  return pH->HalFunction(aFunction,a1,a2);
-}
-
-void rxMsg(TAny* aPtr)
-{
-  DKeyboardPs2Soc& h=*(DKeyboardPs2Soc*)aPtr;
-  TMessageBase* pM=h.iMsgQ.iMessage;
-  if (pM)
-	h.HandleMsg(pM);
-}
-
-TInt DKeyboardPs2Soc::FifoPop(void)
-{
-  TInt val = iKeyFifo[iFifoPos];
-  iFifoPos++;
-  iFifoCount--;
-  
-  if (iFifoPos == FIFO_SIZE)
-	iFifoPos = 0;
-
-  return val;
-}
-
-void DKeyboardPs2Soc::FifoPush(TInt val)
-{
-  TInt slot;
-
-  if (iFifoCount == FIFO_SIZE)
-	return;
-  
-  slot = iFifoPos + iFifoCount;
-  if (slot >= FIFO_SIZE)
-	slot -= FIFO_SIZE;
-  iKeyFifo[slot] = val;
-  iFifoCount++;
-}
-
-void DKeyboardPs2Soc::Isr(TAny* aPtr)
-{
-  __DEBUG_PRINT("DKeyboardPs2Soc::Isr");
-  DKeyboardPs2Soc& k = *(DKeyboardPs2Soc*)aPtr;
-
-  // Is now auto-clearing
-  while(ReadReg(KHwBaseKmiKeyboard, KBD_FIFO_COUNT)!=0)
-	k.FifoPush(ReadReg(KHwBaseKmiKeyboard, KBD_DATA));
-  
-  //WriteReg(KHwBaseKmiKeyboard,KBD_CLEAR_INT, 0);
-  Interrupt::Clear(EIntKeyboard); 
-  k.iRxDfc.Add();
-}
-
-DKeyboardPs2Soc::DKeyboardPs2Soc()
-  :	DPowerHandler(KLitKeyboard),
-	iRxDfc(RxDfc,this,Kern::DfcQue0(),1),
-	iMsgQ(rxMsg,this,NULL,1)
-{
-  iKeyboardOn = ETrue;
-  iFifoPos = 0;
-  iFifoCount = 0;
-}
-
-TInt DKeyboardPs2Soc::Create()
-{
-  __DEBUG_PRINT("DKeyboardPs2Soc::Create");
-
-  TInt r=KErrNone;
-  iDfcQ=Kern::DfcQue0();
-
-  iFifoPos = iFifoCount = 0;
-
-  r=Kern::AddHalEntry(EHalGroupKeyboard,halFunction,this);
-  if (r!=KErrNone)
-	return r;
-
-  iMsgQ.SetDfcQ(iDfcQ);
-  iMsgQ.Receive();
-
-  r=Interrupt::Bind(EIntKeyboard,Isr,this);
-  if (r==KErrNone) {
-	Add();
-	KeyboardOn();
-  }
-  return r;
-}
-
-void DKeyboardPs2Soc::PowerUp()
-{
-  PowerUpDone();
-}
-
-void DKeyboardPs2Soc::PowerDown(TPowerState)
-{
-  PowerDownDone();
-}
-
-void DKeyboardPs2Soc::KeyboardOn()
-{
-  __DEBUG_PRINT("DKeyboardPs2Soc::KeyboardOn");
-  TInt reg = ReadReg(KHwBaseKmiKeyboard,KBD_ID);
-  
-  Interrupt::Enable(EIntKeyboard);
-  WriteReg(KHwBaseKmiKeyboard,KBD_INT_ENABLE,1);
-}
-
-void DKeyboardPs2Soc::KeyboardOff()
-{
-  __DEBUG_PRINT("DKeyboardPs2Soc::KeyboardOff");
-  Interrupt::Disable(EIntKeyboard);
-  WriteReg(KHwBaseKmiKeyboard,KBD_INT_ENABLE,0);
-}
-
-void DKeyboardPs2Soc::HandleMsg(TMessageBase* aMsg)
-{
-  __DEBUG_PRINT("DKeyboardPs2Soc::HandleMsg");
-  if (aMsg->iValue)
-	KeyboardOn();
-  else
-	KeyboardOff();
-  aMsg->Complete(KErrNone,ETrue);
-}
-
-void DKeyboardPs2Soc::KeyboardInfo(TKeyboardInfoV01& aInfo)
-{
-  aInfo.iKeyboardType=KConfigKeyboardType;
-  aInfo.iDeviceKeys=KConfigKeyboardDeviceKeys;
-  aInfo.iAppsKeys=KConfigKeyboardAppsKeys;
-}
-
-TInt DKeyboardPs2Soc::HalFunction(TInt aFunction, TAny* a1, TAny* a2)
-{
-  TInt r=KErrNone;
-
-  __DEBUG_PRINT("DKeyboardPs2Soc::HalFunction");
-  switch(aFunction)
-	{
-	case EKeyboardHalKeyboardInfo:
-	  {
-		TPckgBuf<TKeyboardInfoV01> kPckg;
-		KeyboardInfo(kPckg());
-		Kern::InfoCopy(*(TDes8*)a1,kPckg);
-		break;
-	  }
-	  // UIKLAF Silent running/power management
-	case EKeyboardHalSetKeyboardState:
-	  {
-		if(!Kern::CurrentThreadHasCapability(ECapabilityPowerMgmt,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EKeyboardHalSetKeyboardState")))
-		  return KErrPermissionDenied;
-		if ((TBool)a1)
-		  {
-			TThreadMessage& m=Kern::Message();
-			m.iValue = ETrue;
-			m.SendReceive(&iMsgQ);
-		  }
-		else
-		  {
-			TThreadMessage& m=Kern::Message();
-			m.iValue = EFalse;
-			m.SendReceive(&iMsgQ);
-		  }
-	  }
-	  break;
-	case EKeyboardHalKeyboardState:
-	  kumemput32(a1, &iKeyboardOn, sizeof(TBool));
-	  break;
-	default:
-	  r=KErrNotSupported;
-	  break;
-	}
-  return r;
-}
-
-void DKeyboardPs2Soc::RxDfc(TAny* aPtr)
-{
-  TRawEvent e;
-  DKeyboardPs2Soc& k = *(DKeyboardPs2Soc*)aPtr;
-
-  while(k.iFifoCount>0) {
-	int keycode = k.FifoPop();
-	int dwn = (keycode & 0x80000000) ? 0 : 1;
-	__DEBUG_PRINT("DKeyboardPs2Soc::RxDfc %d %d", keycode, dwn);
-  
-	keycode &= ~(0x80000000);	
-	if (dwn) {
-	  __DEBUG_PRINT("kbd EKeyDown:%d",keycode);
-	  e.Set(TRawEvent::EKeyDown,KConvertCode[keycode],0);
-	}
-	else {
-	  __DEBUG_PRINT("kbd EKeyUp:%d",keycode);
-	  e.Set(TRawEvent::EKeyUp,KConvertCode[keycode],0);
-	}
-	Kern::AddEvent(e);
-  }
-}
-
-DECLARE_STANDARD_EXTENSION()
-{
-  TInt r=KErrNoMemory;
-  DKeyboardPs2Soc* pK=new DKeyboardPs2Soc;
-  if (pK)
-	r=pK->Create();
-  __KTRACE_OPT(KEXTENSION,__DEBUG_PRINT("Returns %d",r));
-  return r;
-}
--- a/baseport/src/cedar/generic/base/syborg/keyboard/syborg_keyboard.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,337 +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: Minimalistic keyboard driver
-*
-*/
-
-#ifndef _SYBORG_KEYBOARD_H
-#define _SYBORG_KEYBOARD_H
-
-#include <kpower.h>
-#include <e32keys.h>
-#include <system.h>
-
-#ifdef DEBUG
-#define __DEBUG_PRINT(format...)    Kern::Printf(format)
-#else
-#define __DEBUG_PRINT(format...)    __KTRACE_OPT(KBOOT,Kern::Printf(format))
-#endif
-
-#define FIFO_SIZE 16
-
-_LIT(KLitKeyboard,"Syborg Keyboard");
-const TKeyboard	KConfigKeyboardType = EKeyboard_Full;
-const TInt KConfigKeyboardDeviceKeys = 0;
-const TInt KConfigKeyboardAppsKeys = 0;
-
-class DKeyboardPs2Soc : public DPowerHandler
-{
-public:
-  DKeyboardPs2Soc();
-  TInt Create();
-  TInt HalFunction(TInt aFunction, TAny* a1, TAny* a2);
-  void KeyboardInfo(TKeyboardInfoV01& aInfo);
-  void KeyboardOn();
-  void KeyboardOff();
-  void PowerUp();
-  void PowerDown(TPowerState);
-  void HandleMsg(TMessageBase* aMsg);
-
-private:
-  static void Isr(TAny* aPtr);
-  static void RxDfc(TAny* aPtr);
-
- private:
-  TInt FifoPop(void);
-  void FifoPush(TInt val);
-
-  TInt iKeyFifo[FIFO_SIZE];
-  TInt iFifoPos;
-  TInt iFifoCount;
-
-private:
-  TDfc iRxDfc;
-  TBool iKeyboardOn;
-
-public:
-  TDfcQue* iDfcQ;
-  TMessageQue iMsgQ;	
-
-  enum {
-    KBD_ID          = 0,
-    KBD_DATA        = 1,
-    KBD_FIFO_COUNT  = 2,
-    KBD_INT_ENABLE  = 3
-  };
-};
-
-const TUint8 KConvertCode[] =
-  {
-	/*00*/ EStdKeyNull,
-	/*01*/ EStdKeyEscape,
-	/*02*/ '1',
-	/*03*/ '2',
-	/*04*/ '3',
-	/*05*/ '4',
-	/*06*/ '5',
-	/*07*/ '6',
-	/*08*/ '7',
-	/*09*/ '8',
-	/*0a*/ '9',
-	/*0b*/ '0',
-	/*0c*/ EStdKeyMinus,
-	/*0d*/ EStdKeyEquals, 
-	/*0e*/ EStdKeyBackspace,
-	/*0f*/ EStdKeyTab,
-	
-	/*10*/ 'Q',
-	/*11*/ 'W',
-	/*12*/ 'E',
-	/*13*/ 'R',
-	/*14*/ 'T',
-	/*15*/ 'Y',
-	/*16*/ 'U',
-	/*17*/ 'I',
-	/*18*/ 'O',
-	/*19*/ 'P',
-	/*1a*/ EStdKeySquareBracketLeft,
-	/*1b*/ EStdKeySquareBracketRight,
-	/*1c*/ EStdKeyEnter,
-	/*1d*/ EStdKeyLeftCtrl,
-	/*1e*/ 'A',
-	/*1f*/ 'S',
-	
-	/*20*/ 'D',
-	/*21*/ 'F',
-	/*22*/ 'G',
-	/*23*/ 'H',
-	/*24*/ 'J',
-	/*25*/ 'K',
-	/*26*/ 'L',
-	/*27*/ EStdKeySemiColon,
-	/*28*/ EStdKeySingleQuote,
-	/*29*/ EStdKeyNull,
-	/*2a*/ EStdKeyLeftShift,
-	/*2b*/ EStdKeyHash,
-	/*2c*/ 'Z',
-	/*2d*/ 'X',
-	/*2e*/ 'C',
-	/*2f*/ 'V',
-	
-	/*30*/ 'B',
-	/*31*/ 'N',
-	/*32*/ 'M',
-	/*33*/ EStdKeyComma,
-	/*34*/ EStdKeyFullStop,
-	/*35*/ EStdKeyForwardSlash,
-	/*36*/ EStdKeyRightShift,
-	/*37*/ EStdKeyPrintScreen,
-	/*38*/ EStdKeyLeftAlt,
-	/*39*/ EStdKeySpace,
-	/*3a*/ EStdKeyCapsLock,
-	/*3b*/ EStdKeyMenu,    // EStdKeyF1,
-	/*3c*/ EStdKeyF2,
-	/*3d*/ EStdKeyF3,
-	/*3e*/ EStdKeyF4,
-	/*3f*/ EStdKeyF5,
-	
-	/*40*/ EStdKeyF6,
-	/*41*/ EStdKeyF7,
-	/*42*/ EStdKeyF8,
-	/*43*/ EStdKeyF9,
-	/*44*/ EStdKeyF10,
-	/*45*/ EStdKeyNull,
-	/*46*/ EStdKeyScrollLock,
-	/*47*/ EStdKeyHome,
-	/*48*/ EStdKeyUpArrow,
-	/*49*/ EStdKeyPageUp,
-	/*4a*/ EStdKeyNull,
-	/*4b*/ EStdKeyLeftArrow,
-	/*4c*/ EStdKeyNull,
-	/*4d*/ EStdKeyRightArrow,
-	/*4e*/ EStdKeyNull,
-	/*4f*/ EStdKeyNull,
-	
-	/*50*/ EStdKeyDownArrow,
-	/*51*/ EStdKeyPageDown,
-	/*52*/ EStdKeyInsert,
-	/*53*/ EStdKeyDelete,
-	/*54*/ EStdKeyNull,
-	/*55*/ EStdKeyNull,
-	/*56*/ EStdKeyBackSlash,
-	/*57*/ EStdKeyF11,
-	/*58*/ EStdKeyF12,
-	/*59*/ EStdKeyNull,
-	/*5a*/ EStdKeyNull,
-	/*5b*/ EStdKeyNull,
-	/*5c*/ EStdKeyNull,
-	/*5d*/ EStdKeyNull,
-	/*5e*/ EStdKeyNull,
-	/*5f*/ EStdKeyNull,
-
-	/*60*/ EStdKeyNull,
-	/*61*/ EStdKeyNull,
-	/*62*/ EStdKeyNull,
-	/*63*/ EStdKeyNull,
-	/*64*/ EStdKeyNull,
-	/*65*/ EStdKeyNull,
-	/*66*/ EStdKeyNull,
-	/*67*/ EStdKeyNull,
-	/*68*/ EStdKeyNull,
-	/*69*/ EStdKeyNull,
-	/*6a*/ EStdKeyNull,
-	/*6b*/ EStdKeyNull,
-	/*6c*/ EStdKeyNull,
-	/*6d*/ EStdKeyNull,
-	/*6e*/ EStdKeyNull,
-	/*6f*/ EStdKeyNull,
-	
-	/*70*/ EStdKeyNull,
-	/*71*/ EStdKeyNull,
-	/*72*/ EStdKeyNull,
-	/*73*/ EStdKeyNull,
-	/*74*/ EStdKeyNull,
-	/*75*/ EStdKeyNull,
-	/*76*/ EStdKeyNull,
-	/*77*/ EStdKeyNull,
-	/*78*/ EStdKeyNull,
-	/*79*/ EStdKeyNull,
-	/*7a*/ EStdKeyNull,
-	/*7b*/ EStdKeyNull,
-	/*7c*/ EStdKeyNull,
-	/*7d*/ EStdKeyNull,
-	/*7e*/ EStdKeyNull,
-	/*7f*/ EStdKeyNull,
-	
-	/*80*/ EStdKeyNull,
-	/*81*/ EStdKeyNull,
-	/*82*/ EStdKeyNull,
-	/*83*/ EStdKeyNull,
-	/*84*/ EStdKeyNull,
-	/*85*/ EStdKeyNull,
-	/*86*/ EStdKeyNull,
-	/*87*/ EStdKeyNull,
-	/*88*/ EStdKeyNull,
-	/*89*/ EStdKeyNull,
-	/*8a*/ EStdKeyNull,
-	/*8b*/ EStdKeyNull,
-	/*8c*/ EStdKeyNull,
-	/*8d*/ EStdKeyNull,
-	/*8e*/ EStdKeyNull,
-	/*8f*/ EStdKeyNull,
-	
-	/*90*/ EStdKeyNull,
-	/*91*/ EStdKeyNull,
-	/*92*/ EStdKeyNull,
-	/*93*/ EStdKeyNull,
-	/*94*/ EStdKeyNull,
-	/*95*/ EStdKeyNull,
-	/*96*/ EStdKeyNull,
-	/*97*/ EStdKeyNull,
-	/*98*/ EStdKeyNull,
-	/*99*/ EStdKeyNull,
-	/*9a*/ EStdKeyNull,
-	/*9b*/ EStdKeyNull,
-	/*9c*/ EStdKeyNull,
-	/*9d*/ EStdKeyNull,
-	/*9e*/ EStdKeyNull,
-	/*9f*/ EStdKeyNull,
-
-  	/*a0*/ EStdKeyNull,
-	/*a1*/ EStdKeyNull,
-	/*a2*/ EStdKeyNull,
-	/*a3*/ EStdKeyNull,
-	/*a4*/ EStdKeyNull,
-	/*a5*/ EStdKeyNull,
-	/*a6*/ EStdKeyNull,
-	/*a7*/ EStdKeyNull,
-	/*a8*/ EStdKeyNull,
-	/*a9*/ EStdKeyNull,
-	/*aa*/ EStdKeyNull,
-	/*ab*/ EStdKeyNull,
-	/*ac*/ EStdKeyNull,
-	/*ad*/ EStdKeyNull,
-	/*ae*/ EStdKeyNull,
-	/*af*/ EStdKeyNull,
-
-  	/*b0*/ EStdKeyNull,
-	/*b1*/ EStdKeyNull,
-	/*b2*/ EStdKeyNull,
-	/*b3*/ EStdKeyNull,
-	/*b4*/ EStdKeyNull,
-	/*b5*/ EStdKeyNull,
-	/*b6*/ EStdKeyNull,
-	/*b7*/ EStdKeyNull,
-	/*b8*/ EStdKeyNull,
-	/*b9*/ EStdKeyNull,
-	/*ba*/ EStdKeyNull,
-	/*bb*/ EStdKeyNull,
-	/*bc*/ EStdKeyNull,
-	/*bd*/ EStdKeyNull,
-	/*be*/ EStdKeyNull,
-	/*bf*/ EStdKeyNull,
-
-  	/*c0*/ EStdKeyNull,
-	/*c1*/ EStdKeyNull,
-	/*c2*/ EStdKeyNull,
-	/*c3*/ EStdKeyNull,
-	/*c4*/ EStdKeyNull,
-	/*c5*/ EStdKeyNull,
-	/*c6*/ EStdKeyNull,
-	/*c7*/ EStdKeyNull,
-	/*c8*/ EStdKeyNull,
-	/*c9*/ EStdKeyNull,
-	/*ca*/ EStdKeyNull,
-	/*cb*/ EStdKeyNull,
-	/*cc*/ EStdKeyNull,
-	/*cd*/ EStdKeyNull,
-	/*ce*/ EStdKeyNull,
-	/*cf*/ EStdKeyNull,
-
-  	/*d0*/ EStdKeyNull,
-	/*d1*/ EStdKeyNull,
-	/*d2*/ EStdKeyNull,
-	/*d3*/ EStdKeyNull,
-	/*d4*/ EStdKeyNull,
-	/*d5*/ EStdKeyNull,
-	/*d6*/ EStdKeyNull,
-	/*d7*/ EStdKeyNull,
-	/*d8*/ EStdKeyNull,
-	/*d9*/ EStdKeyNull,
-	/*da*/ EStdKeyNull,
-	/*db*/ EStdKeyNull,
-	/*dc*/ EStdKeyNull,
-	/*dd*/ EStdKeyNull,
-	/*de*/ EStdKeyNull,
-	/*df*/ EStdKeyNull,
-
-	/*e0*/ EStdKeyNull,
-	/*e1*/ EStdKeyNull,
-	/*e2*/ EStdKeyNull,
-	/*e3*/ EStdKeyNull,
-	/*e4*/ EStdKeyNull,
-	/*e5*/ EStdKeyNull,
-	/*e6*/ EStdKeyNull,
-	/*e7*/ EStdKeyNull,
-	/*e8*/ EStdKeyNull,
-	/*e9*/ EStdKeyNull,
-	/*ea*/ EStdKeyNull,
-	/*eb*/ EStdKeyNull,
-	/*ec*/ EStdKeyNull,
-	/*ed*/ EStdKeyNull,
-	/*ee*/ EStdKeyNull,
-	/*ef*/ EStdKeyNull,
-};
-
-#endif
--- a/baseport/src/cedar/generic/base/syborg/keymap/keymap.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1952 +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: This is for a UK Keyboard
-*
-*/
-
-#include <k32keys.h>
-
-//#define US_KEYBOARD
-
-// the "array" parameter must be a true array and not a pointer
-#define ARRAY_LENGTH(array) (sizeof(array)/sizeof(array[0]))
-
-#define TABLE_ENTRY_ANOTHER_CTRL_DIGIT					\
-	{  													\
-		{												\
-		EModifierKeyUp|EModifierFunc,	                \
-		0												\
-		},												\
-		{												\
-		EKeyNull,										\
-		EAnyDigitGivenRadix								\
-		},												\
-		{												\
-		EStateCtrlDigits,								\
-		EAddOnCtrlDigit,								\
-		0												\
-		}												\
-	}
-
-// This table is searched for a match if a match has not been
-// found in the current state's table
-
-LOCAL_D const SFuncTableEntry defaultTable[]=
-	{
-		{ // prevent key up events generating keycodes
-			{
-			EModifierKeyUp,
-			EModifierKeyUp
-			},
-			{
-			EKeyNull,
-			EAnyKey
-			},
-			{
-			EStateUnchanged,
-			EDoNothing,
-			0
-			}
-		},
-		{ // prevent any modifer key from changing state
-			{
-			0,
-			0
-			},
-			{
-			EKeyNull,
-			EAnyModifierKey
-			},
-			{
-			EStateUnchanged,
-			EDoNothing,
-			0
-			}
-		},
-		{ // filter out any unprocessed codes???
-			{
-			0,
-			0
-			},
-			{
-			EKeyNull,
-			EAnyKey
-			},
-			{
-			EStateNormal,
-			EDoNothing,
-			0
-			}
-		}
-	};
-
-// The table indicating which keys change which modifiers;
-// the state field in this table is ignored
-LOCAL_D const SFuncTableEntry modifierTable[]=
-	{
-        {
-			{
-			EModifierKeyUp,
-			0
-			},
-			{
-			EKeyCapsLock,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			EToggleModifier,
-			EModifierCapsLock
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			0
-			},
-			{
-			EKeyNumLock,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			EToggleModifier,
-			EModifierNumLock
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			0
-			},
-			{
-			EKeyScrollLock,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			EToggleModifier,
-			EModifierScrollLock
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			0
-			},
-			{
-			EKeyLeftAlt,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			ETurnOnModifier,
-			EModifierAlt|EModifierLeftAlt
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			EModifierKeyUp
-			},
-			{
-			EKeyLeftAlt,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			ETurnOffModifier,
-			EModifierLeftAlt
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			0
-			},
-			{
-			EKeyLeftFunc,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			ETurnOnModifier,
-			EModifierFunc|EModifierLeftFunc
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			EModifierKeyUp
-			},
-			{
-			EKeyLeftFunc,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			ETurnOffModifier,
-			EModifierLeftFunc
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			0
-			},
-			{
-			EKeyLeftShift,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			ETurnOnModifier,
-			EModifierShift|EModifierLeftShift
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			EModifierKeyUp
-			},
-			{
-			EKeyLeftShift,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			ETurnOffModifier,
-			EModifierLeftShift
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			0
-			},
-			{
-			EKeyLeftCtrl,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			ETurnOnModifier,
-			EModifierCtrl|EModifierLeftCtrl
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			EModifierKeyUp
-			},
-			{
-			EKeyLeftCtrl,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			ETurnOffModifier,
-			EModifierLeftCtrl
-			}
-        },
-		{
-			{
-			EModifierKeyUp,
-			0
-			},
-			{
-			EKeyRightAlt,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			ETurnOnModifier,
-			EModifierAlt|EModifierRightAlt
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			EModifierKeyUp
-			},
-			{
-			EKeyRightAlt,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			ETurnOffModifier,
-			EModifierRightAlt
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			0
-			},
-			{
-			EKeyRightFunc,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			ETurnOnModifier,
-			EModifierFunc|EModifierRightFunc
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			EModifierKeyUp
-			},
-			{
-			EKeyRightFunc,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			ETurnOffModifier,
-			EModifierRightFunc
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			0
-			},
-			{
-			EKeyRightShift,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			ETurnOnModifier,
-			EModifierShift|EModifierRightShift
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			EModifierKeyUp
-			},
-			{
-			EKeyRightShift,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			ETurnOffModifier,
-			EModifierRightShift
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			0
-			},
-			{
-			EKeyRightCtrl,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			ETurnOnModifier,
-			EModifierCtrl|EModifierRightCtrl
-			}
-		},
-		{
-			{
-			EModifierKeyUp,
-			EModifierKeyUp
-			},
-			{
-			EKeyRightCtrl,
-			EMatchKey
-			},
-			{
-			EStateUnchanged,
-			ETurnOffModifier,
-			EModifierRightCtrl
-			}
-		}
-	};
-
-// table0 to table12 are the tables corresponding to states
-// 0 to 12 respectively
-
-//LOCAL_D const SFuncTableEntry table0[]=
-//	{
-//	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
-//	};
-
-LOCAL_D const SFuncTableEntry table1[]=
-	{
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'e',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcAe
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'c',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcCcedilla
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			's',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1EsTset
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'o',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcOslash
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'd',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcThorn
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			't',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcSoftTh
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'l',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LeftChevron
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'r',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1RightChevron
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'x',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1InvExclam
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'q',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1InvQuest
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'a',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcAo
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'p',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1Pound
-			}
-		},
-	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
-	};
-
-LOCAL_D const SFuncTableEntry table2[]=
-	{
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'a',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcAumlaut
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'e',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcEumlaut
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'i',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcIumlaut
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'o',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcOumlaut
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'u',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcUumlaut
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'y',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcYumlaut
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			' ',
-			EMatchKey
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1SpaceUmlaut
-			}
-		},
-	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
-	};
-
-LOCAL_D const SFuncTableEntry table3[]=
-	{
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'a',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcAgrave
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'e',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcEgrave
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'i',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcIgrave
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'o',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcOgrave
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'u',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcUgrave
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			' ',
-			EMatchKey
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1SpaceGrave
-			}
-		},
-	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
-	};
-
-LOCAL_D const SFuncTableEntry table4[]=
-	{
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'a',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcAacute
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'e',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcEacute
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'i',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcIacute
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'o',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcOacute
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'u',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcUacute
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'y',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcYacute
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			' ',
-			EMatchKey
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcSpaceAcute
-			}
-		},
-	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
-	};
-
-LOCAL_D const SFuncTableEntry table5[]=
-	{
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'a',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcAtilde
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'n',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcNtilde
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'o',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcOtilde
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			' ',
-			EMatchKey
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcSpaceTilde
-			}
-		},
-	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
-	};
-
-LOCAL_D const SFuncTableEntry table6[]=
-	{
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'a',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcAcirc
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'e',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcEcirc
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'i',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcIcirc
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'o',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcOcirc
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			'u',
-			EMatchKeyCaseInsens
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcUcirc
-			}
-		},
-		{
-			{
-			EModifierFunc|EModifierKeyUp,
-			0
-			},
-			{
-			' ',
-			EMatchKey
-			},
-			{
-			EStateNormal,
-			EPassSpecialKeyThru,
-			ELatin1LcSpaceCirc
-			}
-		},
-	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
-	};
-
-//LOCAL_D const SFuncTableEntry table7[]=
-//	{
-//	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
-//	};
-
-//LOCAL_D const SFuncTableEntry table8[]=
-//	{
-//	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
-//	};
-
-//LOCAL_D const SFuncTableEntry table9[]=
-//	{
-//	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
-//	};
-
-LOCAL_D const SFuncTableEntry table10[]=
-	{
-		{ // filter out up key strokes
-			{
-			EModifierKeyUp,
-			EModifierKeyUp
-			},
-			{
-			EKeyNull,
-			EAnyKey
-			},
-			{
-			EStateUnchanged,
-			EDoNothing,
-			0
-			}
-		},
-		{ // check for ctrl-number presses
-			{
-			EModifierCtrl|EModifierFunc|EModifierKeyUp,
-			EModifierCtrl
-			},
-			{
-			EKeyNull,
-			EAnyDecimalDigit
-			},
-			{
-			EStateDerivedFromDigitEntered,
-			EAddOnCtrlDigit,
-			0
-			}
-		},
-		{ // pass thru any keys which can't be state control keys
-			{
-			EModifierFunc,
-			0,
-			},
-			{
-			EKeyNull,
-			EAnyKey
-			},
-			{
-			EStateUnchanged,
-			EPassKeyThru,
-			0
-			}
-		},
-		{ // pass thru any keys which can't be state control keys
-			{
-			EModifierCtrl,
-			EModifierCtrl,
-			},
-			{
-			EKeyNull,
-			EAnyKey
-			},
-			{
-			EStateUnchanged,
-			EPassKeyThru,
-			0
-			}
-		},
-		{ // check for FN-q
-			{
-			EModifierCtrl|EModifierFunc|EModifierKeyUp,
-			EModifierFunc
-			},
-			{
-			'q',
-			EMatchKeyCaseInsens
-			},
-			{
-			1,
-			EDoNothing,
-			0
-			}
-		},
-		{ // check for FN-z
-			{
-			EModifierCtrl|EModifierFunc|EModifierKeyUp,
-			EModifierFunc
-			},
-			{
-			'z',
-			EMatchKeyCaseInsens
-			},
-			{
-			2,
-			EDoNothing,
-			0
-			}
-		},
-		{ // check for FN-x
-			{
-			EModifierCtrl|EModifierFunc|EModifierKeyUp,
-			EModifierFunc
-			},
-			{
-			'x',
-			EMatchKeyCaseInsens
-			},
-			{
-			3,
-			EDoNothing,
-			0
-			}
-		},
-		{ // check for FN-c
-			{
-			EModifierCtrl|EModifierFunc|EModifierKeyUp,
-			EModifierFunc
-			},
-			{
-			'c',
-			EMatchKeyCaseInsens
-			},
-			{
-			4,
-			EDoNothing,
-			0
-			}
-		},
-		{ // check for FN-v
-			{
-			EModifierCtrl|EModifierFunc|EModifierKeyUp,
-			EModifierFunc
-			},
-			{
-			'v',
-			EMatchKeyCaseInsens
-			},
-			{
-			5,
-			EDoNothing,
-			0
-			}
-		},
-		{ // check for FN-b
-			{
-			EModifierCtrl|EModifierFunc|EModifierKeyUp,
-			EModifierFunc
-			},
-			{
-			'b',
-			EMatchKeyCaseInsens
-			},
-			{
-			6,
-			EDoNothing,
-			0
-			}
-		},
-		{ // pass thru any non-processed keys
-			{
-			0,
-			0
-			},
-			{
-			EKeyNull,
-			EAnyKey
-			},
-			{
-			EStateUnchanged,
-			EPassKeyThru,
-			0
-			}
-		}
-	};
-
-//LOCAL_D const SFuncTableEntry table11[]=
-//	{
-//	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
-//	};
-
-LOCAL_D const SFuncTableEntry table12[]=
-	{  
-		{
-			{
-			EModifierKeyUp,
-			EModifierKeyUp
-			},
-			{
-			EKeyLeftCtrl,
-			EMatchLeftOrRight
-			},
-			{
-			EStateNormal,
-			EPassCtrlDigitsThru,
-			0
-			}
-		},
-	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
-	};
-
-LOCAL_D const SFuncTable genFuncTables[]=
-	{
-		{
-		0,
-		NULL
-		},
-		{
-		ARRAY_LENGTH(table1),
-		&table1[0]
-		},
-		{
-		ARRAY_LENGTH(table2),
-		&table2[0]
-		},
-		{
-		ARRAY_LENGTH(table3),
-		&table3[0]
-		},
-		{
-		ARRAY_LENGTH(table4),
-		&table4[0]
-		},
-		{
-		ARRAY_LENGTH(table5),
-		&table5[0]
-		},
-		{
-		ARRAY_LENGTH(table6),
-		&table6[0]
-		},
-		{
-		0,
-		NULL
-		},
-		{
-		0,
-		NULL
-		},
-		{
-		0,
-		NULL
-		},
-		{
-		ARRAY_LENGTH(table10),
-		&table10[0]
-		},
-		{
-		0,
-		NULL
-		},
-		{
-		ARRAY_LENGTH(table12),
-		&table12[0]
-		}
-	};
-
-LOCAL_D const SFuncTables FuncTables=
-	{
-		{
-		ARRAY_LENGTH(defaultTable),
-		&defaultTable[0]
-		},
-		{
-		ARRAY_LENGTH(modifierTable),
-		&modifierTable[0]
-		},
-	ARRAY_LENGTH(genFuncTables),
-	&genFuncTables[0]
-	};
-
-LOCAL_D const SScanCodeBlock scanCodeBlock_unmodifiable[]=
-	{
-	{EStdKeyLeftShift, EStdKeyScrollLock}
-	};
-
-LOCAL_D const TUint16 convKeyCodes_unmodifiable[]=
-	{
-	EKeyLeftShift,
-	EKeyRightShift,
-	EKeyLeftAlt,
-	EKeyRightAlt,
-	EKeyLeftCtrl,
-	EKeyRightCtrl,
-	EKeyLeftFunc,
-	EKeyRightFunc,
-	EKeyCapsLock,
-	EKeyNumLock,
-	EKeyScrollLock
-	};
-
-// base: this table traps all of the keyboard's scanCodes except those in convKeyCodes_unmodifiable
-LOCAL_D const SScanCodeBlock scanCodeBlock_base[]=
-	{
-	{EStdKeyNull, EStdKeyDownArrow},
-	{'0', '9'},
-	{'A', 'Z'},
-	{EStdKeyF1, EStdKeyDictaphoneRecord},
-	};
-
-LOCAL_D const TUint16 convKeyCodes_base[]=
-	{
-	EKeyNull,
-	EKeyBackspace,
-	EKeyTab,
-	EKeyEnter,
-	EKeyEscape,
-	' ',
-	EKeyPrintScreen,
-	EKeyPause,
-	EKeyHome,
-	EKeyEnd,
-	EKeyPageUp,
-	EKeyPageDown,
-	EKeyInsert,
-	EKeyDelete,
-	EKeyLeftArrow,
-	EKeyRightArrow,
-	EKeyUpArrow,
-	EKeyDownArrow,
-	'0',
-	'1',
-	'2',
-	'3',
-	'4',
-	'5',
-	'6',
-	'7',
-	'8',
-	'9',
-	'a',
-	'b',
-	'c',
-	'd',
-	'e',
-	'f',
-	'g',
-	'h',
-	'i',
-	'j',
-	'k',
-	'l',
-	'm',
-	'n',
-	'o',
-	'p',
-	'q',
-	'r',
-	's',
-	't',
-	'u',
-	'v',
-	'w',
-	'x',
-	'y',
-	'z',
-	EKeyF1,
-	EKeyF2,
-	EKeyF3,
-	EKeyF4,
-	EKeyF5,
-	EKeyF6,
-	EKeyF7,
-	EKeyF8,
-	EKeyF9,
-	EKeyF10,
-	EKeyF11,
-	EKeyF12,
-	EKeyF13,
-	EKeyF14,
-	EKeyF15,
-	EKeyF16,
-	EKeyF17,
-	EKeyF18,
-	EKeyF19,
-	EKeyF20,
-	EKeyF21,
-	EKeyF22,
-	EKeyF23,
-	EKeyF24,
-	'`',
-	',',
-	'.',
-	'/',
-	'\\',
-	';',
-	'\'',
-#ifndef US_KEYBOARD
-	'#',
-#else
-	'\\',
-#endif
-	'[',
-	']',
-	'-',
-	'=',
-	'/',
-	'*',
-	'-',
-	'+',
-	EKeyEnter,
-	EKeyEnd,
-	EKeyDownArrow,
-	EKeyPageDown,
-	EKeyLeftArrow,
-	EKeyNull, // numeric keypad '5'
-	EKeyRightArrow,
-	EKeyHome,
-	EKeyUpArrow,
-	EKeyPageUp,
-	EKeyInsert,
-	EKeyDelete,
-    EKeyMenu,
-    EKeyBacklightOn,
-    EKeyBacklightOff,
-    EKeyBacklightToggle,
-    EKeyIncContrast,
-    EKeyDecContrast,
-    EKeySliderDown,
-    EKeySliderUp,
-    EKeyDictaphonePlay,
-    EKeyDictaphoneStop,
-    EKeyDictaphoneRecord,
-	};
-
-// caps-lock: this table traps those scanCodes which are affected by caps-lock
-LOCAL_D const SScanCodeBlock scanCodeBlock_capsLock[]=
-	{
-	{'A', 'Z'}
-	};
-
-LOCAL_D const TUint16 convKeyCodes_capsLock[]=
-	{
-	'A',
-	'B',
-	'C',
-	'D',
-	'E',
-	'F',
-	'G',
-	'H',
-	'I',
-	'J',
-	'K',
-	'L',
-	'M',
-	'N',
-	'O',
-	'P',
-	'Q',
-	'R',
-	'S',
-	'T',
-	'U',
-	'V',
-	'W',
-	'X',
-	'Y',
-	'Z'
-	};
-
-// shift: this table traps those scanCodes which are affected
-// by shift EXCEPT for those scanCodes affected by caps-lock
-LOCAL_D const SScanCodeBlock scanCodeBlock_shift[]=
-	{
-	{'0', '9'},
-	{EStdKeyXXX, EStdKeyEquals},
-	};
-
-LOCAL_D const TUint16 convKeyCodes_shift[]=
-	{
-	')',
-	'!',
-	'"',
-	ELatin1Pound,
-	'$',
-	'%',
-	'^',
-	'&',
-	'*',
-	'(',
-	ELatin1LogicNot,
-	'<',
-	'>',
-	'?',
-	'|',
-	':',
-	'@',
-	'~',
-	'{',
-	'}',
-	'_',
-	'+'
-	};
-
-// numlock: this table traps those scanCodes which are affected by numlock
-LOCAL_D const SScanCodeBlock scanCodeBlock_numLock[]=
-	{
-	{EStdKeyNkpForwardSlash, EStdKeyNkpFullStop}
-	};
-
-LOCAL_D const TUint16 convKeyCodes_numLock[]=
-	{
-	'/',
-	'*',
-	'-',
-	'+',
-	EKeyEnter,
-	'1',
-	'2',
-	'3',
-	'4',
-	'5',
-	'6',
-	'7',
-	'8',
-	'9',
-	'0',
-	'.'
-	};
-
-// func: this table traps those scanCodes which are affected
-// by func but not shift
-LOCAL_D const SScanCodeBlock scanCodeBlock_func[]=
-	{
-	{'0', '9'},
-	{'K', 'L'},
-	{'U', 'U'},
-	{'I', 'I'},
-	{'O', 'P'},
-	{EStdKeySingleQuote, EStdKeySingleQuote},
-	{EStdKeyLeftArrow, EStdKeyDownArrow},
-	{EStdKeyTab, EStdKeyTab},
-	{EStdKeyEscape, EStdKeyEscape},
-	{'M', 'M'},
-	{EStdKeyComma, EStdKeyFullStop},
-	{EStdKeySpace, EStdKeySpace},
-	{EStdKeyMenu, EStdKeyMenu},
-	};
-
-LOCAL_D const TUint16 convKeyCodes_func[]=
-	{
-	'}',
-	'_',
-	'#',
-	'\\',
-	'@',
-	'<',
-	'>',
-	'[',
-	']',
-	'{',
-	'~',
-	';',
-	'/',
-	'*',
-	'-',
-	'+',
-	':',
-	EKeyHome,
-	EKeyEnd,
-	EKeyPageUp,
-	EKeyPageDown,
-	EKeyCapsLock,
-	EKeyOff,
-	EKeyDecContrast,
-	EKeyHelp,
-	EKeyIncContrast,
-	EKeyBacklightToggle,
-	EKeyDial,
-	};
-
-// func: this table traps those scanCodes which are affected
-// by func and shift - lower case entries
-LOCAL_D const SScanCodeBlock scanCodeBlock_funcUnshifted[]=
-	{
-	{'E', 'E'},
-	};
-
-LOCAL_D const TUint16 convKeyCodes_funcUnshifted[]=
-	{
-	ELatin1LcEacute,
-	};
-
-// func: this table traps those scanCodes which are affected
-// by func and shift - upper case entries
-LOCAL_D const SScanCodeBlock scanCodeBlock_funcShifted[]=
-	{
-	{'E', 'E'},
-	};
-
-LOCAL_D const TUint16 convKeyCodes_funcShifted[]=
-	{
-	ELatin1UcEacute,
-	};
-
-// ctrl: this table traps those scanCodes which are affected by ctrl
-LOCAL_D const SScanCodeBlock scanCodeBlock_ctrl[]=
-	{
-// The space key gets handled else where, otherwise it gets
-// thrown away as a NULL key
-//	{EStdKeySpace, EStdKeySpace},
-
-	{'A', 'Z'}
-	};
-
-LOCAL_D const TUint16 convKeyCodes_ctrl[]=
-	{
-//	0,
-	1,
-	2,
-	3,
-	4,
-	5,
-	6,
-	7,
-	8,
-	9,
-	10,
-	11,
-	12,
-	13,
-	14,
-	15,
-	16,
-	17,
-	18,
-	19,
-	20,
-	21,
-	22,
-	23,
-	24,
-	25,
-	26
-	};
-
-LOCAL_D const SConvSubTable
-	convSubTable_unmodifiable=
-		{
-		&convKeyCodes_unmodifiable[0],
-			{
-			ARRAY_LENGTH(scanCodeBlock_unmodifiable),
-			&scanCodeBlock_unmodifiable[0]
-			}
-		},
-    convSubTable_base=
-		{
-		&convKeyCodes_base[0],
-			{
-			ARRAY_LENGTH(scanCodeBlock_base),
-			&scanCodeBlock_base[0]
-			}
-		},
-	convSubTable_capsLock=
-		{
-		&convKeyCodes_capsLock[0],
-			{
-			ARRAY_LENGTH(scanCodeBlock_capsLock),
-			&scanCodeBlock_capsLock[0]
-			}
-		},
-	convSubTable_shift=
-		{
-		&convKeyCodes_shift[0],
-			{
-			ARRAY_LENGTH(scanCodeBlock_shift),
-			&scanCodeBlock_shift[0]
-			}
-		},
-	convSubTable_numLock=
-		{
-		&convKeyCodes_numLock[0],
-			{
-			ARRAY_LENGTH(scanCodeBlock_numLock),
-			&scanCodeBlock_numLock[0]
-			}
-        },
-	convSubTable_func=
-		{
-		&convKeyCodes_func[0],
-			{
-			ARRAY_LENGTH(scanCodeBlock_func),
-			&scanCodeBlock_func[0]
-			}
-		},
-	convSubTable_funcUnshifted=
-		{
-		&convKeyCodes_funcUnshifted[0],
-			{
-			ARRAY_LENGTH(scanCodeBlock_funcUnshifted),
-			&scanCodeBlock_funcUnshifted[0]
-			}
-		},
-	convSubTable_funcShifted=
-		{
-		&convKeyCodes_funcShifted[0],
-			{
-			ARRAY_LENGTH(scanCodeBlock_funcShifted),
-			&scanCodeBlock_funcShifted[0]
-			}
-		},
-	convSubTable_ctrl=
-		{
-		&convKeyCodes_ctrl[0],
-			{
-			ARRAY_LENGTH(scanCodeBlock_ctrl),
-			&scanCodeBlock_ctrl[0]
-			}
-		};
-
-// Some modifiers, e.g. shift, may required more than one table (other than "base")
-// to be searched; therefore arrays of tables are required
-LOCAL_D const SConvSubTable
-	* const convSubTableArray_unmodifiable[]={&convSubTable_unmodifiable},
-	* const convSubTableArray_base[]={&convSubTable_base},
-	* const convSubTableArray_capsLock[]={&convSubTable_capsLock},
-	* const convSubTableArray_shift[]={&convSubTable_capsLock, &convSubTable_shift},
-	* const convSubTableArray_capsLockShift[]={&convSubTable_shift},
-	* const convSubTableArray_numLock[]={&convSubTable_numLock},
-	* const convSubTableArray_func[]={&convSubTable_func,&convSubTable_funcUnshifted},
-	* const convSubTableArray_funcShift[]={&convSubTable_func,&convSubTable_funcShifted},
-	* const convSubTableArray_ctrl[]={&convSubTable_ctrl};
-
-// The order of these nodes is VITAL, as the scanCode/modifiers are
-// searched for a match in this order
-LOCAL_D const SConvTableNode convTableNodes[]=
-	{
-		{
-			{
-			0,
-			0
-			},
-		ARRAY_LENGTH(convSubTableArray_unmodifiable),
-		&convSubTableArray_unmodifiable[0]
-		},
-		{
-			{
-			EModifierCtrl,
-			EModifierCtrl
-			},
-		ARRAY_LENGTH(convSubTableArray_ctrl),
-		&convSubTableArray_ctrl[0]
-		},
-		{
-			{
-			EModifierNumLock,
-			EModifierNumLock
-			},
-		ARRAY_LENGTH(convSubTableArray_numLock),
-		&convSubTableArray_numLock[0]
-		},
-		{
-			{
-			EModifierFunc|EModifierShift|EModifierCapsLock,
-			EModifierFunc
-			},
-		ARRAY_LENGTH(convSubTableArray_func),
-		&convSubTableArray_func[0]
-		},
-		{
-			{
-			EModifierFunc|EModifierShift|EModifierCapsLock,
-			EModifierFunc|EModifierShift|EModifierCapsLock
-			},
-		ARRAY_LENGTH(convSubTableArray_func),
-		&convSubTableArray_func[0]
-		},
-		{
-			{
-			EModifierFunc|EModifierShift|EModifierCapsLock,
-			EModifierFunc|EModifierShift
-			},
-		ARRAY_LENGTH(convSubTableArray_funcShift),
-		&convSubTableArray_funcShift[0]
-		},
-		{
-			{
-			EModifierFunc|EModifierShift|EModifierCapsLock,
-			EModifierFunc|EModifierCapsLock
-			},
-		ARRAY_LENGTH(convSubTableArray_funcShift),
-		&convSubTableArray_funcShift[0]
-		},
-		{
-			{
-			EModifierCapsLock|EModifierShift,
-			EModifierCapsLock
-			},
-		ARRAY_LENGTH(convSubTableArray_capsLock),
-		&convSubTableArray_capsLock[0]
-		},
-		{
-			{
-			EModifierShift|EModifierCapsLock,
-			EModifierShift
-			},
-		ARRAY_LENGTH(convSubTableArray_shift),
-		&convSubTableArray_shift[0]
-		},
-		{
-			{
-			EModifierCapsLock|EModifierShift,
-			EModifierCapsLock|EModifierShift
-			},
-		ARRAY_LENGTH(convSubTableArray_capsLockShift),
-		&convSubTableArray_capsLockShift[0]
-		},
-		{
-			{
-			0,
-			0
-			},
-		ARRAY_LENGTH(convSubTableArray_base),
-		&convSubTableArray_base[0]
-		}
-	};
-
-// The top-level exported data structure of all the conversion tables
-LOCAL_D const SConvTable ConvTable=
-	{
-	ARRAY_LENGTH(convTableNodes),
-	&convTableNodes[0]
-	};
-
-// The list of scan-codes on the numeric keypad
-LOCAL_D const SScanCodeBlock keypadScanCodeBlockArray[]=
-	{
-	{EStdKeyNumLock, EStdKeyNumLock},
-	{EStdKeyNkpForwardSlash, EStdKeyNkpFullStop}
-	};
-
-LOCAL_D const SScanCodeBlockList ConvTableKeypadScanCodes=
-	{
-	ARRAY_LENGTH(keypadScanCodeBlockArray),
-	&keypadScanCodeBlockArray[0]
-	};
-
-// The list of non-autorepeating key-codes
-LOCAL_D const TUint16 nonAutorepKeyCodeArray[]=
-	{
-	EKeyEscape,
-	EKeyPrintScreen,
-	EKeyPause,
-	EKeyInsert,
-	EKeyLeftShift,
-	EKeyRightShift,
-	EKeyLeftAlt,
-	EKeyRightAlt,
-	EKeyLeftCtrl,
-	EKeyRightCtrl,
-	EKeyLeftFunc,
-	EKeyRightFunc,
-	EKeyCapsLock,
-	EKeyNumLock,
-	EKeyScrollLock,
-    EKeyMenu,
-    EKeyDictaphonePlay,
-    EKeyDictaphoneStop,
-    EKeyDictaphoneRecord
-	};
-
-LOCAL_D const SKeyCodeList ConvTableNonAutorepKeyCodes=
-	{
-	ARRAY_LENGTH(nonAutorepKeyCodeArray),
-	&nonAutorepKeyCodeArray[0]
-	};
-
-EXPORT_C void KeyDataSettings(TRadix &aRadix,TCtrlDigitsTermination &aCtrlDigitsTermination,TInt &aDefaultCtrlDigitsMaxCount,
-							  TInt &aMaximumCtrlDigitsMaxCount)
-	{
-	aRadix=EDecimal;
-	aCtrlDigitsTermination=ETerminationByCtrlUp;
-	aDefaultCtrlDigitsMaxCount=3;
-	aMaximumCtrlDigitsMaxCount=10;
-	}
-
-EXPORT_C void KeyDataFuncTable(SFuncTables &aFuncTables)
-	{
-	aFuncTables=FuncTables;
-	}
-
-EXPORT_C void KeyDataConvTable(SConvTable &aConvTable, TUint &aConvTableFirstScanCode,TUint &aConvTableLastScanCode,
-							 SScanCodeBlockList &aKeypadScanCode,SKeyCodeList &aNonAutorepKeyCodes)
-	{
-	aConvTable=ConvTable;
-	aConvTableFirstScanCode=scanCodeBlock_base[0].firstScanCode;
-	aConvTableLastScanCode=scanCodeBlock_base[ARRAY_LENGTH(scanCodeBlock_base)-1].lastScanCode;
-	aKeypadScanCode=ConvTableKeypadScanCodes;
-	aNonAutorepKeyCodes=ConvTableNonAutorepKeyCodes;
-	}
-
--- a/baseport/src/cedar/generic/base/syborg/keymap/keymap.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +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:
-*
-*/
-
-#include <variant.mmh>
-
-TARGET			VariantTarget(ekdata,dll)
-TARGETTYPE		dll
-LINKAS			ekdata.dll
-
-SYSTEMINCLUDE	\epoc32\include
-
-SOURCE			keymap.cpp
-
-LIBRARY			euser.lib
-
-DEFFILE			..\..\e32\~\ekdata.def
-
-NOSTRICTDEF
-
-UID             0x1000008d 0x100039e0
-VENDORID        0x70000001
-
-CAPABILITY 		all
-MACRO			__SECURE_API__
--- a/baseport/src/cedar/generic/base/syborg/monitor/monap.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +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:
-*
-*/
-
-#define	__MONAP_MMP__
-
-#include    <variant.mmh>
-#include    "..\..\e32\kernel\exmondebug.mmp"
-
-TARGET			VariantTarget(exmondebug,dll)
-
-SYSTEMINCLUDE	\epoc32\include\drivers
-SYSTEMINCLUDE   ..\serial
-
-SOURCEPATH		.
-SOURCE			monitor.cpp
-
-LIBRARY			PlatformLib
-
-CAPABILITY		all
-
-VENDORID 0x70000001
--- a/baseport/src/cedar/generic/base/syborg/monitor/monitor.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +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:
-*
-*/
-
-#include <monitor.h>
-#include <system_priv.h>
-
-#include "syborg_serial.h"
-
-void CrashDebugger::InitUart()
-{
-  TUint32 debugPortBase = VARIANT_INTERFACE::DebugPortAddr();
-  TUint8 res = ReadReg(debugPortBase, 0);
-  WriteReg(debugPortBase,DCommSyborgSoc::SERIAL_INT_ENABLE,0);
-}
-
-void CrashDebugger::UartOut(TUint aChar)
-{
-  TUint32 debugPortBase = VARIANT_INTERFACE::DebugPortAddr();
-  WriteReg(debugPortBase,DCommSyborgSoc::SERIAL_DATA,aChar);
-}
-
-TUint8 CrashDebugger::UartIn()
-{
-  TUint32 debugPortBase = VARIANT_INTERFACE::DebugPortAddr();
-  while (ReadReg(debugPortBase,DCommSyborgSoc::SERIAL_FIFO_COUNT)==0)
-	;
-
-  return ReadReg(debugPortBase,DCommSyborgSoc::SERIAL_DATA);
-}
-
-TBool CrashDebugger::CheckPower()
-{
-	return EFalse;
-}
--- a/baseport/src/cedar/generic/base/syborg/pointer/pointer.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +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:
-*
-*/
-
-#include <variant.mmh>
-#include "kernel\kern_ext.mmh"
-
-TARGET			VariantTarget(epointer,dll)
-TARGETTYPE		kext
-LINKAS			epointer.dll
-
-SYSTEMINCLUDE   .
-SYSTEMINCLUDE	AsspNKernIncludePath
-
-SOURCEPATH		.
-SOURCE			syborg_pointer.cpp
-
-//LIBRARY			ekern.lib
-LIBRARY			PlatformLib
-
-//NOEXPORTLIBRARY
-
-//DEFFILE			..\e32\~\empty.def
-//DEFFILE			.\~\cmse.def
-
-//NOSTRICTDEF
-
-UID				0x100039cf 0x100000db
-VENDORID        0x70000001
-
-CAPABILITY 		all
-
-
--- a/baseport/src/cedar/generic/base/syborg/pointer/syborg_pointer.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,276 +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: Minimalistic pointer driver
-*
-*/
-
-//#define DEBUG
-
-#include <syborg_priv.h>
-#include "syborg_pointer.h"
-
-TPointerRv::TPointerRv():
-  iRxDfc(RxDfc,this,Kern::DfcQue0(),1)
-{
-  __DEBUG_PRINT("TPointerRv::TPointerRv()");
-  TInt r = Interrupt::Bind(EIntPointer,Isr,this);
-  if(r != KErrNone)
-	__KTRACE_OPT(KPANIC, Kern::Printf("TPointerRv::TPointerRv() Interrupt::Bind(%d)=%d",
-									  EIntPointer, r));
-  iPointerOn = ETrue;
-  iLastBut = 0;
-
-  Interrupt::Enable(EIntPointer);
-}
-
-TPointerRv::~TPointerRv()
-{
-}
-
-struct TPointerRv::PData* TPointerRv::FifoPop(void)
-{
-  struct TPointerRv::PData* val = &iPDataFifo[iFifoPos];
-  iFifoPos++;
-  iFifoCount--;
-  
-  if (iFifoPos == FIFO_SIZE)
-	iFifoPos = 0;
-
-  return val;
-}
-
-void TPointerRv::FifoPush(struct TPointerRv::PData* val)
-{
-  TInt slot;
-  
-  if (iFifoCount == FIFO_SIZE)
-	return;
-  
-  slot = iFifoPos + iFifoCount;
-  if (slot >= FIFO_SIZE)
-	slot -= FIFO_SIZE;
-  iPDataFifo[slot] = *val;
-  iFifoCount++;
-
-  //  __DEBUG_PRINT("TPointerRv::FifoPush %d %d %d %d",val->x, val->y, val->z, val->but);
-  //  __DEBUG_PRINT("TPointerRv::FifoPush %d %d %d %d",iPDataFifo[slot].x, iPDataFifo[slot].y, iPDataFifo[slot].z, iPDataFifo[slot].but);
-
-}
-
-void TPointerRv::Init3()
-{
-  __DEBUG_PRINT("TPointerRv::Init3");
-
-  TInt reg = ReadReg(KHwBaseKmiPointer,POINTER_ID);
-  WriteReg(KHwBaseKmiPointer,POINTER_INT_ENABLE,1);
-  
-  TInt r = Kern::AddHalEntry(EHalGroupMouse,DoPointerHalFunction,this);
-  if(r != KErrNone)
-	__KTRACE_OPT(KPANIC, Kern::Printf("TPointerRv::Init3(): Kern::AddHalEntry()=%d", r));
-
-  // Get information about the screen display mode
-  TPckgBuf<TVideoInfoV01> buf;
-  TVideoInfoV01& videoInfo = buf();
-
-  r = Kern::HalFunction(EHalGroupDisplay, EDisplayHalCurrentModeInfo, (TAny*)&buf, NULL);
-  if(r != KErrNone)
-	__KTRACE_OPT(KPANIC, Kern::Printf("TPointerRv::Init3(): Kern::HalFunction(EDisplayHalCurrentModeInfo)=%d", r));
-  
-  iScreenWidth  = videoInfo.iSizeInPixels.iWidth;
-  iScreenHeight = videoInfo.iSizeInPixels.iHeight;
-  iDisplayMode  = videoInfo.iDisplayMode;
-  ix = iy = 0;
-
-  iXFactor = Fixed(iScreenWidth) / Fixed(0x8000);
-  iYFactor = Fixed(iScreenHeight) / Fixed(0x8000);
-  
-  iFifoPos = iFifoCount = 0;
-}
-
-
-void TPointerRv::Process(TPointerRv *i, struct TPointerRv::PData *pd)
-{
-  TRawEvent e;
-
-  //  __DEBUG_PRINT("Event: X=%d Y=%d Point %d", pd->x, pd->y, pd->but);
-  //  __DEBUG_PRINT("  Last X=%d Y=%d Point %d", i->ix, i->iy, i->iLastBut);
-
-  //  i->ix += pd->x;
-  //  i->iy += pd->y;
-  
-  i->ix = int(Fixed(pd->x) * i->iXFactor);
-  i->iy = int(Fixed(pd->y) * i->iYFactor);
-
-  switch(pd->but)
-	{
-	case 0:  // Button released
-	  switch(i->iLastBut)
-		{
-		case 0:
-		  if( (pd->x!=0) || (pd->y!=0) ) {
-			e.Set(TRawEvent::EPointerMove, i->ix, i->iy);
-			__DEBUG_PRINT("1 EPointerMove (x:%d y:%d)", i->ix, i->iy);
-		  }
-		  goto fin;
-		case 1: // Left
-		  e.Set(TRawEvent::EButton1Up, i->ix, i->iy);
-		  __DEBUG_PRINT("2 EButton1UP (x:%d y:%d)", i->ix, i->iy);
-		  goto fin;
-		case 2: // Right
-		  e.Set(TRawEvent::EButton2Up, i->ix, i->iy);
-		  __DEBUG_PRINT("3 EButton2UP (x:%d y:%d)", i->ix, i->iy);
-		  goto fin;
-		}
-	case 1: // Left
-	  if (i->iLastBut == 0) {
-		e.Set(TRawEvent::EButton1Down, i->ix, i->iy);
-		__DEBUG_PRINT("4 EButton1Down (x:%d y:%d)", i->ix, i->iy);
-	  }
-	  else if( (pd->x!=0) || (pd->y!=0) ) {
-		e.Set(TRawEvent::EPointerMove, i->ix, i->iy);
-		__DEBUG_PRINT("5 EPointerMove (x:%d y:%d)", i->ix, i->iy);
-	  }
-	  break;
-	case 2: // Right
-	  if (i->iLastBut == 0) {
-		e.Set(TRawEvent::EButton2Down, i->ix, i->iy);
-		__DEBUG_PRINT("6 EButton2Down (x:%d y:%d)", i->ix, i->iy);
-	  }
-	  else if( (pd->x!=0) || (pd->y!=0) ) {
-		e.Set(TRawEvent::EPointerMove, i->ix, i->iy);
-		__DEBUG_PRINT("7 EPointerMove (x:%d y:%d)", i->ix, i->iy);
-	  }
-	  break;
-
-	}
- fin:
-  Kern::AddEvent(e);
-  i->iLastBut = pd->but;
-}
-
-void TPointerRv::RxDfc(TAny* aPtr)
-{
-  __DEBUG_PRINT("TPointerRv::RxDfc");
-
-  TPointerRv* i = static_cast<TPointerRv*>(aPtr);  
-
-  while(i->iFifoCount>0) {
-	struct TPointerRv::PData *pd= i->FifoPop();
-	Process(i,pd);
-  }
-}
-
-void TPointerRv::Isr(TAny* aPtr)
-{
-  __DEBUG_PRINT("TPointerRv::Isr");
-
-  TPointerRv& k = *(TPointerRv*)aPtr;
-  // interrupts are now auto clear
-
-  while(ReadReg(KHwBaseKmiPointer, POINTER_FIFO_COUNT)!=0) {
-	struct TPointerRv::PData pd;
-	pd.x = ReadReg(KHwBaseKmiPointer,POINTER_X);
-	pd.y = ReadReg(KHwBaseKmiPointer,POINTER_Y);
-	pd.z = ReadReg(KHwBaseKmiPointer,POINTER_Z);
-	pd.but = ReadReg(KHwBaseKmiPointer,POINTER_BUTTONS);  
-	k.FifoPush(&pd);
-	WriteReg(KHwBaseKmiPointer,POINTER_LATCH,0);	
-  }
-  
-  //  WriteReg(KHwBaseKmiPointer,POINTER_CLEAR_INT,0);
-  Interrupt::Clear(EIntPointer); 
-  k.iRxDfc.Add();
-}
-
-TInt TPointerRv::DoPointerHalFunction(TAny* aThis, TInt aFunction, TAny* a1, TAny* a2)
-{
-  return static_cast<TPointerRv*>(aThis)->PointerHalFunction(aFunction,a1,a2);
-}
-
-TInt TPointerRv::PointerHalFunction(TInt aFunction, TAny* a1, TAny* /*a2*/)
-{
-  __DEBUG_PRINT("TPointerRv::PointerHalFunction");
-
-  TInt r=KErrNone;
-
-  switch(aFunction)
-    {
-	case EMouseHalMouseState:
-	  {
-		kumemput32(a1, (TBool*)&iPointerOn, sizeof(TBool));
-		break;
-	  }			
-	case EMouseHalSetMouseState:
-	  {
-	        __SECURE_KERNEL(
-	           if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD,
-		        __PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EMouseHalSetMouseState")))
-		     return KErrPermissionDenied;
-		   );
-		if(((TBool)a1 == HAL::EMouseState_Visible) && (iPointerOn == (TBool)EFalse))
-		  {
-			iPointerOn=(TBool)ETrue;
-		  }            
-		else if(((TBool)a1 == HAL::EMouseState_Invisible) && (iPointerOn==(TBool)ETrue))        	    
-		  {
-			iPointerOn=(TBool)EFalse;
-		  }            
-		break;
-	  }            
-	case EMouseHalMouseInfo:
-	  {
-		TPckgBuf<TMouseInfoV01> vPckg;
-		TMouseInfoV01& xyinfo = vPckg();
-		xyinfo.iMouseButtons = 2;
-		xyinfo.iMouseAreaSize.iWidth = iScreenWidth;
-		xyinfo.iMouseAreaSize.iHeight = iScreenHeight;
-		xyinfo.iOffsetToDisplay.iX = 0;
-		xyinfo.iOffsetToDisplay.iY = 0;
-		Kern::InfoCopy(*(TDes8*)a1,vPckg);
-		break;
-	  }		    
-        case EMouseHalSetMouseSpeed:
-	  {
-	        __SECURE_KERNEL(
-	           if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD,
-		        __PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EMouseHalSetMouseSpeed")))
-		     return KErrPermissionDenied;
-		   );
-		// fall thru to NotSupported
-	  }
-        case EMouseHalSetMouseAcceleration:
-	  {
-	        __SECURE_KERNEL(
-	           if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD,
-		        __PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EMouseHalSetMouseAcceleration")))
-		     return KErrPermissionDenied;
-		   );
-		// fall thru to NotSupported
-	  }
-	default:
-	  {
-		r = KErrNotSupported;
-		break;
-	  }			
-	}
-  return r;
-}
-
-DECLARE_STANDARD_EXTENSION()
-{
-  __DEBUG_PRINT("DECLARE_STANDARD_EXTENSION");
-  TPointerRv *d = new TPointerRv;
-  d->Init3();
-  return KErrNone;
-}
--- a/baseport/src/cedar/generic/base/syborg/pointer/syborg_pointer.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +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: Minimalistic pointer driver
-*
-*/
-
-#ifndef _SYBORG_POINTER_H
-#define _SYBORG_POINTER_H
-
-#include <kernel.h>
-#include <system.h>
-#include <videodriver.h>
-#include <hal.h>
-
-#define FIFO_SIZE 16
-
-#ifdef DEBUG
-#define __DEBUG_PRINT(format...)    Kern::Printf(format)
-#else
-#define __DEBUG_PRINT(format...)    __KTRACE_OPT(KBOOT,Kern::Printf(format))
-#endif
-
-class TPointerRv
-{
-public:
-  TPointerRv();
-  virtual ~TPointerRv();
-  static TInt DoPointerHalFunction(TAny* aThis, TInt aFunction, TAny* a1, TAny* a2);
-  TInt PointerHalFunction(TInt aFunction, TAny* a1, TAny* a2);
-  void Init3();
-
- private:
-  struct PData {
-	TInt x;
-	TInt y;
-	TInt z;
-	TInt but;
-  };
-
-  struct PData* FifoPop(void);
-  void FifoPush(struct PData*);
-
-  struct PData iPDataFifo[FIFO_SIZE];
-  TInt iFifoPos;
-  TInt iFifoCount;
-
- private:
-  static void Isr(TAny* aPtr);
-  static void RxDfc(TAny* aPtr );
-  static void Process(TPointerRv *i, struct PData *);
-
-  TDfc iRxDfc;
-	
-  TBool iPointerOn;       // cursor visiability
-  TInt  iScreenWidth;
-  TInt  iScreenHeight;
-  TInt  iDisplayMode;
-
-  TInt ix,iy;
-  TInt iLastBut;
-
-  
- public:
-
-  enum {
-    POINTER_ID          = 0,
-    POINTER_LATCH       = 1,
-    POINTER_FIFO_COUNT  = 2,
-    POINTER_X           = 3,
-    POINTER_Y           = 4,
-    POINTER_Z           = 5,
-    POINTER_BUTTONS     = 6,
-    POINTER_INT_ENABLE  = 7
-  };
-
- private:
-  // Fixed point maths
-  class Fixed {
-
-  private:
-	int g;
-	const static int BP = 8;
-	const static int BP2 = BP*2;
-	enum FixedRaw { RAW };
-    Fixed(FixedRaw, int guts) : g(guts) {}
-	
-  public:
-    Fixed() : g(0) {}
-    Fixed(const Fixed& a) : g( a.g ) {}
-    Fixed(int a) : g( a << BP ) {}
-	operator int() { return g>>BP; }
-	Fixed operator +() const { return Fixed(RAW,g); }
-	Fixed operator -() const { return Fixed(RAW,-g); }
-	Fixed operator +(const Fixed& a) const { return Fixed(RAW, g + a.g); }
-	Fixed operator -(const Fixed& a) const { return Fixed(RAW, g - a.g); }
-	Fixed operator *(const Fixed& a) const { return Fixed(RAW,  (int)( ((long long)g * (long long)a.g ) >> BP)); }
-	Fixed operator /(const Fixed& a) const { return Fixed(RAW, int( (((long long)g << BP2) / (long long)(a.g)) >> BP) ); }
-  };
-
-  Fixed iXFactor;
-  Fixed iYFactor;
-};
-
-#endif
--- a/baseport/src/cedar/generic/base/syborg/rom/base_syborg.iby	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +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: Used by techview roms
-*
-*/
-
-#ifndef __BASE_SYBORG_IBY__
-#define __BASE_SYBORG_IBY__
-
-#define HEAPMAX(x)
-//#define FIXED	fixed
-#define FIXED
-
-kerneltrace 0x80000000
-
-memmodel multiple 0x100000
-//memmodel flexible 0x100000 0x1000 -0x4000
-//dlldatatop 0x7f000000
-
-multikernel
-bootbinary=		KERNEL_DIR\_PLATFORM_NAME_bootloader_bootrom.bin
-
-debugport 0
-romsize=0x2000000
-romlinearbase=0x80000000
-romalign=0x10
-kerneldataaddress=0xC8000000
-kernelheapmin=0x08000			// calculated at boot time
-kernelheapmax=0x00FFC000
-dataaddress=0x400000
-defaultstackreserve=0x200000
-romchecksum=0x12345678
-
-// Must align kernel to 16K boundary since exception vectors will be mapped at 0xFFFF0000
-primary[VARID]=		KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_ekern.exe		\sys\bin\ekern.exe	code-align 0x4000
-
-extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_btracex.ldd 	\sys\bin\btracex.ldd
-file=			ABI_DIR\DEBUG_DIR\btracec.dll	            		\sys\bin\btracec.dll
-
-define BTRACEX_LDD _PLATFORM_NAME_btracex.ldd
-            
-variant[VARID]=		KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_kasyborg.dll 	\sys\bin\kasyborg.dll
-
-extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_exmoncommon.dll    	\sys\bin\exmoncommon.dll
-extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_exmondebug.dll     	\sys\bin\exmondebug.dll
-
-extension[VARID]=	KERNEL_DIR\DEBUG_DIR\kdebug.dll			        \sys\bin\kdebug.dll
-
-#ifdef RMDEBUG
-#include "..\include\trk.iby"
-#endif
-
-// IEEE-mode VFP support
-extension[VARID]=	KERNEL_DIR\DEBUG_DIR\evfp.dll			        \sys\bin\evfp.dll
-
-extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_lcd.dll		\sys\bin\lcd.dll
-
-device[VARID]=		KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_eserial.pdd		\sys\bin\euart1.pdd
-device[VARID]=		KERNEL_DIR\DEBUG_DIR\ecomm.ldd				\sys\bin\ecomm.ldd
-
-extension[VARID]=	KERNEL_DIR\DEBUG_DIR\elocd.ldd				\sys\bin\elocd.ldd
-
-extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_epointer.dll	\sys\bin\epointer.dll
-extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_medint.pdd	        \sys\bin\medint.pdd
-
-extension[VARID]=	KERNEL_DIR\DEBUG_DIR\exstart.dll		 	\sys\bin\exstart.dll
-
-// Keyboard driver
-extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_ekeyb.dll		\sys\bin\ekeyb.dll
-
-// Kernel pipe
-device[VARID]=		KERNEL_DIR\DEBUG_DIR\pipelib.ldd			\sys\bin\pipelib.ldd
-
-// Host Filesystem
-extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_svphostfsdriver.ldd sys\bin\svphostfsdriver.ldd
-file=			KERNEL_DIR\DEBUG_DIR\svphostfsy.fsy			sys\bin\svphostfsy.fsy
-file=			KERNEL_DIR\DEBUG_DIR\svphostfs.exe			sys\bin\svphostfs.exe
-file=			KERNEL_DIR\DEBUG_DIR\svphostfsstart.exe			sys\bin\sysstart.exe
-
-// file=			KERNEL_DIR\DEBUG_DIR\stdnew.dll				sys\bin\stdnew.dll
-
-// Snap Driver
-extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_svpsnapdriver.ldd	sys\bin\svpsnapdriver.ldd
-file=			KERNEL_DIR\DEBUG_DIR\snapapp.exe			sys\bin\snapapp.exe
-
-// Estart drive mapping setup files.
-data=			EPOCROOT##epoc32\rom\syborg\estart.txt			\sys\data\estart.txt
-
-define	HAL_DLL		_PLATFORM_NAME_hal.dll
-define	ESTART_EXE	e32strt.exe
-define	KEYMAP_FILE	_PLATFORM_NAME_ekdata
-#define	SCDV_DLL        _PLATFORM_NAME_scdv.dll
-#define	EUSER_DLL	_PLATFORM_NAME_euser.dll
-
-#endif  // __BASE_SYBORG_IBY__
-
--- a/baseport/src/cedar/generic/base/syborg/rom/header.iby	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +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:
-*
-*/
-
-#define HEAPMAX(x)
-
-#define VARID		0x0b0a0001
-#define MAGIC		0x0b0a0001
-#define ALL			0x0b0a0001
-#define FIXED
-
-kerneltrace 0x80000000
-
-memmodel multiple 0x100000
-//memmodel flexible 0x100000 0x1000 -0x4000
-//dlldatatop 0x7f000000
-
-trace 0x10
-collapse arm gcc 0
-multikernel
-
-version=0.01
-bootbinary=\epoc32\release\##MAIN##\_syborg_bootloader_bootrom.bin
-
-debugport 0
-romsize=0x2000000
-romlinearbase=0x80000000
-romalign=0x10
-kerneldataaddress=0xC8000000
-kernelheapmin=0x08000			// calculated at boot time
-kernelheapmax=0x00FFF000
-dataaddress=0x400000
-defaultstackreserve=0x200000
-romchecksum=0x12345678
-
-nowrapper				// no rom header
-
-#ifdef UNICODE
-unicode
-#endif
-
-#define VARIANT_PATH syborg
--- a/baseport/src/cedar/generic/base/syborg/rom/kernel.iby	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +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: Used by textshell roms
-*
-*/
-
-//#define USE_AUTOEXEC
-
-#define	EUSER_DLL	_##VARIANT##_EUSER.DLL
-
-// Must align kernel to 16K boundary since exception vectors will be mapped at 0xFFFF0000
-primary[VARID]=		\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_EKERN.EXE		\sys\bin\EKERN.EXE	code-align 0x4000
-extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_BTRACEX.LDD		\sys\bin\BTRACEX.LDD
-variant[VARID]=		\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_KASYBORG.DLL		\sys\bin\KASYBORG.DLL
-
-// IEEE-mode VFP support
-extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\EVFP.DLL				\sys\bin\EVFP.DLL
-
-// Common monitor support. Must be before both interactive debugger and automatic logger.
-extension[VARID]=   	\Epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_EXMONCOMMON.DLL 	\sys\bin\EXMONCOMMON.DLL
-extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_EXMONDEBUG.DLL  	\sys\bin\EXMONDEBUG.DLL
-
-extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\KDEBUG.DLL				\sys\bin\KDEBUG.DLL
-
-extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_LCD.DLL		\sys\bin\LCD.DLL
-device[VARID]=		\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_ESERIAL.PDD    	\sys\bin\ESERIAL.PDD
-extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\ELOCD.LDD				\sys\bin\ELOCD.LDD
-
-extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_EPOINTER.DLL		\sys\bin\EPOINTER.DLL
-
-device[VARID]=		\epoc32\release\##KMAIN##\##BUILD##\ECOMM.LDD				\sys\bin\ECOMM.LDD
-extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\EXSTART.DLL				\sys\bin\EXSTART.DLL
-
-extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_EKEYB.DLL		\sys\bin\EKEYB.DLL
-
-file[VARID]=		\epoc32\release\##MAIN##\##BUILD##\_##VARIANT##_EKDATA.DLL		\sys\bin\EKDATA.DLL
-
-// Kernel pipe
-device[VARID]=      	\epoc32\release\##KMAIN##\##BUILD##\PIPELIB.LDD 		        \sys\bin\PIPELIB.LDD
-
-// Host Filesystem
-extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_svphostfsdriver.ldd	\sys\bin\svphostfsdriver.ldd
-file=			\epoc32\release\##KMAIN##\##BUILD##\svphostfsy.fsy			\sys\bin\svphostfsy.fsy
-file=			\epoc32\release\##KMAIN##\##BUILD##\svphostfs.exe			\sys\bin\svphostfs.exe
-file=			\epoc32\release\##KMAIN##\##BUILD##\svphostfsstart.exe			\sys\bin\sysstart.exe
-
-// Snap Driver
-extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_svpsnapdriver.ldd  \sys\bin\svpsnapdriver.ldd
-file=			\epoc32\release\##KMAIN##\##BUILD##\snapapp.exe			\sys\bin\snapapp.exe
-
-// Estart
-data=               	\epoc32\rom\syborg\ESTART.TXT					    \sys\data\ESTART.TXT
-
-#ifdef USE_AUTOEXEC
-data=               	\epoc32\rom\##VARIANT##\AUTOEXEC.BAT        					AUTOEXEC.BAT
-#endif
-
-extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_MEDINT.PDD	    \sys\bin\MEDINT.PDD
-//device[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\D_DEBUG.LDD					\sys\bin\D_DEBUG.LDD
--- a/baseport/src/cedar/generic/base/syborg/serial/serial.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +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:
-*
-*/
-
-#include <variant.mmh>
-#include "kernel\kern_ext.mmh"
-
-TARGET			VariantTarget(eserial,pdd)
-TARGETTYPE		pdd
-
-SYSTEMINCLUDE	\epoc32\include\drivers
-SYSTEMINCLUDE	AsspNKernIncludePath
-
-SOURCEPATH		.
-SOURCE			syborg_serial.cpp
-
-LIBRARY			PlatformLib
-
-EPOCALLOWDLLDATA
-
-UID				0 0x1000015b
-VENDORID        0x70000001
-
-ROMTARGET		eserial.pdd
-
-CAPABILITY		all
--- a/baseport/src/cedar/generic/base/syborg/serial/syborg_serial.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,252 +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: Minimalistic serial driver
-*
-* TODO: Handle multiple Units, hardcoded FIFO Size
-*/
-
-#include "syborg_serial.h"
-
-//#define DPRINT(x) Kern::Printf(x)
-//#define DPRINT2(x,y) Kern::Printf(x,y)
-
-#define DPRINT(x)
-#define DPRINT2(x,y)
-
-// ---------------------------------------------------------------
-// ---------------------------------------------------------------
-
-DDriverSyborgComm::DDriverSyborgComm()
-{
-  iVersion=TVersion(KCommsMajorVersionNumber,KCommsMinorVersionNumber,KCommsBuildVersionNumber);
-}
-
-TInt DDriverSyborgComm::Install()
-{
-  DPRINT("DDriverSyborgComm::Install");
-  return SetName(&KPddName);
-}
-
-void DDriverSyborgComm::GetCaps(TDes8 &aDes) const
-{
-  DPRINT("DDriverSyborgComm::GetCaps");
-
-  TCommCaps3 capsBuf;
-  TCommCapsV03 &c=capsBuf();
-  c.iRate=KCapsBps110|KCapsBps150|KCapsBps300|KCapsBps600|KCapsBps1200|KCapsBps2400|KCapsBps4800|KCapsBps9600|KCapsBps19200|KCapsBps38400|KCapsBps57600|KCapsBps115200|KCapsBps230400;
-  c.iDataBits=KCapsData5|KCapsData6|KCapsData7|KCapsData8;
-  c.iStopBits=KCapsStop1|KCapsStop2;
-  c.iParity=KCapsParityNone|KCapsParityEven|KCapsParityOdd;
-  c.iHandshake=KCapsObeyXoffSupported|KCapsSendXoffSupported|KCapsObeyCTSSupported|KCapsFailCTSSupported|KCapsObeyDSRSupported|KCapsFailDSRSupported|KCapsObeyDCDSupported|KCapsFailDCDSupported|KCapsFreeRTSSupported|KCapsFreeDTRSupported;
-  c.iSignals=KCapsSignalCTSSupported|KCapsSignalDSRSupported|KCapsSignalDCDSupported|KCapsSignalRTSSupported|KCapsSignalDTRSupported;
-  c.iSIR=0;
-  c.iNotificationCaps=KNotifyDataAvailableSupported|KNotifySignalsChangeSupported;
-  c.iFifo=KCapsHasFifo;
-  c.iRoleCaps=0;
-  c.iFlowControlCaps=0;
-  c.iBreakSupported=ETrue;
-  aDes.FillZ(aDes.MaxLength());
-  aDes=capsBuf.Left(Min(capsBuf.Length(),aDes.MaxLength()));
-}
-
-TInt DDriverSyborgComm::Create(DBase*& aChannel, TInt aUnit, const TDesC8* anInfo, const TVersion& aVer)
-{
-  DPRINT("DDriverSyborgComm::Create");
-
-  DCommSyborgSoc* pD=new DCommSyborgSoc;
-  aChannel=pD;
-  TInt r=KErrNoMemory;
-  if (pD)
-	r=pD->DoCreate(aUnit,anInfo);
-  return r;
-}
-
-TInt DDriverSyborgComm::Validate(TInt aUnit, const TDesC8* /*anInfo*/, const TVersion& aVer)
-{
-  DPRINT("DDriverSyborgComm::Validate");
-  if ((!Kern::QueryVersionSupported(iVersion,aVer)) || 
-	  (!Kern::QueryVersionSupported(aVer,TVersion(KMinimumLddMajorVersion,KMinimumLddMinorVersion,KMinimumLddBuild))))
-	return KErrNotSupported;
-  return KErrNone;
-}
-
-// ---------------------------------------------------------------
-// ---------------------------------------------------------------
-
-DCommSyborgSoc::DCommSyborgSoc()
-{
-}
-
-DCommSyborgSoc::~DCommSyborgSoc()
-{
-  Interrupt::Unbind(iIrq);
-}
-
-TInt DCommSyborgSoc::DoCreate(TInt aUnit, const TDesC8* /*anInfo*/)
-{
-  DPRINT2("DCommSyborgSoc::DoCreate %d",aUnit);
-  switch(aUnit)
-	{
-	case 0:
-	  iPortAddr = KHwBaseUart0;
-	  iIrq = EIntSerial0;
-	  break;
-	case 1:
-	  iPortAddr = KHwBaseUart1;
-	  iIrq = EIntSerial1;
-	  break;
-	case 2:
-	  iPortAddr = KHwBaseUart2;
-	  iIrq = EIntSerial2;
-	  break;
-	case 3:
-	  iPortAddr = KHwBaseUart3;
-	  iIrq = EIntSerial3;
-	  break;
-	default:
-	  iPortAddr = KHwBaseUart0;
-	  iIrq = EIntSerial0;
-	  break;
-	}
-
-  Interrupt::Bind(EIntSerial0,Isr,this);
-
-  return KErrNone;
-
-}
-
-TInt DCommSyborgSoc::Start()
-{
-  DPRINT("DCommSyborgSoc::Start");
-  WriteReg(iPortAddr, SERIAL_INT_ENABLE, 0x1);
-  Interrupt::Enable(iIrq);
-  return KErrNone;
-}
-
-void DCommSyborgSoc::Stop(TStopMode aMode)
-{
-  DPRINT("DCommSyborgSoc::Stop");
-  WriteReg(iPortAddr, SERIAL_INT_ENABLE, 0x0);
-  Interrupt::Disable(iIrq);
-}
-
-void DCommSyborgSoc::Break(TBool aState)
-{
-  DPRINT("DCommSyborgSoc::Break");
-}
-
-void DCommSyborgSoc::EnableTransmit()
-{
-  DPRINT("DCommSyborgSoc::EnableTransmit");
-  while (Kern::PowerGood())
-	{
-	  TInt r=TransmitIsr();
-	  if (r<0)
-		break;
-	  WriteReg(iPortAddr, SERIAL_DATA, r);
-	}
-}
-
-TUint DCommSyborgSoc::Signals() const
-{
-  DPRINT("DCommSyborgSoc::Signals");
-  return(0);
-}
-  
-void DCommSyborgSoc::SetSignals(TUint aSetMask, TUint aClearMask)
-{
-  DPRINT("DCommSyborgSoc::SetSignals");
-}
-
-TInt DCommSyborgSoc::ValidateConfig(const TCommConfigV01 &aConfig) const
-{
-  DPRINT("DCommSyborgSoc::ValidateConfig");
-  return KErrNone;
-}
-
-void DCommSyborgSoc::Configure(TCommConfigV01 &aConfig)
-{
-  DPRINT("DCommSyborgSoc::Configure");
-}
-
-void DCommSyborgSoc::Caps(TDes8 &aCaps) const
-{
-  DPRINT("DCommSyborgSoc::Caps");
-  TCommCaps3 capsBuf;
-  TCommCapsV03 &c=capsBuf();
-  c.iRate=KCapsBps110|KCapsBps150|KCapsBps300|KCapsBps600|KCapsBps1200|KCapsBps2400|KCapsBps4800|KCapsBps9600|KCapsBps19200|KCapsBps38400|KCapsBps57600|KCapsBps115200|KCapsBps230400;
-  c.iDataBits=KCapsData5|KCapsData6|KCapsData7|KCapsData8;
-  c.iStopBits=KCapsStop1|KCapsStop2;
-  c.iParity=KCapsParityNone|KCapsParityEven|KCapsParityOdd;
-  c.iHandshake=KCapsObeyXoffSupported|KCapsSendXoffSupported|KCapsObeyCTSSupported|KCapsFailCTSSupported|KCapsObeyDSRSupported|KCapsFailDSRSupported|KCapsObeyDCDSupported|KCapsFailDCDSupported|KCapsFreeRTSSupported|KCapsFreeDTRSupported;
-  c.iSignals=KCapsSignalCTSSupported|KCapsSignalDSRSupported|KCapsSignalDCDSupported|KCapsSignalRTSSupported|KCapsSignalDTRSupported;
-  c.iSIR=0;
-  c.iNotificationCaps=KNotifyDataAvailableSupported|KNotifySignalsChangeSupported;
-  c.iFifo=KCapsHasFifo;
-  c.iRoleCaps=0;
-  c.iFlowControlCaps=0;
-  c.iBreakSupported=ETrue;
-  aCaps.FillZ(aCaps.MaxLength());
-  aCaps=capsBuf.Left(Min(capsBuf.Length(),aCaps.MaxLength()));
-}
-
-TInt DCommSyborgSoc::DisableIrqs()
-{
-  DPRINT("DCommSyborgSoc::DisableIrqs");
-  return NKern::DisableAllInterrupts();
-}
-
-void DCommSyborgSoc::RestoreIrqs(TInt aIrq)
-{
-  DPRINT("DCommSyborgSoc::RestoreIrqs");
-  NKern::RestoreInterrupts(aIrq);
-}
-
-TDfcQue* DCommSyborgSoc::DfcQ(TInt /*aUnit*/)
-{
-  return Kern::DfcQue0();
-}
-
-void DCommSyborgSoc::CheckConfig(TCommConfigV01& aConfig)
-{
-  DPRINT("DCommSyborgSoc::CheckConfig");
-}
-
-void DCommSyborgSoc::Isr(TAny* aPtr)
-{
-  DCommSyborgSoc& d=*(DCommSyborgSoc*)aPtr;
-  TUint rx[32];
-  TInt rxi=0;
-
-  DPRINT2("DCommSyborgSoc::Isr %x",d.iIrq);
-
-  // Is now auto clear
-  //  WriteReg(d.iPortAddr, SERIAL_CLEAR_INT, 0x0); // clear interrupts
-
-  while(ReadReg(d.iPortAddr, SERIAL_FIFO_COUNT)!=0) {
-	TUint ch = ReadReg(d.iPortAddr, SERIAL_DATA);
-	rx[rxi++]=ch;
-  }
-  d.ReceiveIsr(rx,rxi,0);
-}
-
-// ---------------------------------------------------------------
-// ---------------------------------------------------------------
-
-DECLARE_STANDARD_PDD()
-{
-  DPRINT("DECLARE_STANDARD_PDD()");
-  return new DDriverSyborgComm;
-}
-
--- a/baseport/src/cedar/generic/base/syborg/serial/syborg_serial.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +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: Minimalistic serial driver
-*
-*/
-
-#ifndef _SYBORG_SERIAL_H
-#define _SYBORG_SERIAL_H
-
-#include <comm.h>
-#include <e32hal.h>
-#include "system.h"
-
-const TInt KMinimumLddMajorVersion=1;
-const TInt KMinimumLddMinorVersion=1;
-const TInt KMinimumLddBuild=1;
-
-class DDriverSyborgComm : public DPhysicalDevice
-{
-public:
-  DDriverSyborgComm();
-  virtual TInt Install();
-  virtual void GetCaps(TDes8 &aDes) const;
-  virtual TInt Create(DBase*& aChannel, TInt aUnit, const TDesC8* anInfo, const TVersion &aVer);
-  virtual TInt Validate(TInt aUnit, const TDesC8* anInfo, const TVersion &aVer);
-};
-
-class DCommSyborgSoc : public DComm
-{
-public:
-  DCommSyborgSoc();
-  ~DCommSyborgSoc();
-  TInt DoCreate(TInt aUnit, const TDesC8* anInfo);
-public:
-  virtual TInt Start();
-  virtual void Stop(TStopMode aMode);
-  virtual void Break(TBool aState);
-  virtual void EnableTransmit();
-  virtual TUint Signals() const;
-  virtual void SetSignals(TUint aSetMask, TUint aClearMask);
-  virtual TInt ValidateConfig(const TCommConfigV01 &aConfig) const;
-  virtual void Configure(TCommConfigV01 &aConfig);
-  virtual void Caps(TDes8 &aCaps) const;
-  virtual TInt DisableIrqs();
-  virtual void RestoreIrqs(TInt aIrq);
-  virtual TDfcQue* DfcQ(TInt aUnit);
-  virtual void CheckConfig(TCommConfigV01& aConfig);  
-  static void Isr(TAny* aPtr);
-
-public:
-  TLinAddr iPortAddr;
-  TInt iIrq;
-
-  enum {
-    SERIAL_ID           = 0,
-    SERIAL_DATA         = 1,
-    SERIAL_FIFO_COUNT   = 2,
-    SERIAL_INT_ENABLE   = 3,
-    SERIAL_DMA_TX_ADDR  = 4,
-    SERIAL_DMA_TX_COUNT = 5, /* triggers dma */
-    SERIAL_DMA_RX_ADDR  = 6,
-    SERIAL_DMA_RX_COUNT = 7 /* triggers dma */
-  };
-};
-
-#endif
--- a/baseport/src/cedar/generic/base/syborg/specific/assp.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,279 +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: implementation of class Syborg
-*
-*/
-
-#include <syborg_priv.h>
-#include <hal_data.h>
-
-#ifdef __EMI_SUPPORT__
-#include <emi.h>
-#endif
-
-//#define ASSP_DEBUG
-
-#ifdef ASSP_DEBUG
-#define __DEBUG_PRINT(format...)    Kern::Printf(format)
-#else
-#define __DEBUG_PRINT(format...)    __KTRACE_OPT(KBOOT,Kern::Printf(format))
-#endif
-
-Syborg* Syborg::Variant=NULL;
-// !@!
-#if 0
-TPhysAddr Syborg::VideoRamPhys;
-TPhysAddr Syborg::VideoRamPhysSecure;		// Secure display memory
-#endif
-
-GLDEF_D Syborg TheVariant;
-
-// Wait for interrupt idle routine
-extern TInt SyborgWFIIdle();
-
-DECLARE_STANDARD_ASSP()
-
-EXPORT_C Asic* VariantInitialise()
-{
-	return &TheVariant;
-}
-
-void Syborg::Idle()
-{
-	// Use the basic Wait For Interrupt call to idle
-	TInt irq = NKern::DisableAllInterrupts();
-#ifdef __EMI_SUPPORT__
-	EMI::EnterIdle();
-#endif
-	SyborgWFIIdle();
-#ifdef __EMI_SUPPORT__
-	EMI::LeaveIdle();
-#endif
-	NKern::RestoreInterrupts(irq);
-}
-
-TUint32 Syborg::NanoWaitCalibration()
-{
-	return 17;	// 2 cycles approx 17ns at 125MHz
-}
-
-TInt Syborg::VariantHal(TInt aFunction, TAny* a1, TAny* a2)
-{
-	__KTRACE_OPT(KHARDWARE,Kern::Printf("Syborg::VariantHal(%d, %0x, %0x)",aFunction,a1,a2));
-
-	switch(aFunction)
-    {
-		case EVariantHalVariantInfo:
-		{
-			TVariantInfoV01Buf infoBuf;
-			TVariantInfoV01& info = infoBuf();
-			TUint clock=0;
-			info.iRomVersion = Epoc::RomHeader().iVersion;
-    		info.iMachineUniqueId = (TInt64(HALData::EMachineUid_OmapH4)<<32);
-   			info.iLedCapabilities = (8<<16) + KLedMaskGreen1;
-			info.iProcessorClockInKHz = clock;
-			info.iSpeedFactor = clock/25;
-			Kern::InfoCopy(*(TDes8*)a1,infoBuf);
-			break;
-	    }
-		case EVariantHalDebugPortSet:
-	    {
-			TUint32 thePort = (TUint32)a1;
-			switch(thePort) // Accept UART(0-3)
-		    {
-				case 0:
-				case 1:
-			    case 2:
-                case 3:
-                {
-                    TSyborg::MarkDebugPortOff();           // mark port is not initialised
-					Kern::SuperPage().iDebugPort = thePort; // update the super page
-                    Syborg::DebugInit();                   // init debug port        
-                    break;
-                }
-				case (TUint32)KNullDebugPort:               // debug output supressed
-                {
-                    TSyborg::MarkDebugPortOff();           // mark port is not initialised
-					Kern::SuperPage().iDebugPort = thePort; // update the super page
-					break;
-                }
-				default:
-					return KErrNotSupported;
-		    }
-			break;
-	    }
-		case EVariantHalDebugPortGet:
-	    {
-			TUint32 thePort = Kern::SuperPage().iDebugPort;
-			kumemput32(a1, &thePort, sizeof(TUint32));
-			break;
-	    }
-		case EVariantHalSwitches:
-	    {
-		  TUint32 x = 0; //Register32(KHwBaseSystemReg+KHoRoSystemSw);
-			kumemput32(a1, &x, sizeof(x));
-			break;
-	    }
-		case EVariantHalLedMaskSet:
-	    {
-		  //SetRegister32(KHwBaseSystemReg+KHoRwSystemLed, (TUint32)a1 & 0xFF);
-			break;
-	    }
-		case EVariantHalLedMaskGet:
-	    {
-		  TUint32 x = 0; //Register32(KHwBaseSystemReg+KHoRwSystemLed);
-			kumemput32(a1, &x, sizeof(x));
-			break;
-	    }
-		case EVariantHalCustomRestartReason:
-	    {
-			// Restart reason is stored in super page
-		  TInt x = (Kern::SuperPage().iHwStartupReason); // & KmRestartCustomReasons) >> KsRestartCustomReasons;
-			kumemput32(a1, &x, sizeof(TInt));
-			break;
-	    }
-		case EVariantHalCustomRestart:
-	    {
-            __KERNEL_CAPABILITY_CHECK(
-                if(!Kern::CurrentThreadHasCapability(ECapabilityPowerMgmt,
-			       __PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EVariantHalCustomRestart")))
-				    return KErrPermissionDenied;
-            )
-			  Kern::Restart(0);
-			break;
-	    }
-		default:
-    	{
-			return KErrNotSupported;
-	    }
-    }
-	return KErrNone;
-}
-
-TPtr8 Syborg::MachineConfiguration()
-{
-	return TPtr8((TUint8*)&Kern::MachineConfig(),40,40);
-}
-
-EXPORT_C Syborg::Syborg()
-{
-	iDebugPortBase = TSyborg::DebugPortAddr(); // initialised in bootstrap
-}
-
-EXPORT_C TMachineStartupType Syborg::StartupReason()
-{
-	TUint s = Kern::SuperPage().iHwStartupReason;
-	__DEBUG_PRINT("Syborg::StartupReason CPU page value 0x%08X", s);
-	return EStartupColdReset;
-}
-
-EXPORT_C void Syborg::Init1()
-{
-	__DEBUG_PRINT("Syborg::Init1()");
-
-	// Enable the CLCD in the System registers
-	SyborgInterrupt::Init1();
-}
-
-EXPORT_C void Syborg::Init3()
-{
-	NTimerQ& m = *(NTimerQ*)NTimerQ::TimerAddress();
-	m.iRounding = -5;
-		
-	TInt r = Interrupt::Bind(EIntTimer1,SyborgInterrupt::MsTimerTick,&m);
-	if (r != KErrNone)
-	{
-		Kern::Fault("BindMsTick",r);
-	}
-
-	TSyborg::Init3();
-	TSyborg::ClearTimerInt(KHwBaseCounterTimer);
-
-	r = Interrupt::Enable(EIntTimer1);
-	if (r != KErrNone)
-	{
-		Kern::Fault("EnbMsTick",r);
-	}
-
-	TSyborg::SetTimerLoad(KHwBaseCounterTimer, K1000HzTickMatchLoad);
-	//	TSyborg::SetTimerLoad(KHwBaseCounterTimer, 1000000);
-	TSyborg::SetTimerMode(KHwBaseCounterTimer, TSyborg::ETimerModePeriodic);	
-	TSyborg::EnableTimerInterrupt(KHwBaseCounterTimer);
-	TSyborg::EnableTimer(KHwBaseCounterTimer, TSyborg::EEnable);
-	
-	SyborgInterrupt::Init3();
-
-	// !@!
-#if 0
-	// Allocate physical RAM for video
-	TInt vSize = TSyborg::VideoRamSize();
-
-	r = Epoc::AllocPhysicalRam(vSize,Syborg::VideoRamPhys);
-	if (r != KErrNone)
-	{
-		Kern::Fault("AllocVideoRam",r);
-	}
-
-	// Allocate physical RAM for secure display
-	r = Epoc::AllocPhysicalRam(vSize,Syborg::VideoRamPhysSecure);
-	if (r != KErrNone)
-	{
-		Kern::Fault("AllocVideoRam 2",r);
-	}
-#endif
-	__DEBUG_PRINT("Finished Syborg::Init3()");
-}
-
-EXPORT_C void Syborg::DebugInit()
-{
-	iDebugPortBase = TSyborg::DebugPortAddr();
-
-    if(iDebugPortBase != (TUint32)KNullDebugPort)   // supress debug output
-    {
-	  TUint8 res = ReadReg(iDebugPortBase, 0);
-    }
-}
-
-//
-// Output a character to the debug port
-//
-EXPORT_C void Syborg::DebugOutput(TUint aLetter)
-{
-	if(!iDebugPortBase)
-    {
-		DebugInit();
-	}
-
-    if(iDebugPortBase != (TUint32)KNullDebugPort)   // supress debug output
-    {
-	  WriteReg(iDebugPortBase,1,aLetter);
-    }
-}
-
-EXPORT_C TInt Syborg::MsTickPeriod()
-{
-	return 1000;
-}
-
-EXPORT_C TInt Syborg::SystemTimeInSecondsFrom2000(TInt& aTime)
-{
-	__KTRACE_OPT(KHARDWARE,Kern::Printf("RTC READ: %d",aTime));
-	return KErrNone;
-}
-
-EXPORT_C TInt Syborg::SetSystemTimeInSecondsFrom2000(TInt aTime)
-{
-	__KTRACE_OPT(KHARDWARE,Kern::Printf("Set RTC: %d",aTime));					// do this here to allow the value to be loaded...
-	return KErrNone;
-}
--- a/baseport/src/cedar/generic/base/syborg/specific/highrestimer.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +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:
-*
-*/
-
-/**
- * @file
- * @internalTechnology
- *
- * The highrestimer.h header file defines how to access the high resoltion
- * timer, if one is supported.  This file is used by default if the variant does
- * not export one to \epoc32\include\nkern. 
- */
-
-#ifndef __HIGHRESTIMER_H__
-#define __HIGHRESTIMER_H__
-//
-// Copyright (c) 2008 Symbian Ltd. All rights reserved.
-//
-
-#include <syborg.h>
-
-/**
- * Macro indicating that a high resolution timer is supported.
- */
-#define HAS_HIGH_RES_TIMER
-
-/**
- * Assembler macro to get the the current value of the high res timer and place
- * it in the specified register.
- * Reads the 32-bit value from a free-running counter that represents the current time. 
- * Syborg timers have 'microsecond resolution'. NB. This value comes from the host clock
- * and so there is a good chance that the kernels tick based notion of time (elapsed) and that
- * measured by the free running timer will get out of kilter. This affects t_cputime from e32test
- * amongst other things.
- */
-//#define GET_HIGH_RES_TICK_COUNT(Rd) asm("nop");
-// Hi-jacking r10 for tmp, not good if Rd is R10 -- grepping the the kernel shows it's not (for now)
-#define GET_HIGH_RES_TICK_COUNT(Rd)						         \
-  asm("push {r10}");										     \
-  asm("mov r10, #2");										     \
-  asm("ldr "#Rd", =%a0"               : : "i" (KHwBaseRtc + 4)); \
-  asm("str r10, ["#Rd", #%a0]"        : : "i" (0));			     \
-  asm("pop {r10}");                                              \
-  asm("ldr "#Rd", =%a0"               : : "i" (KHwBaseRtc + 8)); \
-  asm("ldr "#Rd", ["#Rd", #%a0]"      : : "i" (0));              
-
-/**
- * The frequency of the timer in Hz.
- */
-const TInt KHighResTimerFrequency = 1000000;
-
-/**
- * Macro indicating that the timer counts up if defined.
- */
-#define HIGH_RES_TIMER_COUNTS_UP
-
-#endif  // __HIGHRESTIMER_H__
--- a/baseport/src/cedar/generic/base/syborg/specific/interrupts.cia	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +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: Syborg interrupt control and dispatch
-*
-*/
-
-#include <e32cia.h>
-#include <syborg_priv.h>
-#include <cpudefs.h>
-
-// CIA symbols for ASSP code?
-#if defined(__GCC32__)
-// CIA symbol macros for Gcc98r2
-#define CSM_ZN7NTimerQ4TickEv " Tick__7NTimerQ"
-#elif defined(__ARMCC__)
-// CIA symbol macros for RVCT
-#define CSM_ZN7NTimerQ4TickEv " __cpp(NTimerQ::Tick)"
-#else
-// CIA symbol macros for EABI assemblers
-#define CSM_ZN7NTimerQ4TickEv " _ZN7NTimerQ4TickEv"
-#endif
-
-/********************************************************************
- * Wait for interrupt idle routine which does not disable interrupts
- ********************************************************************/
- 
-__NAKED__ void SyborgWFIIdle()
-{
-	// Enter an idle state and wait for interrupts
-	asm("mov r0, #0");
-	asm("mcr p15, 0, r0, c7, c0, 4");
-	asm("bx lr");
-}
-
-/********************************************************************
- * Service 1ms tick interrupt & timer 1 interrupt
- ********************************************************************/
-
-__NAKED__ void SyborgInterrupt::MsTimerTick(TAny* /*aPtr*/)
-{
-	// Service 1ms tick interrupt
-	asm("ldr r1, __KHwCounterTimer");
-	asm("push {r0}");
-	asm("mov r0, #1");
-	asm("str r0, [r1, #24]");
-	asm("pop {r0}");
-	asm("b "CSM_ZN7NTimerQ4TickEv);
-	asm("bx lr");
-
-	asm("__KHwCounterTimer:");
-	asm(".word %a0" : : "i" ((TInt)KHwBaseCounterTimer));
-}
-
-/********************************************************************
- * Interrupt handling/dispatch
- ********************************************************************/
-// IRQ dispatcher
-// Enter with r0-r3, r12 and return address on IRQ stack
-// Must preserve r4-r11
-// Uses r4,r5,r12
-__NAKED__ void SyborgInterrupt::IrqDispatch()
-{
-	asm("push {r4,r5,lr} ");
-	asm("ldr r4, __KHwBaseSic");
-	asm("ldr r12, __SicHandlerStart");
-	asm("ldr r5, [r4, #8]");  // r5 - pending interrupt
-	asm("adr lr, Clear");
-	asm("add r12, r5, lsl #3");
-	asm("ldm r12, {r0, pc}");
-	
-	asm("Clear:");
-	//	asm("str r5, [r4, #16]");        // TODO: error
-	asm("pop {r4,r5,pc}");
-
-	asm("__KHwBaseSic:");
-	asm(".word %a0" : : "i" ((TInt)KHwBaseSic));
-	asm("__SicHandlerStart:");
-	asm(".word %a0" : : "i" ((TInt)&Handlers[0]));
-}
-
-__NAKED__ void SyborgInterrupt::FiqDispatch()
-{
-	// FIQ dispatcher
-	// Enter with return address on FIQ stack
-	// We may use r8-r12, but must preserve other registers
-	// NOTE: STACK IS MISALIGNED ON ENTRY (1 WORD PUSHED)
-	asm("push {r0-r3,lr}");
-	// FIQ Handler to go in here.
-	// Not needed because no FIQs are currently used
-	asm("pop {r0-r3,pc}");
-}
--- a/baseport/src/cedar/generic/base/syborg/specific/interrupts.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,149 +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: Syborg interrupt control and dispatch
-*
-*/
-
-#include <syborg_priv.h>
-
-SInterruptHandler SyborgInterrupt::Handlers[KNumSyborgInts];
-
-void SyborgInterrupt::DisableAndClearAll()
-{
-  WriteReg(KHwBaseSic, 3, 0);
-}
-
-void SyborgInterrupt::Init1()
-{
-	__KTRACE_OPT(KBOOT,Kern::Printf("SyborgInterrupt::Init1()"));
-
-	for(TUint i = 0; i < KNumSyborgInts; i++)
-	{
-		Handlers[i].iPtr = (TAny*)i;
-		Handlers[i].iIsr = Spurious;
-	}
-
-	DisableAndClearAll();
-	
-	Arm::SetIrqHandler((TLinAddr)SyborgInterrupt::IrqDispatch);
-	Arm::SetFiqHandler((TLinAddr)SyborgInterrupt::FiqDispatch);
-}
-
-void SyborgInterrupt::Init3()
-{
-	__KTRACE_OPT(KHARDWARE,Kern::Printf("SyborgInterrupt::Init3()"));
-}
-
-void SyborgInterrupt::Spurious(TAny* anId)
-{
-	// Handle an unexpected interrupt
-	Kern::Fault("SpuriousInt", (TInt)anId);
-}
-
-EXPORT_C TInt Interrupt::Bind(TInt anId, TIsr anIsr, TAny* aPtr)
-{
-  __KTRACE_OPT(KHARDWARE,Kern::Printf("Interrupt::Bind(anId=%d anIsr=0x%X aPtr=0x%X)",anId,anIsr,aPtr));
-	if((anId >= 0) && ((TUint)anId < KNumSyborgInts))
-	{
-		SInterruptHandler& h = SyborgInterrupt::Handlers[anId];
-		TInt irq = NKern::DisableAllInterrupts();
-        TInt r;
-		if(h.iIsr != SyborgInterrupt::Spurious)
-		{
-            r = KErrInUse;
-	    }
-		else
-		{
-    	    h.iPtr = aPtr;
-	    	h.iIsr = anIsr;
-            r = KErrNone;
-		}
-		NKern::RestoreInterrupts(irq);
-		return r;
-	}
-	return KErrArgument;
-}
-
-EXPORT_C TInt Interrupt::Unbind(TInt anId)
-{
-	__KTRACE_OPT(KHARDWARE,Kern::Printf("Interrupt::Unbind(%d)",anId));
-	if((anId >= 0) && ((TUint)anId < KNumSyborgInts))
-	{
-		SInterruptHandler& h = SyborgInterrupt::Handlers[anId];
-		TInt irq = NKern::DisableAllInterrupts();
-    	TInt r;
-		if(h.iIsr == SyborgInterrupt::Spurious)
-		{
-			r = KErrGeneral;
-		}
-		else
-		{
-            // Reset pointer to handler back to default
-			h.iPtr = (TAny*)anId;
-			h.iIsr = SyborgInterrupt::Spurious;	
-			// Disable the interrupt
-			TSyborg::DisableInt(anId);
-			r = KErrNone;
-        }
-		NKern::RestoreInterrupts(irq);
-    	return r;
-	}
-	return KErrArgument;
-}
-
-EXPORT_C TInt Interrupt::Enable(TInt anId)
-{
-	__KTRACE_OPT(KHARDWARE,Kern::Printf("Interrupt::Enable(%d)",anId));
-	if((anId >= 0) && ((TUint)anId < KNumSyborgInts))
-	{
-		if(SyborgInterrupt::Handlers[anId].iIsr == SyborgInterrupt::Spurious)
-		{
-	        return KErrNotReady;
-		}
-		else
-		{
-		  TSyborg::EnableInt(anId);
-		  return KErrNone;
-		}
-	}
-	return KErrArgument;
-}
-
-EXPORT_C TInt Interrupt::Disable(TInt anId)
-{
-	__KTRACE_OPT(KHARDWARE,Kern::Printf("Interrupt::Disable(%d)",anId));
-	if((anId >= 0) && ((TUint)anId < KNumSyborgInts))
-	{
-	  TSyborg::DisableInt(anId);
-	  return KErrNone;
-	}
-	return KErrArgument;
-}
-
-EXPORT_C TInt Interrupt::Clear(TInt anId)
-{
-	__KTRACE_OPT(KHARDWARE,Kern::Printf("Interrupt::Clear(%d)",anId));
-	if((anId >= 0) && ((TUint)anId < KNumSyborgInts))
-	{
-        return KErrNone;
-	}
-	return KErrArgument;
-}
-
-EXPORT_C TInt Interrupt::SetPriority(TInt anId, TInt aPriority)
-{
-	__KTRACE_OPT(KHARDWARE,Kern::Printf("Interrupt::SetPriority(anId=%d aPriority=0x%X)",anId,aPriority));
-	return KErrNotSupported;
-}
-
--- a/baseport/src/cedar/generic/base/syborg/specific/syborg.cfg	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2348 +0,0 @@
-############################################################
-## AUTO-GENERATED CONFIGURATION FILE
-## CommDB Database Dump Utility
-## 1.1
-############################################################
-
-############################################################
-## Network
-## 
-[Network]
-ADD_SECTION
-# COMMDB_ID = 1
-	Name=Intranet
-	FIELD_COUNT=1
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 2
-	Name=mRouter
-	FIELD_COUNT=1
-END_ADD
-
-
-############################################################
-## ModemBearer
-## 
-[ModemBearer]
-ADD_TEMPLATE
-	Name=Default Modem
-	Agent=CSD.agt
-	IfName=PPP
-	PortName=COMM::0
-	TSYName=MM
-	CSYName=ECUART
-	DataBits=8
-	StopBits=1
-	Parity=NONE
-	Rate=115200
-	Handshaking=0
-	SpecialRate=0
-	XonChar=0
-	XoffChar=0
-	FaxClassPref=AUTO
-	SpeakerPref=NEVER
-	SpeakerVolPref=QUIET
-	ModemInitString=AT
-	DataInitString=AT
-	FaxInitString=AT
-	DialPauseLength=S8=
-	SpeakerVolContorlLow=L0
-	SpeakerVolControlMedium=L1
-	SpeakerVolControlHigh=L2
-	SpeakerAlwaysOff=M0
-	SpeakerOnUntilCarrier=M1
-	SpeakerAlwaysOn=M2
-	SpeakerOnAfterUntilCarrier=M3
-	DialToneWaitModifier=W
-	CallProgress1=X1
-	CallProgress2=X2
-	CallProgress3=X3
-	CallProgress4=X4
-	EchoOff=E0
-	VerboseText=V1
-	QuietOn=Q1
-	QuietOff=Q0
-	DialCommandStateModifier=;
-	OnLine=O
-	ResetConfiguration=Z
-	ReturnToFactoryDefs=&F
-	DCDOnDuringLink=&C1
-	DTRHangUp=&D2
-	DSRAlwaysOn=&S0
-	RTSCTSHandshake=&K3
-	XonXoffHandshake=&K4
-	EscapeCharacter=+
-	EscapeGuardPeriod=S12
-	NoDialTone=NO DIAL TONE
-	Busy=BUSY
-	NoAnswer=NO ANSWER
-	Carrier=CARRIER
-	Connect=CONNECT
-	CompressionClass5=COMPRESSION:CLASS 5
-	CompressionV42bis=COMPRESSION:V.42 bis
-	CompressionNone=COMPRESSION:NONE
-	ProtocolLAPD=PROTOCOL:LAPD
-	ProtocolALT=PROTOCOL:ALT
-	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
-	ProtocolNone=PROTOCOL:NONE
-	MessageCentreNumber=+44123456789
-	MessageValidityPeriod=1440
-	MessageDeliveryReport=FALSE
-	MinimumSignalLevel=9905
-	LastSocketActivityTimeout=180
-	LastSessionClosedTimeout=30
-	LastSocketClosedTimeout=60
-	SIRSettings=0
-	CommRole=0
-	FIELD_COUNT=69
-END_TEMPLATE
-
-ADD_SECTION
-# COMMDB_ID = 2
-	Name=Null Modem 115200bps
-	Agent=CSD.agt
-	IfName=PPP
-	PortName=COMM::0
-	TSYName=MM
-	CSYName=ECUART
-	DataBits=8
-	StopBits=1
-	Parity=NONE
-	Rate=115200
-	Handshaking=52
-	SpecialRate=0
-	XonChar=0
-	XoffChar=0
-	FaxClassPref=AUTO
-	SpeakerPref=NEVER
-	SpeakerVolPref=QUIET
-	ModemInitString=AT
-	DataInitString=AT
-	FaxInitString=AT
-	DialPauseLength=S8=
-	SpeakerVolContorlLow=L0
-	SpeakerVolControlMedium=L1
-	SpeakerVolControlHigh=L2
-	SpeakerAlwaysOff=M0
-	SpeakerOnUntilCarrier=M1
-	SpeakerAlwaysOn=M2
-	SpeakerOnAfterUntilCarrier=M3
-	DialToneWaitModifier=W
-	CallProgress1=X1
-	CallProgress2=X2
-	CallProgress3=X3
-	CallProgress4=X4
-	EchoOff=E0
-	VerboseText=V1
-	QuietOn=Q1
-	QuietOff=Q0
-	DialCommandStateModifier=;
-	OnLine=O
-	ResetConfiguration=Z
-	ReturnToFactoryDefs=&F
-	DCDOnDuringLink=&C1
-	DTRHangUp=&D2
-	DSRAlwaysOn=&S0
-	RTSCTSHandshake=&K3
-	XonXoffHandshake=&K4
-	EscapeCharacter=+
-	EscapeGuardPeriod=S12
-	NoDialTone=NO DIAL TONE
-	Busy=BUSY
-	NoAnswer=NO ANSWER
-	Carrier=CARRIER
-	Connect=CONNECT
-	CompressionClass5=COMPRESSION:CLASS 5
-	CompressionV42bis=COMPRESSION:V.42 bis
-	CompressionNone=COMPRESSION:NONE
-	ProtocolLAPD=PROTOCOL:LAPD
-	ProtocolALT=PROTOCOL:ALT
-	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
-	ProtocolNone=PROTOCOL:NONE
-	MessageCentreNumber=+44123456789
-	MessageValidityPeriod=1440
-	MessageDeliveryReport=FALSE
-	MinimumSignalLevel=9905
-	LastSocketActivityTimeout=180
-	LastSessionClosedTimeout=30
-	LastSocketClosedTimeout=60
-	SIRSettings=0
-	CommRole=0
-	FIELD_COUNT=69
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 3
-	Name=US Robotics Sportster
-	Agent=CSD.agt
-	IfName=PPP
-	PortName=COMM::0
-	TSYName=MM
-	CSYName=ECUART
-	DataBits=8
-	StopBits=1
-	Parity=NONE
-	Rate=57600
-	Handshaking=244
-	SpecialRate=0
-	XonChar=0
-	XoffChar=0
-	FaxClassPref=AUTO
-	SpeakerPref=AFTERDIALUNTILANSWER
-	SpeakerVolPref=QUIET
-	ModemInitString=AT&F1
-	DataInitString=AT
-	FaxInitString=AT&d2
-	DialPauseLength=S8=
-	SpeakerVolContorlLow=L0
-	SpeakerVolControlMedium=L1
-	SpeakerVolControlHigh=L2
-	SpeakerAlwaysOff=M0
-	SpeakerOnUntilCarrier=M1
-	SpeakerAlwaysOn=M2
-	SpeakerOnAfterUntilCarrier=M3
-	DialToneWaitModifier=W
-	CallProgress1=X1
-	CallProgress2=X2
-	CallProgress3=X3
-	CallProgress4=X4
-	EchoOff=E0
-	VerboseText=V1
-	QuietOn=Q1
-	QuietOff=Q0
-	DialCommandStateModifier=;
-	OnLine=O
-	ResetConfiguration=Z
-	ReturnToFactoryDefs=&F
-	DCDOnDuringLink=&C1
-	DTRHangUp=&D2
-	DSRAlwaysOn=&S0
-	RTSCTSHandshake=&K3
-	XonXoffHandshake=&K4
-	EscapeCharacter=+
-	EscapeGuardPeriod=S12
-	NoDialTone=NO DIAL TONE
-	Busy=BUSY
-	NoAnswer=NO ANSWER
-	Carrier=CARRIER
-	Connect=CONNECT
-	CompressionClass5=COMPRESSION:CLASS 5
-	CompressionV42bis=COMPRESSION:V.42 bis
-	CompressionNone=COMPRESSION:NONE
-	ProtocolLAPD=PROTOCOL:LAPD
-	ProtocolALT=PROTOCOL:ALT
-	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
-	ProtocolNone=PROTOCOL:NONE
-	MessageCentreNumber=+44123456789
-	MessageValidityPeriod=1440
-	MessageDeliveryReport=FALSE
-	MinimumSignalLevel=9905
-	LastSocketActivityTimeout=180
-	LastSessionClosedTimeout=30
-	LastSocketClosedTimeout=60
-	SIRSettings=0
-	CommRole=0
-	FIELD_COUNT=69
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 4
-	Name=Dacom Surfer
-	Agent=CSD.agt
-	IfName=PPP
-	PortName=COMM::0
-	TSYName=MM
-	CSYName=ECUART
-	DataBits=8
-	StopBits=1
-	Parity=NONE
-	Rate=57600
-	Handshaking=244
-	SpecialRate=0
-	XonChar=0
-	XoffChar=0
-	FaxClassPref=AUTO
-	SpeakerPref=AFTERDIALUNTILANSWER
-	SpeakerVolPref=QUIET
-	ModemInitString=AT&F
-	DataInitString=AT
-	FaxInitString=AT&d2
-	DialPauseLength=S8=
-	SpeakerVolContorlLow=L0
-	SpeakerVolControlMedium=L1
-	SpeakerVolControlHigh=L2
-	SpeakerAlwaysOff=M0
-	SpeakerOnUntilCarrier=M1
-	SpeakerAlwaysOn=M2
-	SpeakerOnAfterUntilCarrier=M3
-	DialToneWaitModifier=W
-	CallProgress1=X1
-	CallProgress2=X2
-	CallProgress3=X3
-	CallProgress4=X4
-	EchoOff=E0
-	VerboseText=V1
-	QuietOn=Q1
-	QuietOff=Q0
-	DialCommandStateModifier=;
-	OnLine=O
-	ResetConfiguration=Z
-	ReturnToFactoryDefs=&F
-	DCDOnDuringLink=&C1
-	DTRHangUp=&D2
-	DSRAlwaysOn=&S0
-	RTSCTSHandshake=&K3
-	XonXoffHandshake=&K4
-	EscapeCharacter=+
-	EscapeGuardPeriod=S12
-	NoDialTone=NO DIAL TONE
-	Busy=BUSY
-	NoAnswer=NO ANSWER
-	Carrier=CARRIER
-	Connect=CONNECT
-	CompressionClass5=COMPRESSION:CLASS 5
-	CompressionV42bis=COMPRESSION:V.42 bis
-	CompressionNone=COMPRESSION:NONE
-	ProtocolLAPD=PROTOCOL:LAPD
-	ProtocolALT=PROTOCOL:ALT
-	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
-	ProtocolNone=PROTOCOL:NONE
-	MessageCentreNumber=+44123456789
-	MessageValidityPeriod=1440
-	MessageDeliveryReport=FALSE
-	MinimumSignalLevel=9905
-	LastSocketActivityTimeout=180
-	LastSessionClosedTimeout=30
-	LastSocketClosedTimeout=60
-	SIRSettings=0
-	CommRole=0
-	FIELD_COUNT=69
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 5
-	Name=GSM Mobile Phone via Infrared
-	Agent=CSD.agt
-	IfName=PPP
-	PortName=IRCOMM::0
-	TSYName=MM
-	CSYName=IRCOMM
-	DataBits=8
-	StopBits=1
-	Parity=NONE
-	Rate=115200
-	Handshaking=196
-	SpecialRate=0
-	XonChar=17
-	XoffChar=19
-	FaxClassPref=AUTO
-	SpeakerPref=NEVER
-	SpeakerVolPref=QUIET
-	ModemInitString=ATZ
-	DataInitString=AT
-	FaxInitString=AT
-	DialPauseLength=S8=
-	SpeakerVolContorlLow=L0
-	SpeakerVolControlMedium=L1
-	SpeakerVolControlHigh=L2
-	SpeakerAlwaysOff=M0
-	SpeakerOnUntilCarrier=M1
-	SpeakerAlwaysOn=M2
-	SpeakerOnAfterUntilCarrier=M3
-	DialToneWaitModifier=W
-	CallProgress1=X1
-	CallProgress2=X2
-	CallProgress3=X3
-	CallProgress4=X4
-	EchoOff=E0
-	VerboseText=V1
-	QuietOn=Q1
-	QuietOff=Q0
-	DialCommandStateModifier=;
-	OnLine=O
-	ResetConfiguration=Z
-	ReturnToFactoryDefs=&F
-	DCDOnDuringLink=&C1
-	DTRHangUp=&D2
-	DSRAlwaysOn=&S0
-	RTSCTSHandshake=&K3
-	XonXoffHandshake=&K4
-	EscapeCharacter=+
-	EscapeGuardPeriod=S12
-	NoDialTone=NO DIAL TONE
-	Busy=BUSY
-	NoAnswer=NO ANSWER
-	Carrier=CARRIER
-	Connect=CONNECT
-	CompressionClass5=COMPRESSION:CLASS 5
-	CompressionV42bis=COMPRESSION:V.42 bis
-	CompressionNone=COMPRESSION:NONE
-	ProtocolLAPD=PROTOCOL:LAPD
-	ProtocolALT=PROTOCOL:ALT
-	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
-	ProtocolNone=PROTOCOL:NONE
-	MessageCentreNumber=+44123456789
-	MessageValidityPeriod=1440
-	MessageDeliveryReport=FALSE
-	MinimumSignalLevel=9905
-	LastSocketActivityTimeout=180
-	LastSessionClosedTimeout=30
-	LastSocketClosedTimeout=60
-	SIRSettings=0
-	CommRole=0
-	FIELD_COUNT=69
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 6
-	Name=GSM Mobile Phone via Serial
-	Agent=CSD.agt
-	IfName=PPP
-	PortName=COMM::0
-	TSYName=MM
-	CSYName=ECUART
-	DataBits=8
-	StopBits=1
-	Parity=NONE
-	Rate=19200
-	Handshaking=196
-	SpecialRate=0
-	XonChar=17
-	XoffChar=19
-	FaxClassPref=AUTO
-	SpeakerPref=NEVER
-	SpeakerVolPref=QUIET
-	ModemInitString=ATZ
-	DataInitString=AT
-	FaxInitString=AT
-	DialPauseLength=S8=
-	SpeakerVolContorlLow=L0
-	SpeakerVolControlMedium=L1
-	SpeakerVolControlHigh=L2
-	SpeakerAlwaysOff=M0
-	SpeakerOnUntilCarrier=M1
-	SpeakerAlwaysOn=M2
-	SpeakerOnAfterUntilCarrier=M3
-	DialToneWaitModifier=W
-	CallProgress1=X1
-	CallProgress2=X2
-	CallProgress3=X3
-	CallProgress4=X4
-	EchoOff=E0
-	VerboseText=V1
-	QuietOn=Q1
-	QuietOff=Q0
-	DialCommandStateModifier=;
-	OnLine=O
-	ResetConfiguration=Z
-	ReturnToFactoryDefs=&F
-	DCDOnDuringLink=&C1
-	DTRHangUp=&D2
-	DSRAlwaysOn=&S0
-	RTSCTSHandshake=&K3
-	XonXoffHandshake=&K4
-	EscapeCharacter=+
-	EscapeGuardPeriod=S12
-	NoDialTone=NO DIAL TONE
-	Busy=BUSY
-	NoAnswer=NO ANSWER
-	Carrier=CARRIER
-	Connect=CONNECT
-	CompressionClass5=COMPRESSION:CLASS 5
-	CompressionV42bis=COMPRESSION:V.42 bis
-	CompressionNone=COMPRESSION:NONE
-	ProtocolLAPD=PROTOCOL:LAPD
-	ProtocolALT=PROTOCOL:ALT
-	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
-	ProtocolNone=PROTOCOL:NONE
-	MessageCentreNumber=+44123456789
-	MessageValidityPeriod=1440
-	MessageDeliveryReport=FALSE
-	MinimumSignalLevel=9905
-	LastSocketActivityTimeout=180
-	LastSessionClosedTimeout=30
-	LastSocketClosedTimeout=60
-	SIRSettings=0
-	CommRole=0
-	FIELD_COUNT=69
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 7
-	Name=GPRS Ericsson R520m via IR
-	Agent=PSD.agt
-	IfName=PPP
-	PortName=IRCOMM::0
-	TSYName=MM
-	CSYName=IRCOMM
-	DataBits=8
-	StopBits=1
-	Parity=NONE
-	Rate=115200
-	Handshaking=4
-	SpecialRate=0
-	XonChar=17
-	XoffChar=19
-	FaxClassPref=AUTO
-	SpeakerPref=NEVER
-	SpeakerVolPref=QUIET
-	ModemInitString=ATZ
-	DataInitString=AT
-	FaxInitString=AT
-	DialPauseLength=S8=
-	SpeakerVolContorlLow=L0
-	SpeakerVolControlMedium=L1
-	SpeakerVolControlHigh=L2
-	SpeakerAlwaysOff=M0
-	SpeakerOnUntilCarrier=M1
-	SpeakerAlwaysOn=M2
-	SpeakerOnAfterUntilCarrier=M3
-	DialToneWaitModifier=W
-	CallProgress1=X1
-	CallProgress2=X2
-	CallProgress3=X3
-	CallProgress4=X4
-	EchoOff=E0
-	VerboseText=V1
-	QuietOn=Q1
-	QuietOff=Q0
-	DialCommandStateModifier=;
-	OnLine=O
-	ResetConfiguration=Z
-	ReturnToFactoryDefs=&F
-	DCDOnDuringLink=&C1
-	DTRHangUp=&D2
-	DSRAlwaysOn=&S0
-	RTSCTSHandshake=&K3
-	XonXoffHandshake=&K4
-	EscapeCharacter=+
-	EscapeGuardPeriod=S12
-	NoDialTone=NO DIAL TONE
-	Busy=BUSY
-	NoAnswer=NO ANSWER
-	Carrier=CARRIER
-	Connect=CONNECT
-	CompressionClass5=COMPRESSION:CLASS 5
-	CompressionV42bis=COMPRESSION:V.42 bis
-	CompressionNone=COMPRESSION:NONE
-	ProtocolLAPD=PROTOCOL:LAPD
-	ProtocolALT=PROTOCOL:ALT
-	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
-	ProtocolNone=PROTOCOL:NONE
-	MessageCentreNumber=+44123456789
-	MessageValidityPeriod=1440
-	MessageDeliveryReport=FALSE
-	MinimumSignalLevel=9905
-	LastSocketActivityTimeout=180
-	LastSessionClosedTimeout=30
-	LastSocketClosedTimeout=60
-	SIRSettings=0
-	CommRole=0
-	FIELD_COUNT=69
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 8
-	Name=GPRS Ericsson R520m/T68i via Serial
-	Agent=PSD.agt
-	IfName=PPP
-	PortName=COMM::0
-	TSYName=MM
-	CSYName=ECUART
-	DataBits=8
-	StopBits=1
-	Parity=NONE
-	Rate=19200
-	Handshaking=4
-	SpecialRate=0
-	XonChar=17
-	XoffChar=19
-	FaxClassPref=AUTO
-	SpeakerPref=NEVER
-	SpeakerVolPref=QUIET
-	ModemInitString=ATZ
-	DataInitString=AT
-	FaxInitString=AT
-	IspInitString=*99***1#
-	DialPauseLength=S8=
-	SpeakerVolContorlLow=L0
-	SpeakerVolControlMedium=L1
-	SpeakerVolControlHigh=L2
-	SpeakerAlwaysOff=M0
-	SpeakerOnUntilCarrier=M1
-	SpeakerAlwaysOn=M2
-	SpeakerOnAfterUntilCarrier=M3
-	DialToneWaitModifier=W
-	CallProgress1=X1
-	CallProgress2=X2
-	CallProgress3=X3
-	CallProgress4=X4
-	EchoOff=E0
-	VerboseText=V1
-	QuietOn=Q1
-	QuietOff=Q0
-	DialCommandStateModifier=;
-	OnLine=O
-	ResetConfiguration=Z
-	ReturnToFactoryDefs=&F
-	DCDOnDuringLink=&C1
-	DTRHangUp=&D2
-	DSRAlwaysOn=&S0
-	RTSCTSHandshake=&K3
-	XonXoffHandshake=&K4
-	EscapeCharacter=+
-	EscapeGuardPeriod=S12
-	NoDialTone=NO DIAL TONE
-	Busy=BUSY
-	NoAnswer=NO ANSWER
-	Carrier=CARRIER
-	Connect=CONNECT
-	CompressionClass5=COMPRESSION:CLASS 5
-	CompressionV42bis=COMPRESSION:V.42 bis
-	CompressionNone=COMPRESSION:NONE
-	ProtocolLAPD=PROTOCOL:LAPD
-	ProtocolALT=PROTOCOL:ALT
-	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
-	ProtocolNone=PROTOCOL:NONE
-	MessageCentreNumber=+44123456789
-	MessageValidityPeriod=1440
-	MessageDeliveryReport=FALSE
-	MinimumSignalLevel=9905
-	LastSocketActivityTimeout=180
-	LastSessionClosedTimeout=30
-	LastSocketClosedTimeout=60
-	SIRSettings=0
-	CommRole=0
-	FIELD_COUNT=70
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 9
-	Name=GPRS Motorola Mobile Phone via Serial
-	Agent=PSD.agt
-	IfName=PPP
-	PortName=COMM::0
-	TSYName=MM
-	CSYName=ECUART
-	DataBits=8
-	StopBits=1
-	Parity=NONE
-	Rate=57600
-	Handshaking=4
-	SpecialRate=0
-	XonChar=17
-	XoffChar=19
-	FaxClassPref=AUTO
-	SpeakerPref=NEVER
-	SpeakerVolPref=QUIET
-	ModemInitString=ATZ
-	DataInitString=AT
-	FaxInitString=AT
-	DialPauseLength=S8=
-	SpeakerVolContorlLow=L0
-	SpeakerVolControlMedium=L1
-	SpeakerVolControlHigh=L2
-	SpeakerAlwaysOff=M0
-	SpeakerOnUntilCarrier=M1
-	SpeakerAlwaysOn=M2
-	SpeakerOnAfterUntilCarrier=M3
-	DialToneWaitModifier=W
-	CallProgress1=X1
-	CallProgress2=X2
-	CallProgress3=X3
-	CallProgress4=X4
-	EchoOff=E0
-	VerboseText=V1
-	QuietOn=Q1
-	QuietOff=Q0
-	DialCommandStateModifier=;
-	OnLine=O
-	ResetConfiguration=Z
-	ReturnToFactoryDefs=&F
-	DCDOnDuringLink=&C1
-	DTRHangUp=&D2
-	DSRAlwaysOn=&S0
-	RTSCTSHandshake=&K3
-	XonXoffHandshake=&K4
-	EscapeCharacter=+
-	EscapeGuardPeriod=S12
-	NoDialTone=NO DIAL TONE
-	Busy=BUSY
-	NoAnswer=NO ANSWER
-	Carrier=CARRIER
-	Connect=CONNECT
-	CompressionClass5=COMPRESSION:CLASS 5
-	CompressionV42bis=COMPRESSION:V.42 bis
-	CompressionNone=COMPRESSION:NONE
-	ProtocolLAPD=PROTOCOL:LAPD
-	ProtocolALT=PROTOCOL:ALT
-	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
-	ProtocolNone=PROTOCOL:NONE
-	MessageCentreNumber=+44123456789
-	MessageValidityPeriod=1440
-	MessageDeliveryReport=FALSE
-	MinimumSignalLevel=9905
-	LastSocketActivityTimeout=180
-	LastSessionClosedTimeout=30
-	LastSocketClosedTimeout=60
-	SIRSettings=0
-	CommRole=0
-	FIELD_COUNT=69
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 10
-	Name=WinTunnel Modem
-	Agent=null.agt
-	IfName=PPP
-	PortName=COMM::6
-	TSYName=MM
-	CSYName=ECUART
-	DataBits=8
-	StopBits=1
-	Parity=NONE
-	Rate=115200
-	Handshaking=52
-	SpecialRate=0
-	XonChar=0
-	XoffChar=0
-	FaxClassPref=AUTO
-	SpeakerPref=NEVER
-	SpeakerVolPref=QUIET
-	ModemInitString=AT
-	DataInitString=AT
-	FaxInitString=AT
-	DialPauseLength=S8=
-	SpeakerVolContorlLow=L0
-	SpeakerVolControlMedium=L1
-	SpeakerVolControlHigh=L2
-	SpeakerAlwaysOff=M0
-	SpeakerOnUntilCarrier=M1
-	SpeakerAlwaysOn=M2
-	SpeakerOnAfterUntilCarrier=M3
-	DialToneWaitModifier=W
-	CallProgress1=X1
-	CallProgress2=X2
-	CallProgress3=X3
-	CallProgress4=X4
-	EchoOff=E0
-	VerboseText=V1
-	QuietOn=Q1
-	QuietOff=Q0
-	DialCommandStateModifier=;
-	OnLine=O
-	ResetConfiguration=Z
-	ReturnToFactoryDefs=&F
-	DCDOnDuringLink=&C1
-	DTRHangUp=&D2
-	DSRAlwaysOn=&S0
-	RTSCTSHandshake=&K3
-	XonXoffHandshake=&K4
-	EscapeCharacter=+
-	EscapeGuardPeriod=S12
-	NoDialTone=NO DIAL TONE
-	Busy=BUSY
-	NoAnswer=NO ANSWER
-	Carrier=CARRIER
-	Connect=CONNECT
-	CompressionClass5=COMPRESSION:CLASS 5
-	CompressionV42bis=COMPRESSION:V.42 bis
-	CompressionNone=COMPRESSION:NONE
-	ProtocolLAPD=PROTOCOL:LAPD
-	ProtocolALT=PROTOCOL:ALT
-	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
-	ProtocolNone=PROTOCOL:NONE
-	MessageCentreNumber=+44123456789
-	MessageValidityPeriod=1440
-	MessageDeliveryReport=FALSE
-	MinimumSignalLevel=9905
-	LastSocketActivityTimeout=180
-	LastSessionClosedTimeout=30
-	LastSocketClosedTimeout=60
-	SIRSettings=0
-	CommRole=0
-	FIELD_COUNT=69
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 11
-	Name=mRouterWinsBearer
-	Agent=mRouterAgent.agt
-	IfName=PPP
-	PortName=WINS::0
-	TSYName=MM
-	CSYName=WINSCSY
-	DataBits=8
-	StopBits=1
-	Parity=NONE
-	Rate=115200
-	Handshaking=52
-	SpecialRate=0
-	XonChar=0
-	XoffChar=0
-	FaxClassPref=AUTO
-	SpeakerPref=NEVER
-	SpeakerVolPref=QUIET
-	ModemInitString=AT
-	DataInitString=AT
-	FaxInitString=AT
-	DialPauseLength=S8=
-	SpeakerVolContorlLow=L0
-	SpeakerVolControlMedium=L1
-	SpeakerVolControlHigh=L2
-	SpeakerAlwaysOff=M0
-	SpeakerOnUntilCarrier=M1
-	SpeakerAlwaysOn=M2
-	SpeakerOnAfterUntilCarrier=M3
-	DialToneWaitModifier=W
-	CallProgress1=X1
-	CallProgress2=X2
-	CallProgress3=X3
-	CallProgress4=X4
-	EchoOff=E0
-	VerboseText=V1
-	QuietOn=Q1
-	QuietOff=Q0
-	DialCommandStateModifier=;
-	OnLine=O
-	ResetConfiguration=Z
-	ReturnToFactoryDefs=&F
-	DCDOnDuringLink=&C1
-	DTRHangUp=&D2
-	DSRAlwaysOn=&S0
-	RTSCTSHandshake=&K3
-	XonXoffHandshake=&K4
-	EscapeCharacter=+
-	EscapeGuardPeriod=S12
-	NoDialTone=NO DIAL TONE
-	Busy=BUSY
-	NoAnswer=NO ANSWER
-	Carrier=CARRIER
-	Connect=CONNECT
-	CompressionClass5=COMPRESSION:CLASS 5
-	CompressionV42bis=COMPRESSION:V.42 bis
-	CompressionNone=COMPRESSION:NONE
-	ProtocolLAPD=PROTOCOL:LAPD
-	ProtocolALT=PROTOCOL:ALT
-	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
-	ProtocolNone=PROTOCOL:NONE
-	MessageCentreNumber=+44123456789
-	MessageValidityPeriod=1440
-	MessageDeliveryReport=FALSE
-	MinimumSignalLevel=9905
-	LastSocketActivityTimeout=9999
-	LastSessionClosedTimeout=180
-	LastSocketClosedTimeout=30
-	SIRSettings=0
-	CommRole=0
-	FIELD_COUNT=69
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 12
-	Name=mRouterRs232Bearer
-	Agent=mRouterAgent.agt
-	IfName=PPP
-	PortName=COMM::0
-	TSYName=MM
-	CSYName=ECUART
-	DataBits=8
-	StopBits=1
-	Parity=NONE
-	Rate=115200
-	Handshaking=52
-	SpecialRate=0
-	XonChar=0
-	XoffChar=0
-	FaxClassPref=AUTO
-	SpeakerPref=NEVER
-	SpeakerVolPref=QUIET
-	ModemInitString=AT
-	DataInitString=AT
-	FaxInitString=AT
-	DialPauseLength=S8=
-	SpeakerVolContorlLow=L0
-	SpeakerVolControlMedium=L1
-	SpeakerVolControlHigh=L2
-	SpeakerAlwaysOff=M0
-	SpeakerOnUntilCarrier=M1
-	SpeakerAlwaysOn=M2
-	SpeakerOnAfterUntilCarrier=M3
-	DialToneWaitModifier=W
-	CallProgress1=X1
-	CallProgress2=X2
-	CallProgress3=X3
-	CallProgress4=X4
-	EchoOff=E0
-	VerboseText=V1
-	QuietOn=Q1
-	QuietOff=Q0
-	DialCommandStateModifier=;
-	OnLine=O
-	ResetConfiguration=Z
-	ReturnToFactoryDefs=&F
-	DCDOnDuringLink=&C1
-	DTRHangUp=&D2
-	DSRAlwaysOn=&S0
-	RTSCTSHandshake=&K3
-	XonXoffHandshake=&K4
-	EscapeCharacter=+
-	EscapeGuardPeriod=S12
-	NoDialTone=NO DIAL TONE
-	Busy=BUSY
-	NoAnswer=NO ANSWER
-	Carrier=CARRIER
-	Connect=CONNECT
-	CompressionClass5=COMPRESSION:CLASS 5
-	CompressionV42bis=COMPRESSION:V.42 bis
-	CompressionNone=COMPRESSION:NONE
-	ProtocolLAPD=PROTOCOL:LAPD
-	ProtocolALT=PROTOCOL:ALT
-	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
-	ProtocolNone=PROTOCOL:NONE
-	MessageCentreNumber=+44123456789
-	MessageValidityPeriod=1440
-	MessageDeliveryReport=FALSE
-	MinimumSignalLevel=9905
-	LastSocketActivityTimeout=9999
-	LastSessionClosedTimeout=180
-	LastSocketClosedTimeout=30
-	SIRSettings=0
-	CommRole=0
-	FIELD_COUNT=69
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 13
-	Name=mRouterIrBearer
-	Agent=mRouterAgent.agt
-	IfName=PPP
-	PortName=IRCOMM::0
-	TSYName=MM
-	CSYName=IRCOMM
-	DataBits=8
-	StopBits=1
-	Parity=NONE
-	Rate=115200
-	Handshaking=52
-	SpecialRate=0
-	XonChar=0
-	XoffChar=0
-	FaxClassPref=AUTO
-	SpeakerPref=NEVER
-	SpeakerVolPref=QUIET
-	ModemInitString=AT
-	DataInitString=AT
-	FaxInitString=AT
-	DialPauseLength=S8=
-	SpeakerVolContorlLow=L0
-	SpeakerVolControlMedium=L1
-	SpeakerVolControlHigh=L2
-	SpeakerAlwaysOff=M0
-	SpeakerOnUntilCarrier=M1
-	SpeakerAlwaysOn=M2
-	SpeakerOnAfterUntilCarrier=M3
-	DialToneWaitModifier=W
-	CallProgress1=X1
-	CallProgress2=X2
-	CallProgress3=X3
-	CallProgress4=X4
-	EchoOff=E0
-	VerboseText=V1
-	QuietOn=Q1
-	QuietOff=Q0
-	DialCommandStateModifier=;
-	OnLine=O
-	ResetConfiguration=Z
-	ReturnToFactoryDefs=&F
-	DCDOnDuringLink=&C1
-	DTRHangUp=&D2
-	DSRAlwaysOn=&S0
-	RTSCTSHandshake=&K3
-	XonXoffHandshake=&K4
-	EscapeCharacter=+
-	EscapeGuardPeriod=S12
-	NoDialTone=NO DIAL TONE
-	Busy=BUSY
-	NoAnswer=NO ANSWER
-	Carrier=CARRIER
-	Connect=CONNECT
-	CompressionClass5=COMPRESSION:CLASS 5
-	CompressionV42bis=COMPRESSION:V.42 bis
-	CompressionNone=COMPRESSION:NONE
-	ProtocolLAPD=PROTOCOL:LAPD
-	ProtocolALT=PROTOCOL:ALT
-	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
-	ProtocolNone=PROTOCOL:NONE
-	MessageCentreNumber=+44123456789
-	MessageValidityPeriod=1440
-	MessageDeliveryReport=FALSE
-	MinimumSignalLevel=9905
-	LastSocketActivityTimeout=9999
-	LastSessionClosedTimeout=180
-	LastSocketClosedTimeout=30
-	SIRSettings=0
-	CommRole=0
-	FIELD_COUNT=69
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 14
-	Name=mRouterBtBearer
-	Agent=mRouterAgent.agt
-	IfName=PPP
-	PortName=BTCOMM::0
-	TSYName=MM
-	CSYName=BTCOMM
-	DataBits=8
-	StopBits=1
-	Parity=NONE
-	Rate=115200
-	Handshaking=52
-	SpecialRate=0
-	XonChar=0
-	XoffChar=0
-	FaxClassPref=AUTO
-	SpeakerPref=NEVER
-	SpeakerVolPref=QUIET
-	ModemInitString=AT
-	DataInitString=AT
-	FaxInitString=AT
-	DialPauseLength=S8=
-	SpeakerVolContorlLow=L0
-	SpeakerVolControlMedium=L1
-	SpeakerVolControlHigh=L2
-	SpeakerAlwaysOff=M0
-	SpeakerOnUntilCarrier=M1
-	SpeakerAlwaysOn=M2
-	SpeakerOnAfterUntilCarrier=M3
-	DialToneWaitModifier=W
-	CallProgress1=X1
-	CallProgress2=X2
-	CallProgress3=X3
-	CallProgress4=X4
-	EchoOff=E0
-	VerboseText=V1
-	QuietOn=Q1
-	QuietOff=Q0
-	DialCommandStateModifier=;
-	OnLine=O
-	ResetConfiguration=Z
-	ReturnToFactoryDefs=&F
-	DCDOnDuringLink=&C1
-	DTRHangUp=&D2
-	DSRAlwaysOn=&S0
-	RTSCTSHandshake=&K3
-	XonXoffHandshake=&K4
-	EscapeCharacter=+
-	EscapeGuardPeriod=S12
-	NoDialTone=NO DIAL TONE
-	Busy=BUSY
-	NoAnswer=NO ANSWER
-	Carrier=CARRIER
-	Connect=CONNECT
-	CompressionClass5=COMPRESSION:CLASS 5
-	CompressionV42bis=COMPRESSION:V.42 bis
-	CompressionNone=COMPRESSION:NONE
-	ProtocolLAPD=PROTOCOL:LAPD
-	ProtocolALT=PROTOCOL:ALT
-	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
-	ProtocolNone=PROTOCOL:NONE
-	MessageCentreNumber=+44123456789
-	MessageValidityPeriod=1440
-	MessageDeliveryReport=FALSE
-	MinimumSignalLevel=9905
-	LastSocketActivityTimeout=9999
-	LastSessionClosedTimeout=180
-	LastSocketClosedTimeout=30
-	SIRSettings=0
-	CommRole=0
-	FIELD_COUNT=69
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 15
-	Name=mRouterUsbBearer
-	Agent=mRouterAgent.agt
-	IfName=PPP
-	PortName=ACM::0
-	TSYName=MM
-	CSYName=ECACM
-	DataBits=8
-	StopBits=1
-	Parity=NONE
-	Rate=115200
-	Handshaking=52
-	SpecialRate=0
-	XonChar=0
-	XoffChar=0
-	FaxClassPref=AUTO
-	SpeakerPref=NEVER
-	SpeakerVolPref=QUIET
-	ModemInitString=AT
-	DataInitString=AT
-	FaxInitString=AT
-	DialPauseLength=S8=
-	SpeakerVolContorlLow=L0
-	SpeakerVolControlMedium=L1
-	SpeakerVolControlHigh=L2
-	SpeakerAlwaysOff=M0
-	SpeakerOnUntilCarrier=M1
-	SpeakerAlwaysOn=M2
-	SpeakerOnAfterUntilCarrier=M3
-	DialToneWaitModifier=W
-	CallProgress1=X1
-	CallProgress2=X2
-	CallProgress3=X3
-	CallProgress4=X4
-	EchoOff=E0
-	VerboseText=V1
-	QuietOn=Q1
-	QuietOff=Q0
-	DialCommandStateModifier=;
-	OnLine=O
-	ResetConfiguration=Z
-	ReturnToFactoryDefs=&F
-	DCDOnDuringLink=&C1
-	DTRHangUp=&D2
-	DSRAlwaysOn=&S0
-	RTSCTSHandshake=&K3
-	XonXoffHandshake=&K4
-	EscapeCharacter=+
-	EscapeGuardPeriod=S12
-	NoDialTone=NO DIAL TONE
-	Busy=BUSY
-	NoAnswer=NO ANSWER
-	Carrier=CARRIER
-	Connect=CONNECT
-	CompressionClass5=COMPRESSION:CLASS 5
-	CompressionV42bis=COMPRESSION:V.42 bis
-	CompressionNone=COMPRESSION:NONE
-	ProtocolLAPD=PROTOCOL:LAPD
-	ProtocolALT=PROTOCOL:ALT
-	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
-	ProtocolNone=PROTOCOL:NONE
-	MessageCentreNumber=+44123456789
-	MessageValidityPeriod=1440
-	MessageDeliveryReport=FALSE
-	MinimumSignalLevel=9905
-	LastSocketActivityTimeout=9999
-	LastSessionClosedTimeout=180
-	LastSocketClosedTimeout=30
-	SIRSettings=0
-	CommRole=0
-	FIELD_COUNT=69
-END_ADD
-
-
-############################################################
-## LANBearer
-## 
-[LANBearer]
-ADD_SECTION
-# COMMDB_ID = 1
-	Name=EKA1 Assabet on-board Ethernet
-	Agent=nullagt.agt
-	IfName=ethint
-	LDDFilename=ethercard
-	LDDName=EtherCard
-	PDDFilename=EtherSmc
-	PDDName=EtherCard.Smc
-	PacketDriverName=EtherPkt.drv
-	LastSocketActivityTimeout=-1
-	LastSessionClosedTimeout=-1
-	LastSocketClosedTimeout=-1
-	FIELD_COUNT=11
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 2
-	Name=EKA2 Assabet on-board Ethernet
-	Agent=nullagt.agt
-	IfName=ethint
-	LDDFilename=enet
-	LDDName=Ethernet
-	PDDFilename=ethernet
-	PDDName=Ethernet.Assabet
-	PacketDriverName=EtherPkt.drv
-	LastSocketActivityTimeout=-1
-	LastSessionClosedTimeout=-1
-	LastSocketClosedTimeout=-1
-	FIELD_COUNT=11
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 3
-	Name=EKA1 emulator Ethernet
-	Agent=nullagt.agt
-	IfName=ethint
-	LDDFilename=ethercard
-	LDDName=Ethercard
-	PDDFilename=etherwins
-	PDDName=Ethercard.wins
-	PacketDriverName=EtherPkt.drv
-	LastSocketActivityTimeout=-1
-	LastSessionClosedTimeout=-1
-	LastSocketClosedTimeout=-1
-	FIELD_COUNT=11
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 4
-	Name=EKA2 emulator Ethernet
-	Agent=nullagt.agt
-	IfName=ethint
-	LDDFilename=enet
-	LDDName=Ethernet
-	PDDFilename=ethernet
-	PDDName=Ethernet.Wins
-	PacketDriverName=EtherPkt.drv
-	LastSocketActivityTimeout=-1
-	LastSessionClosedTimeout=-1
-	LastSocketClosedTimeout=-1
-	FIELD_COUNT=11
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 5
-	Name=EKA2 SYBORG on-board Ethernet
-	Agent=nullagt.agt
-	IfName=ethint
-	LDDFilename=enet
-	LDDName=Ethernet
-	PDDFilename=ethernet
-	PDDName=Ethernet.SYBORG
-	PacketDriverName=EtherPkt.drv
-	LastSocketActivityTimeout=-1
-	LastSessionClosedTimeout=-1
-	LastSocketClosedTimeout=-1
-	FIELD_COUNT=11
-END_ADD
-
-############################################################
-## Location
-## 
-[Location]
-ADD_TEMPLATE
-	Name=Default Location
-	IntlPrefixCode=+
-	NatPrefixCode=0
-	NatCode=44
-	Mobile=TRUE
-	UsePulseDial=FALSE
-	WaitForDialTone=FALSE
-	PauseAfterDialout=0
-	FIELD_COUNT=8
-END_TEMPLATE
-
-ADD_SECTION
-# COMMDB_ID = 2
-	Name=Office
-	IntlPrefixCode=00
-	NatPrefixCode=0
-	NatCode=44
-	AreaCode=171
-	DialOutCode=9,
-	Mobile=FALSE
-	UsePulseDial=FALSE
-	WaitForDialTone=FALSE
-	PauseAfterDialout=0
-	FIELD_COUNT=10
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 3
-	Name=Office Direct Dial
-	IntlPrefixCode=00
-	NatPrefixCode=0
-	NatCode=44
-	AreaCode=171
-	Mobile=FALSE
-	UsePulseDial=FALSE
-	WaitForDialTone=FALSE
-	PauseAfterDialout=0
-	FIELD_COUNT=9
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 4
-	Name=Mobile
-	IntlPrefixCode=+
-	NatPrefixCode=0
-	NatCode=44
-	Mobile=TRUE
-	UsePulseDial=FALSE
-	WaitForDialTone=FALSE
-	PauseAfterDialout=0
-	FIELD_COUNT=8
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 5
-	Name=Home
-	IntlPrefixCode=00
-	NatPrefixCode=0
-	NatCode=44
-	AreaCode=181
-	Mobile=FALSE
-	UsePulseDial=TRUE
-	WaitForDialTone=TRUE
-	PauseAfterDialout=0
-	FIELD_COUNT=9
-END_ADD
-
-
-############################################################
-## Chargecard
-## 
-[Chargecard]
-ADD_SECTION
-# COMMDB_ID = 1
-	Name=Dummy BT Chargecard
-	AccountNumber=144,12345678
-	Pin=0000
-	LocalRule=HG
-	NatRule=HFG
-	IntlRule=HEFG
-	FIELD_COUNT=6
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 2
-	Name=Dummy Mercury Chargecard
-	AccountNumber=0500800800,,12345678
-	Pin=****
-	LocalRule=HG
-	NatRule=J,K,0FG
-	IntlRule=HEFG
-	FIELD_COUNT=6
-END_ADD
-
-
-############################################################
-## GlobalSettings
-## 
-[GlobalSettings]
-ADD_SECTION
-	WAPAccessPoint=1
-	RedialAttempts=3
-	SmsBearer=1
-	SmsReceiveMode=2
-	GPRSAttachMode=1
-	AcceptIncomingGprs=1
-	GPRSClassCBearer=GSM
-	ConnectionAttempts=2
-	ModemForDataAndFax=2
-	ModemForPhoneServicesAndSMS=2
-	LocationForDataAndFax=2
-	LocationForPhoneServicesAndSMS=2
-	DefaultNetwork=1
-	BearerAvailabilityCheckTSY=mm
-	FIELD_COUNT=14
-END_ADD
-
-
-############################################################
-## DialOutISP
-## 
-[DialOutISP]
-ADD_TEMPLATE
-	Name=Default Dial Out ISP
-	DialResolution=TRUE
-	UseLoginScript=FALSE
-	PromptForLogin=TRUE
-	DisplayPCT=FALSE
-	IfPromptForAuth=TRUE
-	IfCallbackEnabled=FALSE
-	CallbackTimeout=0
-	IpAddrFromServer=TRUE
-	IpDNSAddrFromServer=TRUE
-	EnableIPHeaderComp=FALSE
-	EnableLCPExtension=FALSE
-	DisablePlainTextAuth=FALSE
-	EnableSWComp=FALSE
-	BearerService=0
-	BearerProtocol=UNSPECIFIED
-	RlpVersion=0
-	IwfToMs=0
-	MsToIwf=0
-	AckTimer=0
-	RetransmissionAttempts=0
-	ResequencePeriod=0
-	V42Compression=0
-	V42Codewords=0
-	V42MaxLength=0
-	Asymmetry=0
-	UserInitUpgrade=FALSE
-	UseEdge=FALSE
-	FIELD_COUNT=28
-END_TEMPLATE
-
-ADD_SECTION
-# COMMDB_ID = 2
-	Name=NT RAS
-	Description=Test
-	Type=INTERNETONLY
-	DialResolution=TRUE
-	UseLoginScript=TRUE
-	LoginScript=CHARMAP \[windows-1252\]\nLOOP 10\n{\nSEND "CLIENT"+<0x0d>\nWAIT 3\n{\n"SERVER" OK\n}\n}\nEXIT KErrNoAnswer$\n\nOK:\nEXIT\n
-	PromptForLogin=FALSE
-	DisplayPCT=FALSE
-	IfNetworks=ip
-	IfPromptForAuth=FALSE
-	IfAuthName=RasUser
-	IfAuthPass=pass
-	AuthRetries=0
-	IfCallbackEnabled=FALSE
-	CallbackTimeout=0
-	IpAddrFromServer=TRUE
-	IpDNSAddrFromServer=TRUE
-	EnableIPHeaderComp=FALSE
-	EnableLCPExtension=FALSE
-	DisablePlainTextAuth=FALSE
-	EnableSWComp=FALSE
-	BearerService=0
-	BearerProtocol=UNSPECIFIED
-	RlpVersion=0
-	IwfToMs=0
-	MsToIwf=0
-	AckTimer=0
-	RetransmissionAttempts=0
-	ResequencePeriod=0
-	V42Compression=0
-	V42Codewords=0
-	V42MaxLength=0
-	Asymmetry=0
-	UserInitUpgrade=FALSE
-	UseEdge=FALSE
-	FIELD_COUNT=35
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 3
-	Name=ISP01
-	Description=PlaceHolder for ISP01
-	Type=INTERNETONLY
-	DialResolution=TRUE
-	UseLoginScript=FALSE
-	PromptForLogin=FALSE
-	DisplayPCT=FALSE
-	IfNetworks=ip
-	IfPromptForAuth=TRUE
-	IfAuthName=xxx
-	IfAuthPass=yyy
-	AuthRetries=0
-	IfCallbackEnabled=FALSE
-	CallbackTimeout=0
-	IpAddrFromServer=TRUE
-	IpDNSAddrFromServer=TRUE
-	EnableIPHeaderComp=FALSE
-	EnableLCPExtension=FALSE
-	DisablePlainTextAuth=FALSE
-	EnableSWComp=FALSE
-	BearerService=0
-	BearerProtocol=UNSPECIFIED
-	RlpVersion=0
-	IwfToMs=0
-	MsToIwf=0
-	AckTimer=0
-	RetransmissionAttempts=0
-	ResequencePeriod=0
-	V42Compression=0
-	V42Codewords=0
-	V42MaxLength=0
-	Asymmetry=0
-	UserInitUpgrade=FALSE
-	UseEdge=FALSE
-	FIELD_COUNT=34
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 4
-	Name=ISP02
-	Description=PlaceHolder for ISP02
-	Type=INTERNETONLY
-	DialResolution=TRUE
-	UseLoginScript=FALSE
-	PromptForLogin=FALSE
-	DisplayPCT=FALSE
-	IfNetworks=ip
-	IfPromptForAuth=TRUE
-	IfAuthName=xxx
-	IfAuthPass=yyy
-	AuthRetries=0
-	IfCallbackEnabled=FALSE
-	CallbackTimeout=0
-	IpAddrFromServer=TRUE
-	IpDNSAddrFromServer=TRUE
-	EnableIPHeaderComp=FALSE
-	EnableLCPExtension=FALSE
-	DisablePlainTextAuth=FALSE
-	EnableSWComp=FALSE
-	BearerService=0
-	BearerProtocol=UNSPECIFIED
-	RlpVersion=0
-	IwfToMs=0
-	MsToIwf=0
-	AckTimer=0
-	RetransmissionAttempts=0
-	ResequencePeriod=0
-	V42Compression=0
-	V42Codewords=0
-	V42MaxLength=0
-	Asymmetry=0
-	UserInitUpgrade=FALSE
-	UseEdge=FALSE
-	FIELD_COUNT=34
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 5
-	Name=ISP03
-	Description=PlaceHolder for ISP03
-	Type=INTERNETONLY
-	DialResolution=TRUE
-	UseLoginScript=FALSE
-	PromptForLogin=FALSE
-	DisplayPCT=FALSE
-	IfNetworks=ip
-	IfPromptForAuth=TRUE
-	IfAuthName=xxx
-	IfAuthPass=yyy
-	AuthRetries=0
-	IfCallbackEnabled=FALSE
-	CallbackTimeout=0
-	IpAddrFromServer=TRUE
-	IpDNSAddrFromServer=TRUE
-	EnableIPHeaderComp=FALSE
-	EnableLCPExtension=FALSE
-	DisablePlainTextAuth=FALSE
-	EnableSWComp=FALSE
-	BearerService=0
-	BearerProtocol=UNSPECIFIED
-	RlpVersion=0
-	IwfToMs=0
-	MsToIwf=0
-	AckTimer=0
-	RetransmissionAttempts=0
-	ResequencePeriod=0
-	V42Compression=0
-	V42Codewords=0
-	V42MaxLength=0
-	Asymmetry=0
-	UserInitUpgrade=FALSE
-	UseEdge=FALSE
-	FIELD_COUNT=34
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 6
-	Name=ISP04
-	Description=PlaceHolder for ISP04
-	Type=INTERNETONLY
-	DialResolution=TRUE
-	UseLoginScript=FALSE
-	PromptForLogin=FALSE
-	DisplayPCT=FALSE
-	IfNetworks=ip
-	IfPromptForAuth=TRUE
-	IfAuthName=xxx
-	IfAuthPass=yyy
-	AuthRetries=0
-	IfCallbackEnabled=FALSE
-	CallbackTimeout=0
-	IpAddrFromServer=TRUE
-	IpDNSAddrFromServer=TRUE
-	EnableIPHeaderComp=FALSE
-	EnableLCPExtension=FALSE
-	DisablePlainTextAuth=FALSE
-	EnableSWComp=FALSE
-	BearerService=0
-	BearerProtocol=UNSPECIFIED
-	RlpVersion=0
-	IwfToMs=0
-	MsToIwf=0
-	AckTimer=0
-	RetransmissionAttempts=0
-	ResequencePeriod=0
-	V42Compression=0
-	V42Codewords=0
-	V42MaxLength=0
-	Asymmetry=0
-	UserInitUpgrade=FALSE
-	UseEdge=FALSE
-	FIELD_COUNT=34
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 7
-	Name=ISP05
-	Description=PlaceHolder for ISP05
-	Type=INTERNETONLY
-	DialResolution=TRUE
-	UseLoginScript=FALSE
-	PromptForLogin=FALSE
-	DisplayPCT=FALSE
-	IfNetworks=ip
-	IfPromptForAuth=TRUE
-	IfAuthName=xxx
-	IfAuthPass=yyy
-	AuthRetries=0
-	IfCallbackEnabled=FALSE
-	CallbackTimeout=0
-	IpAddrFromServer=TRUE
-	IpDNSAddrFromServer=TRUE
-	EnableIPHeaderComp=FALSE
-	EnableLCPExtension=FALSE
-	DisablePlainTextAuth=FALSE
-	EnableSWComp=FALSE
-	BearerService=0
-	BearerProtocol=UNSPECIFIED
-	RlpVersion=0
-	IwfToMs=0
-	MsToIwf=0
-	AckTimer=0
-	RetransmissionAttempts=0
-	ResequencePeriod=0
-	V42Compression=0
-	V42Codewords=0
-	V42MaxLength=0
-	Asymmetry=0
-	UserInitUpgrade=FALSE
-	UseEdge=FALSE
-	FIELD_COUNT=34
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 8
-	Name=mRouterDialOutIsp
-	Description=mRouterDialOutIsp
-	Type=INTERNETONLY
-	DialResolution=TRUE
-	UseLoginScript=FALSE
-	PromptForLogin=FALSE
-	DisplayPCT=FALSE
-	IfNetworks=ip
-	IfPromptForAuth=FALSE
-	IfAuthName=IfAuthPass=
-	IfAuthPass=AuthRetries=0
-	AuthRetries=0
-	IfCallbackEnabled=FALSE
-	CallbackTimeout=0
-	IpAddrFromServer=TRUE
-	IpDNSAddrFromServer=TRUE
-	EnableIPHeaderComp=FALSE
-	EnableLCPExtension=FALSE
-	DisablePlainTextAuth=FALSE
-	EnableSWComp=FALSE
-	BearerService=0
-	BearerProtocol=UNSPECIFIED
-	RlpVersion=0
-	IwfToMs=0
-	MsToIwf=0
-	AckTimer=0
-	RetransmissionAttempts=0
-	ResequencePeriod=0
-	V42Compression=0
-	V42Codewords=0
-	V42MaxLength=0
-	Asymmetry=0
-	UserInitUpgrade=FALSE
-	UseEdge=FALSE
-	FIELD_COUNT=34
-END_ADD
-
-
-############################################################
-## DialInISP
-## 
-[DialInISP]
-ADD_TEMPLATE
-	Name=Default Dial In ISP
-	UseLoginScript=FALSE
-	IpAddrFromServer=TRUE
-	IpDNSAddrFromServer=TRUE
-	EnableIPHeaderComp=FALSE
-	EnableLCPExtension=FALSE
-	DisablePlainTextAuth=FALSE
-	EnableSWComp=FALSE
-	UseEdge=FALSE
-	FIELD_COUNT=9
-END_TEMPLATE
-
-ADD_SECTION
-# COMMDB_ID = 2
-	Name=Dial In ISP01
-	UseLoginScript=FALSE
-	IpAddrFromServer=TRUE
-	IpDNSAddrFromServer=TRUE
-	EnableIPHeaderComp=FALSE
-	EnableLCPExtension=FALSE
-	DisablePlainTextAuth=FALSE
-	EnableSWComp=FALSE
-	UseEdge=FALSE
-	FIELD_COUNT=9
-END_ADD
-
-
-############################################################
-## OutgoingGPRS
-## 
-[OutgoingGPRS]
-ADD_SECTION
-# COMMDB_ID = 1
-	Name=GPRS01
-	APN=gprs01APNPlaceHolder
-	PDPType=IPV4
-	ReqPrecedence=0
-	ReqDelay=0
-	ReqReliability=0
-	ReqPeakThroughput=0
-	ReqMeanThroughput=0
-	MinPrecedence=0
-	MinDelay=0
-	MinReliability=0
-	MinPeakThroughput=0
-	MinMeanThroughput=0
-	DataCompression=FALSE
-	HeaderCompression=FALSE
-	GprsUseEdge=FALSE
-	AnonymousAccess=FALSE
-	IfNetworks=ip
-	IfPromptForAuth=FALSE
-	AuthRetries=1
-	IpDNSAddrFromServer=FALSE
-	EnableLCPExtension=FALSE
-	DisablePlainTextAuth=FALSE
-	IpAddrFromServer=TRUE
-	GprsAccessPointType=0
-	QosWarningTimeout=0
-	FIELD_COUNT=26
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 2
-	Name=GPRS02
-	APN=gprs02APNPlaceHolder
-	PDPType=IPV4
-	ReqPrecedence=0
-	ReqDelay=0
-	ReqReliability=0
-	ReqPeakThroughput=0
-	ReqMeanThroughput=0
-	MinPrecedence=0
-	MinDelay=0
-	MinReliability=0
-	MinPeakThroughput=0
-	MinMeanThroughput=0
-	DataCompression=FALSE
-	HeaderCompression=FALSE
-	GprsUseEdge=FALSE
-	AnonymousAccess=FALSE
-	IfNetworks=ip
-	IfPromptForAuth=FALSE
-	AuthRetries=1
-	IpDNSAddrFromServer=FALSE
-	EnableLCPExtension=FALSE
-	DisablePlainTextAuth=FALSE
-	IpAddrFromServer=TRUE
-	GprsAccessPointType=0
-	QosWarningTimeout=0
-	FIELD_COUNT=26
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 3
-	Name=GPRS03
-	APN=gprs03APNPlaceHolder
-	PDPType=IPV4
-	ReqPrecedence=0
-	ReqDelay=0
-	ReqReliability=0
-	ReqPeakThroughput=0
-	ReqMeanThroughput=0
-	MinPrecedence=0
-	MinDelay=0
-	MinReliability=0
-	MinPeakThroughput=0
-	MinMeanThroughput=0
-	DataCompression=FALSE
-	HeaderCompression=FALSE
-	GprsUseEdge=FALSE
-	AnonymousAccess=FALSE
-	IfNetworks=ip
-	IfPromptForAuth=FALSE
-	AuthRetries=1
-	IpDNSAddrFromServer=FALSE
-	EnableLCPExtension=FALSE
-	DisablePlainTextAuth=FALSE
-	IpAddrFromServer=TRUE
-	GprsAccessPointType=0
-	QosWarningTimeout=0
-	FIELD_COUNT=26
-END_ADD
-
-
-############################################################
-## IncomingGPRS
-## 
-[IncomingGPRS]
-ADD_SECTION
-# COMMDB_ID = 1
-	Name=Incoming GPRS Settings PlaceHolder
-	APN=Test
-	PDPType=IPV4
-	ReqPrecedence=1
-	ReqDelay=1
-	ReqReliability=1
-	ReqPeakThroughput=1
-	ReqMeanThroughput=1
-	MinPrecedence=1
-	MinDelay=1
-	MinReliability=1
-	MinPeakThroughput=1
-	MinMeanThroughput=1
-	DataCompression=FALSE
-	HeaderCompression=FALSE
-	GprsUseEdge=FALSE
-	AnonymousAccess=FALSE
-	IfNetworks=ip
-	IfPromptForAuth=FALSE
-	IfAuthName=RasUser
-	IfAuthPass=pass
-	AuthRetries=1
-	IpDNSAddrFromServer=TRUE
-	IpNameServer1=0.0.0.0
-	IpNameServer2=0.0.0.0
-	EnableLCPExtension=FALSE
-	DisablePlainTextAuth=FALSE
-	PDPAddress=0.0.0.0
-	IpAddrFromServer=TRUE
-	FIELD_COUNT=29
-END_ADD
-
-
-############################################################
-## DefaultGPRS
-## 
-[DefaultGPRS]
-ADD_SECTION
-# COMMDB_ID = 1
-	Name=Dummy Default GPRS Settings
-	Usage=1
-	APN=Access point name
-	PDPType=IPV6
-	PDPAddress=www.wid.com
-	Precedence=1
-	Delay=1
-	Reliability=1
-	PeakThroughput=1
-	MeanThroughput=1
-	MinPrecedence=1
-	MinDelay=1
-	MinReliability=1
-	MinPeakThroughput=1
-	MinMeanThroughput=1
-	DataCompression=TRUE
-	HeaderCompression=TRUE
-	GprsUseEdge=FALSE
-	AnonymousAccess=TRUE
-	FIELD_COUNT=19
-END_ADD
-
-
-############################################################
-## CDMA2000PacketServiceTable
-## 
-[CDMA2000PacketServiceTable]
-ADD_SECTION
-# COMMDB_ID = 1
-	Name=test name cdma2000
-	IwfName=Test2000
-	ServiceOption=HIGHSPEEDCDMA2000DATA
-	PdpType=IPV4
-	ReqFwdPriority=PRIORITY04
-	ReqRevPriority=PRIORITY04
-	ReqFwdBitrate=32KBPS
-	ReqRevBitrate=32KBPS
-	ReqFwdLoss=LOSS1
-	ReqRevLoss=LOSS1
-	ReqFwdMaxdelay=40MS
-	ReqRevMaxdelay=40MS
-	MinFwdBitrate=32KBPS
-	MinRevBitrate=32KBPS
-	AccptFwdLoss=LOSS2
-	AccptRevLoss=LOSS2
-	AccptFwdMaxdelay=120MS
-	AccptRevMaxdelay=120MS
-	EnableIPHeaderComp=FALSE
-	AnonymousAccess=FALSE
-	IfNetworks=ip
-	IfPromptForAuth=FALSE
-	IfAuthName=RasUser
-	IfAuthPass=pass
-	AuthRetries=1
-	IpNetMask=255.255.255.0
-	IpGateway=10.0.0.1
-	IpAddrFromServer=TRUE
-	IpDNSAddrFromServer=TRUE
-	EnableLCPExtension=TRUE
-	DisablePlainTextAuth=TRUE
-	ApType=2
-	QosWarningTimeout=1000000
-	RlpMode=TRANSPARENT
-	CDMAMobileIP=FALSE
-	CDMAMobileIPTimeout=10000000
-	CDMANaiType=0
-	FIELD_COUNT=37
-END_ADD
-
-
-############################################################
-## DefaultCDMA2000SettingsTable
-## 
-[DefaultCDMA2000SettingsTable]
-
-############################################################
-## LANService
-## 
-[LANService]
-ADD_SECTION
-# COMMDB_ID = 1
-	Name=Ethernet
-	IfNetworks=ip,ip6
-	IpNetMask=255.255.255.0
-	#IpGateway=194.72.6.1
-	IpAddrFromServer=FALSE
-	IpAddr=169.254.172.4
-	IpDNSAddrFromServer=FALSE
-	#IpNameServer1=194.72.6.51
-	#IpNameServer2=194.72.6.52
-	#FIELD_COUNT=9
-	FIELD_COUNT=6
-END_ADD
-
-
-############################################################
-## IAP
-## 
-[IAP]
-ADD_SECTION
-# COMMDB_ID = 1
-	Name=NT RAS with Null Modem
-	IAPService=2
-	IAPServiceType=DialOutISP
-	IAPBearer=2
-	IAPBearerType=ModemBearer
-	IAPNetwork=1
-	IAPNetworkWeighting=0
-	Location=2
-	FIELD_COUNT=8
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 2
-	Name=CSD IAP PlaceHolder01
-	IAPService=3
-	IAPServiceType=DialOutISP
-	IAPBearer=2
-	IAPBearerType=ModemBearer
-	IAPNetwork=1
-	IAPNetworkWeighting=0
-	Location=2
-	FIELD_COUNT=8
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 3
-	Name=CSD IAP PlaceHolder02
-	IAPService=4
-	IAPServiceType=DialOutISP
-	IAPBearer=2
-	IAPBearerType=ModemBearer
-	IAPNetwork=1
-	IAPNetworkWeighting=0
-	Location=2
-	FIELD_COUNT=8
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 4
-	Name=GPRS IAP PlaceHolder01
-	IAPService=1
-	IAPServiceType=OutgoingGPRS
-	IAPBearer=8
-	IAPBearerType=ModemBearer
-	IAPNetwork=1
-	IAPNetworkWeighting=0
-	Location=4
-	FIELD_COUNT=8
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 5
-	Name=GPRS IAP PlaceHolder02
-	IAPService=2
-	IAPServiceType=OutgoingGPRS
-	IAPBearer=8
-	IAPBearerType=ModemBearer
-	IAPNetwork=1
-	IAPNetworkWeighting=0
-	Location=4
-	FIELD_COUNT=8
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 6
-	Name=mRouter Rs232
-	IAPService=8
-	IAPServiceType=DialOutISP
-	IAPBearer=12
-	IAPBearerType=ModemBearer
-	IAPNetwork=2
-	IAPNetworkWeighting=0
-	Location=2
-	FIELD_COUNT=8
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 7
-	Name=mRouter Ir
-	IAPService=8
-	IAPServiceType=DialOutISP
-	IAPBearer=13
-	IAPBearerType=ModemBearer
-	IAPNetwork=2
-	IAPNetworkWeighting=0
-	Location=2
-	FIELD_COUNT=8
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 8
-	Name=mRouter BT
-	IAPService=8
-	IAPServiceType=DialOutISP
-	IAPBearer=14
-	IAPBearerType=ModemBearer
-	IAPNetwork=2
-	IAPNetworkWeighting=0
-	Location=2
-	FIELD_COUNT=8
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 9
-	Name=mRouter USB
-	IAPService=8
-	IAPServiceType=DialOutISP
-	IAPBearer=15
-	IAPBearerType=ModemBearer
-	IAPNetwork=2
-	IAPNetworkWeighting=0
-	Location=2
-	FIELD_COUNT=8
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 10
-	Name=mRouter Wins
-	IAPService=8
-	IAPServiceType=DialOutISP
-	IAPBearer=11
-	IAPBearerType=ModemBearer
-	IAPNetwork=2
-	IAPNetworkWeighting=0
-	Location=2
-	FIELD_COUNT=8
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 11
-	Name=VPN IAP
-	IAPService=2
-	IAPServiceType=VpnService
-	IAPBearer=2
-	IAPBearerType=VirtualBearer
-	IAPNetwork=1
-	IAPNetworkWeighting=0
-	Location=2
-	FIELD_COUNT=8
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 12
-	Name=EKA1 Assabet on-board ethernet
-	IAPService=1
-	IAPServiceType=LANService
-	IAPBearer=1
-	IAPBearerType=LANBearer
-	IAPNetwork=1
-	IAPNetworkWeighting=0
-	Location=2
-	FIELD_COUNT=8
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 13
-	Name=EKA2 Assabet on-board ethernet
-	IAPService=1
-	IAPServiceType=LANService
-	IAPBearer=2
-	IAPBearerType=LANBearer
-	IAPNetwork=1
-	IAPNetworkWeighting=0
-	Location=2
-	FIELD_COUNT=8
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 14
-	Name=EKA1 emulator ethernet
-	IAPService=1
-	IAPServiceType=LANService
-	IAPBearer=3
-	IAPBearerType=LANBearer
-	IAPNetwork=1
-	IAPNetworkWeighting=0
-	Location=2
-	FIELD_COUNT=8
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 15
-	Name=EKA2 emulator ethernet
-	IAPService=1
-	IAPServiceType=LANService
-	IAPBearer=4
-	IAPBearerType=LANBearer
-	IAPNetwork=1
-	IAPNetworkWeighting=0
-	Location=2
-	FIELD_COUNT=8
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 16
-	Name=EKA2 SYBORG on-board ethernet
-	IAPService=1
-	IAPServiceType=LANService
-	IAPBearer=5
-	IAPBearerType=LANBearer
-	IAPNetwork=1
-	IAPNetworkWeighting=0
-	Location=2
-	FIELD_COUNT=8
-END_ADD
-
-
-############################################################
-## ConnectionPreferences
-## 
-[ConnectionPreferences]
-ADD_SECTION
-	Ranking=0
-	Direction=OUTGOING
-	DialogPref=PROMPT
-	BearerSet=CSD
-	IAP=1
-	FIELD_COUNT=5
-END_ADD
-
-ADD_SECTION
-	Ranking=1
-	Direction=OUTGOING
-	DialogPref=PROMPT
-	BearerSet=CSD
-	IAP=1
-	FIELD_COUNT=5
-END_ADD
-
-
-############################################################
-## BTDeviceTable
-## 
-[BTDeviceTable]
-
-############################################################
-## BTSecurityTable
-## 
-[BTSecurityTable]
-
-############################################################
-## BTDefaultTable
-## 
-[BTDefaultTable]
-
-############################################################
-## Proxies
-## 
-[Proxies]
-ADD_SECTION
-# COMMDB_ID = 1
-	ISP=2
-	ProxyServiceType=DialOutISP
-	UseProxyServer=TRUE
-	ProxyServerName=www.dummyproxy.com
-	ProtocolName=http
-	PortNumber=80
-	Exceptions=www.dummyproxy.com/exception
-	FIELD_COUNT=7
-END_ADD
-
-
-############################################################
-## AgentLookup
-## 
-[AgentLookup]
-
-############################################################
-## WAPAccessPoint
-## 
-[WAPAccessPoint]
-ADD_TEMPLATE
-	Name=Default Dial In ISP
-	CurrentBearer=WAPIPBearer
-	FIELD_COUNT=2
-END_TEMPLATE
-
-ADD_SECTION
-# COMMDB_ID = 2
-	Name=Dummy WAP Settings
-	CurrentBearer=WAPIPBearer
-	StartPage=www.wapstart.com
-	FIELD_COUNT=3
-END_ADD
-
-
-############################################################
-## WAPIPBearer
-## 
-[WAPIPBearer]
-ADD_TEMPLATE
-	AccessPointId=0
-	IAP=0
-	WSPOption=CONNECTIONLESS
-	Security=FALSE
-	ProxyPortNumber=0
-	FIELD_COUNT=5
-END_TEMPLATE
-
-ADD_SECTION
-# COMMDB_ID = 2
-	AccessPointId=2
-	GatewayAddress=www.wapgateway.com
-	IAP=2
-	WSPOption=CONNECTIONORIENTED
-	Security=FALSE
-	ProxyPortNumber=1
-	FIELD_COUNT=6
-END_ADD
-
-
-############################################################
-## WAPSMSBearer
-## 
-[WAPSMSBearer]
-ADD_TEMPLATE
-	AccessPointId=0
-	WSPOption=CONNECTIONLESS
-	Security=FALSE
-	FIELD_COUNT=3
-END_TEMPLATE
-
-ADD_SECTION
-# COMMDB_ID = 2
-	AccessPointId=2
-	GatewayAddress=+4412345678901
-	ServiceCentreAddress=+442071234567
-	WSPOption=CONNECTIONORIENTED
-	Security=FALSE
-	FIELD_COUNT=5
-END_ADD
-
-
-############################################################
-## SecureSocketTable
-## 
-[SecureSocketTable]
-ADD_SECTION
-# COMMDB_ID = 1
-	ProtocolName=ssl3.0
-	ProtoLibrary=ssladaptor.dll
-	FIELD_COUNT=2
-END_ADD
-
-ADD_SECTION
-# COMMDB_ID = 2
-	ProtocolName=tls1.0
-	ProtoLibrary=ssladaptor.dll
-	FIELD_COUNT=2
-END_ADD
-
-
-############################################################
-## BTPersistTable
-## 
-[BTPersistTable]
-############################################################
-## ERROR
-## AccessTypeTable
-############################################################
-############################################################
-## ERROR
-## Error opening table
-############################################################
-############################################################
-## ERROR
-## Unable to find the specified object or missing required field values
-############################################################
-
-############################################################
-## VirtualBearer
-## 
-[VirtualBearer]
-ADD_TEMPLATE
-	Name=Default VPN Bearer
-	Agent=VPN.agt
-	IfName=VPN.nif
-	LastSocketActivityTimeout=180
-	LastSessionClosedTimeout=30
-	LastSocketClosedTimeout=60
-	FIELD_COUNT=6
-END_TEMPLATE
-
-ADD_SECTION
-# COMMDB_ID = 2
-	Name=VPN Bearer1
-	Agent=ntras.agt
-	IfName=ppp.nif
-	LastSocketActivityTimeout=-1
-	LastSessionClosedTimeout=-1
-	LastSocketClosedTimeout=-1
-	FIELD_COUNT=6
-END_ADD
-
-
-############################################################
-## VpnService
-## 
-[VpnService]
-ADD_TEMPLATE
-	Name=Default VPN
-	Policy=DefaultVPNpolicy
-	HomeIAP=1
-	HomeNetwork=0
-	FIELD_COUNT=4
-END_TEMPLATE
-
-ADD_SECTION
-# COMMDB_ID = 2
-	Name=VPN1
-	Policy=VPNpolicy1
-	HomeIAP=2
-	HomeNetwork=1
-	FIELD_COUNT=4
-END_ADD
-
--- a/baseport/src/cedar/generic/base/syborg/specific/syborg.cia	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +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:
-*
-*/
-
-#include <syborg_priv.h>
-
-//
-//	Timer Access Functions
-//
-
-// Set the starting count value for a timer
-EXPORT_C void __NAKED__ TSyborg::SetTimerLoad(TUint /*aTimerBase*/, TUint32 /*aValue*/)
-{
-  asm("str r1, [r0, #12]");
-  asm("bx lr");
-}
-
-// Read the load register (starting count value)
-EXPORT_C TUint __NAKED__ TSyborg::TimerLoad(TUint /*aTimerBase*/)
-{
-  asm("ldr r0, [r0, #12]");
-  asm("bx lr");
-}
-
-// Read the actual timer value
-EXPORT_C TUint __NAKED__ TSyborg::TimerValue(TUint /*aTimerBase*/)
-{
-	asm("ldr r0, [r0, #16]");
-    asm("bx lr");
-}
-
-// Clear the timer interrupt by writing a value to Timer x clear register
-// The written value doesn't matter as any value will clear the interrupt.
-EXPORT_C void __NAKED__ TSyborg::ClearTimerInt(TUint /*aTimerBase*/)
-{
-	asm("mov r1, #1");	
-	asm("str r1, [r0, #24]");
-    asm("bx lr");
-}
-
-//
-//Interrupt Controller Acces Functions
-//
-
-// Enable specified motherboard Int on either the PIC/SIC
-EXPORT_C void __NAKED__ TSyborg::EnableInt(TUint /*anId*/)
-{
-  asm("ldr r1, __KHwInt");
-  asm("str r0, [r1, #20]");
-  asm("bx lr");
-}
-
-// Disable specified motherboard Int on either the PIC/SIC
-EXPORT_C void __NAKED__ TSyborg::DisableInt(TUint /*anId*/)
-{
-  asm("ldr r1, __KHwInt");
-  asm("str r0, [r1, #16]");
-  asm("bx lr");
-	
-	asm("__KHwInt:");
-	asm(".word %a0" : : "i" (TInt)(KHwBaseSic));
-}
--- a/baseport/src/cedar/generic/base/syborg/specific/syborg.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,128 +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:
-*
-*/
-
-#include <syborg_priv.h>
-
-//#define DEBUG
-
-#ifdef DEBUG
-#define __DEBUG_PRINT(format...)    Kern::Printf(format)
-#else
-#define __DEBUG_PRINT(format...)    __KTRACE_OPT(KBOOT,Kern::Printf(format))
-#endif
-
-void TSyborg::Init3()
-{
-//  SetTimerMode(KHwBaseCounterTimer, ETimerModePeriodic); 
-//  EnableTimer(KHwBaseCounterTimer, EEnable);
-}
-
-EXPORT_C TBool TSyborg::IsTimerEnabled(TUint aTimerBase)
-{
-  __DEBUG_PRINT("TSyborg::IsTimerEnabled");
-  return ReadReg(aTimerBase, 1);
-}
-
-EXPORT_C void TSyborg::EnableTimerInterrupt(TUint aTimerBase)
-{
-  __DEBUG_PRINT("TSyborg::EnableTimerInterrupt");
-  WriteReg(aTimerBase,5,1);
-}
-
-EXPORT_C void TSyborg::DisableTimerInterrupt(TUint aTimerBase)
-{
-  __DEBUG_PRINT("TSyborg::DisableTimerInterrupt");
-  WriteReg(aTimerBase,5,0);
-}
-
-EXPORT_C void TSyborg::EnableTimer(TUint aTimerBase, TState aState)
-{
-  __DEBUG_PRINT("TSyborg::EnableTimer");
-  //  TUint32 mode = ReadReg(aTimerBase, 1);
-  if (aState == EEnable)
-	WriteReg(aTimerBase, 1, 1);
-  else
-	WriteReg(aTimerBase, 1, 0);
-}
-
-EXPORT_C TSyborg::TTimerMode TSyborg::TimerMode(TUint aTimerBase)
-{
-  __DEBUG_PRINT("TSyborg::TimerMode");
-  if (ReadReg(aTimerBase, 2))
-	return ETimerModeOneShot;
-  else
-	return ETimerModePeriodic;
-}
-
-EXPORT_C void TSyborg::SetTimerMode(TUint aTimerBase, TTimerMode aValue)
-{
-  __DEBUG_PRINT("TSyborg::SetTimerMode");
-  if (aValue == ETimerModePeriodic)
-	WriteReg(aTimerBase, 2, 0);
-  else
-	WriteReg(aTimerBase, 2, 1);
-}
-
-// Return base address of debug UART
-// (as selected in obey file or with eshell debugport command)
-EXPORT_C TUint32 TSyborg::DebugPortAddr()
-{
-	// Defaults to UART 0
-    switch (Kern::SuperPage().iDebugPort)
-    {
-        case KNullDebugPort:        // debug supressed
-            return (TUint32)KNullDebugPort;
-        case 1:
-            return KHwBaseUart1;
-        case 2:
-            return KHwBaseUart2;
-        case 3:
-            return KHwBaseUart3;
-        case 0:
-        default:
-            return KHwBaseUart0;
-    }
-}
-
-EXPORT_C void TSyborg::MarkDebugPortOff()
-{
-	TheVariant.iDebugPortBase = 0;
-}
-
-EXPORT_C TInt TSyborg::VideoRamSize()
-{
-  return 4*640*480;
-}
-
-// !@! 
-EXPORT_C TPhysAddr TSyborg::VideoRamPhys()
-{
-#if 0
-  __KTRACE_OPT(KEXTENSION,Kern::Printf("TSyborg::VideoRamPhys: VideoRamPhys=0x%x", Syborg::VideoRamPhys));
-#endif
-  return 0;
-
-}
-
-EXPORT_C TPhysAddr TSyborg::VideoRamPhysSecure()
-{
-#if 0
-  return Syborg::VideoRamPhysSecure;
-#endif
-  return 0;
-}
-
--- a/baseport/src/cedar/generic/base/syborg/specific/syborg.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +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:
-*
-*/
-
-#ifndef __SYBORG_H__
-#define __SYBORG_H__
-
-#include <e32const.h>
-#include <platform.h>
-#include <e32hal.h>
-#include <assp.h>
-#include <kern_priv.h>
-#include <mmboot.h>     // KPrimaryIOBase
-
-#ifndef __SYBORG__
-#define __SYBORG__
-#endif
-
-const TUint KHwBasePeripherals  = KPrimaryIOBase;       
-const TUint KHwLinSeparation	= 0x1000;
-
-const TUint KHwBaseSic				= KHwBasePeripherals + 0x00*KHwLinSeparation;
-// intended for use as a free-running counter. Reading the value register of a free-running syborg counter returns a microsec value
-const TUint KHwBaseRtc				= KHwBasePeripherals + 0x01*KHwLinSeparation;
-// intended for use as an alarm generating timer with a resolution of 1 microsecond
-const TUint KHwBaseCounterTimer			= KHwBasePeripherals + 0x02*KHwLinSeparation;
-const TUint KHwBaseKmiKeyboard			= KHwBasePeripherals + 0x03*KHwLinSeparation;
-const TUint KHwBaseKmiMouse			= KHwBasePeripherals + 0x04*KHwLinSeparation;
-const TUint KHwBaseKmiPointer			= KHwBasePeripherals + 0x04*KHwLinSeparation;
-const TUint KHwBaseClcd				= KHwBasePeripherals + 0x05*KHwLinSeparation;
-const TUint KHwBaseUart0			= KHwBasePeripherals + 0x06*KHwLinSeparation;
-const TUint KHwBaseUart1			= KHwBasePeripherals + 0x07*KHwLinSeparation;
-const TUint KHwBaseUart2			= KHwBasePeripherals + 0x08*KHwLinSeparation;
-const TUint KHwBaseUart3			= KHwBasePeripherals + 0x09*KHwLinSeparation;
-const TUint KHwSVPHostFileSystemDevice		= KHwBasePeripherals + 0x0a*KHwLinSeparation;
-const TUint KHwSVPSnapDevice			= KHwBasePeripherals + 0x0b*KHwLinSeparation;
-const TUint KHwSVPNetDevice			= KHwBasePeripherals + 0x0c*KHwLinSeparation;
-const TUint KHwSVPNandDevice			= KHwBasePeripherals + 0x0d*KHwLinSeparation;
-const TUint KHwSVPAudioDevice			= KHwBasePeripherals + 0x0e*KHwLinSeparation;
-const TUint KHwSVPPlatformDevice		= KHwBasePeripherals + 0x0f*KHwLinSeparation;
-
-	
-enum TSyborgInterruptId
-{
-  EIntTimer0 = 0,     /* RTC -- not used */
-  EIntTimer1 = 1,     /* Interval Timer */
-  EIntKeyboard = 2,
-    EIntPointer = 3,
-  //  EIntMouse = 3,
-  EIntFb = 4,
-  EIntSerial0 = 5,
-  EIntSerial1 = 6,
-  EIntSerial2 = 7,
-  EIntSerial3 = 8
-};
-
-// Timer Mode
-const TUint KPeriodic			= 0x0;
-const TUint KOneShot		    = 0x1;
-
-class TSyborg
-{
-public:
-	// generic enums
-	enum TState
-	{
-		EEnable,
-		EDisable
-	};
-	enum TLock
-	{
-		ELocked=0,
-		EUnlocked=0xA05F
-	};
-    enum TTimerMode
-	{
-	  ETimerModePeriodic=KPeriodic,
-	  ETimerModeOneShot=KOneShot,
-	};
-public:
-    // Initialisation of class
-	static void Init3();
-
-    // Accessor methods for timers 
-	IMPORT_C static void EnableTimerInterrupt(TUint aTimerBase);                    // Enable the timer interrupt
-	IMPORT_C static void DisableTimerInterrupt(TUint aTimerBase);                   // Disable the timer interrupt
-    IMPORT_C static void SetTimerLoad(TUint aTimerBase, TUint32 aValue);			// Set the starting count value for a timer
-    IMPORT_C static TUint TimerLoad(TUint aTimerBase);							    // Read the load register (starting count value)
-    IMPORT_C static TUint TimerValue(TUint aTimerBase);							    // Read the actual timer value
-    IMPORT_C static void ClearTimerInt(TUint aTimerBase); 						    // Clear the timer interrupt
-    IMPORT_C static TBool IsTimerEnabled(TUint aTimerBase);						    // Enquire as to whether the timer is enabled
-    IMPORT_C static void EnableTimer(TUint aTimerBase, TState aState);			    // Enable/disable the timer (start/stop it running)
-    IMPORT_C static TTimerMode TimerMode(TUint aTimerBase);						    // Find out what mode the timer is running in
-    IMPORT_C static void SetTimerMode(TUint aTimerBase, TTimerMode aValue);		    // Set the timer mode (periodic or free running)
-	
-    // Accessor methods for interrupts
-    IMPORT_C static void  EnableInt(TUint anId);					
-    IMPORT_C static void  DisableInt(TUint anId);					
-        
-	IMPORT_C static TInt VideoRamSize();
-	IMPORT_C static TPhysAddr VideoRamPhys();
-	IMPORT_C static TPhysAddr VideoRamPhysSecure();
-
-	// Debug Port Specific
-	IMPORT_C static TUint32 DebugPortAddr();
-	IMPORT_C static void MarkDebugPortOff();
-};
-
-static inline TUint32 ReadReg(TUint32 base, TUint8 aReg)
-{
-  return *(volatile TUint32 *)(base + (aReg << 2));
-}
-
-static inline void WriteReg(TUint32 base, TUint8 aReg, TUint32 aVal)
-{
-  *(volatile TUint32*)(base + (aReg<<2)) = aVal;
-}
-
-#endif  // __SYBORG_H__
--- a/baseport/src/cedar/generic/base/syborg/specific/syborg_priv.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +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:
-*
-*/
-
-#ifndef __SYBORG_PRIV_H__
-#define __SYBORG_PRIV_H__
-
-#include <e32const.h>
-#include <arm.h>
-#include <assp.h>
-#include <syborg.h>
-
-#define	_LOCK		TInt irq=NKern::DisableAllInterrupts();
-#define	_UNLOCK		NKern::RestoreInterrupts(irq);
-
-const TUint32 K1000HzTickMatchLoad = 1000;
-const TInt KNumSyborgInts = 64;
-
-class SyborgInterrupt : public Interrupt
-{
-public:
-	static void IrqDispatch();
-	static void FiqDispatch();
-	static void DisableAndClearAll();
-	static void Init1();
-	static void Init3();
-	static void Spurious(TAny* anId);
-    static void MsTimerTick(TAny* aPtr);
-
-	static SInterruptHandler Handlers[KNumSyborgInts];
-};
-
-class Syborg : public Asic
-{
-public:
-	IMPORT_C Syborg();
-
-public:
-	// Initialisation
-	IMPORT_C virtual TMachineStartupType StartupReason();
-	IMPORT_C virtual void Init1();
-	IMPORT_C virtual void Init3();
-
-	// Power management
-	IMPORT_C virtual void Idle();
-
-	IMPORT_C void DebugInit();
-	IMPORT_C virtual void DebugOutput(TUint aChar);
-
-	// Timing
-	IMPORT_C virtual TInt MsTickPeriod();
-	IMPORT_C virtual TInt SystemTimeInSecondsFrom2000(TInt& aTime);
-	IMPORT_C virtual TInt SetSystemTimeInSecondsFrom2000(TInt aTime);
-	IMPORT_C virtual TUint32 NanoWaitCalibration();
-
-	// HAL
-	virtual TInt VariantHal(TInt aFunction, TAny* a1, TAny* a2);
-
-	// Machine configuration
-	virtual TPtr8 MachineConfiguration();
-
-	TUint32 iDebugPortBase;
-
-	static Syborg* Variant;
-	static TPhysAddr VideoRamPhys;
-	static TPhysAddr VideoRamPhysSecure;
-	NTimerQ* iTimerQ;
-};
-
-GLREF_D Syborg TheVariant;
-
-#endif  // __SYBORG_PRIV_H__
-
--- a/baseport/src/cedar/generic/base/syborg/specific/system.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +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:
-*
-*/
-
-#ifndef __SYSTEM_H__
-#define __SYSTEM_H__
-
-#ifndef __BOOTLOADER_VARIANTCONFIG_H__
-#include <syborg.h>
-#endif
-
-#define VARIANT_INTERFACE           TSyborg
-_LIT(KPddName,"Comm.SYBORG_SERIAL");
-
-#endif  // __SYSTEM_H__
--- a/baseport/src/cedar/generic/base/syborg/specific/system_priv.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +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:
-*
-*/
-
-#ifndef __SYSTEM_PRIV_H__
-#define __SYSTEM_PRIV_H__
-
-#include "system.h"
-#include <syborg_priv.h>
-
-#endif  // __SYSTEM_PRIV_H__
--- a/baseport/src/cedar/generic/base/syborg/specific/variantmediadef.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +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:
-*
-*/
-
-#ifndef __VARIANTMEDIADEF_H__
-#define __VARIANTMEDIADEF_H__
-
-// Variant parameters for IRAM Media Driver (MEDINT.PDD)
-#define IRAM_DRIVECOUNT 1
-#define IRAM_DRIVELIST  0       // C:
-#define IRAM_NUMMEDIA   1	
-#define IRAM_DRIVENAME "IRam"
-
-#endif  // __VARIANTMEDIADEF_H__
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/driver/stringops.c	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +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:
-*
-*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-		
-char * strchr (const char *p, int ch)
-	{
-	char c;
-
-	c = ch;
-	for (;; ++p) 
-		{
-		if (*p == c)
-			return ((char *)p);
-		if (*p == '\0')
-			return (char *)(0);
-		}
-	/* NOTREACHED */
-	}
-
-unsigned int strlen(const char *str)
-	{
-	const char *s;
-	for (s = str; *s; ++s)	{	}
-
-	return(s - str);
-	}
-
-int strcmp(const char *s1, const char *s2)
-	{
-	while (*s1 == *s2++)
-		if (*s1++ == 0)
-			return (0);
-	return (*(const unsigned char *)s1 - *(const unsigned char *)(s2 - 1));
-	}
-
-void * memchr(const void *s, int c, unsigned n)
-	{
-	if (n != 0) 
-		{
-		const unsigned char *p = s;
-		do 
-			{
-			if (*p++ == (unsigned char)c)
-				return ((void *)(p - 1));
-			} while (--n != 0);
-	
-		}
-	// Not found
-	return (void *)0;
-	}
-
-int memcmp(const void *s1, const void *s2, unsigned n)
-	{
-	if (n != 0) 
-		{
-		const unsigned char *p1 = s1, *p2 = s2;
-
-		do 
-			{
-			if (*p1++ != *p2++)
-				return (*--p1 - *--p2);
-			} while (--n != 0);
-		}
-	return (0);
-	}
-
-#ifdef __cplusplus
-}
-#endif
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/driver/svphostfsdriver.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,919 +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: Device driver for SVP Host file system access
-*
-*/
-
-#ifdef __WINS__
-#error - this driver cannot be built for emulation
-#endif
-
-#include <e32def.h>
-#include <e32cmn.h>
-#include <u32std.h>
-#include <kernel.h>
-#include <kern_priv.h>
-#include <arm.h>
-#include <cache.h>
-#include <nkern.h>
-#include <u32hal.h>
-
-#include <system.h>
-
-#include "rsvphostfsdriver.h"
-
-#include "libfdt.h"
-
-// Debug messages - uncomment define below
-//#define SVPDBG 
-#ifdef SVPDBG
-#define DP(format...) Kern::Printf(format)
-#else
-#define DP(format...)
-#endif
-		
-#define SVP_HOST_FS_DEVICE_ID  0xc51d0008
-#define SVP_PLATFORM_DEVICE_ID 0xc51d1000
-		
-class DSVPHostFsDriverFactory : public DLogicalDevice
-{
-public:
-
-	DSVPHostFsDriverFactory();
-	virtual TInt Install();
-	virtual void GetCaps(TDes8& aDes) const;
-	virtual TInt Create(DLogicalChannelBase*& aChannel);
-};
-
-class DSVPHostFsChannel : public DLogicalChannel
-{
-public:
-
-	DSVPHostFsChannel(DLogicalDevice* aLogicalDevice);
-	~DSVPHostFsChannel();
-
-	virtual TInt DoCreate(TInt aUnit, const TDesC* anInfo, const TVersion& aVer);	
-	virtual void HandleMsg(TMessageBase* aMsg);
-	
-protected:
-	virtual void DoCancel(TInt aReqNo);
-	virtual TInt DoRequest(TInt aReqNo, TRequestStatus* aStatus, TAny* a1, TAny* a2);
-	virtual TInt DoControl(TInt aFunction, TAny *a1, TAny *a2);
-	
-private:
-	TInt MkDir(TSVPHostFsMkDirInfo* aInfo);
-	TInt RmDir(TSVPHostFsRmDirInfo* aInfo);
-	TInt Delete(TSVPHostFsDeleteInfo* aInfo);
-	TInt Rename(TSVPHostFsRenameInfo* aInfo);
-	TInt Replace(TSVPHostFsReplaceInfo* aInfo);
-	TInt Entry(TSVPHostFsEntryInfo* aInfo);
-	TInt SetEntry(TSVPHostFsSetEntryInfo* aInfo);
-	TInt FileOpen(TSVPHostFsFileOpenInfo* aInfo);
-	TInt FileClose(TUint32 aDrive, TUint32 aHandle);
-	TInt FileRead(TSVPHostFsFileReadInfo* aInfo);
-	TInt FileWrite(TSVPHostFsFileWriteInfo* aInfo);
-	TInt FileSetSize(TSVPHostFsFileSetSizeInfo* aInfo);
-	TInt FileSetEntry(TSVPHostFsSetEntryInfo* aInfo);
-	TInt DirOpen(TSVPHostFsDirOpenInfo* aInfo);
-	TInt Flush(TUint32 aDrive);
-	TInt DirClose(TUint32 aDrive, TUint32 aHandle);
-	TInt DirRead(TSVPHostFsDirReadInfo* aInfo);
-
-	TInt GetID(TUint32 aDrive, TUint32 * aId);
-
-        TInt SetUpDrives();
-	TInt GetDriveMap(TAny * aMap);
-
-private:
-	DThread* iClientThread;
-	TDfcQue* iDFCQue;
-	TUint32 iDriveMap[DRIVE_MAP_SIZE] ; 
-
-};
-
-
-#define RET_IF_ERROR(v, e) { if ((v = (e)) != KErrNone) return v; }
-
-
-#define	EDeviceID	0
-#define	EOp		1
-#define ETreeStart	1
-#define	EResult		2
-#define	EArg0		3
-#define	EArg1		4
-#define	EArg2		5
-#define	EArg3		6
-
-static inline TUint32 SVPReadReg(TUint32 dev, TUint32 aReg)
-	{
-	DP("** ReadReg @ 0x%08x (%d)",dev,aReg);
-
-	return *(volatile TUint32 *)(dev + (aReg << 2));
-	}
-
-static inline void SVPWriteReg(TUint32 dev, TUint32 aReg, TUint32 aVal)
-	{
-	DP("** WriteReg @ 0x%08x (%d,%d)",dev,aReg,aVal);
-
-	*(volatile TUint32*)(dev + (aReg << 2)) = aVal;
-	}
-
-static inline void SVPInvoke(TUint32 dev, TUint32 aVal)
-	{
-	DP("** Invoke @ 0x%08x (%d)",dev,aVal);
-
-	*(TUint32*)(dev + (EOp << 2)) = aVal;
-	}
-
-/////////////////////////////////////////////////////////////////////////
-//
-// DSVPHostFsDriverFactory
-//
-/////////////////////////////////////////////////////////////////////////
-
-//
-// DSVPHostFsDriverFactory constructor
-//
-DSVPHostFsDriverFactory::DSVPHostFsDriverFactory()
-	{
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsDriverFactory::DSVPHostFsDriverFactory()");
-
-	iVersion = TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber);    
-	}
-
-//
-// DSVPHostFsDriverFactory::Create
-//
-TInt DSVPHostFsDriverFactory::Create(DLogicalChannelBase*& aChannel)
-	{
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsDriverFactory::Create()");
-
-	aChannel = new DSVPHostFsChannel(this);
-	
-	return aChannel ? KErrNone : KErrNoMemory;
-	}
-
-//
-// DSVPHostFsDriverFactory::Install
-//
-TInt DSVPHostFsDriverFactory::Install()
-	{
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsDriverFactory::Install()");
-
-	return(SetName(&KSVPHostFsDriverName));
-	}
-
-//
-// DSVPHostFsDriverFactory::Install
-//
-void DSVPHostFsDriverFactory::GetCaps(TDes8& aDes) const
-	{
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsDriverFactory::GetCaps()");
-
-	TCapsSVPHostFsDriver b;
-	b.iVersion = TVersion(KMajorVersionNumber, KMinorVersionNumber, KBuildVersionNumber);
-	aDes.FillZ(aDes.MaxLength());
-	aDes.Copy((TUint8 *)&b, Min(aDes.MaxLength(), sizeof(b)));
-	}
-
-
-/////////////////////////////////////////////////////////////////////////
-//
-// DSVPHostFsChannel implementation
-//
-/////////////////////////////////////////////////////////////////////////
-
-//
-// DSVPHostFsChannel constructor
-//
-DSVPHostFsChannel::DSVPHostFsChannel(DLogicalDevice* aLogicalDevice)
-	{
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DSVPHostFsChannel()");
-
-	iDevice = aLogicalDevice;
-	
-	iClientThread = &Kern::CurrentThread();
-	iClientThread->Open();
-	}
-
-//
-// DSVPHostFsChannel destructor
-//
-DSVPHostFsChannel::~DSVPHostFsChannel()
-	{
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::~DSVPHostFsChannel()");
-	Kern::SafeClose((DObject*&)iClientThread, NULL);
-	}
-
-//
-// DSVPHostFsChannel::DoCreate
-//
-TInt DSVPHostFsChannel::DoCreate(TInt /*aUnit*/, const TDesC* anInfo, const TVersion& aVer)
-	{
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DoCreate()");
-
-  	if (!Kern::QueryVersionSupported(TVersion(KMajorVersionNumber, KMinorVersionNumber, KBuildVersionNumber), aVer))
-		return KErrNotSupported; 
-  	
-		       
-	//Setup the driver for receiving client messages
-	SetDfcQ(Kern::DfcQue0());
-	iMsgQ.Receive();  	
-
-	SetUpDrives();
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DoCreate()- checking device");
-	TUint id = SVPReadReg(KHwSVPHostFileSystemDevice, EDeviceID);
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DoCreate()- checked device- 0x%08x -expected 0x%08x", 
-		id, SVP_HOST_FS_DEVICE_ID);
-	return id == SVP_HOST_FS_DEVICE_ID ? KErrNone :	KErrHardwareNotAvailable;
-	}
-
-TInt DSVPHostFsChannel::SetUpDrives()
-	{
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::SetUpDrives() @ 0x%08x", KHwSVPPlatformDevice) ;
-	TUint32 platId = SVPReadReg(KHwSVPPlatformDevice, EDeviceID); 
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::SetUpDrives()- checked device- 0x%08x -expected 0x%08x", 
-		platId, SVP_PLATFORM_DEVICE_ID);
-	if (platId != SVP_PLATFORM_DEVICE_ID) return KErrHardwareNotAvailable;
-
-	TUint32 * fdt = (TUint32 *)((char *)(SVPReadReg(KHwSVPPlatformDevice, ETreeStart) + KHwSVPPlatformDevice)); 
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::SetUpDrives()- device tree @ 0x%08x", fdt);
-
-	// Iteratate over the tree looking for "syborg,hostfs" nodes.
-	const char * compatible = "syborg,hostfs" ; 
-	int offset = fdt_node_offset_by_compatible(fdt, -1, compatible);
-	while (offset != -FDT_ERR_NOTFOUND) 
-		{
-		if (offset < 0)
-			{
-			DP("FDT: Node not found %d", offset) ;
-			return KErrHardwareNotAvailable	; 
-			}
-
-		int lenp1, lenp2 = 0; 
-		TUint32 * deviceAddressp = (TUint32 *)fdt_getprop(fdt,offset,"reg",&lenp1); 
-
-		if (!deviceAddressp)
-			{
-			DP("FDT format error: reg %d", lenp1);
-			return KErrHardwareNotAvailable	; 
-			}
-
-
-		TUint32 * driveNumberp = (TUint32 *)fdt_getprop(fdt,offset,"drive-number",&lenp2);
-		if (!driveNumberp)
-			{
-			DP("FDT format error: drive-number %d", lenp2);
-			return KErrHardwareNotAvailable	; 
-			}
-		TUint32 deviceAddressPhys = bswap_32(*deviceAddressp);
-
-#define PhysicalToLinear(addr) ((addr & (~(Epoc::LinearToPhysical(KPrimaryIOBase)))) | KPrimaryIOBase)
-	
-		TUint32 deviceAddressLin = PhysicalToLinear(deviceAddressPhys) ; 
-		TUint32 driveNumber = bswap_32(*driveNumberp) ;
-		DP("FDT: dev address phys 0x%08x lin 0x%08x len1 %d drive number %08x len2 %d", 
-			deviceAddressPhys, deviceAddressLin, lenp1, driveNumber, lenp2) ; 
-		TUint32 fsId = SVPReadReg(deviceAddressLin, EDeviceID) ; 
-		DP("FDT: dev id 0x%08x", fsId) ; 
-		if (fsId != SVP_HOST_FS_DEVICE_ID) return KErrHardwareNotAvailable ;
-
-		// we have a disagreement about the base number of the drives: 0 or 1?
-		iDriveMap[driveNumber-1] = deviceAddressLin ; 
-		offset = fdt_node_offset_by_compatible(fdt, offset, compatible);
-		}
-	return KErrNone;
-	}
-	
-//
-// DSVPHostFsChannel::DoCancel
-//
-void DSVPHostFsChannel::DoCancel(TInt aReqNo)
-	{
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DoCancel() %x(%d)", aReqNo, aReqNo);
-	}
-
-//
-// DSVPHostFsChannel::DoRequest
-//
-TInt DSVPHostFsChannel::DoRequest(TInt aReqNo, TRequestStatus* aStatus, TAny* a1, TAny* a2)
-	{
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DoRequest() %x(%d)", aReqNo, aReqNo);
-
-	TInt err = KErrGeneral;         
-
-	(void)aStatus;
-
-	switch(aReqNo)
-		{
-	        case RSVPHostFsDriver::EMkDir:
-			{
-			err = MkDir((TSVPHostFsMkDirInfo*)a1);
-			break;
-			}
-	        case RSVPHostFsDriver::ERmDir:
-			{
-			err = RmDir((TSVPHostFsRmDirInfo*)a1);
-			break;
-			}
-	        case RSVPHostFsDriver::EDelete:
-			{
-			err = Delete((TSVPHostFsDeleteInfo*)a1);
-			break;
-			}
-	        case RSVPHostFsDriver::ERename:
-			{
-			err = Rename((TSVPHostFsRenameInfo*)a1);
-			break;
-			}
-	        case RSVPHostFsDriver::EReplace:
-			{
-			err = Replace((TSVPHostFsReplaceInfo*)a1);
-			break;
-			}
-	        case RSVPHostFsDriver::EEntry:
-			{
-			err = Entry((TSVPHostFsEntryInfo*)a1);
-			break;
-			}
-	        case RSVPHostFsDriver::ESetEntry:
-			{
-			err = SetEntry((TSVPHostFsSetEntryInfo*)a1);
-			break;
-			}
-	        case RSVPHostFsDriver::EFileOpen:
-			{
-			err = FileOpen((TSVPHostFsFileOpenInfo*)a1);
-			break;
-			}
-	        case RSVPHostFsDriver::EDirOpen:
-			{
-			err = DirOpen((TSVPHostFsDirOpenInfo*)a1);
-			break;
-			}
-	        case RSVPHostFsDriver::EFileClose:
-			{
-			err = FileClose((TUint32)a1, (TUint32)a2);
-			break;
-			}
-	        case RSVPHostFsDriver::EFileRead:
-			{
-			err = FileRead((TSVPHostFsFileReadInfo*)a1);
-			break;
-			}
-	        case RSVPHostFsDriver::EFileWrite:
-			{
-			err = FileWrite((TSVPHostFsFileWriteInfo*)a1);
-			break;
-			}
-	        case RSVPHostFsDriver::EFileSetSize:
-			{
-			err = FileSetSize((TSVPHostFsFileSetSizeInfo*)a1);
-			break;
-			}
-	        case RSVPHostFsDriver::EFileFlushAll:
-			{
-		    err = Flush((TUint32)a1);
-			break;
-			}
-	        case RSVPHostFsDriver::EDirClose:
-			{
-		        err = DirClose((TUint32)a1, (TUint32)a2);
-			break;
-			}
-	        case RSVPHostFsDriver::EDirRead:
-			{
-		        err = DirRead((TSVPHostFsDirReadInfo*)a1);
-			break;
-			}
-	        case RSVPHostFsDriver::EGetDeviceID:
-			{
-		  err = GetID((TUint32)a1, (TUint32*)a2); 
-			break;
-			}
-	        case RSVPHostFsDriver::EGetDriveMap:
-			{
-		        err = GetDriveMap((TUint32*)a1);
-			break;
-			}
-
-		default:
-			{
-			err = KErrGeneral;
-			}
-		}
-	
-	if (KErrNone != err)
-		{
-		DP("Error %d from DoRequest", err);
-		}
-	
-	return err;
-	}
-
-//
-// DSVPHostFsChannel::DoControl
-//
-TInt DSVPHostFsChannel::DoControl(TInt aFunction, TAny* a1, TAny* a2)
-	{
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DoControl()");
-
-	DP("DoControl Function %d", aFunction);
-
-	TInt err = KErrGeneral;         
-
-	/* There should be a good reason to use a control rather than a request. */
-
-	if (KErrNone != err)
-		{
-		DP("** (SVPHOSTFSDRIVER) Error %d from control function", err);
-		}
-	
-	return err;
-	}
-
-void DSVPHostFsChannel::HandleMsg(TMessageBase* aMsg)
-	{
-	
-	TThreadMessage& m = *(TThreadMessage*)aMsg;
-	TInt id = m.iValue;
-
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::HandleMsg() %x(%d)", id, id);
-
-	if (id == (TInt)ECloseMsg)
-		{
-		m.Complete(KErrNone, EFalse); 
-		return;
-		}
-	if (id == KMaxTInt)
-		{
-		// DoCancel
-		DoCancel(m.Int0());
-		m.Complete(KErrNone, ETrue); 
-		return;
-		}
-	if (id < 0)
-		{
-		// DoRequest
-		TRequestStatus* pStatus = (TRequestStatus*)m.Ptr0();
-		TInt r = DoRequest(~id, pStatus, m.Ptr1(), m.Ptr2());
-		//		if (r != KErrNone)
-		Kern::RequestComplete(iClientThread,pStatus,r);
-		m.Complete(KErrNone, ETrue);
-		}
-	else
-		{
-		// DoControl
-		TInt r = DoControl(id, m.Ptr0(), m.Ptr1());
-		m.Complete(r, ETrue);
-		}
-	}
-
-TInt DSVPHostFsChannel::MkDir(TSVPHostFsMkDirInfo* aInfo)
-	{
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::MkDir()");
-
-	TSVPHostFsMkDirInfo info;
-	TInt err = KErrNone;
-
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsMkDirInfo)));
-
-	if (!info.iName)
-		return KErrArgument;
-
-	TUint16 pathData[KMaxPath];
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iName, (TUint8*)pathData, info.iLength*2));
-	
-	TUint32 device = iDriveMap[info.iDrive];
-	SVPWriteReg(device, EArg0, Epoc::LinearToPhysical((TUint32)pathData));
-	SVPWriteReg(device, EArg1, info.iLength);
-	SVPWriteReg(device, EArg2, info.iFlags);
-	SVPInvoke(device, RSVPHostFsDriver::EMkDir);
-
-	return SVPReadReg(device, EResult);
-
-	}
-
-TInt DSVPHostFsChannel::RmDir(TSVPHostFsRmDirInfo* aInfo)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::RmDir()");
-
-	TSVPHostFsRmDirInfo info;
-	TInt err = KErrNone;
-
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsRmDirInfo)));
-
-	if (!info.iName)
-		return KErrArgument;
-
-	TUint16 pathData[KMaxPath];
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iName, (TUint8*)pathData, info.iLength*2));
-
-	TUint32 device = iDriveMap[info.iDrive];
-	SVPWriteReg(device, EArg0, Epoc::LinearToPhysical((TUint32)pathData));
-	SVPWriteReg(device, EArg1, info.iLength);
-	SVPInvoke(device, RSVPHostFsDriver::ERmDir);
-
-	return SVPReadReg(device, EResult);
-
-	}
-
-TInt DSVPHostFsChannel::Delete(TSVPHostFsDeleteInfo* aInfo)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::Delete()");
-
-	TSVPHostFsDeleteInfo info;
-	TInt err = KErrNone;
-
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsDeleteInfo)));
-
-	if (!info.iName)
-		return KErrArgument;
-
-	TUint16 pathData[KMaxPath];
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iName, (TUint8*)pathData, info.iLength*2));
-
-	TUint32 device = iDriveMap[info.iDrive];
-	SVPWriteReg(device, EArg0, Epoc::LinearToPhysical((TUint32)pathData));
-	SVPWriteReg(device, EArg1, info.iLength);
-	SVPInvoke(device, RSVPHostFsDriver::EDelete);
-
-	return SVPReadReg(device, EResult);
-
-	}
-
-TInt DSVPHostFsChannel::Rename(TSVPHostFsRenameInfo* aInfo)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::Rename()");
-
-	TSVPHostFsRenameInfo info;
-	TInt err = KErrNone;
-
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsRenameInfo)));
-
-	if (!info.iOldName)
-		return KErrArgument;
-
-	if (!info.iNewName)
-		return KErrArgument;
-
-	TUint16 oldPathData[KMaxPath];
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iOldName, (TUint8*)oldPathData, info.iOldLength*2));
-
-	TUint16 newPathData[KMaxPath];
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iNewName, (TUint8*)newPathData, info.iNewLength*2));
-
-	TUint32 device = iDriveMap[info.iDrive];
-	SVPWriteReg(device, EArg0, Epoc::LinearToPhysical((TUint32)oldPathData));
-	SVPWriteReg(device, EArg1, info.iOldLength);
-	SVPWriteReg(device, EArg2, Epoc::LinearToPhysical((TUint32)newPathData));
-	SVPWriteReg(device, EArg3, info.iNewLength);
-	SVPInvoke(device, RSVPHostFsDriver::ERename);
-
-	return SVPReadReg(device, EResult);
-
-	}
-
-TInt DSVPHostFsChannel::Replace(TSVPHostFsReplaceInfo* aInfo)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::Replace()");
-
-	TSVPHostFsReplaceInfo info;
-	TInt err = KErrNone;
-
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsReplaceInfo)));
-
-	if (!info.iOldName)
-		return KErrArgument;
-
-	if (!info.iNewName)
-		return KErrArgument;
-
-	TUint16 oldPathData[KMaxPath];
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iOldName, (TUint8*)oldPathData, info.iOldLength*2));
-
-	TUint16 newPathData[KMaxPath];
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iNewName, (TUint8*)newPathData, info.iNewLength*2));
-
-	TUint32 device = iDriveMap[info.iDrive];
-	SVPWriteReg(device, EArg0, Epoc::LinearToPhysical((TUint32)oldPathData));
-	SVPWriteReg(device, EArg1, info.iOldLength);
-	SVPWriteReg(device, EArg2, Epoc::LinearToPhysical((TUint32)newPathData));
-	SVPWriteReg(device, EArg3, info.iNewLength);
-	SVPInvoke(device, RSVPHostFsDriver::EReplace);
-
-	return SVPReadReg(device, EResult);
-
-	}
-
-TInt DSVPHostFsChannel::Entry(TSVPHostFsEntryInfo* aInfo)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::Entry()");
-
-	TSVPHostFsEntryInfo info;
-	TInt err = KErrNone;
-
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsEntryInfo)));
-
-	if (!info.iName)
-		return KErrArgument;
-
-	TUint16 pathData[KMaxPath];
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iName, (TUint8*)pathData, info.iLength*2));
-
-	TUint32 device = iDriveMap[info.iDrive];
-	SVPWriteReg(device, EArg0, Epoc::LinearToPhysical((TUint32)pathData));
-	SVPWriteReg(device, EArg1, info.iLength);
-	SVPInvoke(device, RSVPHostFsDriver::EEntry);
-
-	RET_IF_ERROR(err, SVPReadReg(device, EResult));
-
-	TUint32 att = SVPReadReg(device, EArg0);
-	TUint32 modified = SVPReadReg(device, EArg1);
-	TUint32 filesize = SVPReadReg(device, EArg2);
-	// TODO: Yuk! Hack alert! Say EWindows for now. But really should probably say EUnknown,
-	// since the device won't tell us. Not sure if it can (easily) given remote mounting etc.
-	// However this probably delays the problem. On the other hand it is probably best to make
-	// the file service guess, since it need only guess once, and cache its guess.
-	TUint32 filetimetype = EWindows;
-
-	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iAtt, (TUint8*)&att, sizeof(att)));
-	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iModified, (TUint8*)&modified, sizeof(modified)));
-	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iSize, (TUint8*)&filesize, sizeof(filesize)));
-	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iTimeType, (TUint8*)&filetimetype, sizeof(filetimetype)));
-	return KErrNone;
-	}
-
-TInt DSVPHostFsChannel::SetEntry(TSVPHostFsSetEntryInfo* aInfo)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::SetEntry()");
-	return KErrNotSupported;
-	}
-
-TInt DSVPHostFsChannel::Flush(TUint32 aDrive)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::Flush()");
-	TUint32 device = iDriveMap[aDrive];
-	SVPInvoke(device, RSVPHostFsDriver::EFileFlushAll);
-
-	return KErrNone;
-	}
-
-TInt DSVPHostFsChannel::DirOpen(TSVPHostFsDirOpenInfo* aInfo)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DirOpen()");
-
-	TSVPHostFsDirOpenInfo info;
-	TInt err = KErrNone;
-
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsDirOpenInfo)));
-
-	if (!info.iName)
-		return KErrArgument;
-
-	TUint16 pathData[KMaxPath];
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iName, (TUint8*)pathData, info.iLength*2));
-
-	TUint32 device = iDriveMap[info.iDrive];
-	SVPWriteReg(device, EArg0, Epoc::LinearToPhysical((TUint32)pathData));
-	SVPWriteReg(device, EArg1, info.iLength);
-	SVPInvoke(device, RSVPHostFsDriver::EDirOpen);
-
-	RET_IF_ERROR(err, SVPReadReg(device, EResult));
-
-	// handle is in arg 0
-	TUint32 handle = SVPReadReg(device, EArg0);
-	return Kern::ThreadRawWrite(iClientThread, &aInfo->iHandle, (TUint8*)&handle, sizeof(handle));
-	}
-
-TInt DSVPHostFsChannel::FileOpen(TSVPHostFsFileOpenInfo* aInfo)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileOpen()");
-
-	TSVPHostFsFileOpenInfo info;
-	TInt err = KErrNone;
-
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsFileOpenInfo)));
-
-	if (!info.iName)
-		return KErrArgument;
-
-	TUint16 pathData[KMaxPath];
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iName, (TUint8*)pathData, info.iLength*2));
-
-	TUint32 device = iDriveMap[info.iDrive];
-	SVPWriteReg(device, EArg0, Epoc::LinearToPhysical((TUint32)pathData));
-	SVPWriteReg(device, EArg1, info.iLength);
-	SVPWriteReg(device, EArg2, info.iMode);
-	SVPWriteReg(device, EArg3, info.iOpen);
-	SVPInvoke(device, RSVPHostFsDriver::EFileOpen);
-
-	RET_IF_ERROR(err, SVPReadReg(device, EResult));
-
-	TUint32 handle = SVPReadReg(device, EArg0);
-	TUint32 att = SVPReadReg(device, EArg1);
-	TUint32 modified = SVPReadReg(device, EArg2);
-	TUint32 size = SVPReadReg(device, EArg3);
-	TUint32 timeType = EWindows;
-
-	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iHandle, (TUint8*)&handle, sizeof(handle)));
-	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iAtt, (TUint8*)&att, sizeof(att)));
-	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iModified, (TUint8*)&modified, sizeof(modified)));
-	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iSize, (TUint8*)&size, sizeof(size)));
-	return Kern::ThreadRawWrite(iClientThread, &aInfo->iTimeType, (TUint8*)&timeType, sizeof(timeType));
-
-	}
-
-TInt DSVPHostFsChannel::FileClose(TUint32 aDrive, TUint32 aHandle)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileClose()");
-
-	TUint32 device = iDriveMap[aDrive];
-	SVPWriteReg(device, EArg0, aHandle);
-	SVPInvoke(device, RSVPHostFsDriver::EFileClose);
-	return SVPReadReg(device, EResult);
-	}
-
-TInt DSVPHostFsChannel::FileRead(TSVPHostFsFileReadInfo* aInfo)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileRead()");
-
-	char buf[0x400];
-	TSVPHostFsFileReadInfo info;
-	TInt err = KErrNone;
-
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsFileReadInfo)));
-
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileRead handle %d length %d pos %d phys_addr 0x%08x info.iBuf 0x%08x",
-	   info.iHandle, info.iLength, info.iPos, Epoc::LinearToPhysical((TUint32)buf), info.iBuf);
-
-	TUint32 device = iDriveMap[info.iDrive];
-	SVPWriteReg(device, EArg0, info.iHandle);
-	SVPWriteReg(device, EArg1, info.iPos);	
-	SVPWriteReg(device, EArg2, Epoc::LinearToPhysical((TUint32)buf));
-	SVPWriteReg(device, EArg3, info.iLength);	
-	SVPInvoke(device, RSVPHostFsDriver::EFileRead);
-
-	RET_IF_ERROR(err, SVPReadReg(device, EResult));
-
-	TUint32 len = SVPReadReg(device, EArg0);
-
-	DP("** (SVPHOSTFSDRIVER)  Read %d bytes", len);
-
-	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iLength, (TUint8*)&len, sizeof(len)));
-	return Kern::ThreadRawWrite(iClientThread, (TUint8*)info.iBuf, (TUint8*)&buf, len);
-	}
-
-TInt DSVPHostFsChannel::FileWrite(TSVPHostFsFileWriteInfo* aInfo)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileWrite()");
-
-	char buf[0x400];
-	TSVPHostFsFileWriteInfo info;
-	TInt err = KErrNone;
-
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsFileWriteInfo)));
-
-	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileWrite handle %d length %d pos %d phys_addr 0x%08x info.iBuf 0x%08x", 
-	   info.iHandle, info.iLength, info.iPos, Epoc::LinearToPhysical((TUint32)buf), info.iBuf);
-
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, (TUint8 *)info.iBuf, buf, info.iLength));
-
-	TUint32 device = iDriveMap[info.iDrive];
-	SVPWriteReg(device, EArg0, info.iHandle);
-	SVPWriteReg(device, EArg1, info.iPos);	
-	SVPWriteReg(device, EArg2, Epoc::LinearToPhysical((TUint32)buf));
-	SVPWriteReg(device, EArg3, info.iLength);	
-	SVPInvoke(device, RSVPHostFsDriver::EFileWrite);
-
-	RET_IF_ERROR(err, SVPReadReg(device, EResult));
-
-	TUint32 len = SVPReadReg(device, EArg0);
-
-	DP("** (SVPHOSTFSDRIVER)  Wrote %d bytes", len);
-
-        return Kern::ThreadRawWrite(iClientThread, &aInfo->iLength, (TUint8*)&len, sizeof(len));
-	}
-
-TInt DSVPHostFsChannel::FileSetSize(TSVPHostFsFileSetSizeInfo* aInfo)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileSetSize()");
-  
-	TSVPHostFsFileSetSizeInfo info;
-	TInt err = KErrNone;
-
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsFileSetSizeInfo)));
-
-	TUint32 device = iDriveMap[info.iDrive];
-	SVPWriteReg(device, EArg0, info.iHandle);
-	SVPWriteReg(device, EArg1, info.iLength);
-	SVPInvoke(device, RSVPHostFsDriver::EFileSetSize);
-
-	TUint32 res = SVPReadReg(device, EResult);
-
-	RET_IF_ERROR(err, res);
-
-	return res;
-	}
-
-TInt DSVPHostFsChannel::FileSetEntry(TSVPHostFsSetEntryInfo* aInfo)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileSetEntry()");
-
-	return KErrNotSupported;
-	}
-
-TInt DSVPHostFsChannel::DirClose(TUint32 aDrive, TUint32 aHandle)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DirClose()");
-
-	TUint32 device = iDriveMap[aDrive];
-	SVPWriteReg(device, EArg0, aHandle);
-	SVPInvoke(device, RSVPHostFsDriver::EDirClose);
-	return SVPReadReg(device, EResult);
-	}
-
-TInt DSVPHostFsChannel::DirRead(TSVPHostFsDirReadInfo* aInfo)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DirRead()");
-
-	TUint16 name[KMaxPath];
-	TSVPHostFsDirReadInfo info;
-	TInt err = KErrNone;
-
-	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsDirReadInfo)));
-
-
-	TUint32 device = iDriveMap[info.iDrive];
-	SVPWriteReg(device, EArg0, info.iHandle);
-	SVPWriteReg(device, EArg1, Epoc::LinearToPhysical((TUint32)name));
-	SVPWriteReg(device, EArg2, KMaxPath);
-	SVPInvoke(device, RSVPHostFsDriver::EDirRead);
-
-	RET_IF_ERROR(err, SVPReadReg(device, EResult));
-
-	TUint32 att = SVPReadReg(device, EArg0);
-	TUint32 modified = SVPReadReg(device, EArg1);
-	TUint32 filesize = SVPReadReg(device, EArg2);
-	TUint32 namesize = SVPReadReg(device, EArg3);
-	// TODO: Yuk! Hack alert! Say EWindows for now. But really should probably say EUnknown,
-	// since the device won't tell us. Not sure if it can (easily) given remote mounting etc.
-	// However this probably delays the problem. On the other hand it is probably best to make
-	// the file service guess, since it need only guess once, and cache its guess.
-	TUint32 filetimetype = EWindows;
-
-	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iAtt, (TUint8*)&att, sizeof(att)));
-	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iModified, (TUint8*)&modified, sizeof(modified)));
-	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iSize, (TUint8*)&filesize, sizeof(filesize)));
-	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iTimeType, (TUint8*)&filetimetype, sizeof(filetimetype)));
-	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iLength, (TUint8*)&namesize, sizeof(namesize)));
-	return Kern::ThreadRawWrite(iClientThread, &aInfo->iName, (TUint8*)&name, namesize * sizeof(TUint16));
-	}
-
-TInt DSVPHostFsChannel::GetID(TUint32 aDrive, TUint32 * aId)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::GetID");
-	TUint32 device = iDriveMap[aDrive];
-        TUint32 id = SVPReadReg(device, EDeviceID);
-	return Kern::ThreadRawWrite(iClientThread, aId, &id, sizeof(TUint32));
-	}
-
-TInt DSVPHostFsChannel::GetDriveMap(TAny * aMap)
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::GetDriveMap");
-	return Kern::ThreadRawWrite(iClientThread, aMap, iDriveMap, sizeof(iDriveMap));
-	}
-
-DECLARE_EXTENSION_LDD()
-	{
-        DP("** (SVPHOSTFSDRIVER) DSVPHostFsDriverFactory created");
-        return new DSVPHostFsDriverFactory;
-	}
-
-DECLARE_STANDARD_EXTENSION()
-	{
-        DP("** (SVPHOSTFSDRIVER) SVPHostFs extension entry point");
-
-	DP("** (SVPHOSTFSDRIVER) Creating LocDrv device");
-	TInt r;
-	DSVPHostFsDriverFactory* device = new DSVPHostFsDriverFactory;
-	if (device==NULL)
-		r=KErrNoMemory;
-	else
-		r=Kern::InstallLogicalDevice(device);
-
-	DP("** (SVPHOSTFSDRIVER) Installing LocDrv device in kernel returned %d",r);
-
-	return r;
-	}
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/driver/svphostfsdriver.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +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:
-*
-*/
-
-#ifndef __SVPHOSTFSDRIVER_H__
-#define __SVPHOSTFSDRIVER_H__
-
-
-#include "rsvphostfsdriver.h"
-
-// Debug messages
-//#define SVPDBG
-#ifdef SVPDBG
-#define LOG_MSG(x) Kern::Printf(x)
-#define LOG_MSG2(x, y) Kern::Printf(x, y)
-#else
-#define LOG_MSG(x)
-#define LOG_MSG2(x, y)
-#endif
-
-
-//
-// class DSVPHostFsDriverFactory
-//
-class DSVPHostFsDriverFactory : public DLogicalDevice
-{
-public:
-
-	DSVPHostFsDriverFactory();
-	virtual TInt Install();
-	virtual void GetCaps(TDes8& aDes) const;
-	virtual TInt Create(DLogicalChannelBase*& aChannel);
-};
-
-//
-// DSVPHostFsChannel
-//
-class DSVPHostFsChannel : public DLogicalChannel
-{
-public:
-
-	DSVPHostFsChannel(DLogicalDevice* aLogicalDevice);
-	~DSVPHostFsChannel();
-
-	virtual TInt DoCreate(TInt aUnit, const TDesC* anInfo, const TVersion& aVer);	
-	virtual void HandleMsg(TMessageBase* aMsg);
-	
-protected:
-	virtual void DoCancel(TInt aReqNo);
-	virtual TInt DoRequest(TInt aReqNo, TRequestStatus* aStatus, TAny* a1, TAny* a2);
-	virtual TInt DoControl(TInt aFunction, TAny *a1, TAny *a2);
-	
-private:
-	TInt DirOpen(TSVPHostFsDirOpenInfo* aInfo);
-	TInt DirClose(TUint32 aHandle);
-	TInt DirRead(TSVPHostFsDirReadInfo* aInfo);
-
-private:
-	DThread* iClientThread;
-	
-	
-	TDfcQue* iDFCQue;
-
-};
-
-#endif //__SVPHOSTFSDRIVER_H__
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/fs/rsvphostfsdriver.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,167 +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:
-*
-*/
-
-#include <f32file.h>
-#include <f32fsys.h>
-#include <f32ver.h>
-#include <e32uid.h>
-
-#include <rsvphostfsdriver.h>
-
-#include "svphostfsy.h"
-
-#ifdef DP
-#undef DP
-#define DP(f...)
-#endif
-
-TInt RSVPHostFsDriver::Open()
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::Open()"));
-	return DoCreate(KSVPHostFsDriverName, TVersion(KMajorVersionNumber, KMinorVersionNumber, KBuildVersionNumber), KNullUnit, NULL, NULL);
-	}
-
-TInt RSVPHostFsDriver::MkDir(TSVPHostFsMkDirInfo& aInfo)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::MkDir()"));
-	return DoSVPRequest(EMkDir, &aInfo);
-	}
-
-TInt RSVPHostFsDriver::RmDir(TSVPHostFsRmDirInfo& aInfo)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::RmDir()"));
-	return DoSVPRequest(ERmDir, &aInfo);
-	}
-
-TInt RSVPHostFsDriver::Delete(TSVPHostFsDeleteInfo& aInfo)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::Delete()"));
-	return DoSVPRequest(EDelete, &aInfo);
-	}
-
-TInt RSVPHostFsDriver::Rename(TSVPHostFsRenameInfo& aInfo)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::Rename()"));
-	return DoSVPRequest(ERename, &aInfo);
-	}
-
-TInt RSVPHostFsDriver::Replace(TSVPHostFsReplaceInfo& aInfo)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::Replace()"));
-	return DoSVPRequest(EReplace, &aInfo);
-	}
-
-TInt RSVPHostFsDriver::ReadUid(const TDesC& /*aName*/,TEntry& /*anEntry*/)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::ReadUid()"));
-	return KErrNone;
-	}
-
-TInt RSVPHostFsDriver::Entry(TSVPHostFsEntryInfo& aInfo)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::Entry()"));
-	return DoSVPRequest(EEntry, &aInfo);
-	}
-
-TInt RSVPHostFsDriver::SetEntry(TSVPHostFsSetEntryInfo &aInfo)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::SetEntry()"));
-	return  DoSVPRequest(ESetEntry, &aInfo);
-	}
-
-TInt RSVPHostFsDriver::FileOpen(TSVPHostFsFileOpenInfo& aInfo)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FileOpen()"));
-	return DoSVPRequest(EFileOpen, &aInfo);
-	}
-
-TInt RSVPHostFsDriver::FileClose(TUint32 aDrive, TUint32 aHandle)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FileClose()"));
-	return DoSVPRequest(EFileClose, (TAny *)aDrive, (TAny *)aHandle);
-	}
-
-TInt RSVPHostFsDriver::FileRead(TSVPHostFsFileReadInfo& aInfo)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FileRead()"));
-	return  DoSVPRequest(EFileRead, &aInfo);
-	}
-
-TInt RSVPHostFsDriver::FileWrite(TSVPHostFsFileWriteInfo& aInfo)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FileWrite()"));
-	return  DoSVPRequest(EFileWrite, &aInfo);
-	}
-
-TInt RSVPHostFsDriver::FileSetSize(TSVPHostFsFileSetSizeInfo &aInfo)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FileSetSize()"));
-	return  DoSVPRequest(EFileSetSize, &aInfo);
-	}
-
-TInt RSVPHostFsDriver::FileSetEntry(TSVPHostFsSetEntryInfo &aInfo)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FileSetEntry()"));
-	return  KErrNotSupported;
-	}
-
-TInt RSVPHostFsDriver::FlushData(TUint32 aDrive)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FlushData()"));
-	return DoSVPRequest(EFileFlushAll, (TAny *)aDrive);
-	}
-
-TInt RSVPHostFsDriver::FlushAll(TUint32 aDrive)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FlushAll()"));
-	return DoSVPRequest(EFileFlushAll, (TAny *)aDrive);
-	}
-
-TInt RSVPHostFsDriver::DirOpen(TSVPHostFsDirOpenInfo& aInfo)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::DirOpen()"));
-	return DoSVPRequest(EDirOpen, &aInfo);
-	}
-
-TInt RSVPHostFsDriver::DirClose(TUint32 aDrive, TUint32 aHandle)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::DirClose()"));
-	return DoSVPRequest(EDirClose, (TAny *)aDrive, (TAny *)aHandle);
-	}
-
-TInt RSVPHostFsDriver::DirRead(TSVPHostFsDirReadInfo& aInfo)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::DirRead()"));
-	return  DoSVPRequest(EDirRead, &aInfo);
-	}
-
-TUint32 RSVPHostFsDriver::GetDeviceID(TUint32 aDrive)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::GetDeviceID()"));
-
-	TUint32 id;
-	TInt r = DoSVPRequest(EGetDeviceID, (TAny *) aDrive, &id);
-	return (r != KErrNone) ? r : id;
-	}
-
-TInt RSVPHostFsDriver::GetDriveMap(TUint32 * aMap)
-	{
-	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::GetDeviceID()"));
-
-	return DoSVPRequest(EGetDriveMap, (TAny *)aMap);
-	}
-
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/fs/svphost.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,691 +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: f32test\fsstress\t_remote.cpp
-*
-*/
-
-#if !defined(__F32FILE_H__)
-#include <f32file.h>
-#endif
-#if !defined(__E32TEST_H__)
-#include <e32test.h>
-#endif
-#if !defined(__T_STD_H__)
-#include "t_std.h"
-#endif
-#if !defined(__T_REMFSY_H__)
-#include "t_remfsy.h"
-#endif
-
-GLDEF_D RTest test(_L("T_REMOTE - DEFAULT DRIVE"));
-GLDEF_D RTest testx(_L("X Drive (WINS) <-> D Drive (MARM)"));
-GLDEF_D RTest testy(_L("Y Drive (WINS) <-> C Drive (MARM)"));
-GLDEF_D RTest testq(_L("REMOTE Q Drive"));
-
-LOCAL_D TFileName gBatchFile;
-LOCAL_D TBool gRunByBatch=EFalse;
-
-GLDEF_D TFileName gExeFileName(RProcess().FileName());
-
-/*
-INFORMATION - What this test is all about
-
-T_REMOTE tests the asynchronous remote file system implementation, introduced in
-F32 release 110 and refined in release 112.  The test sets up and mounts four drives,
-the default drive (usually C on WINS and MARM), a remote drive (Q) and two others, on
-MARM these are C and D, on WINS these are X and Y.  The remote filesystem is the only
-system treated asynchronously by F32.  
-
-The test sets up a thread for each drive and runs a number of tests on each drive.
-In the remote filesystem case, a dummy filesystem has been implemented, this is built
-as T_REMFSY.fsy.  The tests are designed to stress a number of fileserver API
-functions.  The test MultipleSessions() is adapted from another F32 test T_SESSION.
-It sets up an array of fileserver connections and then uses each connection to run
-a number of tests - alternating between connections to stress F32 as it does so.  The
-test should therefore be testing multiple fileserver connections on multiple drives -
-the remote filesystem running concurrently with the other drives.  There should be
-no failure or confusion between fileserver sessions.  Each drive has a separate test
-console which should complete successfully.
-
-NOTE: TO RUN THIS CARD SUCCESSFULLY ON MARM A CF CARD IS REQUIRED
-
-*/
-
-LOCAL_C void Test0(RTest& aTest)
-//
-//	Scan for open files - no sessions
-//	
-	{
-	aTest.Next(_L("Scan for open files with no sessions open"));
-	CFileList* list;
-	TOpenFileScan fileScan(TheFs);
-	fileScan.NextL(list);
-	if (list==NULL)
-		return;
-	TInt count=list->Count();
-	if (count==1)
-		{
-		gRunByBatch=ETrue;
-		gBatchFile=(*list)[0].iName;
-		delete list;
-		fileScan.NextL(list);
-		if (list==NULL)
-			return;
-		count=list->Count();
-		}
-	while (count--)
-		{
-		TEntry entry=(*list)[count];
-		aTest.Printf(_L("%d) EntryName = %S\n"),count,&entry.iName);
-		}
-	//aTest.Printf(_L("Test will fail unless files are closed.\n"));
-	//aTest.Printf(_L("Press any key ...\n"));
-	//aTest.Getch();
-	}
-
-
-LOCAL_C void Test1()	
-//
-//	This test is only called by default drive
-//	Test OpenFileScan			
-//
-	{
-	test.Next(_L("Scan for open files - one session only"));
-
-	RFile file1,file2,file3;
-	TFileName fn;
-	fn = _L("Z:\\TEST\\T_FSRV.CPP");
-	fn[0] = gExeFileName[0];
-	TInt r=file1.Open(TheFs,fn,EFileRead|EFileShareReadersOnly);
-	test(r==KErrNone);
-	fn = _L("Z:\\TEST\\T_FILE.CPP");
-	fn[0] = gExeFileName[0];
-	r=file2.Open(TheFs,fn,EFileRead);
-	test(r==KErrNone);
-	fn = _L("Z:\\TEST\\T_FSRV.CPP");
-	fn[0] = gExeFileName[0];
-	r=file3.Open(TheFs,fn,EFileRead|EFileShareReadersOnly);
-	test(r==KErrNone);
-	
-	CFileList* list;
-	TOpenFileScan fileScan(TheFs);
-	fileScan.NextL(list);
-
-	if (gRunByBatch)
-		{
-		test(list!=NULL);
-		test(list->Count()==1);
-		TEntry entry=(*list)[0];
-		test(entry.iName.FindF(_L(".BAT"))>=0);
-		delete list;
-		fileScan.NextL(list);
-		}
-
-	test(list!=NULL);
-	TInt count=list->Count();
-	test(count==3);
-	TEntry entry=(*list)[0];
-	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
-	entry=(*list)[1];
-	test(entry.iName.FindF(_L("T_FILE.CPP"))>=0);
-	entry=(*list)[2];
-	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
-	TThreadId threadId=fileScan.ThreadId();
-	RThread current;
-	TThreadId currentId=current.Id();
-	test(threadId==currentId);
-	delete list;
-
-	fileScan.NextL(list);
-	test(list==NULL);
-
-	file1.Close();
-	file2.Close();
-	file3.Close();
-	}
-
-LOCAL_C void Test2()
-//
-// Test openfilescan - empty, full, empty.
-//
-	{
-	test.Next(_L("Scan for open files - empty sessions"));
-
-	RFs fs1,fs2,fs3,fs4;
-	TInt r=fs1.Connect();
-	test(r==KErrNone);
-	r=fs2.Connect();
-	test(r==KErrNone);
-	r=fs3.Connect();
-	test(r==KErrNone);
-	r=fs4.Connect();
-	test(r==KErrNone);
-
-	RFile file1,file2,file3;
-	TFileName fn;
-	fn = _L("Z:\\TEST\\T_FSRV.CPP");
-	fn[0] = gExeFileName[0];
-	r=file1.Open(fs2,fn,EFileRead|EFileShareReadersOnly);
-	test(r==KErrNone);
-	fn = _L("Z:\\TEST\\T_FILE.CPP");
-	fn[0] = gExeFileName[0];
-	r=file2.Open(fs2,fn,EFileRead);
-	test(r==KErrNone);
-	fn = _L("Z:\\TEST\\T_FSRV.CPP");
-	fn[0] = gExeFileName[0];
-	r=file3.Open(fs2,fn,EFileRead|EFileShareReadersOnly);
-	test(r==KErrNone);
-	
-	CFileList* list;
-	TOpenFileScan fileScan(TheFs);
-	fileScan.NextL(list);
-
-	if (gRunByBatch)
-		{
-		test(list!=NULL);
-		test(list->Count()==1);
-		TEntry entry=(*list)[0];
-		test(entry.iName.FindF(_L(".BAT"))>=0);
-		delete list;
-		fileScan.NextL(list);
-		}
-
-	test(list!=NULL);
-	TInt count=list->Count();
-	test(count==3);
-	TEntry entry=(*list)[0];
-	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
-	entry=(*list)[1];
-	test(entry.iName.FindF(_L("T_FILE.CPP"))>=0);
-	entry=(*list)[2];
-	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
-	TThreadId threadId=fileScan.ThreadId();
-	RThread current;
-	TThreadId currentId=current.Id();
-	test(threadId==currentId);
-	delete list;
-
-	fileScan.NextL(list);
-	test(list==NULL);
-
-	file1.Close();
-	file2.Close();
-	file3.Close();
-	fs1.Close();
-	fs2.Close();
-	fs3.Close();
-	fs4.Close();
-	}
-
-LOCAL_C void Test3()
-//
-// Test openfilescan - empty, full, empty full
-//
-	{
-	test.Next(_L("Scan for open files - multiple sessions"));
-
-	RFs fs1,fs2,fs3,fs4;
-	TInt r=fs1.Connect();
-	test(r==KErrNone);
-	r=fs2.Connect();
-	test(r==KErrNone);
-	r=fs3.Connect();
-	test(r==KErrNone);
-	r=fs4.Connect();
-	test(r==KErrNone);
-
-	RFile file1,file2,file3;
-	TFileName fn;
-	fn = _L("Z:\\TEST\\T_FSRV.CPP");
-	fn[0] = gExeFileName[0];
-	r=file1.Open(fs2,fn,EFileRead|EFileShareReadersOnly);
-	test(r==KErrNone);
-	fn = _L("Z:\\TEST\\T_FILE.CPP");
-	fn[0] = gExeFileName[0];
-	r=file2.Open(fs2,fn,EFileRead|EFileShareReadersOnly);
-	test(r==KErrNone);
-	fn = _L("Z:\\TEST\\T_FSRV.CPP");
-	fn[0] = gExeFileName[0];
-	r=file3.Open(fs2,fn,EFileRead|EFileShareReadersOnly);
-	test(r==KErrNone);
-	
-	r=file1.Open(fs4,fn,EFileRead|EFileShareReadersOnly);
-	test(r==KErrNone);
-	fn = _L("Z:\\TEST\\T_FILE.CPP");
-	fn[0] = gExeFileName[0];
-	r=file2.Open(fs4,fn,EFileRead|EFileShareReadersOnly);
-	test(r==KErrNone);
-	fn = _L("Z:\\TEST\\T_FSRV.CPP");
-	fn[0] = gExeFileName[0];
-	r=file3.Open(fs4,fn,EFileRead|EFileShareReadersOnly);
-	test(r==KErrNone);
-	
-	CFileList* list;
-	TOpenFileScan fileScan(TheFs);
-	fileScan.NextL(list);
-
-	if (gRunByBatch)
-		{
-		test(list!=NULL);
-		test(list->Count()==1);
-		TEntry entry=(*list)[0];
-		test(entry.iName.FindF(_L(".BAT"))>=0);
-		delete list;
-		fileScan.NextL(list);
-		}
-
-	test(list!=NULL);
-	TInt count=list->Count();
-	test(count==3);
-	TEntry entry=(*list)[0];
-	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
-	entry=(*list)[1];
-	test(entry.iName.FindF(_L("T_FILE.CPP"))>=0);
-	entry=(*list)[2];
-	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
-	TThreadId threadId=fileScan.ThreadId();
-	RThread current;
-	TThreadId currentId=current.Id();
-	test(threadId==currentId);
-	delete list;
-
-	fileScan.NextL(list);
-	test(list!=NULL);
-	count=list->Count();
-	test(count==3);
-	entry=(*list)[0];
-	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
-	entry=(*list)[1];
-	test(entry.iName.FindF(_L("T_FILE.CPP"))>=0);
-	entry=(*list)[2];
-	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
-	threadId=fileScan.ThreadId();
-	currentId=current.Id();
-	test(threadId==currentId);
-	delete list;
-
-	fileScan.NextL(list);
-	test(list==NULL);
-
-	file1.Close();
-	file2.Close();
-	file3.Close();
-	fs1.Close();
-	fs2.Close();
-	fs3.Close();
-	fs4.Close();
-	}
-
-LOCAL_C void Test4()
-//
-// Test openfilescan - rdirs, empty, full, empty rdirs.
-//
-	{
-	test.Next(_L("Scan for open files - check RDir sessions are ignored"));
-
-	RFs fs1,fs2,fs3,fs4;
-	TFileName fn;
-	TInt r=fs1.Connect();
-	test(r==KErrNone);
-	r=fs2.Connect();
-	test(r==KErrNone);
-	r=fs3.Connect();
-	test(r==KErrNone);
-	r=fs4.Connect();
-	test(r==KErrNone);
-
-	RDir dir1,dir2,dir3,dir4;
-	fn = _L("Z:\\TEST\\*.XDE");
-	fn[0] = gExeFileName[0];
-	r=dir1.Open(TheFs,fn,KEntryAttMaskSupported);
-	test(r==KErrNone);
-	r=dir2.Open(TheFs,fn,KEntryAttMaskSupported);
-	test(r==KErrNone);
-	r=dir3.Open(TheFs,fn,KEntryAttMaskSupported);
-	test(r==KErrNone);
-	r=dir4.Open(TheFs,fn,KEntryAttMaskSupported);
-	test(r==KErrNone);
-
-	RFile file1,file2,file3;
-	fn = _L("Z:\\TEST\\T_FSRV.CPP");
-	fn[0] = gExeFileName[0];
-	r=file1.Open(fs2,fn,EFileRead|EFileShareReadersOnly);
-	test(r==KErrNone);
-	fn = _L("Z:\\TEST\\T_FILE.CPP");
-	fn[0] = gExeFileName[0];
-	r=file2.Open(fs2,fn,EFileRead);
-	test(r==KErrNone);
-	fn = _L("Z:\\TEST\\T_FSRV.CPP");
-	fn[0] = gExeFileName[0];
-	r=file3.Open(fs2,fn,EFileRead|EFileShareReadersOnly);
-	test(r==KErrNone);
-	
-	RDir dir5,dir6,dir7,dir8;
-	fn = _L("Z:\\TEST\\*.XDE");
-	fn[0] = gExeFileName[0];
-	r=dir5.Open(fs4,fn,KEntryAttMaskSupported);
-	test(r==KErrNone);
-	r=dir6.Open(fs4,fn,KEntryAttMaskSupported);
-	test(r==KErrNone);
-	r=dir7.Open(fs4,fn,KEntryAttMaskSupported);
-	test(r==KErrNone);
-	r=dir8.Open(fs4,fn,KEntryAttMaskSupported);
-	test(r==KErrNone);
-
-	CFileList* list;
-	TOpenFileScan fileScan(TheFs);
-	fileScan.NextL(list);
-
-	if (gRunByBatch)
-		{
-		test(list!=NULL);
-		test(list->Count()==1);
-		TEntry entry=(*list)[0];
-		test(entry.iName.FindF(_L(".BAT"))>=0);
-		delete list;
-		fileScan.NextL(list);
-		}
-
-	test(list!=NULL);
-	TInt count=list->Count();
-	test(count==3);
-	TEntry entry=(*list)[0];
-	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
-	entry=(*list)[1];
-	test(entry.iName.FindF(_L("T_FILE.CPP"))>=0);
-	entry=(*list)[2];
-	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
-	TThreadId threadId=fileScan.ThreadId();
-	RThread current;
-	TThreadId currentId=current.Id();
-	test(threadId==currentId);
-	delete list;
-
-	fileScan.NextL(list);
-	test(list==NULL);
-
-	file1.Close();
-	file2.Close();
-	file3.Close();
-	dir1.Close();	dir2.Close();
-	dir3.Close();	dir4.Close();
-	dir5.Close();	dir6.Close();
-	dir7.Close();	dir8.Close();
-	fs1.Close();	fs2.Close();
-	fs3.Close();	fs4.Close();
-	}
-
-LOCAL_C void Test5()
-//
-// Test OpenFileScan
-//
-	{
-
-	test.Next(_L("Scan for open files - mixed RDirs and RFiles"));
-
-	RFile file1,file2,file3;
-	TFileName fn;
-	fn = _L("Z:\\TEST\\T_FSRV.CPP");
-	fn[0] = gExeFileName[0];
-	TInt r=file1.Open(TheFs,fn,EFileRead|EFileShareReadersOnly);
-	test(r==KErrNone);
-	fn = _L("Z:\\TEST\\T_FILE.CPP");
-	fn[0] = gExeFileName[0];
-	r=file2.Open(TheFs,fn,EFileRead);
-	test(r==KErrNone);
-	fn = _L("Z:\\TEST\\T_FSRV.CPP");
-	fn[0] = gExeFileName[0];
-	r=file3.Open(TheFs,fn,EFileRead|EFileShareReadersOnly);
-	test(r==KErrNone);
-	
-	RDir dir1,dir2,dir3,dir4;
-	fn = _L("Z:\\TEST\\*.XDE");
-	fn[0] = gExeFileName[0];
-	r=dir1.Open(TheFs,fn,KEntryAttMaskSupported);
-	test(r==KErrNone);
-	r=dir2.Open(TheFs,fn,KEntryAttMaskSupported);
-	test(r==KErrNone);
-	r=dir3.Open(TheFs,fn,KEntryAttMaskSupported);
-	test(r==KErrNone);
-	r=dir4.Open(TheFs,fn,KEntryAttMaskSupported);
-	test(r==KErrNone);
-
-	CFileList* list;
-	TOpenFileScan fileScan(TheFs);
-	fileScan.NextL(list);
-
-	if (gRunByBatch)
-		{
-		test(list!=NULL);
-		test(list->Count()==1);
-		TEntry entry=(*list)[0];
-		test(entry.iName.FindF(_L(".BAT"))>=0);
-		delete list;
-		fileScan.NextL(list);
-		}
-
-	test(list!=NULL);
-	TInt count=list->Count();
-	test(count==3);
-	TEntry entry=(*list)[0];
-	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
-	entry=(*list)[1];
-	test(entry.iName.FindF(_L("T_FILE.CPP"))>=0);
-	entry=(*list)[2];
-	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
-	TThreadId threadId=fileScan.ThreadId();
-	RThread current;
-	TThreadId currentId=current.Id();
-	test(threadId==currentId);
-	delete list;
-
-	fileScan.NextL(list);
-	test(list==NULL);
-
-	file1.Close();
-	file2.Close();
-	file3.Close();
-	dir1.Close();
-	dir2.Close();
-	dir3.Close();
-	dir4.Close();
-	}
-
-
-
-LOCAL_C void MultipleSessions(TInt aDrive, RTest& aTest)
-//
-//	Create an array of fileserver sessions
-//	Create an array of TMultipleSessionTest objects 
-//
-	
-	{
-#if defined(UNICODE)
-	const TInt maxNumberSessions=10;	
-#else
-	const TInt maxNumberSessions=20;
-#endif
-
-	RFs session[maxNumberSessions];
-	TMultipleSessionTest testObject[maxNumberSessions];
-	TInt i=0;
-	TInt r;
-
-	for (; i<maxNumberSessions; i++)
-		{
-		r=session[i].Connect();
-		test(r==KErrNone);
-		testObject[i].Initialise(session[i]);
-		testObject[i].SetSessionPath(aDrive);
-		testObject[i].RunTests(aTest);		//	Run the set of tests for each session
-		}									//	Leave each session open
-											
-
-	for (i=0; i<(maxNumberSessions-1); i++)
-		{
-	//	Alternate tests between open sessions
-		testObject[i].testSetVolume(aTest);
-		testObject[i+1].testInitialisation(aTest);
-		testObject[i].testSubst(aTest);
-		testObject[i+1].testInitialisation(aTest);
-		testObject[i].testInitialisation(aTest);
-		testObject[i].testDriveList(aTest);
-		testObject[i].MakeAndDeleteFiles(aTest);
-	//	Close session[i] and check that session[i+1] is OK	
-		session[i].Close();	
-		testObject[i+1].testInitialisation(aTest);
-		testObject[i+1].testSetVolume(aTest);
-		testObject[i+1].testInitialisation(aTest);
-		testObject[i+1].testSubst(aTest);
-		testObject[i+1].testDriveList(aTest);
-	//	Reconnect session[i]	
-		r=session[i].Connect();
-		test(r==KErrNone);
-		testObject[i].Initialise(session[i]);
-		testObject[i].SetSessionPath(aDrive);
-		testObject[i].testSetVolume(aTest);
-		testObject[i+1].testInitialisation(aTest);
-		testObject[i].testSubst(aTest);
-		testObject[i+1].testInitialisation(aTest);
-		testObject[i].testInitialisation(aTest);
-		testObject[i].testDriveList(aTest);
-	//	Close session[i+1] and check that session[i] is OK
-		session[i+1].Close();	
-		testObject[i].testInitialisation(aTest);
-		testObject[i].testSetVolume(aTest);
-		testObject[i].testInitialisation(aTest);
-		testObject[i].testSubst(aTest);
-		testObject[i].testDriveList(aTest);
-	//	Reconnect session[i+1]	
-		r=session[i+1].Connect();
-		test(r==KErrNone);
-		testObject[i+1].Initialise(session[i+1]);
-		testObject[i+1].SetSessionPath(aDrive);
-		testObject[i].testSetVolume(aTest);
-		testObject[i+1].testInitialisation(aTest);
-		testObject[i].testSubst(aTest);
-		testObject[i+1].testInitialisation(aTest);
-	//	Close session[i] and check that session[i+1] is OK	
-		session[i].Close();	
-		testObject[i+1].testInitialisation(aTest);
-		testObject[i+1].testSetVolume(aTest);
-		testObject[i+1].testInitialisation(aTest);
-		testObject[i+1].testSubst(aTest);
-		testObject[i+1].testDriveList(aTest);
-		
-		if (i==maxNumberSessions-1)	//	Tidy up by closing remaining open session
-			{
-			session[i+1].Close();	
-			}
-		}
-	}
-
-GLDEF_C void CallTestsDefaultL(TInt aDrive)
-//
-// Call tests that may leave
-//
-	{
-	Test0(test);
-	Test1();		
-	Test2();
-	Test3();
-	Test4();
-	Test5();
-	MultipleSessions(aDrive,test);
-	}
-
-GLDEF_C void CallTestsXL(TInt aDrive)
-//
-// Call tests for drive X
-//
-	{
-	Test0(testx);
-
-	RFile file1;
-	TFileName fn;
-	fn = _L("Z:\\TEST\\T_FSRV.CPP");
-	fn[0] = gExeFileName[0];
-	TInt r=file1.Open(TheFs,fn,EFileRead|EFileShareReadersOnly);
-	testx(r==KErrNone);
-	file1.Close();
-	MultipleSessions(aDrive,testx);
-	}
-
-GLDEF_C void CallTestsYL(TInt aDrive)
-//
-// Call tests for drive Y
-//
-	{
-	Test0(testy);
-
-	RFile file1;
-	TFileName fn;
-	fn = _L("Z:\\TEST\\T_FSRV.CPP");
-	fn[0] = gExeFileName[0];
-	TInt r=file1.Open(TheFs,fn,EFileRead|EFileShareReadersOnly);
-	testy(r==KErrNone);
-	file1.Close();
-	MultipleSessions(aDrive,testy);
-	}
-
-GLDEF_C void CallTestsQL(TInt aDrive)
-//
-// Call tests for remote drive
-//
-	{
-
-	Test0(testq);
-	
-	testq.Printf(_L("This may take some time.  Please be patient...\n"));
-	
-	testq.Next(_L("Test remote drive with multiple sessions"));
-	MultipleSessions(aDrive,testq);
-
-	const TInt numberOfTests=10;
-	
-	TPtrC record[numberOfTests];
-	
-	TInt i=0;
-	for (;i<numberOfTests;i++)
-		{
-		if (i%2)
-			record[i].Set(_L("Hubble_Bubble"));
-		else
-			record[i].Set(_L("Toil_and_Trouble"));
-		}
-	
-	testq.Next(_L("Create a file 'TEXTFILE.TXT' on the remote drive"));
-	RFile f;
-	TInt r=f.Replace(TheFs,_L("TEXTFILE.TXT"),0);
-	testq(r==KErrNone);
-	TFileText textFile;
-	textFile.Set(f);
-	
-	testq.Next(_L("Write to 'TEXTFILE.TXT'"));
-	
-	for (i=0;i<numberOfTests;i++)
-		{
-		r=textFile.Write(record[i]);
-		testq(r==KErrNone);
-		testq.Printf(_L("Write %d completed OK\n"),i+1);
-		}
-	
-	f.Close();
-
-	RFile file1;
-	r=file1.Open(TheFs,_L("Q:\\TEST\\T_FSRV.CPP"),EFileRead|EFileShareReadersOnly);
-	testq(r==KErrNone);
-	file1.Close();	
-
-	}
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/fs/svphostdir.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,175 +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:
-*
-*/
-
-#include <f32file.h>
-#include <f32fsys.h>
-#include <f32ver.h>
-#include <e32uid.h>
-
-#include "svphostfsy.h"
-
-//////////////////////////////////////////////////////////////////////////
-//	CSVPHostDirCB							//
-//////////////////////////////////////////////////////////////////////////	
-
-CSVPHostDirCB::CSVPHostDirCB(/*CSessionFs* aSession*/)
-//
-// Constructor
-//
-        : CDirCB(/*aSession*/),iEntry()
-	{
-	__DECLARE_NAME(_S("CSVPHostDirCB"));
-	}
-
-CSVPHostDirCB::~CSVPHostDirCB()
-//
-// Destructor
-//
-	{
-	DP(_L("** (SVPHOSTDIR) CSVPHostDirCB::~CSVPHostDirCB"));
-
-	if ((TInt)iHandle == KErrBadHandle) return;
-
-	SVP_HOST_FS_DEVICE().DirClose(Drive().DriveNumber(), iHandle);
-	}
-
-TBool CSVPHostDirCB::MatchUid()
-//
-// Match the uid ?
-//
-	{
-	if (iUidType[0]!=TUid::Null() || iUidType[1]!=TUid::Null() || iUidType[2]!=TUid::Null())
-		return(ETrue);
-	return(EFalse);
-	}
-
-void fileTimeToTime(TUint32 t,TTime& aTime, TFileTimeType aType)
-//
-//	Convert a time (in seconds from the epoc) into a TTIME
-//
-	{
-	TInt64 at =((TInt64)t) * 1000000;
-	TTime time = TTime(at);
-	if (aType == EWindows) 
-		{
-		time += TTimeIntervalYears(1970);
-		time += TTimeIntervalDays(1);
-		}
-	aTime=time;
-	}
-
-LOCAL_C TBool CompareUid(const TUidType& aUidTrg, const TUidType& aUidSuitor)
-//
-// Compare the suitor to the target pattern
-//
-	{
-	
-	if (aUidTrg[0]!=TUid::Null() && aUidTrg[0]!=aUidSuitor[0])
-		return(EFalse);
-	if (aUidTrg[1]!=TUid::Null() && aUidTrg[1]!=aUidSuitor[1])
-		return(EFalse);
-	if (aUidTrg[2]!=TUid::Null() && aUidTrg[2]!=aUidSuitor[2])
-		return(EFalse);
-	return(ETrue);
-	}
-
-
-void CSVPHostDirCB::ReadL(TEntry& anEntry)
-//
-//	Read the next entry from the directory
-//
-	{
-	DP(_L("** (SVPHOSTDIR) CSVPHostDirCB::ReadL"));
-
-	TUint driveNumber = Drive().DriveNumber() ; 
-	FOREVER
-		{
-		if (!iPending)
-			{
-			TSVPHostFsDirReadInfo info(driveNumber, iHandle);
-			User::LeaveIfError(SVP_HOST_FS_DEVICE().DirRead(info));
-
-			TPtr name((TUint16 *)&info.iName[0], info.iLength, KMaxPath);
-
-			if (name==_L(".") || name==_L(".."))
-			  continue;
-
-			iEntry.iName = name;
-			iEntry.iAtt=info.iAtt&KEntryAttMaskSupported;
-			iEntry.iSize=info.iSize;
-			fileTimeToTime(info.iModified,iEntry.iModified, info.iTimeType);
-			DP(_L("%S %d %x %x"), &name, iEntry.iAtt, iEntry.iSize, iEntry.iModified);
-			}
-		iPending=EFalse;
-		anEntry=iEntry;
-		if ((iFullName.NameAndExt()==_L("*.*") || anEntry.iName.MatchF(iFullName.NameAndExt())!=KErrNotFound) 
-		    && Mount().MatchEntryAtt(anEntry.iAtt&KEntryAttMaskSupported,iAtt))
-			{
-			if (MatchUid())
-				{
-				TParse fileName;
-				TBuf<KMaxFileName> path=iFullName.Path();
-				fileName.Set(anEntry.iName,&path,NULL);
-				(*(CSVPHostMountCB*)&Mount()).ReadUidL(fileName.FullName(),anEntry);
-				if (CompareUid(iUidType,anEntry.iType))
-					break;
-				}
-			else
-				break;
-			}
-		break;
-		}
-
-	if ((iAtt&KEntryAttAllowUid)==0 || anEntry.iAtt&KEntryAttDir || MatchUid())
-		return;
-	TParse fileName;
-	TBuf<KMaxFileName> path=iFullName.Path();
-	fileName.Set(anEntry.iName,&path,NULL);
-	(*(CSVPHostMountCB*)&Mount()).ReadUidL(fileName.FullName(),anEntry);
-
-	return;
-	}
-
-
-//////////////////////////////////////////////////////////////////////////
-// CSVPHostFormatCB							//
-//////////////////////////////////////////////////////////////////////////	
-
-CSVPHostFormatCB::CSVPHostFormatCB(/*CSessionFs* aSession*/)//???JCS
-//
-// Constructor
-//
-	: CFormatCB(/*aSession*/)
-	{
-	__DECLARE_NAME(_S("CSVPHostFormatCB"));
-	}
-
-CSVPHostFormatCB::~CSVPHostFormatCB()
-//
-// Destructor
-//
-	{}
-
-void CSVPHostFormatCB::DoFormatStepL()
-//
-// Do Formatting
-//
-	{
-	iCurrentStep=0;
-	User::Leave(KErrNotSupported);
-	}
-
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/fs/svphostfil.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,213 +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:
-*
-*/
-
-#include <f32file.h>
-#include <f32fsys.h>
-#include <f32ver.h>
-#include <e32uid.h>
-
-#include "svphostfsy.h"
-
-
-
-//////////////////////////////////////////////////////////////////////////
-//	CSVPHostFileCB							//
-//////////////////////////////////////////////////////////////////////////	
-
-CSVPHostFileCB::CSVPHostFileCB()
-//
-// Constructor
-//
-	{
-	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::CSVPHostFileCB()"));
-
-	__DECLARE_NAME(_S("CSVPHostFileCB"));
-	}
-
-CSVPHostFileCB::~CSVPHostFileCB()
-//
-// Destructor
-//
-	{
-	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::~CSVPHostFileCB()"));
-	if ((TInt)iHandle == KErrBadHandle) return;
-	
-	SVP_HOST_FS_DEVICE().FileClose(Drive().DriveNumber(), iHandle);
-	}
-
-TBool CSVPHostFileCB::IsRomDrive() const
-//
-// Returns ETrue if the drive number == EDriveZ
-//
-	{
-	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::IsRomDrive()"));
-	return(EFalse);
-	}
-
-
-void CSVPHostFileCB::CheckPos(TInt /*aPos*/)
-	{
-	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::CheckPos()"));
-	}
-
-void CSVPHostFileCB::ReadL(TInt aPos,TInt& aLength ,const TAny* aDes , const RMessagePtr2& aMessage)
-	{
-	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::ReadL(%d,%d)"), aPos, aLength);
-
-	TInt n = 0;
-	TInt pos=aPos;
-	TInt len=aLength;
-	TBuf8<0x400> buf;
-
-	if (aMessage.Handle() == KLocalMessageHandle)
-		((TPtr8* )aDes)->SetLength(0);
-
-	TUint driveNumber = Drive().DriveNumber() ; 
-	while (len)
-		{
-		TInt s=Min(len,buf.MaxLength());
-		TSVPHostFsFileReadInfo info(driveNumber, iHandle,s,pos+n,(char*)buf.Ptr());
-
-		DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::ReadL pos %d s %d p 0x%08x"), pos+n, s, buf.Ptr());
-
-		User::LeaveIfError(SVP_HOST_FS_DEVICE().FileRead(info));
-
-		DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::ReadL read %d bytes"), info.iLength);
-
-		buf.SetLength(info.iLength);
-
-		DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::ReadL set buf length"));
-
-		if (aMessage.Handle() == KLocalMessageHandle)
-		        ((TPtr8* )aDes)->Append(buf);
-		else
-		        aMessage.WriteL(0,buf,n);
-		
-		n+=info.iLength;
-
-		if (((TInt)info.iLength)<s)
-		        break;
-		len-=info.iLength;
-		}
-	aLength=n;
-	iCurrentPos=n+aPos;
-	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::ReadL aLength %d iCurrentPos %d"), aLength, iCurrentPos);
-	}
-
-
-
-void CSVPHostFileCB::WriteL(TInt aPos, TInt& aLength, const TAny* aDes, const RMessagePtr2& aMessage)
-	{
-	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::WriteL(%d,%d)"), aPos, aLength);
-
-	TInt n=0;
-	TInt pos=aPos;
-	TInt len=aLength;
-	TBuf8<0x400> buf;
-	TUint driveNumber = Drive().DriveNumber() ; 
-	while (len)
-		{
-		TInt s=Min(len,buf.MaxLength());
-
-		if (aMessage.Handle() == KLocalMessageHandle)
-			buf.Copy( ((TPtr8* )aDes)->MidTPtr(n, s) );
-		else
-			aMessage.ReadL(0,buf,n);
-
-		TSVPHostFsFileWriteInfo info(driveNumber, iHandle,s,pos+n,(char*)buf.Ptr());
-
-		DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::WriteL pos %d s %d p 0x%08x"), pos+n, s, buf.Ptr());
-
-		User::LeaveIfError(SVP_HOST_FS_DEVICE().FileWrite(info));
-
-		DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::WriteL wrote %d bytes"), info.iLength);
-
-		if (((TInt)info.iLength)<s) 
-		  {
-		    DP(_L("** (SVPHOSTFIL) !!! CSVPHostFileCB::WriteL failed to write s %d bytes"), s);
-			User::Leave(KErrCorrupt);
-		  }
-
-		len-=info.iLength;
-		n+=info.iLength;
-		}
-	aLength=n;
-	iCurrentPos=n+aPos;
-	}
-
-TInt CSVPHostFileCB::Address(TInt& /*aPos*/) const
-//
-//	If ROM file, do a memory map and return the address
-//	Dummy implementation
-//
-	{
-	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::Address()"));
-	return(KErrNone);
-	}
-
-void CSVPHostFileCB::SetSizeL(TInt aSize)
-//
-//	Set the file size
-//
-	{
-	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::SetSizeL()"));
-	
-	TSVPHostFsFileSetSizeInfo info(Drive().DriveNumber(), iHandle,aSize);
-
-	User::LeaveIfError(SVP_HOST_FS_DEVICE().FileSetSize(info));
-
-	}
-
-
-void CSVPHostFileCB::SetEntryL(const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask)
-// TODO: Not tested
-	{
-	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::SetEntryL()"));
-	//User::Leave(KErrNotSupported);
-	}
-
-void CSVPHostFileCB::FlushAllL()
-//
-// Commit any buffered date to the media.
-//
-	{
-	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::FlushAll()"));
-
-	User::LeaveIfError(SVP_HOST_FS_DEVICE().FlushAll(Drive().DriveNumber()));
-	}
-
-
-void CSVPHostFileCB::FlushDataL()
-//
-//	Commit any buffered date to the media
-//	Dummy implementation of a pure virtual function
-//
-	{
-	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::FlushDataL()"));
-	  
-	User::LeaveIfError(SVP_HOST_FS_DEVICE().FlushData(Drive().DriveNumber()));
-	}
-
-void CSVPHostFileCB::RenameL(const TDesC& /*aNewName*/)
-//
-//	Rename the file while open
-//	Dummy implementation of a pure virtual function
-//
-	{
-	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::RenameL()"));
-
-	}
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/fs/svphostfsstart.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +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:
-*
-*/
-
-#include <e32std.h>
-#include <f32fsys.h>
-
-_LIT(KEStartPanicCatagory, "SVP_HOSTFS_SYSSTART");
-
-enum TEStartPanic
-    {
-    ELitNoDM = 1,                           // No Domain Manager
-    ELitDMInitFail,                         // Domain Manager init fail
-    ELitHALFail,                            // HAL init fail
-    ELitConnectFsFail1,                     // Connect fs 1 fail
-    ELitInitLocalPwStoreFail,               // Init PwStore fail
-    ELitLocaleInitialisationFail,           // Initialisation of locale properties failed
-    ELitFSInitDriveInfoFail,                // FS Init DriveInfo fail
-    ELitCreateTrapHandlerFail,              // Create trap handler fail
-    ELitLoadSysLddsFail,                    // Load sys ldds fail
-    ELitLocalDriveMappingFail,              // Local drive mapping fail
-    ELitDriveMappingFileFail,               // Drive mapping file not found
-    ELitSwapMappingFailArrayInconsistent,   // Swap mappings fail - array inconsistent
-    ELitFsSwapMappingFail,                  // Swap mappings fail - Fs request failed
-    EPropertyError,                         // RProperty return error
-    ECompMountFsFail,                       // Failed comp fs mount
-    EFsNameFail,                            // File system name on Z: failed
-    ELitNoWS,                               // No WSERV
-    EStartupModeFail,                       // Get startup mode failed
-    ESysAgentFail,                          // Fail to launch system agent
-    ESetSystemDriveFail                     // Fail to set System Drive
-    };
-
-inline void Panic(TEStartPanic aPanic, TInt aReason)
-    {
-    TBuf<10> panic(KEStartPanicCatagory);
-    panic.AppendFormat(_L("_%d"), aPanic);
-    User::Panic(panic, aReason);
-    }
-
-_LIT(KServerPathSysBin, "0:\\Sys\\Bin\\");
-_LIT(KWindowServerRootName1,"EWSRV.EXE");	
-_LIT(KHostFSMounter, "z:\\sys\\bin\\SVPHOSTFS.EXE");
-
-TBool CreateServer(const TDriveList& aDrives, const TDesC& aRootName)
-	{
-	RProcess ws;
-	TInt r=ws.Create(aRootName, KNullDesC);
-	if (r!=KErrNone)
-		{
-		TFileName name;
-		name = KServerPathSysBin();
-		name+=aRootName;
-		TInt i=EDriveZ;
-		FOREVER
-			{
-			i= (i==0) ? EDriveZ : i-1;
-			if (aDrives[i]!=KDriveAbsent) // Got a valid drive
-				{
-				name[0]=(TUint32)('A'+i); // Set the drive letter
-				r=ws.Create(name,KNullDesC);
-				if (r==KErrNone)
-					break;
-				}
-			if (i==EDriveZ)
-				return EFalse;
-			}
-		}
-	ws.Resume();
-	ws.Close();
-	return ETrue;
-	}
-
-GLDEF_C TInt E32Main()
-        {
-	RProcess ws;
-	TInt r=ws.Create(KHostFSMounter, KNullDesC);
-	if (r == KErrNone)
-	        {
-		TRequestStatus stat;
-		ws.Rendezvous(stat);
-		ws.Resume();
-		User::WaitForRequest(stat);		// wait for start or death
-		ws.Close();
-		}
-	// Start the window server 
-	RFs aFs;
-	r = aFs.Connect();
-
-	if (r != KErrNone)
-	        Panic(ELitConnectFsFail1, r);
-	TDriveList list;
-	aFs.DriveList(list);
-	aFs.Close();
-
-	if (!CreateServer(list,KWindowServerRootName1))
-	        Panic(ELitNoWS,KErrNotFound);
-
-	return(KErrNone);
-	}	
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/fs/svphostfsy.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,158 +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:
-*
-*/
-
-#include <f32file.h>
-#include <f32fsys.h>
-#include <f32ver.h>
-#include <e32uid.h>
-
-#include "svphostfsy.h"
-
-//////////////////////////////////////////////////////////////////////////
-// CSVPHostFileSystem	                                                //
-//////////////////////////////////////////////////////////////////////////	
-
-CSVPHostFileSystem::CSVPHostFileSystem()
-//
-// Constructor
-//
-	{
-	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::CSVPHostFileSystem()"));
-	__DECLARE_NAME(_S("CSVPHostFileSystem"));
-	}
-
-CSVPHostFileSystem::~CSVPHostFileSystem()
-//
-// Destructor
-//
-	{
-	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::~CSVPHostFileSystem"));
-	iDevice.Close();
-	}
-
-
-
-TInt CSVPHostFileSystem::Install()
-//
-// Install the file system.
-//
-	{
-	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::Install()"));
-
-	// Open the device
-	RSVPHostFsDriver device;
-	TInt err = device.Open();
-
-	if (KErrNone != err)
-		return err;
-
-	iVersion=TVersion(KMajorVersionNumber,KMinorVersionNumber,KF32BuildVersionNumber);
-	TPtrC name=_L("SVPHOSTFSY");
-	
-	return(SetName(&name));
-	}
-
-CMountCB* CSVPHostFileSystem::NewMountL(/*CSessionFs* aSession*/) const
-//
-// Create a new mount control block.
-//
-	{
-	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::NewMountL()"));
-	return(new(ELeave) CSVPHostMountCB);
-	}
-
-CFileCB* CSVPHostFileSystem::NewFileL(/*CSessionFs* aSession*/) const
-//
-// Create a new file.
-//
-	{
-	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::NewFileL()"));
-	return(new(ELeave) CSVPHostFileCB);
-	}
-
-CDirCB* CSVPHostFileSystem::NewDirL(/*CSessionFs* aSession*/) const
-//
-// Create a new directory lister.
-//
-	{
-	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::NewDirL()"));
-	return(new(ELeave) CSVPHostDirCB(/*aSession*/));
-	}
-
-CFormatCB* CSVPHostFileSystem::NewFormatL(/*CSessionFs* aSession*/) const
-//
-// Create a new media formatter.
-//
-	{
-	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::NewFormatL()"));
-	return(new(ELeave) CSVPHostFormatCB(/*aSession*/));
-	}
-
-TInt CSVPHostFileSystem::DefaultPath(TDes& aPath) const
-//
-// Return the initial default path.
-//
-	{
-	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::DefaultPath()"));
-	aPath=_L("\\");
-	return(KErrNone);
-	}
-
-
-CFileSystem* CSVPHostFileSystem::NewL()
-//
-//	Factory for CSVPHostFileSystem
-//
-	{
-	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::NewL()"));
-	CSVPHostFileSystem* svpHostFsy=new(ELeave) CSVPHostFileSystem();
-	return svpHostFsy;
-	}
-
-
-void CSVPHostFileSystem::DriveInfo(TDriveInfo& anInfo,TInt aDriveNumber) const
-//
-// Return the drive info iDriveAtt  && iBatteryState already set
-//
-	{
-	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::DriveInfo()"));
-
-	/* !@! TODO: are these the best values? */
-	anInfo.iMediaAtt=KMediaAttVariableSize;
-	anInfo.iType=EMediaRam;
-#if 0
-	// !@! can't execute from remote drives
-	anInfo.iDriveAtt=KDriveAttRemote;
-#endif
-	anInfo.iDriveAtt=KDriveAttLocal|KDriveAttInternal;
-	}
-
-
-extern "C" {
-
-EXPORT_C CFileSystem* CreateFileSystem()
-//
-// Create a new file system
-//
-	{
-	DP(_L("** (SVPHOSTFSY) CreateFileSystem()"));
-
-	return(CSVPHostFileSystem::NewL());
-	}
-}
-
-
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/fs/svphostfsy.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,202 +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: Based on the test code under f32test\fsstress
-*
-*/
-
-#if !defined(__SVPHOSTFSY_H__)
-#define __SVPHOSTFSY_H__
-
-#include <f32fsys.h>
-#include <f32file.h>
-#include <e32test.h>
-#include <e32hal.h>
-#include <e32math.h>
-#include <f32dbg.h>
-
-#include <rsvphostfsdriver.h>
-
-//
-// Common constants used by both EFSRV and the filesystems
-//
-
-const TUint KEntryAttIllegal=(KEntryAttVolume|KEntryAttDir);
-const TUint KEntryAttModified=0x20000000;
-const TUint KEntryAttMustBeFile=0x80000000;
-const TInt KCurrentPosition=KMinTInt;
-
-
-GLDEF_D const TInt KMaxParses=7;
-GLDEF_D const TInt KHeapSize=0x2000;
-GLREF_C void TurnAllocFailureOff();
-GLREF_C void TurnAllocFailureOn();
-GLREF_C void ReportCheckDiskFailure(TInt aRet);
-GLREF_D RTest test;
-GLREF_D TFileName gSessionPath;
-GLREF_D TInt gAllocFailOff;
-GLREF_D TInt gAllocFailOn;
-
-#if defined(_DEBUG)
-#define SetAllocFailure(a) SetAllocFailure(a)
-#else
-#define SetAllocFailure(a) IsRomAddress(NULL)
-#define KAllocFailureOn 0
-#define KAllocFailureOff 0
-#endif
-
-// Debug virtual host file service - uncomment define below
-//#define SVPDBG
-#ifdef SVPDBG
-IMPORT_C TUint32 DebugRegister();
-#define DP(format...) { if (DebugRegister()&KFSYS) RDebug::Print(format);}
-#else
-#define DP(format...)
-#endif
-
-#define SVP_HOST_FS_DEVICE() (((CSVPHostMountCB&)Mount()).Device())
-#define SVP_HOST_FS_DEVICE_ID 0xc51d0008
-
-enum TPanic
-	{
-	EFileTimeToSystemTime,
-	EFileClose,
-	EFileCloseSetAttributes,
-	EDirClose,
-	EMapCouldNotConnect
-	};
-
-// utility to convert file system times to TTime format
-void fileTimeToTime(TUint32 t,TTime& aTime, TFileTimeType aType);
-
-// utility to produce a canonicalized pathname (i.e. with a drive letter) suitable to pass to the FS device.
-
-void CanonicalizePathname(const TDesC& aName, TInt aDrive, THostFileName& aHostName);
-
-class CSessionFs;
-
-class CSVPHostMountCB : public CMountCB
-	{
-public:
-	CSVPHostMountCB();
-	~CSVPHostMountCB();
-	void MountL(TBool aForceMount);
-	TInt ReMount();
-	void Dismounted();
-	void VolumeL(TVolumeInfo& aVolume) const;
-	void SetVolumeL(TDes& aName);
-	void MkDirL(const TDesC& aName);
-	void RmDirL(const TDesC& aName);
-	void DeleteL(const TDesC& aName);
-	void RenameL(const TDesC& anOldName,const TDesC& anNewName);
-	void ReplaceL(const TDesC& anOldName,const TDesC& anNewName);
-	void EntryL(const TDesC& aName,TEntry& anEntry) const;
-	void SetEntryL(const TDesC& aName,const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask);
-	void FileOpenL(const TDesC& aName,TUint aMode,TFileOpen anOpen,CFileCB* aFile);
-	void DirOpenL(const TDesC& aName,CDirCB* aDir);
-	void RawReadL(TInt64 aPos,TInt aLength,const TAny* aTrg,TInt anOffset,const RMessagePtr2& aMessage) const;
-	void RawWriteL(TInt64 aPos,TInt aLength,const TAny* aSrc,TInt anOffset,const RMessagePtr2& aMessage);
-	void ReadUidL(const TDesC& aName,TEntry& anEntry) const;
-	void GetShortNameL(const TDesC& aLongName,TDes& aShortName);
-	void GetLongNameL(const TDesC& aShortName,TDes& aLongName);
-	void IsFileInRom(const TDesC& aFileName,TUint8*& aFileStart);
-	void ReadSectionL(const TDesC& aName,TInt aPos,TAny* aTrg,TInt aLength,const RMessagePtr2& aMessage);
-
-	inline const CSVPHostMountCB& Mount() const { return *this; }
-	inline RSVPHostFsDriver& Device() { return iDevice; }
-	
-
-private:
-	TBool IsRomDrive() const;
-	RSVPHostFsDriver iDevice;
-	};
-
-
-class RConsole;
-class CSVPHostFileCB : public CFileCB
-	{
-public:
-	CSVPHostFileCB();
-	~CSVPHostFileCB();
-	void RenameL(const TDesC& aNewName);
-	void ReadL(TInt aPos,TInt& aLength,const TAny* aDes,const RMessagePtr2& aMessage);
-	void WriteL(TInt aPos,TInt& aLength,const TAny* aDes,const RMessagePtr2& aMessage);
-	TInt Address(TInt& aPos) const;
-	void SetSizeL(TInt aSize);
-	void SetEntryL(const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask);
-	void FlushDataL();
-	void FlushAllL();
-	void CheckPos(TInt aPos);
-	void SetHandle(TUint aHandle) { iHandle = aHandle; }
-	TUint Handle() const { return iHandle; }
-private:
-	TBool IsRomDrive() const;
-private:
-	TInt iCurrentPos;
-	//	TUint8* iFilePtr;
-	TUint iHandle;
-	};
-
-class CSVPHostDirCB : public CDirCB
-	{
-public:
-	CSVPHostDirCB(/*CSessionFs* aSession*/);
-	~CSVPHostDirCB();
-	void ReadL(TEntry& anEntry);
-	inline void SetFullName(const TDesC& aName) {iFullName.Set(aName,NULL,NULL);}
-	inline void SetHandle(TUint32 aHandle) { iHandle = aHandle; }
-
-private:
-	TBool MatchUid();
-public:
-	TEntry iEntry;
-private:
-	TUint32 iHandle;
-	TParse iFullName;
-	};
-
-class CSVPHostFormatCB : public CFormatCB
-	{
-public:
-	CSVPHostFormatCB(/*CSessionFs* aSession*/);
-	~CSVPHostFormatCB();
-public:
-	virtual void DoFormatStepL();
-	};
-
-class CSVPHostFileSystem : public CFileSystem
-	{
-public:
-	CSVPHostFileSystem();
-	~CSVPHostFileSystem();
-	TInt Install();
-	TInt DefaultPath(TDes& aPath) const;
-	void DriveInfo(TDriveInfo& anInfo,TInt aDriveNumber) const;
-private:
-	CMountCB* NewMountL() const;
-	CFileCB* NewFileL() const;
-	CDirCB* NewDirL() const;
-	CFormatCB* NewFormatL() const;
-public:
-	static CFileSystem* NewL();
-
-public:
-	inline RSVPHostFsDriver& Device() { return iDevice; };
-private:
-	RSVPHostFsDriver iDevice;
-	TUint32 iDriveMap[DRIVE_MAP_SIZE];
-	};
-
-#endif
-
-
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/fs/svphostmain.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +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:
-*
-*/
-
-#include <f32file.h>
-#include <e32test.h>
-#include <e32hal.h>
-#include <f32dbg.h>
-
-#include "svphostfsy.h"
-
-#ifdef DP
-#undef DP
-#define DP(f...)
-#endif
-
-_LIT(KSVPHOSTFSY, "SVPHOSTFSY");
-
-#if 1
-GLDEF_C TInt E32Main()
-    {
-	CTrapCleanup* cleanup;
-	cleanup=CTrapCleanup::New();
-
-	RSVPHostFsDriver driver;
-
-	TInt r = driver.Open();
-
-	if (r != KErrNone)
-	  {
-	    delete cleanup;
-	    return(r);
-	  }
-
-	TUint32 driveMap[DRIVE_MAP_SIZE];
-
-	r = driver.GetDriveMap(driveMap);
-
-	driver.Close();
-	 
-	if (r != KErrNone)
-	  {
-	    delete cleanup;
-	    return(r);
-	  }
-
-	RFs aFs;
-	r=aFs.Connect();
-
-	if (r != KErrNone) goto fail;
-
-	r=aFs.AddFileSystem(KSVPHOSTFSY);
-
-	if (r != KErrNone) goto close;
-
-	for (TInt i = 0; i < DRIVE_MAP_SIZE ; i++ )
-	        {
-	        if (driveMap[i]) 
-		        {
-			char driveLetter = LOWEST_DRIVE + i;
-			TInt driveNumber = driveLetter - 'A';
-			DP(_L(" Drive %c to be mounted\n"), driveLetter);
-			r = aFs.MountFileSystem(KSVPHOSTFSY,driveNumber);
-			DP(_L("aFs.MountFileSystem(KSVPHOSTFSY, %c) -> %d"), driveNumber, r);
-			if (r != KErrNone) goto close;
-			}
-		}
-
-close:
-	aFs.Close();
-
-fail:
-	delete cleanup;
-	return(r);
-    }
-
-#else
-
-GLDEF_C TInt E32Main()
-    {
-	CTrapCleanup* cleanup;
-	cleanup=CTrapCleanup::New();
-
-	RSVPHostFsDriver driver;
-
-	TInt r = driver.Open();
-
-	if (r != KErrNone){
-	  delete cleanup;
-	  return(r);
-	}
-
-	RFs aFs;
-	r=aFs.Connect();
-
-	r=aFs.AddFileSystem(KSVPHOSTFSY);
-	DP(_L("r=aFs.AddFileSystem(KSVPHOSTFSY) -> %d\n"), r);
-
-	// !@!
-	// Until we have 'platform' device driver that we can use hardcode single virtual host drive as 'S'
-	// !@!
-	char driveLetter = 'S';
-	TInt driveNumber = driveLetter - 'A';
-	DP(_L(" Drive %c to be mounted\n"), driveLetter);
-	r = aFs.MountFileSystem(KSVPHOSTFSY,driveNumber);
-	DP(_L("aFs.MountFileSystem(KSVPHOSTFSY, %d) -> %d"), driveNumber, r);
-
-	aFs.Close();
-
-	delete cleanup;
-	return(KErrNone);
-    }
-
-#endif
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/fs/svphostmnt.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,335 +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:
-*
-*/
-
-#include <f32file.h>
-#include <f32fsys.h>
-#include <f32ver.h>
-#include <e32uid.h>
-
-#include "svphostfsy.h"
-
-#define HOST_SVP_DRIVE_SIZE 1024*1024*1024
-#define HOST_SVP_DRIVE_FREE_SIZE 10*1024*1024
-
-LOCAL_C TInt GetMediaSize(TInt /*aDriveNumber*/,TInt64& aSize,TInt64& aFree)
-//
-// Return the size and free space on a drive.
-//
-	{
-        DP(_L("** (SVPHOSTMNT) GetMediaSize"));
-
-	aSize = HOST_SVP_DRIVE_SIZE;
-	aFree = HOST_SVP_DRIVE_FREE_SIZE;
-	return(KErrNone);
-	}
-
-LOCAL_C TInt GetVolume(TInt /*aDriveNumber*/,TDes& aName,TUint& aUniqueID)
-//
-// Return the volume name and uniqueID.
-//
-	{
-        DP(_L("** (SVPHOSTMNT) GetVolume"));
-
-	aUniqueID=1234;
-	aName=(_L("SVPHOSTDRV"));
-	return(KErrNone);	
-	}
-
-void CanonicalizePathname(const TDesC& aName, TInt aDrive, TDes& n, THostFileName& aHostName)
-        {
-	DP(_L("** (SVPHOSTMNT) CanonicalizePathname (%S)"), &aName);
-	n += TDriveUnit(aDrive).Name();
-	n += aName;
-	TParse parse;
-	parse.Set(n,NULL,NULL);
-	n=parse.FullName();
-	aHostName.Copy(n);
-	DP(_L("-> (%S)"), &aHostName);
-	}
-
-void CanonicalizePathname(const TDesC& aName, TInt aDrive, THostFileName& aHostName)
-        {
-	TUint16 buf[KMaxPath];
-	TPtr n(buf, KMaxPath);
-	CanonicalizePathname(aName, aDrive, n, aHostName);
-	}
-
-
-
-//////////////////////////////////////////////////////////////////////////
-//	CSVPHostMountCB							//
-//////////////////////////////////////////////////////////////////////////	
-
-
-CSVPHostMountCB::CSVPHostMountCB()
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::CSVPHostMountCB()"));
-
-	__DECLARE_NAME(_S("CSVPHostMountCB"));
-	}
-
-CSVPHostMountCB::~CSVPHostMountCB()
-	{
-	DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::~CSVPHostMountCB()"));
-	iDevice.Close();
-	}
-
-void CSVPHostMountCB::MountL(TBool /*aForceMount*/)
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::MountL()"));
-
-	TInt err = iDevice.Open();
-	User::LeaveIfError(err);
-
-	TFileName driveName;
-	TInt d=Drive().DriveNumber();
-	iSize=HOST_SVP_DRIVE_SIZE;
-	User::LeaveIfError(GetVolume(d,driveName,iUniqueID));
-	HBufC* pN=driveName.AllocL();
-	DP(_L("** (SVPHOSTMNT) ->SetVolumeName()"));
-	SetVolumeName(pN);
-	DP(_L("** (SVPHOSTMNT) <-SetVolumeName()"));
-
-	}
-
-TInt CSVPHostMountCB::ReMount()
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::ReMount()"));
-
-	TFileName n;
-	TInt d=Drive().DriveNumber();
-	TUint uniqueID;
-	TInt r=GetVolume(d,n,uniqueID);
-	if (r!=KErrNone)
-		return(r);
-	if (n==VolumeName() && uniqueID==iUniqueID)
-		return(KErrNone);
-	return(KErrGeneral);
-	}
-
-void CSVPHostMountCB::Dismounted()
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::Dismounted()"));
-	}
-
-void CSVPHostMountCB::VolumeL(TVolumeInfo& aVolume) const
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::VolumeL()"));
-	TInt64 s,f(0);
-	TFileName n;
-	TInt d=Drive().DriveNumber();
-	User::LeaveIfError(GetMediaSize(d,s,f));
-	aVolume.iFree=f;
-	}
-
-void CSVPHostMountCB::SetVolumeL(TDes& /*aName*/)
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::SetVolumeL()"));
-	User::Leave(KErrNotSupported);
-	}
-
-void CSVPHostMountCB::IsFileInRom(const TDesC& /*aName*/,TUint8*& /*aFileStart*/)
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::IsFileInRom()"));
-	}
-
-void CSVPHostMountCB::MkDirL(const TDesC& aName)
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::MkDirL()"));
-	TBuf<KMaxPath> name;
-	TUint driveNumber = Drive().DriveNumber();
-	CanonicalizePathname(aName, driveNumber, name);
-	TSVPHostFsMkDirInfo info(driveNumber, name, 0777);
-	User::LeaveIfError(SVP_HOST_FS_DEVICE().MkDir(info));
-	}
-
-void CSVPHostMountCB::RmDirL(const TDesC& aName)
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::RmDirL()"));
-	TBuf<KMaxPath> name;
-	TUint driveNumber = Drive().DriveNumber();
-	CanonicalizePathname(aName, driveNumber, name);
-	TSVPHostFsRmDirInfo info(driveNumber, name);
-	User::LeaveIfError(SVP_HOST_FS_DEVICE().RmDir(info));
-	}
-
-void CSVPHostMountCB::DeleteL(const TDesC& aName)
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::DeleteL()"));
-	TBuf<KMaxPath> name;
-	TUint driveNumber = Drive().DriveNumber();
-	CanonicalizePathname(aName, driveNumber, name);
-	TSVPHostFsDeleteInfo info(driveNumber, name);
-	User::LeaveIfError(SVP_HOST_FS_DEVICE().Delete(info));
-	}
-
-void CSVPHostMountCB::RenameL(const TDesC& anOldName,const TDesC& aNewName)
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::RenameL()"));
-	// TODO: do we allow renaming across drives?
-	TBuf<KMaxPath> oldName, newName;
-	TUint driveNumber = Drive().DriveNumber();
-	CanonicalizePathname(anOldName, driveNumber, oldName);
-	CanonicalizePathname(aNewName, driveNumber, newName);
-	TSVPHostFsRenameInfo info(driveNumber, oldName, newName);
-	User::LeaveIfError(SVP_HOST_FS_DEVICE().Rename(info));
-	}
-
-void CSVPHostMountCB::ReplaceL(const TDesC& anOldName,const TDesC& aNewName)
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::ReplaceL()"));
-
-	if(FileNamesIdentical(anOldName,aNewName))
-		{
-		return;
-		}
-	TBuf<KMaxPath> oldName, newName;
-	TUint driveNumber = Drive().DriveNumber();
-	CanonicalizePathname(anOldName, driveNumber, oldName);
-	CanonicalizePathname(aNewName, driveNumber, newName);
-	TSVPHostFsReplaceInfo info(driveNumber, oldName, newName);
-	User::LeaveIfError(SVP_HOST_FS_DEVICE().Replace(info));
-	}
-
-void CSVPHostMountCB::ReadUidL(const TDesC& aName,TEntry& anEntry) const
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::ReadUidL()"));
-	TBuf<KMaxPath> name;
-	TUint driveNumber = Drive().DriveNumber();
-	CanonicalizePathname(aName, driveNumber, name);
-	TSVPHostFsFileOpenInfo fileOpenInfo(driveNumber, name,EFileRead,EFileOpen);
-	TInt err = SVP_HOST_FS_DEVICE().FileOpen(fileOpenInfo);
-
-	User::LeaveIfError(err);
-
-	TBuf8<sizeof(TCheckedUid)> uidBuf;
-	uidBuf.SetLength(sizeof(TCheckedUid));
-
-	TSVPHostFsFileReadInfo fileReadInfo(driveNumber, fileOpenInfo.iHandle,sizeof(TCheckedUid),0,(char*)uidBuf.Ptr());
-
-	if (KErrNone != SVP_HOST_FS_DEVICE().FileRead(fileReadInfo))
-		User::LeaveIfError(SVP_HOST_FS_DEVICE().FileClose(driveNumber, fileOpenInfo.iHandle));
-
-	DP(_L("** (SVPHOSTMNT) CSVPHostFileCB::ReadUidL sizeof(TCheckedUid) %d fileOpenInfo.iLength %d "), sizeof(TCheckedUid), fileReadInfo.iLength);
-
-	if (fileReadInfo.iLength!=sizeof(TCheckedUid))
-	        User::LeaveIfError(SVP_HOST_FS_DEVICE().FileClose(driveNumber, fileOpenInfo.iHandle));
-
-	TCheckedUid uid(uidBuf);
-	anEntry.iType=uid.UidType();
-
-	User::LeaveIfError(SVP_HOST_FS_DEVICE().FileClose(driveNumber, fileOpenInfo.iHandle));
-	}
-
-void CSVPHostMountCB::EntryL(const TDesC& aName,TEntry& anEntry) const
-	{
-	DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::EntryL(%S)"), &aName);
-	TBuf<KMaxPath> name;
-	TUint driveNumber = Drive().DriveNumber();
-	CanonicalizePathname(aName, driveNumber, name);
-	TSVPHostFsEntryInfo info(driveNumber, name);
-	User::LeaveIfError(SVP_HOST_FS_DEVICE().Entry(info));
-	anEntry.iAtt=info.iAtt&KEntryAttMaskSupported;
-	anEntry.iSize=info.iSize;
-	fileTimeToTime(info.iModified,anEntry.iModified, info.iTimeType);
-
-	}
-
-void timeToFileTime(TUint32& t,const TTime& aTime, TFileTimeType aType);
-
-void CSVPHostMountCB::SetEntryL(const TDesC& aName,const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask)
-	{
-	DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::SetEntryL()"));
-
-	//User::Leave(KErrNotSupported);
-	}
-
-void CSVPHostMountCB::FileOpenL(const TDesC& aName,TUint aMode,TFileOpen anOpen,CFileCB* aFile)
-	{
-	DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::FileOpenL(%S)"), &aName);
-	CSVPHostFileCB& file=(*((CSVPHostFileCB*)aFile));
-
-	TBuf<KMaxPath> name;
-	TUint driveNumber = Drive().DriveNumber();
-	CanonicalizePathname(aName, driveNumber, name);
-	TSVPHostFsFileOpenInfo info(driveNumber, name,aMode,anOpen);
-	TInt err = SVP_HOST_FS_DEVICE().FileOpen(info);
-
-	User::LeaveIfError(err);
-
-	file.SetHandle(info.iHandle);
-	file.SetSize(info.iSize);
-	file.SetAtt(info.iAtt&KEntryAttMaskSupported);
-	TTime tempTime=file.Modified();
-	fileTimeToTime(info.iModified, tempTime, info.iTimeType);
-	file.SetModified(tempTime);
-	}
-
-void CSVPHostMountCB::DirOpenL(const TDesC& aName ,CDirCB* aDir)
-	{
-	DP(_L("CFatMountCB::DirOpenL, drv:%d, %S"), DriveNumber(), &aName);
-	CSVPHostDirCB& dir=(*((CSVPHostDirCB*)aDir));
-
-	TBuf<KMaxPath> name;
-	TUint driveNumber = Drive().DriveNumber();
-	CanonicalizePathname(aName, driveNumber, name);
-	TSVPHostFsDirOpenInfo info(driveNumber, name);
-	TInt err = SVP_HOST_FS_DEVICE().DirOpen(info);
-
-	User::LeaveIfError(err);
-
-	dir.SetHandle(info.iHandle);
-	TFileName n(TDriveUnit(Drive().DriveNumber()).Name());
-	n.Append(aName);
-	dir.SetFullName(n);
-	}
-
-void CSVPHostMountCB::RawReadL(TInt64 /*aPos*/,TInt /*aLength*/,const TAny* /*aTrg*/,TInt /*anOffset*/,const RMessagePtr2& /*aMessage*/) const
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::RawReadL()"));
-	User::Leave(KErrNotSupported);
-	}
-
-void CSVPHostMountCB::RawWriteL(TInt64 /*aPos*/,TInt /*aLength*/,const TAny* /*aSrc*/,TInt /*anOffset*/,const RMessagePtr2& /*aMessage*/)
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::RawWriteL()"));
-	User::Leave(KErrNotSupported);
-	}
-
-void CSVPHostMountCB::GetShortNameL(const TDesC& aLongName,TDes& aShortName)
-	{
-	DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::GetShortNameL(%S)"), &aLongName);
-	aShortName = aLongName;
-	}
-
-void CSVPHostMountCB::GetLongNameL(const TDesC& aShortName,TDes& aLongName)
-	{
-	DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::GetLongNameL(%S)"), &aShortName);
-	aLongName = aShortName;
-	}
-
-void CSVPHostMountCB::ReadSectionL(const TDesC& /*aName*/,TInt /*aPos*/,TAny* /*aTrg*/,TInt /*aLength*/,const RMessagePtr2& /*aMessage*/)
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::RawSectionL()"));
-	User::Leave(KErrNotSupported);
-	}
-
-TBool CSVPHostMountCB::IsRomDrive() const
-	{
-        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::IsRomDrive()"));
-	return(EFalse);
-	}
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/inc/rsvphostfsdriver.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,468 +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:
-*
-*/
-
-#ifndef __RSVPHOSTFSDRIVER_H__
-#define __RSVPHOSTFSDRIVER_H__
-
-#include <e32des16.h>
-
-typedef TDes16 THostFileName;
-
-typedef enum 
-	{
-	EUnknown=0,
-	EWindows,
-	EUnix,
-	EMac,
-	} TFileTimeType;
-
-class TSVPHostFsMkDirInfo
-	{
-public:
-	inline TSVPHostFsMkDirInfo() :
-		iDrive(0),
-		iName(0),
-		iLength(0),
-		iFlags(0)
-		{};
-	inline TSVPHostFsMkDirInfo(TUint aDrive, const THostFileName & aName, TUint32 aFlags) :
-		iDrive(aDrive),
-		iName(aName.Ptr()),
-		iLength(aName.Length()),
-		iFlags(aFlags)
-		{};
-public:
-	TUint iDrive; 
-	const TUint16 * iName;
-	TUint32 iLength;
-	TUint32 iFlags;
-	};
-
-class TSVPHostFsRmDirInfo
-	{
-public:
-	inline TSVPHostFsRmDirInfo() :
-		iDrive(0),
-		iName(0),
-		iLength(0)
-		{};
-	inline TSVPHostFsRmDirInfo(TUint aDrive, const THostFileName & aName) :
-		iDrive(aDrive),
-		iName(aName.Ptr()),
-		iLength(aName.Length())
-		{};
-public:
-	TUint iDrive; 
-	const TUint16 * iName;
-	TUint32 iLength;
-	};
-
-class TSVPHostFsDeleteInfo
-	{
-public:
-	inline TSVPHostFsDeleteInfo() :
-		iDrive(0),
-		iName(0),
-		iLength(0)
-		{};
-	inline TSVPHostFsDeleteInfo(TUint aDrive, const THostFileName & aName) :
-		iDrive(aDrive),
-		iName(aName.Ptr()),
-		iLength(aName.Length())
-		{};
-public:
-	TUint iDrive; 
-	const TUint16 * iName;
-	TUint32 iLength;
-	};
-
-class TSVPHostFsRenameInfo
-	{
-public:
-	inline TSVPHostFsRenameInfo() :
-		iDrive(0),
-		iOldName(0),
-		iOldLength(0),
-		iNewName(0),
-		iNewLength(0)
-		{};
-	inline TSVPHostFsRenameInfo(TUint aDrive, const THostFileName & aOldName, const THostFileName & aNewName) :
-		iDrive(aDrive),
-		iOldName(aOldName.Ptr()),
-		iOldLength(aOldName.Length()),
-		iNewName(aNewName.Ptr()),
-		iNewLength(aNewName.Length())
-		{};
-public:
-	TUint iDrive; 
-	const TUint16 * iOldName;
-	TUint32 iOldLength;
-	const TUint16 * iNewName;
-	TUint32 iNewLength;
-	};
-
-class TSVPHostFsReplaceInfo
-	{
-public:
-	inline TSVPHostFsReplaceInfo() :
-		iDrive(0),
-		iOldName(0),
-		iOldLength(0),
-		iNewName(0),
-		iNewLength(0)
-		{};
-	inline TSVPHostFsReplaceInfo(TUint aDrive, const THostFileName & aOldName, const THostFileName & aNewName) :
-		iDrive(aDrive),
-		iOldName(aOldName.Ptr()),
-		iOldLength(aOldName.Length()),
-		iNewName(aNewName.Ptr()),
-		iNewLength(aNewName.Length())
-		{};
-public:
-	TUint iDrive; 
-	const TUint16 * iOldName;
-	TUint32 iOldLength;
-	const TUint16 * iNewName;
-	TUint32 iNewLength;
-	};
-
-class TSVPHostFsEntryInfo
-	{
-public:
-	inline TSVPHostFsEntryInfo() :
-		iDrive(0),
-		iName(0),
-		iLength(0),
-		iAtt(0),
-		iModified(0),
-		iSize(0),
-		iTimeType(EUnknown)
-		{};
-	inline TSVPHostFsEntryInfo(TUint aDrive, const THostFileName & aName) :
-		iDrive(aDrive),
-		iName(aName.Ptr()),
-		iLength(aName.Length()),
-		iAtt(0),
-		iModified(0),
-		iSize(0),
-		iTimeType(EUnknown)
-		{};
-public:
-	TUint iDrive; 
-	const TUint16 * iName;
-	TUint32 iLength;
-	TUint iAtt;
-	TUint32 iModified; // time in seconds since the epoc
-	TInt iSize;
-	TFileTimeType iTimeType;
-	char iHostName[KMaxFileName];
-};
-
-class TSVPHostFsSetEntryInfo
-	{
-public:
-	inline TSVPHostFsSetEntryInfo() :
-		iDrive(0),
-		iName(0),
-		iModified(0),
-		iNewAtt(0),
-		iTimeType(EUnknown)
-		{};
-	inline TSVPHostFsSetEntryInfo(TUint aDrive, const THostFileName & aName, TUint32 aModified, TUint aNewAtt) :
-		iDrive(aDrive),
-		iName(aName.Ptr()),
-		iModified(aModified),
-		iNewAtt(aNewAtt),
-		iTimeType(EUnknown)
-		{};
-public:
-	TUint iDrive; 
-	const TUint16 *iName;
-	TUint32 iModified; // time in seconds since the epoc
-	TUint iNewAtt;
-	TFileTimeType iTimeType;
-	};
-
-class TSVPHostFsDirOpenInfo
-	{
-public:
-	inline TSVPHostFsDirOpenInfo() :
-		iDrive(0),
-		iName(0),
-		iLength(0),
-		iHandle(0)
-		{};
-inline TSVPHostFsDirOpenInfo(TUint aDrive, const THostFileName & aName) :
-		iDrive(aDrive),
-		iName(aName.Ptr()),
-		iLength(aName.Length()),
-		iHandle(0)
-		{};
-public:
-	TUint iDrive; 
-	const TUint16 * iName;
-	TUint32 iLength;
-	TUint32 iHandle;
-	};
-
-#define SVP_HOST_FS_INVALID_FILE_HANDLE -1
-class TSVPHostFsFileOpenInfo
-	{
-public:
-	inline TSVPHostFsFileOpenInfo() :
-		iDrive(0),
-		iName(0),
-		iLength(0), // of file name
-		iMode(0),
-		iOpen(0),
-		iAtt(0),
-		iModified(0), // time in seconds since the epoc
-		iSize(0),     // of file
-		iTimeType(EUnknown),
-		iHandle(SVP_HOST_FS_INVALID_FILE_HANDLE)
-		{};
-	inline TSVPHostFsFileOpenInfo(TUint aDrive, const THostFileName & aName, TUint32 aMode, TUint32 anOpen) :
-		iDrive(aDrive),
-		iName(aName.Ptr()),
-		iLength(aName.Length()),
-		iMode(aMode),
-		iOpen(anOpen),
-		iAtt(0),
-		iModified(0), // time in seconds since the epoc
-		iSize(0),     // of file
-		iTimeType(EUnknown),
-		iHandle(SVP_HOST_FS_INVALID_FILE_HANDLE)
-		{};
-public:
-	TUint iDrive; 
-	const TUint16 * iName;
-	TUint32 iLength;
-	TUint32 iMode;
-	TUint32 iOpen;
-	TUint iAtt;
-	TUint32 iModified; // time in seconds since the epoc
-	TInt iSize;
-	TFileTimeType iTimeType;
-	TInt iHandle;
-	};
-
-class TSVPHostFsFileReadInfo
-	{
-public:
-	inline TSVPHostFsFileReadInfo() :
-		iDrive(0),
-		iHandle(0),
-		iLength(0),
-		iPos(0),
-		iBuf(0)
-		{};
-	inline TSVPHostFsFileReadInfo(TUint aDrive, TUint aHandle,TInt aLength,TInt aPos, char * aBuf):
-		iDrive(aDrive),
-		iHandle(aHandle),
-		iLength(aLength),
-		iPos(aPos),
-		iBuf(aBuf)
-		{};
-public:
-	TUint iDrive; 
-	TUint iHandle;
-	TInt iLength;
-	TInt iPos;
-	char * iBuf;
-	};	
-
-class TSVPHostFsFileWriteInfo
-	{
-public:
-	inline TSVPHostFsFileWriteInfo() :
-		iDrive(0),
-		iHandle(0),
-		iLength(0),
-		iPos(0),
-		iBuf(0)
-		{};
-	inline TSVPHostFsFileWriteInfo(TUint aDrive, TUint aHandle,TInt aLength,TInt aPos, char * aBuf):
-		iDrive(aDrive),
-		iHandle(aHandle),
-		iLength(aLength),
-		iPos(aPos),
-		iBuf(aBuf)
-		{};
-public:
-	TUint iDrive; 
-	TUint iHandle;
-	TInt iLength;
-	TInt iPos;
-	char * iBuf;
-	};
-
-class TSVPHostFsFileSetSizeInfo
-	{
-public:
-	inline TSVPHostFsFileSetSizeInfo() :
-		iDrive(0),
-		iHandle(0),
-		iLength(0)
-		{};
-	inline TSVPHostFsFileSetSizeInfo(TUint aDrive, TUint aHandle, TInt aLength) :
-		iDrive(aDrive),
-		iHandle(aHandle),
-		iLength(aLength)
-		{};
-public:
-	TUint iDrive; 
-	TUint iHandle;
-	TInt iLength;
-	};
-
-class TSVPHostFsDirReadInfo
-{
-public:
-	inline TSVPHostFsDirReadInfo() :
-		iDrive(0),
-		iHandle(0),
-		iLength(0),
-		iAtt(0),
-		iModified(0),
-		iSize(0),
-		iTimeType(EUnknown)
-		{};
-	inline TSVPHostFsDirReadInfo(TUint aDrive, TUint32 aHandle) :
-		iDrive(aDrive),
-		iHandle(aHandle),
-		iLength(-1),
-		iAtt(0),
-		iModified(666),
-		iSize(-1),
-		iTimeType(EUnknown)
-		{};
-public:
-	TUint iDrive; 
-	TUint32 iHandle;
-	TInt iLength;
-	TUint16 iName[KMaxPath];
-	TUint iAtt;
-	TUint32 iModified; // time in seconds since the epoc
-	TInt iSize;
-	TFileTimeType iTimeType;
-	};
-
-class TCapsSVPHostFsDriver
-	{
-public:
-	TVersion	iVersion;
-	};
-
-_LIT(KSVPHostFsDriverName,"SVP Host Filesystem Driver");
-_LIT(KSVPHostFsDriverLDD, "svphostfsdriver.ldd");
-
-// Version information
-const TInt KMajorVersionNumber=0;
-const TInt KMinorVersionNumber=0;
-const TInt KBuildVersionNumber=1;
-
-// keep in sync with the definitions in QEMU/hw/svphostfs.c 
-#define LOWEST_DRIVE 'A'
-#define HIGHEST_DRIVE 'Z'
-#define DRIVE_MAP_SIZE (HIGHEST_DRIVE - LOWEST_DRIVE + 1)
-
-class RSVPHostFsDriver : public RBusLogicalChannel
-	{
-public:
-
-	enum TControl
-		{
-		EDummu = 0,
-
-		// Codes for CMountCB operations
-		EMkDir,
-		ERmDir,
-		EDelete,
-		ERename,
-		EReplace,
-		EReadUid,
-		EEntry,
-		ESetEntry,
-		EFileOpen,
-		EDirOpen,
-		
-		// Code for CFileCB operations
-		EFileClose, 
-		EFileRead,
-		EFileWrite,
-		EFileSetSize,
-		EFileFlushAll,
-
-		// Code for CDirCB operations
-		EDirClose, 
-		EDirRead,
-
-		// Device ops
-		EGetDeviceID,
-		EGetDriveMap,
-
-		};
-	
-		
-public:
-#ifndef __KERNEL_MODE__  // don't need to see these in the driver
-	TInt Open();
-	TInt MkDir(TSVPHostFsMkDirInfo& aInfo);
-	TInt RmDir(TSVPHostFsRmDirInfo& aInfo);
-	TInt Delete(TSVPHostFsDeleteInfo& aInfo);
-	TInt Rename(TSVPHostFsRenameInfo& aInfo);
-	TInt Replace(TSVPHostFsReplaceInfo& aInfo);
-	TInt ReadUid(const TDesC& aName,TEntry& anEntry);
-	TInt Entry(TSVPHostFsEntryInfo& aInfo);
-	TInt SetEntry(TSVPHostFsSetEntryInfo &aInfo);
-	TInt FileOpen(TSVPHostFsFileOpenInfo &aInfo);
-	TInt DirOpen(TSVPHostFsDirOpenInfo& aInfo);
-	TInt FileClose(TUint32 aDrive, TUint32 aHandle);
-	TInt FileRead(TSVPHostFsFileReadInfo& aInfo);		
-	TInt FileWrite(TSVPHostFsFileWriteInfo& aInfo);
-	TInt FileSetSize(TSVPHostFsFileSetSizeInfo &aInfo);
-	TInt FileSetEntry(TSVPHostFsSetEntryInfo &aInfo);
-	TInt FlushData(TUint32 aDrive);
-	TInt FlushAll(TUint32 aDrive);
-
-	TInt DirClose(TUint32 aDrive, TUint32 aHandle);
-	TInt DirRead(TSVPHostFsDirReadInfo& aInfo);
-
-	TUint32 GetDeviceID(TUint32 aDrive);
-
-	TInt GetDriveMap(TUint32 * aMap);
-
-private:
-	inline TInt DoSVPRequest(TInt aReqNo, TAny * a1) 
-		{
-		TRequestStatus status;
-		DoRequest(aReqNo, status, a1);
-		User::WaitForRequest(status);
-		return status.Int();
-		}
-
-	inline TInt DoSVPRequest(TInt aReqNo, TAny * a1, TAny * a2) 
-		{
-		TRequestStatus status;
-		DoRequest(aReqNo, status, a1, a2);
-		User::WaitForRequest(status);
-		return status.Int();
-		}
-#endif
-	};
-
-#endif // __rsvphostfsdriver_H__
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/svphostfs.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +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         svphostfs.exe        
-TARGETTYPE     EXE
-SOURCEPATH	   fs
-SOURCE         svphostmain.cpp rsvphostfsdriver.cpp
-LIBRARY        euser.lib efsrv.lib efile.lib hal.lib
-SYSTEMINCLUDE  inc	
-SYSTEMINCLUDE  /epoc32/include 
-
-CAPABILITY		DISKADMIN ALLFILES
-VENDORID 0x70000001
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/svphostfsdriver.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +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:
-*
-*/
-
-//macro	__KERNEL_MODE__
-
-#include <variant.mmh>
-#include   <kernel\kern_ext.mmh>
-
-systeminclude		AsspNKernIncludePath
-systeminclude		inc
-systeminclude		..\svpplatform\libfdt
-systeminclude 		\epoc32\include\stdapis
-
-target			VariantTarget(svphostfsdriver,ldd)
-linkas			svphostfsdriver.ldd
-targettype		ldd
-
-
-sourcepath		driver
-source			svphostfsdriver.cpp stringops.c
-
-option armcc --gnu
-
-staticlibrary		libfdt.lib 
-noexportlibrary
-
-vendorid 		0x70000001
-capability		all
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/svphostfsstart.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +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         svphostfsstart.exe        
-TARGETTYPE     EXE
-SOURCEPATH	   fs
-SOURCE         svphostfsstart.cpp
-LIBRARY        euser.lib efsrv.lib efile.lib hal.lib
-SYSTEMINCLUDE  inc	
-SYSTEMINCLUDE  /epoc32/include 
-
-CAPABILITY		DISKADMIN ALLFILES
-VENDORID 0x70000001
--- a/baseport/src/cedar/generic/base/syborg/svphostfs/svphostfsy.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +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			svphostfsy.fsy
-TARGETTYPE		fsy
-
-SOURCEPATH		fs
-SOURCE			svphostfsy.cpp svphostmnt.cpp svphostfil.cpp svphostdir.cpp rsvphostfsdriver.cpp
-NOSTRICTDEF
-
-SYSTEMINCLUDE	inc	
-SYSTEMINCLUDE	/epoc32/include 
-
-LIBRARY			efsrv.lib euser.lib hal.lib
-LIBRARY			efile.lib
-
-UID		0x100039df 0x10000CEE
-VENDORID 0x70000001
-
-unpaged
-
-TARGETPATH 	/sys/bin
-
-//CAPABILITY TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
-#include "../../f32/group/f32caps.mmh"  // Capabilities of File Server process
-#include "../../f32/group/f32.mmh"      // Generic definitions for the whole f32 component
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/fdt.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +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			libfdt.lib
-targettype		klib
-
-systeminclude 		libfdt
-systeminclude 		\epoc32\include\stdapis
-
-sourcepath		libfdt
-
-source			fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c
-
-option armcc --gnu
-option_replace armcc --diag_suppress 161,611,654,997,1152,1300,1464,1488,6318,6331,1254,1293,68
-capability		all
-
-VENDORID 0x70000001
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/Makefile.libfdt	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-# Makefile.libfdt
-#
-# This is not a complete Makefile of itself.  Instead, it is designed to
-# be easily embeddable into other systems of Makefiles.
-#
-LIBFDT_SRCS = fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c
-LIBFDT_INCLUDES = fdt.h libfdt.h
-LIBFDT_EXTRA = libfdt_internal.h
-LIBFDT_LIB = libfdt/libfdt.a
-
-LIBFDT_OBJS = $(LIBFDT_SRCS:%.c=%.o)
-
-$(LIBFDT_objdir)/$(LIBFDT_LIB): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
-
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/TODO	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-- Tree traversal functions
-- Graft function
-- Complete libfdt.h documenting comments
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/bswap.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,217 +0,0 @@
-#ifndef BSWAP_H
-#define BSWAP_H
-
-#include "config-host.h"
-
-#include <inttypes.h>
-
-#ifdef HAVE_MACHINE_BSWAP_H
-#include <sys/endian.h>
-#include <sys/types.h>
-#include <machine/bswap.h>
-#else
-
-#ifdef HAVE_BYTESWAP_H
-#include <byteswap.h>
-#else
-
-#define bswap_16(x) \
-({ \
-	uint16_t __x = (x); \
-	((uint16_t)( \
-		(((uint16_t)(__x) & (uint16_t)0x00ffU) << 8) | \
-		(((uint16_t)(__x) & (uint16_t)0xff00U) >> 8) )); \
-})
-
-#define bswap_32(x) \
-({ \
-	uint32_t __x = (x); \
-	((uint32_t)( \
-		(((uint32_t)(__x) & (uint32_t)0x000000ffUL) << 24) | \
-		(((uint32_t)(__x) & (uint32_t)0x0000ff00UL) <<  8) | \
-		(((uint32_t)(__x) & (uint32_t)0x00ff0000UL) >>  8) | \
-		(((uint32_t)(__x) & (uint32_t)0xff000000UL) >> 24) )); \
-})
-
-#define bswap_64(x) \
-({ \
-	uint64_t __x = (x); \
-	((uint64_t)( \
-		(uint64_t)(((uint64_t)(__x) & (uint64_t)0x00000000000000ffULL) << 56) | \
-		(uint64_t)(((uint64_t)(__x) & (uint64_t)0x000000000000ff00ULL) << 40) | \
-		(uint64_t)(((uint64_t)(__x) & (uint64_t)0x0000000000ff0000ULL) << 24) | \
-		(uint64_t)(((uint64_t)(__x) & (uint64_t)0x00000000ff000000ULL) <<  8) | \
-	        (uint64_t)(((uint64_t)(__x) & (uint64_t)0x000000ff00000000ULL) >>  8) | \
-		(uint64_t)(((uint64_t)(__x) & (uint64_t)0x0000ff0000000000ULL) >> 24) | \
-		(uint64_t)(((uint64_t)(__x) & (uint64_t)0x00ff000000000000ULL) >> 40) | \
-		(uint64_t)(((uint64_t)(__x) & (uint64_t)0xff00000000000000ULL) >> 56) )); \
-})
-
-#endif /* !HAVE_BYTESWAP_H */
-
-static inline uint16_t bswap16(uint16_t x)
-{
-    return bswap_16(x);
-}
-
-static inline uint32_t bswap32(uint32_t x)
-{
-    return bswap_32(x);
-}
-
-static inline uint64_t bswap64(uint64_t x)
-{
-    return bswap_64(x);
-}
-
-#endif /* ! HAVE_MACHINE_BSWAP_H */
-
-static inline void bswap16s(uint16_t *s)
-{
-    *s = bswap16(*s);
-}
-
-static inline void bswap32s(uint32_t *s)
-{
-    *s = bswap32(*s);
-}
-
-static inline void bswap64s(uint64_t *s)
-{
-    *s = bswap64(*s);
-}
-
-#if defined(WORDS_BIGENDIAN)
-#define be_bswap(v, size) (v)
-#define le_bswap(v, size) bswap ## size(v)
-#define be_bswaps(v, size)
-#define le_bswaps(p, size) *p = bswap ## size(*p);
-#else
-#define le_bswap(v, size) (v)
-#define be_bswap(v, size) bswap ## size(v)
-#define le_bswaps(v, size)
-#define be_bswaps(p, size) *p = bswap ## size(*p);
-#endif
-
-#define CPU_CONVERT(endian, size, type)\
-static inline type endian ## size ## _to_cpu(type v)\
-{\
-    return endian ## _bswap(v, size);\
-}\
-\
-static inline type cpu_to_ ## endian ## size(type v)\
-{\
-    return endian ## _bswap(v, size);\
-}\
-\
-static inline void endian ## size ## _to_cpus(type *p)\
-{\
-    endian ## _bswaps(p, size)\
-}\
-\
-static inline void cpu_to_ ## endian ## size ## s(type *p)\
-{\
-    endian ## _bswaps(p, size)\
-}\
-\
-static inline type endian ## size ## _to_cpup(const type *p)\
-{\
-    return endian ## size ## _to_cpu(*p);\
-}\
-\
-static inline void cpu_to_ ## endian ## size ## w(type *p, type v)\
-{\
-     *p = cpu_to_ ## endian ## size(v);\
-}
-
-CPU_CONVERT(be, 16, uint16_t)
-CPU_CONVERT(be, 32, uint32_t)
-CPU_CONVERT(be, 64, uint64_t)
-
-CPU_CONVERT(le, 16, uint16_t)
-CPU_CONVERT(le, 32, uint32_t)
-CPU_CONVERT(le, 64, uint64_t)
-
-/* unaligned versions (optimized for frequent unaligned accesses)*/
-
-#if defined(__i386__) || defined(__powerpc__)
-
-#define cpu_to_le16wu(p, v) cpu_to_le16w(p, v)
-#define cpu_to_le32wu(p, v) cpu_to_le32w(p, v)
-#define le16_to_cpupu(p) le16_to_cpup(p)
-#define le32_to_cpupu(p) le32_to_cpup(p)
-#define be32_to_cpupu(p) be32_to_cpup(p)
-
-#define cpu_to_be16wu(p, v) cpu_to_be16w(p, v)
-#define cpu_to_be32wu(p, v) cpu_to_be32w(p, v)
-
-#else
-
-static inline void cpu_to_le16wu(uint16_t *p, uint16_t v)
-{
-    uint8_t *p1 = (uint8_t *)p;
-
-    p1[0] = v;
-    p1[1] = v >> 8;
-}
-
-static inline void cpu_to_le32wu(uint32_t *p, uint32_t v)
-{
-    uint8_t *p1 = (uint8_t *)p;
-
-    p1[0] = v;
-    p1[1] = v >> 8;
-    p1[2] = v >> 16;
-    p1[3] = v >> 24;
-}
-
-static inline uint16_t le16_to_cpupu(const uint16_t *p)
-{
-    const uint8_t *p1 = (const uint8_t *)p;
-    return p1[0] | (p1[1] << 8);
-}
-
-static inline uint32_t le32_to_cpupu(const uint32_t *p)
-{
-    const uint8_t *p1 = (const uint8_t *)p;
-    return p1[0] | (p1[1] << 8) | (p1[2] << 16) | (p1[3] << 24);
-}
-
-static inline uint32_t be32_to_cpupu(const uint32_t *p)
-{
-    const uint8_t *p1 = (const uint8_t *)p;
-    return p1[3] | (p1[2] << 8) | (p1[1] << 16) | (p1[0] << 24);
-}
-
-static inline void cpu_to_be16wu(uint16_t *p, uint16_t v)
-{
-    uint8_t *p1 = (uint8_t *)p;
-
-    p1[0] = v >> 8;
-    p1[1] = v;
-}
-
-static inline void cpu_to_be32wu(uint32_t *p, uint32_t v)
-{
-    uint8_t *p1 = (uint8_t *)p;
-
-    p1[0] = v >> 24;
-    p1[1] = v >> 16;
-    p1[2] = v >> 8;
-    p1[3] = v;
-}
-
-#endif
-
-#ifdef WORDS_BIGENDIAN
-#define cpu_to_32wu cpu_to_be32wu
-#else
-#define cpu_to_32wu cpu_to_le32wu
-#endif
-
-#undef le_bswap
-#undef be_bswap
-#undef le_bswaps
-#undef be_bswaps
-
-#endif /* BSWAP_H */
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/config-host.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-#ifndef CONFIG_HOST_H
-#define CONFIG_HOST_H
-
-// dont have machine level bswap
-//#define HAVE_MACHINE_BSWAP_H
-
-// dont have byteswap
-//#define HAVE_BYTESWAP_H
-
-#endif
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt.c	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,156 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- *  a) This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of the
- *     License, or (at your option) any later version.
- *
- *     This library is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this library; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Alternatively,
- *
- *  b) Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *     1. Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *     2. Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include "libfdt_env.h"
-
-#include <fdt.h>
-#include <libfdt.h>
-
-#include "libfdt_internal.h"
-
-int fdt_check_header(const void *fdt)
-{
-	if (fdt_magic(fdt) == FDT_MAGIC) {
-		/* Complete tree */
-		if (fdt_version(fdt) < FDT_FIRST_SUPPORTED_VERSION)
-			return -FDT_ERR_BADVERSION;
-		if (fdt_last_comp_version(fdt) > FDT_LAST_SUPPORTED_VERSION)
-			return -FDT_ERR_BADVERSION;
-	} else if (fdt_magic(fdt) == SW_MAGIC) {
-		/* Unfinished sequential-write blob */
-		if (fdt_size_dt_struct(fdt) == 0)
-			return -FDT_ERR_BADSTATE;
-	} else {
-		return -FDT_ERR_BADMAGIC;
-	}
-
-	return 0;
-}
-
-const void *fdt_offset_ptr(const void *fdt, int offset, int len)
-{
-	const void *p;
-
-	if (fdt_version(fdt) >= 0x11)
-		if (((offset + len) < offset)
-		    || ((offset + len) > fdt_size_dt_struct(fdt)))
-			return NULL;
-
-	p = _fdt_offset_ptr(fdt, offset);
-
-	if (p + len < p)
-		return NULL;
-	return p;
-}
-
-uint32_t fdt_next_tag(const void *fdt, int offset, int *nextoffset)
-{
-	const uint32_t *tagp, *lenp;
-	uint32_t tag;
-	const char *p;
-
-	if (offset % FDT_TAGSIZE)
-		return -1;
-
-	tagp = fdt_offset_ptr(fdt, offset, FDT_TAGSIZE);
-	if (! tagp)
-		return FDT_END; /* premature end */
-	tag = fdt32_to_cpu(*tagp);
-	offset += FDT_TAGSIZE;
-
-	switch (tag) {
-	case FDT_BEGIN_NODE:
-		/* skip name */
-		do {
-			p = fdt_offset_ptr(fdt, offset++, 1);
-		} while (p && (*p != '\0'));
-		if (! p)
-			return FDT_END;
-		break;
-	case FDT_PROP:
-		lenp = fdt_offset_ptr(fdt, offset, sizeof(*lenp));
-		if (! lenp)
-			return FDT_END;
-		/* skip name offset, length and value */
-		offset += 2*FDT_TAGSIZE + fdt32_to_cpu(*lenp);
-		break;
-	}
-
-	if (nextoffset)
-		*nextoffset = ALIGN(offset, FDT_TAGSIZE);
-
-	return tag;
-}
-
-const char *_fdt_find_string(const char *strtab, int tabsize, const char *s)
-{
-	int len = strlen(s) + 1;
-	const char *last = strtab + tabsize - len;
-	const char *p;
-
-	for (p = strtab; p <= last; p++)
-		if (memeq(p, s, len))
-			return p;
-	return NULL;
-}
-
-int fdt_move(const void *fdt, void *buf, int bufsize)
-{
-	int err = fdt_check_header(fdt);
-
-	if (err)
-		return err;
-
-	if (fdt_totalsize(fdt) > bufsize)
-		return -FDT_ERR_NOSPACE;
-
-	memmove(buf, fdt, fdt_totalsize(fdt));
-	return 0;
-}
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-
-extern "C" {
-
-#include "fdt.c"
-
-};
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-#ifndef _FDT_H
-#define _FDT_H
-
-#ifndef __ASSEMBLY__
-
-struct fdt_header {
-	uint32_t magic;			 /* magic word FDT_MAGIC */
-	uint32_t totalsize;		 /* total size of DT block */
-	uint32_t off_dt_struct;		 /* offset to structure */
-	uint32_t off_dt_strings;	 /* offset to strings */
-	uint32_t off_mem_rsvmap;	 /* offset to memory reserve map */
-	uint32_t version;		 /* format version */
-	uint32_t last_comp_version;	 /* last compatible version */
-
-	/* version 2 fields below */
-	uint32_t boot_cpuid_phys;	 /* Which physical CPU id we're
-					    booting on */
-	/* version 3 fields below */
-	uint32_t size_dt_strings;	 /* size of the strings block */
-
-	/* version 17 fields below */
-	uint32_t size_dt_struct;	 /* size of the structure block */
-};
-
-struct fdt_reserve_entry {
-	uint64_t address;
-	uint64_t size;
-};
-
-struct fdt_node_header {
-	uint32_t tag;
-	char name[0];
-};
-
-struct fdt_property {
-	uint32_t tag;
-	uint32_t len;
-	uint32_t nameoff;
-	char data[0];
-};
-
-#endif /* !__ASSEMBLY */
-
-#define FDT_MAGIC	0xd00dfeed	/* 4: version, 4: total size */
-#define FDT_TAGSIZE	sizeof(uint32_t)
-
-#define FDT_BEGIN_NODE	0x1		/* Start node: full name */
-#define FDT_END_NODE	0x2		/* End node */
-#define FDT_PROP	0x3		/* Property: name off,
-					   size, content */
-#define FDT_NOP		0x4		/* nop */
-#define FDT_END		0x9
-
-#define FDT_V1_SIZE	(7*sizeof(uint32_t))
-#define FDT_V2_SIZE	(FDT_V1_SIZE + sizeof(uint32_t))
-#define FDT_V3_SIZE	(FDT_V2_SIZE + sizeof(uint32_t))
-#define FDT_V16_SIZE	FDT_V3_SIZE
-#define FDT_V17_SIZE	(FDT_V16_SIZE + sizeof(uint32_t))
-
-#endif /* _FDT_H */
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_ro.c	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,583 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- *  a) This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of the
- *     License, or (at your option) any later version.
- *
- *     This library is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this library; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Alternatively,
- *
- *  b) Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *     1. Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *     2. Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include "libfdt_env.h"
-
-#include <fdt.h>
-#include <libfdt.h>
-
-#include "libfdt_internal.h"
-
-#define CHECK_HEADER(fdt) \
-	{ \
-		int err; \
-		if ((err = fdt_check_header(fdt)) != 0) \
-			return err; \
-	}
-
-static int nodename_eq(const void *fdt, int offset,
-		       const char *s, int len)
-{
-	const char *p = fdt_offset_ptr(fdt, offset, len+1);
-
-	if (! p)
-		/* short match */
-		return 0;
-
-	if (memcmp(p, s, len) != 0)
-		return 0;
-
-	if (p[len] == '\0')
-		return 1;
-	else if (!memchr(s, '@', len) && (p[len] == '@'))
-		return 1;
-	else
-		return 0;
-}
-
-const char *fdt_string(const void *fdt, int stroffset)
-{
-	return (char *)fdt + fdt_off_dt_strings(fdt) + stroffset;
-}
-
-int fdt_get_mem_rsv(const void *fdt, int n, uint64_t *address, uint64_t *size)
-{
-	CHECK_HEADER(fdt);
-	*address = fdt64_to_cpu(_fdt_mem_rsv(fdt, n)->address);
-	*size = fdt64_to_cpu(_fdt_mem_rsv(fdt, n)->size);
-	return 0;
-}
-
-int fdt_num_mem_rsv(const void *fdt)
-{
-	int i = 0;
-
-	while (fdt64_to_cpu(_fdt_mem_rsv(fdt, i)->size) != 0)
-		i++;
-	return i;
-}
-
-int fdt_subnode_offset_namelen(const void *fdt, int parentoffset,
-			       const char *name, int namelen)
-{
-	int level = 0;
-	uint32_t tag;
-	int offset, nextoffset;
-
-	CHECK_HEADER(fdt);
-
-	tag = fdt_next_tag(fdt, parentoffset, &nextoffset);
-	if (tag != FDT_BEGIN_NODE)
-		return -FDT_ERR_BADOFFSET;
-
-	do {
-		offset = nextoffset;
-		tag = fdt_next_tag(fdt, offset, &nextoffset);
-
-		switch (tag) {
-		case FDT_END:
-			return -FDT_ERR_TRUNCATED;
-
-		case FDT_BEGIN_NODE:
-			level++;
-			if (level != 1)
-				continue;
-			if (nodename_eq(fdt, offset+FDT_TAGSIZE, name, namelen))
-				/* Found it! */
-				return offset;
-			break;
-
-		case FDT_END_NODE:
-			level--;
-			break;
-
-		case FDT_PROP:
-		case FDT_NOP:
-			break;
-
-		default:
-			return -FDT_ERR_BADSTRUCTURE;
-		}
-	} while (level >= 0);
-
-	return -FDT_ERR_NOTFOUND;
-}
-
-int fdt_subnode_offset(const void *fdt, int parentoffset,
-		       const char *name)
-{
-	return fdt_subnode_offset_namelen(fdt, parentoffset, name, strlen(name));
-}
-
-int fdt_path_offset(const void *fdt, const char *path)
-{
-	const char *end = path + strlen(path);
-	const char *p = path;
-	int offset = 0;
-
-	CHECK_HEADER(fdt);
-
-	if (*path != '/')
-		return -FDT_ERR_BADPATH;
-
-	while (*p) {
-		const char *q;
-
-		while (*p == '/')
-			p++;
-		if (! *p)
-			return offset;
-		q = strchr(p, '/');
-		if (! q)
-			q = end;
-
-		offset = fdt_subnode_offset_namelen(fdt, offset, p, q-p);
-		if (offset < 0)
-			return offset;
-
-		p = q;
-	}
-
-	return offset;
-}
-
-const char *fdt_get_name(const void *fdt, int nodeoffset, int *len)
-{
-	const struct fdt_node_header *nh;
-	int err;
-
-	if ((err = fdt_check_header(fdt)) != 0)
-		goto fail;
-
-	err = -FDT_ERR_BADOFFSET;
-	nh = fdt_offset_ptr(fdt, nodeoffset, sizeof(*nh));
-	if (!nh || (fdt32_to_cpu(nh->tag) != FDT_BEGIN_NODE))
-		goto fail;
-
-	if (len)
-		*len = strlen(nh->name);
-
-	return nh->name;
-
- fail:
-	if (len)
-		*len = err;
-	return NULL;
-}
-
-const struct fdt_property *fdt_get_property(const void *fdt,
-					    int nodeoffset,
-					    const char *name, int *lenp)
-{
-	uint32_t tag;
-	const struct fdt_property *prop;
-	int namestroff;
-	int offset, nextoffset;
-	int err;
-
-	if ((err = fdt_check_header(fdt)) != 0)
-		goto fail;
-
-	err = -FDT_ERR_BADOFFSET;
-	if (nodeoffset % FDT_TAGSIZE)
-		goto fail;
-
-	tag = fdt_next_tag(fdt, nodeoffset, &nextoffset);
-	if (tag != FDT_BEGIN_NODE)
-		goto fail;
-
-	do {
-		offset = nextoffset;
-
-		tag = fdt_next_tag(fdt, offset, &nextoffset);
-		switch (tag) {
-		case FDT_END:
-			err = -FDT_ERR_TRUNCATED;
-			goto fail;
-
-		case FDT_BEGIN_NODE:
-		case FDT_END_NODE:
-		case FDT_NOP:
-			break;
-
-		case FDT_PROP:
-			err = -FDT_ERR_BADSTRUCTURE;
-			prop = fdt_offset_ptr(fdt, offset, sizeof(*prop));
-			if (! prop)
-				goto fail;
-			namestroff = fdt32_to_cpu(prop->nameoff);
-			if (streq(fdt_string(fdt, namestroff), name)) {
-				/* Found it! */
-				int len = fdt32_to_cpu(prop->len);
-				prop = fdt_offset_ptr(fdt, offset,
-						      sizeof(*prop)+len);
-				if (! prop)
-					goto fail;
-
-				if (lenp)
-					*lenp = len;
-
-				return prop;
-			}
-			break;
-
-		default:
-			err = -FDT_ERR_BADSTRUCTURE;
-			goto fail;
-		}
-	} while ((tag != FDT_BEGIN_NODE) && (tag != FDT_END_NODE));
-
-	err = -FDT_ERR_NOTFOUND;
- fail:
-	if (lenp)
-		*lenp = err;
-	return NULL;
-}
-
-const void *fdt_getprop(const void *fdt, int nodeoffset,
-		  const char *name, int *lenp)
-{
-	const struct fdt_property *prop;
-
-	prop = fdt_get_property(fdt, nodeoffset, name, lenp);
-	if (! prop)
-		return NULL;
-
-	return prop->data;
-}
-
-uint32_t fdt_get_phandle(const void *fdt, int nodeoffset)
-{
-	const uint32_t *php;
-	int len;
-
-	php = fdt_getprop(fdt, nodeoffset, "linux,phandle", &len);
-	if (!php || (len != sizeof(*php)))
-		return 0;
-
-	return fdt32_to_cpu(*php);
-}
-
-int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen)
-{
-	uint32_t tag;
-	int p = 0, overflow = 0;
-	int offset, nextoffset, namelen;
-	const char *name;
-
-	CHECK_HEADER(fdt);
-
-	tag = fdt_next_tag(fdt, 0, &nextoffset);
-	if (tag != FDT_BEGIN_NODE)
-		return -FDT_ERR_BADSTRUCTURE;
-
-	if (buflen < 2)
-		return -FDT_ERR_NOSPACE;
-	buf[0] = '/';
-	p = 1;
-
-	while (nextoffset <= nodeoffset) {
-		offset = nextoffset;
-		tag = fdt_next_tag(fdt, offset, &nextoffset);
-		switch (tag) {
-		case FDT_END:
-			return -FDT_ERR_BADOFFSET;
-
-		case FDT_BEGIN_NODE:
-			name = fdt_get_name(fdt, offset, &namelen);
-			if (!name)
-				return namelen;
-			if (overflow || ((p + namelen + 1) > buflen)) {
-				overflow++;
-				break;
-			}
-			memcpy(buf + p, name, namelen);
-			p += namelen;
-			buf[p++] = '/';
-			break;
-
-		case FDT_END_NODE:
-			if (overflow) {
-				overflow--;
-				break;
-			}
-			do {
-				p--;
-			} while  (buf[p-1] != '/');
-			break;
-
-		case FDT_PROP:
-		case FDT_NOP:
-			break;
-
-		default:
-			return -FDT_ERR_BADSTRUCTURE;
-		}
-	}
-
-	if (overflow)
-		return -FDT_ERR_NOSPACE;
-
-	if (p > 1) /* special case so that root path is "/", not "" */
-		p--;
-	buf[p] = '\0';
-	return p;
-}
-
-int fdt_supernode_atdepth_offset(const void *fdt, int nodeoffset,
-				 int supernodedepth, int *nodedepth)
-{
-	int level = -1;
-	uint32_t tag;
-	int offset, nextoffset = 0;
-	int supernodeoffset = -FDT_ERR_INTERNAL;
-
-	CHECK_HEADER(fdt);
-
-	if (supernodedepth < 0)
-		return -FDT_ERR_NOTFOUND;
-
-	do {
-		offset = nextoffset;
-		tag = fdt_next_tag(fdt, offset, &nextoffset);
-		switch (tag) {
-		case FDT_END:
-			return -FDT_ERR_BADOFFSET;
-
-		case FDT_BEGIN_NODE:
-			level++;
-			if (level == supernodedepth)
-				supernodeoffset = offset;
-			break;
-
-		case FDT_END_NODE:
-			level--;
-			break;
-
-		case FDT_PROP:
-		case FDT_NOP:
-			break;
-
-		default:
-			return -FDT_ERR_BADSTRUCTURE;
-		}
-	} while (offset < nodeoffset);
-
-	if (nodedepth)
-		*nodedepth = level;
-
-	if (supernodedepth > level)
-		return -FDT_ERR_NOTFOUND;
-	return supernodeoffset;
-}
-
-int fdt_node_depth(const void *fdt, int nodeoffset)
-{
-	int nodedepth;
-	int err;
-
-	err = fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, &nodedepth);
-	if (err)
-		return (err < 0) ? err : -FDT_ERR_INTERNAL;
-	return nodedepth;
-}
-
-int fdt_parent_offset(const void *fdt, int nodeoffset)
-{
-	int nodedepth = fdt_node_depth(fdt, nodeoffset);
-
-	if (nodedepth < 0)
-		return nodedepth;
-	return fdt_supernode_atdepth_offset(fdt, nodeoffset,
-					    nodedepth - 1, NULL);
-}
-
-int fdt_node_offset_by_prop_value(const void *fdt, int startoffset,
-				  const char *propname,
-				  const void *propval, int proplen)
-{
-	uint32_t tag;
-	int offset, nextoffset;
-	const void *val;
-	int len;
-
-	CHECK_HEADER(fdt);
-
-	if (startoffset >= 0) {
-		tag = fdt_next_tag(fdt, startoffset, &nextoffset);
-		if (tag != FDT_BEGIN_NODE)
-			return -FDT_ERR_BADOFFSET;
-	} else {
-		nextoffset = 0;
-	}
-
-	/* FIXME: The algorithm here is pretty horrible: we scan each
-	 * property of a node in fdt_getprop(), then if that didn't
-	 * find what we want, we scan over them again making our way
-	 * to the next node.  Still it's the easiest to implement
-	 * approach; performance can come later. */
-	do {
-		offset = nextoffset;
-		tag = fdt_next_tag(fdt, offset, &nextoffset);
-
-		switch (tag) {
-		case FDT_BEGIN_NODE:
-			val = fdt_getprop(fdt, offset, propname, &len);
-			if (val
-			    && (len == proplen)
-			    && (memcmp(val, propval, len) == 0))
-				return offset;
-			break;
-
-		case FDT_PROP:
-		case FDT_END:
-		case FDT_END_NODE:
-		case FDT_NOP:
-			break;
-
-		default:
-			return -FDT_ERR_BADSTRUCTURE;
-		}
-	} while (tag != FDT_END);
-
-	return -FDT_ERR_NOTFOUND;
-}
-
-int fdt_node_offset_by_phandle(const void *fdt, uint32_t phandle)
-{
-	if ((phandle == 0) || (phandle == -1))
-		return -FDT_ERR_BADPHANDLE;
-	phandle = cpu_to_fdt32(phandle);
-	return fdt_node_offset_by_prop_value(fdt, -1, "linux,phandle",
-					     &phandle, sizeof(phandle));
-}
-
-int _stringlist_contains(const void *strlist, int listlen, const char *str)
-{
-	int len = strlen(str);
-	const void *p;
-
-	while (listlen >= len) {
-		if (memcmp(str, strlist, len+1) == 0)
-			return 1;
-		p = memchr(strlist, '\0', listlen);
-		if (!p)
-			return 0; /* malformed strlist.. */
-		listlen -= (p-strlist) + 1;
-		strlist = p + 1;
-	}
-	return 0;
-}
-
-int fdt_node_check_compatible(const void *fdt, int nodeoffset,
-			      const char *compatible)
-{
-	const void *prop;
-	int len;
-
-	prop = fdt_getprop(fdt, nodeoffset, "compatible", &len);
-	if (!prop)
-		return len;
-	if (_stringlist_contains(prop, len, compatible))
-		return 0;
-	else
-		return 1;
-}
-
-int fdt_node_offset_by_compatible(const void *fdt, int startoffset,
-				  const char *compatible)
-{
-	uint32_t tag;
-	int offset, nextoffset;
-	int err;
-
-	CHECK_HEADER(fdt);
-
-	if (startoffset >= 0) {
-		tag = fdt_next_tag(fdt, startoffset, &nextoffset);
-		if (tag != FDT_BEGIN_NODE)
-			return -FDT_ERR_BADOFFSET;
-	} else {
-		nextoffset = 0;
-	}
-
-	/* FIXME: The algorithm here is pretty horrible: we scan each
-	 * property of a node in fdt_node_check_compatible(), then if
-	 * that didn't find what we want, we scan over them again
-	 * making our way to the next node.  Still it's the easiest to
-	 * implement approach; performance can come later. */
-	do {
-		offset = nextoffset;
-		tag = fdt_next_tag(fdt, offset, &nextoffset);
-
-		switch (tag) {
-		case FDT_BEGIN_NODE:
-			err = fdt_node_check_compatible(fdt, offset,
-							compatible);
-			if ((err < 0)
-			    && (err != -FDT_ERR_NOTFOUND))
-				return err;
-			else if (err == 0)
-				return offset;
-			break;
-
-		case FDT_PROP:
-		case FDT_END:
-		case FDT_END_NODE:
-		case FDT_NOP:
-			break;
-
-		default:
-			return -FDT_ERR_BADSTRUCTURE;
-		}
-	} while (tag != FDT_END);
-
-	return -FDT_ERR_NOTFOUND;
-}
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_ro.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-extern "C" {
-
-#include "fdt_ro.c"
-
-};
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_rw.c	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,471 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- *  a) This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of the
- *     License, or (at your option) any later version.
- *
- *     This library is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this library; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Alternatively,
- *
- *  b) Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *     1. Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *     2. Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include "libfdt_env.h"
-
-#include <fdt.h>
-#include <libfdt.h>
-
-#include "libfdt_internal.h"
-
-static int _blocks_misordered(const void *fdt,
-			      int mem_rsv_size, int struct_size)
-{
-	return (fdt_off_mem_rsvmap(fdt) < ALIGN(sizeof(struct fdt_header), 8))
-		|| (fdt_off_dt_struct(fdt) <
-		    (fdt_off_mem_rsvmap(fdt) + mem_rsv_size))
-		|| (fdt_off_dt_strings(fdt) <
-		    (fdt_off_dt_struct(fdt) + struct_size))
-		|| (fdt_totalsize(fdt) <
-		    (fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt)));
-}
-
-static int rw_check_header(void *fdt)
-{
-	int err;
-
-	if ((err = fdt_check_header(fdt)))
-		return err;
-	if (fdt_version(fdt) < 17)
-		return -FDT_ERR_BADVERSION;
-	if (_blocks_misordered(fdt, sizeof(struct fdt_reserve_entry),
-			       fdt_size_dt_struct(fdt)))
-		return -FDT_ERR_BADLAYOUT;
-	if (fdt_version(fdt) > 17)
-		fdt_set_version(fdt, 17);
-
-	return 0;
-}
-
-#define RW_CHECK_HEADER(fdt) \
-	{ \
-		int err; \
-		if ((err = rw_check_header(fdt)) != 0) \
-			return err; \
-	}
-
-static inline int _blob_data_size(void *fdt)
-{
-	return fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt);
-}
-
-static int _blob_splice(void *fdt, void *p, int oldlen, int newlen)
-{
-	void *end = fdt + _blob_data_size(fdt);
-
-	if (((p + oldlen) < p) || ((p + oldlen) > end))
-		return -FDT_ERR_BADOFFSET;
-	if ((end - oldlen + newlen) > (fdt + fdt_totalsize(fdt)))
-		return -FDT_ERR_NOSPACE;
-	memmove(p + newlen, p + oldlen, end - p - oldlen);
-	return 0;
-}
-
-static int _blob_splice_mem_rsv(void *fdt, struct fdt_reserve_entry *p,
-				int oldn, int newn)
-{
-	int delta = (newn - oldn) * sizeof(*p);
-	int err;
-	err = _blob_splice(fdt, p, oldn * sizeof(*p), newn * sizeof(*p));
-	if (err)
-		return err;
-	fdt_set_off_dt_struct(fdt, fdt_off_dt_struct(fdt) + delta);
-	fdt_set_off_dt_strings(fdt, fdt_off_dt_strings(fdt) + delta);
-	return 0;
-}
-
-static int _blob_splice_struct(void *fdt, void *p,
-			       int oldlen, int newlen)
-{
-	int delta = newlen - oldlen;
-	int err;
-
-	if ((err = _blob_splice(fdt, p, oldlen, newlen)))
-		return err;
-
-	fdt_set_size_dt_struct(fdt, fdt_size_dt_struct(fdt) + delta);
-	fdt_set_off_dt_strings(fdt, fdt_off_dt_strings(fdt) + delta);
-	return 0;
-}
-
-static int _blob_splice_string(void *fdt, int newlen)
-{
-	void *p = fdt + fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt);
-	int err;
-
-	if ((err = _blob_splice(fdt, p, 0, newlen)))
-		return err;
-
-	fdt_set_size_dt_strings(fdt, fdt_size_dt_strings(fdt) + newlen);
-	return 0;
-}
-
-static int _find_add_string(void *fdt, const char *s)
-{
-	char *strtab = (char *)fdt + fdt_off_dt_strings(fdt);
-	const char *p;
-	char *new;
-	int len = strlen(s) + 1;
-	int err;
-
-	p = _fdt_find_string(strtab, fdt_size_dt_strings(fdt), s);
-	if (p)
-		/* found it */
-		return (p - strtab);
-
-	new = strtab + fdt_size_dt_strings(fdt);
-	err = _blob_splice_string(fdt, len);
-	if (err)
-		return err;
-
-	memcpy(new, s, len);
-	return (new - strtab);
-}
-
-int fdt_add_mem_rsv(void *fdt, uint64_t address, uint64_t size)
-{
-	struct fdt_reserve_entry *re;
-	int err;
-
-	if ((err = rw_check_header(fdt)))
-		return err;
-
-	re = _fdt_mem_rsv_w(fdt, fdt_num_mem_rsv(fdt));
-	err = _blob_splice_mem_rsv(fdt, re, 0, 1);
-	if (err)
-		return err;
-
-	re->address = cpu_to_fdt64(address);
-	re->size = cpu_to_fdt64(size);
-	return 0;
-}
-
-int fdt_del_mem_rsv(void *fdt, int n)
-{
-	struct fdt_reserve_entry *re = _fdt_mem_rsv_w(fdt, n);
-	int err;
-
-	if ((err = rw_check_header(fdt)))
-		return err;
-	if (n >= fdt_num_mem_rsv(fdt))
-		return -FDT_ERR_NOTFOUND;
-
-	err = _blob_splice_mem_rsv(fdt, re, 1, 0);
-	if (err)
-		return err;
-	return 0;
-}
-
-static int _resize_property(void *fdt, int nodeoffset, const char *name, int len,
-			    struct fdt_property **prop)
-{
-	int oldlen;
-	int err;
-
-	*prop = fdt_get_property_w(fdt, nodeoffset, name, &oldlen);
-	if (! (*prop))
-		return oldlen;
-
-	if ((err = _blob_splice_struct(fdt, (*prop)->data,
-				       ALIGN(oldlen, FDT_TAGSIZE),
-				       ALIGN(len, FDT_TAGSIZE))))
-		return err;
-
-	(*prop)->len = cpu_to_fdt32(len);
-	return 0;
-}
-
-static int _add_property(void *fdt, int nodeoffset, const char *name, int len,
-			 struct fdt_property **prop)
-{
-	uint32_t tag;
-	int proplen;
-	int nextoffset;
-	int namestroff;
-	int err;
-
-	tag = fdt_next_tag(fdt, nodeoffset, &nextoffset);
-	if (tag != FDT_BEGIN_NODE)
-		return -FDT_ERR_BADOFFSET;
-
-	namestroff = _find_add_string(fdt, name);
-	if (namestroff < 0)
-		return namestroff;
-
-	*prop = _fdt_offset_ptr_w(fdt, nextoffset);
-	proplen = sizeof(**prop) + ALIGN(len, FDT_TAGSIZE);
-
-	err = _blob_splice_struct(fdt, *prop, 0, proplen);
-	if (err)
-		return err;
-
-	(*prop)->tag = cpu_to_fdt32(FDT_PROP);
-	(*prop)->nameoff = cpu_to_fdt32(namestroff);
-	(*prop)->len = cpu_to_fdt32(len);
-	return 0;
-}
-
-int fdt_set_name(void *fdt, int nodeoffset, const char *name)
-{
-	char *namep;
-	int oldlen, newlen;
-	int err;
-
-	if ((err = rw_check_header(fdt)))
-		return err;
-
-	namep = (char *)fdt_get_name(fdt, nodeoffset, &oldlen);
-	if (!namep)
-		return oldlen;
-
-	newlen = strlen(name);
-
-	err = _blob_splice_struct(fdt, namep, ALIGN(oldlen+1, FDT_TAGSIZE),
-				  ALIGN(newlen+1, FDT_TAGSIZE));
-	if (err)
-		return err;
-
-	memcpy(namep, name, newlen+1);
-	return 0;
-}
-
-int fdt_setprop(void *fdt, int nodeoffset, const char *name,
-		const void *val, int len)
-{
-	struct fdt_property *prop;
-	int err;
-
-	if ((err = rw_check_header(fdt)))
-		return err;
-
-	err = _resize_property(fdt, nodeoffset, name, len, &prop);
-	if (err == -FDT_ERR_NOTFOUND)
-		err = _add_property(fdt, nodeoffset, name, len, &prop);
-	if (err)
-		return err;
-
-	memcpy(prop->data, val, len);
-	return 0;
-}
-
-int fdt_delprop(void *fdt, int nodeoffset, const char *name)
-{
-	struct fdt_property *prop;
-	int len, proplen;
-
-	RW_CHECK_HEADER(fdt);
-
-	prop = fdt_get_property_w(fdt, nodeoffset, name, &len);
-	if (! prop)
-		return len;
-
-	proplen = sizeof(*prop) + ALIGN(len, FDT_TAGSIZE);
-	return _blob_splice_struct(fdt, prop, proplen, 0);
-}
-
-int fdt_add_subnode_namelen(void *fdt, int parentoffset,
-			    const char *name, int namelen)
-{
-	struct fdt_node_header *nh;
-	int offset, nextoffset;
-	int nodelen;
-	int err;
-	uint32_t tag;
-	uint32_t *endtag;
-
-	RW_CHECK_HEADER(fdt);
-
-	offset = fdt_subnode_offset_namelen(fdt, parentoffset, name, namelen);
-	if (offset >= 0)
-		return -FDT_ERR_EXISTS;
-	else if (offset != -FDT_ERR_NOTFOUND)
-		return offset;
-
-	/* Try to place the new node after the parent's properties */
-	fdt_next_tag(fdt, parentoffset, &nextoffset); /* skip the BEGIN_NODE */
-	do {
-		offset = nextoffset;
-		tag = fdt_next_tag(fdt, offset, &nextoffset);
-	} while (tag == FDT_PROP);
-
-	nh = _fdt_offset_ptr_w(fdt, offset);
-	nodelen = sizeof(*nh) + ALIGN(namelen+1, FDT_TAGSIZE) + FDT_TAGSIZE;
-
-	err = _blob_splice_struct(fdt, nh, 0, nodelen);
-	if (err)
-		return err;
-
-	nh->tag = cpu_to_fdt32(FDT_BEGIN_NODE);
-	memset(nh->name, 0, ALIGN(namelen+1, FDT_TAGSIZE));
-	memcpy(nh->name, name, namelen);
-	endtag = (uint32_t *)((void *)nh + nodelen - FDT_TAGSIZE);
-	*endtag = cpu_to_fdt32(FDT_END_NODE);
-
-	return offset;
-}
-
-int fdt_add_subnode(void *fdt, int parentoffset, const char *name)
-{
-	return fdt_add_subnode_namelen(fdt, parentoffset, name, strlen(name));
-}
-
-int fdt_del_node(void *fdt, int nodeoffset)
-{
-	int endoffset;
-
-	RW_CHECK_HEADER(fdt);
-
-	endoffset = _fdt_node_end_offset(fdt, nodeoffset);
-	if (endoffset < 0)
-		return endoffset;
-
-	return _blob_splice_struct(fdt, _fdt_offset_ptr_w(fdt, nodeoffset),
-				   endoffset - nodeoffset, 0);
-}
-
-static void _packblocks(const void *fdt, void *buf,
-		       int mem_rsv_size, int struct_size)
-{
-	int mem_rsv_off, struct_off, strings_off;
-
-	mem_rsv_off = ALIGN(sizeof(struct fdt_header), 8);
-	struct_off = mem_rsv_off + mem_rsv_size;
-	strings_off = struct_off + struct_size;
-
-	memmove(buf + mem_rsv_off, fdt + fdt_off_mem_rsvmap(fdt), mem_rsv_size);
-	fdt_set_off_mem_rsvmap(buf, mem_rsv_off);
-
-	memmove(buf + struct_off, fdt + fdt_off_dt_struct(fdt), struct_size);
-	fdt_set_off_dt_struct(buf, struct_off);
-	fdt_set_size_dt_struct(buf, struct_size);
-
-	memmove(buf + strings_off, fdt + fdt_off_dt_strings(fdt),
-		fdt_size_dt_strings(fdt));
-	fdt_set_off_dt_strings(buf, strings_off);
-	fdt_set_size_dt_strings(buf, fdt_size_dt_strings(fdt));
-}
-
-int fdt_open_into(const void *fdt, void *buf, int bufsize)
-{
-	int err;
-	int mem_rsv_size, struct_size;
-	int newsize;
-	void *tmp;
-
-	err = fdt_check_header(fdt);
-	if (err)
-		return err;
-
-	mem_rsv_size = (fdt_num_mem_rsv(fdt)+1)
-		* sizeof(struct fdt_reserve_entry);
-
-	if (fdt_version(fdt) >= 17) {
-		struct_size = fdt_size_dt_struct(fdt);
-	} else {
-		struct_size = 0;
-		while (fdt_next_tag(fdt, struct_size, &struct_size) != FDT_END)
-			;
-	}
-
-	if (!_blocks_misordered(fdt, mem_rsv_size, struct_size)) {
-		/* no further work necessary */
-		err = fdt_move(fdt, buf, bufsize);
-		if (err)
-			return err;
-		fdt_set_version(buf, 17);
-		fdt_set_size_dt_struct(buf, struct_size);
-		fdt_set_totalsize(buf, bufsize);
-		return 0;
-	}
-
-	/* Need to reorder */
-	newsize = ALIGN(sizeof(struct fdt_header), 8) + mem_rsv_size
-		+ struct_size + fdt_size_dt_strings(fdt);
-
-	if (bufsize < newsize)
-		return -FDT_ERR_NOSPACE;
-
-	if (((buf + newsize) <= fdt)
-	    || (buf >= (fdt + fdt_totalsize(fdt)))) {
-		tmp = buf;
-	} else {
-		tmp = (void *)fdt + fdt_totalsize(fdt);
-		if ((tmp + newsize) > (buf + bufsize))
-			return -FDT_ERR_NOSPACE;
-	}
-
-	_packblocks(fdt, tmp, mem_rsv_size, struct_size);
-	memmove(buf, tmp, newsize);
-
-	fdt_set_magic(buf, FDT_MAGIC);
-	fdt_set_totalsize(buf, bufsize);
-	fdt_set_version(buf, 17);
-	fdt_set_last_comp_version(buf, 16);
-	fdt_set_boot_cpuid_phys(buf, fdt_boot_cpuid_phys(fdt));
-
-	return 0;
-}
-
-int fdt_pack(void *fdt)
-{
-	int mem_rsv_size;
-	int err;
-
-	err = rw_check_header(fdt);
-	if (err)
-		return err;
-
-	mem_rsv_size = (fdt_num_mem_rsv(fdt)+1)
-		* sizeof(struct fdt_reserve_entry);
-	_packblocks(fdt, fdt, mem_rsv_size, fdt_size_dt_struct(fdt));
-	fdt_set_totalsize(fdt, _blob_data_size(fdt));
-
-	return 0;
-}
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_rw.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-extern "C" {
-
-#include "fdt_rw.c"
-
-};
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_strerror.c	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- *  a) This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of the
- *     License, or (at your option) any later version.
- *
- *     This library is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this library; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Alternatively,
- *
- *  b) Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *     1. Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *     2. Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include "libfdt_env.h"
-
-#include <fdt.h>
-#include <libfdt.h>
-
-#include "libfdt_internal.h"
-
-struct errtabent {
-	const char *str;
-};
-
-#define ERRTABENT(val) \
-	[(val)] = { .str = #val, }
-
-static struct errtabent errtable[] = {
-	ERRTABENT(FDT_ERR_NOTFOUND),
-	ERRTABENT(FDT_ERR_EXISTS),
-	ERRTABENT(FDT_ERR_NOSPACE),
-
-	ERRTABENT(FDT_ERR_BADOFFSET),
-	ERRTABENT(FDT_ERR_BADPATH),
-	ERRTABENT(FDT_ERR_BADSTATE),
-
-	ERRTABENT(FDT_ERR_TRUNCATED),
-	ERRTABENT(FDT_ERR_BADMAGIC),
-	ERRTABENT(FDT_ERR_BADVERSION),
-	ERRTABENT(FDT_ERR_BADSTRUCTURE),
-	ERRTABENT(FDT_ERR_BADLAYOUT),
-};
-#define ERRTABSIZE	(sizeof(errtable) / sizeof(errtable[0]))
-
-const char *fdt_strerror(int errval)
-{
-	if (errval > 0)
-		return "<valid offset/length>";
-	else if (errval == 0)
-		return "<no error>";
-	else if (errval > -ERRTABSIZE) {
-		const char *s = errtable[-errval].str;
-
-		if (s)
-			return s;
-	}
-
-	return "<unknown error>";
-}
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_strerror.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-extern "C" {
-
-#include "fdt_strerror.c"
-
-};
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_sw.c	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,258 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- *  a) This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of the
- *     License, or (at your option) any later version.
- *
- *     This library is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this library; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Alternatively,
- *
- *  b) Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *     1. Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *     2. Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include "libfdt_env.h"
-
-#include <fdt.h>
-#include <libfdt.h>
-
-#include "libfdt_internal.h"
-
-static int check_header_sw(void *fdt)
-{
-	if (fdt_magic(fdt) != SW_MAGIC)
-		return -FDT_ERR_BADMAGIC;
-	return 0;
-}
-
-static void *grab_space(void *fdt, int len)
-{
-	int offset = fdt_size_dt_struct(fdt);
-	int spaceleft;
-
-	spaceleft = fdt_totalsize(fdt) - fdt_off_dt_struct(fdt)
-		- fdt_size_dt_strings(fdt);
-
-	if ((offset + len < offset) || (offset + len > spaceleft))
-		return NULL;
-
-	fdt_set_size_dt_struct(fdt, offset + len);
-	return fdt_offset_ptr_w(fdt, offset, len);
-}
-
-int fdt_create(void *buf, int bufsize)
-{
-	void *fdt = buf;
-
-	if (bufsize < sizeof(struct fdt_header))
-		return -FDT_ERR_NOSPACE;
-
-	memset(buf, 0, bufsize);
-
-	fdt_set_magic(fdt, SW_MAGIC);
-	fdt_set_version(fdt, FDT_LAST_SUPPORTED_VERSION);
-	fdt_set_last_comp_version(fdt, FDT_FIRST_SUPPORTED_VERSION);
-	fdt_set_totalsize(fdt,  bufsize);
-
-	fdt_set_off_mem_rsvmap(fdt, ALIGN(sizeof(struct fdt_header),
-					  sizeof(struct fdt_reserve_entry)));
-	fdt_set_off_dt_struct(fdt, fdt_off_mem_rsvmap(fdt));
-	fdt_set_off_dt_strings(fdt, bufsize);
-
-	return 0;
-}
-
-int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size)
-{
-	struct fdt_reserve_entry *re;
-	int err = check_header_sw(fdt);
-	int offset;
-
-	if (err)
-		return err;
-	if (fdt_size_dt_struct(fdt))
-		return -FDT_ERR_BADSTATE;
-
-	offset = fdt_off_dt_struct(fdt);
-	if ((offset + sizeof(*re)) > fdt_totalsize(fdt))
-		return -FDT_ERR_NOSPACE;
-
-	re = (struct fdt_reserve_entry *)(fdt + offset);
-	re->address = cpu_to_fdt64(addr);
-	re->size = cpu_to_fdt64(size);
-
-	fdt_set_off_dt_struct(fdt, offset + sizeof(*re));
-
-	return 0;
-}
-
-int fdt_finish_reservemap(void *fdt)
-{
-	return fdt_add_reservemap_entry(fdt, 0, 0);
-}
-
-int fdt_begin_node(void *fdt, const char *name)
-{
-	struct fdt_node_header *nh;
-	int err = check_header_sw(fdt);
-	int namelen = strlen(name) + 1;
-
-	if (err)
-		return err;
-
-	nh = grab_space(fdt, sizeof(*nh) + ALIGN(namelen, FDT_TAGSIZE));
-	if (! nh)
-		return -FDT_ERR_NOSPACE;
-
-	nh->tag = cpu_to_fdt32(FDT_BEGIN_NODE);
-	memcpy(nh->name, name, namelen);
-	return 0;
-}
-
-int fdt_end_node(void *fdt)
-{
-	uint32_t *en;
-	int err = check_header_sw(fdt);
-
-	if (err)
-		return err;
-
-	en = grab_space(fdt, FDT_TAGSIZE);
-	if (! en)
-		return -FDT_ERR_NOSPACE;
-
-	*en = cpu_to_fdt32(FDT_END_NODE);
-	return 0;
-}
-
-static int find_add_string(void *fdt, const char *s)
-{
-	char *strtab = (char *)fdt + fdt_totalsize(fdt);
-	const char *p;
-	int strtabsize = fdt_size_dt_strings(fdt);
-	int len = strlen(s) + 1;
-	int struct_top, offset;
-
-	p = _fdt_find_string(strtab - strtabsize, strtabsize, s);
-	if (p)
-		return p - strtab;
-
-	/* Add it */
-	offset = -strtabsize - len;
-	struct_top = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);
-	if (fdt_totalsize(fdt) + offset < struct_top)
-		return 0; /* no more room :( */
-
-	memcpy(strtab + offset, s, len);
-	fdt_set_size_dt_strings(fdt, strtabsize + len);
-	return offset;
-}
-
-int fdt_property(void *fdt, const char *name, const void *val, int len)
-{
-	struct fdt_property *prop;
-	int err = check_header_sw(fdt);
-	int nameoff;
-
-	if (err)
-		return err;
-
-	nameoff = find_add_string(fdt, name);
-	if (nameoff == 0)
-		return -FDT_ERR_NOSPACE;
-
-	prop = grab_space(fdt, sizeof(*prop) + ALIGN(len, FDT_TAGSIZE));
-	if (! prop)
-		return -FDT_ERR_NOSPACE;
-
-	prop->tag = cpu_to_fdt32(FDT_PROP);
-	prop->nameoff = cpu_to_fdt32(nameoff);
-	prop->len = cpu_to_fdt32(len);
-	memcpy(prop->data, val, len);
-	return 0;
-}
-
-int fdt_finish(void *fdt)
-{
-	int err = check_header_sw(fdt);
-	char *p = (char *)fdt;
-	uint32_t *end;
-	int oldstroffset, newstroffset;
-	uint32_t tag;
-	int offset, nextoffset;
-
-	if (err)
-		return err;
-
-	/* Add terminator */
-	end = grab_space(fdt, sizeof(*end));
-	if (! end)
-		return -FDT_ERR_NOSPACE;
-	*end = cpu_to_fdt32(FDT_END);
-
-	/* Relocate the string table */
-	oldstroffset = fdt_totalsize(fdt) - fdt_size_dt_strings(fdt);
-	newstroffset = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);
-	memmove(p + newstroffset, p + oldstroffset, fdt_size_dt_strings(fdt));
-	fdt_set_off_dt_strings(fdt, newstroffset);
-
-	/* Walk the structure, correcting string offsets */
-	offset = 0;
-	while ((tag = fdt_next_tag(fdt, offset, &nextoffset)) != FDT_END) {
-		if (tag == FDT_PROP) {
-			struct fdt_property *prop =
-				fdt_offset_ptr_w(fdt, offset, sizeof(*prop));
-			int nameoff;
-
-			if (! prop)
-				return -FDT_ERR_BADSTRUCTURE;
-
-			nameoff = fdt32_to_cpu(prop->nameoff);
-			nameoff += fdt_size_dt_strings(fdt);
-			prop->nameoff = cpu_to_fdt32(nameoff);
-		}
-		offset = nextoffset;
-	}
-
-	/* Finally, adjust the header */
-	fdt_set_totalsize(fdt, newstroffset + fdt_size_dt_strings(fdt));
-	fdt_set_magic(fdt, FDT_MAGIC);
-	return 0;
-}
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_sw.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-extern "C" {
-
-#include "fdt_sw.c"
-
-};
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_wip.c	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- *  a) This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of the
- *     License, or (at your option) any later version.
- *
- *     This library is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this library; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Alternatively,
- *
- *  b) Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *     1. Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *     2. Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include "libfdt_env.h"
-
-#include <fdt.h>
-#include <libfdt.h>
-
-#include "libfdt_internal.h"
-
-int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,
-			const void *val, int len)
-{
-	void *propval;
-	int proplen;
-
-	propval = fdt_getprop_w(fdt, nodeoffset, name, &proplen);
-	if (! propval)
-		return proplen;
-
-	if (proplen != len)
-		return -FDT_ERR_NOSPACE;
-
-	memcpy(propval, val, len);
-	return 0;
-}
-
-static void nop_region(void *start, int len)
-{
-	uint32_t *p;
-
-	for (p = start; (void *)p < (start + len); p++)
-		*p = cpu_to_fdt32(FDT_NOP);
-}
-
-int fdt_nop_property(void *fdt, int nodeoffset, const char *name)
-{
-	struct fdt_property *prop;
-	int len;
-
-	prop = fdt_get_property_w(fdt, nodeoffset, name, &len);
-	if (! prop)
-		return len;
-
-	nop_region(prop, len + sizeof(*prop));
-
-	return 0;
-}
-
-int _fdt_node_end_offset(void *fdt, int nodeoffset)
-{
-	int level = 0;
-	uint32_t tag;
-	int offset, nextoffset;
-
-	tag = fdt_next_tag(fdt, nodeoffset, &nextoffset);
-	if (tag != FDT_BEGIN_NODE)
-		return -FDT_ERR_BADOFFSET;
-	do {
-		offset = nextoffset;
-		tag = fdt_next_tag(fdt, offset, &nextoffset);
-
-		switch (tag) {
-		case FDT_END:
-			return offset;
-
-		case FDT_BEGIN_NODE:
-			level++;
-			break;
-
-		case FDT_END_NODE:
-			level--;
-			break;
-
-		case FDT_PROP:
-		case FDT_NOP:
-			break;
-
-		default:
-			return -FDT_ERR_BADSTRUCTURE;
-		}
-	} while (level >= 0);
-
-	return nextoffset;
-}
-
-int fdt_nop_node(void *fdt, int nodeoffset)
-{
-	int endoffset;
-
-	endoffset = _fdt_node_end_offset(fdt, nodeoffset);
-	if (endoffset < 0)
-		return endoffset;
-
-	nop_region(fdt_offset_ptr_w(fdt, nodeoffset, 0), endoffset - nodeoffset);
-	return 0;
-}
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/fdt_wip.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-extern "C" {
-
-#include "fdt_wip.c"
-
-};
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/libfdt.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1080 +0,0 @@
-#ifndef _LIBFDT_H
-#define _LIBFDT_H
-/*
- * libfdt - Flat Device Tree manipulation
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- *  a) This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of the
- *     License, or (at your option) any later version.
- *
- *     This library is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this library; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Alternatively,
- *
- *  b) Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *     1. Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *     2. Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "libfdt_env.h"
-#include "fdt.h"
-
-#define FDT_FIRST_SUPPORTED_VERSION	0x10
-#define FDT_LAST_SUPPORTED_VERSION	0x11
-
-/* Error codes: informative error codes */
-#define FDT_ERR_NOTFOUND	1
-	/* FDT_ERR_NOTFOUND: The requested node or property does not exist */
-#define FDT_ERR_EXISTS		2
-	/* FDT_ERR_EXISTS: Attemped to create a node or property which
-	 * already exists */
-#define FDT_ERR_NOSPACE		3
-	/* FDT_ERR_NOSPACE: Operation needed to expand the device
-	 * tree, but its buffer did not have sufficient space to
-	 * contain the expanded tree. Use fdt_open_into() to move the
-	 * device tree to a buffer with more space. */
-
-/* Error codes: codes for bad parameters */
-#define FDT_ERR_BADOFFSET	4
-	/* FDT_ERR_BADOFFSET: Function was passed a structure block
-	 * offset which is out-of-bounds, or which points to an
-	 * unsuitable part of the structure for the operation. */
-#define FDT_ERR_BADPATH		5
-	/* FDT_ERR_BADPATH: Function was passed a badly formatted path
-	 * (e.g. missing a leading / for a function which requires an
-	 * absolute path) */
-#define FDT_ERR_BADPHANDLE	6
-	/* FDT_ERR_BADPHANDLE: Function was passed an invalid phandle
-	 * value.  phandle values of 0 and -1 are not permitted. */
-#define FDT_ERR_BADSTATE	7
-	/* FDT_ERR_BADSTATE: Function was passed an incomplete device
-	 * tree created by the sequential-write functions, which is
-	 * not sufficiently complete for the requested operation. */
-
-/* Error codes: codes for bad device tree blobs */
-#define FDT_ERR_TRUNCATED	8
-	/* FDT_ERR_TRUNCATED: Structure block of the given device tree
-	 * ends without an FDT_END tag. */
-#define FDT_ERR_BADMAGIC	9
-	/* FDT_ERR_BADMAGIC: Given "device tree" appears not to be a
-	 * device tree at all - it is missing the flattened device
-	 * tree magic number. */
-#define FDT_ERR_BADVERSION	10
-	/* FDT_ERR_BADVERSION: Given device tree has a version which
-	 * can't be handled by the requested operation.  For
-	 * read-write functions, this may mean that fdt_open_into() is
-	 * required to convert the tree to the expected version. */
-#define FDT_ERR_BADSTRUCTURE	11
-	/* FDT_ERR_BADSTRUCTURE: Given device tree has a corrupt
-	 * structure block or other serious error (e.g. misnested
-	 * nodes, or subnodes preceding properties). */
-#define FDT_ERR_BADLAYOUT	12
-	/* FDT_ERR_BADLAYOUT: For read-write functions, the given
-	 * device tree has it's sub-blocks in an order that the
-	 * function can't handle (memory reserve map, then structure,
-	 * then strings).  Use fdt_open_into() to reorganize the tree
-	 * into a form suitable for the read-write operations. */
-
-/* "Can't happen" error indicating a bug in libfdt */
-#define FDT_ERR_INTERNAL	13
-	/* FDT_ERR_INTERNAL: libfdt has failed an internal assertion.
-	 * Should never be returned, if it is, it indicates a bug in
-	 * libfdt itself. */
-
-#define FDT_ERR_MAX		13
-
-/**********************************************************************/
-/* Low-level functions (you probably don't need these)                */
-/**********************************************************************/
-
-const void *fdt_offset_ptr(const void *fdt, int offset, int checklen);
-static inline void *fdt_offset_ptr_w(void *fdt, int offset, int checklen)
-{
-	return (void *)fdt_offset_ptr(fdt, offset, checklen);
-}
-
-uint32_t fdt_next_tag(const void *fdt, int offset, int *nextoffset);
-
-/**********************************************************************/
-/* General functions                                                  */
-/**********************************************************************/
-
-#define fdt_get_header(fdt, field) \
-	(fdt32_to_cpu(((const struct fdt_header *)(fdt))->field))
-#define fdt_magic(fdt) 			(fdt_get_header(fdt, magic))
-#define fdt_totalsize(fdt)		(fdt_get_header(fdt, totalsize))
-#define fdt_off_dt_struct(fdt)		(fdt_get_header(fdt, off_dt_struct))
-#define fdt_off_dt_strings(fdt)		(fdt_get_header(fdt, off_dt_strings))
-#define fdt_off_mem_rsvmap(fdt)		(fdt_get_header(fdt, off_mem_rsvmap))
-#define fdt_version(fdt)		(fdt_get_header(fdt, version))
-#define fdt_last_comp_version(fdt) 	(fdt_get_header(fdt, last_comp_version))
-#define fdt_boot_cpuid_phys(fdt) 	(fdt_get_header(fdt, boot_cpuid_phys))
-#define fdt_size_dt_strings(fdt) 	(fdt_get_header(fdt, size_dt_strings))
-#define fdt_size_dt_struct(fdt)		(fdt_get_header(fdt, size_dt_struct))
-
-#define __fdt_set_hdr(name) \
-	static inline void fdt_set_##name(void *fdt, uint32_t val) \
-	{ \
-	  struct fdt_header *fdth = (struct fdt_header *)fdt;	\
-	  fdth->name = cpu_to_fdt32(val); \
-	}
-
-__fdt_set_hdr(magic);
-__fdt_set_hdr(totalsize);
-__fdt_set_hdr(off_dt_struct);
-__fdt_set_hdr(off_dt_strings);
-__fdt_set_hdr(off_mem_rsvmap);
-__fdt_set_hdr(version);
-__fdt_set_hdr(last_comp_version);
-__fdt_set_hdr(boot_cpuid_phys);
-__fdt_set_hdr(size_dt_strings);
-__fdt_set_hdr(size_dt_struct);
-#undef __fdt_set_hdr
-
-/**
- * fdt_check_header - sanity check a device tree or possible device tree
- * @fdt: pointer to data which might be a flattened device tree
- *
- * fdt_check_header() checks that the given buffer contains what
- * appears to be a flattened device tree with sane information in its
- * header.
- *
- * returns:
- *     0, if the buffer appears to contain a valid device tree
- *     -FDT_ERR_BADMAGIC,
- *     -FDT_ERR_BADVERSION,
- *     -FDT_ERR_BADSTATE, standard meanings, as above
- */
-int fdt_check_header(const void *fdt);
-
-/**
- * fdt_move - move a device tree around in memory
- * @fdt: pointer to the device tree to move
- * @buf: pointer to memory where the device is to be moved
- * @bufsize: size of the memory space at buf
- *
- * fdt_move() relocates, if possible, the device tree blob located at
- * fdt to the buffer at buf of size bufsize.  The buffer may overlap
- * with the existing device tree blob at fdt.  Therefore,
- *     fdt_move(fdt, fdt, fdt_totalsize(fdt))
- * should always succeed.
- *
- * returns:
- *     0, on success
- *     -FDT_ERR_NOSPACE, bufsize is insufficient to contain the device tree
- *     -FDT_ERR_BADMAGIC,
- *     -FDT_ERR_BADVERSION,
- *     -FDT_ERR_BADSTATE, standard meanings
- */
-int fdt_move(const void *fdt, void *buf, int bufsize);
-
-/**********************************************************************/
-/* Read-only functions                                                */
-/**********************************************************************/
-
-/**
- * fdt_string - retreive a string from the strings block of a device tree
- * @fdt: pointer to the device tree blob
- * @stroffset: offset of the string within the strings block (native endian)
- *
- * fdt_string() retrieves a pointer to a single string from the
- * strings block of the device tree blob at fdt.
- *
- * returns:
- *     a pointer to the string, on success
- *     NULL, if stroffset is out of bounds
- */
-const char *fdt_string(const void *fdt, int stroffset);
-
-/**
- * fdt_num_mem_rsv - retreive the number of memory reserve map entries
- * @fdt: pointer to the device tree blob
- *
- * Returns the number of entries in the device tree blob's memory
- * reservation map.  This does not include the terminating 0,0 entry
- * or any other (0,0) entries reserved for expansion.
- *
- * returns:
- *     the number of entries
- */
-int fdt_num_mem_rsv(const void *fdt);
-
-/**
- * fdt_get_mem_rsv - retreive one memory reserve map entry
- * @fdt: pointer to the device tree blob
- * @address, @size: pointers to 64-bit variables
- *
- * On success, *address and *size will contain the address and size of
- * the n-th reserve map entry from the device tree blob, in
- * native-endian format.
- *
- * returns:
- *     0, on success
- *     -FDT_ERR_BADMAGIC,
- *     -FDT_ERR_BADVERSION,
- *     -FDT_ERR_BADSTATE, standard meanings
- */
-int fdt_get_mem_rsv(const void *fdt, int n, uint64_t *address, uint64_t *size);
-
-/**
- * fdt_subnode_offset_namelen - find a subnode based on substring
- * @fdt: pointer to the device tree blob
- * @parentoffset: structure block offset of a node
- * @name: name of the subnode to locate
- * @namelen: number of characters of name to consider
- *
- * Identical to fdt_subnode_offset(), but only examine the first
- * namelen characters of name for matching the subnode name.  This is
- * useful for finding subnodes based on a portion of a larger string,
- * such as a full path.
- */
-int fdt_subnode_offset_namelen(const void *fdt, int parentoffset,
-			       const char *name, int namelen);
-/**
- * fdt_subnode_offset - find a subnode of a given node
- * @fdt: pointer to the device tree blob
- * @parentoffset: structure block offset of a node
- * @name: name of the subnode to locate
- *
- * fdt_subnode_offset() finds a subnode of the node at structure block
- * offset parentoffset with the given name.  name may include a unit
- * address, in which case fdt_subnode_offset() will find the subnode
- * with that unit address, or the unit address may be omitted, in
- * which case fdt_subnode_offset() will find an arbitrary subnode
- * whose name excluding unit address matches the given name.
- *
- * returns:
- *	structure block offset of the requested subnode (>=0), on success
- *	-FDT_ERR_NOTFOUND, if the requested subnode does not exist
- *	-FDT_ERR_BADOFFSET, if parentoffset did not point to an FDT_BEGIN_NODE tag
- *      -FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE,
- *	-FDT_ERR_TRUNCATED, standard meanings.
- */
-int fdt_subnode_offset(const void *fdt, int parentoffset, const char *name);
-
-/**
- * fdt_path_offset - find a tree node by its full path
- * @fdt: pointer to the device tree blob
- * @path: full path of the node to locate
- *
- * fdt_path_offset() finds a node of a given path in the device tree.
- * Each path component may omit the unit address portion, but the
- * results of this are undefined if any such path component is
- * ambiguous (that is if there are multiple nodes at the relevant
- * level matching the given component, differentiated only by unit
- * address).
- *
- * returns:
- *	structure block offset of the node with the requested path (>=0), on success
- *	-FDT_ERR_BADPATH, given path does not begin with '/' or is invalid
- *	-FDT_ERR_NOTFOUND, if the requested node does not exist
- *      -FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE,
- *	-FDT_ERR_TRUNCATED, standard meanings.
- */
-int fdt_path_offset(const void *fdt, const char *path);
-
-/**
- * fdt_get_name - retreive the name of a given node
- * @fdt: pointer to the device tree blob
- * @nodeoffset: structure block offset of the starting node
- * @lenp: pointer to an integer variable (will be overwritten) or NULL
- *
- * fdt_get_name() retrieves the name (including unit address) of the
- * device tree node at structure block offset nodeoffset.  If lenp is
- * non-NULL, the length of this name is also returned, in the integer
- * pointed to by lenp.
- *
- * returns:
- *	pointer to the node's name, on success
- *		If lenp is non-NULL, *lenp contains the length of that name (>=0)
- *	NULL, on error
- *		if lenp is non-NULL *lenp contains an error code (<0):
- *		-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
- *		-FDT_ERR_BADMAGIC,
- *		-FDT_ERR_BADVERSION,
- *		-FDT_ERR_BADSTATE, standard meanings
- */
-const char *fdt_get_name(const void *fdt, int nodeoffset, int *lenp);
-
-/**
- * fdt_get_property - find a given property in a given node
- * @fdt: pointer to the device tree blob
- * @nodeoffset: offset of the node whose property to find
- * @name: name of the property to find
- * @lenp: pointer to an integer variable (will be overwritten) or NULL
- *
- * fdt_get_property() retrieves a pointer to the fdt_property
- * structure within the device tree blob corresponding to the property
- * named 'name' of the node at offset nodeoffset.  If lenp is
- * non-NULL, the length of the property value also returned, in the
- * integer pointed to by lenp.
- *
- * returns:
- *	pointer to the structure representing the property
- *		if lenp is non-NULL, *lenp contains the length of the property
- *		value (>=0)
- *	NULL, on error
- *		if lenp is non-NULL, *lenp contains an error code (<0):
- *		-FDT_ERR_NOTFOUND, node does not have named property
- *		-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
- *		-FDT_ERR_BADMAGIC,
- *		-FDT_ERR_BADVERSION,
- *		-FDT_ERR_BADSTATE,
- *		-FDT_ERR_BADSTRUCTURE,
- *		-FDT_ERR_TRUNCATED, standard meanings
- */
-const struct fdt_property *fdt_get_property(const void *fdt, int nodeoffset,
-					    const char *name, int *lenp);
-static inline struct fdt_property *fdt_get_property_w(void *fdt, int nodeoffset,
-						      const char *name,
-						      int *lenp)
-{
-	return (struct fdt_property *)fdt_get_property(fdt, nodeoffset,
-						       name, lenp);
-}
-
-/**
- * fdt_getprop - retrieve the value of a given property
- * @fdt: pointer to the device tree blob
- * @nodeoffset: offset of the node whose property to find
- * @name: name of the property to find
- * @lenp: pointer to an integer variable (will be overwritten) or NULL
- *
- * fdt_getprop() retrieves a pointer to the value of the property
- * named 'name' of the node at offset nodeoffset (this will be a
- * pointer to within the device blob itself, not a copy of the value).
- * If lenp is non-NULL, the length of the property value also
- * returned, in the integer pointed to by lenp.
- *
- * returns:
- *	pointer to the property's value
- *		if lenp is non-NULL, *lenp contains the length of the property
- *		value (>=0)
- *	NULL, on error
- *		if lenp is non-NULL, *lenp contains an error code (<0):
- *		-FDT_ERR_NOTFOUND, node does not have named property
- *		-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
- *		-FDT_ERR_BADMAGIC,
- *		-FDT_ERR_BADVERSION,
- *		-FDT_ERR_BADSTATE,
- *		-FDT_ERR_BADSTRUCTURE,
- *		-FDT_ERR_TRUNCATED, standard meanings
- */
-const void *fdt_getprop(const void *fdt, int nodeoffset,
-			const char *name, int *lenp);
-static inline void *fdt_getprop_w(void *fdt, int nodeoffset,
-				  const char *name, int *lenp)
-{
-	return (void *)fdt_getprop(fdt, nodeoffset, name, lenp);
-}
-
-/**
- * fdt_get_phandle - retreive the phandle of a given node
- * @fdt: pointer to the device tree blob
- * @nodeoffset: structure block offset of the node
- *
- * fdt_get_phandle() retrieves the phandle of the device tree node at
- * structure block offset nodeoffset.
- *
- * returns:
- *	the phandle of the node at nodeoffset, on succes (!= 0, != -1)
- *	0, if the node has no phandle, or another error occurs
- */
-uint32_t fdt_get_phandle(const void *fdt, int nodeoffset);
-
-/**
- * fdt_get_path - determine the full path of a node
- * @fdt: pointer to the device tree blob
- * @nodeoffset: offset of the node whose path to find
- * @buf: character buffer to contain the returned path (will be overwritten)
- * @buflen: size of the character buffer at buf
- *
- * fdt_get_path() computes the full path of the node at offset
- * nodeoffset, and records that path in the buffer at buf.
- *
- * NOTE: This function is expensive, as it must scan the device tree
- * structure from the start to nodeoffset.
- *
- * returns:
- *	0, on success
- *		buf contains the absolute path of the node at
- *		nodeoffset, as a NUL-terminated string.
- * 	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
- *	-FDT_ERR_NOSPACE, the path of the given node is longer than (bufsize-1)
- *		characters and will not fit in the given buffer.
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE, standard meanings
- */
-int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen);
-
-/**
- * fdt_supernode_atdepth_offset - find a specific ancestor of a node
- * @fdt: pointer to the device tree blob
- * @nodeoffset: offset of the node whose parent to find
- * @supernodedepth: depth of the ancestor to find
- * @nodedepth: pointer to an integer variable (will be overwritten) or NULL
- *
- * fdt_supernode_atdepth_offset() finds an ancestor of the given node
- * at a specific depth from the root (where the root itself has depth
- * 0, its immediate subnodes depth 1 and so forth).  So
- *	fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, NULL);
- * will always return 0, the offset of the root node.  If the node at
- * nodeoffset has depth D, then:
- *	fdt_supernode_atdepth_offset(fdt, nodeoffset, D, NULL);
- * will return nodeoffset itself.
- *
- * NOTE: This function is expensive, as it must scan the device tree
- * structure from the start to nodeoffset.
- *
- * returns:
-
- *	structure block offset of the node at node offset's ancestor
- *		of depth supernodedepth (>=0), on success
- * 	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
-*	-FDT_ERR_NOTFOUND, supernodedepth was greater than the depth of nodeoffset
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE, standard meanings
- */
-int fdt_supernode_atdepth_offset(const void *fdt, int nodeoffset,
-				 int supernodedepth, int *nodedepth);
-
-/**
- * fdt_node_depth - find the depth of a given node
- * @fdt: pointer to the device tree blob
- * @nodeoffset: offset of the node whose parent to find
- *
- * fdt_node_depth() finds the depth of a given node.  The root node
- * has depth 0, its immediate subnodes depth 1 and so forth.
- *
- * NOTE: This function is expensive, as it must scan the device tree
- * structure from the start to nodeoffset.
- *
- * returns:
- *	depth of the node at nodeoffset (>=0), on success
- * 	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE, standard meanings
- */
-int fdt_node_depth(const void *fdt, int nodeoffset);
-
-/**
- * fdt_parent_offset - find the parent of a given node
- * @fdt: pointer to the device tree blob
- * @nodeoffset: offset of the node whose parent to find
- *
- * fdt_parent_offset() locates the parent node of a given node (that
- * is, it finds the offset of the node which contains the node at
- * nodeoffset as a subnode).
- *
- * NOTE: This function is expensive, as it must scan the device tree
- * structure from the start to nodeoffset, *twice*.
- *
- * returns:
- *	stucture block offset of the parent of the node at nodeoffset
- *		(>=0), on success
- * 	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE, standard meanings
- */
-int fdt_parent_offset(const void *fdt, int nodeoffset);
-
-/**
- * fdt_node_offset_by_prop_value - find nodes with a given property value
- * @fdt: pointer to the device tree blob
- * @startoffset: only find nodes after this offset
- * @propname: property name to check
- * @propval: property value to search for
- * @proplen: length of the value in propval
- *
- * fdt_node_offset_by_prop_value() returns the offset of the first
- * node after startoffset, which has a property named propname whose
- * value is of length proplen and has value equal to propval; or if
- * startoffset is -1, the very first such node in the tree.
- *
- * To iterate through all nodes matching the criterion, the following
- * idiom can be used:
- *	offset = fdt_node_offset_by_prop_value(fdt, -1, propname,
- *					       propval, proplen);
- *	while (offset != -FDT_ERR_NOTFOUND) {
- *		// other code here
- *		offset = fdt_node_offset_by_prop_value(fdt, offset, propname,
- *						       propval, proplen);
- *	}
- *
- * Note the -1 in the first call to the function, if 0 is used here
- * instead, the function will never locate the root node, even if it
- * matches the criterion.
- *
- * returns:
- *	structure block offset of the located node (>= 0, >startoffset),
- *		 on success
- *	-FDT_ERR_NOTFOUND, no node matching the criterion exists in the
- *		tree after startoffset
- * 	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE, standard meanings
- */
-int fdt_node_offset_by_prop_value(const void *fdt, int startoffset,
-				  const char *propname,
-				  const void *propval, int proplen);
-
-/**
- * fdt_node_offset_by_phandle - find the node with a given phandle
- * @fdt: pointer to the device tree blob
- * @phandle: phandle value
- *
- * fdt_node_offset_by_prop_value() returns the offset of the node
- * which has the given phandle value.  If there is more than one node
- * in the tree with the given phandle (an invalid tree), results are
- * undefined.
- *
- * returns:
- *	structure block offset of the located node (>= 0), on success
- *	-FDT_ERR_NOTFOUND, no node with that phandle exists
- *	-FDT_ERR_BADPHANDLE, given phandle value was invalid (0 or -1)
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE, standard meanings
- */
-int fdt_node_offset_by_phandle(const void *fdt, uint32_t phandle);
-
-/**
- * fdt_node_check_compatible: check a node's compatible property
- * @fdt: pointer to the device tree blob
- * @nodeoffset: offset of a tree node
- * @compatible: string to match against
- *
- *
- * fdt_node_check_compatible() returns 0 if the given node contains a
- * 'compatible' property with the given string as one of its elements,
- * it returns non-zero otherwise, or on error.
- *
- * returns:
- *	0, if the node has a 'compatible' property listing the given string
- *	1, if the node has a 'compatible' property, but it does not list
- *		the given string
- *	-FDT_ERR_NOTFOUND, if the given node has no 'compatible' property
- * 	-FDT_ERR_BADOFFSET, if nodeoffset does not refer to a BEGIN_NODE tag
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE, standard meanings
- */
-int fdt_node_check_compatible(const void *fdt, int nodeoffset,
-			      const char *compatible);
-
-/**
- * fdt_node_offset_by_compatible - find nodes with a given 'compatible' value
- * @fdt: pointer to the device tree blob
- * @startoffset: only find nodes after this offset
- * @compatible: 'compatible' string to match against
- *
- * fdt_node_offset_by_compatible() returns the offset of the first
- * node after startoffset, which has a 'compatible' property which
- * lists the given compatible string; or if startoffset is -1, the
- * very first such node in the tree.
- *
- * To iterate through all nodes matching the criterion, the following
- * idiom can be used:
- *	offset = fdt_node_offset_by_compatible(fdt, -1, compatible);
- *	while (offset != -FDT_ERR_NOTFOUND) {
- *		// other code here
- *		offset = fdt_node_offset_by_compatible(fdt, offset, compatible);
- *	}
- *
- * Note the -1 in the first call to the function, if 0 is used here
- * instead, the function will never locate the root node, even if it
- * matches the criterion.
- *
- * returns:
- *	structure block offset of the located node (>= 0, >startoffset),
- *		 on success
- *	-FDT_ERR_NOTFOUND, no node matching the criterion exists in the
- *		tree after startoffset
- * 	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE, standard meanings
- */
-int fdt_node_offset_by_compatible(const void *fdt, int startoffset,
-				  const char *compatible);
-
-/**********************************************************************/
-/* Write-in-place functions                                           */
-/**********************************************************************/
-
-/**
- * fdt_setprop_inplace - change a property's value, but not its size
- * @fdt: pointer to the device tree blob
- * @nodeoffset: offset of the node whose property to change
- * @name: name of the property to change
- * @val: pointer to data to replace the property value with
- * @len: length of the property value
- *
- * fdt_setprop_inplace() replaces the value of a given property with
- * the data in val, of length len.  This function cannot change the
- * size of a property, and so will only work if len is equal to the
- * current length of the property.
- *
- * This function will alter only the bytes in the blob which contain
- * the given property value, and will not alter or move any other part
- * of the tree.
- *
- * returns:
- *	0, on success
- *	-FDT_ERR_NOSPACE, if len is not equal to the property's current length
- *	-FDT_ERR_NOTFOUND, node does not have the named property
- *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE,
- *	-FDT_ERR_TRUNCATED, standard meanings
- */
-int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,
-			const void *val, int len);
-
-/**
- * fdt_setprop_inplace_cell - change the value of a single-cell property
- * @fdt: pointer to the device tree blob
- * @nodeoffset: offset of the node whose property to change
- * @name: name of the property to change
- * @val: cell (32-bit integer) value to replace the property with
- *
- * fdt_setprop_inplace_cell() replaces the value of a given property
- * with the 32-bit integer cell value in val, converting val to
- * big-endian if necessary.  This function cannot change the size of a
- * property, and so will only work if the property already exists and
- * has length 4.
- *
- * This function will alter only the bytes in the blob which contain
- * the given property value, and will not alter or move any other part
- * of the tree.
- *
- * returns:
- *	0, on success
- *	-FDT_ERR_NOSPACE, if the property's length is not equal to 4
-  *	-FDT_ERR_NOTFOUND, node does not have the named property
- *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE,
- *	-FDT_ERR_TRUNCATED, standard meanings
- */
-static inline int fdt_setprop_inplace_cell(void *fdt, int nodeoffset,
-					   const char *name, uint32_t val)
-{
-	val = cpu_to_fdt32(val);
-	return fdt_setprop_inplace(fdt, nodeoffset, name, &val, sizeof(val));
-}
-
-/**
- * fdt_nop_property - replace a property with nop tags
- * @fdt: pointer to the device tree blob
- * @nodeoffset: offset of the node whose property to nop
- * @name: name of the property to nop
- *
- * fdt_nop_property() will replace a given property's representation
- * in the blob with FDT_NOP tags, effectively removing it from the
- * tree.
- *
- * This function will alter only the bytes in the blob which contain
- * the property, and will not alter or move any other part of the
- * tree.
- *
- * returns:
- *	0, on success
- *	-FDT_ERR_NOTFOUND, node does not have the named property
- *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE,
- *	-FDT_ERR_TRUNCATED, standard meanings
- */
-int fdt_nop_property(void *fdt, int nodeoffset, const char *name);
-
-/**
- * fdt_nop_node - replace a node (subtree) with nop tags
- * @fdt: pointer to the device tree blob
- * @nodeoffset: offset of the node to nop
- *
- * fdt_nop_node() will replace a given node's representation in the
- * blob, including all its subnodes, if any, with FDT_NOP tags,
- * effectively removing it from the tree.
- *
- * This function will alter only the bytes in the blob which contain
- * the node and its properties and subnodes, and will not alter or
- * move any other part of the tree.
- *
- * returns:
- *	0, on success
- *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE,
- *	-FDT_ERR_TRUNCATED, standard meanings
- */
-int fdt_nop_node(void *fdt, int nodeoffset);
-
-/**********************************************************************/
-/* Sequential write functions                                         */
-/**********************************************************************/
-
-int fdt_create(void *buf, int bufsize);
-int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size);
-int fdt_finish_reservemap(void *fdt);
-int fdt_begin_node(void *fdt, const char *name);
-int fdt_property(void *fdt, const char *name, const void *val, int len);
-static inline int fdt_property_cell(void *fdt, const char *name, uint32_t val)
-{
-	val = cpu_to_fdt32(val);
-	return fdt_property(fdt, name, &val, sizeof(val));
-}
-#define fdt_property_string(fdt, name, str) \
-	fdt_property(fdt, name, str, strlen(str)+1)
-int fdt_end_node(void *fdt);
-int fdt_finish(void *fdt);
-
-/**********************************************************************/
-/* Read-write functions                                               */
-/**********************************************************************/
-
-int fdt_open_into(const void *fdt, void *buf, int bufsize);
-int fdt_pack(void *fdt);
-
-/**
- * fdt_add_mem_rsv - add one memory reserve map entry
- * @fdt: pointer to the device tree blob
- * @addres, @size: 64-bit values (native endian)
- *
- * Adds a reserve map entry to the given blob reserving a region at
- * address address of length size.
- *
- * This function will insert data into the reserve map and will
- * therfore change the indexes of some entries in the table.
- *
- * returns:
- *	0, on success
- *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
- *		contain the new reservation entry
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE,
- *	-FDT_ERR_BADLAYOUT,
- *	-FDT_ERR_TRUNCATED, standard meanings
- */
-int fdt_add_mem_rsv(void *fdt, uint64_t address, uint64_t size);
-
-/**
- * fdt_del_mem_rsv - remove a memory reserve map entry
- * @fdt: pointer to the device tree blob
- * @n: entry to remove
- *
- * fdt_del_mem_rsv() removes the n-th memory reserve map entry from
- * the blob.
- *
- * This function will delete data from the reservation table and will
- * therfore change the indexes of some entries in the table.
- *
- * returns:
- *	0, on success
- *	-FDT_ERR_NOTFOUND, there is no entry of the given index (i.e. there
- *		are less than n+1 reserve map entries)
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE,
- *	-FDT_ERR_BADLAYOUT,
- *	-FDT_ERR_TRUNCATED, standard meanings
- */
-int fdt_del_mem_rsv(void *fdt, int n);
-
-/**
- * fdt_set_name - change the name of a given node
- * @fdt: pointer to the device tree blob
- * @nodeoffset: structure block offset of a node
- * @name: name to give the node
- *
- * fdt_set_name() replaces the name (including unit address, if any)
- * of the given node with the given string.  NOTE: this function can't
- * efficiently check if the new name is unique amongst the given
- * node's siblings; results are undefined if this function is invoked
- * with a name equal to one of the given node's siblings.
- *
- * This function may insert or delete data from the blob, and will
- * therefore change the offsets of some existing nodes.
- *
- * returns:
- *	0, on success
- *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob
- *		to contain the new name
- *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE, standard meanings
- */
-int fdt_set_name(void *fdt, int nodeoffset, const char *name);
-
-/**
- * fdt_setprop - create or change a property
- * @fdt: pointer to the device tree blob
- * @nodeoffset: offset of the node whose property to change
- * @name: name of the property to change
- * @val: pointer to data to set the property value to
- * @len: length of the property value
- *
- * fdt_setprop() sets the value of the named property in the given
- * node to the given value and length, creeating the property if it
- * does not already exist.
- *
- * This function may insert or delete data from the blob, and will
- * therefore change the offsets of some existing nodes.
- *
- * returns:
- *	0, on success
- *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
- *		contain the new property value
- *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
- *	-FDT_ERR_BADLAYOUT,
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE,
- *	-FDT_ERR_BADLAYOUT,
- *	-FDT_ERR_TRUNCATED, standard meanings
- */
-int fdt_setprop(void *fdt, int nodeoffset, const char *name,
-		const void *val, int len);
-
-/**
- * fdt_setprop_cell - set a property to a single cell value
- * @fdt: pointer to the device tree blob
- * @nodeoffset: offset of the node whose property to change
- * @name: name of the property to change
- * @val: 32-bit integer value for the property (native endian)
- *
- * fdt_setprop_cell() sets the value of the named property in the
- * given node to the given cell value (converting to big-endian if
- * necessary), or creates a new property with that value if it does
- * not already exist.
- *
- * This function may insert or delete data from the blob, and will
- * therefore change the offsets of some existing nodes.
- *
- * returns:
- *	0, on success
- *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
- *		contain the new property value
- *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
- *	-FDT_ERR_BADLAYOUT,
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE,
- *	-FDT_ERR_BADLAYOUT,
- *	-FDT_ERR_TRUNCATED, standard meanings
- */
-static inline int fdt_setprop_cell(void *fdt, int nodeoffset, const char *name,
-				   uint32_t val)
-{
-	val = cpu_to_fdt32(val);
-	return fdt_setprop(fdt, nodeoffset, name, &val, sizeof(val));
-}
-
-/**
- * fdt_setprop_string - set a property to a string value
- * @fdt: pointer to the device tree blob
- * @nodeoffset: offset of the node whose property to change
- * @name: name of the property to change
- * @str: string value for the property
- *
- * fdt_setprop_string() sets the value of the named property in the
- * given node to the given string value (using the length of the
- * string to determine the new length of the property), or creates a
- * new property with that value if it does not already exist.
- *
- * This function may insert or delete data from the blob, and will
- * therefore change the offsets of some existing nodes.
- *
- * returns:
- *	0, on success
- *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
- *		contain the new property value
- *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
- *	-FDT_ERR_BADLAYOUT,
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE,
- *	-FDT_ERR_BADLAYOUT,
- *	-FDT_ERR_TRUNCATED, standard meanings
- */
-#define fdt_setprop_string(fdt, nodeoffset, name, str) \
-	fdt_setprop((fdt), (nodeoffset), (name), (str), strlen(str)+1)
-
-/**
- * fdt_delprop - delete a property
- * @fdt: pointer to the device tree blob
- * @nodeoffset: offset of the node whose property to nop
- * @name: name of the property to nop
- *
- * fdt_del_property() will delete the given property.
- *
- * This function will delete data from the blob, and will therefore
- * change the offsets of some existing nodes.
- *
- * returns:
- *	0, on success
- *	-FDT_ERR_NOTFOUND, node does not have the named property
- *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
- *	-FDT_ERR_BADLAYOUT,
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE,
- *	-FDT_ERR_TRUNCATED, standard meanings
- */
-int fdt_delprop(void *fdt, int nodeoffset, const char *name);
-
-/**
- * fdt_add_subnode_namelen - creates a new node based on substring
- * @fdt: pointer to the device tree blob
- * @parentoffset: structure block offset of a node
- * @name: name of the subnode to locate
- * @namelen: number of characters of name to consider
- *
- * Identical to fdt_add_subnode(), but use only the first namelen
- * characters of name as the name of the new node.  This is useful for
- * creating subnodes based on a portion of a larger string, such as a
- * full path.
- */
-int fdt_add_subnode_namelen(void *fdt, int parentoffset,
-			    const char *name, int namelen);
-
-/**
- * fdt_add_subnode - creates a new node
- * @fdt: pointer to the device tree blob
- * @parentoffset: structure block offset of a node
- * @name: name of the subnode to locate
- *
- * fdt_add_subnode() creates a new node as a subnode of the node at
- * structure block offset parentoffset, with the given name (which
- * should include the unit address, if any).
- *
- * This function will insert data into the blob, and will therefore
- * change the offsets of some existing nodes.
-
- * returns:
- *	structure block offset of the created nodeequested subnode (>=0), on success
- *	-FDT_ERR_NOTFOUND, if the requested subnode does not exist
- *	-FDT_ERR_BADOFFSET, if parentoffset did not point to an FDT_BEGIN_NODE tag
- *	-FDT_ERR_EXISTS, if the node at parentoffset already has a subnode of
- *		the given name
- *	-FDT_ERR_NOSPACE, if there is insufficient free space in the
- *		blob to contain the new node
- *	-FDT_ERR_NOSPACE
- *	-FDT_ERR_BADLAYOUT
- *      -FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE,
- *	-FDT_ERR_TRUNCATED, standard meanings.
- */
-int fdt_add_subnode(void *fdt, int parentoffset, const char *name);
-
-/**
- * fdt_del_node - delete a node (subtree)
- * @fdt: pointer to the device tree blob
- * @nodeoffset: offset of the node to nop
- *
- * fdt_del_node() will remove the given node, including all its
- * subnodes if any, from the blob.
- *
- * This function will delete data from the blob, and will therefore
- * change the offsets of some existing nodes.
- *
- * returns:
- *	0, on success
- *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
- *	-FDT_ERR_BADLAYOUT,
- *	-FDT_ERR_BADMAGIC,
- *	-FDT_ERR_BADVERSION,
- *	-FDT_ERR_BADSTATE,
- *	-FDT_ERR_BADSTRUCTURE,
- *	-FDT_ERR_TRUNCATED, standard meanings
- */
-int fdt_del_node(void *fdt, int nodeoffset);
-
-/**********************************************************************/
-/* Debugging / informational functions                                */
-/**********************************************************************/
-
-const char *fdt_strerror(int errval);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _LIBFDT_H */
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/libfdt_env.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-#ifndef _LIBFDT_ENV_H
-#define _LIBFDT_ENV_H
-
-#include <stddef.h>
-#include <stdint.h>
-#include <string.h>
-#include "bswap.h"
-
-#ifdef WORDS_BIGENDIAN
-#define fdt32_to_cpu(x)		(x)
-#define cpu_to_fdt32(x)		(x)
-#define fdt64_to_cpu(x)		(x)
-#define cpu_to_fdt64(x)		(x)
-#else
-#define fdt32_to_cpu(x)		(bswap_32((x)))
-#define cpu_to_fdt32(x)		(bswap_32((x)))
-#define fdt64_to_cpu(x)		(bswap_64((x)))
-#define cpu_to_fdt64(x)		(bswap_64((x)))
-#endif
-
-#endif /* _LIBFDT_ENV_H */
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/libfdt_internal.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-#ifndef _LIBFDT_INTERNAL_H
-#define _LIBFDT_INTERNAL_H
-/*
- * libfdt - Flat Device Tree manipulation
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- *  a) This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of the
- *     License, or (at your option) any later version.
- *
- *     This library is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this library; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Alternatively,
- *
- *  b) Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *     1. Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *     2. Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include <fdt.h>
-
-#define ALIGN(x, a)	(((x) + (a) - 1) & ~((a) - 1))
-#define PALIGN(p, a)	((void *)ALIGN((unsigned long)(p), (a)))
-
-#define memeq(p, q, n)	(memcmp((p), (q), (n)) == 0)
-#define streq(p, q)	(strcmp((p), (q)) == 0)
-
-uint32_t _fdt_next_tag(const void *fdt, int startoffset, int *nextoffset);
-const char *_fdt_find_string(const char *strtab, int tabsize, const char *s);
-int _fdt_node_end_offset(void *fdt, int nodeoffset);
-
-static inline const void *_fdt_offset_ptr(const void *fdt, int offset)
-{
-	return fdt + fdt_off_dt_struct(fdt) + offset;
-}
-
-static inline void *_fdt_offset_ptr_w(void *fdt, int offset)
-{
-	return (void *)_fdt_offset_ptr(fdt, offset);
-}
-
-static inline const struct fdt_reserve_entry *_fdt_mem_rsv(const void *fdt, int n)
-{
-	const struct fdt_reserve_entry *rsv_table =
-		fdt + fdt_off_mem_rsvmap(fdt);
-
-	return rsv_table + n;
-}
-static inline struct fdt_reserve_entry *_fdt_mem_rsv_w(void *fdt, int n)
-{
-	return (void *)_fdt_mem_rsv(fdt, n);
-}
-
-#define SW_MAGIC		(~FDT_MAGIC)
-
-#endif /* _LIBFDT_INTERNAL_H */
--- a/baseport/src/cedar/generic/base/syborg/svpplatform/libfdt/patch.libfdt	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-Minor changes are required to get libfdt to build as part of qemu.
-The patch below records modifications relative to upstream dtc-v1.2.0.
-
-Index: libfdt_env.h
-===================================================================
---- libfdt_env.h	(revision 230023)
-+++ libfdt_env.h	(working copy)
-@@ -4,10 +4,9 @@
- #include <stddef.h>
- #include <stdint.h>
- #include <string.h>
--#include <endian.h>
--#include <byteswap.h>
-+#include "bswap.h"
- 
--#if __BYTE_ORDER == __BIG_ENDIAN
-+#ifdef WORDS_BIGENDIAN
- #define fdt32_to_cpu(x)		(x)
- #define cpu_to_fdt32(x)		(x)
- #define fdt64_to_cpu(x)		(x)
--- a/baseport/src/cedar/generic/base/syborg/svpsnapdriver/snapapp.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +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         snapapp.exe
-TARGETTYPE	   EXE
-SOURCEPATH	   src
-SOURCE         snapapp.cpp rsvpsnapdriver.cpp
-LIBRARY        euser.lib efsrv.lib
-SYSTEMINCLUDE  /epoc32/include 
-
-CAPABILITY		TCB DISKADMIN ALLFILES
-VENDORID 0x70000001
--- a/baseport/src/cedar/generic/base/syborg/svpsnapdriver/src/rsvpsnapdriver.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +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:
-*
-*/
-
-#include <e32std.h>    // for User::
-#include "rsvpsnapdriver.h"
-
-//#define SVPDBG
-#ifdef SVPDBG
-#include <e32debug.h>
-#define DP(format...) RDebug::Printf(format)
-#else
-#define DP(format...)
-#endif
-
-TInt RSVPSnapDriver::Open(void)
-{
-  DP("** RSVPSnapDriver::Open()");
-
-  const TVersion ver = TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber);
-
-  return DoCreate(KSVPSnapDriverName,
-				  ver,
-				  KNullUnit,
-				  NULL,
-				  NULL);
-}
-
-TInt RSVPSnapDriver::SaveVM(const TDesC8& aData)
-{
-  DP("** RSVPSnapDriver::SaveVM");
-  
-  //DP("** RSVPSnapDriver::SaveVM: - length of data=%d", length);
-  //DP("** RSVPSnapDriver::SaveVM: - aName= %s", name.Ptr());
-	
-  return DoSVPRequest(ESaveVM,(TAny*)&aData);
- }
-
-TInt RSVPSnapDriver::LoadVM(const TDesC8& aData)
-{
-  DP("** RSVPSnapDriver::LoadVM");
-  return DoSVPRequest(ELoadVM,(TAny*)&aData);
-}
--- a/baseport/src/cedar/generic/base/syborg/svpsnapdriver/src/rsvpsnapdriver.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +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:
-*
-*/
-
-#ifndef __RSVPSNAPDRIVER_H
-#define __RSVPSNAPDRIVER_H
-
-#include <e32cmn.h>    // for RBusLogicalChannel
-
-class TCapsSVPSnapDriver
-{
-public:
-	TVersion	iVersion;
-};
-
-_LIT(KSVPSnapDriverName,"SVP Snapshot Driver");
-_LIT(KSVPSnapDriverLDD, "svpsnapdriver.ldd");
-
-// Version information
-const TInt KMajorVersionNumber=0;
-const TInt KMinorVersionNumber=0;
-const TInt KBuildVersionNumber=1;
-
-class RSVPSnapDriver : public RBusLogicalChannel
-{
- public:
-  enum TControl
-	{
-	  EDummy = 0,
-	  ESaveVM,
-	  ELoadVM
-	};
-
- public:
-#ifndef __KERNEL_MODE__
-  TInt Open(void);
-  TInt SaveVM(const TDesC8& aData);
-  TInt LoadVM(const TDesC8& aData);
-
-private:
-  inline TInt DoSVPRequest(TInt aReqNo, TAny * a1) 
-  {
-	TRequestStatus status;
-	DoRequest(aReqNo, status, a1);
-	User::WaitForRequest(status);
-	return status.Int();
-  }
-#endif
-};
-
-#endif
--- a/baseport/src/cedar/generic/base/syborg/svpsnapdriver/src/snapapp.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +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:
-*
-*/
-
-#include <e32base.h>   // CTrapCleanup
-
-#include "rsvpsnapdriver.h"
-
-#define SVPDBG
-#ifdef SVPDBG
-#include <e32debug.h>
-#define DP(format...) RDebug::Printf(format)
-#else
-#define DP(format...)
-#endif
-
-_LIT8(KTestSendData,"kalle");
-
-GLDEF_C TInt E32Main()
-{
-  DP("** (SNAPAPP) E32Main()");
-
-  //  CTrapCleanup* cleanup;
-  //  cleanup=CTrapCleanup::New();
-  //  __UHEAP_MARK;
-
-#if 0
-  TInt err = User::LoadLogicalDevice(KSVPSnapDriverLDD);
-  if (err==KErrAlreadyExists)
-	DP("KErrAlreadyExists");
-#endif
-  
-  RSVPSnapDriver drv;
-  TInt err = drv.Open();
-  
-#if 1
-  if (err==KErrNone)
-	  {
-	  
-	drv.SaveVM(KTestSendData);
-	  }
-  else
-	DP("Error");
-#else
-  drv.LoadVM(KTestSendData);   // Will never return
-#endif
-  
-  //  __UHEAP_MARKEND;
-  //  delete cleanup;
-  return(KErrNone);
-}
--- a/baseport/src/cedar/generic/base/syborg/svpsnapdriver/src/svpsnapdriver.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,247 +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:
-*
-*/
-
-#include "svpsnapdriver.h"
-#include "rsvpsnapdriver.h"
-#include "system.h"
-
-static inline TUint32 ReadReg(ESVPSnapReg aReg)
-{
-  DP("** (SVPSNAPDRIVER) ReadReg(%d)",aReg);
-
-	return *(volatile TUint32 *)(KHwSVPSnapDevice + (aReg << 2));
-}
-
-static inline void WriteReg(ESVPSnapReg aReg, TUint32 aVal)
-{
-  DP("** (SVPSNAPDRIVER) WriteReg(%d,%d)",aReg,aVal);
-
-  *(volatile TUint32*)(KHwSVPSnapDevice + (aReg << 2)) = aVal;
-}
-
-//
-// DSVPSnapDriverFactory
-//
-
-DSVPSnapDriverFactory::DSVPSnapDriverFactory()
-{
-  DP("** (SVPSNAPDRIVER) DSVPSnapDriverFactory::DSVPSnapDriverFactory()");
-
-  iVersion = TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber);    
-}
-
-TInt DSVPSnapDriverFactory::Create(DLogicalChannelBase*& aChannel)
-{
-  DP("** (SVPSNAPDRIVER) DSVPSnapDriverFactory::Create()");
-	
-#if 0
-  if (iOpenChannels != 0)
-	return KErrInUse; // a channel is already open
-#endif
-	
-	aChannel = new DSVPSnapChannel(this);
-	
-	return aChannel ? KErrNone : KErrNoMemory;
-}
-
-TInt DSVPSnapDriverFactory::Install()
-{
-  DP("** (SVPSNAPDRIVER) DSVPSnapDriverFactory::Install()");
-
-  return(SetName(&KSVPSnapDriverName));
-}
-
-void DSVPSnapDriverFactory::GetCaps(TDes8& aDes) const
-{
-  DP("** (SVPSNAPDRIVER) DSVPSnapDriverFactory::GetCaps()");
-
-  TCapsSVPSnapDriver b;
-  b.iVersion = TVersion(KMajorVersionNumber, KMinorVersionNumber, KBuildVersionNumber);
-  aDes.FillZ(aDes.MaxLength());
-  aDes.Copy((TUint8 *)&b, Min(aDes.MaxLength(), sizeof(b)));
-}
-
-//
-// DSVPSnapChannel
-//
-
-DSVPSnapChannel::DSVPSnapChannel(DLogicalDevice* aLogicalDevice)
-{
-  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::DSVPSnapChannel()");
-
-  iDevice = aLogicalDevice;
-  
-  iClientThread = &Kern::CurrentThread();
-  iClientThread->Open();
-}
-
-DSVPSnapChannel::~DSVPSnapChannel()
-{
-  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::~DSVPSnapChannel() ->");
-  Kern::SafeClose((DObject*&)iClientThread, NULL);
-  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::~DSVPSnapChannel() <-");
-}
-
-TInt DSVPSnapChannel::DoCreate(TInt /*aUnit*/, const TDesC* anInfo, const TVersion& aVer)
-{
-  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::DoCreate()");
-
-  if (!Kern::QueryVersionSupported(TVersion(KMajorVersionNumber, KMinorVersionNumber, KBuildVersionNumber), aVer))
-	return KErrNotSupported; 
-		       
-  //Setup the driver for receiving client messages
-  SetDfcQ(Kern::DfcQue0());
-  iMsgQ.Receive();  	
-
-  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::DoCreate()- checking device");
-  TUint id = ReadReg(ESnapshot_Id);
-  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::DoCreate()- checked device- 0x%08x", id);
-  WriteReg(ESnapshot_Address, 0);
-  return KErrNone;
-}
-
-void DSVPSnapChannel::DoCancel(TInt aReqNo)
-{
-  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::DoCancel() %x(%d)", aReqNo, aReqNo);
-}
-
-TInt DSVPSnapChannel::DoRequest(TInt aReqNo, TRequestStatus* aStatus, TAny* a1, TAny* a2)
-{
-  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::DoRequest() %x(%d)", aReqNo, aReqNo);
-
-  TInt err = KErrGeneral;         
-
-  switch(aReqNo)
-	{
-	case RSVPSnapDriver::ESaveVM:
-	  	  DP("RSVPSnapDriver::ESaveVM");
-	  	  err = SaveVM((const TDesC8*)a1);
-	  break;
-	case RSVPSnapDriver::ELoadVM:
-	  	 DP("RSVPSnapDriver::ELoadVM");
-	  	 err= LoadVM((const TDesC8*)a1);
-	  break;
-	default:
-	  	  DP("default");
-	  err = KErrGeneral;
-	  break;
-	}
-	
-  if (KErrNone != err)
-	DP("** (SVPSNAPDRIVER) Error %d from DoRequest", err);
-	
-  return err;
-}
-
-TInt DSVPSnapChannel::DoControl(TInt aFunction, TAny* a1, TAny* a2)
-{
-  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::DoControl(%d)", aFunction);
-
-  TInt err = KErrGeneral;         
-  /* There should be a good reason to use a control rather than a request. */
-
-  if (KErrNone != err) {
-	DP("** (SVPSNAPDRIVER) Error %d from control function", err);
-  }
-	
-  return err;
-}
-
-void DSVPSnapChannel::HandleMsg(TMessageBase* aMsg)
-{
-	
-  TThreadMessage& m = *(TThreadMessage*)aMsg;
-  TInt id = m.iValue;
-  
-  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::HandleMsg() %x(%d)", id, id);
-
-  if (id == (TInt)ECloseMsg)
-	{
-	  m.Complete(KErrNone, EFalse); 
-	  return;
-	}
-  if (id == KMaxTInt)
-	{
-	  // DoCancel
-	  DoCancel(m.Int0());
-	  m.Complete(KErrNone, ETrue); 
-	  return;
-	}
-  if (id < 0)
-	{
-	  // DoRequest
-	  TRequestStatus* pStatus = (TRequestStatus*)m.Ptr0();
-	  TInt r = DoRequest(~id, pStatus, m.Ptr1(), m.Ptr2());
-	  //	  if (r != KErrNone)
-	  Kern::RequestComplete(iClientThread,pStatus,r);
-	  m.Complete(KErrNone, ETrue);
-	}
-  else
-	{
-	  // DoControl
-	  TInt r = DoControl(id, m.Ptr0(), m.Ptr1());
-	  m.Complete(r, ETrue);
-	}
-}
-
-TInt DSVPSnapChannel::SaveVM(const TDesC8* aData)
-{
-  DP("** DSVPSnapChannel::SaveVM()");
-   
-  TInt err = KErrNone; 
-  RET_IF_ERROR(err, Kern::ThreadDesRead(iClientThread, aData, iSendDataBuffer,0));
-  TUint32 * ptr = (TUint32*) iSendDataBuffer.Ptr();
-  
-  WriteReg(ESnapshot_Address, Epoc::LinearToPhysical((TUint32)ptr));
-  WriteReg(ESnapshot_Length, (TUint32) (iSendDataBuffer.Length()));
-  WriteReg(ESnapshot_Trigger, RSVPSnapDriver::ESaveVM);
-  
-  return err;
-}
-
-TInt DSVPSnapChannel::LoadVM(const TDesC8* aData)
-{
-  DP("** DSVPSnapChannel::LoadVM()");  
-
-  TInt err = KErrNone; 
-  RET_IF_ERROR(err, Kern::ThreadDesRead(iClientThread, aData, iSendDataBuffer,0));
-  
-  TUint32 * ptr = (TUint32*) iSendDataBuffer.Ptr();  
-  WriteReg(ESnapshot_Address, Epoc::LinearToPhysical((TUint32)ptr));
-  
-  return ReadReg(ESnapshot_Address);
-}
-
-DECLARE_EXTENSION_LDD()
-{
-  // FIXME: Not needed?
-  DP("** (SVPSNAPDRIVER) DSVPSnapDriverFactory created");
-  return new DSVPSnapDriverFactory;
-}
-
-DECLARE_STANDARD_EXTENSION()
-{
-  DP("** (SVPSNAPDRIVER) SVPSnap extension entry point");
-  TInt r;
-  DSVPSnapDriverFactory* device = new DSVPSnapDriverFactory;
-  if (device==NULL)
-	r=KErrNoMemory;
-  else
-	r=Kern::InstallLogicalDevice(device);
-  
-  return r;
-}
--- a/baseport/src/cedar/generic/base/syborg/svpsnapdriver/src/svpsnapdriver.h	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +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:
-*
-*/
-
-#ifndef __SVPSNAPDRIVER_H
-#define __SVPSNAPDRIVER_H
-
-#include <kernel.h>    // for DLogicalChannel
-
-#define SVPDBG
-#ifdef SVPDBG
-#define DP(format...) Kern::Printf(format)
-#else
-#define DP(format...)
-#endif
-
-#define RET_IF_ERROR(v, e) { if ((v = (e)) != KErrNone) return v; }
-
-enum ESVPSnapReg {
-	ESnapshot_Id = 0,
-	ESnapshot_Address,
-    ESnapshot_Length,
-    ESnapshot_Trigger
-  };
-
-class DSVPSnapDriverFactory : public DLogicalDevice
-{
- public:
-
-  DSVPSnapDriverFactory();
-  virtual TInt Install();
-  virtual void GetCaps(TDes8& aDes) const;
-  virtual TInt Create(DLogicalChannelBase*& aChannel);
-};
-
-class DSVPSnapChannel : public DLogicalChannel
-{
- public:
-
-  DSVPSnapChannel(DLogicalDevice* aLogicalDevice);
-  ~DSVPSnapChannel();
-  
-  virtual TInt DoCreate(TInt aUnit, const TDesC* anInfo, const TVersion& aVer);	
-  virtual void HandleMsg(TMessageBase* aMsg);
-	
- protected:
-  virtual void DoCancel(TInt aReqNo);
-  virtual TInt DoRequest(TInt aReqNo, TRequestStatus* aStatus, TAny* a1, TAny* a2);
-  virtual TInt DoControl(TInt aFunction, TAny *a1, TAny *a2);
-
- private:
-  TInt SaveVM(const TDesC8* aData);
-  TInt LoadVM(const TDesC8* aData);
-  
-private:
-  DThread* iClientThread;
-  TDfcQue* iDFCQue;
-  
-  TBuf8<256> iSendDataBuffer;
-};
-
-#endif
--- a/baseport/src/cedar/generic/base/syborg/svpsnapdriver/svpsnapdriver.mmp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +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:
-*
-*/
-
-//macro	__KERNEL_MODE__
-
-#include <variant.mmh>
-#include   <kernel\kern_ext.mmh>
-
-systeminclude		AsspNKernIncludePath
-
-systeminclude		src
-
-target			VariantTarget(svpsnapdriver,ldd)
-linkas			svpsnapdriver.ldd
-targettype		ldd
-
-sourcepath		src
-source			svpsnapdriver.cpp
-
-noexportlibrary
-
-vendorid 		0x70000001
-capability		all
--- a/baseport/src/cedar/generic/base/syborg/syborg-elf.cfg	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-input = syborg_001.techview.img
-logfile = syborg_001.techview.log
-output = syborg_001.techview.elf
-physical-address =  0x00000000 
-drive = X:
Binary file baseport/src/cedar/generic/base/syborg/syborg.dtb has changed
--- a/baseport/src/cedar/generic/base/syborg/syborg.dts	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-/ {
-    #address-cells = <1>;
-    #size-cells  = <1>;
-
-    cpus {
-        #address-cells = <1>;
-        #size-cells = <0>;
-        cpu0: ARM,Cortex-A8@0 {
-            device_type = "cpu";
-            reg = <0>;
-        };
-    };
-    memory@0 {
-        device_type = "memory";
-        reg = <0 08000000>;
-    };
-    syborg {
-        #address-cells = <1>;
-        #size-cells = <0>;
-        intc: intc@0 {
-            compatible = "syborg,interrupt";
-            #interrupt-cells = <1>;
-            reg = <c0000000>;
-            interrupt-controller;
-            qemu,interrupts = <&cpu0 0>;
-            num-interrupts = <20>;
-        };
-        rtc@0 {
-            compatible = "syborg,rtc";
-            reg = <c0001000>;
-        };
-        timer@0 {
-            compatible = "syborg,timer";
-            reg = <c0002000>;
-            frequency = <d#1000000>;
-            interrupts = <1>;
-            interrupt-parent = <&intc>;
-        };
-        keyboard@0 {
-            compatible = "syborg,keyboard";
-            reg = <c0003000>;
-            interrupts = <2>;
-            interrupt-parent = <&intc>;
-        };
-        touchscreen@0 {
-            compatible = "syborg,pointer";
-            reg = <c0004000>;
-            interrupts = <3>;
-            interrupt-parent = <&intc>;
-        };
-        framebuffer@0 {
-            compatible = "syborg,framebuffer";
-            reg = <c0005000>;
-            interrupts = <4>;
-            interrupt-parent = <&intc>;
-        };
-        serial@0 {
-            device_type = "serial";
-            compatible = "syborg,serial";
-            chardev = "serial0";
-            reg = <c0006000>;
-            interrupts = <5>;
-            interrupt-parent = <&intc>;
-        };
-        serial@1 {
-            device_type = "serial";
-            compatible = "syborg,serial";
-            chardev = "serial1";
-            reg = <c0007000>;
-            interrupts = <6>;
-            interrupt-parent = <&intc>;
-        };
-        serial@2 {
-            device_type = "serial";
-            compatible = "syborg,serial";
-            chardev = "serial2";
-            reg = <c0008000>;
-            interrupts = <7>;
-            interrupt-parent = <&intc>;
-        };
-        serial@3 {
-            device_type = "serial";
-            compatible = "syborg,serial";
-            chardev = "serial3";
-            reg = <c0009000>;
-            interrupts = <8>;
-            interrupt-parent = <&intc>;
-        };
-        hostfs@0 {
-            compatible = "syborg,hostfs";
-            reg = <c000a000>;
-	    host-path = "\\svphostfs\\";
-	    drive-number = <d#19>;
-        };
-        ss@0 {
-            compatible = "syborg,snapshot";
-            reg = <c000b000>;
-        };
-        net@0 {
-            compatible = "syborg,virtio-net";
-            reg = <c000c000>;
-            interrupts = <9>;
-            interrupt-parent = <&intc>;
-        };
-        nand@0 {
-            compatible = "syborg,nand";
-            reg = <c000d000>;
-            size = <400>;
-        };
-        audio@0 {
-            compatible = "syborg,virtio-audio";
-            reg = <c000e000>;
-            interrupts = <a>;
-            interrupt-parent = <&intc>;
-        };
-        platform@0 {
-            compatible = "syborg,platform";
-            reg = <c000f000>;
-        };
-    };
-};
-
--- a/baseport/src/cedar/generic/base/syborg/syborg.oby	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +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:
-*
-*/
-
-#ifndef __SYBORG_OBY__
-#define __SYBORG_OBY__
-
-define LANGID 01
-define BUILDNO 0
-define VERSION 0.01
-
-DEFAULT_LANGUAGE 01
-
-REM #undef  _ARM4
-REM #define _ARM4
-
-#define __SYBORG__
-#define	__ARM_HW_PLATFORM__
-#define SYMBIAN_EXCLUDE_MTP
-
-define SYBORG_L1		0x0b0a0001
-define VARIANT			syborg
-define VARID			SYBORG_L1
-define ASSP_DIR			EPOCROOT##epoc32\release\syborg
-define ROMMEGS			15		/* !! HEX !! */
-define PLATFORM_NAME		syborg
-
-#define COLOR
-
-REM defines for IrDA options
-REM Uncomment the line below to enable IrDA to use a Jeteye ESI09680 pod with serial card adapter
-REM #define _ENABLE_IRDA_POD_
-REM define which port IrDA uses
-define IRPOD_ESK irda_port1.esk
-
-REM define which serial port Bluetooth protocol uses
-define BLUETOOTH_ESK bt_port2.esk
-
-REM Define whether or not to include USB client support:
-//#define EUSBC
-
-ROMBUILD_OPTION -no-header 
-
-#endif
--- a/baseport/src/cedar/generic/base/syborg/test/ABLD.BAT	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-@ECHO OFF
-
-REM Bldmake-generated batch file - ABLD.BAT
-REM ** DO NOT EDIT **
-
-perl -S ABLD.PL "\src\cedar\generic\base\syborg\test\\" %1 %2 %3 %4 %5 %6 %7 %8 %9
-if errorlevel==1 goto CheckPerl
-goto End
-
-:CheckPerl
-perl -v >NUL
-if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed?
-goto End
-
-:End
--- a/baseport/src/cedar/generic/base/syborg/test/autoexec.bat	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-z:
-cd test
-rem runtests e32test.auto.bat
-rem format c:
-rem runtests f32test.auto.bat -d c
--- a/baseport/src/cedar/generic/base/syborg/test/bld.inf	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +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:
-*
-*/
-
-PRJ_PLATFORMS
-ARMV5
-
-PRJ_TESTEXPORTS
-autoexec.bat	                \epoc32\rom\syborg\	//
-
-PRJ_TESTMMPFILES
-
-// Drivers
-// requires baseport specific definitions for TIMER and TimeDelta in d_mstim.cpp 
-..\..\e32test\group\d_mstim		support
-// requires baseport specific definitions for TIMER and TimeDelta and LongTimeDelta in d_tick.cpp 
-..\..\e32test\group\d_tick		support
-// requires definitions for KTickPeriodMs and KTicksPerMillisecond. These are baseport specific and require changes to d_latncy
-..\..\e32test\group\d_latncy		support
-..\..\e32test\group\d_shadow		support
-..\..\e32test\group\bm_pdd		support
-//..\..\e32test\group\d_sharedio		support
-// needs dma.dll
-//..\..\e32test\group\d_dma		support  // DMA kernel-side test harness for real DMA framework
-// needs epbusm.dll
-//..\..\e32test\group\d_medch		support
-..\..\e32test\group\d_cache		support
--- a/baseport/src/cedar/generic/base/syborg/test/variant_test.mmh	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +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:
-*
-*/
-
-#define BUILD_TESTS
-
-#include <..\variant.mmh>
-
-SYSTEMINCLUDE	AsspNKernIncludePath
--- a/baseport/src/cedar/generic/base/syborg/trk_l1.ini	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-[SERIALCOMM]
-PDD EUART1
-LDD ECOMM
-CSY ECUART
-PORT 1
-RATE 115200
--- a/baseport/src/cedar/generic/base/syborg/variant.mmh	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +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:
-*
-*/
-
-//macro   __CPU_ARM926J__
-//#define __CPU__ ARM926EJ-S
-
-//macro __CPU_ARM1136__
-
-//#define __CPU_ARM1176__
-
-macro __CPU_CORTEX_A8N__
-macro __VFP_V3
-#define SYBORG
-macro __SYBORG__
-
-#define MM_MULTIPLE
-//#define MM_FLEXIBLE
-
-// TO DO: decide if we need to switch these on or off!!
-//
-// Uncomment the following line if using the r1p0 release or later of the ARM1136 processor.
-// 
-//#define __CPU_ARM1136_IS_R1__
-//
-
-/* Uncomment if ARM1136 Erratum 351912
- * "VFP11 double precision multiply can corrupt data"
- * is fixed on this hardware.
- */
-//macro __CPU_ARM1136_ERRATUM_351912_FIXED
-
-/* Uncomment if ARM1136 Erratum 353494
- * "Rare conditions can cause corruption of the Instruction Cache"
- * is fixed on this hardware.
- */
-//macro __CPU_ARM1136_ERRATUM_353494_FIXED
-
-/* Uncomment if ARM1136 Erratum 371025
- * "Invalidate Instruction Cache operation can fail"
- * is fixed on this hardware.
- */
-//macro __CPU_ARM1136_ERRATUM_371025_FIXED
-
-/* Uncomment if using ARM1136 processor and ARM1136 Erratum 399234
- * "Write back data cache entry evicted by write through entry causes data corruption"
- * is fixed on this hardware.
- * Workaround
- * The erratum may be avoided by marking all cacheable memory as one of write through or write back.
- * This requires the memory attributes described in the translation tables to be modified by software
- * appropriately, or the use of the remapping capability to remap write through regions to non cacheable.
- * If this macro is enabled, it should be acompanied by:
- *					GBLL	CFG_CPU_ARM1136_ERRATUM_399234_FIXED in config.inc
- */
-//macro __CPU_ARM1136_ERRATUM_399234_FIXED
-
-/* Uncomment if ARM1136 Erratum 408022 "Cancelled write to CONTEXTID register might update ASID" 
- * is fixed on this hardware.
- */
-//macro __CPU_ARM1136_ERRATUM_408022_FIXED
-
-// TO DO:
-//
-// Uncomment the next line if using the ARM1136 processor and ARM1136 Erratum 406973
-// "CLREX instruction might be ignored during data cache line fill"
-// is fixed on this hardware.
-// 
-//#define __CPU_ARM1136_ERRATUM_406973_FIXED
-
-
-// Uncomment if:
-//	1)	using ARM1136 processor and ARM1136 Erratum 411920: "Invalidate Entire Instruction Cache
-//	  	operation might fail to invalidate some lines if coincident with linefill"
-//  	  	is fixed on this hardware, or
-//	2)	using ARM1176 processor and ARM1176 Erratum 415045: "Invalidate Entire Instruction Cache
-// 	  	operation might fail to invalidate some lines if coincident with linefill
-//	  	is fixed on this hardware.
-// Workaround:
-//	1)	Disables the use of of prefetch range cache operations by setting RV bit in Auxiliary Ctrl Reg.
-//	2)	Replaces Invalidate ICache operation with the sequence defined in the errata document.
-// If this macro is enabled, it should be accompanied by:
-// 	"GBLL CFG_CPU_ARM1136_ERRATUM_411920_FIXED" in variant.mmh
-//
-//macro __CPU_ARM1136_ERRATUM_411920_FIXED
-
-
-
-macro __CPU_HAS_VFP
-#define USE_VFP_MATH
-// !@! not moving when 1136
-//#define MM_MOVING
-macro __DEBUGGER_SUPPORT__
-macro FASTTRACE_KERNEL_ALL
-macro __EMI_SUPPORT__
-
-#define VariantTarget(name,ext)     _syborg_##name##.##ext
-#define AsspNKernIncludePath        \..\..\src\cedar\generic\base\syborg\specific
-#define VariantMediaDefIncludePath  AsspNKernIncludePath        
-#define PlatformLib		   		    kasyborg.lib
-
-systeminclude	\epoc32\include\memmodel\epoc\mmubase
-//systeminclude	\epoc32\include\memmodel\epoc\moving
-//systeminclude	\epoc32\include\memmodel\epoc\moving\arm
-//systeminclude	\epoc32\include\memmodel\epoc\flexible
-//systeminclude	\epoc32\include\memmodel\epoc\flexible\arm
-systeminclude	\epoc32\include\memmodel\epoc\multiple
-systeminclude	\epoc32\include\memmodel\epoc\multiple\arm
-
-systeminclude	..\soc\interface
-
-// Uncomment for T_USERCOMDEB test
-//#define BUILD_TESTS
-
-#ifdef BUILD_TESTS
-macro BTRACE_KERNEL_ALL
-#endif
-
-//OPTION_REPLACE	ARMCC  --cpu __CPU__
-//OPTION_REPLACE	ARMASM --cpu __CPU__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/armv5.mbc	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,74 @@
+/*
+* 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:
+*
+*/
+
+SECTION_COMMANDS
+
+bldmake bldfiles armv5
+abld export
+
+abld makefile armv5
+abld reallyclean armv5
+
+bldmake bldfiles armv5
+abld export
+
+abld makefile armv5
+abld library armv5
+abld -k target armv5
+
+SECTION_DIRS
+..\e32utils\group
+..\e32
+..\e32\compsupp
+..\f32\group
+..\hal
+..\syborg
+..\domain\group
+
+..\e32\drivers\pbus\mmc\sdcard\sdcard3c
+..\e32\drivers\pbus\mmc\sdcard\sdcard4c
+
+..\e32\drivers\usbho
+..\e32\drivers\usbho\usbd
+
+..\e32\drivers\bsp
+..\e32\drivers\debug
+..\e32\drivers\ecomm
+..\e32\drivers\esound
+..\e32\drivers\ethernet
+..\e32\drivers\locmedia
+..\e32\drivers\media
+..\e32\drivers\trace
+..\e32\drivers\usbc
+..\e32\euser
+..\e32\ewsrv
+
+..\f32\estart
+..\f32\etshell
+..\f32\iso9660
+..\f32\ntfs
+..\f32\scomp
+..\f32\sfat
+..\f32\sfat32
+..\f32\sftl
+..\f32\slffs
+..\f32\smassstorage
+..\f32\srofs
+..\f32\srom
+
+..\e32test\group
+..\syborg\test
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/armv5test.mbc	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,41 @@
+/*
+* 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:
+*
+*/
+
+SECTION_COMMANDS
+
+bldmake bldfiles armv5
+abld export
+abld test export
+
+abld makefile armv5
+abld test makefile armv5
+abld reallyclean armv5
+abld test reallyclean armv5
+
+bldmake bldfiles armv5
+abld export
+
+abld makefile armv5
+abld test makefile armv5
+abld library armv5
+abld test library armv5
+abld -k target armv5
+abld test -k target armv5
+
+SECTION_DIRS
+..\e32test\group
+..\syborg\test
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/base.iby	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,116 @@
+/*
+* 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:
+*
+*/
+
+#ifndef __BASE_IBY__
+#define __BASE_IBY__
+
+REM Base operating system, including all assp-specific files
+
+#if defined(__MISA__)
+#include <base_assabet.iby>
+#elif defined(__MI920__)
+#include <base_integrator920.iby>
+#elif defined(__NI1136__)
+#include <base_integrator1136.iby>
+#elif defined(__MCOT__)
+#include <base_lubbock.iby>
+#elif defined(__TEMPLATE__)
+#include <base_template.iby>
+#elif defined(__MOMAP16XX_H2__)
+#include <base_h2.iby>
+#elif defined(__MOMAP24XX_H4HRP__)
+#include <base_h4hrp.iby>
+#elif defined(__X86PCHRP__)
+#include <base_x86pc.iby>
+#elif defined(__NE1_TB__)
+#include <base_ne1_tb.iby>
+#elif defined(__SYBORG__)
+#include <base_syborg.iby>
+#endif
+
+#include <compsupp.iby>
+
+file=ABI_DIR\DEBUG_DIR\EUSER_DLL							\sys\bin\EUser.dll
+file=ABI_DIR\DEBUG_DIR\RPIPE.DLL							\sys\bin\rpipe.dll
+
+file=ABI_DIR\DEBUG_DIR\ektran.dll							\sys\bin\EKTran.dll
+file=ABI_DIR\DEBUG_DIR\HAL_DLL								\sys\bin\Hal.dll
+
+#ifndef SYMBIAN_EXCLUDE_KEYMAP
+file=ABI_DIR\DEBUG_DIR\KEYMAP_FILE.dll						\sys\bin\EKData.dll
+#endif //SYMBIAN_EXCLUDE_KEYMAP
+
+secondary=ABI_DIR\DEBUG_DIR\efile.exe						\sys\bin\efile.exe  FIXED HEAPMAX(0x40000)
+file=ABI_DIR\DEBUG_DIR\efsrv.dll							\sys\bin\EFSrv.dll
+
+#ifndef CUSTOM_ELOCAL
+#ifdef WITH_FAT32
+file=ABI_DIR\DEBUG_DIR\efat32.fsy							\sys\bin\ELocal.fsy
+#else
+file=ABI_DIR\DEBUG_DIR\elocal.fsy							\sys\bin\ELocal.fsy
+#endif
+#endif
+
+#ifdef WITH_LFFS
+file=ABI_DIR\DEBUG_DIR\elffs.fsy							\sys\bin\ELffs.fsy
+#endif
+
+#ifdef WITH_NAND
+file=ABI_DIR\BUILD_DIR\nandftl.fxt							\sys\bin\nandftl.fxt
+file=ABI_DIR\BUILD_DIR\ecomp.fsy							\sys\bin\ecomp.fsy
+file=ABI_DIR\BUILD_DIR\erofs.fsy							\sys\bin\erofs.fsy
+#endif
+
+#ifdef WITH_NAND2
+file=ABI_DIR\BUILD_DIR\ecomp.fsy							\sys\bin\ecomp.fsy
+file=ABI_DIR\BUILD_DIR\erofs.fsy							\sys\bin\erofs.fsy
+#endif
+
+#ifdef WITH_ISO9660
+file=ABI_DIR\DEBUG_DIR\iso9660.fsy							\sys\bin\Iso9660.fsy
+#endif
+
+#ifdef WITH_NTFS
+file=ABI_DIR\DEBUG_DIR\ntfs.fsy								\sys\bin\Ntfs.fsy
+#endif
+
+#ifdef WITH_MASS_STORAGE
+file=ABI_DIR\DEBUG_DIR\msfs.fsy								\sys\bin\msfs.fsy
+#endif
+
+file=ABI_DIR\DEBUG_DIR\ESTART_EXE							\sys\bin\EStart.exe	HEAPMAX(0x10000)
+
+file=ABI_DIR\DEBUG_DIR\domainSrv.exe						\sys\bin\domainSrv.exe
+file=ABI_DIR\DEBUG_DIR\domainCli.dll						\sys\bin\domainCli.dll
+file=ABI_DIR\DEBUG_DIR\domainPolicy.dll						\sys\bin\domainPolicy.dll
+
+#if defined(_NAND) || defined(_NAND2)
+#if !defined PAGED_ROM || defined EFFICIENT_ROM_PAGING || defined CODE_PAGING_FROM_ROFS
+REM Start of ROFS image
+ROM_IMAGE[1] {
+#endif
+#endif
+
+#ifndef SYMBIAN_EXCLUDE_D_EXC
+file=ABI_DIR\DEBUG_DIR\d_exc.exe							\sys\bin\d_exc.exe
+#endif //SYMBIAN_EXCLUDE_D_EXC
+
+#ifndef SYMBIAN_EXCLUDE_SCDV
+file=ABI_DIR\DEBUG_DIR\SCDV_DLL								\sys\bin\ScDv.dll
+#endif // SYMBIAN_EXCLUDE_SCDV
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/bld.inf	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,89 @@
+/*
+* 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:
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5
+
+PRJ_EXPORTS
+syborg.oby						\epoc32\rom\include\	//
+base.iby						\epoc32\rom\include\	//
+rom\base_syborg.iby				\epoc32\rom\include\	//
+rom\header.iby					\epoc32\rom\syborg\		//
+rom\kernel.iby					\epoc32\rom\syborg\		//
+specific\syborg.cfg				\epoc32\rom\syborg\		//
+estart.txt						\epoc32\rom\syborg\		//
+trk_l1.ini						\epoc32\data\Z\trk\trk_syborg.ini
+
+PRJ_EXTENSIONS
+start		extension		base/genexec
+option		EXTRA_SRC_PATH  $(TO_BLDINF)/../e32/kernel
+end
+
+PRJ_MMPFILES
+..\e32\kernel\ekern
+..\e32\kernel\kc_exe
+..\e32\kernel\exmoncommon
+..\e32\drivers\medint\medint
+..\f32\etshell\eshell
+..\e32\drivers\trace\btracex
+..\e32\euser\variant_euser
+
+// SYBORG components
+kasyborg						// Variant library
+serial\serial					// Serial / UART ports
+fb\fb							// Framebuffer
+keyboard\keyboard				// Keyboard
+pointer\pointer					// Pointer
+monitor\monap					// Crash Debugger output
+
+keymap\keymap					// Key mapping library
+
+// platform device library - for flattened device tree (FDT)
+svpplatform\fdt
+
+//Host Filesystem
+svphostfs\svphostfs
+svphostfs\svphostfsdriver
+svphostfs\svphostfsstart
+svphostfs\svphostfsy
+
+//Snap Device
+svpsnapdriver\svpsnapdriver
+svpsnapdriver\snapapp
+
+PRJ_EXTENSIONS
+start		extension		base/config
+option		PREFIX			_syborg_
+option		HALPATH			$(TO_BLDINF)/..
+option		SOURCE			$(TO_BLDINF)/hal
+end
+
+PRJ_MMPFILES
+hal\hal
+
+PRJ_EXTENSIONS
+start		extension		base/bootstrap
+option		NAME			_syborg_bootloader_bootrom
+option		MEMMODEL		multiple
+//option		MEMMODEL		flexible
+//option		MEMMODEL		moving
+option		SOURCES			syborg.s
+option		INCLUDES		config.inc syborg.inc
+option		E32PATH			$(TO_BLDINF)/..
+option		EXTRA_INC_PATH	$(TO_BLDINF)/bootstrap
+option		EXTRA_SRC_PATH	$(TO_BLDINF)/bootstrap 
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/bootstrap/syborg.inc	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,77 @@
+;/*
+;* 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:
+;*
+;*/
+
+;---------------------------------------------------------------------------
+;  Physical Addresses of Memory                                             
+;---------------------------------------------------------------------------
+
+KHwRamBaseAddr		EQU    0x00000000
+KHwRamSizeMb            EQU    128			; 128MB
+
+KHwNorFlashBaseAddr     EQU    0x40000000
+KHwNorFlashSize         EQU    0x04000000   ; 64MB
+KHwNorFlashCodeSize     EQU    0x02000000   ; 32MB for code, 32MB for LFFS
+
+;---------------------------------------------------------------------------
+;  Physical Addresses of Peripherals
+;---------------------------------------------------------------------------
+
+KHwBaseRegisters	EQU     0xC0000000
+
+KHwBaseSic		EQU	KHwBaseRegisters + 0x00000
+KHwBaseRtc		EQU	KHwBaseRegisters + 0x01000
+KHwBaseTimer		EQU	KHwBaseRegisters + 0x02000
+KHwBaseKmiKeyboard	EQU     KHwBaseRegisters + 0x03000
+KHwBaseKmiPointer	EQU     KHwBaseRegisters + 0x04000
+KHwBaseClcd		EQU	KHwBaseRegisters + 0x05000
+KHwBaseUart0		EQU	KHwBaseRegisters + 0x06000
+KHwBaseUart1		EQU	KHwBaseRegisters + 0x07000
+KHwBaseUart2		EQU	KHwBaseRegisters + 0x08000
+KHwBaseUart3		EQU     KHwBaseRegisters + 0x09000
+KHwBaseHostFs		EQU     KHwBaseRegisters + 0x0a000
+KHwBaseSnap		EQU     KHwBaseRegisters + 0x0b000
+KHwBaseNet		EQU     KHwBaseRegisters + 0x0c000
+KHwBaseNand		EQU     KHwBaseRegisters + 0x0d000
+KHwBaseAudio		EQU     KHwBaseRegisters + 0x0e000
+KHwBasePlatform		EQU     KHwBaseRegisters + 0x0f000
+;-----------------------------------------------------------------------------
+; Module linear bases
+;-----------------------------------------------------------------------------
+
+; Register group linear separation: 4K
+KHwLinSeparation	EQU	0x1000
+
+KHwLinBaseRegisters	EQU	KPrimaryIOBase
+
+KHwLinBaseSic		EQU	KHwLinBaseRegisters + 0x00*KHwLinSeparation
+KHwLinBaseRtc		EQU	KHwLinBaseRegisters + 0x01*KHwLinSeparation
+KHwLinBaseTimer		EQU	KHwLinBaseRegisters + 0x02*KHwLinSeparation
+KHwLinBaseKmiKeyboard	EQU	KHwLinBaseRegisters + 0x03*KHwLinSeparation   
+KHwLinBaseKmiPointer    EQU	KHwLinBaseRegisters + 0x04*KHwLinSeparation
+KHwLinBaseClcd		EQU	KHwLinBaseRegisters + 0x05*KHwLinSeparation
+KHwLinBaseUart0		EQU	KHwLinBaseRegisters + 0x06*KHwLinSeparation
+KHwLinBaseUart1		EQU	KHwLinBaseRegisters + 0x07*KHwLinSeparation
+KHwLinBaseUart2		EQU	KHwLinBaseRegisters + 0x08*KHwLinSeparation
+KHwLinBaseUart3		EQU	KHwLinBaseRegisters + 0x09*KHwLinSeparation
+KHwLinBaseHostFs	EQU	KHwLinBaseRegisters + 0x0a*KHwLinSeparation
+KHwLinBaseSnap		EQU	KHwLinBaseRegisters + 0x0b*KHwLinSeparation
+KHwLinBaseNet		EQU	KHwLinBaseRegisters + 0x0c*KHwLinSeparation
+KHwLinBaseNand		EQU	KHwLinBaseRegisters + 0x0d*KHwLinSeparation
+KHwLinBaseAudio		EQU	KHwLinBaseRegisters + 0x0e*KHwLinSeparation
+KHwLinBasePlatform	EQU	KHwLinBaseRegisters + 0x0f*KHwLinSeparation
+	
+	END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/bootstrap/syborg.s	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,603 @@
+;/*
+;* 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:
+;*
+;*/
+		
+		GBLL	__VARIANT_S__       ; indicates that this is platform-specific code
+		GBLL	__SYBORG_S__		; indicates which source file this is
+
+		INCLUDE	bootcpu.inc
+		INCLUDE syborg.inc
+;
+;*******************************************************************************
+;
+        IMPORT	ResetEntry
+;
+;*******************************************************************************
+;
+        AREA |Boot$$Code|, CODE, READONLY, ALIGN=6
+;
+;*******************************************************************************
+; Initialise Hardware
+;	Determine the hardware configuration
+;	Determine the reset reason. If it is wakeup from a low power mode, perform
+;		whatever reentry sequence is required and jump back to the kernel.
+;	Set up the memory controller so that at least some RAM is available
+;	Set R10 to point to the super page or to a temporary version of the super page
+;		with at least the following fields valid:
+;		iBootTable, iCodeBase, iActiveVariant, iCpuId
+;	Initialise the debug serial port
+;
+; Enter with:
+;	R12 points to TRomHeader
+;	NO STACK
+;	R14 = return address (as usual)
+;
+; All registers may be modified by this call
+;*******************************************************************************
+	EXPORT	InitialiseHardware
+InitialiseHardware	ROUT
+		mov		r13, lr							    ; save return address
+
+		adrl	r1, ParameterTable	        ; pass address of parameter table
+		bl		InitCpu				        ; initialise CPU/MMU registers
+						
+;*******************************************************************************
+; DoInitialise Hardware
+;	Initialise CPU registers
+;	Determine the hardware configuration
+;	Determine the reset reason. If it is wakeup from a low power mode, perform
+;		whatever reentry sequence is required and jump back to the kernel.
+;	Set up the memory controller so that at least some RAM is available
+;	Set R10 to point to the super page or to a temporary version of the super page
+;		with at least the following fields valid:
+;		iBootTable, iCodeBase, iActiveVariant, iCpuId
+;	In debug builds initialise the debug serial port
+;
+; Enter with:
+;	R12 points to TRomHeader
+;	NO STACK
+;	R13 = return address (as usual)
+;
+; All registers may be modified by this call
+;*******************************************************************************
+DoInitialiseHardware	ROUT
+		
+; Hardware memory size is 128MB - 32MB reserved for bootloader
+		mov		r4, #KHwRamSizeMb
+
+		bl		InitDebugPort
+
+		ldr		r7, =CFG_HWVD					; variant number
+
+		lsl		r10, r4, #20				    ; R10 = top of RAM
+		sub		r10, #0x2000				    ; put super page at end for now
+
+; Set up the required super page values
+		str		r7, [r10, #SSuperPageBase_iActiveVariant]
+
+		mov		r1, #0
+		str		r1, [r10, #SSuperPageBase_iHwStartupReason]	; reset reason (from hardware)
+
+		add		r1, r10, #CpuPageOffset
+		str		r1, [r10, #SSuperPageBase_iMachineData]
+		bl		GetBootTableAddress
+		str		r0, [r10, #SSuperPageBase_iBootTable]		; set the boot function table
+		str		r12, [r10, #SSuperPageBase_iCodeBase]		; set the base address of bootstrap code
+		mrc		p15, 0, r0, c0, c0, 0						; read CPU ID from CP15 (remove if no CP15)
+		str		r0, [r10, #SSuperPageBase_iCpuId]
+
+		mov		r0, r13
+		add		sp, r10, #CpuBootStackTop		            ; set up a boot stack
+		push    {r0}						                ; save return address
+		bl		DoInitHw2						            ; any extra CPU-dependent stuff
+				
+		ldr		r7, [r10, #SSuperPageBase_iActiveVariant]
+		DWORD	r7, "ActiveVariant"
+
+		pop     {pc}						                ; return
+
+;*******************************************************************************
+DoInitHw2	ROUT
+		mrc		p15, 0, r0, c0, c0, 0
+		DWORD	r0, "MMUID"
+		mrc		p15, 0, r0, c0, c0, 1
+		DWORD	r0, "CacheType"
+		mrc		p15, 0, r0, c0, c0, 2
+		DWORD	r0, "TCMType"
+		mrc		p15, 0, r0, c0, c0, 3
+		DWORD	r0, "TLBType"
+        bx      lr
+
+;*******************************************************************************
+; Get a pointer to the list of hardware banks
+;
+; The pointer returned should point to a list of hardware banks declared with
+; the HW_MAPPING and/or HW_MAPPING_EXT macros. A zero word terminates the list.
+; For the direct memory model, all hardware on the system should be mapped here
+; and the mapping will set linear address = physical address.
+; For the moving or multiple model, only the hardware required to boot the kernel
+; and do debug tracing needs to be mapped here. The linear addresses used will
+; start at KPrimaryIOBase and step up as required with the order of banks in
+; the list being maintained in the linear addresses used.
+;
+; HW_MAPPING PB, SIZE, MULT
+;	This declares a block of I/O with physical base PB and address range SIZE
+;	blocks each of which has a size determined by MULT. The page size used for
+;	the mapping is determined by MULT. The linear address base of the mapping
+;	will be the next free linear address rounded up to the size specified by
+;	MULT.
+;	The permissions used for the mapping are the standard I/O permissions (BTP_Hw).
+;
+; HW_MAPPING_EXT PB, SIZE, MULT
+;	This declares a block of I/O with physical base PB and address range SIZE
+;	blocks each of which has a size determined by MULT. The page size used for
+;	the mapping is determined by MULT. The linear address base of the mapping
+;	will be the next free linear address rounded up to the size specified by
+;	MULT.
+;	The permissions used for the mapping are determined by a BTP_ENTRY macro
+;	immediately following this macro in the HW bank list or by a DCD directive
+;	specifying a different standard permission type.
+;
+; Configurations without an MMU need not implement this function.
+;
+; Enter with :
+;		R10 points to super page
+;		R12 points to ROM header
+;		R13 points to valid stack
+;
+; Leave with :
+;		R0 = pointer
+;		Nothing else modified
+;*******************************************************************************
+	EXPORT	GetHwBanks
+GetHwBanks	ROUT
+		adr		r0, %FT1
+		bx      lr
+1
+		HW_MAPPING		KHwBaseSic,			1,	HW_MULT_4K
+		HW_MAPPING		KHwBaseRtc,			1,	HW_MULT_4K
+		HW_MAPPING		KHwBaseTimer,			1,	HW_MULT_4K	
+		HW_MAPPING		KHwBaseKmiKeyboard,		1,	HW_MULT_4K
+		HW_MAPPING		KHwBaseKmiPointer,		1,	HW_MULT_4K
+		HW_MAPPING		KHwBaseClcd,			1,	HW_MULT_4K
+		HW_MAPPING		KHwBaseUart0,			1,	HW_MULT_4K
+		HW_MAPPING		KHwBaseUart1,			1,	HW_MULT_4K
+		HW_MAPPING		KHwBaseUart2,			1,	HW_MULT_4K
+		HW_MAPPING		KHwBaseUart3,    		1,	HW_MULT_4K
+		HW_MAPPING		KHwBaseHostFs,    		1,	HW_MULT_4K
+		HW_MAPPING		KHwBaseSnap,    		1,	HW_MULT_4K
+		HW_MAPPING		KHwBaseNet,			1,	HW_MULT_4K
+		HW_MAPPING		KHwBaseNand,    		1,	HW_MULT_4K
+		HW_MAPPING		KHwBaseAudio,    		1,	HW_MULT_4K
+		HW_MAPPING		KHwBasePlatform,    		8,	HW_MULT_4K
+	
+		DCD     0   ; terminator
+
+;*******************************************************************************
+; Notify an unrecoverable error during the boot process
+;
+; Enter with:
+;	R14 = address at which fault detected
+;
+; Don't return
+;*******************************************************************************
+	EXPORT	Fault
+Fault	ROUT
+		b		BasicFaultHandler	; generic handler dumps registers via debug
+									; serial port
+
+;*******************************************************************************
+; Reboot the system
+;
+; Enter with:
+;		R0 = reboot reason code
+;
+; Don't return (of course)
+;*******************************************************************************
+	ALIGN	32, 0
+	EXPORT	RestartEntry
+RestartEntry	ROUT
+
+; Save R0 parameter in HW dependent register which is preserved over reset
+; Put HW specific code here to reset system
+	    GETCPSR	r1
+		orr		r1, #0xC0
+		SETCPSR	r1										; disable interrupts
+
+        ldr     r10, =KSuperPageLinAddr
+        adr     r0, Run_Physical
+        bl      RomLinearToPhysical                 ; physical address in r0
+
+; Disable MMU
+		mrc		p15, 0, r1, c1, c0, 0		        ; get MMUCR
+		bic		r1, #MMUCR_M		                ; clear M bit
+		mcr		p15, 0, r1, c1, c0, 0		        ; set MMUCR
+        bx      r0                                  ; jump to the physical address
+        
+; Now running from physical address
+
+Run_Physical
+        mov     r3, #KHwNorFlashBaseAddr            ; r3 = NOR flash image base
+        
+; Jump to the NOR flash image
+        bx      r3                              
+
+;*******************************************************************************
+; Get a pointer to the list of RAM banks
+;
+; The pointer returned should point to a list of {BASE; MAXSIZE;} pairs, where
+; BASE is the physical base address of the bank and MAXSIZE is the maximum
+; amount of RAM which may be present in that bank. MAXSIZE should be a power of
+; 2 and BASE should be a multiple of MAXSIZE. The generic code will examine the
+; specified range of addresses and determine the actual amount of RAM if any
+; present in the bank. The list is terminated by an entry with zero size.
+;
+; The pointer returned will usually be to constant data, but could equally well
+; point to RAM if dynamic determination of the list is required.
+;
+; Enter with :
+;		R10 points to super page
+;		R12 points to ROM header
+;		R13 points to valid stack
+;
+; Leave with :
+;		R0 = pointer
+;		Nothing else modified
+;*******************************************************************************
+	EXPORT	GetRamBanks
+GetRamBanks	ROUT
+	    push    {r1-r3,lr}
+		mov		r0, #KHwRamSizeMb
+		lsl		r2, r0, #20			    ; R2 = RAM size in bytes
+		mov		r1, #KHwRamBaseAddr		; R1 = base address of usable RAM area
+		sub		r2, r1				    ; R2 = size of usable RAM area
+		orr		r1, #RAM_VERBATIM   	; prevent testing (overlay would break it)
+		mov		r3, #0
+		mov		lr, #0					; terminator
+		add		r0, r10, #CpuPageOffset	;
+		stm	    r0, {r1-r3,lr}			; store single bank descriptor and terminator
+		pop     {r1-r3,pc}
+
+;*******************************************************************************
+; Get a pointer to the list of ROM banks
+;
+; The pointer returned should point to a list of entries of SRomBank structures,
+; usually declared with the ROM_BANK macro.
+; The list is terminated by a zero size entry (four zero words)
+;
+; ROM_BANK	PB, SIZE, LB, W, T, RS, SS
+; PB = physical base address of bank
+; SIZE = size of bank
+; LB = linear base if override required - usually set this to 0
+; W = bus width (ROM_WIDTH_8, ROM_WIDTH_16, ROM_WIDTH_32)
+; T = type (see TRomType enum in kernboot.h)
+; RS = random speed
+; SS = sequential speed
+;
+; Only PB, SIZE, LB are used by the rest of the bootstrap.
+; The information given here can be modified by the SetupRomBank call, if
+; dynamic detection and sizing of ROMs is required.
+;
+; Enter with :
+;		R10 points to super page
+;		R12 points to ROM header
+;		R13 points to valid stack
+;
+; Leave with :
+;		R0 = pointer
+;		Nothing else modified
+;*******************************************************************************
+	EXPORT	GetRomBanks
+GetRomBanks	ROUT
+        adr		r0, RomBanksFlashTable      ; NOR flash
+        bx      lr
+
+RomBanksFlashTable
+		ROM_BANK	KHwNorFlashBaseAddr, KHwNorFlashCodeSize, 0, ROM_WIDTH_32, ERomTypeXIPFlash, 0, 0
+		DCD		0,0,0,0			; terminator
+
+;*******************************************************************************
+; Set up RAM bank
+;
+; Do any additional RAM controller initialisation for each RAM bank which wasn't
+; done by InitialiseHardware.
+; Called twice for each RAM bank :-
+;	First with R3 = 0xFFFFFFFF before bank has been probed
+;	Then, if RAM is present, with R3 indicating validity of each byte lane, ie
+;	R3 bit 0=1 if D0-7 are valid, bit1=1 if D8-15 are valid etc.
+; For each call R1 specifies the bank physical base address.
+;
+; Enter with :
+;		R10 points to super page
+;		R12 points to ROM header
+;		R13 points to stack
+;		R1 = physical base address of bank
+;		R3 = width (bottom 4 bits indicate validity of byte lanes)
+;			 0xffffffff = preliminary initialise
+;
+; Leave with :
+;		No registers modified
+;*******************************************************************************
+	EXPORT	SetupRamBank
+SetupRamBank	ROUT
+		bx      lr
+
+;*******************************************************************************
+; Set up ROM bank
+;
+; Do any required autodetection and autosizing of ROMs and any additional memory
+; controller initialisation for each ROM bank which wasn't done by
+; InitialiseHardware.
+;
+; The first time this function is called R11=0 and R0 points to the list of
+; ROM banks returned by the BTF_RomBanks call. This allows any preliminary setup
+; before autodetection begins.
+;
+; This function is subsequently called once for each ROM bank with R11 pointing
+; to the current information held about that ROM bank (SRomBank structure).
+; The structure pointed to by R11 should be updated with the size and width
+; determined. The size should be set to zero if there is no ROM present in the
+; bank.
+;
+; Enter with :
+;		R10 points to super page
+;		R12 points to ROM header
+;		R13 points to stack
+;		R11 points to SRomBank info for this bank
+;		R11 = 0 for preliminary initialise (all banks)
+;
+; Leave with :
+;		Update SRomBank info with detected size/width
+;		Set the size field to 0 if the ROM bank is absent
+;		Can modify R0-R4 but not other registers
+;
+;*******************************************************************************
+	EXPORT	SetupRomBank
+SetupRomBank	ROUT						    ; only get here if running from ROM
+		cmp		r11, #0
+		bxeq	lr						        ; don't do anything for preliminary
+		ldm	    r11, {r0,r1}				    ; r0 = base, r1 = size
+        lsr     r0, pc, #20
+        lsl     r0, #20                         ; r0 = image base
+   		ldr		r1, [r12, #TRomHeader_iRomSize] ; r1 = size of ROM block
+		stm 	r11, {r0,r1}
+        bx      lr
+
+;*******************************************************************************
+; Reserve physical memory
+;
+; Reserve any physical RAM needed for platform-specific purposes before the
+; bootstrap begins allocating RAM for page tables/kernel data etc.
+;
+; There are two methods for this:
+;	1.	The function ExciseRamArea may be used. This will remove a contiguous
+;		region of physical RAM from the RAM bank list. That region will never
+;		again be identified as RAM.
+;	2.	A list of excluded physical address ranges may be written at [R11].
+;		This should be a list of (base,size) pairs terminated by a (0,0) entry.
+;		This RAM will still be identified as RAM by the kernel but will not
+;		be allocated by the bootstrap and will subsequently be marked as
+;		allocated by the kernel immediately after boot.
+;
+; Enter with :
+;		R10 points to super page
+;		R11 indicates where preallocated RAM list should be written.
+;		R12 points to ROM header
+;		R13 points to stack
+;
+; Leave with :
+;		R0-R3 may be modified. Other registers should be preserved.
+;*******************************************************************************
+	EXPORT	ReservePhysicalMemory
+ReservePhysicalMemory	ROUT
+		bx      lr
+
+;*******************************************************************************
+; Do final platform-specific initialisation before booting the kernel
+;
+; Typical uses for this call would be:
+;	1.	Mapping cache flushing areas
+;	2.	Setting up pointers to routines in the bootstrap which are used by
+;		the variant or drivers (eg idle code).
+;
+; Enter with :
+;		R10 points to super page
+;		R11 points to TRomImageHeader for the kernel
+;		R12 points to ROM header
+;		R13 points to stack
+;
+; Leave with :
+;		R0-R9 may be modified. Other registers should be preserved.
+;
+;*******************************************************************************
+	EXPORT	FinalInitialise
+FinalInitialise ROUT
+		bx      lr
+
+;*******************************************************************************
+; Debug port write routine associated with debug port in the super page
+; Enter with :
+;		R0  character to be written
+;		R12 points to rom header
+;		R13 points to valid stack
+;
+; Leave with :
+;		nothing modified 
+;*******************************************************************************
+	EXPORT	DoWriteC
+DoWriteC	ROUT
+	IF	CFG_DebugBootRom
+		push    {r1,lr}
+		bl		GetDebugPortBase			; r1 = base address of UART registers
+	
+		str		r0, [r1, #4]				; Store to data register
+
+		pop     {r1,pc}
+	ELSE
+		bx      lr
+	ENDIF
+
+;*******************************************************************************
+; Initialise the debug port
+;
+; Enter with :
+;		R12 points to ROM header
+;		There is no valid stack
+;
+; Leave with :
+;		R0-R2 modified
+;		Other registers unmodified
+;*******************************************************************************
+InitDebugPort	ROUT
+		GET_ADDRESS	r1, KHwBaseUart0, KHwLinBaseUart0
+		ldr		r0,[r1, #0]		
+		bx		lr
+
+;*******************************************************************************
+; Get the base address of the debug UART
+;
+; Enter with :
+;		R12 points to ROM header
+;		There may be no stack
+;
+; Leave with :
+;		R1 = base address of port, 0 for JTAG
+;		Z flag set for JTAG, clear for non-JTAG
+;		No other registers modified
+;*******************************************************************************
+GetDebugPortBase	ROUT
+		ldr		r1, [r12, #TRomHeader_iDebugPort]
+		cmp		r1, #42							; JTAG?
+		movseq	r1, #0
+		bxeq	lr							    ; yes - return 0 and set Z
+		cmp		r1, #1
+        blo     GetUartPort0          
+        beq     GetUartPort1
+		cmp		r1, #3
+        blo     GetUartPort2
+		beq		GetUartPort3
+GetUartPort0
+		GET_ADDRESS	r1, KHwBaseUart0, KHwLinBaseUart0
+		movs	r1, r1							; clear Z
+		bx      lr
+
+GetUartPort1
+		GET_ADDRESS	r1, KHwBaseUart1, KHwLinBaseUart1
+		movs	r1, r1							; clear Z
+		bx      lr
+
+GetUartPort2
+		GET_ADDRESS	r1, KHwBaseUart2, KHwLinBaseUart2
+		movs	r1, r1							; clear Z
+		bx      lr
+
+GetUartPort3
+		GET_ADDRESS	r1, KHwBaseUart3, KHwLinBaseUart3
+		movs	r1, r1							; clear Z
+		bx      lr
+
+;*******************************************************************************
+; Return parameter specified by R0 (see TBootParam enum)
+;
+; Enter with :
+;		R0 = parameter number
+;
+; Leave with :
+;		If parameter value is supplied, R0 = value and N flag clear
+;		If parameter value is not supplied, N flag set. In this case the
+;		parameter may be defaulted or the system may fault.
+;		R0, R1 modified. No other registers modified.
+;
+;*******************************************************************************
+GetParameters ROUT
+		adr		r1, ParameterTable
+		b		FindParameter
+
+ParameterTable
+		DCD		-1								; terminator
+
+;*******************************************************************************
+; BOOT FUNCTION TABLE
+;*******************************************************************************
+GetBootTableAddress	ROUT
+		adr		r0, SyborgBootTable
+        bx      lr
+
+SyborgBootTable
+		DCD	DoWriteC					; output a debug character
+		DCD	GetRamBanks					; get list of RAM banks
+		DCD	SetupRamBank				; set up a RAM bank
+		DCD	GetRomBanks					; get list of ROM banks
+		DCD	SetupRomBank				; set up a ROM bank
+		DCD	GetHwBanks					; get list of HW banks
+		DCD	ReservePhysicalMemory		; reserve physical RAM if required
+		DCD	GetParameters				; get addresses for direct memory model
+		DCD	FinalInitialise				; Final initialisation before booting the kernel
+		DCD	HandleAllocRequest			; allocate memory (usually in generic code)
+		DCD	GetPdeValue					; usually in generic code
+		DCD	GetPteValue					; usually in generic code
+		DCD	PageTableUpdate				; usually in generic code
+		DCD	EnableMmu					; Enable the MMU (usually in generic code)
+
+; These entries specify the standard MMU permissions for various areas
+		
+	IF  CFG_MMMultiple
+;	IF  CFG_MMFlexible
+	    IF CFG_ARMV7
+		BTP_ENTRY   CLIENT_DOMAIN, PERM_RORO, MEMORY_FULLY_CACHED,       	1,  1,  0,  0   ; ROM
+		BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, MEMORY_FULLY_CACHED,       	0,  1,  0,  0   ; kernel data/stack/heap
+		BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, MEMORY_FULLY_CACHED,       	0,  1,  0,  0   ; super page/CPU page
+		BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, MEMORY_FULLY_CACHED,  	0,  1,  0,  0   ; page directory/tables
+		BTP_ENTRY   CLIENT_DOMAIN, PERM_RONO, MEMORY_FULLY_CACHED,       	1,  1,  0,  0   ; exception vectors
+		BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, MEMORY_STRONGLY_ORDERED,      0,  1,  0,  0   ; hardware registers
+		DCD         0                                                           ; unused (minicache flush)
+		DCD         0                                                           ; unused (maincache flush)
+		BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, MEMORY_FULLY_CACHED,       	0,  1,  0,  0   ; page table info
+		BTP_ENTRY   CLIENT_DOMAIN, PERM_RWRW, MEMORY_FULLY_CACHED,       	1,  1,  0,  0   ; user RAM
+		BTP_ENTRY   CLIENT_DOMAIN, PERM_RONO, MEMORY_STRONGLY_ORDERED,      1,  1,  0,  0   ; temporary identity mapping
+		BTP_ENTRY   CLIENT_DOMAIN, UNC_PERM,  MEMORY_STRONGLY_ORDERED,      0,  1,  0,  0   ; uncached
+	    ENDIF	
+	    IF CFG_ARMV6
+		BTP_ENTRY   CLIENT_DOMAIN, PERM_RORO, CACHE_WBWA,       1,  1,  0,  0       ; ROM
+	        BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, CACHE_WBWA,       0,  1,  0,  0       ; kernel data/stack/heap
+	        BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, CACHE_WBWA,       0,  1,  0,  0       ; super page/CPU page
+		BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, CACHE_WBWA,		0,  1,  0,  0       ; page directory/tables
+	        BTP_ENTRY   CLIENT_DOMAIN, PERM_RONO, CACHE_WTRA,       1,  1,  0,  0       ; exception vectors
+		BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, CACHE_SO,         0,  1,  0,  0       ; hardware registers
+		DCD			0										; unused (minicache flush)
+		DCD			0										; unused (maincache flush)
+	        BTP_ENTRY   CLIENT_DOMAIN, PERM_RWNO, CACHE_WBWA,       0,  1,  0,  0       ; page table info
+	        BTP_ENTRY   CLIENT_DOMAIN, PERM_RWRW, CACHE_WBWA,       1,  1,  0,  0       ; user RAM
+		BTP_ENTRY   CLIENT_DOMAIN, PERM_RONO, CACHE_SO,         1,  1,  0,  0       ; temporary identity mapping
+	        BTP_ENTRY   CLIENT_DOMAIN, UNC_PERM,  CACHE_SO,         0,  1,  0,  0       ; uncached
+	    ENDIF
+	ENDIF
+	IF CFG_MMMoving
+		BTP_ENTRY	CLIENT_DOMAIN, PERM_RORO, CACHE_WT		; ROM
+		BTP_ENTRY	CLIENT_DOMAIN, PERM_RWNO, CACHE_WB		; kernel data/stack/heap
+		BTP_ENTRY	CLIENT_DOMAIN, PERM_RWNO, CACHE_WB		; super page/CPU page
+		BTP_ENTRY	CLIENT_DOMAIN, PERM_RWNO, CACHE_WT		; page directory/tables
+		BTP_ENTRY	CLIENT_DOMAIN, PERM_RORO, CACHE_WT		; exception vectors
+		BTP_ENTRY	CLIENT_DOMAIN, PERM_RWRO, CACHE_NCNB	; hardware registers
+		DCD			0										; unused (minicache flush)
+		DCD			0										; unused (maincache flush)
+		BTP_ENTRY	CLIENT_DOMAIN, PERM_RWNO, CACHE_WB		; page table info
+		BTP_ENTRY	CLIENT_DOMAIN, PERM_RWRW, CACHE_WB		; user RAM
+		BTP_ENTRY	CLIENT_DOMAIN, PERM_RORO, CACHE_NCNB	; temporary identity mapping
+		BTP_ENTRY	CLIENT_DOMAIN, UNC_PERM,  CACHE_NCNB	; uncached
+	ENDIF
+
+	END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/config.inc	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,78 @@
+;/*
+;* 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:
+;*
+;*/
+
+; Include to enable tracing
+;	GBLL	CFG_DebugBootRom
+
+; Include one of these to select the CPU
+;	GBLL	CFG_CPU_ARM926J
+;	GBLL	CFG_CPU_ARM1136
+	GBLL    CFG_CPU_CORTEX_A8N
+;	GBLL	CFG_CPU_ARM1136_ERRATUM_399234_FIXED
+;	GBLL    CFG_CPU_ARM1136_ERRATUM_411920_FIXED
+; Include the following lines if this is a bootloader bootstrap
+;	GBLL	CFG_BootLoader
+
+; If you want to supply a custom set of initial vectors (including reset vector) include the following line
+;	GBLL	CFG_CustomVectors
+;
+; and provide a custom_vectors.inc file
+
+; On ARM architecture 6 processors, include the following line to override the threshold
+; on total physical RAM size at which the multiple memory model switches into large address space mode
+; i.e. size>threshold -> 2Gb per process, size<=threshold -> 1Gb per process
+; Defaults to 32Mb.
+;	INIT_NUMERIC_CONSTANT	CFG_ARMV6_LARGE_CONFIG_THRESHOLD, <value>
+
+; For the direct memory model only, include the following line if you wish the exception vectors at the
+; start of the bootstrap to be used at all times. This is only relevant if an MMU is present - this option
+; is mandatory if not.
+;	GBLL	CFG_UseBootstrapVectors
+;
+; If the above option is in use (including if no MMU is present) the following symbol should be defined
+; to specify the offset from the bootstrap to the kernel image.
+;	INIT_NUMERIC_CONSTANT	KernelCodeOffset, 0x4000
+
+; Include the following line if you wish to include the ROM autodetection code based on data bus
+; capacitance and image repeats.
+;	GBLL	CFG_AutoDetectROM
+
+; Include the following line to minimise the initial kernel heap size
+; On the direct memory model the size of the kernel data area (super page to end of kernel heap) 
+; is rounded up to the next 1Mb if this is not included, 4K if it is.
+; On the moving and multiple models, the size of the initial kernel heap area is rounded up to
+; the next 64K if this is not included, 4K if it is.
+;	GBLL	CFG_MinimiseKernelHeap
+
+; On the moving or multiple memory models, include either or both of the following lines to
+; specify the size of the initial kernel heap
+;	INIT_NUMERIC_CONSTANT	CFG_KernelHeapMultiplier, <multiplier>
+;	INIT_NUMERIC_CONSTANT	CFG_KernelHeapBaseSize, <base>
+;
+; The initial kernel heap size is MAX( <base> + <multiplier> * N / 16, value specified in ROMBUILD )
+; where N is the total physical RAM size in pages.
+; <base> defaults to 24K and <multiplier> defaults to 9*16 (ie 9 bytes per page).
+
+; Specific stuff for integrator
+;	GBLL	CFG_Integrator_DontSetClock
+	INIT_NUMERIC_CONSTANT	CFG_HWVD, 0x0B0A0001
+
+; Copy NOR Flash image to SDRAM
+	GBLL    CFG_CopyFlashToRam
+    
+
+	END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/eabi/kasyborg.def	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,39 @@
+EXPORTS
+	_Z17VariantInitialisev @ 1 NONAME
+	_Z14AsicInitialisev @ 2 NONAME
+	_ZN6Syborg11DebugOutputEj @ 3 NONAME
+	_ZN6Syborg12MsTickPeriodEv @ 4 NONAME
+	_ZN6Syborg13StartupReasonEv @ 5 NONAME
+	_ZN6Syborg27SystemTimeInSecondsFrom2000ERi @ 6 NONAME
+	_ZN6Syborg30SetSystemTimeInSecondsFrom2000Ei @ 7 NONAME
+	_ZN6Syborg5Init1Ev @ 8 NONAME
+	_ZN6Syborg5Init3Ev @ 9 NONAME
+	_ZN6Syborg9DebugInitEv @ 10 NONAME
+	_ZN6SyborgC1Ev @ 11 NONAME
+	_ZN6SyborgC2Ev @ 12 NONAME
+	_ZN7TSyborg10DisableIntEj @ 13 NONAME
+	_ZN7TSyborg10TimerValueEj @ 14 NONAME
+	_ZN7TSyborg11EnableTimerEjNS_6TStateE @ 15 NONAME
+	_ZN7TSyborg12SetTimerLoadEjm @ 16 NONAME
+	_ZN7TSyborg12SetTimerModeEjNS_10TTimerModeE @ 17 NONAME
+	_ZN7TSyborg12VideoRamPhysEv @ 18 NONAME
+	_ZN7TSyborg12VideoRamSizeEv @ 19 NONAME
+	_ZN7TSyborg13ClearTimerIntEj @ 20 NONAME
+	_ZN7TSyborg13DebugPortAddrEv @ 21 NONAME
+	_ZN7TSyborg14IsTimerEnabledEj @ 22 NONAME
+	_ZN7TSyborg16MarkDebugPortOffEv @ 23 NONAME
+	_ZN7TSyborg18VideoRamPhysSecureEv @ 24 NONAME
+	_ZN7TSyborg20EnableTimerInterruptEj @ 25 NONAME
+	_ZN7TSyborg21DisableTimerInterruptEj @ 26 NONAME
+	_ZN7TSyborg9EnableIntEj @ 27 NONAME
+	_ZN7TSyborg9TimerLoadEj @ 28 NONAME
+	_ZN7TSyborg9TimerModeEj @ 29 NONAME
+	_ZN9Interrupt11SetPriorityEii @ 30 NONAME
+	_ZN9Interrupt4BindEiPFvPvES0_ @ 31 NONAME
+	_ZN9Interrupt5ClearEi @ 32 NONAME
+	_ZN9Interrupt6EnableEi @ 33 NONAME
+	_ZN9Interrupt6UnbindEi @ 34 NONAME
+	_ZN9Interrupt7DisableEi @ 35 NONAME
+	_ZTI6Syborg @ 36 NONAME
+	_ZTV6Syborg @ 37 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/estart.txt	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,1 @@
+C: 0  ELOCAL FAT  0       FS_FORMAT_COLD,FS_SYNC_DRIVE # IRAM
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/ethernet/pdd/enet.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,36 @@
+/*
+* 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:
+*
+*/
+
+#include <variant.mmh>
+#include "kernel\kern_ext.mmh"
+
+TARGET			VariantTarget(ethernet,pdd)
+TARGETTYPE		pdd
+ROMTARGET       ethernet.pdd
+
+SYSTEMINCLUDE	\epoc32\include\drivers
+SYSTEMINCLUDE	AsspNKernIncludePath
+SOURCEPATH	    .
+
+SOURCE		    ethernet.cpp   ethernet_device.cpp
+
+LIBRARY	    PlatformLib 
+
+UID			0x100039d0 0x1000015c
+VENDORID    0x70000001
+
+CAPABILITY	all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/ethernet/pdd/ethernet.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,123 @@
+/*
+* 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:
+*
+*/
+
+#include <ethernet.h>
+#include <e32hal.h>
+#include <system.h>
+#include "ethernet_device.h"
+
+#pragma diag_suppress 1441
+
+_LIT(KEthPddName, "Ethernet.Syborg");
+
+// needs ldd version..
+const TInt KMinimumLddMajorVersion	= 1;
+const TInt KMinimumLddMinorVersion	= 0;
+const TInt KMinimumLddBuild			= 122;
+
+//
+// Class to identify the driver as PDD
+//
+class DDriverEthernet : public DPhysicalDevice
+{
+public:
+	DDriverEthernet();
+	
+	//
+	// Functions that we must implement as we are inheriting from abstract base class
+	//
+	virtual TInt Install();
+	virtual void GetCaps(TDes8 &aDes) const;
+	virtual TInt Create(DBase*& aChannel, TInt aUnit, const TDesC8* anInfo, const TVersion &aVer);
+	virtual TInt Validate(TInt aUnit, const TDesC8* anInfo, const TVersion &aVer);
+};
+
+//////////////////////////////////////////
+// Implementation of DDriverEthernet class
+//////////////////////////////////////////
+
+DDriverEthernet::DDriverEthernet()
+{
+	DP("** (PDD) DDriverEthernet::DDriverEthernet()");
+	__KTRACE_OPT(KHARDWARE, Kern::Printf("DDriverEthernet::DDriverEthernet()"));
+	
+	iUnitsMask=0x1;	
+	iVersion=TVersion(KEthernetMajorVersionNumber,
+					  KEthernetMinorVersionNumber,
+					  KEthernetBuildVersionNumber);
+}
+
+TInt DDriverEthernet::Install()
+{
+	DP("** (PDD) DDriverEthernet::Install()");
+	__KTRACE_OPT(KHARDWARE, Kern::Printf("DDriverEthernet::Install()"));
+	
+	return SetName(&KEthPddName);
+}
+
+void DDriverEthernet::GetCaps(TDes8 &aDes) const
+{
+	DP("** (PDD) DDriverEthernet::GetCaps");
+	__KTRACE_OPT(KHARDWARE, Kern::Printf("DDriverEthernet::GetCaps"));
+	
+	TEthernetCaps capsBuf;
+
+	aDes.FillZ(aDes.MaxLength());
+	aDes=capsBuf.Left(Min(capsBuf.Length(),aDes.MaxLength()));
+}
+
+TInt DDriverEthernet::Create(DBase*& aChannel, TInt aUnit, const TDesC8* anInfo, const TVersion& aVer)
+{
+	DP("** (PDD) DDriverEthernet::Create");
+	__KTRACE_OPT(KHARDWARE, Kern::Printf("DDriverEthernet::Create"));
+	
+    TInt r = KErrNoMemory;
+
+	EthernetDevice	*VirtioEthernet = new EthernetDevice;
+	if(VirtioEthernet)
+		{
+		DP("** (PDD) DDriverEthernet:: EthernetDevice created successfully");
+		r = VirtioEthernet->DoCreate(aUnit, anInfo);
+		}
+	aChannel = VirtioEthernet;
+       return r;
+}
+
+TInt DDriverEthernet::Validate(TInt aUnit, const TDesC8* anInfo, const TVersion& aVer)
+{
+	DP("** (PDD) DDriverEthernet::Validate");
+	__KTRACE_OPT(KHARDWARE, Kern::Printf("DDriverEthernet::Validate"));
+	
+	if((!Kern::QueryVersionSupported(iVersion,aVer)) || 
+		(!Kern::QueryVersionSupported(aVer,TVersion(KMinimumLddMajorVersion,
+													KMinimumLddMinorVersion,
+													KMinimumLddBuild))))
+	{
+		return KErrNotSupported;
+	}
+	if(aUnit != 0)
+	{
+		return KErrNotSupported;
+	}
+	return KErrNone;
+}
+
+DECLARE_STANDARD_PDD()
+{
+	DP("** (DPhysicalDevice) Ethernet PDD Factory created");
+	return new DDriverEthernet;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/ethernet/pdd/ethernet_device.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,411 @@
+/*
+* 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:
+*
+*/
+
+#include <ethernet.h>
+#include <e32hal.h>
+#include <e32cmn.h> 
+#include "ethernet_device.h"
+
+// Constants specific to this file
+const TInt K1000mSecDelay	= 1000;
+
+/////////////////////////////////////////
+// Implementation of EthernetDevice class
+/////////////////////////////////////////
+
+EthernetDevice::EthernetDevice() : iRxDfc(RxDfc, this)
+{
+	DP("** (PDD) EthernetDevice()");
+		
+	iInterruptId=-1;
+	iCreated = FALSE;
+	iStarted = FALSE;
+	iRxDfc.SetDfcQ(Kern::DfcQue0());
+}
+
+EthernetDevice::~EthernetDevice()
+{
+	DP("** (PDD) ~EthernetDevice()");
+	DP("** (PDD) ~EthernetDevice Unbind Interrupt");
+	Interrupt::Unbind(EIntNet0);
+}
+
+void EthernetDevice::GetConfig(TEthernetConfigV01 &aConfig) const
+{
+	DP("** (PDD) EthernetDevice::GetConfig");
+	aConfig = iDefaultConfig;
+}
+
+TInt EthernetDevice::ValidateConfig(const TEthernetConfigV01 &aConfig) const
+{
+	DP("** (PDD) EthernetDevice::ValidateConfig");
+		
+	switch(aConfig.iEthSpeed)
+	{
+		case KEthSpeedUnknown:
+			return KErrNotSupported;
+		default:		
+			break;
+	}
+
+	switch(aConfig.iEthDuplex)
+	{
+		case KEthDuplexUnknown:
+			return KErrNotSupported;
+		default:
+			break;
+	}
+
+	return KErrNone;
+}
+
+void EthernetDevice::Caps(TDes8 &aCaps) const
+{
+	DP("** (PDD) EthernetDevice::Caps");
+	TEthernetCaps capsBuf;
+
+	aCaps.FillZ(aCaps.MaxLength());
+	aCaps=capsBuf.Left(Min(capsBuf.Length(),aCaps.MaxLength()));
+}
+
+TDfcQue* EthernetDevice::DfcQ(TInt aUnit)
+{
+	DP("** (PDD) EthernetDevice::DfcQ");
+	return Kern::DfcQue0();
+}
+
+TInt EthernetDevice::DisableIrqs()
+{
+	DP("** (PDD) EthernetDevice::DisableIrqs");
+	return NKern::DisableInterrupts(1);
+}
+
+void EthernetDevice::RestoreIrqs(TInt aLevel)
+{
+	DP("** (PDD) EthernetDevice::RestoreIrqs");
+	NKern::RestoreInterrupts(aLevel);
+}
+
+//
+// Enable Ethernet interrupt line, allocate memory for Rx/Tx paths and send QEMU frames for Rx transmission.  
+//
+TInt EthernetDevice::DoCreate(TInt aUnit, const TDesC8* anInfo)
+{
+	DP("** (PDD) Enter: EthernetDevice::DoCreate");
+	
+	if(iCreated)
+		return KErrNone;
+	
+	// Bind to Ethernet interrupt
+	Interrupt::Bind(EIntNet0,Isr,this);
+	SetMacAddress();
+	
+	DP("** (PDD) EthernetDevice::DoCreate - VNET[VIRTIO_STATUS]");
+	
+   VNET[VIRTIO_STATUS] = VIRTIO_CONFIG_S_ACKNOWLEDGE
+     			| VIRTIO_CONFIG_S_DRIVER;
+	 
+   AllocRings();
+	VNET[VIRTIO_STATUS] |= VIRTIO_CONFIG_S_DRIVER_OK;
+   AddRx();
+	VNET[VIRTIO_INT_ENABLE] = 1;
+	  
+	iCreated = TRUE;
+	
+	DP("** (PDD) Exit: EthernetDevice::DoCreate");
+	
+	return KErrNone;
+}
+
+TInt EthernetDevice::Start()
+{
+	DP("** (PDD) EthernetDevice::Start()");
+		
+	if(iStarted)
+		return KErrNone;
+		   			       		   			   
+    // wait for 1 sec as negotiation is going on... hopefully auto-neg completes by then
+ 	NKern::Sleep(K1000mSecDelay);
+ 	Interrupt::Enable(EIntNet0);
+	
+	iStarted = TRUE;
+	
+	return KErrNone;
+}
+
+void EthernetDevice::Stop(TStopMode aMode)
+{
+	DP("** (PDD) EthernetDevice::Stop(TStopMode aMode)");
+		
+	switch (aMode)
+	{
+		case EStopNormal:
+		case EStopEmergency:
+			iRxDfc.Cancel();
+         //Should we disable QEMU interrupts here?
+			break;					
+        default:
+            break;
+	}
+	
+	iStarted = FALSE;	
+	Interrupt::Disable(EIntNet0);
+}
+
+//
+// Transmit Tx data to QEMU and increment iTxAvail idx counter to indicate to QEMU that a new frame is available.  
+//
+TInt EthernetDevice::Send(TBuf8<KMaxEthernetPacket+32> &aBuffer)
+{
+	DP("** (PDD) EthernetDevice::Send");
+		
+	TInt err = KErrNone;
+	TUint32 length = aBuffer.Length();
+	iTxBuffer = aBuffer;
+
+   DP ("** (PDD) Value of iTxAvail->idx = %d\n", iTxAvail->idx);	
+   TInt ring_slot = iTxAvail->idx & (tx_ring_size - 1);
+   DP ("** (PDD) Value of ring_slot = %d\n", ring_slot);
+
+   memset(&tx_header, 0, sizeof(tx_header));
+
+   iTxDesc[0].addr = Epoc::LinearToPhysical((TUint32)&tx_header);
+   iTxDesc[0].len = sizeof(tx_header);
+   iTxDesc[0].flags = VRING_DESC_F_NEXT;
+   iTxDesc[0].next = 1;
+   iTxDesc[1].addr = Epoc::LinearToPhysical((TUint32) iTxBuffer.Ptr());
+   iTxDesc[1].len = length;
+   iTxDesc[1].flags = 0;
+   iTxAvail->ring[ring_slot] = 0;
+
+   iTxAvail->idx++;   
+   DP ("** (PDD)iTxAvail->idx = %x, rx_last_used=%d\n", iTxAvail->idx, rx_last_used);
+  
+   VNET[VIRTIO_QUEUE_NOTIFY] = TX_QUEUE;
+
+   DP ("** (PDD) iTxDesc[0].addr = %x\n", iTxDesc[0].addr);
+   DP ("** (PDD) iTxDesc[0].len = %d\n", iTxDesc[0].len);
+   DP ("** (PDD) iTxDesc[0].flags = %d\n", iTxDesc[0].flags);
+   DP ("** (PDD) iTxDesc[0].next = %d\n", iTxDesc[0].next);
+   DP ("** (PDD) iTxDesc[1].addr = %x\n", iTxDesc[1].addr);
+   DP ("** (PDD) iTxDesc[1].len = %d\n", iTxDesc[1].len);
+   DP ("** (PDD) iTxDesc[1].flags = %d\n", iTxDesc[1].flags);
+    					 	   		
+	return err;
+}
+
+TInt EthernetDevice::ReceiveFrame(TBuf8<KMaxEthernetPacket+32> &aBuffer, 
+									TBool okToUse)
+{
+	DP("** (PDD) EthernetDevice::ReceiveFrame");
+    
+   //If no buffer available dump frame
+   if (!okToUse)
+   {
+    DP("** (PDD) EthernetDevice::ReceiveFrame - dumping frame");
+    return KErrGeneral;
+   }
+   
+   aBuffer.Copy(iRxBuffer.Ptr(), ETHERNET_PAYLOAD_SIZE); 
+   AddRx();
+ 
+	return KErrNone;
+}
+
+void EthernetDevice::Isr(TAny* aPtr)
+{
+	DP("** (PDD) EthernetDevice::Isr(TAny* aPtr)");
+
+   Interrupt::Clear(EIntNet0);	
+   VNET[VIRTIO_INT_STATUS] = 1;
+   EthernetDevice& d=*(EthernetDevice*)aPtr;
+   d.iRxDfc.Add();                   			
+}
+
+void EthernetDevice::RxDfc(TAny* aPtr)
+{
+	DP("** (PDD) EthernetDevice::RxDfc");
+	EthernetDevice& d=*(EthernetDevice*)aPtr;
+   
+   TInt x = VNET[VIRTIO_INT_STATUS];
+   DP("** (PDD) EthernetDevice::RxDfc - value of x=%d", x);
+
+   TInt ring_slot = d.iRxUsed->idx & (d.rx_ring_size - 1);
+
+   DP("**(PDD) RxDfc  (d.iTxAvail->idx) = %d (d.iRxAvail->idx) = %d", d.iTxAvail->idx, d.iRxAvail->idx);
+   DP("**(PDD) RxDfc  (d.iRxUsed->idx) = %d ", d.iRxUsed->idx);
+   DP("**(PDD) RxDfc  ring_slot=%d,  (d.iRxUsed->ring[%d].id) = %d", ring_slot, ring_slot, d.iRxUsed->ring[ring_slot].id);
+   DP("**(PDD) RxDfc  d.iRxDesc[1].next = %d", d.iRxDesc[1].next); 
+
+   //check to see if this is a Rx or Tx
+   if (d.iRxUsed->idx != d.rx_last_used)
+   {
+   DP("** (PDD) Received Rx Interrupt");
+   d.rx_last_used++;
+   DP("** (PDD) Value of rx_last_used=%d", d.rx_last_used);
+   d.ReceiveIsr();
+   }
+}
+
+void EthernetDevice::MacConfigure(TEthernetConfigV01 &aConfig)
+{
+	DP("** (PDD) EthernetDevice::MacConfigure");
+	
+	iDefaultConfig.iEthAddress[0] = aConfig.iEthAddress[0];
+	iDefaultConfig.iEthAddress[1] = aConfig.iEthAddress[1];
+	iDefaultConfig.iEthAddress[2] = aConfig.iEthAddress[2];
+	iDefaultConfig.iEthAddress[3] = aConfig.iEthAddress[3];
+	iDefaultConfig.iEthAddress[4] = aConfig.iEthAddress[4];
+	iDefaultConfig.iEthAddress[5] = aConfig.iEthAddress[5];
+	
+	DP ("** (PDD) macaddr %02x:%02x:%02x:%02x:%02x:%02x\n",
+			iDefaultConfig.iEthAddress[0], 
+			iDefaultConfig.iEthAddress[1], 
+			iDefaultConfig.iEthAddress[2], 
+			iDefaultConfig.iEthAddress[3], 
+			iDefaultConfig.iEthAddress[4], 
+			iDefaultConfig.iEthAddress[5]);
+}
+
+//Descriptor list and vring_used must start on a 4k page boundary. 
+TAny * EthernetDevice::AllocAligned(TUint16 size)
+{
+	DP("** (PDD) Enter: EthernetDevice::alloc_aligned");
+	DP("** (PDD) size=%d",size);
+
+   TAny * p = Kern::Alloc(size + 4095);
+	
+   DP("** (PDD) BEFORE: p=%x",p);
+   p = (TAny *)(((TUint32)p + 4095) & ~4095);
+   DP("** (PDD) AFTER: p=%x",p);
+	
+	DP("** (PDD) Exit: EthernetDevice::alloc_aligned");
+	
+	return p;
+}
+	
+TAny EthernetDevice::AllocRings()
+{	
+	DP("** (PDD) Enter: EthernetDevice::AllocRings");
+	
+	TUint size;
+	TUint used_offset;
+	TUint32 p;
+
+	VNET[VIRTIO_QUEUE_SEL] = TX_QUEUE;
+   tx_ring_size = VNET[VIRTIO_QUEUE_NUM];
+
+	DP ("** (PDD) tx_ring_size = %d\n", tx_ring_size);
+	
+	size = (tx_ring_size * (16 + 2)) + 4;
+	used_offset = (size + 4095) & ~1024;
+	DP ("** (PDD) used_offset = %d", used_offset);
+	size = used_offset + 4 + (tx_ring_size * 8);
+	DP ("** (PDD) size = %d", size);
+	
+	p = (TUint32)AllocAligned(size);
+	DP ("** (PDD) p = %x\n", p);
+
+	VNET[VIRTIO_QUEUE_BASE] = Epoc::LinearToPhysical(p);
+
+	iTxDesc = reinterpret_cast<vring_desc*>(p);
+	iTxAvail = reinterpret_cast<vring_avail*>(p + tx_ring_size * 16);
+	iTxUsed = reinterpret_cast<vring_used*>(p + used_offset); 
+    
+   DP ("** (PDD) iTxDesc = %x", iTxDesc);
+   DP ("** (PDD) iTxAvail = %x", iTxAvail);
+   DP ("** (PDD) iTxUsed = %x", iTxUsed);
+    
+	VNET[VIRTIO_QUEUE_SEL] = RX_QUEUE;
+	rx_ring_size = VNET[VIRTIO_QUEUE_NUM];
+	
+	size = (rx_ring_size * (16 + 2)) + 4;
+	used_offset = (size + 4095) & ~4095;
+	size = used_offset + 4 + (rx_ring_size * 8);
+	p = (TUint32)AllocAligned(size);
+    DP ("** (PDD)  p = %x\n", p);
+	VNET[VIRTIO_QUEUE_BASE] = Epoc::LinearToPhysical(p);
+	
+	iRxDesc = reinterpret_cast<vring_desc*>(p);
+	iRxAvail = reinterpret_cast<vring_avail*>(p + rx_ring_size * 16);
+	iRxUsed = reinterpret_cast<vring_used*>(p + used_offset);
+
+    DP ("** (PDD) iRxDesc = %x", iRxDesc);
+    DP ("** (PDD) iRxAvail = %x", iRxAvail);
+    DP ("** (PDD) iRxUsed = %x", iRxUsed);
+
+	DP("** (PDD) Exit: EthernetDevice::AllocRings");
+}
+
+void EthernetDevice::AddRx()
+{
+    DP("** (PDD) Enter: EthernetDevice::AddRx"); 
+   
+    TInt n = iRxAvail->idx & (rx_ring_size - 1);
+    memset(&rx_header, 0, sizeof(rx_header));
+    iRxDesc[0].addr = Epoc::LinearToPhysical((TUint32)&rx_header);
+    iRxDesc[0].len = sizeof(rx_header);
+    iRxDesc[0].flags = VRING_DESC_F_NEXT | VRING_DESC_F_WRITE;
+    iRxDesc[0].next = 1;
+    iRxDesc[1].addr = Epoc::LinearToPhysical((TUint32) iRxBuffer.Ptr());
+    iRxDesc[1].len = ETHERNET_PAYLOAD_SIZE;
+    iRxDesc[1].flags = VRING_DESC_F_WRITE;
+    iRxAvail->ring[n] = 0;
+    iRxAvail->idx++;
+    VNET[VIRTIO_QUEUE_NOTIFY] = RX_QUEUE;
+
+    DP("** (PDD) Exit: EthernetDevice::AddRx");
+}
+
+
+
+void EthernetDevice::SetMacAddress(void)
+	{
+	DP("** (PDD) Enter: EthernetDevice::SetMacAddress");
+	
+	iDefaultConfig.iEthAddress[0] = VNET_MAC[0];
+	iDefaultConfig.iEthAddress[1] = VNET_MAC[1];
+	iDefaultConfig.iEthAddress[2] = VNET_MAC[2];
+	iDefaultConfig.iEthAddress[3] = VNET_MAC[3];
+	iDefaultConfig.iEthAddress[4] = VNET_MAC[4];
+	iDefaultConfig.iEthAddress[5] = VNET_MAC[5];
+	
+	DP ("** (PDD) macaddr %02x:%02x:%02x:%02x:%02x:%02x\n",
+			iDefaultConfig.iEthAddress[0], 
+			iDefaultConfig.iEthAddress[1], 
+			iDefaultConfig.iEthAddress[2], 
+			iDefaultConfig.iEthAddress[3], 
+			iDefaultConfig.iEthAddress[4], 
+			iDefaultConfig.iEthAddress[5]);
+	
+	DP("** (PDD) Exit: EthernetDevice::SetMacAddress");
+	}
+
+//
+// Functions that are just stubs
+//
+
+void EthernetDevice::CheckConfig(TEthernetConfigV01& aConfig)
+{
+	DP("** (PDD) EthernetDevice::CheckConfig");
+}
+
+TInt EthernetDevice::Configure(TEthernetConfigV01 &aConfig)
+{
+	DP("** (PDD) EthernetDevice::Configure");
+	return KErrNone;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/ethernet/pdd/ethernet_device.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,174 @@
+/*
+* 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: Register definitions and base classes for Ethernet Virtio. 
+*
+*/
+
+#ifndef __QEMUETHERNET_
+#define __QEMUETHERNET_
+
+#include <ethernet.h>
+#include <system.h>
+
+#define SVPDBG
+#ifdef SVPDBG
+#define DP(format...) Kern::Printf(format)
+#else
+#define DP(format...)
+#endif
+
+#define ETHERNET_PAYLOAD_SIZE 1500
+
+#define VIRTIO_CONFIG_S_ACKNOWLEDGE     1
+#define VIRTIO_CONFIG_S_DRIVER          2
+#define VIRTIO_CONFIG_S_DRIVER_OK       4
+#define VIRTIO_CONFIG_S_FAILED          0x80
+
+/* This marks a buffer as continuing via the next field. */
+#define VRING_DESC_F_NEXT       1
+/* This marks a buffer as write-only (otherwise read-only). */
+#define VRING_DESC_F_WRITE      2
+
+#define TX_QUEUE 1
+#define RX_QUEUE 0
+
+#define VNET_MAC ((volatile TUint8 *)(0xc600c000 + 0x100))
+#define VNET ((volatile TUint32 *)0xc600c000)
+
+enum {
+    VIRTIO_ID             = 0,
+    VIRTIO_DEVTYPE        = 1,
+    VIRTIO_HOST_FEATURES  = 2,
+    VIRTIO_GUEST_FEATURES = 3,
+    VIRTIO_QUEUE_BASE     = 4,
+    VIRTIO_QUEUE_NUM      = 5,
+    VIRTIO_QUEUE_SEL      = 6,
+    VIRTIO_QUEUE_NOTIFY   = 7,
+    VIRTIO_STATUS	  	  = 8,
+    VIRTIO_INT_ENABLE     = 9,
+    VIRTIO_INT_STATUS     = 10
+};
+
+typedef struct
+{
+#define VIRTIO_NET_HDR_F_NEEDS_CSUM     1       // Use csum_start, csum_offset
+ TUint8 flags;
+#define VIRTIO_NET_HDR_GSO_NONE         0       // Not a GSO frame
+#define VIRTIO_NET_HDR_GSO_TCPV4        1       // GSO frame, IPv4 TCP (TSO)
+#define VIRTIO_NET_HDR_GSO_UDP          3       // GSO frame, IPv4 UDP (UFO)
+#define VIRTIO_NET_HDR_GSO_TCPV6        4       // GSO frame, IPv6 TCP
+#define VIRTIO_NET_HDR_GSO_ECN          0x80    // TCP has ECN set
+  TUint8 gso_type;
+  TUint16 hdr_len;
+  TUint16 gso_size;
+  TUint16 csum_start;
+  TUint16 csum_offset;
+} virtio_net_hdr;
+
+typedef struct
+{
+  TUint64 addr;
+  TUint32 len;
+  TUint16 flags;
+  TUint16 next;
+} vring_desc;
+
+typedef struct
+{
+  TUint16 flags;
+  TUint16 idx;
+  TUint16 ring[16];
+
+} vring_avail;
+
+typedef struct
+{
+  TUint16 flags;
+  TUint16 idx;
+  struct {
+  	TUint32 id;
+  	TUint32 len;
+  } ring[16];
+} vring_used;
+
+
+//
+// Class to identify the device as ethernet device for Symbian
+//
+class EthernetDevice : public DEthernet
+{
+public:
+	EthernetDevice();
+	~EthernetDevice();
+	TInt DoCreate(TInt aUnit, const TDesC8* anInfo);
+	static void Isr(TAny* aPtr);
+	
+	//
+	// Functions that we must implement as we are inheriting from abstract base class
+	//
+	virtual TInt Start();
+	virtual void Stop(TStopMode aMode);
+	virtual void GetConfig(TEthernetConfigV01 &aConfig) const;
+	virtual TInt ValidateConfig(const TEthernetConfigV01 &aConfig) const;
+	virtual void CheckConfig(TEthernetConfigV01 &aConfig);
+	virtual TInt Configure(TEthernetConfigV01 &aConfig);
+	virtual void MacConfigure(TEthernetConfigV01 &aConfig);
+	virtual void Caps(TDes8 &aCaps) const;
+	virtual TInt DisableIrqs();
+	virtual void RestoreIrqs(TInt aIrq);
+	virtual TDfcQue* DfcQ(TInt aUnit);
+	virtual TInt Send(TBuf8<KMaxEthernetPacket+32> &aBuffer);
+	virtual TInt ReceiveFrame(TBuf8<KMaxEthernetPacket+32> &aBuffer, TBool okToUse);
+							  						  
+private:
+
+   TEthernetConfigV01   iDefaultConfig;
+	TInt  			   	iInterruptId;
+	TDfc				      iRxDfc;
+	TUint32				   iCreated;
+	TUint32				   iStarted;
+	
+	//Virtio structs for transmitting data to QEMU.
+	volatile vring_desc  *iTxDesc;
+	volatile vring_avail *iTxAvail;
+	volatile vring_used  *iTxUsed;
+   //Ring size hardcoded in QEMU.    
+	TUint tx_ring_size;
+	
+   //Virtio structs for receiving data from QEMU. 
+	volatile vring_desc  *iRxDesc;
+	volatile vring_avail *iRxAvail;
+	volatile vring_used  *iRxUsed;
+	
+	TUint rx_ring_size;
+   TUint rx_last_used;
+
+   //Virtio packet header definitions. 
+	virtio_net_hdr rx_header;
+	virtio_net_hdr tx_header;
+	
+	//Buffers for Rx/Tx transmission.
+	TBuf8<KMaxEthernetPacket+32> iTxBuffer;
+	TBuf8<KMaxEthernetPacket+32> iRxBuffer;
+		
+	static void RxDfc(TAny* aPtr);
+	
+	//QEMU specific member functions
+	void AllocRings();
+	void* AllocAligned(TUint16 size);
+	void AddRx();
+	void SetMacAddress(void);
+};
+
+#endif // __QEMUETHERNET_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/ethernet/test/ethernet_test.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,95 @@
+/*
+* 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:
+*
+*/
+
+#include <e32test.h>
+#include <e32debug.h>
+#include <d32ethernet.h>
+
+LOCAL_D RTest test(_L("DRIVER1_TEST"));
+
+_LIT(KDriver1LddFileName,"enet");
+_LIT(KDriver1PddFileName,"ethernet");
+
+_LIT8(KTestSendData,"abcdefghijklmnopqrstuvwxyz");
+_LIT8(KTestLargeSendData,"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
+
+GLDEF_C TInt E32Main()
+    {
+	test.Title();
+
+	TInt r;
+	RDebug::Printf(">>>>>>E32Main()");
+	
+	test.Start(_L("Load Physical Device"));
+	r=User::LoadPhysicalDevice(KDriver1PddFileName);
+	if (r != KErrNone)
+		RDebug::Printf("LoadPhysicalDevice: value of error =%d", r);
+		test(r==KErrNone || r==KErrAlreadyExists);
+
+	test.Next(_L("Load Logical Device"));
+	r=User::LoadLogicalDevice(KDriver1LddFileName);
+	if (r != KErrNone)
+			RDebug::Printf("LoadLogicalDevice: value of error =%d", r);
+			test(r==KErrNone || r==KErrAlreadyExists);
+
+	__KHEAP_MARK;
+
+	test.Next(_L("Open Logical Channel"));
+	RBusDevEthernet ldd;
+
+	r=ldd.Open(0);
+	RDebug::Printf("Value returned from ldd.Open()=%d", r);
+	test(r==KErrNone);
+
+	test.Next(_L("SendData"));
+	TRequestStatus status;
+	ldd.Write(status,KTestSendData);
+	
+	test.Next(_L("SendDataCancel"));
+	ldd.WriteCancel();
+	User::WaitForRequest(status);
+	r=status.Int();
+	//test(r==KErrCancel);
+
+	test.Next(_L("SendData"));
+	ldd.Write(status,KTestSendData);
+	User::WaitForRequest(status);
+	r=status.Int();
+	//test(r==KErrNone);
+
+	test.Next(_L("ReceiveData"));
+	TBuf8<256> buffer;
+	ldd.Read(status,buffer);
+
+	test.Next(_L("ReceiveDataCancel"));
+	ldd.ReadCancel();
+	User::WaitForRequest(status);
+	r=status.Int();
+	test(r==KErrCancel);
+
+	test.Next(_L("Close Logical Channel"));
+	ldd.Close();
+
+	__KHEAP_MARKEND;
+
+	test.End();
+
+	return(0);
+
+  }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/ethernet/test/ethernet_test.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,26 @@
+/*
+* 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			ethernet_testapp.exe        
+targettype		exe
+source			ethernet_test.cpp
+library			euser.lib
+systeminclude	/epoc32/include
+
+CAPABILITY	all -tcb
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/fb/fb.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,39 @@
+/*
+* 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:
+*
+*/
+
+#include <variant.mmh>
+#include "kernel\kern_ext.mmh"
+
+TARGET			VariantTarget(lcd,dll)
+TARGETTYPE		kext
+
+SYSTEMINCLUDE	AsspNKernIncludePath
+SYSTEMINCLUDE	.
+
+SOURCEPATH		.
+SOURCE			syborg_fb.cpp
+
+LIBRARY			PlatformLib
+
+EPOCALLOWDLLDATA
+
+UID			    0x1000008d 0x100039e8
+VENDORID        0x70000001
+
+ROMTARGET		lcd.dll
+
+CAPABILITY		all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/fb/syborg_fb.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,487 @@
+/*
+* 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: Minimalistic frame buffer driver
+*
+*/
+
+#include <syborg_priv.h>
+#include "syborg_fb.h"
+
+TPhysAddr Syborg::VideoRamPhys;
+TPhysAddr Syborg::VideoRamPhysSecure;		// Secure display memory
+
+TPhysAddr TSyborg::VideoRamPhys()
+{
+  __KTRACE_OPT(KEXTENSION,Kern::Printf("TSyborg::VideoRamPhys: VideoRamPhys=0x%x", Syborg::VideoRamPhys));
+  return Syborg::VideoRamPhys;
+}
+
+TPhysAddr TSyborg::VideoRamPhysSecure()
+{
+  return Syborg::VideoRamPhysSecure;
+}
+
+LOCAL_C TInt DoHalFunction(TAny* aPtr, TInt aFunction, TAny* a1, TAny* a2)
+{
+  DLcdPowerHandler* pH=(DLcdPowerHandler*)aPtr;
+  return pH->HalFunction(aFunction,a1,a2);
+}
+
+static void rxMsg(TAny* aPtr)
+{
+  DLcdPowerHandler& h=*(DLcdPowerHandler*)aPtr;
+  TMessageBase* pM = h.iMsgQ.iMessage;
+  if(pM)
+	h.HandleMsg(pM);
+}
+
+static void power_up_dfc(TAny* aPtr)
+{
+  ((DLcdPowerHandler*)aPtr)->PowerUpDfc();
+}
+
+void power_down_dfc(TAny* aPtr)
+{
+  ((DLcdPowerHandler*)aPtr)->PowerDownDfc();
+}
+
+void DLcdPowerHandler::DisplayOn()
+{ 
+  PowerUpLcd(iSecureDisplay);
+  iDisplayOn = ETrue;
+}
+
+void DLcdPowerHandler::DisplayOff()
+{
+  PowerDownLcd();
+  iDisplayOn = EFalse;
+}
+
+void DLcdPowerHandler::SwitchDisplay(TBool aSecure)
+ {
+   if(aSecure)
+	 {
+	   if(!iSecureDisplay)
+		 {
+		   DisplayOff();
+		   iSecureDisplay = ETrue;
+		   DisplayOn();
+		 }
+	 }
+   else
+	 {
+	   if(iSecureDisplay)
+		 {
+		   DisplayOff();
+		   iSecureDisplay = EFalse;
+		   DisplayOn();
+		 }
+	 }
+ }
+
+void DLcdPowerHandler::PowerUpDfc()
+{
+  DisplayOn();
+  PowerUpDone();
+}
+
+void DLcdPowerHandler::PowerDownDfc()
+{
+  DisplayOff();
+  PowerDownDone();
+}
+
+void DLcdPowerHandler::PowerDown(TPowerState)
+{
+  iPowerDownDfc.Enque();
+}
+
+void DLcdPowerHandler::PowerUp()
+{
+  iPowerUpDfc.Enque();
+}
+
+void DLcdPowerHandler::PowerUpLcd(TBool aSecure)
+{
+#if 1
+  WriteReg(iPortAddr, FB_ENABLED, 0);
+  WriteReg(iPortAddr, FB_BASE, aSecure ? iSecurevRamPhys : ivRamPhys);
+  WriteReg(iPortAddr, FB_WIDTH, iVideoInfo.iSizeInPixels.iWidth);
+  WriteReg(iPortAddr, FB_BLANK, 0);
+  WriteReg(iPortAddr, FB_BPP, 32);
+  WriteReg(iPortAddr, FB_COLOR_ORDER, 0);
+  WriteReg(iPortAddr, FB_BYTE_ORDER, 0);
+  WriteReg(iPortAddr, FB_PIXEL_ORDER, 0);
+  WriteReg(iPortAddr, FB_INT_MASK, 0);
+  WriteReg(iPortAddr, FB_ENABLED, 1);
+  WriteReg(iPortAddr, FB_HEIGHT, iVideoInfo.iSizeInPixels.iHeight);
+#endif
+}
+
+void DLcdPowerHandler::PowerDownLcd()
+{
+  WriteReg(iPortAddr, FB_BLANK, 1);
+}
+
+DLcdPowerHandler::DLcdPowerHandler()
+	:	DPowerHandler(KLitLcd),
+		iMsgQ(rxMsg,this,NULL,1),
+		iPowerUpDfc(&power_up_dfc,this,6),
+		iPowerDownDfc(&power_down_dfc,this,7)
+{
+}
+
+void DLcdPowerHandler::ScreenInfo(TScreenInfoV01& anInfo)
+{
+  anInfo.iWindowHandleValid = EFalse;
+  anInfo.iWindowHandle = NULL;
+  anInfo.iScreenAddressValid = ETrue;
+  anInfo.iScreenAddress = (TAny *)(iChunk->LinearAddress());
+  anInfo.iScreenSize.iWidth = iVideoInfo.iSizeInPixels.iWidth;
+  anInfo.iScreenSize.iHeight = iVideoInfo.iSizeInPixels.iHeight;
+}
+
+void DLcdPowerHandler::HandleMsg(TMessageBase* aMsg)
+{
+  if(aMsg->iValue)
+	DisplayOn();
+  else
+	DisplayOff();
+  aMsg->Complete(KErrNone,ETrue);
+}
+
+void DLcdPowerHandler::WsSwitchOnScreen()
+{
+  TThreadMessage& m = Kern::Message();
+  m.iValue = ETrue;
+  m.SendReceive(&iMsgQ);
+}
+
+void DLcdPowerHandler::WsSwitchOffScreen()
+{
+  TThreadMessage& m = Kern::Message();
+  m.iValue = EFalse;
+  m.SendReceive(&iMsgQ);
+}
+
+TInt DLcdPowerHandler::GetCurrentDisplayModeInfo(TVideoInfoV01& aInfo, TBool aSecure)
+{
+  NKern::FMWait(&iLock);
+  if(aSecure)
+	aInfo = iSecureVideoInfo;
+  else
+	aInfo = iVideoInfo;
+  NKern::FMSignal(&iLock);
+  return KErrNone;
+}
+
+TInt DLcdPowerHandler::GetSpecifiedDisplayModeInfo(TInt aMode, TVideoInfoV01& aInfo)
+{
+  if(aMode < 0 || aMode >= KConfigLcdNumberOfDisplayModes)
+	return KErrArgument;
+  
+  NKern::FMWait(&iLock);
+  aInfo = iVideoInfo;
+  NKern::FMSignal(&iLock);
+
+  if(aMode != aInfo.iDisplayMode)
+	{
+	  aInfo.iOffsetToFirstPixel = KCOnfigOffsetToFirstPixel;
+	  aInfo.iIsPalettized       = KConfigIsPalettized;
+	  aInfo.iOffsetBetweenLines = KCOnfigOffsetBetweenLines;
+	  aInfo.iBitsPerPixel       = KConfigBitsPerPixel;
+	}
+  return KErrNone;
+}
+
+TInt DLcdPowerHandler::AllocateFrameBuffer()
+{
+	// Allocate physical RAM for video
+	TInt vSize = TSyborg::VideoRamSize();
+
+	NKern::ThreadEnterCS();
+	TInt r = Epoc::AllocPhysicalRam(vSize,Syborg::VideoRamPhys);
+	if (r != KErrNone)
+	{
+	        NKern::ThreadLeaveCS();
+		Kern::Fault("AllocVideoRam",r);
+	}
+
+	// Map the video RAM
+	ivRamPhys = TSyborg::VideoRamPhys();
+
+	r = DPlatChunkHw::New(iChunk,ivRamPhys,vSize,EMapAttrUserRw|EMapAttrBufferedC);
+
+	NKern::ThreadLeaveCS();
+
+	if(r != KErrNone)
+	  return r;
+
+	TUint* pV = (TUint*)iChunk->LinearAddress();
+
+	// Allocate physical RAM for secure display
+	NKern::ThreadEnterCS();
+	r = Epoc::AllocPhysicalRam(vSize,Syborg::VideoRamPhysSecure);
+	if (r != KErrNone)
+	{
+	        NKern::ThreadLeaveCS();
+		Kern::Fault("AllocVideoRam 2",r);
+	}
+	iSecurevRamPhys = ivRamPhys + vSize;
+	TInt r2 = DPlatChunkHw::New(iSecureChunk,iSecurevRamPhys,vSize,EMapAttrUserRw|EMapAttrBufferedC);
+
+	NKern::ThreadLeaveCS();
+
+	if(r2 != KErrNone)
+	  return r2;
+
+	TUint* pV2 = (TUint*)iSecureChunk->LinearAddress();
+
+	iVideoInfo.iSizeInPixels.iWidth  = KConfigLcdWidth;
+	iVideoInfo.iSizeInPixels.iHeight = KConfigLcdHeight;
+	iVideoInfo.iDisplayMode = KConfigLcdDisplayMode;
+	iVideoInfo.iOffsetToFirstPixel = KCOnfigOffsetToFirstPixel;
+	iVideoInfo.iOffsetBetweenLines = KCOnfigOffsetBetweenLines;
+	iVideoInfo.iIsPalettized = KConfigIsPalettized;
+	iVideoInfo.iBitsPerPixel = KConfigBitsPerPixel;
+	iVideoInfo.iSizeInTwips.iWidth = KConfigLcdWidthInTwips;
+	iVideoInfo.iSizeInTwips.iHeight = KConfigLcdHeightInTwips;
+	iVideoInfo.iIsMono = KConfigIsMono;
+	iVideoInfo.iVideoAddress = (TInt)pV;
+	iVideoInfo.iIsPixelOrderLandscape = KConfigPixelOrderLandscape;
+	iVideoInfo.iIsPixelOrderRGB = KConfigPixelOrderRGB;
+
+	iSecureVideoInfo = iVideoInfo;
+	iSecureVideoInfo.iVideoAddress = (TInt)pV2;
+
+#if 0
+	WriteReg(iPortAddr, FB_ENABLED, 0);
+	WriteReg(IPortAddr, FB_INT_MASK, 0);
+	WriteReg(iPortAddr, FB_BASE, iSecureDisplay ? iSecurevRamPhys : ivRamPhys);
+	WriteReg(iPortAddr, FB_WIDTH, iVideoInfo.iSizeInPixels.iWidth);
+	WriteReg(iPortAddr, FB_HEIGHT, iVideoInfo.iSizeInPixels.iHeight);
+	WriteReg(iPortAddr, FB_BLANK, 0);
+	WriteReg(iPortAddr, FB_ENABLED, 1);
+#endif
+	
+	return KErrNone;
+}
+
+
+TInt DLcdPowerHandler::SetDisplayMode(TInt aMode)
+{
+  if(aMode < 0 || aMode >= KConfigLcdNumberOfDisplayModes)
+	return KErrArgument;
+
+  // store the current mode
+  iVideoInfo.iDisplayMode = aMode;
+
+  // store the current mode for secure screen
+  iSecureVideoInfo.iDisplayMode = aMode;
+
+  return KErrNone;
+}
+
+TInt DLcdPowerHandler::HalFunction(TInt aFunction, TAny* a1, TAny* a2)
+{
+  TInt r=KErrNone;
+  switch(aFunction)
+	{
+	case EDisplayHalScreenInfo:
+	  {
+		TPckgBuf<TScreenInfoV01> vPckg;
+		ScreenInfo(vPckg());
+		Kern::InfoCopy(*(TDes8*)a1,vPckg);
+		break;
+	  }
+	case EDisplayHalWsRegisterSwitchOnScreenHandling:
+	  {
+		iWsSwitchOnScreen=(TBool)a1;
+		break;
+	  }
+	case EDisplayHalWsSwitchOnScreen:
+	  {
+		WsSwitchOnScreen();
+		break;
+	  }
+	case EDisplayHalModeCount:
+	  {
+		TInt ndm = KConfigLcdNumberOfDisplayModes;
+		kumemput32(a1, &ndm, sizeof(ndm));
+		break;
+	  }
+	case EDisplayHalSetMode:
+	  {
+		__KTRACE_OPT(KEXTENSION,Kern::Printf("EDisplayHalSetMode"));
+		__SECURE_KERNEL(
+						if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDisplayHalSetMode")))
+						return KErrPermissionDenied;
+						)
+		  r = SetDisplayMode((TInt)a1);
+		break;
+	  }
+	case EDisplayHalMode:
+	  {
+		kumemput32(a1, &iVideoInfo.iDisplayMode, sizeof(iVideoInfo.iDisplayMode));
+		r = KErrNone;
+		break;
+	  }
+	case EDisplayHalSetPaletteEntry:
+	  {
+		__SECURE_KERNEL(
+						if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDisplayHalSetPaletteEntry")))
+						return KErrPermissionDenied;
+						)
+		  r = KErrNotSupported;
+		break;
+	  }
+	case EDisplayHalPaletteEntry:
+	  {
+		TInt entry;
+		kumemget32(&entry, a1, sizeof(TInt));
+		r = KErrNotSupported;
+		break;
+	  }
+	case EDisplayHalSetState:
+	  {
+		__SECURE_KERNEL(
+						if(!Kern::CurrentThreadHasCapability(ECapabilityPowerMgmt,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDisplayHalSetState")))
+						return KErrPermissionDenied;
+						)
+		  if((TBool)a1)
+			WsSwitchOnScreen();
+		  else
+			WsSwitchOffScreen();
+		break;
+	  }
+	case EDisplayHalState:
+	  {
+		kumemput32(a1, &iDisplayOn, sizeof(TBool));
+		break;
+	  }
+	case EDisplayHalColors:
+	  {
+		TInt mdc = 1<<24;
+		kumemput32(a1, &mdc, sizeof(mdc));
+		break;
+	  }
+	case EDisplayHalCurrentModeInfo:
+	  {
+		TPckgBuf<TVideoInfoV01> vPckg;
+		r = GetCurrentDisplayModeInfo(vPckg(), (TBool)a2);
+		if(KErrNone == r)
+		  Kern::InfoCopy(*(TDes8*)a1,vPckg);
+		break;
+	  }
+	case EDisplayHalSpecifiedModeInfo:
+	  {
+		TPckgBuf<TVideoInfoV01> vPckg;
+		TInt mode;
+		kumemget32(&mode, a1, sizeof(mode));
+		r = GetSpecifiedDisplayModeInfo(mode, vPckg());
+		if(KErrNone == r)
+		  Kern::InfoCopy(*(TDes8*)a2,vPckg);
+		break;
+	  }	
+	case EDisplayHalSecure:
+	  {
+		kumemput32(a1, &iSecureDisplay, sizeof(TBool));
+		break;
+	  }
+	case EDisplayHalSetSecure:
+	  {
+		__SECURE_KERNEL(
+						if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDisplayHalSetSecure")))
+						return KErrPermissionDenied;
+						)
+		  SwitchDisplay((TBool)a1);
+		break;
+	  }
+	default:
+	  {
+		r = KErrNotSupported;
+		break;
+	  }			
+	}
+  return r;
+}
+
+TInt DLcdPowerHandler::Create()
+{
+	iDfcQ = Kern::DfcQue0();	// use low priority DFC queue for this driver 
+
+	iPortAddr = KHwBaseClcd;
+
+	// !@!
+#if 0	
+	// Map the video RAM
+	TInt vSize = TSyborg::VideoRamSize();
+	ivRamPhys = TSyborg::VideoRamPhys();
+
+	TInt r = DPlatChunkHw::New(iChunk,ivRamPhys,vSize,EMapAttrUserRw|EMapAttrBufferedC);
+	if(r != KErrNone)
+	  return r;
+
+	TUint* pV = (TUint*)iChunk->LinearAddress();
+
+	iSecurevRamPhys = ivRamPhys + vSize;
+	TInt r2 = DPlatChunkHw::New(iSecureChunk,iSecurevRamPhys,vSize,EMapAttrUserRw|EMapAttrBufferedC);
+	if(r2 != KErrNone)
+	  return r2;
+
+	TUint* pV2 = (TUint*)iSecureChunk->LinearAddress();
+#endif
+
+	iVideoInfo.iSizeInPixels.iWidth  = KConfigLcdWidth;
+	iVideoInfo.iSizeInPixels.iHeight = KConfigLcdHeight;
+	iVideoInfo.iDisplayMode = KConfigLcdDisplayMode;
+	iVideoInfo.iOffsetToFirstPixel = KCOnfigOffsetToFirstPixel;
+	iVideoInfo.iOffsetBetweenLines = KCOnfigOffsetBetweenLines;
+	iVideoInfo.iIsPalettized = KConfigIsPalettized;
+	iVideoInfo.iBitsPerPixel = KConfigBitsPerPixel;
+	iVideoInfo.iSizeInTwips.iWidth = KConfigLcdWidthInTwips;
+	iVideoInfo.iSizeInTwips.iHeight = KConfigLcdHeightInTwips;
+	iVideoInfo.iIsMono = KConfigIsMono;
+	// !@!	iVideoInfo.iVideoAddress = (TInt)pV;
+	iVideoInfo.iIsPixelOrderLandscape = KConfigPixelOrderLandscape;
+	iVideoInfo.iIsPixelOrderRGB = KConfigPixelOrderRGB;
+
+	iSecureVideoInfo = iVideoInfo;
+	// !@! iSecureVideoInfo.iVideoAddress = (TInt)pV2;
+
+	AllocateFrameBuffer();
+	TInt r = Kern::AddHalEntry(EHalGroupDisplay,DoHalFunction,this);
+	if(r != KErrNone)
+	  return r;
+
+	iPowerUpDfc.SetDfcQ(iDfcQ);
+	iPowerDownDfc.SetDfcQ(iDfcQ);
+	iMsgQ.SetDfcQ(iDfcQ);
+	iMsgQ.Receive();
+
+	Add();
+	DisplayOn();
+
+	return KErrNone;
+}
+
+DECLARE_STANDARD_EXTENSION()
+{
+  TInt r = KErrNoMemory;
+  DLcdPowerHandler* pH=new DLcdPowerHandler;
+  if(pH)
+	r = pH->Create();
+  
+  return r;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/fb/syborg_fb.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,124 @@
+/*
+* 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: Minimalistic frame buffer driver
+*
+*/
+
+#ifndef _SYBORG_FB_H
+#define _SYBORG_FB_H
+
+#include <videodriver.h>
+#include <nkern.h>
+#include <kernel.h>
+#include <kpower.h>
+#include <system.h>
+
+_LIT(KLitLcd,"SYBORG_FB");
+
+const TUint KConfigLcdWidth            = 640;
+const TUint	KConfigLcdHeight	       = 480;
+const TInt	KConfigLcdWidthInTwips     = 9638;
+const TInt	KConfigLcdHeightInTwips    = 7370;
+const TBool KConfigIsMono              = 0;
+const TBool KConfigIsPalettized        = 0;
+const TInt  KCOnfigOffsetToFirstPixel  = 0;
+const TBool KConfigPixelOrderRGB       = 0;
+const TBool KConfigPixelOrderLandscape = 1;
+const TInt  KConfigLcdDisplayMode       = 2;
+//const TInt  KConfigLcdDisplayMode       = 1;
+const TInt  KConfigLcdNumberOfDisplayModes = 3;
+
+
+const TInt  KConfigBitsPerPixel        = 24;
+const TInt  KCOnfigOffsetBetweenLines  = 2560;
+
+class DLcdPowerHandler : public DPowerHandler
+{
+public: // from DPowerHandler
+  void PowerDown(TPowerState);
+  void PowerUp();
+public:	// to prevent a race condition with WServer trying to power up/down at the same time
+  void PowerUpDfc();
+  void PowerDownDfc();
+public:
+  DLcdPowerHandler();
+  TInt Create();
+  void DisplayOn();
+  void DisplayOff();
+  TInt HalFunction(TInt aFunction, TAny* a1, TAny* a2);
+
+  void PowerUpLcd(TBool aSecure);
+  void PowerDownLcd();
+
+  void ScreenInfo(TScreenInfoV01& aInfo);
+  void WsSwitchOnScreen();
+  void WsSwitchOffScreen();
+  void HandleMsg(TMessageBase* aMsg);
+  void SwitchDisplay(TBool aSecure);
+
+private:
+  TInt GetCurrentDisplayModeInfo(TVideoInfoV01& aInfo, TBool aSecure);
+  TInt GetSpecifiedDisplayModeInfo(TInt aMode, TVideoInfoV01& aInfo);
+  TInt SetDisplayMode(TInt aMode);
+  TInt AllocateFrameBuffer();
+  
+  TBool iDisplayOn;
+  DPlatChunkHw* iChunk;
+  DPlatChunkHw* iSecureChunk;
+  TBool iWsSwitchOnScreen;
+  TBool iSecureDisplay;
+
+public:
+  TDfcQue* iDfcQ;
+  TMessageQue iMsgQ;					// to prevent a race condition with Power Manager trying to power up/down at the same time
+  TDfc iPowerUpDfc;
+  TDfc iPowerDownDfc;	
+
+private:
+  TVideoInfoV01 iVideoInfo;
+  TVideoInfoV01 iSecureVideoInfo;
+  NFastMutex iLock;
+  TPhysAddr ivRamPhys;
+  TPhysAddr iSecurevRamPhys;
+
+public:
+  TLinAddr iPortAddr;
+
+enum {
+    FB_ID               = 0,
+    FB_BASE             = 1,
+    FB_HEIGHT           = 2,
+    FB_WIDTH            = 3,
+    FB_ORIENTATION      = 4,
+    FB_BLANK            = 5,
+    FB_INT_MASK         = 6,
+    /* begin new interface */
+    FB_INTERRUPT_CAUSE  = 7,
+    FB_BPP              = 8,
+    FB_COLOR_ORDER      = 9,
+    FB_BYTE_ORDER       = 10,
+    FB_PIXEL_ORDER      = 11,
+    FB_ROW_PITCH        = 12,
+    FB_ENABLED          = 13,
+    FB_PALETTE_START    = 0x400 >> 2,
+    FB_PALETTE_END   = FB_PALETTE_START+256-1,
+    /* end new interface */
+};
+
+#define FB_INT_VSYNC            (1U << 0)
+#define FB_INT_BASE_UPDATE_DONE (1U << 1)
+
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/hal/config.hcf	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,75 @@
+EManufacturer=0
+EManufacturerHardwareRev=0
+EManufacturerSoftwareRev=0
+EManufacturerSoftwareBuild=0
+EModel=0
+EMachineUid=0
+EDeviceFamily=0
+EDeviceFamilyRev=0
+ECPU=0
+ECPUArch=0
+ECPUABI=0
+ECPUSpeed = GetCPUSpeed
+ESystemStartupReason = GetSystemStartupReason
+ESystemException = GetSystemException
+ESystemTickPeriod=0
+EMemoryRAM = GetRAMSize
+EMemoryRAMFree = GetFreeRAM
+EMemoryROM = GetROMSize
+EMemoryPageSize=0
+EPowerGood=0
+EPowerBackup=0
+EPowerExternal=0
+EKeyboard=0
+EKeyboardDeviceKeys=0
+EKeyboardAppKeys=0
+EKeyboardClick=0
+EDisplayXPixels=ProcessDisplayCurrentModeInfo
+EDisplayYPixels=ProcessDisplayCurrentModeInfo
+EDisplayXTwips=ProcessDisplayCurrentModeInfo
+EDisplayYTwips=ProcessDisplayCurrentModeInfo
+EDisplayColors=ProcessDisplayColors
+EDisplayState : set = ProcessDisplayState
+EDisplayContrast : set = ProcessDisplayContrast
+EDisplayContrastMax=ProcessDisplayMaxContrast
+EBacklight=0
+EBacklightState :set = ProcessBacklightState
+EPen=0
+EPenX=0
+EPenY=0
+EPenDisplayOn : set = ProcessPenDisplayOnState
+EPenClick=0
+EMouse=0
+EMouseState : set = ProcessMouseState
+EMouseSpeed : set = ProcessMouseSpeed
+EMouseAcceleration : set = ProcessMouseAcceleration
+EMouseButtons=0
+EMouseButtonState = GetMouseButtonState
+ECaseSwitch=0
+ELEDs=0
+ELEDmask : set = ProcessLEDMask
+ESwitches=GetSwitches
+EIntegratedPhone=0
+EDisplayBrightness : set = ProcessDisplayBrightness
+EDisplayBrightnessMax=ProcessDisplayMaxBrightness
+ELanguageIndex : set = 0
+EDisplayIsMono=ProcessDisplaySpecifiedModeInfo
+EDisplayIsPalettized=ProcessDisplaySpecifiedModeInfo
+EDisplayBitsPerPixel=ProcessDisplaySpecifiedModeInfo
+EDisplayNumModes = ProcessDisplayNumModes
+EDisplayMemoryAddress=ProcessDisplayCurrentModeInfo
+EDisplayOffsetToFirstPixel=ProcessDisplaySpecifiedModeInfo
+EDisplayOffsetBetweenLines=ProcessDisplaySpecifiedModeInfo
+EDisplayPaletteEntry : set = ProcessDisplayPaletteEntry
+EDisplayIsPixelOrderRGB=ProcessDisplayCurrentModeInfo
+EDisplayIsPixelOrderLandscape=ProcessDisplayCurrentModeInfo
+EDisplayMode : set = ProcessDisplayMode
+EDebugPort : set = ProcessDebugPort
+EClipboardDrive=0
+ESystemDrive : set = 0
+EDisplayNumberOfScreens=0
+ENanoTickPeriod=0
+EFastCounterFrequency=0
+EFastCounterCountsUp=0
+EHardwareFloatingPoint = GetHardwareFloatingPoint
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/hal/hal.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,39 @@
+/*
+* 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:
+*
+*/
+
+#include        <variant.mmh>
+
+TARGET		    VariantTarget(hal,dll)
+TARGETTYPE		dll
+LINKAS			hal.dll
+NOEXPORTLIBRARY
+
+SOURCEPATH		..\..\hal\src
+SOURCE			hal_main.cpp userhal.cpp
+
+SOURCEPATH		\epoc32\build\generatedcpp\hal
+SOURCE			VariantTarget(values,cpp) VariantTarget(config,cpp)
+
+SYSTEMINCLUDE	\epoc32\include \epoc32\include\kernel
+
+LIBRARY			euser.lib
+DEFFILE			..\..\hal\~\hal.def
+
+UID				0x1000008d 0x100039e8
+VENDORID        0x70000001
+
+CAPABILITY		all	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/hal/values.hda	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,41 @@
+EManufacturer=intel
+EManufacturerHardwareRev=0x1
+EManufacturerSoftwareRev=0x100
+EManufacturerSoftwareBuild=0x250
+EModel=0x42525453
+EMachineUid=OmapH4
+EDeviceFamily=crystal
+EDeviceFamilyRev=0x001
+ECPU=arm
+ECPUArch=0x400
+ECPUABI=arm5
+ECPUSpeed=0
+ESystemStartupReason=cold
+ESystemException=0
+ESystemTickPeriod=15625
+EMemoryRAM=4
+EMemoryRAMFree=2
+EMemoryROM=12
+EMemoryPageSize=0x1000
+EPowerGood=1
+EPowerExternal=1
+EMouse=1
+EMouseState=1
+EMouseSpeed=1
+EMouseAcceleration=1
+EMouseButtons=2
+EMouseButtonState=0
+EMouseX=640
+EMouseY=480
+ECaseSwitch=0
+EIntegratedPhone=0
+ELanguageIndex=0
+EDebugPort=0
+EClipboardDrive=2
+ESystemDrive=0xffff
+EDisplayNumberOfScreens=1
+ENanoTickPeriod=1000
+EFastCounterFrequency=1000000
+EFastCounterCountsUp=1
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/kasyborg.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,45 @@
+/*
+* 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:
+*
+*/
+
+#include <variant.mmh>
+#include "kernel\kern_ext.mmh"
+
+TARGET			VariantTarget(kasyborg,dll)
+TARGETTYPE		var
+
+EXPORTLIBRARY	kasyborg
+LINKAS			kasyborg.dll
+
+SYSTEMINCLUDE   .\specific
+
+SOURCEPATH		.\specific
+SOURCE		    syborg.cpp interrupts.cpp assp.cpp
+SOURCE		    syborg.cia interrupts.cia
+
+// now specified in kern_ext.lib
+//LIBRARY			ekern.lib
+
+DEFFILE			.\~\kasyborg.def
+
+NOSTRICTDEF
+
+EPOCALLOWDLLDATA
+
+UID				0x1000008d 0x100039e8
+VENDORID        0x70000001
+
+CAPABILITY		all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/keyboard/keyboard.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,43 @@
+/*
+* 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:
+*
+*/
+
+#include <variant.mmh>
+#include "kernel\kern_ext.mmh"
+
+TARGET			VariantTarget(ekeyb,dll)
+TARGETTYPE		kext
+ROMTARGET		ekeyb.dll
+
+SYSTEMINCLUDE	AsspNKernIncludePath
+
+SOURCEPATH		.
+SOURCE			syborg_keyboard.cpp
+
+//LIBRARY			ekern.lib
+LIBRARY			PlatformLib
+
+//NOEXPORTLIBRARY
+
+//DEFFILE			..\e32\~\empty.def
+//DEFFILE			.\~\exkey.def
+
+//NOSTRICTDEF
+
+UID				0x100039cf 0x100000db
+VENDORID        0x70000001
+
+CAPABILITY		all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/keyboard/syborg_keyboard.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,227 @@
+/*
+* 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: Minimalistic keyboard driver
+*
+*/
+
+//#define DEBUG
+
+#include "syborg_keyboard.h"
+
+LOCAL_C TInt halFunction(TAny* aPtr, TInt aFunction, TAny* a1, TAny* a2)
+{
+  DKeyboardPs2Soc* pH=(DKeyboardPs2Soc*)aPtr;
+  return pH->HalFunction(aFunction,a1,a2);
+}
+
+void rxMsg(TAny* aPtr)
+{
+  DKeyboardPs2Soc& h=*(DKeyboardPs2Soc*)aPtr;
+  TMessageBase* pM=h.iMsgQ.iMessage;
+  if (pM)
+	h.HandleMsg(pM);
+}
+
+TInt DKeyboardPs2Soc::FifoPop(void)
+{
+  TInt val = iKeyFifo[iFifoPos];
+  iFifoPos++;
+  iFifoCount--;
+  
+  if (iFifoPos == FIFO_SIZE)
+	iFifoPos = 0;
+
+  return val;
+}
+
+void DKeyboardPs2Soc::FifoPush(TInt val)
+{
+  TInt slot;
+
+  if (iFifoCount == FIFO_SIZE)
+	return;
+  
+  slot = iFifoPos + iFifoCount;
+  if (slot >= FIFO_SIZE)
+	slot -= FIFO_SIZE;
+  iKeyFifo[slot] = val;
+  iFifoCount++;
+}
+
+void DKeyboardPs2Soc::Isr(TAny* aPtr)
+{
+  __DEBUG_PRINT("DKeyboardPs2Soc::Isr");
+  DKeyboardPs2Soc& k = *(DKeyboardPs2Soc*)aPtr;
+
+  // Is now auto-clearing
+  while(ReadReg(KHwBaseKmiKeyboard, KBD_FIFO_COUNT)!=0)
+	k.FifoPush(ReadReg(KHwBaseKmiKeyboard, KBD_DATA));
+  
+  //WriteReg(KHwBaseKmiKeyboard,KBD_CLEAR_INT, 0);
+  Interrupt::Clear(EIntKeyboard); 
+  k.iRxDfc.Add();
+}
+
+DKeyboardPs2Soc::DKeyboardPs2Soc()
+  :	DPowerHandler(KLitKeyboard),
+	iRxDfc(RxDfc,this,Kern::DfcQue0(),1),
+	iMsgQ(rxMsg,this,NULL,1)
+{
+  iKeyboardOn = ETrue;
+  iFifoPos = 0;
+  iFifoCount = 0;
+}
+
+TInt DKeyboardPs2Soc::Create()
+{
+  __DEBUG_PRINT("DKeyboardPs2Soc::Create");
+
+  TInt r=KErrNone;
+  iDfcQ=Kern::DfcQue0();
+
+  iFifoPos = iFifoCount = 0;
+
+  r=Kern::AddHalEntry(EHalGroupKeyboard,halFunction,this);
+  if (r!=KErrNone)
+	return r;
+
+  iMsgQ.SetDfcQ(iDfcQ);
+  iMsgQ.Receive();
+
+  r=Interrupt::Bind(EIntKeyboard,Isr,this);
+  if (r==KErrNone) {
+	Add();
+	KeyboardOn();
+  }
+  return r;
+}
+
+void DKeyboardPs2Soc::PowerUp()
+{
+  PowerUpDone();
+}
+
+void DKeyboardPs2Soc::PowerDown(TPowerState)
+{
+  PowerDownDone();
+}
+
+void DKeyboardPs2Soc::KeyboardOn()
+{
+  __DEBUG_PRINT("DKeyboardPs2Soc::KeyboardOn");
+  TInt reg = ReadReg(KHwBaseKmiKeyboard,KBD_ID);
+  
+  Interrupt::Enable(EIntKeyboard);
+  WriteReg(KHwBaseKmiKeyboard,KBD_INT_ENABLE,1);
+}
+
+void DKeyboardPs2Soc::KeyboardOff()
+{
+  __DEBUG_PRINT("DKeyboardPs2Soc::KeyboardOff");
+  Interrupt::Disable(EIntKeyboard);
+  WriteReg(KHwBaseKmiKeyboard,KBD_INT_ENABLE,0);
+}
+
+void DKeyboardPs2Soc::HandleMsg(TMessageBase* aMsg)
+{
+  __DEBUG_PRINT("DKeyboardPs2Soc::HandleMsg");
+  if (aMsg->iValue)
+	KeyboardOn();
+  else
+	KeyboardOff();
+  aMsg->Complete(KErrNone,ETrue);
+}
+
+void DKeyboardPs2Soc::KeyboardInfo(TKeyboardInfoV01& aInfo)
+{
+  aInfo.iKeyboardType=KConfigKeyboardType;
+  aInfo.iDeviceKeys=KConfigKeyboardDeviceKeys;
+  aInfo.iAppsKeys=KConfigKeyboardAppsKeys;
+}
+
+TInt DKeyboardPs2Soc::HalFunction(TInt aFunction, TAny* a1, TAny* a2)
+{
+  TInt r=KErrNone;
+
+  __DEBUG_PRINT("DKeyboardPs2Soc::HalFunction");
+  switch(aFunction)
+	{
+	case EKeyboardHalKeyboardInfo:
+	  {
+		TPckgBuf<TKeyboardInfoV01> kPckg;
+		KeyboardInfo(kPckg());
+		Kern::InfoCopy(*(TDes8*)a1,kPckg);
+		break;
+	  }
+	  // UIKLAF Silent running/power management
+	case EKeyboardHalSetKeyboardState:
+	  {
+		if(!Kern::CurrentThreadHasCapability(ECapabilityPowerMgmt,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EKeyboardHalSetKeyboardState")))
+		  return KErrPermissionDenied;
+		if ((TBool)a1)
+		  {
+			TThreadMessage& m=Kern::Message();
+			m.iValue = ETrue;
+			m.SendReceive(&iMsgQ);
+		  }
+		else
+		  {
+			TThreadMessage& m=Kern::Message();
+			m.iValue = EFalse;
+			m.SendReceive(&iMsgQ);
+		  }
+	  }
+	  break;
+	case EKeyboardHalKeyboardState:
+	  kumemput32(a1, &iKeyboardOn, sizeof(TBool));
+	  break;
+	default:
+	  r=KErrNotSupported;
+	  break;
+	}
+  return r;
+}
+
+void DKeyboardPs2Soc::RxDfc(TAny* aPtr)
+{
+  TRawEvent e;
+  DKeyboardPs2Soc& k = *(DKeyboardPs2Soc*)aPtr;
+
+  while(k.iFifoCount>0) {
+	int keycode = k.FifoPop();
+	int dwn = (keycode & 0x80000000) ? 0 : 1;
+	__DEBUG_PRINT("DKeyboardPs2Soc::RxDfc %d %d", keycode, dwn);
+  
+	keycode &= ~(0x80000000);	
+	if (dwn) {
+	  __DEBUG_PRINT("kbd EKeyDown:%d",keycode);
+	  e.Set(TRawEvent::EKeyDown,KConvertCode[keycode],0);
+	}
+	else {
+	  __DEBUG_PRINT("kbd EKeyUp:%d",keycode);
+	  e.Set(TRawEvent::EKeyUp,KConvertCode[keycode],0);
+	}
+	Kern::AddEvent(e);
+  }
+}
+
+DECLARE_STANDARD_EXTENSION()
+{
+  TInt r=KErrNoMemory;
+  DKeyboardPs2Soc* pK=new DKeyboardPs2Soc;
+  if (pK)
+	r=pK->Create();
+  __KTRACE_OPT(KEXTENSION,__DEBUG_PRINT("Returns %d",r));
+  return r;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/keyboard/syborg_keyboard.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,337 @@
+/*
+* 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: Minimalistic keyboard driver
+*
+*/
+
+#ifndef _SYBORG_KEYBOARD_H
+#define _SYBORG_KEYBOARD_H
+
+#include <kpower.h>
+#include <e32keys.h>
+#include <system.h>
+
+#ifdef DEBUG
+#define __DEBUG_PRINT(format...)    Kern::Printf(format)
+#else
+#define __DEBUG_PRINT(format...)    __KTRACE_OPT(KBOOT,Kern::Printf(format))
+#endif
+
+#define FIFO_SIZE 16
+
+_LIT(KLitKeyboard,"Syborg Keyboard");
+const TKeyboard	KConfigKeyboardType = EKeyboard_Full;
+const TInt KConfigKeyboardDeviceKeys = 0;
+const TInt KConfigKeyboardAppsKeys = 0;
+
+class DKeyboardPs2Soc : public DPowerHandler
+{
+public:
+  DKeyboardPs2Soc();
+  TInt Create();
+  TInt HalFunction(TInt aFunction, TAny* a1, TAny* a2);
+  void KeyboardInfo(TKeyboardInfoV01& aInfo);
+  void KeyboardOn();
+  void KeyboardOff();
+  void PowerUp();
+  void PowerDown(TPowerState);
+  void HandleMsg(TMessageBase* aMsg);
+
+private:
+  static void Isr(TAny* aPtr);
+  static void RxDfc(TAny* aPtr);
+
+ private:
+  TInt FifoPop(void);
+  void FifoPush(TInt val);
+
+  TInt iKeyFifo[FIFO_SIZE];
+  TInt iFifoPos;
+  TInt iFifoCount;
+
+private:
+  TDfc iRxDfc;
+  TBool iKeyboardOn;
+
+public:
+  TDfcQue* iDfcQ;
+  TMessageQue iMsgQ;	
+
+  enum {
+    KBD_ID          = 0,
+    KBD_DATA        = 1,
+    KBD_FIFO_COUNT  = 2,
+    KBD_INT_ENABLE  = 3
+  };
+};
+
+const TUint8 KConvertCode[] =
+  {
+	/*00*/ EStdKeyNull,
+	/*01*/ EStdKeyEscape,
+	/*02*/ '1',
+	/*03*/ '2',
+	/*04*/ '3',
+	/*05*/ '4',
+	/*06*/ '5',
+	/*07*/ '6',
+	/*08*/ '7',
+	/*09*/ '8',
+	/*0a*/ '9',
+	/*0b*/ '0',
+	/*0c*/ EStdKeyMinus,
+	/*0d*/ EStdKeyEquals, 
+	/*0e*/ EStdKeyBackspace,
+	/*0f*/ EStdKeyTab,
+	
+	/*10*/ 'Q',
+	/*11*/ 'W',
+	/*12*/ 'E',
+	/*13*/ 'R',
+	/*14*/ 'T',
+	/*15*/ 'Y',
+	/*16*/ 'U',
+	/*17*/ 'I',
+	/*18*/ 'O',
+	/*19*/ 'P',
+	/*1a*/ EStdKeySquareBracketLeft,
+	/*1b*/ EStdKeySquareBracketRight,
+	/*1c*/ EStdKeyEnter,
+	/*1d*/ EStdKeyLeftCtrl,
+	/*1e*/ 'A',
+	/*1f*/ 'S',
+	
+	/*20*/ 'D',
+	/*21*/ 'F',
+	/*22*/ 'G',
+	/*23*/ 'H',
+	/*24*/ 'J',
+	/*25*/ 'K',
+	/*26*/ 'L',
+	/*27*/ EStdKeySemiColon,
+	/*28*/ EStdKeySingleQuote,
+	/*29*/ EStdKeyNull,
+	/*2a*/ EStdKeyLeftShift,
+	/*2b*/ EStdKeyHash,
+	/*2c*/ 'Z',
+	/*2d*/ 'X',
+	/*2e*/ 'C',
+	/*2f*/ 'V',
+	
+	/*30*/ 'B',
+	/*31*/ 'N',
+	/*32*/ 'M',
+	/*33*/ EStdKeyComma,
+	/*34*/ EStdKeyFullStop,
+	/*35*/ EStdKeyForwardSlash,
+	/*36*/ EStdKeyRightShift,
+	/*37*/ EStdKeyPrintScreen,
+	/*38*/ EStdKeyLeftAlt,
+	/*39*/ EStdKeySpace,
+	/*3a*/ EStdKeyCapsLock,
+	/*3b*/ EStdKeyMenu,    // EStdKeyF1,
+	/*3c*/ EStdKeyF2,
+	/*3d*/ EStdKeyF3,
+	/*3e*/ EStdKeyF4,
+	/*3f*/ EStdKeyF5,
+	
+	/*40*/ EStdKeyF6,
+	/*41*/ EStdKeyF7,
+	/*42*/ EStdKeyF8,
+	/*43*/ EStdKeyF9,
+	/*44*/ EStdKeyF10,
+	/*45*/ EStdKeyNull,
+	/*46*/ EStdKeyScrollLock,
+	/*47*/ EStdKeyHome,
+	/*48*/ EStdKeyUpArrow,
+	/*49*/ EStdKeyPageUp,
+	/*4a*/ EStdKeyNull,
+	/*4b*/ EStdKeyLeftArrow,
+	/*4c*/ EStdKeyNull,
+	/*4d*/ EStdKeyRightArrow,
+	/*4e*/ EStdKeyNull,
+	/*4f*/ EStdKeyNull,
+	
+	/*50*/ EStdKeyDownArrow,
+	/*51*/ EStdKeyPageDown,
+	/*52*/ EStdKeyInsert,
+	/*53*/ EStdKeyDelete,
+	/*54*/ EStdKeyNull,
+	/*55*/ EStdKeyNull,
+	/*56*/ EStdKeyBackSlash,
+	/*57*/ EStdKeyF11,
+	/*58*/ EStdKeyF12,
+	/*59*/ EStdKeyNull,
+	/*5a*/ EStdKeyNull,
+	/*5b*/ EStdKeyNull,
+	/*5c*/ EStdKeyNull,
+	/*5d*/ EStdKeyNull,
+	/*5e*/ EStdKeyNull,
+	/*5f*/ EStdKeyNull,
+
+	/*60*/ EStdKeyNull,
+	/*61*/ EStdKeyNull,
+	/*62*/ EStdKeyNull,
+	/*63*/ EStdKeyNull,
+	/*64*/ EStdKeyNull,
+	/*65*/ EStdKeyNull,
+	/*66*/ EStdKeyNull,
+	/*67*/ EStdKeyNull,
+	/*68*/ EStdKeyNull,
+	/*69*/ EStdKeyNull,
+	/*6a*/ EStdKeyNull,
+	/*6b*/ EStdKeyNull,
+	/*6c*/ EStdKeyNull,
+	/*6d*/ EStdKeyNull,
+	/*6e*/ EStdKeyNull,
+	/*6f*/ EStdKeyNull,
+	
+	/*70*/ EStdKeyNull,
+	/*71*/ EStdKeyNull,
+	/*72*/ EStdKeyNull,
+	/*73*/ EStdKeyNull,
+	/*74*/ EStdKeyNull,
+	/*75*/ EStdKeyNull,
+	/*76*/ EStdKeyNull,
+	/*77*/ EStdKeyNull,
+	/*78*/ EStdKeyNull,
+	/*79*/ EStdKeyNull,
+	/*7a*/ EStdKeyNull,
+	/*7b*/ EStdKeyNull,
+	/*7c*/ EStdKeyNull,
+	/*7d*/ EStdKeyNull,
+	/*7e*/ EStdKeyNull,
+	/*7f*/ EStdKeyNull,
+	
+	/*80*/ EStdKeyNull,
+	/*81*/ EStdKeyNull,
+	/*82*/ EStdKeyNull,
+	/*83*/ EStdKeyNull,
+	/*84*/ EStdKeyNull,
+	/*85*/ EStdKeyNull,
+	/*86*/ EStdKeyNull,
+	/*87*/ EStdKeyNull,
+	/*88*/ EStdKeyNull,
+	/*89*/ EStdKeyNull,
+	/*8a*/ EStdKeyNull,
+	/*8b*/ EStdKeyNull,
+	/*8c*/ EStdKeyNull,
+	/*8d*/ EStdKeyNull,
+	/*8e*/ EStdKeyNull,
+	/*8f*/ EStdKeyNull,
+	
+	/*90*/ EStdKeyNull,
+	/*91*/ EStdKeyNull,
+	/*92*/ EStdKeyNull,
+	/*93*/ EStdKeyNull,
+	/*94*/ EStdKeyNull,
+	/*95*/ EStdKeyNull,
+	/*96*/ EStdKeyNull,
+	/*97*/ EStdKeyNull,
+	/*98*/ EStdKeyNull,
+	/*99*/ EStdKeyNull,
+	/*9a*/ EStdKeyNull,
+	/*9b*/ EStdKeyNull,
+	/*9c*/ EStdKeyNull,
+	/*9d*/ EStdKeyNull,
+	/*9e*/ EStdKeyNull,
+	/*9f*/ EStdKeyNull,
+
+  	/*a0*/ EStdKeyNull,
+	/*a1*/ EStdKeyNull,
+	/*a2*/ EStdKeyNull,
+	/*a3*/ EStdKeyNull,
+	/*a4*/ EStdKeyNull,
+	/*a5*/ EStdKeyNull,
+	/*a6*/ EStdKeyNull,
+	/*a7*/ EStdKeyNull,
+	/*a8*/ EStdKeyNull,
+	/*a9*/ EStdKeyNull,
+	/*aa*/ EStdKeyNull,
+	/*ab*/ EStdKeyNull,
+	/*ac*/ EStdKeyNull,
+	/*ad*/ EStdKeyNull,
+	/*ae*/ EStdKeyNull,
+	/*af*/ EStdKeyNull,
+
+  	/*b0*/ EStdKeyNull,
+	/*b1*/ EStdKeyNull,
+	/*b2*/ EStdKeyNull,
+	/*b3*/ EStdKeyNull,
+	/*b4*/ EStdKeyNull,
+	/*b5*/ EStdKeyNull,
+	/*b6*/ EStdKeyNull,
+	/*b7*/ EStdKeyNull,
+	/*b8*/ EStdKeyNull,
+	/*b9*/ EStdKeyNull,
+	/*ba*/ EStdKeyNull,
+	/*bb*/ EStdKeyNull,
+	/*bc*/ EStdKeyNull,
+	/*bd*/ EStdKeyNull,
+	/*be*/ EStdKeyNull,
+	/*bf*/ EStdKeyNull,
+
+  	/*c0*/ EStdKeyNull,
+	/*c1*/ EStdKeyNull,
+	/*c2*/ EStdKeyNull,
+	/*c3*/ EStdKeyNull,
+	/*c4*/ EStdKeyNull,
+	/*c5*/ EStdKeyNull,
+	/*c6*/ EStdKeyNull,
+	/*c7*/ EStdKeyNull,
+	/*c8*/ EStdKeyNull,
+	/*c9*/ EStdKeyNull,
+	/*ca*/ EStdKeyNull,
+	/*cb*/ EStdKeyNull,
+	/*cc*/ EStdKeyNull,
+	/*cd*/ EStdKeyNull,
+	/*ce*/ EStdKeyNull,
+	/*cf*/ EStdKeyNull,
+
+  	/*d0*/ EStdKeyNull,
+	/*d1*/ EStdKeyNull,
+	/*d2*/ EStdKeyNull,
+	/*d3*/ EStdKeyNull,
+	/*d4*/ EStdKeyNull,
+	/*d5*/ EStdKeyNull,
+	/*d6*/ EStdKeyNull,
+	/*d7*/ EStdKeyNull,
+	/*d8*/ EStdKeyNull,
+	/*d9*/ EStdKeyNull,
+	/*da*/ EStdKeyNull,
+	/*db*/ EStdKeyNull,
+	/*dc*/ EStdKeyNull,
+	/*dd*/ EStdKeyNull,
+	/*de*/ EStdKeyNull,
+	/*df*/ EStdKeyNull,
+
+	/*e0*/ EStdKeyNull,
+	/*e1*/ EStdKeyNull,
+	/*e2*/ EStdKeyNull,
+	/*e3*/ EStdKeyNull,
+	/*e4*/ EStdKeyNull,
+	/*e5*/ EStdKeyNull,
+	/*e6*/ EStdKeyNull,
+	/*e7*/ EStdKeyNull,
+	/*e8*/ EStdKeyNull,
+	/*e9*/ EStdKeyNull,
+	/*ea*/ EStdKeyNull,
+	/*eb*/ EStdKeyNull,
+	/*ec*/ EStdKeyNull,
+	/*ed*/ EStdKeyNull,
+	/*ee*/ EStdKeyNull,
+	/*ef*/ EStdKeyNull,
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/keymap/keymap.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,1952 @@
+/*
+* 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: This is for a UK Keyboard
+*
+*/
+
+#include <k32keys.h>
+
+//#define US_KEYBOARD
+
+// the "array" parameter must be a true array and not a pointer
+#define ARRAY_LENGTH(array) (sizeof(array)/sizeof(array[0]))
+
+#define TABLE_ENTRY_ANOTHER_CTRL_DIGIT					\
+	{  													\
+		{												\
+		EModifierKeyUp|EModifierFunc,	                \
+		0												\
+		},												\
+		{												\
+		EKeyNull,										\
+		EAnyDigitGivenRadix								\
+		},												\
+		{												\
+		EStateCtrlDigits,								\
+		EAddOnCtrlDigit,								\
+		0												\
+		}												\
+	}
+
+// This table is searched for a match if a match has not been
+// found in the current state's table
+
+LOCAL_D const SFuncTableEntry defaultTable[]=
+	{
+		{ // prevent key up events generating keycodes
+			{
+			EModifierKeyUp,
+			EModifierKeyUp
+			},
+			{
+			EKeyNull,
+			EAnyKey
+			},
+			{
+			EStateUnchanged,
+			EDoNothing,
+			0
+			}
+		},
+		{ // prevent any modifer key from changing state
+			{
+			0,
+			0
+			},
+			{
+			EKeyNull,
+			EAnyModifierKey
+			},
+			{
+			EStateUnchanged,
+			EDoNothing,
+			0
+			}
+		},
+		{ // filter out any unprocessed codes???
+			{
+			0,
+			0
+			},
+			{
+			EKeyNull,
+			EAnyKey
+			},
+			{
+			EStateNormal,
+			EDoNothing,
+			0
+			}
+		}
+	};
+
+// The table indicating which keys change which modifiers;
+// the state field in this table is ignored
+LOCAL_D const SFuncTableEntry modifierTable[]=
+	{
+        {
+			{
+			EModifierKeyUp,
+			0
+			},
+			{
+			EKeyCapsLock,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			EToggleModifier,
+			EModifierCapsLock
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			0
+			},
+			{
+			EKeyNumLock,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			EToggleModifier,
+			EModifierNumLock
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			0
+			},
+			{
+			EKeyScrollLock,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			EToggleModifier,
+			EModifierScrollLock
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			0
+			},
+			{
+			EKeyLeftAlt,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			ETurnOnModifier,
+			EModifierAlt|EModifierLeftAlt
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			EModifierKeyUp
+			},
+			{
+			EKeyLeftAlt,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			ETurnOffModifier,
+			EModifierLeftAlt
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			0
+			},
+			{
+			EKeyLeftFunc,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			ETurnOnModifier,
+			EModifierFunc|EModifierLeftFunc
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			EModifierKeyUp
+			},
+			{
+			EKeyLeftFunc,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			ETurnOffModifier,
+			EModifierLeftFunc
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			0
+			},
+			{
+			EKeyLeftShift,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			ETurnOnModifier,
+			EModifierShift|EModifierLeftShift
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			EModifierKeyUp
+			},
+			{
+			EKeyLeftShift,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			ETurnOffModifier,
+			EModifierLeftShift
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			0
+			},
+			{
+			EKeyLeftCtrl,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			ETurnOnModifier,
+			EModifierCtrl|EModifierLeftCtrl
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			EModifierKeyUp
+			},
+			{
+			EKeyLeftCtrl,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			ETurnOffModifier,
+			EModifierLeftCtrl
+			}
+        },
+		{
+			{
+			EModifierKeyUp,
+			0
+			},
+			{
+			EKeyRightAlt,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			ETurnOnModifier,
+			EModifierAlt|EModifierRightAlt
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			EModifierKeyUp
+			},
+			{
+			EKeyRightAlt,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			ETurnOffModifier,
+			EModifierRightAlt
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			0
+			},
+			{
+			EKeyRightFunc,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			ETurnOnModifier,
+			EModifierFunc|EModifierRightFunc
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			EModifierKeyUp
+			},
+			{
+			EKeyRightFunc,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			ETurnOffModifier,
+			EModifierRightFunc
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			0
+			},
+			{
+			EKeyRightShift,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			ETurnOnModifier,
+			EModifierShift|EModifierRightShift
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			EModifierKeyUp
+			},
+			{
+			EKeyRightShift,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			ETurnOffModifier,
+			EModifierRightShift
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			0
+			},
+			{
+			EKeyRightCtrl,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			ETurnOnModifier,
+			EModifierCtrl|EModifierRightCtrl
+			}
+		},
+		{
+			{
+			EModifierKeyUp,
+			EModifierKeyUp
+			},
+			{
+			EKeyRightCtrl,
+			EMatchKey
+			},
+			{
+			EStateUnchanged,
+			ETurnOffModifier,
+			EModifierRightCtrl
+			}
+		}
+	};
+
+// table0 to table12 are the tables corresponding to states
+// 0 to 12 respectively
+
+//LOCAL_D const SFuncTableEntry table0[]=
+//	{
+//	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
+//	};
+
+LOCAL_D const SFuncTableEntry table1[]=
+	{
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'e',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcAe
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'c',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcCcedilla
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			's',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1EsTset
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'o',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcOslash
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'd',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcThorn
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			't',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcSoftTh
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'l',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LeftChevron
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'r',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1RightChevron
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'x',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1InvExclam
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'q',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1InvQuest
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'a',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcAo
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'p',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1Pound
+			}
+		},
+	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
+	};
+
+LOCAL_D const SFuncTableEntry table2[]=
+	{
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'a',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcAumlaut
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'e',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcEumlaut
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'i',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcIumlaut
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'o',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcOumlaut
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'u',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcUumlaut
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'y',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcYumlaut
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			' ',
+			EMatchKey
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1SpaceUmlaut
+			}
+		},
+	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
+	};
+
+LOCAL_D const SFuncTableEntry table3[]=
+	{
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'a',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcAgrave
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'e',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcEgrave
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'i',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcIgrave
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'o',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcOgrave
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'u',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcUgrave
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			' ',
+			EMatchKey
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1SpaceGrave
+			}
+		},
+	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
+	};
+
+LOCAL_D const SFuncTableEntry table4[]=
+	{
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'a',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcAacute
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'e',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcEacute
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'i',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcIacute
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'o',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcOacute
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'u',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcUacute
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'y',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcYacute
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			' ',
+			EMatchKey
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcSpaceAcute
+			}
+		},
+	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
+	};
+
+LOCAL_D const SFuncTableEntry table5[]=
+	{
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'a',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcAtilde
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'n',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcNtilde
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'o',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcOtilde
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			' ',
+			EMatchKey
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcSpaceTilde
+			}
+		},
+	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
+	};
+
+LOCAL_D const SFuncTableEntry table6[]=
+	{
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'a',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcAcirc
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'e',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcEcirc
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'i',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcIcirc
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'o',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcOcirc
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			'u',
+			EMatchKeyCaseInsens
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcUcirc
+			}
+		},
+		{
+			{
+			EModifierFunc|EModifierKeyUp,
+			0
+			},
+			{
+			' ',
+			EMatchKey
+			},
+			{
+			EStateNormal,
+			EPassSpecialKeyThru,
+			ELatin1LcSpaceCirc
+			}
+		},
+	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
+	};
+
+//LOCAL_D const SFuncTableEntry table7[]=
+//	{
+//	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
+//	};
+
+//LOCAL_D const SFuncTableEntry table8[]=
+//	{
+//	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
+//	};
+
+//LOCAL_D const SFuncTableEntry table9[]=
+//	{
+//	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
+//	};
+
+LOCAL_D const SFuncTableEntry table10[]=
+	{
+		{ // filter out up key strokes
+			{
+			EModifierKeyUp,
+			EModifierKeyUp
+			},
+			{
+			EKeyNull,
+			EAnyKey
+			},
+			{
+			EStateUnchanged,
+			EDoNothing,
+			0
+			}
+		},
+		{ // check for ctrl-number presses
+			{
+			EModifierCtrl|EModifierFunc|EModifierKeyUp,
+			EModifierCtrl
+			},
+			{
+			EKeyNull,
+			EAnyDecimalDigit
+			},
+			{
+			EStateDerivedFromDigitEntered,
+			EAddOnCtrlDigit,
+			0
+			}
+		},
+		{ // pass thru any keys which can't be state control keys
+			{
+			EModifierFunc,
+			0,
+			},
+			{
+			EKeyNull,
+			EAnyKey
+			},
+			{
+			EStateUnchanged,
+			EPassKeyThru,
+			0
+			}
+		},
+		{ // pass thru any keys which can't be state control keys
+			{
+			EModifierCtrl,
+			EModifierCtrl,
+			},
+			{
+			EKeyNull,
+			EAnyKey
+			},
+			{
+			EStateUnchanged,
+			EPassKeyThru,
+			0
+			}
+		},
+		{ // check for FN-q
+			{
+			EModifierCtrl|EModifierFunc|EModifierKeyUp,
+			EModifierFunc
+			},
+			{
+			'q',
+			EMatchKeyCaseInsens
+			},
+			{
+			1,
+			EDoNothing,
+			0
+			}
+		},
+		{ // check for FN-z
+			{
+			EModifierCtrl|EModifierFunc|EModifierKeyUp,
+			EModifierFunc
+			},
+			{
+			'z',
+			EMatchKeyCaseInsens
+			},
+			{
+			2,
+			EDoNothing,
+			0
+			}
+		},
+		{ // check for FN-x
+			{
+			EModifierCtrl|EModifierFunc|EModifierKeyUp,
+			EModifierFunc
+			},
+			{
+			'x',
+			EMatchKeyCaseInsens
+			},
+			{
+			3,
+			EDoNothing,
+			0
+			}
+		},
+		{ // check for FN-c
+			{
+			EModifierCtrl|EModifierFunc|EModifierKeyUp,
+			EModifierFunc
+			},
+			{
+			'c',
+			EMatchKeyCaseInsens
+			},
+			{
+			4,
+			EDoNothing,
+			0
+			}
+		},
+		{ // check for FN-v
+			{
+			EModifierCtrl|EModifierFunc|EModifierKeyUp,
+			EModifierFunc
+			},
+			{
+			'v',
+			EMatchKeyCaseInsens
+			},
+			{
+			5,
+			EDoNothing,
+			0
+			}
+		},
+		{ // check for FN-b
+			{
+			EModifierCtrl|EModifierFunc|EModifierKeyUp,
+			EModifierFunc
+			},
+			{
+			'b',
+			EMatchKeyCaseInsens
+			},
+			{
+			6,
+			EDoNothing,
+			0
+			}
+		},
+		{ // pass thru any non-processed keys
+			{
+			0,
+			0
+			},
+			{
+			EKeyNull,
+			EAnyKey
+			},
+			{
+			EStateUnchanged,
+			EPassKeyThru,
+			0
+			}
+		}
+	};
+
+//LOCAL_D const SFuncTableEntry table11[]=
+//	{
+//	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
+//	};
+
+LOCAL_D const SFuncTableEntry table12[]=
+	{  
+		{
+			{
+			EModifierKeyUp,
+			EModifierKeyUp
+			},
+			{
+			EKeyLeftCtrl,
+			EMatchLeftOrRight
+			},
+			{
+			EStateNormal,
+			EPassCtrlDigitsThru,
+			0
+			}
+		},
+	TABLE_ENTRY_ANOTHER_CTRL_DIGIT
+	};
+
+LOCAL_D const SFuncTable genFuncTables[]=
+	{
+		{
+		0,
+		NULL
+		},
+		{
+		ARRAY_LENGTH(table1),
+		&table1[0]
+		},
+		{
+		ARRAY_LENGTH(table2),
+		&table2[0]
+		},
+		{
+		ARRAY_LENGTH(table3),
+		&table3[0]
+		},
+		{
+		ARRAY_LENGTH(table4),
+		&table4[0]
+		},
+		{
+		ARRAY_LENGTH(table5),
+		&table5[0]
+		},
+		{
+		ARRAY_LENGTH(table6),
+		&table6[0]
+		},
+		{
+		0,
+		NULL
+		},
+		{
+		0,
+		NULL
+		},
+		{
+		0,
+		NULL
+		},
+		{
+		ARRAY_LENGTH(table10),
+		&table10[0]
+		},
+		{
+		0,
+		NULL
+		},
+		{
+		ARRAY_LENGTH(table12),
+		&table12[0]
+		}
+	};
+
+LOCAL_D const SFuncTables FuncTables=
+	{
+		{
+		ARRAY_LENGTH(defaultTable),
+		&defaultTable[0]
+		},
+		{
+		ARRAY_LENGTH(modifierTable),
+		&modifierTable[0]
+		},
+	ARRAY_LENGTH(genFuncTables),
+	&genFuncTables[0]
+	};
+
+LOCAL_D const SScanCodeBlock scanCodeBlock_unmodifiable[]=
+	{
+	{EStdKeyLeftShift, EStdKeyScrollLock}
+	};
+
+LOCAL_D const TUint16 convKeyCodes_unmodifiable[]=
+	{
+	EKeyLeftShift,
+	EKeyRightShift,
+	EKeyLeftAlt,
+	EKeyRightAlt,
+	EKeyLeftCtrl,
+	EKeyRightCtrl,
+	EKeyLeftFunc,
+	EKeyRightFunc,
+	EKeyCapsLock,
+	EKeyNumLock,
+	EKeyScrollLock
+	};
+
+// base: this table traps all of the keyboard's scanCodes except those in convKeyCodes_unmodifiable
+LOCAL_D const SScanCodeBlock scanCodeBlock_base[]=
+	{
+	{EStdKeyNull, EStdKeyDownArrow},
+	{'0', '9'},
+	{'A', 'Z'},
+	{EStdKeyF1, EStdKeyDictaphoneRecord},
+	};
+
+LOCAL_D const TUint16 convKeyCodes_base[]=
+	{
+	EKeyNull,
+	EKeyBackspace,
+	EKeyTab,
+	EKeyEnter,
+	EKeyEscape,
+	' ',
+	EKeyPrintScreen,
+	EKeyPause,
+	EKeyHome,
+	EKeyEnd,
+	EKeyPageUp,
+	EKeyPageDown,
+	EKeyInsert,
+	EKeyDelete,
+	EKeyLeftArrow,
+	EKeyRightArrow,
+	EKeyUpArrow,
+	EKeyDownArrow,
+	'0',
+	'1',
+	'2',
+	'3',
+	'4',
+	'5',
+	'6',
+	'7',
+	'8',
+	'9',
+	'a',
+	'b',
+	'c',
+	'd',
+	'e',
+	'f',
+	'g',
+	'h',
+	'i',
+	'j',
+	'k',
+	'l',
+	'm',
+	'n',
+	'o',
+	'p',
+	'q',
+	'r',
+	's',
+	't',
+	'u',
+	'v',
+	'w',
+	'x',
+	'y',
+	'z',
+	EKeyF1,
+	EKeyF2,
+	EKeyF3,
+	EKeyF4,
+	EKeyF5,
+	EKeyF6,
+	EKeyF7,
+	EKeyF8,
+	EKeyF9,
+	EKeyF10,
+	EKeyF11,
+	EKeyF12,
+	EKeyF13,
+	EKeyF14,
+	EKeyF15,
+	EKeyF16,
+	EKeyF17,
+	EKeyF18,
+	EKeyF19,
+	EKeyF20,
+	EKeyF21,
+	EKeyF22,
+	EKeyF23,
+	EKeyF24,
+	'`',
+	',',
+	'.',
+	'/',
+	'\\',
+	';',
+	'\'',
+#ifndef US_KEYBOARD
+	'#',
+#else
+	'\\',
+#endif
+	'[',
+	']',
+	'-',
+	'=',
+	'/',
+	'*',
+	'-',
+	'+',
+	EKeyEnter,
+	EKeyEnd,
+	EKeyDownArrow,
+	EKeyPageDown,
+	EKeyLeftArrow,
+	EKeyNull, // numeric keypad '5'
+	EKeyRightArrow,
+	EKeyHome,
+	EKeyUpArrow,
+	EKeyPageUp,
+	EKeyInsert,
+	EKeyDelete,
+    EKeyMenu,
+    EKeyBacklightOn,
+    EKeyBacklightOff,
+    EKeyBacklightToggle,
+    EKeyIncContrast,
+    EKeyDecContrast,
+    EKeySliderDown,
+    EKeySliderUp,
+    EKeyDictaphonePlay,
+    EKeyDictaphoneStop,
+    EKeyDictaphoneRecord,
+	};
+
+// caps-lock: this table traps those scanCodes which are affected by caps-lock
+LOCAL_D const SScanCodeBlock scanCodeBlock_capsLock[]=
+	{
+	{'A', 'Z'}
+	};
+
+LOCAL_D const TUint16 convKeyCodes_capsLock[]=
+	{
+	'A',
+	'B',
+	'C',
+	'D',
+	'E',
+	'F',
+	'G',
+	'H',
+	'I',
+	'J',
+	'K',
+	'L',
+	'M',
+	'N',
+	'O',
+	'P',
+	'Q',
+	'R',
+	'S',
+	'T',
+	'U',
+	'V',
+	'W',
+	'X',
+	'Y',
+	'Z'
+	};
+
+// shift: this table traps those scanCodes which are affected
+// by shift EXCEPT for those scanCodes affected by caps-lock
+LOCAL_D const SScanCodeBlock scanCodeBlock_shift[]=
+	{
+	{'0', '9'},
+	{EStdKeyXXX, EStdKeyEquals},
+	};
+
+LOCAL_D const TUint16 convKeyCodes_shift[]=
+	{
+	')',
+	'!',
+	'"',
+	ELatin1Pound,
+	'$',
+	'%',
+	'^',
+	'&',
+	'*',
+	'(',
+	ELatin1LogicNot,
+	'<',
+	'>',
+	'?',
+	'|',
+	':',
+	'@',
+	'~',
+	'{',
+	'}',
+	'_',
+	'+'
+	};
+
+// numlock: this table traps those scanCodes which are affected by numlock
+LOCAL_D const SScanCodeBlock scanCodeBlock_numLock[]=
+	{
+	{EStdKeyNkpForwardSlash, EStdKeyNkpFullStop}
+	};
+
+LOCAL_D const TUint16 convKeyCodes_numLock[]=
+	{
+	'/',
+	'*',
+	'-',
+	'+',
+	EKeyEnter,
+	'1',
+	'2',
+	'3',
+	'4',
+	'5',
+	'6',
+	'7',
+	'8',
+	'9',
+	'0',
+	'.'
+	};
+
+// func: this table traps those scanCodes which are affected
+// by func but not shift
+LOCAL_D const SScanCodeBlock scanCodeBlock_func[]=
+	{
+	{'0', '9'},
+	{'K', 'L'},
+	{'U', 'U'},
+	{'I', 'I'},
+	{'O', 'P'},
+	{EStdKeySingleQuote, EStdKeySingleQuote},
+	{EStdKeyLeftArrow, EStdKeyDownArrow},
+	{EStdKeyTab, EStdKeyTab},
+	{EStdKeyEscape, EStdKeyEscape},
+	{'M', 'M'},
+	{EStdKeyComma, EStdKeyFullStop},
+	{EStdKeySpace, EStdKeySpace},
+	{EStdKeyMenu, EStdKeyMenu},
+	};
+
+LOCAL_D const TUint16 convKeyCodes_func[]=
+	{
+	'}',
+	'_',
+	'#',
+	'\\',
+	'@',
+	'<',
+	'>',
+	'[',
+	']',
+	'{',
+	'~',
+	';',
+	'/',
+	'*',
+	'-',
+	'+',
+	':',
+	EKeyHome,
+	EKeyEnd,
+	EKeyPageUp,
+	EKeyPageDown,
+	EKeyCapsLock,
+	EKeyOff,
+	EKeyDecContrast,
+	EKeyHelp,
+	EKeyIncContrast,
+	EKeyBacklightToggle,
+	EKeyDial,
+	};
+
+// func: this table traps those scanCodes which are affected
+// by func and shift - lower case entries
+LOCAL_D const SScanCodeBlock scanCodeBlock_funcUnshifted[]=
+	{
+	{'E', 'E'},
+	};
+
+LOCAL_D const TUint16 convKeyCodes_funcUnshifted[]=
+	{
+	ELatin1LcEacute,
+	};
+
+// func: this table traps those scanCodes which are affected
+// by func and shift - upper case entries
+LOCAL_D const SScanCodeBlock scanCodeBlock_funcShifted[]=
+	{
+	{'E', 'E'},
+	};
+
+LOCAL_D const TUint16 convKeyCodes_funcShifted[]=
+	{
+	ELatin1UcEacute,
+	};
+
+// ctrl: this table traps those scanCodes which are affected by ctrl
+LOCAL_D const SScanCodeBlock scanCodeBlock_ctrl[]=
+	{
+// The space key gets handled else where, otherwise it gets
+// thrown away as a NULL key
+//	{EStdKeySpace, EStdKeySpace},
+
+	{'A', 'Z'}
+	};
+
+LOCAL_D const TUint16 convKeyCodes_ctrl[]=
+	{
+//	0,
+	1,
+	2,
+	3,
+	4,
+	5,
+	6,
+	7,
+	8,
+	9,
+	10,
+	11,
+	12,
+	13,
+	14,
+	15,
+	16,
+	17,
+	18,
+	19,
+	20,
+	21,
+	22,
+	23,
+	24,
+	25,
+	26
+	};
+
+LOCAL_D const SConvSubTable
+	convSubTable_unmodifiable=
+		{
+		&convKeyCodes_unmodifiable[0],
+			{
+			ARRAY_LENGTH(scanCodeBlock_unmodifiable),
+			&scanCodeBlock_unmodifiable[0]
+			}
+		},
+    convSubTable_base=
+		{
+		&convKeyCodes_base[0],
+			{
+			ARRAY_LENGTH(scanCodeBlock_base),
+			&scanCodeBlock_base[0]
+			}
+		},
+	convSubTable_capsLock=
+		{
+		&convKeyCodes_capsLock[0],
+			{
+			ARRAY_LENGTH(scanCodeBlock_capsLock),
+			&scanCodeBlock_capsLock[0]
+			}
+		},
+	convSubTable_shift=
+		{
+		&convKeyCodes_shift[0],
+			{
+			ARRAY_LENGTH(scanCodeBlock_shift),
+			&scanCodeBlock_shift[0]
+			}
+		},
+	convSubTable_numLock=
+		{
+		&convKeyCodes_numLock[0],
+			{
+			ARRAY_LENGTH(scanCodeBlock_numLock),
+			&scanCodeBlock_numLock[0]
+			}
+        },
+	convSubTable_func=
+		{
+		&convKeyCodes_func[0],
+			{
+			ARRAY_LENGTH(scanCodeBlock_func),
+			&scanCodeBlock_func[0]
+			}
+		},
+	convSubTable_funcUnshifted=
+		{
+		&convKeyCodes_funcUnshifted[0],
+			{
+			ARRAY_LENGTH(scanCodeBlock_funcUnshifted),
+			&scanCodeBlock_funcUnshifted[0]
+			}
+		},
+	convSubTable_funcShifted=
+		{
+		&convKeyCodes_funcShifted[0],
+			{
+			ARRAY_LENGTH(scanCodeBlock_funcShifted),
+			&scanCodeBlock_funcShifted[0]
+			}
+		},
+	convSubTable_ctrl=
+		{
+		&convKeyCodes_ctrl[0],
+			{
+			ARRAY_LENGTH(scanCodeBlock_ctrl),
+			&scanCodeBlock_ctrl[0]
+			}
+		};
+
+// Some modifiers, e.g. shift, may required more than one table (other than "base")
+// to be searched; therefore arrays of tables are required
+LOCAL_D const SConvSubTable
+	* const convSubTableArray_unmodifiable[]={&convSubTable_unmodifiable},
+	* const convSubTableArray_base[]={&convSubTable_base},
+	* const convSubTableArray_capsLock[]={&convSubTable_capsLock},
+	* const convSubTableArray_shift[]={&convSubTable_capsLock, &convSubTable_shift},
+	* const convSubTableArray_capsLockShift[]={&convSubTable_shift},
+	* const convSubTableArray_numLock[]={&convSubTable_numLock},
+	* const convSubTableArray_func[]={&convSubTable_func,&convSubTable_funcUnshifted},
+	* const convSubTableArray_funcShift[]={&convSubTable_func,&convSubTable_funcShifted},
+	* const convSubTableArray_ctrl[]={&convSubTable_ctrl};
+
+// The order of these nodes is VITAL, as the scanCode/modifiers are
+// searched for a match in this order
+LOCAL_D const SConvTableNode convTableNodes[]=
+	{
+		{
+			{
+			0,
+			0
+			},
+		ARRAY_LENGTH(convSubTableArray_unmodifiable),
+		&convSubTableArray_unmodifiable[0]
+		},
+		{
+			{
+			EModifierCtrl,
+			EModifierCtrl
+			},
+		ARRAY_LENGTH(convSubTableArray_ctrl),
+		&convSubTableArray_ctrl[0]
+		},
+		{
+			{
+			EModifierNumLock,
+			EModifierNumLock
+			},
+		ARRAY_LENGTH(convSubTableArray_numLock),
+		&convSubTableArray_numLock[0]
+		},
+		{
+			{
+			EModifierFunc|EModifierShift|EModifierCapsLock,
+			EModifierFunc
+			},
+		ARRAY_LENGTH(convSubTableArray_func),
+		&convSubTableArray_func[0]
+		},
+		{
+			{
+			EModifierFunc|EModifierShift|EModifierCapsLock,
+			EModifierFunc|EModifierShift|EModifierCapsLock
+			},
+		ARRAY_LENGTH(convSubTableArray_func),
+		&convSubTableArray_func[0]
+		},
+		{
+			{
+			EModifierFunc|EModifierShift|EModifierCapsLock,
+			EModifierFunc|EModifierShift
+			},
+		ARRAY_LENGTH(convSubTableArray_funcShift),
+		&convSubTableArray_funcShift[0]
+		},
+		{
+			{
+			EModifierFunc|EModifierShift|EModifierCapsLock,
+			EModifierFunc|EModifierCapsLock
+			},
+		ARRAY_LENGTH(convSubTableArray_funcShift),
+		&convSubTableArray_funcShift[0]
+		},
+		{
+			{
+			EModifierCapsLock|EModifierShift,
+			EModifierCapsLock
+			},
+		ARRAY_LENGTH(convSubTableArray_capsLock),
+		&convSubTableArray_capsLock[0]
+		},
+		{
+			{
+			EModifierShift|EModifierCapsLock,
+			EModifierShift
+			},
+		ARRAY_LENGTH(convSubTableArray_shift),
+		&convSubTableArray_shift[0]
+		},
+		{
+			{
+			EModifierCapsLock|EModifierShift,
+			EModifierCapsLock|EModifierShift
+			},
+		ARRAY_LENGTH(convSubTableArray_capsLockShift),
+		&convSubTableArray_capsLockShift[0]
+		},
+		{
+			{
+			0,
+			0
+			},
+		ARRAY_LENGTH(convSubTableArray_base),
+		&convSubTableArray_base[0]
+		}
+	};
+
+// The top-level exported data structure of all the conversion tables
+LOCAL_D const SConvTable ConvTable=
+	{
+	ARRAY_LENGTH(convTableNodes),
+	&convTableNodes[0]
+	};
+
+// The list of scan-codes on the numeric keypad
+LOCAL_D const SScanCodeBlock keypadScanCodeBlockArray[]=
+	{
+	{EStdKeyNumLock, EStdKeyNumLock},
+	{EStdKeyNkpForwardSlash, EStdKeyNkpFullStop}
+	};
+
+LOCAL_D const SScanCodeBlockList ConvTableKeypadScanCodes=
+	{
+	ARRAY_LENGTH(keypadScanCodeBlockArray),
+	&keypadScanCodeBlockArray[0]
+	};
+
+// The list of non-autorepeating key-codes
+LOCAL_D const TUint16 nonAutorepKeyCodeArray[]=
+	{
+	EKeyEscape,
+	EKeyPrintScreen,
+	EKeyPause,
+	EKeyInsert,
+	EKeyLeftShift,
+	EKeyRightShift,
+	EKeyLeftAlt,
+	EKeyRightAlt,
+	EKeyLeftCtrl,
+	EKeyRightCtrl,
+	EKeyLeftFunc,
+	EKeyRightFunc,
+	EKeyCapsLock,
+	EKeyNumLock,
+	EKeyScrollLock,
+    EKeyMenu,
+    EKeyDictaphonePlay,
+    EKeyDictaphoneStop,
+    EKeyDictaphoneRecord
+	};
+
+LOCAL_D const SKeyCodeList ConvTableNonAutorepKeyCodes=
+	{
+	ARRAY_LENGTH(nonAutorepKeyCodeArray),
+	&nonAutorepKeyCodeArray[0]
+	};
+
+EXPORT_C void KeyDataSettings(TRadix &aRadix,TCtrlDigitsTermination &aCtrlDigitsTermination,TInt &aDefaultCtrlDigitsMaxCount,
+							  TInt &aMaximumCtrlDigitsMaxCount)
+	{
+	aRadix=EDecimal;
+	aCtrlDigitsTermination=ETerminationByCtrlUp;
+	aDefaultCtrlDigitsMaxCount=3;
+	aMaximumCtrlDigitsMaxCount=10;
+	}
+
+EXPORT_C void KeyDataFuncTable(SFuncTables &aFuncTables)
+	{
+	aFuncTables=FuncTables;
+	}
+
+EXPORT_C void KeyDataConvTable(SConvTable &aConvTable, TUint &aConvTableFirstScanCode,TUint &aConvTableLastScanCode,
+							 SScanCodeBlockList &aKeypadScanCode,SKeyCodeList &aNonAutorepKeyCodes)
+	{
+	aConvTable=ConvTable;
+	aConvTableFirstScanCode=scanCodeBlock_base[0].firstScanCode;
+	aConvTableLastScanCode=scanCodeBlock_base[ARRAY_LENGTH(scanCodeBlock_base)-1].lastScanCode;
+	aKeypadScanCode=ConvTableKeypadScanCodes;
+	aNonAutorepKeyCodes=ConvTableNonAutorepKeyCodes;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/keymap/keymap.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,38 @@
+/*
+* 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:
+*
+*/
+
+#include <variant.mmh>
+
+TARGET			VariantTarget(ekdata,dll)
+TARGETTYPE		dll
+LINKAS			ekdata.dll
+
+SYSTEMINCLUDE	\epoc32\include
+
+SOURCE			keymap.cpp
+
+LIBRARY			euser.lib
+
+DEFFILE			..\..\e32\~\ekdata.def
+
+NOSTRICTDEF
+
+UID             0x1000008d 0x100039e0
+VENDORID        0x70000001
+
+CAPABILITY 		all
+MACRO			__SECURE_API__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/monitor/monap.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,35 @@
+/*
+* 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:
+*
+*/
+
+#define	__MONAP_MMP__
+
+#include    <variant.mmh>
+#include    "..\..\e32\kernel\exmondebug.mmp"
+
+TARGET			VariantTarget(exmondebug,dll)
+
+SYSTEMINCLUDE	\epoc32\include\drivers
+SYSTEMINCLUDE   ..\serial
+
+SOURCEPATH		.
+SOURCE			monitor.cpp
+
+LIBRARY			PlatformLib
+
+CAPABILITY		all
+
+VENDORID 0x70000001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/monitor/monitor.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,48 @@
+/*
+* 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:
+*
+*/
+
+#include <monitor.h>
+#include <system_priv.h>
+
+#include "syborg_serial.h"
+
+void CrashDebugger::InitUart()
+{
+  TUint32 debugPortBase = VARIANT_INTERFACE::DebugPortAddr();
+  TUint8 res = ReadReg(debugPortBase, 0);
+  WriteReg(debugPortBase,DCommSyborgSoc::SERIAL_INT_ENABLE,0);
+}
+
+void CrashDebugger::UartOut(TUint aChar)
+{
+  TUint32 debugPortBase = VARIANT_INTERFACE::DebugPortAddr();
+  WriteReg(debugPortBase,DCommSyborgSoc::SERIAL_DATA,aChar);
+}
+
+TUint8 CrashDebugger::UartIn()
+{
+  TUint32 debugPortBase = VARIANT_INTERFACE::DebugPortAddr();
+  while (ReadReg(debugPortBase,DCommSyborgSoc::SERIAL_FIFO_COUNT)==0)
+	;
+
+  return ReadReg(debugPortBase,DCommSyborgSoc::SERIAL_DATA);
+}
+
+TBool CrashDebugger::CheckPower()
+{
+	return EFalse;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/pointer/pointer.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,46 @@
+/*
+* 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:
+*
+*/
+
+#include <variant.mmh>
+#include "kernel\kern_ext.mmh"
+
+TARGET			VariantTarget(epointer,dll)
+TARGETTYPE		kext
+LINKAS			epointer.dll
+
+SYSTEMINCLUDE   .
+SYSTEMINCLUDE	AsspNKernIncludePath
+
+SOURCEPATH		.
+SOURCE			syborg_pointer.cpp
+
+//LIBRARY			ekern.lib
+LIBRARY			PlatformLib
+
+//NOEXPORTLIBRARY
+
+//DEFFILE			..\e32\~\empty.def
+//DEFFILE			.\~\cmse.def
+
+//NOSTRICTDEF
+
+UID				0x100039cf 0x100000db
+VENDORID        0x70000001
+
+CAPABILITY 		all
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/pointer/syborg_pointer.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,276 @@
+/*
+* 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: Minimalistic pointer driver
+*
+*/
+
+//#define DEBUG
+
+#include <syborg_priv.h>
+#include "syborg_pointer.h"
+
+TPointerRv::TPointerRv():
+  iRxDfc(RxDfc,this,Kern::DfcQue0(),1)
+{
+  __DEBUG_PRINT("TPointerRv::TPointerRv()");
+  TInt r = Interrupt::Bind(EIntPointer,Isr,this);
+  if(r != KErrNone)
+	__KTRACE_OPT(KPANIC, Kern::Printf("TPointerRv::TPointerRv() Interrupt::Bind(%d)=%d",
+									  EIntPointer, r));
+  iPointerOn = ETrue;
+  iLastBut = 0;
+
+  Interrupt::Enable(EIntPointer);
+}
+
+TPointerRv::~TPointerRv()
+{
+}
+
+struct TPointerRv::PData* TPointerRv::FifoPop(void)
+{
+  struct TPointerRv::PData* val = &iPDataFifo[iFifoPos];
+  iFifoPos++;
+  iFifoCount--;
+  
+  if (iFifoPos == FIFO_SIZE)
+	iFifoPos = 0;
+
+  return val;
+}
+
+void TPointerRv::FifoPush(struct TPointerRv::PData* val)
+{
+  TInt slot;
+  
+  if (iFifoCount == FIFO_SIZE)
+	return;
+  
+  slot = iFifoPos + iFifoCount;
+  if (slot >= FIFO_SIZE)
+	slot -= FIFO_SIZE;
+  iPDataFifo[slot] = *val;
+  iFifoCount++;
+
+  //  __DEBUG_PRINT("TPointerRv::FifoPush %d %d %d %d",val->x, val->y, val->z, val->but);
+  //  __DEBUG_PRINT("TPointerRv::FifoPush %d %d %d %d",iPDataFifo[slot].x, iPDataFifo[slot].y, iPDataFifo[slot].z, iPDataFifo[slot].but);
+
+}
+
+void TPointerRv::Init3()
+{
+  __DEBUG_PRINT("TPointerRv::Init3");
+
+  TInt reg = ReadReg(KHwBaseKmiPointer,POINTER_ID);
+  WriteReg(KHwBaseKmiPointer,POINTER_INT_ENABLE,1);
+  
+  TInt r = Kern::AddHalEntry(EHalGroupMouse,DoPointerHalFunction,this);
+  if(r != KErrNone)
+	__KTRACE_OPT(KPANIC, Kern::Printf("TPointerRv::Init3(): Kern::AddHalEntry()=%d", r));
+
+  // Get information about the screen display mode
+  TPckgBuf<TVideoInfoV01> buf;
+  TVideoInfoV01& videoInfo = buf();
+
+  r = Kern::HalFunction(EHalGroupDisplay, EDisplayHalCurrentModeInfo, (TAny*)&buf, NULL);
+  if(r != KErrNone)
+	__KTRACE_OPT(KPANIC, Kern::Printf("TPointerRv::Init3(): Kern::HalFunction(EDisplayHalCurrentModeInfo)=%d", r));
+  
+  iScreenWidth  = videoInfo.iSizeInPixels.iWidth;
+  iScreenHeight = videoInfo.iSizeInPixels.iHeight;
+  iDisplayMode  = videoInfo.iDisplayMode;
+  ix = iy = 0;
+
+  iXFactor = Fixed(iScreenWidth) / Fixed(0x8000);
+  iYFactor = Fixed(iScreenHeight) / Fixed(0x8000);
+  
+  iFifoPos = iFifoCount = 0;
+}
+
+
+void TPointerRv::Process(TPointerRv *i, struct TPointerRv::PData *pd)
+{
+  TRawEvent e;
+
+  //  __DEBUG_PRINT("Event: X=%d Y=%d Point %d", pd->x, pd->y, pd->but);
+  //  __DEBUG_PRINT("  Last X=%d Y=%d Point %d", i->ix, i->iy, i->iLastBut);
+
+  //  i->ix += pd->x;
+  //  i->iy += pd->y;
+  
+  i->ix = int(Fixed(pd->x) * i->iXFactor);
+  i->iy = int(Fixed(pd->y) * i->iYFactor);
+
+  switch(pd->but)
+	{
+	case 0:  // Button released
+	  switch(i->iLastBut)
+		{
+		case 0:
+		  if( (pd->x!=0) || (pd->y!=0) ) {
+			e.Set(TRawEvent::EPointerMove, i->ix, i->iy);
+			__DEBUG_PRINT("1 EPointerMove (x:%d y:%d)", i->ix, i->iy);
+		  }
+		  goto fin;
+		case 1: // Left
+		  e.Set(TRawEvent::EButton1Up, i->ix, i->iy);
+		  __DEBUG_PRINT("2 EButton1UP (x:%d y:%d)", i->ix, i->iy);
+		  goto fin;
+		case 2: // Right
+		  e.Set(TRawEvent::EButton2Up, i->ix, i->iy);
+		  __DEBUG_PRINT("3 EButton2UP (x:%d y:%d)", i->ix, i->iy);
+		  goto fin;
+		}
+	case 1: // Left
+	  if (i->iLastBut == 0) {
+		e.Set(TRawEvent::EButton1Down, i->ix, i->iy);
+		__DEBUG_PRINT("4 EButton1Down (x:%d y:%d)", i->ix, i->iy);
+	  }
+	  else if( (pd->x!=0) || (pd->y!=0) ) {
+		e.Set(TRawEvent::EPointerMove, i->ix, i->iy);
+		__DEBUG_PRINT("5 EPointerMove (x:%d y:%d)", i->ix, i->iy);
+	  }
+	  break;
+	case 2: // Right
+	  if (i->iLastBut == 0) {
+		e.Set(TRawEvent::EButton2Down, i->ix, i->iy);
+		__DEBUG_PRINT("6 EButton2Down (x:%d y:%d)", i->ix, i->iy);
+	  }
+	  else if( (pd->x!=0) || (pd->y!=0) ) {
+		e.Set(TRawEvent::EPointerMove, i->ix, i->iy);
+		__DEBUG_PRINT("7 EPointerMove (x:%d y:%d)", i->ix, i->iy);
+	  }
+	  break;
+
+	}
+ fin:
+  Kern::AddEvent(e);
+  i->iLastBut = pd->but;
+}
+
+void TPointerRv::RxDfc(TAny* aPtr)
+{
+  __DEBUG_PRINT("TPointerRv::RxDfc");
+
+  TPointerRv* i = static_cast<TPointerRv*>(aPtr);  
+
+  while(i->iFifoCount>0) {
+	struct TPointerRv::PData *pd= i->FifoPop();
+	Process(i,pd);
+  }
+}
+
+void TPointerRv::Isr(TAny* aPtr)
+{
+  __DEBUG_PRINT("TPointerRv::Isr");
+
+  TPointerRv& k = *(TPointerRv*)aPtr;
+  // interrupts are now auto clear
+
+  while(ReadReg(KHwBaseKmiPointer, POINTER_FIFO_COUNT)!=0) {
+	struct TPointerRv::PData pd;
+	pd.x = ReadReg(KHwBaseKmiPointer,POINTER_X);
+	pd.y = ReadReg(KHwBaseKmiPointer,POINTER_Y);
+	pd.z = ReadReg(KHwBaseKmiPointer,POINTER_Z);
+	pd.but = ReadReg(KHwBaseKmiPointer,POINTER_BUTTONS);  
+	k.FifoPush(&pd);
+	WriteReg(KHwBaseKmiPointer,POINTER_LATCH,0);	
+  }
+  
+  //  WriteReg(KHwBaseKmiPointer,POINTER_CLEAR_INT,0);
+  Interrupt::Clear(EIntPointer); 
+  k.iRxDfc.Add();
+}
+
+TInt TPointerRv::DoPointerHalFunction(TAny* aThis, TInt aFunction, TAny* a1, TAny* a2)
+{
+  return static_cast<TPointerRv*>(aThis)->PointerHalFunction(aFunction,a1,a2);
+}
+
+TInt TPointerRv::PointerHalFunction(TInt aFunction, TAny* a1, TAny* /*a2*/)
+{
+  __DEBUG_PRINT("TPointerRv::PointerHalFunction");
+
+  TInt r=KErrNone;
+
+  switch(aFunction)
+    {
+	case EMouseHalMouseState:
+	  {
+		kumemput32(a1, (TBool*)&iPointerOn, sizeof(TBool));
+		break;
+	  }			
+	case EMouseHalSetMouseState:
+	  {
+	        __SECURE_KERNEL(
+	           if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD,
+		        __PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EMouseHalSetMouseState")))
+		     return KErrPermissionDenied;
+		   );
+		if(((TBool)a1 == HAL::EMouseState_Visible) && (iPointerOn == (TBool)EFalse))
+		  {
+			iPointerOn=(TBool)ETrue;
+		  }            
+		else if(((TBool)a1 == HAL::EMouseState_Invisible) && (iPointerOn==(TBool)ETrue))        	    
+		  {
+			iPointerOn=(TBool)EFalse;
+		  }            
+		break;
+	  }            
+	case EMouseHalMouseInfo:
+	  {
+		TPckgBuf<TMouseInfoV01> vPckg;
+		TMouseInfoV01& xyinfo = vPckg();
+		xyinfo.iMouseButtons = 2;
+		xyinfo.iMouseAreaSize.iWidth = iScreenWidth;
+		xyinfo.iMouseAreaSize.iHeight = iScreenHeight;
+		xyinfo.iOffsetToDisplay.iX = 0;
+		xyinfo.iOffsetToDisplay.iY = 0;
+		Kern::InfoCopy(*(TDes8*)a1,vPckg);
+		break;
+	  }		    
+        case EMouseHalSetMouseSpeed:
+	  {
+	        __SECURE_KERNEL(
+	           if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD,
+		        __PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EMouseHalSetMouseSpeed")))
+		     return KErrPermissionDenied;
+		   );
+		// fall thru to NotSupported
+	  }
+        case EMouseHalSetMouseAcceleration:
+	  {
+	        __SECURE_KERNEL(
+	           if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD,
+		        __PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EMouseHalSetMouseAcceleration")))
+		     return KErrPermissionDenied;
+		   );
+		// fall thru to NotSupported
+	  }
+	default:
+	  {
+		r = KErrNotSupported;
+		break;
+	  }			
+	}
+  return r;
+}
+
+DECLARE_STANDARD_EXTENSION()
+{
+  __DEBUG_PRINT("DECLARE_STANDARD_EXTENSION");
+  TPointerRv *d = new TPointerRv;
+  d->Init3();
+  return KErrNone;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/pointer/syborg_pointer.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,115 @@
+/*
+* 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: Minimalistic pointer driver
+*
+*/
+
+#ifndef _SYBORG_POINTER_H
+#define _SYBORG_POINTER_H
+
+#include <kernel.h>
+#include <system.h>
+#include <videodriver.h>
+#include <hal.h>
+
+#define FIFO_SIZE 16
+
+#ifdef DEBUG
+#define __DEBUG_PRINT(format...)    Kern::Printf(format)
+#else
+#define __DEBUG_PRINT(format...)    __KTRACE_OPT(KBOOT,Kern::Printf(format))
+#endif
+
+class TPointerRv
+{
+public:
+  TPointerRv();
+  virtual ~TPointerRv();
+  static TInt DoPointerHalFunction(TAny* aThis, TInt aFunction, TAny* a1, TAny* a2);
+  TInt PointerHalFunction(TInt aFunction, TAny* a1, TAny* a2);
+  void Init3();
+
+ private:
+  struct PData {
+	TInt x;
+	TInt y;
+	TInt z;
+	TInt but;
+  };
+
+  struct PData* FifoPop(void);
+  void FifoPush(struct PData*);
+
+  struct PData iPDataFifo[FIFO_SIZE];
+  TInt iFifoPos;
+  TInt iFifoCount;
+
+ private:
+  static void Isr(TAny* aPtr);
+  static void RxDfc(TAny* aPtr );
+  static void Process(TPointerRv *i, struct PData *);
+
+  TDfc iRxDfc;
+	
+  TBool iPointerOn;       // cursor visiability
+  TInt  iScreenWidth;
+  TInt  iScreenHeight;
+  TInt  iDisplayMode;
+
+  TInt ix,iy;
+  TInt iLastBut;
+
+  
+ public:
+
+  enum {
+    POINTER_ID          = 0,
+    POINTER_LATCH       = 1,
+    POINTER_FIFO_COUNT  = 2,
+    POINTER_X           = 3,
+    POINTER_Y           = 4,
+    POINTER_Z           = 5,
+    POINTER_BUTTONS     = 6,
+    POINTER_INT_ENABLE  = 7
+  };
+
+ private:
+  // Fixed point maths
+  class Fixed {
+
+  private:
+	int g;
+	const static int BP = 8;
+	const static int BP2 = BP*2;
+	enum FixedRaw { RAW };
+    Fixed(FixedRaw, int guts) : g(guts) {}
+	
+  public:
+    Fixed() : g(0) {}
+    Fixed(const Fixed& a) : g( a.g ) {}
+    Fixed(int a) : g( a << BP ) {}
+	operator int() { return g>>BP; }
+	Fixed operator +() const { return Fixed(RAW,g); }
+	Fixed operator -() const { return Fixed(RAW,-g); }
+	Fixed operator +(const Fixed& a) const { return Fixed(RAW, g + a.g); }
+	Fixed operator -(const Fixed& a) const { return Fixed(RAW, g - a.g); }
+	Fixed operator *(const Fixed& a) const { return Fixed(RAW,  (int)( ((long long)g * (long long)a.g ) >> BP)); }
+	Fixed operator /(const Fixed& a) const { return Fixed(RAW, int( (((long long)g << BP2) / (long long)(a.g)) >> BP) ); }
+  };
+
+  Fixed iXFactor;
+  Fixed iYFactor;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/rom/base_syborg.iby	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,107 @@
+/*
+* 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: Used by techview roms
+*
+*/
+
+#ifndef __BASE_SYBORG_IBY__
+#define __BASE_SYBORG_IBY__
+
+#define HEAPMAX(x)
+//#define FIXED	fixed
+#define FIXED
+
+kerneltrace 0x80000000
+
+memmodel multiple 0x100000
+//memmodel flexible 0x100000 0x1000 -0x4000
+//dlldatatop 0x7f000000
+
+multikernel
+bootbinary=		KERNEL_DIR\_PLATFORM_NAME_bootloader_bootrom.bin
+
+debugport 0
+romsize=0x2000000
+romlinearbase=0x80000000
+romalign=0x10
+kerneldataaddress=0xC8000000
+kernelheapmin=0x08000			// calculated at boot time
+kernelheapmax=0x00FFC000
+dataaddress=0x400000
+defaultstackreserve=0x200000
+romchecksum=0x12345678
+
+// Must align kernel to 16K boundary since exception vectors will be mapped at 0xFFFF0000
+primary[VARID]=		KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_ekern.exe		\sys\bin\ekern.exe	code-align 0x4000
+
+extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_btracex.ldd 	\sys\bin\btracex.ldd
+file=			ABI_DIR\DEBUG_DIR\btracec.dll	            		\sys\bin\btracec.dll
+
+define BTRACEX_LDD _PLATFORM_NAME_btracex.ldd
+            
+variant[VARID]=		KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_kasyborg.dll 	\sys\bin\kasyborg.dll
+
+extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_exmoncommon.dll    	\sys\bin\exmoncommon.dll
+extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_exmondebug.dll     	\sys\bin\exmondebug.dll
+
+extension[VARID]=	KERNEL_DIR\DEBUG_DIR\kdebug.dll			        \sys\bin\kdebug.dll
+
+#ifdef RMDEBUG
+#include "..\include\trk.iby"
+#endif
+
+// IEEE-mode VFP support
+extension[VARID]=	KERNEL_DIR\DEBUG_DIR\evfp.dll			        \sys\bin\evfp.dll
+
+extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_lcd.dll		\sys\bin\lcd.dll
+
+device[VARID]=		KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_eserial.pdd		\sys\bin\euart1.pdd
+device[VARID]=		KERNEL_DIR\DEBUG_DIR\ecomm.ldd				\sys\bin\ecomm.ldd
+
+extension[VARID]=	KERNEL_DIR\DEBUG_DIR\elocd.ldd				\sys\bin\elocd.ldd
+
+extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_epointer.dll	\sys\bin\epointer.dll
+extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_medint.pdd	        \sys\bin\medint.pdd
+
+extension[VARID]=	KERNEL_DIR\DEBUG_DIR\exstart.dll		 	\sys\bin\exstart.dll
+
+// Keyboard driver
+extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_ekeyb.dll		\sys\bin\ekeyb.dll
+
+// Kernel pipe
+device[VARID]=		KERNEL_DIR\DEBUG_DIR\pipelib.ldd			\sys\bin\pipelib.ldd
+
+// Host Filesystem
+extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_svphostfsdriver.ldd sys\bin\svphostfsdriver.ldd
+file=			KERNEL_DIR\DEBUG_DIR\svphostfsy.fsy			sys\bin\svphostfsy.fsy
+file=			KERNEL_DIR\DEBUG_DIR\svphostfs.exe			sys\bin\svphostfs.exe
+file=			KERNEL_DIR\DEBUG_DIR\svphostfsstart.exe			sys\bin\sysstart.exe
+
+// file=			KERNEL_DIR\DEBUG_DIR\stdnew.dll				sys\bin\stdnew.dll
+
+// Snap Driver
+extension[VARID]=	KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_svpsnapdriver.ldd	sys\bin\svpsnapdriver.ldd
+file=			KERNEL_DIR\DEBUG_DIR\snapapp.exe			sys\bin\snapapp.exe
+
+// Estart drive mapping setup files.
+data=			EPOCROOT##epoc32\rom\syborg\estart.txt			\sys\data\estart.txt
+
+define	HAL_DLL		_PLATFORM_NAME_hal.dll
+define	ESTART_EXE	e32strt.exe
+define	KEYMAP_FILE	_PLATFORM_NAME_ekdata
+#define	SCDV_DLL        _PLATFORM_NAME_scdv.dll
+#define	EUSER_DLL	_PLATFORM_NAME_euser.dll
+
+#endif  // __BASE_SYBORG_IBY__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/rom/header.iby	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,55 @@
+/*
+* 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:
+*
+*/
+
+#define HEAPMAX(x)
+
+#define VARID		0x0b0a0001
+#define MAGIC		0x0b0a0001
+#define ALL			0x0b0a0001
+#define FIXED
+
+kerneltrace 0x80000000
+
+memmodel multiple 0x100000
+//memmodel flexible 0x100000 0x1000 -0x4000
+//dlldatatop 0x7f000000
+
+trace 0x10
+collapse arm gcc 0
+multikernel
+
+version=0.01
+bootbinary=\epoc32\release\##MAIN##\_syborg_bootloader_bootrom.bin
+
+debugport 0
+romsize=0x2000000
+romlinearbase=0x80000000
+romalign=0x10
+kerneldataaddress=0xC8000000
+kernelheapmin=0x08000			// calculated at boot time
+kernelheapmax=0x00FFF000
+dataaddress=0x400000
+defaultstackreserve=0x200000
+romchecksum=0x12345678
+
+nowrapper				// no rom header
+
+#ifdef UNICODE
+unicode
+#endif
+
+#define VARIANT_PATH syborg
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/rom/kernel.iby	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,70 @@
+/*
+* 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: Used by textshell roms
+*
+*/
+
+//#define USE_AUTOEXEC
+
+#define	EUSER_DLL	_##VARIANT##_EUSER.DLL
+
+// Must align kernel to 16K boundary since exception vectors will be mapped at 0xFFFF0000
+primary[VARID]=		\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_EKERN.EXE		\sys\bin\EKERN.EXE	code-align 0x4000
+extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_BTRACEX.LDD		\sys\bin\BTRACEX.LDD
+variant[VARID]=		\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_KASYBORG.DLL		\sys\bin\KASYBORG.DLL
+
+// IEEE-mode VFP support
+extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\EVFP.DLL				\sys\bin\EVFP.DLL
+
+// Common monitor support. Must be before both interactive debugger and automatic logger.
+extension[VARID]=   	\Epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_EXMONCOMMON.DLL 	\sys\bin\EXMONCOMMON.DLL
+extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_EXMONDEBUG.DLL  	\sys\bin\EXMONDEBUG.DLL
+
+extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\KDEBUG.DLL				\sys\bin\KDEBUG.DLL
+
+extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_LCD.DLL		\sys\bin\LCD.DLL
+device[VARID]=		\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_ESERIAL.PDD    	\sys\bin\ESERIAL.PDD
+extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\ELOCD.LDD				\sys\bin\ELOCD.LDD
+
+extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_EPOINTER.DLL		\sys\bin\EPOINTER.DLL
+
+device[VARID]=		\epoc32\release\##KMAIN##\##BUILD##\ECOMM.LDD				\sys\bin\ECOMM.LDD
+extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\EXSTART.DLL				\sys\bin\EXSTART.DLL
+
+extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_EKEYB.DLL		\sys\bin\EKEYB.DLL
+
+file[VARID]=		\epoc32\release\##MAIN##\##BUILD##\_##VARIANT##_EKDATA.DLL		\sys\bin\EKDATA.DLL
+
+// Kernel pipe
+device[VARID]=      	\epoc32\release\##KMAIN##\##BUILD##\PIPELIB.LDD 		        \sys\bin\PIPELIB.LDD
+
+// Host Filesystem
+extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_svphostfsdriver.ldd	\sys\bin\svphostfsdriver.ldd
+file=			\epoc32\release\##KMAIN##\##BUILD##\svphostfsy.fsy			\sys\bin\svphostfsy.fsy
+file=			\epoc32\release\##KMAIN##\##BUILD##\svphostfs.exe			\sys\bin\svphostfs.exe
+file=			\epoc32\release\##KMAIN##\##BUILD##\svphostfsstart.exe			\sys\bin\sysstart.exe
+
+// Snap Driver
+extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_svpsnapdriver.ldd  \sys\bin\svpsnapdriver.ldd
+file=			\epoc32\release\##KMAIN##\##BUILD##\snapapp.exe			\sys\bin\snapapp.exe
+
+// Estart
+data=               	\epoc32\rom\syborg\ESTART.TXT					    \sys\data\ESTART.TXT
+
+#ifdef USE_AUTOEXEC
+data=               	\epoc32\rom\##VARIANT##\AUTOEXEC.BAT        					AUTOEXEC.BAT
+#endif
+
+extension[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_MEDINT.PDD	    \sys\bin\MEDINT.PDD
+//device[VARID]=	\epoc32\release\##KMAIN##\##BUILD##\D_DEBUG.LDD					\sys\bin\D_DEBUG.LDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/serial/serial.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,39 @@
+/*
+* 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:
+*
+*/
+
+#include <variant.mmh>
+#include "kernel\kern_ext.mmh"
+
+TARGET			VariantTarget(eserial,pdd)
+TARGETTYPE		pdd
+
+SYSTEMINCLUDE	\epoc32\include\drivers
+SYSTEMINCLUDE	AsspNKernIncludePath
+
+SOURCEPATH		.
+SOURCE			syborg_serial.cpp
+
+LIBRARY			PlatformLib
+
+EPOCALLOWDLLDATA
+
+UID				0 0x1000015b
+VENDORID        0x70000001
+
+ROMTARGET		eserial.pdd
+
+CAPABILITY		all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/serial/syborg_serial.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,252 @@
+/*
+* 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: Minimalistic serial driver
+*
+* TODO: Handle multiple Units, hardcoded FIFO Size
+*/
+
+#include "syborg_serial.h"
+
+//#define DPRINT(x) Kern::Printf(x)
+//#define DPRINT2(x,y) Kern::Printf(x,y)
+
+#define DPRINT(x)
+#define DPRINT2(x,y)
+
+// ---------------------------------------------------------------
+// ---------------------------------------------------------------
+
+DDriverSyborgComm::DDriverSyborgComm()
+{
+  iVersion=TVersion(KCommsMajorVersionNumber,KCommsMinorVersionNumber,KCommsBuildVersionNumber);
+}
+
+TInt DDriverSyborgComm::Install()
+{
+  DPRINT("DDriverSyborgComm::Install");
+  return SetName(&KPddName);
+}
+
+void DDriverSyborgComm::GetCaps(TDes8 &aDes) const
+{
+  DPRINT("DDriverSyborgComm::GetCaps");
+
+  TCommCaps3 capsBuf;
+  TCommCapsV03 &c=capsBuf();
+  c.iRate=KCapsBps110|KCapsBps150|KCapsBps300|KCapsBps600|KCapsBps1200|KCapsBps2400|KCapsBps4800|KCapsBps9600|KCapsBps19200|KCapsBps38400|KCapsBps57600|KCapsBps115200|KCapsBps230400;
+  c.iDataBits=KCapsData5|KCapsData6|KCapsData7|KCapsData8;
+  c.iStopBits=KCapsStop1|KCapsStop2;
+  c.iParity=KCapsParityNone|KCapsParityEven|KCapsParityOdd;
+  c.iHandshake=KCapsObeyXoffSupported|KCapsSendXoffSupported|KCapsObeyCTSSupported|KCapsFailCTSSupported|KCapsObeyDSRSupported|KCapsFailDSRSupported|KCapsObeyDCDSupported|KCapsFailDCDSupported|KCapsFreeRTSSupported|KCapsFreeDTRSupported;
+  c.iSignals=KCapsSignalCTSSupported|KCapsSignalDSRSupported|KCapsSignalDCDSupported|KCapsSignalRTSSupported|KCapsSignalDTRSupported;
+  c.iSIR=0;
+  c.iNotificationCaps=KNotifyDataAvailableSupported|KNotifySignalsChangeSupported;
+  c.iFifo=KCapsHasFifo;
+  c.iRoleCaps=0;
+  c.iFlowControlCaps=0;
+  c.iBreakSupported=ETrue;
+  aDes.FillZ(aDes.MaxLength());
+  aDes=capsBuf.Left(Min(capsBuf.Length(),aDes.MaxLength()));
+}
+
+TInt DDriverSyborgComm::Create(DBase*& aChannel, TInt aUnit, const TDesC8* anInfo, const TVersion& aVer)
+{
+  DPRINT("DDriverSyborgComm::Create");
+
+  DCommSyborgSoc* pD=new DCommSyborgSoc;
+  aChannel=pD;
+  TInt r=KErrNoMemory;
+  if (pD)
+	r=pD->DoCreate(aUnit,anInfo);
+  return r;
+}
+
+TInt DDriverSyborgComm::Validate(TInt aUnit, const TDesC8* /*anInfo*/, const TVersion& aVer)
+{
+  DPRINT("DDriverSyborgComm::Validate");
+  if ((!Kern::QueryVersionSupported(iVersion,aVer)) || 
+	  (!Kern::QueryVersionSupported(aVer,TVersion(KMinimumLddMajorVersion,KMinimumLddMinorVersion,KMinimumLddBuild))))
+	return KErrNotSupported;
+  return KErrNone;
+}
+
+// ---------------------------------------------------------------
+// ---------------------------------------------------------------
+
+DCommSyborgSoc::DCommSyborgSoc()
+{
+}
+
+DCommSyborgSoc::~DCommSyborgSoc()
+{
+  Interrupt::Unbind(iIrq);
+}
+
+TInt DCommSyborgSoc::DoCreate(TInt aUnit, const TDesC8* /*anInfo*/)
+{
+  DPRINT2("DCommSyborgSoc::DoCreate %d",aUnit);
+  switch(aUnit)
+	{
+	case 0:
+	  iPortAddr = KHwBaseUart0;
+	  iIrq = EIntSerial0;
+	  break;
+	case 1:
+	  iPortAddr = KHwBaseUart1;
+	  iIrq = EIntSerial1;
+	  break;
+	case 2:
+	  iPortAddr = KHwBaseUart2;
+	  iIrq = EIntSerial2;
+	  break;
+	case 3:
+	  iPortAddr = KHwBaseUart3;
+	  iIrq = EIntSerial3;
+	  break;
+	default:
+	  iPortAddr = KHwBaseUart0;
+	  iIrq = EIntSerial0;
+	  break;
+	}
+
+  Interrupt::Bind(EIntSerial0,Isr,this);
+
+  return KErrNone;
+
+}
+
+TInt DCommSyborgSoc::Start()
+{
+  DPRINT("DCommSyborgSoc::Start");
+  WriteReg(iPortAddr, SERIAL_INT_ENABLE, 0x1);
+  Interrupt::Enable(iIrq);
+  return KErrNone;
+}
+
+void DCommSyborgSoc::Stop(TStopMode aMode)
+{
+  DPRINT("DCommSyborgSoc::Stop");
+  WriteReg(iPortAddr, SERIAL_INT_ENABLE, 0x0);
+  Interrupt::Disable(iIrq);
+}
+
+void DCommSyborgSoc::Break(TBool aState)
+{
+  DPRINT("DCommSyborgSoc::Break");
+}
+
+void DCommSyborgSoc::EnableTransmit()
+{
+  DPRINT("DCommSyborgSoc::EnableTransmit");
+  while (Kern::PowerGood())
+	{
+	  TInt r=TransmitIsr();
+	  if (r<0)
+		break;
+	  WriteReg(iPortAddr, SERIAL_DATA, r);
+	}
+}
+
+TUint DCommSyborgSoc::Signals() const
+{
+  DPRINT("DCommSyborgSoc::Signals");
+  return(0);
+}
+  
+void DCommSyborgSoc::SetSignals(TUint aSetMask, TUint aClearMask)
+{
+  DPRINT("DCommSyborgSoc::SetSignals");
+}
+
+TInt DCommSyborgSoc::ValidateConfig(const TCommConfigV01 &aConfig) const
+{
+  DPRINT("DCommSyborgSoc::ValidateConfig");
+  return KErrNone;
+}
+
+void DCommSyborgSoc::Configure(TCommConfigV01 &aConfig)
+{
+  DPRINT("DCommSyborgSoc::Configure");
+}
+
+void DCommSyborgSoc::Caps(TDes8 &aCaps) const
+{
+  DPRINT("DCommSyborgSoc::Caps");
+  TCommCaps3 capsBuf;
+  TCommCapsV03 &c=capsBuf();
+  c.iRate=KCapsBps110|KCapsBps150|KCapsBps300|KCapsBps600|KCapsBps1200|KCapsBps2400|KCapsBps4800|KCapsBps9600|KCapsBps19200|KCapsBps38400|KCapsBps57600|KCapsBps115200|KCapsBps230400;
+  c.iDataBits=KCapsData5|KCapsData6|KCapsData7|KCapsData8;
+  c.iStopBits=KCapsStop1|KCapsStop2;
+  c.iParity=KCapsParityNone|KCapsParityEven|KCapsParityOdd;
+  c.iHandshake=KCapsObeyXoffSupported|KCapsSendXoffSupported|KCapsObeyCTSSupported|KCapsFailCTSSupported|KCapsObeyDSRSupported|KCapsFailDSRSupported|KCapsObeyDCDSupported|KCapsFailDCDSupported|KCapsFreeRTSSupported|KCapsFreeDTRSupported;
+  c.iSignals=KCapsSignalCTSSupported|KCapsSignalDSRSupported|KCapsSignalDCDSupported|KCapsSignalRTSSupported|KCapsSignalDTRSupported;
+  c.iSIR=0;
+  c.iNotificationCaps=KNotifyDataAvailableSupported|KNotifySignalsChangeSupported;
+  c.iFifo=KCapsHasFifo;
+  c.iRoleCaps=0;
+  c.iFlowControlCaps=0;
+  c.iBreakSupported=ETrue;
+  aCaps.FillZ(aCaps.MaxLength());
+  aCaps=capsBuf.Left(Min(capsBuf.Length(),aCaps.MaxLength()));
+}
+
+TInt DCommSyborgSoc::DisableIrqs()
+{
+  DPRINT("DCommSyborgSoc::DisableIrqs");
+  return NKern::DisableAllInterrupts();
+}
+
+void DCommSyborgSoc::RestoreIrqs(TInt aIrq)
+{
+  DPRINT("DCommSyborgSoc::RestoreIrqs");
+  NKern::RestoreInterrupts(aIrq);
+}
+
+TDfcQue* DCommSyborgSoc::DfcQ(TInt /*aUnit*/)
+{
+  return Kern::DfcQue0();
+}
+
+void DCommSyborgSoc::CheckConfig(TCommConfigV01& aConfig)
+{
+  DPRINT("DCommSyborgSoc::CheckConfig");
+}
+
+void DCommSyborgSoc::Isr(TAny* aPtr)
+{
+  DCommSyborgSoc& d=*(DCommSyborgSoc*)aPtr;
+  TUint rx[32];
+  TInt rxi=0;
+
+  DPRINT2("DCommSyborgSoc::Isr %x",d.iIrq);
+
+  // Is now auto clear
+  //  WriteReg(d.iPortAddr, SERIAL_CLEAR_INT, 0x0); // clear interrupts
+
+  while(ReadReg(d.iPortAddr, SERIAL_FIFO_COUNT)!=0) {
+	TUint ch = ReadReg(d.iPortAddr, SERIAL_DATA);
+	rx[rxi++]=ch;
+  }
+  d.ReceiveIsr(rx,rxi,0);
+}
+
+// ---------------------------------------------------------------
+// ---------------------------------------------------------------
+
+DECLARE_STANDARD_PDD()
+{
+  DPRINT("DECLARE_STANDARD_PDD()");
+  return new DDriverSyborgComm;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/serial/syborg_serial.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,77 @@
+/*
+* 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: Minimalistic serial driver
+*
+*/
+
+#ifndef _SYBORG_SERIAL_H
+#define _SYBORG_SERIAL_H
+
+#include <comm.h>
+#include <e32hal.h>
+#include "system.h"
+
+const TInt KMinimumLddMajorVersion=1;
+const TInt KMinimumLddMinorVersion=1;
+const TInt KMinimumLddBuild=1;
+
+class DDriverSyborgComm : public DPhysicalDevice
+{
+public:
+  DDriverSyborgComm();
+  virtual TInt Install();
+  virtual void GetCaps(TDes8 &aDes) const;
+  virtual TInt Create(DBase*& aChannel, TInt aUnit, const TDesC8* anInfo, const TVersion &aVer);
+  virtual TInt Validate(TInt aUnit, const TDesC8* anInfo, const TVersion &aVer);
+};
+
+class DCommSyborgSoc : public DComm
+{
+public:
+  DCommSyborgSoc();
+  ~DCommSyborgSoc();
+  TInt DoCreate(TInt aUnit, const TDesC8* anInfo);
+public:
+  virtual TInt Start();
+  virtual void Stop(TStopMode aMode);
+  virtual void Break(TBool aState);
+  virtual void EnableTransmit();
+  virtual TUint Signals() const;
+  virtual void SetSignals(TUint aSetMask, TUint aClearMask);
+  virtual TInt ValidateConfig(const TCommConfigV01 &aConfig) const;
+  virtual void Configure(TCommConfigV01 &aConfig);
+  virtual void Caps(TDes8 &aCaps) const;
+  virtual TInt DisableIrqs();
+  virtual void RestoreIrqs(TInt aIrq);
+  virtual TDfcQue* DfcQ(TInt aUnit);
+  virtual void CheckConfig(TCommConfigV01& aConfig);  
+  static void Isr(TAny* aPtr);
+
+public:
+  TLinAddr iPortAddr;
+  TInt iIrq;
+
+  enum {
+    SERIAL_ID           = 0,
+    SERIAL_DATA         = 1,
+    SERIAL_FIFO_COUNT   = 2,
+    SERIAL_INT_ENABLE   = 3,
+    SERIAL_DMA_TX_ADDR  = 4,
+    SERIAL_DMA_TX_COUNT = 5, /* triggers dma */
+    SERIAL_DMA_RX_ADDR  = 6,
+    SERIAL_DMA_RX_COUNT = 7 /* triggers dma */
+  };
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/specific/assp.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,279 @@
+/*
+* 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: implementation of class Syborg
+*
+*/
+
+#include <syborg_priv.h>
+#include <hal_data.h>
+
+#ifdef __EMI_SUPPORT__
+#include <emi.h>
+#endif
+
+//#define ASSP_DEBUG
+
+#ifdef ASSP_DEBUG
+#define __DEBUG_PRINT(format...)    Kern::Printf(format)
+#else
+#define __DEBUG_PRINT(format...)    __KTRACE_OPT(KBOOT,Kern::Printf(format))
+#endif
+
+Syborg* Syborg::Variant=NULL;
+// !@!
+#if 0
+TPhysAddr Syborg::VideoRamPhys;
+TPhysAddr Syborg::VideoRamPhysSecure;		// Secure display memory
+#endif
+
+GLDEF_D Syborg TheVariant;
+
+// Wait for interrupt idle routine
+extern TInt SyborgWFIIdle();
+
+DECLARE_STANDARD_ASSP()
+
+EXPORT_C Asic* VariantInitialise()
+{
+	return &TheVariant;
+}
+
+void Syborg::Idle()
+{
+	// Use the basic Wait For Interrupt call to idle
+	TInt irq = NKern::DisableAllInterrupts();
+#ifdef __EMI_SUPPORT__
+	EMI::EnterIdle();
+#endif
+	SyborgWFIIdle();
+#ifdef __EMI_SUPPORT__
+	EMI::LeaveIdle();
+#endif
+	NKern::RestoreInterrupts(irq);
+}
+
+TUint32 Syborg::NanoWaitCalibration()
+{
+	return 17;	// 2 cycles approx 17ns at 125MHz
+}
+
+TInt Syborg::VariantHal(TInt aFunction, TAny* a1, TAny* a2)
+{
+	__KTRACE_OPT(KHARDWARE,Kern::Printf("Syborg::VariantHal(%d, %0x, %0x)",aFunction,a1,a2));
+
+	switch(aFunction)
+    {
+		case EVariantHalVariantInfo:
+		{
+			TVariantInfoV01Buf infoBuf;
+			TVariantInfoV01& info = infoBuf();
+			TUint clock=0;
+			info.iRomVersion = Epoc::RomHeader().iVersion;
+    		info.iMachineUniqueId = (TInt64(HALData::EMachineUid_OmapH4)<<32);
+   			info.iLedCapabilities = (8<<16) + KLedMaskGreen1;
+			info.iProcessorClockInKHz = clock;
+			info.iSpeedFactor = clock/25;
+			Kern::InfoCopy(*(TDes8*)a1,infoBuf);
+			break;
+	    }
+		case EVariantHalDebugPortSet:
+	    {
+			TUint32 thePort = (TUint32)a1;
+			switch(thePort) // Accept UART(0-3)
+		    {
+				case 0:
+				case 1:
+			    case 2:
+                case 3:
+                {
+                    TSyborg::MarkDebugPortOff();           // mark port is not initialised
+					Kern::SuperPage().iDebugPort = thePort; // update the super page
+                    Syborg::DebugInit();                   // init debug port        
+                    break;
+                }
+				case (TUint32)KNullDebugPort:               // debug output supressed
+                {
+                    TSyborg::MarkDebugPortOff();           // mark port is not initialised
+					Kern::SuperPage().iDebugPort = thePort; // update the super page
+					break;
+                }
+				default:
+					return KErrNotSupported;
+		    }
+			break;
+	    }
+		case EVariantHalDebugPortGet:
+	    {
+			TUint32 thePort = Kern::SuperPage().iDebugPort;
+			kumemput32(a1, &thePort, sizeof(TUint32));
+			break;
+	    }
+		case EVariantHalSwitches:
+	    {
+		  TUint32 x = 0; //Register32(KHwBaseSystemReg+KHoRoSystemSw);
+			kumemput32(a1, &x, sizeof(x));
+			break;
+	    }
+		case EVariantHalLedMaskSet:
+	    {
+		  //SetRegister32(KHwBaseSystemReg+KHoRwSystemLed, (TUint32)a1 & 0xFF);
+			break;
+	    }
+		case EVariantHalLedMaskGet:
+	    {
+		  TUint32 x = 0; //Register32(KHwBaseSystemReg+KHoRwSystemLed);
+			kumemput32(a1, &x, sizeof(x));
+			break;
+	    }
+		case EVariantHalCustomRestartReason:
+	    {
+			// Restart reason is stored in super page
+		  TInt x = (Kern::SuperPage().iHwStartupReason); // & KmRestartCustomReasons) >> KsRestartCustomReasons;
+			kumemput32(a1, &x, sizeof(TInt));
+			break;
+	    }
+		case EVariantHalCustomRestart:
+	    {
+            __KERNEL_CAPABILITY_CHECK(
+                if(!Kern::CurrentThreadHasCapability(ECapabilityPowerMgmt,
+			       __PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EVariantHalCustomRestart")))
+				    return KErrPermissionDenied;
+            )
+			  Kern::Restart(0);
+			break;
+	    }
+		default:
+    	{
+			return KErrNotSupported;
+	    }
+    }
+	return KErrNone;
+}
+
+TPtr8 Syborg::MachineConfiguration()
+{
+	return TPtr8((TUint8*)&Kern::MachineConfig(),40,40);
+}
+
+EXPORT_C Syborg::Syborg()
+{
+	iDebugPortBase = TSyborg::DebugPortAddr(); // initialised in bootstrap
+}
+
+EXPORT_C TMachineStartupType Syborg::StartupReason()
+{
+	TUint s = Kern::SuperPage().iHwStartupReason;
+	__DEBUG_PRINT("Syborg::StartupReason CPU page value 0x%08X", s);
+	return EStartupColdReset;
+}
+
+EXPORT_C void Syborg::Init1()
+{
+	__DEBUG_PRINT("Syborg::Init1()");
+
+	// Enable the CLCD in the System registers
+	SyborgInterrupt::Init1();
+}
+
+EXPORT_C void Syborg::Init3()
+{
+	NTimerQ& m = *(NTimerQ*)NTimerQ::TimerAddress();
+	m.iRounding = -5;
+		
+	TInt r = Interrupt::Bind(EIntTimer1,SyborgInterrupt::MsTimerTick,&m);
+	if (r != KErrNone)
+	{
+		Kern::Fault("BindMsTick",r);
+	}
+
+	TSyborg::Init3();
+	TSyborg::ClearTimerInt(KHwBaseCounterTimer);
+
+	r = Interrupt::Enable(EIntTimer1);
+	if (r != KErrNone)
+	{
+		Kern::Fault("EnbMsTick",r);
+	}
+
+	TSyborg::SetTimerLoad(KHwBaseCounterTimer, K1000HzTickMatchLoad);
+	//	TSyborg::SetTimerLoad(KHwBaseCounterTimer, 1000000);
+	TSyborg::SetTimerMode(KHwBaseCounterTimer, TSyborg::ETimerModePeriodic);	
+	TSyborg::EnableTimerInterrupt(KHwBaseCounterTimer);
+	TSyborg::EnableTimer(KHwBaseCounterTimer, TSyborg::EEnable);
+	
+	SyborgInterrupt::Init3();
+
+	// !@!
+#if 0
+	// Allocate physical RAM for video
+	TInt vSize = TSyborg::VideoRamSize();
+
+	r = Epoc::AllocPhysicalRam(vSize,Syborg::VideoRamPhys);
+	if (r != KErrNone)
+	{
+		Kern::Fault("AllocVideoRam",r);
+	}
+
+	// Allocate physical RAM for secure display
+	r = Epoc::AllocPhysicalRam(vSize,Syborg::VideoRamPhysSecure);
+	if (r != KErrNone)
+	{
+		Kern::Fault("AllocVideoRam 2",r);
+	}
+#endif
+	__DEBUG_PRINT("Finished Syborg::Init3()");
+}
+
+EXPORT_C void Syborg::DebugInit()
+{
+	iDebugPortBase = TSyborg::DebugPortAddr();
+
+    if(iDebugPortBase != (TUint32)KNullDebugPort)   // supress debug output
+    {
+	  TUint8 res = ReadReg(iDebugPortBase, 0);
+    }
+}
+
+//
+// Output a character to the debug port
+//
+EXPORT_C void Syborg::DebugOutput(TUint aLetter)
+{
+	if(!iDebugPortBase)
+    {
+		DebugInit();
+	}
+
+    if(iDebugPortBase != (TUint32)KNullDebugPort)   // supress debug output
+    {
+	  WriteReg(iDebugPortBase,1,aLetter);
+    }
+}
+
+EXPORT_C TInt Syborg::MsTickPeriod()
+{
+	return 1000;
+}
+
+EXPORT_C TInt Syborg::SystemTimeInSecondsFrom2000(TInt& aTime)
+{
+	__KTRACE_OPT(KHARDWARE,Kern::Printf("RTC READ: %d",aTime));
+	return KErrNone;
+}
+
+EXPORT_C TInt Syborg::SetSystemTimeInSecondsFrom2000(TInt aTime)
+{
+	__KTRACE_OPT(KHARDWARE,Kern::Printf("Set RTC: %d",aTime));					// do this here to allow the value to be loaded...
+	return KErrNone;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/specific/highrestimer.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,70 @@
+/*
+* 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:
+*
+*/
+
+/**
+ * @file
+ * @internalTechnology
+ *
+ * The highrestimer.h header file defines how to access the high resoltion
+ * timer, if one is supported.  This file is used by default if the variant does
+ * not export one to \epoc32\include\nkern. 
+ */
+
+#ifndef __HIGHRESTIMER_H__
+#define __HIGHRESTIMER_H__
+//
+// Copyright (c) 2008 Symbian Ltd. All rights reserved.
+//
+
+#include <syborg.h>
+
+/**
+ * Macro indicating that a high resolution timer is supported.
+ */
+#define HAS_HIGH_RES_TIMER
+
+/**
+ * Assembler macro to get the the current value of the high res timer and place
+ * it in the specified register.
+ * Reads the 32-bit value from a free-running counter that represents the current time. 
+ * Syborg timers have 'microsecond resolution'. NB. This value comes from the host clock
+ * and so there is a good chance that the kernels tick based notion of time (elapsed) and that
+ * measured by the free running timer will get out of kilter. This affects t_cputime from e32test
+ * amongst other things.
+ */
+//#define GET_HIGH_RES_TICK_COUNT(Rd) asm("nop");
+// Hi-jacking r10 for tmp, not good if Rd is R10 -- grepping the the kernel shows it's not (for now)
+#define GET_HIGH_RES_TICK_COUNT(Rd)						         \
+  asm("push {r10}");										     \
+  asm("mov r10, #2");										     \
+  asm("ldr "#Rd", =%a0"               : : "i" (KHwBaseRtc + 4)); \
+  asm("str r10, ["#Rd", #%a0]"        : : "i" (0));			     \
+  asm("pop {r10}");                                              \
+  asm("ldr "#Rd", =%a0"               : : "i" (KHwBaseRtc + 8)); \
+  asm("ldr "#Rd", ["#Rd", #%a0]"      : : "i" (0));              
+
+/**
+ * The frequency of the timer in Hz.
+ */
+const TInt KHighResTimerFrequency = 1000000;
+
+/**
+ * Macro indicating that the timer counts up if defined.
+ */
+#define HIGH_RES_TIMER_COUNTS_UP
+
+#endif  // __HIGHRESTIMER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/specific/interrupts.cia	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,102 @@
+/*
+* 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: Syborg interrupt control and dispatch
+*
+*/
+
+#include <e32cia.h>
+#include <syborg_priv.h>
+#include <cpudefs.h>
+
+// CIA symbols for ASSP code?
+#if defined(__GCC32__)
+// CIA symbol macros for Gcc98r2
+#define CSM_ZN7NTimerQ4TickEv " Tick__7NTimerQ"
+#elif defined(__ARMCC__)
+// CIA symbol macros for RVCT
+#define CSM_ZN7NTimerQ4TickEv " __cpp(NTimerQ::Tick)"
+#else
+// CIA symbol macros for EABI assemblers
+#define CSM_ZN7NTimerQ4TickEv " _ZN7NTimerQ4TickEv"
+#endif
+
+/********************************************************************
+ * Wait for interrupt idle routine which does not disable interrupts
+ ********************************************************************/
+ 
+__NAKED__ void SyborgWFIIdle()
+{
+	// Enter an idle state and wait for interrupts
+	asm("mov r0, #0");
+	asm("mcr p15, 0, r0, c7, c0, 4");
+	asm("bx lr");
+}
+
+/********************************************************************
+ * Service 1ms tick interrupt & timer 1 interrupt
+ ********************************************************************/
+
+__NAKED__ void SyborgInterrupt::MsTimerTick(TAny* /*aPtr*/)
+{
+	// Service 1ms tick interrupt
+	asm("ldr r1, __KHwCounterTimer");
+	asm("push {r0}");
+	asm("mov r0, #1");
+	asm("str r0, [r1, #24]");
+	asm("pop {r0}");
+	asm("b "CSM_ZN7NTimerQ4TickEv);
+	asm("bx lr");
+
+	asm("__KHwCounterTimer:");
+	asm(".word %a0" : : "i" ((TInt)KHwBaseCounterTimer));
+}
+
+/********************************************************************
+ * Interrupt handling/dispatch
+ ********************************************************************/
+// IRQ dispatcher
+// Enter with r0-r3, r12 and return address on IRQ stack
+// Must preserve r4-r11
+// Uses r4,r5,r12
+__NAKED__ void SyborgInterrupt::IrqDispatch()
+{
+	asm("push {r4,r5,lr} ");
+	asm("ldr r4, __KHwBaseSic");
+	asm("ldr r12, __SicHandlerStart");
+	asm("ldr r5, [r4, #8]");  // r5 - pending interrupt
+	asm("adr lr, Clear");
+	asm("add r12, r5, lsl #3");
+	asm("ldm r12, {r0, pc}");
+	
+	asm("Clear:");
+	//	asm("str r5, [r4, #16]");        // TODO: error
+	asm("pop {r4,r5,pc}");
+
+	asm("__KHwBaseSic:");
+	asm(".word %a0" : : "i" ((TInt)KHwBaseSic));
+	asm("__SicHandlerStart:");
+	asm(".word %a0" : : "i" ((TInt)&Handlers[0]));
+}
+
+__NAKED__ void SyborgInterrupt::FiqDispatch()
+{
+	// FIQ dispatcher
+	// Enter with return address on FIQ stack
+	// We may use r8-r12, but must preserve other registers
+	// NOTE: STACK IS MISALIGNED ON ENTRY (1 WORD PUSHED)
+	asm("push {r0-r3,lr}");
+	// FIQ Handler to go in here.
+	// Not needed because no FIQs are currently used
+	asm("pop {r0-r3,pc}");
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/specific/interrupts.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,149 @@
+/*
+* 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: Syborg interrupt control and dispatch
+*
+*/
+
+#include <syborg_priv.h>
+
+SInterruptHandler SyborgInterrupt::Handlers[KNumSyborgInts];
+
+void SyborgInterrupt::DisableAndClearAll()
+{
+  WriteReg(KHwBaseSic, 3, 0);
+}
+
+void SyborgInterrupt::Init1()
+{
+	__KTRACE_OPT(KBOOT,Kern::Printf("SyborgInterrupt::Init1()"));
+
+	for(TUint i = 0; i < KNumSyborgInts; i++)
+	{
+		Handlers[i].iPtr = (TAny*)i;
+		Handlers[i].iIsr = Spurious;
+	}
+
+	DisableAndClearAll();
+	
+	Arm::SetIrqHandler((TLinAddr)SyborgInterrupt::IrqDispatch);
+	Arm::SetFiqHandler((TLinAddr)SyborgInterrupt::FiqDispatch);
+}
+
+void SyborgInterrupt::Init3()
+{
+	__KTRACE_OPT(KHARDWARE,Kern::Printf("SyborgInterrupt::Init3()"));
+}
+
+void SyborgInterrupt::Spurious(TAny* anId)
+{
+	// Handle an unexpected interrupt
+	Kern::Fault("SpuriousInt", (TInt)anId);
+}
+
+EXPORT_C TInt Interrupt::Bind(TInt anId, TIsr anIsr, TAny* aPtr)
+{
+  __KTRACE_OPT(KHARDWARE,Kern::Printf("Interrupt::Bind(anId=%d anIsr=0x%X aPtr=0x%X)",anId,anIsr,aPtr));
+	if((anId >= 0) && ((TUint)anId < KNumSyborgInts))
+	{
+		SInterruptHandler& h = SyborgInterrupt::Handlers[anId];
+		TInt irq = NKern::DisableAllInterrupts();
+        TInt r;
+		if(h.iIsr != SyborgInterrupt::Spurious)
+		{
+            r = KErrInUse;
+	    }
+		else
+		{
+    	    h.iPtr = aPtr;
+	    	h.iIsr = anIsr;
+            r = KErrNone;
+		}
+		NKern::RestoreInterrupts(irq);
+		return r;
+	}
+	return KErrArgument;
+}
+
+EXPORT_C TInt Interrupt::Unbind(TInt anId)
+{
+	__KTRACE_OPT(KHARDWARE,Kern::Printf("Interrupt::Unbind(%d)",anId));
+	if((anId >= 0) && ((TUint)anId < KNumSyborgInts))
+	{
+		SInterruptHandler& h = SyborgInterrupt::Handlers[anId];
+		TInt irq = NKern::DisableAllInterrupts();
+    	TInt r;
+		if(h.iIsr == SyborgInterrupt::Spurious)
+		{
+			r = KErrGeneral;
+		}
+		else
+		{
+            // Reset pointer to handler back to default
+			h.iPtr = (TAny*)anId;
+			h.iIsr = SyborgInterrupt::Spurious;	
+			// Disable the interrupt
+			TSyborg::DisableInt(anId);
+			r = KErrNone;
+        }
+		NKern::RestoreInterrupts(irq);
+    	return r;
+	}
+	return KErrArgument;
+}
+
+EXPORT_C TInt Interrupt::Enable(TInt anId)
+{
+	__KTRACE_OPT(KHARDWARE,Kern::Printf("Interrupt::Enable(%d)",anId));
+	if((anId >= 0) && ((TUint)anId < KNumSyborgInts))
+	{
+		if(SyborgInterrupt::Handlers[anId].iIsr == SyborgInterrupt::Spurious)
+		{
+	        return KErrNotReady;
+		}
+		else
+		{
+		  TSyborg::EnableInt(anId);
+		  return KErrNone;
+		}
+	}
+	return KErrArgument;
+}
+
+EXPORT_C TInt Interrupt::Disable(TInt anId)
+{
+	__KTRACE_OPT(KHARDWARE,Kern::Printf("Interrupt::Disable(%d)",anId));
+	if((anId >= 0) && ((TUint)anId < KNumSyborgInts))
+	{
+	  TSyborg::DisableInt(anId);
+	  return KErrNone;
+	}
+	return KErrArgument;
+}
+
+EXPORT_C TInt Interrupt::Clear(TInt anId)
+{
+	__KTRACE_OPT(KHARDWARE,Kern::Printf("Interrupt::Clear(%d)",anId));
+	if((anId >= 0) && ((TUint)anId < KNumSyborgInts))
+	{
+        return KErrNone;
+	}
+	return KErrArgument;
+}
+
+EXPORT_C TInt Interrupt::SetPriority(TInt anId, TInt aPriority)
+{
+	__KTRACE_OPT(KHARDWARE,Kern::Printf("Interrupt::SetPriority(anId=%d aPriority=0x%X)",anId,aPriority));
+	return KErrNotSupported;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/specific/syborg.cfg	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,2348 @@
+############################################################
+## AUTO-GENERATED CONFIGURATION FILE
+## CommDB Database Dump Utility
+## 1.1
+############################################################
+
+############################################################
+## Network
+## 
+[Network]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=Intranet
+	FIELD_COUNT=1
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=mRouter
+	FIELD_COUNT=1
+END_ADD
+
+
+############################################################
+## ModemBearer
+## 
+[ModemBearer]
+ADD_TEMPLATE
+	Name=Default Modem
+	Agent=CSD.agt
+	IfName=PPP
+	PortName=COMM::0
+	TSYName=MM
+	CSYName=ECUART
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=0
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=AT
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=180
+	LastSessionClosedTimeout=30
+	LastSocketClosedTimeout=60
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=69
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=Null Modem 115200bps
+	Agent=CSD.agt
+	IfName=PPP
+	PortName=COMM::0
+	TSYName=MM
+	CSYName=ECUART
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=52
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=AT
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=180
+	LastSessionClosedTimeout=30
+	LastSocketClosedTimeout=60
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=69
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Name=US Robotics Sportster
+	Agent=CSD.agt
+	IfName=PPP
+	PortName=COMM::0
+	TSYName=MM
+	CSYName=ECUART
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=57600
+	Handshaking=244
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	FaxClassPref=AUTO
+	SpeakerPref=AFTERDIALUNTILANSWER
+	SpeakerVolPref=QUIET
+	ModemInitString=AT&F1
+	DataInitString=AT
+	FaxInitString=AT&d2
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=180
+	LastSessionClosedTimeout=30
+	LastSocketClosedTimeout=60
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=69
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 4
+	Name=Dacom Surfer
+	Agent=CSD.agt
+	IfName=PPP
+	PortName=COMM::0
+	TSYName=MM
+	CSYName=ECUART
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=57600
+	Handshaking=244
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	FaxClassPref=AUTO
+	SpeakerPref=AFTERDIALUNTILANSWER
+	SpeakerVolPref=QUIET
+	ModemInitString=AT&F
+	DataInitString=AT
+	FaxInitString=AT&d2
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=180
+	LastSessionClosedTimeout=30
+	LastSocketClosedTimeout=60
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=69
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 5
+	Name=GSM Mobile Phone via Infrared
+	Agent=CSD.agt
+	IfName=PPP
+	PortName=IRCOMM::0
+	TSYName=MM
+	CSYName=IRCOMM
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=196
+	SpecialRate=0
+	XonChar=17
+	XoffChar=19
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=ATZ
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=180
+	LastSessionClosedTimeout=30
+	LastSocketClosedTimeout=60
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=69
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 6
+	Name=GSM Mobile Phone via Serial
+	Agent=CSD.agt
+	IfName=PPP
+	PortName=COMM::0
+	TSYName=MM
+	CSYName=ECUART
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=19200
+	Handshaking=196
+	SpecialRate=0
+	XonChar=17
+	XoffChar=19
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=ATZ
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=180
+	LastSessionClosedTimeout=30
+	LastSocketClosedTimeout=60
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=69
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 7
+	Name=GPRS Ericsson R520m via IR
+	Agent=PSD.agt
+	IfName=PPP
+	PortName=IRCOMM::0
+	TSYName=MM
+	CSYName=IRCOMM
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=4
+	SpecialRate=0
+	XonChar=17
+	XoffChar=19
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=ATZ
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=180
+	LastSessionClosedTimeout=30
+	LastSocketClosedTimeout=60
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=69
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 8
+	Name=GPRS Ericsson R520m/T68i via Serial
+	Agent=PSD.agt
+	IfName=PPP
+	PortName=COMM::0
+	TSYName=MM
+	CSYName=ECUART
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=19200
+	Handshaking=4
+	SpecialRate=0
+	XonChar=17
+	XoffChar=19
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=ATZ
+	DataInitString=AT
+	FaxInitString=AT
+	IspInitString=*99***1#
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=180
+	LastSessionClosedTimeout=30
+	LastSocketClosedTimeout=60
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=70
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 9
+	Name=GPRS Motorola Mobile Phone via Serial
+	Agent=PSD.agt
+	IfName=PPP
+	PortName=COMM::0
+	TSYName=MM
+	CSYName=ECUART
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=57600
+	Handshaking=4
+	SpecialRate=0
+	XonChar=17
+	XoffChar=19
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=ATZ
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=180
+	LastSessionClosedTimeout=30
+	LastSocketClosedTimeout=60
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=69
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 10
+	Name=WinTunnel Modem
+	Agent=null.agt
+	IfName=PPP
+	PortName=COMM::6
+	TSYName=MM
+	CSYName=ECUART
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=52
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=AT
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=180
+	LastSessionClosedTimeout=30
+	LastSocketClosedTimeout=60
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=69
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 11
+	Name=mRouterWinsBearer
+	Agent=mRouterAgent.agt
+	IfName=PPP
+	PortName=WINS::0
+	TSYName=MM
+	CSYName=WINSCSY
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=52
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=AT
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=9999
+	LastSessionClosedTimeout=180
+	LastSocketClosedTimeout=30
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=69
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 12
+	Name=mRouterRs232Bearer
+	Agent=mRouterAgent.agt
+	IfName=PPP
+	PortName=COMM::0
+	TSYName=MM
+	CSYName=ECUART
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=52
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=AT
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=9999
+	LastSessionClosedTimeout=180
+	LastSocketClosedTimeout=30
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=69
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 13
+	Name=mRouterIrBearer
+	Agent=mRouterAgent.agt
+	IfName=PPP
+	PortName=IRCOMM::0
+	TSYName=MM
+	CSYName=IRCOMM
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=52
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=AT
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=9999
+	LastSessionClosedTimeout=180
+	LastSocketClosedTimeout=30
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=69
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 14
+	Name=mRouterBtBearer
+	Agent=mRouterAgent.agt
+	IfName=PPP
+	PortName=BTCOMM::0
+	TSYName=MM
+	CSYName=BTCOMM
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=52
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=AT
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=9999
+	LastSessionClosedTimeout=180
+	LastSocketClosedTimeout=30
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=69
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 15
+	Name=mRouterUsbBearer
+	Agent=mRouterAgent.agt
+	IfName=PPP
+	PortName=ACM::0
+	TSYName=MM
+	CSYName=ECACM
+	DataBits=8
+	StopBits=1
+	Parity=NONE
+	Rate=115200
+	Handshaking=52
+	SpecialRate=0
+	XonChar=0
+	XoffChar=0
+	FaxClassPref=AUTO
+	SpeakerPref=NEVER
+	SpeakerVolPref=QUIET
+	ModemInitString=AT
+	DataInitString=AT
+	FaxInitString=AT
+	DialPauseLength=S8=
+	SpeakerVolContorlLow=L0
+	SpeakerVolControlMedium=L1
+	SpeakerVolControlHigh=L2
+	SpeakerAlwaysOff=M0
+	SpeakerOnUntilCarrier=M1
+	SpeakerAlwaysOn=M2
+	SpeakerOnAfterUntilCarrier=M3
+	DialToneWaitModifier=W
+	CallProgress1=X1
+	CallProgress2=X2
+	CallProgress3=X3
+	CallProgress4=X4
+	EchoOff=E0
+	VerboseText=V1
+	QuietOn=Q1
+	QuietOff=Q0
+	DialCommandStateModifier=;
+	OnLine=O
+	ResetConfiguration=Z
+	ReturnToFactoryDefs=&F
+	DCDOnDuringLink=&C1
+	DTRHangUp=&D2
+	DSRAlwaysOn=&S0
+	RTSCTSHandshake=&K3
+	XonXoffHandshake=&K4
+	EscapeCharacter=+
+	EscapeGuardPeriod=S12
+	NoDialTone=NO DIAL TONE
+	Busy=BUSY
+	NoAnswer=NO ANSWER
+	Carrier=CARRIER
+	Connect=CONNECT
+	CompressionClass5=COMPRESSION:CLASS 5
+	CompressionV42bis=COMPRESSION:V.42 bis
+	CompressionNone=COMPRESSION:NONE
+	ProtocolLAPD=PROTOCOL:LAPD
+	ProtocolALT=PROTOCOL:ALT
+	ProtocolALTCELLULAR=PROTOCOL:ALT-CELLULAR
+	ProtocolNone=PROTOCOL:NONE
+	MessageCentreNumber=+44123456789
+	MessageValidityPeriod=1440
+	MessageDeliveryReport=FALSE
+	MinimumSignalLevel=9905
+	LastSocketActivityTimeout=9999
+	LastSessionClosedTimeout=180
+	LastSocketClosedTimeout=30
+	SIRSettings=0
+	CommRole=0
+	FIELD_COUNT=69
+END_ADD
+
+
+############################################################
+## LANBearer
+## 
+[LANBearer]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=EKA1 Assabet on-board Ethernet
+	Agent=nullagt.agt
+	IfName=ethint
+	LDDFilename=ethercard
+	LDDName=EtherCard
+	PDDFilename=EtherSmc
+	PDDName=EtherCard.Smc
+	PacketDriverName=EtherPkt.drv
+	LastSocketActivityTimeout=-1
+	LastSessionClosedTimeout=-1
+	LastSocketClosedTimeout=-1
+	FIELD_COUNT=11
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=EKA2 Assabet on-board Ethernet
+	Agent=nullagt.agt
+	IfName=ethint
+	LDDFilename=enet
+	LDDName=Ethernet
+	PDDFilename=ethernet
+	PDDName=Ethernet.Assabet
+	PacketDriverName=EtherPkt.drv
+	LastSocketActivityTimeout=-1
+	LastSessionClosedTimeout=-1
+	LastSocketClosedTimeout=-1
+	FIELD_COUNT=11
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Name=EKA1 emulator Ethernet
+	Agent=nullagt.agt
+	IfName=ethint
+	LDDFilename=ethercard
+	LDDName=Ethercard
+	PDDFilename=etherwins
+	PDDName=Ethercard.wins
+	PacketDriverName=EtherPkt.drv
+	LastSocketActivityTimeout=-1
+	LastSessionClosedTimeout=-1
+	LastSocketClosedTimeout=-1
+	FIELD_COUNT=11
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 4
+	Name=EKA2 emulator Ethernet
+	Agent=nullagt.agt
+	IfName=ethint
+	LDDFilename=enet
+	LDDName=Ethernet
+	PDDFilename=ethernet
+	PDDName=Ethernet.Wins
+	PacketDriverName=EtherPkt.drv
+	LastSocketActivityTimeout=-1
+	LastSessionClosedTimeout=-1
+	LastSocketClosedTimeout=-1
+	FIELD_COUNT=11
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 5
+	Name=EKA2 SYBORG on-board Ethernet
+	Agent=nullagt.agt
+	IfName=ethint
+	LDDFilename=enet
+	LDDName=Ethernet
+	PDDFilename=ethernet
+	PDDName=Ethernet.SYBORG
+	PacketDriverName=EtherPkt.drv
+	LastSocketActivityTimeout=-1
+	LastSessionClosedTimeout=-1
+	LastSocketClosedTimeout=-1
+	FIELD_COUNT=11
+END_ADD
+
+############################################################
+## Location
+## 
+[Location]
+ADD_TEMPLATE
+	Name=Default Location
+	IntlPrefixCode=+
+	NatPrefixCode=0
+	NatCode=44
+	Mobile=TRUE
+	UsePulseDial=FALSE
+	WaitForDialTone=FALSE
+	PauseAfterDialout=0
+	FIELD_COUNT=8
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=Office
+	IntlPrefixCode=00
+	NatPrefixCode=0
+	NatCode=44
+	AreaCode=171
+	DialOutCode=9,
+	Mobile=FALSE
+	UsePulseDial=FALSE
+	WaitForDialTone=FALSE
+	PauseAfterDialout=0
+	FIELD_COUNT=10
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Name=Office Direct Dial
+	IntlPrefixCode=00
+	NatPrefixCode=0
+	NatCode=44
+	AreaCode=171
+	Mobile=FALSE
+	UsePulseDial=FALSE
+	WaitForDialTone=FALSE
+	PauseAfterDialout=0
+	FIELD_COUNT=9
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 4
+	Name=Mobile
+	IntlPrefixCode=+
+	NatPrefixCode=0
+	NatCode=44
+	Mobile=TRUE
+	UsePulseDial=FALSE
+	WaitForDialTone=FALSE
+	PauseAfterDialout=0
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 5
+	Name=Home
+	IntlPrefixCode=00
+	NatPrefixCode=0
+	NatCode=44
+	AreaCode=181
+	Mobile=FALSE
+	UsePulseDial=TRUE
+	WaitForDialTone=TRUE
+	PauseAfterDialout=0
+	FIELD_COUNT=9
+END_ADD
+
+
+############################################################
+## Chargecard
+## 
+[Chargecard]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=Dummy BT Chargecard
+	AccountNumber=144,12345678
+	Pin=0000
+	LocalRule=HG
+	NatRule=HFG
+	IntlRule=HEFG
+	FIELD_COUNT=6
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=Dummy Mercury Chargecard
+	AccountNumber=0500800800,,12345678
+	Pin=****
+	LocalRule=HG
+	NatRule=J,K,0FG
+	IntlRule=HEFG
+	FIELD_COUNT=6
+END_ADD
+
+
+############################################################
+## GlobalSettings
+## 
+[GlobalSettings]
+ADD_SECTION
+	WAPAccessPoint=1
+	RedialAttempts=3
+	SmsBearer=1
+	SmsReceiveMode=2
+	GPRSAttachMode=1
+	AcceptIncomingGprs=1
+	GPRSClassCBearer=GSM
+	ConnectionAttempts=2
+	ModemForDataAndFax=2
+	ModemForPhoneServicesAndSMS=2
+	LocationForDataAndFax=2
+	LocationForPhoneServicesAndSMS=2
+	DefaultNetwork=1
+	BearerAvailabilityCheckTSY=mm
+	FIELD_COUNT=14
+END_ADD
+
+
+############################################################
+## DialOutISP
+## 
+[DialOutISP]
+ADD_TEMPLATE
+	Name=Default Dial Out ISP
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=TRUE
+	DisplayPCT=FALSE
+	IfPromptForAuth=TRUE
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=28
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=NT RAS
+	Description=Test
+	Type=INTERNETONLY
+	DialResolution=TRUE
+	UseLoginScript=TRUE
+	LoginScript=CHARMAP \[windows-1252\]\nLOOP 10\n{\nSEND "CLIENT"+<0x0d>\nWAIT 3\n{\n"SERVER" OK\n}\n}\nEXIT KErrNoAnswer$\n\nOK:\nEXIT\n
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=RasUser
+	IfAuthPass=pass
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=35
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Name=ISP01
+	Description=PlaceHolder for ISP01
+	Type=INTERNETONLY
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=TRUE
+	IfAuthName=xxx
+	IfAuthPass=yyy
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=34
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 4
+	Name=ISP02
+	Description=PlaceHolder for ISP02
+	Type=INTERNETONLY
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=TRUE
+	IfAuthName=xxx
+	IfAuthPass=yyy
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=34
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 5
+	Name=ISP03
+	Description=PlaceHolder for ISP03
+	Type=INTERNETONLY
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=TRUE
+	IfAuthName=xxx
+	IfAuthPass=yyy
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=34
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 6
+	Name=ISP04
+	Description=PlaceHolder for ISP04
+	Type=INTERNETONLY
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=TRUE
+	IfAuthName=xxx
+	IfAuthPass=yyy
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=34
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 7
+	Name=ISP05
+	Description=PlaceHolder for ISP05
+	Type=INTERNETONLY
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=TRUE
+	IfAuthName=xxx
+	IfAuthPass=yyy
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=34
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 8
+	Name=mRouterDialOutIsp
+	Description=mRouterDialOutIsp
+	Type=INTERNETONLY
+	DialResolution=TRUE
+	UseLoginScript=FALSE
+	PromptForLogin=FALSE
+	DisplayPCT=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=IfAuthPass=
+	IfAuthPass=AuthRetries=0
+	AuthRetries=0
+	IfCallbackEnabled=FALSE
+	CallbackTimeout=0
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	BearerService=0
+	BearerProtocol=UNSPECIFIED
+	RlpVersion=0
+	IwfToMs=0
+	MsToIwf=0
+	AckTimer=0
+	RetransmissionAttempts=0
+	ResequencePeriod=0
+	V42Compression=0
+	V42Codewords=0
+	V42MaxLength=0
+	Asymmetry=0
+	UserInitUpgrade=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=34
+END_ADD
+
+
+############################################################
+## DialInISP
+## 
+[DialInISP]
+ADD_TEMPLATE
+	Name=Default Dial In ISP
+	UseLoginScript=FALSE
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=9
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=Dial In ISP01
+	UseLoginScript=FALSE
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableIPHeaderComp=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	EnableSWComp=FALSE
+	UseEdge=FALSE
+	FIELD_COUNT=9
+END_ADD
+
+
+############################################################
+## OutgoingGPRS
+## 
+[OutgoingGPRS]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=GPRS01
+	APN=gprs01APNPlaceHolder
+	PDPType=IPV4
+	ReqPrecedence=0
+	ReqDelay=0
+	ReqReliability=0
+	ReqPeakThroughput=0
+	ReqMeanThroughput=0
+	MinPrecedence=0
+	MinDelay=0
+	MinReliability=0
+	MinPeakThroughput=0
+	MinMeanThroughput=0
+	DataCompression=FALSE
+	HeaderCompression=FALSE
+	GprsUseEdge=FALSE
+	AnonymousAccess=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	AuthRetries=1
+	IpDNSAddrFromServer=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	IpAddrFromServer=TRUE
+	GprsAccessPointType=0
+	QosWarningTimeout=0
+	FIELD_COUNT=26
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=GPRS02
+	APN=gprs02APNPlaceHolder
+	PDPType=IPV4
+	ReqPrecedence=0
+	ReqDelay=0
+	ReqReliability=0
+	ReqPeakThroughput=0
+	ReqMeanThroughput=0
+	MinPrecedence=0
+	MinDelay=0
+	MinReliability=0
+	MinPeakThroughput=0
+	MinMeanThroughput=0
+	DataCompression=FALSE
+	HeaderCompression=FALSE
+	GprsUseEdge=FALSE
+	AnonymousAccess=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	AuthRetries=1
+	IpDNSAddrFromServer=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	IpAddrFromServer=TRUE
+	GprsAccessPointType=0
+	QosWarningTimeout=0
+	FIELD_COUNT=26
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Name=GPRS03
+	APN=gprs03APNPlaceHolder
+	PDPType=IPV4
+	ReqPrecedence=0
+	ReqDelay=0
+	ReqReliability=0
+	ReqPeakThroughput=0
+	ReqMeanThroughput=0
+	MinPrecedence=0
+	MinDelay=0
+	MinReliability=0
+	MinPeakThroughput=0
+	MinMeanThroughput=0
+	DataCompression=FALSE
+	HeaderCompression=FALSE
+	GprsUseEdge=FALSE
+	AnonymousAccess=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	AuthRetries=1
+	IpDNSAddrFromServer=FALSE
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	IpAddrFromServer=TRUE
+	GprsAccessPointType=0
+	QosWarningTimeout=0
+	FIELD_COUNT=26
+END_ADD
+
+
+############################################################
+## IncomingGPRS
+## 
+[IncomingGPRS]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=Incoming GPRS Settings PlaceHolder
+	APN=Test
+	PDPType=IPV4
+	ReqPrecedence=1
+	ReqDelay=1
+	ReqReliability=1
+	ReqPeakThroughput=1
+	ReqMeanThroughput=1
+	MinPrecedence=1
+	MinDelay=1
+	MinReliability=1
+	MinPeakThroughput=1
+	MinMeanThroughput=1
+	DataCompression=FALSE
+	HeaderCompression=FALSE
+	GprsUseEdge=FALSE
+	AnonymousAccess=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=RasUser
+	IfAuthPass=pass
+	AuthRetries=1
+	IpDNSAddrFromServer=TRUE
+	IpNameServer1=0.0.0.0
+	IpNameServer2=0.0.0.0
+	EnableLCPExtension=FALSE
+	DisablePlainTextAuth=FALSE
+	PDPAddress=0.0.0.0
+	IpAddrFromServer=TRUE
+	FIELD_COUNT=29
+END_ADD
+
+
+############################################################
+## DefaultGPRS
+## 
+[DefaultGPRS]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=Dummy Default GPRS Settings
+	Usage=1
+	APN=Access point name
+	PDPType=IPV6
+	PDPAddress=www.wid.com
+	Precedence=1
+	Delay=1
+	Reliability=1
+	PeakThroughput=1
+	MeanThroughput=1
+	MinPrecedence=1
+	MinDelay=1
+	MinReliability=1
+	MinPeakThroughput=1
+	MinMeanThroughput=1
+	DataCompression=TRUE
+	HeaderCompression=TRUE
+	GprsUseEdge=FALSE
+	AnonymousAccess=TRUE
+	FIELD_COUNT=19
+END_ADD
+
+
+############################################################
+## CDMA2000PacketServiceTable
+## 
+[CDMA2000PacketServiceTable]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=test name cdma2000
+	IwfName=Test2000
+	ServiceOption=HIGHSPEEDCDMA2000DATA
+	PdpType=IPV4
+	ReqFwdPriority=PRIORITY04
+	ReqRevPriority=PRIORITY04
+	ReqFwdBitrate=32KBPS
+	ReqRevBitrate=32KBPS
+	ReqFwdLoss=LOSS1
+	ReqRevLoss=LOSS1
+	ReqFwdMaxdelay=40MS
+	ReqRevMaxdelay=40MS
+	MinFwdBitrate=32KBPS
+	MinRevBitrate=32KBPS
+	AccptFwdLoss=LOSS2
+	AccptRevLoss=LOSS2
+	AccptFwdMaxdelay=120MS
+	AccptRevMaxdelay=120MS
+	EnableIPHeaderComp=FALSE
+	AnonymousAccess=FALSE
+	IfNetworks=ip
+	IfPromptForAuth=FALSE
+	IfAuthName=RasUser
+	IfAuthPass=pass
+	AuthRetries=1
+	IpNetMask=255.255.255.0
+	IpGateway=10.0.0.1
+	IpAddrFromServer=TRUE
+	IpDNSAddrFromServer=TRUE
+	EnableLCPExtension=TRUE
+	DisablePlainTextAuth=TRUE
+	ApType=2
+	QosWarningTimeout=1000000
+	RlpMode=TRANSPARENT
+	CDMAMobileIP=FALSE
+	CDMAMobileIPTimeout=10000000
+	CDMANaiType=0
+	FIELD_COUNT=37
+END_ADD
+
+
+############################################################
+## DefaultCDMA2000SettingsTable
+## 
+[DefaultCDMA2000SettingsTable]
+
+############################################################
+## LANService
+## 
+[LANService]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=Ethernet
+	IfNetworks=ip,ip6
+	IpNetMask=255.255.255.0
+	#IpGateway=194.72.6.1
+	IpAddrFromServer=FALSE
+	IpAddr=169.254.172.4
+	IpDNSAddrFromServer=FALSE
+	#IpNameServer1=194.72.6.51
+	#IpNameServer2=194.72.6.52
+	#FIELD_COUNT=9
+	FIELD_COUNT=6
+END_ADD
+
+
+############################################################
+## IAP
+## 
+[IAP]
+ADD_SECTION
+# COMMDB_ID = 1
+	Name=NT RAS with Null Modem
+	IAPService=2
+	IAPServiceType=DialOutISP
+	IAPBearer=2
+	IAPBearerType=ModemBearer
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=CSD IAP PlaceHolder01
+	IAPService=3
+	IAPServiceType=DialOutISP
+	IAPBearer=2
+	IAPBearerType=ModemBearer
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 3
+	Name=CSD IAP PlaceHolder02
+	IAPService=4
+	IAPServiceType=DialOutISP
+	IAPBearer=2
+	IAPBearerType=ModemBearer
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 4
+	Name=GPRS IAP PlaceHolder01
+	IAPService=1
+	IAPServiceType=OutgoingGPRS
+	IAPBearer=8
+	IAPBearerType=ModemBearer
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 5
+	Name=GPRS IAP PlaceHolder02
+	IAPService=2
+	IAPServiceType=OutgoingGPRS
+	IAPBearer=8
+	IAPBearerType=ModemBearer
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=4
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 6
+	Name=mRouter Rs232
+	IAPService=8
+	IAPServiceType=DialOutISP
+	IAPBearer=12
+	IAPBearerType=ModemBearer
+	IAPNetwork=2
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 7
+	Name=mRouter Ir
+	IAPService=8
+	IAPServiceType=DialOutISP
+	IAPBearer=13
+	IAPBearerType=ModemBearer
+	IAPNetwork=2
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 8
+	Name=mRouter BT
+	IAPService=8
+	IAPServiceType=DialOutISP
+	IAPBearer=14
+	IAPBearerType=ModemBearer
+	IAPNetwork=2
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 9
+	Name=mRouter USB
+	IAPService=8
+	IAPServiceType=DialOutISP
+	IAPBearer=15
+	IAPBearerType=ModemBearer
+	IAPNetwork=2
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 10
+	Name=mRouter Wins
+	IAPService=8
+	IAPServiceType=DialOutISP
+	IAPBearer=11
+	IAPBearerType=ModemBearer
+	IAPNetwork=2
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 11
+	Name=VPN IAP
+	IAPService=2
+	IAPServiceType=VpnService
+	IAPBearer=2
+	IAPBearerType=VirtualBearer
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 12
+	Name=EKA1 Assabet on-board ethernet
+	IAPService=1
+	IAPServiceType=LANService
+	IAPBearer=1
+	IAPBearerType=LANBearer
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 13
+	Name=EKA2 Assabet on-board ethernet
+	IAPService=1
+	IAPServiceType=LANService
+	IAPBearer=2
+	IAPBearerType=LANBearer
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 14
+	Name=EKA1 emulator ethernet
+	IAPService=1
+	IAPServiceType=LANService
+	IAPBearer=3
+	IAPBearerType=LANBearer
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 15
+	Name=EKA2 emulator ethernet
+	IAPService=1
+	IAPServiceType=LANService
+	IAPBearer=4
+	IAPBearerType=LANBearer
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 16
+	Name=EKA2 SYBORG on-board ethernet
+	IAPService=1
+	IAPServiceType=LANService
+	IAPBearer=5
+	IAPBearerType=LANBearer
+	IAPNetwork=1
+	IAPNetworkWeighting=0
+	Location=2
+	FIELD_COUNT=8
+END_ADD
+
+
+############################################################
+## ConnectionPreferences
+## 
+[ConnectionPreferences]
+ADD_SECTION
+	Ranking=0
+	Direction=OUTGOING
+	DialogPref=PROMPT
+	BearerSet=CSD
+	IAP=1
+	FIELD_COUNT=5
+END_ADD
+
+ADD_SECTION
+	Ranking=1
+	Direction=OUTGOING
+	DialogPref=PROMPT
+	BearerSet=CSD
+	IAP=1
+	FIELD_COUNT=5
+END_ADD
+
+
+############################################################
+## BTDeviceTable
+## 
+[BTDeviceTable]
+
+############################################################
+## BTSecurityTable
+## 
+[BTSecurityTable]
+
+############################################################
+## BTDefaultTable
+## 
+[BTDefaultTable]
+
+############################################################
+## Proxies
+## 
+[Proxies]
+ADD_SECTION
+# COMMDB_ID = 1
+	ISP=2
+	ProxyServiceType=DialOutISP
+	UseProxyServer=TRUE
+	ProxyServerName=www.dummyproxy.com
+	ProtocolName=http
+	PortNumber=80
+	Exceptions=www.dummyproxy.com/exception
+	FIELD_COUNT=7
+END_ADD
+
+
+############################################################
+## AgentLookup
+## 
+[AgentLookup]
+
+############################################################
+## WAPAccessPoint
+## 
+[WAPAccessPoint]
+ADD_TEMPLATE
+	Name=Default Dial In ISP
+	CurrentBearer=WAPIPBearer
+	FIELD_COUNT=2
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=Dummy WAP Settings
+	CurrentBearer=WAPIPBearer
+	StartPage=www.wapstart.com
+	FIELD_COUNT=3
+END_ADD
+
+
+############################################################
+## WAPIPBearer
+## 
+[WAPIPBearer]
+ADD_TEMPLATE
+	AccessPointId=0
+	IAP=0
+	WSPOption=CONNECTIONLESS
+	Security=FALSE
+	ProxyPortNumber=0
+	FIELD_COUNT=5
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	AccessPointId=2
+	GatewayAddress=www.wapgateway.com
+	IAP=2
+	WSPOption=CONNECTIONORIENTED
+	Security=FALSE
+	ProxyPortNumber=1
+	FIELD_COUNT=6
+END_ADD
+
+
+############################################################
+## WAPSMSBearer
+## 
+[WAPSMSBearer]
+ADD_TEMPLATE
+	AccessPointId=0
+	WSPOption=CONNECTIONLESS
+	Security=FALSE
+	FIELD_COUNT=3
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	AccessPointId=2
+	GatewayAddress=+4412345678901
+	ServiceCentreAddress=+442071234567
+	WSPOption=CONNECTIONORIENTED
+	Security=FALSE
+	FIELD_COUNT=5
+END_ADD
+
+
+############################################################
+## SecureSocketTable
+## 
+[SecureSocketTable]
+ADD_SECTION
+# COMMDB_ID = 1
+	ProtocolName=ssl3.0
+	ProtoLibrary=ssladaptor.dll
+	FIELD_COUNT=2
+END_ADD
+
+ADD_SECTION
+# COMMDB_ID = 2
+	ProtocolName=tls1.0
+	ProtoLibrary=ssladaptor.dll
+	FIELD_COUNT=2
+END_ADD
+
+
+############################################################
+## BTPersistTable
+## 
+[BTPersistTable]
+############################################################
+## ERROR
+## AccessTypeTable
+############################################################
+############################################################
+## ERROR
+## Error opening table
+############################################################
+############################################################
+## ERROR
+## Unable to find the specified object or missing required field values
+############################################################
+
+############################################################
+## VirtualBearer
+## 
+[VirtualBearer]
+ADD_TEMPLATE
+	Name=Default VPN Bearer
+	Agent=VPN.agt
+	IfName=VPN.nif
+	LastSocketActivityTimeout=180
+	LastSessionClosedTimeout=30
+	LastSocketClosedTimeout=60
+	FIELD_COUNT=6
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=VPN Bearer1
+	Agent=ntras.agt
+	IfName=ppp.nif
+	LastSocketActivityTimeout=-1
+	LastSessionClosedTimeout=-1
+	LastSocketClosedTimeout=-1
+	FIELD_COUNT=6
+END_ADD
+
+
+############################################################
+## VpnService
+## 
+[VpnService]
+ADD_TEMPLATE
+	Name=Default VPN
+	Policy=DefaultVPNpolicy
+	HomeIAP=1
+	HomeNetwork=0
+	FIELD_COUNT=4
+END_TEMPLATE
+
+ADD_SECTION
+# COMMDB_ID = 2
+	Name=VPN1
+	Policy=VPNpolicy1
+	HomeIAP=2
+	HomeNetwork=1
+	FIELD_COUNT=4
+END_ADD
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/specific/syborg.cia	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,75 @@
+/*
+* 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:
+*
+*/
+
+#include <syborg_priv.h>
+
+//
+//	Timer Access Functions
+//
+
+// Set the starting count value for a timer
+EXPORT_C void __NAKED__ TSyborg::SetTimerLoad(TUint /*aTimerBase*/, TUint32 /*aValue*/)
+{
+  asm("str r1, [r0, #12]");
+  asm("bx lr");
+}
+
+// Read the load register (starting count value)
+EXPORT_C TUint __NAKED__ TSyborg::TimerLoad(TUint /*aTimerBase*/)
+{
+  asm("ldr r0, [r0, #12]");
+  asm("bx lr");
+}
+
+// Read the actual timer value
+EXPORT_C TUint __NAKED__ TSyborg::TimerValue(TUint /*aTimerBase*/)
+{
+	asm("ldr r0, [r0, #16]");
+    asm("bx lr");
+}
+
+// Clear the timer interrupt by writing a value to Timer x clear register
+// The written value doesn't matter as any value will clear the interrupt.
+EXPORT_C void __NAKED__ TSyborg::ClearTimerInt(TUint /*aTimerBase*/)
+{
+	asm("mov r1, #1");	
+	asm("str r1, [r0, #24]");
+    asm("bx lr");
+}
+
+//
+//Interrupt Controller Acces Functions
+//
+
+// Enable specified motherboard Int on either the PIC/SIC
+EXPORT_C void __NAKED__ TSyborg::EnableInt(TUint /*anId*/)
+{
+  asm("ldr r1, __KHwInt");
+  asm("str r0, [r1, #20]");
+  asm("bx lr");
+}
+
+// Disable specified motherboard Int on either the PIC/SIC
+EXPORT_C void __NAKED__ TSyborg::DisableInt(TUint /*anId*/)
+{
+  asm("ldr r1, __KHwInt");
+  asm("str r0, [r1, #16]");
+  asm("bx lr");
+	
+	asm("__KHwInt:");
+	asm(".word %a0" : : "i" (TInt)(KHwBaseSic));
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/specific/syborg.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,128 @@
+/*
+* 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:
+*
+*/
+
+#include <syborg_priv.h>
+
+//#define DEBUG
+
+#ifdef DEBUG
+#define __DEBUG_PRINT(format...)    Kern::Printf(format)
+#else
+#define __DEBUG_PRINT(format...)    __KTRACE_OPT(KBOOT,Kern::Printf(format))
+#endif
+
+void TSyborg::Init3()
+{
+//  SetTimerMode(KHwBaseCounterTimer, ETimerModePeriodic); 
+//  EnableTimer(KHwBaseCounterTimer, EEnable);
+}
+
+EXPORT_C TBool TSyborg::IsTimerEnabled(TUint aTimerBase)
+{
+  __DEBUG_PRINT("TSyborg::IsTimerEnabled");
+  return ReadReg(aTimerBase, 1);
+}
+
+EXPORT_C void TSyborg::EnableTimerInterrupt(TUint aTimerBase)
+{
+  __DEBUG_PRINT("TSyborg::EnableTimerInterrupt");
+  WriteReg(aTimerBase,5,1);
+}
+
+EXPORT_C void TSyborg::DisableTimerInterrupt(TUint aTimerBase)
+{
+  __DEBUG_PRINT("TSyborg::DisableTimerInterrupt");
+  WriteReg(aTimerBase,5,0);
+}
+
+EXPORT_C void TSyborg::EnableTimer(TUint aTimerBase, TState aState)
+{
+  __DEBUG_PRINT("TSyborg::EnableTimer");
+  //  TUint32 mode = ReadReg(aTimerBase, 1);
+  if (aState == EEnable)
+	WriteReg(aTimerBase, 1, 1);
+  else
+	WriteReg(aTimerBase, 1, 0);
+}
+
+EXPORT_C TSyborg::TTimerMode TSyborg::TimerMode(TUint aTimerBase)
+{
+  __DEBUG_PRINT("TSyborg::TimerMode");
+  if (ReadReg(aTimerBase, 2))
+	return ETimerModeOneShot;
+  else
+	return ETimerModePeriodic;
+}
+
+EXPORT_C void TSyborg::SetTimerMode(TUint aTimerBase, TTimerMode aValue)
+{
+  __DEBUG_PRINT("TSyborg::SetTimerMode");
+  if (aValue == ETimerModePeriodic)
+	WriteReg(aTimerBase, 2, 0);
+  else
+	WriteReg(aTimerBase, 2, 1);
+}
+
+// Return base address of debug UART
+// (as selected in obey file or with eshell debugport command)
+EXPORT_C TUint32 TSyborg::DebugPortAddr()
+{
+	// Defaults to UART 0
+    switch (Kern::SuperPage().iDebugPort)
+    {
+        case KNullDebugPort:        // debug supressed
+            return (TUint32)KNullDebugPort;
+        case 1:
+            return KHwBaseUart1;
+        case 2:
+            return KHwBaseUart2;
+        case 3:
+            return KHwBaseUart3;
+        case 0:
+        default:
+            return KHwBaseUart0;
+    }
+}
+
+EXPORT_C void TSyborg::MarkDebugPortOff()
+{
+	TheVariant.iDebugPortBase = 0;
+}
+
+EXPORT_C TInt TSyborg::VideoRamSize()
+{
+  return 4*640*480;
+}
+
+// !@! 
+EXPORT_C TPhysAddr TSyborg::VideoRamPhys()
+{
+#if 0
+  __KTRACE_OPT(KEXTENSION,Kern::Printf("TSyborg::VideoRamPhys: VideoRamPhys=0x%x", Syborg::VideoRamPhys));
+#endif
+  return 0;
+
+}
+
+EXPORT_C TPhysAddr TSyborg::VideoRamPhysSecure()
+{
+#if 0
+  return Syborg::VideoRamPhysSecure;
+#endif
+  return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/specific/syborg.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,132 @@
+/*
+* 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:
+*
+*/
+
+#ifndef __SYBORG_H__
+#define __SYBORG_H__
+
+#include <e32const.h>
+#include <platform.h>
+#include <e32hal.h>
+#include <assp.h>
+#include <kern_priv.h>
+#include <mmboot.h>     // KPrimaryIOBase
+
+#ifndef __SYBORG__
+#define __SYBORG__
+#endif
+
+const TUint KHwBasePeripherals  = KPrimaryIOBase;       
+const TUint KHwLinSeparation	= 0x1000;
+
+const TUint KHwBaseSic				= KHwBasePeripherals + 0x00*KHwLinSeparation;
+// intended for use as a free-running counter. Reading the value register of a free-running syborg counter returns a microsec value
+const TUint KHwBaseRtc				= KHwBasePeripherals + 0x01*KHwLinSeparation;
+// intended for use as an alarm generating timer with a resolution of 1 microsecond
+const TUint KHwBaseCounterTimer			= KHwBasePeripherals + 0x02*KHwLinSeparation;
+const TUint KHwBaseKmiKeyboard			= KHwBasePeripherals + 0x03*KHwLinSeparation;
+const TUint KHwBaseKmiMouse			= KHwBasePeripherals + 0x04*KHwLinSeparation;
+const TUint KHwBaseKmiPointer			= KHwBasePeripherals + 0x04*KHwLinSeparation;
+const TUint KHwBaseClcd				= KHwBasePeripherals + 0x05*KHwLinSeparation;
+const TUint KHwBaseUart0			= KHwBasePeripherals + 0x06*KHwLinSeparation;
+const TUint KHwBaseUart1			= KHwBasePeripherals + 0x07*KHwLinSeparation;
+const TUint KHwBaseUart2			= KHwBasePeripherals + 0x08*KHwLinSeparation;
+const TUint KHwBaseUart3			= KHwBasePeripherals + 0x09*KHwLinSeparation;
+const TUint KHwSVPHostFileSystemDevice		= KHwBasePeripherals + 0x0a*KHwLinSeparation;
+const TUint KHwSVPSnapDevice			= KHwBasePeripherals + 0x0b*KHwLinSeparation;
+const TUint KHwSVPNetDevice			= KHwBasePeripherals + 0x0c*KHwLinSeparation;
+const TUint KHwSVPNandDevice			= KHwBasePeripherals + 0x0d*KHwLinSeparation;
+const TUint KHwSVPAudioDevice			= KHwBasePeripherals + 0x0e*KHwLinSeparation;
+const TUint KHwSVPPlatformDevice		= KHwBasePeripherals + 0x0f*KHwLinSeparation;
+
+	
+enum TSyborgInterruptId
+{
+  EIntTimer0 = 0,     /* RTC -- not used */
+  EIntTimer1 = 1,     /* Interval Timer */
+  EIntKeyboard = 2,
+    EIntPointer = 3,
+  //  EIntMouse = 3,
+  EIntFb = 4,
+  EIntSerial0 = 5,
+  EIntSerial1 = 6,
+  EIntSerial2 = 7,
+  EIntSerial3 = 8
+};
+
+// Timer Mode
+const TUint KPeriodic			= 0x0;
+const TUint KOneShot		    = 0x1;
+
+class TSyborg
+{
+public:
+	// generic enums
+	enum TState
+	{
+		EEnable,
+		EDisable
+	};
+	enum TLock
+	{
+		ELocked=0,
+		EUnlocked=0xA05F
+	};
+    enum TTimerMode
+	{
+	  ETimerModePeriodic=KPeriodic,
+	  ETimerModeOneShot=KOneShot,
+	};
+public:
+    // Initialisation of class
+	static void Init3();
+
+    // Accessor methods for timers 
+	IMPORT_C static void EnableTimerInterrupt(TUint aTimerBase);                    // Enable the timer interrupt
+	IMPORT_C static void DisableTimerInterrupt(TUint aTimerBase);                   // Disable the timer interrupt
+    IMPORT_C static void SetTimerLoad(TUint aTimerBase, TUint32 aValue);			// Set the starting count value for a timer
+    IMPORT_C static TUint TimerLoad(TUint aTimerBase);							    // Read the load register (starting count value)
+    IMPORT_C static TUint TimerValue(TUint aTimerBase);							    // Read the actual timer value
+    IMPORT_C static void ClearTimerInt(TUint aTimerBase); 						    // Clear the timer interrupt
+    IMPORT_C static TBool IsTimerEnabled(TUint aTimerBase);						    // Enquire as to whether the timer is enabled
+    IMPORT_C static void EnableTimer(TUint aTimerBase, TState aState);			    // Enable/disable the timer (start/stop it running)
+    IMPORT_C static TTimerMode TimerMode(TUint aTimerBase);						    // Find out what mode the timer is running in
+    IMPORT_C static void SetTimerMode(TUint aTimerBase, TTimerMode aValue);		    // Set the timer mode (periodic or free running)
+	
+    // Accessor methods for interrupts
+    IMPORT_C static void  EnableInt(TUint anId);					
+    IMPORT_C static void  DisableInt(TUint anId);					
+        
+	IMPORT_C static TInt VideoRamSize();
+	IMPORT_C static TPhysAddr VideoRamPhys();
+	IMPORT_C static TPhysAddr VideoRamPhysSecure();
+
+	// Debug Port Specific
+	IMPORT_C static TUint32 DebugPortAddr();
+	IMPORT_C static void MarkDebugPortOff();
+};
+
+static inline TUint32 ReadReg(TUint32 base, TUint8 aReg)
+{
+  return *(volatile TUint32 *)(base + (aReg << 2));
+}
+
+static inline void WriteReg(TUint32 base, TUint8 aReg, TUint32 aVal)
+{
+  *(volatile TUint32*)(base + (aReg<<2)) = aVal;
+}
+
+#endif  // __SYBORG_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/specific/syborg_priv.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,86 @@
+/*
+* 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:
+*
+*/
+
+#ifndef __SYBORG_PRIV_H__
+#define __SYBORG_PRIV_H__
+
+#include <e32const.h>
+#include <arm.h>
+#include <assp.h>
+#include <syborg.h>
+
+#define	_LOCK		TInt irq=NKern::DisableAllInterrupts();
+#define	_UNLOCK		NKern::RestoreInterrupts(irq);
+
+const TUint32 K1000HzTickMatchLoad = 1000;
+const TInt KNumSyborgInts = 64;
+
+class SyborgInterrupt : public Interrupt
+{
+public:
+	static void IrqDispatch();
+	static void FiqDispatch();
+	static void DisableAndClearAll();
+	static void Init1();
+	static void Init3();
+	static void Spurious(TAny* anId);
+    static void MsTimerTick(TAny* aPtr);
+
+	static SInterruptHandler Handlers[KNumSyborgInts];
+};
+
+class Syborg : public Asic
+{
+public:
+	IMPORT_C Syborg();
+
+public:
+	// Initialisation
+	IMPORT_C virtual TMachineStartupType StartupReason();
+	IMPORT_C virtual void Init1();
+	IMPORT_C virtual void Init3();
+
+	// Power management
+	IMPORT_C virtual void Idle();
+
+	IMPORT_C void DebugInit();
+	IMPORT_C virtual void DebugOutput(TUint aChar);
+
+	// Timing
+	IMPORT_C virtual TInt MsTickPeriod();
+	IMPORT_C virtual TInt SystemTimeInSecondsFrom2000(TInt& aTime);
+	IMPORT_C virtual TInt SetSystemTimeInSecondsFrom2000(TInt aTime);
+	IMPORT_C virtual TUint32 NanoWaitCalibration();
+
+	// HAL
+	virtual TInt VariantHal(TInt aFunction, TAny* a1, TAny* a2);
+
+	// Machine configuration
+	virtual TPtr8 MachineConfiguration();
+
+	TUint32 iDebugPortBase;
+
+	static Syborg* Variant;
+	static TPhysAddr VideoRamPhys;
+	static TPhysAddr VideoRamPhysSecure;
+	NTimerQ* iTimerQ;
+};
+
+GLREF_D Syborg TheVariant;
+
+#endif  // __SYBORG_PRIV_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/specific/system.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,28 @@
+/*
+* 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:
+*
+*/
+
+#ifndef __SYSTEM_H__
+#define __SYSTEM_H__
+
+#ifndef __BOOTLOADER_VARIANTCONFIG_H__
+#include <syborg.h>
+#endif
+
+#define VARIANT_INTERFACE           TSyborg
+_LIT(KPddName,"Comm.SYBORG_SERIAL");
+
+#endif  // __SYSTEM_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/specific/system_priv.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,24 @@
+/*
+* 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:
+*
+*/
+
+#ifndef __SYSTEM_PRIV_H__
+#define __SYSTEM_PRIV_H__
+
+#include "system.h"
+#include <syborg_priv.h>
+
+#endif  // __SYSTEM_PRIV_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/specific/variantmediadef.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,27 @@
+/*
+* 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:
+*
+*/
+
+#ifndef __VARIANTMEDIADEF_H__
+#define __VARIANTMEDIADEF_H__
+
+// Variant parameters for IRAM Media Driver (MEDINT.PDD)
+#define IRAM_DRIVECOUNT 1
+#define IRAM_DRIVELIST  0       // C:
+#define IRAM_NUMMEDIA   1	
+#define IRAM_DRIVENAME "IRam"
+
+#endif  // __VARIANTMEDIADEF_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/driver/stringops.c	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,86 @@
+/*
+* 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:
+*
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+		
+char * strchr (const char *p, int ch)
+	{
+	char c;
+
+	c = ch;
+	for (;; ++p) 
+		{
+		if (*p == c)
+			return ((char *)p);
+		if (*p == '\0')
+			return (char *)(0);
+		}
+	/* NOTREACHED */
+	}
+
+unsigned int strlen(const char *str)
+	{
+	const char *s;
+	for (s = str; *s; ++s)	{	}
+
+	return(s - str);
+	}
+
+int strcmp(const char *s1, const char *s2)
+	{
+	while (*s1 == *s2++)
+		if (*s1++ == 0)
+			return (0);
+	return (*(const unsigned char *)s1 - *(const unsigned char *)(s2 - 1));
+	}
+
+void * memchr(const void *s, int c, unsigned n)
+	{
+	if (n != 0) 
+		{
+		const unsigned char *p = s;
+		do 
+			{
+			if (*p++ == (unsigned char)c)
+				return ((void *)(p - 1));
+			} while (--n != 0);
+	
+		}
+	// Not found
+	return (void *)0;
+	}
+
+int memcmp(const void *s1, const void *s2, unsigned n)
+	{
+	if (n != 0) 
+		{
+		const unsigned char *p1 = s1, *p2 = s2;
+
+		do 
+			{
+			if (*p1++ != *p2++)
+				return (*--p1 - *--p2);
+			} while (--n != 0);
+		}
+	return (0);
+	}
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/driver/svphostfsdriver.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,919 @@
+/*
+* 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: Device driver for SVP Host file system access
+*
+*/
+
+#ifdef __WINS__
+#error - this driver cannot be built for emulation
+#endif
+
+#include <e32def.h>
+#include <e32cmn.h>
+#include <u32std.h>
+#include <kernel.h>
+#include <kern_priv.h>
+#include <arm.h>
+#include <cache.h>
+#include <nkern.h>
+#include <u32hal.h>
+
+#include <system.h>
+
+#include "rsvphostfsdriver.h"
+
+#include "libfdt.h"
+
+// Debug messages - uncomment define below
+//#define SVPDBG 
+#ifdef SVPDBG
+#define DP(format...) Kern::Printf(format)
+#else
+#define DP(format...)
+#endif
+		
+#define SVP_HOST_FS_DEVICE_ID  0xc51d0008
+#define SVP_PLATFORM_DEVICE_ID 0xc51d1000
+		
+class DSVPHostFsDriverFactory : public DLogicalDevice
+{
+public:
+
+	DSVPHostFsDriverFactory();
+	virtual TInt Install();
+	virtual void GetCaps(TDes8& aDes) const;
+	virtual TInt Create(DLogicalChannelBase*& aChannel);
+};
+
+class DSVPHostFsChannel : public DLogicalChannel
+{
+public:
+
+	DSVPHostFsChannel(DLogicalDevice* aLogicalDevice);
+	~DSVPHostFsChannel();
+
+	virtual TInt DoCreate(TInt aUnit, const TDesC* anInfo, const TVersion& aVer);	
+	virtual void HandleMsg(TMessageBase* aMsg);
+	
+protected:
+	virtual void DoCancel(TInt aReqNo);
+	virtual TInt DoRequest(TInt aReqNo, TRequestStatus* aStatus, TAny* a1, TAny* a2);
+	virtual TInt DoControl(TInt aFunction, TAny *a1, TAny *a2);
+	
+private:
+	TInt MkDir(TSVPHostFsMkDirInfo* aInfo);
+	TInt RmDir(TSVPHostFsRmDirInfo* aInfo);
+	TInt Delete(TSVPHostFsDeleteInfo* aInfo);
+	TInt Rename(TSVPHostFsRenameInfo* aInfo);
+	TInt Replace(TSVPHostFsReplaceInfo* aInfo);
+	TInt Entry(TSVPHostFsEntryInfo* aInfo);
+	TInt SetEntry(TSVPHostFsSetEntryInfo* aInfo);
+	TInt FileOpen(TSVPHostFsFileOpenInfo* aInfo);
+	TInt FileClose(TUint32 aDrive, TUint32 aHandle);
+	TInt FileRead(TSVPHostFsFileReadInfo* aInfo);
+	TInt FileWrite(TSVPHostFsFileWriteInfo* aInfo);
+	TInt FileSetSize(TSVPHostFsFileSetSizeInfo* aInfo);
+	TInt FileSetEntry(TSVPHostFsSetEntryInfo* aInfo);
+	TInt DirOpen(TSVPHostFsDirOpenInfo* aInfo);
+	TInt Flush(TUint32 aDrive);
+	TInt DirClose(TUint32 aDrive, TUint32 aHandle);
+	TInt DirRead(TSVPHostFsDirReadInfo* aInfo);
+
+	TInt GetID(TUint32 aDrive, TUint32 * aId);
+
+        TInt SetUpDrives();
+	TInt GetDriveMap(TAny * aMap);
+
+private:
+	DThread* iClientThread;
+	TDfcQue* iDFCQue;
+	TUint32 iDriveMap[DRIVE_MAP_SIZE] ; 
+
+};
+
+
+#define RET_IF_ERROR(v, e) { if ((v = (e)) != KErrNone) return v; }
+
+
+#define	EDeviceID	0
+#define	EOp		1
+#define ETreeStart	1
+#define	EResult		2
+#define	EArg0		3
+#define	EArg1		4
+#define	EArg2		5
+#define	EArg3		6
+
+static inline TUint32 SVPReadReg(TUint32 dev, TUint32 aReg)
+	{
+	DP("** ReadReg @ 0x%08x (%d)",dev,aReg);
+
+	return *(volatile TUint32 *)(dev + (aReg << 2));
+	}
+
+static inline void SVPWriteReg(TUint32 dev, TUint32 aReg, TUint32 aVal)
+	{
+	DP("** WriteReg @ 0x%08x (%d,%d)",dev,aReg,aVal);
+
+	*(volatile TUint32*)(dev + (aReg << 2)) = aVal;
+	}
+
+static inline void SVPInvoke(TUint32 dev, TUint32 aVal)
+	{
+	DP("** Invoke @ 0x%08x (%d)",dev,aVal);
+
+	*(TUint32*)(dev + (EOp << 2)) = aVal;
+	}
+
+/////////////////////////////////////////////////////////////////////////
+//
+// DSVPHostFsDriverFactory
+//
+/////////////////////////////////////////////////////////////////////////
+
+//
+// DSVPHostFsDriverFactory constructor
+//
+DSVPHostFsDriverFactory::DSVPHostFsDriverFactory()
+	{
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsDriverFactory::DSVPHostFsDriverFactory()");
+
+	iVersion = TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber);    
+	}
+
+//
+// DSVPHostFsDriverFactory::Create
+//
+TInt DSVPHostFsDriverFactory::Create(DLogicalChannelBase*& aChannel)
+	{
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsDriverFactory::Create()");
+
+	aChannel = new DSVPHostFsChannel(this);
+	
+	return aChannel ? KErrNone : KErrNoMemory;
+	}
+
+//
+// DSVPHostFsDriverFactory::Install
+//
+TInt DSVPHostFsDriverFactory::Install()
+	{
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsDriverFactory::Install()");
+
+	return(SetName(&KSVPHostFsDriverName));
+	}
+
+//
+// DSVPHostFsDriverFactory::Install
+//
+void DSVPHostFsDriverFactory::GetCaps(TDes8& aDes) const
+	{
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsDriverFactory::GetCaps()");
+
+	TCapsSVPHostFsDriver b;
+	b.iVersion = TVersion(KMajorVersionNumber, KMinorVersionNumber, KBuildVersionNumber);
+	aDes.FillZ(aDes.MaxLength());
+	aDes.Copy((TUint8 *)&b, Min(aDes.MaxLength(), sizeof(b)));
+	}
+
+
+/////////////////////////////////////////////////////////////////////////
+//
+// DSVPHostFsChannel implementation
+//
+/////////////////////////////////////////////////////////////////////////
+
+//
+// DSVPHostFsChannel constructor
+//
+DSVPHostFsChannel::DSVPHostFsChannel(DLogicalDevice* aLogicalDevice)
+	{
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DSVPHostFsChannel()");
+
+	iDevice = aLogicalDevice;
+	
+	iClientThread = &Kern::CurrentThread();
+	iClientThread->Open();
+	}
+
+//
+// DSVPHostFsChannel destructor
+//
+DSVPHostFsChannel::~DSVPHostFsChannel()
+	{
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::~DSVPHostFsChannel()");
+	Kern::SafeClose((DObject*&)iClientThread, NULL);
+	}
+
+//
+// DSVPHostFsChannel::DoCreate
+//
+TInt DSVPHostFsChannel::DoCreate(TInt /*aUnit*/, const TDesC* anInfo, const TVersion& aVer)
+	{
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DoCreate()");
+
+  	if (!Kern::QueryVersionSupported(TVersion(KMajorVersionNumber, KMinorVersionNumber, KBuildVersionNumber), aVer))
+		return KErrNotSupported; 
+  	
+		       
+	//Setup the driver for receiving client messages
+	SetDfcQ(Kern::DfcQue0());
+	iMsgQ.Receive();  	
+
+	SetUpDrives();
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DoCreate()- checking device");
+	TUint id = SVPReadReg(KHwSVPHostFileSystemDevice, EDeviceID);
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DoCreate()- checked device- 0x%08x -expected 0x%08x", 
+		id, SVP_HOST_FS_DEVICE_ID);
+	return id == SVP_HOST_FS_DEVICE_ID ? KErrNone :	KErrHardwareNotAvailable;
+	}
+
+TInt DSVPHostFsChannel::SetUpDrives()
+	{
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::SetUpDrives() @ 0x%08x", KHwSVPPlatformDevice) ;
+	TUint32 platId = SVPReadReg(KHwSVPPlatformDevice, EDeviceID); 
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::SetUpDrives()- checked device- 0x%08x -expected 0x%08x", 
+		platId, SVP_PLATFORM_DEVICE_ID);
+	if (platId != SVP_PLATFORM_DEVICE_ID) return KErrHardwareNotAvailable;
+
+	TUint32 * fdt = (TUint32 *)((char *)(SVPReadReg(KHwSVPPlatformDevice, ETreeStart) + KHwSVPPlatformDevice)); 
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::SetUpDrives()- device tree @ 0x%08x", fdt);
+
+	// Iteratate over the tree looking for "syborg,hostfs" nodes.
+	const char * compatible = "syborg,hostfs" ; 
+	int offset = fdt_node_offset_by_compatible(fdt, -1, compatible);
+	while (offset != -FDT_ERR_NOTFOUND) 
+		{
+		if (offset < 0)
+			{
+			DP("FDT: Node not found %d", offset) ;
+			return KErrHardwareNotAvailable	; 
+			}
+
+		int lenp1, lenp2 = 0; 
+		TUint32 * deviceAddressp = (TUint32 *)fdt_getprop(fdt,offset,"reg",&lenp1); 
+
+		if (!deviceAddressp)
+			{
+			DP("FDT format error: reg %d", lenp1);
+			return KErrHardwareNotAvailable	; 
+			}
+
+
+		TUint32 * driveNumberp = (TUint32 *)fdt_getprop(fdt,offset,"drive-number",&lenp2);
+		if (!driveNumberp)
+			{
+			DP("FDT format error: drive-number %d", lenp2);
+			return KErrHardwareNotAvailable	; 
+			}
+		TUint32 deviceAddressPhys = bswap_32(*deviceAddressp);
+
+#define PhysicalToLinear(addr) ((addr & (~(Epoc::LinearToPhysical(KPrimaryIOBase)))) | KPrimaryIOBase)
+	
+		TUint32 deviceAddressLin = PhysicalToLinear(deviceAddressPhys) ; 
+		TUint32 driveNumber = bswap_32(*driveNumberp) ;
+		DP("FDT: dev address phys 0x%08x lin 0x%08x len1 %d drive number %08x len2 %d", 
+			deviceAddressPhys, deviceAddressLin, lenp1, driveNumber, lenp2) ; 
+		TUint32 fsId = SVPReadReg(deviceAddressLin, EDeviceID) ; 
+		DP("FDT: dev id 0x%08x", fsId) ; 
+		if (fsId != SVP_HOST_FS_DEVICE_ID) return KErrHardwareNotAvailable ;
+
+		// we have a disagreement about the base number of the drives: 0 or 1?
+		iDriveMap[driveNumber-1] = deviceAddressLin ; 
+		offset = fdt_node_offset_by_compatible(fdt, offset, compatible);
+		}
+	return KErrNone;
+	}
+	
+//
+// DSVPHostFsChannel::DoCancel
+//
+void DSVPHostFsChannel::DoCancel(TInt aReqNo)
+	{
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DoCancel() %x(%d)", aReqNo, aReqNo);
+	}
+
+//
+// DSVPHostFsChannel::DoRequest
+//
+TInt DSVPHostFsChannel::DoRequest(TInt aReqNo, TRequestStatus* aStatus, TAny* a1, TAny* a2)
+	{
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DoRequest() %x(%d)", aReqNo, aReqNo);
+
+	TInt err = KErrGeneral;         
+
+	(void)aStatus;
+
+	switch(aReqNo)
+		{
+	        case RSVPHostFsDriver::EMkDir:
+			{
+			err = MkDir((TSVPHostFsMkDirInfo*)a1);
+			break;
+			}
+	        case RSVPHostFsDriver::ERmDir:
+			{
+			err = RmDir((TSVPHostFsRmDirInfo*)a1);
+			break;
+			}
+	        case RSVPHostFsDriver::EDelete:
+			{
+			err = Delete((TSVPHostFsDeleteInfo*)a1);
+			break;
+			}
+	        case RSVPHostFsDriver::ERename:
+			{
+			err = Rename((TSVPHostFsRenameInfo*)a1);
+			break;
+			}
+	        case RSVPHostFsDriver::EReplace:
+			{
+			err = Replace((TSVPHostFsReplaceInfo*)a1);
+			break;
+			}
+	        case RSVPHostFsDriver::EEntry:
+			{
+			err = Entry((TSVPHostFsEntryInfo*)a1);
+			break;
+			}
+	        case RSVPHostFsDriver::ESetEntry:
+			{
+			err = SetEntry((TSVPHostFsSetEntryInfo*)a1);
+			break;
+			}
+	        case RSVPHostFsDriver::EFileOpen:
+			{
+			err = FileOpen((TSVPHostFsFileOpenInfo*)a1);
+			break;
+			}
+	        case RSVPHostFsDriver::EDirOpen:
+			{
+			err = DirOpen((TSVPHostFsDirOpenInfo*)a1);
+			break;
+			}
+	        case RSVPHostFsDriver::EFileClose:
+			{
+			err = FileClose((TUint32)a1, (TUint32)a2);
+			break;
+			}
+	        case RSVPHostFsDriver::EFileRead:
+			{
+			err = FileRead((TSVPHostFsFileReadInfo*)a1);
+			break;
+			}
+	        case RSVPHostFsDriver::EFileWrite:
+			{
+			err = FileWrite((TSVPHostFsFileWriteInfo*)a1);
+			break;
+			}
+	        case RSVPHostFsDriver::EFileSetSize:
+			{
+			err = FileSetSize((TSVPHostFsFileSetSizeInfo*)a1);
+			break;
+			}
+	        case RSVPHostFsDriver::EFileFlushAll:
+			{
+		    err = Flush((TUint32)a1);
+			break;
+			}
+	        case RSVPHostFsDriver::EDirClose:
+			{
+		        err = DirClose((TUint32)a1, (TUint32)a2);
+			break;
+			}
+	        case RSVPHostFsDriver::EDirRead:
+			{
+		        err = DirRead((TSVPHostFsDirReadInfo*)a1);
+			break;
+			}
+	        case RSVPHostFsDriver::EGetDeviceID:
+			{
+		  err = GetID((TUint32)a1, (TUint32*)a2); 
+			break;
+			}
+	        case RSVPHostFsDriver::EGetDriveMap:
+			{
+		        err = GetDriveMap((TUint32*)a1);
+			break;
+			}
+
+		default:
+			{
+			err = KErrGeneral;
+			}
+		}
+	
+	if (KErrNone != err)
+		{
+		DP("Error %d from DoRequest", err);
+		}
+	
+	return err;
+	}
+
+//
+// DSVPHostFsChannel::DoControl
+//
+TInt DSVPHostFsChannel::DoControl(TInt aFunction, TAny* a1, TAny* a2)
+	{
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DoControl()");
+
+	DP("DoControl Function %d", aFunction);
+
+	TInt err = KErrGeneral;         
+
+	/* There should be a good reason to use a control rather than a request. */
+
+	if (KErrNone != err)
+		{
+		DP("** (SVPHOSTFSDRIVER) Error %d from control function", err);
+		}
+	
+	return err;
+	}
+
+void DSVPHostFsChannel::HandleMsg(TMessageBase* aMsg)
+	{
+	
+	TThreadMessage& m = *(TThreadMessage*)aMsg;
+	TInt id = m.iValue;
+
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::HandleMsg() %x(%d)", id, id);
+
+	if (id == (TInt)ECloseMsg)
+		{
+		m.Complete(KErrNone, EFalse); 
+		return;
+		}
+	if (id == KMaxTInt)
+		{
+		// DoCancel
+		DoCancel(m.Int0());
+		m.Complete(KErrNone, ETrue); 
+		return;
+		}
+	if (id < 0)
+		{
+		// DoRequest
+		TRequestStatus* pStatus = (TRequestStatus*)m.Ptr0();
+		TInt r = DoRequest(~id, pStatus, m.Ptr1(), m.Ptr2());
+		//		if (r != KErrNone)
+		Kern::RequestComplete(iClientThread,pStatus,r);
+		m.Complete(KErrNone, ETrue);
+		}
+	else
+		{
+		// DoControl
+		TInt r = DoControl(id, m.Ptr0(), m.Ptr1());
+		m.Complete(r, ETrue);
+		}
+	}
+
+TInt DSVPHostFsChannel::MkDir(TSVPHostFsMkDirInfo* aInfo)
+	{
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::MkDir()");
+
+	TSVPHostFsMkDirInfo info;
+	TInt err = KErrNone;
+
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsMkDirInfo)));
+
+	if (!info.iName)
+		return KErrArgument;
+
+	TUint16 pathData[KMaxPath];
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iName, (TUint8*)pathData, info.iLength*2));
+	
+	TUint32 device = iDriveMap[info.iDrive];
+	SVPWriteReg(device, EArg0, Epoc::LinearToPhysical((TUint32)pathData));
+	SVPWriteReg(device, EArg1, info.iLength);
+	SVPWriteReg(device, EArg2, info.iFlags);
+	SVPInvoke(device, RSVPHostFsDriver::EMkDir);
+
+	return SVPReadReg(device, EResult);
+
+	}
+
+TInt DSVPHostFsChannel::RmDir(TSVPHostFsRmDirInfo* aInfo)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::RmDir()");
+
+	TSVPHostFsRmDirInfo info;
+	TInt err = KErrNone;
+
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsRmDirInfo)));
+
+	if (!info.iName)
+		return KErrArgument;
+
+	TUint16 pathData[KMaxPath];
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iName, (TUint8*)pathData, info.iLength*2));
+
+	TUint32 device = iDriveMap[info.iDrive];
+	SVPWriteReg(device, EArg0, Epoc::LinearToPhysical((TUint32)pathData));
+	SVPWriteReg(device, EArg1, info.iLength);
+	SVPInvoke(device, RSVPHostFsDriver::ERmDir);
+
+	return SVPReadReg(device, EResult);
+
+	}
+
+TInt DSVPHostFsChannel::Delete(TSVPHostFsDeleteInfo* aInfo)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::Delete()");
+
+	TSVPHostFsDeleteInfo info;
+	TInt err = KErrNone;
+
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsDeleteInfo)));
+
+	if (!info.iName)
+		return KErrArgument;
+
+	TUint16 pathData[KMaxPath];
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iName, (TUint8*)pathData, info.iLength*2));
+
+	TUint32 device = iDriveMap[info.iDrive];
+	SVPWriteReg(device, EArg0, Epoc::LinearToPhysical((TUint32)pathData));
+	SVPWriteReg(device, EArg1, info.iLength);
+	SVPInvoke(device, RSVPHostFsDriver::EDelete);
+
+	return SVPReadReg(device, EResult);
+
+	}
+
+TInt DSVPHostFsChannel::Rename(TSVPHostFsRenameInfo* aInfo)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::Rename()");
+
+	TSVPHostFsRenameInfo info;
+	TInt err = KErrNone;
+
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsRenameInfo)));
+
+	if (!info.iOldName)
+		return KErrArgument;
+
+	if (!info.iNewName)
+		return KErrArgument;
+
+	TUint16 oldPathData[KMaxPath];
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iOldName, (TUint8*)oldPathData, info.iOldLength*2));
+
+	TUint16 newPathData[KMaxPath];
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iNewName, (TUint8*)newPathData, info.iNewLength*2));
+
+	TUint32 device = iDriveMap[info.iDrive];
+	SVPWriteReg(device, EArg0, Epoc::LinearToPhysical((TUint32)oldPathData));
+	SVPWriteReg(device, EArg1, info.iOldLength);
+	SVPWriteReg(device, EArg2, Epoc::LinearToPhysical((TUint32)newPathData));
+	SVPWriteReg(device, EArg3, info.iNewLength);
+	SVPInvoke(device, RSVPHostFsDriver::ERename);
+
+	return SVPReadReg(device, EResult);
+
+	}
+
+TInt DSVPHostFsChannel::Replace(TSVPHostFsReplaceInfo* aInfo)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::Replace()");
+
+	TSVPHostFsReplaceInfo info;
+	TInt err = KErrNone;
+
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsReplaceInfo)));
+
+	if (!info.iOldName)
+		return KErrArgument;
+
+	if (!info.iNewName)
+		return KErrArgument;
+
+	TUint16 oldPathData[KMaxPath];
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iOldName, (TUint8*)oldPathData, info.iOldLength*2));
+
+	TUint16 newPathData[KMaxPath];
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iNewName, (TUint8*)newPathData, info.iNewLength*2));
+
+	TUint32 device = iDriveMap[info.iDrive];
+	SVPWriteReg(device, EArg0, Epoc::LinearToPhysical((TUint32)oldPathData));
+	SVPWriteReg(device, EArg1, info.iOldLength);
+	SVPWriteReg(device, EArg2, Epoc::LinearToPhysical((TUint32)newPathData));
+	SVPWriteReg(device, EArg3, info.iNewLength);
+	SVPInvoke(device, RSVPHostFsDriver::EReplace);
+
+	return SVPReadReg(device, EResult);
+
+	}
+
+TInt DSVPHostFsChannel::Entry(TSVPHostFsEntryInfo* aInfo)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::Entry()");
+
+	TSVPHostFsEntryInfo info;
+	TInt err = KErrNone;
+
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsEntryInfo)));
+
+	if (!info.iName)
+		return KErrArgument;
+
+	TUint16 pathData[KMaxPath];
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iName, (TUint8*)pathData, info.iLength*2));
+
+	TUint32 device = iDriveMap[info.iDrive];
+	SVPWriteReg(device, EArg0, Epoc::LinearToPhysical((TUint32)pathData));
+	SVPWriteReg(device, EArg1, info.iLength);
+	SVPInvoke(device, RSVPHostFsDriver::EEntry);
+
+	RET_IF_ERROR(err, SVPReadReg(device, EResult));
+
+	TUint32 att = SVPReadReg(device, EArg0);
+	TUint32 modified = SVPReadReg(device, EArg1);
+	TUint32 filesize = SVPReadReg(device, EArg2);
+	// TODO: Yuk! Hack alert! Say EWindows for now. But really should probably say EUnknown,
+	// since the device won't tell us. Not sure if it can (easily) given remote mounting etc.
+	// However this probably delays the problem. On the other hand it is probably best to make
+	// the file service guess, since it need only guess once, and cache its guess.
+	TUint32 filetimetype = EWindows;
+
+	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iAtt, (TUint8*)&att, sizeof(att)));
+	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iModified, (TUint8*)&modified, sizeof(modified)));
+	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iSize, (TUint8*)&filesize, sizeof(filesize)));
+	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iTimeType, (TUint8*)&filetimetype, sizeof(filetimetype)));
+	return KErrNone;
+	}
+
+TInt DSVPHostFsChannel::SetEntry(TSVPHostFsSetEntryInfo* aInfo)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::SetEntry()");
+	return KErrNotSupported;
+	}
+
+TInt DSVPHostFsChannel::Flush(TUint32 aDrive)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::Flush()");
+	TUint32 device = iDriveMap[aDrive];
+	SVPInvoke(device, RSVPHostFsDriver::EFileFlushAll);
+
+	return KErrNone;
+	}
+
+TInt DSVPHostFsChannel::DirOpen(TSVPHostFsDirOpenInfo* aInfo)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DirOpen()");
+
+	TSVPHostFsDirOpenInfo info;
+	TInt err = KErrNone;
+
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsDirOpenInfo)));
+
+	if (!info.iName)
+		return KErrArgument;
+
+	TUint16 pathData[KMaxPath];
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iName, (TUint8*)pathData, info.iLength*2));
+
+	TUint32 device = iDriveMap[info.iDrive];
+	SVPWriteReg(device, EArg0, Epoc::LinearToPhysical((TUint32)pathData));
+	SVPWriteReg(device, EArg1, info.iLength);
+	SVPInvoke(device, RSVPHostFsDriver::EDirOpen);
+
+	RET_IF_ERROR(err, SVPReadReg(device, EResult));
+
+	// handle is in arg 0
+	TUint32 handle = SVPReadReg(device, EArg0);
+	return Kern::ThreadRawWrite(iClientThread, &aInfo->iHandle, (TUint8*)&handle, sizeof(handle));
+	}
+
+TInt DSVPHostFsChannel::FileOpen(TSVPHostFsFileOpenInfo* aInfo)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileOpen()");
+
+	TSVPHostFsFileOpenInfo info;
+	TInt err = KErrNone;
+
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsFileOpenInfo)));
+
+	if (!info.iName)
+		return KErrArgument;
+
+	TUint16 pathData[KMaxPath];
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, info.iName, (TUint8*)pathData, info.iLength*2));
+
+	TUint32 device = iDriveMap[info.iDrive];
+	SVPWriteReg(device, EArg0, Epoc::LinearToPhysical((TUint32)pathData));
+	SVPWriteReg(device, EArg1, info.iLength);
+	SVPWriteReg(device, EArg2, info.iMode);
+	SVPWriteReg(device, EArg3, info.iOpen);
+	SVPInvoke(device, RSVPHostFsDriver::EFileOpen);
+
+	RET_IF_ERROR(err, SVPReadReg(device, EResult));
+
+	TUint32 handle = SVPReadReg(device, EArg0);
+	TUint32 att = SVPReadReg(device, EArg1);
+	TUint32 modified = SVPReadReg(device, EArg2);
+	TUint32 size = SVPReadReg(device, EArg3);
+	TUint32 timeType = EWindows;
+
+	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iHandle, (TUint8*)&handle, sizeof(handle)));
+	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iAtt, (TUint8*)&att, sizeof(att)));
+	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iModified, (TUint8*)&modified, sizeof(modified)));
+	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iSize, (TUint8*)&size, sizeof(size)));
+	return Kern::ThreadRawWrite(iClientThread, &aInfo->iTimeType, (TUint8*)&timeType, sizeof(timeType));
+
+	}
+
+TInt DSVPHostFsChannel::FileClose(TUint32 aDrive, TUint32 aHandle)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileClose()");
+
+	TUint32 device = iDriveMap[aDrive];
+	SVPWriteReg(device, EArg0, aHandle);
+	SVPInvoke(device, RSVPHostFsDriver::EFileClose);
+	return SVPReadReg(device, EResult);
+	}
+
+TInt DSVPHostFsChannel::FileRead(TSVPHostFsFileReadInfo* aInfo)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileRead()");
+
+	char buf[0x400];
+	TSVPHostFsFileReadInfo info;
+	TInt err = KErrNone;
+
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsFileReadInfo)));
+
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileRead handle %d length %d pos %d phys_addr 0x%08x info.iBuf 0x%08x",
+	   info.iHandle, info.iLength, info.iPos, Epoc::LinearToPhysical((TUint32)buf), info.iBuf);
+
+	TUint32 device = iDriveMap[info.iDrive];
+	SVPWriteReg(device, EArg0, info.iHandle);
+	SVPWriteReg(device, EArg1, info.iPos);	
+	SVPWriteReg(device, EArg2, Epoc::LinearToPhysical((TUint32)buf));
+	SVPWriteReg(device, EArg3, info.iLength);	
+	SVPInvoke(device, RSVPHostFsDriver::EFileRead);
+
+	RET_IF_ERROR(err, SVPReadReg(device, EResult));
+
+	TUint32 len = SVPReadReg(device, EArg0);
+
+	DP("** (SVPHOSTFSDRIVER)  Read %d bytes", len);
+
+	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iLength, (TUint8*)&len, sizeof(len)));
+	return Kern::ThreadRawWrite(iClientThread, (TUint8*)info.iBuf, (TUint8*)&buf, len);
+	}
+
+TInt DSVPHostFsChannel::FileWrite(TSVPHostFsFileWriteInfo* aInfo)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileWrite()");
+
+	char buf[0x400];
+	TSVPHostFsFileWriteInfo info;
+	TInt err = KErrNone;
+
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsFileWriteInfo)));
+
+	DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileWrite handle %d length %d pos %d phys_addr 0x%08x info.iBuf 0x%08x", 
+	   info.iHandle, info.iLength, info.iPos, Epoc::LinearToPhysical((TUint32)buf), info.iBuf);
+
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, (TUint8 *)info.iBuf, buf, info.iLength));
+
+	TUint32 device = iDriveMap[info.iDrive];
+	SVPWriteReg(device, EArg0, info.iHandle);
+	SVPWriteReg(device, EArg1, info.iPos);	
+	SVPWriteReg(device, EArg2, Epoc::LinearToPhysical((TUint32)buf));
+	SVPWriteReg(device, EArg3, info.iLength);	
+	SVPInvoke(device, RSVPHostFsDriver::EFileWrite);
+
+	RET_IF_ERROR(err, SVPReadReg(device, EResult));
+
+	TUint32 len = SVPReadReg(device, EArg0);
+
+	DP("** (SVPHOSTFSDRIVER)  Wrote %d bytes", len);
+
+        return Kern::ThreadRawWrite(iClientThread, &aInfo->iLength, (TUint8*)&len, sizeof(len));
+	}
+
+TInt DSVPHostFsChannel::FileSetSize(TSVPHostFsFileSetSizeInfo* aInfo)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileSetSize()");
+  
+	TSVPHostFsFileSetSizeInfo info;
+	TInt err = KErrNone;
+
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsFileSetSizeInfo)));
+
+	TUint32 device = iDriveMap[info.iDrive];
+	SVPWriteReg(device, EArg0, info.iHandle);
+	SVPWriteReg(device, EArg1, info.iLength);
+	SVPInvoke(device, RSVPHostFsDriver::EFileSetSize);
+
+	TUint32 res = SVPReadReg(device, EResult);
+
+	RET_IF_ERROR(err, res);
+
+	return res;
+	}
+
+TInt DSVPHostFsChannel::FileSetEntry(TSVPHostFsSetEntryInfo* aInfo)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileSetEntry()");
+
+	return KErrNotSupported;
+	}
+
+TInt DSVPHostFsChannel::DirClose(TUint32 aDrive, TUint32 aHandle)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DirClose()");
+
+	TUint32 device = iDriveMap[aDrive];
+	SVPWriteReg(device, EArg0, aHandle);
+	SVPInvoke(device, RSVPHostFsDriver::EDirClose);
+	return SVPReadReg(device, EResult);
+	}
+
+TInt DSVPHostFsChannel::DirRead(TSVPHostFsDirReadInfo* aInfo)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::DirRead()");
+
+	TUint16 name[KMaxPath];
+	TSVPHostFsDirReadInfo info;
+	TInt err = KErrNone;
+
+	RET_IF_ERROR(err, Kern::ThreadRawRead(iClientThread, aInfo, (TUint8*)&info, sizeof(TSVPHostFsDirReadInfo)));
+
+
+	TUint32 device = iDriveMap[info.iDrive];
+	SVPWriteReg(device, EArg0, info.iHandle);
+	SVPWriteReg(device, EArg1, Epoc::LinearToPhysical((TUint32)name));
+	SVPWriteReg(device, EArg2, KMaxPath);
+	SVPInvoke(device, RSVPHostFsDriver::EDirRead);
+
+	RET_IF_ERROR(err, SVPReadReg(device, EResult));
+
+	TUint32 att = SVPReadReg(device, EArg0);
+	TUint32 modified = SVPReadReg(device, EArg1);
+	TUint32 filesize = SVPReadReg(device, EArg2);
+	TUint32 namesize = SVPReadReg(device, EArg3);
+	// TODO: Yuk! Hack alert! Say EWindows for now. But really should probably say EUnknown,
+	// since the device won't tell us. Not sure if it can (easily) given remote mounting etc.
+	// However this probably delays the problem. On the other hand it is probably best to make
+	// the file service guess, since it need only guess once, and cache its guess.
+	TUint32 filetimetype = EWindows;
+
+	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iAtt, (TUint8*)&att, sizeof(att)));
+	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iModified, (TUint8*)&modified, sizeof(modified)));
+	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iSize, (TUint8*)&filesize, sizeof(filesize)));
+	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iTimeType, (TUint8*)&filetimetype, sizeof(filetimetype)));
+	RET_IF_ERROR(err, Kern::ThreadRawWrite(iClientThread, &aInfo->iLength, (TUint8*)&namesize, sizeof(namesize)));
+	return Kern::ThreadRawWrite(iClientThread, &aInfo->iName, (TUint8*)&name, namesize * sizeof(TUint16));
+	}
+
+TInt DSVPHostFsChannel::GetID(TUint32 aDrive, TUint32 * aId)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::GetID");
+	TUint32 device = iDriveMap[aDrive];
+        TUint32 id = SVPReadReg(device, EDeviceID);
+	return Kern::ThreadRawWrite(iClientThread, aId, &id, sizeof(TUint32));
+	}
+
+TInt DSVPHostFsChannel::GetDriveMap(TAny * aMap)
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::GetDriveMap");
+	return Kern::ThreadRawWrite(iClientThread, aMap, iDriveMap, sizeof(iDriveMap));
+	}
+
+DECLARE_EXTENSION_LDD()
+	{
+        DP("** (SVPHOSTFSDRIVER) DSVPHostFsDriverFactory created");
+        return new DSVPHostFsDriverFactory;
+	}
+
+DECLARE_STANDARD_EXTENSION()
+	{
+        DP("** (SVPHOSTFSDRIVER) SVPHostFs extension entry point");
+
+	DP("** (SVPHOSTFSDRIVER) Creating LocDrv device");
+	TInt r;
+	DSVPHostFsDriverFactory* device = new DSVPHostFsDriverFactory;
+	if (device==NULL)
+		r=KErrNoMemory;
+	else
+		r=Kern::InstallLogicalDevice(device);
+
+	DP("** (SVPHOSTFSDRIVER) Installing LocDrv device in kernel returned %d",r);
+
+	return r;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/driver/svphostfsdriver.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,79 @@
+/*
+* 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:
+*
+*/
+
+#ifndef __SVPHOSTFSDRIVER_H__
+#define __SVPHOSTFSDRIVER_H__
+
+
+#include "rsvphostfsdriver.h"
+
+// Debug messages
+//#define SVPDBG
+#ifdef SVPDBG
+#define LOG_MSG(x) Kern::Printf(x)
+#define LOG_MSG2(x, y) Kern::Printf(x, y)
+#else
+#define LOG_MSG(x)
+#define LOG_MSG2(x, y)
+#endif
+
+
+//
+// class DSVPHostFsDriverFactory
+//
+class DSVPHostFsDriverFactory : public DLogicalDevice
+{
+public:
+
+	DSVPHostFsDriverFactory();
+	virtual TInt Install();
+	virtual void GetCaps(TDes8& aDes) const;
+	virtual TInt Create(DLogicalChannelBase*& aChannel);
+};
+
+//
+// DSVPHostFsChannel
+//
+class DSVPHostFsChannel : public DLogicalChannel
+{
+public:
+
+	DSVPHostFsChannel(DLogicalDevice* aLogicalDevice);
+	~DSVPHostFsChannel();
+
+	virtual TInt DoCreate(TInt aUnit, const TDesC* anInfo, const TVersion& aVer);	
+	virtual void HandleMsg(TMessageBase* aMsg);
+	
+protected:
+	virtual void DoCancel(TInt aReqNo);
+	virtual TInt DoRequest(TInt aReqNo, TRequestStatus* aStatus, TAny* a1, TAny* a2);
+	virtual TInt DoControl(TInt aFunction, TAny *a1, TAny *a2);
+	
+private:
+	TInt DirOpen(TSVPHostFsDirOpenInfo* aInfo);
+	TInt DirClose(TUint32 aHandle);
+	TInt DirRead(TSVPHostFsDirReadInfo* aInfo);
+
+private:
+	DThread* iClientThread;
+	
+	
+	TDfcQue* iDFCQue;
+
+};
+
+#endif //__SVPHOSTFSDRIVER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/fs/rsvphostfsdriver.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,167 @@
+/*
+* 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:
+*
+*/
+
+#include <f32file.h>
+#include <f32fsys.h>
+#include <f32ver.h>
+#include <e32uid.h>
+
+#include <rsvphostfsdriver.h>
+
+#include "svphostfsy.h"
+
+#ifdef DP
+#undef DP
+#define DP(f...)
+#endif
+
+TInt RSVPHostFsDriver::Open()
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::Open()"));
+	return DoCreate(KSVPHostFsDriverName, TVersion(KMajorVersionNumber, KMinorVersionNumber, KBuildVersionNumber), KNullUnit, NULL, NULL);
+	}
+
+TInt RSVPHostFsDriver::MkDir(TSVPHostFsMkDirInfo& aInfo)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::MkDir()"));
+	return DoSVPRequest(EMkDir, &aInfo);
+	}
+
+TInt RSVPHostFsDriver::RmDir(TSVPHostFsRmDirInfo& aInfo)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::RmDir()"));
+	return DoSVPRequest(ERmDir, &aInfo);
+	}
+
+TInt RSVPHostFsDriver::Delete(TSVPHostFsDeleteInfo& aInfo)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::Delete()"));
+	return DoSVPRequest(EDelete, &aInfo);
+	}
+
+TInt RSVPHostFsDriver::Rename(TSVPHostFsRenameInfo& aInfo)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::Rename()"));
+	return DoSVPRequest(ERename, &aInfo);
+	}
+
+TInt RSVPHostFsDriver::Replace(TSVPHostFsReplaceInfo& aInfo)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::Replace()"));
+	return DoSVPRequest(EReplace, &aInfo);
+	}
+
+TInt RSVPHostFsDriver::ReadUid(const TDesC& /*aName*/,TEntry& /*anEntry*/)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::ReadUid()"));
+	return KErrNone;
+	}
+
+TInt RSVPHostFsDriver::Entry(TSVPHostFsEntryInfo& aInfo)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::Entry()"));
+	return DoSVPRequest(EEntry, &aInfo);
+	}
+
+TInt RSVPHostFsDriver::SetEntry(TSVPHostFsSetEntryInfo &aInfo)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::SetEntry()"));
+	return  DoSVPRequest(ESetEntry, &aInfo);
+	}
+
+TInt RSVPHostFsDriver::FileOpen(TSVPHostFsFileOpenInfo& aInfo)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FileOpen()"));
+	return DoSVPRequest(EFileOpen, &aInfo);
+	}
+
+TInt RSVPHostFsDriver::FileClose(TUint32 aDrive, TUint32 aHandle)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FileClose()"));
+	return DoSVPRequest(EFileClose, (TAny *)aDrive, (TAny *)aHandle);
+	}
+
+TInt RSVPHostFsDriver::FileRead(TSVPHostFsFileReadInfo& aInfo)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FileRead()"));
+	return  DoSVPRequest(EFileRead, &aInfo);
+	}
+
+TInt RSVPHostFsDriver::FileWrite(TSVPHostFsFileWriteInfo& aInfo)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FileWrite()"));
+	return  DoSVPRequest(EFileWrite, &aInfo);
+	}
+
+TInt RSVPHostFsDriver::FileSetSize(TSVPHostFsFileSetSizeInfo &aInfo)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FileSetSize()"));
+	return  DoSVPRequest(EFileSetSize, &aInfo);
+	}
+
+TInt RSVPHostFsDriver::FileSetEntry(TSVPHostFsSetEntryInfo &aInfo)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FileSetEntry()"));
+	return  KErrNotSupported;
+	}
+
+TInt RSVPHostFsDriver::FlushData(TUint32 aDrive)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FlushData()"));
+	return DoSVPRequest(EFileFlushAll, (TAny *)aDrive);
+	}
+
+TInt RSVPHostFsDriver::FlushAll(TUint32 aDrive)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FlushAll()"));
+	return DoSVPRequest(EFileFlushAll, (TAny *)aDrive);
+	}
+
+TInt RSVPHostFsDriver::DirOpen(TSVPHostFsDirOpenInfo& aInfo)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::DirOpen()"));
+	return DoSVPRequest(EDirOpen, &aInfo);
+	}
+
+TInt RSVPHostFsDriver::DirClose(TUint32 aDrive, TUint32 aHandle)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::DirClose()"));
+	return DoSVPRequest(EDirClose, (TAny *)aDrive, (TAny *)aHandle);
+	}
+
+TInt RSVPHostFsDriver::DirRead(TSVPHostFsDirReadInfo& aInfo)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::DirRead()"));
+	return  DoSVPRequest(EDirRead, &aInfo);
+	}
+
+TUint32 RSVPHostFsDriver::GetDeviceID(TUint32 aDrive)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::GetDeviceID()"));
+
+	TUint32 id;
+	TInt r = DoSVPRequest(EGetDeviceID, (TAny *) aDrive, &id);
+	return (r != KErrNone) ? r : id;
+	}
+
+TInt RSVPHostFsDriver::GetDriveMap(TUint32 * aMap)
+	{
+	DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::GetDeviceID()"));
+
+	return DoSVPRequest(EGetDriveMap, (TAny *)aMap);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/fs/svphost.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,691 @@
+/*
+* 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: f32test\fsstress\t_remote.cpp
+*
+*/
+
+#if !defined(__F32FILE_H__)
+#include <f32file.h>
+#endif
+#if !defined(__E32TEST_H__)
+#include <e32test.h>
+#endif
+#if !defined(__T_STD_H__)
+#include "t_std.h"
+#endif
+#if !defined(__T_REMFSY_H__)
+#include "t_remfsy.h"
+#endif
+
+GLDEF_D RTest test(_L("T_REMOTE - DEFAULT DRIVE"));
+GLDEF_D RTest testx(_L("X Drive (WINS) <-> D Drive (MARM)"));
+GLDEF_D RTest testy(_L("Y Drive (WINS) <-> C Drive (MARM)"));
+GLDEF_D RTest testq(_L("REMOTE Q Drive"));
+
+LOCAL_D TFileName gBatchFile;
+LOCAL_D TBool gRunByBatch=EFalse;
+
+GLDEF_D TFileName gExeFileName(RProcess().FileName());
+
+/*
+INFORMATION - What this test is all about
+
+T_REMOTE tests the asynchronous remote file system implementation, introduced in
+F32 release 110 and refined in release 112.  The test sets up and mounts four drives,
+the default drive (usually C on WINS and MARM), a remote drive (Q) and two others, on
+MARM these are C and D, on WINS these are X and Y.  The remote filesystem is the only
+system treated asynchronously by F32.  
+
+The test sets up a thread for each drive and runs a number of tests on each drive.
+In the remote filesystem case, a dummy filesystem has been implemented, this is built
+as T_REMFSY.fsy.  The tests are designed to stress a number of fileserver API
+functions.  The test MultipleSessions() is adapted from another F32 test T_SESSION.
+It sets up an array of fileserver connections and then uses each connection to run
+a number of tests - alternating between connections to stress F32 as it does so.  The
+test should therefore be testing multiple fileserver connections on multiple drives -
+the remote filesystem running concurrently with the other drives.  There should be
+no failure or confusion between fileserver sessions.  Each drive has a separate test
+console which should complete successfully.
+
+NOTE: TO RUN THIS CARD SUCCESSFULLY ON MARM A CF CARD IS REQUIRED
+
+*/
+
+LOCAL_C void Test0(RTest& aTest)
+//
+//	Scan for open files - no sessions
+//	
+	{
+	aTest.Next(_L("Scan for open files with no sessions open"));
+	CFileList* list;
+	TOpenFileScan fileScan(TheFs);
+	fileScan.NextL(list);
+	if (list==NULL)
+		return;
+	TInt count=list->Count();
+	if (count==1)
+		{
+		gRunByBatch=ETrue;
+		gBatchFile=(*list)[0].iName;
+		delete list;
+		fileScan.NextL(list);
+		if (list==NULL)
+			return;
+		count=list->Count();
+		}
+	while (count--)
+		{
+		TEntry entry=(*list)[count];
+		aTest.Printf(_L("%d) EntryName = %S\n"),count,&entry.iName);
+		}
+	//aTest.Printf(_L("Test will fail unless files are closed.\n"));
+	//aTest.Printf(_L("Press any key ...\n"));
+	//aTest.Getch();
+	}
+
+
+LOCAL_C void Test1()	
+//
+//	This test is only called by default drive
+//	Test OpenFileScan			
+//
+	{
+	test.Next(_L("Scan for open files - one session only"));
+
+	RFile file1,file2,file3;
+	TFileName fn;
+	fn = _L("Z:\\TEST\\T_FSRV.CPP");
+	fn[0] = gExeFileName[0];
+	TInt r=file1.Open(TheFs,fn,EFileRead|EFileShareReadersOnly);
+	test(r==KErrNone);
+	fn = _L("Z:\\TEST\\T_FILE.CPP");
+	fn[0] = gExeFileName[0];
+	r=file2.Open(TheFs,fn,EFileRead);
+	test(r==KErrNone);
+	fn = _L("Z:\\TEST\\T_FSRV.CPP");
+	fn[0] = gExeFileName[0];
+	r=file3.Open(TheFs,fn,EFileRead|EFileShareReadersOnly);
+	test(r==KErrNone);
+	
+	CFileList* list;
+	TOpenFileScan fileScan(TheFs);
+	fileScan.NextL(list);
+
+	if (gRunByBatch)
+		{
+		test(list!=NULL);
+		test(list->Count()==1);
+		TEntry entry=(*list)[0];
+		test(entry.iName.FindF(_L(".BAT"))>=0);
+		delete list;
+		fileScan.NextL(list);
+		}
+
+	test(list!=NULL);
+	TInt count=list->Count();
+	test(count==3);
+	TEntry entry=(*list)[0];
+	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
+	entry=(*list)[1];
+	test(entry.iName.FindF(_L("T_FILE.CPP"))>=0);
+	entry=(*list)[2];
+	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
+	TThreadId threadId=fileScan.ThreadId();
+	RThread current;
+	TThreadId currentId=current.Id();
+	test(threadId==currentId);
+	delete list;
+
+	fileScan.NextL(list);
+	test(list==NULL);
+
+	file1.Close();
+	file2.Close();
+	file3.Close();
+	}
+
+LOCAL_C void Test2()
+//
+// Test openfilescan - empty, full, empty.
+//
+	{
+	test.Next(_L("Scan for open files - empty sessions"));
+
+	RFs fs1,fs2,fs3,fs4;
+	TInt r=fs1.Connect();
+	test(r==KErrNone);
+	r=fs2.Connect();
+	test(r==KErrNone);
+	r=fs3.Connect();
+	test(r==KErrNone);
+	r=fs4.Connect();
+	test(r==KErrNone);
+
+	RFile file1,file2,file3;
+	TFileName fn;
+	fn = _L("Z:\\TEST\\T_FSRV.CPP");
+	fn[0] = gExeFileName[0];
+	r=file1.Open(fs2,fn,EFileRead|EFileShareReadersOnly);
+	test(r==KErrNone);
+	fn = _L("Z:\\TEST\\T_FILE.CPP");
+	fn[0] = gExeFileName[0];
+	r=file2.Open(fs2,fn,EFileRead);
+	test(r==KErrNone);
+	fn = _L("Z:\\TEST\\T_FSRV.CPP");
+	fn[0] = gExeFileName[0];
+	r=file3.Open(fs2,fn,EFileRead|EFileShareReadersOnly);
+	test(r==KErrNone);
+	
+	CFileList* list;
+	TOpenFileScan fileScan(TheFs);
+	fileScan.NextL(list);
+
+	if (gRunByBatch)
+		{
+		test(list!=NULL);
+		test(list->Count()==1);
+		TEntry entry=(*list)[0];
+		test(entry.iName.FindF(_L(".BAT"))>=0);
+		delete list;
+		fileScan.NextL(list);
+		}
+
+	test(list!=NULL);
+	TInt count=list->Count();
+	test(count==3);
+	TEntry entry=(*list)[0];
+	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
+	entry=(*list)[1];
+	test(entry.iName.FindF(_L("T_FILE.CPP"))>=0);
+	entry=(*list)[2];
+	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
+	TThreadId threadId=fileScan.ThreadId();
+	RThread current;
+	TThreadId currentId=current.Id();
+	test(threadId==currentId);
+	delete list;
+
+	fileScan.NextL(list);
+	test(list==NULL);
+
+	file1.Close();
+	file2.Close();
+	file3.Close();
+	fs1.Close();
+	fs2.Close();
+	fs3.Close();
+	fs4.Close();
+	}
+
+LOCAL_C void Test3()
+//
+// Test openfilescan - empty, full, empty full
+//
+	{
+	test.Next(_L("Scan for open files - multiple sessions"));
+
+	RFs fs1,fs2,fs3,fs4;
+	TInt r=fs1.Connect();
+	test(r==KErrNone);
+	r=fs2.Connect();
+	test(r==KErrNone);
+	r=fs3.Connect();
+	test(r==KErrNone);
+	r=fs4.Connect();
+	test(r==KErrNone);
+
+	RFile file1,file2,file3;
+	TFileName fn;
+	fn = _L("Z:\\TEST\\T_FSRV.CPP");
+	fn[0] = gExeFileName[0];
+	r=file1.Open(fs2,fn,EFileRead|EFileShareReadersOnly);
+	test(r==KErrNone);
+	fn = _L("Z:\\TEST\\T_FILE.CPP");
+	fn[0] = gExeFileName[0];
+	r=file2.Open(fs2,fn,EFileRead|EFileShareReadersOnly);
+	test(r==KErrNone);
+	fn = _L("Z:\\TEST\\T_FSRV.CPP");
+	fn[0] = gExeFileName[0];
+	r=file3.Open(fs2,fn,EFileRead|EFileShareReadersOnly);
+	test(r==KErrNone);
+	
+	r=file1.Open(fs4,fn,EFileRead|EFileShareReadersOnly);
+	test(r==KErrNone);
+	fn = _L("Z:\\TEST\\T_FILE.CPP");
+	fn[0] = gExeFileName[0];
+	r=file2.Open(fs4,fn,EFileRead|EFileShareReadersOnly);
+	test(r==KErrNone);
+	fn = _L("Z:\\TEST\\T_FSRV.CPP");
+	fn[0] = gExeFileName[0];
+	r=file3.Open(fs4,fn,EFileRead|EFileShareReadersOnly);
+	test(r==KErrNone);
+	
+	CFileList* list;
+	TOpenFileScan fileScan(TheFs);
+	fileScan.NextL(list);
+
+	if (gRunByBatch)
+		{
+		test(list!=NULL);
+		test(list->Count()==1);
+		TEntry entry=(*list)[0];
+		test(entry.iName.FindF(_L(".BAT"))>=0);
+		delete list;
+		fileScan.NextL(list);
+		}
+
+	test(list!=NULL);
+	TInt count=list->Count();
+	test(count==3);
+	TEntry entry=(*list)[0];
+	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
+	entry=(*list)[1];
+	test(entry.iName.FindF(_L("T_FILE.CPP"))>=0);
+	entry=(*list)[2];
+	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
+	TThreadId threadId=fileScan.ThreadId();
+	RThread current;
+	TThreadId currentId=current.Id();
+	test(threadId==currentId);
+	delete list;
+
+	fileScan.NextL(list);
+	test(list!=NULL);
+	count=list->Count();
+	test(count==3);
+	entry=(*list)[0];
+	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
+	entry=(*list)[1];
+	test(entry.iName.FindF(_L("T_FILE.CPP"))>=0);
+	entry=(*list)[2];
+	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
+	threadId=fileScan.ThreadId();
+	currentId=current.Id();
+	test(threadId==currentId);
+	delete list;
+
+	fileScan.NextL(list);
+	test(list==NULL);
+
+	file1.Close();
+	file2.Close();
+	file3.Close();
+	fs1.Close();
+	fs2.Close();
+	fs3.Close();
+	fs4.Close();
+	}
+
+LOCAL_C void Test4()
+//
+// Test openfilescan - rdirs, empty, full, empty rdirs.
+//
+	{
+	test.Next(_L("Scan for open files - check RDir sessions are ignored"));
+
+	RFs fs1,fs2,fs3,fs4;
+	TFileName fn;
+	TInt r=fs1.Connect();
+	test(r==KErrNone);
+	r=fs2.Connect();
+	test(r==KErrNone);
+	r=fs3.Connect();
+	test(r==KErrNone);
+	r=fs4.Connect();
+	test(r==KErrNone);
+
+	RDir dir1,dir2,dir3,dir4;
+	fn = _L("Z:\\TEST\\*.XDE");
+	fn[0] = gExeFileName[0];
+	r=dir1.Open(TheFs,fn,KEntryAttMaskSupported);
+	test(r==KErrNone);
+	r=dir2.Open(TheFs,fn,KEntryAttMaskSupported);
+	test(r==KErrNone);
+	r=dir3.Open(TheFs,fn,KEntryAttMaskSupported);
+	test(r==KErrNone);
+	r=dir4.Open(TheFs,fn,KEntryAttMaskSupported);
+	test(r==KErrNone);
+
+	RFile file1,file2,file3;
+	fn = _L("Z:\\TEST\\T_FSRV.CPP");
+	fn[0] = gExeFileName[0];
+	r=file1.Open(fs2,fn,EFileRead|EFileShareReadersOnly);
+	test(r==KErrNone);
+	fn = _L("Z:\\TEST\\T_FILE.CPP");
+	fn[0] = gExeFileName[0];
+	r=file2.Open(fs2,fn,EFileRead);
+	test(r==KErrNone);
+	fn = _L("Z:\\TEST\\T_FSRV.CPP");
+	fn[0] = gExeFileName[0];
+	r=file3.Open(fs2,fn,EFileRead|EFileShareReadersOnly);
+	test(r==KErrNone);
+	
+	RDir dir5,dir6,dir7,dir8;
+	fn = _L("Z:\\TEST\\*.XDE");
+	fn[0] = gExeFileName[0];
+	r=dir5.Open(fs4,fn,KEntryAttMaskSupported);
+	test(r==KErrNone);
+	r=dir6.Open(fs4,fn,KEntryAttMaskSupported);
+	test(r==KErrNone);
+	r=dir7.Open(fs4,fn,KEntryAttMaskSupported);
+	test(r==KErrNone);
+	r=dir8.Open(fs4,fn,KEntryAttMaskSupported);
+	test(r==KErrNone);
+
+	CFileList* list;
+	TOpenFileScan fileScan(TheFs);
+	fileScan.NextL(list);
+
+	if (gRunByBatch)
+		{
+		test(list!=NULL);
+		test(list->Count()==1);
+		TEntry entry=(*list)[0];
+		test(entry.iName.FindF(_L(".BAT"))>=0);
+		delete list;
+		fileScan.NextL(list);
+		}
+
+	test(list!=NULL);
+	TInt count=list->Count();
+	test(count==3);
+	TEntry entry=(*list)[0];
+	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
+	entry=(*list)[1];
+	test(entry.iName.FindF(_L("T_FILE.CPP"))>=0);
+	entry=(*list)[2];
+	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
+	TThreadId threadId=fileScan.ThreadId();
+	RThread current;
+	TThreadId currentId=current.Id();
+	test(threadId==currentId);
+	delete list;
+
+	fileScan.NextL(list);
+	test(list==NULL);
+
+	file1.Close();
+	file2.Close();
+	file3.Close();
+	dir1.Close();	dir2.Close();
+	dir3.Close();	dir4.Close();
+	dir5.Close();	dir6.Close();
+	dir7.Close();	dir8.Close();
+	fs1.Close();	fs2.Close();
+	fs3.Close();	fs4.Close();
+	}
+
+LOCAL_C void Test5()
+//
+// Test OpenFileScan
+//
+	{
+
+	test.Next(_L("Scan for open files - mixed RDirs and RFiles"));
+
+	RFile file1,file2,file3;
+	TFileName fn;
+	fn = _L("Z:\\TEST\\T_FSRV.CPP");
+	fn[0] = gExeFileName[0];
+	TInt r=file1.Open(TheFs,fn,EFileRead|EFileShareReadersOnly);
+	test(r==KErrNone);
+	fn = _L("Z:\\TEST\\T_FILE.CPP");
+	fn[0] = gExeFileName[0];
+	r=file2.Open(TheFs,fn,EFileRead);
+	test(r==KErrNone);
+	fn = _L("Z:\\TEST\\T_FSRV.CPP");
+	fn[0] = gExeFileName[0];
+	r=file3.Open(TheFs,fn,EFileRead|EFileShareReadersOnly);
+	test(r==KErrNone);
+	
+	RDir dir1,dir2,dir3,dir4;
+	fn = _L("Z:\\TEST\\*.XDE");
+	fn[0] = gExeFileName[0];
+	r=dir1.Open(TheFs,fn,KEntryAttMaskSupported);
+	test(r==KErrNone);
+	r=dir2.Open(TheFs,fn,KEntryAttMaskSupported);
+	test(r==KErrNone);
+	r=dir3.Open(TheFs,fn,KEntryAttMaskSupported);
+	test(r==KErrNone);
+	r=dir4.Open(TheFs,fn,KEntryAttMaskSupported);
+	test(r==KErrNone);
+
+	CFileList* list;
+	TOpenFileScan fileScan(TheFs);
+	fileScan.NextL(list);
+
+	if (gRunByBatch)
+		{
+		test(list!=NULL);
+		test(list->Count()==1);
+		TEntry entry=(*list)[0];
+		test(entry.iName.FindF(_L(".BAT"))>=0);
+		delete list;
+		fileScan.NextL(list);
+		}
+
+	test(list!=NULL);
+	TInt count=list->Count();
+	test(count==3);
+	TEntry entry=(*list)[0];
+	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
+	entry=(*list)[1];
+	test(entry.iName.FindF(_L("T_FILE.CPP"))>=0);
+	entry=(*list)[2];
+	test(entry.iName.FindF(_L("T_FSRV.CPP"))>=0);
+	TThreadId threadId=fileScan.ThreadId();
+	RThread current;
+	TThreadId currentId=current.Id();
+	test(threadId==currentId);
+	delete list;
+
+	fileScan.NextL(list);
+	test(list==NULL);
+
+	file1.Close();
+	file2.Close();
+	file3.Close();
+	dir1.Close();
+	dir2.Close();
+	dir3.Close();
+	dir4.Close();
+	}
+
+
+
+LOCAL_C void MultipleSessions(TInt aDrive, RTest& aTest)
+//
+//	Create an array of fileserver sessions
+//	Create an array of TMultipleSessionTest objects 
+//
+	
+	{
+#if defined(UNICODE)
+	const TInt maxNumberSessions=10;	
+#else
+	const TInt maxNumberSessions=20;
+#endif
+
+	RFs session[maxNumberSessions];
+	TMultipleSessionTest testObject[maxNumberSessions];
+	TInt i=0;
+	TInt r;
+
+	for (; i<maxNumberSessions; i++)
+		{
+		r=session[i].Connect();
+		test(r==KErrNone);
+		testObject[i].Initialise(session[i]);
+		testObject[i].SetSessionPath(aDrive);
+		testObject[i].RunTests(aTest);		//	Run the set of tests for each session
+		}									//	Leave each session open
+											
+
+	for (i=0; i<(maxNumberSessions-1); i++)
+		{
+	//	Alternate tests between open sessions
+		testObject[i].testSetVolume(aTest);
+		testObject[i+1].testInitialisation(aTest);
+		testObject[i].testSubst(aTest);
+		testObject[i+1].testInitialisation(aTest);
+		testObject[i].testInitialisation(aTest);
+		testObject[i].testDriveList(aTest);
+		testObject[i].MakeAndDeleteFiles(aTest);
+	//	Close session[i] and check that session[i+1] is OK	
+		session[i].Close();	
+		testObject[i+1].testInitialisation(aTest);
+		testObject[i+1].testSetVolume(aTest);
+		testObject[i+1].testInitialisation(aTest);
+		testObject[i+1].testSubst(aTest);
+		testObject[i+1].testDriveList(aTest);
+	//	Reconnect session[i]	
+		r=session[i].Connect();
+		test(r==KErrNone);
+		testObject[i].Initialise(session[i]);
+		testObject[i].SetSessionPath(aDrive);
+		testObject[i].testSetVolume(aTest);
+		testObject[i+1].testInitialisation(aTest);
+		testObject[i].testSubst(aTest);
+		testObject[i+1].testInitialisation(aTest);
+		testObject[i].testInitialisation(aTest);
+		testObject[i].testDriveList(aTest);
+	//	Close session[i+1] and check that session[i] is OK
+		session[i+1].Close();	
+		testObject[i].testInitialisation(aTest);
+		testObject[i].testSetVolume(aTest);
+		testObject[i].testInitialisation(aTest);
+		testObject[i].testSubst(aTest);
+		testObject[i].testDriveList(aTest);
+	//	Reconnect session[i+1]	
+		r=session[i+1].Connect();
+		test(r==KErrNone);
+		testObject[i+1].Initialise(session[i+1]);
+		testObject[i+1].SetSessionPath(aDrive);
+		testObject[i].testSetVolume(aTest);
+		testObject[i+1].testInitialisation(aTest);
+		testObject[i].testSubst(aTest);
+		testObject[i+1].testInitialisation(aTest);
+	//	Close session[i] and check that session[i+1] is OK	
+		session[i].Close();	
+		testObject[i+1].testInitialisation(aTest);
+		testObject[i+1].testSetVolume(aTest);
+		testObject[i+1].testInitialisation(aTest);
+		testObject[i+1].testSubst(aTest);
+		testObject[i+1].testDriveList(aTest);
+		
+		if (i==maxNumberSessions-1)	//	Tidy up by closing remaining open session
+			{
+			session[i+1].Close();	
+			}
+		}
+	}
+
+GLDEF_C void CallTestsDefaultL(TInt aDrive)
+//
+// Call tests that may leave
+//
+	{
+	Test0(test);
+	Test1();		
+	Test2();
+	Test3();
+	Test4();
+	Test5();
+	MultipleSessions(aDrive,test);
+	}
+
+GLDEF_C void CallTestsXL(TInt aDrive)
+//
+// Call tests for drive X
+//
+	{
+	Test0(testx);
+
+	RFile file1;
+	TFileName fn;
+	fn = _L("Z:\\TEST\\T_FSRV.CPP");
+	fn[0] = gExeFileName[0];
+	TInt r=file1.Open(TheFs,fn,EFileRead|EFileShareReadersOnly);
+	testx(r==KErrNone);
+	file1.Close();
+	MultipleSessions(aDrive,testx);
+	}
+
+GLDEF_C void CallTestsYL(TInt aDrive)
+//
+// Call tests for drive Y
+//
+	{
+	Test0(testy);
+
+	RFile file1;
+	TFileName fn;
+	fn = _L("Z:\\TEST\\T_FSRV.CPP");
+	fn[0] = gExeFileName[0];
+	TInt r=file1.Open(TheFs,fn,EFileRead|EFileShareReadersOnly);
+	testy(r==KErrNone);
+	file1.Close();
+	MultipleSessions(aDrive,testy);
+	}
+
+GLDEF_C void CallTestsQL(TInt aDrive)
+//
+// Call tests for remote drive
+//
+	{
+
+	Test0(testq);
+	
+	testq.Printf(_L("This may take some time.  Please be patient...\n"));
+	
+	testq.Next(_L("Test remote drive with multiple sessions"));
+	MultipleSessions(aDrive,testq);
+
+	const TInt numberOfTests=10;
+	
+	TPtrC record[numberOfTests];
+	
+	TInt i=0;
+	for (;i<numberOfTests;i++)
+		{
+		if (i%2)
+			record[i].Set(_L("Hubble_Bubble"));
+		else
+			record[i].Set(_L("Toil_and_Trouble"));
+		}
+	
+	testq.Next(_L("Create a file 'TEXTFILE.TXT' on the remote drive"));
+	RFile f;
+	TInt r=f.Replace(TheFs,_L("TEXTFILE.TXT"),0);
+	testq(r==KErrNone);
+	TFileText textFile;
+	textFile.Set(f);
+	
+	testq.Next(_L("Write to 'TEXTFILE.TXT'"));
+	
+	for (i=0;i<numberOfTests;i++)
+		{
+		r=textFile.Write(record[i]);
+		testq(r==KErrNone);
+		testq.Printf(_L("Write %d completed OK\n"),i+1);
+		}
+	
+	f.Close();
+
+	RFile file1;
+	r=file1.Open(TheFs,_L("Q:\\TEST\\T_FSRV.CPP"),EFileRead|EFileShareReadersOnly);
+	testq(r==KErrNone);
+	file1.Close();	
+
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/fs/svphostdir.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,175 @@
+/*
+* 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:
+*
+*/
+
+#include <f32file.h>
+#include <f32fsys.h>
+#include <f32ver.h>
+#include <e32uid.h>
+
+#include "svphostfsy.h"
+
+//////////////////////////////////////////////////////////////////////////
+//	CSVPHostDirCB							//
+//////////////////////////////////////////////////////////////////////////	
+
+CSVPHostDirCB::CSVPHostDirCB(/*CSessionFs* aSession*/)
+//
+// Constructor
+//
+        : CDirCB(/*aSession*/),iEntry()
+	{
+	__DECLARE_NAME(_S("CSVPHostDirCB"));
+	}
+
+CSVPHostDirCB::~CSVPHostDirCB()
+//
+// Destructor
+//
+	{
+	DP(_L("** (SVPHOSTDIR) CSVPHostDirCB::~CSVPHostDirCB"));
+
+	if ((TInt)iHandle == KErrBadHandle) return;
+
+	SVP_HOST_FS_DEVICE().DirClose(Drive().DriveNumber(), iHandle);
+	}
+
+TBool CSVPHostDirCB::MatchUid()
+//
+// Match the uid ?
+//
+	{
+	if (iUidType[0]!=TUid::Null() || iUidType[1]!=TUid::Null() || iUidType[2]!=TUid::Null())
+		return(ETrue);
+	return(EFalse);
+	}
+
+void fileTimeToTime(TUint32 t,TTime& aTime, TFileTimeType aType)
+//
+//	Convert a time (in seconds from the epoc) into a TTIME
+//
+	{
+	TInt64 at =((TInt64)t) * 1000000;
+	TTime time = TTime(at);
+	if (aType == EWindows) 
+		{
+		time += TTimeIntervalYears(1970);
+		time += TTimeIntervalDays(1);
+		}
+	aTime=time;
+	}
+
+LOCAL_C TBool CompareUid(const TUidType& aUidTrg, const TUidType& aUidSuitor)
+//
+// Compare the suitor to the target pattern
+//
+	{
+	
+	if (aUidTrg[0]!=TUid::Null() && aUidTrg[0]!=aUidSuitor[0])
+		return(EFalse);
+	if (aUidTrg[1]!=TUid::Null() && aUidTrg[1]!=aUidSuitor[1])
+		return(EFalse);
+	if (aUidTrg[2]!=TUid::Null() && aUidTrg[2]!=aUidSuitor[2])
+		return(EFalse);
+	return(ETrue);
+	}
+
+
+void CSVPHostDirCB::ReadL(TEntry& anEntry)
+//
+//	Read the next entry from the directory
+//
+	{
+	DP(_L("** (SVPHOSTDIR) CSVPHostDirCB::ReadL"));
+
+	TUint driveNumber = Drive().DriveNumber() ; 
+	FOREVER
+		{
+		if (!iPending)
+			{
+			TSVPHostFsDirReadInfo info(driveNumber, iHandle);
+			User::LeaveIfError(SVP_HOST_FS_DEVICE().DirRead(info));
+
+			TPtr name((TUint16 *)&info.iName[0], info.iLength, KMaxPath);
+
+			if (name==_L(".") || name==_L(".."))
+			  continue;
+
+			iEntry.iName = name;
+			iEntry.iAtt=info.iAtt&KEntryAttMaskSupported;
+			iEntry.iSize=info.iSize;
+			fileTimeToTime(info.iModified,iEntry.iModified, info.iTimeType);
+			DP(_L("%S %d %x %x"), &name, iEntry.iAtt, iEntry.iSize, iEntry.iModified);
+			}
+		iPending=EFalse;
+		anEntry=iEntry;
+		if ((iFullName.NameAndExt()==_L("*.*") || anEntry.iName.MatchF(iFullName.NameAndExt())!=KErrNotFound) 
+		    && Mount().MatchEntryAtt(anEntry.iAtt&KEntryAttMaskSupported,iAtt))
+			{
+			if (MatchUid())
+				{
+				TParse fileName;
+				TBuf<KMaxFileName> path=iFullName.Path();
+				fileName.Set(anEntry.iName,&path,NULL);
+				(*(CSVPHostMountCB*)&Mount()).ReadUidL(fileName.FullName(),anEntry);
+				if (CompareUid(iUidType,anEntry.iType))
+					break;
+				}
+			else
+				break;
+			}
+		break;
+		}
+
+	if ((iAtt&KEntryAttAllowUid)==0 || anEntry.iAtt&KEntryAttDir || MatchUid())
+		return;
+	TParse fileName;
+	TBuf<KMaxFileName> path=iFullName.Path();
+	fileName.Set(anEntry.iName,&path,NULL);
+	(*(CSVPHostMountCB*)&Mount()).ReadUidL(fileName.FullName(),anEntry);
+
+	return;
+	}
+
+
+//////////////////////////////////////////////////////////////////////////
+// CSVPHostFormatCB							//
+//////////////////////////////////////////////////////////////////////////	
+
+CSVPHostFormatCB::CSVPHostFormatCB(/*CSessionFs* aSession*/)//???JCS
+//
+// Constructor
+//
+	: CFormatCB(/*aSession*/)
+	{
+	__DECLARE_NAME(_S("CSVPHostFormatCB"));
+	}
+
+CSVPHostFormatCB::~CSVPHostFormatCB()
+//
+// Destructor
+//
+	{}
+
+void CSVPHostFormatCB::DoFormatStepL()
+//
+// Do Formatting
+//
+	{
+	iCurrentStep=0;
+	User::Leave(KErrNotSupported);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/fs/svphostfil.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,213 @@
+/*
+* 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:
+*
+*/
+
+#include <f32file.h>
+#include <f32fsys.h>
+#include <f32ver.h>
+#include <e32uid.h>
+
+#include "svphostfsy.h"
+
+
+
+//////////////////////////////////////////////////////////////////////////
+//	CSVPHostFileCB							//
+//////////////////////////////////////////////////////////////////////////	
+
+CSVPHostFileCB::CSVPHostFileCB()
+//
+// Constructor
+//
+	{
+	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::CSVPHostFileCB()"));
+
+	__DECLARE_NAME(_S("CSVPHostFileCB"));
+	}
+
+CSVPHostFileCB::~CSVPHostFileCB()
+//
+// Destructor
+//
+	{
+	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::~CSVPHostFileCB()"));
+	if ((TInt)iHandle == KErrBadHandle) return;
+	
+	SVP_HOST_FS_DEVICE().FileClose(Drive().DriveNumber(), iHandle);
+	}
+
+TBool CSVPHostFileCB::IsRomDrive() const
+//
+// Returns ETrue if the drive number == EDriveZ
+//
+	{
+	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::IsRomDrive()"));
+	return(EFalse);
+	}
+
+
+void CSVPHostFileCB::CheckPos(TInt /*aPos*/)
+	{
+	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::CheckPos()"));
+	}
+
+void CSVPHostFileCB::ReadL(TInt aPos,TInt& aLength ,const TAny* aDes , const RMessagePtr2& aMessage)
+	{
+	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::ReadL(%d,%d)"), aPos, aLength);
+
+	TInt n = 0;
+	TInt pos=aPos;
+	TInt len=aLength;
+	TBuf8<0x400> buf;
+
+	if (aMessage.Handle() == KLocalMessageHandle)
+		((TPtr8* )aDes)->SetLength(0);
+
+	TUint driveNumber = Drive().DriveNumber() ; 
+	while (len)
+		{
+		TInt s=Min(len,buf.MaxLength());
+		TSVPHostFsFileReadInfo info(driveNumber, iHandle,s,pos+n,(char*)buf.Ptr());
+
+		DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::ReadL pos %d s %d p 0x%08x"), pos+n, s, buf.Ptr());
+
+		User::LeaveIfError(SVP_HOST_FS_DEVICE().FileRead(info));
+
+		DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::ReadL read %d bytes"), info.iLength);
+
+		buf.SetLength(info.iLength);
+
+		DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::ReadL set buf length"));
+
+		if (aMessage.Handle() == KLocalMessageHandle)
+		        ((TPtr8* )aDes)->Append(buf);
+		else
+		        aMessage.WriteL(0,buf,n);
+		
+		n+=info.iLength;
+
+		if (((TInt)info.iLength)<s)
+		        break;
+		len-=info.iLength;
+		}
+	aLength=n;
+	iCurrentPos=n+aPos;
+	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::ReadL aLength %d iCurrentPos %d"), aLength, iCurrentPos);
+	}
+
+
+
+void CSVPHostFileCB::WriteL(TInt aPos, TInt& aLength, const TAny* aDes, const RMessagePtr2& aMessage)
+	{
+	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::WriteL(%d,%d)"), aPos, aLength);
+
+	TInt n=0;
+	TInt pos=aPos;
+	TInt len=aLength;
+	TBuf8<0x400> buf;
+	TUint driveNumber = Drive().DriveNumber() ; 
+	while (len)
+		{
+		TInt s=Min(len,buf.MaxLength());
+
+		if (aMessage.Handle() == KLocalMessageHandle)
+			buf.Copy( ((TPtr8* )aDes)->MidTPtr(n, s) );
+		else
+			aMessage.ReadL(0,buf,n);
+
+		TSVPHostFsFileWriteInfo info(driveNumber, iHandle,s,pos+n,(char*)buf.Ptr());
+
+		DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::WriteL pos %d s %d p 0x%08x"), pos+n, s, buf.Ptr());
+
+		User::LeaveIfError(SVP_HOST_FS_DEVICE().FileWrite(info));
+
+		DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::WriteL wrote %d bytes"), info.iLength);
+
+		if (((TInt)info.iLength)<s) 
+		  {
+		    DP(_L("** (SVPHOSTFIL) !!! CSVPHostFileCB::WriteL failed to write s %d bytes"), s);
+			User::Leave(KErrCorrupt);
+		  }
+
+		len-=info.iLength;
+		n+=info.iLength;
+		}
+	aLength=n;
+	iCurrentPos=n+aPos;
+	}
+
+TInt CSVPHostFileCB::Address(TInt& /*aPos*/) const
+//
+//	If ROM file, do a memory map and return the address
+//	Dummy implementation
+//
+	{
+	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::Address()"));
+	return(KErrNone);
+	}
+
+void CSVPHostFileCB::SetSizeL(TInt aSize)
+//
+//	Set the file size
+//
+	{
+	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::SetSizeL()"));
+	
+	TSVPHostFsFileSetSizeInfo info(Drive().DriveNumber(), iHandle,aSize);
+
+	User::LeaveIfError(SVP_HOST_FS_DEVICE().FileSetSize(info));
+
+	}
+
+
+void CSVPHostFileCB::SetEntryL(const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask)
+// TODO: Not tested
+	{
+	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::SetEntryL()"));
+	//User::Leave(KErrNotSupported);
+	}
+
+void CSVPHostFileCB::FlushAllL()
+//
+// Commit any buffered date to the media.
+//
+	{
+	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::FlushAll()"));
+
+	User::LeaveIfError(SVP_HOST_FS_DEVICE().FlushAll(Drive().DriveNumber()));
+	}
+
+
+void CSVPHostFileCB::FlushDataL()
+//
+//	Commit any buffered date to the media
+//	Dummy implementation of a pure virtual function
+//
+	{
+	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::FlushDataL()"));
+	  
+	User::LeaveIfError(SVP_HOST_FS_DEVICE().FlushData(Drive().DriveNumber()));
+	}
+
+void CSVPHostFileCB::RenameL(const TDesC& /*aNewName*/)
+//
+//	Rename the file while open
+//	Dummy implementation of a pure virtual function
+//
+	{
+	DP(_L("** (SVPHOSTFIL) CSVPHostFileCB::RenameL()"));
+
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/fs/svphostfsstart.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,113 @@
+/*
+* 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:
+*
+*/
+
+#include <e32std.h>
+#include <f32fsys.h>
+
+_LIT(KEStartPanicCatagory, "SVP_HOSTFS_SYSSTART");
+
+enum TEStartPanic
+    {
+    ELitNoDM = 1,                           // No Domain Manager
+    ELitDMInitFail,                         // Domain Manager init fail
+    ELitHALFail,                            // HAL init fail
+    ELitConnectFsFail1,                     // Connect fs 1 fail
+    ELitInitLocalPwStoreFail,               // Init PwStore fail
+    ELitLocaleInitialisationFail,           // Initialisation of locale properties failed
+    ELitFSInitDriveInfoFail,                // FS Init DriveInfo fail
+    ELitCreateTrapHandlerFail,              // Create trap handler fail
+    ELitLoadSysLddsFail,                    // Load sys ldds fail
+    ELitLocalDriveMappingFail,              // Local drive mapping fail
+    ELitDriveMappingFileFail,               // Drive mapping file not found
+    ELitSwapMappingFailArrayInconsistent,   // Swap mappings fail - array inconsistent
+    ELitFsSwapMappingFail,                  // Swap mappings fail - Fs request failed
+    EPropertyError,                         // RProperty return error
+    ECompMountFsFail,                       // Failed comp fs mount
+    EFsNameFail,                            // File system name on Z: failed
+    ELitNoWS,                               // No WSERV
+    EStartupModeFail,                       // Get startup mode failed
+    ESysAgentFail,                          // Fail to launch system agent
+    ESetSystemDriveFail                     // Fail to set System Drive
+    };
+
+inline void Panic(TEStartPanic aPanic, TInt aReason)
+    {
+    TBuf<10> panic(KEStartPanicCatagory);
+    panic.AppendFormat(_L("_%d"), aPanic);
+    User::Panic(panic, aReason);
+    }
+
+_LIT(KServerPathSysBin, "0:\\Sys\\Bin\\");
+_LIT(KWindowServerRootName1,"EWSRV.EXE");	
+_LIT(KHostFSMounter, "z:\\sys\\bin\\SVPHOSTFS.EXE");
+
+TBool CreateServer(const TDriveList& aDrives, const TDesC& aRootName)
+	{
+	RProcess ws;
+	TInt r=ws.Create(aRootName, KNullDesC);
+	if (r!=KErrNone)
+		{
+		TFileName name;
+		name = KServerPathSysBin();
+		name+=aRootName;
+		TInt i=EDriveZ;
+		FOREVER
+			{
+			i= (i==0) ? EDriveZ : i-1;
+			if (aDrives[i]!=KDriveAbsent) // Got a valid drive
+				{
+				name[0]=(TUint32)('A'+i); // Set the drive letter
+				r=ws.Create(name,KNullDesC);
+				if (r==KErrNone)
+					break;
+				}
+			if (i==EDriveZ)
+				return EFalse;
+			}
+		}
+	ws.Resume();
+	ws.Close();
+	return ETrue;
+	}
+
+GLDEF_C TInt E32Main()
+        {
+	RProcess ws;
+	TInt r=ws.Create(KHostFSMounter, KNullDesC);
+	if (r == KErrNone)
+	        {
+		TRequestStatus stat;
+		ws.Rendezvous(stat);
+		ws.Resume();
+		User::WaitForRequest(stat);		// wait for start or death
+		ws.Close();
+		}
+	// Start the window server 
+	RFs aFs;
+	r = aFs.Connect();
+
+	if (r != KErrNone)
+	        Panic(ELitConnectFsFail1, r);
+	TDriveList list;
+	aFs.DriveList(list);
+	aFs.Close();
+
+	if (!CreateServer(list,KWindowServerRootName1))
+	        Panic(ELitNoWS,KErrNotFound);
+
+	return(KErrNone);
+	}	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/fs/svphostfsy.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,158 @@
+/*
+* 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:
+*
+*/
+
+#include <f32file.h>
+#include <f32fsys.h>
+#include <f32ver.h>
+#include <e32uid.h>
+
+#include "svphostfsy.h"
+
+//////////////////////////////////////////////////////////////////////////
+// CSVPHostFileSystem	                                                //
+//////////////////////////////////////////////////////////////////////////	
+
+CSVPHostFileSystem::CSVPHostFileSystem()
+//
+// Constructor
+//
+	{
+	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::CSVPHostFileSystem()"));
+	__DECLARE_NAME(_S("CSVPHostFileSystem"));
+	}
+
+CSVPHostFileSystem::~CSVPHostFileSystem()
+//
+// Destructor
+//
+	{
+	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::~CSVPHostFileSystem"));
+	iDevice.Close();
+	}
+
+
+
+TInt CSVPHostFileSystem::Install()
+//
+// Install the file system.
+//
+	{
+	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::Install()"));
+
+	// Open the device
+	RSVPHostFsDriver device;
+	TInt err = device.Open();
+
+	if (KErrNone != err)
+		return err;
+
+	iVersion=TVersion(KMajorVersionNumber,KMinorVersionNumber,KF32BuildVersionNumber);
+	TPtrC name=_L("SVPHOSTFSY");
+	
+	return(SetName(&name));
+	}
+
+CMountCB* CSVPHostFileSystem::NewMountL(/*CSessionFs* aSession*/) const
+//
+// Create a new mount control block.
+//
+	{
+	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::NewMountL()"));
+	return(new(ELeave) CSVPHostMountCB);
+	}
+
+CFileCB* CSVPHostFileSystem::NewFileL(/*CSessionFs* aSession*/) const
+//
+// Create a new file.
+//
+	{
+	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::NewFileL()"));
+	return(new(ELeave) CSVPHostFileCB);
+	}
+
+CDirCB* CSVPHostFileSystem::NewDirL(/*CSessionFs* aSession*/) const
+//
+// Create a new directory lister.
+//
+	{
+	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::NewDirL()"));
+	return(new(ELeave) CSVPHostDirCB(/*aSession*/));
+	}
+
+CFormatCB* CSVPHostFileSystem::NewFormatL(/*CSessionFs* aSession*/) const
+//
+// Create a new media formatter.
+//
+	{
+	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::NewFormatL()"));
+	return(new(ELeave) CSVPHostFormatCB(/*aSession*/));
+	}
+
+TInt CSVPHostFileSystem::DefaultPath(TDes& aPath) const
+//
+// Return the initial default path.
+//
+	{
+	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::DefaultPath()"));
+	aPath=_L("\\");
+	return(KErrNone);
+	}
+
+
+CFileSystem* CSVPHostFileSystem::NewL()
+//
+//	Factory for CSVPHostFileSystem
+//
+	{
+	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::NewL()"));
+	CSVPHostFileSystem* svpHostFsy=new(ELeave) CSVPHostFileSystem();
+	return svpHostFsy;
+	}
+
+
+void CSVPHostFileSystem::DriveInfo(TDriveInfo& anInfo,TInt aDriveNumber) const
+//
+// Return the drive info iDriveAtt  && iBatteryState already set
+//
+	{
+	DP(_L("** (SVPHOSTFSY) CSVPHostFileSystem::DriveInfo()"));
+
+	/* !@! TODO: are these the best values? */
+	anInfo.iMediaAtt=KMediaAttVariableSize;
+	anInfo.iType=EMediaRam;
+#if 0
+	// !@! can't execute from remote drives
+	anInfo.iDriveAtt=KDriveAttRemote;
+#endif
+	anInfo.iDriveAtt=KDriveAttLocal|KDriveAttInternal;
+	}
+
+
+extern "C" {
+
+EXPORT_C CFileSystem* CreateFileSystem()
+//
+// Create a new file system
+//
+	{
+	DP(_L("** (SVPHOSTFSY) CreateFileSystem()"));
+
+	return(CSVPHostFileSystem::NewL());
+	}
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/fs/svphostfsy.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,202 @@
+/*
+* 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: Based on the test code under f32test\fsstress
+*
+*/
+
+#if !defined(__SVPHOSTFSY_H__)
+#define __SVPHOSTFSY_H__
+
+#include <f32fsys.h>
+#include <f32file.h>
+#include <e32test.h>
+#include <e32hal.h>
+#include <e32math.h>
+#include <f32dbg.h>
+
+#include <rsvphostfsdriver.h>
+
+//
+// Common constants used by both EFSRV and the filesystems
+//
+
+const TUint KEntryAttIllegal=(KEntryAttVolume|KEntryAttDir);
+const TUint KEntryAttModified=0x20000000;
+const TUint KEntryAttMustBeFile=0x80000000;
+const TInt KCurrentPosition=KMinTInt;
+
+
+GLDEF_D const TInt KMaxParses=7;
+GLDEF_D const TInt KHeapSize=0x2000;
+GLREF_C void TurnAllocFailureOff();
+GLREF_C void TurnAllocFailureOn();
+GLREF_C void ReportCheckDiskFailure(TInt aRet);
+GLREF_D RTest test;
+GLREF_D TFileName gSessionPath;
+GLREF_D TInt gAllocFailOff;
+GLREF_D TInt gAllocFailOn;
+
+#if defined(_DEBUG)
+#define SetAllocFailure(a) SetAllocFailure(a)
+#else
+#define SetAllocFailure(a) IsRomAddress(NULL)
+#define KAllocFailureOn 0
+#define KAllocFailureOff 0
+#endif
+
+// Debug virtual host file service - uncomment define below
+//#define SVPDBG
+#ifdef SVPDBG
+IMPORT_C TUint32 DebugRegister();
+#define DP(format...) { if (DebugRegister()&KFSYS) RDebug::Print(format);}
+#else
+#define DP(format...)
+#endif
+
+#define SVP_HOST_FS_DEVICE() (((CSVPHostMountCB&)Mount()).Device())
+#define SVP_HOST_FS_DEVICE_ID 0xc51d0008
+
+enum TPanic
+	{
+	EFileTimeToSystemTime,
+	EFileClose,
+	EFileCloseSetAttributes,
+	EDirClose,
+	EMapCouldNotConnect
+	};
+
+// utility to convert file system times to TTime format
+void fileTimeToTime(TUint32 t,TTime& aTime, TFileTimeType aType);
+
+// utility to produce a canonicalized pathname (i.e. with a drive letter) suitable to pass to the FS device.
+
+void CanonicalizePathname(const TDesC& aName, TInt aDrive, THostFileName& aHostName);
+
+class CSessionFs;
+
+class CSVPHostMountCB : public CMountCB
+	{
+public:
+	CSVPHostMountCB();
+	~CSVPHostMountCB();
+	void MountL(TBool aForceMount);
+	TInt ReMount();
+	void Dismounted();
+	void VolumeL(TVolumeInfo& aVolume) const;
+	void SetVolumeL(TDes& aName);
+	void MkDirL(const TDesC& aName);
+	void RmDirL(const TDesC& aName);
+	void DeleteL(const TDesC& aName);
+	void RenameL(const TDesC& anOldName,const TDesC& anNewName);
+	void ReplaceL(const TDesC& anOldName,const TDesC& anNewName);
+	void EntryL(const TDesC& aName,TEntry& anEntry) const;
+	void SetEntryL(const TDesC& aName,const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask);
+	void FileOpenL(const TDesC& aName,TUint aMode,TFileOpen anOpen,CFileCB* aFile);
+	void DirOpenL(const TDesC& aName,CDirCB* aDir);
+	void RawReadL(TInt64 aPos,TInt aLength,const TAny* aTrg,TInt anOffset,const RMessagePtr2& aMessage) const;
+	void RawWriteL(TInt64 aPos,TInt aLength,const TAny* aSrc,TInt anOffset,const RMessagePtr2& aMessage);
+	void ReadUidL(const TDesC& aName,TEntry& anEntry) const;
+	void GetShortNameL(const TDesC& aLongName,TDes& aShortName);
+	void GetLongNameL(const TDesC& aShortName,TDes& aLongName);
+	void IsFileInRom(const TDesC& aFileName,TUint8*& aFileStart);
+	void ReadSectionL(const TDesC& aName,TInt aPos,TAny* aTrg,TInt aLength,const RMessagePtr2& aMessage);
+
+	inline const CSVPHostMountCB& Mount() const { return *this; }
+	inline RSVPHostFsDriver& Device() { return iDevice; }
+	
+
+private:
+	TBool IsRomDrive() const;
+	RSVPHostFsDriver iDevice;
+	};
+
+
+class RConsole;
+class CSVPHostFileCB : public CFileCB
+	{
+public:
+	CSVPHostFileCB();
+	~CSVPHostFileCB();
+	void RenameL(const TDesC& aNewName);
+	void ReadL(TInt aPos,TInt& aLength,const TAny* aDes,const RMessagePtr2& aMessage);
+	void WriteL(TInt aPos,TInt& aLength,const TAny* aDes,const RMessagePtr2& aMessage);
+	TInt Address(TInt& aPos) const;
+	void SetSizeL(TInt aSize);
+	void SetEntryL(const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask);
+	void FlushDataL();
+	void FlushAllL();
+	void CheckPos(TInt aPos);
+	void SetHandle(TUint aHandle) { iHandle = aHandle; }
+	TUint Handle() const { return iHandle; }
+private:
+	TBool IsRomDrive() const;
+private:
+	TInt iCurrentPos;
+	//	TUint8* iFilePtr;
+	TUint iHandle;
+	};
+
+class CSVPHostDirCB : public CDirCB
+	{
+public:
+	CSVPHostDirCB(/*CSessionFs* aSession*/);
+	~CSVPHostDirCB();
+	void ReadL(TEntry& anEntry);
+	inline void SetFullName(const TDesC& aName) {iFullName.Set(aName,NULL,NULL);}
+	inline void SetHandle(TUint32 aHandle) { iHandle = aHandle; }
+
+private:
+	TBool MatchUid();
+public:
+	TEntry iEntry;
+private:
+	TUint32 iHandle;
+	TParse iFullName;
+	};
+
+class CSVPHostFormatCB : public CFormatCB
+	{
+public:
+	CSVPHostFormatCB(/*CSessionFs* aSession*/);
+	~CSVPHostFormatCB();
+public:
+	virtual void DoFormatStepL();
+	};
+
+class CSVPHostFileSystem : public CFileSystem
+	{
+public:
+	CSVPHostFileSystem();
+	~CSVPHostFileSystem();
+	TInt Install();
+	TInt DefaultPath(TDes& aPath) const;
+	void DriveInfo(TDriveInfo& anInfo,TInt aDriveNumber) const;
+private:
+	CMountCB* NewMountL() const;
+	CFileCB* NewFileL() const;
+	CDirCB* NewDirL() const;
+	CFormatCB* NewFormatL() const;
+public:
+	static CFileSystem* NewL();
+
+public:
+	inline RSVPHostFsDriver& Device() { return iDevice; };
+private:
+	RSVPHostFsDriver iDevice;
+	TUint32 iDriveMap[DRIVE_MAP_SIZE];
+	};
+
+#endif
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/fs/svphostmain.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,127 @@
+/*
+* 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:
+*
+*/
+
+#include <f32file.h>
+#include <e32test.h>
+#include <e32hal.h>
+#include <f32dbg.h>
+
+#include "svphostfsy.h"
+
+#ifdef DP
+#undef DP
+#define DP(f...)
+#endif
+
+_LIT(KSVPHOSTFSY, "SVPHOSTFSY");
+
+#if 1
+GLDEF_C TInt E32Main()
+    {
+	CTrapCleanup* cleanup;
+	cleanup=CTrapCleanup::New();
+
+	RSVPHostFsDriver driver;
+
+	TInt r = driver.Open();
+
+	if (r != KErrNone)
+	  {
+	    delete cleanup;
+	    return(r);
+	  }
+
+	TUint32 driveMap[DRIVE_MAP_SIZE];
+
+	r = driver.GetDriveMap(driveMap);
+
+	driver.Close();
+	 
+	if (r != KErrNone)
+	  {
+	    delete cleanup;
+	    return(r);
+	  }
+
+	RFs aFs;
+	r=aFs.Connect();
+
+	if (r != KErrNone) goto fail;
+
+	r=aFs.AddFileSystem(KSVPHOSTFSY);
+
+	if (r != KErrNone) goto close;
+
+	for (TInt i = 0; i < DRIVE_MAP_SIZE ; i++ )
+	        {
+	        if (driveMap[i]) 
+		        {
+			char driveLetter = LOWEST_DRIVE + i;
+			TInt driveNumber = driveLetter - 'A';
+			DP(_L(" Drive %c to be mounted\n"), driveLetter);
+			r = aFs.MountFileSystem(KSVPHOSTFSY,driveNumber);
+			DP(_L("aFs.MountFileSystem(KSVPHOSTFSY, %c) -> %d"), driveNumber, r);
+			if (r != KErrNone) goto close;
+			}
+		}
+
+close:
+	aFs.Close();
+
+fail:
+	delete cleanup;
+	return(r);
+    }
+
+#else
+
+GLDEF_C TInt E32Main()
+    {
+	CTrapCleanup* cleanup;
+	cleanup=CTrapCleanup::New();
+
+	RSVPHostFsDriver driver;
+
+	TInt r = driver.Open();
+
+	if (r != KErrNone){
+	  delete cleanup;
+	  return(r);
+	}
+
+	RFs aFs;
+	r=aFs.Connect();
+
+	r=aFs.AddFileSystem(KSVPHOSTFSY);
+	DP(_L("r=aFs.AddFileSystem(KSVPHOSTFSY) -> %d\n"), r);
+
+	// !@!
+	// Until we have 'platform' device driver that we can use hardcode single virtual host drive as 'S'
+	// !@!
+	char driveLetter = 'S';
+	TInt driveNumber = driveLetter - 'A';
+	DP(_L(" Drive %c to be mounted\n"), driveLetter);
+	r = aFs.MountFileSystem(KSVPHOSTFSY,driveNumber);
+	DP(_L("aFs.MountFileSystem(KSVPHOSTFSY, %d) -> %d"), driveNumber, r);
+
+	aFs.Close();
+
+	delete cleanup;
+	return(KErrNone);
+    }
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/fs/svphostmnt.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,335 @@
+/*
+* 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:
+*
+*/
+
+#include <f32file.h>
+#include <f32fsys.h>
+#include <f32ver.h>
+#include <e32uid.h>
+
+#include "svphostfsy.h"
+
+#define HOST_SVP_DRIVE_SIZE 1024*1024*1024
+#define HOST_SVP_DRIVE_FREE_SIZE 10*1024*1024
+
+LOCAL_C TInt GetMediaSize(TInt /*aDriveNumber*/,TInt64& aSize,TInt64& aFree)
+//
+// Return the size and free space on a drive.
+//
+	{
+        DP(_L("** (SVPHOSTMNT) GetMediaSize"));
+
+	aSize = HOST_SVP_DRIVE_SIZE;
+	aFree = HOST_SVP_DRIVE_FREE_SIZE;
+	return(KErrNone);
+	}
+
+LOCAL_C TInt GetVolume(TInt /*aDriveNumber*/,TDes& aName,TUint& aUniqueID)
+//
+// Return the volume name and uniqueID.
+//
+	{
+        DP(_L("** (SVPHOSTMNT) GetVolume"));
+
+	aUniqueID=1234;
+	aName=(_L("SVPHOSTDRV"));
+	return(KErrNone);	
+	}
+
+void CanonicalizePathname(const TDesC& aName, TInt aDrive, TDes& n, THostFileName& aHostName)
+        {
+	DP(_L("** (SVPHOSTMNT) CanonicalizePathname (%S)"), &aName);
+	n += TDriveUnit(aDrive).Name();
+	n += aName;
+	TParse parse;
+	parse.Set(n,NULL,NULL);
+	n=parse.FullName();
+	aHostName.Copy(n);
+	DP(_L("-> (%S)"), &aHostName);
+	}
+
+void CanonicalizePathname(const TDesC& aName, TInt aDrive, THostFileName& aHostName)
+        {
+	TUint16 buf[KMaxPath];
+	TPtr n(buf, KMaxPath);
+	CanonicalizePathname(aName, aDrive, n, aHostName);
+	}
+
+
+
+//////////////////////////////////////////////////////////////////////////
+//	CSVPHostMountCB							//
+//////////////////////////////////////////////////////////////////////////	
+
+
+CSVPHostMountCB::CSVPHostMountCB()
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::CSVPHostMountCB()"));
+
+	__DECLARE_NAME(_S("CSVPHostMountCB"));
+	}
+
+CSVPHostMountCB::~CSVPHostMountCB()
+	{
+	DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::~CSVPHostMountCB()"));
+	iDevice.Close();
+	}
+
+void CSVPHostMountCB::MountL(TBool /*aForceMount*/)
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::MountL()"));
+
+	TInt err = iDevice.Open();
+	User::LeaveIfError(err);
+
+	TFileName driveName;
+	TInt d=Drive().DriveNumber();
+	iSize=HOST_SVP_DRIVE_SIZE;
+	User::LeaveIfError(GetVolume(d,driveName,iUniqueID));
+	HBufC* pN=driveName.AllocL();
+	DP(_L("** (SVPHOSTMNT) ->SetVolumeName()"));
+	SetVolumeName(pN);
+	DP(_L("** (SVPHOSTMNT) <-SetVolumeName()"));
+
+	}
+
+TInt CSVPHostMountCB::ReMount()
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::ReMount()"));
+
+	TFileName n;
+	TInt d=Drive().DriveNumber();
+	TUint uniqueID;
+	TInt r=GetVolume(d,n,uniqueID);
+	if (r!=KErrNone)
+		return(r);
+	if (n==VolumeName() && uniqueID==iUniqueID)
+		return(KErrNone);
+	return(KErrGeneral);
+	}
+
+void CSVPHostMountCB::Dismounted()
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::Dismounted()"));
+	}
+
+void CSVPHostMountCB::VolumeL(TVolumeInfo& aVolume) const
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::VolumeL()"));
+	TInt64 s,f(0);
+	TFileName n;
+	TInt d=Drive().DriveNumber();
+	User::LeaveIfError(GetMediaSize(d,s,f));
+	aVolume.iFree=f;
+	}
+
+void CSVPHostMountCB::SetVolumeL(TDes& /*aName*/)
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::SetVolumeL()"));
+	User::Leave(KErrNotSupported);
+	}
+
+void CSVPHostMountCB::IsFileInRom(const TDesC& /*aName*/,TUint8*& /*aFileStart*/)
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::IsFileInRom()"));
+	}
+
+void CSVPHostMountCB::MkDirL(const TDesC& aName)
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::MkDirL()"));
+	TBuf<KMaxPath> name;
+	TUint driveNumber = Drive().DriveNumber();
+	CanonicalizePathname(aName, driveNumber, name);
+	TSVPHostFsMkDirInfo info(driveNumber, name, 0777);
+	User::LeaveIfError(SVP_HOST_FS_DEVICE().MkDir(info));
+	}
+
+void CSVPHostMountCB::RmDirL(const TDesC& aName)
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::RmDirL()"));
+	TBuf<KMaxPath> name;
+	TUint driveNumber = Drive().DriveNumber();
+	CanonicalizePathname(aName, driveNumber, name);
+	TSVPHostFsRmDirInfo info(driveNumber, name);
+	User::LeaveIfError(SVP_HOST_FS_DEVICE().RmDir(info));
+	}
+
+void CSVPHostMountCB::DeleteL(const TDesC& aName)
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::DeleteL()"));
+	TBuf<KMaxPath> name;
+	TUint driveNumber = Drive().DriveNumber();
+	CanonicalizePathname(aName, driveNumber, name);
+	TSVPHostFsDeleteInfo info(driveNumber, name);
+	User::LeaveIfError(SVP_HOST_FS_DEVICE().Delete(info));
+	}
+
+void CSVPHostMountCB::RenameL(const TDesC& anOldName,const TDesC& aNewName)
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::RenameL()"));
+	// TODO: do we allow renaming across drives?
+	TBuf<KMaxPath> oldName, newName;
+	TUint driveNumber = Drive().DriveNumber();
+	CanonicalizePathname(anOldName, driveNumber, oldName);
+	CanonicalizePathname(aNewName, driveNumber, newName);
+	TSVPHostFsRenameInfo info(driveNumber, oldName, newName);
+	User::LeaveIfError(SVP_HOST_FS_DEVICE().Rename(info));
+	}
+
+void CSVPHostMountCB::ReplaceL(const TDesC& anOldName,const TDesC& aNewName)
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::ReplaceL()"));
+
+	if(FileNamesIdentical(anOldName,aNewName))
+		{
+		return;
+		}
+	TBuf<KMaxPath> oldName, newName;
+	TUint driveNumber = Drive().DriveNumber();
+	CanonicalizePathname(anOldName, driveNumber, oldName);
+	CanonicalizePathname(aNewName, driveNumber, newName);
+	TSVPHostFsReplaceInfo info(driveNumber, oldName, newName);
+	User::LeaveIfError(SVP_HOST_FS_DEVICE().Replace(info));
+	}
+
+void CSVPHostMountCB::ReadUidL(const TDesC& aName,TEntry& anEntry) const
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::ReadUidL()"));
+	TBuf<KMaxPath> name;
+	TUint driveNumber = Drive().DriveNumber();
+	CanonicalizePathname(aName, driveNumber, name);
+	TSVPHostFsFileOpenInfo fileOpenInfo(driveNumber, name,EFileRead,EFileOpen);
+	TInt err = SVP_HOST_FS_DEVICE().FileOpen(fileOpenInfo);
+
+	User::LeaveIfError(err);
+
+	TBuf8<sizeof(TCheckedUid)> uidBuf;
+	uidBuf.SetLength(sizeof(TCheckedUid));
+
+	TSVPHostFsFileReadInfo fileReadInfo(driveNumber, fileOpenInfo.iHandle,sizeof(TCheckedUid),0,(char*)uidBuf.Ptr());
+
+	if (KErrNone != SVP_HOST_FS_DEVICE().FileRead(fileReadInfo))
+		User::LeaveIfError(SVP_HOST_FS_DEVICE().FileClose(driveNumber, fileOpenInfo.iHandle));
+
+	DP(_L("** (SVPHOSTMNT) CSVPHostFileCB::ReadUidL sizeof(TCheckedUid) %d fileOpenInfo.iLength %d "), sizeof(TCheckedUid), fileReadInfo.iLength);
+
+	if (fileReadInfo.iLength!=sizeof(TCheckedUid))
+	        User::LeaveIfError(SVP_HOST_FS_DEVICE().FileClose(driveNumber, fileOpenInfo.iHandle));
+
+	TCheckedUid uid(uidBuf);
+	anEntry.iType=uid.UidType();
+
+	User::LeaveIfError(SVP_HOST_FS_DEVICE().FileClose(driveNumber, fileOpenInfo.iHandle));
+	}
+
+void CSVPHostMountCB::EntryL(const TDesC& aName,TEntry& anEntry) const
+	{
+	DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::EntryL(%S)"), &aName);
+	TBuf<KMaxPath> name;
+	TUint driveNumber = Drive().DriveNumber();
+	CanonicalizePathname(aName, driveNumber, name);
+	TSVPHostFsEntryInfo info(driveNumber, name);
+	User::LeaveIfError(SVP_HOST_FS_DEVICE().Entry(info));
+	anEntry.iAtt=info.iAtt&KEntryAttMaskSupported;
+	anEntry.iSize=info.iSize;
+	fileTimeToTime(info.iModified,anEntry.iModified, info.iTimeType);
+
+	}
+
+void timeToFileTime(TUint32& t,const TTime& aTime, TFileTimeType aType);
+
+void CSVPHostMountCB::SetEntryL(const TDesC& aName,const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask)
+	{
+	DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::SetEntryL()"));
+
+	//User::Leave(KErrNotSupported);
+	}
+
+void CSVPHostMountCB::FileOpenL(const TDesC& aName,TUint aMode,TFileOpen anOpen,CFileCB* aFile)
+	{
+	DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::FileOpenL(%S)"), &aName);
+	CSVPHostFileCB& file=(*((CSVPHostFileCB*)aFile));
+
+	TBuf<KMaxPath> name;
+	TUint driveNumber = Drive().DriveNumber();
+	CanonicalizePathname(aName, driveNumber, name);
+	TSVPHostFsFileOpenInfo info(driveNumber, name,aMode,anOpen);
+	TInt err = SVP_HOST_FS_DEVICE().FileOpen(info);
+
+	User::LeaveIfError(err);
+
+	file.SetHandle(info.iHandle);
+	file.SetSize(info.iSize);
+	file.SetAtt(info.iAtt&KEntryAttMaskSupported);
+	TTime tempTime=file.Modified();
+	fileTimeToTime(info.iModified, tempTime, info.iTimeType);
+	file.SetModified(tempTime);
+	}
+
+void CSVPHostMountCB::DirOpenL(const TDesC& aName ,CDirCB* aDir)
+	{
+	DP(_L("CFatMountCB::DirOpenL, drv:%d, %S"), DriveNumber(), &aName);
+	CSVPHostDirCB& dir=(*((CSVPHostDirCB*)aDir));
+
+	TBuf<KMaxPath> name;
+	TUint driveNumber = Drive().DriveNumber();
+	CanonicalizePathname(aName, driveNumber, name);
+	TSVPHostFsDirOpenInfo info(driveNumber, name);
+	TInt err = SVP_HOST_FS_DEVICE().DirOpen(info);
+
+	User::LeaveIfError(err);
+
+	dir.SetHandle(info.iHandle);
+	TFileName n(TDriveUnit(Drive().DriveNumber()).Name());
+	n.Append(aName);
+	dir.SetFullName(n);
+	}
+
+void CSVPHostMountCB::RawReadL(TInt64 /*aPos*/,TInt /*aLength*/,const TAny* /*aTrg*/,TInt /*anOffset*/,const RMessagePtr2& /*aMessage*/) const
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::RawReadL()"));
+	User::Leave(KErrNotSupported);
+	}
+
+void CSVPHostMountCB::RawWriteL(TInt64 /*aPos*/,TInt /*aLength*/,const TAny* /*aSrc*/,TInt /*anOffset*/,const RMessagePtr2& /*aMessage*/)
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::RawWriteL()"));
+	User::Leave(KErrNotSupported);
+	}
+
+void CSVPHostMountCB::GetShortNameL(const TDesC& aLongName,TDes& aShortName)
+	{
+	DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::GetShortNameL(%S)"), &aLongName);
+	aShortName = aLongName;
+	}
+
+void CSVPHostMountCB::GetLongNameL(const TDesC& aShortName,TDes& aLongName)
+	{
+	DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::GetLongNameL(%S)"), &aShortName);
+	aLongName = aShortName;
+	}
+
+void CSVPHostMountCB::ReadSectionL(const TDesC& /*aName*/,TInt /*aPos*/,TAny* /*aTrg*/,TInt /*aLength*/,const RMessagePtr2& /*aMessage*/)
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::RawSectionL()"));
+	User::Leave(KErrNotSupported);
+	}
+
+TBool CSVPHostMountCB::IsRomDrive() const
+	{
+        DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::IsRomDrive()"));
+	return(EFalse);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/inc/rsvphostfsdriver.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,468 @@
+/*
+* 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:
+*
+*/
+
+#ifndef __RSVPHOSTFSDRIVER_H__
+#define __RSVPHOSTFSDRIVER_H__
+
+#include <e32des16.h>
+
+typedef TDes16 THostFileName;
+
+typedef enum 
+	{
+	EUnknown=0,
+	EWindows,
+	EUnix,
+	EMac,
+	} TFileTimeType;
+
+class TSVPHostFsMkDirInfo
+	{
+public:
+	inline TSVPHostFsMkDirInfo() :
+		iDrive(0),
+		iName(0),
+		iLength(0),
+		iFlags(0)
+		{};
+	inline TSVPHostFsMkDirInfo(TUint aDrive, const THostFileName & aName, TUint32 aFlags) :
+		iDrive(aDrive),
+		iName(aName.Ptr()),
+		iLength(aName.Length()),
+		iFlags(aFlags)
+		{};
+public:
+	TUint iDrive; 
+	const TUint16 * iName;
+	TUint32 iLength;
+	TUint32 iFlags;
+	};
+
+class TSVPHostFsRmDirInfo
+	{
+public:
+	inline TSVPHostFsRmDirInfo() :
+		iDrive(0),
+		iName(0),
+		iLength(0)
+		{};
+	inline TSVPHostFsRmDirInfo(TUint aDrive, const THostFileName & aName) :
+		iDrive(aDrive),
+		iName(aName.Ptr()),
+		iLength(aName.Length())
+		{};
+public:
+	TUint iDrive; 
+	const TUint16 * iName;
+	TUint32 iLength;
+	};
+
+class TSVPHostFsDeleteInfo
+	{
+public:
+	inline TSVPHostFsDeleteInfo() :
+		iDrive(0),
+		iName(0),
+		iLength(0)
+		{};
+	inline TSVPHostFsDeleteInfo(TUint aDrive, const THostFileName & aName) :
+		iDrive(aDrive),
+		iName(aName.Ptr()),
+		iLength(aName.Length())
+		{};
+public:
+	TUint iDrive; 
+	const TUint16 * iName;
+	TUint32 iLength;
+	};
+
+class TSVPHostFsRenameInfo
+	{
+public:
+	inline TSVPHostFsRenameInfo() :
+		iDrive(0),
+		iOldName(0),
+		iOldLength(0),
+		iNewName(0),
+		iNewLength(0)
+		{};
+	inline TSVPHostFsRenameInfo(TUint aDrive, const THostFileName & aOldName, const THostFileName & aNewName) :
+		iDrive(aDrive),
+		iOldName(aOldName.Ptr()),
+		iOldLength(aOldName.Length()),
+		iNewName(aNewName.Ptr()),
+		iNewLength(aNewName.Length())
+		{};
+public:
+	TUint iDrive; 
+	const TUint16 * iOldName;
+	TUint32 iOldLength;
+	const TUint16 * iNewName;
+	TUint32 iNewLength;
+	};
+
+class TSVPHostFsReplaceInfo
+	{
+public:
+	inline TSVPHostFsReplaceInfo() :
+		iDrive(0),
+		iOldName(0),
+		iOldLength(0),
+		iNewName(0),
+		iNewLength(0)
+		{};
+	inline TSVPHostFsReplaceInfo(TUint aDrive, const THostFileName & aOldName, const THostFileName & aNewName) :
+		iDrive(aDrive),
+		iOldName(aOldName.Ptr()),
+		iOldLength(aOldName.Length()),
+		iNewName(aNewName.Ptr()),
+		iNewLength(aNewName.Length())
+		{};
+public:
+	TUint iDrive; 
+	const TUint16 * iOldName;
+	TUint32 iOldLength;
+	const TUint16 * iNewName;
+	TUint32 iNewLength;
+	};
+
+class TSVPHostFsEntryInfo
+	{
+public:
+	inline TSVPHostFsEntryInfo() :
+		iDrive(0),
+		iName(0),
+		iLength(0),
+		iAtt(0),
+		iModified(0),
+		iSize(0),
+		iTimeType(EUnknown)
+		{};
+	inline TSVPHostFsEntryInfo(TUint aDrive, const THostFileName & aName) :
+		iDrive(aDrive),
+		iName(aName.Ptr()),
+		iLength(aName.Length()),
+		iAtt(0),
+		iModified(0),
+		iSize(0),
+		iTimeType(EUnknown)
+		{};
+public:
+	TUint iDrive; 
+	const TUint16 * iName;
+	TUint32 iLength;
+	TUint iAtt;
+	TUint32 iModified; // time in seconds since the epoc
+	TInt iSize;
+	TFileTimeType iTimeType;
+	char iHostName[KMaxFileName];
+};
+
+class TSVPHostFsSetEntryInfo
+	{
+public:
+	inline TSVPHostFsSetEntryInfo() :
+		iDrive(0),
+		iName(0),
+		iModified(0),
+		iNewAtt(0),
+		iTimeType(EUnknown)
+		{};
+	inline TSVPHostFsSetEntryInfo(TUint aDrive, const THostFileName & aName, TUint32 aModified, TUint aNewAtt) :
+		iDrive(aDrive),
+		iName(aName.Ptr()),
+		iModified(aModified),
+		iNewAtt(aNewAtt),
+		iTimeType(EUnknown)
+		{};
+public:
+	TUint iDrive; 
+	const TUint16 *iName;
+	TUint32 iModified; // time in seconds since the epoc
+	TUint iNewAtt;
+	TFileTimeType iTimeType;
+	};
+
+class TSVPHostFsDirOpenInfo
+	{
+public:
+	inline TSVPHostFsDirOpenInfo() :
+		iDrive(0),
+		iName(0),
+		iLength(0),
+		iHandle(0)
+		{};
+inline TSVPHostFsDirOpenInfo(TUint aDrive, const THostFileName & aName) :
+		iDrive(aDrive),
+		iName(aName.Ptr()),
+		iLength(aName.Length()),
+		iHandle(0)
+		{};
+public:
+	TUint iDrive; 
+	const TUint16 * iName;
+	TUint32 iLength;
+	TUint32 iHandle;
+	};
+
+#define SVP_HOST_FS_INVALID_FILE_HANDLE -1
+class TSVPHostFsFileOpenInfo
+	{
+public:
+	inline TSVPHostFsFileOpenInfo() :
+		iDrive(0),
+		iName(0),
+		iLength(0), // of file name
+		iMode(0),
+		iOpen(0),
+		iAtt(0),
+		iModified(0), // time in seconds since the epoc
+		iSize(0),     // of file
+		iTimeType(EUnknown),
+		iHandle(SVP_HOST_FS_INVALID_FILE_HANDLE)
+		{};
+	inline TSVPHostFsFileOpenInfo(TUint aDrive, const THostFileName & aName, TUint32 aMode, TUint32 anOpen) :
+		iDrive(aDrive),
+		iName(aName.Ptr()),
+		iLength(aName.Length()),
+		iMode(aMode),
+		iOpen(anOpen),
+		iAtt(0),
+		iModified(0), // time in seconds since the epoc
+		iSize(0),     // of file
+		iTimeType(EUnknown),
+		iHandle(SVP_HOST_FS_INVALID_FILE_HANDLE)
+		{};
+public:
+	TUint iDrive; 
+	const TUint16 * iName;
+	TUint32 iLength;
+	TUint32 iMode;
+	TUint32 iOpen;
+	TUint iAtt;
+	TUint32 iModified; // time in seconds since the epoc
+	TInt iSize;
+	TFileTimeType iTimeType;
+	TInt iHandle;
+	};
+
+class TSVPHostFsFileReadInfo
+	{
+public:
+	inline TSVPHostFsFileReadInfo() :
+		iDrive(0),
+		iHandle(0),
+		iLength(0),
+		iPos(0),
+		iBuf(0)
+		{};
+	inline TSVPHostFsFileReadInfo(TUint aDrive, TUint aHandle,TInt aLength,TInt aPos, char * aBuf):
+		iDrive(aDrive),
+		iHandle(aHandle),
+		iLength(aLength),
+		iPos(aPos),
+		iBuf(aBuf)
+		{};
+public:
+	TUint iDrive; 
+	TUint iHandle;
+	TInt iLength;
+	TInt iPos;
+	char * iBuf;
+	};	
+
+class TSVPHostFsFileWriteInfo
+	{
+public:
+	inline TSVPHostFsFileWriteInfo() :
+		iDrive(0),
+		iHandle(0),
+		iLength(0),
+		iPos(0),
+		iBuf(0)
+		{};
+	inline TSVPHostFsFileWriteInfo(TUint aDrive, TUint aHandle,TInt aLength,TInt aPos, char * aBuf):
+		iDrive(aDrive),
+		iHandle(aHandle),
+		iLength(aLength),
+		iPos(aPos),
+		iBuf(aBuf)
+		{};
+public:
+	TUint iDrive; 
+	TUint iHandle;
+	TInt iLength;
+	TInt iPos;
+	char * iBuf;
+	};
+
+class TSVPHostFsFileSetSizeInfo
+	{
+public:
+	inline TSVPHostFsFileSetSizeInfo() :
+		iDrive(0),
+		iHandle(0),
+		iLength(0)
+		{};
+	inline TSVPHostFsFileSetSizeInfo(TUint aDrive, TUint aHandle, TInt aLength) :
+		iDrive(aDrive),
+		iHandle(aHandle),
+		iLength(aLength)
+		{};
+public:
+	TUint iDrive; 
+	TUint iHandle;
+	TInt iLength;
+	};
+
+class TSVPHostFsDirReadInfo
+{
+public:
+	inline TSVPHostFsDirReadInfo() :
+		iDrive(0),
+		iHandle(0),
+		iLength(0),
+		iAtt(0),
+		iModified(0),
+		iSize(0),
+		iTimeType(EUnknown)
+		{};
+	inline TSVPHostFsDirReadInfo(TUint aDrive, TUint32 aHandle) :
+		iDrive(aDrive),
+		iHandle(aHandle),
+		iLength(-1),
+		iAtt(0),
+		iModified(666),
+		iSize(-1),
+		iTimeType(EUnknown)
+		{};
+public:
+	TUint iDrive; 
+	TUint32 iHandle;
+	TInt iLength;
+	TUint16 iName[KMaxPath];
+	TUint iAtt;
+	TUint32 iModified; // time in seconds since the epoc
+	TInt iSize;
+	TFileTimeType iTimeType;
+	};
+
+class TCapsSVPHostFsDriver
+	{
+public:
+	TVersion	iVersion;
+	};
+
+_LIT(KSVPHostFsDriverName,"SVP Host Filesystem Driver");
+_LIT(KSVPHostFsDriverLDD, "svphostfsdriver.ldd");
+
+// Version information
+const TInt KMajorVersionNumber=0;
+const TInt KMinorVersionNumber=0;
+const TInt KBuildVersionNumber=1;
+
+// keep in sync with the definitions in QEMU/hw/svphostfs.c 
+#define LOWEST_DRIVE 'A'
+#define HIGHEST_DRIVE 'Z'
+#define DRIVE_MAP_SIZE (HIGHEST_DRIVE - LOWEST_DRIVE + 1)
+
+class RSVPHostFsDriver : public RBusLogicalChannel
+	{
+public:
+
+	enum TControl
+		{
+		EDummu = 0,
+
+		// Codes for CMountCB operations
+		EMkDir,
+		ERmDir,
+		EDelete,
+		ERename,
+		EReplace,
+		EReadUid,
+		EEntry,
+		ESetEntry,
+		EFileOpen,
+		EDirOpen,
+		
+		// Code for CFileCB operations
+		EFileClose, 
+		EFileRead,
+		EFileWrite,
+		EFileSetSize,
+		EFileFlushAll,
+
+		// Code for CDirCB operations
+		EDirClose, 
+		EDirRead,
+
+		// Device ops
+		EGetDeviceID,
+		EGetDriveMap,
+
+		};
+	
+		
+public:
+#ifndef __KERNEL_MODE__  // don't need to see these in the driver
+	TInt Open();
+	TInt MkDir(TSVPHostFsMkDirInfo& aInfo);
+	TInt RmDir(TSVPHostFsRmDirInfo& aInfo);
+	TInt Delete(TSVPHostFsDeleteInfo& aInfo);
+	TInt Rename(TSVPHostFsRenameInfo& aInfo);
+	TInt Replace(TSVPHostFsReplaceInfo& aInfo);
+	TInt ReadUid(const TDesC& aName,TEntry& anEntry);
+	TInt Entry(TSVPHostFsEntryInfo& aInfo);
+	TInt SetEntry(TSVPHostFsSetEntryInfo &aInfo);
+	TInt FileOpen(TSVPHostFsFileOpenInfo &aInfo);
+	TInt DirOpen(TSVPHostFsDirOpenInfo& aInfo);
+	TInt FileClose(TUint32 aDrive, TUint32 aHandle);
+	TInt FileRead(TSVPHostFsFileReadInfo& aInfo);		
+	TInt FileWrite(TSVPHostFsFileWriteInfo& aInfo);
+	TInt FileSetSize(TSVPHostFsFileSetSizeInfo &aInfo);
+	TInt FileSetEntry(TSVPHostFsSetEntryInfo &aInfo);
+	TInt FlushData(TUint32 aDrive);
+	TInt FlushAll(TUint32 aDrive);
+
+	TInt DirClose(TUint32 aDrive, TUint32 aHandle);
+	TInt DirRead(TSVPHostFsDirReadInfo& aInfo);
+
+	TUint32 GetDeviceID(TUint32 aDrive);
+
+	TInt GetDriveMap(TUint32 * aMap);
+
+private:
+	inline TInt DoSVPRequest(TInt aReqNo, TAny * a1) 
+		{
+		TRequestStatus status;
+		DoRequest(aReqNo, status, a1);
+		User::WaitForRequest(status);
+		return status.Int();
+		}
+
+	inline TInt DoSVPRequest(TInt aReqNo, TAny * a1, TAny * a2) 
+		{
+		TRequestStatus status;
+		DoRequest(aReqNo, status, a1, a2);
+		User::WaitForRequest(status);
+		return status.Int();
+		}
+#endif
+	};
+
+#endif // __rsvphostfsdriver_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/svphostfs.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,27 @@
+/*
+* 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         svphostfs.exe        
+TARGETTYPE     EXE
+SOURCEPATH	   fs
+SOURCE         svphostmain.cpp rsvphostfsdriver.cpp
+LIBRARY        euser.lib efsrv.lib efile.lib hal.lib
+SYSTEMINCLUDE  inc	
+SYSTEMINCLUDE  /epoc32/include 
+
+CAPABILITY		DISKADMIN ALLFILES
+VENDORID 0x70000001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/svphostfsdriver.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,42 @@
+/*
+* 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:
+*
+*/
+
+//macro	__KERNEL_MODE__
+
+#include <variant.mmh>
+#include   <kernel\kern_ext.mmh>
+
+systeminclude		AsspNKernIncludePath
+systeminclude		inc
+systeminclude		..\svpplatform\libfdt
+systeminclude 		\epoc32\include\stdapis
+
+target			VariantTarget(svphostfsdriver,ldd)
+linkas			svphostfsdriver.ldd
+targettype		ldd
+
+
+sourcepath		driver
+source			svphostfsdriver.cpp stringops.c
+
+option armcc --gnu
+
+staticlibrary		libfdt.lib 
+noexportlibrary
+
+vendorid 		0x70000001
+capability		all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/svphostfsstart.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,27 @@
+/*
+* 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         svphostfsstart.exe        
+TARGETTYPE     EXE
+SOURCEPATH	   fs
+SOURCE         svphostfsstart.cpp
+LIBRARY        euser.lib efsrv.lib efile.lib hal.lib
+SYSTEMINCLUDE  inc	
+SYSTEMINCLUDE  /epoc32/include 
+
+CAPABILITY		DISKADMIN ALLFILES
+VENDORID 0x70000001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svphostfs/svphostfsy.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,40 @@
+/*
+* 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			svphostfsy.fsy
+TARGETTYPE		fsy
+
+SOURCEPATH		fs
+SOURCE			svphostfsy.cpp svphostmnt.cpp svphostfil.cpp svphostdir.cpp rsvphostfsdriver.cpp
+NOSTRICTDEF
+
+SYSTEMINCLUDE	inc	
+SYSTEMINCLUDE	/epoc32/include 
+
+LIBRARY			efsrv.lib euser.lib hal.lib
+LIBRARY			efile.lib
+
+UID		0x100039df 0x10000CEE
+VENDORID 0x70000001
+
+unpaged
+
+TARGETPATH 	/sys/bin
+
+//CAPABILITY TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
+#include "../../f32/group/f32caps.mmh"  // Capabilities of File Server process
+#include "../../f32/group/f32.mmh"      // Generic definitions for the whole f32 component
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/fdt.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,32 @@
+/*
+* 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			libfdt.lib
+targettype		klib
+
+systeminclude 		libfdt
+systeminclude 		\epoc32\include\stdapis
+
+sourcepath		libfdt
+
+source			fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c
+
+option armcc --gnu
+option_replace armcc --diag_suppress 161,611,654,997,1152,1300,1464,1488,6318,6331,1254,1293,68
+capability		all
+
+VENDORID 0x70000001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/Makefile.libfdt	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,14 @@
+# Makefile.libfdt
+#
+# This is not a complete Makefile of itself.  Instead, it is designed to
+# be easily embeddable into other systems of Makefiles.
+#
+LIBFDT_SRCS = fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c
+LIBFDT_INCLUDES = fdt.h libfdt.h
+LIBFDT_EXTRA = libfdt_internal.h
+LIBFDT_LIB = libfdt/libfdt.a
+
+LIBFDT_OBJS = $(LIBFDT_SRCS:%.c=%.o)
+
+$(LIBFDT_objdir)/$(LIBFDT_LIB): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/TODO	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,3 @@
+- Tree traversal functions
+- Graft function
+- Complete libfdt.h documenting comments
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/bswap.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,217 @@
+#ifndef BSWAP_H
+#define BSWAP_H
+
+#include "config-host.h"
+
+#include <inttypes.h>
+
+#ifdef HAVE_MACHINE_BSWAP_H
+#include <sys/endian.h>
+#include <sys/types.h>
+#include <machine/bswap.h>
+#else
+
+#ifdef HAVE_BYTESWAP_H
+#include <byteswap.h>
+#else
+
+#define bswap_16(x) \
+({ \
+	uint16_t __x = (x); \
+	((uint16_t)( \
+		(((uint16_t)(__x) & (uint16_t)0x00ffU) << 8) | \
+		(((uint16_t)(__x) & (uint16_t)0xff00U) >> 8) )); \
+})
+
+#define bswap_32(x) \
+({ \
+	uint32_t __x = (x); \
+	((uint32_t)( \
+		(((uint32_t)(__x) & (uint32_t)0x000000ffUL) << 24) | \
+		(((uint32_t)(__x) & (uint32_t)0x0000ff00UL) <<  8) | \
+		(((uint32_t)(__x) & (uint32_t)0x00ff0000UL) >>  8) | \
+		(((uint32_t)(__x) & (uint32_t)0xff000000UL) >> 24) )); \
+})
+
+#define bswap_64(x) \
+({ \
+	uint64_t __x = (x); \
+	((uint64_t)( \
+		(uint64_t)(((uint64_t)(__x) & (uint64_t)0x00000000000000ffULL) << 56) | \
+		(uint64_t)(((uint64_t)(__x) & (uint64_t)0x000000000000ff00ULL) << 40) | \
+		(uint64_t)(((uint64_t)(__x) & (uint64_t)0x0000000000ff0000ULL) << 24) | \
+		(uint64_t)(((uint64_t)(__x) & (uint64_t)0x00000000ff000000ULL) <<  8) | \
+	        (uint64_t)(((uint64_t)(__x) & (uint64_t)0x000000ff00000000ULL) >>  8) | \
+		(uint64_t)(((uint64_t)(__x) & (uint64_t)0x0000ff0000000000ULL) >> 24) | \
+		(uint64_t)(((uint64_t)(__x) & (uint64_t)0x00ff000000000000ULL) >> 40) | \
+		(uint64_t)(((uint64_t)(__x) & (uint64_t)0xff00000000000000ULL) >> 56) )); \
+})
+
+#endif /* !HAVE_BYTESWAP_H */
+
+static inline uint16_t bswap16(uint16_t x)
+{
+    return bswap_16(x);
+}
+
+static inline uint32_t bswap32(uint32_t x)
+{
+    return bswap_32(x);
+}
+
+static inline uint64_t bswap64(uint64_t x)
+{
+    return bswap_64(x);
+}
+
+#endif /* ! HAVE_MACHINE_BSWAP_H */
+
+static inline void bswap16s(uint16_t *s)
+{
+    *s = bswap16(*s);
+}
+
+static inline void bswap32s(uint32_t *s)
+{
+    *s = bswap32(*s);
+}
+
+static inline void bswap64s(uint64_t *s)
+{
+    *s = bswap64(*s);
+}
+
+#if defined(WORDS_BIGENDIAN)
+#define be_bswap(v, size) (v)
+#define le_bswap(v, size) bswap ## size(v)
+#define be_bswaps(v, size)
+#define le_bswaps(p, size) *p = bswap ## size(*p);
+#else
+#define le_bswap(v, size) (v)
+#define be_bswap(v, size) bswap ## size(v)
+#define le_bswaps(v, size)
+#define be_bswaps(p, size) *p = bswap ## size(*p);
+#endif
+
+#define CPU_CONVERT(endian, size, type)\
+static inline type endian ## size ## _to_cpu(type v)\
+{\
+    return endian ## _bswap(v, size);\
+}\
+\
+static inline type cpu_to_ ## endian ## size(type v)\
+{\
+    return endian ## _bswap(v, size);\
+}\
+\
+static inline void endian ## size ## _to_cpus(type *p)\
+{\
+    endian ## _bswaps(p, size)\
+}\
+\
+static inline void cpu_to_ ## endian ## size ## s(type *p)\
+{\
+    endian ## _bswaps(p, size)\
+}\
+\
+static inline type endian ## size ## _to_cpup(const type *p)\
+{\
+    return endian ## size ## _to_cpu(*p);\
+}\
+\
+static inline void cpu_to_ ## endian ## size ## w(type *p, type v)\
+{\
+     *p = cpu_to_ ## endian ## size(v);\
+}
+
+CPU_CONVERT(be, 16, uint16_t)
+CPU_CONVERT(be, 32, uint32_t)
+CPU_CONVERT(be, 64, uint64_t)
+
+CPU_CONVERT(le, 16, uint16_t)
+CPU_CONVERT(le, 32, uint32_t)
+CPU_CONVERT(le, 64, uint64_t)
+
+/* unaligned versions (optimized for frequent unaligned accesses)*/
+
+#if defined(__i386__) || defined(__powerpc__)
+
+#define cpu_to_le16wu(p, v) cpu_to_le16w(p, v)
+#define cpu_to_le32wu(p, v) cpu_to_le32w(p, v)
+#define le16_to_cpupu(p) le16_to_cpup(p)
+#define le32_to_cpupu(p) le32_to_cpup(p)
+#define be32_to_cpupu(p) be32_to_cpup(p)
+
+#define cpu_to_be16wu(p, v) cpu_to_be16w(p, v)
+#define cpu_to_be32wu(p, v) cpu_to_be32w(p, v)
+
+#else
+
+static inline void cpu_to_le16wu(uint16_t *p, uint16_t v)
+{
+    uint8_t *p1 = (uint8_t *)p;
+
+    p1[0] = v;
+    p1[1] = v >> 8;
+}
+
+static inline void cpu_to_le32wu(uint32_t *p, uint32_t v)
+{
+    uint8_t *p1 = (uint8_t *)p;
+
+    p1[0] = v;
+    p1[1] = v >> 8;
+    p1[2] = v >> 16;
+    p1[3] = v >> 24;
+}
+
+static inline uint16_t le16_to_cpupu(const uint16_t *p)
+{
+    const uint8_t *p1 = (const uint8_t *)p;
+    return p1[0] | (p1[1] << 8);
+}
+
+static inline uint32_t le32_to_cpupu(const uint32_t *p)
+{
+    const uint8_t *p1 = (const uint8_t *)p;
+    return p1[0] | (p1[1] << 8) | (p1[2] << 16) | (p1[3] << 24);
+}
+
+static inline uint32_t be32_to_cpupu(const uint32_t *p)
+{
+    const uint8_t *p1 = (const uint8_t *)p;
+    return p1[3] | (p1[2] << 8) | (p1[1] << 16) | (p1[0] << 24);
+}
+
+static inline void cpu_to_be16wu(uint16_t *p, uint16_t v)
+{
+    uint8_t *p1 = (uint8_t *)p;
+
+    p1[0] = v >> 8;
+    p1[1] = v;
+}
+
+static inline void cpu_to_be32wu(uint32_t *p, uint32_t v)
+{
+    uint8_t *p1 = (uint8_t *)p;
+
+    p1[0] = v >> 24;
+    p1[1] = v >> 16;
+    p1[2] = v >> 8;
+    p1[3] = v;
+}
+
+#endif
+
+#ifdef WORDS_BIGENDIAN
+#define cpu_to_32wu cpu_to_be32wu
+#else
+#define cpu_to_32wu cpu_to_le32wu
+#endif
+
+#undef le_bswap
+#undef be_bswap
+#undef le_bswaps
+#undef be_bswaps
+
+#endif /* BSWAP_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/config-host.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,10 @@
+#ifndef CONFIG_HOST_H
+#define CONFIG_HOST_H
+
+// dont have machine level bswap
+//#define HAVE_MACHINE_BSWAP_H
+
+// dont have byteswap
+//#define HAVE_BYTESWAP_H
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/fdt.c	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,156 @@
+/*
+ * libfdt - Flat Device Tree manipulation
+ * Copyright (C) 2006 David Gibson, IBM Corporation.
+ *
+ * libfdt is dual licensed: you can use it either under the terms of
+ * the GPL, or the BSD license, at your option.
+ *
+ *  a) This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This library is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public
+ *     License along with this library; if not, write to the Free
+ *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ *     MA 02110-1301 USA
+ *
+ * Alternatively,
+ *
+ *  b) Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *     1. Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *     2. Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "libfdt_env.h"
+
+#include <fdt.h>
+#include <libfdt.h>
+
+#include "libfdt_internal.h"
+
+int fdt_check_header(const void *fdt)
+{
+	if (fdt_magic(fdt) == FDT_MAGIC) {
+		/* Complete tree */
+		if (fdt_version(fdt) < FDT_FIRST_SUPPORTED_VERSION)
+			return -FDT_ERR_BADVERSION;
+		if (fdt_last_comp_version(fdt) > FDT_LAST_SUPPORTED_VERSION)
+			return -FDT_ERR_BADVERSION;
+	} else if (fdt_magic(fdt) == SW_MAGIC) {
+		/* Unfinished sequential-write blob */
+		if (fdt_size_dt_struct(fdt) == 0)
+			return -FDT_ERR_BADSTATE;
+	} else {
+		return -FDT_ERR_BADMAGIC;
+	}
+
+	return 0;
+}
+
+const void *fdt_offset_ptr(const void *fdt, int offset, int len)
+{
+	const void *p;
+
+	if (fdt_version(fdt) >= 0x11)
+		if (((offset + len) < offset)
+		    || ((offset + len) > fdt_size_dt_struct(fdt)))
+			return NULL;
+
+	p = _fdt_offset_ptr(fdt, offset);
+
+	if (p + len < p)
+		return NULL;
+	return p;
+}
+
+uint32_t fdt_next_tag(const void *fdt, int offset, int *nextoffset)
+{
+	const uint32_t *tagp, *lenp;
+	uint32_t tag;
+	const char *p;
+
+	if (offset % FDT_TAGSIZE)
+		return -1;
+
+	tagp = fdt_offset_ptr(fdt, offset, FDT_TAGSIZE);
+	if (! tagp)
+		return FDT_END; /* premature end */
+	tag = fdt32_to_cpu(*tagp);
+	offset += FDT_TAGSIZE;
+
+	switch (tag) {
+	case FDT_BEGIN_NODE:
+		/* skip name */
+		do {
+			p = fdt_offset_ptr(fdt, offset++, 1);
+		} while (p && (*p != '\0'));
+		if (! p)
+			return FDT_END;
+		break;
+	case FDT_PROP:
+		lenp = fdt_offset_ptr(fdt, offset, sizeof(*lenp));
+		if (! lenp)
+			return FDT_END;
+		/* skip name offset, length and value */
+		offset += 2*FDT_TAGSIZE + fdt32_to_cpu(*lenp);
+		break;
+	}
+
+	if (nextoffset)
+		*nextoffset = ALIGN(offset, FDT_TAGSIZE);
+
+	return tag;
+}
+
+const char *_fdt_find_string(const char *strtab, int tabsize, const char *s)
+{
+	int len = strlen(s) + 1;
+	const char *last = strtab + tabsize - len;
+	const char *p;
+
+	for (p = strtab; p <= last; p++)
+		if (memeq(p, s, len))
+			return p;
+	return NULL;
+}
+
+int fdt_move(const void *fdt, void *buf, int bufsize)
+{
+	int err = fdt_check_header(fdt);
+
+	if (err)
+		return err;
+
+	if (fdt_totalsize(fdt) > bufsize)
+		return -FDT_ERR_NOSPACE;
+
+	memmove(buf, fdt, fdt_totalsize(fdt));
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/fdt.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,6 @@
+
+extern "C" {
+
+#include "fdt.c"
+
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/fdt.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,60 @@
+#ifndef _FDT_H
+#define _FDT_H
+
+#ifndef __ASSEMBLY__
+
+struct fdt_header {
+	uint32_t magic;			 /* magic word FDT_MAGIC */
+	uint32_t totalsize;		 /* total size of DT block */
+	uint32_t off_dt_struct;		 /* offset to structure */
+	uint32_t off_dt_strings;	 /* offset to strings */
+	uint32_t off_mem_rsvmap;	 /* offset to memory reserve map */
+	uint32_t version;		 /* format version */
+	uint32_t last_comp_version;	 /* last compatible version */
+
+	/* version 2 fields below */
+	uint32_t boot_cpuid_phys;	 /* Which physical CPU id we're
+					    booting on */
+	/* version 3 fields below */
+	uint32_t size_dt_strings;	 /* size of the strings block */
+
+	/* version 17 fields below */
+	uint32_t size_dt_struct;	 /* size of the structure block */
+};
+
+struct fdt_reserve_entry {
+	uint64_t address;
+	uint64_t size;
+};
+
+struct fdt_node_header {
+	uint32_t tag;
+	char name[0];
+};
+
+struct fdt_property {
+	uint32_t tag;
+	uint32_t len;
+	uint32_t nameoff;
+	char data[0];
+};
+
+#endif /* !__ASSEMBLY */
+
+#define FDT_MAGIC	0xd00dfeed	/* 4: version, 4: total size */
+#define FDT_TAGSIZE	sizeof(uint32_t)
+
+#define FDT_BEGIN_NODE	0x1		/* Start node: full name */
+#define FDT_END_NODE	0x2		/* End node */
+#define FDT_PROP	0x3		/* Property: name off,
+					   size, content */
+#define FDT_NOP		0x4		/* nop */
+#define FDT_END		0x9
+
+#define FDT_V1_SIZE	(7*sizeof(uint32_t))
+#define FDT_V2_SIZE	(FDT_V1_SIZE + sizeof(uint32_t))
+#define FDT_V3_SIZE	(FDT_V2_SIZE + sizeof(uint32_t))
+#define FDT_V16_SIZE	FDT_V3_SIZE
+#define FDT_V17_SIZE	(FDT_V16_SIZE + sizeof(uint32_t))
+
+#endif /* _FDT_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/fdt_ro.c	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,583 @@
+/*
+ * libfdt - Flat Device Tree manipulation
+ * Copyright (C) 2006 David Gibson, IBM Corporation.
+ *
+ * libfdt is dual licensed: you can use it either under the terms of
+ * the GPL, or the BSD license, at your option.
+ *
+ *  a) This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This library is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public
+ *     License along with this library; if not, write to the Free
+ *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ *     MA 02110-1301 USA
+ *
+ * Alternatively,
+ *
+ *  b) Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *     1. Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *     2. Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "libfdt_env.h"
+
+#include <fdt.h>
+#include <libfdt.h>
+
+#include "libfdt_internal.h"
+
+#define CHECK_HEADER(fdt) \
+	{ \
+		int err; \
+		if ((err = fdt_check_header(fdt)) != 0) \
+			return err; \
+	}
+
+static int nodename_eq(const void *fdt, int offset,
+		       const char *s, int len)
+{
+	const char *p = fdt_offset_ptr(fdt, offset, len+1);
+
+	if (! p)
+		/* short match */
+		return 0;
+
+	if (memcmp(p, s, len) != 0)
+		return 0;
+
+	if (p[len] == '\0')
+		return 1;
+	else if (!memchr(s, '@', len) && (p[len] == '@'))
+		return 1;
+	else
+		return 0;
+}
+
+const char *fdt_string(const void *fdt, int stroffset)
+{
+	return (char *)fdt + fdt_off_dt_strings(fdt) + stroffset;
+}
+
+int fdt_get_mem_rsv(const void *fdt, int n, uint64_t *address, uint64_t *size)
+{
+	CHECK_HEADER(fdt);
+	*address = fdt64_to_cpu(_fdt_mem_rsv(fdt, n)->address);
+	*size = fdt64_to_cpu(_fdt_mem_rsv(fdt, n)->size);
+	return 0;
+}
+
+int fdt_num_mem_rsv(const void *fdt)
+{
+	int i = 0;
+
+	while (fdt64_to_cpu(_fdt_mem_rsv(fdt, i)->size) != 0)
+		i++;
+	return i;
+}
+
+int fdt_subnode_offset_namelen(const void *fdt, int parentoffset,
+			       const char *name, int namelen)
+{
+	int level = 0;
+	uint32_t tag;
+	int offset, nextoffset;
+
+	CHECK_HEADER(fdt);
+
+	tag = fdt_next_tag(fdt, parentoffset, &nextoffset);
+	if (tag != FDT_BEGIN_NODE)
+		return -FDT_ERR_BADOFFSET;
+
+	do {
+		offset = nextoffset;
+		tag = fdt_next_tag(fdt, offset, &nextoffset);
+
+		switch (tag) {
+		case FDT_END:
+			return -FDT_ERR_TRUNCATED;
+
+		case FDT_BEGIN_NODE:
+			level++;
+			if (level != 1)
+				continue;
+			if (nodename_eq(fdt, offset+FDT_TAGSIZE, name, namelen))
+				/* Found it! */
+				return offset;
+			break;
+
+		case FDT_END_NODE:
+			level--;
+			break;
+
+		case FDT_PROP:
+		case FDT_NOP:
+			break;
+
+		default:
+			return -FDT_ERR_BADSTRUCTURE;
+		}
+	} while (level >= 0);
+
+	return -FDT_ERR_NOTFOUND;
+}
+
+int fdt_subnode_offset(const void *fdt, int parentoffset,
+		       const char *name)
+{
+	return fdt_subnode_offset_namelen(fdt, parentoffset, name, strlen(name));
+}
+
+int fdt_path_offset(const void *fdt, const char *path)
+{
+	const char *end = path + strlen(path);
+	const char *p = path;
+	int offset = 0;
+
+	CHECK_HEADER(fdt);
+
+	if (*path != '/')
+		return -FDT_ERR_BADPATH;
+
+	while (*p) {
+		const char *q;
+
+		while (*p == '/')
+			p++;
+		if (! *p)
+			return offset;
+		q = strchr(p, '/');
+		if (! q)
+			q = end;
+
+		offset = fdt_subnode_offset_namelen(fdt, offset, p, q-p);
+		if (offset < 0)
+			return offset;
+
+		p = q;
+	}
+
+	return offset;
+}
+
+const char *fdt_get_name(const void *fdt, int nodeoffset, int *len)
+{
+	const struct fdt_node_header *nh;
+	int err;
+
+	if ((err = fdt_check_header(fdt)) != 0)
+		goto fail;
+
+	err = -FDT_ERR_BADOFFSET;
+	nh = fdt_offset_ptr(fdt, nodeoffset, sizeof(*nh));
+	if (!nh || (fdt32_to_cpu(nh->tag) != FDT_BEGIN_NODE))
+		goto fail;
+
+	if (len)
+		*len = strlen(nh->name);
+
+	return nh->name;
+
+ fail:
+	if (len)
+		*len = err;
+	return NULL;
+}
+
+const struct fdt_property *fdt_get_property(const void *fdt,
+					    int nodeoffset,
+					    const char *name, int *lenp)
+{
+	uint32_t tag;
+	const struct fdt_property *prop;
+	int namestroff;
+	int offset, nextoffset;
+	int err;
+
+	if ((err = fdt_check_header(fdt)) != 0)
+		goto fail;
+
+	err = -FDT_ERR_BADOFFSET;
+	if (nodeoffset % FDT_TAGSIZE)
+		goto fail;
+
+	tag = fdt_next_tag(fdt, nodeoffset, &nextoffset);
+	if (tag != FDT_BEGIN_NODE)
+		goto fail;
+
+	do {
+		offset = nextoffset;
+
+		tag = fdt_next_tag(fdt, offset, &nextoffset);
+		switch (tag) {
+		case FDT_END:
+			err = -FDT_ERR_TRUNCATED;
+			goto fail;
+
+		case FDT_BEGIN_NODE:
+		case FDT_END_NODE:
+		case FDT_NOP:
+			break;
+
+		case FDT_PROP:
+			err = -FDT_ERR_BADSTRUCTURE;
+			prop = fdt_offset_ptr(fdt, offset, sizeof(*prop));
+			if (! prop)
+				goto fail;
+			namestroff = fdt32_to_cpu(prop->nameoff);
+			if (streq(fdt_string(fdt, namestroff), name)) {
+				/* Found it! */
+				int len = fdt32_to_cpu(prop->len);
+				prop = fdt_offset_ptr(fdt, offset,
+						      sizeof(*prop)+len);
+				if (! prop)
+					goto fail;
+
+				if (lenp)
+					*lenp = len;
+
+				return prop;
+			}
+			break;
+
+		default:
+			err = -FDT_ERR_BADSTRUCTURE;
+			goto fail;
+		}
+	} while ((tag != FDT_BEGIN_NODE) && (tag != FDT_END_NODE));
+
+	err = -FDT_ERR_NOTFOUND;
+ fail:
+	if (lenp)
+		*lenp = err;
+	return NULL;
+}
+
+const void *fdt_getprop(const void *fdt, int nodeoffset,
+		  const char *name, int *lenp)
+{
+	const struct fdt_property *prop;
+
+	prop = fdt_get_property(fdt, nodeoffset, name, lenp);
+	if (! prop)
+		return NULL;
+
+	return prop->data;
+}
+
+uint32_t fdt_get_phandle(const void *fdt, int nodeoffset)
+{
+	const uint32_t *php;
+	int len;
+
+	php = fdt_getprop(fdt, nodeoffset, "linux,phandle", &len);
+	if (!php || (len != sizeof(*php)))
+		return 0;
+
+	return fdt32_to_cpu(*php);
+}
+
+int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen)
+{
+	uint32_t tag;
+	int p = 0, overflow = 0;
+	int offset, nextoffset, namelen;
+	const char *name;
+
+	CHECK_HEADER(fdt);
+
+	tag = fdt_next_tag(fdt, 0, &nextoffset);
+	if (tag != FDT_BEGIN_NODE)
+		return -FDT_ERR_BADSTRUCTURE;
+
+	if (buflen < 2)
+		return -FDT_ERR_NOSPACE;
+	buf[0] = '/';
+	p = 1;
+
+	while (nextoffset <= nodeoffset) {
+		offset = nextoffset;
+		tag = fdt_next_tag(fdt, offset, &nextoffset);
+		switch (tag) {
+		case FDT_END:
+			return -FDT_ERR_BADOFFSET;
+
+		case FDT_BEGIN_NODE:
+			name = fdt_get_name(fdt, offset, &namelen);
+			if (!name)
+				return namelen;
+			if (overflow || ((p + namelen + 1) > buflen)) {
+				overflow++;
+				break;
+			}
+			memcpy(buf + p, name, namelen);
+			p += namelen;
+			buf[p++] = '/';
+			break;
+
+		case FDT_END_NODE:
+			if (overflow) {
+				overflow--;
+				break;
+			}
+			do {
+				p--;
+			} while  (buf[p-1] != '/');
+			break;
+
+		case FDT_PROP:
+		case FDT_NOP:
+			break;
+
+		default:
+			return -FDT_ERR_BADSTRUCTURE;
+		}
+	}
+
+	if (overflow)
+		return -FDT_ERR_NOSPACE;
+
+	if (p > 1) /* special case so that root path is "/", not "" */
+		p--;
+	buf[p] = '\0';
+	return p;
+}
+
+int fdt_supernode_atdepth_offset(const void *fdt, int nodeoffset,
+				 int supernodedepth, int *nodedepth)
+{
+	int level = -1;
+	uint32_t tag;
+	int offset, nextoffset = 0;
+	int supernodeoffset = -FDT_ERR_INTERNAL;
+
+	CHECK_HEADER(fdt);
+
+	if (supernodedepth < 0)
+		return -FDT_ERR_NOTFOUND;
+
+	do {
+		offset = nextoffset;
+		tag = fdt_next_tag(fdt, offset, &nextoffset);
+		switch (tag) {
+		case FDT_END:
+			return -FDT_ERR_BADOFFSET;
+
+		case FDT_BEGIN_NODE:
+			level++;
+			if (level == supernodedepth)
+				supernodeoffset = offset;
+			break;
+
+		case FDT_END_NODE:
+			level--;
+			break;
+
+		case FDT_PROP:
+		case FDT_NOP:
+			break;
+
+		default:
+			return -FDT_ERR_BADSTRUCTURE;
+		}
+	} while (offset < nodeoffset);
+
+	if (nodedepth)
+		*nodedepth = level;
+
+	if (supernodedepth > level)
+		return -FDT_ERR_NOTFOUND;
+	return supernodeoffset;
+}
+
+int fdt_node_depth(const void *fdt, int nodeoffset)
+{
+	int nodedepth;
+	int err;
+
+	err = fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, &nodedepth);
+	if (err)
+		return (err < 0) ? err : -FDT_ERR_INTERNAL;
+	return nodedepth;
+}
+
+int fdt_parent_offset(const void *fdt, int nodeoffset)
+{
+	int nodedepth = fdt_node_depth(fdt, nodeoffset);
+
+	if (nodedepth < 0)
+		return nodedepth;
+	return fdt_supernode_atdepth_offset(fdt, nodeoffset,
+					    nodedepth - 1, NULL);
+}
+
+int fdt_node_offset_by_prop_value(const void *fdt, int startoffset,
+				  const char *propname,
+				  const void *propval, int proplen)
+{
+	uint32_t tag;
+	int offset, nextoffset;
+	const void *val;
+	int len;
+
+	CHECK_HEADER(fdt);
+
+	if (startoffset >= 0) {
+		tag = fdt_next_tag(fdt, startoffset, &nextoffset);
+		if (tag != FDT_BEGIN_NODE)
+			return -FDT_ERR_BADOFFSET;
+	} else {
+		nextoffset = 0;
+	}
+
+	/* FIXME: The algorithm here is pretty horrible: we scan each
+	 * property of a node in fdt_getprop(), then if that didn't
+	 * find what we want, we scan over them again making our way
+	 * to the next node.  Still it's the easiest to implement
+	 * approach; performance can come later. */
+	do {
+		offset = nextoffset;
+		tag = fdt_next_tag(fdt, offset, &nextoffset);
+
+		switch (tag) {
+		case FDT_BEGIN_NODE:
+			val = fdt_getprop(fdt, offset, propname, &len);
+			if (val
+			    && (len == proplen)
+			    && (memcmp(val, propval, len) == 0))
+				return offset;
+			break;
+
+		case FDT_PROP:
+		case FDT_END:
+		case FDT_END_NODE:
+		case FDT_NOP:
+			break;
+
+		default:
+			return -FDT_ERR_BADSTRUCTURE;
+		}
+	} while (tag != FDT_END);
+
+	return -FDT_ERR_NOTFOUND;
+}
+
+int fdt_node_offset_by_phandle(const void *fdt, uint32_t phandle)
+{
+	if ((phandle == 0) || (phandle == -1))
+		return -FDT_ERR_BADPHANDLE;
+	phandle = cpu_to_fdt32(phandle);
+	return fdt_node_offset_by_prop_value(fdt, -1, "linux,phandle",
+					     &phandle, sizeof(phandle));
+}
+
+int _stringlist_contains(const void *strlist, int listlen, const char *str)
+{
+	int len = strlen(str);
+	const void *p;
+
+	while (listlen >= len) {
+		if (memcmp(str, strlist, len+1) == 0)
+			return 1;
+		p = memchr(strlist, '\0', listlen);
+		if (!p)
+			return 0; /* malformed strlist.. */
+		listlen -= (p-strlist) + 1;
+		strlist = p + 1;
+	}
+	return 0;
+}
+
+int fdt_node_check_compatible(const void *fdt, int nodeoffset,
+			      const char *compatible)
+{
+	const void *prop;
+	int len;
+
+	prop = fdt_getprop(fdt, nodeoffset, "compatible", &len);
+	if (!prop)
+		return len;
+	if (_stringlist_contains(prop, len, compatible))
+		return 0;
+	else
+		return 1;
+}
+
+int fdt_node_offset_by_compatible(const void *fdt, int startoffset,
+				  const char *compatible)
+{
+	uint32_t tag;
+	int offset, nextoffset;
+	int err;
+
+	CHECK_HEADER(fdt);
+
+	if (startoffset >= 0) {
+		tag = fdt_next_tag(fdt, startoffset, &nextoffset);
+		if (tag != FDT_BEGIN_NODE)
+			return -FDT_ERR_BADOFFSET;
+	} else {
+		nextoffset = 0;
+	}
+
+	/* FIXME: The algorithm here is pretty horrible: we scan each
+	 * property of a node in fdt_node_check_compatible(), then if
+	 * that didn't find what we want, we scan over them again
+	 * making our way to the next node.  Still it's the easiest to
+	 * implement approach; performance can come later. */
+	do {
+		offset = nextoffset;
+		tag = fdt_next_tag(fdt, offset, &nextoffset);
+
+		switch (tag) {
+		case FDT_BEGIN_NODE:
+			err = fdt_node_check_compatible(fdt, offset,
+							compatible);
+			if ((err < 0)
+			    && (err != -FDT_ERR_NOTFOUND))
+				return err;
+			else if (err == 0)
+				return offset;
+			break;
+
+		case FDT_PROP:
+		case FDT_END:
+		case FDT_END_NODE:
+		case FDT_NOP:
+			break;
+
+		default:
+			return -FDT_ERR_BADSTRUCTURE;
+		}
+	} while (tag != FDT_END);
+
+	return -FDT_ERR_NOTFOUND;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/fdt_ro.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,5 @@
+extern "C" {
+
+#include "fdt_ro.c"
+
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/fdt_rw.c	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,471 @@
+/*
+ * libfdt - Flat Device Tree manipulation
+ * Copyright (C) 2006 David Gibson, IBM Corporation.
+ *
+ * libfdt is dual licensed: you can use it either under the terms of
+ * the GPL, or the BSD license, at your option.
+ *
+ *  a) This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This library is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public
+ *     License along with this library; if not, write to the Free
+ *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ *     MA 02110-1301 USA
+ *
+ * Alternatively,
+ *
+ *  b) Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *     1. Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *     2. Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "libfdt_env.h"
+
+#include <fdt.h>
+#include <libfdt.h>
+
+#include "libfdt_internal.h"
+
+static int _blocks_misordered(const void *fdt,
+			      int mem_rsv_size, int struct_size)
+{
+	return (fdt_off_mem_rsvmap(fdt) < ALIGN(sizeof(struct fdt_header), 8))
+		|| (fdt_off_dt_struct(fdt) <
+		    (fdt_off_mem_rsvmap(fdt) + mem_rsv_size))
+		|| (fdt_off_dt_strings(fdt) <
+		    (fdt_off_dt_struct(fdt) + struct_size))
+		|| (fdt_totalsize(fdt) <
+		    (fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt)));
+}
+
+static int rw_check_header(void *fdt)
+{
+	int err;
+
+	if ((err = fdt_check_header(fdt)))
+		return err;
+	if (fdt_version(fdt) < 17)
+		return -FDT_ERR_BADVERSION;
+	if (_blocks_misordered(fdt, sizeof(struct fdt_reserve_entry),
+			       fdt_size_dt_struct(fdt)))
+		return -FDT_ERR_BADLAYOUT;
+	if (fdt_version(fdt) > 17)
+		fdt_set_version(fdt, 17);
+
+	return 0;
+}
+
+#define RW_CHECK_HEADER(fdt) \
+	{ \
+		int err; \
+		if ((err = rw_check_header(fdt)) != 0) \
+			return err; \
+	}
+
+static inline int _blob_data_size(void *fdt)
+{
+	return fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt);
+}
+
+static int _blob_splice(void *fdt, void *p, int oldlen, int newlen)
+{
+	void *end = fdt + _blob_data_size(fdt);
+
+	if (((p + oldlen) < p) || ((p + oldlen) > end))
+		return -FDT_ERR_BADOFFSET;
+	if ((end - oldlen + newlen) > (fdt + fdt_totalsize(fdt)))
+		return -FDT_ERR_NOSPACE;
+	memmove(p + newlen, p + oldlen, end - p - oldlen);
+	return 0;
+}
+
+static int _blob_splice_mem_rsv(void *fdt, struct fdt_reserve_entry *p,
+				int oldn, int newn)
+{
+	int delta = (newn - oldn) * sizeof(*p);
+	int err;
+	err = _blob_splice(fdt, p, oldn * sizeof(*p), newn * sizeof(*p));
+	if (err)
+		return err;
+	fdt_set_off_dt_struct(fdt, fdt_off_dt_struct(fdt) + delta);
+	fdt_set_off_dt_strings(fdt, fdt_off_dt_strings(fdt) + delta);
+	return 0;
+}
+
+static int _blob_splice_struct(void *fdt, void *p,
+			       int oldlen, int newlen)
+{
+	int delta = newlen - oldlen;
+	int err;
+
+	if ((err = _blob_splice(fdt, p, oldlen, newlen)))
+		return err;
+
+	fdt_set_size_dt_struct(fdt, fdt_size_dt_struct(fdt) + delta);
+	fdt_set_off_dt_strings(fdt, fdt_off_dt_strings(fdt) + delta);
+	return 0;
+}
+
+static int _blob_splice_string(void *fdt, int newlen)
+{
+	void *p = fdt + fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt);
+	int err;
+
+	if ((err = _blob_splice(fdt, p, 0, newlen)))
+		return err;
+
+	fdt_set_size_dt_strings(fdt, fdt_size_dt_strings(fdt) + newlen);
+	return 0;
+}
+
+static int _find_add_string(void *fdt, const char *s)
+{
+	char *strtab = (char *)fdt + fdt_off_dt_strings(fdt);
+	const char *p;
+	char *new;
+	int len = strlen(s) + 1;
+	int err;
+
+	p = _fdt_find_string(strtab, fdt_size_dt_strings(fdt), s);
+	if (p)
+		/* found it */
+		return (p - strtab);
+
+	new = strtab + fdt_size_dt_strings(fdt);
+	err = _blob_splice_string(fdt, len);
+	if (err)
+		return err;
+
+	memcpy(new, s, len);
+	return (new - strtab);
+}
+
+int fdt_add_mem_rsv(void *fdt, uint64_t address, uint64_t size)
+{
+	struct fdt_reserve_entry *re;
+	int err;
+
+	if ((err = rw_check_header(fdt)))
+		return err;
+
+	re = _fdt_mem_rsv_w(fdt, fdt_num_mem_rsv(fdt));
+	err = _blob_splice_mem_rsv(fdt, re, 0, 1);
+	if (err)
+		return err;
+
+	re->address = cpu_to_fdt64(address);
+	re->size = cpu_to_fdt64(size);
+	return 0;
+}
+
+int fdt_del_mem_rsv(void *fdt, int n)
+{
+	struct fdt_reserve_entry *re = _fdt_mem_rsv_w(fdt, n);
+	int err;
+
+	if ((err = rw_check_header(fdt)))
+		return err;
+	if (n >= fdt_num_mem_rsv(fdt))
+		return -FDT_ERR_NOTFOUND;
+
+	err = _blob_splice_mem_rsv(fdt, re, 1, 0);
+	if (err)
+		return err;
+	return 0;
+}
+
+static int _resize_property(void *fdt, int nodeoffset, const char *name, int len,
+			    struct fdt_property **prop)
+{
+	int oldlen;
+	int err;
+
+	*prop = fdt_get_property_w(fdt, nodeoffset, name, &oldlen);
+	if (! (*prop))
+		return oldlen;
+
+	if ((err = _blob_splice_struct(fdt, (*prop)->data,
+				       ALIGN(oldlen, FDT_TAGSIZE),
+				       ALIGN(len, FDT_TAGSIZE))))
+		return err;
+
+	(*prop)->len = cpu_to_fdt32(len);
+	return 0;
+}
+
+static int _add_property(void *fdt, int nodeoffset, const char *name, int len,
+			 struct fdt_property **prop)
+{
+	uint32_t tag;
+	int proplen;
+	int nextoffset;
+	int namestroff;
+	int err;
+
+	tag = fdt_next_tag(fdt, nodeoffset, &nextoffset);
+	if (tag != FDT_BEGIN_NODE)
+		return -FDT_ERR_BADOFFSET;
+
+	namestroff = _find_add_string(fdt, name);
+	if (namestroff < 0)
+		return namestroff;
+
+	*prop = _fdt_offset_ptr_w(fdt, nextoffset);
+	proplen = sizeof(**prop) + ALIGN(len, FDT_TAGSIZE);
+
+	err = _blob_splice_struct(fdt, *prop, 0, proplen);
+	if (err)
+		return err;
+
+	(*prop)->tag = cpu_to_fdt32(FDT_PROP);
+	(*prop)->nameoff = cpu_to_fdt32(namestroff);
+	(*prop)->len = cpu_to_fdt32(len);
+	return 0;
+}
+
+int fdt_set_name(void *fdt, int nodeoffset, const char *name)
+{
+	char *namep;
+	int oldlen, newlen;
+	int err;
+
+	if ((err = rw_check_header(fdt)))
+		return err;
+
+	namep = (char *)fdt_get_name(fdt, nodeoffset, &oldlen);
+	if (!namep)
+		return oldlen;
+
+	newlen = strlen(name);
+
+	err = _blob_splice_struct(fdt, namep, ALIGN(oldlen+1, FDT_TAGSIZE),
+				  ALIGN(newlen+1, FDT_TAGSIZE));
+	if (err)
+		return err;
+
+	memcpy(namep, name, newlen+1);
+	return 0;
+}
+
+int fdt_setprop(void *fdt, int nodeoffset, const char *name,
+		const void *val, int len)
+{
+	struct fdt_property *prop;
+	int err;
+
+	if ((err = rw_check_header(fdt)))
+		return err;
+
+	err = _resize_property(fdt, nodeoffset, name, len, &prop);
+	if (err == -FDT_ERR_NOTFOUND)
+		err = _add_property(fdt, nodeoffset, name, len, &prop);
+	if (err)
+		return err;
+
+	memcpy(prop->data, val, len);
+	return 0;
+}
+
+int fdt_delprop(void *fdt, int nodeoffset, const char *name)
+{
+	struct fdt_property *prop;
+	int len, proplen;
+
+	RW_CHECK_HEADER(fdt);
+
+	prop = fdt_get_property_w(fdt, nodeoffset, name, &len);
+	if (! prop)
+		return len;
+
+	proplen = sizeof(*prop) + ALIGN(len, FDT_TAGSIZE);
+	return _blob_splice_struct(fdt, prop, proplen, 0);
+}
+
+int fdt_add_subnode_namelen(void *fdt, int parentoffset,
+			    const char *name, int namelen)
+{
+	struct fdt_node_header *nh;
+	int offset, nextoffset;
+	int nodelen;
+	int err;
+	uint32_t tag;
+	uint32_t *endtag;
+
+	RW_CHECK_HEADER(fdt);
+
+	offset = fdt_subnode_offset_namelen(fdt, parentoffset, name, namelen);
+	if (offset >= 0)
+		return -FDT_ERR_EXISTS;
+	else if (offset != -FDT_ERR_NOTFOUND)
+		return offset;
+
+	/* Try to place the new node after the parent's properties */
+	fdt_next_tag(fdt, parentoffset, &nextoffset); /* skip the BEGIN_NODE */
+	do {
+		offset = nextoffset;
+		tag = fdt_next_tag(fdt, offset, &nextoffset);
+	} while (tag == FDT_PROP);
+
+	nh = _fdt_offset_ptr_w(fdt, offset);
+	nodelen = sizeof(*nh) + ALIGN(namelen+1, FDT_TAGSIZE) + FDT_TAGSIZE;
+
+	err = _blob_splice_struct(fdt, nh, 0, nodelen);
+	if (err)
+		return err;
+
+	nh->tag = cpu_to_fdt32(FDT_BEGIN_NODE);
+	memset(nh->name, 0, ALIGN(namelen+1, FDT_TAGSIZE));
+	memcpy(nh->name, name, namelen);
+	endtag = (uint32_t *)((void *)nh + nodelen - FDT_TAGSIZE);
+	*endtag = cpu_to_fdt32(FDT_END_NODE);
+
+	return offset;
+}
+
+int fdt_add_subnode(void *fdt, int parentoffset, const char *name)
+{
+	return fdt_add_subnode_namelen(fdt, parentoffset, name, strlen(name));
+}
+
+int fdt_del_node(void *fdt, int nodeoffset)
+{
+	int endoffset;
+
+	RW_CHECK_HEADER(fdt);
+
+	endoffset = _fdt_node_end_offset(fdt, nodeoffset);
+	if (endoffset < 0)
+		return endoffset;
+
+	return _blob_splice_struct(fdt, _fdt_offset_ptr_w(fdt, nodeoffset),
+				   endoffset - nodeoffset, 0);
+}
+
+static void _packblocks(const void *fdt, void *buf,
+		       int mem_rsv_size, int struct_size)
+{
+	int mem_rsv_off, struct_off, strings_off;
+
+	mem_rsv_off = ALIGN(sizeof(struct fdt_header), 8);
+	struct_off = mem_rsv_off + mem_rsv_size;
+	strings_off = struct_off + struct_size;
+
+	memmove(buf + mem_rsv_off, fdt + fdt_off_mem_rsvmap(fdt), mem_rsv_size);
+	fdt_set_off_mem_rsvmap(buf, mem_rsv_off);
+
+	memmove(buf + struct_off, fdt + fdt_off_dt_struct(fdt), struct_size);
+	fdt_set_off_dt_struct(buf, struct_off);
+	fdt_set_size_dt_struct(buf, struct_size);
+
+	memmove(buf + strings_off, fdt + fdt_off_dt_strings(fdt),
+		fdt_size_dt_strings(fdt));
+	fdt_set_off_dt_strings(buf, strings_off);
+	fdt_set_size_dt_strings(buf, fdt_size_dt_strings(fdt));
+}
+
+int fdt_open_into(const void *fdt, void *buf, int bufsize)
+{
+	int err;
+	int mem_rsv_size, struct_size;
+	int newsize;
+	void *tmp;
+
+	err = fdt_check_header(fdt);
+	if (err)
+		return err;
+
+	mem_rsv_size = (fdt_num_mem_rsv(fdt)+1)
+		* sizeof(struct fdt_reserve_entry);
+
+	if (fdt_version(fdt) >= 17) {
+		struct_size = fdt_size_dt_struct(fdt);
+	} else {
+		struct_size = 0;
+		while (fdt_next_tag(fdt, struct_size, &struct_size) != FDT_END)
+			;
+	}
+
+	if (!_blocks_misordered(fdt, mem_rsv_size, struct_size)) {
+		/* no further work necessary */
+		err = fdt_move(fdt, buf, bufsize);
+		if (err)
+			return err;
+		fdt_set_version(buf, 17);
+		fdt_set_size_dt_struct(buf, struct_size);
+		fdt_set_totalsize(buf, bufsize);
+		return 0;
+	}
+
+	/* Need to reorder */
+	newsize = ALIGN(sizeof(struct fdt_header), 8) + mem_rsv_size
+		+ struct_size + fdt_size_dt_strings(fdt);
+
+	if (bufsize < newsize)
+		return -FDT_ERR_NOSPACE;
+
+	if (((buf + newsize) <= fdt)
+	    || (buf >= (fdt + fdt_totalsize(fdt)))) {
+		tmp = buf;
+	} else {
+		tmp = (void *)fdt + fdt_totalsize(fdt);
+		if ((tmp + newsize) > (buf + bufsize))
+			return -FDT_ERR_NOSPACE;
+	}
+
+	_packblocks(fdt, tmp, mem_rsv_size, struct_size);
+	memmove(buf, tmp, newsize);
+
+	fdt_set_magic(buf, FDT_MAGIC);
+	fdt_set_totalsize(buf, bufsize);
+	fdt_set_version(buf, 17);
+	fdt_set_last_comp_version(buf, 16);
+	fdt_set_boot_cpuid_phys(buf, fdt_boot_cpuid_phys(fdt));
+
+	return 0;
+}
+
+int fdt_pack(void *fdt)
+{
+	int mem_rsv_size;
+	int err;
+
+	err = rw_check_header(fdt);
+	if (err)
+		return err;
+
+	mem_rsv_size = (fdt_num_mem_rsv(fdt)+1)
+		* sizeof(struct fdt_reserve_entry);
+	_packblocks(fdt, fdt, mem_rsv_size, fdt_size_dt_struct(fdt));
+	fdt_set_totalsize(fdt, _blob_data_size(fdt));
+
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/fdt_rw.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,5 @@
+extern "C" {
+
+#include "fdt_rw.c"
+
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/fdt_strerror.c	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,96 @@
+/*
+ * libfdt - Flat Device Tree manipulation
+ * Copyright (C) 2006 David Gibson, IBM Corporation.
+ *
+ * libfdt is dual licensed: you can use it either under the terms of
+ * the GPL, or the BSD license, at your option.
+ *
+ *  a) This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This library is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public
+ *     License along with this library; if not, write to the Free
+ *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ *     MA 02110-1301 USA
+ *
+ * Alternatively,
+ *
+ *  b) Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *     1. Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *     2. Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "libfdt_env.h"
+
+#include <fdt.h>
+#include <libfdt.h>
+
+#include "libfdt_internal.h"
+
+struct errtabent {
+	const char *str;
+};
+
+#define ERRTABENT(val) \
+	[(val)] = { .str = #val, }
+
+static struct errtabent errtable[] = {
+	ERRTABENT(FDT_ERR_NOTFOUND),
+	ERRTABENT(FDT_ERR_EXISTS),
+	ERRTABENT(FDT_ERR_NOSPACE),
+
+	ERRTABENT(FDT_ERR_BADOFFSET),
+	ERRTABENT(FDT_ERR_BADPATH),
+	ERRTABENT(FDT_ERR_BADSTATE),
+
+	ERRTABENT(FDT_ERR_TRUNCATED),
+	ERRTABENT(FDT_ERR_BADMAGIC),
+	ERRTABENT(FDT_ERR_BADVERSION),
+	ERRTABENT(FDT_ERR_BADSTRUCTURE),
+	ERRTABENT(FDT_ERR_BADLAYOUT),
+};
+#define ERRTABSIZE	(sizeof(errtable) / sizeof(errtable[0]))
+
+const char *fdt_strerror(int errval)
+{
+	if (errval > 0)
+		return "<valid offset/length>";
+	else if (errval == 0)
+		return "<no error>";
+	else if (errval > -ERRTABSIZE) {
+		const char *s = errtable[-errval].str;
+
+		if (s)
+			return s;
+	}
+
+	return "<unknown error>";
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/fdt_strerror.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,5 @@
+extern "C" {
+
+#include "fdt_strerror.c"
+
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/fdt_sw.c	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,258 @@
+/*
+ * libfdt - Flat Device Tree manipulation
+ * Copyright (C) 2006 David Gibson, IBM Corporation.
+ *
+ * libfdt is dual licensed: you can use it either under the terms of
+ * the GPL, or the BSD license, at your option.
+ *
+ *  a) This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This library is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public
+ *     License along with this library; if not, write to the Free
+ *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ *     MA 02110-1301 USA
+ *
+ * Alternatively,
+ *
+ *  b) Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *     1. Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *     2. Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "libfdt_env.h"
+
+#include <fdt.h>
+#include <libfdt.h>
+
+#include "libfdt_internal.h"
+
+static int check_header_sw(void *fdt)
+{
+	if (fdt_magic(fdt) != SW_MAGIC)
+		return -FDT_ERR_BADMAGIC;
+	return 0;
+}
+
+static void *grab_space(void *fdt, int len)
+{
+	int offset = fdt_size_dt_struct(fdt);
+	int spaceleft;
+
+	spaceleft = fdt_totalsize(fdt) - fdt_off_dt_struct(fdt)
+		- fdt_size_dt_strings(fdt);
+
+	if ((offset + len < offset) || (offset + len > spaceleft))
+		return NULL;
+
+	fdt_set_size_dt_struct(fdt, offset + len);
+	return fdt_offset_ptr_w(fdt, offset, len);
+}
+
+int fdt_create(void *buf, int bufsize)
+{
+	void *fdt = buf;
+
+	if (bufsize < sizeof(struct fdt_header))
+		return -FDT_ERR_NOSPACE;
+
+	memset(buf, 0, bufsize);
+
+	fdt_set_magic(fdt, SW_MAGIC);
+	fdt_set_version(fdt, FDT_LAST_SUPPORTED_VERSION);
+	fdt_set_last_comp_version(fdt, FDT_FIRST_SUPPORTED_VERSION);
+	fdt_set_totalsize(fdt,  bufsize);
+
+	fdt_set_off_mem_rsvmap(fdt, ALIGN(sizeof(struct fdt_header),
+					  sizeof(struct fdt_reserve_entry)));
+	fdt_set_off_dt_struct(fdt, fdt_off_mem_rsvmap(fdt));
+	fdt_set_off_dt_strings(fdt, bufsize);
+
+	return 0;
+}
+
+int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size)
+{
+	struct fdt_reserve_entry *re;
+	int err = check_header_sw(fdt);
+	int offset;
+
+	if (err)
+		return err;
+	if (fdt_size_dt_struct(fdt))
+		return -FDT_ERR_BADSTATE;
+
+	offset = fdt_off_dt_struct(fdt);
+	if ((offset + sizeof(*re)) > fdt_totalsize(fdt))
+		return -FDT_ERR_NOSPACE;
+
+	re = (struct fdt_reserve_entry *)(fdt + offset);
+	re->address = cpu_to_fdt64(addr);
+	re->size = cpu_to_fdt64(size);
+
+	fdt_set_off_dt_struct(fdt, offset + sizeof(*re));
+
+	return 0;
+}
+
+int fdt_finish_reservemap(void *fdt)
+{
+	return fdt_add_reservemap_entry(fdt, 0, 0);
+}
+
+int fdt_begin_node(void *fdt, const char *name)
+{
+	struct fdt_node_header *nh;
+	int err = check_header_sw(fdt);
+	int namelen = strlen(name) + 1;
+
+	if (err)
+		return err;
+
+	nh = grab_space(fdt, sizeof(*nh) + ALIGN(namelen, FDT_TAGSIZE));
+	if (! nh)
+		return -FDT_ERR_NOSPACE;
+
+	nh->tag = cpu_to_fdt32(FDT_BEGIN_NODE);
+	memcpy(nh->name, name, namelen);
+	return 0;
+}
+
+int fdt_end_node(void *fdt)
+{
+	uint32_t *en;
+	int err = check_header_sw(fdt);
+
+	if (err)
+		return err;
+
+	en = grab_space(fdt, FDT_TAGSIZE);
+	if (! en)
+		return -FDT_ERR_NOSPACE;
+
+	*en = cpu_to_fdt32(FDT_END_NODE);
+	return 0;
+}
+
+static int find_add_string(void *fdt, const char *s)
+{
+	char *strtab = (char *)fdt + fdt_totalsize(fdt);
+	const char *p;
+	int strtabsize = fdt_size_dt_strings(fdt);
+	int len = strlen(s) + 1;
+	int struct_top, offset;
+
+	p = _fdt_find_string(strtab - strtabsize, strtabsize, s);
+	if (p)
+		return p - strtab;
+
+	/* Add it */
+	offset = -strtabsize - len;
+	struct_top = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);
+	if (fdt_totalsize(fdt) + offset < struct_top)
+		return 0; /* no more room :( */
+
+	memcpy(strtab + offset, s, len);
+	fdt_set_size_dt_strings(fdt, strtabsize + len);
+	return offset;
+}
+
+int fdt_property(void *fdt, const char *name, const void *val, int len)
+{
+	struct fdt_property *prop;
+	int err = check_header_sw(fdt);
+	int nameoff;
+
+	if (err)
+		return err;
+
+	nameoff = find_add_string(fdt, name);
+	if (nameoff == 0)
+		return -FDT_ERR_NOSPACE;
+
+	prop = grab_space(fdt, sizeof(*prop) + ALIGN(len, FDT_TAGSIZE));
+	if (! prop)
+		return -FDT_ERR_NOSPACE;
+
+	prop->tag = cpu_to_fdt32(FDT_PROP);
+	prop->nameoff = cpu_to_fdt32(nameoff);
+	prop->len = cpu_to_fdt32(len);
+	memcpy(prop->data, val, len);
+	return 0;
+}
+
+int fdt_finish(void *fdt)
+{
+	int err = check_header_sw(fdt);
+	char *p = (char *)fdt;
+	uint32_t *end;
+	int oldstroffset, newstroffset;
+	uint32_t tag;
+	int offset, nextoffset;
+
+	if (err)
+		return err;
+
+	/* Add terminator */
+	end = grab_space(fdt, sizeof(*end));
+	if (! end)
+		return -FDT_ERR_NOSPACE;
+	*end = cpu_to_fdt32(FDT_END);
+
+	/* Relocate the string table */
+	oldstroffset = fdt_totalsize(fdt) - fdt_size_dt_strings(fdt);
+	newstroffset = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);
+	memmove(p + newstroffset, p + oldstroffset, fdt_size_dt_strings(fdt));
+	fdt_set_off_dt_strings(fdt, newstroffset);
+
+	/* Walk the structure, correcting string offsets */
+	offset = 0;
+	while ((tag = fdt_next_tag(fdt, offset, &nextoffset)) != FDT_END) {
+		if (tag == FDT_PROP) {
+			struct fdt_property *prop =
+				fdt_offset_ptr_w(fdt, offset, sizeof(*prop));
+			int nameoff;
+
+			if (! prop)
+				return -FDT_ERR_BADSTRUCTURE;
+
+			nameoff = fdt32_to_cpu(prop->nameoff);
+			nameoff += fdt_size_dt_strings(fdt);
+			prop->nameoff = cpu_to_fdt32(nameoff);
+		}
+		offset = nextoffset;
+	}
+
+	/* Finally, adjust the header */
+	fdt_set_totalsize(fdt, newstroffset + fdt_size_dt_strings(fdt));
+	fdt_set_magic(fdt, FDT_MAGIC);
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/fdt_sw.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,5 @@
+extern "C" {
+
+#include "fdt_sw.c"
+
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/fdt_wip.c	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,144 @@
+/*
+ * libfdt - Flat Device Tree manipulation
+ * Copyright (C) 2006 David Gibson, IBM Corporation.
+ *
+ * libfdt is dual licensed: you can use it either under the terms of
+ * the GPL, or the BSD license, at your option.
+ *
+ *  a) This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This library is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public
+ *     License along with this library; if not, write to the Free
+ *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ *     MA 02110-1301 USA
+ *
+ * Alternatively,
+ *
+ *  b) Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *     1. Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *     2. Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "libfdt_env.h"
+
+#include <fdt.h>
+#include <libfdt.h>
+
+#include "libfdt_internal.h"
+
+int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,
+			const void *val, int len)
+{
+	void *propval;
+	int proplen;
+
+	propval = fdt_getprop_w(fdt, nodeoffset, name, &proplen);
+	if (! propval)
+		return proplen;
+
+	if (proplen != len)
+		return -FDT_ERR_NOSPACE;
+
+	memcpy(propval, val, len);
+	return 0;
+}
+
+static void nop_region(void *start, int len)
+{
+	uint32_t *p;
+
+	for (p = start; (void *)p < (start + len); p++)
+		*p = cpu_to_fdt32(FDT_NOP);
+}
+
+int fdt_nop_property(void *fdt, int nodeoffset, const char *name)
+{
+	struct fdt_property *prop;
+	int len;
+
+	prop = fdt_get_property_w(fdt, nodeoffset, name, &len);
+	if (! prop)
+		return len;
+
+	nop_region(prop, len + sizeof(*prop));
+
+	return 0;
+}
+
+int _fdt_node_end_offset(void *fdt, int nodeoffset)
+{
+	int level = 0;
+	uint32_t tag;
+	int offset, nextoffset;
+
+	tag = fdt_next_tag(fdt, nodeoffset, &nextoffset);
+	if (tag != FDT_BEGIN_NODE)
+		return -FDT_ERR_BADOFFSET;
+	do {
+		offset = nextoffset;
+		tag = fdt_next_tag(fdt, offset, &nextoffset);
+
+		switch (tag) {
+		case FDT_END:
+			return offset;
+
+		case FDT_BEGIN_NODE:
+			level++;
+			break;
+
+		case FDT_END_NODE:
+			level--;
+			break;
+
+		case FDT_PROP:
+		case FDT_NOP:
+			break;
+
+		default:
+			return -FDT_ERR_BADSTRUCTURE;
+		}
+	} while (level >= 0);
+
+	return nextoffset;
+}
+
+int fdt_nop_node(void *fdt, int nodeoffset)
+{
+	int endoffset;
+
+	endoffset = _fdt_node_end_offset(fdt, nodeoffset);
+	if (endoffset < 0)
+		return endoffset;
+
+	nop_region(fdt_offset_ptr_w(fdt, nodeoffset, 0), endoffset - nodeoffset);
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/fdt_wip.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,5 @@
+extern "C" {
+
+#include "fdt_wip.c"
+
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/libfdt.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,1080 @@
+#ifndef _LIBFDT_H
+#define _LIBFDT_H
+/*
+ * libfdt - Flat Device Tree manipulation
+ * Copyright (C) 2006 David Gibson, IBM Corporation.
+ *
+ * libfdt is dual licensed: you can use it either under the terms of
+ * the GPL, or the BSD license, at your option.
+ *
+ *  a) This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This library is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public
+ *     License along with this library; if not, write to the Free
+ *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ *     MA 02110-1301 USA
+ *
+ * Alternatively,
+ *
+ *  b) Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *     1. Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *     2. Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "libfdt_env.h"
+#include "fdt.h"
+
+#define FDT_FIRST_SUPPORTED_VERSION	0x10
+#define FDT_LAST_SUPPORTED_VERSION	0x11
+
+/* Error codes: informative error codes */
+#define FDT_ERR_NOTFOUND	1
+	/* FDT_ERR_NOTFOUND: The requested node or property does not exist */
+#define FDT_ERR_EXISTS		2
+	/* FDT_ERR_EXISTS: Attemped to create a node or property which
+	 * already exists */
+#define FDT_ERR_NOSPACE		3
+	/* FDT_ERR_NOSPACE: Operation needed to expand the device
+	 * tree, but its buffer did not have sufficient space to
+	 * contain the expanded tree. Use fdt_open_into() to move the
+	 * device tree to a buffer with more space. */
+
+/* Error codes: codes for bad parameters */
+#define FDT_ERR_BADOFFSET	4
+	/* FDT_ERR_BADOFFSET: Function was passed a structure block
+	 * offset which is out-of-bounds, or which points to an
+	 * unsuitable part of the structure for the operation. */
+#define FDT_ERR_BADPATH		5
+	/* FDT_ERR_BADPATH: Function was passed a badly formatted path
+	 * (e.g. missing a leading / for a function which requires an
+	 * absolute path) */
+#define FDT_ERR_BADPHANDLE	6
+	/* FDT_ERR_BADPHANDLE: Function was passed an invalid phandle
+	 * value.  phandle values of 0 and -1 are not permitted. */
+#define FDT_ERR_BADSTATE	7
+	/* FDT_ERR_BADSTATE: Function was passed an incomplete device
+	 * tree created by the sequential-write functions, which is
+	 * not sufficiently complete for the requested operation. */
+
+/* Error codes: codes for bad device tree blobs */
+#define FDT_ERR_TRUNCATED	8
+	/* FDT_ERR_TRUNCATED: Structure block of the given device tree
+	 * ends without an FDT_END tag. */
+#define FDT_ERR_BADMAGIC	9
+	/* FDT_ERR_BADMAGIC: Given "device tree" appears not to be a
+	 * device tree at all - it is missing the flattened device
+	 * tree magic number. */
+#define FDT_ERR_BADVERSION	10
+	/* FDT_ERR_BADVERSION: Given device tree has a version which
+	 * can't be handled by the requested operation.  For
+	 * read-write functions, this may mean that fdt_open_into() is
+	 * required to convert the tree to the expected version. */
+#define FDT_ERR_BADSTRUCTURE	11
+	/* FDT_ERR_BADSTRUCTURE: Given device tree has a corrupt
+	 * structure block or other serious error (e.g. misnested
+	 * nodes, or subnodes preceding properties). */
+#define FDT_ERR_BADLAYOUT	12
+	/* FDT_ERR_BADLAYOUT: For read-write functions, the given
+	 * device tree has it's sub-blocks in an order that the
+	 * function can't handle (memory reserve map, then structure,
+	 * then strings).  Use fdt_open_into() to reorganize the tree
+	 * into a form suitable for the read-write operations. */
+
+/* "Can't happen" error indicating a bug in libfdt */
+#define FDT_ERR_INTERNAL	13
+	/* FDT_ERR_INTERNAL: libfdt has failed an internal assertion.
+	 * Should never be returned, if it is, it indicates a bug in
+	 * libfdt itself. */
+
+#define FDT_ERR_MAX		13
+
+/**********************************************************************/
+/* Low-level functions (you probably don't need these)                */
+/**********************************************************************/
+
+const void *fdt_offset_ptr(const void *fdt, int offset, int checklen);
+static inline void *fdt_offset_ptr_w(void *fdt, int offset, int checklen)
+{
+	return (void *)fdt_offset_ptr(fdt, offset, checklen);
+}
+
+uint32_t fdt_next_tag(const void *fdt, int offset, int *nextoffset);
+
+/**********************************************************************/
+/* General functions                                                  */
+/**********************************************************************/
+
+#define fdt_get_header(fdt, field) \
+	(fdt32_to_cpu(((const struct fdt_header *)(fdt))->field))
+#define fdt_magic(fdt) 			(fdt_get_header(fdt, magic))
+#define fdt_totalsize(fdt)		(fdt_get_header(fdt, totalsize))
+#define fdt_off_dt_struct(fdt)		(fdt_get_header(fdt, off_dt_struct))
+#define fdt_off_dt_strings(fdt)		(fdt_get_header(fdt, off_dt_strings))
+#define fdt_off_mem_rsvmap(fdt)		(fdt_get_header(fdt, off_mem_rsvmap))
+#define fdt_version(fdt)		(fdt_get_header(fdt, version))
+#define fdt_last_comp_version(fdt) 	(fdt_get_header(fdt, last_comp_version))
+#define fdt_boot_cpuid_phys(fdt) 	(fdt_get_header(fdt, boot_cpuid_phys))
+#define fdt_size_dt_strings(fdt) 	(fdt_get_header(fdt, size_dt_strings))
+#define fdt_size_dt_struct(fdt)		(fdt_get_header(fdt, size_dt_struct))
+
+#define __fdt_set_hdr(name) \
+	static inline void fdt_set_##name(void *fdt, uint32_t val) \
+	{ \
+	  struct fdt_header *fdth = (struct fdt_header *)fdt;	\
+	  fdth->name = cpu_to_fdt32(val); \
+	}
+
+__fdt_set_hdr(magic);
+__fdt_set_hdr(totalsize);
+__fdt_set_hdr(off_dt_struct);
+__fdt_set_hdr(off_dt_strings);
+__fdt_set_hdr(off_mem_rsvmap);
+__fdt_set_hdr(version);
+__fdt_set_hdr(last_comp_version);
+__fdt_set_hdr(boot_cpuid_phys);
+__fdt_set_hdr(size_dt_strings);
+__fdt_set_hdr(size_dt_struct);
+#undef __fdt_set_hdr
+
+/**
+ * fdt_check_header - sanity check a device tree or possible device tree
+ * @fdt: pointer to data which might be a flattened device tree
+ *
+ * fdt_check_header() checks that the given buffer contains what
+ * appears to be a flattened device tree with sane information in its
+ * header.
+ *
+ * returns:
+ *     0, if the buffer appears to contain a valid device tree
+ *     -FDT_ERR_BADMAGIC,
+ *     -FDT_ERR_BADVERSION,
+ *     -FDT_ERR_BADSTATE, standard meanings, as above
+ */
+int fdt_check_header(const void *fdt);
+
+/**
+ * fdt_move - move a device tree around in memory
+ * @fdt: pointer to the device tree to move
+ * @buf: pointer to memory where the device is to be moved
+ * @bufsize: size of the memory space at buf
+ *
+ * fdt_move() relocates, if possible, the device tree blob located at
+ * fdt to the buffer at buf of size bufsize.  The buffer may overlap
+ * with the existing device tree blob at fdt.  Therefore,
+ *     fdt_move(fdt, fdt, fdt_totalsize(fdt))
+ * should always succeed.
+ *
+ * returns:
+ *     0, on success
+ *     -FDT_ERR_NOSPACE, bufsize is insufficient to contain the device tree
+ *     -FDT_ERR_BADMAGIC,
+ *     -FDT_ERR_BADVERSION,
+ *     -FDT_ERR_BADSTATE, standard meanings
+ */
+int fdt_move(const void *fdt, void *buf, int bufsize);
+
+/**********************************************************************/
+/* Read-only functions                                                */
+/**********************************************************************/
+
+/**
+ * fdt_string - retreive a string from the strings block of a device tree
+ * @fdt: pointer to the device tree blob
+ * @stroffset: offset of the string within the strings block (native endian)
+ *
+ * fdt_string() retrieves a pointer to a single string from the
+ * strings block of the device tree blob at fdt.
+ *
+ * returns:
+ *     a pointer to the string, on success
+ *     NULL, if stroffset is out of bounds
+ */
+const char *fdt_string(const void *fdt, int stroffset);
+
+/**
+ * fdt_num_mem_rsv - retreive the number of memory reserve map entries
+ * @fdt: pointer to the device tree blob
+ *
+ * Returns the number of entries in the device tree blob's memory
+ * reservation map.  This does not include the terminating 0,0 entry
+ * or any other (0,0) entries reserved for expansion.
+ *
+ * returns:
+ *     the number of entries
+ */
+int fdt_num_mem_rsv(const void *fdt);
+
+/**
+ * fdt_get_mem_rsv - retreive one memory reserve map entry
+ * @fdt: pointer to the device tree blob
+ * @address, @size: pointers to 64-bit variables
+ *
+ * On success, *address and *size will contain the address and size of
+ * the n-th reserve map entry from the device tree blob, in
+ * native-endian format.
+ *
+ * returns:
+ *     0, on success
+ *     -FDT_ERR_BADMAGIC,
+ *     -FDT_ERR_BADVERSION,
+ *     -FDT_ERR_BADSTATE, standard meanings
+ */
+int fdt_get_mem_rsv(const void *fdt, int n, uint64_t *address, uint64_t *size);
+
+/**
+ * fdt_subnode_offset_namelen - find a subnode based on substring
+ * @fdt: pointer to the device tree blob
+ * @parentoffset: structure block offset of a node
+ * @name: name of the subnode to locate
+ * @namelen: number of characters of name to consider
+ *
+ * Identical to fdt_subnode_offset(), but only examine the first
+ * namelen characters of name for matching the subnode name.  This is
+ * useful for finding subnodes based on a portion of a larger string,
+ * such as a full path.
+ */
+int fdt_subnode_offset_namelen(const void *fdt, int parentoffset,
+			       const char *name, int namelen);
+/**
+ * fdt_subnode_offset - find a subnode of a given node
+ * @fdt: pointer to the device tree blob
+ * @parentoffset: structure block offset of a node
+ * @name: name of the subnode to locate
+ *
+ * fdt_subnode_offset() finds a subnode of the node at structure block
+ * offset parentoffset with the given name.  name may include a unit
+ * address, in which case fdt_subnode_offset() will find the subnode
+ * with that unit address, or the unit address may be omitted, in
+ * which case fdt_subnode_offset() will find an arbitrary subnode
+ * whose name excluding unit address matches the given name.
+ *
+ * returns:
+ *	structure block offset of the requested subnode (>=0), on success
+ *	-FDT_ERR_NOTFOUND, if the requested subnode does not exist
+ *	-FDT_ERR_BADOFFSET, if parentoffset did not point to an FDT_BEGIN_NODE tag
+ *      -FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE,
+ *	-FDT_ERR_TRUNCATED, standard meanings.
+ */
+int fdt_subnode_offset(const void *fdt, int parentoffset, const char *name);
+
+/**
+ * fdt_path_offset - find a tree node by its full path
+ * @fdt: pointer to the device tree blob
+ * @path: full path of the node to locate
+ *
+ * fdt_path_offset() finds a node of a given path in the device tree.
+ * Each path component may omit the unit address portion, but the
+ * results of this are undefined if any such path component is
+ * ambiguous (that is if there are multiple nodes at the relevant
+ * level matching the given component, differentiated only by unit
+ * address).
+ *
+ * returns:
+ *	structure block offset of the node with the requested path (>=0), on success
+ *	-FDT_ERR_BADPATH, given path does not begin with '/' or is invalid
+ *	-FDT_ERR_NOTFOUND, if the requested node does not exist
+ *      -FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE,
+ *	-FDT_ERR_TRUNCATED, standard meanings.
+ */
+int fdt_path_offset(const void *fdt, const char *path);
+
+/**
+ * fdt_get_name - retreive the name of a given node
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: structure block offset of the starting node
+ * @lenp: pointer to an integer variable (will be overwritten) or NULL
+ *
+ * fdt_get_name() retrieves the name (including unit address) of the
+ * device tree node at structure block offset nodeoffset.  If lenp is
+ * non-NULL, the length of this name is also returned, in the integer
+ * pointed to by lenp.
+ *
+ * returns:
+ *	pointer to the node's name, on success
+ *		If lenp is non-NULL, *lenp contains the length of that name (>=0)
+ *	NULL, on error
+ *		if lenp is non-NULL *lenp contains an error code (<0):
+ *		-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *		-FDT_ERR_BADMAGIC,
+ *		-FDT_ERR_BADVERSION,
+ *		-FDT_ERR_BADSTATE, standard meanings
+ */
+const char *fdt_get_name(const void *fdt, int nodeoffset, int *lenp);
+
+/**
+ * fdt_get_property - find a given property in a given node
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to find
+ * @name: name of the property to find
+ * @lenp: pointer to an integer variable (will be overwritten) or NULL
+ *
+ * fdt_get_property() retrieves a pointer to the fdt_property
+ * structure within the device tree blob corresponding to the property
+ * named 'name' of the node at offset nodeoffset.  If lenp is
+ * non-NULL, the length of the property value also returned, in the
+ * integer pointed to by lenp.
+ *
+ * returns:
+ *	pointer to the structure representing the property
+ *		if lenp is non-NULL, *lenp contains the length of the property
+ *		value (>=0)
+ *	NULL, on error
+ *		if lenp is non-NULL, *lenp contains an error code (<0):
+ *		-FDT_ERR_NOTFOUND, node does not have named property
+ *		-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *		-FDT_ERR_BADMAGIC,
+ *		-FDT_ERR_BADVERSION,
+ *		-FDT_ERR_BADSTATE,
+ *		-FDT_ERR_BADSTRUCTURE,
+ *		-FDT_ERR_TRUNCATED, standard meanings
+ */
+const struct fdt_property *fdt_get_property(const void *fdt, int nodeoffset,
+					    const char *name, int *lenp);
+static inline struct fdt_property *fdt_get_property_w(void *fdt, int nodeoffset,
+						      const char *name,
+						      int *lenp)
+{
+	return (struct fdt_property *)fdt_get_property(fdt, nodeoffset,
+						       name, lenp);
+}
+
+/**
+ * fdt_getprop - retrieve the value of a given property
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to find
+ * @name: name of the property to find
+ * @lenp: pointer to an integer variable (will be overwritten) or NULL
+ *
+ * fdt_getprop() retrieves a pointer to the value of the property
+ * named 'name' of the node at offset nodeoffset (this will be a
+ * pointer to within the device blob itself, not a copy of the value).
+ * If lenp is non-NULL, the length of the property value also
+ * returned, in the integer pointed to by lenp.
+ *
+ * returns:
+ *	pointer to the property's value
+ *		if lenp is non-NULL, *lenp contains the length of the property
+ *		value (>=0)
+ *	NULL, on error
+ *		if lenp is non-NULL, *lenp contains an error code (<0):
+ *		-FDT_ERR_NOTFOUND, node does not have named property
+ *		-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *		-FDT_ERR_BADMAGIC,
+ *		-FDT_ERR_BADVERSION,
+ *		-FDT_ERR_BADSTATE,
+ *		-FDT_ERR_BADSTRUCTURE,
+ *		-FDT_ERR_TRUNCATED, standard meanings
+ */
+const void *fdt_getprop(const void *fdt, int nodeoffset,
+			const char *name, int *lenp);
+static inline void *fdt_getprop_w(void *fdt, int nodeoffset,
+				  const char *name, int *lenp)
+{
+	return (void *)fdt_getprop(fdt, nodeoffset, name, lenp);
+}
+
+/**
+ * fdt_get_phandle - retreive the phandle of a given node
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: structure block offset of the node
+ *
+ * fdt_get_phandle() retrieves the phandle of the device tree node at
+ * structure block offset nodeoffset.
+ *
+ * returns:
+ *	the phandle of the node at nodeoffset, on succes (!= 0, != -1)
+ *	0, if the node has no phandle, or another error occurs
+ */
+uint32_t fdt_get_phandle(const void *fdt, int nodeoffset);
+
+/**
+ * fdt_get_path - determine the full path of a node
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose path to find
+ * @buf: character buffer to contain the returned path (will be overwritten)
+ * @buflen: size of the character buffer at buf
+ *
+ * fdt_get_path() computes the full path of the node at offset
+ * nodeoffset, and records that path in the buffer at buf.
+ *
+ * NOTE: This function is expensive, as it must scan the device tree
+ * structure from the start to nodeoffset.
+ *
+ * returns:
+ *	0, on success
+ *		buf contains the absolute path of the node at
+ *		nodeoffset, as a NUL-terminated string.
+ * 	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
+ *	-FDT_ERR_NOSPACE, the path of the given node is longer than (bufsize-1)
+ *		characters and will not fit in the given buffer.
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
+ */
+int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen);
+
+/**
+ * fdt_supernode_atdepth_offset - find a specific ancestor of a node
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose parent to find
+ * @supernodedepth: depth of the ancestor to find
+ * @nodedepth: pointer to an integer variable (will be overwritten) or NULL
+ *
+ * fdt_supernode_atdepth_offset() finds an ancestor of the given node
+ * at a specific depth from the root (where the root itself has depth
+ * 0, its immediate subnodes depth 1 and so forth).  So
+ *	fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, NULL);
+ * will always return 0, the offset of the root node.  If the node at
+ * nodeoffset has depth D, then:
+ *	fdt_supernode_atdepth_offset(fdt, nodeoffset, D, NULL);
+ * will return nodeoffset itself.
+ *
+ * NOTE: This function is expensive, as it must scan the device tree
+ * structure from the start to nodeoffset.
+ *
+ * returns:
+
+ *	structure block offset of the node at node offset's ancestor
+ *		of depth supernodedepth (>=0), on success
+ * 	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
+*	-FDT_ERR_NOTFOUND, supernodedepth was greater than the depth of nodeoffset
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
+ */
+int fdt_supernode_atdepth_offset(const void *fdt, int nodeoffset,
+				 int supernodedepth, int *nodedepth);
+
+/**
+ * fdt_node_depth - find the depth of a given node
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose parent to find
+ *
+ * fdt_node_depth() finds the depth of a given node.  The root node
+ * has depth 0, its immediate subnodes depth 1 and so forth.
+ *
+ * NOTE: This function is expensive, as it must scan the device tree
+ * structure from the start to nodeoffset.
+ *
+ * returns:
+ *	depth of the node at nodeoffset (>=0), on success
+ * 	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
+ */
+int fdt_node_depth(const void *fdt, int nodeoffset);
+
+/**
+ * fdt_parent_offset - find the parent of a given node
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose parent to find
+ *
+ * fdt_parent_offset() locates the parent node of a given node (that
+ * is, it finds the offset of the node which contains the node at
+ * nodeoffset as a subnode).
+ *
+ * NOTE: This function is expensive, as it must scan the device tree
+ * structure from the start to nodeoffset, *twice*.
+ *
+ * returns:
+ *	stucture block offset of the parent of the node at nodeoffset
+ *		(>=0), on success
+ * 	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
+ */
+int fdt_parent_offset(const void *fdt, int nodeoffset);
+
+/**
+ * fdt_node_offset_by_prop_value - find nodes with a given property value
+ * @fdt: pointer to the device tree blob
+ * @startoffset: only find nodes after this offset
+ * @propname: property name to check
+ * @propval: property value to search for
+ * @proplen: length of the value in propval
+ *
+ * fdt_node_offset_by_prop_value() returns the offset of the first
+ * node after startoffset, which has a property named propname whose
+ * value is of length proplen and has value equal to propval; or if
+ * startoffset is -1, the very first such node in the tree.
+ *
+ * To iterate through all nodes matching the criterion, the following
+ * idiom can be used:
+ *	offset = fdt_node_offset_by_prop_value(fdt, -1, propname,
+ *					       propval, proplen);
+ *	while (offset != -FDT_ERR_NOTFOUND) {
+ *		// other code here
+ *		offset = fdt_node_offset_by_prop_value(fdt, offset, propname,
+ *						       propval, proplen);
+ *	}
+ *
+ * Note the -1 in the first call to the function, if 0 is used here
+ * instead, the function will never locate the root node, even if it
+ * matches the criterion.
+ *
+ * returns:
+ *	structure block offset of the located node (>= 0, >startoffset),
+ *		 on success
+ *	-FDT_ERR_NOTFOUND, no node matching the criterion exists in the
+ *		tree after startoffset
+ * 	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
+ */
+int fdt_node_offset_by_prop_value(const void *fdt, int startoffset,
+				  const char *propname,
+				  const void *propval, int proplen);
+
+/**
+ * fdt_node_offset_by_phandle - find the node with a given phandle
+ * @fdt: pointer to the device tree blob
+ * @phandle: phandle value
+ *
+ * fdt_node_offset_by_prop_value() returns the offset of the node
+ * which has the given phandle value.  If there is more than one node
+ * in the tree with the given phandle (an invalid tree), results are
+ * undefined.
+ *
+ * returns:
+ *	structure block offset of the located node (>= 0), on success
+ *	-FDT_ERR_NOTFOUND, no node with that phandle exists
+ *	-FDT_ERR_BADPHANDLE, given phandle value was invalid (0 or -1)
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
+ */
+int fdt_node_offset_by_phandle(const void *fdt, uint32_t phandle);
+
+/**
+ * fdt_node_check_compatible: check a node's compatible property
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of a tree node
+ * @compatible: string to match against
+ *
+ *
+ * fdt_node_check_compatible() returns 0 if the given node contains a
+ * 'compatible' property with the given string as one of its elements,
+ * it returns non-zero otherwise, or on error.
+ *
+ * returns:
+ *	0, if the node has a 'compatible' property listing the given string
+ *	1, if the node has a 'compatible' property, but it does not list
+ *		the given string
+ *	-FDT_ERR_NOTFOUND, if the given node has no 'compatible' property
+ * 	-FDT_ERR_BADOFFSET, if nodeoffset does not refer to a BEGIN_NODE tag
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
+ */
+int fdt_node_check_compatible(const void *fdt, int nodeoffset,
+			      const char *compatible);
+
+/**
+ * fdt_node_offset_by_compatible - find nodes with a given 'compatible' value
+ * @fdt: pointer to the device tree blob
+ * @startoffset: only find nodes after this offset
+ * @compatible: 'compatible' string to match against
+ *
+ * fdt_node_offset_by_compatible() returns the offset of the first
+ * node after startoffset, which has a 'compatible' property which
+ * lists the given compatible string; or if startoffset is -1, the
+ * very first such node in the tree.
+ *
+ * To iterate through all nodes matching the criterion, the following
+ * idiom can be used:
+ *	offset = fdt_node_offset_by_compatible(fdt, -1, compatible);
+ *	while (offset != -FDT_ERR_NOTFOUND) {
+ *		// other code here
+ *		offset = fdt_node_offset_by_compatible(fdt, offset, compatible);
+ *	}
+ *
+ * Note the -1 in the first call to the function, if 0 is used here
+ * instead, the function will never locate the root node, even if it
+ * matches the criterion.
+ *
+ * returns:
+ *	structure block offset of the located node (>= 0, >startoffset),
+ *		 on success
+ *	-FDT_ERR_NOTFOUND, no node matching the criterion exists in the
+ *		tree after startoffset
+ * 	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
+ */
+int fdt_node_offset_by_compatible(const void *fdt, int startoffset,
+				  const char *compatible);
+
+/**********************************************************************/
+/* Write-in-place functions                                           */
+/**********************************************************************/
+
+/**
+ * fdt_setprop_inplace - change a property's value, but not its size
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to change
+ * @name: name of the property to change
+ * @val: pointer to data to replace the property value with
+ * @len: length of the property value
+ *
+ * fdt_setprop_inplace() replaces the value of a given property with
+ * the data in val, of length len.  This function cannot change the
+ * size of a property, and so will only work if len is equal to the
+ * current length of the property.
+ *
+ * This function will alter only the bytes in the blob which contain
+ * the given property value, and will not alter or move any other part
+ * of the tree.
+ *
+ * returns:
+ *	0, on success
+ *	-FDT_ERR_NOSPACE, if len is not equal to the property's current length
+ *	-FDT_ERR_NOTFOUND, node does not have the named property
+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE,
+ *	-FDT_ERR_TRUNCATED, standard meanings
+ */
+int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,
+			const void *val, int len);
+
+/**
+ * fdt_setprop_inplace_cell - change the value of a single-cell property
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to change
+ * @name: name of the property to change
+ * @val: cell (32-bit integer) value to replace the property with
+ *
+ * fdt_setprop_inplace_cell() replaces the value of a given property
+ * with the 32-bit integer cell value in val, converting val to
+ * big-endian if necessary.  This function cannot change the size of a
+ * property, and so will only work if the property already exists and
+ * has length 4.
+ *
+ * This function will alter only the bytes in the blob which contain
+ * the given property value, and will not alter or move any other part
+ * of the tree.
+ *
+ * returns:
+ *	0, on success
+ *	-FDT_ERR_NOSPACE, if the property's length is not equal to 4
+  *	-FDT_ERR_NOTFOUND, node does not have the named property
+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE,
+ *	-FDT_ERR_TRUNCATED, standard meanings
+ */
+static inline int fdt_setprop_inplace_cell(void *fdt, int nodeoffset,
+					   const char *name, uint32_t val)
+{
+	val = cpu_to_fdt32(val);
+	return fdt_setprop_inplace(fdt, nodeoffset, name, &val, sizeof(val));
+}
+
+/**
+ * fdt_nop_property - replace a property with nop tags
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to nop
+ * @name: name of the property to nop
+ *
+ * fdt_nop_property() will replace a given property's representation
+ * in the blob with FDT_NOP tags, effectively removing it from the
+ * tree.
+ *
+ * This function will alter only the bytes in the blob which contain
+ * the property, and will not alter or move any other part of the
+ * tree.
+ *
+ * returns:
+ *	0, on success
+ *	-FDT_ERR_NOTFOUND, node does not have the named property
+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE,
+ *	-FDT_ERR_TRUNCATED, standard meanings
+ */
+int fdt_nop_property(void *fdt, int nodeoffset, const char *name);
+
+/**
+ * fdt_nop_node - replace a node (subtree) with nop tags
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node to nop
+ *
+ * fdt_nop_node() will replace a given node's representation in the
+ * blob, including all its subnodes, if any, with FDT_NOP tags,
+ * effectively removing it from the tree.
+ *
+ * This function will alter only the bytes in the blob which contain
+ * the node and its properties and subnodes, and will not alter or
+ * move any other part of the tree.
+ *
+ * returns:
+ *	0, on success
+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE,
+ *	-FDT_ERR_TRUNCATED, standard meanings
+ */
+int fdt_nop_node(void *fdt, int nodeoffset);
+
+/**********************************************************************/
+/* Sequential write functions                                         */
+/**********************************************************************/
+
+int fdt_create(void *buf, int bufsize);
+int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size);
+int fdt_finish_reservemap(void *fdt);
+int fdt_begin_node(void *fdt, const char *name);
+int fdt_property(void *fdt, const char *name, const void *val, int len);
+static inline int fdt_property_cell(void *fdt, const char *name, uint32_t val)
+{
+	val = cpu_to_fdt32(val);
+	return fdt_property(fdt, name, &val, sizeof(val));
+}
+#define fdt_property_string(fdt, name, str) \
+	fdt_property(fdt, name, str, strlen(str)+1)
+int fdt_end_node(void *fdt);
+int fdt_finish(void *fdt);
+
+/**********************************************************************/
+/* Read-write functions                                               */
+/**********************************************************************/
+
+int fdt_open_into(const void *fdt, void *buf, int bufsize);
+int fdt_pack(void *fdt);
+
+/**
+ * fdt_add_mem_rsv - add one memory reserve map entry
+ * @fdt: pointer to the device tree blob
+ * @addres, @size: 64-bit values (native endian)
+ *
+ * Adds a reserve map entry to the given blob reserving a region at
+ * address address of length size.
+ *
+ * This function will insert data into the reserve map and will
+ * therfore change the indexes of some entries in the table.
+ *
+ * returns:
+ *	0, on success
+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
+ *		contain the new reservation entry
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE,
+ *	-FDT_ERR_BADLAYOUT,
+ *	-FDT_ERR_TRUNCATED, standard meanings
+ */
+int fdt_add_mem_rsv(void *fdt, uint64_t address, uint64_t size);
+
+/**
+ * fdt_del_mem_rsv - remove a memory reserve map entry
+ * @fdt: pointer to the device tree blob
+ * @n: entry to remove
+ *
+ * fdt_del_mem_rsv() removes the n-th memory reserve map entry from
+ * the blob.
+ *
+ * This function will delete data from the reservation table and will
+ * therfore change the indexes of some entries in the table.
+ *
+ * returns:
+ *	0, on success
+ *	-FDT_ERR_NOTFOUND, there is no entry of the given index (i.e. there
+ *		are less than n+1 reserve map entries)
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE,
+ *	-FDT_ERR_BADLAYOUT,
+ *	-FDT_ERR_TRUNCATED, standard meanings
+ */
+int fdt_del_mem_rsv(void *fdt, int n);
+
+/**
+ * fdt_set_name - change the name of a given node
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: structure block offset of a node
+ * @name: name to give the node
+ *
+ * fdt_set_name() replaces the name (including unit address, if any)
+ * of the given node with the given string.  NOTE: this function can't
+ * efficiently check if the new name is unique amongst the given
+ * node's siblings; results are undefined if this function is invoked
+ * with a name equal to one of the given node's siblings.
+ *
+ * This function may insert or delete data from the blob, and will
+ * therefore change the offsets of some existing nodes.
+ *
+ * returns:
+ *	0, on success
+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob
+ *		to contain the new name
+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE, standard meanings
+ */
+int fdt_set_name(void *fdt, int nodeoffset, const char *name);
+
+/**
+ * fdt_setprop - create or change a property
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to change
+ * @name: name of the property to change
+ * @val: pointer to data to set the property value to
+ * @len: length of the property value
+ *
+ * fdt_setprop() sets the value of the named property in the given
+ * node to the given value and length, creeating the property if it
+ * does not already exist.
+ *
+ * This function may insert or delete data from the blob, and will
+ * therefore change the offsets of some existing nodes.
+ *
+ * returns:
+ *	0, on success
+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
+ *		contain the new property value
+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *	-FDT_ERR_BADLAYOUT,
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE,
+ *	-FDT_ERR_BADLAYOUT,
+ *	-FDT_ERR_TRUNCATED, standard meanings
+ */
+int fdt_setprop(void *fdt, int nodeoffset, const char *name,
+		const void *val, int len);
+
+/**
+ * fdt_setprop_cell - set a property to a single cell value
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to change
+ * @name: name of the property to change
+ * @val: 32-bit integer value for the property (native endian)
+ *
+ * fdt_setprop_cell() sets the value of the named property in the
+ * given node to the given cell value (converting to big-endian if
+ * necessary), or creates a new property with that value if it does
+ * not already exist.
+ *
+ * This function may insert or delete data from the blob, and will
+ * therefore change the offsets of some existing nodes.
+ *
+ * returns:
+ *	0, on success
+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
+ *		contain the new property value
+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *	-FDT_ERR_BADLAYOUT,
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE,
+ *	-FDT_ERR_BADLAYOUT,
+ *	-FDT_ERR_TRUNCATED, standard meanings
+ */
+static inline int fdt_setprop_cell(void *fdt, int nodeoffset, const char *name,
+				   uint32_t val)
+{
+	val = cpu_to_fdt32(val);
+	return fdt_setprop(fdt, nodeoffset, name, &val, sizeof(val));
+}
+
+/**
+ * fdt_setprop_string - set a property to a string value
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to change
+ * @name: name of the property to change
+ * @str: string value for the property
+ *
+ * fdt_setprop_string() sets the value of the named property in the
+ * given node to the given string value (using the length of the
+ * string to determine the new length of the property), or creates a
+ * new property with that value if it does not already exist.
+ *
+ * This function may insert or delete data from the blob, and will
+ * therefore change the offsets of some existing nodes.
+ *
+ * returns:
+ *	0, on success
+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
+ *		contain the new property value
+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *	-FDT_ERR_BADLAYOUT,
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE,
+ *	-FDT_ERR_BADLAYOUT,
+ *	-FDT_ERR_TRUNCATED, standard meanings
+ */
+#define fdt_setprop_string(fdt, nodeoffset, name, str) \
+	fdt_setprop((fdt), (nodeoffset), (name), (str), strlen(str)+1)
+
+/**
+ * fdt_delprop - delete a property
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to nop
+ * @name: name of the property to nop
+ *
+ * fdt_del_property() will delete the given property.
+ *
+ * This function will delete data from the blob, and will therefore
+ * change the offsets of some existing nodes.
+ *
+ * returns:
+ *	0, on success
+ *	-FDT_ERR_NOTFOUND, node does not have the named property
+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *	-FDT_ERR_BADLAYOUT,
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE,
+ *	-FDT_ERR_TRUNCATED, standard meanings
+ */
+int fdt_delprop(void *fdt, int nodeoffset, const char *name);
+
+/**
+ * fdt_add_subnode_namelen - creates a new node based on substring
+ * @fdt: pointer to the device tree blob
+ * @parentoffset: structure block offset of a node
+ * @name: name of the subnode to locate
+ * @namelen: number of characters of name to consider
+ *
+ * Identical to fdt_add_subnode(), but use only the first namelen
+ * characters of name as the name of the new node.  This is useful for
+ * creating subnodes based on a portion of a larger string, such as a
+ * full path.
+ */
+int fdt_add_subnode_namelen(void *fdt, int parentoffset,
+			    const char *name, int namelen);
+
+/**
+ * fdt_add_subnode - creates a new node
+ * @fdt: pointer to the device tree blob
+ * @parentoffset: structure block offset of a node
+ * @name: name of the subnode to locate
+ *
+ * fdt_add_subnode() creates a new node as a subnode of the node at
+ * structure block offset parentoffset, with the given name (which
+ * should include the unit address, if any).
+ *
+ * This function will insert data into the blob, and will therefore
+ * change the offsets of some existing nodes.
+
+ * returns:
+ *	structure block offset of the created nodeequested subnode (>=0), on success
+ *	-FDT_ERR_NOTFOUND, if the requested subnode does not exist
+ *	-FDT_ERR_BADOFFSET, if parentoffset did not point to an FDT_BEGIN_NODE tag
+ *	-FDT_ERR_EXISTS, if the node at parentoffset already has a subnode of
+ *		the given name
+ *	-FDT_ERR_NOSPACE, if there is insufficient free space in the
+ *		blob to contain the new node
+ *	-FDT_ERR_NOSPACE
+ *	-FDT_ERR_BADLAYOUT
+ *      -FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE,
+ *	-FDT_ERR_TRUNCATED, standard meanings.
+ */
+int fdt_add_subnode(void *fdt, int parentoffset, const char *name);
+
+/**
+ * fdt_del_node - delete a node (subtree)
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node to nop
+ *
+ * fdt_del_node() will remove the given node, including all its
+ * subnodes if any, from the blob.
+ *
+ * This function will delete data from the blob, and will therefore
+ * change the offsets of some existing nodes.
+ *
+ * returns:
+ *	0, on success
+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *	-FDT_ERR_BADLAYOUT,
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_ERR_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE,
+ *	-FDT_ERR_TRUNCATED, standard meanings
+ */
+int fdt_del_node(void *fdt, int nodeoffset);
+
+/**********************************************************************/
+/* Debugging / informational functions                                */
+/**********************************************************************/
+
+const char *fdt_strerror(int errval);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _LIBFDT_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/libfdt_env.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,21 @@
+#ifndef _LIBFDT_ENV_H
+#define _LIBFDT_ENV_H
+
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+#include "bswap.h"
+
+#ifdef WORDS_BIGENDIAN
+#define fdt32_to_cpu(x)		(x)
+#define cpu_to_fdt32(x)		(x)
+#define fdt64_to_cpu(x)		(x)
+#define cpu_to_fdt64(x)		(x)
+#else
+#define fdt32_to_cpu(x)		(bswap_32((x)))
+#define cpu_to_fdt32(x)		(bswap_32((x)))
+#define fdt64_to_cpu(x)		(bswap_64((x)))
+#define cpu_to_fdt64(x)		(bswap_64((x)))
+#endif
+
+#endif /* _LIBFDT_ENV_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/libfdt_internal.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,89 @@
+#ifndef _LIBFDT_INTERNAL_H
+#define _LIBFDT_INTERNAL_H
+/*
+ * libfdt - Flat Device Tree manipulation
+ * Copyright (C) 2006 David Gibson, IBM Corporation.
+ *
+ * libfdt is dual licensed: you can use it either under the terms of
+ * the GPL, or the BSD license, at your option.
+ *
+ *  a) This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This library is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public
+ *     License along with this library; if not, write to the Free
+ *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ *     MA 02110-1301 USA
+ *
+ * Alternatively,
+ *
+ *  b) Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *     1. Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *     2. Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <fdt.h>
+
+#define ALIGN(x, a)	(((x) + (a) - 1) & ~((a) - 1))
+#define PALIGN(p, a)	((void *)ALIGN((unsigned long)(p), (a)))
+
+#define memeq(p, q, n)	(memcmp((p), (q), (n)) == 0)
+#define streq(p, q)	(strcmp((p), (q)) == 0)
+
+uint32_t _fdt_next_tag(const void *fdt, int startoffset, int *nextoffset);
+const char *_fdt_find_string(const char *strtab, int tabsize, const char *s);
+int _fdt_node_end_offset(void *fdt, int nodeoffset);
+
+static inline const void *_fdt_offset_ptr(const void *fdt, int offset)
+{
+	return fdt + fdt_off_dt_struct(fdt) + offset;
+}
+
+static inline void *_fdt_offset_ptr_w(void *fdt, int offset)
+{
+	return (void *)_fdt_offset_ptr(fdt, offset);
+}
+
+static inline const struct fdt_reserve_entry *_fdt_mem_rsv(const void *fdt, int n)
+{
+	const struct fdt_reserve_entry *rsv_table =
+		fdt + fdt_off_mem_rsvmap(fdt);
+
+	return rsv_table + n;
+}
+static inline struct fdt_reserve_entry *_fdt_mem_rsv_w(void *fdt, int n)
+{
+	return (void *)_fdt_mem_rsv(fdt, n);
+}
+
+#define SW_MAGIC		(~FDT_MAGIC)
+
+#endif /* _LIBFDT_INTERNAL_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpplatform/libfdt/patch.libfdt	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,20 @@
+Minor changes are required to get libfdt to build as part of qemu.
+The patch below records modifications relative to upstream dtc-v1.2.0.
+
+Index: libfdt_env.h
+===================================================================
+--- libfdt_env.h	(revision 230023)
++++ libfdt_env.h	(working copy)
+@@ -4,10 +4,9 @@
+ #include <stddef.h>
+ #include <stdint.h>
+ #include <string.h>
+-#include <endian.h>
+-#include <byteswap.h>
++#include "bswap.h"
+ 
+-#if __BYTE_ORDER == __BIG_ENDIAN
++#ifdef WORDS_BIGENDIAN
+ #define fdt32_to_cpu(x)		(x)
+ #define cpu_to_fdt32(x)		(x)
+ #define fdt64_to_cpu(x)		(x)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpsnapdriver/snapapp.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,26 @@
+/*
+* 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         snapapp.exe
+TARGETTYPE	   EXE
+SOURCEPATH	   src
+SOURCE         snapapp.cpp rsvpsnapdriver.cpp
+LIBRARY        euser.lib efsrv.lib
+SYSTEMINCLUDE  /epoc32/include 
+
+CAPABILITY		TCB DISKADMIN ALLFILES
+VENDORID 0x70000001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpsnapdriver/src/rsvpsnapdriver.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,56 @@
+/*
+* 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:
+*
+*/
+
+#include <e32std.h>    // for User::
+#include "rsvpsnapdriver.h"
+
+//#define SVPDBG
+#ifdef SVPDBG
+#include <e32debug.h>
+#define DP(format...) RDebug::Printf(format)
+#else
+#define DP(format...)
+#endif
+
+TInt RSVPSnapDriver::Open(void)
+{
+  DP("** RSVPSnapDriver::Open()");
+
+  const TVersion ver = TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber);
+
+  return DoCreate(KSVPSnapDriverName,
+				  ver,
+				  KNullUnit,
+				  NULL,
+				  NULL);
+}
+
+TInt RSVPSnapDriver::SaveVM(const TDesC8& aData)
+{
+  DP("** RSVPSnapDriver::SaveVM");
+  
+  //DP("** RSVPSnapDriver::SaveVM: - length of data=%d", length);
+  //DP("** RSVPSnapDriver::SaveVM: - aName= %s", name.Ptr());
+	
+  return DoSVPRequest(ESaveVM,(TAny*)&aData);
+ }
+
+TInt RSVPSnapDriver::LoadVM(const TDesC8& aData)
+{
+  DP("** RSVPSnapDriver::LoadVM");
+  return DoSVPRequest(ELoadVM,(TAny*)&aData);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpsnapdriver/src/rsvpsnapdriver.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,64 @@
+/*
+* 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:
+*
+*/
+
+#ifndef __RSVPSNAPDRIVER_H
+#define __RSVPSNAPDRIVER_H
+
+#include <e32cmn.h>    // for RBusLogicalChannel
+
+class TCapsSVPSnapDriver
+{
+public:
+	TVersion	iVersion;
+};
+
+_LIT(KSVPSnapDriverName,"SVP Snapshot Driver");
+_LIT(KSVPSnapDriverLDD, "svpsnapdriver.ldd");
+
+// Version information
+const TInt KMajorVersionNumber=0;
+const TInt KMinorVersionNumber=0;
+const TInt KBuildVersionNumber=1;
+
+class RSVPSnapDriver : public RBusLogicalChannel
+{
+ public:
+  enum TControl
+	{
+	  EDummy = 0,
+	  ESaveVM,
+	  ELoadVM
+	};
+
+ public:
+#ifndef __KERNEL_MODE__
+  TInt Open(void);
+  TInt SaveVM(const TDesC8& aData);
+  TInt LoadVM(const TDesC8& aData);
+
+private:
+  inline TInt DoSVPRequest(TInt aReqNo, TAny * a1) 
+  {
+	TRequestStatus status;
+	DoRequest(aReqNo, status, a1);
+	User::WaitForRequest(status);
+	return status.Int();
+  }
+#endif
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpsnapdriver/src/snapapp.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,64 @@
+/*
+* 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:
+*
+*/
+
+#include <e32base.h>   // CTrapCleanup
+
+#include "rsvpsnapdriver.h"
+
+#define SVPDBG
+#ifdef SVPDBG
+#include <e32debug.h>
+#define DP(format...) RDebug::Printf(format)
+#else
+#define DP(format...)
+#endif
+
+_LIT8(KTestSendData,"kalle");
+
+GLDEF_C TInt E32Main()
+{
+  DP("** (SNAPAPP) E32Main()");
+
+  //  CTrapCleanup* cleanup;
+  //  cleanup=CTrapCleanup::New();
+  //  __UHEAP_MARK;
+
+#if 0
+  TInt err = User::LoadLogicalDevice(KSVPSnapDriverLDD);
+  if (err==KErrAlreadyExists)
+	DP("KErrAlreadyExists");
+#endif
+  
+  RSVPSnapDriver drv;
+  TInt err = drv.Open();
+  
+#if 1
+  if (err==KErrNone)
+	  {
+	  
+	drv.SaveVM(KTestSendData);
+	  }
+  else
+	DP("Error");
+#else
+  drv.LoadVM(KTestSendData);   // Will never return
+#endif
+  
+  //  __UHEAP_MARKEND;
+  //  delete cleanup;
+  return(KErrNone);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpsnapdriver/src/svpsnapdriver.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,247 @@
+/*
+* 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:
+*
+*/
+
+#include "svpsnapdriver.h"
+#include "rsvpsnapdriver.h"
+#include "system.h"
+
+static inline TUint32 ReadReg(ESVPSnapReg aReg)
+{
+  DP("** (SVPSNAPDRIVER) ReadReg(%d)",aReg);
+
+	return *(volatile TUint32 *)(KHwSVPSnapDevice + (aReg << 2));
+}
+
+static inline void WriteReg(ESVPSnapReg aReg, TUint32 aVal)
+{
+  DP("** (SVPSNAPDRIVER) WriteReg(%d,%d)",aReg,aVal);
+
+  *(volatile TUint32*)(KHwSVPSnapDevice + (aReg << 2)) = aVal;
+}
+
+//
+// DSVPSnapDriverFactory
+//
+
+DSVPSnapDriverFactory::DSVPSnapDriverFactory()
+{
+  DP("** (SVPSNAPDRIVER) DSVPSnapDriverFactory::DSVPSnapDriverFactory()");
+
+  iVersion = TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber);    
+}
+
+TInt DSVPSnapDriverFactory::Create(DLogicalChannelBase*& aChannel)
+{
+  DP("** (SVPSNAPDRIVER) DSVPSnapDriverFactory::Create()");
+	
+#if 0
+  if (iOpenChannels != 0)
+	return KErrInUse; // a channel is already open
+#endif
+	
+	aChannel = new DSVPSnapChannel(this);
+	
+	return aChannel ? KErrNone : KErrNoMemory;
+}
+
+TInt DSVPSnapDriverFactory::Install()
+{
+  DP("** (SVPSNAPDRIVER) DSVPSnapDriverFactory::Install()");
+
+  return(SetName(&KSVPSnapDriverName));
+}
+
+void DSVPSnapDriverFactory::GetCaps(TDes8& aDes) const
+{
+  DP("** (SVPSNAPDRIVER) DSVPSnapDriverFactory::GetCaps()");
+
+  TCapsSVPSnapDriver b;
+  b.iVersion = TVersion(KMajorVersionNumber, KMinorVersionNumber, KBuildVersionNumber);
+  aDes.FillZ(aDes.MaxLength());
+  aDes.Copy((TUint8 *)&b, Min(aDes.MaxLength(), sizeof(b)));
+}
+
+//
+// DSVPSnapChannel
+//
+
+DSVPSnapChannel::DSVPSnapChannel(DLogicalDevice* aLogicalDevice)
+{
+  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::DSVPSnapChannel()");
+
+  iDevice = aLogicalDevice;
+  
+  iClientThread = &Kern::CurrentThread();
+  iClientThread->Open();
+}
+
+DSVPSnapChannel::~DSVPSnapChannel()
+{
+  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::~DSVPSnapChannel() ->");
+  Kern::SafeClose((DObject*&)iClientThread, NULL);
+  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::~DSVPSnapChannel() <-");
+}
+
+TInt DSVPSnapChannel::DoCreate(TInt /*aUnit*/, const TDesC* anInfo, const TVersion& aVer)
+{
+  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::DoCreate()");
+
+  if (!Kern::QueryVersionSupported(TVersion(KMajorVersionNumber, KMinorVersionNumber, KBuildVersionNumber), aVer))
+	return KErrNotSupported; 
+		       
+  //Setup the driver for receiving client messages
+  SetDfcQ(Kern::DfcQue0());
+  iMsgQ.Receive();  	
+
+  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::DoCreate()- checking device");
+  TUint id = ReadReg(ESnapshot_Id);
+  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::DoCreate()- checked device- 0x%08x", id);
+  WriteReg(ESnapshot_Address, 0);
+  return KErrNone;
+}
+
+void DSVPSnapChannel::DoCancel(TInt aReqNo)
+{
+  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::DoCancel() %x(%d)", aReqNo, aReqNo);
+}
+
+TInt DSVPSnapChannel::DoRequest(TInt aReqNo, TRequestStatus* aStatus, TAny* a1, TAny* a2)
+{
+  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::DoRequest() %x(%d)", aReqNo, aReqNo);
+
+  TInt err = KErrGeneral;         
+
+  switch(aReqNo)
+	{
+	case RSVPSnapDriver::ESaveVM:
+	  	  DP("RSVPSnapDriver::ESaveVM");
+	  	  err = SaveVM((const TDesC8*)a1);
+	  break;
+	case RSVPSnapDriver::ELoadVM:
+	  	 DP("RSVPSnapDriver::ELoadVM");
+	  	 err= LoadVM((const TDesC8*)a1);
+	  break;
+	default:
+	  	  DP("default");
+	  err = KErrGeneral;
+	  break;
+	}
+	
+  if (KErrNone != err)
+	DP("** (SVPSNAPDRIVER) Error %d from DoRequest", err);
+	
+  return err;
+}
+
+TInt DSVPSnapChannel::DoControl(TInt aFunction, TAny* a1, TAny* a2)
+{
+  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::DoControl(%d)", aFunction);
+
+  TInt err = KErrGeneral;         
+  /* There should be a good reason to use a control rather than a request. */
+
+  if (KErrNone != err) {
+	DP("** (SVPSNAPDRIVER) Error %d from control function", err);
+  }
+	
+  return err;
+}
+
+void DSVPSnapChannel::HandleMsg(TMessageBase* aMsg)
+{
+	
+  TThreadMessage& m = *(TThreadMessage*)aMsg;
+  TInt id = m.iValue;
+  
+  DP("** (SVPSNAPDRIVER) DSVPSnapChannel::HandleMsg() %x(%d)", id, id);
+
+  if (id == (TInt)ECloseMsg)
+	{
+	  m.Complete(KErrNone, EFalse); 
+	  return;
+	}
+  if (id == KMaxTInt)
+	{
+	  // DoCancel
+	  DoCancel(m.Int0());
+	  m.Complete(KErrNone, ETrue); 
+	  return;
+	}
+  if (id < 0)
+	{
+	  // DoRequest
+	  TRequestStatus* pStatus = (TRequestStatus*)m.Ptr0();
+	  TInt r = DoRequest(~id, pStatus, m.Ptr1(), m.Ptr2());
+	  //	  if (r != KErrNone)
+	  Kern::RequestComplete(iClientThread,pStatus,r);
+	  m.Complete(KErrNone, ETrue);
+	}
+  else
+	{
+	  // DoControl
+	  TInt r = DoControl(id, m.Ptr0(), m.Ptr1());
+	  m.Complete(r, ETrue);
+	}
+}
+
+TInt DSVPSnapChannel::SaveVM(const TDesC8* aData)
+{
+  DP("** DSVPSnapChannel::SaveVM()");
+   
+  TInt err = KErrNone; 
+  RET_IF_ERROR(err, Kern::ThreadDesRead(iClientThread, aData, iSendDataBuffer,0));
+  TUint32 * ptr = (TUint32*) iSendDataBuffer.Ptr();
+  
+  WriteReg(ESnapshot_Address, Epoc::LinearToPhysical((TUint32)ptr));
+  WriteReg(ESnapshot_Length, (TUint32) (iSendDataBuffer.Length()));
+  WriteReg(ESnapshot_Trigger, RSVPSnapDriver::ESaveVM);
+  
+  return err;
+}
+
+TInt DSVPSnapChannel::LoadVM(const TDesC8* aData)
+{
+  DP("** DSVPSnapChannel::LoadVM()");  
+
+  TInt err = KErrNone; 
+  RET_IF_ERROR(err, Kern::ThreadDesRead(iClientThread, aData, iSendDataBuffer,0));
+  
+  TUint32 * ptr = (TUint32*) iSendDataBuffer.Ptr();  
+  WriteReg(ESnapshot_Address, Epoc::LinearToPhysical((TUint32)ptr));
+  
+  return ReadReg(ESnapshot_Address);
+}
+
+DECLARE_EXTENSION_LDD()
+{
+  // FIXME: Not needed?
+  DP("** (SVPSNAPDRIVER) DSVPSnapDriverFactory created");
+  return new DSVPSnapDriverFactory;
+}
+
+DECLARE_STANDARD_EXTENSION()
+{
+  DP("** (SVPSNAPDRIVER) SVPSnap extension entry point");
+  TInt r;
+  DSVPSnapDriverFactory* device = new DSVPSnapDriverFactory;
+  if (device==NULL)
+	r=KErrNoMemory;
+  else
+	r=Kern::InstallLogicalDevice(device);
+  
+  return r;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpsnapdriver/src/svpsnapdriver.h	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,75 @@
+/*
+* 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:
+*
+*/
+
+#ifndef __SVPSNAPDRIVER_H
+#define __SVPSNAPDRIVER_H
+
+#include <kernel.h>    // for DLogicalChannel
+
+#define SVPDBG
+#ifdef SVPDBG
+#define DP(format...) Kern::Printf(format)
+#else
+#define DP(format...)
+#endif
+
+#define RET_IF_ERROR(v, e) { if ((v = (e)) != KErrNone) return v; }
+
+enum ESVPSnapReg {
+	ESnapshot_Id = 0,
+	ESnapshot_Address,
+    ESnapshot_Length,
+    ESnapshot_Trigger
+  };
+
+class DSVPSnapDriverFactory : public DLogicalDevice
+{
+ public:
+
+  DSVPSnapDriverFactory();
+  virtual TInt Install();
+  virtual void GetCaps(TDes8& aDes) const;
+  virtual TInt Create(DLogicalChannelBase*& aChannel);
+};
+
+class DSVPSnapChannel : public DLogicalChannel
+{
+ public:
+
+  DSVPSnapChannel(DLogicalDevice* aLogicalDevice);
+  ~DSVPSnapChannel();
+  
+  virtual TInt DoCreate(TInt aUnit, const TDesC* anInfo, const TVersion& aVer);	
+  virtual void HandleMsg(TMessageBase* aMsg);
+	
+ protected:
+  virtual void DoCancel(TInt aReqNo);
+  virtual TInt DoRequest(TInt aReqNo, TRequestStatus* aStatus, TAny* a1, TAny* a2);
+  virtual TInt DoControl(TInt aFunction, TAny *a1, TAny *a2);
+
+ private:
+  TInt SaveVM(const TDesC8* aData);
+  TInt LoadVM(const TDesC8* aData);
+  
+private:
+  DThread* iClientThread;
+  TDfcQue* iDFCQue;
+  
+  TBuf8<256> iSendDataBuffer;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/svpsnapdriver/svpsnapdriver.mmp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,37 @@
+/*
+* 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:
+*
+*/
+
+//macro	__KERNEL_MODE__
+
+#include <variant.mmh>
+#include   <kernel\kern_ext.mmh>
+
+systeminclude		AsspNKernIncludePath
+
+systeminclude		src
+
+target			VariantTarget(svpsnapdriver,ldd)
+linkas			svpsnapdriver.ldd
+targettype		ldd
+
+sourcepath		src
+source			svpsnapdriver.cpp
+
+noexportlibrary
+
+vendorid 		0x70000001
+capability		all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/syborg-elf.cfg	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,5 @@
+input = syborg_001.techview.img
+logfile = syborg_001.techview.log
+output = syborg_001.techview.elf
+physical-address =  0x00000000 
+drive = X:
Binary file baseport/syborg/syborg.dtb has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/syborg.dts	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,122 @@
+/ {
+    #address-cells = <1>;
+    #size-cells  = <1>;
+
+    cpus {
+        #address-cells = <1>;
+        #size-cells = <0>;
+        cpu0: ARM,Cortex-A8@0 {
+            device_type = "cpu";
+            reg = <0>;
+        };
+    };
+    memory@0 {
+        device_type = "memory";
+        reg = <0 08000000>;
+    };
+    syborg {
+        #address-cells = <1>;
+        #size-cells = <0>;
+        intc: intc@0 {
+            compatible = "syborg,interrupt";
+            #interrupt-cells = <1>;
+            reg = <c0000000>;
+            interrupt-controller;
+            qemu,interrupts = <&cpu0 0>;
+            num-interrupts = <20>;
+        };
+        rtc@0 {
+            compatible = "syborg,rtc";
+            reg = <c0001000>;
+        };
+        timer@0 {
+            compatible = "syborg,timer";
+            reg = <c0002000>;
+            frequency = <d#1000000>;
+            interrupts = <1>;
+            interrupt-parent = <&intc>;
+        };
+        keyboard@0 {
+            compatible = "syborg,keyboard";
+            reg = <c0003000>;
+            interrupts = <2>;
+            interrupt-parent = <&intc>;
+        };
+        touchscreen@0 {
+            compatible = "syborg,pointer";
+            reg = <c0004000>;
+            interrupts = <3>;
+            interrupt-parent = <&intc>;
+        };
+        framebuffer@0 {
+            compatible = "syborg,framebuffer";
+            reg = <c0005000>;
+            interrupts = <4>;
+            interrupt-parent = <&intc>;
+        };
+        serial@0 {
+            device_type = "serial";
+            compatible = "syborg,serial";
+            chardev = "serial0";
+            reg = <c0006000>;
+            interrupts = <5>;
+            interrupt-parent = <&intc>;
+        };
+        serial@1 {
+            device_type = "serial";
+            compatible = "syborg,serial";
+            chardev = "serial1";
+            reg = <c0007000>;
+            interrupts = <6>;
+            interrupt-parent = <&intc>;
+        };
+        serial@2 {
+            device_type = "serial";
+            compatible = "syborg,serial";
+            chardev = "serial2";
+            reg = <c0008000>;
+            interrupts = <7>;
+            interrupt-parent = <&intc>;
+        };
+        serial@3 {
+            device_type = "serial";
+            compatible = "syborg,serial";
+            chardev = "serial3";
+            reg = <c0009000>;
+            interrupts = <8>;
+            interrupt-parent = <&intc>;
+        };
+        hostfs@0 {
+            compatible = "syborg,hostfs";
+            reg = <c000a000>;
+	    host-path = "\\svphostfs\\";
+	    drive-number = <d#19>;
+        };
+        ss@0 {
+            compatible = "syborg,snapshot";
+            reg = <c000b000>;
+        };
+        net@0 {
+            compatible = "syborg,virtio-net";
+            reg = <c000c000>;
+            interrupts = <9>;
+            interrupt-parent = <&intc>;
+        };
+        nand@0 {
+            compatible = "syborg,nand";
+            reg = <c000d000>;
+            size = <400>;
+        };
+        audio@0 {
+            compatible = "syborg,virtio-audio";
+            reg = <c000e000>;
+            interrupts = <a>;
+            interrupt-parent = <&intc>;
+        };
+        platform@0 {
+            compatible = "syborg,platform";
+            reg = <c000f000>;
+        };
+    };
+};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/syborg.oby	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,57 @@
+/*
+* 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:
+*
+*/
+
+#ifndef __SYBORG_OBY__
+#define __SYBORG_OBY__
+
+define LANGID 01
+define BUILDNO 0
+define VERSION 0.01
+
+DEFAULT_LANGUAGE 01
+
+REM #undef  _ARM4
+REM #define _ARM4
+
+#define __SYBORG__
+#define	__ARM_HW_PLATFORM__
+#define SYMBIAN_EXCLUDE_MTP
+
+define SYBORG_L1		0x0b0a0001
+define VARIANT			syborg
+define VARID			SYBORG_L1
+define ASSP_DIR			EPOCROOT##epoc32\release\syborg
+define ROMMEGS			15		/* !! HEX !! */
+define PLATFORM_NAME		syborg
+
+#define COLOR
+
+REM defines for IrDA options
+REM Uncomment the line below to enable IrDA to use a Jeteye ESI09680 pod with serial card adapter
+REM #define _ENABLE_IRDA_POD_
+REM define which port IrDA uses
+define IRPOD_ESK irda_port1.esk
+
+REM define which serial port Bluetooth protocol uses
+define BLUETOOTH_ESK bt_port2.esk
+
+REM Define whether or not to include USB client support:
+//#define EUSBC
+
+ROMBUILD_OPTION -no-header 
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/test/ABLD.BAT	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,15 @@
+@ECHO OFF
+
+REM Bldmake-generated batch file - ABLD.BAT
+REM ** DO NOT EDIT **
+
+perl -S ABLD.PL "\src\cedar\generic\base\syborg\test\\" %1 %2 %3 %4 %5 %6 %7 %8 %9
+if errorlevel==1 goto CheckPerl
+goto End
+
+:CheckPerl
+perl -v >NUL
+if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed?
+goto End
+
+:End
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/test/autoexec.bat	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,5 @@
+z:
+cd test
+rem runtests e32test.auto.bat
+rem format c:
+rem runtests f32test.auto.bat -d c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/test/bld.inf	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,40 @@
+/*
+* 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:
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5
+
+PRJ_TESTEXPORTS
+autoexec.bat	                \epoc32\rom\syborg\	//
+
+PRJ_TESTMMPFILES
+
+// Drivers
+// requires baseport specific definitions for TIMER and TimeDelta in d_mstim.cpp 
+..\..\e32test\group\d_mstim		support
+// requires baseport specific definitions for TIMER and TimeDelta and LongTimeDelta in d_tick.cpp 
+..\..\e32test\group\d_tick		support
+// requires definitions for KTickPeriodMs and KTicksPerMillisecond. These are baseport specific and require changes to d_latncy
+..\..\e32test\group\d_latncy		support
+..\..\e32test\group\d_shadow		support
+..\..\e32test\group\bm_pdd		support
+//..\..\e32test\group\d_sharedio		support
+// needs dma.dll
+//..\..\e32test\group\d_dma		support  // DMA kernel-side test harness for real DMA framework
+// needs epbusm.dll
+//..\..\e32test\group\d_medch		support
+..\..\e32test\group\d_cache		support
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/test/variant_test.mmh	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,22 @@
+/*
+* 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:
+*
+*/
+
+#define BUILD_TESTS
+
+#include <..\variant.mmh>
+
+SYSTEMINCLUDE	AsspNKernIncludePath
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/trk_l1.ini	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,6 @@
+[SERIALCOMM]
+PDD EUART1
+LDD ECOMM
+CSY ECUART
+PORT 1
+RATE 115200
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/variant.mmh	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,132 @@
+/*
+* 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:
+*
+*/
+
+//macro   __CPU_ARM926J__
+//#define __CPU__ ARM926EJ-S
+
+//macro __CPU_ARM1136__
+
+//#define __CPU_ARM1176__
+
+macro __CPU_CORTEX_A8N__
+macro __VFP_V3
+#define SYBORG
+macro __SYBORG__
+
+#define MM_MULTIPLE
+//#define MM_FLEXIBLE
+
+// TO DO: decide if we need to switch these on or off!!
+//
+// Uncomment the following line if using the r1p0 release or later of the ARM1136 processor.
+// 
+//#define __CPU_ARM1136_IS_R1__
+//
+
+/* Uncomment if ARM1136 Erratum 351912
+ * "VFP11 double precision multiply can corrupt data"
+ * is fixed on this hardware.
+ */
+//macro __CPU_ARM1136_ERRATUM_351912_FIXED
+
+/* Uncomment if ARM1136 Erratum 353494
+ * "Rare conditions can cause corruption of the Instruction Cache"
+ * is fixed on this hardware.
+ */
+//macro __CPU_ARM1136_ERRATUM_353494_FIXED
+
+/* Uncomment if ARM1136 Erratum 371025
+ * "Invalidate Instruction Cache operation can fail"
+ * is fixed on this hardware.
+ */
+//macro __CPU_ARM1136_ERRATUM_371025_FIXED
+
+/* Uncomment if using ARM1136 processor and ARM1136 Erratum 399234
+ * "Write back data cache entry evicted by write through entry causes data corruption"
+ * is fixed on this hardware.
+ * Workaround
+ * The erratum may be avoided by marking all cacheable memory as one of write through or write back.
+ * This requires the memory attributes described in the translation tables to be modified by software
+ * appropriately, or the use of the remapping capability to remap write through regions to non cacheable.
+ * If this macro is enabled, it should be acompanied by:
+ *					GBLL	CFG_CPU_ARM1136_ERRATUM_399234_FIXED in config.inc
+ */
+//macro __CPU_ARM1136_ERRATUM_399234_FIXED
+
+/* Uncomment if ARM1136 Erratum 408022 "Cancelled write to CONTEXTID register might update ASID" 
+ * is fixed on this hardware.
+ */
+//macro __CPU_ARM1136_ERRATUM_408022_FIXED
+
+// TO DO:
+//
+// Uncomment the next line if using the ARM1136 processor and ARM1136 Erratum 406973
+// "CLREX instruction might be ignored during data cache line fill"
+// is fixed on this hardware.
+// 
+//#define __CPU_ARM1136_ERRATUM_406973_FIXED
+
+
+// Uncomment if:
+//	1)	using ARM1136 processor and ARM1136 Erratum 411920: "Invalidate Entire Instruction Cache
+//	  	operation might fail to invalidate some lines if coincident with linefill"
+//  	  	is fixed on this hardware, or
+//	2)	using ARM1176 processor and ARM1176 Erratum 415045: "Invalidate Entire Instruction Cache
+// 	  	operation might fail to invalidate some lines if coincident with linefill
+//	  	is fixed on this hardware.
+// Workaround:
+//	1)	Disables the use of of prefetch range cache operations by setting RV bit in Auxiliary Ctrl Reg.
+//	2)	Replaces Invalidate ICache operation with the sequence defined in the errata document.
+// If this macro is enabled, it should be accompanied by:
+// 	"GBLL CFG_CPU_ARM1136_ERRATUM_411920_FIXED" in variant.mmh
+//
+//macro __CPU_ARM1136_ERRATUM_411920_FIXED
+
+
+
+macro __CPU_HAS_VFP
+#define USE_VFP_MATH
+// !@! not moving when 1136
+//#define MM_MOVING
+macro __DEBUGGER_SUPPORT__
+macro FASTTRACE_KERNEL_ALL
+macro __EMI_SUPPORT__
+
+#define VariantTarget(name,ext)     _syborg_##name##.##ext
+#define AsspNKernIncludePath        \..\..\src\cedar\generic\base\syborg\specific
+#define VariantMediaDefIncludePath  AsspNKernIncludePath        
+#define PlatformLib		   		    kasyborg.lib
+
+systeminclude	\epoc32\include\memmodel\epoc\mmubase
+//systeminclude	\epoc32\include\memmodel\epoc\moving
+//systeminclude	\epoc32\include\memmodel\epoc\moving\arm
+//systeminclude	\epoc32\include\memmodel\epoc\flexible
+//systeminclude	\epoc32\include\memmodel\epoc\flexible\arm
+systeminclude	\epoc32\include\memmodel\epoc\multiple
+systeminclude	\epoc32\include\memmodel\epoc\multiple\arm
+
+systeminclude	..\soc\interface
+
+// Uncomment for T_USERCOMDEB test
+//#define BUILD_TESTS
+
+#ifdef BUILD_TESTS
+macro BTRACE_KERNEL_ALL
+#endif
+
+//OPTION_REPLACE	ARMCC  --cpu __CPU__
+//OPTION_REPLACE	ARMASM --cpu __CPU__