From c3cdb7282e835c292abd295f4d154e912a7529d7 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Mon, 6 Aug 2012 18:19:25 +0800 Subject: [PATCH] USB - Added rudimentary device cleanup --- KernelLand/Modules/USB/Core/usb_devinit.c | 25 +++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/KernelLand/Modules/USB/Core/usb_devinit.c b/KernelLand/Modules/USB/Core/usb_devinit.c index 30807ff4..c5fd2ef3 100644 --- a/KernelLand/Modules/USB/Core/usb_devinit.c +++ b/KernelLand/Modules/USB/Core/usb_devinit.c @@ -292,14 +292,35 @@ void USB_DeviceConnected(tUSBHub *Hub, int Port) free(full_buf); } - + + Hub->Devices[Port] = dev; + // Done. LEAVE('-'); } void USB_DeviceDisconnected(tUSBHub *Hub, int Port) { - + tUSBDevice *dev; + if( !Hub->Devices[Port] ) { + Log_Error("USB", "Non-registered device disconnected"); + return; + } + dev = Hub->Devices[Port]; + + // TODO: Free related resources + // - Endpoint registrations + for( int i = 0; i < 16; i ++ ) + { + if(dev->EndpointHandles[i]) + dev->Host->HostDef->RemEndpoint(dev->Host->Ptr, dev->EndpointHandles[i]); + } + + // - Bus Address + USB_int_DeallocateAddress(dev->Host, dev->Address); + // - Inform handler + // - Allocate memory + free(dev); } void *USB_GetDeviceDataPtr(tUSBInterface *Dev) { return Dev->Data; } -- 2.20.1