X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FModules%2FUSB%2FUHCI%2Fuhci.c;h=e57a1c300ca9c38da964ed1265bdc49c861ffb69;hb=3d85d14c564e245c00d31b1adf9c4ee7c2d9754a;hp=be27c39bf752023bb503191e310a60977fa754a9;hpb=b061cf94f62f46aada2ce6f13bc1cfbee261fae9;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/USB/UHCI/uhci.c b/KernelLand/Modules/USB/UHCI/uhci.c index be27c39b..e57a1c30 100644 --- a/KernelLand/Modules/USB/UHCI/uhci.c +++ b/KernelLand/Modules/USB/UHCI/uhci.c @@ -379,8 +379,8 @@ tUHCI_TD *UHCI_int_CreateTD( else { LOG("Relocated OUT/SETUP"); - tVAddr ptr = MM_MapTemp(td->BufferPointer); - memcpy( (void*)ptr, Data, Length ); + void *ptr = MM_MapTemp(td->BufferPointer); + memcpy( ptr, Data, Length ); MM_FreeTemp(ptr); td->Control |= TD_CTL_IOC; } @@ -728,8 +728,8 @@ void UHCI_int_HandleTDComplete(tUHCI_Controller *Cont, tUHCI_TD *TD) { char *src, *dest; int src_ofs = TD->BufferPointer & (PAGE_SIZE-1); - src = (void *) MM_MapTemp(TD->BufferPointer); - dest = (void *) MM_MapTemp(info->FirstPage); + src = MM_MapTemp(TD->BufferPointer); + dest = MM_MapTemp(info->FirstPage); // Check for a single page transfer if( byte_count + info->Offset <= PAGE_SIZE ) { @@ -744,21 +744,21 @@ void UHCI_int_HandleTDComplete(tUHCI_Controller *Cont, tUHCI_TD *TD) TD->BufferPointer, info->FirstPage, info->SecondPage, TD); int part_len = PAGE_SIZE - info->Offset; memcpy(dest + info->Offset, src + src_ofs, part_len); - MM_FreeTemp( (tVAddr)dest ); - dest = (void *) MM_MapTemp(info->SecondPage); + MM_FreeTemp( dest ); + dest = MM_MapTemp(info->SecondPage); memcpy(dest, src + src_ofs + part_len, byte_count - part_len); } - MM_FreeTemp( (tVAddr)src ); - MM_FreeTemp( (tVAddr)dest ); + MM_FreeTemp( src ); + MM_FreeTemp( dest ); } // Callback if( info->Callback != NULL ) { LOG("Calling cb %p (%i bytes)", info->Callback, byte_count); - void *ptr = (void *) MM_MapTemp( TD->BufferPointer ); + void *ptr = MM_MapTemp( TD->BufferPointer ); info->Callback( info->CallbackPtr, ptr, byte_count ); - MM_FreeTemp( (tVAddr)ptr ); + MM_FreeTemp( ptr ); } // Clean up info @@ -856,6 +856,7 @@ void UHCI_InterruptHandler(int IRQ, void *Ptr) Uint16 status = _InWord(Host, USBSTS); LOG("%p: status = 0x%04x", Ptr, status); + // Interrupt-on-completion if( status & 1 ) { @@ -863,6 +864,31 @@ void UHCI_InterruptHandler(int IRQ, void *Ptr) Semaphore_Signal(&gUHCI_InterruptSempahore, 1); } + // USB Error Interrupt + if( status & 2 ) + { + + } + + // Resume Detect + // - Fired if in suspend state and a USB device sends the RESUME signal + if( status & 4 ) + { + + } + + // Host System Error + if( status & 8 ) + { + + } + + // Host Controller Process Error + if( status & 0x10 ) + { + Log_Error("UHCI", "Host controller process error on controller %p", Ptr); + } + _OutWord(Host, USBSTS, status); }