caffeine-hal 0.6.6
A Header-Defined Interface c library, it provides the hal layer for the Caffeine framework
Loading...
Searching...
No Matches
cfn_hal_irq.h
Go to the documentation of this file.
1
26#ifndef CAFFEINE_HAL_HAL_IRQ_H
27#define CAFFEINE_HAL_HAL_IRQ_H
28
29#ifdef __cplusplus
30extern "C"
31{
32#endif
33
34/* Includes ---------------------------------------------------------*/
35#include "cfn_hal.h"
36#include "cfn_hal_base.h"
37#include "cfn_hal_types.h"
38
39/* Defines ----------------------------------------------------------*/
40
41/* Types Enums ------------------------------------------------------*/
42
50
59
60/* Types Structs ----------------------------------------------------*/
61
65typedef struct
66{
69
73typedef struct
74{
75 void *instance;
76 void *user_arg;
78
79typedef struct cfn_hal_irq_s cfn_hal_irq_t;
81
89typedef void (*cfn_hal_irq_callback_t)(cfn_hal_irq_t *driver, uint32_t event_mask, uint32_t error_mask, void *user_arg);
90
95{
97
98 /* IRQ Specific Extensions */
103 cfn_hal_error_code_t (*set_priority)(cfn_hal_irq_t *driver, uint32_t irq_id, uint32_t priority);
105};
107
109/* Functions inline ------------------------------------------------- */
111 uint32_t peripheral_id,
112 struct cfn_hal_clock_s *clock,
113 void *dependency,
114 const cfn_hal_irq_api_t *api,
115 const cfn_hal_irq_phy_t *phy,
116 const cfn_hal_irq_config_t *config,
117 cfn_hal_irq_callback_t callback,
118 void *user_arg)
119{
121 driver, CFN_HAL_PERIPHERAL_TYPE_IRQ, peripheral_id, clock, dependency, api, phy, config, callback, user_arg);
122}
123
131 const cfn_hal_irq_config_t *config)
132{
133 if (driver == NULL || config == NULL)
134 {
136 }
137
138 return cfn_hal_base_config_validate(&driver->base, CFN_HAL_PERIPHERAL_TYPE_IRQ, config);
139}
140
147{
148 if (!driver)
149 {
151 }
152 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
153 cfn_hal_error_code_t error = cfn_hal_irq_config_validate(driver, driver->config);
154 if (error != CFN_HAL_ERROR_OK)
155 {
156 return error;
157 }
158 return cfn_hal_base_init(&driver->base, CFN_HAL_PERIPHERAL_TYPE_IRQ);
159}
160
167{
168 if (!driver)
169 {
171 }
173}
174
182{
183 if (!driver)
184 {
186 }
188 if (error != CFN_HAL_ERROR_OK)
189 {
190 return error;
191 }
192 {
193 driver->config = config;
194 }
195 return cfn_hal_base_config_set(&driver->base, CFN_HAL_PERIPHERAL_TYPE_IRQ, (const void *) config);
196}
197
205{
206 if (!driver || !config || !driver->config)
207 {
209 }
210 *config = *(driver->config);
211 return CFN_HAL_ERROR_OK;
212}
213
222 const cfn_hal_irq_callback_t callback,
223 void *user_arg)
224{
225 if (!driver)
226 {
228 }
229 {
230 driver->cb = callback;
231 driver->cb_user_arg = user_arg;
232 }
234 &driver->base, CFN_HAL_PERIPHERAL_TYPE_IRQ, (cfn_hal_callback_t) callback, user_arg);
235}
236
251
259{
260 if (!driver)
261 {
263 }
264 return cfn_hal_base_event_enable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_IRQ, event_mask);
265}
266
274{
275 if (!driver)
276 {
278 }
279 return cfn_hal_base_event_disable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_IRQ, event_mask);
280}
281
289{
290 if (!driver)
291 {
293 }
294 return cfn_hal_base_event_get(&driver->base, CFN_HAL_PERIPHERAL_TYPE_IRQ, event_mask);
295}
296
304{
305 if (!driver)
306 {
308 }
309 return cfn_hal_base_error_enable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_IRQ, error_mask);
310}
311
319{
320 if (!driver)
321 {
323 }
324 return cfn_hal_base_error_disable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_IRQ, error_mask);
325}
326
334{
335 if (!driver)
336 {
338 }
339 return cfn_hal_base_error_get(&driver->base, CFN_HAL_PERIPHERAL_TYPE_IRQ, error_mask);
340}
341
342/* IRQ Specific Functions ------------------------------------------- */
343
355
367
375{
377 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_IRQ, enable_vector, driver, error, irq_id);
378 return error;
379}
380
388{
390 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_IRQ, disable_vector, driver, error, irq_id);
391 return error;
392}
393
402{
404 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_IRQ, set_priority, driver, error, irq_id, priority);
405 return error;
406}
407
415{
417 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_IRQ, clear_pending, driver, error, irq_id);
418 return error;
419}
421 const cfn_hal_irq_config_t *config,
422 const cfn_hal_irq_phy_t *phy,
423 struct cfn_hal_clock_s *clock,
424 void *dependency,
425 cfn_hal_irq_callback_t callback,
426 void *user_arg);
428#ifdef __cplusplus
429}
430#endif
431
432#endif // CAFFEINE_HAL_HAL_IRQ_H
Core Hardware Abstraction Layer definitions and macros.
#define CFN_HAL_CHECK_AND_CALL_FUNC_VARG(expected_peripheral_type, func, driver, result,...)
Definition cfn_hal.h:134
#define CFN_HAL_CHECK_AND_CALL_FUNC(expected_peripheral_type, func, driver, result)
Definition cfn_hal.h:114
#define CFN_HAL_INLINE
Macro for inlining HAL wrapper functions. Can be overridden with attribute((always_inline)) for perfo...
Definition cfn_hal.h:61
#define CFN_HAL_BIT(x)
Definition cfn_hal.h:79
#define CFN_HAL_CREATE_DRIVER_TYPE(prefix, config_type, api_type, phy_type, cb_type)
Definition cfn_hal.h:102
Base driver Hardware Abstraction Layer declarations.
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_error_disable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t error_mask)
Generic error disable for any driver. Deactivates exception-flow hardware triggers based on the provi...
Definition cfn_hal_base_impl.h:436
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_callback_register(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, cfn_hal_callback_t callback, void *user_arg)
Generic callback registration for any driver.
Definition cfn_hal_base_impl.h:254
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_error_enable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t error_mask)
Generic error enable for any driver. Activates exception-flow hardware triggers based on the provided...
Definition cfn_hal_base_impl.h:411
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_event_enable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t event_mask)
Generic event enable for any driver. Activates nominal hardware triggers based on the provided mask.
Definition cfn_hal_base_impl.h:331
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_event_get(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t *event_mask)
Generic event status getter for any driver. Retrieves the current nominal hardware triggers/flags.
Definition cfn_hal_base_impl.h:386
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_error_get(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t *error_mask)
Generic error status getter for any driver. Retrieves current exception-flow hardware flags/errors.
Definition cfn_hal_base_impl.h:461
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_config_set(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, const void *config)
Generic configuration setter for any driver.
Definition cfn_hal_base_impl.h:196
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_power_state_set(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, cfn_hal_power_state_t state)
Generic power state transition for any driver.
Definition cfn_hal_base_impl.h:279
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_deinit(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type)
Generic deinitialization for any driver. Returns the driver to the CONSTRUCTED state and releases boa...
Definition cfn_hal_base_impl.h:144
#define CFN_HAL_VMT_CHECK(api_struct_type)
Compile-time check to ensure a peripheral API struct is compatible with the base layer....
Definition cfn_hal_base.h:91
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_init(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type)
Generic initialization for any driver. Handles board-level hooks, type validation,...
Definition cfn_hal_base_impl.h:85
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_config_validate(const cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, const void *config)
Generic validation for a configuration.
Definition cfn_hal_base_impl.h:234
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_event_disable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t event_mask)
Generic event disable for any driver. Deactivates nominal hardware triggers based on the provided mas...
Definition cfn_hal_base_impl.h:361
#define CFN_HAL_POPULATE_DRIVER( driver_ptr, periph_type, periph_id, clock_ptr, dep_ptr, api_ptr, phy_ptr, cfg_ptr, cb_func, cb_arg)
Standardizes the population of a peripheral driver structure. This macro ensures that the base driver...
Definition cfn_hal_base_impl.h:45
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_clear_pending(cfn_hal_irq_t *driver, uint32_t irq_id)
Clears the pending status of a specific interrupt vector.
Definition cfn_hal_irq.h:414
cfn_hal_irq_error_t
IRQ exception error flags.
Definition cfn_hal_irq.h:55
@ CFN_HAL_IRQ_ERROR_GENERAL
Definition cfn_hal_irq.h:57
@ CFN_HAL_IRQ_ERROR_NONE
Definition cfn_hal_irq.h:56
cfn_hal_error_code_t cfn_hal_irq_destruct(cfn_hal_irq_t *driver)
Definition cfn_hal_irq_port.c:87
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_disable_vector(cfn_hal_irq_t *driver, uint32_t irq_id)
Disables a specific interrupt vector.
Definition cfn_hal_irq.h:387
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_enable_vector(cfn_hal_irq_t *driver, uint32_t irq_id)
Enables a specific interrupt vector.
Definition cfn_hal_irq.h:374
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_set_priority(cfn_hal_irq_t *driver, uint32_t irq_id, uint32_t priority)
Sets the priority level for a specific interrupt vector.
Definition cfn_hal_irq.h:401
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_event_get(cfn_hal_irq_t *driver, uint32_t *event_mask)
Retrieves the current IRQ nominal event status.
Definition cfn_hal_irq.h:288
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_event_disable(cfn_hal_irq_t *driver, uint32_t event_mask)
Disables one or more IRQ nominal events.
Definition cfn_hal_irq.h:273
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_config_validate(const cfn_hal_irq_t *driver, const cfn_hal_irq_config_t *config)
Validates the IRQ configuration.
Definition cfn_hal_irq.h:130
CFN_HAL_INLINE void cfn_hal_irq_populate(cfn_hal_irq_t *driver, uint32_t peripheral_id, struct cfn_hal_clock_s *clock, void *dependency, const cfn_hal_irq_api_t *api, const cfn_hal_irq_phy_t *phy, const cfn_hal_irq_config_t *config, cfn_hal_irq_callback_t callback, void *user_arg)
Definition cfn_hal_irq.h:110
struct cfn_hal_irq_s cfn_hal_irq_t
Definition cfn_hal_irq.h:79
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_global_disable(cfn_hal_irq_t *driver)
Disables interrupts globally at the processor level.
Definition cfn_hal_irq.h:361
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_power_state_set(cfn_hal_irq_t *driver, cfn_hal_power_state_t state)
Sets the IRQ power state.
Definition cfn_hal_irq.h:243
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_callback_register(cfn_hal_irq_t *driver, const cfn_hal_irq_callback_t callback, void *user_arg)
Registers a callback for IRQ events and errors.
Definition cfn_hal_irq.h:221
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_config_get(cfn_hal_irq_t *driver, cfn_hal_irq_config_t *config)
Gets the current IRQ configuration.
Definition cfn_hal_irq.h:204
cfn_hal_error_code_t cfn_hal_irq_construct(cfn_hal_irq_t *driver, const cfn_hal_irq_config_t *config, const cfn_hal_irq_phy_t *phy, struct cfn_hal_clock_s *clock, void *dependency, cfn_hal_irq_callback_t callback, void *user_arg)
Definition cfn_hal_irq_port.c:71
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_error_enable(cfn_hal_irq_t *driver, uint32_t error_mask)
Enables one or more IRQ exception errors.
Definition cfn_hal_irq.h:303
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_error_disable(cfn_hal_irq_t *driver, uint32_t error_mask)
Disables one or more IRQ exception errors.
Definition cfn_hal_irq.h:318
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_config_set(cfn_hal_irq_t *driver, const cfn_hal_irq_config_t *config)
Sets the IRQ configuration.
Definition cfn_hal_irq.h:181
void(* cfn_hal_irq_callback_t)(cfn_hal_irq_t *driver, uint32_t event_mask, uint32_t error_mask, void *user_arg)
IRQ callback signature.
Definition cfn_hal_irq.h:89
cfn_hal_irq_event_t
IRQ nominal event flags.
Definition cfn_hal_irq.h:47
@ CFN_HAL_IRQ_EVENT_NONE
Definition cfn_hal_irq.h:48
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_deinit(cfn_hal_irq_t *driver)
Deinitializes the IRQ controller driver.
Definition cfn_hal_irq.h:166
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_global_enable(cfn_hal_irq_t *driver)
Enables interrupts globally at the processor level.
Definition cfn_hal_irq.h:349
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_init(cfn_hal_irq_t *driver)
Initializes the IRQ controller driver.
Definition cfn_hal_irq.h:146
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_error_get(cfn_hal_irq_t *driver, uint32_t *error_mask)
Retrieves the current IRQ exception error status.
Definition cfn_hal_irq.h:333
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_irq_event_enable(cfn_hal_irq_t *driver, uint32_t event_mask)
Enables one or more IRQ nominal events.
Definition cfn_hal_irq.h:258
Common type definitions and enums for the HAL.
void(* cfn_hal_callback_t)(void)
Generic function pointer for HAL callbacks. Used as a standard-compliant carrier in the base layer.
Definition cfn_hal_types.h:98
#define CFN_HAL_PERIPHERAL_TYPE_IRQ
Definition cfn_hal_types.h:133
enum cfn_hal_error_codes cfn_hal_error_code_t
cfn_hal_power_state_t
Definition cfn_hal_types.h:156
@ CFN_HAL_ERROR_OK
Definition cfn_hal_types.h:50
@ CFN_HAL_ERROR_BAD_PARAM
Definition cfn_hal_types.h:53
Base API structure for all peripheral drivers. Every peripheral-specific API struct MUST have this as...
Definition cfn_hal_base.h:63
IRQ Virtual Method Table (VMT).
Definition cfn_hal_irq.h:95
cfn_hal_error_code_t(* set_priority)(cfn_hal_irq_t *driver, uint32_t irq_id, uint32_t priority)
Definition cfn_hal_irq.h:103
cfn_hal_api_base_t base
Definition cfn_hal_irq.h:96
cfn_hal_error_code_t(* global_enable)(cfn_hal_irq_t *driver)
Definition cfn_hal_irq.h:99
cfn_hal_error_code_t(* disable_vector)(cfn_hal_irq_t *driver, uint32_t irq_id)
Definition cfn_hal_irq.h:102
cfn_hal_error_code_t(* enable_vector)(cfn_hal_irq_t *driver, uint32_t irq_id)
Definition cfn_hal_irq.h:101
cfn_hal_error_code_t(* clear_pending)(cfn_hal_irq_t *driver, uint32_t irq_id)
Definition cfn_hal_irq.h:104
cfn_hal_error_code_t(* global_disable)(cfn_hal_irq_t *driver)
Definition cfn_hal_irq.h:100
IRQ configuration structure.
Definition cfn_hal_irq.h:66
void * user_config
Definition cfn_hal_irq.h:67
IRQ hardware physical mapping.
Definition cfn_hal_irq.h:74
void * user_arg
Definition cfn_hal_irq.h:76
void * instance
Definition cfn_hal_irq.h:75