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