eCos Reference Manual
Prev | Chapter 18. Device Driver Interface to the Kernel | Next

# Synchronization Levels

Since it would be dangerous for an ISR or DSR to make a call that might reschedule the current thread (by trying to lock a mutex for example) all functions in this API have an associated synchronization level. These levels are:

Thread

  This function may only be called from within threads. This is usually the client code that makes calls into the device driver. In a non-kernel configuration, this will be code running at the default non-interrupt level.

DSR

  This function may be called by either DSR or thread code.

ISR

  This function may be called from ISR, DSR or thread code.

The following table shows, for each API function, the levels at which is may be called:

                                      Callable from:
    Function                       ISR     DSR    Thread
    -------------------------------------------------------------------------

    cyg_drv_isr_lock                X       X       X
    cyg_drv_isr_unlock              X       X       X
    cyg_drv_spinlock_init                           X
    cyg_drv_spinlock_destroy                        X
    cyg_drv_spinlock_spin           X       X       X
    cyg_drv_spinlock_clear          X       X       X
    cyg_drv_spinlock_try            X       X       X
    cyg_drv_spinlock_test           X       X       X
    cyg_drv_spinlock_spin_intsave   X       X       X
    cyg_drv_spinlock_clear_intsave  X       X       X
    cyg_drv_dsr_lock                        X       X
    cyg_drv_dsr_unlock                      X       X
    cyg_drv_mutex_init                              X
    cyg_drv_mutex_destroy                           X
    cyg_drv_mutex_lock                              X
    cyg_drv_mutex_trylock                           X
    cyg_drv_mutex_unlock                            X
    cyg_drv_mutex_release                           X
    cyg_drv_cond_init                               X
    cyg_drv_cond_destroy                            X
    cyg_drv_cond_wait                               X
    cyg_drv_cond_signal                     X       X
    cyg_drv_cond_broadcast                  X       X
    cyg_drv_interrupt_create                        X
    cyg_drv_interrupt_delete                        X
    cyg_drv_interrupt_attach        X       X       X
    cyg_drv_interrupt_detach        X       X       X
    cyg_drv_interrupt_mask          X       X       X
    cyg_drv_interrupt_unmask        X       X       X
    cyg_drv_interrupt_acknowledge   X       X       X
    cyg_drv_interrupt_configure     X       X       X
    cyg_drv_interrupt_level         X       X       X
    cyg_drv_interrupt_set_cpu       X       X       X
    cyg_drv_interrupt_get_cpu       X       X       X

Prev | Home | Next
Device Driver Models | Up | The API