|
1 /* |
|
2 * Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of the License "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: The class for parsing the tuning data stored in PERM server |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 #include <stddef.h> |
|
20 #include <es_sock.h> |
|
21 #include "gendebug.h" |
|
22 #include "wlanhwinitpermparser.h" |
|
23 #include "bcmnvmem.h" |
|
24 #include "lmac_firmware.h" |
|
25 #include "plt_firmware.h" |
|
26 #include "OstTraceDefinitions.h" |
|
27 #ifdef OST_TRACE_COMPILER_IN_USE |
|
28 #include "wlanhwinitpermparserTraces.h" |
|
29 #endif |
|
30 |
|
31 |
|
32 // ============================ MEMBER FUNCTIONS =============================== |
|
33 |
|
34 CWlanHwInitPermParser::CWlanHwInitPermParser() : |
|
35 iTuningData(NULL), |
|
36 iNvsData(NULL) |
|
37 { |
|
38 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:CWlanHwInitPermParser()" ) ) ); |
|
39 OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_CWLANHWINITPERMPARSER, "CWlanHwInitPermParser:CWlanHwInitPermParser()" ); |
|
40 } |
|
41 |
|
42 |
|
43 void CWlanHwInitPermParser::ConstructL() |
|
44 { |
|
45 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:ConstructL()" ) ) ); |
|
46 OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_CONSTRUCTL, "CWlanHwInitPermParser:ConstructL()" ); |
|
47 iTuningData = HBufC8::NewL( (sizeof(WlanHalApi::SNvMem) - offsetof(WlanHalApi::SNvMem, PL_2G_hdb)) ); |
|
48 iNvsData = HBufC8::NewL( sizeof(WlanHalApi::SNvMem) ); |
|
49 } |
|
50 |
|
51 |
|
52 CWlanHwInitPermParser* CWlanHwInitPermParser::NewL() |
|
53 { |
|
54 OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_NEWL, "CWlanHwInitPermParser::NewL()" ); |
|
55 CWlanHwInitPermParser* self = new( ELeave ) CWlanHwInitPermParser; |
|
56 |
|
57 CleanupStack::PushL( self ); |
|
58 self->ConstructL(); |
|
59 CleanupStack::Pop( self ); |
|
60 |
|
61 return self; |
|
62 } |
|
63 |
|
64 |
|
65 CWlanHwInitPermParser::~CWlanHwInitPermParser() |
|
66 { |
|
67 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:~CWlanHwInitPermParser()" ) ) ); |
|
68 OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITPERMPARSER_CWLANHWINITPERMPARSER, "CWlanHwInitPermParser:~CWlanHwInitPermParser()" ); |
|
69 delete iTuningData; |
|
70 iTuningData = NULL; |
|
71 delete iNvsData; |
|
72 iNvsData = NULL; |
|
73 } |
|
74 |
|
75 void CWlanHwInitPermParser::CompareNvsBuffer() |
|
76 { |
|
77 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:CompareNvsBuffer()") ) ); |
|
78 OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_COMPARENVSBUFFER, "CWlanHwInitPermParser:CompareNvsBuffer()" ); |
|
79 TUint8* pNvsBuffer = (TUint8*)iNvsData->Ptr(); |
|
80 TUint8* normalFirmwareNvsBuffer = (TUint8*) (normal_firmware + KNvMemValueOffset32); |
|
81 TUint8* pltFirmwareNvsBuffer = (TUint8*) (plt_firmware + KNvMemValueOffset32); |
|
82 |
|
83 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:CompareNvsBuffer() sizeof(WlanHalApi::SNvMem): %d"), sizeof(WlanHalApi::SNvMem) ) ); |
|
84 OstTrace1( TRACE_NORMAL, DUP1_CWLANHWINITPERMPARSER_COMPARENVSBUFFER, "CWlanHwInitPermParser:CompareNvsBuffer() sizeof(WlanHalApi::SNvMem): %d", sizeof(WlanHalApi::SNvMem)); |
|
85 |
|
86 /* checking the changes that have been made */ |
|
87 for( TUint32 i = 0 ; i < sizeof(WlanHalApi::SNvMem) ; i++) |
|
88 { |
|
89 if(normalFirmwareNvsBuffer[i] != pNvsBuffer[i]) |
|
90 { |
|
91 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:Normal NVS changed[0x%04X]:orig 0x%02X, new 0x%02X"), i, normalFirmwareNvsBuffer[i], pNvsBuffer[i]) ); |
|
92 OstTraceExt3( TRACE_NORMAL, DUP2_CWLANHWINITPERMPARSER_COMPARENVSBUFFER, "CWlanHwInitPermParser:Normal NVS changed[0x%x]:orig 0x%x, new 0x%x", i, normalFirmwareNvsBuffer[i], pNvsBuffer[i] ); |
|
93 } |
|
94 } |
|
95 |
|
96 /* also for plt firmware */ |
|
97 for( TUint32 i = 0 ; i < sizeof(WlanHalApi::SNvMem) ; i++) |
|
98 { |
|
99 if(pltFirmwareNvsBuffer[i] != pNvsBuffer[i]) |
|
100 { |
|
101 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:PLT NVS changed[0x%04X]:orig 0x%02X, new 0x%02X"), i, pltFirmwareNvsBuffer[i], pNvsBuffer[i]) ); |
|
102 OstTraceExt3( TRACE_NORMAL, DUP3_CWLANHWINITPERMPARSER_COMPARENVSBUFFER, "CWlanHwInitPermParser:PLT NVS changed[0x%x]:orig 0x%x, new 0x%x", i, pltFirmwareNvsBuffer[i], pNvsBuffer[i] ); |
|
103 } |
|
104 } |
|
105 } |
|
106 |
|
107 // --------------------------------------------------------- |
|
108 // CWlanHwInitPermParser::GetNvsBuffer |
|
109 // --------------------------------------------------------- |
|
110 // |
|
111 TPtr8 CWlanHwInitPermParser::GetNvsBuffer() |
|
112 { |
|
113 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:GetNvsBuffer()" ) ) ); |
|
114 OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_GETNVSBUFFER, "CWlanHwInitPermParser:GetNvsBuffer()" ); |
|
115 return iNvsData->Des(); |
|
116 } |
|
117 |
|
118 // --------------------------------------------------------- |
|
119 // CWlanHwInitPermParser::GetTuningBuffer |
|
120 // --------------------------------------------------------- |
|
121 // |
|
122 TPtr8 CWlanHwInitPermParser::GetTuningBuffer() |
|
123 { |
|
124 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:GetTuningBuffer()" ) ) ); |
|
125 OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_GETTUNINGBUFFER, "CWlanHwInitPermParser:GetTuningBuffer()" ); |
|
126 return iTuningData->Des(); |
|
127 } |
|
128 |
|
129 |
|
130 // --------------------------------------------------------- |
|
131 // CWlanHwInitPermParser::UpdateNvsData |
|
132 // --------------------------------------------------------- |
|
133 // |
|
134 void CWlanHwInitPermParser::UpdateNvsData(nvsUpdateList updateList) |
|
135 { |
|
136 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:UpdateNvsData()" ) ) ); |
|
137 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:updateList 0x%X"), updateList ) ); |
|
138 OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_UPDATENVSDATA, "CWlanHwInitPermParser:UpdateNvsData()" ); |
|
139 OstTrace1( TRACE_NORMAL, DUP1_CWLANHWINITPERMPARSER_UPDATENVSDATA, "CWlanHwInitPermParser:updateList 0x%x", updateList ); |
|
140 |
|
141 WlanHalApi::SNvMem* pNvsStruct = (WlanHalApi::SNvMem*)iNvsData->Ptr(); |
|
142 |
|
143 if( (sizeof(WlanHalApi::SNvMem) - offsetof(WlanHalApi::SNvMem, PL_2G_hdb)) == iTuningData->Length() ) //only use if the tuning data is the same size as the structure... |
|
144 { |
|
145 if(updateList == UPDATE_ALL) |
|
146 { |
|
147 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:UpdateNvsData:UPDATE_ALL" ) ) ); |
|
148 OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINITPERMPARSER_UPDATENVSDATA, "CWlanHwInitPermParser:UpdateNvsData:UPDATE_ALL" ); |
|
149 //void * memcpy ( void * destination, const void * source, size_t num ); |
|
150 memcpy( (&pNvsStruct->PL_2G_hdb), iTuningData->Ptr(), iTuningData->Length() ); |
|
151 } |
|
152 } |
|
153 else |
|
154 { |
|
155 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:size mismatch data-%d, structure-%d"), iTuningData->Length(), sizeof(WlanHalApi::SNvMem)) ); |
|
156 OstTraceExt2( TRACE_NORMAL, DUP3_CWLANHWINITPERMPARSER_UPDATENVSDATA, "CWlanHwInitPermParser:size mismatch data-%d, structure-%d", iTuningData->Length(), sizeof(WlanHalApi::SNvMem) ); |
|
157 } |
|
158 |
|
159 if(updateList & UPDATE_MAC_ADDR) |
|
160 { |
|
161 //Update Mac address |
|
162 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:UPDATE_MAC_ADDR" ) ) ); |
|
163 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:Current Mac Addr - %02X:%02X:%02X:%02X:%02X:%02X"), pNvsStruct->whamac[0], pNvsStruct->whamac[1], pNvsStruct->whamac[2], pNvsStruct->whamac[3], pNvsStruct->whamac[4], pNvsStruct->whamac[5] ) ); |
|
164 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:Mac Addr to use - %02X:%02X:%02X:%02X:%02X:%02X"), iMacAddress.iMacAddress[0], iMacAddress.iMacAddress[1], iMacAddress.iMacAddress[2], iMacAddress.iMacAddress[3], iMacAddress.iMacAddress[4], iMacAddress.iMacAddress[5]) ); |
|
165 OstTrace0( TRACE_NORMAL, DUP4_CWLANHWINITPERMPARSER_UPDATENVSDATA, "CWlanHwInitPermParser:UPDATE_MAC_ADDR" ); |
|
166 TBuf<80> buf; |
|
167 buf.AppendFormat(_L("CWlanHwInitPermParser:Current Mac Addr - %02X:%02X:%02X:%02X:%02X:%02X"), pNvsStruct->whamac[0], pNvsStruct->whamac[1], pNvsStruct->whamac[2], pNvsStruct->whamac[3], pNvsStruct->whamac[4], pNvsStruct->whamac[5] ); |
|
168 TPtrC16 currentMacPtr((TUint16*)buf.Ptr(), buf.Size()); |
|
169 OstTraceExt1( TRACE_NORMAL, DUP5_CWLANHWINITPERMPARSER_UPDATENVSDATA, "%S", currentMacPtr ); |
|
170 buf.Zero(); |
|
171 buf.AppendFormat(_L("CWlanHwInitPermParser:Mac Addr to use - %02X:%02X:%02X:%02X:%02X:%02X"), iMacAddress.iMacAddress[0], iMacAddress.iMacAddress[1], iMacAddress.iMacAddress[2], iMacAddress.iMacAddress[3], iMacAddress.iMacAddress[4], iMacAddress.iMacAddress[5] ); |
|
172 TPtrC16 newMacPtr((TUint16*)buf.Ptr(), buf.Size()); |
|
173 OstTraceExt1( TRACE_NORMAL, DUP6_CWLANHWINITPERMPARSER_UPDATENVSDATA, "%S", newMacPtr ); |
|
174 |
|
175 /* Copy the MAC address */ |
|
176 for( TUint32 i = 0 ; i < KMacAddrLength ; i++) |
|
177 { |
|
178 pNvsStruct->whamac[i] = iMacAddress.iMacAddress[i]; |
|
179 } |
|
180 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:Final Mac Addr - %02X:%02X:%02X:%02X:%02X:%02X"), pNvsStruct->whamac[0], pNvsStruct->whamac[1], pNvsStruct->whamac[2], pNvsStruct->whamac[3], pNvsStruct->whamac[4], pNvsStruct->whamac[5] ) ); |
|
181 buf.Zero(); |
|
182 buf.AppendFormat(_L("CWlanHwInitPermParser:Final Mac Addr - %02X:%02X:%02X:%02X:%02X:%02X"), pNvsStruct->whamac[0], pNvsStruct->whamac[1], pNvsStruct->whamac[2], pNvsStruct->whamac[3], pNvsStruct->whamac[4], pNvsStruct->whamac[5] ); |
|
183 TPtrC16 finalMacPtr((TUint16*)buf.Ptr(), buf.Size()); |
|
184 OstTraceExt1( TRACE_NORMAL, DUP7_CWLANHWINITPERMPARSER_UPDATENVSDATA, "%S", finalMacPtr ); |
|
185 } |
|
186 |
|
187 CompareNvsBuffer(); |
|
188 } |
|
189 |
|
190 |
|
191 void CWlanHwInitPermParser::GenerateDefaultTuningData(void) |
|
192 { |
|
193 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:GenerateDefaultTuningData()" ) ) ); |
|
194 OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_GENERATEDEFAULTTUNINGDATA, "CWlanHwInitPermParser:GenerateDefaultTuningData()" ); |
|
195 |
|
196 //use nvs file to create default tuning data |
|
197 TPtr8 tuningPtr( GetTuningBuffer() ); |
|
198 WlanHalApi::SNvMem* pNvsStruct = (WlanHalApi::SNvMem*)iNvsData->Ptr(); |
|
199 |
|
200 tuningPtr.Copy(&pNvsStruct->PL_2G_hdb, (sizeof(WlanHalApi::SNvMem) - offsetof(WlanHalApi::SNvMem, PL_2G_hdb))); |
|
201 } |
|
202 |
|
203 void CWlanHwInitPermParser::SetMacAddress(const TMacAddr& pMacAddress) |
|
204 { |
|
205 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:SetMacAddress()" ) ) ); |
|
206 OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_SETMACADDRESS, "CWlanHwInitPermParser:SetMacAddress()" ); |
|
207 |
|
208 memcpy(iMacAddress.iMacAddress, pMacAddress.iMacAddress, KMacAddrLength); |
|
209 } |
|
210 |
|
211 // --------------------------------------------------------- |
|
212 // CWlanHwInitPermParser::GetTuningValues |
|
213 // --------------------------------------------------------- |
|
214 // |
|
215 TInt CWlanHwInitPermParser::GetTuningValues(TDes8& aData) |
|
216 { |
|
217 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:GetTuningValues()" ) ) ); |
|
218 OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_GETTUNINGVALUES, "CWlanHwInitPermParser:GetTuningValues()" ); |
|
219 |
|
220 aData.Copy(GetTuningBuffer()); |
|
221 |
|
222 return KErrNone; |
|
223 } |
|
224 |
|
225 |
|
226 // --------------------------------------------------------- |
|
227 // CWlanHwInitPermParser::SetTuningValues |
|
228 // --------------------------------------------------------- |
|
229 // |
|
230 TInt CWlanHwInitPermParser::SetTuningValues(TDesC8& aData, nvsUpdateList updateList) |
|
231 { |
|
232 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:SetTuningValues()" ) ) ); |
|
233 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:updateList 0x%X"), updateList ) ); |
|
234 OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_SETTUNINGVALUES, "CWlanHwInitPermParser:SetTuningValues()" ); |
|
235 OstTrace1( TRACE_NORMAL, DUP1_CWLANHWINITPERMPARSER_SETTUNINGVALUES, "CWlanHwInitPermParser:updateList 0x%x", updateList ); |
|
236 |
|
237 TPtr8 tuningPtr( GetTuningBuffer() ); |
|
238 TUint8* pStoredTuningData = (TUint8*)tuningPtr.Ptr(); |
|
239 |
|
240 if(updateList & UPDATE_ALL) |
|
241 { |
|
242 TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:UPDATE_ALL" ) ) ); |
|
243 OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINITPERMPARSER_SETTUNINGVALUES, "CWlanHwInitPermParser:UPDATE_ALL" ); |
|
244 //void * memcpy ( void * destination, const void * source, size_t num ); |
|
245 memcpy( pStoredTuningData, aData.Ptr(), (sizeof(WlanHalApi::SNvMem) - offsetof(WlanHalApi::SNvMem, PL_2G_hdb) ) ); |
|
246 } |
|
247 |
|
248 return KErrNone; |
|
249 } |