This is the mail archive of the
ecos-discuss@sources.redhat.com
mailing list for the eCos project.
Re: driver init and timer enable
- To: kashiwaya at redhat dot com
- Subject: Re: [ECOS] driver init and timer enable
- From: Bart Veer <bartv at redhat dot com>
- Date: Fri, 28 Jul 2000 14:57:50 +0100
- CC: ecos-discuss at sources dot redhat dot com
- References: <20000721144611.12976854.-1899660558@redhat.com>
- Reply-to: bartv at redhat dot com
>>>>> "Kashiwaya" == KASHIWAYA Haruki <kashiwaya@redhat.com> writes:
Kashiwaya> Hi There,
Kashiwaya> I have some questions about driver initialization.
Kashiwaya> Q1:
Kashiwaya> When I try to use cyg_thread_delay() in driver initialization,
Kashiwaya> the function donot work correctly because all interrupts are
Kashiwaya> disabled until it is enabled in sched.cxx:
Kashiwaya> 232: // Let the interrupts go
Kashiwaya> 233: Cyg_Interrupt::enable_interrupts();
Kashiwaya> I know cyg_thread_delay() is primarily for *thread*
Kashiwaya> use, but I guess it is better if eCos provide the delay
Kashiwaya> function for driver use.
Driver initialization should normally happen with interrupts disabled,
so cannot rely on clock interrupts.
If a device driver needs to wait for a little bit while hardware
settles down, this would normally involve a busy loop based on a
bogomips rating. The rating can be calculated at run-time early on in
the startup. Alternatively it could be determined by other means and
set by the user via a configuration option - the latter approach saves
some code. There are issues such as whether or not various caches are
enabled.
Unfortunately so far we have managed to do without generic bogomips
support, so it has not been implemented yet.
Kashiwaya> Q2:
Kashiwaya> All driver's init function is called from cyg_io_init()
Kashiwaya> in sysio.c, it seems there is no way to specify the
Kashiwaya> calling order of each init function. I guess the order
Kashiwaya> is decided by DEVTAB entry in linker. Forwhy if each
Kashiwaya> driver is in association and if it need an order, it
Kashiwaya> must to specify the order of initialization.
Kashiwaya> Maybe I misunderstood something but any suggestion
Kashiwaya> would be appreciated.
Ordering the device drivers can be achieved by having appropriately
numbered sections, and then using a SORT directive in the linker
script. I believe that with the current sources, putting one device
driver into section .devtab.0 and another into section .devtab.1, you
can control the initialization order. Some work is in progress to
generalise this, so that we can add new entities like the device table
without having to modify all the linker scripts.
Bart Veer // eCos net maintainer