/*
 * Copyright (c) 2024 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#ifndef ZEPHYR_INCLUDE_PLATFORM_PLATFORM_H_
#define ZEPHYR_INCLUDE_PLATFORM_PLATFORM_H_

/**
 * @file
 * @brief Soc and Board hooks
 *
 * This header file contains function prototypes for the interfaces between
 * zephyr architecture and initialization code and the SoC and board specific logic
 * that resides under boards/ and soc/
 *
 * @note These are all standard soc and board interfaces that are exported from
 * soc and board specific logic to OS internal logic.  These should never be accessed
 * directly from application code but may be freely used within the OS.
 */


/**
 * @brief SoC  hook executed at the beginning of the reset vector.
 *
 * This hook is implemented by the SoC and can be used to perform any
 * SoC-specific initialization.
 */
void soc_reset_hook(void);

/**
 * @brief SoC hook executed after the reset vector.
 *
 * This hook is implemented by the SoC and can be used to perform any
 * SoC-specific initialization.
 */
void soc_prep_hook(void);

/**
 * @brief SoC hook executed before the kernel and devices are initialized.
 *
 * This hook is implemented by the SoC and can be used to perform any
 * SoC-specific initialization.
 */
void soc_early_init_hook(void);

/**
 * @brief SoC hook executed after the kernel and devices are initialized.
 *
 * This hook is implemented by the SoC and can be used to perform any
 * SoC-specific initialization.
 */
void soc_late_init_hook(void);

/**
 * @brief SoC per-core initialization
 *
 * This hook is implemented by the SoC and can be used to perform any
 * SoC-specific per-core initialization
 */
void soc_per_core_init_hook(void);

/**
 * @brief Board hook executed before the kernel starts.
 *
 * This is called before the kernel has started. This hook
 * is implemented by the board and can be used to perform any board-specific
 * initialization.
 */
void board_early_init_hook(void);

/**
 * @brief Board hook executed after the kernel starts.
 *
 * This is called after the kernel has started, but before the main function is
 * called. This hook is implemented by the board and can be used to perform
 * any board-specific initialization.
 */
void board_late_init_hook(void);

#endif
