|  | // 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_SILICON_CREATOR_ROM_ROM_H_ | 
|  | #define OPENTITAN_SW_DEVICE_SILICON_CREATOR_ROM_ROM_H_ | 
|  |  | 
|  | #include <stdnoreturn.h> | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif  // __cplusplus | 
|  |  | 
|  | /** | 
|  | * Denotes functions that have to use the interrupt handler ABI. | 
|  | * | 
|  | * These must be 4-byte aligned. Note that they don't use the `interrupt` | 
|  | * attribute since ROM handlers shut down the chip instead of returning like | 
|  | * regular handlers. | 
|  | */ | 
|  | #define ROM_INTERRUPT_HANDLER_ABI __attribute__((aligned(4))) | 
|  |  | 
|  | /** | 
|  | * Denotes functions that have to be near the interrupt vector, because they | 
|  | * are jumped to from it. | 
|  | */ | 
|  | #define ROM_VECTOR_FUNCTION __attribute__((section(".crt"))) | 
|  |  | 
|  | /** | 
|  | * The first assembly procedure executed by the ROM (defined in | 
|  | * `rom.S`). | 
|  | * | 
|  | * This procedure does not obey the standard RISC-V calling convention, so it | 
|  | * must not be called from other C code. | 
|  | */ | 
|  | ROM_VECTOR_FUNCTION | 
|  | noreturn void _rom_start_boot(void); | 
|  |  | 
|  | /** | 
|  | * The first C function executed by the ROM (defined in `rom.c`) | 
|  | */ | 
|  | noreturn void rom_main(void); | 
|  |  | 
|  | /** | 
|  | * ROM hardware exception handler. | 
|  | */ | 
|  | ROM_VECTOR_FUNCTION | 
|  | ROM_INTERRUPT_HANDLER_ABI | 
|  | noreturn void rom_interrupt_handler(void); | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | }  // extern "C" | 
|  | #endif  // __cplusplus | 
|  |  | 
|  | #endif  // OPENTITAN_SW_DEVICE_SILICON_CREATOR_ROM_ROM_H_ |