| /* |
| * Copyright 2023 NXP |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef __TEST_SHARED_IRQ_H__ |
| #define __TEST_SHARED_IRQ_H__ |
| |
| #include <zephyr/ztest.h> |
| #include <zephyr/interrupt_util.h> |
| |
| #define IRQ_PRIORITY 1 |
| #define TEST_VECTOR_SIZE 10 |
| #define TEST_INVALID_IDX 0xcafebabe |
| #define TEST_DUMMY_ISR_VAL 0xdeadbeef |
| #define TEST_INVALID_IRQ 0xcafebabe |
| |
| #define ISR_DEFINE(name) \ |
| static inline void name(const void *data) \ |
| { \ |
| int idx = POINTER_TO_INT(data); \ |
| test_vector[idx] = result_vector[idx]; \ |
| } \ |
| |
| static uint32_t test_vector[TEST_VECTOR_SIZE] = { |
| }; |
| |
| static uint32_t result_vector[TEST_VECTOR_SIZE] = { |
| 0xdeadbeef, |
| 0xcafebabe, |
| 0x1234cafe, |
| }; |
| |
| ISR_DEFINE(test_isr_0); |
| ISR_DEFINE(test_isr_1); |
| ISR_DEFINE(test_isr_2); |
| |
| static inline bool client_exists_at_index(void (*routine)(const void *arg), |
| void *arg, int irq, size_t idx) |
| { |
| size_t i; |
| struct z_shared_isr_table_entry *shared_entry; |
| struct _isr_table_entry *client; |
| |
| shared_entry = &z_shared_sw_isr_table[irq]; |
| |
| if (idx == TEST_INVALID_IDX) { |
| for (i = 0; i < shared_entry->client_num; i++) { |
| client = &shared_entry->clients[i]; |
| |
| if (client->isr == routine && client->arg == arg) { |
| return true; |
| } |
| } |
| } else { |
| if (shared_entry->client_num <= idx) { |
| return false; |
| } |
| |
| client = &shared_entry->clients[idx]; |
| |
| return client->isr == routine && client->arg == arg; |
| } |
| |
| return false; |
| } |
| |
| #endif /* __TEST_SHARED_IRQ_H__ */ |