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  * @brief Constants and Structures Associated
0007  * with the CBS library in RTEMS
0008  *
0009  * This include file contains all the constants and structures associated
0010  * with the CBS library in RTEMS.
0011  */
0012 
0013 /*
0014  *  Copyright (C) 2011 Petr Benes.
0015  *  Copyright (C) 2011 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 CONFIGURE_SCHEDULER_CBS
0040   #error "cbs.h available only with CONFIGURE_SCHEDULER_CBS"
0041 #endif
0042 
0043 #ifndef _RTEMS_CBS_H
0044 #define _RTEMS_CBS_H
0045 
0046 #include <rtems/score/schedulercbs.h>
0047 
0048 #ifdef __cplusplus
0049 extern "C" {
0050 #endif
0051 
0052 /* Return codes. */
0053 #define RTEMS_CBS_OK                       SCHEDULER_CBS_OK
0054 #define RTEMS_CBS_ERROR_GENERIC            SCHEDULER_CBS_ERROR_GENERIC
0055 #define RTEMS_CBS_ERROR_NO_MEMORY          SCHEDULER_CBS_ERROR_NO_MEMORY
0056 #define RTEMS_CBS_ERROR_INVALID_PARAMETER  SCHEDULER_CBS_ERROR_INVALID_PARAM
0057 #define RTEMS_CBS_ERROR_UNAUTHORIZED       SCHEDULER_CBS_ERROR_UNAUTHORIZED
0058 #define RTEMS_CBS_ERROR_UNIMPLEMENTED      SCHEDULER_CBS_ERROR_UNIMPLEMENTED
0059 #define RTEMS_CBS_ERROR_MISSING_COMPONENT  SCHEDULER_CBS_ERROR_MISSING_COMPONENT
0060 #define RTEMS_CBS_ERROR_INCONSISTENT_STATE SCHEDULER_CBS_ERROR_INCONSISTENT_STATE
0061 #define RTEMS_CBS_ERROR_SYSTEM_OVERLOAD    SCHEDULER_CBS_ERROR_SYSTEM_OVERLOAD
0062 #define RTEMS_CBS_ERROR_INTERNAL_ERROR     SCHEDULER_CBS_ERROR_INTERNAL_ERROR
0063 #define RTEMS_CBS_ERROR_NOT_FOUND          SCHEDULER_CBS_ERROR_NOT_FOUND
0064 #define RTEMS_CBS_ERROR_FULL               SCHEDULER_CBS_ERROR_FULL
0065 #define RTEMS_CBS_ERROR_EMPTY              SCHEDULER_CBS_ERROR_EMPTY
0066 #define RTEMS_CBS_ERROR_NOSERVER           SCHEDULER_CBS_ERROR_NOSERVER
0067 
0068 /** Callback function invoked when a budget overrun of a task occurs. */
0069 typedef Scheduler_CBS_Budget_overrun rtems_cbs_budget_overrun;
0070 
0071 /** Server id. */
0072 typedef Scheduler_CBS_Server_id rtems_cbs_server_id;
0073 
0074 /** Server parameters. */
0075 typedef Scheduler_CBS_Parameters rtems_cbs_parameters;
0076 
0077 /**
0078  * @brief Initialize the CBS library.
0079  *
0080  * Initializes the CBS library.
0081  *
0082  * @return status code.
0083  */
0084 static inline int rtems_cbs_initialize ( void )
0085 {
0086   return _Scheduler_CBS_Initialize();
0087 }
0088 
0089 /**
0090  * @brief Cleanup resources associated to the CBS Library
0091  *
0092  * Cleanup resources associated to the CBS Library.
0093  *
0094  * @return status code.
0095  */
0096 static inline int rtems_cbs_cleanup ( void )
0097 {
0098   return _Scheduler_CBS_Cleanup();
0099 }
0100 
0101 /**
0102  * @brief Create a new server with specified parameters.
0103  *
0104  * Create a new server with specified parameters.
0105  *
0106  * @return status code.
0107  */
0108 static inline int rtems_cbs_create_server (
0109   rtems_cbs_parameters     *params,
0110   rtems_cbs_budget_overrun  budget_overrun_callback,
0111   rtems_cbs_server_id      *server_id
0112 )
0113 {
0114   return _Scheduler_CBS_Create_server(
0115              params,
0116              budget_overrun_callback,
0117              server_id
0118          );
0119 }
0120 
0121 /**
0122  * @brief Attach a task to an already existing server.
0123  *
0124  * Attach a task to an already existing server.
0125  *
0126  * @return status code.
0127  */
0128 static inline int rtems_cbs_attach_thread (
0129   rtems_cbs_server_id server_id,
0130   rtems_id            task_id
0131 )
0132 {
0133   return _Scheduler_CBS_Attach_thread( server_id, task_id );
0134 }
0135 
0136 /**
0137  * @brief Detach from the CBS server.
0138  *
0139  * Detach from the CBS Server.
0140  *
0141  * @return status code.
0142  */
0143 static inline int rtems_cbs_detach_thread (
0144   rtems_cbs_server_id server_id,
0145   rtems_id            task_id
0146 )
0147 {
0148   return _Scheduler_CBS_Detach_thread( server_id, task_id );
0149 }
0150 
0151 /**
0152  * @brief Detach all tasks from a server and destroy it.
0153  *
0154  * Detach all tasks from a server and destroy it.
0155  *
0156  * @return status code.
0157  */
0158 static inline int rtems_cbs_destroy_server (
0159   rtems_cbs_server_id server_id
0160 )
0161 {
0162   return _Scheduler_CBS_Destroy_server( server_id );
0163 }
0164 
0165 /**
0166  * @brief Get CBS server id.
0167  *
0168  * Get a thread server id, or RTEMS_CBS_E_NOT_FOUND if it is not
0169  * attached to any server.
0170  *
0171  * @return status code.
0172  */
0173 static inline int rtems_cbs_get_server_id (
0174   rtems_id             task_id,
0175   rtems_cbs_server_id *server_id
0176 )
0177 {
0178   return _Scheduler_CBS_Get_server_id( task_id, server_id );
0179 }
0180 
0181 /**
0182  * @brief Get CBS parameters.
0183  *
0184  * Retrieve CBS scheduling parameters.
0185  *
0186  * @return status code.
0187  */
0188 static inline int rtems_cbs_get_parameters (
0189   rtems_cbs_server_id   server_id,
0190   rtems_cbs_parameters *params
0191 )
0192 {
0193   return _Scheduler_CBS_Get_parameters( server_id, params );
0194 }
0195 
0196 /**
0197  * @brief Set CBS parameters.
0198  *
0199  * Change CBS scheduling parameters.
0200  *
0201  * @return status code.
0202  */
0203 static inline int rtems_cbs_set_parameters (
0204   rtems_cbs_server_id   server_id,
0205   rtems_cbs_parameters *params
0206 )
0207 {
0208   return _Scheduler_CBS_Set_parameters( server_id, params );
0209 }
0210 
0211 /**
0212  * @brief Get the CBS get execution time.
0213  *
0214  * Retrieve time info relative to the current server.
0215  *
0216  * @return status code.
0217  */
0218 static inline int rtems_cbs_get_execution_time (
0219   rtems_cbs_server_id    server_id,
0220   time_t                *exec_time,
0221   time_t                *abs_time
0222 )
0223 {
0224   return _Scheduler_CBS_Get_execution_time( server_id, exec_time, abs_time );
0225 }
0226 
0227 /**
0228  * @brief Get the remaining CBS budget.
0229  *
0230  * Retrieve remaining budget for the current server instance.
0231  *
0232  * @return status code.
0233  */
0234 static inline int rtems_cbs_get_remaining_budget (
0235   rtems_cbs_server_id  server_id,
0236   time_t              *remaining_budget
0237 )
0238 {
0239   return _Scheduler_CBS_Get_remaining_budget( server_id, remaining_budget );
0240 }
0241 
0242 /**
0243  * @brief Get the approved CBS budget.
0244  *
0245  * Retrieve the budget that has been approved for the subsequent
0246  * server instances.
0247  *
0248  * @return status code.
0249  */
0250 static inline int rtems_cbs_get_approved_budget (
0251   rtems_cbs_server_id  server_id,
0252   time_t              *appr_budget
0253 )
0254 {
0255   return _Scheduler_CBS_Get_approved_budget( server_id, appr_budget );
0256 }
0257 
0258 #ifdef __cplusplus
0259 }
0260 #endif
0261 
0262 #endif
0263 /* end of include file */