/*FUNCTION*---------------------------------------------------------------- * * Function Name : usb_dev_list_free_memory * Returned Value : USB_OK if valid device, else error code * Comments : * Close pipes & free memory on device's linked list, whose * anchor is device.memlist--> * *END*--------------------------------------------------------------------*/ USB_STATUS usb_dev_list_free_memory ( /* [IN] Handle for the USB device */ _usb_device_instance_handle dev_handle ) { /* Body */ DEV_INSTANCE_PTR dev; DEV_MEMORY_PTR mem_ptr, list_ptr; USB_STATUS error; uint_8 intf_no; #ifdef _HOST_DEBUG_ DEBUG_LOG_TRACE("usb_dev_list_free_memory"); DEBUGMSG(USB_DBG_LEVEL, ("usb_dev_list_free_memory\n")); #endif error = usb_hostdev_validate(dev_handle); if (error != USB_OK) #ifdef _HOST_DEBUG_ DEBUG_LOG_TRACE("usb_dev_list_free_memory invalid device handle"); #endif return error; dev = (DEV_INSTANCE_PTR)dev_handle; /* Deleting interfaces closes their pipes */ for (intf_no = 0; intf_no < dev->num_of_interfaces; intf_no++) usb_hostdev_delete_interface(dev, dev->intf_descriptor[intf_no]); /* Free memory blocks on this device's list */ USB_lock(); mem_ptr = dev->memlist; list_ptr = mem_ptr->next; do { USB_memfree(mem_ptr); mem_ptr = list_ptr; list_ptr = mem_ptr->next; } while (mem_ptr != NULL); dev->memlist = NULL; USB_unlock(); #ifdef _HOST_DEBUG_ DEBUG_LOG_TRACE("usb_dev_list_free_memory SUCCESSFUL"); #endif return USB_OK; } /* Endbody */
/*FUNCTION*---------------------------------------------------------------- * * Function Name : usb_dev_list_free_memlist * Returned Value : USB_OK if valid device, else error code * Comments : * Close pipes & free memory on device's linked list, whose * anchor is dev_handle-->memlist * *END*--------------------------------------------------------------------*/ USB_STATUS usb_dev_list_free_memlist ( /* [IN] Handle for the USB device */ _usb_device_instance_handle dev_handle ) { /* Body */ DEV_INSTANCE_PTR dev; DEV_MEMORY_PTR mem_ptr, list_ptr; USB_STATUS error; uint_8 intf_no; #ifdef _HOST_DEBUG_ DEBUG_LOG_TRACE("usb_dev_list_free_memlist"); #endif error = usb_hostdev_validate(dev_handle); // EAI - missing {} so failed if debug on if (error != USB_OK) { #ifdef _HOST_DEBUG_ DEBUG_LOG_TRACE("usb_dev_list_free_memlist invalid device handle"); #endif return USB_log_error(__FILE__,__LINE__,error); } dev = (DEV_INSTANCE_PTR)dev_handle; /* Deleting interfaces closes their pipes */ for (intf_no = 0; intf_no < dev->num_of_interfaces; intf_no++) usb_hostdev_delete_interface(dev, dev->intf_descriptor[intf_no]); /* Free memory blocks on this device's list */ USB_lock(); mem_ptr = dev->memlist; while (mem_ptr != NULL) { list_ptr = mem_ptr->next; USB_mem_free(mem_ptr); mem_ptr = list_ptr; } dev->memlist = NULL; USB_unlock(); #ifdef _HOST_DEBUG_ DEBUG_LOG_TRACE("usb_dev_list_free_memlist SUCCESSFUL"); #endif return USB_OK; } /* Endbody */
/*FUNCTION*---------------------------------------------------------------- * * Function Name : usb_dev_list_free_memory * Returned Value : USB_OK if valid device, else error code * Comments : * Close pipes & free memory on device's linked list, whose * anchor is device.memlist--> * *END*--------------------------------------------------------------------*/ USB_STATUS usb_dev_list_free_memory ( /* [IN] Handle for the USB device */ _usb_device_instance_handle dev_handle ) { /* Body */ DEV_INSTANCE_PTR dev; DEV_MEMORY_PTR mem_ptr, list_ptr; USB_STATUS error; uint_8 intf_no; error = usb_hostdev_validate(dev_handle); /* EAI - missing {} so failed if debug on */ if (error != USB_OK) { return error; } dev = (DEV_INSTANCE_PTR)dev_handle; /* Deleting interfaces closes their pipes */ for (intf_no = 0; intf_no < dev->num_of_interfaces; intf_no++) usb_hostdev_delete_interface(dev, dev->intf_descriptor[intf_no]); /* Free memory blocks on this device's list */ USB_lock(); mem_ptr = dev->memlist; #if 0 list_ptr = mem_ptr->next; do { USB_mem_free(mem_ptr); mem_ptr = list_ptr; list_ptr = mem_ptr->next; } while (mem_ptr != NULL); #else /* << EST: above code will crash if list has more than one entry */ while(mem_ptr!=NULL) { list_ptr = mem_ptr->next; USB_mem_free(mem_ptr); mem_ptr = list_ptr; } #endif dev->memlist = NULL; USB_unlock(); return USB_OK; } /* Endbody */