OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-2.0/] [doc/] [html/] [ref/] [devapi-synchronization.html] - Diff between revs 28 and 174

Only display areas with differences | Details | Blame | View Log

Rev 28 Rev 174
<!-- Copyright (C) 2003 Red Hat, Inc.                                -->
<!-- Copyright (C) 2003 Red Hat, Inc.                                -->
<!-- This material may be distributed only subject to the terms      -->
<!-- This material may be distributed only subject to the terms      -->
<!-- and conditions set forth in the Open Publication License, v1.0  -->
<!-- and conditions set forth in the Open Publication License, v1.0  -->
<!-- or later (the latest version is presently available at          -->
<!-- or later (the latest version is presently available at          -->
<!-- http://www.opencontent.org/openpub/).                           -->
<!-- http://www.opencontent.org/openpub/).                           -->
<!-- Distribution of the work or derivative of the work in any       -->
<!-- Distribution of the work or derivative of the work in any       -->
<!-- standard (paper) book form is prohibited unless prior           -->
<!-- standard (paper) book form is prohibited unless prior           -->
<!-- permission is obtained from the copyright holder.               -->
<!-- permission is obtained from the copyright holder.               -->
<HTML
<HTML
><HEAD
><HEAD
><TITLE
><TITLE
>Synchronization</TITLE
>Synchronization</TITLE
><meta name="MSSmartTagsPreventParsing" content="TRUE">
><meta name="MSSmartTagsPreventParsing" content="TRUE">
<META
<META
NAME="GENERATOR"
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
"><LINK
"><LINK
REL="HOME"
REL="HOME"
TITLE="eCos Reference Manual"
TITLE="eCos Reference Manual"
HREF="ecos-ref.html"><LINK
HREF="ecos-ref.html"><LINK
REL="UP"
REL="UP"
TITLE="Device Driver Interface to the Kernel"
TITLE="Device Driver Interface to the Kernel"
HREF="devapi-device-driver-interface-to-the-kernel.html"><LINK
HREF="devapi-device-driver-interface-to-the-kernel.html"><LINK
REL="PREVIOUS"
REL="PREVIOUS"
TITLE="Device Driver Interface to the Kernel"
TITLE="Device Driver Interface to the Kernel"
HREF="devapi-device-driver-interface-to-the-kernel.html"><LINK
HREF="devapi-device-driver-interface-to-the-kernel.html"><LINK
REL="NEXT"
REL="NEXT"
TITLE="SMP Support"
TITLE="SMP Support"
HREF="devapi-smp-support.html"></HEAD
HREF="devapi-smp-support.html"></HEAD
><BODY
><BODY
CLASS="SECTION"
CLASS="SECTION"
BGCOLOR="#FFFFFF"
BGCOLOR="#FFFFFF"
TEXT="#000000"
TEXT="#000000"
LINK="#0000FF"
LINK="#0000FF"
VLINK="#840084"
VLINK="#840084"
ALINK="#0000FF"
ALINK="#0000FF"
><DIV
><DIV
CLASS="NAVHEADER"
CLASS="NAVHEADER"
><TABLE
><TABLE
SUMMARY="Header navigation table"
SUMMARY="Header navigation table"
WIDTH="100%"
WIDTH="100%"
BORDER="0"
BORDER="0"
CELLPADDING="0"
CELLPADDING="0"
CELLSPACING="0"
CELLSPACING="0"
><TR
><TR
><TH
><TH
COLSPAN="3"
COLSPAN="3"
ALIGN="center"
ALIGN="center"
>eCos Reference Manual</TH
>eCos Reference Manual</TH
></TR
></TR
><TR
><TR
><TD
><TD
WIDTH="10%"
WIDTH="10%"
ALIGN="left"
ALIGN="left"
VALIGN="bottom"
VALIGN="bottom"
><A
><A
HREF="devapi-device-driver-interface-to-the-kernel.html"
HREF="devapi-device-driver-interface-to-the-kernel.html"
ACCESSKEY="P"
ACCESSKEY="P"
>Prev</A
>Prev</A
></TD
></TD
><TD
><TD
WIDTH="80%"
WIDTH="80%"
ALIGN="center"
ALIGN="center"
VALIGN="bottom"
VALIGN="bottom"
>Chapter 18. Device Driver Interface to the Kernel</TD
>Chapter 18. Device Driver Interface to the Kernel</TD
><TD
><TD
WIDTH="10%"
WIDTH="10%"
ALIGN="right"
ALIGN="right"
VALIGN="bottom"
VALIGN="bottom"
><A
><A
HREF="devapi-smp-support.html"
HREF="devapi-smp-support.html"
ACCESSKEY="N"
ACCESSKEY="N"
>Next</A
>Next</A
></TD
></TD
></TR
></TR
></TABLE
></TABLE
><HR
><HR
ALIGN="LEFT"
ALIGN="LEFT"
WIDTH="100%"></DIV
WIDTH="100%"></DIV
><DIV
><DIV
CLASS="SECTION"
CLASS="SECTION"
><H1
><H1
CLASS="SECTION"
CLASS="SECTION"
><A
><A
NAME="DEVAPI-SYNCHRONIZATION">Synchronization</H1
NAME="DEVAPI-SYNCHRONIZATION">Synchronization</H1
><P
><P
>There are three levels of synchronization supported:</P
>There are three levels of synchronization supported:</P
><P
><P
></P
></P
><OL
><OL
TYPE="1"
TYPE="1"
><LI
><LI
><P
><P
>    Synchronization with ISRs. This normally means disabling
>    Synchronization with ISRs. This normally means disabling
    interrupts to prevent the ISR running during a critical
    interrupts to prevent the ISR running during a critical
    section. In an SMP environment, this will also require the use of
    section. In an SMP environment, this will also require the use of
    a spinlock to synchronize with ISRs, DSRs or threads running on
    a spinlock to synchronize with ISRs, DSRs or threads running on
    other CPUs.  This is implemented by the
    other CPUs.  This is implemented by the
    <TT
    <TT
CLASS="FUNCTION"
CLASS="FUNCTION"
>cyg_drv_isr_lock()</TT
>cyg_drv_isr_lock()</TT
> and
> and
    <TT
    <TT
CLASS="FUNCTION"
CLASS="FUNCTION"
>cyg_drv_isr_unlock()</TT
>cyg_drv_isr_unlock()</TT
> functions. This
> functions. This
    mechanism should be used sparingly and for short periods only.
    mechanism should be used sparingly and for short periods only.
    For finer grained synchronization, individual spinlocks are also
    For finer grained synchronization, individual spinlocks are also
    supplied.
    supplied.
    </P
    </P
></LI
></LI
><LI
><LI
><P
><P
>    Synchronization with DSRs. This will be implemented in the kernel
>    Synchronization with DSRs. This will be implemented in the kernel
    by taking the scheduler lock to prevent DSRs running during
    by taking the scheduler lock to prevent DSRs running during
    critical sections. In non-kernel configurations it will be
    critical sections. In non-kernel configurations it will be
    implemented by non-kernel code. This is implemented by the
    implemented by non-kernel code. This is implemented by the
    <TT
    <TT
CLASS="FUNCTION"
CLASS="FUNCTION"
>cyg_drv_dsr_lock()</TT
>cyg_drv_dsr_lock()</TT
> and
> and
    <TT
    <TT
CLASS="FUNCTION"
CLASS="FUNCTION"
>cyg_drv_dsr_unlock()</TT
>cyg_drv_dsr_unlock()</TT
> functions. As with ISR
> functions. As with ISR
    synchronization, this mechanism should be used sparingly. Only
    synchronization, this mechanism should be used sparingly. Only
    DSRs and threads may use this synchronization mechanism, ISRs are
    DSRs and threads may use this synchronization mechanism, ISRs are
    not allowed to do this.
    not allowed to do this.
    </P
    </P
></LI
></LI
><LI
><LI
><P
><P
>    Synchronization with threads. This is implemented with mutexes
>    Synchronization with threads. This is implemented with mutexes
    and condition variables. Only threads may lock the mutexes and
    and condition variables. Only threads may lock the mutexes and
    wait on the condition variables, although DSRs may signal
    wait on the condition variables, although DSRs may signal
    condition variables.
    condition variables.
    </P
    </P
></LI
></LI
></OL
></OL
><P
><P
>Any data that is accessed from more than one level must be protected
>Any data that is accessed from more than one level must be protected
against concurrent access. Data that is accessed by ISRs must be
against concurrent access. Data that is accessed by ISRs must be
protected with the ISR lock, or a spinlock at all times,
protected with the ISR lock, or a spinlock at all times,
<SPAN
<SPAN
CLASS="emphasis"
CLASS="emphasis"
><I
><I
CLASS="EMPHASIS"
CLASS="EMPHASIS"
>even in ISRs</I
>even in ISRs</I
></SPAN
></SPAN
>. Data that is shared between DSRs
>. Data that is shared between DSRs
and threads should be protected with the DSR lock. Data that is only
and threads should be protected with the DSR lock. Data that is only
accessed by threads must be protected with mutexes.</P
accessed by threads must be protected with mutexes.</P
></DIV
></DIV
><DIV
><DIV
CLASS="NAVFOOTER"
CLASS="NAVFOOTER"
><HR
><HR
ALIGN="LEFT"
ALIGN="LEFT"
WIDTH="100%"><TABLE
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
SUMMARY="Footer navigation table"
WIDTH="100%"
WIDTH="100%"
BORDER="0"
BORDER="0"
CELLPADDING="0"
CELLPADDING="0"
CELLSPACING="0"
CELLSPACING="0"
><TR
><TR
><TD
><TD
WIDTH="33%"
WIDTH="33%"
ALIGN="left"
ALIGN="left"
VALIGN="top"
VALIGN="top"
><A
><A
HREF="devapi-device-driver-interface-to-the-kernel.html"
HREF="devapi-device-driver-interface-to-the-kernel.html"
ACCESSKEY="P"
ACCESSKEY="P"
>Prev</A
>Prev</A
></TD
></TD
><TD
><TD
WIDTH="34%"
WIDTH="34%"
ALIGN="center"
ALIGN="center"
VALIGN="top"
VALIGN="top"
><A
><A
HREF="ecos-ref.html"
HREF="ecos-ref.html"
ACCESSKEY="H"
ACCESSKEY="H"
>Home</A
>Home</A
></TD
></TD
><TD
><TD
WIDTH="33%"
WIDTH="33%"
ALIGN="right"
ALIGN="right"
VALIGN="top"
VALIGN="top"
><A
><A
HREF="devapi-smp-support.html"
HREF="devapi-smp-support.html"
ACCESSKEY="N"
ACCESSKEY="N"
>Next</A
>Next</A
></TD
></TD
></TR
></TR
><TR
><TR
><TD
><TD
WIDTH="33%"
WIDTH="33%"
ALIGN="left"
ALIGN="left"
VALIGN="top"
VALIGN="top"
>Device Driver Interface to the Kernel</TD
>Device Driver Interface to the Kernel</TD
><TD
><TD
WIDTH="34%"
WIDTH="34%"
ALIGN="center"
ALIGN="center"
VALIGN="top"
VALIGN="top"
><A
><A
HREF="devapi-device-driver-interface-to-the-kernel.html"
HREF="devapi-device-driver-interface-to-the-kernel.html"
ACCESSKEY="U"
ACCESSKEY="U"
>Up</A
>Up</A
></TD
></TD
><TD
><TD
WIDTH="33%"
WIDTH="33%"
ALIGN="right"
ALIGN="right"
VALIGN="top"
VALIGN="top"
>SMP Support</TD
>SMP Support</TD
></TR
></TR
></TABLE
></TABLE
></DIV
></DIV
></BODY
></BODY
></HTML
></HTML
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.