_error:
cont->PhysBase = 0;
if( cont->CapRegs )
- MM_Deallocate( (tVAddr)cont->CapRegs );
+ MM_Deallocate( cont->CapRegs );
if( cont->PeriodicQueue )
- MM_Deallocate( (tVAddr)cont->PeriodicQueue );
+ MM_Deallocate( cont->PeriodicQueue );
if( cont->TDPool )
- MM_Deallocate( (tVAddr)cont->TDPool );
+ MM_Deallocate( cont->TDPool );
LEAVE('i', 2);
return 2;
}
LOG("Calling %p(%p) for EndPt %x (%p+0x%x)",
qh->Impl.Callback, qh->Impl.CallbackData,
qh->Impl.Endpt->EndpointID, last->Impl.Ptr, transferred_len);
+ //if( last->Impl.Ptr )
+ // Debug_HexDump("EHCI Callback Data", last->Impl.Ptr, transferred_len);
qh->Impl.Callback(qh->Impl.CallbackData, last->Impl.Ptr, transferred_len);
}
void EHCI_int_InterruptThread(void *ControllerPtr)
{
tEHCI_Controller *Cont = ControllerPtr;
+ Threads_SetName("EHCI Interrupt Worker");
while(Cont->OpRegs)
{
Uint32 events;
if( events & EHCI_THREADEVENT_IOC )
{
// IOC, handle completed requests
- Log_Warning("EHCI", "%P IOC - TODO: Call registered callbacks and reclaim",
- Cont->PhysBase);
// Search periodic lists for one that fired
+ EHCI_int_CheckInterruptQHs(Cont);
// Retire QHs
// - Remove them from the queue and ask the controller to bell when they're removable
EHCI_int_RetireQHs(Cont);