public inbox for ecos-discuss@sourceware.org
 help / color / mirror / Atom feed
* Re: [ECOS] How DSR is executed in interrupt ?
@ 2007-09-12  8:19 ariga masahiro
  2007-09-12  8:25 ` Andrew Lunn
  0 siblings, 1 reply; 8+ messages in thread
From: ariga masahiro @ 2007-09-12  8:19 UTC (permalink / raw)
  To: Andrew Lunn; +Cc: ecos-discuss

Hi,

About revising eCos source,
please teach me.

I wrote in prev. mail.
> First I copied and reserved current ecos directory C:\cygwin\opt\ecos
> by renaminig C:\cygwin\opt\ecos_precvs.
> And I copied renewd source from /ecoscvs into corresponding current 
> directoy,
But after copied CVS checkout source int  C:\cygwin\opt\ecos there appeared 
\v2_0 directory and \current directory.
Like next.
Previously only
C:\cygwin\opt\ecos\ecos-2.0\packages\devs\eth\sh\etherc\v2_0\src\if_etherc.c
existed.
After copied CVS,also appeared
C:\cygwin\opt\ecos\ecos-2.0\packages\devs\eth\sh\etherc\current\src\if_etherc.c
Now how to correctly revise these sources ?
Is it possibile to modify \current source according to \v2_0 source,
and delete  \v2_0 directory,only remaining \current directory ?
Can I build without error ?
I wonder it is impossible.

Please enlighten me.

Masahiro Ariga 


-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

^ permalink raw reply	[flat|nested] 8+ messages in thread
* [ECOS] How DSR is executed in interrupt ?
@ 2007-09-10  8:21 ariga masahiro
  2007-09-10  8:52 ` Andrew Lunn
  0 siblings, 1 reply; 8+ messages in thread
From: ariga masahiro @ 2007-09-10  8:21 UTC (permalink / raw)
  To: ecos-discuss

Hi,

Please help me next question ?

I am trying to run LAN91CXX drive on interrupt,
and it became to enter ISR routine when IRQ3 Line is asserted.

But it looks like IRQ3 Line is ON-State forever and never become OFF-State.
ISR is repetedly entered but never enter into DSR routine.

ISR/DSR are setted like this in smsc_lan91cxx_init(),
    // Initialize environment, setup interrupt handler
    cyg_drv_interrupt_create(cpd->interrupt,
                            8, // Priority - what goes here?
                             (cyg_addrword_t)sc, //  Data item passed to 
interrupt handler
                             (cyg_ISR_t *)lan91cxx_isr,
                             (cyg_DSR_t *)eth_drv_dsr, // The logical driver 
DSR
                             &lan91cxx_interrupt_handle,
                             &lan91cxx_interrupt);
    cyg_drv_interrupt_attach(lan91cxx_interrupt_handle);

ISR is like below,
static int
lan91cxx_isr(cyg_vector_t vector, cyg_addrword_t data
             /* , HAL_SavedRegisters *regs */ )
{
    struct eth_drv_sc *sc = (struct eth_drv_sc *)data;
    struct lan91cxx_priv_data *cpd =
        (struct lan91cxx_priv_data *)sc->driver_private;

    DEBUG_FUNCTION();

    INCR_STAT( interrupts );

    cyg_drv_interrupt_mask(cpd->interrupt);
    cyg_drv_interrupt_acknowledge(cpd->interrupt);
    return (CYG_ISR_HANDLED|CYG_ISR_CALL_DSR);  // Run the DSR
}

According Anthony J. Massa's Book,as far as ISR returns CYG_ISR_CALL_DSR
DSR is executed.

As DSR,since I build using "net" Template,
I think /packages/io/eth/v2_0/src/net/eth_drv.c file's
eth_drv_dsr function is used.
I tested its entering by inserting diag_printf but never entered in it.

DSR is below,
eth_drv_dsr(cyg_vector_t vector,
            cyg_ucount32 count,
            cyg_addrword_t data)
{
    struct eth_drv_sc *sc = (struct eth_drv_sc *)data;

    //20070907
    diag_printf("DSR\n");

#ifdef CYGDBG_USE_ASSERTS
    // then check that this really is a "sc"
    {
        cyg_netdevtab_entry_t *t;
        for (t = &__NETDEVTAB__[0]; t != &__NETDEVTAB_END__; t++)
            if ( ((struct eth_drv_sc *)t->device_instance) == sc )
                break; // found it
        CYG_ASSERT( t != &__NETDEVTAB_END__, "eth_drv_dsr: Failed to find sc 
in NETDEVTAB" );
    }
#endif // Checking code

    sc->state |= ETH_DRV_NEEDS_DELIVERY;

    ecos_synch_eth_drv_dsr(); // [request] run delivery function for this 
dev
}

Also I assured interrupt_end is executed in VSR after subroutine call of 
ISR.

My question is that are there any way DSR is called other than above route ?

Especially I doubt about delivery operation althoug I have not fathamed its 
operation.
Is delivery operation is connected to interrupt ?

Please enlighten me.

Masahiro Ariga


-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2007-09-12  8:25 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-09-12  8:19 [ECOS] How DSR is executed in interrupt ? ariga masahiro
2007-09-12  8:25 ` Andrew Lunn
  -- strict thread matches above, loose matches on Subject: below --
2007-09-10  8:21 ariga masahiro
2007-09-10  8:52 ` Andrew Lunn
2007-09-11  2:44   ` ariga masahiro
2007-09-11 14:19     ` Andrew Lunn
2007-09-12  4:51       ` ariga masahiro
2007-09-12  5:14         ` Paul D. DeRocco

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).