/* * Copyright 2023 NXP * * SPDX-License-Identifier: Apache-2.0 */ #ifndef __TEST_SHARED_IRQ_H__ #define __TEST_SHARED_IRQ_H__ #include #include #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__ */