#ifndef _FRSH_SHARED_OBJECTS_H_
#define _FRSH_SHARED_OBJECTS_H_
-#include "frsh_fosa.h"
#include "frsh_shared_objects_types.h"
#include "frsh_core_types.h"
+FRSH_CPP_BEGIN_DECLS
#define FRSH_SHAREDOBJS_MODULE_SUPPORTED 1
* kind of object (protected or unprotected) specified by obj_kind
*
* @param[in] obj_label Label defined by the application. Char * for
- * a string of SHAREDOBJ_LABEL_MAXLENGTH
+ * a string of FRSH_MAX_SIZE_SHARED_OBJ_LABEL
* characters (+ null terminating \0).
*
* @param[in] obj_kind Whether it is protected or unprotected.
* obj_handle. Otherwise, an error code is returned.
*
* @param[in] obj_label Defined by the application at object creation
- * time. Char * for a string of SHAREDOBJ_LABEL_MAXLENGTH
- * characters (+ null terminating \0).
+ * time. Char * for a string of FRSH_MAX_SIZE_SHARED_OBJ_LABEL
+ * characters (+ null terminating \0).
*
* @param[out] obj_handle Placeholder for the object handle.
*
*
* @param[in] obj_handle Shared object previously initialised.
*
- * @param[in] wcet Execution time of the critical section. Note that
- * normal budgets associated with contracts must NOT
- * include this time.
+ * @param[in] wcet Execution time of the critical section. This
+ * budget is consumed in parallel with the vres budget.
*
- * @param[out] cset Critical section memory placeholder.
+ * @param[out] csect Critical section memory placeholder.
*
* @return 0 if no error \n
* FRSH_ERR_BAD_ARGUMENT : if obj_handle is NULL \b or \n
**/
int frsh_csect_init
(frsh_sharedobj_handle_t obj_handle,
- struct timespec wcet,
+ frsh_rel_time_t wcet,
frsh_csect_t *csect);
* shared object stored in the critical section referenced by csect
*
* @return 0 if no error \n
- * FRSH_ERR_BAD_ARGUMENT : if cset or obj_handle are NULL or cset
+ * FRSH_ERR_BAD_ARGUMENT : if csect or obj_handle are NULL or csect
* is not correct \n
* FRSH_ERR_NOT_SCHEDULED_CALLING_THREAD : if the calling thread is not
* scheduled under the FRSH \n
*
**/
int frsh_csect_get_sharedobj_handle
- (const frsh_csect_t *cset,
+ (const frsh_csect_t *csect,
frsh_sharedobj_handle_t * obj_handle);
/**
* of the operation stored in the critical section referenced by csect.
*
* @return 0 if no error \n
- * FRSH_ERR_BAD_ARGUMENT : if cset or wcet are NULL or cset
+ * FRSH_ERR_BAD_ARGUMENT : if csect or wcet are NULL or csect
* is not correct \n
* FRSH_ERR_NOT_SCHEDULED_CALLING_THREAD : if the calling thread is not
* scheduled under FRSH \n
*
**/
int frsh_csect_get_wcet
- (const frsh_csect_t *cset,
- struct timespec *wcet);
+ (const frsh_csect_t *csect,
+ frsh_rel_time_t *wcet);
/**
* The function returns an error if the shared_object is unprotected.
*
* @return 0 if no error \n
- * FRSH_ERR_BAD_ARGUMENT : if cset or op are NULL or if csect points
+ * FRSH_ERR_BAD_ARGUMENT : if csect or op are NULL or if csect points
* to a wrong critical section or if the shared_object is of type
* unprotected.
* FRSH_ERR_NOT_SCHEDULED_CALLING_THREAD : if the calling thread is not
*
**/
int frsh_csect_register_read_op
- (frsh_csect_t *cset,
+ (frsh_csect_t *csect,
frsh_csect_op_t op);
/**
* The function returns an error if the shared_object is unprotected.
*
* @return 0 if no error \n
- * FRSH_ERR_BAD_ARGUMENT : if op, cset or areas are NULL or cset points
- * to a wrong critical section or if the shared_object of csect
- * is of type unprotected.
+ * FRSH_ERR_BAD_ARGUMENT : if op, csect or areas are NULL or csect points
+ * to a wrong critical section, or areas has a wrong size, or if the
+ * shared_object of csect is of type unprotected.
* FRSH_ERR_NOT_SCHEDULED_CALLING_THREAD : if the calling thread is not
* scheduled under the FRSH \n
* FRSH_ERR_INVALID_SCHEDULER_REPLY : the scheduler is wrong or not
*
**/
int frsh_csect_register_write_op
- (frsh_csect_t *cset,
+ (frsh_csect_t *csect,
frsh_csect_op_t op,
const frsh_memory_areas_t *areas);
* frsh_csect_get_op_kind()
*
* Returns the type of operation (read/write/unchecked) of the critical section.
-
+ *
* @return 0 if no error \n
- * FRSH_ERR_BAD_ARGUMENT : if cset or op_kind are NULL or cset
+ * FRSH_ERR_BAD_ARGUMENT : if csect or op_kind are NULL or csect
* is not correct \n
* FRSH_ERR_NOT_SCHEDULED_CALLING_THREAD : if the calling thread is not
* scheduled under FRSH \n
*
**/
int frsh_csect_get_op_kind
- (const frsh_csect_t *cset,
+ (const frsh_csect_t *csect,
frsh_csect_op_kind_t *op_kind);
* frsh_csect_get_read_op()
*
* Get into the variable pointed to by op the operation pointer stored
- * in the critical section referenced by cset.
+ * in the critical section referenced by csect.
*
* If the csect is of type write or unchecked it returns an error.
*
* @return 0 if no error \n
- * FRSH_ERR_BAD_ARGUMENT : if cset is NULL or points to a wrong
+ * FRSH_ERR_BAD_ARGUMENT : if csect is NULL or points to a wrong
* critical section, or to a critical section that is not of the
* FRSH_CSOK_READ kind \n
* FRSH_ERR_NOT_SCHEDULED_CALLING_THREAD : if the calling thread is not
*
**/
int frsh_csect_get_read_op
- (const frsh_csect_t *cset,
+ (const frsh_csect_t *csect,
frsh_csect_op_t *op);
/**
* frsh_csect_get_write_op()
*
- * Get the oparation pointer and the memory areas stored in the csect.
+ * Get the operation pointer and the memory areas stored in the csect.
*
* If the csect is of type read or unchecked.
*
* @return 0 if no error \n
- * FRSH_ERR_BAD_ARGUMENT : if cset is NULL or points to a wrong
+ * FRSH_ERR_BAD_ARGUMENT : if csect is NULL or points to a wrong
* critical section, or to a critical section that is not of the
* FRSH_CSOK_WRITE kind \n
* FRSH_ERR_NOT_SCHEDULED_CALLING_THREAD : if the calling thread is not
*
**/
int frsh_csect_get_write_op
- (const frsh_csect_t *cset,
+ (const frsh_csect_t *csect,
frsh_csect_op_t *op,
frsh_memory_areas_t *areas);
*
* Invoke the registered operation in the critical section, with the pointers
* to the input and output parameters specified by input_arg and
- * output arg, setting a budget for the operation and executing the
- * registered operation.
+ * output arg.
*
* If the section is of type FRSH_CSOK_UNCHECKED, the function returns
* an error.
*
- * For read operations, the mutex is locked, the budget is set equal
+ * For read operations, the mutex is locked, the csect budget is set equal
* to the wcet, the registered read operation is invoked, and then the
* mutex is unlocked; if the csect budget expires, the operation is
* interrupted, the mutex is unlocked, and the function returns with
* an error code.
*
* For write operations, the mutex is locked, the registered memory
- * areas are backed up, a budget is set equal to the wcet, the
+ * areas are backed up, the csect budget is set equal to the wcet, the
* registered write operation is called, and the mutex is unlocked. If
- * the budget expires, the operation is interrupted, the backed-up
+ * the csect budget expires, the operation is interrupted, the backed-up
* memory areas are recovered, the mutex is unlocked, and the function
* returns with an error code. The blocking time suffered by higher
* priority tasks is at most the wcet of the operation plus the backup
* returns an error.
*
* @return 0 if no error \n
- * FRSH_ERR_BAD_ARGUMENT : if cset is NULL or points to a wrong
+ * FRSH_ERR_BAD_ARGUMENT : if csect is NULL or points to a wrong
* critical section, or to a critical section that is unprotected \n
- * FRSH_ERR_BUDGET_EXPIRED : the budget expired and the protected
+ * FRSH_ERR_BUDGET_EXPIRED : the csect budget expired and the protected
* operation was interrupted \n
* FRSH_ERR_NOT_SCHEDULED_CALLING_THREAD : if the calling thread is not
* scheduled under FRSH \n
*
**/
int frsh_csect_invoke
- (const frsh_csect_t *cset,
+ (const frsh_csect_t *csect,
const void * input_arg,
void * output_arg);
* Get in the variable pointed to by blocking the maximum blocking
* time of the operation of the referenced protected critical section.
*
- * For read operations, the maximum blocking time is the wcet.
+ * For read or unchecked operations, the maximum blocking time is the wcet.
*
* For write operations, the maximum blocking time suffered by higher
* priority tasks is the wcet of the operation plus the backup time
* plus the recovery time.
*
* @return 0 if no error \n
- * FRSH_ERR_BAD_ARGUMENT : if cset or blocking are NULL or if csect
+ * FRSH_ERR_BAD_ARGUMENT : if csect or blocking are NULL or if csect
* points to a wrong critical section, or to a critical section
* that is unprotected \n
* FRSH_ERR_NOT_SCHEDULED_CALLING_THREAD : if the calling thread is not
*
**/
int frsh_csect_get_blocking_time
- (const frsh_csect_t *cset,
- struct timespec *blocking);
+ (const frsh_csect_t *csect,
+ frsh_rel_time_t *blocking);
+
+
+/**
+ * frsh_csect_destroy()
+ *
+ * Destroy a critical section, deallocating all the resources that may
+ * have been allocated to it.
+ **/
+int frsh_csect_destroy
+ (frsh_csect_t *csect);
+
+/**
+ * frsh_csect_register_thread()
+ *
+ * Register the calling thread for invoking time-protected critical
+ * sections via frsh_csect_invoke.
+ **/
+int frsh_csect_register_thread();
+
+/**
+ * frsh_csect_deregister_thread()
+ *
+ * Deregister the calling thread from being able to invoke
+ * time-protected critical sections. This operation releases system
+ * resources that may have been allocated for the thread.
+ **/
+int frsh_csect_deregister_thread();
+
/*@}*/ /* For so_critical group */
* @return 0 if no error \n
* FRSH_ERR_BAD_ARGUMENT : if any of the pointers is NULL or
* the size of the critical_sections structure is less than zero
- * or grater than FRSH_MAX_N_CRITICAL_SECTIONS
+ * or greater than FRSH_MAX_N_CRITICAL_SECTIONS
*
**/
int frsh_contract_set_csects
/*@}*/ /* For shared_objects group */
+FRSH_CPP_END_DECLS
+
#endif // _FRSH_SHARED_OBJECTS_H_