| // hopefully we found everything... | // hopefully we found everything... | ||||
| free_Pipe(pipe); | free_Pipe(pipe); | ||||
| } else { | } else { | ||||
| // TODO: how to remove from the periodic schedule | |||||
| // remove from the periodic schedule | |||||
| for (uint32_t i=0; i < PERIODIC_LIST_SIZE; i++) { | |||||
| uint32_t num = periodictable[i]; | |||||
| if (num & 1) continue; | |||||
| Pipe_t *node = (Pipe_t *)(num & 0xFFFFFFE0); | |||||
| if (node == pipe) { | |||||
| periodictable[i] = pipe->qh.horizontal_link; | |||||
| continue; | |||||
| } | |||||
| Pipe_t *prev = node; | |||||
| while (1) { | |||||
| num = node->qh.horizontal_link; | |||||
| if (num & 1) break; | |||||
| node = (Pipe_t *)(num & 0xFFFFFFE0); | |||||
| if (node == pipe) { | |||||
| prev->qh.horizontal_link = node->qh.horizontal_link; | |||||
| break; | |||||
| } | |||||
| prev = node; | |||||
| } | |||||
| } | |||||
| // TODO: find & free all the transfers which completed | |||||
| // TODO: do we need to look at pipe->qh.current ?? | |||||
| // TODO: free all the transfers still attached to the QH | |||||
| // TODO: free_Pipe(pipe); | |||||
| return; | return; | ||||
| } | } | ||||