Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:13

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /**
0004  * @file
0005  *
0006  * @ingroup RTEMSScoreWatchdog
0007  *
0008  * @brief This header file provides interfaces of the
0009  *   @ref RTEMSScoreWatchdog which are used by the implementation and the
0010  *   @ref RTEMSImplApplConfig.
0011  */
0012 
0013 /*
0014  *  COPYRIGHT (c) 1989-2009.
0015  *  On-Line Applications Research Corporation (OAR).
0016  *
0017  * Redistribution and use in source and binary forms, with or without
0018  * modification, are permitted provided that the following conditions
0019  * are met:
0020  * 1. Redistributions of source code must retain the above copyright
0021  *    notice, this list of conditions and the following disclaimer.
0022  * 2. Redistributions in binary form must reproduce the above copyright
0023  *    notice, this list of conditions and the following disclaimer in the
0024  *    documentation and/or other materials provided with the distribution.
0025  *
0026  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0027  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0028  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0029  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0030  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0031  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0032  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0033  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0034  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0035  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0036  * POSSIBILITY OF SUCH DAMAGE.
0037  */
0038 
0039 #ifndef _RTEMS_SCORE_WATCHDOG_H
0040 #define _RTEMS_SCORE_WATCHDOG_H
0041 
0042 #include <rtems/score/basedefs.h>
0043 #include <rtems/score/chain.h>
0044 #include <rtems/score/rbtree.h>
0045 
0046 struct Per_CPU_Control;
0047 
0048 #ifdef __cplusplus
0049 extern "C" {
0050 #endif
0051 
0052 /**
0053  * @defgroup RTEMSScoreWatchdog Watchdog Handler
0054  *
0055  * @ingroup RTEMSScore
0056  *
0057  * @brief This group contains the Watchdog Handler implementation.
0058  *
0059  * This handler encapsulates functionality related to the scheduling of
0060  * watchdog functions to be called at specific times in the future.  It
0061  * provides mechanisms which can be used to initialize and manipulate watchdog
0062  * timers.
0063  *
0064  * @note This handler does not have anything to do with hardware watchdog
0065  *       timers.
0066  *
0067  * @{
0068  */
0069 
0070 typedef struct Watchdog_Control Watchdog_Control;
0071 
0072 /**
0073  *  @brief Return type from a Watchdog Service Routine.
0074  *
0075  *  This type defines the return type from a Watchdog Service Routine.
0076  */
0077 typedef void Watchdog_Service_routine;
0078 
0079 /**
0080  *  @brief Pointer to a watchdog service routine.
0081  *
0082  *  This type define a pointer to a watchdog service routine.
0083  */
0084 typedef Watchdog_Service_routine
0085   ( *Watchdog_Service_routine_entry )( Watchdog_Control * );
0086 
0087 /**
0088  * @brief The watchdog header to manage scheduled watchdogs.
0089  */
0090 typedef struct {
0091   /**
0092    * @brief Red-black tree of scheduled watchdogs sorted by expiration time.
0093    */
0094   RBTree_Control Watchdogs;
0095 
0096   /**
0097    * @brief The scheduled watchdog with the earliest expiration time or NULL in
0098    * case no watchdog is scheduled.
0099    */
0100   RBTree_Node *first;
0101 } Watchdog_Header;
0102 
0103 /**
0104  *  @brief The control block used to manage each watchdog timer.
0105  *
0106  *  The following record defines the control block used
0107  *  to manage each watchdog timer.
0108  */
0109 struct Watchdog_Control {
0110   /**
0111    * @brief Nodes for the watchdog.
0112    */
0113   union {
0114     /**
0115      * @brief this field is a red-black tree node structure and allows this to
0116      * be placed on a red-black tree used to manage the scheduled watchdogs.
0117      */
0118     RBTree_Node RBTree;
0119 
0120     /**
0121      * @brief this field is a chain node structure and allows this to be placed
0122      * on a chain used to manage pending watchdogs by the timer server.
0123      */
0124     Chain_Node Chain;
0125   } Node;
0126 
0127 #if defined(RTEMS_SMP)
0128   /** @brief This field references the processor of this watchdog control. */
0129   struct Per_CPU_Control *cpu;
0130 #endif
0131 
0132   /** @brief This field is the function to invoke. */
0133   Watchdog_Service_routine_entry routine;
0134 
0135   /** @brief This field is the expiration time point. */
0136   uint64_t expire;
0137 };
0138 
0139 /** @} */
0140 
0141 #ifdef __cplusplus
0142 }
0143 #endif
0144 
0145 #endif
0146 /* end of include file */