blob: 58a13027f43f40ea2237c0594e011ba93e9381a7 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
#ifndef OPENTITAN_SW_DEVICE_LIB_TESTING_AUTOGEN_ISR_TESTUTILS_H_
#define OPENTITAN_SW_DEVICE_LIB_TESTING_AUTOGEN_ISR_TESTUTILS_H_
${autogen_banner}
/**
* @file
* @brief Default ISRs for each IP
*/
#include "sw/device/lib/dif/dif_rv_plic.h"
% for ip in ips_with_difs:
% if ip.irqs:
#include "sw/device/lib/dif/dif_${ip.name_snake}.h"
% endif
% endfor
#include "hw/top_earlgrey/sw/autogen/top_earlgrey.h" // Generated.
/**
* A handle to a PLIC ISR context struct.
*/
typedef struct plic_isr_ctx {
/**
* A handle to a rv_plic.
*/
dif_rv_plic_t *rv_plic;
/**
* The HART ID associated with the PLIC (correspond to a PLIC "target").
*/
uint32_t hart_id;
} plic_isr_ctx_t;
% for ip in ips_with_difs:
% if ip.irqs:
/**
* A handle to a ${ip.name_snake} ISR context struct.
*/
typedef struct ${ip.name_snake}_isr_ctx {
/**
* A handle to a ${ip.name_snake}.
*/
dif_${ip.name_snake}_t *${ip.name_snake};
/**
* The PLIC IRQ ID where this ${ip.name_snake} instance's IRQs start.
*/
dif_rv_plic_irq_id_t plic_${ip.name_snake}_start_irq_id;
/**
* The ${ip.name_snake} IRQ that is expected to be encountered in the ISR.
*/
dif_${ip.name_snake}_irq_t expected_irq;
/**
* Whether or not a single IRQ is expected to be encountered in the ISR.
*/
bool is_only_irq;
} ${ip.name_snake}_isr_ctx_t;
% endif
% endfor
% for ip in ips_with_difs:
% if ip.irqs:
/**
* Services an ${ip.name_snake} IRQ.
*
* @param plic_ctx A PLIC ISR context handle.
* @param ${ip.name_snake}_ctx A(n) ${ip.name_snake} ISR context handle.
* @param[out] peripheral_serviced Out param for the peripheral that was serviced.
* @param[out] irq_serviced Out param for the IRQ that was serviced.
*/
void isr_testutils_${ip.name_snake}_isr(
plic_isr_ctx_t plic_ctx,
${ip.name_snake}_isr_ctx_t ${ip.name_snake}_ctx,
top_earlgrey_plic_peripheral_t *peripheral_serviced,
dif_${ip.name_snake}_irq_t *irq_serviced);
% endif
% endfor
#endif // OPENTITAN_SW_DEVICE_LIB_TESTING_AUTOGEN_ISR_TESTUTILS_H_