blob: 5ddd50a16e1e72eba2a356955b3ebef9de8983d8 [file] [log] [blame]
/*
* 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__ */