branch | RCL_3 |
changeset 257 | 3e88ff8f41d5 |
parent 256 | c1f20ce4abcf |
256:c1f20ce4abcf | 257:3e88ff8f41d5 |
---|---|
1 // Copyright (c) 2000-2010 Nokia Corporation and/or its subsidiary(-ies). |
1 // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies). |
2 // All rights reserved. |
2 // All rights reserved. |
3 // This component and the accompanying materials are made available |
3 // This component and the accompanying materials are made available |
4 // under the terms of the License "Eclipse Public License v1.0" |
4 // under the terms of the License "Eclipse Public License v1.0" |
5 // which accompanies this distribution, and is available |
5 // which accompanies this distribution, and is available |
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
19 |
19 |
20 /** |
20 /** |
21 @file d_usbcsc.cpp |
21 @file d_usbcsc.cpp |
22 @internalTechnology |
22 @internalTechnology |
23 */ |
23 */ |
24 |
|
24 #include <drivers/usbcsc.h> |
25 #include <drivers/usbcsc.h> |
25 #include "platform.h" |
26 #include "platform.h" |
26 #include "OstTraceDefinitions.h" |
|
27 #ifdef OST_TRACE_COMPILER_IN_USE |
|
28 #include "d_usbcscTraces.h" |
|
29 #endif |
|
30 |
|
31 |
27 |
32 /*****************************************************************************\ |
28 /*****************************************************************************\ |
33 * DUsbcScLogDevice * |
29 * DUsbcScLogDevice * |
34 * * |
30 * * |
35 * Inherits from DLogicalDevice, the USB Shared Chunk LDD factory class * |
31 * Inherits from DLogicalDevice, the USB Shared Chunk LDD factory class * |
69 TInt DUsbcScLogDevice::Install() |
65 TInt DUsbcScLogDevice::Install() |
70 { |
66 { |
71 // Only proceed if we have the Controller underneath us |
67 // Only proceed if we have the Controller underneath us |
72 if (!DUsbClientController::UsbcControllerPointer()) |
68 if (!DUsbClientController::UsbcControllerPointer()) |
73 { |
69 { |
74 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FATAL, DUSBCSCLOGDEVICE_INSTALL, "LDD Install: USB Controller Not Present" ); |
70 __KTRACE_OPT(KPANIC, Kern::Printf("LDD Install: USB Controller Not Present")); |
75 |
|
76 return KErrGeneral; |
71 return KErrGeneral; |
77 } |
72 } |
78 return SetName(&KUsbScLddName); |
73 return SetName(&KUsbScLddName); |
79 } |
74 } |
80 |
75 |
101 |
96 |
102 void DfcChunkCleanup(TAny*); |
97 void DfcChunkCleanup(TAny*); |
103 |
98 |
104 TUsbcScChunkInfo::TUsbcScChunkInfo(DLogicalDevice* aLdd) |
99 TUsbcScChunkInfo::TUsbcScChunkInfo(DLogicalDevice* aLdd) |
105 : iChunk(NULL), |
100 : iChunk(NULL), |
101 iCleanup((TDfcFn)&DfcChunkCleanup,this,Kern::SvMsgQue(),0), |
|
106 iChunkMem(NULL), |
102 iChunkMem(NULL), |
107 iLdd(aLdd) |
103 iLdd(aLdd) |
108 { |
104 { |
109 iPageNtz = (TInt8)__e32_find_ls1_32(Kern::RoundToPageSize(1)); |
105 iPageNtz = (TInt8)__e32_find_ls1_32(Kern::RoundToPageSize(1)); |
110 } |
106 } |
123 TChunkCreateInfo chunkInfo; |
119 TChunkCreateInfo chunkInfo; |
124 chunkInfo.iType = TChunkCreateInfo::ESharedKernelMultiple; |
120 chunkInfo.iType = TChunkCreateInfo::ESharedKernelMultiple; |
125 chunkInfo.iMaxSize = aTotalSize; |
121 chunkInfo.iMaxSize = aTotalSize; |
126 chunkInfo.iMapAttr = EMapAttrCachedMax; |
122 chunkInfo.iMapAttr = EMapAttrCachedMax; |
127 chunkInfo.iOwnsMemory = EFalse; |
123 chunkInfo.iOwnsMemory = EFalse; |
128 chunkInfo.iDestroyedDfc = NULL; |
124 chunkInfo.iDestroyedDfc = &iCleanup; |
129 |
125 |
130 TLinAddr chunkMem; |
126 TLinAddr chunkMem; |
131 r = Kern::ChunkCreate(chunkInfo, iChunk, chunkMem, iChunkMapAttr); |
127 r = Kern::ChunkCreate(chunkInfo, iChunk, chunkMem, iChunkMapAttr); |
132 iChunkMem = (TInt8*) chunkMem; |
128 iChunkMem = (TInt8*) chunkMem; |
133 if (r==KErrNone) |
129 if (r==KErrNone) |
140 |
136 |
141 // This method requests closing the chunk. |
137 // This method requests closing the chunk. |
142 // Note that nothing may happen immediately, as something else may have the chunk open. |
138 // Note that nothing may happen immediately, as something else may have the chunk open. |
143 void TUsbcScChunkInfo::Close() |
139 void TUsbcScChunkInfo::Close() |
144 { |
140 { |
145 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCCHUNKINFO_CLOSE, "TUsbcScChunkInfo::Close %d", iChunk->AccessCount()); |
141 Kern::ChunkClose(iChunk); |
146 if (Kern::ChunkClose(iChunk)) |
|
147 { |
|
148 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCCHUNKINFO_CLOSE_DUP1, "TUsbcScChunkInfo::Close1"); |
|
149 ChunkCleanup(); |
|
150 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCCHUNKINFO_CLOSE_DUP2, "TUsbcScChunkInfo::Close2"); |
|
151 } |
|
152 } |
142 } |
153 |
143 |
154 |
144 |
155 TInt TUsbcScChunkInfo::ChunkAlloc(TInt aOffset, TInt aSize) |
145 TInt TUsbcScChunkInfo::ChunkAlloc(TInt aOffset, TInt aSize) |
156 { |
146 { |
158 TUint rleMask = ~pageMask; |
148 TUint rleMask = ~pageMask; |
159 TUint pageSize = rleMask+1; |
149 TUint pageSize = rleMask+1; |
160 TInt r; |
150 TInt r; |
161 TLinAddr physAddr; |
151 TLinAddr physAddr; |
162 |
152 |
163 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCCHUNKINFO_CHUNKALLOC, "::chunkalloc AllocPhysicalRam aSize %d", aSize); |
153 __KTRACE_OPT(KUSB, Kern::Printf("::chunkalloc AllocPhysicalRam aSize %d", aSize)); |
164 |
154 |
165 r = Epoc::AllocPhysicalRam(aSize, physAddr); |
155 r = Epoc::AllocPhysicalRam(aSize, physAddr); |
166 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCCHUNKINFO_CHUNKALLOC_DUP1, "::chunkalloc AllocPhysicalRam r=%d (Error!)", r); |
156 __KTRACE_OPT(KUSB, if (r!=KErrNone) Kern::Printf("::chunkalloc AllocPhysicalRam r=%d (Error!)", r)); |
167 |
|
168 if (r==KErrNone) |
157 if (r==KErrNone) |
169 { |
158 { |
170 OstTraceDefExt5(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCCHUNKINFO_CHUNKALLOC_DUP2, "T::chunkalloc ChunkCommitPhysical iChunk 0x%x size(%d), aOffset 0x%x, aSize 0x%x phsAddr 0x%x", (TUint)iChunk, sizeof(DChunk), aOffset, aSize,(TUint)physAddr); |
159 __KTRACE_OPT(KUSB, Kern::Printf("::chunkalloc ChunkCommitPhysical iChunk 0x%x size(%d), aOffset 0x%x, aSize 0x%x phsAddr 0x%x", |
160 iChunk, sizeof(DChunk), aOffset, aSize,physAddr )); |
|
161 |
|
171 r = Kern::ChunkCommitPhysical(iChunk, aOffset, aSize, physAddr); |
162 r = Kern::ChunkCommitPhysical(iChunk, aOffset, aSize, physAddr); |
172 if (r!=KErrNone) |
163 __KTRACE_OPT(KUSB, if (r!=KErrNone) Kern::Printf("::chunkalloc ChunkCommitPhysical r=%d (Error!)", r)); |
173 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCCHUNKINFO_CHUNKALLOC_DUP3, "::chunkalloc ChunkCommitPhysical r=%d (Error!)", r); |
|
174 |
|
175 |
164 |
176 if (r!=KErrNone) |
165 if (r!=KErrNone) |
177 Epoc::FreePhysicalRam(physAddr, aSize); |
166 Epoc::FreePhysicalRam(physAddr, aSize); |
178 else |
167 else |
179 { // record physical address and length in physical map |
168 { // record physical address and length in physical map |
180 TInt rle; |
169 TInt rle; |
181 TInt i=0; |
170 TInt i=0; |
182 for (rle=(aSize>>iPageNtz); rle>0; rle--, i++,physAddr+=pageSize) |
171 for (rle=(aSize>>iPageNtz); rle>0; rle--, i++,physAddr+=pageSize) |
183 { |
172 { |
184 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCCHUNKINFO_CHUNKALLOC_DUP4, "::phys offset 0x%x = 0x%x", |
173 __KTRACE_OPT(KUSB, Kern::Printf("::phys offset 0x%x = 0x%x", |
185 (TInt32)((aOffset>>iPageNtz)+i), (TUint32)( (physAddr & pageMask) | ((rle>(TInt)rleMask)?(TInt)rleMask:rle))); |
174 (aOffset>>iPageNtz)+i, (physAddr & pageMask) | ((rle>(TInt)rleMask)?(TInt)rleMask:rle))); |
186 iPhysicalMap[(aOffset>>iPageNtz)+i] = (physAddr & pageMask) | ((rle>(TInt)rleMask)?(TInt)rleMask:rle); |
175 iPhysicalMap[(aOffset>>iPageNtz)+i] = (physAddr & pageMask) | ((rle>(TInt)rleMask)?(TInt)rleMask:rle); |
187 } |
176 } |
188 } |
177 } |
189 } |
178 } |
190 else if (r==KErrNoMemory) |
179 else if (r==KErrNoMemory) |
221 } |
210 } |
222 |
211 |
223 |
212 |
224 void TUsbcScChunkInfo::ChunkCleanup() |
213 void TUsbcScChunkInfo::ChunkCleanup() |
225 { |
214 { |
226 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, TUSBCSCCHUNKINFO_CHUNKCLEANUP, "TUsbcScChunkInfo::ChunkCleanup()" ); |
215 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScChunkInfo::ChunkCleanup()")); |
227 |
|
228 TUint physAddr; |
216 TUint physAddr; |
229 TInt length; |
217 TInt length; |
230 TInt offset = 0; |
218 TInt offset = 0; |
231 |
219 |
232 // The part of the field used for the physical page address. |
220 // The part of the field used for the physical page address. |
253 ldd->Close(NULL); |
241 ldd->Close(NULL); |
254 } |
242 } |
255 |
243 |
256 TInt TUsbcScChunkInfo::New(TUsbcScChunkInfo*& aChunk, TInt aSize, DLogicalDevice* aLdd) |
244 TInt TUsbcScChunkInfo::New(TUsbcScChunkInfo*& aChunk, TInt aSize, DLogicalDevice* aLdd) |
257 { |
245 { |
258 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCCHUNKINFO_NEW, "TUsbcScChunkInfo::New totalSize %d", aSize); |
246 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScChunkInfo::New totalSize %d", aSize)); |
259 |
247 |
260 aChunk = new TUsbcScChunkInfo(aLdd); |
248 aChunk = new TUsbcScChunkInfo(aLdd); |
261 if (aChunk==NULL) |
249 if (aChunk==NULL) |
262 { |
250 { |
263 return KErrNoMemory; |
251 return KErrNoMemory; |
264 } |
252 } |
269 delete aChunk; |
257 delete aChunk; |
270 aChunk=NULL; |
258 aChunk=NULL; |
271 return r; |
259 return r; |
272 } |
260 } |
273 |
261 |
274 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCCHUNKINFO_NEW_DUP1, "TUsbcScChunkInfo::New Created at 0x%x", aChunk->iChunkMem); |
262 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScChunkInfo::New Created at 0x%x", aChunk->iChunkMem )); |
275 |
|
276 return KErrNone; |
263 return KErrNone; |
277 } |
264 } |
278 |
265 |
279 // End TUsbcScChunkInfo |
266 // End TUsbcScChunkInfo |
280 |
267 |
347 if ((iDirection&1)==KUsbcScOut) |
334 if ((iDirection&1)==KUsbcScOut) |
348 { |
335 { |
349 iBufferStart->iHead= iHead; |
336 iBufferStart->iHead= iHead; |
350 iBufferStart->iTail= iHead; // Initially no data! |
337 iBufferStart->iTail= iHead; // Initially no data! |
351 iBufferStart->iBilTail=iHead; |
338 iBufferStart->iBilTail=iHead; |
352 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_CREATECHUNKBUFFERHEADER, "Realize: iHead 0x%x bufferHeader 0x%x", iHead,(TUint)iBufferStart); |
339 __KTRACE_OPT(KUSB, Kern::Printf("Realize: iHead 0x%x bufferHeader 0x%x", iHead,iBufferStart )); |
340 |
|
353 // Dont need to round here, as we will round it up on endpoint change. (configuration) |
341 // Dont need to round here, as we will round it up on endpoint change. (configuration) |
354 } |
342 } |
355 } |
343 } |
356 |
|
357 |
|
358 TBool TUsbcScBuffer::IsRequestPending() |
|
359 { |
|
360 return iStatusList.IsRequestPending(); |
|
361 } |
|
362 |
|
363 TBool TUsbcScStatusList::IsRequestPending() |
|
364 { |
|
365 return (iLength != 0); |
|
366 } |
|
367 |
|
368 |
|
369 |
344 |
370 /* |
345 /* |
371 TUsbcScBuffer::StartEndpoint |
346 TUsbcScBuffer::StartEndpoint |
372 |
347 |
373 This method sets the nessesary paramenters to the buffer, for use for a particular endpoint. |
348 This method sets the nessesary paramenters to the buffer, for use for a particular endpoint. |
374 |
349 |
375 */ |
350 */ |
376 void TUsbcScBuffer::StartEndpoint(TUsbcRequestCallback* aRequestInfo, TUint aFlags) |
351 void TUsbcScBuffer::StartEndpoint(TUsbcRequestCallback* aRequestInfo, TUint aFlags) |
377 { |
352 { |
378 OstTraceDefExt3(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_STARTENDPOINT, "TUsbcScBuffer::StartEndpoint (0x%x) : ep %d(%d)", (TUint)this,aRequestInfo->iEndpointNum, aRequestInfo->iRealEpNum); |
353 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::StartEndpoint (0x%x) : ep %d(%d)",this,aRequestInfo->iEndpointNum, aRequestInfo->iRealEpNum)); |
379 |
354 |
380 iCallback=aRequestInfo; |
355 iCallback=aRequestInfo; |
381 iMaxPacketSize = iLdd->iController->EndpointPacketSize(iLdd, aRequestInfo->iRealEpNum); |
356 iMaxPacketSize = iLdd->iController->EndpointPacketSize(iLdd, aRequestInfo->iRealEpNum); |
382 iAlignMask = ~(((iMaxPacketSize+1) & 0xFFFFFFF8)-1); |
357 iAlignMask = ~(((iMaxPacketSize+1) & 0xFFFFFFF8)-1); |
383 iMode = aFlags; |
358 iMode = aFlags; |
384 OstTraceDefExt3(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_STARTENDPOINT_DUP1, "TUsbcScBuffer::StartEndpoint : max Packets %d, mask 0x%x flags 0x%x", iMaxPacketSize, iAlignMask, (TUint)iMode); |
359 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::StartEndpoint : max Packets %d, mask 0x%x flags 0x%x", iMaxPacketSize, iAlignMask, iMode)); |
385 |
|
386 if ((iDirection&1)==KUsbcScOut) |
360 if ((iDirection&1)==KUsbcScOut) |
387 { |
361 { |
388 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_STARTENDPOINT_DUP2, "TUsbcScBuffer::UsbcScOut\n" ); |
362 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::UsbcScOut\n")); |
389 |
|
390 // Add dummy packet (doesnt have to be aligned, which avoids what if it changes issue) |
363 // Add dummy packet (doesnt have to be aligned, which avoids what if it changes issue) |
391 // And Start next read. |
364 // And Start next read. |
392 iNeedsPacket=KEpIsStarting; |
365 iNeedsPacket=KEpIsStarting; |
393 } |
366 } |
394 } |
367 } |
395 |
368 |
396 |
369 |
397 |
370 |
398 void TUsbcScBuffer::Destroy() |
371 void TUsbcScBuffer::Destroy() |
399 { |
372 { |
400 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, TUSBCSCBUFFER_DESTROY, "TUsbcScBuffer::Destroy()" ); |
373 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::Destroy()")); |
401 |
|
402 Cancel(KErrCancel); |
374 Cancel(KErrCancel); |
403 if (iLdd->iController && ((iDirection&1)==KUsbcScOut)) |
375 if (iLdd->iController && ((iDirection&1)==KUsbcScOut)) |
404 { // Me must cancel reads to LDD to, an there will be no list for the callbacks to look into. |
376 { // Me must cancel reads to LDD to, an there will be no list for the callbacks to look into. |
405 iLdd->iController->CancelReadBuffer(iLdd, iCallback->iRealEpNum); |
377 iLdd->iController->CancelReadBuffer(iLdd, iCallback->iRealEpNum); |
406 } |
378 } |
411 |
383 |
412 TInt TUsbcScBuffer::StartDataRead() |
384 TInt TUsbcScBuffer::StartDataRead() |
413 { |
385 { |
414 if (!iMaxPacketSize) |
386 if (!iMaxPacketSize) |
415 { |
387 { |
416 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_STARTDATAREAD, "TUsbcScBuffer::StartDataRead() - Not Configured" ); |
388 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::StartDataRead() - Not Configured")); |
417 |
|
418 return KErrNone; |
389 return KErrNone; |
419 } |
390 } |
420 if (iStatusList.iState!=ENotRunning) |
391 if (iStatusList.iState!=ENotRunning) |
421 { |
392 { |
422 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_STARTDATAREAD_DUP1, "TUsbcScBuffer::StartDataRead() - Already Stated! (%d)", iStatusList.iState ); |
393 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::StartDataRead() - Already Stated! (%d)",iStatusList.iState)); |
423 |
|
424 return KErrNone; |
394 return KErrNone; |
425 } |
395 } |
426 |
396 |
427 TInt maxLength; |
397 TInt maxLength; |
428 TInt freeSpace; |
398 TInt freeSpace; |
430 |
400 |
431 // get next request |
401 // get next request |
432 TUsbcScStatusElement* nextJob = iStatusList.Next(); |
402 TUsbcScStatusElement* nextJob = iStatusList.Next(); |
433 if (nextJob == NULL) |
403 if (nextJob == NULL) |
434 { |
404 { |
435 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_STARTDATAREAD_DUP2, "No more jobs"); |
405 __KTRACE_OPT(KUSB, Kern::Printf("No more jobs")); |
436 |
|
437 if (iMode && KUsbScCoupledRead) |
406 if (iMode && KUsbScCoupledRead) |
438 return KErrEof; |
407 return KErrEof; |
439 iStatusList.iState=EReadingAhead; |
408 iStatusList.iState=EReadingAhead; |
440 } |
409 } |
441 else |
410 else |
442 iStatusList.iState=EInProgress; |
411 iStatusList.iState=EInProgress; |
443 |
412 |
444 TInt tail = iBufferStart->iTail; |
413 TInt tail = iBufferStart->iTail; |
445 TInt headerSize = sizeof(TUsbcScTransferHeader)-4; // TransferHeader includes 4 bytes of data. |
414 TInt headerSize = sizeof(TUsbcScTransferHeader)-4; // TransferHeader includes 4 bytes of data. |
446 maxLength = iChunkInfo->GetPhysical(iHead + headerSize, &physAddr); //returns all the bytes available after iHead + headerSize) |
415 maxLength = iChunkInfo->GetPhysical(iHead + headerSize, &physAddr); //returns all the bytes available after iHead + headerSize) |
416 |
|
447 __ASSERT_DEBUG(maxLength>0,Kern::Fault("TUsbcScBuffer::StartDataRead(", __LINE__)); |
417 __ASSERT_DEBUG(maxLength>0,Kern::Fault("TUsbcScBuffer::StartDataRead(", __LINE__)); |
448 |
418 |
449 |
419 |
450 if (tail>iHead) // # # # H _ _ _ T # # # # |
420 if (tail>iHead) // # # # H _ _ _ T # # # # |
451 { |
421 { |
452 OstTraceDefExt3(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_STARTDATAREAD_DUP3, "TUsbcScBuffer::StartDataRead() - tail 0x%x>head 0x%x, maxlength 0x%x", (TUint)tail, iHead, maxLength); |
422 __KTRACE_OPT(KUSB,Kern::Printf("TUsbcScBuffer::StartDataRead() - tail 0x%x>head 0x%x, maxlength 0x%x", tail, iHead, maxLength)); |
453 |
423 |
454 freeSpace = (tail & iAlignMask) - (iHead +headerSize + (~iAlignMask+1) ); // Cant read right up to last buffer, or head/tail will cross. |
424 freeSpace = (tail & iAlignMask) - (iHead +headerSize + (~iAlignMask+1) ); // Cant read right up to last buffer, or head/tail will cross. |
455 |
425 |
456 if (freeSpace<iMinReadSize) |
426 if (freeSpace<iMinReadSize) |
457 { |
427 { |
458 iStatusList.iState=ENotRunning; |
428 iStatusList.iState=ENotRunning; |
459 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_STARTDATAREAD_DUP4, "TUsbcScBuffer::StartDataRead() - Stall!!"); |
429 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::StartDataRead() - Stall!!")); |
460 |
|
461 return KErrOverflow; // Read STALL !! !! !! |
430 return KErrOverflow; // Read STALL !! !! !! |
462 } |
431 } |
463 |
432 |
464 if (freeSpace<maxLength) |
433 if (freeSpace<maxLength) |
465 maxLength = freeSpace; |
434 maxLength = freeSpace; |
466 } |
435 } |
467 if (maxLength> iMaxReadSize) |
436 if (maxLength> iMaxReadSize) |
468 maxLength = iMaxReadSize; |
437 maxLength = iMaxReadSize; |
469 // else tail<iHead (or empty) _ _ _ T # # # H _ _ _ _ |
438 // else tail<iHead (or empty) _ _ _ T # # # H _ _ _ _ |
470 // We would not have set iHead here if too small. So must be ok. |
439 // We would not have set iHead here if too small. So must be ok. |
440 |
|
471 __ASSERT_DEBUG(maxLength>=iMinReadSize,Kern::Fault("TUsbcScBuffer::StartDataRead(", __LINE__)); |
441 __ASSERT_DEBUG(maxLength>=iMinReadSize,Kern::Fault("TUsbcScBuffer::StartDataRead(", __LINE__)); |
472 |
442 |
473 TUint8* data = ((TUsbcScTransferHeader *) (iHead + iChunkAddr))->iData.b; |
443 TUint8* data = ((TUsbcScTransferHeader *) (iHead + iChunkAddr))->iData.b; |
474 // set up callback stucture |
444 // set up callback stucture |
475 |
445 |
477 TInt r; |
447 TInt r; |
478 // Go!! |
448 // Go!! |
479 r = iLdd->iController->SetupReadBuffer(*iCallback); |
449 r = iLdd->iController->SetupReadBuffer(*iCallback); |
480 if (r!=KErrNone) |
450 if (r!=KErrNone) |
481 { |
451 { |
482 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_STARTDATAREAD_DUP5, "SetupReadBuffer Error: %d, RT %d",r, iStatusList.iState); |
452 __KTRACE_OPT(KUSB,Kern::Printf("SetupReadBuffer Error: %d, RT %d",r, iStatusList.iState)); |
483 iStatusList.Complete(r); |
453 iStatusList.Complete(r); |
484 } |
454 } |
485 // After this, TUsbcScEndpoint::RequestCallback is called in a DFC. |
455 // After this, TUsbcScEndpoint::RequestCallback is called in a DFC. |
486 // This in turn calls either TUsbcScBuffer::CompleteRead. |
456 // This in turn calls either TUsbcScBuffer::CompleteRead. |
487 return KErrNone; |
457 return KErrNone; |
488 } |
458 } |
489 |
459 |
490 |
460 |
491 void TUsbcScBuffer::CompleteRead(TBool aStartNextRead) |
461 void TUsbcScBuffer::CompleteRead(TBool aStartNextRead) |
492 { |
462 { |
493 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_COMPLETEREAD, "TUsbcScBuffer::CompleteRead buff=%x",this); |
463 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::CompleteRead buff=%x",this)); |
494 |
464 |
495 // The first packet always contains the total #of bytes |
465 // The first packet always contains the total #of bytes |
496 const TInt byteCount = iCallback->iPacketSize[0]; |
466 const TInt byteCount = iCallback->iPacketSize[0]; |
497 const TInt packetCount = iCallback->iRxPackets; |
467 const TInt packetCount = iCallback->iRxPackets; |
498 iCallback->iRxPackets=0; |
468 iCallback->iRxPackets=0; |
499 TUint flags = 0; |
469 TUint flags = 0; |
508 // This method "submits" the current transfer, and starts off the next read. |
478 // This method "submits" the current transfer, and starts off the next read. |
509 |
479 |
510 void TUsbcScBuffer::UpdateBufferList(TInt aByteCount,TUint aFlags, TBool aStartNextRead) |
480 void TUsbcScBuffer::UpdateBufferList(TInt aByteCount,TUint aFlags, TBool aStartNextRead) |
511 { |
481 { |
512 |
482 |
513 OstTraceDefExt3(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_UPDATEBUFFERLIST, "TUsbcScBuffer::UpdateBUfferLIst aByteCount %d, flags 0x%x iHead 0x%x", aByteCount, aFlags, (TUint)iHead); |
483 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::UpdateBUfferLIst aByteCount %d, flags 0x%x iHead 0x%x", aByteCount, aFlags, iHead)); |
514 |
484 |
515 TInt headerSize = sizeof(TUsbcScTransferHeader)-4; // TransferHeader includes 4 bytes of data. |
485 TInt headerSize = sizeof(TUsbcScTransferHeader)-4; // TransferHeader includes 4 bytes of data. |
516 TLinAddr dummy; |
486 TLinAddr dummy; |
517 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_UPDATEBUFFERLIST_DUP1, "iHead 0x%x headerSize 0x%x",iHead, headerSize); |
487 __KTRACE_OPT(KUSB, Kern::Printf("iHead 0x%x headerSize 0x%x",iHead, headerSize)); |
488 |
|
518 // Find iNext |
489 // Find iNext |
519 |
490 |
520 TInt next = iHead + headerSize + aByteCount; // next unused byte in buffer. |
491 TInt next = iHead + headerSize + aByteCount; // next unused byte in buffer. |
521 TInt maxLength; |
492 TInt maxLength; |
522 |
493 |
525 { |
496 { |
526 // round up. |
497 // round up. |
527 next = (next + headerSize + ~iAlignMask) & iAlignMask; |
498 next = (next + headerSize + ~iAlignMask) & iAlignMask; |
528 maxLength = iChunkInfo->GetPhysical(next, &dummy); |
499 maxLength = iChunkInfo->GetPhysical(next, &dummy); |
529 |
500 |
530 OstTraceDefExt4(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_UPDATEBUFFERLIST_DUP2, "TUsbcScBuffer::UpdateBUfferLIst next %x buffer end %x min-read: %x maxRun %x", next, iBufferEnd, (TUint)iMinReadSize, (TUint)maxLength); |
501 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::UpdateBUfferLIst next %x buffer end %x min-read: %x maxRun %x", next, iBufferEnd, iMinReadSize, maxLength)); |
531 |
|
532 // At the end of the buffer - wrap it if needbe. |
502 // At the end of the buffer - wrap it if needbe. |
533 if ((TUint)(next + iMinReadSize) > iBufferEnd) |
503 if ((TUint)(next + iMinReadSize) > iBufferEnd) |
534 { |
504 { |
535 next = iFirstPacket; |
505 next = iFirstPacket; |
536 continue; |
506 continue; |
537 } |
507 } |
538 // Not enough space, move onto next block. |
508 // Not enough space, move onto next block. |
539 if (maxLength<iMinReadSize) |
509 if (maxLength<iMinReadSize) |
540 { |
510 { |
541 next+=maxLength; |
511 next+=maxLength; |
542 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_UPDATEBUFFERLIST_DUP3, "TUsbcScBuffer::UpdateBUfferLIst Skip exhausted block. next %x max %d", next, maxLength); |
512 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::UpdateBUfferLIst Skip exhausted block. next %x max %d", next, maxLength)); |
543 |
|
544 continue; |
513 continue; |
545 } |
514 } |
546 } |
515 } |
547 while (EFalse); |
516 while (EFalse); |
548 |
517 |
549 OstTraceDefExt3(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_UPDATEBUFFERLIST_DUP4, "TUsbcScBuffer::UpdateBUfferLIst next (pre deduct): %x, Fill in header at head: 0x%x, BuffStart: 0x%x.", next, (TUint)iHead, (TUint)iBufferStart); |
518 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::UpdateBUfferLIst next (pre deduct): %x, Fill in header at head: 0x%x, BuffStart: 0x%x.", next, iHead, iBufferStart)); |
550 |
519 |
551 next -= headerSize; // Move next back from the data start position, to the header start. |
520 next -= headerSize; // Move next back from the data start position, to the header start. |
552 |
521 |
553 TUsbcScTransferHeader* header = (TUsbcScTransferHeader*) (iHead + iChunkAddr); |
522 TUsbcScTransferHeader* header = (TUsbcScTransferHeader*) (iHead + iChunkAddr); |
554 |
523 |
555 // Create Header |
524 // Create Header |
561 header->iBytes=aByteCount; |
530 header->iBytes=aByteCount; |
562 header->iNext=next; |
531 header->iNext=next; |
563 header->iAltSettingSeq=iLdd->iAsSeq; |
532 header->iAltSettingSeq=iLdd->iAsSeq; |
564 header->iAltSetting=iLdd->iAlternateSetting; |
533 header->iAltSetting=iLdd->iAlternateSetting; |
565 header->iFlags=aFlags; |
534 header->iFlags=aFlags; |
566 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_UPDATEBUFFERLIST_DUP5, "We set next to 0x%x", next); |
535 __KTRACE_OPT(KUSB, Kern::Printf("We set next to 0x%x", next)); |
567 |
536 |
568 iStatusList.iState=ENotRunning; |
537 iStatusList.iState=ENotRunning; |
569 if (next==iBufferStart->iTail) //or (othwise is as good as full) |
538 if (next==iBufferStart->iTail) //or (othwise is as good as full) |
570 { |
539 { |
571 iStalled=next; |
540 iStalled=next; |
572 } |
541 } |
573 else |
542 else |
574 { |
543 { |
575 |
544 |
576 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_UPDATEBUFFERLIST_DUP6, "TUsbcScBuffer::UpdateBUfferLIst StartRead?? "); |
545 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::UpdateBUfferLIst StartRead?? ")); |
577 TInt oldHead=iHead; |
546 TInt oldHead=iHead; |
578 iHead = next; |
547 iHead = next; |
579 |
548 |
580 if ((aStartNextRead) && (StartDataRead() == KErrOverflow)) |
549 if ((aStartNextRead) && (StartDataRead() == KErrOverflow)) |
581 { // Oh crumbs, set state as slalled. |
550 { // Oh crumbs, set state as slalled. |
593 } |
562 } |
594 } |
563 } |
595 else |
564 else |
596 { |
565 { |
597 iBufferStart->iHead = next; |
566 iBufferStart->iHead = next; |
598 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_UPDATEBUFFERLIST_DUP7, "TUsbcScBuffer::UpdateBUfferLIst Compleating\n"); |
567 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::UpdateBUfferLIst Compleating\n")); |
599 |
|
600 } |
568 } |
601 // Complete userside |
569 // Complete userside |
602 iStatusList.Complete(); |
570 iStatusList.Complete(); |
603 } |
571 } |
604 } |
572 } |
618 // Add alt setting change packet. |
586 // Add alt setting change packet. |
619 |
587 |
620 |
588 |
621 if (StartDataRead() == KErrOverflow) |
589 if (StartDataRead() == KErrOverflow) |
622 { |
590 { |
623 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_POPSTALL, "TUsbcScBuffer::PopStall Warning: Transfer was freed, but still no space!\n"); |
591 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::PopStall Warning: Transfer was freed, but still no space!\n")); |
624 |
|
625 } |
592 } |
626 |
593 |
627 iBufferStart->iHead = iHead; |
594 iBufferStart->iHead = iHead; |
628 } |
595 } |
629 |
596 |
630 |
597 |
631 |
598 |
632 void TUsbcScBuffer::StartDataWrite() |
599 void TUsbcScBuffer::StartDataWrite() |
633 { |
600 { |
634 |
601 |
635 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, TUSBCSCBUFFER_STARTDATAWRITE, "TUsbcScBuffer::StartDataWrite()"); |
602 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::StartDataWrite()")); |
636 |
|
637 TUsbcScStatusElement* nextJob = iStatusList.Next(); |
603 TUsbcScStatusElement* nextJob = iStatusList.Next(); |
638 TBool zlpReqd; |
604 TBool zlpReqd; |
639 TInt length; |
605 TInt length; |
640 TUint start; |
606 TUint start; |
641 TUint8* startAddr; |
607 TUint8* startAddr; |
642 TInt maxLength; |
608 TInt maxLength; |
643 TPhysAddr physAddr; |
609 TPhysAddr physAddr; |
644 TInt r; |
610 TInt r; |
645 if (!iMaxPacketSize) |
611 if (!iMaxPacketSize) |
646 { |
612 { |
647 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_STARTDATAWRITE_DUP1, "TUsbcScBuffer::StartDataWrite() - Not Configured"); |
613 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::StartDataWrite() - Not Configured")); |
648 return; |
614 return; |
649 } |
615 } |
650 |
616 |
651 if (nextJob == NULL) |
617 if (nextJob == NULL) |
652 { |
618 { |
653 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_STARTDATAWRITE_DUP2, "TUsbcScBuffer::StartDataWrite() - No more jobs d=%d", iDirection); |
619 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::StartDataWrite() - No more jobs d=%d", iDirection)); |
654 if (iDirection==KUsbcScBiIn) // assume this is EP0, if this is true. |
620 if (iDirection==KUsbcScBiIn) // assume this is EP0, if this is true. |
655 { |
621 { |
656 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_STARTDATAWRITE_DUP3, "TUsbcScBuffer::StartDataWrite() Queue Read on EP0."); |
622 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::StartDataWrite() Queue Read on EP0.")); |
657 // Start other read again. |
623 // Start other read again. |
658 iLdd->iBuffers[iLdd->iEP0OutBuff].StartDataRead(); |
624 iLdd->iBuffers[iLdd->iEP0OutBuff].StartDataRead(); |
659 } |
625 } |
660 } |
626 } |
661 else |
627 else |
692 iCallback->SetTxBufferInfo(startAddr, physAddr, length); |
658 iCallback->SetTxBufferInfo(startAddr, physAddr, length); |
693 iCallback->iZlpReqd = zlpReqd; |
659 iCallback->iZlpReqd = zlpReqd; |
694 r = iLdd->iController->SetupWriteBuffer(*iCallback); |
660 r = iLdd->iController->SetupWriteBuffer(*iCallback); |
695 if (r!=KErrNone) |
661 if (r!=KErrNone) |
696 { |
662 { |
697 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_STARTDATAWRITE_DUP4, "SetupWriteBUffer Error: %d",r); |
663 __KTRACE_OPT(KUSB, Kern::Printf("SetupWriteBUffer Error: %d",r)); |
698 |
|
699 iStatusList.Complete(r); |
664 iStatusList.Complete(r); |
700 } |
665 } |
701 } |
666 } |
702 |
667 |
703 } |
668 } |
704 |
669 |
705 void TUsbcScBuffer::CompleteWrite() |
670 void TUsbcScBuffer::CompleteWrite() |
706 { |
671 { |
707 TInt error = iCallback->iError; |
672 TInt error = iCallback->iError; |
708 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_COMPLETEWRITE, "TUsbcScBuffer::CompleteWrite buff=%x, err=%d",(TUint)this, error); |
673 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::CompleteWrite buff=%x, err=%d",this, error)); |
709 iSent+= iCallback->iTxBytes; |
674 iSent+= iCallback->iTxBytes; |
710 |
675 |
711 // More to send? |
676 // More to send? |
712 if (error || iStatusList.iState!=EFramgementInProgress) |
677 if (error || iStatusList.iState!=EFramgementInProgress) |
713 { |
678 { |
753 } |
718 } |
754 } |
719 } |
755 |
720 |
756 void TUsbcScBuffer::SendEp0StatusPacket(TInt aState) |
721 void TUsbcScBuffer::SendEp0StatusPacket(TInt aState) |
757 { |
722 { |
758 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCBUFFER_SENDEP0STATUSPACKET, " TUsbcScBuffer::SendEp0StatusPacket(%d)", aState); |
723 __KTRACE_OPT(KUSB, Kern::Printf(" TUsbcScBuffer::SendEp0StatusPacket(%d)", aState)); |
759 |
724 |
760 // We need to add a packet to the buffer, so we must stop the pending read, and start |
725 // We need to add a packet to the buffer, so we must stop the pending read, and start |
761 // another after we have added out packet. |
726 // another after we have added out packet. |
762 Ep0CancelLddRead(); |
727 Ep0CancelLddRead(); |
763 |
728 |
764 TUint* state = ((TUsbcScTransferHeader *) (iHead + iChunkAddr))->iData.i; |
729 TUint* state = ((TUsbcScTransferHeader *) (iHead + iChunkAddr))->iData.i; |
823 return (iLength==0)?NULL:&(iElements[iHead]); |
788 return (iLength==0)?NULL:&(iElements[iHead]); |
824 } |
789 } |
825 |
790 |
826 TInt TUsbcScStatusList ::Add(TRequestStatus* aStatus, TInt aLength, TUint aStart, TUint aFlags) |
791 TInt TUsbcScStatusList ::Add(TRequestStatus* aStatus, TInt aLength, TUint aStart, TUint aFlags) |
827 { |
792 { |
828 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCSTATUSLIST_ADD, "Adding request. iLength %d iSize %d", iLength, iSize); |
793 __KTRACE_OPT(KUSB,Kern::Printf("Adding request. iLength %d iSize %d", iLength, iSize)); |
829 |
|
830 if (iLength<iSize) |
794 if (iLength<iSize) |
831 { |
795 { |
832 TUsbcScStatusElement& e = iElements[((iHead+iLength) & (iSize-1))]; |
796 TUsbcScStatusElement& e = iElements[((iHead+iLength) & (iSize-1))]; |
833 e.iStatus = aStatus; |
797 e.iStatus = aStatus; |
834 e.iLength = aLength; |
798 e.iLength = aLength; |
835 e.iStart = aStart; |
799 e.iStart = aStart; |
836 e.iFlags = aFlags; |
800 e.iFlags = aFlags; |
837 iLength++; |
801 iLength++; |
838 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCSTATUSLIST_ADD_DUP1, "Adding request. new iLength %d", iLength); |
802 __KTRACE_OPT(KUSB,Kern::Printf("Adding request. new iLength %d", iLength)); |
839 |
803 |
840 return KErrNone; |
804 return KErrNone; |
841 } |
805 } |
842 else |
806 else |
843 return KErrInUse; |
807 return KErrInUse; |
844 } |
808 } |
881 |
845 |
882 TInt TUsbcScStatusList::Complete(TInt aError) |
846 TInt TUsbcScStatusList::Complete(TInt aError) |
883 { |
847 { |
884 if (iState==ENotRunning) |
848 if (iState==ENotRunning) |
885 { |
849 { |
886 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCSTATUSLIST_COMPLETE_TINT, "TUsbcScStatusList::Complete() - iState == ENotRunning!" ); |
850 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScStatusList::Complete() - iState == ENotRunning!")); |
887 |
|
888 } |
851 } |
889 else |
852 else |
890 { |
853 { |
891 iState=ENotRunning; |
854 iState=ENotRunning; |
892 if (iLength==0) |
855 if (iLength==0) |
908 |
871 |
909 void TUsbcScStatusList::Complete() |
872 void TUsbcScStatusList::Complete() |
910 { |
873 { |
911 if (iLength==0) |
874 if (iLength==0) |
912 return; |
875 return; |
913 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCSTATUSLIST_COMPLETE, "Completing request. iLength %d", iLength); |
876 __KTRACE_OPT(KUSB, Kern::Printf("Completing request. iLength %d", iLength)); |
914 |
877 |
915 Kern::RequestComplete(iClient, iElements[iHead].iStatus, KErrNone); |
878 Kern::RequestComplete(iClient, iElements[iHead].iStatus, KErrNone); |
916 |
879 |
917 iLength--; |
880 iLength--; |
918 iHead = ((iHead+1) & (iSize-1)); |
881 iHead = ((iHead+1) & (iSize-1)); |
919 } |
|
920 void TUsbcScStatusList::SetClient(DThread& aThread) |
|
921 { |
|
922 iClient = &aThread; |
|
923 } |
882 } |
924 |
883 |
925 // End TUsbcScStatusList |
884 // End TUsbcScStatusList |
926 |
885 |
927 /*****************************************************************************\ |
886 /*****************************************************************************\ |
946 iAlternateSettingList = aAlternateSettingList; |
905 iAlternateSettingList = aAlternateSettingList; |
947 iMaxEndpoints=0; |
906 iMaxEndpoints=0; |
948 iTotalSize =0; |
907 iTotalSize =0; |
949 iTotalBuffers=0; |
908 iTotalBuffers=0; |
950 iAltSettings =0; |
909 iAltSettings =0; |
951 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_INIT, "Realize: work out max endpoint" ); |
910 __KTRACE_OPT(KUSB, Kern::Printf("Realize: work out max endpoint")); |
952 |
|
953 // Work out max endpoints and number of alternate settings. |
911 // Work out max endpoints and number of alternate settings. |
954 |
912 |
955 if (iAlternateSettingList) |
913 if (iAlternateSettingList) |
956 { |
914 { |
957 TUsbcScAlternateSetting* alt = iAlternateSettingList->iHead; |
915 TUsbcScAlternateSetting* alt = iAlternateSettingList->iHead; |
964 alt = alt->iNext; |
922 alt = alt->iNext; |
965 }; |
923 }; |
966 } |
924 } |
967 |
925 |
968 // Alloc some temporary working space for temp endpoint metadata |
926 // Alloc some temporary working space for temp endpoint metadata |
969 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_INIT_DUP1, "Realize: Alloc temp. Maxendpoints %d", iMaxEndpoints); |
927 __KTRACE_OPT(KUSB, Kern::Printf("Realize: Alloc temp. Maxendpoints %d", iMaxEndpoints)); |
970 |
|
971 TInt inout; |
928 TInt inout; |
972 for (inout=KUsbcScIn; inout<KUsbcScDirections; inout++) |
929 for (inout=KUsbcScIn; inout<KUsbcScDirections; inout++) |
973 { |
930 { |
974 iBufs[inout].iEp = (TUsbcScEndpoint **) Kern::AllocZ(iAltSettings*iMaxEndpoints*sizeof(TUsbcScEndpoint *)); |
931 iBufs[inout].iEp = (TUsbcScEndpoint **) Kern::AllocZ(iAltSettings*iMaxEndpoints*sizeof(TUsbcScEndpoint *)); |
975 iBufs[inout].iSizes = (TInt *) Kern::AllocZ(iMaxEndpoints*sizeof(TInt)); |
932 iBufs[inout].iSizes = (TInt *) Kern::AllocZ(iMaxEndpoints*sizeof(TInt)); |
987 // Return KErrArgument if the direction field is neither In or Out. |
944 // Return KErrArgument if the direction field is neither In or Out. |
988 // |
945 // |
989 |
946 |
990 TInt TRealizeInfo::CopyAndSortEndpoints() |
947 TInt TRealizeInfo::CopyAndSortEndpoints() |
991 { |
948 { |
992 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, TREALIZEINFO_COPYANDSORTENDPOINTS, "Realize: copy And sort"); |
949 __KTRACE_OPT(KUSB, Kern::Printf("Realize: copy And sort")); |
993 |
950 |
994 TInt altSetting = 0; |
951 TInt altSetting = 0; |
995 TInt endpointOffs; |
952 TInt endpointOffs; |
996 TInt endpoint; |
953 TInt endpoint; |
997 TInt altEp; |
954 TInt altEp; |
1002 |
959 |
1003 if (iAlternateSettingList) |
960 if (iAlternateSettingList) |
1004 { |
961 { |
1005 for (alt = iAlternateSettingList->iHead;alt!=NULL;alt = alt->iNext ) |
962 for (alt = iAlternateSettingList->iHead;alt!=NULL;alt = alt->iNext ) |
1006 { |
963 { |
1007 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_COPYANDSORTENDPOINTS_DUP1, "Realize: AlternateSetting %x", alt); |
964 __KTRACE_OPT(KUSB, Kern::Printf("Realize: AlternateSetting %x", alt)); |
1008 |
965 |
1009 iBufs[KUsbcScIn].iEps =0; |
966 iBufs[KUsbcScIn].iEps =0; |
1010 iBufs[KUsbcScOut].iEps =0; |
967 iBufs[KUsbcScOut].iEps =0; |
1011 |
968 |
1012 // For alt setting, iterate eps |
969 // For alt setting, iterate eps |
1013 for (altEp=1; altEp <= alt->iNumberOfEndpoints; altEp++) |
970 for (altEp=1; altEp <= alt->iNumberOfEndpoints; altEp++) |
1014 { |
971 { |
1015 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_COPYANDSORTENDPOINTS_DUP2, "Realize: Endpoint to add: %d", altEp); |
972 __KTRACE_OPT(KUSB, Kern::Printf("Realize: Endpoint to add: %d",altEp)); |
973 |
|
1016 TUsbcScEndpoint* nextEp = alt->iEndpoint[altEp]; |
974 TUsbcScEndpoint* nextEp = alt->iEndpoint[altEp]; |
1017 |
975 |
1018 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_COPYANDSORTENDPOINTS_DUP3, "Realize: ep Buffer Size: %d",nextEp->EndpointInfo()->iBufferSize); |
976 __KTRACE_OPT(KUSB, Kern::Printf("Realize: ep Buffer Size: %d",nextEp->EndpointInfo()->iBufferSize)); |
1019 |
977 |
1020 inout = (nextEp->EndpointInfo()->iDir==KUsbEpDirIn)?KUsbcScIn: |
978 inout = (nextEp->EndpointInfo()->iDir==KUsbEpDirIn)?KUsbcScIn: |
1021 (nextEp->EndpointInfo()->iDir==KUsbEpDirOut)?KUsbcScOut:KUsbcScUnknown; |
979 (nextEp->EndpointInfo()->iDir==KUsbEpDirOut)?KUsbcScOut:KUsbcScUnknown; |
1022 if (inout==KUsbcScUnknown) |
980 if (inout==KUsbcScUnknown) |
1023 { |
981 { |
1024 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_COPYANDSORTENDPOINTS_DUP4, "Realize: KUsbcScUnknown %x",nextEp->EndpointInfo()->iDir); |
982 __KTRACE_OPT(KUSB, Kern::Printf("Realize: KUsbcScUnknown %x",nextEp->EndpointInfo()->iDir)); |
1025 |
|
1026 return KErrArgument; |
983 return KErrArgument; |
1027 } |
984 } |
1028 |
985 |
1029 bufsd = &(iBufs[inout]); |
986 bufsd = &(iBufs[inout]); |
1030 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_COPYANDSORTENDPOINTS_DUP5, "Realize: ep direction: %x # endpoints %d", inout, bufsd->iEps); |
987 __KTRACE_OPT(KUSB, Kern::Printf("Realize: ep direction: %x # endpoints %d", inout, bufsd->iEps)); |
988 |
|
1031 |
989 |
1032 // find and position ep, and insert. |
990 // find and position ep, and insert. |
1033 |
991 |
1034 if (bufsd->iEps==0) // First entry. |
992 if (bufsd->iEps==0) // First entry. |
1035 { |
993 { |
1036 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_COPYANDSORTENDPOINTS_DUP6, "Realize: Add first endpoint"); |
994 __KTRACE_OPT(KUSB, Kern::Printf("Realize: Add first endpoint")); |
1037 |
|
1038 endpointOffs = altSetting*iMaxEndpoints; |
995 endpointOffs = altSetting*iMaxEndpoints; |
1039 bufsd->iEp[endpointOffs] = nextEp; |
996 bufsd->iEp[endpointOffs] = nextEp; |
1040 } |
997 } |
1041 else |
998 else |
1042 { |
999 { |
1045 for (endpoint=bufsd->iEps-1; endpoint>-1; endpoint--) |
1002 for (endpoint=bufsd->iEps-1; endpoint>-1; endpoint--) |
1046 { |
1003 { |
1047 endpointOffs = altSetting*iMaxEndpoints + endpoint; |
1004 endpointOffs = altSetting*iMaxEndpoints + endpoint; |
1048 if (bufsd->iEp[endpointOffs]->EndpointInfo()->iBufferSize < nextEp->EndpointInfo()->iBufferSize) |
1005 if (bufsd->iEp[endpointOffs]->EndpointInfo()->iBufferSize < nextEp->EndpointInfo()->iBufferSize) |
1049 { |
1006 { |
1050 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_COPYANDSORTENDPOINTS_DUP7, "Realize: Shift Endpoint %d", endpoint); |
1007 __KTRACE_OPT(KUSB, Kern::Printf("Realize: Shift Endpoint %d", endpoint)); |
1008 |
|
1051 bufsd->iEp[endpointOffs+1] = bufsd->iEp[endpointOffs]; |
1009 bufsd->iEp[endpointOffs+1] = bufsd->iEp[endpointOffs]; |
1052 } |
1010 } |
1053 else |
1011 else |
1054 { |
1012 { |
1055 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_COPYANDSORTENDPOINTS_DUP8, "Realize: Insert After Endpoint %d", endpoint); |
1013 __KTRACE_OPT(KUSB, Kern::Printf("Realize: Insert After Endpoint %d", endpoint)); |
1014 |
|
1056 bufsd->iEp[endpointOffs+1] = nextEp; |
1015 bufsd->iEp[endpointOffs+1] = nextEp; |
1057 placed = ETrue; |
1016 placed = ETrue; |
1058 break; |
1017 break; |
1059 } |
1018 } |
1060 } // end for endpoint |
1019 } // end for endpoint |
1076 // Realize_CopyAndSortEndpoints is used to fill the structure with the informaition |
1035 // Realize_CopyAndSortEndpoints is used to fill the structure with the informaition |
1077 // required. |
1036 // required. |
1078 |
1037 |
1079 void TRealizeInfo::CalcBuffSizes() |
1038 void TRealizeInfo::CalcBuffSizes() |
1080 { |
1039 { |
1081 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, TREALIZEINFO_CALCBUFFSIZES, "Realize: Calculate Buffers" ); |
1040 __KTRACE_OPT(KUSB, Kern::Printf("Realize: Calculate Buffers")); |
1082 |
1041 |
1083 TInt endpoint; |
1042 TInt endpoint; |
1084 TInt inout; |
1043 TInt inout; |
1085 TInt altSetting; |
1044 TInt altSetting; |
1086 TUsbcScEndpoint* nextEp; |
1045 TUsbcScEndpoint* nextEp; |
1087 TInt bufferSize; |
1046 TInt bufferSize; |
1088 TEndpointSortBufs* bufsd; |
1047 TEndpointSortBufs* bufsd; |
1089 |
1048 |
1090 for (inout=KUsbcScIn; inout<KUsbcScDirections; inout++) |
1049 for (inout=KUsbcScIn; inout<KUsbcScDirections; inout++) |
1091 { |
1050 { |
1092 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_CALCBUFFSIZES_DUP1, "Realize: Direction: %d", inout); |
1051 __KTRACE_OPT(KUSB, Kern::Printf("Realize: Direction: %d", inout)); |
1052 |
|
1093 |
1053 |
1094 bufsd = &(iBufs[inout]); |
1054 bufsd = &(iBufs[inout]); |
1095 // for each row, ie, buffer, find largest buffer need. |
1055 // for each row, ie, buffer, find largest buffer need. |
1096 for (endpoint=0; endpoint<iMaxEndpoints; endpoint++) |
1056 for (endpoint=0; endpoint<iMaxEndpoints; endpoint++) |
1097 { |
1057 { |
1098 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_CALCBUFFSIZES_DUP2, "Realize: endpoint %d", endpoint); |
1058 __KTRACE_OPT(KUSB, Kern::Printf("Realize: endpoint %d", endpoint)); |
1099 TInt bufMaxSize=0; |
1059 TInt bufMaxSize=0; |
1100 for (altSetting=0; altSetting< iAltSettings; altSetting++) |
1060 for (altSetting=0; altSetting< iAltSettings; altSetting++) |
1101 { |
1061 { |
1102 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_CALCBUFFSIZES_DUP3, "Realize: altSetting %d", altSetting); |
1062 __KTRACE_OPT(KUSB, Kern::Printf("Realize: altSetting %d", altSetting)); |
1103 nextEp= bufsd->iEp[altSetting* iMaxEndpoints + endpoint]; |
1063 nextEp= bufsd->iEp[altSetting* iMaxEndpoints + endpoint]; |
1104 if (nextEp!=NULL) |
1064 if (nextEp!=NULL) |
1105 { |
1065 { |
1106 bufferSize = nextEp->EndpointInfo()->iBufferSize; |
1066 bufferSize = nextEp->EndpointInfo()->iBufferSize; |
1107 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_CALCBUFFSIZES_DUP4, "Realize: comparing size %d", bufferSize); |
1067 __KTRACE_OPT(KUSB, Kern::Printf("Realize: comparing size %d", bufferSize)); |
1108 if (bufferSize> bufMaxSize) |
1068 if (bufferSize> bufMaxSize) |
1109 bufMaxSize = bufferSize; |
1069 bufMaxSize = bufferSize; |
1110 } |
1070 } |
1111 } // for altsetting |
1071 } // for altsetting |
1112 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_CALCBUFFSIZES_DUP5, "Realize: bufMaxSize %d", bufMaxSize); |
1072 __KTRACE_OPT(KUSB, Kern::Printf("Realize: bufMaxSize %d", bufMaxSize)); |
1113 bufsd->iSizes[endpoint] = bufMaxSize; |
1073 bufsd->iSizes[endpoint] = bufMaxSize; |
1114 if (bufMaxSize>0) |
1074 if (bufMaxSize>0) |
1115 { |
1075 { |
1116 iTotalSize += bufsd->iSizes[endpoint]; |
1076 iTotalSize += bufsd->iSizes[endpoint]; |
1117 iTotalBuffers++; |
1077 iTotalBuffers++; |
1160 iAltSettingsTbl->iEpRecordSize = sizeof(TUint); |
1120 iAltSettingsTbl->iEpRecordSize = sizeof(TUint); |
1161 iAltSettingsTbl->iNumOfAltSettings = iAltSettings; |
1121 iAltSettingsTbl->iNumOfAltSettings = iAltSettings; |
1162 |
1122 |
1163 |
1123 |
1164 TInt tableOffset = (TUint) iAltSettingsTbl->iAltTableOffset - (TUint) aChunkInfo->iChunkMem + iAltSettings*sizeof(TInt); |
1124 TInt tableOffset = (TUint) iAltSettingsTbl->iAltTableOffset - (TUint) aChunkInfo->iChunkMem + iAltSettings*sizeof(TInt); |
1165 OstTraceDefExt4(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_LAYOUTCHUNKHEADER, "Realize: table offset: 0x%x, altTble %x iChnkMem %x altSettings %x",tableOffset, (TUint)iAltSettingsTbl, (TUint)aChunkInfo->iChunkMem, iAltSettings); |
1125 __KTRACE_OPT(KUSB, Kern::Printf("Realize: table offset: 0x%x, altTble %x iChnkMem %x altSettings %x",tableOffset, iAltSettingsTbl, aChunkInfo->iChunkMem, iAltSettings )); |
1166 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_LAYOUTCHUNKHEADER_DUP1, "Realize: populate chunk - create alt settings table"); |
1126 |
1127 __KTRACE_OPT(KUSB, Kern::Printf("Realize: populate chunk - create alt settings table")); |
|
1128 |
|
1167 // Create alt settings table. Set each element of altsettings table, to each induivatual alt setting table. |
1129 // Create alt settings table. Set each element of altsettings table, to each induivatual alt setting table. |
1168 // then fill in the number of endpoints for that alt setting, in the table. |
1130 // then fill in the number of endpoints for that alt setting, in the table. |
1169 |
1131 |
1170 TInt* noEpForAlt; |
1132 TInt* noEpForAlt; |
1171 TInt altSetting; |
1133 TInt altSetting; |
1173 if (iAlternateSettingList) |
1135 if (iAlternateSettingList) |
1174 { |
1136 { |
1175 alt = iAlternateSettingList->iHead; |
1137 alt = iAlternateSettingList->iHead; |
1176 for (altSetting=0; altSetting<iAltSettings; altSetting++) |
1138 for (altSetting=0; altSetting<iAltSettings; altSetting++) |
1177 { |
1139 { |
1178 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TREALIZEINFO_LAYOUTCHUNKHEADER_DUP2, "Realize: altSetting %d, tableOffset %d", altSetting, tableOffset); |
1140 __KTRACE_OPT(KUSB, Kern::Printf("Realize: altSetting %d, tableOffset %d", altSetting, tableOffset)); |
1141 |
|
1179 iAltSettingsTbl->iAltTableOffset[altSetting] = tableOffset; |
1142 iAltSettingsTbl->iAltTableOffset[altSetting] = tableOffset; |
1180 noEpForAlt = (TInt*) &aChunkInfo->iChunkMem[tableOffset]; |
1143 noEpForAlt = (TInt*) &aChunkInfo->iChunkMem[tableOffset]; |
1181 |
1144 |
1182 *noEpForAlt = alt->iNumberOfEndpoints; // Set NumberofEndpoints field in Altsetting table |
1145 *noEpForAlt = alt->iNumberOfEndpoints; // Set NumberofEndpoints field in Altsetting table |
1183 tableOffset+= sizeof(TInt)+ alt->iNumberOfEndpoints*sizeof(TUsbcScHdrEndpointRecord); |
1146 tableOffset+= sizeof(TInt)+ alt->iNumberOfEndpoints*sizeof(TUsbcScHdrEndpointRecord); |
1224 iChunkInfo(NULL), |
1187 iChunkInfo(NULL), |
1225 iNumBuffers(-1), |
1188 iNumBuffers(-1), |
1226 iBuffers(NULL), |
1189 iBuffers(NULL), |
1227 iEp0Endpoint(NULL) |
1190 iEp0Endpoint(NULL) |
1228 { |
1191 { |
1229 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, DLDDUSBCSCCHANNEL_DLDDUSBCSCCHANNEL_CONS, "DLddUsbcScChannel::DLddUsbcScChannel()" ); |
1192 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcScChannel::DLddUsbcScChannel()")); |
1230 |
|
1231 iClient = &Kern::CurrentThread(); |
1193 iClient = &Kern::CurrentThread(); |
1232 iClient->Open(); |
1194 iClient->Open(); |
1233 for (TInt i = 1; i < KUsbcMaxRequests; i++) |
1195 for (TInt i = 1; i < KUsbcMaxRequests; i++) |
1234 { |
1196 { |
1235 iRequestStatus[i] = NULL; |
1197 iRequestStatus[i] = NULL; |
1241 // Destructor |
1203 // Destructor |
1242 // |
1204 // |
1243 |
1205 |
1244 DLddUsbcScChannel::~DLddUsbcScChannel() |
1206 DLddUsbcScChannel::~DLddUsbcScChannel() |
1245 { |
1207 { |
1246 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, DLDDUSBCSCCHANNEL_DLDDUSBCSCCHANNEL_DES, "DLddUsbcScChannel::~DLddUsbcScChannel()" ); |
1208 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcScChannel::~DLddUsbcScChannel()")); |
1247 if (iController) |
1209 if (iController) |
1248 { |
1210 { |
1249 iController->DeRegisterClient(this); |
1211 iController->DeRegisterClient(this); |
1250 iStatusCallbackInfo.Cancel(); |
1212 iStatusCallbackInfo.Cancel(); |
1251 iEndpointStatusCallbackInfo.Cancel(); |
1213 iEndpointStatusCallbackInfo.Cancel(); |
1262 if (iStatusFifo!=NULL) |
1224 if (iStatusFifo!=NULL) |
1263 { |
1225 { |
1264 delete iStatusFifo; |
1226 delete iStatusFifo; |
1265 } |
1227 } |
1266 } |
1228 } |
1267 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DLDDUSBCSCCHANNEL_DES_DUP1, "Closing buffers" ); |
1229 __KTRACE_OPT(KUSB, Kern::Printf("Closing buffers")); |
1268 if (iBuffers) |
1230 if (iBuffers) |
1269 { |
1231 { |
1270 TInt i; |
1232 TInt i; |
1271 for (i=0; i<(iNumBuffers+2); i++) |
1233 for (i=0; i<(iNumBuffers+2); i++) |
1272 { |
1234 { |
1276 } |
1238 } |
1277 |
1239 |
1278 if (iRealizeCalled) |
1240 if (iRealizeCalled) |
1279 { |
1241 { |
1280 // Close Chunk |
1242 // Close Chunk |
1281 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DLDDUSBCSCCHANNEL_DES_DUP2, "iChunkInfo->Close()" ); |
|
1282 iChunkInfo->Close(); |
1243 iChunkInfo->Close(); |
1283 // ChunkInfo will delete itself with DFC, but the pointer here is no longer needed. |
1244 // ChunkInfo will delete itself with DFC, but the pointer here is no longer needed. |
1284 iChunkInfo=NULL; |
1245 iChunkInfo=NULL; |
1285 } |
1246 } |
1286 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DLDDUSBCSCCHANNEL_DES_DUP3, "about to SafeClose" ); |
1247 __KTRACE_OPT(KUSB, Kern::Printf("about to SafeClose")); |
1287 Kern::SafeClose((DObject*&)iClient, NULL); |
1248 Kern::SafeClose((DObject*&)iClient, NULL); |
1288 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DLDDUSBCSCCHANNEL_DES_DUP4, "about to SafeClose1" ); |
|
1289 } |
1249 } |
1290 |
1250 |
1291 |
1251 |
1292 // |
1252 // |
1293 // DoCreate - Create channel |
1253 // DoCreate - Create channel |
1294 // |
1254 // |
1295 |
1255 |
1296 TInt DLddUsbcScChannel::DoCreate(TInt /*aUnit*/, const TDesC8* /*aInfo*/, const TVersion& aVer) |
1256 TInt DLddUsbcScChannel::DoCreate(TInt /*aUnit*/, const TDesC8* /*aInfo*/, const TVersion& aVer) |
1297 { |
1257 { |
1298 OstTraceDefExt3(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCREATE, "LDD DoCreateL 1 Ver = %02d %02d %02d", |
1258 __KTRACE_OPT(KUSB, Kern::Printf("LDD DoCreateL 1 Ver = %02d %02d %02d", |
1299 aVer.iMajor, aVer.iMinor, aVer.iBuild); |
1259 aVer.iMajor, aVer.iMinor, aVer.iBuild)); |
1300 |
|
1301 if (!Kern::CurrentThreadHasCapability(ECapabilityCommDD, |
1260 if (!Kern::CurrentThreadHasCapability(ECapabilityCommDD, |
1302 __PLATSEC_DIAGNOSTIC_STRING("Checked by USBCSC.LDD (USB Driver)"))) |
1261 __PLATSEC_DIAGNOSTIC_STRING("Checked by USBCSC.LDD (USB Driver)"))) |
1303 { |
1262 { |
1304 return KErrPermissionDenied; |
1263 return KErrPermissionDenied; |
1305 } |
1264 } |
1355 |
1314 |
1356 void DLddUsbcScChannel::HandleMsg(TMessageBase* aMsg) |
1315 void DLddUsbcScChannel::HandleMsg(TMessageBase* aMsg) |
1357 { |
1316 { |
1358 TThreadMessage& m = *(TThreadMessage*)aMsg; |
1317 TThreadMessage& m = *(TThreadMessage*)aMsg; |
1359 TInt id = m.iValue; |
1318 TInt id = m.iValue; |
1360 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_HANDLEMSG, "HandleMsg 0x%x", id); |
1319 __KTRACE_OPT(KUSB, Kern::Printf("HandleMsg 0x%x", id)); |
1361 |
1320 |
1362 if (id == (TInt) ECloseMsg) |
1321 if (id == (TInt) ECloseMsg) |
1363 { |
1322 { |
1364 iChannelClosing = ETrue; |
1323 iChannelClosing = ETrue; |
1365 m.Complete(KErrNone, EFalse); |
1324 m.Complete(KErrNone, EFalse); |
1366 return; |
1325 return; |
1367 } |
1326 } |
1368 |
1327 |
1369 TInt r; |
1328 TInt r; |
1370 if (aMsg->Client() != iClient) |
|
1371 { |
|
1372 m.Complete(KErrAccessDenied, ETrue); |
|
1373 return; |
|
1374 } |
|
1375 if (id < 0) |
1329 if (id < 0) |
1376 { |
1330 { |
1377 // DoRequest |
1331 // DoRequest |
1378 TRequestStatus* pS = (TRequestStatus*) m.Ptr0(); |
1332 TRequestStatus* pS = (TRequestStatus*) m.Ptr0(); |
1379 r = DoRequest(~id, pS, m.Ptr1(), m.Ptr2()); |
1333 r = DoRequest(~id, pS, m.Ptr1(), m.Ptr2()); |
1393 } |
1347 } |
1394 } |
1348 } |
1395 // end HandleMsg. |
1349 // end HandleMsg. |
1396 |
1350 |
1397 |
1351 |
1352 #define BREAK_IF_NULL_ARG(a,r) if (a==NULL) { r = KErrArgument; __KTRACE_OPT(KUSB,Kern::Printf("NULL Argument")); break; } |
|
1353 |
|
1398 // |
1354 // |
1399 // DoRequest - Asynchronous requests |
1355 // DoRequest - Asynchronous requests |
1400 // |
1356 // |
1401 // Overrides pure virtual, called by HandleMsg. (Above) |
1357 // Overrides pure virtual, called by HandleMsg. (Above) |
1402 // |
1358 // |
1404 { |
1360 { |
1405 TInt reqNo = aReqNo & RDevUsbcScClient::KFieldIdMask; |
1361 TInt reqNo = aReqNo & RDevUsbcScClient::KFieldIdMask; |
1406 TInt r = KErrNone; // return via request notify |
1362 TInt r = KErrNone; // return via request notify |
1407 TBool needsCompletion =EFalse; |
1363 TBool needsCompletion =EFalse; |
1408 |
1364 |
1409 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREQUEST, "DoRequest 0x%08x", aReqNo); |
1365 __KTRACE_OPT(KUSB, Kern::Printf("DoRequest 0x%08x", aReqNo)); |
1410 |
1366 |
1411 if ((reqNo>RDevUsbcScClient::ERequestReadDataNotify) && |
1367 if ((reqNo>RDevUsbcScClient::ERequestReadDataNotify) && |
1412 (reqNo<RDevUsbcScClient::ERequestMaxRequests)) |
1368 (reqNo<RDevUsbcScClient::ERequestMaxRequests)) |
1413 { |
1369 { |
1414 if (iRequestStatus[reqNo]) |
1370 if (iRequestStatus[reqNo]) |
1415 { |
1371 { |
1422 switch (reqNo) |
1378 switch (reqNo) |
1423 { |
1379 { |
1424 case RDevUsbcScClient::ERequestWriteData: |
1380 case RDevUsbcScClient::ERequestWriteData: |
1425 { |
1381 { |
1426 TInt buffer = (aReqNo>>RDevUsbcScClient::KFieldBuffPos)&RDevUsbcScClient::KFieldBuffMask; |
1382 TInt buffer = (aReqNo>>RDevUsbcScClient::KFieldBuffPos)&RDevUsbcScClient::KFieldBuffMask; |
1427 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREQUEST_DUP1, "ERequestWriteData"); |
1383 __KTRACE_OPT(KUSB, Kern::Printf("ERequestWriteData")); |
1428 if (a2 == NULL) |
1384 BREAK_IF_NULL_ARG(a2,r); |
1429 { |
|
1430 r = KErrArgument; |
|
1431 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREQUEST_DUP2, "NULL Argument"); |
|
1432 break; |
|
1433 } |
|
1434 |
1385 |
1435 r = DoWriteData( aStatus, buffer, (TInt) a1 /*Start*/, (TInt) a2 /* Length */, |
1386 r = DoWriteData( aStatus, buffer, (TInt) a1 /*Start*/, (TInt) a2 /* Length */, |
1436 aReqNo>>RDevUsbcScClient::KFieldFlagsPos ); // Flags |
1387 aReqNo>>RDevUsbcScClient::KFieldFlagsPos ); // Flags |
1437 break; |
1388 break; |
1438 } |
1389 } |
1439 case RDevUsbcScClient::ERequestReadDataNotify: |
1390 case RDevUsbcScClient::ERequestReadDataNotify: |
1440 { |
1391 { |
1441 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREQUEST_DUP3, "ERequestReadDataNotify"); |
1392 __KTRACE_OPT(KUSB, Kern::Printf("ERequestReadDataNotify")); |
1442 return DoReadDataNotify(aStatus, (TInt) a1, (TInt) a2); // a1 = aBufferNumber, a2 - aLength; |
1393 return DoReadDataNotify(aStatus, (TInt) a1, (TInt) a2); // a1 = aBufferNumber, a2 - aLength; |
1443 } |
1394 } |
1444 |
1395 |
1445 case RDevUsbcScClient::ERequestAlternateDeviceStatusNotify: |
1396 case RDevUsbcScClient::ERequestAlternateDeviceStatusNotify: |
1446 { |
1397 { |
1447 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREQUEST_DUP4, "ERequestAlternateDeviceStatusNotify"); |
1398 __KTRACE_OPT(KUSB, Kern::Printf("ERequestAlternateDeviceStatusNotify")); |
1448 if (a1 == NULL) |
1399 BREAK_IF_NULL_ARG(a1,r); |
1449 { |
|
1450 r = KErrArgument; |
|
1451 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREQUEST_DUP5, "NULL Argument"); |
|
1452 break; |
|
1453 } |
|
1454 iDeviceStatusNeeded = ETrue; |
1400 iDeviceStatusNeeded = ETrue; |
1455 iStatusChangePtr = a1; |
1401 iStatusChangePtr = a1; |
1456 needsCompletion = AlternateDeviceStateTestComplete(); |
1402 needsCompletion = AlternateDeviceStateTestComplete(); |
1457 break; |
1403 break; |
1458 } |
1404 } |
1459 case RDevUsbcScClient::ERequestReEnumerate: |
1405 case RDevUsbcScClient::ERequestReEnumerate: |
1460 { |
1406 { |
1461 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREQUEST_DUP6, "ERequestReEnumerate"); |
1407 __KTRACE_OPT(KUSB, Kern::Printf("ERequestReEnumerate")); |
1462 // If successful, this will complete via the status notification. |
1408 // If successful, this will complete via the status notification. |
1463 r = iController->ReEnumerate(); |
1409 r = iController->ReEnumerate(); |
1464 break; |
1410 break; |
1465 } |
1411 } |
1466 case RDevUsbcScClient::ERequestEndpointStatusNotify: |
1412 case RDevUsbcScClient::ERequestEndpointStatusNotify: |
1467 { |
1413 { |
1468 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREQUEST_DUP7, "ERequestEndpointStatusNotify"); |
1414 __KTRACE_OPT(KUSB, Kern::Printf("ERequestEndpointStatusNotify")); |
1469 if (a1 == NULL) |
1415 BREAK_IF_NULL_ARG(a1,r); |
1470 { |
1416 |
1471 r = KErrArgument; |
|
1472 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREQUEST_DUP8, "NULL Argument"); |
|
1473 break; |
|
1474 } |
|
1475 iEndpointStatusChangePtr = a1; |
1417 iEndpointStatusChangePtr = a1; |
1476 break; |
1418 break; |
1477 } |
1419 } |
1478 case RDevUsbcScClient::ERequestOtgFeaturesNotify: |
1420 case RDevUsbcScClient::ERequestOtgFeaturesNotify: |
1479 { |
1421 { |
1480 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREQUEST_DUP9, "ERequestOtgFeaturesNotify"); |
1422 __KTRACE_OPT(KUSB, Kern::Printf("ERequestOtgFeaturesNotify")); |
1481 if (a1 == NULL) |
1423 BREAK_IF_NULL_ARG(a1,r); |
1482 { |
1424 |
1483 r = KErrArgument; |
|
1484 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREQUEST_DUP10, "NULL Argument"); |
|
1485 break; |
|
1486 } |
|
1487 iOtgFeatureChangePtr = a1; |
1425 iOtgFeatureChangePtr = a1; |
1488 break; |
1426 break; |
1489 } |
1427 } |
1490 default: |
1428 default: |
1491 r = KErrNotSupported; |
1429 r = KErrNotSupported; |
1506 // |
1444 // |
1507 // This method sets up the request to facilitate the userside being notifed when new data has been read. |
1445 // This method sets up the request to facilitate the userside being notifed when new data has been read. |
1508 // |
1446 // |
1509 TInt DLddUsbcScChannel::DoReadDataNotify(TRequestStatus* aStatus, TInt aBufferNum, TInt aLength) |
1447 TInt DLddUsbcScChannel::DoReadDataNotify(TRequestStatus* aStatus, TInt aBufferNum, TInt aLength) |
1510 { |
1448 { |
1511 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREADDATANOTIFY, " DLddUsbcScChannel::DoReadDataNotify(x, %d, 0x%x)", aBufferNum, aLength); |
1449 __KTRACE_OPT(KUSB, Kern::Printf(" DLddUsbcScChannel::DoReadDataNotify(x, %d, 0x%x)", aBufferNum, aLength)); |
1512 |
|
1513 TInt r = KErrNone; |
1450 TInt r = KErrNone; |
1514 // check range |
1451 // check range |
1515 if ((aBufferNum<0) || (aBufferNum>=iNumBuffers)) // Indirectly checks that we are set up. |
1452 if ((aBufferNum<0) || (aBufferNum>=iNumBuffers)) // Indirectly checks that we are set up. |
1516 { |
1453 { |
1517 if (aBufferNum!=KUsbcScEndpointZero) |
1454 if (aBufferNum!=KUsbcScEndpointZero) |
1518 { |
1455 { |
1519 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREADDATANOTIFY_DUP1, " DLddUsbcScChannel::DoReadDataNotify : Bad Buffer Number!"); |
1456 __KTRACE_OPT(KUSB, Kern::Printf(" DLddUsbcScChannel::DoReadDataNotify : Bad Buffer Number!")); |
1520 |
|
1521 return KErrArgument; |
1457 return KErrArgument; |
1522 } |
1458 } |
1523 else |
1459 else |
1524 { |
1460 { |
1525 aBufferNum = iEP0OutBuff; |
1461 aBufferNum = iEP0OutBuff; |
1528 else |
1464 else |
1529 { |
1465 { |
1530 // check direction |
1466 // check direction |
1531 if (iBuffers[aBufferNum].iDirection!=KUsbcScOut) |
1467 if (iBuffers[aBufferNum].iDirection!=KUsbcScOut) |
1532 { |
1468 { |
1533 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREADDATANOTIFY_DUP2, " DLddUsbcScChannel::DoReadDataNotify : Bad Buffer Direction!"); |
1469 __KTRACE_OPT(KUSB, Kern::Printf(" DLddUsbcScChannel::DoReadDataNotify : Bad Buffer Direction!")); |
1534 return KErrNotSupported; |
1470 return KErrNotSupported; |
1535 } |
1471 } |
1536 if (!Configured()) |
1472 if (!Configured()) |
1537 return KErrUsbInterfaceNotReady; |
1473 return KErrUsbInterfaceNotReady; |
1538 } |
1474 } |
1539 SUsbcScBufferHeader* scBuffer = (SUsbcScBufferHeader*) iBuffers[aBufferNum].iBufferStart; |
1475 SUsbcScBufferHeader* scBuffer = (SUsbcScBufferHeader*) iBuffers[aBufferNum].iBufferStart; |
1540 |
1476 |
1541 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREADDATANOTIFY_DUP3, " DLddUsbcScChannel::DoReadDataNotify head %x tail %x", iBuffers[aBufferNum].iHead , scBuffer->iTail); |
1477 __KTRACE_OPT(KUSB, Kern::Printf(" DLddUsbcScChannel::DoReadDataNotify head %x tail %x", iBuffers[aBufferNum].iHead , scBuffer->iTail )); |
1478 |
|
1542 if (iBuffers[aBufferNum].iHead != scBuffer->iBilTail) |
1479 if (iBuffers[aBufferNum].iHead != scBuffer->iBilTail) |
1543 r = KErrCompletion; |
1480 r = KErrCompletion; |
1544 else |
1481 else |
1545 if (iBuffers[aBufferNum].iStalled) |
1482 if (iBuffers[aBufferNum].iStalled) |
1546 { |
1483 { |
1554 { |
1491 { |
1555 iBuffers[aBufferNum].StartDataRead(); |
1492 iBuffers[aBufferNum].StartDataRead(); |
1556 } |
1493 } |
1557 else |
1494 else |
1558 { |
1495 { |
1559 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREADDATANOTIFY_DUP4, "Job in Progress!"); |
1496 __KTRACE_OPT(KUSB, Kern::Printf("Job in Progress!")); |
1560 } |
1497 } |
1561 return r; |
1498 return r; |
1562 } |
1499 } |
1563 // end DoReadDataNotify. |
1500 // end DoReadDataNotify. |
1564 |
1501 |
1569 // |
1506 // |
1570 // This method sets up the request to write data to USB from userside. |
1507 // This method sets up the request to write data to USB from userside. |
1571 // |
1508 // |
1572 TInt DLddUsbcScChannel::DoWriteData(TRequestStatus* aStatus,TInt aBufferNum, TUint aStart, TUint aLength, TUint aFlags) |
1509 TInt DLddUsbcScChannel::DoWriteData(TRequestStatus* aStatus,TInt aBufferNum, TUint aStart, TUint aLength, TUint aFlags) |
1573 { |
1510 { |
1574 OstTraceDefExt4(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOWRITEDATA, " DLddUsbcScChannel::DoWriteData(%d, 0x%x, 0x%x, 0x%x)", aBufferNum, aStart, aLength, aFlags); |
1511 __KTRACE_OPT(KUSB, Kern::Printf(" DLddUsbcScChannel::DoWriteData(%d, 0x%x, 0x%x, 0x%x)", aBufferNum, aStart, aLength, aFlags)); |
1575 |
|
1576 if (!iUserKnowsAltSetting) |
1512 if (!iUserKnowsAltSetting) |
1577 return KErrEof; |
1513 return KErrEof; |
1578 // Check Buffer Number |
1514 // Check Buffer Number |
1579 if ((aBufferNum<0) || (aBufferNum>=iNumBuffers)) |
1515 if ((aBufferNum<0) || (aBufferNum>=iNumBuffers)) |
1580 { |
1516 { |
1581 if ((TUint)aBufferNum!=RDevUsbcScClient::KFieldBuffMask) // KUsbcScEndpointZero & KFieldBuffMas = KFieldBuffMas; |
1517 if ((TUint)aBufferNum!=RDevUsbcScClient::KFieldBuffMask) // KUsbcScEndpointZero & KFieldBuffMas = KFieldBuffMas; |
1582 { |
1518 { |
1583 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOWRITEDATA_DUP1, " DLddUsbcScChannel::DoWriteData : Bad Buffer Number!"); |
1519 __KTRACE_OPT(KUSB, Kern::Printf(" DLddUsbcScChannel::DoWriteData : Bad Buffer Number!")); |
1584 return KErrArgument; |
1520 return KErrArgument; |
1585 } |
1521 } |
1586 else |
1522 else |
1587 { |
1523 { |
1588 aBufferNum = iEP0InBuff; |
1524 aBufferNum = iEP0InBuff; |
1591 else |
1527 else |
1592 { |
1528 { |
1593 // check direction |
1529 // check direction |
1594 if (iBuffers[aBufferNum].iDirection!=KUsbcScIn) |
1530 if (iBuffers[aBufferNum].iDirection!=KUsbcScIn) |
1595 { |
1531 { |
1596 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOWRITEDATA_DUP2, " DLddUsbcScChannel::DoWriteData Bad endpoint Direction"); |
1532 __KTRACE_OPT(KUSB, Kern::Printf(" DLddUsbcScChannel::DoWriteData Bad endpoint Direction")); |
1597 return KErrArgument; |
1533 return KErrArgument; |
1598 } |
1534 } |
1599 } |
1535 } |
1600 |
1536 |
1601 TUsbcScBuffer& buf=iBuffers[aBufferNum]; |
1537 TUsbcScBuffer& buf=iBuffers[aBufferNum]; |
1602 |
1538 |
1603 if ((aStart< (((TLinAddr) buf.iBufferStart)-buf.iChunkAddr)) || ((aStart+aLength)>iBuffers[aBufferNum].iBufferEnd)) |
1539 if ((aStart< (((TLinAddr) buf.iBufferStart)-buf.iChunkAddr)) || ((aStart+aLength)>iBuffers[aBufferNum].iBufferEnd)) |
1604 { |
1540 { |
1605 OstTraceDefExt4(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOWRITEDATA_DUP3, "DLddUsbcScChannel::DoWriteData Bad Range aStart or aLength 0x%x > 0x%x + 0x%x < 0x%x", (TInt)(((TLinAddr) buf.iBufferStart)-buf.iChunkAddr),aStart, aLength, iBuffers[aBufferNum].iBufferEnd); |
1541 __KTRACE_OPT(KUSB, Kern::Printf(" DLddUsbcScChannel::DoWriteData Bad Range aStart or aLength 0x%x > 0x%x + 0x%x < 0x%x", (((TLinAddr) buf.iBufferStart)-buf.iChunkAddr),aStart, aLength, iBuffers[aBufferNum].iBufferEnd )); |
1606 return KErrArgument; |
1542 return KErrArgument; |
1607 } |
1543 } |
1608 |
1544 |
1609 if ( (aBufferNum != iEP0InBuff) && !Configured()) |
1545 if ( (aBufferNum != iEP0InBuff) && !Configured()) |
1610 return KErrUsbInterfaceNotReady; |
1546 return KErrUsbInterfaceNotReady; |
1611 |
1547 |
1612 if (aStart & ~buf.iAlignMask) |
1548 if (aStart & ~buf.iAlignMask) |
1613 { |
1549 { |
1614 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOWRITEDATA_DUP4, "TUsbcScBuffer::DoDataWrite: address 0x%x unaligned.",aStart); |
1550 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScBuffer::DoDataWrite: address 0x%x unaligned.",aStart)); |
1615 |
|
1616 return KErrArgument; |
1551 return KErrArgument; |
1617 } |
1552 } |
1618 |
1553 |
1619 TInt r = iBuffers[aBufferNum].iStatusList.Add(aStatus, aLength, aStart, aFlags); //update |
1554 TInt r = iBuffers[aBufferNum].iStatusList.Add(aStatus, aLength, aStart, aFlags); //update |
1620 |
1555 |
1622 { |
1557 { |
1623 iBuffers[aBufferNum].StartDataWrite(); |
1558 iBuffers[aBufferNum].StartDataWrite(); |
1624 } |
1559 } |
1625 else |
1560 else |
1626 { |
1561 { |
1627 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOWRITEDATA_DUP5, "Job in Progress!"); |
1562 __KTRACE_OPT(KUSB, Kern::Printf("Job in Progress!")); |
1628 } |
1563 } |
1629 |
1564 |
1630 |
1565 |
1631 return r; |
1566 return r; |
1632 } |
1567 } |
1639 TInt DLddUsbcScChannel::DoCancel(TInt aReqNo, TUint aBuff, TUint aSpair) |
1574 TInt DLddUsbcScChannel::DoCancel(TInt aReqNo, TUint aBuff, TUint aSpair) |
1640 { |
1575 { |
1641 TInt r = KErrNone; |
1576 TInt r = KErrNone; |
1642 TInt direction=KUsbcScOut; |
1577 TInt direction=KUsbcScOut; |
1643 |
1578 |
1644 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCANCEL, "DoCancel: 0x%x aBuff 0x%x", aReqNo, aBuff); |
1579 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel: 0x%x aBuff 0x%x", aReqNo, aBuff)); |
1645 |
|
1646 switch (aReqNo) |
1580 switch (aReqNo) |
1647 { |
1581 { |
1648 case RDevUsbcScClient::ERequestCancel: |
1582 case RDevUsbcScClient::ERequestCancel: |
1649 TInt buffer; |
1583 TInt buffer; |
1650 TInt mask; |
1584 TInt mask; |
1657 |
1591 |
1658 // coverity[missing_break] |
1592 // coverity[missing_break] |
1659 case RDevUsbcScClient::ERequestWriteDataCancel: |
1593 case RDevUsbcScClient::ERequestWriteDataCancel: |
1660 direction = KUsbcScIn; |
1594 direction = KUsbcScIn; |
1661 case RDevUsbcScClient::ERequestReadDataNotifyCancel: |
1595 case RDevUsbcScClient::ERequestReadDataNotifyCancel: |
1662 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCANCEL_DUP1, "DoCancel Direction %d endpoints: 0x%x", direction, aReqNo); |
1596 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel Direction %d endpoints: 0x%x",direction, aReqNo)); |
1597 |
|
1663 if (((TInt)aBuff)==KUsbcScEndpointZero) // EP0 is bi-directional, so pick correct buffer for call type |
1598 if (((TInt)aBuff)==KUsbcScEndpointZero) // EP0 is bi-directional, so pick correct buffer for call type |
1664 { |
1599 { |
1665 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCANCEL_DUP2, "DoCancel Cancel Endpoint 0/%d",direction); |
1600 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel Cancel Endpoint 0/%d",direction)); |
1666 iEp0Endpoint->AbortTransfer(); |
1601 iEp0Endpoint->AbortTransfer(); |
1667 if (direction==KUsbcScIn) |
1602 if (direction==KUsbcScIn) |
1668 aBuff=iEP0InBuff; |
1603 aBuff=iEP0InBuff; |
1669 else |
1604 else |
1670 aBuff=iEP0OutBuff; |
1605 aBuff=iEP0OutBuff; |
1671 } |
1606 } |
1672 else if ((TInt)aBuff >= iNumBuffers) // check buff no range. |
1607 else if ((TInt)aBuff >= iNumBuffers) // check buff no range. |
1673 { |
1608 { |
1674 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCANCEL_DUP3, "DoCancel Error: Bad buffer number"); |
1609 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel Error: Bad buffer number")); |
1675 return KErrArgument; |
1610 return KErrArgument; |
1676 } |
1611 } |
1677 |
1612 |
1678 if ((iBuffers[aBuff].iDirection&1)!=direction) // Does direction match call type? |
1613 if ((iBuffers[aBuff].iDirection&1)!=direction) // Does direction match call type? |
1679 { |
1614 { |
1680 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCANCEL_DUP4, "DoCancel Error: Bad buffer direction"); |
1615 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel Error: Bad buffer direction")); |
1681 return KErrArgument; |
1616 return KErrArgument; |
1682 } |
1617 } |
1683 iBuffers[aBuff].iStatusList.CancelQueued(); |
1618 iBuffers[aBuff].iStatusList.CancelQueued(); |
1684 iBuffers[aBuff].Cancel(KErrCancel); |
1619 iBuffers[aBuff].Cancel(KErrCancel); |
1685 |
1620 |
1686 return KErrNone; |
1621 return KErrNone; |
1687 |
1622 |
1688 case RDevUsbcScClient::ERequestAlternateDeviceStatusNotifyCancel: |
1623 case RDevUsbcScClient::ERequestAlternateDeviceStatusNotifyCancel: |
1689 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCANCEL_DUP5, "DoCancel: ERequestAlternateDeviceStatusNotify 0x%x", aReqNo); |
1624 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel: ERequestAlternateDeviceStatusNotify 0x%x", aReqNo)); |
1690 iDeviceStatusNeeded = EFalse; |
1625 iDeviceStatusNeeded = EFalse; |
1691 iStatusFifo->FlushQueue(); |
1626 iStatusFifo->FlushQueue(); |
1692 if (iStatusChangePtr) |
1627 if (iStatusChangePtr) |
1693 { |
1628 { |
1694 TInt deviceState = iController->GetDeviceStatus(); |
1629 TInt deviceState = iController->GetDeviceStatus(); |
1698 iStatusChangePtr = NULL; |
1633 iStatusChangePtr = NULL; |
1699 } |
1634 } |
1700 break; |
1635 break; |
1701 |
1636 |
1702 case RDevUsbcScClient::ERequestReEnumerateCancel: |
1637 case RDevUsbcScClient::ERequestReEnumerateCancel: |
1703 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCANCEL_DUP6, "DoCancel ERequestReEnumerate: 0x%x", aReqNo); |
1638 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel ERequestReEnumerate: 0x%x", aReqNo)); |
1704 break; |
1639 break; |
1705 |
1640 |
1706 case RDevUsbcScClient::ERequestEndpointStatusNotifyCancel: |
1641 case RDevUsbcScClient::ERequestEndpointStatusNotifyCancel: |
1707 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCANCEL_DUP7, "DoCancel ERequestEndpointStatusNotify: 0x%x", aReqNo); |
1642 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel ERequestEndpointStatusNotify: 0x%x", aReqNo)); |
1708 CancelNotifyEndpointStatus(); |
1643 CancelNotifyEndpointStatus(); |
1709 break; |
1644 break; |
1710 |
1645 |
1711 case RDevUsbcScClient::ERequestOtgFeaturesNotifyCancel: |
1646 case RDevUsbcScClient::ERequestOtgFeaturesNotifyCancel: |
1712 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCANCEL_DUP8, "DoCancel ERequestOtgFeaturesNotify: 0x%x", aReqNo); |
1647 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel ERequestOtgFeaturesNotify: 0x%x", aReqNo)); |
1713 CancelNotifyOtgFeatures(); |
1648 CancelNotifyOtgFeatures(); |
1714 break; |
1649 break; |
1715 |
1650 |
1716 default: |
1651 default: |
1717 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCANCEL_DUP9, "DoCancel Unknown! 0x%x", aReqNo); |
1652 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel Unknown! 0x%x", aReqNo)); |
1718 return KErrArgument; |
1653 return KErrArgument; |
1719 } |
1654 } |
1720 |
1655 |
1721 Kern::RequestComplete(iClient,iRequestStatus[aReqNo & ~RDevUsbcScClient::ERequestCancel], KErrCancel); |
1656 Kern::RequestComplete(iClient,iRequestStatus[aReqNo & ~RDevUsbcScClient::ERequestCancel], KErrCancel); |
1722 return r; |
1657 return r; |
1762 // |
1697 // |
1763 // Called from HandleMsg. |
1698 // Called from HandleMsg. |
1764 |
1699 |
1765 TInt DLddUsbcScChannel::DoControl(TInt aFunction, TAny* a1, TAny* a2) |
1700 TInt DLddUsbcScChannel::DoControl(TInt aFunction, TAny* a1, TAny* a2) |
1766 { |
1701 { |
1767 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL, "DoControl: %d", aFunction); |
1702 __KTRACE_OPT(KUSB, Kern::Printf("DoControl: %d", aFunction)); |
1768 |
1703 |
1769 TInt r = KErrNone; |
1704 TInt r = KErrNone; |
1770 TInt ep, param; |
1705 TInt ep, param; |
1771 TUsbcScEndpoint* pEndpoint; |
1706 TUsbcScEndpoint* pEndpoint; |
1772 TPtrC8 pZeroDesc(NULL, 0); |
1707 TPtrC8 pZeroDesc(NULL, 0); |
1773 TEndpointDescriptorInfo epInfo; |
1708 TEndpointDescriptorInfo epInfo; |
1776 TUsbcEndpointResource epRes; |
1711 TUsbcEndpointResource epRes; |
1777 |
1712 |
1778 switch (aFunction) |
1713 switch (aFunction) |
1779 { |
1714 { |
1780 case RDevUsbcScClient::EControlEndpointZeroRequestError: |
1715 case RDevUsbcScClient::EControlEndpointZeroRequestError: |
1781 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP1, "EControlEndpointZeroRequestError"); |
1716 __KTRACE_OPT(KUSB, Kern::Printf("EControlEndpointZeroRequestError")); |
1782 r = KErrNone; |
1717 r = KErrNone; |
1783 if (iOwnsDeviceControl || (iValidInterface && iDeviceState == EUsbcDeviceStateConfigured)) |
1718 if (iOwnsDeviceControl || (iValidInterface && iDeviceState == EUsbcDeviceStateConfigured)) |
1784 { |
1719 { |
1785 iController->Ep0Stall(this); |
1720 iController->Ep0Stall(this); |
1786 } |
1721 } |
1792 r = KErrUsbInterfaceNotReady; |
1727 r = KErrUsbInterfaceNotReady; |
1793 } |
1728 } |
1794 break; |
1729 break; |
1795 |
1730 |
1796 case RDevUsbcScClient::EControlGetAlternateSetting: |
1731 case RDevUsbcScClient::EControlGetAlternateSetting: |
1797 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP2, "EControlGetAlternateSetting"); |
1732 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetAlternateSetting")); |
1798 if (iValidInterface && iDeviceState == EUsbcDeviceStateConfigured) |
1733 if (iValidInterface && iDeviceState == EUsbcDeviceStateConfigured) |
1799 { |
1734 { |
1800 r = iController->GetInterfaceNumber(this, param); |
1735 r = iController->GetInterfaceNumber(this, param); |
1801 if (r == KErrNone) |
1736 if (r == KErrNone) |
1802 { |
1737 { |
1813 r = KErrUsbInterfaceNotReady; |
1748 r = KErrUsbInterfaceNotReady; |
1814 } |
1749 } |
1815 break; |
1750 break; |
1816 |
1751 |
1817 case RDevUsbcScClient::EControlDeviceStatus: |
1752 case RDevUsbcScClient::EControlDeviceStatus: |
1818 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP3, "EControlDeviceStatus"); |
1753 __KTRACE_OPT(KUSB, Kern::Printf("EControlDeviceStatus")); |
1819 param = iController->GetDeviceStatus(); |
1754 param = iController->GetDeviceStatus(); |
1820 r = Kern::ThreadRawWrite(iClient, a1, ¶m, sizeof(param), iClient); |
1755 r = Kern::ThreadRawWrite(iClient, a1, ¶m, sizeof(param), iClient); |
1821 if (r != KErrNone) |
1756 if (r != KErrNone) |
1822 PanicClientThread(r); |
1757 PanicClientThread(r); |
1823 break; |
1758 break; |
1824 |
1759 |
1825 case RDevUsbcScClient::EControlEndpointStatus: |
1760 case RDevUsbcScClient::EControlEndpointStatus: |
1826 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP4, "EControlEndpointStatus"); |
1761 __KTRACE_OPT(KUSB, Kern::Printf("EControlEndpointStatus")); |
1827 if (iValidInterface && ValidEndpoint((TInt) a1)) |
1762 if (iValidInterface && ValidEndpoint((TInt) a1)) |
1828 { |
1763 { |
1829 pEndpoint = iEndpoint[(TInt)a1]; |
1764 pEndpoint = iEndpoint[(TInt)a1]; |
1830 if (pEndpoint == NULL) |
1765 if (pEndpoint == NULL) |
1831 r = KErrNotSupported; |
1766 r = KErrNotSupported; |
1845 r = KErrUsbInterfaceNotReady; |
1780 r = KErrUsbInterfaceNotReady; |
1846 } |
1781 } |
1847 break; |
1782 break; |
1848 |
1783 |
1849 case RDevUsbcScClient::EControlEndpointCaps: |
1784 case RDevUsbcScClient::EControlEndpointCaps: |
1850 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP5, "EControlEndpointCaps"); |
1785 __KTRACE_OPT(KUSB, Kern::Printf("EControlEndpointCaps")); |
1851 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0, 0, iClient); |
1786 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0, 0, iClient); |
1852 if (r != KErrNone) |
1787 if (r != KErrNone) |
1853 PanicClientThread(r); |
1788 PanicClientThread(r); |
1854 iController->EndpointCaps(this, *((TDes8*) a1)); |
1789 iController->EndpointCaps(this, *((TDes8*) a1)); |
1855 break; |
1790 break; |
1856 |
1791 |
1857 case RDevUsbcScClient::EControlDeviceCaps: |
1792 case RDevUsbcScClient::EControlDeviceCaps: |
1858 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP6, "EControlDeviceCaps"); |
1793 __KTRACE_OPT(KUSB, Kern::Printf("EControlDeviceCaps")); |
1859 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0, 0, iClient); |
1794 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0, 0, iClient); |
1860 if (r != KErrNone) |
1795 if (r != KErrNone) |
1861 PanicClientThread(r); |
1796 PanicClientThread(r); |
1862 iController->DeviceCaps(this, *((TDes8*) a1)); |
1797 iController->DeviceCaps(this, *((TDes8*) a1)); |
1863 break; |
1798 break; |
1864 |
1799 |
1865 case RDevUsbcScClient::EControlSendEp0StatusPacket: |
1800 case RDevUsbcScClient::EControlSendEp0StatusPacket: |
1866 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP7, "EControlSendEp0StatusPacket"); |
1801 __KTRACE_OPT(KUSB, Kern::Printf("EControlSendEp0StatusPacket")); |
1867 iController->SendEp0StatusPacket(this); |
1802 iController->SendEp0StatusPacket(this); |
1868 break; |
1803 break; |
1869 |
1804 |
1870 case RDevUsbcScClient::EControlHaltEndpoint: |
1805 case RDevUsbcScClient::EControlHaltEndpoint: |
1871 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP8, "EControlHaltEndpoint"); |
1806 __KTRACE_OPT(KUSB, Kern::Printf("EControlHaltEndpoint")); |
1872 if (iValidInterface && ValidEndpoint((TInt) a1)) |
1807 if (iValidInterface && ValidEndpoint((TInt) a1)) |
1873 { |
1808 { |
1874 r = iController->HaltEndpoint(this, iEndpoint[(TInt)a1]->RealEpNumber()); |
1809 r = iController->HaltEndpoint(this, iEndpoint[(TInt)a1]->RealEpNumber()); |
1875 } |
1810 } |
1876 else |
1811 else |
1881 r = KErrUsbInterfaceNotReady; |
1816 r = KErrUsbInterfaceNotReady; |
1882 } |
1817 } |
1883 break; |
1818 break; |
1884 |
1819 |
1885 case RDevUsbcScClient::EControlClearHaltEndpoint: |
1820 case RDevUsbcScClient::EControlClearHaltEndpoint: |
1886 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP9, "EControlClearHaltEndpoint"); |
1821 __KTRACE_OPT(KUSB, Kern::Printf("EControlClearHaltEndpoint")); |
1887 if (iValidInterface && ValidEndpoint((TInt) a1)) |
1822 if (iValidInterface && ValidEndpoint((TInt) a1)) |
1888 { |
1823 { |
1889 r = iController->ClearHaltEndpoint(this, iEndpoint[(TInt)a1]->RealEpNumber()); |
1824 r = iController->ClearHaltEndpoint(this, iEndpoint[(TInt)a1]->RealEpNumber()); |
1890 } |
1825 } |
1891 else |
1826 else |
1896 r = KErrUsbInterfaceNotReady; |
1831 r = KErrUsbInterfaceNotReady; |
1897 } |
1832 } |
1898 break; |
1833 break; |
1899 |
1834 |
1900 case RDevUsbcScClient::EControlDumpRegisters: |
1835 case RDevUsbcScClient::EControlDumpRegisters: |
1901 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP10, "EControlDumpRegisters"); |
1836 __KTRACE_OPT(KUSB, Kern::Printf("EControlDumpRegisters")); |
1902 iController->DumpRegisters(); |
1837 iController->DumpRegisters(); |
1903 break; |
1838 break; |
1904 |
1839 |
1905 case RDevUsbcScClient::EControlReleaseDeviceControl: |
1840 case RDevUsbcScClient::EControlReleaseDeviceControl: |
1906 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP11, "EControlReleaseDeviceControl"); |
1841 __KTRACE_OPT(KUSB, Kern::Printf("EControlReleaseDeviceControl")); |
1907 iController->ReleaseDeviceControl(this); |
1842 iController->ReleaseDeviceControl(this); |
1908 iOwnsDeviceControl = EFalse; |
1843 iOwnsDeviceControl = EFalse; |
1909 break; |
1844 break; |
1910 |
1845 |
1911 case RDevUsbcScClient::EControlEndpointZeroMaxPacketSizes: |
1846 case RDevUsbcScClient::EControlEndpointZeroMaxPacketSizes: |
1912 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP12, "EControlEndpointZeroMaxPacketSizes"); |
1847 __KTRACE_OPT(KUSB, Kern::Printf("EControlEndpointZeroMaxPacketSizes")); |
1913 r = iController->EndpointZeroMaxPacketSizes(); |
1848 r = iController->EndpointZeroMaxPacketSizes(); |
1914 break; |
1849 break; |
1915 |
1850 |
1916 case RDevUsbcScClient::EControlSetEndpointZeroMaxPacketSize: |
1851 case RDevUsbcScClient::EControlSetEndpointZeroMaxPacketSize: |
1917 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP13, "EControlSetEndpointZeroMaxPacketSize"); |
1852 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetEndpointZeroMaxPacketSize")); |
1918 r = iController->SetEndpointZeroMaxPacketSize(reinterpret_cast<TInt>(a1)); |
1853 r = iController->SetEndpointZeroMaxPacketSize(reinterpret_cast<TInt>(a1)); |
1919 break; |
1854 break; |
1920 |
1855 |
1921 case RDevUsbcScClient::EControlGetEndpointZeroMaxPacketSize: |
1856 case RDevUsbcScClient::EControlGetEndpointZeroMaxPacketSize: |
1922 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP14, "EControlGetEndpointZeroMaxPacketSize"); |
1857 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetEndpointZeroMaxPacketSize")); |
1923 r = iController->Ep0PacketSize(); |
1858 r = iController->Ep0PacketSize(); |
1924 break; |
1859 break; |
1925 |
1860 |
1926 case RDevUsbcScClient::EControlGetDeviceDescriptor: |
1861 case RDevUsbcScClient::EControlGetDeviceDescriptor: |
1927 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP15, "EControlGetDeviceDescriptor"); |
1862 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetDeviceDescriptor")); |
1928 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0, 0, iClient); |
1863 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0, 0, iClient); |
1929 if (r != KErrNone) |
1864 if (r != KErrNone) |
1930 PanicClientThread(r); |
1865 PanicClientThread(r); |
1931 r = iController->GetDeviceDescriptor(iClient, *((TDes8*) a1)); |
1866 r = iController->GetDeviceDescriptor(iClient, *((TDes8*) a1)); |
1932 break; |
1867 break; |
1933 |
1868 |
1934 case RDevUsbcScClient::EControlSetDeviceDescriptor: |
1869 case RDevUsbcScClient::EControlSetDeviceDescriptor: |
1935 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP16, "EControlSetDeviceDescriptor"); |
1870 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetDeviceDescriptor")); |
1936 if (a1 == NULL) |
1871 BREAK_IF_NULL_ARG(a1,r); |
1937 { |
|
1938 r = KErrArgument; |
|
1939 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREQUEST_DUP17, "NULL Argument"); |
|
1940 break; |
|
1941 } |
|
1942 r = iController->SetDeviceDescriptor(iClient, *((TDes8*) a1)); |
1872 r = iController->SetDeviceDescriptor(iClient, *((TDes8*) a1)); |
1943 break; |
1873 break; |
1944 |
1874 |
1945 case RDevUsbcScClient::EControlGetDeviceDescriptorSize: |
1875 case RDevUsbcScClient::EControlGetDeviceDescriptorSize: |
1946 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP18, "EControlGetDeviceDescriptorSize"); |
1876 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetDeviceDescriptorSize")); |
1947 if (a1 == NULL) |
1877 BREAK_IF_NULL_ARG(a1,r); |
1948 { |
|
1949 r = KErrArgument; |
|
1950 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREQUEST_DUP19, "NULL Argument"); |
|
1951 break; |
|
1952 } |
|
1953 r = iController->GetDeviceDescriptorSize(iClient, *((TDes8*) a1)); |
1878 r = iController->GetDeviceDescriptorSize(iClient, *((TDes8*) a1)); |
1954 break; |
1879 break; |
1955 |
1880 |
1956 case RDevUsbcScClient::EControlGetConfigurationDescriptor: |
1881 case RDevUsbcScClient::EControlGetConfigurationDescriptor: |
1957 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP20, "EControlGetConfigurationDescriptor"); |
1882 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetConfigurationDescriptor")); |
1958 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0 , 0, iClient); |
1883 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0 , 0, iClient); |
1959 if (r != KErrNone) |
1884 if (r != KErrNone) |
1960 PanicClientThread(r); |
1885 PanicClientThread(r); |
1961 r = iController->GetConfigurationDescriptor(iClient, *((TDes8*) a1)); |
1886 r = iController->GetConfigurationDescriptor(iClient, *((TDes8*) a1)); |
1962 break; |
1887 break; |
1963 |
1888 |
1964 case RDevUsbcScClient::EControlGetConfigurationDescriptorSize: |
1889 case RDevUsbcScClient::EControlGetConfigurationDescriptorSize: |
1965 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP21, "EControlGetConfigurationDescriptorSize"); |
1890 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetConfigurationDescriptorSize")); |
1966 if (a1 != NULL) |
1891 if (a1 != NULL) |
1967 { |
1892 { |
1968 r = iController->GetConfigurationDescriptorSize(iClient, *((TDes8*) a1)); |
1893 r = iController->GetConfigurationDescriptorSize(iClient, *((TDes8*) a1)); |
1969 } |
1894 } |
1970 else |
1895 else |
1971 r = KErrArgument; |
1896 r = KErrArgument; |
1972 break; |
1897 break; |
1973 |
1898 |
1974 case RDevUsbcScClient::EControlSetConfigurationDescriptor: |
1899 case RDevUsbcScClient::EControlSetConfigurationDescriptor: |
1975 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP22, "EControlSetConfigurationDescriptor"); |
1900 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetConfigurationDescriptor")); |
1976 r = iController->SetConfigurationDescriptor(iClient, *((TDes8*) a1)); |
1901 r = iController->SetConfigurationDescriptor(iClient, *((TDes8*) a1)); |
1977 break; |
1902 break; |
1978 |
1903 |
1979 case RDevUsbcScClient::EControlGetInterfaceDescriptor: |
1904 case RDevUsbcScClient::EControlGetInterfaceDescriptor: |
1980 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP23, "EControlGetInterfaceDescriptor"); |
1905 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetInterfaceDescriptor")); |
1981 r = iController->GetInterfaceDescriptor(iClient, this, (TInt) a1, *((TDes8*) a2)); |
1906 r = iController->GetInterfaceDescriptor(iClient, this, (TInt) a1, *((TDes8*) a2)); |
1982 break; |
1907 break; |
1983 |
1908 |
1984 case RDevUsbcScClient::EControlGetInterfaceDescriptorSize: |
1909 case RDevUsbcScClient::EControlGetInterfaceDescriptorSize: |
1985 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP24, "EControlGetInterfaceDescriptorSize"); |
1910 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetInterfaceDescriptorSize")); |
1986 r = iController->GetInterfaceDescriptorSize(iClient, this, (TInt) a1, *(TDes8*) a2); |
1911 r = iController->GetInterfaceDescriptorSize(iClient, this, (TInt) a1, *(TDes8*) a2); |
1987 break; |
1912 break; |
1988 |
1913 |
1989 case RDevUsbcScClient::EControlSetInterfaceDescriptor: |
1914 case RDevUsbcScClient::EControlSetInterfaceDescriptor: |
1990 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP25, "EControlSetInterfaceDescriptor"); |
1915 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetInterfaceDescriptor")); |
1991 r = iController->SetInterfaceDescriptor(iClient, this, (TInt) a1, *((TDes8*) a2)); |
1916 r = iController->SetInterfaceDescriptor(iClient, this, (TInt) a1, *((TDes8*) a2)); |
1992 break; |
1917 break; |
1993 |
1918 |
1994 case RDevUsbcScClient::EControlGetEndpointDescriptor: |
1919 case RDevUsbcScClient::EControlGetEndpointDescriptor: |
1995 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP26, "EControlGetEndpointDescriptor"); |
1920 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetEndpointDescriptor")); |
1996 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
1921 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
1997 if (r != KErrNone) |
1922 if (r != KErrNone) |
1998 PanicClientThread(r); |
1923 PanicClientThread(r); |
1999 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
1924 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
2000 r = (ep<0)?ep:iController->GetEndpointDescriptor(iClient, this, epInfo.iSetting, |
1925 r = (ep<0)?ep:iController->GetEndpointDescriptor(iClient, this, epInfo.iSetting, |
2001 ep, *(TDes8*) epInfo.iArg); |
1926 ep, *(TDes8*) epInfo.iArg); |
2002 break; |
1927 break; |
2003 |
1928 |
2004 case RDevUsbcScClient::EControlGetEndpointDescriptorSize: |
1929 case RDevUsbcScClient::EControlGetEndpointDescriptorSize: |
2005 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP27, "EControlGetEndpointDescriptorSize"); |
1930 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetEndpointDescriptorSize")); |
2006 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
1931 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
2007 if (r != KErrNone) |
1932 if (r != KErrNone) |
2008 PanicClientThread(r); |
1933 PanicClientThread(r); |
2009 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
1934 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
2010 r = iController->GetEndpointDescriptorSize(iClient, this, epInfo.iSetting, |
1935 r = iController->GetEndpointDescriptorSize(iClient, this, epInfo.iSetting, |
2011 ep, *(TDes8*) epInfo.iArg); |
1936 ep, *(TDes8*) epInfo.iArg); |
2012 break; |
1937 break; |
2013 |
1938 |
2014 case RDevUsbcScClient::EControlSetEndpointDescriptor: |
1939 case RDevUsbcScClient::EControlSetEndpointDescriptor: |
2015 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP28, "EControlSetEndpointDescriptor"); |
1940 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetEndpointDescriptor")); |
2016 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
1941 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
2017 if (r != KErrNone) |
1942 if (r != KErrNone) |
2018 PanicClientThread(r); |
1943 PanicClientThread(r); |
2019 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
1944 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
2020 r = iController->SetEndpointDescriptor(iClient, this, epInfo.iSetting, |
1945 r = iController->SetEndpointDescriptor(iClient, this, epInfo.iSetting, |
2021 ep, *(TDes8*)epInfo.iArg); |
1946 ep, *(TDes8*)epInfo.iArg); |
2022 break; |
1947 break; |
2023 |
1948 |
2024 case RDevUsbcScClient::EControlGetDeviceQualifierDescriptor: |
1949 case RDevUsbcScClient::EControlGetDeviceQualifierDescriptor: |
2025 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP29, "EControlGetDeviceQualifierDescriptor"); |
1950 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetDeviceQualifierDescriptor")); |
2026 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0, 0, iClient); |
1951 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0, 0, iClient); |
2027 if (r != KErrNone) |
1952 if (r != KErrNone) |
2028 PanicClientThread(r); |
1953 PanicClientThread(r); |
2029 r = iController->GetDeviceQualifierDescriptor(iClient, *((TDes8*) a1)); |
1954 r = iController->GetDeviceQualifierDescriptor(iClient, *((TDes8*) a1)); |
2030 break; |
1955 break; |
2031 |
1956 |
2032 case RDevUsbcScClient::EControlSetDeviceQualifierDescriptor: |
1957 case RDevUsbcScClient::EControlSetDeviceQualifierDescriptor: |
2033 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP30, "EControlSetDeviceQualifierDescriptor"); |
1958 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetDeviceQualifierDescriptor")); |
2034 if (a1 == NULL) |
1959 BREAK_IF_NULL_ARG(a1,r); |
2035 { |
|
2036 r = KErrArgument; |
|
2037 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOREQUEST_DUP31, "NULL Argument"); |
|
2038 break; |
|
2039 } |
|
2040 r = iController->SetDeviceQualifierDescriptor(iClient, *((TDes8*) a1)); |
1960 r = iController->SetDeviceQualifierDescriptor(iClient, *((TDes8*) a1)); |
2041 break; |
1961 break; |
2042 |
1962 |
2043 case RDevUsbcScClient::EControlGetOtherSpeedConfigurationDescriptor: |
1963 case RDevUsbcScClient::EControlGetOtherSpeedConfigurationDescriptor: |
2044 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP32, "EControlGetOtherSpeedConfigurationDescriptor"); |
1964 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetOtherSpeedConfigurationDescriptor")); |
2045 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0 , 0, iClient); |
1965 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0 , 0, iClient); |
2046 if (r != KErrNone) |
1966 if (r != KErrNone) |
2047 PanicClientThread(r); |
1967 PanicClientThread(r); |
2048 r = iController->GetOtherSpeedConfigurationDescriptor(iClient, *((TDes8*) a1)); |
1968 r = iController->GetOtherSpeedConfigurationDescriptor(iClient, *((TDes8*) a1)); |
2049 break; |
1969 break; |
2050 |
1970 |
2051 case RDevUsbcScClient::EControlSetOtherSpeedConfigurationDescriptor: |
1971 case RDevUsbcScClient::EControlSetOtherSpeedConfigurationDescriptor: |
2052 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP33, "EControlSetOtherSpeedConfigurationDescriptor"); |
1972 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetOtherSpeedConfigurationDescriptor")); |
2053 r = iController->SetOtherSpeedConfigurationDescriptor(iClient, *((TDes8*) a1)); |
1973 r = iController->SetOtherSpeedConfigurationDescriptor(iClient, *((TDes8*) a1)); |
2054 break; |
1974 break; |
2055 |
1975 |
2056 |
1976 |
2057 case RDevUsbcScClient::EControlGetCSInterfaceDescriptor: |
1977 case RDevUsbcScClient::EControlGetCSInterfaceDescriptor: |
2058 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP34, "EControlGetCSInterfaceDescriptor"); |
1978 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetCSInterfaceDescriptor")); |
2059 r = iController->GetCSInterfaceDescriptorBlock(iClient, this, (TInt) a1, *((TDes8*) a2)); |
1979 r = iController->GetCSInterfaceDescriptorBlock(iClient, this, (TInt) a1, *((TDes8*) a2)); |
2060 break; |
1980 break; |
2061 |
1981 |
2062 case RDevUsbcScClient::EControlGetCSInterfaceDescriptorSize: |
1982 case RDevUsbcScClient::EControlGetCSInterfaceDescriptorSize: |
2063 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP35, "EControlGetCSInterfaceDescriptorSize"); |
1983 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetCSInterfaceDescriptorSize")); |
2064 r = iController->GetCSInterfaceDescriptorBlockSize(iClient, this, (TInt) a1, *(TDes8*) a2); |
1984 r = iController->GetCSInterfaceDescriptorBlockSize(iClient, this, (TInt) a1, *(TDes8*) a2); |
2065 break; |
1985 break; |
2066 |
1986 |
2067 case RDevUsbcScClient::EControlGetCSEndpointDescriptor: |
1987 case RDevUsbcScClient::EControlGetCSEndpointDescriptor: |
2068 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP36, "EControlGetCSEndpointDescriptor"); |
1988 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetCSEndpointDescriptor")); |
2069 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
1989 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
2070 if (r != KErrNone) |
1990 if (r != KErrNone) |
2071 PanicClientThread(r); |
1991 PanicClientThread(r); |
2072 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
1992 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
2073 r = iController->GetCSEndpointDescriptorBlock(iClient, this, epInfo.iSetting, |
1993 r = iController->GetCSEndpointDescriptorBlock(iClient, this, epInfo.iSetting, |
2074 ep, *(TDes8*) epInfo.iArg); |
1994 ep, *(TDes8*) epInfo.iArg); |
2075 break; |
1995 break; |
2076 |
1996 |
2077 case RDevUsbcScClient::EControlGetCSEndpointDescriptorSize: |
1997 case RDevUsbcScClient::EControlGetCSEndpointDescriptorSize: |
2078 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP37, "EControlGetCSEndpointDescriptorSize"); |
1998 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetCSEndpointDescriptorSize")); |
2079 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
1999 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
2080 if (r != KErrNone) |
2000 if (r != KErrNone) |
2081 PanicClientThread(r); |
2001 PanicClientThread(r); |
2082 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
2002 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
2083 r = iController->GetCSEndpointDescriptorBlockSize(iClient, this, epInfo.iSetting, |
2003 r = iController->GetCSEndpointDescriptorBlockSize(iClient, this, epInfo.iSetting, |
2084 ep, *(TDes8*) epInfo.iArg); |
2004 ep, *(TDes8*) epInfo.iArg); |
2085 break; |
2005 break; |
2086 |
2006 |
2087 case RDevUsbcScClient::EControlSignalRemoteWakeup: |
2007 case RDevUsbcScClient::EControlSignalRemoteWakeup: |
2088 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP38, "EControlSignalRemoteWakeup"); |
2008 __KTRACE_OPT(KUSB, Kern::Printf("EControlSignalRemoteWakeup")); |
2089 r = iController->SignalRemoteWakeup(); |
2009 r = iController->SignalRemoteWakeup(); |
2090 break; |
2010 break; |
2091 |
2011 |
2092 case RDevUsbcScClient::EControlDeviceDisconnectFromHost: |
2012 case RDevUsbcScClient::EControlDeviceDisconnectFromHost: |
2093 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP39, "EControlDeviceDisconnectFromHost"); |
2013 __KTRACE_OPT(KUSB, Kern::Printf("EControlDeviceDisconnectFromHost")); |
2094 r = iController->UsbDisconnect(); |
2014 r = iController->UsbDisconnect(); |
2095 break; |
2015 break; |
2096 |
2016 |
2097 case RDevUsbcScClient::EControlDeviceConnectToHost: |
2017 case RDevUsbcScClient::EControlDeviceConnectToHost: |
2098 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP40, "EControlDeviceConnectToHost"); |
2018 __KTRACE_OPT(KUSB, Kern::Printf("EControlDeviceConnectToHost")); |
2099 r = iController->UsbConnect(); |
2019 r = iController->UsbConnect(); |
2100 break; |
2020 break; |
2101 |
2021 |
2102 case RDevUsbcScClient::EControlDevicePowerUpUdc: |
2022 case RDevUsbcScClient::EControlDevicePowerUpUdc: |
2103 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP41, "EControlDevicePowerUpUdc"); |
2023 __KTRACE_OPT(KUSB, Kern::Printf("EControlDevicePowerUpUdc")); |
2104 r = iController->PowerUpUdc(); |
2024 r = iController->PowerUpUdc(); |
2105 break; |
2025 break; |
2106 |
2026 |
2107 case RDevUsbcScClient::EControlSetDeviceControl: |
2027 case RDevUsbcScClient::EControlSetDeviceControl: |
2108 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP42, "EControlSetDeviceControl"); |
2028 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetDeviceControl")); |
2109 r = iController->SetDeviceControl(this); |
2029 r = iController->SetDeviceControl(this); |
2110 if (r == KErrNone) |
2030 if (r == KErrNone) |
2111 { |
2031 { |
2112 iOwnsDeviceControl = ETrue; |
2032 iOwnsDeviceControl = ETrue; |
2113 if (iEp0Endpoint == NULL) |
2033 if (iEp0Endpoint == NULL) |
2114 { |
2034 { |
2115 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP43, "EControlSetDeviceControl"); |
2035 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetDeviceControl")); |
2116 r = SetupEp0(); |
2036 r = SetupEp0(); |
2117 if (r != KErrNone) |
2037 if (r != KErrNone) |
2118 { |
2038 { |
2119 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP44, " Error: SetupEp0() failed"); |
2039 __KTRACE_OPT(KPANIC, Kern::Printf(" Error: SetupEp0() failed")); |
2120 iController->ReleaseDeviceControl(this); |
2040 iController->ReleaseDeviceControl(this); |
2121 iOwnsDeviceControl=EFalse; |
2041 iOwnsDeviceControl=EFalse; |
2122 DestroyEp0(); |
2042 DestroyEp0(); |
2123 } |
2043 } |
2124 } |
2044 } |
2126 else |
2046 else |
2127 r = KErrInUse; |
2047 r = KErrInUse; |
2128 break; |
2048 break; |
2129 |
2049 |
2130 case RDevUsbcScClient::EControlCurrentlyUsingHighSpeed: |
2050 case RDevUsbcScClient::EControlCurrentlyUsingHighSpeed: |
2131 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP45, "EControlCurrentlyUsingHighSpeed"); |
2051 __KTRACE_OPT(KUSB, Kern::Printf("EControlCurrentlyUsingHighSpeed")); |
2132 r = iController->CurrentlyUsingHighSpeed(); |
2052 r = iController->CurrentlyUsingHighSpeed(); |
2133 break; |
2053 break; |
2134 |
2054 |
2135 case RDevUsbcScClient::EControlSetInterface: |
2055 case RDevUsbcScClient::EControlSetInterface: |
2136 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP46, "EControlSetInterface"); |
2056 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetInterface")); |
2137 r = Kern::ThreadRawRead(iClient, a2, &ifcInfo, sizeof(ifcInfo)); |
2057 r = Kern::ThreadRawRead(iClient, a2, &ifcInfo, sizeof(ifcInfo)); |
2138 if (r != KErrNone) |
2058 if (r != KErrNone) |
2139 PanicClientThread(r); |
2059 PanicClientThread(r); |
2140 r = SetInterface((TInt) a1, &ifcInfo); |
2060 r = SetInterface((TInt) a1, &ifcInfo); |
2141 break; |
2061 break; |
2142 |
2062 |
2143 case RDevUsbcScClient::EControlReleaseInterface: |
2063 case RDevUsbcScClient::EControlReleaseInterface: |
2144 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP47, "EControlReleaseInterface"); |
2064 __KTRACE_OPT(KUSB, Kern::Printf("EControlReleaseInterface")); |
2145 if (!iRealizeCalled) |
2065 if (!iRealizeCalled) |
2146 { |
2066 { |
2147 r = iController->ReleaseInterface(this, (TInt) a1); |
2067 r = iController->ReleaseInterface(this, (TInt) a1); |
2148 if (r == KErrNone) |
2068 if (r == KErrNone) |
2149 { |
2069 { |
2150 DestroyInterface((TUint) a1); |
2070 DestroyInterface((TUint) a1); |
2151 } |
2071 } |
2152 else |
2072 else |
2153 { |
2073 { |
2154 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP48, " Error in PIL: LDD interface won't be released."); |
2074 __KTRACE_OPT(KPANIC, Kern::Printf(" Error in PIL: LDD interface won't be released.")); |
2155 } |
2075 } |
2156 } |
2076 } |
2157 else |
2077 else |
2158 r = KErrUsbAlreadyRealized; |
2078 r = KErrUsbAlreadyRealized; |
2159 break; |
2079 break; |
2160 |
2080 |
2161 case RDevUsbcScClient::EControlSetCSInterfaceDescriptor: |
2081 case RDevUsbcScClient::EControlSetCSInterfaceDescriptor: |
2162 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP49, "EControlSetCSInterfaceDescriptor"); |
2082 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetCSInterfaceDescriptor")); |
2163 r = Kern::ThreadRawRead(iClient, a1, &desInfo, sizeof(desInfo)); |
2083 r = Kern::ThreadRawRead(iClient, a1, &desInfo, sizeof(desInfo)); |
2164 if (r != KErrNone) |
2084 if (r != KErrNone) |
2165 PanicClientThread(r); |
2085 PanicClientThread(r); |
2166 r = iController->SetCSInterfaceDescriptorBlock(iClient, this, desInfo.iSetting, |
2086 r = iController->SetCSInterfaceDescriptorBlock(iClient, this, desInfo.iSetting, |
2167 *reinterpret_cast<const TDes8*>(desInfo.iArg), |
2087 *reinterpret_cast<const TDes8*>(desInfo.iArg), |
2168 desInfo.iSize); |
2088 desInfo.iSize); |
2169 break; |
2089 break; |
2170 |
2090 |
2171 case RDevUsbcScClient::EControlSetCSEndpointDescriptor: |
2091 case RDevUsbcScClient::EControlSetCSEndpointDescriptor: |
2172 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP50, "EControlSetCSEndpointDescriptor"); |
2092 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetCSEndpointDescriptor")); |
2173 r = Kern::ThreadRawRead(iClient, a1, &desInfo, sizeof(desInfo)); |
2093 r = Kern::ThreadRawRead(iClient, a1, &desInfo, sizeof(desInfo)); |
2174 if (r != KErrNone) |
2094 if (r != KErrNone) |
2175 PanicClientThread(r); |
2095 PanicClientThread(r); |
2176 ep = EpFromAlternateSetting(desInfo.iSetting, desInfo.iEndpoint); |
2096 ep = EpFromAlternateSetting(desInfo.iSetting, desInfo.iEndpoint); |
2177 r = iController->SetCSEndpointDescriptorBlock(iClient, this, desInfo.iSetting, ep, |
2097 r = iController->SetCSEndpointDescriptorBlock(iClient, this, desInfo.iSetting, ep, |
2178 *reinterpret_cast<const TDes8*>(desInfo.iArg), |
2098 *reinterpret_cast<const TDes8*>(desInfo.iArg), |
2179 desInfo.iSize); |
2099 desInfo.iSize); |
2180 break; |
2100 break; |
2181 |
2101 |
2182 case RDevUsbcScClient::EControlGetStringDescriptorLangId: |
2102 case RDevUsbcScClient::EControlGetStringDescriptorLangId: |
2183 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP51, "EControlGetStringDescriptorLangId"); |
2103 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetStringDescriptorLangId")); |
2184 r = iController->GetStringDescriptorLangId(iClient, *((TDes8*) a1)); |
2104 r = iController->GetStringDescriptorLangId(iClient, *((TDes8*) a1)); |
2185 break; |
2105 break; |
2186 |
2106 |
2187 case RDevUsbcScClient::EControlSetStringDescriptorLangId: |
2107 case RDevUsbcScClient::EControlSetStringDescriptorLangId: |
2188 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP52, "EControlSetStringDescriptorLangId"); |
2108 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetStringDescriptorLangId")); |
2189 r = iController->SetStringDescriptorLangId(reinterpret_cast<TUint>(a1)); |
2109 r = iController->SetStringDescriptorLangId(reinterpret_cast<TUint>(a1)); |
2190 break; |
2110 break; |
2191 |
2111 |
2192 case RDevUsbcScClient::EControlGetManufacturerStringDescriptor: |
2112 case RDevUsbcScClient::EControlGetManufacturerStringDescriptor: |
2193 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP53, "EControlGetManufacturerStringDescriptor"); |
2113 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetManufacturerStringDescriptor")); |
2194 r = iController->GetManufacturerStringDescriptor(iClient, *((TPtr8*) a1)); |
2114 r = iController->GetManufacturerStringDescriptor(iClient, *((TPtr8*) a1)); |
2195 break; |
2115 break; |
2196 |
2116 |
2197 case RDevUsbcScClient::EControlSetManufacturerStringDescriptor: |
2117 case RDevUsbcScClient::EControlSetManufacturerStringDescriptor: |
2198 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP54, "EControlSetManufacturerStringDescriptor"); |
2118 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetManufacturerStringDescriptor")); |
2199 r = iController->SetManufacturerStringDescriptor(iClient, *((TPtr8*) a1)); |
2119 r = iController->SetManufacturerStringDescriptor(iClient, *((TPtr8*) a1)); |
2200 break; |
2120 break; |
2201 |
2121 |
2202 case RDevUsbcScClient::EControlRemoveManufacturerStringDescriptor: |
2122 case RDevUsbcScClient::EControlRemoveManufacturerStringDescriptor: |
2203 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP55, "EControlRemoveManufacturerStringDescriptor"); |
2123 __KTRACE_OPT(KUSB, Kern::Printf("EControlRemoveManufacturerStringDescriptor")); |
2204 r = iController->RemoveManufacturerStringDescriptor(); |
2124 r = iController->RemoveManufacturerStringDescriptor(); |
2205 break; |
2125 break; |
2206 |
2126 |
2207 case RDevUsbcScClient::EControlGetProductStringDescriptor: |
2127 case RDevUsbcScClient::EControlGetProductStringDescriptor: |
2208 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP56, "EControlGetProductStringDescriptor"); |
2128 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetProductStringDescriptor")); |
2209 r = iController->GetProductStringDescriptor(iClient, *((TPtr8*) a1)); |
2129 r = iController->GetProductStringDescriptor(iClient, *((TPtr8*) a1)); |
2210 break; |
2130 break; |
2211 |
2131 |
2212 case RDevUsbcScClient::EControlSetProductStringDescriptor: |
2132 case RDevUsbcScClient::EControlSetProductStringDescriptor: |
2213 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP57, "EControlSetProductStringDescriptor"); |
2133 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetProductStringDescriptor")); |
2214 r = iController->SetProductStringDescriptor(iClient, *((TPtr8*) a1)); |
2134 r = iController->SetProductStringDescriptor(iClient, *((TPtr8*) a1)); |
2215 break; |
2135 break; |
2216 |
2136 |
2217 case RDevUsbcScClient::EControlRemoveProductStringDescriptor: |
2137 case RDevUsbcScClient::EControlRemoveProductStringDescriptor: |
2218 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP58, "EControlRemoveProductStringDescriptor"); |
2138 __KTRACE_OPT(KUSB, Kern::Printf("EControlRemoveProductStringDescriptor")); |
2219 r = iController->RemoveProductStringDescriptor(); |
2139 r = iController->RemoveProductStringDescriptor(); |
2220 break; |
2140 break; |
2221 |
2141 |
2222 case RDevUsbcScClient::EControlGetSerialNumberStringDescriptor: |
2142 case RDevUsbcScClient::EControlGetSerialNumberStringDescriptor: |
2223 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP59, "EControlGetSerialNumberStringDescriptor"); |
2143 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetSerialNumberStringDescriptor")); |
2224 r = iController->GetSerialNumberStringDescriptor(iClient, *((TPtr8*) a1)); |
2144 r = iController->GetSerialNumberStringDescriptor(iClient, *((TPtr8*) a1)); |
2225 break; |
2145 break; |
2226 |
2146 |
2227 case RDevUsbcScClient::EControlSetSerialNumberStringDescriptor: |
2147 case RDevUsbcScClient::EControlSetSerialNumberStringDescriptor: |
2228 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP60, "EControlSetSerialNumberStringDescriptor"); |
2148 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetSerialNumberStringDescriptor")); |
2229 r = iController->SetSerialNumberStringDescriptor(iClient, *((TPtr8*) a1)); |
2149 r = iController->SetSerialNumberStringDescriptor(iClient, *((TPtr8*) a1)); |
2230 break; |
2150 break; |
2231 |
2151 |
2232 case RDevUsbcScClient::EControlRemoveSerialNumberStringDescriptor: |
2152 case RDevUsbcScClient::EControlRemoveSerialNumberStringDescriptor: |
2233 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP61, "EControlRemoveSerialNumberStringDescriptor"); |
2153 __KTRACE_OPT(KUSB, Kern::Printf("EControlRemoveSerialNumberStringDescriptor")); |
2234 r = iController->RemoveSerialNumberStringDescriptor(); |
2154 r = iController->RemoveSerialNumberStringDescriptor(); |
2235 break; |
2155 break; |
2236 |
2156 |
2237 case RDevUsbcScClient::EControlGetConfigurationStringDescriptor: |
2157 case RDevUsbcScClient::EControlGetConfigurationStringDescriptor: |
2238 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP62, "EControlGetConfigurationStringDescriptor"); |
2158 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetConfigurationStringDescriptor")); |
2239 r = iController->GetConfigurationStringDescriptor(iClient, *((TPtr8*) a1)); |
2159 r = iController->GetConfigurationStringDescriptor(iClient, *((TPtr8*) a1)); |
2240 break; |
2160 break; |
2241 |
2161 |
2242 case RDevUsbcScClient::EControlSetConfigurationStringDescriptor: |
2162 case RDevUsbcScClient::EControlSetConfigurationStringDescriptor: |
2243 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP63, "EControlSetConfigurationStringDescriptor"); |
2163 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetConfigurationStringDescriptor")); |
2244 r = iController->SetConfigurationStringDescriptor(iClient, *((TPtr8*) a1)); |
2164 r = iController->SetConfigurationStringDescriptor(iClient, *((TPtr8*) a1)); |
2245 break; |
2165 break; |
2246 |
2166 |
2247 case RDevUsbcScClient::EControlRemoveConfigurationStringDescriptor: |
2167 case RDevUsbcScClient::EControlRemoveConfigurationStringDescriptor: |
2248 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP64, "EControlRemoveConfigurationStringDescriptor"); |
2168 __KTRACE_OPT(KUSB, Kern::Printf("EControlRemoveConfigurationStringDescriptor")); |
2249 r = iController->RemoveConfigurationStringDescriptor(); |
2169 r = iController->RemoveConfigurationStringDescriptor(); |
2250 break; |
2170 break; |
2251 |
2171 |
2252 case RDevUsbcScClient::EControlGetStringDescriptor: |
2172 case RDevUsbcScClient::EControlGetStringDescriptor: |
2253 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP65, "EControlGetStringDescriptor"); |
2173 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetStringDescriptor")); |
2254 r = iController->GetStringDescriptor(iClient, (TUint8) (TInt) a1, *((TPtr8*) a2)); |
2174 r = iController->GetStringDescriptor(iClient, (TUint8) (TInt) a1, *((TPtr8*) a2)); |
2255 break; |
2175 break; |
2256 |
2176 |
2257 case RDevUsbcScClient::EControlSetStringDescriptor: |
2177 case RDevUsbcScClient::EControlSetStringDescriptor: |
2258 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP66, "EControlSetStringDescriptor"); |
2178 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetStringDescriptor")); |
2259 r = iController->SetStringDescriptor(iClient, (TUint8) (TInt) a1, *((TPtr8*) a2)); |
2179 r = iController->SetStringDescriptor(iClient, (TUint8) (TInt) a1, *((TPtr8*) a2)); |
2260 break; |
2180 break; |
2261 |
2181 |
2262 case RDevUsbcScClient::EControlRemoveStringDescriptor: |
2182 case RDevUsbcScClient::EControlRemoveStringDescriptor: |
2263 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP67, "EControlRemoveStringDescriptor"); |
2183 __KTRACE_OPT(KUSB, Kern::Printf("EControlRemoveStringDescriptor")); |
2264 r = iController->RemoveStringDescriptor((TUint8) (TInt) a1); |
2184 r = iController->RemoveStringDescriptor((TUint8) (TInt) a1); |
2265 break; |
2185 break; |
2266 |
2186 |
2267 case RDevUsbcScClient::EControlAllocateEndpointResource: |
2187 case RDevUsbcScClient::EControlAllocateEndpointResource: |
2268 { |
2188 { |
2269 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP68, "EControlAllocateEndpointResource"); |
2189 __KTRACE_OPT(KUSB, Kern::Printf("EControlAllocateEndpointResource")); |
2270 epRes = (TUsbcEndpointResource)((TInt) a2); |
2190 epRes = (TUsbcEndpointResource)((TInt) a2); |
2271 TInt realEp=-1; |
2191 TInt realEp=-1; |
2272 r = GetRealEpForEpResource((TInt)a1, realEp); |
2192 r = GetRealEpForEpResource((TInt)a1, realEp); |
2273 if (r==KErrNone) |
2193 if (r==KErrNone) |
2274 r = iController->AllocateEndpointResource(this, realEp, epRes); |
2194 r = iController->AllocateEndpointResource(this, realEp, epRes); |
2275 break; |
2195 break; |
2276 } |
2196 } |
2277 case RDevUsbcScClient::EControlDeAllocateEndpointResource: |
2197 case RDevUsbcScClient::EControlDeAllocateEndpointResource: |
2278 { |
2198 { |
2279 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP69, "EControlDeAllocateEndpointResource"); |
2199 __KTRACE_OPT(KUSB, Kern::Printf("EControlDeAllocateEndpointResource")); |
2280 epRes = (TUsbcEndpointResource)((TInt) a2); |
2200 epRes = (TUsbcEndpointResource)((TInt) a2); |
2281 TInt realEp=-1; |
2201 TInt realEp=-1; |
2282 r = GetRealEpForEpResource((TInt)a1, realEp); |
2202 r = GetRealEpForEpResource((TInt)a1, realEp); |
2283 if (r==KErrNone) |
2203 if (r==KErrNone) |
2284 r = iController->DeAllocateEndpointResource(this, realEp, epRes); |
2204 r = iController->DeAllocateEndpointResource(this, realEp, epRes); |
2285 break; |
2205 break; |
2286 } |
2206 } |
2287 case RDevUsbcScClient::EControlQueryEndpointResourceUse: |
2207 case RDevUsbcScClient::EControlQueryEndpointResourceUse: |
2288 { |
2208 { |
2289 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP70, "EControlQueryEndpointResourceUse"); |
2209 __KTRACE_OPT(KUSB, Kern::Printf("EControlQueryEndpointResourceUse")); |
2290 epRes = (TUsbcEndpointResource)((TInt) a2); |
2210 epRes = (TUsbcEndpointResource)((TInt) a2); |
2291 TInt realEp=-1; |
2211 TInt realEp=-1; |
2292 r = GetRealEpForEpResource((TInt)a1, realEp); |
2212 r = GetRealEpForEpResource((TInt)a1, realEp); |
2293 if (r==KErrNone) |
2213 if (r==KErrNone) |
2294 r = iController->QueryEndpointResource(this, realEp, epRes); |
2214 r = iController->QueryEndpointResource(this, realEp, epRes); |
2295 break; |
2215 break; |
2296 } |
2216 } |
2297 case RDevUsbcScClient::EControlSetOtgDescriptor: |
2217 case RDevUsbcScClient::EControlSetOtgDescriptor: |
2298 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP71, "EControlSetOtgDescriptor"); |
2218 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetOtgDescriptor")); |
2299 r = iController->SetOtgDescriptor(iClient, *((const TDesC8*)a1)); |
2219 r = iController->SetOtgDescriptor(iClient, *((const TDesC8*)a1)); |
2300 break; |
2220 break; |
2301 |
2221 |
2302 case RDevUsbcScClient::EControlGetOtgDescriptor: |
2222 case RDevUsbcScClient::EControlGetOtgDescriptor: |
2303 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP72, "EControlGetOtgDescriptor"); |
2223 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetOtgDescriptor")); |
2304 r = iController->GetOtgDescriptor(iClient, *((TDes8*)a1)); |
2224 r = iController->GetOtgDescriptor(iClient, *((TDes8*)a1)); |
2305 break; |
2225 break; |
2306 |
2226 |
2307 case RDevUsbcScClient::EControlGetOtgFeatures: |
2227 case RDevUsbcScClient::EControlGetOtgFeatures: |
2308 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP73, "EControlGetOtgFeatures"); |
2228 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetOtgFeatures")); |
2309 r = iController->GetOtgFeatures(iClient, *((TDes8*)a1)); |
2229 r = iController->GetOtgFeatures(iClient, *((TDes8*)a1)); |
2310 break; |
2230 break; |
2311 |
2231 |
2312 case RDevUsbcScClient::EControlRealizeInterface: |
2232 case RDevUsbcScClient::EControlRealizeInterface: |
2313 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP74, "EControlRealizeInterface"); |
2233 __KTRACE_OPT(KUSB, Kern::Printf("EControlRealizeInterface")); |
2314 r = RealizeInterface(); |
2234 r = RealizeInterface(); |
2315 break; |
2235 break; |
2316 case RDevUsbcScClient::EControlStartNextInAlternateSetting: |
2236 case RDevUsbcScClient::EControlStartNextInAlternateSetting: |
2317 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP75, "EControlStartNextInAlternateSetting"); |
2237 __KTRACE_OPT(KUSB, Kern::Printf("EControlStartNextInAlternateSetting")); |
2318 r = StartNextInAlternateSetting(); |
2238 r = StartNextInAlternateSetting(); |
2319 break; |
2239 break; |
2320 |
2240 |
2321 default: |
2241 default: |
2322 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOCONTROL_DUP76, "Function code not supported"); |
2242 __KTRACE_OPT(KUSB, Kern::Printf("Function code not supported")); |
2323 r = KErrNotSupported; |
2243 r = KErrNotSupported; |
2324 } |
2244 } |
2325 |
2245 |
2326 return r; |
2246 return r; |
2327 } |
2247 } |
2332 // |
2252 // |
2333 // Overriding DObject virtual |
2253 // Overriding DObject virtual |
2334 // |
2254 // |
2335 TInt DLddUsbcScChannel::RequestUserHandle(DThread* aThread, TOwnerType /*aType*/) |
2255 TInt DLddUsbcScChannel::RequestUserHandle(DThread* aThread, TOwnerType /*aType*/) |
2336 { |
2256 { |
2337 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, DLDDUSBCSCCHANNEL_REQUESTUSERHANDLE, "DLddUsbcScChannel::RequestUserHandle" ); |
2257 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcScChannel::RequestUserHandle")); |
2338 |
|
2339 // The USB client LDD is not designed for a channel to be shared between |
2258 // The USB client LDD is not designed for a channel to be shared between |
2340 // threads. It saves a pointer to the current thread when it is opened, and |
2259 // threads. It saves a pointer to the current thread when it is opened, and |
2341 // uses this to complete any asynchronous requests. |
2260 // uses this to complete any asynchronous requests. |
2342 // It is therefore not acceptable for the handle to be duplicated and used |
2261 // It is therefore not acceptable for the handle to be duplicated and used |
2343 // by another thread: |
2262 // by another thread: |
2345 { |
2264 { |
2346 return KErrNone; |
2265 return KErrNone; |
2347 } |
2266 } |
2348 else |
2267 else |
2349 { |
2268 { |
2350 //check if async request has been called |
2269 return KErrAccessDenied; |
2351 for (TInt i = 1; i < KUsbcMaxRequests; i++) |
|
2352 { |
|
2353 if (iRequestStatus[i] != NULL) |
|
2354 { |
|
2355 return KErrAccessDenied; |
|
2356 } |
|
2357 } |
|
2358 |
|
2359 if (iBuffers) |
|
2360 { |
|
2361 for (TInt i=0; i<(iNumBuffers+2); i++) |
|
2362 { |
|
2363 if (iBuffers[i].IsRequestPending()) |
|
2364 { |
|
2365 return KErrAccessDenied; |
|
2366 } |
|
2367 } |
|
2368 } |
|
2369 |
|
2370 |
|
2371 Kern::SafeClose((DObject*&)iClient, NULL); |
|
2372 iClient = aThread; |
|
2373 iClient->Open(); |
|
2374 if (iBuffers) |
|
2375 { |
|
2376 for (TInt i=0; i<(iNumBuffers+2); i++) |
|
2377 { |
|
2378 iBuffers[i].iStatusList.SetClient(*iClient); |
|
2379 } |
|
2380 } |
|
2381 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_REQUESTUSERHANDLE_DUP1, "DLddUsbcScChannel::handle %d", iChunkInfo->iChunk->AccessCount()); |
|
2382 return KErrNone; |
|
2383 } |
2270 } |
2384 } |
2271 } |
2385 |
2272 |
2386 inline TInt DLddUsbcScChannel::GetRealEpForEpResource(TInt aEndpoint, TInt& aRealEp) |
2273 inline TInt DLddUsbcScChannel::GetRealEpForEpResource(TInt aEndpoint, TInt& aRealEp) |
2387 { |
2274 { |
2446 // Read descriptor in |
2333 // Read descriptor in |
2447 TUsbcScInterfaceInfoBuf ifc_info_buf; |
2334 TUsbcScInterfaceInfoBuf ifc_info_buf; |
2448 TUsbcScInterfaceInfoBuf* const ifc_info_buf_ptr = aInfoBuf->iInterfaceData; |
2335 TUsbcScInterfaceInfoBuf* const ifc_info_buf_ptr = aInfoBuf->iInterfaceData; |
2449 const TInt srcLen = Kern::ThreadGetDesLength(iClient, ifc_info_buf_ptr); |
2336 const TInt srcLen = Kern::ThreadGetDesLength(iClient, ifc_info_buf_ptr); |
2450 |
2337 |
2451 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_SETINTERFACE, "SetInterface srcLen = %d len = %d", srcLen, ifc_info_buf.Length()); |
2338 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface srcLen = %d len = %d", srcLen, ifc_info_buf.Length() )); |
2452 |
2339 |
2453 if (srcLen < ifc_info_buf.Length()) |
2340 if (srcLen < ifc_info_buf.Length()) |
2454 { |
2341 { |
2455 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_SETINTERFACE_DUP1, "SetInterface can't copy"); |
2342 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface can't copy")); |
2456 PanicClientThread(EDesOverflow); |
2343 PanicClientThread(EDesOverflow); |
2457 } |
2344 } |
2458 |
2345 |
2459 TInt r = Kern::ThreadDesRead(iClient, ifc_info_buf_ptr, ifc_info_buf, 0, KChunkShiftBy0); |
2346 TInt r = Kern::ThreadDesRead(iClient, ifc_info_buf_ptr, ifc_info_buf, 0, KChunkShiftBy0); |
2460 if (r != KErrNone) |
2347 if (r != KErrNone) |
2461 { |
2348 { |
2462 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_SETINTERFACE_DUP2, "SetInterface Copy failed reason=%d", r); |
2349 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface Copy failed reason=%d", r)); |
2463 PanicClientThread(r); |
2350 PanicClientThread(r); |
2464 } |
2351 } |
2465 |
2352 |
2466 // The list of endpoints is within the interface info. |
2353 // The list of endpoints is within the interface info. |
2467 TUsbcScEndpointInfo* pEndpointData = ifc_info_buf().iEndpointData; |
2354 TUsbcScEndpointInfo* pEndpointData = ifc_info_buf().iEndpointData; |
2468 |
2355 |
2469 const TInt num_endpoints = ifc_info_buf().iTotalEndpointsUsed; |
2356 const TInt num_endpoints = ifc_info_buf().iTotalEndpointsUsed; |
2470 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_SETINTERFACE_DUP3, "SetInterface num_endpoints=%d", num_endpoints); |
2357 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface num_endpoints=%d", num_endpoints)); |
2471 if (num_endpoints>KMaxEndpointsPerClient) |
2358 if (num_endpoints>KMaxEndpointsPerClient) |
2472 return KErrOverflow; |
2359 return KErrOverflow; |
2473 |
2360 |
2474 |
2361 |
2475 // Initialize real ep numbers list. |
2362 // Initialize real ep numbers list. |
2478 for (i=0; i<=KMaxEndpointsPerClient; i++) |
2365 for (i=0; i<=KMaxEndpointsPerClient; i++) |
2479 real_ep_numbers[i] = -1; |
2366 real_ep_numbers[i] = -1; |
2480 |
2367 |
2481 |
2368 |
2482 // See if PIL will accept this interface |
2369 // See if PIL will accept this interface |
2483 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_SETINTERFACE_DUP4, "SetInterface Calling controller"); |
2370 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface Calling controller")); |
2484 TUsbcEndpointInfoArray endpointData = TUsbcEndpointInfoArray(ifc_info_buf().iEndpointData); |
2371 TUsbcEndpointInfoArray endpointData = TUsbcEndpointInfoArray(ifc_info_buf().iEndpointData); |
2485 |
2372 |
2486 r = iController->SetInterface(this, |
2373 r = iController->SetInterface(this, |
2487 iClient, |
2374 iClient, |
2488 aInterfaceNumber, |
2375 aInterfaceNumber, |
2491 (TInt) ifc_info_buf().iTotalEndpointsUsed, |
2378 (TInt) ifc_info_buf().iTotalEndpointsUsed, |
2492 endpointData, |
2379 endpointData, |
2493 &real_ep_numbers[0], |
2380 &real_ep_numbers[0], |
2494 ifc_info_buf().iFeatureWord); |
2381 ifc_info_buf().iFeatureWord); |
2495 |
2382 |
2496 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_SETINTERFACE_DUP5, "SetInterface controller returned %d", r); |
2383 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface controller returned %d", r)); |
2497 if (r != KErrNone) |
2384 if (r != KErrNone) |
2498 { |
2385 { |
2499 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCSCCHANNEL_SETINTERFACE_DUP6, "SetInterface failed reason=%d", r); |
2386 __KTRACE_OPT(KPANIC, Kern::Printf("SetInterface failed reason=%d", r)); |
2500 return r; |
2387 return r; |
2501 } |
2388 } |
2502 |
2389 |
2503 // create alternate setting record |
2390 // create alternate setting record |
2504 TUsbcScAlternateSetting* alternateSettingListRec = new TUsbcScAlternateSetting; |
2391 TUsbcScAlternateSetting* alternateSettingListRec = new TUsbcScAlternateSetting; |
2509 } |
2396 } |
2510 |
2397 |
2511 // other endpoints |
2398 // other endpoints |
2512 for (TInt i = 1; i <= num_endpoints; i++, pEndpointData++) |
2399 for (TInt i = 1; i <= num_endpoints; i++, pEndpointData++) |
2513 { |
2400 { |
2514 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_SETINTERFACE_DUP7, "SetInterface for ep=%d", i); |
2401 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface for ep=%d", i)); |
2402 |
|
2515 if ((pEndpointData->iType==KUsbEpTypeControl) |
2403 if ((pEndpointData->iType==KUsbEpTypeControl) |
2516 || (pEndpointData->iDir != KUsbEpDirIn && pEndpointData->iDir != KUsbEpDirOut) |
2404 || (pEndpointData->iDir != KUsbEpDirIn && pEndpointData->iDir != KUsbEpDirOut) |
2517 || (pEndpointData->iSize > 1024) || (pEndpointData->iSize<=0)) |
2405 || (pEndpointData->iSize > 1024) || (pEndpointData->iSize<=0)) |
2518 { |
2406 { |
2519 r = KErrUsbBadEndpoint; |
2407 r = KErrUsbBadEndpoint; |
2540 { |
2428 { |
2541 r = KErrNoMemory; |
2429 r = KErrNoMemory; |
2542 goto CleanUp; |
2430 goto CleanUp; |
2543 } |
2431 } |
2544 |
2432 |
2545 OstTraceDefExt3(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_SETINTERFACE_DUP8, "SetInterface for ep=%d rec=0x%08x ep==0x%08x", |
2433 |
2546 i, (TUint)alternateSettingListRec, (TUint)ep); |
2434 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface for ep=%d rec=0x%08x ep==0x%08x", |
2435 i, alternateSettingListRec, ep)); |
|
2547 } |
2436 } |
2548 |
2437 |
2549 if (iAlternateSettingList->iHead) |
2438 if (iAlternateSettingList->iHead) |
2550 { |
2439 { |
2551 iAlternateSettingList->iTail->iNext = alternateSettingListRec; |
2440 iAlternateSettingList->iTail->iNext = alternateSettingListRec; |
2575 delete alternateSettingListRec; |
2464 delete alternateSettingListRec; |
2576 //Fall Through |
2465 //Fall Through |
2577 |
2466 |
2578 ReleaseInterface: |
2467 ReleaseInterface: |
2579 #if _DEBUG |
2468 #if _DEBUG |
2580 #ifdef OST_TRACE_COMPILER_IN_USE |
|
2581 TInt r1 = iController->ReleaseInterface(this, aInterfaceNumber); |
2469 TInt r1 = iController->ReleaseInterface(this, aInterfaceNumber); |
2582 #else |
2470 __KTRACE_OPT(KUSB, Kern::Printf("Release Interface controller returned %d", r1)); |
2583 (void) iController->ReleaseInterface(this, aInterfaceNumber); |
|
2584 #endif |
|
2585 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_SETINTERFACE_DUP9, "Release Interface controller returned %d", r1); |
|
2586 #else |
2471 #else |
2587 (void) iController->ReleaseInterface(this, aInterfaceNumber); |
2472 (void) iController->ReleaseInterface(this, aInterfaceNumber); |
2588 #endif |
2473 #endif |
2589 return r; |
2474 return r; |
2590 } |
2475 } |
2598 TUint *mem= NULL; |
2483 TUint *mem= NULL; |
2599 __KTRACE_OPT(KUSB, mem = aMem); |
2484 __KTRACE_OPT(KUSB, mem = aMem); |
2600 if (mem!=NULL) |
2485 if (mem!=NULL) |
2601 { |
2486 { |
2602 TInt j; |
2487 TInt j; |
2603 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_NORMAL, _REALIZEINTERFACE_DUMP, "Final chunk header State:" ); |
2488 Kern::Printf("Final chunk header State:"); |
2604 |
2489 for (j=0; j<30; j+=8) |
2605 for (j=0; j<30; j+=8) |
2490 Kern::Printf("%2x: %8x %8x %8x %8x %8x %8x %8x %8x", j, mem[j], mem[j+1], mem[j+2], mem[j+3], mem[j+4], mem[j+5], mem[j+6], mem[j+7] ); |
2606 { |
|
2607 OstTrace1(TRACE_NORMAL, _REALIZEINTERFACE_DUMP_DUP1, "%2x", j); |
|
2608 OstTraceExt1(TRACE_NORMAL, _REALIZEINTERFACE_DUMP_DUP2, "%{uint32[]}", TOstArray<TUint>(&mem[j], 8)); |
|
2609 } |
|
2610 }; |
2491 }; |
2611 }; |
2492 }; |
2612 #endif |
2493 #endif |
2613 |
2494 |
2614 |
2495 |
2695 // Create K-side buffer table |
2576 // Create K-side buffer table |
2696 if (!iBuffers) |
2577 if (!iBuffers) |
2697 iBuffers = (TUsbcScBuffer *) Kern::AllocZ(sizeof(TUsbcScBuffer) * (bufInfo.iTotalBuffers+2)); // +2 is for ep0. |
2578 iBuffers = (TUsbcScBuffer *) Kern::AllocZ(sizeof(TUsbcScBuffer) * (bufInfo.iTotalBuffers+2)); // +2 is for ep0. |
2698 if (!iBuffers) |
2579 if (!iBuffers) |
2699 { |
2580 { |
2700 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_REALIZEINTERFACE, "Realize: Error: Alloc iBufers failed!" ); |
2581 __KTRACE_OPT(KUSB, Kern::Printf("Realize: Error: Alloc iBufers failed!")); |
2701 |
|
2702 errorOrChunk = KErrNoMemory; |
2582 errorOrChunk = KErrNoMemory; |
2703 goto realize_end; |
2583 goto realize_end; |
2704 } |
2584 } |
2705 |
2585 |
2706 |
2586 |
2707 errorOrChunk = SetupEp0(); |
2587 errorOrChunk = SetupEp0(); |
2708 if (errorOrChunk) |
2588 if (errorOrChunk) |
2709 { |
2589 { |
2710 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_REALIZEINTERFACE_DUP1, "Realize: SetupEp0 . ERROR %d",errorOrChunk); |
2590 __KTRACE_OPT(KUSB, Kern::Printf("Realize: SetupEp0 . ERROR %d",errorOrChunk)); |
2711 goto realize_end; |
2591 goto realize_end; |
2712 } |
2592 } |
2713 |
2593 |
2714 ep0Size = iEp0Endpoint->EndpointInfo()->iSize; |
2594 ep0Size = iEp0Endpoint->EndpointInfo()->iSize; |
2715 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_REALIZEINTERFACE_DUP2, "Realize: Setup EP0. max packet size %d", ep0Size); |
2595 __KTRACE_OPT(KUSB, Kern::Printf("Realize: Setup EP0. max packet size %d", ep0Size)); |
2596 |
|
2716 // Create EP0 buffers |
2597 // Create EP0 buffers |
2717 iEP0OutBuff=bufInfo.iTotalBuffers; |
2598 iEP0OutBuff=bufInfo.iTotalBuffers; |
2718 errorOrChunk = iBuffers[iEP0OutBuff].Construct(KUsbcScBiOut, this, KUsbScEP0OutBufPos, KUsbScEP0OutBufEnd, ep0Size, ep0Size, ep0Size); |
2599 errorOrChunk = iBuffers[iEP0OutBuff].Construct(KUsbcScBiOut, this, KUsbScEP0OutBufPos, KUsbScEP0OutBufEnd, ep0Size, ep0Size, ep0Size); |
2719 if (errorOrChunk) |
2600 if (errorOrChunk) |
2720 { |
2601 { |
2721 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_REALIZEINTERFACE_DUP3, "Realize: Setup EP0 Out. ERROR %d",errorOrChunk); |
2602 __KTRACE_OPT(KUSB, Kern::Printf("Realize: Setup EP0 Out. ERROR %d",errorOrChunk)); |
2722 goto realize_end; |
2603 goto realize_end; |
2723 } |
2604 } |
2724 |
2605 |
2725 iBuffers[iEP0OutBuff].CreateChunkBufferHeader(); |
2606 iBuffers[iEP0OutBuff].CreateChunkBufferHeader(); |
2726 iBuffers[iEP0OutBuff].iCallback = iEp0Endpoint->iRequestCallbackInfo; |
2607 iBuffers[iEP0OutBuff].iCallback = iEp0Endpoint->iRequestCallbackInfo; |
2731 |
2612 |
2732 iEP0InBuff=bufInfo.iTotalBuffers+1; |
2613 iEP0InBuff=bufInfo.iTotalBuffers+1; |
2733 errorOrChunk = iBuffers[iEP0InBuff].Construct( KUsbcScBiIn , this, KUsbScEP0InBufPos , KUsbScEP0InBufEnd , ep0Size, ep0Size, ep0Size); |
2614 errorOrChunk = iBuffers[iEP0InBuff].Construct( KUsbcScBiIn , this, KUsbScEP0InBufPos , KUsbScEP0InBufEnd , ep0Size, ep0Size, ep0Size); |
2734 if (errorOrChunk) |
2615 if (errorOrChunk) |
2735 { |
2616 { |
2736 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_REALIZEINTERFACE_DUP4, "Realize: Setup EP0 In. ERROR %d",errorOrChunk); |
2617 __KTRACE_OPT(KUSB, Kern::Printf("Realize: Setup EP0 In. ERROR %d",errorOrChunk)); |
2737 goto realize_end; |
2618 goto realize_end; |
2738 } |
2619 } |
2739 |
2620 |
2740 iBuffers[iEP0InBuff].iCallback = iEp0Endpoint->iRequestCallbackInfo; |
2621 iBuffers[iEP0InBuff].iCallback = iEp0Endpoint->iRequestCallbackInfo; |
2741 |
2622 |
2745 |
2626 |
2746 |
2627 |
2747 } // end ep0Size scope |
2628 } // end ep0Size scope |
2748 |
2629 |
2749 // Create resources and tables. . . . . . |
2630 // Create resources and tables. . . . . . |
2750 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_REALIZEINTERFACE_DUP5, "Realize: Create resources tables"); |
2631 __KTRACE_OPT(KUSB, Kern::Printf("Realize: Create resources tables")); |
2632 |
|
2751 { // scope of bufNum |
2633 { // scope of bufNum |
2752 // For each EP buffer |
2634 // For each EP buffer |
2753 TInt buffNum=0; |
2635 TInt buffNum=0; |
2754 TInt buffMinSize; |
2636 TInt buffMinSize; |
2755 TInt endpointNumber; |
2637 TInt endpointNumber; |
2767 TInt needed = bufInfo.iBufs[inout].iSizes[endpoint]; |
2649 TInt needed = bufInfo.iBufs[inout].iSizes[endpoint]; |
2768 if (needed) |
2650 if (needed) |
2769 { |
2651 { |
2770 TInt bufStart = offset; |
2652 TInt bufStart = offset; |
2771 |
2653 |
2772 OstTraceDefExt4(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_REALIZEINTERFACE_DUP6, "Realize: buf row:%d inout %d, iBufferOffset[%d+2]=%x",endpoint, (TUint)inout, (TUint)buffNum, (TUint)bufStart); |
2654 __KTRACE_OPT(KUSB, Kern::Printf("Realize: buf row:%d inout %d, iBufferOffset[%d+2]=%x",endpoint, inout, buffNum, bufStart)); |
2655 |
|
2773 bufsd = &(bufInfo.iBufs[inout]); |
2656 bufsd = &(bufInfo.iBufs[inout]); |
2774 // and then point all endpoints that use it, towards it. |
2657 // and then point all endpoints that use it, towards it. |
2775 TInt altSetting; |
2658 TInt altSetting; |
2776 TUint maxReadSize = ~0; |
2659 TUint maxReadSize = ~0; |
2777 for (altSetting=0; altSetting < bufInfo.iAltSettings; altSetting++) |
2660 for (altSetting=0; altSetting < bufInfo.iAltSettings; altSetting++) |
2797 |
2680 |
2798 epRecord->iType = (inout+1) | (epType<<2); |
2681 epRecord->iType = (inout+1) | (epType<<2); |
2799 |
2682 |
2800 if (endpointRecord->EndpointInfo()->iReadSize) |
2683 if (endpointRecord->EndpointInfo()->iReadSize) |
2801 maxReadSize = (maxReadSize <= endpointRecord->EndpointInfo()->iReadSize) ? maxReadSize : endpointRecord->EndpointInfo()->iReadSize; |
2684 maxReadSize = (maxReadSize <= endpointRecord->EndpointInfo()->iReadSize) ? maxReadSize : endpointRecord->EndpointInfo()->iReadSize; |
2802 OstTraceDefExt3(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_REALIZEINTERFACE_DUP7, "Realize: endpointNum %d in altSetting %d, alt table @ %d", |
2685 |
2803 endpointNumber, (TUint)altSetting,bufInfo.iAltSettingsTbl->iAltTableOffset[altSetting]); |
2686 __KTRACE_OPT(KUSB, Kern::Printf("Realize: endpointNum %d in altSetting %d, alt table @ %d", |
2804 |
2687 endpointNumber, altSetting,bufInfo.iAltSettingsTbl->iAltTableOffset[altSetting])); |
2805 } |
2688 } |
2806 else |
2689 else |
2807 { |
2690 { |
2808 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_REALIZEINTERFACE_DUP8, "Realize: endpointNum NA in altSetting %d", altSetting); |
2691 __KTRACE_OPT(KUSB, Kern::Printf("Realize: endpointNum NA in altSetting %d", altSetting)); |
2809 } |
2692 } |
2810 |
2693 |
2811 } // end for |
2694 } // end for |
2812 |
2695 |
2813 |
2696 |
2875 #ifdef _DEBUG |
2758 #ifdef _DEBUG |
2876 RealizeInterface_Dump((TUint*) iChunkInfo->iChunkMem); // Debug only tracing |
2759 RealizeInterface_Dump((TUint*) iChunkInfo->iChunkMem); // Debug only tracing |
2877 #endif |
2760 #endif |
2878 |
2761 |
2879 realize_end: |
2762 realize_end: |
2880 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_REALIZEINTERFACE_DUP9, "Realize: cleanup. Err=%d", errorOrChunk); |
2763 __KTRACE_OPT(KUSB, Kern::Printf("Realize: cleanup. Err=%d", errorOrChunk)); |
2881 // Here we clean up after either success, or after bailing out early. |
2764 // Here we clean up after either success, or after bailing out early. |
2882 |
2765 |
2883 bufInfo.Free(); |
2766 bufInfo.Free(); |
2884 |
2767 |
2885 if (iChunkInfo) |
2768 if (iChunkInfo) |
2918 |
2801 |
2919 } // endif iChunkInfo |
2802 } // endif iChunkInfo |
2920 if (openedCS) |
2803 if (openedCS) |
2921 NKern::ThreadLeaveCS(); |
2804 NKern::ThreadLeaveCS(); |
2922 |
2805 |
2923 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_REALIZEINTERFACE_DUP10, "Realize: returning %x (%d)", errorOrChunk, errorOrChunk); |
2806 __KTRACE_OPT(KUSB, Kern::Printf("Realize: returning %x (%d)", errorOrChunk, errorOrChunk)); |
2924 return errorOrChunk; |
2807 return errorOrChunk; |
2925 } // End RealizeInterface |
2808 } // End RealizeInterface |
2926 |
2809 |
2927 |
2810 |
2928 // |
2811 // |
2929 // DestroyAllInterfaces |
2812 // DestroyAllInterfaces |
2930 // |
2813 // |
2931 |
2814 |
2932 void DLddUsbcScChannel::DestroyAllInterfaces() |
2815 void DLddUsbcScChannel::DestroyAllInterfaces() |
2933 { |
2816 { |
2934 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, DLDDUSBCSCCHANNEL_DESTROYALLINTERFACES, "DLddUsbcScChannel::DestroyAllInterfaces" ); |
2817 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcScChannel::DestroyAllInterfaces")); |
2935 |
|
2936 // Removes all interfaces |
2818 // Removes all interfaces |
2937 if (iAlternateSettingList) |
2819 if (iAlternateSettingList) |
2938 { |
2820 { |
2939 if (iAlternateSettingList->iHead != NULL) |
2821 if (iAlternateSettingList->iHead != NULL) |
2940 { |
2822 { |
2941 TUsbcScAlternateSetting* alternateSettingListRec = iAlternateSettingList->iTail; |
2823 TUsbcScAlternateSetting* alternateSettingListRec = iAlternateSettingList->iTail; |
2942 while (alternateSettingListRec) |
2824 while (alternateSettingListRec) |
2943 { |
2825 { |
2944 iAlternateSettingList->iTail = alternateSettingListRec->iPrevious; |
2826 iAlternateSettingList->iTail = alternateSettingListRec->iPrevious; |
2945 // If this contains NULL now that is only possible if the record to be deleted was at the head |
2827 // If this contains NULL now that is only possible if the record to be deleted was at the head |
2946 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DESTROYALLINTERFACES_DUP1, "Release interface %d \n", alternateSettingListRec->iSetting); |
2828 __KTRACE_OPT(KUSB, Kern::Printf("Release interface %d \n", alternateSettingListRec->iSetting)); |
2947 iController->ReleaseInterface(this, alternateSettingListRec->iSetting); |
2829 iController->ReleaseInterface(this, alternateSettingListRec->iSetting); |
2948 delete alternateSettingListRec; |
2830 delete alternateSettingListRec; |
2949 if (iAlternateSettingList->iTail == NULL) //No more interfaces left |
2831 if (iAlternateSettingList->iTail == NULL) //No more interfaces left |
2950 break; |
2832 break; |
2951 else |
2833 else |
2960 |
2842 |
2961 iNumberOfEndpoints = 0; |
2843 iNumberOfEndpoints = 0; |
2962 iAlternateSettingList = NULL; |
2844 iAlternateSettingList = NULL; |
2963 iValidInterface = EFalse; |
2845 iValidInterface = EFalse; |
2964 |
2846 |
2965 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DESTROYALLINTERFACES_DUP2, "DLddUsbcScChannel::DestroyAllInterfaces done"); |
2847 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcScChannel::DestroyAllInterfaces done")); |
2966 } |
2848 } |
2967 |
2849 |
2968 |
2850 |
2969 |
2851 |
2970 |
2852 |
2973 // DestroyInterface |
2855 // DestroyInterface |
2974 // |
2856 // |
2975 |
2857 |
2976 void DLddUsbcScChannel::DestroyInterface(TUint aInterfaceNumber) |
2858 void DLddUsbcScChannel::DestroyInterface(TUint aInterfaceNumber) |
2977 { |
2859 { |
2978 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, DLDDUSBCSCCHANNEL_DESTROYINTERFACE, "DLddUsbcScChannel::DestroyInterface \n" ); |
2860 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcScChannel::DestroyInterface \n")); |
2979 |
2861 |
2980 if (iAlternateSetting == aInterfaceNumber) |
2862 if (iAlternateSetting == aInterfaceNumber) |
2981 { |
2863 { |
2982 ResetInterface(KErrUsbInterfaceNotReady); |
2864 ResetInterface(KErrUsbInterfaceNotReady); |
2983 iValidInterface = EFalse; |
2865 iValidInterface = EFalse; |
3003 iAlternateSettingList->iTail = alternateSettingListRecFound->iPrevious; |
2885 iAlternateSettingList->iTail = alternateSettingListRecFound->iPrevious; |
3004 iAlternateSettingList->iTail->iNext = NULL; |
2886 iAlternateSettingList->iTail->iNext = NULL; |
3005 } |
2887 } |
3006 else //Somewhere in the middle (would not expect this in normal operation, but here for completeness) |
2888 else //Somewhere in the middle (would not expect this in normal operation, but here for completeness) |
3007 { |
2889 { |
3008 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DESTROYINTERFACE_DUP1, "DLddUsbcScChannel::DestroyInterface Middle interface!\n" ); |
2890 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcScChannel::DestroyInterface Middle interface!\n")); |
3009 alternateSettingListRec->iPrevious->iNext = alternateSettingListRec->iNext; |
2891 alternateSettingListRec->iPrevious->iNext = alternateSettingListRec->iNext; |
3010 alternateSettingListRec->iNext->iPrevious = alternateSettingListRec->iPrevious; |
2892 alternateSettingListRec->iNext->iPrevious = alternateSettingListRec->iPrevious; |
3011 } |
2893 } |
3012 |
2894 |
3013 delete alternateSettingListRecFound; |
2895 delete alternateSettingListRecFound; |
3053 // DestroyEp0 |
2935 // DestroyEp0 |
3054 // |
2936 // |
3055 |
2937 |
3056 void DLddUsbcScChannel::DestroyEp0() |
2938 void DLddUsbcScChannel::DestroyEp0() |
3057 { |
2939 { |
3058 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, DLDDUSBCSCCHANNEL_DESTROYEP0, "DLddUsbcScChannel::DestroyEp0" ); |
2940 __KTRACE_OPT(KUSB, Kern::Printf(" DLddUsbcScChannel::DestroyEp0")); |
3059 |
|
3060 delete iEp0Endpoint; |
2941 delete iEp0Endpoint; |
3061 iEp0Endpoint = NULL; |
2942 iEp0Endpoint = NULL; |
3062 } |
2943 } |
3063 |
2944 |
3064 |
2945 |
3065 void DLddUsbcScChannel::RequestCallbackEp0(TAny* aDLddUsbcScChannel) |
2946 void DLddUsbcScChannel::RequestCallbackEp0(TAny* aDLddUsbcScChannel) |
3066 { |
2947 { |
3067 DLddUsbcScChannel* channel = (DLddUsbcScChannel*) aDLddUsbcScChannel; |
2948 DLddUsbcScChannel* channel = (DLddUsbcScChannel*) aDLddUsbcScChannel; |
3068 |
2949 |
3069 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, DLDDUSBCSCCHANNEL_REQUESTCALLBACKEP0, "DLddUsbcScChannel::RequestCallbackEp0" ); |
2950 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcScChannel::RequestCallbackEp0")); |
3070 |
|
3071 |
2951 |
3072 if (channel->ChannelClosing()) |
2952 if (channel->ChannelClosing()) |
3073 { |
2953 { |
3074 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_REQUESTCALLBACKEP0_DUP1, "Channel Closing: Completion not accepted!" ); |
2954 __KTRACE_OPT(KUSB, Kern::Printf("Channel Closing: Completion not accepted!")); |
3075 return; |
2955 return; |
3076 } |
2956 } |
3077 |
2957 |
3078 switch (channel->iEp0Endpoint->iRequestCallbackInfo->iTransferDir) |
2958 switch (channel->iEp0Endpoint->iRequestCallbackInfo->iTransferDir) |
3079 { |
2959 { |
3082 return; |
2962 return; |
3083 case EControllerRead: |
2963 case EControllerRead: |
3084 channel->iBuffers[channel->iEP0OutBuff].CompleteRead(); |
2964 channel->iBuffers[channel->iEP0OutBuff].CompleteRead(); |
3085 return; |
2965 return; |
3086 default: |
2966 default: |
3087 OstTrace1(TRACE_NORMAL, DLDDUSBCSCCHANNEL_REQUESTCALLBACKEP0_DUP2, "DLddUsbcScChannel::RequestCallbackEp0 - Unexpected completion direction %d",channel->iEp0Endpoint->iRequestCallbackInfo->iTransferDir); |
2967 Kern::Printf("DLddUsbcScChannel::RequestCallbackEp0 - Unexpected completion direction %d",channel->iEp0Endpoint->iRequestCallbackInfo->iTransferDir); |
3088 Kern::Fault("DLddUsbcScChannel::RequestCallbackEp0", __LINE__); |
2968 Kern::Fault("DLddUsbcScChannel::RequestCallbackEp0", __LINE__); |
3089 } |
2969 } |
3090 } |
2970 } |
3091 |
2971 |
3092 |
2972 |
3098 // EndpointStatusChangeCallback |
2978 // EndpointStatusChangeCallback |
3099 // |
2979 // |
3100 |
2980 |
3101 void DLddUsbcScChannel::EndpointStatusChangeCallback(TAny* aDLddUsbcScChannel) |
2981 void DLddUsbcScChannel::EndpointStatusChangeCallback(TAny* aDLddUsbcScChannel) |
3102 { |
2982 { |
3103 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, DLDDUSBCSCCHANNEL_ENDPOINTSTATUSCHANGECALLBACK, "DLddUsbcScChannel::EndpointStatusChangeCallback" ); |
2983 __KTRACE_OPT(KUSB, Kern::Printf("EndpointStatusChangeCallback")); |
3104 |
|
3105 DLddUsbcScChannel* dUsbc = (DLddUsbcScChannel*) aDLddUsbcScChannel; |
2984 DLddUsbcScChannel* dUsbc = (DLddUsbcScChannel*) aDLddUsbcScChannel; |
3106 if (dUsbc->iChannelClosing) |
2985 if (dUsbc->iChannelClosing) |
3107 return; |
2986 return; |
3108 TUint endpointState = dUsbc->iEndpointStatusCallbackInfo.State(); |
2987 TUint endpointState = dUsbc->iEndpointStatusCallbackInfo.State(); |
3109 const TInt reqNo = (TInt) RDevUsbcScClient::ERequestEndpointStatusNotify; |
2988 const TInt reqNo = (TInt) RDevUsbcScClient::ERequestEndpointStatusNotify; |
3110 if (dUsbc->iRequestStatus[reqNo]) |
2989 if (dUsbc->iRequestStatus[reqNo]) |
3111 { |
2990 { |
3112 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_ENDPOINTSTATUSCHANGECALLBACK_DUP1, "EndpointStatusChangeCallback Notify status" ); |
2991 __KTRACE_OPT(KUSB, Kern::Printf("EndpointStatusChangeCallback Notify status")); |
3113 DThread* client = dUsbc->iClient; |
2992 DThread* client = dUsbc->iClient; |
3114 // set client descriptor length to zero |
2993 // set client descriptor length to zero |
3115 TInt r = Kern::ThreadRawWrite(client, dUsbc->iEndpointStatusChangePtr, &endpointState, |
2994 TInt r = Kern::ThreadRawWrite(client, dUsbc->iEndpointStatusChangePtr, &endpointState, |
3116 sizeof(TUint), client); |
2995 sizeof(TUint), client); |
3117 if (r != KErrNone) |
2996 if (r != KErrNone) |
3136 TInt i; |
3015 TInt i; |
3137 for (i = 0; |
3016 for (i = 0; |
3138 (i < KUsbcDeviceStateRequests) && ((deviceState = dUsbc->iStatusCallbackInfo.State(i)) != EUsbcNoState); |
3017 (i < KUsbcDeviceStateRequests) && ((deviceState = dUsbc->iStatusCallbackInfo.State(i)) != EUsbcNoState); |
3139 ++i) |
3018 ++i) |
3140 { |
3019 { |
3141 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_STATUSCHANGECALLBACK, "StatusChangeCallBack status=%d", deviceState); |
3020 __KTRACE_OPT(KUSB, Kern::Printf("StatusChangeCallBack status=%d", deviceState)); |
3142 |
|
3143 if (deviceState & KUsbAlternateSetting) |
3021 if (deviceState & KUsbAlternateSetting) |
3144 { |
3022 { |
3145 dUsbc->ProcessAlternateSetting(deviceState); |
3023 dUsbc->ProcessAlternateSetting(deviceState); |
3146 } |
3024 } |
3147 else |
3025 else |
3148 { |
3026 { |
3149 dUsbc->ProcessDeviceState(deviceState); |
3027 dUsbc->ProcessDeviceState(deviceState); |
3150 // Send Status to EP0 buffer. |
3028 // Send Status to EP0 buffer. |
3151 dUsbc->iBuffers[dUsbc->iEP0OutBuff].SendEp0StatusPacket(deviceState); |
3029 // Before the client calls RDevUsbcScClient::FinalizeInterface(), |
3030 // this function might be called. |
|
3031 // So we add a guard for dUsbc->iBuffers |
|
3032 if( dUsbc->iBuffers ) |
|
3033 { |
|
3034 dUsbc->iBuffers[dUsbc->iEP0OutBuff].SendEp0StatusPacket(deviceState); |
|
3035 } |
|
3152 } |
3036 } |
3153 |
3037 |
3154 // Only queue if userside is interested |
3038 // Only queue if userside is interested |
3155 if (dUsbc->iDeviceStatusNeeded) |
3039 if (dUsbc->iDeviceStatusNeeded) |
3156 { |
3040 { |
3167 } |
3051 } |
3168 |
3052 |
3169 |
3053 |
3170 void DLddUsbcScChannel::OtgFeatureChangeCallback(TAny* aDLddUsbcScChannel) |
3054 void DLddUsbcScChannel::OtgFeatureChangeCallback(TAny* aDLddUsbcScChannel) |
3171 { |
3055 { |
3172 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, DLDDUSBCSCCHANNEL_OTGFEATURECHANGECALLBACK, "DLddUsbcScChannel::OtgFeatureChangeCallback" ); |
3056 __KTRACE_OPT(KUSB, Kern::Printf("OtgFeatureChangeCallback")); |
3173 |
|
3174 DLddUsbcScChannel* dUsbc = (DLddUsbcScChannel*) aDLddUsbcScChannel; |
3057 DLddUsbcScChannel* dUsbc = (DLddUsbcScChannel*) aDLddUsbcScChannel; |
3175 if (dUsbc->iChannelClosing) |
3058 if (dUsbc->iChannelClosing) |
3176 return; |
3059 return; |
3177 |
3060 |
3178 TUint8 features; |
3061 TUint8 features; |
3180 dUsbc->iController->GetCurrentOtgFeatures(features); |
3063 dUsbc->iController->GetCurrentOtgFeatures(features); |
3181 |
3064 |
3182 const TInt reqNo = (TInt) RDevUsbcScClient::ERequestOtgFeaturesNotify; |
3065 const TInt reqNo = (TInt) RDevUsbcScClient::ERequestOtgFeaturesNotify; |
3183 if (dUsbc->iRequestStatus[reqNo]) |
3066 if (dUsbc->iRequestStatus[reqNo]) |
3184 { |
3067 { |
3185 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_OTGFEATURECHANGECALLBACK_DUP1, "OtgFeatureChangeCallback Notify status" ); |
3068 __KTRACE_OPT(KUSB, Kern::Printf("OtgFeatureChangeCallback Notify status")); |
3186 TInt r = Kern::ThreadRawWrite(dUsbc->iClient, dUsbc->iOtgFeatureChangePtr, |
3069 TInt r = Kern::ThreadRawWrite(dUsbc->iClient, dUsbc->iOtgFeatureChangePtr, |
3187 &features, sizeof(TUint8), dUsbc->iClient); |
3070 &features, sizeof(TUint8), dUsbc->iClient); |
3188 if (r != KErrNone) |
3071 if (r != KErrNone) |
3189 dUsbc->PanicClientThread(r); |
3072 dUsbc->PanicClientThread(r); |
3190 Kern::RequestComplete(dUsbc->iClient, dUsbc->iRequestStatus[reqNo], r); |
3073 Kern::RequestComplete(dUsbc->iClient, dUsbc->iRequestStatus[reqNo], r); |
3258 { |
3141 { |
3259 return alternateSettingListRec->iEndpoint[aEndpoint]->RealEpNumber(); |
3142 return alternateSettingListRec->iEndpoint[aEndpoint]->RealEpNumber(); |
3260 } |
3143 } |
3261 else |
3144 else |
3262 { |
3145 { |
3263 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCSCCHANNEL_EPFROMALTERNATESETTING, " Error: aEndpoint %d wrong for aAlternateSetting %d", |
3146 __KTRACE_OPT(KPANIC, Kern::Printf(" Error: aEndpoint %d wrong for aAlternateSetting %d", |
3264 aEndpoint, aAlternateSetting); |
3147 aEndpoint, aAlternateSetting)); |
3265 |
|
3266 return KErrNotFound; |
3148 return KErrNotFound; |
3267 } |
3149 } |
3268 } |
3150 } |
3269 alternateSettingListRec = alternateSettingListRec->iNext; |
3151 alternateSettingListRec = alternateSettingListRec->iNext; |
3270 } |
3152 } |
3271 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCSCCHANNEL_EPFROMALTERNATESETTING_DUP1, " Error: no aAlternateSetting %d found", aAlternateSetting); |
3153 __KTRACE_OPT(KPANIC, Kern::Printf(" Error: no aAlternateSetting %d found", aAlternateSetting)); |
3272 return KErrNotFound; |
3154 return KErrNotFound; |
3273 } |
3155 } |
3274 |
3156 |
3275 // |
3157 // |
3276 // ProcessAlternateSetting |
3158 // ProcessAlternateSetting |
3278 |
3160 |
3279 TInt DLddUsbcScChannel::ProcessAlternateSetting(TUint aAlternateSetting) |
3161 TInt DLddUsbcScChannel::ProcessAlternateSetting(TUint aAlternateSetting) |
3280 { |
3162 { |
3281 |
3163 |
3282 TUint newSetting = aAlternateSetting&(~KUsbAlternateSetting); |
3164 TUint newSetting = aAlternateSetting&(~KUsbAlternateSetting); |
3283 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_PROCESSALTERNATESETTING, "ProcessAlternateSetting 0x%08x selecting alternate setting 0x%08x", aAlternateSetting, newSetting); |
3165 __KTRACE_OPT(KUSB, Kern::Printf("ProcessAlternateSetting 0x%08x selecting alternate setting 0x%08x", aAlternateSetting, newSetting)); |
3284 |
|
3285 iUserKnowsAltSetting=EFalse; |
3166 iUserKnowsAltSetting=EFalse; |
3286 iAlternateSetting = newSetting; |
3167 iAlternateSetting = newSetting; |
3287 iAsSeq++; |
3168 iAsSeq++; |
3288 |
3169 |
3289 ResetInterface(KErrUsbInterfaceChange); // kill any outstanding IN transfers |
3170 ResetInterface(KErrUsbInterfaceChange); // kill any outstanding IN transfers |
3303 // |
3184 // |
3304 // Called from StatusChangeCallback. |
3185 // Called from StatusChangeCallback. |
3305 |
3186 |
3306 TInt DLddUsbcScChannel::ProcessDeviceState(TUsbcDeviceState aDeviceState) |
3187 TInt DLddUsbcScChannel::ProcessDeviceState(TUsbcDeviceState aDeviceState) |
3307 { |
3188 { |
3308 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_PROCESSDEVICESTATE, "DLddUsbcScChannel::ProcessDeviceState(%d -> %d)", iDeviceState, aDeviceState); |
3189 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcScChannel::ProcessDeviceState(%d -> %d)", iDeviceState, aDeviceState)); |
3309 |
|
3310 if (iDeviceState == aDeviceState) |
3190 if (iDeviceState == aDeviceState) |
3311 { |
3191 { |
3312 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_PROCESSDEVICESTATE_DUP1, " No state change => nothing to be done."); |
3192 __KTRACE_OPT(KUSB, Kern::Printf(" No state change => nothing to be done.")); |
3313 return KErrNone; |
3193 return KErrNone; |
3314 } |
3194 } |
3315 if (iDeviceState == EUsbcDeviceStateSuspended) |
3195 if (iDeviceState == EUsbcDeviceStateSuspended) |
3316 { |
3196 { |
3317 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_PROCESSDEVICESTATE_DUP2, " Coming out of Suspend: old state = %d", iOldDeviceState); |
3197 __KTRACE_OPT(KUSB, Kern::Printf(" Coming out of Suspend: old state = %d", iOldDeviceState)); |
3318 iDeviceState = iOldDeviceState; |
3198 iDeviceState = iOldDeviceState; |
3319 if (iDeviceState == aDeviceState) |
3199 if (iDeviceState == aDeviceState) |
3320 { |
3200 { |
3321 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_PROCESSDEVICESTATE_DUP3, " New state same as before Suspend => nothing to be done."); |
3201 __KTRACE_OPT(KUSB, Kern::Printf(" New state same as before Suspend => nothing to be done.")); |
3322 return KErrNone; |
3202 return KErrNone; |
3323 } |
3203 } |
3324 } |
3204 } |
3325 TBool renumerateState = (aDeviceState == EUsbcDeviceStateConfigured); |
3205 TBool renumerateState = (aDeviceState == EUsbcDeviceStateConfigured); |
3326 TBool deconfigured = EFalse; |
3206 TBool deconfigured = EFalse; |
3327 TInt cancellationCode = KErrNone; |
3207 TInt cancellationCode = KErrNone; |
3328 if (aDeviceState == EUsbcDeviceStateSuspended) |
3208 if (aDeviceState == EUsbcDeviceStateSuspended) |
3329 { |
3209 { |
3330 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_PROCESSDEVICESTATE_DUP4, " Suspending..."); |
3210 __KTRACE_OPT(KUSB, Kern::Printf(" Suspending...")); |
3331 iOldDeviceState = iDeviceState; |
3211 iOldDeviceState = iDeviceState; |
3332 // Put PSL into low power mode here |
3212 // Put PSL into low power mode here |
3333 } |
3213 } |
3334 else |
3214 else |
3335 { |
3215 { |
3357 { |
3237 { |
3358 DeConfigure(cancellationCode); |
3238 DeConfigure(cancellationCode); |
3359 } |
3239 } |
3360 else if (renumerateState) |
3240 else if (renumerateState) |
3361 { |
3241 { |
3362 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_PROCESSDEVICESTATE_DUP5, "TUsbcScChannel:: Reumerated!"); |
3242 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScChannel:: Reumerated!")); |
3363 // Select main interface & latch in new endpoint set |
3243 // Select main interface & latch in new endpoint set |
3364 SelectAlternateSetting(0); |
3244 SelectAlternateSetting(0); |
3365 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_PROCESSDEVICESTATE_DUP6, "TUsbcScChannel:: StartReads!"); |
3245 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScChannel:: StartReads!")); |
3366 StartEpReads(); |
3246 StartEpReads(); |
3367 } |
3247 } |
3368 } |
3248 } |
3369 |
3249 |
3370 const TInt reqNo = (TInt) RDevUsbcScClient::ERequestReEnumerate; |
3250 const TInt reqNo = (TInt) RDevUsbcScClient::ERequestReEnumerate; |
3388 TUint32 deviceState; |
3268 TUint32 deviceState; |
3389 if (iStatusFifo->GetDeviceQueuedStatus(deviceState) == KErrNone) |
3269 if (iStatusFifo->GetDeviceQueuedStatus(deviceState) == KErrNone) |
3390 { |
3270 { |
3391 // Device state waiting to be sent userside |
3271 // Device state waiting to be sent userside |
3392 completeNow = ETrue; |
3272 completeNow = ETrue; |
3393 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_ALTERNATEDEVICESTATETESTCOMPLETE, "StatusChangeCallback Notify status" ); |
3273 __KTRACE_OPT(KUSB, Kern::Printf("StatusChangeCallback Notify status")); |
3394 |
|
3395 // set client descriptor length to zero |
3274 // set client descriptor length to zero |
3396 TInt r = Kern::ThreadRawWrite(iClient, iStatusChangePtr, &deviceState, |
3275 TInt r = Kern::ThreadRawWrite(iClient, iStatusChangePtr, &deviceState, |
3397 sizeof(TUint32), iClient); |
3276 sizeof(TUint32), iClient); |
3398 if (r != KErrNone) |
3277 if (r != KErrNone) |
3399 PanicClientThread(r); |
3278 PanicClientThread(r); |
3404 } |
3283 } |
3405 |
3284 |
3406 |
3285 |
3407 void DLddUsbcScChannel::DeConfigure(TInt aErrorCode) |
3286 void DLddUsbcScChannel::DeConfigure(TInt aErrorCode) |
3408 { |
3287 { |
3409 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, DLDDUSBCSCCHANNEL_DECONFIGURE, "DLddUsbcScChannel::DeConfigure()" ); |
3288 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcScChannel::DeConfigure()")); |
3410 |
|
3411 // Called after deconfiguration. Cancels transfers on all endpoints. |
3289 // Called after deconfiguration. Cancels transfers on all endpoints. |
3412 ResetInterface(aErrorCode); |
3290 ResetInterface(aErrorCode); |
3413 // Cancel the endpoint status notify request if it is outstanding. |
3291 // Cancel the endpoint status notify request if it is outstanding. |
3414 const TInt KEpNotReq = RDevUsbcScClient::ERequestEndpointStatusNotify; |
3292 const TInt KEpNotReq = RDevUsbcScClient::ERequestEndpointStatusNotify; |
3415 if (iRequestStatus[KEpNotReq]) |
3293 if (iRequestStatus[KEpNotReq]) |
3425 |
3303 |
3426 void DLddUsbcScChannel::StartEpReads() |
3304 void DLddUsbcScChannel::StartEpReads() |
3427 { |
3305 { |
3428 // Queued after enumeration. Starts reads on all endpoints. |
3306 // Queued after enumeration. Starts reads on all endpoints. |
3429 // The endpoint itself decides if it can do a read |
3307 // The endpoint itself decides if it can do a read |
3430 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, DLDDUSBCSCCHANNEL_STARTEPREADS, "DLddUsbcScChannel::StartEpReads - 1" ); |
3308 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcScChannel::StartEpReads - 1")); |
3431 |
3309 |
3432 TInt i; |
3310 TInt i; |
3433 TInt8 needsPacket; |
3311 TInt8 needsPacket; |
3434 |
3312 |
3435 for (i=0; i<iNumBuffers; i++) |
3313 for (i=0; i<iNumBuffers; i++) |
3436 { |
3314 { |
3437 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_STARTEPREADS_DUP1, "DLddUsbcScChannel::StartEpReads - 2 %d", i); |
3315 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcScChannel::StartEpReads - 2 %d",i)); |
3316 |
|
3438 needsPacket = iBuffers[i].iNeedsPacket; |
3317 needsPacket = iBuffers[i].iNeedsPacket; |
3439 if (needsPacket) |
3318 if (needsPacket) |
3440 { |
3319 { |
3441 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_STARTEPREADS_DUP2, "DLddUsbcScChannel::StartEpReads - 3"); |
3320 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcScChannel::StartEpReads - 3")); |
3442 iBuffers[i].UpdateBufferList(0,0,(needsPacket==TUsbcScBuffer::KEpIsStarting)); |
3321 iBuffers[i].UpdateBufferList(0,0,(needsPacket==TUsbcScBuffer::KEpIsStarting)); |
3443 } |
3322 } |
3444 } |
3323 } |
3445 |
3324 |
3446 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_STARTEPREADS_DUP3, "DLddUsbcScChannel::StartEpReads - 4"); |
3325 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcScChannel::StartEpReads - 4")); |
3326 |
|
3447 // now update ep0 |
3327 // now update ep0 |
3448 iBuffers[iEP0OutBuff].Ep0CancelLddRead(); |
3328 iBuffers[iEP0OutBuff].Ep0CancelLddRead(); |
3449 iBuffers[iEP0OutBuff].UpdateBufferList(0,0); |
3329 iBuffers[iEP0OutBuff].UpdateBufferList(0,0); |
3450 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_STARTEPREADS_DUP4, "DLddUsbcScChannel::StartEpReads - 5"); |
3330 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcScChannel::StartEpReads - 5")); |
3451 |
3331 |
3452 } |
3332 } |
3453 |
3333 |
3454 |
3334 |
3455 void DLddUsbcScChannel::ResetInterface(TInt aErrorCode) |
3335 void DLddUsbcScChannel::ResetInterface(TInt aErrorCode) |
3467 |
3347 |
3468 for (i = 1; i <= iNumberOfEndpoints; i++) |
3348 for (i = 1; i <= iNumberOfEndpoints; i++) |
3469 { |
3349 { |
3470 // Firstly, cancel ('garbge collect') any stale reads/writes into PIL. |
3350 // Firstly, cancel ('garbge collect') any stale reads/writes into PIL. |
3471 |
3351 |
3472 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_RESETINTERFACE, "Cancelling transfer ep=%d", i); |
3352 __KTRACE_OPT(KUSB, Kern::Printf("Cancelling transfer ep=%d", i)); |
3473 |
|
3474 iEndpoint[i]->AbortTransfer(); |
3353 iEndpoint[i]->AbortTransfer(); |
3475 |
3354 |
3476 // All OUT endpoints need a packet sent, to indicate the termination of the current ep 'pipe'. |
3355 // All OUT endpoints need a packet sent, to indicate the termination of the current ep 'pipe'. |
3477 // This will complete any current read, or will be read later. |
3356 // This will complete any current read, or will be read later. |
3478 // All IN endpoints must be simply cancelled, including anything queued. |
3357 // All IN endpoints must be simply cancelled, including anything queued. |
3497 ((DLddUsbcScChannel*) aDLddUsbcScChannel)->DoEmergencyComplete(); |
3376 ((DLddUsbcScChannel*) aDLddUsbcScChannel)->DoEmergencyComplete(); |
3498 } |
3377 } |
3499 |
3378 |
3500 TInt DLddUsbcScChannel::DoEmergencyComplete() |
3379 TInt DLddUsbcScChannel::DoEmergencyComplete() |
3501 { |
3380 { |
3502 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, DLDDUSBCSCCHANNEL_DOEMERGENCYCOMPLETE, "DLddUsbcScChannel::DoEmergencyComplete" ); |
3381 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcScChannel::DoEmergencyComplete")); |
3503 |
|
3504 // cancel any pending DFCs |
3382 // cancel any pending DFCs |
3505 // complete all client requests |
3383 // complete all client requests |
3506 |
3384 |
3507 TUsbcScBuffer* buffer; |
3385 TUsbcScBuffer* buffer; |
3508 TInt i; |
3386 TInt i; |
3521 } |
3399 } |
3522 |
3400 |
3523 // Complete other Eps request |
3401 // Complete other Eps request |
3524 for (i = 1; i <= iNumberOfEndpoints; i++) |
3402 for (i = 1; i <= iNumberOfEndpoints; i++) |
3525 { |
3403 { |
3526 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOEMERGENCYCOMPLETE_DUP1, "Cancelling transfer ep=%d", i); |
3404 __KTRACE_OPT(KUSB, Kern::Printf("Cancelling transfer ep=%d", i)); |
3527 buffer=iEndpoint[i]->GetBuffer(); |
3405 buffer=iEndpoint[i]->GetBuffer(); |
3528 buffer->iStatusList.CancelQueued(); |
3406 buffer->iStatusList.CancelQueued(); |
3529 buffer->iStatusList.Complete(KErrDisconnected); |
3407 buffer->iStatusList.Complete(KErrDisconnected); |
3530 } |
3408 } |
3531 |
3409 |
3533 |
3411 |
3534 for (TInt i = 0; i < KUsbcMaxRequests; i++) |
3412 for (TInt i = 0; i < KUsbcMaxRequests; i++) |
3535 { |
3413 { |
3536 if (iRequestStatus[i]) |
3414 if (iRequestStatus[i]) |
3537 { |
3415 { |
3538 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCSCCHANNEL_DOEMERGENCYCOMPLETE_DUP2, "Complete request 0x%x", iRequestStatus[i]); |
3416 __KTRACE_OPT(KUSB, Kern::Printf("Complete request 0x%x", iRequestStatus[i])); |
3539 Kern::RequestComplete(iClient, iRequestStatus[i], KErrDisconnected); |
3417 Kern::RequestComplete(iClient, iRequestStatus[i], KErrDisconnected); |
3540 } |
3418 } |
3541 } |
3419 } |
3542 iStatusCallbackInfo.Cancel(); |
3420 iStatusCallbackInfo.Cancel(); |
3543 iEndpointStatusCallbackInfo.Cancel(); |
3421 iEndpointStatusCallbackInfo.Cancel(); |
3576 iLdd(aLDD), |
3454 iLdd(aLDD), |
3577 iError(KErrNone), |
3455 iError(KErrNone), |
3578 iBytesTransferred(0), |
3456 iBytesTransferred(0), |
3579 iBuffer(NULL) |
3457 iBuffer(NULL) |
3580 { |
3458 { |
3581 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, TUSBCSCENDPOINT_TUSBCSCENDPOINT_CONS, "TUsbcScEndpoint::TUsbcScEndpoint" ); |
3459 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScEndpoint::TUsbcScEndpoint")); |
3582 |
|
3583 } |
3460 } |
3584 |
3461 |
3585 |
3462 |
3586 TInt TUsbcScEndpoint::Construct() |
3463 TInt TUsbcScEndpoint::Construct() |
3587 { |
3464 { |
3588 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCENDPOINT_CONSTRUCT, "TUsbcScEndpoint::TUsbcScEndpoint iEndpointNumber %d\n",iEndpointNumber); |
3465 __KTRACE_OPT(KUSB,Kern::Printf("TUsbcScEndpoint::TUsbcScEndpoint iEndpointNumber %d\n",iEndpointNumber)); |
3589 |
3466 |
3590 iRequestCallbackInfo = new TUsbcRequestCallback(iLdd, |
3467 iRequestCallbackInfo = new TUsbcRequestCallback(iLdd, |
3591 iEndpointNumber, |
3468 iEndpointNumber, |
3592 (iEndpointNumber==0)?DLddUsbcScChannel::RequestCallbackEp0:TUsbcScEndpoint::RequestCallback, |
3469 (iEndpointNumber==0)?DLddUsbcScChannel::RequestCallbackEp0:TUsbcScEndpoint::RequestCallback, |
3593 (iEndpointNumber==0)? (TAny*) iLdd: (TAny*) this, |
3470 (iEndpointNumber==0)? (TAny*) iLdd: (TAny*) this, |
3594 iLdd->iDfcQ, |
3471 iLdd->iDfcQ, |
3598 } |
3475 } |
3599 |
3476 |
3600 |
3477 |
3601 TUsbcScEndpoint::~TUsbcScEndpoint() |
3478 TUsbcScEndpoint::~TUsbcScEndpoint() |
3602 { |
3479 { |
3603 OstTraceDef1(OST_TRACE_CATEGORY_RND, TRACE_FLOW, TUSBCSCENDPOINT_TUSBCSCENDPOINT_DES, "TUsbcScEndpoint::~TUsbcScEndpoint(%d)", iEndpointNumber); |
3480 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScEndpoint::~TUsbcScEndpoint(%d)", iEndpointNumber)); |
3604 |
|
3605 AbortTransfer(); |
3481 AbortTransfer(); |
3606 delete iRequestCallbackInfo; |
3482 delete iRequestCallbackInfo; |
3607 } |
3483 } |
3608 |
3484 |
3609 // This is called by the PIL, on return from a read or write. |
3485 // This is called by the PIL, on return from a read or write. |
3610 // Inturn it calls either the read or write function for that buffer. |
3486 // Inturn it calls either the read or write function for that buffer. |
3611 |
3487 |
3612 void TUsbcScEndpoint::RequestCallback(TAny* aTUsbcScEndpoint) |
3488 void TUsbcScEndpoint::RequestCallback(TAny* aTUsbcScEndpoint) |
3613 { |
3489 { |
3614 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, TUSBCSCENDPOINT_REQUESTCALLBACK, "TUsbcScEndpoint::RequestCallback" ); |
3490 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScEndpoint::RequestCallback")); |
3615 |
3491 |
3616 if (((TUsbcScEndpoint*)aTUsbcScEndpoint)->iLdd->ChannelClosing()) |
3492 if (((TUsbcScEndpoint*)aTUsbcScEndpoint)->iLdd->ChannelClosing()) |
3617 { |
3493 { |
3618 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCENDPOINT_REQUESTCALLBACK_DUP1, "Channel Closing: Completion not accepted!" ); |
3494 __KTRACE_OPT(KUSB, Kern::Printf("Channel Closing: Completion not accepted!")); |
3619 return; |
3495 return; |
3620 } |
3496 } |
3621 |
3497 |
3622 switch (((TUsbcScEndpoint*) aTUsbcScEndpoint)->iRequestCallbackInfo->iTransferDir) |
3498 switch (((TUsbcScEndpoint*) aTUsbcScEndpoint)->iRequestCallbackInfo->iTransferDir) |
3623 { |
3499 { |
3626 return; |
3502 return; |
3627 case EControllerRead: |
3503 case EControllerRead: |
3628 ((TUsbcScEndpoint*) aTUsbcScEndpoint)->iBuffer->CompleteRead(); |
3504 ((TUsbcScEndpoint*) aTUsbcScEndpoint)->iBuffer->CompleteRead(); |
3629 return; |
3505 return; |
3630 default: |
3506 default: |
3631 OstTrace1(TRACE_NORMAL, TUSBCSCENDPOINT_REQUESTCALLBACK_DUP2, "TUsbcScEndpoint::RequestCallback - Unexpected compleation direction %d",((TUsbcScEndpoint*) aTUsbcScEndpoint)->iRequestCallbackInfo->iTransferDir); |
3507 Kern::Printf("TUsbcScEndpoint::RequestCallback - Unexpected compleation direction %d",((TUsbcScEndpoint*) aTUsbcScEndpoint)->iRequestCallbackInfo->iTransferDir); |
3632 Kern::Fault("TUsbcScEndpoint::RequestCallback", __LINE__); |
3508 Kern::Fault("TUsbcScEndpoint::RequestCallback", __LINE__); |
3633 } |
3509 } |
3634 } |
3510 } |
3635 |
3511 |
3636 |
3512 |
3642 |
3518 |
3643 void TUsbcScEndpoint::AbortTransfer() |
3519 void TUsbcScEndpoint::AbortTransfer() |
3644 { |
3520 { |
3645 if (!iLdd->iRealizeCalled) |
3521 if (!iLdd->iRealizeCalled) |
3646 { |
3522 { |
3647 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCENDPOINT_ABORTTRANSFER, "TUsbcScEndpoint::AbortTransfer Ep# %d Real Ep # %d - N.R.",iEndpointNumber, iRealEpNumber); |
3523 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScEndpoint::AbortTransfer Ep# %d Real Ep # %d - N.R.",iEndpointNumber, iRealEpNumber)); |
3648 |
|
3649 return; |
3524 return; |
3650 } |
3525 } |
3651 else |
3526 else |
3652 { |
3527 { |
3653 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCENDPOINT_ABORTTRANSFER_DUP1, "TUsbcScEndpoint::AbortTransfer Ep# %d Real Ep # %d",iEndpointNumber, iRealEpNumber); |
3528 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScEndpoint::AbortTransfer Ep# %d Real Ep # %d",iEndpointNumber, iRealEpNumber)); |
3654 } |
3529 } |
3655 |
3530 |
3656 |
3531 |
3657 if (iBuffer && (iBuffer->iStatusList.iState) || (!iRealEpNumber)) |
3532 if (iBuffer && (iBuffer->iStatusList.iState) || (!iRealEpNumber)) |
3658 { |
3533 { |
3662 iController->CancelReadBuffer(iLdd, iRealEpNumber); |
3537 iController->CancelReadBuffer(iLdd, iRealEpNumber); |
3663 else |
3538 else |
3664 { |
3539 { |
3665 if (iEndpointNumber!=0) // endpoint zero starts off not sent in any direction, then keeps changing. |
3540 if (iEndpointNumber!=0) // endpoint zero starts off not sent in any direction, then keeps changing. |
3666 { |
3541 { |
3667 OstTraceDefExt3(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCENDPOINT_ABORTTRANSFER_DUP2, "\nTUsbcScEndpoint::AbortTransfer WARNING: Invalid Direction %d on (%d,%d)!\n",iRequestCallbackInfo->iTransferDir,iEndpointNumber, iRealEpNumber); |
3542 __KTRACE_OPT(KUSB,Kern::Printf("\nTUsbcScEndpoint::AbortTransfer WARNING: Invalid Direction %d on (%d,%d)!\n",iRequestCallbackInfo->iTransferDir,iEndpointNumber, iRealEpNumber)); |
3668 } |
3543 } |
3669 else |
3544 else |
3670 { |
3545 { |
3671 OstTraceDefExt3(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCENDPOINT_ABORTTRANSFER_DUP3, "\nTUsbcScEndpoint::AbortTransfer Can't stop direction %d on (%d,%d)!\n",iRequestCallbackInfo->iTransferDir,iEndpointNumber, iRealEpNumber); |
3546 __KTRACE_OPT(KUSB, Kern::Printf("\nTUsbcScEndpoint::AbortTransfer Can't stop direction %d on (%d,%d)!\n",iRequestCallbackInfo->iTransferDir,iEndpointNumber, iRealEpNumber)); |
3672 } |
3547 } |
3673 } |
3548 } |
3674 } |
3549 } |
3675 else if (!iBuffer) |
3550 else if (!iBuffer) |
3676 { |
3551 { |
3677 OstTraceDefExt2(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCENDPOINT_ABORTTRANSFER_DUP4, "\nTUsbcScEndpoint::AbortTransfer WARNING: iBuffer is NULL on (%d,%d)\n",iEndpointNumber, iRealEpNumber); |
3552 __KTRACE_OPT(KUSB,Kern::Printf("\nTUsbcScEndpoint::AbortTransfer WARNING: iBuffer is NULL on (%d,%d)\n",iEndpointNumber, iRealEpNumber)); |
3678 |
|
3679 return; |
3553 return; |
3680 } |
3554 } |
3681 |
3555 |
3682 if (iRequestCallbackInfo) |
3556 if (iRequestCallbackInfo) |
3683 iRequestCallbackInfo->iDfc.Cancel(); |
3557 iRequestCallbackInfo->iDfc.Cancel(); |
3684 else |
3558 else |
3685 { |
3559 { |
3686 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCENDPOINT_ABORTTRANSFER_DUP5, "\nTUsbcScEndpoint::AbortTransfer WARNING: iRequestCallbackInfo is NULL\n"); |
3560 __KTRACE_OPT(KUSB,Kern::Printf("\nTUsbcScEndpoint::AbortTransfer WARNING: iRequestCallbackInfo is NULL\n")); |
3687 |
|
3688 } |
3561 } |
3689 |
3562 |
3690 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCSCENDPOINT_ABORTTRANSFER_DUP6, "TUsbcScEndpoint Done."); |
3563 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScEndpoint Done.")); |
3691 } |
3564 } |
3692 |
3565 |
3693 // End TUsbcScEndpoint |
3566 // End TUsbcScEndpoint |
3694 |
3567 |
3695 |
3568 |
3714 } |
3587 } |
3715 |
3588 |
3716 |
3589 |
3717 TUsbcScAlternateSetting::~TUsbcScAlternateSetting() |
3590 TUsbcScAlternateSetting::~TUsbcScAlternateSetting() |
3718 { |
3591 { |
3719 OstTraceDef0(OST_TRACE_CATEGORY_RND, TRACE_FLOW, TUSBCSCALTERNATESETTING_TUSBCSCALTERNATESETTING_DES, "TUsbcScAlternateSetting::~TUsbcScAlternateSetting()" ); |
3592 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcScAlternateSetting::~TUsbcScAlternateSetting()")); |
3720 |
|
3721 for (TInt i = 0; i <= KMaxEndpointsPerClient; i++) |
3593 for (TInt i = 0; i <= KMaxEndpointsPerClient; i++) |
3722 { |
3594 { |
3723 delete iEndpoint[i]; |
3595 delete iEndpoint[i]; |
3724 } |
3596 } |
3725 } |
3597 } |