1 /* 2 * Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef BL1_H 8 #define BL1_H 9 10 #include <common/bl_common.h> 11 12 /* 13 * Defines for BL1 SMC function ids. 14 */ 15 #define BL1_SMC_CALL_COUNT 0x0 16 #define BL1_SMC_UID 0x1 17 /* SMC #0x2 reserved */ 18 #define BL1_SMC_VERSION 0x3 19 20 /* 21 * Corresponds to the function ID of the SMC that 22 * the BL1 exception handler service to execute BL31. 23 */ 24 #define BL1_SMC_RUN_IMAGE 0x4 25 26 /* 27 * BL1 SMC version 28 */ 29 #define BL1_SMC_MAJOR_VER UL(0x0) 30 #define BL1_SMC_MINOR_VER UL(0x1) 31 32 /* 33 * Defines for FWU SMC function ids. 34 */ 35 36 #define FWU_SMC_IMAGE_COPY 0x10 37 #define FWU_SMC_IMAGE_AUTH 0x11 38 #define FWU_SMC_IMAGE_EXECUTE 0x12 39 #define FWU_SMC_IMAGE_RESUME 0x13 40 #define FWU_SMC_SEC_IMAGE_DONE 0x14 41 #define FWU_SMC_UPDATE_DONE 0x15 42 #define FWU_SMC_IMAGE_RESET 0x16 43 44 /* 45 * Number of FWU calls (above) implemented 46 */ 47 #define FWU_NUM_SMC_CALLS 7 48 49 #if TRUSTED_BOARD_BOOT 50 # define BL1_NUM_SMC_CALLS (FWU_NUM_SMC_CALLS + 4) 51 #else 52 # define BL1_NUM_SMC_CALLS 4 53 #endif 54 55 /* 56 * The macros below are used to identify FWU 57 * calls from the SMC function ID 58 */ 59 #define FWU_SMC_FID_START FWU_SMC_IMAGE_COPY 60 #define FWU_SMC_FID_END FWU_SMC_IMAGE_RESET 61 #define is_fwu_fid(_fid) \ 62 ((_fid >= FWU_SMC_FID_START) && (_fid <= FWU_SMC_FID_END)) 63 64 #ifndef __ASSEMBLER__ 65 66 #include <lib/cassert.h> 67 68 struct entry_point_info; 69 70 u_register_t bl1_smc_wrapper(uint32_t smc_fid, 71 void *cookie, 72 void *handle, 73 unsigned int flags); 74 75 u_register_t bl1_smc_handler(unsigned int smc_fid, 76 u_register_t x1, 77 u_register_t x2, 78 u_register_t x3, 79 u_register_t x4, 80 void *cookie, 81 void *handle, 82 unsigned int flags); 83 84 void bl1_print_next_bl_ep_info(const struct entry_point_info *bl_ep_info); 85 86 void bl1_setup(void); 87 void bl1_main(void); 88 void bl1_plat_prepare_exit(entry_point_info_t *ep_info); 89 90 /* 91 * Check if the total number of FWU SMC calls are as expected. 92 */ 93 CASSERT(FWU_NUM_SMC_CALLS == \ 94 (FWU_SMC_FID_END - FWU_SMC_FID_START + 1),\ 95 assert_FWU_NUM_SMC_CALLS_mismatch); 96 97 /* Utility functions */ 98 void bl1_calc_bl2_mem_layout(const meminfo_t *bl1_mem_layout, 99 meminfo_t *bl2_mem_layout); 100 101 #endif /* __ASSEMBLER__ */ 102 #endif /* BL1_H */ 103