//Amount of priority slots for the tag descriptors.
#define NO_PRIOS 3
+
typedef struct {
const char *name;
uint32_t prio[NO_PRIOS];
Tag descriptors. These describe the capabilities of a bit of memory that's tagged with the index into this table.
Each tag contains NO_PRIOS entries; later entries are only taken if earlier ones can't fulfill the memory request.
Make sure there are never more than HEAPREGIONS_MAX_TAGCOUNT (in heap_regions.h) tags (ex the last empty marker)
+
+WARNING: The current code assumes the ROM stacks are located in tag 1; no allocation from this tag can be done until
+the FreeRTOS scheduler has started.
*/
static const tag_desc_t tag_desc[]={
{ "DRAM", { MALLOC_CAP_DMA|MALLOC_CAP_8BIT, MALLOC_CAP_32BIT, 0 }, false}, //Tag 0: Plain ole D-port RAM
static HeapRegionTagged_t regions[]={
{ (uint8_t *)0x3F800000, 0x20000, 15, 0}, //SPI SRAM, if available
{ (uint8_t *)0x3FFAE000, 0x2000, 0, 0}, //pool 16 <- used for rom code
- { (uint8_t *)0x3FFB0000, 0x8000, 0, 0}, //pool 15 <- can be used for BT
- { (uint8_t *)0x3FFB8000, 0x8000, 0, 0}, //pool 14 <- can be used for BT
+ { (uint8_t *)0x3FFB0000, 0x8000, 0, 0}, //pool 15 <- if BT is enabled, used as BT HW shared memory
+ { (uint8_t *)0x3FFB8000, 0x8000, 0, 0}, //pool 14 <- if BT is enabled, used data memory for BT ROM functions.
{ (uint8_t *)0x3FFC0000, 0x2000, 0, 0}, //pool 10-13, mmu page 0
{ (uint8_t *)0x3FFC2000, 0x2000, 0, 0}, //pool 10-13, mmu page 1
{ (uint8_t *)0x3FFC4000, 0x2000, 0, 0}, //pool 10-13, mmu page 2
{ NULL, 0, 0, 0} //end
};
+/* For the startup code, the stacks live in memory tagged by this tag. Hence, we only enable allocating from this tag
+ once FreeRTOS has started up completely. */
+#define NONOS_STACK_TAG 1
+
+static bool nonos_stack_in_use=true;
+
+void heap_alloc_enable_nonos_stack_tag()
+{
+ nonos_stack_in_use=false;
+}
//Modify regions array to disable the given range of memory.
static void disable_mem_region(void *from, void *to) {
//Disable the bits of memory where this code is loaded.
disable_mem_region(&_data_start, &_heap_start); //DRAM used by bss/data static variables
disable_mem_region(&_init_start, &_iram_text_end); //IRAM used by code
- disable_mem_region((void*)0x3ffae000, (void*)0x3ffb0000); //knock out ROM data region
disable_mem_region((void*)0x40070000, (void*)0x40078000); //CPU0 cache region
disable_mem_region((void*)0x40078000, (void*)0x40080000); //CPU1 cache region
- // TODO: this region should be checked, since we don't need to knock out all region finally
- disable_mem_region((void*)0x3ffe0000, (void*)0x3ffe8000); //knock out ROM data region
+ /* Warning: The ROM stack is located in the 0x3ffe0000 area. We do not specifically disable that area here because
+ after the scheduler has started, the ROM stack is not used anymore by anything. We handle it instead by not allowing
+ any mallocs from tag 1 (the IRAM/DRAM region) until the scheduler has started.
+
+ The 0x3ffe0000 region also contains static RAM for various ROM functions. The following lines knocks
+ out the regions for UART and ETSC, so these functions are usable. Libraries like xtos, which are
+ not usable in FreeRTOS anyway, are commented out in the linker script so they cannot be used; we
+ do not disable their memory regions here and they will be used as general purpose heap memory.
+
+ Enabling the heap allocator for this region but disabling allocation here until FreeRTOS is started up
+ is a somewhat risky action in theory, because on initializing the allocator, it will go and write linked
+ list entries at the start and end of all regions. For the ESP32, these linked list entries happen to end
+ up in a region that is not touched by the stack; they can be placed safely there.*/
+ disable_mem_region((void*)0x3ffe0000, (void*)0x3ffe0440); //knock out ROM PRO data region
+ disable_mem_region((void*)0x3ffe4000, (void*)0x3ffe4350); //knock out ROM APP data region
#if CONFIG_BT_ENABLED
#if CONFIG_BT_DRAM_RELEASE
disable_mem_region((void*)0x3ffb8000, (void*)0x3ffbbb28); //knock out BT data region
disable_mem_region((void*)0x3ffbdb28, (void*)0x3ffc0000); //knock out BT data region
#else
- disable_mem_region((void*)0x3ffb0000, (void*)0x3ffc0000); //knock out BT data region
+ disable_mem_region((void*)0x3ffb0000, (void*)0x3ffc0000); //knock out BT hardware shared memory & BT data region
#endif
+ disable_mem_region((void*)0x3ffae000, (void*)0x3ffaff10); //knock out ROM data region, inc region needed for BT ROM routines
+#else
+ disable_mem_region((void*)0x3ffae000, (void*)0x3ffae2a0); //knock out ROM data region
#endif
#if CONFIG_MEMMAP_TRACEMEM
for (prio=0; prio<NO_PRIOS; prio++) {
//Iterate over tag descriptors for this priority
for (tag=0; tag_desc[tag].prio[prio]!=MALLOC_CAP_INVALID; tag++) {
+ if (nonos_stack_in_use && tag == NONOS_STACK_TAG) {
+ //Non-os stack lives here and is still in use. Don't alloc here.
+ continue;
+ }
if ((tag_desc[tag].prio[prio]&caps)!=0) {
//Tag has at least one of the caps requested. If caps has other bits set that this prio
//doesn't cover, see if they're available in other prios.
PROVIDE ( calc_rtc_memory_crc = 0x40008170 );
PROVIDE ( calloc = 0x4000bee4 );
PROVIDE ( _calloc_r = 0x4000bbf8 );
-PROVIDE ( check_pos = 0x400068b8 );
PROVIDE ( _cleanup = 0x40001df8 );
PROVIDE ( _cleanup_r = 0x40001d48 );
PROVIDE ( __clear_cache = 0x40063860 );
PROVIDE ( DebugE256PublicKey_x = 0x3ff97428 );
PROVIDE ( DebugE256PublicKey_y = 0x3ff97408 );
PROVIDE ( DebugE256SecretKey = 0x3ff973e8 );
-PROVIDE ( _DebugExceptionVector = 0x40000280 );
PROVIDE ( debug_timer = 0x3ffe042c );
PROVIDE ( debug_timerfn = 0x3ffe0430 );
PROVIDE ( dh_group14_generator = 0x3ff9ac60 );
PROVIDE ( __divsc3 = 0x40064200 );
PROVIDE ( __divsf3 = 0x4000234c );
PROVIDE ( __divsi3 = 0x4000c7b8 );
-PROVIDE ( _DoubleExceptionVector = 0x400003c0 );
PROVIDE ( dummy_len_plus = 0x3ffae290 );
PROVIDE ( __dummy_lock = 0x4000c728 );
PROVIDE ( __dummy_lock_try = 0x4000c730 );
PROVIDE ( __eqsf2 = 0x40063374 );
PROVIDE ( esp_crc8 = 0x4005d144 );
PROVIDE ( _etext = 0x4000d66c );
-PROVIDE ( ets_aes_crypt = 0x4005c9b8 );
-PROVIDE ( ets_aes_disable = 0x4005c8f8 );
-PROVIDE ( ets_aes_enable = 0x4005c8cc );
-PROVIDE ( ets_aes_set_endian = 0x4005c928 );
-PROVIDE ( ets_aes_setkey_dec = 0x4005c994 );
-PROVIDE ( ets_aes_setkey_enc = 0x4005c97c );
-PROVIDE ( ets_bigint_disable = 0x4005c4e0 );
-PROVIDE ( ets_bigint_enable = 0x4005c498 );
-PROVIDE ( ets_bigint_mod_mult_getz = 0x4005c818 );
-PROVIDE ( ets_bigint_mod_mult_prepare = 0x4005c7b4 );
-PROVIDE ( ets_bigint_mod_power_getz = 0x4005c614 );
-PROVIDE ( ets_bigint_mod_power_prepare = 0x4005c54c );
-PROVIDE ( ets_bigint_montgomery_mult_getz = 0x4005c7a4 );
-PROVIDE ( ets_bigint_montgomery_mult_prepare = 0x4005c6fc );
-PROVIDE ( ets_bigint_mult_getz = 0x4005c6e8 );
-PROVIDE ( ets_bigint_mult_prepare = 0x4005c630 );
-PROVIDE ( ets_bigint_wait_finish = 0x4005c520 );
-PROVIDE ( ets_delay_us = 0x40008534 );
-PROVIDE ( ets_efuse_get_8M_clock = 0x40008710 );
-PROVIDE ( ets_efuse_get_spiconfig = 0x40008658 );
-PROVIDE ( ets_efuse_program_op = 0x40008628 );
-PROVIDE ( ets_efuse_read_op = 0x40008600 );
-PROVIDE ( ets_get_cpu_frequency = 0x4000855c );
-PROVIDE ( ets_get_detected_xtal_freq = 0x40008588 );
-PROVIDE ( ets_get_xtal_scale = 0x4000856c );
-PROVIDE ( ets_install_putc1 = 0x40007d18 );
-PROVIDE ( ets_install_putc2 = 0x40007d38 );
-PROVIDE ( ets_install_uart_printf = 0x40007d28 );
-PROVIDE ( ets_post = 0x4000673c );
-PROVIDE ( ets_printf = 0x40007d54 );
PROVIDE ( ets_readySet_ = 0x3ffe01f0 );
-PROVIDE ( ets_run = 0x400066bc );
-PROVIDE ( ets_secure_boot_check = 0x4005cb40 );
-PROVIDE ( ets_secure_boot_check_finish = 0x4005cc04 );
-PROVIDE ( ets_secure_boot_check_start = 0x4005cbcc );
-PROVIDE ( ets_secure_boot_finish = 0x4005ca84 );
-PROVIDE ( ets_secure_boot_hash = 0x4005cad4 );
-PROVIDE ( ets_secure_boot_obtain = 0x4005cb14 );
-PROVIDE ( ets_secure_boot_rd_abstract = 0x4005cba8 );
-PROVIDE ( ets_secure_boot_rd_iv = 0x4005cb84 );
-PROVIDE ( ets_secure_boot_start = 0x4005ca34 );
-PROVIDE ( ets_set_appcpu_boot_addr = 0x4000689c );
-PROVIDE ( ets_set_idle_cb = 0x40006674 );
-PROVIDE ( ets_set_startup_callback = 0x4000688c );
-PROVIDE ( ets_set_user_start = 0x4000687c );
-PROVIDE ( ets_sha_disable = 0x4005c0a8 );
-PROVIDE ( ets_sha_enable = 0x4005c07c );
-PROVIDE ( ets_sha_finish = 0x4005c104 );
-PROVIDE ( ets_sha_init = 0x4005c0d4 );
-PROVIDE ( ets_sha_update = 0x4005c2a0 );
PROVIDE ( ets_startup_callback = 0x3ffe0404 );
-PROVIDE ( ets_task = 0x40006688 );
-PROVIDE ( ets_timer_arm = 0x40008368 );
-PROVIDE ( ets_timer_arm_us = 0x400083ac );
-PROVIDE ( ets_timer_disarm = 0x400083ec );
-PROVIDE ( ets_timer_done = 0x40008428 );
-PROVIDE ( ets_timer_handler_isr = 0x40008454 );
-PROVIDE ( ets_timer_init = 0x400084e8 );
-PROVIDE ( ets_timer_setfn = 0x40008350 );
-PROVIDE ( ets_unpack_flash_code = 0x40007018 );
-PROVIDE ( ets_unpack_flash_code_legacy = 0x4000694c );
-PROVIDE ( ets_update_cpu_frequency_rom = 0x40008550 ); /* Updates g_ticks_per_us on the current CPU only; not on the other core */
-PROVIDE ( ets_waiti0 = 0x400067d8 );
PROVIDE ( exc_cause_table = 0x3ff991d0 );
PROVIDE ( _exit_r = 0x4000bd28 );
PROVIDE ( __extendsfdf2 = 0x40002c34 );
PROVIDE ( _fflush_r = 0x40059320 );
PROVIDE ( __ffsdi2 = 0x4000ca2c );
PROVIDE ( __ffssi2 = 0x4000c804 );
-PROVIDE ( FilePacketSendDeflatedReqMsgProc = 0x40008b24 );
-PROVIDE ( FilePacketSendReqMsgProc = 0x40008860 );
PROVIDE ( _findenv_r = 0x40001f44 );
PROVIDE ( __fixdfdi = 0x40002ac4 );
PROVIDE ( __fixdfsi = 0x40002a78 );
PROVIDE ( __fixunsdfsi = 0x40002b30 );
PROVIDE ( __fixunssfdi = 0x40002504 );
PROVIDE ( __fixunssfsi = 0x400024ac );
-PROVIDE ( FlashDwnLdDeflatedStartMsgProc = 0x40008ad8 );
-PROVIDE ( FlashDwnLdParamCfgMsgProc = 0x4000891c );
-PROVIDE ( FlashDwnLdStartMsgProc = 0x40008820 );
-PROVIDE ( FlashDwnLdStopDeflatedReqMsgProc = 0x40008c18 );
-PROVIDE ( FlashDwnLdStopReqMsgProc = 0x400088ec );
PROVIDE ( __floatdidf = 0x4000c988 );
PROVIDE ( __floatdisf = 0x4000c8c0 );
PROVIDE ( __floatsidf = 0x4000c944 );
PROVIDE ( _fwalk_reent = 0x4000c770 );
PROVIDE ( __gcc_bcmp = 0x40064a70 );
PROVIDE ( __gedf2 = 0x40063768 );
-PROVIDE ( _GeneralException = 0x40000e14 );
PROVIDE ( __gesf2 = 0x4006340c );
PROVIDE ( __get_current_time_locale = 0x40001834 );
PROVIDE ( _getenv_r = 0x40001fbc );
PROVIDE ( __getreent = 0x4000be8c );
PROVIDE ( _gettimeofday_r = 0x4000bc58 );
PROVIDE ( __gettzinfo = 0x40001fcc );
-PROVIDE ( GetUartDevice = 0x40009598 );
PROVIDE ( GF_Jacobian_Point_Addition256 = 0x400163a4 );
PROVIDE ( GF_Jacobian_Point_Double256 = 0x40016260 );
PROVIDE ( GF_Point_Jacobian_To_Affine256 = 0x40016b0c );
PROVIDE ( gmtime_r = 0x40059868 );
PROVIDE ( g_phyFuns_instance = 0x3ffae0c4 );
PROVIDE ( g_rom_flashchip = 0x3ffae270 );
-PROVIDE ( gpio_init = 0x40009c20 );
-PROVIDE ( gpio_input_get = 0x40009b88 );
-PROVIDE ( gpio_input_get_high = 0x40009b9c );
-PROVIDE ( gpio_intr_ack = 0x40009dd4 );
-PROVIDE ( gpio_intr_ack_high = 0x40009e1c );
-PROVIDE ( gpio_intr_handler_register = 0x40009e6c );
-PROVIDE ( gpio_intr_pending = 0x40009cec );
-PROVIDE ( gpio_intr_pending_high = 0x40009cf8 );
-PROVIDE ( gpio_matrix_in = 0x40009edc );
-PROVIDE ( gpio_matrix_out = 0x40009f0c );
-PROVIDE ( gpio_output_set = 0x40009b24 );
-PROVIDE ( gpio_output_set_high = 0x40009b5c );
-PROVIDE ( gpio_pad_hold = 0x4000a734 );
-PROVIDE ( gpio_pad_pulldown = 0x4000a348 );
-PROVIDE ( gpio_pad_pullup = 0x4000a22c );
-PROVIDE ( gpio_pad_select_gpio = 0x40009fdc );
-PROVIDE ( gpio_pad_set_drv = 0x4000a11c );
-PROVIDE ( gpio_pad_unhold = 0x4000a484 );
-PROVIDE ( gpio_pending_mask = 0x3ffe0038 );
-PROVIDE ( gpio_pending_mask_high = 0x3ffe0044 );
-PROVIDE ( gpio_pin_intr_state_set = 0x40009d04 );
-PROVIDE ( gpio_pin_wakeup_disable = 0x40009eb0 );
-PROVIDE ( gpio_pin_wakeup_enable = 0x40009e7c );
-PROVIDE ( gpio_register_get = 0x40009cbc );
-PROVIDE ( gpio_register_set = 0x40009bbc );
PROVIDE ( __gtdf2 = 0x400636dc );
PROVIDE ( __gtsf2 = 0x400633a0 );
PROVIDE ( gTxMsg = 0x3ffe0050 );
PROVIDE ( hmac_sha1_vector = 0x400609e4 );
PROVIDE ( hmac_sha256 = 0x40060d58 );
PROVIDE ( hmac_sha256_vector = 0x40060c84 );
-PROVIDE ( intr_matrix_set = 0x4000681c );
PROVIDE ( isalnum = 0x40000f04 );
PROVIDE ( isalpha = 0x40000f18 );
PROVIDE ( isascii = 0x4000c20c );
PROVIDE ( jd_decomp = 0x400613e8 );
PROVIDE ( jd_prepare = 0x40060fa8 );
PROVIDE ( ke_env = 0x3ffb93cc );
-PROVIDE ( _KernelExceptionVector = 0x40000300 );
PROVIDE ( _kill_r = 0x4000bd10 );
PROVIDE ( labs = 0x40056370 );
PROVIDE ( lb_default_handler = 0x3ff982b8 );
PROVIDE ( ld_sync_train_channels = 0x3ff98a3c );
PROVIDE ( __ledf2 = 0x40063704 );
PROVIDE ( __lesf2 = 0x400633c0 );
-PROVIDE ( _Level2FromVector = 0x40000954 );
-PROVIDE ( _Level2Vector = 0x40000180 );
-PROVIDE ( _Level3FromVector = 0x40000a28 );
-PROVIDE ( _Level3Vector = 0x400001c0 );
-PROVIDE ( _Level4FromVector = 0x40000af8 );
-PROVIDE ( _Level4Vector = 0x40000200 );
-PROVIDE ( _Level5FromVector = 0x40000c68 );
-PROVIDE ( _Level5Vector = 0x40000240 );
-PROVIDE ( _LevelOneInterrupt = 0x40000835 );
PROVIDE ( _link_r = 0x4000bc9c );
PROVIDE ( llc_default_handler = 0x3ff98b3c );
PROVIDE ( llc_default_state_tab_p_get = 0x40046058 );
PROVIDE ( memchr = 0x4000c244 );
PROVIDE ( memcmp = 0x4000c260 );
PROVIDE ( memcpy = 0x4000c2c8 );
-PROVIDE ( MemDwnLdStartMsgProc = 0x40008948 );
-PROVIDE ( MemDwnLdStopReqMsgProc = 0x400089dc );
PROVIDE ( memmove = 0x4000c3c0 );
-PROVIDE ( MemPacketSendReqMsgProc = 0x40008978 );
PROVIDE ( memrchr = 0x4000c400 );
PROVIDE ( memset = 0x4000c44c );
PROVIDE ( mktime = 0x4005a5e8 );
PROVIDE ( __negvdi2 = 0x40002e98 );
PROVIDE ( __negvsi2 = 0x40002e78 );
PROVIDE ( __nesf2 = 0x40063374 );
-PROVIDE ( _NMIExceptionVector = 0x400002c0 );
PROVIDE ( notEqual256 = 0x40015b04 );
PROVIDE ( __nsau_data = 0x3ff96544 );
PROVIDE ( one_bits = 0x3ff971f8 );
PROVIDE ( r_co_list_size = 0x400142ac );
PROVIDE ( r_co_nb_good_channels = 0x40014360 );
PROVIDE ( r_co_slot_to_duration = 0x40014348 );
-PROVIDE ( RcvMsg = 0x4000954c );
PROVIDE ( r_dbg_init = 0x40014394 );
PROVIDE ( r_dbg_platform_reset_complete = 0x400143d0 );
PROVIDE ( r_dbg_swdiag_init = 0x40014470 );
PROVIDE ( r_ecc_get_debug_Keys = 0x40017224 );
PROVIDE ( r_ecc_init = 0x40016dbc );
PROVIDE ( RecvBuff = 0x3ffe009c );
-PROVIDE ( recv_packet = 0x40009424 );
PROVIDE ( r_em_buf_init = 0x4001729c );
PROVIDE ( r_em_buf_rx_buff_addr_get = 0x400173e8 );
PROVIDE ( r_em_buf_rx_free = 0x400173c4 );
PROVIDE ( r_em_buf_tx_buff_addr_get = 0x40017404 );
PROVIDE ( r_em_buf_tx_free = 0x4001741c );
PROVIDE ( _rename_r = 0x4000bc28 );
-PROVIDE ( _ResetHandler = 0x40000450 );
-PROVIDE ( _ResetVector = 0x40000400 );
PROVIDE ( r_F1_256 = 0x400133e4 );
PROVIDE ( r_F2_256 = 0x40013568 );
PROVIDE ( r_F3_256 = 0x40013664 );
PROVIDE ( rom_iq_est_enable = 0x40005514 );
PROVIDE ( rom_linear_to_db = 0x40005f64 );
PROVIDE ( rom_loopback_mode_en = 0x400030f8 );
-PROVIDE ( rom_main = 0x400076c4 );
PROVIDE ( rom_meas_tone_pwr_db = 0x40006004 );
PROVIDE ( rom_mhz2ieee = 0x4000404c );
PROVIDE ( rom_noise_floor_auto_set = 0x40003bdc );
PROVIDE ( r_rwip_wakeup_end = 0x40055e18 );
PROVIDE ( r_rwip_wlcoex_set = 0x40055f60 );
PROVIDE ( r_SHA_256 = 0x40013a90 );
-PROVIDE ( rtc_boot_control = 0x4000821c );
-PROVIDE ( rtc_get_reset_reason = 0x400081d4 );
-PROVIDE ( rtc_get_wakeup_cause = 0x400081f4 );
-PROVIDE ( rtc_select_apb_bridge = 0x40008288 );
PROVIDE ( rwip_coex_cfg = 0x3ff9914c );
PROVIDE ( rwip_priority = 0x3ff99159 );
PROVIDE ( rwip_rf = 0x3ffbdb28 );
PROVIDE ( __sclose = 0x400011b8 );
PROVIDE ( SelectSpiFunction = 0x40061f84 );
PROVIDE ( SelectSpiQIO = 0x40061ddc );
-PROVIDE ( SendMsg = 0x40009384 );
-PROVIDE ( send_packet = 0x40009340 );
PROVIDE ( __seofread = 0x40001148 );
PROVIDE ( setjmp = 0x40056268 );
PROVIDE ( setlocale = 0x40059568 );
PROVIDE ( _setlocale_r = 0x4005950c );
-PROVIDE ( set_rtc_memory_crc = 0x40008208 );
PROVIDE ( SetSpiDrvs = 0x40061e78 );
PROVIDE ( __sf_fake_stderr = 0x3ff96458 );
PROVIDE ( __sf_fake_stdin = 0x3ff96498 );
PROVIDE ( slc_set_host_io_max_window = 0x4000b89c );
PROVIDE ( slc_to_host_chain_recycle = 0x4000b758 );
PROVIDE ( __smakebuf_r = 0x40059108 );
-PROVIDE ( software_reset = 0x4000824c );
-PROVIDE ( software_reset_cpu = 0x40008264 );
PROVIDE ( specialModP256 = 0x4001600c );
PROVIDE ( spi_cache_sram_init = 0x400626e4 );
PROVIDE ( SPIClkConfig = 0x40062bc8 );
PROVIDE ( __swrite = 0x40001150 );
PROVIDE ( __swsetup_r = 0x40058cc8 );
PROVIDE ( sw_to_hw = 0x3ffb8d40 );
-PROVIDE ( _SyscallException = 0x400007cf );
PROVIDE ( syscall_table_ptr_app = 0x3ffae020 );
PROVIDE ( syscall_table_ptr_pro = 0x3ffae024 );
PROVIDE ( _system_r = 0x4000bc10 );
PROVIDE ( tzset = 0x40001a1c );
PROVIDE ( _tzset_r = 0x40001a28 );
PROVIDE ( __tz_unlock = 0x40001a10 );
-PROVIDE ( uartAttach = 0x40008fd0 );
-PROVIDE ( uart_baudrate_detect = 0x40009034 );
-PROVIDE ( uart_buff_switch = 0x400093c0 );
-PROVIDE ( UartConnCheck = 0x40008738 );
-PROVIDE ( UartConnectProc = 0x40008a04 );
PROVIDE ( UartDev = 0x3ffe019c );
-PROVIDE ( uart_div_modify = 0x400090cc );
-PROVIDE ( UartDwnLdProc = 0x40008ce8 );
-PROVIDE ( UartGetCmdLn = 0x40009564 );
-PROVIDE ( Uart_Init = 0x40009120 );
-PROVIDE ( UartRegReadProc = 0x40008a58 );
-PROVIDE ( UartRegWriteProc = 0x40008a14 );
-PROVIDE ( uart_rx_intr_handler = 0x40008f4c );
-PROVIDE ( uart_rx_one_char = 0x400092d0 );
-PROVIDE ( uart_rx_one_char_block = 0x400092a4 );
-PROVIDE ( uart_rx_readbuff = 0x40009394 );
-PROVIDE ( UartRxString = 0x400092fc );
-PROVIDE ( UartSetBaudProc = 0x40008aac );
-PROVIDE ( UartSpiAttachProc = 0x40008a6c );
-PROVIDE ( UartSpiReadProc = 0x40008a80 );
-PROVIDE ( uart_tx_flush = 0x40009258 );
-PROVIDE ( uart_tx_one_char = 0x40009200 );
-PROVIDE ( uart_tx_one_char2 = 0x4000922c );
-PROVIDE ( uart_tx_switch = 0x40009028 );
-PROVIDE ( uart_tx_wait_idle = 0x40009278 );
PROVIDE ( __ucmpdi2 = 0x40063840 );
PROVIDE ( __udivdi3 = 0x4000cff8 );
PROVIDE ( __udivmoddi4 = 0x40064ab0 );
PROVIDE ( __unorddf2 = 0x400637f4 );
PROVIDE ( __unordsf2 = 0x40063478 );
PROVIDE ( user_code_start = 0x3ffe0400 );
-PROVIDE ( _UserExceptionVector = 0x40000340 );
PROVIDE ( utoa = 0x40056258 );
PROVIDE ( __utoa = 0x400561f0 );
-PROVIDE ( VerifyFlashMd5Proc = 0x40008c44 );
PROVIDE ( veryBigHexP256 = 0x3ff9736c );
PROVIDE ( wcrtomb = 0x40058920 );
PROVIDE ( _wcrtomb_r = 0x400588d8 );
PROVIDE ( __wctomb = 0x3ff96540 );
PROVIDE ( _wctomb_r = 0x40058f14 );
-PROVIDE ( _WindowOverflow12 = 0x40000100 );
-PROVIDE ( _WindowOverflow4 = 0x40000000 );
-PROVIDE ( _WindowOverflow8 = 0x40000080 );
-PROVIDE ( _WindowUnderflow12 = 0x40000140 );
-PROVIDE ( _WindowUnderflow4 = 0x40000040 );
-PROVIDE ( _WindowUnderflow8 = 0x400000c0 );
PROVIDE ( write = 0x4000181c );
PROVIDE ( _write_r = 0x4000bd70 );
PROVIDE ( xthal_bcopy = 0x4000c098 );
PROVIDE ( _xtos_set_intlevel = 0x4000bfdc );
PROVIDE ( g_ticks_per_us_pro = 0x3ffe01e0 );
PROVIDE ( g_ticks_per_us_app = 0x3ffe40f0 );
+
/*
These functions are xtos-related (or call xtos-related functions) and do not play well
with multicore FreeRTOS. Where needed, we provide alternatives that are multicore
-compatible.
+compatible. These functions also use a chunk of static RAM, by not using them we can
+allocate that RAM for general use.
*/
/*
+PROVIDE ( _DebugExceptionVector = 0x40000280 );
+PROVIDE ( _DoubleExceptionVector = 0x400003c0 );
+PROVIDE ( _KernelExceptionVector = 0x40000300 );
+PROVIDE ( _GeneralException = 0x40000e14 );
+PROVIDE ( _ResetHandler = 0x40000450 );
+PROVIDE ( _ResetVector = 0x40000400 );
+PROVIDE ( _UserExceptionVector = 0x40000340 );
+PROVIDE ( _NMIExceptionVector = 0x400002c0 );
+PROVIDE ( _WindowOverflow12 = 0x40000100 );
+PROVIDE ( _WindowOverflow4 = 0x40000000 );
+PROVIDE ( _WindowOverflow8 = 0x40000080 );
+PROVIDE ( _WindowUnderflow12 = 0x40000140 );
+PROVIDE ( _WindowUnderflow4 = 0x40000040 );
+PROVIDE ( _WindowUnderflow8 = 0x400000c0 );
+PROVIDE ( _Level2FromVector = 0x40000954 );
+PROVIDE ( _Level3FromVector = 0x40000a28 );
+PROVIDE ( _Level4FromVector = 0x40000af8 );
+PROVIDE ( _Level5FromVector = 0x40000c68 );
+PROVIDE ( _Level2Vector = 0x40000180 );
+PROVIDE ( _Level3Vector = 0x400001c0 );
+PROVIDE ( _Level4Vector = 0x40000200 );
+PROVIDE ( _Level5Vector = 0x40000240 );
+PROVIDE ( _LevelOneInterrupt = 0x40000835 );
+PROVIDE ( _SyscallException = 0x400007cf );
PROVIDE ( _xtos_alloca_handler = 0x40000010 );
PROVIDE ( _xtos_cause3_handler = 0x40000dd8 );
PROVIDE ( _xtos_c_handler_table = 0x3ffe0548 );
PROVIDE ( _xtos_unhandled_interrupt = 0x4000c01c );
PROVIDE ( _xtos_vpri_enabled = 0x3ffe0654 );
PROVIDE ( ets_intr_count = 0x3ffe03fc );
+*/
+
+/* These functions are part of the UART downloader but also contain general UART functions. */
+PROVIDE ( FilePacketSendDeflatedReqMsgProc = 0x40008b24 );
+PROVIDE ( FilePacketSendReqMsgProc = 0x40008860 );
+PROVIDE ( FlashDwnLdDeflatedStartMsgProc = 0x40008ad8 );
+PROVIDE ( FlashDwnLdParamCfgMsgProc = 0x4000891c );
+PROVIDE ( FlashDwnLdStartMsgProc = 0x40008820 );
+PROVIDE ( FlashDwnLdStopDeflatedReqMsgProc = 0x40008c18 );
+PROVIDE ( FlashDwnLdStopReqMsgProc = 0x400088ec );
+PROVIDE ( MemDwnLdStartMsgProc = 0x40008948 );
+PROVIDE ( MemDwnLdStopReqMsgProc = 0x400089dc );
+PROVIDE ( MemPacketSendReqMsgProc = 0x40008978 );
+PROVIDE ( uart_baudrate_detect = 0x40009034 );
+PROVIDE ( uart_buff_switch = 0x400093c0 );
+PROVIDE ( UartConnCheck = 0x40008738 );
+PROVIDE ( UartConnectProc = 0x40008a04 );
+PROVIDE ( UartDwnLdProc = 0x40008ce8 );
+PROVIDE ( UartRegReadProc = 0x40008a58 );
+PROVIDE ( UartRegWriteProc = 0x40008a14 );
+PROVIDE ( UartSetBaudProc = 0x40008aac );
+PROVIDE ( UartSpiAttachProc = 0x40008a6c );
+PROVIDE ( UartSpiReadProc = 0x40008a80 );
+PROVIDE ( VerifyFlashMd5Proc = 0x40008c44 );
+PROVIDE ( GetUartDevice = 0x40009598 );
+PROVIDE ( RcvMsg = 0x4000954c );
+PROVIDE ( SendMsg = 0x40009384 );
+PROVIDE ( UartGetCmdLn = 0x40009564 );
+PROVIDE ( UartRxString = 0x400092fc );
+PROVIDE ( Uart_Init = 0x40009120 );
+PROVIDE ( recv_packet = 0x40009424 );
+PROVIDE ( send_packet = 0x40009340 );
+PROVIDE ( uartAttach = 0x40008fd0 );
+PROVIDE ( uart_div_modify = 0x400090cc );
+PROVIDE ( uart_rx_intr_handler = 0x40008f4c );
+PROVIDE ( uart_rx_one_char = 0x400092d0 );
+PROVIDE ( uart_rx_one_char_block = 0x400092a4 );
+PROVIDE ( uart_rx_readbuff = 0x40009394 );
+PROVIDE ( uart_tx_flush = 0x40009258 );
+PROVIDE ( uart_tx_one_char = 0x40009200 );
+PROVIDE ( uart_tx_one_char2 = 0x4000922c );
+PROVIDE ( uart_tx_switch = 0x40009028 );
+PROVIDE ( uart_tx_wait_idle = 0x40009278 );
+
+
+/*
+These functions are part of the ROM GPIO driver. We do not use them; the provided esp-idf functions
+replace them and this way we can re-use the fixed RAM addresses these routines need.
+*/
+/*
+PROVIDE ( gpio_init = 0x40009c20 );
+PROVIDE ( gpio_input_get = 0x40009b88 );
+PROVIDE ( gpio_input_get_high = 0x40009b9c );
+PROVIDE ( gpio_intr_ack = 0x40009dd4 );
+PROVIDE ( gpio_intr_ack_high = 0x40009e1c );
+PROVIDE ( gpio_intr_handler_register = 0x40009e6c );
+PROVIDE ( gpio_intr_pending = 0x40009cec );
+PROVIDE ( gpio_intr_pending_high = 0x40009cf8 );
+PROVIDE ( gpio_matrix_in = 0x40009edc );
+PROVIDE ( gpio_matrix_out = 0x40009f0c );
+PROVIDE ( gpio_pad_hold = 0x4000a734 );
+PROVIDE ( gpio_pad_pulldown = 0x4000a348 );
+PROVIDE ( gpio_pad_pullup = 0x4000a22c );
+PROVIDE ( gpio_pad_select_gpio = 0x40009fdc );
+PROVIDE ( gpio_pad_set_drv = 0x4000a11c );
+PROVIDE ( gpio_pad_unhold = 0x4000a484 );
+PROVIDE ( gpio_pending_mask = 0x3ffe0038 );
+PROVIDE ( gpio_pending_mask_high = 0x3ffe0044 );
+PROVIDE ( gpio_pin_intr_state_set = 0x40009d04 );
+PROVIDE ( gpio_pin_wakeup_disable = 0x40009eb0 );
+PROVIDE ( gpio_pin_wakeup_enable = 0x40009e7c );
+PROVIDE ( gpio_register_get = 0x40009cbc );
+PROVIDE ( gpio_register_set = 0x40009bbc );
+*/
+/* These are still part of that driver, but have been verified not to use static RAM, so they can be used. */
+PROVIDE ( gpio_output_set = 0x40009b24 );
+PROVIDE ( gpio_output_set_high = 0x40009b5c );
+
+/*
+These functions are part of the non-os kernel (etsc).
+*/
+PROVIDE ( ets_aes_crypt = 0x4005c9b8 );
+PROVIDE ( ets_aes_disable = 0x4005c8f8 );
+PROVIDE ( ets_aes_enable = 0x4005c8cc );
+PROVIDE ( ets_aes_set_endian = 0x4005c928 );
+PROVIDE ( ets_aes_setkey_dec = 0x4005c994 );
+PROVIDE ( ets_aes_setkey_enc = 0x4005c97c );
+PROVIDE ( ets_bigint_disable = 0x4005c4e0 );
+PROVIDE ( ets_bigint_enable = 0x4005c498 );
+PROVIDE ( ets_bigint_mod_mult_getz = 0x4005c818 );
+PROVIDE ( ets_bigint_mod_mult_prepare = 0x4005c7b4 );
+PROVIDE ( ets_bigint_mod_power_getz = 0x4005c614 );
+PROVIDE ( ets_bigint_mod_power_prepare = 0x4005c54c );
+PROVIDE ( ets_bigint_montgomery_mult_getz = 0x4005c7a4 );
+PROVIDE ( ets_bigint_montgomery_mult_prepare = 0x4005c6fc );
+PROVIDE ( ets_bigint_mult_getz = 0x4005c6e8 );
+PROVIDE ( ets_bigint_mult_prepare = 0x4005c630 );
+PROVIDE ( ets_bigint_wait_finish = 0x4005c520 );
+PROVIDE ( ets_post = 0x4000673c );
+PROVIDE ( ets_run = 0x400066bc );
+PROVIDE ( ets_set_idle_cb = 0x40006674 );
+PROVIDE ( ets_task = 0x40006688 );
+PROVIDE ( ets_efuse_get_8M_clock = 0x40008710 );
+PROVIDE ( ets_efuse_get_spiconfig = 0x40008658 );
+PROVIDE ( ets_efuse_program_op = 0x40008628 );
+PROVIDE ( ets_efuse_read_op = 0x40008600 );
PROVIDE ( ets_intr_lock = 0x400067b0 );
PROVIDE ( ets_intr_unlock = 0x400067c4 );
PROVIDE ( ets_isr_attach = 0x400067ec );
PROVIDE ( ets_isr_mask = 0x400067fc );
PROVIDE ( ets_isr_unmask = 0x40006808 );
-*/
+PROVIDE ( ets_waiti0 = 0x400067d8 );
+PROVIDE ( intr_matrix_set = 0x4000681c );
+PROVIDE ( check_pos = 0x400068b8 );
+PROVIDE ( ets_set_appcpu_boot_addr = 0x4000689c );
+PROVIDE ( ets_set_startup_callback = 0x4000688c );
+PROVIDE ( ets_set_user_start = 0x4000687c );
+PROVIDE ( ets_unpack_flash_code = 0x40007018 );
+PROVIDE ( ets_unpack_flash_code_legacy = 0x4000694c );
+PROVIDE ( rom_main = 0x400076c4 );
+PROVIDE ( ets_install_putc1 = 0x40007d18 );
+PROVIDE ( ets_install_putc2 = 0x40007d38 );
+PROVIDE ( ets_install_uart_printf = 0x40007d28 );
+PROVIDE ( ets_printf = 0x40007d54 );
+PROVIDE ( rtc_boot_control = 0x4000821c );
+PROVIDE ( rtc_get_reset_reason = 0x400081d4 );
+PROVIDE ( rtc_get_wakeup_cause = 0x400081f4 );
+PROVIDE ( rtc_select_apb_bridge = 0x40008288 );
+PROVIDE ( set_rtc_memory_crc = 0x40008208 );
+PROVIDE ( software_reset = 0x4000824c );
+PROVIDE ( software_reset_cpu = 0x40008264 );
+PROVIDE ( ets_secure_boot_check = 0x4005cb40 );
+PROVIDE ( ets_secure_boot_check_finish = 0x4005cc04 );
+PROVIDE ( ets_secure_boot_check_start = 0x4005cbcc );
+PROVIDE ( ets_secure_boot_finish = 0x4005ca84 );
+PROVIDE ( ets_secure_boot_hash = 0x4005cad4 );
+PROVIDE ( ets_secure_boot_obtain = 0x4005cb14 );
+PROVIDE ( ets_secure_boot_rd_abstract = 0x4005cba8 );
+PROVIDE ( ets_secure_boot_rd_iv = 0x4005cb84 );
+PROVIDE ( ets_secure_boot_start = 0x4005ca34 );
+PROVIDE ( ets_sha_disable = 0x4005c0a8 );
+PROVIDE ( ets_sha_enable = 0x4005c07c );
+PROVIDE ( ets_sha_finish = 0x4005c104 );
+PROVIDE ( ets_sha_init = 0x4005c0d4 );
+PROVIDE ( ets_sha_update = 0x4005c2a0 );
+PROVIDE ( ets_delay_us = 0x40008534 );
+PROVIDE ( ets_get_cpu_frequency = 0x4000855c );
+PROVIDE ( ets_get_detected_xtal_freq = 0x40008588 );
+PROVIDE ( ets_get_xtal_scale = 0x4000856c );
+PROVIDE ( ets_timer_arm = 0x40008368 );
+PROVIDE ( ets_timer_arm_us = 0x400083ac );
+PROVIDE ( ets_timer_disarm = 0x400083ec );
+PROVIDE ( ets_timer_done = 0x40008428 );
+PROVIDE ( ets_timer_handler_isr = 0x40008454 );
+PROVIDE ( ets_timer_init = 0x400084e8 );
+PROVIDE ( ets_timer_setfn = 0x40008350 );
+PROVIDE ( ets_update_cpu_frequency_rom = 0x40008550 ); /* Updates g_ticks_per_us on the current CPU only; not on the other core */
+
/* Following are static data, but can be used, not generated by script <<<<< btdm data */
PROVIDE ( ld_acl_env = 0x3ffb8258 );
PROVIDE ( ld_active_ch_map = 0x3ffb8334 );
PROVIDE ( ld_sscan_env = 0x3ffb832c );
PROVIDE ( ld_strain_env = 0x3ffb8330 );
/* Above are static data, but can be used, not generated by script >>>>> btdm data */
+