예제 #1
0
파일: fnet_timer.c 프로젝트: rschuck/K64f
/************************************************************************
* 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);
    }
}
예제 #2
0
파일: fnet_timer.c 프로젝트: ErikZalm/fnet
/************************************************************************
* 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;
    }
}
예제 #3
0
/************************************************************************
* 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;
            }
        }
    }
}