/************************************************************************ * NAME: fnet_timer_free * * DESCRIPTION: Frees software timer, which is pointed by tl_ptr * *************************************************************************/ void fnet_timer_free( fnet_timer_desc_t timer ) { struct fnet_net_timer *tl = (struct fnet_net_timer *)timer; struct fnet_net_timer *tl_temp; if(tl) { if(tl == fnet_tl_head) { fnet_tl_head = fnet_tl_head->next; } else { tl_temp = fnet_tl_head; while(tl_temp->next != tl) { tl_temp = tl_temp->next; } tl_temp->next = tl->next; } fnet_free(tl); } }
/************************************************************************ * NAME: fnet_timer_release * * DESCRIPTION: Frees the memory, which was allocated for all * TCP/IP timers, and removes hardware timer *************************************************************************/ void fnet_timer_release( void ) { struct fnet_net_timer *tmp_tl; FNET_HW_TIMER_RELEASE(); while(fnet_tl_head != 0) { tmp_tl = fnet_tl_head->next; fnet_free(fnet_tl_head); fnet_tl_head = tmp_tl; } }
/************************************************************************ * NAME: fnet_isr_vector_release * * DESCRIPTION: Sets the interrupt handler 'handler' for the interrupt vector * with number 'vector_number' at the exception vector table but * destroys info about old interrupt handler and removes * information from 'fnet_isr_table' queue *************************************************************************/ void fnet_isr_vector_release(fnet_uint32_t vector_number) { fnet_isr_entry_t *isr_temp; isr_temp = fnet_isr_table; while (isr_temp != 0) { if (isr_temp->vector_number == vector_number) { break; } isr_temp = isr_temp->next; } if (isr_temp != 0) /* if handler wasn't registered in queue */ { fnet_free(isr_temp); if (fnet_isr_table->vector_number == vector_number) { fnet_isr_table = fnet_isr_table->next; } else { isr_temp = fnet_isr_table; while (isr_temp->next != 0) { if (isr_temp->next->vector_number == vector_number) { isr_temp->next = isr_temp->next->next; break; } isr_temp = isr_temp->next; } } } }