--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/src/wlanhwinitmain.cpp Mon May 17 20:20:32 2010 +0100
@@ -0,0 +1,749 @@
+/*
+* Copyright (c) 2002-2006 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: The class implementing HW specific initialization
+*
+*/
+
+
+#include <iscapi.h>
+#include "gendebug.h"
+#include <IscNokiaDefinitions.h>
+#include <pn_const.h>
+#include <tisi.h>
+#include <infoisi.h>
+#include <permisi.h>
+#include <f32file.h>
+#include <stddef.h>
+
+#include "bcmnvmem.h"
+#include "lmac_firmware.h"
+#include "plt_firmware.h"
+
+#include "wlanhwinitmain.h"
+#include "wlanhwinitpermparser.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "wlanhwinitmainTraces.h"
+#endif
+
+/** The default MAC address. */
+const TMacAddr KWlanHwInitDefaultMacAddr = { { 0x00, 0xE0, 0xDE, 0xAD, 0xBE, 0xEF } };
+// ISI constants
+const TUint KWlanHwInitIsiBufferSize = 1024;
+const TUint16 KWlanHwInitIsiPermGroupId = 313;
+const TUint16 KWlanHwInitIsiPermIndex = 0;
+const TUint16 KWlanHwInitIsiPermOffset = 0;
+const TUint32 KWlanHwInitIsiPermDataSize = (sizeof(WlanHalApi::SNvMem) - offsetof(WlanHalApi::SNvMem, PL_2G_hdb));
+
+/**
+* HW specific settings
+*/
+/* should be using TWlanTestPlatformSetting in wlanTestServer.h */
+enum TWlanHwInitTestSetting
+ {
+ EWlanHwInitTestSettingMacAddressPerm,
+ EWlanHwInitTestSettingMacAddressTemp,
+ EWlanHwInitTestSettingTuningData,
+ EWlanHwInitTestSettingTempTuningData
+ };
+
+const TUint KIsiRespMessagePadding = 128;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+CWlanHwInitMain::CWlanHwInitMain() :
+ iMacAddressPerm( KWlanHwInitDefaultMacAddr ),
+ iMacAddressTemp( KWlanHwInitDefaultMacAddr ),
+ iPermParser( NULL ),
+ iTransactionId( 0 ),
+ ipNvsData ( 0 ),
+ iFirmwareMC ( 0 )
+{
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:CWlanHwInitMain()" ) ) );
+ OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_CWLANHWINITMAIN, "CWlanHwInitMain:CWlanHwInitMain()" );
+}
+
+void CWlanHwInitMain::ConstructL()
+{
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:ConstructL()" ) ) );
+ OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_CONSTRUCTL, "CWlanHwInitMain:ConstructL()" );
+
+ iPermParser = CWlanHwInitPermParser::NewL();
+/**
+* Initialize default NVS data.
+*/
+ TPtr8 nvsPtr( iPermParser->GetNvsBuffer() );
+
+ //take only the nvmem part of the IDB. IDB = nvmem + firmware.
+ TUint32* dataPtr = (TUint32*)normal_firmware;
+ //first there is the magic number
+ if (*dataPtr != KInitMagic)
+ {
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser: Invalid magic number at start of init block (0x%x)"), *dataPtr ) );
+ OstTrace1( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_CONSTRUCTL, "CWlanHwInitPermParser: Invalid magic number at start of init block (0x%x)", *dataPtr );
+ User::Leave( KErrGeneral );
+ }
+ //then there is type
+ dataPtr++;
+ const TUint32 type = *dataPtr;
+
+ //and after type, there is the lenght of the data
+ dataPtr++;
+ const TUint32 len = *dataPtr;
+
+ if (type != KInitTypeNvMem)
+ {
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser: Invalid type at start of init block (0x%x)"), type ) );
+ OstTrace1( TRACE_IMPORTANT, DUP2_CWLANHWINITMAIN_CONSTRUCTL, "CWlanHwInitPermParser: Invalid type at start of init block (0x%x)", type );
+ User::Leave( KErrGeneral );
+ }
+
+ //after the length there is data
+ dataPtr++;
+ nvsPtr.Append( reinterpret_cast<const TUint8*>(dataPtr), len );
+
+/**
+* Update device data from the CMT permanent storage.
+*/
+
+// Discard the return value, we'll use the default value
+// if this fails.
+ TRAPD( ret, GetMacAddressL( iMacAddressPerm ) );
+ iMacAddressTemp = iMacAddressPerm;
+ iPermParser->SetMacAddress(iMacAddressTemp);
+
+ TPtr8 tuningPtr( iPermParser->GetTuningBuffer() );
+ TRAP( ret, GetTuningDataL( tuningPtr ) );
+ if(ret != KErrNone)
+ {
+ iPermParser->GenerateDefaultTuningData();
+ }
+
+ iPermParser->UpdateNvsData(UPDATE_ALL);
+}
+
+CWlanHwInitMain* CWlanHwInitMain::NewL()
+{
+ OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_NEWL, "CWlanHwInitMain::NewL()" );
+ CWlanHwInitMain* self = new( ELeave ) CWlanHwInitMain;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+}
+
+CWlanHwInitMain::~CWlanHwInitMain()
+{
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:~CWlanHwInitMain()" ) ) );
+ OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITMAIN_CWLANHWINITMAIN, "CWlanHwInitMain:~CWlanHwInitMain()" );
+
+ delete iPermParser;
+ iPermParser = NULL;
+ delete ipNvsData;
+ ipNvsData = NULL;
+ delete iFirmwareMC;
+ iFirmwareMC = NULL;
+}
+
+// -----------------------------------------------------------------------------
+// CWlanHwInitMain::GetMacAddressL
+// -----------------------------------------------------------------------------
+//
+void CWlanHwInitMain::GetMacAddressL(TMacAddr& aMacAddress)
+{
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:GetMacAddressL()" ) ) );
+ OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_GETMACADDRESSL, "CWlanHwInitMain:GetMacAddressL()" );
+
+ TUint8 readReq[ISI_HEADER_SIZE + SIZE_INFO_WLAN_INFO_READ_REQ];
+ memset( readReq, 0, sizeof( readReq));
+ TPtr8 readPtr( readReq, ISI_HEADER_SIZE + SIZE_INFO_WLAN_INFO_READ_REQ);
+
+ TIsiSend readMac( readPtr);
+
+ readMac.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, PN_PHONE_INFO);
+ readMac.Set8bit( ISI_HEADER_OFFSET_TRANSID, ++iTransactionId);
+ readMac.Set8bit( ISI_HEADER_OFFSET_MESSAGEID, INFO_WLAN_INFO_READ_REQ);
+ readMac.Set16bit( ISI_HEADER_SIZE + INFO_WLAN_INFO_READ_REQ_OFFSET_FILLERBYTE1, 0);
+ readMac.Complete();
+
+ TUint8 readResp[ISI_HEADER_SIZE + SIZE_INFO_WLAN_INFO_READ_RESP];
+ memset( readResp, 0, sizeof( readResp));
+ TPtr8 respPtr( readResp, ISI_HEADER_SIZE + SIZE_INFO_WLAN_INFO_READ_RESP );
+
+ SendIsiMessageL( readPtr, respPtr );
+
+ TIsiReceiveC macResp( respPtr);
+
+ if ( ( macResp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) != PN_PHONE_INFO ) || (macResp.Get8bit(ISI_HEADER_OFFSET_MESSAGEID) != INFO_WLAN_INFO_READ_RESP) )
+ {
+ TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetMacAddressL() - invalid message received" ) ) );
+ TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetMacAddressL() - resource = %02X, message id = %02X" ),
+ macResp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID), macResp.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) ) );
+ OstTrace0( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_GETMACADDRESSL, "CWlanHwInitMain:GetMacAddressL() - invalid message received" );
+ OstTrace1( TRACE_IMPORTANT, DUP2_CWLANHWINITMAIN_GETMACADDRESSL, "CWlanHwInitMain::GetMacAddressL - resource = 0x%x", macResp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) );
+ OstTrace1( TRACE_IMPORTANT, DUP3_CWLANHWINITMAIN_GETMACADDRESSL, "CWlanHwInitMain::GetMacAddressL - message id = 0x%x", macResp.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) );
+
+ User::Leave( KErrGeneral );
+ }
+
+ if ( macResp.Get8bit( ISI_HEADER_SIZE + INFO_WLAN_INFO_READ_RESP_OFFSET_STATUS) != INFO_OK )
+ {
+ TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetMacAddressL() - request failed, status = %02X" ),
+ macResp.Get8bit( ISI_HEADER_SIZE + INFO_WLAN_INFO_READ_RESP_OFFSET_STATUS) ) );
+ OstTrace1( TRACE_IMPORTANT, DUP4_CWLANHWINITMAIN_GETMACADDRESSL, "CWlanHwInitMain:GetMacAddressL() - request failed, status = 0x%x", macResp.Get8bit( ISI_HEADER_SIZE + INFO_WLAN_INFO_READ_RESP_OFFSET_STATUS) );
+ User::Leave( KErrGeneral );
+ }
+
+ TMacAddr tempMac;
+
+ memcpy( &tempMac.iMacAddress, macResp.GetData( ISI_HEADER_SIZE + INFO_WLAN_INFO_READ_RESP_OFFSET_ADDRESS, INFO_WLAN_MAC_ADDR_LEN).Ptr(), INFO_WLAN_MAC_ADDR_LEN);
+ for( TInt i=0; i<INFO_WLAN_MAC_ADDR_LEN; i++)
+ {
+ aMacAddress.iMacAddress[INFO_WLAN_MAC_ADDR_LEN - i - 1] = tempMac.iMacAddress[i];
+ }
+
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::GetTuningDataL
+// ---------------------------------------------------------
+//
+void CWlanHwInitMain::GetTuningDataL(TDes8& aTuningData)
+{
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL()" ) ) );
+ OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL()" );
+
+ TUint8 readBuf[ ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_REQ];
+ memset( &readBuf, 0, sizeof( readBuf));
+ TPtr8 readReq( readBuf, ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_REQ);
+
+ TIsiSend sendReq( readReq);
+
+ sendReq.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, PN_PERMANENT_DATA);
+ sendReq.Set8bit( ISI_HEADER_OFFSET_TRANSID, ++iTransactionId);
+ sendReq.Set8bit( ISI_HEADER_OFFSET_MESSAGEID, PERM_PM_RECORD_READ_REQ);
+
+ sendReq.Set16bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_REQ_OFFSET_GROUPID, KWlanHwInitIsiPermGroupId);
+ sendReq.Set16bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_REQ_OFFSET_INDEX, KWlanHwInitIsiPermIndex);
+ sendReq.Set32bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_REQ_OFFSET_OFFSET, KWlanHwInitIsiPermOffset);
+ sendReq.Set32bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_REQ_OFFSET_SIZE, KWlanHwInitIsiPermDataSize);
+ sendReq.Complete();
+
+ HBufC8* respBuf = HBufC8::NewL( KWlanHwInitIsiBufferSize);
+ CleanupStack::PushL( respBuf );
+ respBuf->Des().FillZ();
+
+ TPtr8 readResp( respBuf->Des());
+
+ SendIsiMessageL( readReq, readResp);
+
+ TIsiReceiveC recv( respBuf->Des());
+
+ if ( ( recv.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) != PN_PERMANENT_DATA ) || ( recv.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) != PERM_PM_RECORD_READ_RESP ) )
+ {
+ TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL() - invalid message received" ) ) );
+ TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL() - resource = %02X, message id = %02X" ),
+ recv.Get8bit( ISI_HEADER_OFFSET_RESOURCEID), recv.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) ) );
+ OstTrace0( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - invalid message received" );
+ OstTrace1( TRACE_IMPORTANT, DUP8_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - resource = %x", recv.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) );
+ OstTrace1( TRACE_IMPORTANT, DUP9_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - message id = %x", recv.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) );
+ }
+
+ if ( recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_PMMSTATUS) != PMM_OK )
+ {
+ TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL() - request failed, status = %02X" ),
+ recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_PMMSTATUS) ) );
+ OstTrace1( TRACE_IMPORTANT, DUP2_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - request failed, status = 0x%x", recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_PMMSTATUS) );
+ User::Leave( KErrGeneral );
+ }
+
+ if( recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_NUMBEROFSUBBLOCKS) != 1)
+ {
+ TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL() - request failed, subblocks %d" ),
+ recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_NUMBEROFSUBBLOCKS) ) );
+ OstTrace1( TRACE_IMPORTANT, DUP3_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - request failed, subblocks %d", recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_NUMBEROFSUBBLOCKS) );
+ User::Leave( KErrNotFound );
+ }
+
+ if( recv.Get8bit( ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_RESP + PERM_SB_PM_DATA_OFFSET_SUBBLOCKID) != PERM_SB_PM_DATA)
+ {
+ TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL() - request failed, subblock id %d" ),
+ recv.Get8bit( ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_RESP + PERM_SB_PM_DATA_OFFSET_SUBBLOCKID) ) );
+ OstTrace1( TRACE_IMPORTANT, DUP4_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - request failed, subblock id %d", recv.Get8bit( ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_RESP + PERM_SB_PM_DATA_OFFSET_SUBBLOCKID) );
+ User::Leave( KErrNotFound );
+ }
+
+ TUint32 size = recv.Get32bit( ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_RESP + PERM_SB_PM_DATA_OFFSET_SIZE);
+
+ if( size != KWlanHwInitIsiPermDataSize)
+ {
+ TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - payload too big" ) ) );
+ TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - actual size = %u" ), size ) );
+ TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - expected size = %u" ), KWlanHwInitIsiPermDataSize ) );
+ OstTrace0( TRACE_IMPORTANT, DUP5_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - payload too big" );
+ OstTrace1( TRACE_IMPORTANT, DUP6_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - actual size = %u", size );
+ OstTrace1( TRACE_IMPORTANT, DUP7_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - expected size = %u", KWlanHwInitIsiPermDataSize );
+ User::Leave( KErrTooBig );
+ }
+
+ aTuningData.Append( recv.GetData( ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_RESP + PERM_SB_PM_DATA_OFFSET_DATA, size));
+
+ CleanupStack::PopAndDestroy( respBuf);
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::SetTuningDataL
+// ---------------------------------------------------------
+//
+void CWlanHwInitMain::SetTuningDataL(TDesC8& aTuningData)
+{
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SetTuningDataL()" ) ) );
+ OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_SETTUNINGDATAL, "CWlanHwInitMain:SetTuningDataL()" );
+
+ HBufC8* writeBuf = HBufC8::NewL( KWlanHwInitIsiBufferSize);
+ CleanupStack::PushL( writeBuf );
+ writeBuf->Des().FillZ();
+
+ TPtr8 writeReq( writeBuf->Des());
+
+ TIsiSend writeSend( writeReq);
+
+ writeSend.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, PN_PERMANENT_DATA);
+ writeSend.Set8bit( ISI_HEADER_OFFSET_TRANSID, ++iTransactionId);
+ writeSend.Set8bit( ISI_HEADER_OFFSET_MESSAGEID, PERM_PM_RECORD_WRITE_REQ);
+
+ writeSend.Set16bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_REQ_OFFSET_GROUPID, KWlanHwInitIsiPermGroupId);
+ writeSend.Set16bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_REQ_OFFSET_INDEX, KWlanHwInitIsiPermIndex);
+ writeSend.Set32bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_REQ_OFFSET_SIZE, KWlanHwInitIsiPermDataSize);
+ writeSend.CopyData( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_REQ_OFFSET_DATA, aTuningData);
+ writeSend.Complete();
+
+ TUint8 respBuf[ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_WRITE_RESP + KIsiRespMessagePadding];
+ memset( &respBuf, 0, sizeof( respBuf));
+ TPtr8 writeResp( respBuf, ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_WRITE_RESP + KIsiRespMessagePadding);
+
+ SendIsiMessageL( writeReq, writeResp );
+
+ TIsiReceiveC resp( writeResp);
+
+ if ( ( resp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) != PN_PERMANENT_DATA ) || ( resp.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) != PERM_PM_RECORD_WRITE_RESP ) )
+ {
+ TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:SetTuningDataL() - invalid message received" ) ) );
+ TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:SetTuningDataL() - resource = %02X, message id = %02X" ),
+ resp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID),
+ resp.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) ) );
+ OstTrace0( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_SETTUNINGDATAL, "CWlanHwInitMain:SetTuningDataL() - invalid message received" );
+ OstTrace1( TRACE_IMPORTANT, DUP2_CWLANHWINITMAIN_SETTUNINGDATAL, "CWlanHwInitMain:SetTuningDataL() - resource = %x", resp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) );
+ OstTrace1( TRACE_IMPORTANT, DUP3_CWLANHWINITMAIN_SETTUNINGDATAL, "CWlanHwInitMain:SetTuningDataL() - message id = 0x%x", resp.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) );
+ }
+
+ if ( resp.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_RESP_OFFSET_PMMSTATUS) != PMM_OK )
+ {
+ TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:SetTuningDataL() - request failed, status = %02X" ),
+ resp.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_RESP_OFFSET_PMMSTATUS) ) );
+ OstTrace1( TRACE_IMPORTANT, DUP4_CWLANHWINITMAIN_SETTUNINGDATAL, "CWlanHwInitMain:SetTuningDataL() - request failed, status = 0x%x", resp.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_RESP_OFFSET_PMMSTATUS) );
+
+ User::Leave( KErrGeneral );
+ }
+
+ CleanupStack::PopAndDestroy( writeBuf );
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::GetHwTestData
+// ---------------------------------------------------------
+//
+TInt CWlanHwInitMain::GetHwTestData(TUint aId, TDes8& aData)
+{
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:GetHwTestData()" ) ) );
+ OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_GETHWTESTDATA, "CWlanHwInitMain:GetHwTestData()" );
+
+ switch ( aId )
+ {
+ case EWlanHwInitTestSettingMacAddressPerm:
+ aData.Copy( &iMacAddressPerm.iMacAddress[0], KMacAddrLength );
+ break;
+
+ case EWlanHwInitTestSettingMacAddressTemp:
+ aData.Copy( &iMacAddressTemp.iMacAddress[0], KMacAddrLength );
+ break;
+
+ case EWlanHwInitTestSettingTuningData:
+ iPermParser->GetTuningValues( aData );
+ break;
+
+ case EWlanHwInitTestSettingTempTuningData:
+ default:
+ TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetHwTestData() - not supported (%d)" ), aId ) );
+ OstTrace1( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_GETHWTESTDATA, "CWlanHwInitMain:GetHwTestData() - not supported (%d)", aId );
+ return KErrNotSupported;
+ }
+
+ return KErrNone;
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::SetHwTestData
+// ---------------------------------------------------------
+//
+TInt CWlanHwInitMain::SetHwTestData(TUint aId, TDesC8& aData)
+{
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SetHwTestData()" ) ) );
+ OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_SETHWTESTDATA, "CWlanHwInitMain:SetHwTestData()" );
+ TInt ret( KErrNone );
+
+ switch ( aId )
+ {
+ case EWlanHwInitTestSettingMacAddressTemp:
+ OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITMAIN_SETHWTESTDATA, "CWlanHwInitMain:SetHwTestData() EWlanHwInitTestSettingMacAddressTemp" );
+ Mem::Copy( &iMacAddressTemp.iMacAddress[0], aData.Ptr(), KMacAddrLength );
+ iPermParser->SetMacAddress(iMacAddressTemp);
+ iPermParser->UpdateNvsData(UPDATE_MAC_ADDR);
+ break;
+
+ case EWlanHwInitTestSettingTuningData:
+ {
+ OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINITMAIN_SETHWTESTDATA, "CWlanHwInitMain::SetHwTestData() EWlanHwInitTestSettingTuningData" );
+ iPermParser->SetTuningValues(aData, UPDATE_ALL);
+ TPtrC8 cmtDataPtr( iPermParser->GetTuningBuffer() );
+ TRAP( ret, SetTuningDataL(cmtDataPtr) );
+ iPermParser->UpdateNvsData(UPDATE_ALL);
+ }
+ break;
+
+ case EWlanHwInitTestSettingTempTuningData:
+ {
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SetHwTestData() EWlanHwInitTestSettingTempTuningData" ) ) );
+ OstTrace0( TRACE_NORMAL, DUP3_CWLANHWINITMAIN_SETHWTESTDATA, "CWlanHwInitMain::SetHwTestData() EWlanHwInitTestSettingTempTuningData" );
+ iPermParser->SetTuningValues(aData, UPDATE_ALL);
+ iPermParser->UpdateNvsData(UPDATE_ALL);
+ }
+ break;
+
+ case EWlanHwInitTestSettingMacAddressPerm:
+ default:
+ TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:SetHwTestData() - no such id (%d)!" ), aId ) );
+ OstTrace1( TRACE_IMPORTANT, DUP4_CWLANHWINITMAIN_SETHWTESTDATA, "CWlanHwInitMain:SetHwTestData() - no such id (%d)", aId );
+ ret = KErrNotSupported;
+ break;
+ }
+
+ return ret;
+}
+
+
+TBool CWlanHwInitMain::IsMMCFirmwareFound()
+ {
+#ifdef LOAD_FW_FROM_MMC
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain::IsMMCFirmwareFound()" ) ) );
+ OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_ISMMCFIRMWAREFOUND, "CWlanHwInitMain::IsMMCFirmwareFound()" );
+
+ _LIT(KSearchPath,"E:\\firmware\\*.*");
+ _LIT(KFilePath,"E:\\firmware\\");
+
+ // Check if the firmware is already loaded,
+ // free the memory and continue
+
+ if (iFirmwareMC)
+ {
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain: Memory for MMC Firmware already reserved" ) ) );
+ OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITMAIN_ISMMCFIRMWAREFOUND, "CWlanHwInitMain: Memory for MMC Firmware already reserved" );
+ return ETrue;
+ }
+
+ // Init store
+ RFs fs;
+ RFile file;
+ CDir* dirList;
+ TInt fileSize = -1;
+ TBuf<60> fileName;
+ fileName = KFilePath;
+
+
+ // Connect to the file system
+ if ( fs.Connect() != KErrNone)
+ {
+ return EFalse;
+ }
+
+ // If returns an error, the folder is not found
+ // -> return false;
+ if (fs.GetDir(KSearchPath,
+ KEntryAttMaskSupported,
+ ESortByName,
+ dirList) != KErrNone )
+ {
+ fs.Close();
+ delete dirList;
+ return EFalse;
+ }
+
+ // If no file is not found, return false.
+ if (dirList->Count() == 0)
+ {
+ fs.Close();
+ delete dirList;
+ return EFalse;
+ }
+
+ // Take the first file in the list, further files
+ // are not handled
+ fileName.Append ((*dirList)[0].iName); // Assume there is enough space, otherwise panics...
+
+ // Try to open the firmware file
+ if ( file.Open(fs, fileName, EFileStream != KErrNone))
+ {
+ delete dirList;
+ fs.Close();
+ return EFalse;
+ }
+
+ // Get the size of the file
+ if (file.Size(fileSize) != KErrNone)
+ {
+ delete dirList;
+ file.Close();
+ fs.Close();
+ return EFalse;
+
+ }
+
+ // Reserve memory from heap for it
+ TRAPD(err, iFirmwareMC = HBufC8::NewL(fileSize));
+
+ if (err != KErrNone)
+ {
+ delete dirList;
+ file.Close();
+ fs.Close();
+ return EFalse;
+ }
+
+ // Get a pointer and read the contents
+ // of the file.
+ TPtr8 pBuf = iFirmwareMC->Des();
+ if (file.Read(pBuf) != KErrNone)
+ {
+ delete dirList;
+ file.Close();
+ fs.Close();
+ return EFalse;
+ }
+
+ // Successful
+ file.Close();
+ fs.Close();
+ delete dirList;
+
+ return ETrue;
+
+#else
+ return EFalse;
+#endif // LOAD_FW_FROM_MMC
+ }
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::GetHwInitData
+// ---------------------------------------------------------
+//
+void CWlanHwInitMain::GetHwInitData(const TUint8** ppConfigData, TUint& configLength, const TUint8** ppNvsData, TUint& nvsLength )
+{
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:GetHwInitData()" ) ) );
+ OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_GETHWINITDATA, "CWlanHwInitMain:GetHwInitData()" );
+
+ // Temporary pointer for firmware
+ const TUint8* fwPtr;
+ TUint fwSize = 0;
+
+ // Parse NVS
+ iPermParser->CompareNvsBuffer();
+ TPtr8 nvsPtr( iPermParser->GetNvsBuffer() );
+
+ // Check if firmware can be found from the MMC
+#ifdef LOAD_FW_FROM_MMC // Enable MMC loading here
+ if (IsMMCFirmwareFound())
+ {
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain::GetHwInitData():MMC Firmware loaded" ) ) );
+ OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITMAIN_GETHWINITDATA, "CWlanHwInitMain::GetHwInitData():MMC Firmware loaded" );
+ fwPtr = reinterpret_cast<const TUint8*>( iFirmwareMC->Ptr() );
+ fwSize = iFirmwareMC->Length();
+ }
+ else
+ {
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain::GetHwInitData():Hardcoded Firmware loaded" ) ) );
+ OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINITMAIN_GETHWINITDATA, "CWlanHwInitMain::GetHwInitData():Hardcoded Firmware loaded" );
+ fwPtr = reinterpret_cast<const TUint8*>( normal_firmware );
+ fwSize = (sizeof( normal_firmware ));
+ }
+#else
+ fwPtr = reinterpret_cast<const TUint8*>( normal_firmware );
+ fwSize = (sizeof( normal_firmware ));
+#endif
+
+ nvsLength = fwSize;
+
+ // Reserve memory if it has not yet already been reserved
+ if (ipNvsData == NULL)
+ {
+ ipNvsData = (TUint8*)User::Alloc(nvsLength);
+ if (!ipNvsData)
+ {
+ // Out of memory
+ ASSERT(0);
+ }
+ }
+
+ // Copy NVS data to correct position
+ //first copy the whole firmware
+ Mem::Copy(ipNvsData, fwPtr, nvsLength);
+
+ // Length of NVS
+ *reinterpret_cast<TUint32*>(&ipNvsData[KNvMemLengthOffset]) = nvsPtr.Length();
+
+ // Copy NVS data to the NVS offset
+ Mem::Copy( (ipNvsData + KNvMemValueOffset), nvsPtr.Ptr(), nvsPtr.Length());
+
+ *ppNvsData = ipNvsData;
+}
+
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::GetMacAddress
+// Status : Draft
+// ---------------------------------------------------------
+//
+TInt CWlanHwInitMain::GetMacAddress(TMacAddr& aMacAddress)
+{
+ aMacAddress = iMacAddressPerm;
+ return KErrNone;
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::GetHwTestInitData
+// Status : Draft
+// ---------------------------------------------------------
+//
+void CWlanHwInitMain::GetHwTestInitData(const TUint8** aInitData, TUint& aInitLength, const TUint8** aFwData, TUint& aFwLength)
+{
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:GetHwTestInitData()" ) ) );
+ OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_GETHWTESTINITDATA, "CWlanHwInitMain:GetHwTestInitData()" );
+
+ // Temporary pointer for firmware
+ const TUint8* fwPtr;
+ TUint fwSize = 0;
+
+ // Parse NVS
+ iPermParser->CompareNvsBuffer();
+ TPtr8 nvsPtr( iPermParser->GetNvsBuffer() );
+
+ // Check if firmware can be found from the MMC
+#ifdef LOAD_FW_FROM_MMC // Enable MMC loading here
+ if (IsMMCFirmwareFound())
+ {
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain::GetHwTestInitData():MMC Firmware loaded" ) ) );
+ OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITMAIN_GETHWTESTINITDATA, "CWlanHwInitMain::GetHwTestInitData():MMC Firmware loaded" );
+ fwPtr = reinterpret_cast<const TUint8*>( iFirmwareMC->Ptr() );
+ fwSize = iFirmwareMC->Length();
+ }
+ else
+ {
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain::GetHwTestInitData():Hardcoded Firmware loaded" ) ) );
+ OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINITMAIN_GETHWTESTINITDATA, "CWlanHwInitMain::GetHwTestInitData():Hardcoded Firmware loaded" );
+ fwPtr = reinterpret_cast<const TUint8*>( plt_firmware );
+ fwSize = (sizeof( plt_firmware ));
+ }
+#else
+ fwPtr = reinterpret_cast<const TUint8*>( plt_firmware );
+ fwSize = (sizeof( plt_firmware ));
+#endif
+
+ aFwLength = fwSize;
+
+ // Reserve memory if it has not yet already been reserved
+ if (ipNvsData == NULL)
+ {
+ ipNvsData = (TUint8*)User::Alloc(aFwLength);
+ if (!ipNvsData)
+ {
+ // Out of memory
+ ASSERT(0);
+ }
+ }
+
+ // Copy NVS data to correct position
+ //first copy the whole firmware
+ Mem::Copy(ipNvsData, fwPtr, aFwLength);
+
+ // Length of NVS
+ *reinterpret_cast<TUint32*>(&ipNvsData[KNvMemLengthOffset]) = nvsPtr.Length();
+
+ // Copy NVS data to the NVS offset
+ Mem::Copy( (ipNvsData + KNvMemValueOffset), nvsPtr.Ptr(), nvsPtr.Length());
+
+ *aFwData = ipNvsData;
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::SendIsiMessageL
+// ---------------------------------------------------------
+//
+void CWlanHwInitMain::SendIsiMessageL(TDes8& aRequest, TDes8& aReply)
+{
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SendIsiMessageL()" ) ) );
+ OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:SendIsiMessageL()" );
+
+ RIscApi iscapi;
+ TRequestStatus status;
+ const TUint16 channelId = EIscNokiaStartup;
+
+ iscapi.Open( channelId, status );// codescanner::open IscApi::Open doesn't have return value. Error codes are passed in status parameter.
+ User::WaitForRequest( status );
+ if ( status.Int() != KErrNone )
+ {
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Open() failed with %d" ), status.Int() ) );
+ OstTrace1( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Open() failed with %d", status.Int() );
+ User::Leave( status.Int() );
+ }
+ CleanupClosePushL( iscapi );
+
+ TInt ret = iscapi.Send( aRequest );
+ if ( ret != KErrNone )
+ {
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Send() failed with %d" ), ret ) );
+ OstTrace1( TRACE_IMPORTANT, DUP2_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Send() failed with %d", ret );
+ User::Leave( ret );
+ }
+
+ TUint16 neededLength = 0;
+
+ TraceDump( INFO_LEVEL,( _L( "CWlanHwInitMain:aReply Size() %d" ),aReply.Size() ) );
+ TraceDump( INFO_LEVEL,( _L( "CWlanHwInitMain:aReply MaxLength() %d" ),aReply.MaxLength() ) );
+ TraceDump( INFO_LEVEL,( _L( "CWlanHwInitMain:aReply MaxSize() %d" ),aReply.MaxSize() ) );
+ OstTrace1( TRACE_NORMAL, DUP3_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:aReply Size() %d", aReply.Size() );
+ OstTrace1( TRACE_NORMAL, DUP4_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:aReply MaxLength() %d", aReply.MaxLength() );
+ OstTrace1( TRACE_NORMAL, DUP5_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:aReply MaxSize() %d", aReply.MaxSize() );
+
+ iscapi.Receive( status, aReply, neededLength );
+ User::WaitForRequest( status );
+ if ( status.Int() != KErrNone )
+ {
+ TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Receive() failed with %d" ), status.Int() ) );
+ TraceDump( INFO_LEVEL,( _L( "CWlanHwInitMain:neededLength %d" ),neededLength ) );
+ OstTrace1( TRACE_IMPORTANT, DUP6_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Receive() failed with %d", status.Int() );
+ OstTrace1( TRACE_IMPORTANT, DUP7_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:neededLength %d", neededLength );
+ User::Leave( status.Int() );
+ }
+
+ CleanupStack::PopAndDestroy( &iscapi );
+}