pinebuds/platform/hal/hal_location.h
2022-08-15 17:20:27 +08:00

164 lines
6.1 KiB
C

/***************************************************************************
*
* Copyright 2015-2019 BES.
* All rights reserved. All unpublished rights reserved.
*
* No part of this work may be used or reproduced in any form or by any
* means, or stored in a database or retrieval system, without prior written
* permission of BES.
*
* Use of this work is governed by a license granted by BES.
* This work contains confidential and proprietary information of
* BES. which is protected by copyright, trade secret,
* trademark and other intellectual property rights.
*
****************************************************************************/
#ifndef __HAL_LOCATION_H__
#define __HAL_LOCATION_H__
#ifdef __cplusplus
extern "C" {
#endif
#define HAL_SEC_CONCAT_2(a, b) a.b
#define HAL_SEC_CONCAT_3(a, b, c) a.b.c
#define HAL_SEC_TO_STR_A(s) #s
#define HAL_SEC_TO_STR(s) HAL_SEC_TO_STR_A(s)
#define HAL_SEC_NAME_ATTR(s) __attribute__((section(s)))
#define HAL_SEC_DEF(section, name) HAL_SEC_NAME_ATTR(HAL_SEC_TO_STR(HAL_SEC_CONCAT_2(section, name))) name
#ifdef __COUNTER__
#define HAL_SEC_LOC(section) HAL_SEC_NAME_ATTR(HAL_SEC_TO_STR(HAL_SEC_CONCAT_3(section, __LINE__, __COUNTER__)))
#else
#define HAL_SEC_LOC(section) HAL_SEC_NAME_ATTR(HAL_SEC_TO_STR(HAL_SEC_CONCAT_2(section, __LINE__)))
#endif
#if defined(__GNUC__) && !((defined(ROM_BUILD) && !defined(ROM_IN_FLASH)) || defined(PROGRAMMER))
#define BOOT_TEXT_SRAM_LOC HAL_SEC_LOC(.boot_text_sram)
#define BOOT_TEXT_SRAM_DEF(n) HAL_SEC_DEF(.boot_text_sram, n)
#define BOOT_TEXT_FLASH_LOC HAL_SEC_LOC(.boot_text_flash)
#define BOOT_TEXT_FLASH_DEF(n) HAL_SEC_DEF(.boot_text_flash, n)
#define BOOT_RODATA_SRAM_LOC HAL_SEC_LOC(.boot_rodata_sram)
#define BOOT_RODATA_SRAM_DEF(n) HAL_SEC_DEF(.boot_rodata_sram, n)
#define BOOT_RODATA_FLASH_LOC HAL_SEC_LOC(.boot_rodata_flash)
#define BOOT_RODATA_FLASH_DEF(n) HAL_SEC_DEF(.boot_rodata_flash, n)
#define BOOT_DATA_LOC HAL_SEC_LOC(.boot_data)
#define BOOT_DATA_DEF(n) HAL_SEC_DEF(.boot_data, n)
#ifdef __ARMCC_VERSION
#define BOOT_BSS_LOC HAL_SEC_LOC(.bss.boot_bss)
#define BOOT_BSS_DEF(n) HAL_SEC_DEF(.bss.boot_bss, n)
#else
#define BOOT_BSS_LOC HAL_SEC_LOC(.boot_bss)
#define BOOT_BSS_DEF(n) HAL_SEC_DEF(.boot_bss, n)
#endif
#define SRAM_TEXT_LOC HAL_SEC_LOC(.sram_text)
#define SRAM_TEXT_DEF(n) HAL_SEC_DEF(.sram_text, n)
#define SRAM_DATA_LOC HAL_SEC_LOC(.sram_data)
#define SRAM_DATA_DEF(n) HAL_SEC_DEF(.sram_data, n)
#define SRAM_STACK_LOC ALIGNED(8) HAL_SEC_LOC(.sram_data)
#define SRAM_STACK_DEF(n) ALIGNED(8) HAL_SEC_LOC(.sram_data, n)
#ifdef __ARMCC_VERSION
#define SRAM_BSS_LOC HAL_SEC_LOC(.bss.sram_bss)
#define SRAM_BSS_DEF(n) HAL_SEC_DEF(.bss.sram_bss, n)
#else
#define SRAM_BSS_LOC HAL_SEC_LOC(.sram_bss)
#define SRAM_BSS_DEF(n) HAL_SEC_DEF(.sram_bss, n)
#endif
#define FRAM_TEXT_LOC HAL_SEC_LOC(.fast_text_sram)
#define FRAM_TEXT_DEF(n) HAL_SEC_DEF(.fast_text_sram, n)
#define CP_TEXT_SRAM_LOC HAL_SEC_LOC(.cp_text_sram)
#define CP_TEXT_SRAM_DEF(n) HAL_SEC_DEF(.cp_text_sram, n)
#define CP_DATA_LOC HAL_SEC_LOC(.cp_data)
#define CP_DATA_DEF(n) HAL_SEC_DEF(.cp_data, n)
#ifdef __ARMCC_VERSION
#define CP_BSS_LOC HAL_SEC_LOC(.bss.cp_bss)
#define CP_BSS_DEF(n) HAL_SEC_DEF(.bss.cp_bss, n)
#else
#define CP_BSS_LOC HAL_SEC_LOC(.cp_bss)
#define CP_BSS_DEF(n) HAL_SEC_DEF(.cp_bss, n)
#endif
#define FLASH_TEXT_LOC HAL_SEC_LOC(.flash_text)
#define FLASH_TEXT_DEF(n) HAL_SEC_DEF(.flash_text, n)
#define FLASH_RODATA_LOC HAL_SEC_LOC(.flash_rodata)
#define FLASH_RODATA_DEF(n) HAL_SEC_DEF(.flash_rodata, n)
#define REBOOT_CUSTOM_PARAM_LOC HAL_SEC_LOC(.reboot_custom_param)
#define REBOOT_CUSTOM_PARAM_DEF HAL_SEC_DEF(.reboot_custom_param)
#else
#define BOOT_TEXT_SRAM_LOC
#define BOOT_TEXT_SRAM_DEF(n) n
#if defined(__GNUC__) && defined(PROGRAMMER_INFLASH)
#define BOOT_TEXT_FLASH_LOC HAL_SEC_LOC(.boot_text_flash)
#define BOOT_TEXT_FLASH_DEF(n) HAL_SEC_DEF(.boot_text_flash, n)
#else
#define BOOT_TEXT_FLASH_LOC
#define BOOT_TEXT_FLASH_DEF(n) n
#endif
#define BOOT_RODATA_SRAM_LOC
#define BOOT_RODATA_SRAM_DEF(n) n
#define BOOT_RODATA_FLASH_LOC
#define BOOT_RODATA_FLASH_DEF(n) n
#define BOOT_DATA_LOC
#define BOOT_DATA_DEF(n) n
#define BOOT_BSS_LOC
#define BOOT_BSS_DEF(n) n
#define SRAM_TEXT_LOC
#define SRAM_TEXT_DEF(n) n
#define SRAM_DATA_LOC
#define SRAM_DATA_DEF(n) n
#define SRAM_STACK_LOC
#define SRAM_STACK_DEF(n) n
#define SRAM_BSS_LOC
#define SRAM_BSS_DEF(n) n
#define FRAM_TEXT_LOC
#define FRAM_TEXT_DEF(n) n
#define CP_TEXT_SRAM_LOC
#define CP_TEXT_SRAM_DEF(n) n
#define CP_DATA_LOC
#define CP_DATA_DEF(n) n
#define CP_BSS_LOC
#define CP_BSS_DEF(n) n
#define FLASH_TEXT_LOC
#define FLASH_TEXT_DEF(n) n
#define FLASH_RODATA_LOC
#define FLASH_RODATA_DEF(n) n
#define REBOOT_CUSTOM_PARAM_LOC
#define REBOOT_CUSTOM_PARAM_DEF(n) n
#endif // !__GNUC__ || ROM_BUILD || PROGRAMMER
#if defined(__GNUC__) && defined(__ARM_ARCH_ISA_ARM)
#define SYNC_FLAGS_LOC HAL_SEC_LOC(.sync_flags)
#define SYNC_FLAGS_DEF(n) HAL_SEC_DEF(.sync_flags, n)
#else
#define SYNC_FLAGS_LOC
#define SYNC_FLAGS_DEF(n) n
#endif
#if defined(__ARM_ARCH_ISA_ARM)
#define PSRAMUHS_TEXT_LOC HAL_SEC_LOC(.psramuhs_text)
#define PSRAMUHS_TEXT_DEF(n) HAL_SEC_DEF(.psramuhs_text, n)
#else
#define PSRAMUHS_TEXT_LOC
#define PSRAMUHS_TEXT_DEF(n) n
#endif
#ifdef __cplusplus
}
#endif
#endif