diff --git a/.cproject b/.cproject index f5251bc..213ba0d 100644 --- a/.cproject +++ b/.cproject @@ -31,6 +31,7 @@ @@ -210,4 +211,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.settings/com.st.stm32cube.ide.mcu.sfr.prefs b/.settings/com.st.stm32cube.ide.mcu.sfr.prefs new file mode 100644 index 0000000..31c1b66 --- /dev/null +++ b/.settings/com.st.stm32cube.ide.mcu.sfr.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +svd_custom_file_path= +svd_file_path=platform\:/plugin/com.st.stm32cube.ide.mcu.productdb.debug/resources/cmsis/STMicroelectronics_CMSIS_SVD/STM32F429.svd diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 14c3dcd..348817f 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 1229247..518c0ad 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -25,13 +25,17 @@ #ifdef __cplusplus extern "C" { #endif - +#include /* Includes ------------------------------------------------------------------*/ #include "stm32f4xx_hal.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ + #include +#include "lwip.h" +#include "lwip/udp.h" +#include "lwip/debug.h" /* USER CODE END Includes */ /* Exported types ------------------------------------------------------------*/ @@ -45,6 +49,7 @@ typedef struct rcv_msg _Bool clnt_con; unsigned char rx_buf[2048]; uint16_t length; + uint16_t con_timeout; }_rcv_msg; /* USER CODE END ET */ diff --git a/Core/Inc/pribors.h b/Core/Inc/pribors.h index 08f646c..40286c7 100644 --- a/Core/Inc/pribors.h +++ b/Core/Inc/pribors.h @@ -5,6 +5,8 @@ * Author: user */ +#include "stdint.h" + #ifndef INC_PRIBORS_H_ #define INC_PRIBORS_H_ @@ -37,6 +39,23 @@ #define IP_PRIBOR_PRDK4 "10.1.1.43" #define IP_PRIBOR_UF "10.1.1.52" +#define PORT_PRIBOR_PRDN1 11 +#define PORT_PRIBOR_PRDN2 21 +#define PORT_PRIBOR_PRDN3 31 +#define PORT_PRIBOR_PRDN4 41 +#define PORT_PRIBOR_PRDV1 12 +#define PORT_PRIBOR_PRDV2 22 +#define PORT_PRIBOR_PRDV3 32 +#define PORT_PRIBOR_PRDV4 42 +#define PORT_PRIBOR_PRDK1 13 +#define PORT_PRIBOR_PRDK2 23 +#define PORT_PRIBOR_PRDK3 33 +#define PORT_PRIBOR_PRDK4 43 +#define PORT_PRIBOR_UF 52 +uint32_t get_ip(void); +uint16_t get_port(void); +uint16_t set_status(unsigned char *buf); + #endif /* INC_PRIBORS_H_ */ diff --git a/Core/Src/main.c b/Core/Src/main.c index cf7ff94..c47cb49 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -18,9 +18,7 @@ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" -#include "lwip.h" -#include "lwip/udp.h" -#include "lwip/debug.h" + /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ @@ -46,11 +44,13 @@ TIM_HandleTypeDef htim3; SRAM_HandleTypeDef hsram1; - /* USER CODE BEGIN PV */ uint32_t br_counter = 0; +uint16_t reply_len = 0; unsigned char msg[1400]; struct rcv_msg rx_msg; + +_Bool need_send_private = 0; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ @@ -65,6 +65,7 @@ void sock_init(struct udp_pcb * pcb); void udp_echo_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port); void rcv_command(void); +uint16_t create_header(void); void set_pbuf_params(struct pbuf *p, u16_t length); /* USER CODE END PFP */ @@ -115,7 +116,6 @@ int main(void) uint32_t br_addr = ipaddr_addr("10.1.1.255"); u16_t br_port = 50000U; set_pbuf_params(p, sizeof msg); - // timer start if (HAL_TIM_Base_Start_IT(&htim3) != HAL_OK) { @@ -129,11 +129,26 @@ int main(void) while (1) { MX_LWIP_Process(); - if (br_counter > 100) + if (need_send_private == 1) { + need_send_private = 0; + create_header(); + set_pbuf_params(p, create_header() + reply_len); + err_t errok = udp_sendto(pcb, p, (ip_addr_t*)&rx_msg.rcv_addr, rx_msg.port); + br_counter = 0; + } + if (br_counter > 99) + { + create_header(); + set_pbuf_params(p, create_header() + reply_len); err_t errok = udp_sendto(pcb, p, (ip_addr_t*)&br_addr, br_port); br_counter = 0; } + + if (rx_msg.con_timeout > 1999) + { + rx_msg.clnt_con = 0; + } //HAL_Delay(100); //read_isa(0x4); } @@ -306,6 +321,14 @@ static void MX_GPIO_Init(void) /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET); + /*Configure GPIO pins : PC13 PC6 PC7 PC8 + PC12 */ + GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8 + |GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + /*Configure GPIO pin : PC14 */ GPIO_InitStruct.Pin = GPIO_PIN_14; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; @@ -317,6 +340,19 @@ static void MX_GPIO_Init(void) /* USER CODE BEGIN 4 */ +uint16_t create_header(void) +{ + uint16_t status_len; + msg[0] = 0; + msg[1] = 0; + msg[2] = rx_msg.rx_buf[2]; + msg[3] = rx_msg.rx_buf[3]; + msg[5] = 0; + msg[6] = 0; + status_len = set_status(msg); + return status_len + 6; +} + void set_pbuf_params(struct pbuf *p, u16_t length) { p->len = length; @@ -326,11 +362,12 @@ void set_pbuf_params(struct pbuf *p, u16_t length) void sock_init(struct udp_pcb * pcb) { - uint32_t ipaddr = ipaddr_addr("10.1.1.69"); - u16_t port = 50069U; + uint32_t ipaddr = get_ip(); + u16_t port = get_port(); err_t errok = udp_bind(pcb, (ip_addr_t*)&ipaddr, port); udp_recv(pcb, udp_echo_recv, NULL); rx_msg.rcv_addr = 0; + rx_msg.port = 0; rx_msg.cmd_num = 0; rx_msg.cmd_code = 0; rx_msg.clnt_con = 0; @@ -343,30 +380,48 @@ void udp_echo_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port) { if (p != NULL) { - /* send received packet back to sender */ - udp_sendto(pcb, p, addr, port); - /* free the pbuf */ ip_addr_t rcv_addr = addr[0]; if (p->tot_len < sizeof rx_msg.rx_buf) { - rx_msg.rcv_addr = (uint32_t) rcv_addr.addr; - rx_msg.port = port; + if (p->tot_len < 6) + { + return; + } + if (rx_msg.clnt_con == 1) + { + /*if ((rx_msg.rcv_addr != (uint32_t) rcv_addr.addr) || (rx_msg.port != port)) + { + return; + }*/ + u16_t cmd_num = rx_msg.rx_buf[2] | (rx_msg.rx_buf[3] << 8); + if (cmd_num != (rx_msg.cmd_num + 1)) + { + return; + } + } + else + { + rx_msg.rcv_addr = (uint32_t) rcv_addr.addr; + rx_msg.port = port; + } + rx_msg.con_timeout = 0; + rx_msg.clnt_con = 1; memcpy(rx_msg.rx_buf, p->payload, p->tot_len); rx_msg.length = p->tot_len; rcv_command(); } + /* free the pbuf */ pbuf_free(p); } } void rcv_command(void) { - if (rx_msg.length > 6) - { - rx_msg.cmd_num = rx_msg.rx_buf[2] | (rx_msg.rx_buf[3] << 8); - rx_msg.cmd_code = rx_msg.rx_buf[6]; - rx_msg.clnt_con = 1; - } + rx_msg.cmd_num = rx_msg.rx_buf[2] | (rx_msg.rx_buf[3] << 8); + rx_msg.cmd_code = rx_msg.rx_buf[6]; + need_send_private = 1; + + } uint16_t read_isa(uint16_t addr) diff --git a/Core/Src/pribors.c b/Core/Src/pribors.c index b45a645..e6cd497 100644 --- a/Core/Src/pribors.c +++ b/Core/Src/pribors.c @@ -4,5 +4,30 @@ * Created on: 6 сент. 2024 г. * Author: user */ +#include "pribors.h" +#include "lwip/ip_addr.h" +uint32_t get_ip(void) +{ + uint32_t pribor = (((GPIOC->IDR) >> 6) & 0x7) | (((GPIOC->IDR) >> 9) & 0x18); + if (pribor == PRIBOR_UF) return ipaddr_addr(IP_PRIBOR_UF); + else return ipaddr_addr("10.1.1.69"); +} +uint16_t get_port(void) +{ + uint32_t pribor = (((GPIOC->IDR) >> 6) & 0x7) | (((GPIOC->IDR) >> 9) & 0x18); + if (pribor == PRIBOR_UF) return 50000U + PORT_PRIBOR_UF; + else return 50069U; +} + +uint16_t set_status(unsigned char *buf) +{ + buf[6] = 2; + buf[7] = 0; + + buf[8] = 1; + buf[9] = 2; + + return(4); +} diff --git a/Core/Src/stm32f4xx_it.c b/Core/Src/stm32f4xx_it.c index 2949543..bb513c6 100644 --- a/Core/Src/stm32f4xx_it.c +++ b/Core/Src/stm32f4xx_it.c @@ -56,6 +56,7 @@ extern uint32_t br_counter; /* External variables --------------------------------------------------------*/ extern TIM_HandleTypeDef htim3; +extern struct rcv_msg rx_msg; /* USER CODE BEGIN EV */ /* USER CODE END EV */ @@ -209,6 +210,7 @@ void TIM3_IRQHandler(void) HAL_TIM_IRQHandler(&htim3); /* USER CODE BEGIN TIM3_IRQn 1 */ br_counter++; + rx_msg.con_timeout++; /* USER CODE END TIM3_IRQn 1 */ } diff --git a/Debug/Core/Src/subdir.mk b/Debug/Core/Src/subdir.mk index d8c9573..8a955b6 100644 --- a/Debug/Core/Src/subdir.mk +++ b/Debug/Core/Src/subdir.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (12.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables @@ -27,13 +27,13 @@ C_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -Core/Src/%.o Core/Src/%.su: ../Core/Src/%.c Core/Src/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Core/Src/%.o Core/Src/%.su Core/Src/%.cyclo: ../Core/Src/%.c Core/Src/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Core-2f-Src clean-Core-2f-Src: - -$(RM) ./Core/Src/main.d ./Core/Src/main.o ./Core/Src/main.su ./Core/Src/pribors.d ./Core/Src/pribors.o ./Core/Src/pribors.su ./Core/Src/stm32f4xx_hal_msp.d ./Core/Src/stm32f4xx_hal_msp.o ./Core/Src/stm32f4xx_hal_msp.su ./Core/Src/stm32f4xx_it.d ./Core/Src/stm32f4xx_it.o ./Core/Src/stm32f4xx_it.su ./Core/Src/system_stm32f4xx.d ./Core/Src/system_stm32f4xx.o ./Core/Src/system_stm32f4xx.su + -$(RM) ./Core/Src/main.cyclo ./Core/Src/main.d ./Core/Src/main.o ./Core/Src/main.su ./Core/Src/pribors.cyclo ./Core/Src/pribors.d ./Core/Src/pribors.o ./Core/Src/pribors.su ./Core/Src/stm32f4xx_hal_msp.cyclo ./Core/Src/stm32f4xx_hal_msp.d ./Core/Src/stm32f4xx_hal_msp.o ./Core/Src/stm32f4xx_hal_msp.su ./Core/Src/stm32f4xx_it.cyclo ./Core/Src/stm32f4xx_it.d ./Core/Src/stm32f4xx_it.o ./Core/Src/stm32f4xx_it.su ./Core/Src/system_stm32f4xx.cyclo ./Core/Src/system_stm32f4xx.d ./Core/Src/system_stm32f4xx.o ./Core/Src/system_stm32f4xx.su .PHONY: clean-Core-2f-Src diff --git a/Debug/Core/Startup/subdir.mk b/Debug/Core/Startup/subdir.mk index 1863b11..05b7167 100644 --- a/Debug/Core/Startup/subdir.mk +++ b/Debug/Core/Startup/subdir.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (12.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables @@ -16,7 +16,7 @@ S_DEPS += \ # Each subdirectory must supply rules for building sources it contributes Core/Startup/%.o: ../Core/Startup/%.s Core/Startup/subdir.mk - arm-none-eabi-gcc -mcpu=cortex-m4 -g3 -DDEBUG -c -x assembler-with-cpp -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" "$<" + arm-none-eabi-gcc -mcpu=cortex-m4 -g3 -DDEBUG '-DMEM_SIZE 65536' -c -x assembler-with-cpp -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" "$<" clean: clean-Core-2f-Startup diff --git a/Debug/Drivers/BSP/Components/dp83848/subdir.mk b/Debug/Drivers/BSP/Components/dp83848/subdir.mk index 0435fc8..fc6a441 100644 --- a/Debug/Drivers/BSP/Components/dp83848/subdir.mk +++ b/Debug/Drivers/BSP/Components/dp83848/subdir.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (12.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables @@ -15,13 +15,13 @@ C_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -Drivers/BSP/Components/dp83848/%.o Drivers/BSP/Components/dp83848/%.su: ../Drivers/BSP/Components/dp83848/%.c Drivers/BSP/Components/dp83848/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/BSP/Components/dp83848/%.o Drivers/BSP/Components/dp83848/%.su Drivers/BSP/Components/dp83848/%.cyclo: ../Drivers/BSP/Components/dp83848/%.c Drivers/BSP/Components/dp83848/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Drivers-2f-BSP-2f-Components-2f-dp83848 clean-Drivers-2f-BSP-2f-Components-2f-dp83848: - -$(RM) ./Drivers/BSP/Components/dp83848/dp83848.d ./Drivers/BSP/Components/dp83848/dp83848.o ./Drivers/BSP/Components/dp83848/dp83848.su + -$(RM) ./Drivers/BSP/Components/dp83848/dp83848.cyclo ./Drivers/BSP/Components/dp83848/dp83848.d ./Drivers/BSP/Components/dp83848/dp83848.o ./Drivers/BSP/Components/dp83848/dp83848.su .PHONY: clean-Drivers-2f-BSP-2f-Components-2f-dp83848 diff --git a/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk b/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk index d5aca7f..9f931ca 100644 --- a/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk +++ b/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (12.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables @@ -66,13 +66,13 @@ C_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -Drivers/STM32F4xx_HAL_Driver/Src/%.o Drivers/STM32F4xx_HAL_Driver/Src/%.su: ../Drivers/STM32F4xx_HAL_Driver/Src/%.c Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F4xx_HAL_Driver/Src/%.o Drivers/STM32F4xx_HAL_Driver/Src/%.su Drivers/STM32F4xx_HAL_Driver/Src/%.cyclo: ../Drivers/STM32F4xx_HAL_Driver/Src/%.c Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Drivers-2f-STM32F4xx_HAL_Driver-2f-Src clean-Drivers-2f-STM32F4xx_HAL_Driver-2f-Src: - -$(RM) ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.su + -$(RM) ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.su .PHONY: clean-Drivers-2f-STM32F4xx_HAL_Driver-2f-Src diff --git a/Debug/LWIP/App/subdir.mk b/Debug/LWIP/App/subdir.mk index 615717c..3861238 100644 --- a/Debug/LWIP/App/subdir.mk +++ b/Debug/LWIP/App/subdir.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (12.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables @@ -15,13 +15,13 @@ C_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -LWIP/App/%.o LWIP/App/%.su: ../LWIP/App/%.c LWIP/App/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +LWIP/App/%.o LWIP/App/%.su LWIP/App/%.cyclo: ../LWIP/App/%.c LWIP/App/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-LWIP-2f-App clean-LWIP-2f-App: - -$(RM) ./LWIP/App/lwip.d ./LWIP/App/lwip.o ./LWIP/App/lwip.su + -$(RM) ./LWIP/App/lwip.cyclo ./LWIP/App/lwip.d ./LWIP/App/lwip.o ./LWIP/App/lwip.su .PHONY: clean-LWIP-2f-App diff --git a/Debug/LWIP/Target/subdir.mk b/Debug/LWIP/Target/subdir.mk index 9746958..5cb576c 100644 --- a/Debug/LWIP/Target/subdir.mk +++ b/Debug/LWIP/Target/subdir.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (12.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables @@ -15,13 +15,13 @@ C_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -LWIP/Target/%.o LWIP/Target/%.su: ../LWIP/Target/%.c LWIP/Target/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +LWIP/Target/%.o LWIP/Target/%.su LWIP/Target/%.cyclo: ../LWIP/Target/%.c LWIP/Target/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-LWIP-2f-Target clean-LWIP-2f-Target: - -$(RM) ./LWIP/Target/ethernetif.d ./LWIP/Target/ethernetif.o ./LWIP/Target/ethernetif.su + -$(RM) ./LWIP/Target/ethernetif.cyclo ./LWIP/Target/ethernetif.d ./LWIP/Target/ethernetif.o ./LWIP/Target/ethernetif.su .PHONY: clean-LWIP-2f-Target diff --git a/Debug/Middlewares/Third_Party/LwIP/src/api/subdir.mk b/Debug/Middlewares/Third_Party/LwIP/src/api/subdir.mk index 4eb5053..b711ed3 100644 --- a/Debug/Middlewares/Third_Party/LwIP/src/api/subdir.mk +++ b/Debug/Middlewares/Third_Party/LwIP/src/api/subdir.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (12.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables @@ -39,13 +39,13 @@ C_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -Middlewares/Third_Party/LwIP/src/api/%.o Middlewares/Third_Party/LwIP/src/api/%.su: ../Middlewares/Third_Party/LwIP/src/api/%.c Middlewares/Third_Party/LwIP/src/api/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/Third_Party/LwIP/src/api/%.o Middlewares/Third_Party/LwIP/src/api/%.su Middlewares/Third_Party/LwIP/src/api/%.cyclo: ../Middlewares/Third_Party/LwIP/src/api/%.c Middlewares/Third_Party/LwIP/src/api/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-api clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-api: - -$(RM) ./Middlewares/Third_Party/LwIP/src/api/api_lib.d ./Middlewares/Third_Party/LwIP/src/api/api_lib.o ./Middlewares/Third_Party/LwIP/src/api/api_lib.su ./Middlewares/Third_Party/LwIP/src/api/api_msg.d ./Middlewares/Third_Party/LwIP/src/api/api_msg.o ./Middlewares/Third_Party/LwIP/src/api/api_msg.su ./Middlewares/Third_Party/LwIP/src/api/err.d ./Middlewares/Third_Party/LwIP/src/api/err.o ./Middlewares/Third_Party/LwIP/src/api/err.su ./Middlewares/Third_Party/LwIP/src/api/if_api.d ./Middlewares/Third_Party/LwIP/src/api/if_api.o ./Middlewares/Third_Party/LwIP/src/api/if_api.su ./Middlewares/Third_Party/LwIP/src/api/netbuf.d ./Middlewares/Third_Party/LwIP/src/api/netbuf.o ./Middlewares/Third_Party/LwIP/src/api/netbuf.su ./Middlewares/Third_Party/LwIP/src/api/netdb.d ./Middlewares/Third_Party/LwIP/src/api/netdb.o ./Middlewares/Third_Party/LwIP/src/api/netdb.su ./Middlewares/Third_Party/LwIP/src/api/netifapi.d ./Middlewares/Third_Party/LwIP/src/api/netifapi.o ./Middlewares/Third_Party/LwIP/src/api/netifapi.su ./Middlewares/Third_Party/LwIP/src/api/sockets.d ./Middlewares/Third_Party/LwIP/src/api/sockets.o ./Middlewares/Third_Party/LwIP/src/api/sockets.su ./Middlewares/Third_Party/LwIP/src/api/tcpip.d ./Middlewares/Third_Party/LwIP/src/api/tcpip.o ./Middlewares/Third_Party/LwIP/src/api/tcpip.su + -$(RM) ./Middlewares/Third_Party/LwIP/src/api/api_lib.cyclo ./Middlewares/Third_Party/LwIP/src/api/api_lib.d ./Middlewares/Third_Party/LwIP/src/api/api_lib.o ./Middlewares/Third_Party/LwIP/src/api/api_lib.su ./Middlewares/Third_Party/LwIP/src/api/api_msg.cyclo ./Middlewares/Third_Party/LwIP/src/api/api_msg.d ./Middlewares/Third_Party/LwIP/src/api/api_msg.o ./Middlewares/Third_Party/LwIP/src/api/api_msg.su ./Middlewares/Third_Party/LwIP/src/api/err.cyclo ./Middlewares/Third_Party/LwIP/src/api/err.d ./Middlewares/Third_Party/LwIP/src/api/err.o ./Middlewares/Third_Party/LwIP/src/api/err.su ./Middlewares/Third_Party/LwIP/src/api/if_api.cyclo ./Middlewares/Third_Party/LwIP/src/api/if_api.d ./Middlewares/Third_Party/LwIP/src/api/if_api.o ./Middlewares/Third_Party/LwIP/src/api/if_api.su ./Middlewares/Third_Party/LwIP/src/api/netbuf.cyclo ./Middlewares/Third_Party/LwIP/src/api/netbuf.d ./Middlewares/Third_Party/LwIP/src/api/netbuf.o ./Middlewares/Third_Party/LwIP/src/api/netbuf.su ./Middlewares/Third_Party/LwIP/src/api/netdb.cyclo ./Middlewares/Third_Party/LwIP/src/api/netdb.d ./Middlewares/Third_Party/LwIP/src/api/netdb.o ./Middlewares/Third_Party/LwIP/src/api/netdb.su ./Middlewares/Third_Party/LwIP/src/api/netifapi.cyclo ./Middlewares/Third_Party/LwIP/src/api/netifapi.d ./Middlewares/Third_Party/LwIP/src/api/netifapi.o ./Middlewares/Third_Party/LwIP/src/api/netifapi.su ./Middlewares/Third_Party/LwIP/src/api/sockets.cyclo ./Middlewares/Third_Party/LwIP/src/api/sockets.d ./Middlewares/Third_Party/LwIP/src/api/sockets.o ./Middlewares/Third_Party/LwIP/src/api/sockets.su ./Middlewares/Third_Party/LwIP/src/api/tcpip.cyclo ./Middlewares/Third_Party/LwIP/src/api/tcpip.d ./Middlewares/Third_Party/LwIP/src/api/tcpip.o ./Middlewares/Third_Party/LwIP/src/api/tcpip.su .PHONY: clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-api diff --git a/Debug/Middlewares/Third_Party/LwIP/src/apps/mqtt/subdir.mk b/Debug/Middlewares/Third_Party/LwIP/src/apps/mqtt/subdir.mk index 5d3f8dd..b5a22af 100644 --- a/Debug/Middlewares/Third_Party/LwIP/src/apps/mqtt/subdir.mk +++ b/Debug/Middlewares/Third_Party/LwIP/src/apps/mqtt/subdir.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (12.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables @@ -15,13 +15,13 @@ C_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -Middlewares/Third_Party/LwIP/src/apps/mqtt/%.o Middlewares/Third_Party/LwIP/src/apps/mqtt/%.su: ../Middlewares/Third_Party/LwIP/src/apps/mqtt/%.c Middlewares/Third_Party/LwIP/src/apps/mqtt/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/Third_Party/LwIP/src/apps/mqtt/%.o Middlewares/Third_Party/LwIP/src/apps/mqtt/%.su Middlewares/Third_Party/LwIP/src/apps/mqtt/%.cyclo: ../Middlewares/Third_Party/LwIP/src/apps/mqtt/%.c Middlewares/Third_Party/LwIP/src/apps/mqtt/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-apps-2f-mqtt clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-apps-2f-mqtt: - -$(RM) ./Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.d ./Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.o ./Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.su + -$(RM) ./Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.cyclo ./Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.d ./Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.o ./Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.su .PHONY: clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-apps-2f-mqtt diff --git a/Debug/Middlewares/Third_Party/LwIP/src/core/ipv4/subdir.mk b/Debug/Middlewares/Third_Party/LwIP/src/core/ipv4/subdir.mk index 1e17e8d..5dde43a 100644 --- a/Debug/Middlewares/Third_Party/LwIP/src/core/ipv4/subdir.mk +++ b/Debug/Middlewares/Third_Party/LwIP/src/core/ipv4/subdir.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (12.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables @@ -36,13 +36,13 @@ C_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -Middlewares/Third_Party/LwIP/src/core/ipv4/%.o Middlewares/Third_Party/LwIP/src/core/ipv4/%.su: ../Middlewares/Third_Party/LwIP/src/core/ipv4/%.c Middlewares/Third_Party/LwIP/src/core/ipv4/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/Third_Party/LwIP/src/core/ipv4/%.o Middlewares/Third_Party/LwIP/src/core/ipv4/%.su Middlewares/Third_Party/LwIP/src/core/ipv4/%.cyclo: ../Middlewares/Third_Party/LwIP/src/core/ipv4/%.c Middlewares/Third_Party/LwIP/src/core/ipv4/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-core-2f-ipv4 clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-core-2f-ipv4: - -$(RM) ./Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.d ./Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.o ./Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.su ./Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.d ./Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.o ./Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.su ./Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.d ./Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.o ./Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.su ./Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.d ./Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.o ./Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.su ./Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.d ./Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.o ./Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.su ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.d ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.o ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.su ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.d ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.o ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.su ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.d ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.o ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.su + -$(RM) ./Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.d ./Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.o ./Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.su ./Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.d ./Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.o ./Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.su ./Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.d ./Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.o ./Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.su ./Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.d ./Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.o ./Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.su ./Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.d ./Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.o ./Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.su ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.d ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.o ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.su ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.d ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.o ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.su ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.d ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.o ./Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.su .PHONY: clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-core-2f-ipv4 diff --git a/Debug/Middlewares/Third_Party/LwIP/src/core/ipv6/subdir.mk b/Debug/Middlewares/Third_Party/LwIP/src/core/ipv6/subdir.mk index 4c53e41..a1291ca 100644 --- a/Debug/Middlewares/Third_Party/LwIP/src/core/ipv6/subdir.mk +++ b/Debug/Middlewares/Third_Party/LwIP/src/core/ipv6/subdir.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (12.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables @@ -39,13 +39,13 @@ C_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -Middlewares/Third_Party/LwIP/src/core/ipv6/%.o Middlewares/Third_Party/LwIP/src/core/ipv6/%.su: ../Middlewares/Third_Party/LwIP/src/core/ipv6/%.c Middlewares/Third_Party/LwIP/src/core/ipv6/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/Third_Party/LwIP/src/core/ipv6/%.o Middlewares/Third_Party/LwIP/src/core/ipv6/%.su Middlewares/Third_Party/LwIP/src/core/ipv6/%.cyclo: ../Middlewares/Third_Party/LwIP/src/core/ipv6/%.c Middlewares/Third_Party/LwIP/src/core/ipv6/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-core-2f-ipv6 clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-core-2f-ipv6: - -$(RM) ./Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.su ./Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.su ./Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.su ./Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.su ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.su ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.su ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.su ./Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.su ./Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.su + -$(RM) ./Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.su ./Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.su ./Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.su ./Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.su ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.su ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.su ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.su ./Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.su ./Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.cyclo ./Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.d ./Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.o ./Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.su .PHONY: clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-core-2f-ipv6 diff --git a/Debug/Middlewares/Third_Party/LwIP/src/core/subdir.mk b/Debug/Middlewares/Third_Party/LwIP/src/core/subdir.mk index 9dc6c95..35c3609 100644 --- a/Debug/Middlewares/Third_Party/LwIP/src/core/subdir.mk +++ b/Debug/Middlewares/Third_Party/LwIP/src/core/subdir.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (12.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables @@ -72,13 +72,13 @@ C_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -Middlewares/Third_Party/LwIP/src/core/%.o Middlewares/Third_Party/LwIP/src/core/%.su: ../Middlewares/Third_Party/LwIP/src/core/%.c Middlewares/Third_Party/LwIP/src/core/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/Third_Party/LwIP/src/core/%.o Middlewares/Third_Party/LwIP/src/core/%.su Middlewares/Third_Party/LwIP/src/core/%.cyclo: ../Middlewares/Third_Party/LwIP/src/core/%.c Middlewares/Third_Party/LwIP/src/core/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-core clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-core: - -$(RM) ./Middlewares/Third_Party/LwIP/src/core/altcp.d ./Middlewares/Third_Party/LwIP/src/core/altcp.o ./Middlewares/Third_Party/LwIP/src/core/altcp.su ./Middlewares/Third_Party/LwIP/src/core/altcp_alloc.d ./Middlewares/Third_Party/LwIP/src/core/altcp_alloc.o ./Middlewares/Third_Party/LwIP/src/core/altcp_alloc.su ./Middlewares/Third_Party/LwIP/src/core/altcp_tcp.d ./Middlewares/Third_Party/LwIP/src/core/altcp_tcp.o ./Middlewares/Third_Party/LwIP/src/core/altcp_tcp.su ./Middlewares/Third_Party/LwIP/src/core/def.d ./Middlewares/Third_Party/LwIP/src/core/def.o ./Middlewares/Third_Party/LwIP/src/core/def.su ./Middlewares/Third_Party/LwIP/src/core/dns.d ./Middlewares/Third_Party/LwIP/src/core/dns.o ./Middlewares/Third_Party/LwIP/src/core/dns.su ./Middlewares/Third_Party/LwIP/src/core/inet_chksum.d ./Middlewares/Third_Party/LwIP/src/core/inet_chksum.o ./Middlewares/Third_Party/LwIP/src/core/inet_chksum.su ./Middlewares/Third_Party/LwIP/src/core/init.d ./Middlewares/Third_Party/LwIP/src/core/init.o ./Middlewares/Third_Party/LwIP/src/core/init.su ./Middlewares/Third_Party/LwIP/src/core/ip.d ./Middlewares/Third_Party/LwIP/src/core/ip.o ./Middlewares/Third_Party/LwIP/src/core/ip.su ./Middlewares/Third_Party/LwIP/src/core/mem.d ./Middlewares/Third_Party/LwIP/src/core/mem.o ./Middlewares/Third_Party/LwIP/src/core/mem.su ./Middlewares/Third_Party/LwIP/src/core/memp.d ./Middlewares/Third_Party/LwIP/src/core/memp.o ./Middlewares/Third_Party/LwIP/src/core/memp.su ./Middlewares/Third_Party/LwIP/src/core/netif.d ./Middlewares/Third_Party/LwIP/src/core/netif.o ./Middlewares/Third_Party/LwIP/src/core/netif.su ./Middlewares/Third_Party/LwIP/src/core/pbuf.d ./Middlewares/Third_Party/LwIP/src/core/pbuf.o ./Middlewares/Third_Party/LwIP/src/core/pbuf.su ./Middlewares/Third_Party/LwIP/src/core/raw.d ./Middlewares/Third_Party/LwIP/src/core/raw.o ./Middlewares/Third_Party/LwIP/src/core/raw.su ./Middlewares/Third_Party/LwIP/src/core/stats.d ./Middlewares/Third_Party/LwIP/src/core/stats.o ./Middlewares/Third_Party/LwIP/src/core/stats.su ./Middlewares/Third_Party/LwIP/src/core/sys.d ./Middlewares/Third_Party/LwIP/src/core/sys.o ./Middlewares/Third_Party/LwIP/src/core/sys.su ./Middlewares/Third_Party/LwIP/src/core/tcp.d ./Middlewares/Third_Party/LwIP/src/core/tcp.o ./Middlewares/Third_Party/LwIP/src/core/tcp.su ./Middlewares/Third_Party/LwIP/src/core/tcp_in.d ./Middlewares/Third_Party/LwIP/src/core/tcp_in.o ./Middlewares/Third_Party/LwIP/src/core/tcp_in.su ./Middlewares/Third_Party/LwIP/src/core/tcp_out.d ./Middlewares/Third_Party/LwIP/src/core/tcp_out.o ./Middlewares/Third_Party/LwIP/src/core/tcp_out.su ./Middlewares/Third_Party/LwIP/src/core/timeouts.d ./Middlewares/Third_Party/LwIP/src/core/timeouts.o ./Middlewares/Third_Party/LwIP/src/core/timeouts.su ./Middlewares/Third_Party/LwIP/src/core/udp.d ./Middlewares/Third_Party/LwIP/src/core/udp.o ./Middlewares/Third_Party/LwIP/src/core/udp.su + -$(RM) ./Middlewares/Third_Party/LwIP/src/core/altcp.cyclo ./Middlewares/Third_Party/LwIP/src/core/altcp.d ./Middlewares/Third_Party/LwIP/src/core/altcp.o ./Middlewares/Third_Party/LwIP/src/core/altcp.su ./Middlewares/Third_Party/LwIP/src/core/altcp_alloc.cyclo ./Middlewares/Third_Party/LwIP/src/core/altcp_alloc.d ./Middlewares/Third_Party/LwIP/src/core/altcp_alloc.o ./Middlewares/Third_Party/LwIP/src/core/altcp_alloc.su ./Middlewares/Third_Party/LwIP/src/core/altcp_tcp.cyclo ./Middlewares/Third_Party/LwIP/src/core/altcp_tcp.d ./Middlewares/Third_Party/LwIP/src/core/altcp_tcp.o ./Middlewares/Third_Party/LwIP/src/core/altcp_tcp.su ./Middlewares/Third_Party/LwIP/src/core/def.cyclo ./Middlewares/Third_Party/LwIP/src/core/def.d ./Middlewares/Third_Party/LwIP/src/core/def.o ./Middlewares/Third_Party/LwIP/src/core/def.su ./Middlewares/Third_Party/LwIP/src/core/dns.cyclo ./Middlewares/Third_Party/LwIP/src/core/dns.d ./Middlewares/Third_Party/LwIP/src/core/dns.o ./Middlewares/Third_Party/LwIP/src/core/dns.su ./Middlewares/Third_Party/LwIP/src/core/inet_chksum.cyclo ./Middlewares/Third_Party/LwIP/src/core/inet_chksum.d ./Middlewares/Third_Party/LwIP/src/core/inet_chksum.o ./Middlewares/Third_Party/LwIP/src/core/inet_chksum.su ./Middlewares/Third_Party/LwIP/src/core/init.cyclo ./Middlewares/Third_Party/LwIP/src/core/init.d ./Middlewares/Third_Party/LwIP/src/core/init.o ./Middlewares/Third_Party/LwIP/src/core/init.su ./Middlewares/Third_Party/LwIP/src/core/ip.cyclo ./Middlewares/Third_Party/LwIP/src/core/ip.d ./Middlewares/Third_Party/LwIP/src/core/ip.o ./Middlewares/Third_Party/LwIP/src/core/ip.su ./Middlewares/Third_Party/LwIP/src/core/mem.cyclo ./Middlewares/Third_Party/LwIP/src/core/mem.d ./Middlewares/Third_Party/LwIP/src/core/mem.o ./Middlewares/Third_Party/LwIP/src/core/mem.su ./Middlewares/Third_Party/LwIP/src/core/memp.cyclo ./Middlewares/Third_Party/LwIP/src/core/memp.d ./Middlewares/Third_Party/LwIP/src/core/memp.o ./Middlewares/Third_Party/LwIP/src/core/memp.su ./Middlewares/Third_Party/LwIP/src/core/netif.cyclo ./Middlewares/Third_Party/LwIP/src/core/netif.d ./Middlewares/Third_Party/LwIP/src/core/netif.o ./Middlewares/Third_Party/LwIP/src/core/netif.su ./Middlewares/Third_Party/LwIP/src/core/pbuf.cyclo ./Middlewares/Third_Party/LwIP/src/core/pbuf.d ./Middlewares/Third_Party/LwIP/src/core/pbuf.o ./Middlewares/Third_Party/LwIP/src/core/pbuf.su ./Middlewares/Third_Party/LwIP/src/core/raw.cyclo ./Middlewares/Third_Party/LwIP/src/core/raw.d ./Middlewares/Third_Party/LwIP/src/core/raw.o ./Middlewares/Third_Party/LwIP/src/core/raw.su ./Middlewares/Third_Party/LwIP/src/core/stats.cyclo ./Middlewares/Third_Party/LwIP/src/core/stats.d ./Middlewares/Third_Party/LwIP/src/core/stats.o ./Middlewares/Third_Party/LwIP/src/core/stats.su ./Middlewares/Third_Party/LwIP/src/core/sys.cyclo ./Middlewares/Third_Party/LwIP/src/core/sys.d ./Middlewares/Third_Party/LwIP/src/core/sys.o ./Middlewares/Third_Party/LwIP/src/core/sys.su ./Middlewares/Third_Party/LwIP/src/core/tcp.cyclo ./Middlewares/Third_Party/LwIP/src/core/tcp.d ./Middlewares/Third_Party/LwIP/src/core/tcp.o ./Middlewares/Third_Party/LwIP/src/core/tcp.su ./Middlewares/Third_Party/LwIP/src/core/tcp_in.cyclo ./Middlewares/Third_Party/LwIP/src/core/tcp_in.d ./Middlewares/Third_Party/LwIP/src/core/tcp_in.o ./Middlewares/Third_Party/LwIP/src/core/tcp_in.su ./Middlewares/Third_Party/LwIP/src/core/tcp_out.cyclo ./Middlewares/Third_Party/LwIP/src/core/tcp_out.d ./Middlewares/Third_Party/LwIP/src/core/tcp_out.o ./Middlewares/Third_Party/LwIP/src/core/tcp_out.su ./Middlewares/Third_Party/LwIP/src/core/timeouts.cyclo ./Middlewares/Third_Party/LwIP/src/core/timeouts.d ./Middlewares/Third_Party/LwIP/src/core/timeouts.o ./Middlewares/Third_Party/LwIP/src/core/timeouts.su ./Middlewares/Third_Party/LwIP/src/core/udp.cyclo ./Middlewares/Third_Party/LwIP/src/core/udp.d ./Middlewares/Third_Party/LwIP/src/core/udp.o ./Middlewares/Third_Party/LwIP/src/core/udp.su .PHONY: clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-core diff --git a/Debug/Middlewares/Third_Party/LwIP/src/netif/ppp/auth.cyclo b/Debug/Middlewares/Third_Party/LwIP/src/netif/ppp/auth.cyclo new file mode 100644 index 0000000..e69de29 diff --git a/Debug/Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.cyclo b/Debug/Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.cyclo new file mode 100644 index 0000000..e69de29 diff --git a/Debug/Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.cyclo b/Debug/Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.cyclo new file mode 100644 index 0000000..e69de29 diff --git a/Debug/Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.cyclo b/Debug/Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.cyclo new file mode 100644 index 0000000..e69de29 diff --git a/Debug/Middlewares/Third_Party/LwIP/src/netif/ppp/subdir.mk b/Debug/Middlewares/Third_Party/LwIP/src/netif/ppp/subdir.mk index 16250bd..b60e39d 100644 --- a/Debug/Middlewares/Third_Party/LwIP/src/netif/ppp/subdir.mk +++ b/Debug/Middlewares/Third_Party/LwIP/src/netif/ppp/subdir.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (12.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables @@ -87,13 +87,13 @@ C_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -Middlewares/Third_Party/LwIP/src/netif/ppp/%.o Middlewares/Third_Party/LwIP/src/netif/ppp/%.su: ../Middlewares/Third_Party/LwIP/src/netif/ppp/%.c Middlewares/Third_Party/LwIP/src/netif/ppp/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/Third_Party/LwIP/src/netif/ppp/%.o Middlewares/Third_Party/LwIP/src/netif/ppp/%.su Middlewares/Third_Party/LwIP/src/netif/ppp/%.cyclo: ../Middlewares/Third_Party/LwIP/src/netif/ppp/%.c Middlewares/Third_Party/LwIP/src/netif/ppp/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-netif-2f-ppp clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-netif-2f-ppp: - -$(RM) ./Middlewares/Third_Party/LwIP/src/netif/ppp/auth.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/auth.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/auth.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/demand.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/demand.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/demand.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/eap.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/eap.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/eap.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/magic.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/magic.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/magic.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/upap.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/upap.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/upap.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/utils.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/utils.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/utils.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/vj.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/vj.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/vj.su + -$(RM) ./Middlewares/Third_Party/LwIP/src/netif/ppp/auth.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/auth.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/auth.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/auth.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/demand.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/demand.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/demand.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/demand.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/eap.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/eap.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/eap.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/eap.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/magic.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/magic.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/magic.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/magic.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/upap.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/upap.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/upap.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/upap.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/utils.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/utils.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/utils.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/utils.su ./Middlewares/Third_Party/LwIP/src/netif/ppp/vj.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ppp/vj.d ./Middlewares/Third_Party/LwIP/src/netif/ppp/vj.o ./Middlewares/Third_Party/LwIP/src/netif/ppp/vj.su .PHONY: clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-netif-2f-ppp diff --git a/Debug/Middlewares/Third_Party/LwIP/src/netif/subdir.mk b/Debug/Middlewares/Third_Party/LwIP/src/netif/subdir.mk index 42752df..0867587 100644 --- a/Debug/Middlewares/Third_Party/LwIP/src/netif/subdir.mk +++ b/Debug/Middlewares/Third_Party/LwIP/src/netif/subdir.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (12.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables @@ -36,13 +36,13 @@ C_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -Middlewares/Third_Party/LwIP/src/netif/%.o Middlewares/Third_Party/LwIP/src/netif/%.su: ../Middlewares/Third_Party/LwIP/src/netif/%.c Middlewares/Third_Party/LwIP/src/netif/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/Third_Party/LwIP/src/netif/%.o Middlewares/Third_Party/LwIP/src/netif/%.su Middlewares/Third_Party/LwIP/src/netif/%.cyclo: ../Middlewares/Third_Party/LwIP/src/netif/%.c Middlewares/Third_Party/LwIP/src/netif/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../LWIP/App -I../LWIP/Target -I../Middlewares/Third_Party/LwIP/src/include -I../Middlewares/Third_Party/LwIP/system -I../Drivers/BSP/Components/dp83848 -I../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../Middlewares/Third_Party/LwIP/src/include/lwip -I../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../Middlewares/Third_Party/LwIP/src/include/netif -I../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../Middlewares/Third_Party/LwIP/system/arch -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-netif clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-netif: - -$(RM) ./Middlewares/Third_Party/LwIP/src/netif/bridgeif.d ./Middlewares/Third_Party/LwIP/src/netif/bridgeif.o ./Middlewares/Third_Party/LwIP/src/netif/bridgeif.su ./Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.d ./Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.o ./Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.su ./Middlewares/Third_Party/LwIP/src/netif/ethernet.d ./Middlewares/Third_Party/LwIP/src/netif/ethernet.o ./Middlewares/Third_Party/LwIP/src/netif/ethernet.su ./Middlewares/Third_Party/LwIP/src/netif/lowpan6.d ./Middlewares/Third_Party/LwIP/src/netif/lowpan6.o ./Middlewares/Third_Party/LwIP/src/netif/lowpan6.su ./Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.d ./Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.o ./Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.su ./Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.d ./Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.o ./Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.su ./Middlewares/Third_Party/LwIP/src/netif/slipif.d ./Middlewares/Third_Party/LwIP/src/netif/slipif.o ./Middlewares/Third_Party/LwIP/src/netif/slipif.su ./Middlewares/Third_Party/LwIP/src/netif/zepif.d ./Middlewares/Third_Party/LwIP/src/netif/zepif.o ./Middlewares/Third_Party/LwIP/src/netif/zepif.su + -$(RM) ./Middlewares/Third_Party/LwIP/src/netif/bridgeif.cyclo ./Middlewares/Third_Party/LwIP/src/netif/bridgeif.d ./Middlewares/Third_Party/LwIP/src/netif/bridgeif.o ./Middlewares/Third_Party/LwIP/src/netif/bridgeif.su ./Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.cyclo ./Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.d ./Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.o ./Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.su ./Middlewares/Third_Party/LwIP/src/netif/ethernet.cyclo ./Middlewares/Third_Party/LwIP/src/netif/ethernet.d ./Middlewares/Third_Party/LwIP/src/netif/ethernet.o ./Middlewares/Third_Party/LwIP/src/netif/ethernet.su ./Middlewares/Third_Party/LwIP/src/netif/lowpan6.cyclo ./Middlewares/Third_Party/LwIP/src/netif/lowpan6.d ./Middlewares/Third_Party/LwIP/src/netif/lowpan6.o ./Middlewares/Third_Party/LwIP/src/netif/lowpan6.su ./Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.cyclo ./Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.d ./Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.o ./Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.su ./Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.cyclo ./Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.d ./Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.o ./Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.su ./Middlewares/Third_Party/LwIP/src/netif/slipif.cyclo ./Middlewares/Third_Party/LwIP/src/netif/slipif.d ./Middlewares/Third_Party/LwIP/src/netif/slipif.o ./Middlewares/Third_Party/LwIP/src/netif/slipif.su ./Middlewares/Third_Party/LwIP/src/netif/zepif.cyclo ./Middlewares/Third_Party/LwIP/src/netif/zepif.d ./Middlewares/Third_Party/LwIP/src/netif/zepif.o ./Middlewares/Third_Party/LwIP/src/netif/zepif.su .PHONY: clean-Middlewares-2f-Third_Party-2f-LwIP-2f-src-2f-netif diff --git a/Debug/makefile b/Debug/makefile index 65f66f1..6ca31b2 100644 --- a/Debug/makefile +++ b/Debug/makefile @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (12.3.rel1) ################################################################################ -include ../makefile.init diff --git a/Debug/objects.mk b/Debug/objects.mk index e423e31..94e86f7 100644 --- a/Debug/objects.mk +++ b/Debug/objects.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (12.3.rel1) ################################################################################ USER_OBJS := diff --git a/Debug/sources.mk b/Debug/sources.mk index 9810347..182aa5f 100644 --- a/Debug/sources.mk +++ b/Debug/sources.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (12.3.rel1) ################################################################################ ELF_SRCS := @@ -9,6 +9,7 @@ S_SRCS := C_SRCS := S_UPPER_SRCS := O_SRCS := +CYCLO_FILES := SIZE_OUTPUT := OBJDUMP_LIST := SU_FILES := diff --git a/Debug/yau-07b.list b/Debug/yau-07b.list deleted file mode 100644 index ae51a4c..0000000 --- a/Debug/yau-07b.list +++ /dev/null @@ -1,52368 +0,0 @@ - -yau-07b.elf: file format elf32-littlearm - -Sections: -Idx Name Size VMA LMA File off Algn - 0 .isr_vector 000001ac 08000000 08000000 00010000 2**0 - CONTENTS, ALLOC, LOAD, READONLY, DATA - 1 .text 000159f0 080001b0 080001b0 000101b0 2**4 - CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .rodata 000032dc 08015ba0 08015ba0 00025ba0 2**3 - CONTENTS, ALLOC, LOAD, READONLY, DATA - 3 .ARM.extab 00000000 08018e7c 08018e7c 000309e0 2**0 - CONTENTS - 4 .ARM 00000008 08018e7c 08018e7c 00028e7c 2**2 - CONTENTS, ALLOC, LOAD, READONLY, DATA - 5 .preinit_array 00000000 08018e84 08018e84 000309e0 2**0 - CONTENTS, ALLOC, LOAD, DATA - 6 .init_array 00000008 08018e84 08018e84 00028e84 2**2 - CONTENTS, ALLOC, LOAD, DATA - 7 .fini_array 00000004 08018e8c 08018e8c 00028e8c 2**2 - CONTENTS, ALLOC, LOAD, DATA - 8 .data 000009e0 20000000 08018e90 00030000 2**3 - CONTENTS, ALLOC, LOAD, DATA - 9 .ccmram 00000000 10000000 10000000 000309e0 2**0 - CONTENTS - 10 .bss 000091c4 200009e0 200009e0 000309e0 2**2 - ALLOC - 11 ._user_heap_stack 00000604 20009ba4 20009ba4 000309e0 2**0 - ALLOC - 12 .ARM.attributes 00000030 00000000 00000000 000309e0 2**0 - CONTENTS, READONLY - 13 .debug_info 00020fea 00000000 00000000 00030a10 2**0 - CONTENTS, READONLY, DEBUGGING, OCTETS - 14 .debug_abbrev 00005479 00000000 00000000 000519fa 2**0 - CONTENTS, READONLY, DEBUGGING, OCTETS - 15 .debug_aranges 00001920 00000000 00000000 00056e78 2**3 - CONTENTS, READONLY, DEBUGGING, OCTETS - 16 .debug_ranges 00001860 00000000 00000000 00058798 2**3 - CONTENTS, READONLY, DEBUGGING, OCTETS - 17 .debug_macro 0002ff06 00000000 00000000 00059ff8 2**0 - CONTENTS, READONLY, DEBUGGING, OCTETS - 18 .debug_line 00025d4f 00000000 00000000 00089efe 2**0 - CONTENTS, READONLY, DEBUGGING, OCTETS - 19 .debug_str 000f4d13 00000000 00000000 000afc4d 2**0 - CONTENTS, READONLY, DEBUGGING, OCTETS - 20 .comment 00000050 00000000 00000000 001a4960 2**0 - CONTENTS, READONLY - 21 .debug_frame 00007c18 00000000 00000000 001a49b0 2**2 - CONTENTS, READONLY, DEBUGGING, OCTETS - 22 .stab 000000cc 00000000 00000000 001ac5c8 2**2 - CONTENTS, READONLY, DEBUGGING - 23 .stabstr 000001b9 00000000 00000000 001ac694 2**0 - CONTENTS, READONLY, DEBUGGING - -Disassembly of section .text: - -080001b0 <__do_global_dtors_aux>: - 80001b0: b510 push {r4, lr} - 80001b2: 4c05 ldr r4, [pc, #20] ; (80001c8 <__do_global_dtors_aux+0x18>) - 80001b4: 7823 ldrb r3, [r4, #0] - 80001b6: b933 cbnz r3, 80001c6 <__do_global_dtors_aux+0x16> - 80001b8: 4b04 ldr r3, [pc, #16] ; (80001cc <__do_global_dtors_aux+0x1c>) - 80001ba: b113 cbz r3, 80001c2 <__do_global_dtors_aux+0x12> - 80001bc: 4804 ldr r0, [pc, #16] ; (80001d0 <__do_global_dtors_aux+0x20>) - 80001be: f3af 8000 nop.w - 80001c2: 2301 movs r3, #1 - 80001c4: 7023 strb r3, [r4, #0] - 80001c6: bd10 pop {r4, pc} - 80001c8: 200009e0 .word 0x200009e0 - 80001cc: 00000000 .word 0x00000000 - 80001d0: 08015b88 .word 0x08015b88 - -080001d4 : - 80001d4: b508 push {r3, lr} - 80001d6: 4b03 ldr r3, [pc, #12] ; (80001e4 ) - 80001d8: b11b cbz r3, 80001e2 - 80001da: 4903 ldr r1, [pc, #12] ; (80001e8 ) - 80001dc: 4803 ldr r0, [pc, #12] ; (80001ec ) - 80001de: f3af 8000 nop.w - 80001e2: bd08 pop {r3, pc} - 80001e4: 00000000 .word 0x00000000 - 80001e8: 200009e4 .word 0x200009e4 - 80001ec: 08015b88 .word 0x08015b88 - -080001f0 : - 80001f0: 4603 mov r3, r0 - 80001f2: f813 2b01 ldrb.w r2, [r3], #1 - 80001f6: 2a00 cmp r2, #0 - 80001f8: d1fb bne.n 80001f2 - 80001fa: 1a18 subs r0, r3, r0 - 80001fc: 3801 subs r0, #1 - 80001fe: 4770 bx lr - -08000200 : - 8000200: f001 01ff and.w r1, r1, #255 ; 0xff - 8000204: 2a10 cmp r2, #16 - 8000206: db2b blt.n 8000260 - 8000208: f010 0f07 tst.w r0, #7 - 800020c: d008 beq.n 8000220 - 800020e: f810 3b01 ldrb.w r3, [r0], #1 - 8000212: 3a01 subs r2, #1 - 8000214: 428b cmp r3, r1 - 8000216: d02d beq.n 8000274 - 8000218: f010 0f07 tst.w r0, #7 - 800021c: b342 cbz r2, 8000270 - 800021e: d1f6 bne.n 800020e - 8000220: b4f0 push {r4, r5, r6, r7} - 8000222: ea41 2101 orr.w r1, r1, r1, lsl #8 - 8000226: ea41 4101 orr.w r1, r1, r1, lsl #16 - 800022a: f022 0407 bic.w r4, r2, #7 - 800022e: f07f 0700 mvns.w r7, #0 - 8000232: 2300 movs r3, #0 - 8000234: e8f0 5602 ldrd r5, r6, [r0], #8 - 8000238: 3c08 subs r4, #8 - 800023a: ea85 0501 eor.w r5, r5, r1 - 800023e: ea86 0601 eor.w r6, r6, r1 - 8000242: fa85 f547 uadd8 r5, r5, r7 - 8000246: faa3 f587 sel r5, r3, r7 - 800024a: fa86 f647 uadd8 r6, r6, r7 - 800024e: faa5 f687 sel r6, r5, r7 - 8000252: b98e cbnz r6, 8000278 - 8000254: d1ee bne.n 8000234 - 8000256: bcf0 pop {r4, r5, r6, r7} - 8000258: f001 01ff and.w r1, r1, #255 ; 0xff - 800025c: f002 0207 and.w r2, r2, #7 - 8000260: b132 cbz r2, 8000270 - 8000262: f810 3b01 ldrb.w r3, [r0], #1 - 8000266: 3a01 subs r2, #1 - 8000268: ea83 0301 eor.w r3, r3, r1 - 800026c: b113 cbz r3, 8000274 - 800026e: d1f8 bne.n 8000262 - 8000270: 2000 movs r0, #0 - 8000272: 4770 bx lr - 8000274: 3801 subs r0, #1 - 8000276: 4770 bx lr - 8000278: 2d00 cmp r5, #0 - 800027a: bf06 itte eq - 800027c: 4635 moveq r5, r6 - 800027e: 3803 subeq r0, #3 - 8000280: 3807 subne r0, #7 - 8000282: f015 0f01 tst.w r5, #1 - 8000286: d107 bne.n 8000298 - 8000288: 3001 adds r0, #1 - 800028a: f415 7f80 tst.w r5, #256 ; 0x100 - 800028e: bf02 ittt eq - 8000290: 3001 addeq r0, #1 - 8000292: f415 3fc0 tsteq.w r5, #98304 ; 0x18000 - 8000296: 3001 addeq r0, #1 - 8000298: bcf0 pop {r4, r5, r6, r7} - 800029a: 3801 subs r0, #1 - 800029c: 4770 bx lr - 800029e: bf00 nop - -080002a0 <__aeabi_drsub>: - 80002a0: f081 4100 eor.w r1, r1, #2147483648 ; 0x80000000 - 80002a4: e002 b.n 80002ac <__adddf3> - 80002a6: bf00 nop - -080002a8 <__aeabi_dsub>: - 80002a8: f083 4300 eor.w r3, r3, #2147483648 ; 0x80000000 - -080002ac <__adddf3>: - 80002ac: b530 push {r4, r5, lr} - 80002ae: ea4f 0441 mov.w r4, r1, lsl #1 - 80002b2: ea4f 0543 mov.w r5, r3, lsl #1 - 80002b6: ea94 0f05 teq r4, r5 - 80002ba: bf08 it eq - 80002bc: ea90 0f02 teqeq r0, r2 - 80002c0: bf1f itttt ne - 80002c2: ea54 0c00 orrsne.w ip, r4, r0 - 80002c6: ea55 0c02 orrsne.w ip, r5, r2 - 80002ca: ea7f 5c64 mvnsne.w ip, r4, asr #21 - 80002ce: ea7f 5c65 mvnsne.w ip, r5, asr #21 - 80002d2: f000 80e2 beq.w 800049a <__adddf3+0x1ee> - 80002d6: ea4f 5454 mov.w r4, r4, lsr #21 - 80002da: ebd4 5555 rsbs r5, r4, r5, lsr #21 - 80002de: bfb8 it lt - 80002e0: 426d neglt r5, r5 - 80002e2: dd0c ble.n 80002fe <__adddf3+0x52> - 80002e4: 442c add r4, r5 - 80002e6: ea80 0202 eor.w r2, r0, r2 - 80002ea: ea81 0303 eor.w r3, r1, r3 - 80002ee: ea82 0000 eor.w r0, r2, r0 - 80002f2: ea83 0101 eor.w r1, r3, r1 - 80002f6: ea80 0202 eor.w r2, r0, r2 - 80002fa: ea81 0303 eor.w r3, r1, r3 - 80002fe: 2d36 cmp r5, #54 ; 0x36 - 8000300: bf88 it hi - 8000302: bd30 pophi {r4, r5, pc} - 8000304: f011 4f00 tst.w r1, #2147483648 ; 0x80000000 - 8000308: ea4f 3101 mov.w r1, r1, lsl #12 - 800030c: f44f 1c80 mov.w ip, #1048576 ; 0x100000 - 8000310: ea4c 3111 orr.w r1, ip, r1, lsr #12 - 8000314: d002 beq.n 800031c <__adddf3+0x70> - 8000316: 4240 negs r0, r0 - 8000318: eb61 0141 sbc.w r1, r1, r1, lsl #1 - 800031c: f013 4f00 tst.w r3, #2147483648 ; 0x80000000 - 8000320: ea4f 3303 mov.w r3, r3, lsl #12 - 8000324: ea4c 3313 orr.w r3, ip, r3, lsr #12 - 8000328: d002 beq.n 8000330 <__adddf3+0x84> - 800032a: 4252 negs r2, r2 - 800032c: eb63 0343 sbc.w r3, r3, r3, lsl #1 - 8000330: ea94 0f05 teq r4, r5 - 8000334: f000 80a7 beq.w 8000486 <__adddf3+0x1da> - 8000338: f1a4 0401 sub.w r4, r4, #1 - 800033c: f1d5 0e20 rsbs lr, r5, #32 - 8000340: db0d blt.n 800035e <__adddf3+0xb2> - 8000342: fa02 fc0e lsl.w ip, r2, lr - 8000346: fa22 f205 lsr.w r2, r2, r5 - 800034a: 1880 adds r0, r0, r2 - 800034c: f141 0100 adc.w r1, r1, #0 - 8000350: fa03 f20e lsl.w r2, r3, lr - 8000354: 1880 adds r0, r0, r2 - 8000356: fa43 f305 asr.w r3, r3, r5 - 800035a: 4159 adcs r1, r3 - 800035c: e00e b.n 800037c <__adddf3+0xd0> - 800035e: f1a5 0520 sub.w r5, r5, #32 - 8000362: f10e 0e20 add.w lr, lr, #32 - 8000366: 2a01 cmp r2, #1 - 8000368: fa03 fc0e lsl.w ip, r3, lr - 800036c: bf28 it cs - 800036e: f04c 0c02 orrcs.w ip, ip, #2 - 8000372: fa43 f305 asr.w r3, r3, r5 - 8000376: 18c0 adds r0, r0, r3 - 8000378: eb51 71e3 adcs.w r1, r1, r3, asr #31 - 800037c: f001 4500 and.w r5, r1, #2147483648 ; 0x80000000 - 8000380: d507 bpl.n 8000392 <__adddf3+0xe6> - 8000382: f04f 0e00 mov.w lr, #0 - 8000386: f1dc 0c00 rsbs ip, ip, #0 - 800038a: eb7e 0000 sbcs.w r0, lr, r0 - 800038e: eb6e 0101 sbc.w r1, lr, r1 - 8000392: f5b1 1f80 cmp.w r1, #1048576 ; 0x100000 - 8000396: d31b bcc.n 80003d0 <__adddf3+0x124> - 8000398: f5b1 1f00 cmp.w r1, #2097152 ; 0x200000 - 800039c: d30c bcc.n 80003b8 <__adddf3+0x10c> - 800039e: 0849 lsrs r1, r1, #1 - 80003a0: ea5f 0030 movs.w r0, r0, rrx - 80003a4: ea4f 0c3c mov.w ip, ip, rrx - 80003a8: f104 0401 add.w r4, r4, #1 - 80003ac: ea4f 5244 mov.w r2, r4, lsl #21 - 80003b0: f512 0f80 cmn.w r2, #4194304 ; 0x400000 - 80003b4: f080 809a bcs.w 80004ec <__adddf3+0x240> - 80003b8: f1bc 4f00 cmp.w ip, #2147483648 ; 0x80000000 - 80003bc: bf08 it eq - 80003be: ea5f 0c50 movseq.w ip, r0, lsr #1 - 80003c2: f150 0000 adcs.w r0, r0, #0 - 80003c6: eb41 5104 adc.w r1, r1, r4, lsl #20 - 80003ca: ea41 0105 orr.w r1, r1, r5 - 80003ce: bd30 pop {r4, r5, pc} - 80003d0: ea5f 0c4c movs.w ip, ip, lsl #1 - 80003d4: 4140 adcs r0, r0 - 80003d6: eb41 0101 adc.w r1, r1, r1 - 80003da: 3c01 subs r4, #1 - 80003dc: bf28 it cs - 80003de: f5b1 1f80 cmpcs.w r1, #1048576 ; 0x100000 - 80003e2: d2e9 bcs.n 80003b8 <__adddf3+0x10c> - 80003e4: f091 0f00 teq r1, #0 - 80003e8: bf04 itt eq - 80003ea: 4601 moveq r1, r0 - 80003ec: 2000 moveq r0, #0 - 80003ee: fab1 f381 clz r3, r1 - 80003f2: bf08 it eq - 80003f4: 3320 addeq r3, #32 - 80003f6: f1a3 030b sub.w r3, r3, #11 - 80003fa: f1b3 0220 subs.w r2, r3, #32 - 80003fe: da0c bge.n 800041a <__adddf3+0x16e> - 8000400: 320c adds r2, #12 - 8000402: dd08 ble.n 8000416 <__adddf3+0x16a> - 8000404: f102 0c14 add.w ip, r2, #20 - 8000408: f1c2 020c rsb r2, r2, #12 - 800040c: fa01 f00c lsl.w r0, r1, ip - 8000410: fa21 f102 lsr.w r1, r1, r2 - 8000414: e00c b.n 8000430 <__adddf3+0x184> - 8000416: f102 0214 add.w r2, r2, #20 - 800041a: bfd8 it le - 800041c: f1c2 0c20 rsble ip, r2, #32 - 8000420: fa01 f102 lsl.w r1, r1, r2 - 8000424: fa20 fc0c lsr.w ip, r0, ip - 8000428: bfdc itt le - 800042a: ea41 010c orrle.w r1, r1, ip - 800042e: 4090 lslle r0, r2 - 8000430: 1ae4 subs r4, r4, r3 - 8000432: bfa2 ittt ge - 8000434: eb01 5104 addge.w r1, r1, r4, lsl #20 - 8000438: 4329 orrge r1, r5 - 800043a: bd30 popge {r4, r5, pc} - 800043c: ea6f 0404 mvn.w r4, r4 - 8000440: 3c1f subs r4, #31 - 8000442: da1c bge.n 800047e <__adddf3+0x1d2> - 8000444: 340c adds r4, #12 - 8000446: dc0e bgt.n 8000466 <__adddf3+0x1ba> - 8000448: f104 0414 add.w r4, r4, #20 - 800044c: f1c4 0220 rsb r2, r4, #32 - 8000450: fa20 f004 lsr.w r0, r0, r4 - 8000454: fa01 f302 lsl.w r3, r1, r2 - 8000458: ea40 0003 orr.w r0, r0, r3 - 800045c: fa21 f304 lsr.w r3, r1, r4 - 8000460: ea45 0103 orr.w r1, r5, r3 - 8000464: bd30 pop {r4, r5, pc} - 8000466: f1c4 040c rsb r4, r4, #12 - 800046a: f1c4 0220 rsb r2, r4, #32 - 800046e: fa20 f002 lsr.w r0, r0, r2 - 8000472: fa01 f304 lsl.w r3, r1, r4 - 8000476: ea40 0003 orr.w r0, r0, r3 - 800047a: 4629 mov r1, r5 - 800047c: bd30 pop {r4, r5, pc} - 800047e: fa21 f004 lsr.w r0, r1, r4 - 8000482: 4629 mov r1, r5 - 8000484: bd30 pop {r4, r5, pc} - 8000486: f094 0f00 teq r4, #0 - 800048a: f483 1380 eor.w r3, r3, #1048576 ; 0x100000 - 800048e: bf06 itte eq - 8000490: f481 1180 eoreq.w r1, r1, #1048576 ; 0x100000 - 8000494: 3401 addeq r4, #1 - 8000496: 3d01 subne r5, #1 - 8000498: e74e b.n 8000338 <__adddf3+0x8c> - 800049a: ea7f 5c64 mvns.w ip, r4, asr #21 - 800049e: bf18 it ne - 80004a0: ea7f 5c65 mvnsne.w ip, r5, asr #21 - 80004a4: d029 beq.n 80004fa <__adddf3+0x24e> - 80004a6: ea94 0f05 teq r4, r5 - 80004aa: bf08 it eq - 80004ac: ea90 0f02 teqeq r0, r2 - 80004b0: d005 beq.n 80004be <__adddf3+0x212> - 80004b2: ea54 0c00 orrs.w ip, r4, r0 - 80004b6: bf04 itt eq - 80004b8: 4619 moveq r1, r3 - 80004ba: 4610 moveq r0, r2 - 80004bc: bd30 pop {r4, r5, pc} - 80004be: ea91 0f03 teq r1, r3 - 80004c2: bf1e ittt ne - 80004c4: 2100 movne r1, #0 - 80004c6: 2000 movne r0, #0 - 80004c8: bd30 popne {r4, r5, pc} - 80004ca: ea5f 5c54 movs.w ip, r4, lsr #21 - 80004ce: d105 bne.n 80004dc <__adddf3+0x230> - 80004d0: 0040 lsls r0, r0, #1 - 80004d2: 4149 adcs r1, r1 - 80004d4: bf28 it cs - 80004d6: f041 4100 orrcs.w r1, r1, #2147483648 ; 0x80000000 - 80004da: bd30 pop {r4, r5, pc} - 80004dc: f514 0480 adds.w r4, r4, #4194304 ; 0x400000 - 80004e0: bf3c itt cc - 80004e2: f501 1180 addcc.w r1, r1, #1048576 ; 0x100000 - 80004e6: bd30 popcc {r4, r5, pc} - 80004e8: f001 4500 and.w r5, r1, #2147483648 ; 0x80000000 - 80004ec: f045 41fe orr.w r1, r5, #2130706432 ; 0x7f000000 - 80004f0: f441 0170 orr.w r1, r1, #15728640 ; 0xf00000 - 80004f4: f04f 0000 mov.w r0, #0 - 80004f8: bd30 pop {r4, r5, pc} - 80004fa: ea7f 5c64 mvns.w ip, r4, asr #21 - 80004fe: bf1a itte ne - 8000500: 4619 movne r1, r3 - 8000502: 4610 movne r0, r2 - 8000504: ea7f 5c65 mvnseq.w ip, r5, asr #21 - 8000508: bf1c itt ne - 800050a: 460b movne r3, r1 - 800050c: 4602 movne r2, r0 - 800050e: ea50 3401 orrs.w r4, r0, r1, lsl #12 - 8000512: bf06 itte eq - 8000514: ea52 3503 orrseq.w r5, r2, r3, lsl #12 - 8000518: ea91 0f03 teqeq r1, r3 - 800051c: f441 2100 orrne.w r1, r1, #524288 ; 0x80000 - 8000520: bd30 pop {r4, r5, pc} - 8000522: bf00 nop - -08000524 <__aeabi_ui2d>: - 8000524: f090 0f00 teq r0, #0 - 8000528: bf04 itt eq - 800052a: 2100 moveq r1, #0 - 800052c: 4770 bxeq lr - 800052e: b530 push {r4, r5, lr} - 8000530: f44f 6480 mov.w r4, #1024 ; 0x400 - 8000534: f104 0432 add.w r4, r4, #50 ; 0x32 - 8000538: f04f 0500 mov.w r5, #0 - 800053c: f04f 0100 mov.w r1, #0 - 8000540: e750 b.n 80003e4 <__adddf3+0x138> - 8000542: bf00 nop - -08000544 <__aeabi_i2d>: - 8000544: f090 0f00 teq r0, #0 - 8000548: bf04 itt eq - 800054a: 2100 moveq r1, #0 - 800054c: 4770 bxeq lr - 800054e: b530 push {r4, r5, lr} - 8000550: f44f 6480 mov.w r4, #1024 ; 0x400 - 8000554: f104 0432 add.w r4, r4, #50 ; 0x32 - 8000558: f010 4500 ands.w r5, r0, #2147483648 ; 0x80000000 - 800055c: bf48 it mi - 800055e: 4240 negmi r0, r0 - 8000560: f04f 0100 mov.w r1, #0 - 8000564: e73e b.n 80003e4 <__adddf3+0x138> - 8000566: bf00 nop - -08000568 <__aeabi_f2d>: - 8000568: 0042 lsls r2, r0, #1 - 800056a: ea4f 01e2 mov.w r1, r2, asr #3 - 800056e: ea4f 0131 mov.w r1, r1, rrx - 8000572: ea4f 7002 mov.w r0, r2, lsl #28 - 8000576: bf1f itttt ne - 8000578: f012 437f andsne.w r3, r2, #4278190080 ; 0xff000000 - 800057c: f093 4f7f teqne r3, #4278190080 ; 0xff000000 - 8000580: f081 5160 eorne.w r1, r1, #939524096 ; 0x38000000 - 8000584: 4770 bxne lr - 8000586: f032 427f bics.w r2, r2, #4278190080 ; 0xff000000 - 800058a: bf08 it eq - 800058c: 4770 bxeq lr - 800058e: f093 4f7f teq r3, #4278190080 ; 0xff000000 - 8000592: bf04 itt eq - 8000594: f441 2100 orreq.w r1, r1, #524288 ; 0x80000 - 8000598: 4770 bxeq lr - 800059a: b530 push {r4, r5, lr} - 800059c: f44f 7460 mov.w r4, #896 ; 0x380 - 80005a0: f001 4500 and.w r5, r1, #2147483648 ; 0x80000000 - 80005a4: f021 4100 bic.w r1, r1, #2147483648 ; 0x80000000 - 80005a8: e71c b.n 80003e4 <__adddf3+0x138> - 80005aa: bf00 nop - -080005ac <__aeabi_ul2d>: - 80005ac: ea50 0201 orrs.w r2, r0, r1 - 80005b0: bf08 it eq - 80005b2: 4770 bxeq lr - 80005b4: b530 push {r4, r5, lr} - 80005b6: f04f 0500 mov.w r5, #0 - 80005ba: e00a b.n 80005d2 <__aeabi_l2d+0x16> - -080005bc <__aeabi_l2d>: - 80005bc: ea50 0201 orrs.w r2, r0, r1 - 80005c0: bf08 it eq - 80005c2: 4770 bxeq lr - 80005c4: b530 push {r4, r5, lr} - 80005c6: f011 4500 ands.w r5, r1, #2147483648 ; 0x80000000 - 80005ca: d502 bpl.n 80005d2 <__aeabi_l2d+0x16> - 80005cc: 4240 negs r0, r0 - 80005ce: eb61 0141 sbc.w r1, r1, r1, lsl #1 - 80005d2: f44f 6480 mov.w r4, #1024 ; 0x400 - 80005d6: f104 0432 add.w r4, r4, #50 ; 0x32 - 80005da: ea5f 5c91 movs.w ip, r1, lsr #22 - 80005de: f43f aed8 beq.w 8000392 <__adddf3+0xe6> - 80005e2: f04f 0203 mov.w r2, #3 - 80005e6: ea5f 0cdc movs.w ip, ip, lsr #3 - 80005ea: bf18 it ne - 80005ec: 3203 addne r2, #3 - 80005ee: ea5f 0cdc movs.w ip, ip, lsr #3 - 80005f2: bf18 it ne - 80005f4: 3203 addne r2, #3 - 80005f6: eb02 02dc add.w r2, r2, ip, lsr #3 - 80005fa: f1c2 0320 rsb r3, r2, #32 - 80005fe: fa00 fc03 lsl.w ip, r0, r3 - 8000602: fa20 f002 lsr.w r0, r0, r2 - 8000606: fa01 fe03 lsl.w lr, r1, r3 - 800060a: ea40 000e orr.w r0, r0, lr - 800060e: fa21 f102 lsr.w r1, r1, r2 - 8000612: 4414 add r4, r2 - 8000614: e6bd b.n 8000392 <__adddf3+0xe6> - 8000616: bf00 nop - -08000618 <__aeabi_dmul>: - 8000618: b570 push {r4, r5, r6, lr} - 800061a: f04f 0cff mov.w ip, #255 ; 0xff - 800061e: f44c 6ce0 orr.w ip, ip, #1792 ; 0x700 - 8000622: ea1c 5411 ands.w r4, ip, r1, lsr #20 - 8000626: bf1d ittte ne - 8000628: ea1c 5513 andsne.w r5, ip, r3, lsr #20 - 800062c: ea94 0f0c teqne r4, ip - 8000630: ea95 0f0c teqne r5, ip - 8000634: f000 f8de bleq 80007f4 <__aeabi_dmul+0x1dc> - 8000638: 442c add r4, r5 - 800063a: ea81 0603 eor.w r6, r1, r3 - 800063e: ea21 514c bic.w r1, r1, ip, lsl #21 - 8000642: ea23 534c bic.w r3, r3, ip, lsl #21 - 8000646: ea50 3501 orrs.w r5, r0, r1, lsl #12 - 800064a: bf18 it ne - 800064c: ea52 3503 orrsne.w r5, r2, r3, lsl #12 - 8000650: f441 1180 orr.w r1, r1, #1048576 ; 0x100000 - 8000654: f443 1380 orr.w r3, r3, #1048576 ; 0x100000 - 8000658: d038 beq.n 80006cc <__aeabi_dmul+0xb4> - 800065a: fba0 ce02 umull ip, lr, r0, r2 - 800065e: f04f 0500 mov.w r5, #0 - 8000662: fbe1 e502 umlal lr, r5, r1, r2 - 8000666: f006 4200 and.w r2, r6, #2147483648 ; 0x80000000 - 800066a: fbe0 e503 umlal lr, r5, r0, r3 - 800066e: f04f 0600 mov.w r6, #0 - 8000672: fbe1 5603 umlal r5, r6, r1, r3 - 8000676: f09c 0f00 teq ip, #0 - 800067a: bf18 it ne - 800067c: f04e 0e01 orrne.w lr, lr, #1 - 8000680: f1a4 04ff sub.w r4, r4, #255 ; 0xff - 8000684: f5b6 7f00 cmp.w r6, #512 ; 0x200 - 8000688: f564 7440 sbc.w r4, r4, #768 ; 0x300 - 800068c: d204 bcs.n 8000698 <__aeabi_dmul+0x80> - 800068e: ea5f 0e4e movs.w lr, lr, lsl #1 - 8000692: 416d adcs r5, r5 - 8000694: eb46 0606 adc.w r6, r6, r6 - 8000698: ea42 21c6 orr.w r1, r2, r6, lsl #11 - 800069c: ea41 5155 orr.w r1, r1, r5, lsr #21 - 80006a0: ea4f 20c5 mov.w r0, r5, lsl #11 - 80006a4: ea40 505e orr.w r0, r0, lr, lsr #21 - 80006a8: ea4f 2ece mov.w lr, lr, lsl #11 - 80006ac: f1b4 0cfd subs.w ip, r4, #253 ; 0xfd - 80006b0: bf88 it hi - 80006b2: f5bc 6fe0 cmphi.w ip, #1792 ; 0x700 - 80006b6: d81e bhi.n 80006f6 <__aeabi_dmul+0xde> - 80006b8: f1be 4f00 cmp.w lr, #2147483648 ; 0x80000000 - 80006bc: bf08 it eq - 80006be: ea5f 0e50 movseq.w lr, r0, lsr #1 - 80006c2: f150 0000 adcs.w r0, r0, #0 - 80006c6: eb41 5104 adc.w r1, r1, r4, lsl #20 - 80006ca: bd70 pop {r4, r5, r6, pc} - 80006cc: f006 4600 and.w r6, r6, #2147483648 ; 0x80000000 - 80006d0: ea46 0101 orr.w r1, r6, r1 - 80006d4: ea40 0002 orr.w r0, r0, r2 - 80006d8: ea81 0103 eor.w r1, r1, r3 - 80006dc: ebb4 045c subs.w r4, r4, ip, lsr #1 - 80006e0: bfc2 ittt gt - 80006e2: ebd4 050c rsbsgt r5, r4, ip - 80006e6: ea41 5104 orrgt.w r1, r1, r4, lsl #20 - 80006ea: bd70 popgt {r4, r5, r6, pc} - 80006ec: f441 1180 orr.w r1, r1, #1048576 ; 0x100000 - 80006f0: f04f 0e00 mov.w lr, #0 - 80006f4: 3c01 subs r4, #1 - 80006f6: f300 80ab bgt.w 8000850 <__aeabi_dmul+0x238> - 80006fa: f114 0f36 cmn.w r4, #54 ; 0x36 - 80006fe: bfde ittt le - 8000700: 2000 movle r0, #0 - 8000702: f001 4100 andle.w r1, r1, #2147483648 ; 0x80000000 - 8000706: bd70 pople {r4, r5, r6, pc} - 8000708: f1c4 0400 rsb r4, r4, #0 - 800070c: 3c20 subs r4, #32 - 800070e: da35 bge.n 800077c <__aeabi_dmul+0x164> - 8000710: 340c adds r4, #12 - 8000712: dc1b bgt.n 800074c <__aeabi_dmul+0x134> - 8000714: f104 0414 add.w r4, r4, #20 - 8000718: f1c4 0520 rsb r5, r4, #32 - 800071c: fa00 f305 lsl.w r3, r0, r5 - 8000720: fa20 f004 lsr.w r0, r0, r4 - 8000724: fa01 f205 lsl.w r2, r1, r5 - 8000728: ea40 0002 orr.w r0, r0, r2 - 800072c: f001 4200 and.w r2, r1, #2147483648 ; 0x80000000 - 8000730: f021 4100 bic.w r1, r1, #2147483648 ; 0x80000000 - 8000734: eb10 70d3 adds.w r0, r0, r3, lsr #31 - 8000738: fa21 f604 lsr.w r6, r1, r4 - 800073c: eb42 0106 adc.w r1, r2, r6 - 8000740: ea5e 0e43 orrs.w lr, lr, r3, lsl #1 - 8000744: bf08 it eq - 8000746: ea20 70d3 biceq.w r0, r0, r3, lsr #31 - 800074a: bd70 pop {r4, r5, r6, pc} - 800074c: f1c4 040c rsb r4, r4, #12 - 8000750: f1c4 0520 rsb r5, r4, #32 - 8000754: fa00 f304 lsl.w r3, r0, r4 - 8000758: fa20 f005 lsr.w r0, r0, r5 - 800075c: fa01 f204 lsl.w r2, r1, r4 - 8000760: ea40 0002 orr.w r0, r0, r2 - 8000764: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000 - 8000768: eb10 70d3 adds.w r0, r0, r3, lsr #31 - 800076c: f141 0100 adc.w r1, r1, #0 - 8000770: ea5e 0e43 orrs.w lr, lr, r3, lsl #1 - 8000774: bf08 it eq - 8000776: ea20 70d3 biceq.w r0, r0, r3, lsr #31 - 800077a: bd70 pop {r4, r5, r6, pc} - 800077c: f1c4 0520 rsb r5, r4, #32 - 8000780: fa00 f205 lsl.w r2, r0, r5 - 8000784: ea4e 0e02 orr.w lr, lr, r2 - 8000788: fa20 f304 lsr.w r3, r0, r4 - 800078c: fa01 f205 lsl.w r2, r1, r5 - 8000790: ea43 0302 orr.w r3, r3, r2 - 8000794: fa21 f004 lsr.w r0, r1, r4 - 8000798: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000 - 800079c: fa21 f204 lsr.w r2, r1, r4 - 80007a0: ea20 0002 bic.w r0, r0, r2 - 80007a4: eb00 70d3 add.w r0, r0, r3, lsr #31 - 80007a8: ea5e 0e43 orrs.w lr, lr, r3, lsl #1 - 80007ac: bf08 it eq - 80007ae: ea20 70d3 biceq.w r0, r0, r3, lsr #31 - 80007b2: bd70 pop {r4, r5, r6, pc} - 80007b4: f094 0f00 teq r4, #0 - 80007b8: d10f bne.n 80007da <__aeabi_dmul+0x1c2> - 80007ba: f001 4600 and.w r6, r1, #2147483648 ; 0x80000000 - 80007be: 0040 lsls r0, r0, #1 - 80007c0: eb41 0101 adc.w r1, r1, r1 - 80007c4: f411 1f80 tst.w r1, #1048576 ; 0x100000 - 80007c8: bf08 it eq - 80007ca: 3c01 subeq r4, #1 - 80007cc: d0f7 beq.n 80007be <__aeabi_dmul+0x1a6> - 80007ce: ea41 0106 orr.w r1, r1, r6 - 80007d2: f095 0f00 teq r5, #0 - 80007d6: bf18 it ne - 80007d8: 4770 bxne lr - 80007da: f003 4600 and.w r6, r3, #2147483648 ; 0x80000000 - 80007de: 0052 lsls r2, r2, #1 - 80007e0: eb43 0303 adc.w r3, r3, r3 - 80007e4: f413 1f80 tst.w r3, #1048576 ; 0x100000 - 80007e8: bf08 it eq - 80007ea: 3d01 subeq r5, #1 - 80007ec: d0f7 beq.n 80007de <__aeabi_dmul+0x1c6> - 80007ee: ea43 0306 orr.w r3, r3, r6 - 80007f2: 4770 bx lr - 80007f4: ea94 0f0c teq r4, ip - 80007f8: ea0c 5513 and.w r5, ip, r3, lsr #20 - 80007fc: bf18 it ne - 80007fe: ea95 0f0c teqne r5, ip - 8000802: d00c beq.n 800081e <__aeabi_dmul+0x206> - 8000804: ea50 0641 orrs.w r6, r0, r1, lsl #1 - 8000808: bf18 it ne - 800080a: ea52 0643 orrsne.w r6, r2, r3, lsl #1 - 800080e: d1d1 bne.n 80007b4 <__aeabi_dmul+0x19c> - 8000810: ea81 0103 eor.w r1, r1, r3 - 8000814: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000 - 8000818: f04f 0000 mov.w r0, #0 - 800081c: bd70 pop {r4, r5, r6, pc} - 800081e: ea50 0641 orrs.w r6, r0, r1, lsl #1 - 8000822: bf06 itte eq - 8000824: 4610 moveq r0, r2 - 8000826: 4619 moveq r1, r3 - 8000828: ea52 0643 orrsne.w r6, r2, r3, lsl #1 - 800082c: d019 beq.n 8000862 <__aeabi_dmul+0x24a> - 800082e: ea94 0f0c teq r4, ip - 8000832: d102 bne.n 800083a <__aeabi_dmul+0x222> - 8000834: ea50 3601 orrs.w r6, r0, r1, lsl #12 - 8000838: d113 bne.n 8000862 <__aeabi_dmul+0x24a> - 800083a: ea95 0f0c teq r5, ip - 800083e: d105 bne.n 800084c <__aeabi_dmul+0x234> - 8000840: ea52 3603 orrs.w r6, r2, r3, lsl #12 - 8000844: bf1c itt ne - 8000846: 4610 movne r0, r2 - 8000848: 4619 movne r1, r3 - 800084a: d10a bne.n 8000862 <__aeabi_dmul+0x24a> - 800084c: ea81 0103 eor.w r1, r1, r3 - 8000850: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000 - 8000854: f041 41fe orr.w r1, r1, #2130706432 ; 0x7f000000 - 8000858: f441 0170 orr.w r1, r1, #15728640 ; 0xf00000 - 800085c: f04f 0000 mov.w r0, #0 - 8000860: bd70 pop {r4, r5, r6, pc} - 8000862: f041 41fe orr.w r1, r1, #2130706432 ; 0x7f000000 - 8000866: f441 0178 orr.w r1, r1, #16252928 ; 0xf80000 - 800086a: bd70 pop {r4, r5, r6, pc} - -0800086c <__aeabi_ddiv>: - 800086c: b570 push {r4, r5, r6, lr} - 800086e: f04f 0cff mov.w ip, #255 ; 0xff - 8000872: f44c 6ce0 orr.w ip, ip, #1792 ; 0x700 - 8000876: ea1c 5411 ands.w r4, ip, r1, lsr #20 - 800087a: bf1d ittte ne - 800087c: ea1c 5513 andsne.w r5, ip, r3, lsr #20 - 8000880: ea94 0f0c teqne r4, ip - 8000884: ea95 0f0c teqne r5, ip - 8000888: f000 f8a7 bleq 80009da <__aeabi_ddiv+0x16e> - 800088c: eba4 0405 sub.w r4, r4, r5 - 8000890: ea81 0e03 eor.w lr, r1, r3 - 8000894: ea52 3503 orrs.w r5, r2, r3, lsl #12 - 8000898: ea4f 3101 mov.w r1, r1, lsl #12 - 800089c: f000 8088 beq.w 80009b0 <__aeabi_ddiv+0x144> - 80008a0: ea4f 3303 mov.w r3, r3, lsl #12 - 80008a4: f04f 5580 mov.w r5, #268435456 ; 0x10000000 - 80008a8: ea45 1313 orr.w r3, r5, r3, lsr #4 - 80008ac: ea43 6312 orr.w r3, r3, r2, lsr #24 - 80008b0: ea4f 2202 mov.w r2, r2, lsl #8 - 80008b4: ea45 1511 orr.w r5, r5, r1, lsr #4 - 80008b8: ea45 6510 orr.w r5, r5, r0, lsr #24 - 80008bc: ea4f 2600 mov.w r6, r0, lsl #8 - 80008c0: f00e 4100 and.w r1, lr, #2147483648 ; 0x80000000 - 80008c4: 429d cmp r5, r3 - 80008c6: bf08 it eq - 80008c8: 4296 cmpeq r6, r2 - 80008ca: f144 04fd adc.w r4, r4, #253 ; 0xfd - 80008ce: f504 7440 add.w r4, r4, #768 ; 0x300 - 80008d2: d202 bcs.n 80008da <__aeabi_ddiv+0x6e> - 80008d4: 085b lsrs r3, r3, #1 - 80008d6: ea4f 0232 mov.w r2, r2, rrx - 80008da: 1ab6 subs r6, r6, r2 - 80008dc: eb65 0503 sbc.w r5, r5, r3 - 80008e0: 085b lsrs r3, r3, #1 - 80008e2: ea4f 0232 mov.w r2, r2, rrx - 80008e6: f44f 1080 mov.w r0, #1048576 ; 0x100000 - 80008ea: f44f 2c00 mov.w ip, #524288 ; 0x80000 - 80008ee: ebb6 0e02 subs.w lr, r6, r2 - 80008f2: eb75 0e03 sbcs.w lr, r5, r3 - 80008f6: bf22 ittt cs - 80008f8: 1ab6 subcs r6, r6, r2 - 80008fa: 4675 movcs r5, lr - 80008fc: ea40 000c orrcs.w r0, r0, ip - 8000900: 085b lsrs r3, r3, #1 - 8000902: ea4f 0232 mov.w r2, r2, rrx - 8000906: ebb6 0e02 subs.w lr, r6, r2 - 800090a: eb75 0e03 sbcs.w lr, r5, r3 - 800090e: bf22 ittt cs - 8000910: 1ab6 subcs r6, r6, r2 - 8000912: 4675 movcs r5, lr - 8000914: ea40 005c orrcs.w r0, r0, ip, lsr #1 - 8000918: 085b lsrs r3, r3, #1 - 800091a: ea4f 0232 mov.w r2, r2, rrx - 800091e: ebb6 0e02 subs.w lr, r6, r2 - 8000922: eb75 0e03 sbcs.w lr, r5, r3 - 8000926: bf22 ittt cs - 8000928: 1ab6 subcs r6, r6, r2 - 800092a: 4675 movcs r5, lr - 800092c: ea40 009c orrcs.w r0, r0, ip, lsr #2 - 8000930: 085b lsrs r3, r3, #1 - 8000932: ea4f 0232 mov.w r2, r2, rrx - 8000936: ebb6 0e02 subs.w lr, r6, r2 - 800093a: eb75 0e03 sbcs.w lr, r5, r3 - 800093e: bf22 ittt cs - 8000940: 1ab6 subcs r6, r6, r2 - 8000942: 4675 movcs r5, lr - 8000944: ea40 00dc orrcs.w r0, r0, ip, lsr #3 - 8000948: ea55 0e06 orrs.w lr, r5, r6 - 800094c: d018 beq.n 8000980 <__aeabi_ddiv+0x114> - 800094e: ea4f 1505 mov.w r5, r5, lsl #4 - 8000952: ea45 7516 orr.w r5, r5, r6, lsr #28 - 8000956: ea4f 1606 mov.w r6, r6, lsl #4 - 800095a: ea4f 03c3 mov.w r3, r3, lsl #3 - 800095e: ea43 7352 orr.w r3, r3, r2, lsr #29 - 8000962: ea4f 02c2 mov.w r2, r2, lsl #3 - 8000966: ea5f 1c1c movs.w ip, ip, lsr #4 - 800096a: d1c0 bne.n 80008ee <__aeabi_ddiv+0x82> - 800096c: f411 1f80 tst.w r1, #1048576 ; 0x100000 - 8000970: d10b bne.n 800098a <__aeabi_ddiv+0x11e> - 8000972: ea41 0100 orr.w r1, r1, r0 - 8000976: f04f 0000 mov.w r0, #0 - 800097a: f04f 4c00 mov.w ip, #2147483648 ; 0x80000000 - 800097e: e7b6 b.n 80008ee <__aeabi_ddiv+0x82> - 8000980: f411 1f80 tst.w r1, #1048576 ; 0x100000 - 8000984: bf04 itt eq - 8000986: 4301 orreq r1, r0 - 8000988: 2000 moveq r0, #0 - 800098a: f1b4 0cfd subs.w ip, r4, #253 ; 0xfd - 800098e: bf88 it hi - 8000990: f5bc 6fe0 cmphi.w ip, #1792 ; 0x700 - 8000994: f63f aeaf bhi.w 80006f6 <__aeabi_dmul+0xde> - 8000998: ebb5 0c03 subs.w ip, r5, r3 - 800099c: bf04 itt eq - 800099e: ebb6 0c02 subseq.w ip, r6, r2 - 80009a2: ea5f 0c50 movseq.w ip, r0, lsr #1 - 80009a6: f150 0000 adcs.w r0, r0, #0 - 80009aa: eb41 5104 adc.w r1, r1, r4, lsl #20 - 80009ae: bd70 pop {r4, r5, r6, pc} - 80009b0: f00e 4e00 and.w lr, lr, #2147483648 ; 0x80000000 - 80009b4: ea4e 3111 orr.w r1, lr, r1, lsr #12 - 80009b8: eb14 045c adds.w r4, r4, ip, lsr #1 - 80009bc: bfc2 ittt gt - 80009be: ebd4 050c rsbsgt r5, r4, ip - 80009c2: ea41 5104 orrgt.w r1, r1, r4, lsl #20 - 80009c6: bd70 popgt {r4, r5, r6, pc} - 80009c8: f441 1180 orr.w r1, r1, #1048576 ; 0x100000 - 80009cc: f04f 0e00 mov.w lr, #0 - 80009d0: 3c01 subs r4, #1 - 80009d2: e690 b.n 80006f6 <__aeabi_dmul+0xde> - 80009d4: ea45 0e06 orr.w lr, r5, r6 - 80009d8: e68d b.n 80006f6 <__aeabi_dmul+0xde> - 80009da: ea0c 5513 and.w r5, ip, r3, lsr #20 - 80009de: ea94 0f0c teq r4, ip - 80009e2: bf08 it eq - 80009e4: ea95 0f0c teqeq r5, ip - 80009e8: f43f af3b beq.w 8000862 <__aeabi_dmul+0x24a> - 80009ec: ea94 0f0c teq r4, ip - 80009f0: d10a bne.n 8000a08 <__aeabi_ddiv+0x19c> - 80009f2: ea50 3401 orrs.w r4, r0, r1, lsl #12 - 80009f6: f47f af34 bne.w 8000862 <__aeabi_dmul+0x24a> - 80009fa: ea95 0f0c teq r5, ip - 80009fe: f47f af25 bne.w 800084c <__aeabi_dmul+0x234> - 8000a02: 4610 mov r0, r2 - 8000a04: 4619 mov r1, r3 - 8000a06: e72c b.n 8000862 <__aeabi_dmul+0x24a> - 8000a08: ea95 0f0c teq r5, ip - 8000a0c: d106 bne.n 8000a1c <__aeabi_ddiv+0x1b0> - 8000a0e: ea52 3503 orrs.w r5, r2, r3, lsl #12 - 8000a12: f43f aefd beq.w 8000810 <__aeabi_dmul+0x1f8> - 8000a16: 4610 mov r0, r2 - 8000a18: 4619 mov r1, r3 - 8000a1a: e722 b.n 8000862 <__aeabi_dmul+0x24a> - 8000a1c: ea50 0641 orrs.w r6, r0, r1, lsl #1 - 8000a20: bf18 it ne - 8000a22: ea52 0643 orrsne.w r6, r2, r3, lsl #1 - 8000a26: f47f aec5 bne.w 80007b4 <__aeabi_dmul+0x19c> - 8000a2a: ea50 0441 orrs.w r4, r0, r1, lsl #1 - 8000a2e: f47f af0d bne.w 800084c <__aeabi_dmul+0x234> - 8000a32: ea52 0543 orrs.w r5, r2, r3, lsl #1 - 8000a36: f47f aeeb bne.w 8000810 <__aeabi_dmul+0x1f8> - 8000a3a: e712 b.n 8000862 <__aeabi_dmul+0x24a> - -08000a3c <__gedf2>: - 8000a3c: f04f 3cff mov.w ip, #4294967295 - 8000a40: e006 b.n 8000a50 <__cmpdf2+0x4> - 8000a42: bf00 nop - -08000a44 <__ledf2>: - 8000a44: f04f 0c01 mov.w ip, #1 - 8000a48: e002 b.n 8000a50 <__cmpdf2+0x4> - 8000a4a: bf00 nop - -08000a4c <__cmpdf2>: - 8000a4c: f04f 0c01 mov.w ip, #1 - 8000a50: f84d cd04 str.w ip, [sp, #-4]! - 8000a54: ea4f 0c41 mov.w ip, r1, lsl #1 - 8000a58: ea7f 5c6c mvns.w ip, ip, asr #21 - 8000a5c: ea4f 0c43 mov.w ip, r3, lsl #1 - 8000a60: bf18 it ne - 8000a62: ea7f 5c6c mvnsne.w ip, ip, asr #21 - 8000a66: d01b beq.n 8000aa0 <__cmpdf2+0x54> - 8000a68: b001 add sp, #4 - 8000a6a: ea50 0c41 orrs.w ip, r0, r1, lsl #1 - 8000a6e: bf0c ite eq - 8000a70: ea52 0c43 orrseq.w ip, r2, r3, lsl #1 - 8000a74: ea91 0f03 teqne r1, r3 - 8000a78: bf02 ittt eq - 8000a7a: ea90 0f02 teqeq r0, r2 - 8000a7e: 2000 moveq r0, #0 - 8000a80: 4770 bxeq lr - 8000a82: f110 0f00 cmn.w r0, #0 - 8000a86: ea91 0f03 teq r1, r3 - 8000a8a: bf58 it pl - 8000a8c: 4299 cmppl r1, r3 - 8000a8e: bf08 it eq - 8000a90: 4290 cmpeq r0, r2 - 8000a92: bf2c ite cs - 8000a94: 17d8 asrcs r0, r3, #31 - 8000a96: ea6f 70e3 mvncc.w r0, r3, asr #31 - 8000a9a: f040 0001 orr.w r0, r0, #1 - 8000a9e: 4770 bx lr - 8000aa0: ea4f 0c41 mov.w ip, r1, lsl #1 - 8000aa4: ea7f 5c6c mvns.w ip, ip, asr #21 - 8000aa8: d102 bne.n 8000ab0 <__cmpdf2+0x64> - 8000aaa: ea50 3c01 orrs.w ip, r0, r1, lsl #12 - 8000aae: d107 bne.n 8000ac0 <__cmpdf2+0x74> - 8000ab0: ea4f 0c43 mov.w ip, r3, lsl #1 - 8000ab4: ea7f 5c6c mvns.w ip, ip, asr #21 - 8000ab8: d1d6 bne.n 8000a68 <__cmpdf2+0x1c> - 8000aba: ea52 3c03 orrs.w ip, r2, r3, lsl #12 - 8000abe: d0d3 beq.n 8000a68 <__cmpdf2+0x1c> - 8000ac0: f85d 0b04 ldr.w r0, [sp], #4 - 8000ac4: 4770 bx lr - 8000ac6: bf00 nop - -08000ac8 <__aeabi_cdrcmple>: - 8000ac8: 4684 mov ip, r0 - 8000aca: 4610 mov r0, r2 - 8000acc: 4662 mov r2, ip - 8000ace: 468c mov ip, r1 - 8000ad0: 4619 mov r1, r3 - 8000ad2: 4663 mov r3, ip - 8000ad4: e000 b.n 8000ad8 <__aeabi_cdcmpeq> - 8000ad6: bf00 nop - -08000ad8 <__aeabi_cdcmpeq>: - 8000ad8: b501 push {r0, lr} - 8000ada: f7ff ffb7 bl 8000a4c <__cmpdf2> - 8000ade: 2800 cmp r0, #0 - 8000ae0: bf48 it mi - 8000ae2: f110 0f00 cmnmi.w r0, #0 - 8000ae6: bd01 pop {r0, pc} - -08000ae8 <__aeabi_dcmpeq>: - 8000ae8: f84d ed08 str.w lr, [sp, #-8]! - 8000aec: f7ff fff4 bl 8000ad8 <__aeabi_cdcmpeq> - 8000af0: bf0c ite eq - 8000af2: 2001 moveq r0, #1 - 8000af4: 2000 movne r0, #0 - 8000af6: f85d fb08 ldr.w pc, [sp], #8 - 8000afa: bf00 nop - -08000afc <__aeabi_dcmplt>: - 8000afc: f84d ed08 str.w lr, [sp, #-8]! - 8000b00: f7ff ffea bl 8000ad8 <__aeabi_cdcmpeq> - 8000b04: bf34 ite cc - 8000b06: 2001 movcc r0, #1 - 8000b08: 2000 movcs r0, #0 - 8000b0a: f85d fb08 ldr.w pc, [sp], #8 - 8000b0e: bf00 nop - -08000b10 <__aeabi_dcmple>: - 8000b10: f84d ed08 str.w lr, [sp, #-8]! - 8000b14: f7ff ffe0 bl 8000ad8 <__aeabi_cdcmpeq> - 8000b18: bf94 ite ls - 8000b1a: 2001 movls r0, #1 - 8000b1c: 2000 movhi r0, #0 - 8000b1e: f85d fb08 ldr.w pc, [sp], #8 - 8000b22: bf00 nop - -08000b24 <__aeabi_dcmpge>: - 8000b24: f84d ed08 str.w lr, [sp, #-8]! - 8000b28: f7ff ffce bl 8000ac8 <__aeabi_cdrcmple> - 8000b2c: bf94 ite ls - 8000b2e: 2001 movls r0, #1 - 8000b30: 2000 movhi r0, #0 - 8000b32: f85d fb08 ldr.w pc, [sp], #8 - 8000b36: bf00 nop - -08000b38 <__aeabi_dcmpgt>: - 8000b38: f84d ed08 str.w lr, [sp, #-8]! - 8000b3c: f7ff ffc4 bl 8000ac8 <__aeabi_cdrcmple> - 8000b40: bf34 ite cc - 8000b42: 2001 movcc r0, #1 - 8000b44: 2000 movcs r0, #0 - 8000b46: f85d fb08 ldr.w pc, [sp], #8 - 8000b4a: bf00 nop - -08000b4c <__aeabi_dcmpun>: - 8000b4c: ea4f 0c41 mov.w ip, r1, lsl #1 - 8000b50: ea7f 5c6c mvns.w ip, ip, asr #21 - 8000b54: d102 bne.n 8000b5c <__aeabi_dcmpun+0x10> - 8000b56: ea50 3c01 orrs.w ip, r0, r1, lsl #12 - 8000b5a: d10a bne.n 8000b72 <__aeabi_dcmpun+0x26> - 8000b5c: ea4f 0c43 mov.w ip, r3, lsl #1 - 8000b60: ea7f 5c6c mvns.w ip, ip, asr #21 - 8000b64: d102 bne.n 8000b6c <__aeabi_dcmpun+0x20> - 8000b66: ea52 3c03 orrs.w ip, r2, r3, lsl #12 - 8000b6a: d102 bne.n 8000b72 <__aeabi_dcmpun+0x26> - 8000b6c: f04f 0000 mov.w r0, #0 - 8000b70: 4770 bx lr - 8000b72: f04f 0001 mov.w r0, #1 - 8000b76: 4770 bx lr - -08000b78 <__aeabi_d2iz>: - 8000b78: ea4f 0241 mov.w r2, r1, lsl #1 - 8000b7c: f512 1200 adds.w r2, r2, #2097152 ; 0x200000 - 8000b80: d215 bcs.n 8000bae <__aeabi_d2iz+0x36> - 8000b82: d511 bpl.n 8000ba8 <__aeabi_d2iz+0x30> - 8000b84: f46f 7378 mvn.w r3, #992 ; 0x3e0 - 8000b88: ebb3 5262 subs.w r2, r3, r2, asr #21 - 8000b8c: d912 bls.n 8000bb4 <__aeabi_d2iz+0x3c> - 8000b8e: ea4f 23c1 mov.w r3, r1, lsl #11 - 8000b92: f043 4300 orr.w r3, r3, #2147483648 ; 0x80000000 - 8000b96: ea43 5350 orr.w r3, r3, r0, lsr #21 - 8000b9a: f011 4f00 tst.w r1, #2147483648 ; 0x80000000 - 8000b9e: fa23 f002 lsr.w r0, r3, r2 - 8000ba2: bf18 it ne - 8000ba4: 4240 negne r0, r0 - 8000ba6: 4770 bx lr - 8000ba8: f04f 0000 mov.w r0, #0 - 8000bac: 4770 bx lr - 8000bae: ea50 3001 orrs.w r0, r0, r1, lsl #12 - 8000bb2: d105 bne.n 8000bc0 <__aeabi_d2iz+0x48> - 8000bb4: f011 4000 ands.w r0, r1, #2147483648 ; 0x80000000 - 8000bb8: bf08 it eq - 8000bba: f06f 4000 mvneq.w r0, #2147483648 ; 0x80000000 - 8000bbe: 4770 bx lr - 8000bc0: f04f 0000 mov.w r0, #0 - 8000bc4: 4770 bx lr - 8000bc6: bf00 nop - -08000bc8 <__aeabi_uldivmod>: - 8000bc8: b953 cbnz r3, 8000be0 <__aeabi_uldivmod+0x18> - 8000bca: b94a cbnz r2, 8000be0 <__aeabi_uldivmod+0x18> - 8000bcc: 2900 cmp r1, #0 - 8000bce: bf08 it eq - 8000bd0: 2800 cmpeq r0, #0 - 8000bd2: bf1c itt ne - 8000bd4: f04f 31ff movne.w r1, #4294967295 - 8000bd8: f04f 30ff movne.w r0, #4294967295 - 8000bdc: f000 b974 b.w 8000ec8 <__aeabi_idiv0> - 8000be0: f1ad 0c08 sub.w ip, sp, #8 - 8000be4: e96d ce04 strd ip, lr, [sp, #-16]! - 8000be8: f000 f806 bl 8000bf8 <__udivmoddi4> - 8000bec: f8dd e004 ldr.w lr, [sp, #4] - 8000bf0: e9dd 2302 ldrd r2, r3, [sp, #8] - 8000bf4: b004 add sp, #16 - 8000bf6: 4770 bx lr - -08000bf8 <__udivmoddi4>: - 8000bf8: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 8000bfc: 9d08 ldr r5, [sp, #32] - 8000bfe: 4604 mov r4, r0 - 8000c00: 468e mov lr, r1 - 8000c02: 2b00 cmp r3, #0 - 8000c04: d14d bne.n 8000ca2 <__udivmoddi4+0xaa> - 8000c06: 428a cmp r2, r1 - 8000c08: 4694 mov ip, r2 - 8000c0a: d969 bls.n 8000ce0 <__udivmoddi4+0xe8> - 8000c0c: fab2 f282 clz r2, r2 - 8000c10: b152 cbz r2, 8000c28 <__udivmoddi4+0x30> - 8000c12: fa01 f302 lsl.w r3, r1, r2 - 8000c16: f1c2 0120 rsb r1, r2, #32 - 8000c1a: fa20 f101 lsr.w r1, r0, r1 - 8000c1e: fa0c fc02 lsl.w ip, ip, r2 - 8000c22: ea41 0e03 orr.w lr, r1, r3 - 8000c26: 4094 lsls r4, r2 - 8000c28: ea4f 481c mov.w r8, ip, lsr #16 - 8000c2c: 0c21 lsrs r1, r4, #16 - 8000c2e: fbbe f6f8 udiv r6, lr, r8 - 8000c32: fa1f f78c uxth.w r7, ip - 8000c36: fb08 e316 mls r3, r8, r6, lr - 8000c3a: ea41 4303 orr.w r3, r1, r3, lsl #16 - 8000c3e: fb06 f107 mul.w r1, r6, r7 - 8000c42: 4299 cmp r1, r3 - 8000c44: d90a bls.n 8000c5c <__udivmoddi4+0x64> - 8000c46: eb1c 0303 adds.w r3, ip, r3 - 8000c4a: f106 30ff add.w r0, r6, #4294967295 - 8000c4e: f080 811f bcs.w 8000e90 <__udivmoddi4+0x298> - 8000c52: 4299 cmp r1, r3 - 8000c54: f240 811c bls.w 8000e90 <__udivmoddi4+0x298> - 8000c58: 3e02 subs r6, #2 - 8000c5a: 4463 add r3, ip - 8000c5c: 1a5b subs r3, r3, r1 - 8000c5e: b2a4 uxth r4, r4 - 8000c60: fbb3 f0f8 udiv r0, r3, r8 - 8000c64: fb08 3310 mls r3, r8, r0, r3 - 8000c68: ea44 4403 orr.w r4, r4, r3, lsl #16 - 8000c6c: fb00 f707 mul.w r7, r0, r7 - 8000c70: 42a7 cmp r7, r4 - 8000c72: d90a bls.n 8000c8a <__udivmoddi4+0x92> - 8000c74: eb1c 0404 adds.w r4, ip, r4 - 8000c78: f100 33ff add.w r3, r0, #4294967295 - 8000c7c: f080 810a bcs.w 8000e94 <__udivmoddi4+0x29c> - 8000c80: 42a7 cmp r7, r4 - 8000c82: f240 8107 bls.w 8000e94 <__udivmoddi4+0x29c> - 8000c86: 4464 add r4, ip - 8000c88: 3802 subs r0, #2 - 8000c8a: ea40 4006 orr.w r0, r0, r6, lsl #16 - 8000c8e: 1be4 subs r4, r4, r7 - 8000c90: 2600 movs r6, #0 - 8000c92: b11d cbz r5, 8000c9c <__udivmoddi4+0xa4> - 8000c94: 40d4 lsrs r4, r2 - 8000c96: 2300 movs r3, #0 - 8000c98: e9c5 4300 strd r4, r3, [r5] - 8000c9c: 4631 mov r1, r6 - 8000c9e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 8000ca2: 428b cmp r3, r1 - 8000ca4: d909 bls.n 8000cba <__udivmoddi4+0xc2> - 8000ca6: 2d00 cmp r5, #0 - 8000ca8: f000 80ef beq.w 8000e8a <__udivmoddi4+0x292> - 8000cac: 2600 movs r6, #0 - 8000cae: e9c5 0100 strd r0, r1, [r5] - 8000cb2: 4630 mov r0, r6 - 8000cb4: 4631 mov r1, r6 - 8000cb6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 8000cba: fab3 f683 clz r6, r3 - 8000cbe: 2e00 cmp r6, #0 - 8000cc0: d14a bne.n 8000d58 <__udivmoddi4+0x160> - 8000cc2: 428b cmp r3, r1 - 8000cc4: d302 bcc.n 8000ccc <__udivmoddi4+0xd4> - 8000cc6: 4282 cmp r2, r0 - 8000cc8: f200 80f9 bhi.w 8000ebe <__udivmoddi4+0x2c6> - 8000ccc: 1a84 subs r4, r0, r2 - 8000cce: eb61 0303 sbc.w r3, r1, r3 - 8000cd2: 2001 movs r0, #1 - 8000cd4: 469e mov lr, r3 - 8000cd6: 2d00 cmp r5, #0 - 8000cd8: d0e0 beq.n 8000c9c <__udivmoddi4+0xa4> - 8000cda: e9c5 4e00 strd r4, lr, [r5] - 8000cde: e7dd b.n 8000c9c <__udivmoddi4+0xa4> - 8000ce0: b902 cbnz r2, 8000ce4 <__udivmoddi4+0xec> - 8000ce2: deff udf #255 ; 0xff - 8000ce4: fab2 f282 clz r2, r2 - 8000ce8: 2a00 cmp r2, #0 - 8000cea: f040 8092 bne.w 8000e12 <__udivmoddi4+0x21a> - 8000cee: eba1 010c sub.w r1, r1, ip - 8000cf2: ea4f 471c mov.w r7, ip, lsr #16 - 8000cf6: fa1f fe8c uxth.w lr, ip - 8000cfa: 2601 movs r6, #1 - 8000cfc: 0c20 lsrs r0, r4, #16 - 8000cfe: fbb1 f3f7 udiv r3, r1, r7 - 8000d02: fb07 1113 mls r1, r7, r3, r1 - 8000d06: ea40 4101 orr.w r1, r0, r1, lsl #16 - 8000d0a: fb0e f003 mul.w r0, lr, r3 - 8000d0e: 4288 cmp r0, r1 - 8000d10: d908 bls.n 8000d24 <__udivmoddi4+0x12c> - 8000d12: eb1c 0101 adds.w r1, ip, r1 - 8000d16: f103 38ff add.w r8, r3, #4294967295 - 8000d1a: d202 bcs.n 8000d22 <__udivmoddi4+0x12a> - 8000d1c: 4288 cmp r0, r1 - 8000d1e: f200 80cb bhi.w 8000eb8 <__udivmoddi4+0x2c0> - 8000d22: 4643 mov r3, r8 - 8000d24: 1a09 subs r1, r1, r0 - 8000d26: b2a4 uxth r4, r4 - 8000d28: fbb1 f0f7 udiv r0, r1, r7 - 8000d2c: fb07 1110 mls r1, r7, r0, r1 - 8000d30: ea44 4401 orr.w r4, r4, r1, lsl #16 - 8000d34: fb0e fe00 mul.w lr, lr, r0 - 8000d38: 45a6 cmp lr, r4 - 8000d3a: d908 bls.n 8000d4e <__udivmoddi4+0x156> - 8000d3c: eb1c 0404 adds.w r4, ip, r4 - 8000d40: f100 31ff add.w r1, r0, #4294967295 - 8000d44: d202 bcs.n 8000d4c <__udivmoddi4+0x154> - 8000d46: 45a6 cmp lr, r4 - 8000d48: f200 80bb bhi.w 8000ec2 <__udivmoddi4+0x2ca> - 8000d4c: 4608 mov r0, r1 - 8000d4e: eba4 040e sub.w r4, r4, lr - 8000d52: ea40 4003 orr.w r0, r0, r3, lsl #16 - 8000d56: e79c b.n 8000c92 <__udivmoddi4+0x9a> - 8000d58: f1c6 0720 rsb r7, r6, #32 - 8000d5c: 40b3 lsls r3, r6 - 8000d5e: fa22 fc07 lsr.w ip, r2, r7 - 8000d62: ea4c 0c03 orr.w ip, ip, r3 - 8000d66: fa20 f407 lsr.w r4, r0, r7 - 8000d6a: fa01 f306 lsl.w r3, r1, r6 - 8000d6e: 431c orrs r4, r3 - 8000d70: 40f9 lsrs r1, r7 - 8000d72: ea4f 491c mov.w r9, ip, lsr #16 - 8000d76: fa00 f306 lsl.w r3, r0, r6 - 8000d7a: fbb1 f8f9 udiv r8, r1, r9 - 8000d7e: 0c20 lsrs r0, r4, #16 - 8000d80: fa1f fe8c uxth.w lr, ip - 8000d84: fb09 1118 mls r1, r9, r8, r1 - 8000d88: ea40 4101 orr.w r1, r0, r1, lsl #16 - 8000d8c: fb08 f00e mul.w r0, r8, lr - 8000d90: 4288 cmp r0, r1 - 8000d92: fa02 f206 lsl.w r2, r2, r6 - 8000d96: d90b bls.n 8000db0 <__udivmoddi4+0x1b8> - 8000d98: eb1c 0101 adds.w r1, ip, r1 - 8000d9c: f108 3aff add.w sl, r8, #4294967295 - 8000da0: f080 8088 bcs.w 8000eb4 <__udivmoddi4+0x2bc> - 8000da4: 4288 cmp r0, r1 - 8000da6: f240 8085 bls.w 8000eb4 <__udivmoddi4+0x2bc> - 8000daa: f1a8 0802 sub.w r8, r8, #2 - 8000dae: 4461 add r1, ip - 8000db0: 1a09 subs r1, r1, r0 - 8000db2: b2a4 uxth r4, r4 - 8000db4: fbb1 f0f9 udiv r0, r1, r9 - 8000db8: fb09 1110 mls r1, r9, r0, r1 - 8000dbc: ea44 4101 orr.w r1, r4, r1, lsl #16 - 8000dc0: fb00 fe0e mul.w lr, r0, lr - 8000dc4: 458e cmp lr, r1 - 8000dc6: d908 bls.n 8000dda <__udivmoddi4+0x1e2> - 8000dc8: eb1c 0101 adds.w r1, ip, r1 - 8000dcc: f100 34ff add.w r4, r0, #4294967295 - 8000dd0: d26c bcs.n 8000eac <__udivmoddi4+0x2b4> - 8000dd2: 458e cmp lr, r1 - 8000dd4: d96a bls.n 8000eac <__udivmoddi4+0x2b4> - 8000dd6: 3802 subs r0, #2 - 8000dd8: 4461 add r1, ip - 8000dda: ea40 4008 orr.w r0, r0, r8, lsl #16 - 8000dde: fba0 9402 umull r9, r4, r0, r2 - 8000de2: eba1 010e sub.w r1, r1, lr - 8000de6: 42a1 cmp r1, r4 - 8000de8: 46c8 mov r8, r9 - 8000dea: 46a6 mov lr, r4 - 8000dec: d356 bcc.n 8000e9c <__udivmoddi4+0x2a4> - 8000dee: d053 beq.n 8000e98 <__udivmoddi4+0x2a0> - 8000df0: b15d cbz r5, 8000e0a <__udivmoddi4+0x212> - 8000df2: ebb3 0208 subs.w r2, r3, r8 - 8000df6: eb61 010e sbc.w r1, r1, lr - 8000dfa: fa01 f707 lsl.w r7, r1, r7 - 8000dfe: fa22 f306 lsr.w r3, r2, r6 - 8000e02: 40f1 lsrs r1, r6 - 8000e04: 431f orrs r7, r3 - 8000e06: e9c5 7100 strd r7, r1, [r5] - 8000e0a: 2600 movs r6, #0 - 8000e0c: 4631 mov r1, r6 - 8000e0e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 8000e12: f1c2 0320 rsb r3, r2, #32 - 8000e16: 40d8 lsrs r0, r3 - 8000e18: fa0c fc02 lsl.w ip, ip, r2 - 8000e1c: fa21 f303 lsr.w r3, r1, r3 - 8000e20: 4091 lsls r1, r2 - 8000e22: 4301 orrs r1, r0 - 8000e24: ea4f 471c mov.w r7, ip, lsr #16 - 8000e28: fa1f fe8c uxth.w lr, ip - 8000e2c: fbb3 f0f7 udiv r0, r3, r7 - 8000e30: fb07 3610 mls r6, r7, r0, r3 - 8000e34: 0c0b lsrs r3, r1, #16 - 8000e36: ea43 4306 orr.w r3, r3, r6, lsl #16 - 8000e3a: fb00 f60e mul.w r6, r0, lr - 8000e3e: 429e cmp r6, r3 - 8000e40: fa04 f402 lsl.w r4, r4, r2 - 8000e44: d908 bls.n 8000e58 <__udivmoddi4+0x260> - 8000e46: eb1c 0303 adds.w r3, ip, r3 - 8000e4a: f100 38ff add.w r8, r0, #4294967295 - 8000e4e: d22f bcs.n 8000eb0 <__udivmoddi4+0x2b8> - 8000e50: 429e cmp r6, r3 - 8000e52: d92d bls.n 8000eb0 <__udivmoddi4+0x2b8> - 8000e54: 3802 subs r0, #2 - 8000e56: 4463 add r3, ip - 8000e58: 1b9b subs r3, r3, r6 - 8000e5a: b289 uxth r1, r1 - 8000e5c: fbb3 f6f7 udiv r6, r3, r7 - 8000e60: fb07 3316 mls r3, r7, r6, r3 - 8000e64: ea41 4103 orr.w r1, r1, r3, lsl #16 - 8000e68: fb06 f30e mul.w r3, r6, lr - 8000e6c: 428b cmp r3, r1 - 8000e6e: d908 bls.n 8000e82 <__udivmoddi4+0x28a> - 8000e70: eb1c 0101 adds.w r1, ip, r1 - 8000e74: f106 38ff add.w r8, r6, #4294967295 - 8000e78: d216 bcs.n 8000ea8 <__udivmoddi4+0x2b0> - 8000e7a: 428b cmp r3, r1 - 8000e7c: d914 bls.n 8000ea8 <__udivmoddi4+0x2b0> - 8000e7e: 3e02 subs r6, #2 - 8000e80: 4461 add r1, ip - 8000e82: 1ac9 subs r1, r1, r3 - 8000e84: ea46 4600 orr.w r6, r6, r0, lsl #16 - 8000e88: e738 b.n 8000cfc <__udivmoddi4+0x104> - 8000e8a: 462e mov r6, r5 - 8000e8c: 4628 mov r0, r5 - 8000e8e: e705 b.n 8000c9c <__udivmoddi4+0xa4> - 8000e90: 4606 mov r6, r0 - 8000e92: e6e3 b.n 8000c5c <__udivmoddi4+0x64> - 8000e94: 4618 mov r0, r3 - 8000e96: e6f8 b.n 8000c8a <__udivmoddi4+0x92> - 8000e98: 454b cmp r3, r9 - 8000e9a: d2a9 bcs.n 8000df0 <__udivmoddi4+0x1f8> - 8000e9c: ebb9 0802 subs.w r8, r9, r2 - 8000ea0: eb64 0e0c sbc.w lr, r4, ip - 8000ea4: 3801 subs r0, #1 - 8000ea6: e7a3 b.n 8000df0 <__udivmoddi4+0x1f8> - 8000ea8: 4646 mov r6, r8 - 8000eaa: e7ea b.n 8000e82 <__udivmoddi4+0x28a> - 8000eac: 4620 mov r0, r4 - 8000eae: e794 b.n 8000dda <__udivmoddi4+0x1e2> - 8000eb0: 4640 mov r0, r8 - 8000eb2: e7d1 b.n 8000e58 <__udivmoddi4+0x260> - 8000eb4: 46d0 mov r8, sl - 8000eb6: e77b b.n 8000db0 <__udivmoddi4+0x1b8> - 8000eb8: 3b02 subs r3, #2 - 8000eba: 4461 add r1, ip - 8000ebc: e732 b.n 8000d24 <__udivmoddi4+0x12c> - 8000ebe: 4630 mov r0, r6 - 8000ec0: e709 b.n 8000cd6 <__udivmoddi4+0xde> - 8000ec2: 4464 add r4, ip - 8000ec4: 3802 subs r0, #2 - 8000ec6: e742 b.n 8000d4e <__udivmoddi4+0x156> - -08000ec8 <__aeabi_idiv0>: - 8000ec8: 4770 bx lr - 8000eca: bf00 nop - -08000ecc
: -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - 8000ecc: b580 push {r7, lr} - 8000ece: b084 sub sp, #16 - 8000ed0: af00 add r7, sp, #0 - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - 8000ed2: f000 fd57 bl 8001984 - /* USER CODE BEGIN Init */ - - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - 8000ed6: f000 f857 bl 8000f88 - /* USER CODE BEGIN SysInit */ - - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - 8000eda: f000 f971 bl 80011c0 - MX_LWIP_Init(); - 8000ede: f003 fbc7 bl 8004670 - MX_FMC_Init(); - 8000ee2: f000 f90b bl 80010fc - MX_TIM3_Init(); - 8000ee6: f000 f8bb bl 8001060 - /* USER CODE BEGIN 2 */ - struct udp_pcb * pcb = udp_new(); - 8000eea: f00b fd79 bl 800c9e0 - 8000eee: 60f8 str r0, [r7, #12] - sock_init(pcb); - 8000ef0: 68f8 ldr r0, [r7, #12] - 8000ef2: f000 fa0b bl 800130c - memset(msg, 0, sizeof msg); - 8000ef6: f44f 62af mov.w r2, #1400 ; 0x578 - 8000efa: 2100 movs r1, #0 - 8000efc: 481e ldr r0, [pc, #120] ; (8000f78 ) - 8000efe: f010 f8cb bl 8011098 - msg[0] = 1; - 8000f02: 4b1d ldr r3, [pc, #116] ; (8000f78 ) - 8000f04: 2201 movs r2, #1 - 8000f06: 701a strb r2, [r3, #0] - msg[1] = 2; - 8000f08: 4b1b ldr r3, [pc, #108] ; (8000f78 ) - 8000f0a: 2202 movs r2, #2 - 8000f0c: 705a strb r2, [r3, #1] - msg[2] = 3; - 8000f0e: 4b1a ldr r3, [pc, #104] ; (8000f78 ) - 8000f10: 2203 movs r2, #3 - 8000f12: 709a strb r2, [r3, #2] - msg[3] = 4; - 8000f14: 4b18 ldr r3, [pc, #96] ; (8000f78 ) - 8000f16: 2204 movs r2, #4 - 8000f18: 70da strb r2, [r3, #3] - struct pbuf *p = pbuf_alloc(0, sizeof msg, PBUF_RAM); - 8000f1a: f44f 7220 mov.w r2, #640 ; 0x280 - 8000f1e: f44f 61af mov.w r1, #1400 ; 0x578 - 8000f22: 2000 movs r0, #0 - 8000f24: f005 f864 bl 8005ff0 - 8000f28: 60b8 str r0, [r7, #8] - uint32_t br_addr = ipaddr_addr("10.1.1.255"); - 8000f2a: 4814 ldr r0, [pc, #80] ; (8000f7c ) - 8000f2c: f00f f805 bl 800ff3a - 8000f30: 4603 mov r3, r0 - 8000f32: 603b str r3, [r7, #0] - u16_t br_port = 50000U; - 8000f34: f24c 3350 movw r3, #50000 ; 0xc350 - 8000f38: 80fb strh r3, [r7, #6] - set_pbuf_params(p, sizeof msg); - 8000f3a: f44f 61af mov.w r1, #1400 ; 0x578 - 8000f3e: 68b8 ldr r0, [r7, #8] - 8000f40: f000 f9c8 bl 80012d4 - - // timer start - if (HAL_TIM_Base_Start_IT(&htim3) != HAL_OK) - 8000f44: 480e ldr r0, [pc, #56] ; (8000f80 ) - 8000f46: f002 fe49 bl 8003bdc - 8000f4a: 4603 mov r3, r0 - 8000f4c: 2b00 cmp r3, #0 - 8000f4e: d001 beq.n 8000f54 - { - /* Starting Error */ - Error_Handler(); - 8000f50: f000 fa72 bl 8001438 - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - MX_LWIP_Process(); - 8000f54: f003 fbfa bl 800474c - if (br_counter > 100) - 8000f58: 4b0a ldr r3, [pc, #40] ; (8000f84 ) - 8000f5a: 681b ldr r3, [r3, #0] - 8000f5c: 2b64 cmp r3, #100 ; 0x64 - 8000f5e: d9f9 bls.n 8000f54 - { - err_t errok = udp_sendto(pcb, p, (ip_addr_t*)&br_addr, br_port); - 8000f60: 88fb ldrh r3, [r7, #6] - 8000f62: 463a mov r2, r7 - 8000f64: 68b9 ldr r1, [r7, #8] - 8000f66: 68f8 ldr r0, [r7, #12] - 8000f68: f00b fa2c bl 800c3c4 - 8000f6c: 4603 mov r3, r0 - 8000f6e: 717b strb r3, [r7, #5] - br_counter = 0; - 8000f70: 4b04 ldr r3, [pc, #16] ; (8000f84 ) - 8000f72: 2200 movs r2, #0 - 8000f74: 601a str r2, [r3, #0] - MX_LWIP_Process(); - 8000f76: e7ed b.n 8000f54 - 8000f78: 20000a98 .word 0x20000a98 - 8000f7c: 08015ba0 .word 0x08015ba0 - 8000f80: 200009fc .word 0x200009fc - 8000f84: 20000a94 .word 0x20000a94 - -08000f88 : -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - 8000f88: b580 push {r7, lr} - 8000f8a: b094 sub sp, #80 ; 0x50 - 8000f8c: af00 add r7, sp, #0 - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - 8000f8e: f107 0320 add.w r3, r7, #32 - 8000f92: 2230 movs r2, #48 ; 0x30 - 8000f94: 2100 movs r1, #0 - 8000f96: 4618 mov r0, r3 - 8000f98: f010 f87e bl 8011098 - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - 8000f9c: f107 030c add.w r3, r7, #12 - 8000fa0: 2200 movs r2, #0 - 8000fa2: 601a str r2, [r3, #0] - 8000fa4: 605a str r2, [r3, #4] - 8000fa6: 609a str r2, [r3, #8] - 8000fa8: 60da str r2, [r3, #12] - 8000faa: 611a str r2, [r3, #16] - - /** Configure the main internal regulator output voltage - */ - __HAL_RCC_PWR_CLK_ENABLE(); - 8000fac: 2300 movs r3, #0 - 8000fae: 60bb str r3, [r7, #8] - 8000fb0: 4b29 ldr r3, [pc, #164] ; (8001058 ) - 8000fb2: 6c1b ldr r3, [r3, #64] ; 0x40 - 8000fb4: 4a28 ldr r2, [pc, #160] ; (8001058 ) - 8000fb6: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 - 8000fba: 6413 str r3, [r2, #64] ; 0x40 - 8000fbc: 4b26 ldr r3, [pc, #152] ; (8001058 ) - 8000fbe: 6c1b ldr r3, [r3, #64] ; 0x40 - 8000fc0: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 - 8000fc4: 60bb str r3, [r7, #8] - 8000fc6: 68bb ldr r3, [r7, #8] - __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3); - 8000fc8: 2300 movs r3, #0 - 8000fca: 607b str r3, [r7, #4] - 8000fcc: 4b23 ldr r3, [pc, #140] ; (800105c ) - 8000fce: 681b ldr r3, [r3, #0] - 8000fd0: f423 4340 bic.w r3, r3, #49152 ; 0xc000 - 8000fd4: 4a21 ldr r2, [pc, #132] ; (800105c ) - 8000fd6: f443 4380 orr.w r3, r3, #16384 ; 0x4000 - 8000fda: 6013 str r3, [r2, #0] - 8000fdc: 4b1f ldr r3, [pc, #124] ; (800105c ) - 8000fde: 681b ldr r3, [r3, #0] - 8000fe0: f403 4340 and.w r3, r3, #49152 ; 0xc000 - 8000fe4: 607b str r3, [r7, #4] - 8000fe6: 687b ldr r3, [r7, #4] - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; - 8000fe8: 2302 movs r3, #2 - 8000fea: 623b str r3, [r7, #32] - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - 8000fec: 2301 movs r3, #1 - 8000fee: 62fb str r3, [r7, #44] ; 0x2c - RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; - 8000ff0: 2310 movs r3, #16 - 8000ff2: 633b str r3, [r7, #48] ; 0x30 - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - 8000ff4: 2302 movs r3, #2 - 8000ff6: 63bb str r3, [r7, #56] ; 0x38 - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; - 8000ff8: 2300 movs r3, #0 - 8000ffa: 63fb str r3, [r7, #60] ; 0x3c - RCC_OscInitStruct.PLL.PLLM = 8; - 8000ffc: 2308 movs r3, #8 - 8000ffe: 643b str r3, [r7, #64] ; 0x40 - RCC_OscInitStruct.PLL.PLLN = 100; - 8001000: 2364 movs r3, #100 ; 0x64 - 8001002: 647b str r3, [r7, #68] ; 0x44 - RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; - 8001004: 2302 movs r3, #2 - 8001006: 64bb str r3, [r7, #72] ; 0x48 - RCC_OscInitStruct.PLL.PLLQ = 4; - 8001008: 2304 movs r3, #4 - 800100a: 64fb str r3, [r7, #76] ; 0x4c - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - 800100c: f107 0320 add.w r3, r7, #32 - 8001010: 4618 mov r0, r3 - 8001012: f002 f91b bl 800324c - 8001016: 4603 mov r3, r0 - 8001018: 2b00 cmp r3, #0 - 800101a: d001 beq.n 8001020 - { - Error_Handler(); - 800101c: f000 fa0c bl 8001438 - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - 8001020: 230f movs r3, #15 - 8001022: 60fb str r3, [r7, #12] - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - 8001024: 2302 movs r3, #2 - 8001026: 613b str r3, [r7, #16] - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - 8001028: 2300 movs r3, #0 - 800102a: 617b str r3, [r7, #20] - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; - 800102c: f44f 53a0 mov.w r3, #5120 ; 0x1400 - 8001030: 61bb str r3, [r7, #24] - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; - 8001032: f44f 5380 mov.w r3, #4096 ; 0x1000 - 8001036: 61fb str r3, [r7, #28] - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) - 8001038: f107 030c add.w r3, r7, #12 - 800103c: 2103 movs r1, #3 - 800103e: 4618 mov r0, r3 - 8001040: f002 fb7c bl 800373c - 8001044: 4603 mov r3, r0 - 8001046: 2b00 cmp r3, #0 - 8001048: d001 beq.n 800104e - { - Error_Handler(); - 800104a: f000 f9f5 bl 8001438 - } -} - 800104e: bf00 nop - 8001050: 3750 adds r7, #80 ; 0x50 - 8001052: 46bd mov sp, r7 - 8001054: bd80 pop {r7, pc} - 8001056: bf00 nop - 8001058: 40023800 .word 0x40023800 - 800105c: 40007000 .word 0x40007000 - -08001060 : - * @brief TIM3 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM3_Init(void) -{ - 8001060: b580 push {r7, lr} - 8001062: b086 sub sp, #24 - 8001064: af00 add r7, sp, #0 - - /* USER CODE BEGIN TIM3_Init 0 */ - - /* USER CODE END TIM3_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - 8001066: f107 0308 add.w r3, r7, #8 - 800106a: 2200 movs r2, #0 - 800106c: 601a str r2, [r3, #0] - 800106e: 605a str r2, [r3, #4] - 8001070: 609a str r2, [r3, #8] - 8001072: 60da str r2, [r3, #12] - TIM_MasterConfigTypeDef sMasterConfig = {0}; - 8001074: 463b mov r3, r7 - 8001076: 2200 movs r2, #0 - 8001078: 601a str r2, [r3, #0] - 800107a: 605a str r2, [r3, #4] - - /* USER CODE BEGIN TIM3_Init 1 */ - - /* USER CODE END TIM3_Init 1 */ - htim3.Instance = TIM3; - 800107c: 4b1d ldr r3, [pc, #116] ; (80010f4 ) - 800107e: 4a1e ldr r2, [pc, #120] ; (80010f8 ) - 8001080: 601a str r2, [r3, #0] - htim3.Init.Prescaler = 22; - 8001082: 4b1c ldr r3, [pc, #112] ; (80010f4 ) - 8001084: 2216 movs r2, #22 - 8001086: 605a str r2, [r3, #4] - htim3.Init.CounterMode = TIM_COUNTERMODE_UP; - 8001088: 4b1a ldr r3, [pc, #104] ; (80010f4 ) - 800108a: 2200 movs r2, #0 - 800108c: 609a str r2, [r3, #8] - htim3.Init.Period = 2170; - 800108e: 4b19 ldr r3, [pc, #100] ; (80010f4 ) - 8001090: f640 027a movw r2, #2170 ; 0x87a - 8001094: 60da str r2, [r3, #12] - htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - 8001096: 4b17 ldr r3, [pc, #92] ; (80010f4 ) - 8001098: 2200 movs r2, #0 - 800109a: 611a str r2, [r3, #16] - htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - 800109c: 4b15 ldr r3, [pc, #84] ; (80010f4 ) - 800109e: 2200 movs r2, #0 - 80010a0: 619a str r2, [r3, #24] - if (HAL_TIM_Base_Init(&htim3) != HAL_OK) - 80010a2: 4814 ldr r0, [pc, #80] ; (80010f4 ) - 80010a4: f002 fd4a bl 8003b3c - 80010a8: 4603 mov r3, r0 - 80010aa: 2b00 cmp r3, #0 - 80010ac: d001 beq.n 80010b2 - { - Error_Handler(); - 80010ae: f000 f9c3 bl 8001438 - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - 80010b2: f44f 5380 mov.w r3, #4096 ; 0x1000 - 80010b6: 60bb str r3, [r7, #8] - if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) - 80010b8: f107 0308 add.w r3, r7, #8 - 80010bc: 4619 mov r1, r3 - 80010be: 480d ldr r0, [pc, #52] ; (80010f4 ) - 80010c0: f002 ff04 bl 8003ecc - 80010c4: 4603 mov r3, r0 - 80010c6: 2b00 cmp r3, #0 - 80010c8: d001 beq.n 80010ce - { - Error_Handler(); - 80010ca: f000 f9b5 bl 8001438 - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - 80010ce: 2300 movs r3, #0 - 80010d0: 603b str r3, [r7, #0] - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - 80010d2: 2300 movs r3, #0 - 80010d4: 607b str r3, [r7, #4] - if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) - 80010d6: 463b mov r3, r7 - 80010d8: 4619 mov r1, r3 - 80010da: 4806 ldr r0, [pc, #24] ; (80010f4 ) - 80010dc: f003 f92a bl 8004334 - 80010e0: 4603 mov r3, r0 - 80010e2: 2b00 cmp r3, #0 - 80010e4: d001 beq.n 80010ea - { - Error_Handler(); - 80010e6: f000 f9a7 bl 8001438 - } - /* USER CODE BEGIN TIM3_Init 2 */ - - /* USER CODE END TIM3_Init 2 */ - -} - 80010ea: bf00 nop - 80010ec: 3718 adds r7, #24 - 80010ee: 46bd mov sp, r7 - 80010f0: bd80 pop {r7, pc} - 80010f2: bf00 nop - 80010f4: 200009fc .word 0x200009fc - 80010f8: 40000400 .word 0x40000400 - -080010fc : - -/* FMC initialization function */ -static void MX_FMC_Init(void) -{ - 80010fc: b580 push {r7, lr} - 80010fe: b088 sub sp, #32 - 8001100: af00 add r7, sp, #0 - - /* USER CODE BEGIN FMC_Init 0 */ - - /* USER CODE END FMC_Init 0 */ - - FMC_NORSRAM_TimingTypeDef Timing = {0}; - 8001102: 1d3b adds r3, r7, #4 - 8001104: 2200 movs r2, #0 - 8001106: 601a str r2, [r3, #0] - 8001108: 605a str r2, [r3, #4] - 800110a: 609a str r2, [r3, #8] - 800110c: 60da str r2, [r3, #12] - 800110e: 611a str r2, [r3, #16] - 8001110: 615a str r2, [r3, #20] - 8001112: 619a str r2, [r3, #24] - - /* USER CODE END FMC_Init 1 */ - - /** Perform the SRAM1 memory initialization sequence - */ - hsram1.Instance = FMC_NORSRAM_DEVICE; - 8001114: 4b28 ldr r3, [pc, #160] ; (80011b8 ) - 8001116: f04f 4220 mov.w r2, #2684354560 ; 0xa0000000 - 800111a: 601a str r2, [r3, #0] - hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE; - 800111c: 4b26 ldr r3, [pc, #152] ; (80011b8 ) - 800111e: 4a27 ldr r2, [pc, #156] ; (80011bc ) - 8001120: 605a str r2, [r3, #4] - /* hsram1.Init */ - hsram1.Init.NSBank = FMC_NORSRAM_BANK1; - 8001122: 4b25 ldr r3, [pc, #148] ; (80011b8 ) - 8001124: 2200 movs r2, #0 - 8001126: 609a str r2, [r3, #8] - hsram1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE; - 8001128: 4b23 ldr r3, [pc, #140] ; (80011b8 ) - 800112a: 2200 movs r2, #0 - 800112c: 60da str r2, [r3, #12] - hsram1.Init.MemoryType = FMC_MEMORY_TYPE_SRAM; - 800112e: 4b22 ldr r3, [pc, #136] ; (80011b8 ) - 8001130: 2200 movs r2, #0 - 8001132: 611a str r2, [r3, #16] - hsram1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16; - 8001134: 4b20 ldr r3, [pc, #128] ; (80011b8 ) - 8001136: 2210 movs r2, #16 - 8001138: 615a str r2, [r3, #20] - hsram1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE; - 800113a: 4b1f ldr r3, [pc, #124] ; (80011b8 ) - 800113c: 2200 movs r2, #0 - 800113e: 619a str r2, [r3, #24] - hsram1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW; - 8001140: 4b1d ldr r3, [pc, #116] ; (80011b8 ) - 8001142: 2200 movs r2, #0 - 8001144: 61da str r2, [r3, #28] - hsram1.Init.WrapMode = FMC_WRAP_MODE_DISABLE; - 8001146: 4b1c ldr r3, [pc, #112] ; (80011b8 ) - 8001148: 2200 movs r2, #0 - 800114a: 621a str r2, [r3, #32] - hsram1.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS; - 800114c: 4b1a ldr r3, [pc, #104] ; (80011b8 ) - 800114e: 2200 movs r2, #0 - 8001150: 625a str r2, [r3, #36] ; 0x24 - hsram1.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE; - 8001152: 4b19 ldr r3, [pc, #100] ; (80011b8 ) - 8001154: f44f 5280 mov.w r2, #4096 ; 0x1000 - 8001158: 629a str r2, [r3, #40] ; 0x28 - hsram1.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE; - 800115a: 4b17 ldr r3, [pc, #92] ; (80011b8 ) - 800115c: 2200 movs r2, #0 - 800115e: 62da str r2, [r3, #44] ; 0x2c - hsram1.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE; - 8001160: 4b15 ldr r3, [pc, #84] ; (80011b8 ) - 8001162: 2200 movs r2, #0 - 8001164: 631a str r2, [r3, #48] ; 0x30 - hsram1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE; - 8001166: 4b14 ldr r3, [pc, #80] ; (80011b8 ) - 8001168: 2200 movs r2, #0 - 800116a: 635a str r2, [r3, #52] ; 0x34 - hsram1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE; - 800116c: 4b12 ldr r3, [pc, #72] ; (80011b8 ) - 800116e: 2200 movs r2, #0 - 8001170: 639a str r2, [r3, #56] ; 0x38 - hsram1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY; - 8001172: 4b11 ldr r3, [pc, #68] ; (80011b8 ) - 8001174: 2200 movs r2, #0 - 8001176: 63da str r2, [r3, #60] ; 0x3c - hsram1.Init.PageSize = FMC_PAGE_SIZE_NONE; - 8001178: 4b0f ldr r3, [pc, #60] ; (80011b8 ) - 800117a: 2200 movs r2, #0 - 800117c: 645a str r2, [r3, #68] ; 0x44 - /* Timing */ - Timing.AddressSetupTime = 15; - 800117e: 230f movs r3, #15 - 8001180: 607b str r3, [r7, #4] - Timing.AddressHoldTime = 15; - 8001182: 230f movs r3, #15 - 8001184: 60bb str r3, [r7, #8] - Timing.DataSetupTime = 255; - 8001186: 23ff movs r3, #255 ; 0xff - 8001188: 60fb str r3, [r7, #12] - Timing.BusTurnAroundDuration = 15; - 800118a: 230f movs r3, #15 - 800118c: 613b str r3, [r7, #16] - Timing.CLKDivision = 16; - 800118e: 2310 movs r3, #16 - 8001190: 617b str r3, [r7, #20] - Timing.DataLatency = 17; - 8001192: 2311 movs r3, #17 - 8001194: 61bb str r3, [r7, #24] - Timing.AccessMode = FMC_ACCESS_MODE_A; - 8001196: 2300 movs r3, #0 - 8001198: 61fb str r3, [r7, #28] - /* ExtTiming */ - - if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK) - 800119a: 1d3b adds r3, r7, #4 - 800119c: 2200 movs r2, #0 - 800119e: 4619 mov r1, r3 - 80011a0: 4805 ldr r0, [pc, #20] ; (80011b8 ) - 80011a2: f002 fc83 bl 8003aac - 80011a6: 4603 mov r3, r0 - 80011a8: 2b00 cmp r3, #0 - 80011aa: d001 beq.n 80011b0 - { - Error_Handler( ); - 80011ac: f000 f944 bl 8001438 - } - - /* USER CODE BEGIN FMC_Init 2 */ - - /* USER CODE END FMC_Init 2 */ -} - 80011b0: bf00 nop - 80011b2: 3720 adds r7, #32 - 80011b4: 46bd mov sp, r7 - 80011b6: bd80 pop {r7, pc} - 80011b8: 20000a44 .word 0x20000a44 - 80011bc: a0000104 .word 0xa0000104 - -080011c0 : - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - 80011c0: b580 push {r7, lr} - 80011c2: b08c sub sp, #48 ; 0x30 - 80011c4: af00 add r7, sp, #0 - GPIO_InitTypeDef GPIO_InitStruct = {0}; - 80011c6: f107 031c add.w r3, r7, #28 - 80011ca: 2200 movs r2, #0 - 80011cc: 601a str r2, [r3, #0] - 80011ce: 605a str r2, [r3, #4] - 80011d0: 609a str r2, [r3, #8] - 80011d2: 60da str r2, [r3, #12] - 80011d4: 611a str r2, [r3, #16] - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOE_CLK_ENABLE(); - 80011d6: 2300 movs r3, #0 - 80011d8: 61bb str r3, [r7, #24] - 80011da: 4b3c ldr r3, [pc, #240] ; (80012cc ) - 80011dc: 6b1b ldr r3, [r3, #48] ; 0x30 - 80011de: 4a3b ldr r2, [pc, #236] ; (80012cc ) - 80011e0: f043 0310 orr.w r3, r3, #16 - 80011e4: 6313 str r3, [r2, #48] ; 0x30 - 80011e6: 4b39 ldr r3, [pc, #228] ; (80012cc ) - 80011e8: 6b1b ldr r3, [r3, #48] ; 0x30 - 80011ea: f003 0310 and.w r3, r3, #16 - 80011ee: 61bb str r3, [r7, #24] - 80011f0: 69bb ldr r3, [r7, #24] - __HAL_RCC_GPIOC_CLK_ENABLE(); - 80011f2: 2300 movs r3, #0 - 80011f4: 617b str r3, [r7, #20] - 80011f6: 4b35 ldr r3, [pc, #212] ; (80012cc ) - 80011f8: 6b1b ldr r3, [r3, #48] ; 0x30 - 80011fa: 4a34 ldr r2, [pc, #208] ; (80012cc ) - 80011fc: f043 0304 orr.w r3, r3, #4 - 8001200: 6313 str r3, [r2, #48] ; 0x30 - 8001202: 4b32 ldr r3, [pc, #200] ; (80012cc ) - 8001204: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001206: f003 0304 and.w r3, r3, #4 - 800120a: 617b str r3, [r7, #20] - 800120c: 697b ldr r3, [r7, #20] - __HAL_RCC_GPIOF_CLK_ENABLE(); - 800120e: 2300 movs r3, #0 - 8001210: 613b str r3, [r7, #16] - 8001212: 4b2e ldr r3, [pc, #184] ; (80012cc ) - 8001214: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001216: 4a2d ldr r2, [pc, #180] ; (80012cc ) - 8001218: f043 0320 orr.w r3, r3, #32 - 800121c: 6313 str r3, [r2, #48] ; 0x30 - 800121e: 4b2b ldr r3, [pc, #172] ; (80012cc ) - 8001220: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001222: f003 0320 and.w r3, r3, #32 - 8001226: 613b str r3, [r7, #16] - 8001228: 693b ldr r3, [r7, #16] - __HAL_RCC_GPIOA_CLK_ENABLE(); - 800122a: 2300 movs r3, #0 - 800122c: 60fb str r3, [r7, #12] - 800122e: 4b27 ldr r3, [pc, #156] ; (80012cc ) - 8001230: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001232: 4a26 ldr r2, [pc, #152] ; (80012cc ) - 8001234: f043 0301 orr.w r3, r3, #1 - 8001238: 6313 str r3, [r2, #48] ; 0x30 - 800123a: 4b24 ldr r3, [pc, #144] ; (80012cc ) - 800123c: 6b1b ldr r3, [r3, #48] ; 0x30 - 800123e: f003 0301 and.w r3, r3, #1 - 8001242: 60fb str r3, [r7, #12] - 8001244: 68fb ldr r3, [r7, #12] - __HAL_RCC_GPIOG_CLK_ENABLE(); - 8001246: 2300 movs r3, #0 - 8001248: 60bb str r3, [r7, #8] - 800124a: 4b20 ldr r3, [pc, #128] ; (80012cc ) - 800124c: 6b1b ldr r3, [r3, #48] ; 0x30 - 800124e: 4a1f ldr r2, [pc, #124] ; (80012cc ) - 8001250: f043 0340 orr.w r3, r3, #64 ; 0x40 - 8001254: 6313 str r3, [r2, #48] ; 0x30 - 8001256: 4b1d ldr r3, [pc, #116] ; (80012cc ) - 8001258: 6b1b ldr r3, [r3, #48] ; 0x30 - 800125a: f003 0340 and.w r3, r3, #64 ; 0x40 - 800125e: 60bb str r3, [r7, #8] - 8001260: 68bb ldr r3, [r7, #8] - __HAL_RCC_GPIOB_CLK_ENABLE(); - 8001262: 2300 movs r3, #0 - 8001264: 607b str r3, [r7, #4] - 8001266: 4b19 ldr r3, [pc, #100] ; (80012cc ) - 8001268: 6b1b ldr r3, [r3, #48] ; 0x30 - 800126a: 4a18 ldr r2, [pc, #96] ; (80012cc ) - 800126c: f043 0302 orr.w r3, r3, #2 - 8001270: 6313 str r3, [r2, #48] ; 0x30 - 8001272: 4b16 ldr r3, [pc, #88] ; (80012cc ) - 8001274: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001276: f003 0302 and.w r3, r3, #2 - 800127a: 607b str r3, [r7, #4] - 800127c: 687b ldr r3, [r7, #4] - __HAL_RCC_GPIOD_CLK_ENABLE(); - 800127e: 2300 movs r3, #0 - 8001280: 603b str r3, [r7, #0] - 8001282: 4b12 ldr r3, [pc, #72] ; (80012cc ) - 8001284: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001286: 4a11 ldr r2, [pc, #68] ; (80012cc ) - 8001288: f043 0308 orr.w r3, r3, #8 - 800128c: 6313 str r3, [r2, #48] ; 0x30 - 800128e: 4b0f ldr r3, [pc, #60] ; (80012cc ) - 8001290: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001292: f003 0308 and.w r3, r3, #8 - 8001296: 603b str r3, [r7, #0] - 8001298: 683b ldr r3, [r7, #0] - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET); - 800129a: 2200 movs r2, #0 - 800129c: f44f 4180 mov.w r1, #16384 ; 0x4000 - 80012a0: 480b ldr r0, [pc, #44] ; (80012d0 ) - 80012a2: f001 ffb9 bl 8003218 - - /*Configure GPIO pin : PC14 */ - GPIO_InitStruct.Pin = GPIO_PIN_14; - 80012a6: f44f 4380 mov.w r3, #16384 ; 0x4000 - 80012aa: 61fb str r3, [r7, #28] - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - 80012ac: 2301 movs r3, #1 - 80012ae: 623b str r3, [r7, #32] - GPIO_InitStruct.Pull = GPIO_NOPULL; - 80012b0: 2300 movs r3, #0 - 80012b2: 627b str r3, [r7, #36] ; 0x24 - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - 80012b4: 2300 movs r3, #0 - 80012b6: 62bb str r3, [r7, #40] ; 0x28 - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - 80012b8: f107 031c add.w r3, r7, #28 - 80012bc: 4619 mov r1, r3 - 80012be: 4804 ldr r0, [pc, #16] ; (80012d0 ) - 80012c0: f001 fdfe bl 8002ec0 - -} - 80012c4: bf00 nop - 80012c6: 3730 adds r7, #48 ; 0x30 - 80012c8: 46bd mov sp, r7 - 80012ca: bd80 pop {r7, pc} - 80012cc: 40023800 .word 0x40023800 - 80012d0: 40020800 .word 0x40020800 - -080012d4 : - -/* USER CODE BEGIN 4 */ - -void set_pbuf_params(struct pbuf *p, u16_t length) -{ - 80012d4: b580 push {r7, lr} - 80012d6: b082 sub sp, #8 - 80012d8: af00 add r7, sp, #0 - 80012da: 6078 str r0, [r7, #4] - 80012dc: 460b mov r3, r1 - 80012de: 807b strh r3, [r7, #2] - p->len = length; - 80012e0: 687b ldr r3, [r7, #4] - 80012e2: 887a ldrh r2, [r7, #2] - 80012e4: 815a strh r2, [r3, #10] - p->tot_len = p->len; - 80012e6: 687b ldr r3, [r7, #4] - 80012e8: 895a ldrh r2, [r3, #10] - 80012ea: 687b ldr r3, [r7, #4] - 80012ec: 811a strh r2, [r3, #8] - memcpy(p->payload, msg, p->tot_len); - 80012ee: 687b ldr r3, [r7, #4] - 80012f0: 6858 ldr r0, [r3, #4] - 80012f2: 687b ldr r3, [r7, #4] - 80012f4: 891b ldrh r3, [r3, #8] - 80012f6: 461a mov r2, r3 - 80012f8: 4903 ldr r1, [pc, #12] ; (8001308 ) - 80012fa: f00f fea5 bl 8011048 -} - 80012fe: bf00 nop - 8001300: 3708 adds r7, #8 - 8001302: 46bd mov sp, r7 - 8001304: bd80 pop {r7, pc} - 8001306: bf00 nop - 8001308: 20000a98 .word 0x20000a98 - -0800130c : - -void sock_init(struct udp_pcb * pcb) -{ - 800130c: b580 push {r7, lr} - 800130e: b084 sub sp, #16 - 8001310: af00 add r7, sp, #0 - 8001312: 6078 str r0, [r7, #4] - uint32_t ipaddr = ipaddr_addr("10.1.1.69"); - 8001314: 4817 ldr r0, [pc, #92] ; (8001374 ) - 8001316: f00e fe10 bl 800ff3a - 800131a: 4603 mov r3, r0 - 800131c: 60bb str r3, [r7, #8] - u16_t port = 50069U; - 800131e: f24c 3395 movw r3, #50069 ; 0xc395 - 8001322: 81fb strh r3, [r7, #14] - err_t errok = udp_bind(pcb, (ip_addr_t*)&ipaddr, port); - 8001324: 89fa ldrh r2, [r7, #14] - 8001326: f107 0308 add.w r3, r7, #8 - 800132a: 4619 mov r1, r3 - 800132c: 6878 ldr r0, [r7, #4] - 800132e: f00b f9ff bl 800c730 - 8001332: 4603 mov r3, r0 - 8001334: 737b strb r3, [r7, #13] - udp_recv(pcb, udp_echo_recv, NULL); - 8001336: 2200 movs r2, #0 - 8001338: 490f ldr r1, [pc, #60] ; (8001378 ) - 800133a: 6878 ldr r0, [r7, #4] - 800133c: f00b faee bl 800c91c - rx_msg.rcv_addr = 0; - 8001340: 4b0e ldr r3, [pc, #56] ; (800137c ) - 8001342: 2200 movs r2, #0 - 8001344: 601a str r2, [r3, #0] - rx_msg.cmd_num = 0; - 8001346: 4b0d ldr r3, [pc, #52] ; (800137c ) - 8001348: 2200 movs r2, #0 - 800134a: 80da strh r2, [r3, #6] - rx_msg.cmd_code = 0; - 800134c: 4b0b ldr r3, [pc, #44] ; (800137c ) - 800134e: 2200 movs r2, #0 - 8001350: 811a strh r2, [r3, #8] - rx_msg.clnt_con = 0; - 8001352: 4b0a ldr r3, [pc, #40] ; (800137c ) - 8001354: 2200 movs r2, #0 - 8001356: 729a strb r2, [r3, #10] - rx_msg.length = 0; - 8001358: 4b08 ldr r3, [pc, #32] ; (800137c ) - 800135a: 2200 movs r2, #0 - 800135c: f8a3 280c strh.w r2, [r3, #2060] ; 0x80c - memset(rx_msg.rx_buf, 0, sizeof rx_msg.rx_buf); - 8001360: f44f 6200 mov.w r2, #2048 ; 0x800 - 8001364: 2100 movs r1, #0 - 8001366: 4806 ldr r0, [pc, #24] ; (8001380 ) - 8001368: f00f fe96 bl 8011098 - return; - 800136c: bf00 nop -} - 800136e: 3710 adds r7, #16 - 8001370: 46bd mov sp, r7 - 8001372: bd80 pop {r7, pc} - 8001374: 08015bac .word 0x08015bac - 8001378: 08001385 .word 0x08001385 - 800137c: 20001010 .word 0x20001010 - 8001380: 2000101b .word 0x2000101b - -08001384 : - -void udp_echo_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, - const ip_addr_t *addr, u16_t port) -{ - 8001384: b580 push {r7, lr} - 8001386: b086 sub sp, #24 - 8001388: af00 add r7, sp, #0 - 800138a: 60f8 str r0, [r7, #12] - 800138c: 60b9 str r1, [r7, #8] - 800138e: 607a str r2, [r7, #4] - 8001390: 603b str r3, [r7, #0] - if (p != NULL) { - 8001392: 687b ldr r3, [r7, #4] - 8001394: 2b00 cmp r3, #0 - 8001396: d025 beq.n 80013e4 - /* send received packet back to sender */ - udp_sendto(pcb, p, addr, port); - 8001398: 8c3b ldrh r3, [r7, #32] - 800139a: 683a ldr r2, [r7, #0] - 800139c: 6879 ldr r1, [r7, #4] - 800139e: 68b8 ldr r0, [r7, #8] - 80013a0: f00b f810 bl 800c3c4 - /* free the pbuf */ - ip_addr_t rcv_addr = addr[0]; - 80013a4: 683b ldr r3, [r7, #0] - 80013a6: 681b ldr r3, [r3, #0] - 80013a8: 617b str r3, [r7, #20] - if (p->tot_len < sizeof rx_msg.rx_buf) - 80013aa: 687b ldr r3, [r7, #4] - 80013ac: 891b ldrh r3, [r3, #8] - 80013ae: f5b3 6f00 cmp.w r3, #2048 ; 0x800 - 80013b2: d214 bcs.n 80013de - { - rx_msg.rcv_addr = (uint32_t) rcv_addr.addr; - 80013b4: 697b ldr r3, [r7, #20] - 80013b6: 4a0d ldr r2, [pc, #52] ; (80013ec ) - 80013b8: 6013 str r3, [r2, #0] - rx_msg.port = port; - 80013ba: 4a0c ldr r2, [pc, #48] ; (80013ec ) - 80013bc: 8c3b ldrh r3, [r7, #32] - 80013be: 8093 strh r3, [r2, #4] - memcpy(rx_msg.rx_buf, p->payload, p->tot_len); - 80013c0: 687b ldr r3, [r7, #4] - 80013c2: 6859 ldr r1, [r3, #4] - 80013c4: 687b ldr r3, [r7, #4] - 80013c6: 891b ldrh r3, [r3, #8] - 80013c8: 461a mov r2, r3 - 80013ca: 4809 ldr r0, [pc, #36] ; (80013f0 ) - 80013cc: f00f fe3c bl 8011048 - rx_msg.length = p->tot_len; - 80013d0: 687b ldr r3, [r7, #4] - 80013d2: 891a ldrh r2, [r3, #8] - 80013d4: 4b05 ldr r3, [pc, #20] ; (80013ec ) - 80013d6: f8a3 280c strh.w r2, [r3, #2060] ; 0x80c - rcv_command(); - 80013da: f000 f80b bl 80013f4 - } - pbuf_free(p); - 80013de: 6878 ldr r0, [r7, #4] - 80013e0: f005 f8ea bl 80065b8 - } -} - 80013e4: bf00 nop - 80013e6: 3718 adds r7, #24 - 80013e8: 46bd mov sp, r7 - 80013ea: bd80 pop {r7, pc} - 80013ec: 20001010 .word 0x20001010 - 80013f0: 2000101b .word 0x2000101b - -080013f4 : - -void rcv_command(void) -{ - 80013f4: b480 push {r7} - 80013f6: af00 add r7, sp, #0 - if (rx_msg.length > 6) - 80013f8: 4b0e ldr r3, [pc, #56] ; (8001434 ) - 80013fa: f8b3 380c ldrh.w r3, [r3, #2060] ; 0x80c - 80013fe: 2b06 cmp r3, #6 - 8001400: d913 bls.n 800142a - { - rx_msg.cmd_num = rx_msg.rx_buf[2] | (rx_msg.rx_buf[3] << 8); - 8001402: 4b0c ldr r3, [pc, #48] ; (8001434 ) - 8001404: 7b5b ldrb r3, [r3, #13] - 8001406: b21a sxth r2, r3 - 8001408: 4b0a ldr r3, [pc, #40] ; (8001434 ) - 800140a: 7b9b ldrb r3, [r3, #14] - 800140c: 021b lsls r3, r3, #8 - 800140e: b21b sxth r3, r3 - 8001410: 4313 orrs r3, r2 - 8001412: b21b sxth r3, r3 - 8001414: b29a uxth r2, r3 - 8001416: 4b07 ldr r3, [pc, #28] ; (8001434 ) - 8001418: 80da strh r2, [r3, #6] - rx_msg.cmd_code = rx_msg.rx_buf[6]; - 800141a: 4b06 ldr r3, [pc, #24] ; (8001434 ) - 800141c: 7c5b ldrb r3, [r3, #17] - 800141e: b29a uxth r2, r3 - 8001420: 4b04 ldr r3, [pc, #16] ; (8001434 ) - 8001422: 811a strh r2, [r3, #8] - rx_msg.clnt_con = 1; - 8001424: 4b03 ldr r3, [pc, #12] ; (8001434 ) - 8001426: 2201 movs r2, #1 - 8001428: 729a strb r2, [r3, #10] - } -} - 800142a: bf00 nop - 800142c: 46bd mov sp, r7 - 800142e: f85d 7b04 ldr.w r7, [sp], #4 - 8001432: 4770 bx lr - 8001434: 20001010 .word 0x20001010 - -08001438 : -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - 8001438: b480 push {r7} - 800143a: af00 add r7, sp, #0 - \details Disables IRQ interrupts by setting the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE void __disable_irq(void) -{ - __ASM volatile ("cpsid i" : : : "memory"); - 800143c: b672 cpsid i -} - 800143e: bf00 nop - /* USER CODE BEGIN Error_Handler_Debug */ - /* User can add his own implementation to report the HAL error return state */ - __disable_irq(); - while (1) - 8001440: e7fe b.n 8001440 - ... - -08001444 : -/* USER CODE END 0 */ -/** - * Initializes the Global MSP. - */ -void HAL_MspInit(void) -{ - 8001444: b480 push {r7} - 8001446: b083 sub sp, #12 - 8001448: af00 add r7, sp, #0 - /* USER CODE BEGIN MspInit 0 */ - - /* USER CODE END MspInit 0 */ - - __HAL_RCC_SYSCFG_CLK_ENABLE(); - 800144a: 2300 movs r3, #0 - 800144c: 607b str r3, [r7, #4] - 800144e: 4b10 ldr r3, [pc, #64] ; (8001490 ) - 8001450: 6c5b ldr r3, [r3, #68] ; 0x44 - 8001452: 4a0f ldr r2, [pc, #60] ; (8001490 ) - 8001454: f443 4380 orr.w r3, r3, #16384 ; 0x4000 - 8001458: 6453 str r3, [r2, #68] ; 0x44 - 800145a: 4b0d ldr r3, [pc, #52] ; (8001490 ) - 800145c: 6c5b ldr r3, [r3, #68] ; 0x44 - 800145e: f403 4380 and.w r3, r3, #16384 ; 0x4000 - 8001462: 607b str r3, [r7, #4] - 8001464: 687b ldr r3, [r7, #4] - __HAL_RCC_PWR_CLK_ENABLE(); - 8001466: 2300 movs r3, #0 - 8001468: 603b str r3, [r7, #0] - 800146a: 4b09 ldr r3, [pc, #36] ; (8001490 ) - 800146c: 6c1b ldr r3, [r3, #64] ; 0x40 - 800146e: 4a08 ldr r2, [pc, #32] ; (8001490 ) - 8001470: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 - 8001474: 6413 str r3, [r2, #64] ; 0x40 - 8001476: 4b06 ldr r3, [pc, #24] ; (8001490 ) - 8001478: 6c1b ldr r3, [r3, #64] ; 0x40 - 800147a: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 - 800147e: 603b str r3, [r7, #0] - 8001480: 683b ldr r3, [r7, #0] - /* System interrupt init*/ - - /* USER CODE BEGIN MspInit 1 */ - - /* USER CODE END MspInit 1 */ -} - 8001482: bf00 nop - 8001484: 370c adds r7, #12 - 8001486: 46bd mov sp, r7 - 8001488: f85d 7b04 ldr.w r7, [sp], #4 - 800148c: 4770 bx lr - 800148e: bf00 nop - 8001490: 40023800 .word 0x40023800 - -08001494 : -* This function configures the hardware resources used in this example -* @param htim_base: TIM_Base handle pointer -* @retval None -*/ -void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) -{ - 8001494: b580 push {r7, lr} - 8001496: b084 sub sp, #16 - 8001498: af00 add r7, sp, #0 - 800149a: 6078 str r0, [r7, #4] - if(htim_base->Instance==TIM3) - 800149c: 687b ldr r3, [r7, #4] - 800149e: 681b ldr r3, [r3, #0] - 80014a0: 4a0e ldr r2, [pc, #56] ; (80014dc ) - 80014a2: 4293 cmp r3, r2 - 80014a4: d115 bne.n 80014d2 - { - /* USER CODE BEGIN TIM3_MspInit 0 */ - - /* USER CODE END TIM3_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM3_CLK_ENABLE(); - 80014a6: 2300 movs r3, #0 - 80014a8: 60fb str r3, [r7, #12] - 80014aa: 4b0d ldr r3, [pc, #52] ; (80014e0 ) - 80014ac: 6c1b ldr r3, [r3, #64] ; 0x40 - 80014ae: 4a0c ldr r2, [pc, #48] ; (80014e0 ) - 80014b0: f043 0302 orr.w r3, r3, #2 - 80014b4: 6413 str r3, [r2, #64] ; 0x40 - 80014b6: 4b0a ldr r3, [pc, #40] ; (80014e0 ) - 80014b8: 6c1b ldr r3, [r3, #64] ; 0x40 - 80014ba: f003 0302 and.w r3, r3, #2 - 80014be: 60fb str r3, [r7, #12] - 80014c0: 68fb ldr r3, [r7, #12] - /* TIM3 interrupt Init */ - HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); - 80014c2: 2200 movs r2, #0 - 80014c4: 2100 movs r1, #0 - 80014c6: 201d movs r0, #29 - 80014c8: f000 fbcd bl 8001c66 - HAL_NVIC_EnableIRQ(TIM3_IRQn); - 80014cc: 201d movs r0, #29 - 80014ce: f000 fbe6 bl 8001c9e - /* USER CODE BEGIN TIM3_MspInit 1 */ - - /* USER CODE END TIM3_MspInit 1 */ - } - -} - 80014d2: bf00 nop - 80014d4: 3710 adds r7, #16 - 80014d6: 46bd mov sp, r7 - 80014d8: bd80 pop {r7, pc} - 80014da: bf00 nop - 80014dc: 40000400 .word 0x40000400 - 80014e0: 40023800 .word 0x40023800 - -080014e4 : - -} - -static uint32_t FMC_Initialized = 0; - -static void HAL_FMC_MspInit(void){ - 80014e4: b580 push {r7, lr} - 80014e6: b086 sub sp, #24 - 80014e8: af00 add r7, sp, #0 - /* USER CODE BEGIN FMC_MspInit 0 */ - - /* USER CODE END FMC_MspInit 0 */ - GPIO_InitTypeDef GPIO_InitStruct ={0}; - 80014ea: 1d3b adds r3, r7, #4 - 80014ec: 2200 movs r2, #0 - 80014ee: 601a str r2, [r3, #0] - 80014f0: 605a str r2, [r3, #4] - 80014f2: 609a str r2, [r3, #8] - 80014f4: 60da str r2, [r3, #12] - 80014f6: 611a str r2, [r3, #16] - if (FMC_Initialized) { - 80014f8: 4b2c ldr r3, [pc, #176] ; (80015ac ) - 80014fa: 681b ldr r3, [r3, #0] - 80014fc: 2b00 cmp r3, #0 - 80014fe: d150 bne.n 80015a2 - return; - } - FMC_Initialized = 1; - 8001500: 4b2a ldr r3, [pc, #168] ; (80015ac ) - 8001502: 2201 movs r2, #1 - 8001504: 601a str r2, [r3, #0] - - /* Peripheral clock enable */ - __HAL_RCC_FMC_CLK_ENABLE(); - 8001506: 2300 movs r3, #0 - 8001508: 603b str r3, [r7, #0] - 800150a: 4b29 ldr r3, [pc, #164] ; (80015b0 ) - 800150c: 6b9b ldr r3, [r3, #56] ; 0x38 - 800150e: 4a28 ldr r2, [pc, #160] ; (80015b0 ) - 8001510: f043 0301 orr.w r3, r3, #1 - 8001514: 6393 str r3, [r2, #56] ; 0x38 - 8001516: 4b26 ldr r3, [pc, #152] ; (80015b0 ) - 8001518: 6b9b ldr r3, [r3, #56] ; 0x38 - 800151a: f003 0301 and.w r3, r3, #1 - 800151e: 603b str r3, [r7, #0] - 8001520: 683b ldr r3, [r7, #0] - PD5 ------> FMC_NWE - PD7 ------> FMC_NE1 - PE0 ------> FMC_NBL0 - PE1 ------> FMC_NBL1 - */ - GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6 - 8001522: f64f 73fb movw r3, #65531 ; 0xfffb - 8001526: 607b str r3, [r7, #4] - |GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10 - |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 - |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 8001528: 2302 movs r3, #2 - 800152a: 60bb str r3, [r7, #8] - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800152c: 2300 movs r3, #0 - 800152e: 60fb str r3, [r7, #12] - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - 8001530: 2303 movs r3, #3 - 8001532: 613b str r3, [r7, #16] - GPIO_InitStruct.Alternate = GPIO_AF12_FMC; - 8001534: 230c movs r3, #12 - 8001536: 617b str r3, [r7, #20] - HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); - 8001538: 1d3b adds r3, r7, #4 - 800153a: 4619 mov r1, r3 - 800153c: 481d ldr r0, [pc, #116] ; (80015b4 ) - 800153e: f001 fcbf bl 8002ec0 - - GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 - 8001542: f24f 033f movw r3, #61503 ; 0xf03f - 8001546: 607b str r3, [r7, #4] - |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_12|GPIO_PIN_13 - |GPIO_PIN_14|GPIO_PIN_15; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 8001548: 2302 movs r3, #2 - 800154a: 60bb str r3, [r7, #8] - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800154c: 2300 movs r3, #0 - 800154e: 60fb str r3, [r7, #12] - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - 8001550: 2303 movs r3, #3 - 8001552: 613b str r3, [r7, #16] - GPIO_InitStruct.Alternate = GPIO_AF12_FMC; - 8001554: 230c movs r3, #12 - 8001556: 617b str r3, [r7, #20] - HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); - 8001558: 1d3b adds r3, r7, #4 - 800155a: 4619 mov r1, r3 - 800155c: 4816 ldr r0, [pc, #88] ; (80015b8 ) - 800155e: f001 fcaf bl 8002ec0 - - GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 - 8001562: 233f movs r3, #63 ; 0x3f - 8001564: 607b str r3, [r7, #4] - |GPIO_PIN_4|GPIO_PIN_5; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 8001566: 2302 movs r3, #2 - 8001568: 60bb str r3, [r7, #8] - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800156a: 2300 movs r3, #0 - 800156c: 60fb str r3, [r7, #12] - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - 800156e: 2303 movs r3, #3 - 8001570: 613b str r3, [r7, #16] - GPIO_InitStruct.Alternate = GPIO_AF12_FMC; - 8001572: 230c movs r3, #12 - 8001574: 617b str r3, [r7, #20] - HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); - 8001576: 1d3b adds r3, r7, #4 - 8001578: 4619 mov r1, r3 - 800157a: 4810 ldr r0, [pc, #64] ; (80015bc ) - 800157c: f001 fca0 bl 8002ec0 - - GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11 - 8001580: f64f 73b3 movw r3, #65459 ; 0xffb3 - 8001584: 607b str r3, [r7, #4] - |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15 - |GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5 - |GPIO_PIN_7; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 8001586: 2302 movs r3, #2 - 8001588: 60bb str r3, [r7, #8] - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800158a: 2300 movs r3, #0 - 800158c: 60fb str r3, [r7, #12] - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - 800158e: 2303 movs r3, #3 - 8001590: 613b str r3, [r7, #16] - GPIO_InitStruct.Alternate = GPIO_AF12_FMC; - 8001592: 230c movs r3, #12 - 8001594: 617b str r3, [r7, #20] - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - 8001596: 1d3b adds r3, r7, #4 - 8001598: 4619 mov r1, r3 - 800159a: 4809 ldr r0, [pc, #36] ; (80015c0 ) - 800159c: f001 fc90 bl 8002ec0 - 80015a0: e000 b.n 80015a4 - return; - 80015a2: bf00 nop - - /* USER CODE BEGIN FMC_MspInit 1 */ - - /* USER CODE END FMC_MspInit 1 */ -} - 80015a4: 3718 adds r7, #24 - 80015a6: 46bd mov sp, r7 - 80015a8: bd80 pop {r7, pc} - 80015aa: bf00 nop - 80015ac: 20001820 .word 0x20001820 - 80015b0: 40023800 .word 0x40023800 - 80015b4: 40021000 .word 0x40021000 - 80015b8: 40021400 .word 0x40021400 - 80015bc: 40021800 .word 0x40021800 - 80015c0: 40020c00 .word 0x40020c00 - -080015c4 : - -void HAL_SRAM_MspInit(SRAM_HandleTypeDef* hsram){ - 80015c4: b580 push {r7, lr} - 80015c6: b082 sub sp, #8 - 80015c8: af00 add r7, sp, #0 - 80015ca: 6078 str r0, [r7, #4] - /* USER CODE BEGIN SRAM_MspInit 0 */ - - /* USER CODE END SRAM_MspInit 0 */ - HAL_FMC_MspInit(); - 80015cc: f7ff ff8a bl 80014e4 - /* USER CODE BEGIN SRAM_MspInit 1 */ - - /* USER CODE END SRAM_MspInit 1 */ -} - 80015d0: bf00 nop - 80015d2: 3708 adds r7, #8 - 80015d4: 46bd mov sp, r7 - 80015d6: bd80 pop {r7, pc} - -080015d8 : -/******************************************************************************/ -/** - * @brief This function handles Non maskable interrupt. - */ -void NMI_Handler(void) -{ - 80015d8: b480 push {r7} - 80015da: af00 add r7, sp, #0 - /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ - - /* USER CODE END NonMaskableInt_IRQn 0 */ - /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ - while (1) - 80015dc: e7fe b.n 80015dc - -080015de : - -/** - * @brief This function handles Hard fault interrupt. - */ -void HardFault_Handler(void) -{ - 80015de: b480 push {r7} - 80015e0: af00 add r7, sp, #0 - /* USER CODE BEGIN HardFault_IRQn 0 */ - - /* USER CODE END HardFault_IRQn 0 */ - while (1) - 80015e2: e7fe b.n 80015e2 - -080015e4 : - -/** - * @brief This function handles Memory management fault. - */ -void MemManage_Handler(void) -{ - 80015e4: b480 push {r7} - 80015e6: af00 add r7, sp, #0 - /* USER CODE BEGIN MemoryManagement_IRQn 0 */ - - /* USER CODE END MemoryManagement_IRQn 0 */ - while (1) - 80015e8: e7fe b.n 80015e8 - -080015ea : - -/** - * @brief This function handles Pre-fetch fault, memory access fault. - */ -void BusFault_Handler(void) -{ - 80015ea: b480 push {r7} - 80015ec: af00 add r7, sp, #0 - /* USER CODE BEGIN BusFault_IRQn 0 */ - - /* USER CODE END BusFault_IRQn 0 */ - while (1) - 80015ee: e7fe b.n 80015ee - -080015f0 : - -/** - * @brief This function handles Undefined instruction or illegal state. - */ -void UsageFault_Handler(void) -{ - 80015f0: b480 push {r7} - 80015f2: af00 add r7, sp, #0 - /* USER CODE BEGIN UsageFault_IRQn 0 */ - - /* USER CODE END UsageFault_IRQn 0 */ - while (1) - 80015f4: e7fe b.n 80015f4 - -080015f6 : - -/** - * @brief This function handles System service call via SWI instruction. - */ -void SVC_Handler(void) -{ - 80015f6: b480 push {r7} - 80015f8: af00 add r7, sp, #0 - - /* USER CODE END SVCall_IRQn 0 */ - /* USER CODE BEGIN SVCall_IRQn 1 */ - - /* USER CODE END SVCall_IRQn 1 */ -} - 80015fa: bf00 nop - 80015fc: 46bd mov sp, r7 - 80015fe: f85d 7b04 ldr.w r7, [sp], #4 - 8001602: 4770 bx lr - -08001604 : - -/** - * @brief This function handles Debug monitor. - */ -void DebugMon_Handler(void) -{ - 8001604: b480 push {r7} - 8001606: af00 add r7, sp, #0 - - /* USER CODE END DebugMonitor_IRQn 0 */ - /* USER CODE BEGIN DebugMonitor_IRQn 1 */ - - /* USER CODE END DebugMonitor_IRQn 1 */ -} - 8001608: bf00 nop - 800160a: 46bd mov sp, r7 - 800160c: f85d 7b04 ldr.w r7, [sp], #4 - 8001610: 4770 bx lr - -08001612 : - -/** - * @brief This function handles Pendable request for system service. - */ -void PendSV_Handler(void) -{ - 8001612: b480 push {r7} - 8001614: af00 add r7, sp, #0 - - /* USER CODE END PendSV_IRQn 0 */ - /* USER CODE BEGIN PendSV_IRQn 1 */ - - /* USER CODE END PendSV_IRQn 1 */ -} - 8001616: bf00 nop - 8001618: 46bd mov sp, r7 - 800161a: f85d 7b04 ldr.w r7, [sp], #4 - 800161e: 4770 bx lr - -08001620 : - -/** - * @brief This function handles System tick timer. - */ -void SysTick_Handler(void) -{ - 8001620: b580 push {r7, lr} - 8001622: af00 add r7, sp, #0 - /* USER CODE BEGIN SysTick_IRQn 0 */ - - /* USER CODE END SysTick_IRQn 0 */ - HAL_IncTick(); - 8001624: f000 fa00 bl 8001a28 - /* USER CODE BEGIN SysTick_IRQn 1 */ - - /* USER CODE END SysTick_IRQn 1 */ -} - 8001628: bf00 nop - 800162a: bd80 pop {r7, pc} - -0800162c : - -/** - * @brief This function handles TIM3 global interrupt. - */ -void TIM3_IRQHandler(void) -{ - 800162c: b580 push {r7, lr} - 800162e: af00 add r7, sp, #0 - /* USER CODE BEGIN TIM3_IRQn 0 */ - - /* USER CODE END TIM3_IRQn 0 */ - HAL_TIM_IRQHandler(&htim3); - 8001630: 4804 ldr r0, [pc, #16] ; (8001644 ) - 8001632: f002 fb43 bl 8003cbc - /* USER CODE BEGIN TIM3_IRQn 1 */ - br_counter++; - 8001636: 4b04 ldr r3, [pc, #16] ; (8001648 ) - 8001638: 681b ldr r3, [r3, #0] - 800163a: 3301 adds r3, #1 - 800163c: 4a02 ldr r2, [pc, #8] ; (8001648 ) - 800163e: 6013 str r3, [r2, #0] - - /* USER CODE END TIM3_IRQn 1 */ -} - 8001640: bf00 nop - 8001642: bd80 pop {r7, pc} - 8001644: 200009fc .word 0x200009fc - 8001648: 20000a94 .word 0x20000a94 - -0800164c : - * configuration. - * @param None - * @retval None - */ -void SystemInit(void) -{ - 800164c: b480 push {r7} - 800164e: af00 add r7, sp, #0 - /* FPU settings ------------------------------------------------------------*/ - #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) - SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ - 8001650: 4b06 ldr r3, [pc, #24] ; (800166c ) - 8001652: f8d3 3088 ldr.w r3, [r3, #136] ; 0x88 - 8001656: 4a05 ldr r2, [pc, #20] ; (800166c ) - 8001658: f443 0370 orr.w r3, r3, #15728640 ; 0xf00000 - 800165c: f8c2 3088 str.w r3, [r2, #136] ; 0x88 - - /* Configure the Vector Table location -------------------------------------*/ -#if defined(USER_VECT_TAB_ADDRESS) - SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ -#endif /* USER_VECT_TAB_ADDRESS */ -} - 8001660: bf00 nop - 8001662: 46bd mov sp, r7 - 8001664: f85d 7b04 ldr.w r7, [sp], #4 - 8001668: 4770 bx lr - 800166a: bf00 nop - 800166c: e000ed00 .word 0xe000ed00 - -08001670 : - - .section .text.Reset_Handler - .weak Reset_Handler - .type Reset_Handler, %function -Reset_Handler: - ldr r0, =_estack - 8001670: 480d ldr r0, [pc, #52] ; (80016a8 ) - mov sp, r0 /* set stack pointer */ - 8001672: 4685 mov sp, r0 -/* Call the clock system initialization function.*/ - bl SystemInit - 8001674: f7ff ffea bl 800164c - -/* Copy the data segment initializers from flash to SRAM */ - ldr r0, =_sdata - 8001678: 480c ldr r0, [pc, #48] ; (80016ac ) - ldr r1, =_edata - 800167a: 490d ldr r1, [pc, #52] ; (80016b0 ) - ldr r2, =_sidata - 800167c: 4a0d ldr r2, [pc, #52] ; (80016b4 ) - movs r3, #0 - 800167e: 2300 movs r3, #0 - b LoopCopyDataInit - 8001680: e002 b.n 8001688 - -08001682 : - -CopyDataInit: - ldr r4, [r2, r3] - 8001682: 58d4 ldr r4, [r2, r3] - str r4, [r0, r3] - 8001684: 50c4 str r4, [r0, r3] - adds r3, r3, #4 - 8001686: 3304 adds r3, #4 - -08001688 : - -LoopCopyDataInit: - adds r4, r0, r3 - 8001688: 18c4 adds r4, r0, r3 - cmp r4, r1 - 800168a: 428c cmp r4, r1 - bcc CopyDataInit - 800168c: d3f9 bcc.n 8001682 - -/* Zero fill the bss segment. */ - ldr r2, =_sbss - 800168e: 4a0a ldr r2, [pc, #40] ; (80016b8 ) - ldr r4, =_ebss - 8001690: 4c0a ldr r4, [pc, #40] ; (80016bc ) - movs r3, #0 - 8001692: 2300 movs r3, #0 - b LoopFillZerobss - 8001694: e001 b.n 800169a - -08001696 : - -FillZerobss: - str r3, [r2] - 8001696: 6013 str r3, [r2, #0] - adds r2, r2, #4 - 8001698: 3204 adds r2, #4 - -0800169a : - -LoopFillZerobss: - cmp r2, r4 - 800169a: 42a2 cmp r2, r4 - bcc FillZerobss - 800169c: d3fb bcc.n 8001696 - -/* Call static constructors */ - bl __libc_init_array - 800169e: f00f fc9f bl 8010fe0 <__libc_init_array> -/* Call the application's entry point.*/ - bl main - 80016a2: f7ff fc13 bl 8000ecc
- -080016a6 : - -LoopForever: - b LoopForever - 80016a6: e7fe b.n 80016a6 - ldr r0, =_estack - 80016a8: 20030000 .word 0x20030000 - ldr r0, =_sdata - 80016ac: 20000000 .word 0x20000000 - ldr r1, =_edata - 80016b0: 200009e0 .word 0x200009e0 - ldr r2, =_sidata - 80016b4: 08018e90 .word 0x08018e90 - ldr r2, =_sbss - 80016b8: 200009e0 .word 0x200009e0 - ldr r4, =_ebss - 80016bc: 20009ba4 .word 0x20009ba4 - -080016c0 : - * @retval : None -*/ - .section .text.Default_Handler,"ax",%progbits -Default_Handler: -Infinite_Loop: - b Infinite_Loop - 80016c0: e7fe b.n 80016c0 - -080016c2 : - * @param ioctx: holds device IO functions. - * @retval DP83848_STATUS_OK if OK - * DP83848_STATUS_ERROR if missing mandatory function - */ -int32_t DP83848_RegisterBusIO(dp83848_Object_t *pObj, dp83848_IOCtx_t *ioctx) -{ - 80016c2: b480 push {r7} - 80016c4: b083 sub sp, #12 - 80016c6: af00 add r7, sp, #0 - 80016c8: 6078 str r0, [r7, #4] - 80016ca: 6039 str r1, [r7, #0] - if(!pObj || !ioctx->ReadReg || !ioctx->WriteReg || !ioctx->GetTick) - 80016cc: 687b ldr r3, [r7, #4] - 80016ce: 2b00 cmp r3, #0 - 80016d0: d00b beq.n 80016ea - 80016d2: 683b ldr r3, [r7, #0] - 80016d4: 68db ldr r3, [r3, #12] - 80016d6: 2b00 cmp r3, #0 - 80016d8: d007 beq.n 80016ea - 80016da: 683b ldr r3, [r7, #0] - 80016dc: 689b ldr r3, [r3, #8] - 80016de: 2b00 cmp r3, #0 - 80016e0: d003 beq.n 80016ea - 80016e2: 683b ldr r3, [r7, #0] - 80016e4: 691b ldr r3, [r3, #16] - 80016e6: 2b00 cmp r3, #0 - 80016e8: d102 bne.n 80016f0 - { - return DP83848_STATUS_ERROR; - 80016ea: f04f 33ff mov.w r3, #4294967295 - 80016ee: e014 b.n 800171a - } - - pObj->IO.Init = ioctx->Init; - 80016f0: 683b ldr r3, [r7, #0] - 80016f2: 681a ldr r2, [r3, #0] - 80016f4: 687b ldr r3, [r7, #4] - 80016f6: 609a str r2, [r3, #8] - pObj->IO.DeInit = ioctx->DeInit; - 80016f8: 683b ldr r3, [r7, #0] - 80016fa: 685a ldr r2, [r3, #4] - 80016fc: 687b ldr r3, [r7, #4] - 80016fe: 60da str r2, [r3, #12] - pObj->IO.ReadReg = ioctx->ReadReg; - 8001700: 683b ldr r3, [r7, #0] - 8001702: 68da ldr r2, [r3, #12] - 8001704: 687b ldr r3, [r7, #4] - 8001706: 615a str r2, [r3, #20] - pObj->IO.WriteReg = ioctx->WriteReg; - 8001708: 683b ldr r3, [r7, #0] - 800170a: 689a ldr r2, [r3, #8] - 800170c: 687b ldr r3, [r7, #4] - 800170e: 611a str r2, [r3, #16] - pObj->IO.GetTick = ioctx->GetTick; - 8001710: 683b ldr r3, [r7, #0] - 8001712: 691a ldr r2, [r3, #16] - 8001714: 687b ldr r3, [r7, #4] - 8001716: 619a str r2, [r3, #24] - - return DP83848_STATUS_OK; - 8001718: 2300 movs r3, #0 -} - 800171a: 4618 mov r0, r3 - 800171c: 370c adds r7, #12 - 800171e: 46bd mov sp, r7 - 8001720: f85d 7b04 ldr.w r7, [sp], #4 - 8001724: 4770 bx lr - -08001726 : - * DP83848_STATUS_READ_ERROR if connot read register - * DP83848_STATUS_WRITE_ERROR if connot write to register - * DP83848_STATUS_RESET_TIMEOUT if cannot perform a software reset - */ - int32_t DP83848_Init(dp83848_Object_t *pObj) - { - 8001726: b580 push {r7, lr} - 8001728: b086 sub sp, #24 - 800172a: af00 add r7, sp, #0 - 800172c: 6078 str r0, [r7, #4] - uint32_t tickstart = 0, regvalue = 0, addr = 0; - 800172e: 2300 movs r3, #0 - 8001730: 60fb str r3, [r7, #12] - 8001732: 2300 movs r3, #0 - 8001734: 60bb str r3, [r7, #8] - 8001736: 2300 movs r3, #0 - 8001738: 617b str r3, [r7, #20] - int32_t status = DP83848_STATUS_OK; - 800173a: 2300 movs r3, #0 - 800173c: 613b str r3, [r7, #16] - - if(pObj->Is_Initialized == 0) - 800173e: 687b ldr r3, [r7, #4] - 8001740: 685b ldr r3, [r3, #4] - 8001742: 2b00 cmp r3, #0 - 8001744: d17c bne.n 8001840 - { - if(pObj->IO.Init != 0) - 8001746: 687b ldr r3, [r7, #4] - 8001748: 689b ldr r3, [r3, #8] - 800174a: 2b00 cmp r3, #0 - 800174c: d002 beq.n 8001754 - { - /* GPIO and Clocks initialization */ - pObj->IO.Init(); - 800174e: 687b ldr r3, [r7, #4] - 8001750: 689b ldr r3, [r3, #8] - 8001752: 4798 blx r3 - } - - /* for later check */ - pObj->DevAddr = DP83848_MAX_DEV_ADDR + 1; - 8001754: 687b ldr r3, [r7, #4] - 8001756: 2220 movs r2, #32 - 8001758: 601a str r2, [r3, #0] - - /* Get the device address from special mode register */ - for(addr = 0; addr <= DP83848_MAX_DEV_ADDR; addr ++) - 800175a: 2300 movs r3, #0 - 800175c: 617b str r3, [r7, #20] - 800175e: e01c b.n 800179a - { - if(pObj->IO.ReadReg(addr, DP83848_SMR, ®value) < 0) - 8001760: 687b ldr r3, [r7, #4] - 8001762: 695b ldr r3, [r3, #20] - 8001764: f107 0208 add.w r2, r7, #8 - 8001768: 2119 movs r1, #25 - 800176a: 6978 ldr r0, [r7, #20] - 800176c: 4798 blx r3 - 800176e: 4603 mov r3, r0 - 8001770: 2b00 cmp r3, #0 - 8001772: da03 bge.n 800177c - { - status = DP83848_STATUS_READ_ERROR; - 8001774: f06f 0304 mvn.w r3, #4 - 8001778: 613b str r3, [r7, #16] - /* Can't read from this device address - continue with next address */ - continue; - 800177a: e00b b.n 8001794 - } - - if((regvalue & DP83848_SMR_PHY_ADDR) == addr) - 800177c: 68bb ldr r3, [r7, #8] - 800177e: f003 031f and.w r3, r3, #31 - 8001782: 697a ldr r2, [r7, #20] - 8001784: 429a cmp r2, r3 - 8001786: d105 bne.n 8001794 - { - pObj->DevAddr = addr; - 8001788: 687b ldr r3, [r7, #4] - 800178a: 697a ldr r2, [r7, #20] - 800178c: 601a str r2, [r3, #0] - status = DP83848_STATUS_OK; - 800178e: 2300 movs r3, #0 - 8001790: 613b str r3, [r7, #16] - break; - 8001792: e005 b.n 80017a0 - for(addr = 0; addr <= DP83848_MAX_DEV_ADDR; addr ++) - 8001794: 697b ldr r3, [r7, #20] - 8001796: 3301 adds r3, #1 - 8001798: 617b str r3, [r7, #20] - 800179a: 697b ldr r3, [r7, #20] - 800179c: 2b1f cmp r3, #31 - 800179e: d9df bls.n 8001760 - } - } - - if(pObj->DevAddr > DP83848_MAX_DEV_ADDR) - 80017a0: 687b ldr r3, [r7, #4] - 80017a2: 681b ldr r3, [r3, #0] - 80017a4: 2b1f cmp r3, #31 - 80017a6: d902 bls.n 80017ae - { - status = DP83848_STATUS_ADDRESS_ERROR; - 80017a8: f06f 0302 mvn.w r3, #2 - 80017ac: 613b str r3, [r7, #16] - } - - /* if device address is matched */ - if(status == DP83848_STATUS_OK) - 80017ae: 693b ldr r3, [r7, #16] - 80017b0: 2b00 cmp r3, #0 - 80017b2: d145 bne.n 8001840 - { - /* set a software reset */ - if(pObj->IO.WriteReg(pObj->DevAddr, DP83848_BCR, DP83848_BCR_SOFT_RESET) >= 0) - 80017b4: 687b ldr r3, [r7, #4] - 80017b6: 691b ldr r3, [r3, #16] - 80017b8: 687a ldr r2, [r7, #4] - 80017ba: 6810 ldr r0, [r2, #0] - 80017bc: f44f 4200 mov.w r2, #32768 ; 0x8000 - 80017c0: 2100 movs r1, #0 - 80017c2: 4798 blx r3 - 80017c4: 4603 mov r3, r0 - 80017c6: 2b00 cmp r3, #0 - 80017c8: db37 blt.n 800183a - { - /* get software reset status */ - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_BCR, ®value) >= 0) - 80017ca: 687b ldr r3, [r7, #4] - 80017cc: 695b ldr r3, [r3, #20] - 80017ce: 687a ldr r2, [r7, #4] - 80017d0: 6810 ldr r0, [r2, #0] - 80017d2: f107 0208 add.w r2, r7, #8 - 80017d6: 2100 movs r1, #0 - 80017d8: 4798 blx r3 - 80017da: 4603 mov r3, r0 - 80017dc: 2b00 cmp r3, #0 - 80017de: db28 blt.n 8001832 - { - tickstart = pObj->IO.GetTick(); - 80017e0: 687b ldr r3, [r7, #4] - 80017e2: 699b ldr r3, [r3, #24] - 80017e4: 4798 blx r3 - 80017e6: 4603 mov r3, r0 - 80017e8: 60fb str r3, [r7, #12] - - /* wait until software reset is done or timeout occured */ - while(regvalue & DP83848_BCR_SOFT_RESET) - 80017ea: e01c b.n 8001826 - { - if((pObj->IO.GetTick() - tickstart) <= DP83848_SW_RESET_TO) - 80017ec: 687b ldr r3, [r7, #4] - 80017ee: 699b ldr r3, [r3, #24] - 80017f0: 4798 blx r3 - 80017f2: 4603 mov r3, r0 - 80017f4: 461a mov r2, r3 - 80017f6: 68fb ldr r3, [r7, #12] - 80017f8: 1ad3 subs r3, r2, r3 - 80017fa: f5b3 7ffa cmp.w r3, #500 ; 0x1f4 - 80017fe: d80e bhi.n 800181e - { - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_BCR, ®value) < 0) - 8001800: 687b ldr r3, [r7, #4] - 8001802: 695b ldr r3, [r3, #20] - 8001804: 687a ldr r2, [r7, #4] - 8001806: 6810 ldr r0, [r2, #0] - 8001808: f107 0208 add.w r2, r7, #8 - 800180c: 2100 movs r1, #0 - 800180e: 4798 blx r3 - 8001810: 4603 mov r3, r0 - 8001812: 2b00 cmp r3, #0 - 8001814: da07 bge.n 8001826 - { - status = DP83848_STATUS_READ_ERROR; - 8001816: f06f 0304 mvn.w r3, #4 - 800181a: 613b str r3, [r7, #16] - break; - 800181c: e010 b.n 8001840 - } - } - else - { - status = DP83848_STATUS_RESET_TIMEOUT; - 800181e: f06f 0301 mvn.w r3, #1 - 8001822: 613b str r3, [r7, #16] - break; - 8001824: e00c b.n 8001840 - while(regvalue & DP83848_BCR_SOFT_RESET) - 8001826: 68bb ldr r3, [r7, #8] - 8001828: f403 4300 and.w r3, r3, #32768 ; 0x8000 - 800182c: 2b00 cmp r3, #0 - 800182e: d1dd bne.n 80017ec - 8001830: e006 b.n 8001840 - } - } - } - else - { - status = DP83848_STATUS_READ_ERROR; - 8001832: f06f 0304 mvn.w r3, #4 - 8001836: 613b str r3, [r7, #16] - 8001838: e002 b.n 8001840 - } - } - else - { - status = DP83848_STATUS_WRITE_ERROR; - 800183a: f06f 0303 mvn.w r3, #3 - 800183e: 613b str r3, [r7, #16] - } - } - } - - if(status == DP83848_STATUS_OK) - 8001840: 693b ldr r3, [r7, #16] - 8001842: 2b00 cmp r3, #0 - 8001844: d112 bne.n 800186c - { - tickstart = pObj->IO.GetTick(); - 8001846: 687b ldr r3, [r7, #4] - 8001848: 699b ldr r3, [r3, #24] - 800184a: 4798 blx r3 - 800184c: 4603 mov r3, r0 - 800184e: 60fb str r3, [r7, #12] - - /* Wait for 2s to perform initialization */ - while((pObj->IO.GetTick() - tickstart) <= DP83848_INIT_TO) - 8001850: bf00 nop - 8001852: 687b ldr r3, [r7, #4] - 8001854: 699b ldr r3, [r3, #24] - 8001856: 4798 blx r3 - 8001858: 4603 mov r3, r0 - 800185a: 461a mov r2, r3 - 800185c: 68fb ldr r3, [r7, #12] - 800185e: 1ad3 subs r3, r2, r3 - 8001860: f5b3 6ffa cmp.w r3, #2000 ; 0x7d0 - 8001864: d9f5 bls.n 8001852 - { - } - pObj->Is_Initialized = 1; - 8001866: 687b ldr r3, [r7, #4] - 8001868: 2201 movs r2, #1 - 800186a: 605a str r2, [r3, #4] - } - - return status; - 800186c: 693b ldr r3, [r7, #16] - } - 800186e: 4618 mov r0, r3 - 8001870: 3718 adds r7, #24 - 8001872: 46bd mov sp, r7 - 8001874: bd80 pop {r7, pc} - -08001876 : - * DP83848_STATUS_10MBITS_HALFDUPLEX if 10Mb/s HD - * DP83848_STATUS_READ_ERROR if connot read register - * DP83848_STATUS_WRITE_ERROR if connot write to register - */ -int32_t DP83848_GetLinkState(dp83848_Object_t *pObj) -{ - 8001876: b580 push {r7, lr} - 8001878: b084 sub sp, #16 - 800187a: af00 add r7, sp, #0 - 800187c: 6078 str r0, [r7, #4] - uint32_t readval = 0; - 800187e: 2300 movs r3, #0 - 8001880: 60fb str r3, [r7, #12] - - /* Read Status register */ - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_BSR, &readval) < 0) - 8001882: 687b ldr r3, [r7, #4] - 8001884: 695b ldr r3, [r3, #20] - 8001886: 687a ldr r2, [r7, #4] - 8001888: 6810 ldr r0, [r2, #0] - 800188a: f107 020c add.w r2, r7, #12 - 800188e: 2101 movs r1, #1 - 8001890: 4798 blx r3 - 8001892: 4603 mov r3, r0 - 8001894: 2b00 cmp r3, #0 - 8001896: da02 bge.n 800189e - { - return DP83848_STATUS_READ_ERROR; - 8001898: f06f 0304 mvn.w r3, #4 - 800189c: e06e b.n 800197c - } - - /* Read Status register again */ - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_BSR, &readval) < 0) - 800189e: 687b ldr r3, [r7, #4] - 80018a0: 695b ldr r3, [r3, #20] - 80018a2: 687a ldr r2, [r7, #4] - 80018a4: 6810 ldr r0, [r2, #0] - 80018a6: f107 020c add.w r2, r7, #12 - 80018aa: 2101 movs r1, #1 - 80018ac: 4798 blx r3 - 80018ae: 4603 mov r3, r0 - 80018b0: 2b00 cmp r3, #0 - 80018b2: da02 bge.n 80018ba - { - return DP83848_STATUS_READ_ERROR; - 80018b4: f06f 0304 mvn.w r3, #4 - 80018b8: e060 b.n 800197c - } - - if((readval & DP83848_BSR_LINK_STATUS) == 0) - 80018ba: 68fb ldr r3, [r7, #12] - 80018bc: f003 0304 and.w r3, r3, #4 - 80018c0: 2b00 cmp r3, #0 - 80018c2: d101 bne.n 80018c8 - { - /* Return Link Down status */ - return DP83848_STATUS_LINK_DOWN; - 80018c4: 2301 movs r3, #1 - 80018c6: e059 b.n 800197c - } - - /* Check Auto negotiaition */ - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_BCR, &readval) < 0) - 80018c8: 687b ldr r3, [r7, #4] - 80018ca: 695b ldr r3, [r3, #20] - 80018cc: 687a ldr r2, [r7, #4] - 80018ce: 6810 ldr r0, [r2, #0] - 80018d0: f107 020c add.w r2, r7, #12 - 80018d4: 2100 movs r1, #0 - 80018d6: 4798 blx r3 - 80018d8: 4603 mov r3, r0 - 80018da: 2b00 cmp r3, #0 - 80018dc: da02 bge.n 80018e4 - { - return DP83848_STATUS_READ_ERROR; - 80018de: f06f 0304 mvn.w r3, #4 - 80018e2: e04b b.n 800197c - } - - if((readval & DP83848_BCR_AUTONEGO_EN) != DP83848_BCR_AUTONEGO_EN) - 80018e4: 68fb ldr r3, [r7, #12] - 80018e6: f403 5380 and.w r3, r3, #4096 ; 0x1000 - 80018ea: 2b00 cmp r3, #0 - 80018ec: d11b bne.n 8001926 - { - if(((readval & DP83848_BCR_SPEED_SELECT) == DP83848_BCR_SPEED_SELECT) && ((readval & DP83848_BCR_DUPLEX_MODE) == DP83848_BCR_DUPLEX_MODE)) - 80018ee: 68fb ldr r3, [r7, #12] - 80018f0: f403 5300 and.w r3, r3, #8192 ; 0x2000 - 80018f4: 2b00 cmp r3, #0 - 80018f6: d006 beq.n 8001906 - 80018f8: 68fb ldr r3, [r7, #12] - 80018fa: f403 7380 and.w r3, r3, #256 ; 0x100 - 80018fe: 2b00 cmp r3, #0 - 8001900: d001 beq.n 8001906 - { - return DP83848_STATUS_100MBITS_FULLDUPLEX; - 8001902: 2302 movs r3, #2 - 8001904: e03a b.n 800197c - } - else if ((readval & DP83848_BCR_SPEED_SELECT) == DP83848_BCR_SPEED_SELECT) - 8001906: 68fb ldr r3, [r7, #12] - 8001908: f403 5300 and.w r3, r3, #8192 ; 0x2000 - 800190c: 2b00 cmp r3, #0 - 800190e: d001 beq.n 8001914 - { - return DP83848_STATUS_100MBITS_HALFDUPLEX; - 8001910: 2303 movs r3, #3 - 8001912: e033 b.n 800197c - } - else if ((readval & DP83848_BCR_DUPLEX_MODE) == DP83848_BCR_DUPLEX_MODE) - 8001914: 68fb ldr r3, [r7, #12] - 8001916: f403 7380 and.w r3, r3, #256 ; 0x100 - 800191a: 2b00 cmp r3, #0 - 800191c: d001 beq.n 8001922 - { - return DP83848_STATUS_10MBITS_FULLDUPLEX; - 800191e: 2304 movs r3, #4 - 8001920: e02c b.n 800197c - } - else - { - return DP83848_STATUS_10MBITS_HALFDUPLEX; - 8001922: 2305 movs r3, #5 - 8001924: e02a b.n 800197c - } - } - else /* Auto Nego enabled */ - { - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_PHYSCSR, &readval) < 0) - 8001926: 687b ldr r3, [r7, #4] - 8001928: 695b ldr r3, [r3, #20] - 800192a: 687a ldr r2, [r7, #4] - 800192c: 6810 ldr r0, [r2, #0] - 800192e: f107 020c add.w r2, r7, #12 - 8001932: 2110 movs r1, #16 - 8001934: 4798 blx r3 - 8001936: 4603 mov r3, r0 - 8001938: 2b00 cmp r3, #0 - 800193a: da02 bge.n 8001942 - { - return DP83848_STATUS_READ_ERROR; - 800193c: f06f 0304 mvn.w r3, #4 - 8001940: e01c b.n 800197c - } - - /* Check if auto nego not done */ - if((readval & DP83848_PHYSCSR_AUTONEGO_DONE) == 0) - 8001942: 68fb ldr r3, [r7, #12] - 8001944: f403 7380 and.w r3, r3, #256 ; 0x100 - 8001948: 2b00 cmp r3, #0 - 800194a: d101 bne.n 8001950 - { - return DP83848_STATUS_AUTONEGO_NOTDONE; - 800194c: 2306 movs r3, #6 - 800194e: e015 b.n 800197c - } - - if((readval & DP83848_PHYSCSR_HCDSPEEDMASK) == DP83848_PHYSCSR_100BTX_FD) - 8001950: 68fb ldr r3, [r7, #12] - 8001952: f003 0306 and.w r3, r3, #6 - 8001956: 2b04 cmp r3, #4 - 8001958: d101 bne.n 800195e - { - return DP83848_STATUS_100MBITS_FULLDUPLEX; - 800195a: 2302 movs r3, #2 - 800195c: e00e b.n 800197c - } - else if ((readval & DP83848_PHYSCSR_HCDSPEEDMASK) == DP83848_PHYSCSR_100BTX_HD) - 800195e: 68fb ldr r3, [r7, #12] - 8001960: f003 0306 and.w r3, r3, #6 - 8001964: 2b00 cmp r3, #0 - 8001966: d101 bne.n 800196c - { - return DP83848_STATUS_100MBITS_HALFDUPLEX; - 8001968: 2303 movs r3, #3 - 800196a: e007 b.n 800197c - } - else if ((readval & DP83848_PHYSCSR_HCDSPEEDMASK) == DP83848_PHYSCSR_10BT_FD) - 800196c: 68fb ldr r3, [r7, #12] - 800196e: f003 0306 and.w r3, r3, #6 - 8001972: 2b06 cmp r3, #6 - 8001974: d101 bne.n 800197a - { - return DP83848_STATUS_10MBITS_FULLDUPLEX; - 8001976: 2304 movs r3, #4 - 8001978: e000 b.n 800197c - } - else - { - return DP83848_STATUS_10MBITS_HALFDUPLEX; - 800197a: 2305 movs r3, #5 - } - } -} - 800197c: 4618 mov r0, r3 - 800197e: 3710 adds r7, #16 - 8001980: 46bd mov sp, r7 - 8001982: bd80 pop {r7, pc} - -08001984 : - * need to ensure that the SysTick time base is always set to 1 millisecond - * to have correct HAL operation. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_Init(void) -{ - 8001984: b580 push {r7, lr} - 8001986: af00 add r7, sp, #0 - /* Configure Flash prefetch, Instruction cache, Data cache */ -#if (INSTRUCTION_CACHE_ENABLE != 0U) - __HAL_FLASH_INSTRUCTION_CACHE_ENABLE(); - 8001988: 4b0e ldr r3, [pc, #56] ; (80019c4 ) - 800198a: 681b ldr r3, [r3, #0] - 800198c: 4a0d ldr r2, [pc, #52] ; (80019c4 ) - 800198e: f443 7300 orr.w r3, r3, #512 ; 0x200 - 8001992: 6013 str r3, [r2, #0] -#endif /* INSTRUCTION_CACHE_ENABLE */ - -#if (DATA_CACHE_ENABLE != 0U) - __HAL_FLASH_DATA_CACHE_ENABLE(); - 8001994: 4b0b ldr r3, [pc, #44] ; (80019c4 ) - 8001996: 681b ldr r3, [r3, #0] - 8001998: 4a0a ldr r2, [pc, #40] ; (80019c4 ) - 800199a: f443 6380 orr.w r3, r3, #1024 ; 0x400 - 800199e: 6013 str r3, [r2, #0] -#endif /* DATA_CACHE_ENABLE */ - -#if (PREFETCH_ENABLE != 0U) - __HAL_FLASH_PREFETCH_BUFFER_ENABLE(); - 80019a0: 4b08 ldr r3, [pc, #32] ; (80019c4 ) - 80019a2: 681b ldr r3, [r3, #0] - 80019a4: 4a07 ldr r2, [pc, #28] ; (80019c4 ) - 80019a6: f443 7380 orr.w r3, r3, #256 ; 0x100 - 80019aa: 6013 str r3, [r2, #0] -#endif /* PREFETCH_ENABLE */ - - /* Set Interrupt Group Priority */ - HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); - 80019ac: 2003 movs r0, #3 - 80019ae: f000 f94f bl 8001c50 - - /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */ - HAL_InitTick(TICK_INT_PRIORITY); - 80019b2: 200f movs r0, #15 - 80019b4: f000 f808 bl 80019c8 - - /* Init the low level hardware */ - HAL_MspInit(); - 80019b8: f7ff fd44 bl 8001444 - - /* Return function status */ - return HAL_OK; - 80019bc: 2300 movs r3, #0 -} - 80019be: 4618 mov r0, r3 - 80019c0: bd80 pop {r7, pc} - 80019c2: bf00 nop - 80019c4: 40023c00 .word 0x40023c00 - -080019c8 : - * implementation in user file. - * @param TickPriority Tick interrupt priority. - * @retval HAL status - */ -__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) -{ - 80019c8: b580 push {r7, lr} - 80019ca: b082 sub sp, #8 - 80019cc: af00 add r7, sp, #0 - 80019ce: 6078 str r0, [r7, #4] - /* Configure the SysTick to have interrupt in 1ms time basis*/ - if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) - 80019d0: 4b12 ldr r3, [pc, #72] ; (8001a1c ) - 80019d2: 681a ldr r2, [r3, #0] - 80019d4: 4b12 ldr r3, [pc, #72] ; (8001a20 ) - 80019d6: 781b ldrb r3, [r3, #0] - 80019d8: 4619 mov r1, r3 - 80019da: f44f 737a mov.w r3, #1000 ; 0x3e8 - 80019de: fbb3 f3f1 udiv r3, r3, r1 - 80019e2: fbb2 f3f3 udiv r3, r2, r3 - 80019e6: 4618 mov r0, r3 - 80019e8: f000 f967 bl 8001cba - 80019ec: 4603 mov r3, r0 - 80019ee: 2b00 cmp r3, #0 - 80019f0: d001 beq.n 80019f6 - { - return HAL_ERROR; - 80019f2: 2301 movs r3, #1 - 80019f4: e00e b.n 8001a14 - } - - /* Configure the SysTick IRQ priority */ - if (TickPriority < (1UL << __NVIC_PRIO_BITS)) - 80019f6: 687b ldr r3, [r7, #4] - 80019f8: 2b0f cmp r3, #15 - 80019fa: d80a bhi.n 8001a12 - { - HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U); - 80019fc: 2200 movs r2, #0 - 80019fe: 6879 ldr r1, [r7, #4] - 8001a00: f04f 30ff mov.w r0, #4294967295 - 8001a04: f000 f92f bl 8001c66 - uwTickPrio = TickPriority; - 8001a08: 4a06 ldr r2, [pc, #24] ; (8001a24 ) - 8001a0a: 687b ldr r3, [r7, #4] - 8001a0c: 6013 str r3, [r2, #0] - { - return HAL_ERROR; - } - - /* Return function status */ - return HAL_OK; - 8001a0e: 2300 movs r3, #0 - 8001a10: e000 b.n 8001a14 - return HAL_ERROR; - 8001a12: 2301 movs r3, #1 -} - 8001a14: 4618 mov r0, r3 - 8001a16: 3708 adds r7, #8 - 8001a18: 46bd mov sp, r7 - 8001a1a: bd80 pop {r7, pc} - 8001a1c: 20000000 .word 0x20000000 - 8001a20: 20000008 .word 0x20000008 - 8001a24: 20000004 .word 0x20000004 - -08001a28 : - * @note This function is declared as __weak to be overwritten in case of other - * implementations in user file. - * @retval None - */ -__weak void HAL_IncTick(void) -{ - 8001a28: b480 push {r7} - 8001a2a: af00 add r7, sp, #0 - uwTick += uwTickFreq; - 8001a2c: 4b06 ldr r3, [pc, #24] ; (8001a48 ) - 8001a2e: 781b ldrb r3, [r3, #0] - 8001a30: 461a mov r2, r3 - 8001a32: 4b06 ldr r3, [pc, #24] ; (8001a4c ) - 8001a34: 681b ldr r3, [r3, #0] - 8001a36: 4413 add r3, r2 - 8001a38: 4a04 ldr r2, [pc, #16] ; (8001a4c ) - 8001a3a: 6013 str r3, [r2, #0] -} - 8001a3c: bf00 nop - 8001a3e: 46bd mov sp, r7 - 8001a40: f85d 7b04 ldr.w r7, [sp], #4 - 8001a44: 4770 bx lr - 8001a46: bf00 nop - 8001a48: 20000008 .word 0x20000008 - 8001a4c: 20001824 .word 0x20001824 - -08001a50 : - * @note This function is declared as __weak to be overwritten in case of other - * implementations in user file. - * @retval tick value - */ -__weak uint32_t HAL_GetTick(void) -{ - 8001a50: b480 push {r7} - 8001a52: af00 add r7, sp, #0 - return uwTick; - 8001a54: 4b03 ldr r3, [pc, #12] ; (8001a64 ) - 8001a56: 681b ldr r3, [r3, #0] -} - 8001a58: 4618 mov r0, r3 - 8001a5a: 46bd mov sp, r7 - 8001a5c: f85d 7b04 ldr.w r7, [sp], #4 - 8001a60: 4770 bx lr - 8001a62: bf00 nop - 8001a64: 20001824 .word 0x20001824 - -08001a68 : - * implementations in user file. - * @param Delay specifies the delay time length, in milliseconds. - * @retval None - */ -__weak void HAL_Delay(uint32_t Delay) -{ - 8001a68: b580 push {r7, lr} - 8001a6a: b084 sub sp, #16 - 8001a6c: af00 add r7, sp, #0 - 8001a6e: 6078 str r0, [r7, #4] - uint32_t tickstart = HAL_GetTick(); - 8001a70: f7ff ffee bl 8001a50 - 8001a74: 60b8 str r0, [r7, #8] - uint32_t wait = Delay; - 8001a76: 687b ldr r3, [r7, #4] - 8001a78: 60fb str r3, [r7, #12] - - /* Add a freq to guarantee minimum wait */ - if (wait < HAL_MAX_DELAY) - 8001a7a: 68fb ldr r3, [r7, #12] - 8001a7c: f1b3 3fff cmp.w r3, #4294967295 - 8001a80: d005 beq.n 8001a8e - { - wait += (uint32_t)(uwTickFreq); - 8001a82: 4b0a ldr r3, [pc, #40] ; (8001aac ) - 8001a84: 781b ldrb r3, [r3, #0] - 8001a86: 461a mov r2, r3 - 8001a88: 68fb ldr r3, [r7, #12] - 8001a8a: 4413 add r3, r2 - 8001a8c: 60fb str r3, [r7, #12] - } - - while((HAL_GetTick() - tickstart) < wait) - 8001a8e: bf00 nop - 8001a90: f7ff ffde bl 8001a50 - 8001a94: 4602 mov r2, r0 - 8001a96: 68bb ldr r3, [r7, #8] - 8001a98: 1ad3 subs r3, r2, r3 - 8001a9a: 68fa ldr r2, [r7, #12] - 8001a9c: 429a cmp r2, r3 - 8001a9e: d8f7 bhi.n 8001a90 - { - } -} - 8001aa0: bf00 nop - 8001aa2: bf00 nop - 8001aa4: 3710 adds r7, #16 - 8001aa6: 46bd mov sp, r7 - 8001aa8: bd80 pop {r7, pc} - 8001aaa: bf00 nop - 8001aac: 20000008 .word 0x20000008 - -08001ab0 <__NVIC_SetPriorityGrouping>: - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Priority grouping field. - */ -__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) -{ - 8001ab0: b480 push {r7} - 8001ab2: b085 sub sp, #20 - 8001ab4: af00 add r7, sp, #0 - 8001ab6: 6078 str r0, [r7, #4] - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - 8001ab8: 687b ldr r3, [r7, #4] - 8001aba: f003 0307 and.w r3, r3, #7 - 8001abe: 60fb str r3, [r7, #12] - - reg_value = SCB->AIRCR; /* read old register configuration */ - 8001ac0: 4b0c ldr r3, [pc, #48] ; (8001af4 <__NVIC_SetPriorityGrouping+0x44>) - 8001ac2: 68db ldr r3, [r3, #12] - 8001ac4: 60bb str r3, [r7, #8] - reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ - 8001ac6: 68ba ldr r2, [r7, #8] - 8001ac8: f64f 03ff movw r3, #63743 ; 0xf8ff - 8001acc: 4013 ands r3, r2 - 8001ace: 60bb str r3, [r7, #8] - reg_value = (reg_value | - ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ - 8001ad0: 68fb ldr r3, [r7, #12] - 8001ad2: 021a lsls r2, r3, #8 - ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - 8001ad4: 68bb ldr r3, [r7, #8] - 8001ad6: 4313 orrs r3, r2 - reg_value = (reg_value | - 8001ad8: f043 63bf orr.w r3, r3, #100139008 ; 0x5f80000 - 8001adc: f443 3300 orr.w r3, r3, #131072 ; 0x20000 - 8001ae0: 60bb str r3, [r7, #8] - SCB->AIRCR = reg_value; - 8001ae2: 4a04 ldr r2, [pc, #16] ; (8001af4 <__NVIC_SetPriorityGrouping+0x44>) - 8001ae4: 68bb ldr r3, [r7, #8] - 8001ae6: 60d3 str r3, [r2, #12] -} - 8001ae8: bf00 nop - 8001aea: 3714 adds r7, #20 - 8001aec: 46bd mov sp, r7 - 8001aee: f85d 7b04 ldr.w r7, [sp], #4 - 8001af2: 4770 bx lr - 8001af4: e000ed00 .word 0xe000ed00 - -08001af8 <__NVIC_GetPriorityGrouping>: - \brief Get Priority Grouping - \details Reads the priority grouping field from the NVIC Interrupt Controller. - \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). - */ -__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) -{ - 8001af8: b480 push {r7} - 8001afa: af00 add r7, sp, #0 - return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); - 8001afc: 4b04 ldr r3, [pc, #16] ; (8001b10 <__NVIC_GetPriorityGrouping+0x18>) - 8001afe: 68db ldr r3, [r3, #12] - 8001b00: 0a1b lsrs r3, r3, #8 - 8001b02: f003 0307 and.w r3, r3, #7 -} - 8001b06: 4618 mov r0, r3 - 8001b08: 46bd mov sp, r7 - 8001b0a: f85d 7b04 ldr.w r7, [sp], #4 - 8001b0e: 4770 bx lr - 8001b10: e000ed00 .word 0xe000ed00 - -08001b14 <__NVIC_EnableIRQ>: - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - 8001b14: b480 push {r7} - 8001b16: b083 sub sp, #12 - 8001b18: af00 add r7, sp, #0 - 8001b1a: 4603 mov r3, r0 - 8001b1c: 71fb strb r3, [r7, #7] - if ((int32_t)(IRQn) >= 0) - 8001b1e: f997 3007 ldrsb.w r3, [r7, #7] - 8001b22: 2b00 cmp r3, #0 - 8001b24: db0b blt.n 8001b3e <__NVIC_EnableIRQ+0x2a> - { - NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - 8001b26: 79fb ldrb r3, [r7, #7] - 8001b28: f003 021f and.w r2, r3, #31 - 8001b2c: 4907 ldr r1, [pc, #28] ; (8001b4c <__NVIC_EnableIRQ+0x38>) - 8001b2e: f997 3007 ldrsb.w r3, [r7, #7] - 8001b32: 095b lsrs r3, r3, #5 - 8001b34: 2001 movs r0, #1 - 8001b36: fa00 f202 lsl.w r2, r0, r2 - 8001b3a: f841 2023 str.w r2, [r1, r3, lsl #2] - } -} - 8001b3e: bf00 nop - 8001b40: 370c adds r7, #12 - 8001b42: 46bd mov sp, r7 - 8001b44: f85d 7b04 ldr.w r7, [sp], #4 - 8001b48: 4770 bx lr - 8001b4a: bf00 nop - 8001b4c: e000e100 .word 0xe000e100 - -08001b50 <__NVIC_SetPriority>: - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - 8001b50: b480 push {r7} - 8001b52: b083 sub sp, #12 - 8001b54: af00 add r7, sp, #0 - 8001b56: 4603 mov r3, r0 - 8001b58: 6039 str r1, [r7, #0] - 8001b5a: 71fb strb r3, [r7, #7] - if ((int32_t)(IRQn) >= 0) - 8001b5c: f997 3007 ldrsb.w r3, [r7, #7] - 8001b60: 2b00 cmp r3, #0 - 8001b62: db0a blt.n 8001b7a <__NVIC_SetPriority+0x2a> - { - NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - 8001b64: 683b ldr r3, [r7, #0] - 8001b66: b2da uxtb r2, r3 - 8001b68: 490c ldr r1, [pc, #48] ; (8001b9c <__NVIC_SetPriority+0x4c>) - 8001b6a: f997 3007 ldrsb.w r3, [r7, #7] - 8001b6e: 0112 lsls r2, r2, #4 - 8001b70: b2d2 uxtb r2, r2 - 8001b72: 440b add r3, r1 - 8001b74: f883 2300 strb.w r2, [r3, #768] ; 0x300 - } - else - { - SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } -} - 8001b78: e00a b.n 8001b90 <__NVIC_SetPriority+0x40> - SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - 8001b7a: 683b ldr r3, [r7, #0] - 8001b7c: b2da uxtb r2, r3 - 8001b7e: 4908 ldr r1, [pc, #32] ; (8001ba0 <__NVIC_SetPriority+0x50>) - 8001b80: 79fb ldrb r3, [r7, #7] - 8001b82: f003 030f and.w r3, r3, #15 - 8001b86: 3b04 subs r3, #4 - 8001b88: 0112 lsls r2, r2, #4 - 8001b8a: b2d2 uxtb r2, r2 - 8001b8c: 440b add r3, r1 - 8001b8e: 761a strb r2, [r3, #24] -} - 8001b90: bf00 nop - 8001b92: 370c adds r7, #12 - 8001b94: 46bd mov sp, r7 - 8001b96: f85d 7b04 ldr.w r7, [sp], #4 - 8001b9a: 4770 bx lr - 8001b9c: e000e100 .word 0xe000e100 - 8001ba0: e000ed00 .word 0xe000ed00 - -08001ba4 : - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - 8001ba4: b480 push {r7} - 8001ba6: b089 sub sp, #36 ; 0x24 - 8001ba8: af00 add r7, sp, #0 - 8001baa: 60f8 str r0, [r7, #12] - 8001bac: 60b9 str r1, [r7, #8] - 8001bae: 607a str r2, [r7, #4] - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - 8001bb0: 68fb ldr r3, [r7, #12] - 8001bb2: f003 0307 and.w r3, r3, #7 - 8001bb6: 61fb str r3, [r7, #28] - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - 8001bb8: 69fb ldr r3, [r7, #28] - 8001bba: f1c3 0307 rsb r3, r3, #7 - 8001bbe: 2b04 cmp r3, #4 - 8001bc0: bf28 it cs - 8001bc2: 2304 movcs r3, #4 - 8001bc4: 61bb str r3, [r7, #24] - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - 8001bc6: 69fb ldr r3, [r7, #28] - 8001bc8: 3304 adds r3, #4 - 8001bca: 2b06 cmp r3, #6 - 8001bcc: d902 bls.n 8001bd4 - 8001bce: 69fb ldr r3, [r7, #28] - 8001bd0: 3b03 subs r3, #3 - 8001bd2: e000 b.n 8001bd6 - 8001bd4: 2300 movs r3, #0 - 8001bd6: 617b str r3, [r7, #20] - - return ( - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - 8001bd8: f04f 32ff mov.w r2, #4294967295 - 8001bdc: 69bb ldr r3, [r7, #24] - 8001bde: fa02 f303 lsl.w r3, r2, r3 - 8001be2: 43da mvns r2, r3 - 8001be4: 68bb ldr r3, [r7, #8] - 8001be6: 401a ands r2, r3 - 8001be8: 697b ldr r3, [r7, #20] - 8001bea: 409a lsls r2, r3 - ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - 8001bec: f04f 31ff mov.w r1, #4294967295 - 8001bf0: 697b ldr r3, [r7, #20] - 8001bf2: fa01 f303 lsl.w r3, r1, r3 - 8001bf6: 43d9 mvns r1, r3 - 8001bf8: 687b ldr r3, [r7, #4] - 8001bfa: 400b ands r3, r1 - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - 8001bfc: 4313 orrs r3, r2 - ); -} - 8001bfe: 4618 mov r0, r3 - 8001c00: 3724 adds r7, #36 ; 0x24 - 8001c02: 46bd mov sp, r7 - 8001c04: f85d 7b04 ldr.w r7, [sp], #4 - 8001c08: 4770 bx lr - ... - -08001c0c : - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - 8001c0c: b580 push {r7, lr} - 8001c0e: b082 sub sp, #8 - 8001c10: af00 add r7, sp, #0 - 8001c12: 6078 str r0, [r7, #4] - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - 8001c14: 687b ldr r3, [r7, #4] - 8001c16: 3b01 subs r3, #1 - 8001c18: f1b3 7f80 cmp.w r3, #16777216 ; 0x1000000 - 8001c1c: d301 bcc.n 8001c22 - { - return (1UL); /* Reload value impossible */ - 8001c1e: 2301 movs r3, #1 - 8001c20: e00f b.n 8001c42 - } - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - 8001c22: 4a0a ldr r2, [pc, #40] ; (8001c4c ) - 8001c24: 687b ldr r3, [r7, #4] - 8001c26: 3b01 subs r3, #1 - 8001c28: 6053 str r3, [r2, #4] - NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - 8001c2a: 210f movs r1, #15 - 8001c2c: f04f 30ff mov.w r0, #4294967295 - 8001c30: f7ff ff8e bl 8001b50 <__NVIC_SetPriority> - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - 8001c34: 4b05 ldr r3, [pc, #20] ; (8001c4c ) - 8001c36: 2200 movs r2, #0 - 8001c38: 609a str r2, [r3, #8] - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - 8001c3a: 4b04 ldr r3, [pc, #16] ; (8001c4c ) - 8001c3c: 2207 movs r2, #7 - 8001c3e: 601a str r2, [r3, #0] - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ - 8001c40: 2300 movs r3, #0 -} - 8001c42: 4618 mov r0, r3 - 8001c44: 3708 adds r7, #8 - 8001c46: 46bd mov sp, r7 - 8001c48: bd80 pop {r7, pc} - 8001c4a: bf00 nop - 8001c4c: e000e010 .word 0xe000e010 - -08001c50 : - * @note When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible. - * The pending IRQ priority will be managed only by the subpriority. - * @retval None - */ -void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup) -{ - 8001c50: b580 push {r7, lr} - 8001c52: b082 sub sp, #8 - 8001c54: af00 add r7, sp, #0 - 8001c56: 6078 str r0, [r7, #4] - /* Check the parameters */ - assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup)); - - /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */ - NVIC_SetPriorityGrouping(PriorityGroup); - 8001c58: 6878 ldr r0, [r7, #4] - 8001c5a: f7ff ff29 bl 8001ab0 <__NVIC_SetPriorityGrouping> -} - 8001c5e: bf00 nop - 8001c60: 3708 adds r7, #8 - 8001c62: 46bd mov sp, r7 - 8001c64: bd80 pop {r7, pc} - -08001c66 : - * This parameter can be a value between 0 and 15 - * A lower priority value indicates a higher priority. - * @retval None - */ -void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) -{ - 8001c66: b580 push {r7, lr} - 8001c68: b086 sub sp, #24 - 8001c6a: af00 add r7, sp, #0 - 8001c6c: 4603 mov r3, r0 - 8001c6e: 60b9 str r1, [r7, #8] - 8001c70: 607a str r2, [r7, #4] - 8001c72: 73fb strb r3, [r7, #15] - uint32_t prioritygroup = 0x00U; - 8001c74: 2300 movs r3, #0 - 8001c76: 617b str r3, [r7, #20] - - /* Check the parameters */ - assert_param(IS_NVIC_SUB_PRIORITY(SubPriority)); - assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority)); - - prioritygroup = NVIC_GetPriorityGrouping(); - 8001c78: f7ff ff3e bl 8001af8 <__NVIC_GetPriorityGrouping> - 8001c7c: 6178 str r0, [r7, #20] - - NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority)); - 8001c7e: 687a ldr r2, [r7, #4] - 8001c80: 68b9 ldr r1, [r7, #8] - 8001c82: 6978 ldr r0, [r7, #20] - 8001c84: f7ff ff8e bl 8001ba4 - 8001c88: 4602 mov r2, r0 - 8001c8a: f997 300f ldrsb.w r3, [r7, #15] - 8001c8e: 4611 mov r1, r2 - 8001c90: 4618 mov r0, r3 - 8001c92: f7ff ff5d bl 8001b50 <__NVIC_SetPriority> -} - 8001c96: bf00 nop - 8001c98: 3718 adds r7, #24 - 8001c9a: 46bd mov sp, r7 - 8001c9c: bd80 pop {r7, pc} - -08001c9e : - * This parameter can be an enumerator of IRQn_Type enumeration - * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) - * @retval None - */ -void HAL_NVIC_EnableIRQ(IRQn_Type IRQn) -{ - 8001c9e: b580 push {r7, lr} - 8001ca0: b082 sub sp, #8 - 8001ca2: af00 add r7, sp, #0 - 8001ca4: 4603 mov r3, r0 - 8001ca6: 71fb strb r3, [r7, #7] - /* Check the parameters */ - assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); - - /* Enable interrupt */ - NVIC_EnableIRQ(IRQn); - 8001ca8: f997 3007 ldrsb.w r3, [r7, #7] - 8001cac: 4618 mov r0, r3 - 8001cae: f7ff ff31 bl 8001b14 <__NVIC_EnableIRQ> -} - 8001cb2: bf00 nop - 8001cb4: 3708 adds r7, #8 - 8001cb6: 46bd mov sp, r7 - 8001cb8: bd80 pop {r7, pc} - -08001cba : - * @param TicksNumb Specifies the ticks Number of ticks between two interrupts. - * @retval status: - 0 Function succeeded. - * - 1 Function failed. - */ -uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb) -{ - 8001cba: b580 push {r7, lr} - 8001cbc: b082 sub sp, #8 - 8001cbe: af00 add r7, sp, #0 - 8001cc0: 6078 str r0, [r7, #4] - return SysTick_Config(TicksNumb); - 8001cc2: 6878 ldr r0, [r7, #4] - 8001cc4: f7ff ffa2 bl 8001c0c - 8001cc8: 4603 mov r3, r0 -} - 8001cca: 4618 mov r0, r3 - 8001ccc: 3708 adds r7, #8 - 8001cce: 46bd mov sp, r7 - 8001cd0: bd80 pop {r7, pc} - ... - -08001cd4 : - * @param heth: pointer to a ETH_HandleTypeDef structure that contains - * the configuration information for ETHERNET module - * @retval HAL status - */ -HAL_StatusTypeDef HAL_ETH_Init(ETH_HandleTypeDef *heth) -{ - 8001cd4: b580 push {r7, lr} - 8001cd6: b084 sub sp, #16 - 8001cd8: af00 add r7, sp, #0 - 8001cda: 6078 str r0, [r7, #4] - uint32_t tickstart; - - if (heth == NULL) - 8001cdc: 687b ldr r3, [r7, #4] - 8001cde: 2b00 cmp r3, #0 - 8001ce0: d101 bne.n 8001ce6 - { - return HAL_ERROR; - 8001ce2: 2301 movs r3, #1 - 8001ce4: e06c b.n 8001dc0 - } - if (heth->gState == HAL_ETH_STATE_RESET) - 8001ce6: 687b ldr r3, [r7, #4] - 8001ce8: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84 - 8001cec: 2b00 cmp r3, #0 - 8001cee: d106 bne.n 8001cfe - { - heth->gState = HAL_ETH_STATE_BUSY; - 8001cf0: 687b ldr r3, [r7, #4] - 8001cf2: 2223 movs r2, #35 ; 0x23 - 8001cf4: f8c3 2084 str.w r2, [r3, #132] ; 0x84 - - /* Init the low level hardware */ - heth->MspInitCallback(heth); -#else - /* Init the low level hardware : GPIO, CLOCK, NVIC. */ - HAL_ETH_MspInit(heth); - 8001cf8: 6878 ldr r0, [r7, #4] - 8001cfa: f002 fee3 bl 8004ac4 - -#endif /* (USE_HAL_ETH_REGISTER_CALLBACKS) */ - } - - __HAL_RCC_SYSCFG_CLK_ENABLE(); - 8001cfe: 2300 movs r3, #0 - 8001d00: 60bb str r3, [r7, #8] - 8001d02: 4b31 ldr r3, [pc, #196] ; (8001dc8 ) - 8001d04: 6c5b ldr r3, [r3, #68] ; 0x44 - 8001d06: 4a30 ldr r2, [pc, #192] ; (8001dc8 ) - 8001d08: f443 4380 orr.w r3, r3, #16384 ; 0x4000 - 8001d0c: 6453 str r3, [r2, #68] ; 0x44 - 8001d0e: 4b2e ldr r3, [pc, #184] ; (8001dc8 ) - 8001d10: 6c5b ldr r3, [r3, #68] ; 0x44 - 8001d12: f403 4380 and.w r3, r3, #16384 ; 0x4000 - 8001d16: 60bb str r3, [r7, #8] - 8001d18: 68bb ldr r3, [r7, #8] - - /* Select MII or RMII Mode*/ - SYSCFG->PMC &= ~(SYSCFG_PMC_MII_RMII_SEL); - 8001d1a: 4b2c ldr r3, [pc, #176] ; (8001dcc ) - 8001d1c: 685b ldr r3, [r3, #4] - 8001d1e: 4a2b ldr r2, [pc, #172] ; (8001dcc ) - 8001d20: f423 0300 bic.w r3, r3, #8388608 ; 0x800000 - 8001d24: 6053 str r3, [r2, #4] - SYSCFG->PMC |= (uint32_t)heth->Init.MediaInterface; - 8001d26: 4b29 ldr r3, [pc, #164] ; (8001dcc ) - 8001d28: 685a ldr r2, [r3, #4] - 8001d2a: 687b ldr r3, [r7, #4] - 8001d2c: 689b ldr r3, [r3, #8] - 8001d2e: 4927 ldr r1, [pc, #156] ; (8001dcc ) - 8001d30: 4313 orrs r3, r2 - 8001d32: 604b str r3, [r1, #4] - /* Dummy read to sync SYSCFG with ETH */ - (void)SYSCFG->PMC; - 8001d34: 4b25 ldr r3, [pc, #148] ; (8001dcc ) - 8001d36: 685b ldr r3, [r3, #4] - - /* Ethernet Software reset */ - /* Set the SWR bit: resets all MAC subsystem internal registers and logic */ - /* After reset all the registers holds their respective reset values */ - SET_BIT(heth->Instance->DMABMR, ETH_DMABMR_SR); - 8001d38: 687b ldr r3, [r7, #4] - 8001d3a: 681b ldr r3, [r3, #0] - 8001d3c: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 8001d40: 681b ldr r3, [r3, #0] - 8001d42: 687a ldr r2, [r7, #4] - 8001d44: 6812 ldr r2, [r2, #0] - 8001d46: f043 0301 orr.w r3, r3, #1 - 8001d4a: f502 5280 add.w r2, r2, #4096 ; 0x1000 - 8001d4e: 6013 str r3, [r2, #0] - - /* Get tick */ - tickstart = HAL_GetTick(); - 8001d50: f7ff fe7e bl 8001a50 - 8001d54: 60f8 str r0, [r7, #12] - - /* Wait for software reset */ - while (READ_BIT(heth->Instance->DMABMR, ETH_DMABMR_SR) > 0U) - 8001d56: e011 b.n 8001d7c - { - if (((HAL_GetTick() - tickstart) > ETH_SWRESET_TIMEOUT)) - 8001d58: f7ff fe7a bl 8001a50 - 8001d5c: 4602 mov r2, r0 - 8001d5e: 68fb ldr r3, [r7, #12] - 8001d60: 1ad3 subs r3, r2, r3 - 8001d62: f5b3 7ffa cmp.w r3, #500 ; 0x1f4 - 8001d66: d909 bls.n 8001d7c - { - /* Set Error Code */ - heth->ErrorCode = HAL_ETH_ERROR_TIMEOUT; - 8001d68: 687b ldr r3, [r7, #4] - 8001d6a: 2204 movs r2, #4 - 8001d6c: f8c3 2088 str.w r2, [r3, #136] ; 0x88 - /* Set State as Error */ - heth->gState = HAL_ETH_STATE_ERROR; - 8001d70: 687b ldr r3, [r7, #4] - 8001d72: 22e0 movs r2, #224 ; 0xe0 - 8001d74: f8c3 2084 str.w r2, [r3, #132] ; 0x84 - /* Return Error */ - return HAL_ERROR; - 8001d78: 2301 movs r3, #1 - 8001d7a: e021 b.n 8001dc0 - while (READ_BIT(heth->Instance->DMABMR, ETH_DMABMR_SR) > 0U) - 8001d7c: 687b ldr r3, [r7, #4] - 8001d7e: 681b ldr r3, [r3, #0] - 8001d80: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 8001d84: 681b ldr r3, [r3, #0] - 8001d86: f003 0301 and.w r3, r3, #1 - 8001d8a: 2b00 cmp r3, #0 - 8001d8c: d1e4 bne.n 8001d58 - } - } - - - /*------------------ MAC, MTL and DMA default Configuration ----------------*/ - ETH_MACDMAConfig(heth); - 8001d8e: 6878 ldr r0, [r7, #4] - 8001d90: f000 fdf0 bl 8002974 - - - /*------------------ DMA Tx Descriptors Configuration ----------------------*/ - ETH_DMATxDescListInit(heth); - 8001d94: 6878 ldr r0, [r7, #4] - 8001d96: f000 fe97 bl 8002ac8 - - /*------------------ DMA Rx Descriptors Configuration ----------------------*/ - ETH_DMARxDescListInit(heth); - 8001d9a: 6878 ldr r0, [r7, #4] - 8001d9c: f000 feed bl 8002b7a - - /*--------------------- ETHERNET MAC Address Configuration ------------------*/ - ETH_MACAddressConfig(heth, ETH_MAC_ADDRESS0, heth->Init.MACAddr); - 8001da0: 687b ldr r3, [r7, #4] - 8001da2: 685b ldr r3, [r3, #4] - 8001da4: 461a mov r2, r3 - 8001da6: 2100 movs r1, #0 - 8001da8: 6878 ldr r0, [r7, #4] - 8001daa: f000 fe55 bl 8002a58 - - heth->ErrorCode = HAL_ETH_ERROR_NONE; - 8001dae: 687b ldr r3, [r7, #4] - 8001db0: 2200 movs r2, #0 - 8001db2: f8c3 2088 str.w r2, [r3, #136] ; 0x88 - heth->gState = HAL_ETH_STATE_READY; - 8001db6: 687b ldr r3, [r7, #4] - 8001db8: 2210 movs r2, #16 - 8001dba: f8c3 2084 str.w r2, [r3, #132] ; 0x84 - - return HAL_OK; - 8001dbe: 2300 movs r3, #0 -} - 8001dc0: 4618 mov r0, r3 - 8001dc2: 3710 adds r7, #16 - 8001dc4: 46bd mov sp, r7 - 8001dc6: bd80 pop {r7, pc} - 8001dc8: 40023800 .word 0x40023800 - 8001dcc: 40013800 .word 0x40013800 - -08001dd0 : - * @param heth: pointer to a ETH_HandleTypeDef structure that contains - * the configuration information for ETHERNET module - * @retval HAL status - */ -HAL_StatusTypeDef HAL_ETH_Start(ETH_HandleTypeDef *heth) -{ - 8001dd0: b580 push {r7, lr} - 8001dd2: b084 sub sp, #16 - 8001dd4: af00 add r7, sp, #0 - 8001dd6: 6078 str r0, [r7, #4] - uint32_t tmpreg1; - - if (heth->gState == HAL_ETH_STATE_READY) - 8001dd8: 687b ldr r3, [r7, #4] - 8001dda: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84 - 8001dde: 2b10 cmp r3, #16 - 8001de0: d150 bne.n 8001e84 - { - heth->gState = HAL_ETH_STATE_BUSY; - 8001de2: 687b ldr r3, [r7, #4] - 8001de4: 2223 movs r2, #35 ; 0x23 - 8001de6: f8c3 2084 str.w r2, [r3, #132] ; 0x84 - - /* Set nombre of descriptors to build */ - heth->RxDescList.RxBuildDescCnt = ETH_RX_DESC_CNT; - 8001dea: 687b ldr r3, [r7, #4] - 8001dec: 2204 movs r2, #4 - 8001dee: 66da str r2, [r3, #108] ; 0x6c - - /* Build all descriptors */ - ETH_UpdateDescriptor(heth); - 8001df0: 6878 ldr r0, [r7, #4] - 8001df2: f000 f9fd bl 80021f0 - - /* Enable the MAC transmission */ - SET_BIT(heth->Instance->MACCR, ETH_MACCR_TE); - 8001df6: 687b ldr r3, [r7, #4] - 8001df8: 681b ldr r3, [r3, #0] - 8001dfa: 681a ldr r2, [r3, #0] - 8001dfc: 687b ldr r3, [r7, #4] - 8001dfe: 681b ldr r3, [r3, #0] - 8001e00: f042 0208 orr.w r2, r2, #8 - 8001e04: 601a str r2, [r3, #0] - - /* Wait until the write operation will be taken into account : - at least four TX_CLK/RX_CLK clock cycles */ - tmpreg1 = (heth->Instance)->MACCR; - 8001e06: 687b ldr r3, [r7, #4] - 8001e08: 681b ldr r3, [r3, #0] - 8001e0a: 681b ldr r3, [r3, #0] - 8001e0c: 60fb str r3, [r7, #12] - HAL_Delay(ETH_REG_WRITE_DELAY); - 8001e0e: 2001 movs r0, #1 - 8001e10: f7ff fe2a bl 8001a68 - (heth->Instance)->MACCR = tmpreg1; - 8001e14: 687b ldr r3, [r7, #4] - 8001e16: 681b ldr r3, [r3, #0] - 8001e18: 68fa ldr r2, [r7, #12] - 8001e1a: 601a str r2, [r3, #0] - - /* Enable the MAC reception */ - SET_BIT(heth->Instance->MACCR, ETH_MACCR_RE); - 8001e1c: 687b ldr r3, [r7, #4] - 8001e1e: 681b ldr r3, [r3, #0] - 8001e20: 681a ldr r2, [r3, #0] - 8001e22: 687b ldr r3, [r7, #4] - 8001e24: 681b ldr r3, [r3, #0] - 8001e26: f042 0204 orr.w r2, r2, #4 - 8001e2a: 601a str r2, [r3, #0] - - /* Wait until the write operation will be taken into account : - at least four TX_CLK/RX_CLK clock cycles */ - tmpreg1 = (heth->Instance)->MACCR; - 8001e2c: 687b ldr r3, [r7, #4] - 8001e2e: 681b ldr r3, [r3, #0] - 8001e30: 681b ldr r3, [r3, #0] - 8001e32: 60fb str r3, [r7, #12] - HAL_Delay(ETH_REG_WRITE_DELAY); - 8001e34: 2001 movs r0, #1 - 8001e36: f7ff fe17 bl 8001a68 - (heth->Instance)->MACCR = tmpreg1; - 8001e3a: 687b ldr r3, [r7, #4] - 8001e3c: 681b ldr r3, [r3, #0] - 8001e3e: 68fa ldr r2, [r7, #12] - 8001e40: 601a str r2, [r3, #0] - - /* Flush Transmit FIFO */ - ETH_FlushTransmitFIFO(heth); - 8001e42: 6878 ldr r0, [r7, #4] - 8001e44: f000 fc36 bl 80026b4 - - /* Enable the DMA transmission */ - SET_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_ST); - 8001e48: 687b ldr r3, [r7, #4] - 8001e4a: 681b ldr r3, [r3, #0] - 8001e4c: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 8001e50: 699b ldr r3, [r3, #24] - 8001e52: 687a ldr r2, [r7, #4] - 8001e54: 6812 ldr r2, [r2, #0] - 8001e56: f443 5300 orr.w r3, r3, #8192 ; 0x2000 - 8001e5a: f502 5280 add.w r2, r2, #4096 ; 0x1000 - 8001e5e: 6193 str r3, [r2, #24] - - /* Enable the DMA reception */ - SET_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_SR); - 8001e60: 687b ldr r3, [r7, #4] - 8001e62: 681b ldr r3, [r3, #0] - 8001e64: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 8001e68: 699b ldr r3, [r3, #24] - 8001e6a: 687a ldr r2, [r7, #4] - 8001e6c: 6812 ldr r2, [r2, #0] - 8001e6e: f043 0302 orr.w r3, r3, #2 - 8001e72: f502 5280 add.w r2, r2, #4096 ; 0x1000 - 8001e76: 6193 str r3, [r2, #24] - - heth->gState = HAL_ETH_STATE_STARTED; - 8001e78: 687b ldr r3, [r7, #4] - 8001e7a: 2223 movs r2, #35 ; 0x23 - 8001e7c: f8c3 2084 str.w r2, [r3, #132] ; 0x84 - - return HAL_OK; - 8001e80: 2300 movs r3, #0 - 8001e82: e000 b.n 8001e86 - } - else - { - return HAL_ERROR; - 8001e84: 2301 movs r3, #1 - } -} - 8001e86: 4618 mov r0, r3 - 8001e88: 3710 adds r7, #16 - 8001e8a: 46bd mov sp, r7 - 8001e8c: bd80 pop {r7, pc} - -08001e8e : - * @param heth: pointer to a ETH_HandleTypeDef structure that contains - * the configuration information for ETHERNET module - * @retval HAL status - */ -HAL_StatusTypeDef HAL_ETH_Stop(ETH_HandleTypeDef *heth) -{ - 8001e8e: b580 push {r7, lr} - 8001e90: b084 sub sp, #16 - 8001e92: af00 add r7, sp, #0 - 8001e94: 6078 str r0, [r7, #4] - uint32_t tmpreg1; - - if (heth->gState == HAL_ETH_STATE_STARTED) - 8001e96: 687b ldr r3, [r7, #4] - 8001e98: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84 - 8001e9c: 2b23 cmp r3, #35 ; 0x23 - 8001e9e: d14a bne.n 8001f36 - { - /* Set the ETH peripheral state to BUSY */ - heth->gState = HAL_ETH_STATE_BUSY; - 8001ea0: 687b ldr r3, [r7, #4] - 8001ea2: 2223 movs r2, #35 ; 0x23 - 8001ea4: f8c3 2084 str.w r2, [r3, #132] ; 0x84 - /* Disable the DMA transmission */ - CLEAR_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_ST); - 8001ea8: 687b ldr r3, [r7, #4] - 8001eaa: 681b ldr r3, [r3, #0] - 8001eac: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 8001eb0: 699b ldr r3, [r3, #24] - 8001eb2: 687a ldr r2, [r7, #4] - 8001eb4: 6812 ldr r2, [r2, #0] - 8001eb6: f423 5300 bic.w r3, r3, #8192 ; 0x2000 - 8001eba: f502 5280 add.w r2, r2, #4096 ; 0x1000 - 8001ebe: 6193 str r3, [r2, #24] - - /* Disable the DMA reception */ - CLEAR_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_SR); - 8001ec0: 687b ldr r3, [r7, #4] - 8001ec2: 681b ldr r3, [r3, #0] - 8001ec4: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 8001ec8: 699b ldr r3, [r3, #24] - 8001eca: 687a ldr r2, [r7, #4] - 8001ecc: 6812 ldr r2, [r2, #0] - 8001ece: f023 0302 bic.w r3, r3, #2 - 8001ed2: f502 5280 add.w r2, r2, #4096 ; 0x1000 - 8001ed6: 6193 str r3, [r2, #24] - - /* Disable the MAC reception */ - CLEAR_BIT(heth->Instance->MACCR, ETH_MACCR_RE); - 8001ed8: 687b ldr r3, [r7, #4] - 8001eda: 681b ldr r3, [r3, #0] - 8001edc: 681a ldr r2, [r3, #0] - 8001ede: 687b ldr r3, [r7, #4] - 8001ee0: 681b ldr r3, [r3, #0] - 8001ee2: f022 0204 bic.w r2, r2, #4 - 8001ee6: 601a str r2, [r3, #0] - - /* Wait until the write operation will be taken into account : - at least four TX_CLK/RX_CLK clock cycles */ - tmpreg1 = (heth->Instance)->MACCR; - 8001ee8: 687b ldr r3, [r7, #4] - 8001eea: 681b ldr r3, [r3, #0] - 8001eec: 681b ldr r3, [r3, #0] - 8001eee: 60fb str r3, [r7, #12] - HAL_Delay(ETH_REG_WRITE_DELAY); - 8001ef0: 2001 movs r0, #1 - 8001ef2: f7ff fdb9 bl 8001a68 - (heth->Instance)->MACCR = tmpreg1; - 8001ef6: 687b ldr r3, [r7, #4] - 8001ef8: 681b ldr r3, [r3, #0] - 8001efa: 68fa ldr r2, [r7, #12] - 8001efc: 601a str r2, [r3, #0] - - /* Flush Transmit FIFO */ - ETH_FlushTransmitFIFO(heth); - 8001efe: 6878 ldr r0, [r7, #4] - 8001f00: f000 fbd8 bl 80026b4 - - /* Disable the MAC transmission */ - CLEAR_BIT(heth->Instance->MACCR, ETH_MACCR_TE); - 8001f04: 687b ldr r3, [r7, #4] - 8001f06: 681b ldr r3, [r3, #0] - 8001f08: 681a ldr r2, [r3, #0] - 8001f0a: 687b ldr r3, [r7, #4] - 8001f0c: 681b ldr r3, [r3, #0] - 8001f0e: f022 0208 bic.w r2, r2, #8 - 8001f12: 601a str r2, [r3, #0] - - /* Wait until the write operation will be taken into account : - at least four TX_CLK/RX_CLK clock cycles */ - tmpreg1 = (heth->Instance)->MACCR; - 8001f14: 687b ldr r3, [r7, #4] - 8001f16: 681b ldr r3, [r3, #0] - 8001f18: 681b ldr r3, [r3, #0] - 8001f1a: 60fb str r3, [r7, #12] - HAL_Delay(ETH_REG_WRITE_DELAY); - 8001f1c: 2001 movs r0, #1 - 8001f1e: f7ff fda3 bl 8001a68 - (heth->Instance)->MACCR = tmpreg1; - 8001f22: 687b ldr r3, [r7, #4] - 8001f24: 681b ldr r3, [r3, #0] - 8001f26: 68fa ldr r2, [r7, #12] - 8001f28: 601a str r2, [r3, #0] - - heth->gState = HAL_ETH_STATE_READY; - 8001f2a: 687b ldr r3, [r7, #4] - 8001f2c: 2210 movs r2, #16 - 8001f2e: f8c3 2084 str.w r2, [r3, #132] ; 0x84 - - /* Return function status */ - return HAL_OK; - 8001f32: 2300 movs r3, #0 - 8001f34: e000 b.n 8001f38 - } - else - { - return HAL_ERROR; - 8001f36: 2301 movs r3, #1 - } -} - 8001f38: 4618 mov r0, r3 - 8001f3a: 3710 adds r7, #16 - 8001f3c: 46bd mov sp, r7 - 8001f3e: bd80 pop {r7, pc} - -08001f40 : - * @param pTxConfig: Hold the configuration of packet to be transmitted - * @param Timeout: timeout value - * @retval HAL status - */ -HAL_StatusTypeDef HAL_ETH_Transmit(ETH_HandleTypeDef *heth, ETH_TxPacketConfig *pTxConfig, uint32_t Timeout) -{ - 8001f40: b580 push {r7, lr} - 8001f42: b086 sub sp, #24 - 8001f44: af00 add r7, sp, #0 - 8001f46: 60f8 str r0, [r7, #12] - 8001f48: 60b9 str r1, [r7, #8] - 8001f4a: 607a str r2, [r7, #4] - uint32_t tickstart; - ETH_DMADescTypeDef *dmatxdesc; - - if (pTxConfig == NULL) - 8001f4c: 68bb ldr r3, [r7, #8] - 8001f4e: 2b00 cmp r3, #0 - 8001f50: d109 bne.n 8001f66 - { - heth->ErrorCode |= HAL_ETH_ERROR_PARAM; - 8001f52: 68fb ldr r3, [r7, #12] - 8001f54: f8d3 3088 ldr.w r3, [r3, #136] ; 0x88 - 8001f58: f043 0201 orr.w r2, r3, #1 - 8001f5c: 68fb ldr r3, [r7, #12] - 8001f5e: f8c3 2088 str.w r2, [r3, #136] ; 0x88 - return HAL_ERROR; - 8001f62: 2301 movs r3, #1 - 8001f64: e07c b.n 8002060 - } - - if (heth->gState == HAL_ETH_STATE_STARTED) - 8001f66: 68fb ldr r3, [r7, #12] - 8001f68: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84 - 8001f6c: 2b23 cmp r3, #35 ; 0x23 - 8001f6e: d176 bne.n 800205e - { - /* Config DMA Tx descriptor by Tx Packet info */ - if (ETH_Prepare_Tx_Descriptors(heth, pTxConfig, 0) != HAL_ETH_ERROR_NONE) - 8001f70: 2200 movs r2, #0 - 8001f72: 68b9 ldr r1, [r7, #8] - 8001f74: 68f8 ldr r0, [r7, #12] - 8001f76: f000 fe6d bl 8002c54 - 8001f7a: 4603 mov r3, r0 - 8001f7c: 2b00 cmp r3, #0 - 8001f7e: d009 beq.n 8001f94 - { - /* Set the ETH error code */ - heth->ErrorCode |= HAL_ETH_ERROR_BUSY; - 8001f80: 68fb ldr r3, [r7, #12] - 8001f82: f8d3 3088 ldr.w r3, [r3, #136] ; 0x88 - 8001f86: f043 0202 orr.w r2, r3, #2 - 8001f8a: 68fb ldr r3, [r7, #12] - 8001f8c: f8c3 2088 str.w r2, [r3, #136] ; 0x88 - return HAL_ERROR; - 8001f90: 2301 movs r3, #1 - 8001f92: e065 b.n 8002060 - \details Acts as a special kind of Data Memory Barrier. - It completes when all explicit memory accesses before this instruction complete. - */ -__STATIC_FORCEINLINE void __DSB(void) -{ - __ASM volatile ("dsb 0xF":::"memory"); - 8001f94: f3bf 8f4f dsb sy -} - 8001f98: bf00 nop - } - - /* Ensure completion of descriptor preparation before transmission start */ - __DSB(); - - dmatxdesc = (ETH_DMADescTypeDef *)(&heth->TxDescList)->TxDesc[heth->TxDescList.CurTxDesc]; - 8001f9a: 68fb ldr r3, [r7, #12] - 8001f9c: 6a9a ldr r2, [r3, #40] ; 0x28 - 8001f9e: 68fb ldr r3, [r7, #12] - 8001fa0: 3206 adds r2, #6 - 8001fa2: f853 3022 ldr.w r3, [r3, r2, lsl #2] - 8001fa6: 617b str r3, [r7, #20] - - /* Incr current tx desc index */ - INCR_TX_DESC_INDEX(heth->TxDescList.CurTxDesc, 1U); - 8001fa8: 68fb ldr r3, [r7, #12] - 8001faa: 6a9b ldr r3, [r3, #40] ; 0x28 - 8001fac: 1c5a adds r2, r3, #1 - 8001fae: 68fb ldr r3, [r7, #12] - 8001fb0: 629a str r2, [r3, #40] ; 0x28 - 8001fb2: 68fb ldr r3, [r7, #12] - 8001fb4: 6a9b ldr r3, [r3, #40] ; 0x28 - 8001fb6: 2b03 cmp r3, #3 - 8001fb8: d904 bls.n 8001fc4 - 8001fba: 68fb ldr r3, [r7, #12] - 8001fbc: 6a9b ldr r3, [r3, #40] ; 0x28 - 8001fbe: 1f1a subs r2, r3, #4 - 8001fc0: 68fb ldr r3, [r7, #12] - 8001fc2: 629a str r2, [r3, #40] ; 0x28 - - /* Start transmission */ - /* issue a poll command to Tx DMA by writing address of next immediate free descriptor */ - WRITE_REG(heth->Instance->DMATPDR, (uint32_t)(heth->TxDescList.TxDesc[heth->TxDescList.CurTxDesc])); - 8001fc4: 68fb ldr r3, [r7, #12] - 8001fc6: 6a99 ldr r1, [r3, #40] ; 0x28 - 8001fc8: 68fb ldr r3, [r7, #12] - 8001fca: 681a ldr r2, [r3, #0] - 8001fcc: 68fb ldr r3, [r7, #12] - 8001fce: 3106 adds r1, #6 - 8001fd0: f853 3021 ldr.w r3, [r3, r1, lsl #2] - 8001fd4: f502 5280 add.w r2, r2, #4096 ; 0x1000 - 8001fd8: 6053 str r3, [r2, #4] - - tickstart = HAL_GetTick(); - 8001fda: f7ff fd39 bl 8001a50 - 8001fde: 6138 str r0, [r7, #16] - - /* Wait for data to be transmitted or timeout occurred */ - while ((dmatxdesc->DESC0 & ETH_DMATXDESC_OWN) != (uint32_t)RESET) - 8001fe0: e037 b.n 8002052 - { - if ((heth->Instance->DMASR & ETH_DMASR_FBES) != (uint32_t)RESET) - 8001fe2: 68fb ldr r3, [r7, #12] - 8001fe4: 681b ldr r3, [r3, #0] - 8001fe6: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 8001fea: 695b ldr r3, [r3, #20] - 8001fec: f403 5300 and.w r3, r3, #8192 ; 0x2000 - 8001ff0: 2b00 cmp r3, #0 - 8001ff2: d011 beq.n 8002018 - { - heth->ErrorCode |= HAL_ETH_ERROR_DMA; - 8001ff4: 68fb ldr r3, [r7, #12] - 8001ff6: f8d3 3088 ldr.w r3, [r3, #136] ; 0x88 - 8001ffa: f043 0208 orr.w r2, r3, #8 - 8001ffe: 68fb ldr r3, [r7, #12] - 8002000: f8c3 2088 str.w r2, [r3, #136] ; 0x88 - heth->DMAErrorCode = heth->Instance->DMASR; - 8002004: 68fb ldr r3, [r7, #12] - 8002006: 681b ldr r3, [r3, #0] - 8002008: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 800200c: 695a ldr r2, [r3, #20] - 800200e: 68fb ldr r3, [r7, #12] - 8002010: f8c3 208c str.w r2, [r3, #140] ; 0x8c - /* Return function status */ - return HAL_ERROR; - 8002014: 2301 movs r3, #1 - 8002016: e023 b.n 8002060 - } - - /* Check for the Timeout */ - if (Timeout != HAL_MAX_DELAY) - 8002018: 687b ldr r3, [r7, #4] - 800201a: f1b3 3fff cmp.w r3, #4294967295 - 800201e: d018 beq.n 8002052 - { - if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U)) - 8002020: f7ff fd16 bl 8001a50 - 8002024: 4602 mov r2, r0 - 8002026: 693b ldr r3, [r7, #16] - 8002028: 1ad3 subs r3, r2, r3 - 800202a: 687a ldr r2, [r7, #4] - 800202c: 429a cmp r2, r3 - 800202e: d302 bcc.n 8002036 - 8002030: 687b ldr r3, [r7, #4] - 8002032: 2b00 cmp r3, #0 - 8002034: d10d bne.n 8002052 - { - heth->ErrorCode |= HAL_ETH_ERROR_TIMEOUT; - 8002036: 68fb ldr r3, [r7, #12] - 8002038: f8d3 3088 ldr.w r3, [r3, #136] ; 0x88 - 800203c: f043 0204 orr.w r2, r3, #4 - 8002040: 68fb ldr r3, [r7, #12] - 8002042: f8c3 2088 str.w r2, [r3, #136] ; 0x88 - /* Clear TX descriptor so that we can proceed */ - dmatxdesc->DESC0 = (ETH_DMATXDESC_FS | ETH_DMATXDESC_LS); - 8002046: 697b ldr r3, [r7, #20] - 8002048: f04f 5240 mov.w r2, #805306368 ; 0x30000000 - 800204c: 601a str r2, [r3, #0] - return HAL_ERROR; - 800204e: 2301 movs r3, #1 - 8002050: e006 b.n 8002060 - while ((dmatxdesc->DESC0 & ETH_DMATXDESC_OWN) != (uint32_t)RESET) - 8002052: 697b ldr r3, [r7, #20] - 8002054: 681b ldr r3, [r3, #0] - 8002056: 2b00 cmp r3, #0 - 8002058: dbc3 blt.n 8001fe2 - } - } - } - - /* Return function status */ - return HAL_OK; - 800205a: 2300 movs r3, #0 - 800205c: e000 b.n 8002060 - } - else - { - return HAL_ERROR; - 800205e: 2301 movs r3, #1 - } -} - 8002060: 4618 mov r0, r3 - 8002062: 3718 adds r7, #24 - 8002064: 46bd mov sp, r7 - 8002066: bd80 pop {r7, pc} - -08002068 : - * the configuration information for ETHERNET module - * @param pAppBuff: Pointer to an application buffer to receive the packet. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_ETH_ReadData(ETH_HandleTypeDef *heth, void **pAppBuff) -{ - 8002068: b580 push {r7, lr} - 800206a: b088 sub sp, #32 - 800206c: af00 add r7, sp, #0 - 800206e: 6078 str r0, [r7, #4] - 8002070: 6039 str r1, [r7, #0] - uint32_t descidx; - ETH_DMADescTypeDef *dmarxdesc; - uint32_t desccnt = 0U; - 8002072: 2300 movs r3, #0 - 8002074: 617b str r3, [r7, #20] - uint32_t desccntmax; - uint32_t bufflength; - uint8_t rxdataready = 0U; - 8002076: 2300 movs r3, #0 - 8002078: 73fb strb r3, [r7, #15] - - - if (pAppBuff == NULL) - 800207a: 683b ldr r3, [r7, #0] - 800207c: 2b00 cmp r3, #0 - 800207e: d109 bne.n 8002094 - { - heth->ErrorCode |= HAL_ETH_ERROR_PARAM; - 8002080: 687b ldr r3, [r7, #4] - 8002082: f8d3 3088 ldr.w r3, [r3, #136] ; 0x88 - 8002086: f043 0201 orr.w r2, r3, #1 - 800208a: 687b ldr r3, [r7, #4] - 800208c: f8c3 2088 str.w r2, [r3, #136] ; 0x88 - return HAL_ERROR; - 8002090: 2301 movs r3, #1 - 8002092: e0a8 b.n 80021e6 - } - - if (heth->gState != HAL_ETH_STATE_STARTED) - 8002094: 687b ldr r3, [r7, #4] - 8002096: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84 - 800209a: 2b23 cmp r3, #35 ; 0x23 - 800209c: d001 beq.n 80020a2 - { - return HAL_ERROR; - 800209e: 2301 movs r3, #1 - 80020a0: e0a1 b.n 80021e6 - } - - descidx = heth->RxDescList.RxDescIdx; - 80020a2: 687b ldr r3, [r7, #4] - 80020a4: 6ddb ldr r3, [r3, #92] ; 0x5c - 80020a6: 61fb str r3, [r7, #28] - dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descidx]; - 80020a8: 687b ldr r3, [r7, #4] - 80020aa: 69fa ldr r2, [r7, #28] - 80020ac: 3212 adds r2, #18 - 80020ae: f853 3022 ldr.w r3, [r3, r2, lsl #2] - 80020b2: 61bb str r3, [r7, #24] - desccntmax = ETH_RX_DESC_CNT - heth->RxDescList.RxBuildDescCnt; - 80020b4: 687b ldr r3, [r7, #4] - 80020b6: 6edb ldr r3, [r3, #108] ; 0x6c - 80020b8: f1c3 0304 rsb r3, r3, #4 - 80020bc: 60bb str r3, [r7, #8] - - /* Check if descriptor is not owned by DMA */ - while ((READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_OWN) == (uint32_t)RESET) && (desccnt < desccntmax) - 80020be: e06a b.n 8002196 - && (rxdataready == 0U)) - { - if (READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_LS) != (uint32_t)RESET) - 80020c0: 69bb ldr r3, [r7, #24] - 80020c2: 681b ldr r3, [r3, #0] - 80020c4: f403 7380 and.w r3, r3, #256 ; 0x100 - 80020c8: 2b00 cmp r3, #0 - 80020ca: d007 beq.n 80020dc - { - /* Get timestamp high */ - heth->RxDescList.TimeStamp.TimeStampHigh = dmarxdesc->DESC6; - 80020cc: 69bb ldr r3, [r7, #24] - 80020ce: 699a ldr r2, [r3, #24] - 80020d0: 687b ldr r3, [r7, #4] - 80020d2: 679a str r2, [r3, #120] ; 0x78 - /* Get timestamp low */ - heth->RxDescList.TimeStamp.TimeStampLow = dmarxdesc->DESC7; - 80020d4: 69bb ldr r3, [r7, #24] - 80020d6: 69da ldr r2, [r3, #28] - 80020d8: 687b ldr r3, [r7, #4] - 80020da: 675a str r2, [r3, #116] ; 0x74 - } - if ((READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_FS) != (uint32_t)RESET) || (heth->RxDescList.pRxStart != NULL)) - 80020dc: 69bb ldr r3, [r7, #24] - 80020de: 681b ldr r3, [r3, #0] - 80020e0: f403 7300 and.w r3, r3, #512 ; 0x200 - 80020e4: 2b00 cmp r3, #0 - 80020e6: d103 bne.n 80020f0 - 80020e8: 687b ldr r3, [r7, #4] - 80020ea: 6fdb ldr r3, [r3, #124] ; 0x7c - 80020ec: 2b00 cmp r3, #0 - 80020ee: d040 beq.n 8002172 - { - /* Check first descriptor */ - if (READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_FS) != (uint32_t)RESET) - 80020f0: 69bb ldr r3, [r7, #24] - 80020f2: 681b ldr r3, [r3, #0] - 80020f4: f403 7300 and.w r3, r3, #512 ; 0x200 - 80020f8: 2b00 cmp r3, #0 - 80020fa: d005 beq.n 8002108 - { - heth->RxDescList.RxDescCnt = 0; - 80020fc: 687b ldr r3, [r7, #4] - 80020fe: 2200 movs r2, #0 - 8002100: 661a str r2, [r3, #96] ; 0x60 - heth->RxDescList.RxDataLength = 0; - 8002102: 687b ldr r3, [r7, #4] - 8002104: 2200 movs r2, #0 - 8002106: 665a str r2, [r3, #100] ; 0x64 - } - - /* Check if last descriptor */ - bufflength = heth->Init.RxBuffLen; - 8002108: 687b ldr r3, [r7, #4] - 800210a: 695b ldr r3, [r3, #20] - 800210c: 613b str r3, [r7, #16] - if (READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_LS) != (uint32_t)RESET) - 800210e: 69bb ldr r3, [r7, #24] - 8002110: 681b ldr r3, [r3, #0] - 8002112: f403 7380 and.w r3, r3, #256 ; 0x100 - 8002116: 2b00 cmp r3, #0 - 8002118: d00c beq.n 8002134 - { - /* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */ - bufflength = ((dmarxdesc->DESC0 & ETH_DMARXDESC_FL) >> ETH_DMARXDESC_FRAMELENGTHSHIFT) - 4U; - 800211a: 69bb ldr r3, [r7, #24] - 800211c: 681b ldr r3, [r3, #0] - 800211e: 0c1b lsrs r3, r3, #16 - 8002120: f3c3 030d ubfx r3, r3, #0, #14 - 8002124: 3b04 subs r3, #4 - 8002126: 613b str r3, [r7, #16] - - /* Save Last descriptor index */ - heth->RxDescList.pRxLastRxDesc = dmarxdesc->DESC0; - 8002128: 69bb ldr r3, [r7, #24] - 800212a: 681a ldr r2, [r3, #0] - 800212c: 687b ldr r3, [r7, #4] - 800212e: 671a str r2, [r3, #112] ; 0x70 - - /* Packet ready */ - rxdataready = 1; - 8002130: 2301 movs r3, #1 - 8002132: 73fb strb r3, [r7, #15] - } - - /* Link data */ - WRITE_REG(dmarxdesc->BackupAddr0, dmarxdesc->DESC2); - 8002134: 69bb ldr r3, [r7, #24] - 8002136: 689a ldr r2, [r3, #8] - 8002138: 69bb ldr r3, [r7, #24] - 800213a: 621a str r2, [r3, #32] - /*Call registered Link callback*/ - heth->rxLinkCallback(&heth->RxDescList.pRxStart, &heth->RxDescList.pRxEnd, - (uint8_t *)dmarxdesc->BackupAddr0, bufflength); -#else - /* Link callback */ - HAL_ETH_RxLinkCallback(&heth->RxDescList.pRxStart, &heth->RxDescList.pRxEnd, - 800213c: 687b ldr r3, [r7, #4] - 800213e: f103 007c add.w r0, r3, #124 ; 0x7c - 8002142: 687b ldr r3, [r7, #4] - 8002144: f103 0180 add.w r1, r3, #128 ; 0x80 - (uint8_t *)dmarxdesc->BackupAddr0, (uint16_t) bufflength); - 8002148: 69bb ldr r3, [r7, #24] - 800214a: 6a1b ldr r3, [r3, #32] - HAL_ETH_RxLinkCallback(&heth->RxDescList.pRxStart, &heth->RxDescList.pRxEnd, - 800214c: 461a mov r2, r3 - 800214e: 693b ldr r3, [r7, #16] - 8002150: b29b uxth r3, r3 - 8002152: f002 fe87 bl 8004e64 -#endif /* USE_HAL_ETH_REGISTER_CALLBACKS */ - heth->RxDescList.RxDescCnt++; - 8002156: 687b ldr r3, [r7, #4] - 8002158: 6e1b ldr r3, [r3, #96] ; 0x60 - 800215a: 1c5a adds r2, r3, #1 - 800215c: 687b ldr r3, [r7, #4] - 800215e: 661a str r2, [r3, #96] ; 0x60 - heth->RxDescList.RxDataLength += bufflength; - 8002160: 687b ldr r3, [r7, #4] - 8002162: 6e5a ldr r2, [r3, #100] ; 0x64 - 8002164: 693b ldr r3, [r7, #16] - 8002166: 441a add r2, r3 - 8002168: 687b ldr r3, [r7, #4] - 800216a: 665a str r2, [r3, #100] ; 0x64 - - /* Clear buffer pointer */ - dmarxdesc->BackupAddr0 = 0; - 800216c: 69bb ldr r3, [r7, #24] - 800216e: 2200 movs r2, #0 - 8002170: 621a str r2, [r3, #32] - } - - /* Increment current rx descriptor index */ - INCR_RX_DESC_INDEX(descidx, 1U); - 8002172: 69fb ldr r3, [r7, #28] - 8002174: 3301 adds r3, #1 - 8002176: 61fb str r3, [r7, #28] - 8002178: 69fb ldr r3, [r7, #28] - 800217a: 2b03 cmp r3, #3 - 800217c: d902 bls.n 8002184 - 800217e: 69fb ldr r3, [r7, #28] - 8002180: 3b04 subs r3, #4 - 8002182: 61fb str r3, [r7, #28] - /* Get current descriptor address */ - dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descidx]; - 8002184: 687b ldr r3, [r7, #4] - 8002186: 69fa ldr r2, [r7, #28] - 8002188: 3212 adds r2, #18 - 800218a: f853 3022 ldr.w r3, [r3, r2, lsl #2] - 800218e: 61bb str r3, [r7, #24] - desccnt++; - 8002190: 697b ldr r3, [r7, #20] - 8002192: 3301 adds r3, #1 - 8002194: 617b str r3, [r7, #20] - while ((READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_OWN) == (uint32_t)RESET) && (desccnt < desccntmax) - 8002196: 69bb ldr r3, [r7, #24] - 8002198: 681b ldr r3, [r3, #0] - 800219a: 2b00 cmp r3, #0 - 800219c: db06 blt.n 80021ac - 800219e: 697a ldr r2, [r7, #20] - 80021a0: 68bb ldr r3, [r7, #8] - 80021a2: 429a cmp r2, r3 - 80021a4: d202 bcs.n 80021ac - && (rxdataready == 0U)) - 80021a6: 7bfb ldrb r3, [r7, #15] - 80021a8: 2b00 cmp r3, #0 - 80021aa: d089 beq.n 80020c0 - } - - heth->RxDescList.RxBuildDescCnt += desccnt; - 80021ac: 687b ldr r3, [r7, #4] - 80021ae: 6eda ldr r2, [r3, #108] ; 0x6c - 80021b0: 697b ldr r3, [r7, #20] - 80021b2: 441a add r2, r3 - 80021b4: 687b ldr r3, [r7, #4] - 80021b6: 66da str r2, [r3, #108] ; 0x6c - if ((heth->RxDescList.RxBuildDescCnt) != 0U) - 80021b8: 687b ldr r3, [r7, #4] - 80021ba: 6edb ldr r3, [r3, #108] ; 0x6c - 80021bc: 2b00 cmp r3, #0 - 80021be: d002 beq.n 80021c6 - { - /* Update Descriptors */ - ETH_UpdateDescriptor(heth); - 80021c0: 6878 ldr r0, [r7, #4] - 80021c2: f000 f815 bl 80021f0 - } - - heth->RxDescList.RxDescIdx = descidx; - 80021c6: 687b ldr r3, [r7, #4] - 80021c8: 69fa ldr r2, [r7, #28] - 80021ca: 65da str r2, [r3, #92] ; 0x5c - - if (rxdataready == 1U) - 80021cc: 7bfb ldrb r3, [r7, #15] - 80021ce: 2b01 cmp r3, #1 - 80021d0: d108 bne.n 80021e4 - { - /* Return received packet */ - *pAppBuff = heth->RxDescList.pRxStart; - 80021d2: 687b ldr r3, [r7, #4] - 80021d4: 6fda ldr r2, [r3, #124] ; 0x7c - 80021d6: 683b ldr r3, [r7, #0] - 80021d8: 601a str r2, [r3, #0] - /* Reset first element */ - heth->RxDescList.pRxStart = NULL; - 80021da: 687b ldr r3, [r7, #4] - 80021dc: 2200 movs r2, #0 - 80021de: 67da str r2, [r3, #124] ; 0x7c - - return HAL_OK; - 80021e0: 2300 movs r3, #0 - 80021e2: e000 b.n 80021e6 - } - - /* Packet not ready */ - return HAL_ERROR; - 80021e4: 2301 movs r3, #1 -} - 80021e6: 4618 mov r0, r3 - 80021e8: 3720 adds r7, #32 - 80021ea: 46bd mov sp, r7 - 80021ec: bd80 pop {r7, pc} - ... - -080021f0 : - * @param heth: pointer to a ETH_HandleTypeDef structure that contains - * the configuration information for ETHERNET module - * @retval HAL status - */ -static void ETH_UpdateDescriptor(ETH_HandleTypeDef *heth) -{ - 80021f0: b580 push {r7, lr} - 80021f2: b088 sub sp, #32 - 80021f4: af00 add r7, sp, #0 - 80021f6: 6078 str r0, [r7, #4] - uint32_t descidx; - uint32_t desccount; - ETH_DMADescTypeDef *dmarxdesc; - uint8_t *buff = NULL; - 80021f8: 2300 movs r3, #0 - 80021fa: 60fb str r3, [r7, #12] - uint8_t allocStatus = 1U; - 80021fc: 2301 movs r3, #1 - 80021fe: 74fb strb r3, [r7, #19] - - descidx = heth->RxDescList.RxBuildDescIdx; - 8002200: 687b ldr r3, [r7, #4] - 8002202: 6e9b ldr r3, [r3, #104] ; 0x68 - 8002204: 61fb str r3, [r7, #28] - dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descidx]; - 8002206: 687b ldr r3, [r7, #4] - 8002208: 69fa ldr r2, [r7, #28] - 800220a: 3212 adds r2, #18 - 800220c: f853 3022 ldr.w r3, [r3, r2, lsl #2] - 8002210: 617b str r3, [r7, #20] - desccount = heth->RxDescList.RxBuildDescCnt; - 8002212: 687b ldr r3, [r7, #4] - 8002214: 6edb ldr r3, [r3, #108] ; 0x6c - 8002216: 61bb str r3, [r7, #24] - - while ((desccount > 0U) && (allocStatus != 0U)) - 8002218: e040 b.n 800229c - { - /* Check if a buffer's attached the descriptor */ - if (READ_REG(dmarxdesc->BackupAddr0) == 0U) - 800221a: 697b ldr r3, [r7, #20] - 800221c: 6a1b ldr r3, [r3, #32] - 800221e: 2b00 cmp r3, #0 - 8002220: d112 bne.n 8002248 -#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1) - /*Call registered Allocate callback*/ - heth->rxAllocateCallback(&buff); -#else - /* Allocate callback */ - HAL_ETH_RxAllocateCallback(&buff); - 8002222: f107 030c add.w r3, r7, #12 - 8002226: 4618 mov r0, r3 - 8002228: f002 fdec bl 8004e04 -#endif /* USE_HAL_ETH_REGISTER_CALLBACKS */ - if (buff == NULL) - 800222c: 68fb ldr r3, [r7, #12] - 800222e: 2b00 cmp r3, #0 - 8002230: d102 bne.n 8002238 - { - allocStatus = 0U; - 8002232: 2300 movs r3, #0 - 8002234: 74fb strb r3, [r7, #19] - 8002236: e007 b.n 8002248 - } - else - { - WRITE_REG(dmarxdesc->BackupAddr0, (uint32_t)buff); - 8002238: 68fb ldr r3, [r7, #12] - 800223a: 461a mov r2, r3 - 800223c: 697b ldr r3, [r7, #20] - 800223e: 621a str r2, [r3, #32] - WRITE_REG(dmarxdesc->DESC2, (uint32_t)buff); - 8002240: 68fb ldr r3, [r7, #12] - 8002242: 461a mov r2, r3 - 8002244: 697b ldr r3, [r7, #20] - 8002246: 609a str r2, [r3, #8] - } - } - - if (allocStatus != 0U) - 8002248: 7cfb ldrb r3, [r7, #19] - 800224a: 2b00 cmp r3, #0 - 800224c: d026 beq.n 800229c - { - if (heth->RxDescList.ItMode == 0U) - 800224e: 687b ldr r3, [r7, #4] - 8002250: 6d9b ldr r3, [r3, #88] ; 0x58 - 8002252: 2b00 cmp r3, #0 - 8002254: d103 bne.n 800225e - { - WRITE_REG(dmarxdesc->DESC1, ETH_DMARXDESC_DIC | ETH_RX_BUF_SIZE | ETH_DMARXDESC_RCH); - 8002256: 697b ldr r3, [r7, #20] - 8002258: 4a1e ldr r2, [pc, #120] ; (80022d4 ) - 800225a: 605a str r2, [r3, #4] - 800225c: e003 b.n 8002266 - } - else - { - WRITE_REG(dmarxdesc->DESC1, ETH_RX_BUF_SIZE | ETH_DMARXDESC_RCH); - 800225e: 697b ldr r3, [r7, #20] - 8002260: f244 52f8 movw r2, #17912 ; 0x45f8 - 8002264: 605a str r2, [r3, #4] - \details Ensures the apparent order of the explicit memory operations before - and after the instruction, without ensuring their completion. - */ -__STATIC_FORCEINLINE void __DMB(void) -{ - __ASM volatile ("dmb 0xF":::"memory"); - 8002266: f3bf 8f5f dmb sy -} - 800226a: bf00 nop - is fully performed. - The __DMB() instruction is added to avoid any potential compiler optimization that - may lead to abnormal behavior. */ - __DMB(); - - SET_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_OWN); - 800226c: 697b ldr r3, [r7, #20] - 800226e: 681b ldr r3, [r3, #0] - 8002270: f043 4200 orr.w r2, r3, #2147483648 ; 0x80000000 - 8002274: 697b ldr r3, [r7, #20] - 8002276: 601a str r2, [r3, #0] - - /* Increment current rx descriptor index */ - INCR_RX_DESC_INDEX(descidx, 1U); - 8002278: 69fb ldr r3, [r7, #28] - 800227a: 3301 adds r3, #1 - 800227c: 61fb str r3, [r7, #28] - 800227e: 69fb ldr r3, [r7, #28] - 8002280: 2b03 cmp r3, #3 - 8002282: d902 bls.n 800228a - 8002284: 69fb ldr r3, [r7, #28] - 8002286: 3b04 subs r3, #4 - 8002288: 61fb str r3, [r7, #28] - /* Get current descriptor address */ - dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descidx]; - 800228a: 687b ldr r3, [r7, #4] - 800228c: 69fa ldr r2, [r7, #28] - 800228e: 3212 adds r2, #18 - 8002290: f853 3022 ldr.w r3, [r3, r2, lsl #2] - 8002294: 617b str r3, [r7, #20] - desccount--; - 8002296: 69bb ldr r3, [r7, #24] - 8002298: 3b01 subs r3, #1 - 800229a: 61bb str r3, [r7, #24] - while ((desccount > 0U) && (allocStatus != 0U)) - 800229c: 69bb ldr r3, [r7, #24] - 800229e: 2b00 cmp r3, #0 - 80022a0: d002 beq.n 80022a8 - 80022a2: 7cfb ldrb r3, [r7, #19] - 80022a4: 2b00 cmp r3, #0 - 80022a6: d1b8 bne.n 800221a - } - } - - if (heth->RxDescList.RxBuildDescCnt != desccount) - 80022a8: 687b ldr r3, [r7, #4] - 80022aa: 6edb ldr r3, [r3, #108] ; 0x6c - 80022ac: 69ba ldr r2, [r7, #24] - 80022ae: 429a cmp r2, r3 - 80022b0: d00c beq.n 80022cc - { - /* Set the Tail pointer address */ - WRITE_REG(heth->Instance->DMARPDR, 0); - 80022b2: 687b ldr r3, [r7, #4] - 80022b4: 681b ldr r3, [r3, #0] - 80022b6: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 80022ba: 461a mov r2, r3 - 80022bc: 2300 movs r3, #0 - 80022be: 6093 str r3, [r2, #8] - - heth->RxDescList.RxBuildDescIdx = descidx; - 80022c0: 687b ldr r3, [r7, #4] - 80022c2: 69fa ldr r2, [r7, #28] - 80022c4: 669a str r2, [r3, #104] ; 0x68 - heth->RxDescList.RxBuildDescCnt = desccount; - 80022c6: 687b ldr r3, [r7, #4] - 80022c8: 69ba ldr r2, [r7, #24] - 80022ca: 66da str r2, [r3, #108] ; 0x6c - } -} - 80022cc: bf00 nop - 80022ce: 3720 adds r7, #32 - 80022d0: 46bd mov sp, r7 - 80022d2: bd80 pop {r7, pc} - 80022d4: 800045f8 .word 0x800045f8 - -080022d8 : - * @param pRegValue: parameter to hold read value - * @retval HAL status - */ -HAL_StatusTypeDef HAL_ETH_ReadPHYRegister(ETH_HandleTypeDef *heth, uint32_t PHYAddr, uint32_t PHYReg, - uint32_t *pRegValue) -{ - 80022d8: b580 push {r7, lr} - 80022da: b086 sub sp, #24 - 80022dc: af00 add r7, sp, #0 - 80022de: 60f8 str r0, [r7, #12] - 80022e0: 60b9 str r1, [r7, #8] - 80022e2: 607a str r2, [r7, #4] - 80022e4: 603b str r3, [r7, #0] - uint32_t tmpreg1; - uint32_t tickstart; - - /* Get the ETHERNET MACMIIAR value */ - tmpreg1 = heth->Instance->MACMIIAR; - 80022e6: 68fb ldr r3, [r7, #12] - 80022e8: 681b ldr r3, [r3, #0] - 80022ea: 691b ldr r3, [r3, #16] - 80022ec: 617b str r3, [r7, #20] - - /* Keep only the CSR Clock Range CR[2:0] bits value */ - tmpreg1 &= ~ETH_MACMIIAR_CR_MASK; - 80022ee: 697b ldr r3, [r7, #20] - 80022f0: f003 031c and.w r3, r3, #28 - 80022f4: 617b str r3, [r7, #20] - - /* Prepare the MII address register value */ - tmpreg1 |= ((PHYAddr << 11U) & ETH_MACMIIAR_PA); /* Set the PHY device address */ - 80022f6: 68bb ldr r3, [r7, #8] - 80022f8: 02db lsls r3, r3, #11 - 80022fa: b29b uxth r3, r3 - 80022fc: 697a ldr r2, [r7, #20] - 80022fe: 4313 orrs r3, r2 - 8002300: 617b str r3, [r7, #20] - tmpreg1 |= (((uint32_t)PHYReg << 6U) & ETH_MACMIIAR_MR); /* Set the PHY register address */ - 8002302: 687b ldr r3, [r7, #4] - 8002304: 019b lsls r3, r3, #6 - 8002306: f403 63f8 and.w r3, r3, #1984 ; 0x7c0 - 800230a: 697a ldr r2, [r7, #20] - 800230c: 4313 orrs r3, r2 - 800230e: 617b str r3, [r7, #20] - tmpreg1 &= ~ETH_MACMIIAR_MW; /* Set the read mode */ - 8002310: 697b ldr r3, [r7, #20] - 8002312: f023 0302 bic.w r3, r3, #2 - 8002316: 617b str r3, [r7, #20] - tmpreg1 |= ETH_MACMIIAR_MB; /* Set the MII Busy bit */ - 8002318: 697b ldr r3, [r7, #20] - 800231a: f043 0301 orr.w r3, r3, #1 - 800231e: 617b str r3, [r7, #20] - - /* Write the result value into the MII Address register */ - heth->Instance->MACMIIAR = tmpreg1; - 8002320: 68fb ldr r3, [r7, #12] - 8002322: 681b ldr r3, [r3, #0] - 8002324: 697a ldr r2, [r7, #20] - 8002326: 611a str r2, [r3, #16] - - - tickstart = HAL_GetTick(); - 8002328: f7ff fb92 bl 8001a50 - 800232c: 6138 str r0, [r7, #16] - - /* Check for the Busy flag */ - while ((tmpreg1 & ETH_MACMIIAR_MB) == ETH_MACMIIAR_MB) - 800232e: e00d b.n 800234c - { - /* Check for the Timeout */ - if ((HAL_GetTick() - tickstart) > PHY_READ_TO) - 8002330: f7ff fb8e bl 8001a50 - 8002334: 4602 mov r2, r0 - 8002336: 693b ldr r3, [r7, #16] - 8002338: 1ad3 subs r3, r2, r3 - 800233a: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 800233e: d301 bcc.n 8002344 - { - return HAL_ERROR; - 8002340: 2301 movs r3, #1 - 8002342: e010 b.n 8002366 - } - - tmpreg1 = heth->Instance->MACMIIAR; - 8002344: 68fb ldr r3, [r7, #12] - 8002346: 681b ldr r3, [r3, #0] - 8002348: 691b ldr r3, [r3, #16] - 800234a: 617b str r3, [r7, #20] - while ((tmpreg1 & ETH_MACMIIAR_MB) == ETH_MACMIIAR_MB) - 800234c: 697b ldr r3, [r7, #20] - 800234e: f003 0301 and.w r3, r3, #1 - 8002352: 2b00 cmp r3, #0 - 8002354: d1ec bne.n 8002330 - } - - /* Get MACMIIDR value */ - *pRegValue = (uint16_t)(heth->Instance->MACMIIDR); - 8002356: 68fb ldr r3, [r7, #12] - 8002358: 681b ldr r3, [r3, #0] - 800235a: 695b ldr r3, [r3, #20] - 800235c: b29b uxth r3, r3 - 800235e: 461a mov r2, r3 - 8002360: 683b ldr r3, [r7, #0] - 8002362: 601a str r2, [r3, #0] - - return HAL_OK; - 8002364: 2300 movs r3, #0 -} - 8002366: 4618 mov r0, r3 - 8002368: 3718 adds r7, #24 - 800236a: 46bd mov sp, r7 - 800236c: bd80 pop {r7, pc} - -0800236e : - * @param RegValue: the value to write - * @retval HAL status - */ -HAL_StatusTypeDef HAL_ETH_WritePHYRegister(ETH_HandleTypeDef *heth, uint32_t PHYAddr, uint32_t PHYReg, - uint32_t RegValue) -{ - 800236e: b580 push {r7, lr} - 8002370: b086 sub sp, #24 - 8002372: af00 add r7, sp, #0 - 8002374: 60f8 str r0, [r7, #12] - 8002376: 60b9 str r1, [r7, #8] - 8002378: 607a str r2, [r7, #4] - 800237a: 603b str r3, [r7, #0] - uint32_t tmpreg1; - uint32_t tickstart; - - /* Get the ETHERNET MACMIIAR value */ - tmpreg1 = heth->Instance->MACMIIAR; - 800237c: 68fb ldr r3, [r7, #12] - 800237e: 681b ldr r3, [r3, #0] - 8002380: 691b ldr r3, [r3, #16] - 8002382: 617b str r3, [r7, #20] - - /* Keep only the CSR Clock Range CR[2:0] bits value */ - tmpreg1 &= ~ETH_MACMIIAR_CR_MASK; - 8002384: 697b ldr r3, [r7, #20] - 8002386: f003 031c and.w r3, r3, #28 - 800238a: 617b str r3, [r7, #20] - - /* Prepare the MII register address value */ - tmpreg1 |= ((PHYAddr << 11U) & ETH_MACMIIAR_PA); /* Set the PHY device address */ - 800238c: 68bb ldr r3, [r7, #8] - 800238e: 02db lsls r3, r3, #11 - 8002390: b29b uxth r3, r3 - 8002392: 697a ldr r2, [r7, #20] - 8002394: 4313 orrs r3, r2 - 8002396: 617b str r3, [r7, #20] - tmpreg1 |= (((uint32_t)PHYReg << 6U) & ETH_MACMIIAR_MR); /* Set the PHY register address */ - 8002398: 687b ldr r3, [r7, #4] - 800239a: 019b lsls r3, r3, #6 - 800239c: f403 63f8 and.w r3, r3, #1984 ; 0x7c0 - 80023a0: 697a ldr r2, [r7, #20] - 80023a2: 4313 orrs r3, r2 - 80023a4: 617b str r3, [r7, #20] - tmpreg1 |= ETH_MACMIIAR_MW; /* Set the write mode */ - 80023a6: 697b ldr r3, [r7, #20] - 80023a8: f043 0302 orr.w r3, r3, #2 - 80023ac: 617b str r3, [r7, #20] - tmpreg1 |= ETH_MACMIIAR_MB; /* Set the MII Busy bit */ - 80023ae: 697b ldr r3, [r7, #20] - 80023b0: f043 0301 orr.w r3, r3, #1 - 80023b4: 617b str r3, [r7, #20] - - /* Give the value to the MII data register */ - heth->Instance->MACMIIDR = (uint16_t)RegValue; - 80023b6: 683b ldr r3, [r7, #0] - 80023b8: b29a uxth r2, r3 - 80023ba: 68fb ldr r3, [r7, #12] - 80023bc: 681b ldr r3, [r3, #0] - 80023be: 615a str r2, [r3, #20] - - /* Write the result value into the MII Address register */ - heth->Instance->MACMIIAR = tmpreg1; - 80023c0: 68fb ldr r3, [r7, #12] - 80023c2: 681b ldr r3, [r3, #0] - 80023c4: 697a ldr r2, [r7, #20] - 80023c6: 611a str r2, [r3, #16] - - /* Get tick */ - tickstart = HAL_GetTick(); - 80023c8: f7ff fb42 bl 8001a50 - 80023cc: 6138 str r0, [r7, #16] - - /* Check for the Busy flag */ - while ((tmpreg1 & ETH_MACMIIAR_MB) == ETH_MACMIIAR_MB) - 80023ce: e00d b.n 80023ec - { - /* Check for the Timeout */ - if ((HAL_GetTick() - tickstart) > PHY_WRITE_TO) - 80023d0: f7ff fb3e bl 8001a50 - 80023d4: 4602 mov r2, r0 - 80023d6: 693b ldr r3, [r7, #16] - 80023d8: 1ad3 subs r3, r2, r3 - 80023da: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 80023de: d301 bcc.n 80023e4 - { - return HAL_ERROR; - 80023e0: 2301 movs r3, #1 - 80023e2: e009 b.n 80023f8 - } - - tmpreg1 = heth->Instance->MACMIIAR; - 80023e4: 68fb ldr r3, [r7, #12] - 80023e6: 681b ldr r3, [r3, #0] - 80023e8: 691b ldr r3, [r3, #16] - 80023ea: 617b str r3, [r7, #20] - while ((tmpreg1 & ETH_MACMIIAR_MB) == ETH_MACMIIAR_MB) - 80023ec: 697b ldr r3, [r7, #20] - 80023ee: f003 0301 and.w r3, r3, #1 - 80023f2: 2b00 cmp r3, #0 - 80023f4: d1ec bne.n 80023d0 - } - - return HAL_OK; - 80023f6: 2300 movs r3, #0 -} - 80023f8: 4618 mov r0, r3 - 80023fa: 3718 adds r7, #24 - 80023fc: 46bd mov sp, r7 - 80023fe: bd80 pop {r7, pc} - -08002400 : - * @param macconf: pointer to a ETH_MACConfigTypeDef structure that will hold - * the configuration of the MAC. - * @retval HAL Status - */ -HAL_StatusTypeDef HAL_ETH_GetMACConfig(ETH_HandleTypeDef *heth, ETH_MACConfigTypeDef *macconf) -{ - 8002400: b480 push {r7} - 8002402: b083 sub sp, #12 - 8002404: af00 add r7, sp, #0 - 8002406: 6078 str r0, [r7, #4] - 8002408: 6039 str r1, [r7, #0] - if (macconf == NULL) - 800240a: 683b ldr r3, [r7, #0] - 800240c: 2b00 cmp r3, #0 - 800240e: d101 bne.n 8002414 - { - return HAL_ERROR; - 8002410: 2301 movs r3, #1 - 8002412: e0d9 b.n 80025c8 - } - - /* Get MAC parameters */ - macconf->DeferralCheck = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_DC) >> 4) > 0U) ? ENABLE : DISABLE; - 8002414: 687b ldr r3, [r7, #4] - 8002416: 681b ldr r3, [r3, #0] - 8002418: 681b ldr r3, [r3, #0] - 800241a: f003 0310 and.w r3, r3, #16 - 800241e: 2b00 cmp r3, #0 - 8002420: bf14 ite ne - 8002422: 2301 movne r3, #1 - 8002424: 2300 moveq r3, #0 - 8002426: b2db uxtb r3, r3 - 8002428: 461a mov r2, r3 - 800242a: 683b ldr r3, [r7, #0] - 800242c: f883 2028 strb.w r2, [r3, #40] ; 0x28 - macconf->BackOffLimit = READ_BIT(heth->Instance->MACCR, ETH_MACCR_BL); - 8002430: 687b ldr r3, [r7, #4] - 8002432: 681b ldr r3, [r3, #0] - 8002434: 681b ldr r3, [r3, #0] - 8002436: f003 0260 and.w r2, r3, #96 ; 0x60 - 800243a: 683b ldr r3, [r7, #0] - 800243c: 625a str r2, [r3, #36] ; 0x24 - macconf->RetryTransmission = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_RD) >> 9) == 0U) ? ENABLE : DISABLE; - 800243e: 687b ldr r3, [r7, #4] - 8002440: 681b ldr r3, [r3, #0] - 8002442: 681b ldr r3, [r3, #0] - 8002444: f403 7300 and.w r3, r3, #512 ; 0x200 - 8002448: 2b00 cmp r3, #0 - 800244a: bf0c ite eq - 800244c: 2301 moveq r3, #1 - 800244e: 2300 movne r3, #0 - 8002450: b2db uxtb r3, r3 - 8002452: 461a mov r2, r3 - 8002454: 683b ldr r3, [r7, #0] - 8002456: f883 2020 strb.w r2, [r3, #32] - macconf->CarrierSenseDuringTransmit = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_CSD) >> 16) > 0U) - 800245a: 687b ldr r3, [r7, #4] - 800245c: 681b ldr r3, [r3, #0] - 800245e: 681b ldr r3, [r3, #0] - 8002460: f403 3380 and.w r3, r3, #65536 ; 0x10000 - ? ENABLE : DISABLE; - 8002464: 2b00 cmp r3, #0 - 8002466: bf14 ite ne - 8002468: 2301 movne r3, #1 - 800246a: 2300 moveq r3, #0 - 800246c: b2db uxtb r3, r3 - 800246e: 461a mov r2, r3 - macconf->CarrierSenseDuringTransmit = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_CSD) >> 16) > 0U) - 8002470: 683b ldr r3, [r7, #0] - 8002472: 77da strb r2, [r3, #31] - macconf->ReceiveOwn = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_ROD) >> 13) == 0U) ? ENABLE : DISABLE; - 8002474: 687b ldr r3, [r7, #4] - 8002476: 681b ldr r3, [r3, #0] - 8002478: 681b ldr r3, [r3, #0] - 800247a: f403 5300 and.w r3, r3, #8192 ; 0x2000 - 800247e: 2b00 cmp r3, #0 - 8002480: bf0c ite eq - 8002482: 2301 moveq r3, #1 - 8002484: 2300 movne r3, #0 - 8002486: b2db uxtb r3, r3 - 8002488: 461a mov r2, r3 - 800248a: 683b ldr r3, [r7, #0] - 800248c: 779a strb r2, [r3, #30] - macconf->LoopbackMode = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_LM) >> 12) > 0U) ? ENABLE : DISABLE; - 800248e: 687b ldr r3, [r7, #4] - 8002490: 681b ldr r3, [r3, #0] - 8002492: 681b ldr r3, [r3, #0] - 8002494: f403 5380 and.w r3, r3, #4096 ; 0x1000 - 8002498: 2b00 cmp r3, #0 - 800249a: bf14 ite ne - 800249c: 2301 movne r3, #1 - 800249e: 2300 moveq r3, #0 - 80024a0: b2db uxtb r3, r3 - 80024a2: 461a mov r2, r3 - 80024a4: 683b ldr r3, [r7, #0] - 80024a6: 771a strb r2, [r3, #28] - macconf->DuplexMode = READ_BIT(heth->Instance->MACCR, ETH_MACCR_DM); - 80024a8: 687b ldr r3, [r7, #4] - 80024aa: 681b ldr r3, [r3, #0] - 80024ac: 681b ldr r3, [r3, #0] - 80024ae: f403 6200 and.w r2, r3, #2048 ; 0x800 - 80024b2: 683b ldr r3, [r7, #0] - 80024b4: 619a str r2, [r3, #24] - macconf->Speed = READ_BIT(heth->Instance->MACCR, ETH_MACCR_FES); - 80024b6: 687b ldr r3, [r7, #4] - 80024b8: 681b ldr r3, [r3, #0] - 80024ba: 681b ldr r3, [r3, #0] - 80024bc: f403 4280 and.w r2, r3, #16384 ; 0x4000 - 80024c0: 683b ldr r3, [r7, #0] - 80024c2: 615a str r2, [r3, #20] - macconf->Jabber = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_JD) >> 22) == 0U) ? ENABLE : DISABLE; - 80024c4: 687b ldr r3, [r7, #4] - 80024c6: 681b ldr r3, [r3, #0] - 80024c8: 681b ldr r3, [r3, #0] - 80024ca: f403 0380 and.w r3, r3, #4194304 ; 0x400000 - 80024ce: 2b00 cmp r3, #0 - 80024d0: bf0c ite eq - 80024d2: 2301 moveq r3, #1 - 80024d4: 2300 movne r3, #0 - 80024d6: b2db uxtb r3, r3 - 80024d8: 461a mov r2, r3 - 80024da: 683b ldr r3, [r7, #0] - 80024dc: 745a strb r2, [r3, #17] - macconf->Watchdog = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_WD) >> 23) == 0U) ? ENABLE : DISABLE; - 80024de: 687b ldr r3, [r7, #4] - 80024e0: 681b ldr r3, [r3, #0] - 80024e2: 681b ldr r3, [r3, #0] - 80024e4: f403 0300 and.w r3, r3, #8388608 ; 0x800000 - 80024e8: 2b00 cmp r3, #0 - 80024ea: bf0c ite eq - 80024ec: 2301 moveq r3, #1 - 80024ee: 2300 movne r3, #0 - 80024f0: b2db uxtb r3, r3 - 80024f2: 461a mov r2, r3 - 80024f4: 683b ldr r3, [r7, #0] - 80024f6: 741a strb r2, [r3, #16] - macconf->AutomaticPadCRCStrip = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_APCS) >> 7) > 0U) ? ENABLE : DISABLE; - 80024f8: 687b ldr r3, [r7, #4] - 80024fa: 681b ldr r3, [r3, #0] - 80024fc: 681b ldr r3, [r3, #0] - 80024fe: f003 0380 and.w r3, r3, #128 ; 0x80 - 8002502: 2b00 cmp r3, #0 - 8002504: bf14 ite ne - 8002506: 2301 movne r3, #1 - 8002508: 2300 moveq r3, #0 - 800250a: b2db uxtb r3, r3 - 800250c: 461a mov r2, r3 - 800250e: 683b ldr r3, [r7, #0] - 8002510: 73da strb r2, [r3, #15] - macconf->InterPacketGapVal = READ_BIT(heth->Instance->MACCR, ETH_MACCR_IFG); - 8002512: 687b ldr r3, [r7, #4] - 8002514: 681b ldr r3, [r3, #0] - 8002516: 681b ldr r3, [r3, #0] - 8002518: f403 2260 and.w r2, r3, #917504 ; 0xe0000 - 800251c: 683b ldr r3, [r7, #0] - 800251e: 609a str r2, [r3, #8] - macconf->ChecksumOffload = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_IPCO) >> 10U) > 0U) ? ENABLE : DISABLE; - 8002520: 687b ldr r3, [r7, #4] - 8002522: 681b ldr r3, [r3, #0] - 8002524: 681b ldr r3, [r3, #0] - 8002526: f403 6380 and.w r3, r3, #1024 ; 0x400 - 800252a: 2b00 cmp r3, #0 - 800252c: bf14 ite ne - 800252e: 2301 movne r3, #1 - 8002530: 2300 moveq r3, #0 - 8002532: b2db uxtb r3, r3 - 8002534: 461a mov r2, r3 - 8002536: 683b ldr r3, [r7, #0] - 8002538: 711a strb r2, [r3, #4] - - - macconf->TransmitFlowControl = ((READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_TFCE) >> 1) > 0U) ? ENABLE : DISABLE; - 800253a: 687b ldr r3, [r7, #4] - 800253c: 681b ldr r3, [r3, #0] - 800253e: 699b ldr r3, [r3, #24] - 8002540: f003 0302 and.w r3, r3, #2 - 8002544: 2b00 cmp r3, #0 - 8002546: bf14 ite ne - 8002548: 2301 movne r3, #1 - 800254a: 2300 moveq r3, #0 - 800254c: b2db uxtb r3, r3 - 800254e: 461a mov r2, r3 - 8002550: 683b ldr r3, [r7, #0] - 8002552: f883 2054 strb.w r2, [r3, #84] ; 0x54 - macconf->ZeroQuantaPause = ((READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_ZQPD) >> 7) == 0U) ? ENABLE : DISABLE; - 8002556: 687b ldr r3, [r7, #4] - 8002558: 681b ldr r3, [r3, #0] - 800255a: 699b ldr r3, [r3, #24] - 800255c: f003 0380 and.w r3, r3, #128 ; 0x80 - 8002560: 2b00 cmp r3, #0 - 8002562: bf0c ite eq - 8002564: 2301 moveq r3, #1 - 8002566: 2300 movne r3, #0 - 8002568: b2db uxtb r3, r3 - 800256a: 461a mov r2, r3 - 800256c: 683b ldr r3, [r7, #0] - 800256e: f883 204c strb.w r2, [r3, #76] ; 0x4c - macconf->PauseLowThreshold = READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_PLT); - 8002572: 687b ldr r3, [r7, #4] - 8002574: 681b ldr r3, [r3, #0] - 8002576: 699b ldr r3, [r3, #24] - 8002578: f003 0230 and.w r2, r3, #48 ; 0x30 - 800257c: 683b ldr r3, [r7, #0] - 800257e: 651a str r2, [r3, #80] ; 0x50 - macconf->PauseTime = (READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_PT) >> 16); - 8002580: 687b ldr r3, [r7, #4] - 8002582: 681b ldr r3, [r3, #0] - 8002584: 699b ldr r3, [r3, #24] - 8002586: 0c1b lsrs r3, r3, #16 - 8002588: b29a uxth r2, r3 - 800258a: 683b ldr r3, [r7, #0] - 800258c: 649a str r2, [r3, #72] ; 0x48 - macconf->ReceiveFlowControl = ((READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_RFCE) >> 2U) > 0U) ? ENABLE : DISABLE; - 800258e: 687b ldr r3, [r7, #4] - 8002590: 681b ldr r3, [r3, #0] - 8002592: 699b ldr r3, [r3, #24] - 8002594: f003 0304 and.w r3, r3, #4 - 8002598: 2b00 cmp r3, #0 - 800259a: bf14 ite ne - 800259c: 2301 movne r3, #1 - 800259e: 2300 moveq r3, #0 - 80025a0: b2db uxtb r3, r3 - 80025a2: 461a mov r2, r3 - 80025a4: 683b ldr r3, [r7, #0] - 80025a6: f883 2056 strb.w r2, [r3, #86] ; 0x56 - macconf->UnicastPausePacketDetect = ((READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_UPFD) >> 3U) > 0U) - 80025aa: 687b ldr r3, [r7, #4] - 80025ac: 681b ldr r3, [r3, #0] - 80025ae: 699b ldr r3, [r3, #24] - 80025b0: f003 0308 and.w r3, r3, #8 - ? ENABLE : DISABLE; - 80025b4: 2b00 cmp r3, #0 - 80025b6: bf14 ite ne - 80025b8: 2301 movne r3, #1 - 80025ba: 2300 moveq r3, #0 - 80025bc: b2db uxtb r3, r3 - 80025be: 461a mov r2, r3 - macconf->UnicastPausePacketDetect = ((READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_UPFD) >> 3U) > 0U) - 80025c0: 683b ldr r3, [r7, #0] - 80025c2: f883 2055 strb.w r2, [r3, #85] ; 0x55 - - return HAL_OK; - 80025c6: 2300 movs r3, #0 -} - 80025c8: 4618 mov r0, r3 - 80025ca: 370c adds r7, #12 - 80025cc: 46bd mov sp, r7 - 80025ce: f85d 7b04 ldr.w r7, [sp], #4 - 80025d2: 4770 bx lr - -080025d4 : - * @param macconf: pointer to a ETH_MACConfigTypeDef structure that contains - * the configuration of the MAC. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_ETH_SetMACConfig(ETH_HandleTypeDef *heth, ETH_MACConfigTypeDef *macconf) -{ - 80025d4: b580 push {r7, lr} - 80025d6: b082 sub sp, #8 - 80025d8: af00 add r7, sp, #0 - 80025da: 6078 str r0, [r7, #4] - 80025dc: 6039 str r1, [r7, #0] - if (macconf == NULL) - 80025de: 683b ldr r3, [r7, #0] - 80025e0: 2b00 cmp r3, #0 - 80025e2: d101 bne.n 80025e8 - { - return HAL_ERROR; - 80025e4: 2301 movs r3, #1 - 80025e6: e00b b.n 8002600 - } - - if (heth->gState == HAL_ETH_STATE_READY) - 80025e8: 687b ldr r3, [r7, #4] - 80025ea: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84 - 80025ee: 2b10 cmp r3, #16 - 80025f0: d105 bne.n 80025fe - { - ETH_SetMACConfig(heth, macconf); - 80025f2: 6839 ldr r1, [r7, #0] - 80025f4: 6878 ldr r0, [r7, #4] - 80025f6: f000 f883 bl 8002700 - - return HAL_OK; - 80025fa: 2300 movs r3, #0 - 80025fc: e000 b.n 8002600 - } - else - { - return HAL_ERROR; - 80025fe: 2301 movs r3, #1 - } -} - 8002600: 4618 mov r0, r3 - 8002602: 3708 adds r7, #8 - 8002604: 46bd mov sp, r7 - 8002606: bd80 pop {r7, pc} - -08002608 : - * @param heth: pointer to a ETH_HandleTypeDef structure that contains - * the configuration information for ETHERNET module - * @retval None - */ -void HAL_ETH_SetMDIOClockRange(ETH_HandleTypeDef *heth) -{ - 8002608: b580 push {r7, lr} - 800260a: b084 sub sp, #16 - 800260c: af00 add r7, sp, #0 - 800260e: 6078 str r0, [r7, #4] - uint32_t hclk; - uint32_t tmpreg; - - /* Get the ETHERNET MACMIIAR value */ - tmpreg = (heth->Instance)->MACMIIAR; - 8002610: 687b ldr r3, [r7, #4] - 8002612: 681b ldr r3, [r3, #0] - 8002614: 691b ldr r3, [r3, #16] - 8002616: 60fb str r3, [r7, #12] - /* Clear CSR Clock Range CR[2:0] bits */ - tmpreg &= ETH_MACMIIAR_CR_MASK; - 8002618: 68fb ldr r3, [r7, #12] - 800261a: f023 031c bic.w r3, r3, #28 - 800261e: 60fb str r3, [r7, #12] - - /* Get hclk frequency value */ - hclk = HAL_RCC_GetHCLKFreq(); - 8002620: f001 fa38 bl 8003a94 - 8002624: 60b8 str r0, [r7, #8] - - /* Set CR bits depending on hclk value */ - if ((hclk >= 20000000U) && (hclk < 35000000U)) - 8002626: 68bb ldr r3, [r7, #8] - 8002628: 4a1d ldr r2, [pc, #116] ; (80026a0 ) - 800262a: 4293 cmp r3, r2 - 800262c: d908 bls.n 8002640 - 800262e: 68bb ldr r3, [r7, #8] - 8002630: 4a1c ldr r2, [pc, #112] ; (80026a4 ) - 8002632: 4293 cmp r3, r2 - 8002634: d804 bhi.n 8002640 - { - /* CSR Clock Range between 20-35 MHz */ - tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div16; - 8002636: 68fb ldr r3, [r7, #12] - 8002638: f043 0308 orr.w r3, r3, #8 - 800263c: 60fb str r3, [r7, #12] - 800263e: e027 b.n 8002690 - } - else if ((hclk >= 35000000U) && (hclk < 60000000U)) - 8002640: 68bb ldr r3, [r7, #8] - 8002642: 4a18 ldr r2, [pc, #96] ; (80026a4 ) - 8002644: 4293 cmp r3, r2 - 8002646: d908 bls.n 800265a - 8002648: 68bb ldr r3, [r7, #8] - 800264a: 4a17 ldr r2, [pc, #92] ; (80026a8 ) - 800264c: 4293 cmp r3, r2 - 800264e: d204 bcs.n 800265a - { - /* CSR Clock Range between 35-60 MHz */ - tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div26; - 8002650: 68fb ldr r3, [r7, #12] - 8002652: f043 030c orr.w r3, r3, #12 - 8002656: 60fb str r3, [r7, #12] - 8002658: e01a b.n 8002690 - } - else if ((hclk >= 60000000U) && (hclk < 100000000U)) - 800265a: 68bb ldr r3, [r7, #8] - 800265c: 4a12 ldr r2, [pc, #72] ; (80026a8 ) - 800265e: 4293 cmp r3, r2 - 8002660: d303 bcc.n 800266a - 8002662: 68bb ldr r3, [r7, #8] - 8002664: 4a11 ldr r2, [pc, #68] ; (80026ac ) - 8002666: 4293 cmp r3, r2 - 8002668: d911 bls.n 800268e - { - /* CSR Clock Range between 60-100 MHz */ - tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div42; - } - else if ((hclk >= 100000000U) && (hclk < 150000000U)) - 800266a: 68bb ldr r3, [r7, #8] - 800266c: 4a0f ldr r2, [pc, #60] ; (80026ac ) - 800266e: 4293 cmp r3, r2 - 8002670: d908 bls.n 8002684 - 8002672: 68bb ldr r3, [r7, #8] - 8002674: 4a0e ldr r2, [pc, #56] ; (80026b0 ) - 8002676: 4293 cmp r3, r2 - 8002678: d804 bhi.n 8002684 - { - /* CSR Clock Range between 100-150 MHz */ - tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div62; - 800267a: 68fb ldr r3, [r7, #12] - 800267c: f043 0304 orr.w r3, r3, #4 - 8002680: 60fb str r3, [r7, #12] - 8002682: e005 b.n 8002690 - } - else /* ((hclk >= 150000000)&&(hclk <= 183000000))*/ - { - /* CSR Clock Range between 150-183 MHz */ - tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div102; - 8002684: 68fb ldr r3, [r7, #12] - 8002686: f043 0310 orr.w r3, r3, #16 - 800268a: 60fb str r3, [r7, #12] - 800268c: e000 b.n 8002690 - tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div42; - 800268e: bf00 nop - } - - /* Write to ETHERNET MAC MIIAR: Configure the ETHERNET CSR Clock Range */ - (heth->Instance)->MACMIIAR = (uint32_t)tmpreg; - 8002690: 687b ldr r3, [r7, #4] - 8002692: 681b ldr r3, [r3, #0] - 8002694: 68fa ldr r2, [r7, #12] - 8002696: 611a str r2, [r3, #16] -} - 8002698: bf00 nop - 800269a: 3710 adds r7, #16 - 800269c: 46bd mov sp, r7 - 800269e: bd80 pop {r7, pc} - 80026a0: 01312cff .word 0x01312cff - 80026a4: 02160ebf .word 0x02160ebf - 80026a8: 03938700 .word 0x03938700 - 80026ac: 05f5e0ff .word 0x05f5e0ff - 80026b0: 08f0d17f .word 0x08f0d17f - -080026b4 : - * @param heth pointer to a ETH_HandleTypeDef structure that contains - * the configuration information for ETHERNET module - * @retval None - */ -static void ETH_FlushTransmitFIFO(ETH_HandleTypeDef *heth) -{ - 80026b4: b580 push {r7, lr} - 80026b6: b084 sub sp, #16 - 80026b8: af00 add r7, sp, #0 - 80026ba: 6078 str r0, [r7, #4] - __IO uint32_t tmpreg = 0; - 80026bc: 2300 movs r3, #0 - 80026be: 60fb str r3, [r7, #12] - - /* Set the Flush Transmit FIFO bit */ - (heth->Instance)->DMAOMR |= ETH_DMAOMR_FTF; - 80026c0: 687b ldr r3, [r7, #4] - 80026c2: 681b ldr r3, [r3, #0] - 80026c4: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 80026c8: 699b ldr r3, [r3, #24] - 80026ca: 687a ldr r2, [r7, #4] - 80026cc: 6812 ldr r2, [r2, #0] - 80026ce: f443 1380 orr.w r3, r3, #1048576 ; 0x100000 - 80026d2: f502 5280 add.w r2, r2, #4096 ; 0x1000 - 80026d6: 6193 str r3, [r2, #24] - - /* Wait until the write operation will be taken into account: - at least four TX_CLK/RX_CLK clock cycles */ - tmpreg = (heth->Instance)->DMAOMR; - 80026d8: 687b ldr r3, [r7, #4] - 80026da: 681b ldr r3, [r3, #0] - 80026dc: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 80026e0: 699b ldr r3, [r3, #24] - 80026e2: 60fb str r3, [r7, #12] - HAL_Delay(ETH_REG_WRITE_DELAY); - 80026e4: 2001 movs r0, #1 - 80026e6: f7ff f9bf bl 8001a68 - (heth->Instance)->DMAOMR = tmpreg; - 80026ea: 687b ldr r3, [r7, #4] - 80026ec: 681a ldr r2, [r3, #0] - 80026ee: 68fb ldr r3, [r7, #12] - 80026f0: f502 5280 add.w r2, r2, #4096 ; 0x1000 - 80026f4: 6193 str r3, [r2, #24] -} - 80026f6: bf00 nop - 80026f8: 3710 adds r7, #16 - 80026fa: 46bd mov sp, r7 - 80026fc: bd80 pop {r7, pc} - ... - -08002700 : - -static void ETH_SetMACConfig(ETH_HandleTypeDef *heth, ETH_MACConfigTypeDef *macconf) -{ - 8002700: b580 push {r7, lr} - 8002702: b084 sub sp, #16 - 8002704: af00 add r7, sp, #0 - 8002706: 6078 str r0, [r7, #4] - 8002708: 6039 str r1, [r7, #0] - uint32_t tmpreg1; - - /*------------------------ ETHERNET MACCR Configuration --------------------*/ - /* Get the ETHERNET MACCR value */ - tmpreg1 = (heth->Instance)->MACCR; - 800270a: 687b ldr r3, [r7, #4] - 800270c: 681b ldr r3, [r3, #0] - 800270e: 681b ldr r3, [r3, #0] - 8002710: 60fb str r3, [r7, #12] - /* Clear WD, PCE, PS, TE and RE bits */ - tmpreg1 &= ETH_MACCR_CLEAR_MASK; - 8002712: 68fa ldr r2, [r7, #12] - 8002714: 4b51 ldr r3, [pc, #324] ; (800285c ) - 8002716: 4013 ands r3, r2 - 8002718: 60fb str r3, [r7, #12] - - tmpreg1 |= (uint32_t)(((uint32_t)((macconf->Watchdog == DISABLE) ? 1U : 0U) << 23U) | - 800271a: 683b ldr r3, [r7, #0] - 800271c: 7c1b ldrb r3, [r3, #16] - 800271e: 2b00 cmp r3, #0 - 8002720: d102 bne.n 8002728 - 8002722: f44f 0200 mov.w r2, #8388608 ; 0x800000 - 8002726: e000 b.n 800272a - 8002728: 2200 movs r2, #0 - ((uint32_t)((macconf->Jabber == DISABLE) ? 1U : 0U) << 22U) | - 800272a: 683b ldr r3, [r7, #0] - 800272c: 7c5b ldrb r3, [r3, #17] - 800272e: 2b00 cmp r3, #0 - 8002730: d102 bne.n 8002738 - 8002732: f44f 0380 mov.w r3, #4194304 ; 0x400000 - 8002736: e000 b.n 800273a - 8002738: 2300 movs r3, #0 - tmpreg1 |= (uint32_t)(((uint32_t)((macconf->Watchdog == DISABLE) ? 1U : 0U) << 23U) | - 800273a: 431a orrs r2, r3 - (uint32_t)macconf->InterPacketGapVal | - 800273c: 683b ldr r3, [r7, #0] - 800273e: 689b ldr r3, [r3, #8] - ((uint32_t)((macconf->Jabber == DISABLE) ? 1U : 0U) << 22U) | - 8002740: 431a orrs r2, r3 - ((uint32_t)macconf->CarrierSenseDuringTransmit << 16U) | - 8002742: 683b ldr r3, [r7, #0] - 8002744: 7fdb ldrb r3, [r3, #31] - 8002746: 041b lsls r3, r3, #16 - (uint32_t)macconf->InterPacketGapVal | - 8002748: 431a orrs r2, r3 - macconf->Speed | - 800274a: 683b ldr r3, [r7, #0] - 800274c: 695b ldr r3, [r3, #20] - ((uint32_t)macconf->CarrierSenseDuringTransmit << 16U) | - 800274e: 4313 orrs r3, r2 - ((uint32_t)((macconf->ReceiveOwn == DISABLE) ? 1U : 0U) << 13U) | - 8002750: 683a ldr r2, [r7, #0] - 8002752: 7f92 ldrb r2, [r2, #30] - 8002754: 2a00 cmp r2, #0 - 8002756: d102 bne.n 800275e - 8002758: f44f 5200 mov.w r2, #8192 ; 0x2000 - 800275c: e000 b.n 8002760 - 800275e: 2200 movs r2, #0 - macconf->Speed | - 8002760: 431a orrs r2, r3 - ((uint32_t)macconf->LoopbackMode << 12U) | - 8002762: 683b ldr r3, [r7, #0] - 8002764: 7f1b ldrb r3, [r3, #28] - 8002766: 031b lsls r3, r3, #12 - ((uint32_t)((macconf->ReceiveOwn == DISABLE) ? 1U : 0U) << 13U) | - 8002768: 431a orrs r2, r3 - macconf->DuplexMode | - 800276a: 683b ldr r3, [r7, #0] - 800276c: 699b ldr r3, [r3, #24] - ((uint32_t)macconf->LoopbackMode << 12U) | - 800276e: 431a orrs r2, r3 - ((uint32_t)macconf->ChecksumOffload << 10U) | - 8002770: 683b ldr r3, [r7, #0] - 8002772: 791b ldrb r3, [r3, #4] - 8002774: 029b lsls r3, r3, #10 - macconf->DuplexMode | - 8002776: 4313 orrs r3, r2 - ((uint32_t)((macconf->RetryTransmission == DISABLE) ? 1U : 0U) << 9U) | - 8002778: 683a ldr r2, [r7, #0] - 800277a: f892 2020 ldrb.w r2, [r2, #32] - 800277e: 2a00 cmp r2, #0 - 8002780: d102 bne.n 8002788 - 8002782: f44f 7200 mov.w r2, #512 ; 0x200 - 8002786: e000 b.n 800278a - 8002788: 2200 movs r2, #0 - ((uint32_t)macconf->ChecksumOffload << 10U) | - 800278a: 431a orrs r2, r3 - ((uint32_t)macconf->AutomaticPadCRCStrip << 7U) | - 800278c: 683b ldr r3, [r7, #0] - 800278e: 7bdb ldrb r3, [r3, #15] - 8002790: 01db lsls r3, r3, #7 - ((uint32_t)((macconf->RetryTransmission == DISABLE) ? 1U : 0U) << 9U) | - 8002792: 431a orrs r2, r3 - macconf->BackOffLimit | - 8002794: 683b ldr r3, [r7, #0] - 8002796: 6a5b ldr r3, [r3, #36] ; 0x24 - ((uint32_t)macconf->AutomaticPadCRCStrip << 7U) | - 8002798: 431a orrs r2, r3 - ((uint32_t)macconf->DeferralCheck << 4U)); - 800279a: 683b ldr r3, [r7, #0] - 800279c: f893 3028 ldrb.w r3, [r3, #40] ; 0x28 - 80027a0: 011b lsls r3, r3, #4 - tmpreg1 |= (uint32_t)(((uint32_t)((macconf->Watchdog == DISABLE) ? 1U : 0U) << 23U) | - 80027a2: 4313 orrs r3, r2 - 80027a4: 68fa ldr r2, [r7, #12] - 80027a6: 4313 orrs r3, r2 - 80027a8: 60fb str r3, [r7, #12] - - /* Write to ETHERNET MACCR */ - (heth->Instance)->MACCR = (uint32_t)tmpreg1; - 80027aa: 687b ldr r3, [r7, #4] - 80027ac: 681b ldr r3, [r3, #0] - 80027ae: 68fa ldr r2, [r7, #12] - 80027b0: 601a str r2, [r3, #0] - - /* Wait until the write operation will be taken into account : - at least four TX_CLK/RX_CLK clock cycles */ - tmpreg1 = (heth->Instance)->MACCR; - 80027b2: 687b ldr r3, [r7, #4] - 80027b4: 681b ldr r3, [r3, #0] - 80027b6: 681b ldr r3, [r3, #0] - 80027b8: 60fb str r3, [r7, #12] - HAL_Delay(ETH_REG_WRITE_DELAY); - 80027ba: 2001 movs r0, #1 - 80027bc: f7ff f954 bl 8001a68 - (heth->Instance)->MACCR = tmpreg1; - 80027c0: 687b ldr r3, [r7, #4] - 80027c2: 681b ldr r3, [r3, #0] - 80027c4: 68fa ldr r2, [r7, #12] - 80027c6: 601a str r2, [r3, #0] - - /*----------------------- ETHERNET MACFCR Configuration --------------------*/ - - /* Get the ETHERNET MACFCR value */ - tmpreg1 = (heth->Instance)->MACFCR; - 80027c8: 687b ldr r3, [r7, #4] - 80027ca: 681b ldr r3, [r3, #0] - 80027cc: 699b ldr r3, [r3, #24] - 80027ce: 60fb str r3, [r7, #12] - /* Clear xx bits */ - tmpreg1 &= ETH_MACFCR_CLEAR_MASK; - 80027d0: 68fa ldr r2, [r7, #12] - 80027d2: f64f 7341 movw r3, #65345 ; 0xff41 - 80027d6: 4013 ands r3, r2 - 80027d8: 60fb str r3, [r7, #12] - - tmpreg1 |= (uint32_t)((macconf->PauseTime << 16U) | - 80027da: 683b ldr r3, [r7, #0] - 80027dc: 6c9b ldr r3, [r3, #72] ; 0x48 - 80027de: 041b lsls r3, r3, #16 - ((uint32_t)((macconf->ZeroQuantaPause == DISABLE) ? 1U : 0U) << 7U) | - 80027e0: 683a ldr r2, [r7, #0] - 80027e2: f892 204c ldrb.w r2, [r2, #76] ; 0x4c - 80027e6: 2a00 cmp r2, #0 - 80027e8: d101 bne.n 80027ee - 80027ea: 2280 movs r2, #128 ; 0x80 - 80027ec: e000 b.n 80027f0 - 80027ee: 2200 movs r2, #0 - tmpreg1 |= (uint32_t)((macconf->PauseTime << 16U) | - 80027f0: 431a orrs r2, r3 - macconf->PauseLowThreshold | - 80027f2: 683b ldr r3, [r7, #0] - 80027f4: 6d1b ldr r3, [r3, #80] ; 0x50 - ((uint32_t)((macconf->ZeroQuantaPause == DISABLE) ? 1U : 0U) << 7U) | - 80027f6: 4313 orrs r3, r2 - ((uint32_t)((macconf->UnicastPausePacketDetect == ENABLE) ? 1U : 0U) << 3U) | - 80027f8: 683a ldr r2, [r7, #0] - 80027fa: f892 2055 ldrb.w r2, [r2, #85] ; 0x55 - 80027fe: 2a01 cmp r2, #1 - 8002800: d101 bne.n 8002806 - 8002802: 2208 movs r2, #8 - 8002804: e000 b.n 8002808 - 8002806: 2200 movs r2, #0 - macconf->PauseLowThreshold | - 8002808: 4313 orrs r3, r2 - ((uint32_t)((macconf->ReceiveFlowControl == ENABLE) ? 1U : 0U) << 2U) | - 800280a: 683a ldr r2, [r7, #0] - 800280c: f892 2056 ldrb.w r2, [r2, #86] ; 0x56 - 8002810: 2a01 cmp r2, #1 - 8002812: d101 bne.n 8002818 - 8002814: 2204 movs r2, #4 - 8002816: e000 b.n 800281a - 8002818: 2200 movs r2, #0 - ((uint32_t)((macconf->UnicastPausePacketDetect == ENABLE) ? 1U : 0U) << 3U) | - 800281a: 4313 orrs r3, r2 - ((uint32_t)((macconf->TransmitFlowControl == ENABLE) ? 1U : 0U) << 1U)); - 800281c: 683a ldr r2, [r7, #0] - 800281e: f892 2054 ldrb.w r2, [r2, #84] ; 0x54 - 8002822: 2a01 cmp r2, #1 - 8002824: d101 bne.n 800282a - 8002826: 2202 movs r2, #2 - 8002828: e000 b.n 800282c - 800282a: 2200 movs r2, #0 - tmpreg1 |= (uint32_t)((macconf->PauseTime << 16U) | - 800282c: 4313 orrs r3, r2 - 800282e: 68fa ldr r2, [r7, #12] - 8002830: 4313 orrs r3, r2 - 8002832: 60fb str r3, [r7, #12] - - /* Write to ETHERNET MACFCR */ - (heth->Instance)->MACFCR = (uint32_t)tmpreg1; - 8002834: 687b ldr r3, [r7, #4] - 8002836: 681b ldr r3, [r3, #0] - 8002838: 68fa ldr r2, [r7, #12] - 800283a: 619a str r2, [r3, #24] - - /* Wait until the write operation will be taken into account : - at least four TX_CLK/RX_CLK clock cycles */ - tmpreg1 = (heth->Instance)->MACFCR; - 800283c: 687b ldr r3, [r7, #4] - 800283e: 681b ldr r3, [r3, #0] - 8002840: 699b ldr r3, [r3, #24] - 8002842: 60fb str r3, [r7, #12] - HAL_Delay(ETH_REG_WRITE_DELAY); - 8002844: 2001 movs r0, #1 - 8002846: f7ff f90f bl 8001a68 - (heth->Instance)->MACFCR = tmpreg1; - 800284a: 687b ldr r3, [r7, #4] - 800284c: 681b ldr r3, [r3, #0] - 800284e: 68fa ldr r2, [r7, #12] - 8002850: 619a str r2, [r3, #24] -} - 8002852: bf00 nop - 8002854: 3710 adds r7, #16 - 8002856: 46bd mov sp, r7 - 8002858: bd80 pop {r7, pc} - 800285a: bf00 nop - 800285c: ff20810f .word 0xff20810f - -08002860 : - -static void ETH_SetDMAConfig(ETH_HandleTypeDef *heth, ETH_DMAConfigTypeDef *dmaconf) -{ - 8002860: b580 push {r7, lr} - 8002862: b084 sub sp, #16 - 8002864: af00 add r7, sp, #0 - 8002866: 6078 str r0, [r7, #4] - 8002868: 6039 str r1, [r7, #0] - uint32_t tmpreg1; - - /*----------------------- ETHERNET DMAOMR Configuration --------------------*/ - /* Get the ETHERNET DMAOMR value */ - tmpreg1 = (heth->Instance)->DMAOMR; - 800286a: 687b ldr r3, [r7, #4] - 800286c: 681b ldr r3, [r3, #0] - 800286e: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 8002872: 699b ldr r3, [r3, #24] - 8002874: 60fb str r3, [r7, #12] - /* Clear xx bits */ - tmpreg1 &= ETH_DMAOMR_CLEAR_MASK; - 8002876: 68fa ldr r2, [r7, #12] - 8002878: 4b3d ldr r3, [pc, #244] ; (8002970 ) - 800287a: 4013 ands r3, r2 - 800287c: 60fb str r3, [r7, #12] - - tmpreg1 |= (uint32_t)(((uint32_t)((dmaconf->DropTCPIPChecksumErrorFrame == DISABLE) ? 1U : 0U) << 26U) | - 800287e: 683b ldr r3, [r7, #0] - 8002880: 7b1b ldrb r3, [r3, #12] - 8002882: 2b00 cmp r3, #0 - 8002884: d102 bne.n 800288c - 8002886: f04f 6280 mov.w r2, #67108864 ; 0x4000000 - 800288a: e000 b.n 800288e - 800288c: 2200 movs r2, #0 - ((uint32_t)dmaconf->ReceiveStoreForward << 25U) | - 800288e: 683b ldr r3, [r7, #0] - 8002890: 7b5b ldrb r3, [r3, #13] - 8002892: 065b lsls r3, r3, #25 - tmpreg1 |= (uint32_t)(((uint32_t)((dmaconf->DropTCPIPChecksumErrorFrame == DISABLE) ? 1U : 0U) << 26U) | - 8002894: 4313 orrs r3, r2 - ((uint32_t)((dmaconf->FlushRxPacket == DISABLE) ? 1U : 0U) << 20U) | - 8002896: 683a ldr r2, [r7, #0] - 8002898: 7f52 ldrb r2, [r2, #29] - 800289a: 2a00 cmp r2, #0 - 800289c: d102 bne.n 80028a4 - 800289e: f44f 1280 mov.w r2, #1048576 ; 0x100000 - 80028a2: e000 b.n 80028a6 - 80028a4: 2200 movs r2, #0 - ((uint32_t)dmaconf->ReceiveStoreForward << 25U) | - 80028a6: 431a orrs r2, r3 - ((uint32_t)dmaconf->TransmitStoreForward << 21U) | - 80028a8: 683b ldr r3, [r7, #0] - 80028aa: 7b9b ldrb r3, [r3, #14] - 80028ac: 055b lsls r3, r3, #21 - ((uint32_t)((dmaconf->FlushRxPacket == DISABLE) ? 1U : 0U) << 20U) | - 80028ae: 431a orrs r2, r3 - dmaconf->TransmitThresholdControl | - 80028b0: 683b ldr r3, [r7, #0] - 80028b2: 695b ldr r3, [r3, #20] - ((uint32_t)dmaconf->TransmitStoreForward << 21U) | - 80028b4: 431a orrs r2, r3 - ((uint32_t)dmaconf->ForwardErrorFrames << 7U) | - 80028b6: 683b ldr r3, [r7, #0] - 80028b8: 7f1b ldrb r3, [r3, #28] - 80028ba: 01db lsls r3, r3, #7 - dmaconf->TransmitThresholdControl | - 80028bc: 431a orrs r2, r3 - ((uint32_t)dmaconf->ForwardUndersizedGoodFrames << 6U) | - 80028be: 683b ldr r3, [r7, #0] - 80028c0: 7f9b ldrb r3, [r3, #30] - 80028c2: 019b lsls r3, r3, #6 - ((uint32_t)dmaconf->ForwardErrorFrames << 7U) | - 80028c4: 431a orrs r2, r3 - dmaconf->ReceiveThresholdControl | - 80028c6: 683b ldr r3, [r7, #0] - 80028c8: 6a1b ldr r3, [r3, #32] - ((uint32_t)dmaconf->ForwardUndersizedGoodFrames << 6U) | - 80028ca: 431a orrs r2, r3 - ((uint32_t)dmaconf->SecondFrameOperate << 2U)); - 80028cc: 683b ldr r3, [r7, #0] - 80028ce: f893 3024 ldrb.w r3, [r3, #36] ; 0x24 - 80028d2: 009b lsls r3, r3, #2 - tmpreg1 |= (uint32_t)(((uint32_t)((dmaconf->DropTCPIPChecksumErrorFrame == DISABLE) ? 1U : 0U) << 26U) | - 80028d4: 4313 orrs r3, r2 - 80028d6: 68fa ldr r2, [r7, #12] - 80028d8: 4313 orrs r3, r2 - 80028da: 60fb str r3, [r7, #12] - - /* Write to ETHERNET DMAOMR */ - (heth->Instance)->DMAOMR = (uint32_t)tmpreg1; - 80028dc: 687b ldr r3, [r7, #4] - 80028de: 681b ldr r3, [r3, #0] - 80028e0: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 80028e4: 461a mov r2, r3 - 80028e6: 68fb ldr r3, [r7, #12] - 80028e8: 6193 str r3, [r2, #24] - - /* Wait until the write operation will be taken into account: - at least four TX_CLK/RX_CLK clock cycles */ - tmpreg1 = (heth->Instance)->DMAOMR; - 80028ea: 687b ldr r3, [r7, #4] - 80028ec: 681b ldr r3, [r3, #0] - 80028ee: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 80028f2: 699b ldr r3, [r3, #24] - 80028f4: 60fb str r3, [r7, #12] - HAL_Delay(ETH_REG_WRITE_DELAY); - 80028f6: 2001 movs r0, #1 - 80028f8: f7ff f8b6 bl 8001a68 - (heth->Instance)->DMAOMR = tmpreg1; - 80028fc: 687b ldr r3, [r7, #4] - 80028fe: 681b ldr r3, [r3, #0] - 8002900: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 8002904: 461a mov r2, r3 - 8002906: 68fb ldr r3, [r7, #12] - 8002908: 6193 str r3, [r2, #24] - - /*----------------------- ETHERNET DMABMR Configuration --------------------*/ - (heth->Instance)->DMABMR = (uint32_t)(((uint32_t)dmaconf->AddressAlignedBeats << 25U) | - 800290a: 683b ldr r3, [r7, #0] - 800290c: 791b ldrb r3, [r3, #4] - 800290e: 065a lsls r2, r3, #25 - dmaconf->BurstMode | - 8002910: 683b ldr r3, [r7, #0] - 8002912: 689b ldr r3, [r3, #8] - (heth->Instance)->DMABMR = (uint32_t)(((uint32_t)dmaconf->AddressAlignedBeats << 25U) | - 8002914: 431a orrs r2, r3 - dmaconf->RxDMABurstLength | /* !! if 4xPBL is selected for Tx or - 8002916: 683b ldr r3, [r7, #0] - 8002918: 699b ldr r3, [r3, #24] - dmaconf->BurstMode | - 800291a: 431a orrs r2, r3 - Rx it is applied for the other */ - dmaconf->TxDMABurstLength | - 800291c: 683b ldr r3, [r7, #0] - 800291e: 691b ldr r3, [r3, #16] - dmaconf->RxDMABurstLength | /* !! if 4xPBL is selected for Tx or - 8002920: 431a orrs r2, r3 - ((uint32_t)dmaconf->EnhancedDescriptorFormat << 7U) | - 8002922: 683b ldr r3, [r7, #0] - 8002924: f893 3025 ldrb.w r3, [r3, #37] ; 0x25 - 8002928: 01db lsls r3, r3, #7 - dmaconf->TxDMABurstLength | - 800292a: 431a orrs r2, r3 - (dmaconf->DescriptorSkipLength << 2U) | - 800292c: 683b ldr r3, [r7, #0] - 800292e: 6a9b ldr r3, [r3, #40] ; 0x28 - 8002930: 009b lsls r3, r3, #2 - ((uint32_t)dmaconf->EnhancedDescriptorFormat << 7U) | - 8002932: 431a orrs r2, r3 - dmaconf->DMAArbitration | - 8002934: 683b ldr r3, [r7, #0] - 8002936: 681b ldr r3, [r3, #0] - (dmaconf->DescriptorSkipLength << 2U) | - 8002938: 4313 orrs r3, r2 - (heth->Instance)->DMABMR = (uint32_t)(((uint32_t)dmaconf->AddressAlignedBeats << 25U) | - 800293a: 687a ldr r2, [r7, #4] - 800293c: 6812 ldr r2, [r2, #0] - 800293e: f443 0300 orr.w r3, r3, #8388608 ; 0x800000 - 8002942: f502 5280 add.w r2, r2, #4096 ; 0x1000 - 8002946: 6013 str r3, [r2, #0] - ETH_DMABMR_USP); /* Enable use of separate PBL for Rx and Tx */ - - /* Wait until the write operation will be taken into account: - at least four TX_CLK/RX_CLK clock cycles */ - tmpreg1 = (heth->Instance)->DMABMR; - 8002948: 687b ldr r3, [r7, #4] - 800294a: 681b ldr r3, [r3, #0] - 800294c: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 8002950: 681b ldr r3, [r3, #0] - 8002952: 60fb str r3, [r7, #12] - HAL_Delay(ETH_REG_WRITE_DELAY); - 8002954: 2001 movs r0, #1 - 8002956: f7ff f887 bl 8001a68 - (heth->Instance)->DMABMR = tmpreg1; - 800295a: 687b ldr r3, [r7, #4] - 800295c: 681b ldr r3, [r3, #0] - 800295e: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 8002962: 461a mov r2, r3 - 8002964: 68fb ldr r3, [r7, #12] - 8002966: 6013 str r3, [r2, #0] -} - 8002968: bf00 nop - 800296a: 3710 adds r7, #16 - 800296c: 46bd mov sp, r7 - 800296e: bd80 pop {r7, pc} - 8002970: f8de3f23 .word 0xf8de3f23 - -08002974 : - * @param heth: pointer to a ETH_HandleTypeDef structure that contains - * the configuration information for ETHERNET module - * @retval HAL status - */ -static void ETH_MACDMAConfig(ETH_HandleTypeDef *heth) -{ - 8002974: b580 push {r7, lr} - 8002976: b0a6 sub sp, #152 ; 0x98 - 8002978: af00 add r7, sp, #0 - 800297a: 6078 str r0, [r7, #4] - ETH_MACConfigTypeDef macDefaultConf; - ETH_DMAConfigTypeDef dmaDefaultConf; - - /*--------------- ETHERNET MAC registers default Configuration --------------*/ - macDefaultConf.Watchdog = ENABLE; - 800297c: 2301 movs r3, #1 - 800297e: f887 3044 strb.w r3, [r7, #68] ; 0x44 - macDefaultConf.Jabber = ENABLE; - 8002982: 2301 movs r3, #1 - 8002984: f887 3045 strb.w r3, [r7, #69] ; 0x45 - macDefaultConf.InterPacketGapVal = ETH_INTERFRAMEGAP_96BIT; - 8002988: 2300 movs r3, #0 - 800298a: 63fb str r3, [r7, #60] ; 0x3c - macDefaultConf.CarrierSenseDuringTransmit = DISABLE; - 800298c: 2300 movs r3, #0 - 800298e: f887 3053 strb.w r3, [r7, #83] ; 0x53 - macDefaultConf.ReceiveOwn = ENABLE; - 8002992: 2301 movs r3, #1 - 8002994: f887 3052 strb.w r3, [r7, #82] ; 0x52 - macDefaultConf.LoopbackMode = DISABLE; - 8002998: 2300 movs r3, #0 - 800299a: f887 3050 strb.w r3, [r7, #80] ; 0x50 - macDefaultConf.ChecksumOffload = ENABLE; - 800299e: 2301 movs r3, #1 - 80029a0: f887 3038 strb.w r3, [r7, #56] ; 0x38 - macDefaultConf.RetryTransmission = DISABLE; - 80029a4: 2300 movs r3, #0 - 80029a6: f887 3054 strb.w r3, [r7, #84] ; 0x54 - macDefaultConf.AutomaticPadCRCStrip = DISABLE; - 80029aa: 2300 movs r3, #0 - 80029ac: f887 3043 strb.w r3, [r7, #67] ; 0x43 - macDefaultConf.BackOffLimit = ETH_BACKOFFLIMIT_10; - 80029b0: 2300 movs r3, #0 - 80029b2: 65bb str r3, [r7, #88] ; 0x58 - macDefaultConf.DeferralCheck = DISABLE; - 80029b4: 2300 movs r3, #0 - 80029b6: f887 305c strb.w r3, [r7, #92] ; 0x5c - macDefaultConf.PauseTime = 0x0U; - 80029ba: 2300 movs r3, #0 - 80029bc: 67fb str r3, [r7, #124] ; 0x7c - macDefaultConf.ZeroQuantaPause = DISABLE; - 80029be: 2300 movs r3, #0 - 80029c0: f887 3080 strb.w r3, [r7, #128] ; 0x80 - macDefaultConf.PauseLowThreshold = ETH_PAUSELOWTHRESHOLD_MINUS4; - 80029c4: 2300 movs r3, #0 - 80029c6: f8c7 3084 str.w r3, [r7, #132] ; 0x84 - macDefaultConf.ReceiveFlowControl = DISABLE; - 80029ca: 2300 movs r3, #0 - 80029cc: f887 308a strb.w r3, [r7, #138] ; 0x8a - macDefaultConf.TransmitFlowControl = DISABLE; - 80029d0: 2300 movs r3, #0 - 80029d2: f887 3088 strb.w r3, [r7, #136] ; 0x88 - macDefaultConf.Speed = ETH_SPEED_100M; - 80029d6: f44f 4380 mov.w r3, #16384 ; 0x4000 - 80029da: 64bb str r3, [r7, #72] ; 0x48 - macDefaultConf.DuplexMode = ETH_FULLDUPLEX_MODE; - 80029dc: f44f 6300 mov.w r3, #2048 ; 0x800 - 80029e0: 64fb str r3, [r7, #76] ; 0x4c - macDefaultConf.UnicastPausePacketDetect = DISABLE; - 80029e2: 2300 movs r3, #0 - 80029e4: f887 3089 strb.w r3, [r7, #137] ; 0x89 - - /* MAC default configuration */ - ETH_SetMACConfig(heth, &macDefaultConf); - 80029e8: f107 0334 add.w r3, r7, #52 ; 0x34 - 80029ec: 4619 mov r1, r3 - 80029ee: 6878 ldr r0, [r7, #4] - 80029f0: f7ff fe86 bl 8002700 - - /*--------------- ETHERNET DMA registers default Configuration --------------*/ - dmaDefaultConf.DropTCPIPChecksumErrorFrame = ENABLE; - 80029f4: 2301 movs r3, #1 - 80029f6: 753b strb r3, [r7, #20] - dmaDefaultConf.ReceiveStoreForward = ENABLE; - 80029f8: 2301 movs r3, #1 - 80029fa: 757b strb r3, [r7, #21] - dmaDefaultConf.FlushRxPacket = ENABLE; - 80029fc: 2301 movs r3, #1 - 80029fe: f887 3025 strb.w r3, [r7, #37] ; 0x25 - dmaDefaultConf.TransmitStoreForward = ENABLE; - 8002a02: 2301 movs r3, #1 - 8002a04: 75bb strb r3, [r7, #22] - dmaDefaultConf.TransmitThresholdControl = ETH_TRANSMITTHRESHOLDCONTROL_64BYTES; - 8002a06: 2300 movs r3, #0 - 8002a08: 61fb str r3, [r7, #28] - dmaDefaultConf.ForwardErrorFrames = DISABLE; - 8002a0a: 2300 movs r3, #0 - 8002a0c: f887 3024 strb.w r3, [r7, #36] ; 0x24 - dmaDefaultConf.ForwardUndersizedGoodFrames = DISABLE; - 8002a10: 2300 movs r3, #0 - 8002a12: f887 3026 strb.w r3, [r7, #38] ; 0x26 - dmaDefaultConf.ReceiveThresholdControl = ETH_RECEIVEDTHRESHOLDCONTROL_64BYTES; - 8002a16: 2300 movs r3, #0 - 8002a18: 62bb str r3, [r7, #40] ; 0x28 - dmaDefaultConf.SecondFrameOperate = ENABLE; - 8002a1a: 2301 movs r3, #1 - 8002a1c: f887 302c strb.w r3, [r7, #44] ; 0x2c - dmaDefaultConf.AddressAlignedBeats = ENABLE; - 8002a20: 2301 movs r3, #1 - 8002a22: 733b strb r3, [r7, #12] - dmaDefaultConf.BurstMode = ETH_BURSTLENGTH_FIXED; - 8002a24: f44f 3380 mov.w r3, #65536 ; 0x10000 - 8002a28: 613b str r3, [r7, #16] - dmaDefaultConf.RxDMABurstLength = ETH_RXDMABURSTLENGTH_32BEAT; - 8002a2a: f44f 0380 mov.w r3, #4194304 ; 0x400000 - 8002a2e: 623b str r3, [r7, #32] - dmaDefaultConf.TxDMABurstLength = ETH_TXDMABURSTLENGTH_32BEAT; - 8002a30: f44f 5300 mov.w r3, #8192 ; 0x2000 - 8002a34: 61bb str r3, [r7, #24] - dmaDefaultConf.EnhancedDescriptorFormat = ENABLE; - 8002a36: 2301 movs r3, #1 - 8002a38: f887 302d strb.w r3, [r7, #45] ; 0x2d - dmaDefaultConf.DescriptorSkipLength = 0x0U; - 8002a3c: 2300 movs r3, #0 - 8002a3e: 633b str r3, [r7, #48] ; 0x30 - dmaDefaultConf.DMAArbitration = ETH_DMAARBITRATION_ROUNDROBIN_RXTX_1_1; - 8002a40: 2300 movs r3, #0 - 8002a42: 60bb str r3, [r7, #8] - - /* DMA default configuration */ - ETH_SetDMAConfig(heth, &dmaDefaultConf); - 8002a44: f107 0308 add.w r3, r7, #8 - 8002a48: 4619 mov r1, r3 - 8002a4a: 6878 ldr r0, [r7, #4] - 8002a4c: f7ff ff08 bl 8002860 -} - 8002a50: bf00 nop - 8002a52: 3798 adds r7, #152 ; 0x98 - 8002a54: 46bd mov sp, r7 - 8002a56: bd80 pop {r7, pc} - -08002a58 : - * @arg ETH_MAC_Address3: MAC Address3 - * @param Addr Pointer to MAC address buffer data (6 bytes) - * @retval HAL status - */ -static void ETH_MACAddressConfig(ETH_HandleTypeDef *heth, uint32_t MacAddr, uint8_t *Addr) -{ - 8002a58: b480 push {r7} - 8002a5a: b087 sub sp, #28 - 8002a5c: af00 add r7, sp, #0 - 8002a5e: 60f8 str r0, [r7, #12] - 8002a60: 60b9 str r1, [r7, #8] - 8002a62: 607a str r2, [r7, #4] - - /* Prevent unused argument(s) compilation warning */ - UNUSED(heth); - - /* Calculate the selected MAC address high register */ - tmpreg1 = ((uint32_t)Addr[5U] << 8U) | (uint32_t)Addr[4U]; - 8002a64: 687b ldr r3, [r7, #4] - 8002a66: 3305 adds r3, #5 - 8002a68: 781b ldrb r3, [r3, #0] - 8002a6a: 021b lsls r3, r3, #8 - 8002a6c: 687a ldr r2, [r7, #4] - 8002a6e: 3204 adds r2, #4 - 8002a70: 7812 ldrb r2, [r2, #0] - 8002a72: 4313 orrs r3, r2 - 8002a74: 617b str r3, [r7, #20] - /* Load the selected MAC address high register */ - (*(__IO uint32_t *)((uint32_t)(ETH_MAC_ADDR_HBASE + MacAddr))) = tmpreg1; - 8002a76: 68ba ldr r2, [r7, #8] - 8002a78: 4b11 ldr r3, [pc, #68] ; (8002ac0 ) - 8002a7a: 4413 add r3, r2 - 8002a7c: 461a mov r2, r3 - 8002a7e: 697b ldr r3, [r7, #20] - 8002a80: 6013 str r3, [r2, #0] - /* Calculate the selected MAC address low register */ - tmpreg1 = ((uint32_t)Addr[3U] << 24U) | ((uint32_t)Addr[2U] << 16U) | ((uint32_t)Addr[1U] << 8U) | Addr[0U]; - 8002a82: 687b ldr r3, [r7, #4] - 8002a84: 3303 adds r3, #3 - 8002a86: 781b ldrb r3, [r3, #0] - 8002a88: 061a lsls r2, r3, #24 - 8002a8a: 687b ldr r3, [r7, #4] - 8002a8c: 3302 adds r3, #2 - 8002a8e: 781b ldrb r3, [r3, #0] - 8002a90: 041b lsls r3, r3, #16 - 8002a92: 431a orrs r2, r3 - 8002a94: 687b ldr r3, [r7, #4] - 8002a96: 3301 adds r3, #1 - 8002a98: 781b ldrb r3, [r3, #0] - 8002a9a: 021b lsls r3, r3, #8 - 8002a9c: 4313 orrs r3, r2 - 8002a9e: 687a ldr r2, [r7, #4] - 8002aa0: 7812 ldrb r2, [r2, #0] - 8002aa2: 4313 orrs r3, r2 - 8002aa4: 617b str r3, [r7, #20] - - /* Load the selected MAC address low register */ - (*(__IO uint32_t *)((uint32_t)(ETH_MAC_ADDR_LBASE + MacAddr))) = tmpreg1; - 8002aa6: 68ba ldr r2, [r7, #8] - 8002aa8: 4b06 ldr r3, [pc, #24] ; (8002ac4 ) - 8002aaa: 4413 add r3, r2 - 8002aac: 461a mov r2, r3 - 8002aae: 697b ldr r3, [r7, #20] - 8002ab0: 6013 str r3, [r2, #0] -} - 8002ab2: bf00 nop - 8002ab4: 371c adds r7, #28 - 8002ab6: 46bd mov sp, r7 - 8002ab8: f85d 7b04 ldr.w r7, [sp], #4 - 8002abc: 4770 bx lr - 8002abe: bf00 nop - 8002ac0: 40028040 .word 0x40028040 - 8002ac4: 40028044 .word 0x40028044 - -08002ac8 : - * @param heth: pointer to a ETH_HandleTypeDef structure that contains - * the configuration information for ETHERNET module - * @retval None - */ -static void ETH_DMATxDescListInit(ETH_HandleTypeDef *heth) -{ - 8002ac8: b480 push {r7} - 8002aca: b085 sub sp, #20 - 8002acc: af00 add r7, sp, #0 - 8002ace: 6078 str r0, [r7, #4] - ETH_DMADescTypeDef *dmatxdesc; - uint32_t i; - - /* Fill each DMATxDesc descriptor with the right values */ - for (i = 0; i < (uint32_t)ETH_TX_DESC_CNT; i++) - 8002ad0: 2300 movs r3, #0 - 8002ad2: 60fb str r3, [r7, #12] - 8002ad4: e03e b.n 8002b54 - { - dmatxdesc = heth->Init.TxDesc + i; - 8002ad6: 687b ldr r3, [r7, #4] - 8002ad8: 68d9 ldr r1, [r3, #12] - 8002ada: 68fa ldr r2, [r7, #12] - 8002adc: 4613 mov r3, r2 - 8002ade: 009b lsls r3, r3, #2 - 8002ae0: 4413 add r3, r2 - 8002ae2: 00db lsls r3, r3, #3 - 8002ae4: 440b add r3, r1 - 8002ae6: 60bb str r3, [r7, #8] - - WRITE_REG(dmatxdesc->DESC0, 0x0); - 8002ae8: 68bb ldr r3, [r7, #8] - 8002aea: 2200 movs r2, #0 - 8002aec: 601a str r2, [r3, #0] - WRITE_REG(dmatxdesc->DESC1, 0x0); - 8002aee: 68bb ldr r3, [r7, #8] - 8002af0: 2200 movs r2, #0 - 8002af2: 605a str r2, [r3, #4] - WRITE_REG(dmatxdesc->DESC2, 0x0); - 8002af4: 68bb ldr r3, [r7, #8] - 8002af6: 2200 movs r2, #0 - 8002af8: 609a str r2, [r3, #8] - WRITE_REG(dmatxdesc->DESC3, 0x0); - 8002afa: 68bb ldr r3, [r7, #8] - 8002afc: 2200 movs r2, #0 - 8002afe: 60da str r2, [r3, #12] - - WRITE_REG(heth->TxDescList.TxDesc[i], (uint32_t)dmatxdesc); - 8002b00: 68b9 ldr r1, [r7, #8] - 8002b02: 687b ldr r3, [r7, #4] - 8002b04: 68fa ldr r2, [r7, #12] - 8002b06: 3206 adds r2, #6 - 8002b08: f843 1022 str.w r1, [r3, r2, lsl #2] - - /* Set Second Address Chained bit */ - SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_TCH); - 8002b0c: 68bb ldr r3, [r7, #8] - 8002b0e: 681b ldr r3, [r3, #0] - 8002b10: f443 1280 orr.w r2, r3, #1048576 ; 0x100000 - 8002b14: 68bb ldr r3, [r7, #8] - 8002b16: 601a str r2, [r3, #0] - - if (i < ((uint32_t)ETH_TX_DESC_CNT - 1U)) - 8002b18: 68fb ldr r3, [r7, #12] - 8002b1a: 2b02 cmp r3, #2 - 8002b1c: d80c bhi.n 8002b38 - { - WRITE_REG(dmatxdesc->DESC3, (uint32_t)(heth->Init.TxDesc + i + 1U)); - 8002b1e: 687b ldr r3, [r7, #4] - 8002b20: 68d9 ldr r1, [r3, #12] - 8002b22: 68fb ldr r3, [r7, #12] - 8002b24: 1c5a adds r2, r3, #1 - 8002b26: 4613 mov r3, r2 - 8002b28: 009b lsls r3, r3, #2 - 8002b2a: 4413 add r3, r2 - 8002b2c: 00db lsls r3, r3, #3 - 8002b2e: 440b add r3, r1 - 8002b30: 461a mov r2, r3 - 8002b32: 68bb ldr r3, [r7, #8] - 8002b34: 60da str r2, [r3, #12] - 8002b36: e004 b.n 8002b42 - } - else - { - WRITE_REG(dmatxdesc->DESC3, (uint32_t)(heth->Init.TxDesc)); - 8002b38: 687b ldr r3, [r7, #4] - 8002b3a: 68db ldr r3, [r3, #12] - 8002b3c: 461a mov r2, r3 - 8002b3e: 68bb ldr r3, [r7, #8] - 8002b40: 60da str r2, [r3, #12] - } - - /* Set the DMA Tx descriptors checksum insertion */ - SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL); - 8002b42: 68bb ldr r3, [r7, #8] - 8002b44: 681b ldr r3, [r3, #0] - 8002b46: f443 0240 orr.w r2, r3, #12582912 ; 0xc00000 - 8002b4a: 68bb ldr r3, [r7, #8] - 8002b4c: 601a str r2, [r3, #0] - for (i = 0; i < (uint32_t)ETH_TX_DESC_CNT; i++) - 8002b4e: 68fb ldr r3, [r7, #12] - 8002b50: 3301 adds r3, #1 - 8002b52: 60fb str r3, [r7, #12] - 8002b54: 68fb ldr r3, [r7, #12] - 8002b56: 2b03 cmp r3, #3 - 8002b58: d9bd bls.n 8002ad6 - } - - heth->TxDescList.CurTxDesc = 0; - 8002b5a: 687b ldr r3, [r7, #4] - 8002b5c: 2200 movs r2, #0 - 8002b5e: 629a str r2, [r3, #40] ; 0x28 - - /* Set Transmit Descriptor List Address */ - WRITE_REG(heth->Instance->DMATDLAR, (uint32_t) heth->Init.TxDesc); - 8002b60: 687b ldr r3, [r7, #4] - 8002b62: 68da ldr r2, [r3, #12] - 8002b64: 687b ldr r3, [r7, #4] - 8002b66: 681b ldr r3, [r3, #0] - 8002b68: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 8002b6c: 611a str r2, [r3, #16] -} - 8002b6e: bf00 nop - 8002b70: 3714 adds r7, #20 - 8002b72: 46bd mov sp, r7 - 8002b74: f85d 7b04 ldr.w r7, [sp], #4 - 8002b78: 4770 bx lr - -08002b7a : - * @param heth: pointer to a ETH_HandleTypeDef structure that contains - * the configuration information for ETHERNET module - * @retval None - */ -static void ETH_DMARxDescListInit(ETH_HandleTypeDef *heth) -{ - 8002b7a: b480 push {r7} - 8002b7c: b085 sub sp, #20 - 8002b7e: af00 add r7, sp, #0 - 8002b80: 6078 str r0, [r7, #4] - ETH_DMADescTypeDef *dmarxdesc; - uint32_t i; - - for (i = 0; i < (uint32_t)ETH_RX_DESC_CNT; i++) - 8002b82: 2300 movs r3, #0 - 8002b84: 60fb str r3, [r7, #12] - 8002b86: e046 b.n 8002c16 - { - dmarxdesc = heth->Init.RxDesc + i; - 8002b88: 687b ldr r3, [r7, #4] - 8002b8a: 6919 ldr r1, [r3, #16] - 8002b8c: 68fa ldr r2, [r7, #12] - 8002b8e: 4613 mov r3, r2 - 8002b90: 009b lsls r3, r3, #2 - 8002b92: 4413 add r3, r2 - 8002b94: 00db lsls r3, r3, #3 - 8002b96: 440b add r3, r1 - 8002b98: 60bb str r3, [r7, #8] - - WRITE_REG(dmarxdesc->DESC0, 0x0); - 8002b9a: 68bb ldr r3, [r7, #8] - 8002b9c: 2200 movs r2, #0 - 8002b9e: 601a str r2, [r3, #0] - WRITE_REG(dmarxdesc->DESC1, 0x0); - 8002ba0: 68bb ldr r3, [r7, #8] - 8002ba2: 2200 movs r2, #0 - 8002ba4: 605a str r2, [r3, #4] - WRITE_REG(dmarxdesc->DESC2, 0x0); - 8002ba6: 68bb ldr r3, [r7, #8] - 8002ba8: 2200 movs r2, #0 - 8002baa: 609a str r2, [r3, #8] - WRITE_REG(dmarxdesc->DESC3, 0x0); - 8002bac: 68bb ldr r3, [r7, #8] - 8002bae: 2200 movs r2, #0 - 8002bb0: 60da str r2, [r3, #12] - WRITE_REG(dmarxdesc->BackupAddr0, 0x0); - 8002bb2: 68bb ldr r3, [r7, #8] - 8002bb4: 2200 movs r2, #0 - 8002bb6: 621a str r2, [r3, #32] - WRITE_REG(dmarxdesc->BackupAddr1, 0x0); - 8002bb8: 68bb ldr r3, [r7, #8] - 8002bba: 2200 movs r2, #0 - 8002bbc: 625a str r2, [r3, #36] ; 0x24 - - /* Set Own bit of the Rx descriptor Status */ - dmarxdesc->DESC0 = ETH_DMARXDESC_OWN; - 8002bbe: 68bb ldr r3, [r7, #8] - 8002bc0: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 - 8002bc4: 601a str r2, [r3, #0] - - /* Set Buffer1 size and Second Address Chained bit */ - dmarxdesc->DESC1 = ETH_DMARXDESC_RCH | ETH_RX_BUF_SIZE; - 8002bc6: 68bb ldr r3, [r7, #8] - 8002bc8: f244 52f8 movw r2, #17912 ; 0x45f8 - 8002bcc: 605a str r2, [r3, #4] - - /* Enable Ethernet DMA Rx Descriptor interrupt */ - dmarxdesc->DESC1 &= ~ETH_DMARXDESC_DIC; - 8002bce: 68bb ldr r3, [r7, #8] - 8002bd0: 685b ldr r3, [r3, #4] - 8002bd2: f023 4200 bic.w r2, r3, #2147483648 ; 0x80000000 - 8002bd6: 68bb ldr r3, [r7, #8] - 8002bd8: 605a str r2, [r3, #4] - - /* Set Rx descritors addresses */ - WRITE_REG(heth->RxDescList.RxDesc[i], (uint32_t)dmarxdesc); - 8002bda: 68b9 ldr r1, [r7, #8] - 8002bdc: 687b ldr r3, [r7, #4] - 8002bde: 68fa ldr r2, [r7, #12] - 8002be0: 3212 adds r2, #18 - 8002be2: f843 1022 str.w r1, [r3, r2, lsl #2] - - if (i < ((uint32_t)ETH_RX_DESC_CNT - 1U)) - 8002be6: 68fb ldr r3, [r7, #12] - 8002be8: 2b02 cmp r3, #2 - 8002bea: d80c bhi.n 8002c06 - { - WRITE_REG(dmarxdesc->DESC3, (uint32_t)(heth->Init.RxDesc + i + 1U)); - 8002bec: 687b ldr r3, [r7, #4] - 8002bee: 6919 ldr r1, [r3, #16] - 8002bf0: 68fb ldr r3, [r7, #12] - 8002bf2: 1c5a adds r2, r3, #1 - 8002bf4: 4613 mov r3, r2 - 8002bf6: 009b lsls r3, r3, #2 - 8002bf8: 4413 add r3, r2 - 8002bfa: 00db lsls r3, r3, #3 - 8002bfc: 440b add r3, r1 - 8002bfe: 461a mov r2, r3 - 8002c00: 68bb ldr r3, [r7, #8] - 8002c02: 60da str r2, [r3, #12] - 8002c04: e004 b.n 8002c10 - } - else - { - WRITE_REG(dmarxdesc->DESC3, (uint32_t)(heth->Init.RxDesc)); - 8002c06: 687b ldr r3, [r7, #4] - 8002c08: 691b ldr r3, [r3, #16] - 8002c0a: 461a mov r2, r3 - 8002c0c: 68bb ldr r3, [r7, #8] - 8002c0e: 60da str r2, [r3, #12] - for (i = 0; i < (uint32_t)ETH_RX_DESC_CNT; i++) - 8002c10: 68fb ldr r3, [r7, #12] - 8002c12: 3301 adds r3, #1 - 8002c14: 60fb str r3, [r7, #12] - 8002c16: 68fb ldr r3, [r7, #12] - 8002c18: 2b03 cmp r3, #3 - 8002c1a: d9b5 bls.n 8002b88 - } - } - - WRITE_REG(heth->RxDescList.RxDescIdx, 0); - 8002c1c: 687b ldr r3, [r7, #4] - 8002c1e: 2200 movs r2, #0 - 8002c20: 65da str r2, [r3, #92] ; 0x5c - WRITE_REG(heth->RxDescList.RxDescCnt, 0); - 8002c22: 687b ldr r3, [r7, #4] - 8002c24: 2200 movs r2, #0 - 8002c26: 661a str r2, [r3, #96] ; 0x60 - WRITE_REG(heth->RxDescList.RxBuildDescIdx, 0); - 8002c28: 687b ldr r3, [r7, #4] - 8002c2a: 2200 movs r2, #0 - 8002c2c: 669a str r2, [r3, #104] ; 0x68 - WRITE_REG(heth->RxDescList.RxBuildDescCnt, 0); - 8002c2e: 687b ldr r3, [r7, #4] - 8002c30: 2200 movs r2, #0 - 8002c32: 66da str r2, [r3, #108] ; 0x6c - WRITE_REG(heth->RxDescList.ItMode, 0); - 8002c34: 687b ldr r3, [r7, #4] - 8002c36: 2200 movs r2, #0 - 8002c38: 659a str r2, [r3, #88] ; 0x58 - - /* Set Receive Descriptor List Address */ - WRITE_REG(heth->Instance->DMARDLAR, (uint32_t) heth->Init.RxDesc); - 8002c3a: 687b ldr r3, [r7, #4] - 8002c3c: 691a ldr r2, [r3, #16] - 8002c3e: 687b ldr r3, [r7, #4] - 8002c40: 681b ldr r3, [r3, #0] - 8002c42: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 8002c46: 60da str r2, [r3, #12] -} - 8002c48: bf00 nop - 8002c4a: 3714 adds r7, #20 - 8002c4c: 46bd mov sp, r7 - 8002c4e: f85d 7b04 ldr.w r7, [sp], #4 - 8002c52: 4770 bx lr - -08002c54 : - * @param pTxConfig: Tx packet configuration - * @param ItMode: Enable or disable Tx EOT interrept - * @retval Status - */ -static uint32_t ETH_Prepare_Tx_Descriptors(ETH_HandleTypeDef *heth, ETH_TxPacketConfig *pTxConfig, uint32_t ItMode) -{ - 8002c54: b480 push {r7} - 8002c56: b08d sub sp, #52 ; 0x34 - 8002c58: af00 add r7, sp, #0 - 8002c5a: 60f8 str r0, [r7, #12] - 8002c5c: 60b9 str r1, [r7, #8] - 8002c5e: 607a str r2, [r7, #4] - ETH_TxDescListTypeDef *dmatxdesclist = &heth->TxDescList; - 8002c60: 68fb ldr r3, [r7, #12] - 8002c62: 3318 adds r3, #24 - 8002c64: 617b str r3, [r7, #20] - uint32_t descidx = dmatxdesclist->CurTxDesc; - 8002c66: 697b ldr r3, [r7, #20] - 8002c68: 691b ldr r3, [r3, #16] - 8002c6a: 62fb str r3, [r7, #44] ; 0x2c - uint32_t firstdescidx = dmatxdesclist->CurTxDesc; - 8002c6c: 697b ldr r3, [r7, #20] - 8002c6e: 691b ldr r3, [r3, #16] - 8002c70: 613b str r3, [r7, #16] - uint32_t idx; - uint32_t descnbr = 0; - 8002c72: 2300 movs r3, #0 - 8002c74: 627b str r3, [r7, #36] ; 0x24 - ETH_DMADescTypeDef *dmatxdesc = (ETH_DMADescTypeDef *)dmatxdesclist->TxDesc[descidx]; - 8002c76: 697b ldr r3, [r7, #20] - 8002c78: 6afa ldr r2, [r7, #44] ; 0x2c - 8002c7a: f853 3022 ldr.w r3, [r3, r2, lsl #2] - 8002c7e: 623b str r3, [r7, #32] - - ETH_BufferTypeDef *txbuffer = pTxConfig->TxBuffer; - 8002c80: 68bb ldr r3, [r7, #8] - 8002c82: 689b ldr r3, [r3, #8] - 8002c84: 61fb str r3, [r7, #28] - uint32_t bd_count = 0; - 8002c86: 2300 movs r3, #0 - 8002c88: 61bb str r3, [r7, #24] - - /* Current Tx Descriptor Owned by DMA: cannot be used by the application */ - if ((READ_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN) == ETH_DMATXDESC_OWN) - 8002c8a: 6a3b ldr r3, [r7, #32] - 8002c8c: 681b ldr r3, [r3, #0] - 8002c8e: f003 4300 and.w r3, r3, #2147483648 ; 0x80000000 - 8002c92: f1b3 4f00 cmp.w r3, #2147483648 ; 0x80000000 - 8002c96: d007 beq.n 8002ca8 - || (dmatxdesclist->PacketAddress[descidx] != NULL)) - 8002c98: 697a ldr r2, [r7, #20] - 8002c9a: 6afb ldr r3, [r7, #44] ; 0x2c - 8002c9c: 3304 adds r3, #4 - 8002c9e: 009b lsls r3, r3, #2 - 8002ca0: 4413 add r3, r2 - 8002ca2: 685b ldr r3, [r3, #4] - 8002ca4: 2b00 cmp r3, #0 - 8002ca6: d001 beq.n 8002cac - { - return HAL_ETH_ERROR_BUSY; - 8002ca8: 2302 movs r3, #2 - 8002caa: e103 b.n 8002eb4 - } - - - descnbr += 1U; - 8002cac: 6a7b ldr r3, [r7, #36] ; 0x24 - 8002cae: 3301 adds r3, #1 - 8002cb0: 627b str r3, [r7, #36] ; 0x24 - - /* Set header or buffer 1 address */ - WRITE_REG(dmatxdesc->DESC2, (uint32_t)txbuffer->buffer); - 8002cb2: 69fb ldr r3, [r7, #28] - 8002cb4: 681b ldr r3, [r3, #0] - 8002cb6: 461a mov r2, r3 - 8002cb8: 6a3b ldr r3, [r7, #32] - 8002cba: 609a str r2, [r3, #8] - - /* Set header or buffer 1 Length */ - MODIFY_REG(dmatxdesc->DESC1, ETH_DMATXDESC_TBS1, txbuffer->len); - 8002cbc: 6a3b ldr r3, [r7, #32] - 8002cbe: 685b ldr r3, [r3, #4] - 8002cc0: f423 53ff bic.w r3, r3, #8160 ; 0x1fe0 - 8002cc4: f023 031f bic.w r3, r3, #31 - 8002cc8: 69fa ldr r2, [r7, #28] - 8002cca: 6852 ldr r2, [r2, #4] - 8002ccc: 431a orrs r2, r3 - 8002cce: 6a3b ldr r3, [r7, #32] - 8002cd0: 605a str r2, [r3, #4] - - if (READ_BIT(pTxConfig->Attributes, ETH_TX_PACKETS_FEATURES_CSUM) != 0U) - 8002cd2: 68bb ldr r3, [r7, #8] - 8002cd4: 681b ldr r3, [r3, #0] - 8002cd6: f003 0301 and.w r3, r3, #1 - 8002cda: 2b00 cmp r3, #0 - 8002cdc: d008 beq.n 8002cf0 - { - MODIFY_REG(dmatxdesc->DESC0, ETH_DMATXDESC_CIC, pTxConfig->ChecksumCtrl); - 8002cde: 6a3b ldr r3, [r7, #32] - 8002ce0: 681b ldr r3, [r3, #0] - 8002ce2: f423 0240 bic.w r2, r3, #12582912 ; 0xc00000 - 8002ce6: 68bb ldr r3, [r7, #8] - 8002ce8: 695b ldr r3, [r3, #20] - 8002cea: 431a orrs r2, r3 - 8002cec: 6a3b ldr r3, [r7, #32] - 8002cee: 601a str r2, [r3, #0] - } - - if (READ_BIT(pTxConfig->Attributes, ETH_TX_PACKETS_FEATURES_CRCPAD) != 0U) - 8002cf0: 68bb ldr r3, [r7, #8] - 8002cf2: 681b ldr r3, [r3, #0] - 8002cf4: f003 0320 and.w r3, r3, #32 - 8002cf8: 2b00 cmp r3, #0 - 8002cfa: d008 beq.n 8002d0e - { - MODIFY_REG(dmatxdesc->DESC0, ETH_CRC_PAD_DISABLE, pTxConfig->CRCPadCtrl); - 8002cfc: 6a3b ldr r3, [r7, #32] - 8002cfe: 681b ldr r3, [r3, #0] - 8002d00: f023 6240 bic.w r2, r3, #201326592 ; 0xc000000 - 8002d04: 68bb ldr r3, [r7, #8] - 8002d06: 691b ldr r3, [r3, #16] - 8002d08: 431a orrs r2, r3 - 8002d0a: 6a3b ldr r3, [r7, #32] - 8002d0c: 601a str r2, [r3, #0] - } - - - if (READ_BIT(pTxConfig->Attributes, ETH_TX_PACKETS_FEATURES_VLANTAG) != 0U) - 8002d0e: 68bb ldr r3, [r7, #8] - 8002d10: 681b ldr r3, [r3, #0] - 8002d12: f003 0304 and.w r3, r3, #4 - 8002d16: 2b00 cmp r3, #0 - 8002d18: d005 beq.n 8002d26 - { - /* Set Vlan Type */ - SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_VF); - 8002d1a: 6a3b ldr r3, [r7, #32] - 8002d1c: 681b ldr r3, [r3, #0] - 8002d1e: f043 0280 orr.w r2, r3, #128 ; 0x80 - 8002d22: 6a3b ldr r3, [r7, #32] - 8002d24: 601a str r2, [r3, #0] - } - - /* Mark it as First Descriptor */ - SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_FS); - 8002d26: 6a3b ldr r3, [r7, #32] - 8002d28: 681b ldr r3, [r3, #0] - 8002d2a: f043 5280 orr.w r2, r3, #268435456 ; 0x10000000 - 8002d2e: 6a3b ldr r3, [r7, #32] - 8002d30: 601a str r2, [r3, #0] - __ASM volatile ("dmb 0xF":::"memory"); - 8002d32: f3bf 8f5f dmb sy -} - 8002d36: bf00 nop - - /* Ensure rest of descriptor is written to RAM before the OWN bit */ - __DMB(); - /* set OWN bit of FIRST descriptor */ - SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN); - 8002d38: 6a3b ldr r3, [r7, #32] - 8002d3a: 681b ldr r3, [r3, #0] - 8002d3c: f043 4200 orr.w r2, r3, #2147483648 ; 0x80000000 - 8002d40: 6a3b ldr r3, [r7, #32] - 8002d42: 601a str r2, [r3, #0] - - /* only if the packet is split into more than one descriptors > 1 */ - while (txbuffer->next != NULL) - 8002d44: e084 b.n 8002e50 - { - /* Clear the LD bit of previous descriptor */ - CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_LS); - 8002d46: 6a3b ldr r3, [r7, #32] - 8002d48: 681b ldr r3, [r3, #0] - 8002d4a: f023 5200 bic.w r2, r3, #536870912 ; 0x20000000 - 8002d4e: 6a3b ldr r3, [r7, #32] - 8002d50: 601a str r2, [r3, #0] - if (ItMode != ((uint32_t)RESET)) - 8002d52: 687b ldr r3, [r7, #4] - 8002d54: 2b00 cmp r3, #0 - 8002d56: d006 beq.n 8002d66 - { - /* Set Interrupt on completion bit */ - SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_IC); - 8002d58: 6a3b ldr r3, [r7, #32] - 8002d5a: 681b ldr r3, [r3, #0] - 8002d5c: f043 4280 orr.w r2, r3, #1073741824 ; 0x40000000 - 8002d60: 6a3b ldr r3, [r7, #32] - 8002d62: 601a str r2, [r3, #0] - 8002d64: e005 b.n 8002d72 - } - else - { - /* Clear Interrupt on completion bit */ - CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_IC); - 8002d66: 6a3b ldr r3, [r7, #32] - 8002d68: 681b ldr r3, [r3, #0] - 8002d6a: f023 4280 bic.w r2, r3, #1073741824 ; 0x40000000 - 8002d6e: 6a3b ldr r3, [r7, #32] - 8002d70: 601a str r2, [r3, #0] - } - /* Increment current tx descriptor index */ - INCR_TX_DESC_INDEX(descidx, 1U); - 8002d72: 6afb ldr r3, [r7, #44] ; 0x2c - 8002d74: 3301 adds r3, #1 - 8002d76: 62fb str r3, [r7, #44] ; 0x2c - 8002d78: 6afb ldr r3, [r7, #44] ; 0x2c - 8002d7a: 2b03 cmp r3, #3 - 8002d7c: d902 bls.n 8002d84 - 8002d7e: 6afb ldr r3, [r7, #44] ; 0x2c - 8002d80: 3b04 subs r3, #4 - 8002d82: 62fb str r3, [r7, #44] ; 0x2c - /* Get current descriptor address */ - dmatxdesc = (ETH_DMADescTypeDef *)dmatxdesclist->TxDesc[descidx]; - 8002d84: 697b ldr r3, [r7, #20] - 8002d86: 6afa ldr r2, [r7, #44] ; 0x2c - 8002d88: f853 3022 ldr.w r3, [r3, r2, lsl #2] - 8002d8c: 623b str r3, [r7, #32] - - /* Clear the FD bit of new Descriptor */ - CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_FS); - 8002d8e: 6a3b ldr r3, [r7, #32] - 8002d90: 681b ldr r3, [r3, #0] - 8002d92: f023 5280 bic.w r2, r3, #268435456 ; 0x10000000 - 8002d96: 6a3b ldr r3, [r7, #32] - 8002d98: 601a str r2, [r3, #0] - - /* Current Tx Descriptor Owned by DMA: cannot be used by the application */ - if ((READ_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN) == ETH_DMATXDESC_OWN) - 8002d9a: 6a3b ldr r3, [r7, #32] - 8002d9c: 681b ldr r3, [r3, #0] - 8002d9e: f003 4300 and.w r3, r3, #2147483648 ; 0x80000000 - 8002da2: f1b3 4f00 cmp.w r3, #2147483648 ; 0x80000000 - 8002da6: d007 beq.n 8002db8 - || (dmatxdesclist->PacketAddress[descidx] != NULL)) - 8002da8: 697a ldr r2, [r7, #20] - 8002daa: 6afb ldr r3, [r7, #44] ; 0x2c - 8002dac: 3304 adds r3, #4 - 8002dae: 009b lsls r3, r3, #2 - 8002db0: 4413 add r3, r2 - 8002db2: 685b ldr r3, [r3, #4] - 8002db4: 2b00 cmp r3, #0 - 8002db6: d029 beq.n 8002e0c - { - descidx = firstdescidx; - 8002db8: 693b ldr r3, [r7, #16] - 8002dba: 62fb str r3, [r7, #44] ; 0x2c - dmatxdesc = (ETH_DMADescTypeDef *)dmatxdesclist->TxDesc[descidx]; - 8002dbc: 697b ldr r3, [r7, #20] - 8002dbe: 6afa ldr r2, [r7, #44] ; 0x2c - 8002dc0: f853 3022 ldr.w r3, [r3, r2, lsl #2] - 8002dc4: 623b str r3, [r7, #32] - - /* clear previous desc own bit */ - for (idx = 0; idx < descnbr; idx ++) - 8002dc6: 2300 movs r3, #0 - 8002dc8: 62bb str r3, [r7, #40] ; 0x28 - 8002dca: e019 b.n 8002e00 - __ASM volatile ("dmb 0xF":::"memory"); - 8002dcc: f3bf 8f5f dmb sy -} - 8002dd0: bf00 nop - { - /* Ensure rest of descriptor is written to RAM before the OWN bit */ - __DMB(); - - CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN); - 8002dd2: 6a3b ldr r3, [r7, #32] - 8002dd4: 681b ldr r3, [r3, #0] - 8002dd6: f023 4200 bic.w r2, r3, #2147483648 ; 0x80000000 - 8002dda: 6a3b ldr r3, [r7, #32] - 8002ddc: 601a str r2, [r3, #0] - - /* Increment current tx descriptor index */ - INCR_TX_DESC_INDEX(descidx, 1U); - 8002dde: 6afb ldr r3, [r7, #44] ; 0x2c - 8002de0: 3301 adds r3, #1 - 8002de2: 62fb str r3, [r7, #44] ; 0x2c - 8002de4: 6afb ldr r3, [r7, #44] ; 0x2c - 8002de6: 2b03 cmp r3, #3 - 8002de8: d902 bls.n 8002df0 - 8002dea: 6afb ldr r3, [r7, #44] ; 0x2c - 8002dec: 3b04 subs r3, #4 - 8002dee: 62fb str r3, [r7, #44] ; 0x2c - /* Get current descriptor address */ - dmatxdesc = (ETH_DMADescTypeDef *)dmatxdesclist->TxDesc[descidx]; - 8002df0: 697b ldr r3, [r7, #20] - 8002df2: 6afa ldr r2, [r7, #44] ; 0x2c - 8002df4: f853 3022 ldr.w r3, [r3, r2, lsl #2] - 8002df8: 623b str r3, [r7, #32] - for (idx = 0; idx < descnbr; idx ++) - 8002dfa: 6abb ldr r3, [r7, #40] ; 0x28 - 8002dfc: 3301 adds r3, #1 - 8002dfe: 62bb str r3, [r7, #40] ; 0x28 - 8002e00: 6aba ldr r2, [r7, #40] ; 0x28 - 8002e02: 6a7b ldr r3, [r7, #36] ; 0x24 - 8002e04: 429a cmp r2, r3 - 8002e06: d3e1 bcc.n 8002dcc - } - - return HAL_ETH_ERROR_BUSY; - 8002e08: 2302 movs r3, #2 - 8002e0a: e053 b.n 8002eb4 - } - - descnbr += 1U; - 8002e0c: 6a7b ldr r3, [r7, #36] ; 0x24 - 8002e0e: 3301 adds r3, #1 - 8002e10: 627b str r3, [r7, #36] ; 0x24 - - /* Get the next Tx buffer in the list */ - txbuffer = txbuffer->next; - 8002e12: 69fb ldr r3, [r7, #28] - 8002e14: 689b ldr r3, [r3, #8] - 8002e16: 61fb str r3, [r7, #28] - - /* Set header or buffer 1 address */ - WRITE_REG(dmatxdesc->DESC2, (uint32_t)txbuffer->buffer); - 8002e18: 69fb ldr r3, [r7, #28] - 8002e1a: 681b ldr r3, [r3, #0] - 8002e1c: 461a mov r2, r3 - 8002e1e: 6a3b ldr r3, [r7, #32] - 8002e20: 609a str r2, [r3, #8] - - /* Set header or buffer 1 Length */ - MODIFY_REG(dmatxdesc->DESC1, ETH_DMATXDESC_TBS1, txbuffer->len); - 8002e22: 6a3b ldr r3, [r7, #32] - 8002e24: 685b ldr r3, [r3, #4] - 8002e26: f423 53ff bic.w r3, r3, #8160 ; 0x1fe0 - 8002e2a: f023 031f bic.w r3, r3, #31 - 8002e2e: 69fa ldr r2, [r7, #28] - 8002e30: 6852 ldr r2, [r2, #4] - 8002e32: 431a orrs r2, r3 - 8002e34: 6a3b ldr r3, [r7, #32] - 8002e36: 605a str r2, [r3, #4] - - bd_count += 1U; - 8002e38: 69bb ldr r3, [r7, #24] - 8002e3a: 3301 adds r3, #1 - 8002e3c: 61bb str r3, [r7, #24] - __ASM volatile ("dmb 0xF":::"memory"); - 8002e3e: f3bf 8f5f dmb sy -} - 8002e42: bf00 nop - - /* Ensure rest of descriptor is written to RAM before the OWN bit */ - __DMB(); - /* Set Own bit */ - SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN); - 8002e44: 6a3b ldr r3, [r7, #32] - 8002e46: 681b ldr r3, [r3, #0] - 8002e48: f043 4200 orr.w r2, r3, #2147483648 ; 0x80000000 - 8002e4c: 6a3b ldr r3, [r7, #32] - 8002e4e: 601a str r2, [r3, #0] - while (txbuffer->next != NULL) - 8002e50: 69fb ldr r3, [r7, #28] - 8002e52: 689b ldr r3, [r3, #8] - 8002e54: 2b00 cmp r3, #0 - 8002e56: f47f af76 bne.w 8002d46 - } - - if (ItMode != ((uint32_t)RESET)) - 8002e5a: 687b ldr r3, [r7, #4] - 8002e5c: 2b00 cmp r3, #0 - 8002e5e: d006 beq.n 8002e6e - { - /* Set Interrupt on completion bit */ - SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_IC); - 8002e60: 6a3b ldr r3, [r7, #32] - 8002e62: 681b ldr r3, [r3, #0] - 8002e64: f043 4280 orr.w r2, r3, #1073741824 ; 0x40000000 - 8002e68: 6a3b ldr r3, [r7, #32] - 8002e6a: 601a str r2, [r3, #0] - 8002e6c: e005 b.n 8002e7a - } - else - { - /* Clear Interrupt on completion bit */ - CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_IC); - 8002e6e: 6a3b ldr r3, [r7, #32] - 8002e70: 681b ldr r3, [r3, #0] - 8002e72: f023 4280 bic.w r2, r3, #1073741824 ; 0x40000000 - 8002e76: 6a3b ldr r3, [r7, #32] - 8002e78: 601a str r2, [r3, #0] - } - - /* Mark it as LAST descriptor */ - SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_LS); - 8002e7a: 6a3b ldr r3, [r7, #32] - 8002e7c: 681b ldr r3, [r3, #0] - 8002e7e: f043 5200 orr.w r2, r3, #536870912 ; 0x20000000 - 8002e82: 6a3b ldr r3, [r7, #32] - 8002e84: 601a str r2, [r3, #0] - /* Save the current packet address to expose it to the application */ - dmatxdesclist->PacketAddress[descidx] = dmatxdesclist->CurrentPacketAddress; - 8002e86: 697b ldr r3, [r7, #20] - 8002e88: 6a5a ldr r2, [r3, #36] ; 0x24 - 8002e8a: 6979 ldr r1, [r7, #20] - 8002e8c: 6afb ldr r3, [r7, #44] ; 0x2c - 8002e8e: 3304 adds r3, #4 - 8002e90: 009b lsls r3, r3, #2 - 8002e92: 440b add r3, r1 - 8002e94: 605a str r2, [r3, #4] - - dmatxdesclist->CurTxDesc = descidx; - 8002e96: 697b ldr r3, [r7, #20] - 8002e98: 6afa ldr r2, [r7, #44] ; 0x2c - 8002e9a: 611a str r2, [r3, #16] - __ASM volatile ("cpsid i" : : : "memory"); - 8002e9c: b672 cpsid i -} - 8002e9e: bf00 nop - - /* disable the interrupt */ - __disable_irq(); - - dmatxdesclist->BuffersInUse += bd_count + 1U; - 8002ea0: 697b ldr r3, [r7, #20] - 8002ea2: 6a9a ldr r2, [r3, #40] ; 0x28 - 8002ea4: 69bb ldr r3, [r7, #24] - 8002ea6: 4413 add r3, r2 - 8002ea8: 1c5a adds r2, r3, #1 - 8002eaa: 697b ldr r3, [r7, #20] - 8002eac: 629a str r2, [r3, #40] ; 0x28 - __ASM volatile ("cpsie i" : : : "memory"); - 8002eae: b662 cpsie i -} - 8002eb0: bf00 nop - /* Enable interrupts back */ - __enable_irq(); - - - /* Return function status */ - return HAL_ETH_ERROR_NONE; - 8002eb2: 2300 movs r3, #0 -} - 8002eb4: 4618 mov r0, r3 - 8002eb6: 3734 adds r7, #52 ; 0x34 - 8002eb8: 46bd mov sp, r7 - 8002eba: f85d 7b04 ldr.w r7, [sp], #4 - 8002ebe: 4770 bx lr - -08002ec0 : - * @param GPIO_Init pointer to a GPIO_InitTypeDef structure that contains - * the configuration information for the specified GPIO peripheral. - * @retval None - */ -void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) -{ - 8002ec0: b480 push {r7} - 8002ec2: b089 sub sp, #36 ; 0x24 - 8002ec4: af00 add r7, sp, #0 - 8002ec6: 6078 str r0, [r7, #4] - 8002ec8: 6039 str r1, [r7, #0] - uint32_t position; - uint32_t ioposition = 0x00U; - 8002eca: 2300 movs r3, #0 - 8002ecc: 617b str r3, [r7, #20] - uint32_t iocurrent = 0x00U; - 8002ece: 2300 movs r3, #0 - 8002ed0: 613b str r3, [r7, #16] - uint32_t temp = 0x00U; - 8002ed2: 2300 movs r3, #0 - 8002ed4: 61bb str r3, [r7, #24] - assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); - assert_param(IS_GPIO_PIN(GPIO_Init->Pin)); - assert_param(IS_GPIO_MODE(GPIO_Init->Mode)); - - /* Configure the port pins */ - for(position = 0U; position < GPIO_NUMBER; position++) - 8002ed6: 2300 movs r3, #0 - 8002ed8: 61fb str r3, [r7, #28] - 8002eda: e177 b.n 80031cc - { - /* Get the IO position */ - ioposition = 0x01U << position; - 8002edc: 2201 movs r2, #1 - 8002ede: 69fb ldr r3, [r7, #28] - 8002ee0: fa02 f303 lsl.w r3, r2, r3 - 8002ee4: 617b str r3, [r7, #20] - /* Get the current IO position */ - iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; - 8002ee6: 683b ldr r3, [r7, #0] - 8002ee8: 681b ldr r3, [r3, #0] - 8002eea: 697a ldr r2, [r7, #20] - 8002eec: 4013 ands r3, r2 - 8002eee: 613b str r3, [r7, #16] - - if(iocurrent == ioposition) - 8002ef0: 693a ldr r2, [r7, #16] - 8002ef2: 697b ldr r3, [r7, #20] - 8002ef4: 429a cmp r2, r3 - 8002ef6: f040 8166 bne.w 80031c6 - { - /*--------------------- GPIO Mode Configuration ------------------------*/ - /* In case of Output or Alternate function mode selection */ - if(((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || \ - 8002efa: 683b ldr r3, [r7, #0] - 8002efc: 685b ldr r3, [r3, #4] - 8002efe: f003 0303 and.w r3, r3, #3 - 8002f02: 2b01 cmp r3, #1 - 8002f04: d005 beq.n 8002f12 - (GPIO_Init->Mode & GPIO_MODE) == MODE_AF) - 8002f06: 683b ldr r3, [r7, #0] - 8002f08: 685b ldr r3, [r3, #4] - 8002f0a: f003 0303 and.w r3, r3, #3 - if(((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || \ - 8002f0e: 2b02 cmp r3, #2 - 8002f10: d130 bne.n 8002f74 - { - /* Check the Speed parameter */ - assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); - /* Configure the IO Speed */ - temp = GPIOx->OSPEEDR; - 8002f12: 687b ldr r3, [r7, #4] - 8002f14: 689b ldr r3, [r3, #8] - 8002f16: 61bb str r3, [r7, #24] - temp &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2U)); - 8002f18: 69fb ldr r3, [r7, #28] - 8002f1a: 005b lsls r3, r3, #1 - 8002f1c: 2203 movs r2, #3 - 8002f1e: fa02 f303 lsl.w r3, r2, r3 - 8002f22: 43db mvns r3, r3 - 8002f24: 69ba ldr r2, [r7, #24] - 8002f26: 4013 ands r3, r2 - 8002f28: 61bb str r3, [r7, #24] - temp |= (GPIO_Init->Speed << (position * 2U)); - 8002f2a: 683b ldr r3, [r7, #0] - 8002f2c: 68da ldr r2, [r3, #12] - 8002f2e: 69fb ldr r3, [r7, #28] - 8002f30: 005b lsls r3, r3, #1 - 8002f32: fa02 f303 lsl.w r3, r2, r3 - 8002f36: 69ba ldr r2, [r7, #24] - 8002f38: 4313 orrs r3, r2 - 8002f3a: 61bb str r3, [r7, #24] - GPIOx->OSPEEDR = temp; - 8002f3c: 687b ldr r3, [r7, #4] - 8002f3e: 69ba ldr r2, [r7, #24] - 8002f40: 609a str r2, [r3, #8] - - /* Configure the IO Output Type */ - temp = GPIOx->OTYPER; - 8002f42: 687b ldr r3, [r7, #4] - 8002f44: 685b ldr r3, [r3, #4] - 8002f46: 61bb str r3, [r7, #24] - temp &= ~(GPIO_OTYPER_OT_0 << position) ; - 8002f48: 2201 movs r2, #1 - 8002f4a: 69fb ldr r3, [r7, #28] - 8002f4c: fa02 f303 lsl.w r3, r2, r3 - 8002f50: 43db mvns r3, r3 - 8002f52: 69ba ldr r2, [r7, #24] - 8002f54: 4013 ands r3, r2 - 8002f56: 61bb str r3, [r7, #24] - temp |= (((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position); - 8002f58: 683b ldr r3, [r7, #0] - 8002f5a: 685b ldr r3, [r3, #4] - 8002f5c: 091b lsrs r3, r3, #4 - 8002f5e: f003 0201 and.w r2, r3, #1 - 8002f62: 69fb ldr r3, [r7, #28] - 8002f64: fa02 f303 lsl.w r3, r2, r3 - 8002f68: 69ba ldr r2, [r7, #24] - 8002f6a: 4313 orrs r3, r2 - 8002f6c: 61bb str r3, [r7, #24] - GPIOx->OTYPER = temp; - 8002f6e: 687b ldr r3, [r7, #4] - 8002f70: 69ba ldr r2, [r7, #24] - 8002f72: 605a str r2, [r3, #4] - } - - if((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG) - 8002f74: 683b ldr r3, [r7, #0] - 8002f76: 685b ldr r3, [r3, #4] - 8002f78: f003 0303 and.w r3, r3, #3 - 8002f7c: 2b03 cmp r3, #3 - 8002f7e: d017 beq.n 8002fb0 - { - /* Check the parameters */ - assert_param(IS_GPIO_PULL(GPIO_Init->Pull)); - - /* Activate the Pull-up or Pull down resistor for the current IO */ - temp = GPIOx->PUPDR; - 8002f80: 687b ldr r3, [r7, #4] - 8002f82: 68db ldr r3, [r3, #12] - 8002f84: 61bb str r3, [r7, #24] - temp &= ~(GPIO_PUPDR_PUPDR0 << (position * 2U)); - 8002f86: 69fb ldr r3, [r7, #28] - 8002f88: 005b lsls r3, r3, #1 - 8002f8a: 2203 movs r2, #3 - 8002f8c: fa02 f303 lsl.w r3, r2, r3 - 8002f90: 43db mvns r3, r3 - 8002f92: 69ba ldr r2, [r7, #24] - 8002f94: 4013 ands r3, r2 - 8002f96: 61bb str r3, [r7, #24] - temp |= ((GPIO_Init->Pull) << (position * 2U)); - 8002f98: 683b ldr r3, [r7, #0] - 8002f9a: 689a ldr r2, [r3, #8] - 8002f9c: 69fb ldr r3, [r7, #28] - 8002f9e: 005b lsls r3, r3, #1 - 8002fa0: fa02 f303 lsl.w r3, r2, r3 - 8002fa4: 69ba ldr r2, [r7, #24] - 8002fa6: 4313 orrs r3, r2 - 8002fa8: 61bb str r3, [r7, #24] - GPIOx->PUPDR = temp; - 8002faa: 687b ldr r3, [r7, #4] - 8002fac: 69ba ldr r2, [r7, #24] - 8002fae: 60da str r2, [r3, #12] - } - - /* In case of Alternate function mode selection */ - if((GPIO_Init->Mode & GPIO_MODE) == MODE_AF) - 8002fb0: 683b ldr r3, [r7, #0] - 8002fb2: 685b ldr r3, [r3, #4] - 8002fb4: f003 0303 and.w r3, r3, #3 - 8002fb8: 2b02 cmp r3, #2 - 8002fba: d123 bne.n 8003004 - { - /* Check the Alternate function parameter */ - assert_param(IS_GPIO_AF(GPIO_Init->Alternate)); - /* Configure Alternate function mapped with the current IO */ - temp = GPIOx->AFR[position >> 3U]; - 8002fbc: 69fb ldr r3, [r7, #28] - 8002fbe: 08da lsrs r2, r3, #3 - 8002fc0: 687b ldr r3, [r7, #4] - 8002fc2: 3208 adds r2, #8 - 8002fc4: f853 3022 ldr.w r3, [r3, r2, lsl #2] - 8002fc8: 61bb str r3, [r7, #24] - temp &= ~(0xFU << ((uint32_t)(position & 0x07U) * 4U)) ; - 8002fca: 69fb ldr r3, [r7, #28] - 8002fcc: f003 0307 and.w r3, r3, #7 - 8002fd0: 009b lsls r3, r3, #2 - 8002fd2: 220f movs r2, #15 - 8002fd4: fa02 f303 lsl.w r3, r2, r3 - 8002fd8: 43db mvns r3, r3 - 8002fda: 69ba ldr r2, [r7, #24] - 8002fdc: 4013 ands r3, r2 - 8002fde: 61bb str r3, [r7, #24] - temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & 0x07U) * 4U)); - 8002fe0: 683b ldr r3, [r7, #0] - 8002fe2: 691a ldr r2, [r3, #16] - 8002fe4: 69fb ldr r3, [r7, #28] - 8002fe6: f003 0307 and.w r3, r3, #7 - 8002fea: 009b lsls r3, r3, #2 - 8002fec: fa02 f303 lsl.w r3, r2, r3 - 8002ff0: 69ba ldr r2, [r7, #24] - 8002ff2: 4313 orrs r3, r2 - 8002ff4: 61bb str r3, [r7, #24] - GPIOx->AFR[position >> 3U] = temp; - 8002ff6: 69fb ldr r3, [r7, #28] - 8002ff8: 08da lsrs r2, r3, #3 - 8002ffa: 687b ldr r3, [r7, #4] - 8002ffc: 3208 adds r2, #8 - 8002ffe: 69b9 ldr r1, [r7, #24] - 8003000: f843 1022 str.w r1, [r3, r2, lsl #2] - } - - /* Configure IO Direction mode (Input, Output, Alternate or Analog) */ - temp = GPIOx->MODER; - 8003004: 687b ldr r3, [r7, #4] - 8003006: 681b ldr r3, [r3, #0] - 8003008: 61bb str r3, [r7, #24] - temp &= ~(GPIO_MODER_MODER0 << (position * 2U)); - 800300a: 69fb ldr r3, [r7, #28] - 800300c: 005b lsls r3, r3, #1 - 800300e: 2203 movs r2, #3 - 8003010: fa02 f303 lsl.w r3, r2, r3 - 8003014: 43db mvns r3, r3 - 8003016: 69ba ldr r2, [r7, #24] - 8003018: 4013 ands r3, r2 - 800301a: 61bb str r3, [r7, #24] - temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2U)); - 800301c: 683b ldr r3, [r7, #0] - 800301e: 685b ldr r3, [r3, #4] - 8003020: f003 0203 and.w r2, r3, #3 - 8003024: 69fb ldr r3, [r7, #28] - 8003026: 005b lsls r3, r3, #1 - 8003028: fa02 f303 lsl.w r3, r2, r3 - 800302c: 69ba ldr r2, [r7, #24] - 800302e: 4313 orrs r3, r2 - 8003030: 61bb str r3, [r7, #24] - GPIOx->MODER = temp; - 8003032: 687b ldr r3, [r7, #4] - 8003034: 69ba ldr r2, [r7, #24] - 8003036: 601a str r2, [r3, #0] - - /*--------------------- EXTI Mode Configuration ------------------------*/ - /* Configure the External Interrupt or event for the current IO */ - if((GPIO_Init->Mode & EXTI_MODE) != 0x00U) - 8003038: 683b ldr r3, [r7, #0] - 800303a: 685b ldr r3, [r3, #4] - 800303c: f403 3340 and.w r3, r3, #196608 ; 0x30000 - 8003040: 2b00 cmp r3, #0 - 8003042: f000 80c0 beq.w 80031c6 - { - /* Enable SYSCFG Clock */ - __HAL_RCC_SYSCFG_CLK_ENABLE(); - 8003046: 2300 movs r3, #0 - 8003048: 60fb str r3, [r7, #12] - 800304a: 4b66 ldr r3, [pc, #408] ; (80031e4 ) - 800304c: 6c5b ldr r3, [r3, #68] ; 0x44 - 800304e: 4a65 ldr r2, [pc, #404] ; (80031e4 ) - 8003050: f443 4380 orr.w r3, r3, #16384 ; 0x4000 - 8003054: 6453 str r3, [r2, #68] ; 0x44 - 8003056: 4b63 ldr r3, [pc, #396] ; (80031e4 ) - 8003058: 6c5b ldr r3, [r3, #68] ; 0x44 - 800305a: f403 4380 and.w r3, r3, #16384 ; 0x4000 - 800305e: 60fb str r3, [r7, #12] - 8003060: 68fb ldr r3, [r7, #12] - - temp = SYSCFG->EXTICR[position >> 2U]; - 8003062: 4a61 ldr r2, [pc, #388] ; (80031e8 ) - 8003064: 69fb ldr r3, [r7, #28] - 8003066: 089b lsrs r3, r3, #2 - 8003068: 3302 adds r3, #2 - 800306a: f852 3023 ldr.w r3, [r2, r3, lsl #2] - 800306e: 61bb str r3, [r7, #24] - temp &= ~(0x0FU << (4U * (position & 0x03U))); - 8003070: 69fb ldr r3, [r7, #28] - 8003072: f003 0303 and.w r3, r3, #3 - 8003076: 009b lsls r3, r3, #2 - 8003078: 220f movs r2, #15 - 800307a: fa02 f303 lsl.w r3, r2, r3 - 800307e: 43db mvns r3, r3 - 8003080: 69ba ldr r2, [r7, #24] - 8003082: 4013 ands r3, r2 - 8003084: 61bb str r3, [r7, #24] - temp |= ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4U * (position & 0x03U))); - 8003086: 687b ldr r3, [r7, #4] - 8003088: 4a58 ldr r2, [pc, #352] ; (80031ec ) - 800308a: 4293 cmp r3, r2 - 800308c: d037 beq.n 80030fe - 800308e: 687b ldr r3, [r7, #4] - 8003090: 4a57 ldr r2, [pc, #348] ; (80031f0 ) - 8003092: 4293 cmp r3, r2 - 8003094: d031 beq.n 80030fa - 8003096: 687b ldr r3, [r7, #4] - 8003098: 4a56 ldr r2, [pc, #344] ; (80031f4 ) - 800309a: 4293 cmp r3, r2 - 800309c: d02b beq.n 80030f6 - 800309e: 687b ldr r3, [r7, #4] - 80030a0: 4a55 ldr r2, [pc, #340] ; (80031f8 ) - 80030a2: 4293 cmp r3, r2 - 80030a4: d025 beq.n 80030f2 - 80030a6: 687b ldr r3, [r7, #4] - 80030a8: 4a54 ldr r2, [pc, #336] ; (80031fc ) - 80030aa: 4293 cmp r3, r2 - 80030ac: d01f beq.n 80030ee - 80030ae: 687b ldr r3, [r7, #4] - 80030b0: 4a53 ldr r2, [pc, #332] ; (8003200 ) - 80030b2: 4293 cmp r3, r2 - 80030b4: d019 beq.n 80030ea - 80030b6: 687b ldr r3, [r7, #4] - 80030b8: 4a52 ldr r2, [pc, #328] ; (8003204 ) - 80030ba: 4293 cmp r3, r2 - 80030bc: d013 beq.n 80030e6 - 80030be: 687b ldr r3, [r7, #4] - 80030c0: 4a51 ldr r2, [pc, #324] ; (8003208 ) - 80030c2: 4293 cmp r3, r2 - 80030c4: d00d beq.n 80030e2 - 80030c6: 687b ldr r3, [r7, #4] - 80030c8: 4a50 ldr r2, [pc, #320] ; (800320c ) - 80030ca: 4293 cmp r3, r2 - 80030cc: d007 beq.n 80030de - 80030ce: 687b ldr r3, [r7, #4] - 80030d0: 4a4f ldr r2, [pc, #316] ; (8003210 ) - 80030d2: 4293 cmp r3, r2 - 80030d4: d101 bne.n 80030da - 80030d6: 2309 movs r3, #9 - 80030d8: e012 b.n 8003100 - 80030da: 230a movs r3, #10 - 80030dc: e010 b.n 8003100 - 80030de: 2308 movs r3, #8 - 80030e0: e00e b.n 8003100 - 80030e2: 2307 movs r3, #7 - 80030e4: e00c b.n 8003100 - 80030e6: 2306 movs r3, #6 - 80030e8: e00a b.n 8003100 - 80030ea: 2305 movs r3, #5 - 80030ec: e008 b.n 8003100 - 80030ee: 2304 movs r3, #4 - 80030f0: e006 b.n 8003100 - 80030f2: 2303 movs r3, #3 - 80030f4: e004 b.n 8003100 - 80030f6: 2302 movs r3, #2 - 80030f8: e002 b.n 8003100 - 80030fa: 2301 movs r3, #1 - 80030fc: e000 b.n 8003100 - 80030fe: 2300 movs r3, #0 - 8003100: 69fa ldr r2, [r7, #28] - 8003102: f002 0203 and.w r2, r2, #3 - 8003106: 0092 lsls r2, r2, #2 - 8003108: 4093 lsls r3, r2 - 800310a: 69ba ldr r2, [r7, #24] - 800310c: 4313 orrs r3, r2 - 800310e: 61bb str r3, [r7, #24] - SYSCFG->EXTICR[position >> 2U] = temp; - 8003110: 4935 ldr r1, [pc, #212] ; (80031e8 ) - 8003112: 69fb ldr r3, [r7, #28] - 8003114: 089b lsrs r3, r3, #2 - 8003116: 3302 adds r3, #2 - 8003118: 69ba ldr r2, [r7, #24] - 800311a: f841 2023 str.w r2, [r1, r3, lsl #2] - - /* Clear Rising Falling edge configuration */ - temp = EXTI->RTSR; - 800311e: 4b3d ldr r3, [pc, #244] ; (8003214 ) - 8003120: 689b ldr r3, [r3, #8] - 8003122: 61bb str r3, [r7, #24] - temp &= ~((uint32_t)iocurrent); - 8003124: 693b ldr r3, [r7, #16] - 8003126: 43db mvns r3, r3 - 8003128: 69ba ldr r2, [r7, #24] - 800312a: 4013 ands r3, r2 - 800312c: 61bb str r3, [r7, #24] - if((GPIO_Init->Mode & TRIGGER_RISING) != 0x00U) - 800312e: 683b ldr r3, [r7, #0] - 8003130: 685b ldr r3, [r3, #4] - 8003132: f403 1380 and.w r3, r3, #1048576 ; 0x100000 - 8003136: 2b00 cmp r3, #0 - 8003138: d003 beq.n 8003142 - { - temp |= iocurrent; - 800313a: 69ba ldr r2, [r7, #24] - 800313c: 693b ldr r3, [r7, #16] - 800313e: 4313 orrs r3, r2 - 8003140: 61bb str r3, [r7, #24] - } - EXTI->RTSR = temp; - 8003142: 4a34 ldr r2, [pc, #208] ; (8003214 ) - 8003144: 69bb ldr r3, [r7, #24] - 8003146: 6093 str r3, [r2, #8] - - temp = EXTI->FTSR; - 8003148: 4b32 ldr r3, [pc, #200] ; (8003214 ) - 800314a: 68db ldr r3, [r3, #12] - 800314c: 61bb str r3, [r7, #24] - temp &= ~((uint32_t)iocurrent); - 800314e: 693b ldr r3, [r7, #16] - 8003150: 43db mvns r3, r3 - 8003152: 69ba ldr r2, [r7, #24] - 8003154: 4013 ands r3, r2 - 8003156: 61bb str r3, [r7, #24] - if((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00U) - 8003158: 683b ldr r3, [r7, #0] - 800315a: 685b ldr r3, [r3, #4] - 800315c: f403 1300 and.w r3, r3, #2097152 ; 0x200000 - 8003160: 2b00 cmp r3, #0 - 8003162: d003 beq.n 800316c - { - temp |= iocurrent; - 8003164: 69ba ldr r2, [r7, #24] - 8003166: 693b ldr r3, [r7, #16] - 8003168: 4313 orrs r3, r2 - 800316a: 61bb str r3, [r7, #24] - } - EXTI->FTSR = temp; - 800316c: 4a29 ldr r2, [pc, #164] ; (8003214 ) - 800316e: 69bb ldr r3, [r7, #24] - 8003170: 60d3 str r3, [r2, #12] - - temp = EXTI->EMR; - 8003172: 4b28 ldr r3, [pc, #160] ; (8003214 ) - 8003174: 685b ldr r3, [r3, #4] - 8003176: 61bb str r3, [r7, #24] - temp &= ~((uint32_t)iocurrent); - 8003178: 693b ldr r3, [r7, #16] - 800317a: 43db mvns r3, r3 - 800317c: 69ba ldr r2, [r7, #24] - 800317e: 4013 ands r3, r2 - 8003180: 61bb str r3, [r7, #24] - if((GPIO_Init->Mode & EXTI_EVT) != 0x00U) - 8003182: 683b ldr r3, [r7, #0] - 8003184: 685b ldr r3, [r3, #4] - 8003186: f403 3300 and.w r3, r3, #131072 ; 0x20000 - 800318a: 2b00 cmp r3, #0 - 800318c: d003 beq.n 8003196 - { - temp |= iocurrent; - 800318e: 69ba ldr r2, [r7, #24] - 8003190: 693b ldr r3, [r7, #16] - 8003192: 4313 orrs r3, r2 - 8003194: 61bb str r3, [r7, #24] - } - EXTI->EMR = temp; - 8003196: 4a1f ldr r2, [pc, #124] ; (8003214 ) - 8003198: 69bb ldr r3, [r7, #24] - 800319a: 6053 str r3, [r2, #4] - - /* Clear EXTI line configuration */ - temp = EXTI->IMR; - 800319c: 4b1d ldr r3, [pc, #116] ; (8003214 ) - 800319e: 681b ldr r3, [r3, #0] - 80031a0: 61bb str r3, [r7, #24] - temp &= ~((uint32_t)iocurrent); - 80031a2: 693b ldr r3, [r7, #16] - 80031a4: 43db mvns r3, r3 - 80031a6: 69ba ldr r2, [r7, #24] - 80031a8: 4013 ands r3, r2 - 80031aa: 61bb str r3, [r7, #24] - if((GPIO_Init->Mode & EXTI_IT) != 0x00U) - 80031ac: 683b ldr r3, [r7, #0] - 80031ae: 685b ldr r3, [r3, #4] - 80031b0: f403 3380 and.w r3, r3, #65536 ; 0x10000 - 80031b4: 2b00 cmp r3, #0 - 80031b6: d003 beq.n 80031c0 - { - temp |= iocurrent; - 80031b8: 69ba ldr r2, [r7, #24] - 80031ba: 693b ldr r3, [r7, #16] - 80031bc: 4313 orrs r3, r2 - 80031be: 61bb str r3, [r7, #24] - } - EXTI->IMR = temp; - 80031c0: 4a14 ldr r2, [pc, #80] ; (8003214 ) - 80031c2: 69bb ldr r3, [r7, #24] - 80031c4: 6013 str r3, [r2, #0] - for(position = 0U; position < GPIO_NUMBER; position++) - 80031c6: 69fb ldr r3, [r7, #28] - 80031c8: 3301 adds r3, #1 - 80031ca: 61fb str r3, [r7, #28] - 80031cc: 69fb ldr r3, [r7, #28] - 80031ce: 2b0f cmp r3, #15 - 80031d0: f67f ae84 bls.w 8002edc - } - } - } -} - 80031d4: bf00 nop - 80031d6: bf00 nop - 80031d8: 3724 adds r7, #36 ; 0x24 - 80031da: 46bd mov sp, r7 - 80031dc: f85d 7b04 ldr.w r7, [sp], #4 - 80031e0: 4770 bx lr - 80031e2: bf00 nop - 80031e4: 40023800 .word 0x40023800 - 80031e8: 40013800 .word 0x40013800 - 80031ec: 40020000 .word 0x40020000 - 80031f0: 40020400 .word 0x40020400 - 80031f4: 40020800 .word 0x40020800 - 80031f8: 40020c00 .word 0x40020c00 - 80031fc: 40021000 .word 0x40021000 - 8003200: 40021400 .word 0x40021400 - 8003204: 40021800 .word 0x40021800 - 8003208: 40021c00 .word 0x40021c00 - 800320c: 40022000 .word 0x40022000 - 8003210: 40022400 .word 0x40022400 - 8003214: 40013c00 .word 0x40013c00 - -08003218 : - * @arg GPIO_PIN_RESET: to clear the port pin - * @arg GPIO_PIN_SET: to set the port pin - * @retval None - */ -void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) -{ - 8003218: b480 push {r7} - 800321a: b083 sub sp, #12 - 800321c: af00 add r7, sp, #0 - 800321e: 6078 str r0, [r7, #4] - 8003220: 460b mov r3, r1 - 8003222: 807b strh r3, [r7, #2] - 8003224: 4613 mov r3, r2 - 8003226: 707b strb r3, [r7, #1] - /* Check the parameters */ - assert_param(IS_GPIO_PIN(GPIO_Pin)); - assert_param(IS_GPIO_PIN_ACTION(PinState)); - - if(PinState != GPIO_PIN_RESET) - 8003228: 787b ldrb r3, [r7, #1] - 800322a: 2b00 cmp r3, #0 - 800322c: d003 beq.n 8003236 - { - GPIOx->BSRR = GPIO_Pin; - 800322e: 887a ldrh r2, [r7, #2] - 8003230: 687b ldr r3, [r7, #4] - 8003232: 619a str r2, [r3, #24] - } - else - { - GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U; - } -} - 8003234: e003 b.n 800323e - GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U; - 8003236: 887b ldrh r3, [r7, #2] - 8003238: 041a lsls r2, r3, #16 - 800323a: 687b ldr r3, [r7, #4] - 800323c: 619a str r2, [r3, #24] -} - 800323e: bf00 nop - 8003240: 370c adds r7, #12 - 8003242: 46bd mov sp, r7 - 8003244: f85d 7b04 ldr.w r7, [sp], #4 - 8003248: 4770 bx lr - ... - -0800324c : - * supported by this API. User should request a transition to HSE Off - * first and then HSE On or HSE Bypass. - * @retval HAL status - */ -__weak HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) -{ - 800324c: b580 push {r7, lr} - 800324e: b086 sub sp, #24 - 8003250: af00 add r7, sp, #0 - 8003252: 6078 str r0, [r7, #4] - uint32_t tickstart, pll_config; - - /* Check Null pointer */ - if(RCC_OscInitStruct == NULL) - 8003254: 687b ldr r3, [r7, #4] - 8003256: 2b00 cmp r3, #0 - 8003258: d101 bne.n 800325e - { - return HAL_ERROR; - 800325a: 2301 movs r3, #1 - 800325c: e267 b.n 800372e - } - - /* Check the parameters */ - assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType)); - /*------------------------------- HSE Configuration ------------------------*/ - if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) - 800325e: 687b ldr r3, [r7, #4] - 8003260: 681b ldr r3, [r3, #0] - 8003262: f003 0301 and.w r3, r3, #1 - 8003266: 2b00 cmp r3, #0 - 8003268: d075 beq.n 8003356 - { - /* Check the parameters */ - assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState)); - /* When the HSE is used as system clock or clock source for PLL in these cases HSE will not disabled */ - if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSE) ||\ - 800326a: 4b88 ldr r3, [pc, #544] ; (800348c ) - 800326c: 689b ldr r3, [r3, #8] - 800326e: f003 030c and.w r3, r3, #12 - 8003272: 2b04 cmp r3, #4 - 8003274: d00c beq.n 8003290 - ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE))) - 8003276: 4b85 ldr r3, [pc, #532] ; (800348c ) - 8003278: 689b ldr r3, [r3, #8] - 800327a: f003 030c and.w r3, r3, #12 - if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSE) ||\ - 800327e: 2b08 cmp r3, #8 - 8003280: d112 bne.n 80032a8 - ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE))) - 8003282: 4b82 ldr r3, [pc, #520] ; (800348c ) - 8003284: 685b ldr r3, [r3, #4] - 8003286: f403 0380 and.w r3, r3, #4194304 ; 0x400000 - 800328a: f5b3 0f80 cmp.w r3, #4194304 ; 0x400000 - 800328e: d10b bne.n 80032a8 - { - if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) - 8003290: 4b7e ldr r3, [pc, #504] ; (800348c ) - 8003292: 681b ldr r3, [r3, #0] - 8003294: f403 3300 and.w r3, r3, #131072 ; 0x20000 - 8003298: 2b00 cmp r3, #0 - 800329a: d05b beq.n 8003354 - 800329c: 687b ldr r3, [r7, #4] - 800329e: 685b ldr r3, [r3, #4] - 80032a0: 2b00 cmp r3, #0 - 80032a2: d157 bne.n 8003354 - { - return HAL_ERROR; - 80032a4: 2301 movs r3, #1 - 80032a6: e242 b.n 800372e - } - } - else - { - /* Set the new HSE configuration ---------------------------------------*/ - __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); - 80032a8: 687b ldr r3, [r7, #4] - 80032aa: 685b ldr r3, [r3, #4] - 80032ac: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 80032b0: d106 bne.n 80032c0 - 80032b2: 4b76 ldr r3, [pc, #472] ; (800348c ) - 80032b4: 681b ldr r3, [r3, #0] - 80032b6: 4a75 ldr r2, [pc, #468] ; (800348c ) - 80032b8: f443 3380 orr.w r3, r3, #65536 ; 0x10000 - 80032bc: 6013 str r3, [r2, #0] - 80032be: e01d b.n 80032fc - 80032c0: 687b ldr r3, [r7, #4] - 80032c2: 685b ldr r3, [r3, #4] - 80032c4: f5b3 2fa0 cmp.w r3, #327680 ; 0x50000 - 80032c8: d10c bne.n 80032e4 - 80032ca: 4b70 ldr r3, [pc, #448] ; (800348c ) - 80032cc: 681b ldr r3, [r3, #0] - 80032ce: 4a6f ldr r2, [pc, #444] ; (800348c ) - 80032d0: f443 2380 orr.w r3, r3, #262144 ; 0x40000 - 80032d4: 6013 str r3, [r2, #0] - 80032d6: 4b6d ldr r3, [pc, #436] ; (800348c ) - 80032d8: 681b ldr r3, [r3, #0] - 80032da: 4a6c ldr r2, [pc, #432] ; (800348c ) - 80032dc: f443 3380 orr.w r3, r3, #65536 ; 0x10000 - 80032e0: 6013 str r3, [r2, #0] - 80032e2: e00b b.n 80032fc - 80032e4: 4b69 ldr r3, [pc, #420] ; (800348c ) - 80032e6: 681b ldr r3, [r3, #0] - 80032e8: 4a68 ldr r2, [pc, #416] ; (800348c ) - 80032ea: f423 3380 bic.w r3, r3, #65536 ; 0x10000 - 80032ee: 6013 str r3, [r2, #0] - 80032f0: 4b66 ldr r3, [pc, #408] ; (800348c ) - 80032f2: 681b ldr r3, [r3, #0] - 80032f4: 4a65 ldr r2, [pc, #404] ; (800348c ) - 80032f6: f423 2380 bic.w r3, r3, #262144 ; 0x40000 - 80032fa: 6013 str r3, [r2, #0] - - /* Check the HSE State */ - if((RCC_OscInitStruct->HSEState) != RCC_HSE_OFF) - 80032fc: 687b ldr r3, [r7, #4] - 80032fe: 685b ldr r3, [r3, #4] - 8003300: 2b00 cmp r3, #0 - 8003302: d013 beq.n 800332c - { - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8003304: f7fe fba4 bl 8001a50 - 8003308: 6138 str r0, [r7, #16] - - /* Wait till HSE is ready */ - while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) - 800330a: e008 b.n 800331e - { - if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE) - 800330c: f7fe fba0 bl 8001a50 - 8003310: 4602 mov r2, r0 - 8003312: 693b ldr r3, [r7, #16] - 8003314: 1ad3 subs r3, r2, r3 - 8003316: 2b64 cmp r3, #100 ; 0x64 - 8003318: d901 bls.n 800331e - { - return HAL_TIMEOUT; - 800331a: 2303 movs r3, #3 - 800331c: e207 b.n 800372e - while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) - 800331e: 4b5b ldr r3, [pc, #364] ; (800348c ) - 8003320: 681b ldr r3, [r3, #0] - 8003322: f403 3300 and.w r3, r3, #131072 ; 0x20000 - 8003326: 2b00 cmp r3, #0 - 8003328: d0f0 beq.n 800330c - 800332a: e014 b.n 8003356 - } - } - else - { - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 800332c: f7fe fb90 bl 8001a50 - 8003330: 6138 str r0, [r7, #16] - - /* Wait till HSE is bypassed or disabled */ - while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) - 8003332: e008 b.n 8003346 - { - if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE) - 8003334: f7fe fb8c bl 8001a50 - 8003338: 4602 mov r2, r0 - 800333a: 693b ldr r3, [r7, #16] - 800333c: 1ad3 subs r3, r2, r3 - 800333e: 2b64 cmp r3, #100 ; 0x64 - 8003340: d901 bls.n 8003346 - { - return HAL_TIMEOUT; - 8003342: 2303 movs r3, #3 - 8003344: e1f3 b.n 800372e - while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) - 8003346: 4b51 ldr r3, [pc, #324] ; (800348c ) - 8003348: 681b ldr r3, [r3, #0] - 800334a: f403 3300 and.w r3, r3, #131072 ; 0x20000 - 800334e: 2b00 cmp r3, #0 - 8003350: d1f0 bne.n 8003334 - 8003352: e000 b.n 8003356 - if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) - 8003354: bf00 nop - } - } - } - } - /*----------------------------- HSI Configuration --------------------------*/ - if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) - 8003356: 687b ldr r3, [r7, #4] - 8003358: 681b ldr r3, [r3, #0] - 800335a: f003 0302 and.w r3, r3, #2 - 800335e: 2b00 cmp r3, #0 - 8003360: d063 beq.n 800342a - /* Check the parameters */ - assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState)); - assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue)); - - /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */ - if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSI) ||\ - 8003362: 4b4a ldr r3, [pc, #296] ; (800348c ) - 8003364: 689b ldr r3, [r3, #8] - 8003366: f003 030c and.w r3, r3, #12 - 800336a: 2b00 cmp r3, #0 - 800336c: d00b beq.n 8003386 - ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI))) - 800336e: 4b47 ldr r3, [pc, #284] ; (800348c ) - 8003370: 689b ldr r3, [r3, #8] - 8003372: f003 030c and.w r3, r3, #12 - if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSI) ||\ - 8003376: 2b08 cmp r3, #8 - 8003378: d11c bne.n 80033b4 - ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI))) - 800337a: 4b44 ldr r3, [pc, #272] ; (800348c ) - 800337c: 685b ldr r3, [r3, #4] - 800337e: f403 0380 and.w r3, r3, #4194304 ; 0x400000 - 8003382: 2b00 cmp r3, #0 - 8003384: d116 bne.n 80033b4 - { - /* When HSI is used as system clock it will not disabled */ - if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) - 8003386: 4b41 ldr r3, [pc, #260] ; (800348c ) - 8003388: 681b ldr r3, [r3, #0] - 800338a: f003 0302 and.w r3, r3, #2 - 800338e: 2b00 cmp r3, #0 - 8003390: d005 beq.n 800339e - 8003392: 687b ldr r3, [r7, #4] - 8003394: 68db ldr r3, [r3, #12] - 8003396: 2b01 cmp r3, #1 - 8003398: d001 beq.n 800339e - { - return HAL_ERROR; - 800339a: 2301 movs r3, #1 - 800339c: e1c7 b.n 800372e - } - /* Otherwise, just the calibration is allowed */ - else - { - /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ - __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); - 800339e: 4b3b ldr r3, [pc, #236] ; (800348c ) - 80033a0: 681b ldr r3, [r3, #0] - 80033a2: f023 02f8 bic.w r2, r3, #248 ; 0xf8 - 80033a6: 687b ldr r3, [r7, #4] - 80033a8: 691b ldr r3, [r3, #16] - 80033aa: 00db lsls r3, r3, #3 - 80033ac: 4937 ldr r1, [pc, #220] ; (800348c ) - 80033ae: 4313 orrs r3, r2 - 80033b0: 600b str r3, [r1, #0] - if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) - 80033b2: e03a b.n 800342a - } - } - else - { - /* Check the HSI State */ - if((RCC_OscInitStruct->HSIState)!= RCC_HSI_OFF) - 80033b4: 687b ldr r3, [r7, #4] - 80033b6: 68db ldr r3, [r3, #12] - 80033b8: 2b00 cmp r3, #0 - 80033ba: d020 beq.n 80033fe - { - /* Enable the Internal High Speed oscillator (HSI). */ - __HAL_RCC_HSI_ENABLE(); - 80033bc: 4b34 ldr r3, [pc, #208] ; (8003490 ) - 80033be: 2201 movs r2, #1 - 80033c0: 601a str r2, [r3, #0] - - /* Get Start Tick*/ - tickstart = HAL_GetTick(); - 80033c2: f7fe fb45 bl 8001a50 - 80033c6: 6138 str r0, [r7, #16] - - /* Wait till HSI is ready */ - while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) - 80033c8: e008 b.n 80033dc - { - if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE) - 80033ca: f7fe fb41 bl 8001a50 - 80033ce: 4602 mov r2, r0 - 80033d0: 693b ldr r3, [r7, #16] - 80033d2: 1ad3 subs r3, r2, r3 - 80033d4: 2b02 cmp r3, #2 - 80033d6: d901 bls.n 80033dc - { - return HAL_TIMEOUT; - 80033d8: 2303 movs r3, #3 - 80033da: e1a8 b.n 800372e - while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) - 80033dc: 4b2b ldr r3, [pc, #172] ; (800348c ) - 80033de: 681b ldr r3, [r3, #0] - 80033e0: f003 0302 and.w r3, r3, #2 - 80033e4: 2b00 cmp r3, #0 - 80033e6: d0f0 beq.n 80033ca - } - } - - /* Adjusts the Internal High Speed oscillator (HSI) calibration value. */ - __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); - 80033e8: 4b28 ldr r3, [pc, #160] ; (800348c ) - 80033ea: 681b ldr r3, [r3, #0] - 80033ec: f023 02f8 bic.w r2, r3, #248 ; 0xf8 - 80033f0: 687b ldr r3, [r7, #4] - 80033f2: 691b ldr r3, [r3, #16] - 80033f4: 00db lsls r3, r3, #3 - 80033f6: 4925 ldr r1, [pc, #148] ; (800348c ) - 80033f8: 4313 orrs r3, r2 - 80033fa: 600b str r3, [r1, #0] - 80033fc: e015 b.n 800342a - } - else - { - /* Disable the Internal High Speed oscillator (HSI). */ - __HAL_RCC_HSI_DISABLE(); - 80033fe: 4b24 ldr r3, [pc, #144] ; (8003490 ) - 8003400: 2200 movs r2, #0 - 8003402: 601a str r2, [r3, #0] - - /* Get Start Tick*/ - tickstart = HAL_GetTick(); - 8003404: f7fe fb24 bl 8001a50 - 8003408: 6138 str r0, [r7, #16] - - /* Wait till HSI is ready */ - while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) - 800340a: e008 b.n 800341e - { - if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE) - 800340c: f7fe fb20 bl 8001a50 - 8003410: 4602 mov r2, r0 - 8003412: 693b ldr r3, [r7, #16] - 8003414: 1ad3 subs r3, r2, r3 - 8003416: 2b02 cmp r3, #2 - 8003418: d901 bls.n 800341e - { - return HAL_TIMEOUT; - 800341a: 2303 movs r3, #3 - 800341c: e187 b.n 800372e - while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) - 800341e: 4b1b ldr r3, [pc, #108] ; (800348c ) - 8003420: 681b ldr r3, [r3, #0] - 8003422: f003 0302 and.w r3, r3, #2 - 8003426: 2b00 cmp r3, #0 - 8003428: d1f0 bne.n 800340c - } - } - } - } - /*------------------------------ LSI Configuration -------------------------*/ - if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) - 800342a: 687b ldr r3, [r7, #4] - 800342c: 681b ldr r3, [r3, #0] - 800342e: f003 0308 and.w r3, r3, #8 - 8003432: 2b00 cmp r3, #0 - 8003434: d036 beq.n 80034a4 - { - /* Check the parameters */ - assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState)); - - /* Check the LSI State */ - if((RCC_OscInitStruct->LSIState)!= RCC_LSI_OFF) - 8003436: 687b ldr r3, [r7, #4] - 8003438: 695b ldr r3, [r3, #20] - 800343a: 2b00 cmp r3, #0 - 800343c: d016 beq.n 800346c - { - /* Enable the Internal Low Speed oscillator (LSI). */ - __HAL_RCC_LSI_ENABLE(); - 800343e: 4b15 ldr r3, [pc, #84] ; (8003494 ) - 8003440: 2201 movs r2, #1 - 8003442: 601a str r2, [r3, #0] - - /* Get Start Tick*/ - tickstart = HAL_GetTick(); - 8003444: f7fe fb04 bl 8001a50 - 8003448: 6138 str r0, [r7, #16] - - /* Wait till LSI is ready */ - while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) - 800344a: e008 b.n 800345e - { - if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE) - 800344c: f7fe fb00 bl 8001a50 - 8003450: 4602 mov r2, r0 - 8003452: 693b ldr r3, [r7, #16] - 8003454: 1ad3 subs r3, r2, r3 - 8003456: 2b02 cmp r3, #2 - 8003458: d901 bls.n 800345e - { - return HAL_TIMEOUT; - 800345a: 2303 movs r3, #3 - 800345c: e167 b.n 800372e - while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) - 800345e: 4b0b ldr r3, [pc, #44] ; (800348c ) - 8003460: 6f5b ldr r3, [r3, #116] ; 0x74 - 8003462: f003 0302 and.w r3, r3, #2 - 8003466: 2b00 cmp r3, #0 - 8003468: d0f0 beq.n 800344c - 800346a: e01b b.n 80034a4 - } - } - else - { - /* Disable the Internal Low Speed oscillator (LSI). */ - __HAL_RCC_LSI_DISABLE(); - 800346c: 4b09 ldr r3, [pc, #36] ; (8003494 ) - 800346e: 2200 movs r2, #0 - 8003470: 601a str r2, [r3, #0] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8003472: f7fe faed bl 8001a50 - 8003476: 6138 str r0, [r7, #16] - - /* Wait till LSI is ready */ - while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) - 8003478: e00e b.n 8003498 - { - if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE) - 800347a: f7fe fae9 bl 8001a50 - 800347e: 4602 mov r2, r0 - 8003480: 693b ldr r3, [r7, #16] - 8003482: 1ad3 subs r3, r2, r3 - 8003484: 2b02 cmp r3, #2 - 8003486: d907 bls.n 8003498 - { - return HAL_TIMEOUT; - 8003488: 2303 movs r3, #3 - 800348a: e150 b.n 800372e - 800348c: 40023800 .word 0x40023800 - 8003490: 42470000 .word 0x42470000 - 8003494: 42470e80 .word 0x42470e80 - while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) - 8003498: 4b88 ldr r3, [pc, #544] ; (80036bc ) - 800349a: 6f5b ldr r3, [r3, #116] ; 0x74 - 800349c: f003 0302 and.w r3, r3, #2 - 80034a0: 2b00 cmp r3, #0 - 80034a2: d1ea bne.n 800347a - } - } - } - } - /*------------------------------ LSE Configuration -------------------------*/ - if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) - 80034a4: 687b ldr r3, [r7, #4] - 80034a6: 681b ldr r3, [r3, #0] - 80034a8: f003 0304 and.w r3, r3, #4 - 80034ac: 2b00 cmp r3, #0 - 80034ae: f000 8097 beq.w 80035e0 - { - FlagStatus pwrclkchanged = RESET; - 80034b2: 2300 movs r3, #0 - 80034b4: 75fb strb r3, [r7, #23] - /* Check the parameters */ - assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState)); - - /* Update LSE configuration in Backup Domain control register */ - /* Requires to enable write access to Backup Domain of necessary */ - if(__HAL_RCC_PWR_IS_CLK_DISABLED()) - 80034b6: 4b81 ldr r3, [pc, #516] ; (80036bc ) - 80034b8: 6c1b ldr r3, [r3, #64] ; 0x40 - 80034ba: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 - 80034be: 2b00 cmp r3, #0 - 80034c0: d10f bne.n 80034e2 - { - __HAL_RCC_PWR_CLK_ENABLE(); - 80034c2: 2300 movs r3, #0 - 80034c4: 60bb str r3, [r7, #8] - 80034c6: 4b7d ldr r3, [pc, #500] ; (80036bc ) - 80034c8: 6c1b ldr r3, [r3, #64] ; 0x40 - 80034ca: 4a7c ldr r2, [pc, #496] ; (80036bc ) - 80034cc: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 - 80034d0: 6413 str r3, [r2, #64] ; 0x40 - 80034d2: 4b7a ldr r3, [pc, #488] ; (80036bc ) - 80034d4: 6c1b ldr r3, [r3, #64] ; 0x40 - 80034d6: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 - 80034da: 60bb str r3, [r7, #8] - 80034dc: 68bb ldr r3, [r7, #8] - pwrclkchanged = SET; - 80034de: 2301 movs r3, #1 - 80034e0: 75fb strb r3, [r7, #23] - } - - if(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) - 80034e2: 4b77 ldr r3, [pc, #476] ; (80036c0 ) - 80034e4: 681b ldr r3, [r3, #0] - 80034e6: f403 7380 and.w r3, r3, #256 ; 0x100 - 80034ea: 2b00 cmp r3, #0 - 80034ec: d118 bne.n 8003520 - { - /* Enable write access to Backup domain */ - SET_BIT(PWR->CR, PWR_CR_DBP); - 80034ee: 4b74 ldr r3, [pc, #464] ; (80036c0 ) - 80034f0: 681b ldr r3, [r3, #0] - 80034f2: 4a73 ldr r2, [pc, #460] ; (80036c0 ) - 80034f4: f443 7380 orr.w r3, r3, #256 ; 0x100 - 80034f8: 6013 str r3, [r2, #0] - - /* Wait for Backup domain Write protection disable */ - tickstart = HAL_GetTick(); - 80034fa: f7fe faa9 bl 8001a50 - 80034fe: 6138 str r0, [r7, #16] - - while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) - 8003500: e008 b.n 8003514 - { - if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) - 8003502: f7fe faa5 bl 8001a50 - 8003506: 4602 mov r2, r0 - 8003508: 693b ldr r3, [r7, #16] - 800350a: 1ad3 subs r3, r2, r3 - 800350c: 2b02 cmp r3, #2 - 800350e: d901 bls.n 8003514 - { - return HAL_TIMEOUT; - 8003510: 2303 movs r3, #3 - 8003512: e10c b.n 800372e - while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) - 8003514: 4b6a ldr r3, [pc, #424] ; (80036c0 ) - 8003516: 681b ldr r3, [r3, #0] - 8003518: f403 7380 and.w r3, r3, #256 ; 0x100 - 800351c: 2b00 cmp r3, #0 - 800351e: d0f0 beq.n 8003502 - } - } - } - - /* Set the new LSE configuration -----------------------------------------*/ - __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); - 8003520: 687b ldr r3, [r7, #4] - 8003522: 689b ldr r3, [r3, #8] - 8003524: 2b01 cmp r3, #1 - 8003526: d106 bne.n 8003536 - 8003528: 4b64 ldr r3, [pc, #400] ; (80036bc ) - 800352a: 6f1b ldr r3, [r3, #112] ; 0x70 - 800352c: 4a63 ldr r2, [pc, #396] ; (80036bc ) - 800352e: f043 0301 orr.w r3, r3, #1 - 8003532: 6713 str r3, [r2, #112] ; 0x70 - 8003534: e01c b.n 8003570 - 8003536: 687b ldr r3, [r7, #4] - 8003538: 689b ldr r3, [r3, #8] - 800353a: 2b05 cmp r3, #5 - 800353c: d10c bne.n 8003558 - 800353e: 4b5f ldr r3, [pc, #380] ; (80036bc ) - 8003540: 6f1b ldr r3, [r3, #112] ; 0x70 - 8003542: 4a5e ldr r2, [pc, #376] ; (80036bc ) - 8003544: f043 0304 orr.w r3, r3, #4 - 8003548: 6713 str r3, [r2, #112] ; 0x70 - 800354a: 4b5c ldr r3, [pc, #368] ; (80036bc ) - 800354c: 6f1b ldr r3, [r3, #112] ; 0x70 - 800354e: 4a5b ldr r2, [pc, #364] ; (80036bc ) - 8003550: f043 0301 orr.w r3, r3, #1 - 8003554: 6713 str r3, [r2, #112] ; 0x70 - 8003556: e00b b.n 8003570 - 8003558: 4b58 ldr r3, [pc, #352] ; (80036bc ) - 800355a: 6f1b ldr r3, [r3, #112] ; 0x70 - 800355c: 4a57 ldr r2, [pc, #348] ; (80036bc ) - 800355e: f023 0301 bic.w r3, r3, #1 - 8003562: 6713 str r3, [r2, #112] ; 0x70 - 8003564: 4b55 ldr r3, [pc, #340] ; (80036bc ) - 8003566: 6f1b ldr r3, [r3, #112] ; 0x70 - 8003568: 4a54 ldr r2, [pc, #336] ; (80036bc ) - 800356a: f023 0304 bic.w r3, r3, #4 - 800356e: 6713 str r3, [r2, #112] ; 0x70 - /* Check the LSE State */ - if((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF) - 8003570: 687b ldr r3, [r7, #4] - 8003572: 689b ldr r3, [r3, #8] - 8003574: 2b00 cmp r3, #0 - 8003576: d015 beq.n 80035a4 - { - /* Get Start Tick*/ - tickstart = HAL_GetTick(); - 8003578: f7fe fa6a bl 8001a50 - 800357c: 6138 str r0, [r7, #16] - - /* Wait till LSE is ready */ - while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) - 800357e: e00a b.n 8003596 - { - if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) - 8003580: f7fe fa66 bl 8001a50 - 8003584: 4602 mov r2, r0 - 8003586: 693b ldr r3, [r7, #16] - 8003588: 1ad3 subs r3, r2, r3 - 800358a: f241 3288 movw r2, #5000 ; 0x1388 - 800358e: 4293 cmp r3, r2 - 8003590: d901 bls.n 8003596 - { - return HAL_TIMEOUT; - 8003592: 2303 movs r3, #3 - 8003594: e0cb b.n 800372e - while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) - 8003596: 4b49 ldr r3, [pc, #292] ; (80036bc ) - 8003598: 6f1b ldr r3, [r3, #112] ; 0x70 - 800359a: f003 0302 and.w r3, r3, #2 - 800359e: 2b00 cmp r3, #0 - 80035a0: d0ee beq.n 8003580 - 80035a2: e014 b.n 80035ce - } - } - else - { - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 80035a4: f7fe fa54 bl 8001a50 - 80035a8: 6138 str r0, [r7, #16] - - /* Wait till LSE is ready */ - while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) - 80035aa: e00a b.n 80035c2 - { - if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) - 80035ac: f7fe fa50 bl 8001a50 - 80035b0: 4602 mov r2, r0 - 80035b2: 693b ldr r3, [r7, #16] - 80035b4: 1ad3 subs r3, r2, r3 - 80035b6: f241 3288 movw r2, #5000 ; 0x1388 - 80035ba: 4293 cmp r3, r2 - 80035bc: d901 bls.n 80035c2 - { - return HAL_TIMEOUT; - 80035be: 2303 movs r3, #3 - 80035c0: e0b5 b.n 800372e - while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) - 80035c2: 4b3e ldr r3, [pc, #248] ; (80036bc ) - 80035c4: 6f1b ldr r3, [r3, #112] ; 0x70 - 80035c6: f003 0302 and.w r3, r3, #2 - 80035ca: 2b00 cmp r3, #0 - 80035cc: d1ee bne.n 80035ac - } - } - } - - /* Restore clock configuration if changed */ - if(pwrclkchanged == SET) - 80035ce: 7dfb ldrb r3, [r7, #23] - 80035d0: 2b01 cmp r3, #1 - 80035d2: d105 bne.n 80035e0 - { - __HAL_RCC_PWR_CLK_DISABLE(); - 80035d4: 4b39 ldr r3, [pc, #228] ; (80036bc ) - 80035d6: 6c1b ldr r3, [r3, #64] ; 0x40 - 80035d8: 4a38 ldr r2, [pc, #224] ; (80036bc ) - 80035da: f023 5380 bic.w r3, r3, #268435456 ; 0x10000000 - 80035de: 6413 str r3, [r2, #64] ; 0x40 - } - } - /*-------------------------------- PLL Configuration -----------------------*/ - /* Check the parameters */ - assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState)); - if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE) - 80035e0: 687b ldr r3, [r7, #4] - 80035e2: 699b ldr r3, [r3, #24] - 80035e4: 2b00 cmp r3, #0 - 80035e6: f000 80a1 beq.w 800372c - { - /* Check if the PLL is used as system clock or not */ - if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL) - 80035ea: 4b34 ldr r3, [pc, #208] ; (80036bc ) - 80035ec: 689b ldr r3, [r3, #8] - 80035ee: f003 030c and.w r3, r3, #12 - 80035f2: 2b08 cmp r3, #8 - 80035f4: d05c beq.n 80036b0 - { - if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) - 80035f6: 687b ldr r3, [r7, #4] - 80035f8: 699b ldr r3, [r3, #24] - 80035fa: 2b02 cmp r3, #2 - 80035fc: d141 bne.n 8003682 - assert_param(IS_RCC_PLLN_VALUE(RCC_OscInitStruct->PLL.PLLN)); - assert_param(IS_RCC_PLLP_VALUE(RCC_OscInitStruct->PLL.PLLP)); - assert_param(IS_RCC_PLLQ_VALUE(RCC_OscInitStruct->PLL.PLLQ)); - - /* Disable the main PLL. */ - __HAL_RCC_PLL_DISABLE(); - 80035fe: 4b31 ldr r3, [pc, #196] ; (80036c4 ) - 8003600: 2200 movs r2, #0 - 8003602: 601a str r2, [r3, #0] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8003604: f7fe fa24 bl 8001a50 - 8003608: 6138 str r0, [r7, #16] - - /* Wait till PLL is ready */ - while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) - 800360a: e008 b.n 800361e - { - if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) - 800360c: f7fe fa20 bl 8001a50 - 8003610: 4602 mov r2, r0 - 8003612: 693b ldr r3, [r7, #16] - 8003614: 1ad3 subs r3, r2, r3 - 8003616: 2b02 cmp r3, #2 - 8003618: d901 bls.n 800361e - { - return HAL_TIMEOUT; - 800361a: 2303 movs r3, #3 - 800361c: e087 b.n 800372e - while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) - 800361e: 4b27 ldr r3, [pc, #156] ; (80036bc ) - 8003620: 681b ldr r3, [r3, #0] - 8003622: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 - 8003626: 2b00 cmp r3, #0 - 8003628: d1f0 bne.n 800360c - } - } - - /* Configure the main PLL clock source, multiplication and division factors. */ - WRITE_REG(RCC->PLLCFGR, (RCC_OscInitStruct->PLL.PLLSource | \ - 800362a: 687b ldr r3, [r7, #4] - 800362c: 69da ldr r2, [r3, #28] - 800362e: 687b ldr r3, [r7, #4] - 8003630: 6a1b ldr r3, [r3, #32] - 8003632: 431a orrs r2, r3 - 8003634: 687b ldr r3, [r7, #4] - 8003636: 6a5b ldr r3, [r3, #36] ; 0x24 - 8003638: 019b lsls r3, r3, #6 - 800363a: 431a orrs r2, r3 - 800363c: 687b ldr r3, [r7, #4] - 800363e: 6a9b ldr r3, [r3, #40] ; 0x28 - 8003640: 085b lsrs r3, r3, #1 - 8003642: 3b01 subs r3, #1 - 8003644: 041b lsls r3, r3, #16 - 8003646: 431a orrs r2, r3 - 8003648: 687b ldr r3, [r7, #4] - 800364a: 6adb ldr r3, [r3, #44] ; 0x2c - 800364c: 061b lsls r3, r3, #24 - 800364e: 491b ldr r1, [pc, #108] ; (80036bc ) - 8003650: 4313 orrs r3, r2 - 8003652: 604b str r3, [r1, #4] - RCC_OscInitStruct->PLL.PLLM | \ - (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos) | \ - (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos) | \ - (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos))); - /* Enable the main PLL. */ - __HAL_RCC_PLL_ENABLE(); - 8003654: 4b1b ldr r3, [pc, #108] ; (80036c4 ) - 8003656: 2201 movs r2, #1 - 8003658: 601a str r2, [r3, #0] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 800365a: f7fe f9f9 bl 8001a50 - 800365e: 6138 str r0, [r7, #16] - - /* Wait till PLL is ready */ - while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) - 8003660: e008 b.n 8003674 - { - if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) - 8003662: f7fe f9f5 bl 8001a50 - 8003666: 4602 mov r2, r0 - 8003668: 693b ldr r3, [r7, #16] - 800366a: 1ad3 subs r3, r2, r3 - 800366c: 2b02 cmp r3, #2 - 800366e: d901 bls.n 8003674 - { - return HAL_TIMEOUT; - 8003670: 2303 movs r3, #3 - 8003672: e05c b.n 800372e - while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) - 8003674: 4b11 ldr r3, [pc, #68] ; (80036bc ) - 8003676: 681b ldr r3, [r3, #0] - 8003678: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 - 800367c: 2b00 cmp r3, #0 - 800367e: d0f0 beq.n 8003662 - 8003680: e054 b.n 800372c - } - } - else - { - /* Disable the main PLL. */ - __HAL_RCC_PLL_DISABLE(); - 8003682: 4b10 ldr r3, [pc, #64] ; (80036c4 ) - 8003684: 2200 movs r2, #0 - 8003686: 601a str r2, [r3, #0] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8003688: f7fe f9e2 bl 8001a50 - 800368c: 6138 str r0, [r7, #16] - - /* Wait till PLL is ready */ - while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) - 800368e: e008 b.n 80036a2 - { - if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) - 8003690: f7fe f9de bl 8001a50 - 8003694: 4602 mov r2, r0 - 8003696: 693b ldr r3, [r7, #16] - 8003698: 1ad3 subs r3, r2, r3 - 800369a: 2b02 cmp r3, #2 - 800369c: d901 bls.n 80036a2 - { - return HAL_TIMEOUT; - 800369e: 2303 movs r3, #3 - 80036a0: e045 b.n 800372e - while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) - 80036a2: 4b06 ldr r3, [pc, #24] ; (80036bc ) - 80036a4: 681b ldr r3, [r3, #0] - 80036a6: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 - 80036aa: 2b00 cmp r3, #0 - 80036ac: d1f0 bne.n 8003690 - 80036ae: e03d b.n 800372c - } - } - else - { - /* Check if there is a request to disable the PLL used as System clock source */ - if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) - 80036b0: 687b ldr r3, [r7, #4] - 80036b2: 699b ldr r3, [r3, #24] - 80036b4: 2b01 cmp r3, #1 - 80036b6: d107 bne.n 80036c8 - { - return HAL_ERROR; - 80036b8: 2301 movs r3, #1 - 80036ba: e038 b.n 800372e - 80036bc: 40023800 .word 0x40023800 - 80036c0: 40007000 .word 0x40007000 - 80036c4: 42470060 .word 0x42470060 - } - else - { - /* Do not return HAL_ERROR if request repeats the current configuration */ - pll_config = RCC->PLLCFGR; - 80036c8: 4b1b ldr r3, [pc, #108] ; (8003738 ) - 80036ca: 685b ldr r3, [r3, #4] - 80036cc: 60fb str r3, [r7, #12] - (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN) << RCC_PLLCFGR_PLLN_Pos) || - (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U)) << RCC_PLLCFGR_PLLP_Pos) || - (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)) || - (READ_BIT(pll_config, RCC_PLLCFGR_PLLR) != (RCC_OscInitStruct->PLL.PLLR << RCC_PLLCFGR_PLLR_Pos))) -#else - if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) || - 80036ce: 687b ldr r3, [r7, #4] - 80036d0: 699b ldr r3, [r3, #24] - 80036d2: 2b01 cmp r3, #1 - 80036d4: d028 beq.n 8003728 - (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || - 80036d6: 68fb ldr r3, [r7, #12] - 80036d8: f403 0280 and.w r2, r3, #4194304 ; 0x400000 - 80036dc: 687b ldr r3, [r7, #4] - 80036de: 69db ldr r3, [r3, #28] - if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) || - 80036e0: 429a cmp r2, r3 - 80036e2: d121 bne.n 8003728 - (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != (RCC_OscInitStruct->PLL.PLLM) << RCC_PLLCFGR_PLLM_Pos) || - 80036e4: 68fb ldr r3, [r7, #12] - 80036e6: f003 023f and.w r2, r3, #63 ; 0x3f - 80036ea: 687b ldr r3, [r7, #4] - 80036ec: 6a1b ldr r3, [r3, #32] - (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || - 80036ee: 429a cmp r2, r3 - 80036f0: d11a bne.n 8003728 - (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN) << RCC_PLLCFGR_PLLN_Pos) || - 80036f2: 68fa ldr r2, [r7, #12] - 80036f4: f647 73c0 movw r3, #32704 ; 0x7fc0 - 80036f8: 4013 ands r3, r2 - 80036fa: 687a ldr r2, [r7, #4] - 80036fc: 6a52 ldr r2, [r2, #36] ; 0x24 - 80036fe: 0192 lsls r2, r2, #6 - (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != (RCC_OscInitStruct->PLL.PLLM) << RCC_PLLCFGR_PLLM_Pos) || - 8003700: 4293 cmp r3, r2 - 8003702: d111 bne.n 8003728 - (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U)) << RCC_PLLCFGR_PLLP_Pos) || - 8003704: 68fb ldr r3, [r7, #12] - 8003706: f403 3240 and.w r2, r3, #196608 ; 0x30000 - 800370a: 687b ldr r3, [r7, #4] - 800370c: 6a9b ldr r3, [r3, #40] ; 0x28 - 800370e: 085b lsrs r3, r3, #1 - 8003710: 3b01 subs r3, #1 - 8003712: 041b lsls r3, r3, #16 - (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN) << RCC_PLLCFGR_PLLN_Pos) || - 8003714: 429a cmp r2, r3 - 8003716: d107 bne.n 8003728 - (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos))) - 8003718: 68fb ldr r3, [r7, #12] - 800371a: f003 6270 and.w r2, r3, #251658240 ; 0xf000000 - 800371e: 687b ldr r3, [r7, #4] - 8003720: 6adb ldr r3, [r3, #44] ; 0x2c - 8003722: 061b lsls r3, r3, #24 - (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U)) << RCC_PLLCFGR_PLLP_Pos) || - 8003724: 429a cmp r2, r3 - 8003726: d001 beq.n 800372c -#endif - { - return HAL_ERROR; - 8003728: 2301 movs r3, #1 - 800372a: e000 b.n 800372e - } - } - } - } - return HAL_OK; - 800372c: 2300 movs r3, #0 -} - 800372e: 4618 mov r0, r3 - 8003730: 3718 adds r7, #24 - 8003732: 46bd mov sp, r7 - 8003734: bd80 pop {r7, pc} - 8003736: bf00 nop - 8003738: 40023800 .word 0x40023800 - -0800373c : - * HPRE[3:0] bits to ensure that HCLK not exceed the maximum allowed frequency - * (for more details refer to section above "Initialization/de-initialization functions") - * @retval None - */ -HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency) -{ - 800373c: b580 push {r7, lr} - 800373e: b084 sub sp, #16 - 8003740: af00 add r7, sp, #0 - 8003742: 6078 str r0, [r7, #4] - 8003744: 6039 str r1, [r7, #0] - uint32_t tickstart; - - /* Check Null pointer */ - if(RCC_ClkInitStruct == NULL) - 8003746: 687b ldr r3, [r7, #4] - 8003748: 2b00 cmp r3, #0 - 800374a: d101 bne.n 8003750 - { - return HAL_ERROR; - 800374c: 2301 movs r3, #1 - 800374e: e0cc b.n 80038ea - /* To correctly read data from FLASH memory, the number of wait states (LATENCY) - must be correctly programmed according to the frequency of the CPU clock - (HCLK) and the supply voltage of the device. */ - - /* Increasing the number of wait states because of higher CPU frequency */ - if(FLatency > __HAL_FLASH_GET_LATENCY()) - 8003750: 4b68 ldr r3, [pc, #416] ; (80038f4 ) - 8003752: 681b ldr r3, [r3, #0] - 8003754: f003 030f and.w r3, r3, #15 - 8003758: 683a ldr r2, [r7, #0] - 800375a: 429a cmp r2, r3 - 800375c: d90c bls.n 8003778 - { - /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ - __HAL_FLASH_SET_LATENCY(FLatency); - 800375e: 4b65 ldr r3, [pc, #404] ; (80038f4 ) - 8003760: 683a ldr r2, [r7, #0] - 8003762: b2d2 uxtb r2, r2 - 8003764: 701a strb r2, [r3, #0] - - /* Check that the new number of wait states is taken into account to access the Flash - memory by reading the FLASH_ACR register */ - if(__HAL_FLASH_GET_LATENCY() != FLatency) - 8003766: 4b63 ldr r3, [pc, #396] ; (80038f4 ) - 8003768: 681b ldr r3, [r3, #0] - 800376a: f003 030f and.w r3, r3, #15 - 800376e: 683a ldr r2, [r7, #0] - 8003770: 429a cmp r2, r3 - 8003772: d001 beq.n 8003778 - { - return HAL_ERROR; - 8003774: 2301 movs r3, #1 - 8003776: e0b8 b.n 80038ea - } - } - - /*-------------------------- HCLK Configuration --------------------------*/ - if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) - 8003778: 687b ldr r3, [r7, #4] - 800377a: 681b ldr r3, [r3, #0] - 800377c: f003 0302 and.w r3, r3, #2 - 8003780: 2b00 cmp r3, #0 - 8003782: d020 beq.n 80037c6 - { - /* Set the highest APBx dividers in order to ensure that we do not go through - a non-spec phase whatever we decrease or increase HCLK. */ - if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) - 8003784: 687b ldr r3, [r7, #4] - 8003786: 681b ldr r3, [r3, #0] - 8003788: f003 0304 and.w r3, r3, #4 - 800378c: 2b00 cmp r3, #0 - 800378e: d005 beq.n 800379c - { - MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16); - 8003790: 4b59 ldr r3, [pc, #356] ; (80038f8 ) - 8003792: 689b ldr r3, [r3, #8] - 8003794: 4a58 ldr r2, [pc, #352] ; (80038f8 ) - 8003796: f443 53e0 orr.w r3, r3, #7168 ; 0x1c00 - 800379a: 6093 str r3, [r2, #8] - } - - if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) - 800379c: 687b ldr r3, [r7, #4] - 800379e: 681b ldr r3, [r3, #0] - 80037a0: f003 0308 and.w r3, r3, #8 - 80037a4: 2b00 cmp r3, #0 - 80037a6: d005 beq.n 80037b4 - { - MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3)); - 80037a8: 4b53 ldr r3, [pc, #332] ; (80038f8 ) - 80037aa: 689b ldr r3, [r3, #8] - 80037ac: 4a52 ldr r2, [pc, #328] ; (80038f8 ) - 80037ae: f443 4360 orr.w r3, r3, #57344 ; 0xe000 - 80037b2: 6093 str r3, [r2, #8] - } - - assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider)); - MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider); - 80037b4: 4b50 ldr r3, [pc, #320] ; (80038f8 ) - 80037b6: 689b ldr r3, [r3, #8] - 80037b8: f023 02f0 bic.w r2, r3, #240 ; 0xf0 - 80037bc: 687b ldr r3, [r7, #4] - 80037be: 689b ldr r3, [r3, #8] - 80037c0: 494d ldr r1, [pc, #308] ; (80038f8 ) - 80037c2: 4313 orrs r3, r2 - 80037c4: 608b str r3, [r1, #8] - } - - /*------------------------- SYSCLK Configuration ---------------------------*/ - if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) - 80037c6: 687b ldr r3, [r7, #4] - 80037c8: 681b ldr r3, [r3, #0] - 80037ca: f003 0301 and.w r3, r3, #1 - 80037ce: 2b00 cmp r3, #0 - 80037d0: d044 beq.n 800385c - { - assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource)); - - /* HSE is selected as System Clock Source */ - if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) - 80037d2: 687b ldr r3, [r7, #4] - 80037d4: 685b ldr r3, [r3, #4] - 80037d6: 2b01 cmp r3, #1 - 80037d8: d107 bne.n 80037ea - { - /* Check the HSE ready flag */ - if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) - 80037da: 4b47 ldr r3, [pc, #284] ; (80038f8 ) - 80037dc: 681b ldr r3, [r3, #0] - 80037de: f403 3300 and.w r3, r3, #131072 ; 0x20000 - 80037e2: 2b00 cmp r3, #0 - 80037e4: d119 bne.n 800381a - { - return HAL_ERROR; - 80037e6: 2301 movs r3, #1 - 80037e8: e07f b.n 80038ea - } - } - /* PLL is selected as System Clock Source */ - else if((RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) || - 80037ea: 687b ldr r3, [r7, #4] - 80037ec: 685b ldr r3, [r3, #4] - 80037ee: 2b02 cmp r3, #2 - 80037f0: d003 beq.n 80037fa - (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLRCLK)) - 80037f2: 687b ldr r3, [r7, #4] - 80037f4: 685b ldr r3, [r3, #4] - else if((RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) || - 80037f6: 2b03 cmp r3, #3 - 80037f8: d107 bne.n 800380a - { - /* Check the PLL ready flag */ - if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) - 80037fa: 4b3f ldr r3, [pc, #252] ; (80038f8 ) - 80037fc: 681b ldr r3, [r3, #0] - 80037fe: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 - 8003802: 2b00 cmp r3, #0 - 8003804: d109 bne.n 800381a - { - return HAL_ERROR; - 8003806: 2301 movs r3, #1 - 8003808: e06f b.n 80038ea - } - /* HSI is selected as System Clock Source */ - else - { - /* Check the HSI ready flag */ - if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) - 800380a: 4b3b ldr r3, [pc, #236] ; (80038f8 ) - 800380c: 681b ldr r3, [r3, #0] - 800380e: f003 0302 and.w r3, r3, #2 - 8003812: 2b00 cmp r3, #0 - 8003814: d101 bne.n 800381a - { - return HAL_ERROR; - 8003816: 2301 movs r3, #1 - 8003818: e067 b.n 80038ea - } - } - - __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource); - 800381a: 4b37 ldr r3, [pc, #220] ; (80038f8 ) - 800381c: 689b ldr r3, [r3, #8] - 800381e: f023 0203 bic.w r2, r3, #3 - 8003822: 687b ldr r3, [r7, #4] - 8003824: 685b ldr r3, [r3, #4] - 8003826: 4934 ldr r1, [pc, #208] ; (80038f8 ) - 8003828: 4313 orrs r3, r2 - 800382a: 608b str r3, [r1, #8] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 800382c: f7fe f910 bl 8001a50 - 8003830: 60f8 str r0, [r7, #12] - - while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) - 8003832: e00a b.n 800384a - { - if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) - 8003834: f7fe f90c bl 8001a50 - 8003838: 4602 mov r2, r0 - 800383a: 68fb ldr r3, [r7, #12] - 800383c: 1ad3 subs r3, r2, r3 - 800383e: f241 3288 movw r2, #5000 ; 0x1388 - 8003842: 4293 cmp r3, r2 - 8003844: d901 bls.n 800384a - { - return HAL_TIMEOUT; - 8003846: 2303 movs r3, #3 - 8003848: e04f b.n 80038ea - while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) - 800384a: 4b2b ldr r3, [pc, #172] ; (80038f8 ) - 800384c: 689b ldr r3, [r3, #8] - 800384e: f003 020c and.w r2, r3, #12 - 8003852: 687b ldr r3, [r7, #4] - 8003854: 685b ldr r3, [r3, #4] - 8003856: 009b lsls r3, r3, #2 - 8003858: 429a cmp r2, r3 - 800385a: d1eb bne.n 8003834 - } - } - } - - /* Decreasing the number of wait states because of lower CPU frequency */ - if(FLatency < __HAL_FLASH_GET_LATENCY()) - 800385c: 4b25 ldr r3, [pc, #148] ; (80038f4 ) - 800385e: 681b ldr r3, [r3, #0] - 8003860: f003 030f and.w r3, r3, #15 - 8003864: 683a ldr r2, [r7, #0] - 8003866: 429a cmp r2, r3 - 8003868: d20c bcs.n 8003884 - { - /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ - __HAL_FLASH_SET_LATENCY(FLatency); - 800386a: 4b22 ldr r3, [pc, #136] ; (80038f4 ) - 800386c: 683a ldr r2, [r7, #0] - 800386e: b2d2 uxtb r2, r2 - 8003870: 701a strb r2, [r3, #0] - - /* Check that the new number of wait states is taken into account to access the Flash - memory by reading the FLASH_ACR register */ - if(__HAL_FLASH_GET_LATENCY() != FLatency) - 8003872: 4b20 ldr r3, [pc, #128] ; (80038f4 ) - 8003874: 681b ldr r3, [r3, #0] - 8003876: f003 030f and.w r3, r3, #15 - 800387a: 683a ldr r2, [r7, #0] - 800387c: 429a cmp r2, r3 - 800387e: d001 beq.n 8003884 - { - return HAL_ERROR; - 8003880: 2301 movs r3, #1 - 8003882: e032 b.n 80038ea - } - } - - /*-------------------------- PCLK1 Configuration ---------------------------*/ - if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) - 8003884: 687b ldr r3, [r7, #4] - 8003886: 681b ldr r3, [r3, #0] - 8003888: f003 0304 and.w r3, r3, #4 - 800388c: 2b00 cmp r3, #0 - 800388e: d008 beq.n 80038a2 - { - assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider)); - MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider); - 8003890: 4b19 ldr r3, [pc, #100] ; (80038f8 ) - 8003892: 689b ldr r3, [r3, #8] - 8003894: f423 52e0 bic.w r2, r3, #7168 ; 0x1c00 - 8003898: 687b ldr r3, [r7, #4] - 800389a: 68db ldr r3, [r3, #12] - 800389c: 4916 ldr r1, [pc, #88] ; (80038f8 ) - 800389e: 4313 orrs r3, r2 - 80038a0: 608b str r3, [r1, #8] - } - - /*-------------------------- PCLK2 Configuration ---------------------------*/ - if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) - 80038a2: 687b ldr r3, [r7, #4] - 80038a4: 681b ldr r3, [r3, #0] - 80038a6: f003 0308 and.w r3, r3, #8 - 80038aa: 2b00 cmp r3, #0 - 80038ac: d009 beq.n 80038c2 - { - assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider)); - MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3U)); - 80038ae: 4b12 ldr r3, [pc, #72] ; (80038f8 ) - 80038b0: 689b ldr r3, [r3, #8] - 80038b2: f423 4260 bic.w r2, r3, #57344 ; 0xe000 - 80038b6: 687b ldr r3, [r7, #4] - 80038b8: 691b ldr r3, [r3, #16] - 80038ba: 00db lsls r3, r3, #3 - 80038bc: 490e ldr r1, [pc, #56] ; (80038f8 ) - 80038be: 4313 orrs r3, r2 - 80038c0: 608b str r3, [r1, #8] - } - - /* Update the SystemCoreClock global variable */ - SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_Pos]; - 80038c2: f000 f821 bl 8003908 - 80038c6: 4602 mov r2, r0 - 80038c8: 4b0b ldr r3, [pc, #44] ; (80038f8 ) - 80038ca: 689b ldr r3, [r3, #8] - 80038cc: 091b lsrs r3, r3, #4 - 80038ce: f003 030f and.w r3, r3, #15 - 80038d2: 490a ldr r1, [pc, #40] ; (80038fc ) - 80038d4: 5ccb ldrb r3, [r1, r3] - 80038d6: fa22 f303 lsr.w r3, r2, r3 - 80038da: 4a09 ldr r2, [pc, #36] ; (8003900 ) - 80038dc: 6013 str r3, [r2, #0] - - /* Configure the source of time base considering new system clocks settings */ - HAL_InitTick (uwTickPrio); - 80038de: 4b09 ldr r3, [pc, #36] ; (8003904 ) - 80038e0: 681b ldr r3, [r3, #0] - 80038e2: 4618 mov r0, r3 - 80038e4: f7fe f870 bl 80019c8 - - return HAL_OK; - 80038e8: 2300 movs r3, #0 -} - 80038ea: 4618 mov r0, r3 - 80038ec: 3710 adds r7, #16 - 80038ee: 46bd mov sp, r7 - 80038f0: bd80 pop {r7, pc} - 80038f2: bf00 nop - 80038f4: 40023c00 .word 0x40023c00 - 80038f8: 40023800 .word 0x40023800 - 80038fc: 080189d0 .word 0x080189d0 - 8003900: 20000000 .word 0x20000000 - 8003904: 20000004 .word 0x20000004 - -08003908 : - * - * - * @retval SYSCLK frequency - */ -__weak uint32_t HAL_RCC_GetSysClockFreq(void) -{ - 8003908: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr} - 800390c: b090 sub sp, #64 ; 0x40 - 800390e: af00 add r7, sp, #0 - uint32_t pllm = 0U, pllvco = 0U, pllp = 0U; - 8003910: 2300 movs r3, #0 - 8003912: 637b str r3, [r7, #52] ; 0x34 - 8003914: 2300 movs r3, #0 - 8003916: 63fb str r3, [r7, #60] ; 0x3c - 8003918: 2300 movs r3, #0 - 800391a: 633b str r3, [r7, #48] ; 0x30 - uint32_t sysclockfreq = 0U; - 800391c: 2300 movs r3, #0 - 800391e: 63bb str r3, [r7, #56] ; 0x38 - - /* Get SYSCLK source -------------------------------------------------------*/ - switch (RCC->CFGR & RCC_CFGR_SWS) - 8003920: 4b59 ldr r3, [pc, #356] ; (8003a88 ) - 8003922: 689b ldr r3, [r3, #8] - 8003924: f003 030c and.w r3, r3, #12 - 8003928: 2b08 cmp r3, #8 - 800392a: d00d beq.n 8003948 - 800392c: 2b08 cmp r3, #8 - 800392e: f200 80a1 bhi.w 8003a74 - 8003932: 2b00 cmp r3, #0 - 8003934: d002 beq.n 800393c - 8003936: 2b04 cmp r3, #4 - 8003938: d003 beq.n 8003942 - 800393a: e09b b.n 8003a74 - { - case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */ - { - sysclockfreq = HSI_VALUE; - 800393c: 4b53 ldr r3, [pc, #332] ; (8003a8c ) - 800393e: 63bb str r3, [r7, #56] ; 0x38 - break; - 8003940: e09b b.n 8003a7a - } - case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */ - { - sysclockfreq = HSE_VALUE; - 8003942: 4b53 ldr r3, [pc, #332] ; (8003a90 ) - 8003944: 63bb str r3, [r7, #56] ; 0x38 - break; - 8003946: e098 b.n 8003a7a - } - case RCC_CFGR_SWS_PLL: /* PLL used as system clock source */ - { - /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN - SYSCLK = PLL_VCO / PLLP */ - pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; - 8003948: 4b4f ldr r3, [pc, #316] ; (8003a88 ) - 800394a: 685b ldr r3, [r3, #4] - 800394c: f003 033f and.w r3, r3, #63 ; 0x3f - 8003950: 637b str r3, [r7, #52] ; 0x34 - if(__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLSOURCE_HSI) - 8003952: 4b4d ldr r3, [pc, #308] ; (8003a88 ) - 8003954: 685b ldr r3, [r3, #4] - 8003956: f403 0380 and.w r3, r3, #4194304 ; 0x400000 - 800395a: 2b00 cmp r3, #0 - 800395c: d028 beq.n 80039b0 - { - /* HSE used as PLL clock source */ - pllvco = (uint32_t) ((((uint64_t) HSE_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); - 800395e: 4b4a ldr r3, [pc, #296] ; (8003a88 ) - 8003960: 685b ldr r3, [r3, #4] - 8003962: 099b lsrs r3, r3, #6 - 8003964: 2200 movs r2, #0 - 8003966: 623b str r3, [r7, #32] - 8003968: 627a str r2, [r7, #36] ; 0x24 - 800396a: 6a3b ldr r3, [r7, #32] - 800396c: f3c3 0008 ubfx r0, r3, #0, #9 - 8003970: 2100 movs r1, #0 - 8003972: 4b47 ldr r3, [pc, #284] ; (8003a90 ) - 8003974: fb03 f201 mul.w r2, r3, r1 - 8003978: 2300 movs r3, #0 - 800397a: fb00 f303 mul.w r3, r0, r3 - 800397e: 4413 add r3, r2 - 8003980: 4a43 ldr r2, [pc, #268] ; (8003a90 ) - 8003982: fba0 1202 umull r1, r2, r0, r2 - 8003986: 62fa str r2, [r7, #44] ; 0x2c - 8003988: 460a mov r2, r1 - 800398a: 62ba str r2, [r7, #40] ; 0x28 - 800398c: 6afa ldr r2, [r7, #44] ; 0x2c - 800398e: 4413 add r3, r2 - 8003990: 62fb str r3, [r7, #44] ; 0x2c - 8003992: 6b7b ldr r3, [r7, #52] ; 0x34 - 8003994: 2200 movs r2, #0 - 8003996: 61bb str r3, [r7, #24] - 8003998: 61fa str r2, [r7, #28] - 800399a: e9d7 2306 ldrd r2, r3, [r7, #24] - 800399e: e9d7 010a ldrd r0, r1, [r7, #40] ; 0x28 - 80039a2: f7fd f911 bl 8000bc8 <__aeabi_uldivmod> - 80039a6: 4602 mov r2, r0 - 80039a8: 460b mov r3, r1 - 80039aa: 4613 mov r3, r2 - 80039ac: 63fb str r3, [r7, #60] ; 0x3c - 80039ae: e053 b.n 8003a58 - } - else - { - /* HSI used as PLL clock source */ - pllvco = (uint32_t) ((((uint64_t) HSI_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); - 80039b0: 4b35 ldr r3, [pc, #212] ; (8003a88 ) - 80039b2: 685b ldr r3, [r3, #4] - 80039b4: 099b lsrs r3, r3, #6 - 80039b6: 2200 movs r2, #0 - 80039b8: 613b str r3, [r7, #16] - 80039ba: 617a str r2, [r7, #20] - 80039bc: 693b ldr r3, [r7, #16] - 80039be: f3c3 0a08 ubfx sl, r3, #0, #9 - 80039c2: f04f 0b00 mov.w fp, #0 - 80039c6: 4652 mov r2, sl - 80039c8: 465b mov r3, fp - 80039ca: f04f 0000 mov.w r0, #0 - 80039ce: f04f 0100 mov.w r1, #0 - 80039d2: 0159 lsls r1, r3, #5 - 80039d4: ea41 61d2 orr.w r1, r1, r2, lsr #27 - 80039d8: 0150 lsls r0, r2, #5 - 80039da: 4602 mov r2, r0 - 80039dc: 460b mov r3, r1 - 80039de: ebb2 080a subs.w r8, r2, sl - 80039e2: eb63 090b sbc.w r9, r3, fp - 80039e6: f04f 0200 mov.w r2, #0 - 80039ea: f04f 0300 mov.w r3, #0 - 80039ee: ea4f 1389 mov.w r3, r9, lsl #6 - 80039f2: ea43 6398 orr.w r3, r3, r8, lsr #26 - 80039f6: ea4f 1288 mov.w r2, r8, lsl #6 - 80039fa: ebb2 0408 subs.w r4, r2, r8 - 80039fe: eb63 0509 sbc.w r5, r3, r9 - 8003a02: f04f 0200 mov.w r2, #0 - 8003a06: f04f 0300 mov.w r3, #0 - 8003a0a: 00eb lsls r3, r5, #3 - 8003a0c: ea43 7354 orr.w r3, r3, r4, lsr #29 - 8003a10: 00e2 lsls r2, r4, #3 - 8003a12: 4614 mov r4, r2 - 8003a14: 461d mov r5, r3 - 8003a16: eb14 030a adds.w r3, r4, sl - 8003a1a: 603b str r3, [r7, #0] - 8003a1c: eb45 030b adc.w r3, r5, fp - 8003a20: 607b str r3, [r7, #4] - 8003a22: f04f 0200 mov.w r2, #0 - 8003a26: f04f 0300 mov.w r3, #0 - 8003a2a: e9d7 4500 ldrd r4, r5, [r7] - 8003a2e: 4629 mov r1, r5 - 8003a30: 028b lsls r3, r1, #10 - 8003a32: 4621 mov r1, r4 - 8003a34: ea43 5391 orr.w r3, r3, r1, lsr #22 - 8003a38: 4621 mov r1, r4 - 8003a3a: 028a lsls r2, r1, #10 - 8003a3c: 4610 mov r0, r2 - 8003a3e: 4619 mov r1, r3 - 8003a40: 6b7b ldr r3, [r7, #52] ; 0x34 - 8003a42: 2200 movs r2, #0 - 8003a44: 60bb str r3, [r7, #8] - 8003a46: 60fa str r2, [r7, #12] - 8003a48: e9d7 2302 ldrd r2, r3, [r7, #8] - 8003a4c: f7fd f8bc bl 8000bc8 <__aeabi_uldivmod> - 8003a50: 4602 mov r2, r0 - 8003a52: 460b mov r3, r1 - 8003a54: 4613 mov r3, r2 - 8003a56: 63fb str r3, [r7, #60] ; 0x3c - } - pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1U) *2U); - 8003a58: 4b0b ldr r3, [pc, #44] ; (8003a88 ) - 8003a5a: 685b ldr r3, [r3, #4] - 8003a5c: 0c1b lsrs r3, r3, #16 - 8003a5e: f003 0303 and.w r3, r3, #3 - 8003a62: 3301 adds r3, #1 - 8003a64: 005b lsls r3, r3, #1 - 8003a66: 633b str r3, [r7, #48] ; 0x30 - - sysclockfreq = pllvco/pllp; - 8003a68: 6bfa ldr r2, [r7, #60] ; 0x3c - 8003a6a: 6b3b ldr r3, [r7, #48] ; 0x30 - 8003a6c: fbb2 f3f3 udiv r3, r2, r3 - 8003a70: 63bb str r3, [r7, #56] ; 0x38 - break; - 8003a72: e002 b.n 8003a7a - } - default: - { - sysclockfreq = HSI_VALUE; - 8003a74: 4b05 ldr r3, [pc, #20] ; (8003a8c ) - 8003a76: 63bb str r3, [r7, #56] ; 0x38 - break; - 8003a78: bf00 nop - } - } - return sysclockfreq; - 8003a7a: 6bbb ldr r3, [r7, #56] ; 0x38 -} - 8003a7c: 4618 mov r0, r3 - 8003a7e: 3740 adds r7, #64 ; 0x40 - 8003a80: 46bd mov sp, r7 - 8003a82: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc} - 8003a86: bf00 nop - 8003a88: 40023800 .word 0x40023800 - 8003a8c: 00f42400 .word 0x00f42400 - 8003a90: 017d7840 .word 0x017d7840 - -08003a94 : - * @note The SystemCoreClock CMSIS variable is used to store System Clock Frequency - * and updated within this function - * @retval HCLK frequency - */ -uint32_t HAL_RCC_GetHCLKFreq(void) -{ - 8003a94: b480 push {r7} - 8003a96: af00 add r7, sp, #0 - return SystemCoreClock; - 8003a98: 4b03 ldr r3, [pc, #12] ; (8003aa8 ) - 8003a9a: 681b ldr r3, [r3, #0] -} - 8003a9c: 4618 mov r0, r3 - 8003a9e: 46bd mov sp, r7 - 8003aa0: f85d 7b04 ldr.w r7, [sp], #4 - 8003aa4: 4770 bx lr - 8003aa6: bf00 nop - 8003aa8: 20000000 .word 0x20000000 - -08003aac : - * @param ExtTiming Pointer to SRAM extended mode timing structure - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SRAM_Init(SRAM_HandleTypeDef *hsram, FMC_NORSRAM_TimingTypeDef *Timing, - FMC_NORSRAM_TimingTypeDef *ExtTiming) -{ - 8003aac: b580 push {r7, lr} - 8003aae: b084 sub sp, #16 - 8003ab0: af00 add r7, sp, #0 - 8003ab2: 60f8 str r0, [r7, #12] - 8003ab4: 60b9 str r1, [r7, #8] - 8003ab6: 607a str r2, [r7, #4] - /* Check the SRAM handle parameter */ - if (hsram == NULL) - 8003ab8: 68fb ldr r3, [r7, #12] - 8003aba: 2b00 cmp r3, #0 - 8003abc: d101 bne.n 8003ac2 - { - return HAL_ERROR; - 8003abe: 2301 movs r3, #1 - 8003ac0: e038 b.n 8003b34 - } - - if (hsram->State == HAL_SRAM_STATE_RESET) - 8003ac2: 68fb ldr r3, [r7, #12] - 8003ac4: f893 3049 ldrb.w r3, [r3, #73] ; 0x49 - 8003ac8: b2db uxtb r3, r3 - 8003aca: 2b00 cmp r3, #0 - 8003acc: d106 bne.n 8003adc - { - /* Allocate lock resource and initialize it */ - hsram->Lock = HAL_UNLOCKED; - 8003ace: 68fb ldr r3, [r7, #12] - 8003ad0: 2200 movs r2, #0 - 8003ad2: f883 2048 strb.w r2, [r3, #72] ; 0x48 - - /* Init the low level hardware */ - hsram->MspInitCallback(hsram); -#else - /* Initialize the low level hardware (MSP) */ - HAL_SRAM_MspInit(hsram); - 8003ad6: 68f8 ldr r0, [r7, #12] - 8003ad8: f7fd fd74 bl 80015c4 -#endif /* USE_HAL_SRAM_REGISTER_CALLBACKS */ - } - - /* Initialize SRAM control Interface */ - (void)FMC_NORSRAM_Init(hsram->Instance, &(hsram->Init)); - 8003adc: 68fb ldr r3, [r7, #12] - 8003ade: 681a ldr r2, [r3, #0] - 8003ae0: 68fb ldr r3, [r7, #12] - 8003ae2: 3308 adds r3, #8 - 8003ae4: 4619 mov r1, r3 - 8003ae6: 4610 mov r0, r2 - 8003ae8: f000 fcb4 bl 8004454 - - /* Initialize SRAM timing Interface */ - (void)FMC_NORSRAM_Timing_Init(hsram->Instance, Timing, hsram->Init.NSBank); - 8003aec: 68fb ldr r3, [r7, #12] - 8003aee: 6818 ldr r0, [r3, #0] - 8003af0: 68fb ldr r3, [r7, #12] - 8003af2: 689b ldr r3, [r3, #8] - 8003af4: 461a mov r2, r3 - 8003af6: 68b9 ldr r1, [r7, #8] - 8003af8: f000 fd32 bl 8004560 - - /* Initialize SRAM extended mode timing Interface */ - (void)FMC_NORSRAM_Extended_Timing_Init(hsram->Extended, ExtTiming, hsram->Init.NSBank, - 8003afc: 68fb ldr r3, [r7, #12] - 8003afe: 6858 ldr r0, [r3, #4] - 8003b00: 68fb ldr r3, [r7, #12] - 8003b02: 689a ldr r2, [r3, #8] - 8003b04: 68fb ldr r3, [r7, #12] - 8003b06: 6b1b ldr r3, [r3, #48] ; 0x30 - 8003b08: 6879 ldr r1, [r7, #4] - 8003b0a: f000 fd79 bl 8004600 - hsram->Init.ExtendedMode); - - /* Enable the NORSRAM device */ - __FMC_NORSRAM_ENABLE(hsram->Instance, hsram->Init.NSBank); - 8003b0e: 68fb ldr r3, [r7, #12] - 8003b10: 681b ldr r3, [r3, #0] - 8003b12: 68fa ldr r2, [r7, #12] - 8003b14: 6892 ldr r2, [r2, #8] - 8003b16: f853 1022 ldr.w r1, [r3, r2, lsl #2] - 8003b1a: 68fb ldr r3, [r7, #12] - 8003b1c: 681b ldr r3, [r3, #0] - 8003b1e: 68fa ldr r2, [r7, #12] - 8003b20: 6892 ldr r2, [r2, #8] - 8003b22: f041 0101 orr.w r1, r1, #1 - 8003b26: f843 1022 str.w r1, [r3, r2, lsl #2] - - /* Initialize the SRAM controller state */ - hsram->State = HAL_SRAM_STATE_READY; - 8003b2a: 68fb ldr r3, [r7, #12] - 8003b2c: 2201 movs r2, #1 - 8003b2e: f883 2049 strb.w r2, [r3, #73] ; 0x49 - - return HAL_OK; - 8003b32: 2300 movs r3, #0 -} - 8003b34: 4618 mov r0, r3 - 8003b36: 3710 adds r7, #16 - 8003b38: 46bd mov sp, r7 - 8003b3a: bd80 pop {r7, pc} - -08003b3c : - * Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init() - * @param htim TIM Base handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim) -{ - 8003b3c: b580 push {r7, lr} - 8003b3e: b082 sub sp, #8 - 8003b40: af00 add r7, sp, #0 - 8003b42: 6078 str r0, [r7, #4] - /* Check the TIM handle allocation */ - if (htim == NULL) - 8003b44: 687b ldr r3, [r7, #4] - 8003b46: 2b00 cmp r3, #0 - 8003b48: d101 bne.n 8003b4e - { - return HAL_ERROR; - 8003b4a: 2301 movs r3, #1 - 8003b4c: e041 b.n 8003bd2 - assert_param(IS_TIM_INSTANCE(htim->Instance)); - assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); - assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); - assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); - - if (htim->State == HAL_TIM_STATE_RESET) - 8003b4e: 687b ldr r3, [r7, #4] - 8003b50: f893 303d ldrb.w r3, [r3, #61] ; 0x3d - 8003b54: b2db uxtb r3, r3 - 8003b56: 2b00 cmp r3, #0 - 8003b58: d106 bne.n 8003b68 - { - /* Allocate lock resource and initialize it */ - htim->Lock = HAL_UNLOCKED; - 8003b5a: 687b ldr r3, [r7, #4] - 8003b5c: 2200 movs r2, #0 - 8003b5e: f883 203c strb.w r2, [r3, #60] ; 0x3c - } - /* Init the low level hardware : GPIO, CLOCK, NVIC */ - htim->Base_MspInitCallback(htim); -#else - /* Init the low level hardware : GPIO, CLOCK, NVIC */ - HAL_TIM_Base_MspInit(htim); - 8003b62: 6878 ldr r0, [r7, #4] - 8003b64: f7fd fc96 bl 8001494 -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - - /* Set the TIM state */ - htim->State = HAL_TIM_STATE_BUSY; - 8003b68: 687b ldr r3, [r7, #4] - 8003b6a: 2202 movs r2, #2 - 8003b6c: f883 203d strb.w r2, [r3, #61] ; 0x3d - - /* Set the Time Base configuration */ - TIM_Base_SetConfig(htim->Instance, &htim->Init); - 8003b70: 687b ldr r3, [r7, #4] - 8003b72: 681a ldr r2, [r3, #0] - 8003b74: 687b ldr r3, [r7, #4] - 8003b76: 3304 adds r3, #4 - 8003b78: 4619 mov r1, r3 - 8003b7a: 4610 mov r0, r2 - 8003b7c: f000 faa0 bl 80040c0 - - /* Initialize the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_READY; - 8003b80: 687b ldr r3, [r7, #4] - 8003b82: 2201 movs r2, #1 - 8003b84: f883 2046 strb.w r2, [r3, #70] ; 0x46 - - /* Initialize the TIM channels state */ - TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); - 8003b88: 687b ldr r3, [r7, #4] - 8003b8a: 2201 movs r2, #1 - 8003b8c: f883 203e strb.w r2, [r3, #62] ; 0x3e - 8003b90: 687b ldr r3, [r7, #4] - 8003b92: 2201 movs r2, #1 - 8003b94: f883 203f strb.w r2, [r3, #63] ; 0x3f - 8003b98: 687b ldr r3, [r7, #4] - 8003b9a: 2201 movs r2, #1 - 8003b9c: f883 2040 strb.w r2, [r3, #64] ; 0x40 - 8003ba0: 687b ldr r3, [r7, #4] - 8003ba2: 2201 movs r2, #1 - 8003ba4: f883 2041 strb.w r2, [r3, #65] ; 0x41 - TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); - 8003ba8: 687b ldr r3, [r7, #4] - 8003baa: 2201 movs r2, #1 - 8003bac: f883 2042 strb.w r2, [r3, #66] ; 0x42 - 8003bb0: 687b ldr r3, [r7, #4] - 8003bb2: 2201 movs r2, #1 - 8003bb4: f883 2043 strb.w r2, [r3, #67] ; 0x43 - 8003bb8: 687b ldr r3, [r7, #4] - 8003bba: 2201 movs r2, #1 - 8003bbc: f883 2044 strb.w r2, [r3, #68] ; 0x44 - 8003bc0: 687b ldr r3, [r7, #4] - 8003bc2: 2201 movs r2, #1 - 8003bc4: f883 2045 strb.w r2, [r3, #69] ; 0x45 - - /* Initialize the TIM state*/ - htim->State = HAL_TIM_STATE_READY; - 8003bc8: 687b ldr r3, [r7, #4] - 8003bca: 2201 movs r2, #1 - 8003bcc: f883 203d strb.w r2, [r3, #61] ; 0x3d - - return HAL_OK; - 8003bd0: 2300 movs r3, #0 -} - 8003bd2: 4618 mov r0, r3 - 8003bd4: 3708 adds r7, #8 - 8003bd6: 46bd mov sp, r7 - 8003bd8: bd80 pop {r7, pc} - ... - -08003bdc : - * @brief Starts the TIM Base generation in interrupt mode. - * @param htim TIM Base handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim) -{ - 8003bdc: b480 push {r7} - 8003bde: b085 sub sp, #20 - 8003be0: af00 add r7, sp, #0 - 8003be2: 6078 str r0, [r7, #4] - - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - - /* Check the TIM state */ - if (htim->State != HAL_TIM_STATE_READY) - 8003be4: 687b ldr r3, [r7, #4] - 8003be6: f893 303d ldrb.w r3, [r3, #61] ; 0x3d - 8003bea: b2db uxtb r3, r3 - 8003bec: 2b01 cmp r3, #1 - 8003bee: d001 beq.n 8003bf4 - { - return HAL_ERROR; - 8003bf0: 2301 movs r3, #1 - 8003bf2: e04e b.n 8003c92 - } - - /* Set the TIM state */ - htim->State = HAL_TIM_STATE_BUSY; - 8003bf4: 687b ldr r3, [r7, #4] - 8003bf6: 2202 movs r2, #2 - 8003bf8: f883 203d strb.w r2, [r3, #61] ; 0x3d - - /* Enable the TIM Update interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE); - 8003bfc: 687b ldr r3, [r7, #4] - 8003bfe: 681b ldr r3, [r3, #0] - 8003c00: 68da ldr r2, [r3, #12] - 8003c02: 687b ldr r3, [r7, #4] - 8003c04: 681b ldr r3, [r3, #0] - 8003c06: f042 0201 orr.w r2, r2, #1 - 8003c0a: 60da str r2, [r3, #12] - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - 8003c0c: 687b ldr r3, [r7, #4] - 8003c0e: 681b ldr r3, [r3, #0] - 8003c10: 4a23 ldr r2, [pc, #140] ; (8003ca0 ) - 8003c12: 4293 cmp r3, r2 - 8003c14: d022 beq.n 8003c5c - 8003c16: 687b ldr r3, [r7, #4] - 8003c18: 681b ldr r3, [r3, #0] - 8003c1a: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000 - 8003c1e: d01d beq.n 8003c5c - 8003c20: 687b ldr r3, [r7, #4] - 8003c22: 681b ldr r3, [r3, #0] - 8003c24: 4a1f ldr r2, [pc, #124] ; (8003ca4 ) - 8003c26: 4293 cmp r3, r2 - 8003c28: d018 beq.n 8003c5c - 8003c2a: 687b ldr r3, [r7, #4] - 8003c2c: 681b ldr r3, [r3, #0] - 8003c2e: 4a1e ldr r2, [pc, #120] ; (8003ca8 ) - 8003c30: 4293 cmp r3, r2 - 8003c32: d013 beq.n 8003c5c - 8003c34: 687b ldr r3, [r7, #4] - 8003c36: 681b ldr r3, [r3, #0] - 8003c38: 4a1c ldr r2, [pc, #112] ; (8003cac ) - 8003c3a: 4293 cmp r3, r2 - 8003c3c: d00e beq.n 8003c5c - 8003c3e: 687b ldr r3, [r7, #4] - 8003c40: 681b ldr r3, [r3, #0] - 8003c42: 4a1b ldr r2, [pc, #108] ; (8003cb0 ) - 8003c44: 4293 cmp r3, r2 - 8003c46: d009 beq.n 8003c5c - 8003c48: 687b ldr r3, [r7, #4] - 8003c4a: 681b ldr r3, [r3, #0] - 8003c4c: 4a19 ldr r2, [pc, #100] ; (8003cb4 ) - 8003c4e: 4293 cmp r3, r2 - 8003c50: d004 beq.n 8003c5c - 8003c52: 687b ldr r3, [r7, #4] - 8003c54: 681b ldr r3, [r3, #0] - 8003c56: 4a18 ldr r2, [pc, #96] ; (8003cb8 ) - 8003c58: 4293 cmp r3, r2 - 8003c5a: d111 bne.n 8003c80 - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - 8003c5c: 687b ldr r3, [r7, #4] - 8003c5e: 681b ldr r3, [r3, #0] - 8003c60: 689b ldr r3, [r3, #8] - 8003c62: f003 0307 and.w r3, r3, #7 - 8003c66: 60fb str r3, [r7, #12] - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - 8003c68: 68fb ldr r3, [r7, #12] - 8003c6a: 2b06 cmp r3, #6 - 8003c6c: d010 beq.n 8003c90 - { - __HAL_TIM_ENABLE(htim); - 8003c6e: 687b ldr r3, [r7, #4] - 8003c70: 681b ldr r3, [r3, #0] - 8003c72: 681a ldr r2, [r3, #0] - 8003c74: 687b ldr r3, [r7, #4] - 8003c76: 681b ldr r3, [r3, #0] - 8003c78: f042 0201 orr.w r2, r2, #1 - 8003c7c: 601a str r2, [r3, #0] - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - 8003c7e: e007 b.n 8003c90 - } - } - else - { - __HAL_TIM_ENABLE(htim); - 8003c80: 687b ldr r3, [r7, #4] - 8003c82: 681b ldr r3, [r3, #0] - 8003c84: 681a ldr r2, [r3, #0] - 8003c86: 687b ldr r3, [r7, #4] - 8003c88: 681b ldr r3, [r3, #0] - 8003c8a: f042 0201 orr.w r2, r2, #1 - 8003c8e: 601a str r2, [r3, #0] - } - - /* Return function status */ - return HAL_OK; - 8003c90: 2300 movs r3, #0 -} - 8003c92: 4618 mov r0, r3 - 8003c94: 3714 adds r7, #20 - 8003c96: 46bd mov sp, r7 - 8003c98: f85d 7b04 ldr.w r7, [sp], #4 - 8003c9c: 4770 bx lr - 8003c9e: bf00 nop - 8003ca0: 40010000 .word 0x40010000 - 8003ca4: 40000400 .word 0x40000400 - 8003ca8: 40000800 .word 0x40000800 - 8003cac: 40000c00 .word 0x40000c00 - 8003cb0: 40010400 .word 0x40010400 - 8003cb4: 40014000 .word 0x40014000 - 8003cb8: 40001800 .word 0x40001800 - -08003cbc : - * @brief This function handles TIM interrupts requests. - * @param htim TIM handle - * @retval None - */ -void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) -{ - 8003cbc: b580 push {r7, lr} - 8003cbe: b082 sub sp, #8 - 8003cc0: af00 add r7, sp, #0 - 8003cc2: 6078 str r0, [r7, #4] - /* Capture compare 1 event */ - if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC1) != RESET) - 8003cc4: 687b ldr r3, [r7, #4] - 8003cc6: 681b ldr r3, [r3, #0] - 8003cc8: 691b ldr r3, [r3, #16] - 8003cca: f003 0302 and.w r3, r3, #2 - 8003cce: 2b02 cmp r3, #2 - 8003cd0: d122 bne.n 8003d18 - { - if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC1) != RESET) - 8003cd2: 687b ldr r3, [r7, #4] - 8003cd4: 681b ldr r3, [r3, #0] - 8003cd6: 68db ldr r3, [r3, #12] - 8003cd8: f003 0302 and.w r3, r3, #2 - 8003cdc: 2b02 cmp r3, #2 - 8003cde: d11b bne.n 8003d18 - { - { - __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC1); - 8003ce0: 687b ldr r3, [r7, #4] - 8003ce2: 681b ldr r3, [r3, #0] - 8003ce4: f06f 0202 mvn.w r2, #2 - 8003ce8: 611a str r2, [r3, #16] - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; - 8003cea: 687b ldr r3, [r7, #4] - 8003cec: 2201 movs r2, #1 - 8003cee: 771a strb r2, [r3, #28] - - /* Input capture event */ - if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U) - 8003cf0: 687b ldr r3, [r7, #4] - 8003cf2: 681b ldr r3, [r3, #0] - 8003cf4: 699b ldr r3, [r3, #24] - 8003cf6: f003 0303 and.w r3, r3, #3 - 8003cfa: 2b00 cmp r3, #0 - 8003cfc: d003 beq.n 8003d06 - { -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->IC_CaptureCallback(htim); -#else - HAL_TIM_IC_CaptureCallback(htim); - 8003cfe: 6878 ldr r0, [r7, #4] - 8003d00: f000 f9bf bl 8004082 - 8003d04: e005 b.n 8003d12 - { -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->OC_DelayElapsedCallback(htim); - htim->PWM_PulseFinishedCallback(htim); -#else - HAL_TIM_OC_DelayElapsedCallback(htim); - 8003d06: 6878 ldr r0, [r7, #4] - 8003d08: f000 f9b1 bl 800406e - HAL_TIM_PWM_PulseFinishedCallback(htim); - 8003d0c: 6878 ldr r0, [r7, #4] - 8003d0e: f000 f9c2 bl 8004096 -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; - 8003d12: 687b ldr r3, [r7, #4] - 8003d14: 2200 movs r2, #0 - 8003d16: 771a strb r2, [r3, #28] - } - } - } - /* Capture compare 2 event */ - if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC2) != RESET) - 8003d18: 687b ldr r3, [r7, #4] - 8003d1a: 681b ldr r3, [r3, #0] - 8003d1c: 691b ldr r3, [r3, #16] - 8003d1e: f003 0304 and.w r3, r3, #4 - 8003d22: 2b04 cmp r3, #4 - 8003d24: d122 bne.n 8003d6c - { - if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC2) != RESET) - 8003d26: 687b ldr r3, [r7, #4] - 8003d28: 681b ldr r3, [r3, #0] - 8003d2a: 68db ldr r3, [r3, #12] - 8003d2c: f003 0304 and.w r3, r3, #4 - 8003d30: 2b04 cmp r3, #4 - 8003d32: d11b bne.n 8003d6c - { - __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC2); - 8003d34: 687b ldr r3, [r7, #4] - 8003d36: 681b ldr r3, [r3, #0] - 8003d38: f06f 0204 mvn.w r2, #4 - 8003d3c: 611a str r2, [r3, #16] - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; - 8003d3e: 687b ldr r3, [r7, #4] - 8003d40: 2202 movs r2, #2 - 8003d42: 771a strb r2, [r3, #28] - /* Input capture event */ - if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U) - 8003d44: 687b ldr r3, [r7, #4] - 8003d46: 681b ldr r3, [r3, #0] - 8003d48: 699b ldr r3, [r3, #24] - 8003d4a: f403 7340 and.w r3, r3, #768 ; 0x300 - 8003d4e: 2b00 cmp r3, #0 - 8003d50: d003 beq.n 8003d5a - { -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->IC_CaptureCallback(htim); -#else - HAL_TIM_IC_CaptureCallback(htim); - 8003d52: 6878 ldr r0, [r7, #4] - 8003d54: f000 f995 bl 8004082 - 8003d58: e005 b.n 8003d66 - { -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->OC_DelayElapsedCallback(htim); - htim->PWM_PulseFinishedCallback(htim); -#else - HAL_TIM_OC_DelayElapsedCallback(htim); - 8003d5a: 6878 ldr r0, [r7, #4] - 8003d5c: f000 f987 bl 800406e - HAL_TIM_PWM_PulseFinishedCallback(htim); - 8003d60: 6878 ldr r0, [r7, #4] - 8003d62: f000 f998 bl 8004096 -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; - 8003d66: 687b ldr r3, [r7, #4] - 8003d68: 2200 movs r2, #0 - 8003d6a: 771a strb r2, [r3, #28] - } - } - /* Capture compare 3 event */ - if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC3) != RESET) - 8003d6c: 687b ldr r3, [r7, #4] - 8003d6e: 681b ldr r3, [r3, #0] - 8003d70: 691b ldr r3, [r3, #16] - 8003d72: f003 0308 and.w r3, r3, #8 - 8003d76: 2b08 cmp r3, #8 - 8003d78: d122 bne.n 8003dc0 - { - if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC3) != RESET) - 8003d7a: 687b ldr r3, [r7, #4] - 8003d7c: 681b ldr r3, [r3, #0] - 8003d7e: 68db ldr r3, [r3, #12] - 8003d80: f003 0308 and.w r3, r3, #8 - 8003d84: 2b08 cmp r3, #8 - 8003d86: d11b bne.n 8003dc0 - { - __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC3); - 8003d88: 687b ldr r3, [r7, #4] - 8003d8a: 681b ldr r3, [r3, #0] - 8003d8c: f06f 0208 mvn.w r2, #8 - 8003d90: 611a str r2, [r3, #16] - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; - 8003d92: 687b ldr r3, [r7, #4] - 8003d94: 2204 movs r2, #4 - 8003d96: 771a strb r2, [r3, #28] - /* Input capture event */ - if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U) - 8003d98: 687b ldr r3, [r7, #4] - 8003d9a: 681b ldr r3, [r3, #0] - 8003d9c: 69db ldr r3, [r3, #28] - 8003d9e: f003 0303 and.w r3, r3, #3 - 8003da2: 2b00 cmp r3, #0 - 8003da4: d003 beq.n 8003dae - { -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->IC_CaptureCallback(htim); -#else - HAL_TIM_IC_CaptureCallback(htim); - 8003da6: 6878 ldr r0, [r7, #4] - 8003da8: f000 f96b bl 8004082 - 8003dac: e005 b.n 8003dba - { -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->OC_DelayElapsedCallback(htim); - htim->PWM_PulseFinishedCallback(htim); -#else - HAL_TIM_OC_DelayElapsedCallback(htim); - 8003dae: 6878 ldr r0, [r7, #4] - 8003db0: f000 f95d bl 800406e - HAL_TIM_PWM_PulseFinishedCallback(htim); - 8003db4: 6878 ldr r0, [r7, #4] - 8003db6: f000 f96e bl 8004096 -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; - 8003dba: 687b ldr r3, [r7, #4] - 8003dbc: 2200 movs r2, #0 - 8003dbe: 771a strb r2, [r3, #28] - } - } - /* Capture compare 4 event */ - if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC4) != RESET) - 8003dc0: 687b ldr r3, [r7, #4] - 8003dc2: 681b ldr r3, [r3, #0] - 8003dc4: 691b ldr r3, [r3, #16] - 8003dc6: f003 0310 and.w r3, r3, #16 - 8003dca: 2b10 cmp r3, #16 - 8003dcc: d122 bne.n 8003e14 - { - if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC4) != RESET) - 8003dce: 687b ldr r3, [r7, #4] - 8003dd0: 681b ldr r3, [r3, #0] - 8003dd2: 68db ldr r3, [r3, #12] - 8003dd4: f003 0310 and.w r3, r3, #16 - 8003dd8: 2b10 cmp r3, #16 - 8003dda: d11b bne.n 8003e14 - { - __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC4); - 8003ddc: 687b ldr r3, [r7, #4] - 8003dde: 681b ldr r3, [r3, #0] - 8003de0: f06f 0210 mvn.w r2, #16 - 8003de4: 611a str r2, [r3, #16] - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; - 8003de6: 687b ldr r3, [r7, #4] - 8003de8: 2208 movs r2, #8 - 8003dea: 771a strb r2, [r3, #28] - /* Input capture event */ - if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U) - 8003dec: 687b ldr r3, [r7, #4] - 8003dee: 681b ldr r3, [r3, #0] - 8003df0: 69db ldr r3, [r3, #28] - 8003df2: f403 7340 and.w r3, r3, #768 ; 0x300 - 8003df6: 2b00 cmp r3, #0 - 8003df8: d003 beq.n 8003e02 - { -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->IC_CaptureCallback(htim); -#else - HAL_TIM_IC_CaptureCallback(htim); - 8003dfa: 6878 ldr r0, [r7, #4] - 8003dfc: f000 f941 bl 8004082 - 8003e00: e005 b.n 8003e0e - { -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->OC_DelayElapsedCallback(htim); - htim->PWM_PulseFinishedCallback(htim); -#else - HAL_TIM_OC_DelayElapsedCallback(htim); - 8003e02: 6878 ldr r0, [r7, #4] - 8003e04: f000 f933 bl 800406e - HAL_TIM_PWM_PulseFinishedCallback(htim); - 8003e08: 6878 ldr r0, [r7, #4] - 8003e0a: f000 f944 bl 8004096 -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; - 8003e0e: 687b ldr r3, [r7, #4] - 8003e10: 2200 movs r2, #0 - 8003e12: 771a strb r2, [r3, #28] - } - } - /* TIM Update event */ - if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_UPDATE) != RESET) - 8003e14: 687b ldr r3, [r7, #4] - 8003e16: 681b ldr r3, [r3, #0] - 8003e18: 691b ldr r3, [r3, #16] - 8003e1a: f003 0301 and.w r3, r3, #1 - 8003e1e: 2b01 cmp r3, #1 - 8003e20: d10e bne.n 8003e40 - { - if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) != RESET) - 8003e22: 687b ldr r3, [r7, #4] - 8003e24: 681b ldr r3, [r3, #0] - 8003e26: 68db ldr r3, [r3, #12] - 8003e28: f003 0301 and.w r3, r3, #1 - 8003e2c: 2b01 cmp r3, #1 - 8003e2e: d107 bne.n 8003e40 - { - __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE); - 8003e30: 687b ldr r3, [r7, #4] - 8003e32: 681b ldr r3, [r3, #0] - 8003e34: f06f 0201 mvn.w r2, #1 - 8003e38: 611a str r2, [r3, #16] -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->PeriodElapsedCallback(htim); -#else - HAL_TIM_PeriodElapsedCallback(htim); - 8003e3a: 6878 ldr r0, [r7, #4] - 8003e3c: f000 f90d bl 800405a -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - } - /* TIM Break input event */ - if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_BREAK) != RESET) - 8003e40: 687b ldr r3, [r7, #4] - 8003e42: 681b ldr r3, [r3, #0] - 8003e44: 691b ldr r3, [r3, #16] - 8003e46: f003 0380 and.w r3, r3, #128 ; 0x80 - 8003e4a: 2b80 cmp r3, #128 ; 0x80 - 8003e4c: d10e bne.n 8003e6c - { - if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_BREAK) != RESET) - 8003e4e: 687b ldr r3, [r7, #4] - 8003e50: 681b ldr r3, [r3, #0] - 8003e52: 68db ldr r3, [r3, #12] - 8003e54: f003 0380 and.w r3, r3, #128 ; 0x80 - 8003e58: 2b80 cmp r3, #128 ; 0x80 - 8003e5a: d107 bne.n 8003e6c - { - __HAL_TIM_CLEAR_IT(htim, TIM_IT_BREAK); - 8003e5c: 687b ldr r3, [r7, #4] - 8003e5e: 681b ldr r3, [r3, #0] - 8003e60: f06f 0280 mvn.w r2, #128 ; 0x80 - 8003e64: 611a str r2, [r3, #16] -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->BreakCallback(htim); -#else - HAL_TIMEx_BreakCallback(htim); - 8003e66: 6878 ldr r0, [r7, #4] - 8003e68: f000 faea bl 8004440 -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - } - /* TIM Trigger detection event */ - if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_TRIGGER) != RESET) - 8003e6c: 687b ldr r3, [r7, #4] - 8003e6e: 681b ldr r3, [r3, #0] - 8003e70: 691b ldr r3, [r3, #16] - 8003e72: f003 0340 and.w r3, r3, #64 ; 0x40 - 8003e76: 2b40 cmp r3, #64 ; 0x40 - 8003e78: d10e bne.n 8003e98 - { - if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_TRIGGER) != RESET) - 8003e7a: 687b ldr r3, [r7, #4] - 8003e7c: 681b ldr r3, [r3, #0] - 8003e7e: 68db ldr r3, [r3, #12] - 8003e80: f003 0340 and.w r3, r3, #64 ; 0x40 - 8003e84: 2b40 cmp r3, #64 ; 0x40 - 8003e86: d107 bne.n 8003e98 - { - __HAL_TIM_CLEAR_IT(htim, TIM_IT_TRIGGER); - 8003e88: 687b ldr r3, [r7, #4] - 8003e8a: 681b ldr r3, [r3, #0] - 8003e8c: f06f 0240 mvn.w r2, #64 ; 0x40 - 8003e90: 611a str r2, [r3, #16] -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->TriggerCallback(htim); -#else - HAL_TIM_TriggerCallback(htim); - 8003e92: 6878 ldr r0, [r7, #4] - 8003e94: f000 f909 bl 80040aa -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - } - /* TIM commutation event */ - if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_COM) != RESET) - 8003e98: 687b ldr r3, [r7, #4] - 8003e9a: 681b ldr r3, [r3, #0] - 8003e9c: 691b ldr r3, [r3, #16] - 8003e9e: f003 0320 and.w r3, r3, #32 - 8003ea2: 2b20 cmp r3, #32 - 8003ea4: d10e bne.n 8003ec4 - { - if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_COM) != RESET) - 8003ea6: 687b ldr r3, [r7, #4] - 8003ea8: 681b ldr r3, [r3, #0] - 8003eaa: 68db ldr r3, [r3, #12] - 8003eac: f003 0320 and.w r3, r3, #32 - 8003eb0: 2b20 cmp r3, #32 - 8003eb2: d107 bne.n 8003ec4 - { - __HAL_TIM_CLEAR_IT(htim, TIM_FLAG_COM); - 8003eb4: 687b ldr r3, [r7, #4] - 8003eb6: 681b ldr r3, [r3, #0] - 8003eb8: f06f 0220 mvn.w r2, #32 - 8003ebc: 611a str r2, [r3, #16] -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->CommutationCallback(htim); -#else - HAL_TIMEx_CommutCallback(htim); - 8003ebe: 6878 ldr r0, [r7, #4] - 8003ec0: f000 fab4 bl 800442c -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - } -} - 8003ec4: bf00 nop - 8003ec6: 3708 adds r7, #8 - 8003ec8: 46bd mov sp, r7 - 8003eca: bd80 pop {r7, pc} - -08003ecc : - * @param sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that - * contains the clock source information for the TIM peripheral. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig) -{ - 8003ecc: b580 push {r7, lr} - 8003ece: b084 sub sp, #16 - 8003ed0: af00 add r7, sp, #0 - 8003ed2: 6078 str r0, [r7, #4] - 8003ed4: 6039 str r1, [r7, #0] - HAL_StatusTypeDef status = HAL_OK; - 8003ed6: 2300 movs r3, #0 - 8003ed8: 73fb strb r3, [r7, #15] - uint32_t tmpsmcr; - - /* Process Locked */ - __HAL_LOCK(htim); - 8003eda: 687b ldr r3, [r7, #4] - 8003edc: f893 303c ldrb.w r3, [r3, #60] ; 0x3c - 8003ee0: 2b01 cmp r3, #1 - 8003ee2: d101 bne.n 8003ee8 - 8003ee4: 2302 movs r3, #2 - 8003ee6: e0b4 b.n 8004052 - 8003ee8: 687b ldr r3, [r7, #4] - 8003eea: 2201 movs r2, #1 - 8003eec: f883 203c strb.w r2, [r3, #60] ; 0x3c - - htim->State = HAL_TIM_STATE_BUSY; - 8003ef0: 687b ldr r3, [r7, #4] - 8003ef2: 2202 movs r2, #2 - 8003ef4: f883 203d strb.w r2, [r3, #61] ; 0x3d - - /* Check the parameters */ - assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource)); - - /* Reset the SMS, TS, ECE, ETPS and ETRF bits */ - tmpsmcr = htim->Instance->SMCR; - 8003ef8: 687b ldr r3, [r7, #4] - 8003efa: 681b ldr r3, [r3, #0] - 8003efc: 689b ldr r3, [r3, #8] - 8003efe: 60bb str r3, [r7, #8] - tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS); - 8003f00: 68bb ldr r3, [r7, #8] - 8003f02: f023 0377 bic.w r3, r3, #119 ; 0x77 - 8003f06: 60bb str r3, [r7, #8] - tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); - 8003f08: 68bb ldr r3, [r7, #8] - 8003f0a: f423 437f bic.w r3, r3, #65280 ; 0xff00 - 8003f0e: 60bb str r3, [r7, #8] - htim->Instance->SMCR = tmpsmcr; - 8003f10: 687b ldr r3, [r7, #4] - 8003f12: 681b ldr r3, [r3, #0] - 8003f14: 68ba ldr r2, [r7, #8] - 8003f16: 609a str r2, [r3, #8] - - switch (sClockSourceConfig->ClockSource) - 8003f18: 683b ldr r3, [r7, #0] - 8003f1a: 681b ldr r3, [r3, #0] - 8003f1c: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 - 8003f20: d03e beq.n 8003fa0 - 8003f22: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 - 8003f26: f200 8087 bhi.w 8004038 - 8003f2a: f5b3 5f80 cmp.w r3, #4096 ; 0x1000 - 8003f2e: f000 8086 beq.w 800403e - 8003f32: f5b3 5f80 cmp.w r3, #4096 ; 0x1000 - 8003f36: d87f bhi.n 8004038 - 8003f38: 2b70 cmp r3, #112 ; 0x70 - 8003f3a: d01a beq.n 8003f72 - 8003f3c: 2b70 cmp r3, #112 ; 0x70 - 8003f3e: d87b bhi.n 8004038 - 8003f40: 2b60 cmp r3, #96 ; 0x60 - 8003f42: d050 beq.n 8003fe6 - 8003f44: 2b60 cmp r3, #96 ; 0x60 - 8003f46: d877 bhi.n 8004038 - 8003f48: 2b50 cmp r3, #80 ; 0x50 - 8003f4a: d03c beq.n 8003fc6 - 8003f4c: 2b50 cmp r3, #80 ; 0x50 - 8003f4e: d873 bhi.n 8004038 - 8003f50: 2b40 cmp r3, #64 ; 0x40 - 8003f52: d058 beq.n 8004006 - 8003f54: 2b40 cmp r3, #64 ; 0x40 - 8003f56: d86f bhi.n 8004038 - 8003f58: 2b30 cmp r3, #48 ; 0x30 - 8003f5a: d064 beq.n 8004026 - 8003f5c: 2b30 cmp r3, #48 ; 0x30 - 8003f5e: d86b bhi.n 8004038 - 8003f60: 2b20 cmp r3, #32 - 8003f62: d060 beq.n 8004026 - 8003f64: 2b20 cmp r3, #32 - 8003f66: d867 bhi.n 8004038 - 8003f68: 2b00 cmp r3, #0 - 8003f6a: d05c beq.n 8004026 - 8003f6c: 2b10 cmp r3, #16 - 8003f6e: d05a beq.n 8004026 - 8003f70: e062 b.n 8004038 - assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); - assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); - assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - - /* Configure the ETR Clock source */ - TIM_ETR_SetConfig(htim->Instance, - 8003f72: 687b ldr r3, [r7, #4] - 8003f74: 6818 ldr r0, [r3, #0] - 8003f76: 683b ldr r3, [r7, #0] - 8003f78: 6899 ldr r1, [r3, #8] - 8003f7a: 683b ldr r3, [r7, #0] - 8003f7c: 685a ldr r2, [r3, #4] - 8003f7e: 683b ldr r3, [r7, #0] - 8003f80: 68db ldr r3, [r3, #12] - 8003f82: f000 f9b7 bl 80042f4 - sClockSourceConfig->ClockPrescaler, - sClockSourceConfig->ClockPolarity, - sClockSourceConfig->ClockFilter); - - /* Select the External clock mode1 and the ETRF trigger */ - tmpsmcr = htim->Instance->SMCR; - 8003f86: 687b ldr r3, [r7, #4] - 8003f88: 681b ldr r3, [r3, #0] - 8003f8a: 689b ldr r3, [r3, #8] - 8003f8c: 60bb str r3, [r7, #8] - tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1); - 8003f8e: 68bb ldr r3, [r7, #8] - 8003f90: f043 0377 orr.w r3, r3, #119 ; 0x77 - 8003f94: 60bb str r3, [r7, #8] - /* Write to TIMx SMCR */ - htim->Instance->SMCR = tmpsmcr; - 8003f96: 687b ldr r3, [r7, #4] - 8003f98: 681b ldr r3, [r3, #0] - 8003f9a: 68ba ldr r2, [r7, #8] - 8003f9c: 609a str r2, [r3, #8] - break; - 8003f9e: e04f b.n 8004040 - assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); - assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); - assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - - /* Configure the ETR Clock source */ - TIM_ETR_SetConfig(htim->Instance, - 8003fa0: 687b ldr r3, [r7, #4] - 8003fa2: 6818 ldr r0, [r3, #0] - 8003fa4: 683b ldr r3, [r7, #0] - 8003fa6: 6899 ldr r1, [r3, #8] - 8003fa8: 683b ldr r3, [r7, #0] - 8003faa: 685a ldr r2, [r3, #4] - 8003fac: 683b ldr r3, [r7, #0] - 8003fae: 68db ldr r3, [r3, #12] - 8003fb0: f000 f9a0 bl 80042f4 - sClockSourceConfig->ClockPrescaler, - sClockSourceConfig->ClockPolarity, - sClockSourceConfig->ClockFilter); - /* Enable the External clock mode2 */ - htim->Instance->SMCR |= TIM_SMCR_ECE; - 8003fb4: 687b ldr r3, [r7, #4] - 8003fb6: 681b ldr r3, [r3, #0] - 8003fb8: 689a ldr r2, [r3, #8] - 8003fba: 687b ldr r3, [r7, #4] - 8003fbc: 681b ldr r3, [r3, #0] - 8003fbe: f442 4280 orr.w r2, r2, #16384 ; 0x4000 - 8003fc2: 609a str r2, [r3, #8] - break; - 8003fc4: e03c b.n 8004040 - - /* Check TI1 input conditioning related parameters */ - assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); - assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - - TIM_TI1_ConfigInputStage(htim->Instance, - 8003fc6: 687b ldr r3, [r7, #4] - 8003fc8: 6818 ldr r0, [r3, #0] - 8003fca: 683b ldr r3, [r7, #0] - 8003fcc: 6859 ldr r1, [r3, #4] - 8003fce: 683b ldr r3, [r7, #0] - 8003fd0: 68db ldr r3, [r3, #12] - 8003fd2: 461a mov r2, r3 - 8003fd4: f000 f914 bl 8004200 - sClockSourceConfig->ClockPolarity, - sClockSourceConfig->ClockFilter); - TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1); - 8003fd8: 687b ldr r3, [r7, #4] - 8003fda: 681b ldr r3, [r3, #0] - 8003fdc: 2150 movs r1, #80 ; 0x50 - 8003fde: 4618 mov r0, r3 - 8003fe0: f000 f96d bl 80042be - break; - 8003fe4: e02c b.n 8004040 - - /* Check TI2 input conditioning related parameters */ - assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); - assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - - TIM_TI2_ConfigInputStage(htim->Instance, - 8003fe6: 687b ldr r3, [r7, #4] - 8003fe8: 6818 ldr r0, [r3, #0] - 8003fea: 683b ldr r3, [r7, #0] - 8003fec: 6859 ldr r1, [r3, #4] - 8003fee: 683b ldr r3, [r7, #0] - 8003ff0: 68db ldr r3, [r3, #12] - 8003ff2: 461a mov r2, r3 - 8003ff4: f000 f933 bl 800425e - sClockSourceConfig->ClockPolarity, - sClockSourceConfig->ClockFilter); - TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2); - 8003ff8: 687b ldr r3, [r7, #4] - 8003ffa: 681b ldr r3, [r3, #0] - 8003ffc: 2160 movs r1, #96 ; 0x60 - 8003ffe: 4618 mov r0, r3 - 8004000: f000 f95d bl 80042be - break; - 8004004: e01c b.n 8004040 - - /* Check TI1 input conditioning related parameters */ - assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); - assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - - TIM_TI1_ConfigInputStage(htim->Instance, - 8004006: 687b ldr r3, [r7, #4] - 8004008: 6818 ldr r0, [r3, #0] - 800400a: 683b ldr r3, [r7, #0] - 800400c: 6859 ldr r1, [r3, #4] - 800400e: 683b ldr r3, [r7, #0] - 8004010: 68db ldr r3, [r3, #12] - 8004012: 461a mov r2, r3 - 8004014: f000 f8f4 bl 8004200 - sClockSourceConfig->ClockPolarity, - sClockSourceConfig->ClockFilter); - TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED); - 8004018: 687b ldr r3, [r7, #4] - 800401a: 681b ldr r3, [r3, #0] - 800401c: 2140 movs r1, #64 ; 0x40 - 800401e: 4618 mov r0, r3 - 8004020: f000 f94d bl 80042be - break; - 8004024: e00c b.n 8004040 - case TIM_CLOCKSOURCE_ITR3: - { - /* Check whether or not the timer instance supports internal trigger input */ - assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance)); - - TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource); - 8004026: 687b ldr r3, [r7, #4] - 8004028: 681a ldr r2, [r3, #0] - 800402a: 683b ldr r3, [r7, #0] - 800402c: 681b ldr r3, [r3, #0] - 800402e: 4619 mov r1, r3 - 8004030: 4610 mov r0, r2 - 8004032: f000 f944 bl 80042be - break; - 8004036: e003 b.n 8004040 - } - - default: - status = HAL_ERROR; - 8004038: 2301 movs r3, #1 - 800403a: 73fb strb r3, [r7, #15] - break; - 800403c: e000 b.n 8004040 - break; - 800403e: bf00 nop - } - htim->State = HAL_TIM_STATE_READY; - 8004040: 687b ldr r3, [r7, #4] - 8004042: 2201 movs r2, #1 - 8004044: f883 203d strb.w r2, [r3, #61] ; 0x3d - - __HAL_UNLOCK(htim); - 8004048: 687b ldr r3, [r7, #4] - 800404a: 2200 movs r2, #0 - 800404c: f883 203c strb.w r2, [r3, #60] ; 0x3c - - return status; - 8004050: 7bfb ldrb r3, [r7, #15] -} - 8004052: 4618 mov r0, r3 - 8004054: 3710 adds r7, #16 - 8004056: 46bd mov sp, r7 - 8004058: bd80 pop {r7, pc} - -0800405a : - * @brief Period elapsed callback in non-blocking mode - * @param htim TIM handle - * @retval None - */ -__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - 800405a: b480 push {r7} - 800405c: b083 sub sp, #12 - 800405e: af00 add r7, sp, #0 - 8004060: 6078 str r0, [r7, #4] - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_PeriodElapsedCallback could be implemented in the user file - */ -} - 8004062: bf00 nop - 8004064: 370c adds r7, #12 - 8004066: 46bd mov sp, r7 - 8004068: f85d 7b04 ldr.w r7, [sp], #4 - 800406c: 4770 bx lr - -0800406e : - * @brief Output Compare callback in non-blocking mode - * @param htim TIM OC handle - * @retval None - */ -__weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) -{ - 800406e: b480 push {r7} - 8004070: b083 sub sp, #12 - 8004072: af00 add r7, sp, #0 - 8004074: 6078 str r0, [r7, #4] - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file - */ -} - 8004076: bf00 nop - 8004078: 370c adds r7, #12 - 800407a: 46bd mov sp, r7 - 800407c: f85d 7b04 ldr.w r7, [sp], #4 - 8004080: 4770 bx lr - -08004082 : - * @brief Input Capture callback in non-blocking mode - * @param htim TIM IC handle - * @retval None - */ -__weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) -{ - 8004082: b480 push {r7} - 8004084: b083 sub sp, #12 - 8004086: af00 add r7, sp, #0 - 8004088: 6078 str r0, [r7, #4] - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_IC_CaptureCallback could be implemented in the user file - */ -} - 800408a: bf00 nop - 800408c: 370c adds r7, #12 - 800408e: 46bd mov sp, r7 - 8004090: f85d 7b04 ldr.w r7, [sp], #4 - 8004094: 4770 bx lr - -08004096 : - * @brief PWM Pulse finished callback in non-blocking mode - * @param htim TIM handle - * @retval None - */ -__weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) -{ - 8004096: b480 push {r7} - 8004098: b083 sub sp, #12 - 800409a: af00 add r7, sp, #0 - 800409c: 6078 str r0, [r7, #4] - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file - */ -} - 800409e: bf00 nop - 80040a0: 370c adds r7, #12 - 80040a2: 46bd mov sp, r7 - 80040a4: f85d 7b04 ldr.w r7, [sp], #4 - 80040a8: 4770 bx lr - -080040aa : - * @brief Hall Trigger detection callback in non-blocking mode - * @param htim TIM handle - * @retval None - */ -__weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim) -{ - 80040aa: b480 push {r7} - 80040ac: b083 sub sp, #12 - 80040ae: af00 add r7, sp, #0 - 80040b0: 6078 str r0, [r7, #4] - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_TriggerCallback could be implemented in the user file - */ -} - 80040b2: bf00 nop - 80040b4: 370c adds r7, #12 - 80040b6: 46bd mov sp, r7 - 80040b8: f85d 7b04 ldr.w r7, [sp], #4 - 80040bc: 4770 bx lr - ... - -080040c0 : - * @param TIMx TIM peripheral - * @param Structure TIM Base configuration structure - * @retval None - */ -void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure) -{ - 80040c0: b480 push {r7} - 80040c2: b085 sub sp, #20 - 80040c4: af00 add r7, sp, #0 - 80040c6: 6078 str r0, [r7, #4] - 80040c8: 6039 str r1, [r7, #0] - uint32_t tmpcr1; - tmpcr1 = TIMx->CR1; - 80040ca: 687b ldr r3, [r7, #4] - 80040cc: 681b ldr r3, [r3, #0] - 80040ce: 60fb str r3, [r7, #12] - - /* Set TIM Time Base Unit parameters ---------------------------------------*/ - if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx)) - 80040d0: 687b ldr r3, [r7, #4] - 80040d2: 4a40 ldr r2, [pc, #256] ; (80041d4 ) - 80040d4: 4293 cmp r3, r2 - 80040d6: d013 beq.n 8004100 - 80040d8: 687b ldr r3, [r7, #4] - 80040da: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000 - 80040de: d00f beq.n 8004100 - 80040e0: 687b ldr r3, [r7, #4] - 80040e2: 4a3d ldr r2, [pc, #244] ; (80041d8 ) - 80040e4: 4293 cmp r3, r2 - 80040e6: d00b beq.n 8004100 - 80040e8: 687b ldr r3, [r7, #4] - 80040ea: 4a3c ldr r2, [pc, #240] ; (80041dc ) - 80040ec: 4293 cmp r3, r2 - 80040ee: d007 beq.n 8004100 - 80040f0: 687b ldr r3, [r7, #4] - 80040f2: 4a3b ldr r2, [pc, #236] ; (80041e0 ) - 80040f4: 4293 cmp r3, r2 - 80040f6: d003 beq.n 8004100 - 80040f8: 687b ldr r3, [r7, #4] - 80040fa: 4a3a ldr r2, [pc, #232] ; (80041e4 ) - 80040fc: 4293 cmp r3, r2 - 80040fe: d108 bne.n 8004112 - { - /* Select the Counter Mode */ - tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS); - 8004100: 68fb ldr r3, [r7, #12] - 8004102: f023 0370 bic.w r3, r3, #112 ; 0x70 - 8004106: 60fb str r3, [r7, #12] - tmpcr1 |= Structure->CounterMode; - 8004108: 683b ldr r3, [r7, #0] - 800410a: 685b ldr r3, [r3, #4] - 800410c: 68fa ldr r2, [r7, #12] - 800410e: 4313 orrs r3, r2 - 8004110: 60fb str r3, [r7, #12] - } - - if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx)) - 8004112: 687b ldr r3, [r7, #4] - 8004114: 4a2f ldr r2, [pc, #188] ; (80041d4 ) - 8004116: 4293 cmp r3, r2 - 8004118: d02b beq.n 8004172 - 800411a: 687b ldr r3, [r7, #4] - 800411c: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000 - 8004120: d027 beq.n 8004172 - 8004122: 687b ldr r3, [r7, #4] - 8004124: 4a2c ldr r2, [pc, #176] ; (80041d8 ) - 8004126: 4293 cmp r3, r2 - 8004128: d023 beq.n 8004172 - 800412a: 687b ldr r3, [r7, #4] - 800412c: 4a2b ldr r2, [pc, #172] ; (80041dc ) - 800412e: 4293 cmp r3, r2 - 8004130: d01f beq.n 8004172 - 8004132: 687b ldr r3, [r7, #4] - 8004134: 4a2a ldr r2, [pc, #168] ; (80041e0 ) - 8004136: 4293 cmp r3, r2 - 8004138: d01b beq.n 8004172 - 800413a: 687b ldr r3, [r7, #4] - 800413c: 4a29 ldr r2, [pc, #164] ; (80041e4 ) - 800413e: 4293 cmp r3, r2 - 8004140: d017 beq.n 8004172 - 8004142: 687b ldr r3, [r7, #4] - 8004144: 4a28 ldr r2, [pc, #160] ; (80041e8 ) - 8004146: 4293 cmp r3, r2 - 8004148: d013 beq.n 8004172 - 800414a: 687b ldr r3, [r7, #4] - 800414c: 4a27 ldr r2, [pc, #156] ; (80041ec ) - 800414e: 4293 cmp r3, r2 - 8004150: d00f beq.n 8004172 - 8004152: 687b ldr r3, [r7, #4] - 8004154: 4a26 ldr r2, [pc, #152] ; (80041f0 ) - 8004156: 4293 cmp r3, r2 - 8004158: d00b beq.n 8004172 - 800415a: 687b ldr r3, [r7, #4] - 800415c: 4a25 ldr r2, [pc, #148] ; (80041f4 ) - 800415e: 4293 cmp r3, r2 - 8004160: d007 beq.n 8004172 - 8004162: 687b ldr r3, [r7, #4] - 8004164: 4a24 ldr r2, [pc, #144] ; (80041f8 ) - 8004166: 4293 cmp r3, r2 - 8004168: d003 beq.n 8004172 - 800416a: 687b ldr r3, [r7, #4] - 800416c: 4a23 ldr r2, [pc, #140] ; (80041fc ) - 800416e: 4293 cmp r3, r2 - 8004170: d108 bne.n 8004184 - { - /* Set the clock division */ - tmpcr1 &= ~TIM_CR1_CKD; - 8004172: 68fb ldr r3, [r7, #12] - 8004174: f423 7340 bic.w r3, r3, #768 ; 0x300 - 8004178: 60fb str r3, [r7, #12] - tmpcr1 |= (uint32_t)Structure->ClockDivision; - 800417a: 683b ldr r3, [r7, #0] - 800417c: 68db ldr r3, [r3, #12] - 800417e: 68fa ldr r2, [r7, #12] - 8004180: 4313 orrs r3, r2 - 8004182: 60fb str r3, [r7, #12] - } - - /* Set the auto-reload preload */ - MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload); - 8004184: 68fb ldr r3, [r7, #12] - 8004186: f023 0280 bic.w r2, r3, #128 ; 0x80 - 800418a: 683b ldr r3, [r7, #0] - 800418c: 695b ldr r3, [r3, #20] - 800418e: 4313 orrs r3, r2 - 8004190: 60fb str r3, [r7, #12] - - TIMx->CR1 = tmpcr1; - 8004192: 687b ldr r3, [r7, #4] - 8004194: 68fa ldr r2, [r7, #12] - 8004196: 601a str r2, [r3, #0] - - /* Set the Autoreload value */ - TIMx->ARR = (uint32_t)Structure->Period ; - 8004198: 683b ldr r3, [r7, #0] - 800419a: 689a ldr r2, [r3, #8] - 800419c: 687b ldr r3, [r7, #4] - 800419e: 62da str r2, [r3, #44] ; 0x2c - - /* Set the Prescaler value */ - TIMx->PSC = Structure->Prescaler; - 80041a0: 683b ldr r3, [r7, #0] - 80041a2: 681a ldr r2, [r3, #0] - 80041a4: 687b ldr r3, [r7, #4] - 80041a6: 629a str r2, [r3, #40] ; 0x28 - - if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx)) - 80041a8: 687b ldr r3, [r7, #4] - 80041aa: 4a0a ldr r2, [pc, #40] ; (80041d4 ) - 80041ac: 4293 cmp r3, r2 - 80041ae: d003 beq.n 80041b8 - 80041b0: 687b ldr r3, [r7, #4] - 80041b2: 4a0c ldr r2, [pc, #48] ; (80041e4 ) - 80041b4: 4293 cmp r3, r2 - 80041b6: d103 bne.n 80041c0 - { - /* Set the Repetition Counter value */ - TIMx->RCR = Structure->RepetitionCounter; - 80041b8: 683b ldr r3, [r7, #0] - 80041ba: 691a ldr r2, [r3, #16] - 80041bc: 687b ldr r3, [r7, #4] - 80041be: 631a str r2, [r3, #48] ; 0x30 - } - - /* Generate an update event to reload the Prescaler - and the repetition counter (only for advanced timer) value immediately */ - TIMx->EGR = TIM_EGR_UG; - 80041c0: 687b ldr r3, [r7, #4] - 80041c2: 2201 movs r2, #1 - 80041c4: 615a str r2, [r3, #20] -} - 80041c6: bf00 nop - 80041c8: 3714 adds r7, #20 - 80041ca: 46bd mov sp, r7 - 80041cc: f85d 7b04 ldr.w r7, [sp], #4 - 80041d0: 4770 bx lr - 80041d2: bf00 nop - 80041d4: 40010000 .word 0x40010000 - 80041d8: 40000400 .word 0x40000400 - 80041dc: 40000800 .word 0x40000800 - 80041e0: 40000c00 .word 0x40000c00 - 80041e4: 40010400 .word 0x40010400 - 80041e8: 40014000 .word 0x40014000 - 80041ec: 40014400 .word 0x40014400 - 80041f0: 40014800 .word 0x40014800 - 80041f4: 40001800 .word 0x40001800 - 80041f8: 40001c00 .word 0x40001c00 - 80041fc: 40002000 .word 0x40002000 - -08004200 : - * @param TIM_ICFilter Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @retval None - */ -static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) -{ - 8004200: b480 push {r7} - 8004202: b087 sub sp, #28 - 8004204: af00 add r7, sp, #0 - 8004206: 60f8 str r0, [r7, #12] - 8004208: 60b9 str r1, [r7, #8] - 800420a: 607a str r2, [r7, #4] - uint32_t tmpccmr1; - uint32_t tmpccer; - - /* Disable the Channel 1: Reset the CC1E Bit */ - tmpccer = TIMx->CCER; - 800420c: 68fb ldr r3, [r7, #12] - 800420e: 6a1b ldr r3, [r3, #32] - 8004210: 617b str r3, [r7, #20] - TIMx->CCER &= ~TIM_CCER_CC1E; - 8004212: 68fb ldr r3, [r7, #12] - 8004214: 6a1b ldr r3, [r3, #32] - 8004216: f023 0201 bic.w r2, r3, #1 - 800421a: 68fb ldr r3, [r7, #12] - 800421c: 621a str r2, [r3, #32] - tmpccmr1 = TIMx->CCMR1; - 800421e: 68fb ldr r3, [r7, #12] - 8004220: 699b ldr r3, [r3, #24] - 8004222: 613b str r3, [r7, #16] - - /* Set the filter */ - tmpccmr1 &= ~TIM_CCMR1_IC1F; - 8004224: 693b ldr r3, [r7, #16] - 8004226: f023 03f0 bic.w r3, r3, #240 ; 0xf0 - 800422a: 613b str r3, [r7, #16] - tmpccmr1 |= (TIM_ICFilter << 4U); - 800422c: 687b ldr r3, [r7, #4] - 800422e: 011b lsls r3, r3, #4 - 8004230: 693a ldr r2, [r7, #16] - 8004232: 4313 orrs r3, r2 - 8004234: 613b str r3, [r7, #16] - - /* Select the Polarity and set the CC1E Bit */ - tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP); - 8004236: 697b ldr r3, [r7, #20] - 8004238: f023 030a bic.w r3, r3, #10 - 800423c: 617b str r3, [r7, #20] - tmpccer |= TIM_ICPolarity; - 800423e: 697a ldr r2, [r7, #20] - 8004240: 68bb ldr r3, [r7, #8] - 8004242: 4313 orrs r3, r2 - 8004244: 617b str r3, [r7, #20] - - /* Write to TIMx CCMR1 and CCER registers */ - TIMx->CCMR1 = tmpccmr1; - 8004246: 68fb ldr r3, [r7, #12] - 8004248: 693a ldr r2, [r7, #16] - 800424a: 619a str r2, [r3, #24] - TIMx->CCER = tmpccer; - 800424c: 68fb ldr r3, [r7, #12] - 800424e: 697a ldr r2, [r7, #20] - 8004250: 621a str r2, [r3, #32] -} - 8004252: bf00 nop - 8004254: 371c adds r7, #28 - 8004256: 46bd mov sp, r7 - 8004258: f85d 7b04 ldr.w r7, [sp], #4 - 800425c: 4770 bx lr - -0800425e : - * @param TIM_ICFilter Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @retval None - */ -static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) -{ - 800425e: b480 push {r7} - 8004260: b087 sub sp, #28 - 8004262: af00 add r7, sp, #0 - 8004264: 60f8 str r0, [r7, #12] - 8004266: 60b9 str r1, [r7, #8] - 8004268: 607a str r2, [r7, #4] - uint32_t tmpccmr1; - uint32_t tmpccer; - - /* Disable the Channel 2: Reset the CC2E Bit */ - TIMx->CCER &= ~TIM_CCER_CC2E; - 800426a: 68fb ldr r3, [r7, #12] - 800426c: 6a1b ldr r3, [r3, #32] - 800426e: f023 0210 bic.w r2, r3, #16 - 8004272: 68fb ldr r3, [r7, #12] - 8004274: 621a str r2, [r3, #32] - tmpccmr1 = TIMx->CCMR1; - 8004276: 68fb ldr r3, [r7, #12] - 8004278: 699b ldr r3, [r3, #24] - 800427a: 617b str r3, [r7, #20] - tmpccer = TIMx->CCER; - 800427c: 68fb ldr r3, [r7, #12] - 800427e: 6a1b ldr r3, [r3, #32] - 8004280: 613b str r3, [r7, #16] - - /* Set the filter */ - tmpccmr1 &= ~TIM_CCMR1_IC2F; - 8004282: 697b ldr r3, [r7, #20] - 8004284: f423 4370 bic.w r3, r3, #61440 ; 0xf000 - 8004288: 617b str r3, [r7, #20] - tmpccmr1 |= (TIM_ICFilter << 12U); - 800428a: 687b ldr r3, [r7, #4] - 800428c: 031b lsls r3, r3, #12 - 800428e: 697a ldr r2, [r7, #20] - 8004290: 4313 orrs r3, r2 - 8004292: 617b str r3, [r7, #20] - - /* Select the Polarity and set the CC2E Bit */ - tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP); - 8004294: 693b ldr r3, [r7, #16] - 8004296: f023 03a0 bic.w r3, r3, #160 ; 0xa0 - 800429a: 613b str r3, [r7, #16] - tmpccer |= (TIM_ICPolarity << 4U); - 800429c: 68bb ldr r3, [r7, #8] - 800429e: 011b lsls r3, r3, #4 - 80042a0: 693a ldr r2, [r7, #16] - 80042a2: 4313 orrs r3, r2 - 80042a4: 613b str r3, [r7, #16] - - /* Write to TIMx CCMR1 and CCER registers */ - TIMx->CCMR1 = tmpccmr1 ; - 80042a6: 68fb ldr r3, [r7, #12] - 80042a8: 697a ldr r2, [r7, #20] - 80042aa: 619a str r2, [r3, #24] - TIMx->CCER = tmpccer; - 80042ac: 68fb ldr r3, [r7, #12] - 80042ae: 693a ldr r2, [r7, #16] - 80042b0: 621a str r2, [r3, #32] -} - 80042b2: bf00 nop - 80042b4: 371c adds r7, #28 - 80042b6: 46bd mov sp, r7 - 80042b8: f85d 7b04 ldr.w r7, [sp], #4 - 80042bc: 4770 bx lr - -080042be : - * @arg TIM_TS_TI2FP2: Filtered Timer Input 2 - * @arg TIM_TS_ETRF: External Trigger input - * @retval None - */ -static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource) -{ - 80042be: b480 push {r7} - 80042c0: b085 sub sp, #20 - 80042c2: af00 add r7, sp, #0 - 80042c4: 6078 str r0, [r7, #4] - 80042c6: 6039 str r1, [r7, #0] - uint32_t tmpsmcr; - - /* Get the TIMx SMCR register value */ - tmpsmcr = TIMx->SMCR; - 80042c8: 687b ldr r3, [r7, #4] - 80042ca: 689b ldr r3, [r3, #8] - 80042cc: 60fb str r3, [r7, #12] - /* Reset the TS Bits */ - tmpsmcr &= ~TIM_SMCR_TS; - 80042ce: 68fb ldr r3, [r7, #12] - 80042d0: f023 0370 bic.w r3, r3, #112 ; 0x70 - 80042d4: 60fb str r3, [r7, #12] - /* Set the Input Trigger source and the slave mode*/ - tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1); - 80042d6: 683a ldr r2, [r7, #0] - 80042d8: 68fb ldr r3, [r7, #12] - 80042da: 4313 orrs r3, r2 - 80042dc: f043 0307 orr.w r3, r3, #7 - 80042e0: 60fb str r3, [r7, #12] - /* Write to TIMx SMCR */ - TIMx->SMCR = tmpsmcr; - 80042e2: 687b ldr r3, [r7, #4] - 80042e4: 68fa ldr r2, [r7, #12] - 80042e6: 609a str r2, [r3, #8] -} - 80042e8: bf00 nop - 80042ea: 3714 adds r7, #20 - 80042ec: 46bd mov sp, r7 - 80042ee: f85d 7b04 ldr.w r7, [sp], #4 - 80042f2: 4770 bx lr - -080042f4 : - * This parameter must be a value between 0x00 and 0x0F - * @retval None - */ -void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, - uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter) -{ - 80042f4: b480 push {r7} - 80042f6: b087 sub sp, #28 - 80042f8: af00 add r7, sp, #0 - 80042fa: 60f8 str r0, [r7, #12] - 80042fc: 60b9 str r1, [r7, #8] - 80042fe: 607a str r2, [r7, #4] - 8004300: 603b str r3, [r7, #0] - uint32_t tmpsmcr; - - tmpsmcr = TIMx->SMCR; - 8004302: 68fb ldr r3, [r7, #12] - 8004304: 689b ldr r3, [r3, #8] - 8004306: 617b str r3, [r7, #20] - - /* Reset the ETR Bits */ - tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); - 8004308: 697b ldr r3, [r7, #20] - 800430a: f423 437f bic.w r3, r3, #65280 ; 0xff00 - 800430e: 617b str r3, [r7, #20] - - /* Set the Prescaler, the Filter value and the Polarity */ - tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U))); - 8004310: 683b ldr r3, [r7, #0] - 8004312: 021a lsls r2, r3, #8 - 8004314: 687b ldr r3, [r7, #4] - 8004316: 431a orrs r2, r3 - 8004318: 68bb ldr r3, [r7, #8] - 800431a: 4313 orrs r3, r2 - 800431c: 697a ldr r2, [r7, #20] - 800431e: 4313 orrs r3, r2 - 8004320: 617b str r3, [r7, #20] - - /* Write to TIMx SMCR */ - TIMx->SMCR = tmpsmcr; - 8004322: 68fb ldr r3, [r7, #12] - 8004324: 697a ldr r2, [r7, #20] - 8004326: 609a str r2, [r3, #8] -} - 8004328: bf00 nop - 800432a: 371c adds r7, #28 - 800432c: 46bd mov sp, r7 - 800432e: f85d 7b04 ldr.w r7, [sp], #4 - 8004332: 4770 bx lr - -08004334 : - * mode. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, - TIM_MasterConfigTypeDef *sMasterConfig) -{ - 8004334: b480 push {r7} - 8004336: b085 sub sp, #20 - 8004338: af00 add r7, sp, #0 - 800433a: 6078 str r0, [r7, #4] - 800433c: 6039 str r1, [r7, #0] - assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance)); - assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger)); - assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode)); - - /* Check input state */ - __HAL_LOCK(htim); - 800433e: 687b ldr r3, [r7, #4] - 8004340: f893 303c ldrb.w r3, [r3, #60] ; 0x3c - 8004344: 2b01 cmp r3, #1 - 8004346: d101 bne.n 800434c - 8004348: 2302 movs r3, #2 - 800434a: e05a b.n 8004402 - 800434c: 687b ldr r3, [r7, #4] - 800434e: 2201 movs r2, #1 - 8004350: f883 203c strb.w r2, [r3, #60] ; 0x3c - - /* Change the handler state */ - htim->State = HAL_TIM_STATE_BUSY; - 8004354: 687b ldr r3, [r7, #4] - 8004356: 2202 movs r2, #2 - 8004358: f883 203d strb.w r2, [r3, #61] ; 0x3d - - /* Get the TIMx CR2 register value */ - tmpcr2 = htim->Instance->CR2; - 800435c: 687b ldr r3, [r7, #4] - 800435e: 681b ldr r3, [r3, #0] - 8004360: 685b ldr r3, [r3, #4] - 8004362: 60fb str r3, [r7, #12] - - /* Get the TIMx SMCR register value */ - tmpsmcr = htim->Instance->SMCR; - 8004364: 687b ldr r3, [r7, #4] - 8004366: 681b ldr r3, [r3, #0] - 8004368: 689b ldr r3, [r3, #8] - 800436a: 60bb str r3, [r7, #8] - - /* Reset the MMS Bits */ - tmpcr2 &= ~TIM_CR2_MMS; - 800436c: 68fb ldr r3, [r7, #12] - 800436e: f023 0370 bic.w r3, r3, #112 ; 0x70 - 8004372: 60fb str r3, [r7, #12] - /* Select the TRGO source */ - tmpcr2 |= sMasterConfig->MasterOutputTrigger; - 8004374: 683b ldr r3, [r7, #0] - 8004376: 681b ldr r3, [r3, #0] - 8004378: 68fa ldr r2, [r7, #12] - 800437a: 4313 orrs r3, r2 - 800437c: 60fb str r3, [r7, #12] - - /* Update TIMx CR2 */ - htim->Instance->CR2 = tmpcr2; - 800437e: 687b ldr r3, [r7, #4] - 8004380: 681b ldr r3, [r3, #0] - 8004382: 68fa ldr r2, [r7, #12] - 8004384: 605a str r2, [r3, #4] - - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - 8004386: 687b ldr r3, [r7, #4] - 8004388: 681b ldr r3, [r3, #0] - 800438a: 4a21 ldr r2, [pc, #132] ; (8004410 ) - 800438c: 4293 cmp r3, r2 - 800438e: d022 beq.n 80043d6 - 8004390: 687b ldr r3, [r7, #4] - 8004392: 681b ldr r3, [r3, #0] - 8004394: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000 - 8004398: d01d beq.n 80043d6 - 800439a: 687b ldr r3, [r7, #4] - 800439c: 681b ldr r3, [r3, #0] - 800439e: 4a1d ldr r2, [pc, #116] ; (8004414 ) - 80043a0: 4293 cmp r3, r2 - 80043a2: d018 beq.n 80043d6 - 80043a4: 687b ldr r3, [r7, #4] - 80043a6: 681b ldr r3, [r3, #0] - 80043a8: 4a1b ldr r2, [pc, #108] ; (8004418 ) - 80043aa: 4293 cmp r3, r2 - 80043ac: d013 beq.n 80043d6 - 80043ae: 687b ldr r3, [r7, #4] - 80043b0: 681b ldr r3, [r3, #0] - 80043b2: 4a1a ldr r2, [pc, #104] ; (800441c ) - 80043b4: 4293 cmp r3, r2 - 80043b6: d00e beq.n 80043d6 - 80043b8: 687b ldr r3, [r7, #4] - 80043ba: 681b ldr r3, [r3, #0] - 80043bc: 4a18 ldr r2, [pc, #96] ; (8004420 ) - 80043be: 4293 cmp r3, r2 - 80043c0: d009 beq.n 80043d6 - 80043c2: 687b ldr r3, [r7, #4] - 80043c4: 681b ldr r3, [r3, #0] - 80043c6: 4a17 ldr r2, [pc, #92] ; (8004424 ) - 80043c8: 4293 cmp r3, r2 - 80043ca: d004 beq.n 80043d6 - 80043cc: 687b ldr r3, [r7, #4] - 80043ce: 681b ldr r3, [r3, #0] - 80043d0: 4a15 ldr r2, [pc, #84] ; (8004428 ) - 80043d2: 4293 cmp r3, r2 - 80043d4: d10c bne.n 80043f0 - { - /* Reset the MSM Bit */ - tmpsmcr &= ~TIM_SMCR_MSM; - 80043d6: 68bb ldr r3, [r7, #8] - 80043d8: f023 0380 bic.w r3, r3, #128 ; 0x80 - 80043dc: 60bb str r3, [r7, #8] - /* Set master mode */ - tmpsmcr |= sMasterConfig->MasterSlaveMode; - 80043de: 683b ldr r3, [r7, #0] - 80043e0: 685b ldr r3, [r3, #4] - 80043e2: 68ba ldr r2, [r7, #8] - 80043e4: 4313 orrs r3, r2 - 80043e6: 60bb str r3, [r7, #8] - - /* Update TIMx SMCR */ - htim->Instance->SMCR = tmpsmcr; - 80043e8: 687b ldr r3, [r7, #4] - 80043ea: 681b ldr r3, [r3, #0] - 80043ec: 68ba ldr r2, [r7, #8] - 80043ee: 609a str r2, [r3, #8] - } - - /* Change the htim state */ - htim->State = HAL_TIM_STATE_READY; - 80043f0: 687b ldr r3, [r7, #4] - 80043f2: 2201 movs r2, #1 - 80043f4: f883 203d strb.w r2, [r3, #61] ; 0x3d - - __HAL_UNLOCK(htim); - 80043f8: 687b ldr r3, [r7, #4] - 80043fa: 2200 movs r2, #0 - 80043fc: f883 203c strb.w r2, [r3, #60] ; 0x3c - - return HAL_OK; - 8004400: 2300 movs r3, #0 -} - 8004402: 4618 mov r0, r3 - 8004404: 3714 adds r7, #20 - 8004406: 46bd mov sp, r7 - 8004408: f85d 7b04 ldr.w r7, [sp], #4 - 800440c: 4770 bx lr - 800440e: bf00 nop - 8004410: 40010000 .word 0x40010000 - 8004414: 40000400 .word 0x40000400 - 8004418: 40000800 .word 0x40000800 - 800441c: 40000c00 .word 0x40000c00 - 8004420: 40010400 .word 0x40010400 - 8004424: 40014000 .word 0x40014000 - 8004428: 40001800 .word 0x40001800 - -0800442c : - * @brief Hall commutation changed callback in non-blocking mode - * @param htim TIM handle - * @retval None - */ -__weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim) -{ - 800442c: b480 push {r7} - 800442e: b083 sub sp, #12 - 8004430: af00 add r7, sp, #0 - 8004432: 6078 str r0, [r7, #4] - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIMEx_CommutCallback could be implemented in the user file - */ -} - 8004434: bf00 nop - 8004436: 370c adds r7, #12 - 8004438: 46bd mov sp, r7 - 800443a: f85d 7b04 ldr.w r7, [sp], #4 - 800443e: 4770 bx lr - -08004440 : - * @brief Hall Break detection callback in non-blocking mode - * @param htim TIM handle - * @retval None - */ -__weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim) -{ - 8004440: b480 push {r7} - 8004442: b083 sub sp, #12 - 8004444: af00 add r7, sp, #0 - 8004446: 6078 str r0, [r7, #4] - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIMEx_BreakCallback could be implemented in the user file - */ -} - 8004448: bf00 nop - 800444a: 370c adds r7, #12 - 800444c: 46bd mov sp, r7 - 800444e: f85d 7b04 ldr.w r7, [sp], #4 - 8004452: 4770 bx lr - -08004454 : - * @param Init Pointer to NORSRAM Initialization structure - * @retval HAL status - */ -HAL_StatusTypeDef FMC_NORSRAM_Init(FMC_NORSRAM_TypeDef *Device, - FMC_NORSRAM_InitTypeDef *Init) -{ - 8004454: b480 push {r7} - 8004456: b087 sub sp, #28 - 8004458: af00 add r7, sp, #0 - 800445a: 6078 str r0, [r7, #4] - 800445c: 6039 str r1, [r7, #0] - assert_param(IS_FMC_WRITE_FIFO(Init->WriteFifo)); -#endif /* FMC_BCR1_WFDIS */ - assert_param(IS_FMC_PAGESIZE(Init->PageSize)); - - /* Disable NORSRAM Device */ - __FMC_NORSRAM_DISABLE(Device, Init->NSBank); - 800445e: 683b ldr r3, [r7, #0] - 8004460: 681a ldr r2, [r3, #0] - 8004462: 687b ldr r3, [r7, #4] - 8004464: f853 3022 ldr.w r3, [r3, r2, lsl #2] - 8004468: 683a ldr r2, [r7, #0] - 800446a: 6812 ldr r2, [r2, #0] - 800446c: f023 0101 bic.w r1, r3, #1 - 8004470: 687b ldr r3, [r7, #4] - 8004472: f843 1022 str.w r1, [r3, r2, lsl #2] - - /* Set NORSRAM device control parameters */ - if (Init->MemoryType == FMC_MEMORY_TYPE_NOR) - 8004476: 683b ldr r3, [r7, #0] - 8004478: 689b ldr r3, [r3, #8] - 800447a: 2b08 cmp r3, #8 - 800447c: d102 bne.n 8004484 - { - flashaccess = FMC_NORSRAM_FLASH_ACCESS_ENABLE; - 800447e: 2340 movs r3, #64 ; 0x40 - 8004480: 617b str r3, [r7, #20] - 8004482: e001 b.n 8004488 - } - else - { - flashaccess = FMC_NORSRAM_FLASH_ACCESS_DISABLE; - 8004484: 2300 movs r3, #0 - 8004486: 617b str r3, [r7, #20] - } - - btcr_reg = (flashaccess | \ - Init->DataAddressMux | \ - 8004488: 683b ldr r3, [r7, #0] - 800448a: 685a ldr r2, [r3, #4] - btcr_reg = (flashaccess | \ - 800448c: 697b ldr r3, [r7, #20] - 800448e: 431a orrs r2, r3 - Init->MemoryType | \ - 8004490: 683b ldr r3, [r7, #0] - 8004492: 689b ldr r3, [r3, #8] - Init->DataAddressMux | \ - 8004494: 431a orrs r2, r3 - Init->MemoryDataWidth | \ - 8004496: 683b ldr r3, [r7, #0] - 8004498: 68db ldr r3, [r3, #12] - Init->MemoryType | \ - 800449a: 431a orrs r2, r3 - Init->BurstAccessMode | \ - 800449c: 683b ldr r3, [r7, #0] - 800449e: 691b ldr r3, [r3, #16] - Init->MemoryDataWidth | \ - 80044a0: 431a orrs r2, r3 - Init->WaitSignalPolarity | \ - 80044a2: 683b ldr r3, [r7, #0] - 80044a4: 695b ldr r3, [r3, #20] - Init->BurstAccessMode | \ - 80044a6: 431a orrs r2, r3 - Init->WaitSignalActive | \ - 80044a8: 683b ldr r3, [r7, #0] - 80044aa: 69db ldr r3, [r3, #28] - Init->WaitSignalPolarity | \ - 80044ac: 431a orrs r2, r3 - Init->WriteOperation | \ - 80044ae: 683b ldr r3, [r7, #0] - 80044b0: 6a1b ldr r3, [r3, #32] - Init->WaitSignalActive | \ - 80044b2: 431a orrs r2, r3 - Init->WaitSignal | \ - 80044b4: 683b ldr r3, [r7, #0] - 80044b6: 6a5b ldr r3, [r3, #36] ; 0x24 - Init->WriteOperation | \ - 80044b8: 431a orrs r2, r3 - Init->ExtendedMode | \ - 80044ba: 683b ldr r3, [r7, #0] - 80044bc: 6a9b ldr r3, [r3, #40] ; 0x28 - Init->WaitSignal | \ - 80044be: 431a orrs r2, r3 - Init->AsynchronousWait | \ - 80044c0: 683b ldr r3, [r7, #0] - 80044c2: 6adb ldr r3, [r3, #44] ; 0x2c - Init->ExtendedMode | \ - 80044c4: 431a orrs r2, r3 - Init->WriteBurst); - 80044c6: 683b ldr r3, [r7, #0] - 80044c8: 6b1b ldr r3, [r3, #48] ; 0x30 - btcr_reg = (flashaccess | \ - 80044ca: 4313 orrs r3, r2 - 80044cc: 613b str r3, [r7, #16] - -#if defined(FMC_BCR1_WRAPMOD) - btcr_reg |= Init->WrapMode; - 80044ce: 683b ldr r3, [r7, #0] - 80044d0: 699b ldr r3, [r3, #24] - 80044d2: 693a ldr r2, [r7, #16] - 80044d4: 4313 orrs r3, r2 - 80044d6: 613b str r3, [r7, #16] -#endif /* FMC_BCR1_WRAPMOD */ -#if defined(FMC_BCR1_CCLKEN) - btcr_reg |= Init->ContinuousClock; - 80044d8: 683b ldr r3, [r7, #0] - 80044da: 6b5b ldr r3, [r3, #52] ; 0x34 - 80044dc: 693a ldr r2, [r7, #16] - 80044de: 4313 orrs r3, r2 - 80044e0: 613b str r3, [r7, #16] -#endif /* FMC_BCR1_CCLKEN */ -#if defined(FMC_BCR1_WFDIS) - btcr_reg |= Init->WriteFifo; -#endif /* FMC_BCR1_WFDIS */ - btcr_reg |= Init->PageSize; - 80044e2: 683b ldr r3, [r7, #0] - 80044e4: 6bdb ldr r3, [r3, #60] ; 0x3c - 80044e6: 693a ldr r2, [r7, #16] - 80044e8: 4313 orrs r3, r2 - 80044ea: 613b str r3, [r7, #16] - - mask = (FMC_BCR1_MBKEN | - 80044ec: 4b1b ldr r3, [pc, #108] ; (800455c ) - 80044ee: 60fb str r3, [r7, #12] - FMC_BCR1_EXTMOD | - FMC_BCR1_ASYNCWAIT | - FMC_BCR1_CBURSTRW); - -#if defined(FMC_BCR1_WRAPMOD) - mask |= FMC_BCR1_WRAPMOD; - 80044f0: 68fb ldr r3, [r7, #12] - 80044f2: f443 6380 orr.w r3, r3, #1024 ; 0x400 - 80044f6: 60fb str r3, [r7, #12] -#endif /* FMC_BCR1_WRAPMOD */ -#if defined(FMC_BCR1_CCLKEN) - mask |= FMC_BCR1_CCLKEN; - 80044f8: 68fb ldr r3, [r7, #12] - 80044fa: f443 1380 orr.w r3, r3, #1048576 ; 0x100000 - 80044fe: 60fb str r3, [r7, #12] -#endif -#if defined(FMC_BCR1_WFDIS) - mask |= FMC_BCR1_WFDIS; -#endif /* FMC_BCR1_WFDIS */ - mask |= FMC_BCR1_CPSIZE; - 8004500: 68fb ldr r3, [r7, #12] - 8004502: f443 23e0 orr.w r3, r3, #458752 ; 0x70000 - 8004506: 60fb str r3, [r7, #12] - - MODIFY_REG(Device->BTCR[Init->NSBank], mask, btcr_reg); - 8004508: 683b ldr r3, [r7, #0] - 800450a: 681a ldr r2, [r3, #0] - 800450c: 687b ldr r3, [r7, #4] - 800450e: f853 2022 ldr.w r2, [r3, r2, lsl #2] - 8004512: 68fb ldr r3, [r7, #12] - 8004514: 43db mvns r3, r3 - 8004516: ea02 0103 and.w r1, r2, r3 - 800451a: 683b ldr r3, [r7, #0] - 800451c: 681a ldr r2, [r3, #0] - 800451e: 693b ldr r3, [r7, #16] - 8004520: 4319 orrs r1, r3 - 8004522: 687b ldr r3, [r7, #4] - 8004524: f843 1022 str.w r1, [r3, r2, lsl #2] - -#if defined(FMC_BCR1_CCLKEN) - /* Configure synchronous mode when Continuous clock is enabled for bank2..4 */ - if ((Init->ContinuousClock == FMC_CONTINUOUS_CLOCK_SYNC_ASYNC) && (Init->NSBank != FMC_NORSRAM_BANK1)) - 8004528: 683b ldr r3, [r7, #0] - 800452a: 6b5b ldr r3, [r3, #52] ; 0x34 - 800452c: f5b3 1f80 cmp.w r3, #1048576 ; 0x100000 - 8004530: d10c bne.n 800454c - 8004532: 683b ldr r3, [r7, #0] - 8004534: 681b ldr r3, [r3, #0] - 8004536: 2b00 cmp r3, #0 - 8004538: d008 beq.n 800454c - { - MODIFY_REG(Device->BTCR[FMC_NORSRAM_BANK1], FMC_BCR1_CCLKEN, Init->ContinuousClock); - 800453a: 687b ldr r3, [r7, #4] - 800453c: 681b ldr r3, [r3, #0] - 800453e: f423 1280 bic.w r2, r3, #1048576 ; 0x100000 - 8004542: 683b ldr r3, [r7, #0] - 8004544: 6b5b ldr r3, [r3, #52] ; 0x34 - 8004546: 431a orrs r2, r3 - 8004548: 687b ldr r3, [r7, #4] - 800454a: 601a str r2, [r3, #0] - /* Configure Write FIFO mode when Write Fifo is enabled for bank2..4 */ - SET_BIT(Device->BTCR[FMC_NORSRAM_BANK1], (uint32_t)(Init->WriteFifo)); - } -#endif /* FMC_BCR1_WFDIS */ - - return HAL_OK; - 800454c: 2300 movs r3, #0 -} - 800454e: 4618 mov r0, r3 - 8004550: 371c adds r7, #28 - 8004552: 46bd mov sp, r7 - 8004554: f85d 7b04 ldr.w r7, [sp], #4 - 8004558: 4770 bx lr - 800455a: bf00 nop - 800455c: 0008fb7f .word 0x0008fb7f - -08004560 : - * @param Bank NORSRAM bank number - * @retval HAL status - */ -HAL_StatusTypeDef FMC_NORSRAM_Timing_Init(FMC_NORSRAM_TypeDef *Device, - FMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank) -{ - 8004560: b480 push {r7} - 8004562: b087 sub sp, #28 - 8004564: af00 add r7, sp, #0 - 8004566: 60f8 str r0, [r7, #12] - 8004568: 60b9 str r1, [r7, #8] - 800456a: 607a str r2, [r7, #4] - assert_param(IS_FMC_DATA_LATENCY(Timing->DataLatency)); - assert_param(IS_FMC_ACCESS_MODE(Timing->AccessMode)); - assert_param(IS_FMC_NORSRAM_BANK(Bank)); - - /* Set FMC_NORSRAM device timing parameters */ - MODIFY_REG(Device->BTCR[Bank + 1U], BTR_CLEAR_MASK, (Timing->AddressSetupTime | - 800456c: 687b ldr r3, [r7, #4] - 800456e: 1c5a adds r2, r3, #1 - 8004570: 68fb ldr r3, [r7, #12] - 8004572: f853 3022 ldr.w r3, [r3, r2, lsl #2] - 8004576: f003 4140 and.w r1, r3, #3221225472 ; 0xc0000000 - 800457a: 68bb ldr r3, [r7, #8] - 800457c: 681a ldr r2, [r3, #0] - 800457e: 68bb ldr r3, [r7, #8] - 8004580: 685b ldr r3, [r3, #4] - 8004582: 011b lsls r3, r3, #4 - 8004584: 431a orrs r2, r3 - 8004586: 68bb ldr r3, [r7, #8] - 8004588: 689b ldr r3, [r3, #8] - 800458a: 021b lsls r3, r3, #8 - 800458c: 431a orrs r2, r3 - 800458e: 68bb ldr r3, [r7, #8] - 8004590: 68db ldr r3, [r3, #12] - 8004592: 041b lsls r3, r3, #16 - 8004594: 431a orrs r2, r3 - 8004596: 68bb ldr r3, [r7, #8] - 8004598: 691b ldr r3, [r3, #16] - 800459a: 3b01 subs r3, #1 - 800459c: 051b lsls r3, r3, #20 - 800459e: 431a orrs r2, r3 - 80045a0: 68bb ldr r3, [r7, #8] - 80045a2: 695b ldr r3, [r3, #20] - 80045a4: 3b02 subs r3, #2 - 80045a6: 061b lsls r3, r3, #24 - 80045a8: 431a orrs r2, r3 - 80045aa: 68bb ldr r3, [r7, #8] - 80045ac: 699b ldr r3, [r3, #24] - 80045ae: 4313 orrs r3, r2 - 80045b0: 687a ldr r2, [r7, #4] - 80045b2: 3201 adds r2, #1 - 80045b4: 4319 orrs r1, r3 - 80045b6: 68fb ldr r3, [r7, #12] - 80045b8: f843 1022 str.w r1, [r3, r2, lsl #2] - (((Timing->DataLatency) - 2U) << FMC_BTR1_DATLAT_Pos) | - (Timing->AccessMode))); - -#if defined(FMC_BCR1_CCLKEN) - /* Configure Clock division value (in NORSRAM bank 1) when continuous clock is enabled */ - if (HAL_IS_BIT_SET(Device->BTCR[FMC_NORSRAM_BANK1], FMC_BCR1_CCLKEN)) - 80045bc: 68fb ldr r3, [r7, #12] - 80045be: 681b ldr r3, [r3, #0] - 80045c0: f403 1380 and.w r3, r3, #1048576 ; 0x100000 - 80045c4: f5b3 1f80 cmp.w r3, #1048576 ; 0x100000 - 80045c8: d113 bne.n 80045f2 - { - tmpr = (uint32_t)(Device->BTCR[FMC_NORSRAM_BANK1 + 1U] & ~((0x0FU) << FMC_BTR1_CLKDIV_Pos)); - 80045ca: 68fb ldr r3, [r7, #12] - 80045cc: 685b ldr r3, [r3, #4] - 80045ce: f423 0370 bic.w r3, r3, #15728640 ; 0xf00000 - 80045d2: 617b str r3, [r7, #20] - tmpr |= (uint32_t)(((Timing->CLKDivision) - 1U) << FMC_BTR1_CLKDIV_Pos); - 80045d4: 68bb ldr r3, [r7, #8] - 80045d6: 691b ldr r3, [r3, #16] - 80045d8: 3b01 subs r3, #1 - 80045da: 051b lsls r3, r3, #20 - 80045dc: 697a ldr r2, [r7, #20] - 80045de: 4313 orrs r3, r2 - 80045e0: 617b str r3, [r7, #20] - MODIFY_REG(Device->BTCR[FMC_NORSRAM_BANK1 + 1U], FMC_BTR1_CLKDIV, tmpr); - 80045e2: 68fb ldr r3, [r7, #12] - 80045e4: 685b ldr r3, [r3, #4] - 80045e6: f423 0270 bic.w r2, r3, #15728640 ; 0xf00000 - 80045ea: 697b ldr r3, [r7, #20] - 80045ec: 431a orrs r2, r3 - 80045ee: 68fb ldr r3, [r7, #12] - 80045f0: 605a str r2, [r3, #4] - } - -#endif - return HAL_OK; - 80045f2: 2300 movs r3, #0 -} - 80045f4: 4618 mov r0, r3 - 80045f6: 371c adds r7, #28 - 80045f8: 46bd mov sp, r7 - 80045fa: f85d 7b04 ldr.w r7, [sp], #4 - 80045fe: 4770 bx lr - -08004600 : - * @retval HAL status - */ -HAL_StatusTypeDef FMC_NORSRAM_Extended_Timing_Init(FMC_NORSRAM_EXTENDED_TypeDef *Device, - FMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank, - uint32_t ExtendedMode) -{ - 8004600: b480 push {r7} - 8004602: b085 sub sp, #20 - 8004604: af00 add r7, sp, #0 - 8004606: 60f8 str r0, [r7, #12] - 8004608: 60b9 str r1, [r7, #8] - 800460a: 607a str r2, [r7, #4] - 800460c: 603b str r3, [r7, #0] - /* Check the parameters */ - assert_param(IS_FMC_EXTENDED_MODE(ExtendedMode)); - - /* Set NORSRAM device timing register for write configuration, if extended mode is used */ - if (ExtendedMode == FMC_EXTENDED_MODE_ENABLE) - 800460e: 683b ldr r3, [r7, #0] - 8004610: f5b3 4f80 cmp.w r3, #16384 ; 0x4000 - 8004614: d11d bne.n 8004652 - assert_param(IS_FMC_TURNAROUND_TIME(Timing->BusTurnAroundDuration)); - assert_param(IS_FMC_ACCESS_MODE(Timing->AccessMode)); - assert_param(IS_FMC_NORSRAM_BANK(Bank)); - - /* Set NORSRAM device timing register for write configuration, if extended mode is used */ - MODIFY_REG(Device->BWTR[Bank], BWTR_CLEAR_MASK, (Timing->AddressSetupTime | - 8004616: 68fb ldr r3, [r7, #12] - 8004618: 687a ldr r2, [r7, #4] - 800461a: f853 2022 ldr.w r2, [r3, r2, lsl #2] - 800461e: 4b13 ldr r3, [pc, #76] ; (800466c ) - 8004620: 4013 ands r3, r2 - 8004622: 68ba ldr r2, [r7, #8] - 8004624: 6811 ldr r1, [r2, #0] - 8004626: 68ba ldr r2, [r7, #8] - 8004628: 6852 ldr r2, [r2, #4] - 800462a: 0112 lsls r2, r2, #4 - 800462c: 4311 orrs r1, r2 - 800462e: 68ba ldr r2, [r7, #8] - 8004630: 6892 ldr r2, [r2, #8] - 8004632: 0212 lsls r2, r2, #8 - 8004634: 4311 orrs r1, r2 - 8004636: 68ba ldr r2, [r7, #8] - 8004638: 6992 ldr r2, [r2, #24] - 800463a: 4311 orrs r1, r2 - 800463c: 68ba ldr r2, [r7, #8] - 800463e: 68d2 ldr r2, [r2, #12] - 8004640: 0412 lsls r2, r2, #16 - 8004642: 430a orrs r2, r1 - 8004644: ea43 0102 orr.w r1, r3, r2 - 8004648: 68fb ldr r3, [r7, #12] - 800464a: 687a ldr r2, [r7, #4] - 800464c: f843 1022 str.w r1, [r3, r2, lsl #2] - 8004650: e005 b.n 800465e - Timing->AccessMode | - ((Timing->BusTurnAroundDuration) << FMC_BWTR1_BUSTURN_Pos))); - } - else - { - Device->BWTR[Bank] = 0x0FFFFFFFU; - 8004652: 68fb ldr r3, [r7, #12] - 8004654: 687a ldr r2, [r7, #4] - 8004656: f06f 4170 mvn.w r1, #4026531840 ; 0xf0000000 - 800465a: f843 1022 str.w r1, [r3, r2, lsl #2] - } - - return HAL_OK; - 800465e: 2300 movs r3, #0 -} - 8004660: 4618 mov r0, r3 - 8004662: 3714 adds r7, #20 - 8004664: 46bd mov sp, r7 - 8004666: f85d 7b04 ldr.w r7, [sp], #4 - 800466a: 4770 bx lr - 800466c: cff00000 .word 0xcff00000 - -08004670 : - -/** - * LwIP initialization function - */ -void MX_LWIP_Init(void) -{ - 8004670: b580 push {r7, lr} - 8004672: b084 sub sp, #16 - 8004674: af04 add r7, sp, #16 - /* Initilialize the LwIP stack without RTOS */ - lwip_init(); - 8004676: f000 fc63 bl 8004f40 - - /* IP addresses initialization with DHCP (IPv4) */ - ipaddr.addr = ipaddr_addr("10.1.1.69"); - 800467a: 481d ldr r0, [pc, #116] ; (80046f0 ) - 800467c: f00b fc5d bl 800ff3a - 8004680: 4603 mov r3, r0 - 8004682: 4a1c ldr r2, [pc, #112] ; (80046f4 ) - 8004684: 6013 str r3, [r2, #0] - netmask.addr = ipaddr_addr("255.255.255.0"); - 8004686: 481c ldr r0, [pc, #112] ; (80046f8 ) - 8004688: f00b fc57 bl 800ff3a - 800468c: 4603 mov r3, r0 - 800468e: 4a1b ldr r2, [pc, #108] ; (80046fc ) - 8004690: 6013 str r3, [r2, #0] - gw.addr = ipaddr_addr("10.1.1.1"); - 8004692: 481b ldr r0, [pc, #108] ; (8004700 ) - 8004694: f00b fc51 bl 800ff3a - 8004698: 4603 mov r3, r0 - 800469a: 4a1a ldr r2, [pc, #104] ; (8004704 ) - 800469c: 6013 str r3, [r2, #0] - - /* add the network interface (IPv4/IPv6) without RTOS */ - netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, ðernet_input); - 800469e: 4b1a ldr r3, [pc, #104] ; (8004708 ) - 80046a0: 9302 str r3, [sp, #8] - 80046a2: 4b1a ldr r3, [pc, #104] ; (800470c ) - 80046a4: 9301 str r3, [sp, #4] - 80046a6: 2300 movs r3, #0 - 80046a8: 9300 str r3, [sp, #0] - 80046aa: 4b16 ldr r3, [pc, #88] ; (8004704 ) - 80046ac: 4a13 ldr r2, [pc, #76] ; (80046fc ) - 80046ae: 4911 ldr r1, [pc, #68] ; (80046f4 ) - 80046b0: 4817 ldr r0, [pc, #92] ; (8004710 ) - 80046b2: f001 f931 bl 8005918 - - /* Registers the default network interface */ - netif_set_default(&gnetif); - 80046b6: 4816 ldr r0, [pc, #88] ; (8004710 ) - 80046b8: f001 fae8 bl 8005c8c - - if (netif_is_link_up(&gnetif)) - 80046bc: 4b14 ldr r3, [pc, #80] ; (8004710 ) - 80046be: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 80046c2: 089b lsrs r3, r3, #2 - 80046c4: f003 0301 and.w r3, r3, #1 - 80046c8: b2db uxtb r3, r3 - 80046ca: 2b00 cmp r3, #0 - 80046cc: d003 beq.n 80046d6 - { - /* When the netif is fully configured this function must be called */ - netif_set_up(&gnetif); - 80046ce: 4810 ldr r0, [pc, #64] ; (8004710 ) - 80046d0: f001 faec bl 8005cac - 80046d4: e002 b.n 80046dc - } - else - { - /* When the netif link is down this function must be called */ - netif_set_down(&gnetif); - 80046d6: 480e ldr r0, [pc, #56] ; (8004710 ) - 80046d8: f001 fb54 bl 8005d84 - } - - /* Set the link callback function, this function is called on change of link status*/ - netif_set_link_callback(&gnetif, ethernet_link_status_updated); - 80046dc: 490d ldr r1, [pc, #52] ; (8004714 ) - 80046de: 480c ldr r0, [pc, #48] ; (8004710 ) - 80046e0: f001 fbea bl 8005eb8 - - /* Create the Ethernet link handler thread */ - - /* Start DHCP negotiation for a network interface (IPv4) */ - dhcp_start(&gnetif); - 80046e4: 480a ldr r0, [pc, #40] ; (8004710 ) - 80046e6: f008 fd3f bl 800d168 - -/* USER CODE BEGIN 3 */ - -/* USER CODE END 3 */ -} - 80046ea: bf00 nop - 80046ec: 46bd mov sp, r7 - 80046ee: bd80 pop {r7, pc} - 80046f0: 08015bb8 .word 0x08015bb8 - 80046f4: 20001864 .word 0x20001864 - 80046f8: 08015bc4 .word 0x08015bc4 - 80046fc: 20001868 .word 0x20001868 - 8004700: 08015bd4 .word 0x08015bd4 - 8004704: 2000186c .word 0x2000186c - 8004708: 08010e35 .word 0x08010e35 - 800470c: 08004a25 .word 0x08004a25 - 8004710: 2000182c .word 0x2000182c - 8004714: 08004769 .word 0x08004769 - -08004718 : - * @brief Ethernet Link periodic check - * @param netif - * @retval None - */ -static void Ethernet_Link_Periodic_Handle(struct netif *netif) -{ - 8004718: b580 push {r7, lr} - 800471a: b082 sub sp, #8 - 800471c: af00 add r7, sp, #0 - 800471e: 6078 str r0, [r7, #4] -/* USER CODE BEGIN 4_4_1 */ -/* USER CODE END 4_4_1 */ - - /* Ethernet Link every 100ms */ - if (HAL_GetTick() - EthernetLinkTimer >= 100) - 8004720: f7fd f996 bl 8001a50 - 8004724: 4602 mov r2, r0 - 8004726: 4b08 ldr r3, [pc, #32] ; (8004748 ) - 8004728: 681b ldr r3, [r3, #0] - 800472a: 1ad3 subs r3, r2, r3 - 800472c: 2b63 cmp r3, #99 ; 0x63 - 800472e: d907 bls.n 8004740 - { - EthernetLinkTimer = HAL_GetTick(); - 8004730: f7fd f98e bl 8001a50 - 8004734: 4603 mov r3, r0 - 8004736: 4a04 ldr r2, [pc, #16] ; (8004748 ) - 8004738: 6013 str r3, [r2, #0] - ethernet_link_check_state(netif); - 800473a: 6878 ldr r0, [r7, #4] - 800473c: f000 fad6 bl 8004cec - } -/* USER CODE BEGIN 4_4 */ -/* USER CODE END 4_4 */ -} - 8004740: bf00 nop - 8004742: 3708 adds r7, #8 - 8004744: 46bd mov sp, r7 - 8004746: bd80 pop {r7, pc} - 8004748: 20001828 .word 0x20001828 - -0800474c : - * Send it to the lwIP stack for handling - * Handle timeouts if LWIP_TIMERS is set and without RTOS - * Handle the llink status if LWIP_NETIF_LINK_CALLBACK is set and without RTOS - */ -void MX_LWIP_Process(void) -{ - 800474c: b580 push {r7, lr} - 800474e: af00 add r7, sp, #0 -/* USER CODE BEGIN 4_1 */ -/* USER CODE END 4_1 */ - ethernetif_input(&gnetif); - 8004750: 4804 ldr r0, [pc, #16] ; (8004764 ) - 8004752: f000 f947 bl 80049e4 - -/* USER CODE BEGIN 4_2 */ -/* USER CODE END 4_2 */ - /* Handle timeouts */ - sys_check_timeouts(); - 8004756: f007 fc31 bl 800bfbc - - Ethernet_Link_Periodic_Handle(&gnetif); - 800475a: 4802 ldr r0, [pc, #8] ; (8004764 ) - 800475c: f7ff ffdc bl 8004718 - -/* USER CODE BEGIN 4_3 */ -/* USER CODE END 4_3 */ -} - 8004760: bf00 nop - 8004762: bd80 pop {r7, pc} - 8004764: 2000182c .word 0x2000182c - -08004768 : - * @brief Notify the User about the network interface config status - * @param netif: the network interface - * @retval None - */ -static void ethernet_link_status_updated(struct netif *netif) -{ - 8004768: b480 push {r7} - 800476a: b083 sub sp, #12 - 800476c: af00 add r7, sp, #0 - 800476e: 6078 str r0, [r7, #4] - else /* netif is down */ - { -/* USER CODE BEGIN 6 */ -/* USER CODE END 6 */ - } -} - 8004770: bf00 nop - 8004772: 370c adds r7, #12 - 8004774: 46bd mov sp, r7 - 8004776: f85d 7b04 ldr.w r7, [sp], #4 - 800477a: 4770 bx lr - -0800477c : - * - * @param netif the already initialized lwip network interface structure - * for this ethernetif - */ -static void low_level_init(struct netif *netif) -{ - 800477c: b580 push {r7, lr} - 800477e: b084 sub sp, #16 - 8004780: af00 add r7, sp, #0 - 8004782: 6078 str r0, [r7, #4] - HAL_StatusTypeDef hal_eth_init_status = HAL_OK; - 8004784: 2300 movs r3, #0 - 8004786: 73fb strb r3, [r7, #15] - /* Start ETH HAL Init */ - - uint8_t MACAddr[6] ; - heth.Instance = ETH; - 8004788: 4b40 ldr r3, [pc, #256] ; (800488c ) - 800478a: 4a41 ldr r2, [pc, #260] ; (8004890 ) - 800478c: 601a str r2, [r3, #0] - MACAddr[0] = 0x00; - 800478e: 2300 movs r3, #0 - 8004790: 723b strb r3, [r7, #8] - MACAddr[1] = 0x80; - 8004792: 2380 movs r3, #128 ; 0x80 - 8004794: 727b strb r3, [r7, #9] - MACAddr[2] = 0xE1; - 8004796: 23e1 movs r3, #225 ; 0xe1 - 8004798: 72bb strb r3, [r7, #10] - MACAddr[3] = 0x00; - 800479a: 2300 movs r3, #0 - 800479c: 72fb strb r3, [r7, #11] - MACAddr[4] = 0x00; - 800479e: 2300 movs r3, #0 - 80047a0: 733b strb r3, [r7, #12] - MACAddr[5] = 0x00; - 80047a2: 2300 movs r3, #0 - 80047a4: 737b strb r3, [r7, #13] - heth.Init.MACAddr = &MACAddr[0]; - 80047a6: 4a39 ldr r2, [pc, #228] ; (800488c ) - 80047a8: f107 0308 add.w r3, r7, #8 - 80047ac: 6053 str r3, [r2, #4] - heth.Init.MediaInterface = HAL_ETH_RMII_MODE; - 80047ae: 4b37 ldr r3, [pc, #220] ; (800488c ) - 80047b0: f44f 0200 mov.w r2, #8388608 ; 0x800000 - 80047b4: 609a str r2, [r3, #8] - heth.Init.TxDesc = DMATxDscrTab; - 80047b6: 4b35 ldr r3, [pc, #212] ; (800488c ) - 80047b8: 4a36 ldr r2, [pc, #216] ; (8004894 ) - 80047ba: 60da str r2, [r3, #12] - heth.Init.RxDesc = DMARxDscrTab; - 80047bc: 4b33 ldr r3, [pc, #204] ; (800488c ) - 80047be: 4a36 ldr r2, [pc, #216] ; (8004898 ) - 80047c0: 611a str r2, [r3, #16] - heth.Init.RxBuffLen = 1536; - 80047c2: 4b32 ldr r3, [pc, #200] ; (800488c ) - 80047c4: f44f 62c0 mov.w r2, #1536 ; 0x600 - 80047c8: 615a str r2, [r3, #20] - - /* USER CODE BEGIN MACADDRESS */ - - /* USER CODE END MACADDRESS */ - - hal_eth_init_status = HAL_ETH_Init(&heth); - 80047ca: 4830 ldr r0, [pc, #192] ; (800488c ) - 80047cc: f7fd fa82 bl 8001cd4 - 80047d0: 4603 mov r3, r0 - 80047d2: 73fb strb r3, [r7, #15] - - memset(&TxConfig, 0 , sizeof(ETH_TxPacketConfig)); - 80047d4: 2238 movs r2, #56 ; 0x38 - 80047d6: 2100 movs r1, #0 - 80047d8: 4830 ldr r0, [pc, #192] ; (800489c ) - 80047da: f00c fc5d bl 8011098 - TxConfig.Attributes = ETH_TX_PACKETS_FEATURES_CSUM | ETH_TX_PACKETS_FEATURES_CRCPAD; - 80047de: 4b2f ldr r3, [pc, #188] ; (800489c ) - 80047e0: 2221 movs r2, #33 ; 0x21 - 80047e2: 601a str r2, [r3, #0] - TxConfig.ChecksumCtrl = ETH_CHECKSUM_IPHDR_PAYLOAD_INSERT_PHDR_CALC; - 80047e4: 4b2d ldr r3, [pc, #180] ; (800489c ) - 80047e6: f44f 0240 mov.w r2, #12582912 ; 0xc00000 - 80047ea: 615a str r2, [r3, #20] - TxConfig.CRCPadCtrl = ETH_CRC_PAD_INSERT; - 80047ec: 4b2b ldr r3, [pc, #172] ; (800489c ) - 80047ee: 2200 movs r2, #0 - 80047f0: 611a str r2, [r3, #16] - - /* End ETH HAL Init */ - - /* Initialize the RX POOL */ - LWIP_MEMPOOL_INIT(RX_POOL); - 80047f2: 482b ldr r0, [pc, #172] ; (80048a0 ) - 80047f4: f000 ff58 bl 80056a8 - -#if LWIP_ARP || LWIP_ETHERNET - - /* set MAC hardware address length */ - netif->hwaddr_len = ETH_HWADDR_LEN; - 80047f8: 687b ldr r3, [r7, #4] - 80047fa: 2206 movs r2, #6 - 80047fc: f883 2030 strb.w r2, [r3, #48] ; 0x30 - - /* set MAC hardware address */ - netif->hwaddr[0] = heth.Init.MACAddr[0]; - 8004800: 4b22 ldr r3, [pc, #136] ; (800488c ) - 8004802: 685b ldr r3, [r3, #4] - 8004804: 781a ldrb r2, [r3, #0] - 8004806: 687b ldr r3, [r7, #4] - 8004808: f883 202a strb.w r2, [r3, #42] ; 0x2a - netif->hwaddr[1] = heth.Init.MACAddr[1]; - 800480c: 4b1f ldr r3, [pc, #124] ; (800488c ) - 800480e: 685b ldr r3, [r3, #4] - 8004810: 785a ldrb r2, [r3, #1] - 8004812: 687b ldr r3, [r7, #4] - 8004814: f883 202b strb.w r2, [r3, #43] ; 0x2b - netif->hwaddr[2] = heth.Init.MACAddr[2]; - 8004818: 4b1c ldr r3, [pc, #112] ; (800488c ) - 800481a: 685b ldr r3, [r3, #4] - 800481c: 789a ldrb r2, [r3, #2] - 800481e: 687b ldr r3, [r7, #4] - 8004820: f883 202c strb.w r2, [r3, #44] ; 0x2c - netif->hwaddr[3] = heth.Init.MACAddr[3]; - 8004824: 4b19 ldr r3, [pc, #100] ; (800488c ) - 8004826: 685b ldr r3, [r3, #4] - 8004828: 78da ldrb r2, [r3, #3] - 800482a: 687b ldr r3, [r7, #4] - 800482c: f883 202d strb.w r2, [r3, #45] ; 0x2d - netif->hwaddr[4] = heth.Init.MACAddr[4]; - 8004830: 4b16 ldr r3, [pc, #88] ; (800488c ) - 8004832: 685b ldr r3, [r3, #4] - 8004834: 791a ldrb r2, [r3, #4] - 8004836: 687b ldr r3, [r7, #4] - 8004838: f883 202e strb.w r2, [r3, #46] ; 0x2e - netif->hwaddr[5] = heth.Init.MACAddr[5]; - 800483c: 4b13 ldr r3, [pc, #76] ; (800488c ) - 800483e: 685b ldr r3, [r3, #4] - 8004840: 795a ldrb r2, [r3, #5] - 8004842: 687b ldr r3, [r7, #4] - 8004844: f883 202f strb.w r2, [r3, #47] ; 0x2f - - /* maximum transfer unit */ - netif->mtu = ETH_MAX_PAYLOAD; - 8004848: 687b ldr r3, [r7, #4] - 800484a: f240 52dc movw r2, #1500 ; 0x5dc - 800484e: 851a strh r2, [r3, #40] ; 0x28 - - /* Accept broadcast address and ARP traffic */ - /* don't set NETIF_FLAG_ETHARP if this device is not an ethernet one */ - #if LWIP_ARP - netif->flags |= NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP; - 8004850: 687b ldr r3, [r7, #4] - 8004852: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8004856: f043 030a orr.w r3, r3, #10 - 800485a: b2da uxtb r2, r3 - 800485c: 687b ldr r3, [r7, #4] - 800485e: f883 2031 strb.w r2, [r3, #49] ; 0x31 - -/* USER CODE BEGIN PHY_PRE_CONFIG */ - -/* USER CODE END PHY_PRE_CONFIG */ - /* Set PHY IO functions */ - DP83848_RegisterBusIO(&DP83848, &DP83848_IOCtx); - 8004862: 4910 ldr r1, [pc, #64] ; (80048a4 ) - 8004864: 4810 ldr r0, [pc, #64] ; (80048a8 ) - 8004866: f7fc ff2c bl 80016c2 - - /* Initialize the DP83848 ETH PHY */ - DP83848_Init(&DP83848); - 800486a: 480f ldr r0, [pc, #60] ; (80048a8 ) - 800486c: f7fc ff5b bl 8001726 - - if (hal_eth_init_status == HAL_OK) - 8004870: 7bfb ldrb r3, [r7, #15] - 8004872: 2b00 cmp r3, #0 - 8004874: d103 bne.n 800487e - { - /* Get link state */ - ethernet_link_check_state(netif); - 8004876: 6878 ldr r0, [r7, #4] - 8004878: f000 fa38 bl 8004cec -#endif /* LWIP_ARP || LWIP_ETHERNET */ - -/* USER CODE BEGIN LOW_LEVEL_INIT */ - -/* USER CODE END LOW_LEVEL_INIT */ -} - 800487c: e001 b.n 8004882 - Error_Handler(); - 800487e: f7fc fddb bl 8001438 -} - 8004882: bf00 nop - 8004884: 3710 adds r7, #16 - 8004886: 46bd mov sp, r7 - 8004888: bd80 pop {r7, pc} - 800488a: bf00 nop - 800488c: 2000633c .word 0x2000633c - 8004890: 40028000 .word 0x40028000 - 8004894: 2000629c .word 0x2000629c - 8004898: 200061fc .word 0x200061fc - 800489c: 200063ec .word 0x200063ec - 80048a0: 080189e0 .word 0x080189e0 - 80048a4: 2000000c .word 0x2000000c - 80048a8: 20006424 .word 0x20006424 - -080048ac : - * to become available since the stack doesn't retry to send a packet - * dropped because of memory failure (except for the TCP timers). - */ - -static err_t low_level_output(struct netif *netif, struct pbuf *p) -{ - 80048ac: b580 push {r7, lr} - 80048ae: b092 sub sp, #72 ; 0x48 - 80048b0: af00 add r7, sp, #0 - 80048b2: 6078 str r0, [r7, #4] - 80048b4: 6039 str r1, [r7, #0] - uint32_t i = 0U; - 80048b6: 2300 movs r3, #0 - 80048b8: 647b str r3, [r7, #68] ; 0x44 - struct pbuf *q = NULL; - 80048ba: 2300 movs r3, #0 - 80048bc: 643b str r3, [r7, #64] ; 0x40 - err_t errval = ERR_OK; - 80048be: 2300 movs r3, #0 - 80048c0: f887 303f strb.w r3, [r7, #63] ; 0x3f - ETH_BufferTypeDef Txbuffer[ETH_TX_DESC_CNT] = {0}; - 80048c4: f107 030c add.w r3, r7, #12 - 80048c8: 2230 movs r2, #48 ; 0x30 - 80048ca: 2100 movs r1, #0 - 80048cc: 4618 mov r0, r3 - 80048ce: f00c fbe3 bl 8011098 - - memset(Txbuffer, 0 , ETH_TX_DESC_CNT*sizeof(ETH_BufferTypeDef)); - 80048d2: f107 030c add.w r3, r7, #12 - 80048d6: 2230 movs r2, #48 ; 0x30 - 80048d8: 2100 movs r1, #0 - 80048da: 4618 mov r0, r3 - 80048dc: f00c fbdc bl 8011098 - - for(q = p; q != NULL; q = q->next) - 80048e0: 683b ldr r3, [r7, #0] - 80048e2: 643b str r3, [r7, #64] ; 0x40 - 80048e4: e045 b.n 8004972 - { - if(i >= ETH_TX_DESC_CNT) - 80048e6: 6c7b ldr r3, [r7, #68] ; 0x44 - 80048e8: 2b03 cmp r3, #3 - 80048ea: d902 bls.n 80048f2 - return ERR_IF; - 80048ec: f06f 030b mvn.w r3, #11 - 80048f0: e055 b.n 800499e - - Txbuffer[i].buffer = q->payload; - 80048f2: 6c3b ldr r3, [r7, #64] ; 0x40 - 80048f4: 6859 ldr r1, [r3, #4] - 80048f6: 6c7a ldr r2, [r7, #68] ; 0x44 - 80048f8: 4613 mov r3, r2 - 80048fa: 005b lsls r3, r3, #1 - 80048fc: 4413 add r3, r2 - 80048fe: 009b lsls r3, r3, #2 - 8004900: 3348 adds r3, #72 ; 0x48 - 8004902: 443b add r3, r7 - 8004904: 3b3c subs r3, #60 ; 0x3c - 8004906: 6019 str r1, [r3, #0] - Txbuffer[i].len = q->len; - 8004908: 6c3b ldr r3, [r7, #64] ; 0x40 - 800490a: 895b ldrh r3, [r3, #10] - 800490c: 4619 mov r1, r3 - 800490e: 6c7a ldr r2, [r7, #68] ; 0x44 - 8004910: 4613 mov r3, r2 - 8004912: 005b lsls r3, r3, #1 - 8004914: 4413 add r3, r2 - 8004916: 009b lsls r3, r3, #2 - 8004918: 3348 adds r3, #72 ; 0x48 - 800491a: 443b add r3, r7 - 800491c: 3b38 subs r3, #56 ; 0x38 - 800491e: 6019 str r1, [r3, #0] - - if(i>0) - 8004920: 6c7b ldr r3, [r7, #68] ; 0x44 - 8004922: 2b00 cmp r3, #0 - 8004924: d011 beq.n 800494a - { - Txbuffer[i-1].next = &Txbuffer[i]; - 8004926: 6c7b ldr r3, [r7, #68] ; 0x44 - 8004928: 1e5a subs r2, r3, #1 - 800492a: f107 000c add.w r0, r7, #12 - 800492e: 6c79 ldr r1, [r7, #68] ; 0x44 - 8004930: 460b mov r3, r1 - 8004932: 005b lsls r3, r3, #1 - 8004934: 440b add r3, r1 - 8004936: 009b lsls r3, r3, #2 - 8004938: 18c1 adds r1, r0, r3 - 800493a: 4613 mov r3, r2 - 800493c: 005b lsls r3, r3, #1 - 800493e: 4413 add r3, r2 - 8004940: 009b lsls r3, r3, #2 - 8004942: 3348 adds r3, #72 ; 0x48 - 8004944: 443b add r3, r7 - 8004946: 3b34 subs r3, #52 ; 0x34 - 8004948: 6019 str r1, [r3, #0] - } - - if(q->next == NULL) - 800494a: 6c3b ldr r3, [r7, #64] ; 0x40 - 800494c: 681b ldr r3, [r3, #0] - 800494e: 2b00 cmp r3, #0 - 8004950: d109 bne.n 8004966 - { - Txbuffer[i].next = NULL; - 8004952: 6c7a ldr r2, [r7, #68] ; 0x44 - 8004954: 4613 mov r3, r2 - 8004956: 005b lsls r3, r3, #1 - 8004958: 4413 add r3, r2 - 800495a: 009b lsls r3, r3, #2 - 800495c: 3348 adds r3, #72 ; 0x48 - 800495e: 443b add r3, r7 - 8004960: 3b34 subs r3, #52 ; 0x34 - 8004962: 2200 movs r2, #0 - 8004964: 601a str r2, [r3, #0] - } - - i++; - 8004966: 6c7b ldr r3, [r7, #68] ; 0x44 - 8004968: 3301 adds r3, #1 - 800496a: 647b str r3, [r7, #68] ; 0x44 - for(q = p; q != NULL; q = q->next) - 800496c: 6c3b ldr r3, [r7, #64] ; 0x40 - 800496e: 681b ldr r3, [r3, #0] - 8004970: 643b str r3, [r7, #64] ; 0x40 - 8004972: 6c3b ldr r3, [r7, #64] ; 0x40 - 8004974: 2b00 cmp r3, #0 - 8004976: d1b6 bne.n 80048e6 - } - - TxConfig.Length = p->tot_len; - 8004978: 683b ldr r3, [r7, #0] - 800497a: 891b ldrh r3, [r3, #8] - 800497c: 461a mov r2, r3 - 800497e: 4b0a ldr r3, [pc, #40] ; (80049a8 ) - 8004980: 605a str r2, [r3, #4] - TxConfig.TxBuffer = Txbuffer; - 8004982: 4a09 ldr r2, [pc, #36] ; (80049a8 ) - 8004984: f107 030c add.w r3, r7, #12 - 8004988: 6093 str r3, [r2, #8] - TxConfig.pData = p; - 800498a: 4a07 ldr r2, [pc, #28] ; (80049a8 ) - 800498c: 683b ldr r3, [r7, #0] - 800498e: 6353 str r3, [r2, #52] ; 0x34 - - HAL_ETH_Transmit(&heth, &TxConfig, ETH_DMA_TRANSMIT_TIMEOUT); - 8004990: 2214 movs r2, #20 - 8004992: 4905 ldr r1, [pc, #20] ; (80049a8 ) - 8004994: 4805 ldr r0, [pc, #20] ; (80049ac ) - 8004996: f7fd fad3 bl 8001f40 - - return errval; - 800499a: f997 303f ldrsb.w r3, [r7, #63] ; 0x3f -} - 800499e: 4618 mov r0, r3 - 80049a0: 3748 adds r7, #72 ; 0x48 - 80049a2: 46bd mov sp, r7 - 80049a4: bd80 pop {r7, pc} - 80049a6: bf00 nop - 80049a8: 200063ec .word 0x200063ec - 80049ac: 2000633c .word 0x2000633c - -080049b0 : - * @param netif the lwip network interface structure for this ethernetif - * @return a pbuf filled with the received packet (including MAC header) - * NULL on memory error - */ -static struct pbuf * low_level_input(struct netif *netif) -{ - 80049b0: b580 push {r7, lr} - 80049b2: b084 sub sp, #16 - 80049b4: af00 add r7, sp, #0 - 80049b6: 6078 str r0, [r7, #4] - struct pbuf *p = NULL; - 80049b8: 2300 movs r3, #0 - 80049ba: 60fb str r3, [r7, #12] - - if(RxAllocStatus == RX_ALLOC_OK) - 80049bc: 4b07 ldr r3, [pc, #28] ; (80049dc ) - 80049be: 781b ldrb r3, [r3, #0] - 80049c0: 2b00 cmp r3, #0 - 80049c2: d105 bne.n 80049d0 - { - HAL_ETH_ReadData(&heth, (void **)&p); - 80049c4: f107 030c add.w r3, r7, #12 - 80049c8: 4619 mov r1, r3 - 80049ca: 4805 ldr r0, [pc, #20] ; (80049e0 ) - 80049cc: f7fd fb4c bl 8002068 - } - - return p; - 80049d0: 68fb ldr r3, [r7, #12] -} - 80049d2: 4618 mov r0, r3 - 80049d4: 3710 adds r7, #16 - 80049d6: 46bd mov sp, r7 - 80049d8: bd80 pop {r7, pc} - 80049da: bf00 nop - 80049dc: 200061f8 .word 0x200061f8 - 80049e0: 2000633c .word 0x2000633c - -080049e4 : - * the appropriate input function is called. - * - * @param netif the lwip network interface structure for this ethernetif - */ -void ethernetif_input(struct netif *netif) -{ - 80049e4: b580 push {r7, lr} - 80049e6: b084 sub sp, #16 - 80049e8: af00 add r7, sp, #0 - 80049ea: 6078 str r0, [r7, #4] - struct pbuf *p = NULL; - 80049ec: 2300 movs r3, #0 - 80049ee: 60fb str r3, [r7, #12] - - do - { - p = low_level_input( netif ); - 80049f0: 6878 ldr r0, [r7, #4] - 80049f2: f7ff ffdd bl 80049b0 - 80049f6: 60f8 str r0, [r7, #12] - if (p != NULL) - 80049f8: 68fb ldr r3, [r7, #12] - 80049fa: 2b00 cmp r3, #0 - 80049fc: d00a beq.n 8004a14 - { - if (netif->input( p, netif) != ERR_OK ) - 80049fe: 687b ldr r3, [r7, #4] - 8004a00: 691b ldr r3, [r3, #16] - 8004a02: 6879 ldr r1, [r7, #4] - 8004a04: 68f8 ldr r0, [r7, #12] - 8004a06: 4798 blx r3 - 8004a08: 4603 mov r3, r0 - 8004a0a: 2b00 cmp r3, #0 - 8004a0c: d002 beq.n 8004a14 - { - pbuf_free(p); - 8004a0e: 68f8 ldr r0, [r7, #12] - 8004a10: f001 fdd2 bl 80065b8 - } - } - } while(p!=NULL); - 8004a14: 68fb ldr r3, [r7, #12] - 8004a16: 2b00 cmp r3, #0 - 8004a18: d1ea bne.n 80049f0 -} - 8004a1a: bf00 nop - 8004a1c: bf00 nop - 8004a1e: 3710 adds r7, #16 - 8004a20: 46bd mov sp, r7 - 8004a22: bd80 pop {r7, pc} - -08004a24 : - * @return ERR_OK if the loopif is initialized - * ERR_MEM if private data couldn't be allocated - * any other err_t on error - */ -err_t ethernetif_init(struct netif *netif) -{ - 8004a24: b580 push {r7, lr} - 8004a26: b082 sub sp, #8 - 8004a28: af00 add r7, sp, #0 - 8004a2a: 6078 str r0, [r7, #4] - LWIP_ASSERT("netif != NULL", (netif != NULL)); - 8004a2c: 687b ldr r3, [r7, #4] - 8004a2e: 2b00 cmp r3, #0 - 8004a30: d106 bne.n 8004a40 - 8004a32: 4b0e ldr r3, [pc, #56] ; (8004a6c ) - 8004a34: f240 126b movw r2, #363 ; 0x16b - 8004a38: 490d ldr r1, [pc, #52] ; (8004a70 ) - 8004a3a: 480e ldr r0, [pc, #56] ; (8004a74 ) - 8004a3c: f00c fb34 bl 80110a8 - * The last argument should be replaced with your link speed, in units - * of bits per second. - */ - // MIB2_INIT_NETIF(netif, snmp_ifType_ethernet_csmacd, LINK_SPEED_OF_YOUR_NETIF_IN_BPS); - - netif->name[0] = IFNAME0; - 8004a40: 687b ldr r3, [r7, #4] - 8004a42: 2273 movs r2, #115 ; 0x73 - 8004a44: f883 2032 strb.w r2, [r3, #50] ; 0x32 - netif->name[1] = IFNAME1; - 8004a48: 687b ldr r3, [r7, #4] - 8004a4a: 2274 movs r2, #116 ; 0x74 - 8004a4c: f883 2033 strb.w r2, [r3, #51] ; 0x33 - * is available...) */ - -#if LWIP_IPV4 -#if LWIP_ARP || LWIP_ETHERNET -#if LWIP_ARP - netif->output = etharp_output; - 8004a50: 687b ldr r3, [r7, #4] - 8004a52: 4a09 ldr r2, [pc, #36] ; (8004a78 ) - 8004a54: 615a str r2, [r3, #20] - -#if LWIP_IPV6 - netif->output_ip6 = ethip6_output; -#endif /* LWIP_IPV6 */ - - netif->linkoutput = low_level_output; - 8004a56: 687b ldr r3, [r7, #4] - 8004a58: 4a08 ldr r2, [pc, #32] ; (8004a7c ) - 8004a5a: 619a str r2, [r3, #24] - - /* initialize the hardware */ - low_level_init(netif); - 8004a5c: 6878 ldr r0, [r7, #4] - 8004a5e: f7ff fe8d bl 800477c - - return ERR_OK; - 8004a62: 2300 movs r3, #0 -} - 8004a64: 4618 mov r0, r3 - 8004a66: 3708 adds r7, #8 - 8004a68: 46bd mov sp, r7 - 8004a6a: bd80 pop {r7, pc} - 8004a6c: 08015be0 .word 0x08015be0 - 8004a70: 08015bfc .word 0x08015bfc - 8004a74: 08015c0c .word 0x08015c0c - 8004a78: 0800f035 .word 0x0800f035 - 8004a7c: 080048ad .word 0x080048ad - -08004a80 : - * @brief Custom Rx pbuf free callback - * @param pbuf: pbuf to be freed - * @retval None - */ -void pbuf_free_custom(struct pbuf *p) -{ - 8004a80: b580 push {r7, lr} - 8004a82: b084 sub sp, #16 - 8004a84: af00 add r7, sp, #0 - 8004a86: 6078 str r0, [r7, #4] - struct pbuf_custom* custom_pbuf = (struct pbuf_custom*)p; - 8004a88: 687b ldr r3, [r7, #4] - 8004a8a: 60fb str r3, [r7, #12] - LWIP_MEMPOOL_FREE(RX_POOL, custom_pbuf); - 8004a8c: 68f9 ldr r1, [r7, #12] - 8004a8e: 4807 ldr r0, [pc, #28] ; (8004aac ) - 8004a90: f000 feec bl 800586c - - /* If the Rx Buffer Pool was exhausted, signal the ethernetif_input task to - * call HAL_ETH_GetRxDataBuffer to rebuild the Rx descriptors. */ - - if (RxAllocStatus == RX_ALLOC_ERROR) - 8004a94: 4b06 ldr r3, [pc, #24] ; (8004ab0 ) - 8004a96: 781b ldrb r3, [r3, #0] - 8004a98: 2b01 cmp r3, #1 - 8004a9a: d102 bne.n 8004aa2 - { - RxAllocStatus = RX_ALLOC_OK; - 8004a9c: 4b04 ldr r3, [pc, #16] ; (8004ab0 ) - 8004a9e: 2200 movs r2, #0 - 8004aa0: 701a strb r2, [r3, #0] - } -} - 8004aa2: bf00 nop - 8004aa4: 3710 adds r7, #16 - 8004aa6: 46bd mov sp, r7 - 8004aa8: bd80 pop {r7, pc} - 8004aaa: bf00 nop - 8004aac: 080189e0 .word 0x080189e0 - 8004ab0: 200061f8 .word 0x200061f8 - -08004ab4 : -* when LWIP_TIMERS == 1 and NO_SYS == 1 -* @param None -* @retval Current Time value -*/ -u32_t sys_now(void) -{ - 8004ab4: b580 push {r7, lr} - 8004ab6: af00 add r7, sp, #0 - return HAL_GetTick(); - 8004ab8: f7fc ffca bl 8001a50 - 8004abc: 4603 mov r3, r0 -} - 8004abe: 4618 mov r0, r3 - 8004ac0: bd80 pop {r7, pc} - ... - -08004ac4 : - * @param ethHandle: ETH handle - * @retval None - */ - -void HAL_ETH_MspInit(ETH_HandleTypeDef* ethHandle) -{ - 8004ac4: b580 push {r7, lr} - 8004ac6: b08e sub sp, #56 ; 0x38 - 8004ac8: af00 add r7, sp, #0 - 8004aca: 6078 str r0, [r7, #4] - GPIO_InitTypeDef GPIO_InitStruct = {0}; - 8004acc: f107 0324 add.w r3, r7, #36 ; 0x24 - 8004ad0: 2200 movs r2, #0 - 8004ad2: 601a str r2, [r3, #0] - 8004ad4: 605a str r2, [r3, #4] - 8004ad6: 609a str r2, [r3, #8] - 8004ad8: 60da str r2, [r3, #12] - 8004ada: 611a str r2, [r3, #16] - if(ethHandle->Instance==ETH) - 8004adc: 687b ldr r3, [r7, #4] - 8004ade: 681b ldr r3, [r3, #0] - 8004ae0: 4a55 ldr r2, [pc, #340] ; (8004c38 ) - 8004ae2: 4293 cmp r3, r2 - 8004ae4: f040 80a4 bne.w 8004c30 - { - /* USER CODE BEGIN ETH_MspInit 0 */ - - /* USER CODE END ETH_MspInit 0 */ - /* Enable Peripheral clock */ - __HAL_RCC_ETH_CLK_ENABLE(); - 8004ae8: 2300 movs r3, #0 - 8004aea: 623b str r3, [r7, #32] - 8004aec: 4b53 ldr r3, [pc, #332] ; (8004c3c ) - 8004aee: 6b1b ldr r3, [r3, #48] ; 0x30 - 8004af0: 4a52 ldr r2, [pc, #328] ; (8004c3c ) - 8004af2: f043 7300 orr.w r3, r3, #33554432 ; 0x2000000 - 8004af6: 6313 str r3, [r2, #48] ; 0x30 - 8004af8: 4b50 ldr r3, [pc, #320] ; (8004c3c ) - 8004afa: 6b1b ldr r3, [r3, #48] ; 0x30 - 8004afc: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 - 8004b00: 623b str r3, [r7, #32] - 8004b02: 6a3b ldr r3, [r7, #32] - 8004b04: 2300 movs r3, #0 - 8004b06: 61fb str r3, [r7, #28] - 8004b08: 4b4c ldr r3, [pc, #304] ; (8004c3c ) - 8004b0a: 6b1b ldr r3, [r3, #48] ; 0x30 - 8004b0c: 4a4b ldr r2, [pc, #300] ; (8004c3c ) - 8004b0e: f043 6380 orr.w r3, r3, #67108864 ; 0x4000000 - 8004b12: 6313 str r3, [r2, #48] ; 0x30 - 8004b14: 4b49 ldr r3, [pc, #292] ; (8004c3c ) - 8004b16: 6b1b ldr r3, [r3, #48] ; 0x30 - 8004b18: f003 6380 and.w r3, r3, #67108864 ; 0x4000000 - 8004b1c: 61fb str r3, [r7, #28] - 8004b1e: 69fb ldr r3, [r7, #28] - 8004b20: 2300 movs r3, #0 - 8004b22: 61bb str r3, [r7, #24] - 8004b24: 4b45 ldr r3, [pc, #276] ; (8004c3c ) - 8004b26: 6b1b ldr r3, [r3, #48] ; 0x30 - 8004b28: 4a44 ldr r2, [pc, #272] ; (8004c3c ) - 8004b2a: f043 6300 orr.w r3, r3, #134217728 ; 0x8000000 - 8004b2e: 6313 str r3, [r2, #48] ; 0x30 - 8004b30: 4b42 ldr r3, [pc, #264] ; (8004c3c ) - 8004b32: 6b1b ldr r3, [r3, #48] ; 0x30 - 8004b34: f003 6300 and.w r3, r3, #134217728 ; 0x8000000 - 8004b38: 61bb str r3, [r7, #24] - 8004b3a: 69bb ldr r3, [r7, #24] - - __HAL_RCC_GPIOC_CLK_ENABLE(); - 8004b3c: 2300 movs r3, #0 - 8004b3e: 617b str r3, [r7, #20] - 8004b40: 4b3e ldr r3, [pc, #248] ; (8004c3c ) - 8004b42: 6b1b ldr r3, [r3, #48] ; 0x30 - 8004b44: 4a3d ldr r2, [pc, #244] ; (8004c3c ) - 8004b46: f043 0304 orr.w r3, r3, #4 - 8004b4a: 6313 str r3, [r2, #48] ; 0x30 - 8004b4c: 4b3b ldr r3, [pc, #236] ; (8004c3c ) - 8004b4e: 6b1b ldr r3, [r3, #48] ; 0x30 - 8004b50: f003 0304 and.w r3, r3, #4 - 8004b54: 617b str r3, [r7, #20] - 8004b56: 697b ldr r3, [r7, #20] - __HAL_RCC_GPIOA_CLK_ENABLE(); - 8004b58: 2300 movs r3, #0 - 8004b5a: 613b str r3, [r7, #16] - 8004b5c: 4b37 ldr r3, [pc, #220] ; (8004c3c ) - 8004b5e: 6b1b ldr r3, [r3, #48] ; 0x30 - 8004b60: 4a36 ldr r2, [pc, #216] ; (8004c3c ) - 8004b62: f043 0301 orr.w r3, r3, #1 - 8004b66: 6313 str r3, [r2, #48] ; 0x30 - 8004b68: 4b34 ldr r3, [pc, #208] ; (8004c3c ) - 8004b6a: 6b1b ldr r3, [r3, #48] ; 0x30 - 8004b6c: f003 0301 and.w r3, r3, #1 - 8004b70: 613b str r3, [r7, #16] - 8004b72: 693b ldr r3, [r7, #16] - __HAL_RCC_GPIOB_CLK_ENABLE(); - 8004b74: 2300 movs r3, #0 - 8004b76: 60fb str r3, [r7, #12] - 8004b78: 4b30 ldr r3, [pc, #192] ; (8004c3c ) - 8004b7a: 6b1b ldr r3, [r3, #48] ; 0x30 - 8004b7c: 4a2f ldr r2, [pc, #188] ; (8004c3c ) - 8004b7e: f043 0302 orr.w r3, r3, #2 - 8004b82: 6313 str r3, [r2, #48] ; 0x30 - 8004b84: 4b2d ldr r3, [pc, #180] ; (8004c3c ) - 8004b86: 6b1b ldr r3, [r3, #48] ; 0x30 - 8004b88: f003 0302 and.w r3, r3, #2 - 8004b8c: 60fb str r3, [r7, #12] - 8004b8e: 68fb ldr r3, [r7, #12] - __HAL_RCC_GPIOG_CLK_ENABLE(); - 8004b90: 2300 movs r3, #0 - 8004b92: 60bb str r3, [r7, #8] - 8004b94: 4b29 ldr r3, [pc, #164] ; (8004c3c ) - 8004b96: 6b1b ldr r3, [r3, #48] ; 0x30 - 8004b98: 4a28 ldr r2, [pc, #160] ; (8004c3c ) - 8004b9a: f043 0340 orr.w r3, r3, #64 ; 0x40 - 8004b9e: 6313 str r3, [r2, #48] ; 0x30 - 8004ba0: 4b26 ldr r3, [pc, #152] ; (8004c3c ) - 8004ba2: 6b1b ldr r3, [r3, #48] ; 0x30 - 8004ba4: f003 0340 and.w r3, r3, #64 ; 0x40 - 8004ba8: 60bb str r3, [r7, #8] - 8004baa: 68bb ldr r3, [r7, #8] - PC5 ------> ETH_RXD1 - PB11 ------> ETH_TX_EN - PB12 ------> ETH_TXD0 - PG14 ------> ETH_TXD1 - */ - GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5; - 8004bac: 2332 movs r3, #50 ; 0x32 - 8004bae: 627b str r3, [r7, #36] ; 0x24 - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 8004bb0: 2302 movs r3, #2 - 8004bb2: 62bb str r3, [r7, #40] ; 0x28 - GPIO_InitStruct.Pull = GPIO_NOPULL; - 8004bb4: 2300 movs r3, #0 - 8004bb6: 62fb str r3, [r7, #44] ; 0x2c - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - 8004bb8: 2303 movs r3, #3 - 8004bba: 633b str r3, [r7, #48] ; 0x30 - GPIO_InitStruct.Alternate = GPIO_AF11_ETH; - 8004bbc: 230b movs r3, #11 - 8004bbe: 637b str r3, [r7, #52] ; 0x34 - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - 8004bc0: f107 0324 add.w r3, r7, #36 ; 0x24 - 8004bc4: 4619 mov r1, r3 - 8004bc6: 481e ldr r0, [pc, #120] ; (8004c40 ) - 8004bc8: f7fe f97a bl 8002ec0 - - GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7; - 8004bcc: 2386 movs r3, #134 ; 0x86 - 8004bce: 627b str r3, [r7, #36] ; 0x24 - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 8004bd0: 2302 movs r3, #2 - 8004bd2: 62bb str r3, [r7, #40] ; 0x28 - GPIO_InitStruct.Pull = GPIO_NOPULL; - 8004bd4: 2300 movs r3, #0 - 8004bd6: 62fb str r3, [r7, #44] ; 0x2c - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - 8004bd8: 2303 movs r3, #3 - 8004bda: 633b str r3, [r7, #48] ; 0x30 - GPIO_InitStruct.Alternate = GPIO_AF11_ETH; - 8004bdc: 230b movs r3, #11 - 8004bde: 637b str r3, [r7, #52] ; 0x34 - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - 8004be0: f107 0324 add.w r3, r7, #36 ; 0x24 - 8004be4: 4619 mov r1, r3 - 8004be6: 4817 ldr r0, [pc, #92] ; (8004c44 ) - 8004be8: f7fe f96a bl 8002ec0 - - GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12; - 8004bec: f44f 53c0 mov.w r3, #6144 ; 0x1800 - 8004bf0: 627b str r3, [r7, #36] ; 0x24 - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 8004bf2: 2302 movs r3, #2 - 8004bf4: 62bb str r3, [r7, #40] ; 0x28 - GPIO_InitStruct.Pull = GPIO_NOPULL; - 8004bf6: 2300 movs r3, #0 - 8004bf8: 62fb str r3, [r7, #44] ; 0x2c - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - 8004bfa: 2303 movs r3, #3 - 8004bfc: 633b str r3, [r7, #48] ; 0x30 - GPIO_InitStruct.Alternate = GPIO_AF11_ETH; - 8004bfe: 230b movs r3, #11 - 8004c00: 637b str r3, [r7, #52] ; 0x34 - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - 8004c02: f107 0324 add.w r3, r7, #36 ; 0x24 - 8004c06: 4619 mov r1, r3 - 8004c08: 480f ldr r0, [pc, #60] ; (8004c48 ) - 8004c0a: f7fe f959 bl 8002ec0 - - GPIO_InitStruct.Pin = GPIO_PIN_14; - 8004c0e: f44f 4380 mov.w r3, #16384 ; 0x4000 - 8004c12: 627b str r3, [r7, #36] ; 0x24 - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 8004c14: 2302 movs r3, #2 - 8004c16: 62bb str r3, [r7, #40] ; 0x28 - GPIO_InitStruct.Pull = GPIO_NOPULL; - 8004c18: 2300 movs r3, #0 - 8004c1a: 62fb str r3, [r7, #44] ; 0x2c - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - 8004c1c: 2303 movs r3, #3 - 8004c1e: 633b str r3, [r7, #48] ; 0x30 - GPIO_InitStruct.Alternate = GPIO_AF11_ETH; - 8004c20: 230b movs r3, #11 - 8004c22: 637b str r3, [r7, #52] ; 0x34 - HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); - 8004c24: f107 0324 add.w r3, r7, #36 ; 0x24 - 8004c28: 4619 mov r1, r3 - 8004c2a: 4808 ldr r0, [pc, #32] ; (8004c4c ) - 8004c2c: f7fe f948 bl 8002ec0 - - /* USER CODE BEGIN ETH_MspInit 1 */ - - /* USER CODE END ETH_MspInit 1 */ - } -} - 8004c30: bf00 nop - 8004c32: 3738 adds r7, #56 ; 0x38 - 8004c34: 46bd mov sp, r7 - 8004c36: bd80 pop {r7, pc} - 8004c38: 40028000 .word 0x40028000 - 8004c3c: 40023800 .word 0x40023800 - 8004c40: 40020800 .word 0x40020800 - 8004c44: 40020000 .word 0x40020000 - 8004c48: 40020400 .word 0x40020400 - 8004c4c: 40021800 .word 0x40021800 - -08004c50 : - * @brief Initializes the MDIO interface GPIO and clocks. - * @param None - * @retval 0 if OK, -1 if ERROR - */ -int32_t ETH_PHY_IO_Init(void) -{ - 8004c50: b580 push {r7, lr} - 8004c52: af00 add r7, sp, #0 - /* We assume that MDIO GPIO configuration is already done - in the ETH_MspInit() else it should be done here - */ - - /* Configure the MDIO Clock */ - HAL_ETH_SetMDIOClockRange(&heth); - 8004c54: 4802 ldr r0, [pc, #8] ; (8004c60 ) - 8004c56: f7fd fcd7 bl 8002608 - - return 0; - 8004c5a: 2300 movs r3, #0 -} - 8004c5c: 4618 mov r0, r3 - 8004c5e: bd80 pop {r7, pc} - 8004c60: 2000633c .word 0x2000633c - -08004c64 : - * @brief De-Initializes the MDIO interface . - * @param None - * @retval 0 if OK, -1 if ERROR - */ -int32_t ETH_PHY_IO_DeInit (void) -{ - 8004c64: b480 push {r7} - 8004c66: af00 add r7, sp, #0 - return 0; - 8004c68: 2300 movs r3, #0 -} - 8004c6a: 4618 mov r0, r3 - 8004c6c: 46bd mov sp, r7 - 8004c6e: f85d 7b04 ldr.w r7, [sp], #4 - 8004c72: 4770 bx lr - -08004c74 : - * @param RegAddr: PHY register address - * @param pRegVal: pointer to hold the register value - * @retval 0 if OK -1 if Error - */ -int32_t ETH_PHY_IO_ReadReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t *pRegVal) -{ - 8004c74: b580 push {r7, lr} - 8004c76: b084 sub sp, #16 - 8004c78: af00 add r7, sp, #0 - 8004c7a: 60f8 str r0, [r7, #12] - 8004c7c: 60b9 str r1, [r7, #8] - 8004c7e: 607a str r2, [r7, #4] - if(HAL_ETH_ReadPHYRegister(&heth, DevAddr, RegAddr, pRegVal) != HAL_OK) - 8004c80: 687b ldr r3, [r7, #4] - 8004c82: 68ba ldr r2, [r7, #8] - 8004c84: 68f9 ldr r1, [r7, #12] - 8004c86: 4807 ldr r0, [pc, #28] ; (8004ca4 ) - 8004c88: f7fd fb26 bl 80022d8 - 8004c8c: 4603 mov r3, r0 - 8004c8e: 2b00 cmp r3, #0 - 8004c90: d002 beq.n 8004c98 - { - return -1; - 8004c92: f04f 33ff mov.w r3, #4294967295 - 8004c96: e000 b.n 8004c9a - } - - return 0; - 8004c98: 2300 movs r3, #0 -} - 8004c9a: 4618 mov r0, r3 - 8004c9c: 3710 adds r7, #16 - 8004c9e: 46bd mov sp, r7 - 8004ca0: bd80 pop {r7, pc} - 8004ca2: bf00 nop - 8004ca4: 2000633c .word 0x2000633c - -08004ca8 : - * @param RegAddr: PHY register address - * @param RegVal: Value to be written - * @retval 0 if OK -1 if Error - */ -int32_t ETH_PHY_IO_WriteReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t RegVal) -{ - 8004ca8: b580 push {r7, lr} - 8004caa: b084 sub sp, #16 - 8004cac: af00 add r7, sp, #0 - 8004cae: 60f8 str r0, [r7, #12] - 8004cb0: 60b9 str r1, [r7, #8] - 8004cb2: 607a str r2, [r7, #4] - if(HAL_ETH_WritePHYRegister(&heth, DevAddr, RegAddr, RegVal) != HAL_OK) - 8004cb4: 687b ldr r3, [r7, #4] - 8004cb6: 68ba ldr r2, [r7, #8] - 8004cb8: 68f9 ldr r1, [r7, #12] - 8004cba: 4807 ldr r0, [pc, #28] ; (8004cd8 ) - 8004cbc: f7fd fb57 bl 800236e - 8004cc0: 4603 mov r3, r0 - 8004cc2: 2b00 cmp r3, #0 - 8004cc4: d002 beq.n 8004ccc - { - return -1; - 8004cc6: f04f 33ff mov.w r3, #4294967295 - 8004cca: e000 b.n 8004cce - } - - return 0; - 8004ccc: 2300 movs r3, #0 -} - 8004cce: 4618 mov r0, r3 - 8004cd0: 3710 adds r7, #16 - 8004cd2: 46bd mov sp, r7 - 8004cd4: bd80 pop {r7, pc} - 8004cd6: bf00 nop - 8004cd8: 2000633c .word 0x2000633c - -08004cdc : -/** - * @brief Get the time in millisecons used for internal PHY driver process. - * @retval Time value - */ -int32_t ETH_PHY_IO_GetTick(void) -{ - 8004cdc: b580 push {r7, lr} - 8004cde: af00 add r7, sp, #0 - return HAL_GetTick(); - 8004ce0: f7fc feb6 bl 8001a50 - 8004ce4: 4603 mov r3, r0 -} - 8004ce6: 4618 mov r0, r3 - 8004ce8: bd80 pop {r7, pc} - ... - -08004cec : -/** - * @brief Check the ETH link state then update ETH driver and netif link accordingly. - * @retval None - */ -void ethernet_link_check_state(struct netif *netif) -{ - 8004cec: b580 push {r7, lr} - 8004cee: b0a0 sub sp, #128 ; 0x80 - 8004cf0: af00 add r7, sp, #0 - 8004cf2: 6078 str r0, [r7, #4] - ETH_MACConfigTypeDef MACConf = {0}; - 8004cf4: f107 030c add.w r3, r7, #12 - 8004cf8: 2264 movs r2, #100 ; 0x64 - 8004cfa: 2100 movs r1, #0 - 8004cfc: 4618 mov r0, r3 - 8004cfe: f00c f9cb bl 8011098 - int32_t PHYLinkState = 0; - 8004d02: 2300 movs r3, #0 - 8004d04: 673b str r3, [r7, #112] ; 0x70 - uint32_t linkchanged = 0U, speed = 0U, duplex = 0U; - 8004d06: 2300 movs r3, #0 - 8004d08: 67fb str r3, [r7, #124] ; 0x7c - 8004d0a: 2300 movs r3, #0 - 8004d0c: 67bb str r3, [r7, #120] ; 0x78 - 8004d0e: 2300 movs r3, #0 - 8004d10: 677b str r3, [r7, #116] ; 0x74 - - PHYLinkState = DP83848_GetLinkState(&DP83848); - 8004d12: 483a ldr r0, [pc, #232] ; (8004dfc ) - 8004d14: f7fc fdaf bl 8001876 - 8004d18: 6738 str r0, [r7, #112] ; 0x70 - - if(netif_is_link_up(netif) && (PHYLinkState <= DP83848_STATUS_LINK_DOWN)) - 8004d1a: 687b ldr r3, [r7, #4] - 8004d1c: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8004d20: 089b lsrs r3, r3, #2 - 8004d22: f003 0301 and.w r3, r3, #1 - 8004d26: b2db uxtb r3, r3 - 8004d28: 2b00 cmp r3, #0 - 8004d2a: d00c beq.n 8004d46 - 8004d2c: 6f3b ldr r3, [r7, #112] ; 0x70 - 8004d2e: 2b01 cmp r3, #1 - 8004d30: dc09 bgt.n 8004d46 - { - HAL_ETH_Stop(&heth); - 8004d32: 4833 ldr r0, [pc, #204] ; (8004e00 ) - 8004d34: f7fd f8ab bl 8001e8e - netif_set_down(netif); - 8004d38: 6878 ldr r0, [r7, #4] - 8004d3a: f001 f823 bl 8005d84 - netif_set_link_down(netif); - 8004d3e: 6878 ldr r0, [r7, #4] - 8004d40: f001 f88a bl 8005e58 - netif_set_up(netif); - netif_set_link_up(netif); - } - } - -} - 8004d44: e055 b.n 8004df2 - else if(!netif_is_link_up(netif) && (PHYLinkState > DP83848_STATUS_LINK_DOWN)) - 8004d46: 687b ldr r3, [r7, #4] - 8004d48: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8004d4c: f003 0304 and.w r3, r3, #4 - 8004d50: 2b00 cmp r3, #0 - 8004d52: d14e bne.n 8004df2 - 8004d54: 6f3b ldr r3, [r7, #112] ; 0x70 - 8004d56: 2b01 cmp r3, #1 - 8004d58: dd4b ble.n 8004df2 - switch (PHYLinkState) - 8004d5a: 6f3b ldr r3, [r7, #112] ; 0x70 - 8004d5c: 3b02 subs r3, #2 - 8004d5e: 2b03 cmp r3, #3 - 8004d60: d82a bhi.n 8004db8 - 8004d62: a201 add r2, pc, #4 ; (adr r2, 8004d68 ) - 8004d64: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 8004d68: 08004d79 .word 0x08004d79 - 8004d6c: 08004d8b .word 0x08004d8b - 8004d70: 08004d9b .word 0x08004d9b - 8004d74: 08004dab .word 0x08004dab - duplex = ETH_FULLDUPLEX_MODE; - 8004d78: f44f 6300 mov.w r3, #2048 ; 0x800 - 8004d7c: 677b str r3, [r7, #116] ; 0x74 - speed = ETH_SPEED_100M; - 8004d7e: f44f 4380 mov.w r3, #16384 ; 0x4000 - 8004d82: 67bb str r3, [r7, #120] ; 0x78 - linkchanged = 1; - 8004d84: 2301 movs r3, #1 - 8004d86: 67fb str r3, [r7, #124] ; 0x7c - break; - 8004d88: e017 b.n 8004dba - duplex = ETH_HALFDUPLEX_MODE; - 8004d8a: 2300 movs r3, #0 - 8004d8c: 677b str r3, [r7, #116] ; 0x74 - speed = ETH_SPEED_100M; - 8004d8e: f44f 4380 mov.w r3, #16384 ; 0x4000 - 8004d92: 67bb str r3, [r7, #120] ; 0x78 - linkchanged = 1; - 8004d94: 2301 movs r3, #1 - 8004d96: 67fb str r3, [r7, #124] ; 0x7c - break; - 8004d98: e00f b.n 8004dba - duplex = ETH_FULLDUPLEX_MODE; - 8004d9a: f44f 6300 mov.w r3, #2048 ; 0x800 - 8004d9e: 677b str r3, [r7, #116] ; 0x74 - speed = ETH_SPEED_10M; - 8004da0: 2300 movs r3, #0 - 8004da2: 67bb str r3, [r7, #120] ; 0x78 - linkchanged = 1; - 8004da4: 2301 movs r3, #1 - 8004da6: 67fb str r3, [r7, #124] ; 0x7c - break; - 8004da8: e007 b.n 8004dba - duplex = ETH_HALFDUPLEX_MODE; - 8004daa: 2300 movs r3, #0 - 8004dac: 677b str r3, [r7, #116] ; 0x74 - speed = ETH_SPEED_10M; - 8004dae: 2300 movs r3, #0 - 8004db0: 67bb str r3, [r7, #120] ; 0x78 - linkchanged = 1; - 8004db2: 2301 movs r3, #1 - 8004db4: 67fb str r3, [r7, #124] ; 0x7c - break; - 8004db6: e000 b.n 8004dba - break; - 8004db8: bf00 nop - if(linkchanged) - 8004dba: 6ffb ldr r3, [r7, #124] ; 0x7c - 8004dbc: 2b00 cmp r3, #0 - 8004dbe: d018 beq.n 8004df2 - HAL_ETH_GetMACConfig(&heth, &MACConf); - 8004dc0: f107 030c add.w r3, r7, #12 - 8004dc4: 4619 mov r1, r3 - 8004dc6: 480e ldr r0, [pc, #56] ; (8004e00 ) - 8004dc8: f7fd fb1a bl 8002400 - MACConf.DuplexMode = duplex; - 8004dcc: 6f7b ldr r3, [r7, #116] ; 0x74 - 8004dce: 627b str r3, [r7, #36] ; 0x24 - MACConf.Speed = speed; - 8004dd0: 6fbb ldr r3, [r7, #120] ; 0x78 - 8004dd2: 623b str r3, [r7, #32] - HAL_ETH_SetMACConfig(&heth, &MACConf); - 8004dd4: f107 030c add.w r3, r7, #12 - 8004dd8: 4619 mov r1, r3 - 8004dda: 4809 ldr r0, [pc, #36] ; (8004e00 ) - 8004ddc: f7fd fbfa bl 80025d4 - HAL_ETH_Start(&heth); - 8004de0: 4807 ldr r0, [pc, #28] ; (8004e00 ) - 8004de2: f7fc fff5 bl 8001dd0 - netif_set_up(netif); - 8004de6: 6878 ldr r0, [r7, #4] - 8004de8: f000 ff60 bl 8005cac - netif_set_link_up(netif); - 8004dec: 6878 ldr r0, [r7, #4] - 8004dee: f000 fffb bl 8005de8 -} - 8004df2: bf00 nop - 8004df4: 3780 adds r7, #128 ; 0x80 - 8004df6: 46bd mov sp, r7 - 8004df8: bd80 pop {r7, pc} - 8004dfa: bf00 nop - 8004dfc: 20006424 .word 0x20006424 - 8004e00: 2000633c .word 0x2000633c - -08004e04 : - -void HAL_ETH_RxAllocateCallback(uint8_t **buff) -{ - 8004e04: b580 push {r7, lr} - 8004e06: b086 sub sp, #24 - 8004e08: af02 add r7, sp, #8 - 8004e0a: 6078 str r0, [r7, #4] -/* USER CODE BEGIN HAL ETH RxAllocateCallback */ - struct pbuf_custom *p = LWIP_MEMPOOL_ALLOC(RX_POOL); - 8004e0c: 4812 ldr r0, [pc, #72] ; (8004e58 ) - 8004e0e: f000 fcbf bl 8005790 - 8004e12: 60f8 str r0, [r7, #12] - if (p) - 8004e14: 68fb ldr r3, [r7, #12] - 8004e16: 2b00 cmp r3, #0 - 8004e18: d014 beq.n 8004e44 - { - /* Get the buff from the struct pbuf address. */ - *buff = (uint8_t *)p + offsetof(RxBuff_t, buff); - 8004e1a: 68fb ldr r3, [r7, #12] - 8004e1c: f103 0220 add.w r2, r3, #32 - 8004e20: 687b ldr r3, [r7, #4] - 8004e22: 601a str r2, [r3, #0] - p->custom_free_function = pbuf_free_custom; - 8004e24: 68fb ldr r3, [r7, #12] - 8004e26: 4a0d ldr r2, [pc, #52] ; (8004e5c ) - 8004e28: 611a str r2, [r3, #16] - /* Initialize the struct pbuf. - * This must be performed whenever a buffer's allocated because it may be - * changed by lwIP or the app, e.g., pbuf_free decrements ref. */ - pbuf_alloced_custom(PBUF_RAW, 0, PBUF_REF, p, *buff, ETH_RX_BUFFER_SIZE); - 8004e2a: 687b ldr r3, [r7, #4] - 8004e2c: 681b ldr r3, [r3, #0] - 8004e2e: f44f 62c0 mov.w r2, #1536 ; 0x600 - 8004e32: 9201 str r2, [sp, #4] - 8004e34: 9300 str r3, [sp, #0] - 8004e36: 68fb ldr r3, [r7, #12] - 8004e38: 2241 movs r2, #65 ; 0x41 - 8004e3a: 2100 movs r1, #0 - 8004e3c: 2000 movs r0, #0 - 8004e3e: f001 fa01 bl 8006244 - { - RxAllocStatus = RX_ALLOC_ERROR; - *buff = NULL; - } -/* USER CODE END HAL ETH RxAllocateCallback */ -} - 8004e42: e005 b.n 8004e50 - RxAllocStatus = RX_ALLOC_ERROR; - 8004e44: 4b06 ldr r3, [pc, #24] ; (8004e60 ) - 8004e46: 2201 movs r2, #1 - 8004e48: 701a strb r2, [r3, #0] - *buff = NULL; - 8004e4a: 687b ldr r3, [r7, #4] - 8004e4c: 2200 movs r2, #0 - 8004e4e: 601a str r2, [r3, #0] -} - 8004e50: bf00 nop - 8004e52: 3710 adds r7, #16 - 8004e54: 46bd mov sp, r7 - 8004e56: bd80 pop {r7, pc} - 8004e58: 080189e0 .word 0x080189e0 - 8004e5c: 08004a81 .word 0x08004a81 - 8004e60: 200061f8 .word 0x200061f8 - -08004e64 : - -void HAL_ETH_RxLinkCallback(void **pStart, void **pEnd, uint8_t *buff, uint16_t Length) -{ - 8004e64: b480 push {r7} - 8004e66: b089 sub sp, #36 ; 0x24 - 8004e68: af00 add r7, sp, #0 - 8004e6a: 60f8 str r0, [r7, #12] - 8004e6c: 60b9 str r1, [r7, #8] - 8004e6e: 607a str r2, [r7, #4] - 8004e70: 807b strh r3, [r7, #2] -/* USER CODE BEGIN HAL ETH RxLinkCallback */ - - struct pbuf **ppStart = (struct pbuf **)pStart; - 8004e72: 68fb ldr r3, [r7, #12] - 8004e74: 61bb str r3, [r7, #24] - struct pbuf **ppEnd = (struct pbuf **)pEnd; - 8004e76: 68bb ldr r3, [r7, #8] - 8004e78: 617b str r3, [r7, #20] - struct pbuf *p = NULL; - 8004e7a: 2300 movs r3, #0 - 8004e7c: 61fb str r3, [r7, #28] - - /* Get the struct pbuf from the buff address. */ - p = (struct pbuf *)(buff - offsetof(RxBuff_t, buff)); - 8004e7e: 687b ldr r3, [r7, #4] - 8004e80: 3b20 subs r3, #32 - 8004e82: 61fb str r3, [r7, #28] - p->next = NULL; - 8004e84: 69fb ldr r3, [r7, #28] - 8004e86: 2200 movs r2, #0 - 8004e88: 601a str r2, [r3, #0] - p->tot_len = 0; - 8004e8a: 69fb ldr r3, [r7, #28] - 8004e8c: 2200 movs r2, #0 - 8004e8e: 811a strh r2, [r3, #8] - p->len = Length; - 8004e90: 69fb ldr r3, [r7, #28] - 8004e92: 887a ldrh r2, [r7, #2] - 8004e94: 815a strh r2, [r3, #10] - - /* Chain the buffer. */ - if (!*ppStart) - 8004e96: 69bb ldr r3, [r7, #24] - 8004e98: 681b ldr r3, [r3, #0] - 8004e9a: 2b00 cmp r3, #0 - 8004e9c: d103 bne.n 8004ea6 - { - /* The first buffer of the packet. */ - *ppStart = p; - 8004e9e: 69bb ldr r3, [r7, #24] - 8004ea0: 69fa ldr r2, [r7, #28] - 8004ea2: 601a str r2, [r3, #0] - 8004ea4: e003 b.n 8004eae - } - else - { - /* Chain the buffer to the end of the packet. */ - (*ppEnd)->next = p; - 8004ea6: 697b ldr r3, [r7, #20] - 8004ea8: 681b ldr r3, [r3, #0] - 8004eaa: 69fa ldr r2, [r7, #28] - 8004eac: 601a str r2, [r3, #0] - } - *ppEnd = p; - 8004eae: 697b ldr r3, [r7, #20] - 8004eb0: 69fa ldr r2, [r7, #28] - 8004eb2: 601a str r2, [r3, #0] - - /* Update the total length of all the buffers of the chain. Each pbuf in the chain should have its tot_len - * set to its own length, plus the length of all the following pbufs in the chain. */ - for (p = *ppStart; p != NULL; p = p->next) - 8004eb4: 69bb ldr r3, [r7, #24] - 8004eb6: 681b ldr r3, [r3, #0] - 8004eb8: 61fb str r3, [r7, #28] - 8004eba: e009 b.n 8004ed0 - { - p->tot_len += Length; - 8004ebc: 69fb ldr r3, [r7, #28] - 8004ebe: 891a ldrh r2, [r3, #8] - 8004ec0: 887b ldrh r3, [r7, #2] - 8004ec2: 4413 add r3, r2 - 8004ec4: b29a uxth r2, r3 - 8004ec6: 69fb ldr r3, [r7, #28] - 8004ec8: 811a strh r2, [r3, #8] - for (p = *ppStart; p != NULL; p = p->next) - 8004eca: 69fb ldr r3, [r7, #28] - 8004ecc: 681b ldr r3, [r3, #0] - 8004ece: 61fb str r3, [r7, #28] - 8004ed0: 69fb ldr r3, [r7, #28] - 8004ed2: 2b00 cmp r3, #0 - 8004ed4: d1f2 bne.n 8004ebc - } - -/* USER CODE END HAL ETH RxLinkCallback */ -} - 8004ed6: bf00 nop - 8004ed8: bf00 nop - 8004eda: 3724 adds r7, #36 ; 0x24 - 8004edc: 46bd mov sp, r7 - 8004ede: f85d 7b04 ldr.w r7, [sp], #4 - 8004ee2: 4770 bx lr - -08004ee4 : - * @param n u16_t in host byte order - * @return n in network byte order - */ -u16_t -lwip_htons(u16_t n) -{ - 8004ee4: b480 push {r7} - 8004ee6: b083 sub sp, #12 - 8004ee8: af00 add r7, sp, #0 - 8004eea: 4603 mov r3, r0 - 8004eec: 80fb strh r3, [r7, #6] - return PP_HTONS(n); - 8004eee: 88fb ldrh r3, [r7, #6] - 8004ef0: 021b lsls r3, r3, #8 - 8004ef2: b21a sxth r2, r3 - 8004ef4: 88fb ldrh r3, [r7, #6] - 8004ef6: 0a1b lsrs r3, r3, #8 - 8004ef8: b29b uxth r3, r3 - 8004efa: b21b sxth r3, r3 - 8004efc: 4313 orrs r3, r2 - 8004efe: b21b sxth r3, r3 - 8004f00: b29b uxth r3, r3 -} - 8004f02: 4618 mov r0, r3 - 8004f04: 370c adds r7, #12 - 8004f06: 46bd mov sp, r7 - 8004f08: f85d 7b04 ldr.w r7, [sp], #4 - 8004f0c: 4770 bx lr - -08004f0e : - * @param n u32_t in host byte order - * @return n in network byte order - */ -u32_t -lwip_htonl(u32_t n) -{ - 8004f0e: b480 push {r7} - 8004f10: b083 sub sp, #12 - 8004f12: af00 add r7, sp, #0 - 8004f14: 6078 str r0, [r7, #4] - return PP_HTONL(n); - 8004f16: 687b ldr r3, [r7, #4] - 8004f18: 061a lsls r2, r3, #24 - 8004f1a: 687b ldr r3, [r7, #4] - 8004f1c: 021b lsls r3, r3, #8 - 8004f1e: f403 037f and.w r3, r3, #16711680 ; 0xff0000 - 8004f22: 431a orrs r2, r3 - 8004f24: 687b ldr r3, [r7, #4] - 8004f26: 0a1b lsrs r3, r3, #8 - 8004f28: f403 437f and.w r3, r3, #65280 ; 0xff00 - 8004f2c: 431a orrs r2, r3 - 8004f2e: 687b ldr r3, [r7, #4] - 8004f30: 0e1b lsrs r3, r3, #24 - 8004f32: 4313 orrs r3, r2 -} - 8004f34: 4618 mov r0, r3 - 8004f36: 370c adds r7, #12 - 8004f38: 46bd mov sp, r7 - 8004f3a: f85d 7b04 ldr.w r7, [sp], #4 - 8004f3e: 4770 bx lr - -08004f40 : - * Initialize all modules. - * Use this in NO_SYS mode. Use tcpip_init() otherwise. - */ -void -lwip_init(void) -{ - 8004f40: b580 push {r7, lr} - 8004f42: b082 sub sp, #8 - 8004f44: af00 add r7, sp, #0 -#ifndef LWIP_SKIP_CONST_CHECK - int a = 0; - 8004f46: 2300 movs r3, #0 - 8004f48: 607b str r3, [r7, #4] - /* Modules initialization */ - stats_init(); -#if !NO_SYS - sys_init(); -#endif /* !NO_SYS */ - mem_init(); - 8004f4a: f000 f8d5 bl 80050f8 - memp_init(); - 8004f4e: f000 fbdb bl 8005708 - pbuf_init(); - netif_init(); - 8004f52: f000 fcd9 bl 8005908 -#endif /* LWIP_IPV4 */ -#if LWIP_RAW - raw_init(); -#endif /* LWIP_RAW */ -#if LWIP_UDP - udp_init(); - 8004f56: f007 f873 bl 800c040 -#endif /* LWIP_UDP */ -#if LWIP_TCP - tcp_init(); - 8004f5a: f001 fdcb bl 8006af4 -#if PPP_SUPPORT - ppp_init(); -#endif - -#if LWIP_TIMERS - sys_timeouts_init(); - 8004f5e: f006 ffe5 bl 800bf2c -#endif /* LWIP_TIMERS */ -} - 8004f62: bf00 nop - 8004f64: 3708 adds r7, #8 - 8004f66: 46bd mov sp, r7 - 8004f68: bd80 pop {r7, pc} - ... - -08004f6c : -#define mem_overflow_check_element(mem) -#endif /* MEM_OVERFLOW_CHECK */ - -static struct mem * -ptr_to_mem(mem_size_t ptr) -{ - 8004f6c: b480 push {r7} - 8004f6e: b083 sub sp, #12 - 8004f70: af00 add r7, sp, #0 - 8004f72: 4603 mov r3, r0 - 8004f74: 80fb strh r3, [r7, #6] - return (struct mem *)(void *)&ram[ptr]; - 8004f76: 4b05 ldr r3, [pc, #20] ; (8004f8c ) - 8004f78: 681a ldr r2, [r3, #0] - 8004f7a: 88fb ldrh r3, [r7, #6] - 8004f7c: 4413 add r3, r2 -} - 8004f7e: 4618 mov r0, r3 - 8004f80: 370c adds r7, #12 - 8004f82: 46bd mov sp, r7 - 8004f84: f85d 7b04 ldr.w r7, [sp], #4 - 8004f88: 4770 bx lr - 8004f8a: bf00 nop - 8004f8c: 20006ab0 .word 0x20006ab0 - -08004f90 : - -static mem_size_t -mem_to_ptr(void *mem) -{ - 8004f90: b480 push {r7} - 8004f92: b083 sub sp, #12 - 8004f94: af00 add r7, sp, #0 - 8004f96: 6078 str r0, [r7, #4] - return (mem_size_t)((u8_t *)mem - ram); - 8004f98: 4b05 ldr r3, [pc, #20] ; (8004fb0 ) - 8004f9a: 681b ldr r3, [r3, #0] - 8004f9c: 687a ldr r2, [r7, #4] - 8004f9e: 1ad3 subs r3, r2, r3 - 8004fa0: b29b uxth r3, r3 -} - 8004fa2: 4618 mov r0, r3 - 8004fa4: 370c adds r7, #12 - 8004fa6: 46bd mov sp, r7 - 8004fa8: f85d 7b04 ldr.w r7, [sp], #4 - 8004fac: 4770 bx lr - 8004fae: bf00 nop - 8004fb0: 20006ab0 .word 0x20006ab0 - -08004fb4 : - * This assumes access to the heap is protected by the calling function - * already. - */ -static void -plug_holes(struct mem *mem) -{ - 8004fb4: b590 push {r4, r7, lr} - 8004fb6: b085 sub sp, #20 - 8004fb8: af00 add r7, sp, #0 - 8004fba: 6078 str r0, [r7, #4] - struct mem *nmem; - struct mem *pmem; - - LWIP_ASSERT("plug_holes: mem >= ram", (u8_t *)mem >= ram); - 8004fbc: 4b45 ldr r3, [pc, #276] ; (80050d4 ) - 8004fbe: 681b ldr r3, [r3, #0] - 8004fc0: 687a ldr r2, [r7, #4] - 8004fc2: 429a cmp r2, r3 - 8004fc4: d206 bcs.n 8004fd4 - 8004fc6: 4b44 ldr r3, [pc, #272] ; (80050d8 ) - 8004fc8: f240 12df movw r2, #479 ; 0x1df - 8004fcc: 4943 ldr r1, [pc, #268] ; (80050dc ) - 8004fce: 4844 ldr r0, [pc, #272] ; (80050e0 ) - 8004fd0: f00c f86a bl 80110a8 - LWIP_ASSERT("plug_holes: mem < ram_end", (u8_t *)mem < (u8_t *)ram_end); - 8004fd4: 4b43 ldr r3, [pc, #268] ; (80050e4 ) - 8004fd6: 681b ldr r3, [r3, #0] - 8004fd8: 687a ldr r2, [r7, #4] - 8004fda: 429a cmp r2, r3 - 8004fdc: d306 bcc.n 8004fec - 8004fde: 4b3e ldr r3, [pc, #248] ; (80050d8 ) - 8004fe0: f44f 72f0 mov.w r2, #480 ; 0x1e0 - 8004fe4: 4940 ldr r1, [pc, #256] ; (80050e8 ) - 8004fe6: 483e ldr r0, [pc, #248] ; (80050e0 ) - 8004fe8: f00c f85e bl 80110a8 - LWIP_ASSERT("plug_holes: mem->used == 0", mem->used == 0); - 8004fec: 687b ldr r3, [r7, #4] - 8004fee: 791b ldrb r3, [r3, #4] - 8004ff0: 2b00 cmp r3, #0 - 8004ff2: d006 beq.n 8005002 - 8004ff4: 4b38 ldr r3, [pc, #224] ; (80050d8 ) - 8004ff6: f240 12e1 movw r2, #481 ; 0x1e1 - 8004ffa: 493c ldr r1, [pc, #240] ; (80050ec ) - 8004ffc: 4838 ldr r0, [pc, #224] ; (80050e0 ) - 8004ffe: f00c f853 bl 80110a8 - - /* plug hole forward */ - LWIP_ASSERT("plug_holes: mem->next <= MEM_SIZE_ALIGNED", mem->next <= MEM_SIZE_ALIGNED); - 8005002: 687b ldr r3, [r7, #4] - 8005004: 881b ldrh r3, [r3, #0] - 8005006: f5b3 6fc8 cmp.w r3, #1600 ; 0x640 - 800500a: d906 bls.n 800501a - 800500c: 4b32 ldr r3, [pc, #200] ; (80050d8 ) - 800500e: f44f 72f2 mov.w r2, #484 ; 0x1e4 - 8005012: 4937 ldr r1, [pc, #220] ; (80050f0 ) - 8005014: 4832 ldr r0, [pc, #200] ; (80050e0 ) - 8005016: f00c f847 bl 80110a8 - - nmem = ptr_to_mem(mem->next); - 800501a: 687b ldr r3, [r7, #4] - 800501c: 881b ldrh r3, [r3, #0] - 800501e: 4618 mov r0, r3 - 8005020: f7ff ffa4 bl 8004f6c - 8005024: 60f8 str r0, [r7, #12] - if (mem != nmem && nmem->used == 0 && (u8_t *)nmem != (u8_t *)ram_end) { - 8005026: 687a ldr r2, [r7, #4] - 8005028: 68fb ldr r3, [r7, #12] - 800502a: 429a cmp r2, r3 - 800502c: d024 beq.n 8005078 - 800502e: 68fb ldr r3, [r7, #12] - 8005030: 791b ldrb r3, [r3, #4] - 8005032: 2b00 cmp r3, #0 - 8005034: d120 bne.n 8005078 - 8005036: 4b2b ldr r3, [pc, #172] ; (80050e4 ) - 8005038: 681b ldr r3, [r3, #0] - 800503a: 68fa ldr r2, [r7, #12] - 800503c: 429a cmp r2, r3 - 800503e: d01b beq.n 8005078 - /* if mem->next is unused and not end of ram, combine mem and mem->next */ - if (lfree == nmem) { - 8005040: 4b2c ldr r3, [pc, #176] ; (80050f4 ) - 8005042: 681b ldr r3, [r3, #0] - 8005044: 68fa ldr r2, [r7, #12] - 8005046: 429a cmp r2, r3 - 8005048: d102 bne.n 8005050 - lfree = mem; - 800504a: 4a2a ldr r2, [pc, #168] ; (80050f4 ) - 800504c: 687b ldr r3, [r7, #4] - 800504e: 6013 str r3, [r2, #0] - } - mem->next = nmem->next; - 8005050: 68fb ldr r3, [r7, #12] - 8005052: 881a ldrh r2, [r3, #0] - 8005054: 687b ldr r3, [r7, #4] - 8005056: 801a strh r2, [r3, #0] - if (nmem->next != MEM_SIZE_ALIGNED) { - 8005058: 68fb ldr r3, [r7, #12] - 800505a: 881b ldrh r3, [r3, #0] - 800505c: f5b3 6fc8 cmp.w r3, #1600 ; 0x640 - 8005060: d00a beq.n 8005078 - ptr_to_mem(nmem->next)->prev = mem_to_ptr(mem); - 8005062: 68fb ldr r3, [r7, #12] - 8005064: 881b ldrh r3, [r3, #0] - 8005066: 4618 mov r0, r3 - 8005068: f7ff ff80 bl 8004f6c - 800506c: 4604 mov r4, r0 - 800506e: 6878 ldr r0, [r7, #4] - 8005070: f7ff ff8e bl 8004f90 - 8005074: 4603 mov r3, r0 - 8005076: 8063 strh r3, [r4, #2] - } - } - - /* plug hole backward */ - pmem = ptr_to_mem(mem->prev); - 8005078: 687b ldr r3, [r7, #4] - 800507a: 885b ldrh r3, [r3, #2] - 800507c: 4618 mov r0, r3 - 800507e: f7ff ff75 bl 8004f6c - 8005082: 60b8 str r0, [r7, #8] - if (pmem != mem && pmem->used == 0) { - 8005084: 68ba ldr r2, [r7, #8] - 8005086: 687b ldr r3, [r7, #4] - 8005088: 429a cmp r2, r3 - 800508a: d01f beq.n 80050cc - 800508c: 68bb ldr r3, [r7, #8] - 800508e: 791b ldrb r3, [r3, #4] - 8005090: 2b00 cmp r3, #0 - 8005092: d11b bne.n 80050cc - /* if mem->prev is unused, combine mem and mem->prev */ - if (lfree == mem) { - 8005094: 4b17 ldr r3, [pc, #92] ; (80050f4 ) - 8005096: 681b ldr r3, [r3, #0] - 8005098: 687a ldr r2, [r7, #4] - 800509a: 429a cmp r2, r3 - 800509c: d102 bne.n 80050a4 - lfree = pmem; - 800509e: 4a15 ldr r2, [pc, #84] ; (80050f4 ) - 80050a0: 68bb ldr r3, [r7, #8] - 80050a2: 6013 str r3, [r2, #0] - } - pmem->next = mem->next; - 80050a4: 687b ldr r3, [r7, #4] - 80050a6: 881a ldrh r2, [r3, #0] - 80050a8: 68bb ldr r3, [r7, #8] - 80050aa: 801a strh r2, [r3, #0] - if (mem->next != MEM_SIZE_ALIGNED) { - 80050ac: 687b ldr r3, [r7, #4] - 80050ae: 881b ldrh r3, [r3, #0] - 80050b0: f5b3 6fc8 cmp.w r3, #1600 ; 0x640 - 80050b4: d00a beq.n 80050cc - ptr_to_mem(mem->next)->prev = mem_to_ptr(pmem); - 80050b6: 687b ldr r3, [r7, #4] - 80050b8: 881b ldrh r3, [r3, #0] - 80050ba: 4618 mov r0, r3 - 80050bc: f7ff ff56 bl 8004f6c - 80050c0: 4604 mov r4, r0 - 80050c2: 68b8 ldr r0, [r7, #8] - 80050c4: f7ff ff64 bl 8004f90 - 80050c8: 4603 mov r3, r0 - 80050ca: 8063 strh r3, [r4, #2] - } - } -} - 80050cc: bf00 nop - 80050ce: 3714 adds r7, #20 - 80050d0: 46bd mov sp, r7 - 80050d2: bd90 pop {r4, r7, pc} - 80050d4: 20006ab0 .word 0x20006ab0 - 80050d8: 08015c34 .word 0x08015c34 - 80050dc: 08015c64 .word 0x08015c64 - 80050e0: 08015c7c .word 0x08015c7c - 80050e4: 20006ab4 .word 0x20006ab4 - 80050e8: 08015ca4 .word 0x08015ca4 - 80050ec: 08015cc0 .word 0x08015cc0 - 80050f0: 08015cdc .word 0x08015cdc - 80050f4: 20006ab8 .word 0x20006ab8 - -080050f8 : -/** - * Zero the heap and initialize start, end and lowest-free - */ -void -mem_init(void) -{ - 80050f8: b580 push {r7, lr} - 80050fa: b082 sub sp, #8 - 80050fc: af00 add r7, sp, #0 - - LWIP_ASSERT("Sanity check alignment", - (SIZEOF_STRUCT_MEM & (MEM_ALIGNMENT - 1)) == 0); - - /* align the heap */ - ram = (u8_t *)LWIP_MEM_ALIGN(LWIP_RAM_HEAP_POINTER); - 80050fe: 4b18 ldr r3, [pc, #96] ; (8005160 ) - 8005100: 3303 adds r3, #3 - 8005102: f023 0303 bic.w r3, r3, #3 - 8005106: 461a mov r2, r3 - 8005108: 4b16 ldr r3, [pc, #88] ; (8005164 ) - 800510a: 601a str r2, [r3, #0] - /* initialize the start of the heap */ - mem = (struct mem *)(void *)ram; - 800510c: 4b15 ldr r3, [pc, #84] ; (8005164 ) - 800510e: 681b ldr r3, [r3, #0] - 8005110: 607b str r3, [r7, #4] - mem->next = MEM_SIZE_ALIGNED; - 8005112: 687b ldr r3, [r7, #4] - 8005114: f44f 62c8 mov.w r2, #1600 ; 0x640 - 8005118: 801a strh r2, [r3, #0] - mem->prev = 0; - 800511a: 687b ldr r3, [r7, #4] - 800511c: 2200 movs r2, #0 - 800511e: 805a strh r2, [r3, #2] - mem->used = 0; - 8005120: 687b ldr r3, [r7, #4] - 8005122: 2200 movs r2, #0 - 8005124: 711a strb r2, [r3, #4] - /* initialize the end of the heap */ - ram_end = ptr_to_mem(MEM_SIZE_ALIGNED); - 8005126: f44f 60c8 mov.w r0, #1600 ; 0x640 - 800512a: f7ff ff1f bl 8004f6c - 800512e: 4603 mov r3, r0 - 8005130: 4a0d ldr r2, [pc, #52] ; (8005168 ) - 8005132: 6013 str r3, [r2, #0] - ram_end->used = 1; - 8005134: 4b0c ldr r3, [pc, #48] ; (8005168 ) - 8005136: 681b ldr r3, [r3, #0] - 8005138: 2201 movs r2, #1 - 800513a: 711a strb r2, [r3, #4] - ram_end->next = MEM_SIZE_ALIGNED; - 800513c: 4b0a ldr r3, [pc, #40] ; (8005168 ) - 800513e: 681b ldr r3, [r3, #0] - 8005140: f44f 62c8 mov.w r2, #1600 ; 0x640 - 8005144: 801a strh r2, [r3, #0] - ram_end->prev = MEM_SIZE_ALIGNED; - 8005146: 4b08 ldr r3, [pc, #32] ; (8005168 ) - 8005148: 681b ldr r3, [r3, #0] - 800514a: f44f 62c8 mov.w r2, #1600 ; 0x640 - 800514e: 805a strh r2, [r3, #2] - MEM_SANITY(); - - /* initialize the lowest-free pointer to the start of the heap */ - lfree = (struct mem *)(void *)ram; - 8005150: 4b04 ldr r3, [pc, #16] ; (8005164 ) - 8005152: 681b ldr r3, [r3, #0] - 8005154: 4a05 ldr r2, [pc, #20] ; (800516c ) - 8005156: 6013 str r3, [r2, #0] - MEM_STATS_AVAIL(avail, MEM_SIZE_ALIGNED); - - if (sys_mutex_new(&mem_mutex) != ERR_OK) { - LWIP_ASSERT("failed to create mem_mutex", 0); - } -} - 8005158: bf00 nop - 800515a: 3708 adds r7, #8 - 800515c: 46bd mov sp, r7 - 800515e: bd80 pop {r7, pc} - 8005160: 2000645c .word 0x2000645c - 8005164: 20006ab0 .word 0x20006ab0 - 8005168: 20006ab4 .word 0x20006ab4 - 800516c: 20006ab8 .word 0x20006ab8 - -08005170 : -/* Check if a struct mem is correctly linked. - * If not, double-free is a possible reason. - */ -static int -mem_link_valid(struct mem *mem) -{ - 8005170: b580 push {r7, lr} - 8005172: b086 sub sp, #24 - 8005174: af00 add r7, sp, #0 - 8005176: 6078 str r0, [r7, #4] - struct mem *nmem, *pmem; - mem_size_t rmem_idx; - rmem_idx = mem_to_ptr(mem); - 8005178: 6878 ldr r0, [r7, #4] - 800517a: f7ff ff09 bl 8004f90 - 800517e: 4603 mov r3, r0 - 8005180: 82fb strh r3, [r7, #22] - nmem = ptr_to_mem(mem->next); - 8005182: 687b ldr r3, [r7, #4] - 8005184: 881b ldrh r3, [r3, #0] - 8005186: 4618 mov r0, r3 - 8005188: f7ff fef0 bl 8004f6c - 800518c: 6138 str r0, [r7, #16] - pmem = ptr_to_mem(mem->prev); - 800518e: 687b ldr r3, [r7, #4] - 8005190: 885b ldrh r3, [r3, #2] - 8005192: 4618 mov r0, r3 - 8005194: f7ff feea bl 8004f6c - 8005198: 60f8 str r0, [r7, #12] - if ((mem->next > MEM_SIZE_ALIGNED) || (mem->prev > MEM_SIZE_ALIGNED) || - 800519a: 687b ldr r3, [r7, #4] - 800519c: 881b ldrh r3, [r3, #0] - 800519e: f5b3 6fc8 cmp.w r3, #1600 ; 0x640 - 80051a2: d818 bhi.n 80051d6 - 80051a4: 687b ldr r3, [r7, #4] - 80051a6: 885b ldrh r3, [r3, #2] - 80051a8: f5b3 6fc8 cmp.w r3, #1600 ; 0x640 - 80051ac: d813 bhi.n 80051d6 - ((mem->prev != rmem_idx) && (pmem->next != rmem_idx)) || - 80051ae: 687b ldr r3, [r7, #4] - 80051b0: 885b ldrh r3, [r3, #2] - if ((mem->next > MEM_SIZE_ALIGNED) || (mem->prev > MEM_SIZE_ALIGNED) || - 80051b2: 8afa ldrh r2, [r7, #22] - 80051b4: 429a cmp r2, r3 - 80051b6: d004 beq.n 80051c2 - ((mem->prev != rmem_idx) && (pmem->next != rmem_idx)) || - 80051b8: 68fb ldr r3, [r7, #12] - 80051ba: 881b ldrh r3, [r3, #0] - 80051bc: 8afa ldrh r2, [r7, #22] - 80051be: 429a cmp r2, r3 - 80051c0: d109 bne.n 80051d6 - ((nmem != ram_end) && (nmem->prev != rmem_idx))) { - 80051c2: 4b08 ldr r3, [pc, #32] ; (80051e4 ) - 80051c4: 681b ldr r3, [r3, #0] - ((mem->prev != rmem_idx) && (pmem->next != rmem_idx)) || - 80051c6: 693a ldr r2, [r7, #16] - 80051c8: 429a cmp r2, r3 - 80051ca: d006 beq.n 80051da - ((nmem != ram_end) && (nmem->prev != rmem_idx))) { - 80051cc: 693b ldr r3, [r7, #16] - 80051ce: 885b ldrh r3, [r3, #2] - 80051d0: 8afa ldrh r2, [r7, #22] - 80051d2: 429a cmp r2, r3 - 80051d4: d001 beq.n 80051da - return 0; - 80051d6: 2300 movs r3, #0 - 80051d8: e000 b.n 80051dc - } - return 1; - 80051da: 2301 movs r3, #1 -} - 80051dc: 4618 mov r0, r3 - 80051de: 3718 adds r7, #24 - 80051e0: 46bd mov sp, r7 - 80051e2: bd80 pop {r7, pc} - 80051e4: 20006ab4 .word 0x20006ab4 - -080051e8 : - * @param rmem is the data portion of a struct mem as returned by a previous - * call to mem_malloc() - */ -void -mem_free(void *rmem) -{ - 80051e8: b580 push {r7, lr} - 80051ea: b084 sub sp, #16 - 80051ec: af00 add r7, sp, #0 - 80051ee: 6078 str r0, [r7, #4] - struct mem *mem; - LWIP_MEM_FREE_DECL_PROTECT(); - - if (rmem == NULL) { - 80051f0: 687b ldr r3, [r7, #4] - 80051f2: 2b00 cmp r3, #0 - 80051f4: d04c beq.n 8005290 - LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("mem_free(p == NULL) was called.\n")); - return; - } - if ((((mem_ptr_t)rmem) & (MEM_ALIGNMENT - 1)) != 0) { - 80051f6: 687b ldr r3, [r7, #4] - 80051f8: f003 0303 and.w r3, r3, #3 - 80051fc: 2b00 cmp r3, #0 - 80051fe: d007 beq.n 8005210 - LWIP_MEM_ILLEGAL_FREE("mem_free: sanity check alignment"); - 8005200: 4b25 ldr r3, [pc, #148] ; (8005298 ) - 8005202: f240 2273 movw r2, #627 ; 0x273 - 8005206: 4925 ldr r1, [pc, #148] ; (800529c ) - 8005208: 4825 ldr r0, [pc, #148] ; (80052a0 ) - 800520a: f00b ff4d bl 80110a8 - LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_free: sanity check alignment\n")); - /* protect mem stats from concurrent access */ - MEM_STATS_INC_LOCKED(illegal); - return; - 800520e: e040 b.n 8005292 - } - - /* Get the corresponding struct mem: */ - /* cast through void* to get rid of alignment warnings */ - mem = (struct mem *)(void *)((u8_t *)rmem - (SIZEOF_STRUCT_MEM + MEM_SANITY_OFFSET)); - 8005210: 687b ldr r3, [r7, #4] - 8005212: 3b08 subs r3, #8 - 8005214: 60fb str r3, [r7, #12] - - if ((u8_t *)mem < ram || (u8_t *)rmem + MIN_SIZE_ALIGNED > (u8_t *)ram_end) { - 8005216: 4b23 ldr r3, [pc, #140] ; (80052a4 ) - 8005218: 681b ldr r3, [r3, #0] - 800521a: 68fa ldr r2, [r7, #12] - 800521c: 429a cmp r2, r3 - 800521e: d306 bcc.n 800522e - 8005220: 687b ldr r3, [r7, #4] - 8005222: f103 020c add.w r2, r3, #12 - 8005226: 4b20 ldr r3, [pc, #128] ; (80052a8 ) - 8005228: 681b ldr r3, [r3, #0] - 800522a: 429a cmp r2, r3 - 800522c: d907 bls.n 800523e - LWIP_MEM_ILLEGAL_FREE("mem_free: illegal memory"); - 800522e: 4b1a ldr r3, [pc, #104] ; (8005298 ) - 8005230: f240 227f movw r2, #639 ; 0x27f - 8005234: 491d ldr r1, [pc, #116] ; (80052ac ) - 8005236: 481a ldr r0, [pc, #104] ; (80052a0 ) - 8005238: f00b ff36 bl 80110a8 - LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_free: illegal memory\n")); - /* protect mem stats from concurrent access */ - MEM_STATS_INC_LOCKED(illegal); - return; - 800523c: e029 b.n 8005292 - mem_overflow_check_element(mem); -#endif - /* protect the heap from concurrent access */ - LWIP_MEM_FREE_PROTECT(); - /* mem has to be in a used state */ - if (!mem->used) { - 800523e: 68fb ldr r3, [r7, #12] - 8005240: 791b ldrb r3, [r3, #4] - 8005242: 2b00 cmp r3, #0 - 8005244: d107 bne.n 8005256 - LWIP_MEM_ILLEGAL_FREE("mem_free: illegal memory: double free"); - 8005246: 4b14 ldr r3, [pc, #80] ; (8005298 ) - 8005248: f44f 7223 mov.w r2, #652 ; 0x28c - 800524c: 4918 ldr r1, [pc, #96] ; (80052b0 ) - 800524e: 4814 ldr r0, [pc, #80] ; (80052a0 ) - 8005250: f00b ff2a bl 80110a8 - LWIP_MEM_FREE_UNPROTECT(); - LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_free: illegal memory: double free?\n")); - /* protect mem stats from concurrent access */ - MEM_STATS_INC_LOCKED(illegal); - return; - 8005254: e01d b.n 8005292 - } - - if (!mem_link_valid(mem)) { - 8005256: 68f8 ldr r0, [r7, #12] - 8005258: f7ff ff8a bl 8005170 - 800525c: 4603 mov r3, r0 - 800525e: 2b00 cmp r3, #0 - 8005260: d107 bne.n 8005272 - LWIP_MEM_ILLEGAL_FREE("mem_free: illegal memory: non-linked: double free"); - 8005262: 4b0d ldr r3, [pc, #52] ; (8005298 ) - 8005264: f240 2295 movw r2, #661 ; 0x295 - 8005268: 4912 ldr r1, [pc, #72] ; (80052b4 ) - 800526a: 480d ldr r0, [pc, #52] ; (80052a0 ) - 800526c: f00b ff1c bl 80110a8 - LWIP_MEM_FREE_UNPROTECT(); - LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_free: illegal memory: non-linked: double free?\n")); - /* protect mem stats from concurrent access */ - MEM_STATS_INC_LOCKED(illegal); - return; - 8005270: e00f b.n 8005292 - } - - /* mem is now unused. */ - mem->used = 0; - 8005272: 68fb ldr r3, [r7, #12] - 8005274: 2200 movs r2, #0 - 8005276: 711a strb r2, [r3, #4] - - if (mem < lfree) { - 8005278: 4b0f ldr r3, [pc, #60] ; (80052b8 ) - 800527a: 681b ldr r3, [r3, #0] - 800527c: 68fa ldr r2, [r7, #12] - 800527e: 429a cmp r2, r3 - 8005280: d202 bcs.n 8005288 - /* the newly freed struct is now the lowest */ - lfree = mem; - 8005282: 4a0d ldr r2, [pc, #52] ; (80052b8 ) - 8005284: 68fb ldr r3, [r7, #12] - 8005286: 6013 str r3, [r2, #0] - } - - MEM_STATS_DEC_USED(used, mem->next - (mem_size_t)(((u8_t *)mem - ram))); - - /* finally, see if prev or next are free also */ - plug_holes(mem); - 8005288: 68f8 ldr r0, [r7, #12] - 800528a: f7ff fe93 bl 8004fb4 - 800528e: e000 b.n 8005292 - return; - 8005290: bf00 nop - MEM_SANITY(); -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT - mem_free_count = 1; -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - LWIP_MEM_FREE_UNPROTECT(); -} - 8005292: 3710 adds r7, #16 - 8005294: 46bd mov sp, r7 - 8005296: bd80 pop {r7, pc} - 8005298: 08015c34 .word 0x08015c34 - 800529c: 08015d08 .word 0x08015d08 - 80052a0: 08015c7c .word 0x08015c7c - 80052a4: 20006ab0 .word 0x20006ab0 - 80052a8: 20006ab4 .word 0x20006ab4 - 80052ac: 08015d2c .word 0x08015d2c - 80052b0: 08015d48 .word 0x08015d48 - 80052b4: 08015d70 .word 0x08015d70 - 80052b8: 20006ab8 .word 0x20006ab8 - -080052bc : - * or NULL if newsize is > old size, in which case rmem is NOT touched - * or freed! - */ -void * -mem_trim(void *rmem, mem_size_t new_size) -{ - 80052bc: b580 push {r7, lr} - 80052be: b088 sub sp, #32 - 80052c0: af00 add r7, sp, #0 - 80052c2: 6078 str r0, [r7, #4] - 80052c4: 460b mov r3, r1 - 80052c6: 807b strh r3, [r7, #2] - /* use the FREE_PROTECT here: it protects with sem OR SYS_ARCH_PROTECT */ - LWIP_MEM_FREE_DECL_PROTECT(); - - /* Expand the size of the allocated memory region so that we can - adjust for alignment. */ - newsize = (mem_size_t)LWIP_MEM_ALIGN_SIZE(new_size); - 80052c8: 887b ldrh r3, [r7, #2] - 80052ca: 3303 adds r3, #3 - 80052cc: b29b uxth r3, r3 - 80052ce: f023 0303 bic.w r3, r3, #3 - 80052d2: 83fb strh r3, [r7, #30] - if (newsize < MIN_SIZE_ALIGNED) { - 80052d4: 8bfb ldrh r3, [r7, #30] - 80052d6: 2b0b cmp r3, #11 - 80052d8: d801 bhi.n 80052de - /* every data block must be at least MIN_SIZE_ALIGNED long */ - newsize = MIN_SIZE_ALIGNED; - 80052da: 230c movs r3, #12 - 80052dc: 83fb strh r3, [r7, #30] - } -#if MEM_OVERFLOW_CHECK - newsize += MEM_SANITY_REGION_BEFORE_ALIGNED + MEM_SANITY_REGION_AFTER_ALIGNED; -#endif - if ((newsize > MEM_SIZE_ALIGNED) || (newsize < new_size)) { - 80052de: 8bfb ldrh r3, [r7, #30] - 80052e0: f5b3 6fc8 cmp.w r3, #1600 ; 0x640 - 80052e4: d803 bhi.n 80052ee - 80052e6: 8bfa ldrh r2, [r7, #30] - 80052e8: 887b ldrh r3, [r7, #2] - 80052ea: 429a cmp r2, r3 - 80052ec: d201 bcs.n 80052f2 - return NULL; - 80052ee: 2300 movs r3, #0 - 80052f0: e0cc b.n 800548c - } - - LWIP_ASSERT("mem_trim: legal memory", (u8_t *)rmem >= (u8_t *)ram && - 80052f2: 4b68 ldr r3, [pc, #416] ; (8005494 ) - 80052f4: 681b ldr r3, [r3, #0] - 80052f6: 687a ldr r2, [r7, #4] - 80052f8: 429a cmp r2, r3 - 80052fa: d304 bcc.n 8005306 - 80052fc: 4b66 ldr r3, [pc, #408] ; (8005498 ) - 80052fe: 681b ldr r3, [r3, #0] - 8005300: 687a ldr r2, [r7, #4] - 8005302: 429a cmp r2, r3 - 8005304: d306 bcc.n 8005314 - 8005306: 4b65 ldr r3, [pc, #404] ; (800549c ) - 8005308: f240 22d1 movw r2, #721 ; 0x2d1 - 800530c: 4964 ldr r1, [pc, #400] ; (80054a0 ) - 800530e: 4865 ldr r0, [pc, #404] ; (80054a4 ) - 8005310: f00b feca bl 80110a8 - (u8_t *)rmem < (u8_t *)ram_end); - - if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) { - 8005314: 4b5f ldr r3, [pc, #380] ; (8005494 ) - 8005316: 681b ldr r3, [r3, #0] - 8005318: 687a ldr r2, [r7, #4] - 800531a: 429a cmp r2, r3 - 800531c: d304 bcc.n 8005328 - 800531e: 4b5e ldr r3, [pc, #376] ; (8005498 ) - 8005320: 681b ldr r3, [r3, #0] - 8005322: 687a ldr r2, [r7, #4] - 8005324: 429a cmp r2, r3 - 8005326: d301 bcc.n 800532c - LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_trim: illegal memory\n")); - /* protect mem stats from concurrent access */ - MEM_STATS_INC_LOCKED(illegal); - return rmem; - 8005328: 687b ldr r3, [r7, #4] - 800532a: e0af b.n 800548c - } - /* Get the corresponding struct mem ... */ - /* cast through void* to get rid of alignment warnings */ - mem = (struct mem *)(void *)((u8_t *)rmem - (SIZEOF_STRUCT_MEM + MEM_SANITY_OFFSET)); - 800532c: 687b ldr r3, [r7, #4] - 800532e: 3b08 subs r3, #8 - 8005330: 61bb str r3, [r7, #24] -#if MEM_OVERFLOW_CHECK - mem_overflow_check_element(mem); -#endif - /* ... and its offset pointer */ - ptr = mem_to_ptr(mem); - 8005332: 69b8 ldr r0, [r7, #24] - 8005334: f7ff fe2c bl 8004f90 - 8005338: 4603 mov r3, r0 - 800533a: 82fb strh r3, [r7, #22] - - size = (mem_size_t)((mem_size_t)(mem->next - ptr) - (SIZEOF_STRUCT_MEM + MEM_SANITY_OVERHEAD)); - 800533c: 69bb ldr r3, [r7, #24] - 800533e: 881a ldrh r2, [r3, #0] - 8005340: 8afb ldrh r3, [r7, #22] - 8005342: 1ad3 subs r3, r2, r3 - 8005344: b29b uxth r3, r3 - 8005346: 3b08 subs r3, #8 - 8005348: 82bb strh r3, [r7, #20] - LWIP_ASSERT("mem_trim can only shrink memory", newsize <= size); - 800534a: 8bfa ldrh r2, [r7, #30] - 800534c: 8abb ldrh r3, [r7, #20] - 800534e: 429a cmp r2, r3 - 8005350: d906 bls.n 8005360 - 8005352: 4b52 ldr r3, [pc, #328] ; (800549c ) - 8005354: f44f 7239 mov.w r2, #740 ; 0x2e4 - 8005358: 4953 ldr r1, [pc, #332] ; (80054a8 ) - 800535a: 4852 ldr r0, [pc, #328] ; (80054a4 ) - 800535c: f00b fea4 bl 80110a8 - if (newsize > size) { - 8005360: 8bfa ldrh r2, [r7, #30] - 8005362: 8abb ldrh r3, [r7, #20] - 8005364: 429a cmp r2, r3 - 8005366: d901 bls.n 800536c - /* not supported */ - return NULL; - 8005368: 2300 movs r3, #0 - 800536a: e08f b.n 800548c - } - if (newsize == size) { - 800536c: 8bfa ldrh r2, [r7, #30] - 800536e: 8abb ldrh r3, [r7, #20] - 8005370: 429a cmp r2, r3 - 8005372: d101 bne.n 8005378 - /* No change in size, simply return */ - return rmem; - 8005374: 687b ldr r3, [r7, #4] - 8005376: e089 b.n 800548c - } - - /* protect the heap from concurrent access */ - LWIP_MEM_FREE_PROTECT(); - - mem2 = ptr_to_mem(mem->next); - 8005378: 69bb ldr r3, [r7, #24] - 800537a: 881b ldrh r3, [r3, #0] - 800537c: 4618 mov r0, r3 - 800537e: f7ff fdf5 bl 8004f6c - 8005382: 6138 str r0, [r7, #16] - if (mem2->used == 0) { - 8005384: 693b ldr r3, [r7, #16] - 8005386: 791b ldrb r3, [r3, #4] - 8005388: 2b00 cmp r3, #0 - 800538a: d13f bne.n 800540c - /* The next struct is unused, we can simply move it at little */ - mem_size_t next; - LWIP_ASSERT("invalid next ptr", mem->next != MEM_SIZE_ALIGNED); - 800538c: 69bb ldr r3, [r7, #24] - 800538e: 881b ldrh r3, [r3, #0] - 8005390: f5b3 6fc8 cmp.w r3, #1600 ; 0x640 - 8005394: d106 bne.n 80053a4 - 8005396: 4b41 ldr r3, [pc, #260] ; (800549c ) - 8005398: f240 22f5 movw r2, #757 ; 0x2f5 - 800539c: 4943 ldr r1, [pc, #268] ; (80054ac ) - 800539e: 4841 ldr r0, [pc, #260] ; (80054a4 ) - 80053a0: f00b fe82 bl 80110a8 - /* remember the old next pointer */ - next = mem2->next; - 80053a4: 693b ldr r3, [r7, #16] - 80053a6: 881b ldrh r3, [r3, #0] - 80053a8: 81bb strh r3, [r7, #12] - /* create new struct mem which is moved directly after the shrinked mem */ - ptr2 = (mem_size_t)(ptr + SIZEOF_STRUCT_MEM + newsize); - 80053aa: 8afa ldrh r2, [r7, #22] - 80053ac: 8bfb ldrh r3, [r7, #30] - 80053ae: 4413 add r3, r2 - 80053b0: b29b uxth r3, r3 - 80053b2: 3308 adds r3, #8 - 80053b4: 81fb strh r3, [r7, #14] - if (lfree == mem2) { - 80053b6: 4b3e ldr r3, [pc, #248] ; (80054b0 ) - 80053b8: 681b ldr r3, [r3, #0] - 80053ba: 693a ldr r2, [r7, #16] - 80053bc: 429a cmp r2, r3 - 80053be: d106 bne.n 80053ce - lfree = ptr_to_mem(ptr2); - 80053c0: 89fb ldrh r3, [r7, #14] - 80053c2: 4618 mov r0, r3 - 80053c4: f7ff fdd2 bl 8004f6c - 80053c8: 4603 mov r3, r0 - 80053ca: 4a39 ldr r2, [pc, #228] ; (80054b0 ) - 80053cc: 6013 str r3, [r2, #0] - } - mem2 = ptr_to_mem(ptr2); - 80053ce: 89fb ldrh r3, [r7, #14] - 80053d0: 4618 mov r0, r3 - 80053d2: f7ff fdcb bl 8004f6c - 80053d6: 6138 str r0, [r7, #16] - mem2->used = 0; - 80053d8: 693b ldr r3, [r7, #16] - 80053da: 2200 movs r2, #0 - 80053dc: 711a strb r2, [r3, #4] - /* restore the next pointer */ - mem2->next = next; - 80053de: 693b ldr r3, [r7, #16] - 80053e0: 89ba ldrh r2, [r7, #12] - 80053e2: 801a strh r2, [r3, #0] - /* link it back to mem */ - mem2->prev = ptr; - 80053e4: 693b ldr r3, [r7, #16] - 80053e6: 8afa ldrh r2, [r7, #22] - 80053e8: 805a strh r2, [r3, #2] - /* link mem to it */ - mem->next = ptr2; - 80053ea: 69bb ldr r3, [r7, #24] - 80053ec: 89fa ldrh r2, [r7, #14] - 80053ee: 801a strh r2, [r3, #0] - /* last thing to restore linked list: as we have moved mem2, - * let 'mem2->next->prev' point to mem2 again. but only if mem2->next is not - * the end of the heap */ - if (mem2->next != MEM_SIZE_ALIGNED) { - 80053f0: 693b ldr r3, [r7, #16] - 80053f2: 881b ldrh r3, [r3, #0] - 80053f4: f5b3 6fc8 cmp.w r3, #1600 ; 0x640 - 80053f8: d047 beq.n 800548a - ptr_to_mem(mem2->next)->prev = ptr2; - 80053fa: 693b ldr r3, [r7, #16] - 80053fc: 881b ldrh r3, [r3, #0] - 80053fe: 4618 mov r0, r3 - 8005400: f7ff fdb4 bl 8004f6c - 8005404: 4602 mov r2, r0 - 8005406: 89fb ldrh r3, [r7, #14] - 8005408: 8053 strh r3, [r2, #2] - 800540a: e03e b.n 800548a - } - MEM_STATS_DEC_USED(used, (size - newsize)); - /* no need to plug holes, we've already done that */ - } else if (newsize + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED <= size) { - 800540c: 8bfb ldrh r3, [r7, #30] - 800540e: f103 0214 add.w r2, r3, #20 - 8005412: 8abb ldrh r3, [r7, #20] - 8005414: 429a cmp r2, r3 - 8005416: d838 bhi.n 800548a - * Old size ('size') must be big enough to contain at least 'newsize' plus a struct mem - * ('SIZEOF_STRUCT_MEM') with some data ('MIN_SIZE_ALIGNED'). - * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty - * region that couldn't hold data, but when mem->next gets freed, - * the 2 regions would be combined, resulting in more free memory */ - ptr2 = (mem_size_t)(ptr + SIZEOF_STRUCT_MEM + newsize); - 8005418: 8afa ldrh r2, [r7, #22] - 800541a: 8bfb ldrh r3, [r7, #30] - 800541c: 4413 add r3, r2 - 800541e: b29b uxth r3, r3 - 8005420: 3308 adds r3, #8 - 8005422: 81fb strh r3, [r7, #14] - LWIP_ASSERT("invalid next ptr", mem->next != MEM_SIZE_ALIGNED); - 8005424: 69bb ldr r3, [r7, #24] - 8005426: 881b ldrh r3, [r3, #0] - 8005428: f5b3 6fc8 cmp.w r3, #1600 ; 0x640 - 800542c: d106 bne.n 800543c - 800542e: 4b1b ldr r3, [pc, #108] ; (800549c ) - 8005430: f240 3216 movw r2, #790 ; 0x316 - 8005434: 491d ldr r1, [pc, #116] ; (80054ac ) - 8005436: 481b ldr r0, [pc, #108] ; (80054a4 ) - 8005438: f00b fe36 bl 80110a8 - mem2 = ptr_to_mem(ptr2); - 800543c: 89fb ldrh r3, [r7, #14] - 800543e: 4618 mov r0, r3 - 8005440: f7ff fd94 bl 8004f6c - 8005444: 6138 str r0, [r7, #16] - if (mem2 < lfree) { - 8005446: 4b1a ldr r3, [pc, #104] ; (80054b0 ) - 8005448: 681b ldr r3, [r3, #0] - 800544a: 693a ldr r2, [r7, #16] - 800544c: 429a cmp r2, r3 - 800544e: d202 bcs.n 8005456 - lfree = mem2; - 8005450: 4a17 ldr r2, [pc, #92] ; (80054b0 ) - 8005452: 693b ldr r3, [r7, #16] - 8005454: 6013 str r3, [r2, #0] - } - mem2->used = 0; - 8005456: 693b ldr r3, [r7, #16] - 8005458: 2200 movs r2, #0 - 800545a: 711a strb r2, [r3, #4] - mem2->next = mem->next; - 800545c: 69bb ldr r3, [r7, #24] - 800545e: 881a ldrh r2, [r3, #0] - 8005460: 693b ldr r3, [r7, #16] - 8005462: 801a strh r2, [r3, #0] - mem2->prev = ptr; - 8005464: 693b ldr r3, [r7, #16] - 8005466: 8afa ldrh r2, [r7, #22] - 8005468: 805a strh r2, [r3, #2] - mem->next = ptr2; - 800546a: 69bb ldr r3, [r7, #24] - 800546c: 89fa ldrh r2, [r7, #14] - 800546e: 801a strh r2, [r3, #0] - if (mem2->next != MEM_SIZE_ALIGNED) { - 8005470: 693b ldr r3, [r7, #16] - 8005472: 881b ldrh r3, [r3, #0] - 8005474: f5b3 6fc8 cmp.w r3, #1600 ; 0x640 - 8005478: d007 beq.n 800548a - ptr_to_mem(mem2->next)->prev = ptr2; - 800547a: 693b ldr r3, [r7, #16] - 800547c: 881b ldrh r3, [r3, #0] - 800547e: 4618 mov r0, r3 - 8005480: f7ff fd74 bl 8004f6c - 8005484: 4602 mov r2, r0 - 8005486: 89fb ldrh r3, [r7, #14] - 8005488: 8053 strh r3, [r2, #2] - MEM_SANITY(); -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT - mem_free_count = 1; -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - LWIP_MEM_FREE_UNPROTECT(); - return rmem; - 800548a: 687b ldr r3, [r7, #4] -} - 800548c: 4618 mov r0, r3 - 800548e: 3720 adds r7, #32 - 8005490: 46bd mov sp, r7 - 8005492: bd80 pop {r7, pc} - 8005494: 20006ab0 .word 0x20006ab0 - 8005498: 20006ab4 .word 0x20006ab4 - 800549c: 08015c34 .word 0x08015c34 - 80054a0: 08015da4 .word 0x08015da4 - 80054a4: 08015c7c .word 0x08015c7c - 80054a8: 08015dbc .word 0x08015dbc - 80054ac: 08015ddc .word 0x08015ddc - 80054b0: 20006ab8 .word 0x20006ab8 - -080054b4 : - * - * Note that the returned value will always be aligned (as defined by MEM_ALIGNMENT). - */ -void * -mem_malloc(mem_size_t size_in) -{ - 80054b4: b580 push {r7, lr} - 80054b6: b088 sub sp, #32 - 80054b8: af00 add r7, sp, #0 - 80054ba: 4603 mov r3, r0 - 80054bc: 80fb strh r3, [r7, #6] -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT - u8_t local_mem_free_count = 0; -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - LWIP_MEM_ALLOC_DECL_PROTECT(); - - if (size_in == 0) { - 80054be: 88fb ldrh r3, [r7, #6] - 80054c0: 2b00 cmp r3, #0 - 80054c2: d101 bne.n 80054c8 - return NULL; - 80054c4: 2300 movs r3, #0 - 80054c6: e0d9 b.n 800567c - } - - /* Expand the size of the allocated memory region so that we can - adjust for alignment. */ - size = (mem_size_t)LWIP_MEM_ALIGN_SIZE(size_in); - 80054c8: 88fb ldrh r3, [r7, #6] - 80054ca: 3303 adds r3, #3 - 80054cc: b29b uxth r3, r3 - 80054ce: f023 0303 bic.w r3, r3, #3 - 80054d2: 83bb strh r3, [r7, #28] - if (size < MIN_SIZE_ALIGNED) { - 80054d4: 8bbb ldrh r3, [r7, #28] - 80054d6: 2b0b cmp r3, #11 - 80054d8: d801 bhi.n 80054de - /* every data block must be at least MIN_SIZE_ALIGNED long */ - size = MIN_SIZE_ALIGNED; - 80054da: 230c movs r3, #12 - 80054dc: 83bb strh r3, [r7, #28] - } -#if MEM_OVERFLOW_CHECK - size += MEM_SANITY_REGION_BEFORE_ALIGNED + MEM_SANITY_REGION_AFTER_ALIGNED; -#endif - if ((size > MEM_SIZE_ALIGNED) || (size < size_in)) { - 80054de: 8bbb ldrh r3, [r7, #28] - 80054e0: f5b3 6fc8 cmp.w r3, #1600 ; 0x640 - 80054e4: d803 bhi.n 80054ee - 80054e6: 8bba ldrh r2, [r7, #28] - 80054e8: 88fb ldrh r3, [r7, #6] - 80054ea: 429a cmp r2, r3 - 80054ec: d201 bcs.n 80054f2 - return NULL; - 80054ee: 2300 movs r3, #0 - 80054f0: e0c4 b.n 800567c -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - - /* Scan through the heap searching for a free block that is big enough, - * beginning with the lowest free block. - */ - for (ptr = mem_to_ptr(lfree); ptr < MEM_SIZE_ALIGNED - size; - 80054f2: 4b64 ldr r3, [pc, #400] ; (8005684 ) - 80054f4: 681b ldr r3, [r3, #0] - 80054f6: 4618 mov r0, r3 - 80054f8: f7ff fd4a bl 8004f90 - 80054fc: 4603 mov r3, r0 - 80054fe: 83fb strh r3, [r7, #30] - 8005500: e0b4 b.n 800566c - ptr = ptr_to_mem(ptr)->next) { - mem = ptr_to_mem(ptr); - 8005502: 8bfb ldrh r3, [r7, #30] - 8005504: 4618 mov r0, r3 - 8005506: f7ff fd31 bl 8004f6c - 800550a: 6178 str r0, [r7, #20] - local_mem_free_count = 1; - break; - } -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - - if ((!mem->used) && - 800550c: 697b ldr r3, [r7, #20] - 800550e: 791b ldrb r3, [r3, #4] - 8005510: 2b00 cmp r3, #0 - 8005512: f040 80a4 bne.w 800565e - (mem->next - (ptr + SIZEOF_STRUCT_MEM)) >= size) { - 8005516: 697b ldr r3, [r7, #20] - 8005518: 881b ldrh r3, [r3, #0] - 800551a: 461a mov r2, r3 - 800551c: 8bfb ldrh r3, [r7, #30] - 800551e: 1ad3 subs r3, r2, r3 - 8005520: f1a3 0208 sub.w r2, r3, #8 - 8005524: 8bbb ldrh r3, [r7, #28] - if ((!mem->used) && - 8005526: 429a cmp r2, r3 - 8005528: f0c0 8099 bcc.w 800565e - /* mem is not used and at least perfect fit is possible: - * mem->next - (ptr + SIZEOF_STRUCT_MEM) gives us the 'user data size' of mem */ - - if (mem->next - (ptr + SIZEOF_STRUCT_MEM) >= (size + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED)) { - 800552c: 697b ldr r3, [r7, #20] - 800552e: 881b ldrh r3, [r3, #0] - 8005530: 461a mov r2, r3 - 8005532: 8bfb ldrh r3, [r7, #30] - 8005534: 1ad3 subs r3, r2, r3 - 8005536: f1a3 0208 sub.w r2, r3, #8 - 800553a: 8bbb ldrh r3, [r7, #28] - 800553c: 3314 adds r3, #20 - 800553e: 429a cmp r2, r3 - 8005540: d333 bcc.n 80055aa - * struct mem would fit in but no data between mem2 and mem2->next - * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty - * region that couldn't hold data, but when mem->next gets freed, - * the 2 regions would be combined, resulting in more free memory - */ - ptr2 = (mem_size_t)(ptr + SIZEOF_STRUCT_MEM + size); - 8005542: 8bfa ldrh r2, [r7, #30] - 8005544: 8bbb ldrh r3, [r7, #28] - 8005546: 4413 add r3, r2 - 8005548: b29b uxth r3, r3 - 800554a: 3308 adds r3, #8 - 800554c: 827b strh r3, [r7, #18] - LWIP_ASSERT("invalid next ptr",ptr2 != MEM_SIZE_ALIGNED); - 800554e: 8a7b ldrh r3, [r7, #18] - 8005550: f5b3 6fc8 cmp.w r3, #1600 ; 0x640 - 8005554: d106 bne.n 8005564 - 8005556: 4b4c ldr r3, [pc, #304] ; (8005688 ) - 8005558: f240 3287 movw r2, #903 ; 0x387 - 800555c: 494b ldr r1, [pc, #300] ; (800568c ) - 800555e: 484c ldr r0, [pc, #304] ; (8005690 ) - 8005560: f00b fda2 bl 80110a8 - /* create mem2 struct */ - mem2 = ptr_to_mem(ptr2); - 8005564: 8a7b ldrh r3, [r7, #18] - 8005566: 4618 mov r0, r3 - 8005568: f7ff fd00 bl 8004f6c - 800556c: 60f8 str r0, [r7, #12] - mem2->used = 0; - 800556e: 68fb ldr r3, [r7, #12] - 8005570: 2200 movs r2, #0 - 8005572: 711a strb r2, [r3, #4] - mem2->next = mem->next; - 8005574: 697b ldr r3, [r7, #20] - 8005576: 881a ldrh r2, [r3, #0] - 8005578: 68fb ldr r3, [r7, #12] - 800557a: 801a strh r2, [r3, #0] - mem2->prev = ptr; - 800557c: 68fb ldr r3, [r7, #12] - 800557e: 8bfa ldrh r2, [r7, #30] - 8005580: 805a strh r2, [r3, #2] - /* and insert it between mem and mem->next */ - mem->next = ptr2; - 8005582: 697b ldr r3, [r7, #20] - 8005584: 8a7a ldrh r2, [r7, #18] - 8005586: 801a strh r2, [r3, #0] - mem->used = 1; - 8005588: 697b ldr r3, [r7, #20] - 800558a: 2201 movs r2, #1 - 800558c: 711a strb r2, [r3, #4] - - if (mem2->next != MEM_SIZE_ALIGNED) { - 800558e: 68fb ldr r3, [r7, #12] - 8005590: 881b ldrh r3, [r3, #0] - 8005592: f5b3 6fc8 cmp.w r3, #1600 ; 0x640 - 8005596: d00b beq.n 80055b0 - ptr_to_mem(mem2->next)->prev = ptr2; - 8005598: 68fb ldr r3, [r7, #12] - 800559a: 881b ldrh r3, [r3, #0] - 800559c: 4618 mov r0, r3 - 800559e: f7ff fce5 bl 8004f6c - 80055a2: 4602 mov r2, r0 - 80055a4: 8a7b ldrh r3, [r7, #18] - 80055a6: 8053 strh r3, [r2, #2] - 80055a8: e002 b.n 80055b0 - * take care of this). - * -> near fit or exact fit: do not split, no mem2 creation - * also can't move mem->next directly behind mem, since mem->next - * will always be used at this point! - */ - mem->used = 1; - 80055aa: 697b ldr r3, [r7, #20] - 80055ac: 2201 movs r2, #1 - 80055ae: 711a strb r2, [r3, #4] - MEM_STATS_INC_USED(used, mem->next - mem_to_ptr(mem)); - } -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT -mem_malloc_adjust_lfree: -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - if (mem == lfree) { - 80055b0: 4b34 ldr r3, [pc, #208] ; (8005684 ) - 80055b2: 681b ldr r3, [r3, #0] - 80055b4: 697a ldr r2, [r7, #20] - 80055b6: 429a cmp r2, r3 - 80055b8: d127 bne.n 800560a - struct mem *cur = lfree; - 80055ba: 4b32 ldr r3, [pc, #200] ; (8005684 ) - 80055bc: 681b ldr r3, [r3, #0] - 80055be: 61bb str r3, [r7, #24] - /* Find next free block after mem and update lowest free pointer */ - while (cur->used && cur != ram_end) { - 80055c0: e005 b.n 80055ce - /* If mem_free or mem_trim have run, we have to restart since they - could have altered our current struct mem or lfree. */ - goto mem_malloc_adjust_lfree; - } -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - cur = ptr_to_mem(cur->next); - 80055c2: 69bb ldr r3, [r7, #24] - 80055c4: 881b ldrh r3, [r3, #0] - 80055c6: 4618 mov r0, r3 - 80055c8: f7ff fcd0 bl 8004f6c - 80055cc: 61b8 str r0, [r7, #24] - while (cur->used && cur != ram_end) { - 80055ce: 69bb ldr r3, [r7, #24] - 80055d0: 791b ldrb r3, [r3, #4] - 80055d2: 2b00 cmp r3, #0 - 80055d4: d004 beq.n 80055e0 - 80055d6: 4b2f ldr r3, [pc, #188] ; (8005694 ) - 80055d8: 681b ldr r3, [r3, #0] - 80055da: 69ba ldr r2, [r7, #24] - 80055dc: 429a cmp r2, r3 - 80055de: d1f0 bne.n 80055c2 - } - lfree = cur; - 80055e0: 4a28 ldr r2, [pc, #160] ; (8005684 ) - 80055e2: 69bb ldr r3, [r7, #24] - 80055e4: 6013 str r3, [r2, #0] - LWIP_ASSERT("mem_malloc: !lfree->used", ((lfree == ram_end) || (!lfree->used))); - 80055e6: 4b27 ldr r3, [pc, #156] ; (8005684 ) - 80055e8: 681a ldr r2, [r3, #0] - 80055ea: 4b2a ldr r3, [pc, #168] ; (8005694 ) - 80055ec: 681b ldr r3, [r3, #0] - 80055ee: 429a cmp r2, r3 - 80055f0: d00b beq.n 800560a - 80055f2: 4b24 ldr r3, [pc, #144] ; (8005684 ) - 80055f4: 681b ldr r3, [r3, #0] - 80055f6: 791b ldrb r3, [r3, #4] - 80055f8: 2b00 cmp r3, #0 - 80055fa: d006 beq.n 800560a - 80055fc: 4b22 ldr r3, [pc, #136] ; (8005688 ) - 80055fe: f240 32b5 movw r2, #949 ; 0x3b5 - 8005602: 4925 ldr r1, [pc, #148] ; (8005698 ) - 8005604: 4822 ldr r0, [pc, #136] ; (8005690 ) - 8005606: f00b fd4f bl 80110a8 - } - LWIP_MEM_ALLOC_UNPROTECT(); - sys_mutex_unlock(&mem_mutex); - LWIP_ASSERT("mem_malloc: allocated memory not above ram_end.", - 800560a: 8bba ldrh r2, [r7, #28] - 800560c: 697b ldr r3, [r7, #20] - 800560e: 4413 add r3, r2 - 8005610: 3308 adds r3, #8 - 8005612: 4a20 ldr r2, [pc, #128] ; (8005694 ) - 8005614: 6812 ldr r2, [r2, #0] - 8005616: 4293 cmp r3, r2 - 8005618: d906 bls.n 8005628 - 800561a: 4b1b ldr r3, [pc, #108] ; (8005688 ) - 800561c: f240 32b9 movw r2, #953 ; 0x3b9 - 8005620: 491e ldr r1, [pc, #120] ; (800569c ) - 8005622: 481b ldr r0, [pc, #108] ; (8005690 ) - 8005624: f00b fd40 bl 80110a8 - (mem_ptr_t)mem + SIZEOF_STRUCT_MEM + size <= (mem_ptr_t)ram_end); - LWIP_ASSERT("mem_malloc: allocated memory properly aligned.", - 8005628: 697b ldr r3, [r7, #20] - 800562a: f003 0303 and.w r3, r3, #3 - 800562e: 2b00 cmp r3, #0 - 8005630: d006 beq.n 8005640 - 8005632: 4b15 ldr r3, [pc, #84] ; (8005688 ) - 8005634: f240 32bb movw r2, #955 ; 0x3bb - 8005638: 4919 ldr r1, [pc, #100] ; (80056a0 ) - 800563a: 4815 ldr r0, [pc, #84] ; (8005690 ) - 800563c: f00b fd34 bl 80110a8 - ((mem_ptr_t)mem + SIZEOF_STRUCT_MEM) % MEM_ALIGNMENT == 0); - LWIP_ASSERT("mem_malloc: sanity check alignment", - 8005640: 697b ldr r3, [r7, #20] - 8005642: f003 0303 and.w r3, r3, #3 - 8005646: 2b00 cmp r3, #0 - 8005648: d006 beq.n 8005658 - 800564a: 4b0f ldr r3, [pc, #60] ; (8005688 ) - 800564c: f240 32bd movw r2, #957 ; 0x3bd - 8005650: 4914 ldr r1, [pc, #80] ; (80056a4 ) - 8005652: 480f ldr r0, [pc, #60] ; (8005690 ) - 8005654: f00b fd28 bl 80110a8 - -#if MEM_OVERFLOW_CHECK - mem_overflow_init_element(mem, size_in); -#endif - MEM_SANITY(); - return (u8_t *)mem + SIZEOF_STRUCT_MEM + MEM_SANITY_OFFSET; - 8005658: 697b ldr r3, [r7, #20] - 800565a: 3308 adds r3, #8 - 800565c: e00e b.n 800567c - ptr = ptr_to_mem(ptr)->next) { - 800565e: 8bfb ldrh r3, [r7, #30] - 8005660: 4618 mov r0, r3 - 8005662: f7ff fc83 bl 8004f6c - 8005666: 4603 mov r3, r0 - 8005668: 881b ldrh r3, [r3, #0] - 800566a: 83fb strh r3, [r7, #30] - for (ptr = mem_to_ptr(lfree); ptr < MEM_SIZE_ALIGNED - size; - 800566c: 8bfa ldrh r2, [r7, #30] - 800566e: 8bbb ldrh r3, [r7, #28] - 8005670: f5c3 63c8 rsb r3, r3, #1600 ; 0x640 - 8005674: 429a cmp r2, r3 - 8005676: f4ff af44 bcc.w 8005502 -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - MEM_STATS_INC(err); - LWIP_MEM_ALLOC_UNPROTECT(); - sys_mutex_unlock(&mem_mutex); - LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("mem_malloc: could not allocate %"S16_F" bytes\n", (s16_t)size)); - return NULL; - 800567a: 2300 movs r3, #0 -} - 800567c: 4618 mov r0, r3 - 800567e: 3720 adds r7, #32 - 8005680: 46bd mov sp, r7 - 8005682: bd80 pop {r7, pc} - 8005684: 20006ab8 .word 0x20006ab8 - 8005688: 08015c34 .word 0x08015c34 - 800568c: 08015ddc .word 0x08015ddc - 8005690: 08015c7c .word 0x08015c7c - 8005694: 20006ab4 .word 0x20006ab4 - 8005698: 08015df0 .word 0x08015df0 - 800569c: 08015e0c .word 0x08015e0c - 80056a0: 08015e3c .word 0x08015e3c - 80056a4: 08015e6c .word 0x08015e6c - -080056a8 : - * - * @param desc pool to initialize - */ -void -memp_init_pool(const struct memp_desc *desc) -{ - 80056a8: b480 push {r7} - 80056aa: b085 sub sp, #20 - 80056ac: af00 add r7, sp, #0 - 80056ae: 6078 str r0, [r7, #4] - LWIP_UNUSED_ARG(desc); -#else - int i; - struct memp *memp; - - *desc->tab = NULL; - 80056b0: 687b ldr r3, [r7, #4] - 80056b2: 689b ldr r3, [r3, #8] - 80056b4: 2200 movs r2, #0 - 80056b6: 601a str r2, [r3, #0] - memp = (struct memp *)LWIP_MEM_ALIGN(desc->base); - 80056b8: 687b ldr r3, [r7, #4] - 80056ba: 685b ldr r3, [r3, #4] - 80056bc: 3303 adds r3, #3 - 80056be: f023 0303 bic.w r3, r3, #3 - 80056c2: 60bb str r3, [r7, #8] - + MEM_SANITY_REGION_AFTER_ALIGNED -#endif - )); -#endif - /* create a linked list of memp elements */ - for (i = 0; i < desc->num; ++i) { - 80056c4: 2300 movs r3, #0 - 80056c6: 60fb str r3, [r7, #12] - 80056c8: e011 b.n 80056ee - memp->next = *desc->tab; - 80056ca: 687b ldr r3, [r7, #4] - 80056cc: 689b ldr r3, [r3, #8] - 80056ce: 681a ldr r2, [r3, #0] - 80056d0: 68bb ldr r3, [r7, #8] - 80056d2: 601a str r2, [r3, #0] - *desc->tab = memp; - 80056d4: 687b ldr r3, [r7, #4] - 80056d6: 689b ldr r3, [r3, #8] - 80056d8: 68ba ldr r2, [r7, #8] - 80056da: 601a str r2, [r3, #0] -#if MEMP_OVERFLOW_CHECK - memp_overflow_init_element(memp, desc); -#endif /* MEMP_OVERFLOW_CHECK */ - /* cast through void* to get rid of alignment warnings */ - memp = (struct memp *)(void *)((u8_t *)memp + MEMP_SIZE + desc->size - 80056dc: 687b ldr r3, [r7, #4] - 80056de: 881b ldrh r3, [r3, #0] - 80056e0: 461a mov r2, r3 - 80056e2: 68bb ldr r3, [r7, #8] - 80056e4: 4413 add r3, r2 - 80056e6: 60bb str r3, [r7, #8] - for (i = 0; i < desc->num; ++i) { - 80056e8: 68fb ldr r3, [r7, #12] - 80056ea: 3301 adds r3, #1 - 80056ec: 60fb str r3, [r7, #12] - 80056ee: 687b ldr r3, [r7, #4] - 80056f0: 885b ldrh r3, [r3, #2] - 80056f2: 461a mov r2, r3 - 80056f4: 68fb ldr r3, [r7, #12] - 80056f6: 4293 cmp r3, r2 - 80056f8: dbe7 blt.n 80056ca -#endif /* !MEMP_MEM_MALLOC */ - -#if MEMP_STATS && (defined(LWIP_DEBUG) || LWIP_STATS_DISPLAY) - desc->stats->name = desc->desc; -#endif /* MEMP_STATS && (defined(LWIP_DEBUG) || LWIP_STATS_DISPLAY) */ -} - 80056fa: bf00 nop - 80056fc: bf00 nop - 80056fe: 3714 adds r7, #20 - 8005700: 46bd mov sp, r7 - 8005702: f85d 7b04 ldr.w r7, [sp], #4 - 8005706: 4770 bx lr - -08005708 : - * - * Carves out memp_memory into linked lists for each pool-type. - */ -void -memp_init(void) -{ - 8005708: b580 push {r7, lr} - 800570a: b082 sub sp, #8 - 800570c: af00 add r7, sp, #0 - u16_t i; - - /* for every pool: */ - for (i = 0; i < LWIP_ARRAYSIZE(memp_pools); i++) { - 800570e: 2300 movs r3, #0 - 8005710: 80fb strh r3, [r7, #6] - 8005712: e009 b.n 8005728 - memp_init_pool(memp_pools[i]); - 8005714: 88fb ldrh r3, [r7, #6] - 8005716: 4a08 ldr r2, [pc, #32] ; (8005738 ) - 8005718: f852 3023 ldr.w r3, [r2, r3, lsl #2] - 800571c: 4618 mov r0, r3 - 800571e: f7ff ffc3 bl 80056a8 - for (i = 0; i < LWIP_ARRAYSIZE(memp_pools); i++) { - 8005722: 88fb ldrh r3, [r7, #6] - 8005724: 3301 adds r3, #1 - 8005726: 80fb strh r3, [r7, #6] - 8005728: 88fb ldrh r3, [r7, #6] - 800572a: 2b08 cmp r3, #8 - 800572c: d9f2 bls.n 8005714 - -#if MEMP_OVERFLOW_CHECK >= 2 - /* check everything a first time to see if it worked */ - memp_overflow_check_all(); -#endif /* MEMP_OVERFLOW_CHECK >= 2 */ -} - 800572e: bf00 nop - 8005730: bf00 nop - 8005732: 3708 adds r7, #8 - 8005734: 46bd mov sp, r7 - 8005736: bd80 pop {r7, pc} - 8005738: 08018a58 .word 0x08018a58 - -0800573c : -#if !MEMP_OVERFLOW_CHECK -do_memp_malloc_pool(const struct memp_desc *desc) -#else -do_memp_malloc_pool_fn(const struct memp_desc *desc, const char *file, const int line) -#endif -{ - 800573c: b580 push {r7, lr} - 800573e: b084 sub sp, #16 - 8005740: af00 add r7, sp, #0 - 8005742: 6078 str r0, [r7, #4] - memp = (struct memp *)mem_malloc(MEMP_SIZE + MEMP_ALIGN_SIZE(desc->size)); - SYS_ARCH_PROTECT(old_level); -#else /* MEMP_MEM_MALLOC */ - SYS_ARCH_PROTECT(old_level); - - memp = *desc->tab; - 8005744: 687b ldr r3, [r7, #4] - 8005746: 689b ldr r3, [r3, #8] - 8005748: 681b ldr r3, [r3, #0] - 800574a: 60fb str r3, [r7, #12] -#endif /* MEMP_MEM_MALLOC */ - - if (memp != NULL) { - 800574c: 68fb ldr r3, [r7, #12] - 800574e: 2b00 cmp r3, #0 - 8005750: d012 beq.n 8005778 -#if !MEMP_MEM_MALLOC -#if MEMP_OVERFLOW_CHECK == 1 - memp_overflow_check_element(memp, desc); -#endif /* MEMP_OVERFLOW_CHECK */ - - *desc->tab = memp->next; - 8005752: 687b ldr r3, [r7, #4] - 8005754: 689b ldr r3, [r3, #8] - 8005756: 68fa ldr r2, [r7, #12] - 8005758: 6812 ldr r2, [r2, #0] - 800575a: 601a str r2, [r3, #0] - memp->line = line; -#if MEMP_MEM_MALLOC - memp_overflow_init_element(memp, desc); -#endif /* MEMP_MEM_MALLOC */ -#endif /* MEMP_OVERFLOW_CHECK */ - LWIP_ASSERT("memp_malloc: memp properly aligned", - 800575c: 68fb ldr r3, [r7, #12] - 800575e: f003 0303 and.w r3, r3, #3 - 8005762: 2b00 cmp r3, #0 - 8005764: d006 beq.n 8005774 - 8005766: 4b07 ldr r3, [pc, #28] ; (8005784 ) - 8005768: f44f 728c mov.w r2, #280 ; 0x118 - 800576c: 4906 ldr r1, [pc, #24] ; (8005788 ) - 800576e: 4807 ldr r0, [pc, #28] ; (800578c ) - 8005770: f00b fc9a bl 80110a8 - desc->stats->max = desc->stats->used; - } -#endif - SYS_ARCH_UNPROTECT(old_level); - /* cast through u8_t* to get rid of alignment warnings */ - return ((u8_t *)memp + MEMP_SIZE); - 8005774: 68fb ldr r3, [r7, #12] - 8005776: e000 b.n 800577a -#endif - SYS_ARCH_UNPROTECT(old_level); - LWIP_DEBUGF(MEMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("memp_malloc: out of memory in pool %s\n", desc->desc)); - } - - return NULL; - 8005778: 2300 movs r3, #0 -} - 800577a: 4618 mov r0, r3 - 800577c: 3710 adds r7, #16 - 800577e: 46bd mov sp, r7 - 8005780: bd80 pop {r7, pc} - 8005782: bf00 nop - 8005784: 08015e90 .word 0x08015e90 - 8005788: 08015ec0 .word 0x08015ec0 - 800578c: 08015ee4 .word 0x08015ee4 - -08005790 : -#if !MEMP_OVERFLOW_CHECK -memp_malloc_pool(const struct memp_desc *desc) -#else -memp_malloc_pool_fn(const struct memp_desc *desc, const char *file, const int line) -#endif -{ - 8005790: b580 push {r7, lr} - 8005792: b082 sub sp, #8 - 8005794: af00 add r7, sp, #0 - 8005796: 6078 str r0, [r7, #4] - LWIP_ASSERT("invalid pool desc", desc != NULL); - 8005798: 687b ldr r3, [r7, #4] - 800579a: 2b00 cmp r3, #0 - 800579c: d106 bne.n 80057ac - 800579e: 4b0a ldr r3, [pc, #40] ; (80057c8 ) - 80057a0: f44f 729e mov.w r2, #316 ; 0x13c - 80057a4: 4909 ldr r1, [pc, #36] ; (80057cc ) - 80057a6: 480a ldr r0, [pc, #40] ; (80057d0 ) - 80057a8: f00b fc7e bl 80110a8 - if (desc == NULL) { - 80057ac: 687b ldr r3, [r7, #4] - 80057ae: 2b00 cmp r3, #0 - 80057b0: d101 bne.n 80057b6 - return NULL; - 80057b2: 2300 movs r3, #0 - 80057b4: e003 b.n 80057be - } - -#if !MEMP_OVERFLOW_CHECK - return do_memp_malloc_pool(desc); - 80057b6: 6878 ldr r0, [r7, #4] - 80057b8: f7ff ffc0 bl 800573c - 80057bc: 4603 mov r3, r0 -#else - return do_memp_malloc_pool_fn(desc, file, line); -#endif -} - 80057be: 4618 mov r0, r3 - 80057c0: 3708 adds r7, #8 - 80057c2: 46bd mov sp, r7 - 80057c4: bd80 pop {r7, pc} - 80057c6: bf00 nop - 80057c8: 08015e90 .word 0x08015e90 - 80057cc: 08015f0c .word 0x08015f0c - 80057d0: 08015ee4 .word 0x08015ee4 - -080057d4 : -#if !MEMP_OVERFLOW_CHECK -memp_malloc(memp_t type) -#else -memp_malloc_fn(memp_t type, const char *file, const int line) -#endif -{ - 80057d4: b580 push {r7, lr} - 80057d6: b084 sub sp, #16 - 80057d8: af00 add r7, sp, #0 - 80057da: 4603 mov r3, r0 - 80057dc: 71fb strb r3, [r7, #7] - void *memp; - LWIP_ERROR("memp_malloc: type < MEMP_MAX", (type < MEMP_MAX), return NULL;); - 80057de: 79fb ldrb r3, [r7, #7] - 80057e0: 2b08 cmp r3, #8 - 80057e2: d908 bls.n 80057f6 - 80057e4: 4b0a ldr r3, [pc, #40] ; (8005810 ) - 80057e6: f240 1257 movw r2, #343 ; 0x157 - 80057ea: 490a ldr r1, [pc, #40] ; (8005814 ) - 80057ec: 480a ldr r0, [pc, #40] ; (8005818 ) - 80057ee: f00b fc5b bl 80110a8 - 80057f2: 2300 movs r3, #0 - 80057f4: e008 b.n 8005808 -#if MEMP_OVERFLOW_CHECK >= 2 - memp_overflow_check_all(); -#endif /* MEMP_OVERFLOW_CHECK >= 2 */ - -#if !MEMP_OVERFLOW_CHECK - memp = do_memp_malloc_pool(memp_pools[type]); - 80057f6: 79fb ldrb r3, [r7, #7] - 80057f8: 4a08 ldr r2, [pc, #32] ; (800581c ) - 80057fa: f852 3023 ldr.w r3, [r2, r3, lsl #2] - 80057fe: 4618 mov r0, r3 - 8005800: f7ff ff9c bl 800573c - 8005804: 60f8 str r0, [r7, #12] -#else - memp = do_memp_malloc_pool_fn(memp_pools[type], file, line); -#endif - - return memp; - 8005806: 68fb ldr r3, [r7, #12] -} - 8005808: 4618 mov r0, r3 - 800580a: 3710 adds r7, #16 - 800580c: 46bd mov sp, r7 - 800580e: bd80 pop {r7, pc} - 8005810: 08015e90 .word 0x08015e90 - 8005814: 08015f20 .word 0x08015f20 - 8005818: 08015ee4 .word 0x08015ee4 - 800581c: 08018a58 .word 0x08018a58 - -08005820 : - -static void -do_memp_free_pool(const struct memp_desc *desc, void *mem) -{ - 8005820: b580 push {r7, lr} - 8005822: b084 sub sp, #16 - 8005824: af00 add r7, sp, #0 - 8005826: 6078 str r0, [r7, #4] - 8005828: 6039 str r1, [r7, #0] - struct memp *memp; - SYS_ARCH_DECL_PROTECT(old_level); - - LWIP_ASSERT("memp_free: mem properly aligned", - 800582a: 683b ldr r3, [r7, #0] - 800582c: f003 0303 and.w r3, r3, #3 - 8005830: 2b00 cmp r3, #0 - 8005832: d006 beq.n 8005842 - 8005834: 4b0a ldr r3, [pc, #40] ; (8005860 ) - 8005836: f44f 72b6 mov.w r2, #364 ; 0x16c - 800583a: 490a ldr r1, [pc, #40] ; (8005864 ) - 800583c: 480a ldr r0, [pc, #40] ; (8005868 ) - 800583e: f00b fc33 bl 80110a8 - ((mem_ptr_t)mem % MEM_ALIGNMENT) == 0); - - /* cast through void* to get rid of alignment warnings */ - memp = (struct memp *)(void *)((u8_t *)mem - MEMP_SIZE); - 8005842: 683b ldr r3, [r7, #0] - 8005844: 60fb str r3, [r7, #12] -#if MEMP_MEM_MALLOC - LWIP_UNUSED_ARG(desc); - SYS_ARCH_UNPROTECT(old_level); - mem_free(memp); -#else /* MEMP_MEM_MALLOC */ - memp->next = *desc->tab; - 8005846: 687b ldr r3, [r7, #4] - 8005848: 689b ldr r3, [r3, #8] - 800584a: 681a ldr r2, [r3, #0] - 800584c: 68fb ldr r3, [r7, #12] - 800584e: 601a str r2, [r3, #0] - *desc->tab = memp; - 8005850: 687b ldr r3, [r7, #4] - 8005852: 689b ldr r3, [r3, #8] - 8005854: 68fa ldr r2, [r7, #12] - 8005856: 601a str r2, [r3, #0] - LWIP_ASSERT("memp sanity", memp_sanity(desc)); -#endif /* MEMP_SANITY_CHECK */ - - SYS_ARCH_UNPROTECT(old_level); -#endif /* !MEMP_MEM_MALLOC */ -} - 8005858: bf00 nop - 800585a: 3710 adds r7, #16 - 800585c: 46bd mov sp, r7 - 800585e: bd80 pop {r7, pc} - 8005860: 08015e90 .word 0x08015e90 - 8005864: 08015f40 .word 0x08015f40 - 8005868: 08015ee4 .word 0x08015ee4 - -0800586c : - * @param desc the pool where to put mem - * @param mem the memp element to free - */ -void -memp_free_pool(const struct memp_desc *desc, void *mem) -{ - 800586c: b580 push {r7, lr} - 800586e: b082 sub sp, #8 - 8005870: af00 add r7, sp, #0 - 8005872: 6078 str r0, [r7, #4] - 8005874: 6039 str r1, [r7, #0] - LWIP_ASSERT("invalid pool desc", desc != NULL); - 8005876: 687b ldr r3, [r7, #4] - 8005878: 2b00 cmp r3, #0 - 800587a: d106 bne.n 800588a - 800587c: 4b0a ldr r3, [pc, #40] ; (80058a8 ) - 800587e: f240 1295 movw r2, #405 ; 0x195 - 8005882: 490a ldr r1, [pc, #40] ; (80058ac ) - 8005884: 480a ldr r0, [pc, #40] ; (80058b0 ) - 8005886: f00b fc0f bl 80110a8 - if ((desc == NULL) || (mem == NULL)) { - 800588a: 687b ldr r3, [r7, #4] - 800588c: 2b00 cmp r3, #0 - 800588e: d007 beq.n 80058a0 - 8005890: 683b ldr r3, [r7, #0] - 8005892: 2b00 cmp r3, #0 - 8005894: d004 beq.n 80058a0 - return; - } - - do_memp_free_pool(desc, mem); - 8005896: 6839 ldr r1, [r7, #0] - 8005898: 6878 ldr r0, [r7, #4] - 800589a: f7ff ffc1 bl 8005820 - 800589e: e000 b.n 80058a2 - return; - 80058a0: bf00 nop -} - 80058a2: 3708 adds r7, #8 - 80058a4: 46bd mov sp, r7 - 80058a6: bd80 pop {r7, pc} - 80058a8: 08015e90 .word 0x08015e90 - 80058ac: 08015f0c .word 0x08015f0c - 80058b0: 08015ee4 .word 0x08015ee4 - -080058b4 : - * @param type the pool where to put mem - * @param mem the memp element to free - */ -void -memp_free(memp_t type, void *mem) -{ - 80058b4: b580 push {r7, lr} - 80058b6: b082 sub sp, #8 - 80058b8: af00 add r7, sp, #0 - 80058ba: 4603 mov r3, r0 - 80058bc: 6039 str r1, [r7, #0] - 80058be: 71fb strb r3, [r7, #7] -#ifdef LWIP_HOOK_MEMP_AVAILABLE - struct memp *old_first; -#endif - - LWIP_ERROR("memp_free: type < MEMP_MAX", (type < MEMP_MAX), return;); - 80058c0: 79fb ldrb r3, [r7, #7] - 80058c2: 2b08 cmp r3, #8 - 80058c4: d907 bls.n 80058d6 - 80058c6: 4b0c ldr r3, [pc, #48] ; (80058f8 ) - 80058c8: f44f 72d5 mov.w r2, #426 ; 0x1aa - 80058cc: 490b ldr r1, [pc, #44] ; (80058fc ) - 80058ce: 480c ldr r0, [pc, #48] ; (8005900 ) - 80058d0: f00b fbea bl 80110a8 - 80058d4: e00c b.n 80058f0 - - if (mem == NULL) { - 80058d6: 683b ldr r3, [r7, #0] - 80058d8: 2b00 cmp r3, #0 - 80058da: d008 beq.n 80058ee - -#ifdef LWIP_HOOK_MEMP_AVAILABLE - old_first = *memp_pools[type]->tab; -#endif - - do_memp_free_pool(memp_pools[type], mem); - 80058dc: 79fb ldrb r3, [r7, #7] - 80058de: 4a09 ldr r2, [pc, #36] ; (8005904 ) - 80058e0: f852 3023 ldr.w r3, [r2, r3, lsl #2] - 80058e4: 6839 ldr r1, [r7, #0] - 80058e6: 4618 mov r0, r3 - 80058e8: f7ff ff9a bl 8005820 - 80058ec: e000 b.n 80058f0 - return; - 80058ee: bf00 nop -#ifdef LWIP_HOOK_MEMP_AVAILABLE - if (old_first == NULL) { - LWIP_HOOK_MEMP_AVAILABLE(type); - } -#endif -} - 80058f0: 3708 adds r7, #8 - 80058f2: 46bd mov sp, r7 - 80058f4: bd80 pop {r7, pc} - 80058f6: bf00 nop - 80058f8: 08015e90 .word 0x08015e90 - 80058fc: 08015f60 .word 0x08015f60 - 8005900: 08015ee4 .word 0x08015ee4 - 8005904: 08018a58 .word 0x08018a58 - -08005908 : -} -#endif /* LWIP_HAVE_LOOPIF */ - -void -netif_init(void) -{ - 8005908: b480 push {r7} - 800590a: af00 add r7, sp, #0 - - netif_set_link_up(&loop_netif); - netif_set_up(&loop_netif); - -#endif /* LWIP_HAVE_LOOPIF */ -} - 800590c: bf00 nop - 800590e: 46bd mov sp, r7 - 8005910: f85d 7b04 ldr.w r7, [sp], #4 - 8005914: 4770 bx lr - ... - -08005918 : -netif_add(struct netif *netif, -#if LWIP_IPV4 - const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw, -#endif /* LWIP_IPV4 */ - void *state, netif_init_fn init, netif_input_fn input) -{ - 8005918: b580 push {r7, lr} - 800591a: b086 sub sp, #24 - 800591c: af00 add r7, sp, #0 - 800591e: 60f8 str r0, [r7, #12] - 8005920: 60b9 str r1, [r7, #8] - 8005922: 607a str r2, [r7, #4] - 8005924: 603b str r3, [r7, #0] - LWIP_ASSERT("single netif already set", 0); - return NULL; - } -#endif - - LWIP_ERROR("netif_add: invalid netif", netif != NULL, return NULL); - 8005926: 68fb ldr r3, [r7, #12] - 8005928: 2b00 cmp r3, #0 - 800592a: d108 bne.n 800593e - 800592c: 4b5b ldr r3, [pc, #364] ; (8005a9c ) - 800592e: f240 1227 movw r2, #295 ; 0x127 - 8005932: 495b ldr r1, [pc, #364] ; (8005aa0 ) - 8005934: 485b ldr r0, [pc, #364] ; (8005aa4 ) - 8005936: f00b fbb7 bl 80110a8 - 800593a: 2300 movs r3, #0 - 800593c: e0a9 b.n 8005a92 - LWIP_ERROR("netif_add: No init function given", init != NULL, return NULL); - 800593e: 6a7b ldr r3, [r7, #36] ; 0x24 - 8005940: 2b00 cmp r3, #0 - 8005942: d108 bne.n 8005956 - 8005944: 4b55 ldr r3, [pc, #340] ; (8005a9c ) - 8005946: f44f 7294 mov.w r2, #296 ; 0x128 - 800594a: 4957 ldr r1, [pc, #348] ; (8005aa8 ) - 800594c: 4855 ldr r0, [pc, #340] ; (8005aa4 ) - 800594e: f00b fbab bl 80110a8 - 8005952: 2300 movs r3, #0 - 8005954: e09d b.n 8005a92 - -#if LWIP_IPV4 - if (ipaddr == NULL) { - 8005956: 68bb ldr r3, [r7, #8] - 8005958: 2b00 cmp r3, #0 - 800595a: d101 bne.n 8005960 - ipaddr = ip_2_ip4(IP4_ADDR_ANY); - 800595c: 4b53 ldr r3, [pc, #332] ; (8005aac ) - 800595e: 60bb str r3, [r7, #8] - } - if (netmask == NULL) { - 8005960: 687b ldr r3, [r7, #4] - 8005962: 2b00 cmp r3, #0 - 8005964: d101 bne.n 800596a - netmask = ip_2_ip4(IP4_ADDR_ANY); - 8005966: 4b51 ldr r3, [pc, #324] ; (8005aac ) - 8005968: 607b str r3, [r7, #4] - } - if (gw == NULL) { - 800596a: 683b ldr r3, [r7, #0] - 800596c: 2b00 cmp r3, #0 - 800596e: d101 bne.n 8005974 - gw = ip_2_ip4(IP4_ADDR_ANY); - 8005970: 4b4e ldr r3, [pc, #312] ; (8005aac ) - 8005972: 603b str r3, [r7, #0] - } - - /* reset new interface configuration state */ - ip_addr_set_zero_ip4(&netif->ip_addr); - 8005974: 68fb ldr r3, [r7, #12] - 8005976: 2200 movs r2, #0 - 8005978: 605a str r2, [r3, #4] - ip_addr_set_zero_ip4(&netif->netmask); - 800597a: 68fb ldr r3, [r7, #12] - 800597c: 2200 movs r2, #0 - 800597e: 609a str r2, [r3, #8] - ip_addr_set_zero_ip4(&netif->gw); - 8005980: 68fb ldr r3, [r7, #12] - 8005982: 2200 movs r2, #0 - 8005984: 60da str r2, [r3, #12] - netif->output = netif_null_output_ip4; - 8005986: 68fb ldr r3, [r7, #12] - 8005988: 4a49 ldr r2, [pc, #292] ; (8005ab0 ) - 800598a: 615a str r2, [r3, #20] -#endif /* LWIP_IPV6_ADDRESS_LIFETIMES */ - } - netif->output_ip6 = netif_null_output_ip6; -#endif /* LWIP_IPV6 */ - NETIF_SET_CHECKSUM_CTRL(netif, NETIF_CHECKSUM_ENABLE_ALL); - netif->mtu = 0; - 800598c: 68fb ldr r3, [r7, #12] - 800598e: 2200 movs r2, #0 - 8005990: 851a strh r2, [r3, #40] ; 0x28 - netif->flags = 0; - 8005992: 68fb ldr r3, [r7, #12] - 8005994: 2200 movs r2, #0 - 8005996: f883 2031 strb.w r2, [r3, #49] ; 0x31 -#ifdef netif_get_client_data - memset(netif->client_data, 0, sizeof(netif->client_data)); - 800599a: 68fb ldr r3, [r7, #12] - 800599c: 3324 adds r3, #36 ; 0x24 - 800599e: 2204 movs r2, #4 - 80059a0: 2100 movs r1, #0 - 80059a2: 4618 mov r0, r3 - 80059a4: f00b fb78 bl 8011098 -#endif /* LWIP_IPV6 */ -#if LWIP_NETIF_STATUS_CALLBACK - netif->status_callback = NULL; -#endif /* LWIP_NETIF_STATUS_CALLBACK */ -#if LWIP_NETIF_LINK_CALLBACK - netif->link_callback = NULL; - 80059a8: 68fb ldr r3, [r7, #12] - 80059aa: 2200 movs r2, #0 - 80059ac: 61da str r2, [r3, #28] - netif->loop_first = NULL; - netif->loop_last = NULL; -#endif /* ENABLE_LOOPBACK */ - - /* remember netif specific state information data */ - netif->state = state; - 80059ae: 68fb ldr r3, [r7, #12] - 80059b0: 6a3a ldr r2, [r7, #32] - 80059b2: 621a str r2, [r3, #32] - netif->num = netif_num; - 80059b4: 4b3f ldr r3, [pc, #252] ; (8005ab4 ) - 80059b6: 781a ldrb r2, [r3, #0] - 80059b8: 68fb ldr r3, [r7, #12] - 80059ba: f883 2034 strb.w r2, [r3, #52] ; 0x34 - netif->input = input; - 80059be: 68fb ldr r3, [r7, #12] - 80059c0: 6aba ldr r2, [r7, #40] ; 0x28 - 80059c2: 611a str r2, [r3, #16] -#if ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS - netif->loop_cnt_current = 0; -#endif /* ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS */ - -#if LWIP_IPV4 - netif_set_addr(netif, ipaddr, netmask, gw); - 80059c4: 683b ldr r3, [r7, #0] - 80059c6: 687a ldr r2, [r7, #4] - 80059c8: 68b9 ldr r1, [r7, #8] - 80059ca: 68f8 ldr r0, [r7, #12] - 80059cc: f000 f914 bl 8005bf8 -#endif /* LWIP_IPV4 */ - - /* call user specified initialization function for netif */ - if (init(netif) != ERR_OK) { - 80059d0: 6a7b ldr r3, [r7, #36] ; 0x24 - 80059d2: 68f8 ldr r0, [r7, #12] - 80059d4: 4798 blx r3 - 80059d6: 4603 mov r3, r0 - 80059d8: 2b00 cmp r3, #0 - 80059da: d001 beq.n 80059e0 - return NULL; - 80059dc: 2300 movs r3, #0 - 80059de: e058 b.n 8005a92 - */ - { - struct netif *netif2; - int num_netifs; - do { - if (netif->num == 255) { - 80059e0: 68fb ldr r3, [r7, #12] - 80059e2: f893 3034 ldrb.w r3, [r3, #52] ; 0x34 - 80059e6: 2bff cmp r3, #255 ; 0xff - 80059e8: d103 bne.n 80059f2 - netif->num = 0; - 80059ea: 68fb ldr r3, [r7, #12] - 80059ec: 2200 movs r2, #0 - 80059ee: f883 2034 strb.w r2, [r3, #52] ; 0x34 - } - num_netifs = 0; - 80059f2: 2300 movs r3, #0 - 80059f4: 613b str r3, [r7, #16] - for (netif2 = netif_list; netif2 != NULL; netif2 = netif2->next) { - 80059f6: 4b30 ldr r3, [pc, #192] ; (8005ab8 ) - 80059f8: 681b ldr r3, [r3, #0] - 80059fa: 617b str r3, [r7, #20] - 80059fc: e02b b.n 8005a56 - LWIP_ASSERT("netif already added", netif2 != netif); - 80059fe: 697a ldr r2, [r7, #20] - 8005a00: 68fb ldr r3, [r7, #12] - 8005a02: 429a cmp r2, r3 - 8005a04: d106 bne.n 8005a14 - 8005a06: 4b25 ldr r3, [pc, #148] ; (8005a9c ) - 8005a08: f240 128b movw r2, #395 ; 0x18b - 8005a0c: 492b ldr r1, [pc, #172] ; (8005abc ) - 8005a0e: 4825 ldr r0, [pc, #148] ; (8005aa4 ) - 8005a10: f00b fb4a bl 80110a8 - num_netifs++; - 8005a14: 693b ldr r3, [r7, #16] - 8005a16: 3301 adds r3, #1 - 8005a18: 613b str r3, [r7, #16] - LWIP_ASSERT("too many netifs, max. supported number is 255", num_netifs <= 255); - 8005a1a: 693b ldr r3, [r7, #16] - 8005a1c: 2bff cmp r3, #255 ; 0xff - 8005a1e: dd06 ble.n 8005a2e - 8005a20: 4b1e ldr r3, [pc, #120] ; (8005a9c ) - 8005a22: f240 128d movw r2, #397 ; 0x18d - 8005a26: 4926 ldr r1, [pc, #152] ; (8005ac0 ) - 8005a28: 481e ldr r0, [pc, #120] ; (8005aa4 ) - 8005a2a: f00b fb3d bl 80110a8 - if (netif2->num == netif->num) { - 8005a2e: 697b ldr r3, [r7, #20] - 8005a30: f893 2034 ldrb.w r2, [r3, #52] ; 0x34 - 8005a34: 68fb ldr r3, [r7, #12] - 8005a36: f893 3034 ldrb.w r3, [r3, #52] ; 0x34 - 8005a3a: 429a cmp r2, r3 - 8005a3c: d108 bne.n 8005a50 - netif->num++; - 8005a3e: 68fb ldr r3, [r7, #12] - 8005a40: f893 3034 ldrb.w r3, [r3, #52] ; 0x34 - 8005a44: 3301 adds r3, #1 - 8005a46: b2da uxtb r2, r3 - 8005a48: 68fb ldr r3, [r7, #12] - 8005a4a: f883 2034 strb.w r2, [r3, #52] ; 0x34 - break; - 8005a4e: e005 b.n 8005a5c - for (netif2 = netif_list; netif2 != NULL; netif2 = netif2->next) { - 8005a50: 697b ldr r3, [r7, #20] - 8005a52: 681b ldr r3, [r3, #0] - 8005a54: 617b str r3, [r7, #20] - 8005a56: 697b ldr r3, [r7, #20] - 8005a58: 2b00 cmp r3, #0 - 8005a5a: d1d0 bne.n 80059fe - } - } - } while (netif2 != NULL); - 8005a5c: 697b ldr r3, [r7, #20] - 8005a5e: 2b00 cmp r3, #0 - 8005a60: d1be bne.n 80059e0 - } - if (netif->num == 254) { - 8005a62: 68fb ldr r3, [r7, #12] - 8005a64: f893 3034 ldrb.w r3, [r3, #52] ; 0x34 - 8005a68: 2bfe cmp r3, #254 ; 0xfe - 8005a6a: d103 bne.n 8005a74 - netif_num = 0; - 8005a6c: 4b11 ldr r3, [pc, #68] ; (8005ab4 ) - 8005a6e: 2200 movs r2, #0 - 8005a70: 701a strb r2, [r3, #0] - 8005a72: e006 b.n 8005a82 - } else { - netif_num = (u8_t)(netif->num + 1); - 8005a74: 68fb ldr r3, [r7, #12] - 8005a76: f893 3034 ldrb.w r3, [r3, #52] ; 0x34 - 8005a7a: 3301 adds r3, #1 - 8005a7c: b2da uxtb r2, r3 - 8005a7e: 4b0d ldr r3, [pc, #52] ; (8005ab4 ) - 8005a80: 701a strb r2, [r3, #0] - } - - /* add this netif to the list */ - netif->next = netif_list; - 8005a82: 4b0d ldr r3, [pc, #52] ; (8005ab8 ) - 8005a84: 681a ldr r2, [r3, #0] - 8005a86: 68fb ldr r3, [r7, #12] - 8005a88: 601a str r2, [r3, #0] - netif_list = netif; - 8005a8a: 4a0b ldr r2, [pc, #44] ; (8005ab8 ) - 8005a8c: 68fb ldr r3, [r7, #12] - 8005a8e: 6013 str r3, [r2, #0] -#endif /* LWIP_IPV4 */ - LWIP_DEBUGF(NETIF_DEBUG, ("\n")); - - netif_invoke_ext_callback(netif, LWIP_NSC_NETIF_ADDED, NULL); - - return netif; - 8005a90: 68fb ldr r3, [r7, #12] -} - 8005a92: 4618 mov r0, r3 - 8005a94: 3718 adds r7, #24 - 8005a96: 46bd mov sp, r7 - 8005a98: bd80 pop {r7, pc} - 8005a9a: bf00 nop - 8005a9c: 08015f7c .word 0x08015f7c - 8005aa0: 08016010 .word 0x08016010 - 8005aa4: 08015fcc .word 0x08015fcc - 8005aa8: 0801602c .word 0x0801602c - 8005aac: 08018acc .word 0x08018acc - 8005ab0: 08005edb .word 0x08005edb - 8005ab4: 200099d0 .word 0x200099d0 - 8005ab8: 200099c8 .word 0x200099c8 - 8005abc: 08016050 .word 0x08016050 - 8005ac0: 08016064 .word 0x08016064 - -08005ac4 : - -static void -netif_do_ip_addr_changed(const ip_addr_t *old_addr, const ip_addr_t *new_addr) -{ - 8005ac4: b580 push {r7, lr} - 8005ac6: b082 sub sp, #8 - 8005ac8: af00 add r7, sp, #0 - 8005aca: 6078 str r0, [r7, #4] - 8005acc: 6039 str r1, [r7, #0] -#if LWIP_TCP - tcp_netif_ip_addr_changed(old_addr, new_addr); - 8005ace: 6839 ldr r1, [r7, #0] - 8005ad0: 6878 ldr r0, [r7, #4] - 8005ad2: f002 fb57 bl 8008184 -#endif /* LWIP_TCP */ -#if LWIP_UDP - udp_netif_ip_addr_changed(old_addr, new_addr); - 8005ad6: 6839 ldr r1, [r7, #0] - 8005ad8: 6878 ldr r0, [r7, #4] - 8005ada: f006 ff99 bl 800ca10 -#endif /* LWIP_UDP */ -#if LWIP_RAW - raw_netif_ip_addr_changed(old_addr, new_addr); -#endif /* LWIP_RAW */ -} - 8005ade: bf00 nop - 8005ae0: 3708 adds r7, #8 - 8005ae2: 46bd mov sp, r7 - 8005ae4: bd80 pop {r7, pc} - ... - -08005ae8 : - -#if LWIP_IPV4 -static int -netif_do_set_ipaddr(struct netif *netif, const ip4_addr_t *ipaddr, ip_addr_t *old_addr) -{ - 8005ae8: b580 push {r7, lr} - 8005aea: b086 sub sp, #24 - 8005aec: af00 add r7, sp, #0 - 8005aee: 60f8 str r0, [r7, #12] - 8005af0: 60b9 str r1, [r7, #8] - 8005af2: 607a str r2, [r7, #4] - LWIP_ASSERT("invalid pointer", ipaddr != NULL); - 8005af4: 68bb ldr r3, [r7, #8] - 8005af6: 2b00 cmp r3, #0 - 8005af8: d106 bne.n 8005b08 - 8005afa: 4b1d ldr r3, [pc, #116] ; (8005b70 ) - 8005afc: f240 12cb movw r2, #459 ; 0x1cb - 8005b00: 491c ldr r1, [pc, #112] ; (8005b74 ) - 8005b02: 481d ldr r0, [pc, #116] ; (8005b78 ) - 8005b04: f00b fad0 bl 80110a8 - LWIP_ASSERT("invalid pointer", old_addr != NULL); - 8005b08: 687b ldr r3, [r7, #4] - 8005b0a: 2b00 cmp r3, #0 - 8005b0c: d106 bne.n 8005b1c - 8005b0e: 4b18 ldr r3, [pc, #96] ; (8005b70 ) - 8005b10: f44f 72e6 mov.w r2, #460 ; 0x1cc - 8005b14: 4917 ldr r1, [pc, #92] ; (8005b74 ) - 8005b16: 4818 ldr r0, [pc, #96] ; (8005b78 ) - 8005b18: f00b fac6 bl 80110a8 - - /* address is actually being changed? */ - if (ip4_addr_cmp(ipaddr, netif_ip4_addr(netif)) == 0) { - 8005b1c: 68bb ldr r3, [r7, #8] - 8005b1e: 681a ldr r2, [r3, #0] - 8005b20: 68fb ldr r3, [r7, #12] - 8005b22: 3304 adds r3, #4 - 8005b24: 681b ldr r3, [r3, #0] - 8005b26: 429a cmp r2, r3 - 8005b28: d01c beq.n 8005b64 - ip_addr_t new_addr; - *ip_2_ip4(&new_addr) = *ipaddr; - 8005b2a: 68bb ldr r3, [r7, #8] - 8005b2c: 681b ldr r3, [r3, #0] - 8005b2e: 617b str r3, [r7, #20] - IP_SET_TYPE_VAL(new_addr, IPADDR_TYPE_V4); - - ip_addr_copy(*old_addr, *netif_ip_addr4(netif)); - 8005b30: 68fb ldr r3, [r7, #12] - 8005b32: 3304 adds r3, #4 - 8005b34: 681a ldr r2, [r3, #0] - 8005b36: 687b ldr r3, [r7, #4] - 8005b38: 601a str r2, [r3, #0] - - LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_set_ipaddr: netif address being changed\n")); - netif_do_ip_addr_changed(old_addr, &new_addr); - 8005b3a: f107 0314 add.w r3, r7, #20 - 8005b3e: 4619 mov r1, r3 - 8005b40: 6878 ldr r0, [r7, #4] - 8005b42: f7ff ffbf bl 8005ac4 - - mib2_remove_ip4(netif); - mib2_remove_route_ip4(0, netif); - /* set new IP address to netif */ - ip4_addr_set(ip_2_ip4(&netif->ip_addr), ipaddr); - 8005b46: 68bb ldr r3, [r7, #8] - 8005b48: 2b00 cmp r3, #0 - 8005b4a: d002 beq.n 8005b52 - 8005b4c: 68bb ldr r3, [r7, #8] - 8005b4e: 681b ldr r3, [r3, #0] - 8005b50: e000 b.n 8005b54 - 8005b52: 2300 movs r3, #0 - 8005b54: 68fa ldr r2, [r7, #12] - 8005b56: 6053 str r3, [r2, #4] - IP_SET_TYPE_VAL(netif->ip_addr, IPADDR_TYPE_V4); - mib2_add_ip4(netif); - mib2_add_route_ip4(0, netif); - - netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4); - 8005b58: 2101 movs r1, #1 - 8005b5a: 68f8 ldr r0, [r7, #12] - 8005b5c: f000 f8d2 bl 8005d04 - - NETIF_STATUS_CALLBACK(netif); - return 1; /* address changed */ - 8005b60: 2301 movs r3, #1 - 8005b62: e000 b.n 8005b66 - } - return 0; /* address unchanged */ - 8005b64: 2300 movs r3, #0 -} - 8005b66: 4618 mov r0, r3 - 8005b68: 3718 adds r7, #24 - 8005b6a: 46bd mov sp, r7 - 8005b6c: bd80 pop {r7, pc} - 8005b6e: bf00 nop - 8005b70: 08015f7c .word 0x08015f7c - 8005b74: 08016094 .word 0x08016094 - 8005b78: 08015fcc .word 0x08015fcc - -08005b7c : - } -} - -static int -netif_do_set_netmask(struct netif *netif, const ip4_addr_t *netmask, ip_addr_t *old_nm) -{ - 8005b7c: b480 push {r7} - 8005b7e: b085 sub sp, #20 - 8005b80: af00 add r7, sp, #0 - 8005b82: 60f8 str r0, [r7, #12] - 8005b84: 60b9 str r1, [r7, #8] - 8005b86: 607a str r2, [r7, #4] - /* address is actually being changed? */ - if (ip4_addr_cmp(netmask, netif_ip4_netmask(netif)) == 0) { - 8005b88: 68bb ldr r3, [r7, #8] - 8005b8a: 681a ldr r2, [r3, #0] - 8005b8c: 68fb ldr r3, [r7, #12] - 8005b8e: 3308 adds r3, #8 - 8005b90: 681b ldr r3, [r3, #0] - 8005b92: 429a cmp r2, r3 - 8005b94: d00a beq.n 8005bac -#else - LWIP_UNUSED_ARG(old_nm); -#endif - mib2_remove_route_ip4(0, netif); - /* set new netmask to netif */ - ip4_addr_set(ip_2_ip4(&netif->netmask), netmask); - 8005b96: 68bb ldr r3, [r7, #8] - 8005b98: 2b00 cmp r3, #0 - 8005b9a: d002 beq.n 8005ba2 - 8005b9c: 68bb ldr r3, [r7, #8] - 8005b9e: 681b ldr r3, [r3, #0] - 8005ba0: e000 b.n 8005ba4 - 8005ba2: 2300 movs r3, #0 - 8005ba4: 68fa ldr r2, [r7, #12] - 8005ba6: 6093 str r3, [r2, #8] - netif->name[0], netif->name[1], - ip4_addr1_16(netif_ip4_netmask(netif)), - ip4_addr2_16(netif_ip4_netmask(netif)), - ip4_addr3_16(netif_ip4_netmask(netif)), - ip4_addr4_16(netif_ip4_netmask(netif)))); - return 1; /* netmask changed */ - 8005ba8: 2301 movs r3, #1 - 8005baa: e000 b.n 8005bae - } - return 0; /* netmask unchanged */ - 8005bac: 2300 movs r3, #0 -} - 8005bae: 4618 mov r0, r3 - 8005bb0: 3714 adds r7, #20 - 8005bb2: 46bd mov sp, r7 - 8005bb4: f85d 7b04 ldr.w r7, [sp], #4 - 8005bb8: 4770 bx lr - -08005bba : - } -} - -static int -netif_do_set_gw(struct netif *netif, const ip4_addr_t *gw, ip_addr_t *old_gw) -{ - 8005bba: b480 push {r7} - 8005bbc: b085 sub sp, #20 - 8005bbe: af00 add r7, sp, #0 - 8005bc0: 60f8 str r0, [r7, #12] - 8005bc2: 60b9 str r1, [r7, #8] - 8005bc4: 607a str r2, [r7, #4] - /* address is actually being changed? */ - if (ip4_addr_cmp(gw, netif_ip4_gw(netif)) == 0) { - 8005bc6: 68bb ldr r3, [r7, #8] - 8005bc8: 681a ldr r2, [r3, #0] - 8005bca: 68fb ldr r3, [r7, #12] - 8005bcc: 330c adds r3, #12 - 8005bce: 681b ldr r3, [r3, #0] - 8005bd0: 429a cmp r2, r3 - 8005bd2: d00a beq.n 8005bea - ip_addr_copy(*old_gw, *netif_ip_gw4(netif)); -#else - LWIP_UNUSED_ARG(old_gw); -#endif - - ip4_addr_set(ip_2_ip4(&netif->gw), gw); - 8005bd4: 68bb ldr r3, [r7, #8] - 8005bd6: 2b00 cmp r3, #0 - 8005bd8: d002 beq.n 8005be0 - 8005bda: 68bb ldr r3, [r7, #8] - 8005bdc: 681b ldr r3, [r3, #0] - 8005bde: e000 b.n 8005be2 - 8005be0: 2300 movs r3, #0 - 8005be2: 68fa ldr r2, [r7, #12] - 8005be4: 60d3 str r3, [r2, #12] - netif->name[0], netif->name[1], - ip4_addr1_16(netif_ip4_gw(netif)), - ip4_addr2_16(netif_ip4_gw(netif)), - ip4_addr3_16(netif_ip4_gw(netif)), - ip4_addr4_16(netif_ip4_gw(netif)))); - return 1; /* gateway changed */ - 8005be6: 2301 movs r3, #1 - 8005be8: e000 b.n 8005bec - } - return 0; /* gateway unchanged */ - 8005bea: 2300 movs r3, #0 -} - 8005bec: 4618 mov r0, r3 - 8005bee: 3714 adds r7, #20 - 8005bf0: 46bd mov sp, r7 - 8005bf2: f85d 7b04 ldr.w r7, [sp], #4 - 8005bf6: 4770 bx lr - -08005bf8 : - * @param gw the new default gateway - */ -void -netif_set_addr(struct netif *netif, const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, - const ip4_addr_t *gw) -{ - 8005bf8: b580 push {r7, lr} - 8005bfa: b088 sub sp, #32 - 8005bfc: af00 add r7, sp, #0 - 8005bfe: 60f8 str r0, [r7, #12] - 8005c00: 60b9 str r1, [r7, #8] - 8005c02: 607a str r2, [r7, #4] - 8005c04: 603b str r3, [r7, #0] - ip_addr_t old_nm_val; - ip_addr_t old_gw_val; - ip_addr_t *old_nm = &old_nm_val; - ip_addr_t *old_gw = &old_gw_val; -#else - ip_addr_t *old_nm = NULL; - 8005c06: 2300 movs r3, #0 - 8005c08: 61fb str r3, [r7, #28] - ip_addr_t *old_gw = NULL; - 8005c0a: 2300 movs r3, #0 - 8005c0c: 61bb str r3, [r7, #24] - int remove; - - LWIP_ASSERT_CORE_LOCKED(); - - /* Don't propagate NULL pointer (IPv4 ANY) to subsequent functions */ - if (ipaddr == NULL) { - 8005c0e: 68bb ldr r3, [r7, #8] - 8005c10: 2b00 cmp r3, #0 - 8005c12: d101 bne.n 8005c18 - ipaddr = IP4_ADDR_ANY4; - 8005c14: 4b1c ldr r3, [pc, #112] ; (8005c88 ) - 8005c16: 60bb str r3, [r7, #8] - } - if (netmask == NULL) { - 8005c18: 687b ldr r3, [r7, #4] - 8005c1a: 2b00 cmp r3, #0 - 8005c1c: d101 bne.n 8005c22 - netmask = IP4_ADDR_ANY4; - 8005c1e: 4b1a ldr r3, [pc, #104] ; (8005c88 ) - 8005c20: 607b str r3, [r7, #4] - } - if (gw == NULL) { - 8005c22: 683b ldr r3, [r7, #0] - 8005c24: 2b00 cmp r3, #0 - 8005c26: d101 bne.n 8005c2c - gw = IP4_ADDR_ANY4; - 8005c28: 4b17 ldr r3, [pc, #92] ; (8005c88 ) - 8005c2a: 603b str r3, [r7, #0] - } - - remove = ip4_addr_isany(ipaddr); - 8005c2c: 68bb ldr r3, [r7, #8] - 8005c2e: 2b00 cmp r3, #0 - 8005c30: d003 beq.n 8005c3a - 8005c32: 68bb ldr r3, [r7, #8] - 8005c34: 681b ldr r3, [r3, #0] - 8005c36: 2b00 cmp r3, #0 - 8005c38: d101 bne.n 8005c3e - 8005c3a: 2301 movs r3, #1 - 8005c3c: e000 b.n 8005c40 - 8005c3e: 2300 movs r3, #0 - 8005c40: 617b str r3, [r7, #20] - if (remove) { - 8005c42: 697b ldr r3, [r7, #20] - 8005c44: 2b00 cmp r3, #0 - 8005c46: d006 beq.n 8005c56 - /* when removing an address, we have to remove it *before* changing netmask/gw - to ensure that tcp RST segment can be sent correctly */ - if (netif_do_set_ipaddr(netif, ipaddr, &old_addr)) { - 8005c48: f107 0310 add.w r3, r7, #16 - 8005c4c: 461a mov r2, r3 - 8005c4e: 68b9 ldr r1, [r7, #8] - 8005c50: 68f8 ldr r0, [r7, #12] - 8005c52: f7ff ff49 bl 8005ae8 - change_reason |= LWIP_NSC_IPV4_ADDRESS_CHANGED; - cb_args.ipv4_changed.old_address = &old_addr; -#endif - } - } - if (netif_do_set_netmask(netif, netmask, old_nm)) { - 8005c56: 69fa ldr r2, [r7, #28] - 8005c58: 6879 ldr r1, [r7, #4] - 8005c5a: 68f8 ldr r0, [r7, #12] - 8005c5c: f7ff ff8e bl 8005b7c -#if LWIP_NETIF_EXT_STATUS_CALLBACK - change_reason |= LWIP_NSC_IPV4_NETMASK_CHANGED; - cb_args.ipv4_changed.old_netmask = old_nm; -#endif - } - if (netif_do_set_gw(netif, gw, old_gw)) { - 8005c60: 69ba ldr r2, [r7, #24] - 8005c62: 6839 ldr r1, [r7, #0] - 8005c64: 68f8 ldr r0, [r7, #12] - 8005c66: f7ff ffa8 bl 8005bba -#if LWIP_NETIF_EXT_STATUS_CALLBACK - change_reason |= LWIP_NSC_IPV4_GATEWAY_CHANGED; - cb_args.ipv4_changed.old_gw = old_gw; -#endif - } - if (!remove) { - 8005c6a: 697b ldr r3, [r7, #20] - 8005c6c: 2b00 cmp r3, #0 - 8005c6e: d106 bne.n 8005c7e - /* set ipaddr last to ensure netmask/gw have been set when status callback is called */ - if (netif_do_set_ipaddr(netif, ipaddr, &old_addr)) { - 8005c70: f107 0310 add.w r3, r7, #16 - 8005c74: 461a mov r2, r3 - 8005c76: 68b9 ldr r1, [r7, #8] - 8005c78: 68f8 ldr r0, [r7, #12] - 8005c7a: f7ff ff35 bl 8005ae8 - if (change_reason != LWIP_NSC_NONE) { - change_reason |= LWIP_NSC_IPV4_SETTINGS_CHANGED; - netif_invoke_ext_callback(netif, change_reason, &cb_args); - } -#endif -} - 8005c7e: bf00 nop - 8005c80: 3720 adds r7, #32 - 8005c82: 46bd mov sp, r7 - 8005c84: bd80 pop {r7, pc} - 8005c86: bf00 nop - 8005c88: 08018acc .word 0x08018acc - -08005c8c : - * - * @param netif the default network interface - */ -void -netif_set_default(struct netif *netif) -{ - 8005c8c: b480 push {r7} - 8005c8e: b083 sub sp, #12 - 8005c90: af00 add r7, sp, #0 - 8005c92: 6078 str r0, [r7, #4] - mib2_remove_route_ip4(1, netif); - } else { - /* install default route */ - mib2_add_route_ip4(1, netif); - } - netif_default = netif; - 8005c94: 4a04 ldr r2, [pc, #16] ; (8005ca8 ) - 8005c96: 687b ldr r3, [r7, #4] - 8005c98: 6013 str r3, [r2, #0] - LWIP_DEBUGF(NETIF_DEBUG, ("netif: setting default interface %c%c\n", - netif ? netif->name[0] : '\'', netif ? netif->name[1] : '\'')); -} - 8005c9a: bf00 nop - 8005c9c: 370c adds r7, #12 - 8005c9e: 46bd mov sp, r7 - 8005ca0: f85d 7b04 ldr.w r7, [sp], #4 - 8005ca4: 4770 bx lr - 8005ca6: bf00 nop - 8005ca8: 200099cc .word 0x200099cc - -08005cac : - * Bring an interface up, available for processing - * traffic. - */ -void -netif_set_up(struct netif *netif) -{ - 8005cac: b580 push {r7, lr} - 8005cae: b082 sub sp, #8 - 8005cb0: af00 add r7, sp, #0 - 8005cb2: 6078 str r0, [r7, #4] - LWIP_ASSERT_CORE_LOCKED(); - - LWIP_ERROR("netif_set_up: invalid netif", netif != NULL, return); - 8005cb4: 687b ldr r3, [r7, #4] - 8005cb6: 2b00 cmp r3, #0 - 8005cb8: d107 bne.n 8005cca - 8005cba: 4b0f ldr r3, [pc, #60] ; (8005cf8 ) - 8005cbc: f44f 7254 mov.w r2, #848 ; 0x350 - 8005cc0: 490e ldr r1, [pc, #56] ; (8005cfc ) - 8005cc2: 480f ldr r0, [pc, #60] ; (8005d00 ) - 8005cc4: f00b f9f0 bl 80110a8 - 8005cc8: e013 b.n 8005cf2 - - if (!(netif->flags & NETIF_FLAG_UP)) { - 8005cca: 687b ldr r3, [r7, #4] - 8005ccc: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8005cd0: f003 0301 and.w r3, r3, #1 - 8005cd4: 2b00 cmp r3, #0 - 8005cd6: d10c bne.n 8005cf2 - netif_set_flags(netif, NETIF_FLAG_UP); - 8005cd8: 687b ldr r3, [r7, #4] - 8005cda: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8005cde: f043 0301 orr.w r3, r3, #1 - 8005ce2: b2da uxtb r2, r3 - 8005ce4: 687b ldr r3, [r7, #4] - 8005ce6: f883 2031 strb.w r2, [r3, #49] ; 0x31 - args.status_changed.state = 1; - netif_invoke_ext_callback(netif, LWIP_NSC_STATUS_CHANGED, &args); - } -#endif - - netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4 | NETIF_REPORT_TYPE_IPV6); - 8005cea: 2103 movs r1, #3 - 8005cec: 6878 ldr r0, [r7, #4] - 8005cee: f000 f809 bl 8005d04 -#if LWIP_IPV6 - nd6_restart_netif(netif); -#endif /* LWIP_IPV6 */ - } -} - 8005cf2: 3708 adds r7, #8 - 8005cf4: 46bd mov sp, r7 - 8005cf6: bd80 pop {r7, pc} - 8005cf8: 08015f7c .word 0x08015f7c - 8005cfc: 08016104 .word 0x08016104 - 8005d00: 08015fcc .word 0x08015fcc - -08005d04 : - -/** Send ARP/IGMP/MLD/RS events, e.g. on link-up/netif-up or addr-change - */ -static void -netif_issue_reports(struct netif *netif, u8_t report_type) -{ - 8005d04: b580 push {r7, lr} - 8005d06: b082 sub sp, #8 - 8005d08: af00 add r7, sp, #0 - 8005d0a: 6078 str r0, [r7, #4] - 8005d0c: 460b mov r3, r1 - 8005d0e: 70fb strb r3, [r7, #3] - LWIP_ASSERT("netif_issue_reports: invalid netif", netif != NULL); - 8005d10: 687b ldr r3, [r7, #4] - 8005d12: 2b00 cmp r3, #0 - 8005d14: d106 bne.n 8005d24 - 8005d16: 4b18 ldr r3, [pc, #96] ; (8005d78 ) - 8005d18: f240 326d movw r2, #877 ; 0x36d - 8005d1c: 4917 ldr r1, [pc, #92] ; (8005d7c ) - 8005d1e: 4818 ldr r0, [pc, #96] ; (8005d80 ) - 8005d20: f00b f9c2 bl 80110a8 - - /* Only send reports when both link and admin states are up */ - if (!(netif->flags & NETIF_FLAG_LINK_UP) || - 8005d24: 687b ldr r3, [r7, #4] - 8005d26: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8005d2a: f003 0304 and.w r3, r3, #4 - 8005d2e: 2b00 cmp r3, #0 - 8005d30: d01e beq.n 8005d70 - !(netif->flags & NETIF_FLAG_UP)) { - 8005d32: 687b ldr r3, [r7, #4] - 8005d34: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8005d38: f003 0301 and.w r3, r3, #1 - if (!(netif->flags & NETIF_FLAG_LINK_UP) || - 8005d3c: 2b00 cmp r3, #0 - 8005d3e: d017 beq.n 8005d70 - return; - } - -#if LWIP_IPV4 - if ((report_type & NETIF_REPORT_TYPE_IPV4) && - 8005d40: 78fb ldrb r3, [r7, #3] - 8005d42: f003 0301 and.w r3, r3, #1 - 8005d46: 2b00 cmp r3, #0 - 8005d48: d013 beq.n 8005d72 - !ip4_addr_isany_val(*netif_ip4_addr(netif))) { - 8005d4a: 687b ldr r3, [r7, #4] - 8005d4c: 3304 adds r3, #4 - 8005d4e: 681b ldr r3, [r3, #0] - if ((report_type & NETIF_REPORT_TYPE_IPV4) && - 8005d50: 2b00 cmp r3, #0 - 8005d52: d00e beq.n 8005d72 -#if LWIP_ARP - /* For Ethernet network interfaces, we would like to send a "gratuitous ARP" */ - if (netif->flags & (NETIF_FLAG_ETHARP)) { - 8005d54: 687b ldr r3, [r7, #4] - 8005d56: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8005d5a: f003 0308 and.w r3, r3, #8 - 8005d5e: 2b00 cmp r3, #0 - 8005d60: d007 beq.n 8005d72 - etharp_gratuitous(netif); - 8005d62: 687b ldr r3, [r7, #4] - 8005d64: 3304 adds r3, #4 - 8005d66: 4619 mov r1, r3 - 8005d68: 6878 ldr r0, [r7, #4] - 8005d6a: f009 fc51 bl 800f610 - 8005d6e: e000 b.n 8005d72 - return; - 8005d70: bf00 nop - /* send mld memberships */ - mld6_report_groups(netif); -#endif /* LWIP_IPV6_MLD */ - } -#endif /* LWIP_IPV6 */ -} - 8005d72: 3708 adds r7, #8 - 8005d74: 46bd mov sp, r7 - 8005d76: bd80 pop {r7, pc} - 8005d78: 08015f7c .word 0x08015f7c - 8005d7c: 08016120 .word 0x08016120 - 8005d80: 08015fcc .word 0x08015fcc - -08005d84 : - * @ingroup netif - * Bring an interface down, disabling any traffic processing. - */ -void -netif_set_down(struct netif *netif) -{ - 8005d84: b580 push {r7, lr} - 8005d86: b082 sub sp, #8 - 8005d88: af00 add r7, sp, #0 - 8005d8a: 6078 str r0, [r7, #4] - LWIP_ASSERT_CORE_LOCKED(); - - LWIP_ERROR("netif_set_down: invalid netif", netif != NULL, return); - 8005d8c: 687b ldr r3, [r7, #4] - 8005d8e: 2b00 cmp r3, #0 - 8005d90: d107 bne.n 8005da2 - 8005d92: 4b12 ldr r3, [pc, #72] ; (8005ddc ) - 8005d94: f240 329b movw r2, #923 ; 0x39b - 8005d98: 4911 ldr r1, [pc, #68] ; (8005de0 ) - 8005d9a: 4812 ldr r0, [pc, #72] ; (8005de4 ) - 8005d9c: f00b f984 bl 80110a8 - 8005da0: e019 b.n 8005dd6 - - if (netif->flags & NETIF_FLAG_UP) { - 8005da2: 687b ldr r3, [r7, #4] - 8005da4: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8005da8: f003 0301 and.w r3, r3, #1 - 8005dac: 2b00 cmp r3, #0 - 8005dae: d012 beq.n 8005dd6 - args.status_changed.state = 0; - netif_invoke_ext_callback(netif, LWIP_NSC_STATUS_CHANGED, &args); - } -#endif - - netif_clear_flags(netif, NETIF_FLAG_UP); - 8005db0: 687b ldr r3, [r7, #4] - 8005db2: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8005db6: f023 0301 bic.w r3, r3, #1 - 8005dba: b2da uxtb r2, r3 - 8005dbc: 687b ldr r3, [r7, #4] - 8005dbe: f883 2031 strb.w r2, [r3, #49] ; 0x31 - MIB2_COPY_SYSUPTIME_TO(&netif->ts); - -#if LWIP_IPV4 && LWIP_ARP - if (netif->flags & NETIF_FLAG_ETHARP) { - 8005dc2: 687b ldr r3, [r7, #4] - 8005dc4: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8005dc8: f003 0308 and.w r3, r3, #8 - 8005dcc: 2b00 cmp r3, #0 - 8005dce: d002 beq.n 8005dd6 - etharp_cleanup_netif(netif); - 8005dd0: 6878 ldr r0, [r7, #4] - 8005dd2: f008 ffd7 bl 800ed84 - nd6_cleanup_netif(netif); -#endif /* LWIP_IPV6 */ - - NETIF_STATUS_CALLBACK(netif); - } -} - 8005dd6: 3708 adds r7, #8 - 8005dd8: 46bd mov sp, r7 - 8005dda: bd80 pop {r7, pc} - 8005ddc: 08015f7c .word 0x08015f7c - 8005de0: 08016144 .word 0x08016144 - 8005de4: 08015fcc .word 0x08015fcc - -08005de8 : - * @ingroup netif - * Called by a driver when its link goes up - */ -void -netif_set_link_up(struct netif *netif) -{ - 8005de8: b580 push {r7, lr} - 8005dea: b082 sub sp, #8 - 8005dec: af00 add r7, sp, #0 - 8005dee: 6078 str r0, [r7, #4] - LWIP_ASSERT_CORE_LOCKED(); - - LWIP_ERROR("netif_set_link_up: invalid netif", netif != NULL, return); - 8005df0: 687b ldr r3, [r7, #4] - 8005df2: 2b00 cmp r3, #0 - 8005df4: d107 bne.n 8005e06 - 8005df6: 4b15 ldr r3, [pc, #84] ; (8005e4c ) - 8005df8: f44f 7278 mov.w r2, #992 ; 0x3e0 - 8005dfc: 4914 ldr r1, [pc, #80] ; (8005e50 ) - 8005dfe: 4815 ldr r0, [pc, #84] ; (8005e54 ) - 8005e00: f00b f952 bl 80110a8 - 8005e04: e01e b.n 8005e44 - - if (!(netif->flags & NETIF_FLAG_LINK_UP)) { - 8005e06: 687b ldr r3, [r7, #4] - 8005e08: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8005e0c: f003 0304 and.w r3, r3, #4 - 8005e10: 2b00 cmp r3, #0 - 8005e12: d117 bne.n 8005e44 - netif_set_flags(netif, NETIF_FLAG_LINK_UP); - 8005e14: 687b ldr r3, [r7, #4] - 8005e16: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8005e1a: f043 0304 orr.w r3, r3, #4 - 8005e1e: b2da uxtb r2, r3 - 8005e20: 687b ldr r3, [r7, #4] - 8005e22: f883 2031 strb.w r2, [r3, #49] ; 0x31 - -#if LWIP_DHCP - dhcp_network_changed(netif); - 8005e26: 6878 ldr r0, [r7, #4] - 8005e28: f007 fa1c bl 800d264 - -#if LWIP_AUTOIP - autoip_network_changed(netif); -#endif /* LWIP_AUTOIP */ - - netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4 | NETIF_REPORT_TYPE_IPV6); - 8005e2c: 2103 movs r1, #3 - 8005e2e: 6878 ldr r0, [r7, #4] - 8005e30: f7ff ff68 bl 8005d04 -#if LWIP_IPV6 - nd6_restart_netif(netif); -#endif /* LWIP_IPV6 */ - - NETIF_LINK_CALLBACK(netif); - 8005e34: 687b ldr r3, [r7, #4] - 8005e36: 69db ldr r3, [r3, #28] - 8005e38: 2b00 cmp r3, #0 - 8005e3a: d003 beq.n 8005e44 - 8005e3c: 687b ldr r3, [r7, #4] - 8005e3e: 69db ldr r3, [r3, #28] - 8005e40: 6878 ldr r0, [r7, #4] - 8005e42: 4798 blx r3 - args.link_changed.state = 1; - netif_invoke_ext_callback(netif, LWIP_NSC_LINK_CHANGED, &args); - } -#endif - } -} - 8005e44: 3708 adds r7, #8 - 8005e46: 46bd mov sp, r7 - 8005e48: bd80 pop {r7, pc} - 8005e4a: bf00 nop - 8005e4c: 08015f7c .word 0x08015f7c - 8005e50: 08016164 .word 0x08016164 - 8005e54: 08015fcc .word 0x08015fcc - -08005e58 : - * @ingroup netif - * Called by a driver when its link goes down - */ -void -netif_set_link_down(struct netif *netif) -{ - 8005e58: b580 push {r7, lr} - 8005e5a: b082 sub sp, #8 - 8005e5c: af00 add r7, sp, #0 - 8005e5e: 6078 str r0, [r7, #4] - LWIP_ASSERT_CORE_LOCKED(); - - LWIP_ERROR("netif_set_link_down: invalid netif", netif != NULL, return); - 8005e60: 687b ldr r3, [r7, #4] - 8005e62: 2b00 cmp r3, #0 - 8005e64: d107 bne.n 8005e76 - 8005e66: 4b11 ldr r3, [pc, #68] ; (8005eac ) - 8005e68: f240 4206 movw r2, #1030 ; 0x406 - 8005e6c: 4910 ldr r1, [pc, #64] ; (8005eb0 ) - 8005e6e: 4811 ldr r0, [pc, #68] ; (8005eb4 ) - 8005e70: f00b f91a bl 80110a8 - 8005e74: e017 b.n 8005ea6 - - if (netif->flags & NETIF_FLAG_LINK_UP) { - 8005e76: 687b ldr r3, [r7, #4] - 8005e78: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8005e7c: f003 0304 and.w r3, r3, #4 - 8005e80: 2b00 cmp r3, #0 - 8005e82: d010 beq.n 8005ea6 - netif_clear_flags(netif, NETIF_FLAG_LINK_UP); - 8005e84: 687b ldr r3, [r7, #4] - 8005e86: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8005e8a: f023 0304 bic.w r3, r3, #4 - 8005e8e: b2da uxtb r2, r3 - 8005e90: 687b ldr r3, [r7, #4] - 8005e92: f883 2031 strb.w r2, [r3, #49] ; 0x31 - NETIF_LINK_CALLBACK(netif); - 8005e96: 687b ldr r3, [r7, #4] - 8005e98: 69db ldr r3, [r3, #28] - 8005e9a: 2b00 cmp r3, #0 - 8005e9c: d003 beq.n 8005ea6 - 8005e9e: 687b ldr r3, [r7, #4] - 8005ea0: 69db ldr r3, [r3, #28] - 8005ea2: 6878 ldr r0, [r7, #4] - 8005ea4: 4798 blx r3 - args.link_changed.state = 0; - netif_invoke_ext_callback(netif, LWIP_NSC_LINK_CHANGED, &args); - } -#endif - } -} - 8005ea6: 3708 adds r7, #8 - 8005ea8: 46bd mov sp, r7 - 8005eaa: bd80 pop {r7, pc} - 8005eac: 08015f7c .word 0x08015f7c - 8005eb0: 08016188 .word 0x08016188 - 8005eb4: 08015fcc .word 0x08015fcc - -08005eb8 : - * @ingroup netif - * Set callback to be called when link is brought up/down - */ -void -netif_set_link_callback(struct netif *netif, netif_status_callback_fn link_callback) -{ - 8005eb8: b480 push {r7} - 8005eba: b083 sub sp, #12 - 8005ebc: af00 add r7, sp, #0 - 8005ebe: 6078 str r0, [r7, #4] - 8005ec0: 6039 str r1, [r7, #0] - LWIP_ASSERT_CORE_LOCKED(); - - if (netif) { - 8005ec2: 687b ldr r3, [r7, #4] - 8005ec4: 2b00 cmp r3, #0 - 8005ec6: d002 beq.n 8005ece - netif->link_callback = link_callback; - 8005ec8: 687b ldr r3, [r7, #4] - 8005eca: 683a ldr r2, [r7, #0] - 8005ecc: 61da str r2, [r3, #28] - } -} - 8005ece: bf00 nop - 8005ed0: 370c adds r7, #12 - 8005ed2: 46bd mov sp, r7 - 8005ed4: f85d 7b04 ldr.w r7, [sp], #4 - 8005ed8: 4770 bx lr - -08005eda : -#if LWIP_IPV4 -/** Dummy IPv4 output function for netifs not supporting IPv4 - */ -static err_t -netif_null_output_ip4(struct netif *netif, struct pbuf *p, const ip4_addr_t *ipaddr) -{ - 8005eda: b480 push {r7} - 8005edc: b085 sub sp, #20 - 8005ede: af00 add r7, sp, #0 - 8005ee0: 60f8 str r0, [r7, #12] - 8005ee2: 60b9 str r1, [r7, #8] - 8005ee4: 607a str r2, [r7, #4] - LWIP_UNUSED_ARG(netif); - LWIP_UNUSED_ARG(p); - LWIP_UNUSED_ARG(ipaddr); - - return ERR_IF; - 8005ee6: f06f 030b mvn.w r3, #11 -} - 8005eea: 4618 mov r0, r3 - 8005eec: 3714 adds r7, #20 - 8005eee: 46bd mov sp, r7 - 8005ef0: f85d 7b04 ldr.w r7, [sp], #4 - 8005ef4: 4770 bx lr - ... - -08005ef8 : -* -* @param idx index of netif to find -*/ -struct netif * -netif_get_by_index(u8_t idx) -{ - 8005ef8: b480 push {r7} - 8005efa: b085 sub sp, #20 - 8005efc: af00 add r7, sp, #0 - 8005efe: 4603 mov r3, r0 - 8005f00: 71fb strb r3, [r7, #7] - struct netif *netif; - - LWIP_ASSERT_CORE_LOCKED(); - - if (idx != NETIF_NO_INDEX) { - 8005f02: 79fb ldrb r3, [r7, #7] - 8005f04: 2b00 cmp r3, #0 - 8005f06: d013 beq.n 8005f30 - NETIF_FOREACH(netif) { - 8005f08: 4b0d ldr r3, [pc, #52] ; (8005f40 ) - 8005f0a: 681b ldr r3, [r3, #0] - 8005f0c: 60fb str r3, [r7, #12] - 8005f0e: e00c b.n 8005f2a - if (idx == netif_get_index(netif)) { - 8005f10: 68fb ldr r3, [r7, #12] - 8005f12: f893 3034 ldrb.w r3, [r3, #52] ; 0x34 - 8005f16: 3301 adds r3, #1 - 8005f18: b2db uxtb r3, r3 - 8005f1a: 79fa ldrb r2, [r7, #7] - 8005f1c: 429a cmp r2, r3 - 8005f1e: d101 bne.n 8005f24 - return netif; /* found! */ - 8005f20: 68fb ldr r3, [r7, #12] - 8005f22: e006 b.n 8005f32 - NETIF_FOREACH(netif) { - 8005f24: 68fb ldr r3, [r7, #12] - 8005f26: 681b ldr r3, [r3, #0] - 8005f28: 60fb str r3, [r7, #12] - 8005f2a: 68fb ldr r3, [r7, #12] - 8005f2c: 2b00 cmp r3, #0 - 8005f2e: d1ef bne.n 8005f10 - } - } - } - - return NULL; - 8005f30: 2300 movs r3, #0 -} - 8005f32: 4618 mov r0, r3 - 8005f34: 3714 adds r7, #20 - 8005f36: 46bd mov sp, r7 - 8005f38: f85d 7b04 ldr.w r7, [sp], #4 - 8005f3c: 4770 bx lr - 8005f3e: bf00 nop - 8005f40: 200099c8 .word 0x200099c8 - -08005f44 : -#if !NO_SYS -static -#endif /* !NO_SYS */ -void -pbuf_free_ooseq(void) -{ - 8005f44: b580 push {r7, lr} - 8005f46: b082 sub sp, #8 - 8005f48: af00 add r7, sp, #0 - struct tcp_pcb *pcb; - SYS_ARCH_SET(pbuf_free_ooseq_pending, 0); - 8005f4a: 4b0c ldr r3, [pc, #48] ; (8005f7c ) - 8005f4c: 2200 movs r2, #0 - 8005f4e: 701a strb r2, [r3, #0] - - for (pcb = tcp_active_pcbs; NULL != pcb; pcb = pcb->next) { - 8005f50: 4b0b ldr r3, [pc, #44] ; (8005f80 ) - 8005f52: 681b ldr r3, [r3, #0] - 8005f54: 607b str r3, [r7, #4] - 8005f56: e00a b.n 8005f6e - if (pcb->ooseq != NULL) { - 8005f58: 687b ldr r3, [r7, #4] - 8005f5a: 6f5b ldr r3, [r3, #116] ; 0x74 - 8005f5c: 2b00 cmp r3, #0 - 8005f5e: d003 beq.n 8005f68 - /** Free the ooseq pbufs of one PCB only */ - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free_ooseq: freeing out-of-sequence pbufs\n")); - tcp_free_ooseq(pcb); - 8005f60: 6878 ldr r0, [r7, #4] - 8005f62: f002 f94d bl 8008200 - return; - 8005f66: e005 b.n 8005f74 - for (pcb = tcp_active_pcbs; NULL != pcb; pcb = pcb->next) { - 8005f68: 687b ldr r3, [r7, #4] - 8005f6a: 68db ldr r3, [r3, #12] - 8005f6c: 607b str r3, [r7, #4] - 8005f6e: 687b ldr r3, [r7, #4] - 8005f70: 2b00 cmp r3, #0 - 8005f72: d1f1 bne.n 8005f58 - } - } -} - 8005f74: 3708 adds r7, #8 - 8005f76: 46bd mov sp, r7 - 8005f78: bd80 pop {r7, pc} - 8005f7a: bf00 nop - 8005f7c: 200099d1 .word 0x200099d1 - 8005f80: 200099e0 .word 0x200099e0 - -08005f84 : -#endif /* !NO_SYS */ - -/** Queue a call to pbuf_free_ooseq if not already queued. */ -static void -pbuf_pool_is_empty(void) -{ - 8005f84: b480 push {r7} - 8005f86: af00 add r7, sp, #0 -#ifndef PBUF_POOL_FREE_OOSEQ_QUEUE_CALL - SYS_ARCH_SET(pbuf_free_ooseq_pending, 1); - 8005f88: 4b03 ldr r3, [pc, #12] ; (8005f98 ) - 8005f8a: 2201 movs r2, #1 - 8005f8c: 701a strb r2, [r3, #0] - if (!queued) { - /* queue a call to pbuf_free_ooseq if not already queued */ - PBUF_POOL_FREE_OOSEQ_QUEUE_CALL(); - } -#endif /* PBUF_POOL_FREE_OOSEQ_QUEUE_CALL */ -} - 8005f8e: bf00 nop - 8005f90: 46bd mov sp, r7 - 8005f92: f85d 7b04 ldr.w r7, [sp], #4 - 8005f96: 4770 bx lr - 8005f98: 200099d1 .word 0x200099d1 - -08005f9c : -#endif /* !LWIP_TCP || !TCP_QUEUE_OOSEQ || !PBUF_POOL_FREE_OOSEQ */ - -/* Initialize members of struct pbuf after allocation */ -static void -pbuf_init_alloced_pbuf(struct pbuf *p, void *payload, u16_t tot_len, u16_t len, pbuf_type type, u8_t flags) -{ - 8005f9c: b480 push {r7} - 8005f9e: b085 sub sp, #20 - 8005fa0: af00 add r7, sp, #0 - 8005fa2: 60f8 str r0, [r7, #12] - 8005fa4: 60b9 str r1, [r7, #8] - 8005fa6: 4611 mov r1, r2 - 8005fa8: 461a mov r2, r3 - 8005faa: 460b mov r3, r1 - 8005fac: 80fb strh r3, [r7, #6] - 8005fae: 4613 mov r3, r2 - 8005fb0: 80bb strh r3, [r7, #4] - p->next = NULL; - 8005fb2: 68fb ldr r3, [r7, #12] - 8005fb4: 2200 movs r2, #0 - 8005fb6: 601a str r2, [r3, #0] - p->payload = payload; - 8005fb8: 68fb ldr r3, [r7, #12] - 8005fba: 68ba ldr r2, [r7, #8] - 8005fbc: 605a str r2, [r3, #4] - p->tot_len = tot_len; - 8005fbe: 68fb ldr r3, [r7, #12] - 8005fc0: 88fa ldrh r2, [r7, #6] - 8005fc2: 811a strh r2, [r3, #8] - p->len = len; - 8005fc4: 68fb ldr r3, [r7, #12] - 8005fc6: 88ba ldrh r2, [r7, #4] - 8005fc8: 815a strh r2, [r3, #10] - p->type_internal = (u8_t)type; - 8005fca: 8b3b ldrh r3, [r7, #24] - 8005fcc: b2da uxtb r2, r3 - 8005fce: 68fb ldr r3, [r7, #12] - 8005fd0: 731a strb r2, [r3, #12] - p->flags = flags; - 8005fd2: 68fb ldr r3, [r7, #12] - 8005fd4: 7f3a ldrb r2, [r7, #28] - 8005fd6: 735a strb r2, [r3, #13] - p->ref = 1; - 8005fd8: 68fb ldr r3, [r7, #12] - 8005fda: 2201 movs r2, #1 - 8005fdc: 739a strb r2, [r3, #14] - p->if_idx = NETIF_NO_INDEX; - 8005fde: 68fb ldr r3, [r7, #12] - 8005fe0: 2200 movs r2, #0 - 8005fe2: 73da strb r2, [r3, #15] -} - 8005fe4: bf00 nop - 8005fe6: 3714 adds r7, #20 - 8005fe8: 46bd mov sp, r7 - 8005fea: f85d 7b04 ldr.w r7, [sp], #4 - 8005fee: 4770 bx lr - -08005ff0 : - * @return the allocated pbuf. If multiple pbufs where allocated, this - * is the first pbuf of a pbuf chain. - */ -struct pbuf * -pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type) -{ - 8005ff0: b580 push {r7, lr} - 8005ff2: b08c sub sp, #48 ; 0x30 - 8005ff4: af02 add r7, sp, #8 - 8005ff6: 4603 mov r3, r0 - 8005ff8: 71fb strb r3, [r7, #7] - 8005ffa: 460b mov r3, r1 - 8005ffc: 80bb strh r3, [r7, #4] - 8005ffe: 4613 mov r3, r2 - 8006000: 807b strh r3, [r7, #2] - struct pbuf *p; - u16_t offset = (u16_t)layer; - 8006002: 79fb ldrb r3, [r7, #7] - 8006004: 847b strh r3, [r7, #34] ; 0x22 - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F")\n", length)); - - switch (type) { - 8006006: 887b ldrh r3, [r7, #2] - 8006008: f5b3 7f20 cmp.w r3, #640 ; 0x280 - 800600c: d07f beq.n 800610e - 800600e: f5b3 7f20 cmp.w r3, #640 ; 0x280 - 8006012: f300 80c8 bgt.w 80061a6 - 8006016: f5b3 7fc1 cmp.w r3, #386 ; 0x182 - 800601a: d010 beq.n 800603e - 800601c: f5b3 7fc1 cmp.w r3, #386 ; 0x182 - 8006020: f300 80c1 bgt.w 80061a6 - 8006024: 2b01 cmp r3, #1 - 8006026: d002 beq.n 800602e - 8006028: 2b41 cmp r3, #65 ; 0x41 - 800602a: f040 80bc bne.w 80061a6 - case PBUF_REF: /* fall through */ - case PBUF_ROM: - p = pbuf_alloc_reference(NULL, length, type); - 800602e: 887a ldrh r2, [r7, #2] - 8006030: 88bb ldrh r3, [r7, #4] - 8006032: 4619 mov r1, r3 - 8006034: 2000 movs r0, #0 - 8006036: f000 f8d1 bl 80061dc - 800603a: 6278 str r0, [r7, #36] ; 0x24 - break; - 800603c: e0bd b.n 80061ba - case PBUF_POOL: { - struct pbuf *q, *last; - u16_t rem_len; /* remaining length */ - p = NULL; - 800603e: 2300 movs r3, #0 - 8006040: 627b str r3, [r7, #36] ; 0x24 - last = NULL; - 8006042: 2300 movs r3, #0 - 8006044: 61fb str r3, [r7, #28] - rem_len = length; - 8006046: 88bb ldrh r3, [r7, #4] - 8006048: 837b strh r3, [r7, #26] - do { - u16_t qlen; - q = (struct pbuf *)memp_malloc(MEMP_PBUF_POOL); - 800604a: 2008 movs r0, #8 - 800604c: f7ff fbc2 bl 80057d4 - 8006050: 6138 str r0, [r7, #16] - if (q == NULL) { - 8006052: 693b ldr r3, [r7, #16] - 8006054: 2b00 cmp r3, #0 - 8006056: d109 bne.n 800606c - PBUF_POOL_IS_EMPTY(); - 8006058: f7ff ff94 bl 8005f84 - /* free chain so far allocated */ - if (p) { - 800605c: 6a7b ldr r3, [r7, #36] ; 0x24 - 800605e: 2b00 cmp r3, #0 - 8006060: d002 beq.n 8006068 - pbuf_free(p); - 8006062: 6a78 ldr r0, [r7, #36] ; 0x24 - 8006064: f000 faa8 bl 80065b8 - } - /* bail out unsuccessfully */ - return NULL; - 8006068: 2300 movs r3, #0 - 800606a: e0a7 b.n 80061bc - } - qlen = LWIP_MIN(rem_len, (u16_t)(PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset))); - 800606c: 8c7b ldrh r3, [r7, #34] ; 0x22 - 800606e: 3303 adds r3, #3 - 8006070: b29b uxth r3, r3 - 8006072: f023 0303 bic.w r3, r3, #3 - 8006076: b29b uxth r3, r3 - 8006078: f5c3 7314 rsb r3, r3, #592 ; 0x250 - 800607c: b29b uxth r3, r3 - 800607e: 8b7a ldrh r2, [r7, #26] - 8006080: 4293 cmp r3, r2 - 8006082: bf28 it cs - 8006084: 4613 movcs r3, r2 - 8006086: 81fb strh r3, [r7, #14] - pbuf_init_alloced_pbuf(q, LWIP_MEM_ALIGN((void *)((u8_t *)q + SIZEOF_STRUCT_PBUF + offset)), - 8006088: 8c7b ldrh r3, [r7, #34] ; 0x22 - 800608a: 3310 adds r3, #16 - 800608c: 693a ldr r2, [r7, #16] - 800608e: 4413 add r3, r2 - 8006090: 3303 adds r3, #3 - 8006092: f023 0303 bic.w r3, r3, #3 - 8006096: 4618 mov r0, r3 - 8006098: 89f9 ldrh r1, [r7, #14] - 800609a: 8b7a ldrh r2, [r7, #26] - 800609c: 2300 movs r3, #0 - 800609e: 9301 str r3, [sp, #4] - 80060a0: 887b ldrh r3, [r7, #2] - 80060a2: 9300 str r3, [sp, #0] - 80060a4: 460b mov r3, r1 - 80060a6: 4601 mov r1, r0 - 80060a8: 6938 ldr r0, [r7, #16] - 80060aa: f7ff ff77 bl 8005f9c - rem_len, qlen, type, 0); - LWIP_ASSERT("pbuf_alloc: pbuf q->payload properly aligned", - 80060ae: 693b ldr r3, [r7, #16] - 80060b0: 685b ldr r3, [r3, #4] - 80060b2: f003 0303 and.w r3, r3, #3 - 80060b6: 2b00 cmp r3, #0 - 80060b8: d006 beq.n 80060c8 - 80060ba: 4b42 ldr r3, [pc, #264] ; (80061c4 ) - 80060bc: f44f 7280 mov.w r2, #256 ; 0x100 - 80060c0: 4941 ldr r1, [pc, #260] ; (80061c8 ) - 80060c2: 4842 ldr r0, [pc, #264] ; (80061cc ) - 80060c4: f00a fff0 bl 80110a8 - ((mem_ptr_t)q->payload % MEM_ALIGNMENT) == 0); - LWIP_ASSERT("PBUF_POOL_BUFSIZE must be bigger than MEM_ALIGNMENT", - 80060c8: 8c7b ldrh r3, [r7, #34] ; 0x22 - 80060ca: 3303 adds r3, #3 - 80060cc: f023 0303 bic.w r3, r3, #3 - 80060d0: f5b3 7f14 cmp.w r3, #592 ; 0x250 - 80060d4: d106 bne.n 80060e4 - 80060d6: 4b3b ldr r3, [pc, #236] ; (80061c4 ) - 80060d8: f44f 7281 mov.w r2, #258 ; 0x102 - 80060dc: 493c ldr r1, [pc, #240] ; (80061d0 ) - 80060de: 483b ldr r0, [pc, #236] ; (80061cc ) - 80060e0: f00a ffe2 bl 80110a8 - (PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset)) > 0 ); - if (p == NULL) { - 80060e4: 6a7b ldr r3, [r7, #36] ; 0x24 - 80060e6: 2b00 cmp r3, #0 - 80060e8: d102 bne.n 80060f0 - /* allocated head of pbuf chain (into p) */ - p = q; - 80060ea: 693b ldr r3, [r7, #16] - 80060ec: 627b str r3, [r7, #36] ; 0x24 - 80060ee: e002 b.n 80060f6 - } else { - /* make previous pbuf point to this pbuf */ - last->next = q; - 80060f0: 69fb ldr r3, [r7, #28] - 80060f2: 693a ldr r2, [r7, #16] - 80060f4: 601a str r2, [r3, #0] - } - last = q; - 80060f6: 693b ldr r3, [r7, #16] - 80060f8: 61fb str r3, [r7, #28] - rem_len = (u16_t)(rem_len - qlen); - 80060fa: 8b7a ldrh r2, [r7, #26] - 80060fc: 89fb ldrh r3, [r7, #14] - 80060fe: 1ad3 subs r3, r2, r3 - 8006100: 837b strh r3, [r7, #26] - offset = 0; - 8006102: 2300 movs r3, #0 - 8006104: 847b strh r3, [r7, #34] ; 0x22 - } while (rem_len > 0); - 8006106: 8b7b ldrh r3, [r7, #26] - 8006108: 2b00 cmp r3, #0 - 800610a: d19e bne.n 800604a - break; - 800610c: e055 b.n 80061ba - } - case PBUF_RAM: { - u16_t payload_len = (u16_t)(LWIP_MEM_ALIGN_SIZE(offset) + LWIP_MEM_ALIGN_SIZE(length)); - 800610e: 8c7b ldrh r3, [r7, #34] ; 0x22 - 8006110: 3303 adds r3, #3 - 8006112: b29b uxth r3, r3 - 8006114: f023 0303 bic.w r3, r3, #3 - 8006118: b29a uxth r2, r3 - 800611a: 88bb ldrh r3, [r7, #4] - 800611c: 3303 adds r3, #3 - 800611e: b29b uxth r3, r3 - 8006120: f023 0303 bic.w r3, r3, #3 - 8006124: b29b uxth r3, r3 - 8006126: 4413 add r3, r2 - 8006128: 833b strh r3, [r7, #24] - mem_size_t alloc_len = (mem_size_t)(LWIP_MEM_ALIGN_SIZE(SIZEOF_STRUCT_PBUF) + payload_len); - 800612a: 8b3b ldrh r3, [r7, #24] - 800612c: 3310 adds r3, #16 - 800612e: 82fb strh r3, [r7, #22] - - /* bug #50040: Check for integer overflow when calculating alloc_len */ - if ((payload_len < LWIP_MEM_ALIGN_SIZE(length)) || - 8006130: 8b3a ldrh r2, [r7, #24] - 8006132: 88bb ldrh r3, [r7, #4] - 8006134: 3303 adds r3, #3 - 8006136: f023 0303 bic.w r3, r3, #3 - 800613a: 429a cmp r2, r3 - 800613c: d306 bcc.n 800614c - (alloc_len < LWIP_MEM_ALIGN_SIZE(length))) { - 800613e: 8afa ldrh r2, [r7, #22] - 8006140: 88bb ldrh r3, [r7, #4] - 8006142: 3303 adds r3, #3 - 8006144: f023 0303 bic.w r3, r3, #3 - if ((payload_len < LWIP_MEM_ALIGN_SIZE(length)) || - 8006148: 429a cmp r2, r3 - 800614a: d201 bcs.n 8006150 - return NULL; - 800614c: 2300 movs r3, #0 - 800614e: e035 b.n 80061bc - } - - /* If pbuf is to be allocated in RAM, allocate memory for it. */ - p = (struct pbuf *)mem_malloc(alloc_len); - 8006150: 8afb ldrh r3, [r7, #22] - 8006152: 4618 mov r0, r3 - 8006154: f7ff f9ae bl 80054b4 - 8006158: 6278 str r0, [r7, #36] ; 0x24 - if (p == NULL) { - 800615a: 6a7b ldr r3, [r7, #36] ; 0x24 - 800615c: 2b00 cmp r3, #0 - 800615e: d101 bne.n 8006164 - return NULL; - 8006160: 2300 movs r3, #0 - 8006162: e02b b.n 80061bc - } - pbuf_init_alloced_pbuf(p, LWIP_MEM_ALIGN((void *)((u8_t *)p + SIZEOF_STRUCT_PBUF + offset)), - 8006164: 8c7b ldrh r3, [r7, #34] ; 0x22 - 8006166: 3310 adds r3, #16 - 8006168: 6a7a ldr r2, [r7, #36] ; 0x24 - 800616a: 4413 add r3, r2 - 800616c: 3303 adds r3, #3 - 800616e: f023 0303 bic.w r3, r3, #3 - 8006172: 4618 mov r0, r3 - 8006174: 88b9 ldrh r1, [r7, #4] - 8006176: 88ba ldrh r2, [r7, #4] - 8006178: 2300 movs r3, #0 - 800617a: 9301 str r3, [sp, #4] - 800617c: 887b ldrh r3, [r7, #2] - 800617e: 9300 str r3, [sp, #0] - 8006180: 460b mov r3, r1 - 8006182: 4601 mov r1, r0 - 8006184: 6a78 ldr r0, [r7, #36] ; 0x24 - 8006186: f7ff ff09 bl 8005f9c - length, length, type, 0); - LWIP_ASSERT("pbuf_alloc: pbuf->payload properly aligned", - 800618a: 6a7b ldr r3, [r7, #36] ; 0x24 - 800618c: 685b ldr r3, [r3, #4] - 800618e: f003 0303 and.w r3, r3, #3 - 8006192: 2b00 cmp r3, #0 - 8006194: d010 beq.n 80061b8 - 8006196: 4b0b ldr r3, [pc, #44] ; (80061c4 ) - 8006198: f44f 7291 mov.w r2, #290 ; 0x122 - 800619c: 490d ldr r1, [pc, #52] ; (80061d4 ) - 800619e: 480b ldr r0, [pc, #44] ; (80061cc ) - 80061a0: f00a ff82 bl 80110a8 - ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0); - break; - 80061a4: e008 b.n 80061b8 - } - default: - LWIP_ASSERT("pbuf_alloc: erroneous type", 0); - 80061a6: 4b07 ldr r3, [pc, #28] ; (80061c4 ) - 80061a8: f240 1227 movw r2, #295 ; 0x127 - 80061ac: 490a ldr r1, [pc, #40] ; (80061d8 ) - 80061ae: 4807 ldr r0, [pc, #28] ; (80061cc ) - 80061b0: f00a ff7a bl 80110a8 - return NULL; - 80061b4: 2300 movs r3, #0 - 80061b6: e001 b.n 80061bc - break; - 80061b8: bf00 nop - } - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F") == %p\n", length, (void *)p)); - return p; - 80061ba: 6a7b ldr r3, [r7, #36] ; 0x24 -} - 80061bc: 4618 mov r0, r3 - 80061be: 3728 adds r7, #40 ; 0x28 - 80061c0: 46bd mov sp, r7 - 80061c2: bd80 pop {r7, pc} - 80061c4: 080161ac .word 0x080161ac - 80061c8: 080161dc .word 0x080161dc - 80061cc: 0801620c .word 0x0801620c - 80061d0: 08016234 .word 0x08016234 - 80061d4: 08016268 .word 0x08016268 - 80061d8: 08016294 .word 0x08016294 - -080061dc : - * - * @return the allocated pbuf. - */ -struct pbuf * -pbuf_alloc_reference(void *payload, u16_t length, pbuf_type type) -{ - 80061dc: b580 push {r7, lr} - 80061de: b086 sub sp, #24 - 80061e0: af02 add r7, sp, #8 - 80061e2: 6078 str r0, [r7, #4] - 80061e4: 460b mov r3, r1 - 80061e6: 807b strh r3, [r7, #2] - 80061e8: 4613 mov r3, r2 - 80061ea: 803b strh r3, [r7, #0] - struct pbuf *p; - LWIP_ASSERT("invalid pbuf_type", (type == PBUF_REF) || (type == PBUF_ROM)); - 80061ec: 883b ldrh r3, [r7, #0] - 80061ee: 2b41 cmp r3, #65 ; 0x41 - 80061f0: d009 beq.n 8006206 - 80061f2: 883b ldrh r3, [r7, #0] - 80061f4: 2b01 cmp r3, #1 - 80061f6: d006 beq.n 8006206 - 80061f8: 4b0f ldr r3, [pc, #60] ; (8006238 ) - 80061fa: f44f 72a5 mov.w r2, #330 ; 0x14a - 80061fe: 490f ldr r1, [pc, #60] ; (800623c ) - 8006200: 480f ldr r0, [pc, #60] ; (8006240 ) - 8006202: f00a ff51 bl 80110a8 - /* only allocate memory for the pbuf structure */ - p = (struct pbuf *)memp_malloc(MEMP_PBUF); - 8006206: 2007 movs r0, #7 - 8006208: f7ff fae4 bl 80057d4 - 800620c: 60f8 str r0, [r7, #12] - if (p == NULL) { - 800620e: 68fb ldr r3, [r7, #12] - 8006210: 2b00 cmp r3, #0 - 8006212: d101 bne.n 8006218 - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, - ("pbuf_alloc_reference: Could not allocate MEMP_PBUF for PBUF_%s.\n", - (type == PBUF_ROM) ? "ROM" : "REF")); - return NULL; - 8006214: 2300 movs r3, #0 - 8006216: e00b b.n 8006230 - } - pbuf_init_alloced_pbuf(p, payload, length, length, type, 0); - 8006218: 8879 ldrh r1, [r7, #2] - 800621a: 887a ldrh r2, [r7, #2] - 800621c: 2300 movs r3, #0 - 800621e: 9301 str r3, [sp, #4] - 8006220: 883b ldrh r3, [r7, #0] - 8006222: 9300 str r3, [sp, #0] - 8006224: 460b mov r3, r1 - 8006226: 6879 ldr r1, [r7, #4] - 8006228: 68f8 ldr r0, [r7, #12] - 800622a: f7ff feb7 bl 8005f9c - return p; - 800622e: 68fb ldr r3, [r7, #12] -} - 8006230: 4618 mov r0, r3 - 8006232: 3710 adds r7, #16 - 8006234: 46bd mov sp, r7 - 8006236: bd80 pop {r7, pc} - 8006238: 080161ac .word 0x080161ac - 800623c: 080162b0 .word 0x080162b0 - 8006240: 0801620c .word 0x0801620c - -08006244 : - * big enough to hold 'length' plus the header size - */ -struct pbuf * -pbuf_alloced_custom(pbuf_layer l, u16_t length, pbuf_type type, struct pbuf_custom *p, - void *payload_mem, u16_t payload_mem_len) -{ - 8006244: b580 push {r7, lr} - 8006246: b088 sub sp, #32 - 8006248: af02 add r7, sp, #8 - 800624a: 607b str r3, [r7, #4] - 800624c: 4603 mov r3, r0 - 800624e: 73fb strb r3, [r7, #15] - 8006250: 460b mov r3, r1 - 8006252: 81bb strh r3, [r7, #12] - 8006254: 4613 mov r3, r2 - 8006256: 817b strh r3, [r7, #10] - u16_t offset = (u16_t)l; - 8006258: 7bfb ldrb r3, [r7, #15] - 800625a: 827b strh r3, [r7, #18] - void *payload; - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloced_custom(length=%"U16_F")\n", length)); - - if (LWIP_MEM_ALIGN_SIZE(offset) + length > payload_mem_len) { - 800625c: 8a7b ldrh r3, [r7, #18] - 800625e: 3303 adds r3, #3 - 8006260: f023 0203 bic.w r2, r3, #3 - 8006264: 89bb ldrh r3, [r7, #12] - 8006266: 441a add r2, r3 - 8006268: 8cbb ldrh r3, [r7, #36] ; 0x24 - 800626a: 429a cmp r2, r3 - 800626c: d901 bls.n 8006272 - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_WARNING, ("pbuf_alloced_custom(length=%"U16_F") buffer too short\n", length)); - return NULL; - 800626e: 2300 movs r3, #0 - 8006270: e018 b.n 80062a4 - } - - if (payload_mem != NULL) { - 8006272: 6a3b ldr r3, [r7, #32] - 8006274: 2b00 cmp r3, #0 - 8006276: d007 beq.n 8006288 - payload = (u8_t *)payload_mem + LWIP_MEM_ALIGN_SIZE(offset); - 8006278: 8a7b ldrh r3, [r7, #18] - 800627a: 3303 adds r3, #3 - 800627c: f023 0303 bic.w r3, r3, #3 - 8006280: 6a3a ldr r2, [r7, #32] - 8006282: 4413 add r3, r2 - 8006284: 617b str r3, [r7, #20] - 8006286: e001 b.n 800628c - } else { - payload = NULL; - 8006288: 2300 movs r3, #0 - 800628a: 617b str r3, [r7, #20] - } - pbuf_init_alloced_pbuf(&p->pbuf, payload, length, length, type, PBUF_FLAG_IS_CUSTOM); - 800628c: 6878 ldr r0, [r7, #4] - 800628e: 89b9 ldrh r1, [r7, #12] - 8006290: 89ba ldrh r2, [r7, #12] - 8006292: 2302 movs r3, #2 - 8006294: 9301 str r3, [sp, #4] - 8006296: 897b ldrh r3, [r7, #10] - 8006298: 9300 str r3, [sp, #0] - 800629a: 460b mov r3, r1 - 800629c: 6979 ldr r1, [r7, #20] - 800629e: f7ff fe7d bl 8005f9c - return &p->pbuf; - 80062a2: 687b ldr r3, [r7, #4] -} - 80062a4: 4618 mov r0, r3 - 80062a6: 3718 adds r7, #24 - 80062a8: 46bd mov sp, r7 - 80062aa: bd80 pop {r7, pc} - -080062ac : - * - * @note Despite its name, pbuf_realloc cannot grow the size of a pbuf (chain). - */ -void -pbuf_realloc(struct pbuf *p, u16_t new_len) -{ - 80062ac: b580 push {r7, lr} - 80062ae: b084 sub sp, #16 - 80062b0: af00 add r7, sp, #0 - 80062b2: 6078 str r0, [r7, #4] - 80062b4: 460b mov r3, r1 - 80062b6: 807b strh r3, [r7, #2] - struct pbuf *q; - u16_t rem_len; /* remaining length */ - u16_t shrink; - - LWIP_ASSERT("pbuf_realloc: p != NULL", p != NULL); - 80062b8: 687b ldr r3, [r7, #4] - 80062ba: 2b00 cmp r3, #0 - 80062bc: d106 bne.n 80062cc - 80062be: 4b3a ldr r3, [pc, #232] ; (80063a8 ) - 80062c0: f44f 72cc mov.w r2, #408 ; 0x198 - 80062c4: 4939 ldr r1, [pc, #228] ; (80063ac ) - 80062c6: 483a ldr r0, [pc, #232] ; (80063b0 ) - 80062c8: f00a feee bl 80110a8 - - /* desired length larger than current length? */ - if (new_len >= p->tot_len) { - 80062cc: 687b ldr r3, [r7, #4] - 80062ce: 891b ldrh r3, [r3, #8] - 80062d0: 887a ldrh r2, [r7, #2] - 80062d2: 429a cmp r2, r3 - 80062d4: d263 bcs.n 800639e - return; - } - - /* the pbuf chain grows by (new_len - p->tot_len) bytes - * (which may be negative in case of shrinking) */ - shrink = (u16_t)(p->tot_len - new_len); - 80062d6: 687b ldr r3, [r7, #4] - 80062d8: 891a ldrh r2, [r3, #8] - 80062da: 887b ldrh r3, [r7, #2] - 80062dc: 1ad3 subs r3, r2, r3 - 80062de: 813b strh r3, [r7, #8] - - /* first, step over any pbufs that should remain in the chain */ - rem_len = new_len; - 80062e0: 887b ldrh r3, [r7, #2] - 80062e2: 817b strh r3, [r7, #10] - q = p; - 80062e4: 687b ldr r3, [r7, #4] - 80062e6: 60fb str r3, [r7, #12] - /* should this pbuf be kept? */ - while (rem_len > q->len) { - 80062e8: e018 b.n 800631c - /* decrease remaining length by pbuf length */ - rem_len = (u16_t)(rem_len - q->len); - 80062ea: 68fb ldr r3, [r7, #12] - 80062ec: 895b ldrh r3, [r3, #10] - 80062ee: 897a ldrh r2, [r7, #10] - 80062f0: 1ad3 subs r3, r2, r3 - 80062f2: 817b strh r3, [r7, #10] - /* decrease total length indicator */ - q->tot_len = (u16_t)(q->tot_len - shrink); - 80062f4: 68fb ldr r3, [r7, #12] - 80062f6: 891a ldrh r2, [r3, #8] - 80062f8: 893b ldrh r3, [r7, #8] - 80062fa: 1ad3 subs r3, r2, r3 - 80062fc: b29a uxth r2, r3 - 80062fe: 68fb ldr r3, [r7, #12] - 8006300: 811a strh r2, [r3, #8] - /* proceed to next pbuf in chain */ - q = q->next; - 8006302: 68fb ldr r3, [r7, #12] - 8006304: 681b ldr r3, [r3, #0] - 8006306: 60fb str r3, [r7, #12] - LWIP_ASSERT("pbuf_realloc: q != NULL", q != NULL); - 8006308: 68fb ldr r3, [r7, #12] - 800630a: 2b00 cmp r3, #0 - 800630c: d106 bne.n 800631c - 800630e: 4b26 ldr r3, [pc, #152] ; (80063a8 ) - 8006310: f240 12af movw r2, #431 ; 0x1af - 8006314: 4927 ldr r1, [pc, #156] ; (80063b4 ) - 8006316: 4826 ldr r0, [pc, #152] ; (80063b0 ) - 8006318: f00a fec6 bl 80110a8 - while (rem_len > q->len) { - 800631c: 68fb ldr r3, [r7, #12] - 800631e: 895b ldrh r3, [r3, #10] - 8006320: 897a ldrh r2, [r7, #10] - 8006322: 429a cmp r2, r3 - 8006324: d8e1 bhi.n 80062ea - /* we have now reached the new last pbuf (in q) */ - /* rem_len == desired length for pbuf q */ - - /* shrink allocated memory for PBUF_RAM */ - /* (other types merely adjust their length fields */ - if (pbuf_match_allocsrc(q, PBUF_TYPE_ALLOC_SRC_MASK_STD_HEAP) && (rem_len != q->len) - 8006326: 68fb ldr r3, [r7, #12] - 8006328: 7b1b ldrb r3, [r3, #12] - 800632a: f003 030f and.w r3, r3, #15 - 800632e: 2b00 cmp r3, #0 - 8006330: d121 bne.n 8006376 - 8006332: 68fb ldr r3, [r7, #12] - 8006334: 895b ldrh r3, [r3, #10] - 8006336: 897a ldrh r2, [r7, #10] - 8006338: 429a cmp r2, r3 - 800633a: d01c beq.n 8006376 -#if LWIP_SUPPORT_CUSTOM_PBUF - && ((q->flags & PBUF_FLAG_IS_CUSTOM) == 0) - 800633c: 68fb ldr r3, [r7, #12] - 800633e: 7b5b ldrb r3, [r3, #13] - 8006340: f003 0302 and.w r3, r3, #2 - 8006344: 2b00 cmp r3, #0 - 8006346: d116 bne.n 8006376 -#endif /* LWIP_SUPPORT_CUSTOM_PBUF */ - ) { - /* reallocate and adjust the length of the pbuf that will be split */ - q = (struct pbuf *)mem_trim(q, (mem_size_t)(((u8_t *)q->payload - (u8_t *)q) + rem_len)); - 8006348: 68fb ldr r3, [r7, #12] - 800634a: 685a ldr r2, [r3, #4] - 800634c: 68fb ldr r3, [r7, #12] - 800634e: 1ad3 subs r3, r2, r3 - 8006350: b29a uxth r2, r3 - 8006352: 897b ldrh r3, [r7, #10] - 8006354: 4413 add r3, r2 - 8006356: b29b uxth r3, r3 - 8006358: 4619 mov r1, r3 - 800635a: 68f8 ldr r0, [r7, #12] - 800635c: f7fe ffae bl 80052bc - 8006360: 60f8 str r0, [r7, #12] - LWIP_ASSERT("mem_trim returned q == NULL", q != NULL); - 8006362: 68fb ldr r3, [r7, #12] - 8006364: 2b00 cmp r3, #0 - 8006366: d106 bne.n 8006376 - 8006368: 4b0f ldr r3, [pc, #60] ; (80063a8 ) - 800636a: f240 12bd movw r2, #445 ; 0x1bd - 800636e: 4912 ldr r1, [pc, #72] ; (80063b8 ) - 8006370: 480f ldr r0, [pc, #60] ; (80063b0 ) - 8006372: f00a fe99 bl 80110a8 - } - /* adjust length fields for new last pbuf */ - q->len = rem_len; - 8006376: 68fb ldr r3, [r7, #12] - 8006378: 897a ldrh r2, [r7, #10] - 800637a: 815a strh r2, [r3, #10] - q->tot_len = q->len; - 800637c: 68fb ldr r3, [r7, #12] - 800637e: 895a ldrh r2, [r3, #10] - 8006380: 68fb ldr r3, [r7, #12] - 8006382: 811a strh r2, [r3, #8] - - /* any remaining pbufs in chain? */ - if (q->next != NULL) { - 8006384: 68fb ldr r3, [r7, #12] - 8006386: 681b ldr r3, [r3, #0] - 8006388: 2b00 cmp r3, #0 - 800638a: d004 beq.n 8006396 - /* free remaining pbufs in chain */ - pbuf_free(q->next); - 800638c: 68fb ldr r3, [r7, #12] - 800638e: 681b ldr r3, [r3, #0] - 8006390: 4618 mov r0, r3 - 8006392: f000 f911 bl 80065b8 - } - /* q is last packet in chain */ - q->next = NULL; - 8006396: 68fb ldr r3, [r7, #12] - 8006398: 2200 movs r2, #0 - 800639a: 601a str r2, [r3, #0] - 800639c: e000 b.n 80063a0 - return; - 800639e: bf00 nop - -} - 80063a0: 3710 adds r7, #16 - 80063a2: 46bd mov sp, r7 - 80063a4: bd80 pop {r7, pc} - 80063a6: bf00 nop - 80063a8: 080161ac .word 0x080161ac - 80063ac: 080162c4 .word 0x080162c4 - 80063b0: 0801620c .word 0x0801620c - 80063b4: 080162dc .word 0x080162dc - 80063b8: 080162f4 .word 0x080162f4 - -080063bc : - * @return non-zero on failure, zero on success. - * - */ -static u8_t -pbuf_add_header_impl(struct pbuf *p, size_t header_size_increment, u8_t force) -{ - 80063bc: b580 push {r7, lr} - 80063be: b086 sub sp, #24 - 80063c0: af00 add r7, sp, #0 - 80063c2: 60f8 str r0, [r7, #12] - 80063c4: 60b9 str r1, [r7, #8] - 80063c6: 4613 mov r3, r2 - 80063c8: 71fb strb r3, [r7, #7] - u16_t type_internal; - void *payload; - u16_t increment_magnitude; - - LWIP_ASSERT("p != NULL", p != NULL); - 80063ca: 68fb ldr r3, [r7, #12] - 80063cc: 2b00 cmp r3, #0 - 80063ce: d106 bne.n 80063de - 80063d0: 4b2b ldr r3, [pc, #172] ; (8006480 ) - 80063d2: f240 12df movw r2, #479 ; 0x1df - 80063d6: 492b ldr r1, [pc, #172] ; (8006484 ) - 80063d8: 482b ldr r0, [pc, #172] ; (8006488 ) - 80063da: f00a fe65 bl 80110a8 - if ((p == NULL) || (header_size_increment > 0xFFFF)) { - 80063de: 68fb ldr r3, [r7, #12] - 80063e0: 2b00 cmp r3, #0 - 80063e2: d003 beq.n 80063ec - 80063e4: 68bb ldr r3, [r7, #8] - 80063e6: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 80063ea: d301 bcc.n 80063f0 - return 1; - 80063ec: 2301 movs r3, #1 - 80063ee: e043 b.n 8006478 - } - if (header_size_increment == 0) { - 80063f0: 68bb ldr r3, [r7, #8] - 80063f2: 2b00 cmp r3, #0 - 80063f4: d101 bne.n 80063fa - return 0; - 80063f6: 2300 movs r3, #0 - 80063f8: e03e b.n 8006478 - } - - increment_magnitude = (u16_t)header_size_increment; - 80063fa: 68bb ldr r3, [r7, #8] - 80063fc: 827b strh r3, [r7, #18] - /* Do not allow tot_len to wrap as a result. */ - if ((u16_t)(increment_magnitude + p->tot_len) < increment_magnitude) { - 80063fe: 68fb ldr r3, [r7, #12] - 8006400: 891a ldrh r2, [r3, #8] - 8006402: 8a7b ldrh r3, [r7, #18] - 8006404: 4413 add r3, r2 - 8006406: b29b uxth r3, r3 - 8006408: 8a7a ldrh r2, [r7, #18] - 800640a: 429a cmp r2, r3 - 800640c: d901 bls.n 8006412 - return 1; - 800640e: 2301 movs r3, #1 - 8006410: e032 b.n 8006478 - } - - type_internal = p->type_internal; - 8006412: 68fb ldr r3, [r7, #12] - 8006414: 7b1b ldrb r3, [r3, #12] - 8006416: 823b strh r3, [r7, #16] - - /* pbuf types containing payloads? */ - if (type_internal & PBUF_TYPE_FLAG_STRUCT_DATA_CONTIGUOUS) { - 8006418: 8a3b ldrh r3, [r7, #16] - 800641a: f003 0380 and.w r3, r3, #128 ; 0x80 - 800641e: 2b00 cmp r3, #0 - 8006420: d00c beq.n 800643c - /* set new payload pointer */ - payload = (u8_t *)p->payload - header_size_increment; - 8006422: 68fb ldr r3, [r7, #12] - 8006424: 685a ldr r2, [r3, #4] - 8006426: 68bb ldr r3, [r7, #8] - 8006428: 425b negs r3, r3 - 800642a: 4413 add r3, r2 - 800642c: 617b str r3, [r7, #20] - /* boundary check fails? */ - if ((u8_t *)payload < (u8_t *)p + SIZEOF_STRUCT_PBUF) { - 800642e: 68fb ldr r3, [r7, #12] - 8006430: 3310 adds r3, #16 - 8006432: 697a ldr r2, [r7, #20] - 8006434: 429a cmp r2, r3 - 8006436: d20d bcs.n 8006454 - LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, - ("pbuf_add_header: failed as %p < %p (not enough space for new header size)\n", - (void *)payload, (void *)((u8_t *)p + SIZEOF_STRUCT_PBUF))); - /* bail out unsuccessfully */ - return 1; - 8006438: 2301 movs r3, #1 - 800643a: e01d b.n 8006478 - } - /* pbuf types referring to external payloads? */ - } else { - /* hide a header in the payload? */ - if (force) { - 800643c: 79fb ldrb r3, [r7, #7] - 800643e: 2b00 cmp r3, #0 - 8006440: d006 beq.n 8006450 - payload = (u8_t *)p->payload - header_size_increment; - 8006442: 68fb ldr r3, [r7, #12] - 8006444: 685a ldr r2, [r3, #4] - 8006446: 68bb ldr r3, [r7, #8] - 8006448: 425b negs r3, r3 - 800644a: 4413 add r3, r2 - 800644c: 617b str r3, [r7, #20] - 800644e: e001 b.n 8006454 - } else { - /* cannot expand payload to front (yet!) - * bail out unsuccessfully */ - return 1; - 8006450: 2301 movs r3, #1 - 8006452: e011 b.n 8006478 - } - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_add_header: old %p new %p (%"U16_F")\n", - (void *)p->payload, (void *)payload, increment_magnitude)); - - /* modify pbuf fields */ - p->payload = payload; - 8006454: 68fb ldr r3, [r7, #12] - 8006456: 697a ldr r2, [r7, #20] - 8006458: 605a str r2, [r3, #4] - p->len = (u16_t)(p->len + increment_magnitude); - 800645a: 68fb ldr r3, [r7, #12] - 800645c: 895a ldrh r2, [r3, #10] - 800645e: 8a7b ldrh r3, [r7, #18] - 8006460: 4413 add r3, r2 - 8006462: b29a uxth r2, r3 - 8006464: 68fb ldr r3, [r7, #12] - 8006466: 815a strh r2, [r3, #10] - p->tot_len = (u16_t)(p->tot_len + increment_magnitude); - 8006468: 68fb ldr r3, [r7, #12] - 800646a: 891a ldrh r2, [r3, #8] - 800646c: 8a7b ldrh r3, [r7, #18] - 800646e: 4413 add r3, r2 - 8006470: b29a uxth r2, r3 - 8006472: 68fb ldr r3, [r7, #12] - 8006474: 811a strh r2, [r3, #8] - - - return 0; - 8006476: 2300 movs r3, #0 -} - 8006478: 4618 mov r0, r3 - 800647a: 3718 adds r7, #24 - 800647c: 46bd mov sp, r7 - 800647e: bd80 pop {r7, pc} - 8006480: 080161ac .word 0x080161ac - 8006484: 08016310 .word 0x08016310 - 8006488: 0801620c .word 0x0801620c - -0800648c : - * @return non-zero on failure, zero on success. - * - */ -u8_t -pbuf_add_header(struct pbuf *p, size_t header_size_increment) -{ - 800648c: b580 push {r7, lr} - 800648e: b082 sub sp, #8 - 8006490: af00 add r7, sp, #0 - 8006492: 6078 str r0, [r7, #4] - 8006494: 6039 str r1, [r7, #0] - return pbuf_add_header_impl(p, header_size_increment, 0); - 8006496: 2200 movs r2, #0 - 8006498: 6839 ldr r1, [r7, #0] - 800649a: 6878 ldr r0, [r7, #4] - 800649c: f7ff ff8e bl 80063bc - 80064a0: 4603 mov r3, r0 -} - 80064a2: 4618 mov r0, r3 - 80064a4: 3708 adds r7, #8 - 80064a6: 46bd mov sp, r7 - 80064a8: bd80 pop {r7, pc} - ... - -080064ac : - * @return non-zero on failure, zero on success. - * - */ -u8_t -pbuf_remove_header(struct pbuf *p, size_t header_size_decrement) -{ - 80064ac: b580 push {r7, lr} - 80064ae: b084 sub sp, #16 - 80064b0: af00 add r7, sp, #0 - 80064b2: 6078 str r0, [r7, #4] - 80064b4: 6039 str r1, [r7, #0] - void *payload; - u16_t increment_magnitude; - - LWIP_ASSERT("p != NULL", p != NULL); - 80064b6: 687b ldr r3, [r7, #4] - 80064b8: 2b00 cmp r3, #0 - 80064ba: d106 bne.n 80064ca - 80064bc: 4b20 ldr r3, [pc, #128] ; (8006540 ) - 80064be: f240 224b movw r2, #587 ; 0x24b - 80064c2: 4920 ldr r1, [pc, #128] ; (8006544 ) - 80064c4: 4820 ldr r0, [pc, #128] ; (8006548 ) - 80064c6: f00a fdef bl 80110a8 - if ((p == NULL) || (header_size_decrement > 0xFFFF)) { - 80064ca: 687b ldr r3, [r7, #4] - 80064cc: 2b00 cmp r3, #0 - 80064ce: d003 beq.n 80064d8 - 80064d0: 683b ldr r3, [r7, #0] - 80064d2: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 80064d6: d301 bcc.n 80064dc - return 1; - 80064d8: 2301 movs r3, #1 - 80064da: e02c b.n 8006536 - } - if (header_size_decrement == 0) { - 80064dc: 683b ldr r3, [r7, #0] - 80064de: 2b00 cmp r3, #0 - 80064e0: d101 bne.n 80064e6 - return 0; - 80064e2: 2300 movs r3, #0 - 80064e4: e027 b.n 8006536 - } - - increment_magnitude = (u16_t)header_size_decrement; - 80064e6: 683b ldr r3, [r7, #0] - 80064e8: 81fb strh r3, [r7, #14] - /* Check that we aren't going to move off the end of the pbuf */ - LWIP_ERROR("increment_magnitude <= p->len", (increment_magnitude <= p->len), return 1;); - 80064ea: 687b ldr r3, [r7, #4] - 80064ec: 895b ldrh r3, [r3, #10] - 80064ee: 89fa ldrh r2, [r7, #14] - 80064f0: 429a cmp r2, r3 - 80064f2: d908 bls.n 8006506 - 80064f4: 4b12 ldr r3, [pc, #72] ; (8006540 ) - 80064f6: f240 2255 movw r2, #597 ; 0x255 - 80064fa: 4914 ldr r1, [pc, #80] ; (800654c ) - 80064fc: 4812 ldr r0, [pc, #72] ; (8006548 ) - 80064fe: f00a fdd3 bl 80110a8 - 8006502: 2301 movs r3, #1 - 8006504: e017 b.n 8006536 - - /* remember current payload pointer */ - payload = p->payload; - 8006506: 687b ldr r3, [r7, #4] - 8006508: 685b ldr r3, [r3, #4] - 800650a: 60bb str r3, [r7, #8] - LWIP_UNUSED_ARG(payload); /* only used in LWIP_DEBUGF below */ - - /* increase payload pointer (guarded by length check above) */ - p->payload = (u8_t *)p->payload + header_size_decrement; - 800650c: 687b ldr r3, [r7, #4] - 800650e: 685a ldr r2, [r3, #4] - 8006510: 683b ldr r3, [r7, #0] - 8006512: 441a add r2, r3 - 8006514: 687b ldr r3, [r7, #4] - 8006516: 605a str r2, [r3, #4] - /* modify pbuf length fields */ - p->len = (u16_t)(p->len - increment_magnitude); - 8006518: 687b ldr r3, [r7, #4] - 800651a: 895a ldrh r2, [r3, #10] - 800651c: 89fb ldrh r3, [r7, #14] - 800651e: 1ad3 subs r3, r2, r3 - 8006520: b29a uxth r2, r3 - 8006522: 687b ldr r3, [r7, #4] - 8006524: 815a strh r2, [r3, #10] - p->tot_len = (u16_t)(p->tot_len - increment_magnitude); - 8006526: 687b ldr r3, [r7, #4] - 8006528: 891a ldrh r2, [r3, #8] - 800652a: 89fb ldrh r3, [r7, #14] - 800652c: 1ad3 subs r3, r2, r3 - 800652e: b29a uxth r2, r3 - 8006530: 687b ldr r3, [r7, #4] - 8006532: 811a strh r2, [r3, #8] - - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_remove_header: old %p new %p (%"U16_F")\n", - (void *)payload, (void *)p->payload, increment_magnitude)); - - return 0; - 8006534: 2300 movs r3, #0 -} - 8006536: 4618 mov r0, r3 - 8006538: 3710 adds r7, #16 - 800653a: 46bd mov sp, r7 - 800653c: bd80 pop {r7, pc} - 800653e: bf00 nop - 8006540: 080161ac .word 0x080161ac - 8006544: 08016310 .word 0x08016310 - 8006548: 0801620c .word 0x0801620c - 800654c: 0801631c .word 0x0801631c - -08006550 : - -static u8_t -pbuf_header_impl(struct pbuf *p, s16_t header_size_increment, u8_t force) -{ - 8006550: b580 push {r7, lr} - 8006552: b082 sub sp, #8 - 8006554: af00 add r7, sp, #0 - 8006556: 6078 str r0, [r7, #4] - 8006558: 460b mov r3, r1 - 800655a: 807b strh r3, [r7, #2] - 800655c: 4613 mov r3, r2 - 800655e: 707b strb r3, [r7, #1] - if (header_size_increment < 0) { - 8006560: f9b7 3002 ldrsh.w r3, [r7, #2] - 8006564: 2b00 cmp r3, #0 - 8006566: da08 bge.n 800657a - return pbuf_remove_header(p, (size_t) - header_size_increment); - 8006568: f9b7 3002 ldrsh.w r3, [r7, #2] - 800656c: 425b negs r3, r3 - 800656e: 4619 mov r1, r3 - 8006570: 6878 ldr r0, [r7, #4] - 8006572: f7ff ff9b bl 80064ac - 8006576: 4603 mov r3, r0 - 8006578: e007 b.n 800658a - } else { - return pbuf_add_header_impl(p, (size_t)header_size_increment, force); - 800657a: f9b7 3002 ldrsh.w r3, [r7, #2] - 800657e: 787a ldrb r2, [r7, #1] - 8006580: 4619 mov r1, r3 - 8006582: 6878 ldr r0, [r7, #4] - 8006584: f7ff ff1a bl 80063bc - 8006588: 4603 mov r3, r0 - } -} - 800658a: 4618 mov r0, r3 - 800658c: 3708 adds r7, #8 - 800658e: 46bd mov sp, r7 - 8006590: bd80 pop {r7, pc} - -08006592 : - * Same as pbuf_header but does not check if 'header_size > 0' is allowed. - * This is used internally only, to allow PBUF_REF for RX. - */ -u8_t -pbuf_header_force(struct pbuf *p, s16_t header_size_increment) -{ - 8006592: b580 push {r7, lr} - 8006594: b082 sub sp, #8 - 8006596: af00 add r7, sp, #0 - 8006598: 6078 str r0, [r7, #4] - 800659a: 460b mov r3, r1 - 800659c: 807b strh r3, [r7, #2] - return pbuf_header_impl(p, header_size_increment, 1); - 800659e: f9b7 3002 ldrsh.w r3, [r7, #2] - 80065a2: 2201 movs r2, #1 - 80065a4: 4619 mov r1, r3 - 80065a6: 6878 ldr r0, [r7, #4] - 80065a8: f7ff ffd2 bl 8006550 - 80065ac: 4603 mov r3, r0 -} - 80065ae: 4618 mov r0, r3 - 80065b0: 3708 adds r7, #8 - 80065b2: 46bd mov sp, r7 - 80065b4: bd80 pop {r7, pc} - ... - -080065b8 : - * 1->1->1 becomes ....... - * - */ -u8_t -pbuf_free(struct pbuf *p) -{ - 80065b8: b580 push {r7, lr} - 80065ba: b086 sub sp, #24 - 80065bc: af00 add r7, sp, #0 - 80065be: 6078 str r0, [r7, #4] - u8_t alloc_src; - struct pbuf *q; - u8_t count; - - if (p == NULL) { - 80065c0: 687b ldr r3, [r7, #4] - 80065c2: 2b00 cmp r3, #0 - 80065c4: d10b bne.n 80065de - LWIP_ASSERT("p != NULL", p != NULL); - 80065c6: 687b ldr r3, [r7, #4] - 80065c8: 2b00 cmp r3, #0 - 80065ca: d106 bne.n 80065da - 80065cc: 4b38 ldr r3, [pc, #224] ; (80066b0 ) - 80065ce: f44f 7237 mov.w r2, #732 ; 0x2dc - 80065d2: 4938 ldr r1, [pc, #224] ; (80066b4 ) - 80065d4: 4838 ldr r0, [pc, #224] ; (80066b8 ) - 80065d6: f00a fd67 bl 80110a8 - /* if assertions are disabled, proceed with debug output */ - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, - ("pbuf_free(p == NULL) was called.\n")); - return 0; - 80065da: 2300 movs r3, #0 - 80065dc: e063 b.n 80066a6 - } - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free(%p)\n", (void *)p)); - - PERF_START; - - count = 0; - 80065de: 2300 movs r3, #0 - 80065e0: 75fb strb r3, [r7, #23] - /* de-allocate all consecutive pbufs from the head of the chain that - * obtain a zero reference count after decrementing*/ - while (p != NULL) { - 80065e2: e05c b.n 800669e - /* Since decrementing ref cannot be guaranteed to be a single machine operation - * we must protect it. We put the new ref into a local variable to prevent - * further protection. */ - SYS_ARCH_PROTECT(old_level); - /* all pbufs in a chain are referenced at least once */ - LWIP_ASSERT("pbuf_free: p->ref > 0", p->ref > 0); - 80065e4: 687b ldr r3, [r7, #4] - 80065e6: 7b9b ldrb r3, [r3, #14] - 80065e8: 2b00 cmp r3, #0 - 80065ea: d106 bne.n 80065fa - 80065ec: 4b30 ldr r3, [pc, #192] ; (80066b0 ) - 80065ee: f240 22f1 movw r2, #753 ; 0x2f1 - 80065f2: 4932 ldr r1, [pc, #200] ; (80066bc ) - 80065f4: 4830 ldr r0, [pc, #192] ; (80066b8 ) - 80065f6: f00a fd57 bl 80110a8 - /* decrease reference count (number of pointers to pbuf) */ - ref = --(p->ref); - 80065fa: 687b ldr r3, [r7, #4] - 80065fc: 7b9b ldrb r3, [r3, #14] - 80065fe: 3b01 subs r3, #1 - 8006600: b2da uxtb r2, r3 - 8006602: 687b ldr r3, [r7, #4] - 8006604: 739a strb r2, [r3, #14] - 8006606: 687b ldr r3, [r7, #4] - 8006608: 7b9b ldrb r3, [r3, #14] - 800660a: 75bb strb r3, [r7, #22] - SYS_ARCH_UNPROTECT(old_level); - /* this pbuf is no longer referenced to? */ - if (ref == 0) { - 800660c: 7dbb ldrb r3, [r7, #22] - 800660e: 2b00 cmp r3, #0 - 8006610: d143 bne.n 800669a - /* remember next pbuf in chain for next iteration */ - q = p->next; - 8006612: 687b ldr r3, [r7, #4] - 8006614: 681b ldr r3, [r3, #0] - 8006616: 613b str r3, [r7, #16] - LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free: deallocating %p\n", (void *)p)); - alloc_src = pbuf_get_allocsrc(p); - 8006618: 687b ldr r3, [r7, #4] - 800661a: 7b1b ldrb r3, [r3, #12] - 800661c: f003 030f and.w r3, r3, #15 - 8006620: 73fb strb r3, [r7, #15] -#if LWIP_SUPPORT_CUSTOM_PBUF - /* is this a custom pbuf? */ - if ((p->flags & PBUF_FLAG_IS_CUSTOM) != 0) { - 8006622: 687b ldr r3, [r7, #4] - 8006624: 7b5b ldrb r3, [r3, #13] - 8006626: f003 0302 and.w r3, r3, #2 - 800662a: 2b00 cmp r3, #0 - 800662c: d011 beq.n 8006652 - struct pbuf_custom *pc = (struct pbuf_custom *)p; - 800662e: 687b ldr r3, [r7, #4] - 8006630: 60bb str r3, [r7, #8] - LWIP_ASSERT("pc->custom_free_function != NULL", pc->custom_free_function != NULL); - 8006632: 68bb ldr r3, [r7, #8] - 8006634: 691b ldr r3, [r3, #16] - 8006636: 2b00 cmp r3, #0 - 8006638: d106 bne.n 8006648 - 800663a: 4b1d ldr r3, [pc, #116] ; (80066b0 ) - 800663c: f240 22ff movw r2, #767 ; 0x2ff - 8006640: 491f ldr r1, [pc, #124] ; (80066c0 ) - 8006642: 481d ldr r0, [pc, #116] ; (80066b8 ) - 8006644: f00a fd30 bl 80110a8 - pc->custom_free_function(p); - 8006648: 68bb ldr r3, [r7, #8] - 800664a: 691b ldr r3, [r3, #16] - 800664c: 6878 ldr r0, [r7, #4] - 800664e: 4798 blx r3 - 8006650: e01d b.n 800668e - } else -#endif /* LWIP_SUPPORT_CUSTOM_PBUF */ - { - /* is this a pbuf from the pool? */ - if (alloc_src == PBUF_TYPE_ALLOC_SRC_MASK_STD_MEMP_PBUF_POOL) { - 8006652: 7bfb ldrb r3, [r7, #15] - 8006654: 2b02 cmp r3, #2 - 8006656: d104 bne.n 8006662 - memp_free(MEMP_PBUF_POOL, p); - 8006658: 6879 ldr r1, [r7, #4] - 800665a: 2008 movs r0, #8 - 800665c: f7ff f92a bl 80058b4 - 8006660: e015 b.n 800668e - /* is this a ROM or RAM referencing pbuf? */ - } else if (alloc_src == PBUF_TYPE_ALLOC_SRC_MASK_STD_MEMP_PBUF) { - 8006662: 7bfb ldrb r3, [r7, #15] - 8006664: 2b01 cmp r3, #1 - 8006666: d104 bne.n 8006672 - memp_free(MEMP_PBUF, p); - 8006668: 6879 ldr r1, [r7, #4] - 800666a: 2007 movs r0, #7 - 800666c: f7ff f922 bl 80058b4 - 8006670: e00d b.n 800668e - /* type == PBUF_RAM */ - } else if (alloc_src == PBUF_TYPE_ALLOC_SRC_MASK_STD_HEAP) { - 8006672: 7bfb ldrb r3, [r7, #15] - 8006674: 2b00 cmp r3, #0 - 8006676: d103 bne.n 8006680 - mem_free(p); - 8006678: 6878 ldr r0, [r7, #4] - 800667a: f7fe fdb5 bl 80051e8 - 800667e: e006 b.n 800668e - } else { - /* @todo: support freeing other types */ - LWIP_ASSERT("invalid pbuf type", 0); - 8006680: 4b0b ldr r3, [pc, #44] ; (80066b0 ) - 8006682: f240 320f movw r2, #783 ; 0x30f - 8006686: 490f ldr r1, [pc, #60] ; (80066c4 ) - 8006688: 480b ldr r0, [pc, #44] ; (80066b8 ) - 800668a: f00a fd0d bl 80110a8 - } - } - count++; - 800668e: 7dfb ldrb r3, [r7, #23] - 8006690: 3301 adds r3, #1 - 8006692: 75fb strb r3, [r7, #23] - /* proceed to next pbuf */ - p = q; - 8006694: 693b ldr r3, [r7, #16] - 8006696: 607b str r3, [r7, #4] - 8006698: e001 b.n 800669e - /* p->ref > 0, this pbuf is still referenced to */ - /* (and so the remaining pbufs in chain as well) */ - } else { - LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free: %p has ref %"U16_F", ending here.\n", (void *)p, (u16_t)ref)); - /* stop walking through the chain */ - p = NULL; - 800669a: 2300 movs r3, #0 - 800669c: 607b str r3, [r7, #4] - while (p != NULL) { - 800669e: 687b ldr r3, [r7, #4] - 80066a0: 2b00 cmp r3, #0 - 80066a2: d19f bne.n 80065e4 - } - } - PERF_STOP("pbuf_free"); - /* return number of de-allocated pbufs */ - return count; - 80066a4: 7dfb ldrb r3, [r7, #23] -} - 80066a6: 4618 mov r0, r3 - 80066a8: 3718 adds r7, #24 - 80066aa: 46bd mov sp, r7 - 80066ac: bd80 pop {r7, pc} - 80066ae: bf00 nop - 80066b0: 080161ac .word 0x080161ac - 80066b4: 08016310 .word 0x08016310 - 80066b8: 0801620c .word 0x0801620c - 80066bc: 0801633c .word 0x0801633c - 80066c0: 08016354 .word 0x08016354 - 80066c4: 08016378 .word 0x08016378 - -080066c8 : - * @param p first pbuf of chain - * @return the number of pbufs in a chain - */ -u16_t -pbuf_clen(const struct pbuf *p) -{ - 80066c8: b480 push {r7} - 80066ca: b085 sub sp, #20 - 80066cc: af00 add r7, sp, #0 - 80066ce: 6078 str r0, [r7, #4] - u16_t len; - - len = 0; - 80066d0: 2300 movs r3, #0 - 80066d2: 81fb strh r3, [r7, #14] - while (p != NULL) { - 80066d4: e005 b.n 80066e2 - ++len; - 80066d6: 89fb ldrh r3, [r7, #14] - 80066d8: 3301 adds r3, #1 - 80066da: 81fb strh r3, [r7, #14] - p = p->next; - 80066dc: 687b ldr r3, [r7, #4] - 80066de: 681b ldr r3, [r3, #0] - 80066e0: 607b str r3, [r7, #4] - while (p != NULL) { - 80066e2: 687b ldr r3, [r7, #4] - 80066e4: 2b00 cmp r3, #0 - 80066e6: d1f6 bne.n 80066d6 - } - return len; - 80066e8: 89fb ldrh r3, [r7, #14] -} - 80066ea: 4618 mov r0, r3 - 80066ec: 3714 adds r7, #20 - 80066ee: 46bd mov sp, r7 - 80066f0: f85d 7b04 ldr.w r7, [sp], #4 - 80066f4: 4770 bx lr - ... - -080066f8 : - * @param p pbuf to increase reference counter of - * - */ -void -pbuf_ref(struct pbuf *p) -{ - 80066f8: b580 push {r7, lr} - 80066fa: b082 sub sp, #8 - 80066fc: af00 add r7, sp, #0 - 80066fe: 6078 str r0, [r7, #4] - /* pbuf given? */ - if (p != NULL) { - 8006700: 687b ldr r3, [r7, #4] - 8006702: 2b00 cmp r3, #0 - 8006704: d010 beq.n 8006728 - SYS_ARCH_SET(p->ref, (LWIP_PBUF_REF_T)(p->ref + 1)); - 8006706: 687b ldr r3, [r7, #4] - 8006708: 7b9b ldrb r3, [r3, #14] - 800670a: 3301 adds r3, #1 - 800670c: b2da uxtb r2, r3 - 800670e: 687b ldr r3, [r7, #4] - 8006710: 739a strb r2, [r3, #14] - LWIP_ASSERT("pbuf ref overflow", p->ref > 0); - 8006712: 687b ldr r3, [r7, #4] - 8006714: 7b9b ldrb r3, [r3, #14] - 8006716: 2b00 cmp r3, #0 - 8006718: d106 bne.n 8006728 - 800671a: 4b05 ldr r3, [pc, #20] ; (8006730 ) - 800671c: f240 3242 movw r2, #834 ; 0x342 - 8006720: 4904 ldr r1, [pc, #16] ; (8006734 ) - 8006722: 4805 ldr r0, [pc, #20] ; (8006738 ) - 8006724: f00a fcc0 bl 80110a8 - } -} - 8006728: bf00 nop - 800672a: 3708 adds r7, #8 - 800672c: 46bd mov sp, r7 - 800672e: bd80 pop {r7, pc} - 8006730: 080161ac .word 0x080161ac - 8006734: 0801638c .word 0x0801638c - 8006738: 0801620c .word 0x0801620c - -0800673c : - * - * @see pbuf_chain() - */ -void -pbuf_cat(struct pbuf *h, struct pbuf *t) -{ - 800673c: b580 push {r7, lr} - 800673e: b084 sub sp, #16 - 8006740: af00 add r7, sp, #0 - 8006742: 6078 str r0, [r7, #4] - 8006744: 6039 str r1, [r7, #0] - struct pbuf *p; - - LWIP_ERROR("(h != NULL) && (t != NULL) (programmer violates API)", - 8006746: 687b ldr r3, [r7, #4] - 8006748: 2b00 cmp r3, #0 - 800674a: d002 beq.n 8006752 - 800674c: 683b ldr r3, [r7, #0] - 800674e: 2b00 cmp r3, #0 - 8006750: d107 bne.n 8006762 - 8006752: 4b20 ldr r3, [pc, #128] ; (80067d4 ) - 8006754: f240 3259 movw r2, #857 ; 0x359 - 8006758: 491f ldr r1, [pc, #124] ; (80067d8 ) - 800675a: 4820 ldr r0, [pc, #128] ; (80067dc ) - 800675c: f00a fca4 bl 80110a8 - 8006760: e034 b.n 80067cc - ((h != NULL) && (t != NULL)), return;); - - /* proceed to last pbuf of chain */ - for (p = h; p->next != NULL; p = p->next) { - 8006762: 687b ldr r3, [r7, #4] - 8006764: 60fb str r3, [r7, #12] - 8006766: e00a b.n 800677e - /* add total length of second chain to all totals of first chain */ - p->tot_len = (u16_t)(p->tot_len + t->tot_len); - 8006768: 68fb ldr r3, [r7, #12] - 800676a: 891a ldrh r2, [r3, #8] - 800676c: 683b ldr r3, [r7, #0] - 800676e: 891b ldrh r3, [r3, #8] - 8006770: 4413 add r3, r2 - 8006772: b29a uxth r2, r3 - 8006774: 68fb ldr r3, [r7, #12] - 8006776: 811a strh r2, [r3, #8] - for (p = h; p->next != NULL; p = p->next) { - 8006778: 68fb ldr r3, [r7, #12] - 800677a: 681b ldr r3, [r3, #0] - 800677c: 60fb str r3, [r7, #12] - 800677e: 68fb ldr r3, [r7, #12] - 8006780: 681b ldr r3, [r3, #0] - 8006782: 2b00 cmp r3, #0 - 8006784: d1f0 bne.n 8006768 - } - /* { p is last pbuf of first h chain, p->next == NULL } */ - LWIP_ASSERT("p->tot_len == p->len (of last pbuf in chain)", p->tot_len == p->len); - 8006786: 68fb ldr r3, [r7, #12] - 8006788: 891a ldrh r2, [r3, #8] - 800678a: 68fb ldr r3, [r7, #12] - 800678c: 895b ldrh r3, [r3, #10] - 800678e: 429a cmp r2, r3 - 8006790: d006 beq.n 80067a0 - 8006792: 4b10 ldr r3, [pc, #64] ; (80067d4 ) - 8006794: f240 3262 movw r2, #866 ; 0x362 - 8006798: 4911 ldr r1, [pc, #68] ; (80067e0 ) - 800679a: 4810 ldr r0, [pc, #64] ; (80067dc ) - 800679c: f00a fc84 bl 80110a8 - LWIP_ASSERT("p->next == NULL", p->next == NULL); - 80067a0: 68fb ldr r3, [r7, #12] - 80067a2: 681b ldr r3, [r3, #0] - 80067a4: 2b00 cmp r3, #0 - 80067a6: d006 beq.n 80067b6 - 80067a8: 4b0a ldr r3, [pc, #40] ; (80067d4 ) - 80067aa: f240 3263 movw r2, #867 ; 0x363 - 80067ae: 490d ldr r1, [pc, #52] ; (80067e4 ) - 80067b0: 480a ldr r0, [pc, #40] ; (80067dc ) - 80067b2: f00a fc79 bl 80110a8 - /* add total length of second chain to last pbuf total of first chain */ - p->tot_len = (u16_t)(p->tot_len + t->tot_len); - 80067b6: 68fb ldr r3, [r7, #12] - 80067b8: 891a ldrh r2, [r3, #8] - 80067ba: 683b ldr r3, [r7, #0] - 80067bc: 891b ldrh r3, [r3, #8] - 80067be: 4413 add r3, r2 - 80067c0: b29a uxth r2, r3 - 80067c2: 68fb ldr r3, [r7, #12] - 80067c4: 811a strh r2, [r3, #8] - /* chain last pbuf of head (p) with first of tail (t) */ - p->next = t; - 80067c6: 68fb ldr r3, [r7, #12] - 80067c8: 683a ldr r2, [r7, #0] - 80067ca: 601a str r2, [r3, #0] - /* p->next now references t, but the caller will drop its reference to t, - * so netto there is no change to the reference count of t. - */ -} - 80067cc: 3710 adds r7, #16 - 80067ce: 46bd mov sp, r7 - 80067d0: bd80 pop {r7, pc} - 80067d2: bf00 nop - 80067d4: 080161ac .word 0x080161ac - 80067d8: 080163a0 .word 0x080163a0 - 80067dc: 0801620c .word 0x0801620c - 80067e0: 080163d8 .word 0x080163d8 - 80067e4: 08016408 .word 0x08016408 - -080067e8 : - * The ->ref field of the first pbuf of the tail chain is adjusted. - * - */ -void -pbuf_chain(struct pbuf *h, struct pbuf *t) -{ - 80067e8: b580 push {r7, lr} - 80067ea: b082 sub sp, #8 - 80067ec: af00 add r7, sp, #0 - 80067ee: 6078 str r0, [r7, #4] - 80067f0: 6039 str r1, [r7, #0] - pbuf_cat(h, t); - 80067f2: 6839 ldr r1, [r7, #0] - 80067f4: 6878 ldr r0, [r7, #4] - 80067f6: f7ff ffa1 bl 800673c - /* t is now referenced by h */ - pbuf_ref(t); - 80067fa: 6838 ldr r0, [r7, #0] - 80067fc: f7ff ff7c bl 80066f8 - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_chain: %p references %p\n", (void *)h, (void *)t)); -} - 8006800: bf00 nop - 8006802: 3708 adds r7, #8 - 8006804: 46bd mov sp, r7 - 8006806: bd80 pop {r7, pc} - -08006808 : - * ERR_ARG if one of the pbufs is NULL or p_to is not big - * enough to hold p_from - */ -err_t -pbuf_copy(struct pbuf *p_to, const struct pbuf *p_from) -{ - 8006808: b580 push {r7, lr} - 800680a: b086 sub sp, #24 - 800680c: af00 add r7, sp, #0 - 800680e: 6078 str r0, [r7, #4] - 8006810: 6039 str r1, [r7, #0] - size_t offset_to = 0, offset_from = 0, len; - 8006812: 2300 movs r3, #0 - 8006814: 617b str r3, [r7, #20] - 8006816: 2300 movs r3, #0 - 8006818: 613b str r3, [r7, #16] - - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy(%p, %p)\n", - (const void *)p_to, (const void *)p_from)); - - /* is the target big enough to hold the source? */ - LWIP_ERROR("pbuf_copy: target not big enough to hold source", ((p_to != NULL) && - 800681a: 687b ldr r3, [r7, #4] - 800681c: 2b00 cmp r3, #0 - 800681e: d008 beq.n 8006832 - 8006820: 683b ldr r3, [r7, #0] - 8006822: 2b00 cmp r3, #0 - 8006824: d005 beq.n 8006832 - 8006826: 687b ldr r3, [r7, #4] - 8006828: 891a ldrh r2, [r3, #8] - 800682a: 683b ldr r3, [r7, #0] - 800682c: 891b ldrh r3, [r3, #8] - 800682e: 429a cmp r2, r3 - 8006830: d209 bcs.n 8006846 - 8006832: 4b57 ldr r3, [pc, #348] ; (8006990 ) - 8006834: f240 32c9 movw r2, #969 ; 0x3c9 - 8006838: 4956 ldr r1, [pc, #344] ; (8006994 ) - 800683a: 4857 ldr r0, [pc, #348] ; (8006998 ) - 800683c: f00a fc34 bl 80110a8 - 8006840: f06f 030f mvn.w r3, #15 - 8006844: e09f b.n 8006986 - (p_from != NULL) && (p_to->tot_len >= p_from->tot_len)), return ERR_ARG;); - - /* iterate through pbuf chain */ - do { - /* copy one part of the original chain */ - if ((p_to->len - offset_to) >= (p_from->len - offset_from)) { - 8006846: 687b ldr r3, [r7, #4] - 8006848: 895b ldrh r3, [r3, #10] - 800684a: 461a mov r2, r3 - 800684c: 697b ldr r3, [r7, #20] - 800684e: 1ad2 subs r2, r2, r3 - 8006850: 683b ldr r3, [r7, #0] - 8006852: 895b ldrh r3, [r3, #10] - 8006854: 4619 mov r1, r3 - 8006856: 693b ldr r3, [r7, #16] - 8006858: 1acb subs r3, r1, r3 - 800685a: 429a cmp r2, r3 - 800685c: d306 bcc.n 800686c - /* complete current p_from fits into current p_to */ - len = p_from->len - offset_from; - 800685e: 683b ldr r3, [r7, #0] - 8006860: 895b ldrh r3, [r3, #10] - 8006862: 461a mov r2, r3 - 8006864: 693b ldr r3, [r7, #16] - 8006866: 1ad3 subs r3, r2, r3 - 8006868: 60fb str r3, [r7, #12] - 800686a: e005 b.n 8006878 - } else { - /* current p_from does not fit into current p_to */ - len = p_to->len - offset_to; - 800686c: 687b ldr r3, [r7, #4] - 800686e: 895b ldrh r3, [r3, #10] - 8006870: 461a mov r2, r3 - 8006872: 697b ldr r3, [r7, #20] - 8006874: 1ad3 subs r3, r2, r3 - 8006876: 60fb str r3, [r7, #12] - } - MEMCPY((u8_t *)p_to->payload + offset_to, (u8_t *)p_from->payload + offset_from, len); - 8006878: 687b ldr r3, [r7, #4] - 800687a: 685a ldr r2, [r3, #4] - 800687c: 697b ldr r3, [r7, #20] - 800687e: 18d0 adds r0, r2, r3 - 8006880: 683b ldr r3, [r7, #0] - 8006882: 685a ldr r2, [r3, #4] - 8006884: 693b ldr r3, [r7, #16] - 8006886: 4413 add r3, r2 - 8006888: 68fa ldr r2, [r7, #12] - 800688a: 4619 mov r1, r3 - 800688c: f00a fbdc bl 8011048 - offset_to += len; - 8006890: 697a ldr r2, [r7, #20] - 8006892: 68fb ldr r3, [r7, #12] - 8006894: 4413 add r3, r2 - 8006896: 617b str r3, [r7, #20] - offset_from += len; - 8006898: 693a ldr r2, [r7, #16] - 800689a: 68fb ldr r3, [r7, #12] - 800689c: 4413 add r3, r2 - 800689e: 613b str r3, [r7, #16] - LWIP_ASSERT("offset_to <= p_to->len", offset_to <= p_to->len); - 80068a0: 687b ldr r3, [r7, #4] - 80068a2: 895b ldrh r3, [r3, #10] - 80068a4: 461a mov r2, r3 - 80068a6: 697b ldr r3, [r7, #20] - 80068a8: 4293 cmp r3, r2 - 80068aa: d906 bls.n 80068ba - 80068ac: 4b38 ldr r3, [pc, #224] ; (8006990 ) - 80068ae: f240 32d9 movw r2, #985 ; 0x3d9 - 80068b2: 493a ldr r1, [pc, #232] ; (800699c ) - 80068b4: 4838 ldr r0, [pc, #224] ; (8006998 ) - 80068b6: f00a fbf7 bl 80110a8 - LWIP_ASSERT("offset_from <= p_from->len", offset_from <= p_from->len); - 80068ba: 683b ldr r3, [r7, #0] - 80068bc: 895b ldrh r3, [r3, #10] - 80068be: 461a mov r2, r3 - 80068c0: 693b ldr r3, [r7, #16] - 80068c2: 4293 cmp r3, r2 - 80068c4: d906 bls.n 80068d4 - 80068c6: 4b32 ldr r3, [pc, #200] ; (8006990 ) - 80068c8: f240 32da movw r2, #986 ; 0x3da - 80068cc: 4934 ldr r1, [pc, #208] ; (80069a0 ) - 80068ce: 4832 ldr r0, [pc, #200] ; (8006998 ) - 80068d0: f00a fbea bl 80110a8 - if (offset_from >= p_from->len) { - 80068d4: 683b ldr r3, [r7, #0] - 80068d6: 895b ldrh r3, [r3, #10] - 80068d8: 461a mov r2, r3 - 80068da: 693b ldr r3, [r7, #16] - 80068dc: 4293 cmp r3, r2 - 80068de: d304 bcc.n 80068ea - /* on to next p_from (if any) */ - offset_from = 0; - 80068e0: 2300 movs r3, #0 - 80068e2: 613b str r3, [r7, #16] - p_from = p_from->next; - 80068e4: 683b ldr r3, [r7, #0] - 80068e6: 681b ldr r3, [r3, #0] - 80068e8: 603b str r3, [r7, #0] - } - if (offset_to == p_to->len) { - 80068ea: 687b ldr r3, [r7, #4] - 80068ec: 895b ldrh r3, [r3, #10] - 80068ee: 461a mov r2, r3 - 80068f0: 697b ldr r3, [r7, #20] - 80068f2: 4293 cmp r3, r2 - 80068f4: d114 bne.n 8006920 - /* on to next p_to (if any) */ - offset_to = 0; - 80068f6: 2300 movs r3, #0 - 80068f8: 617b str r3, [r7, #20] - p_to = p_to->next; - 80068fa: 687b ldr r3, [r7, #4] - 80068fc: 681b ldr r3, [r3, #0] - 80068fe: 607b str r3, [r7, #4] - LWIP_ERROR("p_to != NULL", (p_to != NULL) || (p_from == NULL), return ERR_ARG;); - 8006900: 687b ldr r3, [r7, #4] - 8006902: 2b00 cmp r3, #0 - 8006904: d10c bne.n 8006920 - 8006906: 683b ldr r3, [r7, #0] - 8006908: 2b00 cmp r3, #0 - 800690a: d009 beq.n 8006920 - 800690c: 4b20 ldr r3, [pc, #128] ; (8006990 ) - 800690e: f44f 7279 mov.w r2, #996 ; 0x3e4 - 8006912: 4924 ldr r1, [pc, #144] ; (80069a4 ) - 8006914: 4820 ldr r0, [pc, #128] ; (8006998 ) - 8006916: f00a fbc7 bl 80110a8 - 800691a: f06f 030f mvn.w r3, #15 - 800691e: e032 b.n 8006986 - } - - if ((p_from != NULL) && (p_from->len == p_from->tot_len)) { - 8006920: 683b ldr r3, [r7, #0] - 8006922: 2b00 cmp r3, #0 - 8006924: d013 beq.n 800694e - 8006926: 683b ldr r3, [r7, #0] - 8006928: 895a ldrh r2, [r3, #10] - 800692a: 683b ldr r3, [r7, #0] - 800692c: 891b ldrh r3, [r3, #8] - 800692e: 429a cmp r2, r3 - 8006930: d10d bne.n 800694e - /* don't copy more than one packet! */ - LWIP_ERROR("pbuf_copy() does not allow packet queues!", - 8006932: 683b ldr r3, [r7, #0] - 8006934: 681b ldr r3, [r3, #0] - 8006936: 2b00 cmp r3, #0 - 8006938: d009 beq.n 800694e - 800693a: 4b15 ldr r3, [pc, #84] ; (8006990 ) - 800693c: f240 32e9 movw r2, #1001 ; 0x3e9 - 8006940: 4919 ldr r1, [pc, #100] ; (80069a8 ) - 8006942: 4815 ldr r0, [pc, #84] ; (8006998 ) - 8006944: f00a fbb0 bl 80110a8 - 8006948: f06f 0305 mvn.w r3, #5 - 800694c: e01b b.n 8006986 - (p_from->next == NULL), return ERR_VAL;); - } - if ((p_to != NULL) && (p_to->len == p_to->tot_len)) { - 800694e: 687b ldr r3, [r7, #4] - 8006950: 2b00 cmp r3, #0 - 8006952: d013 beq.n 800697c - 8006954: 687b ldr r3, [r7, #4] - 8006956: 895a ldrh r2, [r3, #10] - 8006958: 687b ldr r3, [r7, #4] - 800695a: 891b ldrh r3, [r3, #8] - 800695c: 429a cmp r2, r3 - 800695e: d10d bne.n 800697c - /* don't copy more than one packet! */ - LWIP_ERROR("pbuf_copy() does not allow packet queues!", - 8006960: 687b ldr r3, [r7, #4] - 8006962: 681b ldr r3, [r3, #0] - 8006964: 2b00 cmp r3, #0 - 8006966: d009 beq.n 800697c - 8006968: 4b09 ldr r3, [pc, #36] ; (8006990 ) - 800696a: f240 32ee movw r2, #1006 ; 0x3ee - 800696e: 490e ldr r1, [pc, #56] ; (80069a8 ) - 8006970: 4809 ldr r0, [pc, #36] ; (8006998 ) - 8006972: f00a fb99 bl 80110a8 - 8006976: f06f 0305 mvn.w r3, #5 - 800697a: e004 b.n 8006986 - (p_to->next == NULL), return ERR_VAL;); - } - } while (p_from); - 800697c: 683b ldr r3, [r7, #0] - 800697e: 2b00 cmp r3, #0 - 8006980: f47f af61 bne.w 8006846 - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy: end of chain reached.\n")); - return ERR_OK; - 8006984: 2300 movs r3, #0 -} - 8006986: 4618 mov r0, r3 - 8006988: 3718 adds r7, #24 - 800698a: 46bd mov sp, r7 - 800698c: bd80 pop {r7, pc} - 800698e: bf00 nop - 8006990: 080161ac .word 0x080161ac - 8006994: 08016454 .word 0x08016454 - 8006998: 0801620c .word 0x0801620c - 800699c: 08016484 .word 0x08016484 - 80069a0: 0801649c .word 0x0801649c - 80069a4: 080164b8 .word 0x080164b8 - 80069a8: 080164c8 .word 0x080164c8 - -080069ac : - * @param offset offset into the packet buffer from where to begin copying len bytes - * @return the number of bytes copied, or 0 on failure - */ -u16_t -pbuf_copy_partial(const struct pbuf *buf, void *dataptr, u16_t len, u16_t offset) -{ - 80069ac: b580 push {r7, lr} - 80069ae: b088 sub sp, #32 - 80069b0: af00 add r7, sp, #0 - 80069b2: 60f8 str r0, [r7, #12] - 80069b4: 60b9 str r1, [r7, #8] - 80069b6: 4611 mov r1, r2 - 80069b8: 461a mov r2, r3 - 80069ba: 460b mov r3, r1 - 80069bc: 80fb strh r3, [r7, #6] - 80069be: 4613 mov r3, r2 - 80069c0: 80bb strh r3, [r7, #4] - const struct pbuf *p; - u16_t left = 0; - 80069c2: 2300 movs r3, #0 - 80069c4: 837b strh r3, [r7, #26] - u16_t buf_copy_len; - u16_t copied_total = 0; - 80069c6: 2300 movs r3, #0 - 80069c8: 82fb strh r3, [r7, #22] - - LWIP_ERROR("pbuf_copy_partial: invalid buf", (buf != NULL), return 0;); - 80069ca: 68fb ldr r3, [r7, #12] - 80069cc: 2b00 cmp r3, #0 - 80069ce: d108 bne.n 80069e2 - 80069d0: 4b2b ldr r3, [pc, #172] ; (8006a80 ) - 80069d2: f240 420a movw r2, #1034 ; 0x40a - 80069d6: 492b ldr r1, [pc, #172] ; (8006a84 ) - 80069d8: 482b ldr r0, [pc, #172] ; (8006a88 ) - 80069da: f00a fb65 bl 80110a8 - 80069de: 2300 movs r3, #0 - 80069e0: e04a b.n 8006a78 - LWIP_ERROR("pbuf_copy_partial: invalid dataptr", (dataptr != NULL), return 0;); - 80069e2: 68bb ldr r3, [r7, #8] - 80069e4: 2b00 cmp r3, #0 - 80069e6: d108 bne.n 80069fa - 80069e8: 4b25 ldr r3, [pc, #148] ; (8006a80 ) - 80069ea: f240 420b movw r2, #1035 ; 0x40b - 80069ee: 4927 ldr r1, [pc, #156] ; (8006a8c ) - 80069f0: 4825 ldr r0, [pc, #148] ; (8006a88 ) - 80069f2: f00a fb59 bl 80110a8 - 80069f6: 2300 movs r3, #0 - 80069f8: e03e b.n 8006a78 - - /* Note some systems use byte copy if dataptr or one of the pbuf payload pointers are unaligned. */ - for (p = buf; len != 0 && p != NULL; p = p->next) { - 80069fa: 68fb ldr r3, [r7, #12] - 80069fc: 61fb str r3, [r7, #28] - 80069fe: e034 b.n 8006a6a - if ((offset != 0) && (offset >= p->len)) { - 8006a00: 88bb ldrh r3, [r7, #4] - 8006a02: 2b00 cmp r3, #0 - 8006a04: d00a beq.n 8006a1c - 8006a06: 69fb ldr r3, [r7, #28] - 8006a08: 895b ldrh r3, [r3, #10] - 8006a0a: 88ba ldrh r2, [r7, #4] - 8006a0c: 429a cmp r2, r3 - 8006a0e: d305 bcc.n 8006a1c - /* don't copy from this buffer -> on to the next */ - offset = (u16_t)(offset - p->len); - 8006a10: 69fb ldr r3, [r7, #28] - 8006a12: 895b ldrh r3, [r3, #10] - 8006a14: 88ba ldrh r2, [r7, #4] - 8006a16: 1ad3 subs r3, r2, r3 - 8006a18: 80bb strh r3, [r7, #4] - 8006a1a: e023 b.n 8006a64 - } else { - /* copy from this buffer. maybe only partially. */ - buf_copy_len = (u16_t)(p->len - offset); - 8006a1c: 69fb ldr r3, [r7, #28] - 8006a1e: 895a ldrh r2, [r3, #10] - 8006a20: 88bb ldrh r3, [r7, #4] - 8006a22: 1ad3 subs r3, r2, r3 - 8006a24: 833b strh r3, [r7, #24] - if (buf_copy_len > len) { - 8006a26: 8b3a ldrh r2, [r7, #24] - 8006a28: 88fb ldrh r3, [r7, #6] - 8006a2a: 429a cmp r2, r3 - 8006a2c: d901 bls.n 8006a32 - buf_copy_len = len; - 8006a2e: 88fb ldrh r3, [r7, #6] - 8006a30: 833b strh r3, [r7, #24] - } - /* copy the necessary parts of the buffer */ - MEMCPY(&((char *)dataptr)[left], &((char *)p->payload)[offset], buf_copy_len); - 8006a32: 8b7b ldrh r3, [r7, #26] - 8006a34: 68ba ldr r2, [r7, #8] - 8006a36: 18d0 adds r0, r2, r3 - 8006a38: 69fb ldr r3, [r7, #28] - 8006a3a: 685a ldr r2, [r3, #4] - 8006a3c: 88bb ldrh r3, [r7, #4] - 8006a3e: 4413 add r3, r2 - 8006a40: 8b3a ldrh r2, [r7, #24] - 8006a42: 4619 mov r1, r3 - 8006a44: f00a fb00 bl 8011048 - copied_total = (u16_t)(copied_total + buf_copy_len); - 8006a48: 8afa ldrh r2, [r7, #22] - 8006a4a: 8b3b ldrh r3, [r7, #24] - 8006a4c: 4413 add r3, r2 - 8006a4e: 82fb strh r3, [r7, #22] - left = (u16_t)(left + buf_copy_len); - 8006a50: 8b7a ldrh r2, [r7, #26] - 8006a52: 8b3b ldrh r3, [r7, #24] - 8006a54: 4413 add r3, r2 - 8006a56: 837b strh r3, [r7, #26] - len = (u16_t)(len - buf_copy_len); - 8006a58: 88fa ldrh r2, [r7, #6] - 8006a5a: 8b3b ldrh r3, [r7, #24] - 8006a5c: 1ad3 subs r3, r2, r3 - 8006a5e: 80fb strh r3, [r7, #6] - offset = 0; - 8006a60: 2300 movs r3, #0 - 8006a62: 80bb strh r3, [r7, #4] - for (p = buf; len != 0 && p != NULL; p = p->next) { - 8006a64: 69fb ldr r3, [r7, #28] - 8006a66: 681b ldr r3, [r3, #0] - 8006a68: 61fb str r3, [r7, #28] - 8006a6a: 88fb ldrh r3, [r7, #6] - 8006a6c: 2b00 cmp r3, #0 - 8006a6e: d002 beq.n 8006a76 - 8006a70: 69fb ldr r3, [r7, #28] - 8006a72: 2b00 cmp r3, #0 - 8006a74: d1c4 bne.n 8006a00 - } - } - return copied_total; - 8006a76: 8afb ldrh r3, [r7, #22] -} - 8006a78: 4618 mov r0, r3 - 8006a7a: 3720 adds r7, #32 - 8006a7c: 46bd mov sp, r7 - 8006a7e: bd80 pop {r7, pc} - 8006a80: 080161ac .word 0x080161ac - 8006a84: 080164f4 .word 0x080164f4 - 8006a88: 0801620c .word 0x0801620c - 8006a8c: 08016514 .word 0x08016514 - -08006a90 : - * - * @return a new pbuf or NULL if allocation fails - */ -struct pbuf * -pbuf_clone(pbuf_layer layer, pbuf_type type, struct pbuf *p) -{ - 8006a90: b580 push {r7, lr} - 8006a92: b084 sub sp, #16 - 8006a94: af00 add r7, sp, #0 - 8006a96: 4603 mov r3, r0 - 8006a98: 603a str r2, [r7, #0] - 8006a9a: 71fb strb r3, [r7, #7] - 8006a9c: 460b mov r3, r1 - 8006a9e: 80bb strh r3, [r7, #4] - struct pbuf *q; - err_t err; - q = pbuf_alloc(layer, p->tot_len, type); - 8006aa0: 683b ldr r3, [r7, #0] - 8006aa2: 8919 ldrh r1, [r3, #8] - 8006aa4: 88ba ldrh r2, [r7, #4] - 8006aa6: 79fb ldrb r3, [r7, #7] - 8006aa8: 4618 mov r0, r3 - 8006aaa: f7ff faa1 bl 8005ff0 - 8006aae: 60f8 str r0, [r7, #12] - if (q == NULL) { - 8006ab0: 68fb ldr r3, [r7, #12] - 8006ab2: 2b00 cmp r3, #0 - 8006ab4: d101 bne.n 8006aba - return NULL; - 8006ab6: 2300 movs r3, #0 - 8006ab8: e011 b.n 8006ade - } - err = pbuf_copy(q, p); - 8006aba: 6839 ldr r1, [r7, #0] - 8006abc: 68f8 ldr r0, [r7, #12] - 8006abe: f7ff fea3 bl 8006808 - 8006ac2: 4603 mov r3, r0 - 8006ac4: 72fb strb r3, [r7, #11] - LWIP_UNUSED_ARG(err); /* in case of LWIP_NOASSERT */ - LWIP_ASSERT("pbuf_copy failed", err == ERR_OK); - 8006ac6: f997 300b ldrsb.w r3, [r7, #11] - 8006aca: 2b00 cmp r3, #0 - 8006acc: d006 beq.n 8006adc - 8006ace: 4b06 ldr r3, [pc, #24] ; (8006ae8 ) - 8006ad0: f240 5224 movw r2, #1316 ; 0x524 - 8006ad4: 4905 ldr r1, [pc, #20] ; (8006aec ) - 8006ad6: 4806 ldr r0, [pc, #24] ; (8006af0 ) - 8006ad8: f00a fae6 bl 80110a8 - return q; - 8006adc: 68fb ldr r3, [r7, #12] -} - 8006ade: 4618 mov r0, r3 - 8006ae0: 3710 adds r7, #16 - 8006ae2: 46bd mov sp, r7 - 8006ae4: bd80 pop {r7, pc} - 8006ae6: bf00 nop - 8006ae8: 080161ac .word 0x080161ac - 8006aec: 08016620 .word 0x08016620 - 8006af0: 0801620c .word 0x0801620c - -08006af4 : -/** - * Initialize this module. - */ -void -tcp_init(void) -{ - 8006af4: b580 push {r7, lr} - 8006af6: af00 add r7, sp, #0 -#ifdef LWIP_RAND - tcp_port = TCP_ENSURE_LOCAL_PORT_RANGE(LWIP_RAND()); - 8006af8: f00a fae8 bl 80110cc - 8006afc: 4603 mov r3, r0 - 8006afe: b29b uxth r3, r3 - 8006b00: f3c3 030d ubfx r3, r3, #0, #14 - 8006b04: b29b uxth r3, r3 - 8006b06: f5a3 4380 sub.w r3, r3, #16384 ; 0x4000 - 8006b0a: b29a uxth r2, r3 - 8006b0c: 4b01 ldr r3, [pc, #4] ; (8006b14 ) - 8006b0e: 801a strh r2, [r3, #0] -#endif /* LWIP_RAND */ -} - 8006b10: bf00 nop - 8006b12: bd80 pop {r7, pc} - 8006b14: 20000020 .word 0x20000020 - -08006b18 : - -/** Free a tcp pcb */ -void -tcp_free(struct tcp_pcb *pcb) -{ - 8006b18: b580 push {r7, lr} - 8006b1a: b082 sub sp, #8 - 8006b1c: af00 add r7, sp, #0 - 8006b1e: 6078 str r0, [r7, #4] - LWIP_ASSERT("tcp_free: LISTEN", pcb->state != LISTEN); - 8006b20: 687b ldr r3, [r7, #4] - 8006b22: 7d1b ldrb r3, [r3, #20] - 8006b24: 2b01 cmp r3, #1 - 8006b26: d105 bne.n 8006b34 - 8006b28: 4b06 ldr r3, [pc, #24] ; (8006b44 ) - 8006b2a: 22d4 movs r2, #212 ; 0xd4 - 8006b2c: 4906 ldr r1, [pc, #24] ; (8006b48 ) - 8006b2e: 4807 ldr r0, [pc, #28] ; (8006b4c ) - 8006b30: f00a faba bl 80110a8 -#if LWIP_TCP_PCB_NUM_EXT_ARGS - tcp_ext_arg_invoke_callbacks_destroyed(pcb->ext_args); -#endif - memp_free(MEMP_TCP_PCB, pcb); - 8006b34: 6879 ldr r1, [r7, #4] - 8006b36: 2001 movs r0, #1 - 8006b38: f7fe febc bl 80058b4 -} - 8006b3c: bf00 nop - 8006b3e: 3708 adds r7, #8 - 8006b40: 46bd mov sp, r7 - 8006b42: bd80 pop {r7, pc} - 8006b44: 080166ac .word 0x080166ac - 8006b48: 080166dc .word 0x080166dc - 8006b4c: 080166f0 .word 0x080166f0 - -08006b50 : - -/** Free a tcp listen pcb */ -static void -tcp_free_listen(struct tcp_pcb *pcb) -{ - 8006b50: b580 push {r7, lr} - 8006b52: b082 sub sp, #8 - 8006b54: af00 add r7, sp, #0 - 8006b56: 6078 str r0, [r7, #4] - LWIP_ASSERT("tcp_free_listen: !LISTEN", pcb->state != LISTEN); - 8006b58: 687b ldr r3, [r7, #4] - 8006b5a: 7d1b ldrb r3, [r3, #20] - 8006b5c: 2b01 cmp r3, #1 - 8006b5e: d105 bne.n 8006b6c - 8006b60: 4b06 ldr r3, [pc, #24] ; (8006b7c ) - 8006b62: 22df movs r2, #223 ; 0xdf - 8006b64: 4906 ldr r1, [pc, #24] ; (8006b80 ) - 8006b66: 4807 ldr r0, [pc, #28] ; (8006b84 ) - 8006b68: f00a fa9e bl 80110a8 -#if LWIP_TCP_PCB_NUM_EXT_ARGS - tcp_ext_arg_invoke_callbacks_destroyed(pcb->ext_args); -#endif - memp_free(MEMP_TCP_PCB_LISTEN, pcb); - 8006b6c: 6879 ldr r1, [r7, #4] - 8006b6e: 2002 movs r0, #2 - 8006b70: f7fe fea0 bl 80058b4 -} - 8006b74: bf00 nop - 8006b76: 3708 adds r7, #8 - 8006b78: 46bd mov sp, r7 - 8006b7a: bd80 pop {r7, pc} - 8006b7c: 080166ac .word 0x080166ac - 8006b80: 08016718 .word 0x08016718 - 8006b84: 080166f0 .word 0x080166f0 - -08006b88 : -/** - * Called periodically to dispatch TCP timers. - */ -void -tcp_tmr(void) -{ - 8006b88: b580 push {r7, lr} - 8006b8a: af00 add r7, sp, #0 - /* Call tcp_fasttmr() every 250 ms */ - tcp_fasttmr(); - 8006b8c: f000 fea2 bl 80078d4 - - if (++tcp_timer & 1) { - 8006b90: 4b07 ldr r3, [pc, #28] ; (8006bb0 ) - 8006b92: 781b ldrb r3, [r3, #0] - 8006b94: 3301 adds r3, #1 - 8006b96: b2da uxtb r2, r3 - 8006b98: 4b05 ldr r3, [pc, #20] ; (8006bb0 ) - 8006b9a: 701a strb r2, [r3, #0] - 8006b9c: 4b04 ldr r3, [pc, #16] ; (8006bb0 ) - 8006b9e: 781b ldrb r3, [r3, #0] - 8006ba0: f003 0301 and.w r3, r3, #1 - 8006ba4: 2b00 cmp r3, #0 - 8006ba6: d001 beq.n 8006bac - /* Call tcp_slowtmr() every 500 ms, i.e., every other timer - tcp_tmr() is called. */ - tcp_slowtmr(); - 8006ba8: f000 fb54 bl 8007254 - } -} - 8006bac: bf00 nop - 8006bae: bd80 pop {r7, pc} - 8006bb0: 200099e9 .word 0x200099e9 - -08006bb4 : -/** Called when a listen pcb is closed. Iterates one pcb list and removes the - * closed listener pcb from pcb->listener if matching. - */ -static void -tcp_remove_listener(struct tcp_pcb *list, struct tcp_pcb_listen *lpcb) -{ - 8006bb4: b580 push {r7, lr} - 8006bb6: b084 sub sp, #16 - 8006bb8: af00 add r7, sp, #0 - 8006bba: 6078 str r0, [r7, #4] - 8006bbc: 6039 str r1, [r7, #0] - struct tcp_pcb *pcb; - - LWIP_ASSERT("tcp_remove_listener: invalid listener", lpcb != NULL); - 8006bbe: 683b ldr r3, [r7, #0] - 8006bc0: 2b00 cmp r3, #0 - 8006bc2: d105 bne.n 8006bd0 - 8006bc4: 4b0d ldr r3, [pc, #52] ; (8006bfc ) - 8006bc6: 22ff movs r2, #255 ; 0xff - 8006bc8: 490d ldr r1, [pc, #52] ; (8006c00 ) - 8006bca: 480e ldr r0, [pc, #56] ; (8006c04 ) - 8006bcc: f00a fa6c bl 80110a8 - - for (pcb = list; pcb != NULL; pcb = pcb->next) { - 8006bd0: 687b ldr r3, [r7, #4] - 8006bd2: 60fb str r3, [r7, #12] - 8006bd4: e00a b.n 8006bec - if (pcb->listener == lpcb) { - 8006bd6: 68fb ldr r3, [r7, #12] - 8006bd8: 6fdb ldr r3, [r3, #124] ; 0x7c - 8006bda: 683a ldr r2, [r7, #0] - 8006bdc: 429a cmp r2, r3 - 8006bde: d102 bne.n 8006be6 - pcb->listener = NULL; - 8006be0: 68fb ldr r3, [r7, #12] - 8006be2: 2200 movs r2, #0 - 8006be4: 67da str r2, [r3, #124] ; 0x7c - for (pcb = list; pcb != NULL; pcb = pcb->next) { - 8006be6: 68fb ldr r3, [r7, #12] - 8006be8: 68db ldr r3, [r3, #12] - 8006bea: 60fb str r3, [r7, #12] - 8006bec: 68fb ldr r3, [r7, #12] - 8006bee: 2b00 cmp r3, #0 - 8006bf0: d1f1 bne.n 8006bd6 - } - } -} - 8006bf2: bf00 nop - 8006bf4: bf00 nop - 8006bf6: 3710 adds r7, #16 - 8006bf8: 46bd mov sp, r7 - 8006bfa: bd80 pop {r7, pc} - 8006bfc: 080166ac .word 0x080166ac - 8006c00: 08016734 .word 0x08016734 - 8006c04: 080166f0 .word 0x080166f0 - -08006c08 : -/** Called when a listen pcb is closed. Iterates all pcb lists and removes the - * closed listener pcb from pcb->listener if matching. - */ -static void -tcp_listen_closed(struct tcp_pcb *pcb) -{ - 8006c08: b580 push {r7, lr} - 8006c0a: b084 sub sp, #16 - 8006c0c: af00 add r7, sp, #0 - 8006c0e: 6078 str r0, [r7, #4] -#if LWIP_CALLBACK_API || TCP_LISTEN_BACKLOG - size_t i; - LWIP_ASSERT("pcb != NULL", pcb != NULL); - 8006c10: 687b ldr r3, [r7, #4] - 8006c12: 2b00 cmp r3, #0 - 8006c14: d106 bne.n 8006c24 - 8006c16: 4b14 ldr r3, [pc, #80] ; (8006c68 ) - 8006c18: f240 1211 movw r2, #273 ; 0x111 - 8006c1c: 4913 ldr r1, [pc, #76] ; (8006c6c ) - 8006c1e: 4814 ldr r0, [pc, #80] ; (8006c70 ) - 8006c20: f00a fa42 bl 80110a8 - LWIP_ASSERT("pcb->state == LISTEN", pcb->state == LISTEN); - 8006c24: 687b ldr r3, [r7, #4] - 8006c26: 7d1b ldrb r3, [r3, #20] - 8006c28: 2b01 cmp r3, #1 - 8006c2a: d006 beq.n 8006c3a - 8006c2c: 4b0e ldr r3, [pc, #56] ; (8006c68 ) - 8006c2e: f44f 7289 mov.w r2, #274 ; 0x112 - 8006c32: 4910 ldr r1, [pc, #64] ; (8006c74 ) - 8006c34: 480e ldr r0, [pc, #56] ; (8006c70 ) - 8006c36: f00a fa37 bl 80110a8 - for (i = 1; i < LWIP_ARRAYSIZE(tcp_pcb_lists); i++) { - 8006c3a: 2301 movs r3, #1 - 8006c3c: 60fb str r3, [r7, #12] - 8006c3e: e00b b.n 8006c58 - tcp_remove_listener(*tcp_pcb_lists[i], (struct tcp_pcb_listen *)pcb); - 8006c40: 4a0d ldr r2, [pc, #52] ; (8006c78 ) - 8006c42: 68fb ldr r3, [r7, #12] - 8006c44: f852 3023 ldr.w r3, [r2, r3, lsl #2] - 8006c48: 681b ldr r3, [r3, #0] - 8006c4a: 6879 ldr r1, [r7, #4] - 8006c4c: 4618 mov r0, r3 - 8006c4e: f7ff ffb1 bl 8006bb4 - for (i = 1; i < LWIP_ARRAYSIZE(tcp_pcb_lists); i++) { - 8006c52: 68fb ldr r3, [r7, #12] - 8006c54: 3301 adds r3, #1 - 8006c56: 60fb str r3, [r7, #12] - 8006c58: 68fb ldr r3, [r7, #12] - 8006c5a: 2b03 cmp r3, #3 - 8006c5c: d9f0 bls.n 8006c40 - } -#endif - LWIP_UNUSED_ARG(pcb); -} - 8006c5e: bf00 nop - 8006c60: bf00 nop - 8006c62: 3710 adds r7, #16 - 8006c64: 46bd mov sp, r7 - 8006c66: bd80 pop {r7, pc} - 8006c68: 080166ac .word 0x080166ac - 8006c6c: 0801675c .word 0x0801675c - 8006c70: 080166f0 .word 0x080166f0 - 8006c74: 08016768 .word 0x08016768 - 8006c78: 08018a94 .word 0x08018a94 - -08006c7c : - * @return ERR_OK if connection has been closed - * another err_t if closing failed and pcb is not freed - */ -static err_t -tcp_close_shutdown(struct tcp_pcb *pcb, u8_t rst_on_unacked_data) -{ - 8006c7c: b5b0 push {r4, r5, r7, lr} - 8006c7e: b088 sub sp, #32 - 8006c80: af04 add r7, sp, #16 - 8006c82: 6078 str r0, [r7, #4] - 8006c84: 460b mov r3, r1 - 8006c86: 70fb strb r3, [r7, #3] - LWIP_ASSERT("tcp_close_shutdown: invalid pcb", pcb != NULL); - 8006c88: 687b ldr r3, [r7, #4] - 8006c8a: 2b00 cmp r3, #0 - 8006c8c: d106 bne.n 8006c9c - 8006c8e: 4b63 ldr r3, [pc, #396] ; (8006e1c ) - 8006c90: f44f 72af mov.w r2, #350 ; 0x15e - 8006c94: 4962 ldr r1, [pc, #392] ; (8006e20 ) - 8006c96: 4863 ldr r0, [pc, #396] ; (8006e24 ) - 8006c98: f00a fa06 bl 80110a8 - - if (rst_on_unacked_data && ((pcb->state == ESTABLISHED) || (pcb->state == CLOSE_WAIT))) { - 8006c9c: 78fb ldrb r3, [r7, #3] - 8006c9e: 2b00 cmp r3, #0 - 8006ca0: d066 beq.n 8006d70 - 8006ca2: 687b ldr r3, [r7, #4] - 8006ca4: 7d1b ldrb r3, [r3, #20] - 8006ca6: 2b04 cmp r3, #4 - 8006ca8: d003 beq.n 8006cb2 - 8006caa: 687b ldr r3, [r7, #4] - 8006cac: 7d1b ldrb r3, [r3, #20] - 8006cae: 2b07 cmp r3, #7 - 8006cb0: d15e bne.n 8006d70 - if ((pcb->refused_data != NULL) || (pcb->rcv_wnd != TCP_WND_MAX(pcb))) { - 8006cb2: 687b ldr r3, [r7, #4] - 8006cb4: 6f9b ldr r3, [r3, #120] ; 0x78 - 8006cb6: 2b00 cmp r3, #0 - 8006cb8: d104 bne.n 8006cc4 - 8006cba: 687b ldr r3, [r7, #4] - 8006cbc: 8d1b ldrh r3, [r3, #40] ; 0x28 - 8006cbe: f5b3 6f06 cmp.w r3, #2144 ; 0x860 - 8006cc2: d055 beq.n 8006d70 - /* Not all data received by application, send RST to tell the remote - side about this. */ - LWIP_ASSERT("pcb->flags & TF_RXCLOSED", pcb->flags & TF_RXCLOSED); - 8006cc4: 687b ldr r3, [r7, #4] - 8006cc6: 8b5b ldrh r3, [r3, #26] - 8006cc8: f003 0310 and.w r3, r3, #16 - 8006ccc: 2b00 cmp r3, #0 - 8006cce: d106 bne.n 8006cde - 8006cd0: 4b52 ldr r3, [pc, #328] ; (8006e1c ) - 8006cd2: f44f 72b2 mov.w r2, #356 ; 0x164 - 8006cd6: 4954 ldr r1, [pc, #336] ; (8006e28 ) - 8006cd8: 4852 ldr r0, [pc, #328] ; (8006e24 ) - 8006cda: f00a f9e5 bl 80110a8 - - /* don't call tcp_abort here: we must not deallocate the pcb since - that might not be expected when calling tcp_close */ - tcp_rst(pcb, pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip, - 8006cde: 687b ldr r3, [r7, #4] - 8006ce0: 6d18 ldr r0, [r3, #80] ; 0x50 - 8006ce2: 687b ldr r3, [r7, #4] - 8006ce4: 6a5c ldr r4, [r3, #36] ; 0x24 - 8006ce6: 687d ldr r5, [r7, #4] - 8006ce8: 687b ldr r3, [r7, #4] - 8006cea: 3304 adds r3, #4 - 8006cec: 687a ldr r2, [r7, #4] - 8006cee: 8ad2 ldrh r2, [r2, #22] - 8006cf0: 6879 ldr r1, [r7, #4] - 8006cf2: 8b09 ldrh r1, [r1, #24] - 8006cf4: 9102 str r1, [sp, #8] - 8006cf6: 9201 str r2, [sp, #4] - 8006cf8: 9300 str r3, [sp, #0] - 8006cfa: 462b mov r3, r5 - 8006cfc: 4622 mov r2, r4 - 8006cfe: 4601 mov r1, r0 - 8006d00: 6878 ldr r0, [r7, #4] - 8006d02: f004 fe91 bl 800ba28 - pcb->local_port, pcb->remote_port); - - tcp_pcb_purge(pcb); - 8006d06: 6878 ldr r0, [r7, #4] - 8006d08: f001 f8c6 bl 8007e98 - TCP_RMV_ACTIVE(pcb); - 8006d0c: 4b47 ldr r3, [pc, #284] ; (8006e2c ) - 8006d0e: 681b ldr r3, [r3, #0] - 8006d10: 687a ldr r2, [r7, #4] - 8006d12: 429a cmp r2, r3 - 8006d14: d105 bne.n 8006d22 - 8006d16: 4b45 ldr r3, [pc, #276] ; (8006e2c ) - 8006d18: 681b ldr r3, [r3, #0] - 8006d1a: 68db ldr r3, [r3, #12] - 8006d1c: 4a43 ldr r2, [pc, #268] ; (8006e2c ) - 8006d1e: 6013 str r3, [r2, #0] - 8006d20: e013 b.n 8006d4a - 8006d22: 4b42 ldr r3, [pc, #264] ; (8006e2c ) - 8006d24: 681b ldr r3, [r3, #0] - 8006d26: 60fb str r3, [r7, #12] - 8006d28: e00c b.n 8006d44 - 8006d2a: 68fb ldr r3, [r7, #12] - 8006d2c: 68db ldr r3, [r3, #12] - 8006d2e: 687a ldr r2, [r7, #4] - 8006d30: 429a cmp r2, r3 - 8006d32: d104 bne.n 8006d3e - 8006d34: 687b ldr r3, [r7, #4] - 8006d36: 68da ldr r2, [r3, #12] - 8006d38: 68fb ldr r3, [r7, #12] - 8006d3a: 60da str r2, [r3, #12] - 8006d3c: e005 b.n 8006d4a - 8006d3e: 68fb ldr r3, [r7, #12] - 8006d40: 68db ldr r3, [r3, #12] - 8006d42: 60fb str r3, [r7, #12] - 8006d44: 68fb ldr r3, [r7, #12] - 8006d46: 2b00 cmp r3, #0 - 8006d48: d1ef bne.n 8006d2a - 8006d4a: 687b ldr r3, [r7, #4] - 8006d4c: 2200 movs r2, #0 - 8006d4e: 60da str r2, [r3, #12] - 8006d50: 4b37 ldr r3, [pc, #220] ; (8006e30 ) - 8006d52: 2201 movs r2, #1 - 8006d54: 701a strb r2, [r3, #0] - /* Deallocate the pcb since we already sent a RST for it */ - if (tcp_input_pcb == pcb) { - 8006d56: 4b37 ldr r3, [pc, #220] ; (8006e34 ) - 8006d58: 681b ldr r3, [r3, #0] - 8006d5a: 687a ldr r2, [r7, #4] - 8006d5c: 429a cmp r2, r3 - 8006d5e: d102 bne.n 8006d66 - /* prevent using a deallocated pcb: free it from tcp_input later */ - tcp_trigger_input_pcb_close(); - 8006d60: f003 fd5e bl 800a820 - 8006d64: e002 b.n 8006d6c - } else { - tcp_free(pcb); - 8006d66: 6878 ldr r0, [r7, #4] - 8006d68: f7ff fed6 bl 8006b18 - } - return ERR_OK; - 8006d6c: 2300 movs r3, #0 - 8006d6e: e050 b.n 8006e12 - } - } - - /* - states which free the pcb are handled here, - - states which send FIN and change state are handled in tcp_close_shutdown_fin() */ - switch (pcb->state) { - 8006d70: 687b ldr r3, [r7, #4] - 8006d72: 7d1b ldrb r3, [r3, #20] - 8006d74: 2b02 cmp r3, #2 - 8006d76: d03b beq.n 8006df0 - 8006d78: 2b02 cmp r3, #2 - 8006d7a: dc44 bgt.n 8006e06 - 8006d7c: 2b00 cmp r3, #0 - 8006d7e: d002 beq.n 8006d86 - 8006d80: 2b01 cmp r3, #1 - 8006d82: d02a beq.n 8006dda - 8006d84: e03f b.n 8006e06 - * and the user needs some way to free it should the need arise. - * Calling tcp_close() with a pcb that has already been closed, (i.e. twice) - * or for a pcb that has been used and then entered the CLOSED state - * is erroneous, but this should never happen as the pcb has in those cases - * been freed, and so any remaining handles are bogus. */ - if (pcb->local_port != 0) { - 8006d86: 687b ldr r3, [r7, #4] - 8006d88: 8adb ldrh r3, [r3, #22] - 8006d8a: 2b00 cmp r3, #0 - 8006d8c: d021 beq.n 8006dd2 - TCP_RMV(&tcp_bound_pcbs, pcb); - 8006d8e: 4b2a ldr r3, [pc, #168] ; (8006e38 ) - 8006d90: 681b ldr r3, [r3, #0] - 8006d92: 687a ldr r2, [r7, #4] - 8006d94: 429a cmp r2, r3 - 8006d96: d105 bne.n 8006da4 - 8006d98: 4b27 ldr r3, [pc, #156] ; (8006e38 ) - 8006d9a: 681b ldr r3, [r3, #0] - 8006d9c: 68db ldr r3, [r3, #12] - 8006d9e: 4a26 ldr r2, [pc, #152] ; (8006e38 ) - 8006da0: 6013 str r3, [r2, #0] - 8006da2: e013 b.n 8006dcc - 8006da4: 4b24 ldr r3, [pc, #144] ; (8006e38 ) - 8006da6: 681b ldr r3, [r3, #0] - 8006da8: 60bb str r3, [r7, #8] - 8006daa: e00c b.n 8006dc6 - 8006dac: 68bb ldr r3, [r7, #8] - 8006dae: 68db ldr r3, [r3, #12] - 8006db0: 687a ldr r2, [r7, #4] - 8006db2: 429a cmp r2, r3 - 8006db4: d104 bne.n 8006dc0 - 8006db6: 687b ldr r3, [r7, #4] - 8006db8: 68da ldr r2, [r3, #12] - 8006dba: 68bb ldr r3, [r7, #8] - 8006dbc: 60da str r2, [r3, #12] - 8006dbe: e005 b.n 8006dcc - 8006dc0: 68bb ldr r3, [r7, #8] - 8006dc2: 68db ldr r3, [r3, #12] - 8006dc4: 60bb str r3, [r7, #8] - 8006dc6: 68bb ldr r3, [r7, #8] - 8006dc8: 2b00 cmp r3, #0 - 8006dca: d1ef bne.n 8006dac - 8006dcc: 687b ldr r3, [r7, #4] - 8006dce: 2200 movs r2, #0 - 8006dd0: 60da str r2, [r3, #12] - } - tcp_free(pcb); - 8006dd2: 6878 ldr r0, [r7, #4] - 8006dd4: f7ff fea0 bl 8006b18 - break; - 8006dd8: e01a b.n 8006e10 - case LISTEN: - tcp_listen_closed(pcb); - 8006dda: 6878 ldr r0, [r7, #4] - 8006ddc: f7ff ff14 bl 8006c08 - tcp_pcb_remove(&tcp_listen_pcbs.pcbs, pcb); - 8006de0: 6879 ldr r1, [r7, #4] - 8006de2: 4816 ldr r0, [pc, #88] ; (8006e3c ) - 8006de4: f001 f8a8 bl 8007f38 - tcp_free_listen(pcb); - 8006de8: 6878 ldr r0, [r7, #4] - 8006dea: f7ff feb1 bl 8006b50 - break; - 8006dee: e00f b.n 8006e10 - case SYN_SENT: - TCP_PCB_REMOVE_ACTIVE(pcb); - 8006df0: 6879 ldr r1, [r7, #4] - 8006df2: 480e ldr r0, [pc, #56] ; (8006e2c ) - 8006df4: f001 f8a0 bl 8007f38 - 8006df8: 4b0d ldr r3, [pc, #52] ; (8006e30 ) - 8006dfa: 2201 movs r2, #1 - 8006dfc: 701a strb r2, [r3, #0] - tcp_free(pcb); - 8006dfe: 6878 ldr r0, [r7, #4] - 8006e00: f7ff fe8a bl 8006b18 - MIB2_STATS_INC(mib2.tcpattemptfails); - break; - 8006e04: e004 b.n 8006e10 - default: - return tcp_close_shutdown_fin(pcb); - 8006e06: 6878 ldr r0, [r7, #4] - 8006e08: f000 f81a bl 8006e40 - 8006e0c: 4603 mov r3, r0 - 8006e0e: e000 b.n 8006e12 - } - return ERR_OK; - 8006e10: 2300 movs r3, #0 -} - 8006e12: 4618 mov r0, r3 - 8006e14: 3710 adds r7, #16 - 8006e16: 46bd mov sp, r7 - 8006e18: bdb0 pop {r4, r5, r7, pc} - 8006e1a: bf00 nop - 8006e1c: 080166ac .word 0x080166ac - 8006e20: 08016780 .word 0x08016780 - 8006e24: 080166f0 .word 0x080166f0 - 8006e28: 080167a0 .word 0x080167a0 - 8006e2c: 200099e0 .word 0x200099e0 - 8006e30: 200099e8 .word 0x200099e8 - 8006e34: 20009a20 .word 0x20009a20 - 8006e38: 200099d8 .word 0x200099d8 - 8006e3c: 200099dc .word 0x200099dc - -08006e40 : - -static err_t -tcp_close_shutdown_fin(struct tcp_pcb *pcb) -{ - 8006e40: b580 push {r7, lr} - 8006e42: b084 sub sp, #16 - 8006e44: af00 add r7, sp, #0 - 8006e46: 6078 str r0, [r7, #4] - err_t err; - LWIP_ASSERT("pcb != NULL", pcb != NULL); - 8006e48: 687b ldr r3, [r7, #4] - 8006e4a: 2b00 cmp r3, #0 - 8006e4c: d106 bne.n 8006e5c - 8006e4e: 4b2e ldr r3, [pc, #184] ; (8006f08 ) - 8006e50: f44f 72ce mov.w r2, #412 ; 0x19c - 8006e54: 492d ldr r1, [pc, #180] ; (8006f0c ) - 8006e56: 482e ldr r0, [pc, #184] ; (8006f10 ) - 8006e58: f00a f926 bl 80110a8 - - switch (pcb->state) { - 8006e5c: 687b ldr r3, [r7, #4] - 8006e5e: 7d1b ldrb r3, [r3, #20] - 8006e60: 2b07 cmp r3, #7 - 8006e62: d020 beq.n 8006ea6 - 8006e64: 2b07 cmp r3, #7 - 8006e66: dc2b bgt.n 8006ec0 - 8006e68: 2b03 cmp r3, #3 - 8006e6a: d002 beq.n 8006e72 - 8006e6c: 2b04 cmp r3, #4 - 8006e6e: d00d beq.n 8006e8c - 8006e70: e026 b.n 8006ec0 - case SYN_RCVD: - err = tcp_send_fin(pcb); - 8006e72: 6878 ldr r0, [r7, #4] - 8006e74: f003 fee6 bl 800ac44 - 8006e78: 4603 mov r3, r0 - 8006e7a: 73fb strb r3, [r7, #15] - if (err == ERR_OK) { - 8006e7c: f997 300f ldrsb.w r3, [r7, #15] - 8006e80: 2b00 cmp r3, #0 - 8006e82: d11f bne.n 8006ec4 - tcp_backlog_accepted(pcb); - MIB2_STATS_INC(mib2.tcpattemptfails); - pcb->state = FIN_WAIT_1; - 8006e84: 687b ldr r3, [r7, #4] - 8006e86: 2205 movs r2, #5 - 8006e88: 751a strb r2, [r3, #20] - } - break; - 8006e8a: e01b b.n 8006ec4 - case ESTABLISHED: - err = tcp_send_fin(pcb); - 8006e8c: 6878 ldr r0, [r7, #4] - 8006e8e: f003 fed9 bl 800ac44 - 8006e92: 4603 mov r3, r0 - 8006e94: 73fb strb r3, [r7, #15] - if (err == ERR_OK) { - 8006e96: f997 300f ldrsb.w r3, [r7, #15] - 8006e9a: 2b00 cmp r3, #0 - 8006e9c: d114 bne.n 8006ec8 - MIB2_STATS_INC(mib2.tcpestabresets); - pcb->state = FIN_WAIT_1; - 8006e9e: 687b ldr r3, [r7, #4] - 8006ea0: 2205 movs r2, #5 - 8006ea2: 751a strb r2, [r3, #20] - } - break; - 8006ea4: e010 b.n 8006ec8 - case CLOSE_WAIT: - err = tcp_send_fin(pcb); - 8006ea6: 6878 ldr r0, [r7, #4] - 8006ea8: f003 fecc bl 800ac44 - 8006eac: 4603 mov r3, r0 - 8006eae: 73fb strb r3, [r7, #15] - if (err == ERR_OK) { - 8006eb0: f997 300f ldrsb.w r3, [r7, #15] - 8006eb4: 2b00 cmp r3, #0 - 8006eb6: d109 bne.n 8006ecc - MIB2_STATS_INC(mib2.tcpestabresets); - pcb->state = LAST_ACK; - 8006eb8: 687b ldr r3, [r7, #4] - 8006eba: 2209 movs r2, #9 - 8006ebc: 751a strb r2, [r3, #20] - } - break; - 8006ebe: e005 b.n 8006ecc - default: - /* Has already been closed, do nothing. */ - return ERR_OK; - 8006ec0: 2300 movs r3, #0 - 8006ec2: e01c b.n 8006efe - break; - 8006ec4: bf00 nop - 8006ec6: e002 b.n 8006ece - break; - 8006ec8: bf00 nop - 8006eca: e000 b.n 8006ece - break; - 8006ecc: bf00 nop - } - - if (err == ERR_OK) { - 8006ece: f997 300f ldrsb.w r3, [r7, #15] - 8006ed2: 2b00 cmp r3, #0 - 8006ed4: d103 bne.n 8006ede - /* To ensure all data has been sent when tcp_close returns, we have - to make sure tcp_output doesn't fail. - Since we don't really have to ensure all data has been sent when tcp_close - returns (unsent data is sent from tcp timer functions, also), we don't care - for the return value of tcp_output for now. */ - tcp_output(pcb); - 8006ed6: 6878 ldr r0, [r7, #4] - 8006ed8: f003 fff2 bl 800aec0 - 8006edc: e00d b.n 8006efa - } else if (err == ERR_MEM) { - 8006ede: f997 300f ldrsb.w r3, [r7, #15] - 8006ee2: f1b3 3fff cmp.w r3, #4294967295 - 8006ee6: d108 bne.n 8006efa - /* Mark this pcb for closing. Closing is retried from tcp_tmr. */ - tcp_set_flags(pcb, TF_CLOSEPEND); - 8006ee8: 687b ldr r3, [r7, #4] - 8006eea: 8b5b ldrh r3, [r3, #26] - 8006eec: f043 0308 orr.w r3, r3, #8 - 8006ef0: b29a uxth r2, r3 - 8006ef2: 687b ldr r3, [r7, #4] - 8006ef4: 835a strh r2, [r3, #26] - /* We have to return ERR_OK from here to indicate to the callers that this - pcb should not be used any more as it will be freed soon via tcp_tmr. - This is OK here since sending FIN does not guarantee a time frime for - actually freeing the pcb, either (it is left in closure states for - remote ACK or timeout) */ - return ERR_OK; - 8006ef6: 2300 movs r3, #0 - 8006ef8: e001 b.n 8006efe - } - return err; - 8006efa: f997 300f ldrsb.w r3, [r7, #15] -} - 8006efe: 4618 mov r0, r3 - 8006f00: 3710 adds r7, #16 - 8006f02: 46bd mov sp, r7 - 8006f04: bd80 pop {r7, pc} - 8006f06: bf00 nop - 8006f08: 080166ac .word 0x080166ac - 8006f0c: 0801675c .word 0x0801675c - 8006f10: 080166f0 .word 0x080166f0 - -08006f14 : - * @return ERR_OK if connection has been closed - * another err_t if closing failed and pcb is not freed - */ -err_t -tcp_close(struct tcp_pcb *pcb) -{ - 8006f14: b580 push {r7, lr} - 8006f16: b082 sub sp, #8 - 8006f18: af00 add r7, sp, #0 - 8006f1a: 6078 str r0, [r7, #4] - LWIP_ASSERT_CORE_LOCKED(); - - LWIP_ERROR("tcp_close: invalid pcb", pcb != NULL, return ERR_ARG); - 8006f1c: 687b ldr r3, [r7, #4] - 8006f1e: 2b00 cmp r3, #0 - 8006f20: d109 bne.n 8006f36 - 8006f22: 4b0f ldr r3, [pc, #60] ; (8006f60 ) - 8006f24: f44f 72f4 mov.w r2, #488 ; 0x1e8 - 8006f28: 490e ldr r1, [pc, #56] ; (8006f64 ) - 8006f2a: 480f ldr r0, [pc, #60] ; (8006f68 ) - 8006f2c: f00a f8bc bl 80110a8 - 8006f30: f06f 030f mvn.w r3, #15 - 8006f34: e00f b.n 8006f56 - LWIP_DEBUGF(TCP_DEBUG, ("tcp_close: closing in ")); - - tcp_debug_print_state(pcb->state); - - if (pcb->state != LISTEN) { - 8006f36: 687b ldr r3, [r7, #4] - 8006f38: 7d1b ldrb r3, [r3, #20] - 8006f3a: 2b01 cmp r3, #1 - 8006f3c: d006 beq.n 8006f4c - /* Set a flag not to receive any more data... */ - tcp_set_flags(pcb, TF_RXCLOSED); - 8006f3e: 687b ldr r3, [r7, #4] - 8006f40: 8b5b ldrh r3, [r3, #26] - 8006f42: f043 0310 orr.w r3, r3, #16 - 8006f46: b29a uxth r2, r3 - 8006f48: 687b ldr r3, [r7, #4] - 8006f4a: 835a strh r2, [r3, #26] - } - /* ... and close */ - return tcp_close_shutdown(pcb, 1); - 8006f4c: 2101 movs r1, #1 - 8006f4e: 6878 ldr r0, [r7, #4] - 8006f50: f7ff fe94 bl 8006c7c - 8006f54: 4603 mov r3, r0 -} - 8006f56: 4618 mov r0, r3 - 8006f58: 3708 adds r7, #8 - 8006f5a: 46bd mov sp, r7 - 8006f5c: bd80 pop {r7, pc} - 8006f5e: bf00 nop - 8006f60: 080166ac .word 0x080166ac - 8006f64: 080167bc .word 0x080167bc - 8006f68: 080166f0 .word 0x080166f0 - -08006f6c : - * @param pcb the tcp_pcb to abort - * @param reset boolean to indicate whether a reset should be sent - */ -void -tcp_abandon(struct tcp_pcb *pcb, int reset) -{ - 8006f6c: b580 push {r7, lr} - 8006f6e: b08e sub sp, #56 ; 0x38 - 8006f70: af04 add r7, sp, #16 - 8006f72: 6078 str r0, [r7, #4] - 8006f74: 6039 str r1, [r7, #0] -#endif /* LWIP_CALLBACK_API */ - void *errf_arg; - - LWIP_ASSERT_CORE_LOCKED(); - - LWIP_ERROR("tcp_abandon: invalid pcb", pcb != NULL, return); - 8006f76: 687b ldr r3, [r7, #4] - 8006f78: 2b00 cmp r3, #0 - 8006f7a: d107 bne.n 8006f8c - 8006f7c: 4b52 ldr r3, [pc, #328] ; (80070c8 ) - 8006f7e: f240 223d movw r2, #573 ; 0x23d - 8006f82: 4952 ldr r1, [pc, #328] ; (80070cc ) - 8006f84: 4852 ldr r0, [pc, #328] ; (80070d0 ) - 8006f86: f00a f88f bl 80110a8 - 8006f8a: e099 b.n 80070c0 - - /* pcb->state LISTEN not allowed here */ - LWIP_ASSERT("don't call tcp_abort/tcp_abandon for listen-pcbs", - 8006f8c: 687b ldr r3, [r7, #4] - 8006f8e: 7d1b ldrb r3, [r3, #20] - 8006f90: 2b01 cmp r3, #1 - 8006f92: d106 bne.n 8006fa2 - 8006f94: 4b4c ldr r3, [pc, #304] ; (80070c8 ) - 8006f96: f44f 7210 mov.w r2, #576 ; 0x240 - 8006f9a: 494e ldr r1, [pc, #312] ; (80070d4 ) - 8006f9c: 484c ldr r0, [pc, #304] ; (80070d0 ) - 8006f9e: f00a f883 bl 80110a8 - pcb->state != LISTEN); - /* Figure out on which TCP PCB list we are, and remove us. If we - are in an active state, call the receive function associated with - the PCB with a NULL argument, and send an RST to the remote end. */ - if (pcb->state == TIME_WAIT) { - 8006fa2: 687b ldr r3, [r7, #4] - 8006fa4: 7d1b ldrb r3, [r3, #20] - 8006fa6: 2b0a cmp r3, #10 - 8006fa8: d107 bne.n 8006fba - tcp_pcb_remove(&tcp_tw_pcbs, pcb); - 8006faa: 6879 ldr r1, [r7, #4] - 8006fac: 484a ldr r0, [pc, #296] ; (80070d8 ) - 8006fae: f000 ffc3 bl 8007f38 - tcp_free(pcb); - 8006fb2: 6878 ldr r0, [r7, #4] - 8006fb4: f7ff fdb0 bl 8006b18 - 8006fb8: e082 b.n 80070c0 - } else { - int send_rst = 0; - 8006fba: 2300 movs r3, #0 - 8006fbc: 627b str r3, [r7, #36] ; 0x24 - u16_t local_port = 0; - 8006fbe: 2300 movs r3, #0 - 8006fc0: 847b strh r3, [r7, #34] ; 0x22 - enum tcp_state last_state; - seqno = pcb->snd_nxt; - 8006fc2: 687b ldr r3, [r7, #4] - 8006fc4: 6d1b ldr r3, [r3, #80] ; 0x50 - 8006fc6: 61bb str r3, [r7, #24] - ackno = pcb->rcv_nxt; - 8006fc8: 687b ldr r3, [r7, #4] - 8006fca: 6a5b ldr r3, [r3, #36] ; 0x24 - 8006fcc: 617b str r3, [r7, #20] -#if LWIP_CALLBACK_API - errf = pcb->errf; - 8006fce: 687b ldr r3, [r7, #4] - 8006fd0: f8d3 3090 ldr.w r3, [r3, #144] ; 0x90 - 8006fd4: 613b str r3, [r7, #16] -#endif /* LWIP_CALLBACK_API */ - errf_arg = pcb->callback_arg; - 8006fd6: 687b ldr r3, [r7, #4] - 8006fd8: 691b ldr r3, [r3, #16] - 8006fda: 60fb str r3, [r7, #12] - if (pcb->state == CLOSED) { - 8006fdc: 687b ldr r3, [r7, #4] - 8006fde: 7d1b ldrb r3, [r3, #20] - 8006fe0: 2b00 cmp r3, #0 - 8006fe2: d126 bne.n 8007032 - if (pcb->local_port != 0) { - 8006fe4: 687b ldr r3, [r7, #4] - 8006fe6: 8adb ldrh r3, [r3, #22] - 8006fe8: 2b00 cmp r3, #0 - 8006fea: d02e beq.n 800704a - /* bound, not yet opened */ - TCP_RMV(&tcp_bound_pcbs, pcb); - 8006fec: 4b3b ldr r3, [pc, #236] ; (80070dc ) - 8006fee: 681b ldr r3, [r3, #0] - 8006ff0: 687a ldr r2, [r7, #4] - 8006ff2: 429a cmp r2, r3 - 8006ff4: d105 bne.n 8007002 - 8006ff6: 4b39 ldr r3, [pc, #228] ; (80070dc ) - 8006ff8: 681b ldr r3, [r3, #0] - 8006ffa: 68db ldr r3, [r3, #12] - 8006ffc: 4a37 ldr r2, [pc, #220] ; (80070dc ) - 8006ffe: 6013 str r3, [r2, #0] - 8007000: e013 b.n 800702a - 8007002: 4b36 ldr r3, [pc, #216] ; (80070dc ) - 8007004: 681b ldr r3, [r3, #0] - 8007006: 61fb str r3, [r7, #28] - 8007008: e00c b.n 8007024 - 800700a: 69fb ldr r3, [r7, #28] - 800700c: 68db ldr r3, [r3, #12] - 800700e: 687a ldr r2, [r7, #4] - 8007010: 429a cmp r2, r3 - 8007012: d104 bne.n 800701e - 8007014: 687b ldr r3, [r7, #4] - 8007016: 68da ldr r2, [r3, #12] - 8007018: 69fb ldr r3, [r7, #28] - 800701a: 60da str r2, [r3, #12] - 800701c: e005 b.n 800702a - 800701e: 69fb ldr r3, [r7, #28] - 8007020: 68db ldr r3, [r3, #12] - 8007022: 61fb str r3, [r7, #28] - 8007024: 69fb ldr r3, [r7, #28] - 8007026: 2b00 cmp r3, #0 - 8007028: d1ef bne.n 800700a - 800702a: 687b ldr r3, [r7, #4] - 800702c: 2200 movs r2, #0 - 800702e: 60da str r2, [r3, #12] - 8007030: e00b b.n 800704a - } - } else { - send_rst = reset; - 8007032: 683b ldr r3, [r7, #0] - 8007034: 627b str r3, [r7, #36] ; 0x24 - local_port = pcb->local_port; - 8007036: 687b ldr r3, [r7, #4] - 8007038: 8adb ldrh r3, [r3, #22] - 800703a: 847b strh r3, [r7, #34] ; 0x22 - TCP_PCB_REMOVE_ACTIVE(pcb); - 800703c: 6879 ldr r1, [r7, #4] - 800703e: 4828 ldr r0, [pc, #160] ; (80070e0 ) - 8007040: f000 ff7a bl 8007f38 - 8007044: 4b27 ldr r3, [pc, #156] ; (80070e4 ) - 8007046: 2201 movs r2, #1 - 8007048: 701a strb r2, [r3, #0] - } - if (pcb->unacked != NULL) { - 800704a: 687b ldr r3, [r7, #4] - 800704c: 6f1b ldr r3, [r3, #112] ; 0x70 - 800704e: 2b00 cmp r3, #0 - 8007050: d004 beq.n 800705c - tcp_segs_free(pcb->unacked); - 8007052: 687b ldr r3, [r7, #4] - 8007054: 6f1b ldr r3, [r3, #112] ; 0x70 - 8007056: 4618 mov r0, r3 - 8007058: f000 fd1c bl 8007a94 - } - if (pcb->unsent != NULL) { - 800705c: 687b ldr r3, [r7, #4] - 800705e: 6edb ldr r3, [r3, #108] ; 0x6c - 8007060: 2b00 cmp r3, #0 - 8007062: d004 beq.n 800706e - tcp_segs_free(pcb->unsent); - 8007064: 687b ldr r3, [r7, #4] - 8007066: 6edb ldr r3, [r3, #108] ; 0x6c - 8007068: 4618 mov r0, r3 - 800706a: f000 fd13 bl 8007a94 - } -#if TCP_QUEUE_OOSEQ - if (pcb->ooseq != NULL) { - 800706e: 687b ldr r3, [r7, #4] - 8007070: 6f5b ldr r3, [r3, #116] ; 0x74 - 8007072: 2b00 cmp r3, #0 - 8007074: d004 beq.n 8007080 - tcp_segs_free(pcb->ooseq); - 8007076: 687b ldr r3, [r7, #4] - 8007078: 6f5b ldr r3, [r3, #116] ; 0x74 - 800707a: 4618 mov r0, r3 - 800707c: f000 fd0a bl 8007a94 - } -#endif /* TCP_QUEUE_OOSEQ */ - tcp_backlog_accepted(pcb); - if (send_rst) { - 8007080: 6a7b ldr r3, [r7, #36] ; 0x24 - 8007082: 2b00 cmp r3, #0 - 8007084: d00e beq.n 80070a4 - LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_abandon: sending RST\n")); - tcp_rst(pcb, seqno, ackno, &pcb->local_ip, &pcb->remote_ip, local_port, pcb->remote_port); - 8007086: 6879 ldr r1, [r7, #4] - 8007088: 687b ldr r3, [r7, #4] - 800708a: 3304 adds r3, #4 - 800708c: 687a ldr r2, [r7, #4] - 800708e: 8b12 ldrh r2, [r2, #24] - 8007090: 9202 str r2, [sp, #8] - 8007092: 8c7a ldrh r2, [r7, #34] ; 0x22 - 8007094: 9201 str r2, [sp, #4] - 8007096: 9300 str r3, [sp, #0] - 8007098: 460b mov r3, r1 - 800709a: 697a ldr r2, [r7, #20] - 800709c: 69b9 ldr r1, [r7, #24] - 800709e: 6878 ldr r0, [r7, #4] - 80070a0: f004 fcc2 bl 800ba28 - } - last_state = pcb->state; - 80070a4: 687b ldr r3, [r7, #4] - 80070a6: 7d1b ldrb r3, [r3, #20] - 80070a8: 72fb strb r3, [r7, #11] - tcp_free(pcb); - 80070aa: 6878 ldr r0, [r7, #4] - 80070ac: f7ff fd34 bl 8006b18 - TCP_EVENT_ERR(last_state, errf, errf_arg, ERR_ABRT); - 80070b0: 693b ldr r3, [r7, #16] - 80070b2: 2b00 cmp r3, #0 - 80070b4: d004 beq.n 80070c0 - 80070b6: 693b ldr r3, [r7, #16] - 80070b8: f06f 010c mvn.w r1, #12 - 80070bc: 68f8 ldr r0, [r7, #12] - 80070be: 4798 blx r3 - } -} - 80070c0: 3728 adds r7, #40 ; 0x28 - 80070c2: 46bd mov sp, r7 - 80070c4: bd80 pop {r7, pc} - 80070c6: bf00 nop - 80070c8: 080166ac .word 0x080166ac - 80070cc: 080167f0 .word 0x080167f0 - 80070d0: 080166f0 .word 0x080166f0 - 80070d4: 0801680c .word 0x0801680c - 80070d8: 200099e4 .word 0x200099e4 - 80070dc: 200099d8 .word 0x200099d8 - 80070e0: 200099e0 .word 0x200099e0 - 80070e4: 200099e8 .word 0x200099e8 - -080070e8 : - * - * @param pcb the tcp pcb to abort - */ -void -tcp_abort(struct tcp_pcb *pcb) -{ - 80070e8: b580 push {r7, lr} - 80070ea: b082 sub sp, #8 - 80070ec: af00 add r7, sp, #0 - 80070ee: 6078 str r0, [r7, #4] - tcp_abandon(pcb, 1); - 80070f0: 2101 movs r1, #1 - 80070f2: 6878 ldr r0, [r7, #4] - 80070f4: f7ff ff3a bl 8006f6c -} - 80070f8: bf00 nop - 80070fa: 3708 adds r7, #8 - 80070fc: 46bd mov sp, r7 - 80070fe: bd80 pop {r7, pc} - -08007100 : - * Returns how much extra window would be advertised if we sent an - * update now. - */ -u32_t -tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb) -{ - 8007100: b580 push {r7, lr} - 8007102: b084 sub sp, #16 - 8007104: af00 add r7, sp, #0 - 8007106: 6078 str r0, [r7, #4] - u32_t new_right_edge; - - LWIP_ASSERT("tcp_update_rcv_ann_wnd: invalid pcb", pcb != NULL); - 8007108: 687b ldr r3, [r7, #4] - 800710a: 2b00 cmp r3, #0 - 800710c: d106 bne.n 800711c - 800710e: 4b25 ldr r3, [pc, #148] ; (80071a4 ) - 8007110: f240 32a6 movw r2, #934 ; 0x3a6 - 8007114: 4924 ldr r1, [pc, #144] ; (80071a8 ) - 8007116: 4825 ldr r0, [pc, #148] ; (80071ac ) - 8007118: f009 ffc6 bl 80110a8 - new_right_edge = pcb->rcv_nxt + pcb->rcv_wnd; - 800711c: 687b ldr r3, [r7, #4] - 800711e: 6a5b ldr r3, [r3, #36] ; 0x24 - 8007120: 687a ldr r2, [r7, #4] - 8007122: 8d12 ldrh r2, [r2, #40] ; 0x28 - 8007124: 4413 add r3, r2 - 8007126: 60fb str r3, [r7, #12] - - if (TCP_SEQ_GEQ(new_right_edge, pcb->rcv_ann_right_edge + LWIP_MIN((TCP_WND / 2), pcb->mss))) { - 8007128: 687b ldr r3, [r7, #4] - 800712a: 6adb ldr r3, [r3, #44] ; 0x2c - 800712c: 687a ldr r2, [r7, #4] - 800712e: 8e52 ldrh r2, [r2, #50] ; 0x32 - 8007130: f5b2 6f86 cmp.w r2, #1072 ; 0x430 - 8007134: bf28 it cs - 8007136: f44f 6286 movcs.w r2, #1072 ; 0x430 - 800713a: b292 uxth r2, r2 - 800713c: 4413 add r3, r2 - 800713e: 68fa ldr r2, [r7, #12] - 8007140: 1ad3 subs r3, r2, r3 - 8007142: 2b00 cmp r3, #0 - 8007144: db08 blt.n 8007158 - /* we can advertise more window */ - pcb->rcv_ann_wnd = pcb->rcv_wnd; - 8007146: 687b ldr r3, [r7, #4] - 8007148: 8d1a ldrh r2, [r3, #40] ; 0x28 - 800714a: 687b ldr r3, [r7, #4] - 800714c: 855a strh r2, [r3, #42] ; 0x2a - return new_right_edge - pcb->rcv_ann_right_edge; - 800714e: 687b ldr r3, [r7, #4] - 8007150: 6adb ldr r3, [r3, #44] ; 0x2c - 8007152: 68fa ldr r2, [r7, #12] - 8007154: 1ad3 subs r3, r2, r3 - 8007156: e020 b.n 800719a - } else { - if (TCP_SEQ_GT(pcb->rcv_nxt, pcb->rcv_ann_right_edge)) { - 8007158: 687b ldr r3, [r7, #4] - 800715a: 6a5a ldr r2, [r3, #36] ; 0x24 - 800715c: 687b ldr r3, [r7, #4] - 800715e: 6adb ldr r3, [r3, #44] ; 0x2c - 8007160: 1ad3 subs r3, r2, r3 - 8007162: 2b00 cmp r3, #0 - 8007164: dd03 ble.n 800716e - /* Can happen due to other end sending out of advertised window, - * but within actual available (but not yet advertised) window */ - pcb->rcv_ann_wnd = 0; - 8007166: 687b ldr r3, [r7, #4] - 8007168: 2200 movs r2, #0 - 800716a: 855a strh r2, [r3, #42] ; 0x2a - 800716c: e014 b.n 8007198 - } else { - /* keep the right edge of window constant */ - u32_t new_rcv_ann_wnd = pcb->rcv_ann_right_edge - pcb->rcv_nxt; - 800716e: 687b ldr r3, [r7, #4] - 8007170: 6ada ldr r2, [r3, #44] ; 0x2c - 8007172: 687b ldr r3, [r7, #4] - 8007174: 6a5b ldr r3, [r3, #36] ; 0x24 - 8007176: 1ad3 subs r3, r2, r3 - 8007178: 60bb str r3, [r7, #8] -#if !LWIP_WND_SCALE - LWIP_ASSERT("new_rcv_ann_wnd <= 0xffff", new_rcv_ann_wnd <= 0xffff); - 800717a: 68bb ldr r3, [r7, #8] - 800717c: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 8007180: d306 bcc.n 8007190 - 8007182: 4b08 ldr r3, [pc, #32] ; (80071a4 ) - 8007184: f240 32b6 movw r2, #950 ; 0x3b6 - 8007188: 4909 ldr r1, [pc, #36] ; (80071b0 ) - 800718a: 4808 ldr r0, [pc, #32] ; (80071ac ) - 800718c: f009 ff8c bl 80110a8 -#endif - pcb->rcv_ann_wnd = (tcpwnd_size_t)new_rcv_ann_wnd; - 8007190: 68bb ldr r3, [r7, #8] - 8007192: b29a uxth r2, r3 - 8007194: 687b ldr r3, [r7, #4] - 8007196: 855a strh r2, [r3, #42] ; 0x2a - } - return 0; - 8007198: 2300 movs r3, #0 - } -} - 800719a: 4618 mov r0, r3 - 800719c: 3710 adds r7, #16 - 800719e: 46bd mov sp, r7 - 80071a0: bd80 pop {r7, pc} - 80071a2: bf00 nop - 80071a4: 080166ac .word 0x080166ac - 80071a8: 08016908 .word 0x08016908 - 80071ac: 080166f0 .word 0x080166f0 - 80071b0: 0801692c .word 0x0801692c - -080071b4 : - * @param pcb the tcp_pcb for which data is read - * @param len the amount of bytes that have been read by the application - */ -void -tcp_recved(struct tcp_pcb *pcb, u16_t len) -{ - 80071b4: b580 push {r7, lr} - 80071b6: b084 sub sp, #16 - 80071b8: af00 add r7, sp, #0 - 80071ba: 6078 str r0, [r7, #4] - 80071bc: 460b mov r3, r1 - 80071be: 807b strh r3, [r7, #2] - u32_t wnd_inflation; - tcpwnd_size_t rcv_wnd; - - LWIP_ASSERT_CORE_LOCKED(); - - LWIP_ERROR("tcp_recved: invalid pcb", pcb != NULL, return); - 80071c0: 687b ldr r3, [r7, #4] - 80071c2: 2b00 cmp r3, #0 - 80071c4: d107 bne.n 80071d6 - 80071c6: 4b1f ldr r3, [pc, #124] ; (8007244 ) - 80071c8: f240 32cf movw r2, #975 ; 0x3cf - 80071cc: 491e ldr r1, [pc, #120] ; (8007248 ) - 80071ce: 481f ldr r0, [pc, #124] ; (800724c ) - 80071d0: f009 ff6a bl 80110a8 - 80071d4: e032 b.n 800723c - - /* pcb->state LISTEN not allowed here */ - LWIP_ASSERT("don't call tcp_recved for listen-pcbs", - 80071d6: 687b ldr r3, [r7, #4] - 80071d8: 7d1b ldrb r3, [r3, #20] - 80071da: 2b01 cmp r3, #1 - 80071dc: d106 bne.n 80071ec - 80071de: 4b19 ldr r3, [pc, #100] ; (8007244 ) - 80071e0: f240 32d2 movw r2, #978 ; 0x3d2 - 80071e4: 491a ldr r1, [pc, #104] ; (8007250 ) - 80071e6: 4819 ldr r0, [pc, #100] ; (800724c ) - 80071e8: f009 ff5e bl 80110a8 - pcb->state != LISTEN); - - rcv_wnd = (tcpwnd_size_t)(pcb->rcv_wnd + len); - 80071ec: 687b ldr r3, [r7, #4] - 80071ee: 8d1a ldrh r2, [r3, #40] ; 0x28 - 80071f0: 887b ldrh r3, [r7, #2] - 80071f2: 4413 add r3, r2 - 80071f4: 81fb strh r3, [r7, #14] - if ((rcv_wnd > TCP_WND_MAX(pcb)) || (rcv_wnd < pcb->rcv_wnd)) { - 80071f6: 89fb ldrh r3, [r7, #14] - 80071f8: f5b3 6f06 cmp.w r3, #2144 ; 0x860 - 80071fc: d804 bhi.n 8007208 - 80071fe: 687b ldr r3, [r7, #4] - 8007200: 8d1b ldrh r3, [r3, #40] ; 0x28 - 8007202: 89fa ldrh r2, [r7, #14] - 8007204: 429a cmp r2, r3 - 8007206: d204 bcs.n 8007212 - /* window got too big or tcpwnd_size_t overflow */ - LWIP_DEBUGF(TCP_DEBUG, ("tcp_recved: window got too big or tcpwnd_size_t overflow\n")); - pcb->rcv_wnd = TCP_WND_MAX(pcb); - 8007208: 687b ldr r3, [r7, #4] - 800720a: f44f 6206 mov.w r2, #2144 ; 0x860 - 800720e: 851a strh r2, [r3, #40] ; 0x28 - 8007210: e002 b.n 8007218 - } else { - pcb->rcv_wnd = rcv_wnd; - 8007212: 687b ldr r3, [r7, #4] - 8007214: 89fa ldrh r2, [r7, #14] - 8007216: 851a strh r2, [r3, #40] ; 0x28 - } - - wnd_inflation = tcp_update_rcv_ann_wnd(pcb); - 8007218: 6878 ldr r0, [r7, #4] - 800721a: f7ff ff71 bl 8007100 - 800721e: 60b8 str r0, [r7, #8] - - /* If the change in the right edge of window is significant (default - * watermark is TCP_WND/4), then send an explicit update now. - * Otherwise wait for a packet to be sent in the normal course of - * events (or more window to be available later) */ - if (wnd_inflation >= TCP_WND_UPDATE_THRESHOLD) { - 8007220: 68bb ldr r3, [r7, #8] - 8007222: f5b3 7f06 cmp.w r3, #536 ; 0x218 - 8007226: d309 bcc.n 800723c - tcp_ack_now(pcb); - 8007228: 687b ldr r3, [r7, #4] - 800722a: 8b5b ldrh r3, [r3, #26] - 800722c: f043 0302 orr.w r3, r3, #2 - 8007230: b29a uxth r2, r3 - 8007232: 687b ldr r3, [r7, #4] - 8007234: 835a strh r2, [r3, #26] - tcp_output(pcb); - 8007236: 6878 ldr r0, [r7, #4] - 8007238: f003 fe42 bl 800aec0 - } - - LWIP_DEBUGF(TCP_DEBUG, ("tcp_recved: received %"U16_F" bytes, wnd %"TCPWNDSIZE_F" (%"TCPWNDSIZE_F").\n", - len, pcb->rcv_wnd, (u16_t)(TCP_WND_MAX(pcb) - pcb->rcv_wnd))); -} - 800723c: 3710 adds r7, #16 - 800723e: 46bd mov sp, r7 - 8007240: bd80 pop {r7, pc} - 8007242: bf00 nop - 8007244: 080166ac .word 0x080166ac - 8007248: 08016948 .word 0x08016948 - 800724c: 080166f0 .word 0x080166f0 - 8007250: 08016960 .word 0x08016960 - -08007254 : - * - * Automatically called from tcp_tmr(). - */ -void -tcp_slowtmr(void) -{ - 8007254: b5b0 push {r4, r5, r7, lr} - 8007256: b090 sub sp, #64 ; 0x40 - 8007258: af04 add r7, sp, #16 - tcpwnd_size_t eff_wnd; - u8_t pcb_remove; /* flag if a PCB should be removed */ - u8_t pcb_reset; /* flag if a RST should be sent when removing */ - err_t err; - - err = ERR_OK; - 800725a: 2300 movs r3, #0 - 800725c: f887 3025 strb.w r3, [r7, #37] ; 0x25 - - ++tcp_ticks; - 8007260: 4b94 ldr r3, [pc, #592] ; (80074b4 ) - 8007262: 681b ldr r3, [r3, #0] - 8007264: 3301 adds r3, #1 - 8007266: 4a93 ldr r2, [pc, #588] ; (80074b4 ) - 8007268: 6013 str r3, [r2, #0] - ++tcp_timer_ctr; - 800726a: 4b93 ldr r3, [pc, #588] ; (80074b8 ) - 800726c: 781b ldrb r3, [r3, #0] - 800726e: 3301 adds r3, #1 - 8007270: b2da uxtb r2, r3 - 8007272: 4b91 ldr r3, [pc, #580] ; (80074b8 ) - 8007274: 701a strb r2, [r3, #0] - -tcp_slowtmr_start: - /* Steps through all of the active PCBs. */ - prev = NULL; - 8007276: 2300 movs r3, #0 - 8007278: 62bb str r3, [r7, #40] ; 0x28 - pcb = tcp_active_pcbs; - 800727a: 4b90 ldr r3, [pc, #576] ; (80074bc ) - 800727c: 681b ldr r3, [r3, #0] - 800727e: 62fb str r3, [r7, #44] ; 0x2c - if (pcb == NULL) { - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: no active pcbs\n")); - } - while (pcb != NULL) { - 8007280: e29f b.n 80077c2 - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: processing active pcb\n")); - LWIP_ASSERT("tcp_slowtmr: active pcb->state != CLOSED\n", pcb->state != CLOSED); - 8007282: 6afb ldr r3, [r7, #44] ; 0x2c - 8007284: 7d1b ldrb r3, [r3, #20] - 8007286: 2b00 cmp r3, #0 - 8007288: d106 bne.n 8007298 - 800728a: 4b8d ldr r3, [pc, #564] ; (80074c0 ) - 800728c: f240 42be movw r2, #1214 ; 0x4be - 8007290: 498c ldr r1, [pc, #560] ; (80074c4 ) - 8007292: 488d ldr r0, [pc, #564] ; (80074c8 ) - 8007294: f009 ff08 bl 80110a8 - LWIP_ASSERT("tcp_slowtmr: active pcb->state != LISTEN\n", pcb->state != LISTEN); - 8007298: 6afb ldr r3, [r7, #44] ; 0x2c - 800729a: 7d1b ldrb r3, [r3, #20] - 800729c: 2b01 cmp r3, #1 - 800729e: d106 bne.n 80072ae - 80072a0: 4b87 ldr r3, [pc, #540] ; (80074c0 ) - 80072a2: f240 42bf movw r2, #1215 ; 0x4bf - 80072a6: 4989 ldr r1, [pc, #548] ; (80074cc ) - 80072a8: 4887 ldr r0, [pc, #540] ; (80074c8 ) - 80072aa: f009 fefd bl 80110a8 - LWIP_ASSERT("tcp_slowtmr: active pcb->state != TIME-WAIT\n", pcb->state != TIME_WAIT); - 80072ae: 6afb ldr r3, [r7, #44] ; 0x2c - 80072b0: 7d1b ldrb r3, [r3, #20] - 80072b2: 2b0a cmp r3, #10 - 80072b4: d106 bne.n 80072c4 - 80072b6: 4b82 ldr r3, [pc, #520] ; (80074c0 ) - 80072b8: f44f 6298 mov.w r2, #1216 ; 0x4c0 - 80072bc: 4984 ldr r1, [pc, #528] ; (80074d0 ) - 80072be: 4882 ldr r0, [pc, #520] ; (80074c8 ) - 80072c0: f009 fef2 bl 80110a8 - if (pcb->last_timer == tcp_timer_ctr) { - 80072c4: 6afb ldr r3, [r7, #44] ; 0x2c - 80072c6: 7f9a ldrb r2, [r3, #30] - 80072c8: 4b7b ldr r3, [pc, #492] ; (80074b8 ) - 80072ca: 781b ldrb r3, [r3, #0] - 80072cc: 429a cmp r2, r3 - 80072ce: d105 bne.n 80072dc - /* skip this pcb, we have already processed it */ - prev = pcb; - 80072d0: 6afb ldr r3, [r7, #44] ; 0x2c - 80072d2: 62bb str r3, [r7, #40] ; 0x28 - pcb = pcb->next; - 80072d4: 6afb ldr r3, [r7, #44] ; 0x2c - 80072d6: 68db ldr r3, [r3, #12] - 80072d8: 62fb str r3, [r7, #44] ; 0x2c - continue; - 80072da: e272 b.n 80077c2 - } - pcb->last_timer = tcp_timer_ctr; - 80072dc: 4b76 ldr r3, [pc, #472] ; (80074b8 ) - 80072de: 781a ldrb r2, [r3, #0] - 80072e0: 6afb ldr r3, [r7, #44] ; 0x2c - 80072e2: 779a strb r2, [r3, #30] - - pcb_remove = 0; - 80072e4: 2300 movs r3, #0 - 80072e6: f887 3027 strb.w r3, [r7, #39] ; 0x27 - pcb_reset = 0; - 80072ea: 2300 movs r3, #0 - 80072ec: f887 3026 strb.w r3, [r7, #38] ; 0x26 - - if (pcb->state == SYN_SENT && pcb->nrtx >= TCP_SYNMAXRTX) { - 80072f0: 6afb ldr r3, [r7, #44] ; 0x2c - 80072f2: 7d1b ldrb r3, [r3, #20] - 80072f4: 2b02 cmp r3, #2 - 80072f6: d10a bne.n 800730e - 80072f8: 6afb ldr r3, [r7, #44] ; 0x2c - 80072fa: f893 3042 ldrb.w r3, [r3, #66] ; 0x42 - 80072fe: 2b05 cmp r3, #5 - 8007300: d905 bls.n 800730e - ++pcb_remove; - 8007302: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 8007306: 3301 adds r3, #1 - 8007308: f887 3027 strb.w r3, [r7, #39] ; 0x27 - 800730c: e11e b.n 800754c - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max SYN retries reached\n")); - } else if (pcb->nrtx >= TCP_MAXRTX) { - 800730e: 6afb ldr r3, [r7, #44] ; 0x2c - 8007310: f893 3042 ldrb.w r3, [r3, #66] ; 0x42 - 8007314: 2b0b cmp r3, #11 - 8007316: d905 bls.n 8007324 - ++pcb_remove; - 8007318: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800731c: 3301 adds r3, #1 - 800731e: f887 3027 strb.w r3, [r7, #39] ; 0x27 - 8007322: e113 b.n 800754c - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max DATA retries reached\n")); - } else { - if (pcb->persist_backoff > 0) { - 8007324: 6afb ldr r3, [r7, #44] ; 0x2c - 8007326: f893 3099 ldrb.w r3, [r3, #153] ; 0x99 - 800732a: 2b00 cmp r3, #0 - 800732c: d075 beq.n 800741a - LWIP_ASSERT("tcp_slowtimr: persist ticking with in-flight data", pcb->unacked == NULL); - 800732e: 6afb ldr r3, [r7, #44] ; 0x2c - 8007330: 6f1b ldr r3, [r3, #112] ; 0x70 - 8007332: 2b00 cmp r3, #0 - 8007334: d006 beq.n 8007344 - 8007336: 4b62 ldr r3, [pc, #392] ; (80074c0 ) - 8007338: f240 42d4 movw r2, #1236 ; 0x4d4 - 800733c: 4965 ldr r1, [pc, #404] ; (80074d4 ) - 800733e: 4862 ldr r0, [pc, #392] ; (80074c8 ) - 8007340: f009 feb2 bl 80110a8 - LWIP_ASSERT("tcp_slowtimr: persist ticking with empty send buffer", pcb->unsent != NULL); - 8007344: 6afb ldr r3, [r7, #44] ; 0x2c - 8007346: 6edb ldr r3, [r3, #108] ; 0x6c - 8007348: 2b00 cmp r3, #0 - 800734a: d106 bne.n 800735a - 800734c: 4b5c ldr r3, [pc, #368] ; (80074c0 ) - 800734e: f240 42d5 movw r2, #1237 ; 0x4d5 - 8007352: 4961 ldr r1, [pc, #388] ; (80074d8 ) - 8007354: 485c ldr r0, [pc, #368] ; (80074c8 ) - 8007356: f009 fea7 bl 80110a8 - if (pcb->persist_probe >= TCP_MAXRTX) { - 800735a: 6afb ldr r3, [r7, #44] ; 0x2c - 800735c: f893 309a ldrb.w r3, [r3, #154] ; 0x9a - 8007360: 2b0b cmp r3, #11 - 8007362: d905 bls.n 8007370 - ++pcb_remove; /* max probes reached */ - 8007364: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 8007368: 3301 adds r3, #1 - 800736a: f887 3027 strb.w r3, [r7, #39] ; 0x27 - 800736e: e0ed b.n 800754c - } else { - u8_t backoff_cnt = tcp_persist_backoff[pcb->persist_backoff - 1]; - 8007370: 6afb ldr r3, [r7, #44] ; 0x2c - 8007372: f893 3099 ldrb.w r3, [r3, #153] ; 0x99 - 8007376: 3b01 subs r3, #1 - 8007378: 4a58 ldr r2, [pc, #352] ; (80074dc ) - 800737a: 5cd3 ldrb r3, [r2, r3] - 800737c: 747b strb r3, [r7, #17] - if (pcb->persist_cnt < backoff_cnt) { - 800737e: 6afb ldr r3, [r7, #44] ; 0x2c - 8007380: f893 3098 ldrb.w r3, [r3, #152] ; 0x98 - 8007384: 7c7a ldrb r2, [r7, #17] - 8007386: 429a cmp r2, r3 - 8007388: d907 bls.n 800739a - pcb->persist_cnt++; - 800738a: 6afb ldr r3, [r7, #44] ; 0x2c - 800738c: f893 3098 ldrb.w r3, [r3, #152] ; 0x98 - 8007390: 3301 adds r3, #1 - 8007392: b2da uxtb r2, r3 - 8007394: 6afb ldr r3, [r7, #44] ; 0x2c - 8007396: f883 2098 strb.w r2, [r3, #152] ; 0x98 - } - if (pcb->persist_cnt >= backoff_cnt) { - 800739a: 6afb ldr r3, [r7, #44] ; 0x2c - 800739c: f893 3098 ldrb.w r3, [r3, #152] ; 0x98 - 80073a0: 7c7a ldrb r2, [r7, #17] - 80073a2: 429a cmp r2, r3 - 80073a4: f200 80d2 bhi.w 800754c - int next_slot = 1; /* increment timer to next slot */ - 80073a8: 2301 movs r3, #1 - 80073aa: 623b str r3, [r7, #32] - /* If snd_wnd is zero, send 1 byte probes */ - if (pcb->snd_wnd == 0) { - 80073ac: 6afb ldr r3, [r7, #44] ; 0x2c - 80073ae: f8b3 3060 ldrh.w r3, [r3, #96] ; 0x60 - 80073b2: 2b00 cmp r3, #0 - 80073b4: d108 bne.n 80073c8 - if (tcp_zero_window_probe(pcb) != ERR_OK) { - 80073b6: 6af8 ldr r0, [r7, #44] ; 0x2c - 80073b8: f004 fc2a bl 800bc10 - 80073bc: 4603 mov r3, r0 - 80073be: 2b00 cmp r3, #0 - 80073c0: d014 beq.n 80073ec - next_slot = 0; /* try probe again with current slot */ - 80073c2: 2300 movs r3, #0 - 80073c4: 623b str r3, [r7, #32] - 80073c6: e011 b.n 80073ec - } - /* snd_wnd not fully closed, split unsent head and fill window */ - } else { - if (tcp_split_unsent_seg(pcb, (u16_t)pcb->snd_wnd) == ERR_OK) { - 80073c8: 6afb ldr r3, [r7, #44] ; 0x2c - 80073ca: f8b3 3060 ldrh.w r3, [r3, #96] ; 0x60 - 80073ce: 4619 mov r1, r3 - 80073d0: 6af8 ldr r0, [r7, #44] ; 0x2c - 80073d2: f003 faef bl 800a9b4 - 80073d6: 4603 mov r3, r0 - 80073d8: 2b00 cmp r3, #0 - 80073da: d107 bne.n 80073ec - if (tcp_output(pcb) == ERR_OK) { - 80073dc: 6af8 ldr r0, [r7, #44] ; 0x2c - 80073de: f003 fd6f bl 800aec0 - 80073e2: 4603 mov r3, r0 - 80073e4: 2b00 cmp r3, #0 - 80073e6: d101 bne.n 80073ec - /* sending will cancel persist timer, else retry with current slot */ - next_slot = 0; - 80073e8: 2300 movs r3, #0 - 80073ea: 623b str r3, [r7, #32] - } - } - } - if (next_slot) { - 80073ec: 6a3b ldr r3, [r7, #32] - 80073ee: 2b00 cmp r3, #0 - 80073f0: f000 80ac beq.w 800754c - pcb->persist_cnt = 0; - 80073f4: 6afb ldr r3, [r7, #44] ; 0x2c - 80073f6: 2200 movs r2, #0 - 80073f8: f883 2098 strb.w r2, [r3, #152] ; 0x98 - if (pcb->persist_backoff < sizeof(tcp_persist_backoff)) { - 80073fc: 6afb ldr r3, [r7, #44] ; 0x2c - 80073fe: f893 3099 ldrb.w r3, [r3, #153] ; 0x99 - 8007402: 2b06 cmp r3, #6 - 8007404: f200 80a2 bhi.w 800754c - pcb->persist_backoff++; - 8007408: 6afb ldr r3, [r7, #44] ; 0x2c - 800740a: f893 3099 ldrb.w r3, [r3, #153] ; 0x99 - 800740e: 3301 adds r3, #1 - 8007410: b2da uxtb r2, r3 - 8007412: 6afb ldr r3, [r7, #44] ; 0x2c - 8007414: f883 2099 strb.w r2, [r3, #153] ; 0x99 - 8007418: e098 b.n 800754c - } - } - } - } else { - /* Increase the retransmission timer if it is running */ - if ((pcb->rtime >= 0) && (pcb->rtime < 0x7FFF)) { - 800741a: 6afb ldr r3, [r7, #44] ; 0x2c - 800741c: f9b3 3030 ldrsh.w r3, [r3, #48] ; 0x30 - 8007420: 2b00 cmp r3, #0 - 8007422: db0f blt.n 8007444 - 8007424: 6afb ldr r3, [r7, #44] ; 0x2c - 8007426: f9b3 3030 ldrsh.w r3, [r3, #48] ; 0x30 - 800742a: f647 72ff movw r2, #32767 ; 0x7fff - 800742e: 4293 cmp r3, r2 - 8007430: d008 beq.n 8007444 - ++pcb->rtime; - 8007432: 6afb ldr r3, [r7, #44] ; 0x2c - 8007434: f9b3 3030 ldrsh.w r3, [r3, #48] ; 0x30 - 8007438: b29b uxth r3, r3 - 800743a: 3301 adds r3, #1 - 800743c: b29b uxth r3, r3 - 800743e: b21a sxth r2, r3 - 8007440: 6afb ldr r3, [r7, #44] ; 0x2c - 8007442: 861a strh r2, [r3, #48] ; 0x30 - } - - if (pcb->rtime >= pcb->rto) { - 8007444: 6afb ldr r3, [r7, #44] ; 0x2c - 8007446: f9b3 2030 ldrsh.w r2, [r3, #48] ; 0x30 - 800744a: 6afb ldr r3, [r7, #44] ; 0x2c - 800744c: f9b3 3040 ldrsh.w r3, [r3, #64] ; 0x40 - 8007450: 429a cmp r2, r3 - 8007452: db7b blt.n 800754c - " pcb->rto %"S16_F"\n", - pcb->rtime, pcb->rto)); - /* If prepare phase fails but we have unsent data but no unacked data, - still execute the backoff calculations below, as this means we somehow - failed to send segment. */ - if ((tcp_rexmit_rto_prepare(pcb) == ERR_OK) || ((pcb->unacked == NULL) && (pcb->unsent != NULL))) { - 8007454: 6af8 ldr r0, [r7, #44] ; 0x2c - 8007456: f004 f825 bl 800b4a4 - 800745a: 4603 mov r3, r0 - 800745c: 2b00 cmp r3, #0 - 800745e: d007 beq.n 8007470 - 8007460: 6afb ldr r3, [r7, #44] ; 0x2c - 8007462: 6f1b ldr r3, [r3, #112] ; 0x70 - 8007464: 2b00 cmp r3, #0 - 8007466: d171 bne.n 800754c - 8007468: 6afb ldr r3, [r7, #44] ; 0x2c - 800746a: 6edb ldr r3, [r3, #108] ; 0x6c - 800746c: 2b00 cmp r3, #0 - 800746e: d06d beq.n 800754c - /* Double retransmission time-out unless we are trying to - * connect to somebody (i.e., we are in SYN_SENT). */ - if (pcb->state != SYN_SENT) { - 8007470: 6afb ldr r3, [r7, #44] ; 0x2c - 8007472: 7d1b ldrb r3, [r3, #20] - 8007474: 2b02 cmp r3, #2 - 8007476: d03a beq.n 80074ee - u8_t backoff_idx = LWIP_MIN(pcb->nrtx, sizeof(tcp_backoff) - 1); - 8007478: 6afb ldr r3, [r7, #44] ; 0x2c - 800747a: f893 3042 ldrb.w r3, [r3, #66] ; 0x42 - 800747e: 2b0c cmp r3, #12 - 8007480: bf28 it cs - 8007482: 230c movcs r3, #12 - 8007484: 76fb strb r3, [r7, #27] - int calc_rto = ((pcb->sa >> 3) + pcb->sv) << tcp_backoff[backoff_idx]; - 8007486: 6afb ldr r3, [r7, #44] ; 0x2c - 8007488: f9b3 303c ldrsh.w r3, [r3, #60] ; 0x3c - 800748c: 10db asrs r3, r3, #3 - 800748e: b21b sxth r3, r3 - 8007490: 461a mov r2, r3 - 8007492: 6afb ldr r3, [r7, #44] ; 0x2c - 8007494: f9b3 303e ldrsh.w r3, [r3, #62] ; 0x3e - 8007498: 4413 add r3, r2 - 800749a: 7efa ldrb r2, [r7, #27] - 800749c: 4910 ldr r1, [pc, #64] ; (80074e0 ) - 800749e: 5c8a ldrb r2, [r1, r2] - 80074a0: 4093 lsls r3, r2 - 80074a2: 617b str r3, [r7, #20] - pcb->rto = (s16_t)LWIP_MIN(calc_rto, 0x7FFF); - 80074a4: 697b ldr r3, [r7, #20] - 80074a6: f647 72fe movw r2, #32766 ; 0x7ffe - 80074aa: 4293 cmp r3, r2 - 80074ac: dc1a bgt.n 80074e4 - 80074ae: 697b ldr r3, [r7, #20] - 80074b0: b21a sxth r2, r3 - 80074b2: e019 b.n 80074e8 - 80074b4: 200099d4 .word 0x200099d4 - 80074b8: 200099ea .word 0x200099ea - 80074bc: 200099e0 .word 0x200099e0 - 80074c0: 080166ac .word 0x080166ac - 80074c4: 080169f0 .word 0x080169f0 - 80074c8: 080166f0 .word 0x080166f0 - 80074cc: 08016a1c .word 0x08016a1c - 80074d0: 08016a48 .word 0x08016a48 - 80074d4: 08016a78 .word 0x08016a78 - 80074d8: 08016aac .word 0x08016aac - 80074dc: 08018a8c .word 0x08018a8c - 80074e0: 08018a7c .word 0x08018a7c - 80074e4: f647 72ff movw r2, #32767 ; 0x7fff - 80074e8: 6afb ldr r3, [r7, #44] ; 0x2c - 80074ea: f8a3 2040 strh.w r2, [r3, #64] ; 0x40 - } - - /* Reset the retransmission timer. */ - pcb->rtime = 0; - 80074ee: 6afb ldr r3, [r7, #44] ; 0x2c - 80074f0: 2200 movs r2, #0 - 80074f2: 861a strh r2, [r3, #48] ; 0x30 - - /* Reduce congestion window and ssthresh. */ - eff_wnd = LWIP_MIN(pcb->cwnd, pcb->snd_wnd); - 80074f4: 6afb ldr r3, [r7, #44] ; 0x2c - 80074f6: f8b3 2060 ldrh.w r2, [r3, #96] ; 0x60 - 80074fa: 6afb ldr r3, [r7, #44] ; 0x2c - 80074fc: f8b3 3048 ldrh.w r3, [r3, #72] ; 0x48 - 8007500: 4293 cmp r3, r2 - 8007502: bf28 it cs - 8007504: 4613 movcs r3, r2 - 8007506: 827b strh r3, [r7, #18] - pcb->ssthresh = eff_wnd >> 1; - 8007508: 8a7b ldrh r3, [r7, #18] - 800750a: 085b lsrs r3, r3, #1 - 800750c: b29a uxth r2, r3 - 800750e: 6afb ldr r3, [r7, #44] ; 0x2c - 8007510: f8a3 204a strh.w r2, [r3, #74] ; 0x4a - if (pcb->ssthresh < (tcpwnd_size_t)(pcb->mss << 1)) { - 8007514: 6afb ldr r3, [r7, #44] ; 0x2c - 8007516: f8b3 204a ldrh.w r2, [r3, #74] ; 0x4a - 800751a: 6afb ldr r3, [r7, #44] ; 0x2c - 800751c: 8e5b ldrh r3, [r3, #50] ; 0x32 - 800751e: 005b lsls r3, r3, #1 - 8007520: b29b uxth r3, r3 - 8007522: 429a cmp r2, r3 - 8007524: d206 bcs.n 8007534 - pcb->ssthresh = (tcpwnd_size_t)(pcb->mss << 1); - 8007526: 6afb ldr r3, [r7, #44] ; 0x2c - 8007528: 8e5b ldrh r3, [r3, #50] ; 0x32 - 800752a: 005b lsls r3, r3, #1 - 800752c: b29a uxth r2, r3 - 800752e: 6afb ldr r3, [r7, #44] ; 0x2c - 8007530: f8a3 204a strh.w r2, [r3, #74] ; 0x4a - } - pcb->cwnd = pcb->mss; - 8007534: 6afb ldr r3, [r7, #44] ; 0x2c - 8007536: 8e5a ldrh r2, [r3, #50] ; 0x32 - 8007538: 6afb ldr r3, [r7, #44] ; 0x2c - 800753a: f8a3 2048 strh.w r2, [r3, #72] ; 0x48 - LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_slowtmr: cwnd %"TCPWNDSIZE_F - " ssthresh %"TCPWNDSIZE_F"\n", - pcb->cwnd, pcb->ssthresh)); - pcb->bytes_acked = 0; - 800753e: 6afb ldr r3, [r7, #44] ; 0x2c - 8007540: 2200 movs r2, #0 - 8007542: f8a3 206a strh.w r2, [r3, #106] ; 0x6a - - /* The following needs to be called AFTER cwnd is set to one - mss - STJ */ - tcp_rexmit_rto_commit(pcb); - 8007546: 6af8 ldr r0, [r7, #44] ; 0x2c - 8007548: f004 f81c bl 800b584 - } - } - } - } - /* Check if this PCB has stayed too long in FIN-WAIT-2 */ - if (pcb->state == FIN_WAIT_2) { - 800754c: 6afb ldr r3, [r7, #44] ; 0x2c - 800754e: 7d1b ldrb r3, [r3, #20] - 8007550: 2b06 cmp r3, #6 - 8007552: d111 bne.n 8007578 - /* If this PCB is in FIN_WAIT_2 because of SHUT_WR don't let it time out. */ - if (pcb->flags & TF_RXCLOSED) { - 8007554: 6afb ldr r3, [r7, #44] ; 0x2c - 8007556: 8b5b ldrh r3, [r3, #26] - 8007558: f003 0310 and.w r3, r3, #16 - 800755c: 2b00 cmp r3, #0 - 800755e: d00b beq.n 8007578 - /* PCB was fully closed (either through close() or SHUT_RDWR): - normal FIN-WAIT timeout handling. */ - if ((u32_t)(tcp_ticks - pcb->tmr) > - 8007560: 4b9d ldr r3, [pc, #628] ; (80077d8 ) - 8007562: 681a ldr r2, [r3, #0] - 8007564: 6afb ldr r3, [r7, #44] ; 0x2c - 8007566: 6a1b ldr r3, [r3, #32] - 8007568: 1ad3 subs r3, r2, r3 - 800756a: 2b28 cmp r3, #40 ; 0x28 - 800756c: d904 bls.n 8007578 - TCP_FIN_WAIT_TIMEOUT / TCP_SLOW_INTERVAL) { - ++pcb_remove; - 800756e: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 8007572: 3301 adds r3, #1 - 8007574: f887 3027 strb.w r3, [r7, #39] ; 0x27 - } - } - } - - /* Check if KEEPALIVE should be sent */ - if (ip_get_option(pcb, SOF_KEEPALIVE) && - 8007578: 6afb ldr r3, [r7, #44] ; 0x2c - 800757a: 7a5b ldrb r3, [r3, #9] - 800757c: f003 0308 and.w r3, r3, #8 - 8007580: 2b00 cmp r3, #0 - 8007582: d04c beq.n 800761e - ((pcb->state == ESTABLISHED) || - 8007584: 6afb ldr r3, [r7, #44] ; 0x2c - 8007586: 7d1b ldrb r3, [r3, #20] - if (ip_get_option(pcb, SOF_KEEPALIVE) && - 8007588: 2b04 cmp r3, #4 - 800758a: d003 beq.n 8007594 - (pcb->state == CLOSE_WAIT))) { - 800758c: 6afb ldr r3, [r7, #44] ; 0x2c - 800758e: 7d1b ldrb r3, [r3, #20] - ((pcb->state == ESTABLISHED) || - 8007590: 2b07 cmp r3, #7 - 8007592: d144 bne.n 800761e - if ((u32_t)(tcp_ticks - pcb->tmr) > - 8007594: 4b90 ldr r3, [pc, #576] ; (80077d8 ) - 8007596: 681a ldr r2, [r3, #0] - 8007598: 6afb ldr r3, [r7, #44] ; 0x2c - 800759a: 6a1b ldr r3, [r3, #32] - 800759c: 1ad2 subs r2, r2, r3 - (pcb->keep_idle + TCP_KEEP_DUR(pcb)) / TCP_SLOW_INTERVAL) { - 800759e: 6afb ldr r3, [r7, #44] ; 0x2c - 80075a0: f8d3 3094 ldr.w r3, [r3, #148] ; 0x94 - 80075a4: f503 2324 add.w r3, r3, #671744 ; 0xa4000 - 80075a8: f603 43b8 addw r3, r3, #3256 ; 0xcb8 - 80075ac: 498b ldr r1, [pc, #556] ; (80077dc ) - 80075ae: fba1 1303 umull r1, r3, r1, r3 - 80075b2: 095b lsrs r3, r3, #5 - if ((u32_t)(tcp_ticks - pcb->tmr) > - 80075b4: 429a cmp r2, r3 - 80075b6: d90a bls.n 80075ce - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: KEEPALIVE timeout. Aborting connection to ")); - ip_addr_debug_print_val(TCP_DEBUG, pcb->remote_ip); - LWIP_DEBUGF(TCP_DEBUG, ("\n")); - - ++pcb_remove; - 80075b8: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 80075bc: 3301 adds r3, #1 - 80075be: f887 3027 strb.w r3, [r7, #39] ; 0x27 - ++pcb_reset; - 80075c2: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 - 80075c6: 3301 adds r3, #1 - 80075c8: f887 3026 strb.w r3, [r7, #38] ; 0x26 - 80075cc: e027 b.n 800761e - } else if ((u32_t)(tcp_ticks - pcb->tmr) > - 80075ce: 4b82 ldr r3, [pc, #520] ; (80077d8 ) - 80075d0: 681a ldr r2, [r3, #0] - 80075d2: 6afb ldr r3, [r7, #44] ; 0x2c - 80075d4: 6a1b ldr r3, [r3, #32] - 80075d6: 1ad2 subs r2, r2, r3 - (pcb->keep_idle + pcb->keep_cnt_sent * TCP_KEEP_INTVL(pcb)) - 80075d8: 6afb ldr r3, [r7, #44] ; 0x2c - 80075da: f8d3 1094 ldr.w r1, [r3, #148] ; 0x94 - 80075de: 6afb ldr r3, [r7, #44] ; 0x2c - 80075e0: f893 309b ldrb.w r3, [r3, #155] ; 0x9b - 80075e4: 4618 mov r0, r3 - 80075e6: 4b7e ldr r3, [pc, #504] ; (80077e0 ) - 80075e8: fb00 f303 mul.w r3, r0, r3 - 80075ec: 440b add r3, r1 - / TCP_SLOW_INTERVAL) { - 80075ee: 497b ldr r1, [pc, #492] ; (80077dc ) - 80075f0: fba1 1303 umull r1, r3, r1, r3 - 80075f4: 095b lsrs r3, r3, #5 - } else if ((u32_t)(tcp_ticks - pcb->tmr) > - 80075f6: 429a cmp r2, r3 - 80075f8: d911 bls.n 800761e - err = tcp_keepalive(pcb); - 80075fa: 6af8 ldr r0, [r7, #44] ; 0x2c - 80075fc: f004 fac8 bl 800bb90 - 8007600: 4603 mov r3, r0 - 8007602: f887 3025 strb.w r3, [r7, #37] ; 0x25 - if (err == ERR_OK) { - 8007606: f997 3025 ldrsb.w r3, [r7, #37] ; 0x25 - 800760a: 2b00 cmp r3, #0 - 800760c: d107 bne.n 800761e - pcb->keep_cnt_sent++; - 800760e: 6afb ldr r3, [r7, #44] ; 0x2c - 8007610: f893 309b ldrb.w r3, [r3, #155] ; 0x9b - 8007614: 3301 adds r3, #1 - 8007616: b2da uxtb r2, r3 - 8007618: 6afb ldr r3, [r7, #44] ; 0x2c - 800761a: f883 209b strb.w r2, [r3, #155] ; 0x9b - - /* If this PCB has queued out of sequence data, but has been - inactive for too long, will drop the data (it will eventually - be retransmitted). */ -#if TCP_QUEUE_OOSEQ - if (pcb->ooseq != NULL && - 800761e: 6afb ldr r3, [r7, #44] ; 0x2c - 8007620: 6f5b ldr r3, [r3, #116] ; 0x74 - 8007622: 2b00 cmp r3, #0 - 8007624: d011 beq.n 800764a - (tcp_ticks - pcb->tmr >= (u32_t)pcb->rto * TCP_OOSEQ_TIMEOUT)) { - 8007626: 4b6c ldr r3, [pc, #432] ; (80077d8 ) - 8007628: 681a ldr r2, [r3, #0] - 800762a: 6afb ldr r3, [r7, #44] ; 0x2c - 800762c: 6a1b ldr r3, [r3, #32] - 800762e: 1ad2 subs r2, r2, r3 - 8007630: 6afb ldr r3, [r7, #44] ; 0x2c - 8007632: f9b3 3040 ldrsh.w r3, [r3, #64] ; 0x40 - 8007636: 4619 mov r1, r3 - 8007638: 460b mov r3, r1 - 800763a: 005b lsls r3, r3, #1 - 800763c: 440b add r3, r1 - 800763e: 005b lsls r3, r3, #1 - if (pcb->ooseq != NULL && - 8007640: 429a cmp r2, r3 - 8007642: d302 bcc.n 800764a - LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_slowtmr: dropping OOSEQ queued data\n")); - tcp_free_ooseq(pcb); - 8007644: 6af8 ldr r0, [r7, #44] ; 0x2c - 8007646: f000 fddb bl 8008200 - } -#endif /* TCP_QUEUE_OOSEQ */ - - /* Check if this PCB has stayed too long in SYN-RCVD */ - if (pcb->state == SYN_RCVD) { - 800764a: 6afb ldr r3, [r7, #44] ; 0x2c - 800764c: 7d1b ldrb r3, [r3, #20] - 800764e: 2b03 cmp r3, #3 - 8007650: d10b bne.n 800766a - if ((u32_t)(tcp_ticks - pcb->tmr) > - 8007652: 4b61 ldr r3, [pc, #388] ; (80077d8 ) - 8007654: 681a ldr r2, [r3, #0] - 8007656: 6afb ldr r3, [r7, #44] ; 0x2c - 8007658: 6a1b ldr r3, [r3, #32] - 800765a: 1ad3 subs r3, r2, r3 - 800765c: 2b28 cmp r3, #40 ; 0x28 - 800765e: d904 bls.n 800766a - TCP_SYN_RCVD_TIMEOUT / TCP_SLOW_INTERVAL) { - ++pcb_remove; - 8007660: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 8007664: 3301 adds r3, #1 - 8007666: f887 3027 strb.w r3, [r7, #39] ; 0x27 - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in SYN-RCVD\n")); - } - } - - /* Check if this PCB has stayed too long in LAST-ACK */ - if (pcb->state == LAST_ACK) { - 800766a: 6afb ldr r3, [r7, #44] ; 0x2c - 800766c: 7d1b ldrb r3, [r3, #20] - 800766e: 2b09 cmp r3, #9 - 8007670: d10b bne.n 800768a - if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { - 8007672: 4b59 ldr r3, [pc, #356] ; (80077d8 ) - 8007674: 681a ldr r2, [r3, #0] - 8007676: 6afb ldr r3, [r7, #44] ; 0x2c - 8007678: 6a1b ldr r3, [r3, #32] - 800767a: 1ad3 subs r3, r2, r3 - 800767c: 2bf0 cmp r3, #240 ; 0xf0 - 800767e: d904 bls.n 800768a - ++pcb_remove; - 8007680: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 8007684: 3301 adds r3, #1 - 8007686: f887 3027 strb.w r3, [r7, #39] ; 0x27 - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in LAST-ACK\n")); - } - } - - /* If the PCB should be removed, do it. */ - if (pcb_remove) { - 800768a: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800768e: 2b00 cmp r3, #0 - 8007690: d060 beq.n 8007754 - struct tcp_pcb *pcb2; -#if LWIP_CALLBACK_API - tcp_err_fn err_fn = pcb->errf; - 8007692: 6afb ldr r3, [r7, #44] ; 0x2c - 8007694: f8d3 3090 ldr.w r3, [r3, #144] ; 0x90 - 8007698: 60fb str r3, [r7, #12] -#endif /* LWIP_CALLBACK_API */ - void *err_arg; - enum tcp_state last_state; - tcp_pcb_purge(pcb); - 800769a: 6af8 ldr r0, [r7, #44] ; 0x2c - 800769c: f000 fbfc bl 8007e98 - /* Remove PCB from tcp_active_pcbs list. */ - if (prev != NULL) { - 80076a0: 6abb ldr r3, [r7, #40] ; 0x28 - 80076a2: 2b00 cmp r3, #0 - 80076a4: d010 beq.n 80076c8 - LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_active_pcbs", pcb != tcp_active_pcbs); - 80076a6: 4b4f ldr r3, [pc, #316] ; (80077e4 ) - 80076a8: 681b ldr r3, [r3, #0] - 80076aa: 6afa ldr r2, [r7, #44] ; 0x2c - 80076ac: 429a cmp r2, r3 - 80076ae: d106 bne.n 80076be - 80076b0: 4b4d ldr r3, [pc, #308] ; (80077e8 ) - 80076b2: f240 526d movw r2, #1389 ; 0x56d - 80076b6: 494d ldr r1, [pc, #308] ; (80077ec ) - 80076b8: 484d ldr r0, [pc, #308] ; (80077f0 ) - 80076ba: f009 fcf5 bl 80110a8 - prev->next = pcb->next; - 80076be: 6afb ldr r3, [r7, #44] ; 0x2c - 80076c0: 68da ldr r2, [r3, #12] - 80076c2: 6abb ldr r3, [r7, #40] ; 0x28 - 80076c4: 60da str r2, [r3, #12] - 80076c6: e00f b.n 80076e8 - } else { - /* This PCB was the first. */ - LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_active_pcbs", tcp_active_pcbs == pcb); - 80076c8: 4b46 ldr r3, [pc, #280] ; (80077e4 ) - 80076ca: 681b ldr r3, [r3, #0] - 80076cc: 6afa ldr r2, [r7, #44] ; 0x2c - 80076ce: 429a cmp r2, r3 - 80076d0: d006 beq.n 80076e0 - 80076d2: 4b45 ldr r3, [pc, #276] ; (80077e8 ) - 80076d4: f240 5271 movw r2, #1393 ; 0x571 - 80076d8: 4946 ldr r1, [pc, #280] ; (80077f4 ) - 80076da: 4845 ldr r0, [pc, #276] ; (80077f0 ) - 80076dc: f009 fce4 bl 80110a8 - tcp_active_pcbs = pcb->next; - 80076e0: 6afb ldr r3, [r7, #44] ; 0x2c - 80076e2: 68db ldr r3, [r3, #12] - 80076e4: 4a3f ldr r2, [pc, #252] ; (80077e4 ) - 80076e6: 6013 str r3, [r2, #0] - } - - if (pcb_reset) { - 80076e8: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 - 80076ec: 2b00 cmp r3, #0 - 80076ee: d013 beq.n 8007718 - tcp_rst(pcb, pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip, - 80076f0: 6afb ldr r3, [r7, #44] ; 0x2c - 80076f2: 6d18 ldr r0, [r3, #80] ; 0x50 - 80076f4: 6afb ldr r3, [r7, #44] ; 0x2c - 80076f6: 6a5c ldr r4, [r3, #36] ; 0x24 - 80076f8: 6afd ldr r5, [r7, #44] ; 0x2c - 80076fa: 6afb ldr r3, [r7, #44] ; 0x2c - 80076fc: 3304 adds r3, #4 - 80076fe: 6afa ldr r2, [r7, #44] ; 0x2c - 8007700: 8ad2 ldrh r2, [r2, #22] - 8007702: 6af9 ldr r1, [r7, #44] ; 0x2c - 8007704: 8b09 ldrh r1, [r1, #24] - 8007706: 9102 str r1, [sp, #8] - 8007708: 9201 str r2, [sp, #4] - 800770a: 9300 str r3, [sp, #0] - 800770c: 462b mov r3, r5 - 800770e: 4622 mov r2, r4 - 8007710: 4601 mov r1, r0 - 8007712: 6af8 ldr r0, [r7, #44] ; 0x2c - 8007714: f004 f988 bl 800ba28 - pcb->local_port, pcb->remote_port); - } - - err_arg = pcb->callback_arg; - 8007718: 6afb ldr r3, [r7, #44] ; 0x2c - 800771a: 691b ldr r3, [r3, #16] - 800771c: 60bb str r3, [r7, #8] - last_state = pcb->state; - 800771e: 6afb ldr r3, [r7, #44] ; 0x2c - 8007720: 7d1b ldrb r3, [r3, #20] - 8007722: 71fb strb r3, [r7, #7] - pcb2 = pcb; - 8007724: 6afb ldr r3, [r7, #44] ; 0x2c - 8007726: 603b str r3, [r7, #0] - pcb = pcb->next; - 8007728: 6afb ldr r3, [r7, #44] ; 0x2c - 800772a: 68db ldr r3, [r3, #12] - 800772c: 62fb str r3, [r7, #44] ; 0x2c - tcp_free(pcb2); - 800772e: 6838 ldr r0, [r7, #0] - 8007730: f7ff f9f2 bl 8006b18 - - tcp_active_pcbs_changed = 0; - 8007734: 4b30 ldr r3, [pc, #192] ; (80077f8 ) - 8007736: 2200 movs r2, #0 - 8007738: 701a strb r2, [r3, #0] - TCP_EVENT_ERR(last_state, err_fn, err_arg, ERR_ABRT); - 800773a: 68fb ldr r3, [r7, #12] - 800773c: 2b00 cmp r3, #0 - 800773e: d004 beq.n 800774a - 8007740: 68fb ldr r3, [r7, #12] - 8007742: f06f 010c mvn.w r1, #12 - 8007746: 68b8 ldr r0, [r7, #8] - 8007748: 4798 blx r3 - if (tcp_active_pcbs_changed) { - 800774a: 4b2b ldr r3, [pc, #172] ; (80077f8 ) - 800774c: 781b ldrb r3, [r3, #0] - 800774e: 2b00 cmp r3, #0 - 8007750: d037 beq.n 80077c2 - goto tcp_slowtmr_start; - 8007752: e590 b.n 8007276 - } - } else { - /* get the 'next' element now and work with 'prev' below (in case of abort) */ - prev = pcb; - 8007754: 6afb ldr r3, [r7, #44] ; 0x2c - 8007756: 62bb str r3, [r7, #40] ; 0x28 - pcb = pcb->next; - 8007758: 6afb ldr r3, [r7, #44] ; 0x2c - 800775a: 68db ldr r3, [r3, #12] - 800775c: 62fb str r3, [r7, #44] ; 0x2c - - /* We check if we should poll the connection. */ - ++prev->polltmr; - 800775e: 6abb ldr r3, [r7, #40] ; 0x28 - 8007760: 7f1b ldrb r3, [r3, #28] - 8007762: 3301 adds r3, #1 - 8007764: b2da uxtb r2, r3 - 8007766: 6abb ldr r3, [r7, #40] ; 0x28 - 8007768: 771a strb r2, [r3, #28] - if (prev->polltmr >= prev->pollinterval) { - 800776a: 6abb ldr r3, [r7, #40] ; 0x28 - 800776c: 7f1a ldrb r2, [r3, #28] - 800776e: 6abb ldr r3, [r7, #40] ; 0x28 - 8007770: 7f5b ldrb r3, [r3, #29] - 8007772: 429a cmp r2, r3 - 8007774: d325 bcc.n 80077c2 - prev->polltmr = 0; - 8007776: 6abb ldr r3, [r7, #40] ; 0x28 - 8007778: 2200 movs r2, #0 - 800777a: 771a strb r2, [r3, #28] - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: polling application\n")); - tcp_active_pcbs_changed = 0; - 800777c: 4b1e ldr r3, [pc, #120] ; (80077f8 ) - 800777e: 2200 movs r2, #0 - 8007780: 701a strb r2, [r3, #0] - TCP_EVENT_POLL(prev, err); - 8007782: 6abb ldr r3, [r7, #40] ; 0x28 - 8007784: f8d3 308c ldr.w r3, [r3, #140] ; 0x8c - 8007788: 2b00 cmp r3, #0 - 800778a: d00b beq.n 80077a4 - 800778c: 6abb ldr r3, [r7, #40] ; 0x28 - 800778e: f8d3 308c ldr.w r3, [r3, #140] ; 0x8c - 8007792: 6aba ldr r2, [r7, #40] ; 0x28 - 8007794: 6912 ldr r2, [r2, #16] - 8007796: 6ab9 ldr r1, [r7, #40] ; 0x28 - 8007798: 4610 mov r0, r2 - 800779a: 4798 blx r3 - 800779c: 4603 mov r3, r0 - 800779e: f887 3025 strb.w r3, [r7, #37] ; 0x25 - 80077a2: e002 b.n 80077aa - 80077a4: 2300 movs r3, #0 - 80077a6: f887 3025 strb.w r3, [r7, #37] ; 0x25 - if (tcp_active_pcbs_changed) { - 80077aa: 4b13 ldr r3, [pc, #76] ; (80077f8 ) - 80077ac: 781b ldrb r3, [r3, #0] - 80077ae: 2b00 cmp r3, #0 - 80077b0: d000 beq.n 80077b4 - goto tcp_slowtmr_start; - 80077b2: e560 b.n 8007276 - } - /* if err == ERR_ABRT, 'prev' is already deallocated */ - if (err == ERR_OK) { - 80077b4: f997 3025 ldrsb.w r3, [r7, #37] ; 0x25 - 80077b8: 2b00 cmp r3, #0 - 80077ba: d102 bne.n 80077c2 - tcp_output(prev); - 80077bc: 6ab8 ldr r0, [r7, #40] ; 0x28 - 80077be: f003 fb7f bl 800aec0 - while (pcb != NULL) { - 80077c2: 6afb ldr r3, [r7, #44] ; 0x2c - 80077c4: 2b00 cmp r3, #0 - 80077c6: f47f ad5c bne.w 8007282 - } - } - - - /* Steps through all of the TIME-WAIT PCBs. */ - prev = NULL; - 80077ca: 2300 movs r3, #0 - 80077cc: 62bb str r3, [r7, #40] ; 0x28 - pcb = tcp_tw_pcbs; - 80077ce: 4b0b ldr r3, [pc, #44] ; (80077fc ) - 80077d0: 681b ldr r3, [r3, #0] - 80077d2: 62fb str r3, [r7, #44] ; 0x2c - while (pcb != NULL) { - 80077d4: e067 b.n 80078a6 - 80077d6: bf00 nop - 80077d8: 200099d4 .word 0x200099d4 - 80077dc: 10624dd3 .word 0x10624dd3 - 80077e0: 000124f8 .word 0x000124f8 - 80077e4: 200099e0 .word 0x200099e0 - 80077e8: 080166ac .word 0x080166ac - 80077ec: 08016ae4 .word 0x08016ae4 - 80077f0: 080166f0 .word 0x080166f0 - 80077f4: 08016b10 .word 0x08016b10 - 80077f8: 200099e8 .word 0x200099e8 - 80077fc: 200099e4 .word 0x200099e4 - LWIP_ASSERT("tcp_slowtmr: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); - 8007800: 6afb ldr r3, [r7, #44] ; 0x2c - 8007802: 7d1b ldrb r3, [r3, #20] - 8007804: 2b0a cmp r3, #10 - 8007806: d006 beq.n 8007816 - 8007808: 4b2b ldr r3, [pc, #172] ; (80078b8 ) - 800780a: f240 52a1 movw r2, #1441 ; 0x5a1 - 800780e: 492b ldr r1, [pc, #172] ; (80078bc ) - 8007810: 482b ldr r0, [pc, #172] ; (80078c0 ) - 8007812: f009 fc49 bl 80110a8 - pcb_remove = 0; - 8007816: 2300 movs r3, #0 - 8007818: f887 3027 strb.w r3, [r7, #39] ; 0x27 - - /* Check if this PCB has stayed long enough in TIME-WAIT */ - if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { - 800781c: 4b29 ldr r3, [pc, #164] ; (80078c4 ) - 800781e: 681a ldr r2, [r3, #0] - 8007820: 6afb ldr r3, [r7, #44] ; 0x2c - 8007822: 6a1b ldr r3, [r3, #32] - 8007824: 1ad3 subs r3, r2, r3 - 8007826: 2bf0 cmp r3, #240 ; 0xf0 - 8007828: d904 bls.n 8007834 - ++pcb_remove; - 800782a: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800782e: 3301 adds r3, #1 - 8007830: f887 3027 strb.w r3, [r7, #39] ; 0x27 - } - - /* If the PCB should be removed, do it. */ - if (pcb_remove) { - 8007834: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 8007838: 2b00 cmp r3, #0 - 800783a: d02f beq.n 800789c - struct tcp_pcb *pcb2; - tcp_pcb_purge(pcb); - 800783c: 6af8 ldr r0, [r7, #44] ; 0x2c - 800783e: f000 fb2b bl 8007e98 - /* Remove PCB from tcp_tw_pcbs list. */ - if (prev != NULL) { - 8007842: 6abb ldr r3, [r7, #40] ; 0x28 - 8007844: 2b00 cmp r3, #0 - 8007846: d010 beq.n 800786a - LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_tw_pcbs", pcb != tcp_tw_pcbs); - 8007848: 4b1f ldr r3, [pc, #124] ; (80078c8 ) - 800784a: 681b ldr r3, [r3, #0] - 800784c: 6afa ldr r2, [r7, #44] ; 0x2c - 800784e: 429a cmp r2, r3 - 8007850: d106 bne.n 8007860 - 8007852: 4b19 ldr r3, [pc, #100] ; (80078b8 ) - 8007854: f240 52af movw r2, #1455 ; 0x5af - 8007858: 491c ldr r1, [pc, #112] ; (80078cc ) - 800785a: 4819 ldr r0, [pc, #100] ; (80078c0 ) - 800785c: f009 fc24 bl 80110a8 - prev->next = pcb->next; - 8007860: 6afb ldr r3, [r7, #44] ; 0x2c - 8007862: 68da ldr r2, [r3, #12] - 8007864: 6abb ldr r3, [r7, #40] ; 0x28 - 8007866: 60da str r2, [r3, #12] - 8007868: e00f b.n 800788a - } else { - /* This PCB was the first. */ - LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_tw_pcbs", tcp_tw_pcbs == pcb); - 800786a: 4b17 ldr r3, [pc, #92] ; (80078c8 ) - 800786c: 681b ldr r3, [r3, #0] - 800786e: 6afa ldr r2, [r7, #44] ; 0x2c - 8007870: 429a cmp r2, r3 - 8007872: d006 beq.n 8007882 - 8007874: 4b10 ldr r3, [pc, #64] ; (80078b8 ) - 8007876: f240 52b3 movw r2, #1459 ; 0x5b3 - 800787a: 4915 ldr r1, [pc, #84] ; (80078d0 ) - 800787c: 4810 ldr r0, [pc, #64] ; (80078c0 ) - 800787e: f009 fc13 bl 80110a8 - tcp_tw_pcbs = pcb->next; - 8007882: 6afb ldr r3, [r7, #44] ; 0x2c - 8007884: 68db ldr r3, [r3, #12] - 8007886: 4a10 ldr r2, [pc, #64] ; (80078c8 ) - 8007888: 6013 str r3, [r2, #0] - } - pcb2 = pcb; - 800788a: 6afb ldr r3, [r7, #44] ; 0x2c - 800788c: 61fb str r3, [r7, #28] - pcb = pcb->next; - 800788e: 6afb ldr r3, [r7, #44] ; 0x2c - 8007890: 68db ldr r3, [r3, #12] - 8007892: 62fb str r3, [r7, #44] ; 0x2c - tcp_free(pcb2); - 8007894: 69f8 ldr r0, [r7, #28] - 8007896: f7ff f93f bl 8006b18 - 800789a: e004 b.n 80078a6 - } else { - prev = pcb; - 800789c: 6afb ldr r3, [r7, #44] ; 0x2c - 800789e: 62bb str r3, [r7, #40] ; 0x28 - pcb = pcb->next; - 80078a0: 6afb ldr r3, [r7, #44] ; 0x2c - 80078a2: 68db ldr r3, [r3, #12] - 80078a4: 62fb str r3, [r7, #44] ; 0x2c - while (pcb != NULL) { - 80078a6: 6afb ldr r3, [r7, #44] ; 0x2c - 80078a8: 2b00 cmp r3, #0 - 80078aa: d1a9 bne.n 8007800 - } - } -} - 80078ac: bf00 nop - 80078ae: bf00 nop - 80078b0: 3730 adds r7, #48 ; 0x30 - 80078b2: 46bd mov sp, r7 - 80078b4: bdb0 pop {r4, r5, r7, pc} - 80078b6: bf00 nop - 80078b8: 080166ac .word 0x080166ac - 80078bc: 08016b3c .word 0x08016b3c - 80078c0: 080166f0 .word 0x080166f0 - 80078c4: 200099d4 .word 0x200099d4 - 80078c8: 200099e4 .word 0x200099e4 - 80078cc: 08016b6c .word 0x08016b6c - 80078d0: 08016b94 .word 0x08016b94 - -080078d4 : - * - * Automatically called from tcp_tmr(). - */ -void -tcp_fasttmr(void) -{ - 80078d4: b580 push {r7, lr} - 80078d6: b082 sub sp, #8 - 80078d8: af00 add r7, sp, #0 - struct tcp_pcb *pcb; - - ++tcp_timer_ctr; - 80078da: 4b2d ldr r3, [pc, #180] ; (8007990 ) - 80078dc: 781b ldrb r3, [r3, #0] - 80078de: 3301 adds r3, #1 - 80078e0: b2da uxtb r2, r3 - 80078e2: 4b2b ldr r3, [pc, #172] ; (8007990 ) - 80078e4: 701a strb r2, [r3, #0] - -tcp_fasttmr_start: - pcb = tcp_active_pcbs; - 80078e6: 4b2b ldr r3, [pc, #172] ; (8007994 ) - 80078e8: 681b ldr r3, [r3, #0] - 80078ea: 607b str r3, [r7, #4] - - while (pcb != NULL) { - 80078ec: e048 b.n 8007980 - if (pcb->last_timer != tcp_timer_ctr) { - 80078ee: 687b ldr r3, [r7, #4] - 80078f0: 7f9a ldrb r2, [r3, #30] - 80078f2: 4b27 ldr r3, [pc, #156] ; (8007990 ) - 80078f4: 781b ldrb r3, [r3, #0] - 80078f6: 429a cmp r2, r3 - 80078f8: d03f beq.n 800797a - struct tcp_pcb *next; - pcb->last_timer = tcp_timer_ctr; - 80078fa: 4b25 ldr r3, [pc, #148] ; (8007990 ) - 80078fc: 781a ldrb r2, [r3, #0] - 80078fe: 687b ldr r3, [r7, #4] - 8007900: 779a strb r2, [r3, #30] - /* send delayed ACKs */ - if (pcb->flags & TF_ACK_DELAY) { - 8007902: 687b ldr r3, [r7, #4] - 8007904: 8b5b ldrh r3, [r3, #26] - 8007906: f003 0301 and.w r3, r3, #1 - 800790a: 2b00 cmp r3, #0 - 800790c: d010 beq.n 8007930 - LWIP_DEBUGF(TCP_DEBUG, ("tcp_fasttmr: delayed ACK\n")); - tcp_ack_now(pcb); - 800790e: 687b ldr r3, [r7, #4] - 8007910: 8b5b ldrh r3, [r3, #26] - 8007912: f043 0302 orr.w r3, r3, #2 - 8007916: b29a uxth r2, r3 - 8007918: 687b ldr r3, [r7, #4] - 800791a: 835a strh r2, [r3, #26] - tcp_output(pcb); - 800791c: 6878 ldr r0, [r7, #4] - 800791e: f003 facf bl 800aec0 - tcp_clear_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); - 8007922: 687b ldr r3, [r7, #4] - 8007924: 8b5b ldrh r3, [r3, #26] - 8007926: f023 0303 bic.w r3, r3, #3 - 800792a: b29a uxth r2, r3 - 800792c: 687b ldr r3, [r7, #4] - 800792e: 835a strh r2, [r3, #26] - } - /* send pending FIN */ - if (pcb->flags & TF_CLOSEPEND) { - 8007930: 687b ldr r3, [r7, #4] - 8007932: 8b5b ldrh r3, [r3, #26] - 8007934: f003 0308 and.w r3, r3, #8 - 8007938: 2b00 cmp r3, #0 - 800793a: d009 beq.n 8007950 - LWIP_DEBUGF(TCP_DEBUG, ("tcp_fasttmr: pending FIN\n")); - tcp_clear_flags(pcb, TF_CLOSEPEND); - 800793c: 687b ldr r3, [r7, #4] - 800793e: 8b5b ldrh r3, [r3, #26] - 8007940: f023 0308 bic.w r3, r3, #8 - 8007944: b29a uxth r2, r3 - 8007946: 687b ldr r3, [r7, #4] - 8007948: 835a strh r2, [r3, #26] - tcp_close_shutdown_fin(pcb); - 800794a: 6878 ldr r0, [r7, #4] - 800794c: f7ff fa78 bl 8006e40 - } - - next = pcb->next; - 8007950: 687b ldr r3, [r7, #4] - 8007952: 68db ldr r3, [r3, #12] - 8007954: 603b str r3, [r7, #0] - - /* If there is data which was previously "refused" by upper layer */ - if (pcb->refused_data != NULL) { - 8007956: 687b ldr r3, [r7, #4] - 8007958: 6f9b ldr r3, [r3, #120] ; 0x78 - 800795a: 2b00 cmp r3, #0 - 800795c: d00a beq.n 8007974 - tcp_active_pcbs_changed = 0; - 800795e: 4b0e ldr r3, [pc, #56] ; (8007998 ) - 8007960: 2200 movs r2, #0 - 8007962: 701a strb r2, [r3, #0] - tcp_process_refused_data(pcb); - 8007964: 6878 ldr r0, [r7, #4] - 8007966: f000 f819 bl 800799c - if (tcp_active_pcbs_changed) { - 800796a: 4b0b ldr r3, [pc, #44] ; (8007998 ) - 800796c: 781b ldrb r3, [r3, #0] - 800796e: 2b00 cmp r3, #0 - 8007970: d000 beq.n 8007974 - /* application callback has changed the pcb list: restart the loop */ - goto tcp_fasttmr_start; - 8007972: e7b8 b.n 80078e6 - } - } - pcb = next; - 8007974: 683b ldr r3, [r7, #0] - 8007976: 607b str r3, [r7, #4] - 8007978: e002 b.n 8007980 - } else { - pcb = pcb->next; - 800797a: 687b ldr r3, [r7, #4] - 800797c: 68db ldr r3, [r3, #12] - 800797e: 607b str r3, [r7, #4] - while (pcb != NULL) { - 8007980: 687b ldr r3, [r7, #4] - 8007982: 2b00 cmp r3, #0 - 8007984: d1b3 bne.n 80078ee - } - } -} - 8007986: bf00 nop - 8007988: bf00 nop - 800798a: 3708 adds r7, #8 - 800798c: 46bd mov sp, r7 - 800798e: bd80 pop {r7, pc} - 8007990: 200099ea .word 0x200099ea - 8007994: 200099e0 .word 0x200099e0 - 8007998: 200099e8 .word 0x200099e8 - -0800799c : -} - -/** Pass pcb->refused_data to the recv callback */ -err_t -tcp_process_refused_data(struct tcp_pcb *pcb) -{ - 800799c: b590 push {r4, r7, lr} - 800799e: b085 sub sp, #20 - 80079a0: af00 add r7, sp, #0 - 80079a2: 6078 str r0, [r7, #4] -#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE - struct pbuf *rest; -#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ - - LWIP_ERROR("tcp_process_refused_data: invalid pcb", pcb != NULL, return ERR_ARG); - 80079a4: 687b ldr r3, [r7, #4] - 80079a6: 2b00 cmp r3, #0 - 80079a8: d109 bne.n 80079be - 80079aa: 4b37 ldr r3, [pc, #220] ; (8007a88 ) - 80079ac: f240 6209 movw r2, #1545 ; 0x609 - 80079b0: 4936 ldr r1, [pc, #216] ; (8007a8c ) - 80079b2: 4837 ldr r0, [pc, #220] ; (8007a90 ) - 80079b4: f009 fb78 bl 80110a8 - 80079b8: f06f 030f mvn.w r3, #15 - 80079bc: e060 b.n 8007a80 -#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE - while (pcb->refused_data != NULL) -#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ - { - err_t err; - u8_t refused_flags = pcb->refused_data->flags; - 80079be: 687b ldr r3, [r7, #4] - 80079c0: 6f9b ldr r3, [r3, #120] ; 0x78 - 80079c2: 7b5b ldrb r3, [r3, #13] - 80079c4: 73bb strb r3, [r7, #14] - /* set pcb->refused_data to NULL in case the callback frees it and then - closes the pcb */ - struct pbuf *refused_data = pcb->refused_data; - 80079c6: 687b ldr r3, [r7, #4] - 80079c8: 6f9b ldr r3, [r3, #120] ; 0x78 - 80079ca: 60bb str r3, [r7, #8] -#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE - pbuf_split_64k(refused_data, &rest); - pcb->refused_data = rest; -#else /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ - pcb->refused_data = NULL; - 80079cc: 687b ldr r3, [r7, #4] - 80079ce: 2200 movs r2, #0 - 80079d0: 679a str r2, [r3, #120] ; 0x78 -#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ - /* Notify again application with data previously received. */ - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: notify kept packet\n")); - TCP_EVENT_RECV(pcb, refused_data, ERR_OK, err); - 80079d2: 687b ldr r3, [r7, #4] - 80079d4: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84 - 80079d8: 2b00 cmp r3, #0 - 80079da: d00b beq.n 80079f4 - 80079dc: 687b ldr r3, [r7, #4] - 80079de: f8d3 4084 ldr.w r4, [r3, #132] ; 0x84 - 80079e2: 687b ldr r3, [r7, #4] - 80079e4: 6918 ldr r0, [r3, #16] - 80079e6: 2300 movs r3, #0 - 80079e8: 68ba ldr r2, [r7, #8] - 80079ea: 6879 ldr r1, [r7, #4] - 80079ec: 47a0 blx r4 - 80079ee: 4603 mov r3, r0 - 80079f0: 73fb strb r3, [r7, #15] - 80079f2: e007 b.n 8007a04 - 80079f4: 2300 movs r3, #0 - 80079f6: 68ba ldr r2, [r7, #8] - 80079f8: 6879 ldr r1, [r7, #4] - 80079fa: 2000 movs r0, #0 - 80079fc: f000 f8a4 bl 8007b48 - 8007a00: 4603 mov r3, r0 - 8007a02: 73fb strb r3, [r7, #15] - if (err == ERR_OK) { - 8007a04: f997 300f ldrsb.w r3, [r7, #15] - 8007a08: 2b00 cmp r3, #0 - 8007a0a: d12a bne.n 8007a62 - /* did refused_data include a FIN? */ - if ((refused_flags & PBUF_FLAG_TCP_FIN) - 8007a0c: 7bbb ldrb r3, [r7, #14] - 8007a0e: f003 0320 and.w r3, r3, #32 - 8007a12: 2b00 cmp r3, #0 - 8007a14: d033 beq.n 8007a7e - && (rest == NULL) -#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ - ) { - /* correct rcv_wnd as the application won't call tcp_recved() - for the FIN's seqno */ - if (pcb->rcv_wnd != TCP_WND_MAX(pcb)) { - 8007a16: 687b ldr r3, [r7, #4] - 8007a18: 8d1b ldrh r3, [r3, #40] ; 0x28 - 8007a1a: f5b3 6f06 cmp.w r3, #2144 ; 0x860 - 8007a1e: d005 beq.n 8007a2c - pcb->rcv_wnd++; - 8007a20: 687b ldr r3, [r7, #4] - 8007a22: 8d1b ldrh r3, [r3, #40] ; 0x28 - 8007a24: 3301 adds r3, #1 - 8007a26: b29a uxth r2, r3 - 8007a28: 687b ldr r3, [r7, #4] - 8007a2a: 851a strh r2, [r3, #40] ; 0x28 - } - TCP_EVENT_CLOSED(pcb, err); - 8007a2c: 687b ldr r3, [r7, #4] - 8007a2e: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84 - 8007a32: 2b00 cmp r3, #0 - 8007a34: d00b beq.n 8007a4e - 8007a36: 687b ldr r3, [r7, #4] - 8007a38: f8d3 4084 ldr.w r4, [r3, #132] ; 0x84 - 8007a3c: 687b ldr r3, [r7, #4] - 8007a3e: 6918 ldr r0, [r3, #16] - 8007a40: 2300 movs r3, #0 - 8007a42: 2200 movs r2, #0 - 8007a44: 6879 ldr r1, [r7, #4] - 8007a46: 47a0 blx r4 - 8007a48: 4603 mov r3, r0 - 8007a4a: 73fb strb r3, [r7, #15] - 8007a4c: e001 b.n 8007a52 - 8007a4e: 2300 movs r3, #0 - 8007a50: 73fb strb r3, [r7, #15] - if (err == ERR_ABRT) { - 8007a52: f997 300f ldrsb.w r3, [r7, #15] - 8007a56: f113 0f0d cmn.w r3, #13 - 8007a5a: d110 bne.n 8007a7e - return ERR_ABRT; - 8007a5c: f06f 030c mvn.w r3, #12 - 8007a60: e00e b.n 8007a80 - } - } - } else if (err == ERR_ABRT) { - 8007a62: f997 300f ldrsb.w r3, [r7, #15] - 8007a66: f113 0f0d cmn.w r3, #13 - 8007a6a: d102 bne.n 8007a72 - /* if err == ERR_ABRT, 'pcb' is already deallocated */ - /* Drop incoming packets because pcb is "full" (only if the incoming - segment contains data). */ - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: drop incoming packets, because pcb is \"full\"\n")); - return ERR_ABRT; - 8007a6c: f06f 030c mvn.w r3, #12 - 8007a70: e006 b.n 8007a80 -#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE - if (rest != NULL) { - pbuf_cat(refused_data, rest); - } -#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ - pcb->refused_data = refused_data; - 8007a72: 687b ldr r3, [r7, #4] - 8007a74: 68ba ldr r2, [r7, #8] - 8007a76: 679a str r2, [r3, #120] ; 0x78 - return ERR_INPROGRESS; - 8007a78: f06f 0304 mvn.w r3, #4 - 8007a7c: e000 b.n 8007a80 - } - } - return ERR_OK; - 8007a7e: 2300 movs r3, #0 -} - 8007a80: 4618 mov r0, r3 - 8007a82: 3714 adds r7, #20 - 8007a84: 46bd mov sp, r7 - 8007a86: bd90 pop {r4, r7, pc} - 8007a88: 080166ac .word 0x080166ac - 8007a8c: 08016bbc .word 0x08016bbc - 8007a90: 080166f0 .word 0x080166f0 - -08007a94 : - * - * @param seg tcp_seg list of TCP segments to free - */ -void -tcp_segs_free(struct tcp_seg *seg) -{ - 8007a94: b580 push {r7, lr} - 8007a96: b084 sub sp, #16 - 8007a98: af00 add r7, sp, #0 - 8007a9a: 6078 str r0, [r7, #4] - while (seg != NULL) { - 8007a9c: e007 b.n 8007aae - struct tcp_seg *next = seg->next; - 8007a9e: 687b ldr r3, [r7, #4] - 8007aa0: 681b ldr r3, [r3, #0] - 8007aa2: 60fb str r3, [r7, #12] - tcp_seg_free(seg); - 8007aa4: 6878 ldr r0, [r7, #4] - 8007aa6: f000 f80a bl 8007abe - seg = next; - 8007aaa: 68fb ldr r3, [r7, #12] - 8007aac: 607b str r3, [r7, #4] - while (seg != NULL) { - 8007aae: 687b ldr r3, [r7, #4] - 8007ab0: 2b00 cmp r3, #0 - 8007ab2: d1f4 bne.n 8007a9e - } -} - 8007ab4: bf00 nop - 8007ab6: bf00 nop - 8007ab8: 3710 adds r7, #16 - 8007aba: 46bd mov sp, r7 - 8007abc: bd80 pop {r7, pc} - -08007abe : - * - * @param seg single tcp_seg to free - */ -void -tcp_seg_free(struct tcp_seg *seg) -{ - 8007abe: b580 push {r7, lr} - 8007ac0: b082 sub sp, #8 - 8007ac2: af00 add r7, sp, #0 - 8007ac4: 6078 str r0, [r7, #4] - if (seg != NULL) { - 8007ac6: 687b ldr r3, [r7, #4] - 8007ac8: 2b00 cmp r3, #0 - 8007aca: d00c beq.n 8007ae6 - if (seg->p != NULL) { - 8007acc: 687b ldr r3, [r7, #4] - 8007ace: 685b ldr r3, [r3, #4] - 8007ad0: 2b00 cmp r3, #0 - 8007ad2: d004 beq.n 8007ade - pbuf_free(seg->p); - 8007ad4: 687b ldr r3, [r7, #4] - 8007ad6: 685b ldr r3, [r3, #4] - 8007ad8: 4618 mov r0, r3 - 8007ada: f7fe fd6d bl 80065b8 -#if TCP_DEBUG - seg->p = NULL; -#endif /* TCP_DEBUG */ - } - memp_free(MEMP_TCP_SEG, seg); - 8007ade: 6879 ldr r1, [r7, #4] - 8007ae0: 2003 movs r0, #3 - 8007ae2: f7fd fee7 bl 80058b4 - } -} - 8007ae6: bf00 nop - 8007ae8: 3708 adds r7, #8 - 8007aea: 46bd mov sp, r7 - 8007aec: bd80 pop {r7, pc} - ... - -08007af0 : - * @param seg the old tcp_seg - * @return a copy of seg - */ -struct tcp_seg * -tcp_seg_copy(struct tcp_seg *seg) -{ - 8007af0: b580 push {r7, lr} - 8007af2: b084 sub sp, #16 - 8007af4: af00 add r7, sp, #0 - 8007af6: 6078 str r0, [r7, #4] - struct tcp_seg *cseg; - - LWIP_ASSERT("tcp_seg_copy: invalid seg", seg != NULL); - 8007af8: 687b ldr r3, [r7, #4] - 8007afa: 2b00 cmp r3, #0 - 8007afc: d106 bne.n 8007b0c - 8007afe: 4b0f ldr r3, [pc, #60] ; (8007b3c ) - 8007b00: f240 6282 movw r2, #1666 ; 0x682 - 8007b04: 490e ldr r1, [pc, #56] ; (8007b40 ) - 8007b06: 480f ldr r0, [pc, #60] ; (8007b44 ) - 8007b08: f009 face bl 80110a8 - - cseg = (struct tcp_seg *)memp_malloc(MEMP_TCP_SEG); - 8007b0c: 2003 movs r0, #3 - 8007b0e: f7fd fe61 bl 80057d4 - 8007b12: 60f8 str r0, [r7, #12] - if (cseg == NULL) { - 8007b14: 68fb ldr r3, [r7, #12] - 8007b16: 2b00 cmp r3, #0 - 8007b18: d101 bne.n 8007b1e - return NULL; - 8007b1a: 2300 movs r3, #0 - 8007b1c: e00a b.n 8007b34 - } - SMEMCPY((u8_t *)cseg, (const u8_t *)seg, sizeof(struct tcp_seg)); - 8007b1e: 2210 movs r2, #16 - 8007b20: 6879 ldr r1, [r7, #4] - 8007b22: 68f8 ldr r0, [r7, #12] - 8007b24: f009 fa90 bl 8011048 - pbuf_ref(cseg->p); - 8007b28: 68fb ldr r3, [r7, #12] - 8007b2a: 685b ldr r3, [r3, #4] - 8007b2c: 4618 mov r0, r3 - 8007b2e: f7fe fde3 bl 80066f8 - return cseg; - 8007b32: 68fb ldr r3, [r7, #12] -} - 8007b34: 4618 mov r0, r3 - 8007b36: 3710 adds r7, #16 - 8007b38: 46bd mov sp, r7 - 8007b3a: bd80 pop {r7, pc} - 8007b3c: 080166ac .word 0x080166ac - 8007b40: 08016c00 .word 0x08016c00 - 8007b44: 080166f0 .word 0x080166f0 - -08007b48 : - * Default receive callback that is called if the user didn't register - * a recv callback for the pcb. - */ -err_t -tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) -{ - 8007b48: b580 push {r7, lr} - 8007b4a: b084 sub sp, #16 - 8007b4c: af00 add r7, sp, #0 - 8007b4e: 60f8 str r0, [r7, #12] - 8007b50: 60b9 str r1, [r7, #8] - 8007b52: 607a str r2, [r7, #4] - 8007b54: 70fb strb r3, [r7, #3] - LWIP_UNUSED_ARG(arg); - - LWIP_ERROR("tcp_recv_null: invalid pcb", pcb != NULL, return ERR_ARG); - 8007b56: 68bb ldr r3, [r7, #8] - 8007b58: 2b00 cmp r3, #0 - 8007b5a: d109 bne.n 8007b70 - 8007b5c: 4b12 ldr r3, [pc, #72] ; (8007ba8 ) - 8007b5e: f44f 62d3 mov.w r2, #1688 ; 0x698 - 8007b62: 4912 ldr r1, [pc, #72] ; (8007bac ) - 8007b64: 4812 ldr r0, [pc, #72] ; (8007bb0 ) - 8007b66: f009 fa9f bl 80110a8 - 8007b6a: f06f 030f mvn.w r3, #15 - 8007b6e: e016 b.n 8007b9e - - if (p != NULL) { - 8007b70: 687b ldr r3, [r7, #4] - 8007b72: 2b00 cmp r3, #0 - 8007b74: d009 beq.n 8007b8a - tcp_recved(pcb, p->tot_len); - 8007b76: 687b ldr r3, [r7, #4] - 8007b78: 891b ldrh r3, [r3, #8] - 8007b7a: 4619 mov r1, r3 - 8007b7c: 68b8 ldr r0, [r7, #8] - 8007b7e: f7ff fb19 bl 80071b4 - pbuf_free(p); - 8007b82: 6878 ldr r0, [r7, #4] - 8007b84: f7fe fd18 bl 80065b8 - 8007b88: e008 b.n 8007b9c - } else if (err == ERR_OK) { - 8007b8a: f997 3003 ldrsb.w r3, [r7, #3] - 8007b8e: 2b00 cmp r3, #0 - 8007b90: d104 bne.n 8007b9c - return tcp_close(pcb); - 8007b92: 68b8 ldr r0, [r7, #8] - 8007b94: f7ff f9be bl 8006f14 - 8007b98: 4603 mov r3, r0 - 8007b9a: e000 b.n 8007b9e - } - return ERR_OK; - 8007b9c: 2300 movs r3, #0 -} - 8007b9e: 4618 mov r0, r3 - 8007ba0: 3710 adds r7, #16 - 8007ba2: 46bd mov sp, r7 - 8007ba4: bd80 pop {r7, pc} - 8007ba6: bf00 nop - 8007ba8: 080166ac .word 0x080166ac - 8007bac: 08016c1c .word 0x08016c1c - 8007bb0: 080166f0 .word 0x080166f0 - -08007bb4 : - * - * @param prio minimum priority - */ -static void -tcp_kill_prio(u8_t prio) -{ - 8007bb4: b580 push {r7, lr} - 8007bb6: b086 sub sp, #24 - 8007bb8: af00 add r7, sp, #0 - 8007bba: 4603 mov r3, r0 - 8007bbc: 71fb strb r3, [r7, #7] - struct tcp_pcb *pcb, *inactive; - u32_t inactivity; - u8_t mprio; - - mprio = LWIP_MIN(TCP_PRIO_MAX, prio); - 8007bbe: f997 3007 ldrsb.w r3, [r7, #7] - 8007bc2: 2b00 cmp r3, #0 - 8007bc4: db01 blt.n 8007bca - 8007bc6: 79fb ldrb r3, [r7, #7] - 8007bc8: e000 b.n 8007bcc - 8007bca: 237f movs r3, #127 ; 0x7f - 8007bcc: 72fb strb r3, [r7, #11] - - /* We want to kill connections with a lower prio, so bail out if - * supplied prio is 0 - there can never be a lower prio - */ - if (mprio == 0) { - 8007bce: 7afb ldrb r3, [r7, #11] - 8007bd0: 2b00 cmp r3, #0 - 8007bd2: d034 beq.n 8007c3e - /* We only want kill connections with a lower prio, so decrement prio by one - * and start searching for oldest connection with same or lower priority than mprio. - * We want to find the connections with the lowest possible prio, and among - * these the one with the longest inactivity time. - */ - mprio--; - 8007bd4: 7afb ldrb r3, [r7, #11] - 8007bd6: 3b01 subs r3, #1 - 8007bd8: 72fb strb r3, [r7, #11] - - inactivity = 0; - 8007bda: 2300 movs r3, #0 - 8007bdc: 60fb str r3, [r7, #12] - inactive = NULL; - 8007bde: 2300 movs r3, #0 - 8007be0: 613b str r3, [r7, #16] - for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { - 8007be2: 4b19 ldr r3, [pc, #100] ; (8007c48 ) - 8007be4: 681b ldr r3, [r3, #0] - 8007be6: 617b str r3, [r7, #20] - 8007be8: e01f b.n 8007c2a - /* lower prio is always a kill candidate */ - if ((pcb->prio < mprio) || - 8007bea: 697b ldr r3, [r7, #20] - 8007bec: 7d5b ldrb r3, [r3, #21] - 8007bee: 7afa ldrb r2, [r7, #11] - 8007bf0: 429a cmp r2, r3 - 8007bf2: d80c bhi.n 8007c0e - /* longer inactivity is also a kill candidate */ - ((pcb->prio == mprio) && ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity))) { - 8007bf4: 697b ldr r3, [r7, #20] - 8007bf6: 7d5b ldrb r3, [r3, #21] - if ((pcb->prio < mprio) || - 8007bf8: 7afa ldrb r2, [r7, #11] - 8007bfa: 429a cmp r2, r3 - 8007bfc: d112 bne.n 8007c24 - ((pcb->prio == mprio) && ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity))) { - 8007bfe: 4b13 ldr r3, [pc, #76] ; (8007c4c ) - 8007c00: 681a ldr r2, [r3, #0] - 8007c02: 697b ldr r3, [r7, #20] - 8007c04: 6a1b ldr r3, [r3, #32] - 8007c06: 1ad3 subs r3, r2, r3 - 8007c08: 68fa ldr r2, [r7, #12] - 8007c0a: 429a cmp r2, r3 - 8007c0c: d80a bhi.n 8007c24 - inactivity = tcp_ticks - pcb->tmr; - 8007c0e: 4b0f ldr r3, [pc, #60] ; (8007c4c ) - 8007c10: 681a ldr r2, [r3, #0] - 8007c12: 697b ldr r3, [r7, #20] - 8007c14: 6a1b ldr r3, [r3, #32] - 8007c16: 1ad3 subs r3, r2, r3 - 8007c18: 60fb str r3, [r7, #12] - inactive = pcb; - 8007c1a: 697b ldr r3, [r7, #20] - 8007c1c: 613b str r3, [r7, #16] - mprio = pcb->prio; - 8007c1e: 697b ldr r3, [r7, #20] - 8007c20: 7d5b ldrb r3, [r3, #21] - 8007c22: 72fb strb r3, [r7, #11] - for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { - 8007c24: 697b ldr r3, [r7, #20] - 8007c26: 68db ldr r3, [r3, #12] - 8007c28: 617b str r3, [r7, #20] - 8007c2a: 697b ldr r3, [r7, #20] - 8007c2c: 2b00 cmp r3, #0 - 8007c2e: d1dc bne.n 8007bea - } - } - if (inactive != NULL) { - 8007c30: 693b ldr r3, [r7, #16] - 8007c32: 2b00 cmp r3, #0 - 8007c34: d004 beq.n 8007c40 - LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_prio: killing oldest PCB %p (%"S32_F")\n", - (void *)inactive, inactivity)); - tcp_abort(inactive); - 8007c36: 6938 ldr r0, [r7, #16] - 8007c38: f7ff fa56 bl 80070e8 - 8007c3c: e000 b.n 8007c40 - return; - 8007c3e: bf00 nop - } -} - 8007c40: 3718 adds r7, #24 - 8007c42: 46bd mov sp, r7 - 8007c44: bd80 pop {r7, pc} - 8007c46: bf00 nop - 8007c48: 200099e0 .word 0x200099e0 - 8007c4c: 200099d4 .word 0x200099d4 - -08007c50 : - * Kills the oldest connection that is in specific state. - * Called from tcp_alloc() for LAST_ACK and CLOSING if no more connections are available. - */ -static void -tcp_kill_state(enum tcp_state state) -{ - 8007c50: b580 push {r7, lr} - 8007c52: b086 sub sp, #24 - 8007c54: af00 add r7, sp, #0 - 8007c56: 4603 mov r3, r0 - 8007c58: 71fb strb r3, [r7, #7] - struct tcp_pcb *pcb, *inactive; - u32_t inactivity; - - LWIP_ASSERT("invalid state", (state == CLOSING) || (state == LAST_ACK)); - 8007c5a: 79fb ldrb r3, [r7, #7] - 8007c5c: 2b08 cmp r3, #8 - 8007c5e: d009 beq.n 8007c74 - 8007c60: 79fb ldrb r3, [r7, #7] - 8007c62: 2b09 cmp r3, #9 - 8007c64: d006 beq.n 8007c74 - 8007c66: 4b1a ldr r3, [pc, #104] ; (8007cd0 ) - 8007c68: f240 62dd movw r2, #1757 ; 0x6dd - 8007c6c: 4919 ldr r1, [pc, #100] ; (8007cd4 ) - 8007c6e: 481a ldr r0, [pc, #104] ; (8007cd8 ) - 8007c70: f009 fa1a bl 80110a8 - - inactivity = 0; - 8007c74: 2300 movs r3, #0 - 8007c76: 60fb str r3, [r7, #12] - inactive = NULL; - 8007c78: 2300 movs r3, #0 - 8007c7a: 613b str r3, [r7, #16] - /* Go through the list of active pcbs and get the oldest pcb that is in state - CLOSING/LAST_ACK. */ - for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { - 8007c7c: 4b17 ldr r3, [pc, #92] ; (8007cdc ) - 8007c7e: 681b ldr r3, [r3, #0] - 8007c80: 617b str r3, [r7, #20] - 8007c82: e017 b.n 8007cb4 - if (pcb->state == state) { - 8007c84: 697b ldr r3, [r7, #20] - 8007c86: 7d1b ldrb r3, [r3, #20] - 8007c88: 79fa ldrb r2, [r7, #7] - 8007c8a: 429a cmp r2, r3 - 8007c8c: d10f bne.n 8007cae - if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { - 8007c8e: 4b14 ldr r3, [pc, #80] ; (8007ce0 ) - 8007c90: 681a ldr r2, [r3, #0] - 8007c92: 697b ldr r3, [r7, #20] - 8007c94: 6a1b ldr r3, [r3, #32] - 8007c96: 1ad3 subs r3, r2, r3 - 8007c98: 68fa ldr r2, [r7, #12] - 8007c9a: 429a cmp r2, r3 - 8007c9c: d807 bhi.n 8007cae - inactivity = tcp_ticks - pcb->tmr; - 8007c9e: 4b10 ldr r3, [pc, #64] ; (8007ce0 ) - 8007ca0: 681a ldr r2, [r3, #0] - 8007ca2: 697b ldr r3, [r7, #20] - 8007ca4: 6a1b ldr r3, [r3, #32] - 8007ca6: 1ad3 subs r3, r2, r3 - 8007ca8: 60fb str r3, [r7, #12] - inactive = pcb; - 8007caa: 697b ldr r3, [r7, #20] - 8007cac: 613b str r3, [r7, #16] - for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { - 8007cae: 697b ldr r3, [r7, #20] - 8007cb0: 68db ldr r3, [r3, #12] - 8007cb2: 617b str r3, [r7, #20] - 8007cb4: 697b ldr r3, [r7, #20] - 8007cb6: 2b00 cmp r3, #0 - 8007cb8: d1e4 bne.n 8007c84 - } - } - } - if (inactive != NULL) { - 8007cba: 693b ldr r3, [r7, #16] - 8007cbc: 2b00 cmp r3, #0 - 8007cbe: d003 beq.n 8007cc8 - LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_closing: killing oldest %s PCB %p (%"S32_F")\n", - tcp_state_str[state], (void *)inactive, inactivity)); - /* Don't send a RST, since no data is lost. */ - tcp_abandon(inactive, 0); - 8007cc0: 2100 movs r1, #0 - 8007cc2: 6938 ldr r0, [r7, #16] - 8007cc4: f7ff f952 bl 8006f6c - } -} - 8007cc8: bf00 nop - 8007cca: 3718 adds r7, #24 - 8007ccc: 46bd mov sp, r7 - 8007cce: bd80 pop {r7, pc} - 8007cd0: 080166ac .word 0x080166ac - 8007cd4: 08016c38 .word 0x08016c38 - 8007cd8: 080166f0 .word 0x080166f0 - 8007cdc: 200099e0 .word 0x200099e0 - 8007ce0: 200099d4 .word 0x200099d4 - -08007ce4 : - * Kills the oldest connection that is in TIME_WAIT state. - * Called from tcp_alloc() if no more connections are available. - */ -static void -tcp_kill_timewait(void) -{ - 8007ce4: b580 push {r7, lr} - 8007ce6: b084 sub sp, #16 - 8007ce8: af00 add r7, sp, #0 - struct tcp_pcb *pcb, *inactive; - u32_t inactivity; - - inactivity = 0; - 8007cea: 2300 movs r3, #0 - 8007cec: 607b str r3, [r7, #4] - inactive = NULL; - 8007cee: 2300 movs r3, #0 - 8007cf0: 60bb str r3, [r7, #8] - /* Go through the list of TIME_WAIT pcbs and get the oldest pcb. */ - for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { - 8007cf2: 4b12 ldr r3, [pc, #72] ; (8007d3c ) - 8007cf4: 681b ldr r3, [r3, #0] - 8007cf6: 60fb str r3, [r7, #12] - 8007cf8: e012 b.n 8007d20 - if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { - 8007cfa: 4b11 ldr r3, [pc, #68] ; (8007d40 ) - 8007cfc: 681a ldr r2, [r3, #0] - 8007cfe: 68fb ldr r3, [r7, #12] - 8007d00: 6a1b ldr r3, [r3, #32] - 8007d02: 1ad3 subs r3, r2, r3 - 8007d04: 687a ldr r2, [r7, #4] - 8007d06: 429a cmp r2, r3 - 8007d08: d807 bhi.n 8007d1a - inactivity = tcp_ticks - pcb->tmr; - 8007d0a: 4b0d ldr r3, [pc, #52] ; (8007d40 ) - 8007d0c: 681a ldr r2, [r3, #0] - 8007d0e: 68fb ldr r3, [r7, #12] - 8007d10: 6a1b ldr r3, [r3, #32] - 8007d12: 1ad3 subs r3, r2, r3 - 8007d14: 607b str r3, [r7, #4] - inactive = pcb; - 8007d16: 68fb ldr r3, [r7, #12] - 8007d18: 60bb str r3, [r7, #8] - for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { - 8007d1a: 68fb ldr r3, [r7, #12] - 8007d1c: 68db ldr r3, [r3, #12] - 8007d1e: 60fb str r3, [r7, #12] - 8007d20: 68fb ldr r3, [r7, #12] - 8007d22: 2b00 cmp r3, #0 - 8007d24: d1e9 bne.n 8007cfa - } - } - if (inactive != NULL) { - 8007d26: 68bb ldr r3, [r7, #8] - 8007d28: 2b00 cmp r3, #0 - 8007d2a: d002 beq.n 8007d32 - LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_timewait: killing oldest TIME-WAIT PCB %p (%"S32_F")\n", - (void *)inactive, inactivity)); - tcp_abort(inactive); - 8007d2c: 68b8 ldr r0, [r7, #8] - 8007d2e: f7ff f9db bl 80070e8 - } -} - 8007d32: bf00 nop - 8007d34: 3710 adds r7, #16 - 8007d36: 46bd mov sp, r7 - 8007d38: bd80 pop {r7, pc} - 8007d3a: bf00 nop - 8007d3c: 200099e4 .word 0x200099e4 - 8007d40: 200099d4 .word 0x200099d4 - -08007d44 : - * now send the FIN (which failed before), the pcb might be in a state that is - * OK for us to now free it. - */ -static void -tcp_handle_closepend(void) -{ - 8007d44: b580 push {r7, lr} - 8007d46: b082 sub sp, #8 - 8007d48: af00 add r7, sp, #0 - struct tcp_pcb *pcb = tcp_active_pcbs; - 8007d4a: 4b10 ldr r3, [pc, #64] ; (8007d8c ) - 8007d4c: 681b ldr r3, [r3, #0] - 8007d4e: 607b str r3, [r7, #4] - - while (pcb != NULL) { - 8007d50: e014 b.n 8007d7c - struct tcp_pcb *next = pcb->next; - 8007d52: 687b ldr r3, [r7, #4] - 8007d54: 68db ldr r3, [r3, #12] - 8007d56: 603b str r3, [r7, #0] - /* send pending FIN */ - if (pcb->flags & TF_CLOSEPEND) { - 8007d58: 687b ldr r3, [r7, #4] - 8007d5a: 8b5b ldrh r3, [r3, #26] - 8007d5c: f003 0308 and.w r3, r3, #8 - 8007d60: 2b00 cmp r3, #0 - 8007d62: d009 beq.n 8007d78 - LWIP_DEBUGF(TCP_DEBUG, ("tcp_handle_closepend: pending FIN\n")); - tcp_clear_flags(pcb, TF_CLOSEPEND); - 8007d64: 687b ldr r3, [r7, #4] - 8007d66: 8b5b ldrh r3, [r3, #26] - 8007d68: f023 0308 bic.w r3, r3, #8 - 8007d6c: b29a uxth r2, r3 - 8007d6e: 687b ldr r3, [r7, #4] - 8007d70: 835a strh r2, [r3, #26] - tcp_close_shutdown_fin(pcb); - 8007d72: 6878 ldr r0, [r7, #4] - 8007d74: f7ff f864 bl 8006e40 - } - pcb = next; - 8007d78: 683b ldr r3, [r7, #0] - 8007d7a: 607b str r3, [r7, #4] - while (pcb != NULL) { - 8007d7c: 687b ldr r3, [r7, #4] - 8007d7e: 2b00 cmp r3, #0 - 8007d80: d1e7 bne.n 8007d52 - } -} - 8007d82: bf00 nop - 8007d84: bf00 nop - 8007d86: 3708 adds r7, #8 - 8007d88: 46bd mov sp, r7 - 8007d8a: bd80 pop {r7, pc} - 8007d8c: 200099e0 .word 0x200099e0 - -08007d90 : - * @param prio priority for the new pcb - * @return a new tcp_pcb that initially is in state CLOSED - */ -struct tcp_pcb * -tcp_alloc(u8_t prio) -{ - 8007d90: b580 push {r7, lr} - 8007d92: b084 sub sp, #16 - 8007d94: af00 add r7, sp, #0 - 8007d96: 4603 mov r3, r0 - 8007d98: 71fb strb r3, [r7, #7] - struct tcp_pcb *pcb; - - LWIP_ASSERT_CORE_LOCKED(); - - pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); - 8007d9a: 2001 movs r0, #1 - 8007d9c: f7fd fd1a bl 80057d4 - 8007da0: 60f8 str r0, [r7, #12] - if (pcb == NULL) { - 8007da2: 68fb ldr r3, [r7, #12] - 8007da4: 2b00 cmp r3, #0 - 8007da6: d126 bne.n 8007df6 - /* Try to send FIN for all pcbs stuck in TF_CLOSEPEND first */ - tcp_handle_closepend(); - 8007da8: f7ff ffcc bl 8007d44 - - /* Try killing oldest connection in TIME-WAIT. */ - LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing off oldest TIME-WAIT connection\n")); - tcp_kill_timewait(); - 8007dac: f7ff ff9a bl 8007ce4 - /* Try to allocate a tcp_pcb again. */ - pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); - 8007db0: 2001 movs r0, #1 - 8007db2: f7fd fd0f bl 80057d4 - 8007db6: 60f8 str r0, [r7, #12] - if (pcb == NULL) { - 8007db8: 68fb ldr r3, [r7, #12] - 8007dba: 2b00 cmp r3, #0 - 8007dbc: d11b bne.n 8007df6 - /* Try killing oldest connection in LAST-ACK (these wouldn't go to TIME-WAIT). */ - LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing off oldest LAST-ACK connection\n")); - tcp_kill_state(LAST_ACK); - 8007dbe: 2009 movs r0, #9 - 8007dc0: f7ff ff46 bl 8007c50 - /* Try to allocate a tcp_pcb again. */ - pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); - 8007dc4: 2001 movs r0, #1 - 8007dc6: f7fd fd05 bl 80057d4 - 8007dca: 60f8 str r0, [r7, #12] - if (pcb == NULL) { - 8007dcc: 68fb ldr r3, [r7, #12] - 8007dce: 2b00 cmp r3, #0 - 8007dd0: d111 bne.n 8007df6 - /* Try killing oldest connection in CLOSING. */ - LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing off oldest CLOSING connection\n")); - tcp_kill_state(CLOSING); - 8007dd2: 2008 movs r0, #8 - 8007dd4: f7ff ff3c bl 8007c50 - /* Try to allocate a tcp_pcb again. */ - pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); - 8007dd8: 2001 movs r0, #1 - 8007dda: f7fd fcfb bl 80057d4 - 8007dde: 60f8 str r0, [r7, #12] - if (pcb == NULL) { - 8007de0: 68fb ldr r3, [r7, #12] - 8007de2: 2b00 cmp r3, #0 - 8007de4: d107 bne.n 8007df6 - /* Try killing oldest active connection with lower priority than the new one. */ - LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing oldest connection with prio lower than %d\n", prio)); - tcp_kill_prio(prio); - 8007de6: 79fb ldrb r3, [r7, #7] - 8007de8: 4618 mov r0, r3 - 8007dea: f7ff fee3 bl 8007bb4 - /* Try to allocate a tcp_pcb again. */ - pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); - 8007dee: 2001 movs r0, #1 - 8007df0: f7fd fcf0 bl 80057d4 - 8007df4: 60f8 str r0, [r7, #12] - if (pcb != NULL) { - /* adjust err stats: memp_malloc failed above */ - MEMP_STATS_DEC(err, MEMP_TCP_PCB); - } - } - if (pcb != NULL) { - 8007df6: 68fb ldr r3, [r7, #12] - 8007df8: 2b00 cmp r3, #0 - 8007dfa: d03f beq.n 8007e7c - /* zero out the whole pcb, so there is no need to initialize members to zero */ - memset(pcb, 0, sizeof(struct tcp_pcb)); - 8007dfc: 229c movs r2, #156 ; 0x9c - 8007dfe: 2100 movs r1, #0 - 8007e00: 68f8 ldr r0, [r7, #12] - 8007e02: f009 f949 bl 8011098 - pcb->prio = prio; - 8007e06: 68fb ldr r3, [r7, #12] - 8007e08: 79fa ldrb r2, [r7, #7] - 8007e0a: 755a strb r2, [r3, #21] - pcb->snd_buf = TCP_SND_BUF; - 8007e0c: 68fb ldr r3, [r7, #12] - 8007e0e: f44f 6286 mov.w r2, #1072 ; 0x430 - 8007e12: f8a3 2064 strh.w r2, [r3, #100] ; 0x64 - /* Start with a window that does not need scaling. When window scaling is - enabled and used, the window is enlarged when both sides agree on scaling. */ - pcb->rcv_wnd = pcb->rcv_ann_wnd = TCPWND_MIN16(TCP_WND); - 8007e16: 68fb ldr r3, [r7, #12] - 8007e18: f44f 6206 mov.w r2, #2144 ; 0x860 - 8007e1c: 855a strh r2, [r3, #42] ; 0x2a - 8007e1e: 68fb ldr r3, [r7, #12] - 8007e20: 8d5a ldrh r2, [r3, #42] ; 0x2a - 8007e22: 68fb ldr r3, [r7, #12] - 8007e24: 851a strh r2, [r3, #40] ; 0x28 - pcb->ttl = TCP_TTL; - 8007e26: 68fb ldr r3, [r7, #12] - 8007e28: 22ff movs r2, #255 ; 0xff - 8007e2a: 72da strb r2, [r3, #11] - /* As initial send MSS, we use TCP_MSS but limit it to 536. - The send MSS is updated when an MSS option is received. */ - pcb->mss = INITIAL_MSS; - 8007e2c: 68fb ldr r3, [r7, #12] - 8007e2e: f44f 7206 mov.w r2, #536 ; 0x218 - 8007e32: 865a strh r2, [r3, #50] ; 0x32 - pcb->rto = 3000 / TCP_SLOW_INTERVAL; - 8007e34: 68fb ldr r3, [r7, #12] - 8007e36: 2206 movs r2, #6 - 8007e38: f8a3 2040 strh.w r2, [r3, #64] ; 0x40 - pcb->sv = 3000 / TCP_SLOW_INTERVAL; - 8007e3c: 68fb ldr r3, [r7, #12] - 8007e3e: 2206 movs r2, #6 - 8007e40: 87da strh r2, [r3, #62] ; 0x3e - pcb->rtime = -1; - 8007e42: 68fb ldr r3, [r7, #12] - 8007e44: f64f 72ff movw r2, #65535 ; 0xffff - 8007e48: 861a strh r2, [r3, #48] ; 0x30 - pcb->cwnd = 1; - 8007e4a: 68fb ldr r3, [r7, #12] - 8007e4c: 2201 movs r2, #1 - 8007e4e: f8a3 2048 strh.w r2, [r3, #72] ; 0x48 - pcb->tmr = tcp_ticks; - 8007e52: 4b0d ldr r3, [pc, #52] ; (8007e88 ) - 8007e54: 681a ldr r2, [r3, #0] - 8007e56: 68fb ldr r3, [r7, #12] - 8007e58: 621a str r2, [r3, #32] - pcb->last_timer = tcp_timer_ctr; - 8007e5a: 4b0c ldr r3, [pc, #48] ; (8007e8c ) - 8007e5c: 781a ldrb r2, [r3, #0] - 8007e5e: 68fb ldr r3, [r7, #12] - 8007e60: 779a strb r2, [r3, #30] - of using the largest advertised receive window. We've seen complications with - receiving TCPs that use window scaling and/or window auto-tuning where the - initial advertised window is very small and then grows rapidly once the - connection is established. To avoid these complications, we set ssthresh to the - largest effective cwnd (amount of in-flight data) that the sender can have. */ - pcb->ssthresh = TCP_SND_BUF; - 8007e62: 68fb ldr r3, [r7, #12] - 8007e64: f44f 6286 mov.w r2, #1072 ; 0x430 - 8007e68: f8a3 204a strh.w r2, [r3, #74] ; 0x4a - -#if LWIP_CALLBACK_API - pcb->recv = tcp_recv_null; - 8007e6c: 68fb ldr r3, [r7, #12] - 8007e6e: 4a08 ldr r2, [pc, #32] ; (8007e90 ) - 8007e70: f8c3 2084 str.w r2, [r3, #132] ; 0x84 -#endif /* LWIP_CALLBACK_API */ - - /* Init KEEPALIVE timer */ - pcb->keep_idle = TCP_KEEPIDLE_DEFAULT; - 8007e74: 68fb ldr r3, [r7, #12] - 8007e76: 4a07 ldr r2, [pc, #28] ; (8007e94 ) - 8007e78: f8c3 2094 str.w r2, [r3, #148] ; 0x94 -#if LWIP_TCP_KEEPALIVE - pcb->keep_intvl = TCP_KEEPINTVL_DEFAULT; - pcb->keep_cnt = TCP_KEEPCNT_DEFAULT; -#endif /* LWIP_TCP_KEEPALIVE */ - } - return pcb; - 8007e7c: 68fb ldr r3, [r7, #12] -} - 8007e7e: 4618 mov r0, r3 - 8007e80: 3710 adds r7, #16 - 8007e82: 46bd mov sp, r7 - 8007e84: bd80 pop {r7, pc} - 8007e86: bf00 nop - 8007e88: 200099d4 .word 0x200099d4 - 8007e8c: 200099ea .word 0x200099ea - 8007e90: 08007b49 .word 0x08007b49 - 8007e94: 006ddd00 .word 0x006ddd00 - -08007e98 : - * - * @param pcb tcp_pcb to purge. The pcb itself is not deallocated! - */ -void -tcp_pcb_purge(struct tcp_pcb *pcb) -{ - 8007e98: b580 push {r7, lr} - 8007e9a: b082 sub sp, #8 - 8007e9c: af00 add r7, sp, #0 - 8007e9e: 6078 str r0, [r7, #4] - LWIP_ERROR("tcp_pcb_purge: invalid pcb", pcb != NULL, return); - 8007ea0: 687b ldr r3, [r7, #4] - 8007ea2: 2b00 cmp r3, #0 - 8007ea4: d107 bne.n 8007eb6 - 8007ea6: 4b21 ldr r3, [pc, #132] ; (8007f2c ) - 8007ea8: f640 0251 movw r2, #2129 ; 0x851 - 8007eac: 4920 ldr r1, [pc, #128] ; (8007f30 ) - 8007eae: 4821 ldr r0, [pc, #132] ; (8007f34 ) - 8007eb0: f009 f8fa bl 80110a8 - 8007eb4: e037 b.n 8007f26 - - if (pcb->state != CLOSED && - 8007eb6: 687b ldr r3, [r7, #4] - 8007eb8: 7d1b ldrb r3, [r3, #20] - 8007eba: 2b00 cmp r3, #0 - 8007ebc: d033 beq.n 8007f26 - pcb->state != TIME_WAIT && - 8007ebe: 687b ldr r3, [r7, #4] - 8007ec0: 7d1b ldrb r3, [r3, #20] - if (pcb->state != CLOSED && - 8007ec2: 2b0a cmp r3, #10 - 8007ec4: d02f beq.n 8007f26 - pcb->state != LISTEN) { - 8007ec6: 687b ldr r3, [r7, #4] - 8007ec8: 7d1b ldrb r3, [r3, #20] - pcb->state != TIME_WAIT && - 8007eca: 2b01 cmp r3, #1 - 8007ecc: d02b beq.n 8007f26 - - LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge\n")); - - tcp_backlog_accepted(pcb); - - if (pcb->refused_data != NULL) { - 8007ece: 687b ldr r3, [r7, #4] - 8007ed0: 6f9b ldr r3, [r3, #120] ; 0x78 - 8007ed2: 2b00 cmp r3, #0 - 8007ed4: d007 beq.n 8007ee6 - LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->refused_data\n")); - pbuf_free(pcb->refused_data); - 8007ed6: 687b ldr r3, [r7, #4] - 8007ed8: 6f9b ldr r3, [r3, #120] ; 0x78 - 8007eda: 4618 mov r0, r3 - 8007edc: f7fe fb6c bl 80065b8 - pcb->refused_data = NULL; - 8007ee0: 687b ldr r3, [r7, #4] - 8007ee2: 2200 movs r2, #0 - 8007ee4: 679a str r2, [r3, #120] ; 0x78 - } - if (pcb->unacked != NULL) { - LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->unacked\n")); - } -#if TCP_QUEUE_OOSEQ - if (pcb->ooseq != NULL) { - 8007ee6: 687b ldr r3, [r7, #4] - 8007ee8: 6f5b ldr r3, [r3, #116] ; 0x74 - 8007eea: 2b00 cmp r3, #0 - 8007eec: d002 beq.n 8007ef4 - LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->ooseq\n")); - tcp_free_ooseq(pcb); - 8007eee: 6878 ldr r0, [r7, #4] - 8007ef0: f000 f986 bl 8008200 - } -#endif /* TCP_QUEUE_OOSEQ */ - - /* Stop the retransmission timer as it will expect data on unacked - queue if it fires */ - pcb->rtime = -1; - 8007ef4: 687b ldr r3, [r7, #4] - 8007ef6: f64f 72ff movw r2, #65535 ; 0xffff - 8007efa: 861a strh r2, [r3, #48] ; 0x30 - - tcp_segs_free(pcb->unsent); - 8007efc: 687b ldr r3, [r7, #4] - 8007efe: 6edb ldr r3, [r3, #108] ; 0x6c - 8007f00: 4618 mov r0, r3 - 8007f02: f7ff fdc7 bl 8007a94 - tcp_segs_free(pcb->unacked); - 8007f06: 687b ldr r3, [r7, #4] - 8007f08: 6f1b ldr r3, [r3, #112] ; 0x70 - 8007f0a: 4618 mov r0, r3 - 8007f0c: f7ff fdc2 bl 8007a94 - pcb->unacked = pcb->unsent = NULL; - 8007f10: 687b ldr r3, [r7, #4] - 8007f12: 2200 movs r2, #0 - 8007f14: 66da str r2, [r3, #108] ; 0x6c - 8007f16: 687b ldr r3, [r7, #4] - 8007f18: 6eda ldr r2, [r3, #108] ; 0x6c - 8007f1a: 687b ldr r3, [r7, #4] - 8007f1c: 671a str r2, [r3, #112] ; 0x70 -#if TCP_OVERSIZE - pcb->unsent_oversize = 0; - 8007f1e: 687b ldr r3, [r7, #4] - 8007f20: 2200 movs r2, #0 - 8007f22: f8a3 2068 strh.w r2, [r3, #104] ; 0x68 -#endif /* TCP_OVERSIZE */ - } -} - 8007f26: 3708 adds r7, #8 - 8007f28: 46bd mov sp, r7 - 8007f2a: bd80 pop {r7, pc} - 8007f2c: 080166ac .word 0x080166ac - 8007f30: 08016cf8 .word 0x08016cf8 - 8007f34: 080166f0 .word 0x080166f0 - -08007f38 : - * @param pcblist PCB list to purge. - * @param pcb tcp_pcb to purge. The pcb itself is NOT deallocated! - */ -void -tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb) -{ - 8007f38: b580 push {r7, lr} - 8007f3a: b084 sub sp, #16 - 8007f3c: af00 add r7, sp, #0 - 8007f3e: 6078 str r0, [r7, #4] - 8007f40: 6039 str r1, [r7, #0] - LWIP_ASSERT("tcp_pcb_remove: invalid pcb", pcb != NULL); - 8007f42: 683b ldr r3, [r7, #0] - 8007f44: 2b00 cmp r3, #0 - 8007f46: d106 bne.n 8007f56 - 8007f48: 4b3e ldr r3, [pc, #248] ; (8008044 ) - 8007f4a: f640 0283 movw r2, #2179 ; 0x883 - 8007f4e: 493e ldr r1, [pc, #248] ; (8008048 ) - 8007f50: 483e ldr r0, [pc, #248] ; (800804c ) - 8007f52: f009 f8a9 bl 80110a8 - LWIP_ASSERT("tcp_pcb_remove: invalid pcblist", pcblist != NULL); - 8007f56: 687b ldr r3, [r7, #4] - 8007f58: 2b00 cmp r3, #0 - 8007f5a: d106 bne.n 8007f6a - 8007f5c: 4b39 ldr r3, [pc, #228] ; (8008044 ) - 8007f5e: f640 0284 movw r2, #2180 ; 0x884 - 8007f62: 493b ldr r1, [pc, #236] ; (8008050 ) - 8007f64: 4839 ldr r0, [pc, #228] ; (800804c ) - 8007f66: f009 f89f bl 80110a8 - - TCP_RMV(pcblist, pcb); - 8007f6a: 687b ldr r3, [r7, #4] - 8007f6c: 681b ldr r3, [r3, #0] - 8007f6e: 683a ldr r2, [r7, #0] - 8007f70: 429a cmp r2, r3 - 8007f72: d105 bne.n 8007f80 - 8007f74: 687b ldr r3, [r7, #4] - 8007f76: 681b ldr r3, [r3, #0] - 8007f78: 68da ldr r2, [r3, #12] - 8007f7a: 687b ldr r3, [r7, #4] - 8007f7c: 601a str r2, [r3, #0] - 8007f7e: e013 b.n 8007fa8 - 8007f80: 687b ldr r3, [r7, #4] - 8007f82: 681b ldr r3, [r3, #0] - 8007f84: 60fb str r3, [r7, #12] - 8007f86: e00c b.n 8007fa2 - 8007f88: 68fb ldr r3, [r7, #12] - 8007f8a: 68db ldr r3, [r3, #12] - 8007f8c: 683a ldr r2, [r7, #0] - 8007f8e: 429a cmp r2, r3 - 8007f90: d104 bne.n 8007f9c - 8007f92: 683b ldr r3, [r7, #0] - 8007f94: 68da ldr r2, [r3, #12] - 8007f96: 68fb ldr r3, [r7, #12] - 8007f98: 60da str r2, [r3, #12] - 8007f9a: e005 b.n 8007fa8 - 8007f9c: 68fb ldr r3, [r7, #12] - 8007f9e: 68db ldr r3, [r3, #12] - 8007fa0: 60fb str r3, [r7, #12] - 8007fa2: 68fb ldr r3, [r7, #12] - 8007fa4: 2b00 cmp r3, #0 - 8007fa6: d1ef bne.n 8007f88 - 8007fa8: 683b ldr r3, [r7, #0] - 8007faa: 2200 movs r2, #0 - 8007fac: 60da str r2, [r3, #12] - - tcp_pcb_purge(pcb); - 8007fae: 6838 ldr r0, [r7, #0] - 8007fb0: f7ff ff72 bl 8007e98 - - /* if there is an outstanding delayed ACKs, send it */ - if ((pcb->state != TIME_WAIT) && - 8007fb4: 683b ldr r3, [r7, #0] - 8007fb6: 7d1b ldrb r3, [r3, #20] - 8007fb8: 2b0a cmp r3, #10 - 8007fba: d013 beq.n 8007fe4 - (pcb->state != LISTEN) && - 8007fbc: 683b ldr r3, [r7, #0] - 8007fbe: 7d1b ldrb r3, [r3, #20] - if ((pcb->state != TIME_WAIT) && - 8007fc0: 2b01 cmp r3, #1 - 8007fc2: d00f beq.n 8007fe4 - (pcb->flags & TF_ACK_DELAY)) { - 8007fc4: 683b ldr r3, [r7, #0] - 8007fc6: 8b5b ldrh r3, [r3, #26] - 8007fc8: f003 0301 and.w r3, r3, #1 - (pcb->state != LISTEN) && - 8007fcc: 2b00 cmp r3, #0 - 8007fce: d009 beq.n 8007fe4 - tcp_ack_now(pcb); - 8007fd0: 683b ldr r3, [r7, #0] - 8007fd2: 8b5b ldrh r3, [r3, #26] - 8007fd4: f043 0302 orr.w r3, r3, #2 - 8007fd8: b29a uxth r2, r3 - 8007fda: 683b ldr r3, [r7, #0] - 8007fdc: 835a strh r2, [r3, #26] - tcp_output(pcb); - 8007fde: 6838 ldr r0, [r7, #0] - 8007fe0: f002 ff6e bl 800aec0 - } - - if (pcb->state != LISTEN) { - 8007fe4: 683b ldr r3, [r7, #0] - 8007fe6: 7d1b ldrb r3, [r3, #20] - 8007fe8: 2b01 cmp r3, #1 - 8007fea: d020 beq.n 800802e - LWIP_ASSERT("unsent segments leaking", pcb->unsent == NULL); - 8007fec: 683b ldr r3, [r7, #0] - 8007fee: 6edb ldr r3, [r3, #108] ; 0x6c - 8007ff0: 2b00 cmp r3, #0 - 8007ff2: d006 beq.n 8008002 - 8007ff4: 4b13 ldr r3, [pc, #76] ; (8008044 ) - 8007ff6: f640 0293 movw r2, #2195 ; 0x893 - 8007ffa: 4916 ldr r1, [pc, #88] ; (8008054 ) - 8007ffc: 4813 ldr r0, [pc, #76] ; (800804c ) - 8007ffe: f009 f853 bl 80110a8 - LWIP_ASSERT("unacked segments leaking", pcb->unacked == NULL); - 8008002: 683b ldr r3, [r7, #0] - 8008004: 6f1b ldr r3, [r3, #112] ; 0x70 - 8008006: 2b00 cmp r3, #0 - 8008008: d006 beq.n 8008018 - 800800a: 4b0e ldr r3, [pc, #56] ; (8008044 ) - 800800c: f640 0294 movw r2, #2196 ; 0x894 - 8008010: 4911 ldr r1, [pc, #68] ; (8008058 ) - 8008012: 480e ldr r0, [pc, #56] ; (800804c ) - 8008014: f009 f848 bl 80110a8 -#if TCP_QUEUE_OOSEQ - LWIP_ASSERT("ooseq segments leaking", pcb->ooseq == NULL); - 8008018: 683b ldr r3, [r7, #0] - 800801a: 6f5b ldr r3, [r3, #116] ; 0x74 - 800801c: 2b00 cmp r3, #0 - 800801e: d006 beq.n 800802e - 8008020: 4b08 ldr r3, [pc, #32] ; (8008044 ) - 8008022: f640 0296 movw r2, #2198 ; 0x896 - 8008026: 490d ldr r1, [pc, #52] ; (800805c ) - 8008028: 4808 ldr r0, [pc, #32] ; (800804c ) - 800802a: f009 f83d bl 80110a8 -#endif /* TCP_QUEUE_OOSEQ */ - } - - pcb->state = CLOSED; - 800802e: 683b ldr r3, [r7, #0] - 8008030: 2200 movs r2, #0 - 8008032: 751a strb r2, [r3, #20] - /* reset the local port to prevent the pcb from being 'bound' */ - pcb->local_port = 0; - 8008034: 683b ldr r3, [r7, #0] - 8008036: 2200 movs r2, #0 - 8008038: 82da strh r2, [r3, #22] - - LWIP_ASSERT("tcp_pcb_remove: tcp_pcbs_sane()", tcp_pcbs_sane()); -} - 800803a: bf00 nop - 800803c: 3710 adds r7, #16 - 800803e: 46bd mov sp, r7 - 8008040: bd80 pop {r7, pc} - 8008042: bf00 nop - 8008044: 080166ac .word 0x080166ac - 8008048: 08016d14 .word 0x08016d14 - 800804c: 080166f0 .word 0x080166f0 - 8008050: 08016d30 .word 0x08016d30 - 8008054: 08016d50 .word 0x08016d50 - 8008058: 08016d68 .word 0x08016d68 - 800805c: 08016d84 .word 0x08016d84 - -08008060 : - * - * @return u32_t pseudo random sequence number - */ -u32_t -tcp_next_iss(struct tcp_pcb *pcb) -{ - 8008060: b580 push {r7, lr} - 8008062: b082 sub sp, #8 - 8008064: af00 add r7, sp, #0 - 8008066: 6078 str r0, [r7, #4] - LWIP_ASSERT("tcp_next_iss: invalid pcb", pcb != NULL); - return LWIP_HOOK_TCP_ISN(&pcb->local_ip, pcb->local_port, &pcb->remote_ip, pcb->remote_port); -#else /* LWIP_HOOK_TCP_ISN */ - static u32_t iss = 6510; - - LWIP_ASSERT("tcp_next_iss: invalid pcb", pcb != NULL); - 8008068: 687b ldr r3, [r7, #4] - 800806a: 2b00 cmp r3, #0 - 800806c: d106 bne.n 800807c - 800806e: 4b0a ldr r3, [pc, #40] ; (8008098 ) - 8008070: f640 02af movw r2, #2223 ; 0x8af - 8008074: 4909 ldr r1, [pc, #36] ; (800809c ) - 8008076: 480a ldr r0, [pc, #40] ; (80080a0 ) - 8008078: f009 f816 bl 80110a8 - LWIP_UNUSED_ARG(pcb); - - iss += tcp_ticks; /* XXX */ - 800807c: 4b09 ldr r3, [pc, #36] ; (80080a4 ) - 800807e: 681a ldr r2, [r3, #0] - 8008080: 4b09 ldr r3, [pc, #36] ; (80080a8 ) - 8008082: 681b ldr r3, [r3, #0] - 8008084: 4413 add r3, r2 - 8008086: 4a07 ldr r2, [pc, #28] ; (80080a4 ) - 8008088: 6013 str r3, [r2, #0] - return iss; - 800808a: 4b06 ldr r3, [pc, #24] ; (80080a4 ) - 800808c: 681b ldr r3, [r3, #0] -#endif /* LWIP_HOOK_TCP_ISN */ -} - 800808e: 4618 mov r0, r3 - 8008090: 3708 adds r7, #8 - 8008092: 46bd mov sp, r7 - 8008094: bd80 pop {r7, pc} - 8008096: bf00 nop - 8008098: 080166ac .word 0x080166ac - 800809c: 08016d9c .word 0x08016d9c - 80080a0: 080166f0 .word 0x080166f0 - 80080a4: 20000024 .word 0x20000024 - 80080a8: 200099d4 .word 0x200099d4 - -080080ac : - * by calculating the minimum of TCP_MSS and the mtu (if set) of the target - * netif (if not NULL). - */ -u16_t -tcp_eff_send_mss_netif(u16_t sendmss, struct netif *outif, const ip_addr_t *dest) -{ - 80080ac: b580 push {r7, lr} - 80080ae: b086 sub sp, #24 - 80080b0: af00 add r7, sp, #0 - 80080b2: 4603 mov r3, r0 - 80080b4: 60b9 str r1, [r7, #8] - 80080b6: 607a str r2, [r7, #4] - 80080b8: 81fb strh r3, [r7, #14] - u16_t mss_s; - u16_t mtu; - - LWIP_UNUSED_ARG(dest); /* in case IPv6 is disabled */ - - LWIP_ASSERT("tcp_eff_send_mss_netif: invalid dst_ip", dest != NULL); - 80080ba: 687b ldr r3, [r7, #4] - 80080bc: 2b00 cmp r3, #0 - 80080be: d106 bne.n 80080ce - 80080c0: 4b14 ldr r3, [pc, #80] ; (8008114 ) - 80080c2: f640 02c5 movw r2, #2245 ; 0x8c5 - 80080c6: 4914 ldr r1, [pc, #80] ; (8008118 ) - 80080c8: 4814 ldr r0, [pc, #80] ; (800811c ) - 80080ca: f008 ffed bl 80110a8 - else -#endif /* LWIP_IPV4 */ -#endif /* LWIP_IPV6 */ -#if LWIP_IPV4 - { - if (outif == NULL) { - 80080ce: 68bb ldr r3, [r7, #8] - 80080d0: 2b00 cmp r3, #0 - 80080d2: d101 bne.n 80080d8 - return sendmss; - 80080d4: 89fb ldrh r3, [r7, #14] - 80080d6: e019 b.n 800810c - } - mtu = outif->mtu; - 80080d8: 68bb ldr r3, [r7, #8] - 80080da: 8d1b ldrh r3, [r3, #40] ; 0x28 - 80080dc: 82fb strh r3, [r7, #22] - } -#endif /* LWIP_IPV4 */ - - if (mtu != 0) { - 80080de: 8afb ldrh r3, [r7, #22] - 80080e0: 2b00 cmp r3, #0 - 80080e2: d012 beq.n 800810a - else -#endif /* LWIP_IPV4 */ -#endif /* LWIP_IPV6 */ -#if LWIP_IPV4 - { - offset = IP_HLEN + TCP_HLEN; - 80080e4: 2328 movs r3, #40 ; 0x28 - 80080e6: 82bb strh r3, [r7, #20] - } -#endif /* LWIP_IPV4 */ - mss_s = (mtu > offset) ? (u16_t)(mtu - offset) : 0; - 80080e8: 8afa ldrh r2, [r7, #22] - 80080ea: 8abb ldrh r3, [r7, #20] - 80080ec: 429a cmp r2, r3 - 80080ee: d904 bls.n 80080fa - 80080f0: 8afa ldrh r2, [r7, #22] - 80080f2: 8abb ldrh r3, [r7, #20] - 80080f4: 1ad3 subs r3, r2, r3 - 80080f6: b29b uxth r3, r3 - 80080f8: e000 b.n 80080fc - 80080fa: 2300 movs r3, #0 - 80080fc: 827b strh r3, [r7, #18] - /* RFC 1122, chap 4.2.2.6: - * Eff.snd.MSS = min(SendMSS+20, MMS_S) - TCPhdrsize - IPoptionsize - * We correct for TCP options in tcp_write(), and don't support IP options. - */ - sendmss = LWIP_MIN(sendmss, mss_s); - 80080fe: 8a7a ldrh r2, [r7, #18] - 8008100: 89fb ldrh r3, [r7, #14] - 8008102: 4293 cmp r3, r2 - 8008104: bf28 it cs - 8008106: 4613 movcs r3, r2 - 8008108: 81fb strh r3, [r7, #14] - } - return sendmss; - 800810a: 89fb ldrh r3, [r7, #14] -} - 800810c: 4618 mov r0, r3 - 800810e: 3718 adds r7, #24 - 8008110: 46bd mov sp, r7 - 8008112: bd80 pop {r7, pc} - 8008114: 080166ac .word 0x080166ac - 8008118: 08016db8 .word 0x08016db8 - 800811c: 080166f0 .word 0x080166f0 - -08008120 : -#endif /* TCP_CALCULATE_EFF_SEND_MSS */ - -/** Helper function for tcp_netif_ip_addr_changed() that iterates a pcb list */ -static void -tcp_netif_ip_addr_changed_pcblist(const ip_addr_t *old_addr, struct tcp_pcb *pcb_list) -{ - 8008120: b580 push {r7, lr} - 8008122: b084 sub sp, #16 - 8008124: af00 add r7, sp, #0 - 8008126: 6078 str r0, [r7, #4] - 8008128: 6039 str r1, [r7, #0] - struct tcp_pcb *pcb; - pcb = pcb_list; - 800812a: 683b ldr r3, [r7, #0] - 800812c: 60fb str r3, [r7, #12] - - LWIP_ASSERT("tcp_netif_ip_addr_changed_pcblist: invalid old_addr", old_addr != NULL); - 800812e: 687b ldr r3, [r7, #4] - 8008130: 2b00 cmp r3, #0 - 8008132: d119 bne.n 8008168 - 8008134: 4b10 ldr r3, [pc, #64] ; (8008178 ) - 8008136: f44f 6210 mov.w r2, #2304 ; 0x900 - 800813a: 4910 ldr r1, [pc, #64] ; (800817c ) - 800813c: 4810 ldr r0, [pc, #64] ; (8008180 ) - 800813e: f008 ffb3 bl 80110a8 - - while (pcb != NULL) { - 8008142: e011 b.n 8008168 - /* PCB bound to current local interface address? */ - if (ip_addr_cmp(&pcb->local_ip, old_addr) - 8008144: 68fb ldr r3, [r7, #12] - 8008146: 681a ldr r2, [r3, #0] - 8008148: 687b ldr r3, [r7, #4] - 800814a: 681b ldr r3, [r3, #0] - 800814c: 429a cmp r2, r3 - 800814e: d108 bne.n 8008162 - /* connections to link-local addresses must persist (RFC3927 ch. 1.9) */ - && (!IP_IS_V4_VAL(pcb->local_ip) || !ip4_addr_islinklocal(ip_2_ip4(&pcb->local_ip))) -#endif /* LWIP_AUTOIP */ - ) { - /* this connection must be aborted */ - struct tcp_pcb *next = pcb->next; - 8008150: 68fb ldr r3, [r7, #12] - 8008152: 68db ldr r3, [r3, #12] - 8008154: 60bb str r3, [r7, #8] - LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_set_ipaddr: aborting TCP pcb %p\n", (void *)pcb)); - tcp_abort(pcb); - 8008156: 68f8 ldr r0, [r7, #12] - 8008158: f7fe ffc6 bl 80070e8 - pcb = next; - 800815c: 68bb ldr r3, [r7, #8] - 800815e: 60fb str r3, [r7, #12] - 8008160: e002 b.n 8008168 - } else { - pcb = pcb->next; - 8008162: 68fb ldr r3, [r7, #12] - 8008164: 68db ldr r3, [r3, #12] - 8008166: 60fb str r3, [r7, #12] - while (pcb != NULL) { - 8008168: 68fb ldr r3, [r7, #12] - 800816a: 2b00 cmp r3, #0 - 800816c: d1ea bne.n 8008144 - } - } -} - 800816e: bf00 nop - 8008170: bf00 nop - 8008172: 3710 adds r7, #16 - 8008174: 46bd mov sp, r7 - 8008176: bd80 pop {r7, pc} - 8008178: 080166ac .word 0x080166ac - 800817c: 08016de0 .word 0x08016de0 - 8008180: 080166f0 .word 0x080166f0 - -08008184 : - * @param old_addr IP address of the netif before change - * @param new_addr IP address of the netif after change or NULL if netif has been removed - */ -void -tcp_netif_ip_addr_changed(const ip_addr_t *old_addr, const ip_addr_t *new_addr) -{ - 8008184: b580 push {r7, lr} - 8008186: b084 sub sp, #16 - 8008188: af00 add r7, sp, #0 - 800818a: 6078 str r0, [r7, #4] - 800818c: 6039 str r1, [r7, #0] - struct tcp_pcb_listen *lpcb; - - if (!ip_addr_isany(old_addr)) { - 800818e: 687b ldr r3, [r7, #4] - 8008190: 2b00 cmp r3, #0 - 8008192: d02a beq.n 80081ea - 8008194: 687b ldr r3, [r7, #4] - 8008196: 681b ldr r3, [r3, #0] - 8008198: 2b00 cmp r3, #0 - 800819a: d026 beq.n 80081ea - tcp_netif_ip_addr_changed_pcblist(old_addr, tcp_active_pcbs); - 800819c: 4b15 ldr r3, [pc, #84] ; (80081f4 ) - 800819e: 681b ldr r3, [r3, #0] - 80081a0: 4619 mov r1, r3 - 80081a2: 6878 ldr r0, [r7, #4] - 80081a4: f7ff ffbc bl 8008120 - tcp_netif_ip_addr_changed_pcblist(old_addr, tcp_bound_pcbs); - 80081a8: 4b13 ldr r3, [pc, #76] ; (80081f8 ) - 80081aa: 681b ldr r3, [r3, #0] - 80081ac: 4619 mov r1, r3 - 80081ae: 6878 ldr r0, [r7, #4] - 80081b0: f7ff ffb6 bl 8008120 - - if (!ip_addr_isany(new_addr)) { - 80081b4: 683b ldr r3, [r7, #0] - 80081b6: 2b00 cmp r3, #0 - 80081b8: d017 beq.n 80081ea - 80081ba: 683b ldr r3, [r7, #0] - 80081bc: 681b ldr r3, [r3, #0] - 80081be: 2b00 cmp r3, #0 - 80081c0: d013 beq.n 80081ea - /* PCB bound to current local interface address? */ - for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { - 80081c2: 4b0e ldr r3, [pc, #56] ; (80081fc ) - 80081c4: 681b ldr r3, [r3, #0] - 80081c6: 60fb str r3, [r7, #12] - 80081c8: e00c b.n 80081e4 - /* PCB bound to current local interface address? */ - if (ip_addr_cmp(&lpcb->local_ip, old_addr)) { - 80081ca: 68fb ldr r3, [r7, #12] - 80081cc: 681a ldr r2, [r3, #0] - 80081ce: 687b ldr r3, [r7, #4] - 80081d0: 681b ldr r3, [r3, #0] - 80081d2: 429a cmp r2, r3 - 80081d4: d103 bne.n 80081de - /* The PCB is listening to the old ipaddr and - * is set to listen to the new one instead */ - ip_addr_copy(lpcb->local_ip, *new_addr); - 80081d6: 683b ldr r3, [r7, #0] - 80081d8: 681a ldr r2, [r3, #0] - 80081da: 68fb ldr r3, [r7, #12] - 80081dc: 601a str r2, [r3, #0] - for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { - 80081de: 68fb ldr r3, [r7, #12] - 80081e0: 68db ldr r3, [r3, #12] - 80081e2: 60fb str r3, [r7, #12] - 80081e4: 68fb ldr r3, [r7, #12] - 80081e6: 2b00 cmp r3, #0 - 80081e8: d1ef bne.n 80081ca - } - } - } - } -} - 80081ea: bf00 nop - 80081ec: 3710 adds r7, #16 - 80081ee: 46bd mov sp, r7 - 80081f0: bd80 pop {r7, pc} - 80081f2: bf00 nop - 80081f4: 200099e0 .word 0x200099e0 - 80081f8: 200099d8 .word 0x200099d8 - 80081fc: 200099dc .word 0x200099dc - -08008200 : - -#if TCP_QUEUE_OOSEQ -/* Free all ooseq pbufs (and possibly reset SACK state) */ -void -tcp_free_ooseq(struct tcp_pcb *pcb) -{ - 8008200: b580 push {r7, lr} - 8008202: b082 sub sp, #8 - 8008204: af00 add r7, sp, #0 - 8008206: 6078 str r0, [r7, #4] - if (pcb->ooseq) { - 8008208: 687b ldr r3, [r7, #4] - 800820a: 6f5b ldr r3, [r3, #116] ; 0x74 - 800820c: 2b00 cmp r3, #0 - 800820e: d007 beq.n 8008220 - tcp_segs_free(pcb->ooseq); - 8008210: 687b ldr r3, [r7, #4] - 8008212: 6f5b ldr r3, [r3, #116] ; 0x74 - 8008214: 4618 mov r0, r3 - 8008216: f7ff fc3d bl 8007a94 - pcb->ooseq = NULL; - 800821a: 687b ldr r3, [r7, #4] - 800821c: 2200 movs r2, #0 - 800821e: 675a str r2, [r3, #116] ; 0x74 -#if LWIP_TCP_SACK_OUT - memset(pcb->rcv_sacks, 0, sizeof(pcb->rcv_sacks)); -#endif /* LWIP_TCP_SACK_OUT */ - } -} - 8008220: bf00 nop - 8008222: 3708 adds r7, #8 - 8008224: 46bd mov sp, r7 - 8008226: bd80 pop {r7, pc} - -08008228 : - * @param p received TCP segment to process (p->payload pointing to the TCP header) - * @param inp network interface on which this segment was received - */ -void -tcp_input(struct pbuf *p, struct netif *inp) -{ - 8008228: b590 push {r4, r7, lr} - 800822a: b08d sub sp, #52 ; 0x34 - 800822c: af04 add r7, sp, #16 - 800822e: 6078 str r0, [r7, #4] - 8008230: 6039 str r1, [r7, #0] - u8_t hdrlen_bytes; - err_t err; - - LWIP_UNUSED_ARG(inp); - LWIP_ASSERT_CORE_LOCKED(); - LWIP_ASSERT("tcp_input: invalid pbuf", p != NULL); - 8008232: 687b ldr r3, [r7, #4] - 8008234: 2b00 cmp r3, #0 - 8008236: d105 bne.n 8008244 - 8008238: 4b9b ldr r3, [pc, #620] ; (80084a8 ) - 800823a: 2283 movs r2, #131 ; 0x83 - 800823c: 499b ldr r1, [pc, #620] ; (80084ac ) - 800823e: 489c ldr r0, [pc, #624] ; (80084b0 ) - 8008240: f008 ff32 bl 80110a8 - PERF_START; - - TCP_STATS_INC(tcp.recv); - MIB2_STATS_INC(mib2.tcpinsegs); - - tcphdr = (struct tcp_hdr *)p->payload; - 8008244: 687b ldr r3, [r7, #4] - 8008246: 685b ldr r3, [r3, #4] - 8008248: 4a9a ldr r2, [pc, #616] ; (80084b4 ) - 800824a: 6013 str r3, [r2, #0] -#if TCP_INPUT_DEBUG - tcp_debug_print(tcphdr); -#endif - - /* Check that TCP header fits in payload */ - if (p->len < TCP_HLEN) { - 800824c: 687b ldr r3, [r7, #4] - 800824e: 895b ldrh r3, [r3, #10] - 8008250: 2b13 cmp r3, #19 - 8008252: f240 83d1 bls.w 80089f8 - TCP_STATS_INC(tcp.lenerr); - goto dropped; - } - - /* Don't even process incoming broadcasts/multicasts. */ - if (ip_addr_isbroadcast(ip_current_dest_addr(), ip_current_netif()) || - 8008256: 4b98 ldr r3, [pc, #608] ; (80084b8 ) - 8008258: 695b ldr r3, [r3, #20] - 800825a: 4a97 ldr r2, [pc, #604] ; (80084b8 ) - 800825c: 6812 ldr r2, [r2, #0] - 800825e: 4611 mov r1, r2 - 8008260: 4618 mov r0, r3 - 8008262: f007 fe29 bl 800feb8 - 8008266: 4603 mov r3, r0 - 8008268: 2b00 cmp r3, #0 - 800826a: f040 83c7 bne.w 80089fc - ip_addr_ismulticast(ip_current_dest_addr())) { - 800826e: 4b92 ldr r3, [pc, #584] ; (80084b8 ) - 8008270: 695b ldr r3, [r3, #20] - 8008272: f003 03f0 and.w r3, r3, #240 ; 0xf0 - if (ip_addr_isbroadcast(ip_current_dest_addr(), ip_current_netif()) || - 8008276: 2be0 cmp r3, #224 ; 0xe0 - 8008278: f000 83c0 beq.w 80089fc - } - } -#endif /* CHECKSUM_CHECK_TCP */ - - /* sanity-check header length */ - hdrlen_bytes = TCPH_HDRLEN_BYTES(tcphdr); - 800827c: 4b8d ldr r3, [pc, #564] ; (80084b4 ) - 800827e: 681b ldr r3, [r3, #0] - 8008280: 899b ldrh r3, [r3, #12] - 8008282: b29b uxth r3, r3 - 8008284: 4618 mov r0, r3 - 8008286: f7fc fe2d bl 8004ee4 - 800828a: 4603 mov r3, r0 - 800828c: 0b1b lsrs r3, r3, #12 - 800828e: b29b uxth r3, r3 - 8008290: b2db uxtb r3, r3 - 8008292: 009b lsls r3, r3, #2 - 8008294: 74bb strb r3, [r7, #18] - if ((hdrlen_bytes < TCP_HLEN) || (hdrlen_bytes > p->tot_len)) { - 8008296: 7cbb ldrb r3, [r7, #18] - 8008298: 2b13 cmp r3, #19 - 800829a: f240 83b1 bls.w 8008a00 - 800829e: 7cbb ldrb r3, [r7, #18] - 80082a0: b29a uxth r2, r3 - 80082a2: 687b ldr r3, [r7, #4] - 80082a4: 891b ldrh r3, [r3, #8] - 80082a6: 429a cmp r2, r3 - 80082a8: f200 83aa bhi.w 8008a00 - goto dropped; - } - - /* Move the payload pointer in the pbuf so that it points to the - TCP data instead of the TCP header. */ - tcphdr_optlen = (u16_t)(hdrlen_bytes - TCP_HLEN); - 80082ac: 7cbb ldrb r3, [r7, #18] - 80082ae: b29b uxth r3, r3 - 80082b0: 3b14 subs r3, #20 - 80082b2: b29a uxth r2, r3 - 80082b4: 4b81 ldr r3, [pc, #516] ; (80084bc ) - 80082b6: 801a strh r2, [r3, #0] - tcphdr_opt2 = NULL; - 80082b8: 4b81 ldr r3, [pc, #516] ; (80084c0 ) - 80082ba: 2200 movs r2, #0 - 80082bc: 601a str r2, [r3, #0] - if (p->len >= hdrlen_bytes) { - 80082be: 687b ldr r3, [r7, #4] - 80082c0: 895a ldrh r2, [r3, #10] - 80082c2: 7cbb ldrb r3, [r7, #18] - 80082c4: b29b uxth r3, r3 - 80082c6: 429a cmp r2, r3 - 80082c8: d309 bcc.n 80082de - /* all options are in the first pbuf */ - tcphdr_opt1len = tcphdr_optlen; - 80082ca: 4b7c ldr r3, [pc, #496] ; (80084bc ) - 80082cc: 881a ldrh r2, [r3, #0] - 80082ce: 4b7d ldr r3, [pc, #500] ; (80084c4 ) - 80082d0: 801a strh r2, [r3, #0] - pbuf_remove_header(p, hdrlen_bytes); /* cannot fail */ - 80082d2: 7cbb ldrb r3, [r7, #18] - 80082d4: 4619 mov r1, r3 - 80082d6: 6878 ldr r0, [r7, #4] - 80082d8: f7fe f8e8 bl 80064ac - 80082dc: e04e b.n 800837c - } else { - u16_t opt2len; - /* TCP header fits into first pbuf, options don't - data is in the next pbuf */ - /* there must be a next pbuf, due to hdrlen_bytes sanity check above */ - LWIP_ASSERT("p->next != NULL", p->next != NULL); - 80082de: 687b ldr r3, [r7, #4] - 80082e0: 681b ldr r3, [r3, #0] - 80082e2: 2b00 cmp r3, #0 - 80082e4: d105 bne.n 80082f2 - 80082e6: 4b70 ldr r3, [pc, #448] ; (80084a8 ) - 80082e8: 22c2 movs r2, #194 ; 0xc2 - 80082ea: 4977 ldr r1, [pc, #476] ; (80084c8 ) - 80082ec: 4870 ldr r0, [pc, #448] ; (80084b0 ) - 80082ee: f008 fedb bl 80110a8 - - /* advance over the TCP header (cannot fail) */ - pbuf_remove_header(p, TCP_HLEN); - 80082f2: 2114 movs r1, #20 - 80082f4: 6878 ldr r0, [r7, #4] - 80082f6: f7fe f8d9 bl 80064ac - - /* determine how long the first and second parts of the options are */ - tcphdr_opt1len = p->len; - 80082fa: 687b ldr r3, [r7, #4] - 80082fc: 895a ldrh r2, [r3, #10] - 80082fe: 4b71 ldr r3, [pc, #452] ; (80084c4 ) - 8008300: 801a strh r2, [r3, #0] - opt2len = (u16_t)(tcphdr_optlen - tcphdr_opt1len); - 8008302: 4b6e ldr r3, [pc, #440] ; (80084bc ) - 8008304: 881a ldrh r2, [r3, #0] - 8008306: 4b6f ldr r3, [pc, #444] ; (80084c4 ) - 8008308: 881b ldrh r3, [r3, #0] - 800830a: 1ad3 subs r3, r2, r3 - 800830c: 823b strh r3, [r7, #16] - - /* options continue in the next pbuf: set p to zero length and hide the - options in the next pbuf (adjusting p->tot_len) */ - pbuf_remove_header(p, tcphdr_opt1len); - 800830e: 4b6d ldr r3, [pc, #436] ; (80084c4 ) - 8008310: 881b ldrh r3, [r3, #0] - 8008312: 4619 mov r1, r3 - 8008314: 6878 ldr r0, [r7, #4] - 8008316: f7fe f8c9 bl 80064ac - - /* check that the options fit in the second pbuf */ - if (opt2len > p->next->len) { - 800831a: 687b ldr r3, [r7, #4] - 800831c: 681b ldr r3, [r3, #0] - 800831e: 895b ldrh r3, [r3, #10] - 8008320: 8a3a ldrh r2, [r7, #16] - 8008322: 429a cmp r2, r3 - 8008324: f200 836e bhi.w 8008a04 - TCP_STATS_INC(tcp.lenerr); - goto dropped; - } - - /* remember the pointer to the second part of the options */ - tcphdr_opt2 = (u8_t *)p->next->payload; - 8008328: 687b ldr r3, [r7, #4] - 800832a: 681b ldr r3, [r3, #0] - 800832c: 685b ldr r3, [r3, #4] - 800832e: 4a64 ldr r2, [pc, #400] ; (80084c0 ) - 8008330: 6013 str r3, [r2, #0] - - /* advance p->next to point after the options, and manually - adjust p->tot_len to keep it consistent with the changed p->next */ - pbuf_remove_header(p->next, opt2len); - 8008332: 687b ldr r3, [r7, #4] - 8008334: 681b ldr r3, [r3, #0] - 8008336: 8a3a ldrh r2, [r7, #16] - 8008338: 4611 mov r1, r2 - 800833a: 4618 mov r0, r3 - 800833c: f7fe f8b6 bl 80064ac - p->tot_len = (u16_t)(p->tot_len - opt2len); - 8008340: 687b ldr r3, [r7, #4] - 8008342: 891a ldrh r2, [r3, #8] - 8008344: 8a3b ldrh r3, [r7, #16] - 8008346: 1ad3 subs r3, r2, r3 - 8008348: b29a uxth r2, r3 - 800834a: 687b ldr r3, [r7, #4] - 800834c: 811a strh r2, [r3, #8] - - LWIP_ASSERT("p->len == 0", p->len == 0); - 800834e: 687b ldr r3, [r7, #4] - 8008350: 895b ldrh r3, [r3, #10] - 8008352: 2b00 cmp r3, #0 - 8008354: d005 beq.n 8008362 - 8008356: 4b54 ldr r3, [pc, #336] ; (80084a8 ) - 8008358: 22df movs r2, #223 ; 0xdf - 800835a: 495c ldr r1, [pc, #368] ; (80084cc ) - 800835c: 4854 ldr r0, [pc, #336] ; (80084b0 ) - 800835e: f008 fea3 bl 80110a8 - LWIP_ASSERT("p->tot_len == p->next->tot_len", p->tot_len == p->next->tot_len); - 8008362: 687b ldr r3, [r7, #4] - 8008364: 891a ldrh r2, [r3, #8] - 8008366: 687b ldr r3, [r7, #4] - 8008368: 681b ldr r3, [r3, #0] - 800836a: 891b ldrh r3, [r3, #8] - 800836c: 429a cmp r2, r3 - 800836e: d005 beq.n 800837c - 8008370: 4b4d ldr r3, [pc, #308] ; (80084a8 ) - 8008372: 22e0 movs r2, #224 ; 0xe0 - 8008374: 4956 ldr r1, [pc, #344] ; (80084d0 ) - 8008376: 484e ldr r0, [pc, #312] ; (80084b0 ) - 8008378: f008 fe96 bl 80110a8 - } - - /* Convert fields in TCP header to host byte order. */ - tcphdr->src = lwip_ntohs(tcphdr->src); - 800837c: 4b4d ldr r3, [pc, #308] ; (80084b4 ) - 800837e: 681b ldr r3, [r3, #0] - 8008380: 881b ldrh r3, [r3, #0] - 8008382: b29b uxth r3, r3 - 8008384: 4a4b ldr r2, [pc, #300] ; (80084b4 ) - 8008386: 6814 ldr r4, [r2, #0] - 8008388: 4618 mov r0, r3 - 800838a: f7fc fdab bl 8004ee4 - 800838e: 4603 mov r3, r0 - 8008390: 8023 strh r3, [r4, #0] - tcphdr->dest = lwip_ntohs(tcphdr->dest); - 8008392: 4b48 ldr r3, [pc, #288] ; (80084b4 ) - 8008394: 681b ldr r3, [r3, #0] - 8008396: 885b ldrh r3, [r3, #2] - 8008398: b29b uxth r3, r3 - 800839a: 4a46 ldr r2, [pc, #280] ; (80084b4 ) - 800839c: 6814 ldr r4, [r2, #0] - 800839e: 4618 mov r0, r3 - 80083a0: f7fc fda0 bl 8004ee4 - 80083a4: 4603 mov r3, r0 - 80083a6: 8063 strh r3, [r4, #2] - seqno = tcphdr->seqno = lwip_ntohl(tcphdr->seqno); - 80083a8: 4b42 ldr r3, [pc, #264] ; (80084b4 ) - 80083aa: 681b ldr r3, [r3, #0] - 80083ac: 685b ldr r3, [r3, #4] - 80083ae: 4a41 ldr r2, [pc, #260] ; (80084b4 ) - 80083b0: 6814 ldr r4, [r2, #0] - 80083b2: 4618 mov r0, r3 - 80083b4: f7fc fdab bl 8004f0e - 80083b8: 4603 mov r3, r0 - 80083ba: 6063 str r3, [r4, #4] - 80083bc: 6863 ldr r3, [r4, #4] - 80083be: 4a45 ldr r2, [pc, #276] ; (80084d4 ) - 80083c0: 6013 str r3, [r2, #0] - ackno = tcphdr->ackno = lwip_ntohl(tcphdr->ackno); - 80083c2: 4b3c ldr r3, [pc, #240] ; (80084b4 ) - 80083c4: 681b ldr r3, [r3, #0] - 80083c6: 689b ldr r3, [r3, #8] - 80083c8: 4a3a ldr r2, [pc, #232] ; (80084b4 ) - 80083ca: 6814 ldr r4, [r2, #0] - 80083cc: 4618 mov r0, r3 - 80083ce: f7fc fd9e bl 8004f0e - 80083d2: 4603 mov r3, r0 - 80083d4: 60a3 str r3, [r4, #8] - 80083d6: 68a3 ldr r3, [r4, #8] - 80083d8: 4a3f ldr r2, [pc, #252] ; (80084d8 ) - 80083da: 6013 str r3, [r2, #0] - tcphdr->wnd = lwip_ntohs(tcphdr->wnd); - 80083dc: 4b35 ldr r3, [pc, #212] ; (80084b4 ) - 80083de: 681b ldr r3, [r3, #0] - 80083e0: 89db ldrh r3, [r3, #14] - 80083e2: b29b uxth r3, r3 - 80083e4: 4a33 ldr r2, [pc, #204] ; (80084b4 ) - 80083e6: 6814 ldr r4, [r2, #0] - 80083e8: 4618 mov r0, r3 - 80083ea: f7fc fd7b bl 8004ee4 - 80083ee: 4603 mov r3, r0 - 80083f0: 81e3 strh r3, [r4, #14] - - flags = TCPH_FLAGS(tcphdr); - 80083f2: 4b30 ldr r3, [pc, #192] ; (80084b4 ) - 80083f4: 681b ldr r3, [r3, #0] - 80083f6: 899b ldrh r3, [r3, #12] - 80083f8: b29b uxth r3, r3 - 80083fa: 4618 mov r0, r3 - 80083fc: f7fc fd72 bl 8004ee4 - 8008400: 4603 mov r3, r0 - 8008402: b2db uxtb r3, r3 - 8008404: f003 033f and.w r3, r3, #63 ; 0x3f - 8008408: b2da uxtb r2, r3 - 800840a: 4b34 ldr r3, [pc, #208] ; (80084dc ) - 800840c: 701a strb r2, [r3, #0] - tcplen = p->tot_len; - 800840e: 687b ldr r3, [r7, #4] - 8008410: 891a ldrh r2, [r3, #8] - 8008412: 4b33 ldr r3, [pc, #204] ; (80084e0 ) - 8008414: 801a strh r2, [r3, #0] - if (flags & (TCP_FIN | TCP_SYN)) { - 8008416: 4b31 ldr r3, [pc, #196] ; (80084dc ) - 8008418: 781b ldrb r3, [r3, #0] - 800841a: f003 0303 and.w r3, r3, #3 - 800841e: 2b00 cmp r3, #0 - 8008420: d00c beq.n 800843c - tcplen++; - 8008422: 4b2f ldr r3, [pc, #188] ; (80084e0 ) - 8008424: 881b ldrh r3, [r3, #0] - 8008426: 3301 adds r3, #1 - 8008428: b29a uxth r2, r3 - 800842a: 4b2d ldr r3, [pc, #180] ; (80084e0 ) - 800842c: 801a strh r2, [r3, #0] - if (tcplen < p->tot_len) { - 800842e: 687b ldr r3, [r7, #4] - 8008430: 891a ldrh r2, [r3, #8] - 8008432: 4b2b ldr r3, [pc, #172] ; (80084e0 ) - 8008434: 881b ldrh r3, [r3, #0] - 8008436: 429a cmp r2, r3 - 8008438: f200 82e6 bhi.w 8008a08 - } - } - - /* Demultiplex an incoming segment. First, we check if it is destined - for an active connection. */ - prev = NULL; - 800843c: 2300 movs r3, #0 - 800843e: 61bb str r3, [r7, #24] - - for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { - 8008440: 4b28 ldr r3, [pc, #160] ; (80084e4 ) - 8008442: 681b ldr r3, [r3, #0] - 8008444: 61fb str r3, [r7, #28] - 8008446: e09d b.n 8008584 - LWIP_ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED); - 8008448: 69fb ldr r3, [r7, #28] - 800844a: 7d1b ldrb r3, [r3, #20] - 800844c: 2b00 cmp r3, #0 - 800844e: d105 bne.n 800845c - 8008450: 4b15 ldr r3, [pc, #84] ; (80084a8 ) - 8008452: 22fb movs r2, #251 ; 0xfb - 8008454: 4924 ldr r1, [pc, #144] ; (80084e8 ) - 8008456: 4816 ldr r0, [pc, #88] ; (80084b0 ) - 8008458: f008 fe26 bl 80110a8 - LWIP_ASSERT("tcp_input: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); - 800845c: 69fb ldr r3, [r7, #28] - 800845e: 7d1b ldrb r3, [r3, #20] - 8008460: 2b0a cmp r3, #10 - 8008462: d105 bne.n 8008470 - 8008464: 4b10 ldr r3, [pc, #64] ; (80084a8 ) - 8008466: 22fc movs r2, #252 ; 0xfc - 8008468: 4920 ldr r1, [pc, #128] ; (80084ec ) - 800846a: 4811 ldr r0, [pc, #68] ; (80084b0 ) - 800846c: f008 fe1c bl 80110a8 - LWIP_ASSERT("tcp_input: active pcb->state != LISTEN", pcb->state != LISTEN); - 8008470: 69fb ldr r3, [r7, #28] - 8008472: 7d1b ldrb r3, [r3, #20] - 8008474: 2b01 cmp r3, #1 - 8008476: d105 bne.n 8008484 - 8008478: 4b0b ldr r3, [pc, #44] ; (80084a8 ) - 800847a: 22fd movs r2, #253 ; 0xfd - 800847c: 491c ldr r1, [pc, #112] ; (80084f0 ) - 800847e: 480c ldr r0, [pc, #48] ; (80084b0 ) - 8008480: f008 fe12 bl 80110a8 - - /* check if PCB is bound to specific netif */ - if ((pcb->netif_idx != NETIF_NO_INDEX) && - 8008484: 69fb ldr r3, [r7, #28] - 8008486: 7a1b ldrb r3, [r3, #8] - 8008488: 2b00 cmp r3, #0 - 800848a: d033 beq.n 80084f4 - (pcb->netif_idx != netif_get_index(ip_data.current_input_netif))) { - 800848c: 69fb ldr r3, [r7, #28] - 800848e: 7a1a ldrb r2, [r3, #8] - 8008490: 4b09 ldr r3, [pc, #36] ; (80084b8 ) - 8008492: 685b ldr r3, [r3, #4] - 8008494: f893 3034 ldrb.w r3, [r3, #52] ; 0x34 - 8008498: 3301 adds r3, #1 - 800849a: b2db uxtb r3, r3 - if ((pcb->netif_idx != NETIF_NO_INDEX) && - 800849c: 429a cmp r2, r3 - 800849e: d029 beq.n 80084f4 - prev = pcb; - 80084a0: 69fb ldr r3, [r7, #28] - 80084a2: 61bb str r3, [r7, #24] - continue; - 80084a4: e06b b.n 800857e - 80084a6: bf00 nop - 80084a8: 08016e14 .word 0x08016e14 - 80084ac: 08016e48 .word 0x08016e48 - 80084b0: 08016e60 .word 0x08016e60 - 80084b4: 200099fc .word 0x200099fc - 80084b8: 20006444 .word 0x20006444 - 80084bc: 20009a00 .word 0x20009a00 - 80084c0: 20009a04 .word 0x20009a04 - 80084c4: 20009a02 .word 0x20009a02 - 80084c8: 08016e88 .word 0x08016e88 - 80084cc: 08016e98 .word 0x08016e98 - 80084d0: 08016ea4 .word 0x08016ea4 - 80084d4: 20009a0c .word 0x20009a0c - 80084d8: 20009a10 .word 0x20009a10 - 80084dc: 20009a18 .word 0x20009a18 - 80084e0: 20009a16 .word 0x20009a16 - 80084e4: 200099e0 .word 0x200099e0 - 80084e8: 08016ec4 .word 0x08016ec4 - 80084ec: 08016eec .word 0x08016eec - 80084f0: 08016f18 .word 0x08016f18 - } - - if (pcb->remote_port == tcphdr->src && - 80084f4: 69fb ldr r3, [r7, #28] - 80084f6: 8b1a ldrh r2, [r3, #24] - 80084f8: 4b72 ldr r3, [pc, #456] ; (80086c4 ) - 80084fa: 681b ldr r3, [r3, #0] - 80084fc: 881b ldrh r3, [r3, #0] - 80084fe: b29b uxth r3, r3 - 8008500: 429a cmp r2, r3 - 8008502: d13a bne.n 800857a - pcb->local_port == tcphdr->dest && - 8008504: 69fb ldr r3, [r7, #28] - 8008506: 8ada ldrh r2, [r3, #22] - 8008508: 4b6e ldr r3, [pc, #440] ; (80086c4 ) - 800850a: 681b ldr r3, [r3, #0] - 800850c: 885b ldrh r3, [r3, #2] - 800850e: b29b uxth r3, r3 - if (pcb->remote_port == tcphdr->src && - 8008510: 429a cmp r2, r3 - 8008512: d132 bne.n 800857a - ip_addr_cmp(&pcb->remote_ip, ip_current_src_addr()) && - 8008514: 69fb ldr r3, [r7, #28] - 8008516: 685a ldr r2, [r3, #4] - 8008518: 4b6b ldr r3, [pc, #428] ; (80086c8 ) - 800851a: 691b ldr r3, [r3, #16] - pcb->local_port == tcphdr->dest && - 800851c: 429a cmp r2, r3 - 800851e: d12c bne.n 800857a - ip_addr_cmp(&pcb->local_ip, ip_current_dest_addr())) { - 8008520: 69fb ldr r3, [r7, #28] - 8008522: 681a ldr r2, [r3, #0] - 8008524: 4b68 ldr r3, [pc, #416] ; (80086c8 ) - 8008526: 695b ldr r3, [r3, #20] - ip_addr_cmp(&pcb->remote_ip, ip_current_src_addr()) && - 8008528: 429a cmp r2, r3 - 800852a: d126 bne.n 800857a - /* Move this PCB to the front of the list so that subsequent - lookups will be faster (we exploit locality in TCP segment - arrivals). */ - LWIP_ASSERT("tcp_input: pcb->next != pcb (before cache)", pcb->next != pcb); - 800852c: 69fb ldr r3, [r7, #28] - 800852e: 68db ldr r3, [r3, #12] - 8008530: 69fa ldr r2, [r7, #28] - 8008532: 429a cmp r2, r3 - 8008534: d106 bne.n 8008544 - 8008536: 4b65 ldr r3, [pc, #404] ; (80086cc ) - 8008538: f240 120d movw r2, #269 ; 0x10d - 800853c: 4964 ldr r1, [pc, #400] ; (80086d0 ) - 800853e: 4865 ldr r0, [pc, #404] ; (80086d4 ) - 8008540: f008 fdb2 bl 80110a8 - if (prev != NULL) { - 8008544: 69bb ldr r3, [r7, #24] - 8008546: 2b00 cmp r3, #0 - 8008548: d00a beq.n 8008560 - prev->next = pcb->next; - 800854a: 69fb ldr r3, [r7, #28] - 800854c: 68da ldr r2, [r3, #12] - 800854e: 69bb ldr r3, [r7, #24] - 8008550: 60da str r2, [r3, #12] - pcb->next = tcp_active_pcbs; - 8008552: 4b61 ldr r3, [pc, #388] ; (80086d8 ) - 8008554: 681a ldr r2, [r3, #0] - 8008556: 69fb ldr r3, [r7, #28] - 8008558: 60da str r2, [r3, #12] - tcp_active_pcbs = pcb; - 800855a: 4a5f ldr r2, [pc, #380] ; (80086d8 ) - 800855c: 69fb ldr r3, [r7, #28] - 800855e: 6013 str r3, [r2, #0] - } else { - TCP_STATS_INC(tcp.cachehit); - } - LWIP_ASSERT("tcp_input: pcb->next != pcb (after cache)", pcb->next != pcb); - 8008560: 69fb ldr r3, [r7, #28] - 8008562: 68db ldr r3, [r3, #12] - 8008564: 69fa ldr r2, [r7, #28] - 8008566: 429a cmp r2, r3 - 8008568: d111 bne.n 800858e - 800856a: 4b58 ldr r3, [pc, #352] ; (80086cc ) - 800856c: f240 1215 movw r2, #277 ; 0x115 - 8008570: 495a ldr r1, [pc, #360] ; (80086dc ) - 8008572: 4858 ldr r0, [pc, #352] ; (80086d4 ) - 8008574: f008 fd98 bl 80110a8 - break; - 8008578: e009 b.n 800858e - } - prev = pcb; - 800857a: 69fb ldr r3, [r7, #28] - 800857c: 61bb str r3, [r7, #24] - for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { - 800857e: 69fb ldr r3, [r7, #28] - 8008580: 68db ldr r3, [r3, #12] - 8008582: 61fb str r3, [r7, #28] - 8008584: 69fb ldr r3, [r7, #28] - 8008586: 2b00 cmp r3, #0 - 8008588: f47f af5e bne.w 8008448 - 800858c: e000 b.n 8008590 - break; - 800858e: bf00 nop - } - - if (pcb == NULL) { - 8008590: 69fb ldr r3, [r7, #28] - 8008592: 2b00 cmp r3, #0 - 8008594: f040 80aa bne.w 80086ec - /* If it did not go to an active connection, we check the connections - in the TIME-WAIT state. */ - for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { - 8008598: 4b51 ldr r3, [pc, #324] ; (80086e0 ) - 800859a: 681b ldr r3, [r3, #0] - 800859c: 61fb str r3, [r7, #28] - 800859e: e03f b.n 8008620 - LWIP_ASSERT("tcp_input: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); - 80085a0: 69fb ldr r3, [r7, #28] - 80085a2: 7d1b ldrb r3, [r3, #20] - 80085a4: 2b0a cmp r3, #10 - 80085a6: d006 beq.n 80085b6 - 80085a8: 4b48 ldr r3, [pc, #288] ; (80086cc ) - 80085aa: f240 121f movw r2, #287 ; 0x11f - 80085ae: 494d ldr r1, [pc, #308] ; (80086e4 ) - 80085b0: 4848 ldr r0, [pc, #288] ; (80086d4 ) - 80085b2: f008 fd79 bl 80110a8 - - /* check if PCB is bound to specific netif */ - if ((pcb->netif_idx != NETIF_NO_INDEX) && - 80085b6: 69fb ldr r3, [r7, #28] - 80085b8: 7a1b ldrb r3, [r3, #8] - 80085ba: 2b00 cmp r3, #0 - 80085bc: d009 beq.n 80085d2 - (pcb->netif_idx != netif_get_index(ip_data.current_input_netif))) { - 80085be: 69fb ldr r3, [r7, #28] - 80085c0: 7a1a ldrb r2, [r3, #8] - 80085c2: 4b41 ldr r3, [pc, #260] ; (80086c8 ) - 80085c4: 685b ldr r3, [r3, #4] - 80085c6: f893 3034 ldrb.w r3, [r3, #52] ; 0x34 - 80085ca: 3301 adds r3, #1 - 80085cc: b2db uxtb r3, r3 - if ((pcb->netif_idx != NETIF_NO_INDEX) && - 80085ce: 429a cmp r2, r3 - 80085d0: d122 bne.n 8008618 - continue; - } - - if (pcb->remote_port == tcphdr->src && - 80085d2: 69fb ldr r3, [r7, #28] - 80085d4: 8b1a ldrh r2, [r3, #24] - 80085d6: 4b3b ldr r3, [pc, #236] ; (80086c4 ) - 80085d8: 681b ldr r3, [r3, #0] - 80085da: 881b ldrh r3, [r3, #0] - 80085dc: b29b uxth r3, r3 - 80085de: 429a cmp r2, r3 - 80085e0: d11b bne.n 800861a - pcb->local_port == tcphdr->dest && - 80085e2: 69fb ldr r3, [r7, #28] - 80085e4: 8ada ldrh r2, [r3, #22] - 80085e6: 4b37 ldr r3, [pc, #220] ; (80086c4 ) - 80085e8: 681b ldr r3, [r3, #0] - 80085ea: 885b ldrh r3, [r3, #2] - 80085ec: b29b uxth r3, r3 - if (pcb->remote_port == tcphdr->src && - 80085ee: 429a cmp r2, r3 - 80085f0: d113 bne.n 800861a - ip_addr_cmp(&pcb->remote_ip, ip_current_src_addr()) && - 80085f2: 69fb ldr r3, [r7, #28] - 80085f4: 685a ldr r2, [r3, #4] - 80085f6: 4b34 ldr r3, [pc, #208] ; (80086c8 ) - 80085f8: 691b ldr r3, [r3, #16] - pcb->local_port == tcphdr->dest && - 80085fa: 429a cmp r2, r3 - 80085fc: d10d bne.n 800861a - ip_addr_cmp(&pcb->local_ip, ip_current_dest_addr())) { - 80085fe: 69fb ldr r3, [r7, #28] - 8008600: 681a ldr r2, [r3, #0] - 8008602: 4b31 ldr r3, [pc, #196] ; (80086c8 ) - 8008604: 695b ldr r3, [r3, #20] - ip_addr_cmp(&pcb->remote_ip, ip_current_src_addr()) && - 8008606: 429a cmp r2, r3 - 8008608: d107 bne.n 800861a -#ifdef LWIP_HOOK_TCP_INPACKET_PCB - if (LWIP_HOOK_TCP_INPACKET_PCB(pcb, tcphdr, tcphdr_optlen, tcphdr_opt1len, - tcphdr_opt2, p) == ERR_OK) -#endif - { - tcp_timewait_input(pcb); - 800860a: 69f8 ldr r0, [r7, #28] - 800860c: f000 fb56 bl 8008cbc - } - pbuf_free(p); - 8008610: 6878 ldr r0, [r7, #4] - 8008612: f7fd ffd1 bl 80065b8 - return; - 8008616: e1fd b.n 8008a14 - continue; - 8008618: bf00 nop - for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { - 800861a: 69fb ldr r3, [r7, #28] - 800861c: 68db ldr r3, [r3, #12] - 800861e: 61fb str r3, [r7, #28] - 8008620: 69fb ldr r3, [r7, #28] - 8008622: 2b00 cmp r3, #0 - 8008624: d1bc bne.n 80085a0 - } - } - - /* Finally, if we still did not get a match, we check all PCBs that - are LISTENing for incoming connections. */ - prev = NULL; - 8008626: 2300 movs r3, #0 - 8008628: 61bb str r3, [r7, #24] - for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { - 800862a: 4b2f ldr r3, [pc, #188] ; (80086e8 ) - 800862c: 681b ldr r3, [r3, #0] - 800862e: 617b str r3, [r7, #20] - 8008630: e02a b.n 8008688 - /* check if PCB is bound to specific netif */ - if ((lpcb->netif_idx != NETIF_NO_INDEX) && - 8008632: 697b ldr r3, [r7, #20] - 8008634: 7a1b ldrb r3, [r3, #8] - 8008636: 2b00 cmp r3, #0 - 8008638: d00c beq.n 8008654 - (lpcb->netif_idx != netif_get_index(ip_data.current_input_netif))) { - 800863a: 697b ldr r3, [r7, #20] - 800863c: 7a1a ldrb r2, [r3, #8] - 800863e: 4b22 ldr r3, [pc, #136] ; (80086c8 ) - 8008640: 685b ldr r3, [r3, #4] - 8008642: f893 3034 ldrb.w r3, [r3, #52] ; 0x34 - 8008646: 3301 adds r3, #1 - 8008648: b2db uxtb r3, r3 - if ((lpcb->netif_idx != NETIF_NO_INDEX) && - 800864a: 429a cmp r2, r3 - 800864c: d002 beq.n 8008654 - prev = (struct tcp_pcb *)lpcb; - 800864e: 697b ldr r3, [r7, #20] - 8008650: 61bb str r3, [r7, #24] - continue; - 8008652: e016 b.n 8008682 - } - - if (lpcb->local_port == tcphdr->dest) { - 8008654: 697b ldr r3, [r7, #20] - 8008656: 8ada ldrh r2, [r3, #22] - 8008658: 4b1a ldr r3, [pc, #104] ; (80086c4 ) - 800865a: 681b ldr r3, [r3, #0] - 800865c: 885b ldrh r3, [r3, #2] - 800865e: b29b uxth r3, r3 - 8008660: 429a cmp r2, r3 - 8008662: d10c bne.n 800867e - lpcb_prev = prev; -#else /* SO_REUSE */ - break; -#endif /* SO_REUSE */ - } else if (IP_ADDR_PCB_VERSION_MATCH_EXACT(lpcb, ip_current_dest_addr())) { - if (ip_addr_cmp(&lpcb->local_ip, ip_current_dest_addr())) { - 8008664: 697b ldr r3, [r7, #20] - 8008666: 681a ldr r2, [r3, #0] - 8008668: 4b17 ldr r3, [pc, #92] ; (80086c8 ) - 800866a: 695b ldr r3, [r3, #20] - 800866c: 429a cmp r2, r3 - 800866e: d00f beq.n 8008690 - /* found an exact match */ - break; - } else if (ip_addr_isany(&lpcb->local_ip)) { - 8008670: 697b ldr r3, [r7, #20] - 8008672: 2b00 cmp r3, #0 - 8008674: d00d beq.n 8008692 - 8008676: 697b ldr r3, [r7, #20] - 8008678: 681b ldr r3, [r3, #0] - 800867a: 2b00 cmp r3, #0 - 800867c: d009 beq.n 8008692 - break; -#endif /* SO_REUSE */ - } - } - } - prev = (struct tcp_pcb *)lpcb; - 800867e: 697b ldr r3, [r7, #20] - 8008680: 61bb str r3, [r7, #24] - for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { - 8008682: 697b ldr r3, [r7, #20] - 8008684: 68db ldr r3, [r3, #12] - 8008686: 617b str r3, [r7, #20] - 8008688: 697b ldr r3, [r7, #20] - 800868a: 2b00 cmp r3, #0 - 800868c: d1d1 bne.n 8008632 - 800868e: e000 b.n 8008692 - break; - 8008690: bf00 nop - /* only pass to ANY if no specific local IP has been found */ - lpcb = lpcb_any; - prev = lpcb_prev; - } -#endif /* SO_REUSE */ - if (lpcb != NULL) { - 8008692: 697b ldr r3, [r7, #20] - 8008694: 2b00 cmp r3, #0 - 8008696: d029 beq.n 80086ec - /* Move this PCB to the front of the list so that subsequent - lookups will be faster (we exploit locality in TCP segment - arrivals). */ - if (prev != NULL) { - 8008698: 69bb ldr r3, [r7, #24] - 800869a: 2b00 cmp r3, #0 - 800869c: d00a beq.n 80086b4 - ((struct tcp_pcb_listen *)prev)->next = lpcb->next; - 800869e: 697b ldr r3, [r7, #20] - 80086a0: 68da ldr r2, [r3, #12] - 80086a2: 69bb ldr r3, [r7, #24] - 80086a4: 60da str r2, [r3, #12] - /* our successor is the remainder of the listening list */ - lpcb->next = tcp_listen_pcbs.listen_pcbs; - 80086a6: 4b10 ldr r3, [pc, #64] ; (80086e8 ) - 80086a8: 681a ldr r2, [r3, #0] - 80086aa: 697b ldr r3, [r7, #20] - 80086ac: 60da str r2, [r3, #12] - /* put this listening pcb at the head of the listening list */ - tcp_listen_pcbs.listen_pcbs = lpcb; - 80086ae: 4a0e ldr r2, [pc, #56] ; (80086e8 ) - 80086b0: 697b ldr r3, [r7, #20] - 80086b2: 6013 str r3, [r2, #0] -#ifdef LWIP_HOOK_TCP_INPACKET_PCB - if (LWIP_HOOK_TCP_INPACKET_PCB((struct tcp_pcb *)lpcb, tcphdr, tcphdr_optlen, - tcphdr_opt1len, tcphdr_opt2, p) == ERR_OK) -#endif - { - tcp_listen_input(lpcb); - 80086b4: 6978 ldr r0, [r7, #20] - 80086b6: f000 fa03 bl 8008ac0 - } - pbuf_free(p); - 80086ba: 6878 ldr r0, [r7, #4] - 80086bc: f7fd ff7c bl 80065b8 - return; - 80086c0: e1a8 b.n 8008a14 - 80086c2: bf00 nop - 80086c4: 200099fc .word 0x200099fc - 80086c8: 20006444 .word 0x20006444 - 80086cc: 08016e14 .word 0x08016e14 - 80086d0: 08016f40 .word 0x08016f40 - 80086d4: 08016e60 .word 0x08016e60 - 80086d8: 200099e0 .word 0x200099e0 - 80086dc: 08016f6c .word 0x08016f6c - 80086e0: 200099e4 .word 0x200099e4 - 80086e4: 08016f98 .word 0x08016f98 - 80086e8: 200099dc .word 0x200099dc - tcphdr_opt1len, tcphdr_opt2, p) != ERR_OK) { - pbuf_free(p); - return; - } -#endif - if (pcb != NULL) { - 80086ec: 69fb ldr r3, [r7, #28] - 80086ee: 2b00 cmp r3, #0 - 80086f0: f000 8158 beq.w 80089a4 -#if TCP_INPUT_DEBUG - tcp_debug_print_state(pcb->state); -#endif /* TCP_INPUT_DEBUG */ - - /* Set up a tcp_seg structure. */ - inseg.next = NULL; - 80086f4: 4b95 ldr r3, [pc, #596] ; (800894c ) - 80086f6: 2200 movs r2, #0 - 80086f8: 601a str r2, [r3, #0] - inseg.len = p->tot_len; - 80086fa: 687b ldr r3, [r7, #4] - 80086fc: 891a ldrh r2, [r3, #8] - 80086fe: 4b93 ldr r3, [pc, #588] ; (800894c ) - 8008700: 811a strh r2, [r3, #8] - inseg.p = p; - 8008702: 4a92 ldr r2, [pc, #584] ; (800894c ) - 8008704: 687b ldr r3, [r7, #4] - 8008706: 6053 str r3, [r2, #4] - inseg.tcphdr = tcphdr; - 8008708: 4b91 ldr r3, [pc, #580] ; (8008950 ) - 800870a: 681b ldr r3, [r3, #0] - 800870c: 4a8f ldr r2, [pc, #572] ; (800894c ) - 800870e: 60d3 str r3, [r2, #12] - - recv_data = NULL; - 8008710: 4b90 ldr r3, [pc, #576] ; (8008954 ) - 8008712: 2200 movs r2, #0 - 8008714: 601a str r2, [r3, #0] - recv_flags = 0; - 8008716: 4b90 ldr r3, [pc, #576] ; (8008958 ) - 8008718: 2200 movs r2, #0 - 800871a: 701a strb r2, [r3, #0] - recv_acked = 0; - 800871c: 4b8f ldr r3, [pc, #572] ; (800895c ) - 800871e: 2200 movs r2, #0 - 8008720: 801a strh r2, [r3, #0] - - if (flags & TCP_PSH) { - 8008722: 4b8f ldr r3, [pc, #572] ; (8008960 ) - 8008724: 781b ldrb r3, [r3, #0] - 8008726: f003 0308 and.w r3, r3, #8 - 800872a: 2b00 cmp r3, #0 - 800872c: d006 beq.n 800873c - p->flags |= PBUF_FLAG_PUSH; - 800872e: 687b ldr r3, [r7, #4] - 8008730: 7b5b ldrb r3, [r3, #13] - 8008732: f043 0301 orr.w r3, r3, #1 - 8008736: b2da uxtb r2, r3 - 8008738: 687b ldr r3, [r7, #4] - 800873a: 735a strb r2, [r3, #13] - } - - /* If there is data which was previously "refused" by upper layer */ - if (pcb->refused_data != NULL) { - 800873c: 69fb ldr r3, [r7, #28] - 800873e: 6f9b ldr r3, [r3, #120] ; 0x78 - 8008740: 2b00 cmp r3, #0 - 8008742: d017 beq.n 8008774 - if ((tcp_process_refused_data(pcb) == ERR_ABRT) || - 8008744: 69f8 ldr r0, [r7, #28] - 8008746: f7ff f929 bl 800799c - 800874a: 4603 mov r3, r0 - 800874c: f113 0f0d cmn.w r3, #13 - 8008750: d007 beq.n 8008762 - ((pcb->refused_data != NULL) && (tcplen > 0))) { - 8008752: 69fb ldr r3, [r7, #28] - 8008754: 6f9b ldr r3, [r3, #120] ; 0x78 - if ((tcp_process_refused_data(pcb) == ERR_ABRT) || - 8008756: 2b00 cmp r3, #0 - 8008758: d00c beq.n 8008774 - ((pcb->refused_data != NULL) && (tcplen > 0))) { - 800875a: 4b82 ldr r3, [pc, #520] ; (8008964 ) - 800875c: 881b ldrh r3, [r3, #0] - 800875e: 2b00 cmp r3, #0 - 8008760: d008 beq.n 8008774 - /* pcb has been aborted or refused data is still refused and the new - segment contains data */ - if (pcb->rcv_ann_wnd == 0) { - 8008762: 69fb ldr r3, [r7, #28] - 8008764: 8d5b ldrh r3, [r3, #42] ; 0x2a - 8008766: 2b00 cmp r3, #0 - 8008768: f040 80e3 bne.w 8008932 - /* this is a zero-window probe, we respond to it with current RCV.NXT - and drop the data segment */ - tcp_send_empty_ack(pcb); - 800876c: 69f8 ldr r0, [r7, #28] - 800876e: f003 f9ad bl 800bacc - } - TCP_STATS_INC(tcp.drop); - MIB2_STATS_INC(mib2.tcpinerrs); - goto aborted; - 8008772: e0de b.n 8008932 - } - } - tcp_input_pcb = pcb; - 8008774: 4a7c ldr r2, [pc, #496] ; (8008968 ) - 8008776: 69fb ldr r3, [r7, #28] - 8008778: 6013 str r3, [r2, #0] - err = tcp_process(pcb); - 800877a: 69f8 ldr r0, [r7, #28] - 800877c: f000 fb18 bl 8008db0 - 8008780: 4603 mov r3, r0 - 8008782: 74fb strb r3, [r7, #19] - /* A return value of ERR_ABRT means that tcp_abort() was called - and that the pcb has been freed. If so, we don't do anything. */ - if (err != ERR_ABRT) { - 8008784: f997 3013 ldrsb.w r3, [r7, #19] - 8008788: f113 0f0d cmn.w r3, #13 - 800878c: f000 80d3 beq.w 8008936 - if (recv_flags & TF_RESET) { - 8008790: 4b71 ldr r3, [pc, #452] ; (8008958 ) - 8008792: 781b ldrb r3, [r3, #0] - 8008794: f003 0308 and.w r3, r3, #8 - 8008798: 2b00 cmp r3, #0 - 800879a: d015 beq.n 80087c8 - /* TF_RESET means that the connection was reset by the other - end. We then call the error callback to inform the - application that the connection is dead before we - deallocate the PCB. */ - TCP_EVENT_ERR(pcb->state, pcb->errf, pcb->callback_arg, ERR_RST); - 800879c: 69fb ldr r3, [r7, #28] - 800879e: f8d3 3090 ldr.w r3, [r3, #144] ; 0x90 - 80087a2: 2b00 cmp r3, #0 - 80087a4: d008 beq.n 80087b8 - 80087a6: 69fb ldr r3, [r7, #28] - 80087a8: f8d3 3090 ldr.w r3, [r3, #144] ; 0x90 - 80087ac: 69fa ldr r2, [r7, #28] - 80087ae: 6912 ldr r2, [r2, #16] - 80087b0: f06f 010d mvn.w r1, #13 - 80087b4: 4610 mov r0, r2 - 80087b6: 4798 blx r3 - tcp_pcb_remove(&tcp_active_pcbs, pcb); - 80087b8: 69f9 ldr r1, [r7, #28] - 80087ba: 486c ldr r0, [pc, #432] ; (800896c ) - 80087bc: f7ff fbbc bl 8007f38 - tcp_free(pcb); - 80087c0: 69f8 ldr r0, [r7, #28] - 80087c2: f7fe f9a9 bl 8006b18 - 80087c6: e0da b.n 800897e - } else { - err = ERR_OK; - 80087c8: 2300 movs r3, #0 - 80087ca: 74fb strb r3, [r7, #19] - /* If the application has registered a "sent" function to be - called when new send buffer space is available, we call it - now. */ - if (recv_acked > 0) { - 80087cc: 4b63 ldr r3, [pc, #396] ; (800895c ) - 80087ce: 881b ldrh r3, [r3, #0] - 80087d0: 2b00 cmp r3, #0 - 80087d2: d01d beq.n 8008810 - while (acked > 0) { - acked16 = (u16_t)LWIP_MIN(acked, 0xffffu); - acked -= acked16; -#else - { - acked16 = recv_acked; - 80087d4: 4b61 ldr r3, [pc, #388] ; (800895c ) - 80087d6: 881b ldrh r3, [r3, #0] - 80087d8: 81fb strh r3, [r7, #14] -#endif - TCP_EVENT_SENT(pcb, (u16_t)acked16, err); - 80087da: 69fb ldr r3, [r7, #28] - 80087dc: f8d3 3080 ldr.w r3, [r3, #128] ; 0x80 - 80087e0: 2b00 cmp r3, #0 - 80087e2: d00a beq.n 80087fa - 80087e4: 69fb ldr r3, [r7, #28] - 80087e6: f8d3 3080 ldr.w r3, [r3, #128] ; 0x80 - 80087ea: 69fa ldr r2, [r7, #28] - 80087ec: 6910 ldr r0, [r2, #16] - 80087ee: 89fa ldrh r2, [r7, #14] - 80087f0: 69f9 ldr r1, [r7, #28] - 80087f2: 4798 blx r3 - 80087f4: 4603 mov r3, r0 - 80087f6: 74fb strb r3, [r7, #19] - 80087f8: e001 b.n 80087fe - 80087fa: 2300 movs r3, #0 - 80087fc: 74fb strb r3, [r7, #19] - if (err == ERR_ABRT) { - 80087fe: f997 3013 ldrsb.w r3, [r7, #19] - 8008802: f113 0f0d cmn.w r3, #13 - 8008806: f000 8098 beq.w 800893a - goto aborted; - } - } - recv_acked = 0; - 800880a: 4b54 ldr r3, [pc, #336] ; (800895c ) - 800880c: 2200 movs r2, #0 - 800880e: 801a strh r2, [r3, #0] - } - if (tcp_input_delayed_close(pcb)) { - 8008810: 69f8 ldr r0, [r7, #28] - 8008812: f000 f915 bl 8008a40 - 8008816: 4603 mov r3, r0 - 8008818: 2b00 cmp r3, #0 - 800881a: f040 8090 bne.w 800893e -#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE - while (recv_data != NULL) { - struct pbuf *rest = NULL; - pbuf_split_64k(recv_data, &rest); -#else /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ - if (recv_data != NULL) { - 800881e: 4b4d ldr r3, [pc, #308] ; (8008954 ) - 8008820: 681b ldr r3, [r3, #0] - 8008822: 2b00 cmp r3, #0 - 8008824: d041 beq.n 80088aa -#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ - - LWIP_ASSERT("pcb->refused_data == NULL", pcb->refused_data == NULL); - 8008826: 69fb ldr r3, [r7, #28] - 8008828: 6f9b ldr r3, [r3, #120] ; 0x78 - 800882a: 2b00 cmp r3, #0 - 800882c: d006 beq.n 800883c - 800882e: 4b50 ldr r3, [pc, #320] ; (8008970 ) - 8008830: f44f 72f3 mov.w r2, #486 ; 0x1e6 - 8008834: 494f ldr r1, [pc, #316] ; (8008974 ) - 8008836: 4850 ldr r0, [pc, #320] ; (8008978 ) - 8008838: f008 fc36 bl 80110a8 - if (pcb->flags & TF_RXCLOSED) { - 800883c: 69fb ldr r3, [r7, #28] - 800883e: 8b5b ldrh r3, [r3, #26] - 8008840: f003 0310 and.w r3, r3, #16 - 8008844: 2b00 cmp r3, #0 - 8008846: d008 beq.n 800885a - /* received data although already closed -> abort (send RST) to - notify the remote host that not all data has been processed */ - pbuf_free(recv_data); - 8008848: 4b42 ldr r3, [pc, #264] ; (8008954 ) - 800884a: 681b ldr r3, [r3, #0] - 800884c: 4618 mov r0, r3 - 800884e: f7fd feb3 bl 80065b8 -#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE - if (rest != NULL) { - pbuf_free(rest); - } -#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ - tcp_abort(pcb); - 8008852: 69f8 ldr r0, [r7, #28] - 8008854: f7fe fc48 bl 80070e8 - goto aborted; - 8008858: e091 b.n 800897e - } - - /* Notify application that data has been received. */ - TCP_EVENT_RECV(pcb, recv_data, ERR_OK, err); - 800885a: 69fb ldr r3, [r7, #28] - 800885c: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84 - 8008860: 2b00 cmp r3, #0 - 8008862: d00c beq.n 800887e - 8008864: 69fb ldr r3, [r7, #28] - 8008866: f8d3 4084 ldr.w r4, [r3, #132] ; 0x84 - 800886a: 69fb ldr r3, [r7, #28] - 800886c: 6918 ldr r0, [r3, #16] - 800886e: 4b39 ldr r3, [pc, #228] ; (8008954 ) - 8008870: 681a ldr r2, [r3, #0] - 8008872: 2300 movs r3, #0 - 8008874: 69f9 ldr r1, [r7, #28] - 8008876: 47a0 blx r4 - 8008878: 4603 mov r3, r0 - 800887a: 74fb strb r3, [r7, #19] - 800887c: e008 b.n 8008890 - 800887e: 4b35 ldr r3, [pc, #212] ; (8008954 ) - 8008880: 681a ldr r2, [r3, #0] - 8008882: 2300 movs r3, #0 - 8008884: 69f9 ldr r1, [r7, #28] - 8008886: 2000 movs r0, #0 - 8008888: f7ff f95e bl 8007b48 - 800888c: 4603 mov r3, r0 - 800888e: 74fb strb r3, [r7, #19] - if (err == ERR_ABRT) { - 8008890: f997 3013 ldrsb.w r3, [r7, #19] - 8008894: f113 0f0d cmn.w r3, #13 - 8008898: d053 beq.n 8008942 -#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ - goto aborted; - } - - /* If the upper layer can't receive this data, store it */ - if (err != ERR_OK) { - 800889a: f997 3013 ldrsb.w r3, [r7, #19] - 800889e: 2b00 cmp r3, #0 - 80088a0: d003 beq.n 80088aa -#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE - if (rest != NULL) { - pbuf_cat(recv_data, rest); - } -#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ - pcb->refused_data = recv_data; - 80088a2: 4b2c ldr r3, [pc, #176] ; (8008954 ) - 80088a4: 681a ldr r2, [r3, #0] - 80088a6: 69fb ldr r3, [r7, #28] - 80088a8: 679a str r2, [r3, #120] ; 0x78 - } - } - - /* If a FIN segment was received, we call the callback - function with a NULL buffer to indicate EOF. */ - if (recv_flags & TF_GOT_FIN) { - 80088aa: 4b2b ldr r3, [pc, #172] ; (8008958 ) - 80088ac: 781b ldrb r3, [r3, #0] - 80088ae: f003 0320 and.w r3, r3, #32 - 80088b2: 2b00 cmp r3, #0 - 80088b4: d030 beq.n 8008918 - if (pcb->refused_data != NULL) { - 80088b6: 69fb ldr r3, [r7, #28] - 80088b8: 6f9b ldr r3, [r3, #120] ; 0x78 - 80088ba: 2b00 cmp r3, #0 - 80088bc: d009 beq.n 80088d2 - /* Delay this if we have refused data. */ - pcb->refused_data->flags |= PBUF_FLAG_TCP_FIN; - 80088be: 69fb ldr r3, [r7, #28] - 80088c0: 6f9b ldr r3, [r3, #120] ; 0x78 - 80088c2: 7b5a ldrb r2, [r3, #13] - 80088c4: 69fb ldr r3, [r7, #28] - 80088c6: 6f9b ldr r3, [r3, #120] ; 0x78 - 80088c8: f042 0220 orr.w r2, r2, #32 - 80088cc: b2d2 uxtb r2, r2 - 80088ce: 735a strb r2, [r3, #13] - 80088d0: e022 b.n 8008918 - } else { - /* correct rcv_wnd as the application won't call tcp_recved() - for the FIN's seqno */ - if (pcb->rcv_wnd != TCP_WND_MAX(pcb)) { - 80088d2: 69fb ldr r3, [r7, #28] - 80088d4: 8d1b ldrh r3, [r3, #40] ; 0x28 - 80088d6: f5b3 6f06 cmp.w r3, #2144 ; 0x860 - 80088da: d005 beq.n 80088e8 - pcb->rcv_wnd++; - 80088dc: 69fb ldr r3, [r7, #28] - 80088de: 8d1b ldrh r3, [r3, #40] ; 0x28 - 80088e0: 3301 adds r3, #1 - 80088e2: b29a uxth r2, r3 - 80088e4: 69fb ldr r3, [r7, #28] - 80088e6: 851a strh r2, [r3, #40] ; 0x28 - } - TCP_EVENT_CLOSED(pcb, err); - 80088e8: 69fb ldr r3, [r7, #28] - 80088ea: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84 - 80088ee: 2b00 cmp r3, #0 - 80088f0: d00b beq.n 800890a - 80088f2: 69fb ldr r3, [r7, #28] - 80088f4: f8d3 4084 ldr.w r4, [r3, #132] ; 0x84 - 80088f8: 69fb ldr r3, [r7, #28] - 80088fa: 6918 ldr r0, [r3, #16] - 80088fc: 2300 movs r3, #0 - 80088fe: 2200 movs r2, #0 - 8008900: 69f9 ldr r1, [r7, #28] - 8008902: 47a0 blx r4 - 8008904: 4603 mov r3, r0 - 8008906: 74fb strb r3, [r7, #19] - 8008908: e001 b.n 800890e - 800890a: 2300 movs r3, #0 - 800890c: 74fb strb r3, [r7, #19] - if (err == ERR_ABRT) { - 800890e: f997 3013 ldrsb.w r3, [r7, #19] - 8008912: f113 0f0d cmn.w r3, #13 - 8008916: d016 beq.n 8008946 - goto aborted; - } - } - } - - tcp_input_pcb = NULL; - 8008918: 4b13 ldr r3, [pc, #76] ; (8008968 ) - 800891a: 2200 movs r2, #0 - 800891c: 601a str r2, [r3, #0] - if (tcp_input_delayed_close(pcb)) { - 800891e: 69f8 ldr r0, [r7, #28] - 8008920: f000 f88e bl 8008a40 - 8008924: 4603 mov r3, r0 - 8008926: 2b00 cmp r3, #0 - 8008928: d128 bne.n 800897c - goto aborted; - } - /* Try to send something out. */ - tcp_output(pcb); - 800892a: 69f8 ldr r0, [r7, #28] - 800892c: f002 fac8 bl 800aec0 - 8008930: e025 b.n 800897e - goto aborted; - 8008932: bf00 nop - 8008934: e023 b.n 800897e -#endif /* TCP_INPUT_DEBUG */ - } - } - /* Jump target if pcb has been aborted in a callback (by calling tcp_abort()). - Below this line, 'pcb' may not be dereferenced! */ -aborted: - 8008936: bf00 nop - 8008938: e021 b.n 800897e - goto aborted; - 800893a: bf00 nop - 800893c: e01f b.n 800897e - goto aborted; - 800893e: bf00 nop - 8008940: e01d b.n 800897e - goto aborted; - 8008942: bf00 nop - 8008944: e01b b.n 800897e - goto aborted; - 8008946: bf00 nop - 8008948: e019 b.n 800897e - 800894a: bf00 nop - 800894c: 200099ec .word 0x200099ec - 8008950: 200099fc .word 0x200099fc - 8008954: 20009a1c .word 0x20009a1c - 8008958: 20009a19 .word 0x20009a19 - 800895c: 20009a14 .word 0x20009a14 - 8008960: 20009a18 .word 0x20009a18 - 8008964: 20009a16 .word 0x20009a16 - 8008968: 20009a20 .word 0x20009a20 - 800896c: 200099e0 .word 0x200099e0 - 8008970: 08016e14 .word 0x08016e14 - 8008974: 08016fc8 .word 0x08016fc8 - 8008978: 08016e60 .word 0x08016e60 - goto aborted; - 800897c: bf00 nop - tcp_input_pcb = NULL; - 800897e: 4b27 ldr r3, [pc, #156] ; (8008a1c ) - 8008980: 2200 movs r2, #0 - 8008982: 601a str r2, [r3, #0] - recv_data = NULL; - 8008984: 4b26 ldr r3, [pc, #152] ; (8008a20 ) - 8008986: 2200 movs r2, #0 - 8008988: 601a str r2, [r3, #0] - - /* give up our reference to inseg.p */ - if (inseg.p != NULL) { - 800898a: 4b26 ldr r3, [pc, #152] ; (8008a24 ) - 800898c: 685b ldr r3, [r3, #4] - 800898e: 2b00 cmp r3, #0 - 8008990: d03f beq.n 8008a12 - pbuf_free(inseg.p); - 8008992: 4b24 ldr r3, [pc, #144] ; (8008a24 ) - 8008994: 685b ldr r3, [r3, #4] - 8008996: 4618 mov r0, r3 - 8008998: f7fd fe0e bl 80065b8 - inseg.p = NULL; - 800899c: 4b21 ldr r3, [pc, #132] ; (8008a24 ) - 800899e: 2200 movs r2, #0 - 80089a0: 605a str r2, [r3, #4] - pbuf_free(p); - } - - LWIP_ASSERT("tcp_input: tcp_pcbs_sane()", tcp_pcbs_sane()); - PERF_STOP("tcp_input"); - return; - 80089a2: e036 b.n 8008a12 - if (!(TCPH_FLAGS(tcphdr) & TCP_RST)) { - 80089a4: 4b20 ldr r3, [pc, #128] ; (8008a28 ) - 80089a6: 681b ldr r3, [r3, #0] - 80089a8: 899b ldrh r3, [r3, #12] - 80089aa: b29b uxth r3, r3 - 80089ac: 4618 mov r0, r3 - 80089ae: f7fc fa99 bl 8004ee4 - 80089b2: 4603 mov r3, r0 - 80089b4: b2db uxtb r3, r3 - 80089b6: f003 0304 and.w r3, r3, #4 - 80089ba: 2b00 cmp r3, #0 - 80089bc: d118 bne.n 80089f0 - tcp_rst(NULL, ackno, seqno + tcplen, ip_current_dest_addr(), - 80089be: 4b1b ldr r3, [pc, #108] ; (8008a2c ) - 80089c0: 6819 ldr r1, [r3, #0] - 80089c2: 4b1b ldr r3, [pc, #108] ; (8008a30 ) - 80089c4: 881b ldrh r3, [r3, #0] - 80089c6: 461a mov r2, r3 - 80089c8: 4b1a ldr r3, [pc, #104] ; (8008a34 ) - 80089ca: 681b ldr r3, [r3, #0] - 80089cc: 18d0 adds r0, r2, r3 - ip_current_src_addr(), tcphdr->dest, tcphdr->src); - 80089ce: 4b16 ldr r3, [pc, #88] ; (8008a28 ) - 80089d0: 681b ldr r3, [r3, #0] - tcp_rst(NULL, ackno, seqno + tcplen, ip_current_dest_addr(), - 80089d2: 885b ldrh r3, [r3, #2] - 80089d4: b29b uxth r3, r3 - ip_current_src_addr(), tcphdr->dest, tcphdr->src); - 80089d6: 4a14 ldr r2, [pc, #80] ; (8008a28 ) - 80089d8: 6812 ldr r2, [r2, #0] - tcp_rst(NULL, ackno, seqno + tcplen, ip_current_dest_addr(), - 80089da: 8812 ldrh r2, [r2, #0] - 80089dc: b292 uxth r2, r2 - 80089de: 9202 str r2, [sp, #8] - 80089e0: 9301 str r3, [sp, #4] - 80089e2: 4b15 ldr r3, [pc, #84] ; (8008a38 ) - 80089e4: 9300 str r3, [sp, #0] - 80089e6: 4b15 ldr r3, [pc, #84] ; (8008a3c ) - 80089e8: 4602 mov r2, r0 - 80089ea: 2000 movs r0, #0 - 80089ec: f003 f81c bl 800ba28 - pbuf_free(p); - 80089f0: 6878 ldr r0, [r7, #4] - 80089f2: f7fd fde1 bl 80065b8 - return; - 80089f6: e00c b.n 8008a12 - goto dropped; - 80089f8: bf00 nop - 80089fa: e006 b.n 8008a0a - goto dropped; - 80089fc: bf00 nop - 80089fe: e004 b.n 8008a0a - goto dropped; - 8008a00: bf00 nop - 8008a02: e002 b.n 8008a0a - goto dropped; - 8008a04: bf00 nop - 8008a06: e000 b.n 8008a0a - goto dropped; - 8008a08: bf00 nop -dropped: - TCP_STATS_INC(tcp.drop); - MIB2_STATS_INC(mib2.tcpinerrs); - pbuf_free(p); - 8008a0a: 6878 ldr r0, [r7, #4] - 8008a0c: f7fd fdd4 bl 80065b8 - 8008a10: e000 b.n 8008a14 - return; - 8008a12: bf00 nop -} - 8008a14: 3724 adds r7, #36 ; 0x24 - 8008a16: 46bd mov sp, r7 - 8008a18: bd90 pop {r4, r7, pc} - 8008a1a: bf00 nop - 8008a1c: 20009a20 .word 0x20009a20 - 8008a20: 20009a1c .word 0x20009a1c - 8008a24: 200099ec .word 0x200099ec - 8008a28: 200099fc .word 0x200099fc - 8008a2c: 20009a10 .word 0x20009a10 - 8008a30: 20009a16 .word 0x20009a16 - 8008a34: 20009a0c .word 0x20009a0c - 8008a38: 20006454 .word 0x20006454 - 8008a3c: 20006458 .word 0x20006458 - -08008a40 : - * any more. - * @returns 1 if the pcb has been closed and deallocated, 0 otherwise - */ -static int -tcp_input_delayed_close(struct tcp_pcb *pcb) -{ - 8008a40: b580 push {r7, lr} - 8008a42: b082 sub sp, #8 - 8008a44: af00 add r7, sp, #0 - 8008a46: 6078 str r0, [r7, #4] - LWIP_ASSERT("tcp_input_delayed_close: invalid pcb", pcb != NULL); - 8008a48: 687b ldr r3, [r7, #4] - 8008a4a: 2b00 cmp r3, #0 - 8008a4c: d106 bne.n 8008a5c - 8008a4e: 4b17 ldr r3, [pc, #92] ; (8008aac ) - 8008a50: f240 225a movw r2, #602 ; 0x25a - 8008a54: 4916 ldr r1, [pc, #88] ; (8008ab0 ) - 8008a56: 4817 ldr r0, [pc, #92] ; (8008ab4 ) - 8008a58: f008 fb26 bl 80110a8 - - if (recv_flags & TF_CLOSED) { - 8008a5c: 4b16 ldr r3, [pc, #88] ; (8008ab8 ) - 8008a5e: 781b ldrb r3, [r3, #0] - 8008a60: f003 0310 and.w r3, r3, #16 - 8008a64: 2b00 cmp r3, #0 - 8008a66: d01c beq.n 8008aa2 - /* The connection has been closed and we will deallocate the - PCB. */ - if (!(pcb->flags & TF_RXCLOSED)) { - 8008a68: 687b ldr r3, [r7, #4] - 8008a6a: 8b5b ldrh r3, [r3, #26] - 8008a6c: f003 0310 and.w r3, r3, #16 - 8008a70: 2b00 cmp r3, #0 - 8008a72: d10d bne.n 8008a90 - /* Connection closed although the application has only shut down the - tx side: call the PCB's err callback and indicate the closure to - ensure the application doesn't continue using the PCB. */ - TCP_EVENT_ERR(pcb->state, pcb->errf, pcb->callback_arg, ERR_CLSD); - 8008a74: 687b ldr r3, [r7, #4] - 8008a76: f8d3 3090 ldr.w r3, [r3, #144] ; 0x90 - 8008a7a: 2b00 cmp r3, #0 - 8008a7c: d008 beq.n 8008a90 - 8008a7e: 687b ldr r3, [r7, #4] - 8008a80: f8d3 3090 ldr.w r3, [r3, #144] ; 0x90 - 8008a84: 687a ldr r2, [r7, #4] - 8008a86: 6912 ldr r2, [r2, #16] - 8008a88: f06f 010e mvn.w r1, #14 - 8008a8c: 4610 mov r0, r2 - 8008a8e: 4798 blx r3 - } - tcp_pcb_remove(&tcp_active_pcbs, pcb); - 8008a90: 6879 ldr r1, [r7, #4] - 8008a92: 480a ldr r0, [pc, #40] ; (8008abc ) - 8008a94: f7ff fa50 bl 8007f38 - tcp_free(pcb); - 8008a98: 6878 ldr r0, [r7, #4] - 8008a9a: f7fe f83d bl 8006b18 - return 1; - 8008a9e: 2301 movs r3, #1 - 8008aa0: e000 b.n 8008aa4 - } - return 0; - 8008aa2: 2300 movs r3, #0 -} - 8008aa4: 4618 mov r0, r3 - 8008aa6: 3708 adds r7, #8 - 8008aa8: 46bd mov sp, r7 - 8008aaa: bd80 pop {r7, pc} - 8008aac: 08016e14 .word 0x08016e14 - 8008ab0: 08016fe4 .word 0x08016fe4 - 8008ab4: 08016e60 .word 0x08016e60 - 8008ab8: 20009a19 .word 0x20009a19 - 8008abc: 200099e0 .word 0x200099e0 - -08008ac0 : - * @note the segment which arrived is saved in global variables, therefore only the pcb - * involved is passed as a parameter to this function - */ -static void -tcp_listen_input(struct tcp_pcb_listen *pcb) -{ - 8008ac0: b590 push {r4, r7, lr} - 8008ac2: b08b sub sp, #44 ; 0x2c - 8008ac4: af04 add r7, sp, #16 - 8008ac6: 6078 str r0, [r7, #4] - struct tcp_pcb *npcb; - u32_t iss; - err_t rc; - - if (flags & TCP_RST) { - 8008ac8: 4b6f ldr r3, [pc, #444] ; (8008c88 ) - 8008aca: 781b ldrb r3, [r3, #0] - 8008acc: f003 0304 and.w r3, r3, #4 - 8008ad0: 2b00 cmp r3, #0 - 8008ad2: f040 80d2 bne.w 8008c7a - /* An incoming RST should be ignored. Return. */ - return; - } - - LWIP_ASSERT("tcp_listen_input: invalid pcb", pcb != NULL); - 8008ad6: 687b ldr r3, [r7, #4] - 8008ad8: 2b00 cmp r3, #0 - 8008ada: d106 bne.n 8008aea - 8008adc: 4b6b ldr r3, [pc, #428] ; (8008c8c ) - 8008ade: f240 2281 movw r2, #641 ; 0x281 - 8008ae2: 496b ldr r1, [pc, #428] ; (8008c90 ) - 8008ae4: 486b ldr r0, [pc, #428] ; (8008c94 ) - 8008ae6: f008 fadf bl 80110a8 - - /* In the LISTEN state, we check for incoming SYN segments, - creates a new PCB, and responds with a SYN|ACK. */ - if (flags & TCP_ACK) { - 8008aea: 4b67 ldr r3, [pc, #412] ; (8008c88 ) - 8008aec: 781b ldrb r3, [r3, #0] - 8008aee: f003 0310 and.w r3, r3, #16 - 8008af2: 2b00 cmp r3, #0 - 8008af4: d019 beq.n 8008b2a - /* For incoming segments with the ACK flag set, respond with a - RST. */ - LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_listen_input: ACK in LISTEN, sending reset\n")); - tcp_rst((const struct tcp_pcb *)pcb, ackno, seqno + tcplen, ip_current_dest_addr(), - 8008af6: 4b68 ldr r3, [pc, #416] ; (8008c98 ) - 8008af8: 6819 ldr r1, [r3, #0] - 8008afa: 4b68 ldr r3, [pc, #416] ; (8008c9c ) - 8008afc: 881b ldrh r3, [r3, #0] - 8008afe: 461a mov r2, r3 - 8008b00: 4b67 ldr r3, [pc, #412] ; (8008ca0 ) - 8008b02: 681b ldr r3, [r3, #0] - 8008b04: 18d0 adds r0, r2, r3 - ip_current_src_addr(), tcphdr->dest, tcphdr->src); - 8008b06: 4b67 ldr r3, [pc, #412] ; (8008ca4 ) - 8008b08: 681b ldr r3, [r3, #0] - tcp_rst((const struct tcp_pcb *)pcb, ackno, seqno + tcplen, ip_current_dest_addr(), - 8008b0a: 885b ldrh r3, [r3, #2] - 8008b0c: b29b uxth r3, r3 - ip_current_src_addr(), tcphdr->dest, tcphdr->src); - 8008b0e: 4a65 ldr r2, [pc, #404] ; (8008ca4 ) - 8008b10: 6812 ldr r2, [r2, #0] - tcp_rst((const struct tcp_pcb *)pcb, ackno, seqno + tcplen, ip_current_dest_addr(), - 8008b12: 8812 ldrh r2, [r2, #0] - 8008b14: b292 uxth r2, r2 - 8008b16: 9202 str r2, [sp, #8] - 8008b18: 9301 str r3, [sp, #4] - 8008b1a: 4b63 ldr r3, [pc, #396] ; (8008ca8 ) - 8008b1c: 9300 str r3, [sp, #0] - 8008b1e: 4b63 ldr r3, [pc, #396] ; (8008cac ) - 8008b20: 4602 mov r2, r0 - 8008b22: 6878 ldr r0, [r7, #4] - 8008b24: f002 ff80 bl 800ba28 - tcp_abandon(npcb, 0); - return; - } - tcp_output(npcb); - } - return; - 8008b28: e0a9 b.n 8008c7e - } else if (flags & TCP_SYN) { - 8008b2a: 4b57 ldr r3, [pc, #348] ; (8008c88 ) - 8008b2c: 781b ldrb r3, [r3, #0] - 8008b2e: f003 0302 and.w r3, r3, #2 - 8008b32: 2b00 cmp r3, #0 - 8008b34: f000 80a3 beq.w 8008c7e - npcb = tcp_alloc(pcb->prio); - 8008b38: 687b ldr r3, [r7, #4] - 8008b3a: 7d5b ldrb r3, [r3, #21] - 8008b3c: 4618 mov r0, r3 - 8008b3e: f7ff f927 bl 8007d90 - 8008b42: 6178 str r0, [r7, #20] - if (npcb == NULL) { - 8008b44: 697b ldr r3, [r7, #20] - 8008b46: 2b00 cmp r3, #0 - 8008b48: d111 bne.n 8008b6e - TCP_EVENT_ACCEPT(pcb, NULL, pcb->callback_arg, ERR_MEM, err); - 8008b4a: 687b ldr r3, [r7, #4] - 8008b4c: 699b ldr r3, [r3, #24] - 8008b4e: 2b00 cmp r3, #0 - 8008b50: d00a beq.n 8008b68 - 8008b52: 687b ldr r3, [r7, #4] - 8008b54: 699b ldr r3, [r3, #24] - 8008b56: 687a ldr r2, [r7, #4] - 8008b58: 6910 ldr r0, [r2, #16] - 8008b5a: f04f 32ff mov.w r2, #4294967295 - 8008b5e: 2100 movs r1, #0 - 8008b60: 4798 blx r3 - 8008b62: 4603 mov r3, r0 - 8008b64: 73bb strb r3, [r7, #14] - return; - 8008b66: e08b b.n 8008c80 - TCP_EVENT_ACCEPT(pcb, NULL, pcb->callback_arg, ERR_MEM, err); - 8008b68: 23f0 movs r3, #240 ; 0xf0 - 8008b6a: 73bb strb r3, [r7, #14] - return; - 8008b6c: e088 b.n 8008c80 - ip_addr_copy(npcb->local_ip, *ip_current_dest_addr()); - 8008b6e: 4b50 ldr r3, [pc, #320] ; (8008cb0 ) - 8008b70: 695a ldr r2, [r3, #20] - 8008b72: 697b ldr r3, [r7, #20] - 8008b74: 601a str r2, [r3, #0] - ip_addr_copy(npcb->remote_ip, *ip_current_src_addr()); - 8008b76: 4b4e ldr r3, [pc, #312] ; (8008cb0 ) - 8008b78: 691a ldr r2, [r3, #16] - 8008b7a: 697b ldr r3, [r7, #20] - 8008b7c: 605a str r2, [r3, #4] - npcb->local_port = pcb->local_port; - 8008b7e: 687b ldr r3, [r7, #4] - 8008b80: 8ada ldrh r2, [r3, #22] - 8008b82: 697b ldr r3, [r7, #20] - 8008b84: 82da strh r2, [r3, #22] - npcb->remote_port = tcphdr->src; - 8008b86: 4b47 ldr r3, [pc, #284] ; (8008ca4 ) - 8008b88: 681b ldr r3, [r3, #0] - 8008b8a: 881b ldrh r3, [r3, #0] - 8008b8c: b29a uxth r2, r3 - 8008b8e: 697b ldr r3, [r7, #20] - 8008b90: 831a strh r2, [r3, #24] - npcb->state = SYN_RCVD; - 8008b92: 697b ldr r3, [r7, #20] - 8008b94: 2203 movs r2, #3 - 8008b96: 751a strb r2, [r3, #20] - npcb->rcv_nxt = seqno + 1; - 8008b98: 4b41 ldr r3, [pc, #260] ; (8008ca0 ) - 8008b9a: 681b ldr r3, [r3, #0] - 8008b9c: 1c5a adds r2, r3, #1 - 8008b9e: 697b ldr r3, [r7, #20] - 8008ba0: 625a str r2, [r3, #36] ; 0x24 - npcb->rcv_ann_right_edge = npcb->rcv_nxt; - 8008ba2: 697b ldr r3, [r7, #20] - 8008ba4: 6a5a ldr r2, [r3, #36] ; 0x24 - 8008ba6: 697b ldr r3, [r7, #20] - 8008ba8: 62da str r2, [r3, #44] ; 0x2c - iss = tcp_next_iss(npcb); - 8008baa: 6978 ldr r0, [r7, #20] - 8008bac: f7ff fa58 bl 8008060 - 8008bb0: 6138 str r0, [r7, #16] - npcb->snd_wl2 = iss; - 8008bb2: 697b ldr r3, [r7, #20] - 8008bb4: 693a ldr r2, [r7, #16] - 8008bb6: 659a str r2, [r3, #88] ; 0x58 - npcb->snd_nxt = iss; - 8008bb8: 697b ldr r3, [r7, #20] - 8008bba: 693a ldr r2, [r7, #16] - 8008bbc: 651a str r2, [r3, #80] ; 0x50 - npcb->lastack = iss; - 8008bbe: 697b ldr r3, [r7, #20] - 8008bc0: 693a ldr r2, [r7, #16] - 8008bc2: 645a str r2, [r3, #68] ; 0x44 - npcb->snd_lbb = iss; - 8008bc4: 697b ldr r3, [r7, #20] - 8008bc6: 693a ldr r2, [r7, #16] - 8008bc8: 65da str r2, [r3, #92] ; 0x5c - npcb->snd_wl1 = seqno - 1;/* initialise to seqno-1 to force window update */ - 8008bca: 4b35 ldr r3, [pc, #212] ; (8008ca0 ) - 8008bcc: 681b ldr r3, [r3, #0] - 8008bce: 1e5a subs r2, r3, #1 - 8008bd0: 697b ldr r3, [r7, #20] - 8008bd2: 655a str r2, [r3, #84] ; 0x54 - npcb->callback_arg = pcb->callback_arg; - 8008bd4: 687b ldr r3, [r7, #4] - 8008bd6: 691a ldr r2, [r3, #16] - 8008bd8: 697b ldr r3, [r7, #20] - 8008bda: 611a str r2, [r3, #16] - npcb->listener = pcb; - 8008bdc: 697b ldr r3, [r7, #20] - 8008bde: 687a ldr r2, [r7, #4] - 8008be0: 67da str r2, [r3, #124] ; 0x7c - npcb->so_options = pcb->so_options & SOF_INHERITED; - 8008be2: 687b ldr r3, [r7, #4] - 8008be4: 7a5b ldrb r3, [r3, #9] - 8008be6: f003 030c and.w r3, r3, #12 - 8008bea: b2da uxtb r2, r3 - 8008bec: 697b ldr r3, [r7, #20] - 8008bee: 725a strb r2, [r3, #9] - npcb->netif_idx = pcb->netif_idx; - 8008bf0: 687b ldr r3, [r7, #4] - 8008bf2: 7a1a ldrb r2, [r3, #8] - 8008bf4: 697b ldr r3, [r7, #20] - 8008bf6: 721a strb r2, [r3, #8] - TCP_REG_ACTIVE(npcb); - 8008bf8: 4b2e ldr r3, [pc, #184] ; (8008cb4 ) - 8008bfa: 681a ldr r2, [r3, #0] - 8008bfc: 697b ldr r3, [r7, #20] - 8008bfe: 60da str r2, [r3, #12] - 8008c00: 4a2c ldr r2, [pc, #176] ; (8008cb4 ) - 8008c02: 697b ldr r3, [r7, #20] - 8008c04: 6013 str r3, [r2, #0] - 8008c06: f003 f8d1 bl 800bdac - 8008c0a: 4b2b ldr r3, [pc, #172] ; (8008cb8 ) - 8008c0c: 2201 movs r2, #1 - 8008c0e: 701a strb r2, [r3, #0] - tcp_parseopt(npcb); - 8008c10: 6978 ldr r0, [r7, #20] - 8008c12: f001 fd8f bl 800a734 - npcb->snd_wnd = tcphdr->wnd; - 8008c16: 4b23 ldr r3, [pc, #140] ; (8008ca4 ) - 8008c18: 681b ldr r3, [r3, #0] - 8008c1a: 89db ldrh r3, [r3, #14] - 8008c1c: b29a uxth r2, r3 - 8008c1e: 697b ldr r3, [r7, #20] - 8008c20: f8a3 2060 strh.w r2, [r3, #96] ; 0x60 - npcb->snd_wnd_max = npcb->snd_wnd; - 8008c24: 697b ldr r3, [r7, #20] - 8008c26: f8b3 2060 ldrh.w r2, [r3, #96] ; 0x60 - 8008c2a: 697b ldr r3, [r7, #20] - 8008c2c: f8a3 2062 strh.w r2, [r3, #98] ; 0x62 - npcb->mss = tcp_eff_send_mss(npcb->mss, &npcb->local_ip, &npcb->remote_ip); - 8008c30: 697b ldr r3, [r7, #20] - 8008c32: 8e5c ldrh r4, [r3, #50] ; 0x32 - 8008c34: 697b ldr r3, [r7, #20] - 8008c36: 3304 adds r3, #4 - 8008c38: 4618 mov r0, r3 - 8008c3a: f006 fe89 bl 800f950 - 8008c3e: 4601 mov r1, r0 - 8008c40: 697b ldr r3, [r7, #20] - 8008c42: 3304 adds r3, #4 - 8008c44: 461a mov r2, r3 - 8008c46: 4620 mov r0, r4 - 8008c48: f7ff fa30 bl 80080ac - 8008c4c: 4603 mov r3, r0 - 8008c4e: 461a mov r2, r3 - 8008c50: 697b ldr r3, [r7, #20] - 8008c52: 865a strh r2, [r3, #50] ; 0x32 - rc = tcp_enqueue_flags(npcb, TCP_SYN | TCP_ACK); - 8008c54: 2112 movs r1, #18 - 8008c56: 6978 ldr r0, [r7, #20] - 8008c58: f002 f844 bl 800ace4 - 8008c5c: 4603 mov r3, r0 - 8008c5e: 73fb strb r3, [r7, #15] - if (rc != ERR_OK) { - 8008c60: f997 300f ldrsb.w r3, [r7, #15] - 8008c64: 2b00 cmp r3, #0 - 8008c66: d004 beq.n 8008c72 - tcp_abandon(npcb, 0); - 8008c68: 2100 movs r1, #0 - 8008c6a: 6978 ldr r0, [r7, #20] - 8008c6c: f7fe f97e bl 8006f6c - return; - 8008c70: e006 b.n 8008c80 - tcp_output(npcb); - 8008c72: 6978 ldr r0, [r7, #20] - 8008c74: f002 f924 bl 800aec0 - return; - 8008c78: e001 b.n 8008c7e - return; - 8008c7a: bf00 nop - 8008c7c: e000 b.n 8008c80 - return; - 8008c7e: bf00 nop -} - 8008c80: 371c adds r7, #28 - 8008c82: 46bd mov sp, r7 - 8008c84: bd90 pop {r4, r7, pc} - 8008c86: bf00 nop - 8008c88: 20009a18 .word 0x20009a18 - 8008c8c: 08016e14 .word 0x08016e14 - 8008c90: 0801700c .word 0x0801700c - 8008c94: 08016e60 .word 0x08016e60 - 8008c98: 20009a10 .word 0x20009a10 - 8008c9c: 20009a16 .word 0x20009a16 - 8008ca0: 20009a0c .word 0x20009a0c - 8008ca4: 200099fc .word 0x200099fc - 8008ca8: 20006454 .word 0x20006454 - 8008cac: 20006458 .word 0x20006458 - 8008cb0: 20006444 .word 0x20006444 - 8008cb4: 200099e0 .word 0x200099e0 - 8008cb8: 200099e8 .word 0x200099e8 - -08008cbc : - * @note the segment which arrived is saved in global variables, therefore only the pcb - * involved is passed as a parameter to this function - */ -static void -tcp_timewait_input(struct tcp_pcb *pcb) -{ - 8008cbc: b580 push {r7, lr} - 8008cbe: b086 sub sp, #24 - 8008cc0: af04 add r7, sp, #16 - 8008cc2: 6078 str r0, [r7, #4] - /* RFC 1337: in TIME_WAIT, ignore RST and ACK FINs + any 'acceptable' segments */ - /* RFC 793 3.9 Event Processing - Segment Arrives: - * - first check sequence number - we skip that one in TIME_WAIT (always - * acceptable since we only send ACKs) - * - second check the RST bit (... return) */ - if (flags & TCP_RST) { - 8008cc4: 4b2f ldr r3, [pc, #188] ; (8008d84 ) - 8008cc6: 781b ldrb r3, [r3, #0] - 8008cc8: f003 0304 and.w r3, r3, #4 - 8008ccc: 2b00 cmp r3, #0 - 8008cce: d153 bne.n 8008d78 - return; - } - - LWIP_ASSERT("tcp_timewait_input: invalid pcb", pcb != NULL); - 8008cd0: 687b ldr r3, [r7, #4] - 8008cd2: 2b00 cmp r3, #0 - 8008cd4: d106 bne.n 8008ce4 - 8008cd6: 4b2c ldr r3, [pc, #176] ; (8008d88 ) - 8008cd8: f240 22ee movw r2, #750 ; 0x2ee - 8008cdc: 492b ldr r1, [pc, #172] ; (8008d8c ) - 8008cde: 482c ldr r0, [pc, #176] ; (8008d90 ) - 8008ce0: f008 f9e2 bl 80110a8 - - /* - fourth, check the SYN bit, */ - if (flags & TCP_SYN) { - 8008ce4: 4b27 ldr r3, [pc, #156] ; (8008d84 ) - 8008ce6: 781b ldrb r3, [r3, #0] - 8008ce8: f003 0302 and.w r3, r3, #2 - 8008cec: 2b00 cmp r3, #0 - 8008cee: d02a beq.n 8008d46 - /* If an incoming segment is not acceptable, an acknowledgment - should be sent in reply */ - if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd)) { - 8008cf0: 4b28 ldr r3, [pc, #160] ; (8008d94 ) - 8008cf2: 681a ldr r2, [r3, #0] - 8008cf4: 687b ldr r3, [r7, #4] - 8008cf6: 6a5b ldr r3, [r3, #36] ; 0x24 - 8008cf8: 1ad3 subs r3, r2, r3 - 8008cfa: 2b00 cmp r3, #0 - 8008cfc: db2d blt.n 8008d5a - 8008cfe: 4b25 ldr r3, [pc, #148] ; (8008d94 ) - 8008d00: 681a ldr r2, [r3, #0] - 8008d02: 687b ldr r3, [r7, #4] - 8008d04: 6a5b ldr r3, [r3, #36] ; 0x24 - 8008d06: 6879 ldr r1, [r7, #4] - 8008d08: 8d09 ldrh r1, [r1, #40] ; 0x28 - 8008d0a: 440b add r3, r1 - 8008d0c: 1ad3 subs r3, r2, r3 - 8008d0e: 2b00 cmp r3, #0 - 8008d10: dc23 bgt.n 8008d5a - /* If the SYN is in the window it is an error, send a reset */ - tcp_rst(pcb, ackno, seqno + tcplen, ip_current_dest_addr(), - 8008d12: 4b21 ldr r3, [pc, #132] ; (8008d98 ) - 8008d14: 6819 ldr r1, [r3, #0] - 8008d16: 4b21 ldr r3, [pc, #132] ; (8008d9c ) - 8008d18: 881b ldrh r3, [r3, #0] - 8008d1a: 461a mov r2, r3 - 8008d1c: 4b1d ldr r3, [pc, #116] ; (8008d94 ) - 8008d1e: 681b ldr r3, [r3, #0] - 8008d20: 18d0 adds r0, r2, r3 - ip_current_src_addr(), tcphdr->dest, tcphdr->src); - 8008d22: 4b1f ldr r3, [pc, #124] ; (8008da0 ) - 8008d24: 681b ldr r3, [r3, #0] - tcp_rst(pcb, ackno, seqno + tcplen, ip_current_dest_addr(), - 8008d26: 885b ldrh r3, [r3, #2] - 8008d28: b29b uxth r3, r3 - ip_current_src_addr(), tcphdr->dest, tcphdr->src); - 8008d2a: 4a1d ldr r2, [pc, #116] ; (8008da0 ) - 8008d2c: 6812 ldr r2, [r2, #0] - tcp_rst(pcb, ackno, seqno + tcplen, ip_current_dest_addr(), - 8008d2e: 8812 ldrh r2, [r2, #0] - 8008d30: b292 uxth r2, r2 - 8008d32: 9202 str r2, [sp, #8] - 8008d34: 9301 str r3, [sp, #4] - 8008d36: 4b1b ldr r3, [pc, #108] ; (8008da4 ) - 8008d38: 9300 str r3, [sp, #0] - 8008d3a: 4b1b ldr r3, [pc, #108] ; (8008da8 ) - 8008d3c: 4602 mov r2, r0 - 8008d3e: 6878 ldr r0, [r7, #4] - 8008d40: f002 fe72 bl 800ba28 - return; - 8008d44: e01b b.n 8008d7e - } - } else if (flags & TCP_FIN) { - 8008d46: 4b0f ldr r3, [pc, #60] ; (8008d84 ) - 8008d48: 781b ldrb r3, [r3, #0] - 8008d4a: f003 0301 and.w r3, r3, #1 - 8008d4e: 2b00 cmp r3, #0 - 8008d50: d003 beq.n 8008d5a - /* - eighth, check the FIN bit: Remain in the TIME-WAIT state. - Restart the 2 MSL time-wait timeout.*/ - pcb->tmr = tcp_ticks; - 8008d52: 4b16 ldr r3, [pc, #88] ; (8008dac ) - 8008d54: 681a ldr r2, [r3, #0] - 8008d56: 687b ldr r3, [r7, #4] - 8008d58: 621a str r2, [r3, #32] - } - - if ((tcplen > 0)) { - 8008d5a: 4b10 ldr r3, [pc, #64] ; (8008d9c ) - 8008d5c: 881b ldrh r3, [r3, #0] - 8008d5e: 2b00 cmp r3, #0 - 8008d60: d00c beq.n 8008d7c - /* Acknowledge data, FIN or out-of-window SYN */ - tcp_ack_now(pcb); - 8008d62: 687b ldr r3, [r7, #4] - 8008d64: 8b5b ldrh r3, [r3, #26] - 8008d66: f043 0302 orr.w r3, r3, #2 - 8008d6a: b29a uxth r2, r3 - 8008d6c: 687b ldr r3, [r7, #4] - 8008d6e: 835a strh r2, [r3, #26] - tcp_output(pcb); - 8008d70: 6878 ldr r0, [r7, #4] - 8008d72: f002 f8a5 bl 800aec0 - } - return; - 8008d76: e001 b.n 8008d7c - return; - 8008d78: bf00 nop - 8008d7a: e000 b.n 8008d7e - return; - 8008d7c: bf00 nop -} - 8008d7e: 3708 adds r7, #8 - 8008d80: 46bd mov sp, r7 - 8008d82: bd80 pop {r7, pc} - 8008d84: 20009a18 .word 0x20009a18 - 8008d88: 08016e14 .word 0x08016e14 - 8008d8c: 0801702c .word 0x0801702c - 8008d90: 08016e60 .word 0x08016e60 - 8008d94: 20009a0c .word 0x20009a0c - 8008d98: 20009a10 .word 0x20009a10 - 8008d9c: 20009a16 .word 0x20009a16 - 8008da0: 200099fc .word 0x200099fc - 8008da4: 20006454 .word 0x20006454 - 8008da8: 20006458 .word 0x20006458 - 8008dac: 200099d4 .word 0x200099d4 - -08008db0 : - * @note the segment which arrived is saved in global variables, therefore only the pcb - * involved is passed as a parameter to this function - */ -static err_t -tcp_process(struct tcp_pcb *pcb) -{ - 8008db0: b590 push {r4, r7, lr} - 8008db2: b08d sub sp, #52 ; 0x34 - 8008db4: af04 add r7, sp, #16 - 8008db6: 6078 str r0, [r7, #4] - struct tcp_seg *rseg; - u8_t acceptable = 0; - 8008db8: 2300 movs r3, #0 - 8008dba: 76fb strb r3, [r7, #27] - err_t err; - - err = ERR_OK; - 8008dbc: 2300 movs r3, #0 - 8008dbe: 76bb strb r3, [r7, #26] - - LWIP_ASSERT("tcp_process: invalid pcb", pcb != NULL); - 8008dc0: 687b ldr r3, [r7, #4] - 8008dc2: 2b00 cmp r3, #0 - 8008dc4: d106 bne.n 8008dd4 - 8008dc6: 4b9d ldr r3, [pc, #628] ; (800903c ) - 8008dc8: f44f 7247 mov.w r2, #796 ; 0x31c - 8008dcc: 499c ldr r1, [pc, #624] ; (8009040 ) - 8008dce: 489d ldr r0, [pc, #628] ; (8009044 ) - 8008dd0: f008 f96a bl 80110a8 - - /* Process incoming RST segments. */ - if (flags & TCP_RST) { - 8008dd4: 4b9c ldr r3, [pc, #624] ; (8009048 ) - 8008dd6: 781b ldrb r3, [r3, #0] - 8008dd8: f003 0304 and.w r3, r3, #4 - 8008ddc: 2b00 cmp r3, #0 - 8008dde: d04e beq.n 8008e7e - /* First, determine if the reset is acceptable. */ - if (pcb->state == SYN_SENT) { - 8008de0: 687b ldr r3, [r7, #4] - 8008de2: 7d1b ldrb r3, [r3, #20] - 8008de4: 2b02 cmp r3, #2 - 8008de6: d108 bne.n 8008dfa - /* "In the SYN-SENT state (a RST received in response to an initial SYN), - the RST is acceptable if the ACK field acknowledges the SYN." */ - if (ackno == pcb->snd_nxt) { - 8008de8: 687b ldr r3, [r7, #4] - 8008dea: 6d1a ldr r2, [r3, #80] ; 0x50 - 8008dec: 4b97 ldr r3, [pc, #604] ; (800904c ) - 8008dee: 681b ldr r3, [r3, #0] - 8008df0: 429a cmp r2, r3 - 8008df2: d123 bne.n 8008e3c - acceptable = 1; - 8008df4: 2301 movs r3, #1 - 8008df6: 76fb strb r3, [r7, #27] - 8008df8: e020 b.n 8008e3c - } - } else { - /* "In all states except SYN-SENT, all reset (RST) segments are validated - by checking their SEQ-fields." */ - if (seqno == pcb->rcv_nxt) { - 8008dfa: 687b ldr r3, [r7, #4] - 8008dfc: 6a5a ldr r2, [r3, #36] ; 0x24 - 8008dfe: 4b94 ldr r3, [pc, #592] ; (8009050 ) - 8008e00: 681b ldr r3, [r3, #0] - 8008e02: 429a cmp r2, r3 - 8008e04: d102 bne.n 8008e0c - acceptable = 1; - 8008e06: 2301 movs r3, #1 - 8008e08: 76fb strb r3, [r7, #27] - 8008e0a: e017 b.n 8008e3c - } else if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, - 8008e0c: 4b90 ldr r3, [pc, #576] ; (8009050 ) - 8008e0e: 681a ldr r2, [r3, #0] - 8008e10: 687b ldr r3, [r7, #4] - 8008e12: 6a5b ldr r3, [r3, #36] ; 0x24 - 8008e14: 1ad3 subs r3, r2, r3 - 8008e16: 2b00 cmp r3, #0 - 8008e18: db10 blt.n 8008e3c - 8008e1a: 4b8d ldr r3, [pc, #564] ; (8009050 ) - 8008e1c: 681a ldr r2, [r3, #0] - 8008e1e: 687b ldr r3, [r7, #4] - 8008e20: 6a5b ldr r3, [r3, #36] ; 0x24 - 8008e22: 6879 ldr r1, [r7, #4] - 8008e24: 8d09 ldrh r1, [r1, #40] ; 0x28 - 8008e26: 440b add r3, r1 - 8008e28: 1ad3 subs r3, r2, r3 - 8008e2a: 2b00 cmp r3, #0 - 8008e2c: dc06 bgt.n 8008e3c - pcb->rcv_nxt + pcb->rcv_wnd)) { - /* If the sequence number is inside the window, we send a challenge ACK - and wait for a re-send with matching sequence number. - This follows RFC 5961 section 3.2 and addresses CVE-2004-0230 - (RST spoofing attack), which is present in RFC 793 RST handling. */ - tcp_ack_now(pcb); - 8008e2e: 687b ldr r3, [r7, #4] - 8008e30: 8b5b ldrh r3, [r3, #26] - 8008e32: f043 0302 orr.w r3, r3, #2 - 8008e36: b29a uxth r2, r3 - 8008e38: 687b ldr r3, [r7, #4] - 8008e3a: 835a strh r2, [r3, #26] - } - } - - if (acceptable) { - 8008e3c: 7efb ldrb r3, [r7, #27] - 8008e3e: 2b00 cmp r3, #0 - 8008e40: d01b beq.n 8008e7a - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: Connection RESET\n")); - LWIP_ASSERT("tcp_input: pcb->state != CLOSED", pcb->state != CLOSED); - 8008e42: 687b ldr r3, [r7, #4] - 8008e44: 7d1b ldrb r3, [r3, #20] - 8008e46: 2b00 cmp r3, #0 - 8008e48: d106 bne.n 8008e58 - 8008e4a: 4b7c ldr r3, [pc, #496] ; (800903c ) - 8008e4c: f44f 724e mov.w r2, #824 ; 0x338 - 8008e50: 4980 ldr r1, [pc, #512] ; (8009054 ) - 8008e52: 487c ldr r0, [pc, #496] ; (8009044 ) - 8008e54: f008 f928 bl 80110a8 - recv_flags |= TF_RESET; - 8008e58: 4b7f ldr r3, [pc, #508] ; (8009058 ) - 8008e5a: 781b ldrb r3, [r3, #0] - 8008e5c: f043 0308 orr.w r3, r3, #8 - 8008e60: b2da uxtb r2, r3 - 8008e62: 4b7d ldr r3, [pc, #500] ; (8009058 ) - 8008e64: 701a strb r2, [r3, #0] - tcp_clear_flags(pcb, TF_ACK_DELAY); - 8008e66: 687b ldr r3, [r7, #4] - 8008e68: 8b5b ldrh r3, [r3, #26] - 8008e6a: f023 0301 bic.w r3, r3, #1 - 8008e6e: b29a uxth r2, r3 - 8008e70: 687b ldr r3, [r7, #4] - 8008e72: 835a strh r2, [r3, #26] - return ERR_RST; - 8008e74: f06f 030d mvn.w r3, #13 - 8008e78: e37a b.n 8009570 - } else { - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: unacceptable reset seqno %"U32_F" rcv_nxt %"U32_F"\n", - seqno, pcb->rcv_nxt)); - LWIP_DEBUGF(TCP_DEBUG, ("tcp_process: unacceptable reset seqno %"U32_F" rcv_nxt %"U32_F"\n", - seqno, pcb->rcv_nxt)); - return ERR_OK; - 8008e7a: 2300 movs r3, #0 - 8008e7c: e378 b.n 8009570 - } - } - - if ((flags & TCP_SYN) && (pcb->state != SYN_SENT && pcb->state != SYN_RCVD)) { - 8008e7e: 4b72 ldr r3, [pc, #456] ; (8009048 ) - 8008e80: 781b ldrb r3, [r3, #0] - 8008e82: f003 0302 and.w r3, r3, #2 - 8008e86: 2b00 cmp r3, #0 - 8008e88: d010 beq.n 8008eac - 8008e8a: 687b ldr r3, [r7, #4] - 8008e8c: 7d1b ldrb r3, [r3, #20] - 8008e8e: 2b02 cmp r3, #2 - 8008e90: d00c beq.n 8008eac - 8008e92: 687b ldr r3, [r7, #4] - 8008e94: 7d1b ldrb r3, [r3, #20] - 8008e96: 2b03 cmp r3, #3 - 8008e98: d008 beq.n 8008eac - /* Cope with new connection attempt after remote end crashed */ - tcp_ack_now(pcb); - 8008e9a: 687b ldr r3, [r7, #4] - 8008e9c: 8b5b ldrh r3, [r3, #26] - 8008e9e: f043 0302 orr.w r3, r3, #2 - 8008ea2: b29a uxth r2, r3 - 8008ea4: 687b ldr r3, [r7, #4] - 8008ea6: 835a strh r2, [r3, #26] - return ERR_OK; - 8008ea8: 2300 movs r3, #0 - 8008eaa: e361 b.n 8009570 - } - - if ((pcb->flags & TF_RXCLOSED) == 0) { - 8008eac: 687b ldr r3, [r7, #4] - 8008eae: 8b5b ldrh r3, [r3, #26] - 8008eb0: f003 0310 and.w r3, r3, #16 - 8008eb4: 2b00 cmp r3, #0 - 8008eb6: d103 bne.n 8008ec0 - /* Update the PCB (in)activity timer unless rx is closed (see tcp_shutdown) */ - pcb->tmr = tcp_ticks; - 8008eb8: 4b68 ldr r3, [pc, #416] ; (800905c ) - 8008eba: 681a ldr r2, [r3, #0] - 8008ebc: 687b ldr r3, [r7, #4] - 8008ebe: 621a str r2, [r3, #32] - } - pcb->keep_cnt_sent = 0; - 8008ec0: 687b ldr r3, [r7, #4] - 8008ec2: 2200 movs r2, #0 - 8008ec4: f883 209b strb.w r2, [r3, #155] ; 0x9b - pcb->persist_probe = 0; - 8008ec8: 687b ldr r3, [r7, #4] - 8008eca: 2200 movs r2, #0 - 8008ecc: f883 209a strb.w r2, [r3, #154] ; 0x9a - - tcp_parseopt(pcb); - 8008ed0: 6878 ldr r0, [r7, #4] - 8008ed2: f001 fc2f bl 800a734 - - /* Do different things depending on the TCP state. */ - switch (pcb->state) { - 8008ed6: 687b ldr r3, [r7, #4] - 8008ed8: 7d1b ldrb r3, [r3, #20] - 8008eda: 3b02 subs r3, #2 - 8008edc: 2b07 cmp r3, #7 - 8008ede: f200 8337 bhi.w 8009550 - 8008ee2: a201 add r2, pc, #4 ; (adr r2, 8008ee8 ) - 8008ee4: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 8008ee8: 08008f09 .word 0x08008f09 - 8008eec: 08009139 .word 0x08009139 - 8008ef0: 080092b1 .word 0x080092b1 - 8008ef4: 080092db .word 0x080092db - 8008ef8: 080093ff .word 0x080093ff - 8008efc: 080092b1 .word 0x080092b1 - 8008f00: 0800948b .word 0x0800948b - 8008f04: 0800951b .word 0x0800951b - case SYN_SENT: - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("SYN-SENT: ackno %"U32_F" pcb->snd_nxt %"U32_F" unacked %"U32_F"\n", ackno, - pcb->snd_nxt, lwip_ntohl(pcb->unacked->tcphdr->seqno))); - /* received SYN ACK with expected sequence number? */ - if ((flags & TCP_ACK) && (flags & TCP_SYN) - 8008f08: 4b4f ldr r3, [pc, #316] ; (8009048 ) - 8008f0a: 781b ldrb r3, [r3, #0] - 8008f0c: f003 0310 and.w r3, r3, #16 - 8008f10: 2b00 cmp r3, #0 - 8008f12: f000 80e4 beq.w 80090de - 8008f16: 4b4c ldr r3, [pc, #304] ; (8009048 ) - 8008f18: 781b ldrb r3, [r3, #0] - 8008f1a: f003 0302 and.w r3, r3, #2 - 8008f1e: 2b00 cmp r3, #0 - 8008f20: f000 80dd beq.w 80090de - && (ackno == pcb->lastack + 1)) { - 8008f24: 687b ldr r3, [r7, #4] - 8008f26: 6c5b ldr r3, [r3, #68] ; 0x44 - 8008f28: 1c5a adds r2, r3, #1 - 8008f2a: 4b48 ldr r3, [pc, #288] ; (800904c ) - 8008f2c: 681b ldr r3, [r3, #0] - 8008f2e: 429a cmp r2, r3 - 8008f30: f040 80d5 bne.w 80090de - pcb->rcv_nxt = seqno + 1; - 8008f34: 4b46 ldr r3, [pc, #280] ; (8009050 ) - 8008f36: 681b ldr r3, [r3, #0] - 8008f38: 1c5a adds r2, r3, #1 - 8008f3a: 687b ldr r3, [r7, #4] - 8008f3c: 625a str r2, [r3, #36] ; 0x24 - pcb->rcv_ann_right_edge = pcb->rcv_nxt; - 8008f3e: 687b ldr r3, [r7, #4] - 8008f40: 6a5a ldr r2, [r3, #36] ; 0x24 - 8008f42: 687b ldr r3, [r7, #4] - 8008f44: 62da str r2, [r3, #44] ; 0x2c - pcb->lastack = ackno; - 8008f46: 4b41 ldr r3, [pc, #260] ; (800904c ) - 8008f48: 681a ldr r2, [r3, #0] - 8008f4a: 687b ldr r3, [r7, #4] - 8008f4c: 645a str r2, [r3, #68] ; 0x44 - pcb->snd_wnd = tcphdr->wnd; - 8008f4e: 4b44 ldr r3, [pc, #272] ; (8009060 ) - 8008f50: 681b ldr r3, [r3, #0] - 8008f52: 89db ldrh r3, [r3, #14] - 8008f54: b29a uxth r2, r3 - 8008f56: 687b ldr r3, [r7, #4] - 8008f58: f8a3 2060 strh.w r2, [r3, #96] ; 0x60 - pcb->snd_wnd_max = pcb->snd_wnd; - 8008f5c: 687b ldr r3, [r7, #4] - 8008f5e: f8b3 2060 ldrh.w r2, [r3, #96] ; 0x60 - 8008f62: 687b ldr r3, [r7, #4] - 8008f64: f8a3 2062 strh.w r2, [r3, #98] ; 0x62 - pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */ - 8008f68: 4b39 ldr r3, [pc, #228] ; (8009050 ) - 8008f6a: 681b ldr r3, [r3, #0] - 8008f6c: 1e5a subs r2, r3, #1 - 8008f6e: 687b ldr r3, [r7, #4] - 8008f70: 655a str r2, [r3, #84] ; 0x54 - pcb->state = ESTABLISHED; - 8008f72: 687b ldr r3, [r7, #4] - 8008f74: 2204 movs r2, #4 - 8008f76: 751a strb r2, [r3, #20] - -#if TCP_CALCULATE_EFF_SEND_MSS - pcb->mss = tcp_eff_send_mss(pcb->mss, &pcb->local_ip, &pcb->remote_ip); - 8008f78: 687b ldr r3, [r7, #4] - 8008f7a: 8e5c ldrh r4, [r3, #50] ; 0x32 - 8008f7c: 687b ldr r3, [r7, #4] - 8008f7e: 3304 adds r3, #4 - 8008f80: 4618 mov r0, r3 - 8008f82: f006 fce5 bl 800f950 - 8008f86: 4601 mov r1, r0 - 8008f88: 687b ldr r3, [r7, #4] - 8008f8a: 3304 adds r3, #4 - 8008f8c: 461a mov r2, r3 - 8008f8e: 4620 mov r0, r4 - 8008f90: f7ff f88c bl 80080ac - 8008f94: 4603 mov r3, r0 - 8008f96: 461a mov r2, r3 - 8008f98: 687b ldr r3, [r7, #4] - 8008f9a: 865a strh r2, [r3, #50] ; 0x32 -#endif /* TCP_CALCULATE_EFF_SEND_MSS */ - - pcb->cwnd = LWIP_TCP_CALC_INITIAL_CWND(pcb->mss); - 8008f9c: 687b ldr r3, [r7, #4] - 8008f9e: 8e5b ldrh r3, [r3, #50] ; 0x32 - 8008fa0: 009a lsls r2, r3, #2 - 8008fa2: 687b ldr r3, [r7, #4] - 8008fa4: 8e5b ldrh r3, [r3, #50] ; 0x32 - 8008fa6: 005b lsls r3, r3, #1 - 8008fa8: f241 111c movw r1, #4380 ; 0x111c - 8008fac: 428b cmp r3, r1 - 8008fae: bf38 it cc - 8008fb0: 460b movcc r3, r1 - 8008fb2: 429a cmp r2, r3 - 8008fb4: d204 bcs.n 8008fc0 - 8008fb6: 687b ldr r3, [r7, #4] - 8008fb8: 8e5b ldrh r3, [r3, #50] ; 0x32 - 8008fba: 009b lsls r3, r3, #2 - 8008fbc: b29b uxth r3, r3 - 8008fbe: e00d b.n 8008fdc - 8008fc0: 687b ldr r3, [r7, #4] - 8008fc2: 8e5b ldrh r3, [r3, #50] ; 0x32 - 8008fc4: 005b lsls r3, r3, #1 - 8008fc6: f241 121c movw r2, #4380 ; 0x111c - 8008fca: 4293 cmp r3, r2 - 8008fcc: d904 bls.n 8008fd8 - 8008fce: 687b ldr r3, [r7, #4] - 8008fd0: 8e5b ldrh r3, [r3, #50] ; 0x32 - 8008fd2: 005b lsls r3, r3, #1 - 8008fd4: b29b uxth r3, r3 - 8008fd6: e001 b.n 8008fdc - 8008fd8: f241 131c movw r3, #4380 ; 0x111c - 8008fdc: 687a ldr r2, [r7, #4] - 8008fde: f8a2 3048 strh.w r3, [r2, #72] ; 0x48 - LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_process (SENT): cwnd %"TCPWNDSIZE_F - " ssthresh %"TCPWNDSIZE_F"\n", - pcb->cwnd, pcb->ssthresh)); - LWIP_ASSERT("pcb->snd_queuelen > 0", (pcb->snd_queuelen > 0)); - 8008fe2: 687b ldr r3, [r7, #4] - 8008fe4: f8b3 3066 ldrh.w r3, [r3, #102] ; 0x66 - 8008fe8: 2b00 cmp r3, #0 - 8008fea: d106 bne.n 8008ffa - 8008fec: 4b13 ldr r3, [pc, #76] ; (800903c ) - 8008fee: f44f 725b mov.w r2, #876 ; 0x36c - 8008ff2: 491c ldr r1, [pc, #112] ; (8009064 ) - 8008ff4: 4813 ldr r0, [pc, #76] ; (8009044 ) - 8008ff6: f008 f857 bl 80110a8 - --pcb->snd_queuelen; - 8008ffa: 687b ldr r3, [r7, #4] - 8008ffc: f8b3 3066 ldrh.w r3, [r3, #102] ; 0x66 - 8009000: 3b01 subs r3, #1 - 8009002: b29a uxth r2, r3 - 8009004: 687b ldr r3, [r7, #4] - 8009006: f8a3 2066 strh.w r2, [r3, #102] ; 0x66 - LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_process: SYN-SENT --queuelen %"TCPWNDSIZE_F"\n", (tcpwnd_size_t)pcb->snd_queuelen)); - rseg = pcb->unacked; - 800900a: 687b ldr r3, [r7, #4] - 800900c: 6f1b ldr r3, [r3, #112] ; 0x70 - 800900e: 61fb str r3, [r7, #28] - if (rseg == NULL) { - 8009010: 69fb ldr r3, [r7, #28] - 8009012: 2b00 cmp r3, #0 - 8009014: d12a bne.n 800906c - /* might happen if tcp_output fails in tcp_rexmit_rto() - in which case the segment is on the unsent list */ - rseg = pcb->unsent; - 8009016: 687b ldr r3, [r7, #4] - 8009018: 6edb ldr r3, [r3, #108] ; 0x6c - 800901a: 61fb str r3, [r7, #28] - LWIP_ASSERT("no segment to free", rseg != NULL); - 800901c: 69fb ldr r3, [r7, #28] - 800901e: 2b00 cmp r3, #0 - 8009020: d106 bne.n 8009030 - 8009022: 4b06 ldr r3, [pc, #24] ; (800903c ) - 8009024: f44f 725d mov.w r2, #884 ; 0x374 - 8009028: 490f ldr r1, [pc, #60] ; (8009068 ) - 800902a: 4806 ldr r0, [pc, #24] ; (8009044 ) - 800902c: f008 f83c bl 80110a8 - pcb->unsent = rseg->next; - 8009030: 69fb ldr r3, [r7, #28] - 8009032: 681a ldr r2, [r3, #0] - 8009034: 687b ldr r3, [r7, #4] - 8009036: 66da str r2, [r3, #108] ; 0x6c - 8009038: e01c b.n 8009074 - 800903a: bf00 nop - 800903c: 08016e14 .word 0x08016e14 - 8009040: 0801704c .word 0x0801704c - 8009044: 08016e60 .word 0x08016e60 - 8009048: 20009a18 .word 0x20009a18 - 800904c: 20009a10 .word 0x20009a10 - 8009050: 20009a0c .word 0x20009a0c - 8009054: 08017068 .word 0x08017068 - 8009058: 20009a19 .word 0x20009a19 - 800905c: 200099d4 .word 0x200099d4 - 8009060: 200099fc .word 0x200099fc - 8009064: 08017088 .word 0x08017088 - 8009068: 080170a0 .word 0x080170a0 - } else { - pcb->unacked = rseg->next; - 800906c: 69fb ldr r3, [r7, #28] - 800906e: 681a ldr r2, [r3, #0] - 8009070: 687b ldr r3, [r7, #4] - 8009072: 671a str r2, [r3, #112] ; 0x70 - } - tcp_seg_free(rseg); - 8009074: 69f8 ldr r0, [r7, #28] - 8009076: f7fe fd22 bl 8007abe - - /* If there's nothing left to acknowledge, stop the retransmit - timer, otherwise reset it to start again */ - if (pcb->unacked == NULL) { - 800907a: 687b ldr r3, [r7, #4] - 800907c: 6f1b ldr r3, [r3, #112] ; 0x70 - 800907e: 2b00 cmp r3, #0 - 8009080: d104 bne.n 800908c - pcb->rtime = -1; - 8009082: 687b ldr r3, [r7, #4] - 8009084: f64f 72ff movw r2, #65535 ; 0xffff - 8009088: 861a strh r2, [r3, #48] ; 0x30 - 800908a: e006 b.n 800909a - } else { - pcb->rtime = 0; - 800908c: 687b ldr r3, [r7, #4] - 800908e: 2200 movs r2, #0 - 8009090: 861a strh r2, [r3, #48] ; 0x30 - pcb->nrtx = 0; - 8009092: 687b ldr r3, [r7, #4] - 8009094: 2200 movs r2, #0 - 8009096: f883 2042 strb.w r2, [r3, #66] ; 0x42 - } - - /* Call the user specified function to call when successfully - * connected. */ - TCP_EVENT_CONNECTED(pcb, ERR_OK, err); - 800909a: 687b ldr r3, [r7, #4] - 800909c: f8d3 3088 ldr.w r3, [r3, #136] ; 0x88 - 80090a0: 2b00 cmp r3, #0 - 80090a2: d00a beq.n 80090ba - 80090a4: 687b ldr r3, [r7, #4] - 80090a6: f8d3 3088 ldr.w r3, [r3, #136] ; 0x88 - 80090aa: 687a ldr r2, [r7, #4] - 80090ac: 6910 ldr r0, [r2, #16] - 80090ae: 2200 movs r2, #0 - 80090b0: 6879 ldr r1, [r7, #4] - 80090b2: 4798 blx r3 - 80090b4: 4603 mov r3, r0 - 80090b6: 76bb strb r3, [r7, #26] - 80090b8: e001 b.n 80090be - 80090ba: 2300 movs r3, #0 - 80090bc: 76bb strb r3, [r7, #26] - if (err == ERR_ABRT) { - 80090be: f997 301a ldrsb.w r3, [r7, #26] - 80090c2: f113 0f0d cmn.w r3, #13 - 80090c6: d102 bne.n 80090ce - return ERR_ABRT; - 80090c8: f06f 030c mvn.w r3, #12 - 80090cc: e250 b.n 8009570 - } - tcp_ack_now(pcb); - 80090ce: 687b ldr r3, [r7, #4] - 80090d0: 8b5b ldrh r3, [r3, #26] - 80090d2: f043 0302 orr.w r3, r3, #2 - 80090d6: b29a uxth r2, r3 - 80090d8: 687b ldr r3, [r7, #4] - 80090da: 835a strh r2, [r3, #26] - if (pcb->nrtx < TCP_SYNMAXRTX) { - pcb->rtime = 0; - tcp_rexmit_rto(pcb); - } - } - break; - 80090dc: e23a b.n 8009554 - else if (flags & TCP_ACK) { - 80090de: 4b98 ldr r3, [pc, #608] ; (8009340 ) - 80090e0: 781b ldrb r3, [r3, #0] - 80090e2: f003 0310 and.w r3, r3, #16 - 80090e6: 2b00 cmp r3, #0 - 80090e8: f000 8234 beq.w 8009554 - tcp_rst(pcb, ackno, seqno + tcplen, ip_current_dest_addr(), - 80090ec: 4b95 ldr r3, [pc, #596] ; (8009344 ) - 80090ee: 6819 ldr r1, [r3, #0] - 80090f0: 4b95 ldr r3, [pc, #596] ; (8009348 ) - 80090f2: 881b ldrh r3, [r3, #0] - 80090f4: 461a mov r2, r3 - 80090f6: 4b95 ldr r3, [pc, #596] ; (800934c ) - 80090f8: 681b ldr r3, [r3, #0] - 80090fa: 18d0 adds r0, r2, r3 - ip_current_src_addr(), tcphdr->dest, tcphdr->src); - 80090fc: 4b94 ldr r3, [pc, #592] ; (8009350 ) - 80090fe: 681b ldr r3, [r3, #0] - tcp_rst(pcb, ackno, seqno + tcplen, ip_current_dest_addr(), - 8009100: 885b ldrh r3, [r3, #2] - 8009102: b29b uxth r3, r3 - ip_current_src_addr(), tcphdr->dest, tcphdr->src); - 8009104: 4a92 ldr r2, [pc, #584] ; (8009350 ) - 8009106: 6812 ldr r2, [r2, #0] - tcp_rst(pcb, ackno, seqno + tcplen, ip_current_dest_addr(), - 8009108: 8812 ldrh r2, [r2, #0] - 800910a: b292 uxth r2, r2 - 800910c: 9202 str r2, [sp, #8] - 800910e: 9301 str r3, [sp, #4] - 8009110: 4b90 ldr r3, [pc, #576] ; (8009354 ) - 8009112: 9300 str r3, [sp, #0] - 8009114: 4b90 ldr r3, [pc, #576] ; (8009358 ) - 8009116: 4602 mov r2, r0 - 8009118: 6878 ldr r0, [r7, #4] - 800911a: f002 fc85 bl 800ba28 - if (pcb->nrtx < TCP_SYNMAXRTX) { - 800911e: 687b ldr r3, [r7, #4] - 8009120: f893 3042 ldrb.w r3, [r3, #66] ; 0x42 - 8009124: 2b05 cmp r3, #5 - 8009126: f200 8215 bhi.w 8009554 - pcb->rtime = 0; - 800912a: 687b ldr r3, [r7, #4] - 800912c: 2200 movs r2, #0 - 800912e: 861a strh r2, [r3, #48] ; 0x30 - tcp_rexmit_rto(pcb); - 8009130: 6878 ldr r0, [r7, #4] - 8009132: f002 fa4f bl 800b5d4 - break; - 8009136: e20d b.n 8009554 - case SYN_RCVD: - if (flags & TCP_ACK) { - 8009138: 4b81 ldr r3, [pc, #516] ; (8009340 ) - 800913a: 781b ldrb r3, [r3, #0] - 800913c: f003 0310 and.w r3, r3, #16 - 8009140: 2b00 cmp r3, #0 - 8009142: f000 80a1 beq.w 8009288 - /* expected ACK number? */ - if (TCP_SEQ_BETWEEN(ackno, pcb->lastack + 1, pcb->snd_nxt)) { - 8009146: 4b7f ldr r3, [pc, #508] ; (8009344 ) - 8009148: 681a ldr r2, [r3, #0] - 800914a: 687b ldr r3, [r7, #4] - 800914c: 6c5b ldr r3, [r3, #68] ; 0x44 - 800914e: 1ad3 subs r3, r2, r3 - 8009150: 3b01 subs r3, #1 - 8009152: 2b00 cmp r3, #0 - 8009154: db7e blt.n 8009254 - 8009156: 4b7b ldr r3, [pc, #492] ; (8009344 ) - 8009158: 681a ldr r2, [r3, #0] - 800915a: 687b ldr r3, [r7, #4] - 800915c: 6d1b ldr r3, [r3, #80] ; 0x50 - 800915e: 1ad3 subs r3, r2, r3 - 8009160: 2b00 cmp r3, #0 - 8009162: dc77 bgt.n 8009254 - pcb->state = ESTABLISHED; - 8009164: 687b ldr r3, [r7, #4] - 8009166: 2204 movs r2, #4 - 8009168: 751a strb r2, [r3, #20] - LWIP_DEBUGF(TCP_DEBUG, ("TCP connection established %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); -#if LWIP_CALLBACK_API || TCP_LISTEN_BACKLOG - if (pcb->listener == NULL) { - 800916a: 687b ldr r3, [r7, #4] - 800916c: 6fdb ldr r3, [r3, #124] ; 0x7c - 800916e: 2b00 cmp r3, #0 - 8009170: d102 bne.n 8009178 - /* listen pcb might be closed by now */ - err = ERR_VAL; - 8009172: 23fa movs r3, #250 ; 0xfa - 8009174: 76bb strb r3, [r7, #26] - 8009176: e01d b.n 80091b4 - } else -#endif /* LWIP_CALLBACK_API || TCP_LISTEN_BACKLOG */ - { -#if LWIP_CALLBACK_API - LWIP_ASSERT("pcb->listener->accept != NULL", pcb->listener->accept != NULL); - 8009178: 687b ldr r3, [r7, #4] - 800917a: 6fdb ldr r3, [r3, #124] ; 0x7c - 800917c: 699b ldr r3, [r3, #24] - 800917e: 2b00 cmp r3, #0 - 8009180: d106 bne.n 8009190 - 8009182: 4b76 ldr r3, [pc, #472] ; (800935c ) - 8009184: f44f 726a mov.w r2, #936 ; 0x3a8 - 8009188: 4975 ldr r1, [pc, #468] ; (8009360 ) - 800918a: 4876 ldr r0, [pc, #472] ; (8009364 ) - 800918c: f007 ff8c bl 80110a8 -#endif - tcp_backlog_accepted(pcb); - /* Call the accept function. */ - TCP_EVENT_ACCEPT(pcb->listener, pcb, pcb->callback_arg, ERR_OK, err); - 8009190: 687b ldr r3, [r7, #4] - 8009192: 6fdb ldr r3, [r3, #124] ; 0x7c - 8009194: 699b ldr r3, [r3, #24] - 8009196: 2b00 cmp r3, #0 - 8009198: d00a beq.n 80091b0 - 800919a: 687b ldr r3, [r7, #4] - 800919c: 6fdb ldr r3, [r3, #124] ; 0x7c - 800919e: 699b ldr r3, [r3, #24] - 80091a0: 687a ldr r2, [r7, #4] - 80091a2: 6910 ldr r0, [r2, #16] - 80091a4: 2200 movs r2, #0 - 80091a6: 6879 ldr r1, [r7, #4] - 80091a8: 4798 blx r3 - 80091aa: 4603 mov r3, r0 - 80091ac: 76bb strb r3, [r7, #26] - 80091ae: e001 b.n 80091b4 - 80091b0: 23f0 movs r3, #240 ; 0xf0 - 80091b2: 76bb strb r3, [r7, #26] - } - if (err != ERR_OK) { - 80091b4: f997 301a ldrsb.w r3, [r7, #26] - 80091b8: 2b00 cmp r3, #0 - 80091ba: d00a beq.n 80091d2 - /* If the accept function returns with an error, we abort - * the connection. */ - /* Already aborted? */ - if (err != ERR_ABRT) { - 80091bc: f997 301a ldrsb.w r3, [r7, #26] - 80091c0: f113 0f0d cmn.w r3, #13 - 80091c4: d002 beq.n 80091cc - tcp_abort(pcb); - 80091c6: 6878 ldr r0, [r7, #4] - 80091c8: f7fd ff8e bl 80070e8 - } - return ERR_ABRT; - 80091cc: f06f 030c mvn.w r3, #12 - 80091d0: e1ce b.n 8009570 - } - /* If there was any data contained within this ACK, - * we'd better pass it on to the application as well. */ - tcp_receive(pcb); - 80091d2: 6878 ldr r0, [r7, #4] - 80091d4: f000 fae0 bl 8009798 - - /* Prevent ACK for SYN to generate a sent event */ - if (recv_acked != 0) { - 80091d8: 4b63 ldr r3, [pc, #396] ; (8009368 ) - 80091da: 881b ldrh r3, [r3, #0] - 80091dc: 2b00 cmp r3, #0 - 80091de: d005 beq.n 80091ec - recv_acked--; - 80091e0: 4b61 ldr r3, [pc, #388] ; (8009368 ) - 80091e2: 881b ldrh r3, [r3, #0] - 80091e4: 3b01 subs r3, #1 - 80091e6: b29a uxth r2, r3 - 80091e8: 4b5f ldr r3, [pc, #380] ; (8009368 ) - 80091ea: 801a strh r2, [r3, #0] - } - - pcb->cwnd = LWIP_TCP_CALC_INITIAL_CWND(pcb->mss); - 80091ec: 687b ldr r3, [r7, #4] - 80091ee: 8e5b ldrh r3, [r3, #50] ; 0x32 - 80091f0: 009a lsls r2, r3, #2 - 80091f2: 687b ldr r3, [r7, #4] - 80091f4: 8e5b ldrh r3, [r3, #50] ; 0x32 - 80091f6: 005b lsls r3, r3, #1 - 80091f8: f241 111c movw r1, #4380 ; 0x111c - 80091fc: 428b cmp r3, r1 - 80091fe: bf38 it cc - 8009200: 460b movcc r3, r1 - 8009202: 429a cmp r2, r3 - 8009204: d204 bcs.n 8009210 - 8009206: 687b ldr r3, [r7, #4] - 8009208: 8e5b ldrh r3, [r3, #50] ; 0x32 - 800920a: 009b lsls r3, r3, #2 - 800920c: b29b uxth r3, r3 - 800920e: e00d b.n 800922c - 8009210: 687b ldr r3, [r7, #4] - 8009212: 8e5b ldrh r3, [r3, #50] ; 0x32 - 8009214: 005b lsls r3, r3, #1 - 8009216: f241 121c movw r2, #4380 ; 0x111c - 800921a: 4293 cmp r3, r2 - 800921c: d904 bls.n 8009228 - 800921e: 687b ldr r3, [r7, #4] - 8009220: 8e5b ldrh r3, [r3, #50] ; 0x32 - 8009222: 005b lsls r3, r3, #1 - 8009224: b29b uxth r3, r3 - 8009226: e001 b.n 800922c - 8009228: f241 131c movw r3, #4380 ; 0x111c - 800922c: 687a ldr r2, [r7, #4] - 800922e: f8a2 3048 strh.w r3, [r2, #72] ; 0x48 - LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_process (SYN_RCVD): cwnd %"TCPWNDSIZE_F - " ssthresh %"TCPWNDSIZE_F"\n", - pcb->cwnd, pcb->ssthresh)); - - if (recv_flags & TF_GOT_FIN) { - 8009232: 4b4e ldr r3, [pc, #312] ; (800936c ) - 8009234: 781b ldrb r3, [r3, #0] - 8009236: f003 0320 and.w r3, r3, #32 - 800923a: 2b00 cmp r3, #0 - 800923c: d037 beq.n 80092ae - tcp_ack_now(pcb); - 800923e: 687b ldr r3, [r7, #4] - 8009240: 8b5b ldrh r3, [r3, #26] - 8009242: f043 0302 orr.w r3, r3, #2 - 8009246: b29a uxth r2, r3 - 8009248: 687b ldr r3, [r7, #4] - 800924a: 835a strh r2, [r3, #26] - pcb->state = CLOSE_WAIT; - 800924c: 687b ldr r3, [r7, #4] - 800924e: 2207 movs r2, #7 - 8009250: 751a strb r2, [r3, #20] - if (recv_flags & TF_GOT_FIN) { - 8009252: e02c b.n 80092ae - } - } else { - /* incorrect ACK number, send RST */ - tcp_rst(pcb, ackno, seqno + tcplen, ip_current_dest_addr(), - 8009254: 4b3b ldr r3, [pc, #236] ; (8009344 ) - 8009256: 6819 ldr r1, [r3, #0] - 8009258: 4b3b ldr r3, [pc, #236] ; (8009348 ) - 800925a: 881b ldrh r3, [r3, #0] - 800925c: 461a mov r2, r3 - 800925e: 4b3b ldr r3, [pc, #236] ; (800934c ) - 8009260: 681b ldr r3, [r3, #0] - 8009262: 18d0 adds r0, r2, r3 - ip_current_src_addr(), tcphdr->dest, tcphdr->src); - 8009264: 4b3a ldr r3, [pc, #232] ; (8009350 ) - 8009266: 681b ldr r3, [r3, #0] - tcp_rst(pcb, ackno, seqno + tcplen, ip_current_dest_addr(), - 8009268: 885b ldrh r3, [r3, #2] - 800926a: b29b uxth r3, r3 - ip_current_src_addr(), tcphdr->dest, tcphdr->src); - 800926c: 4a38 ldr r2, [pc, #224] ; (8009350 ) - 800926e: 6812 ldr r2, [r2, #0] - tcp_rst(pcb, ackno, seqno + tcplen, ip_current_dest_addr(), - 8009270: 8812 ldrh r2, [r2, #0] - 8009272: b292 uxth r2, r2 - 8009274: 9202 str r2, [sp, #8] - 8009276: 9301 str r3, [sp, #4] - 8009278: 4b36 ldr r3, [pc, #216] ; (8009354 ) - 800927a: 9300 str r3, [sp, #0] - 800927c: 4b36 ldr r3, [pc, #216] ; (8009358 ) - 800927e: 4602 mov r2, r0 - 8009280: 6878 ldr r0, [r7, #4] - 8009282: f002 fbd1 bl 800ba28 - } - } else if ((flags & TCP_SYN) && (seqno == pcb->rcv_nxt - 1)) { - /* Looks like another copy of the SYN - retransmit our SYN-ACK */ - tcp_rexmit(pcb); - } - break; - 8009286: e167 b.n 8009558 - } else if ((flags & TCP_SYN) && (seqno == pcb->rcv_nxt - 1)) { - 8009288: 4b2d ldr r3, [pc, #180] ; (8009340 ) - 800928a: 781b ldrb r3, [r3, #0] - 800928c: f003 0302 and.w r3, r3, #2 - 8009290: 2b00 cmp r3, #0 - 8009292: f000 8161 beq.w 8009558 - 8009296: 687b ldr r3, [r7, #4] - 8009298: 6a5b ldr r3, [r3, #36] ; 0x24 - 800929a: 1e5a subs r2, r3, #1 - 800929c: 4b2b ldr r3, [pc, #172] ; (800934c ) - 800929e: 681b ldr r3, [r3, #0] - 80092a0: 429a cmp r2, r3 - 80092a2: f040 8159 bne.w 8009558 - tcp_rexmit(pcb); - 80092a6: 6878 ldr r0, [r7, #4] - 80092a8: f002 f9b6 bl 800b618 - break; - 80092ac: e154 b.n 8009558 - 80092ae: e153 b.n 8009558 - case CLOSE_WAIT: - /* FALLTHROUGH */ - case ESTABLISHED: - tcp_receive(pcb); - 80092b0: 6878 ldr r0, [r7, #4] - 80092b2: f000 fa71 bl 8009798 - if (recv_flags & TF_GOT_FIN) { /* passive close */ - 80092b6: 4b2d ldr r3, [pc, #180] ; (800936c ) - 80092b8: 781b ldrb r3, [r3, #0] - 80092ba: f003 0320 and.w r3, r3, #32 - 80092be: 2b00 cmp r3, #0 - 80092c0: f000 814c beq.w 800955c - tcp_ack_now(pcb); - 80092c4: 687b ldr r3, [r7, #4] - 80092c6: 8b5b ldrh r3, [r3, #26] - 80092c8: f043 0302 orr.w r3, r3, #2 - 80092cc: b29a uxth r2, r3 - 80092ce: 687b ldr r3, [r7, #4] - 80092d0: 835a strh r2, [r3, #26] - pcb->state = CLOSE_WAIT; - 80092d2: 687b ldr r3, [r7, #4] - 80092d4: 2207 movs r2, #7 - 80092d6: 751a strb r2, [r3, #20] - } - break; - 80092d8: e140 b.n 800955c - case FIN_WAIT_1: - tcp_receive(pcb); - 80092da: 6878 ldr r0, [r7, #4] - 80092dc: f000 fa5c bl 8009798 - if (recv_flags & TF_GOT_FIN) { - 80092e0: 4b22 ldr r3, [pc, #136] ; (800936c ) - 80092e2: 781b ldrb r3, [r3, #0] - 80092e4: f003 0320 and.w r3, r3, #32 - 80092e8: 2b00 cmp r3, #0 - 80092ea: d071 beq.n 80093d0 - if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt) && - 80092ec: 4b14 ldr r3, [pc, #80] ; (8009340 ) - 80092ee: 781b ldrb r3, [r3, #0] - 80092f0: f003 0310 and.w r3, r3, #16 - 80092f4: 2b00 cmp r3, #0 - 80092f6: d060 beq.n 80093ba - 80092f8: 687b ldr r3, [r7, #4] - 80092fa: 6d1a ldr r2, [r3, #80] ; 0x50 - 80092fc: 4b11 ldr r3, [pc, #68] ; (8009344 ) - 80092fe: 681b ldr r3, [r3, #0] - 8009300: 429a cmp r2, r3 - 8009302: d15a bne.n 80093ba - pcb->unsent == NULL) { - 8009304: 687b ldr r3, [r7, #4] - 8009306: 6edb ldr r3, [r3, #108] ; 0x6c - if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt) && - 8009308: 2b00 cmp r3, #0 - 800930a: d156 bne.n 80093ba - LWIP_DEBUGF(TCP_DEBUG, - ("TCP connection closed: FIN_WAIT_1 %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); - tcp_ack_now(pcb); - 800930c: 687b ldr r3, [r7, #4] - 800930e: 8b5b ldrh r3, [r3, #26] - 8009310: f043 0302 orr.w r3, r3, #2 - 8009314: b29a uxth r2, r3 - 8009316: 687b ldr r3, [r7, #4] - 8009318: 835a strh r2, [r3, #26] - tcp_pcb_purge(pcb); - 800931a: 6878 ldr r0, [r7, #4] - 800931c: f7fe fdbc bl 8007e98 - TCP_RMV_ACTIVE(pcb); - 8009320: 4b13 ldr r3, [pc, #76] ; (8009370 ) - 8009322: 681b ldr r3, [r3, #0] - 8009324: 687a ldr r2, [r7, #4] - 8009326: 429a cmp r2, r3 - 8009328: d105 bne.n 8009336 - 800932a: 4b11 ldr r3, [pc, #68] ; (8009370 ) - 800932c: 681b ldr r3, [r3, #0] - 800932e: 68db ldr r3, [r3, #12] - 8009330: 4a0f ldr r2, [pc, #60] ; (8009370 ) - 8009332: 6013 str r3, [r2, #0] - 8009334: e02e b.n 8009394 - 8009336: 4b0e ldr r3, [pc, #56] ; (8009370 ) - 8009338: 681b ldr r3, [r3, #0] - 800933a: 617b str r3, [r7, #20] - 800933c: e027 b.n 800938e - 800933e: bf00 nop - 8009340: 20009a18 .word 0x20009a18 - 8009344: 20009a10 .word 0x20009a10 - 8009348: 20009a16 .word 0x20009a16 - 800934c: 20009a0c .word 0x20009a0c - 8009350: 200099fc .word 0x200099fc - 8009354: 20006454 .word 0x20006454 - 8009358: 20006458 .word 0x20006458 - 800935c: 08016e14 .word 0x08016e14 - 8009360: 080170b4 .word 0x080170b4 - 8009364: 08016e60 .word 0x08016e60 - 8009368: 20009a14 .word 0x20009a14 - 800936c: 20009a19 .word 0x20009a19 - 8009370: 200099e0 .word 0x200099e0 - 8009374: 697b ldr r3, [r7, #20] - 8009376: 68db ldr r3, [r3, #12] - 8009378: 687a ldr r2, [r7, #4] - 800937a: 429a cmp r2, r3 - 800937c: d104 bne.n 8009388 - 800937e: 687b ldr r3, [r7, #4] - 8009380: 68da ldr r2, [r3, #12] - 8009382: 697b ldr r3, [r7, #20] - 8009384: 60da str r2, [r3, #12] - 8009386: e005 b.n 8009394 - 8009388: 697b ldr r3, [r7, #20] - 800938a: 68db ldr r3, [r3, #12] - 800938c: 617b str r3, [r7, #20] - 800938e: 697b ldr r3, [r7, #20] - 8009390: 2b00 cmp r3, #0 - 8009392: d1ef bne.n 8009374 - 8009394: 687b ldr r3, [r7, #4] - 8009396: 2200 movs r2, #0 - 8009398: 60da str r2, [r3, #12] - 800939a: 4b77 ldr r3, [pc, #476] ; (8009578 ) - 800939c: 2201 movs r2, #1 - 800939e: 701a strb r2, [r3, #0] - pcb->state = TIME_WAIT; - 80093a0: 687b ldr r3, [r7, #4] - 80093a2: 220a movs r2, #10 - 80093a4: 751a strb r2, [r3, #20] - TCP_REG(&tcp_tw_pcbs, pcb); - 80093a6: 4b75 ldr r3, [pc, #468] ; (800957c ) - 80093a8: 681a ldr r2, [r3, #0] - 80093aa: 687b ldr r3, [r7, #4] - 80093ac: 60da str r2, [r3, #12] - 80093ae: 4a73 ldr r2, [pc, #460] ; (800957c ) - 80093b0: 687b ldr r3, [r7, #4] - 80093b2: 6013 str r3, [r2, #0] - 80093b4: f002 fcfa bl 800bdac - } - } else if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt) && - pcb->unsent == NULL) { - pcb->state = FIN_WAIT_2; - } - break; - 80093b8: e0d2 b.n 8009560 - tcp_ack_now(pcb); - 80093ba: 687b ldr r3, [r7, #4] - 80093bc: 8b5b ldrh r3, [r3, #26] - 80093be: f043 0302 orr.w r3, r3, #2 - 80093c2: b29a uxth r2, r3 - 80093c4: 687b ldr r3, [r7, #4] - 80093c6: 835a strh r2, [r3, #26] - pcb->state = CLOSING; - 80093c8: 687b ldr r3, [r7, #4] - 80093ca: 2208 movs r2, #8 - 80093cc: 751a strb r2, [r3, #20] - break; - 80093ce: e0c7 b.n 8009560 - } else if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt) && - 80093d0: 4b6b ldr r3, [pc, #428] ; (8009580 ) - 80093d2: 781b ldrb r3, [r3, #0] - 80093d4: f003 0310 and.w r3, r3, #16 - 80093d8: 2b00 cmp r3, #0 - 80093da: f000 80c1 beq.w 8009560 - 80093de: 687b ldr r3, [r7, #4] - 80093e0: 6d1a ldr r2, [r3, #80] ; 0x50 - 80093e2: 4b68 ldr r3, [pc, #416] ; (8009584 ) - 80093e4: 681b ldr r3, [r3, #0] - 80093e6: 429a cmp r2, r3 - 80093e8: f040 80ba bne.w 8009560 - pcb->unsent == NULL) { - 80093ec: 687b ldr r3, [r7, #4] - 80093ee: 6edb ldr r3, [r3, #108] ; 0x6c - } else if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt) && - 80093f0: 2b00 cmp r3, #0 - 80093f2: f040 80b5 bne.w 8009560 - pcb->state = FIN_WAIT_2; - 80093f6: 687b ldr r3, [r7, #4] - 80093f8: 2206 movs r2, #6 - 80093fa: 751a strb r2, [r3, #20] - break; - 80093fc: e0b0 b.n 8009560 - case FIN_WAIT_2: - tcp_receive(pcb); - 80093fe: 6878 ldr r0, [r7, #4] - 8009400: f000 f9ca bl 8009798 - if (recv_flags & TF_GOT_FIN) { - 8009404: 4b60 ldr r3, [pc, #384] ; (8009588 ) - 8009406: 781b ldrb r3, [r3, #0] - 8009408: f003 0320 and.w r3, r3, #32 - 800940c: 2b00 cmp r3, #0 - 800940e: f000 80a9 beq.w 8009564 - LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: FIN_WAIT_2 %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); - tcp_ack_now(pcb); - 8009412: 687b ldr r3, [r7, #4] - 8009414: 8b5b ldrh r3, [r3, #26] - 8009416: f043 0302 orr.w r3, r3, #2 - 800941a: b29a uxth r2, r3 - 800941c: 687b ldr r3, [r7, #4] - 800941e: 835a strh r2, [r3, #26] - tcp_pcb_purge(pcb); - 8009420: 6878 ldr r0, [r7, #4] - 8009422: f7fe fd39 bl 8007e98 - TCP_RMV_ACTIVE(pcb); - 8009426: 4b59 ldr r3, [pc, #356] ; (800958c ) - 8009428: 681b ldr r3, [r3, #0] - 800942a: 687a ldr r2, [r7, #4] - 800942c: 429a cmp r2, r3 - 800942e: d105 bne.n 800943c - 8009430: 4b56 ldr r3, [pc, #344] ; (800958c ) - 8009432: 681b ldr r3, [r3, #0] - 8009434: 68db ldr r3, [r3, #12] - 8009436: 4a55 ldr r2, [pc, #340] ; (800958c ) - 8009438: 6013 str r3, [r2, #0] - 800943a: e013 b.n 8009464 - 800943c: 4b53 ldr r3, [pc, #332] ; (800958c ) - 800943e: 681b ldr r3, [r3, #0] - 8009440: 613b str r3, [r7, #16] - 8009442: e00c b.n 800945e - 8009444: 693b ldr r3, [r7, #16] - 8009446: 68db ldr r3, [r3, #12] - 8009448: 687a ldr r2, [r7, #4] - 800944a: 429a cmp r2, r3 - 800944c: d104 bne.n 8009458 - 800944e: 687b ldr r3, [r7, #4] - 8009450: 68da ldr r2, [r3, #12] - 8009452: 693b ldr r3, [r7, #16] - 8009454: 60da str r2, [r3, #12] - 8009456: e005 b.n 8009464 - 8009458: 693b ldr r3, [r7, #16] - 800945a: 68db ldr r3, [r3, #12] - 800945c: 613b str r3, [r7, #16] - 800945e: 693b ldr r3, [r7, #16] - 8009460: 2b00 cmp r3, #0 - 8009462: d1ef bne.n 8009444 - 8009464: 687b ldr r3, [r7, #4] - 8009466: 2200 movs r2, #0 - 8009468: 60da str r2, [r3, #12] - 800946a: 4b43 ldr r3, [pc, #268] ; (8009578 ) - 800946c: 2201 movs r2, #1 - 800946e: 701a strb r2, [r3, #0] - pcb->state = TIME_WAIT; - 8009470: 687b ldr r3, [r7, #4] - 8009472: 220a movs r2, #10 - 8009474: 751a strb r2, [r3, #20] - TCP_REG(&tcp_tw_pcbs, pcb); - 8009476: 4b41 ldr r3, [pc, #260] ; (800957c ) - 8009478: 681a ldr r2, [r3, #0] - 800947a: 687b ldr r3, [r7, #4] - 800947c: 60da str r2, [r3, #12] - 800947e: 4a3f ldr r2, [pc, #252] ; (800957c ) - 8009480: 687b ldr r3, [r7, #4] - 8009482: 6013 str r3, [r2, #0] - 8009484: f002 fc92 bl 800bdac - } - break; - 8009488: e06c b.n 8009564 - case CLOSING: - tcp_receive(pcb); - 800948a: 6878 ldr r0, [r7, #4] - 800948c: f000 f984 bl 8009798 - if ((flags & TCP_ACK) && ackno == pcb->snd_nxt && pcb->unsent == NULL) { - 8009490: 4b3b ldr r3, [pc, #236] ; (8009580 ) - 8009492: 781b ldrb r3, [r3, #0] - 8009494: f003 0310 and.w r3, r3, #16 - 8009498: 2b00 cmp r3, #0 - 800949a: d065 beq.n 8009568 - 800949c: 687b ldr r3, [r7, #4] - 800949e: 6d1a ldr r2, [r3, #80] ; 0x50 - 80094a0: 4b38 ldr r3, [pc, #224] ; (8009584 ) - 80094a2: 681b ldr r3, [r3, #0] - 80094a4: 429a cmp r2, r3 - 80094a6: d15f bne.n 8009568 - 80094a8: 687b ldr r3, [r7, #4] - 80094aa: 6edb ldr r3, [r3, #108] ; 0x6c - 80094ac: 2b00 cmp r3, #0 - 80094ae: d15b bne.n 8009568 - LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: CLOSING %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); - tcp_pcb_purge(pcb); - 80094b0: 6878 ldr r0, [r7, #4] - 80094b2: f7fe fcf1 bl 8007e98 - TCP_RMV_ACTIVE(pcb); - 80094b6: 4b35 ldr r3, [pc, #212] ; (800958c ) - 80094b8: 681b ldr r3, [r3, #0] - 80094ba: 687a ldr r2, [r7, #4] - 80094bc: 429a cmp r2, r3 - 80094be: d105 bne.n 80094cc - 80094c0: 4b32 ldr r3, [pc, #200] ; (800958c ) - 80094c2: 681b ldr r3, [r3, #0] - 80094c4: 68db ldr r3, [r3, #12] - 80094c6: 4a31 ldr r2, [pc, #196] ; (800958c ) - 80094c8: 6013 str r3, [r2, #0] - 80094ca: e013 b.n 80094f4 - 80094cc: 4b2f ldr r3, [pc, #188] ; (800958c ) - 80094ce: 681b ldr r3, [r3, #0] - 80094d0: 60fb str r3, [r7, #12] - 80094d2: e00c b.n 80094ee - 80094d4: 68fb ldr r3, [r7, #12] - 80094d6: 68db ldr r3, [r3, #12] - 80094d8: 687a ldr r2, [r7, #4] - 80094da: 429a cmp r2, r3 - 80094dc: d104 bne.n 80094e8 - 80094de: 687b ldr r3, [r7, #4] - 80094e0: 68da ldr r2, [r3, #12] - 80094e2: 68fb ldr r3, [r7, #12] - 80094e4: 60da str r2, [r3, #12] - 80094e6: e005 b.n 80094f4 - 80094e8: 68fb ldr r3, [r7, #12] - 80094ea: 68db ldr r3, [r3, #12] - 80094ec: 60fb str r3, [r7, #12] - 80094ee: 68fb ldr r3, [r7, #12] - 80094f0: 2b00 cmp r3, #0 - 80094f2: d1ef bne.n 80094d4 - 80094f4: 687b ldr r3, [r7, #4] - 80094f6: 2200 movs r2, #0 - 80094f8: 60da str r2, [r3, #12] - 80094fa: 4b1f ldr r3, [pc, #124] ; (8009578 ) - 80094fc: 2201 movs r2, #1 - 80094fe: 701a strb r2, [r3, #0] - pcb->state = TIME_WAIT; - 8009500: 687b ldr r3, [r7, #4] - 8009502: 220a movs r2, #10 - 8009504: 751a strb r2, [r3, #20] - TCP_REG(&tcp_tw_pcbs, pcb); - 8009506: 4b1d ldr r3, [pc, #116] ; (800957c ) - 8009508: 681a ldr r2, [r3, #0] - 800950a: 687b ldr r3, [r7, #4] - 800950c: 60da str r2, [r3, #12] - 800950e: 4a1b ldr r2, [pc, #108] ; (800957c ) - 8009510: 687b ldr r3, [r7, #4] - 8009512: 6013 str r3, [r2, #0] - 8009514: f002 fc4a bl 800bdac - } - break; - 8009518: e026 b.n 8009568 - case LAST_ACK: - tcp_receive(pcb); - 800951a: 6878 ldr r0, [r7, #4] - 800951c: f000 f93c bl 8009798 - if ((flags & TCP_ACK) && ackno == pcb->snd_nxt && pcb->unsent == NULL) { - 8009520: 4b17 ldr r3, [pc, #92] ; (8009580 ) - 8009522: 781b ldrb r3, [r3, #0] - 8009524: f003 0310 and.w r3, r3, #16 - 8009528: 2b00 cmp r3, #0 - 800952a: d01f beq.n 800956c - 800952c: 687b ldr r3, [r7, #4] - 800952e: 6d1a ldr r2, [r3, #80] ; 0x50 - 8009530: 4b14 ldr r3, [pc, #80] ; (8009584 ) - 8009532: 681b ldr r3, [r3, #0] - 8009534: 429a cmp r2, r3 - 8009536: d119 bne.n 800956c - 8009538: 687b ldr r3, [r7, #4] - 800953a: 6edb ldr r3, [r3, #108] ; 0x6c - 800953c: 2b00 cmp r3, #0 - 800953e: d115 bne.n 800956c - LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: LAST_ACK %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); - /* bugfix #21699: don't set pcb->state to CLOSED here or we risk leaking segments */ - recv_flags |= TF_CLOSED; - 8009540: 4b11 ldr r3, [pc, #68] ; (8009588 ) - 8009542: 781b ldrb r3, [r3, #0] - 8009544: f043 0310 orr.w r3, r3, #16 - 8009548: b2da uxtb r2, r3 - 800954a: 4b0f ldr r3, [pc, #60] ; (8009588 ) - 800954c: 701a strb r2, [r3, #0] - } - break; - 800954e: e00d b.n 800956c - default: - break; - 8009550: bf00 nop - 8009552: e00c b.n 800956e - break; - 8009554: bf00 nop - 8009556: e00a b.n 800956e - break; - 8009558: bf00 nop - 800955a: e008 b.n 800956e - break; - 800955c: bf00 nop - 800955e: e006 b.n 800956e - break; - 8009560: bf00 nop - 8009562: e004 b.n 800956e - break; - 8009564: bf00 nop - 8009566: e002 b.n 800956e - break; - 8009568: bf00 nop - 800956a: e000 b.n 800956e - break; - 800956c: bf00 nop - } - return ERR_OK; - 800956e: 2300 movs r3, #0 -} - 8009570: 4618 mov r0, r3 - 8009572: 3724 adds r7, #36 ; 0x24 - 8009574: 46bd mov sp, r7 - 8009576: bd90 pop {r4, r7, pc} - 8009578: 200099e8 .word 0x200099e8 - 800957c: 200099e4 .word 0x200099e4 - 8009580: 20009a18 .word 0x20009a18 - 8009584: 20009a10 .word 0x20009a10 - 8009588: 20009a19 .word 0x20009a19 - 800958c: 200099e0 .word 0x200099e0 - -08009590 : - * - * Called from tcp_receive() - */ -static void -tcp_oos_insert_segment(struct tcp_seg *cseg, struct tcp_seg *next) -{ - 8009590: b590 push {r4, r7, lr} - 8009592: b085 sub sp, #20 - 8009594: af00 add r7, sp, #0 - 8009596: 6078 str r0, [r7, #4] - 8009598: 6039 str r1, [r7, #0] - struct tcp_seg *old_seg; - - LWIP_ASSERT("tcp_oos_insert_segment: invalid cseg", cseg != NULL); - 800959a: 687b ldr r3, [r7, #4] - 800959c: 2b00 cmp r3, #0 - 800959e: d106 bne.n 80095ae - 80095a0: 4b3b ldr r3, [pc, #236] ; (8009690 ) - 80095a2: f240 421f movw r2, #1055 ; 0x41f - 80095a6: 493b ldr r1, [pc, #236] ; (8009694 ) - 80095a8: 483b ldr r0, [pc, #236] ; (8009698 ) - 80095aa: f007 fd7d bl 80110a8 - - if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) { - 80095ae: 687b ldr r3, [r7, #4] - 80095b0: 68db ldr r3, [r3, #12] - 80095b2: 899b ldrh r3, [r3, #12] - 80095b4: b29b uxth r3, r3 - 80095b6: 4618 mov r0, r3 - 80095b8: f7fb fc94 bl 8004ee4 - 80095bc: 4603 mov r3, r0 - 80095be: b2db uxtb r3, r3 - 80095c0: f003 0301 and.w r3, r3, #1 - 80095c4: 2b00 cmp r3, #0 - 80095c6: d028 beq.n 800961a - /* received segment overlaps all following segments */ - tcp_segs_free(next); - 80095c8: 6838 ldr r0, [r7, #0] - 80095ca: f7fe fa63 bl 8007a94 - next = NULL; - 80095ce: 2300 movs r3, #0 - 80095d0: 603b str r3, [r7, #0] - 80095d2: e056 b.n 8009682 - oos queue may have segments with FIN flag */ - while (next && - TCP_SEQ_GEQ((seqno + cseg->len), - (next->tcphdr->seqno + next->len))) { - /* cseg with FIN already processed */ - if (TCPH_FLAGS(next->tcphdr) & TCP_FIN) { - 80095d4: 683b ldr r3, [r7, #0] - 80095d6: 68db ldr r3, [r3, #12] - 80095d8: 899b ldrh r3, [r3, #12] - 80095da: b29b uxth r3, r3 - 80095dc: 4618 mov r0, r3 - 80095de: f7fb fc81 bl 8004ee4 - 80095e2: 4603 mov r3, r0 - 80095e4: b2db uxtb r3, r3 - 80095e6: f003 0301 and.w r3, r3, #1 - 80095ea: 2b00 cmp r3, #0 - 80095ec: d00d beq.n 800960a - TCPH_SET_FLAG(cseg->tcphdr, TCP_FIN); - 80095ee: 687b ldr r3, [r7, #4] - 80095f0: 68db ldr r3, [r3, #12] - 80095f2: 899b ldrh r3, [r3, #12] - 80095f4: b29c uxth r4, r3 - 80095f6: 2001 movs r0, #1 - 80095f8: f7fb fc74 bl 8004ee4 - 80095fc: 4603 mov r3, r0 - 80095fe: 461a mov r2, r3 - 8009600: 687b ldr r3, [r7, #4] - 8009602: 68db ldr r3, [r3, #12] - 8009604: 4322 orrs r2, r4 - 8009606: b292 uxth r2, r2 - 8009608: 819a strh r2, [r3, #12] - } - old_seg = next; - 800960a: 683b ldr r3, [r7, #0] - 800960c: 60fb str r3, [r7, #12] - next = next->next; - 800960e: 683b ldr r3, [r7, #0] - 8009610: 681b ldr r3, [r3, #0] - 8009612: 603b str r3, [r7, #0] - tcp_seg_free(old_seg); - 8009614: 68f8 ldr r0, [r7, #12] - 8009616: f7fe fa52 bl 8007abe - while (next && - 800961a: 683b ldr r3, [r7, #0] - 800961c: 2b00 cmp r3, #0 - 800961e: d00e beq.n 800963e - TCP_SEQ_GEQ((seqno + cseg->len), - 8009620: 687b ldr r3, [r7, #4] - 8009622: 891b ldrh r3, [r3, #8] - 8009624: 461a mov r2, r3 - 8009626: 4b1d ldr r3, [pc, #116] ; (800969c ) - 8009628: 681b ldr r3, [r3, #0] - 800962a: 441a add r2, r3 - 800962c: 683b ldr r3, [r7, #0] - 800962e: 68db ldr r3, [r3, #12] - 8009630: 685b ldr r3, [r3, #4] - 8009632: 6839 ldr r1, [r7, #0] - 8009634: 8909 ldrh r1, [r1, #8] - 8009636: 440b add r3, r1 - 8009638: 1ad3 subs r3, r2, r3 - while (next && - 800963a: 2b00 cmp r3, #0 - 800963c: daca bge.n 80095d4 - } - if (next && - 800963e: 683b ldr r3, [r7, #0] - 8009640: 2b00 cmp r3, #0 - 8009642: d01e beq.n 8009682 - TCP_SEQ_GT(seqno + cseg->len, next->tcphdr->seqno)) { - 8009644: 687b ldr r3, [r7, #4] - 8009646: 891b ldrh r3, [r3, #8] - 8009648: 461a mov r2, r3 - 800964a: 4b14 ldr r3, [pc, #80] ; (800969c ) - 800964c: 681b ldr r3, [r3, #0] - 800964e: 441a add r2, r3 - 8009650: 683b ldr r3, [r7, #0] - 8009652: 68db ldr r3, [r3, #12] - 8009654: 685b ldr r3, [r3, #4] - 8009656: 1ad3 subs r3, r2, r3 - if (next && - 8009658: 2b00 cmp r3, #0 - 800965a: dd12 ble.n 8009682 - /* We need to trim the incoming segment. */ - cseg->len = (u16_t)(next->tcphdr->seqno - seqno); - 800965c: 683b ldr r3, [r7, #0] - 800965e: 68db ldr r3, [r3, #12] - 8009660: 685b ldr r3, [r3, #4] - 8009662: b29a uxth r2, r3 - 8009664: 4b0d ldr r3, [pc, #52] ; (800969c ) - 8009666: 681b ldr r3, [r3, #0] - 8009668: b29b uxth r3, r3 - 800966a: 1ad3 subs r3, r2, r3 - 800966c: b29a uxth r2, r3 - 800966e: 687b ldr r3, [r7, #4] - 8009670: 811a strh r2, [r3, #8] - pbuf_realloc(cseg->p, cseg->len); - 8009672: 687b ldr r3, [r7, #4] - 8009674: 685a ldr r2, [r3, #4] - 8009676: 687b ldr r3, [r7, #4] - 8009678: 891b ldrh r3, [r3, #8] - 800967a: 4619 mov r1, r3 - 800967c: 4610 mov r0, r2 - 800967e: f7fc fe15 bl 80062ac - } - } - cseg->next = next; - 8009682: 687b ldr r3, [r7, #4] - 8009684: 683a ldr r2, [r7, #0] - 8009686: 601a str r2, [r3, #0] -} - 8009688: bf00 nop - 800968a: 3714 adds r7, #20 - 800968c: 46bd mov sp, r7 - 800968e: bd90 pop {r4, r7, pc} - 8009690: 08016e14 .word 0x08016e14 - 8009694: 080170d4 .word 0x080170d4 - 8009698: 08016e60 .word 0x08016e60 - 800969c: 20009a0c .word 0x20009a0c - -080096a0 : - -/** Remove segments from a list if the incoming ACK acknowledges them */ -static struct tcp_seg * -tcp_free_acked_segments(struct tcp_pcb *pcb, struct tcp_seg *seg_list, const char *dbg_list_name, - struct tcp_seg *dbg_other_seg_list) -{ - 80096a0: b5b0 push {r4, r5, r7, lr} - 80096a2: b086 sub sp, #24 - 80096a4: af00 add r7, sp, #0 - 80096a6: 60f8 str r0, [r7, #12] - 80096a8: 60b9 str r1, [r7, #8] - 80096aa: 607a str r2, [r7, #4] - 80096ac: 603b str r3, [r7, #0] - u16_t clen; - - LWIP_UNUSED_ARG(dbg_list_name); - LWIP_UNUSED_ARG(dbg_other_seg_list); - - while (seg_list != NULL && - 80096ae: e03e b.n 800972e - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: removing %"U32_F":%"U32_F" from pcb->%s\n", - lwip_ntohl(seg_list->tcphdr->seqno), - lwip_ntohl(seg_list->tcphdr->seqno) + TCP_TCPLEN(seg_list), - dbg_list_name)); - - next = seg_list; - 80096b0: 68bb ldr r3, [r7, #8] - 80096b2: 617b str r3, [r7, #20] - seg_list = seg_list->next; - 80096b4: 68bb ldr r3, [r7, #8] - 80096b6: 681b ldr r3, [r3, #0] - 80096b8: 60bb str r3, [r7, #8] - - clen = pbuf_clen(next->p); - 80096ba: 697b ldr r3, [r7, #20] - 80096bc: 685b ldr r3, [r3, #4] - 80096be: 4618 mov r0, r3 - 80096c0: f7fd f802 bl 80066c8 - 80096c4: 4603 mov r3, r0 - 80096c6: 827b strh r3, [r7, #18] - LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"TCPWNDSIZE_F" ... ", - (tcpwnd_size_t)pcb->snd_queuelen)); - LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= clen)); - 80096c8: 68fb ldr r3, [r7, #12] - 80096ca: f8b3 3066 ldrh.w r3, [r3, #102] ; 0x66 - 80096ce: 8a7a ldrh r2, [r7, #18] - 80096d0: 429a cmp r2, r3 - 80096d2: d906 bls.n 80096e2 - 80096d4: 4b2a ldr r3, [pc, #168] ; (8009780 ) - 80096d6: f240 4257 movw r2, #1111 ; 0x457 - 80096da: 492a ldr r1, [pc, #168] ; (8009784 ) - 80096dc: 482a ldr r0, [pc, #168] ; (8009788 ) - 80096de: f007 fce3 bl 80110a8 - - pcb->snd_queuelen = (u16_t)(pcb->snd_queuelen - clen); - 80096e2: 68fb ldr r3, [r7, #12] - 80096e4: f8b3 2066 ldrh.w r2, [r3, #102] ; 0x66 - 80096e8: 8a7b ldrh r3, [r7, #18] - 80096ea: 1ad3 subs r3, r2, r3 - 80096ec: b29a uxth r2, r3 - 80096ee: 68fb ldr r3, [r7, #12] - 80096f0: f8a3 2066 strh.w r2, [r3, #102] ; 0x66 - recv_acked = (tcpwnd_size_t)(recv_acked + next->len); - 80096f4: 697b ldr r3, [r7, #20] - 80096f6: 891a ldrh r2, [r3, #8] - 80096f8: 4b24 ldr r3, [pc, #144] ; (800978c ) - 80096fa: 881b ldrh r3, [r3, #0] - 80096fc: 4413 add r3, r2 - 80096fe: b29a uxth r2, r3 - 8009700: 4b22 ldr r3, [pc, #136] ; (800978c ) - 8009702: 801a strh r2, [r3, #0] - tcp_seg_free(next); - 8009704: 6978 ldr r0, [r7, #20] - 8009706: f7fe f9da bl 8007abe - - LWIP_DEBUGF(TCP_QLEN_DEBUG, ("%"TCPWNDSIZE_F" (after freeing %s)\n", - (tcpwnd_size_t)pcb->snd_queuelen, - dbg_list_name)); - if (pcb->snd_queuelen != 0) { - 800970a: 68fb ldr r3, [r7, #12] - 800970c: f8b3 3066 ldrh.w r3, [r3, #102] ; 0x66 - 8009710: 2b00 cmp r3, #0 - 8009712: d00c beq.n 800972e - LWIP_ASSERT("tcp_receive: valid queue length", - 8009714: 68bb ldr r3, [r7, #8] - 8009716: 2b00 cmp r3, #0 - 8009718: d109 bne.n 800972e - 800971a: 683b ldr r3, [r7, #0] - 800971c: 2b00 cmp r3, #0 - 800971e: d106 bne.n 800972e - 8009720: 4b17 ldr r3, [pc, #92] ; (8009780 ) - 8009722: f240 4261 movw r2, #1121 ; 0x461 - 8009726: 491a ldr r1, [pc, #104] ; (8009790 ) - 8009728: 4817 ldr r0, [pc, #92] ; (8009788 ) - 800972a: f007 fcbd bl 80110a8 - while (seg_list != NULL && - 800972e: 68bb ldr r3, [r7, #8] - 8009730: 2b00 cmp r3, #0 - 8009732: d020 beq.n 8009776 - TCP_SEQ_LEQ(lwip_ntohl(seg_list->tcphdr->seqno) + - 8009734: 68bb ldr r3, [r7, #8] - 8009736: 68db ldr r3, [r3, #12] - 8009738: 685b ldr r3, [r3, #4] - 800973a: 4618 mov r0, r3 - 800973c: f7fb fbe7 bl 8004f0e - 8009740: 4604 mov r4, r0 - 8009742: 68bb ldr r3, [r7, #8] - 8009744: 891b ldrh r3, [r3, #8] - 8009746: 461d mov r5, r3 - 8009748: 68bb ldr r3, [r7, #8] - 800974a: 68db ldr r3, [r3, #12] - 800974c: 899b ldrh r3, [r3, #12] - 800974e: b29b uxth r3, r3 - 8009750: 4618 mov r0, r3 - 8009752: f7fb fbc7 bl 8004ee4 - 8009756: 4603 mov r3, r0 - 8009758: b2db uxtb r3, r3 - 800975a: f003 0303 and.w r3, r3, #3 - 800975e: 2b00 cmp r3, #0 - 8009760: d001 beq.n 8009766 - 8009762: 2301 movs r3, #1 - 8009764: e000 b.n 8009768 - 8009766: 2300 movs r3, #0 - 8009768: 442b add r3, r5 - 800976a: 18e2 adds r2, r4, r3 - 800976c: 4b09 ldr r3, [pc, #36] ; (8009794 ) - 800976e: 681b ldr r3, [r3, #0] - 8009770: 1ad3 subs r3, r2, r3 - while (seg_list != NULL && - 8009772: 2b00 cmp r3, #0 - 8009774: dd9c ble.n 80096b0 - seg_list != NULL || dbg_other_seg_list != NULL); - } - } - return seg_list; - 8009776: 68bb ldr r3, [r7, #8] -} - 8009778: 4618 mov r0, r3 - 800977a: 3718 adds r7, #24 - 800977c: 46bd mov sp, r7 - 800977e: bdb0 pop {r4, r5, r7, pc} - 8009780: 08016e14 .word 0x08016e14 - 8009784: 080170fc .word 0x080170fc - 8009788: 08016e60 .word 0x08016e60 - 800978c: 20009a14 .word 0x20009a14 - 8009790: 08017124 .word 0x08017124 - 8009794: 20009a10 .word 0x20009a10 - -08009798 : - * - * Called from tcp_process(). - */ -static void -tcp_receive(struct tcp_pcb *pcb) -{ - 8009798: b5b0 push {r4, r5, r7, lr} - 800979a: b094 sub sp, #80 ; 0x50 - 800979c: af00 add r7, sp, #0 - 800979e: 6078 str r0, [r7, #4] - s16_t m; - u32_t right_wnd_edge; - int found_dupack = 0; - 80097a0: 2300 movs r3, #0 - 80097a2: 64bb str r3, [r7, #72] ; 0x48 - - LWIP_ASSERT("tcp_receive: invalid pcb", pcb != NULL); - 80097a4: 687b ldr r3, [r7, #4] - 80097a6: 2b00 cmp r3, #0 - 80097a8: d106 bne.n 80097b8 - 80097aa: 4b91 ldr r3, [pc, #580] ; (80099f0 ) - 80097ac: f240 427b movw r2, #1147 ; 0x47b - 80097b0: 4990 ldr r1, [pc, #576] ; (80099f4 ) - 80097b2: 4891 ldr r0, [pc, #580] ; (80099f8 ) - 80097b4: f007 fc78 bl 80110a8 - LWIP_ASSERT("tcp_receive: wrong state", pcb->state >= ESTABLISHED); - 80097b8: 687b ldr r3, [r7, #4] - 80097ba: 7d1b ldrb r3, [r3, #20] - 80097bc: 2b03 cmp r3, #3 - 80097be: d806 bhi.n 80097ce - 80097c0: 4b8b ldr r3, [pc, #556] ; (80099f0 ) - 80097c2: f240 427c movw r2, #1148 ; 0x47c - 80097c6: 498d ldr r1, [pc, #564] ; (80099fc ) - 80097c8: 488b ldr r0, [pc, #556] ; (80099f8 ) - 80097ca: f007 fc6d bl 80110a8 - - if (flags & TCP_ACK) { - 80097ce: 4b8c ldr r3, [pc, #560] ; (8009a00 ) - 80097d0: 781b ldrb r3, [r3, #0] - 80097d2: f003 0310 and.w r3, r3, #16 - 80097d6: 2b00 cmp r3, #0 - 80097d8: f000 8264 beq.w 8009ca4 - right_wnd_edge = pcb->snd_wnd + pcb->snd_wl2; - 80097dc: 687b ldr r3, [r7, #4] - 80097de: f8b3 3060 ldrh.w r3, [r3, #96] ; 0x60 - 80097e2: 461a mov r2, r3 - 80097e4: 687b ldr r3, [r7, #4] - 80097e6: 6d9b ldr r3, [r3, #88] ; 0x58 - 80097e8: 4413 add r3, r2 - 80097ea: 633b str r3, [r7, #48] ; 0x30 - - /* Update window. */ - if (TCP_SEQ_LT(pcb->snd_wl1, seqno) || - 80097ec: 687b ldr r3, [r7, #4] - 80097ee: 6d5a ldr r2, [r3, #84] ; 0x54 - 80097f0: 4b84 ldr r3, [pc, #528] ; (8009a04 ) - 80097f2: 681b ldr r3, [r3, #0] - 80097f4: 1ad3 subs r3, r2, r3 - 80097f6: 2b00 cmp r3, #0 - 80097f8: db1b blt.n 8009832 - (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) || - 80097fa: 687b ldr r3, [r7, #4] - 80097fc: 6d5a ldr r2, [r3, #84] ; 0x54 - 80097fe: 4b81 ldr r3, [pc, #516] ; (8009a04 ) - 8009800: 681b ldr r3, [r3, #0] - if (TCP_SEQ_LT(pcb->snd_wl1, seqno) || - 8009802: 429a cmp r2, r3 - 8009804: d106 bne.n 8009814 - (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) || - 8009806: 687b ldr r3, [r7, #4] - 8009808: 6d9a ldr r2, [r3, #88] ; 0x58 - 800980a: 4b7f ldr r3, [pc, #508] ; (8009a08 ) - 800980c: 681b ldr r3, [r3, #0] - 800980e: 1ad3 subs r3, r2, r3 - 8009810: 2b00 cmp r3, #0 - 8009812: db0e blt.n 8009832 - (pcb->snd_wl2 == ackno && (u32_t)SND_WND_SCALE(pcb, tcphdr->wnd) > pcb->snd_wnd)) { - 8009814: 687b ldr r3, [r7, #4] - 8009816: 6d9a ldr r2, [r3, #88] ; 0x58 - 8009818: 4b7b ldr r3, [pc, #492] ; (8009a08 ) - 800981a: 681b ldr r3, [r3, #0] - (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) || - 800981c: 429a cmp r2, r3 - 800981e: d125 bne.n 800986c - (pcb->snd_wl2 == ackno && (u32_t)SND_WND_SCALE(pcb, tcphdr->wnd) > pcb->snd_wnd)) { - 8009820: 4b7a ldr r3, [pc, #488] ; (8009a0c ) - 8009822: 681b ldr r3, [r3, #0] - 8009824: 89db ldrh r3, [r3, #14] - 8009826: b29a uxth r2, r3 - 8009828: 687b ldr r3, [r7, #4] - 800982a: f8b3 3060 ldrh.w r3, [r3, #96] ; 0x60 - 800982e: 429a cmp r2, r3 - 8009830: d91c bls.n 800986c - pcb->snd_wnd = SND_WND_SCALE(pcb, tcphdr->wnd); - 8009832: 4b76 ldr r3, [pc, #472] ; (8009a0c ) - 8009834: 681b ldr r3, [r3, #0] - 8009836: 89db ldrh r3, [r3, #14] - 8009838: b29a uxth r2, r3 - 800983a: 687b ldr r3, [r7, #4] - 800983c: f8a3 2060 strh.w r2, [r3, #96] ; 0x60 - /* keep track of the biggest window announced by the remote host to calculate - the maximum segment size */ - if (pcb->snd_wnd_max < pcb->snd_wnd) { - 8009840: 687b ldr r3, [r7, #4] - 8009842: f8b3 2062 ldrh.w r2, [r3, #98] ; 0x62 - 8009846: 687b ldr r3, [r7, #4] - 8009848: f8b3 3060 ldrh.w r3, [r3, #96] ; 0x60 - 800984c: 429a cmp r2, r3 - 800984e: d205 bcs.n 800985c - pcb->snd_wnd_max = pcb->snd_wnd; - 8009850: 687b ldr r3, [r7, #4] - 8009852: f8b3 2060 ldrh.w r2, [r3, #96] ; 0x60 - 8009856: 687b ldr r3, [r7, #4] - 8009858: f8a3 2062 strh.w r2, [r3, #98] ; 0x62 - } - pcb->snd_wl1 = seqno; - 800985c: 4b69 ldr r3, [pc, #420] ; (8009a04 ) - 800985e: 681a ldr r2, [r3, #0] - 8009860: 687b ldr r3, [r7, #4] - 8009862: 655a str r2, [r3, #84] ; 0x54 - pcb->snd_wl2 = ackno; - 8009864: 4b68 ldr r3, [pc, #416] ; (8009a08 ) - 8009866: 681a ldr r2, [r3, #0] - 8009868: 687b ldr r3, [r7, #4] - 800986a: 659a str r2, [r3, #88] ; 0x58 - * If it only passes 1, should reset dupack counter - * - */ - - /* Clause 1 */ - if (TCP_SEQ_LEQ(ackno, pcb->lastack)) { - 800986c: 4b66 ldr r3, [pc, #408] ; (8009a08 ) - 800986e: 681a ldr r2, [r3, #0] - 8009870: 687b ldr r3, [r7, #4] - 8009872: 6c5b ldr r3, [r3, #68] ; 0x44 - 8009874: 1ad3 subs r3, r2, r3 - 8009876: 2b00 cmp r3, #0 - 8009878: dc58 bgt.n 800992c - /* Clause 2 */ - if (tcplen == 0) { - 800987a: 4b65 ldr r3, [pc, #404] ; (8009a10 ) - 800987c: 881b ldrh r3, [r3, #0] - 800987e: 2b00 cmp r3, #0 - 8009880: d14b bne.n 800991a - /* Clause 3 */ - if (pcb->snd_wl2 + pcb->snd_wnd == right_wnd_edge) { - 8009882: 687b ldr r3, [r7, #4] - 8009884: 6d9b ldr r3, [r3, #88] ; 0x58 - 8009886: 687a ldr r2, [r7, #4] - 8009888: f8b2 2060 ldrh.w r2, [r2, #96] ; 0x60 - 800988c: 4413 add r3, r2 - 800988e: 6b3a ldr r2, [r7, #48] ; 0x30 - 8009890: 429a cmp r2, r3 - 8009892: d142 bne.n 800991a - /* Clause 4 */ - if (pcb->rtime >= 0) { - 8009894: 687b ldr r3, [r7, #4] - 8009896: f9b3 3030 ldrsh.w r3, [r3, #48] ; 0x30 - 800989a: 2b00 cmp r3, #0 - 800989c: db3d blt.n 800991a - /* Clause 5 */ - if (pcb->lastack == ackno) { - 800989e: 687b ldr r3, [r7, #4] - 80098a0: 6c5a ldr r2, [r3, #68] ; 0x44 - 80098a2: 4b59 ldr r3, [pc, #356] ; (8009a08 ) - 80098a4: 681b ldr r3, [r3, #0] - 80098a6: 429a cmp r2, r3 - 80098a8: d137 bne.n 800991a - found_dupack = 1; - 80098aa: 2301 movs r3, #1 - 80098ac: 64bb str r3, [r7, #72] ; 0x48 - if ((u8_t)(pcb->dupacks + 1) > pcb->dupacks) { - 80098ae: 687b ldr r3, [r7, #4] - 80098b0: f893 3043 ldrb.w r3, [r3, #67] ; 0x43 - 80098b4: 2bff cmp r3, #255 ; 0xff - 80098b6: d007 beq.n 80098c8 - ++pcb->dupacks; - 80098b8: 687b ldr r3, [r7, #4] - 80098ba: f893 3043 ldrb.w r3, [r3, #67] ; 0x43 - 80098be: 3301 adds r3, #1 - 80098c0: b2da uxtb r2, r3 - 80098c2: 687b ldr r3, [r7, #4] - 80098c4: f883 2043 strb.w r2, [r3, #67] ; 0x43 - } - if (pcb->dupacks > 3) { - 80098c8: 687b ldr r3, [r7, #4] - 80098ca: f893 3043 ldrb.w r3, [r3, #67] ; 0x43 - 80098ce: 2b03 cmp r3, #3 - 80098d0: d91b bls.n 800990a - /* Inflate the congestion window */ - TCP_WND_INC(pcb->cwnd, pcb->mss); - 80098d2: 687b ldr r3, [r7, #4] - 80098d4: f8b3 2048 ldrh.w r2, [r3, #72] ; 0x48 - 80098d8: 687b ldr r3, [r7, #4] - 80098da: 8e5b ldrh r3, [r3, #50] ; 0x32 - 80098dc: 4413 add r3, r2 - 80098de: b29a uxth r2, r3 - 80098e0: 687b ldr r3, [r7, #4] - 80098e2: f8b3 3048 ldrh.w r3, [r3, #72] ; 0x48 - 80098e6: 429a cmp r2, r3 - 80098e8: d30a bcc.n 8009900 - 80098ea: 687b ldr r3, [r7, #4] - 80098ec: f8b3 2048 ldrh.w r2, [r3, #72] ; 0x48 - 80098f0: 687b ldr r3, [r7, #4] - 80098f2: 8e5b ldrh r3, [r3, #50] ; 0x32 - 80098f4: 4413 add r3, r2 - 80098f6: b29a uxth r2, r3 - 80098f8: 687b ldr r3, [r7, #4] - 80098fa: f8a3 2048 strh.w r2, [r3, #72] ; 0x48 - 80098fe: e004 b.n 800990a - 8009900: 687b ldr r3, [r7, #4] - 8009902: f64f 72ff movw r2, #65535 ; 0xffff - 8009906: f8a3 2048 strh.w r2, [r3, #72] ; 0x48 - } - if (pcb->dupacks >= 3) { - 800990a: 687b ldr r3, [r7, #4] - 800990c: f893 3043 ldrb.w r3, [r3, #67] ; 0x43 - 8009910: 2b02 cmp r3, #2 - 8009912: d902 bls.n 800991a - /* Do fast retransmit (checked via TF_INFR, not via dupacks count) */ - tcp_rexmit_fast(pcb); - 8009914: 6878 ldr r0, [r7, #4] - 8009916: f001 feeb bl 800b6f0 - } - } - } - /* If Clause (1) or more is true, but not a duplicate ack, reset - * count of consecutive duplicate acks */ - if (!found_dupack) { - 800991a: 6cbb ldr r3, [r7, #72] ; 0x48 - 800991c: 2b00 cmp r3, #0 - 800991e: f040 8161 bne.w 8009be4 - pcb->dupacks = 0; - 8009922: 687b ldr r3, [r7, #4] - 8009924: 2200 movs r2, #0 - 8009926: f883 2043 strb.w r2, [r3, #67] ; 0x43 - 800992a: e15b b.n 8009be4 - } - } else if (TCP_SEQ_BETWEEN(ackno, pcb->lastack + 1, pcb->snd_nxt)) { - 800992c: 4b36 ldr r3, [pc, #216] ; (8009a08 ) - 800992e: 681a ldr r2, [r3, #0] - 8009930: 687b ldr r3, [r7, #4] - 8009932: 6c5b ldr r3, [r3, #68] ; 0x44 - 8009934: 1ad3 subs r3, r2, r3 - 8009936: 3b01 subs r3, #1 - 8009938: 2b00 cmp r3, #0 - 800993a: f2c0 814e blt.w 8009bda - 800993e: 4b32 ldr r3, [pc, #200] ; (8009a08 ) - 8009940: 681a ldr r2, [r3, #0] - 8009942: 687b ldr r3, [r7, #4] - 8009944: 6d1b ldr r3, [r3, #80] ; 0x50 - 8009946: 1ad3 subs r3, r2, r3 - 8009948: 2b00 cmp r3, #0 - 800994a: f300 8146 bgt.w 8009bda - tcpwnd_size_t acked; - - /* Reset the "IN Fast Retransmit" flag, since we are no longer - in fast retransmit. Also reset the congestion window to the - slow start threshold. */ - if (pcb->flags & TF_INFR) { - 800994e: 687b ldr r3, [r7, #4] - 8009950: 8b5b ldrh r3, [r3, #26] - 8009952: f003 0304 and.w r3, r3, #4 - 8009956: 2b00 cmp r3, #0 - 8009958: d010 beq.n 800997c - tcp_clear_flags(pcb, TF_INFR); - 800995a: 687b ldr r3, [r7, #4] - 800995c: 8b5b ldrh r3, [r3, #26] - 800995e: f023 0304 bic.w r3, r3, #4 - 8009962: b29a uxth r2, r3 - 8009964: 687b ldr r3, [r7, #4] - 8009966: 835a strh r2, [r3, #26] - pcb->cwnd = pcb->ssthresh; - 8009968: 687b ldr r3, [r7, #4] - 800996a: f8b3 204a ldrh.w r2, [r3, #74] ; 0x4a - 800996e: 687b ldr r3, [r7, #4] - 8009970: f8a3 2048 strh.w r2, [r3, #72] ; 0x48 - pcb->bytes_acked = 0; - 8009974: 687b ldr r3, [r7, #4] - 8009976: 2200 movs r2, #0 - 8009978: f8a3 206a strh.w r2, [r3, #106] ; 0x6a - } - - /* Reset the number of retransmissions. */ - pcb->nrtx = 0; - 800997c: 687b ldr r3, [r7, #4] - 800997e: 2200 movs r2, #0 - 8009980: f883 2042 strb.w r2, [r3, #66] ; 0x42 - - /* Reset the retransmission time-out. */ - pcb->rto = (s16_t)((pcb->sa >> 3) + pcb->sv); - 8009984: 687b ldr r3, [r7, #4] - 8009986: f9b3 303c ldrsh.w r3, [r3, #60] ; 0x3c - 800998a: 10db asrs r3, r3, #3 - 800998c: b21b sxth r3, r3 - 800998e: b29a uxth r2, r3 - 8009990: 687b ldr r3, [r7, #4] - 8009992: f9b3 303e ldrsh.w r3, [r3, #62] ; 0x3e - 8009996: b29b uxth r3, r3 - 8009998: 4413 add r3, r2 - 800999a: b29b uxth r3, r3 - 800999c: b21a sxth r2, r3 - 800999e: 687b ldr r3, [r7, #4] - 80099a0: f8a3 2040 strh.w r2, [r3, #64] ; 0x40 - - /* Record how much data this ACK acks */ - acked = (tcpwnd_size_t)(ackno - pcb->lastack); - 80099a4: 4b18 ldr r3, [pc, #96] ; (8009a08 ) - 80099a6: 681b ldr r3, [r3, #0] - 80099a8: b29a uxth r2, r3 - 80099aa: 687b ldr r3, [r7, #4] - 80099ac: 6c5b ldr r3, [r3, #68] ; 0x44 - 80099ae: b29b uxth r3, r3 - 80099b0: 1ad3 subs r3, r2, r3 - 80099b2: 85fb strh r3, [r7, #46] ; 0x2e - - /* Reset the fast retransmit variables. */ - pcb->dupacks = 0; - 80099b4: 687b ldr r3, [r7, #4] - 80099b6: 2200 movs r2, #0 - 80099b8: f883 2043 strb.w r2, [r3, #67] ; 0x43 - pcb->lastack = ackno; - 80099bc: 4b12 ldr r3, [pc, #72] ; (8009a08 ) - 80099be: 681a ldr r2, [r3, #0] - 80099c0: 687b ldr r3, [r7, #4] - 80099c2: 645a str r2, [r3, #68] ; 0x44 - - /* Update the congestion control variables (cwnd and - ssthresh). */ - if (pcb->state >= ESTABLISHED) { - 80099c4: 687b ldr r3, [r7, #4] - 80099c6: 7d1b ldrb r3, [r3, #20] - 80099c8: 2b03 cmp r3, #3 - 80099ca: f240 8097 bls.w 8009afc - if (pcb->cwnd < pcb->ssthresh) { - 80099ce: 687b ldr r3, [r7, #4] - 80099d0: f8b3 2048 ldrh.w r2, [r3, #72] ; 0x48 - 80099d4: 687b ldr r3, [r7, #4] - 80099d6: f8b3 304a ldrh.w r3, [r3, #74] ; 0x4a - 80099da: 429a cmp r2, r3 - 80099dc: d245 bcs.n 8009a6a - tcpwnd_size_t increase; - /* limit to 1 SMSS segment during period following RTO */ - u8_t num_seg = (pcb->flags & TF_RTO) ? 1 : 2; - 80099de: 687b ldr r3, [r7, #4] - 80099e0: 8b5b ldrh r3, [r3, #26] - 80099e2: f403 6300 and.w r3, r3, #2048 ; 0x800 - 80099e6: 2b00 cmp r3, #0 - 80099e8: d014 beq.n 8009a14 - 80099ea: 2301 movs r3, #1 - 80099ec: e013 b.n 8009a16 - 80099ee: bf00 nop - 80099f0: 08016e14 .word 0x08016e14 - 80099f4: 08017144 .word 0x08017144 - 80099f8: 08016e60 .word 0x08016e60 - 80099fc: 08017160 .word 0x08017160 - 8009a00: 20009a18 .word 0x20009a18 - 8009a04: 20009a0c .word 0x20009a0c - 8009a08: 20009a10 .word 0x20009a10 - 8009a0c: 200099fc .word 0x200099fc - 8009a10: 20009a16 .word 0x20009a16 - 8009a14: 2302 movs r3, #2 - 8009a16: f887 302d strb.w r3, [r7, #45] ; 0x2d - /* RFC 3465, section 2.2 Slow Start */ - increase = LWIP_MIN(acked, (tcpwnd_size_t)(num_seg * pcb->mss)); - 8009a1a: f897 302d ldrb.w r3, [r7, #45] ; 0x2d - 8009a1e: b29a uxth r2, r3 - 8009a20: 687b ldr r3, [r7, #4] - 8009a22: 8e5b ldrh r3, [r3, #50] ; 0x32 - 8009a24: fb12 f303 smulbb r3, r2, r3 - 8009a28: b29b uxth r3, r3 - 8009a2a: 8dfa ldrh r2, [r7, #46] ; 0x2e - 8009a2c: 4293 cmp r3, r2 - 8009a2e: bf28 it cs - 8009a30: 4613 movcs r3, r2 - 8009a32: 857b strh r3, [r7, #42] ; 0x2a - TCP_WND_INC(pcb->cwnd, increase); - 8009a34: 687b ldr r3, [r7, #4] - 8009a36: f8b3 2048 ldrh.w r2, [r3, #72] ; 0x48 - 8009a3a: 8d7b ldrh r3, [r7, #42] ; 0x2a - 8009a3c: 4413 add r3, r2 - 8009a3e: b29a uxth r2, r3 - 8009a40: 687b ldr r3, [r7, #4] - 8009a42: f8b3 3048 ldrh.w r3, [r3, #72] ; 0x48 - 8009a46: 429a cmp r2, r3 - 8009a48: d309 bcc.n 8009a5e - 8009a4a: 687b ldr r3, [r7, #4] - 8009a4c: f8b3 2048 ldrh.w r2, [r3, #72] ; 0x48 - 8009a50: 8d7b ldrh r3, [r7, #42] ; 0x2a - 8009a52: 4413 add r3, r2 - 8009a54: b29a uxth r2, r3 - 8009a56: 687b ldr r3, [r7, #4] - 8009a58: f8a3 2048 strh.w r2, [r3, #72] ; 0x48 - 8009a5c: e04e b.n 8009afc - 8009a5e: 687b ldr r3, [r7, #4] - 8009a60: f64f 72ff movw r2, #65535 ; 0xffff - 8009a64: f8a3 2048 strh.w r2, [r3, #72] ; 0x48 - 8009a68: e048 b.n 8009afc - LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_receive: slow start cwnd %"TCPWNDSIZE_F"\n", pcb->cwnd)); - } else { - /* RFC 3465, section 2.1 Congestion Avoidance */ - TCP_WND_INC(pcb->bytes_acked, acked); - 8009a6a: 687b ldr r3, [r7, #4] - 8009a6c: f8b3 206a ldrh.w r2, [r3, #106] ; 0x6a - 8009a70: 8dfb ldrh r3, [r7, #46] ; 0x2e - 8009a72: 4413 add r3, r2 - 8009a74: b29a uxth r2, r3 - 8009a76: 687b ldr r3, [r7, #4] - 8009a78: f8b3 306a ldrh.w r3, [r3, #106] ; 0x6a - 8009a7c: 429a cmp r2, r3 - 8009a7e: d309 bcc.n 8009a94 - 8009a80: 687b ldr r3, [r7, #4] - 8009a82: f8b3 206a ldrh.w r2, [r3, #106] ; 0x6a - 8009a86: 8dfb ldrh r3, [r7, #46] ; 0x2e - 8009a88: 4413 add r3, r2 - 8009a8a: b29a uxth r2, r3 - 8009a8c: 687b ldr r3, [r7, #4] - 8009a8e: f8a3 206a strh.w r2, [r3, #106] ; 0x6a - 8009a92: e004 b.n 8009a9e - 8009a94: 687b ldr r3, [r7, #4] - 8009a96: f64f 72ff movw r2, #65535 ; 0xffff - 8009a9a: f8a3 206a strh.w r2, [r3, #106] ; 0x6a - if (pcb->bytes_acked >= pcb->cwnd) { - 8009a9e: 687b ldr r3, [r7, #4] - 8009aa0: f8b3 206a ldrh.w r2, [r3, #106] ; 0x6a - 8009aa4: 687b ldr r3, [r7, #4] - 8009aa6: f8b3 3048 ldrh.w r3, [r3, #72] ; 0x48 - 8009aaa: 429a cmp r2, r3 - 8009aac: d326 bcc.n 8009afc - pcb->bytes_acked = (tcpwnd_size_t)(pcb->bytes_acked - pcb->cwnd); - 8009aae: 687b ldr r3, [r7, #4] - 8009ab0: f8b3 206a ldrh.w r2, [r3, #106] ; 0x6a - 8009ab4: 687b ldr r3, [r7, #4] - 8009ab6: f8b3 3048 ldrh.w r3, [r3, #72] ; 0x48 - 8009aba: 1ad3 subs r3, r2, r3 - 8009abc: b29a uxth r2, r3 - 8009abe: 687b ldr r3, [r7, #4] - 8009ac0: f8a3 206a strh.w r2, [r3, #106] ; 0x6a - TCP_WND_INC(pcb->cwnd, pcb->mss); - 8009ac4: 687b ldr r3, [r7, #4] - 8009ac6: f8b3 2048 ldrh.w r2, [r3, #72] ; 0x48 - 8009aca: 687b ldr r3, [r7, #4] - 8009acc: 8e5b ldrh r3, [r3, #50] ; 0x32 - 8009ace: 4413 add r3, r2 - 8009ad0: b29a uxth r2, r3 - 8009ad2: 687b ldr r3, [r7, #4] - 8009ad4: f8b3 3048 ldrh.w r3, [r3, #72] ; 0x48 - 8009ad8: 429a cmp r2, r3 - 8009ada: d30a bcc.n 8009af2 - 8009adc: 687b ldr r3, [r7, #4] - 8009ade: f8b3 2048 ldrh.w r2, [r3, #72] ; 0x48 - 8009ae2: 687b ldr r3, [r7, #4] - 8009ae4: 8e5b ldrh r3, [r3, #50] ; 0x32 - 8009ae6: 4413 add r3, r2 - 8009ae8: b29a uxth r2, r3 - 8009aea: 687b ldr r3, [r7, #4] - 8009aec: f8a3 2048 strh.w r2, [r3, #72] ; 0x48 - 8009af0: e004 b.n 8009afc - 8009af2: 687b ldr r3, [r7, #4] - 8009af4: f64f 72ff movw r2, #65535 ; 0xffff - 8009af8: f8a3 2048 strh.w r2, [r3, #72] ; 0x48 - pcb->unacked != NULL ? - lwip_ntohl(pcb->unacked->tcphdr->seqno) + TCP_TCPLEN(pcb->unacked) : 0)); - - /* Remove segment from the unacknowledged list if the incoming - ACK acknowledges them. */ - pcb->unacked = tcp_free_acked_segments(pcb, pcb->unacked, "unacked", pcb->unsent); - 8009afc: 687b ldr r3, [r7, #4] - 8009afe: 6f19 ldr r1, [r3, #112] ; 0x70 - 8009b00: 687b ldr r3, [r7, #4] - 8009b02: 6edb ldr r3, [r3, #108] ; 0x6c - 8009b04: 4a98 ldr r2, [pc, #608] ; (8009d68 ) - 8009b06: 6878 ldr r0, [r7, #4] - 8009b08: f7ff fdca bl 80096a0 - 8009b0c: 4602 mov r2, r0 - 8009b0e: 687b ldr r3, [r7, #4] - 8009b10: 671a str r2, [r3, #112] ; 0x70 - on the list are acknowledged by the ACK. This may seem - strange since an "unsent" segment shouldn't be acked. The - rationale is that lwIP puts all outstanding segments on the - ->unsent list after a retransmission, so these segments may - in fact have been sent once. */ - pcb->unsent = tcp_free_acked_segments(pcb, pcb->unsent, "unsent", pcb->unacked); - 8009b12: 687b ldr r3, [r7, #4] - 8009b14: 6ed9 ldr r1, [r3, #108] ; 0x6c - 8009b16: 687b ldr r3, [r7, #4] - 8009b18: 6f1b ldr r3, [r3, #112] ; 0x70 - 8009b1a: 4a94 ldr r2, [pc, #592] ; (8009d6c ) - 8009b1c: 6878 ldr r0, [r7, #4] - 8009b1e: f7ff fdbf bl 80096a0 - 8009b22: 4602 mov r2, r0 - 8009b24: 687b ldr r3, [r7, #4] - 8009b26: 66da str r2, [r3, #108] ; 0x6c - - /* If there's nothing left to acknowledge, stop the retransmit - timer, otherwise reset it to start again */ - if (pcb->unacked == NULL) { - 8009b28: 687b ldr r3, [r7, #4] - 8009b2a: 6f1b ldr r3, [r3, #112] ; 0x70 - 8009b2c: 2b00 cmp r3, #0 - 8009b2e: d104 bne.n 8009b3a - pcb->rtime = -1; - 8009b30: 687b ldr r3, [r7, #4] - 8009b32: f64f 72ff movw r2, #65535 ; 0xffff - 8009b36: 861a strh r2, [r3, #48] ; 0x30 - 8009b38: e002 b.n 8009b40 - } else { - pcb->rtime = 0; - 8009b3a: 687b ldr r3, [r7, #4] - 8009b3c: 2200 movs r2, #0 - 8009b3e: 861a strh r2, [r3, #48] ; 0x30 - } - - pcb->polltmr = 0; - 8009b40: 687b ldr r3, [r7, #4] - 8009b42: 2200 movs r2, #0 - 8009b44: 771a strb r2, [r3, #28] - -#if TCP_OVERSIZE - if (pcb->unsent == NULL) { - 8009b46: 687b ldr r3, [r7, #4] - 8009b48: 6edb ldr r3, [r3, #108] ; 0x6c - 8009b4a: 2b00 cmp r3, #0 - 8009b4c: d103 bne.n 8009b56 - pcb->unsent_oversize = 0; - 8009b4e: 687b ldr r3, [r7, #4] - 8009b50: 2200 movs r2, #0 - 8009b52: f8a3 2068 strh.w r2, [r3, #104] ; 0x68 - /* Inform neighbor reachability of forward progress. */ - nd6_reachability_hint(ip6_current_src_addr()); - } -#endif /* LWIP_IPV6 && LWIP_ND6_TCP_REACHABILITY_HINTS*/ - - pcb->snd_buf = (tcpwnd_size_t)(pcb->snd_buf + recv_acked); - 8009b56: 687b ldr r3, [r7, #4] - 8009b58: f8b3 2064 ldrh.w r2, [r3, #100] ; 0x64 - 8009b5c: 4b84 ldr r3, [pc, #528] ; (8009d70 ) - 8009b5e: 881b ldrh r3, [r3, #0] - 8009b60: 4413 add r3, r2 - 8009b62: b29a uxth r2, r3 - 8009b64: 687b ldr r3, [r7, #4] - 8009b66: f8a3 2064 strh.w r2, [r3, #100] ; 0x64 - /* check if this ACK ends our retransmission of in-flight data */ - if (pcb->flags & TF_RTO) { - 8009b6a: 687b ldr r3, [r7, #4] - 8009b6c: 8b5b ldrh r3, [r3, #26] - 8009b6e: f403 6300 and.w r3, r3, #2048 ; 0x800 - 8009b72: 2b00 cmp r3, #0 - 8009b74: d035 beq.n 8009be2 - /* RTO is done if - 1) both queues are empty or - 2) unacked is empty and unsent head contains data not part of RTO or - 3) unacked head contains data not part of RTO */ - if (pcb->unacked == NULL) { - 8009b76: 687b ldr r3, [r7, #4] - 8009b78: 6f1b ldr r3, [r3, #112] ; 0x70 - 8009b7a: 2b00 cmp r3, #0 - 8009b7c: d118 bne.n 8009bb0 - if ((pcb->unsent == NULL) || - 8009b7e: 687b ldr r3, [r7, #4] - 8009b80: 6edb ldr r3, [r3, #108] ; 0x6c - 8009b82: 2b00 cmp r3, #0 - 8009b84: d00c beq.n 8009ba0 - (TCP_SEQ_LEQ(pcb->rto_end, lwip_ntohl(pcb->unsent->tcphdr->seqno)))) { - 8009b86: 687b ldr r3, [r7, #4] - 8009b88: 6cdc ldr r4, [r3, #76] ; 0x4c - 8009b8a: 687b ldr r3, [r7, #4] - 8009b8c: 6edb ldr r3, [r3, #108] ; 0x6c - 8009b8e: 68db ldr r3, [r3, #12] - 8009b90: 685b ldr r3, [r3, #4] - 8009b92: 4618 mov r0, r3 - 8009b94: f7fb f9bb bl 8004f0e - 8009b98: 4603 mov r3, r0 - 8009b9a: 1ae3 subs r3, r4, r3 - if ((pcb->unsent == NULL) || - 8009b9c: 2b00 cmp r3, #0 - 8009b9e: dc20 bgt.n 8009be2 - tcp_clear_flags(pcb, TF_RTO); - 8009ba0: 687b ldr r3, [r7, #4] - 8009ba2: 8b5b ldrh r3, [r3, #26] - 8009ba4: f423 6300 bic.w r3, r3, #2048 ; 0x800 - 8009ba8: b29a uxth r2, r3 - 8009baa: 687b ldr r3, [r7, #4] - 8009bac: 835a strh r2, [r3, #26] - } else if (TCP_SEQ_BETWEEN(ackno, pcb->lastack + 1, pcb->snd_nxt)) { - 8009bae: e018 b.n 8009be2 - } - } else if (TCP_SEQ_LEQ(pcb->rto_end, lwip_ntohl(pcb->unacked->tcphdr->seqno))) { - 8009bb0: 687b ldr r3, [r7, #4] - 8009bb2: 6cdc ldr r4, [r3, #76] ; 0x4c - 8009bb4: 687b ldr r3, [r7, #4] - 8009bb6: 6f1b ldr r3, [r3, #112] ; 0x70 - 8009bb8: 68db ldr r3, [r3, #12] - 8009bba: 685b ldr r3, [r3, #4] - 8009bbc: 4618 mov r0, r3 - 8009bbe: f7fb f9a6 bl 8004f0e - 8009bc2: 4603 mov r3, r0 - 8009bc4: 1ae3 subs r3, r4, r3 - 8009bc6: 2b00 cmp r3, #0 - 8009bc8: dc0b bgt.n 8009be2 - tcp_clear_flags(pcb, TF_RTO); - 8009bca: 687b ldr r3, [r7, #4] - 8009bcc: 8b5b ldrh r3, [r3, #26] - 8009bce: f423 6300 bic.w r3, r3, #2048 ; 0x800 - 8009bd2: b29a uxth r2, r3 - 8009bd4: 687b ldr r3, [r7, #4] - 8009bd6: 835a strh r2, [r3, #26] - } else if (TCP_SEQ_BETWEEN(ackno, pcb->lastack + 1, pcb->snd_nxt)) { - 8009bd8: e003 b.n 8009be2 - } - } - /* End of ACK for new data processing. */ - } else { - /* Out of sequence ACK, didn't really ack anything */ - tcp_send_empty_ack(pcb); - 8009bda: 6878 ldr r0, [r7, #4] - 8009bdc: f001 ff76 bl 800bacc - 8009be0: e000 b.n 8009be4 - } else if (TCP_SEQ_BETWEEN(ackno, pcb->lastack + 1, pcb->snd_nxt)) { - 8009be2: bf00 nop - pcb->rttest, pcb->rtseq, ackno)); - - /* RTT estimation calculations. This is done by checking if the - incoming segment acknowledges the segment we use to take a - round-trip time measurement. */ - if (pcb->rttest && TCP_SEQ_LT(pcb->rtseq, ackno)) { - 8009be4: 687b ldr r3, [r7, #4] - 8009be6: 6b5b ldr r3, [r3, #52] ; 0x34 - 8009be8: 2b00 cmp r3, #0 - 8009bea: d05b beq.n 8009ca4 - 8009bec: 687b ldr r3, [r7, #4] - 8009bee: 6b9a ldr r2, [r3, #56] ; 0x38 - 8009bf0: 4b60 ldr r3, [pc, #384] ; (8009d74 ) - 8009bf2: 681b ldr r3, [r3, #0] - 8009bf4: 1ad3 subs r3, r2, r3 - 8009bf6: 2b00 cmp r3, #0 - 8009bf8: da54 bge.n 8009ca4 - /* diff between this shouldn't exceed 32K since this are tcp timer ticks - and a round-trip shouldn't be that long... */ - m = (s16_t)(tcp_ticks - pcb->rttest); - 8009bfa: 4b5f ldr r3, [pc, #380] ; (8009d78 ) - 8009bfc: 681b ldr r3, [r3, #0] - 8009bfe: b29a uxth r2, r3 - 8009c00: 687b ldr r3, [r7, #4] - 8009c02: 6b5b ldr r3, [r3, #52] ; 0x34 - 8009c04: b29b uxth r3, r3 - 8009c06: 1ad3 subs r3, r2, r3 - 8009c08: b29b uxth r3, r3 - 8009c0a: f8a7 304e strh.w r3, [r7, #78] ; 0x4e - - LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: experienced rtt %"U16_F" ticks (%"U16_F" msec).\n", - m, (u16_t)(m * TCP_SLOW_INTERVAL))); - - /* This is taken directly from VJs original code in his paper */ - m = (s16_t)(m - (pcb->sa >> 3)); - 8009c0e: f8b7 204e ldrh.w r2, [r7, #78] ; 0x4e - 8009c12: 687b ldr r3, [r7, #4] - 8009c14: f9b3 303c ldrsh.w r3, [r3, #60] ; 0x3c - 8009c18: 10db asrs r3, r3, #3 - 8009c1a: b21b sxth r3, r3 - 8009c1c: b29b uxth r3, r3 - 8009c1e: 1ad3 subs r3, r2, r3 - 8009c20: b29b uxth r3, r3 - 8009c22: f8a7 304e strh.w r3, [r7, #78] ; 0x4e - pcb->sa = (s16_t)(pcb->sa + m); - 8009c26: 687b ldr r3, [r7, #4] - 8009c28: f9b3 303c ldrsh.w r3, [r3, #60] ; 0x3c - 8009c2c: b29a uxth r2, r3 - 8009c2e: f8b7 304e ldrh.w r3, [r7, #78] ; 0x4e - 8009c32: 4413 add r3, r2 - 8009c34: b29b uxth r3, r3 - 8009c36: b21a sxth r2, r3 - 8009c38: 687b ldr r3, [r7, #4] - 8009c3a: 879a strh r2, [r3, #60] ; 0x3c - if (m < 0) { - 8009c3c: f9b7 304e ldrsh.w r3, [r7, #78] ; 0x4e - 8009c40: 2b00 cmp r3, #0 - 8009c42: da05 bge.n 8009c50 - m = (s16_t) - m; - 8009c44: f8b7 304e ldrh.w r3, [r7, #78] ; 0x4e - 8009c48: 425b negs r3, r3 - 8009c4a: b29b uxth r3, r3 - 8009c4c: f8a7 304e strh.w r3, [r7, #78] ; 0x4e - } - m = (s16_t)(m - (pcb->sv >> 2)); - 8009c50: f8b7 204e ldrh.w r2, [r7, #78] ; 0x4e - 8009c54: 687b ldr r3, [r7, #4] - 8009c56: f9b3 303e ldrsh.w r3, [r3, #62] ; 0x3e - 8009c5a: 109b asrs r3, r3, #2 - 8009c5c: b21b sxth r3, r3 - 8009c5e: b29b uxth r3, r3 - 8009c60: 1ad3 subs r3, r2, r3 - 8009c62: b29b uxth r3, r3 - 8009c64: f8a7 304e strh.w r3, [r7, #78] ; 0x4e - pcb->sv = (s16_t)(pcb->sv + m); - 8009c68: 687b ldr r3, [r7, #4] - 8009c6a: f9b3 303e ldrsh.w r3, [r3, #62] ; 0x3e - 8009c6e: b29a uxth r2, r3 - 8009c70: f8b7 304e ldrh.w r3, [r7, #78] ; 0x4e - 8009c74: 4413 add r3, r2 - 8009c76: b29b uxth r3, r3 - 8009c78: b21a sxth r2, r3 - 8009c7a: 687b ldr r3, [r7, #4] - 8009c7c: 87da strh r2, [r3, #62] ; 0x3e - pcb->rto = (s16_t)((pcb->sa >> 3) + pcb->sv); - 8009c7e: 687b ldr r3, [r7, #4] - 8009c80: f9b3 303c ldrsh.w r3, [r3, #60] ; 0x3c - 8009c84: 10db asrs r3, r3, #3 - 8009c86: b21b sxth r3, r3 - 8009c88: b29a uxth r2, r3 - 8009c8a: 687b ldr r3, [r7, #4] - 8009c8c: f9b3 303e ldrsh.w r3, [r3, #62] ; 0x3e - 8009c90: b29b uxth r3, r3 - 8009c92: 4413 add r3, r2 - 8009c94: b29b uxth r3, r3 - 8009c96: b21a sxth r2, r3 - 8009c98: 687b ldr r3, [r7, #4] - 8009c9a: f8a3 2040 strh.w r2, [r3, #64] ; 0x40 - - LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: RTO %"U16_F" (%"U16_F" milliseconds)\n", - pcb->rto, (u16_t)(pcb->rto * TCP_SLOW_INTERVAL))); - - pcb->rttest = 0; - 8009c9e: 687b ldr r3, [r7, #4] - 8009ca0: 2200 movs r2, #0 - 8009ca2: 635a str r2, [r3, #52] ; 0x34 - - /* If the incoming segment contains data, we must process it - further unless the pcb already received a FIN. - (RFC 793, chapter 3.9, "SEGMENT ARRIVES" in states CLOSE-WAIT, CLOSING, - LAST-ACK and TIME-WAIT: "Ignore the segment text.") */ - if ((tcplen > 0) && (pcb->state < CLOSE_WAIT)) { - 8009ca4: 4b35 ldr r3, [pc, #212] ; (8009d7c ) - 8009ca6: 881b ldrh r3, [r3, #0] - 8009ca8: 2b00 cmp r3, #0 - 8009caa: f000 84e2 beq.w 800a672 - 8009cae: 687b ldr r3, [r7, #4] - 8009cb0: 7d1b ldrb r3, [r3, #20] - 8009cb2: 2b06 cmp r3, #6 - 8009cb4: f200 84dd bhi.w 800a672 - this if the sequence number of the incoming segment is less - than rcv_nxt, and the sequence number plus the length of the - segment is larger than rcv_nxt. */ - /* if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)) { - if (TCP_SEQ_LT(pcb->rcv_nxt, seqno + tcplen)) {*/ - if (TCP_SEQ_BETWEEN(pcb->rcv_nxt, seqno + 1, seqno + tcplen - 1)) { - 8009cb8: 687b ldr r3, [r7, #4] - 8009cba: 6a5a ldr r2, [r3, #36] ; 0x24 - 8009cbc: 4b30 ldr r3, [pc, #192] ; (8009d80 ) - 8009cbe: 681b ldr r3, [r3, #0] - 8009cc0: 1ad3 subs r3, r2, r3 - 8009cc2: 3b01 subs r3, #1 - 8009cc4: 2b00 cmp r3, #0 - 8009cc6: f2c0 808f blt.w 8009de8 - 8009cca: 687b ldr r3, [r7, #4] - 8009ccc: 6a5a ldr r2, [r3, #36] ; 0x24 - 8009cce: 4b2b ldr r3, [pc, #172] ; (8009d7c ) - 8009cd0: 881b ldrh r3, [r3, #0] - 8009cd2: 4619 mov r1, r3 - 8009cd4: 4b2a ldr r3, [pc, #168] ; (8009d80 ) - 8009cd6: 681b ldr r3, [r3, #0] - 8009cd8: 440b add r3, r1 - 8009cda: 1ad3 subs r3, r2, r3 - 8009cdc: 3301 adds r3, #1 - 8009cde: 2b00 cmp r3, #0 - 8009ce0: f300 8082 bgt.w 8009de8 - - After we are done with adjusting the pbuf pointers we must - adjust the ->data pointer in the seg and the segment - length.*/ - - struct pbuf *p = inseg.p; - 8009ce4: 4b27 ldr r3, [pc, #156] ; (8009d84 ) - 8009ce6: 685b ldr r3, [r3, #4] - 8009ce8: 647b str r3, [r7, #68] ; 0x44 - u32_t off32 = pcb->rcv_nxt - seqno; - 8009cea: 687b ldr r3, [r7, #4] - 8009cec: 6a5a ldr r2, [r3, #36] ; 0x24 - 8009cee: 4b24 ldr r3, [pc, #144] ; (8009d80 ) - 8009cf0: 681b ldr r3, [r3, #0] - 8009cf2: 1ad3 subs r3, r2, r3 - 8009cf4: 627b str r3, [r7, #36] ; 0x24 - u16_t new_tot_len, off; - LWIP_ASSERT("inseg.p != NULL", inseg.p); - 8009cf6: 4b23 ldr r3, [pc, #140] ; (8009d84 ) - 8009cf8: 685b ldr r3, [r3, #4] - 8009cfa: 2b00 cmp r3, #0 - 8009cfc: d106 bne.n 8009d0c - 8009cfe: 4b22 ldr r3, [pc, #136] ; (8009d88 ) - 8009d00: f240 5294 movw r2, #1428 ; 0x594 - 8009d04: 4921 ldr r1, [pc, #132] ; (8009d8c ) - 8009d06: 4822 ldr r0, [pc, #136] ; (8009d90 ) - 8009d08: f007 f9ce bl 80110a8 - LWIP_ASSERT("insane offset!", (off32 < 0xffff)); - 8009d0c: 6a7b ldr r3, [r7, #36] ; 0x24 - 8009d0e: f64f 72fe movw r2, #65534 ; 0xfffe - 8009d12: 4293 cmp r3, r2 - 8009d14: d906 bls.n 8009d24 - 8009d16: 4b1c ldr r3, [pc, #112] ; (8009d88 ) - 8009d18: f240 5295 movw r2, #1429 ; 0x595 - 8009d1c: 491d ldr r1, [pc, #116] ; (8009d94 ) - 8009d1e: 481c ldr r0, [pc, #112] ; (8009d90 ) - 8009d20: f007 f9c2 bl 80110a8 - off = (u16_t)off32; - 8009d24: 6a7b ldr r3, [r7, #36] ; 0x24 - 8009d26: f8a7 3042 strh.w r3, [r7, #66] ; 0x42 - LWIP_ASSERT("pbuf too short!", (((s32_t)inseg.p->tot_len) >= off)); - 8009d2a: 4b16 ldr r3, [pc, #88] ; (8009d84 ) - 8009d2c: 685b ldr r3, [r3, #4] - 8009d2e: 891b ldrh r3, [r3, #8] - 8009d30: f8b7 2042 ldrh.w r2, [r7, #66] ; 0x42 - 8009d34: 429a cmp r2, r3 - 8009d36: d906 bls.n 8009d46 - 8009d38: 4b13 ldr r3, [pc, #76] ; (8009d88 ) - 8009d3a: f240 5297 movw r2, #1431 ; 0x597 - 8009d3e: 4916 ldr r1, [pc, #88] ; (8009d98 ) - 8009d40: 4813 ldr r0, [pc, #76] ; (8009d90 ) - 8009d42: f007 f9b1 bl 80110a8 - inseg.len -= off; - 8009d46: 4b0f ldr r3, [pc, #60] ; (8009d84 ) - 8009d48: 891a ldrh r2, [r3, #8] - 8009d4a: f8b7 3042 ldrh.w r3, [r7, #66] ; 0x42 - 8009d4e: 1ad3 subs r3, r2, r3 - 8009d50: b29a uxth r2, r3 - 8009d52: 4b0c ldr r3, [pc, #48] ; (8009d84 ) - 8009d54: 811a strh r2, [r3, #8] - new_tot_len = (u16_t)(inseg.p->tot_len - off); - 8009d56: 4b0b ldr r3, [pc, #44] ; (8009d84 ) - 8009d58: 685b ldr r3, [r3, #4] - 8009d5a: 891a ldrh r2, [r3, #8] - 8009d5c: f8b7 3042 ldrh.w r3, [r7, #66] ; 0x42 - 8009d60: 1ad3 subs r3, r2, r3 - 8009d62: 847b strh r3, [r7, #34] ; 0x22 - while (p->len < off) { - 8009d64: e02a b.n 8009dbc - 8009d66: bf00 nop - 8009d68: 0801717c .word 0x0801717c - 8009d6c: 08017184 .word 0x08017184 - 8009d70: 20009a14 .word 0x20009a14 - 8009d74: 20009a10 .word 0x20009a10 - 8009d78: 200099d4 .word 0x200099d4 - 8009d7c: 20009a16 .word 0x20009a16 - 8009d80: 20009a0c .word 0x20009a0c - 8009d84: 200099ec .word 0x200099ec - 8009d88: 08016e14 .word 0x08016e14 - 8009d8c: 0801718c .word 0x0801718c - 8009d90: 08016e60 .word 0x08016e60 - 8009d94: 0801719c .word 0x0801719c - 8009d98: 080171ac .word 0x080171ac - off -= p->len; - 8009d9c: 6c7b ldr r3, [r7, #68] ; 0x44 - 8009d9e: 895b ldrh r3, [r3, #10] - 8009da0: f8b7 2042 ldrh.w r2, [r7, #66] ; 0x42 - 8009da4: 1ad3 subs r3, r2, r3 - 8009da6: f8a7 3042 strh.w r3, [r7, #66] ; 0x42 - /* all pbufs up to and including this one have len==0, so tot_len is equal */ - p->tot_len = new_tot_len; - 8009daa: 6c7b ldr r3, [r7, #68] ; 0x44 - 8009dac: 8c7a ldrh r2, [r7, #34] ; 0x22 - 8009dae: 811a strh r2, [r3, #8] - p->len = 0; - 8009db0: 6c7b ldr r3, [r7, #68] ; 0x44 - 8009db2: 2200 movs r2, #0 - 8009db4: 815a strh r2, [r3, #10] - p = p->next; - 8009db6: 6c7b ldr r3, [r7, #68] ; 0x44 - 8009db8: 681b ldr r3, [r3, #0] - 8009dba: 647b str r3, [r7, #68] ; 0x44 - while (p->len < off) { - 8009dbc: 6c7b ldr r3, [r7, #68] ; 0x44 - 8009dbe: 895b ldrh r3, [r3, #10] - 8009dc0: f8b7 2042 ldrh.w r2, [r7, #66] ; 0x42 - 8009dc4: 429a cmp r2, r3 - 8009dc6: d8e9 bhi.n 8009d9c - } - /* cannot fail... */ - pbuf_remove_header(p, off); - 8009dc8: f8b7 3042 ldrh.w r3, [r7, #66] ; 0x42 - 8009dcc: 4619 mov r1, r3 - 8009dce: 6c78 ldr r0, [r7, #68] ; 0x44 - 8009dd0: f7fc fb6c bl 80064ac - inseg.tcphdr->seqno = seqno = pcb->rcv_nxt; - 8009dd4: 687b ldr r3, [r7, #4] - 8009dd6: 6a5b ldr r3, [r3, #36] ; 0x24 - 8009dd8: 4a91 ldr r2, [pc, #580] ; (800a020 ) - 8009dda: 6013 str r3, [r2, #0] - 8009ddc: 4b91 ldr r3, [pc, #580] ; (800a024 ) - 8009dde: 68db ldr r3, [r3, #12] - 8009de0: 4a8f ldr r2, [pc, #572] ; (800a020 ) - 8009de2: 6812 ldr r2, [r2, #0] - 8009de4: 605a str r2, [r3, #4] - if (TCP_SEQ_BETWEEN(pcb->rcv_nxt, seqno + 1, seqno + tcplen - 1)) { - 8009de6: e00d b.n 8009e04 - } else { - if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)) { - 8009de8: 4b8d ldr r3, [pc, #564] ; (800a020 ) - 8009dea: 681a ldr r2, [r3, #0] - 8009dec: 687b ldr r3, [r7, #4] - 8009dee: 6a5b ldr r3, [r3, #36] ; 0x24 - 8009df0: 1ad3 subs r3, r2, r3 - 8009df2: 2b00 cmp r3, #0 - 8009df4: da06 bge.n 8009e04 - /* the whole segment is < rcv_nxt */ - /* must be a duplicate of a packet that has already been correctly handled */ - - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: duplicate seqno %"U32_F"\n", seqno)); - tcp_ack_now(pcb); - 8009df6: 687b ldr r3, [r7, #4] - 8009df8: 8b5b ldrh r3, [r3, #26] - 8009dfa: f043 0302 orr.w r3, r3, #2 - 8009dfe: b29a uxth r2, r3 - 8009e00: 687b ldr r3, [r7, #4] - 8009e02: 835a strh r2, [r3, #26] - } - - /* The sequence number must be within the window (above rcv_nxt - and below rcv_nxt + rcv_wnd) in order to be further - processed. */ - if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, - 8009e04: 4b86 ldr r3, [pc, #536] ; (800a020 ) - 8009e06: 681a ldr r2, [r3, #0] - 8009e08: 687b ldr r3, [r7, #4] - 8009e0a: 6a5b ldr r3, [r3, #36] ; 0x24 - 8009e0c: 1ad3 subs r3, r2, r3 - 8009e0e: 2b00 cmp r3, #0 - 8009e10: f2c0 842a blt.w 800a668 - 8009e14: 4b82 ldr r3, [pc, #520] ; (800a020 ) - 8009e16: 681a ldr r2, [r3, #0] - 8009e18: 687b ldr r3, [r7, #4] - 8009e1a: 6a5b ldr r3, [r3, #36] ; 0x24 - 8009e1c: 6879 ldr r1, [r7, #4] - 8009e1e: 8d09 ldrh r1, [r1, #40] ; 0x28 - 8009e20: 440b add r3, r1 - 8009e22: 1ad3 subs r3, r2, r3 - 8009e24: 3301 adds r3, #1 - 8009e26: 2b00 cmp r3, #0 - 8009e28: f300 841e bgt.w 800a668 - pcb->rcv_nxt + pcb->rcv_wnd - 1)) { - if (pcb->rcv_nxt == seqno) { - 8009e2c: 687b ldr r3, [r7, #4] - 8009e2e: 6a5a ldr r2, [r3, #36] ; 0x24 - 8009e30: 4b7b ldr r3, [pc, #492] ; (800a020 ) - 8009e32: 681b ldr r3, [r3, #0] - 8009e34: 429a cmp r2, r3 - 8009e36: f040 829a bne.w 800a36e - /* The incoming segment is the next in sequence. We check if - we have to trim the end of the segment and update rcv_nxt - and pass the data to the application. */ - tcplen = TCP_TCPLEN(&inseg); - 8009e3a: 4b7a ldr r3, [pc, #488] ; (800a024 ) - 8009e3c: 891c ldrh r4, [r3, #8] - 8009e3e: 4b79 ldr r3, [pc, #484] ; (800a024 ) - 8009e40: 68db ldr r3, [r3, #12] - 8009e42: 899b ldrh r3, [r3, #12] - 8009e44: b29b uxth r3, r3 - 8009e46: 4618 mov r0, r3 - 8009e48: f7fb f84c bl 8004ee4 - 8009e4c: 4603 mov r3, r0 - 8009e4e: b2db uxtb r3, r3 - 8009e50: f003 0303 and.w r3, r3, #3 - 8009e54: 2b00 cmp r3, #0 - 8009e56: d001 beq.n 8009e5c - 8009e58: 2301 movs r3, #1 - 8009e5a: e000 b.n 8009e5e - 8009e5c: 2300 movs r3, #0 - 8009e5e: 4423 add r3, r4 - 8009e60: b29a uxth r2, r3 - 8009e62: 4b71 ldr r3, [pc, #452] ; (800a028 ) - 8009e64: 801a strh r2, [r3, #0] - - if (tcplen > pcb->rcv_wnd) { - 8009e66: 687b ldr r3, [r7, #4] - 8009e68: 8d1a ldrh r2, [r3, #40] ; 0x28 - 8009e6a: 4b6f ldr r3, [pc, #444] ; (800a028 ) - 8009e6c: 881b ldrh r3, [r3, #0] - 8009e6e: 429a cmp r2, r3 - 8009e70: d275 bcs.n 8009f5e - LWIP_DEBUGF(TCP_INPUT_DEBUG, - ("tcp_receive: other end overran receive window" - "seqno %"U32_F" len %"U16_F" right edge %"U32_F"\n", - seqno, tcplen, pcb->rcv_nxt + pcb->rcv_wnd)); - if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { - 8009e72: 4b6c ldr r3, [pc, #432] ; (800a024 ) - 8009e74: 68db ldr r3, [r3, #12] - 8009e76: 899b ldrh r3, [r3, #12] - 8009e78: b29b uxth r3, r3 - 8009e7a: 4618 mov r0, r3 - 8009e7c: f7fb f832 bl 8004ee4 - 8009e80: 4603 mov r3, r0 - 8009e82: b2db uxtb r3, r3 - 8009e84: f003 0301 and.w r3, r3, #1 - 8009e88: 2b00 cmp r3, #0 - 8009e8a: d01f beq.n 8009ecc - /* Must remove the FIN from the header as we're trimming - * that byte of sequence-space from the packet */ - TCPH_FLAGS_SET(inseg.tcphdr, TCPH_FLAGS(inseg.tcphdr) & ~(unsigned int)TCP_FIN); - 8009e8c: 4b65 ldr r3, [pc, #404] ; (800a024 ) - 8009e8e: 68db ldr r3, [r3, #12] - 8009e90: 899b ldrh r3, [r3, #12] - 8009e92: b29b uxth r3, r3 - 8009e94: b21b sxth r3, r3 - 8009e96: f423 537c bic.w r3, r3, #16128 ; 0x3f00 - 8009e9a: b21c sxth r4, r3 - 8009e9c: 4b61 ldr r3, [pc, #388] ; (800a024 ) - 8009e9e: 68db ldr r3, [r3, #12] - 8009ea0: 899b ldrh r3, [r3, #12] - 8009ea2: b29b uxth r3, r3 - 8009ea4: 4618 mov r0, r3 - 8009ea6: f7fb f81d bl 8004ee4 - 8009eaa: 4603 mov r3, r0 - 8009eac: b2db uxtb r3, r3 - 8009eae: b29b uxth r3, r3 - 8009eb0: f003 033e and.w r3, r3, #62 ; 0x3e - 8009eb4: b29b uxth r3, r3 - 8009eb6: 4618 mov r0, r3 - 8009eb8: f7fb f814 bl 8004ee4 - 8009ebc: 4603 mov r3, r0 - 8009ebe: b21b sxth r3, r3 - 8009ec0: 4323 orrs r3, r4 - 8009ec2: b21a sxth r2, r3 - 8009ec4: 4b57 ldr r3, [pc, #348] ; (800a024 ) - 8009ec6: 68db ldr r3, [r3, #12] - 8009ec8: b292 uxth r2, r2 - 8009eca: 819a strh r2, [r3, #12] - } - /* Adjust length of segment to fit in the window. */ - TCPWND_CHECK16(pcb->rcv_wnd); - inseg.len = (u16_t)pcb->rcv_wnd; - 8009ecc: 687b ldr r3, [r7, #4] - 8009ece: 8d1a ldrh r2, [r3, #40] ; 0x28 - 8009ed0: 4b54 ldr r3, [pc, #336] ; (800a024 ) - 8009ed2: 811a strh r2, [r3, #8] - if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) { - 8009ed4: 4b53 ldr r3, [pc, #332] ; (800a024 ) - 8009ed6: 68db ldr r3, [r3, #12] - 8009ed8: 899b ldrh r3, [r3, #12] - 8009eda: b29b uxth r3, r3 - 8009edc: 4618 mov r0, r3 - 8009ede: f7fb f801 bl 8004ee4 - 8009ee2: 4603 mov r3, r0 - 8009ee4: b2db uxtb r3, r3 - 8009ee6: f003 0302 and.w r3, r3, #2 - 8009eea: 2b00 cmp r3, #0 - 8009eec: d005 beq.n 8009efa - inseg.len -= 1; - 8009eee: 4b4d ldr r3, [pc, #308] ; (800a024 ) - 8009ef0: 891b ldrh r3, [r3, #8] - 8009ef2: 3b01 subs r3, #1 - 8009ef4: b29a uxth r2, r3 - 8009ef6: 4b4b ldr r3, [pc, #300] ; (800a024 ) - 8009ef8: 811a strh r2, [r3, #8] - } - pbuf_realloc(inseg.p, inseg.len); - 8009efa: 4b4a ldr r3, [pc, #296] ; (800a024 ) - 8009efc: 685b ldr r3, [r3, #4] - 8009efe: 4a49 ldr r2, [pc, #292] ; (800a024 ) - 8009f00: 8912 ldrh r2, [r2, #8] - 8009f02: 4611 mov r1, r2 - 8009f04: 4618 mov r0, r3 - 8009f06: f7fc f9d1 bl 80062ac - tcplen = TCP_TCPLEN(&inseg); - 8009f0a: 4b46 ldr r3, [pc, #280] ; (800a024 ) - 8009f0c: 891c ldrh r4, [r3, #8] - 8009f0e: 4b45 ldr r3, [pc, #276] ; (800a024 ) - 8009f10: 68db ldr r3, [r3, #12] - 8009f12: 899b ldrh r3, [r3, #12] - 8009f14: b29b uxth r3, r3 - 8009f16: 4618 mov r0, r3 - 8009f18: f7fa ffe4 bl 8004ee4 - 8009f1c: 4603 mov r3, r0 - 8009f1e: b2db uxtb r3, r3 - 8009f20: f003 0303 and.w r3, r3, #3 - 8009f24: 2b00 cmp r3, #0 - 8009f26: d001 beq.n 8009f2c - 8009f28: 2301 movs r3, #1 - 8009f2a: e000 b.n 8009f2e - 8009f2c: 2300 movs r3, #0 - 8009f2e: 4423 add r3, r4 - 8009f30: b29a uxth r2, r3 - 8009f32: 4b3d ldr r3, [pc, #244] ; (800a028 ) - 8009f34: 801a strh r2, [r3, #0] - LWIP_ASSERT("tcp_receive: segment not trimmed correctly to rcv_wnd\n", - 8009f36: 4b3c ldr r3, [pc, #240] ; (800a028 ) - 8009f38: 881b ldrh r3, [r3, #0] - 8009f3a: 461a mov r2, r3 - 8009f3c: 4b38 ldr r3, [pc, #224] ; (800a020 ) - 8009f3e: 681b ldr r3, [r3, #0] - 8009f40: 441a add r2, r3 - 8009f42: 687b ldr r3, [r7, #4] - 8009f44: 6a5b ldr r3, [r3, #36] ; 0x24 - 8009f46: 6879 ldr r1, [r7, #4] - 8009f48: 8d09 ldrh r1, [r1, #40] ; 0x28 - 8009f4a: 440b add r3, r1 - 8009f4c: 429a cmp r2, r3 - 8009f4e: d006 beq.n 8009f5e - 8009f50: 4b36 ldr r3, [pc, #216] ; (800a02c ) - 8009f52: f240 52cb movw r2, #1483 ; 0x5cb - 8009f56: 4936 ldr r1, [pc, #216] ; (800a030 ) - 8009f58: 4836 ldr r0, [pc, #216] ; (800a034 ) - 8009f5a: f007 f8a5 bl 80110a8 - } -#if TCP_QUEUE_OOSEQ - /* Received in-sequence data, adjust ooseq data if: - - FIN has been received or - - inseq overlaps with ooseq */ - if (pcb->ooseq != NULL) { - 8009f5e: 687b ldr r3, [r7, #4] - 8009f60: 6f5b ldr r3, [r3, #116] ; 0x74 - 8009f62: 2b00 cmp r3, #0 - 8009f64: f000 80e7 beq.w 800a136 - if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { - 8009f68: 4b2e ldr r3, [pc, #184] ; (800a024 ) - 8009f6a: 68db ldr r3, [r3, #12] - 8009f6c: 899b ldrh r3, [r3, #12] - 8009f6e: b29b uxth r3, r3 - 8009f70: 4618 mov r0, r3 - 8009f72: f7fa ffb7 bl 8004ee4 - 8009f76: 4603 mov r3, r0 - 8009f78: b2db uxtb r3, r3 - 8009f7a: f003 0301 and.w r3, r3, #1 - 8009f7e: 2b00 cmp r3, #0 - 8009f80: d010 beq.n 8009fa4 - LWIP_DEBUGF(TCP_INPUT_DEBUG, - ("tcp_receive: received in-order FIN, binning ooseq queue\n")); - /* Received in-order FIN means anything that was received - * out of order must now have been received in-order, so - * bin the ooseq queue */ - while (pcb->ooseq != NULL) { - 8009f82: e00a b.n 8009f9a - struct tcp_seg *old_ooseq = pcb->ooseq; - 8009f84: 687b ldr r3, [r7, #4] - 8009f86: 6f5b ldr r3, [r3, #116] ; 0x74 - 8009f88: 60fb str r3, [r7, #12] - pcb->ooseq = pcb->ooseq->next; - 8009f8a: 687b ldr r3, [r7, #4] - 8009f8c: 6f5b ldr r3, [r3, #116] ; 0x74 - 8009f8e: 681a ldr r2, [r3, #0] - 8009f90: 687b ldr r3, [r7, #4] - 8009f92: 675a str r2, [r3, #116] ; 0x74 - tcp_seg_free(old_ooseq); - 8009f94: 68f8 ldr r0, [r7, #12] - 8009f96: f7fd fd92 bl 8007abe - while (pcb->ooseq != NULL) { - 8009f9a: 687b ldr r3, [r7, #4] - 8009f9c: 6f5b ldr r3, [r3, #116] ; 0x74 - 8009f9e: 2b00 cmp r3, #0 - 8009fa0: d1f0 bne.n 8009f84 - 8009fa2: e0c8 b.n 800a136 - } - } else { - struct tcp_seg *next = pcb->ooseq; - 8009fa4: 687b ldr r3, [r7, #4] - 8009fa6: 6f5b ldr r3, [r3, #116] ; 0x74 - 8009fa8: 63fb str r3, [r7, #60] ; 0x3c - /* Remove all segments on ooseq that are covered by inseg already. - * FIN is copied from ooseq to inseg if present. */ - while (next && - 8009faa: e052 b.n 800a052 - TCP_SEQ_GEQ(seqno + tcplen, - next->tcphdr->seqno + next->len)) { - struct tcp_seg *tmp; - /* inseg cannot have FIN here (already processed above) */ - if ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0 && - 8009fac: 6bfb ldr r3, [r7, #60] ; 0x3c - 8009fae: 68db ldr r3, [r3, #12] - 8009fb0: 899b ldrh r3, [r3, #12] - 8009fb2: b29b uxth r3, r3 - 8009fb4: 4618 mov r0, r3 - 8009fb6: f7fa ff95 bl 8004ee4 - 8009fba: 4603 mov r3, r0 - 8009fbc: b2db uxtb r3, r3 - 8009fbe: f003 0301 and.w r3, r3, #1 - 8009fc2: 2b00 cmp r3, #0 - 8009fc4: d03d beq.n 800a042 - (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) == 0) { - 8009fc6: 4b17 ldr r3, [pc, #92] ; (800a024 ) - 8009fc8: 68db ldr r3, [r3, #12] - 8009fca: 899b ldrh r3, [r3, #12] - 8009fcc: b29b uxth r3, r3 - 8009fce: 4618 mov r0, r3 - 8009fd0: f7fa ff88 bl 8004ee4 - 8009fd4: 4603 mov r3, r0 - 8009fd6: b2db uxtb r3, r3 - 8009fd8: f003 0302 and.w r3, r3, #2 - if ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0 && - 8009fdc: 2b00 cmp r3, #0 - 8009fde: d130 bne.n 800a042 - TCPH_SET_FLAG(inseg.tcphdr, TCP_FIN); - 8009fe0: 4b10 ldr r3, [pc, #64] ; (800a024 ) - 8009fe2: 68db ldr r3, [r3, #12] - 8009fe4: 899b ldrh r3, [r3, #12] - 8009fe6: b29c uxth r4, r3 - 8009fe8: 2001 movs r0, #1 - 8009fea: f7fa ff7b bl 8004ee4 - 8009fee: 4603 mov r3, r0 - 8009ff0: 461a mov r2, r3 - 8009ff2: 4b0c ldr r3, [pc, #48] ; (800a024 ) - 8009ff4: 68db ldr r3, [r3, #12] - 8009ff6: 4322 orrs r2, r4 - 8009ff8: b292 uxth r2, r2 - 8009ffa: 819a strh r2, [r3, #12] - tcplen = TCP_TCPLEN(&inseg); - 8009ffc: 4b09 ldr r3, [pc, #36] ; (800a024 ) - 8009ffe: 891c ldrh r4, [r3, #8] - 800a000: 4b08 ldr r3, [pc, #32] ; (800a024 ) - 800a002: 68db ldr r3, [r3, #12] - 800a004: 899b ldrh r3, [r3, #12] - 800a006: b29b uxth r3, r3 - 800a008: 4618 mov r0, r3 - 800a00a: f7fa ff6b bl 8004ee4 - 800a00e: 4603 mov r3, r0 - 800a010: b2db uxtb r3, r3 - 800a012: f003 0303 and.w r3, r3, #3 - 800a016: 2b00 cmp r3, #0 - 800a018: d00e beq.n 800a038 - 800a01a: 2301 movs r3, #1 - 800a01c: e00d b.n 800a03a - 800a01e: bf00 nop - 800a020: 20009a0c .word 0x20009a0c - 800a024: 200099ec .word 0x200099ec - 800a028: 20009a16 .word 0x20009a16 - 800a02c: 08016e14 .word 0x08016e14 - 800a030: 080171bc .word 0x080171bc - 800a034: 08016e60 .word 0x08016e60 - 800a038: 2300 movs r3, #0 - 800a03a: 4423 add r3, r4 - 800a03c: b29a uxth r2, r3 - 800a03e: 4b98 ldr r3, [pc, #608] ; (800a2a0 ) - 800a040: 801a strh r2, [r3, #0] - } - tmp = next; - 800a042: 6bfb ldr r3, [r7, #60] ; 0x3c - 800a044: 613b str r3, [r7, #16] - next = next->next; - 800a046: 6bfb ldr r3, [r7, #60] ; 0x3c - 800a048: 681b ldr r3, [r3, #0] - 800a04a: 63fb str r3, [r7, #60] ; 0x3c - tcp_seg_free(tmp); - 800a04c: 6938 ldr r0, [r7, #16] - 800a04e: f7fd fd36 bl 8007abe - while (next && - 800a052: 6bfb ldr r3, [r7, #60] ; 0x3c - 800a054: 2b00 cmp r3, #0 - 800a056: d00e beq.n 800a076 - TCP_SEQ_GEQ(seqno + tcplen, - 800a058: 4b91 ldr r3, [pc, #580] ; (800a2a0 ) - 800a05a: 881b ldrh r3, [r3, #0] - 800a05c: 461a mov r2, r3 - 800a05e: 4b91 ldr r3, [pc, #580] ; (800a2a4 ) - 800a060: 681b ldr r3, [r3, #0] - 800a062: 441a add r2, r3 - 800a064: 6bfb ldr r3, [r7, #60] ; 0x3c - 800a066: 68db ldr r3, [r3, #12] - 800a068: 685b ldr r3, [r3, #4] - 800a06a: 6bf9 ldr r1, [r7, #60] ; 0x3c - 800a06c: 8909 ldrh r1, [r1, #8] - 800a06e: 440b add r3, r1 - 800a070: 1ad3 subs r3, r2, r3 - while (next && - 800a072: 2b00 cmp r3, #0 - 800a074: da9a bge.n 8009fac - } - /* Now trim right side of inseg if it overlaps with the first - * segment on ooseq */ - if (next && - 800a076: 6bfb ldr r3, [r7, #60] ; 0x3c - 800a078: 2b00 cmp r3, #0 - 800a07a: d059 beq.n 800a130 - TCP_SEQ_GT(seqno + tcplen, - 800a07c: 4b88 ldr r3, [pc, #544] ; (800a2a0 ) - 800a07e: 881b ldrh r3, [r3, #0] - 800a080: 461a mov r2, r3 - 800a082: 4b88 ldr r3, [pc, #544] ; (800a2a4 ) - 800a084: 681b ldr r3, [r3, #0] - 800a086: 441a add r2, r3 - 800a088: 6bfb ldr r3, [r7, #60] ; 0x3c - 800a08a: 68db ldr r3, [r3, #12] - 800a08c: 685b ldr r3, [r3, #4] - 800a08e: 1ad3 subs r3, r2, r3 - if (next && - 800a090: 2b00 cmp r3, #0 - 800a092: dd4d ble.n 800a130 - next->tcphdr->seqno)) { - /* inseg cannot have FIN here (already processed above) */ - inseg.len = (u16_t)(next->tcphdr->seqno - seqno); - 800a094: 6bfb ldr r3, [r7, #60] ; 0x3c - 800a096: 68db ldr r3, [r3, #12] - 800a098: 685b ldr r3, [r3, #4] - 800a09a: b29a uxth r2, r3 - 800a09c: 4b81 ldr r3, [pc, #516] ; (800a2a4 ) - 800a09e: 681b ldr r3, [r3, #0] - 800a0a0: b29b uxth r3, r3 - 800a0a2: 1ad3 subs r3, r2, r3 - 800a0a4: b29a uxth r2, r3 - 800a0a6: 4b80 ldr r3, [pc, #512] ; (800a2a8 ) - 800a0a8: 811a strh r2, [r3, #8] - if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) { - 800a0aa: 4b7f ldr r3, [pc, #508] ; (800a2a8 ) - 800a0ac: 68db ldr r3, [r3, #12] - 800a0ae: 899b ldrh r3, [r3, #12] - 800a0b0: b29b uxth r3, r3 - 800a0b2: 4618 mov r0, r3 - 800a0b4: f7fa ff16 bl 8004ee4 - 800a0b8: 4603 mov r3, r0 - 800a0ba: b2db uxtb r3, r3 - 800a0bc: f003 0302 and.w r3, r3, #2 - 800a0c0: 2b00 cmp r3, #0 - 800a0c2: d005 beq.n 800a0d0 - inseg.len -= 1; - 800a0c4: 4b78 ldr r3, [pc, #480] ; (800a2a8 ) - 800a0c6: 891b ldrh r3, [r3, #8] - 800a0c8: 3b01 subs r3, #1 - 800a0ca: b29a uxth r2, r3 - 800a0cc: 4b76 ldr r3, [pc, #472] ; (800a2a8 ) - 800a0ce: 811a strh r2, [r3, #8] - } - pbuf_realloc(inseg.p, inseg.len); - 800a0d0: 4b75 ldr r3, [pc, #468] ; (800a2a8 ) - 800a0d2: 685b ldr r3, [r3, #4] - 800a0d4: 4a74 ldr r2, [pc, #464] ; (800a2a8 ) - 800a0d6: 8912 ldrh r2, [r2, #8] - 800a0d8: 4611 mov r1, r2 - 800a0da: 4618 mov r0, r3 - 800a0dc: f7fc f8e6 bl 80062ac - tcplen = TCP_TCPLEN(&inseg); - 800a0e0: 4b71 ldr r3, [pc, #452] ; (800a2a8 ) - 800a0e2: 891c ldrh r4, [r3, #8] - 800a0e4: 4b70 ldr r3, [pc, #448] ; (800a2a8 ) - 800a0e6: 68db ldr r3, [r3, #12] - 800a0e8: 899b ldrh r3, [r3, #12] - 800a0ea: b29b uxth r3, r3 - 800a0ec: 4618 mov r0, r3 - 800a0ee: f7fa fef9 bl 8004ee4 - 800a0f2: 4603 mov r3, r0 - 800a0f4: b2db uxtb r3, r3 - 800a0f6: f003 0303 and.w r3, r3, #3 - 800a0fa: 2b00 cmp r3, #0 - 800a0fc: d001 beq.n 800a102 - 800a0fe: 2301 movs r3, #1 - 800a100: e000 b.n 800a104 - 800a102: 2300 movs r3, #0 - 800a104: 4423 add r3, r4 - 800a106: b29a uxth r2, r3 - 800a108: 4b65 ldr r3, [pc, #404] ; (800a2a0 ) - 800a10a: 801a strh r2, [r3, #0] - LWIP_ASSERT("tcp_receive: segment not trimmed correctly to ooseq queue\n", - 800a10c: 4b64 ldr r3, [pc, #400] ; (800a2a0 ) - 800a10e: 881b ldrh r3, [r3, #0] - 800a110: 461a mov r2, r3 - 800a112: 4b64 ldr r3, [pc, #400] ; (800a2a4 ) - 800a114: 681b ldr r3, [r3, #0] - 800a116: 441a add r2, r3 - 800a118: 6bfb ldr r3, [r7, #60] ; 0x3c - 800a11a: 68db ldr r3, [r3, #12] - 800a11c: 685b ldr r3, [r3, #4] - 800a11e: 429a cmp r2, r3 - 800a120: d006 beq.n 800a130 - 800a122: 4b62 ldr r3, [pc, #392] ; (800a2ac ) - 800a124: f240 52fc movw r2, #1532 ; 0x5fc - 800a128: 4961 ldr r1, [pc, #388] ; (800a2b0 ) - 800a12a: 4862 ldr r0, [pc, #392] ; (800a2b4 ) - 800a12c: f006 ffbc bl 80110a8 - (seqno + tcplen) == next->tcphdr->seqno); - } - pcb->ooseq = next; - 800a130: 687b ldr r3, [r7, #4] - 800a132: 6bfa ldr r2, [r7, #60] ; 0x3c - 800a134: 675a str r2, [r3, #116] ; 0x74 - } - } -#endif /* TCP_QUEUE_OOSEQ */ - - pcb->rcv_nxt = seqno + tcplen; - 800a136: 4b5a ldr r3, [pc, #360] ; (800a2a0 ) - 800a138: 881b ldrh r3, [r3, #0] - 800a13a: 461a mov r2, r3 - 800a13c: 4b59 ldr r3, [pc, #356] ; (800a2a4 ) - 800a13e: 681b ldr r3, [r3, #0] - 800a140: 441a add r2, r3 - 800a142: 687b ldr r3, [r7, #4] - 800a144: 625a str r2, [r3, #36] ; 0x24 - - /* Update the receiver's (our) window. */ - LWIP_ASSERT("tcp_receive: tcplen > rcv_wnd\n", pcb->rcv_wnd >= tcplen); - 800a146: 687b ldr r3, [r7, #4] - 800a148: 8d1a ldrh r2, [r3, #40] ; 0x28 - 800a14a: 4b55 ldr r3, [pc, #340] ; (800a2a0 ) - 800a14c: 881b ldrh r3, [r3, #0] - 800a14e: 429a cmp r2, r3 - 800a150: d206 bcs.n 800a160 - 800a152: 4b56 ldr r3, [pc, #344] ; (800a2ac ) - 800a154: f240 6207 movw r2, #1543 ; 0x607 - 800a158: 4957 ldr r1, [pc, #348] ; (800a2b8 ) - 800a15a: 4856 ldr r0, [pc, #344] ; (800a2b4 ) - 800a15c: f006 ffa4 bl 80110a8 - pcb->rcv_wnd -= tcplen; - 800a160: 687b ldr r3, [r7, #4] - 800a162: 8d1a ldrh r2, [r3, #40] ; 0x28 - 800a164: 4b4e ldr r3, [pc, #312] ; (800a2a0 ) - 800a166: 881b ldrh r3, [r3, #0] - 800a168: 1ad3 subs r3, r2, r3 - 800a16a: b29a uxth r2, r3 - 800a16c: 687b ldr r3, [r7, #4] - 800a16e: 851a strh r2, [r3, #40] ; 0x28 - - tcp_update_rcv_ann_wnd(pcb); - 800a170: 6878 ldr r0, [r7, #4] - 800a172: f7fc ffc5 bl 8007100 - chains its data on this pbuf as well. - - If the segment was a FIN, we set the TF_GOT_FIN flag that will - be used to indicate to the application that the remote side has - closed its end of the connection. */ - if (inseg.p->tot_len > 0) { - 800a176: 4b4c ldr r3, [pc, #304] ; (800a2a8 ) - 800a178: 685b ldr r3, [r3, #4] - 800a17a: 891b ldrh r3, [r3, #8] - 800a17c: 2b00 cmp r3, #0 - 800a17e: d006 beq.n 800a18e - recv_data = inseg.p; - 800a180: 4b49 ldr r3, [pc, #292] ; (800a2a8 ) - 800a182: 685b ldr r3, [r3, #4] - 800a184: 4a4d ldr r2, [pc, #308] ; (800a2bc ) - 800a186: 6013 str r3, [r2, #0] - /* Since this pbuf now is the responsibility of the - application, we delete our reference to it so that we won't - (mistakingly) deallocate it. */ - inseg.p = NULL; - 800a188: 4b47 ldr r3, [pc, #284] ; (800a2a8 ) - 800a18a: 2200 movs r2, #0 - 800a18c: 605a str r2, [r3, #4] - } - if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { - 800a18e: 4b46 ldr r3, [pc, #280] ; (800a2a8 ) - 800a190: 68db ldr r3, [r3, #12] - 800a192: 899b ldrh r3, [r3, #12] - 800a194: b29b uxth r3, r3 - 800a196: 4618 mov r0, r3 - 800a198: f7fa fea4 bl 8004ee4 - 800a19c: 4603 mov r3, r0 - 800a19e: b2db uxtb r3, r3 - 800a1a0: f003 0301 and.w r3, r3, #1 - 800a1a4: 2b00 cmp r3, #0 - 800a1a6: f000 80b8 beq.w 800a31a - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: received FIN.\n")); - recv_flags |= TF_GOT_FIN; - 800a1aa: 4b45 ldr r3, [pc, #276] ; (800a2c0 ) - 800a1ac: 781b ldrb r3, [r3, #0] - 800a1ae: f043 0320 orr.w r3, r3, #32 - 800a1b2: b2da uxtb r2, r3 - 800a1b4: 4b42 ldr r3, [pc, #264] ; (800a2c0 ) - 800a1b6: 701a strb r2, [r3, #0] - } - -#if TCP_QUEUE_OOSEQ - /* We now check if we have segments on the ->ooseq queue that - are now in sequence. */ - while (pcb->ooseq != NULL && - 800a1b8: e0af b.n 800a31a - pcb->ooseq->tcphdr->seqno == pcb->rcv_nxt) { - - struct tcp_seg *cseg = pcb->ooseq; - 800a1ba: 687b ldr r3, [r7, #4] - 800a1bc: 6f5b ldr r3, [r3, #116] ; 0x74 - 800a1be: 60bb str r3, [r7, #8] - seqno = pcb->ooseq->tcphdr->seqno; - 800a1c0: 687b ldr r3, [r7, #4] - 800a1c2: 6f5b ldr r3, [r3, #116] ; 0x74 - 800a1c4: 68db ldr r3, [r3, #12] - 800a1c6: 685b ldr r3, [r3, #4] - 800a1c8: 4a36 ldr r2, [pc, #216] ; (800a2a4 ) - 800a1ca: 6013 str r3, [r2, #0] - - pcb->rcv_nxt += TCP_TCPLEN(cseg); - 800a1cc: 68bb ldr r3, [r7, #8] - 800a1ce: 891b ldrh r3, [r3, #8] - 800a1d0: 461c mov r4, r3 - 800a1d2: 68bb ldr r3, [r7, #8] - 800a1d4: 68db ldr r3, [r3, #12] - 800a1d6: 899b ldrh r3, [r3, #12] - 800a1d8: b29b uxth r3, r3 - 800a1da: 4618 mov r0, r3 - 800a1dc: f7fa fe82 bl 8004ee4 - 800a1e0: 4603 mov r3, r0 - 800a1e2: b2db uxtb r3, r3 - 800a1e4: f003 0303 and.w r3, r3, #3 - 800a1e8: 2b00 cmp r3, #0 - 800a1ea: d001 beq.n 800a1f0 - 800a1ec: 2301 movs r3, #1 - 800a1ee: e000 b.n 800a1f2 - 800a1f0: 2300 movs r3, #0 - 800a1f2: 191a adds r2, r3, r4 - 800a1f4: 687b ldr r3, [r7, #4] - 800a1f6: 6a5b ldr r3, [r3, #36] ; 0x24 - 800a1f8: 441a add r2, r3 - 800a1fa: 687b ldr r3, [r7, #4] - 800a1fc: 625a str r2, [r3, #36] ; 0x24 - LWIP_ASSERT("tcp_receive: ooseq tcplen > rcv_wnd\n", - 800a1fe: 687b ldr r3, [r7, #4] - 800a200: 8d1b ldrh r3, [r3, #40] ; 0x28 - 800a202: 461c mov r4, r3 - 800a204: 68bb ldr r3, [r7, #8] - 800a206: 891b ldrh r3, [r3, #8] - 800a208: 461d mov r5, r3 - 800a20a: 68bb ldr r3, [r7, #8] - 800a20c: 68db ldr r3, [r3, #12] - 800a20e: 899b ldrh r3, [r3, #12] - 800a210: b29b uxth r3, r3 - 800a212: 4618 mov r0, r3 - 800a214: f7fa fe66 bl 8004ee4 - 800a218: 4603 mov r3, r0 - 800a21a: b2db uxtb r3, r3 - 800a21c: f003 0303 and.w r3, r3, #3 - 800a220: 2b00 cmp r3, #0 - 800a222: d001 beq.n 800a228 - 800a224: 2301 movs r3, #1 - 800a226: e000 b.n 800a22a - 800a228: 2300 movs r3, #0 - 800a22a: 442b add r3, r5 - 800a22c: 429c cmp r4, r3 - 800a22e: d206 bcs.n 800a23e - 800a230: 4b1e ldr r3, [pc, #120] ; (800a2ac ) - 800a232: f240 622b movw r2, #1579 ; 0x62b - 800a236: 4923 ldr r1, [pc, #140] ; (800a2c4 ) - 800a238: 481e ldr r0, [pc, #120] ; (800a2b4 ) - 800a23a: f006 ff35 bl 80110a8 - pcb->rcv_wnd >= TCP_TCPLEN(cseg)); - pcb->rcv_wnd -= TCP_TCPLEN(cseg); - 800a23e: 68bb ldr r3, [r7, #8] - 800a240: 891b ldrh r3, [r3, #8] - 800a242: 461c mov r4, r3 - 800a244: 68bb ldr r3, [r7, #8] - 800a246: 68db ldr r3, [r3, #12] - 800a248: 899b ldrh r3, [r3, #12] - 800a24a: b29b uxth r3, r3 - 800a24c: 4618 mov r0, r3 - 800a24e: f7fa fe49 bl 8004ee4 - 800a252: 4603 mov r3, r0 - 800a254: b2db uxtb r3, r3 - 800a256: f003 0303 and.w r3, r3, #3 - 800a25a: 2b00 cmp r3, #0 - 800a25c: d001 beq.n 800a262 - 800a25e: 2301 movs r3, #1 - 800a260: e000 b.n 800a264 - 800a262: 2300 movs r3, #0 - 800a264: 1919 adds r1, r3, r4 - 800a266: 687b ldr r3, [r7, #4] - 800a268: 8d1a ldrh r2, [r3, #40] ; 0x28 - 800a26a: b28b uxth r3, r1 - 800a26c: 1ad3 subs r3, r2, r3 - 800a26e: b29a uxth r2, r3 - 800a270: 687b ldr r3, [r7, #4] - 800a272: 851a strh r2, [r3, #40] ; 0x28 - - tcp_update_rcv_ann_wnd(pcb); - 800a274: 6878 ldr r0, [r7, #4] - 800a276: f7fc ff43 bl 8007100 - - if (cseg->p->tot_len > 0) { - 800a27a: 68bb ldr r3, [r7, #8] - 800a27c: 685b ldr r3, [r3, #4] - 800a27e: 891b ldrh r3, [r3, #8] - 800a280: 2b00 cmp r3, #0 - 800a282: d028 beq.n 800a2d6 - /* Chain this pbuf onto the pbuf that we will pass to - the application. */ - /* With window scaling, this can overflow recv_data->tot_len, but - that's not a problem since we explicitly fix that before passing - recv_data to the application. */ - if (recv_data) { - 800a284: 4b0d ldr r3, [pc, #52] ; (800a2bc ) - 800a286: 681b ldr r3, [r3, #0] - 800a288: 2b00 cmp r3, #0 - 800a28a: d01d beq.n 800a2c8 - pbuf_cat(recv_data, cseg->p); - 800a28c: 4b0b ldr r3, [pc, #44] ; (800a2bc ) - 800a28e: 681a ldr r2, [r3, #0] - 800a290: 68bb ldr r3, [r7, #8] - 800a292: 685b ldr r3, [r3, #4] - 800a294: 4619 mov r1, r3 - 800a296: 4610 mov r0, r2 - 800a298: f7fc fa50 bl 800673c - 800a29c: e018 b.n 800a2d0 - 800a29e: bf00 nop - 800a2a0: 20009a16 .word 0x20009a16 - 800a2a4: 20009a0c .word 0x20009a0c - 800a2a8: 200099ec .word 0x200099ec - 800a2ac: 08016e14 .word 0x08016e14 - 800a2b0: 080171f4 .word 0x080171f4 - 800a2b4: 08016e60 .word 0x08016e60 - 800a2b8: 08017230 .word 0x08017230 - 800a2bc: 20009a1c .word 0x20009a1c - 800a2c0: 20009a19 .word 0x20009a19 - 800a2c4: 08017250 .word 0x08017250 - } else { - recv_data = cseg->p; - 800a2c8: 68bb ldr r3, [r7, #8] - 800a2ca: 685b ldr r3, [r3, #4] - 800a2cc: 4a70 ldr r2, [pc, #448] ; (800a490 ) - 800a2ce: 6013 str r3, [r2, #0] - } - cseg->p = NULL; - 800a2d0: 68bb ldr r3, [r7, #8] - 800a2d2: 2200 movs r2, #0 - 800a2d4: 605a str r2, [r3, #4] - } - if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) { - 800a2d6: 68bb ldr r3, [r7, #8] - 800a2d8: 68db ldr r3, [r3, #12] - 800a2da: 899b ldrh r3, [r3, #12] - 800a2dc: b29b uxth r3, r3 - 800a2de: 4618 mov r0, r3 - 800a2e0: f7fa fe00 bl 8004ee4 - 800a2e4: 4603 mov r3, r0 - 800a2e6: b2db uxtb r3, r3 - 800a2e8: f003 0301 and.w r3, r3, #1 - 800a2ec: 2b00 cmp r3, #0 - 800a2ee: d00d beq.n 800a30c - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: dequeued FIN.\n")); - recv_flags |= TF_GOT_FIN; - 800a2f0: 4b68 ldr r3, [pc, #416] ; (800a494 ) - 800a2f2: 781b ldrb r3, [r3, #0] - 800a2f4: f043 0320 orr.w r3, r3, #32 - 800a2f8: b2da uxtb r2, r3 - 800a2fa: 4b66 ldr r3, [pc, #408] ; (800a494 ) - 800a2fc: 701a strb r2, [r3, #0] - if (pcb->state == ESTABLISHED) { /* force passive close or we can move to active close */ - 800a2fe: 687b ldr r3, [r7, #4] - 800a300: 7d1b ldrb r3, [r3, #20] - 800a302: 2b04 cmp r3, #4 - 800a304: d102 bne.n 800a30c - pcb->state = CLOSE_WAIT; - 800a306: 687b ldr r3, [r7, #4] - 800a308: 2207 movs r2, #7 - 800a30a: 751a strb r2, [r3, #20] - } - } - - pcb->ooseq = cseg->next; - 800a30c: 68bb ldr r3, [r7, #8] - 800a30e: 681a ldr r2, [r3, #0] - 800a310: 687b ldr r3, [r7, #4] - 800a312: 675a str r2, [r3, #116] ; 0x74 - tcp_seg_free(cseg); - 800a314: 68b8 ldr r0, [r7, #8] - 800a316: f7fd fbd2 bl 8007abe - while (pcb->ooseq != NULL && - 800a31a: 687b ldr r3, [r7, #4] - 800a31c: 6f5b ldr r3, [r3, #116] ; 0x74 - 800a31e: 2b00 cmp r3, #0 - 800a320: d008 beq.n 800a334 - pcb->ooseq->tcphdr->seqno == pcb->rcv_nxt) { - 800a322: 687b ldr r3, [r7, #4] - 800a324: 6f5b ldr r3, [r3, #116] ; 0x74 - 800a326: 68db ldr r3, [r3, #12] - 800a328: 685a ldr r2, [r3, #4] - 800a32a: 687b ldr r3, [r7, #4] - 800a32c: 6a5b ldr r3, [r3, #36] ; 0x24 - while (pcb->ooseq != NULL && - 800a32e: 429a cmp r2, r3 - 800a330: f43f af43 beq.w 800a1ba -#endif /* LWIP_TCP_SACK_OUT */ -#endif /* TCP_QUEUE_OOSEQ */ - - - /* Acknowledge the segment(s). */ - tcp_ack(pcb); - 800a334: 687b ldr r3, [r7, #4] - 800a336: 8b5b ldrh r3, [r3, #26] - 800a338: f003 0301 and.w r3, r3, #1 - 800a33c: 2b00 cmp r3, #0 - 800a33e: d00e beq.n 800a35e - 800a340: 687b ldr r3, [r7, #4] - 800a342: 8b5b ldrh r3, [r3, #26] - 800a344: f023 0301 bic.w r3, r3, #1 - 800a348: b29a uxth r2, r3 - 800a34a: 687b ldr r3, [r7, #4] - 800a34c: 835a strh r2, [r3, #26] - 800a34e: 687b ldr r3, [r7, #4] - 800a350: 8b5b ldrh r3, [r3, #26] - 800a352: f043 0302 orr.w r3, r3, #2 - 800a356: b29a uxth r2, r3 - 800a358: 687b ldr r3, [r7, #4] - 800a35a: 835a strh r2, [r3, #26] - if (pcb->rcv_nxt == seqno) { - 800a35c: e188 b.n 800a670 - tcp_ack(pcb); - 800a35e: 687b ldr r3, [r7, #4] - 800a360: 8b5b ldrh r3, [r3, #26] - 800a362: f043 0301 orr.w r3, r3, #1 - 800a366: b29a uxth r2, r3 - 800a368: 687b ldr r3, [r7, #4] - 800a36a: 835a strh r2, [r3, #26] - if (pcb->rcv_nxt == seqno) { - 800a36c: e180 b.n 800a670 - } else { - /* We get here if the incoming segment is out-of-sequence. */ - -#if TCP_QUEUE_OOSEQ - /* We queue the segment on the ->ooseq queue. */ - if (pcb->ooseq == NULL) { - 800a36e: 687b ldr r3, [r7, #4] - 800a370: 6f5b ldr r3, [r3, #116] ; 0x74 - 800a372: 2b00 cmp r3, #0 - 800a374: d106 bne.n 800a384 - pcb->ooseq = tcp_seg_copy(&inseg); - 800a376: 4848 ldr r0, [pc, #288] ; (800a498 ) - 800a378: f7fd fbba bl 8007af0 - 800a37c: 4602 mov r2, r0 - 800a37e: 687b ldr r3, [r7, #4] - 800a380: 675a str r2, [r3, #116] ; 0x74 - 800a382: e16d b.n 800a660 -#if LWIP_TCP_SACK_OUT - /* This is the left edge of the lowest possible SACK range. - It may start before the newly received segment (possibly adjusted below). */ - u32_t sackbeg = TCP_SEQ_LT(seqno, pcb->ooseq->tcphdr->seqno) ? seqno : pcb->ooseq->tcphdr->seqno; -#endif /* LWIP_TCP_SACK_OUT */ - struct tcp_seg *next, *prev = NULL; - 800a384: 2300 movs r3, #0 - 800a386: 637b str r3, [r7, #52] ; 0x34 - for (next = pcb->ooseq; next != NULL; next = next->next) { - 800a388: 687b ldr r3, [r7, #4] - 800a38a: 6f5b ldr r3, [r3, #116] ; 0x74 - 800a38c: 63bb str r3, [r7, #56] ; 0x38 - 800a38e: e157 b.n 800a640 - if (seqno == next->tcphdr->seqno) { - 800a390: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a392: 68db ldr r3, [r3, #12] - 800a394: 685a ldr r2, [r3, #4] - 800a396: 4b41 ldr r3, [pc, #260] ; (800a49c ) - 800a398: 681b ldr r3, [r3, #0] - 800a39a: 429a cmp r2, r3 - 800a39c: d11d bne.n 800a3da - /* The sequence number of the incoming segment is the - same as the sequence number of the segment on - ->ooseq. We check the lengths to see which one to - discard. */ - if (inseg.len > next->len) { - 800a39e: 4b3e ldr r3, [pc, #248] ; (800a498 ) - 800a3a0: 891a ldrh r2, [r3, #8] - 800a3a2: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a3a4: 891b ldrh r3, [r3, #8] - 800a3a6: 429a cmp r2, r3 - 800a3a8: f240 814f bls.w 800a64a - /* The incoming segment is larger than the old - segment. We replace some segments with the new - one. */ - struct tcp_seg *cseg = tcp_seg_copy(&inseg); - 800a3ac: 483a ldr r0, [pc, #232] ; (800a498 ) - 800a3ae: f7fd fb9f bl 8007af0 - 800a3b2: 6178 str r0, [r7, #20] - if (cseg != NULL) { - 800a3b4: 697b ldr r3, [r7, #20] - 800a3b6: 2b00 cmp r3, #0 - 800a3b8: f000 8149 beq.w 800a64e - if (prev != NULL) { - 800a3bc: 6b7b ldr r3, [r7, #52] ; 0x34 - 800a3be: 2b00 cmp r3, #0 - 800a3c0: d003 beq.n 800a3ca - prev->next = cseg; - 800a3c2: 6b7b ldr r3, [r7, #52] ; 0x34 - 800a3c4: 697a ldr r2, [r7, #20] - 800a3c6: 601a str r2, [r3, #0] - 800a3c8: e002 b.n 800a3d0 - } else { - pcb->ooseq = cseg; - 800a3ca: 687b ldr r3, [r7, #4] - 800a3cc: 697a ldr r2, [r7, #20] - 800a3ce: 675a str r2, [r3, #116] ; 0x74 - } - tcp_oos_insert_segment(cseg, next); - 800a3d0: 6bb9 ldr r1, [r7, #56] ; 0x38 - 800a3d2: 6978 ldr r0, [r7, #20] - 800a3d4: f7ff f8dc bl 8009590 - } - break; - 800a3d8: e139 b.n 800a64e - segment was smaller than the old one; in either - case, we ditch the incoming segment. */ - break; - } - } else { - if (prev == NULL) { - 800a3da: 6b7b ldr r3, [r7, #52] ; 0x34 - 800a3dc: 2b00 cmp r3, #0 - 800a3de: d117 bne.n 800a410 - if (TCP_SEQ_LT(seqno, next->tcphdr->seqno)) { - 800a3e0: 4b2e ldr r3, [pc, #184] ; (800a49c ) - 800a3e2: 681a ldr r2, [r3, #0] - 800a3e4: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a3e6: 68db ldr r3, [r3, #12] - 800a3e8: 685b ldr r3, [r3, #4] - 800a3ea: 1ad3 subs r3, r2, r3 - 800a3ec: 2b00 cmp r3, #0 - 800a3ee: da57 bge.n 800a4a0 - /* The sequence number of the incoming segment is lower - than the sequence number of the first segment on the - queue. We put the incoming segment first on the - queue. */ - struct tcp_seg *cseg = tcp_seg_copy(&inseg); - 800a3f0: 4829 ldr r0, [pc, #164] ; (800a498 ) - 800a3f2: f7fd fb7d bl 8007af0 - 800a3f6: 61b8 str r0, [r7, #24] - if (cseg != NULL) { - 800a3f8: 69bb ldr r3, [r7, #24] - 800a3fa: 2b00 cmp r3, #0 - 800a3fc: f000 8129 beq.w 800a652 - pcb->ooseq = cseg; - 800a400: 687b ldr r3, [r7, #4] - 800a402: 69ba ldr r2, [r7, #24] - 800a404: 675a str r2, [r3, #116] ; 0x74 - tcp_oos_insert_segment(cseg, next); - 800a406: 6bb9 ldr r1, [r7, #56] ; 0x38 - 800a408: 69b8 ldr r0, [r7, #24] - 800a40a: f7ff f8c1 bl 8009590 - } - break; - 800a40e: e120 b.n 800a652 - } - } else { - /*if (TCP_SEQ_LT(prev->tcphdr->seqno, seqno) && - TCP_SEQ_LT(seqno, next->tcphdr->seqno)) {*/ - if (TCP_SEQ_BETWEEN(seqno, prev->tcphdr->seqno + 1, next->tcphdr->seqno - 1)) { - 800a410: 4b22 ldr r3, [pc, #136] ; (800a49c ) - 800a412: 681a ldr r2, [r3, #0] - 800a414: 6b7b ldr r3, [r7, #52] ; 0x34 - 800a416: 68db ldr r3, [r3, #12] - 800a418: 685b ldr r3, [r3, #4] - 800a41a: 1ad3 subs r3, r2, r3 - 800a41c: 3b01 subs r3, #1 - 800a41e: 2b00 cmp r3, #0 - 800a420: db3e blt.n 800a4a0 - 800a422: 4b1e ldr r3, [pc, #120] ; (800a49c ) - 800a424: 681a ldr r2, [r3, #0] - 800a426: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a428: 68db ldr r3, [r3, #12] - 800a42a: 685b ldr r3, [r3, #4] - 800a42c: 1ad3 subs r3, r2, r3 - 800a42e: 3301 adds r3, #1 - 800a430: 2b00 cmp r3, #0 - 800a432: dc35 bgt.n 800a4a0 - /* The sequence number of the incoming segment is in - between the sequence numbers of the previous and - the next segment on ->ooseq. We trim trim the previous - segment, delete next segments that included in received segment - and trim received, if needed. */ - struct tcp_seg *cseg = tcp_seg_copy(&inseg); - 800a434: 4818 ldr r0, [pc, #96] ; (800a498 ) - 800a436: f7fd fb5b bl 8007af0 - 800a43a: 61f8 str r0, [r7, #28] - if (cseg != NULL) { - 800a43c: 69fb ldr r3, [r7, #28] - 800a43e: 2b00 cmp r3, #0 - 800a440: f000 8109 beq.w 800a656 - if (TCP_SEQ_GT(prev->tcphdr->seqno + prev->len, seqno)) { - 800a444: 6b7b ldr r3, [r7, #52] ; 0x34 - 800a446: 68db ldr r3, [r3, #12] - 800a448: 685b ldr r3, [r3, #4] - 800a44a: 6b7a ldr r2, [r7, #52] ; 0x34 - 800a44c: 8912 ldrh r2, [r2, #8] - 800a44e: 441a add r2, r3 - 800a450: 4b12 ldr r3, [pc, #72] ; (800a49c ) - 800a452: 681b ldr r3, [r3, #0] - 800a454: 1ad3 subs r3, r2, r3 - 800a456: 2b00 cmp r3, #0 - 800a458: dd12 ble.n 800a480 - /* We need to trim the prev segment. */ - prev->len = (u16_t)(seqno - prev->tcphdr->seqno); - 800a45a: 4b10 ldr r3, [pc, #64] ; (800a49c ) - 800a45c: 681b ldr r3, [r3, #0] - 800a45e: b29a uxth r2, r3 - 800a460: 6b7b ldr r3, [r7, #52] ; 0x34 - 800a462: 68db ldr r3, [r3, #12] - 800a464: 685b ldr r3, [r3, #4] - 800a466: b29b uxth r3, r3 - 800a468: 1ad3 subs r3, r2, r3 - 800a46a: b29a uxth r2, r3 - 800a46c: 6b7b ldr r3, [r7, #52] ; 0x34 - 800a46e: 811a strh r2, [r3, #8] - pbuf_realloc(prev->p, prev->len); - 800a470: 6b7b ldr r3, [r7, #52] ; 0x34 - 800a472: 685a ldr r2, [r3, #4] - 800a474: 6b7b ldr r3, [r7, #52] ; 0x34 - 800a476: 891b ldrh r3, [r3, #8] - 800a478: 4619 mov r1, r3 - 800a47a: 4610 mov r0, r2 - 800a47c: f7fb ff16 bl 80062ac - } - prev->next = cseg; - 800a480: 6b7b ldr r3, [r7, #52] ; 0x34 - 800a482: 69fa ldr r2, [r7, #28] - 800a484: 601a str r2, [r3, #0] - tcp_oos_insert_segment(cseg, next); - 800a486: 6bb9 ldr r1, [r7, #56] ; 0x38 - 800a488: 69f8 ldr r0, [r7, #28] - 800a48a: f7ff f881 bl 8009590 - } - break; - 800a48e: e0e2 b.n 800a656 - 800a490: 20009a1c .word 0x20009a1c - 800a494: 20009a19 .word 0x20009a19 - 800a498: 200099ec .word 0x200099ec - 800a49c: 20009a0c .word 0x20009a0c -#endif /* LWIP_TCP_SACK_OUT */ - - /* We don't use 'prev' below, so let's set it to current 'next'. - This way even if we break the loop below, 'prev' will be pointing - at the segment right in front of the newly added one. */ - prev = next; - 800a4a0: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a4a2: 637b str r3, [r7, #52] ; 0x34 - - /* If the "next" segment is the last segment on the - ooseq queue, we add the incoming segment to the end - of the list. */ - if (next->next == NULL && - 800a4a4: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a4a6: 681b ldr r3, [r3, #0] - 800a4a8: 2b00 cmp r3, #0 - 800a4aa: f040 80c6 bne.w 800a63a - TCP_SEQ_GT(seqno, next->tcphdr->seqno)) { - 800a4ae: 4b80 ldr r3, [pc, #512] ; (800a6b0 ) - 800a4b0: 681a ldr r2, [r3, #0] - 800a4b2: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a4b4: 68db ldr r3, [r3, #12] - 800a4b6: 685b ldr r3, [r3, #4] - 800a4b8: 1ad3 subs r3, r2, r3 - if (next->next == NULL && - 800a4ba: 2b00 cmp r3, #0 - 800a4bc: f340 80bd ble.w 800a63a - if (TCPH_FLAGS(next->tcphdr) & TCP_FIN) { - 800a4c0: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a4c2: 68db ldr r3, [r3, #12] - 800a4c4: 899b ldrh r3, [r3, #12] - 800a4c6: b29b uxth r3, r3 - 800a4c8: 4618 mov r0, r3 - 800a4ca: f7fa fd0b bl 8004ee4 - 800a4ce: 4603 mov r3, r0 - 800a4d0: b2db uxtb r3, r3 - 800a4d2: f003 0301 and.w r3, r3, #1 - 800a4d6: 2b00 cmp r3, #0 - 800a4d8: f040 80bf bne.w 800a65a - /* segment "next" already contains all data */ - break; - } - next->next = tcp_seg_copy(&inseg); - 800a4dc: 4875 ldr r0, [pc, #468] ; (800a6b4 ) - 800a4de: f7fd fb07 bl 8007af0 - 800a4e2: 4602 mov r2, r0 - 800a4e4: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a4e6: 601a str r2, [r3, #0] - if (next->next != NULL) { - 800a4e8: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a4ea: 681b ldr r3, [r3, #0] - 800a4ec: 2b00 cmp r3, #0 - 800a4ee: f000 80b6 beq.w 800a65e - if (TCP_SEQ_GT(next->tcphdr->seqno + next->len, seqno)) { - 800a4f2: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a4f4: 68db ldr r3, [r3, #12] - 800a4f6: 685b ldr r3, [r3, #4] - 800a4f8: 6bba ldr r2, [r7, #56] ; 0x38 - 800a4fa: 8912 ldrh r2, [r2, #8] - 800a4fc: 441a add r2, r3 - 800a4fe: 4b6c ldr r3, [pc, #432] ; (800a6b0 ) - 800a500: 681b ldr r3, [r3, #0] - 800a502: 1ad3 subs r3, r2, r3 - 800a504: 2b00 cmp r3, #0 - 800a506: dd12 ble.n 800a52e - /* We need to trim the last segment. */ - next->len = (u16_t)(seqno - next->tcphdr->seqno); - 800a508: 4b69 ldr r3, [pc, #420] ; (800a6b0 ) - 800a50a: 681b ldr r3, [r3, #0] - 800a50c: b29a uxth r2, r3 - 800a50e: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a510: 68db ldr r3, [r3, #12] - 800a512: 685b ldr r3, [r3, #4] - 800a514: b29b uxth r3, r3 - 800a516: 1ad3 subs r3, r2, r3 - 800a518: b29a uxth r2, r3 - 800a51a: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a51c: 811a strh r2, [r3, #8] - pbuf_realloc(next->p, next->len); - 800a51e: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a520: 685a ldr r2, [r3, #4] - 800a522: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a524: 891b ldrh r3, [r3, #8] - 800a526: 4619 mov r1, r3 - 800a528: 4610 mov r0, r2 - 800a52a: f7fb febf bl 80062ac - } - /* check if the remote side overruns our receive window */ - if (TCP_SEQ_GT((u32_t)tcplen + seqno, pcb->rcv_nxt + (u32_t)pcb->rcv_wnd)) { - 800a52e: 4b62 ldr r3, [pc, #392] ; (800a6b8 ) - 800a530: 881b ldrh r3, [r3, #0] - 800a532: 461a mov r2, r3 - 800a534: 4b5e ldr r3, [pc, #376] ; (800a6b0 ) - 800a536: 681b ldr r3, [r3, #0] - 800a538: 441a add r2, r3 - 800a53a: 687b ldr r3, [r7, #4] - 800a53c: 6a5b ldr r3, [r3, #36] ; 0x24 - 800a53e: 6879 ldr r1, [r7, #4] - 800a540: 8d09 ldrh r1, [r1, #40] ; 0x28 - 800a542: 440b add r3, r1 - 800a544: 1ad3 subs r3, r2, r3 - 800a546: 2b00 cmp r3, #0 - 800a548: f340 8089 ble.w 800a65e - LWIP_DEBUGF(TCP_INPUT_DEBUG, - ("tcp_receive: other end overran receive window" - "seqno %"U32_F" len %"U16_F" right edge %"U32_F"\n", - seqno, tcplen, pcb->rcv_nxt + pcb->rcv_wnd)); - if (TCPH_FLAGS(next->next->tcphdr) & TCP_FIN) { - 800a54c: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a54e: 681b ldr r3, [r3, #0] - 800a550: 68db ldr r3, [r3, #12] - 800a552: 899b ldrh r3, [r3, #12] - 800a554: b29b uxth r3, r3 - 800a556: 4618 mov r0, r3 - 800a558: f7fa fcc4 bl 8004ee4 - 800a55c: 4603 mov r3, r0 - 800a55e: b2db uxtb r3, r3 - 800a560: f003 0301 and.w r3, r3, #1 - 800a564: 2b00 cmp r3, #0 - 800a566: d022 beq.n 800a5ae - /* Must remove the FIN from the header as we're trimming - * that byte of sequence-space from the packet */ - TCPH_FLAGS_SET(next->next->tcphdr, TCPH_FLAGS(next->next->tcphdr) & ~TCP_FIN); - 800a568: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a56a: 681b ldr r3, [r3, #0] - 800a56c: 68db ldr r3, [r3, #12] - 800a56e: 899b ldrh r3, [r3, #12] - 800a570: b29b uxth r3, r3 - 800a572: b21b sxth r3, r3 - 800a574: f423 537c bic.w r3, r3, #16128 ; 0x3f00 - 800a578: b21c sxth r4, r3 - 800a57a: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a57c: 681b ldr r3, [r3, #0] - 800a57e: 68db ldr r3, [r3, #12] - 800a580: 899b ldrh r3, [r3, #12] - 800a582: b29b uxth r3, r3 - 800a584: 4618 mov r0, r3 - 800a586: f7fa fcad bl 8004ee4 - 800a58a: 4603 mov r3, r0 - 800a58c: b2db uxtb r3, r3 - 800a58e: b29b uxth r3, r3 - 800a590: f003 033e and.w r3, r3, #62 ; 0x3e - 800a594: b29b uxth r3, r3 - 800a596: 4618 mov r0, r3 - 800a598: f7fa fca4 bl 8004ee4 - 800a59c: 4603 mov r3, r0 - 800a59e: b21b sxth r3, r3 - 800a5a0: 4323 orrs r3, r4 - 800a5a2: b21a sxth r2, r3 - 800a5a4: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a5a6: 681b ldr r3, [r3, #0] - 800a5a8: 68db ldr r3, [r3, #12] - 800a5aa: b292 uxth r2, r2 - 800a5ac: 819a strh r2, [r3, #12] - } - /* Adjust length of segment to fit in the window. */ - next->next->len = (u16_t)(pcb->rcv_nxt + pcb->rcv_wnd - seqno); - 800a5ae: 687b ldr r3, [r7, #4] - 800a5b0: 6a5b ldr r3, [r3, #36] ; 0x24 - 800a5b2: b29a uxth r2, r3 - 800a5b4: 687b ldr r3, [r7, #4] - 800a5b6: 8d1b ldrh r3, [r3, #40] ; 0x28 - 800a5b8: 4413 add r3, r2 - 800a5ba: b299 uxth r1, r3 - 800a5bc: 4b3c ldr r3, [pc, #240] ; (800a6b0 ) - 800a5be: 681b ldr r3, [r3, #0] - 800a5c0: b29a uxth r2, r3 - 800a5c2: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a5c4: 681b ldr r3, [r3, #0] - 800a5c6: 1a8a subs r2, r1, r2 - 800a5c8: b292 uxth r2, r2 - 800a5ca: 811a strh r2, [r3, #8] - pbuf_realloc(next->next->p, next->next->len); - 800a5cc: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a5ce: 681b ldr r3, [r3, #0] - 800a5d0: 685a ldr r2, [r3, #4] - 800a5d2: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a5d4: 681b ldr r3, [r3, #0] - 800a5d6: 891b ldrh r3, [r3, #8] - 800a5d8: 4619 mov r1, r3 - 800a5da: 4610 mov r0, r2 - 800a5dc: f7fb fe66 bl 80062ac - tcplen = TCP_TCPLEN(next->next); - 800a5e0: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a5e2: 681b ldr r3, [r3, #0] - 800a5e4: 891c ldrh r4, [r3, #8] - 800a5e6: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a5e8: 681b ldr r3, [r3, #0] - 800a5ea: 68db ldr r3, [r3, #12] - 800a5ec: 899b ldrh r3, [r3, #12] - 800a5ee: b29b uxth r3, r3 - 800a5f0: 4618 mov r0, r3 - 800a5f2: f7fa fc77 bl 8004ee4 - 800a5f6: 4603 mov r3, r0 - 800a5f8: b2db uxtb r3, r3 - 800a5fa: f003 0303 and.w r3, r3, #3 - 800a5fe: 2b00 cmp r3, #0 - 800a600: d001 beq.n 800a606 - 800a602: 2301 movs r3, #1 - 800a604: e000 b.n 800a608 - 800a606: 2300 movs r3, #0 - 800a608: 4423 add r3, r4 - 800a60a: b29a uxth r2, r3 - 800a60c: 4b2a ldr r3, [pc, #168] ; (800a6b8 ) - 800a60e: 801a strh r2, [r3, #0] - LWIP_ASSERT("tcp_receive: segment not trimmed correctly to rcv_wnd\n", - 800a610: 4b29 ldr r3, [pc, #164] ; (800a6b8 ) - 800a612: 881b ldrh r3, [r3, #0] - 800a614: 461a mov r2, r3 - 800a616: 4b26 ldr r3, [pc, #152] ; (800a6b0 ) - 800a618: 681b ldr r3, [r3, #0] - 800a61a: 441a add r2, r3 - 800a61c: 687b ldr r3, [r7, #4] - 800a61e: 6a5b ldr r3, [r3, #36] ; 0x24 - 800a620: 6879 ldr r1, [r7, #4] - 800a622: 8d09 ldrh r1, [r1, #40] ; 0x28 - 800a624: 440b add r3, r1 - 800a626: 429a cmp r2, r3 - 800a628: d019 beq.n 800a65e - 800a62a: 4b24 ldr r3, [pc, #144] ; (800a6bc ) - 800a62c: f44f 62df mov.w r2, #1784 ; 0x6f8 - 800a630: 4923 ldr r1, [pc, #140] ; (800a6c0 ) - 800a632: 4824 ldr r0, [pc, #144] ; (800a6c4 ) - 800a634: f006 fd38 bl 80110a8 - (seqno + tcplen) == (pcb->rcv_nxt + pcb->rcv_wnd)); - } - } - break; - 800a638: e011 b.n 800a65e - for (next = pcb->ooseq; next != NULL; next = next->next) { - 800a63a: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a63c: 681b ldr r3, [r3, #0] - 800a63e: 63bb str r3, [r7, #56] ; 0x38 - 800a640: 6bbb ldr r3, [r7, #56] ; 0x38 - 800a642: 2b00 cmp r3, #0 - 800a644: f47f aea4 bne.w 800a390 - 800a648: e00a b.n 800a660 - break; - 800a64a: bf00 nop - 800a64c: e008 b.n 800a660 - break; - 800a64e: bf00 nop - 800a650: e006 b.n 800a660 - break; - 800a652: bf00 nop - 800a654: e004 b.n 800a660 - break; - 800a656: bf00 nop - 800a658: e002 b.n 800a660 - break; - 800a65a: bf00 nop - 800a65c: e000 b.n 800a660 - break; - 800a65e: bf00 nop -#endif /* TCP_OOSEQ_BYTES_LIMIT || TCP_OOSEQ_PBUFS_LIMIT */ -#endif /* TCP_QUEUE_OOSEQ */ - - /* We send the ACK packet after we've (potentially) dealt with SACKs, - so they can be included in the acknowledgment. */ - tcp_send_empty_ack(pcb); - 800a660: 6878 ldr r0, [r7, #4] - 800a662: f001 fa33 bl 800bacc - if (pcb->rcv_nxt == seqno) { - 800a666: e003 b.n 800a670 - } - } else { - /* The incoming segment is not within the window. */ - tcp_send_empty_ack(pcb); - 800a668: 6878 ldr r0, [r7, #4] - 800a66a: f001 fa2f bl 800bacc - if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, - 800a66e: e01a b.n 800a6a6 - 800a670: e019 b.n 800a6a6 - } - } else { - /* Segments with length 0 is taken care of here. Segments that - fall out of the window are ACKed. */ - if (!TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd - 1)) { - 800a672: 4b0f ldr r3, [pc, #60] ; (800a6b0 ) - 800a674: 681a ldr r2, [r3, #0] - 800a676: 687b ldr r3, [r7, #4] - 800a678: 6a5b ldr r3, [r3, #36] ; 0x24 - 800a67a: 1ad3 subs r3, r2, r3 - 800a67c: 2b00 cmp r3, #0 - 800a67e: db0a blt.n 800a696 - 800a680: 4b0b ldr r3, [pc, #44] ; (800a6b0 ) - 800a682: 681a ldr r2, [r3, #0] - 800a684: 687b ldr r3, [r7, #4] - 800a686: 6a5b ldr r3, [r3, #36] ; 0x24 - 800a688: 6879 ldr r1, [r7, #4] - 800a68a: 8d09 ldrh r1, [r1, #40] ; 0x28 - 800a68c: 440b add r3, r1 - 800a68e: 1ad3 subs r3, r2, r3 - 800a690: 3301 adds r3, #1 - 800a692: 2b00 cmp r3, #0 - 800a694: dd07 ble.n 800a6a6 - tcp_ack_now(pcb); - 800a696: 687b ldr r3, [r7, #4] - 800a698: 8b5b ldrh r3, [r3, #26] - 800a69a: f043 0302 orr.w r3, r3, #2 - 800a69e: b29a uxth r2, r3 - 800a6a0: 687b ldr r3, [r7, #4] - 800a6a2: 835a strh r2, [r3, #26] - } - } -} - 800a6a4: e7ff b.n 800a6a6 - 800a6a6: bf00 nop - 800a6a8: 3750 adds r7, #80 ; 0x50 - 800a6aa: 46bd mov sp, r7 - 800a6ac: bdb0 pop {r4, r5, r7, pc} - 800a6ae: bf00 nop - 800a6b0: 20009a0c .word 0x20009a0c - 800a6b4: 200099ec .word 0x200099ec - 800a6b8: 20009a16 .word 0x20009a16 - 800a6bc: 08016e14 .word 0x08016e14 - 800a6c0: 080171bc .word 0x080171bc - 800a6c4: 08016e60 .word 0x08016e60 - -0800a6c8 : - -static u8_t -tcp_get_next_optbyte(void) -{ - 800a6c8: b480 push {r7} - 800a6ca: b083 sub sp, #12 - 800a6cc: af00 add r7, sp, #0 - u16_t optidx = tcp_optidx++; - 800a6ce: 4b15 ldr r3, [pc, #84] ; (800a724 ) - 800a6d0: 881b ldrh r3, [r3, #0] - 800a6d2: 1c5a adds r2, r3, #1 - 800a6d4: b291 uxth r1, r2 - 800a6d6: 4a13 ldr r2, [pc, #76] ; (800a724 ) - 800a6d8: 8011 strh r1, [r2, #0] - 800a6da: 80fb strh r3, [r7, #6] - if ((tcphdr_opt2 == NULL) || (optidx < tcphdr_opt1len)) { - 800a6dc: 4b12 ldr r3, [pc, #72] ; (800a728 ) - 800a6de: 681b ldr r3, [r3, #0] - 800a6e0: 2b00 cmp r3, #0 - 800a6e2: d004 beq.n 800a6ee - 800a6e4: 4b11 ldr r3, [pc, #68] ; (800a72c ) - 800a6e6: 881b ldrh r3, [r3, #0] - 800a6e8: 88fa ldrh r2, [r7, #6] - 800a6ea: 429a cmp r2, r3 - 800a6ec: d208 bcs.n 800a700 - u8_t *opts = (u8_t *)tcphdr + TCP_HLEN; - 800a6ee: 4b10 ldr r3, [pc, #64] ; (800a730 ) - 800a6f0: 681b ldr r3, [r3, #0] - 800a6f2: 3314 adds r3, #20 - 800a6f4: 603b str r3, [r7, #0] - return opts[optidx]; - 800a6f6: 88fb ldrh r3, [r7, #6] - 800a6f8: 683a ldr r2, [r7, #0] - 800a6fa: 4413 add r3, r2 - 800a6fc: 781b ldrb r3, [r3, #0] - 800a6fe: e00b b.n 800a718 - } else { - u8_t idx = (u8_t)(optidx - tcphdr_opt1len); - 800a700: 88fb ldrh r3, [r7, #6] - 800a702: b2da uxtb r2, r3 - 800a704: 4b09 ldr r3, [pc, #36] ; (800a72c ) - 800a706: 881b ldrh r3, [r3, #0] - 800a708: b2db uxtb r3, r3 - 800a70a: 1ad3 subs r3, r2, r3 - 800a70c: 717b strb r3, [r7, #5] - return tcphdr_opt2[idx]; - 800a70e: 4b06 ldr r3, [pc, #24] ; (800a728 ) - 800a710: 681a ldr r2, [r3, #0] - 800a712: 797b ldrb r3, [r7, #5] - 800a714: 4413 add r3, r2 - 800a716: 781b ldrb r3, [r3, #0] - } -} - 800a718: 4618 mov r0, r3 - 800a71a: 370c adds r7, #12 - 800a71c: 46bd mov sp, r7 - 800a71e: f85d 7b04 ldr.w r7, [sp], #4 - 800a722: 4770 bx lr - 800a724: 20009a08 .word 0x20009a08 - 800a728: 20009a04 .word 0x20009a04 - 800a72c: 20009a02 .word 0x20009a02 - 800a730: 200099fc .word 0x200099fc - -0800a734 : - * - * @param pcb the tcp_pcb for which a segment arrived - */ -static void -tcp_parseopt(struct tcp_pcb *pcb) -{ - 800a734: b580 push {r7, lr} - 800a736: b084 sub sp, #16 - 800a738: af00 add r7, sp, #0 - 800a73a: 6078 str r0, [r7, #4] - u16_t mss; -#if LWIP_TCP_TIMESTAMPS - u32_t tsval; -#endif - - LWIP_ASSERT("tcp_parseopt: invalid pcb", pcb != NULL); - 800a73c: 687b ldr r3, [r7, #4] - 800a73e: 2b00 cmp r3, #0 - 800a740: d106 bne.n 800a750 - 800a742: 4b32 ldr r3, [pc, #200] ; (800a80c ) - 800a744: f240 727d movw r2, #1917 ; 0x77d - 800a748: 4931 ldr r1, [pc, #196] ; (800a810 ) - 800a74a: 4832 ldr r0, [pc, #200] ; (800a814 ) - 800a74c: f006 fcac bl 80110a8 - - /* Parse the TCP MSS option, if present. */ - if (tcphdr_optlen != 0) { - 800a750: 4b31 ldr r3, [pc, #196] ; (800a818 ) - 800a752: 881b ldrh r3, [r3, #0] - 800a754: 2b00 cmp r3, #0 - 800a756: d055 beq.n 800a804 - for (tcp_optidx = 0; tcp_optidx < tcphdr_optlen; ) { - 800a758: 4b30 ldr r3, [pc, #192] ; (800a81c ) - 800a75a: 2200 movs r2, #0 - 800a75c: 801a strh r2, [r3, #0] - 800a75e: e045 b.n 800a7ec - u8_t opt = tcp_get_next_optbyte(); - 800a760: f7ff ffb2 bl 800a6c8 - 800a764: 4603 mov r3, r0 - 800a766: 73fb strb r3, [r7, #15] - switch (opt) { - 800a768: 7bfb ldrb r3, [r7, #15] - 800a76a: 2b02 cmp r3, #2 - 800a76c: d006 beq.n 800a77c - 800a76e: 2b02 cmp r3, #2 - 800a770: dc2b bgt.n 800a7ca - 800a772: 2b00 cmp r3, #0 - 800a774: d041 beq.n 800a7fa - 800a776: 2b01 cmp r3, #1 - 800a778: d127 bne.n 800a7ca - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: EOL\n")); - return; - case LWIP_TCP_OPT_NOP: - /* NOP option. */ - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: NOP\n")); - break; - 800a77a: e037 b.n 800a7ec - case LWIP_TCP_OPT_MSS: - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: MSS\n")); - if (tcp_get_next_optbyte() != LWIP_TCP_OPT_LEN_MSS || (tcp_optidx - 2 + LWIP_TCP_OPT_LEN_MSS) > tcphdr_optlen) { - 800a77c: f7ff ffa4 bl 800a6c8 - 800a780: 4603 mov r3, r0 - 800a782: 2b04 cmp r3, #4 - 800a784: d13b bne.n 800a7fe - 800a786: 4b25 ldr r3, [pc, #148] ; (800a81c ) - 800a788: 881b ldrh r3, [r3, #0] - 800a78a: 3301 adds r3, #1 - 800a78c: 4a22 ldr r2, [pc, #136] ; (800a818 ) - 800a78e: 8812 ldrh r2, [r2, #0] - 800a790: 4293 cmp r3, r2 - 800a792: da34 bge.n 800a7fe - /* Bad length */ - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); - return; - } - /* An MSS option with the right option length. */ - mss = (u16_t)(tcp_get_next_optbyte() << 8); - 800a794: f7ff ff98 bl 800a6c8 - 800a798: 4603 mov r3, r0 - 800a79a: b29b uxth r3, r3 - 800a79c: 021b lsls r3, r3, #8 - 800a79e: 81bb strh r3, [r7, #12] - mss |= tcp_get_next_optbyte(); - 800a7a0: f7ff ff92 bl 800a6c8 - 800a7a4: 4603 mov r3, r0 - 800a7a6: b29a uxth r2, r3 - 800a7a8: 89bb ldrh r3, [r7, #12] - 800a7aa: 4313 orrs r3, r2 - 800a7ac: 81bb strh r3, [r7, #12] - /* Limit the mss to the configured TCP_MSS and prevent division by zero */ - pcb->mss = ((mss > TCP_MSS) || (mss == 0)) ? TCP_MSS : mss; - 800a7ae: 89bb ldrh r3, [r7, #12] - 800a7b0: f5b3 7f06 cmp.w r3, #536 ; 0x218 - 800a7b4: d804 bhi.n 800a7c0 - 800a7b6: 89bb ldrh r3, [r7, #12] - 800a7b8: 2b00 cmp r3, #0 - 800a7ba: d001 beq.n 800a7c0 - 800a7bc: 89ba ldrh r2, [r7, #12] - 800a7be: e001 b.n 800a7c4 - 800a7c0: f44f 7206 mov.w r2, #536 ; 0x218 - 800a7c4: 687b ldr r3, [r7, #4] - 800a7c6: 865a strh r2, [r3, #50] ; 0x32 - break; - 800a7c8: e010 b.n 800a7ec - } - break; -#endif /* LWIP_TCP_SACK_OUT */ - default: - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: other\n")); - data = tcp_get_next_optbyte(); - 800a7ca: f7ff ff7d bl 800a6c8 - 800a7ce: 4603 mov r3, r0 - 800a7d0: 72fb strb r3, [r7, #11] - if (data < 2) { - 800a7d2: 7afb ldrb r3, [r7, #11] - 800a7d4: 2b01 cmp r3, #1 - 800a7d6: d914 bls.n 800a802 - and we don't process them further. */ - return; - } - /* All other options have a length field, so that we easily - can skip past them. */ - tcp_optidx += data - 2; - 800a7d8: 7afb ldrb r3, [r7, #11] - 800a7da: b29a uxth r2, r3 - 800a7dc: 4b0f ldr r3, [pc, #60] ; (800a81c ) - 800a7de: 881b ldrh r3, [r3, #0] - 800a7e0: 4413 add r3, r2 - 800a7e2: b29b uxth r3, r3 - 800a7e4: 3b02 subs r3, #2 - 800a7e6: b29a uxth r2, r3 - 800a7e8: 4b0c ldr r3, [pc, #48] ; (800a81c ) - 800a7ea: 801a strh r2, [r3, #0] - for (tcp_optidx = 0; tcp_optidx < tcphdr_optlen; ) { - 800a7ec: 4b0b ldr r3, [pc, #44] ; (800a81c ) - 800a7ee: 881a ldrh r2, [r3, #0] - 800a7f0: 4b09 ldr r3, [pc, #36] ; (800a818 ) - 800a7f2: 881b ldrh r3, [r3, #0] - 800a7f4: 429a cmp r2, r3 - 800a7f6: d3b3 bcc.n 800a760 - 800a7f8: e004 b.n 800a804 - return; - 800a7fa: bf00 nop - 800a7fc: e002 b.n 800a804 - return; - 800a7fe: bf00 nop - 800a800: e000 b.n 800a804 - return; - 800a802: bf00 nop - } - } - } -} - 800a804: 3710 adds r7, #16 - 800a806: 46bd mov sp, r7 - 800a808: bd80 pop {r7, pc} - 800a80a: bf00 nop - 800a80c: 08016e14 .word 0x08016e14 - 800a810: 08017278 .word 0x08017278 - 800a814: 08016e60 .word 0x08016e60 - 800a818: 20009a00 .word 0x20009a00 - 800a81c: 20009a08 .word 0x20009a08 - -0800a820 : - -void -tcp_trigger_input_pcb_close(void) -{ - 800a820: b480 push {r7} - 800a822: af00 add r7, sp, #0 - recv_flags |= TF_CLOSED; - 800a824: 4b05 ldr r3, [pc, #20] ; (800a83c ) - 800a826: 781b ldrb r3, [r3, #0] - 800a828: f043 0310 orr.w r3, r3, #16 - 800a82c: b2da uxtb r2, r3 - 800a82e: 4b03 ldr r3, [pc, #12] ; (800a83c ) - 800a830: 701a strb r2, [r3, #0] -} - 800a832: bf00 nop - 800a834: 46bd mov sp, r7 - 800a836: f85d 7b04 ldr.w r7, [sp], #4 - 800a83a: 4770 bx lr - 800a83c: 20009a19 .word 0x20009a19 - -0800a840 : -static err_t tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb, struct netif *netif); - -/* tcp_route: common code that returns a fixed bound netif or calls ip_route */ -static struct netif * -tcp_route(const struct tcp_pcb *pcb, const ip_addr_t *src, const ip_addr_t *dst) -{ - 800a840: b580 push {r7, lr} - 800a842: b084 sub sp, #16 - 800a844: af00 add r7, sp, #0 - 800a846: 60f8 str r0, [r7, #12] - 800a848: 60b9 str r1, [r7, #8] - 800a84a: 607a str r2, [r7, #4] - LWIP_UNUSED_ARG(src); /* in case IPv4-only and source-based routing is disabled */ - - if ((pcb != NULL) && (pcb->netif_idx != NETIF_NO_INDEX)) { - 800a84c: 68fb ldr r3, [r7, #12] - 800a84e: 2b00 cmp r3, #0 - 800a850: d00a beq.n 800a868 - 800a852: 68fb ldr r3, [r7, #12] - 800a854: 7a1b ldrb r3, [r3, #8] - 800a856: 2b00 cmp r3, #0 - 800a858: d006 beq.n 800a868 - return netif_get_by_index(pcb->netif_idx); - 800a85a: 68fb ldr r3, [r7, #12] - 800a85c: 7a1b ldrb r3, [r3, #8] - 800a85e: 4618 mov r0, r3 - 800a860: f7fb fb4a bl 8005ef8 - 800a864: 4603 mov r3, r0 - 800a866: e003 b.n 800a870 - } else { - return ip_route(src, dst); - 800a868: 6878 ldr r0, [r7, #4] - 800a86a: f005 f871 bl 800f950 - 800a86e: 4603 mov r3, r0 - } -} - 800a870: 4618 mov r0, r3 - 800a872: 3710 adds r7, #16 - 800a874: 46bd mov sp, r7 - 800a876: bd80 pop {r7, pc} - -0800a878 : - * The TCP header is filled in except ackno and wnd. - * p is freed on failure. - */ -static struct tcp_seg * -tcp_create_segment(const struct tcp_pcb *pcb, struct pbuf *p, u8_t hdrflags, u32_t seqno, u8_t optflags) -{ - 800a878: b590 push {r4, r7, lr} - 800a87a: b087 sub sp, #28 - 800a87c: af00 add r7, sp, #0 - 800a87e: 60f8 str r0, [r7, #12] - 800a880: 60b9 str r1, [r7, #8] - 800a882: 603b str r3, [r7, #0] - 800a884: 4613 mov r3, r2 - 800a886: 71fb strb r3, [r7, #7] - struct tcp_seg *seg; - u8_t optlen; - - LWIP_ASSERT("tcp_create_segment: invalid pcb", pcb != NULL); - 800a888: 68fb ldr r3, [r7, #12] - 800a88a: 2b00 cmp r3, #0 - 800a88c: d105 bne.n 800a89a - 800a88e: 4b44 ldr r3, [pc, #272] ; (800a9a0 ) - 800a890: 22a3 movs r2, #163 ; 0xa3 - 800a892: 4944 ldr r1, [pc, #272] ; (800a9a4 ) - 800a894: 4844 ldr r0, [pc, #272] ; (800a9a8 ) - 800a896: f006 fc07 bl 80110a8 - LWIP_ASSERT("tcp_create_segment: invalid pbuf", p != NULL); - 800a89a: 68bb ldr r3, [r7, #8] - 800a89c: 2b00 cmp r3, #0 - 800a89e: d105 bne.n 800a8ac - 800a8a0: 4b3f ldr r3, [pc, #252] ; (800a9a0 ) - 800a8a2: 22a4 movs r2, #164 ; 0xa4 - 800a8a4: 4941 ldr r1, [pc, #260] ; (800a9ac ) - 800a8a6: 4840 ldr r0, [pc, #256] ; (800a9a8 ) - 800a8a8: f006 fbfe bl 80110a8 - - optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(optflags, pcb); - 800a8ac: f897 3028 ldrb.w r3, [r7, #40] ; 0x28 - 800a8b0: 009b lsls r3, r3, #2 - 800a8b2: b2db uxtb r3, r3 - 800a8b4: f003 0304 and.w r3, r3, #4 - 800a8b8: 75fb strb r3, [r7, #23] - - if ((seg = (struct tcp_seg *)memp_malloc(MEMP_TCP_SEG)) == NULL) { - 800a8ba: 2003 movs r0, #3 - 800a8bc: f7fa ff8a bl 80057d4 - 800a8c0: 6138 str r0, [r7, #16] - 800a8c2: 693b ldr r3, [r7, #16] - 800a8c4: 2b00 cmp r3, #0 - 800a8c6: d104 bne.n 800a8d2 - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("tcp_create_segment: no memory.\n")); - pbuf_free(p); - 800a8c8: 68b8 ldr r0, [r7, #8] - 800a8ca: f7fb fe75 bl 80065b8 - return NULL; - 800a8ce: 2300 movs r3, #0 - 800a8d0: e061 b.n 800a996 - } - seg->flags = optflags; - 800a8d2: 693b ldr r3, [r7, #16] - 800a8d4: f897 2028 ldrb.w r2, [r7, #40] ; 0x28 - 800a8d8: 729a strb r2, [r3, #10] - seg->next = NULL; - 800a8da: 693b ldr r3, [r7, #16] - 800a8dc: 2200 movs r2, #0 - 800a8de: 601a str r2, [r3, #0] - seg->p = p; - 800a8e0: 693b ldr r3, [r7, #16] - 800a8e2: 68ba ldr r2, [r7, #8] - 800a8e4: 605a str r2, [r3, #4] - LWIP_ASSERT("p->tot_len >= optlen", p->tot_len >= optlen); - 800a8e6: 68bb ldr r3, [r7, #8] - 800a8e8: 891a ldrh r2, [r3, #8] - 800a8ea: 7dfb ldrb r3, [r7, #23] - 800a8ec: b29b uxth r3, r3 - 800a8ee: 429a cmp r2, r3 - 800a8f0: d205 bcs.n 800a8fe - 800a8f2: 4b2b ldr r3, [pc, #172] ; (800a9a0 ) - 800a8f4: 22b0 movs r2, #176 ; 0xb0 - 800a8f6: 492e ldr r1, [pc, #184] ; (800a9b0 ) - 800a8f8: 482b ldr r0, [pc, #172] ; (800a9a8 ) - 800a8fa: f006 fbd5 bl 80110a8 - seg->len = p->tot_len - optlen; - 800a8fe: 68bb ldr r3, [r7, #8] - 800a900: 891a ldrh r2, [r3, #8] - 800a902: 7dfb ldrb r3, [r7, #23] - 800a904: b29b uxth r3, r3 - 800a906: 1ad3 subs r3, r2, r3 - 800a908: b29a uxth r2, r3 - 800a90a: 693b ldr r3, [r7, #16] - 800a90c: 811a strh r2, [r3, #8] - LWIP_ASSERT("invalid optflags passed: TF_SEG_DATA_CHECKSUMMED", - (optflags & TF_SEG_DATA_CHECKSUMMED) == 0); -#endif /* TCP_CHECKSUM_ON_COPY */ - - /* build TCP header */ - if (pbuf_add_header(p, TCP_HLEN)) { - 800a90e: 2114 movs r1, #20 - 800a910: 68b8 ldr r0, [r7, #8] - 800a912: f7fb fdbb bl 800648c - 800a916: 4603 mov r3, r0 - 800a918: 2b00 cmp r3, #0 - 800a91a: d004 beq.n 800a926 - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("tcp_create_segment: no room for TCP header in pbuf.\n")); - TCP_STATS_INC(tcp.err); - tcp_seg_free(seg); - 800a91c: 6938 ldr r0, [r7, #16] - 800a91e: f7fd f8ce bl 8007abe - return NULL; - 800a922: 2300 movs r3, #0 - 800a924: e037 b.n 800a996 - } - seg->tcphdr = (struct tcp_hdr *)seg->p->payload; - 800a926: 693b ldr r3, [r7, #16] - 800a928: 685b ldr r3, [r3, #4] - 800a92a: 685a ldr r2, [r3, #4] - 800a92c: 693b ldr r3, [r7, #16] - 800a92e: 60da str r2, [r3, #12] - seg->tcphdr->src = lwip_htons(pcb->local_port); - 800a930: 68fb ldr r3, [r7, #12] - 800a932: 8ada ldrh r2, [r3, #22] - 800a934: 693b ldr r3, [r7, #16] - 800a936: 68dc ldr r4, [r3, #12] - 800a938: 4610 mov r0, r2 - 800a93a: f7fa fad3 bl 8004ee4 - 800a93e: 4603 mov r3, r0 - 800a940: 8023 strh r3, [r4, #0] - seg->tcphdr->dest = lwip_htons(pcb->remote_port); - 800a942: 68fb ldr r3, [r7, #12] - 800a944: 8b1a ldrh r2, [r3, #24] - 800a946: 693b ldr r3, [r7, #16] - 800a948: 68dc ldr r4, [r3, #12] - 800a94a: 4610 mov r0, r2 - 800a94c: f7fa faca bl 8004ee4 - 800a950: 4603 mov r3, r0 - 800a952: 8063 strh r3, [r4, #2] - seg->tcphdr->seqno = lwip_htonl(seqno); - 800a954: 693b ldr r3, [r7, #16] - 800a956: 68dc ldr r4, [r3, #12] - 800a958: 6838 ldr r0, [r7, #0] - 800a95a: f7fa fad8 bl 8004f0e - 800a95e: 4603 mov r3, r0 - 800a960: 6063 str r3, [r4, #4] - /* ackno is set in tcp_output */ - TCPH_HDRLEN_FLAGS_SET(seg->tcphdr, (5 + optlen / 4), hdrflags); - 800a962: 7dfb ldrb r3, [r7, #23] - 800a964: 089b lsrs r3, r3, #2 - 800a966: b2db uxtb r3, r3 - 800a968: b29b uxth r3, r3 - 800a96a: 3305 adds r3, #5 - 800a96c: b29b uxth r3, r3 - 800a96e: 031b lsls r3, r3, #12 - 800a970: b29a uxth r2, r3 - 800a972: 79fb ldrb r3, [r7, #7] - 800a974: b29b uxth r3, r3 - 800a976: 4313 orrs r3, r2 - 800a978: b29a uxth r2, r3 - 800a97a: 693b ldr r3, [r7, #16] - 800a97c: 68dc ldr r4, [r3, #12] - 800a97e: 4610 mov r0, r2 - 800a980: f7fa fab0 bl 8004ee4 - 800a984: 4603 mov r3, r0 - 800a986: 81a3 strh r3, [r4, #12] - /* wnd and chksum are set in tcp_output */ - seg->tcphdr->urgp = 0; - 800a988: 693b ldr r3, [r7, #16] - 800a98a: 68db ldr r3, [r3, #12] - 800a98c: 2200 movs r2, #0 - 800a98e: 749a strb r2, [r3, #18] - 800a990: 2200 movs r2, #0 - 800a992: 74da strb r2, [r3, #19] - return seg; - 800a994: 693b ldr r3, [r7, #16] -} - 800a996: 4618 mov r0, r3 - 800a998: 371c adds r7, #28 - 800a99a: 46bd mov sp, r7 - 800a99c: bd90 pop {r4, r7, pc} - 800a99e: bf00 nop - 800a9a0: 08017294 .word 0x08017294 - 800a9a4: 080172c8 .word 0x080172c8 - 800a9a8: 080172e8 .word 0x080172e8 - 800a9ac: 08017310 .word 0x08017310 - 800a9b0: 08017334 .word 0x08017334 - -0800a9b4 : - * @param pcb the tcp_pcb for which to split the unsent head - * @param split the amount of payload to remain in the head - */ -err_t -tcp_split_unsent_seg(struct tcp_pcb *pcb, u16_t split) -{ - 800a9b4: b590 push {r4, r7, lr} - 800a9b6: b08b sub sp, #44 ; 0x2c - 800a9b8: af02 add r7, sp, #8 - 800a9ba: 6078 str r0, [r7, #4] - 800a9bc: 460b mov r3, r1 - 800a9be: 807b strh r3, [r7, #2] - struct tcp_seg *seg = NULL, *useg = NULL; - 800a9c0: 2300 movs r3, #0 - 800a9c2: 61fb str r3, [r7, #28] - 800a9c4: 2300 movs r3, #0 - 800a9c6: 617b str r3, [r7, #20] - struct pbuf *p = NULL; - 800a9c8: 2300 movs r3, #0 - 800a9ca: 613b str r3, [r7, #16] - u16_t chksum = 0; - u8_t chksum_swapped = 0; - struct pbuf *q; -#endif /* TCP_CHECKSUM_ON_COPY */ - - LWIP_ASSERT("tcp_split_unsent_seg: invalid pcb", pcb != NULL); - 800a9cc: 687b ldr r3, [r7, #4] - 800a9ce: 2b00 cmp r3, #0 - 800a9d0: d106 bne.n 800a9e0 - 800a9d2: 4b95 ldr r3, [pc, #596] ; (800ac28 ) - 800a9d4: f240 324b movw r2, #843 ; 0x34b - 800a9d8: 4994 ldr r1, [pc, #592] ; (800ac2c ) - 800a9da: 4895 ldr r0, [pc, #596] ; (800ac30 ) - 800a9dc: f006 fb64 bl 80110a8 - - useg = pcb->unsent; - 800a9e0: 687b ldr r3, [r7, #4] - 800a9e2: 6edb ldr r3, [r3, #108] ; 0x6c - 800a9e4: 617b str r3, [r7, #20] - if (useg == NULL) { - 800a9e6: 697b ldr r3, [r7, #20] - 800a9e8: 2b00 cmp r3, #0 - 800a9ea: d102 bne.n 800a9f2 - return ERR_MEM; - 800a9ec: f04f 33ff mov.w r3, #4294967295 - 800a9f0: e116 b.n 800ac20 - } - - if (split == 0) { - 800a9f2: 887b ldrh r3, [r7, #2] - 800a9f4: 2b00 cmp r3, #0 - 800a9f6: d109 bne.n 800aa0c - LWIP_ASSERT("Can't split segment into length 0", 0); - 800a9f8: 4b8b ldr r3, [pc, #556] ; (800ac28 ) - 800a9fa: f240 3253 movw r2, #851 ; 0x353 - 800a9fe: 498d ldr r1, [pc, #564] ; (800ac34 ) - 800aa00: 488b ldr r0, [pc, #556] ; (800ac30 ) - 800aa02: f006 fb51 bl 80110a8 - return ERR_VAL; - 800aa06: f06f 0305 mvn.w r3, #5 - 800aa0a: e109 b.n 800ac20 - } - - if (useg->len <= split) { - 800aa0c: 697b ldr r3, [r7, #20] - 800aa0e: 891b ldrh r3, [r3, #8] - 800aa10: 887a ldrh r2, [r7, #2] - 800aa12: 429a cmp r2, r3 - 800aa14: d301 bcc.n 800aa1a - return ERR_OK; - 800aa16: 2300 movs r3, #0 - 800aa18: e102 b.n 800ac20 - } - - LWIP_ASSERT("split <= mss", split <= pcb->mss); - 800aa1a: 687b ldr r3, [r7, #4] - 800aa1c: 8e5b ldrh r3, [r3, #50] ; 0x32 - 800aa1e: 887a ldrh r2, [r7, #2] - 800aa20: 429a cmp r2, r3 - 800aa22: d906 bls.n 800aa32 - 800aa24: 4b80 ldr r3, [pc, #512] ; (800ac28 ) - 800aa26: f240 325b movw r2, #859 ; 0x35b - 800aa2a: 4983 ldr r1, [pc, #524] ; (800ac38 ) - 800aa2c: 4880 ldr r0, [pc, #512] ; (800ac30 ) - 800aa2e: f006 fb3b bl 80110a8 - LWIP_ASSERT("useg->len > 0", useg->len > 0); - 800aa32: 697b ldr r3, [r7, #20] - 800aa34: 891b ldrh r3, [r3, #8] - 800aa36: 2b00 cmp r3, #0 - 800aa38: d106 bne.n 800aa48 - 800aa3a: 4b7b ldr r3, [pc, #492] ; (800ac28 ) - 800aa3c: f44f 7257 mov.w r2, #860 ; 0x35c - 800aa40: 497e ldr r1, [pc, #504] ; (800ac3c ) - 800aa42: 487b ldr r0, [pc, #492] ; (800ac30 ) - 800aa44: f006 fb30 bl 80110a8 - * to split this packet so we may actually exceed the max value by - * one! - */ - LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_enqueue: split_unsent_seg: %u\n", (unsigned int)pcb->snd_queuelen)); - - optflags = useg->flags; - 800aa48: 697b ldr r3, [r7, #20] - 800aa4a: 7a9b ldrb r3, [r3, #10] - 800aa4c: 73fb strb r3, [r7, #15] -#if TCP_CHECKSUM_ON_COPY - /* Remove since checksum is not stored until after tcp_create_segment() */ - optflags &= ~TF_SEG_DATA_CHECKSUMMED; -#endif /* TCP_CHECKSUM_ON_COPY */ - optlen = LWIP_TCP_OPT_LENGTH(optflags); - 800aa4e: 7bfb ldrb r3, [r7, #15] - 800aa50: 009b lsls r3, r3, #2 - 800aa52: b2db uxtb r3, r3 - 800aa54: f003 0304 and.w r3, r3, #4 - 800aa58: 73bb strb r3, [r7, #14] - remainder = useg->len - split; - 800aa5a: 697b ldr r3, [r7, #20] - 800aa5c: 891a ldrh r2, [r3, #8] - 800aa5e: 887b ldrh r3, [r7, #2] - 800aa60: 1ad3 subs r3, r2, r3 - 800aa62: 81bb strh r3, [r7, #12] - - /* Create new pbuf for the remainder of the split */ - p = pbuf_alloc(PBUF_TRANSPORT, remainder + optlen, PBUF_RAM); - 800aa64: 7bbb ldrb r3, [r7, #14] - 800aa66: b29a uxth r2, r3 - 800aa68: 89bb ldrh r3, [r7, #12] - 800aa6a: 4413 add r3, r2 - 800aa6c: b29b uxth r3, r3 - 800aa6e: f44f 7220 mov.w r2, #640 ; 0x280 - 800aa72: 4619 mov r1, r3 - 800aa74: 2036 movs r0, #54 ; 0x36 - 800aa76: f7fb fabb bl 8005ff0 - 800aa7a: 6138 str r0, [r7, #16] - if (p == NULL) { - 800aa7c: 693b ldr r3, [r7, #16] - 800aa7e: 2b00 cmp r3, #0 - 800aa80: f000 80b7 beq.w 800abf2 - ("tcp_split_unsent_seg: could not allocate memory for pbuf remainder %u\n", remainder)); - goto memerr; - } - - /* Offset into the original pbuf is past TCP/IP headers, options, and split amount */ - offset = useg->p->tot_len - useg->len + split; - 800aa84: 697b ldr r3, [r7, #20] - 800aa86: 685b ldr r3, [r3, #4] - 800aa88: 891a ldrh r2, [r3, #8] - 800aa8a: 697b ldr r3, [r7, #20] - 800aa8c: 891b ldrh r3, [r3, #8] - 800aa8e: 1ad3 subs r3, r2, r3 - 800aa90: b29a uxth r2, r3 - 800aa92: 887b ldrh r3, [r7, #2] - 800aa94: 4413 add r3, r2 - 800aa96: 817b strh r3, [r7, #10] - /* Copy remainder into new pbuf, headers and options will not be filled out */ - if (pbuf_copy_partial(useg->p, (u8_t *)p->payload + optlen, remainder, offset ) != remainder) { - 800aa98: 697b ldr r3, [r7, #20] - 800aa9a: 6858 ldr r0, [r3, #4] - 800aa9c: 693b ldr r3, [r7, #16] - 800aa9e: 685a ldr r2, [r3, #4] - 800aaa0: 7bbb ldrb r3, [r7, #14] - 800aaa2: 18d1 adds r1, r2, r3 - 800aaa4: 897b ldrh r3, [r7, #10] - 800aaa6: 89ba ldrh r2, [r7, #12] - 800aaa8: f7fb ff80 bl 80069ac - 800aaac: 4603 mov r3, r0 - 800aaae: 461a mov r2, r3 - 800aab0: 89bb ldrh r3, [r7, #12] - 800aab2: 4293 cmp r3, r2 - 800aab4: f040 809f bne.w 800abf6 -#endif /* TCP_CHECKSUM_ON_COPY */ - - /* Options are created when calling tcp_output() */ - - /* Migrate flags from original segment */ - split_flags = TCPH_FLAGS(useg->tcphdr); - 800aab8: 697b ldr r3, [r7, #20] - 800aaba: 68db ldr r3, [r3, #12] - 800aabc: 899b ldrh r3, [r3, #12] - 800aabe: b29b uxth r3, r3 - 800aac0: 4618 mov r0, r3 - 800aac2: f7fa fa0f bl 8004ee4 - 800aac6: 4603 mov r3, r0 - 800aac8: b2db uxtb r3, r3 - 800aaca: f003 033f and.w r3, r3, #63 ; 0x3f - 800aace: 76fb strb r3, [r7, #27] - remainder_flags = 0; /* ACK added in tcp_output() */ - 800aad0: 2300 movs r3, #0 - 800aad2: 76bb strb r3, [r7, #26] - - if (split_flags & TCP_PSH) { - 800aad4: 7efb ldrb r3, [r7, #27] - 800aad6: f003 0308 and.w r3, r3, #8 - 800aada: 2b00 cmp r3, #0 - 800aadc: d007 beq.n 800aaee - split_flags &= ~TCP_PSH; - 800aade: 7efb ldrb r3, [r7, #27] - 800aae0: f023 0308 bic.w r3, r3, #8 - 800aae4: 76fb strb r3, [r7, #27] - remainder_flags |= TCP_PSH; - 800aae6: 7ebb ldrb r3, [r7, #26] - 800aae8: f043 0308 orr.w r3, r3, #8 - 800aaec: 76bb strb r3, [r7, #26] - } - if (split_flags & TCP_FIN) { - 800aaee: 7efb ldrb r3, [r7, #27] - 800aaf0: f003 0301 and.w r3, r3, #1 - 800aaf4: 2b00 cmp r3, #0 - 800aaf6: d007 beq.n 800ab08 - split_flags &= ~TCP_FIN; - 800aaf8: 7efb ldrb r3, [r7, #27] - 800aafa: f023 0301 bic.w r3, r3, #1 - 800aafe: 76fb strb r3, [r7, #27] - remainder_flags |= TCP_FIN; - 800ab00: 7ebb ldrb r3, [r7, #26] - 800ab02: f043 0301 orr.w r3, r3, #1 - 800ab06: 76bb strb r3, [r7, #26] - } - /* SYN should be left on split, RST should not be present with data */ - - seg = tcp_create_segment(pcb, p, remainder_flags, lwip_ntohl(useg->tcphdr->seqno) + split, optflags); - 800ab08: 697b ldr r3, [r7, #20] - 800ab0a: 68db ldr r3, [r3, #12] - 800ab0c: 685b ldr r3, [r3, #4] - 800ab0e: 4618 mov r0, r3 - 800ab10: f7fa f9fd bl 8004f0e - 800ab14: 4602 mov r2, r0 - 800ab16: 887b ldrh r3, [r7, #2] - 800ab18: 18d1 adds r1, r2, r3 - 800ab1a: 7eba ldrb r2, [r7, #26] - 800ab1c: 7bfb ldrb r3, [r7, #15] - 800ab1e: 9300 str r3, [sp, #0] - 800ab20: 460b mov r3, r1 - 800ab22: 6939 ldr r1, [r7, #16] - 800ab24: 6878 ldr r0, [r7, #4] - 800ab26: f7ff fea7 bl 800a878 - 800ab2a: 61f8 str r0, [r7, #28] - if (seg == NULL) { - 800ab2c: 69fb ldr r3, [r7, #28] - 800ab2e: 2b00 cmp r3, #0 - 800ab30: d063 beq.n 800abfa - seg->chksum_swapped = chksum_swapped; - seg->flags |= TF_SEG_DATA_CHECKSUMMED; -#endif /* TCP_CHECKSUM_ON_COPY */ - - /* Remove this segment from the queue since trimming it may free pbufs */ - pcb->snd_queuelen -= pbuf_clen(useg->p); - 800ab32: 697b ldr r3, [r7, #20] - 800ab34: 685b ldr r3, [r3, #4] - 800ab36: 4618 mov r0, r3 - 800ab38: f7fb fdc6 bl 80066c8 - 800ab3c: 4603 mov r3, r0 - 800ab3e: 461a mov r2, r3 - 800ab40: 687b ldr r3, [r7, #4] - 800ab42: f8b3 3066 ldrh.w r3, [r3, #102] ; 0x66 - 800ab46: 1a9b subs r3, r3, r2 - 800ab48: b29a uxth r2, r3 - 800ab4a: 687b ldr r3, [r7, #4] - 800ab4c: f8a3 2066 strh.w r2, [r3, #102] ; 0x66 - - /* Trim the original pbuf into our split size. At this point our remainder segment must be setup - successfully because we are modifying the original segment */ - pbuf_realloc(useg->p, useg->p->tot_len - remainder); - 800ab50: 697b ldr r3, [r7, #20] - 800ab52: 6858 ldr r0, [r3, #4] - 800ab54: 697b ldr r3, [r7, #20] - 800ab56: 685b ldr r3, [r3, #4] - 800ab58: 891a ldrh r2, [r3, #8] - 800ab5a: 89bb ldrh r3, [r7, #12] - 800ab5c: 1ad3 subs r3, r2, r3 - 800ab5e: b29b uxth r3, r3 - 800ab60: 4619 mov r1, r3 - 800ab62: f7fb fba3 bl 80062ac - useg->len -= remainder; - 800ab66: 697b ldr r3, [r7, #20] - 800ab68: 891a ldrh r2, [r3, #8] - 800ab6a: 89bb ldrh r3, [r7, #12] - 800ab6c: 1ad3 subs r3, r2, r3 - 800ab6e: b29a uxth r2, r3 - 800ab70: 697b ldr r3, [r7, #20] - 800ab72: 811a strh r2, [r3, #8] - TCPH_SET_FLAG(useg->tcphdr, split_flags); - 800ab74: 697b ldr r3, [r7, #20] - 800ab76: 68db ldr r3, [r3, #12] - 800ab78: 899b ldrh r3, [r3, #12] - 800ab7a: b29c uxth r4, r3 - 800ab7c: 7efb ldrb r3, [r7, #27] - 800ab7e: b29b uxth r3, r3 - 800ab80: 4618 mov r0, r3 - 800ab82: f7fa f9af bl 8004ee4 - 800ab86: 4603 mov r3, r0 - 800ab88: 461a mov r2, r3 - 800ab8a: 697b ldr r3, [r7, #20] - 800ab8c: 68db ldr r3, [r3, #12] - 800ab8e: 4322 orrs r2, r4 - 800ab90: b292 uxth r2, r2 - 800ab92: 819a strh r2, [r3, #12] - /* By trimming, realloc may have actually shrunk the pbuf, so clear oversize_left */ - useg->oversize_left = 0; -#endif /* TCP_OVERSIZE_DBGCHECK */ - - /* Add back to the queue with new trimmed pbuf */ - pcb->snd_queuelen += pbuf_clen(useg->p); - 800ab94: 697b ldr r3, [r7, #20] - 800ab96: 685b ldr r3, [r3, #4] - 800ab98: 4618 mov r0, r3 - 800ab9a: f7fb fd95 bl 80066c8 - 800ab9e: 4603 mov r3, r0 - 800aba0: 461a mov r2, r3 - 800aba2: 687b ldr r3, [r7, #4] - 800aba4: f8b3 3066 ldrh.w r3, [r3, #102] ; 0x66 - 800aba8: 4413 add r3, r2 - 800abaa: b29a uxth r2, r3 - 800abac: 687b ldr r3, [r7, #4] - 800abae: f8a3 2066 strh.w r2, [r3, #102] ; 0x66 -#endif /* TCP_CHECKSUM_ON_COPY */ - - /* Update number of segments on the queues. Note that length now may - * exceed TCP_SND_QUEUELEN! We don't have to touch pcb->snd_buf - * because the total amount of data is constant when packet is split */ - pcb->snd_queuelen += pbuf_clen(seg->p); - 800abb2: 69fb ldr r3, [r7, #28] - 800abb4: 685b ldr r3, [r3, #4] - 800abb6: 4618 mov r0, r3 - 800abb8: f7fb fd86 bl 80066c8 - 800abbc: 4603 mov r3, r0 - 800abbe: 461a mov r2, r3 - 800abc0: 687b ldr r3, [r7, #4] - 800abc2: f8b3 3066 ldrh.w r3, [r3, #102] ; 0x66 - 800abc6: 4413 add r3, r2 - 800abc8: b29a uxth r2, r3 - 800abca: 687b ldr r3, [r7, #4] - 800abcc: f8a3 2066 strh.w r2, [r3, #102] ; 0x66 - - /* Finally insert remainder into queue after split (which stays head) */ - seg->next = useg->next; - 800abd0: 697b ldr r3, [r7, #20] - 800abd2: 681a ldr r2, [r3, #0] - 800abd4: 69fb ldr r3, [r7, #28] - 800abd6: 601a str r2, [r3, #0] - useg->next = seg; - 800abd8: 697b ldr r3, [r7, #20] - 800abda: 69fa ldr r2, [r7, #28] - 800abdc: 601a str r2, [r3, #0] - -#if TCP_OVERSIZE - /* If remainder is last segment on the unsent, ensure we clear the oversize amount - * because the remainder is always sized to the exact remaining amount */ - if (seg->next == NULL) { - 800abde: 69fb ldr r3, [r7, #28] - 800abe0: 681b ldr r3, [r3, #0] - 800abe2: 2b00 cmp r3, #0 - 800abe4: d103 bne.n 800abee - pcb->unsent_oversize = 0; - 800abe6: 687b ldr r3, [r7, #4] - 800abe8: 2200 movs r2, #0 - 800abea: f8a3 2068 strh.w r2, [r3, #104] ; 0x68 - } -#endif /* TCP_OVERSIZE */ - - return ERR_OK; - 800abee: 2300 movs r3, #0 - 800abf0: e016 b.n 800ac20 - goto memerr; - 800abf2: bf00 nop - 800abf4: e002 b.n 800abfc - goto memerr; - 800abf6: bf00 nop - 800abf8: e000 b.n 800abfc - goto memerr; - 800abfa: bf00 nop -memerr: - TCP_STATS_INC(tcp.memerr); - - LWIP_ASSERT("seg == NULL", seg == NULL); - 800abfc: 69fb ldr r3, [r7, #28] - 800abfe: 2b00 cmp r3, #0 - 800ac00: d006 beq.n 800ac10 - 800ac02: 4b09 ldr r3, [pc, #36] ; (800ac28 ) - 800ac04: f44f 7276 mov.w r2, #984 ; 0x3d8 - 800ac08: 490d ldr r1, [pc, #52] ; (800ac40 ) - 800ac0a: 4809 ldr r0, [pc, #36] ; (800ac30 ) - 800ac0c: f006 fa4c bl 80110a8 - if (p != NULL) { - 800ac10: 693b ldr r3, [r7, #16] - 800ac12: 2b00 cmp r3, #0 - 800ac14: d002 beq.n 800ac1c - pbuf_free(p); - 800ac16: 6938 ldr r0, [r7, #16] - 800ac18: f7fb fcce bl 80065b8 - } - - return ERR_MEM; - 800ac1c: f04f 33ff mov.w r3, #4294967295 -} - 800ac20: 4618 mov r0, r3 - 800ac22: 3724 adds r7, #36 ; 0x24 - 800ac24: 46bd mov sp, r7 - 800ac26: bd90 pop {r4, r7, pc} - 800ac28: 08017294 .word 0x08017294 - 800ac2c: 08017628 .word 0x08017628 - 800ac30: 080172e8 .word 0x080172e8 - 800ac34: 0801764c .word 0x0801764c - 800ac38: 08017670 .word 0x08017670 - 800ac3c: 08017680 .word 0x08017680 - 800ac40: 08017690 .word 0x08017690 - -0800ac44 : - * @param pcb the tcp_pcb over which to send a segment - * @return ERR_OK if sent, another err_t otherwise - */ -err_t -tcp_send_fin(struct tcp_pcb *pcb) -{ - 800ac44: b590 push {r4, r7, lr} - 800ac46: b085 sub sp, #20 - 800ac48: af00 add r7, sp, #0 - 800ac4a: 6078 str r0, [r7, #4] - LWIP_ASSERT("tcp_send_fin: invalid pcb", pcb != NULL); - 800ac4c: 687b ldr r3, [r7, #4] - 800ac4e: 2b00 cmp r3, #0 - 800ac50: d106 bne.n 800ac60 - 800ac52: 4b21 ldr r3, [pc, #132] ; (800acd8 ) - 800ac54: f240 32eb movw r2, #1003 ; 0x3eb - 800ac58: 4920 ldr r1, [pc, #128] ; (800acdc ) - 800ac5a: 4821 ldr r0, [pc, #132] ; (800ace0 ) - 800ac5c: f006 fa24 bl 80110a8 - - /* first, try to add the fin to the last unsent segment */ - if (pcb->unsent != NULL) { - 800ac60: 687b ldr r3, [r7, #4] - 800ac62: 6edb ldr r3, [r3, #108] ; 0x6c - 800ac64: 2b00 cmp r3, #0 - 800ac66: d02e beq.n 800acc6 - struct tcp_seg *last_unsent; - for (last_unsent = pcb->unsent; last_unsent->next != NULL; - 800ac68: 687b ldr r3, [r7, #4] - 800ac6a: 6edb ldr r3, [r3, #108] ; 0x6c - 800ac6c: 60fb str r3, [r7, #12] - 800ac6e: e002 b.n 800ac76 - last_unsent = last_unsent->next); - 800ac70: 68fb ldr r3, [r7, #12] - 800ac72: 681b ldr r3, [r3, #0] - 800ac74: 60fb str r3, [r7, #12] - for (last_unsent = pcb->unsent; last_unsent->next != NULL; - 800ac76: 68fb ldr r3, [r7, #12] - 800ac78: 681b ldr r3, [r3, #0] - 800ac7a: 2b00 cmp r3, #0 - 800ac7c: d1f8 bne.n 800ac70 - - if ((TCPH_FLAGS(last_unsent->tcphdr) & (TCP_SYN | TCP_FIN | TCP_RST)) == 0) { - 800ac7e: 68fb ldr r3, [r7, #12] - 800ac80: 68db ldr r3, [r3, #12] - 800ac82: 899b ldrh r3, [r3, #12] - 800ac84: b29b uxth r3, r3 - 800ac86: 4618 mov r0, r3 - 800ac88: f7fa f92c bl 8004ee4 - 800ac8c: 4603 mov r3, r0 - 800ac8e: b2db uxtb r3, r3 - 800ac90: f003 0307 and.w r3, r3, #7 - 800ac94: 2b00 cmp r3, #0 - 800ac96: d116 bne.n 800acc6 - /* no SYN/FIN/RST flag in the header, we can add the FIN flag */ - TCPH_SET_FLAG(last_unsent->tcphdr, TCP_FIN); - 800ac98: 68fb ldr r3, [r7, #12] - 800ac9a: 68db ldr r3, [r3, #12] - 800ac9c: 899b ldrh r3, [r3, #12] - 800ac9e: b29c uxth r4, r3 - 800aca0: 2001 movs r0, #1 - 800aca2: f7fa f91f bl 8004ee4 - 800aca6: 4603 mov r3, r0 - 800aca8: 461a mov r2, r3 - 800acaa: 68fb ldr r3, [r7, #12] - 800acac: 68db ldr r3, [r3, #12] - 800acae: 4322 orrs r2, r4 - 800acb0: b292 uxth r2, r2 - 800acb2: 819a strh r2, [r3, #12] - tcp_set_flags(pcb, TF_FIN); - 800acb4: 687b ldr r3, [r7, #4] - 800acb6: 8b5b ldrh r3, [r3, #26] - 800acb8: f043 0320 orr.w r3, r3, #32 - 800acbc: b29a uxth r2, r3 - 800acbe: 687b ldr r3, [r7, #4] - 800acc0: 835a strh r2, [r3, #26] - return ERR_OK; - 800acc2: 2300 movs r3, #0 - 800acc4: e004 b.n 800acd0 - } - } - /* no data, no length, flags, copy=1, no optdata */ - return tcp_enqueue_flags(pcb, TCP_FIN); - 800acc6: 2101 movs r1, #1 - 800acc8: 6878 ldr r0, [r7, #4] - 800acca: f000 f80b bl 800ace4 - 800acce: 4603 mov r3, r0 -} - 800acd0: 4618 mov r0, r3 - 800acd2: 3714 adds r7, #20 - 800acd4: 46bd mov sp, r7 - 800acd6: bd90 pop {r4, r7, pc} - 800acd8: 08017294 .word 0x08017294 - 800acdc: 0801769c .word 0x0801769c - 800ace0: 080172e8 .word 0x080172e8 - -0800ace4 : - * @param pcb Protocol control block for the TCP connection. - * @param flags TCP header flags to set in the outgoing segment. - */ -err_t -tcp_enqueue_flags(struct tcp_pcb *pcb, u8_t flags) -{ - 800ace4: b580 push {r7, lr} - 800ace6: b08a sub sp, #40 ; 0x28 - 800ace8: af02 add r7, sp, #8 - 800acea: 6078 str r0, [r7, #4] - 800acec: 460b mov r3, r1 - 800acee: 70fb strb r3, [r7, #3] - struct pbuf *p; - struct tcp_seg *seg; - u8_t optflags = 0; - 800acf0: 2300 movs r3, #0 - 800acf2: 77fb strb r3, [r7, #31] - u8_t optlen = 0; - 800acf4: 2300 movs r3, #0 - 800acf6: 75fb strb r3, [r7, #23] - - LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_enqueue_flags: queuelen: %"U16_F"\n", (u16_t)pcb->snd_queuelen)); - - LWIP_ASSERT("tcp_enqueue_flags: need either TCP_SYN or TCP_FIN in flags (programmer violates API)", - 800acf8: 78fb ldrb r3, [r7, #3] - 800acfa: f003 0303 and.w r3, r3, #3 - 800acfe: 2b00 cmp r3, #0 - 800ad00: d106 bne.n 800ad10 - 800ad02: 4b67 ldr r3, [pc, #412] ; (800aea0 ) - 800ad04: f240 4211 movw r2, #1041 ; 0x411 - 800ad08: 4966 ldr r1, [pc, #408] ; (800aea4 ) - 800ad0a: 4867 ldr r0, [pc, #412] ; (800aea8 ) - 800ad0c: f006 f9cc bl 80110a8 - (flags & (TCP_SYN | TCP_FIN)) != 0); - LWIP_ASSERT("tcp_enqueue_flags: invalid pcb", pcb != NULL); - 800ad10: 687b ldr r3, [r7, #4] - 800ad12: 2b00 cmp r3, #0 - 800ad14: d106 bne.n 800ad24 - 800ad16: 4b62 ldr r3, [pc, #392] ; (800aea0 ) - 800ad18: f240 4213 movw r2, #1043 ; 0x413 - 800ad1c: 4963 ldr r1, [pc, #396] ; (800aeac ) - 800ad1e: 4862 ldr r0, [pc, #392] ; (800aea8 ) - 800ad20: f006 f9c2 bl 80110a8 - - /* No need to check pcb->snd_queuelen if only SYN or FIN are allowed! */ - - /* Get options for this segment. This is a special case since this is the - only place where a SYN can be sent. */ - if (flags & TCP_SYN) { - 800ad24: 78fb ldrb r3, [r7, #3] - 800ad26: f003 0302 and.w r3, r3, #2 - 800ad2a: 2b00 cmp r3, #0 - 800ad2c: d001 beq.n 800ad32 - optflags = TF_SEG_OPTS_MSS; - 800ad2e: 2301 movs r3, #1 - 800ad30: 77fb strb r3, [r7, #31] - /* Make sure the timestamp option is only included in data segments if we - agreed about it with the remote host (and in active open SYN segments). */ - optflags |= TF_SEG_OPTS_TS; - } -#endif /* LWIP_TCP_TIMESTAMPS */ - optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(optflags, pcb); - 800ad32: 7ffb ldrb r3, [r7, #31] - 800ad34: 009b lsls r3, r3, #2 - 800ad36: b2db uxtb r3, r3 - 800ad38: f003 0304 and.w r3, r3, #4 - 800ad3c: 75fb strb r3, [r7, #23] - - /* Allocate pbuf with room for TCP header + options */ - if ((p = pbuf_alloc(PBUF_TRANSPORT, optlen, PBUF_RAM)) == NULL) { - 800ad3e: 7dfb ldrb r3, [r7, #23] - 800ad40: b29b uxth r3, r3 - 800ad42: f44f 7220 mov.w r2, #640 ; 0x280 - 800ad46: 4619 mov r1, r3 - 800ad48: 2036 movs r0, #54 ; 0x36 - 800ad4a: f7fb f951 bl 8005ff0 - 800ad4e: 6138 str r0, [r7, #16] - 800ad50: 693b ldr r3, [r7, #16] - 800ad52: 2b00 cmp r3, #0 - 800ad54: d109 bne.n 800ad6a - tcp_set_flags(pcb, TF_NAGLEMEMERR); - 800ad56: 687b ldr r3, [r7, #4] - 800ad58: 8b5b ldrh r3, [r3, #26] - 800ad5a: f043 0380 orr.w r3, r3, #128 ; 0x80 - 800ad5e: b29a uxth r2, r3 - 800ad60: 687b ldr r3, [r7, #4] - 800ad62: 835a strh r2, [r3, #26] - TCP_STATS_INC(tcp.memerr); - return ERR_MEM; - 800ad64: f04f 33ff mov.w r3, #4294967295 - 800ad68: e095 b.n 800ae96 - } - LWIP_ASSERT("tcp_enqueue_flags: check that first pbuf can hold optlen", - 800ad6a: 693b ldr r3, [r7, #16] - 800ad6c: 895a ldrh r2, [r3, #10] - 800ad6e: 7dfb ldrb r3, [r7, #23] - 800ad70: b29b uxth r3, r3 - 800ad72: 429a cmp r2, r3 - 800ad74: d206 bcs.n 800ad84 - 800ad76: 4b4a ldr r3, [pc, #296] ; (800aea0 ) - 800ad78: f240 4239 movw r2, #1081 ; 0x439 - 800ad7c: 494c ldr r1, [pc, #304] ; (800aeb0 ) - 800ad7e: 484a ldr r0, [pc, #296] ; (800aea8 ) - 800ad80: f006 f992 bl 80110a8 - (p->len >= optlen)); - - /* Allocate memory for tcp_seg, and fill in fields. */ - if ((seg = tcp_create_segment(pcb, p, flags, pcb->snd_lbb, optflags)) == NULL) { - 800ad84: 687b ldr r3, [r7, #4] - 800ad86: 6dd9 ldr r1, [r3, #92] ; 0x5c - 800ad88: 78fa ldrb r2, [r7, #3] - 800ad8a: 7ffb ldrb r3, [r7, #31] - 800ad8c: 9300 str r3, [sp, #0] - 800ad8e: 460b mov r3, r1 - 800ad90: 6939 ldr r1, [r7, #16] - 800ad92: 6878 ldr r0, [r7, #4] - 800ad94: f7ff fd70 bl 800a878 - 800ad98: 60f8 str r0, [r7, #12] - 800ad9a: 68fb ldr r3, [r7, #12] - 800ad9c: 2b00 cmp r3, #0 - 800ad9e: d109 bne.n 800adb4 - tcp_set_flags(pcb, TF_NAGLEMEMERR); - 800ada0: 687b ldr r3, [r7, #4] - 800ada2: 8b5b ldrh r3, [r3, #26] - 800ada4: f043 0380 orr.w r3, r3, #128 ; 0x80 - 800ada8: b29a uxth r2, r3 - 800adaa: 687b ldr r3, [r7, #4] - 800adac: 835a strh r2, [r3, #26] - TCP_STATS_INC(tcp.memerr); - return ERR_MEM; - 800adae: f04f 33ff mov.w r3, #4294967295 - 800adb2: e070 b.n 800ae96 - } - LWIP_ASSERT("seg->tcphdr not aligned", ((mem_ptr_t)seg->tcphdr % LWIP_MIN(MEM_ALIGNMENT, 4)) == 0); - 800adb4: 68fb ldr r3, [r7, #12] - 800adb6: 68db ldr r3, [r3, #12] - 800adb8: f003 0303 and.w r3, r3, #3 - 800adbc: 2b00 cmp r3, #0 - 800adbe: d006 beq.n 800adce - 800adc0: 4b37 ldr r3, [pc, #220] ; (800aea0 ) - 800adc2: f240 4242 movw r2, #1090 ; 0x442 - 800adc6: 493b ldr r1, [pc, #236] ; (800aeb4 ) - 800adc8: 4837 ldr r0, [pc, #220] ; (800aea8 ) - 800adca: f006 f96d bl 80110a8 - LWIP_ASSERT("tcp_enqueue_flags: invalid segment length", seg->len == 0); - 800adce: 68fb ldr r3, [r7, #12] - 800add0: 891b ldrh r3, [r3, #8] - 800add2: 2b00 cmp r3, #0 - 800add4: d006 beq.n 800ade4 - 800add6: 4b32 ldr r3, [pc, #200] ; (800aea0 ) - 800add8: f240 4243 movw r2, #1091 ; 0x443 - 800addc: 4936 ldr r1, [pc, #216] ; (800aeb8 ) - 800adde: 4832 ldr r0, [pc, #200] ; (800aea8 ) - 800ade0: f006 f962 bl 80110a8 - lwip_ntohl(seg->tcphdr->seqno), - lwip_ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg), - (u16_t)flags)); - - /* Now append seg to pcb->unsent queue */ - if (pcb->unsent == NULL) { - 800ade4: 687b ldr r3, [r7, #4] - 800ade6: 6edb ldr r3, [r3, #108] ; 0x6c - 800ade8: 2b00 cmp r3, #0 - 800adea: d103 bne.n 800adf4 - pcb->unsent = seg; - 800adec: 687b ldr r3, [r7, #4] - 800adee: 68fa ldr r2, [r7, #12] - 800adf0: 66da str r2, [r3, #108] ; 0x6c - 800adf2: e00d b.n 800ae10 - } else { - struct tcp_seg *useg; - for (useg = pcb->unsent; useg->next != NULL; useg = useg->next); - 800adf4: 687b ldr r3, [r7, #4] - 800adf6: 6edb ldr r3, [r3, #108] ; 0x6c - 800adf8: 61bb str r3, [r7, #24] - 800adfa: e002 b.n 800ae02 - 800adfc: 69bb ldr r3, [r7, #24] - 800adfe: 681b ldr r3, [r3, #0] - 800ae00: 61bb str r3, [r7, #24] - 800ae02: 69bb ldr r3, [r7, #24] - 800ae04: 681b ldr r3, [r3, #0] - 800ae06: 2b00 cmp r3, #0 - 800ae08: d1f8 bne.n 800adfc - useg->next = seg; - 800ae0a: 69bb ldr r3, [r7, #24] - 800ae0c: 68fa ldr r2, [r7, #12] - 800ae0e: 601a str r2, [r3, #0] - } -#if TCP_OVERSIZE - /* The new unsent tail has no space */ - pcb->unsent_oversize = 0; - 800ae10: 687b ldr r3, [r7, #4] - 800ae12: 2200 movs r2, #0 - 800ae14: f8a3 2068 strh.w r2, [r3, #104] ; 0x68 -#endif /* TCP_OVERSIZE */ - - /* SYN and FIN bump the sequence number */ - if ((flags & TCP_SYN) || (flags & TCP_FIN)) { - 800ae18: 78fb ldrb r3, [r7, #3] - 800ae1a: f003 0302 and.w r3, r3, #2 - 800ae1e: 2b00 cmp r3, #0 - 800ae20: d104 bne.n 800ae2c - 800ae22: 78fb ldrb r3, [r7, #3] - 800ae24: f003 0301 and.w r3, r3, #1 - 800ae28: 2b00 cmp r3, #0 - 800ae2a: d004 beq.n 800ae36 - pcb->snd_lbb++; - 800ae2c: 687b ldr r3, [r7, #4] - 800ae2e: 6ddb ldr r3, [r3, #92] ; 0x5c - 800ae30: 1c5a adds r2, r3, #1 - 800ae32: 687b ldr r3, [r7, #4] - 800ae34: 65da str r2, [r3, #92] ; 0x5c - /* optlen does not influence snd_buf */ - } - if (flags & TCP_FIN) { - 800ae36: 78fb ldrb r3, [r7, #3] - 800ae38: f003 0301 and.w r3, r3, #1 - 800ae3c: 2b00 cmp r3, #0 - 800ae3e: d006 beq.n 800ae4e - tcp_set_flags(pcb, TF_FIN); - 800ae40: 687b ldr r3, [r7, #4] - 800ae42: 8b5b ldrh r3, [r3, #26] - 800ae44: f043 0320 orr.w r3, r3, #32 - 800ae48: b29a uxth r2, r3 - 800ae4a: 687b ldr r3, [r7, #4] - 800ae4c: 835a strh r2, [r3, #26] - } - - /* update number of segments on the queues */ - pcb->snd_queuelen += pbuf_clen(seg->p); - 800ae4e: 68fb ldr r3, [r7, #12] - 800ae50: 685b ldr r3, [r3, #4] - 800ae52: 4618 mov r0, r3 - 800ae54: f7fb fc38 bl 80066c8 - 800ae58: 4603 mov r3, r0 - 800ae5a: 461a mov r2, r3 - 800ae5c: 687b ldr r3, [r7, #4] - 800ae5e: f8b3 3066 ldrh.w r3, [r3, #102] ; 0x66 - 800ae62: 4413 add r3, r2 - 800ae64: b29a uxth r2, r3 - 800ae66: 687b ldr r3, [r7, #4] - 800ae68: f8a3 2066 strh.w r2, [r3, #102] ; 0x66 - LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_enqueue_flags: %"S16_F" (after enqueued)\n", pcb->snd_queuelen)); - if (pcb->snd_queuelen != 0) { - 800ae6c: 687b ldr r3, [r7, #4] - 800ae6e: f8b3 3066 ldrh.w r3, [r3, #102] ; 0x66 - 800ae72: 2b00 cmp r3, #0 - 800ae74: d00e beq.n 800ae94 - LWIP_ASSERT("tcp_enqueue_flags: invalid queue length", - 800ae76: 687b ldr r3, [r7, #4] - 800ae78: 6f1b ldr r3, [r3, #112] ; 0x70 - 800ae7a: 2b00 cmp r3, #0 - 800ae7c: d10a bne.n 800ae94 - 800ae7e: 687b ldr r3, [r7, #4] - 800ae80: 6edb ldr r3, [r3, #108] ; 0x6c - 800ae82: 2b00 cmp r3, #0 - 800ae84: d106 bne.n 800ae94 - 800ae86: 4b06 ldr r3, [pc, #24] ; (800aea0 ) - 800ae88: f240 4265 movw r2, #1125 ; 0x465 - 800ae8c: 490b ldr r1, [pc, #44] ; (800aebc ) - 800ae8e: 4806 ldr r0, [pc, #24] ; (800aea8 ) - 800ae90: f006 f90a bl 80110a8 - pcb->unacked != NULL || pcb->unsent != NULL); - } - - return ERR_OK; - 800ae94: 2300 movs r3, #0 -} - 800ae96: 4618 mov r0, r3 - 800ae98: 3720 adds r7, #32 - 800ae9a: 46bd mov sp, r7 - 800ae9c: bd80 pop {r7, pc} - 800ae9e: bf00 nop - 800aea0: 08017294 .word 0x08017294 - 800aea4: 080176b8 .word 0x080176b8 - 800aea8: 080172e8 .word 0x080172e8 - 800aeac: 08017710 .word 0x08017710 - 800aeb0: 08017730 .word 0x08017730 - 800aeb4: 0801776c .word 0x0801776c - 800aeb8: 08017784 .word 0x08017784 - 800aebc: 080177b0 .word 0x080177b0 - -0800aec0 : - * @return ERR_OK if data has been sent or nothing to send - * another err_t on error - */ -err_t -tcp_output(struct tcp_pcb *pcb) -{ - 800aec0: b5b0 push {r4, r5, r7, lr} - 800aec2: b08a sub sp, #40 ; 0x28 - 800aec4: af00 add r7, sp, #0 - 800aec6: 6078 str r0, [r7, #4] - s16_t i = 0; -#endif /* TCP_CWND_DEBUG */ - - LWIP_ASSERT_CORE_LOCKED(); - - LWIP_ASSERT("tcp_output: invalid pcb", pcb != NULL); - 800aec8: 687b ldr r3, [r7, #4] - 800aeca: 2b00 cmp r3, #0 - 800aecc: d106 bne.n 800aedc - 800aece: 4b8a ldr r3, [pc, #552] ; (800b0f8 ) - 800aed0: f240 42e1 movw r2, #1249 ; 0x4e1 - 800aed4: 4989 ldr r1, [pc, #548] ; (800b0fc ) - 800aed6: 488a ldr r0, [pc, #552] ; (800b100 ) - 800aed8: f006 f8e6 bl 80110a8 - /* pcb->state LISTEN not allowed here */ - LWIP_ASSERT("don't call tcp_output for listen-pcbs", - 800aedc: 687b ldr r3, [r7, #4] - 800aede: 7d1b ldrb r3, [r3, #20] - 800aee0: 2b01 cmp r3, #1 - 800aee2: d106 bne.n 800aef2 - 800aee4: 4b84 ldr r3, [pc, #528] ; (800b0f8 ) - 800aee6: f240 42e3 movw r2, #1251 ; 0x4e3 - 800aeea: 4986 ldr r1, [pc, #536] ; (800b104 ) - 800aeec: 4884 ldr r0, [pc, #528] ; (800b100 ) - 800aeee: f006 f8db bl 80110a8 - - /* First, check if we are invoked by the TCP input processing - code. If so, we do not output anything. Instead, we rely on the - input processing code to call us when input processing is done - with. */ - if (tcp_input_pcb == pcb) { - 800aef2: 4b85 ldr r3, [pc, #532] ; (800b108 ) - 800aef4: 681b ldr r3, [r3, #0] - 800aef6: 687a ldr r2, [r7, #4] - 800aef8: 429a cmp r2, r3 - 800aefa: d101 bne.n 800af00 - return ERR_OK; - 800aefc: 2300 movs r3, #0 - 800aefe: e1ce b.n 800b29e - } - - wnd = LWIP_MIN(pcb->snd_wnd, pcb->cwnd); - 800af00: 687b ldr r3, [r7, #4] - 800af02: f8b3 2048 ldrh.w r2, [r3, #72] ; 0x48 - 800af06: 687b ldr r3, [r7, #4] - 800af08: f8b3 3060 ldrh.w r3, [r3, #96] ; 0x60 - 800af0c: 4293 cmp r3, r2 - 800af0e: bf28 it cs - 800af10: 4613 movcs r3, r2 - 800af12: b29b uxth r3, r3 - 800af14: 61bb str r3, [r7, #24] - - seg = pcb->unsent; - 800af16: 687b ldr r3, [r7, #4] - 800af18: 6edb ldr r3, [r3, #108] ; 0x6c - 800af1a: 627b str r3, [r7, #36] ; 0x24 - - if (seg == NULL) { - 800af1c: 6a7b ldr r3, [r7, #36] ; 0x24 - 800af1e: 2b00 cmp r3, #0 - 800af20: d10b bne.n 800af3a - ", seg == NULL, ack %"U32_F"\n", - pcb->snd_wnd, pcb->cwnd, wnd, pcb->lastack)); - - /* If the TF_ACK_NOW flag is set and the ->unsent queue is empty, construct - * an empty ACK segment and send it. */ - if (pcb->flags & TF_ACK_NOW) { - 800af22: 687b ldr r3, [r7, #4] - 800af24: 8b5b ldrh r3, [r3, #26] - 800af26: f003 0302 and.w r3, r3, #2 - 800af2a: 2b00 cmp r3, #0 - 800af2c: f000 81aa beq.w 800b284 - return tcp_send_empty_ack(pcb); - 800af30: 6878 ldr r0, [r7, #4] - 800af32: f000 fdcb bl 800bacc - 800af36: 4603 mov r3, r0 - 800af38: e1b1 b.n 800b29e - pcb->snd_wnd, pcb->cwnd, wnd, - lwip_ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len, - lwip_ntohl(seg->tcphdr->seqno), pcb->lastack)); - } - - netif = tcp_route(pcb, &pcb->local_ip, &pcb->remote_ip); - 800af3a: 6879 ldr r1, [r7, #4] - 800af3c: 687b ldr r3, [r7, #4] - 800af3e: 3304 adds r3, #4 - 800af40: 461a mov r2, r3 - 800af42: 6878 ldr r0, [r7, #4] - 800af44: f7ff fc7c bl 800a840 - 800af48: 6178 str r0, [r7, #20] - if (netif == NULL) { - 800af4a: 697b ldr r3, [r7, #20] - 800af4c: 2b00 cmp r3, #0 - 800af4e: d102 bne.n 800af56 - return ERR_RTE; - 800af50: f06f 0303 mvn.w r3, #3 - 800af54: e1a3 b.n 800b29e - } - - /* If we don't have a local IP address, we get one from netif */ - if (ip_addr_isany(&pcb->local_ip)) { - 800af56: 687b ldr r3, [r7, #4] - 800af58: 2b00 cmp r3, #0 - 800af5a: d003 beq.n 800af64 - 800af5c: 687b ldr r3, [r7, #4] - 800af5e: 681b ldr r3, [r3, #0] - 800af60: 2b00 cmp r3, #0 - 800af62: d111 bne.n 800af88 - const ip_addr_t *local_ip = ip_netif_get_local_ip(netif, &pcb->remote_ip); - 800af64: 697b ldr r3, [r7, #20] - 800af66: 2b00 cmp r3, #0 - 800af68: d002 beq.n 800af70 - 800af6a: 697b ldr r3, [r7, #20] - 800af6c: 3304 adds r3, #4 - 800af6e: e000 b.n 800af72 - 800af70: 2300 movs r3, #0 - 800af72: 613b str r3, [r7, #16] - if (local_ip == NULL) { - 800af74: 693b ldr r3, [r7, #16] - 800af76: 2b00 cmp r3, #0 - 800af78: d102 bne.n 800af80 - return ERR_RTE; - 800af7a: f06f 0303 mvn.w r3, #3 - 800af7e: e18e b.n 800b29e - } - ip_addr_copy(pcb->local_ip, *local_ip); - 800af80: 693b ldr r3, [r7, #16] - 800af82: 681a ldr r2, [r3, #0] - 800af84: 687b ldr r3, [r7, #4] - 800af86: 601a str r2, [r3, #0] - } - - /* Handle the current segment not fitting within the window */ - if (lwip_ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > wnd) { - 800af88: 6a7b ldr r3, [r7, #36] ; 0x24 - 800af8a: 68db ldr r3, [r3, #12] - 800af8c: 685b ldr r3, [r3, #4] - 800af8e: 4618 mov r0, r3 - 800af90: f7f9 ffbd bl 8004f0e - 800af94: 4602 mov r2, r0 - 800af96: 687b ldr r3, [r7, #4] - 800af98: 6c5b ldr r3, [r3, #68] ; 0x44 - 800af9a: 1ad3 subs r3, r2, r3 - 800af9c: 6a7a ldr r2, [r7, #36] ; 0x24 - 800af9e: 8912 ldrh r2, [r2, #8] - 800afa0: 4413 add r3, r2 - 800afa2: 69ba ldr r2, [r7, #24] - 800afa4: 429a cmp r2, r3 - 800afa6: d227 bcs.n 800aff8 - * within the remaining (could be 0) send window and RTO timer is not running (we - * have no in-flight data). If window is still too small after persist timer fires, - * then we split the segment. We don't consider the congestion window since a cwnd - * smaller than 1 SMSS implies in-flight data - */ - if (wnd == pcb->snd_wnd && pcb->unacked == NULL && pcb->persist_backoff == 0) { - 800afa8: 687b ldr r3, [r7, #4] - 800afaa: f8b3 3060 ldrh.w r3, [r3, #96] ; 0x60 - 800afae: 461a mov r2, r3 - 800afb0: 69bb ldr r3, [r7, #24] - 800afb2: 4293 cmp r3, r2 - 800afb4: d114 bne.n 800afe0 - 800afb6: 687b ldr r3, [r7, #4] - 800afb8: 6f1b ldr r3, [r3, #112] ; 0x70 - 800afba: 2b00 cmp r3, #0 - 800afbc: d110 bne.n 800afe0 - 800afbe: 687b ldr r3, [r7, #4] - 800afc0: f893 3099 ldrb.w r3, [r3, #153] ; 0x99 - 800afc4: 2b00 cmp r3, #0 - 800afc6: d10b bne.n 800afe0 - pcb->persist_cnt = 0; - 800afc8: 687b ldr r3, [r7, #4] - 800afca: 2200 movs r2, #0 - 800afcc: f883 2098 strb.w r2, [r3, #152] ; 0x98 - pcb->persist_backoff = 1; - 800afd0: 687b ldr r3, [r7, #4] - 800afd2: 2201 movs r2, #1 - 800afd4: f883 2099 strb.w r2, [r3, #153] ; 0x99 - pcb->persist_probe = 0; - 800afd8: 687b ldr r3, [r7, #4] - 800afda: 2200 movs r2, #0 - 800afdc: f883 209a strb.w r2, [r3, #154] ; 0x9a - } - /* We need an ACK, but can't send data now, so send an empty ACK */ - if (pcb->flags & TF_ACK_NOW) { - 800afe0: 687b ldr r3, [r7, #4] - 800afe2: 8b5b ldrh r3, [r3, #26] - 800afe4: f003 0302 and.w r3, r3, #2 - 800afe8: 2b00 cmp r3, #0 - 800afea: f000 814d beq.w 800b288 - return tcp_send_empty_ack(pcb); - 800afee: 6878 ldr r0, [r7, #4] - 800aff0: f000 fd6c bl 800bacc - 800aff4: 4603 mov r3, r0 - 800aff6: e152 b.n 800b29e - } - goto output_done; - } - /* Stop persist timer, above conditions are not active */ - pcb->persist_backoff = 0; - 800aff8: 687b ldr r3, [r7, #4] - 800affa: 2200 movs r2, #0 - 800affc: f883 2099 strb.w r2, [r3, #153] ; 0x99 - - /* useg should point to last segment on unacked queue */ - useg = pcb->unacked; - 800b000: 687b ldr r3, [r7, #4] - 800b002: 6f1b ldr r3, [r3, #112] ; 0x70 - 800b004: 623b str r3, [r7, #32] - if (useg != NULL) { - 800b006: 6a3b ldr r3, [r7, #32] - 800b008: 2b00 cmp r3, #0 - 800b00a: f000 811c beq.w 800b246 - for (; useg->next != NULL; useg = useg->next); - 800b00e: e002 b.n 800b016 - 800b010: 6a3b ldr r3, [r7, #32] - 800b012: 681b ldr r3, [r3, #0] - 800b014: 623b str r3, [r7, #32] - 800b016: 6a3b ldr r3, [r7, #32] - 800b018: 681b ldr r3, [r3, #0] - 800b01a: 2b00 cmp r3, #0 - 800b01c: d1f8 bne.n 800b010 - } - /* data available and window allows it to be sent? */ - while (seg != NULL && - 800b01e: e112 b.n 800b246 - lwip_ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len <= wnd) { - LWIP_ASSERT("RST not expected here!", - 800b020: 6a7b ldr r3, [r7, #36] ; 0x24 - 800b022: 68db ldr r3, [r3, #12] - 800b024: 899b ldrh r3, [r3, #12] - 800b026: b29b uxth r3, r3 - 800b028: 4618 mov r0, r3 - 800b02a: f7f9 ff5b bl 8004ee4 - 800b02e: 4603 mov r3, r0 - 800b030: b2db uxtb r3, r3 - 800b032: f003 0304 and.w r3, r3, #4 - 800b036: 2b00 cmp r3, #0 - 800b038: d006 beq.n 800b048 - 800b03a: 4b2f ldr r3, [pc, #188] ; (800b0f8 ) - 800b03c: f240 5236 movw r2, #1334 ; 0x536 - 800b040: 4932 ldr r1, [pc, #200] ; (800b10c ) - 800b042: 482f ldr r0, [pc, #188] ; (800b100 ) - 800b044: f006 f830 bl 80110a8 - * - if tcp_write had a memory error before (prevent delayed ACK timeout) or - * - if FIN was already enqueued for this PCB (SYN is always alone in a segment - - * either seg->next != NULL or pcb->unacked == NULL; - * RST is no sent using tcp_write/tcp_output. - */ - if ((tcp_do_output_nagle(pcb) == 0) && - 800b048: 687b ldr r3, [r7, #4] - 800b04a: 6f1b ldr r3, [r3, #112] ; 0x70 - 800b04c: 2b00 cmp r3, #0 - 800b04e: d01f beq.n 800b090 - 800b050: 687b ldr r3, [r7, #4] - 800b052: 8b5b ldrh r3, [r3, #26] - 800b054: f003 0344 and.w r3, r3, #68 ; 0x44 - 800b058: 2b00 cmp r3, #0 - 800b05a: d119 bne.n 800b090 - 800b05c: 687b ldr r3, [r7, #4] - 800b05e: 6edb ldr r3, [r3, #108] ; 0x6c - 800b060: 2b00 cmp r3, #0 - 800b062: d00b beq.n 800b07c - 800b064: 687b ldr r3, [r7, #4] - 800b066: 6edb ldr r3, [r3, #108] ; 0x6c - 800b068: 681b ldr r3, [r3, #0] - 800b06a: 2b00 cmp r3, #0 - 800b06c: d110 bne.n 800b090 - 800b06e: 687b ldr r3, [r7, #4] - 800b070: 6edb ldr r3, [r3, #108] ; 0x6c - 800b072: 891a ldrh r2, [r3, #8] - 800b074: 687b ldr r3, [r7, #4] - 800b076: 8e5b ldrh r3, [r3, #50] ; 0x32 - 800b078: 429a cmp r2, r3 - 800b07a: d209 bcs.n 800b090 - 800b07c: 687b ldr r3, [r7, #4] - 800b07e: f8b3 3064 ldrh.w r3, [r3, #100] ; 0x64 - 800b082: 2b00 cmp r3, #0 - 800b084: d004 beq.n 800b090 - 800b086: 687b ldr r3, [r7, #4] - 800b088: f8b3 3066 ldrh.w r3, [r3, #102] ; 0x66 - 800b08c: 2b08 cmp r3, #8 - 800b08e: d901 bls.n 800b094 - 800b090: 2301 movs r3, #1 - 800b092: e000 b.n 800b096 - 800b094: 2300 movs r3, #0 - 800b096: 2b00 cmp r3, #0 - 800b098: d106 bne.n 800b0a8 - ((pcb->flags & (TF_NAGLEMEMERR | TF_FIN)) == 0)) { - 800b09a: 687b ldr r3, [r7, #4] - 800b09c: 8b5b ldrh r3, [r3, #26] - 800b09e: f003 03a0 and.w r3, r3, #160 ; 0xa0 - if ((tcp_do_output_nagle(pcb) == 0) && - 800b0a2: 2b00 cmp r3, #0 - 800b0a4: f000 80e4 beq.w 800b270 - pcb->lastack, - lwip_ntohl(seg->tcphdr->seqno), pcb->lastack, i)); - ++i; -#endif /* TCP_CWND_DEBUG */ - - if (pcb->state != SYN_SENT) { - 800b0a8: 687b ldr r3, [r7, #4] - 800b0aa: 7d1b ldrb r3, [r3, #20] - 800b0ac: 2b02 cmp r3, #2 - 800b0ae: d00d beq.n 800b0cc - TCPH_SET_FLAG(seg->tcphdr, TCP_ACK); - 800b0b0: 6a7b ldr r3, [r7, #36] ; 0x24 - 800b0b2: 68db ldr r3, [r3, #12] - 800b0b4: 899b ldrh r3, [r3, #12] - 800b0b6: b29c uxth r4, r3 - 800b0b8: 2010 movs r0, #16 - 800b0ba: f7f9 ff13 bl 8004ee4 - 800b0be: 4603 mov r3, r0 - 800b0c0: 461a mov r2, r3 - 800b0c2: 6a7b ldr r3, [r7, #36] ; 0x24 - 800b0c4: 68db ldr r3, [r3, #12] - 800b0c6: 4322 orrs r2, r4 - 800b0c8: b292 uxth r2, r2 - 800b0ca: 819a strh r2, [r3, #12] - } - - err = tcp_output_segment(seg, pcb, netif); - 800b0cc: 697a ldr r2, [r7, #20] - 800b0ce: 6879 ldr r1, [r7, #4] - 800b0d0: 6a78 ldr r0, [r7, #36] ; 0x24 - 800b0d2: f000 f909 bl 800b2e8 - 800b0d6: 4603 mov r3, r0 - 800b0d8: 73fb strb r3, [r7, #15] - if (err != ERR_OK) { - 800b0da: f997 300f ldrsb.w r3, [r7, #15] - 800b0de: 2b00 cmp r3, #0 - 800b0e0: d016 beq.n 800b110 - /* segment could not be sent, for whatever reason */ - tcp_set_flags(pcb, TF_NAGLEMEMERR); - 800b0e2: 687b ldr r3, [r7, #4] - 800b0e4: 8b5b ldrh r3, [r3, #26] - 800b0e6: f043 0380 orr.w r3, r3, #128 ; 0x80 - 800b0ea: b29a uxth r2, r3 - 800b0ec: 687b ldr r3, [r7, #4] - 800b0ee: 835a strh r2, [r3, #26] - return err; - 800b0f0: f997 300f ldrsb.w r3, [r7, #15] - 800b0f4: e0d3 b.n 800b29e - 800b0f6: bf00 nop - 800b0f8: 08017294 .word 0x08017294 - 800b0fc: 080177d8 .word 0x080177d8 - 800b100: 080172e8 .word 0x080172e8 - 800b104: 080177f0 .word 0x080177f0 - 800b108: 20009a20 .word 0x20009a20 - 800b10c: 08017818 .word 0x08017818 - } -#if TCP_OVERSIZE_DBGCHECK - seg->oversize_left = 0; -#endif /* TCP_OVERSIZE_DBGCHECK */ - pcb->unsent = seg->next; - 800b110: 6a7b ldr r3, [r7, #36] ; 0x24 - 800b112: 681a ldr r2, [r3, #0] - 800b114: 687b ldr r3, [r7, #4] - 800b116: 66da str r2, [r3, #108] ; 0x6c - if (pcb->state != SYN_SENT) { - 800b118: 687b ldr r3, [r7, #4] - 800b11a: 7d1b ldrb r3, [r3, #20] - 800b11c: 2b02 cmp r3, #2 - 800b11e: d006 beq.n 800b12e - tcp_clear_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); - 800b120: 687b ldr r3, [r7, #4] - 800b122: 8b5b ldrh r3, [r3, #26] - 800b124: f023 0303 bic.w r3, r3, #3 - 800b128: b29a uxth r2, r3 - 800b12a: 687b ldr r3, [r7, #4] - 800b12c: 835a strh r2, [r3, #26] - } - snd_nxt = lwip_ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg); - 800b12e: 6a7b ldr r3, [r7, #36] ; 0x24 - 800b130: 68db ldr r3, [r3, #12] - 800b132: 685b ldr r3, [r3, #4] - 800b134: 4618 mov r0, r3 - 800b136: f7f9 feea bl 8004f0e - 800b13a: 4604 mov r4, r0 - 800b13c: 6a7b ldr r3, [r7, #36] ; 0x24 - 800b13e: 891b ldrh r3, [r3, #8] - 800b140: 461d mov r5, r3 - 800b142: 6a7b ldr r3, [r7, #36] ; 0x24 - 800b144: 68db ldr r3, [r3, #12] - 800b146: 899b ldrh r3, [r3, #12] - 800b148: b29b uxth r3, r3 - 800b14a: 4618 mov r0, r3 - 800b14c: f7f9 feca bl 8004ee4 - 800b150: 4603 mov r3, r0 - 800b152: b2db uxtb r3, r3 - 800b154: f003 0303 and.w r3, r3, #3 - 800b158: 2b00 cmp r3, #0 - 800b15a: d001 beq.n 800b160 - 800b15c: 2301 movs r3, #1 - 800b15e: e000 b.n 800b162 - 800b160: 2300 movs r3, #0 - 800b162: 442b add r3, r5 - 800b164: 4423 add r3, r4 - 800b166: 60bb str r3, [r7, #8] - if (TCP_SEQ_LT(pcb->snd_nxt, snd_nxt)) { - 800b168: 687b ldr r3, [r7, #4] - 800b16a: 6d1a ldr r2, [r3, #80] ; 0x50 - 800b16c: 68bb ldr r3, [r7, #8] - 800b16e: 1ad3 subs r3, r2, r3 - 800b170: 2b00 cmp r3, #0 - 800b172: da02 bge.n 800b17a - pcb->snd_nxt = snd_nxt; - 800b174: 687b ldr r3, [r7, #4] - 800b176: 68ba ldr r2, [r7, #8] - 800b178: 651a str r2, [r3, #80] ; 0x50 - } - /* put segment on unacknowledged list if length > 0 */ - if (TCP_TCPLEN(seg) > 0) { - 800b17a: 6a7b ldr r3, [r7, #36] ; 0x24 - 800b17c: 891b ldrh r3, [r3, #8] - 800b17e: 461c mov r4, r3 - 800b180: 6a7b ldr r3, [r7, #36] ; 0x24 - 800b182: 68db ldr r3, [r3, #12] - 800b184: 899b ldrh r3, [r3, #12] - 800b186: b29b uxth r3, r3 - 800b188: 4618 mov r0, r3 - 800b18a: f7f9 feab bl 8004ee4 - 800b18e: 4603 mov r3, r0 - 800b190: b2db uxtb r3, r3 - 800b192: f003 0303 and.w r3, r3, #3 - 800b196: 2b00 cmp r3, #0 - 800b198: d001 beq.n 800b19e - 800b19a: 2301 movs r3, #1 - 800b19c: e000 b.n 800b1a0 - 800b19e: 2300 movs r3, #0 - 800b1a0: 4423 add r3, r4 - 800b1a2: 2b00 cmp r3, #0 - 800b1a4: d049 beq.n 800b23a - seg->next = NULL; - 800b1a6: 6a7b ldr r3, [r7, #36] ; 0x24 - 800b1a8: 2200 movs r2, #0 - 800b1aa: 601a str r2, [r3, #0] - /* unacked list is empty? */ - if (pcb->unacked == NULL) { - 800b1ac: 687b ldr r3, [r7, #4] - 800b1ae: 6f1b ldr r3, [r3, #112] ; 0x70 - 800b1b0: 2b00 cmp r3, #0 - 800b1b2: d105 bne.n 800b1c0 - pcb->unacked = seg; - 800b1b4: 687b ldr r3, [r7, #4] - 800b1b6: 6a7a ldr r2, [r7, #36] ; 0x24 - 800b1b8: 671a str r2, [r3, #112] ; 0x70 - useg = seg; - 800b1ba: 6a7b ldr r3, [r7, #36] ; 0x24 - 800b1bc: 623b str r3, [r7, #32] - 800b1be: e03f b.n 800b240 - /* unacked list is not empty? */ - } else { - /* In the case of fast retransmit, the packet should not go to the tail - * of the unacked queue, but rather somewhere before it. We need to check for - * this case. -STJ Jul 27, 2004 */ - if (TCP_SEQ_LT(lwip_ntohl(seg->tcphdr->seqno), lwip_ntohl(useg->tcphdr->seqno))) { - 800b1c0: 6a7b ldr r3, [r7, #36] ; 0x24 - 800b1c2: 68db ldr r3, [r3, #12] - 800b1c4: 685b ldr r3, [r3, #4] - 800b1c6: 4618 mov r0, r3 - 800b1c8: f7f9 fea1 bl 8004f0e - 800b1cc: 4604 mov r4, r0 - 800b1ce: 6a3b ldr r3, [r7, #32] - 800b1d0: 68db ldr r3, [r3, #12] - 800b1d2: 685b ldr r3, [r3, #4] - 800b1d4: 4618 mov r0, r3 - 800b1d6: f7f9 fe9a bl 8004f0e - 800b1da: 4603 mov r3, r0 - 800b1dc: 1ae3 subs r3, r4, r3 - 800b1de: 2b00 cmp r3, #0 - 800b1e0: da24 bge.n 800b22c - /* add segment to before tail of unacked list, keeping the list sorted */ - struct tcp_seg **cur_seg = &(pcb->unacked); - 800b1e2: 687b ldr r3, [r7, #4] - 800b1e4: 3370 adds r3, #112 ; 0x70 - 800b1e6: 61fb str r3, [r7, #28] - while (*cur_seg && - 800b1e8: e002 b.n 800b1f0 - TCP_SEQ_LT(lwip_ntohl((*cur_seg)->tcphdr->seqno), lwip_ntohl(seg->tcphdr->seqno))) { - cur_seg = &((*cur_seg)->next ); - 800b1ea: 69fb ldr r3, [r7, #28] - 800b1ec: 681b ldr r3, [r3, #0] - 800b1ee: 61fb str r3, [r7, #28] - while (*cur_seg && - 800b1f0: 69fb ldr r3, [r7, #28] - 800b1f2: 681b ldr r3, [r3, #0] - 800b1f4: 2b00 cmp r3, #0 - 800b1f6: d011 beq.n 800b21c - TCP_SEQ_LT(lwip_ntohl((*cur_seg)->tcphdr->seqno), lwip_ntohl(seg->tcphdr->seqno))) { - 800b1f8: 69fb ldr r3, [r7, #28] - 800b1fa: 681b ldr r3, [r3, #0] - 800b1fc: 68db ldr r3, [r3, #12] - 800b1fe: 685b ldr r3, [r3, #4] - 800b200: 4618 mov r0, r3 - 800b202: f7f9 fe84 bl 8004f0e - 800b206: 4604 mov r4, r0 - 800b208: 6a7b ldr r3, [r7, #36] ; 0x24 - 800b20a: 68db ldr r3, [r3, #12] - 800b20c: 685b ldr r3, [r3, #4] - 800b20e: 4618 mov r0, r3 - 800b210: f7f9 fe7d bl 8004f0e - 800b214: 4603 mov r3, r0 - 800b216: 1ae3 subs r3, r4, r3 - while (*cur_seg && - 800b218: 2b00 cmp r3, #0 - 800b21a: dbe6 blt.n 800b1ea - } - seg->next = (*cur_seg); - 800b21c: 69fb ldr r3, [r7, #28] - 800b21e: 681a ldr r2, [r3, #0] - 800b220: 6a7b ldr r3, [r7, #36] ; 0x24 - 800b222: 601a str r2, [r3, #0] - (*cur_seg) = seg; - 800b224: 69fb ldr r3, [r7, #28] - 800b226: 6a7a ldr r2, [r7, #36] ; 0x24 - 800b228: 601a str r2, [r3, #0] - 800b22a: e009 b.n 800b240 - } else { - /* add segment to tail of unacked list */ - useg->next = seg; - 800b22c: 6a3b ldr r3, [r7, #32] - 800b22e: 6a7a ldr r2, [r7, #36] ; 0x24 - 800b230: 601a str r2, [r3, #0] - useg = useg->next; - 800b232: 6a3b ldr r3, [r7, #32] - 800b234: 681b ldr r3, [r3, #0] - 800b236: 623b str r3, [r7, #32] - 800b238: e002 b.n 800b240 - } - } - /* do not queue empty segments on the unacked list */ - } else { - tcp_seg_free(seg); - 800b23a: 6a78 ldr r0, [r7, #36] ; 0x24 - 800b23c: f7fc fc3f bl 8007abe - } - seg = pcb->unsent; - 800b240: 687b ldr r3, [r7, #4] - 800b242: 6edb ldr r3, [r3, #108] ; 0x6c - 800b244: 627b str r3, [r7, #36] ; 0x24 - while (seg != NULL && - 800b246: 6a7b ldr r3, [r7, #36] ; 0x24 - 800b248: 2b00 cmp r3, #0 - 800b24a: d012 beq.n 800b272 - lwip_ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len <= wnd) { - 800b24c: 6a7b ldr r3, [r7, #36] ; 0x24 - 800b24e: 68db ldr r3, [r3, #12] - 800b250: 685b ldr r3, [r3, #4] - 800b252: 4618 mov r0, r3 - 800b254: f7f9 fe5b bl 8004f0e - 800b258: 4602 mov r2, r0 - 800b25a: 687b ldr r3, [r7, #4] - 800b25c: 6c5b ldr r3, [r3, #68] ; 0x44 - 800b25e: 1ad3 subs r3, r2, r3 - 800b260: 6a7a ldr r2, [r7, #36] ; 0x24 - 800b262: 8912 ldrh r2, [r2, #8] - 800b264: 4413 add r3, r2 - while (seg != NULL && - 800b266: 69ba ldr r2, [r7, #24] - 800b268: 429a cmp r2, r3 - 800b26a: f4bf aed9 bcs.w 800b020 - 800b26e: e000 b.n 800b272 - break; - 800b270: bf00 nop - } -#if TCP_OVERSIZE - if (pcb->unsent == NULL) { - 800b272: 687b ldr r3, [r7, #4] - 800b274: 6edb ldr r3, [r3, #108] ; 0x6c - 800b276: 2b00 cmp r3, #0 - 800b278: d108 bne.n 800b28c - /* last unsent has been removed, reset unsent_oversize */ - pcb->unsent_oversize = 0; - 800b27a: 687b ldr r3, [r7, #4] - 800b27c: 2200 movs r2, #0 - 800b27e: f8a3 2068 strh.w r2, [r3, #104] ; 0x68 - 800b282: e004 b.n 800b28e - goto output_done; - 800b284: bf00 nop - 800b286: e002 b.n 800b28e - goto output_done; - 800b288: bf00 nop - 800b28a: e000 b.n 800b28e - } -#endif /* TCP_OVERSIZE */ - -output_done: - 800b28c: bf00 nop - tcp_clear_flags(pcb, TF_NAGLEMEMERR); - 800b28e: 687b ldr r3, [r7, #4] - 800b290: 8b5b ldrh r3, [r3, #26] - 800b292: f023 0380 bic.w r3, r3, #128 ; 0x80 - 800b296: b29a uxth r2, r3 - 800b298: 687b ldr r3, [r7, #4] - 800b29a: 835a strh r2, [r3, #26] - return ERR_OK; - 800b29c: 2300 movs r3, #0 -} - 800b29e: 4618 mov r0, r3 - 800b2a0: 3728 adds r7, #40 ; 0x28 - 800b2a2: 46bd mov sp, r7 - 800b2a4: bdb0 pop {r4, r5, r7, pc} - 800b2a6: bf00 nop - -0800b2a8 : - * @arg seg the tcp segment to check - * @return 1 if ref != 1, 0 if ref == 1 - */ -static int -tcp_output_segment_busy(const struct tcp_seg *seg) -{ - 800b2a8: b580 push {r7, lr} - 800b2aa: b082 sub sp, #8 - 800b2ac: af00 add r7, sp, #0 - 800b2ae: 6078 str r0, [r7, #4] - LWIP_ASSERT("tcp_output_segment_busy: invalid seg", seg != NULL); - 800b2b0: 687b ldr r3, [r7, #4] - 800b2b2: 2b00 cmp r3, #0 - 800b2b4: d106 bne.n 800b2c4 - 800b2b6: 4b09 ldr r3, [pc, #36] ; (800b2dc ) - 800b2b8: f240 529a movw r2, #1434 ; 0x59a - 800b2bc: 4908 ldr r1, [pc, #32] ; (800b2e0 ) - 800b2be: 4809 ldr r0, [pc, #36] ; (800b2e4 ) - 800b2c0: f005 fef2 bl 80110a8 - - /* We only need to check the first pbuf here: - If a pbuf is queued for transmission, a driver calls pbuf_ref(), - which only changes the ref count of the first pbuf */ - if (seg->p->ref != 1) { - 800b2c4: 687b ldr r3, [r7, #4] - 800b2c6: 685b ldr r3, [r3, #4] - 800b2c8: 7b9b ldrb r3, [r3, #14] - 800b2ca: 2b01 cmp r3, #1 - 800b2cc: d001 beq.n 800b2d2 - /* other reference found */ - return 1; - 800b2ce: 2301 movs r3, #1 - 800b2d0: e000 b.n 800b2d4 - } - /* no other references found */ - return 0; - 800b2d2: 2300 movs r3, #0 -} - 800b2d4: 4618 mov r0, r3 - 800b2d6: 3708 adds r7, #8 - 800b2d8: 46bd mov sp, r7 - 800b2da: bd80 pop {r7, pc} - 800b2dc: 08017294 .word 0x08017294 - 800b2e0: 08017830 .word 0x08017830 - 800b2e4: 080172e8 .word 0x080172e8 - -0800b2e8 : - * @param pcb the tcp_pcb for the TCP connection used to send the segment - * @param netif the netif used to send the segment - */ -static err_t -tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb, struct netif *netif) -{ - 800b2e8: b5b0 push {r4, r5, r7, lr} - 800b2ea: b08c sub sp, #48 ; 0x30 - 800b2ec: af04 add r7, sp, #16 - 800b2ee: 60f8 str r0, [r7, #12] - 800b2f0: 60b9 str r1, [r7, #8] - 800b2f2: 607a str r2, [r7, #4] - u32_t *opts; -#if TCP_CHECKSUM_ON_COPY - int seg_chksum_was_swapped = 0; -#endif - - LWIP_ASSERT("tcp_output_segment: invalid seg", seg != NULL); - 800b2f4: 68fb ldr r3, [r7, #12] - 800b2f6: 2b00 cmp r3, #0 - 800b2f8: d106 bne.n 800b308 - 800b2fa: 4b63 ldr r3, [pc, #396] ; (800b488 ) - 800b2fc: f44f 62b7 mov.w r2, #1464 ; 0x5b8 - 800b300: 4962 ldr r1, [pc, #392] ; (800b48c ) - 800b302: 4863 ldr r0, [pc, #396] ; (800b490 ) - 800b304: f005 fed0 bl 80110a8 - LWIP_ASSERT("tcp_output_segment: invalid pcb", pcb != NULL); - 800b308: 68bb ldr r3, [r7, #8] - 800b30a: 2b00 cmp r3, #0 - 800b30c: d106 bne.n 800b31c - 800b30e: 4b5e ldr r3, [pc, #376] ; (800b488 ) - 800b310: f240 52b9 movw r2, #1465 ; 0x5b9 - 800b314: 495f ldr r1, [pc, #380] ; (800b494 ) - 800b316: 485e ldr r0, [pc, #376] ; (800b490 ) - 800b318: f005 fec6 bl 80110a8 - LWIP_ASSERT("tcp_output_segment: invalid netif", netif != NULL); - 800b31c: 687b ldr r3, [r7, #4] - 800b31e: 2b00 cmp r3, #0 - 800b320: d106 bne.n 800b330 - 800b322: 4b59 ldr r3, [pc, #356] ; (800b488 ) - 800b324: f240 52ba movw r2, #1466 ; 0x5ba - 800b328: 495b ldr r1, [pc, #364] ; (800b498 ) - 800b32a: 4859 ldr r0, [pc, #356] ; (800b490 ) - 800b32c: f005 febc bl 80110a8 - - if (tcp_output_segment_busy(seg)) { - 800b330: 68f8 ldr r0, [r7, #12] - 800b332: f7ff ffb9 bl 800b2a8 - 800b336: 4603 mov r3, r0 - 800b338: 2b00 cmp r3, #0 - 800b33a: d001 beq.n 800b340 - /* This should not happen: rexmit functions should have checked this. - However, since this function modifies p->len, we must not continue in this case. */ - LWIP_DEBUGF(TCP_RTO_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("tcp_output_segment: segment busy\n")); - return ERR_OK; - 800b33c: 2300 movs r3, #0 - 800b33e: e09f b.n 800b480 - } - - /* The TCP header has already been constructed, but the ackno and - wnd fields remain. */ - seg->tcphdr->ackno = lwip_htonl(pcb->rcv_nxt); - 800b340: 68bb ldr r3, [r7, #8] - 800b342: 6a5a ldr r2, [r3, #36] ; 0x24 - 800b344: 68fb ldr r3, [r7, #12] - 800b346: 68dc ldr r4, [r3, #12] - 800b348: 4610 mov r0, r2 - 800b34a: f7f9 fde0 bl 8004f0e - 800b34e: 4603 mov r3, r0 - 800b350: 60a3 str r3, [r4, #8] - the window scale option) is never scaled. */ - seg->tcphdr->wnd = lwip_htons(TCPWND_MIN16(pcb->rcv_ann_wnd)); - } else -#endif /* LWIP_WND_SCALE */ - { - seg->tcphdr->wnd = lwip_htons(TCPWND_MIN16(RCV_WND_SCALE(pcb, pcb->rcv_ann_wnd))); - 800b352: 68bb ldr r3, [r7, #8] - 800b354: 8d5a ldrh r2, [r3, #42] ; 0x2a - 800b356: 68fb ldr r3, [r7, #12] - 800b358: 68dc ldr r4, [r3, #12] - 800b35a: 4610 mov r0, r2 - 800b35c: f7f9 fdc2 bl 8004ee4 - 800b360: 4603 mov r3, r0 - 800b362: 81e3 strh r3, [r4, #14] - } - - pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd; - 800b364: 68bb ldr r3, [r7, #8] - 800b366: 6a5b ldr r3, [r3, #36] ; 0x24 - 800b368: 68ba ldr r2, [r7, #8] - 800b36a: 8d52 ldrh r2, [r2, #42] ; 0x2a - 800b36c: 441a add r2, r3 - 800b36e: 68bb ldr r3, [r7, #8] - 800b370: 62da str r2, [r3, #44] ; 0x2c - - /* Add any requested options. NB MSS option is only set on SYN - packets, so ignore it here */ - /* cast through void* to get rid of alignment warnings */ - opts = (u32_t *)(void *)(seg->tcphdr + 1); - 800b372: 68fb ldr r3, [r7, #12] - 800b374: 68db ldr r3, [r3, #12] - 800b376: 3314 adds r3, #20 - 800b378: 61fb str r3, [r7, #28] - if (seg->flags & TF_SEG_OPTS_MSS) { - 800b37a: 68fb ldr r3, [r7, #12] - 800b37c: 7a9b ldrb r3, [r3, #10] - 800b37e: f003 0301 and.w r3, r3, #1 - 800b382: 2b00 cmp r3, #0 - 800b384: d015 beq.n 800b3b2 - u16_t mss; -#if TCP_CALCULATE_EFF_SEND_MSS - mss = tcp_eff_send_mss_netif(TCP_MSS, netif, &pcb->remote_ip); - 800b386: 68bb ldr r3, [r7, #8] - 800b388: 3304 adds r3, #4 - 800b38a: 461a mov r2, r3 - 800b38c: 6879 ldr r1, [r7, #4] - 800b38e: f44f 7006 mov.w r0, #536 ; 0x218 - 800b392: f7fc fe8b bl 80080ac - 800b396: 4603 mov r3, r0 - 800b398: 837b strh r3, [r7, #26] -#else /* TCP_CALCULATE_EFF_SEND_MSS */ - mss = TCP_MSS; -#endif /* TCP_CALCULATE_EFF_SEND_MSS */ - *opts = TCP_BUILD_MSS_OPTION(mss); - 800b39a: 8b7b ldrh r3, [r7, #26] - 800b39c: f043 7301 orr.w r3, r3, #33816576 ; 0x2040000 - 800b3a0: 4618 mov r0, r3 - 800b3a2: f7f9 fdb4 bl 8004f0e - 800b3a6: 4602 mov r2, r0 - 800b3a8: 69fb ldr r3, [r7, #28] - 800b3aa: 601a str r2, [r3, #0] - opts += 1; - 800b3ac: 69fb ldr r3, [r7, #28] - 800b3ae: 3304 adds r3, #4 - 800b3b0: 61fb str r3, [r7, #28] - } -#endif - - /* Set retransmission timer running if it is not currently enabled - This must be set before checking the route. */ - if (pcb->rtime < 0) { - 800b3b2: 68bb ldr r3, [r7, #8] - 800b3b4: f9b3 3030 ldrsh.w r3, [r3, #48] ; 0x30 - 800b3b8: 2b00 cmp r3, #0 - 800b3ba: da02 bge.n 800b3c2 - pcb->rtime = 0; - 800b3bc: 68bb ldr r3, [r7, #8] - 800b3be: 2200 movs r2, #0 - 800b3c0: 861a strh r2, [r3, #48] ; 0x30 - } - - if (pcb->rttest == 0) { - 800b3c2: 68bb ldr r3, [r7, #8] - 800b3c4: 6b5b ldr r3, [r3, #52] ; 0x34 - 800b3c6: 2b00 cmp r3, #0 - 800b3c8: d10c bne.n 800b3e4 - pcb->rttest = tcp_ticks; - 800b3ca: 4b34 ldr r3, [pc, #208] ; (800b49c ) - 800b3cc: 681a ldr r2, [r3, #0] - 800b3ce: 68bb ldr r3, [r7, #8] - 800b3d0: 635a str r2, [r3, #52] ; 0x34 - pcb->rtseq = lwip_ntohl(seg->tcphdr->seqno); - 800b3d2: 68fb ldr r3, [r7, #12] - 800b3d4: 68db ldr r3, [r3, #12] - 800b3d6: 685b ldr r3, [r3, #4] - 800b3d8: 4618 mov r0, r3 - 800b3da: f7f9 fd98 bl 8004f0e - 800b3de: 4602 mov r2, r0 - 800b3e0: 68bb ldr r3, [r7, #8] - 800b3e2: 639a str r2, [r3, #56] ; 0x38 - } - LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output_segment: %"U32_F":%"U32_F"\n", - lwip_htonl(seg->tcphdr->seqno), lwip_htonl(seg->tcphdr->seqno) + - seg->len)); - - len = (u16_t)((u8_t *)seg->tcphdr - (u8_t *)seg->p->payload); - 800b3e4: 68fb ldr r3, [r7, #12] - 800b3e6: 68da ldr r2, [r3, #12] - 800b3e8: 68fb ldr r3, [r7, #12] - 800b3ea: 685b ldr r3, [r3, #4] - 800b3ec: 685b ldr r3, [r3, #4] - 800b3ee: 1ad3 subs r3, r2, r3 - 800b3f0: 833b strh r3, [r7, #24] - if (len == 0) { - /** Exclude retransmitted segments from this count. */ - MIB2_STATS_INC(mib2.tcpoutsegs); - } - - seg->p->len -= len; - 800b3f2: 68fb ldr r3, [r7, #12] - 800b3f4: 685b ldr r3, [r3, #4] - 800b3f6: 8959 ldrh r1, [r3, #10] - 800b3f8: 68fb ldr r3, [r7, #12] - 800b3fa: 685b ldr r3, [r3, #4] - 800b3fc: 8b3a ldrh r2, [r7, #24] - 800b3fe: 1a8a subs r2, r1, r2 - 800b400: b292 uxth r2, r2 - 800b402: 815a strh r2, [r3, #10] - seg->p->tot_len -= len; - 800b404: 68fb ldr r3, [r7, #12] - 800b406: 685b ldr r3, [r3, #4] - 800b408: 8919 ldrh r1, [r3, #8] - 800b40a: 68fb ldr r3, [r7, #12] - 800b40c: 685b ldr r3, [r3, #4] - 800b40e: 8b3a ldrh r2, [r7, #24] - 800b410: 1a8a subs r2, r1, r2 - 800b412: b292 uxth r2, r2 - 800b414: 811a strh r2, [r3, #8] - - seg->p->payload = seg->tcphdr; - 800b416: 68fb ldr r3, [r7, #12] - 800b418: 685b ldr r3, [r3, #4] - 800b41a: 68fa ldr r2, [r7, #12] - 800b41c: 68d2 ldr r2, [r2, #12] - 800b41e: 605a str r2, [r3, #4] - - seg->tcphdr->chksum = 0; - 800b420: 68fb ldr r3, [r7, #12] - 800b422: 68db ldr r3, [r3, #12] - 800b424: 2200 movs r2, #0 - 800b426: 741a strb r2, [r3, #16] - 800b428: 2200 movs r2, #0 - 800b42a: 745a strb r2, [r3, #17] - -#ifdef LWIP_HOOK_TCP_OUT_ADD_TCPOPTS - opts = LWIP_HOOK_TCP_OUT_ADD_TCPOPTS(seg->p, seg->tcphdr, pcb, opts); -#endif - LWIP_ASSERT("options not filled", (u8_t *)opts == ((u8_t *)(seg->tcphdr + 1)) + LWIP_TCP_OPT_LENGTH_SEGMENT(seg->flags, pcb)); - 800b42c: 68fb ldr r3, [r7, #12] - 800b42e: 68db ldr r3, [r3, #12] - 800b430: f103 0214 add.w r2, r3, #20 - 800b434: 68fb ldr r3, [r7, #12] - 800b436: 7a9b ldrb r3, [r3, #10] - 800b438: 009b lsls r3, r3, #2 - 800b43a: f003 0304 and.w r3, r3, #4 - 800b43e: 4413 add r3, r2 - 800b440: 69fa ldr r2, [r7, #28] - 800b442: 429a cmp r2, r3 - 800b444: d006 beq.n 800b454 - 800b446: 4b10 ldr r3, [pc, #64] ; (800b488 ) - 800b448: f240 621c movw r2, #1564 ; 0x61c - 800b44c: 4914 ldr r1, [pc, #80] ; (800b4a0 ) - 800b44e: 4810 ldr r0, [pc, #64] ; (800b490 ) - 800b450: f005 fe2a bl 80110a8 - } -#endif /* CHECKSUM_GEN_TCP */ - TCP_STATS_INC(tcp.xmit); - - NETIF_SET_HINTS(netif, &(pcb->netif_hints)); - err = ip_output_if(seg->p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, - 800b454: 68fb ldr r3, [r7, #12] - 800b456: 6858 ldr r0, [r3, #4] - 800b458: 68b9 ldr r1, [r7, #8] - 800b45a: 68bb ldr r3, [r7, #8] - 800b45c: 1d1c adds r4, r3, #4 - 800b45e: 68bb ldr r3, [r7, #8] - 800b460: 7add ldrb r5, [r3, #11] - 800b462: 68bb ldr r3, [r7, #8] - 800b464: 7a9b ldrb r3, [r3, #10] - 800b466: 687a ldr r2, [r7, #4] - 800b468: 9202 str r2, [sp, #8] - 800b46a: 2206 movs r2, #6 - 800b46c: 9201 str r2, [sp, #4] - 800b46e: 9300 str r3, [sp, #0] - 800b470: 462b mov r3, r5 - 800b472: 4622 mov r2, r4 - 800b474: f004 fc48 bl 800fd08 - 800b478: 4603 mov r3, r0 - 800b47a: 75fb strb r3, [r7, #23] - seg->chksum = SWAP_BYTES_IN_WORD(seg->chksum); - seg->chksum_swapped = 1; - } -#endif - - return err; - 800b47c: f997 3017 ldrsb.w r3, [r7, #23] -} - 800b480: 4618 mov r0, r3 - 800b482: 3720 adds r7, #32 - 800b484: 46bd mov sp, r7 - 800b486: bdb0 pop {r4, r5, r7, pc} - 800b488: 08017294 .word 0x08017294 - 800b48c: 08017858 .word 0x08017858 - 800b490: 080172e8 .word 0x080172e8 - 800b494: 08017878 .word 0x08017878 - 800b498: 08017898 .word 0x08017898 - 800b49c: 200099d4 .word 0x200099d4 - 800b4a0: 080178bc .word 0x080178bc - -0800b4a4 : - * - * @param pcb the tcp_pcb for which to re-enqueue all unacked segments - */ -err_t -tcp_rexmit_rto_prepare(struct tcp_pcb *pcb) -{ - 800b4a4: b5b0 push {r4, r5, r7, lr} - 800b4a6: b084 sub sp, #16 - 800b4a8: af00 add r7, sp, #0 - 800b4aa: 6078 str r0, [r7, #4] - struct tcp_seg *seg; - - LWIP_ASSERT("tcp_rexmit_rto_prepare: invalid pcb", pcb != NULL); - 800b4ac: 687b ldr r3, [r7, #4] - 800b4ae: 2b00 cmp r3, #0 - 800b4b0: d106 bne.n 800b4c0 - 800b4b2: 4b31 ldr r3, [pc, #196] ; (800b578 ) - 800b4b4: f240 6263 movw r2, #1635 ; 0x663 - 800b4b8: 4930 ldr r1, [pc, #192] ; (800b57c ) - 800b4ba: 4831 ldr r0, [pc, #196] ; (800b580 ) - 800b4bc: f005 fdf4 bl 80110a8 - - if (pcb->unacked == NULL) { - 800b4c0: 687b ldr r3, [r7, #4] - 800b4c2: 6f1b ldr r3, [r3, #112] ; 0x70 - 800b4c4: 2b00 cmp r3, #0 - 800b4c6: d102 bne.n 800b4ce - return ERR_VAL; - 800b4c8: f06f 0305 mvn.w r3, #5 - 800b4cc: e050 b.n 800b570 - - /* Move all unacked segments to the head of the unsent queue. - However, give up if any of the unsent pbufs are still referenced by the - netif driver due to deferred transmission. No point loading the link further - if it is struggling to flush its buffered writes. */ - for (seg = pcb->unacked; seg->next != NULL; seg = seg->next) { - 800b4ce: 687b ldr r3, [r7, #4] - 800b4d0: 6f1b ldr r3, [r3, #112] ; 0x70 - 800b4d2: 60fb str r3, [r7, #12] - 800b4d4: e00b b.n 800b4ee - if (tcp_output_segment_busy(seg)) { - 800b4d6: 68f8 ldr r0, [r7, #12] - 800b4d8: f7ff fee6 bl 800b2a8 - 800b4dc: 4603 mov r3, r0 - 800b4de: 2b00 cmp r3, #0 - 800b4e0: d002 beq.n 800b4e8 - LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_rexmit_rto: segment busy\n")); - return ERR_VAL; - 800b4e2: f06f 0305 mvn.w r3, #5 - 800b4e6: e043 b.n 800b570 - for (seg = pcb->unacked; seg->next != NULL; seg = seg->next) { - 800b4e8: 68fb ldr r3, [r7, #12] - 800b4ea: 681b ldr r3, [r3, #0] - 800b4ec: 60fb str r3, [r7, #12] - 800b4ee: 68fb ldr r3, [r7, #12] - 800b4f0: 681b ldr r3, [r3, #0] - 800b4f2: 2b00 cmp r3, #0 - 800b4f4: d1ef bne.n 800b4d6 - } - } - if (tcp_output_segment_busy(seg)) { - 800b4f6: 68f8 ldr r0, [r7, #12] - 800b4f8: f7ff fed6 bl 800b2a8 - 800b4fc: 4603 mov r3, r0 - 800b4fe: 2b00 cmp r3, #0 - 800b500: d002 beq.n 800b508 - LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_rexmit_rto: segment busy\n")); - return ERR_VAL; - 800b502: f06f 0305 mvn.w r3, #5 - 800b506: e033 b.n 800b570 - } - /* concatenate unsent queue after unacked queue */ - seg->next = pcb->unsent; - 800b508: 687b ldr r3, [r7, #4] - 800b50a: 6eda ldr r2, [r3, #108] ; 0x6c - 800b50c: 68fb ldr r3, [r7, #12] - 800b50e: 601a str r2, [r3, #0] - if (pcb->unsent == NULL) { - pcb->unsent_oversize = seg->oversize_left; - } -#endif /* TCP_OVERSIZE_DBGCHECK */ - /* unsent queue is the concatenated queue (of unacked, unsent) */ - pcb->unsent = pcb->unacked; - 800b510: 687b ldr r3, [r7, #4] - 800b512: 6f1a ldr r2, [r3, #112] ; 0x70 - 800b514: 687b ldr r3, [r7, #4] - 800b516: 66da str r2, [r3, #108] ; 0x6c - /* unacked queue is now empty */ - pcb->unacked = NULL; - 800b518: 687b ldr r3, [r7, #4] - 800b51a: 2200 movs r2, #0 - 800b51c: 671a str r2, [r3, #112] ; 0x70 - - /* Mark RTO in-progress */ - tcp_set_flags(pcb, TF_RTO); - 800b51e: 687b ldr r3, [r7, #4] - 800b520: 8b5b ldrh r3, [r3, #26] - 800b522: f443 6300 orr.w r3, r3, #2048 ; 0x800 - 800b526: b29a uxth r2, r3 - 800b528: 687b ldr r3, [r7, #4] - 800b52a: 835a strh r2, [r3, #26] - /* Record the next byte following retransmit */ - pcb->rto_end = lwip_ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg); - 800b52c: 68fb ldr r3, [r7, #12] - 800b52e: 68db ldr r3, [r3, #12] - 800b530: 685b ldr r3, [r3, #4] - 800b532: 4618 mov r0, r3 - 800b534: f7f9 fceb bl 8004f0e - 800b538: 4604 mov r4, r0 - 800b53a: 68fb ldr r3, [r7, #12] - 800b53c: 891b ldrh r3, [r3, #8] - 800b53e: 461d mov r5, r3 - 800b540: 68fb ldr r3, [r7, #12] - 800b542: 68db ldr r3, [r3, #12] - 800b544: 899b ldrh r3, [r3, #12] - 800b546: b29b uxth r3, r3 - 800b548: 4618 mov r0, r3 - 800b54a: f7f9 fccb bl 8004ee4 - 800b54e: 4603 mov r3, r0 - 800b550: b2db uxtb r3, r3 - 800b552: f003 0303 and.w r3, r3, #3 - 800b556: 2b00 cmp r3, #0 - 800b558: d001 beq.n 800b55e - 800b55a: 2301 movs r3, #1 - 800b55c: e000 b.n 800b560 - 800b55e: 2300 movs r3, #0 - 800b560: 442b add r3, r5 - 800b562: 18e2 adds r2, r4, r3 - 800b564: 687b ldr r3, [r7, #4] - 800b566: 64da str r2, [r3, #76] ; 0x4c - /* Don't take any RTT measurements after retransmitting. */ - pcb->rttest = 0; - 800b568: 687b ldr r3, [r7, #4] - 800b56a: 2200 movs r2, #0 - 800b56c: 635a str r2, [r3, #52] ; 0x34 - - return ERR_OK; - 800b56e: 2300 movs r3, #0 -} - 800b570: 4618 mov r0, r3 - 800b572: 3710 adds r7, #16 - 800b574: 46bd mov sp, r7 - 800b576: bdb0 pop {r4, r5, r7, pc} - 800b578: 08017294 .word 0x08017294 - 800b57c: 080178d0 .word 0x080178d0 - 800b580: 080172e8 .word 0x080172e8 - -0800b584 : - * - * @param pcb the tcp_pcb for which to re-enqueue all unacked segments - */ -void -tcp_rexmit_rto_commit(struct tcp_pcb *pcb) -{ - 800b584: b580 push {r7, lr} - 800b586: b082 sub sp, #8 - 800b588: af00 add r7, sp, #0 - 800b58a: 6078 str r0, [r7, #4] - LWIP_ASSERT("tcp_rexmit_rto_commit: invalid pcb", pcb != NULL); - 800b58c: 687b ldr r3, [r7, #4] - 800b58e: 2b00 cmp r3, #0 - 800b590: d106 bne.n 800b5a0 - 800b592: 4b0d ldr r3, [pc, #52] ; (800b5c8 ) - 800b594: f44f 62d3 mov.w r2, #1688 ; 0x698 - 800b598: 490c ldr r1, [pc, #48] ; (800b5cc ) - 800b59a: 480d ldr r0, [pc, #52] ; (800b5d0 ) - 800b59c: f005 fd84 bl 80110a8 - - /* increment number of retransmissions */ - if (pcb->nrtx < 0xFF) { - 800b5a0: 687b ldr r3, [r7, #4] - 800b5a2: f893 3042 ldrb.w r3, [r3, #66] ; 0x42 - 800b5a6: 2bff cmp r3, #255 ; 0xff - 800b5a8: d007 beq.n 800b5ba - ++pcb->nrtx; - 800b5aa: 687b ldr r3, [r7, #4] - 800b5ac: f893 3042 ldrb.w r3, [r3, #66] ; 0x42 - 800b5b0: 3301 adds r3, #1 - 800b5b2: b2da uxtb r2, r3 - 800b5b4: 687b ldr r3, [r7, #4] - 800b5b6: f883 2042 strb.w r2, [r3, #66] ; 0x42 - } - /* Do the actual retransmission */ - tcp_output(pcb); - 800b5ba: 6878 ldr r0, [r7, #4] - 800b5bc: f7ff fc80 bl 800aec0 -} - 800b5c0: bf00 nop - 800b5c2: 3708 adds r7, #8 - 800b5c4: 46bd mov sp, r7 - 800b5c6: bd80 pop {r7, pc} - 800b5c8: 08017294 .word 0x08017294 - 800b5cc: 080178f4 .word 0x080178f4 - 800b5d0: 080172e8 .word 0x080172e8 - -0800b5d4 : - * - * @param pcb the tcp_pcb for which to re-enqueue all unacked segments - */ -void -tcp_rexmit_rto(struct tcp_pcb *pcb) -{ - 800b5d4: b580 push {r7, lr} - 800b5d6: b082 sub sp, #8 - 800b5d8: af00 add r7, sp, #0 - 800b5da: 6078 str r0, [r7, #4] - LWIP_ASSERT("tcp_rexmit_rto: invalid pcb", pcb != NULL); - 800b5dc: 687b ldr r3, [r7, #4] - 800b5de: 2b00 cmp r3, #0 - 800b5e0: d106 bne.n 800b5f0 - 800b5e2: 4b0a ldr r3, [pc, #40] ; (800b60c ) - 800b5e4: f240 62ad movw r2, #1709 ; 0x6ad - 800b5e8: 4909 ldr r1, [pc, #36] ; (800b610 ) - 800b5ea: 480a ldr r0, [pc, #40] ; (800b614 ) - 800b5ec: f005 fd5c bl 80110a8 - - if (tcp_rexmit_rto_prepare(pcb) == ERR_OK) { - 800b5f0: 6878 ldr r0, [r7, #4] - 800b5f2: f7ff ff57 bl 800b4a4 - 800b5f6: 4603 mov r3, r0 - 800b5f8: 2b00 cmp r3, #0 - 800b5fa: d102 bne.n 800b602 - tcp_rexmit_rto_commit(pcb); - 800b5fc: 6878 ldr r0, [r7, #4] - 800b5fe: f7ff ffc1 bl 800b584 - } -} - 800b602: bf00 nop - 800b604: 3708 adds r7, #8 - 800b606: 46bd mov sp, r7 - 800b608: bd80 pop {r7, pc} - 800b60a: bf00 nop - 800b60c: 08017294 .word 0x08017294 - 800b610: 08017918 .word 0x08017918 - 800b614: 080172e8 .word 0x080172e8 - -0800b618 : - * - * @param pcb the tcp_pcb for which to retransmit the first unacked segment - */ -err_t -tcp_rexmit(struct tcp_pcb *pcb) -{ - 800b618: b590 push {r4, r7, lr} - 800b61a: b085 sub sp, #20 - 800b61c: af00 add r7, sp, #0 - 800b61e: 6078 str r0, [r7, #4] - struct tcp_seg *seg; - struct tcp_seg **cur_seg; - - LWIP_ASSERT("tcp_rexmit: invalid pcb", pcb != NULL); - 800b620: 687b ldr r3, [r7, #4] - 800b622: 2b00 cmp r3, #0 - 800b624: d106 bne.n 800b634 - 800b626: 4b2f ldr r3, [pc, #188] ; (800b6e4 ) - 800b628: f240 62c1 movw r2, #1729 ; 0x6c1 - 800b62c: 492e ldr r1, [pc, #184] ; (800b6e8 ) - 800b62e: 482f ldr r0, [pc, #188] ; (800b6ec ) - 800b630: f005 fd3a bl 80110a8 - - if (pcb->unacked == NULL) { - 800b634: 687b ldr r3, [r7, #4] - 800b636: 6f1b ldr r3, [r3, #112] ; 0x70 - 800b638: 2b00 cmp r3, #0 - 800b63a: d102 bne.n 800b642 - return ERR_VAL; - 800b63c: f06f 0305 mvn.w r3, #5 - 800b640: e04c b.n 800b6dc - } - - seg = pcb->unacked; - 800b642: 687b ldr r3, [r7, #4] - 800b644: 6f1b ldr r3, [r3, #112] ; 0x70 - 800b646: 60bb str r3, [r7, #8] - - /* Give up if the segment is still referenced by the netif driver - due to deferred transmission. */ - if (tcp_output_segment_busy(seg)) { - 800b648: 68b8 ldr r0, [r7, #8] - 800b64a: f7ff fe2d bl 800b2a8 - 800b64e: 4603 mov r3, r0 - 800b650: 2b00 cmp r3, #0 - 800b652: d002 beq.n 800b65a - LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_rexmit busy\n")); - return ERR_VAL; - 800b654: f06f 0305 mvn.w r3, #5 - 800b658: e040 b.n 800b6dc - } - - /* Move the first unacked segment to the unsent queue */ - /* Keep the unsent queue sorted. */ - pcb->unacked = seg->next; - 800b65a: 68bb ldr r3, [r7, #8] - 800b65c: 681a ldr r2, [r3, #0] - 800b65e: 687b ldr r3, [r7, #4] - 800b660: 671a str r2, [r3, #112] ; 0x70 - - cur_seg = &(pcb->unsent); - 800b662: 687b ldr r3, [r7, #4] - 800b664: 336c adds r3, #108 ; 0x6c - 800b666: 60fb str r3, [r7, #12] - while (*cur_seg && - 800b668: e002 b.n 800b670 - TCP_SEQ_LT(lwip_ntohl((*cur_seg)->tcphdr->seqno), lwip_ntohl(seg->tcphdr->seqno))) { - cur_seg = &((*cur_seg)->next ); - 800b66a: 68fb ldr r3, [r7, #12] - 800b66c: 681b ldr r3, [r3, #0] - 800b66e: 60fb str r3, [r7, #12] - while (*cur_seg && - 800b670: 68fb ldr r3, [r7, #12] - 800b672: 681b ldr r3, [r3, #0] - 800b674: 2b00 cmp r3, #0 - 800b676: d011 beq.n 800b69c - TCP_SEQ_LT(lwip_ntohl((*cur_seg)->tcphdr->seqno), lwip_ntohl(seg->tcphdr->seqno))) { - 800b678: 68fb ldr r3, [r7, #12] - 800b67a: 681b ldr r3, [r3, #0] - 800b67c: 68db ldr r3, [r3, #12] - 800b67e: 685b ldr r3, [r3, #4] - 800b680: 4618 mov r0, r3 - 800b682: f7f9 fc44 bl 8004f0e - 800b686: 4604 mov r4, r0 - 800b688: 68bb ldr r3, [r7, #8] - 800b68a: 68db ldr r3, [r3, #12] - 800b68c: 685b ldr r3, [r3, #4] - 800b68e: 4618 mov r0, r3 - 800b690: f7f9 fc3d bl 8004f0e - 800b694: 4603 mov r3, r0 - 800b696: 1ae3 subs r3, r4, r3 - while (*cur_seg && - 800b698: 2b00 cmp r3, #0 - 800b69a: dbe6 blt.n 800b66a - } - seg->next = *cur_seg; - 800b69c: 68fb ldr r3, [r7, #12] - 800b69e: 681a ldr r2, [r3, #0] - 800b6a0: 68bb ldr r3, [r7, #8] - 800b6a2: 601a str r2, [r3, #0] - *cur_seg = seg; - 800b6a4: 68fb ldr r3, [r7, #12] - 800b6a6: 68ba ldr r2, [r7, #8] - 800b6a8: 601a str r2, [r3, #0] -#if TCP_OVERSIZE - if (seg->next == NULL) { - 800b6aa: 68bb ldr r3, [r7, #8] - 800b6ac: 681b ldr r3, [r3, #0] - 800b6ae: 2b00 cmp r3, #0 - 800b6b0: d103 bne.n 800b6ba - /* the retransmitted segment is last in unsent, so reset unsent_oversize */ - pcb->unsent_oversize = 0; - 800b6b2: 687b ldr r3, [r7, #4] - 800b6b4: 2200 movs r2, #0 - 800b6b6: f8a3 2068 strh.w r2, [r3, #104] ; 0x68 - } -#endif /* TCP_OVERSIZE */ - - if (pcb->nrtx < 0xFF) { - 800b6ba: 687b ldr r3, [r7, #4] - 800b6bc: f893 3042 ldrb.w r3, [r3, #66] ; 0x42 - 800b6c0: 2bff cmp r3, #255 ; 0xff - 800b6c2: d007 beq.n 800b6d4 - ++pcb->nrtx; - 800b6c4: 687b ldr r3, [r7, #4] - 800b6c6: f893 3042 ldrb.w r3, [r3, #66] ; 0x42 - 800b6ca: 3301 adds r3, #1 - 800b6cc: b2da uxtb r2, r3 - 800b6ce: 687b ldr r3, [r7, #4] - 800b6d0: f883 2042 strb.w r2, [r3, #66] ; 0x42 - } - - /* Don't take any rtt measurements after retransmitting. */ - pcb->rttest = 0; - 800b6d4: 687b ldr r3, [r7, #4] - 800b6d6: 2200 movs r2, #0 - 800b6d8: 635a str r2, [r3, #52] ; 0x34 - - /* Do the actual retransmission. */ - MIB2_STATS_INC(mib2.tcpretranssegs); - /* No need to call tcp_output: we are always called from tcp_input() - and thus tcp_output directly returns. */ - return ERR_OK; - 800b6da: 2300 movs r3, #0 -} - 800b6dc: 4618 mov r0, r3 - 800b6de: 3714 adds r7, #20 - 800b6e0: 46bd mov sp, r7 - 800b6e2: bd90 pop {r4, r7, pc} - 800b6e4: 08017294 .word 0x08017294 - 800b6e8: 08017934 .word 0x08017934 - 800b6ec: 080172e8 .word 0x080172e8 - -0800b6f0 : - * - * @param pcb the tcp_pcb for which to retransmit the first unacked segment - */ -void -tcp_rexmit_fast(struct tcp_pcb *pcb) -{ - 800b6f0: b580 push {r7, lr} - 800b6f2: b082 sub sp, #8 - 800b6f4: af00 add r7, sp, #0 - 800b6f6: 6078 str r0, [r7, #4] - LWIP_ASSERT("tcp_rexmit_fast: invalid pcb", pcb != NULL); - 800b6f8: 687b ldr r3, [r7, #4] - 800b6fa: 2b00 cmp r3, #0 - 800b6fc: d106 bne.n 800b70c - 800b6fe: 4b2a ldr r3, [pc, #168] ; (800b7a8 ) - 800b700: f240 62f9 movw r2, #1785 ; 0x6f9 - 800b704: 4929 ldr r1, [pc, #164] ; (800b7ac ) - 800b706: 482a ldr r0, [pc, #168] ; (800b7b0 ) - 800b708: f005 fcce bl 80110a8 - - if (pcb->unacked != NULL && !(pcb->flags & TF_INFR)) { - 800b70c: 687b ldr r3, [r7, #4] - 800b70e: 6f1b ldr r3, [r3, #112] ; 0x70 - 800b710: 2b00 cmp r3, #0 - 800b712: d044 beq.n 800b79e - 800b714: 687b ldr r3, [r7, #4] - 800b716: 8b5b ldrh r3, [r3, #26] - 800b718: f003 0304 and.w r3, r3, #4 - 800b71c: 2b00 cmp r3, #0 - 800b71e: d13e bne.n 800b79e - LWIP_DEBUGF(TCP_FR_DEBUG, - ("tcp_receive: dupacks %"U16_F" (%"U32_F - "), fast retransmit %"U32_F"\n", - (u16_t)pcb->dupacks, pcb->lastack, - lwip_ntohl(pcb->unacked->tcphdr->seqno))); - if (tcp_rexmit(pcb) == ERR_OK) { - 800b720: 6878 ldr r0, [r7, #4] - 800b722: f7ff ff79 bl 800b618 - 800b726: 4603 mov r3, r0 - 800b728: 2b00 cmp r3, #0 - 800b72a: d138 bne.n 800b79e - /* Set ssthresh to half of the minimum of the current - * cwnd and the advertised window */ - pcb->ssthresh = LWIP_MIN(pcb->cwnd, pcb->snd_wnd) / 2; - 800b72c: 687b ldr r3, [r7, #4] - 800b72e: f8b3 2060 ldrh.w r2, [r3, #96] ; 0x60 - 800b732: 687b ldr r3, [r7, #4] - 800b734: f8b3 3048 ldrh.w r3, [r3, #72] ; 0x48 - 800b738: 4293 cmp r3, r2 - 800b73a: bf28 it cs - 800b73c: 4613 movcs r3, r2 - 800b73e: b29b uxth r3, r3 - 800b740: 0fda lsrs r2, r3, #31 - 800b742: 4413 add r3, r2 - 800b744: 105b asrs r3, r3, #1 - 800b746: b29a uxth r2, r3 - 800b748: 687b ldr r3, [r7, #4] - 800b74a: f8a3 204a strh.w r2, [r3, #74] ; 0x4a - - /* The minimum value for ssthresh should be 2 MSS */ - if (pcb->ssthresh < (2U * pcb->mss)) { - 800b74e: 687b ldr r3, [r7, #4] - 800b750: f8b3 304a ldrh.w r3, [r3, #74] ; 0x4a - 800b754: 461a mov r2, r3 - 800b756: 687b ldr r3, [r7, #4] - 800b758: 8e5b ldrh r3, [r3, #50] ; 0x32 - 800b75a: 005b lsls r3, r3, #1 - 800b75c: 429a cmp r2, r3 - 800b75e: d206 bcs.n 800b76e - LWIP_DEBUGF(TCP_FR_DEBUG, - ("tcp_receive: The minimum value for ssthresh %"TCPWNDSIZE_F - " should be min 2 mss %"U16_F"...\n", - pcb->ssthresh, (u16_t)(2 * pcb->mss))); - pcb->ssthresh = 2 * pcb->mss; - 800b760: 687b ldr r3, [r7, #4] - 800b762: 8e5b ldrh r3, [r3, #50] ; 0x32 - 800b764: 005b lsls r3, r3, #1 - 800b766: b29a uxth r2, r3 - 800b768: 687b ldr r3, [r7, #4] - 800b76a: f8a3 204a strh.w r2, [r3, #74] ; 0x4a - } - - pcb->cwnd = pcb->ssthresh + 3 * pcb->mss; - 800b76e: 687b ldr r3, [r7, #4] - 800b770: f8b3 204a ldrh.w r2, [r3, #74] ; 0x4a - 800b774: 687b ldr r3, [r7, #4] - 800b776: 8e5b ldrh r3, [r3, #50] ; 0x32 - 800b778: 4619 mov r1, r3 - 800b77a: 0049 lsls r1, r1, #1 - 800b77c: 440b add r3, r1 - 800b77e: b29b uxth r3, r3 - 800b780: 4413 add r3, r2 - 800b782: b29a uxth r2, r3 - 800b784: 687b ldr r3, [r7, #4] - 800b786: f8a3 2048 strh.w r2, [r3, #72] ; 0x48 - tcp_set_flags(pcb, TF_INFR); - 800b78a: 687b ldr r3, [r7, #4] - 800b78c: 8b5b ldrh r3, [r3, #26] - 800b78e: f043 0304 orr.w r3, r3, #4 - 800b792: b29a uxth r2, r3 - 800b794: 687b ldr r3, [r7, #4] - 800b796: 835a strh r2, [r3, #26] - - /* Reset the retransmission timer to prevent immediate rto retransmissions */ - pcb->rtime = 0; - 800b798: 687b ldr r3, [r7, #4] - 800b79a: 2200 movs r2, #0 - 800b79c: 861a strh r2, [r3, #48] ; 0x30 - } - } -} - 800b79e: bf00 nop - 800b7a0: 3708 adds r7, #8 - 800b7a2: 46bd mov sp, r7 - 800b7a4: bd80 pop {r7, pc} - 800b7a6: bf00 nop - 800b7a8: 08017294 .word 0x08017294 - 800b7ac: 0801794c .word 0x0801794c - 800b7b0: 080172e8 .word 0x080172e8 - -0800b7b4 : - -static struct pbuf * -tcp_output_alloc_header_common(u32_t ackno, u16_t optlen, u16_t datalen, - u32_t seqno_be /* already in network byte order */, - u16_t src_port, u16_t dst_port, u8_t flags, u16_t wnd) -{ - 800b7b4: b580 push {r7, lr} - 800b7b6: b086 sub sp, #24 - 800b7b8: af00 add r7, sp, #0 - 800b7ba: 60f8 str r0, [r7, #12] - 800b7bc: 607b str r3, [r7, #4] - 800b7be: 460b mov r3, r1 - 800b7c0: 817b strh r3, [r7, #10] - 800b7c2: 4613 mov r3, r2 - 800b7c4: 813b strh r3, [r7, #8] - struct tcp_hdr *tcphdr; - struct pbuf *p; - - p = pbuf_alloc(PBUF_IP, TCP_HLEN + optlen + datalen, PBUF_RAM); - 800b7c6: 897a ldrh r2, [r7, #10] - 800b7c8: 893b ldrh r3, [r7, #8] - 800b7ca: 4413 add r3, r2 - 800b7cc: b29b uxth r3, r3 - 800b7ce: 3314 adds r3, #20 - 800b7d0: b29b uxth r3, r3 - 800b7d2: f44f 7220 mov.w r2, #640 ; 0x280 - 800b7d6: 4619 mov r1, r3 - 800b7d8: 2022 movs r0, #34 ; 0x22 - 800b7da: f7fa fc09 bl 8005ff0 - 800b7de: 6178 str r0, [r7, #20] - if (p != NULL) { - 800b7e0: 697b ldr r3, [r7, #20] - 800b7e2: 2b00 cmp r3, #0 - 800b7e4: d04d beq.n 800b882 - LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr", - 800b7e6: 897b ldrh r3, [r7, #10] - 800b7e8: 3313 adds r3, #19 - 800b7ea: 697a ldr r2, [r7, #20] - 800b7ec: 8952 ldrh r2, [r2, #10] - 800b7ee: 4293 cmp r3, r2 - 800b7f0: db06 blt.n 800b800 - 800b7f2: 4b26 ldr r3, [pc, #152] ; (800b88c ) - 800b7f4: f240 7223 movw r2, #1827 ; 0x723 - 800b7f8: 4925 ldr r1, [pc, #148] ; (800b890 ) - 800b7fa: 4826 ldr r0, [pc, #152] ; (800b894 ) - 800b7fc: f005 fc54 bl 80110a8 - (p->len >= TCP_HLEN + optlen)); - tcphdr = (struct tcp_hdr *)p->payload; - 800b800: 697b ldr r3, [r7, #20] - 800b802: 685b ldr r3, [r3, #4] - 800b804: 613b str r3, [r7, #16] - tcphdr->src = lwip_htons(src_port); - 800b806: 8c3b ldrh r3, [r7, #32] - 800b808: 4618 mov r0, r3 - 800b80a: f7f9 fb6b bl 8004ee4 - 800b80e: 4603 mov r3, r0 - 800b810: 461a mov r2, r3 - 800b812: 693b ldr r3, [r7, #16] - 800b814: 801a strh r2, [r3, #0] - tcphdr->dest = lwip_htons(dst_port); - 800b816: 8cbb ldrh r3, [r7, #36] ; 0x24 - 800b818: 4618 mov r0, r3 - 800b81a: f7f9 fb63 bl 8004ee4 - 800b81e: 4603 mov r3, r0 - 800b820: 461a mov r2, r3 - 800b822: 693b ldr r3, [r7, #16] - 800b824: 805a strh r2, [r3, #2] - tcphdr->seqno = seqno_be; - 800b826: 693b ldr r3, [r7, #16] - 800b828: 687a ldr r2, [r7, #4] - 800b82a: 605a str r2, [r3, #4] - tcphdr->ackno = lwip_htonl(ackno); - 800b82c: 68f8 ldr r0, [r7, #12] - 800b82e: f7f9 fb6e bl 8004f0e - 800b832: 4602 mov r2, r0 - 800b834: 693b ldr r3, [r7, #16] - 800b836: 609a str r2, [r3, #8] - TCPH_HDRLEN_FLAGS_SET(tcphdr, (5 + optlen / 4), flags); - 800b838: 897b ldrh r3, [r7, #10] - 800b83a: 089b lsrs r3, r3, #2 - 800b83c: b29b uxth r3, r3 - 800b83e: 3305 adds r3, #5 - 800b840: b29b uxth r3, r3 - 800b842: 031b lsls r3, r3, #12 - 800b844: b29a uxth r2, r3 - 800b846: f897 3028 ldrb.w r3, [r7, #40] ; 0x28 - 800b84a: b29b uxth r3, r3 - 800b84c: 4313 orrs r3, r2 - 800b84e: b29b uxth r3, r3 - 800b850: 4618 mov r0, r3 - 800b852: f7f9 fb47 bl 8004ee4 - 800b856: 4603 mov r3, r0 - 800b858: 461a mov r2, r3 - 800b85a: 693b ldr r3, [r7, #16] - 800b85c: 819a strh r2, [r3, #12] - tcphdr->wnd = lwip_htons(wnd); - 800b85e: 8dbb ldrh r3, [r7, #44] ; 0x2c - 800b860: 4618 mov r0, r3 - 800b862: f7f9 fb3f bl 8004ee4 - 800b866: 4603 mov r3, r0 - 800b868: 461a mov r2, r3 - 800b86a: 693b ldr r3, [r7, #16] - 800b86c: 81da strh r2, [r3, #14] - tcphdr->chksum = 0; - 800b86e: 693b ldr r3, [r7, #16] - 800b870: 2200 movs r2, #0 - 800b872: 741a strb r2, [r3, #16] - 800b874: 2200 movs r2, #0 - 800b876: 745a strb r2, [r3, #17] - tcphdr->urgp = 0; - 800b878: 693b ldr r3, [r7, #16] - 800b87a: 2200 movs r2, #0 - 800b87c: 749a strb r2, [r3, #18] - 800b87e: 2200 movs r2, #0 - 800b880: 74da strb r2, [r3, #19] - } - return p; - 800b882: 697b ldr r3, [r7, #20] -} - 800b884: 4618 mov r0, r3 - 800b886: 3718 adds r7, #24 - 800b888: 46bd mov sp, r7 - 800b88a: bd80 pop {r7, pc} - 800b88c: 08017294 .word 0x08017294 - 800b890: 0801796c .word 0x0801796c - 800b894: 080172e8 .word 0x080172e8 - -0800b898 : - * @return pbuf with p->payload being the tcp_hdr - */ -static struct pbuf * -tcp_output_alloc_header(struct tcp_pcb *pcb, u16_t optlen, u16_t datalen, - u32_t seqno_be /* already in network byte order */) -{ - 800b898: b5b0 push {r4, r5, r7, lr} - 800b89a: b08a sub sp, #40 ; 0x28 - 800b89c: af04 add r7, sp, #16 - 800b89e: 60f8 str r0, [r7, #12] - 800b8a0: 607b str r3, [r7, #4] - 800b8a2: 460b mov r3, r1 - 800b8a4: 817b strh r3, [r7, #10] - 800b8a6: 4613 mov r3, r2 - 800b8a8: 813b strh r3, [r7, #8] - struct pbuf *p; - - LWIP_ASSERT("tcp_output_alloc_header: invalid pcb", pcb != NULL); - 800b8aa: 68fb ldr r3, [r7, #12] - 800b8ac: 2b00 cmp r3, #0 - 800b8ae: d106 bne.n 800b8be - 800b8b0: 4b15 ldr r3, [pc, #84] ; (800b908 ) - 800b8b2: f240 7242 movw r2, #1858 ; 0x742 - 800b8b6: 4915 ldr r1, [pc, #84] ; (800b90c ) - 800b8b8: 4815 ldr r0, [pc, #84] ; (800b910 ) - 800b8ba: f005 fbf5 bl 80110a8 - - p = tcp_output_alloc_header_common(pcb->rcv_nxt, optlen, datalen, - 800b8be: 68fb ldr r3, [r7, #12] - 800b8c0: 6a58 ldr r0, [r3, #36] ; 0x24 - 800b8c2: 68fb ldr r3, [r7, #12] - 800b8c4: 8adb ldrh r3, [r3, #22] - 800b8c6: 68fa ldr r2, [r7, #12] - 800b8c8: 8b12 ldrh r2, [r2, #24] - 800b8ca: 68f9 ldr r1, [r7, #12] - 800b8cc: 8d49 ldrh r1, [r1, #42] ; 0x2a - 800b8ce: 893d ldrh r5, [r7, #8] - 800b8d0: 897c ldrh r4, [r7, #10] - 800b8d2: 9103 str r1, [sp, #12] - 800b8d4: 2110 movs r1, #16 - 800b8d6: 9102 str r1, [sp, #8] - 800b8d8: 9201 str r2, [sp, #4] - 800b8da: 9300 str r3, [sp, #0] - 800b8dc: 687b ldr r3, [r7, #4] - 800b8de: 462a mov r2, r5 - 800b8e0: 4621 mov r1, r4 - 800b8e2: f7ff ff67 bl 800b7b4 - 800b8e6: 6178 str r0, [r7, #20] - seqno_be, pcb->local_port, pcb->remote_port, TCP_ACK, - TCPWND_MIN16(RCV_WND_SCALE(pcb, pcb->rcv_ann_wnd))); - if (p != NULL) { - 800b8e8: 697b ldr r3, [r7, #20] - 800b8ea: 2b00 cmp r3, #0 - 800b8ec: d006 beq.n 800b8fc - /* If we're sending a packet, update the announced right window edge */ - pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd; - 800b8ee: 68fb ldr r3, [r7, #12] - 800b8f0: 6a5b ldr r3, [r3, #36] ; 0x24 - 800b8f2: 68fa ldr r2, [r7, #12] - 800b8f4: 8d52 ldrh r2, [r2, #42] ; 0x2a - 800b8f6: 441a add r2, r3 - 800b8f8: 68fb ldr r3, [r7, #12] - 800b8fa: 62da str r2, [r3, #44] ; 0x2c - } - return p; - 800b8fc: 697b ldr r3, [r7, #20] -} - 800b8fe: 4618 mov r0, r3 - 800b900: 3718 adds r7, #24 - 800b902: 46bd mov sp, r7 - 800b904: bdb0 pop {r4, r5, r7, pc} - 800b906: bf00 nop - 800b908: 08017294 .word 0x08017294 - 800b90c: 0801799c .word 0x0801799c - 800b910: 080172e8 .word 0x080172e8 - -0800b914 : - -/* Fill in options for control segments */ -static void -tcp_output_fill_options(const struct tcp_pcb *pcb, struct pbuf *p, u8_t optflags, u8_t num_sacks) -{ - 800b914: b580 push {r7, lr} - 800b916: b088 sub sp, #32 - 800b918: af00 add r7, sp, #0 - 800b91a: 60f8 str r0, [r7, #12] - 800b91c: 60b9 str r1, [r7, #8] - 800b91e: 4611 mov r1, r2 - 800b920: 461a mov r2, r3 - 800b922: 460b mov r3, r1 - 800b924: 71fb strb r3, [r7, #7] - 800b926: 4613 mov r3, r2 - 800b928: 71bb strb r3, [r7, #6] - struct tcp_hdr *tcphdr; - u32_t *opts; - u16_t sacks_len = 0; - 800b92a: 2300 movs r3, #0 - 800b92c: 83fb strh r3, [r7, #30] - - LWIP_ASSERT("tcp_output_fill_options: invalid pbuf", p != NULL); - 800b92e: 68bb ldr r3, [r7, #8] - 800b930: 2b00 cmp r3, #0 - 800b932: d106 bne.n 800b942 - 800b934: 4b13 ldr r3, [pc, #76] ; (800b984 ) - 800b936: f240 7256 movw r2, #1878 ; 0x756 - 800b93a: 4913 ldr r1, [pc, #76] ; (800b988 ) - 800b93c: 4813 ldr r0, [pc, #76] ; (800b98c ) - 800b93e: f005 fbb3 bl 80110a8 - - tcphdr = (struct tcp_hdr *)p->payload; - 800b942: 68bb ldr r3, [r7, #8] - 800b944: 685b ldr r3, [r3, #4] - 800b946: 61bb str r3, [r7, #24] - opts = (u32_t *)(void *)(tcphdr + 1); - 800b948: 69bb ldr r3, [r7, #24] - 800b94a: 3314 adds r3, #20 - 800b94c: 617b str r3, [r7, #20] - opts = LWIP_HOOK_TCP_OUT_ADD_TCPOPTS(p, tcphdr, pcb, opts); -#endif - - LWIP_UNUSED_ARG(pcb); - LWIP_UNUSED_ARG(sacks_len); - LWIP_ASSERT("options not filled", (u8_t *)opts == ((u8_t *)(tcphdr + 1)) + sacks_len * 4 + LWIP_TCP_OPT_LENGTH_SEGMENT(optflags, pcb)); - 800b94e: 69bb ldr r3, [r7, #24] - 800b950: f103 0214 add.w r2, r3, #20 - 800b954: 8bfb ldrh r3, [r7, #30] - 800b956: 009b lsls r3, r3, #2 - 800b958: 4619 mov r1, r3 - 800b95a: 79fb ldrb r3, [r7, #7] - 800b95c: 009b lsls r3, r3, #2 - 800b95e: f003 0304 and.w r3, r3, #4 - 800b962: 440b add r3, r1 - 800b964: 4413 add r3, r2 - 800b966: 697a ldr r2, [r7, #20] - 800b968: 429a cmp r2, r3 - 800b96a: d006 beq.n 800b97a - 800b96c: 4b05 ldr r3, [pc, #20] ; (800b984 ) - 800b96e: f240 7275 movw r2, #1909 ; 0x775 - 800b972: 4907 ldr r1, [pc, #28] ; (800b990 ) - 800b974: 4805 ldr r0, [pc, #20] ; (800b98c ) - 800b976: f005 fb97 bl 80110a8 - LWIP_UNUSED_ARG(optflags); /* for LWIP_NOASSERT */ - LWIP_UNUSED_ARG(opts); /* for LWIP_NOASSERT */ -} - 800b97a: bf00 nop - 800b97c: 3720 adds r7, #32 - 800b97e: 46bd mov sp, r7 - 800b980: bd80 pop {r7, pc} - 800b982: bf00 nop - 800b984: 08017294 .word 0x08017294 - 800b988: 080179c4 .word 0x080179c4 - 800b98c: 080172e8 .word 0x080172e8 - 800b990: 080178bc .word 0x080178bc - -0800b994 : - * header checksum and calling ip_output_if while handling netif hints and stats. - */ -static err_t -tcp_output_control_segment(const struct tcp_pcb *pcb, struct pbuf *p, - const ip_addr_t *src, const ip_addr_t *dst) -{ - 800b994: b580 push {r7, lr} - 800b996: b08a sub sp, #40 ; 0x28 - 800b998: af04 add r7, sp, #16 - 800b99a: 60f8 str r0, [r7, #12] - 800b99c: 60b9 str r1, [r7, #8] - 800b99e: 607a str r2, [r7, #4] - 800b9a0: 603b str r3, [r7, #0] - err_t err; - struct netif *netif; - - LWIP_ASSERT("tcp_output_control_segment: invalid pbuf", p != NULL); - 800b9a2: 68bb ldr r3, [r7, #8] - 800b9a4: 2b00 cmp r3, #0 - 800b9a6: d106 bne.n 800b9b6 - 800b9a8: 4b1c ldr r3, [pc, #112] ; (800ba1c ) - 800b9aa: f240 7287 movw r2, #1927 ; 0x787 - 800b9ae: 491c ldr r1, [pc, #112] ; (800ba20 ) - 800b9b0: 481c ldr r0, [pc, #112] ; (800ba24 ) - 800b9b2: f005 fb79 bl 80110a8 - - netif = tcp_route(pcb, src, dst); - 800b9b6: 683a ldr r2, [r7, #0] - 800b9b8: 6879 ldr r1, [r7, #4] - 800b9ba: 68f8 ldr r0, [r7, #12] - 800b9bc: f7fe ff40 bl 800a840 - 800b9c0: 6138 str r0, [r7, #16] - if (netif == NULL) { - 800b9c2: 693b ldr r3, [r7, #16] - 800b9c4: 2b00 cmp r3, #0 - 800b9c6: d102 bne.n 800b9ce - err = ERR_RTE; - 800b9c8: 23fc movs r3, #252 ; 0xfc - 800b9ca: 75fb strb r3, [r7, #23] - 800b9cc: e01c b.n 800ba08 - struct tcp_hdr *tcphdr = (struct tcp_hdr *)p->payload; - tcphdr->chksum = ip_chksum_pseudo(p, IP_PROTO_TCP, p->tot_len, - src, dst); - } -#endif - if (pcb != NULL) { - 800b9ce: 68fb ldr r3, [r7, #12] - 800b9d0: 2b00 cmp r3, #0 - 800b9d2: d006 beq.n 800b9e2 - NETIF_SET_HINTS(netif, LWIP_CONST_CAST(struct netif_hint*, &(pcb->netif_hints))); - ttl = pcb->ttl; - 800b9d4: 68fb ldr r3, [r7, #12] - 800b9d6: 7adb ldrb r3, [r3, #11] - 800b9d8: 75bb strb r3, [r7, #22] - tos = pcb->tos; - 800b9da: 68fb ldr r3, [r7, #12] - 800b9dc: 7a9b ldrb r3, [r3, #10] - 800b9de: 757b strb r3, [r7, #21] - 800b9e0: e003 b.n 800b9ea - } else { - /* Send output with hardcoded TTL/HL since we have no access to the pcb */ - ttl = TCP_TTL; - 800b9e2: 23ff movs r3, #255 ; 0xff - 800b9e4: 75bb strb r3, [r7, #22] - tos = 0; - 800b9e6: 2300 movs r3, #0 - 800b9e8: 757b strb r3, [r7, #21] - } - TCP_STATS_INC(tcp.xmit); - err = ip_output_if(p, src, dst, ttl, tos, IP_PROTO_TCP, netif); - 800b9ea: 7dba ldrb r2, [r7, #22] - 800b9ec: 693b ldr r3, [r7, #16] - 800b9ee: 9302 str r3, [sp, #8] - 800b9f0: 2306 movs r3, #6 - 800b9f2: 9301 str r3, [sp, #4] - 800b9f4: 7d7b ldrb r3, [r7, #21] - 800b9f6: 9300 str r3, [sp, #0] - 800b9f8: 4613 mov r3, r2 - 800b9fa: 683a ldr r2, [r7, #0] - 800b9fc: 6879 ldr r1, [r7, #4] - 800b9fe: 68b8 ldr r0, [r7, #8] - 800ba00: f004 f982 bl 800fd08 - 800ba04: 4603 mov r3, r0 - 800ba06: 75fb strb r3, [r7, #23] - NETIF_RESET_HINTS(netif); - } - pbuf_free(p); - 800ba08: 68b8 ldr r0, [r7, #8] - 800ba0a: f7fa fdd5 bl 80065b8 - return err; - 800ba0e: f997 3017 ldrsb.w r3, [r7, #23] -} - 800ba12: 4618 mov r0, r3 - 800ba14: 3718 adds r7, #24 - 800ba16: 46bd mov sp, r7 - 800ba18: bd80 pop {r7, pc} - 800ba1a: bf00 nop - 800ba1c: 08017294 .word 0x08017294 - 800ba20: 080179ec .word 0x080179ec - 800ba24: 080172e8 .word 0x080172e8 - -0800ba28 : - */ -void -tcp_rst(const struct tcp_pcb *pcb, u32_t seqno, u32_t ackno, - const ip_addr_t *local_ip, const ip_addr_t *remote_ip, - u16_t local_port, u16_t remote_port) -{ - 800ba28: b590 push {r4, r7, lr} - 800ba2a: b08b sub sp, #44 ; 0x2c - 800ba2c: af04 add r7, sp, #16 - 800ba2e: 60f8 str r0, [r7, #12] - 800ba30: 60b9 str r1, [r7, #8] - 800ba32: 607a str r2, [r7, #4] - 800ba34: 603b str r3, [r7, #0] - struct pbuf *p; - u16_t wnd; - u8_t optlen; - - LWIP_ASSERT("tcp_rst: invalid local_ip", local_ip != NULL); - 800ba36: 683b ldr r3, [r7, #0] - 800ba38: 2b00 cmp r3, #0 - 800ba3a: d106 bne.n 800ba4a - 800ba3c: 4b1f ldr r3, [pc, #124] ; (800babc ) - 800ba3e: f240 72c4 movw r2, #1988 ; 0x7c4 - 800ba42: 491f ldr r1, [pc, #124] ; (800bac0 ) - 800ba44: 481f ldr r0, [pc, #124] ; (800bac4 ) - 800ba46: f005 fb2f bl 80110a8 - LWIP_ASSERT("tcp_rst: invalid remote_ip", remote_ip != NULL); - 800ba4a: 6abb ldr r3, [r7, #40] ; 0x28 - 800ba4c: 2b00 cmp r3, #0 - 800ba4e: d106 bne.n 800ba5e - 800ba50: 4b1a ldr r3, [pc, #104] ; (800babc ) - 800ba52: f240 72c5 movw r2, #1989 ; 0x7c5 - 800ba56: 491c ldr r1, [pc, #112] ; (800bac8 ) - 800ba58: 481a ldr r0, [pc, #104] ; (800bac4 ) - 800ba5a: f005 fb25 bl 80110a8 - - optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(0, pcb); - 800ba5e: 2300 movs r3, #0 - 800ba60: 75fb strb r3, [r7, #23] - -#if LWIP_WND_SCALE - wnd = PP_HTONS(((TCP_WND >> TCP_RCV_SCALE) & 0xFFFF)); -#else - wnd = PP_HTONS(TCP_WND); - 800ba62: f246 0308 movw r3, #24584 ; 0x6008 - 800ba66: 82bb strh r3, [r7, #20] -#endif - - p = tcp_output_alloc_header_common(ackno, optlen, 0, lwip_htonl(seqno), local_port, - 800ba68: 7dfb ldrb r3, [r7, #23] - 800ba6a: b29c uxth r4, r3 - 800ba6c: 68b8 ldr r0, [r7, #8] - 800ba6e: f7f9 fa4e bl 8004f0e - 800ba72: 4602 mov r2, r0 - 800ba74: 8abb ldrh r3, [r7, #20] - 800ba76: 9303 str r3, [sp, #12] - 800ba78: 2314 movs r3, #20 - 800ba7a: 9302 str r3, [sp, #8] - 800ba7c: 8e3b ldrh r3, [r7, #48] ; 0x30 - 800ba7e: 9301 str r3, [sp, #4] - 800ba80: 8dbb ldrh r3, [r7, #44] ; 0x2c - 800ba82: 9300 str r3, [sp, #0] - 800ba84: 4613 mov r3, r2 - 800ba86: 2200 movs r2, #0 - 800ba88: 4621 mov r1, r4 - 800ba8a: 6878 ldr r0, [r7, #4] - 800ba8c: f7ff fe92 bl 800b7b4 - 800ba90: 6138 str r0, [r7, #16] - remote_port, TCP_RST | TCP_ACK, wnd); - if (p == NULL) { - 800ba92: 693b ldr r3, [r7, #16] - 800ba94: 2b00 cmp r3, #0 - 800ba96: d00c beq.n 800bab2 - LWIP_DEBUGF(TCP_DEBUG, ("tcp_rst: could not allocate memory for pbuf\n")); - return; - } - tcp_output_fill_options(pcb, p, 0, optlen); - 800ba98: 7dfb ldrb r3, [r7, #23] - 800ba9a: 2200 movs r2, #0 - 800ba9c: 6939 ldr r1, [r7, #16] - 800ba9e: 68f8 ldr r0, [r7, #12] - 800baa0: f7ff ff38 bl 800b914 - - MIB2_STATS_INC(mib2.tcpoutrsts); - - tcp_output_control_segment(pcb, p, local_ip, remote_ip); - 800baa4: 6abb ldr r3, [r7, #40] ; 0x28 - 800baa6: 683a ldr r2, [r7, #0] - 800baa8: 6939 ldr r1, [r7, #16] - 800baaa: 68f8 ldr r0, [r7, #12] - 800baac: f7ff ff72 bl 800b994 - 800bab0: e000 b.n 800bab4 - return; - 800bab2: bf00 nop - LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_rst: seqno %"U32_F" ackno %"U32_F".\n", seqno, ackno)); -} - 800bab4: 371c adds r7, #28 - 800bab6: 46bd mov sp, r7 - 800bab8: bd90 pop {r4, r7, pc} - 800baba: bf00 nop - 800babc: 08017294 .word 0x08017294 - 800bac0: 08017a18 .word 0x08017a18 - 800bac4: 080172e8 .word 0x080172e8 - 800bac8: 08017a34 .word 0x08017a34 - -0800bacc : - * - * @param pcb Protocol control block for the TCP connection to send the ACK - */ -err_t -tcp_send_empty_ack(struct tcp_pcb *pcb) -{ - 800bacc: b590 push {r4, r7, lr} - 800bace: b087 sub sp, #28 - 800bad0: af00 add r7, sp, #0 - 800bad2: 6078 str r0, [r7, #4] - err_t err; - struct pbuf *p; - u8_t optlen, optflags = 0; - 800bad4: 2300 movs r3, #0 - 800bad6: 75fb strb r3, [r7, #23] - u8_t num_sacks = 0; - 800bad8: 2300 movs r3, #0 - 800bada: 75bb strb r3, [r7, #22] - - LWIP_ASSERT("tcp_send_empty_ack: invalid pcb", pcb != NULL); - 800badc: 687b ldr r3, [r7, #4] - 800bade: 2b00 cmp r3, #0 - 800bae0: d106 bne.n 800baf0 - 800bae2: 4b28 ldr r3, [pc, #160] ; (800bb84 ) - 800bae4: f240 72ea movw r2, #2026 ; 0x7ea - 800bae8: 4927 ldr r1, [pc, #156] ; (800bb88 ) - 800baea: 4828 ldr r0, [pc, #160] ; (800bb8c ) - 800baec: f005 fadc bl 80110a8 -#if LWIP_TCP_TIMESTAMPS - if (pcb->flags & TF_TIMESTAMP) { - optflags = TF_SEG_OPTS_TS; - } -#endif - optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(optflags, pcb); - 800baf0: 7dfb ldrb r3, [r7, #23] - 800baf2: 009b lsls r3, r3, #2 - 800baf4: b2db uxtb r3, r3 - 800baf6: f003 0304 and.w r3, r3, #4 - 800bafa: 757b strb r3, [r7, #21] - if ((num_sacks = tcp_get_num_sacks(pcb, optlen)) > 0) { - optlen += 4 + num_sacks * 8; /* 4 bytes for header (including 2*NOP), plus 8B for each SACK */ - } -#endif - - p = tcp_output_alloc_header(pcb, optlen, 0, lwip_htonl(pcb->snd_nxt)); - 800bafc: 7d7b ldrb r3, [r7, #21] - 800bafe: b29c uxth r4, r3 - 800bb00: 687b ldr r3, [r7, #4] - 800bb02: 6d1b ldr r3, [r3, #80] ; 0x50 - 800bb04: 4618 mov r0, r3 - 800bb06: f7f9 fa02 bl 8004f0e - 800bb0a: 4603 mov r3, r0 - 800bb0c: 2200 movs r2, #0 - 800bb0e: 4621 mov r1, r4 - 800bb10: 6878 ldr r0, [r7, #4] - 800bb12: f7ff fec1 bl 800b898 - 800bb16: 6138 str r0, [r7, #16] - if (p == NULL) { - 800bb18: 693b ldr r3, [r7, #16] - 800bb1a: 2b00 cmp r3, #0 - 800bb1c: d109 bne.n 800bb32 - /* let tcp_fasttmr retry sending this ACK */ - tcp_set_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); - 800bb1e: 687b ldr r3, [r7, #4] - 800bb20: 8b5b ldrh r3, [r3, #26] - 800bb22: f043 0303 orr.w r3, r3, #3 - 800bb26: b29a uxth r2, r3 - 800bb28: 687b ldr r3, [r7, #4] - 800bb2a: 835a strh r2, [r3, #26] - LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: (ACK) could not allocate pbuf\n")); - return ERR_BUF; - 800bb2c: f06f 0301 mvn.w r3, #1 - 800bb30: e023 b.n 800bb7a - } - tcp_output_fill_options(pcb, p, optflags, num_sacks); - 800bb32: 7dbb ldrb r3, [r7, #22] - 800bb34: 7dfa ldrb r2, [r7, #23] - 800bb36: 6939 ldr r1, [r7, #16] - 800bb38: 6878 ldr r0, [r7, #4] - 800bb3a: f7ff feeb bl 800b914 - pcb->ts_lastacksent = pcb->rcv_nxt; -#endif - - LWIP_DEBUGF(TCP_OUTPUT_DEBUG, - ("tcp_output: sending ACK for %"U32_F"\n", pcb->rcv_nxt)); - err = tcp_output_control_segment(pcb, p, &pcb->local_ip, &pcb->remote_ip); - 800bb3e: 687a ldr r2, [r7, #4] - 800bb40: 687b ldr r3, [r7, #4] - 800bb42: 3304 adds r3, #4 - 800bb44: 6939 ldr r1, [r7, #16] - 800bb46: 6878 ldr r0, [r7, #4] - 800bb48: f7ff ff24 bl 800b994 - 800bb4c: 4603 mov r3, r0 - 800bb4e: 73fb strb r3, [r7, #15] - if (err != ERR_OK) { - 800bb50: f997 300f ldrsb.w r3, [r7, #15] - 800bb54: 2b00 cmp r3, #0 - 800bb56: d007 beq.n 800bb68 - /* let tcp_fasttmr retry sending this ACK */ - tcp_set_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); - 800bb58: 687b ldr r3, [r7, #4] - 800bb5a: 8b5b ldrh r3, [r3, #26] - 800bb5c: f043 0303 orr.w r3, r3, #3 - 800bb60: b29a uxth r2, r3 - 800bb62: 687b ldr r3, [r7, #4] - 800bb64: 835a strh r2, [r3, #26] - 800bb66: e006 b.n 800bb76 - } else { - /* remove ACK flags from the PCB, as we sent an empty ACK now */ - tcp_clear_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); - 800bb68: 687b ldr r3, [r7, #4] - 800bb6a: 8b5b ldrh r3, [r3, #26] - 800bb6c: f023 0303 bic.w r3, r3, #3 - 800bb70: b29a uxth r2, r3 - 800bb72: 687b ldr r3, [r7, #4] - 800bb74: 835a strh r2, [r3, #26] - } - - return err; - 800bb76: f997 300f ldrsb.w r3, [r7, #15] -} - 800bb7a: 4618 mov r0, r3 - 800bb7c: 371c adds r7, #28 - 800bb7e: 46bd mov sp, r7 - 800bb80: bd90 pop {r4, r7, pc} - 800bb82: bf00 nop - 800bb84: 08017294 .word 0x08017294 - 800bb88: 08017a50 .word 0x08017a50 - 800bb8c: 080172e8 .word 0x080172e8 - -0800bb90 : - * - * @param pcb the tcp_pcb for which to send a keepalive packet - */ -err_t -tcp_keepalive(struct tcp_pcb *pcb) -{ - 800bb90: b590 push {r4, r7, lr} - 800bb92: b087 sub sp, #28 - 800bb94: af00 add r7, sp, #0 - 800bb96: 6078 str r0, [r7, #4] - err_t err; - struct pbuf *p; - u8_t optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(0, pcb); - 800bb98: 2300 movs r3, #0 - 800bb9a: 75fb strb r3, [r7, #23] - - LWIP_ASSERT("tcp_keepalive: invalid pcb", pcb != NULL); - 800bb9c: 687b ldr r3, [r7, #4] - 800bb9e: 2b00 cmp r3, #0 - 800bba0: d106 bne.n 800bbb0 - 800bba2: 4b18 ldr r3, [pc, #96] ; (800bc04 ) - 800bba4: f640 0224 movw r2, #2084 ; 0x824 - 800bba8: 4917 ldr r1, [pc, #92] ; (800bc08 ) - 800bbaa: 4818 ldr r0, [pc, #96] ; (800bc0c ) - 800bbac: f005 fa7c bl 80110a8 - LWIP_DEBUGF(TCP_DEBUG, ("\n")); - - LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: tcp_ticks %"U32_F" pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n", - tcp_ticks, pcb->tmr, (u16_t)pcb->keep_cnt_sent)); - - p = tcp_output_alloc_header(pcb, optlen, 0, lwip_htonl(pcb->snd_nxt - 1)); - 800bbb0: 7dfb ldrb r3, [r7, #23] - 800bbb2: b29c uxth r4, r3 - 800bbb4: 687b ldr r3, [r7, #4] - 800bbb6: 6d1b ldr r3, [r3, #80] ; 0x50 - 800bbb8: 3b01 subs r3, #1 - 800bbba: 4618 mov r0, r3 - 800bbbc: f7f9 f9a7 bl 8004f0e - 800bbc0: 4603 mov r3, r0 - 800bbc2: 2200 movs r2, #0 - 800bbc4: 4621 mov r1, r4 - 800bbc6: 6878 ldr r0, [r7, #4] - 800bbc8: f7ff fe66 bl 800b898 - 800bbcc: 6138 str r0, [r7, #16] - if (p == NULL) { - 800bbce: 693b ldr r3, [r7, #16] - 800bbd0: 2b00 cmp r3, #0 - 800bbd2: d102 bne.n 800bbda - LWIP_DEBUGF(TCP_DEBUG, - ("tcp_keepalive: could not allocate memory for pbuf\n")); - return ERR_MEM; - 800bbd4: f04f 33ff mov.w r3, #4294967295 - 800bbd8: e010 b.n 800bbfc - } - tcp_output_fill_options(pcb, p, 0, optlen); - 800bbda: 7dfb ldrb r3, [r7, #23] - 800bbdc: 2200 movs r2, #0 - 800bbde: 6939 ldr r1, [r7, #16] - 800bbe0: 6878 ldr r0, [r7, #4] - 800bbe2: f7ff fe97 bl 800b914 - err = tcp_output_control_segment(pcb, p, &pcb->local_ip, &pcb->remote_ip); - 800bbe6: 687a ldr r2, [r7, #4] - 800bbe8: 687b ldr r3, [r7, #4] - 800bbea: 3304 adds r3, #4 - 800bbec: 6939 ldr r1, [r7, #16] - 800bbee: 6878 ldr r0, [r7, #4] - 800bbf0: f7ff fed0 bl 800b994 - 800bbf4: 4603 mov r3, r0 - 800bbf6: 73fb strb r3, [r7, #15] - - LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: seqno %"U32_F" ackno %"U32_F" err %d.\n", - pcb->snd_nxt - 1, pcb->rcv_nxt, (int)err)); - return err; - 800bbf8: f997 300f ldrsb.w r3, [r7, #15] -} - 800bbfc: 4618 mov r0, r3 - 800bbfe: 371c adds r7, #28 - 800bc00: 46bd mov sp, r7 - 800bc02: bd90 pop {r4, r7, pc} - 800bc04: 08017294 .word 0x08017294 - 800bc08: 08017a70 .word 0x08017a70 - 800bc0c: 080172e8 .word 0x080172e8 - -0800bc10 : - * - * @param pcb the tcp_pcb for which to send a zero-window probe packet - */ -err_t -tcp_zero_window_probe(struct tcp_pcb *pcb) -{ - 800bc10: b590 push {r4, r7, lr} - 800bc12: b08b sub sp, #44 ; 0x2c - 800bc14: af00 add r7, sp, #0 - 800bc16: 6078 str r0, [r7, #4] - struct tcp_hdr *tcphdr; - struct tcp_seg *seg; - u16_t len; - u8_t is_fin; - u32_t snd_nxt; - u8_t optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(0, pcb); - 800bc18: 2300 movs r3, #0 - 800bc1a: f887 3027 strb.w r3, [r7, #39] ; 0x27 - - LWIP_ASSERT("tcp_zero_window_probe: invalid pcb", pcb != NULL); - 800bc1e: 687b ldr r3, [r7, #4] - 800bc20: 2b00 cmp r3, #0 - 800bc22: d106 bne.n 800bc32 - 800bc24: 4b4c ldr r3, [pc, #304] ; (800bd58 ) - 800bc26: f640 024f movw r2, #2127 ; 0x84f - 800bc2a: 494c ldr r1, [pc, #304] ; (800bd5c ) - 800bc2c: 484c ldr r0, [pc, #304] ; (800bd60 ) - 800bc2e: f005 fa3b bl 80110a8 - ("tcp_zero_window_probe: tcp_ticks %"U32_F - " pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n", - tcp_ticks, pcb->tmr, (u16_t)pcb->keep_cnt_sent)); - - /* Only consider unsent, persist timer should be off when there is data in-flight */ - seg = pcb->unsent; - 800bc32: 687b ldr r3, [r7, #4] - 800bc34: 6edb ldr r3, [r3, #108] ; 0x6c - 800bc36: 623b str r3, [r7, #32] - if (seg == NULL) { - 800bc38: 6a3b ldr r3, [r7, #32] - 800bc3a: 2b00 cmp r3, #0 - 800bc3c: d101 bne.n 800bc42 - /* Not expected, persist timer should be off when the send buffer is empty */ - return ERR_OK; - 800bc3e: 2300 movs r3, #0 - 800bc40: e086 b.n 800bd50 - - /* increment probe count. NOTE: we record probe even if it fails - to actually transmit due to an error. This ensures memory exhaustion/ - routing problem doesn't leave a zero-window pcb as an indefinite zombie. - RTO mechanism has similar behavior, see pcb->nrtx */ - if (pcb->persist_probe < 0xFF) { - 800bc42: 687b ldr r3, [r7, #4] - 800bc44: f893 309a ldrb.w r3, [r3, #154] ; 0x9a - 800bc48: 2bff cmp r3, #255 ; 0xff - 800bc4a: d007 beq.n 800bc5c - ++pcb->persist_probe; - 800bc4c: 687b ldr r3, [r7, #4] - 800bc4e: f893 309a ldrb.w r3, [r3, #154] ; 0x9a - 800bc52: 3301 adds r3, #1 - 800bc54: b2da uxtb r2, r3 - 800bc56: 687b ldr r3, [r7, #4] - 800bc58: f883 209a strb.w r2, [r3, #154] ; 0x9a - } - - is_fin = ((TCPH_FLAGS(seg->tcphdr) & TCP_FIN) != 0) && (seg->len == 0); - 800bc5c: 6a3b ldr r3, [r7, #32] - 800bc5e: 68db ldr r3, [r3, #12] - 800bc60: 899b ldrh r3, [r3, #12] - 800bc62: b29b uxth r3, r3 - 800bc64: 4618 mov r0, r3 - 800bc66: f7f9 f93d bl 8004ee4 - 800bc6a: 4603 mov r3, r0 - 800bc6c: b2db uxtb r3, r3 - 800bc6e: f003 0301 and.w r3, r3, #1 - 800bc72: 2b00 cmp r3, #0 - 800bc74: d005 beq.n 800bc82 - 800bc76: 6a3b ldr r3, [r7, #32] - 800bc78: 891b ldrh r3, [r3, #8] - 800bc7a: 2b00 cmp r3, #0 - 800bc7c: d101 bne.n 800bc82 - 800bc7e: 2301 movs r3, #1 - 800bc80: e000 b.n 800bc84 - 800bc82: 2300 movs r3, #0 - 800bc84: 77fb strb r3, [r7, #31] - /* we want to send one seqno: either FIN or data (no options) */ - len = is_fin ? 0 : 1; - 800bc86: 7ffb ldrb r3, [r7, #31] - 800bc88: 2b00 cmp r3, #0 - 800bc8a: bf0c ite eq - 800bc8c: 2301 moveq r3, #1 - 800bc8e: 2300 movne r3, #0 - 800bc90: b2db uxtb r3, r3 - 800bc92: 83bb strh r3, [r7, #28] - - p = tcp_output_alloc_header(pcb, optlen, len, seg->tcphdr->seqno); - 800bc94: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800bc98: b299 uxth r1, r3 - 800bc9a: 6a3b ldr r3, [r7, #32] - 800bc9c: 68db ldr r3, [r3, #12] - 800bc9e: 685b ldr r3, [r3, #4] - 800bca0: 8bba ldrh r2, [r7, #28] - 800bca2: 6878 ldr r0, [r7, #4] - 800bca4: f7ff fdf8 bl 800b898 - 800bca8: 61b8 str r0, [r7, #24] - if (p == NULL) { - 800bcaa: 69bb ldr r3, [r7, #24] - 800bcac: 2b00 cmp r3, #0 - 800bcae: d102 bne.n 800bcb6 - LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: no memory for pbuf\n")); - return ERR_MEM; - 800bcb0: f04f 33ff mov.w r3, #4294967295 - 800bcb4: e04c b.n 800bd50 - } - tcphdr = (struct tcp_hdr *)p->payload; - 800bcb6: 69bb ldr r3, [r7, #24] - 800bcb8: 685b ldr r3, [r3, #4] - 800bcba: 617b str r3, [r7, #20] - - if (is_fin) { - 800bcbc: 7ffb ldrb r3, [r7, #31] - 800bcbe: 2b00 cmp r3, #0 - 800bcc0: d011 beq.n 800bce6 - /* FIN segment, no data */ - TCPH_FLAGS_SET(tcphdr, TCP_ACK | TCP_FIN); - 800bcc2: 697b ldr r3, [r7, #20] - 800bcc4: 899b ldrh r3, [r3, #12] - 800bcc6: b29b uxth r3, r3 - 800bcc8: b21b sxth r3, r3 - 800bcca: f423 537c bic.w r3, r3, #16128 ; 0x3f00 - 800bcce: b21c sxth r4, r3 - 800bcd0: 2011 movs r0, #17 - 800bcd2: f7f9 f907 bl 8004ee4 - 800bcd6: 4603 mov r3, r0 - 800bcd8: b21b sxth r3, r3 - 800bcda: 4323 orrs r3, r4 - 800bcdc: b21b sxth r3, r3 - 800bcde: b29a uxth r2, r3 - 800bce0: 697b ldr r3, [r7, #20] - 800bce2: 819a strh r2, [r3, #12] - 800bce4: e010 b.n 800bd08 - } else { - /* Data segment, copy in one byte from the head of the unacked queue */ - char *d = ((char *)p->payload + TCP_HLEN); - 800bce6: 69bb ldr r3, [r7, #24] - 800bce8: 685b ldr r3, [r3, #4] - 800bcea: 3314 adds r3, #20 - 800bcec: 613b str r3, [r7, #16] - /* Depending on whether the segment has already been sent (unacked) or not - (unsent), seg->p->payload points to the IP header or TCP header. - Ensure we copy the first TCP data byte: */ - pbuf_copy_partial(seg->p, d, 1, seg->p->tot_len - seg->len); - 800bcee: 6a3b ldr r3, [r7, #32] - 800bcf0: 6858 ldr r0, [r3, #4] - 800bcf2: 6a3b ldr r3, [r7, #32] - 800bcf4: 685b ldr r3, [r3, #4] - 800bcf6: 891a ldrh r2, [r3, #8] - 800bcf8: 6a3b ldr r3, [r7, #32] - 800bcfa: 891b ldrh r3, [r3, #8] - 800bcfc: 1ad3 subs r3, r2, r3 - 800bcfe: b29b uxth r3, r3 - 800bd00: 2201 movs r2, #1 - 800bd02: 6939 ldr r1, [r7, #16] - 800bd04: f7fa fe52 bl 80069ac - } - - /* The byte may be acknowledged without the window being opened. */ - snd_nxt = lwip_ntohl(seg->tcphdr->seqno) + 1; - 800bd08: 6a3b ldr r3, [r7, #32] - 800bd0a: 68db ldr r3, [r3, #12] - 800bd0c: 685b ldr r3, [r3, #4] - 800bd0e: 4618 mov r0, r3 - 800bd10: f7f9 f8fd bl 8004f0e - 800bd14: 4603 mov r3, r0 - 800bd16: 3301 adds r3, #1 - 800bd18: 60fb str r3, [r7, #12] - if (TCP_SEQ_LT(pcb->snd_nxt, snd_nxt)) { - 800bd1a: 687b ldr r3, [r7, #4] - 800bd1c: 6d1a ldr r2, [r3, #80] ; 0x50 - 800bd1e: 68fb ldr r3, [r7, #12] - 800bd20: 1ad3 subs r3, r2, r3 - 800bd22: 2b00 cmp r3, #0 - 800bd24: da02 bge.n 800bd2c - pcb->snd_nxt = snd_nxt; - 800bd26: 687b ldr r3, [r7, #4] - 800bd28: 68fa ldr r2, [r7, #12] - 800bd2a: 651a str r2, [r3, #80] ; 0x50 - } - tcp_output_fill_options(pcb, p, 0, optlen); - 800bd2c: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800bd30: 2200 movs r2, #0 - 800bd32: 69b9 ldr r1, [r7, #24] - 800bd34: 6878 ldr r0, [r7, #4] - 800bd36: f7ff fded bl 800b914 - - err = tcp_output_control_segment(pcb, p, &pcb->local_ip, &pcb->remote_ip); - 800bd3a: 687a ldr r2, [r7, #4] - 800bd3c: 687b ldr r3, [r7, #4] - 800bd3e: 3304 adds r3, #4 - 800bd40: 69b9 ldr r1, [r7, #24] - 800bd42: 6878 ldr r0, [r7, #4] - 800bd44: f7ff fe26 bl 800b994 - 800bd48: 4603 mov r3, r0 - 800bd4a: 72fb strb r3, [r7, #11] - - LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: seqno %"U32_F - " ackno %"U32_F" err %d.\n", - pcb->snd_nxt - 1, pcb->rcv_nxt, (int)err)); - return err; - 800bd4c: f997 300b ldrsb.w r3, [r7, #11] -} - 800bd50: 4618 mov r0, r3 - 800bd52: 372c adds r7, #44 ; 0x2c - 800bd54: 46bd mov sp, r7 - 800bd56: bd90 pop {r4, r7, pc} - 800bd58: 08017294 .word 0x08017294 - 800bd5c: 08017a8c .word 0x08017a8c - 800bd60: 080172e8 .word 0x080172e8 - -0800bd64 : - * - * @param arg unused argument - */ -static void -tcpip_tcp_timer(void *arg) -{ - 800bd64: b580 push {r7, lr} - 800bd66: b082 sub sp, #8 - 800bd68: af00 add r7, sp, #0 - 800bd6a: 6078 str r0, [r7, #4] - LWIP_UNUSED_ARG(arg); - - /* call TCP timer handler */ - tcp_tmr(); - 800bd6c: f7fa ff0c bl 8006b88 - /* timer still needed? */ - if (tcp_active_pcbs || tcp_tw_pcbs) { - 800bd70: 4b0a ldr r3, [pc, #40] ; (800bd9c ) - 800bd72: 681b ldr r3, [r3, #0] - 800bd74: 2b00 cmp r3, #0 - 800bd76: d103 bne.n 800bd80 - 800bd78: 4b09 ldr r3, [pc, #36] ; (800bda0 ) - 800bd7a: 681b ldr r3, [r3, #0] - 800bd7c: 2b00 cmp r3, #0 - 800bd7e: d005 beq.n 800bd8c - /* restart timer */ - sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL); - 800bd80: 2200 movs r2, #0 - 800bd82: 4908 ldr r1, [pc, #32] ; (800bda4 ) - 800bd84: 20fa movs r0, #250 ; 0xfa - 800bd86: f000 f8f3 bl 800bf70 - 800bd8a: e003 b.n 800bd94 - } else { - /* disable timer */ - tcpip_tcp_timer_active = 0; - 800bd8c: 4b06 ldr r3, [pc, #24] ; (800bda8 ) - 800bd8e: 2200 movs r2, #0 - 800bd90: 601a str r2, [r3, #0] - } -} - 800bd92: bf00 nop - 800bd94: bf00 nop - 800bd96: 3708 adds r7, #8 - 800bd98: 46bd mov sp, r7 - 800bd9a: bd80 pop {r7, pc} - 800bd9c: 200099e0 .word 0x200099e0 - 800bda0: 200099e4 .word 0x200099e4 - 800bda4: 0800bd65 .word 0x0800bd65 - 800bda8: 20009a2c .word 0x20009a2c - -0800bdac : - * the reason is to have the TCP timer only running when - * there are active (or time-wait) PCBs. - */ -void -tcp_timer_needed(void) -{ - 800bdac: b580 push {r7, lr} - 800bdae: af00 add r7, sp, #0 - LWIP_ASSERT_CORE_LOCKED(); - - /* timer is off but needed again? */ - if (!tcpip_tcp_timer_active && (tcp_active_pcbs || tcp_tw_pcbs)) { - 800bdb0: 4b0a ldr r3, [pc, #40] ; (800bddc ) - 800bdb2: 681b ldr r3, [r3, #0] - 800bdb4: 2b00 cmp r3, #0 - 800bdb6: d10f bne.n 800bdd8 - 800bdb8: 4b09 ldr r3, [pc, #36] ; (800bde0 ) - 800bdba: 681b ldr r3, [r3, #0] - 800bdbc: 2b00 cmp r3, #0 - 800bdbe: d103 bne.n 800bdc8 - 800bdc0: 4b08 ldr r3, [pc, #32] ; (800bde4 ) - 800bdc2: 681b ldr r3, [r3, #0] - 800bdc4: 2b00 cmp r3, #0 - 800bdc6: d007 beq.n 800bdd8 - /* enable and start timer */ - tcpip_tcp_timer_active = 1; - 800bdc8: 4b04 ldr r3, [pc, #16] ; (800bddc ) - 800bdca: 2201 movs r2, #1 - 800bdcc: 601a str r2, [r3, #0] - sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL); - 800bdce: 2200 movs r2, #0 - 800bdd0: 4905 ldr r1, [pc, #20] ; (800bde8 ) - 800bdd2: 20fa movs r0, #250 ; 0xfa - 800bdd4: f000 f8cc bl 800bf70 - } -} - 800bdd8: bf00 nop - 800bdda: bd80 pop {r7, pc} - 800bddc: 20009a2c .word 0x20009a2c - 800bde0: 200099e0 .word 0x200099e0 - 800bde4: 200099e4 .word 0x200099e4 - 800bde8: 0800bd65 .word 0x0800bd65 - -0800bdec : -#if LWIP_DEBUG_TIMERNAMES -sys_timeout_abs(u32_t abs_time, sys_timeout_handler handler, void *arg, const char *handler_name) -#else /* LWIP_DEBUG_TIMERNAMES */ -sys_timeout_abs(u32_t abs_time, sys_timeout_handler handler, void *arg) -#endif -{ - 800bdec: b580 push {r7, lr} - 800bdee: b086 sub sp, #24 - 800bdf0: af00 add r7, sp, #0 - 800bdf2: 60f8 str r0, [r7, #12] - 800bdf4: 60b9 str r1, [r7, #8] - 800bdf6: 607a str r2, [r7, #4] - struct sys_timeo *timeout, *t; - - timeout = (struct sys_timeo *)memp_malloc(MEMP_SYS_TIMEOUT); - 800bdf8: 2006 movs r0, #6 - 800bdfa: f7f9 fceb bl 80057d4 - 800bdfe: 6138 str r0, [r7, #16] - if (timeout == NULL) { - 800be00: 693b ldr r3, [r7, #16] - 800be02: 2b00 cmp r3, #0 - 800be04: d109 bne.n 800be1a - LWIP_ASSERT("sys_timeout: timeout != NULL, pool MEMP_SYS_TIMEOUT is empty", timeout != NULL); - 800be06: 693b ldr r3, [r7, #16] - 800be08: 2b00 cmp r3, #0 - 800be0a: d151 bne.n 800beb0 - 800be0c: 4b2a ldr r3, [pc, #168] ; (800beb8 ) - 800be0e: 22be movs r2, #190 ; 0xbe - 800be10: 492a ldr r1, [pc, #168] ; (800bebc ) - 800be12: 482b ldr r0, [pc, #172] ; (800bec0 ) - 800be14: f005 f948 bl 80110a8 - return; - 800be18: e04a b.n 800beb0 - } - - timeout->next = NULL; - 800be1a: 693b ldr r3, [r7, #16] - 800be1c: 2200 movs r2, #0 - 800be1e: 601a str r2, [r3, #0] - timeout->h = handler; - 800be20: 693b ldr r3, [r7, #16] - 800be22: 68ba ldr r2, [r7, #8] - 800be24: 609a str r2, [r3, #8] - timeout->arg = arg; - 800be26: 693b ldr r3, [r7, #16] - 800be28: 687a ldr r2, [r7, #4] - 800be2a: 60da str r2, [r3, #12] - timeout->time = abs_time; - 800be2c: 693b ldr r3, [r7, #16] - 800be2e: 68fa ldr r2, [r7, #12] - 800be30: 605a str r2, [r3, #4] - timeout->handler_name = handler_name; - LWIP_DEBUGF(TIMERS_DEBUG, ("sys_timeout: %p abs_time=%"U32_F" handler=%s arg=%p\n", - (void *)timeout, abs_time, handler_name, (void *)arg)); -#endif /* LWIP_DEBUG_TIMERNAMES */ - - if (next_timeout == NULL) { - 800be32: 4b24 ldr r3, [pc, #144] ; (800bec4 ) - 800be34: 681b ldr r3, [r3, #0] - 800be36: 2b00 cmp r3, #0 - 800be38: d103 bne.n 800be42 - next_timeout = timeout; - 800be3a: 4a22 ldr r2, [pc, #136] ; (800bec4 ) - 800be3c: 693b ldr r3, [r7, #16] - 800be3e: 6013 str r3, [r2, #0] - return; - 800be40: e037 b.n 800beb2 - } - if (TIME_LESS_THAN(timeout->time, next_timeout->time)) { - 800be42: 693b ldr r3, [r7, #16] - 800be44: 685a ldr r2, [r3, #4] - 800be46: 4b1f ldr r3, [pc, #124] ; (800bec4 ) - 800be48: 681b ldr r3, [r3, #0] - 800be4a: 685b ldr r3, [r3, #4] - 800be4c: 1ad3 subs r3, r2, r3 - 800be4e: 0fdb lsrs r3, r3, #31 - 800be50: f003 0301 and.w r3, r3, #1 - 800be54: b2db uxtb r3, r3 - 800be56: 2b00 cmp r3, #0 - 800be58: d007 beq.n 800be6a - timeout->next = next_timeout; - 800be5a: 4b1a ldr r3, [pc, #104] ; (800bec4 ) - 800be5c: 681a ldr r2, [r3, #0] - 800be5e: 693b ldr r3, [r7, #16] - 800be60: 601a str r2, [r3, #0] - next_timeout = timeout; - 800be62: 4a18 ldr r2, [pc, #96] ; (800bec4 ) - 800be64: 693b ldr r3, [r7, #16] - 800be66: 6013 str r3, [r2, #0] - 800be68: e023 b.n 800beb2 - } else { - for (t = next_timeout; t != NULL; t = t->next) { - 800be6a: 4b16 ldr r3, [pc, #88] ; (800bec4 ) - 800be6c: 681b ldr r3, [r3, #0] - 800be6e: 617b str r3, [r7, #20] - 800be70: e01a b.n 800bea8 - if ((t->next == NULL) || TIME_LESS_THAN(timeout->time, t->next->time)) { - 800be72: 697b ldr r3, [r7, #20] - 800be74: 681b ldr r3, [r3, #0] - 800be76: 2b00 cmp r3, #0 - 800be78: d00b beq.n 800be92 - 800be7a: 693b ldr r3, [r7, #16] - 800be7c: 685a ldr r2, [r3, #4] - 800be7e: 697b ldr r3, [r7, #20] - 800be80: 681b ldr r3, [r3, #0] - 800be82: 685b ldr r3, [r3, #4] - 800be84: 1ad3 subs r3, r2, r3 - 800be86: 0fdb lsrs r3, r3, #31 - 800be88: f003 0301 and.w r3, r3, #1 - 800be8c: b2db uxtb r3, r3 - 800be8e: 2b00 cmp r3, #0 - 800be90: d007 beq.n 800bea2 - timeout->next = t->next; - 800be92: 697b ldr r3, [r7, #20] - 800be94: 681a ldr r2, [r3, #0] - 800be96: 693b ldr r3, [r7, #16] - 800be98: 601a str r2, [r3, #0] - t->next = timeout; - 800be9a: 697b ldr r3, [r7, #20] - 800be9c: 693a ldr r2, [r7, #16] - 800be9e: 601a str r2, [r3, #0] - break; - 800bea0: e007 b.n 800beb2 - for (t = next_timeout; t != NULL; t = t->next) { - 800bea2: 697b ldr r3, [r7, #20] - 800bea4: 681b ldr r3, [r3, #0] - 800bea6: 617b str r3, [r7, #20] - 800bea8: 697b ldr r3, [r7, #20] - 800beaa: 2b00 cmp r3, #0 - 800beac: d1e1 bne.n 800be72 - 800beae: e000 b.n 800beb2 - return; - 800beb0: bf00 nop - } - } - } -} - 800beb2: 3718 adds r7, #24 - 800beb4: 46bd mov sp, r7 - 800beb6: bd80 pop {r7, pc} - 800beb8: 08017ab0 .word 0x08017ab0 - 800bebc: 08017ae4 .word 0x08017ae4 - 800bec0: 08017b24 .word 0x08017b24 - 800bec4: 20009a24 .word 0x20009a24 - -0800bec8 : -#if !LWIP_TESTMODE -static -#endif -void -lwip_cyclic_timer(void *arg) -{ - 800bec8: b580 push {r7, lr} - 800beca: b086 sub sp, #24 - 800becc: af00 add r7, sp, #0 - 800bece: 6078 str r0, [r7, #4] - u32_t now; - u32_t next_timeout_time; - const struct lwip_cyclic_timer *cyclic = (const struct lwip_cyclic_timer *)arg; - 800bed0: 687b ldr r3, [r7, #4] - 800bed2: 617b str r3, [r7, #20] - -#if LWIP_DEBUG_TIMERNAMES - LWIP_DEBUGF(TIMERS_DEBUG, ("tcpip: %s()\n", cyclic->handler_name)); -#endif - cyclic->handler(); - 800bed4: 697b ldr r3, [r7, #20] - 800bed6: 685b ldr r3, [r3, #4] - 800bed8: 4798 blx r3 - - now = sys_now(); - 800beda: f7f8 fdeb bl 8004ab4 - 800bede: 6138 str r0, [r7, #16] - next_timeout_time = (u32_t)(current_timeout_due_time + cyclic->interval_ms); /* overflow handled by TIME_LESS_THAN macro */ - 800bee0: 697b ldr r3, [r7, #20] - 800bee2: 681a ldr r2, [r3, #0] - 800bee4: 4b0f ldr r3, [pc, #60] ; (800bf24 ) - 800bee6: 681b ldr r3, [r3, #0] - 800bee8: 4413 add r3, r2 - 800beea: 60fb str r3, [r7, #12] - if (TIME_LESS_THAN(next_timeout_time, now)) { - 800beec: 68fa ldr r2, [r7, #12] - 800beee: 693b ldr r3, [r7, #16] - 800bef0: 1ad3 subs r3, r2, r3 - 800bef2: 0fdb lsrs r3, r3, #31 - 800bef4: f003 0301 and.w r3, r3, #1 - 800bef8: b2db uxtb r3, r3 - 800befa: 2b00 cmp r3, #0 - 800befc: d009 beq.n 800bf12 - /* timer would immediately expire again -> "overload" -> restart without any correction */ -#if LWIP_DEBUG_TIMERNAMES - sys_timeout_abs((u32_t)(now + cyclic->interval_ms), lwip_cyclic_timer, arg, cyclic->handler_name); -#else - sys_timeout_abs((u32_t)(now + cyclic->interval_ms), lwip_cyclic_timer, arg); - 800befe: 697b ldr r3, [r7, #20] - 800bf00: 681a ldr r2, [r3, #0] - 800bf02: 693b ldr r3, [r7, #16] - 800bf04: 4413 add r3, r2 - 800bf06: 687a ldr r2, [r7, #4] - 800bf08: 4907 ldr r1, [pc, #28] ; (800bf28 ) - 800bf0a: 4618 mov r0, r3 - 800bf0c: f7ff ff6e bl 800bdec - sys_timeout_abs(next_timeout_time, lwip_cyclic_timer, arg, cyclic->handler_name); -#else - sys_timeout_abs(next_timeout_time, lwip_cyclic_timer, arg); -#endif - } -} - 800bf10: e004 b.n 800bf1c - sys_timeout_abs(next_timeout_time, lwip_cyclic_timer, arg); - 800bf12: 687a ldr r2, [r7, #4] - 800bf14: 4904 ldr r1, [pc, #16] ; (800bf28 ) - 800bf16: 68f8 ldr r0, [r7, #12] - 800bf18: f7ff ff68 bl 800bdec -} - 800bf1c: bf00 nop - 800bf1e: 3718 adds r7, #24 - 800bf20: 46bd mov sp, r7 - 800bf22: bd80 pop {r7, pc} - 800bf24: 20009a28 .word 0x20009a28 - 800bf28: 0800bec9 .word 0x0800bec9 - -0800bf2c : - -/** Initialize this module */ -void sys_timeouts_init(void) -{ - 800bf2c: b580 push {r7, lr} - 800bf2e: b082 sub sp, #8 - 800bf30: af00 add r7, sp, #0 - size_t i; - /* tcp_tmr() at index 0 is started on demand */ - for (i = (LWIP_TCP ? 1 : 0); i < LWIP_ARRAYSIZE(lwip_cyclic_timers); i++) { - 800bf32: 2301 movs r3, #1 - 800bf34: 607b str r3, [r7, #4] - 800bf36: e00e b.n 800bf56 - /* we have to cast via size_t to get rid of const warning - (this is OK as cyclic_timer() casts back to const* */ - sys_timeout(lwip_cyclic_timers[i].interval_ms, lwip_cyclic_timer, LWIP_CONST_CAST(void *, &lwip_cyclic_timers[i])); - 800bf38: 4a0b ldr r2, [pc, #44] ; (800bf68 ) - 800bf3a: 687b ldr r3, [r7, #4] - 800bf3c: f852 0033 ldr.w r0, [r2, r3, lsl #3] - 800bf40: 687b ldr r3, [r7, #4] - 800bf42: 00db lsls r3, r3, #3 - 800bf44: 4a08 ldr r2, [pc, #32] ; (800bf68 ) - 800bf46: 4413 add r3, r2 - 800bf48: 461a mov r2, r3 - 800bf4a: 4908 ldr r1, [pc, #32] ; (800bf6c ) - 800bf4c: f000 f810 bl 800bf70 - for (i = (LWIP_TCP ? 1 : 0); i < LWIP_ARRAYSIZE(lwip_cyclic_timers); i++) { - 800bf50: 687b ldr r3, [r7, #4] - 800bf52: 3301 adds r3, #1 - 800bf54: 607b str r3, [r7, #4] - 800bf56: 687b ldr r3, [r7, #4] - 800bf58: 2b04 cmp r3, #4 - 800bf5a: d9ed bls.n 800bf38 - } -} - 800bf5c: bf00 nop - 800bf5e: bf00 nop - 800bf60: 3708 adds r7, #8 - 800bf62: 46bd mov sp, r7 - 800bf64: bd80 pop {r7, pc} - 800bf66: bf00 nop - 800bf68: 08018aa4 .word 0x08018aa4 - 800bf6c: 0800bec9 .word 0x0800bec9 - -0800bf70 : -sys_timeout_debug(u32_t msecs, sys_timeout_handler handler, void *arg, const char *handler_name) -#else /* LWIP_DEBUG_TIMERNAMES */ -void -sys_timeout(u32_t msecs, sys_timeout_handler handler, void *arg) -#endif /* LWIP_DEBUG_TIMERNAMES */ -{ - 800bf70: b580 push {r7, lr} - 800bf72: b086 sub sp, #24 - 800bf74: af00 add r7, sp, #0 - 800bf76: 60f8 str r0, [r7, #12] - 800bf78: 60b9 str r1, [r7, #8] - 800bf7a: 607a str r2, [r7, #4] - u32_t next_timeout_time; - - LWIP_ASSERT_CORE_LOCKED(); - - LWIP_ASSERT("Timeout time too long, max is LWIP_UINT32_MAX/4 msecs", msecs <= (LWIP_UINT32_MAX / 4)); - 800bf7c: 68fb ldr r3, [r7, #12] - 800bf7e: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000 - 800bf82: d306 bcc.n 800bf92 - 800bf84: 4b0a ldr r3, [pc, #40] ; (800bfb0 ) - 800bf86: f240 1229 movw r2, #297 ; 0x129 - 800bf8a: 490a ldr r1, [pc, #40] ; (800bfb4 ) - 800bf8c: 480a ldr r0, [pc, #40] ; (800bfb8 ) - 800bf8e: f005 f88b bl 80110a8 - - next_timeout_time = (u32_t)(sys_now() + msecs); /* overflow handled by TIME_LESS_THAN macro */ - 800bf92: f7f8 fd8f bl 8004ab4 - 800bf96: 4602 mov r2, r0 - 800bf98: 68fb ldr r3, [r7, #12] - 800bf9a: 4413 add r3, r2 - 800bf9c: 617b str r3, [r7, #20] - -#if LWIP_DEBUG_TIMERNAMES - sys_timeout_abs(next_timeout_time, handler, arg, handler_name); -#else - sys_timeout_abs(next_timeout_time, handler, arg); - 800bf9e: 687a ldr r2, [r7, #4] - 800bfa0: 68b9 ldr r1, [r7, #8] - 800bfa2: 6978 ldr r0, [r7, #20] - 800bfa4: f7ff ff22 bl 800bdec -#endif -} - 800bfa8: bf00 nop - 800bfaa: 3718 adds r7, #24 - 800bfac: 46bd mov sp, r7 - 800bfae: bd80 pop {r7, pc} - 800bfb0: 08017ab0 .word 0x08017ab0 - 800bfb4: 08017b4c .word 0x08017b4c - 800bfb8: 08017b24 .word 0x08017b24 - -0800bfbc : - * - * Must be called periodically from your main loop. - */ -void -sys_check_timeouts(void) -{ - 800bfbc: b580 push {r7, lr} - 800bfbe: b084 sub sp, #16 - 800bfc0: af00 add r7, sp, #0 - u32_t now; - - LWIP_ASSERT_CORE_LOCKED(); - - /* Process only timers expired at the start of the function. */ - now = sys_now(); - 800bfc2: f7f8 fd77 bl 8004ab4 - 800bfc6: 60f8 str r0, [r7, #12] - do { - struct sys_timeo *tmptimeout; - sys_timeout_handler handler; - void *arg; - - PBUF_CHECK_FREE_OOSEQ(); - 800bfc8: 4b1a ldr r3, [pc, #104] ; (800c034 ) - 800bfca: 781b ldrb r3, [r3, #0] - 800bfcc: b2db uxtb r3, r3 - 800bfce: 2b00 cmp r3, #0 - 800bfd0: d001 beq.n 800bfd6 - 800bfd2: f7f9 ffb7 bl 8005f44 - - tmptimeout = next_timeout; - 800bfd6: 4b18 ldr r3, [pc, #96] ; (800c038 ) - 800bfd8: 681b ldr r3, [r3, #0] - 800bfda: 60bb str r3, [r7, #8] - if (tmptimeout == NULL) { - 800bfdc: 68bb ldr r3, [r7, #8] - 800bfde: 2b00 cmp r3, #0 - 800bfe0: d022 beq.n 800c028 - return; - } - - if (TIME_LESS_THAN(now, tmptimeout->time)) { - 800bfe2: 68bb ldr r3, [r7, #8] - 800bfe4: 685b ldr r3, [r3, #4] - 800bfe6: 68fa ldr r2, [r7, #12] - 800bfe8: 1ad3 subs r3, r2, r3 - 800bfea: 0fdb lsrs r3, r3, #31 - 800bfec: f003 0301 and.w r3, r3, #1 - 800bff0: b2db uxtb r3, r3 - 800bff2: 2b00 cmp r3, #0 - 800bff4: d11a bne.n 800c02c - return; - } - - /* Timeout has expired */ - next_timeout = tmptimeout->next; - 800bff6: 68bb ldr r3, [r7, #8] - 800bff8: 681b ldr r3, [r3, #0] - 800bffa: 4a0f ldr r2, [pc, #60] ; (800c038 ) - 800bffc: 6013 str r3, [r2, #0] - handler = tmptimeout->h; - 800bffe: 68bb ldr r3, [r7, #8] - 800c000: 689b ldr r3, [r3, #8] - 800c002: 607b str r3, [r7, #4] - arg = tmptimeout->arg; - 800c004: 68bb ldr r3, [r7, #8] - 800c006: 68db ldr r3, [r3, #12] - 800c008: 603b str r3, [r7, #0] - current_timeout_due_time = tmptimeout->time; - 800c00a: 68bb ldr r3, [r7, #8] - 800c00c: 685b ldr r3, [r3, #4] - 800c00e: 4a0b ldr r2, [pc, #44] ; (800c03c ) - 800c010: 6013 str r3, [r2, #0] - if (handler != NULL) { - LWIP_DEBUGF(TIMERS_DEBUG, ("sct calling h=%s t=%"U32_F" arg=%p\n", - tmptimeout->handler_name, sys_now() - tmptimeout->time, arg)); - } -#endif /* LWIP_DEBUG_TIMERNAMES */ - memp_free(MEMP_SYS_TIMEOUT, tmptimeout); - 800c012: 68b9 ldr r1, [r7, #8] - 800c014: 2006 movs r0, #6 - 800c016: f7f9 fc4d bl 80058b4 - if (handler != NULL) { - 800c01a: 687b ldr r3, [r7, #4] - 800c01c: 2b00 cmp r3, #0 - 800c01e: d0d3 beq.n 800bfc8 - handler(arg); - 800c020: 687b ldr r3, [r7, #4] - 800c022: 6838 ldr r0, [r7, #0] - 800c024: 4798 blx r3 - do { - 800c026: e7cf b.n 800bfc8 - return; - 800c028: bf00 nop - 800c02a: e000 b.n 800c02e - return; - 800c02c: bf00 nop - } - LWIP_TCPIP_THREAD_ALIVE(); - - /* Repeat until all expired timers have been called */ - } while (1); -} - 800c02e: 3710 adds r7, #16 - 800c030: 46bd mov sp, r7 - 800c032: bd80 pop {r7, pc} - 800c034: 200099d1 .word 0x200099d1 - 800c038: 20009a24 .word 0x20009a24 - 800c03c: 20009a28 .word 0x20009a28 - -0800c040 : -/** - * Initialize this module. - */ -void -udp_init(void) -{ - 800c040: b580 push {r7, lr} - 800c042: af00 add r7, sp, #0 -#ifdef LWIP_RAND - udp_port = UDP_ENSURE_LOCAL_PORT_RANGE(LWIP_RAND()); - 800c044: f005 f842 bl 80110cc - 800c048: 4603 mov r3, r0 - 800c04a: b29b uxth r3, r3 - 800c04c: f3c3 030d ubfx r3, r3, #0, #14 - 800c050: b29b uxth r3, r3 - 800c052: f5a3 4380 sub.w r3, r3, #16384 ; 0x4000 - 800c056: b29a uxth r2, r3 - 800c058: 4b01 ldr r3, [pc, #4] ; (800c060 ) - 800c05a: 801a strh r2, [r3, #0] -#endif /* LWIP_RAND */ -} - 800c05c: bf00 nop - 800c05e: bd80 pop {r7, pc} - 800c060: 20000028 .word 0x20000028 - -0800c064 : - * - * @return a new (free) local UDP port number - */ -static u16_t -udp_new_port(void) -{ - 800c064: b480 push {r7} - 800c066: b083 sub sp, #12 - 800c068: af00 add r7, sp, #0 - u16_t n = 0; - 800c06a: 2300 movs r3, #0 - 800c06c: 80fb strh r3, [r7, #6] - struct udp_pcb *pcb; - -again: - if (udp_port++ == UDP_LOCAL_PORT_RANGE_END) { - 800c06e: 4b17 ldr r3, [pc, #92] ; (800c0cc ) - 800c070: 881b ldrh r3, [r3, #0] - 800c072: 1c5a adds r2, r3, #1 - 800c074: b291 uxth r1, r2 - 800c076: 4a15 ldr r2, [pc, #84] ; (800c0cc ) - 800c078: 8011 strh r1, [r2, #0] - 800c07a: f64f 72ff movw r2, #65535 ; 0xffff - 800c07e: 4293 cmp r3, r2 - 800c080: d103 bne.n 800c08a - udp_port = UDP_LOCAL_PORT_RANGE_START; - 800c082: 4b12 ldr r3, [pc, #72] ; (800c0cc ) - 800c084: f44f 4240 mov.w r2, #49152 ; 0xc000 - 800c088: 801a strh r2, [r3, #0] - } - /* Check all PCBs. */ - for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { - 800c08a: 4b11 ldr r3, [pc, #68] ; (800c0d0 ) - 800c08c: 681b ldr r3, [r3, #0] - 800c08e: 603b str r3, [r7, #0] - 800c090: e011 b.n 800c0b6 - if (pcb->local_port == udp_port) { - 800c092: 683b ldr r3, [r7, #0] - 800c094: 8a5a ldrh r2, [r3, #18] - 800c096: 4b0d ldr r3, [pc, #52] ; (800c0cc ) - 800c098: 881b ldrh r3, [r3, #0] - 800c09a: 429a cmp r2, r3 - 800c09c: d108 bne.n 800c0b0 - if (++n > (UDP_LOCAL_PORT_RANGE_END - UDP_LOCAL_PORT_RANGE_START)) { - 800c09e: 88fb ldrh r3, [r7, #6] - 800c0a0: 3301 adds r3, #1 - 800c0a2: 80fb strh r3, [r7, #6] - 800c0a4: 88fb ldrh r3, [r7, #6] - 800c0a6: f5b3 4f80 cmp.w r3, #16384 ; 0x4000 - 800c0aa: d3e0 bcc.n 800c06e - return 0; - 800c0ac: 2300 movs r3, #0 - 800c0ae: e007 b.n 800c0c0 - for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { - 800c0b0: 683b ldr r3, [r7, #0] - 800c0b2: 68db ldr r3, [r3, #12] - 800c0b4: 603b str r3, [r7, #0] - 800c0b6: 683b ldr r3, [r7, #0] - 800c0b8: 2b00 cmp r3, #0 - 800c0ba: d1ea bne.n 800c092 - } - goto again; - } - } - return udp_port; - 800c0bc: 4b03 ldr r3, [pc, #12] ; (800c0cc ) - 800c0be: 881b ldrh r3, [r3, #0] -} - 800c0c0: 4618 mov r0, r3 - 800c0c2: 370c adds r7, #12 - 800c0c4: 46bd mov sp, r7 - 800c0c6: f85d 7b04 ldr.w r7, [sp], #4 - 800c0ca: 4770 bx lr - 800c0cc: 20000028 .word 0x20000028 - 800c0d0: 20009a30 .word 0x20009a30 - -0800c0d4 : - * @param broadcast 1 if his is an IPv4 broadcast (global or subnet-only), 0 otherwise (only used for IPv4) - * @return 1 on match, 0 otherwise - */ -static u8_t -udp_input_local_match(struct udp_pcb *pcb, struct netif *inp, u8_t broadcast) -{ - 800c0d4: b580 push {r7, lr} - 800c0d6: b084 sub sp, #16 - 800c0d8: af00 add r7, sp, #0 - 800c0da: 60f8 str r0, [r7, #12] - 800c0dc: 60b9 str r1, [r7, #8] - 800c0de: 4613 mov r3, r2 - 800c0e0: 71fb strb r3, [r7, #7] - LWIP_UNUSED_ARG(inp); /* in IPv6 only case */ - LWIP_UNUSED_ARG(broadcast); /* in IPv6 only case */ - - LWIP_ASSERT("udp_input_local_match: invalid pcb", pcb != NULL); - 800c0e2: 68fb ldr r3, [r7, #12] - 800c0e4: 2b00 cmp r3, #0 - 800c0e6: d105 bne.n 800c0f4 - 800c0e8: 4b27 ldr r3, [pc, #156] ; (800c188 ) - 800c0ea: 2287 movs r2, #135 ; 0x87 - 800c0ec: 4927 ldr r1, [pc, #156] ; (800c18c ) - 800c0ee: 4828 ldr r0, [pc, #160] ; (800c190 ) - 800c0f0: f004 ffda bl 80110a8 - LWIP_ASSERT("udp_input_local_match: invalid netif", inp != NULL); - 800c0f4: 68bb ldr r3, [r7, #8] - 800c0f6: 2b00 cmp r3, #0 - 800c0f8: d105 bne.n 800c106 - 800c0fa: 4b23 ldr r3, [pc, #140] ; (800c188 ) - 800c0fc: 2288 movs r2, #136 ; 0x88 - 800c0fe: 4925 ldr r1, [pc, #148] ; (800c194 ) - 800c100: 4823 ldr r0, [pc, #140] ; (800c190 ) - 800c102: f004 ffd1 bl 80110a8 - - /* check if PCB is bound to specific netif */ - if ((pcb->netif_idx != NETIF_NO_INDEX) && - 800c106: 68fb ldr r3, [r7, #12] - 800c108: 7a1b ldrb r3, [r3, #8] - 800c10a: 2b00 cmp r3, #0 - 800c10c: d00b beq.n 800c126 - (pcb->netif_idx != netif_get_index(ip_data.current_input_netif))) { - 800c10e: 68fb ldr r3, [r7, #12] - 800c110: 7a1a ldrb r2, [r3, #8] - 800c112: 4b21 ldr r3, [pc, #132] ; (800c198 ) - 800c114: 685b ldr r3, [r3, #4] - 800c116: f893 3034 ldrb.w r3, [r3, #52] ; 0x34 - 800c11a: 3301 adds r3, #1 - 800c11c: b2db uxtb r3, r3 - if ((pcb->netif_idx != NETIF_NO_INDEX) && - 800c11e: 429a cmp r2, r3 - 800c120: d001 beq.n 800c126 - return 0; - 800c122: 2300 movs r3, #0 - 800c124: e02b b.n 800c17e - /* Only need to check PCB if incoming IP version matches PCB IP version */ - if (IP_ADDR_PCB_VERSION_MATCH_EXACT(pcb, ip_current_dest_addr())) { -#if LWIP_IPV4 - /* Special case: IPv4 broadcast: all or broadcasts in my subnet - * Note: broadcast variable can only be 1 if it is an IPv4 broadcast */ - if (broadcast != 0) { - 800c126: 79fb ldrb r3, [r7, #7] - 800c128: 2b00 cmp r3, #0 - 800c12a: d018 beq.n 800c15e -#if IP_SOF_BROADCAST_RECV - if (ip_get_option(pcb, SOF_BROADCAST)) -#endif /* IP_SOF_BROADCAST_RECV */ - { - if (ip4_addr_isany(ip_2_ip4(&pcb->local_ip)) || - 800c12c: 68fb ldr r3, [r7, #12] - 800c12e: 2b00 cmp r3, #0 - 800c130: d013 beq.n 800c15a - 800c132: 68fb ldr r3, [r7, #12] - 800c134: 681b ldr r3, [r3, #0] - 800c136: 2b00 cmp r3, #0 - 800c138: d00f beq.n 800c15a - ((ip4_current_dest_addr()->addr == IPADDR_BROADCAST)) || - 800c13a: 4b17 ldr r3, [pc, #92] ; (800c198 ) - 800c13c: 695b ldr r3, [r3, #20] - if (ip4_addr_isany(ip_2_ip4(&pcb->local_ip)) || - 800c13e: f1b3 3fff cmp.w r3, #4294967295 - 800c142: d00a beq.n 800c15a - ip4_addr_netcmp(ip_2_ip4(&pcb->local_ip), ip4_current_dest_addr(), netif_ip4_netmask(inp))) { - 800c144: 68fb ldr r3, [r7, #12] - 800c146: 681a ldr r2, [r3, #0] - 800c148: 4b13 ldr r3, [pc, #76] ; (800c198 ) - 800c14a: 695b ldr r3, [r3, #20] - 800c14c: 405a eors r2, r3 - 800c14e: 68bb ldr r3, [r7, #8] - 800c150: 3308 adds r3, #8 - 800c152: 681b ldr r3, [r3, #0] - 800c154: 4013 ands r3, r2 - ((ip4_current_dest_addr()->addr == IPADDR_BROADCAST)) || - 800c156: 2b00 cmp r3, #0 - 800c158: d110 bne.n 800c17c - return 1; - 800c15a: 2301 movs r3, #1 - 800c15c: e00f b.n 800c17e - } - } - } else -#endif /* LWIP_IPV4 */ - /* Handle IPv4 and IPv6: all or exact match */ - if (ip_addr_isany(&pcb->local_ip) || ip_addr_cmp(&pcb->local_ip, ip_current_dest_addr())) { - 800c15e: 68fb ldr r3, [r7, #12] - 800c160: 2b00 cmp r3, #0 - 800c162: d009 beq.n 800c178 - 800c164: 68fb ldr r3, [r7, #12] - 800c166: 681b ldr r3, [r3, #0] - 800c168: 2b00 cmp r3, #0 - 800c16a: d005 beq.n 800c178 - 800c16c: 68fb ldr r3, [r7, #12] - 800c16e: 681a ldr r2, [r3, #0] - 800c170: 4b09 ldr r3, [pc, #36] ; (800c198 ) - 800c172: 695b ldr r3, [r3, #20] - 800c174: 429a cmp r2, r3 - 800c176: d101 bne.n 800c17c - return 1; - 800c178: 2301 movs r3, #1 - 800c17a: e000 b.n 800c17e - } - } - - return 0; - 800c17c: 2300 movs r3, #0 -} - 800c17e: 4618 mov r0, r3 - 800c180: 3710 adds r7, #16 - 800c182: 46bd mov sp, r7 - 800c184: bd80 pop {r7, pc} - 800c186: bf00 nop - 800c188: 08017b98 .word 0x08017b98 - 800c18c: 08017bc8 .word 0x08017bc8 - 800c190: 08017bec .word 0x08017bec - 800c194: 08017c14 .word 0x08017c14 - 800c198: 20006444 .word 0x20006444 - -0800c19c : - * @param inp network interface on which the datagram was received. - * - */ -void -udp_input(struct pbuf *p, struct netif *inp) -{ - 800c19c: b590 push {r4, r7, lr} - 800c19e: b08d sub sp, #52 ; 0x34 - 800c1a0: af02 add r7, sp, #8 - 800c1a2: 6078 str r0, [r7, #4] - 800c1a4: 6039 str r1, [r7, #0] - struct udp_hdr *udphdr; - struct udp_pcb *pcb, *prev; - struct udp_pcb *uncon_pcb; - u16_t src, dest; - u8_t broadcast; - u8_t for_us = 0; - 800c1a6: 2300 movs r3, #0 - 800c1a8: 76fb strb r3, [r7, #27] - - LWIP_UNUSED_ARG(inp); - - LWIP_ASSERT_CORE_LOCKED(); - - LWIP_ASSERT("udp_input: invalid pbuf", p != NULL); - 800c1aa: 687b ldr r3, [r7, #4] - 800c1ac: 2b00 cmp r3, #0 - 800c1ae: d105 bne.n 800c1bc - 800c1b0: 4b7c ldr r3, [pc, #496] ; (800c3a4 ) - 800c1b2: 22cf movs r2, #207 ; 0xcf - 800c1b4: 497c ldr r1, [pc, #496] ; (800c3a8 ) - 800c1b6: 487d ldr r0, [pc, #500] ; (800c3ac ) - 800c1b8: f004 ff76 bl 80110a8 - LWIP_ASSERT("udp_input: invalid netif", inp != NULL); - 800c1bc: 683b ldr r3, [r7, #0] - 800c1be: 2b00 cmp r3, #0 - 800c1c0: d105 bne.n 800c1ce - 800c1c2: 4b78 ldr r3, [pc, #480] ; (800c3a4 ) - 800c1c4: 22d0 movs r2, #208 ; 0xd0 - 800c1c6: 497a ldr r1, [pc, #488] ; (800c3b0 ) - 800c1c8: 4878 ldr r0, [pc, #480] ; (800c3ac ) - 800c1ca: f004 ff6d bl 80110a8 - PERF_START; - - UDP_STATS_INC(udp.recv); - - /* Check minimum length (UDP header) */ - if (p->len < UDP_HLEN) { - 800c1ce: 687b ldr r3, [r7, #4] - 800c1d0: 895b ldrh r3, [r3, #10] - 800c1d2: 2b07 cmp r3, #7 - 800c1d4: d803 bhi.n 800c1de - LWIP_DEBUGF(UDP_DEBUG, - ("udp_input: short UDP datagram (%"U16_F" bytes) discarded\n", p->tot_len)); - UDP_STATS_INC(udp.lenerr); - UDP_STATS_INC(udp.drop); - MIB2_STATS_INC(mib2.udpinerrors); - pbuf_free(p); - 800c1d6: 6878 ldr r0, [r7, #4] - 800c1d8: f7fa f9ee bl 80065b8 - goto end; - 800c1dc: e0de b.n 800c39c - } - - udphdr = (struct udp_hdr *)p->payload; - 800c1de: 687b ldr r3, [r7, #4] - 800c1e0: 685b ldr r3, [r3, #4] - 800c1e2: 617b str r3, [r7, #20] - - /* is broadcast packet ? */ - broadcast = ip_addr_isbroadcast(ip_current_dest_addr(), ip_current_netif()); - 800c1e4: 4b73 ldr r3, [pc, #460] ; (800c3b4 ) - 800c1e6: 695b ldr r3, [r3, #20] - 800c1e8: 4a72 ldr r2, [pc, #456] ; (800c3b4 ) - 800c1ea: 6812 ldr r2, [r2, #0] - 800c1ec: 4611 mov r1, r2 - 800c1ee: 4618 mov r0, r3 - 800c1f0: f003 fe62 bl 800feb8 - 800c1f4: 4603 mov r3, r0 - 800c1f6: 74fb strb r3, [r7, #19] - - LWIP_DEBUGF(UDP_DEBUG, ("udp_input: received datagram of length %"U16_F"\n", p->tot_len)); - - /* convert src and dest ports to host byte order */ - src = lwip_ntohs(udphdr->src); - 800c1f8: 697b ldr r3, [r7, #20] - 800c1fa: 881b ldrh r3, [r3, #0] - 800c1fc: b29b uxth r3, r3 - 800c1fe: 4618 mov r0, r3 - 800c200: f7f8 fe70 bl 8004ee4 - 800c204: 4603 mov r3, r0 - 800c206: 823b strh r3, [r7, #16] - dest = lwip_ntohs(udphdr->dest); - 800c208: 697b ldr r3, [r7, #20] - 800c20a: 885b ldrh r3, [r3, #2] - 800c20c: b29b uxth r3, r3 - 800c20e: 4618 mov r0, r3 - 800c210: f7f8 fe68 bl 8004ee4 - 800c214: 4603 mov r3, r0 - 800c216: 81fb strh r3, [r7, #14] - ip_addr_debug_print_val(UDP_DEBUG, *ip_current_dest_addr()); - LWIP_DEBUGF(UDP_DEBUG, (", %"U16_F") <-- (", lwip_ntohs(udphdr->dest))); - ip_addr_debug_print_val(UDP_DEBUG, *ip_current_src_addr()); - LWIP_DEBUGF(UDP_DEBUG, (", %"U16_F")\n", lwip_ntohs(udphdr->src))); - - pcb = NULL; - 800c218: 2300 movs r3, #0 - 800c21a: 627b str r3, [r7, #36] ; 0x24 - prev = NULL; - 800c21c: 2300 movs r3, #0 - 800c21e: 623b str r3, [r7, #32] - uncon_pcb = NULL; - 800c220: 2300 movs r3, #0 - 800c222: 61fb str r3, [r7, #28] - /* Iterate through the UDP pcb list for a matching pcb. - * 'Perfect match' pcbs (connected to the remote port & ip address) are - * preferred. If no perfect match is found, the first unconnected pcb that - * matches the local port and ip address gets the datagram. */ - for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { - 800c224: 4b64 ldr r3, [pc, #400] ; (800c3b8 ) - 800c226: 681b ldr r3, [r3, #0] - 800c228: 627b str r3, [r7, #36] ; 0x24 - 800c22a: e054 b.n 800c2d6 - LWIP_DEBUGF(UDP_DEBUG, (", %"U16_F") <-- (", pcb->local_port)); - ip_addr_debug_print_val(UDP_DEBUG, pcb->remote_ip); - LWIP_DEBUGF(UDP_DEBUG, (", %"U16_F")\n", pcb->remote_port)); - - /* compare PCB local addr+port to UDP destination addr+port */ - if ((pcb->local_port == dest) && - 800c22c: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c22e: 8a5b ldrh r3, [r3, #18] - 800c230: 89fa ldrh r2, [r7, #14] - 800c232: 429a cmp r2, r3 - 800c234: d14a bne.n 800c2cc - (udp_input_local_match(pcb, inp, broadcast) != 0)) { - 800c236: 7cfb ldrb r3, [r7, #19] - 800c238: 461a mov r2, r3 - 800c23a: 6839 ldr r1, [r7, #0] - 800c23c: 6a78 ldr r0, [r7, #36] ; 0x24 - 800c23e: f7ff ff49 bl 800c0d4 - 800c242: 4603 mov r3, r0 - if ((pcb->local_port == dest) && - 800c244: 2b00 cmp r3, #0 - 800c246: d041 beq.n 800c2cc - if ((pcb->flags & UDP_FLAGS_CONNECTED) == 0) { - 800c248: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c24a: 7c1b ldrb r3, [r3, #16] - 800c24c: f003 0304 and.w r3, r3, #4 - 800c250: 2b00 cmp r3, #0 - 800c252: d11d bne.n 800c290 - if (uncon_pcb == NULL) { - 800c254: 69fb ldr r3, [r7, #28] - 800c256: 2b00 cmp r3, #0 - 800c258: d102 bne.n 800c260 - /* the first unconnected matching PCB */ - uncon_pcb = pcb; - 800c25a: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c25c: 61fb str r3, [r7, #28] - 800c25e: e017 b.n 800c290 -#if LWIP_IPV4 - } else if (broadcast && ip4_current_dest_addr()->addr == IPADDR_BROADCAST) { - 800c260: 7cfb ldrb r3, [r7, #19] - 800c262: 2b00 cmp r3, #0 - 800c264: d014 beq.n 800c290 - 800c266: 4b53 ldr r3, [pc, #332] ; (800c3b4 ) - 800c268: 695b ldr r3, [r3, #20] - 800c26a: f1b3 3fff cmp.w r3, #4294967295 - 800c26e: d10f bne.n 800c290 - /* global broadcast address (only valid for IPv4; match was checked before) */ - if (!IP_IS_V4_VAL(uncon_pcb->local_ip) || !ip4_addr_cmp(ip_2_ip4(&uncon_pcb->local_ip), netif_ip4_addr(inp))) { - 800c270: 69fb ldr r3, [r7, #28] - 800c272: 681a ldr r2, [r3, #0] - 800c274: 683b ldr r3, [r7, #0] - 800c276: 3304 adds r3, #4 - 800c278: 681b ldr r3, [r3, #0] - 800c27a: 429a cmp r2, r3 - 800c27c: d008 beq.n 800c290 - /* uncon_pcb does not match the input netif, check this pcb */ - if (IP_IS_V4_VAL(pcb->local_ip) && ip4_addr_cmp(ip_2_ip4(&pcb->local_ip), netif_ip4_addr(inp))) { - 800c27e: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c280: 681a ldr r2, [r3, #0] - 800c282: 683b ldr r3, [r7, #0] - 800c284: 3304 adds r3, #4 - 800c286: 681b ldr r3, [r3, #0] - 800c288: 429a cmp r2, r3 - 800c28a: d101 bne.n 800c290 - /* better match */ - uncon_pcb = pcb; - 800c28c: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c28e: 61fb str r3, [r7, #28] - } -#endif /* SO_REUSE */ - } - - /* compare PCB remote addr+port to UDP source addr+port */ - if ((pcb->remote_port == src) && - 800c290: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c292: 8a9b ldrh r3, [r3, #20] - 800c294: 8a3a ldrh r2, [r7, #16] - 800c296: 429a cmp r2, r3 - 800c298: d118 bne.n 800c2cc - (ip_addr_isany_val(pcb->remote_ip) || - 800c29a: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c29c: 685b ldr r3, [r3, #4] - if ((pcb->remote_port == src) && - 800c29e: 2b00 cmp r3, #0 - 800c2a0: d005 beq.n 800c2ae - ip_addr_cmp(&pcb->remote_ip, ip_current_src_addr()))) { - 800c2a2: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c2a4: 685a ldr r2, [r3, #4] - 800c2a6: 4b43 ldr r3, [pc, #268] ; (800c3b4 ) - 800c2a8: 691b ldr r3, [r3, #16] - (ip_addr_isany_val(pcb->remote_ip) || - 800c2aa: 429a cmp r2, r3 - 800c2ac: d10e bne.n 800c2cc - /* the first fully matching PCB */ - if (prev != NULL) { - 800c2ae: 6a3b ldr r3, [r7, #32] - 800c2b0: 2b00 cmp r3, #0 - 800c2b2: d014 beq.n 800c2de - /* move the pcb to the front of udp_pcbs so that is - found faster next time */ - prev->next = pcb->next; - 800c2b4: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c2b6: 68da ldr r2, [r3, #12] - 800c2b8: 6a3b ldr r3, [r7, #32] - 800c2ba: 60da str r2, [r3, #12] - pcb->next = udp_pcbs; - 800c2bc: 4b3e ldr r3, [pc, #248] ; (800c3b8 ) - 800c2be: 681a ldr r2, [r3, #0] - 800c2c0: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c2c2: 60da str r2, [r3, #12] - udp_pcbs = pcb; - 800c2c4: 4a3c ldr r2, [pc, #240] ; (800c3b8 ) - 800c2c6: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c2c8: 6013 str r3, [r2, #0] - } else { - UDP_STATS_INC(udp.cachehit); - } - break; - 800c2ca: e008 b.n 800c2de - } - } - - prev = pcb; - 800c2cc: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c2ce: 623b str r3, [r7, #32] - for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { - 800c2d0: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c2d2: 68db ldr r3, [r3, #12] - 800c2d4: 627b str r3, [r7, #36] ; 0x24 - 800c2d6: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c2d8: 2b00 cmp r3, #0 - 800c2da: d1a7 bne.n 800c22c - 800c2dc: e000 b.n 800c2e0 - break; - 800c2de: bf00 nop - } - /* no fully matching pcb found? then look for an unconnected pcb */ - if (pcb == NULL) { - 800c2e0: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c2e2: 2b00 cmp r3, #0 - 800c2e4: d101 bne.n 800c2ea - pcb = uncon_pcb; - 800c2e6: 69fb ldr r3, [r7, #28] - 800c2e8: 627b str r3, [r7, #36] ; 0x24 - } - - /* Check checksum if this is a match or if it was directed at us. */ - if (pcb != NULL) { - 800c2ea: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c2ec: 2b00 cmp r3, #0 - 800c2ee: d002 beq.n 800c2f6 - for_us = 1; - 800c2f0: 2301 movs r3, #1 - 800c2f2: 76fb strb r3, [r7, #27] - 800c2f4: e00a b.n 800c30c - for_us = netif_get_ip6_addr_match(inp, ip6_current_dest_addr()) >= 0; - } -#endif /* LWIP_IPV6 */ -#if LWIP_IPV4 - if (!ip_current_is_v6()) { - for_us = ip4_addr_cmp(netif_ip4_addr(inp), ip4_current_dest_addr()); - 800c2f6: 683b ldr r3, [r7, #0] - 800c2f8: 3304 adds r3, #4 - 800c2fa: 681a ldr r2, [r3, #0] - 800c2fc: 4b2d ldr r3, [pc, #180] ; (800c3b4 ) - 800c2fe: 695b ldr r3, [r3, #20] - 800c300: 429a cmp r2, r3 - 800c302: bf0c ite eq - 800c304: 2301 moveq r3, #1 - 800c306: 2300 movne r3, #0 - 800c308: b2db uxtb r3, r3 - 800c30a: 76fb strb r3, [r7, #27] - } -#endif /* LWIP_IPV4 */ - } - - if (for_us) { - 800c30c: 7efb ldrb r3, [r7, #27] - 800c30e: 2b00 cmp r3, #0 - 800c310: d041 beq.n 800c396 - } - } - } - } -#endif /* CHECKSUM_CHECK_UDP */ - if (pbuf_remove_header(p, UDP_HLEN)) { - 800c312: 2108 movs r1, #8 - 800c314: 6878 ldr r0, [r7, #4] - 800c316: f7fa f8c9 bl 80064ac - 800c31a: 4603 mov r3, r0 - 800c31c: 2b00 cmp r3, #0 - 800c31e: d00a beq.n 800c336 - /* Can we cope with this failing? Just assert for now */ - LWIP_ASSERT("pbuf_remove_header failed\n", 0); - 800c320: 4b20 ldr r3, [pc, #128] ; (800c3a4 ) - 800c322: f44f 72b8 mov.w r2, #368 ; 0x170 - 800c326: 4925 ldr r1, [pc, #148] ; (800c3bc ) - 800c328: 4820 ldr r0, [pc, #128] ; (800c3ac ) - 800c32a: f004 febd bl 80110a8 - UDP_STATS_INC(udp.drop); - MIB2_STATS_INC(mib2.udpinerrors); - pbuf_free(p); - 800c32e: 6878 ldr r0, [r7, #4] - 800c330: f7fa f942 bl 80065b8 - goto end; - 800c334: e032 b.n 800c39c - } - - if (pcb != NULL) { - 800c336: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c338: 2b00 cmp r3, #0 - 800c33a: d012 beq.n 800c362 - } - } - } -#endif /* SO_REUSE && SO_REUSE_RXTOALL */ - /* callback */ - if (pcb->recv != NULL) { - 800c33c: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c33e: 699b ldr r3, [r3, #24] - 800c340: 2b00 cmp r3, #0 - 800c342: d00a beq.n 800c35a - /* now the recv function is responsible for freeing p */ - pcb->recv(pcb->recv_arg, pcb, p, ip_current_src_addr(), src); - 800c344: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c346: 699c ldr r4, [r3, #24] - 800c348: 6a7b ldr r3, [r7, #36] ; 0x24 - 800c34a: 69d8 ldr r0, [r3, #28] - 800c34c: 8a3b ldrh r3, [r7, #16] - 800c34e: 9300 str r3, [sp, #0] - 800c350: 4b1b ldr r3, [pc, #108] ; (800c3c0 ) - 800c352: 687a ldr r2, [r7, #4] - 800c354: 6a79 ldr r1, [r7, #36] ; 0x24 - 800c356: 47a0 blx r4 - } else { - pbuf_free(p); - } -end: - PERF_STOP("udp_input"); - return; - 800c358: e021 b.n 800c39e - pbuf_free(p); - 800c35a: 6878 ldr r0, [r7, #4] - 800c35c: f7fa f92c bl 80065b8 - goto end; - 800c360: e01c b.n 800c39c - if (!broadcast && !ip_addr_ismulticast(ip_current_dest_addr())) { - 800c362: 7cfb ldrb r3, [r7, #19] - 800c364: 2b00 cmp r3, #0 - 800c366: d112 bne.n 800c38e - 800c368: 4b12 ldr r3, [pc, #72] ; (800c3b4 ) - 800c36a: 695b ldr r3, [r3, #20] - 800c36c: f003 03f0 and.w r3, r3, #240 ; 0xf0 - 800c370: 2be0 cmp r3, #224 ; 0xe0 - 800c372: d00c beq.n 800c38e - pbuf_header_force(p, (s16_t)(ip_current_header_tot_len() + UDP_HLEN)); - 800c374: 4b0f ldr r3, [pc, #60] ; (800c3b4 ) - 800c376: 899b ldrh r3, [r3, #12] - 800c378: 3308 adds r3, #8 - 800c37a: b29b uxth r3, r3 - 800c37c: b21b sxth r3, r3 - 800c37e: 4619 mov r1, r3 - 800c380: 6878 ldr r0, [r7, #4] - 800c382: f7fa f906 bl 8006592 - icmp_port_unreach(ip_current_is_v6(), p); - 800c386: 2103 movs r1, #3 - 800c388: 6878 ldr r0, [r7, #4] - 800c38a: f003 fa57 bl 800f83c - pbuf_free(p); - 800c38e: 6878 ldr r0, [r7, #4] - 800c390: f7fa f912 bl 80065b8 - return; - 800c394: e003 b.n 800c39e - pbuf_free(p); - 800c396: 6878 ldr r0, [r7, #4] - 800c398: f7fa f90e bl 80065b8 - return; - 800c39c: bf00 nop - UDP_STATS_INC(udp.drop); - MIB2_STATS_INC(mib2.udpinerrors); - pbuf_free(p); - PERF_STOP("udp_input"); -#endif /* CHECKSUM_CHECK_UDP */ -} - 800c39e: 372c adds r7, #44 ; 0x2c - 800c3a0: 46bd mov sp, r7 - 800c3a2: bd90 pop {r4, r7, pc} - 800c3a4: 08017b98 .word 0x08017b98 - 800c3a8: 08017c3c .word 0x08017c3c - 800c3ac: 08017bec .word 0x08017bec - 800c3b0: 08017c54 .word 0x08017c54 - 800c3b4: 20006444 .word 0x20006444 - 800c3b8: 20009a30 .word 0x20009a30 - 800c3bc: 08017c70 .word 0x08017c70 - 800c3c0: 20006454 .word 0x20006454 - -0800c3c4 : - * @see udp_disconnect() udp_send() - */ -err_t -udp_sendto(struct udp_pcb *pcb, struct pbuf *p, - const ip_addr_t *dst_ip, u16_t dst_port) -{ - 800c3c4: b580 push {r7, lr} - 800c3c6: b088 sub sp, #32 - 800c3c8: af02 add r7, sp, #8 - 800c3ca: 60f8 str r0, [r7, #12] - 800c3cc: 60b9 str r1, [r7, #8] - 800c3ce: 607a str r2, [r7, #4] - 800c3d0: 807b strh r3, [r7, #2] - u16_t dst_port, u8_t have_chksum, u16_t chksum) -{ -#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */ - struct netif *netif; - - LWIP_ERROR("udp_sendto: invalid pcb", pcb != NULL, return ERR_ARG); - 800c3d2: 68fb ldr r3, [r7, #12] - 800c3d4: 2b00 cmp r3, #0 - 800c3d6: d109 bne.n 800c3ec - 800c3d8: 4b23 ldr r3, [pc, #140] ; (800c468 ) - 800c3da: f44f 7206 mov.w r2, #536 ; 0x218 - 800c3de: 4923 ldr r1, [pc, #140] ; (800c46c ) - 800c3e0: 4823 ldr r0, [pc, #140] ; (800c470 ) - 800c3e2: f004 fe61 bl 80110a8 - 800c3e6: f06f 030f mvn.w r3, #15 - 800c3ea: e038 b.n 800c45e - LWIP_ERROR("udp_sendto: invalid pbuf", p != NULL, return ERR_ARG); - 800c3ec: 68bb ldr r3, [r7, #8] - 800c3ee: 2b00 cmp r3, #0 - 800c3f0: d109 bne.n 800c406 - 800c3f2: 4b1d ldr r3, [pc, #116] ; (800c468 ) - 800c3f4: f240 2219 movw r2, #537 ; 0x219 - 800c3f8: 491e ldr r1, [pc, #120] ; (800c474 ) - 800c3fa: 481d ldr r0, [pc, #116] ; (800c470 ) - 800c3fc: f004 fe54 bl 80110a8 - 800c400: f06f 030f mvn.w r3, #15 - 800c404: e02b b.n 800c45e - LWIP_ERROR("udp_sendto: invalid dst_ip", dst_ip != NULL, return ERR_ARG); - 800c406: 687b ldr r3, [r7, #4] - 800c408: 2b00 cmp r3, #0 - 800c40a: d109 bne.n 800c420 - 800c40c: 4b16 ldr r3, [pc, #88] ; (800c468 ) - 800c40e: f240 221a movw r2, #538 ; 0x21a - 800c412: 4919 ldr r1, [pc, #100] ; (800c478 ) - 800c414: 4816 ldr r0, [pc, #88] ; (800c470 ) - 800c416: f004 fe47 bl 80110a8 - 800c41a: f06f 030f mvn.w r3, #15 - 800c41e: e01e b.n 800c45e - return ERR_VAL; - } - - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_send\n")); - - if (pcb->netif_idx != NETIF_NO_INDEX) { - 800c420: 68fb ldr r3, [r7, #12] - 800c422: 7a1b ldrb r3, [r3, #8] - 800c424: 2b00 cmp r3, #0 - 800c426: d006 beq.n 800c436 - netif = netif_get_by_index(pcb->netif_idx); - 800c428: 68fb ldr r3, [r7, #12] - 800c42a: 7a1b ldrb r3, [r3, #8] - 800c42c: 4618 mov r0, r3 - 800c42e: f7f9 fd63 bl 8005ef8 - 800c432: 6178 str r0, [r7, #20] - 800c434: e003 b.n 800c43e - - if (netif == NULL) -#endif /* LWIP_MULTICAST_TX_OPTIONS */ - { - /* find the outgoing network interface for this packet */ - netif = ip_route(&pcb->local_ip, dst_ip); - 800c436: 6878 ldr r0, [r7, #4] - 800c438: f003 fa8a bl 800f950 - 800c43c: 6178 str r0, [r7, #20] - } - } - - /* no outgoing network interface could be found? */ - if (netif == NULL) { - 800c43e: 697b ldr r3, [r7, #20] - 800c440: 2b00 cmp r3, #0 - 800c442: d102 bne.n 800c44a - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: No route to ")); - ip_addr_debug_print(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, dst_ip); - LWIP_DEBUGF(UDP_DEBUG, ("\n")); - UDP_STATS_INC(udp.rterr); - return ERR_RTE; - 800c444: f06f 0303 mvn.w r3, #3 - 800c448: e009 b.n 800c45e - } -#if LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP - return udp_sendto_if_chksum(pcb, p, dst_ip, dst_port, netif, have_chksum, chksum); -#else /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */ - return udp_sendto_if(pcb, p, dst_ip, dst_port, netif); - 800c44a: 887a ldrh r2, [r7, #2] - 800c44c: 697b ldr r3, [r7, #20] - 800c44e: 9300 str r3, [sp, #0] - 800c450: 4613 mov r3, r2 - 800c452: 687a ldr r2, [r7, #4] - 800c454: 68b9 ldr r1, [r7, #8] - 800c456: 68f8 ldr r0, [r7, #12] - 800c458: f000 f810 bl 800c47c - 800c45c: 4603 mov r3, r0 -#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */ -} - 800c45e: 4618 mov r0, r3 - 800c460: 3718 adds r7, #24 - 800c462: 46bd mov sp, r7 - 800c464: bd80 pop {r7, pc} - 800c466: bf00 nop - 800c468: 08017b98 .word 0x08017b98 - 800c46c: 08017cbc .word 0x08017cbc - 800c470: 08017bec .word 0x08017bec - 800c474: 08017cd4 .word 0x08017cd4 - 800c478: 08017cf0 .word 0x08017cf0 - -0800c47c : - * @see udp_disconnect() udp_send() - */ -err_t -udp_sendto_if(struct udp_pcb *pcb, struct pbuf *p, - const ip_addr_t *dst_ip, u16_t dst_port, struct netif *netif) -{ - 800c47c: b580 push {r7, lr} - 800c47e: b088 sub sp, #32 - 800c480: af02 add r7, sp, #8 - 800c482: 60f8 str r0, [r7, #12] - 800c484: 60b9 str r1, [r7, #8] - 800c486: 607a str r2, [r7, #4] - 800c488: 807b strh r3, [r7, #2] - u16_t chksum) -{ -#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */ - const ip_addr_t *src_ip; - - LWIP_ERROR("udp_sendto_if: invalid pcb", pcb != NULL, return ERR_ARG); - 800c48a: 68fb ldr r3, [r7, #12] - 800c48c: 2b00 cmp r3, #0 - 800c48e: d109 bne.n 800c4a4 - 800c490: 4b2e ldr r3, [pc, #184] ; (800c54c ) - 800c492: f44f 7220 mov.w r2, #640 ; 0x280 - 800c496: 492e ldr r1, [pc, #184] ; (800c550 ) - 800c498: 482e ldr r0, [pc, #184] ; (800c554 ) - 800c49a: f004 fe05 bl 80110a8 - 800c49e: f06f 030f mvn.w r3, #15 - 800c4a2: e04f b.n 800c544 - LWIP_ERROR("udp_sendto_if: invalid pbuf", p != NULL, return ERR_ARG); - 800c4a4: 68bb ldr r3, [r7, #8] - 800c4a6: 2b00 cmp r3, #0 - 800c4a8: d109 bne.n 800c4be - 800c4aa: 4b28 ldr r3, [pc, #160] ; (800c54c ) - 800c4ac: f240 2281 movw r2, #641 ; 0x281 - 800c4b0: 4929 ldr r1, [pc, #164] ; (800c558 ) - 800c4b2: 4828 ldr r0, [pc, #160] ; (800c554 ) - 800c4b4: f004 fdf8 bl 80110a8 - 800c4b8: f06f 030f mvn.w r3, #15 - 800c4bc: e042 b.n 800c544 - LWIP_ERROR("udp_sendto_if: invalid dst_ip", dst_ip != NULL, return ERR_ARG); - 800c4be: 687b ldr r3, [r7, #4] - 800c4c0: 2b00 cmp r3, #0 - 800c4c2: d109 bne.n 800c4d8 - 800c4c4: 4b21 ldr r3, [pc, #132] ; (800c54c ) - 800c4c6: f240 2282 movw r2, #642 ; 0x282 - 800c4ca: 4924 ldr r1, [pc, #144] ; (800c55c ) - 800c4cc: 4821 ldr r0, [pc, #132] ; (800c554 ) - 800c4ce: f004 fdeb bl 80110a8 - 800c4d2: f06f 030f mvn.w r3, #15 - 800c4d6: e035 b.n 800c544 - LWIP_ERROR("udp_sendto_if: invalid netif", netif != NULL, return ERR_ARG); - 800c4d8: 6a3b ldr r3, [r7, #32] - 800c4da: 2b00 cmp r3, #0 - 800c4dc: d109 bne.n 800c4f2 - 800c4de: 4b1b ldr r3, [pc, #108] ; (800c54c ) - 800c4e0: f240 2283 movw r2, #643 ; 0x283 - 800c4e4: 491e ldr r1, [pc, #120] ; (800c560 ) - 800c4e6: 481b ldr r0, [pc, #108] ; (800c554 ) - 800c4e8: f004 fdde bl 80110a8 - 800c4ec: f06f 030f mvn.w r3, #15 - 800c4f0: e028 b.n 800c544 -#endif /* LWIP_IPV6 */ -#if LWIP_IPV4 && LWIP_IPV6 - else -#endif /* LWIP_IPV4 && LWIP_IPV6 */ -#if LWIP_IPV4 - if (ip4_addr_isany(ip_2_ip4(&pcb->local_ip)) || - 800c4f2: 68fb ldr r3, [r7, #12] - 800c4f4: 2b00 cmp r3, #0 - 800c4f6: d009 beq.n 800c50c - 800c4f8: 68fb ldr r3, [r7, #12] - 800c4fa: 681b ldr r3, [r3, #0] - 800c4fc: 2b00 cmp r3, #0 - 800c4fe: d005 beq.n 800c50c - ip4_addr_ismulticast(ip_2_ip4(&pcb->local_ip))) { - 800c500: 68fb ldr r3, [r7, #12] - 800c502: 681b ldr r3, [r3, #0] - 800c504: f003 03f0 and.w r3, r3, #240 ; 0xf0 - if (ip4_addr_isany(ip_2_ip4(&pcb->local_ip)) || - 800c508: 2be0 cmp r3, #224 ; 0xe0 - 800c50a: d103 bne.n 800c514 - /* if the local_ip is any or multicast - * use the outgoing network interface IP address as source address */ - src_ip = netif_ip_addr4(netif); - 800c50c: 6a3b ldr r3, [r7, #32] - 800c50e: 3304 adds r3, #4 - 800c510: 617b str r3, [r7, #20] - 800c512: e00b b.n 800c52c - } else { - /* check if UDP PCB local IP address is correct - * this could be an old address if netif->ip_addr has changed */ - if (!ip4_addr_cmp(ip_2_ip4(&(pcb->local_ip)), netif_ip4_addr(netif))) { - 800c514: 68fb ldr r3, [r7, #12] - 800c516: 681a ldr r2, [r3, #0] - 800c518: 6a3b ldr r3, [r7, #32] - 800c51a: 3304 adds r3, #4 - 800c51c: 681b ldr r3, [r3, #0] - 800c51e: 429a cmp r2, r3 - 800c520: d002 beq.n 800c528 - /* local_ip doesn't match, drop the packet */ - return ERR_RTE; - 800c522: f06f 0303 mvn.w r3, #3 - 800c526: e00d b.n 800c544 - } - /* use UDP PCB local IP address as source address */ - src_ip = &pcb->local_ip; - 800c528: 68fb ldr r3, [r7, #12] - 800c52a: 617b str r3, [r7, #20] - } -#endif /* LWIP_IPV4 */ -#if LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP - return udp_sendto_if_src_chksum(pcb, p, dst_ip, dst_port, netif, have_chksum, chksum, src_ip); -#else /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */ - return udp_sendto_if_src(pcb, p, dst_ip, dst_port, netif, src_ip); - 800c52c: 887a ldrh r2, [r7, #2] - 800c52e: 697b ldr r3, [r7, #20] - 800c530: 9301 str r3, [sp, #4] - 800c532: 6a3b ldr r3, [r7, #32] - 800c534: 9300 str r3, [sp, #0] - 800c536: 4613 mov r3, r2 - 800c538: 687a ldr r2, [r7, #4] - 800c53a: 68b9 ldr r1, [r7, #8] - 800c53c: 68f8 ldr r0, [r7, #12] - 800c53e: f000 f811 bl 800c564 - 800c542: 4603 mov r3, r0 -#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */ -} - 800c544: 4618 mov r0, r3 - 800c546: 3718 adds r7, #24 - 800c548: 46bd mov sp, r7 - 800c54a: bd80 pop {r7, pc} - 800c54c: 08017b98 .word 0x08017b98 - 800c550: 08017d0c .word 0x08017d0c - 800c554: 08017bec .word 0x08017bec - 800c558: 08017d28 .word 0x08017d28 - 800c55c: 08017d44 .word 0x08017d44 - 800c560: 08017d64 .word 0x08017d64 - -0800c564 : -/** @ingroup udp_raw - * Same as @ref udp_sendto_if, but with source address */ -err_t -udp_sendto_if_src(struct udp_pcb *pcb, struct pbuf *p, - const ip_addr_t *dst_ip, u16_t dst_port, struct netif *netif, const ip_addr_t *src_ip) -{ - 800c564: b580 push {r7, lr} - 800c566: b08c sub sp, #48 ; 0x30 - 800c568: af04 add r7, sp, #16 - 800c56a: 60f8 str r0, [r7, #12] - 800c56c: 60b9 str r1, [r7, #8] - 800c56e: 607a str r2, [r7, #4] - 800c570: 807b strh r3, [r7, #2] - u8_t ip_proto; - u8_t ttl; - - LWIP_ASSERT_CORE_LOCKED(); - - LWIP_ERROR("udp_sendto_if_src: invalid pcb", pcb != NULL, return ERR_ARG); - 800c572: 68fb ldr r3, [r7, #12] - 800c574: 2b00 cmp r3, #0 - 800c576: d109 bne.n 800c58c - 800c578: 4b65 ldr r3, [pc, #404] ; (800c710 ) - 800c57a: f240 22d1 movw r2, #721 ; 0x2d1 - 800c57e: 4965 ldr r1, [pc, #404] ; (800c714 ) - 800c580: 4865 ldr r0, [pc, #404] ; (800c718 ) - 800c582: f004 fd91 bl 80110a8 - 800c586: f06f 030f mvn.w r3, #15 - 800c58a: e0bc b.n 800c706 - LWIP_ERROR("udp_sendto_if_src: invalid pbuf", p != NULL, return ERR_ARG); - 800c58c: 68bb ldr r3, [r7, #8] - 800c58e: 2b00 cmp r3, #0 - 800c590: d109 bne.n 800c5a6 - 800c592: 4b5f ldr r3, [pc, #380] ; (800c710 ) - 800c594: f240 22d2 movw r2, #722 ; 0x2d2 - 800c598: 4960 ldr r1, [pc, #384] ; (800c71c ) - 800c59a: 485f ldr r0, [pc, #380] ; (800c718 ) - 800c59c: f004 fd84 bl 80110a8 - 800c5a0: f06f 030f mvn.w r3, #15 - 800c5a4: e0af b.n 800c706 - LWIP_ERROR("udp_sendto_if_src: invalid dst_ip", dst_ip != NULL, return ERR_ARG); - 800c5a6: 687b ldr r3, [r7, #4] - 800c5a8: 2b00 cmp r3, #0 - 800c5aa: d109 bne.n 800c5c0 - 800c5ac: 4b58 ldr r3, [pc, #352] ; (800c710 ) - 800c5ae: f240 22d3 movw r2, #723 ; 0x2d3 - 800c5b2: 495b ldr r1, [pc, #364] ; (800c720 ) - 800c5b4: 4858 ldr r0, [pc, #352] ; (800c718 ) - 800c5b6: f004 fd77 bl 80110a8 - 800c5ba: f06f 030f mvn.w r3, #15 - 800c5be: e0a2 b.n 800c706 - LWIP_ERROR("udp_sendto_if_src: invalid src_ip", src_ip != NULL, return ERR_ARG); - 800c5c0: 6afb ldr r3, [r7, #44] ; 0x2c - 800c5c2: 2b00 cmp r3, #0 - 800c5c4: d109 bne.n 800c5da - 800c5c6: 4b52 ldr r3, [pc, #328] ; (800c710 ) - 800c5c8: f44f 7235 mov.w r2, #724 ; 0x2d4 - 800c5cc: 4955 ldr r1, [pc, #340] ; (800c724 ) - 800c5ce: 4852 ldr r0, [pc, #328] ; (800c718 ) - 800c5d0: f004 fd6a bl 80110a8 - 800c5d4: f06f 030f mvn.w r3, #15 - 800c5d8: e095 b.n 800c706 - LWIP_ERROR("udp_sendto_if_src: invalid netif", netif != NULL, return ERR_ARG); - 800c5da: 6abb ldr r3, [r7, #40] ; 0x28 - 800c5dc: 2b00 cmp r3, #0 - 800c5de: d109 bne.n 800c5f4 - 800c5e0: 4b4b ldr r3, [pc, #300] ; (800c710 ) - 800c5e2: f240 22d5 movw r2, #725 ; 0x2d5 - 800c5e6: 4950 ldr r1, [pc, #320] ; (800c728 ) - 800c5e8: 484b ldr r0, [pc, #300] ; (800c718 ) - 800c5ea: f004 fd5d bl 80110a8 - 800c5ee: f06f 030f mvn.w r3, #15 - 800c5f2: e088 b.n 800c706 - return ERR_VAL; - } -#endif /* LWIP_IPV4 && IP_SOF_BROADCAST */ - - /* if the PCB is not yet bound to a port, bind it here */ - if (pcb->local_port == 0) { - 800c5f4: 68fb ldr r3, [r7, #12] - 800c5f6: 8a5b ldrh r3, [r3, #18] - 800c5f8: 2b00 cmp r3, #0 - 800c5fa: d10f bne.n 800c61c - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_send: not yet bound to a port, binding now\n")); - err = udp_bind(pcb, &pcb->local_ip, pcb->local_port); - 800c5fc: 68f9 ldr r1, [r7, #12] - 800c5fe: 68fb ldr r3, [r7, #12] - 800c600: 8a5b ldrh r3, [r3, #18] - 800c602: 461a mov r2, r3 - 800c604: 68f8 ldr r0, [r7, #12] - 800c606: f000 f893 bl 800c730 - 800c60a: 4603 mov r3, r0 - 800c60c: 76fb strb r3, [r7, #27] - if (err != ERR_OK) { - 800c60e: f997 301b ldrsb.w r3, [r7, #27] - 800c612: 2b00 cmp r3, #0 - 800c614: d002 beq.n 800c61c - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: forced port bind failed\n")); - return err; - 800c616: f997 301b ldrsb.w r3, [r7, #27] - 800c61a: e074 b.n 800c706 - } - } - - /* packet too large to add a UDP header without causing an overflow? */ - if ((u16_t)(p->tot_len + UDP_HLEN) < p->tot_len) { - 800c61c: 68bb ldr r3, [r7, #8] - 800c61e: 891b ldrh r3, [r3, #8] - 800c620: f64f 72f7 movw r2, #65527 ; 0xfff7 - 800c624: 4293 cmp r3, r2 - 800c626: d902 bls.n 800c62e - return ERR_MEM; - 800c628: f04f 33ff mov.w r3, #4294967295 - 800c62c: e06b b.n 800c706 - } - /* not enough space to add an UDP header to first pbuf in given p chain? */ - if (pbuf_add_header(p, UDP_HLEN)) { - 800c62e: 2108 movs r1, #8 - 800c630: 68b8 ldr r0, [r7, #8] - 800c632: f7f9 ff2b bl 800648c - 800c636: 4603 mov r3, r0 - 800c638: 2b00 cmp r3, #0 - 800c63a: d015 beq.n 800c668 - /* allocate header in a separate new pbuf */ - q = pbuf_alloc(PBUF_IP, UDP_HLEN, PBUF_RAM); - 800c63c: f44f 7220 mov.w r2, #640 ; 0x280 - 800c640: 2108 movs r1, #8 - 800c642: 2022 movs r0, #34 ; 0x22 - 800c644: f7f9 fcd4 bl 8005ff0 - 800c648: 61f8 str r0, [r7, #28] - /* new header pbuf could not be allocated? */ - if (q == NULL) { - 800c64a: 69fb ldr r3, [r7, #28] - 800c64c: 2b00 cmp r3, #0 - 800c64e: d102 bne.n 800c656 - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: could not allocate header\n")); - return ERR_MEM; - 800c650: f04f 33ff mov.w r3, #4294967295 - 800c654: e057 b.n 800c706 - } - if (p->tot_len != 0) { - 800c656: 68bb ldr r3, [r7, #8] - 800c658: 891b ldrh r3, [r3, #8] - 800c65a: 2b00 cmp r3, #0 - 800c65c: d006 beq.n 800c66c - /* chain header q in front of given pbuf p (only if p contains data) */ - pbuf_chain(q, p); - 800c65e: 68b9 ldr r1, [r7, #8] - 800c660: 69f8 ldr r0, [r7, #28] - 800c662: f7fa f8c1 bl 80067e8 - 800c666: e001 b.n 800c66c - LWIP_DEBUGF(UDP_DEBUG, - ("udp_send: added header pbuf %p before given pbuf %p\n", (void *)q, (void *)p)); - } else { - /* adding space for header within p succeeded */ - /* first pbuf q equals given pbuf */ - q = p; - 800c668: 68bb ldr r3, [r7, #8] - 800c66a: 61fb str r3, [r7, #28] - LWIP_DEBUGF(UDP_DEBUG, ("udp_send: added header in given pbuf %p\n", (void *)p)); - } - LWIP_ASSERT("check that first pbuf can hold struct udp_hdr", - 800c66c: 69fb ldr r3, [r7, #28] - 800c66e: 895b ldrh r3, [r3, #10] - 800c670: 2b07 cmp r3, #7 - 800c672: d806 bhi.n 800c682 - 800c674: 4b26 ldr r3, [pc, #152] ; (800c710 ) - 800c676: f240 320d movw r2, #781 ; 0x30d - 800c67a: 492c ldr r1, [pc, #176] ; (800c72c ) - 800c67c: 4826 ldr r0, [pc, #152] ; (800c718 ) - 800c67e: f004 fd13 bl 80110a8 - (q->len >= sizeof(struct udp_hdr))); - /* q now represents the packet to be sent */ - udphdr = (struct udp_hdr *)q->payload; - 800c682: 69fb ldr r3, [r7, #28] - 800c684: 685b ldr r3, [r3, #4] - 800c686: 617b str r3, [r7, #20] - udphdr->src = lwip_htons(pcb->local_port); - 800c688: 68fb ldr r3, [r7, #12] - 800c68a: 8a5b ldrh r3, [r3, #18] - 800c68c: 4618 mov r0, r3 - 800c68e: f7f8 fc29 bl 8004ee4 - 800c692: 4603 mov r3, r0 - 800c694: 461a mov r2, r3 - 800c696: 697b ldr r3, [r7, #20] - 800c698: 801a strh r2, [r3, #0] - udphdr->dest = lwip_htons(dst_port); - 800c69a: 887b ldrh r3, [r7, #2] - 800c69c: 4618 mov r0, r3 - 800c69e: f7f8 fc21 bl 8004ee4 - 800c6a2: 4603 mov r3, r0 - 800c6a4: 461a mov r2, r3 - 800c6a6: 697b ldr r3, [r7, #20] - 800c6a8: 805a strh r2, [r3, #2] - /* in UDP, 0 checksum means 'no checksum' */ - udphdr->chksum = 0x0000; - 800c6aa: 697b ldr r3, [r7, #20] - 800c6ac: 2200 movs r2, #0 - 800c6ae: 719a strb r2, [r3, #6] - 800c6b0: 2200 movs r2, #0 - 800c6b2: 71da strb r2, [r3, #7] - ip_proto = IP_PROTO_UDPLITE; - } else -#endif /* LWIP_UDPLITE */ - { /* UDP */ - LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP packet length %"U16_F"\n", q->tot_len)); - udphdr->len = lwip_htons(q->tot_len); - 800c6b4: 69fb ldr r3, [r7, #28] - 800c6b6: 891b ldrh r3, [r3, #8] - 800c6b8: 4618 mov r0, r3 - 800c6ba: f7f8 fc13 bl 8004ee4 - 800c6be: 4603 mov r3, r0 - 800c6c0: 461a mov r2, r3 - 800c6c2: 697b ldr r3, [r7, #20] - 800c6c4: 809a strh r2, [r3, #4] - } - udphdr->chksum = udpchksum; - } - } -#endif /* CHECKSUM_GEN_UDP */ - ip_proto = IP_PROTO_UDP; - 800c6c6: 2311 movs r3, #17 - 800c6c8: 74fb strb r3, [r7, #19] - - /* Determine TTL to use */ -#if LWIP_MULTICAST_TX_OPTIONS - ttl = (ip_addr_ismulticast(dst_ip) ? udp_get_multicast_ttl(pcb) : pcb->ttl); -#else /* LWIP_MULTICAST_TX_OPTIONS */ - ttl = pcb->ttl; - 800c6ca: 68fb ldr r3, [r7, #12] - 800c6cc: 7adb ldrb r3, [r3, #11] - 800c6ce: 74bb strb r3, [r7, #18] - - LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP checksum 0x%04"X16_F"\n", udphdr->chksum)); - LWIP_DEBUGF(UDP_DEBUG, ("udp_send: ip_output_if (,,,,0x%02"X16_F",)\n", (u16_t)ip_proto)); - /* output to IP */ - NETIF_SET_HINTS(netif, &(pcb->netif_hints)); - err = ip_output_if_src(q, src_ip, dst_ip, ttl, pcb->tos, ip_proto, netif); - 800c6d0: 68fb ldr r3, [r7, #12] - 800c6d2: 7a9b ldrb r3, [r3, #10] - 800c6d4: 7cb9 ldrb r1, [r7, #18] - 800c6d6: 6aba ldr r2, [r7, #40] ; 0x28 - 800c6d8: 9202 str r2, [sp, #8] - 800c6da: 7cfa ldrb r2, [r7, #19] - 800c6dc: 9201 str r2, [sp, #4] - 800c6de: 9300 str r3, [sp, #0] - 800c6e0: 460b mov r3, r1 - 800c6e2: 687a ldr r2, [r7, #4] - 800c6e4: 6af9 ldr r1, [r7, #44] ; 0x2c - 800c6e6: 69f8 ldr r0, [r7, #28] - 800c6e8: f003 fb38 bl 800fd5c - 800c6ec: 4603 mov r3, r0 - 800c6ee: 76fb strb r3, [r7, #27] - - /* @todo: must this be increased even if error occurred? */ - MIB2_STATS_INC(mib2.udpoutdatagrams); - - /* did we chain a separate header pbuf earlier? */ - if (q != p) { - 800c6f0: 69fa ldr r2, [r7, #28] - 800c6f2: 68bb ldr r3, [r7, #8] - 800c6f4: 429a cmp r2, r3 - 800c6f6: d004 beq.n 800c702 - /* free the header pbuf */ - pbuf_free(q); - 800c6f8: 69f8 ldr r0, [r7, #28] - 800c6fa: f7f9 ff5d bl 80065b8 - q = NULL; - 800c6fe: 2300 movs r3, #0 - 800c700: 61fb str r3, [r7, #28] - /* p is still referenced by the caller, and will live on */ - } - - UDP_STATS_INC(udp.xmit); - return err; - 800c702: f997 301b ldrsb.w r3, [r7, #27] -} - 800c706: 4618 mov r0, r3 - 800c708: 3720 adds r7, #32 - 800c70a: 46bd mov sp, r7 - 800c70c: bd80 pop {r7, pc} - 800c70e: bf00 nop - 800c710: 08017b98 .word 0x08017b98 - 800c714: 08017d84 .word 0x08017d84 - 800c718: 08017bec .word 0x08017bec - 800c71c: 08017da4 .word 0x08017da4 - 800c720: 08017dc4 .word 0x08017dc4 - 800c724: 08017de8 .word 0x08017de8 - 800c728: 08017e0c .word 0x08017e0c - 800c72c: 08017e30 .word 0x08017e30 - -0800c730 : - * - * @see udp_disconnect() - */ -err_t -udp_bind(struct udp_pcb *pcb, const ip_addr_t *ipaddr, u16_t port) -{ - 800c730: b580 push {r7, lr} - 800c732: b086 sub sp, #24 - 800c734: af00 add r7, sp, #0 - 800c736: 60f8 str r0, [r7, #12] - 800c738: 60b9 str r1, [r7, #8] - 800c73a: 4613 mov r3, r2 - 800c73c: 80fb strh r3, [r7, #6] - - LWIP_ASSERT_CORE_LOCKED(); - -#if LWIP_IPV4 - /* Don't propagate NULL pointer (IPv4 ANY) to subsequent functions */ - if (ipaddr == NULL) { - 800c73e: 68bb ldr r3, [r7, #8] - 800c740: 2b00 cmp r3, #0 - 800c742: d101 bne.n 800c748 - ipaddr = IP4_ADDR_ANY; - 800c744: 4b39 ldr r3, [pc, #228] ; (800c82c ) - 800c746: 60bb str r3, [r7, #8] - } -#else /* LWIP_IPV4 */ - LWIP_ERROR("udp_bind: invalid ipaddr", ipaddr != NULL, return ERR_ARG); -#endif /* LWIP_IPV4 */ - - LWIP_ERROR("udp_bind: invalid pcb", pcb != NULL, return ERR_ARG); - 800c748: 68fb ldr r3, [r7, #12] - 800c74a: 2b00 cmp r3, #0 - 800c74c: d109 bne.n 800c762 - 800c74e: 4b38 ldr r3, [pc, #224] ; (800c830 ) - 800c750: f240 32b7 movw r2, #951 ; 0x3b7 - 800c754: 4937 ldr r1, [pc, #220] ; (800c834 ) - 800c756: 4838 ldr r0, [pc, #224] ; (800c838 ) - 800c758: f004 fca6 bl 80110a8 - 800c75c: f06f 030f mvn.w r3, #15 - 800c760: e060 b.n 800c824 - - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_bind(ipaddr = ")); - ip_addr_debug_print(UDP_DEBUG | LWIP_DBG_TRACE, ipaddr); - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, (", port = %"U16_F")\n", port)); - - rebind = 0; - 800c762: 2300 movs r3, #0 - 800c764: 74fb strb r3, [r7, #19] - /* Check for double bind and rebind of the same pcb */ - for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { - 800c766: 4b35 ldr r3, [pc, #212] ; (800c83c ) - 800c768: 681b ldr r3, [r3, #0] - 800c76a: 617b str r3, [r7, #20] - 800c76c: e009 b.n 800c782 - /* is this UDP PCB already on active list? */ - if (pcb == ipcb) { - 800c76e: 68fa ldr r2, [r7, #12] - 800c770: 697b ldr r3, [r7, #20] - 800c772: 429a cmp r2, r3 - 800c774: d102 bne.n 800c77c - rebind = 1; - 800c776: 2301 movs r3, #1 - 800c778: 74fb strb r3, [r7, #19] - break; - 800c77a: e005 b.n 800c788 - for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { - 800c77c: 697b ldr r3, [r7, #20] - 800c77e: 68db ldr r3, [r3, #12] - 800c780: 617b str r3, [r7, #20] - 800c782: 697b ldr r3, [r7, #20] - 800c784: 2b00 cmp r3, #0 - 800c786: d1f2 bne.n 800c76e - ipaddr = &zoned_ipaddr; - } -#endif /* LWIP_IPV6 && LWIP_IPV6_SCOPES */ - - /* no port specified? */ - if (port == 0) { - 800c788: 88fb ldrh r3, [r7, #6] - 800c78a: 2b00 cmp r3, #0 - 800c78c: d109 bne.n 800c7a2 - port = udp_new_port(); - 800c78e: f7ff fc69 bl 800c064 - 800c792: 4603 mov r3, r0 - 800c794: 80fb strh r3, [r7, #6] - if (port == 0) { - 800c796: 88fb ldrh r3, [r7, #6] - 800c798: 2b00 cmp r3, #0 - 800c79a: d12c bne.n 800c7f6 - /* no more ports available in local range */ - LWIP_DEBUGF(UDP_DEBUG, ("udp_bind: out of free UDP ports\n")); - return ERR_USE; - 800c79c: f06f 0307 mvn.w r3, #7 - 800c7a0: e040 b.n 800c824 - } - } else { - for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { - 800c7a2: 4b26 ldr r3, [pc, #152] ; (800c83c ) - 800c7a4: 681b ldr r3, [r3, #0] - 800c7a6: 617b str r3, [r7, #20] - 800c7a8: e022 b.n 800c7f0 - if (pcb != ipcb) { - 800c7aa: 68fa ldr r2, [r7, #12] - 800c7ac: 697b ldr r3, [r7, #20] - 800c7ae: 429a cmp r2, r3 - 800c7b0: d01b beq.n 800c7ea - if (!ip_get_option(pcb, SOF_REUSEADDR) || - !ip_get_option(ipcb, SOF_REUSEADDR)) -#endif /* SO_REUSE */ - { - /* port matches that of PCB in list and REUSEADDR not set -> reject */ - if ((ipcb->local_port == port) && - 800c7b2: 697b ldr r3, [r7, #20] - 800c7b4: 8a5b ldrh r3, [r3, #18] - 800c7b6: 88fa ldrh r2, [r7, #6] - 800c7b8: 429a cmp r2, r3 - 800c7ba: d116 bne.n 800c7ea - /* IP address matches or any IP used? */ - (ip_addr_cmp(&ipcb->local_ip, ipaddr) || ip_addr_isany(ipaddr) || - 800c7bc: 697b ldr r3, [r7, #20] - 800c7be: 681a ldr r2, [r3, #0] - 800c7c0: 68bb ldr r3, [r7, #8] - 800c7c2: 681b ldr r3, [r3, #0] - if ((ipcb->local_port == port) && - 800c7c4: 429a cmp r2, r3 - 800c7c6: d00d beq.n 800c7e4 - (ip_addr_cmp(&ipcb->local_ip, ipaddr) || ip_addr_isany(ipaddr) || - 800c7c8: 68bb ldr r3, [r7, #8] - 800c7ca: 2b00 cmp r3, #0 - 800c7cc: d00a beq.n 800c7e4 - 800c7ce: 68bb ldr r3, [r7, #8] - 800c7d0: 681b ldr r3, [r3, #0] - 800c7d2: 2b00 cmp r3, #0 - 800c7d4: d006 beq.n 800c7e4 - ip_addr_isany(&ipcb->local_ip))) { - 800c7d6: 697b ldr r3, [r7, #20] - (ip_addr_cmp(&ipcb->local_ip, ipaddr) || ip_addr_isany(ipaddr) || - 800c7d8: 2b00 cmp r3, #0 - 800c7da: d003 beq.n 800c7e4 - ip_addr_isany(&ipcb->local_ip))) { - 800c7dc: 697b ldr r3, [r7, #20] - 800c7de: 681b ldr r3, [r3, #0] - 800c7e0: 2b00 cmp r3, #0 - 800c7e2: d102 bne.n 800c7ea - /* other PCB already binds to this local IP and port */ - LWIP_DEBUGF(UDP_DEBUG, - ("udp_bind: local port %"U16_F" already bound by another pcb\n", port)); - return ERR_USE; - 800c7e4: f06f 0307 mvn.w r3, #7 - 800c7e8: e01c b.n 800c824 - for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { - 800c7ea: 697b ldr r3, [r7, #20] - 800c7ec: 68db ldr r3, [r3, #12] - 800c7ee: 617b str r3, [r7, #20] - 800c7f0: 697b ldr r3, [r7, #20] - 800c7f2: 2b00 cmp r3, #0 - 800c7f4: d1d9 bne.n 800c7aa - } - } - } - } - - ip_addr_set_ipaddr(&pcb->local_ip, ipaddr); - 800c7f6: 68bb ldr r3, [r7, #8] - 800c7f8: 2b00 cmp r3, #0 - 800c7fa: d002 beq.n 800c802 - 800c7fc: 68bb ldr r3, [r7, #8] - 800c7fe: 681b ldr r3, [r3, #0] - 800c800: e000 b.n 800c804 - 800c802: 2300 movs r3, #0 - 800c804: 68fa ldr r2, [r7, #12] - 800c806: 6013 str r3, [r2, #0] - - pcb->local_port = port; - 800c808: 68fb ldr r3, [r7, #12] - 800c80a: 88fa ldrh r2, [r7, #6] - 800c80c: 825a strh r2, [r3, #18] - mib2_udp_bind(pcb); - /* pcb not active yet? */ - if (rebind == 0) { - 800c80e: 7cfb ldrb r3, [r7, #19] - 800c810: 2b00 cmp r3, #0 - 800c812: d106 bne.n 800c822 - /* place the PCB on the active list if not already there */ - pcb->next = udp_pcbs; - 800c814: 4b09 ldr r3, [pc, #36] ; (800c83c ) - 800c816: 681a ldr r2, [r3, #0] - 800c818: 68fb ldr r3, [r7, #12] - 800c81a: 60da str r2, [r3, #12] - udp_pcbs = pcb; - 800c81c: 4a07 ldr r2, [pc, #28] ; (800c83c ) - 800c81e: 68fb ldr r3, [r7, #12] - 800c820: 6013 str r3, [r2, #0] - } - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("udp_bind: bound to ")); - ip_addr_debug_print_val(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, pcb->local_ip); - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, (", port %"U16_F")\n", pcb->local_port)); - return ERR_OK; - 800c822: 2300 movs r3, #0 -} - 800c824: 4618 mov r0, r3 - 800c826: 3718 adds r7, #24 - 800c828: 46bd mov sp, r7 - 800c82a: bd80 pop {r7, pc} - 800c82c: 08018acc .word 0x08018acc - 800c830: 08017b98 .word 0x08017b98 - 800c834: 08017e60 .word 0x08017e60 - 800c838: 08017bec .word 0x08017bec - 800c83c: 20009a30 .word 0x20009a30 - -0800c840 : - * - * @see udp_disconnect() - */ -err_t -udp_connect(struct udp_pcb *pcb, const ip_addr_t *ipaddr, u16_t port) -{ - 800c840: b580 push {r7, lr} - 800c842: b086 sub sp, #24 - 800c844: af00 add r7, sp, #0 - 800c846: 60f8 str r0, [r7, #12] - 800c848: 60b9 str r1, [r7, #8] - 800c84a: 4613 mov r3, r2 - 800c84c: 80fb strh r3, [r7, #6] - struct udp_pcb *ipcb; - - LWIP_ASSERT_CORE_LOCKED(); - - LWIP_ERROR("udp_connect: invalid pcb", pcb != NULL, return ERR_ARG); - 800c84e: 68fb ldr r3, [r7, #12] - 800c850: 2b00 cmp r3, #0 - 800c852: d109 bne.n 800c868 - 800c854: 4b2c ldr r3, [pc, #176] ; (800c908 ) - 800c856: f240 4235 movw r2, #1077 ; 0x435 - 800c85a: 492c ldr r1, [pc, #176] ; (800c90c ) - 800c85c: 482c ldr r0, [pc, #176] ; (800c910 ) - 800c85e: f004 fc23 bl 80110a8 - 800c862: f06f 030f mvn.w r3, #15 - 800c866: e04b b.n 800c900 - LWIP_ERROR("udp_connect: invalid ipaddr", ipaddr != NULL, return ERR_ARG); - 800c868: 68bb ldr r3, [r7, #8] - 800c86a: 2b00 cmp r3, #0 - 800c86c: d109 bne.n 800c882 - 800c86e: 4b26 ldr r3, [pc, #152] ; (800c908 ) - 800c870: f240 4236 movw r2, #1078 ; 0x436 - 800c874: 4927 ldr r1, [pc, #156] ; (800c914 ) - 800c876: 4826 ldr r0, [pc, #152] ; (800c910 ) - 800c878: f004 fc16 bl 80110a8 - 800c87c: f06f 030f mvn.w r3, #15 - 800c880: e03e b.n 800c900 - - if (pcb->local_port == 0) { - 800c882: 68fb ldr r3, [r7, #12] - 800c884: 8a5b ldrh r3, [r3, #18] - 800c886: 2b00 cmp r3, #0 - 800c888: d10f bne.n 800c8aa - err_t err = udp_bind(pcb, &pcb->local_ip, pcb->local_port); - 800c88a: 68f9 ldr r1, [r7, #12] - 800c88c: 68fb ldr r3, [r7, #12] - 800c88e: 8a5b ldrh r3, [r3, #18] - 800c890: 461a mov r2, r3 - 800c892: 68f8 ldr r0, [r7, #12] - 800c894: f7ff ff4c bl 800c730 - 800c898: 4603 mov r3, r0 - 800c89a: 74fb strb r3, [r7, #19] - if (err != ERR_OK) { - 800c89c: f997 3013 ldrsb.w r3, [r7, #19] - 800c8a0: 2b00 cmp r3, #0 - 800c8a2: d002 beq.n 800c8aa - return err; - 800c8a4: f997 3013 ldrsb.w r3, [r7, #19] - 800c8a8: e02a b.n 800c900 - } - } - - ip_addr_set_ipaddr(&pcb->remote_ip, ipaddr); - 800c8aa: 68bb ldr r3, [r7, #8] - 800c8ac: 2b00 cmp r3, #0 - 800c8ae: d002 beq.n 800c8b6 - 800c8b0: 68bb ldr r3, [r7, #8] - 800c8b2: 681b ldr r3, [r3, #0] - 800c8b4: e000 b.n 800c8b8 - 800c8b6: 2300 movs r3, #0 - 800c8b8: 68fa ldr r2, [r7, #12] - 800c8ba: 6053 str r3, [r2, #4] - ip6_addr_lacks_zone(ip_2_ip6(&pcb->remote_ip), IP6_UNKNOWN)) { - ip6_addr_select_zone(ip_2_ip6(&pcb->remote_ip), ip_2_ip6(&pcb->local_ip)); - } -#endif /* LWIP_IPV6 && LWIP_IPV6_SCOPES */ - - pcb->remote_port = port; - 800c8bc: 68fb ldr r3, [r7, #12] - 800c8be: 88fa ldrh r2, [r7, #6] - 800c8c0: 829a strh r2, [r3, #20] - pcb->flags |= UDP_FLAGS_CONNECTED; - 800c8c2: 68fb ldr r3, [r7, #12] - 800c8c4: 7c1b ldrb r3, [r3, #16] - 800c8c6: f043 0304 orr.w r3, r3, #4 - 800c8ca: b2da uxtb r2, r3 - 800c8cc: 68fb ldr r3, [r7, #12] - 800c8ce: 741a strb r2, [r3, #16] - ip_addr_debug_print_val(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - pcb->remote_ip); - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, (", port %"U16_F")\n", pcb->remote_port)); - - /* Insert UDP PCB into the list of active UDP PCBs. */ - for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { - 800c8d0: 4b11 ldr r3, [pc, #68] ; (800c918 ) - 800c8d2: 681b ldr r3, [r3, #0] - 800c8d4: 617b str r3, [r7, #20] - 800c8d6: e008 b.n 800c8ea - if (pcb == ipcb) { - 800c8d8: 68fa ldr r2, [r7, #12] - 800c8da: 697b ldr r3, [r7, #20] - 800c8dc: 429a cmp r2, r3 - 800c8de: d101 bne.n 800c8e4 - /* already on the list, just return */ - return ERR_OK; - 800c8e0: 2300 movs r3, #0 - 800c8e2: e00d b.n 800c900 - for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { - 800c8e4: 697b ldr r3, [r7, #20] - 800c8e6: 68db ldr r3, [r3, #12] - 800c8e8: 617b str r3, [r7, #20] - 800c8ea: 697b ldr r3, [r7, #20] - 800c8ec: 2b00 cmp r3, #0 - 800c8ee: d1f3 bne.n 800c8d8 - } - } - /* PCB not yet on the list, add PCB now */ - pcb->next = udp_pcbs; - 800c8f0: 4b09 ldr r3, [pc, #36] ; (800c918 ) - 800c8f2: 681a ldr r2, [r3, #0] - 800c8f4: 68fb ldr r3, [r7, #12] - 800c8f6: 60da str r2, [r3, #12] - udp_pcbs = pcb; - 800c8f8: 4a07 ldr r2, [pc, #28] ; (800c918 ) - 800c8fa: 68fb ldr r3, [r7, #12] - 800c8fc: 6013 str r3, [r2, #0] - return ERR_OK; - 800c8fe: 2300 movs r3, #0 -} - 800c900: 4618 mov r0, r3 - 800c902: 3718 adds r7, #24 - 800c904: 46bd mov sp, r7 - 800c906: bd80 pop {r7, pc} - 800c908: 08017b98 .word 0x08017b98 - 800c90c: 08017e78 .word 0x08017e78 - 800c910: 08017bec .word 0x08017bec - 800c914: 08017e94 .word 0x08017e94 - 800c918: 20009a30 .word 0x20009a30 - -0800c91c : - * @param recv function pointer of the callback function - * @param recv_arg additional argument to pass to the callback function - */ -void -udp_recv(struct udp_pcb *pcb, udp_recv_fn recv, void *recv_arg) -{ - 800c91c: b580 push {r7, lr} - 800c91e: b084 sub sp, #16 - 800c920: af00 add r7, sp, #0 - 800c922: 60f8 str r0, [r7, #12] - 800c924: 60b9 str r1, [r7, #8] - 800c926: 607a str r2, [r7, #4] - LWIP_ASSERT_CORE_LOCKED(); - - LWIP_ERROR("udp_recv: invalid pcb", pcb != NULL, return); - 800c928: 68fb ldr r3, [r7, #12] - 800c92a: 2b00 cmp r3, #0 - 800c92c: d107 bne.n 800c93e - 800c92e: 4b08 ldr r3, [pc, #32] ; (800c950 ) - 800c930: f240 428a movw r2, #1162 ; 0x48a - 800c934: 4907 ldr r1, [pc, #28] ; (800c954 ) - 800c936: 4808 ldr r0, [pc, #32] ; (800c958 ) - 800c938: f004 fbb6 bl 80110a8 - 800c93c: e005 b.n 800c94a - - /* remember recv() callback and user data */ - pcb->recv = recv; - 800c93e: 68fb ldr r3, [r7, #12] - 800c940: 68ba ldr r2, [r7, #8] - 800c942: 619a str r2, [r3, #24] - pcb->recv_arg = recv_arg; - 800c944: 68fb ldr r3, [r7, #12] - 800c946: 687a ldr r2, [r7, #4] - 800c948: 61da str r2, [r3, #28] -} - 800c94a: 3710 adds r7, #16 - 800c94c: 46bd mov sp, r7 - 800c94e: bd80 pop {r7, pc} - 800c950: 08017b98 .word 0x08017b98 - 800c954: 08017ecc .word 0x08017ecc - 800c958: 08017bec .word 0x08017bec - -0800c95c : - * - * @see udp_new() - */ -void -udp_remove(struct udp_pcb *pcb) -{ - 800c95c: b580 push {r7, lr} - 800c95e: b084 sub sp, #16 - 800c960: af00 add r7, sp, #0 - 800c962: 6078 str r0, [r7, #4] - struct udp_pcb *pcb2; - - LWIP_ASSERT_CORE_LOCKED(); - - LWIP_ERROR("udp_remove: invalid pcb", pcb != NULL, return); - 800c964: 687b ldr r3, [r7, #4] - 800c966: 2b00 cmp r3, #0 - 800c968: d107 bne.n 800c97a - 800c96a: 4b19 ldr r3, [pc, #100] ; (800c9d0 ) - 800c96c: f240 42a1 movw r2, #1185 ; 0x4a1 - 800c970: 4918 ldr r1, [pc, #96] ; (800c9d4 ) - 800c972: 4819 ldr r0, [pc, #100] ; (800c9d8 ) - 800c974: f004 fb98 bl 80110a8 - 800c978: e026 b.n 800c9c8 - - mib2_udp_unbind(pcb); - /* pcb to be removed is first in list? */ - if (udp_pcbs == pcb) { - 800c97a: 4b18 ldr r3, [pc, #96] ; (800c9dc ) - 800c97c: 681b ldr r3, [r3, #0] - 800c97e: 687a ldr r2, [r7, #4] - 800c980: 429a cmp r2, r3 - 800c982: d105 bne.n 800c990 - /* make list start at 2nd pcb */ - udp_pcbs = udp_pcbs->next; - 800c984: 4b15 ldr r3, [pc, #84] ; (800c9dc ) - 800c986: 681b ldr r3, [r3, #0] - 800c988: 68db ldr r3, [r3, #12] - 800c98a: 4a14 ldr r2, [pc, #80] ; (800c9dc ) - 800c98c: 6013 str r3, [r2, #0] - 800c98e: e017 b.n 800c9c0 - /* pcb not 1st in list */ - } else { - for (pcb2 = udp_pcbs; pcb2 != NULL; pcb2 = pcb2->next) { - 800c990: 4b12 ldr r3, [pc, #72] ; (800c9dc ) - 800c992: 681b ldr r3, [r3, #0] - 800c994: 60fb str r3, [r7, #12] - 800c996: e010 b.n 800c9ba - /* find pcb in udp_pcbs list */ - if (pcb2->next != NULL && pcb2->next == pcb) { - 800c998: 68fb ldr r3, [r7, #12] - 800c99a: 68db ldr r3, [r3, #12] - 800c99c: 2b00 cmp r3, #0 - 800c99e: d009 beq.n 800c9b4 - 800c9a0: 68fb ldr r3, [r7, #12] - 800c9a2: 68db ldr r3, [r3, #12] - 800c9a4: 687a ldr r2, [r7, #4] - 800c9a6: 429a cmp r2, r3 - 800c9a8: d104 bne.n 800c9b4 - /* remove pcb from list */ - pcb2->next = pcb->next; - 800c9aa: 687b ldr r3, [r7, #4] - 800c9ac: 68da ldr r2, [r3, #12] - 800c9ae: 68fb ldr r3, [r7, #12] - 800c9b0: 60da str r2, [r3, #12] - break; - 800c9b2: e005 b.n 800c9c0 - for (pcb2 = udp_pcbs; pcb2 != NULL; pcb2 = pcb2->next) { - 800c9b4: 68fb ldr r3, [r7, #12] - 800c9b6: 68db ldr r3, [r3, #12] - 800c9b8: 60fb str r3, [r7, #12] - 800c9ba: 68fb ldr r3, [r7, #12] - 800c9bc: 2b00 cmp r3, #0 - 800c9be: d1eb bne.n 800c998 - } - } - } - memp_free(MEMP_UDP_PCB, pcb); - 800c9c0: 6879 ldr r1, [r7, #4] - 800c9c2: 2000 movs r0, #0 - 800c9c4: f7f8 ff76 bl 80058b4 -} - 800c9c8: 3710 adds r7, #16 - 800c9ca: 46bd mov sp, r7 - 800c9cc: bd80 pop {r7, pc} - 800c9ce: bf00 nop - 800c9d0: 08017b98 .word 0x08017b98 - 800c9d4: 08017ee4 .word 0x08017ee4 - 800c9d8: 08017bec .word 0x08017bec - 800c9dc: 20009a30 .word 0x20009a30 - -0800c9e0 : - * - * @see udp_remove() - */ -struct udp_pcb * -udp_new(void) -{ - 800c9e0: b580 push {r7, lr} - 800c9e2: b082 sub sp, #8 - 800c9e4: af00 add r7, sp, #0 - struct udp_pcb *pcb; - - LWIP_ASSERT_CORE_LOCKED(); - - pcb = (struct udp_pcb *)memp_malloc(MEMP_UDP_PCB); - 800c9e6: 2000 movs r0, #0 - 800c9e8: f7f8 fef4 bl 80057d4 - 800c9ec: 6078 str r0, [r7, #4] - /* could allocate UDP PCB? */ - if (pcb != NULL) { - 800c9ee: 687b ldr r3, [r7, #4] - 800c9f0: 2b00 cmp r3, #0 - 800c9f2: d007 beq.n 800ca04 - /* UDP Lite: by initializing to all zeroes, chksum_len is set to 0 - * which means checksum is generated over the whole datagram per default - * (recommended as default by RFC 3828). */ - /* initialize PCB to all zeroes */ - memset(pcb, 0, sizeof(struct udp_pcb)); - 800c9f4: 2220 movs r2, #32 - 800c9f6: 2100 movs r1, #0 - 800c9f8: 6878 ldr r0, [r7, #4] - 800c9fa: f004 fb4d bl 8011098 - pcb->ttl = UDP_TTL; - 800c9fe: 687b ldr r3, [r7, #4] - 800ca00: 22ff movs r2, #255 ; 0xff - 800ca02: 72da strb r2, [r3, #11] -#if LWIP_MULTICAST_TX_OPTIONS - udp_set_multicast_ttl(pcb, UDP_TTL); -#endif /* LWIP_MULTICAST_TX_OPTIONS */ - } - return pcb; - 800ca04: 687b ldr r3, [r7, #4] -} - 800ca06: 4618 mov r0, r3 - 800ca08: 3708 adds r7, #8 - 800ca0a: 46bd mov sp, r7 - 800ca0c: bd80 pop {r7, pc} - ... - -0800ca10 : - * - * @param old_addr IP address of the netif before change - * @param new_addr IP address of the netif after change - */ -void udp_netif_ip_addr_changed(const ip_addr_t *old_addr, const ip_addr_t *new_addr) -{ - 800ca10: b480 push {r7} - 800ca12: b085 sub sp, #20 - 800ca14: af00 add r7, sp, #0 - 800ca16: 6078 str r0, [r7, #4] - 800ca18: 6039 str r1, [r7, #0] - struct udp_pcb *upcb; - - if (!ip_addr_isany(old_addr) && !ip_addr_isany(new_addr)) { - 800ca1a: 687b ldr r3, [r7, #4] - 800ca1c: 2b00 cmp r3, #0 - 800ca1e: d01e beq.n 800ca5e - 800ca20: 687b ldr r3, [r7, #4] - 800ca22: 681b ldr r3, [r3, #0] - 800ca24: 2b00 cmp r3, #0 - 800ca26: d01a beq.n 800ca5e - 800ca28: 683b ldr r3, [r7, #0] - 800ca2a: 2b00 cmp r3, #0 - 800ca2c: d017 beq.n 800ca5e - 800ca2e: 683b ldr r3, [r7, #0] - 800ca30: 681b ldr r3, [r3, #0] - 800ca32: 2b00 cmp r3, #0 - 800ca34: d013 beq.n 800ca5e - for (upcb = udp_pcbs; upcb != NULL; upcb = upcb->next) { - 800ca36: 4b0d ldr r3, [pc, #52] ; (800ca6c ) - 800ca38: 681b ldr r3, [r3, #0] - 800ca3a: 60fb str r3, [r7, #12] - 800ca3c: e00c b.n 800ca58 - /* PCB bound to current local interface address? */ - if (ip_addr_cmp(&upcb->local_ip, old_addr)) { - 800ca3e: 68fb ldr r3, [r7, #12] - 800ca40: 681a ldr r2, [r3, #0] - 800ca42: 687b ldr r3, [r7, #4] - 800ca44: 681b ldr r3, [r3, #0] - 800ca46: 429a cmp r2, r3 - 800ca48: d103 bne.n 800ca52 - /* The PCB is bound to the old ipaddr and - * is set to bound to the new one instead */ - ip_addr_copy(upcb->local_ip, *new_addr); - 800ca4a: 683b ldr r3, [r7, #0] - 800ca4c: 681a ldr r2, [r3, #0] - 800ca4e: 68fb ldr r3, [r7, #12] - 800ca50: 601a str r2, [r3, #0] - for (upcb = udp_pcbs; upcb != NULL; upcb = upcb->next) { - 800ca52: 68fb ldr r3, [r7, #12] - 800ca54: 68db ldr r3, [r3, #12] - 800ca56: 60fb str r3, [r7, #12] - 800ca58: 68fb ldr r3, [r7, #12] - 800ca5a: 2b00 cmp r3, #0 - 800ca5c: d1ef bne.n 800ca3e - } - } - } -} - 800ca5e: bf00 nop - 800ca60: 3714 adds r7, #20 - 800ca62: 46bd mov sp, r7 - 800ca64: f85d 7b04 ldr.w r7, [sp], #4 - 800ca68: 4770 bx lr - 800ca6a: bf00 nop - 800ca6c: 20009a30 .word 0x20009a30 - -0800ca70 : -static void dhcp_option_trailer(u16_t options_out_len, u8_t *options, struct pbuf *p_out); - -/** Ensure DHCP PCB is allocated and bound */ -static err_t -dhcp_inc_pcb_refcount(void) -{ - 800ca70: b580 push {r7, lr} - 800ca72: af00 add r7, sp, #0 - if (dhcp_pcb_refcount == 0) { - 800ca74: 4b20 ldr r3, [pc, #128] ; (800caf8 ) - 800ca76: 781b ldrb r3, [r3, #0] - 800ca78: 2b00 cmp r3, #0 - 800ca7a: d133 bne.n 800cae4 - LWIP_ASSERT("dhcp_inc_pcb_refcount(): memory leak", dhcp_pcb == NULL); - 800ca7c: 4b1f ldr r3, [pc, #124] ; (800cafc ) - 800ca7e: 681b ldr r3, [r3, #0] - 800ca80: 2b00 cmp r3, #0 - 800ca82: d005 beq.n 800ca90 - 800ca84: 4b1e ldr r3, [pc, #120] ; (800cb00 ) - 800ca86: 22e5 movs r2, #229 ; 0xe5 - 800ca88: 491e ldr r1, [pc, #120] ; (800cb04 ) - 800ca8a: 481f ldr r0, [pc, #124] ; (800cb08 ) - 800ca8c: f004 fb0c bl 80110a8 - - /* allocate UDP PCB */ - dhcp_pcb = udp_new(); - 800ca90: f7ff ffa6 bl 800c9e0 - 800ca94: 4603 mov r3, r0 - 800ca96: 4a19 ldr r2, [pc, #100] ; (800cafc ) - 800ca98: 6013 str r3, [r2, #0] - - if (dhcp_pcb == NULL) { - 800ca9a: 4b18 ldr r3, [pc, #96] ; (800cafc ) - 800ca9c: 681b ldr r3, [r3, #0] - 800ca9e: 2b00 cmp r3, #0 - 800caa0: d102 bne.n 800caa8 - return ERR_MEM; - 800caa2: f04f 33ff mov.w r3, #4294967295 - 800caa6: e024 b.n 800caf2 - } - - ip_set_option(dhcp_pcb, SOF_BROADCAST); - 800caa8: 4b14 ldr r3, [pc, #80] ; (800cafc ) - 800caaa: 681b ldr r3, [r3, #0] - 800caac: 7a5a ldrb r2, [r3, #9] - 800caae: 4b13 ldr r3, [pc, #76] ; (800cafc ) - 800cab0: 681b ldr r3, [r3, #0] - 800cab2: f042 0220 orr.w r2, r2, #32 - 800cab6: b2d2 uxtb r2, r2 - 800cab8: 725a strb r2, [r3, #9] - - /* set up local and remote port for the pcb -> listen on all interfaces on all src/dest IPs */ - udp_bind(dhcp_pcb, IP4_ADDR_ANY, LWIP_IANA_PORT_DHCP_CLIENT); - 800caba: 4b10 ldr r3, [pc, #64] ; (800cafc ) - 800cabc: 681b ldr r3, [r3, #0] - 800cabe: 2244 movs r2, #68 ; 0x44 - 800cac0: 4912 ldr r1, [pc, #72] ; (800cb0c ) - 800cac2: 4618 mov r0, r3 - 800cac4: f7ff fe34 bl 800c730 - udp_connect(dhcp_pcb, IP4_ADDR_ANY, LWIP_IANA_PORT_DHCP_SERVER); - 800cac8: 4b0c ldr r3, [pc, #48] ; (800cafc ) - 800caca: 681b ldr r3, [r3, #0] - 800cacc: 2243 movs r2, #67 ; 0x43 - 800cace: 490f ldr r1, [pc, #60] ; (800cb0c ) - 800cad0: 4618 mov r0, r3 - 800cad2: f7ff feb5 bl 800c840 - udp_recv(dhcp_pcb, dhcp_recv, NULL); - 800cad6: 4b09 ldr r3, [pc, #36] ; (800cafc ) - 800cad8: 681b ldr r3, [r3, #0] - 800cada: 2200 movs r2, #0 - 800cadc: 490c ldr r1, [pc, #48] ; (800cb10 ) - 800cade: 4618 mov r0, r3 - 800cae0: f7ff ff1c bl 800c91c - } - - dhcp_pcb_refcount++; - 800cae4: 4b04 ldr r3, [pc, #16] ; (800caf8 ) - 800cae6: 781b ldrb r3, [r3, #0] - 800cae8: 3301 adds r3, #1 - 800caea: b2da uxtb r2, r3 - 800caec: 4b02 ldr r3, [pc, #8] ; (800caf8 ) - 800caee: 701a strb r2, [r3, #0] - - return ERR_OK; - 800caf0: 2300 movs r3, #0 -} - 800caf2: 4618 mov r0, r3 - 800caf4: bd80 pop {r7, pc} - 800caf6: bf00 nop - 800caf8: 20009a60 .word 0x20009a60 - 800cafc: 20009a5c .word 0x20009a5c - 800cb00: 08017efc .word 0x08017efc - 800cb04: 08017f34 .word 0x08017f34 - 800cb08: 08017f5c .word 0x08017f5c - 800cb0c: 08018acc .word 0x08018acc - 800cb10: 0800e3a5 .word 0x0800e3a5 - -0800cb14 : - -/** Free DHCP PCB if the last netif stops using it */ -static void -dhcp_dec_pcb_refcount(void) -{ - 800cb14: b580 push {r7, lr} - 800cb16: af00 add r7, sp, #0 - LWIP_ASSERT("dhcp_pcb_refcount(): refcount error", (dhcp_pcb_refcount > 0)); - 800cb18: 4b0e ldr r3, [pc, #56] ; (800cb54 ) - 800cb1a: 781b ldrb r3, [r3, #0] - 800cb1c: 2b00 cmp r3, #0 - 800cb1e: d105 bne.n 800cb2c - 800cb20: 4b0d ldr r3, [pc, #52] ; (800cb58 ) - 800cb22: 22ff movs r2, #255 ; 0xff - 800cb24: 490d ldr r1, [pc, #52] ; (800cb5c ) - 800cb26: 480e ldr r0, [pc, #56] ; (800cb60 ) - 800cb28: f004 fabe bl 80110a8 - dhcp_pcb_refcount--; - 800cb2c: 4b09 ldr r3, [pc, #36] ; (800cb54 ) - 800cb2e: 781b ldrb r3, [r3, #0] - 800cb30: 3b01 subs r3, #1 - 800cb32: b2da uxtb r2, r3 - 800cb34: 4b07 ldr r3, [pc, #28] ; (800cb54 ) - 800cb36: 701a strb r2, [r3, #0] - - if (dhcp_pcb_refcount == 0) { - 800cb38: 4b06 ldr r3, [pc, #24] ; (800cb54 ) - 800cb3a: 781b ldrb r3, [r3, #0] - 800cb3c: 2b00 cmp r3, #0 - 800cb3e: d107 bne.n 800cb50 - udp_remove(dhcp_pcb); - 800cb40: 4b08 ldr r3, [pc, #32] ; (800cb64 ) - 800cb42: 681b ldr r3, [r3, #0] - 800cb44: 4618 mov r0, r3 - 800cb46: f7ff ff09 bl 800c95c - dhcp_pcb = NULL; - 800cb4a: 4b06 ldr r3, [pc, #24] ; (800cb64 ) - 800cb4c: 2200 movs r2, #0 - 800cb4e: 601a str r2, [r3, #0] - } -} - 800cb50: bf00 nop - 800cb52: bd80 pop {r7, pc} - 800cb54: 20009a60 .word 0x20009a60 - 800cb58: 08017efc .word 0x08017efc - 800cb5c: 08017f84 .word 0x08017f84 - 800cb60: 08017f5c .word 0x08017f5c - 800cb64: 20009a5c .word 0x20009a5c - -0800cb68 : - * - * @param netif the netif under DHCP control - */ -static void -dhcp_handle_nak(struct netif *netif) -{ - 800cb68: b580 push {r7, lr} - 800cb6a: b084 sub sp, #16 - 800cb6c: af00 add r7, sp, #0 - 800cb6e: 6078 str r0, [r7, #4] - struct dhcp *dhcp = netif_dhcp_data(netif); - 800cb70: 687b ldr r3, [r7, #4] - 800cb72: 6a5b ldr r3, [r3, #36] ; 0x24 - 800cb74: 60fb str r3, [r7, #12] - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_nak(netif=%p) %c%c%"U16_F"\n", - (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); - /* Change to a defined state - set this before assigning the address - to ensure the callback can use dhcp_supplied_address() */ - dhcp_set_state(dhcp, DHCP_STATE_BACKING_OFF); - 800cb76: 210c movs r1, #12 - 800cb78: 68f8 ldr r0, [r7, #12] - 800cb7a: f001 f855 bl 800dc28 - /* remove IP address from interface (must no longer be used, as per RFC2131) */ - netif_set_addr(netif, IP4_ADDR_ANY4, IP4_ADDR_ANY4, IP4_ADDR_ANY4); - 800cb7e: 4b06 ldr r3, [pc, #24] ; (800cb98 ) - 800cb80: 4a05 ldr r2, [pc, #20] ; (800cb98 ) - 800cb82: 4905 ldr r1, [pc, #20] ; (800cb98 ) - 800cb84: 6878 ldr r0, [r7, #4] - 800cb86: f7f9 f837 bl 8005bf8 - /* We can immediately restart discovery */ - dhcp_discover(netif); - 800cb8a: 6878 ldr r0, [r7, #4] - 800cb8c: f000 fc48 bl 800d420 -} - 800cb90: bf00 nop - 800cb92: 3710 adds r7, #16 - 800cb94: 46bd mov sp, r7 - 800cb96: bd80 pop {r7, pc} - 800cb98: 08018acc .word 0x08018acc - -0800cb9c : - * - * @param netif the netif under DHCP control - */ -static void -dhcp_check(struct netif *netif) -{ - 800cb9c: b580 push {r7, lr} - 800cb9e: b084 sub sp, #16 - 800cba0: af00 add r7, sp, #0 - 800cba2: 6078 str r0, [r7, #4] - struct dhcp *dhcp = netif_dhcp_data(netif); - 800cba4: 687b ldr r3, [r7, #4] - 800cba6: 6a5b ldr r3, [r3, #36] ; 0x24 - 800cba8: 60fb str r3, [r7, #12] - err_t result; - u16_t msecs; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_check(netif=%p) %c%c\n", (void *)netif, (s16_t)netif->name[0], - (s16_t)netif->name[1])); - dhcp_set_state(dhcp, DHCP_STATE_CHECKING); - 800cbaa: 2108 movs r1, #8 - 800cbac: 68f8 ldr r0, [r7, #12] - 800cbae: f001 f83b bl 800dc28 - /* create an ARP query for the offered IP address, expecting that no host - responds, as the IP address should not be in use. */ - result = etharp_query(netif, &dhcp->offered_ip_addr, NULL); - 800cbb2: 68fb ldr r3, [r7, #12] - 800cbb4: 331c adds r3, #28 - 800cbb6: 2200 movs r2, #0 - 800cbb8: 4619 mov r1, r3 - 800cbba: 6878 ldr r0, [r7, #4] - 800cbbc: f002 fb3c bl 800f238 - 800cbc0: 4603 mov r3, r0 - 800cbc2: 72fb strb r3, [r7, #11] - if (result != ERR_OK) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_check: could not perform ARP query\n")); - } - if (dhcp->tries < 255) { - 800cbc4: 68fb ldr r3, [r7, #12] - 800cbc6: 799b ldrb r3, [r3, #6] - 800cbc8: 2bff cmp r3, #255 ; 0xff - 800cbca: d005 beq.n 800cbd8 - dhcp->tries++; - 800cbcc: 68fb ldr r3, [r7, #12] - 800cbce: 799b ldrb r3, [r3, #6] - 800cbd0: 3301 adds r3, #1 - 800cbd2: b2da uxtb r2, r3 - 800cbd4: 68fb ldr r3, [r7, #12] - 800cbd6: 719a strb r2, [r3, #6] - } - msecs = 500; - 800cbd8: f44f 73fa mov.w r3, #500 ; 0x1f4 - 800cbdc: 813b strh r3, [r7, #8] - dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); - 800cbde: 893b ldrh r3, [r7, #8] - 800cbe0: f203 13f3 addw r3, r3, #499 ; 0x1f3 - 800cbe4: 4a06 ldr r2, [pc, #24] ; (800cc00 ) - 800cbe6: fb82 1203 smull r1, r2, r2, r3 - 800cbea: 1152 asrs r2, r2, #5 - 800cbec: 17db asrs r3, r3, #31 - 800cbee: 1ad3 subs r3, r2, r3 - 800cbf0: b29a uxth r2, r3 - 800cbf2: 68fb ldr r3, [r7, #12] - 800cbf4: 811a strh r2, [r3, #8] - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_check(): set request timeout %"U16_F" msecs\n", msecs)); -} - 800cbf6: bf00 nop - 800cbf8: 3710 adds r7, #16 - 800cbfa: 46bd mov sp, r7 - 800cbfc: bd80 pop {r7, pc} - 800cbfe: bf00 nop - 800cc00: 10624dd3 .word 0x10624dd3 - -0800cc04 : - * - * @param netif the netif under DHCP control - */ -static void -dhcp_handle_offer(struct netif *netif, struct dhcp_msg *msg_in) -{ - 800cc04: b580 push {r7, lr} - 800cc06: b084 sub sp, #16 - 800cc08: af00 add r7, sp, #0 - 800cc0a: 6078 str r0, [r7, #4] - 800cc0c: 6039 str r1, [r7, #0] - struct dhcp *dhcp = netif_dhcp_data(netif); - 800cc0e: 687b ldr r3, [r7, #4] - 800cc10: 6a5b ldr r3, [r3, #36] ; 0x24 - 800cc12: 60fb str r3, [r7, #12] - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_offer(netif=%p) %c%c%"U16_F"\n", - (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); - /* obtain the server address */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SERVER_ID)) { - 800cc14: 4b0c ldr r3, [pc, #48] ; (800cc48 ) - 800cc16: 789b ldrb r3, [r3, #2] - 800cc18: 2b00 cmp r3, #0 - 800cc1a: d011 beq.n 800cc40 - dhcp->request_timeout = 0; /* stop timer */ - 800cc1c: 68fb ldr r3, [r7, #12] - 800cc1e: 2200 movs r2, #0 - 800cc20: 811a strh r2, [r3, #8] - - ip_addr_set_ip4_u32(&dhcp->server_ip_addr, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SERVER_ID))); - 800cc22: 4b0a ldr r3, [pc, #40] ; (800cc4c ) - 800cc24: 689b ldr r3, [r3, #8] - 800cc26: 4618 mov r0, r3 - 800cc28: f7f8 f971 bl 8004f0e - 800cc2c: 4602 mov r2, r0 - 800cc2e: 68fb ldr r3, [r7, #12] - 800cc30: 619a str r2, [r3, #24] - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): server 0x%08"X32_F"\n", - ip4_addr_get_u32(ip_2_ip4(&dhcp->server_ip_addr)))); - /* remember offered address */ - ip4_addr_copy(dhcp->offered_ip_addr, msg_in->yiaddr); - 800cc32: 683b ldr r3, [r7, #0] - 800cc34: 691a ldr r2, [r3, #16] - 800cc36: 68fb ldr r3, [r7, #12] - 800cc38: 61da str r2, [r3, #28] - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): offer for 0x%08"X32_F"\n", - ip4_addr_get_u32(&dhcp->offered_ip_addr))); - - dhcp_select(netif); - 800cc3a: 6878 ldr r0, [r7, #4] - 800cc3c: f000 f808 bl 800cc50 - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, - ("dhcp_handle_offer(netif=%p) did not get server ID!\n", (void *)netif)); - } -} - 800cc40: bf00 nop - 800cc42: 3710 adds r7, #16 - 800cc44: 46bd mov sp, r7 - 800cc46: bd80 pop {r7, pc} - 800cc48: 20009a54 .word 0x20009a54 - 800cc4c: 20009a34 .word 0x20009a34 - -0800cc50 : - * @param netif the netif under DHCP control - * @return lwIP specific error (see error.h) - */ -static err_t -dhcp_select(struct netif *netif) -{ - 800cc50: b5b0 push {r4, r5, r7, lr} - 800cc52: b08a sub sp, #40 ; 0x28 - 800cc54: af02 add r7, sp, #8 - 800cc56: 6078 str r0, [r7, #4] - u16_t msecs; - u8_t i; - struct pbuf *p_out; - u16_t options_out_len; - - LWIP_ERROR("dhcp_select: netif != NULL", (netif != NULL), return ERR_ARG;); - 800cc58: 687b ldr r3, [r7, #4] - 800cc5a: 2b00 cmp r3, #0 - 800cc5c: d109 bne.n 800cc72 - 800cc5e: 4b71 ldr r3, [pc, #452] ; (800ce24 ) - 800cc60: f240 1277 movw r2, #375 ; 0x177 - 800cc64: 4970 ldr r1, [pc, #448] ; (800ce28 ) - 800cc66: 4871 ldr r0, [pc, #452] ; (800ce2c ) - 800cc68: f004 fa1e bl 80110a8 - 800cc6c: f06f 030f mvn.w r3, #15 - 800cc70: e0d3 b.n 800ce1a - dhcp = netif_dhcp_data(netif); - 800cc72: 687b ldr r3, [r7, #4] - 800cc74: 6a5b ldr r3, [r3, #36] ; 0x24 - 800cc76: 61bb str r3, [r7, #24] - LWIP_ERROR("dhcp_select: dhcp != NULL", (dhcp != NULL), return ERR_VAL;); - 800cc78: 69bb ldr r3, [r7, #24] - 800cc7a: 2b00 cmp r3, #0 - 800cc7c: d109 bne.n 800cc92 - 800cc7e: 4b69 ldr r3, [pc, #420] ; (800ce24 ) - 800cc80: f240 1279 movw r2, #377 ; 0x179 - 800cc84: 496a ldr r1, [pc, #424] ; (800ce30 ) - 800cc86: 4869 ldr r0, [pc, #420] ; (800ce2c ) - 800cc88: f004 fa0e bl 80110a8 - 800cc8c: f06f 0305 mvn.w r3, #5 - 800cc90: e0c3 b.n 800ce1a - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_select(netif=%p) %c%c%"U16_F"\n", (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); - dhcp_set_state(dhcp, DHCP_STATE_REQUESTING); - 800cc92: 2101 movs r1, #1 - 800cc94: 69b8 ldr r0, [r7, #24] - 800cc96: f000 ffc7 bl 800dc28 - - /* create and initialize the DHCP message header */ - p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len); - 800cc9a: f107 030c add.w r3, r7, #12 - 800cc9e: 2203 movs r2, #3 - 800cca0: 69b9 ldr r1, [r7, #24] - 800cca2: 6878 ldr r0, [r7, #4] - 800cca4: f001 fc4c bl 800e540 - 800cca8: 6178 str r0, [r7, #20] - if (p_out != NULL) { - 800ccaa: 697b ldr r3, [r7, #20] - 800ccac: 2b00 cmp r3, #0 - 800ccae: f000 8085 beq.w 800cdbc - struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload; - 800ccb2: 697b ldr r3, [r7, #20] - 800ccb4: 685b ldr r3, [r3, #4] - 800ccb6: 613b str r3, [r7, #16] - options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - 800ccb8: 89b8 ldrh r0, [r7, #12] - 800ccba: 693b ldr r3, [r7, #16] - 800ccbc: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800ccc0: 2302 movs r3, #2 - 800ccc2: 2239 movs r2, #57 ; 0x39 - 800ccc4: f000 ffca bl 800dc5c - 800ccc8: 4603 mov r3, r0 - 800ccca: 81bb strh r3, [r7, #12] - options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); - 800cccc: 89b8 ldrh r0, [r7, #12] - 800ccce: 693b ldr r3, [r7, #16] - 800ccd0: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800ccd4: 687b ldr r3, [r7, #4] - 800ccd6: 8d1b ldrh r3, [r3, #40] ; 0x28 - 800ccd8: 461a mov r2, r3 - 800ccda: f001 f819 bl 800dd10 - 800ccde: 4603 mov r3, r0 - 800cce0: 81bb strh r3, [r7, #12] - - /* MUST request the offered IP address */ - options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_REQUESTED_IP, 4); - 800cce2: 89b8 ldrh r0, [r7, #12] - 800cce4: 693b ldr r3, [r7, #16] - 800cce6: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800ccea: 2304 movs r3, #4 - 800ccec: 2232 movs r2, #50 ; 0x32 - 800ccee: f000 ffb5 bl 800dc5c - 800ccf2: 4603 mov r3, r0 - 800ccf4: 81bb strh r3, [r7, #12] - options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); - 800ccf6: 89bc ldrh r4, [r7, #12] - 800ccf8: 693b ldr r3, [r7, #16] - 800ccfa: f103 05f0 add.w r5, r3, #240 ; 0xf0 - 800ccfe: 69bb ldr r3, [r7, #24] - 800cd00: 69db ldr r3, [r3, #28] - 800cd02: 4618 mov r0, r3 - 800cd04: f7f8 f903 bl 8004f0e - 800cd08: 4603 mov r3, r0 - 800cd0a: 461a mov r2, r3 - 800cd0c: 4629 mov r1, r5 - 800cd0e: 4620 mov r0, r4 - 800cd10: f001 f830 bl 800dd74 - 800cd14: 4603 mov r3, r0 - 800cd16: 81bb strh r3, [r7, #12] - - options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_SERVER_ID, 4); - 800cd18: 89b8 ldrh r0, [r7, #12] - 800cd1a: 693b ldr r3, [r7, #16] - 800cd1c: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800cd20: 2304 movs r3, #4 - 800cd22: 2236 movs r2, #54 ; 0x36 - 800cd24: f000 ff9a bl 800dc5c - 800cd28: 4603 mov r3, r0 - 800cd2a: 81bb strh r3, [r7, #12] - options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(ip_2_ip4(&dhcp->server_ip_addr)))); - 800cd2c: 89bc ldrh r4, [r7, #12] - 800cd2e: 693b ldr r3, [r7, #16] - 800cd30: f103 05f0 add.w r5, r3, #240 ; 0xf0 - 800cd34: 69bb ldr r3, [r7, #24] - 800cd36: 699b ldr r3, [r3, #24] - 800cd38: 4618 mov r0, r3 - 800cd3a: f7f8 f8e8 bl 8004f0e - 800cd3e: 4603 mov r3, r0 - 800cd40: 461a mov r2, r3 - 800cd42: 4629 mov r1, r5 - 800cd44: 4620 mov r0, r4 - 800cd46: f001 f815 bl 800dd74 - 800cd4a: 4603 mov r3, r0 - 800cd4c: 81bb strh r3, [r7, #12] - - options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); - 800cd4e: 89b8 ldrh r0, [r7, #12] - 800cd50: 693b ldr r3, [r7, #16] - 800cd52: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800cd56: 2303 movs r3, #3 - 800cd58: 2237 movs r2, #55 ; 0x37 - 800cd5a: f000 ff7f bl 800dc5c - 800cd5e: 4603 mov r3, r0 - 800cd60: 81bb strh r3, [r7, #12] - for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { - 800cd62: 2300 movs r3, #0 - 800cd64: 77bb strb r3, [r7, #30] - 800cd66: e00e b.n 800cd86 - options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); - 800cd68: 89b8 ldrh r0, [r7, #12] - 800cd6a: 693b ldr r3, [r7, #16] - 800cd6c: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800cd70: 7fbb ldrb r3, [r7, #30] - 800cd72: 4a30 ldr r2, [pc, #192] ; (800ce34 ) - 800cd74: 5cd3 ldrb r3, [r2, r3] - 800cd76: 461a mov r2, r3 - 800cd78: f000 ffa4 bl 800dcc4 - 800cd7c: 4603 mov r3, r0 - 800cd7e: 81bb strh r3, [r7, #12] - for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { - 800cd80: 7fbb ldrb r3, [r7, #30] - 800cd82: 3301 adds r3, #1 - 800cd84: 77bb strb r3, [r7, #30] - 800cd86: 7fbb ldrb r3, [r7, #30] - 800cd88: 2b02 cmp r3, #2 - 800cd8a: d9ed bls.n 800cd68 -#if LWIP_NETIF_HOSTNAME - options_out_len = dhcp_option_hostname(options_out_len, msg_out->options, netif); -#endif /* LWIP_NETIF_HOSTNAME */ - - LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_REQUESTING, msg_out, DHCP_REQUEST, &options_out_len); - dhcp_option_trailer(options_out_len, msg_out->options, p_out); - 800cd8c: 89b8 ldrh r0, [r7, #12] - 800cd8e: 693b ldr r3, [r7, #16] - 800cd90: 33f0 adds r3, #240 ; 0xf0 - 800cd92: 697a ldr r2, [r7, #20] - 800cd94: 4619 mov r1, r3 - 800cd96: f001 fca9 bl 800e6ec - - /* send broadcast to any DHCP server */ - result = udp_sendto_if_src(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif, IP4_ADDR_ANY); - 800cd9a: 4b27 ldr r3, [pc, #156] ; (800ce38 ) - 800cd9c: 6818 ldr r0, [r3, #0] - 800cd9e: 4b27 ldr r3, [pc, #156] ; (800ce3c ) - 800cda0: 9301 str r3, [sp, #4] - 800cda2: 687b ldr r3, [r7, #4] - 800cda4: 9300 str r3, [sp, #0] - 800cda6: 2343 movs r3, #67 ; 0x43 - 800cda8: 4a25 ldr r2, [pc, #148] ; (800ce40 ) - 800cdaa: 6979 ldr r1, [r7, #20] - 800cdac: f7ff fbda bl 800c564 - 800cdb0: 4603 mov r3, r0 - 800cdb2: 77fb strb r3, [r7, #31] - pbuf_free(p_out); - 800cdb4: 6978 ldr r0, [r7, #20] - 800cdb6: f7f9 fbff bl 80065b8 - 800cdba: e001 b.n 800cdc0 - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_select: REQUESTING\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_select: could not allocate DHCP request\n")); - result = ERR_MEM; - 800cdbc: 23ff movs r3, #255 ; 0xff - 800cdbe: 77fb strb r3, [r7, #31] - } - if (dhcp->tries < 255) { - 800cdc0: 69bb ldr r3, [r7, #24] - 800cdc2: 799b ldrb r3, [r3, #6] - 800cdc4: 2bff cmp r3, #255 ; 0xff - 800cdc6: d005 beq.n 800cdd4 - dhcp->tries++; - 800cdc8: 69bb ldr r3, [r7, #24] - 800cdca: 799b ldrb r3, [r3, #6] - 800cdcc: 3301 adds r3, #1 - 800cdce: b2da uxtb r2, r3 - 800cdd0: 69bb ldr r3, [r7, #24] - 800cdd2: 719a strb r2, [r3, #6] - } - msecs = (u16_t)((dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000); - 800cdd4: 69bb ldr r3, [r7, #24] - 800cdd6: 799b ldrb r3, [r3, #6] - 800cdd8: 2b05 cmp r3, #5 - 800cdda: d80d bhi.n 800cdf8 - 800cddc: 69bb ldr r3, [r7, #24] - 800cdde: 799b ldrb r3, [r3, #6] - 800cde0: 461a mov r2, r3 - 800cde2: 2301 movs r3, #1 - 800cde4: 4093 lsls r3, r2 - 800cde6: b29b uxth r3, r3 - 800cde8: 461a mov r2, r3 - 800cdea: 0152 lsls r2, r2, #5 - 800cdec: 1ad2 subs r2, r2, r3 - 800cdee: 0092 lsls r2, r2, #2 - 800cdf0: 4413 add r3, r2 - 800cdf2: 00db lsls r3, r3, #3 - 800cdf4: b29b uxth r3, r3 - 800cdf6: e001 b.n 800cdfc - 800cdf8: f64e 2360 movw r3, #60000 ; 0xea60 - 800cdfc: 81fb strh r3, [r7, #14] - dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); - 800cdfe: 89fb ldrh r3, [r7, #14] - 800ce00: f203 13f3 addw r3, r3, #499 ; 0x1f3 - 800ce04: 4a0f ldr r2, [pc, #60] ; (800ce44 ) - 800ce06: fb82 1203 smull r1, r2, r2, r3 - 800ce0a: 1152 asrs r2, r2, #5 - 800ce0c: 17db asrs r3, r3, #31 - 800ce0e: 1ad3 subs r3, r2, r3 - 800ce10: b29a uxth r2, r3 - 800ce12: 69bb ldr r3, [r7, #24] - 800ce14: 811a strh r2, [r3, #8] - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_select(): set request timeout %"U16_F" msecs\n", msecs)); - return result; - 800ce16: f997 301f ldrsb.w r3, [r7, #31] -} - 800ce1a: 4618 mov r0, r3 - 800ce1c: 3720 adds r7, #32 - 800ce1e: 46bd mov sp, r7 - 800ce20: bdb0 pop {r4, r5, r7, pc} - 800ce22: bf00 nop - 800ce24: 08017efc .word 0x08017efc - 800ce28: 08017fa8 .word 0x08017fa8 - 800ce2c: 08017f5c .word 0x08017f5c - 800ce30: 08017fc4 .word 0x08017fc4 - 800ce34: 2000002c .word 0x2000002c - 800ce38: 20009a5c .word 0x20009a5c - 800ce3c: 08018acc .word 0x08018acc - 800ce40: 08018ad0 .word 0x08018ad0 - 800ce44: 10624dd3 .word 0x10624dd3 - -0800ce48 : - * The DHCP timer that checks for lease renewal/rebind timeouts. - * Must be called once a minute (see @ref DHCP_COARSE_TIMER_SECS). - */ -void -dhcp_coarse_tmr(void) -{ - 800ce48: b580 push {r7, lr} - 800ce4a: b082 sub sp, #8 - 800ce4c: af00 add r7, sp, #0 - struct netif *netif; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_coarse_tmr()\n")); - /* iterate through all network interfaces */ - NETIF_FOREACH(netif) { - 800ce4e: 4b27 ldr r3, [pc, #156] ; (800ceec ) - 800ce50: 681b ldr r3, [r3, #0] - 800ce52: 607b str r3, [r7, #4] - 800ce54: e042 b.n 800cedc - /* only act on DHCP configured interfaces */ - struct dhcp *dhcp = netif_dhcp_data(netif); - 800ce56: 687b ldr r3, [r7, #4] - 800ce58: 6a5b ldr r3, [r3, #36] ; 0x24 - 800ce5a: 603b str r3, [r7, #0] - if ((dhcp != NULL) && (dhcp->state != DHCP_STATE_OFF)) { - 800ce5c: 683b ldr r3, [r7, #0] - 800ce5e: 2b00 cmp r3, #0 - 800ce60: d039 beq.n 800ced6 - 800ce62: 683b ldr r3, [r7, #0] - 800ce64: 795b ldrb r3, [r3, #5] - 800ce66: 2b00 cmp r3, #0 - 800ce68: d035 beq.n 800ced6 - /* compare lease time to expire timeout */ - if (dhcp->t0_timeout && (++dhcp->lease_used == dhcp->t0_timeout)) { - 800ce6a: 683b ldr r3, [r7, #0] - 800ce6c: 8a9b ldrh r3, [r3, #20] - 800ce6e: 2b00 cmp r3, #0 - 800ce70: d012 beq.n 800ce98 - 800ce72: 683b ldr r3, [r7, #0] - 800ce74: 8a5b ldrh r3, [r3, #18] - 800ce76: 3301 adds r3, #1 - 800ce78: b29a uxth r2, r3 - 800ce7a: 683b ldr r3, [r7, #0] - 800ce7c: 825a strh r2, [r3, #18] - 800ce7e: 683b ldr r3, [r7, #0] - 800ce80: 8a5a ldrh r2, [r3, #18] - 800ce82: 683b ldr r3, [r7, #0] - 800ce84: 8a9b ldrh r3, [r3, #20] - 800ce86: 429a cmp r2, r3 - 800ce88: d106 bne.n 800ce98 - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t0 timeout\n")); - /* this clients' lease time has expired */ - dhcp_release_and_stop(netif); - 800ce8a: 6878 ldr r0, [r7, #4] - 800ce8c: f000 fe32 bl 800daf4 - dhcp_start(netif); - 800ce90: 6878 ldr r0, [r7, #4] - 800ce92: f000 f969 bl 800d168 - 800ce96: e01e b.n 800ced6 - /* timer is active (non zero), and triggers (zeroes) now? */ - } else if (dhcp->t2_rebind_time && (dhcp->t2_rebind_time-- == 1)) { - 800ce98: 683b ldr r3, [r7, #0] - 800ce9a: 8a1b ldrh r3, [r3, #16] - 800ce9c: 2b00 cmp r3, #0 - 800ce9e: d00b beq.n 800ceb8 - 800cea0: 683b ldr r3, [r7, #0] - 800cea2: 8a1b ldrh r3, [r3, #16] - 800cea4: 1e5a subs r2, r3, #1 - 800cea6: b291 uxth r1, r2 - 800cea8: 683a ldr r2, [r7, #0] - 800ceaa: 8211 strh r1, [r2, #16] - 800ceac: 2b01 cmp r3, #1 - 800ceae: d103 bne.n 800ceb8 - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t2 timeout\n")); - /* this clients' rebind timeout triggered */ - dhcp_t2_timeout(netif); - 800ceb0: 6878 ldr r0, [r7, #4] - 800ceb2: f000 f8c6 bl 800d042 - 800ceb6: e00e b.n 800ced6 - /* timer is active (non zero), and triggers (zeroes) now */ - } else if (dhcp->t1_renew_time && (dhcp->t1_renew_time-- == 1)) { - 800ceb8: 683b ldr r3, [r7, #0] - 800ceba: 89db ldrh r3, [r3, #14] - 800cebc: 2b00 cmp r3, #0 - 800cebe: d00a beq.n 800ced6 - 800cec0: 683b ldr r3, [r7, #0] - 800cec2: 89db ldrh r3, [r3, #14] - 800cec4: 1e5a subs r2, r3, #1 - 800cec6: b291 uxth r1, r2 - 800cec8: 683a ldr r2, [r7, #0] - 800ceca: 81d1 strh r1, [r2, #14] - 800cecc: 2b01 cmp r3, #1 - 800cece: d102 bne.n 800ced6 - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t1 timeout\n")); - /* this clients' renewal timeout triggered */ - dhcp_t1_timeout(netif); - 800ced0: 6878 ldr r0, [r7, #4] - 800ced2: f000 f888 bl 800cfe6 - NETIF_FOREACH(netif) { - 800ced6: 687b ldr r3, [r7, #4] - 800ced8: 681b ldr r3, [r3, #0] - 800ceda: 607b str r3, [r7, #4] - 800cedc: 687b ldr r3, [r7, #4] - 800cede: 2b00 cmp r3, #0 - 800cee0: d1b9 bne.n 800ce56 - } - } - } -} - 800cee2: bf00 nop - 800cee4: bf00 nop - 800cee6: 3708 adds r7, #8 - 800cee8: 46bd mov sp, r7 - 800ceea: bd80 pop {r7, pc} - 800ceec: 200099c8 .word 0x200099c8 - -0800cef0 : - * A DHCP server is expected to respond within a short period of time. - * This timer checks whether an outstanding DHCP request is timed out. - */ -void -dhcp_fine_tmr(void) -{ - 800cef0: b580 push {r7, lr} - 800cef2: b082 sub sp, #8 - 800cef4: af00 add r7, sp, #0 - struct netif *netif; - /* loop through netif's */ - NETIF_FOREACH(netif) { - 800cef6: 4b16 ldr r3, [pc, #88] ; (800cf50 ) - 800cef8: 681b ldr r3, [r3, #0] - 800cefa: 607b str r3, [r7, #4] - 800cefc: e020 b.n 800cf40 - struct dhcp *dhcp = netif_dhcp_data(netif); - 800cefe: 687b ldr r3, [r7, #4] - 800cf00: 6a5b ldr r3, [r3, #36] ; 0x24 - 800cf02: 603b str r3, [r7, #0] - /* only act on DHCP configured interfaces */ - if (dhcp != NULL) { - 800cf04: 683b ldr r3, [r7, #0] - 800cf06: 2b00 cmp r3, #0 - 800cf08: d017 beq.n 800cf3a - /* timer is active (non zero), and is about to trigger now */ - if (dhcp->request_timeout > 1) { - 800cf0a: 683b ldr r3, [r7, #0] - 800cf0c: 891b ldrh r3, [r3, #8] - 800cf0e: 2b01 cmp r3, #1 - 800cf10: d906 bls.n 800cf20 - dhcp->request_timeout--; - 800cf12: 683b ldr r3, [r7, #0] - 800cf14: 891b ldrh r3, [r3, #8] - 800cf16: 3b01 subs r3, #1 - 800cf18: b29a uxth r2, r3 - 800cf1a: 683b ldr r3, [r7, #0] - 800cf1c: 811a strh r2, [r3, #8] - 800cf1e: e00c b.n 800cf3a - } else if (dhcp->request_timeout == 1) { - 800cf20: 683b ldr r3, [r7, #0] - 800cf22: 891b ldrh r3, [r3, #8] - 800cf24: 2b01 cmp r3, #1 - 800cf26: d108 bne.n 800cf3a - dhcp->request_timeout--; - 800cf28: 683b ldr r3, [r7, #0] - 800cf2a: 891b ldrh r3, [r3, #8] - 800cf2c: 3b01 subs r3, #1 - 800cf2e: b29a uxth r2, r3 - 800cf30: 683b ldr r3, [r7, #0] - 800cf32: 811a strh r2, [r3, #8] - /* { dhcp->request_timeout == 0 } */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_fine_tmr(): request timeout\n")); - /* this client's request timeout triggered */ - dhcp_timeout(netif); - 800cf34: 6878 ldr r0, [r7, #4] - 800cf36: f000 f80d bl 800cf54 - NETIF_FOREACH(netif) { - 800cf3a: 687b ldr r3, [r7, #4] - 800cf3c: 681b ldr r3, [r3, #0] - 800cf3e: 607b str r3, [r7, #4] - 800cf40: 687b ldr r3, [r7, #4] - 800cf42: 2b00 cmp r3, #0 - 800cf44: d1db bne.n 800cefe - } - } - } -} - 800cf46: bf00 nop - 800cf48: bf00 nop - 800cf4a: 3708 adds r7, #8 - 800cf4c: 46bd mov sp, r7 - 800cf4e: bd80 pop {r7, pc} - 800cf50: 200099c8 .word 0x200099c8 - -0800cf54 : - * - * @param netif the netif under DHCP control - */ -static void -dhcp_timeout(struct netif *netif) -{ - 800cf54: b580 push {r7, lr} - 800cf56: b084 sub sp, #16 - 800cf58: af00 add r7, sp, #0 - 800cf5a: 6078 str r0, [r7, #4] - struct dhcp *dhcp = netif_dhcp_data(netif); - 800cf5c: 687b ldr r3, [r7, #4] - 800cf5e: 6a5b ldr r3, [r3, #36] ; 0x24 - 800cf60: 60fb str r3, [r7, #12] - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout()\n")); - /* back-off period has passed, or server selection timed out */ - if ((dhcp->state == DHCP_STATE_BACKING_OFF) || (dhcp->state == DHCP_STATE_SELECTING)) { - 800cf62: 68fb ldr r3, [r7, #12] - 800cf64: 795b ldrb r3, [r3, #5] - 800cf66: 2b0c cmp r3, #12 - 800cf68: d003 beq.n 800cf72 - 800cf6a: 68fb ldr r3, [r7, #12] - 800cf6c: 795b ldrb r3, [r3, #5] - 800cf6e: 2b06 cmp r3, #6 - 800cf70: d103 bne.n 800cf7a - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout(): restarting discovery\n")); - dhcp_discover(netif); - 800cf72: 6878 ldr r0, [r7, #4] - 800cf74: f000 fa54 bl 800d420 - dhcp_reboot(netif); - } else { - dhcp_discover(netif); - } - } -} - 800cf78: e031 b.n 800cfde - } else if (dhcp->state == DHCP_STATE_REQUESTING) { - 800cf7a: 68fb ldr r3, [r7, #12] - 800cf7c: 795b ldrb r3, [r3, #5] - 800cf7e: 2b01 cmp r3, #1 - 800cf80: d10e bne.n 800cfa0 - if (dhcp->tries <= 5) { - 800cf82: 68fb ldr r3, [r7, #12] - 800cf84: 799b ldrb r3, [r3, #6] - 800cf86: 2b05 cmp r3, #5 - 800cf88: d803 bhi.n 800cf92 - dhcp_select(netif); - 800cf8a: 6878 ldr r0, [r7, #4] - 800cf8c: f7ff fe60 bl 800cc50 -} - 800cf90: e025 b.n 800cfde - dhcp_release_and_stop(netif); - 800cf92: 6878 ldr r0, [r7, #4] - 800cf94: f000 fdae bl 800daf4 - dhcp_start(netif); - 800cf98: 6878 ldr r0, [r7, #4] - 800cf9a: f000 f8e5 bl 800d168 -} - 800cf9e: e01e b.n 800cfde - } else if (dhcp->state == DHCP_STATE_CHECKING) { - 800cfa0: 68fb ldr r3, [r7, #12] - 800cfa2: 795b ldrb r3, [r3, #5] - 800cfa4: 2b08 cmp r3, #8 - 800cfa6: d10b bne.n 800cfc0 - if (dhcp->tries <= 1) { - 800cfa8: 68fb ldr r3, [r7, #12] - 800cfaa: 799b ldrb r3, [r3, #6] - 800cfac: 2b01 cmp r3, #1 - 800cfae: d803 bhi.n 800cfb8 - dhcp_check(netif); - 800cfb0: 6878 ldr r0, [r7, #4] - 800cfb2: f7ff fdf3 bl 800cb9c -} - 800cfb6: e012 b.n 800cfde - dhcp_bind(netif); - 800cfb8: 6878 ldr r0, [r7, #4] - 800cfba: f000 fad3 bl 800d564 -} - 800cfbe: e00e b.n 800cfde - } else if (dhcp->state == DHCP_STATE_REBOOTING) { - 800cfc0: 68fb ldr r3, [r7, #12] - 800cfc2: 795b ldrb r3, [r3, #5] - 800cfc4: 2b03 cmp r3, #3 - 800cfc6: d10a bne.n 800cfde - if (dhcp->tries < REBOOT_TRIES) { - 800cfc8: 68fb ldr r3, [r7, #12] - 800cfca: 799b ldrb r3, [r3, #6] - 800cfcc: 2b01 cmp r3, #1 - 800cfce: d803 bhi.n 800cfd8 - dhcp_reboot(netif); - 800cfd0: 6878 ldr r0, [r7, #4] - 800cfd2: f000 fcd9 bl 800d988 -} - 800cfd6: e002 b.n 800cfde - dhcp_discover(netif); - 800cfd8: 6878 ldr r0, [r7, #4] - 800cfda: f000 fa21 bl 800d420 -} - 800cfde: bf00 nop - 800cfe0: 3710 adds r7, #16 - 800cfe2: 46bd mov sp, r7 - 800cfe4: bd80 pop {r7, pc} - -0800cfe6 : - * - * @param netif the netif under DHCP control - */ -static void -dhcp_t1_timeout(struct netif *netif) -{ - 800cfe6: b580 push {r7, lr} - 800cfe8: b084 sub sp, #16 - 800cfea: af00 add r7, sp, #0 - 800cfec: 6078 str r0, [r7, #4] - struct dhcp *dhcp = netif_dhcp_data(netif); - 800cfee: 687b ldr r3, [r7, #4] - 800cff0: 6a5b ldr r3, [r3, #36] ; 0x24 - 800cff2: 60fb str r3, [r7, #12] - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_t1_timeout()\n")); - if ((dhcp->state == DHCP_STATE_REQUESTING) || (dhcp->state == DHCP_STATE_BOUND) || - 800cff4: 68fb ldr r3, [r7, #12] - 800cff6: 795b ldrb r3, [r3, #5] - 800cff8: 2b01 cmp r3, #1 - 800cffa: d007 beq.n 800d00c - 800cffc: 68fb ldr r3, [r7, #12] - 800cffe: 795b ldrb r3, [r3, #5] - 800d000: 2b0a cmp r3, #10 - 800d002: d003 beq.n 800d00c - (dhcp->state == DHCP_STATE_RENEWING)) { - 800d004: 68fb ldr r3, [r7, #12] - 800d006: 795b ldrb r3, [r3, #5] - if ((dhcp->state == DHCP_STATE_REQUESTING) || (dhcp->state == DHCP_STATE_BOUND) || - 800d008: 2b05 cmp r3, #5 - 800d00a: d116 bne.n 800d03a - * eventually time-out if renew tries fail. */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - ("dhcp_t1_timeout(): must renew\n")); - /* This slightly different to RFC2131: DHCPREQUEST will be sent from state - DHCP_STATE_RENEWING, not DHCP_STATE_BOUND */ - dhcp_renew(netif); - 800d00c: 6878 ldr r0, [r7, #4] - 800d00e: f000 fb83 bl 800d718 - /* Calculate next timeout */ - if (((dhcp->t2_timeout - dhcp->lease_used) / 2) >= ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS)) { - 800d012: 68fb ldr r3, [r7, #12] - 800d014: 899b ldrh r3, [r3, #12] - 800d016: 461a mov r2, r3 - 800d018: 68fb ldr r3, [r7, #12] - 800d01a: 8a5b ldrh r3, [r3, #18] - 800d01c: 1ad3 subs r3, r2, r3 - 800d01e: 2b01 cmp r3, #1 - 800d020: dd0b ble.n 800d03a - dhcp->t1_renew_time = (u16_t)((dhcp->t2_timeout - dhcp->lease_used) / 2); - 800d022: 68fb ldr r3, [r7, #12] - 800d024: 899b ldrh r3, [r3, #12] - 800d026: 461a mov r2, r3 - 800d028: 68fb ldr r3, [r7, #12] - 800d02a: 8a5b ldrh r3, [r3, #18] - 800d02c: 1ad3 subs r3, r2, r3 - 800d02e: 0fda lsrs r2, r3, #31 - 800d030: 4413 add r3, r2 - 800d032: 105b asrs r3, r3, #1 - 800d034: b29a uxth r2, r3 - 800d036: 68fb ldr r3, [r7, #12] - 800d038: 81da strh r2, [r3, #14] - } - } -} - 800d03a: bf00 nop - 800d03c: 3710 adds r7, #16 - 800d03e: 46bd mov sp, r7 - 800d040: bd80 pop {r7, pc} - -0800d042 : - * - * @param netif the netif under DHCP control - */ -static void -dhcp_t2_timeout(struct netif *netif) -{ - 800d042: b580 push {r7, lr} - 800d044: b084 sub sp, #16 - 800d046: af00 add r7, sp, #0 - 800d048: 6078 str r0, [r7, #4] - struct dhcp *dhcp = netif_dhcp_data(netif); - 800d04a: 687b ldr r3, [r7, #4] - 800d04c: 6a5b ldr r3, [r3, #36] ; 0x24 - 800d04e: 60fb str r3, [r7, #12] - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t2_timeout()\n")); - if ((dhcp->state == DHCP_STATE_REQUESTING) || (dhcp->state == DHCP_STATE_BOUND) || - 800d050: 68fb ldr r3, [r7, #12] - 800d052: 795b ldrb r3, [r3, #5] - 800d054: 2b01 cmp r3, #1 - 800d056: d00b beq.n 800d070 - 800d058: 68fb ldr r3, [r7, #12] - 800d05a: 795b ldrb r3, [r3, #5] - 800d05c: 2b0a cmp r3, #10 - 800d05e: d007 beq.n 800d070 - (dhcp->state == DHCP_STATE_RENEWING) || (dhcp->state == DHCP_STATE_REBINDING)) { - 800d060: 68fb ldr r3, [r7, #12] - 800d062: 795b ldrb r3, [r3, #5] - if ((dhcp->state == DHCP_STATE_REQUESTING) || (dhcp->state == DHCP_STATE_BOUND) || - 800d064: 2b05 cmp r3, #5 - 800d066: d003 beq.n 800d070 - (dhcp->state == DHCP_STATE_RENEWING) || (dhcp->state == DHCP_STATE_REBINDING)) { - 800d068: 68fb ldr r3, [r7, #12] - 800d06a: 795b ldrb r3, [r3, #5] - 800d06c: 2b04 cmp r3, #4 - 800d06e: d116 bne.n 800d09e - /* just retry to rebind */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - ("dhcp_t2_timeout(): must rebind\n")); - /* This slightly different to RFC2131: DHCPREQUEST will be sent from state - DHCP_STATE_REBINDING, not DHCP_STATE_BOUND */ - dhcp_rebind(netif); - 800d070: 6878 ldr r0, [r7, #4] - 800d072: f000 fbed bl 800d850 - /* Calculate next timeout */ - if (((dhcp->t0_timeout - dhcp->lease_used) / 2) >= ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS)) { - 800d076: 68fb ldr r3, [r7, #12] - 800d078: 8a9b ldrh r3, [r3, #20] - 800d07a: 461a mov r2, r3 - 800d07c: 68fb ldr r3, [r7, #12] - 800d07e: 8a5b ldrh r3, [r3, #18] - 800d080: 1ad3 subs r3, r2, r3 - 800d082: 2b01 cmp r3, #1 - 800d084: dd0b ble.n 800d09e - dhcp->t2_rebind_time = (u16_t)((dhcp->t0_timeout - dhcp->lease_used) / 2); - 800d086: 68fb ldr r3, [r7, #12] - 800d088: 8a9b ldrh r3, [r3, #20] - 800d08a: 461a mov r2, r3 - 800d08c: 68fb ldr r3, [r7, #12] - 800d08e: 8a5b ldrh r3, [r3, #18] - 800d090: 1ad3 subs r3, r2, r3 - 800d092: 0fda lsrs r2, r3, #31 - 800d094: 4413 add r3, r2 - 800d096: 105b asrs r3, r3, #1 - 800d098: b29a uxth r2, r3 - 800d09a: 68fb ldr r3, [r7, #12] - 800d09c: 821a strh r2, [r3, #16] - } - } -} - 800d09e: bf00 nop - 800d0a0: 3710 adds r7, #16 - 800d0a2: 46bd mov sp, r7 - 800d0a4: bd80 pop {r7, pc} - ... - -0800d0a8 : - * - * @param netif the netif under DHCP control - */ -static void -dhcp_handle_ack(struct netif *netif, struct dhcp_msg *msg_in) -{ - 800d0a8: b580 push {r7, lr} - 800d0aa: b084 sub sp, #16 - 800d0ac: af00 add r7, sp, #0 - 800d0ae: 6078 str r0, [r7, #4] - 800d0b0: 6039 str r1, [r7, #0] - struct dhcp *dhcp = netif_dhcp_data(netif); - 800d0b2: 687b ldr r3, [r7, #4] - 800d0b4: 6a5b ldr r3, [r3, #36] ; 0x24 - 800d0b6: 60fb str r3, [r7, #12] -#if LWIP_DHCP_GET_NTP_SRV - ip4_addr_t ntp_server_addrs[LWIP_DHCP_MAX_NTP_SERVERS]; -#endif - - /* clear options we might not get from the ACK */ - ip4_addr_set_zero(&dhcp->offered_sn_mask); - 800d0b8: 68fb ldr r3, [r7, #12] - 800d0ba: 2200 movs r2, #0 - 800d0bc: 621a str r2, [r3, #32] - ip4_addr_set_zero(&dhcp->offered_gw_addr); - 800d0be: 68fb ldr r3, [r7, #12] - 800d0c0: 2200 movs r2, #0 - 800d0c2: 625a str r2, [r3, #36] ; 0x24 -#if LWIP_DHCP_BOOTP_FILE - ip4_addr_set_zero(&dhcp->offered_si_addr); -#endif /* LWIP_DHCP_BOOTP_FILE */ - - /* lease time given? */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_LEASE_TIME)) { - 800d0c4: 4b26 ldr r3, [pc, #152] ; (800d160 ) - 800d0c6: 78db ldrb r3, [r3, #3] - 800d0c8: 2b00 cmp r3, #0 - 800d0ca: d003 beq.n 800d0d4 - /* remember offered lease time */ - dhcp->offered_t0_lease = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_LEASE_TIME); - 800d0cc: 4b25 ldr r3, [pc, #148] ; (800d164 ) - 800d0ce: 68da ldr r2, [r3, #12] - 800d0d0: 68fb ldr r3, [r7, #12] - 800d0d2: 629a str r2, [r3, #40] ; 0x28 - } - /* renewal period given? */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T1)) { - 800d0d4: 4b22 ldr r3, [pc, #136] ; (800d160 ) - 800d0d6: 791b ldrb r3, [r3, #4] - 800d0d8: 2b00 cmp r3, #0 - 800d0da: d004 beq.n 800d0e6 - /* remember given renewal period */ - dhcp->offered_t1_renew = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T1); - 800d0dc: 4b21 ldr r3, [pc, #132] ; (800d164 ) - 800d0de: 691a ldr r2, [r3, #16] - 800d0e0: 68fb ldr r3, [r7, #12] - 800d0e2: 62da str r2, [r3, #44] ; 0x2c - 800d0e4: e004 b.n 800d0f0 - } else { - /* calculate safe periods for renewal */ - dhcp->offered_t1_renew = dhcp->offered_t0_lease / 2; - 800d0e6: 68fb ldr r3, [r7, #12] - 800d0e8: 6a9b ldr r3, [r3, #40] ; 0x28 - 800d0ea: 085a lsrs r2, r3, #1 - 800d0ec: 68fb ldr r3, [r7, #12] - 800d0ee: 62da str r2, [r3, #44] ; 0x2c - } - - /* renewal period given? */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T2)) { - 800d0f0: 4b1b ldr r3, [pc, #108] ; (800d160 ) - 800d0f2: 795b ldrb r3, [r3, #5] - 800d0f4: 2b00 cmp r3, #0 - 800d0f6: d004 beq.n 800d102 - /* remember given rebind period */ - dhcp->offered_t2_rebind = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T2); - 800d0f8: 4b1a ldr r3, [pc, #104] ; (800d164 ) - 800d0fa: 695a ldr r2, [r3, #20] - 800d0fc: 68fb ldr r3, [r7, #12] - 800d0fe: 631a str r2, [r3, #48] ; 0x30 - 800d100: e007 b.n 800d112 - } else { - /* calculate safe periods for rebinding (offered_t0_lease * 0.875 -> 87.5%)*/ - dhcp->offered_t2_rebind = (dhcp->offered_t0_lease * 7U) / 8U; - 800d102: 68fb ldr r3, [r7, #12] - 800d104: 6a9a ldr r2, [r3, #40] ; 0x28 - 800d106: 4613 mov r3, r2 - 800d108: 00db lsls r3, r3, #3 - 800d10a: 1a9b subs r3, r3, r2 - 800d10c: 08da lsrs r2, r3, #3 - 800d10e: 68fb ldr r3, [r7, #12] - 800d110: 631a str r2, [r3, #48] ; 0x30 - } - - /* (y)our internet address */ - ip4_addr_copy(dhcp->offered_ip_addr, msg_in->yiaddr); - 800d112: 683b ldr r3, [r7, #0] - 800d114: 691a ldr r2, [r3, #16] - 800d116: 68fb ldr r3, [r7, #12] - 800d118: 61da str r2, [r3, #28] - boot file name copied in dhcp_parse_reply if not overloaded */ - ip4_addr_copy(dhcp->offered_si_addr, msg_in->siaddr); -#endif /* LWIP_DHCP_BOOTP_FILE */ - - /* subnet mask given? */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SUBNET_MASK)) { - 800d11a: 4b11 ldr r3, [pc, #68] ; (800d160 ) - 800d11c: 799b ldrb r3, [r3, #6] - 800d11e: 2b00 cmp r3, #0 - 800d120: d00b beq.n 800d13a - /* remember given subnet mask */ - ip4_addr_set_u32(&dhcp->offered_sn_mask, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SUBNET_MASK))); - 800d122: 4b10 ldr r3, [pc, #64] ; (800d164 ) - 800d124: 699b ldr r3, [r3, #24] - 800d126: 4618 mov r0, r3 - 800d128: f7f7 fef1 bl 8004f0e - 800d12c: 4602 mov r2, r0 - 800d12e: 68fb ldr r3, [r7, #12] - 800d130: 621a str r2, [r3, #32] - dhcp->subnet_mask_given = 1; - 800d132: 68fb ldr r3, [r7, #12] - 800d134: 2201 movs r2, #1 - 800d136: 71da strb r2, [r3, #7] - 800d138: e002 b.n 800d140 - } else { - dhcp->subnet_mask_given = 0; - 800d13a: 68fb ldr r3, [r7, #12] - 800d13c: 2200 movs r2, #0 - 800d13e: 71da strb r2, [r3, #7] - } - - /* gateway router */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_ROUTER)) { - 800d140: 4b07 ldr r3, [pc, #28] ; (800d160 ) - 800d142: 79db ldrb r3, [r3, #7] - 800d144: 2b00 cmp r3, #0 - 800d146: d007 beq.n 800d158 - ip4_addr_set_u32(&dhcp->offered_gw_addr, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_ROUTER))); - 800d148: 4b06 ldr r3, [pc, #24] ; (800d164 ) - 800d14a: 69db ldr r3, [r3, #28] - 800d14c: 4618 mov r0, r3 - 800d14e: f7f7 fede bl 8004f0e - 800d152: 4602 mov r2, r0 - 800d154: 68fb ldr r3, [r7, #12] - 800d156: 625a str r2, [r3, #36] ; 0x24 - ip_addr_t dns_addr; - ip_addr_set_ip4_u32_val(dns_addr, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_DNS_SERVER + n))); - dns_setserver(n, &dns_addr); - } -#endif /* LWIP_DHCP_PROVIDE_DNS_SERVERS */ -} - 800d158: bf00 nop - 800d15a: 3710 adds r7, #16 - 800d15c: 46bd mov sp, r7 - 800d15e: bd80 pop {r7, pc} - 800d160: 20009a54 .word 0x20009a54 - 800d164: 20009a34 .word 0x20009a34 - -0800d168 : - * - ERR_OK - No error - * - ERR_MEM - Out of memory - */ -err_t -dhcp_start(struct netif *netif) -{ - 800d168: b580 push {r7, lr} - 800d16a: b084 sub sp, #16 - 800d16c: af00 add r7, sp, #0 - 800d16e: 6078 str r0, [r7, #4] - struct dhcp *dhcp; - err_t result; - - LWIP_ASSERT_CORE_LOCKED(); - LWIP_ERROR("netif != NULL", (netif != NULL), return ERR_ARG;); - 800d170: 687b ldr r3, [r7, #4] - 800d172: 2b00 cmp r3, #0 - 800d174: d109 bne.n 800d18a - 800d176: 4b37 ldr r3, [pc, #220] ; (800d254 ) - 800d178: f240 22e7 movw r2, #743 ; 0x2e7 - 800d17c: 4936 ldr r1, [pc, #216] ; (800d258 ) - 800d17e: 4837 ldr r0, [pc, #220] ; (800d25c ) - 800d180: f003 ff92 bl 80110a8 - 800d184: f06f 030f mvn.w r3, #15 - 800d188: e060 b.n 800d24c - LWIP_ERROR("netif is not up, old style port?", netif_is_up(netif), return ERR_ARG;); - 800d18a: 687b ldr r3, [r7, #4] - 800d18c: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 800d190: f003 0301 and.w r3, r3, #1 - 800d194: 2b00 cmp r3, #0 - 800d196: d109 bne.n 800d1ac - 800d198: 4b2e ldr r3, [pc, #184] ; (800d254 ) - 800d19a: f44f 723a mov.w r2, #744 ; 0x2e8 - 800d19e: 4930 ldr r1, [pc, #192] ; (800d260 ) - 800d1a0: 482e ldr r0, [pc, #184] ; (800d25c ) - 800d1a2: f003 ff81 bl 80110a8 - 800d1a6: f06f 030f mvn.w r3, #15 - 800d1aa: e04f b.n 800d24c - dhcp = netif_dhcp_data(netif); - 800d1ac: 687b ldr r3, [r7, #4] - 800d1ae: 6a5b ldr r3, [r3, #36] ; 0x24 - 800d1b0: 60fb str r3, [r7, #12] - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(netif=%p) %c%c%"U16_F"\n", (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); - - /* check MTU of the netif */ - if (netif->mtu < DHCP_MAX_MSG_LEN_MIN_REQUIRED) { - 800d1b2: 687b ldr r3, [r7, #4] - 800d1b4: 8d1b ldrh r3, [r3, #40] ; 0x28 - 800d1b6: f5b3 7f10 cmp.w r3, #576 ; 0x240 - 800d1ba: d202 bcs.n 800d1c2 - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): Cannot use this netif with DHCP: MTU is too small\n")); - return ERR_MEM; - 800d1bc: f04f 33ff mov.w r3, #4294967295 - 800d1c0: e044 b.n 800d24c - } - - /* no DHCP client attached yet? */ - if (dhcp == NULL) { - 800d1c2: 68fb ldr r3, [r7, #12] - 800d1c4: 2b00 cmp r3, #0 - 800d1c6: d10d bne.n 800d1e4 - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): mallocing new DHCP client\n")); - dhcp = (struct dhcp *)mem_malloc(sizeof(struct dhcp)); - 800d1c8: 2034 movs r0, #52 ; 0x34 - 800d1ca: f7f8 f973 bl 80054b4 - 800d1ce: 60f8 str r0, [r7, #12] - if (dhcp == NULL) { - 800d1d0: 68fb ldr r3, [r7, #12] - 800d1d2: 2b00 cmp r3, #0 - 800d1d4: d102 bne.n 800d1dc - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not allocate dhcp\n")); - return ERR_MEM; - 800d1d6: f04f 33ff mov.w r3, #4294967295 - 800d1da: e037 b.n 800d24c - } - - /* store this dhcp client in the netif */ - netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP, dhcp); - 800d1dc: 687b ldr r3, [r7, #4] - 800d1de: 68fa ldr r2, [r7, #12] - 800d1e0: 625a str r2, [r3, #36] ; 0x24 - 800d1e2: e005 b.n 800d1f0 - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): allocated dhcp")); - /* already has DHCP client attached */ - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(): restarting DHCP configuration\n")); - - if (dhcp->pcb_allocated != 0) { - 800d1e4: 68fb ldr r3, [r7, #12] - 800d1e6: 791b ldrb r3, [r3, #4] - 800d1e8: 2b00 cmp r3, #0 - 800d1ea: d001 beq.n 800d1f0 - dhcp_dec_pcb_refcount(); /* free DHCP PCB if not needed any more */ - 800d1ec: f7ff fc92 bl 800cb14 - } - /* dhcp is cleared below, no need to reset flag*/ - } - - /* clear data structure */ - memset(dhcp, 0, sizeof(struct dhcp)); - 800d1f0: 2234 movs r2, #52 ; 0x34 - 800d1f2: 2100 movs r1, #0 - 800d1f4: 68f8 ldr r0, [r7, #12] - 800d1f6: f003 ff4f bl 8011098 - /* dhcp_set_state(&dhcp, DHCP_STATE_OFF); */ - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting DHCP configuration\n")); - - if (dhcp_inc_pcb_refcount() != ERR_OK) { /* ensure DHCP PCB is allocated */ - 800d1fa: f7ff fc39 bl 800ca70 - 800d1fe: 4603 mov r3, r0 - 800d200: 2b00 cmp r3, #0 - 800d202: d002 beq.n 800d20a - return ERR_MEM; - 800d204: f04f 33ff mov.w r3, #4294967295 - 800d208: e020 b.n 800d24c - } - dhcp->pcb_allocated = 1; - 800d20a: 68fb ldr r3, [r7, #12] - 800d20c: 2201 movs r2, #1 - 800d20e: 711a strb r2, [r3, #4] - - if (!netif_is_link_up(netif)) { - 800d210: 687b ldr r3, [r7, #4] - 800d212: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 800d216: f003 0304 and.w r3, r3, #4 - 800d21a: 2b00 cmp r3, #0 - 800d21c: d105 bne.n 800d22a - /* set state INIT and wait for dhcp_network_changed() to call dhcp_discover() */ - dhcp_set_state(dhcp, DHCP_STATE_INIT); - 800d21e: 2102 movs r1, #2 - 800d220: 68f8 ldr r0, [r7, #12] - 800d222: f000 fd01 bl 800dc28 - return ERR_OK; - 800d226: 2300 movs r3, #0 - 800d228: e010 b.n 800d24c - } - - /* (re)start the DHCP negotiation */ - result = dhcp_discover(netif); - 800d22a: 6878 ldr r0, [r7, #4] - 800d22c: f000 f8f8 bl 800d420 - 800d230: 4603 mov r3, r0 - 800d232: 72fb strb r3, [r7, #11] - if (result != ERR_OK) { - 800d234: f997 300b ldrsb.w r3, [r7, #11] - 800d238: 2b00 cmp r3, #0 - 800d23a: d005 beq.n 800d248 - /* free resources allocated above */ - dhcp_release_and_stop(netif); - 800d23c: 6878 ldr r0, [r7, #4] - 800d23e: f000 fc59 bl 800daf4 - return ERR_MEM; - 800d242: f04f 33ff mov.w r3, #4294967295 - 800d246: e001 b.n 800d24c - } - return result; - 800d248: f997 300b ldrsb.w r3, [r7, #11] -} - 800d24c: 4618 mov r0, r3 - 800d24e: 3710 adds r7, #16 - 800d250: 46bd mov sp, r7 - 800d252: bd80 pop {r7, pc} - 800d254: 08017efc .word 0x08017efc - 800d258: 08017fe0 .word 0x08017fe0 - 800d25c: 08017f5c .word 0x08017f5c - 800d260: 08018024 .word 0x08018024 - -0800d264 : - * This enters the REBOOTING state to verify that the currently bound - * address is still valid. - */ -void -dhcp_network_changed(struct netif *netif) -{ - 800d264: b580 push {r7, lr} - 800d266: b084 sub sp, #16 - 800d268: af00 add r7, sp, #0 - 800d26a: 6078 str r0, [r7, #4] - struct dhcp *dhcp = netif_dhcp_data(netif); - 800d26c: 687b ldr r3, [r7, #4] - 800d26e: 6a5b ldr r3, [r3, #36] ; 0x24 - 800d270: 60fb str r3, [r7, #12] - - if (!dhcp) { - 800d272: 68fb ldr r3, [r7, #12] - 800d274: 2b00 cmp r3, #0 - 800d276: d025 beq.n 800d2c4 - return; - } - switch (dhcp->state) { - 800d278: 68fb ldr r3, [r7, #12] - 800d27a: 795b ldrb r3, [r3, #5] - 800d27c: 2b0a cmp r3, #10 - 800d27e: d008 beq.n 800d292 - 800d280: 2b0a cmp r3, #10 - 800d282: dc0d bgt.n 800d2a0 - 800d284: 2b00 cmp r3, #0 - 800d286: d01f beq.n 800d2c8 - 800d288: 2b00 cmp r3, #0 - 800d28a: db09 blt.n 800d2a0 - 800d28c: 3b03 subs r3, #3 - 800d28e: 2b02 cmp r3, #2 - 800d290: d806 bhi.n 800d2a0 - case DHCP_STATE_REBINDING: - case DHCP_STATE_RENEWING: - case DHCP_STATE_BOUND: - case DHCP_STATE_REBOOTING: - dhcp->tries = 0; - 800d292: 68fb ldr r3, [r7, #12] - 800d294: 2200 movs r2, #0 - 800d296: 719a strb r2, [r3, #6] - dhcp_reboot(netif); - 800d298: 6878 ldr r0, [r7, #4] - 800d29a: f000 fb75 bl 800d988 - break; - 800d29e: e014 b.n 800d2ca - case DHCP_STATE_OFF: - /* stay off */ - break; - default: - LWIP_ASSERT("invalid dhcp->state", dhcp->state <= DHCP_STATE_BACKING_OFF); - 800d2a0: 68fb ldr r3, [r7, #12] - 800d2a2: 795b ldrb r3, [r3, #5] - 800d2a4: 2b0c cmp r3, #12 - 800d2a6: d906 bls.n 800d2b6 - 800d2a8: 4b09 ldr r3, [pc, #36] ; (800d2d0 ) - 800d2aa: f240 326d movw r2, #877 ; 0x36d - 800d2ae: 4909 ldr r1, [pc, #36] ; (800d2d4 ) - 800d2b0: 4809 ldr r0, [pc, #36] ; (800d2d8 ) - 800d2b2: f003 fef9 bl 80110a8 - autoip_stop(netif); - dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; - } -#endif /* LWIP_DHCP_AUTOIP_COOP */ - /* ensure we start with short timeouts, even if already discovering */ - dhcp->tries = 0; - 800d2b6: 68fb ldr r3, [r7, #12] - 800d2b8: 2200 movs r2, #0 - 800d2ba: 719a strb r2, [r3, #6] - dhcp_discover(netif); - 800d2bc: 6878 ldr r0, [r7, #4] - 800d2be: f000 f8af bl 800d420 - break; - 800d2c2: e002 b.n 800d2ca - return; - 800d2c4: bf00 nop - 800d2c6: e000 b.n 800d2ca - break; - 800d2c8: bf00 nop - } -} - 800d2ca: 3710 adds r7, #16 - 800d2cc: 46bd mov sp, r7 - 800d2ce: bd80 pop {r7, pc} - 800d2d0: 08017efc .word 0x08017efc - 800d2d4: 08018048 .word 0x08018048 - 800d2d8: 08017f5c .word 0x08017f5c - -0800d2dc : - * @param netif the network interface on which the reply was received - * @param addr The IP address we received a reply from - */ -void -dhcp_arp_reply(struct netif *netif, const ip4_addr_t *addr) -{ - 800d2dc: b580 push {r7, lr} - 800d2de: b084 sub sp, #16 - 800d2e0: af00 add r7, sp, #0 - 800d2e2: 6078 str r0, [r7, #4] - 800d2e4: 6039 str r1, [r7, #0] - struct dhcp *dhcp; - - LWIP_ERROR("netif != NULL", (netif != NULL), return;); - 800d2e6: 687b ldr r3, [r7, #4] - 800d2e8: 2b00 cmp r3, #0 - 800d2ea: d107 bne.n 800d2fc - 800d2ec: 4b0e ldr r3, [pc, #56] ; (800d328 ) - 800d2ee: f240 328b movw r2, #907 ; 0x38b - 800d2f2: 490e ldr r1, [pc, #56] ; (800d32c ) - 800d2f4: 480e ldr r0, [pc, #56] ; (800d330 ) - 800d2f6: f003 fed7 bl 80110a8 - 800d2fa: e012 b.n 800d322 - dhcp = netif_dhcp_data(netif); - 800d2fc: 687b ldr r3, [r7, #4] - 800d2fe: 6a5b ldr r3, [r3, #36] ; 0x24 - 800d300: 60fb str r3, [r7, #12] - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_arp_reply()\n")); - /* is a DHCP client doing an ARP check? */ - if ((dhcp != NULL) && (dhcp->state == DHCP_STATE_CHECKING)) { - 800d302: 68fb ldr r3, [r7, #12] - 800d304: 2b00 cmp r3, #0 - 800d306: d00c beq.n 800d322 - 800d308: 68fb ldr r3, [r7, #12] - 800d30a: 795b ldrb r3, [r3, #5] - 800d30c: 2b08 cmp r3, #8 - 800d30e: d108 bne.n 800d322 - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_arp_reply(): CHECKING, arp reply for 0x%08"X32_F"\n", - ip4_addr_get_u32(addr))); - /* did a host respond with the address we - were offered by the DHCP server? */ - if (ip4_addr_cmp(addr, &dhcp->offered_ip_addr)) { - 800d310: 683b ldr r3, [r7, #0] - 800d312: 681a ldr r2, [r3, #0] - 800d314: 68fb ldr r3, [r7, #12] - 800d316: 69db ldr r3, [r3, #28] - 800d318: 429a cmp r2, r3 - 800d31a: d102 bne.n 800d322 - /* we will not accept the offered address */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, - ("dhcp_arp_reply(): arp reply matched with offered address, declining\n")); - dhcp_decline(netif); - 800d31c: 6878 ldr r0, [r7, #4] - 800d31e: f000 f809 bl 800d334 - } - } -} - 800d322: 3710 adds r7, #16 - 800d324: 46bd mov sp, r7 - 800d326: bd80 pop {r7, pc} - 800d328: 08017efc .word 0x08017efc - 800d32c: 08017fe0 .word 0x08017fe0 - 800d330: 08017f5c .word 0x08017f5c - -0800d334 : - * - * @param netif the netif under DHCP control - */ -static err_t -dhcp_decline(struct netif *netif) -{ - 800d334: b5b0 push {r4, r5, r7, lr} - 800d336: b08a sub sp, #40 ; 0x28 - 800d338: af02 add r7, sp, #8 - 800d33a: 6078 str r0, [r7, #4] - struct dhcp *dhcp = netif_dhcp_data(netif); - 800d33c: 687b ldr r3, [r7, #4] - 800d33e: 6a5b ldr r3, [r3, #36] ; 0x24 - 800d340: 61bb str r3, [r7, #24] - u16_t msecs; - struct pbuf *p_out; - u16_t options_out_len; - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline()\n")); - dhcp_set_state(dhcp, DHCP_STATE_BACKING_OFF); - 800d342: 210c movs r1, #12 - 800d344: 69b8 ldr r0, [r7, #24] - 800d346: f000 fc6f bl 800dc28 - /* create and initialize the DHCP message header */ - p_out = dhcp_create_msg(netif, dhcp, DHCP_DECLINE, &options_out_len); - 800d34a: f107 030c add.w r3, r7, #12 - 800d34e: 2204 movs r2, #4 - 800d350: 69b9 ldr r1, [r7, #24] - 800d352: 6878 ldr r0, [r7, #4] - 800d354: f001 f8f4 bl 800e540 - 800d358: 6178 str r0, [r7, #20] - if (p_out != NULL) { - 800d35a: 697b ldr r3, [r7, #20] - 800d35c: 2b00 cmp r3, #0 - 800d35e: d035 beq.n 800d3cc - struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload; - 800d360: 697b ldr r3, [r7, #20] - 800d362: 685b ldr r3, [r3, #4] - 800d364: 613b str r3, [r7, #16] - options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_REQUESTED_IP, 4); - 800d366: 89b8 ldrh r0, [r7, #12] - 800d368: 693b ldr r3, [r7, #16] - 800d36a: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800d36e: 2304 movs r3, #4 - 800d370: 2232 movs r2, #50 ; 0x32 - 800d372: f000 fc73 bl 800dc5c - 800d376: 4603 mov r3, r0 - 800d378: 81bb strh r3, [r7, #12] - options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); - 800d37a: 89bc ldrh r4, [r7, #12] - 800d37c: 693b ldr r3, [r7, #16] - 800d37e: f103 05f0 add.w r5, r3, #240 ; 0xf0 - 800d382: 69bb ldr r3, [r7, #24] - 800d384: 69db ldr r3, [r3, #28] - 800d386: 4618 mov r0, r3 - 800d388: f7f7 fdc1 bl 8004f0e - 800d38c: 4603 mov r3, r0 - 800d38e: 461a mov r2, r3 - 800d390: 4629 mov r1, r5 - 800d392: 4620 mov r0, r4 - 800d394: f000 fcee bl 800dd74 - 800d398: 4603 mov r3, r0 - 800d39a: 81bb strh r3, [r7, #12] - - LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_BACKING_OFF, msg_out, DHCP_DECLINE, &options_out_len); - dhcp_option_trailer(options_out_len, msg_out->options, p_out); - 800d39c: 89b8 ldrh r0, [r7, #12] - 800d39e: 693b ldr r3, [r7, #16] - 800d3a0: 33f0 adds r3, #240 ; 0xf0 - 800d3a2: 697a ldr r2, [r7, #20] - 800d3a4: 4619 mov r1, r3 - 800d3a6: f001 f9a1 bl 800e6ec - - /* per section 4.4.4, broadcast DECLINE messages */ - result = udp_sendto_if_src(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif, IP4_ADDR_ANY); - 800d3aa: 4b19 ldr r3, [pc, #100] ; (800d410 ) - 800d3ac: 6818 ldr r0, [r3, #0] - 800d3ae: 4b19 ldr r3, [pc, #100] ; (800d414 ) - 800d3b0: 9301 str r3, [sp, #4] - 800d3b2: 687b ldr r3, [r7, #4] - 800d3b4: 9300 str r3, [sp, #0] - 800d3b6: 2343 movs r3, #67 ; 0x43 - 800d3b8: 4a17 ldr r2, [pc, #92] ; (800d418 ) - 800d3ba: 6979 ldr r1, [r7, #20] - 800d3bc: f7ff f8d2 bl 800c564 - 800d3c0: 4603 mov r3, r0 - 800d3c2: 77fb strb r3, [r7, #31] - pbuf_free(p_out); - 800d3c4: 6978 ldr r0, [r7, #20] - 800d3c6: f7f9 f8f7 bl 80065b8 - 800d3ca: e001 b.n 800d3d0 - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_decline: BACKING OFF\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, - ("dhcp_decline: could not allocate DHCP request\n")); - result = ERR_MEM; - 800d3cc: 23ff movs r3, #255 ; 0xff - 800d3ce: 77fb strb r3, [r7, #31] - } - if (dhcp->tries < 255) { - 800d3d0: 69bb ldr r3, [r7, #24] - 800d3d2: 799b ldrb r3, [r3, #6] - 800d3d4: 2bff cmp r3, #255 ; 0xff - 800d3d6: d005 beq.n 800d3e4 - dhcp->tries++; - 800d3d8: 69bb ldr r3, [r7, #24] - 800d3da: 799b ldrb r3, [r3, #6] - 800d3dc: 3301 adds r3, #1 - 800d3de: b2da uxtb r2, r3 - 800d3e0: 69bb ldr r3, [r7, #24] - 800d3e2: 719a strb r2, [r3, #6] - } - msecs = 10 * 1000; - 800d3e4: f242 7310 movw r3, #10000 ; 0x2710 - 800d3e8: 81fb strh r3, [r7, #14] - dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); - 800d3ea: 89fb ldrh r3, [r7, #14] - 800d3ec: f203 13f3 addw r3, r3, #499 ; 0x1f3 - 800d3f0: 4a0a ldr r2, [pc, #40] ; (800d41c ) - 800d3f2: fb82 1203 smull r1, r2, r2, r3 - 800d3f6: 1152 asrs r2, r2, #5 - 800d3f8: 17db asrs r3, r3, #31 - 800d3fa: 1ad3 subs r3, r2, r3 - 800d3fc: b29a uxth r2, r3 - 800d3fe: 69bb ldr r3, [r7, #24] - 800d400: 811a strh r2, [r3, #8] - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline(): set request timeout %"U16_F" msecs\n", msecs)); - return result; - 800d402: f997 301f ldrsb.w r3, [r7, #31] -} - 800d406: 4618 mov r0, r3 - 800d408: 3720 adds r7, #32 - 800d40a: 46bd mov sp, r7 - 800d40c: bdb0 pop {r4, r5, r7, pc} - 800d40e: bf00 nop - 800d410: 20009a5c .word 0x20009a5c - 800d414: 08018acc .word 0x08018acc - 800d418: 08018ad0 .word 0x08018ad0 - 800d41c: 10624dd3 .word 0x10624dd3 - -0800d420 : - * - * @param netif the netif under DHCP control - */ -static err_t -dhcp_discover(struct netif *netif) -{ - 800d420: b580 push {r7, lr} - 800d422: b08a sub sp, #40 ; 0x28 - 800d424: af02 add r7, sp, #8 - 800d426: 6078 str r0, [r7, #4] - struct dhcp *dhcp = netif_dhcp_data(netif); - 800d428: 687b ldr r3, [r7, #4] - 800d42a: 6a5b ldr r3, [r3, #36] ; 0x24 - 800d42c: 61bb str r3, [r7, #24] - err_t result = ERR_OK; - 800d42e: 2300 movs r3, #0 - 800d430: 75fb strb r3, [r7, #23] - struct pbuf *p_out; - u16_t options_out_len; - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover()\n")); - - ip4_addr_set_any(&dhcp->offered_ip_addr); - 800d432: 69bb ldr r3, [r7, #24] - 800d434: 2200 movs r2, #0 - 800d436: 61da str r2, [r3, #28] - dhcp_set_state(dhcp, DHCP_STATE_SELECTING); - 800d438: 2106 movs r1, #6 - 800d43a: 69b8 ldr r0, [r7, #24] - 800d43c: f000 fbf4 bl 800dc28 - /* create and initialize the DHCP message header */ - p_out = dhcp_create_msg(netif, dhcp, DHCP_DISCOVER, &options_out_len); - 800d440: f107 0308 add.w r3, r7, #8 - 800d444: 2201 movs r2, #1 - 800d446: 69b9 ldr r1, [r7, #24] - 800d448: 6878 ldr r0, [r7, #4] - 800d44a: f001 f879 bl 800e540 - 800d44e: 6138 str r0, [r7, #16] - if (p_out != NULL) { - 800d450: 693b ldr r3, [r7, #16] - 800d452: 2b00 cmp r3, #0 - 800d454: d04b beq.n 800d4ee - struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload; - 800d456: 693b ldr r3, [r7, #16] - 800d458: 685b ldr r3, [r3, #4] - 800d45a: 60fb str r3, [r7, #12] - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: making request\n")); - - options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - 800d45c: 8938 ldrh r0, [r7, #8] - 800d45e: 68fb ldr r3, [r7, #12] - 800d460: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800d464: 2302 movs r3, #2 - 800d466: 2239 movs r2, #57 ; 0x39 - 800d468: f000 fbf8 bl 800dc5c - 800d46c: 4603 mov r3, r0 - 800d46e: 813b strh r3, [r7, #8] - options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); - 800d470: 8938 ldrh r0, [r7, #8] - 800d472: 68fb ldr r3, [r7, #12] - 800d474: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800d478: 687b ldr r3, [r7, #4] - 800d47a: 8d1b ldrh r3, [r3, #40] ; 0x28 - 800d47c: 461a mov r2, r3 - 800d47e: f000 fc47 bl 800dd10 - 800d482: 4603 mov r3, r0 - 800d484: 813b strh r3, [r7, #8] - - options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); - 800d486: 8938 ldrh r0, [r7, #8] - 800d488: 68fb ldr r3, [r7, #12] - 800d48a: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800d48e: 2303 movs r3, #3 - 800d490: 2237 movs r2, #55 ; 0x37 - 800d492: f000 fbe3 bl 800dc5c - 800d496: 4603 mov r3, r0 - 800d498: 813b strh r3, [r7, #8] - for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { - 800d49a: 2300 movs r3, #0 - 800d49c: 77fb strb r3, [r7, #31] - 800d49e: e00e b.n 800d4be - options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); - 800d4a0: 8938 ldrh r0, [r7, #8] - 800d4a2: 68fb ldr r3, [r7, #12] - 800d4a4: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800d4a8: 7ffb ldrb r3, [r7, #31] - 800d4aa: 4a29 ldr r2, [pc, #164] ; (800d550 ) - 800d4ac: 5cd3 ldrb r3, [r2, r3] - 800d4ae: 461a mov r2, r3 - 800d4b0: f000 fc08 bl 800dcc4 - 800d4b4: 4603 mov r3, r0 - 800d4b6: 813b strh r3, [r7, #8] - for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { - 800d4b8: 7ffb ldrb r3, [r7, #31] - 800d4ba: 3301 adds r3, #1 - 800d4bc: 77fb strb r3, [r7, #31] - 800d4be: 7ffb ldrb r3, [r7, #31] - 800d4c0: 2b02 cmp r3, #2 - 800d4c2: d9ed bls.n 800d4a0 - } - LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_SELECTING, msg_out, DHCP_DISCOVER, &options_out_len); - dhcp_option_trailer(options_out_len, msg_out->options, p_out); - 800d4c4: 8938 ldrh r0, [r7, #8] - 800d4c6: 68fb ldr r3, [r7, #12] - 800d4c8: 33f0 adds r3, #240 ; 0xf0 - 800d4ca: 693a ldr r2, [r7, #16] - 800d4cc: 4619 mov r1, r3 - 800d4ce: f001 f90d bl 800e6ec - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: sendto(DISCOVER, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER)\n")); - udp_sendto_if_src(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif, IP4_ADDR_ANY); - 800d4d2: 4b20 ldr r3, [pc, #128] ; (800d554 ) - 800d4d4: 6818 ldr r0, [r3, #0] - 800d4d6: 4b20 ldr r3, [pc, #128] ; (800d558 ) - 800d4d8: 9301 str r3, [sp, #4] - 800d4da: 687b ldr r3, [r7, #4] - 800d4dc: 9300 str r3, [sp, #0] - 800d4de: 2343 movs r3, #67 ; 0x43 - 800d4e0: 4a1e ldr r2, [pc, #120] ; (800d55c ) - 800d4e2: 6939 ldr r1, [r7, #16] - 800d4e4: f7ff f83e bl 800c564 - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: deleting()ing\n")); - pbuf_free(p_out); - 800d4e8: 6938 ldr r0, [r7, #16] - 800d4ea: f7f9 f865 bl 80065b8 - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover: SELECTING\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_discover: could not allocate DHCP request\n")); - } - if (dhcp->tries < 255) { - 800d4ee: 69bb ldr r3, [r7, #24] - 800d4f0: 799b ldrb r3, [r3, #6] - 800d4f2: 2bff cmp r3, #255 ; 0xff - 800d4f4: d005 beq.n 800d502 - dhcp->tries++; - 800d4f6: 69bb ldr r3, [r7, #24] - 800d4f8: 799b ldrb r3, [r3, #6] - 800d4fa: 3301 adds r3, #1 - 800d4fc: b2da uxtb r2, r3 - 800d4fe: 69bb ldr r3, [r7, #24] - 800d500: 719a strb r2, [r3, #6] - if (dhcp->tries >= LWIP_DHCP_AUTOIP_COOP_TRIES && dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_OFF) { - dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_ON; - autoip_start(netif); - } -#endif /* LWIP_DHCP_AUTOIP_COOP */ - msecs = (u16_t)((dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000); - 800d502: 69bb ldr r3, [r7, #24] - 800d504: 799b ldrb r3, [r3, #6] - 800d506: 2b05 cmp r3, #5 - 800d508: d80d bhi.n 800d526 - 800d50a: 69bb ldr r3, [r7, #24] - 800d50c: 799b ldrb r3, [r3, #6] - 800d50e: 461a mov r2, r3 - 800d510: 2301 movs r3, #1 - 800d512: 4093 lsls r3, r2 - 800d514: b29b uxth r3, r3 - 800d516: 461a mov r2, r3 - 800d518: 0152 lsls r2, r2, #5 - 800d51a: 1ad2 subs r2, r2, r3 - 800d51c: 0092 lsls r2, r2, #2 - 800d51e: 4413 add r3, r2 - 800d520: 00db lsls r3, r3, #3 - 800d522: b29b uxth r3, r3 - 800d524: e001 b.n 800d52a - 800d526: f64e 2360 movw r3, #60000 ; 0xea60 - 800d52a: 817b strh r3, [r7, #10] - dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); - 800d52c: 897b ldrh r3, [r7, #10] - 800d52e: f203 13f3 addw r3, r3, #499 ; 0x1f3 - 800d532: 4a0b ldr r2, [pc, #44] ; (800d560 ) - 800d534: fb82 1203 smull r1, r2, r2, r3 - 800d538: 1152 asrs r2, r2, #5 - 800d53a: 17db asrs r3, r3, #31 - 800d53c: 1ad3 subs r3, r2, r3 - 800d53e: b29a uxth r2, r3 - 800d540: 69bb ldr r3, [r7, #24] - 800d542: 811a strh r2, [r3, #8] - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover(): set request timeout %"U16_F" msecs\n", msecs)); - return result; - 800d544: f997 3017 ldrsb.w r3, [r7, #23] -} - 800d548: 4618 mov r0, r3 - 800d54a: 3720 adds r7, #32 - 800d54c: 46bd mov sp, r7 - 800d54e: bd80 pop {r7, pc} - 800d550: 2000002c .word 0x2000002c - 800d554: 20009a5c .word 0x20009a5c - 800d558: 08018acc .word 0x08018acc - 800d55c: 08018ad0 .word 0x08018ad0 - 800d560: 10624dd3 .word 0x10624dd3 - -0800d564 : - * - * @param netif network interface to bind to the offered address - */ -static void -dhcp_bind(struct netif *netif) -{ - 800d564: b580 push {r7, lr} - 800d566: b088 sub sp, #32 - 800d568: af00 add r7, sp, #0 - 800d56a: 6078 str r0, [r7, #4] - u32_t timeout; - struct dhcp *dhcp; - ip4_addr_t sn_mask, gw_addr; - LWIP_ERROR("dhcp_bind: netif != NULL", (netif != NULL), return;); - 800d56c: 687b ldr r3, [r7, #4] - 800d56e: 2b00 cmp r3, #0 - 800d570: d107 bne.n 800d582 - 800d572: 4b64 ldr r3, [pc, #400] ; (800d704 ) - 800d574: f240 4215 movw r2, #1045 ; 0x415 - 800d578: 4963 ldr r1, [pc, #396] ; (800d708 ) - 800d57a: 4864 ldr r0, [pc, #400] ; (800d70c ) - 800d57c: f003 fd94 bl 80110a8 - 800d580: e0bc b.n 800d6fc - dhcp = netif_dhcp_data(netif); - 800d582: 687b ldr r3, [r7, #4] - 800d584: 6a5b ldr r3, [r3, #36] ; 0x24 - 800d586: 61bb str r3, [r7, #24] - LWIP_ERROR("dhcp_bind: dhcp != NULL", (dhcp != NULL), return;); - 800d588: 69bb ldr r3, [r7, #24] - 800d58a: 2b00 cmp r3, #0 - 800d58c: d107 bne.n 800d59e - 800d58e: 4b5d ldr r3, [pc, #372] ; (800d704 ) - 800d590: f240 4217 movw r2, #1047 ; 0x417 - 800d594: 495e ldr r1, [pc, #376] ; (800d710 ) - 800d596: 485d ldr r0, [pc, #372] ; (800d70c ) - 800d598: f003 fd86 bl 80110a8 - 800d59c: e0ae b.n 800d6fc - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(netif=%p) %c%c%"U16_F"\n", (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); - - /* reset time used of lease */ - dhcp->lease_used = 0; - 800d59e: 69bb ldr r3, [r7, #24] - 800d5a0: 2200 movs r2, #0 - 800d5a2: 825a strh r2, [r3, #18] - - if (dhcp->offered_t0_lease != 0xffffffffUL) { - 800d5a4: 69bb ldr r3, [r7, #24] - 800d5a6: 6a9b ldr r3, [r3, #40] ; 0x28 - 800d5a8: f1b3 3fff cmp.w r3, #4294967295 - 800d5ac: d019 beq.n 800d5e2 - /* set renewal period timer */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t0 renewal timer %"U32_F" secs\n", dhcp->offered_t0_lease)); - timeout = (dhcp->offered_t0_lease + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; - 800d5ae: 69bb ldr r3, [r7, #24] - 800d5b0: 6a9b ldr r3, [r3, #40] ; 0x28 - 800d5b2: 331e adds r3, #30 - 800d5b4: 4a57 ldr r2, [pc, #348] ; (800d714 ) - 800d5b6: fba2 2303 umull r2, r3, r2, r3 - 800d5ba: 095b lsrs r3, r3, #5 - 800d5bc: 61fb str r3, [r7, #28] - if (timeout > 0xffff) { - 800d5be: 69fb ldr r3, [r7, #28] - 800d5c0: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 800d5c4: d302 bcc.n 800d5cc - timeout = 0xffff; - 800d5c6: f64f 73ff movw r3, #65535 ; 0xffff - 800d5ca: 61fb str r3, [r7, #28] - } - dhcp->t0_timeout = (u16_t)timeout; - 800d5cc: 69fb ldr r3, [r7, #28] - 800d5ce: b29a uxth r2, r3 - 800d5d0: 69bb ldr r3, [r7, #24] - 800d5d2: 829a strh r2, [r3, #20] - if (dhcp->t0_timeout == 0) { - 800d5d4: 69bb ldr r3, [r7, #24] - 800d5d6: 8a9b ldrh r3, [r3, #20] - 800d5d8: 2b00 cmp r3, #0 - 800d5da: d102 bne.n 800d5e2 - dhcp->t0_timeout = 1; - 800d5dc: 69bb ldr r3, [r7, #24] - 800d5de: 2201 movs r2, #1 - 800d5e0: 829a strh r2, [r3, #20] - } - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t0_lease * 1000)); - } - - /* temporary DHCP lease? */ - if (dhcp->offered_t1_renew != 0xffffffffUL) { - 800d5e2: 69bb ldr r3, [r7, #24] - 800d5e4: 6adb ldr r3, [r3, #44] ; 0x2c - 800d5e6: f1b3 3fff cmp.w r3, #4294967295 - 800d5ea: d01d beq.n 800d628 - /* set renewal period timer */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t1 renewal timer %"U32_F" secs\n", dhcp->offered_t1_renew)); - timeout = (dhcp->offered_t1_renew + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; - 800d5ec: 69bb ldr r3, [r7, #24] - 800d5ee: 6adb ldr r3, [r3, #44] ; 0x2c - 800d5f0: 331e adds r3, #30 - 800d5f2: 4a48 ldr r2, [pc, #288] ; (800d714 ) - 800d5f4: fba2 2303 umull r2, r3, r2, r3 - 800d5f8: 095b lsrs r3, r3, #5 - 800d5fa: 61fb str r3, [r7, #28] - if (timeout > 0xffff) { - 800d5fc: 69fb ldr r3, [r7, #28] - 800d5fe: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 800d602: d302 bcc.n 800d60a - timeout = 0xffff; - 800d604: f64f 73ff movw r3, #65535 ; 0xffff - 800d608: 61fb str r3, [r7, #28] - } - dhcp->t1_timeout = (u16_t)timeout; - 800d60a: 69fb ldr r3, [r7, #28] - 800d60c: b29a uxth r2, r3 - 800d60e: 69bb ldr r3, [r7, #24] - 800d610: 815a strh r2, [r3, #10] - if (dhcp->t1_timeout == 0) { - 800d612: 69bb ldr r3, [r7, #24] - 800d614: 895b ldrh r3, [r3, #10] - 800d616: 2b00 cmp r3, #0 - 800d618: d102 bne.n 800d620 - dhcp->t1_timeout = 1; - 800d61a: 69bb ldr r3, [r7, #24] - 800d61c: 2201 movs r2, #1 - 800d61e: 815a strh r2, [r3, #10] - } - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t1_renew * 1000)); - dhcp->t1_renew_time = dhcp->t1_timeout; - 800d620: 69bb ldr r3, [r7, #24] - 800d622: 895a ldrh r2, [r3, #10] - 800d624: 69bb ldr r3, [r7, #24] - 800d626: 81da strh r2, [r3, #14] - } - /* set renewal period timer */ - if (dhcp->offered_t2_rebind != 0xffffffffUL) { - 800d628: 69bb ldr r3, [r7, #24] - 800d62a: 6b1b ldr r3, [r3, #48] ; 0x30 - 800d62c: f1b3 3fff cmp.w r3, #4294967295 - 800d630: d01d beq.n 800d66e - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t2 rebind timer %"U32_F" secs\n", dhcp->offered_t2_rebind)); - timeout = (dhcp->offered_t2_rebind + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; - 800d632: 69bb ldr r3, [r7, #24] - 800d634: 6b1b ldr r3, [r3, #48] ; 0x30 - 800d636: 331e adds r3, #30 - 800d638: 4a36 ldr r2, [pc, #216] ; (800d714 ) - 800d63a: fba2 2303 umull r2, r3, r2, r3 - 800d63e: 095b lsrs r3, r3, #5 - 800d640: 61fb str r3, [r7, #28] - if (timeout > 0xffff) { - 800d642: 69fb ldr r3, [r7, #28] - 800d644: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 800d648: d302 bcc.n 800d650 - timeout = 0xffff; - 800d64a: f64f 73ff movw r3, #65535 ; 0xffff - 800d64e: 61fb str r3, [r7, #28] - } - dhcp->t2_timeout = (u16_t)timeout; - 800d650: 69fb ldr r3, [r7, #28] - 800d652: b29a uxth r2, r3 - 800d654: 69bb ldr r3, [r7, #24] - 800d656: 819a strh r2, [r3, #12] - if (dhcp->t2_timeout == 0) { - 800d658: 69bb ldr r3, [r7, #24] - 800d65a: 899b ldrh r3, [r3, #12] - 800d65c: 2b00 cmp r3, #0 - 800d65e: d102 bne.n 800d666 - dhcp->t2_timeout = 1; - 800d660: 69bb ldr r3, [r7, #24] - 800d662: 2201 movs r2, #1 - 800d664: 819a strh r2, [r3, #12] - } - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t2_rebind * 1000)); - dhcp->t2_rebind_time = dhcp->t2_timeout; - 800d666: 69bb ldr r3, [r7, #24] - 800d668: 899a ldrh r2, [r3, #12] - 800d66a: 69bb ldr r3, [r7, #24] - 800d66c: 821a strh r2, [r3, #16] - } - - /* If we have sub 1 minute lease, t2 and t1 will kick in at the same time. */ - if ((dhcp->t1_timeout >= dhcp->t2_timeout) && (dhcp->t2_timeout > 0)) { - 800d66e: 69bb ldr r3, [r7, #24] - 800d670: 895a ldrh r2, [r3, #10] - 800d672: 69bb ldr r3, [r7, #24] - 800d674: 899b ldrh r3, [r3, #12] - 800d676: 429a cmp r2, r3 - 800d678: d306 bcc.n 800d688 - 800d67a: 69bb ldr r3, [r7, #24] - 800d67c: 899b ldrh r3, [r3, #12] - 800d67e: 2b00 cmp r3, #0 - 800d680: d002 beq.n 800d688 - dhcp->t1_timeout = 0; - 800d682: 69bb ldr r3, [r7, #24] - 800d684: 2200 movs r2, #0 - 800d686: 815a strh r2, [r3, #10] - } - - if (dhcp->subnet_mask_given) { - 800d688: 69bb ldr r3, [r7, #24] - 800d68a: 79db ldrb r3, [r3, #7] - 800d68c: 2b00 cmp r3, #0 - 800d68e: d003 beq.n 800d698 - /* copy offered network mask */ - ip4_addr_copy(sn_mask, dhcp->offered_sn_mask); - 800d690: 69bb ldr r3, [r7, #24] - 800d692: 6a1b ldr r3, [r3, #32] - 800d694: 613b str r3, [r7, #16] - 800d696: e014 b.n 800d6c2 - } else { - /* subnet mask not given, choose a safe subnet mask given the network class */ - u8_t first_octet = ip4_addr1(&dhcp->offered_ip_addr); - 800d698: 69bb ldr r3, [r7, #24] - 800d69a: 331c adds r3, #28 - 800d69c: 781b ldrb r3, [r3, #0] - 800d69e: 75fb strb r3, [r7, #23] - if (first_octet <= 127) { - 800d6a0: f997 3017 ldrsb.w r3, [r7, #23] - 800d6a4: 2b00 cmp r3, #0 - 800d6a6: db02 blt.n 800d6ae - ip4_addr_set_u32(&sn_mask, PP_HTONL(0xff000000UL)); - 800d6a8: 23ff movs r3, #255 ; 0xff - 800d6aa: 613b str r3, [r7, #16] - 800d6ac: e009 b.n 800d6c2 - } else if (first_octet >= 192) { - 800d6ae: 7dfb ldrb r3, [r7, #23] - 800d6b0: 2bbf cmp r3, #191 ; 0xbf - 800d6b2: d903 bls.n 800d6bc - ip4_addr_set_u32(&sn_mask, PP_HTONL(0xffffff00UL)); - 800d6b4: f06f 437f mvn.w r3, #4278190080 ; 0xff000000 - 800d6b8: 613b str r3, [r7, #16] - 800d6ba: e002 b.n 800d6c2 - } else { - ip4_addr_set_u32(&sn_mask, PP_HTONL(0xffff0000UL)); - 800d6bc: f64f 73ff movw r3, #65535 ; 0xffff - 800d6c0: 613b str r3, [r7, #16] - } - } - - ip4_addr_copy(gw_addr, dhcp->offered_gw_addr); - 800d6c2: 69bb ldr r3, [r7, #24] - 800d6c4: 6a5b ldr r3, [r3, #36] ; 0x24 - 800d6c6: 60fb str r3, [r7, #12] - /* gateway address not given? */ - if (ip4_addr_isany_val(gw_addr)) { - 800d6c8: 68fb ldr r3, [r7, #12] - 800d6ca: 2b00 cmp r3, #0 - 800d6cc: d108 bne.n 800d6e0 - /* copy network address */ - ip4_addr_get_network(&gw_addr, &dhcp->offered_ip_addr, &sn_mask); - 800d6ce: 69bb ldr r3, [r7, #24] - 800d6d0: 69da ldr r2, [r3, #28] - 800d6d2: 693b ldr r3, [r7, #16] - 800d6d4: 4013 ands r3, r2 - 800d6d6: 60fb str r3, [r7, #12] - /* use first host address on network as gateway */ - ip4_addr_set_u32(&gw_addr, ip4_addr_get_u32(&gw_addr) | PP_HTONL(0x00000001UL)); - 800d6d8: 68fb ldr r3, [r7, #12] - 800d6da: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000 - 800d6de: 60fb str r3, [r7, #12] - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): IP: 0x%08"X32_F" SN: 0x%08"X32_F" GW: 0x%08"X32_F"\n", - ip4_addr_get_u32(&dhcp->offered_ip_addr), ip4_addr_get_u32(&sn_mask), ip4_addr_get_u32(&gw_addr))); - /* netif is now bound to DHCP leased address - set this before assigning the address - to ensure the callback can use dhcp_supplied_address() */ - dhcp_set_state(dhcp, DHCP_STATE_BOUND); - 800d6e0: 210a movs r1, #10 - 800d6e2: 69b8 ldr r0, [r7, #24] - 800d6e4: f000 faa0 bl 800dc28 - - netif_set_addr(netif, &dhcp->offered_ip_addr, &sn_mask, &gw_addr); - 800d6e8: 69bb ldr r3, [r7, #24] - 800d6ea: f103 011c add.w r1, r3, #28 - 800d6ee: f107 030c add.w r3, r7, #12 - 800d6f2: f107 0210 add.w r2, r7, #16 - 800d6f6: 6878 ldr r0, [r7, #4] - 800d6f8: f7f8 fa7e bl 8005bf8 - /* interface is used by routing now that an address is set */ -} - 800d6fc: 3720 adds r7, #32 - 800d6fe: 46bd mov sp, r7 - 800d700: bd80 pop {r7, pc} - 800d702: bf00 nop - 800d704: 08017efc .word 0x08017efc - 800d708: 0801805c .word 0x0801805c - 800d70c: 08017f5c .word 0x08017f5c - 800d710: 08018078 .word 0x08018078 - 800d714: 88888889 .word 0x88888889 - -0800d718 : - * - * @param netif network interface which must renew its lease - */ -err_t -dhcp_renew(struct netif *netif) -{ - 800d718: b580 push {r7, lr} - 800d71a: b08a sub sp, #40 ; 0x28 - 800d71c: af02 add r7, sp, #8 - 800d71e: 6078 str r0, [r7, #4] - struct dhcp *dhcp = netif_dhcp_data(netif); - 800d720: 687b ldr r3, [r7, #4] - 800d722: 6a5b ldr r3, [r3, #36] ; 0x24 - 800d724: 61bb str r3, [r7, #24] - struct pbuf *p_out; - u16_t options_out_len; - - LWIP_ASSERT_CORE_LOCKED(); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_renew()\n")); - dhcp_set_state(dhcp, DHCP_STATE_RENEWING); - 800d726: 2105 movs r1, #5 - 800d728: 69b8 ldr r0, [r7, #24] - 800d72a: f000 fa7d bl 800dc28 - - /* create and initialize the DHCP message header */ - p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len); - 800d72e: f107 030c add.w r3, r7, #12 - 800d732: 2203 movs r2, #3 - 800d734: 69b9 ldr r1, [r7, #24] - 800d736: 6878 ldr r0, [r7, #4] - 800d738: f000 ff02 bl 800e540 - 800d73c: 6178 str r0, [r7, #20] - if (p_out != NULL) { - 800d73e: 697b ldr r3, [r7, #20] - 800d740: 2b00 cmp r3, #0 - 800d742: d04e beq.n 800d7e2 - struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload; - 800d744: 697b ldr r3, [r7, #20] - 800d746: 685b ldr r3, [r3, #4] - 800d748: 613b str r3, [r7, #16] - options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - 800d74a: 89b8 ldrh r0, [r7, #12] - 800d74c: 693b ldr r3, [r7, #16] - 800d74e: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800d752: 2302 movs r3, #2 - 800d754: 2239 movs r2, #57 ; 0x39 - 800d756: f000 fa81 bl 800dc5c - 800d75a: 4603 mov r3, r0 - 800d75c: 81bb strh r3, [r7, #12] - options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); - 800d75e: 89b8 ldrh r0, [r7, #12] - 800d760: 693b ldr r3, [r7, #16] - 800d762: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800d766: 687b ldr r3, [r7, #4] - 800d768: 8d1b ldrh r3, [r3, #40] ; 0x28 - 800d76a: 461a mov r2, r3 - 800d76c: f000 fad0 bl 800dd10 - 800d770: 4603 mov r3, r0 - 800d772: 81bb strh r3, [r7, #12] - - options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); - 800d774: 89b8 ldrh r0, [r7, #12] - 800d776: 693b ldr r3, [r7, #16] - 800d778: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800d77c: 2303 movs r3, #3 - 800d77e: 2237 movs r2, #55 ; 0x37 - 800d780: f000 fa6c bl 800dc5c - 800d784: 4603 mov r3, r0 - 800d786: 81bb strh r3, [r7, #12] - for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { - 800d788: 2300 movs r3, #0 - 800d78a: 77bb strb r3, [r7, #30] - 800d78c: e00e b.n 800d7ac - options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); - 800d78e: 89b8 ldrh r0, [r7, #12] - 800d790: 693b ldr r3, [r7, #16] - 800d792: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800d796: 7fbb ldrb r3, [r7, #30] - 800d798: 4a2a ldr r2, [pc, #168] ; (800d844 ) - 800d79a: 5cd3 ldrb r3, [r2, r3] - 800d79c: 461a mov r2, r3 - 800d79e: f000 fa91 bl 800dcc4 - 800d7a2: 4603 mov r3, r0 - 800d7a4: 81bb strh r3, [r7, #12] - for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { - 800d7a6: 7fbb ldrb r3, [r7, #30] - 800d7a8: 3301 adds r3, #1 - 800d7aa: 77bb strb r3, [r7, #30] - 800d7ac: 7fbb ldrb r3, [r7, #30] - 800d7ae: 2b02 cmp r3, #2 - 800d7b0: d9ed bls.n 800d78e -#if LWIP_NETIF_HOSTNAME - options_out_len = dhcp_option_hostname(options_out_len, msg_out->options, netif); -#endif /* LWIP_NETIF_HOSTNAME */ - - LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_RENEWING, msg_out, DHCP_REQUEST, &options_out_len); - dhcp_option_trailer(options_out_len, msg_out->options, p_out); - 800d7b2: 89b8 ldrh r0, [r7, #12] - 800d7b4: 693b ldr r3, [r7, #16] - 800d7b6: 33f0 adds r3, #240 ; 0xf0 - 800d7b8: 697a ldr r2, [r7, #20] - 800d7ba: 4619 mov r1, r3 - 800d7bc: f000 ff96 bl 800e6ec - - result = udp_sendto_if(dhcp_pcb, p_out, &dhcp->server_ip_addr, LWIP_IANA_PORT_DHCP_SERVER, netif); - 800d7c0: 4b21 ldr r3, [pc, #132] ; (800d848 ) - 800d7c2: 6818 ldr r0, [r3, #0] - 800d7c4: 69bb ldr r3, [r7, #24] - 800d7c6: f103 0218 add.w r2, r3, #24 - 800d7ca: 687b ldr r3, [r7, #4] - 800d7cc: 9300 str r3, [sp, #0] - 800d7ce: 2343 movs r3, #67 ; 0x43 - 800d7d0: 6979 ldr r1, [r7, #20] - 800d7d2: f7fe fe53 bl 800c47c - 800d7d6: 4603 mov r3, r0 - 800d7d8: 77fb strb r3, [r7, #31] - pbuf_free(p_out); - 800d7da: 6978 ldr r0, [r7, #20] - 800d7dc: f7f8 feec bl 80065b8 - 800d7e0: e001 b.n 800d7e6 - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew: RENEWING\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_renew: could not allocate DHCP request\n")); - result = ERR_MEM; - 800d7e2: 23ff movs r3, #255 ; 0xff - 800d7e4: 77fb strb r3, [r7, #31] - } - if (dhcp->tries < 255) { - 800d7e6: 69bb ldr r3, [r7, #24] - 800d7e8: 799b ldrb r3, [r3, #6] - 800d7ea: 2bff cmp r3, #255 ; 0xff - 800d7ec: d005 beq.n 800d7fa - dhcp->tries++; - 800d7ee: 69bb ldr r3, [r7, #24] - 800d7f0: 799b ldrb r3, [r3, #6] - 800d7f2: 3301 adds r3, #1 - 800d7f4: b2da uxtb r2, r3 - 800d7f6: 69bb ldr r3, [r7, #24] - 800d7f8: 719a strb r2, [r3, #6] - } - /* back-off on retries, but to a maximum of 20 seconds */ - msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 2000 : 20 * 1000); - 800d7fa: 69bb ldr r3, [r7, #24] - 800d7fc: 799b ldrb r3, [r3, #6] - 800d7fe: 2b09 cmp r3, #9 - 800d800: d80a bhi.n 800d818 - 800d802: 69bb ldr r3, [r7, #24] - 800d804: 799b ldrb r3, [r3, #6] - 800d806: b29b uxth r3, r3 - 800d808: 461a mov r2, r3 - 800d80a: 0152 lsls r2, r2, #5 - 800d80c: 1ad2 subs r2, r2, r3 - 800d80e: 0092 lsls r2, r2, #2 - 800d810: 4413 add r3, r2 - 800d812: 011b lsls r3, r3, #4 - 800d814: b29b uxth r3, r3 - 800d816: e001 b.n 800d81c - 800d818: f644 6320 movw r3, #20000 ; 0x4e20 - 800d81c: 81fb strh r3, [r7, #14] - dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); - 800d81e: 89fb ldrh r3, [r7, #14] - 800d820: f203 13f3 addw r3, r3, #499 ; 0x1f3 - 800d824: 4a09 ldr r2, [pc, #36] ; (800d84c ) - 800d826: fb82 1203 smull r1, r2, r2, r3 - 800d82a: 1152 asrs r2, r2, #5 - 800d82c: 17db asrs r3, r3, #31 - 800d82e: 1ad3 subs r3, r2, r3 - 800d830: b29a uxth r2, r3 - 800d832: 69bb ldr r3, [r7, #24] - 800d834: 811a strh r2, [r3, #8] - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew(): set request timeout %"U16_F" msecs\n", msecs)); - return result; - 800d836: f997 301f ldrsb.w r3, [r7, #31] -} - 800d83a: 4618 mov r0, r3 - 800d83c: 3720 adds r7, #32 - 800d83e: 46bd mov sp, r7 - 800d840: bd80 pop {r7, pc} - 800d842: bf00 nop - 800d844: 2000002c .word 0x2000002c - 800d848: 20009a5c .word 0x20009a5c - 800d84c: 10624dd3 .word 0x10624dd3 - -0800d850 : - * - * @param netif network interface which must rebind with a DHCP server - */ -static err_t -dhcp_rebind(struct netif *netif) -{ - 800d850: b580 push {r7, lr} - 800d852: b08a sub sp, #40 ; 0x28 - 800d854: af02 add r7, sp, #8 - 800d856: 6078 str r0, [r7, #4] - struct dhcp *dhcp = netif_dhcp_data(netif); - 800d858: 687b ldr r3, [r7, #4] - 800d85a: 6a5b ldr r3, [r3, #36] ; 0x24 - 800d85c: 61bb str r3, [r7, #24] - u8_t i; - struct pbuf *p_out; - u16_t options_out_len; - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind()\n")); - dhcp_set_state(dhcp, DHCP_STATE_REBINDING); - 800d85e: 2104 movs r1, #4 - 800d860: 69b8 ldr r0, [r7, #24] - 800d862: f000 f9e1 bl 800dc28 - - /* create and initialize the DHCP message header */ - p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len); - 800d866: f107 030c add.w r3, r7, #12 - 800d86a: 2203 movs r2, #3 - 800d86c: 69b9 ldr r1, [r7, #24] - 800d86e: 6878 ldr r0, [r7, #4] - 800d870: f000 fe66 bl 800e540 - 800d874: 6178 str r0, [r7, #20] - if (p_out != NULL) { - 800d876: 697b ldr r3, [r7, #20] - 800d878: 2b00 cmp r3, #0 - 800d87a: d04c beq.n 800d916 - struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload; - 800d87c: 697b ldr r3, [r7, #20] - 800d87e: 685b ldr r3, [r3, #4] - 800d880: 613b str r3, [r7, #16] - options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - 800d882: 89b8 ldrh r0, [r7, #12] - 800d884: 693b ldr r3, [r7, #16] - 800d886: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800d88a: 2302 movs r3, #2 - 800d88c: 2239 movs r2, #57 ; 0x39 - 800d88e: f000 f9e5 bl 800dc5c - 800d892: 4603 mov r3, r0 - 800d894: 81bb strh r3, [r7, #12] - options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); - 800d896: 89b8 ldrh r0, [r7, #12] - 800d898: 693b ldr r3, [r7, #16] - 800d89a: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800d89e: 687b ldr r3, [r7, #4] - 800d8a0: 8d1b ldrh r3, [r3, #40] ; 0x28 - 800d8a2: 461a mov r2, r3 - 800d8a4: f000 fa34 bl 800dd10 - 800d8a8: 4603 mov r3, r0 - 800d8aa: 81bb strh r3, [r7, #12] - - options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); - 800d8ac: 89b8 ldrh r0, [r7, #12] - 800d8ae: 693b ldr r3, [r7, #16] - 800d8b0: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800d8b4: 2303 movs r3, #3 - 800d8b6: 2237 movs r2, #55 ; 0x37 - 800d8b8: f000 f9d0 bl 800dc5c - 800d8bc: 4603 mov r3, r0 - 800d8be: 81bb strh r3, [r7, #12] - for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { - 800d8c0: 2300 movs r3, #0 - 800d8c2: 77bb strb r3, [r7, #30] - 800d8c4: e00e b.n 800d8e4 - options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); - 800d8c6: 89b8 ldrh r0, [r7, #12] - 800d8c8: 693b ldr r3, [r7, #16] - 800d8ca: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800d8ce: 7fbb ldrb r3, [r7, #30] - 800d8d0: 4a29 ldr r2, [pc, #164] ; (800d978 ) - 800d8d2: 5cd3 ldrb r3, [r2, r3] - 800d8d4: 461a mov r2, r3 - 800d8d6: f000 f9f5 bl 800dcc4 - 800d8da: 4603 mov r3, r0 - 800d8dc: 81bb strh r3, [r7, #12] - for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { - 800d8de: 7fbb ldrb r3, [r7, #30] - 800d8e0: 3301 adds r3, #1 - 800d8e2: 77bb strb r3, [r7, #30] - 800d8e4: 7fbb ldrb r3, [r7, #30] - 800d8e6: 2b02 cmp r3, #2 - 800d8e8: d9ed bls.n 800d8c6 -#if LWIP_NETIF_HOSTNAME - options_out_len = dhcp_option_hostname(options_out_len, msg_out->options, netif); -#endif /* LWIP_NETIF_HOSTNAME */ - - LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_REBINDING, msg_out, DHCP_DISCOVER, &options_out_len); - dhcp_option_trailer(options_out_len, msg_out->options, p_out); - 800d8ea: 89b8 ldrh r0, [r7, #12] - 800d8ec: 693b ldr r3, [r7, #16] - 800d8ee: 33f0 adds r3, #240 ; 0xf0 - 800d8f0: 697a ldr r2, [r7, #20] - 800d8f2: 4619 mov r1, r3 - 800d8f4: f000 fefa bl 800e6ec - - /* broadcast to server */ - result = udp_sendto_if(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif); - 800d8f8: 4b20 ldr r3, [pc, #128] ; (800d97c ) - 800d8fa: 6818 ldr r0, [r3, #0] - 800d8fc: 687b ldr r3, [r7, #4] - 800d8fe: 9300 str r3, [sp, #0] - 800d900: 2343 movs r3, #67 ; 0x43 - 800d902: 4a1f ldr r2, [pc, #124] ; (800d980 ) - 800d904: 6979 ldr r1, [r7, #20] - 800d906: f7fe fdb9 bl 800c47c - 800d90a: 4603 mov r3, r0 - 800d90c: 77fb strb r3, [r7, #31] - pbuf_free(p_out); - 800d90e: 6978 ldr r0, [r7, #20] - 800d910: f7f8 fe52 bl 80065b8 - 800d914: e001 b.n 800d91a - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind: REBINDING\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_rebind: could not allocate DHCP request\n")); - result = ERR_MEM; - 800d916: 23ff movs r3, #255 ; 0xff - 800d918: 77fb strb r3, [r7, #31] - } - if (dhcp->tries < 255) { - 800d91a: 69bb ldr r3, [r7, #24] - 800d91c: 799b ldrb r3, [r3, #6] - 800d91e: 2bff cmp r3, #255 ; 0xff - 800d920: d005 beq.n 800d92e - dhcp->tries++; - 800d922: 69bb ldr r3, [r7, #24] - 800d924: 799b ldrb r3, [r3, #6] - 800d926: 3301 adds r3, #1 - 800d928: b2da uxtb r2, r3 - 800d92a: 69bb ldr r3, [r7, #24] - 800d92c: 719a strb r2, [r3, #6] - } - msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000); - 800d92e: 69bb ldr r3, [r7, #24] - 800d930: 799b ldrb r3, [r3, #6] - 800d932: 2b09 cmp r3, #9 - 800d934: d80a bhi.n 800d94c - 800d936: 69bb ldr r3, [r7, #24] - 800d938: 799b ldrb r3, [r3, #6] - 800d93a: b29b uxth r3, r3 - 800d93c: 461a mov r2, r3 - 800d93e: 0152 lsls r2, r2, #5 - 800d940: 1ad2 subs r2, r2, r3 - 800d942: 0092 lsls r2, r2, #2 - 800d944: 4413 add r3, r2 - 800d946: 00db lsls r3, r3, #3 - 800d948: b29b uxth r3, r3 - 800d94a: e001 b.n 800d950 - 800d94c: f242 7310 movw r3, #10000 ; 0x2710 - 800d950: 81fb strh r3, [r7, #14] - dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); - 800d952: 89fb ldrh r3, [r7, #14] - 800d954: f203 13f3 addw r3, r3, #499 ; 0x1f3 - 800d958: 4a0a ldr r2, [pc, #40] ; (800d984 ) - 800d95a: fb82 1203 smull r1, r2, r2, r3 - 800d95e: 1152 asrs r2, r2, #5 - 800d960: 17db asrs r3, r3, #31 - 800d962: 1ad3 subs r3, r2, r3 - 800d964: b29a uxth r2, r3 - 800d966: 69bb ldr r3, [r7, #24] - 800d968: 811a strh r2, [r3, #8] - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind(): set request timeout %"U16_F" msecs\n", msecs)); - return result; - 800d96a: f997 301f ldrsb.w r3, [r7, #31] -} - 800d96e: 4618 mov r0, r3 - 800d970: 3720 adds r7, #32 - 800d972: 46bd mov sp, r7 - 800d974: bd80 pop {r7, pc} - 800d976: bf00 nop - 800d978: 2000002c .word 0x2000002c - 800d97c: 20009a5c .word 0x20009a5c - 800d980: 08018ad0 .word 0x08018ad0 - 800d984: 10624dd3 .word 0x10624dd3 - -0800d988 : - * - * @param netif network interface which must reboot - */ -static err_t -dhcp_reboot(struct netif *netif) -{ - 800d988: b5b0 push {r4, r5, r7, lr} - 800d98a: b08a sub sp, #40 ; 0x28 - 800d98c: af02 add r7, sp, #8 - 800d98e: 6078 str r0, [r7, #4] - struct dhcp *dhcp = netif_dhcp_data(netif); - 800d990: 687b ldr r3, [r7, #4] - 800d992: 6a5b ldr r3, [r3, #36] ; 0x24 - 800d994: 61bb str r3, [r7, #24] - u8_t i; - struct pbuf *p_out; - u16_t options_out_len; - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot()\n")); - dhcp_set_state(dhcp, DHCP_STATE_REBOOTING); - 800d996: 2103 movs r1, #3 - 800d998: 69b8 ldr r0, [r7, #24] - 800d99a: f000 f945 bl 800dc28 - - /* create and initialize the DHCP message header */ - p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len); - 800d99e: f107 030c add.w r3, r7, #12 - 800d9a2: 2203 movs r2, #3 - 800d9a4: 69b9 ldr r1, [r7, #24] - 800d9a6: 6878 ldr r0, [r7, #4] - 800d9a8: f000 fdca bl 800e540 - 800d9ac: 6178 str r0, [r7, #20] - if (p_out != NULL) { - 800d9ae: 697b ldr r3, [r7, #20] - 800d9b0: 2b00 cmp r3, #0 - 800d9b2: d066 beq.n 800da82 - struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload; - 800d9b4: 697b ldr r3, [r7, #20] - 800d9b6: 685b ldr r3, [r3, #4] - 800d9b8: 613b str r3, [r7, #16] - options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - 800d9ba: 89b8 ldrh r0, [r7, #12] - 800d9bc: 693b ldr r3, [r7, #16] - 800d9be: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800d9c2: 2302 movs r3, #2 - 800d9c4: 2239 movs r2, #57 ; 0x39 - 800d9c6: f000 f949 bl 800dc5c - 800d9ca: 4603 mov r3, r0 - 800d9cc: 81bb strh r3, [r7, #12] - options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN_MIN_REQUIRED); - 800d9ce: 89b8 ldrh r0, [r7, #12] - 800d9d0: 693b ldr r3, [r7, #16] - 800d9d2: 33f0 adds r3, #240 ; 0xf0 - 800d9d4: f44f 7210 mov.w r2, #576 ; 0x240 - 800d9d8: 4619 mov r1, r3 - 800d9da: f000 f999 bl 800dd10 - 800d9de: 4603 mov r3, r0 - 800d9e0: 81bb strh r3, [r7, #12] - - options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_REQUESTED_IP, 4); - 800d9e2: 89b8 ldrh r0, [r7, #12] - 800d9e4: 693b ldr r3, [r7, #16] - 800d9e6: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800d9ea: 2304 movs r3, #4 - 800d9ec: 2232 movs r2, #50 ; 0x32 - 800d9ee: f000 f935 bl 800dc5c - 800d9f2: 4603 mov r3, r0 - 800d9f4: 81bb strh r3, [r7, #12] - options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); - 800d9f6: 89bc ldrh r4, [r7, #12] - 800d9f8: 693b ldr r3, [r7, #16] - 800d9fa: f103 05f0 add.w r5, r3, #240 ; 0xf0 - 800d9fe: 69bb ldr r3, [r7, #24] - 800da00: 69db ldr r3, [r3, #28] - 800da02: 4618 mov r0, r3 - 800da04: f7f7 fa83 bl 8004f0e - 800da08: 4603 mov r3, r0 - 800da0a: 461a mov r2, r3 - 800da0c: 4629 mov r1, r5 - 800da0e: 4620 mov r0, r4 - 800da10: f000 f9b0 bl 800dd74 - 800da14: 4603 mov r3, r0 - 800da16: 81bb strh r3, [r7, #12] - - options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); - 800da18: 89b8 ldrh r0, [r7, #12] - 800da1a: 693b ldr r3, [r7, #16] - 800da1c: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800da20: 2303 movs r3, #3 - 800da22: 2237 movs r2, #55 ; 0x37 - 800da24: f000 f91a bl 800dc5c - 800da28: 4603 mov r3, r0 - 800da2a: 81bb strh r3, [r7, #12] - for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { - 800da2c: 2300 movs r3, #0 - 800da2e: 77bb strb r3, [r7, #30] - 800da30: e00e b.n 800da50 - options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); - 800da32: 89b8 ldrh r0, [r7, #12] - 800da34: 693b ldr r3, [r7, #16] - 800da36: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800da3a: 7fbb ldrb r3, [r7, #30] - 800da3c: 4a29 ldr r2, [pc, #164] ; (800dae4 ) - 800da3e: 5cd3 ldrb r3, [r2, r3] - 800da40: 461a mov r2, r3 - 800da42: f000 f93f bl 800dcc4 - 800da46: 4603 mov r3, r0 - 800da48: 81bb strh r3, [r7, #12] - for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { - 800da4a: 7fbb ldrb r3, [r7, #30] - 800da4c: 3301 adds r3, #1 - 800da4e: 77bb strb r3, [r7, #30] - 800da50: 7fbb ldrb r3, [r7, #30] - 800da52: 2b02 cmp r3, #2 - 800da54: d9ed bls.n 800da32 -#if LWIP_NETIF_HOSTNAME - options_out_len = dhcp_option_hostname(options_out_len, msg_out->options, netif); -#endif /* LWIP_NETIF_HOSTNAME */ - - LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_REBOOTING, msg_out, DHCP_REQUEST, &options_out_len); - dhcp_option_trailer(options_out_len, msg_out->options, p_out); - 800da56: 89b8 ldrh r0, [r7, #12] - 800da58: 693b ldr r3, [r7, #16] - 800da5a: 33f0 adds r3, #240 ; 0xf0 - 800da5c: 697a ldr r2, [r7, #20] - 800da5e: 4619 mov r1, r3 - 800da60: f000 fe44 bl 800e6ec - - /* broadcast to server */ - result = udp_sendto_if(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif); - 800da64: 4b20 ldr r3, [pc, #128] ; (800dae8 ) - 800da66: 6818 ldr r0, [r3, #0] - 800da68: 687b ldr r3, [r7, #4] - 800da6a: 9300 str r3, [sp, #0] - 800da6c: 2343 movs r3, #67 ; 0x43 - 800da6e: 4a1f ldr r2, [pc, #124] ; (800daec ) - 800da70: 6979 ldr r1, [r7, #20] - 800da72: f7fe fd03 bl 800c47c - 800da76: 4603 mov r3, r0 - 800da78: 77fb strb r3, [r7, #31] - pbuf_free(p_out); - 800da7a: 6978 ldr r0, [r7, #20] - 800da7c: f7f8 fd9c bl 80065b8 - 800da80: e001 b.n 800da86 - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot: REBOOTING\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_reboot: could not allocate DHCP request\n")); - result = ERR_MEM; - 800da82: 23ff movs r3, #255 ; 0xff - 800da84: 77fb strb r3, [r7, #31] - } - if (dhcp->tries < 255) { - 800da86: 69bb ldr r3, [r7, #24] - 800da88: 799b ldrb r3, [r3, #6] - 800da8a: 2bff cmp r3, #255 ; 0xff - 800da8c: d005 beq.n 800da9a - dhcp->tries++; - 800da8e: 69bb ldr r3, [r7, #24] - 800da90: 799b ldrb r3, [r3, #6] - 800da92: 3301 adds r3, #1 - 800da94: b2da uxtb r2, r3 - 800da96: 69bb ldr r3, [r7, #24] - 800da98: 719a strb r2, [r3, #6] - } - msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000); - 800da9a: 69bb ldr r3, [r7, #24] - 800da9c: 799b ldrb r3, [r3, #6] - 800da9e: 2b09 cmp r3, #9 - 800daa0: d80a bhi.n 800dab8 - 800daa2: 69bb ldr r3, [r7, #24] - 800daa4: 799b ldrb r3, [r3, #6] - 800daa6: b29b uxth r3, r3 - 800daa8: 461a mov r2, r3 - 800daaa: 0152 lsls r2, r2, #5 - 800daac: 1ad2 subs r2, r2, r3 - 800daae: 0092 lsls r2, r2, #2 - 800dab0: 4413 add r3, r2 - 800dab2: 00db lsls r3, r3, #3 - 800dab4: b29b uxth r3, r3 - 800dab6: e001 b.n 800dabc - 800dab8: f242 7310 movw r3, #10000 ; 0x2710 - 800dabc: 81fb strh r3, [r7, #14] - dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); - 800dabe: 89fb ldrh r3, [r7, #14] - 800dac0: f203 13f3 addw r3, r3, #499 ; 0x1f3 - 800dac4: 4a0a ldr r2, [pc, #40] ; (800daf0 ) - 800dac6: fb82 1203 smull r1, r2, r2, r3 - 800daca: 1152 asrs r2, r2, #5 - 800dacc: 17db asrs r3, r3, #31 - 800dace: 1ad3 subs r3, r2, r3 - 800dad0: b29a uxth r2, r3 - 800dad2: 69bb ldr r3, [r7, #24] - 800dad4: 811a strh r2, [r3, #8] - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot(): set request timeout %"U16_F" msecs\n", msecs)); - return result; - 800dad6: f997 301f ldrsb.w r3, [r7, #31] -} - 800dada: 4618 mov r0, r3 - 800dadc: 3720 adds r7, #32 - 800dade: 46bd mov sp, r7 - 800dae0: bdb0 pop {r4, r5, r7, pc} - 800dae2: bf00 nop - 800dae4: 2000002c .word 0x2000002c - 800dae8: 20009a5c .word 0x20009a5c - 800daec: 08018ad0 .word 0x08018ad0 - 800daf0: 10624dd3 .word 0x10624dd3 - -0800daf4 : - * - * @param netif network interface - */ -void -dhcp_release_and_stop(struct netif *netif) -{ - 800daf4: b5b0 push {r4, r5, r7, lr} - 800daf6: b08a sub sp, #40 ; 0x28 - 800daf8: af02 add r7, sp, #8 - 800dafa: 6078 str r0, [r7, #4] - struct dhcp *dhcp = netif_dhcp_data(netif); - 800dafc: 687b ldr r3, [r7, #4] - 800dafe: 6a5b ldr r3, [r3, #36] ; 0x24 - 800db00: 61fb str r3, [r7, #28] - ip_addr_t server_ip_addr; - - LWIP_ASSERT_CORE_LOCKED(); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_release_and_stop()\n")); - if (dhcp == NULL) { - 800db02: 69fb ldr r3, [r7, #28] - 800db04: 2b00 cmp r3, #0 - 800db06: f000 8084 beq.w 800dc12 - return; - } - - /* already off? -> nothing to do */ - if (dhcp->state == DHCP_STATE_OFF) { - 800db0a: 69fb ldr r3, [r7, #28] - 800db0c: 795b ldrb r3, [r3, #5] - 800db0e: 2b00 cmp r3, #0 - 800db10: f000 8081 beq.w 800dc16 - return; - } - - ip_addr_copy(server_ip_addr, dhcp->server_ip_addr); - 800db14: 69fb ldr r3, [r7, #28] - 800db16: 699b ldr r3, [r3, #24] - 800db18: 613b str r3, [r7, #16] - - /* clean old DHCP offer */ - ip_addr_set_zero_ip4(&dhcp->server_ip_addr); - 800db1a: 69fb ldr r3, [r7, #28] - 800db1c: 2200 movs r2, #0 - 800db1e: 619a str r2, [r3, #24] - ip4_addr_set_zero(&dhcp->offered_ip_addr); - 800db20: 69fb ldr r3, [r7, #28] - 800db22: 2200 movs r2, #0 - 800db24: 61da str r2, [r3, #28] - ip4_addr_set_zero(&dhcp->offered_sn_mask); - 800db26: 69fb ldr r3, [r7, #28] - 800db28: 2200 movs r2, #0 - 800db2a: 621a str r2, [r3, #32] - ip4_addr_set_zero(&dhcp->offered_gw_addr); - 800db2c: 69fb ldr r3, [r7, #28] - 800db2e: 2200 movs r2, #0 - 800db30: 625a str r2, [r3, #36] ; 0x24 -#if LWIP_DHCP_BOOTP_FILE - ip4_addr_set_zero(&dhcp->offered_si_addr); -#endif /* LWIP_DHCP_BOOTP_FILE */ - dhcp->offered_t0_lease = dhcp->offered_t1_renew = dhcp->offered_t2_rebind = 0; - 800db32: 69fb ldr r3, [r7, #28] - 800db34: 2200 movs r2, #0 - 800db36: 631a str r2, [r3, #48] ; 0x30 - 800db38: 69fb ldr r3, [r7, #28] - 800db3a: 6b1a ldr r2, [r3, #48] ; 0x30 - 800db3c: 69fb ldr r3, [r7, #28] - 800db3e: 62da str r2, [r3, #44] ; 0x2c - 800db40: 69fb ldr r3, [r7, #28] - 800db42: 6ada ldr r2, [r3, #44] ; 0x2c - 800db44: 69fb ldr r3, [r7, #28] - 800db46: 629a str r2, [r3, #40] ; 0x28 - dhcp->t1_renew_time = dhcp->t2_rebind_time = dhcp->lease_used = dhcp->t0_timeout = 0; - 800db48: 69fb ldr r3, [r7, #28] - 800db4a: 2200 movs r2, #0 - 800db4c: 829a strh r2, [r3, #20] - 800db4e: 69fb ldr r3, [r7, #28] - 800db50: 8a9a ldrh r2, [r3, #20] - 800db52: 69fb ldr r3, [r7, #28] - 800db54: 825a strh r2, [r3, #18] - 800db56: 69fb ldr r3, [r7, #28] - 800db58: 8a5a ldrh r2, [r3, #18] - 800db5a: 69fb ldr r3, [r7, #28] - 800db5c: 821a strh r2, [r3, #16] - 800db5e: 69fb ldr r3, [r7, #28] - 800db60: 8a1a ldrh r2, [r3, #16] - 800db62: 69fb ldr r3, [r7, #28] - 800db64: 81da strh r2, [r3, #14] - - /* send release message when current IP was assigned via DHCP */ - if (dhcp_supplied_address(netif)) { - 800db66: 6878 ldr r0, [r7, #4] - 800db68: f000 fdee bl 800e748 - 800db6c: 4603 mov r3, r0 - 800db6e: 2b00 cmp r3, #0 - 800db70: d03b beq.n 800dbea - /* create and initialize the DHCP message header */ - struct pbuf *p_out; - u16_t options_out_len; - p_out = dhcp_create_msg(netif, dhcp, DHCP_RELEASE, &options_out_len); - 800db72: f107 030e add.w r3, r7, #14 - 800db76: 2207 movs r2, #7 - 800db78: 69f9 ldr r1, [r7, #28] - 800db7a: 6878 ldr r0, [r7, #4] - 800db7c: f000 fce0 bl 800e540 - 800db80: 61b8 str r0, [r7, #24] - if (p_out != NULL) { - 800db82: 69bb ldr r3, [r7, #24] - 800db84: 2b00 cmp r3, #0 - 800db86: d030 beq.n 800dbea - struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload; - 800db88: 69bb ldr r3, [r7, #24] - 800db8a: 685b ldr r3, [r3, #4] - 800db8c: 617b str r3, [r7, #20] - options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_SERVER_ID, 4); - 800db8e: 89f8 ldrh r0, [r7, #14] - 800db90: 697b ldr r3, [r7, #20] - 800db92: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800db96: 2304 movs r3, #4 - 800db98: 2236 movs r2, #54 ; 0x36 - 800db9a: f000 f85f bl 800dc5c - 800db9e: 4603 mov r3, r0 - 800dba0: 81fb strh r3, [r7, #14] - options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(ip_2_ip4(&server_ip_addr)))); - 800dba2: 89fc ldrh r4, [r7, #14] - 800dba4: 697b ldr r3, [r7, #20] - 800dba6: f103 05f0 add.w r5, r3, #240 ; 0xf0 - 800dbaa: 693b ldr r3, [r7, #16] - 800dbac: 4618 mov r0, r3 - 800dbae: f7f7 f9ae bl 8004f0e - 800dbb2: 4603 mov r3, r0 - 800dbb4: 461a mov r2, r3 - 800dbb6: 4629 mov r1, r5 - 800dbb8: 4620 mov r0, r4 - 800dbba: f000 f8db bl 800dd74 - 800dbbe: 4603 mov r3, r0 - 800dbc0: 81fb strh r3, [r7, #14] - - LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, dhcp->state, msg_out, DHCP_RELEASE, &options_out_len); - dhcp_option_trailer(options_out_len, msg_out->options, p_out); - 800dbc2: 89f8 ldrh r0, [r7, #14] - 800dbc4: 697b ldr r3, [r7, #20] - 800dbc6: 33f0 adds r3, #240 ; 0xf0 - 800dbc8: 69ba ldr r2, [r7, #24] - 800dbca: 4619 mov r1, r3 - 800dbcc: f000 fd8e bl 800e6ec - - udp_sendto_if(dhcp_pcb, p_out, &server_ip_addr, LWIP_IANA_PORT_DHCP_SERVER, netif); - 800dbd0: 4b13 ldr r3, [pc, #76] ; (800dc20 ) - 800dbd2: 6818 ldr r0, [r3, #0] - 800dbd4: f107 0210 add.w r2, r7, #16 - 800dbd8: 687b ldr r3, [r7, #4] - 800dbda: 9300 str r3, [sp, #0] - 800dbdc: 2343 movs r3, #67 ; 0x43 - 800dbde: 69b9 ldr r1, [r7, #24] - 800dbe0: f7fe fc4c bl 800c47c - pbuf_free(p_out); - 800dbe4: 69b8 ldr r0, [r7, #24] - 800dbe6: f7f8 fce7 bl 80065b8 - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_release: could not allocate DHCP request\n")); - } - } - - /* remove IP address from interface (prevents routing from selecting this interface) */ - netif_set_addr(netif, IP4_ADDR_ANY4, IP4_ADDR_ANY4, IP4_ADDR_ANY4); - 800dbea: 4b0e ldr r3, [pc, #56] ; (800dc24 ) - 800dbec: 4a0d ldr r2, [pc, #52] ; (800dc24 ) - 800dbee: 490d ldr r1, [pc, #52] ; (800dc24 ) - 800dbf0: 6878 ldr r0, [r7, #4] - 800dbf2: f7f8 f801 bl 8005bf8 - autoip_stop(netif); - dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; - } -#endif /* LWIP_DHCP_AUTOIP_COOP */ - - dhcp_set_state(dhcp, DHCP_STATE_OFF); - 800dbf6: 2100 movs r1, #0 - 800dbf8: 69f8 ldr r0, [r7, #28] - 800dbfa: f000 f815 bl 800dc28 - - if (dhcp->pcb_allocated != 0) { - 800dbfe: 69fb ldr r3, [r7, #28] - 800dc00: 791b ldrb r3, [r3, #4] - 800dc02: 2b00 cmp r3, #0 - 800dc04: d008 beq.n 800dc18 - dhcp_dec_pcb_refcount(); /* free DHCP PCB if not needed any more */ - 800dc06: f7fe ff85 bl 800cb14 - dhcp->pcb_allocated = 0; - 800dc0a: 69fb ldr r3, [r7, #28] - 800dc0c: 2200 movs r2, #0 - 800dc0e: 711a strb r2, [r3, #4] - 800dc10: e002 b.n 800dc18 - return; - 800dc12: bf00 nop - 800dc14: e000 b.n 800dc18 - return; - 800dc16: bf00 nop - } -} - 800dc18: 3720 adds r7, #32 - 800dc1a: 46bd mov sp, r7 - 800dc1c: bdb0 pop {r4, r5, r7, pc} - 800dc1e: bf00 nop - 800dc20: 20009a5c .word 0x20009a5c - 800dc24: 08018acc .word 0x08018acc - -0800dc28 : - * - * If the state changed, reset the number of tries. - */ -static void -dhcp_set_state(struct dhcp *dhcp, u8_t new_state) -{ - 800dc28: b480 push {r7} - 800dc2a: b083 sub sp, #12 - 800dc2c: af00 add r7, sp, #0 - 800dc2e: 6078 str r0, [r7, #4] - 800dc30: 460b mov r3, r1 - 800dc32: 70fb strb r3, [r7, #3] - if (new_state != dhcp->state) { - 800dc34: 687b ldr r3, [r7, #4] - 800dc36: 795b ldrb r3, [r3, #5] - 800dc38: 78fa ldrb r2, [r7, #3] - 800dc3a: 429a cmp r2, r3 - 800dc3c: d008 beq.n 800dc50 - dhcp->state = new_state; - 800dc3e: 687b ldr r3, [r7, #4] - 800dc40: 78fa ldrb r2, [r7, #3] - 800dc42: 715a strb r2, [r3, #5] - dhcp->tries = 0; - 800dc44: 687b ldr r3, [r7, #4] - 800dc46: 2200 movs r2, #0 - 800dc48: 719a strb r2, [r3, #6] - dhcp->request_timeout = 0; - 800dc4a: 687b ldr r3, [r7, #4] - 800dc4c: 2200 movs r2, #0 - 800dc4e: 811a strh r2, [r3, #8] - } -} - 800dc50: bf00 nop - 800dc52: 370c adds r7, #12 - 800dc54: 46bd mov sp, r7 - 800dc56: f85d 7b04 ldr.w r7, [sp], #4 - 800dc5a: 4770 bx lr - -0800dc5c : - * DHCP message. - * - */ -static u16_t -dhcp_option(u16_t options_out_len, u8_t *options, u8_t option_type, u8_t option_len) -{ - 800dc5c: b580 push {r7, lr} - 800dc5e: b082 sub sp, #8 - 800dc60: af00 add r7, sp, #0 - 800dc62: 6039 str r1, [r7, #0] - 800dc64: 4611 mov r1, r2 - 800dc66: 461a mov r2, r3 - 800dc68: 4603 mov r3, r0 - 800dc6a: 80fb strh r3, [r7, #6] - 800dc6c: 460b mov r3, r1 - 800dc6e: 717b strb r3, [r7, #5] - 800dc70: 4613 mov r3, r2 - 800dc72: 713b strb r3, [r7, #4] - LWIP_ASSERT("dhcp_option: options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN", options_out_len + 2U + option_len <= DHCP_OPTIONS_LEN); - 800dc74: 88fa ldrh r2, [r7, #6] - 800dc76: 793b ldrb r3, [r7, #4] - 800dc78: 4413 add r3, r2 - 800dc7a: 3302 adds r3, #2 - 800dc7c: 2b44 cmp r3, #68 ; 0x44 - 800dc7e: d906 bls.n 800dc8e - 800dc80: 4b0d ldr r3, [pc, #52] ; (800dcb8 ) - 800dc82: f240 529a movw r2, #1434 ; 0x59a - 800dc86: 490d ldr r1, [pc, #52] ; (800dcbc ) - 800dc88: 480d ldr r0, [pc, #52] ; (800dcc0 ) - 800dc8a: f003 fa0d bl 80110a8 - options[options_out_len++] = option_type; - 800dc8e: 88fb ldrh r3, [r7, #6] - 800dc90: 1c5a adds r2, r3, #1 - 800dc92: 80fa strh r2, [r7, #6] - 800dc94: 461a mov r2, r3 - 800dc96: 683b ldr r3, [r7, #0] - 800dc98: 4413 add r3, r2 - 800dc9a: 797a ldrb r2, [r7, #5] - 800dc9c: 701a strb r2, [r3, #0] - options[options_out_len++] = option_len; - 800dc9e: 88fb ldrh r3, [r7, #6] - 800dca0: 1c5a adds r2, r3, #1 - 800dca2: 80fa strh r2, [r7, #6] - 800dca4: 461a mov r2, r3 - 800dca6: 683b ldr r3, [r7, #0] - 800dca8: 4413 add r3, r2 - 800dcaa: 793a ldrb r2, [r7, #4] - 800dcac: 701a strb r2, [r3, #0] - return options_out_len; - 800dcae: 88fb ldrh r3, [r7, #6] -} - 800dcb0: 4618 mov r0, r3 - 800dcb2: 3708 adds r7, #8 - 800dcb4: 46bd mov sp, r7 - 800dcb6: bd80 pop {r7, pc} - 800dcb8: 08017efc .word 0x08017efc - 800dcbc: 08018090 .word 0x08018090 - 800dcc0: 08017f5c .word 0x08017f5c - -0800dcc4 : - * Concatenate a single byte to the outgoing DHCP message. - * - */ -static u16_t -dhcp_option_byte(u16_t options_out_len, u8_t *options, u8_t value) -{ - 800dcc4: b580 push {r7, lr} - 800dcc6: b082 sub sp, #8 - 800dcc8: af00 add r7, sp, #0 - 800dcca: 4603 mov r3, r0 - 800dccc: 6039 str r1, [r7, #0] - 800dcce: 80fb strh r3, [r7, #6] - 800dcd0: 4613 mov r3, r2 - 800dcd2: 717b strb r3, [r7, #5] - LWIP_ASSERT("dhcp_option_byte: options_out_len < DHCP_OPTIONS_LEN", options_out_len < DHCP_OPTIONS_LEN); - 800dcd4: 88fb ldrh r3, [r7, #6] - 800dcd6: 2b43 cmp r3, #67 ; 0x43 - 800dcd8: d906 bls.n 800dce8 - 800dcda: 4b0a ldr r3, [pc, #40] ; (800dd04 ) - 800dcdc: f240 52a6 movw r2, #1446 ; 0x5a6 - 800dce0: 4909 ldr r1, [pc, #36] ; (800dd08 ) - 800dce2: 480a ldr r0, [pc, #40] ; (800dd0c ) - 800dce4: f003 f9e0 bl 80110a8 - options[options_out_len++] = value; - 800dce8: 88fb ldrh r3, [r7, #6] - 800dcea: 1c5a adds r2, r3, #1 - 800dcec: 80fa strh r2, [r7, #6] - 800dcee: 461a mov r2, r3 - 800dcf0: 683b ldr r3, [r7, #0] - 800dcf2: 4413 add r3, r2 - 800dcf4: 797a ldrb r2, [r7, #5] - 800dcf6: 701a strb r2, [r3, #0] - return options_out_len; - 800dcf8: 88fb ldrh r3, [r7, #6] -} - 800dcfa: 4618 mov r0, r3 - 800dcfc: 3708 adds r7, #8 - 800dcfe: 46bd mov sp, r7 - 800dd00: bd80 pop {r7, pc} - 800dd02: bf00 nop - 800dd04: 08017efc .word 0x08017efc - 800dd08: 080180d4 .word 0x080180d4 - 800dd0c: 08017f5c .word 0x08017f5c - -0800dd10 : - -static u16_t -dhcp_option_short(u16_t options_out_len, u8_t *options, u16_t value) -{ - 800dd10: b580 push {r7, lr} - 800dd12: b082 sub sp, #8 - 800dd14: af00 add r7, sp, #0 - 800dd16: 4603 mov r3, r0 - 800dd18: 6039 str r1, [r7, #0] - 800dd1a: 80fb strh r3, [r7, #6] - 800dd1c: 4613 mov r3, r2 - 800dd1e: 80bb strh r3, [r7, #4] - LWIP_ASSERT("dhcp_option_short: options_out_len + 2 <= DHCP_OPTIONS_LEN", options_out_len + 2U <= DHCP_OPTIONS_LEN); - 800dd20: 88fb ldrh r3, [r7, #6] - 800dd22: 3302 adds r3, #2 - 800dd24: 2b44 cmp r3, #68 ; 0x44 - 800dd26: d906 bls.n 800dd36 - 800dd28: 4b0f ldr r3, [pc, #60] ; (800dd68 ) - 800dd2a: f240 52ae movw r2, #1454 ; 0x5ae - 800dd2e: 490f ldr r1, [pc, #60] ; (800dd6c ) - 800dd30: 480f ldr r0, [pc, #60] ; (800dd70 ) - 800dd32: f003 f9b9 bl 80110a8 - options[options_out_len++] = (u8_t)((value & 0xff00U) >> 8); - 800dd36: 88bb ldrh r3, [r7, #4] - 800dd38: 0a1b lsrs r3, r3, #8 - 800dd3a: b29a uxth r2, r3 - 800dd3c: 88fb ldrh r3, [r7, #6] - 800dd3e: 1c59 adds r1, r3, #1 - 800dd40: 80f9 strh r1, [r7, #6] - 800dd42: 4619 mov r1, r3 - 800dd44: 683b ldr r3, [r7, #0] - 800dd46: 440b add r3, r1 - 800dd48: b2d2 uxtb r2, r2 - 800dd4a: 701a strb r2, [r3, #0] - options[options_out_len++] = (u8_t) (value & 0x00ffU); - 800dd4c: 88fb ldrh r3, [r7, #6] - 800dd4e: 1c5a adds r2, r3, #1 - 800dd50: 80fa strh r2, [r7, #6] - 800dd52: 461a mov r2, r3 - 800dd54: 683b ldr r3, [r7, #0] - 800dd56: 4413 add r3, r2 - 800dd58: 88ba ldrh r2, [r7, #4] - 800dd5a: b2d2 uxtb r2, r2 - 800dd5c: 701a strb r2, [r3, #0] - return options_out_len; - 800dd5e: 88fb ldrh r3, [r7, #6] -} - 800dd60: 4618 mov r0, r3 - 800dd62: 3708 adds r7, #8 - 800dd64: 46bd mov sp, r7 - 800dd66: bd80 pop {r7, pc} - 800dd68: 08017efc .word 0x08017efc - 800dd6c: 0801810c .word 0x0801810c - 800dd70: 08017f5c .word 0x08017f5c - -0800dd74 : - -static u16_t -dhcp_option_long(u16_t options_out_len, u8_t *options, u32_t value) -{ - 800dd74: b580 push {r7, lr} - 800dd76: b084 sub sp, #16 - 800dd78: af00 add r7, sp, #0 - 800dd7a: 4603 mov r3, r0 - 800dd7c: 60b9 str r1, [r7, #8] - 800dd7e: 607a str r2, [r7, #4] - 800dd80: 81fb strh r3, [r7, #14] - LWIP_ASSERT("dhcp_option_long: options_out_len + 4 <= DHCP_OPTIONS_LEN", options_out_len + 4U <= DHCP_OPTIONS_LEN); - 800dd82: 89fb ldrh r3, [r7, #14] - 800dd84: 3304 adds r3, #4 - 800dd86: 2b44 cmp r3, #68 ; 0x44 - 800dd88: d906 bls.n 800dd98 - 800dd8a: 4b19 ldr r3, [pc, #100] ; (800ddf0 ) - 800dd8c: f240 52b7 movw r2, #1463 ; 0x5b7 - 800dd90: 4918 ldr r1, [pc, #96] ; (800ddf4 ) - 800dd92: 4819 ldr r0, [pc, #100] ; (800ddf8 ) - 800dd94: f003 f988 bl 80110a8 - options[options_out_len++] = (u8_t)((value & 0xff000000UL) >> 24); - 800dd98: 687b ldr r3, [r7, #4] - 800dd9a: 0e1a lsrs r2, r3, #24 - 800dd9c: 89fb ldrh r3, [r7, #14] - 800dd9e: 1c59 adds r1, r3, #1 - 800dda0: 81f9 strh r1, [r7, #14] - 800dda2: 4619 mov r1, r3 - 800dda4: 68bb ldr r3, [r7, #8] - 800dda6: 440b add r3, r1 - 800dda8: b2d2 uxtb r2, r2 - 800ddaa: 701a strb r2, [r3, #0] - options[options_out_len++] = (u8_t)((value & 0x00ff0000UL) >> 16); - 800ddac: 687b ldr r3, [r7, #4] - 800ddae: 0c1a lsrs r2, r3, #16 - 800ddb0: 89fb ldrh r3, [r7, #14] - 800ddb2: 1c59 adds r1, r3, #1 - 800ddb4: 81f9 strh r1, [r7, #14] - 800ddb6: 4619 mov r1, r3 - 800ddb8: 68bb ldr r3, [r7, #8] - 800ddba: 440b add r3, r1 - 800ddbc: b2d2 uxtb r2, r2 - 800ddbe: 701a strb r2, [r3, #0] - options[options_out_len++] = (u8_t)((value & 0x0000ff00UL) >> 8); - 800ddc0: 687b ldr r3, [r7, #4] - 800ddc2: 0a1a lsrs r2, r3, #8 - 800ddc4: 89fb ldrh r3, [r7, #14] - 800ddc6: 1c59 adds r1, r3, #1 - 800ddc8: 81f9 strh r1, [r7, #14] - 800ddca: 4619 mov r1, r3 - 800ddcc: 68bb ldr r3, [r7, #8] - 800ddce: 440b add r3, r1 - 800ddd0: b2d2 uxtb r2, r2 - 800ddd2: 701a strb r2, [r3, #0] - options[options_out_len++] = (u8_t)((value & 0x000000ffUL)); - 800ddd4: 89fb ldrh r3, [r7, #14] - 800ddd6: 1c5a adds r2, r3, #1 - 800ddd8: 81fa strh r2, [r7, #14] - 800ddda: 461a mov r2, r3 - 800dddc: 68bb ldr r3, [r7, #8] - 800ddde: 4413 add r3, r2 - 800dde0: 687a ldr r2, [r7, #4] - 800dde2: b2d2 uxtb r2, r2 - 800dde4: 701a strb r2, [r3, #0] - return options_out_len; - 800dde6: 89fb ldrh r3, [r7, #14] -} - 800dde8: 4618 mov r0, r3 - 800ddea: 3710 adds r7, #16 - 800ddec: 46bd mov sp, r7 - 800ddee: bd80 pop {r7, pc} - 800ddf0: 08017efc .word 0x08017efc - 800ddf4: 08018148 .word 0x08018148 - 800ddf8: 08017f5c .word 0x08017f5c - -0800ddfc : - * use that further on. - * - */ -static err_t -dhcp_parse_reply(struct pbuf *p, struct dhcp *dhcp) -{ - 800ddfc: b580 push {r7, lr} - 800ddfe: b090 sub sp, #64 ; 0x40 - 800de00: af00 add r7, sp, #0 - 800de02: 6078 str r0, [r7, #4] - 800de04: 6039 str r1, [r7, #0] - u16_t offset; - u16_t offset_max; - u16_t options_idx; - u16_t options_idx_max; - struct pbuf *q; - int parse_file_as_options = 0; - 800de06: 2300 movs r3, #0 - 800de08: 62fb str r3, [r7, #44] ; 0x2c - int parse_sname_as_options = 0; - 800de0a: 2300 movs r3, #0 - 800de0c: 62bb str r3, [r7, #40] ; 0x28 -#endif - - LWIP_UNUSED_ARG(dhcp); - - /* clear received options */ - dhcp_clear_all_options(dhcp); - 800de0e: 2208 movs r2, #8 - 800de10: 2100 movs r1, #0 - 800de12: 48b5 ldr r0, [pc, #724] ; (800e0e8 ) - 800de14: f003 f940 bl 8011098 - /* check that beginning of dhcp_msg (up to and including chaddr) is in first pbuf */ - if (p->len < DHCP_SNAME_OFS) { - 800de18: 687b ldr r3, [r7, #4] - 800de1a: 895b ldrh r3, [r3, #10] - 800de1c: 2b2b cmp r3, #43 ; 0x2b - 800de1e: d802 bhi.n 800de26 - return ERR_BUF; - 800de20: f06f 0301 mvn.w r3, #1 - 800de24: e2a7 b.n 800e376 - } - msg_in = (struct dhcp_msg *)p->payload; - 800de26: 687b ldr r3, [r7, #4] - 800de28: 685b ldr r3, [r3, #4] - 800de2a: 61bb str r3, [r7, #24] -#endif /* LWIP_DHCP_BOOTP_FILE */ - - /* parse options */ - - /* start with options field */ - options_idx = DHCP_OPTIONS_OFS; - 800de2c: 23f0 movs r3, #240 ; 0xf0 - 800de2e: 86fb strh r3, [r7, #54] ; 0x36 - /* parse options to the end of the received packet */ - options_idx_max = p->tot_len; - 800de30: 687b ldr r3, [r7, #4] - 800de32: 891b ldrh r3, [r3, #8] - 800de34: 86bb strh r3, [r7, #52] ; 0x34 -again: - q = p; - 800de36: 687b ldr r3, [r7, #4] - 800de38: 633b str r3, [r7, #48] ; 0x30 - while ((q != NULL) && (options_idx >= q->len)) { - 800de3a: e00c b.n 800de56 - options_idx = (u16_t)(options_idx - q->len); - 800de3c: 6b3b ldr r3, [r7, #48] ; 0x30 - 800de3e: 895b ldrh r3, [r3, #10] - 800de40: 8efa ldrh r2, [r7, #54] ; 0x36 - 800de42: 1ad3 subs r3, r2, r3 - 800de44: 86fb strh r3, [r7, #54] ; 0x36 - options_idx_max = (u16_t)(options_idx_max - q->len); - 800de46: 6b3b ldr r3, [r7, #48] ; 0x30 - 800de48: 895b ldrh r3, [r3, #10] - 800de4a: 8eba ldrh r2, [r7, #52] ; 0x34 - 800de4c: 1ad3 subs r3, r2, r3 - 800de4e: 86bb strh r3, [r7, #52] ; 0x34 - q = q->next; - 800de50: 6b3b ldr r3, [r7, #48] ; 0x30 - 800de52: 681b ldr r3, [r3, #0] - 800de54: 633b str r3, [r7, #48] ; 0x30 - while ((q != NULL) && (options_idx >= q->len)) { - 800de56: 6b3b ldr r3, [r7, #48] ; 0x30 - 800de58: 2b00 cmp r3, #0 - 800de5a: d004 beq.n 800de66 - 800de5c: 6b3b ldr r3, [r7, #48] ; 0x30 - 800de5e: 895b ldrh r3, [r3, #10] - 800de60: 8efa ldrh r2, [r7, #54] ; 0x36 - 800de62: 429a cmp r2, r3 - 800de64: d2ea bcs.n 800de3c - } - if (q == NULL) { - 800de66: 6b3b ldr r3, [r7, #48] ; 0x30 - 800de68: 2b00 cmp r3, #0 - 800de6a: d102 bne.n 800de72 - return ERR_BUF; - 800de6c: f06f 0301 mvn.w r3, #1 - 800de70: e281 b.n 800e376 - } - offset = options_idx; - 800de72: 8efb ldrh r3, [r7, #54] ; 0x36 - 800de74: 877b strh r3, [r7, #58] ; 0x3a - offset_max = options_idx_max; - 800de76: 8ebb ldrh r3, [r7, #52] ; 0x34 - 800de78: 873b strh r3, [r7, #56] ; 0x38 - options = (u8_t *)q->payload; - 800de7a: 6b3b ldr r3, [r7, #48] ; 0x30 - 800de7c: 685b ldr r3, [r3, #4] - 800de7e: 63fb str r3, [r7, #60] ; 0x3c - /* at least 1 byte to read and no end marker, then at least 3 bytes to read? */ - while ((q != NULL) && (offset < offset_max) && (options[offset] != DHCP_OPTION_END)) { - 800de80: e239 b.n 800e2f6 - u8_t op = options[offset]; - 800de82: 8f7b ldrh r3, [r7, #58] ; 0x3a - 800de84: 6bfa ldr r2, [r7, #60] ; 0x3c - 800de86: 4413 add r3, r2 - 800de88: 781b ldrb r3, [r3, #0] - 800de8a: 75fb strb r3, [r7, #23] - u8_t len; - u8_t decode_len = 0; - 800de8c: 2300 movs r3, #0 - 800de8e: f887 3026 strb.w r3, [r7, #38] ; 0x26 - int decode_idx = -1; - 800de92: f04f 33ff mov.w r3, #4294967295 - 800de96: 623b str r3, [r7, #32] - u16_t val_offset = (u16_t)(offset + 2); - 800de98: 8f7b ldrh r3, [r7, #58] ; 0x3a - 800de9a: 3302 adds r3, #2 - 800de9c: 83fb strh r3, [r7, #30] - if (val_offset < offset) { - 800de9e: 8bfa ldrh r2, [r7, #30] - 800dea0: 8f7b ldrh r3, [r7, #58] ; 0x3a - 800dea2: 429a cmp r2, r3 - 800dea4: d202 bcs.n 800deac - /* overflow */ - return ERR_BUF; - 800dea6: f06f 0301 mvn.w r3, #1 - 800deaa: e264 b.n 800e376 - } - /* len byte might be in the next pbuf */ - if ((offset + 1) < q->len) { - 800deac: 8f7b ldrh r3, [r7, #58] ; 0x3a - 800deae: 3301 adds r3, #1 - 800deb0: 6b3a ldr r2, [r7, #48] ; 0x30 - 800deb2: 8952 ldrh r2, [r2, #10] - 800deb4: 4293 cmp r3, r2 - 800deb6: da07 bge.n 800dec8 - len = options[offset + 1]; - 800deb8: 8f7b ldrh r3, [r7, #58] ; 0x3a - 800deba: 3301 adds r3, #1 - 800debc: 6bfa ldr r2, [r7, #60] ; 0x3c - 800debe: 4413 add r3, r2 - 800dec0: 781b ldrb r3, [r3, #0] - 800dec2: f887 3027 strb.w r3, [r7, #39] ; 0x27 - 800dec6: e00b b.n 800dee0 - } else { - len = (q->next != NULL ? ((u8_t *)q->next->payload)[0] : 0); - 800dec8: 6b3b ldr r3, [r7, #48] ; 0x30 - 800deca: 681b ldr r3, [r3, #0] - 800decc: 2b00 cmp r3, #0 - 800dece: d004 beq.n 800deda - 800ded0: 6b3b ldr r3, [r7, #48] ; 0x30 - 800ded2: 681b ldr r3, [r3, #0] - 800ded4: 685b ldr r3, [r3, #4] - 800ded6: 781b ldrb r3, [r3, #0] - 800ded8: e000 b.n 800dedc - 800deda: 2300 movs r3, #0 - 800dedc: f887 3027 strb.w r3, [r7, #39] ; 0x27 - } - /* LWIP_DEBUGF(DHCP_DEBUG, ("msg_offset=%"U16_F", q->len=%"U16_F, msg_offset, q->len)); */ - decode_len = len; - 800dee0: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800dee4: f887 3026 strb.w r3, [r7, #38] ; 0x26 - switch (op) { - 800dee8: 7dfb ldrb r3, [r7, #23] - 800deea: 2b3b cmp r3, #59 ; 0x3b - 800deec: f200 812c bhi.w 800e148 - 800def0: a201 add r2, pc, #4 ; (adr r2, 800def8 ) - 800def2: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 800def6: bf00 nop - 800def8: 0800dfe9 .word 0x0800dfe9 - 800defc: 0800dff9 .word 0x0800dff9 - 800df00: 0800e149 .word 0x0800e149 - 800df04: 0800e01b .word 0x0800e01b - 800df08: 0800e149 .word 0x0800e149 - 800df0c: 0800e149 .word 0x0800e149 - 800df10: 0800e149 .word 0x0800e149 - 800df14: 0800e149 .word 0x0800e149 - 800df18: 0800e149 .word 0x0800e149 - 800df1c: 0800e149 .word 0x0800e149 - 800df20: 0800e149 .word 0x0800e149 - 800df24: 0800e149 .word 0x0800e149 - 800df28: 0800e149 .word 0x0800e149 - 800df2c: 0800e149 .word 0x0800e149 - 800df30: 0800e149 .word 0x0800e149 - 800df34: 0800e149 .word 0x0800e149 - 800df38: 0800e149 .word 0x0800e149 - 800df3c: 0800e149 .word 0x0800e149 - 800df40: 0800e149 .word 0x0800e149 - 800df44: 0800e149 .word 0x0800e149 - 800df48: 0800e149 .word 0x0800e149 - 800df4c: 0800e149 .word 0x0800e149 - 800df50: 0800e149 .word 0x0800e149 - 800df54: 0800e149 .word 0x0800e149 - 800df58: 0800e149 .word 0x0800e149 - 800df5c: 0800e149 .word 0x0800e149 - 800df60: 0800e149 .word 0x0800e149 - 800df64: 0800e149 .word 0x0800e149 - 800df68: 0800e149 .word 0x0800e149 - 800df6c: 0800e149 .word 0x0800e149 - 800df70: 0800e149 .word 0x0800e149 - 800df74: 0800e149 .word 0x0800e149 - 800df78: 0800e149 .word 0x0800e149 - 800df7c: 0800e149 .word 0x0800e149 - 800df80: 0800e149 .word 0x0800e149 - 800df84: 0800e149 .word 0x0800e149 - 800df88: 0800e149 .word 0x0800e149 - 800df8c: 0800e149 .word 0x0800e149 - 800df90: 0800e149 .word 0x0800e149 - 800df94: 0800e149 .word 0x0800e149 - 800df98: 0800e149 .word 0x0800e149 - 800df9c: 0800e149 .word 0x0800e149 - 800dfa0: 0800e149 .word 0x0800e149 - 800dfa4: 0800e149 .word 0x0800e149 - 800dfa8: 0800e149 .word 0x0800e149 - 800dfac: 0800e149 .word 0x0800e149 - 800dfb0: 0800e149 .word 0x0800e149 - 800dfb4: 0800e149 .word 0x0800e149 - 800dfb8: 0800e149 .word 0x0800e149 - 800dfbc: 0800e149 .word 0x0800e149 - 800dfc0: 0800e149 .word 0x0800e149 - 800dfc4: 0800e047 .word 0x0800e047 - 800dfc8: 0800e069 .word 0x0800e069 - 800dfcc: 0800e0a5 .word 0x0800e0a5 - 800dfd0: 0800e0c7 .word 0x0800e0c7 - 800dfd4: 0800e149 .word 0x0800e149 - 800dfd8: 0800e149 .word 0x0800e149 - 800dfdc: 0800e149 .word 0x0800e149 - 800dfe0: 0800e105 .word 0x0800e105 - 800dfe4: 0800e127 .word 0x0800e127 - /* case(DHCP_OPTION_END): handled above */ - case (DHCP_OPTION_PAD): - /* special option: no len encoded */ - decode_len = len = 0; - 800dfe8: 2300 movs r3, #0 - 800dfea: f887 3027 strb.w r3, [r7, #39] ; 0x27 - 800dfee: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800dff2: f887 3026 strb.w r3, [r7, #38] ; 0x26 - /* will be increased below */ - break; - 800dff6: e0ab b.n 800e150 - case (DHCP_OPTION_SUBNET_MASK): - LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); - 800dff8: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800dffc: 2b04 cmp r3, #4 - 800dffe: d009 beq.n 800e014 - 800e000: 4b3a ldr r3, [pc, #232] ; (800e0ec ) - 800e002: f240 622e movw r2, #1582 ; 0x62e - 800e006: 493a ldr r1, [pc, #232] ; (800e0f0 ) - 800e008: 483a ldr r0, [pc, #232] ; (800e0f4 ) - 800e00a: f003 f84d bl 80110a8 - 800e00e: f06f 0305 mvn.w r3, #5 - 800e012: e1b0 b.n 800e376 - decode_idx = DHCP_OPTION_IDX_SUBNET_MASK; - 800e014: 2306 movs r3, #6 - 800e016: 623b str r3, [r7, #32] - break; - 800e018: e09a b.n 800e150 - case (DHCP_OPTION_ROUTER): - decode_len = 4; /* only copy the first given router */ - 800e01a: 2304 movs r3, #4 - 800e01c: f887 3026 strb.w r3, [r7, #38] ; 0x26 - LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;); - 800e020: f897 2027 ldrb.w r2, [r7, #39] ; 0x27 - 800e024: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 - 800e028: 429a cmp r2, r3 - 800e02a: d209 bcs.n 800e040 - 800e02c: 4b2f ldr r3, [pc, #188] ; (800e0ec ) - 800e02e: f240 6233 movw r2, #1587 ; 0x633 - 800e032: 4931 ldr r1, [pc, #196] ; (800e0f8 ) - 800e034: 482f ldr r0, [pc, #188] ; (800e0f4 ) - 800e036: f003 f837 bl 80110a8 - 800e03a: f06f 0305 mvn.w r3, #5 - 800e03e: e19a b.n 800e376 - decode_idx = DHCP_OPTION_IDX_ROUTER; - 800e040: 2307 movs r3, #7 - 800e042: 623b str r3, [r7, #32] - break; - 800e044: e084 b.n 800e150 - LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_DNS_SERVER; - break; -#endif /* LWIP_DHCP_PROVIDE_DNS_SERVERS */ - case (DHCP_OPTION_LEASE_TIME): - LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); - 800e046: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800e04a: 2b04 cmp r3, #4 - 800e04c: d009 beq.n 800e062 - 800e04e: 4b27 ldr r3, [pc, #156] ; (800e0ec ) - 800e050: f240 6241 movw r2, #1601 ; 0x641 - 800e054: 4926 ldr r1, [pc, #152] ; (800e0f0 ) - 800e056: 4827 ldr r0, [pc, #156] ; (800e0f4 ) - 800e058: f003 f826 bl 80110a8 - 800e05c: f06f 0305 mvn.w r3, #5 - 800e060: e189 b.n 800e376 - decode_idx = DHCP_OPTION_IDX_LEASE_TIME; - 800e062: 2303 movs r3, #3 - 800e064: 623b str r3, [r7, #32] - break; - 800e066: e073 b.n 800e150 - LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_NTP_SERVER; - break; -#endif /* LWIP_DHCP_GET_NTP_SRV*/ - case (DHCP_OPTION_OVERLOAD): - LWIP_ERROR("len == 1", len == 1, return ERR_VAL;); - 800e068: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800e06c: 2b01 cmp r3, #1 - 800e06e: d009 beq.n 800e084 - 800e070: 4b1e ldr r3, [pc, #120] ; (800e0ec ) - 800e072: f240 624f movw r2, #1615 ; 0x64f - 800e076: 4921 ldr r1, [pc, #132] ; (800e0fc ) - 800e078: 481e ldr r0, [pc, #120] ; (800e0f4 ) - 800e07a: f003 f815 bl 80110a8 - 800e07e: f06f 0305 mvn.w r3, #5 - 800e082: e178 b.n 800e376 - /* decode overload only in options, not in file/sname: invalid packet */ - LWIP_ERROR("overload in file/sname", options_idx == DHCP_OPTIONS_OFS, return ERR_VAL;); - 800e084: 8efb ldrh r3, [r7, #54] ; 0x36 - 800e086: 2bf0 cmp r3, #240 ; 0xf0 - 800e088: d009 beq.n 800e09e - 800e08a: 4b18 ldr r3, [pc, #96] ; (800e0ec ) - 800e08c: f240 6251 movw r2, #1617 ; 0x651 - 800e090: 491b ldr r1, [pc, #108] ; (800e100 ) - 800e092: 4818 ldr r0, [pc, #96] ; (800e0f4 ) - 800e094: f003 f808 bl 80110a8 - 800e098: f06f 0305 mvn.w r3, #5 - 800e09c: e16b b.n 800e376 - decode_idx = DHCP_OPTION_IDX_OVERLOAD; - 800e09e: 2300 movs r3, #0 - 800e0a0: 623b str r3, [r7, #32] - break; - 800e0a2: e055 b.n 800e150 - case (DHCP_OPTION_MESSAGE_TYPE): - LWIP_ERROR("len == 1", len == 1, return ERR_VAL;); - 800e0a4: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800e0a8: 2b01 cmp r3, #1 - 800e0aa: d009 beq.n 800e0c0 - 800e0ac: 4b0f ldr r3, [pc, #60] ; (800e0ec ) - 800e0ae: f240 6255 movw r2, #1621 ; 0x655 - 800e0b2: 4912 ldr r1, [pc, #72] ; (800e0fc ) - 800e0b4: 480f ldr r0, [pc, #60] ; (800e0f4 ) - 800e0b6: f002 fff7 bl 80110a8 - 800e0ba: f06f 0305 mvn.w r3, #5 - 800e0be: e15a b.n 800e376 - decode_idx = DHCP_OPTION_IDX_MSG_TYPE; - 800e0c0: 2301 movs r3, #1 - 800e0c2: 623b str r3, [r7, #32] - break; - 800e0c4: e044 b.n 800e150 - case (DHCP_OPTION_SERVER_ID): - LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); - 800e0c6: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800e0ca: 2b04 cmp r3, #4 - 800e0cc: d009 beq.n 800e0e2 - 800e0ce: 4b07 ldr r3, [pc, #28] ; (800e0ec ) - 800e0d0: f240 6259 movw r2, #1625 ; 0x659 - 800e0d4: 4906 ldr r1, [pc, #24] ; (800e0f0 ) - 800e0d6: 4807 ldr r0, [pc, #28] ; (800e0f4 ) - 800e0d8: f002 ffe6 bl 80110a8 - 800e0dc: f06f 0305 mvn.w r3, #5 - 800e0e0: e149 b.n 800e376 - decode_idx = DHCP_OPTION_IDX_SERVER_ID; - 800e0e2: 2302 movs r3, #2 - 800e0e4: 623b str r3, [r7, #32] - break; - 800e0e6: e033 b.n 800e150 - 800e0e8: 20009a54 .word 0x20009a54 - 800e0ec: 08017efc .word 0x08017efc - 800e0f0: 08018184 .word 0x08018184 - 800e0f4: 08017f5c .word 0x08017f5c - 800e0f8: 08018190 .word 0x08018190 - 800e0fc: 080181a4 .word 0x080181a4 - 800e100: 080181b0 .word 0x080181b0 - case (DHCP_OPTION_T1): - LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); - 800e104: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800e108: 2b04 cmp r3, #4 - 800e10a: d009 beq.n 800e120 - 800e10c: 4b9c ldr r3, [pc, #624] ; (800e380 ) - 800e10e: f240 625d movw r2, #1629 ; 0x65d - 800e112: 499c ldr r1, [pc, #624] ; (800e384 ) - 800e114: 489c ldr r0, [pc, #624] ; (800e388 ) - 800e116: f002 ffc7 bl 80110a8 - 800e11a: f06f 0305 mvn.w r3, #5 - 800e11e: e12a b.n 800e376 - decode_idx = DHCP_OPTION_IDX_T1; - 800e120: 2304 movs r3, #4 - 800e122: 623b str r3, [r7, #32] - break; - 800e124: e014 b.n 800e150 - case (DHCP_OPTION_T2): - LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); - 800e126: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800e12a: 2b04 cmp r3, #4 - 800e12c: d009 beq.n 800e142 - 800e12e: 4b94 ldr r3, [pc, #592] ; (800e380 ) - 800e130: f240 6261 movw r2, #1633 ; 0x661 - 800e134: 4993 ldr r1, [pc, #588] ; (800e384 ) - 800e136: 4894 ldr r0, [pc, #592] ; (800e388 ) - 800e138: f002 ffb6 bl 80110a8 - 800e13c: f06f 0305 mvn.w r3, #5 - 800e140: e119 b.n 800e376 - decode_idx = DHCP_OPTION_IDX_T2; - 800e142: 2305 movs r3, #5 - 800e144: 623b str r3, [r7, #32] - break; - 800e146: e003 b.n 800e150 - default: - decode_len = 0; - 800e148: 2300 movs r3, #0 - 800e14a: f887 3026 strb.w r3, [r7, #38] ; 0x26 - LWIP_DEBUGF(DHCP_DEBUG, ("skipping option %"U16_F" in options\n", (u16_t)op)); - LWIP_HOOK_DHCP_PARSE_OPTION(ip_current_netif(), dhcp, dhcp->state, msg_in, - dhcp_option_given(dhcp, DHCP_OPTION_IDX_MSG_TYPE) ? (u8_t)dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE) : 0, - op, len, q, val_offset); - break; - 800e14e: bf00 nop - } - if (op == DHCP_OPTION_PAD) { - 800e150: 7dfb ldrb r3, [r7, #23] - 800e152: 2b00 cmp r3, #0 - 800e154: d103 bne.n 800e15e - offset++; - 800e156: 8f7b ldrh r3, [r7, #58] ; 0x3a - 800e158: 3301 adds r3, #1 - 800e15a: 877b strh r3, [r7, #58] ; 0x3a - 800e15c: e0a1 b.n 800e2a2 - } else { - if (offset + len + 2 > 0xFFFF) { - 800e15e: 8f7a ldrh r2, [r7, #58] ; 0x3a - 800e160: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800e164: 4413 add r3, r2 - 800e166: f64f 72fd movw r2, #65533 ; 0xfffd - 800e16a: 4293 cmp r3, r2 - 800e16c: dd02 ble.n 800e174 - /* overflow */ - return ERR_BUF; - 800e16e: f06f 0301 mvn.w r3, #1 - 800e172: e100 b.n 800e376 - } - offset = (u16_t)(offset + len + 2); - 800e174: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800e178: b29a uxth r2, r3 - 800e17a: 8f7b ldrh r3, [r7, #58] ; 0x3a - 800e17c: 4413 add r3, r2 - 800e17e: b29b uxth r3, r3 - 800e180: 3302 adds r3, #2 - 800e182: 877b strh r3, [r7, #58] ; 0x3a - if (decode_len > 0) { - 800e184: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 - 800e188: 2b00 cmp r3, #0 - 800e18a: f000 808a beq.w 800e2a2 - u32_t value = 0; - 800e18e: 2300 movs r3, #0 - 800e190: 60bb str r3, [r7, #8] - u16_t copy_len; -decode_next: - LWIP_ASSERT("check decode_idx", decode_idx >= 0 && decode_idx < DHCP_OPTION_IDX_MAX); - 800e192: 6a3b ldr r3, [r7, #32] - 800e194: 2b00 cmp r3, #0 - 800e196: db02 blt.n 800e19e - 800e198: 6a3b ldr r3, [r7, #32] - 800e19a: 2b07 cmp r3, #7 - 800e19c: dd06 ble.n 800e1ac - 800e19e: 4b78 ldr r3, [pc, #480] ; (800e380 ) - 800e1a0: f44f 62cf mov.w r2, #1656 ; 0x678 - 800e1a4: 4979 ldr r1, [pc, #484] ; (800e38c ) - 800e1a6: 4878 ldr r0, [pc, #480] ; (800e388 ) - 800e1a8: f002 ff7e bl 80110a8 - if (!dhcp_option_given(dhcp, decode_idx)) { - 800e1ac: 4a78 ldr r2, [pc, #480] ; (800e390 ) - 800e1ae: 6a3b ldr r3, [r7, #32] - 800e1b0: 4413 add r3, r2 - 800e1b2: 781b ldrb r3, [r3, #0] - 800e1b4: 2b00 cmp r3, #0 - 800e1b6: d174 bne.n 800e2a2 - copy_len = LWIP_MIN(decode_len, 4); - 800e1b8: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 - 800e1bc: 2b04 cmp r3, #4 - 800e1be: bf28 it cs - 800e1c0: 2304 movcs r3, #4 - 800e1c2: b2db uxtb r3, r3 - 800e1c4: 82bb strh r3, [r7, #20] - if (pbuf_copy_partial(q, &value, copy_len, val_offset) != copy_len) { - 800e1c6: 8bfb ldrh r3, [r7, #30] - 800e1c8: 8aba ldrh r2, [r7, #20] - 800e1ca: f107 0108 add.w r1, r7, #8 - 800e1ce: 6b38 ldr r0, [r7, #48] ; 0x30 - 800e1d0: f7f8 fbec bl 80069ac - 800e1d4: 4603 mov r3, r0 - 800e1d6: 461a mov r2, r3 - 800e1d8: 8abb ldrh r3, [r7, #20] - 800e1da: 4293 cmp r3, r2 - 800e1dc: d002 beq.n 800e1e4 - return ERR_BUF; - 800e1de: f06f 0301 mvn.w r3, #1 - 800e1e2: e0c8 b.n 800e376 - } - if (decode_len > 4) { - 800e1e4: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 - 800e1e8: 2b04 cmp r3, #4 - 800e1ea: d933 bls.n 800e254 - /* decode more than one u32_t */ - u16_t next_val_offset; - LWIP_ERROR("decode_len %% 4 == 0", decode_len % 4 == 0, return ERR_VAL;); - 800e1ec: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 - 800e1f0: f003 0303 and.w r3, r3, #3 - 800e1f4: b2db uxtb r3, r3 - 800e1f6: 2b00 cmp r3, #0 - 800e1f8: d009 beq.n 800e20e - 800e1fa: 4b61 ldr r3, [pc, #388] ; (800e380 ) - 800e1fc: f240 6281 movw r2, #1665 ; 0x681 - 800e200: 4964 ldr r1, [pc, #400] ; (800e394 ) - 800e202: 4861 ldr r0, [pc, #388] ; (800e388 ) - 800e204: f002 ff50 bl 80110a8 - 800e208: f06f 0305 mvn.w r3, #5 - 800e20c: e0b3 b.n 800e376 - dhcp_got_option(dhcp, decode_idx); - 800e20e: 4a60 ldr r2, [pc, #384] ; (800e390 ) - 800e210: 6a3b ldr r3, [r7, #32] - 800e212: 4413 add r3, r2 - 800e214: 2201 movs r2, #1 - 800e216: 701a strb r2, [r3, #0] - dhcp_set_option_value(dhcp, decode_idx, lwip_htonl(value)); - 800e218: 68bb ldr r3, [r7, #8] - 800e21a: 4618 mov r0, r3 - 800e21c: f7f6 fe77 bl 8004f0e - 800e220: 4602 mov r2, r0 - 800e222: 495d ldr r1, [pc, #372] ; (800e398 ) - 800e224: 6a3b ldr r3, [r7, #32] - 800e226: f841 2023 str.w r2, [r1, r3, lsl #2] - decode_len = (u8_t)(decode_len - 4); - 800e22a: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 - 800e22e: 3b04 subs r3, #4 - 800e230: f887 3026 strb.w r3, [r7, #38] ; 0x26 - next_val_offset = (u16_t)(val_offset + 4); - 800e234: 8bfb ldrh r3, [r7, #30] - 800e236: 3304 adds r3, #4 - 800e238: 827b strh r3, [r7, #18] - if (next_val_offset < val_offset) { - 800e23a: 8a7a ldrh r2, [r7, #18] - 800e23c: 8bfb ldrh r3, [r7, #30] - 800e23e: 429a cmp r2, r3 - 800e240: d202 bcs.n 800e248 - /* overflow */ - return ERR_BUF; - 800e242: f06f 0301 mvn.w r3, #1 - 800e246: e096 b.n 800e376 - } - val_offset = next_val_offset; - 800e248: 8a7b ldrh r3, [r7, #18] - 800e24a: 83fb strh r3, [r7, #30] - decode_idx++; - 800e24c: 6a3b ldr r3, [r7, #32] - 800e24e: 3301 adds r3, #1 - 800e250: 623b str r3, [r7, #32] - goto decode_next; - 800e252: e79e b.n 800e192 - } else if (decode_len == 4) { - 800e254: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 - 800e258: 2b04 cmp r3, #4 - 800e25a: d106 bne.n 800e26a - value = lwip_ntohl(value); - 800e25c: 68bb ldr r3, [r7, #8] - 800e25e: 4618 mov r0, r3 - 800e260: f7f6 fe55 bl 8004f0e - 800e264: 4603 mov r3, r0 - 800e266: 60bb str r3, [r7, #8] - 800e268: e011 b.n 800e28e - } else { - LWIP_ERROR("invalid decode_len", decode_len == 1, return ERR_VAL;); - 800e26a: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 - 800e26e: 2b01 cmp r3, #1 - 800e270: d009 beq.n 800e286 - 800e272: 4b43 ldr r3, [pc, #268] ; (800e380 ) - 800e274: f44f 62d2 mov.w r2, #1680 ; 0x690 - 800e278: 4948 ldr r1, [pc, #288] ; (800e39c ) - 800e27a: 4843 ldr r0, [pc, #268] ; (800e388 ) - 800e27c: f002 ff14 bl 80110a8 - 800e280: f06f 0305 mvn.w r3, #5 - 800e284: e077 b.n 800e376 - value = ((u8_t *)&value)[0]; - 800e286: f107 0308 add.w r3, r7, #8 - 800e28a: 781b ldrb r3, [r3, #0] - 800e28c: 60bb str r3, [r7, #8] - } - dhcp_got_option(dhcp, decode_idx); - 800e28e: 4a40 ldr r2, [pc, #256] ; (800e390 ) - 800e290: 6a3b ldr r3, [r7, #32] - 800e292: 4413 add r3, r2 - 800e294: 2201 movs r2, #1 - 800e296: 701a strb r2, [r3, #0] - dhcp_set_option_value(dhcp, decode_idx, value); - 800e298: 68ba ldr r2, [r7, #8] - 800e29a: 493f ldr r1, [pc, #252] ; (800e398 ) - 800e29c: 6a3b ldr r3, [r7, #32] - 800e29e: f841 2023 str.w r2, [r1, r3, lsl #2] - } - } - } - if (offset >= q->len) { - 800e2a2: 6b3b ldr r3, [r7, #48] ; 0x30 - 800e2a4: 895b ldrh r3, [r3, #10] - 800e2a6: 8f7a ldrh r2, [r7, #58] ; 0x3a - 800e2a8: 429a cmp r2, r3 - 800e2aa: d324 bcc.n 800e2f6 - offset = (u16_t)(offset - q->len); - 800e2ac: 6b3b ldr r3, [r7, #48] ; 0x30 - 800e2ae: 895b ldrh r3, [r3, #10] - 800e2b0: 8f7a ldrh r2, [r7, #58] ; 0x3a - 800e2b2: 1ad3 subs r3, r2, r3 - 800e2b4: 877b strh r3, [r7, #58] ; 0x3a - offset_max = (u16_t)(offset_max - q->len); - 800e2b6: 6b3b ldr r3, [r7, #48] ; 0x30 - 800e2b8: 895b ldrh r3, [r3, #10] - 800e2ba: 8f3a ldrh r2, [r7, #56] ; 0x38 - 800e2bc: 1ad3 subs r3, r2, r3 - 800e2be: 873b strh r3, [r7, #56] ; 0x38 - if (offset < offset_max) { - 800e2c0: 8f7a ldrh r2, [r7, #58] ; 0x3a - 800e2c2: 8f3b ldrh r3, [r7, #56] ; 0x38 - 800e2c4: 429a cmp r2, r3 - 800e2c6: d213 bcs.n 800e2f0 - q = q->next; - 800e2c8: 6b3b ldr r3, [r7, #48] ; 0x30 - 800e2ca: 681b ldr r3, [r3, #0] - 800e2cc: 633b str r3, [r7, #48] ; 0x30 - LWIP_ERROR("next pbuf was null", q != NULL, return ERR_VAL;); - 800e2ce: 6b3b ldr r3, [r7, #48] ; 0x30 - 800e2d0: 2b00 cmp r3, #0 - 800e2d2: d109 bne.n 800e2e8 - 800e2d4: 4b2a ldr r3, [pc, #168] ; (800e380 ) - 800e2d6: f240 629d movw r2, #1693 ; 0x69d - 800e2da: 4931 ldr r1, [pc, #196] ; (800e3a0 ) - 800e2dc: 482a ldr r0, [pc, #168] ; (800e388 ) - 800e2de: f002 fee3 bl 80110a8 - 800e2e2: f06f 0305 mvn.w r3, #5 - 800e2e6: e046 b.n 800e376 - options = (u8_t *)q->payload; - 800e2e8: 6b3b ldr r3, [r7, #48] ; 0x30 - 800e2ea: 685b ldr r3, [r3, #4] - 800e2ec: 63fb str r3, [r7, #60] ; 0x3c - 800e2ee: e002 b.n 800e2f6 - } else { - /* We've run out of bytes, probably no end marker. Don't proceed. */ - return ERR_BUF; - 800e2f0: f06f 0301 mvn.w r3, #1 - 800e2f4: e03f b.n 800e376 - while ((q != NULL) && (offset < offset_max) && (options[offset] != DHCP_OPTION_END)) { - 800e2f6: 6b3b ldr r3, [r7, #48] ; 0x30 - 800e2f8: 2b00 cmp r3, #0 - 800e2fa: d00a beq.n 800e312 - 800e2fc: 8f7a ldrh r2, [r7, #58] ; 0x3a - 800e2fe: 8f3b ldrh r3, [r7, #56] ; 0x38 - 800e300: 429a cmp r2, r3 - 800e302: d206 bcs.n 800e312 - 800e304: 8f7b ldrh r3, [r7, #58] ; 0x3a - 800e306: 6bfa ldr r2, [r7, #60] ; 0x3c - 800e308: 4413 add r3, r2 - 800e30a: 781b ldrb r3, [r3, #0] - 800e30c: 2bff cmp r3, #255 ; 0xff - 800e30e: f47f adb8 bne.w 800de82 - } - } - } - /* is this an overloaded message? */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_OVERLOAD)) { - 800e312: 4b1f ldr r3, [pc, #124] ; (800e390 ) - 800e314: 781b ldrb r3, [r3, #0] - 800e316: 2b00 cmp r3, #0 - 800e318: d018 beq.n 800e34c - u32_t overload = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_OVERLOAD); - 800e31a: 4b1f ldr r3, [pc, #124] ; (800e398 ) - 800e31c: 681b ldr r3, [r3, #0] - 800e31e: 60fb str r3, [r7, #12] - dhcp_clear_option(dhcp, DHCP_OPTION_IDX_OVERLOAD); - 800e320: 4b1b ldr r3, [pc, #108] ; (800e390 ) - 800e322: 2200 movs r2, #0 - 800e324: 701a strb r2, [r3, #0] - if (overload == DHCP_OVERLOAD_FILE) { - 800e326: 68fb ldr r3, [r7, #12] - 800e328: 2b01 cmp r3, #1 - 800e32a: d102 bne.n 800e332 - parse_file_as_options = 1; - 800e32c: 2301 movs r3, #1 - 800e32e: 62fb str r3, [r7, #44] ; 0x2c - 800e330: e00c b.n 800e34c - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded file field\n")); - } else if (overload == DHCP_OVERLOAD_SNAME) { - 800e332: 68fb ldr r3, [r7, #12] - 800e334: 2b02 cmp r3, #2 - 800e336: d102 bne.n 800e33e - parse_sname_as_options = 1; - 800e338: 2301 movs r3, #1 - 800e33a: 62bb str r3, [r7, #40] ; 0x28 - 800e33c: e006 b.n 800e34c - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname field\n")); - } else if (overload == DHCP_OVERLOAD_SNAME_FILE) { - 800e33e: 68fb ldr r3, [r7, #12] - 800e340: 2b03 cmp r3, #3 - 800e342: d103 bne.n 800e34c - parse_sname_as_options = 1; - 800e344: 2301 movs r3, #1 - 800e346: 62bb str r3, [r7, #40] ; 0x28 - parse_file_as_options = 1; - 800e348: 2301 movs r3, #1 - 800e34a: 62fb str r3, [r7, #44] ; 0x2c - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname and file field\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("invalid overload option: %d\n", (int)overload)); - } - } - if (parse_file_as_options) { - 800e34c: 6afb ldr r3, [r7, #44] ; 0x2c - 800e34e: 2b00 cmp r3, #0 - 800e350: d006 beq.n 800e360 - /* if both are overloaded, parse file first and then sname (RFC 2131 ch. 4.1) */ - parse_file_as_options = 0; - 800e352: 2300 movs r3, #0 - 800e354: 62fb str r3, [r7, #44] ; 0x2c - options_idx = DHCP_FILE_OFS; - 800e356: 236c movs r3, #108 ; 0x6c - 800e358: 86fb strh r3, [r7, #54] ; 0x36 - options_idx_max = DHCP_FILE_OFS + DHCP_FILE_LEN; - 800e35a: 23ec movs r3, #236 ; 0xec - 800e35c: 86bb strh r3, [r7, #52] ; 0x34 -#if LWIP_DHCP_BOOTP_FILE - file_overloaded = 1; -#endif - goto again; - 800e35e: e56a b.n 800de36 - } else if (parse_sname_as_options) { - 800e360: 6abb ldr r3, [r7, #40] ; 0x28 - 800e362: 2b00 cmp r3, #0 - 800e364: d006 beq.n 800e374 - parse_sname_as_options = 0; - 800e366: 2300 movs r3, #0 - 800e368: 62bb str r3, [r7, #40] ; 0x28 - options_idx = DHCP_SNAME_OFS; - 800e36a: 232c movs r3, #44 ; 0x2c - 800e36c: 86fb strh r3, [r7, #54] ; 0x36 - options_idx_max = DHCP_SNAME_OFS + DHCP_SNAME_LEN; - 800e36e: 236c movs r3, #108 ; 0x6c - 800e370: 86bb strh r3, [r7, #52] ; 0x34 - goto again; - 800e372: e560 b.n 800de36 - } - /* make sure the string is really NULL-terminated */ - dhcp->boot_file_name[DHCP_FILE_LEN-1] = 0; - } -#endif /* LWIP_DHCP_BOOTP_FILE */ - return ERR_OK; - 800e374: 2300 movs r3, #0 -} - 800e376: 4618 mov r0, r3 - 800e378: 3740 adds r7, #64 ; 0x40 - 800e37a: 46bd mov sp, r7 - 800e37c: bd80 pop {r7, pc} - 800e37e: bf00 nop - 800e380: 08017efc .word 0x08017efc - 800e384: 08018184 .word 0x08018184 - 800e388: 08017f5c .word 0x08017f5c - 800e38c: 080181c8 .word 0x080181c8 - 800e390: 20009a54 .word 0x20009a54 - 800e394: 080181dc .word 0x080181dc - 800e398: 20009a34 .word 0x20009a34 - 800e39c: 080181f4 .word 0x080181f4 - 800e3a0: 08018208 .word 0x08018208 - -0800e3a4 : -/** - * If an incoming DHCP message is in response to us, then trigger the state machine - */ -static void -dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port) -{ - 800e3a4: b580 push {r7, lr} - 800e3a6: b08a sub sp, #40 ; 0x28 - 800e3a8: af00 add r7, sp, #0 - 800e3aa: 60f8 str r0, [r7, #12] - 800e3ac: 60b9 str r1, [r7, #8] - 800e3ae: 607a str r2, [r7, #4] - 800e3b0: 603b str r3, [r7, #0] - struct netif *netif = ip_current_input_netif(); - 800e3b2: 4b60 ldr r3, [pc, #384] ; (800e534 ) - 800e3b4: 685b ldr r3, [r3, #4] - 800e3b6: 623b str r3, [r7, #32] - struct dhcp *dhcp = netif_dhcp_data(netif); - 800e3b8: 6a3b ldr r3, [r7, #32] - 800e3ba: 6a5b ldr r3, [r3, #36] ; 0x24 - 800e3bc: 61fb str r3, [r7, #28] - struct dhcp_msg *reply_msg = (struct dhcp_msg *)p->payload; - 800e3be: 687b ldr r3, [r7, #4] - 800e3c0: 685b ldr r3, [r3, #4] - 800e3c2: 61bb str r3, [r7, #24] - struct dhcp_msg *msg_in; - - LWIP_UNUSED_ARG(arg); - - /* Caught DHCP message from netif that does not have DHCP enabled? -> not interested */ - if ((dhcp == NULL) || (dhcp->pcb_allocated == 0)) { - 800e3c4: 69fb ldr r3, [r7, #28] - 800e3c6: 2b00 cmp r3, #0 - 800e3c8: f000 809d beq.w 800e506 - 800e3cc: 69fb ldr r3, [r7, #28] - 800e3ce: 791b ldrb r3, [r3, #4] - 800e3d0: 2b00 cmp r3, #0 - 800e3d2: f000 8098 beq.w 800e506 - /* prevent warnings about unused arguments */ - LWIP_UNUSED_ARG(pcb); - LWIP_UNUSED_ARG(addr); - LWIP_UNUSED_ARG(port); - - if (p->len < DHCP_MIN_REPLY_LEN) { - 800e3d6: 687b ldr r3, [r7, #4] - 800e3d8: 895b ldrh r3, [r3, #10] - 800e3da: 2b2b cmp r3, #43 ; 0x2b - 800e3dc: f240 8095 bls.w 800e50a - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP reply message or pbuf too short\n")); - goto free_pbuf_and_return; - } - - if (reply_msg->op != DHCP_BOOTREPLY) { - 800e3e0: 69bb ldr r3, [r7, #24] - 800e3e2: 781b ldrb r3, [r3, #0] - 800e3e4: 2b02 cmp r3, #2 - 800e3e6: f040 8092 bne.w 800e50e - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("not a DHCP reply message, but type %"U16_F"\n", (u16_t)reply_msg->op)); - goto free_pbuf_and_return; - } - /* iterate through hardware address and match against DHCP message */ - for (i = 0; i < netif->hwaddr_len && i < LWIP_MIN(DHCP_CHADDR_LEN, NETIF_MAX_HWADDR_LEN); i++) { - 800e3ea: 2300 movs r3, #0 - 800e3ec: f887 3027 strb.w r3, [r7, #39] ; 0x27 - 800e3f0: e012 b.n 800e418 - if (netif->hwaddr[i] != reply_msg->chaddr[i]) { - 800e3f2: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800e3f6: 6a3a ldr r2, [r7, #32] - 800e3f8: 4413 add r3, r2 - 800e3fa: f893 202a ldrb.w r2, [r3, #42] ; 0x2a - 800e3fe: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800e402: 69b9 ldr r1, [r7, #24] - 800e404: 440b add r3, r1 - 800e406: 7f1b ldrb r3, [r3, #28] - 800e408: 429a cmp r2, r3 - 800e40a: f040 8082 bne.w 800e512 - for (i = 0; i < netif->hwaddr_len && i < LWIP_MIN(DHCP_CHADDR_LEN, NETIF_MAX_HWADDR_LEN); i++) { - 800e40e: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800e412: 3301 adds r3, #1 - 800e414: f887 3027 strb.w r3, [r7, #39] ; 0x27 - 800e418: 6a3b ldr r3, [r7, #32] - 800e41a: f893 3030 ldrb.w r3, [r3, #48] ; 0x30 - 800e41e: f897 2027 ldrb.w r2, [r7, #39] ; 0x27 - 800e422: 429a cmp r2, r3 - 800e424: d203 bcs.n 800e42e - 800e426: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 - 800e42a: 2b05 cmp r3, #5 - 800e42c: d9e1 bls.n 800e3f2 - (u16_t)i, (u16_t)netif->hwaddr[i], (u16_t)i, (u16_t)reply_msg->chaddr[i])); - goto free_pbuf_and_return; - } - } - /* match transaction ID against what we expected */ - if (lwip_ntohl(reply_msg->xid) != dhcp->xid) { - 800e42e: 69bb ldr r3, [r7, #24] - 800e430: 685b ldr r3, [r3, #4] - 800e432: 4618 mov r0, r3 - 800e434: f7f6 fd6b bl 8004f0e - 800e438: 4602 mov r2, r0 - 800e43a: 69fb ldr r3, [r7, #28] - 800e43c: 681b ldr r3, [r3, #0] - 800e43e: 429a cmp r2, r3 - 800e440: d169 bne.n 800e516 - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, - ("transaction id mismatch reply_msg->xid(%"X32_F")!=dhcp->xid(%"X32_F")\n", lwip_ntohl(reply_msg->xid), dhcp->xid)); - goto free_pbuf_and_return; - } - /* option fields could be unfold? */ - if (dhcp_parse_reply(p, dhcp) != ERR_OK) { - 800e442: 69f9 ldr r1, [r7, #28] - 800e444: 6878 ldr r0, [r7, #4] - 800e446: f7ff fcd9 bl 800ddfc - 800e44a: 4603 mov r3, r0 - 800e44c: 2b00 cmp r3, #0 - 800e44e: d164 bne.n 800e51a - goto free_pbuf_and_return; - } - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("searching DHCP_OPTION_MESSAGE_TYPE\n")); - /* obtain pointer to DHCP message type */ - if (!dhcp_option_given(dhcp, DHCP_OPTION_IDX_MSG_TYPE)) { - 800e450: 4b39 ldr r3, [pc, #228] ; (800e538 ) - 800e452: 785b ldrb r3, [r3, #1] - 800e454: 2b00 cmp r3, #0 - 800e456: d062 beq.n 800e51e - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP_OPTION_MESSAGE_TYPE option not found\n")); - goto free_pbuf_and_return; - } - - msg_in = (struct dhcp_msg *)p->payload; - 800e458: 687b ldr r3, [r7, #4] - 800e45a: 685b ldr r3, [r3, #4] - 800e45c: 617b str r3, [r7, #20] - /* read DHCP message type */ - msg_type = (u8_t)dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE); - 800e45e: 4b37 ldr r3, [pc, #220] ; (800e53c ) - 800e460: 685b ldr r3, [r3, #4] - 800e462: 74fb strb r3, [r7, #19] - /* message type is DHCP ACK? */ - if (msg_type == DHCP_ACK) { - 800e464: 7cfb ldrb r3, [r7, #19] - 800e466: 2b05 cmp r3, #5 - 800e468: d12a bne.n 800e4c0 - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_ACK received\n")); - /* in requesting state? */ - if (dhcp->state == DHCP_STATE_REQUESTING) { - 800e46a: 69fb ldr r3, [r7, #28] - 800e46c: 795b ldrb r3, [r3, #5] - 800e46e: 2b01 cmp r3, #1 - 800e470: d112 bne.n 800e498 - dhcp_handle_ack(netif, msg_in); - 800e472: 6979 ldr r1, [r7, #20] - 800e474: 6a38 ldr r0, [r7, #32] - 800e476: f7fe fe17 bl 800d0a8 -#if DHCP_DOES_ARP_CHECK - if ((netif->flags & NETIF_FLAG_ETHARP) != 0) { - 800e47a: 6a3b ldr r3, [r7, #32] - 800e47c: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 800e480: f003 0308 and.w r3, r3, #8 - 800e484: 2b00 cmp r3, #0 - 800e486: d003 beq.n 800e490 - /* check if the acknowledged lease address is already in use */ - dhcp_check(netif); - 800e488: 6a38 ldr r0, [r7, #32] - 800e48a: f7fe fb87 bl 800cb9c - 800e48e: e049 b.n 800e524 - } else { - /* bind interface to the acknowledged lease address */ - dhcp_bind(netif); - 800e490: 6a38 ldr r0, [r7, #32] - 800e492: f7ff f867 bl 800d564 - 800e496: e045 b.n 800e524 - /* bind interface to the acknowledged lease address */ - dhcp_bind(netif); -#endif - } - /* already bound to the given lease address? */ - else if ((dhcp->state == DHCP_STATE_REBOOTING) || (dhcp->state == DHCP_STATE_REBINDING) || - 800e498: 69fb ldr r3, [r7, #28] - 800e49a: 795b ldrb r3, [r3, #5] - 800e49c: 2b03 cmp r3, #3 - 800e49e: d007 beq.n 800e4b0 - 800e4a0: 69fb ldr r3, [r7, #28] - 800e4a2: 795b ldrb r3, [r3, #5] - 800e4a4: 2b04 cmp r3, #4 - 800e4a6: d003 beq.n 800e4b0 - (dhcp->state == DHCP_STATE_RENEWING)) { - 800e4a8: 69fb ldr r3, [r7, #28] - 800e4aa: 795b ldrb r3, [r3, #5] - else if ((dhcp->state == DHCP_STATE_REBOOTING) || (dhcp->state == DHCP_STATE_REBINDING) || - 800e4ac: 2b05 cmp r3, #5 - 800e4ae: d139 bne.n 800e524 - dhcp_handle_ack(netif, msg_in); - 800e4b0: 6979 ldr r1, [r7, #20] - 800e4b2: 6a38 ldr r0, [r7, #32] - 800e4b4: f7fe fdf8 bl 800d0a8 - dhcp_bind(netif); - 800e4b8: 6a38 ldr r0, [r7, #32] - 800e4ba: f7ff f853 bl 800d564 - 800e4be: e031 b.n 800e524 - } - } - /* received a DHCP_NAK in appropriate state? */ - else if ((msg_type == DHCP_NAK) && - 800e4c0: 7cfb ldrb r3, [r7, #19] - 800e4c2: 2b06 cmp r3, #6 - 800e4c4: d113 bne.n 800e4ee - ((dhcp->state == DHCP_STATE_REBOOTING) || (dhcp->state == DHCP_STATE_REQUESTING) || - 800e4c6: 69fb ldr r3, [r7, #28] - 800e4c8: 795b ldrb r3, [r3, #5] - else if ((msg_type == DHCP_NAK) && - 800e4ca: 2b03 cmp r3, #3 - 800e4cc: d00b beq.n 800e4e6 - ((dhcp->state == DHCP_STATE_REBOOTING) || (dhcp->state == DHCP_STATE_REQUESTING) || - 800e4ce: 69fb ldr r3, [r7, #28] - 800e4d0: 795b ldrb r3, [r3, #5] - 800e4d2: 2b01 cmp r3, #1 - 800e4d4: d007 beq.n 800e4e6 - (dhcp->state == DHCP_STATE_REBINDING) || (dhcp->state == DHCP_STATE_RENEWING ))) { - 800e4d6: 69fb ldr r3, [r7, #28] - 800e4d8: 795b ldrb r3, [r3, #5] - ((dhcp->state == DHCP_STATE_REBOOTING) || (dhcp->state == DHCP_STATE_REQUESTING) || - 800e4da: 2b04 cmp r3, #4 - 800e4dc: d003 beq.n 800e4e6 - (dhcp->state == DHCP_STATE_REBINDING) || (dhcp->state == DHCP_STATE_RENEWING ))) { - 800e4de: 69fb ldr r3, [r7, #28] - 800e4e0: 795b ldrb r3, [r3, #5] - 800e4e2: 2b05 cmp r3, #5 - 800e4e4: d103 bne.n 800e4ee - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_NAK received\n")); - dhcp_handle_nak(netif); - 800e4e6: 6a38 ldr r0, [r7, #32] - 800e4e8: f7fe fb3e bl 800cb68 - 800e4ec: e01a b.n 800e524 - } - /* received a DHCP_OFFER in DHCP_STATE_SELECTING state? */ - else if ((msg_type == DHCP_OFFER) && (dhcp->state == DHCP_STATE_SELECTING)) { - 800e4ee: 7cfb ldrb r3, [r7, #19] - 800e4f0: 2b02 cmp r3, #2 - 800e4f2: d116 bne.n 800e522 - 800e4f4: 69fb ldr r3, [r7, #28] - 800e4f6: 795b ldrb r3, [r3, #5] - 800e4f8: 2b06 cmp r3, #6 - 800e4fa: d112 bne.n 800e522 - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_OFFER received in DHCP_STATE_SELECTING state\n")); - /* remember offered lease */ - dhcp_handle_offer(netif, msg_in); - 800e4fc: 6979 ldr r1, [r7, #20] - 800e4fe: 6a38 ldr r0, [r7, #32] - 800e500: f7fe fb80 bl 800cc04 - 800e504: e00e b.n 800e524 - goto free_pbuf_and_return; - 800e506: bf00 nop - 800e508: e00c b.n 800e524 - goto free_pbuf_and_return; - 800e50a: bf00 nop - 800e50c: e00a b.n 800e524 - goto free_pbuf_and_return; - 800e50e: bf00 nop - 800e510: e008 b.n 800e524 - goto free_pbuf_and_return; - 800e512: bf00 nop - 800e514: e006 b.n 800e524 - goto free_pbuf_and_return; - 800e516: bf00 nop - 800e518: e004 b.n 800e524 - goto free_pbuf_and_return; - 800e51a: bf00 nop - 800e51c: e002 b.n 800e524 - goto free_pbuf_and_return; - 800e51e: bf00 nop - 800e520: e000 b.n 800e524 - } - -free_pbuf_and_return: - 800e522: bf00 nop - pbuf_free(p); - 800e524: 6878 ldr r0, [r7, #4] - 800e526: f7f8 f847 bl 80065b8 -} - 800e52a: bf00 nop - 800e52c: 3728 adds r7, #40 ; 0x28 - 800e52e: 46bd mov sp, r7 - 800e530: bd80 pop {r7, pc} - 800e532: bf00 nop - 800e534: 20006444 .word 0x20006444 - 800e538: 20009a54 .word 0x20009a54 - 800e53c: 20009a34 .word 0x20009a34 - -0800e540 : - * @param dhcp dhcp control struct - * @param message_type message type of the request - */ -static struct pbuf * -dhcp_create_msg(struct netif *netif, struct dhcp *dhcp, u8_t message_type, u16_t *options_out_len) -{ - 800e540: b580 push {r7, lr} - 800e542: b088 sub sp, #32 - 800e544: af00 add r7, sp, #0 - 800e546: 60f8 str r0, [r7, #12] - 800e548: 60b9 str r1, [r7, #8] - 800e54a: 603b str r3, [r7, #0] - 800e54c: 4613 mov r3, r2 - 800e54e: 71fb strb r3, [r7, #7] - if (!xid_initialised) { - xid = DHCP_GLOBAL_XID; - xid_initialised = !xid_initialised; - } -#endif - LWIP_ERROR("dhcp_create_msg: netif != NULL", (netif != NULL), return NULL;); - 800e550: 68fb ldr r3, [r7, #12] - 800e552: 2b00 cmp r3, #0 - 800e554: d108 bne.n 800e568 - 800e556: 4b5f ldr r3, [pc, #380] ; (800e6d4 ) - 800e558: f240 7269 movw r2, #1897 ; 0x769 - 800e55c: 495e ldr r1, [pc, #376] ; (800e6d8 ) - 800e55e: 485f ldr r0, [pc, #380] ; (800e6dc ) - 800e560: f002 fda2 bl 80110a8 - 800e564: 2300 movs r3, #0 - 800e566: e0b1 b.n 800e6cc - LWIP_ERROR("dhcp_create_msg: dhcp != NULL", (dhcp != NULL), return NULL;); - 800e568: 68bb ldr r3, [r7, #8] - 800e56a: 2b00 cmp r3, #0 - 800e56c: d108 bne.n 800e580 - 800e56e: 4b59 ldr r3, [pc, #356] ; (800e6d4 ) - 800e570: f240 726a movw r2, #1898 ; 0x76a - 800e574: 495a ldr r1, [pc, #360] ; (800e6e0 ) - 800e576: 4859 ldr r0, [pc, #356] ; (800e6dc ) - 800e578: f002 fd96 bl 80110a8 - 800e57c: 2300 movs r3, #0 - 800e57e: e0a5 b.n 800e6cc - p_out = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcp_msg), PBUF_RAM); - 800e580: f44f 7220 mov.w r2, #640 ; 0x280 - 800e584: f44f 719a mov.w r1, #308 ; 0x134 - 800e588: 2036 movs r0, #54 ; 0x36 - 800e58a: f7f7 fd31 bl 8005ff0 - 800e58e: 61b8 str r0, [r7, #24] - if (p_out == NULL) { - 800e590: 69bb ldr r3, [r7, #24] - 800e592: 2b00 cmp r3, #0 - 800e594: d101 bne.n 800e59a - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, - ("dhcp_create_msg(): could not allocate pbuf\n")); - return NULL; - 800e596: 2300 movs r3, #0 - 800e598: e098 b.n 800e6cc - } - LWIP_ASSERT("dhcp_create_msg: check that first pbuf can hold struct dhcp_msg", - 800e59a: 69bb ldr r3, [r7, #24] - 800e59c: 895b ldrh r3, [r3, #10] - 800e59e: f5b3 7f9a cmp.w r3, #308 ; 0x134 - 800e5a2: d206 bcs.n 800e5b2 - 800e5a4: 4b4b ldr r3, [pc, #300] ; (800e6d4 ) - 800e5a6: f240 7271 movw r2, #1905 ; 0x771 - 800e5aa: 494e ldr r1, [pc, #312] ; (800e6e4 ) - 800e5ac: 484b ldr r0, [pc, #300] ; (800e6dc ) - 800e5ae: f002 fd7b bl 80110a8 - (p_out->len >= sizeof(struct dhcp_msg))); - - /* DHCP_REQUEST should reuse 'xid' from DHCPOFFER */ - if ((message_type != DHCP_REQUEST) || (dhcp->state == DHCP_STATE_REBOOTING)) { - 800e5b2: 79fb ldrb r3, [r7, #7] - 800e5b4: 2b03 cmp r3, #3 - 800e5b6: d103 bne.n 800e5c0 - 800e5b8: 68bb ldr r3, [r7, #8] - 800e5ba: 795b ldrb r3, [r3, #5] - 800e5bc: 2b03 cmp r3, #3 - 800e5be: d10d bne.n 800e5dc - /* reuse transaction identifier in retransmissions */ - if (dhcp->tries == 0) { - 800e5c0: 68bb ldr r3, [r7, #8] - 800e5c2: 799b ldrb r3, [r3, #6] - 800e5c4: 2b00 cmp r3, #0 - 800e5c6: d105 bne.n 800e5d4 -#if DHCP_CREATE_RAND_XID && defined(LWIP_RAND) - xid = LWIP_RAND(); - 800e5c8: f002 fd80 bl 80110cc - 800e5cc: 4603 mov r3, r0 - 800e5ce: 461a mov r2, r3 - 800e5d0: 4b45 ldr r3, [pc, #276] ; (800e6e8 ) - 800e5d2: 601a str r2, [r3, #0] -#else /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ - xid++; -#endif /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ - } - dhcp->xid = xid; - 800e5d4: 4b44 ldr r3, [pc, #272] ; (800e6e8 ) - 800e5d6: 681a ldr r2, [r3, #0] - 800e5d8: 68bb ldr r3, [r7, #8] - 800e5da: 601a str r2, [r3, #0] - } - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, - ("transaction id xid(%"X32_F")\n", xid)); - - msg_out = (struct dhcp_msg *)p_out->payload; - 800e5dc: 69bb ldr r3, [r7, #24] - 800e5de: 685b ldr r3, [r3, #4] - 800e5e0: 617b str r3, [r7, #20] - memset(msg_out, 0, sizeof(struct dhcp_msg)); - 800e5e2: f44f 729a mov.w r2, #308 ; 0x134 - 800e5e6: 2100 movs r1, #0 - 800e5e8: 6978 ldr r0, [r7, #20] - 800e5ea: f002 fd55 bl 8011098 - - msg_out->op = DHCP_BOOTREQUEST; - 800e5ee: 697b ldr r3, [r7, #20] - 800e5f0: 2201 movs r2, #1 - 800e5f2: 701a strb r2, [r3, #0] - /* @todo: make link layer independent */ - msg_out->htype = LWIP_IANA_HWTYPE_ETHERNET; - 800e5f4: 697b ldr r3, [r7, #20] - 800e5f6: 2201 movs r2, #1 - 800e5f8: 705a strb r2, [r3, #1] - msg_out->hlen = netif->hwaddr_len; - 800e5fa: 68fb ldr r3, [r7, #12] - 800e5fc: f893 2030 ldrb.w r2, [r3, #48] ; 0x30 - 800e600: 697b ldr r3, [r7, #20] - 800e602: 709a strb r2, [r3, #2] - msg_out->xid = lwip_htonl(dhcp->xid); - 800e604: 68bb ldr r3, [r7, #8] - 800e606: 681b ldr r3, [r3, #0] - 800e608: 4618 mov r0, r3 - 800e60a: f7f6 fc80 bl 8004f0e - 800e60e: 4602 mov r2, r0 - 800e610: 697b ldr r3, [r7, #20] - 800e612: 605a str r2, [r3, #4] - /* we don't need the broadcast flag since we can receive unicast traffic - before being fully configured! */ - /* set ciaddr to netif->ip_addr based on message_type and state */ - if ((message_type == DHCP_INFORM) || (message_type == DHCP_DECLINE) || (message_type == DHCP_RELEASE) || - 800e614: 79fb ldrb r3, [r7, #7] - 800e616: 2b08 cmp r3, #8 - 800e618: d010 beq.n 800e63c - 800e61a: 79fb ldrb r3, [r7, #7] - 800e61c: 2b04 cmp r3, #4 - 800e61e: d00d beq.n 800e63c - 800e620: 79fb ldrb r3, [r7, #7] - 800e622: 2b07 cmp r3, #7 - 800e624: d00a beq.n 800e63c - 800e626: 79fb ldrb r3, [r7, #7] - 800e628: 2b03 cmp r3, #3 - 800e62a: d10c bne.n 800e646 - ((message_type == DHCP_REQUEST) && /* DHCP_STATE_BOUND not used for sending! */ - ((dhcp->state == DHCP_STATE_RENEWING) || dhcp->state == DHCP_STATE_REBINDING))) { - 800e62c: 68bb ldr r3, [r7, #8] - 800e62e: 795b ldrb r3, [r3, #5] - ((message_type == DHCP_REQUEST) && /* DHCP_STATE_BOUND not used for sending! */ - 800e630: 2b05 cmp r3, #5 - 800e632: d003 beq.n 800e63c - ((dhcp->state == DHCP_STATE_RENEWING) || dhcp->state == DHCP_STATE_REBINDING))) { - 800e634: 68bb ldr r3, [r7, #8] - 800e636: 795b ldrb r3, [r3, #5] - 800e638: 2b04 cmp r3, #4 - 800e63a: d104 bne.n 800e646 - ip4_addr_copy(msg_out->ciaddr, *netif_ip4_addr(netif)); - 800e63c: 68fb ldr r3, [r7, #12] - 800e63e: 3304 adds r3, #4 - 800e640: 681a ldr r2, [r3, #0] - 800e642: 697b ldr r3, [r7, #20] - 800e644: 60da str r2, [r3, #12] - } - for (i = 0; i < LWIP_MIN(DHCP_CHADDR_LEN, NETIF_MAX_HWADDR_LEN); i++) { - 800e646: 2300 movs r3, #0 - 800e648: 83fb strh r3, [r7, #30] - 800e64a: e00c b.n 800e666 - /* copy netif hardware address (padded with zeroes through memset already) */ - msg_out->chaddr[i] = netif->hwaddr[i]; - 800e64c: 8bfa ldrh r2, [r7, #30] - 800e64e: 8bfb ldrh r3, [r7, #30] - 800e650: 68f9 ldr r1, [r7, #12] - 800e652: 440a add r2, r1 - 800e654: f892 102a ldrb.w r1, [r2, #42] ; 0x2a - 800e658: 697a ldr r2, [r7, #20] - 800e65a: 4413 add r3, r2 - 800e65c: 460a mov r2, r1 - 800e65e: 771a strb r2, [r3, #28] - for (i = 0; i < LWIP_MIN(DHCP_CHADDR_LEN, NETIF_MAX_HWADDR_LEN); i++) { - 800e660: 8bfb ldrh r3, [r7, #30] - 800e662: 3301 adds r3, #1 - 800e664: 83fb strh r3, [r7, #30] - 800e666: 8bfb ldrh r3, [r7, #30] - 800e668: 2b05 cmp r3, #5 - 800e66a: d9ef bls.n 800e64c - } - msg_out->cookie = PP_HTONL(DHCP_MAGIC_COOKIE); - 800e66c: 697b ldr r3, [r7, #20] - 800e66e: 2200 movs r2, #0 - 800e670: f042 0263 orr.w r2, r2, #99 ; 0x63 - 800e674: f883 20ec strb.w r2, [r3, #236] ; 0xec - 800e678: 2200 movs r2, #0 - 800e67a: f062 027d orn r2, r2, #125 ; 0x7d - 800e67e: f883 20ed strb.w r2, [r3, #237] ; 0xed - 800e682: 2200 movs r2, #0 - 800e684: f042 0253 orr.w r2, r2, #83 ; 0x53 - 800e688: f883 20ee strb.w r2, [r3, #238] ; 0xee - 800e68c: 2200 movs r2, #0 - 800e68e: f042 0263 orr.w r2, r2, #99 ; 0x63 - 800e692: f883 20ef strb.w r2, [r3, #239] ; 0xef - /* Add option MESSAGE_TYPE */ - options_out_len_loc = dhcp_option(0, msg_out->options, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); - 800e696: 697b ldr r3, [r7, #20] - 800e698: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800e69c: 2301 movs r3, #1 - 800e69e: 2235 movs r2, #53 ; 0x35 - 800e6a0: 2000 movs r0, #0 - 800e6a2: f7ff fadb bl 800dc5c - 800e6a6: 4603 mov r3, r0 - 800e6a8: 827b strh r3, [r7, #18] - options_out_len_loc = dhcp_option_byte(options_out_len_loc, msg_out->options, message_type); - 800e6aa: 697b ldr r3, [r7, #20] - 800e6ac: f103 01f0 add.w r1, r3, #240 ; 0xf0 - 800e6b0: 79fa ldrb r2, [r7, #7] - 800e6b2: 8a7b ldrh r3, [r7, #18] - 800e6b4: 4618 mov r0, r3 - 800e6b6: f7ff fb05 bl 800dcc4 - 800e6ba: 4603 mov r3, r0 - 800e6bc: 827b strh r3, [r7, #18] - if (options_out_len) { - 800e6be: 683b ldr r3, [r7, #0] - 800e6c0: 2b00 cmp r3, #0 - 800e6c2: d002 beq.n 800e6ca - *options_out_len = options_out_len_loc; - 800e6c4: 683b ldr r3, [r7, #0] - 800e6c6: 8a7a ldrh r2, [r7, #18] - 800e6c8: 801a strh r2, [r3, #0] - } - return p_out; - 800e6ca: 69bb ldr r3, [r7, #24] -} - 800e6cc: 4618 mov r0, r3 - 800e6ce: 3720 adds r7, #32 - 800e6d0: 46bd mov sp, r7 - 800e6d2: bd80 pop {r7, pc} - 800e6d4: 08017efc .word 0x08017efc - 800e6d8: 0801821c .word 0x0801821c - 800e6dc: 08017f5c .word 0x08017f5c - 800e6e0: 0801823c .word 0x0801823c - 800e6e4: 0801825c .word 0x0801825c - 800e6e8: 20009a64 .word 0x20009a64 - -0800e6ec : - * Adds the END option to the DHCP message, and if - * necessary, up to three padding bytes. - */ -static void -dhcp_option_trailer(u16_t options_out_len, u8_t *options, struct pbuf *p_out) -{ - 800e6ec: b580 push {r7, lr} - 800e6ee: b084 sub sp, #16 - 800e6f0: af00 add r7, sp, #0 - 800e6f2: 4603 mov r3, r0 - 800e6f4: 60b9 str r1, [r7, #8] - 800e6f6: 607a str r2, [r7, #4] - 800e6f8: 81fb strh r3, [r7, #14] - options[options_out_len++] = DHCP_OPTION_END; - 800e6fa: 89fb ldrh r3, [r7, #14] - 800e6fc: 1c5a adds r2, r3, #1 - 800e6fe: 81fa strh r2, [r7, #14] - 800e700: 461a mov r2, r3 - 800e702: 68bb ldr r3, [r7, #8] - 800e704: 4413 add r3, r2 - 800e706: 22ff movs r2, #255 ; 0xff - 800e708: 701a strb r2, [r3, #0] - /* packet is too small, or not 4 byte aligned? */ - while (((options_out_len < DHCP_MIN_OPTIONS_LEN) || (options_out_len & 3)) && - 800e70a: e007 b.n 800e71c - (options_out_len < DHCP_OPTIONS_LEN)) { - /* add a fill/padding byte */ - options[options_out_len++] = 0; - 800e70c: 89fb ldrh r3, [r7, #14] - 800e70e: 1c5a adds r2, r3, #1 - 800e710: 81fa strh r2, [r7, #14] - 800e712: 461a mov r2, r3 - 800e714: 68bb ldr r3, [r7, #8] - 800e716: 4413 add r3, r2 - 800e718: 2200 movs r2, #0 - 800e71a: 701a strb r2, [r3, #0] - while (((options_out_len < DHCP_MIN_OPTIONS_LEN) || (options_out_len & 3)) && - 800e71c: 89fb ldrh r3, [r7, #14] - 800e71e: 2b43 cmp r3, #67 ; 0x43 - 800e720: d904 bls.n 800e72c - 800e722: 89fb ldrh r3, [r7, #14] - 800e724: f003 0303 and.w r3, r3, #3 - 800e728: 2b00 cmp r3, #0 - 800e72a: d002 beq.n 800e732 - 800e72c: 89fb ldrh r3, [r7, #14] - 800e72e: 2b43 cmp r3, #67 ; 0x43 - 800e730: d9ec bls.n 800e70c - } - /* shrink the pbuf to the actual content length */ - pbuf_realloc(p_out, (u16_t)(sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + options_out_len)); - 800e732: 89fb ldrh r3, [r7, #14] - 800e734: 33f0 adds r3, #240 ; 0xf0 - 800e736: b29b uxth r3, r3 - 800e738: 4619 mov r1, r3 - 800e73a: 6878 ldr r0, [r7, #4] - 800e73c: f7f7 fdb6 bl 80062ac -} - 800e740: bf00 nop - 800e742: 3710 adds r7, #16 - 800e744: 46bd mov sp, r7 - 800e746: bd80 pop {r7, pc} - -0800e748 : - * @return 1 if DHCP supplied netif->ip_addr (states BOUND or RENEWING), - * 0 otherwise - */ -u8_t -dhcp_supplied_address(const struct netif *netif) -{ - 800e748: b480 push {r7} - 800e74a: b085 sub sp, #20 - 800e74c: af00 add r7, sp, #0 - 800e74e: 6078 str r0, [r7, #4] - if ((netif != NULL) && (netif_dhcp_data(netif) != NULL)) { - 800e750: 687b ldr r3, [r7, #4] - 800e752: 2b00 cmp r3, #0 - 800e754: d017 beq.n 800e786 - 800e756: 687b ldr r3, [r7, #4] - 800e758: 6a5b ldr r3, [r3, #36] ; 0x24 - 800e75a: 2b00 cmp r3, #0 - 800e75c: d013 beq.n 800e786 - struct dhcp *dhcp = netif_dhcp_data(netif); - 800e75e: 687b ldr r3, [r7, #4] - 800e760: 6a5b ldr r3, [r3, #36] ; 0x24 - 800e762: 60fb str r3, [r7, #12] - return (dhcp->state == DHCP_STATE_BOUND) || (dhcp->state == DHCP_STATE_RENEWING) || - 800e764: 68fb ldr r3, [r7, #12] - 800e766: 795b ldrb r3, [r3, #5] - 800e768: 2b0a cmp r3, #10 - 800e76a: d007 beq.n 800e77c - 800e76c: 68fb ldr r3, [r7, #12] - 800e76e: 795b ldrb r3, [r3, #5] - 800e770: 2b05 cmp r3, #5 - 800e772: d003 beq.n 800e77c - (dhcp->state == DHCP_STATE_REBINDING); - 800e774: 68fb ldr r3, [r7, #12] - 800e776: 795b ldrb r3, [r3, #5] - return (dhcp->state == DHCP_STATE_BOUND) || (dhcp->state == DHCP_STATE_RENEWING) || - 800e778: 2b04 cmp r3, #4 - 800e77a: d101 bne.n 800e780 - 800e77c: 2301 movs r3, #1 - 800e77e: e000 b.n 800e782 - 800e780: 2300 movs r3, #0 - 800e782: b2db uxtb r3, r3 - 800e784: e000 b.n 800e788 - } - return 0; - 800e786: 2300 movs r3, #0 -} - 800e788: 4618 mov r0, r3 - 800e78a: 3714 adds r7, #20 - 800e78c: 46bd mov sp, r7 - 800e78e: f85d 7b04 ldr.w r7, [sp], #4 - 800e792: 4770 bx lr - -0800e794 : -#endif /* ARP_QUEUEING */ - -/** Clean up ARP table entries */ -static void -etharp_free_entry(int i) -{ - 800e794: b580 push {r7, lr} - 800e796: b082 sub sp, #8 - 800e798: af00 add r7, sp, #0 - 800e79a: 6078 str r0, [r7, #4] - /* remove from SNMP ARP index tree */ - mib2_remove_arp_entry(arp_table[i].netif, &arp_table[i].ipaddr); - /* and empty packet queue */ - if (arp_table[i].q != NULL) { - 800e79c: 4915 ldr r1, [pc, #84] ; (800e7f4 ) - 800e79e: 687a ldr r2, [r7, #4] - 800e7a0: 4613 mov r3, r2 - 800e7a2: 005b lsls r3, r3, #1 - 800e7a4: 4413 add r3, r2 - 800e7a6: 00db lsls r3, r3, #3 - 800e7a8: 440b add r3, r1 - 800e7aa: 681b ldr r3, [r3, #0] - 800e7ac: 2b00 cmp r3, #0 - 800e7ae: d013 beq.n 800e7d8 - /* remove all queued packets */ - LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_free_entry: freeing entry %"U16_F", packet queue %p.\n", (u16_t)i, (void *)(arp_table[i].q))); - free_etharp_q(arp_table[i].q); - 800e7b0: 4910 ldr r1, [pc, #64] ; (800e7f4 ) - 800e7b2: 687a ldr r2, [r7, #4] - 800e7b4: 4613 mov r3, r2 - 800e7b6: 005b lsls r3, r3, #1 - 800e7b8: 4413 add r3, r2 - 800e7ba: 00db lsls r3, r3, #3 - 800e7bc: 440b add r3, r1 - 800e7be: 681b ldr r3, [r3, #0] - 800e7c0: 4618 mov r0, r3 - 800e7c2: f7f7 fef9 bl 80065b8 - arp_table[i].q = NULL; - 800e7c6: 490b ldr r1, [pc, #44] ; (800e7f4 ) - 800e7c8: 687a ldr r2, [r7, #4] - 800e7ca: 4613 mov r3, r2 - 800e7cc: 005b lsls r3, r3, #1 - 800e7ce: 4413 add r3, r2 - 800e7d0: 00db lsls r3, r3, #3 - 800e7d2: 440b add r3, r1 - 800e7d4: 2200 movs r2, #0 - 800e7d6: 601a str r2, [r3, #0] - } - /* recycle entry for re-use */ - arp_table[i].state = ETHARP_STATE_EMPTY; - 800e7d8: 4906 ldr r1, [pc, #24] ; (800e7f4 ) - 800e7da: 687a ldr r2, [r7, #4] - 800e7dc: 4613 mov r3, r2 - 800e7de: 005b lsls r3, r3, #1 - 800e7e0: 4413 add r3, r2 - 800e7e2: 00db lsls r3, r3, #3 - 800e7e4: 440b add r3, r1 - 800e7e6: 3314 adds r3, #20 - 800e7e8: 2200 movs r2, #0 - 800e7ea: 701a strb r2, [r3, #0] - arp_table[i].ctime = 0; - arp_table[i].netif = NULL; - ip4_addr_set_zero(&arp_table[i].ipaddr); - arp_table[i].ethaddr = ethzero; -#endif /* LWIP_DEBUG */ -} - 800e7ec: bf00 nop - 800e7ee: 3708 adds r7, #8 - 800e7f0: 46bd mov sp, r7 - 800e7f2: bd80 pop {r7, pc} - 800e7f4: 20009a68 .word 0x20009a68 - -0800e7f8 : - * This function should be called every ARP_TMR_INTERVAL milliseconds (1 second), - * in order to expire entries in the ARP table. - */ -void -etharp_tmr(void) -{ - 800e7f8: b580 push {r7, lr} - 800e7fa: b082 sub sp, #8 - 800e7fc: af00 add r7, sp, #0 - int i; - - LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer\n")); - /* remove expired entries from the ARP table */ - for (i = 0; i < ARP_TABLE_SIZE; ++i) { - 800e7fe: 2300 movs r3, #0 - 800e800: 607b str r3, [r7, #4] - 800e802: e096 b.n 800e932 - u8_t state = arp_table[i].state; - 800e804: 494f ldr r1, [pc, #316] ; (800e944 ) - 800e806: 687a ldr r2, [r7, #4] - 800e808: 4613 mov r3, r2 - 800e80a: 005b lsls r3, r3, #1 - 800e80c: 4413 add r3, r2 - 800e80e: 00db lsls r3, r3, #3 - 800e810: 440b add r3, r1 - 800e812: 3314 adds r3, #20 - 800e814: 781b ldrb r3, [r3, #0] - 800e816: 70fb strb r3, [r7, #3] - if (state != ETHARP_STATE_EMPTY - 800e818: 78fb ldrb r3, [r7, #3] - 800e81a: 2b00 cmp r3, #0 - 800e81c: f000 8086 beq.w 800e92c -#if ETHARP_SUPPORT_STATIC_ENTRIES - && (state != ETHARP_STATE_STATIC) -#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ - ) { - arp_table[i].ctime++; - 800e820: 4948 ldr r1, [pc, #288] ; (800e944 ) - 800e822: 687a ldr r2, [r7, #4] - 800e824: 4613 mov r3, r2 - 800e826: 005b lsls r3, r3, #1 - 800e828: 4413 add r3, r2 - 800e82a: 00db lsls r3, r3, #3 - 800e82c: 440b add r3, r1 - 800e82e: 3312 adds r3, #18 - 800e830: 881b ldrh r3, [r3, #0] - 800e832: 3301 adds r3, #1 - 800e834: b298 uxth r0, r3 - 800e836: 4943 ldr r1, [pc, #268] ; (800e944 ) - 800e838: 687a ldr r2, [r7, #4] - 800e83a: 4613 mov r3, r2 - 800e83c: 005b lsls r3, r3, #1 - 800e83e: 4413 add r3, r2 - 800e840: 00db lsls r3, r3, #3 - 800e842: 440b add r3, r1 - 800e844: 3312 adds r3, #18 - 800e846: 4602 mov r2, r0 - 800e848: 801a strh r2, [r3, #0] - if ((arp_table[i].ctime >= ARP_MAXAGE) || - 800e84a: 493e ldr r1, [pc, #248] ; (800e944 ) - 800e84c: 687a ldr r2, [r7, #4] - 800e84e: 4613 mov r3, r2 - 800e850: 005b lsls r3, r3, #1 - 800e852: 4413 add r3, r2 - 800e854: 00db lsls r3, r3, #3 - 800e856: 440b add r3, r1 - 800e858: 3312 adds r3, #18 - 800e85a: 881b ldrh r3, [r3, #0] - 800e85c: f5b3 7f96 cmp.w r3, #300 ; 0x12c - 800e860: d215 bcs.n 800e88e - ((arp_table[i].state == ETHARP_STATE_PENDING) && - 800e862: 4938 ldr r1, [pc, #224] ; (800e944 ) - 800e864: 687a ldr r2, [r7, #4] - 800e866: 4613 mov r3, r2 - 800e868: 005b lsls r3, r3, #1 - 800e86a: 4413 add r3, r2 - 800e86c: 00db lsls r3, r3, #3 - 800e86e: 440b add r3, r1 - 800e870: 3314 adds r3, #20 - 800e872: 781b ldrb r3, [r3, #0] - if ((arp_table[i].ctime >= ARP_MAXAGE) || - 800e874: 2b01 cmp r3, #1 - 800e876: d10e bne.n 800e896 - (arp_table[i].ctime >= ARP_MAXPENDING))) { - 800e878: 4932 ldr r1, [pc, #200] ; (800e944 ) - 800e87a: 687a ldr r2, [r7, #4] - 800e87c: 4613 mov r3, r2 - 800e87e: 005b lsls r3, r3, #1 - 800e880: 4413 add r3, r2 - 800e882: 00db lsls r3, r3, #3 - 800e884: 440b add r3, r1 - 800e886: 3312 adds r3, #18 - 800e888: 881b ldrh r3, [r3, #0] - ((arp_table[i].state == ETHARP_STATE_PENDING) && - 800e88a: 2b04 cmp r3, #4 - 800e88c: d903 bls.n 800e896 - /* pending or stable entry has become old! */ - LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired %s entry %d.\n", - arp_table[i].state >= ETHARP_STATE_STABLE ? "stable" : "pending", i)); - /* clean up entries that have just been expired */ - etharp_free_entry(i); - 800e88e: 6878 ldr r0, [r7, #4] - 800e890: f7ff ff80 bl 800e794 - 800e894: e04a b.n 800e92c - } else if (arp_table[i].state == ETHARP_STATE_STABLE_REREQUESTING_1) { - 800e896: 492b ldr r1, [pc, #172] ; (800e944 ) - 800e898: 687a ldr r2, [r7, #4] - 800e89a: 4613 mov r3, r2 - 800e89c: 005b lsls r3, r3, #1 - 800e89e: 4413 add r3, r2 - 800e8a0: 00db lsls r3, r3, #3 - 800e8a2: 440b add r3, r1 - 800e8a4: 3314 adds r3, #20 - 800e8a6: 781b ldrb r3, [r3, #0] - 800e8a8: 2b03 cmp r3, #3 - 800e8aa: d10a bne.n 800e8c2 - /* Don't send more than one request every 2 seconds. */ - arp_table[i].state = ETHARP_STATE_STABLE_REREQUESTING_2; - 800e8ac: 4925 ldr r1, [pc, #148] ; (800e944 ) - 800e8ae: 687a ldr r2, [r7, #4] - 800e8b0: 4613 mov r3, r2 - 800e8b2: 005b lsls r3, r3, #1 - 800e8b4: 4413 add r3, r2 - 800e8b6: 00db lsls r3, r3, #3 - 800e8b8: 440b add r3, r1 - 800e8ba: 3314 adds r3, #20 - 800e8bc: 2204 movs r2, #4 - 800e8be: 701a strb r2, [r3, #0] - 800e8c0: e034 b.n 800e92c - } else if (arp_table[i].state == ETHARP_STATE_STABLE_REREQUESTING_2) { - 800e8c2: 4920 ldr r1, [pc, #128] ; (800e944 ) - 800e8c4: 687a ldr r2, [r7, #4] - 800e8c6: 4613 mov r3, r2 - 800e8c8: 005b lsls r3, r3, #1 - 800e8ca: 4413 add r3, r2 - 800e8cc: 00db lsls r3, r3, #3 - 800e8ce: 440b add r3, r1 - 800e8d0: 3314 adds r3, #20 - 800e8d2: 781b ldrb r3, [r3, #0] - 800e8d4: 2b04 cmp r3, #4 - 800e8d6: d10a bne.n 800e8ee - /* Reset state to stable, so that the next transmitted packet will - re-send an ARP request. */ - arp_table[i].state = ETHARP_STATE_STABLE; - 800e8d8: 491a ldr r1, [pc, #104] ; (800e944 ) - 800e8da: 687a ldr r2, [r7, #4] - 800e8dc: 4613 mov r3, r2 - 800e8de: 005b lsls r3, r3, #1 - 800e8e0: 4413 add r3, r2 - 800e8e2: 00db lsls r3, r3, #3 - 800e8e4: 440b add r3, r1 - 800e8e6: 3314 adds r3, #20 - 800e8e8: 2202 movs r2, #2 - 800e8ea: 701a strb r2, [r3, #0] - 800e8ec: e01e b.n 800e92c - } else if (arp_table[i].state == ETHARP_STATE_PENDING) { - 800e8ee: 4915 ldr r1, [pc, #84] ; (800e944 ) - 800e8f0: 687a ldr r2, [r7, #4] - 800e8f2: 4613 mov r3, r2 - 800e8f4: 005b lsls r3, r3, #1 - 800e8f6: 4413 add r3, r2 - 800e8f8: 00db lsls r3, r3, #3 - 800e8fa: 440b add r3, r1 - 800e8fc: 3314 adds r3, #20 - 800e8fe: 781b ldrb r3, [r3, #0] - 800e900: 2b01 cmp r3, #1 - 800e902: d113 bne.n 800e92c - /* still pending, resend an ARP query */ - etharp_request(arp_table[i].netif, &arp_table[i].ipaddr); - 800e904: 490f ldr r1, [pc, #60] ; (800e944 ) - 800e906: 687a ldr r2, [r7, #4] - 800e908: 4613 mov r3, r2 - 800e90a: 005b lsls r3, r3, #1 - 800e90c: 4413 add r3, r2 - 800e90e: 00db lsls r3, r3, #3 - 800e910: 440b add r3, r1 - 800e912: 3308 adds r3, #8 - 800e914: 6818 ldr r0, [r3, #0] - 800e916: 687a ldr r2, [r7, #4] - 800e918: 4613 mov r3, r2 - 800e91a: 005b lsls r3, r3, #1 - 800e91c: 4413 add r3, r2 - 800e91e: 00db lsls r3, r3, #3 - 800e920: 4a08 ldr r2, [pc, #32] ; (800e944 ) - 800e922: 4413 add r3, r2 - 800e924: 3304 adds r3, #4 - 800e926: 4619 mov r1, r3 - 800e928: f000 fe72 bl 800f610 - for (i = 0; i < ARP_TABLE_SIZE; ++i) { - 800e92c: 687b ldr r3, [r7, #4] - 800e92e: 3301 adds r3, #1 - 800e930: 607b str r3, [r7, #4] - 800e932: 687b ldr r3, [r7, #4] - 800e934: 2b09 cmp r3, #9 - 800e936: f77f af65 ble.w 800e804 - } - } - } -} - 800e93a: bf00 nop - 800e93c: bf00 nop - 800e93e: 3708 adds r7, #8 - 800e940: 46bd mov sp, r7 - 800e942: bd80 pop {r7, pc} - 800e944: 20009a68 .word 0x20009a68 - -0800e948 : - * @return The ARP entry index that matched or is created, ERR_MEM if no - * entry is found or could be recycled. - */ -static s16_t -etharp_find_entry(const ip4_addr_t *ipaddr, u8_t flags, struct netif *netif) -{ - 800e948: b580 push {r7, lr} - 800e94a: b08a sub sp, #40 ; 0x28 - 800e94c: af00 add r7, sp, #0 - 800e94e: 60f8 str r0, [r7, #12] - 800e950: 460b mov r3, r1 - 800e952: 607a str r2, [r7, #4] - 800e954: 72fb strb r3, [r7, #11] - s16_t old_pending = ARP_TABLE_SIZE, old_stable = ARP_TABLE_SIZE; - 800e956: 230a movs r3, #10 - 800e958: 84fb strh r3, [r7, #38] ; 0x26 - 800e95a: 230a movs r3, #10 - 800e95c: 84bb strh r3, [r7, #36] ; 0x24 - s16_t empty = ARP_TABLE_SIZE; - 800e95e: 230a movs r3, #10 - 800e960: 847b strh r3, [r7, #34] ; 0x22 - s16_t i = 0; - 800e962: 2300 movs r3, #0 - 800e964: 843b strh r3, [r7, #32] - /* oldest entry with packets on queue */ - s16_t old_queue = ARP_TABLE_SIZE; - 800e966: 230a movs r3, #10 - 800e968: 83fb strh r3, [r7, #30] - /* its age */ - u16_t age_queue = 0, age_pending = 0, age_stable = 0; - 800e96a: 2300 movs r3, #0 - 800e96c: 83bb strh r3, [r7, #28] - 800e96e: 2300 movs r3, #0 - 800e970: 837b strh r3, [r7, #26] - 800e972: 2300 movs r3, #0 - 800e974: 833b strh r3, [r7, #24] - * 4) remember the oldest pending entry with queued packets (if any) - * 5) search for a matching IP entry, either pending or stable - * until 5 matches, or all entries are searched for. - */ - - for (i = 0; i < ARP_TABLE_SIZE; ++i) { - 800e976: 2300 movs r3, #0 - 800e978: 843b strh r3, [r7, #32] - 800e97a: e0ae b.n 800eada - u8_t state = arp_table[i].state; - 800e97c: f9b7 2020 ldrsh.w r2, [r7, #32] - 800e980: 49a6 ldr r1, [pc, #664] ; (800ec1c ) - 800e982: 4613 mov r3, r2 - 800e984: 005b lsls r3, r3, #1 - 800e986: 4413 add r3, r2 - 800e988: 00db lsls r3, r3, #3 - 800e98a: 440b add r3, r1 - 800e98c: 3314 adds r3, #20 - 800e98e: 781b ldrb r3, [r3, #0] - 800e990: 75fb strb r3, [r7, #23] - /* no empty entry found yet and now we do find one? */ - if ((empty == ARP_TABLE_SIZE) && (state == ETHARP_STATE_EMPTY)) { - 800e992: f9b7 3022 ldrsh.w r3, [r7, #34] ; 0x22 - 800e996: 2b0a cmp r3, #10 - 800e998: d105 bne.n 800e9a6 - 800e99a: 7dfb ldrb r3, [r7, #23] - 800e99c: 2b00 cmp r3, #0 - 800e99e: d102 bne.n 800e9a6 - LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_find_entry: found empty entry %d\n", (int)i)); - /* remember first empty entry */ - empty = i; - 800e9a0: 8c3b ldrh r3, [r7, #32] - 800e9a2: 847b strh r3, [r7, #34] ; 0x22 - 800e9a4: e095 b.n 800ead2 - } else if (state != ETHARP_STATE_EMPTY) { - 800e9a6: 7dfb ldrb r3, [r7, #23] - 800e9a8: 2b00 cmp r3, #0 - 800e9aa: f000 8092 beq.w 800ead2 - LWIP_ASSERT("state == ETHARP_STATE_PENDING || state >= ETHARP_STATE_STABLE", - 800e9ae: 7dfb ldrb r3, [r7, #23] - 800e9b0: 2b01 cmp r3, #1 - 800e9b2: d009 beq.n 800e9c8 - 800e9b4: 7dfb ldrb r3, [r7, #23] - 800e9b6: 2b01 cmp r3, #1 - 800e9b8: d806 bhi.n 800e9c8 - 800e9ba: 4b99 ldr r3, [pc, #612] ; (800ec20 ) - 800e9bc: f240 1223 movw r2, #291 ; 0x123 - 800e9c0: 4998 ldr r1, [pc, #608] ; (800ec24 ) - 800e9c2: 4899 ldr r0, [pc, #612] ; (800ec28 ) - 800e9c4: f002 fb70 bl 80110a8 - state == ETHARP_STATE_PENDING || state >= ETHARP_STATE_STABLE); - /* if given, does IP address match IP address in ARP entry? */ - if (ipaddr && ip4_addr_cmp(ipaddr, &arp_table[i].ipaddr) - 800e9c8: 68fb ldr r3, [r7, #12] - 800e9ca: 2b00 cmp r3, #0 - 800e9cc: d020 beq.n 800ea10 - 800e9ce: 68fb ldr r3, [r7, #12] - 800e9d0: 6819 ldr r1, [r3, #0] - 800e9d2: f9b7 2020 ldrsh.w r2, [r7, #32] - 800e9d6: 4891 ldr r0, [pc, #580] ; (800ec1c ) - 800e9d8: 4613 mov r3, r2 - 800e9da: 005b lsls r3, r3, #1 - 800e9dc: 4413 add r3, r2 - 800e9de: 00db lsls r3, r3, #3 - 800e9e0: 4403 add r3, r0 - 800e9e2: 3304 adds r3, #4 - 800e9e4: 681b ldr r3, [r3, #0] - 800e9e6: 4299 cmp r1, r3 - 800e9e8: d112 bne.n 800ea10 -#if ETHARP_TABLE_MATCH_NETIF - && ((netif == NULL) || (netif == arp_table[i].netif)) - 800e9ea: 687b ldr r3, [r7, #4] - 800e9ec: 2b00 cmp r3, #0 - 800e9ee: d00c beq.n 800ea0a - 800e9f0: f9b7 2020 ldrsh.w r2, [r7, #32] - 800e9f4: 4989 ldr r1, [pc, #548] ; (800ec1c ) - 800e9f6: 4613 mov r3, r2 - 800e9f8: 005b lsls r3, r3, #1 - 800e9fa: 4413 add r3, r2 - 800e9fc: 00db lsls r3, r3, #3 - 800e9fe: 440b add r3, r1 - 800ea00: 3308 adds r3, #8 - 800ea02: 681b ldr r3, [r3, #0] - 800ea04: 687a ldr r2, [r7, #4] - 800ea06: 429a cmp r2, r3 - 800ea08: d102 bne.n 800ea10 -#endif /* ETHARP_TABLE_MATCH_NETIF */ - ) { - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: found matching entry %d\n", (int)i)); - /* found exact IP address match, simply bail out */ - return i; - 800ea0a: f9b7 3020 ldrsh.w r3, [r7, #32] - 800ea0e: e100 b.n 800ec12 - } - /* pending entry? */ - if (state == ETHARP_STATE_PENDING) { - 800ea10: 7dfb ldrb r3, [r7, #23] - 800ea12: 2b01 cmp r3, #1 - 800ea14: d140 bne.n 800ea98 - /* pending with queued packets? */ - if (arp_table[i].q != NULL) { - 800ea16: f9b7 2020 ldrsh.w r2, [r7, #32] - 800ea1a: 4980 ldr r1, [pc, #512] ; (800ec1c ) - 800ea1c: 4613 mov r3, r2 - 800ea1e: 005b lsls r3, r3, #1 - 800ea20: 4413 add r3, r2 - 800ea22: 00db lsls r3, r3, #3 - 800ea24: 440b add r3, r1 - 800ea26: 681b ldr r3, [r3, #0] - 800ea28: 2b00 cmp r3, #0 - 800ea2a: d01a beq.n 800ea62 - if (arp_table[i].ctime >= age_queue) { - 800ea2c: f9b7 2020 ldrsh.w r2, [r7, #32] - 800ea30: 497a ldr r1, [pc, #488] ; (800ec1c ) - 800ea32: 4613 mov r3, r2 - 800ea34: 005b lsls r3, r3, #1 - 800ea36: 4413 add r3, r2 - 800ea38: 00db lsls r3, r3, #3 - 800ea3a: 440b add r3, r1 - 800ea3c: 3312 adds r3, #18 - 800ea3e: 881b ldrh r3, [r3, #0] - 800ea40: 8bba ldrh r2, [r7, #28] - 800ea42: 429a cmp r2, r3 - 800ea44: d845 bhi.n 800ead2 - old_queue = i; - 800ea46: 8c3b ldrh r3, [r7, #32] - 800ea48: 83fb strh r3, [r7, #30] - age_queue = arp_table[i].ctime; - 800ea4a: f9b7 2020 ldrsh.w r2, [r7, #32] - 800ea4e: 4973 ldr r1, [pc, #460] ; (800ec1c ) - 800ea50: 4613 mov r3, r2 - 800ea52: 005b lsls r3, r3, #1 - 800ea54: 4413 add r3, r2 - 800ea56: 00db lsls r3, r3, #3 - 800ea58: 440b add r3, r1 - 800ea5a: 3312 adds r3, #18 - 800ea5c: 881b ldrh r3, [r3, #0] - 800ea5e: 83bb strh r3, [r7, #28] - 800ea60: e037 b.n 800ead2 - } - } else - /* pending without queued packets? */ - { - if (arp_table[i].ctime >= age_pending) { - 800ea62: f9b7 2020 ldrsh.w r2, [r7, #32] - 800ea66: 496d ldr r1, [pc, #436] ; (800ec1c ) - 800ea68: 4613 mov r3, r2 - 800ea6a: 005b lsls r3, r3, #1 - 800ea6c: 4413 add r3, r2 - 800ea6e: 00db lsls r3, r3, #3 - 800ea70: 440b add r3, r1 - 800ea72: 3312 adds r3, #18 - 800ea74: 881b ldrh r3, [r3, #0] - 800ea76: 8b7a ldrh r2, [r7, #26] - 800ea78: 429a cmp r2, r3 - 800ea7a: d82a bhi.n 800ead2 - old_pending = i; - 800ea7c: 8c3b ldrh r3, [r7, #32] - 800ea7e: 84fb strh r3, [r7, #38] ; 0x26 - age_pending = arp_table[i].ctime; - 800ea80: f9b7 2020 ldrsh.w r2, [r7, #32] - 800ea84: 4965 ldr r1, [pc, #404] ; (800ec1c ) - 800ea86: 4613 mov r3, r2 - 800ea88: 005b lsls r3, r3, #1 - 800ea8a: 4413 add r3, r2 - 800ea8c: 00db lsls r3, r3, #3 - 800ea8e: 440b add r3, r1 - 800ea90: 3312 adds r3, #18 - 800ea92: 881b ldrh r3, [r3, #0] - 800ea94: 837b strh r3, [r7, #26] - 800ea96: e01c b.n 800ead2 - } - } - /* stable entry? */ - } else if (state >= ETHARP_STATE_STABLE) { - 800ea98: 7dfb ldrb r3, [r7, #23] - 800ea9a: 2b01 cmp r3, #1 - 800ea9c: d919 bls.n 800ead2 - /* don't record old_stable for static entries since they never expire */ - if (state < ETHARP_STATE_STATIC) -#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ - { - /* remember entry with oldest stable entry in oldest, its age in maxtime */ - if (arp_table[i].ctime >= age_stable) { - 800ea9e: f9b7 2020 ldrsh.w r2, [r7, #32] - 800eaa2: 495e ldr r1, [pc, #376] ; (800ec1c ) - 800eaa4: 4613 mov r3, r2 - 800eaa6: 005b lsls r3, r3, #1 - 800eaa8: 4413 add r3, r2 - 800eaaa: 00db lsls r3, r3, #3 - 800eaac: 440b add r3, r1 - 800eaae: 3312 adds r3, #18 - 800eab0: 881b ldrh r3, [r3, #0] - 800eab2: 8b3a ldrh r2, [r7, #24] - 800eab4: 429a cmp r2, r3 - 800eab6: d80c bhi.n 800ead2 - old_stable = i; - 800eab8: 8c3b ldrh r3, [r7, #32] - 800eaba: 84bb strh r3, [r7, #36] ; 0x24 - age_stable = arp_table[i].ctime; - 800eabc: f9b7 2020 ldrsh.w r2, [r7, #32] - 800eac0: 4956 ldr r1, [pc, #344] ; (800ec1c ) - 800eac2: 4613 mov r3, r2 - 800eac4: 005b lsls r3, r3, #1 - 800eac6: 4413 add r3, r2 - 800eac8: 00db lsls r3, r3, #3 - 800eaca: 440b add r3, r1 - 800eacc: 3312 adds r3, #18 - 800eace: 881b ldrh r3, [r3, #0] - 800ead0: 833b strh r3, [r7, #24] - for (i = 0; i < ARP_TABLE_SIZE; ++i) { - 800ead2: 8c3b ldrh r3, [r7, #32] - 800ead4: 3301 adds r3, #1 - 800ead6: b29b uxth r3, r3 - 800ead8: 843b strh r3, [r7, #32] - 800eada: f9b7 3020 ldrsh.w r3, [r7, #32] - 800eade: 2b09 cmp r3, #9 - 800eae0: f77f af4c ble.w 800e97c - } - } - /* { we have no match } => try to create a new entry */ - - /* don't create new entry, only search? */ - if (((flags & ETHARP_FLAG_FIND_ONLY) != 0) || - 800eae4: 7afb ldrb r3, [r7, #11] - 800eae6: f003 0302 and.w r3, r3, #2 - 800eaea: 2b00 cmp r3, #0 - 800eaec: d108 bne.n 800eb00 - 800eaee: f9b7 3022 ldrsh.w r3, [r7, #34] ; 0x22 - 800eaf2: 2b0a cmp r3, #10 - 800eaf4: d107 bne.n 800eb06 - /* or no empty entry found and not allowed to recycle? */ - ((empty == ARP_TABLE_SIZE) && ((flags & ETHARP_FLAG_TRY_HARD) == 0))) { - 800eaf6: 7afb ldrb r3, [r7, #11] - 800eaf8: f003 0301 and.w r3, r3, #1 - 800eafc: 2b00 cmp r3, #0 - 800eafe: d102 bne.n 800eb06 - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: no empty entry found and not allowed to recycle\n")); - return (s16_t)ERR_MEM; - 800eb00: f04f 33ff mov.w r3, #4294967295 - 800eb04: e085 b.n 800ec12 - * - * { ETHARP_FLAG_TRY_HARD is set at this point } - */ - - /* 1) empty entry available? */ - if (empty < ARP_TABLE_SIZE) { - 800eb06: f9b7 3022 ldrsh.w r3, [r7, #34] ; 0x22 - 800eb0a: 2b09 cmp r3, #9 - 800eb0c: dc02 bgt.n 800eb14 - i = empty; - 800eb0e: 8c7b ldrh r3, [r7, #34] ; 0x22 - 800eb10: 843b strh r3, [r7, #32] - 800eb12: e039 b.n 800eb88 - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting empty entry %d\n", (int)i)); - } else { - /* 2) found recyclable stable entry? */ - if (old_stable < ARP_TABLE_SIZE) { - 800eb14: f9b7 3024 ldrsh.w r3, [r7, #36] ; 0x24 - 800eb18: 2b09 cmp r3, #9 - 800eb1a: dc14 bgt.n 800eb46 - /* recycle oldest stable*/ - i = old_stable; - 800eb1c: 8cbb ldrh r3, [r7, #36] ; 0x24 - 800eb1e: 843b strh r3, [r7, #32] - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting oldest stable entry %d\n", (int)i)); - /* no queued packets should exist on stable entries */ - LWIP_ASSERT("arp_table[i].q == NULL", arp_table[i].q == NULL); - 800eb20: f9b7 2020 ldrsh.w r2, [r7, #32] - 800eb24: 493d ldr r1, [pc, #244] ; (800ec1c ) - 800eb26: 4613 mov r3, r2 - 800eb28: 005b lsls r3, r3, #1 - 800eb2a: 4413 add r3, r2 - 800eb2c: 00db lsls r3, r3, #3 - 800eb2e: 440b add r3, r1 - 800eb30: 681b ldr r3, [r3, #0] - 800eb32: 2b00 cmp r3, #0 - 800eb34: d018 beq.n 800eb68 - 800eb36: 4b3a ldr r3, [pc, #232] ; (800ec20 ) - 800eb38: f240 126d movw r2, #365 ; 0x16d - 800eb3c: 493b ldr r1, [pc, #236] ; (800ec2c ) - 800eb3e: 483a ldr r0, [pc, #232] ; (800ec28 ) - 800eb40: f002 fab2 bl 80110a8 - 800eb44: e010 b.n 800eb68 - /* 3) found recyclable pending entry without queued packets? */ - } else if (old_pending < ARP_TABLE_SIZE) { - 800eb46: f9b7 3026 ldrsh.w r3, [r7, #38] ; 0x26 - 800eb4a: 2b09 cmp r3, #9 - 800eb4c: dc02 bgt.n 800eb54 - /* recycle oldest pending */ - i = old_pending; - 800eb4e: 8cfb ldrh r3, [r7, #38] ; 0x26 - 800eb50: 843b strh r3, [r7, #32] - 800eb52: e009 b.n 800eb68 - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting oldest pending entry %d (without queue)\n", (int)i)); - /* 4) found recyclable pending entry with queued packets? */ - } else if (old_queue < ARP_TABLE_SIZE) { - 800eb54: f9b7 301e ldrsh.w r3, [r7, #30] - 800eb58: 2b09 cmp r3, #9 - 800eb5a: dc02 bgt.n 800eb62 - /* recycle oldest pending (queued packets are free in etharp_free_entry) */ - i = old_queue; - 800eb5c: 8bfb ldrh r3, [r7, #30] - 800eb5e: 843b strh r3, [r7, #32] - 800eb60: e002 b.n 800eb68 - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting oldest pending entry %d, freeing packet queue %p\n", (int)i, (void *)(arp_table[i].q))); - /* no empty or recyclable entries found */ - } else { - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: no empty or recyclable entries found\n")); - return (s16_t)ERR_MEM; - 800eb62: f04f 33ff mov.w r3, #4294967295 - 800eb66: e054 b.n 800ec12 - } - - /* { empty or recyclable entry found } */ - LWIP_ASSERT("i < ARP_TABLE_SIZE", i < ARP_TABLE_SIZE); - 800eb68: f9b7 3020 ldrsh.w r3, [r7, #32] - 800eb6c: 2b09 cmp r3, #9 - 800eb6e: dd06 ble.n 800eb7e - 800eb70: 4b2b ldr r3, [pc, #172] ; (800ec20 ) - 800eb72: f240 127f movw r2, #383 ; 0x17f - 800eb76: 492e ldr r1, [pc, #184] ; (800ec30 ) - 800eb78: 482b ldr r0, [pc, #172] ; (800ec28 ) - 800eb7a: f002 fa95 bl 80110a8 - etharp_free_entry(i); - 800eb7e: f9b7 3020 ldrsh.w r3, [r7, #32] - 800eb82: 4618 mov r0, r3 - 800eb84: f7ff fe06 bl 800e794 - } - - LWIP_ASSERT("i < ARP_TABLE_SIZE", i < ARP_TABLE_SIZE); - 800eb88: f9b7 3020 ldrsh.w r3, [r7, #32] - 800eb8c: 2b09 cmp r3, #9 - 800eb8e: dd06 ble.n 800eb9e - 800eb90: 4b23 ldr r3, [pc, #140] ; (800ec20 ) - 800eb92: f240 1283 movw r2, #387 ; 0x183 - 800eb96: 4926 ldr r1, [pc, #152] ; (800ec30 ) - 800eb98: 4823 ldr r0, [pc, #140] ; (800ec28 ) - 800eb9a: f002 fa85 bl 80110a8 - LWIP_ASSERT("arp_table[i].state == ETHARP_STATE_EMPTY", - 800eb9e: f9b7 2020 ldrsh.w r2, [r7, #32] - 800eba2: 491e ldr r1, [pc, #120] ; (800ec1c ) - 800eba4: 4613 mov r3, r2 - 800eba6: 005b lsls r3, r3, #1 - 800eba8: 4413 add r3, r2 - 800ebaa: 00db lsls r3, r3, #3 - 800ebac: 440b add r3, r1 - 800ebae: 3314 adds r3, #20 - 800ebb0: 781b ldrb r3, [r3, #0] - 800ebb2: 2b00 cmp r3, #0 - 800ebb4: d006 beq.n 800ebc4 - 800ebb6: 4b1a ldr r3, [pc, #104] ; (800ec20 ) - 800ebb8: f44f 72c2 mov.w r2, #388 ; 0x184 - 800ebbc: 491d ldr r1, [pc, #116] ; (800ec34 ) - 800ebbe: 481a ldr r0, [pc, #104] ; (800ec28 ) - 800ebc0: f002 fa72 bl 80110a8 - arp_table[i].state == ETHARP_STATE_EMPTY); - - /* IP address given? */ - if (ipaddr != NULL) { - 800ebc4: 68fb ldr r3, [r7, #12] - 800ebc6: 2b00 cmp r3, #0 - 800ebc8: d00b beq.n 800ebe2 - /* set IP address */ - ip4_addr_copy(arp_table[i].ipaddr, *ipaddr); - 800ebca: f9b7 2020 ldrsh.w r2, [r7, #32] - 800ebce: 68fb ldr r3, [r7, #12] - 800ebd0: 6819 ldr r1, [r3, #0] - 800ebd2: 4812 ldr r0, [pc, #72] ; (800ec1c ) - 800ebd4: 4613 mov r3, r2 - 800ebd6: 005b lsls r3, r3, #1 - 800ebd8: 4413 add r3, r2 - 800ebda: 00db lsls r3, r3, #3 - 800ebdc: 4403 add r3, r0 - 800ebde: 3304 adds r3, #4 - 800ebe0: 6019 str r1, [r3, #0] - } - arp_table[i].ctime = 0; - 800ebe2: f9b7 2020 ldrsh.w r2, [r7, #32] - 800ebe6: 490d ldr r1, [pc, #52] ; (800ec1c ) - 800ebe8: 4613 mov r3, r2 - 800ebea: 005b lsls r3, r3, #1 - 800ebec: 4413 add r3, r2 - 800ebee: 00db lsls r3, r3, #3 - 800ebf0: 440b add r3, r1 - 800ebf2: 3312 adds r3, #18 - 800ebf4: 2200 movs r2, #0 - 800ebf6: 801a strh r2, [r3, #0] -#if ETHARP_TABLE_MATCH_NETIF - arp_table[i].netif = netif; - 800ebf8: f9b7 2020 ldrsh.w r2, [r7, #32] - 800ebfc: 4907 ldr r1, [pc, #28] ; (800ec1c ) - 800ebfe: 4613 mov r3, r2 - 800ec00: 005b lsls r3, r3, #1 - 800ec02: 4413 add r3, r2 - 800ec04: 00db lsls r3, r3, #3 - 800ec06: 440b add r3, r1 - 800ec08: 3308 adds r3, #8 - 800ec0a: 687a ldr r2, [r7, #4] - 800ec0c: 601a str r2, [r3, #0] -#endif /* ETHARP_TABLE_MATCH_NETIF */ - return (s16_t)i; - 800ec0e: f9b7 3020 ldrsh.w r3, [r7, #32] -} - 800ec12: 4618 mov r0, r3 - 800ec14: 3728 adds r7, #40 ; 0x28 - 800ec16: 46bd mov sp, r7 - 800ec18: bd80 pop {r7, pc} - 800ec1a: bf00 nop - 800ec1c: 20009a68 .word 0x20009a68 - 800ec20: 0801829c .word 0x0801829c - 800ec24: 080182d4 .word 0x080182d4 - 800ec28: 08018314 .word 0x08018314 - 800ec2c: 0801833c .word 0x0801833c - 800ec30: 08018354 .word 0x08018354 - 800ec34: 08018368 .word 0x08018368 - -0800ec38 : - * - * @see pbuf_free() - */ -static err_t -etharp_update_arp_entry(struct netif *netif, const ip4_addr_t *ipaddr, struct eth_addr *ethaddr, u8_t flags) -{ - 800ec38: b580 push {r7, lr} - 800ec3a: b088 sub sp, #32 - 800ec3c: af02 add r7, sp, #8 - 800ec3e: 60f8 str r0, [r7, #12] - 800ec40: 60b9 str r1, [r7, #8] - 800ec42: 607a str r2, [r7, #4] - 800ec44: 70fb strb r3, [r7, #3] - s16_t i; - LWIP_ASSERT("netif->hwaddr_len == ETH_HWADDR_LEN", netif->hwaddr_len == ETH_HWADDR_LEN); - 800ec46: 68fb ldr r3, [r7, #12] - 800ec48: f893 3030 ldrb.w r3, [r3, #48] ; 0x30 - 800ec4c: 2b06 cmp r3, #6 - 800ec4e: d006 beq.n 800ec5e - 800ec50: 4b48 ldr r3, [pc, #288] ; (800ed74 ) - 800ec52: f240 12a9 movw r2, #425 ; 0x1a9 - 800ec56: 4948 ldr r1, [pc, #288] ; (800ed78 ) - 800ec58: 4848 ldr r0, [pc, #288] ; (800ed7c ) - 800ec5a: f002 fa25 bl 80110a8 - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F" - %02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F"\n", - ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr), - (u16_t)ethaddr->addr[0], (u16_t)ethaddr->addr[1], (u16_t)ethaddr->addr[2], - (u16_t)ethaddr->addr[3], (u16_t)ethaddr->addr[4], (u16_t)ethaddr->addr[5])); - /* non-unicast address? */ - if (ip4_addr_isany(ipaddr) || - 800ec5e: 68bb ldr r3, [r7, #8] - 800ec60: 2b00 cmp r3, #0 - 800ec62: d012 beq.n 800ec8a - 800ec64: 68bb ldr r3, [r7, #8] - 800ec66: 681b ldr r3, [r3, #0] - 800ec68: 2b00 cmp r3, #0 - 800ec6a: d00e beq.n 800ec8a - ip4_addr_isbroadcast(ipaddr, netif) || - 800ec6c: 68bb ldr r3, [r7, #8] - 800ec6e: 681b ldr r3, [r3, #0] - 800ec70: 68f9 ldr r1, [r7, #12] - 800ec72: 4618 mov r0, r3 - 800ec74: f001 f920 bl 800feb8 - 800ec78: 4603 mov r3, r0 - if (ip4_addr_isany(ipaddr) || - 800ec7a: 2b00 cmp r3, #0 - 800ec7c: d105 bne.n 800ec8a - ip4_addr_ismulticast(ipaddr)) { - 800ec7e: 68bb ldr r3, [r7, #8] - 800ec80: 681b ldr r3, [r3, #0] - 800ec82: f003 03f0 and.w r3, r3, #240 ; 0xf0 - ip4_addr_isbroadcast(ipaddr, netif) || - 800ec86: 2be0 cmp r3, #224 ; 0xe0 - 800ec88: d102 bne.n 800ec90 - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: will not add non-unicast IP address to ARP cache\n")); - return ERR_ARG; - 800ec8a: f06f 030f mvn.w r3, #15 - 800ec8e: e06c b.n 800ed6a - } - /* find or create ARP entry */ - i = etharp_find_entry(ipaddr, flags, netif); - 800ec90: 78fb ldrb r3, [r7, #3] - 800ec92: 68fa ldr r2, [r7, #12] - 800ec94: 4619 mov r1, r3 - 800ec96: 68b8 ldr r0, [r7, #8] - 800ec98: f7ff fe56 bl 800e948 - 800ec9c: 4603 mov r3, r0 - 800ec9e: 82fb strh r3, [r7, #22] - /* bail out if no entry could be found */ - if (i < 0) { - 800eca0: f9b7 3016 ldrsh.w r3, [r7, #22] - 800eca4: 2b00 cmp r3, #0 - 800eca6: da02 bge.n 800ecae - return (err_t)i; - 800eca8: 8afb ldrh r3, [r7, #22] - 800ecaa: b25b sxtb r3, r3 - 800ecac: e05d b.n 800ed6a - return ERR_VAL; - } else -#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ - { - /* mark it stable */ - arp_table[i].state = ETHARP_STATE_STABLE; - 800ecae: f9b7 2016 ldrsh.w r2, [r7, #22] - 800ecb2: 4933 ldr r1, [pc, #204] ; (800ed80 ) - 800ecb4: 4613 mov r3, r2 - 800ecb6: 005b lsls r3, r3, #1 - 800ecb8: 4413 add r3, r2 - 800ecba: 00db lsls r3, r3, #3 - 800ecbc: 440b add r3, r1 - 800ecbe: 3314 adds r3, #20 - 800ecc0: 2202 movs r2, #2 - 800ecc2: 701a strb r2, [r3, #0] - } - - /* record network interface */ - arp_table[i].netif = netif; - 800ecc4: f9b7 2016 ldrsh.w r2, [r7, #22] - 800ecc8: 492d ldr r1, [pc, #180] ; (800ed80 ) - 800ecca: 4613 mov r3, r2 - 800eccc: 005b lsls r3, r3, #1 - 800ecce: 4413 add r3, r2 - 800ecd0: 00db lsls r3, r3, #3 - 800ecd2: 440b add r3, r1 - 800ecd4: 3308 adds r3, #8 - 800ecd6: 68fa ldr r2, [r7, #12] - 800ecd8: 601a str r2, [r3, #0] - /* insert in SNMP ARP index tree */ - mib2_add_arp_entry(netif, &arp_table[i].ipaddr); - - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: updating stable entry %"S16_F"\n", i)); - /* update address */ - SMEMCPY(&arp_table[i].ethaddr, ethaddr, ETH_HWADDR_LEN); - 800ecda: f9b7 2016 ldrsh.w r2, [r7, #22] - 800ecde: 4613 mov r3, r2 - 800ece0: 005b lsls r3, r3, #1 - 800ece2: 4413 add r3, r2 - 800ece4: 00db lsls r3, r3, #3 - 800ece6: 3308 adds r3, #8 - 800ece8: 4a25 ldr r2, [pc, #148] ; (800ed80 ) - 800ecea: 4413 add r3, r2 - 800ecec: 3304 adds r3, #4 - 800ecee: 2206 movs r2, #6 - 800ecf0: 6879 ldr r1, [r7, #4] - 800ecf2: 4618 mov r0, r3 - 800ecf4: f002 f9a8 bl 8011048 - /* reset time stamp */ - arp_table[i].ctime = 0; - 800ecf8: f9b7 2016 ldrsh.w r2, [r7, #22] - 800ecfc: 4920 ldr r1, [pc, #128] ; (800ed80 ) - 800ecfe: 4613 mov r3, r2 - 800ed00: 005b lsls r3, r3, #1 - 800ed02: 4413 add r3, r2 - 800ed04: 00db lsls r3, r3, #3 - 800ed06: 440b add r3, r1 - 800ed08: 3312 adds r3, #18 - 800ed0a: 2200 movs r2, #0 - 800ed0c: 801a strh r2, [r3, #0] - /* get the packet pointer */ - p = q->p; - /* now queue entry can be freed */ - memp_free(MEMP_ARP_QUEUE, q); -#else /* ARP_QUEUEING */ - if (arp_table[i].q != NULL) { - 800ed0e: f9b7 2016 ldrsh.w r2, [r7, #22] - 800ed12: 491b ldr r1, [pc, #108] ; (800ed80 ) - 800ed14: 4613 mov r3, r2 - 800ed16: 005b lsls r3, r3, #1 - 800ed18: 4413 add r3, r2 - 800ed1a: 00db lsls r3, r3, #3 - 800ed1c: 440b add r3, r1 - 800ed1e: 681b ldr r3, [r3, #0] - 800ed20: 2b00 cmp r3, #0 - 800ed22: d021 beq.n 800ed68 - struct pbuf *p = arp_table[i].q; - 800ed24: f9b7 2016 ldrsh.w r2, [r7, #22] - 800ed28: 4915 ldr r1, [pc, #84] ; (800ed80 ) - 800ed2a: 4613 mov r3, r2 - 800ed2c: 005b lsls r3, r3, #1 - 800ed2e: 4413 add r3, r2 - 800ed30: 00db lsls r3, r3, #3 - 800ed32: 440b add r3, r1 - 800ed34: 681b ldr r3, [r3, #0] - 800ed36: 613b str r3, [r7, #16] - arp_table[i].q = NULL; - 800ed38: f9b7 2016 ldrsh.w r2, [r7, #22] - 800ed3c: 4910 ldr r1, [pc, #64] ; (800ed80 ) - 800ed3e: 4613 mov r3, r2 - 800ed40: 005b lsls r3, r3, #1 - 800ed42: 4413 add r3, r2 - 800ed44: 00db lsls r3, r3, #3 - 800ed46: 440b add r3, r1 - 800ed48: 2200 movs r2, #0 - 800ed4a: 601a str r2, [r3, #0] -#endif /* ARP_QUEUEING */ - /* send the queued IP packet */ - ethernet_output(netif, p, (struct eth_addr *)(netif->hwaddr), ethaddr, ETHTYPE_IP); - 800ed4c: 68fb ldr r3, [r7, #12] - 800ed4e: f103 022a add.w r2, r3, #42 ; 0x2a - 800ed52: f44f 6300 mov.w r3, #2048 ; 0x800 - 800ed56: 9300 str r3, [sp, #0] - 800ed58: 687b ldr r3, [r7, #4] - 800ed5a: 6939 ldr r1, [r7, #16] - 800ed5c: 68f8 ldr r0, [r7, #12] - 800ed5e: f002 f8f7 bl 8010f50 - /* free the queued IP packet */ - pbuf_free(p); - 800ed62: 6938 ldr r0, [r7, #16] - 800ed64: f7f7 fc28 bl 80065b8 - } - return ERR_OK; - 800ed68: 2300 movs r3, #0 -} - 800ed6a: 4618 mov r0, r3 - 800ed6c: 3718 adds r7, #24 - 800ed6e: 46bd mov sp, r7 - 800ed70: bd80 pop {r7, pc} - 800ed72: bf00 nop - 800ed74: 0801829c .word 0x0801829c - 800ed78: 08018394 .word 0x08018394 - 800ed7c: 08018314 .word 0x08018314 - 800ed80: 20009a68 .word 0x20009a68 - -0800ed84 : - * - * @param netif points to a network interface - */ -void -etharp_cleanup_netif(struct netif *netif) -{ - 800ed84: b580 push {r7, lr} - 800ed86: b084 sub sp, #16 - 800ed88: af00 add r7, sp, #0 - 800ed8a: 6078 str r0, [r7, #4] - int i; - - for (i = 0; i < ARP_TABLE_SIZE; ++i) { - 800ed8c: 2300 movs r3, #0 - 800ed8e: 60fb str r3, [r7, #12] - 800ed90: e01e b.n 800edd0 - u8_t state = arp_table[i].state; - 800ed92: 4913 ldr r1, [pc, #76] ; (800ede0 ) - 800ed94: 68fa ldr r2, [r7, #12] - 800ed96: 4613 mov r3, r2 - 800ed98: 005b lsls r3, r3, #1 - 800ed9a: 4413 add r3, r2 - 800ed9c: 00db lsls r3, r3, #3 - 800ed9e: 440b add r3, r1 - 800eda0: 3314 adds r3, #20 - 800eda2: 781b ldrb r3, [r3, #0] - 800eda4: 72fb strb r3, [r7, #11] - if ((state != ETHARP_STATE_EMPTY) && (arp_table[i].netif == netif)) { - 800eda6: 7afb ldrb r3, [r7, #11] - 800eda8: 2b00 cmp r3, #0 - 800edaa: d00e beq.n 800edca - 800edac: 490c ldr r1, [pc, #48] ; (800ede0 ) - 800edae: 68fa ldr r2, [r7, #12] - 800edb0: 4613 mov r3, r2 - 800edb2: 005b lsls r3, r3, #1 - 800edb4: 4413 add r3, r2 - 800edb6: 00db lsls r3, r3, #3 - 800edb8: 440b add r3, r1 - 800edba: 3308 adds r3, #8 - 800edbc: 681b ldr r3, [r3, #0] - 800edbe: 687a ldr r2, [r7, #4] - 800edc0: 429a cmp r2, r3 - 800edc2: d102 bne.n 800edca - etharp_free_entry(i); - 800edc4: 68f8 ldr r0, [r7, #12] - 800edc6: f7ff fce5 bl 800e794 - for (i = 0; i < ARP_TABLE_SIZE; ++i) { - 800edca: 68fb ldr r3, [r7, #12] - 800edcc: 3301 adds r3, #1 - 800edce: 60fb str r3, [r7, #12] - 800edd0: 68fb ldr r3, [r7, #12] - 800edd2: 2b09 cmp r3, #9 - 800edd4: dddd ble.n 800ed92 - } - } -} - 800edd6: bf00 nop - 800edd8: bf00 nop - 800edda: 3710 adds r7, #16 - 800eddc: 46bd mov sp, r7 - 800edde: bd80 pop {r7, pc} - 800ede0: 20009a68 .word 0x20009a68 - -0800ede4 : - * - * @see pbuf_free() - */ -void -etharp_input(struct pbuf *p, struct netif *netif) -{ - 800ede4: b5b0 push {r4, r5, r7, lr} - 800ede6: b08a sub sp, #40 ; 0x28 - 800ede8: af04 add r7, sp, #16 - 800edea: 6078 str r0, [r7, #4] - 800edec: 6039 str r1, [r7, #0] - ip4_addr_t sipaddr, dipaddr; - u8_t for_us; - - LWIP_ASSERT_CORE_LOCKED(); - - LWIP_ERROR("netif != NULL", (netif != NULL), return;); - 800edee: 683b ldr r3, [r7, #0] - 800edf0: 2b00 cmp r3, #0 - 800edf2: d107 bne.n 800ee04 - 800edf4: 4b3f ldr r3, [pc, #252] ; (800eef4 ) - 800edf6: f240 228a movw r2, #650 ; 0x28a - 800edfa: 493f ldr r1, [pc, #252] ; (800eef8 ) - 800edfc: 483f ldr r0, [pc, #252] ; (800eefc ) - 800edfe: f002 f953 bl 80110a8 - 800ee02: e074 b.n 800eeee - - hdr = (struct etharp_hdr *)p->payload; - 800ee04: 687b ldr r3, [r7, #4] - 800ee06: 685b ldr r3, [r3, #4] - 800ee08: 613b str r3, [r7, #16] - - /* RFC 826 "Packet Reception": */ - if ((hdr->hwtype != PP_HTONS(LWIP_IANA_HWTYPE_ETHERNET)) || - 800ee0a: 693b ldr r3, [r7, #16] - 800ee0c: 881b ldrh r3, [r3, #0] - 800ee0e: b29b uxth r3, r3 - 800ee10: f5b3 7f80 cmp.w r3, #256 ; 0x100 - 800ee14: d10c bne.n 800ee30 - (hdr->hwlen != ETH_HWADDR_LEN) || - 800ee16: 693b ldr r3, [r7, #16] - 800ee18: 791b ldrb r3, [r3, #4] - if ((hdr->hwtype != PP_HTONS(LWIP_IANA_HWTYPE_ETHERNET)) || - 800ee1a: 2b06 cmp r3, #6 - 800ee1c: d108 bne.n 800ee30 - (hdr->protolen != sizeof(ip4_addr_t)) || - 800ee1e: 693b ldr r3, [r7, #16] - 800ee20: 795b ldrb r3, [r3, #5] - (hdr->hwlen != ETH_HWADDR_LEN) || - 800ee22: 2b04 cmp r3, #4 - 800ee24: d104 bne.n 800ee30 - (hdr->proto != PP_HTONS(ETHTYPE_IP))) { - 800ee26: 693b ldr r3, [r7, #16] - 800ee28: 885b ldrh r3, [r3, #2] - 800ee2a: b29b uxth r3, r3 - (hdr->protolen != sizeof(ip4_addr_t)) || - 800ee2c: 2b08 cmp r3, #8 - 800ee2e: d003 beq.n 800ee38 - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, - ("etharp_input: packet dropped, wrong hw type, hwlen, proto, protolen or ethernet type (%"U16_F"/%"U16_F"/%"U16_F"/%"U16_F")\n", - hdr->hwtype, (u16_t)hdr->hwlen, hdr->proto, (u16_t)hdr->protolen)); - ETHARP_STATS_INC(etharp.proterr); - ETHARP_STATS_INC(etharp.drop); - pbuf_free(p); - 800ee30: 6878 ldr r0, [r7, #4] - 800ee32: f7f7 fbc1 bl 80065b8 - return; - 800ee36: e05a b.n 800eeee - autoip_arp_reply(netif, hdr); -#endif /* LWIP_AUTOIP */ - - /* Copy struct ip4_addr_wordaligned to aligned ip4_addr, to support compilers without - * structure packing (not using structure copy which breaks strict-aliasing rules). */ - IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T(&sipaddr, &hdr->sipaddr); - 800ee38: 693b ldr r3, [r7, #16] - 800ee3a: 330e adds r3, #14 - 800ee3c: 681b ldr r3, [r3, #0] - 800ee3e: 60fb str r3, [r7, #12] - IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T(&dipaddr, &hdr->dipaddr); - 800ee40: 693b ldr r3, [r7, #16] - 800ee42: 3318 adds r3, #24 - 800ee44: 681b ldr r3, [r3, #0] - 800ee46: 60bb str r3, [r7, #8] - - /* this interface is not configured? */ - if (ip4_addr_isany_val(*netif_ip4_addr(netif))) { - 800ee48: 683b ldr r3, [r7, #0] - 800ee4a: 3304 adds r3, #4 - 800ee4c: 681b ldr r3, [r3, #0] - 800ee4e: 2b00 cmp r3, #0 - 800ee50: d102 bne.n 800ee58 - for_us = 0; - 800ee52: 2300 movs r3, #0 - 800ee54: 75fb strb r3, [r7, #23] - 800ee56: e009 b.n 800ee6c - } else { - /* ARP packet directed to us? */ - for_us = (u8_t)ip4_addr_cmp(&dipaddr, netif_ip4_addr(netif)); - 800ee58: 68ba ldr r2, [r7, #8] - 800ee5a: 683b ldr r3, [r7, #0] - 800ee5c: 3304 adds r3, #4 - 800ee5e: 681b ldr r3, [r3, #0] - 800ee60: 429a cmp r2, r3 - 800ee62: bf0c ite eq - 800ee64: 2301 moveq r3, #1 - 800ee66: 2300 movne r3, #0 - 800ee68: b2db uxtb r3, r3 - 800ee6a: 75fb strb r3, [r7, #23] - /* ARP message directed to us? - -> add IP address in ARP cache; assume requester wants to talk to us, - can result in directly sending the queued packets for this host. - ARP message not directed to us? - -> update the source IP address in the cache, if present */ - etharp_update_arp_entry(netif, &sipaddr, &(hdr->shwaddr), - 800ee6c: 693b ldr r3, [r7, #16] - 800ee6e: f103 0208 add.w r2, r3, #8 - 800ee72: 7dfb ldrb r3, [r7, #23] - 800ee74: 2b00 cmp r3, #0 - 800ee76: d001 beq.n 800ee7c - 800ee78: 2301 movs r3, #1 - 800ee7a: e000 b.n 800ee7e - 800ee7c: 2302 movs r3, #2 - 800ee7e: f107 010c add.w r1, r7, #12 - 800ee82: 6838 ldr r0, [r7, #0] - 800ee84: f7ff fed8 bl 800ec38 - for_us ? ETHARP_FLAG_TRY_HARD : ETHARP_FLAG_FIND_ONLY); - - /* now act on the message itself */ - switch (hdr->opcode) { - 800ee88: 693b ldr r3, [r7, #16] - 800ee8a: 88db ldrh r3, [r3, #6] - 800ee8c: b29b uxth r3, r3 - 800ee8e: f5b3 7f80 cmp.w r3, #256 ; 0x100 - 800ee92: d003 beq.n 800ee9c - 800ee94: f5b3 7f00 cmp.w r3, #512 ; 0x200 - 800ee98: d01e beq.n 800eed8 -#endif /* (LWIP_DHCP && DHCP_DOES_ARP_CHECK) */ - break; - default: - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_input: ARP unknown opcode type %"S16_F"\n", lwip_htons(hdr->opcode))); - ETHARP_STATS_INC(etharp.err); - break; - 800ee9a: e025 b.n 800eee8 - if (for_us) { - 800ee9c: 7dfb ldrb r3, [r7, #23] - 800ee9e: 2b00 cmp r3, #0 - 800eea0: d021 beq.n 800eee6 - (struct eth_addr *)netif->hwaddr, &hdr->shwaddr, - 800eea2: 683b ldr r3, [r7, #0] - 800eea4: f103 002a add.w r0, r3, #42 ; 0x2a - 800eea8: 693b ldr r3, [r7, #16] - 800eeaa: f103 0408 add.w r4, r3, #8 - (struct eth_addr *)netif->hwaddr, netif_ip4_addr(netif), - 800eeae: 683b ldr r3, [r7, #0] - 800eeb0: f103 052a add.w r5, r3, #42 ; 0x2a - 800eeb4: 683b ldr r3, [r7, #0] - 800eeb6: 3304 adds r3, #4 - &hdr->shwaddr, &sipaddr, - 800eeb8: 693a ldr r2, [r7, #16] - 800eeba: 3208 adds r2, #8 - etharp_raw(netif, - 800eebc: 2102 movs r1, #2 - 800eebe: 9103 str r1, [sp, #12] - 800eec0: f107 010c add.w r1, r7, #12 - 800eec4: 9102 str r1, [sp, #8] - 800eec6: 9201 str r2, [sp, #4] - 800eec8: 9300 str r3, [sp, #0] - 800eeca: 462b mov r3, r5 - 800eecc: 4622 mov r2, r4 - 800eece: 4601 mov r1, r0 - 800eed0: 6838 ldr r0, [r7, #0] - 800eed2: f000 faef bl 800f4b4 - break; - 800eed6: e006 b.n 800eee6 - dhcp_arp_reply(netif, &sipaddr); - 800eed8: f107 030c add.w r3, r7, #12 - 800eedc: 4619 mov r1, r3 - 800eede: 6838 ldr r0, [r7, #0] - 800eee0: f7fe f9fc bl 800d2dc - break; - 800eee4: e000 b.n 800eee8 - break; - 800eee6: bf00 nop - } - /* free ARP packet */ - pbuf_free(p); - 800eee8: 6878 ldr r0, [r7, #4] - 800eeea: f7f7 fb65 bl 80065b8 -} - 800eeee: 3718 adds r7, #24 - 800eef0: 46bd mov sp, r7 - 800eef2: bdb0 pop {r4, r5, r7, pc} - 800eef4: 0801829c .word 0x0801829c - 800eef8: 080183ec .word 0x080183ec - 800eefc: 08018314 .word 0x08018314 - -0800ef00 : -/** Just a small helper function that sends a pbuf to an ethernet address - * in the arp_table specified by the index 'arp_idx'. - */ -static err_t -etharp_output_to_arp_index(struct netif *netif, struct pbuf *q, netif_addr_idx_t arp_idx) -{ - 800ef00: b580 push {r7, lr} - 800ef02: b086 sub sp, #24 - 800ef04: af02 add r7, sp, #8 - 800ef06: 60f8 str r0, [r7, #12] - 800ef08: 60b9 str r1, [r7, #8] - 800ef0a: 4613 mov r3, r2 - 800ef0c: 71fb strb r3, [r7, #7] - LWIP_ASSERT("arp_table[arp_idx].state >= ETHARP_STATE_STABLE", - 800ef0e: 79fa ldrb r2, [r7, #7] - 800ef10: 4944 ldr r1, [pc, #272] ; (800f024 ) - 800ef12: 4613 mov r3, r2 - 800ef14: 005b lsls r3, r3, #1 - 800ef16: 4413 add r3, r2 - 800ef18: 00db lsls r3, r3, #3 - 800ef1a: 440b add r3, r1 - 800ef1c: 3314 adds r3, #20 - 800ef1e: 781b ldrb r3, [r3, #0] - 800ef20: 2b01 cmp r3, #1 - 800ef22: d806 bhi.n 800ef32 - 800ef24: 4b40 ldr r3, [pc, #256] ; (800f028 ) - 800ef26: f240 22ee movw r2, #750 ; 0x2ee - 800ef2a: 4940 ldr r1, [pc, #256] ; (800f02c ) - 800ef2c: 4840 ldr r0, [pc, #256] ; (800f030 ) - 800ef2e: f002 f8bb bl 80110a8 - arp_table[arp_idx].state >= ETHARP_STATE_STABLE); - /* if arp table entry is about to expire: re-request it, - but only if its state is ETHARP_STATE_STABLE to prevent flooding the - network with ARP requests if this address is used frequently. */ - if (arp_table[arp_idx].state == ETHARP_STATE_STABLE) { - 800ef32: 79fa ldrb r2, [r7, #7] - 800ef34: 493b ldr r1, [pc, #236] ; (800f024 ) - 800ef36: 4613 mov r3, r2 - 800ef38: 005b lsls r3, r3, #1 - 800ef3a: 4413 add r3, r2 - 800ef3c: 00db lsls r3, r3, #3 - 800ef3e: 440b add r3, r1 - 800ef40: 3314 adds r3, #20 - 800ef42: 781b ldrb r3, [r3, #0] - 800ef44: 2b02 cmp r3, #2 - 800ef46: d153 bne.n 800eff0 - if (arp_table[arp_idx].ctime >= ARP_AGE_REREQUEST_USED_BROADCAST) { - 800ef48: 79fa ldrb r2, [r7, #7] - 800ef4a: 4936 ldr r1, [pc, #216] ; (800f024 ) - 800ef4c: 4613 mov r3, r2 - 800ef4e: 005b lsls r3, r3, #1 - 800ef50: 4413 add r3, r2 - 800ef52: 00db lsls r3, r3, #3 - 800ef54: 440b add r3, r1 - 800ef56: 3312 adds r3, #18 - 800ef58: 881b ldrh r3, [r3, #0] - 800ef5a: f5b3 7f8e cmp.w r3, #284 ; 0x11c - 800ef5e: d919 bls.n 800ef94 - /* issue a standard request using broadcast */ - if (etharp_request(netif, &arp_table[arp_idx].ipaddr) == ERR_OK) { - 800ef60: 79fa ldrb r2, [r7, #7] - 800ef62: 4613 mov r3, r2 - 800ef64: 005b lsls r3, r3, #1 - 800ef66: 4413 add r3, r2 - 800ef68: 00db lsls r3, r3, #3 - 800ef6a: 4a2e ldr r2, [pc, #184] ; (800f024 ) - 800ef6c: 4413 add r3, r2 - 800ef6e: 3304 adds r3, #4 - 800ef70: 4619 mov r1, r3 - 800ef72: 68f8 ldr r0, [r7, #12] - 800ef74: f000 fb4c bl 800f610 - 800ef78: 4603 mov r3, r0 - 800ef7a: 2b00 cmp r3, #0 - 800ef7c: d138 bne.n 800eff0 - arp_table[arp_idx].state = ETHARP_STATE_STABLE_REREQUESTING_1; - 800ef7e: 79fa ldrb r2, [r7, #7] - 800ef80: 4928 ldr r1, [pc, #160] ; (800f024 ) - 800ef82: 4613 mov r3, r2 - 800ef84: 005b lsls r3, r3, #1 - 800ef86: 4413 add r3, r2 - 800ef88: 00db lsls r3, r3, #3 - 800ef8a: 440b add r3, r1 - 800ef8c: 3314 adds r3, #20 - 800ef8e: 2203 movs r2, #3 - 800ef90: 701a strb r2, [r3, #0] - 800ef92: e02d b.n 800eff0 - } - } else if (arp_table[arp_idx].ctime >= ARP_AGE_REREQUEST_USED_UNICAST) { - 800ef94: 79fa ldrb r2, [r7, #7] - 800ef96: 4923 ldr r1, [pc, #140] ; (800f024 ) - 800ef98: 4613 mov r3, r2 - 800ef9a: 005b lsls r3, r3, #1 - 800ef9c: 4413 add r3, r2 - 800ef9e: 00db lsls r3, r3, #3 - 800efa0: 440b add r3, r1 - 800efa2: 3312 adds r3, #18 - 800efa4: 881b ldrh r3, [r3, #0] - 800efa6: f5b3 7f87 cmp.w r3, #270 ; 0x10e - 800efaa: d321 bcc.n 800eff0 - /* issue a unicast request (for 15 seconds) to prevent unnecessary broadcast */ - if (etharp_request_dst(netif, &arp_table[arp_idx].ipaddr, &arp_table[arp_idx].ethaddr) == ERR_OK) { - 800efac: 79fa ldrb r2, [r7, #7] - 800efae: 4613 mov r3, r2 - 800efb0: 005b lsls r3, r3, #1 - 800efb2: 4413 add r3, r2 - 800efb4: 00db lsls r3, r3, #3 - 800efb6: 4a1b ldr r2, [pc, #108] ; (800f024 ) - 800efb8: 4413 add r3, r2 - 800efba: 1d19 adds r1, r3, #4 - 800efbc: 79fa ldrb r2, [r7, #7] - 800efbe: 4613 mov r3, r2 - 800efc0: 005b lsls r3, r3, #1 - 800efc2: 4413 add r3, r2 - 800efc4: 00db lsls r3, r3, #3 - 800efc6: 3308 adds r3, #8 - 800efc8: 4a16 ldr r2, [pc, #88] ; (800f024 ) - 800efca: 4413 add r3, r2 - 800efcc: 3304 adds r3, #4 - 800efce: 461a mov r2, r3 - 800efd0: 68f8 ldr r0, [r7, #12] - 800efd2: f000 fafb bl 800f5cc - 800efd6: 4603 mov r3, r0 - 800efd8: 2b00 cmp r3, #0 - 800efda: d109 bne.n 800eff0 - arp_table[arp_idx].state = ETHARP_STATE_STABLE_REREQUESTING_1; - 800efdc: 79fa ldrb r2, [r7, #7] - 800efde: 4911 ldr r1, [pc, #68] ; (800f024 ) - 800efe0: 4613 mov r3, r2 - 800efe2: 005b lsls r3, r3, #1 - 800efe4: 4413 add r3, r2 - 800efe6: 00db lsls r3, r3, #3 - 800efe8: 440b add r3, r1 - 800efea: 3314 adds r3, #20 - 800efec: 2203 movs r2, #3 - 800efee: 701a strb r2, [r3, #0] - } - } - } - - return ethernet_output(netif, q, (struct eth_addr *)(netif->hwaddr), &arp_table[arp_idx].ethaddr, ETHTYPE_IP); - 800eff0: 68fb ldr r3, [r7, #12] - 800eff2: f103 012a add.w r1, r3, #42 ; 0x2a - 800eff6: 79fa ldrb r2, [r7, #7] - 800eff8: 4613 mov r3, r2 - 800effa: 005b lsls r3, r3, #1 - 800effc: 4413 add r3, r2 - 800effe: 00db lsls r3, r3, #3 - 800f000: 3308 adds r3, #8 - 800f002: 4a08 ldr r2, [pc, #32] ; (800f024 ) - 800f004: 4413 add r3, r2 - 800f006: 3304 adds r3, #4 - 800f008: f44f 6200 mov.w r2, #2048 ; 0x800 - 800f00c: 9200 str r2, [sp, #0] - 800f00e: 460a mov r2, r1 - 800f010: 68b9 ldr r1, [r7, #8] - 800f012: 68f8 ldr r0, [r7, #12] - 800f014: f001 ff9c bl 8010f50 - 800f018: 4603 mov r3, r0 -} - 800f01a: 4618 mov r0, r3 - 800f01c: 3710 adds r7, #16 - 800f01e: 46bd mov sp, r7 - 800f020: bd80 pop {r7, pc} - 800f022: bf00 nop - 800f024: 20009a68 .word 0x20009a68 - 800f028: 0801829c .word 0x0801829c - 800f02c: 0801840c .word 0x0801840c - 800f030: 08018314 .word 0x08018314 - -0800f034 : - * - ERR_RTE No route to destination (no gateway to external networks), - * or the return type of either etharp_query() or ethernet_output(). - */ -err_t -etharp_output(struct netif *netif, struct pbuf *q, const ip4_addr_t *ipaddr) -{ - 800f034: b580 push {r7, lr} - 800f036: b08a sub sp, #40 ; 0x28 - 800f038: af02 add r7, sp, #8 - 800f03a: 60f8 str r0, [r7, #12] - 800f03c: 60b9 str r1, [r7, #8] - 800f03e: 607a str r2, [r7, #4] - const struct eth_addr *dest; - struct eth_addr mcastaddr; - const ip4_addr_t *dst_addr = ipaddr; - 800f040: 687b ldr r3, [r7, #4] - 800f042: 61bb str r3, [r7, #24] - - LWIP_ASSERT_CORE_LOCKED(); - LWIP_ASSERT("netif != NULL", netif != NULL); - 800f044: 68fb ldr r3, [r7, #12] - 800f046: 2b00 cmp r3, #0 - 800f048: d106 bne.n 800f058 - 800f04a: 4b73 ldr r3, [pc, #460] ; (800f218 ) - 800f04c: f240 321e movw r2, #798 ; 0x31e - 800f050: 4972 ldr r1, [pc, #456] ; (800f21c ) - 800f052: 4873 ldr r0, [pc, #460] ; (800f220 ) - 800f054: f002 f828 bl 80110a8 - LWIP_ASSERT("q != NULL", q != NULL); - 800f058: 68bb ldr r3, [r7, #8] - 800f05a: 2b00 cmp r3, #0 - 800f05c: d106 bne.n 800f06c - 800f05e: 4b6e ldr r3, [pc, #440] ; (800f218 ) - 800f060: f240 321f movw r2, #799 ; 0x31f - 800f064: 496f ldr r1, [pc, #444] ; (800f224 ) - 800f066: 486e ldr r0, [pc, #440] ; (800f220 ) - 800f068: f002 f81e bl 80110a8 - LWIP_ASSERT("ipaddr != NULL", ipaddr != NULL); - 800f06c: 687b ldr r3, [r7, #4] - 800f06e: 2b00 cmp r3, #0 - 800f070: d106 bne.n 800f080 - 800f072: 4b69 ldr r3, [pc, #420] ; (800f218 ) - 800f074: f44f 7248 mov.w r2, #800 ; 0x320 - 800f078: 496b ldr r1, [pc, #428] ; (800f228 ) - 800f07a: 4869 ldr r0, [pc, #420] ; (800f220 ) - 800f07c: f002 f814 bl 80110a8 - - /* Determine on destination hardware address. Broadcasts and multicasts - * are special, other IP addresses are looked up in the ARP table. */ - - /* broadcast destination IP address? */ - if (ip4_addr_isbroadcast(ipaddr, netif)) { - 800f080: 687b ldr r3, [r7, #4] - 800f082: 681b ldr r3, [r3, #0] - 800f084: 68f9 ldr r1, [r7, #12] - 800f086: 4618 mov r0, r3 - 800f088: f000 ff16 bl 800feb8 - 800f08c: 4603 mov r3, r0 - 800f08e: 2b00 cmp r3, #0 - 800f090: d002 beq.n 800f098 - /* broadcast on Ethernet also */ - dest = (const struct eth_addr *)ðbroadcast; - 800f092: 4b66 ldr r3, [pc, #408] ; (800f22c ) - 800f094: 61fb str r3, [r7, #28] - 800f096: e0af b.n 800f1f8 - /* multicast destination IP address? */ - } else if (ip4_addr_ismulticast(ipaddr)) { - 800f098: 687b ldr r3, [r7, #4] - 800f09a: 681b ldr r3, [r3, #0] - 800f09c: f003 03f0 and.w r3, r3, #240 ; 0xf0 - 800f0a0: 2be0 cmp r3, #224 ; 0xe0 - 800f0a2: d118 bne.n 800f0d6 - /* Hash IP multicast address to MAC address.*/ - mcastaddr.addr[0] = LL_IP4_MULTICAST_ADDR_0; - 800f0a4: 2301 movs r3, #1 - 800f0a6: 743b strb r3, [r7, #16] - mcastaddr.addr[1] = LL_IP4_MULTICAST_ADDR_1; - 800f0a8: 2300 movs r3, #0 - 800f0aa: 747b strb r3, [r7, #17] - mcastaddr.addr[2] = LL_IP4_MULTICAST_ADDR_2; - 800f0ac: 235e movs r3, #94 ; 0x5e - 800f0ae: 74bb strb r3, [r7, #18] - mcastaddr.addr[3] = ip4_addr2(ipaddr) & 0x7f; - 800f0b0: 687b ldr r3, [r7, #4] - 800f0b2: 3301 adds r3, #1 - 800f0b4: 781b ldrb r3, [r3, #0] - 800f0b6: f003 037f and.w r3, r3, #127 ; 0x7f - 800f0ba: b2db uxtb r3, r3 - 800f0bc: 74fb strb r3, [r7, #19] - mcastaddr.addr[4] = ip4_addr3(ipaddr); - 800f0be: 687b ldr r3, [r7, #4] - 800f0c0: 3302 adds r3, #2 - 800f0c2: 781b ldrb r3, [r3, #0] - 800f0c4: 753b strb r3, [r7, #20] - mcastaddr.addr[5] = ip4_addr4(ipaddr); - 800f0c6: 687b ldr r3, [r7, #4] - 800f0c8: 3303 adds r3, #3 - 800f0ca: 781b ldrb r3, [r3, #0] - 800f0cc: 757b strb r3, [r7, #21] - /* destination Ethernet address is multicast */ - dest = &mcastaddr; - 800f0ce: f107 0310 add.w r3, r7, #16 - 800f0d2: 61fb str r3, [r7, #28] - 800f0d4: e090 b.n 800f1f8 - /* unicast destination IP address? */ - } else { - netif_addr_idx_t i; - /* outside local network? if so, this can neither be a global broadcast nor - a subnet broadcast. */ - if (!ip4_addr_netcmp(ipaddr, netif_ip4_addr(netif), netif_ip4_netmask(netif)) && - 800f0d6: 687b ldr r3, [r7, #4] - 800f0d8: 681a ldr r2, [r3, #0] - 800f0da: 68fb ldr r3, [r7, #12] - 800f0dc: 3304 adds r3, #4 - 800f0de: 681b ldr r3, [r3, #0] - 800f0e0: 405a eors r2, r3 - 800f0e2: 68fb ldr r3, [r7, #12] - 800f0e4: 3308 adds r3, #8 - 800f0e6: 681b ldr r3, [r3, #0] - 800f0e8: 4013 ands r3, r2 - 800f0ea: 2b00 cmp r3, #0 - 800f0ec: d012 beq.n 800f114 - !ip4_addr_islinklocal(ipaddr)) { - 800f0ee: 687b ldr r3, [r7, #4] - 800f0f0: 681b ldr r3, [r3, #0] - 800f0f2: b29b uxth r3, r3 - if (!ip4_addr_netcmp(ipaddr, netif_ip4_addr(netif), netif_ip4_netmask(netif)) && - 800f0f4: f64f 62a9 movw r2, #65193 ; 0xfea9 - 800f0f8: 4293 cmp r3, r2 - 800f0fa: d00b beq.n 800f114 - dst_addr = LWIP_HOOK_ETHARP_GET_GW(netif, ipaddr); - if (dst_addr == NULL) -#endif /* LWIP_HOOK_ETHARP_GET_GW */ - { - /* interface has default gateway? */ - if (!ip4_addr_isany_val(*netif_ip4_gw(netif))) { - 800f0fc: 68fb ldr r3, [r7, #12] - 800f0fe: 330c adds r3, #12 - 800f100: 681b ldr r3, [r3, #0] - 800f102: 2b00 cmp r3, #0 - 800f104: d003 beq.n 800f10e - /* send to hardware address of default gateway IP address */ - dst_addr = netif_ip4_gw(netif); - 800f106: 68fb ldr r3, [r7, #12] - 800f108: 330c adds r3, #12 - 800f10a: 61bb str r3, [r7, #24] - 800f10c: e002 b.n 800f114 - /* no default gateway available */ - } else { - /* no route to destination error (default gateway missing) */ - return ERR_RTE; - 800f10e: f06f 0303 mvn.w r3, #3 - 800f112: e07d b.n 800f210 - if (netif->hints != NULL) { - /* per-pcb cached entry was given */ - netif_addr_idx_t etharp_cached_entry = netif->hints->addr_hint; - if (etharp_cached_entry < ARP_TABLE_SIZE) { -#endif /* LWIP_NETIF_HWADDRHINT */ - if ((arp_table[etharp_cached_entry].state >= ETHARP_STATE_STABLE) && - 800f114: 4b46 ldr r3, [pc, #280] ; (800f230 ) - 800f116: 781b ldrb r3, [r3, #0] - 800f118: 4619 mov r1, r3 - 800f11a: 4a46 ldr r2, [pc, #280] ; (800f234 ) - 800f11c: 460b mov r3, r1 - 800f11e: 005b lsls r3, r3, #1 - 800f120: 440b add r3, r1 - 800f122: 00db lsls r3, r3, #3 - 800f124: 4413 add r3, r2 - 800f126: 3314 adds r3, #20 - 800f128: 781b ldrb r3, [r3, #0] - 800f12a: 2b01 cmp r3, #1 - 800f12c: d925 bls.n 800f17a -#if ETHARP_TABLE_MATCH_NETIF - (arp_table[etharp_cached_entry].netif == netif) && - 800f12e: 4b40 ldr r3, [pc, #256] ; (800f230 ) - 800f130: 781b ldrb r3, [r3, #0] - 800f132: 4619 mov r1, r3 - 800f134: 4a3f ldr r2, [pc, #252] ; (800f234 ) - 800f136: 460b mov r3, r1 - 800f138: 005b lsls r3, r3, #1 - 800f13a: 440b add r3, r1 - 800f13c: 00db lsls r3, r3, #3 - 800f13e: 4413 add r3, r2 - 800f140: 3308 adds r3, #8 - 800f142: 681b ldr r3, [r3, #0] - if ((arp_table[etharp_cached_entry].state >= ETHARP_STATE_STABLE) && - 800f144: 68fa ldr r2, [r7, #12] - 800f146: 429a cmp r2, r3 - 800f148: d117 bne.n 800f17a -#endif - (ip4_addr_cmp(dst_addr, &arp_table[etharp_cached_entry].ipaddr))) { - 800f14a: 69bb ldr r3, [r7, #24] - 800f14c: 681a ldr r2, [r3, #0] - 800f14e: 4b38 ldr r3, [pc, #224] ; (800f230 ) - 800f150: 781b ldrb r3, [r3, #0] - 800f152: 4618 mov r0, r3 - 800f154: 4937 ldr r1, [pc, #220] ; (800f234 ) - 800f156: 4603 mov r3, r0 - 800f158: 005b lsls r3, r3, #1 - 800f15a: 4403 add r3, r0 - 800f15c: 00db lsls r3, r3, #3 - 800f15e: 440b add r3, r1 - 800f160: 3304 adds r3, #4 - 800f162: 681b ldr r3, [r3, #0] - (arp_table[etharp_cached_entry].netif == netif) && - 800f164: 429a cmp r2, r3 - 800f166: d108 bne.n 800f17a - /* the per-pcb-cached entry is stable and the right one! */ - ETHARP_STATS_INC(etharp.cachehit); - return etharp_output_to_arp_index(netif, q, etharp_cached_entry); - 800f168: 4b31 ldr r3, [pc, #196] ; (800f230 ) - 800f16a: 781b ldrb r3, [r3, #0] - 800f16c: 461a mov r2, r3 - 800f16e: 68b9 ldr r1, [r7, #8] - 800f170: 68f8 ldr r0, [r7, #12] - 800f172: f7ff fec5 bl 800ef00 - 800f176: 4603 mov r3, r0 - 800f178: e04a b.n 800f210 - } -#endif /* LWIP_NETIF_HWADDRHINT */ - - /* find stable entry: do this here since this is a critical path for - throughput and etharp_find_entry() is kind of slow */ - for (i = 0; i < ARP_TABLE_SIZE; i++) { - 800f17a: 2300 movs r3, #0 - 800f17c: 75fb strb r3, [r7, #23] - 800f17e: e031 b.n 800f1e4 - if ((arp_table[i].state >= ETHARP_STATE_STABLE) && - 800f180: 7dfa ldrb r2, [r7, #23] - 800f182: 492c ldr r1, [pc, #176] ; (800f234 ) - 800f184: 4613 mov r3, r2 - 800f186: 005b lsls r3, r3, #1 - 800f188: 4413 add r3, r2 - 800f18a: 00db lsls r3, r3, #3 - 800f18c: 440b add r3, r1 - 800f18e: 3314 adds r3, #20 - 800f190: 781b ldrb r3, [r3, #0] - 800f192: 2b01 cmp r3, #1 - 800f194: d923 bls.n 800f1de -#if ETHARP_TABLE_MATCH_NETIF - (arp_table[i].netif == netif) && - 800f196: 7dfa ldrb r2, [r7, #23] - 800f198: 4926 ldr r1, [pc, #152] ; (800f234 ) - 800f19a: 4613 mov r3, r2 - 800f19c: 005b lsls r3, r3, #1 - 800f19e: 4413 add r3, r2 - 800f1a0: 00db lsls r3, r3, #3 - 800f1a2: 440b add r3, r1 - 800f1a4: 3308 adds r3, #8 - 800f1a6: 681b ldr r3, [r3, #0] - if ((arp_table[i].state >= ETHARP_STATE_STABLE) && - 800f1a8: 68fa ldr r2, [r7, #12] - 800f1aa: 429a cmp r2, r3 - 800f1ac: d117 bne.n 800f1de -#endif - (ip4_addr_cmp(dst_addr, &arp_table[i].ipaddr))) { - 800f1ae: 69bb ldr r3, [r7, #24] - 800f1b0: 6819 ldr r1, [r3, #0] - 800f1b2: 7dfa ldrb r2, [r7, #23] - 800f1b4: 481f ldr r0, [pc, #124] ; (800f234 ) - 800f1b6: 4613 mov r3, r2 - 800f1b8: 005b lsls r3, r3, #1 - 800f1ba: 4413 add r3, r2 - 800f1bc: 00db lsls r3, r3, #3 - 800f1be: 4403 add r3, r0 - 800f1c0: 3304 adds r3, #4 - 800f1c2: 681b ldr r3, [r3, #0] - (arp_table[i].netif == netif) && - 800f1c4: 4299 cmp r1, r3 - 800f1c6: d10a bne.n 800f1de - /* found an existing, stable entry */ - ETHARP_SET_ADDRHINT(netif, i); - 800f1c8: 4a19 ldr r2, [pc, #100] ; (800f230 ) - 800f1ca: 7dfb ldrb r3, [r7, #23] - 800f1cc: 7013 strb r3, [r2, #0] - return etharp_output_to_arp_index(netif, q, i); - 800f1ce: 7dfb ldrb r3, [r7, #23] - 800f1d0: 461a mov r2, r3 - 800f1d2: 68b9 ldr r1, [r7, #8] - 800f1d4: 68f8 ldr r0, [r7, #12] - 800f1d6: f7ff fe93 bl 800ef00 - 800f1da: 4603 mov r3, r0 - 800f1dc: e018 b.n 800f210 - for (i = 0; i < ARP_TABLE_SIZE; i++) { - 800f1de: 7dfb ldrb r3, [r7, #23] - 800f1e0: 3301 adds r3, #1 - 800f1e2: 75fb strb r3, [r7, #23] - 800f1e4: 7dfb ldrb r3, [r7, #23] - 800f1e6: 2b09 cmp r3, #9 - 800f1e8: d9ca bls.n 800f180 - } - } - /* no stable entry found, use the (slower) query function: - queue on destination Ethernet address belonging to ipaddr */ - return etharp_query(netif, dst_addr, q); - 800f1ea: 68ba ldr r2, [r7, #8] - 800f1ec: 69b9 ldr r1, [r7, #24] - 800f1ee: 68f8 ldr r0, [r7, #12] - 800f1f0: f000 f822 bl 800f238 - 800f1f4: 4603 mov r3, r0 - 800f1f6: e00b b.n 800f210 - } - - /* continuation for multicast/broadcast destinations */ - /* obtain source Ethernet address of the given interface */ - /* send packet directly on the link */ - return ethernet_output(netif, q, (struct eth_addr *)(netif->hwaddr), dest, ETHTYPE_IP); - 800f1f8: 68fb ldr r3, [r7, #12] - 800f1fa: f103 022a add.w r2, r3, #42 ; 0x2a - 800f1fe: f44f 6300 mov.w r3, #2048 ; 0x800 - 800f202: 9300 str r3, [sp, #0] - 800f204: 69fb ldr r3, [r7, #28] - 800f206: 68b9 ldr r1, [r7, #8] - 800f208: 68f8 ldr r0, [r7, #12] - 800f20a: f001 fea1 bl 8010f50 - 800f20e: 4603 mov r3, r0 -} - 800f210: 4618 mov r0, r3 - 800f212: 3720 adds r7, #32 - 800f214: 46bd mov sp, r7 - 800f216: bd80 pop {r7, pc} - 800f218: 0801829c .word 0x0801829c - 800f21c: 080183ec .word 0x080183ec - 800f220: 08018314 .word 0x08018314 - 800f224: 0801843c .word 0x0801843c - 800f228: 080183dc .word 0x080183dc - 800f22c: 08018ad4 .word 0x08018ad4 - 800f230: 20009b58 .word 0x20009b58 - 800f234: 20009a68 .word 0x20009a68 - -0800f238 : - * - ERR_ARG Non-unicast address given, those will not appear in ARP cache. - * - */ -err_t -etharp_query(struct netif *netif, const ip4_addr_t *ipaddr, struct pbuf *q) -{ - 800f238: b580 push {r7, lr} - 800f23a: b08c sub sp, #48 ; 0x30 - 800f23c: af02 add r7, sp, #8 - 800f23e: 60f8 str r0, [r7, #12] - 800f240: 60b9 str r1, [r7, #8] - 800f242: 607a str r2, [r7, #4] - struct eth_addr *srcaddr = (struct eth_addr *)netif->hwaddr; - 800f244: 68fb ldr r3, [r7, #12] - 800f246: 332a adds r3, #42 ; 0x2a - 800f248: 617b str r3, [r7, #20] - err_t result = ERR_MEM; - 800f24a: 23ff movs r3, #255 ; 0xff - 800f24c: f887 3027 strb.w r3, [r7, #39] ; 0x27 - int is_new_entry = 0; - 800f250: 2300 movs r3, #0 - 800f252: 623b str r3, [r7, #32] - s16_t i_err; - netif_addr_idx_t i; - - /* non-unicast address? */ - if (ip4_addr_isbroadcast(ipaddr, netif) || - 800f254: 68bb ldr r3, [r7, #8] - 800f256: 681b ldr r3, [r3, #0] - 800f258: 68f9 ldr r1, [r7, #12] - 800f25a: 4618 mov r0, r3 - 800f25c: f000 fe2c bl 800feb8 - 800f260: 4603 mov r3, r0 - 800f262: 2b00 cmp r3, #0 - 800f264: d10c bne.n 800f280 - ip4_addr_ismulticast(ipaddr) || - 800f266: 68bb ldr r3, [r7, #8] - 800f268: 681b ldr r3, [r3, #0] - 800f26a: f003 03f0 and.w r3, r3, #240 ; 0xf0 - if (ip4_addr_isbroadcast(ipaddr, netif) || - 800f26e: 2be0 cmp r3, #224 ; 0xe0 - 800f270: d006 beq.n 800f280 - ip4_addr_ismulticast(ipaddr) || - 800f272: 68bb ldr r3, [r7, #8] - 800f274: 2b00 cmp r3, #0 - 800f276: d003 beq.n 800f280 - ip4_addr_isany(ipaddr)) { - 800f278: 68bb ldr r3, [r7, #8] - 800f27a: 681b ldr r3, [r3, #0] - 800f27c: 2b00 cmp r3, #0 - 800f27e: d102 bne.n 800f286 - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: will not add non-unicast IP address to ARP cache\n")); - return ERR_ARG; - 800f280: f06f 030f mvn.w r3, #15 - 800f284: e101 b.n 800f48a - } - - /* find entry in ARP cache, ask to create entry if queueing packet */ - i_err = etharp_find_entry(ipaddr, ETHARP_FLAG_TRY_HARD, netif); - 800f286: 68fa ldr r2, [r7, #12] - 800f288: 2101 movs r1, #1 - 800f28a: 68b8 ldr r0, [r7, #8] - 800f28c: f7ff fb5c bl 800e948 - 800f290: 4603 mov r3, r0 - 800f292: 827b strh r3, [r7, #18] - - /* could not find or create entry? */ - if (i_err < 0) { - 800f294: f9b7 3012 ldrsh.w r3, [r7, #18] - 800f298: 2b00 cmp r3, #0 - 800f29a: da02 bge.n 800f2a2 - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not create ARP entry\n")); - if (q) { - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: packet dropped\n")); - ETHARP_STATS_INC(etharp.memerr); - } - return (err_t)i_err; - 800f29c: 8a7b ldrh r3, [r7, #18] - 800f29e: b25b sxtb r3, r3 - 800f2a0: e0f3 b.n 800f48a - } - LWIP_ASSERT("type overflow", (size_t)i_err < NETIF_ADDR_IDX_MAX); - 800f2a2: 8a7b ldrh r3, [r7, #18] - 800f2a4: 2b7e cmp r3, #126 ; 0x7e - 800f2a6: d906 bls.n 800f2b6 - 800f2a8: 4b7a ldr r3, [pc, #488] ; (800f494 ) - 800f2aa: f240 32c1 movw r2, #961 ; 0x3c1 - 800f2ae: 497a ldr r1, [pc, #488] ; (800f498 ) - 800f2b0: 487a ldr r0, [pc, #488] ; (800f49c ) - 800f2b2: f001 fef9 bl 80110a8 - i = (netif_addr_idx_t)i_err; - 800f2b6: 8a7b ldrh r3, [r7, #18] - 800f2b8: 747b strb r3, [r7, #17] - - /* mark a fresh entry as pending (we just sent a request) */ - if (arp_table[i].state == ETHARP_STATE_EMPTY) { - 800f2ba: 7c7a ldrb r2, [r7, #17] - 800f2bc: 4978 ldr r1, [pc, #480] ; (800f4a0 ) - 800f2be: 4613 mov r3, r2 - 800f2c0: 005b lsls r3, r3, #1 - 800f2c2: 4413 add r3, r2 - 800f2c4: 00db lsls r3, r3, #3 - 800f2c6: 440b add r3, r1 - 800f2c8: 3314 adds r3, #20 - 800f2ca: 781b ldrb r3, [r3, #0] - 800f2cc: 2b00 cmp r3, #0 - 800f2ce: d115 bne.n 800f2fc - is_new_entry = 1; - 800f2d0: 2301 movs r3, #1 - 800f2d2: 623b str r3, [r7, #32] - arp_table[i].state = ETHARP_STATE_PENDING; - 800f2d4: 7c7a ldrb r2, [r7, #17] - 800f2d6: 4972 ldr r1, [pc, #456] ; (800f4a0 ) - 800f2d8: 4613 mov r3, r2 - 800f2da: 005b lsls r3, r3, #1 - 800f2dc: 4413 add r3, r2 - 800f2de: 00db lsls r3, r3, #3 - 800f2e0: 440b add r3, r1 - 800f2e2: 3314 adds r3, #20 - 800f2e4: 2201 movs r2, #1 - 800f2e6: 701a strb r2, [r3, #0] - /* record network interface for re-sending arp request in etharp_tmr */ - arp_table[i].netif = netif; - 800f2e8: 7c7a ldrb r2, [r7, #17] - 800f2ea: 496d ldr r1, [pc, #436] ; (800f4a0 ) - 800f2ec: 4613 mov r3, r2 - 800f2ee: 005b lsls r3, r3, #1 - 800f2f0: 4413 add r3, r2 - 800f2f2: 00db lsls r3, r3, #3 - 800f2f4: 440b add r3, r1 - 800f2f6: 3308 adds r3, #8 - 800f2f8: 68fa ldr r2, [r7, #12] - 800f2fa: 601a str r2, [r3, #0] - } - - /* { i is either a STABLE or (new or existing) PENDING entry } */ - LWIP_ASSERT("arp_table[i].state == PENDING or STABLE", - 800f2fc: 7c7a ldrb r2, [r7, #17] - 800f2fe: 4968 ldr r1, [pc, #416] ; (800f4a0 ) - 800f300: 4613 mov r3, r2 - 800f302: 005b lsls r3, r3, #1 - 800f304: 4413 add r3, r2 - 800f306: 00db lsls r3, r3, #3 - 800f308: 440b add r3, r1 - 800f30a: 3314 adds r3, #20 - 800f30c: 781b ldrb r3, [r3, #0] - 800f30e: 2b01 cmp r3, #1 - 800f310: d011 beq.n 800f336 - 800f312: 7c7a ldrb r2, [r7, #17] - 800f314: 4962 ldr r1, [pc, #392] ; (800f4a0 ) - 800f316: 4613 mov r3, r2 - 800f318: 005b lsls r3, r3, #1 - 800f31a: 4413 add r3, r2 - 800f31c: 00db lsls r3, r3, #3 - 800f31e: 440b add r3, r1 - 800f320: 3314 adds r3, #20 - 800f322: 781b ldrb r3, [r3, #0] - 800f324: 2b01 cmp r3, #1 - 800f326: d806 bhi.n 800f336 - 800f328: 4b5a ldr r3, [pc, #360] ; (800f494 ) - 800f32a: f240 32cd movw r2, #973 ; 0x3cd - 800f32e: 495d ldr r1, [pc, #372] ; (800f4a4 ) - 800f330: 485a ldr r0, [pc, #360] ; (800f49c ) - 800f332: f001 feb9 bl 80110a8 - ((arp_table[i].state == ETHARP_STATE_PENDING) || - (arp_table[i].state >= ETHARP_STATE_STABLE))); - - /* do we have a new entry? or an implicit query request? */ - if (is_new_entry || (q == NULL)) { - 800f336: 6a3b ldr r3, [r7, #32] - 800f338: 2b00 cmp r3, #0 - 800f33a: d102 bne.n 800f342 - 800f33c: 687b ldr r3, [r7, #4] - 800f33e: 2b00 cmp r3, #0 - 800f340: d10c bne.n 800f35c - /* try to resolve it; send out ARP request */ - result = etharp_request(netif, ipaddr); - 800f342: 68b9 ldr r1, [r7, #8] - 800f344: 68f8 ldr r0, [r7, #12] - 800f346: f000 f963 bl 800f610 - 800f34a: 4603 mov r3, r0 - 800f34c: f887 3027 strb.w r3, [r7, #39] ; 0x27 - /* ARP request couldn't be sent */ - /* We don't re-send arp request in etharp_tmr, but we still queue packets, - since this failure could be temporary, and the next packet calling - etharp_query again could lead to sending the queued packets. */ - } - if (q == NULL) { - 800f350: 687b ldr r3, [r7, #4] - 800f352: 2b00 cmp r3, #0 - 800f354: d102 bne.n 800f35c - return result; - 800f356: f997 3027 ldrsb.w r3, [r7, #39] ; 0x27 - 800f35a: e096 b.n 800f48a - } - } - - /* packet given? */ - LWIP_ASSERT("q != NULL", q != NULL); - 800f35c: 687b ldr r3, [r7, #4] - 800f35e: 2b00 cmp r3, #0 - 800f360: d106 bne.n 800f370 - 800f362: 4b4c ldr r3, [pc, #304] ; (800f494 ) - 800f364: f240 32e1 movw r2, #993 ; 0x3e1 - 800f368: 494f ldr r1, [pc, #316] ; (800f4a8 ) - 800f36a: 484c ldr r0, [pc, #304] ; (800f49c ) - 800f36c: f001 fe9c bl 80110a8 - /* stable entry? */ - if (arp_table[i].state >= ETHARP_STATE_STABLE) { - 800f370: 7c7a ldrb r2, [r7, #17] - 800f372: 494b ldr r1, [pc, #300] ; (800f4a0 ) - 800f374: 4613 mov r3, r2 - 800f376: 005b lsls r3, r3, #1 - 800f378: 4413 add r3, r2 - 800f37a: 00db lsls r3, r3, #3 - 800f37c: 440b add r3, r1 - 800f37e: 3314 adds r3, #20 - 800f380: 781b ldrb r3, [r3, #0] - 800f382: 2b01 cmp r3, #1 - 800f384: d917 bls.n 800f3b6 - /* we have a valid IP->Ethernet address mapping */ - ETHARP_SET_ADDRHINT(netif, i); - 800f386: 4a49 ldr r2, [pc, #292] ; (800f4ac ) - 800f388: 7c7b ldrb r3, [r7, #17] - 800f38a: 7013 strb r3, [r2, #0] - /* send the packet */ - result = ethernet_output(netif, q, srcaddr, &(arp_table[i].ethaddr), ETHTYPE_IP); - 800f38c: 7c7a ldrb r2, [r7, #17] - 800f38e: 4613 mov r3, r2 - 800f390: 005b lsls r3, r3, #1 - 800f392: 4413 add r3, r2 - 800f394: 00db lsls r3, r3, #3 - 800f396: 3308 adds r3, #8 - 800f398: 4a41 ldr r2, [pc, #260] ; (800f4a0 ) - 800f39a: 4413 add r3, r2 - 800f39c: 3304 adds r3, #4 - 800f39e: f44f 6200 mov.w r2, #2048 ; 0x800 - 800f3a2: 9200 str r2, [sp, #0] - 800f3a4: 697a ldr r2, [r7, #20] - 800f3a6: 6879 ldr r1, [r7, #4] - 800f3a8: 68f8 ldr r0, [r7, #12] - 800f3aa: f001 fdd1 bl 8010f50 - 800f3ae: 4603 mov r3, r0 - 800f3b0: f887 3027 strb.w r3, [r7, #39] ; 0x27 - 800f3b4: e067 b.n 800f486 - /* pending entry? (either just created or already pending */ - } else if (arp_table[i].state == ETHARP_STATE_PENDING) { - 800f3b6: 7c7a ldrb r2, [r7, #17] - 800f3b8: 4939 ldr r1, [pc, #228] ; (800f4a0 ) - 800f3ba: 4613 mov r3, r2 - 800f3bc: 005b lsls r3, r3, #1 - 800f3be: 4413 add r3, r2 - 800f3c0: 00db lsls r3, r3, #3 - 800f3c2: 440b add r3, r1 - 800f3c4: 3314 adds r3, #20 - 800f3c6: 781b ldrb r3, [r3, #0] - 800f3c8: 2b01 cmp r3, #1 - 800f3ca: d15c bne.n 800f486 - /* entry is still pending, queue the given packet 'q' */ - struct pbuf *p; - int copy_needed = 0; - 800f3cc: 2300 movs r3, #0 - 800f3ce: 61bb str r3, [r7, #24] - /* IF q includes a pbuf that must be copied, copy the whole chain into a - * new PBUF_RAM. See the definition of PBUF_NEEDS_COPY for details. */ - p = q; - 800f3d0: 687b ldr r3, [r7, #4] - 800f3d2: 61fb str r3, [r7, #28] - while (p) { - 800f3d4: e01c b.n 800f410 - LWIP_ASSERT("no packet queues allowed!", (p->len != p->tot_len) || (p->next == 0)); - 800f3d6: 69fb ldr r3, [r7, #28] - 800f3d8: 895a ldrh r2, [r3, #10] - 800f3da: 69fb ldr r3, [r7, #28] - 800f3dc: 891b ldrh r3, [r3, #8] - 800f3de: 429a cmp r2, r3 - 800f3e0: d10a bne.n 800f3f8 - 800f3e2: 69fb ldr r3, [r7, #28] - 800f3e4: 681b ldr r3, [r3, #0] - 800f3e6: 2b00 cmp r3, #0 - 800f3e8: d006 beq.n 800f3f8 - 800f3ea: 4b2a ldr r3, [pc, #168] ; (800f494 ) - 800f3ec: f240 32f1 movw r2, #1009 ; 0x3f1 - 800f3f0: 492f ldr r1, [pc, #188] ; (800f4b0 ) - 800f3f2: 482a ldr r0, [pc, #168] ; (800f49c ) - 800f3f4: f001 fe58 bl 80110a8 - if (PBUF_NEEDS_COPY(p)) { - 800f3f8: 69fb ldr r3, [r7, #28] - 800f3fa: 7b1b ldrb r3, [r3, #12] - 800f3fc: f003 0340 and.w r3, r3, #64 ; 0x40 - 800f400: 2b00 cmp r3, #0 - 800f402: d002 beq.n 800f40a - copy_needed = 1; - 800f404: 2301 movs r3, #1 - 800f406: 61bb str r3, [r7, #24] - break; - 800f408: e005 b.n 800f416 - } - p = p->next; - 800f40a: 69fb ldr r3, [r7, #28] - 800f40c: 681b ldr r3, [r3, #0] - 800f40e: 61fb str r3, [r7, #28] - while (p) { - 800f410: 69fb ldr r3, [r7, #28] - 800f412: 2b00 cmp r3, #0 - 800f414: d1df bne.n 800f3d6 - } - if (copy_needed) { - 800f416: 69bb ldr r3, [r7, #24] - 800f418: 2b00 cmp r3, #0 - 800f41a: d007 beq.n 800f42c - /* copy the whole packet into new pbufs */ - p = pbuf_clone(PBUF_LINK, PBUF_RAM, q); - 800f41c: 687a ldr r2, [r7, #4] - 800f41e: f44f 7120 mov.w r1, #640 ; 0x280 - 800f422: 200e movs r0, #14 - 800f424: f7f7 fb34 bl 8006a90 - 800f428: 61f8 str r0, [r7, #28] - 800f42a: e004 b.n 800f436 - } else { - /* referencing the old pbuf is enough */ - p = q; - 800f42c: 687b ldr r3, [r7, #4] - 800f42e: 61fb str r3, [r7, #28] - pbuf_ref(p); - 800f430: 69f8 ldr r0, [r7, #28] - 800f432: f7f7 f961 bl 80066f8 - } - /* packet could be taken over? */ - if (p != NULL) { - 800f436: 69fb ldr r3, [r7, #28] - 800f438: 2b00 cmp r3, #0 - 800f43a: d021 beq.n 800f480 - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q)); - result = ERR_MEM; - } -#else /* ARP_QUEUEING */ - /* always queue one packet per ARP request only, freeing a previously queued packet */ - if (arp_table[i].q != NULL) { - 800f43c: 7c7a ldrb r2, [r7, #17] - 800f43e: 4918 ldr r1, [pc, #96] ; (800f4a0 ) - 800f440: 4613 mov r3, r2 - 800f442: 005b lsls r3, r3, #1 - 800f444: 4413 add r3, r2 - 800f446: 00db lsls r3, r3, #3 - 800f448: 440b add r3, r1 - 800f44a: 681b ldr r3, [r3, #0] - 800f44c: 2b00 cmp r3, #0 - 800f44e: d00a beq.n 800f466 - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: dropped previously queued packet %p for ARP entry %"U16_F"\n", (void *)q, (u16_t)i)); - pbuf_free(arp_table[i].q); - 800f450: 7c7a ldrb r2, [r7, #17] - 800f452: 4913 ldr r1, [pc, #76] ; (800f4a0 ) - 800f454: 4613 mov r3, r2 - 800f456: 005b lsls r3, r3, #1 - 800f458: 4413 add r3, r2 - 800f45a: 00db lsls r3, r3, #3 - 800f45c: 440b add r3, r1 - 800f45e: 681b ldr r3, [r3, #0] - 800f460: 4618 mov r0, r3 - 800f462: f7f7 f8a9 bl 80065b8 - } - arp_table[i].q = p; - 800f466: 7c7a ldrb r2, [r7, #17] - 800f468: 490d ldr r1, [pc, #52] ; (800f4a0 ) - 800f46a: 4613 mov r3, r2 - 800f46c: 005b lsls r3, r3, #1 - 800f46e: 4413 add r3, r2 - 800f470: 00db lsls r3, r3, #3 - 800f472: 440b add r3, r1 - 800f474: 69fa ldr r2, [r7, #28] - 800f476: 601a str r2, [r3, #0] - result = ERR_OK; - 800f478: 2300 movs r3, #0 - 800f47a: f887 3027 strb.w r3, [r7, #39] ; 0x27 - 800f47e: e002 b.n 800f486 - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: queued packet %p on ARP entry %"U16_F"\n", (void *)q, (u16_t)i)); -#endif /* ARP_QUEUEING */ - } else { - ETHARP_STATS_INC(etharp.memerr); - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q)); - result = ERR_MEM; - 800f480: 23ff movs r3, #255 ; 0xff - 800f482: f887 3027 strb.w r3, [r7, #39] ; 0x27 - } - } - return result; - 800f486: f997 3027 ldrsb.w r3, [r7, #39] ; 0x27 -} - 800f48a: 4618 mov r0, r3 - 800f48c: 3728 adds r7, #40 ; 0x28 - 800f48e: 46bd mov sp, r7 - 800f490: bd80 pop {r7, pc} - 800f492: bf00 nop - 800f494: 0801829c .word 0x0801829c - 800f498: 08018448 .word 0x08018448 - 800f49c: 08018314 .word 0x08018314 - 800f4a0: 20009a68 .word 0x20009a68 - 800f4a4: 08018458 .word 0x08018458 - 800f4a8: 0801843c .word 0x0801843c - 800f4ac: 20009b58 .word 0x20009b58 - 800f4b0: 08018480 .word 0x08018480 - -0800f4b4 : -etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr, - const struct eth_addr *ethdst_addr, - const struct eth_addr *hwsrc_addr, const ip4_addr_t *ipsrc_addr, - const struct eth_addr *hwdst_addr, const ip4_addr_t *ipdst_addr, - const u16_t opcode) -{ - 800f4b4: b580 push {r7, lr} - 800f4b6: b08a sub sp, #40 ; 0x28 - 800f4b8: af02 add r7, sp, #8 - 800f4ba: 60f8 str r0, [r7, #12] - 800f4bc: 60b9 str r1, [r7, #8] - 800f4be: 607a str r2, [r7, #4] - 800f4c0: 603b str r3, [r7, #0] - struct pbuf *p; - err_t result = ERR_OK; - 800f4c2: 2300 movs r3, #0 - 800f4c4: 77fb strb r3, [r7, #31] - struct etharp_hdr *hdr; - - LWIP_ASSERT("netif != NULL", netif != NULL); - 800f4c6: 68fb ldr r3, [r7, #12] - 800f4c8: 2b00 cmp r3, #0 - 800f4ca: d106 bne.n 800f4da - 800f4cc: 4b3a ldr r3, [pc, #232] ; (800f5b8 ) - 800f4ce: f240 4257 movw r2, #1111 ; 0x457 - 800f4d2: 493a ldr r1, [pc, #232] ; (800f5bc ) - 800f4d4: 483a ldr r0, [pc, #232] ; (800f5c0 ) - 800f4d6: f001 fde7 bl 80110a8 - - /* allocate a pbuf for the outgoing ARP request packet */ - p = pbuf_alloc(PBUF_LINK, SIZEOF_ETHARP_HDR, PBUF_RAM); - 800f4da: f44f 7220 mov.w r2, #640 ; 0x280 - 800f4de: 211c movs r1, #28 - 800f4e0: 200e movs r0, #14 - 800f4e2: f7f6 fd85 bl 8005ff0 - 800f4e6: 61b8 str r0, [r7, #24] - /* could allocate a pbuf for an ARP request? */ - if (p == NULL) { - 800f4e8: 69bb ldr r3, [r7, #24] - 800f4ea: 2b00 cmp r3, #0 - 800f4ec: d102 bne.n 800f4f4 - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, - ("etharp_raw: could not allocate pbuf for ARP request.\n")); - ETHARP_STATS_INC(etharp.memerr); - return ERR_MEM; - 800f4ee: f04f 33ff mov.w r3, #4294967295 - 800f4f2: e05d b.n 800f5b0 - } - LWIP_ASSERT("check that first pbuf can hold struct etharp_hdr", - 800f4f4: 69bb ldr r3, [r7, #24] - 800f4f6: 895b ldrh r3, [r3, #10] - 800f4f8: 2b1b cmp r3, #27 - 800f4fa: d806 bhi.n 800f50a - 800f4fc: 4b2e ldr r3, [pc, #184] ; (800f5b8 ) - 800f4fe: f240 4262 movw r2, #1122 ; 0x462 - 800f502: 4930 ldr r1, [pc, #192] ; (800f5c4 ) - 800f504: 482e ldr r0, [pc, #184] ; (800f5c0 ) - 800f506: f001 fdcf bl 80110a8 - (p->len >= SIZEOF_ETHARP_HDR)); - - hdr = (struct etharp_hdr *)p->payload; - 800f50a: 69bb ldr r3, [r7, #24] - 800f50c: 685b ldr r3, [r3, #4] - 800f50e: 617b str r3, [r7, #20] - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_raw: sending raw ARP packet.\n")); - hdr->opcode = lwip_htons(opcode); - 800f510: 8ebb ldrh r3, [r7, #52] ; 0x34 - 800f512: 4618 mov r0, r3 - 800f514: f7f5 fce6 bl 8004ee4 - 800f518: 4603 mov r3, r0 - 800f51a: 461a mov r2, r3 - 800f51c: 697b ldr r3, [r7, #20] - 800f51e: 80da strh r2, [r3, #6] - - LWIP_ASSERT("netif->hwaddr_len must be the same as ETH_HWADDR_LEN for etharp!", - 800f520: 68fb ldr r3, [r7, #12] - 800f522: f893 3030 ldrb.w r3, [r3, #48] ; 0x30 - 800f526: 2b06 cmp r3, #6 - 800f528: d006 beq.n 800f538 - 800f52a: 4b23 ldr r3, [pc, #140] ; (800f5b8 ) - 800f52c: f240 4269 movw r2, #1129 ; 0x469 - 800f530: 4925 ldr r1, [pc, #148] ; (800f5c8 ) - 800f532: 4823 ldr r0, [pc, #140] ; (800f5c0 ) - 800f534: f001 fdb8 bl 80110a8 - (netif->hwaddr_len == ETH_HWADDR_LEN)); - - /* Write the ARP MAC-Addresses */ - SMEMCPY(&hdr->shwaddr, hwsrc_addr, ETH_HWADDR_LEN); - 800f538: 697b ldr r3, [r7, #20] - 800f53a: 3308 adds r3, #8 - 800f53c: 2206 movs r2, #6 - 800f53e: 6839 ldr r1, [r7, #0] - 800f540: 4618 mov r0, r3 - 800f542: f001 fd81 bl 8011048 - SMEMCPY(&hdr->dhwaddr, hwdst_addr, ETH_HWADDR_LEN); - 800f546: 697b ldr r3, [r7, #20] - 800f548: 3312 adds r3, #18 - 800f54a: 2206 movs r2, #6 - 800f54c: 6af9 ldr r1, [r7, #44] ; 0x2c - 800f54e: 4618 mov r0, r3 - 800f550: f001 fd7a bl 8011048 - /* Copy struct ip4_addr_wordaligned to aligned ip4_addr, to support compilers without - * structure packing. */ - IPADDR_WORDALIGNED_COPY_FROM_IP4_ADDR_T(&hdr->sipaddr, ipsrc_addr); - 800f554: 697b ldr r3, [r7, #20] - 800f556: 330e adds r3, #14 - 800f558: 6aba ldr r2, [r7, #40] ; 0x28 - 800f55a: 6812 ldr r2, [r2, #0] - 800f55c: 601a str r2, [r3, #0] - IPADDR_WORDALIGNED_COPY_FROM_IP4_ADDR_T(&hdr->dipaddr, ipdst_addr); - 800f55e: 697b ldr r3, [r7, #20] - 800f560: 3318 adds r3, #24 - 800f562: 6b3a ldr r2, [r7, #48] ; 0x30 - 800f564: 6812 ldr r2, [r2, #0] - 800f566: 601a str r2, [r3, #0] - - hdr->hwtype = PP_HTONS(LWIP_IANA_HWTYPE_ETHERNET); - 800f568: 697b ldr r3, [r7, #20] - 800f56a: 2200 movs r2, #0 - 800f56c: 701a strb r2, [r3, #0] - 800f56e: 2200 movs r2, #0 - 800f570: f042 0201 orr.w r2, r2, #1 - 800f574: 705a strb r2, [r3, #1] - hdr->proto = PP_HTONS(ETHTYPE_IP); - 800f576: 697b ldr r3, [r7, #20] - 800f578: 2200 movs r2, #0 - 800f57a: f042 0208 orr.w r2, r2, #8 - 800f57e: 709a strb r2, [r3, #2] - 800f580: 2200 movs r2, #0 - 800f582: 70da strb r2, [r3, #3] - /* set hwlen and protolen */ - hdr->hwlen = ETH_HWADDR_LEN; - 800f584: 697b ldr r3, [r7, #20] - 800f586: 2206 movs r2, #6 - 800f588: 711a strb r2, [r3, #4] - hdr->protolen = sizeof(ip4_addr_t); - 800f58a: 697b ldr r3, [r7, #20] - 800f58c: 2204 movs r2, #4 - 800f58e: 715a strb r2, [r3, #5] - if (ip4_addr_islinklocal(ipsrc_addr)) { - ethernet_output(netif, p, ethsrc_addr, ðbroadcast, ETHTYPE_ARP); - } else -#endif /* LWIP_AUTOIP */ - { - ethernet_output(netif, p, ethsrc_addr, ethdst_addr, ETHTYPE_ARP); - 800f590: f640 0306 movw r3, #2054 ; 0x806 - 800f594: 9300 str r3, [sp, #0] - 800f596: 687b ldr r3, [r7, #4] - 800f598: 68ba ldr r2, [r7, #8] - 800f59a: 69b9 ldr r1, [r7, #24] - 800f59c: 68f8 ldr r0, [r7, #12] - 800f59e: f001 fcd7 bl 8010f50 - } - - ETHARP_STATS_INC(etharp.xmit); - /* free ARP query packet */ - pbuf_free(p); - 800f5a2: 69b8 ldr r0, [r7, #24] - 800f5a4: f7f7 f808 bl 80065b8 - p = NULL; - 800f5a8: 2300 movs r3, #0 - 800f5aa: 61bb str r3, [r7, #24] - /* could not allocate pbuf for ARP request */ - - return result; - 800f5ac: f997 301f ldrsb.w r3, [r7, #31] -} - 800f5b0: 4618 mov r0, r3 - 800f5b2: 3720 adds r7, #32 - 800f5b4: 46bd mov sp, r7 - 800f5b6: bd80 pop {r7, pc} - 800f5b8: 0801829c .word 0x0801829c - 800f5bc: 080183ec .word 0x080183ec - 800f5c0: 08018314 .word 0x08018314 - 800f5c4: 0801849c .word 0x0801849c - 800f5c8: 080184d0 .word 0x080184d0 - -0800f5cc : - * ERR_MEM if the ARP packet couldn't be allocated - * any other err_t on failure - */ -static err_t -etharp_request_dst(struct netif *netif, const ip4_addr_t *ipaddr, const struct eth_addr *hw_dst_addr) -{ - 800f5cc: b580 push {r7, lr} - 800f5ce: b088 sub sp, #32 - 800f5d0: af04 add r7, sp, #16 - 800f5d2: 60f8 str r0, [r7, #12] - 800f5d4: 60b9 str r1, [r7, #8] - 800f5d6: 607a str r2, [r7, #4] - return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, hw_dst_addr, - 800f5d8: 68fb ldr r3, [r7, #12] - 800f5da: f103 012a add.w r1, r3, #42 ; 0x2a - (struct eth_addr *)netif->hwaddr, netif_ip4_addr(netif), ðzero, - 800f5de: 68fb ldr r3, [r7, #12] - 800f5e0: f103 002a add.w r0, r3, #42 ; 0x2a - 800f5e4: 68fb ldr r3, [r7, #12] - 800f5e6: 3304 adds r3, #4 - return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, hw_dst_addr, - 800f5e8: 2201 movs r2, #1 - 800f5ea: 9203 str r2, [sp, #12] - 800f5ec: 68ba ldr r2, [r7, #8] - 800f5ee: 9202 str r2, [sp, #8] - 800f5f0: 4a06 ldr r2, [pc, #24] ; (800f60c ) - 800f5f2: 9201 str r2, [sp, #4] - 800f5f4: 9300 str r3, [sp, #0] - 800f5f6: 4603 mov r3, r0 - 800f5f8: 687a ldr r2, [r7, #4] - 800f5fa: 68f8 ldr r0, [r7, #12] - 800f5fc: f7ff ff5a bl 800f4b4 - 800f600: 4603 mov r3, r0 - ipaddr, ARP_REQUEST); -} - 800f602: 4618 mov r0, r3 - 800f604: 3710 adds r7, #16 - 800f606: 46bd mov sp, r7 - 800f608: bd80 pop {r7, pc} - 800f60a: bf00 nop - 800f60c: 08018adc .word 0x08018adc - -0800f610 : - * ERR_MEM if the ARP packet couldn't be allocated - * any other err_t on failure - */ -err_t -etharp_request(struct netif *netif, const ip4_addr_t *ipaddr) -{ - 800f610: b580 push {r7, lr} - 800f612: b082 sub sp, #8 - 800f614: af00 add r7, sp, #0 - 800f616: 6078 str r0, [r7, #4] - 800f618: 6039 str r1, [r7, #0] - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_request: sending ARP request.\n")); - return etharp_request_dst(netif, ipaddr, ðbroadcast); - 800f61a: 4a05 ldr r2, [pc, #20] ; (800f630 ) - 800f61c: 6839 ldr r1, [r7, #0] - 800f61e: 6878 ldr r0, [r7, #4] - 800f620: f7ff ffd4 bl 800f5cc - 800f624: 4603 mov r3, r0 -} - 800f626: 4618 mov r0, r3 - 800f628: 3708 adds r7, #8 - 800f62a: 46bd mov sp, r7 - 800f62c: bd80 pop {r7, pc} - 800f62e: bf00 nop - 800f630: 08018ad4 .word 0x08018ad4 - -0800f634 : - * @param p the icmp echo request packet, p->payload pointing to the icmp header - * @param inp the netif on which this packet was received - */ -void -icmp_input(struct pbuf *p, struct netif *inp) -{ - 800f634: b580 push {r7, lr} - 800f636: b08e sub sp, #56 ; 0x38 - 800f638: af04 add r7, sp, #16 - 800f63a: 6078 str r0, [r7, #4] - 800f63c: 6039 str r1, [r7, #0] - const ip4_addr_t *src; - - ICMP_STATS_INC(icmp.recv); - MIB2_STATS_INC(mib2.icmpinmsgs); - - iphdr_in = ip4_current_header(); - 800f63e: 4b79 ldr r3, [pc, #484] ; (800f824 ) - 800f640: 689b ldr r3, [r3, #8] - 800f642: 627b str r3, [r7, #36] ; 0x24 - hlen = IPH_HL_BYTES(iphdr_in); - 800f644: 6a7b ldr r3, [r7, #36] ; 0x24 - 800f646: 781b ldrb r3, [r3, #0] - 800f648: f003 030f and.w r3, r3, #15 - 800f64c: b2db uxtb r3, r3 - 800f64e: 009b lsls r3, r3, #2 - 800f650: b2db uxtb r3, r3 - 800f652: 847b strh r3, [r7, #34] ; 0x22 - if (hlen < IP_HLEN) { - 800f654: 8c7b ldrh r3, [r7, #34] ; 0x22 - 800f656: 2b13 cmp r3, #19 - 800f658: f240 80cd bls.w 800f7f6 - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: short IP header (%"S16_F" bytes) received\n", hlen)); - goto lenerr; - } - if (p->len < sizeof(u16_t) * 2) { - 800f65c: 687b ldr r3, [r7, #4] - 800f65e: 895b ldrh r3, [r3, #10] - 800f660: 2b03 cmp r3, #3 - 800f662: f240 80ca bls.w 800f7fa - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: short ICMP (%"U16_F" bytes) received\n", p->tot_len)); - goto lenerr; - } - - type = *((u8_t *)p->payload); - 800f666: 687b ldr r3, [r7, #4] - 800f668: 685b ldr r3, [r3, #4] - 800f66a: 781b ldrb r3, [r3, #0] - 800f66c: f887 3021 strb.w r3, [r7, #33] ; 0x21 -#ifdef LWIP_DEBUG - code = *(((u8_t *)p->payload) + 1); - /* if debug is enabled but debug statement below is somehow disabled: */ - LWIP_UNUSED_ARG(code); -#endif /* LWIP_DEBUG */ - switch (type) { - 800f670: f897 3021 ldrb.w r3, [r7, #33] ; 0x21 - 800f674: 2b00 cmp r3, #0 - 800f676: f000 80b7 beq.w 800f7e8 - 800f67a: 2b08 cmp r3, #8 - 800f67c: f040 80b7 bne.w 800f7ee - (as obviously, an echo request has been sent, too). */ - MIB2_STATS_INC(mib2.icmpinechoreps); - break; - case ICMP_ECHO: - MIB2_STATS_INC(mib2.icmpinechos); - src = ip4_current_dest_addr(); - 800f680: 4b69 ldr r3, [pc, #420] ; (800f828 ) - 800f682: 61fb str r3, [r7, #28] - /* multicast destination address? */ - if (ip4_addr_ismulticast(ip4_current_dest_addr())) { - 800f684: 4b67 ldr r3, [pc, #412] ; (800f824 ) - 800f686: 695b ldr r3, [r3, #20] - 800f688: f003 03f0 and.w r3, r3, #240 ; 0xf0 - 800f68c: 2be0 cmp r3, #224 ; 0xe0 - 800f68e: f000 80bb beq.w 800f808 - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: Not echoing to multicast pings\n")); - goto icmperr; -#endif /* LWIP_MULTICAST_PING */ - } - /* broadcast destination address? */ - if (ip4_addr_isbroadcast(ip4_current_dest_addr(), ip_current_netif())) { - 800f692: 4b64 ldr r3, [pc, #400] ; (800f824 ) - 800f694: 695b ldr r3, [r3, #20] - 800f696: 4a63 ldr r2, [pc, #396] ; (800f824 ) - 800f698: 6812 ldr r2, [r2, #0] - 800f69a: 4611 mov r1, r2 - 800f69c: 4618 mov r0, r3 - 800f69e: f000 fc0b bl 800feb8 - 800f6a2: 4603 mov r3, r0 - 800f6a4: 2b00 cmp r3, #0 - 800f6a6: f040 80b1 bne.w 800f80c - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: Not echoing to broadcast pings\n")); - goto icmperr; -#endif /* LWIP_BROADCAST_PING */ - } - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ping\n")); - if (p->tot_len < sizeof(struct icmp_echo_hdr)) { - 800f6aa: 687b ldr r3, [r7, #4] - 800f6ac: 891b ldrh r3, [r3, #8] - 800f6ae: 2b07 cmp r3, #7 - 800f6b0: f240 80a5 bls.w 800f7fe - return; - } - } -#endif -#if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN - if (pbuf_add_header(p, hlen + PBUF_LINK_HLEN + PBUF_LINK_ENCAPSULATION_HLEN)) { - 800f6b4: 8c7b ldrh r3, [r7, #34] ; 0x22 - 800f6b6: 330e adds r3, #14 - 800f6b8: 4619 mov r1, r3 - 800f6ba: 6878 ldr r0, [r7, #4] - 800f6bc: f7f6 fee6 bl 800648c - 800f6c0: 4603 mov r3, r0 - 800f6c2: 2b00 cmp r3, #0 - 800f6c4: d04b beq.n 800f75e - /* p is not big enough to contain link headers - * allocate a new one and copy p into it - */ - struct pbuf *r; - u16_t alloc_len = (u16_t)(p->tot_len + hlen); - 800f6c6: 687b ldr r3, [r7, #4] - 800f6c8: 891a ldrh r2, [r3, #8] - 800f6ca: 8c7b ldrh r3, [r7, #34] ; 0x22 - 800f6cc: 4413 add r3, r2 - 800f6ce: 837b strh r3, [r7, #26] - if (alloc_len < p->tot_len) { - 800f6d0: 687b ldr r3, [r7, #4] - 800f6d2: 891b ldrh r3, [r3, #8] - 800f6d4: 8b7a ldrh r2, [r7, #26] - 800f6d6: 429a cmp r2, r3 - 800f6d8: f0c0 809a bcc.w 800f810 - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: allocating new pbuf failed (tot_len overflow)\n")); - goto icmperr; - } - /* allocate new packet buffer with space for link headers */ - r = pbuf_alloc(PBUF_LINK, alloc_len, PBUF_RAM); - 800f6dc: 8b7b ldrh r3, [r7, #26] - 800f6de: f44f 7220 mov.w r2, #640 ; 0x280 - 800f6e2: 4619 mov r1, r3 - 800f6e4: 200e movs r0, #14 - 800f6e6: f7f6 fc83 bl 8005ff0 - 800f6ea: 6178 str r0, [r7, #20] - if (r == NULL) { - 800f6ec: 697b ldr r3, [r7, #20] - 800f6ee: 2b00 cmp r3, #0 - 800f6f0: f000 8090 beq.w 800f814 - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: allocating new pbuf failed\n")); - goto icmperr; - } - if (r->len < hlen + sizeof(struct icmp_echo_hdr)) { - 800f6f4: 697b ldr r3, [r7, #20] - 800f6f6: 895b ldrh r3, [r3, #10] - 800f6f8: 461a mov r2, r3 - 800f6fa: 8c7b ldrh r3, [r7, #34] ; 0x22 - 800f6fc: 3308 adds r3, #8 - 800f6fe: 429a cmp r2, r3 - 800f700: d203 bcs.n 800f70a - LWIP_DEBUGF(ICMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("first pbuf cannot hold the ICMP header")); - pbuf_free(r); - 800f702: 6978 ldr r0, [r7, #20] - 800f704: f7f6 ff58 bl 80065b8 - goto icmperr; - 800f708: e085 b.n 800f816 - } - /* copy the ip header */ - MEMCPY(r->payload, iphdr_in, hlen); - 800f70a: 697b ldr r3, [r7, #20] - 800f70c: 685b ldr r3, [r3, #4] - 800f70e: 8c7a ldrh r2, [r7, #34] ; 0x22 - 800f710: 6a79 ldr r1, [r7, #36] ; 0x24 - 800f712: 4618 mov r0, r3 - 800f714: f001 fc98 bl 8011048 - /* switch r->payload back to icmp header (cannot fail) */ - if (pbuf_remove_header(r, hlen)) { - 800f718: 8c7b ldrh r3, [r7, #34] ; 0x22 - 800f71a: 4619 mov r1, r3 - 800f71c: 6978 ldr r0, [r7, #20] - 800f71e: f7f6 fec5 bl 80064ac - 800f722: 4603 mov r3, r0 - 800f724: 2b00 cmp r3, #0 - 800f726: d009 beq.n 800f73c - LWIP_ASSERT("icmp_input: moving r->payload to icmp header failed\n", 0); - 800f728: 4b40 ldr r3, [pc, #256] ; (800f82c ) - 800f72a: 22b6 movs r2, #182 ; 0xb6 - 800f72c: 4940 ldr r1, [pc, #256] ; (800f830 ) - 800f72e: 4841 ldr r0, [pc, #260] ; (800f834 ) - 800f730: f001 fcba bl 80110a8 - pbuf_free(r); - 800f734: 6978 ldr r0, [r7, #20] - 800f736: f7f6 ff3f bl 80065b8 - goto icmperr; - 800f73a: e06c b.n 800f816 - } - /* copy the rest of the packet without ip header */ - if (pbuf_copy(r, p) != ERR_OK) { - 800f73c: 6879 ldr r1, [r7, #4] - 800f73e: 6978 ldr r0, [r7, #20] - 800f740: f7f7 f862 bl 8006808 - 800f744: 4603 mov r3, r0 - 800f746: 2b00 cmp r3, #0 - 800f748: d003 beq.n 800f752 - LWIP_DEBUGF(ICMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("icmp_input: copying to new pbuf failed")); - pbuf_free(r); - 800f74a: 6978 ldr r0, [r7, #20] - 800f74c: f7f6 ff34 bl 80065b8 - goto icmperr; - 800f750: e061 b.n 800f816 - } - /* free the original p */ - pbuf_free(p); - 800f752: 6878 ldr r0, [r7, #4] - 800f754: f7f6 ff30 bl 80065b8 - /* we now have an identical copy of p that has room for link headers */ - p = r; - 800f758: 697b ldr r3, [r7, #20] - 800f75a: 607b str r3, [r7, #4] - 800f75c: e00f b.n 800f77e - } else { - /* restore p->payload to point to icmp header (cannot fail) */ - if (pbuf_remove_header(p, hlen + PBUF_LINK_HLEN + PBUF_LINK_ENCAPSULATION_HLEN)) { - 800f75e: 8c7b ldrh r3, [r7, #34] ; 0x22 - 800f760: 330e adds r3, #14 - 800f762: 4619 mov r1, r3 - 800f764: 6878 ldr r0, [r7, #4] - 800f766: f7f6 fea1 bl 80064ac - 800f76a: 4603 mov r3, r0 - 800f76c: 2b00 cmp r3, #0 - 800f76e: d006 beq.n 800f77e - LWIP_ASSERT("icmp_input: restoring original p->payload failed\n", 0); - 800f770: 4b2e ldr r3, [pc, #184] ; (800f82c ) - 800f772: 22c7 movs r2, #199 ; 0xc7 - 800f774: 4930 ldr r1, [pc, #192] ; (800f838 ) - 800f776: 482f ldr r0, [pc, #188] ; (800f834 ) - 800f778: f001 fc96 bl 80110a8 - goto icmperr; - 800f77c: e04b b.n 800f816 - } -#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */ - /* At this point, all checks are OK. */ - /* We generate an answer by switching the dest and src ip addresses, - * setting the icmp type to ECHO_RESPONSE and updating the checksum. */ - iecho = (struct icmp_echo_hdr *)p->payload; - 800f77e: 687b ldr r3, [r7, #4] - 800f780: 685b ldr r3, [r3, #4] - 800f782: 613b str r3, [r7, #16] - if (pbuf_add_header(p, hlen)) { - 800f784: 8c7b ldrh r3, [r7, #34] ; 0x22 - 800f786: 4619 mov r1, r3 - 800f788: 6878 ldr r0, [r7, #4] - 800f78a: f7f6 fe7f bl 800648c - 800f78e: 4603 mov r3, r0 - 800f790: 2b00 cmp r3, #0 - 800f792: d12b bne.n 800f7ec - LWIP_DEBUGF(ICMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("Can't move over header in packet")); - } else { - err_t ret; - struct ip_hdr *iphdr = (struct ip_hdr *)p->payload; - 800f794: 687b ldr r3, [r7, #4] - 800f796: 685b ldr r3, [r3, #4] - 800f798: 60fb str r3, [r7, #12] - ip4_addr_copy(iphdr->src, *src); - 800f79a: 69fb ldr r3, [r7, #28] - 800f79c: 681a ldr r2, [r3, #0] - 800f79e: 68fb ldr r3, [r7, #12] - 800f7a0: 60da str r2, [r3, #12] - ip4_addr_copy(iphdr->dest, *ip4_current_src_addr()); - 800f7a2: 4b20 ldr r3, [pc, #128] ; (800f824 ) - 800f7a4: 691a ldr r2, [r3, #16] - 800f7a6: 68fb ldr r3, [r7, #12] - 800f7a8: 611a str r2, [r3, #16] - ICMPH_TYPE_SET(iecho, ICMP_ER); - 800f7aa: 693b ldr r3, [r7, #16] - 800f7ac: 2200 movs r2, #0 - 800f7ae: 701a strb r2, [r3, #0] - else { - iecho->chksum = 0; - } -#endif /* LWIP_CHECKSUM_CTRL_PER_NETIF */ -#else /* CHECKSUM_GEN_ICMP */ - iecho->chksum = 0; - 800f7b0: 693b ldr r3, [r7, #16] - 800f7b2: 2200 movs r2, #0 - 800f7b4: 709a strb r2, [r3, #2] - 800f7b6: 2200 movs r2, #0 - 800f7b8: 70da strb r2, [r3, #3] -#endif /* CHECKSUM_GEN_ICMP */ - - /* Set the correct TTL and recalculate the header checksum. */ - IPH_TTL_SET(iphdr, ICMP_TTL); - 800f7ba: 68fb ldr r3, [r7, #12] - 800f7bc: 22ff movs r2, #255 ; 0xff - 800f7be: 721a strb r2, [r3, #8] - IPH_CHKSUM_SET(iphdr, 0); - 800f7c0: 68fb ldr r3, [r7, #12] - 800f7c2: 2200 movs r2, #0 - 800f7c4: 729a strb r2, [r3, #10] - 800f7c6: 2200 movs r2, #0 - 800f7c8: 72da strb r2, [r3, #11] - MIB2_STATS_INC(mib2.icmpoutmsgs); - /* increase number of echo replies attempted to send */ - MIB2_STATS_INC(mib2.icmpoutechoreps); - - /* send an ICMP packet */ - ret = ip4_output_if(p, src, LWIP_IP_HDRINCL, - 800f7ca: 683b ldr r3, [r7, #0] - 800f7cc: 9302 str r3, [sp, #8] - 800f7ce: 2301 movs r3, #1 - 800f7d0: 9301 str r3, [sp, #4] - 800f7d2: 2300 movs r3, #0 - 800f7d4: 9300 str r3, [sp, #0] - 800f7d6: 23ff movs r3, #255 ; 0xff - 800f7d8: 2200 movs r2, #0 - 800f7da: 69f9 ldr r1, [r7, #28] - 800f7dc: 6878 ldr r0, [r7, #4] - 800f7de: f000 fa93 bl 800fd08 - 800f7e2: 4603 mov r3, r0 - 800f7e4: 72fb strb r3, [r7, #11] - ICMP_TTL, 0, IP_PROTO_ICMP, inp); - if (ret != ERR_OK) { - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ip_output_if returned an error: %s\n", lwip_strerr(ret))); - } - } - break; - 800f7e6: e001 b.n 800f7ec - break; - 800f7e8: bf00 nop - 800f7ea: e000 b.n 800f7ee - break; - 800f7ec: bf00 nop - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ICMP type %"S16_F" code %"S16_F" not supported.\n", - (s16_t)type, (s16_t)code)); - ICMP_STATS_INC(icmp.proterr); - ICMP_STATS_INC(icmp.drop); - } - pbuf_free(p); - 800f7ee: 6878 ldr r0, [r7, #4] - 800f7f0: f7f6 fee2 bl 80065b8 - return; - 800f7f4: e013 b.n 800f81e - goto lenerr; - 800f7f6: bf00 nop - 800f7f8: e002 b.n 800f800 - goto lenerr; - 800f7fa: bf00 nop - 800f7fc: e000 b.n 800f800 - goto lenerr; - 800f7fe: bf00 nop -lenerr: - pbuf_free(p); - 800f800: 6878 ldr r0, [r7, #4] - 800f802: f7f6 fed9 bl 80065b8 - ICMP_STATS_INC(icmp.lenerr); - MIB2_STATS_INC(mib2.icmpinerrors); - return; - 800f806: e00a b.n 800f81e - goto icmperr; - 800f808: bf00 nop - 800f80a: e004 b.n 800f816 - goto icmperr; - 800f80c: bf00 nop - 800f80e: e002 b.n 800f816 - goto icmperr; - 800f810: bf00 nop - 800f812: e000 b.n 800f816 - goto icmperr; - 800f814: bf00 nop -#if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN || !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING -icmperr: - pbuf_free(p); - 800f816: 6878 ldr r0, [r7, #4] - 800f818: f7f6 fece bl 80065b8 - ICMP_STATS_INC(icmp.err); - MIB2_STATS_INC(mib2.icmpinerrors); - return; - 800f81c: bf00 nop -#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN || !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING */ -} - 800f81e: 3728 adds r7, #40 ; 0x28 - 800f820: 46bd mov sp, r7 - 800f822: bd80 pop {r7, pc} - 800f824: 20006444 .word 0x20006444 - 800f828: 20006458 .word 0x20006458 - 800f82c: 08018514 .word 0x08018514 - 800f830: 0801854c .word 0x0801854c - 800f834: 08018584 .word 0x08018584 - 800f838: 080185ac .word 0x080185ac - -0800f83c : - * p->payload pointing to the IP header - * @param t type of the 'unreachable' packet - */ -void -icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t) -{ - 800f83c: b580 push {r7, lr} - 800f83e: b082 sub sp, #8 - 800f840: af00 add r7, sp, #0 - 800f842: 6078 str r0, [r7, #4] - 800f844: 460b mov r3, r1 - 800f846: 70fb strb r3, [r7, #3] - MIB2_STATS_INC(mib2.icmpoutdestunreachs); - icmp_send_response(p, ICMP_DUR, t); - 800f848: 78fb ldrb r3, [r7, #3] - 800f84a: 461a mov r2, r3 - 800f84c: 2103 movs r1, #3 - 800f84e: 6878 ldr r0, [r7, #4] - 800f850: f000 f814 bl 800f87c -} - 800f854: bf00 nop - 800f856: 3708 adds r7, #8 - 800f858: 46bd mov sp, r7 - 800f85a: bd80 pop {r7, pc} - -0800f85c : - * p->payload pointing to the IP header - * @param t type of the 'time exceeded' packet - */ -void -icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t) -{ - 800f85c: b580 push {r7, lr} - 800f85e: b082 sub sp, #8 - 800f860: af00 add r7, sp, #0 - 800f862: 6078 str r0, [r7, #4] - 800f864: 460b mov r3, r1 - 800f866: 70fb strb r3, [r7, #3] - MIB2_STATS_INC(mib2.icmpouttimeexcds); - icmp_send_response(p, ICMP_TE, t); - 800f868: 78fb ldrb r3, [r7, #3] - 800f86a: 461a mov r2, r3 - 800f86c: 210b movs r1, #11 - 800f86e: 6878 ldr r0, [r7, #4] - 800f870: f000 f804 bl 800f87c -} - 800f874: bf00 nop - 800f876: 3708 adds r7, #8 - 800f878: 46bd mov sp, r7 - 800f87a: bd80 pop {r7, pc} - -0800f87c : - * @param type Type of the ICMP header - * @param code Code of the ICMP header - */ -static void -icmp_send_response(struct pbuf *p, u8_t type, u8_t code) -{ - 800f87c: b580 push {r7, lr} - 800f87e: b08c sub sp, #48 ; 0x30 - 800f880: af04 add r7, sp, #16 - 800f882: 6078 str r0, [r7, #4] - 800f884: 460b mov r3, r1 - 800f886: 70fb strb r3, [r7, #3] - 800f888: 4613 mov r3, r2 - 800f88a: 70bb strb r3, [r7, #2] - - /* increase number of messages attempted to send */ - MIB2_STATS_INC(mib2.icmpoutmsgs); - - /* ICMP header + IP header + 8 bytes of data */ - q = pbuf_alloc(PBUF_IP, sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE, - 800f88c: f44f 7220 mov.w r2, #640 ; 0x280 - 800f890: 2124 movs r1, #36 ; 0x24 - 800f892: 2022 movs r0, #34 ; 0x22 - 800f894: f7f6 fbac bl 8005ff0 - 800f898: 61f8 str r0, [r7, #28] - PBUF_RAM); - if (q == NULL) { - 800f89a: 69fb ldr r3, [r7, #28] - 800f89c: 2b00 cmp r3, #0 - 800f89e: d04c beq.n 800f93a - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded: failed to allocate pbuf for ICMP packet.\n")); - MIB2_STATS_INC(mib2.icmpouterrors); - return; - } - LWIP_ASSERT("check that first pbuf can hold icmp message", - 800f8a0: 69fb ldr r3, [r7, #28] - 800f8a2: 895b ldrh r3, [r3, #10] - 800f8a4: 2b23 cmp r3, #35 ; 0x23 - 800f8a6: d806 bhi.n 800f8b6 - 800f8a8: 4b26 ldr r3, [pc, #152] ; (800f944 ) - 800f8aa: f44f 72b4 mov.w r2, #360 ; 0x168 - 800f8ae: 4926 ldr r1, [pc, #152] ; (800f948 ) - 800f8b0: 4826 ldr r0, [pc, #152] ; (800f94c ) - 800f8b2: f001 fbf9 bl 80110a8 - (q->len >= (sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE))); - - iphdr = (struct ip_hdr *)p->payload; - 800f8b6: 687b ldr r3, [r7, #4] - 800f8b8: 685b ldr r3, [r3, #4] - 800f8ba: 61bb str r3, [r7, #24] - ip4_addr_debug_print_val(ICMP_DEBUG, iphdr->src); - LWIP_DEBUGF(ICMP_DEBUG, (" to ")); - ip4_addr_debug_print_val(ICMP_DEBUG, iphdr->dest); - LWIP_DEBUGF(ICMP_DEBUG, ("\n")); - - icmphdr = (struct icmp_echo_hdr *)q->payload; - 800f8bc: 69fb ldr r3, [r7, #28] - 800f8be: 685b ldr r3, [r3, #4] - 800f8c0: 617b str r3, [r7, #20] - icmphdr->type = type; - 800f8c2: 697b ldr r3, [r7, #20] - 800f8c4: 78fa ldrb r2, [r7, #3] - 800f8c6: 701a strb r2, [r3, #0] - icmphdr->code = code; - 800f8c8: 697b ldr r3, [r7, #20] - 800f8ca: 78ba ldrb r2, [r7, #2] - 800f8cc: 705a strb r2, [r3, #1] - icmphdr->id = 0; - 800f8ce: 697b ldr r3, [r7, #20] - 800f8d0: 2200 movs r2, #0 - 800f8d2: 711a strb r2, [r3, #4] - 800f8d4: 2200 movs r2, #0 - 800f8d6: 715a strb r2, [r3, #5] - icmphdr->seqno = 0; - 800f8d8: 697b ldr r3, [r7, #20] - 800f8da: 2200 movs r2, #0 - 800f8dc: 719a strb r2, [r3, #6] - 800f8de: 2200 movs r2, #0 - 800f8e0: 71da strb r2, [r3, #7] - - /* copy fields from original packet */ - SMEMCPY((u8_t *)q->payload + sizeof(struct icmp_echo_hdr), (u8_t *)p->payload, - 800f8e2: 69fb ldr r3, [r7, #28] - 800f8e4: 685b ldr r3, [r3, #4] - 800f8e6: f103 0008 add.w r0, r3, #8 - 800f8ea: 687b ldr r3, [r7, #4] - 800f8ec: 685b ldr r3, [r3, #4] - 800f8ee: 221c movs r2, #28 - 800f8f0: 4619 mov r1, r3 - 800f8f2: f001 fba9 bl 8011048 - IP_HLEN + ICMP_DEST_UNREACH_DATASIZE); - - ip4_addr_copy(iphdr_src, iphdr->src); - 800f8f6: 69bb ldr r3, [r7, #24] - 800f8f8: 68db ldr r3, [r3, #12] - 800f8fa: 60fb str r3, [r7, #12] - ip4_addr_t iphdr_dst; - ip4_addr_copy(iphdr_dst, iphdr->dest); - netif = ip4_route_src(&iphdr_dst, &iphdr_src); - } -#else - netif = ip4_route(&iphdr_src); - 800f8fc: f107 030c add.w r3, r7, #12 - 800f900: 4618 mov r0, r3 - 800f902: f000 f825 bl 800f950 - 800f906: 6138 str r0, [r7, #16] -#endif - if (netif != NULL) { - 800f908: 693b ldr r3, [r7, #16] - 800f90a: 2b00 cmp r3, #0 - 800f90c: d011 beq.n 800f932 - /* calculate checksum */ - icmphdr->chksum = 0; - 800f90e: 697b ldr r3, [r7, #20] - 800f910: 2200 movs r2, #0 - 800f912: 709a strb r2, [r3, #2] - 800f914: 2200 movs r2, #0 - 800f916: 70da strb r2, [r3, #3] - IF__NETIF_CHECKSUM_ENABLED(netif, NETIF_CHECKSUM_GEN_ICMP) { - icmphdr->chksum = inet_chksum(icmphdr, q->len); - } -#endif - ICMP_STATS_INC(icmp.xmit); - ip4_output_if(q, NULL, &iphdr_src, ICMP_TTL, 0, IP_PROTO_ICMP, netif); - 800f918: f107 020c add.w r2, r7, #12 - 800f91c: 693b ldr r3, [r7, #16] - 800f91e: 9302 str r3, [sp, #8] - 800f920: 2301 movs r3, #1 - 800f922: 9301 str r3, [sp, #4] - 800f924: 2300 movs r3, #0 - 800f926: 9300 str r3, [sp, #0] - 800f928: 23ff movs r3, #255 ; 0xff - 800f92a: 2100 movs r1, #0 - 800f92c: 69f8 ldr r0, [r7, #28] - 800f92e: f000 f9eb bl 800fd08 - } - pbuf_free(q); - 800f932: 69f8 ldr r0, [r7, #28] - 800f934: f7f6 fe40 bl 80065b8 - 800f938: e000 b.n 800f93c - return; - 800f93a: bf00 nop -} - 800f93c: 3720 adds r7, #32 - 800f93e: 46bd mov sp, r7 - 800f940: bd80 pop {r7, pc} - 800f942: bf00 nop - 800f944: 08018514 .word 0x08018514 - 800f948: 080185e0 .word 0x080185e0 - 800f94c: 08018584 .word 0x08018584 - -0800f950 : - * @param dest the destination IP address for which to find the route - * @return the netif on which to send to reach dest - */ -struct netif * -ip4_route(const ip4_addr_t *dest) -{ - 800f950: b480 push {r7} - 800f952: b085 sub sp, #20 - 800f954: af00 add r7, sp, #0 - 800f956: 6078 str r0, [r7, #4] - - /* bug #54569: in case LWIP_SINGLE_NETIF=1 and LWIP_DEBUGF() disabled, the following loop is optimized away */ - LWIP_UNUSED_ARG(dest); - - /* iterate through netifs */ - NETIF_FOREACH(netif) { - 800f958: 4b33 ldr r3, [pc, #204] ; (800fa28 ) - 800f95a: 681b ldr r3, [r3, #0] - 800f95c: 60fb str r3, [r7, #12] - 800f95e: e036 b.n 800f9ce - /* is the netif up, does it have a link and a valid address? */ - if (netif_is_up(netif) && netif_is_link_up(netif) && !ip4_addr_isany_val(*netif_ip4_addr(netif))) { - 800f960: 68fb ldr r3, [r7, #12] - 800f962: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 800f966: f003 0301 and.w r3, r3, #1 - 800f96a: b2db uxtb r3, r3 - 800f96c: 2b00 cmp r3, #0 - 800f96e: d02b beq.n 800f9c8 - 800f970: 68fb ldr r3, [r7, #12] - 800f972: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 800f976: 089b lsrs r3, r3, #2 - 800f978: f003 0301 and.w r3, r3, #1 - 800f97c: b2db uxtb r3, r3 - 800f97e: 2b00 cmp r3, #0 - 800f980: d022 beq.n 800f9c8 - 800f982: 68fb ldr r3, [r7, #12] - 800f984: 3304 adds r3, #4 - 800f986: 681b ldr r3, [r3, #0] - 800f988: 2b00 cmp r3, #0 - 800f98a: d01d beq.n 800f9c8 - /* network mask matches? */ - if (ip4_addr_netcmp(dest, netif_ip4_addr(netif), netif_ip4_netmask(netif))) { - 800f98c: 687b ldr r3, [r7, #4] - 800f98e: 681a ldr r2, [r3, #0] - 800f990: 68fb ldr r3, [r7, #12] - 800f992: 3304 adds r3, #4 - 800f994: 681b ldr r3, [r3, #0] - 800f996: 405a eors r2, r3 - 800f998: 68fb ldr r3, [r7, #12] - 800f99a: 3308 adds r3, #8 - 800f99c: 681b ldr r3, [r3, #0] - 800f99e: 4013 ands r3, r2 - 800f9a0: 2b00 cmp r3, #0 - 800f9a2: d101 bne.n 800f9a8 - /* return netif on which to forward IP packet */ - return netif; - 800f9a4: 68fb ldr r3, [r7, #12] - 800f9a6: e038 b.n 800fa1a - } - /* gateway matches on a non broadcast interface? (i.e. peer in a point to point interface) */ - if (((netif->flags & NETIF_FLAG_BROADCAST) == 0) && ip4_addr_cmp(dest, netif_ip4_gw(netif))) { - 800f9a8: 68fb ldr r3, [r7, #12] - 800f9aa: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 800f9ae: f003 0302 and.w r3, r3, #2 - 800f9b2: 2b00 cmp r3, #0 - 800f9b4: d108 bne.n 800f9c8 - 800f9b6: 687b ldr r3, [r7, #4] - 800f9b8: 681a ldr r2, [r3, #0] - 800f9ba: 68fb ldr r3, [r7, #12] - 800f9bc: 330c adds r3, #12 - 800f9be: 681b ldr r3, [r3, #0] - 800f9c0: 429a cmp r2, r3 - 800f9c2: d101 bne.n 800f9c8 - /* return netif on which to forward IP packet */ - return netif; - 800f9c4: 68fb ldr r3, [r7, #12] - 800f9c6: e028 b.n 800fa1a - NETIF_FOREACH(netif) { - 800f9c8: 68fb ldr r3, [r7, #12] - 800f9ca: 681b ldr r3, [r3, #0] - 800f9cc: 60fb str r3, [r7, #12] - 800f9ce: 68fb ldr r3, [r7, #12] - 800f9d0: 2b00 cmp r3, #0 - 800f9d2: d1c5 bne.n 800f960 - return netif; - } -#endif -#endif /* !LWIP_SINGLE_NETIF */ - - if ((netif_default == NULL) || !netif_is_up(netif_default) || !netif_is_link_up(netif_default) || - 800f9d4: 4b15 ldr r3, [pc, #84] ; (800fa2c ) - 800f9d6: 681b ldr r3, [r3, #0] - 800f9d8: 2b00 cmp r3, #0 - 800f9da: d01a beq.n 800fa12 - 800f9dc: 4b13 ldr r3, [pc, #76] ; (800fa2c ) - 800f9de: 681b ldr r3, [r3, #0] - 800f9e0: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 800f9e4: f003 0301 and.w r3, r3, #1 - 800f9e8: 2b00 cmp r3, #0 - 800f9ea: d012 beq.n 800fa12 - 800f9ec: 4b0f ldr r3, [pc, #60] ; (800fa2c ) - 800f9ee: 681b ldr r3, [r3, #0] - 800f9f0: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 800f9f4: f003 0304 and.w r3, r3, #4 - 800f9f8: 2b00 cmp r3, #0 - 800f9fa: d00a beq.n 800fa12 - ip4_addr_isany_val(*netif_ip4_addr(netif_default)) || ip4_addr_isloopback(dest)) { - 800f9fc: 4b0b ldr r3, [pc, #44] ; (800fa2c ) - 800f9fe: 681b ldr r3, [r3, #0] - 800fa00: 3304 adds r3, #4 - 800fa02: 681b ldr r3, [r3, #0] - if ((netif_default == NULL) || !netif_is_up(netif_default) || !netif_is_link_up(netif_default) || - 800fa04: 2b00 cmp r3, #0 - 800fa06: d004 beq.n 800fa12 - ip4_addr_isany_val(*netif_ip4_addr(netif_default)) || ip4_addr_isloopback(dest)) { - 800fa08: 687b ldr r3, [r7, #4] - 800fa0a: 681b ldr r3, [r3, #0] - 800fa0c: b2db uxtb r3, r3 - 800fa0e: 2b7f cmp r3, #127 ; 0x7f - 800fa10: d101 bne.n 800fa16 - If this is not good enough for you, use LWIP_HOOK_IP4_ROUTE() */ - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip4_route: No route to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - ip4_addr1_16(dest), ip4_addr2_16(dest), ip4_addr3_16(dest), ip4_addr4_16(dest))); - IP_STATS_INC(ip.rterr); - MIB2_STATS_INC(mib2.ipoutnoroutes); - return NULL; - 800fa12: 2300 movs r3, #0 - 800fa14: e001 b.n 800fa1a - } - - return netif_default; - 800fa16: 4b05 ldr r3, [pc, #20] ; (800fa2c ) - 800fa18: 681b ldr r3, [r3, #0] -} - 800fa1a: 4618 mov r0, r3 - 800fa1c: 3714 adds r7, #20 - 800fa1e: 46bd mov sp, r7 - 800fa20: f85d 7b04 ldr.w r7, [sp], #4 - 800fa24: 4770 bx lr - 800fa26: bf00 nop - 800fa28: 200099c8 .word 0x200099c8 - 800fa2c: 200099cc .word 0x200099cc - -0800fa30 : -#endif /* IP_FORWARD */ - -/** Return true if the current input packet should be accepted on this netif */ -static int -ip4_input_accept(struct netif *netif) -{ - 800fa30: b580 push {r7, lr} - 800fa32: b082 sub sp, #8 - 800fa34: af00 add r7, sp, #0 - 800fa36: 6078 str r0, [r7, #4] - ip4_addr_get_u32(ip4_current_dest_addr()) & ip4_addr_get_u32(netif_ip4_netmask(netif)), - ip4_addr_get_u32(netif_ip4_addr(netif)) & ip4_addr_get_u32(netif_ip4_netmask(netif)), - ip4_addr_get_u32(ip4_current_dest_addr()) & ~ip4_addr_get_u32(netif_ip4_netmask(netif)))); - - /* interface is up and configured? */ - if ((netif_is_up(netif)) && (!ip4_addr_isany_val(*netif_ip4_addr(netif)))) { - 800fa38: 687b ldr r3, [r7, #4] - 800fa3a: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 800fa3e: f003 0301 and.w r3, r3, #1 - 800fa42: b2db uxtb r3, r3 - 800fa44: 2b00 cmp r3, #0 - 800fa46: d016 beq.n 800fa76 - 800fa48: 687b ldr r3, [r7, #4] - 800fa4a: 3304 adds r3, #4 - 800fa4c: 681b ldr r3, [r3, #0] - 800fa4e: 2b00 cmp r3, #0 - 800fa50: d011 beq.n 800fa76 - /* unicast to this interface address? */ - if (ip4_addr_cmp(ip4_current_dest_addr(), netif_ip4_addr(netif)) || - 800fa52: 4b0b ldr r3, [pc, #44] ; (800fa80 ) - 800fa54: 695a ldr r2, [r3, #20] - 800fa56: 687b ldr r3, [r7, #4] - 800fa58: 3304 adds r3, #4 - 800fa5a: 681b ldr r3, [r3, #0] - 800fa5c: 429a cmp r2, r3 - 800fa5e: d008 beq.n 800fa72 - /* or broadcast on this interface network address? */ - ip4_addr_isbroadcast(ip4_current_dest_addr(), netif) - 800fa60: 4b07 ldr r3, [pc, #28] ; (800fa80 ) - 800fa62: 695b ldr r3, [r3, #20] - 800fa64: 6879 ldr r1, [r7, #4] - 800fa66: 4618 mov r0, r3 - 800fa68: f000 fa26 bl 800feb8 - 800fa6c: 4603 mov r3, r0 - if (ip4_addr_cmp(ip4_current_dest_addr(), netif_ip4_addr(netif)) || - 800fa6e: 2b00 cmp r3, #0 - 800fa70: d001 beq.n 800fa76 -#endif /* LWIP_NETIF_LOOPBACK && !LWIP_HAVE_LOOPIF */ - ) { - LWIP_DEBUGF(IP_DEBUG, ("ip4_input: packet accepted on interface %c%c\n", - netif->name[0], netif->name[1])); - /* accept on this netif */ - return 1; - 800fa72: 2301 movs r3, #1 - 800fa74: e000 b.n 800fa78 - /* accept on this netif */ - return 1; - } -#endif /* LWIP_AUTOIP */ - } - return 0; - 800fa76: 2300 movs r3, #0 -} - 800fa78: 4618 mov r0, r3 - 800fa7a: 3708 adds r7, #8 - 800fa7c: 46bd mov sp, r7 - 800fa7e: bd80 pop {r7, pc} - 800fa80: 20006444 .word 0x20006444 - -0800fa84 : - * @return ERR_OK if the packet was processed (could return ERR_* if it wasn't - * processed, but currently always returns ERR_OK) - */ -err_t -ip4_input(struct pbuf *p, struct netif *inp) -{ - 800fa84: b580 push {r7, lr} - 800fa86: b088 sub sp, #32 - 800fa88: af00 add r7, sp, #0 - 800fa8a: 6078 str r0, [r7, #4] - 800fa8c: 6039 str r1, [r7, #0] - const struct ip_hdr *iphdr; - struct netif *netif; - u16_t iphdr_hlen; - u16_t iphdr_len; -#if IP_ACCEPT_LINK_LAYER_ADDRESSING || LWIP_IGMP - int check_ip_src = 1; - 800fa8e: 2301 movs r3, #1 - 800fa90: 617b str r3, [r7, #20] - - IP_STATS_INC(ip.recv); - MIB2_STATS_INC(mib2.ipinreceives); - - /* identify the IP header */ - iphdr = (struct ip_hdr *)p->payload; - 800fa92: 687b ldr r3, [r7, #4] - 800fa94: 685b ldr r3, [r3, #4] - 800fa96: 61fb str r3, [r7, #28] - if (IPH_V(iphdr) != 4) { - 800fa98: 69fb ldr r3, [r7, #28] - 800fa9a: 781b ldrb r3, [r3, #0] - 800fa9c: 091b lsrs r3, r3, #4 - 800fa9e: b2db uxtb r3, r3 - 800faa0: 2b04 cmp r3, #4 - 800faa2: d004 beq.n 800faae - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_WARNING, ("IP packet dropped due to bad version number %"U16_F"\n", (u16_t)IPH_V(iphdr))); - ip4_debug_print(p); - pbuf_free(p); - 800faa4: 6878 ldr r0, [r7, #4] - 800faa6: f7f6 fd87 bl 80065b8 - IP_STATS_INC(ip.err); - IP_STATS_INC(ip.drop); - MIB2_STATS_INC(mib2.ipinhdrerrors); - return ERR_OK; - 800faaa: 2300 movs r3, #0 - 800faac: e123 b.n 800fcf6 - return ERR_OK; - } -#endif - - /* obtain IP header length in bytes */ - iphdr_hlen = IPH_HL_BYTES(iphdr); - 800faae: 69fb ldr r3, [r7, #28] - 800fab0: 781b ldrb r3, [r3, #0] - 800fab2: f003 030f and.w r3, r3, #15 - 800fab6: b2db uxtb r3, r3 - 800fab8: 009b lsls r3, r3, #2 - 800faba: b2db uxtb r3, r3 - 800fabc: 827b strh r3, [r7, #18] - /* obtain ip length in bytes */ - iphdr_len = lwip_ntohs(IPH_LEN(iphdr)); - 800fabe: 69fb ldr r3, [r7, #28] - 800fac0: 885b ldrh r3, [r3, #2] - 800fac2: b29b uxth r3, r3 - 800fac4: 4618 mov r0, r3 - 800fac6: f7f5 fa0d bl 8004ee4 - 800faca: 4603 mov r3, r0 - 800facc: 823b strh r3, [r7, #16] - - /* Trim pbuf. This is especially required for packets < 60 bytes. */ - if (iphdr_len < p->tot_len) { - 800face: 687b ldr r3, [r7, #4] - 800fad0: 891b ldrh r3, [r3, #8] - 800fad2: 8a3a ldrh r2, [r7, #16] - 800fad4: 429a cmp r2, r3 - 800fad6: d204 bcs.n 800fae2 - pbuf_realloc(p, iphdr_len); - 800fad8: 8a3b ldrh r3, [r7, #16] - 800fada: 4619 mov r1, r3 - 800fadc: 6878 ldr r0, [r7, #4] - 800fade: f7f6 fbe5 bl 80062ac - } - - /* header length exceeds first pbuf length, or ip length exceeds total pbuf length? */ - if ((iphdr_hlen > p->len) || (iphdr_len > p->tot_len) || (iphdr_hlen < IP_HLEN)) { - 800fae2: 687b ldr r3, [r7, #4] - 800fae4: 895b ldrh r3, [r3, #10] - 800fae6: 8a7a ldrh r2, [r7, #18] - 800fae8: 429a cmp r2, r3 - 800faea: d807 bhi.n 800fafc - 800faec: 687b ldr r3, [r7, #4] - 800faee: 891b ldrh r3, [r3, #8] - 800faf0: 8a3a ldrh r2, [r7, #16] - 800faf2: 429a cmp r2, r3 - 800faf4: d802 bhi.n 800fafc - 800faf6: 8a7b ldrh r3, [r7, #18] - 800faf8: 2b13 cmp r3, #19 - 800fafa: d804 bhi.n 800fb06 - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, - ("IP (len %"U16_F") is longer than pbuf (len %"U16_F"), IP packet dropped.\n", - iphdr_len, p->tot_len)); - } - /* free (drop) packet pbufs */ - pbuf_free(p); - 800fafc: 6878 ldr r0, [r7, #4] - 800fafe: f7f6 fd5b bl 80065b8 - IP_STATS_INC(ip.lenerr); - IP_STATS_INC(ip.drop); - MIB2_STATS_INC(mib2.ipindiscards); - return ERR_OK; - 800fb02: 2300 movs r3, #0 - 800fb04: e0f7 b.n 800fcf6 - } - } -#endif - - /* copy IP addresses to aligned ip_addr_t */ - ip_addr_copy_from_ip4(ip_data.current_iphdr_dest, iphdr->dest); - 800fb06: 69fb ldr r3, [r7, #28] - 800fb08: 691b ldr r3, [r3, #16] - 800fb0a: 4a7d ldr r2, [pc, #500] ; (800fd00 ) - 800fb0c: 6153 str r3, [r2, #20] - ip_addr_copy_from_ip4(ip_data.current_iphdr_src, iphdr->src); - 800fb0e: 69fb ldr r3, [r7, #28] - 800fb10: 68db ldr r3, [r3, #12] - 800fb12: 4a7b ldr r2, [pc, #492] ; (800fd00 ) - 800fb14: 6113 str r3, [r2, #16] - - /* match packet against an interface, i.e. is this packet for us? */ - if (ip4_addr_ismulticast(ip4_current_dest_addr())) { - 800fb16: 4b7a ldr r3, [pc, #488] ; (800fd00 ) - 800fb18: 695b ldr r3, [r3, #20] - 800fb1a: f003 03f0 and.w r3, r3, #240 ; 0xf0 - 800fb1e: 2be0 cmp r3, #224 ; 0xe0 - 800fb20: d112 bne.n 800fb48 - netif = inp; - } else { - netif = NULL; - } -#else /* LWIP_IGMP */ - if ((netif_is_up(inp)) && (!ip4_addr_isany_val(*netif_ip4_addr(inp)))) { - 800fb22: 683b ldr r3, [r7, #0] - 800fb24: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 800fb28: f003 0301 and.w r3, r3, #1 - 800fb2c: b2db uxtb r3, r3 - 800fb2e: 2b00 cmp r3, #0 - 800fb30: d007 beq.n 800fb42 - 800fb32: 683b ldr r3, [r7, #0] - 800fb34: 3304 adds r3, #4 - 800fb36: 681b ldr r3, [r3, #0] - 800fb38: 2b00 cmp r3, #0 - 800fb3a: d002 beq.n 800fb42 - netif = inp; - 800fb3c: 683b ldr r3, [r7, #0] - 800fb3e: 61bb str r3, [r7, #24] - 800fb40: e02a b.n 800fb98 - } else { - netif = NULL; - 800fb42: 2300 movs r3, #0 - 800fb44: 61bb str r3, [r7, #24] - 800fb46: e027 b.n 800fb98 - } -#endif /* LWIP_IGMP */ - } else { - /* start trying with inp. if that's not acceptable, start walking the - list of configured netifs. */ - if (ip4_input_accept(inp)) { - 800fb48: 6838 ldr r0, [r7, #0] - 800fb4a: f7ff ff71 bl 800fa30 - 800fb4e: 4603 mov r3, r0 - 800fb50: 2b00 cmp r3, #0 - 800fb52: d002 beq.n 800fb5a - netif = inp; - 800fb54: 683b ldr r3, [r7, #0] - 800fb56: 61bb str r3, [r7, #24] - 800fb58: e01e b.n 800fb98 - } else { - netif = NULL; - 800fb5a: 2300 movs r3, #0 - 800fb5c: 61bb str r3, [r7, #24] -#if !LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF - /* Packets sent to the loopback address must not be accepted on an - * interface that does not have the loopback address assigned to it, - * unless a non-loopback interface is used for loopback traffic. */ - if (!ip4_addr_isloopback(ip4_current_dest_addr())) - 800fb5e: 4b68 ldr r3, [pc, #416] ; (800fd00 ) - 800fb60: 695b ldr r3, [r3, #20] - 800fb62: b2db uxtb r3, r3 - 800fb64: 2b7f cmp r3, #127 ; 0x7f - 800fb66: d017 beq.n 800fb98 -#endif /* !LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF */ - { -#if !LWIP_SINGLE_NETIF - NETIF_FOREACH(netif) { - 800fb68: 4b66 ldr r3, [pc, #408] ; (800fd04 ) - 800fb6a: 681b ldr r3, [r3, #0] - 800fb6c: 61bb str r3, [r7, #24] - 800fb6e: e00e b.n 800fb8e - if (netif == inp) { - 800fb70: 69ba ldr r2, [r7, #24] - 800fb72: 683b ldr r3, [r7, #0] - 800fb74: 429a cmp r2, r3 - 800fb76: d006 beq.n 800fb86 - /* we checked that before already */ - continue; - } - if (ip4_input_accept(netif)) { - 800fb78: 69b8 ldr r0, [r7, #24] - 800fb7a: f7ff ff59 bl 800fa30 - 800fb7e: 4603 mov r3, r0 - 800fb80: 2b00 cmp r3, #0 - 800fb82: d108 bne.n 800fb96 - 800fb84: e000 b.n 800fb88 - continue; - 800fb86: bf00 nop - NETIF_FOREACH(netif) { - 800fb88: 69bb ldr r3, [r7, #24] - 800fb8a: 681b ldr r3, [r3, #0] - 800fb8c: 61bb str r3, [r7, #24] - 800fb8e: 69bb ldr r3, [r7, #24] - 800fb90: 2b00 cmp r3, #0 - 800fb92: d1ed bne.n 800fb70 - 800fb94: e000 b.n 800fb98 - break; - 800fb96: bf00 nop - * If you want to accept private broadcast communication while a netif is down, - * define LWIP_IP_ACCEPT_UDP_PORT(dst_port), e.g.: - * - * #define LWIP_IP_ACCEPT_UDP_PORT(dst_port) ((dst_port) == PP_NTOHS(12345)) - */ - if (netif == NULL) { - 800fb98: 69bb ldr r3, [r7, #24] - 800fb9a: 2b00 cmp r3, #0 - 800fb9c: d111 bne.n 800fbc2 - /* remote port is DHCP server? */ - if (IPH_PROTO(iphdr) == IP_PROTO_UDP) { - 800fb9e: 69fb ldr r3, [r7, #28] - 800fba0: 7a5b ldrb r3, [r3, #9] - 800fba2: 2b11 cmp r3, #17 - 800fba4: d10d bne.n 800fbc2 - const struct udp_hdr *udphdr = (const struct udp_hdr *)((const u8_t *)iphdr + iphdr_hlen); - 800fba6: 8a7b ldrh r3, [r7, #18] - 800fba8: 69fa ldr r2, [r7, #28] - 800fbaa: 4413 add r3, r2 - 800fbac: 60fb str r3, [r7, #12] - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip4_input: UDP packet to DHCP client port %"U16_F"\n", - lwip_ntohs(udphdr->dest))); - if (IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT(udphdr->dest)) { - 800fbae: 68fb ldr r3, [r7, #12] - 800fbb0: 885b ldrh r3, [r3, #2] - 800fbb2: b29b uxth r3, r3 - 800fbb4: f5b3 4f88 cmp.w r3, #17408 ; 0x4400 - 800fbb8: d103 bne.n 800fbc2 - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip4_input: DHCP packet accepted.\n")); - netif = inp; - 800fbba: 683b ldr r3, [r7, #0] - 800fbbc: 61bb str r3, [r7, #24] - check_ip_src = 0; - 800fbbe: 2300 movs r3, #0 - 800fbc0: 617b str r3, [r7, #20] - } -#endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */ - - /* broadcast or multicast packet source address? Compliant with RFC 1122: 3.2.1.3 */ -#if LWIP_IGMP || IP_ACCEPT_LINK_LAYER_ADDRESSING - if (check_ip_src - 800fbc2: 697b ldr r3, [r7, #20] - 800fbc4: 2b00 cmp r3, #0 - 800fbc6: d017 beq.n 800fbf8 -#if IP_ACCEPT_LINK_LAYER_ADDRESSING - /* DHCP servers need 0.0.0.0 to be allowed as source address (RFC 1.1.2.2: 3.2.1.3/a) */ - && !ip4_addr_isany_val(*ip4_current_src_addr()) - 800fbc8: 4b4d ldr r3, [pc, #308] ; (800fd00 ) - 800fbca: 691b ldr r3, [r3, #16] - 800fbcc: 2b00 cmp r3, #0 - 800fbce: d013 beq.n 800fbf8 -#endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */ - ) -#endif /* LWIP_IGMP || IP_ACCEPT_LINK_LAYER_ADDRESSING */ - { - if ((ip4_addr_isbroadcast(ip4_current_src_addr(), inp)) || - 800fbd0: 4b4b ldr r3, [pc, #300] ; (800fd00 ) - 800fbd2: 691b ldr r3, [r3, #16] - 800fbd4: 6839 ldr r1, [r7, #0] - 800fbd6: 4618 mov r0, r3 - 800fbd8: f000 f96e bl 800feb8 - 800fbdc: 4603 mov r3, r0 - 800fbde: 2b00 cmp r3, #0 - 800fbe0: d105 bne.n 800fbee - (ip4_addr_ismulticast(ip4_current_src_addr()))) { - 800fbe2: 4b47 ldr r3, [pc, #284] ; (800fd00 ) - 800fbe4: 691b ldr r3, [r3, #16] - 800fbe6: f003 03f0 and.w r3, r3, #240 ; 0xf0 - if ((ip4_addr_isbroadcast(ip4_current_src_addr(), inp)) || - 800fbea: 2be0 cmp r3, #224 ; 0xe0 - 800fbec: d104 bne.n 800fbf8 - /* packet source is not valid */ - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("ip4_input: packet source is not valid.\n")); - /* free (drop) packet pbufs */ - pbuf_free(p); - 800fbee: 6878 ldr r0, [r7, #4] - 800fbf0: f7f6 fce2 bl 80065b8 - IP_STATS_INC(ip.drop); - MIB2_STATS_INC(mib2.ipinaddrerrors); - MIB2_STATS_INC(mib2.ipindiscards); - return ERR_OK; - 800fbf4: 2300 movs r3, #0 - 800fbf6: e07e b.n 800fcf6 - } - } - - /* packet not for us? */ - if (netif == NULL) { - 800fbf8: 69bb ldr r3, [r7, #24] - 800fbfa: 2b00 cmp r3, #0 - 800fbfc: d104 bne.n 800fc08 - { - IP_STATS_INC(ip.drop); - MIB2_STATS_INC(mib2.ipinaddrerrors); - MIB2_STATS_INC(mib2.ipindiscards); - } - pbuf_free(p); - 800fbfe: 6878 ldr r0, [r7, #4] - 800fc00: f7f6 fcda bl 80065b8 - return ERR_OK; - 800fc04: 2300 movs r3, #0 - 800fc06: e076 b.n 800fcf6 - } - /* packet consists of multiple fragments? */ - if ((IPH_OFFSET(iphdr) & PP_HTONS(IP_OFFMASK | IP_MF)) != 0) { - 800fc08: 69fb ldr r3, [r7, #28] - 800fc0a: 88db ldrh r3, [r3, #6] - 800fc0c: b29b uxth r3, r3 - 800fc0e: 461a mov r2, r3 - 800fc10: f64f 733f movw r3, #65343 ; 0xff3f - 800fc14: 4013 ands r3, r2 - 800fc16: 2b00 cmp r3, #0 - 800fc18: d00b beq.n 800fc32 -#if IP_REASSEMBLY /* packet fragment reassembly code present? */ - LWIP_DEBUGF(IP_DEBUG, ("IP packet is a fragment (id=0x%04"X16_F" tot_len=%"U16_F" len=%"U16_F" MF=%"U16_F" offset=%"U16_F"), calling ip4_reass()\n", - lwip_ntohs(IPH_ID(iphdr)), p->tot_len, lwip_ntohs(IPH_LEN(iphdr)), (u16_t)!!(IPH_OFFSET(iphdr) & PP_HTONS(IP_MF)), (u16_t)((lwip_ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK) * 8))); - /* reassemble the packet*/ - p = ip4_reass(p); - 800fc1a: 6878 ldr r0, [r7, #4] - 800fc1c: f000 fdd0 bl 80107c0 - 800fc20: 6078 str r0, [r7, #4] - /* packet not fully reassembled yet? */ - if (p == NULL) { - 800fc22: 687b ldr r3, [r7, #4] - 800fc24: 2b00 cmp r3, #0 - 800fc26: d101 bne.n 800fc2c - return ERR_OK; - 800fc28: 2300 movs r3, #0 - 800fc2a: e064 b.n 800fcf6 - } - iphdr = (const struct ip_hdr *)p->payload; - 800fc2c: 687b ldr r3, [r7, #4] - 800fc2e: 685b ldr r3, [r3, #4] - 800fc30: 61fb str r3, [r7, #28] - /* send to upper layers */ - LWIP_DEBUGF(IP_DEBUG, ("ip4_input: \n")); - ip4_debug_print(p); - LWIP_DEBUGF(IP_DEBUG, ("ip4_input: p->len %"U16_F" p->tot_len %"U16_F"\n", p->len, p->tot_len)); - - ip_data.current_netif = netif; - 800fc32: 4a33 ldr r2, [pc, #204] ; (800fd00 ) - 800fc34: 69bb ldr r3, [r7, #24] - 800fc36: 6013 str r3, [r2, #0] - ip_data.current_input_netif = inp; - 800fc38: 4a31 ldr r2, [pc, #196] ; (800fd00 ) - 800fc3a: 683b ldr r3, [r7, #0] - 800fc3c: 6053 str r3, [r2, #4] - ip_data.current_ip4_header = iphdr; - 800fc3e: 4a30 ldr r2, [pc, #192] ; (800fd00 ) - 800fc40: 69fb ldr r3, [r7, #28] - 800fc42: 6093 str r3, [r2, #8] - ip_data.current_ip_header_tot_len = IPH_HL_BYTES(iphdr); - 800fc44: 69fb ldr r3, [r7, #28] - 800fc46: 781b ldrb r3, [r3, #0] - 800fc48: f003 030f and.w r3, r3, #15 - 800fc4c: b2db uxtb r3, r3 - 800fc4e: 009b lsls r3, r3, #2 - 800fc50: b2db uxtb r3, r3 - 800fc52: b29a uxth r2, r3 - 800fc54: 4b2a ldr r3, [pc, #168] ; (800fd00 ) - 800fc56: 819a strh r2, [r3, #12] - /* raw input did not eat the packet? */ - raw_status = raw_input(p, inp); - if (raw_status != RAW_INPUT_EATEN) -#endif /* LWIP_RAW */ - { - pbuf_remove_header(p, iphdr_hlen); /* Move to payload, no check necessary. */ - 800fc58: 8a7b ldrh r3, [r7, #18] - 800fc5a: 4619 mov r1, r3 - 800fc5c: 6878 ldr r0, [r7, #4] - 800fc5e: f7f6 fc25 bl 80064ac - - switch (IPH_PROTO(iphdr)) { - 800fc62: 69fb ldr r3, [r7, #28] - 800fc64: 7a5b ldrb r3, [r3, #9] - 800fc66: 2b11 cmp r3, #17 - 800fc68: d006 beq.n 800fc78 - 800fc6a: 2b11 cmp r3, #17 - 800fc6c: dc13 bgt.n 800fc96 - 800fc6e: 2b01 cmp r3, #1 - 800fc70: d00c beq.n 800fc8c - 800fc72: 2b06 cmp r3, #6 - 800fc74: d005 beq.n 800fc82 - 800fc76: e00e b.n 800fc96 - case IP_PROTO_UDP: -#if LWIP_UDPLITE - case IP_PROTO_UDPLITE: -#endif /* LWIP_UDPLITE */ - MIB2_STATS_INC(mib2.ipindelivers); - udp_input(p, inp); - 800fc78: 6839 ldr r1, [r7, #0] - 800fc7a: 6878 ldr r0, [r7, #4] - 800fc7c: f7fc fa8e bl 800c19c - break; - 800fc80: e026 b.n 800fcd0 -#endif /* LWIP_UDP */ -#if LWIP_TCP - case IP_PROTO_TCP: - MIB2_STATS_INC(mib2.ipindelivers); - tcp_input(p, inp); - 800fc82: 6839 ldr r1, [r7, #0] - 800fc84: 6878 ldr r0, [r7, #4] - 800fc86: f7f8 facf bl 8008228 - break; - 800fc8a: e021 b.n 800fcd0 -#endif /* LWIP_TCP */ -#if LWIP_ICMP - case IP_PROTO_ICMP: - MIB2_STATS_INC(mib2.ipindelivers); - icmp_input(p, inp); - 800fc8c: 6839 ldr r1, [r7, #0] - 800fc8e: 6878 ldr r0, [r7, #4] - 800fc90: f7ff fcd0 bl 800f634 - break; - 800fc94: e01c b.n 800fcd0 - } else -#endif /* LWIP_RAW */ - { -#if LWIP_ICMP - /* send ICMP destination protocol unreachable unless is was a broadcast */ - if (!ip4_addr_isbroadcast(ip4_current_dest_addr(), netif) && - 800fc96: 4b1a ldr r3, [pc, #104] ; (800fd00 ) - 800fc98: 695b ldr r3, [r3, #20] - 800fc9a: 69b9 ldr r1, [r7, #24] - 800fc9c: 4618 mov r0, r3 - 800fc9e: f000 f90b bl 800feb8 - 800fca2: 4603 mov r3, r0 - 800fca4: 2b00 cmp r3, #0 - 800fca6: d10f bne.n 800fcc8 - !ip4_addr_ismulticast(ip4_current_dest_addr())) { - 800fca8: 4b15 ldr r3, [pc, #84] ; (800fd00 ) - 800fcaa: 695b ldr r3, [r3, #20] - 800fcac: f003 03f0 and.w r3, r3, #240 ; 0xf0 - if (!ip4_addr_isbroadcast(ip4_current_dest_addr(), netif) && - 800fcb0: 2be0 cmp r3, #224 ; 0xe0 - 800fcb2: d009 beq.n 800fcc8 - pbuf_header_force(p, (s16_t)iphdr_hlen); /* Move to ip header, no check necessary. */ - 800fcb4: f9b7 3012 ldrsh.w r3, [r7, #18] - 800fcb8: 4619 mov r1, r3 - 800fcba: 6878 ldr r0, [r7, #4] - 800fcbc: f7f6 fc69 bl 8006592 - icmp_dest_unreach(p, ICMP_DUR_PROTO); - 800fcc0: 2102 movs r1, #2 - 800fcc2: 6878 ldr r0, [r7, #4] - 800fcc4: f7ff fdba bl 800f83c - - IP_STATS_INC(ip.proterr); - IP_STATS_INC(ip.drop); - MIB2_STATS_INC(mib2.ipinunknownprotos); - } - pbuf_free(p); - 800fcc8: 6878 ldr r0, [r7, #4] - 800fcca: f7f6 fc75 bl 80065b8 - break; - 800fcce: bf00 nop - } - } - - /* @todo: this is not really necessary... */ - ip_data.current_netif = NULL; - 800fcd0: 4b0b ldr r3, [pc, #44] ; (800fd00 ) - 800fcd2: 2200 movs r2, #0 - 800fcd4: 601a str r2, [r3, #0] - ip_data.current_input_netif = NULL; - 800fcd6: 4b0a ldr r3, [pc, #40] ; (800fd00 ) - 800fcd8: 2200 movs r2, #0 - 800fcda: 605a str r2, [r3, #4] - ip_data.current_ip4_header = NULL; - 800fcdc: 4b08 ldr r3, [pc, #32] ; (800fd00 ) - 800fcde: 2200 movs r2, #0 - 800fce0: 609a str r2, [r3, #8] - ip_data.current_ip_header_tot_len = 0; - 800fce2: 4b07 ldr r3, [pc, #28] ; (800fd00 ) - 800fce4: 2200 movs r2, #0 - 800fce6: 819a strh r2, [r3, #12] - ip4_addr_set_any(ip4_current_src_addr()); - 800fce8: 4b05 ldr r3, [pc, #20] ; (800fd00 ) - 800fcea: 2200 movs r2, #0 - 800fcec: 611a str r2, [r3, #16] - ip4_addr_set_any(ip4_current_dest_addr()); - 800fcee: 4b04 ldr r3, [pc, #16] ; (800fd00 ) - 800fcf0: 2200 movs r2, #0 - 800fcf2: 615a str r2, [r3, #20] - - return ERR_OK; - 800fcf4: 2300 movs r3, #0 -} - 800fcf6: 4618 mov r0, r3 - 800fcf8: 3720 adds r7, #32 - 800fcfa: 46bd mov sp, r7 - 800fcfc: bd80 pop {r7, pc} - 800fcfe: bf00 nop - 800fd00: 20006444 .word 0x20006444 - 800fd04: 200099c8 .word 0x200099c8 - -0800fd08 : - */ -err_t -ip4_output_if(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, - u8_t ttl, u8_t tos, - u8_t proto, struct netif *netif) -{ - 800fd08: b580 push {r7, lr} - 800fd0a: b08a sub sp, #40 ; 0x28 - 800fd0c: af04 add r7, sp, #16 - 800fd0e: 60f8 str r0, [r7, #12] - 800fd10: 60b9 str r1, [r7, #8] - 800fd12: 607a str r2, [r7, #4] - 800fd14: 70fb strb r3, [r7, #3] -ip4_output_if_opt(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, - u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options, - u16_t optlen) -{ -#endif /* IP_OPTIONS_SEND */ - const ip4_addr_t *src_used = src; - 800fd16: 68bb ldr r3, [r7, #8] - 800fd18: 617b str r3, [r7, #20] - if (dest != LWIP_IP_HDRINCL) { - 800fd1a: 687b ldr r3, [r7, #4] - 800fd1c: 2b00 cmp r3, #0 - 800fd1e: d009 beq.n 800fd34 - if (ip4_addr_isany(src)) { - 800fd20: 68bb ldr r3, [r7, #8] - 800fd22: 2b00 cmp r3, #0 - 800fd24: d003 beq.n 800fd2e - 800fd26: 68bb ldr r3, [r7, #8] - 800fd28: 681b ldr r3, [r3, #0] - 800fd2a: 2b00 cmp r3, #0 - 800fd2c: d102 bne.n 800fd34 - src_used = netif_ip4_addr(netif); - 800fd2e: 6abb ldr r3, [r7, #40] ; 0x28 - 800fd30: 3304 adds r3, #4 - 800fd32: 617b str r3, [r7, #20] - -#if IP_OPTIONS_SEND - return ip4_output_if_opt_src(p, src_used, dest, ttl, tos, proto, netif, - ip_options, optlen); -#else /* IP_OPTIONS_SEND */ - return ip4_output_if_src(p, src_used, dest, ttl, tos, proto, netif); - 800fd34: 78fa ldrb r2, [r7, #3] - 800fd36: 6abb ldr r3, [r7, #40] ; 0x28 - 800fd38: 9302 str r3, [sp, #8] - 800fd3a: f897 3024 ldrb.w r3, [r7, #36] ; 0x24 - 800fd3e: 9301 str r3, [sp, #4] - 800fd40: f897 3020 ldrb.w r3, [r7, #32] - 800fd44: 9300 str r3, [sp, #0] - 800fd46: 4613 mov r3, r2 - 800fd48: 687a ldr r2, [r7, #4] - 800fd4a: 6979 ldr r1, [r7, #20] - 800fd4c: 68f8 ldr r0, [r7, #12] - 800fd4e: f000 f805 bl 800fd5c - 800fd52: 4603 mov r3, r0 -#endif /* IP_OPTIONS_SEND */ -} - 800fd54: 4618 mov r0, r3 - 800fd56: 3718 adds r7, #24 - 800fd58: 46bd mov sp, r7 - 800fd5a: bd80 pop {r7, pc} - -0800fd5c : - */ -err_t -ip4_output_if_src(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, - u8_t ttl, u8_t tos, - u8_t proto, struct netif *netif) -{ - 800fd5c: b580 push {r7, lr} - 800fd5e: b088 sub sp, #32 - 800fd60: af00 add r7, sp, #0 - 800fd62: 60f8 str r0, [r7, #12] - 800fd64: 60b9 str r1, [r7, #8] - 800fd66: 607a str r2, [r7, #4] - 800fd68: 70fb strb r3, [r7, #3] -#if CHECKSUM_GEN_IP_INLINE - u32_t chk_sum = 0; -#endif /* CHECKSUM_GEN_IP_INLINE */ - - LWIP_ASSERT_CORE_LOCKED(); - LWIP_IP_CHECK_PBUF_REF_COUNT_FOR_TX(p); - 800fd6a: 68fb ldr r3, [r7, #12] - 800fd6c: 7b9b ldrb r3, [r3, #14] - 800fd6e: 2b01 cmp r3, #1 - 800fd70: d006 beq.n 800fd80 - 800fd72: 4b4b ldr r3, [pc, #300] ; (800fea0 ) - 800fd74: f44f 7255 mov.w r2, #852 ; 0x354 - 800fd78: 494a ldr r1, [pc, #296] ; (800fea4 ) - 800fd7a: 484b ldr r0, [pc, #300] ; (800fea8 ) - 800fd7c: f001 f994 bl 80110a8 - - MIB2_STATS_INC(mib2.ipoutrequests); - - /* Should the IP header be generated or is it already included in p? */ - if (dest != LWIP_IP_HDRINCL) { - 800fd80: 687b ldr r3, [r7, #4] - 800fd82: 2b00 cmp r3, #0 - 800fd84: d060 beq.n 800fe48 - u16_t ip_hlen = IP_HLEN; - 800fd86: 2314 movs r3, #20 - 800fd88: 837b strh r3, [r7, #26] - } -#endif /* CHECKSUM_GEN_IP_INLINE */ - } -#endif /* IP_OPTIONS_SEND */ - /* generate IP header */ - if (pbuf_add_header(p, IP_HLEN)) { - 800fd8a: 2114 movs r1, #20 - 800fd8c: 68f8 ldr r0, [r7, #12] - 800fd8e: f7f6 fb7d bl 800648c - 800fd92: 4603 mov r3, r0 - 800fd94: 2b00 cmp r3, #0 - 800fd96: d002 beq.n 800fd9e - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip4_output: not enough room for IP header in pbuf\n")); - - IP_STATS_INC(ip.err); - MIB2_STATS_INC(mib2.ipoutdiscards); - return ERR_BUF; - 800fd98: f06f 0301 mvn.w r3, #1 - 800fd9c: e07c b.n 800fe98 - } - - iphdr = (struct ip_hdr *)p->payload; - 800fd9e: 68fb ldr r3, [r7, #12] - 800fda0: 685b ldr r3, [r3, #4] - 800fda2: 61fb str r3, [r7, #28] - LWIP_ASSERT("check that first pbuf can hold struct ip_hdr", - 800fda4: 68fb ldr r3, [r7, #12] - 800fda6: 895b ldrh r3, [r3, #10] - 800fda8: 2b13 cmp r3, #19 - 800fdaa: d806 bhi.n 800fdba - 800fdac: 4b3c ldr r3, [pc, #240] ; (800fea0 ) - 800fdae: f44f 7262 mov.w r2, #904 ; 0x388 - 800fdb2: 493e ldr r1, [pc, #248] ; (800feac ) - 800fdb4: 483c ldr r0, [pc, #240] ; (800fea8 ) - 800fdb6: f001 f977 bl 80110a8 - (p->len >= sizeof(struct ip_hdr))); - - IPH_TTL_SET(iphdr, ttl); - 800fdba: 69fb ldr r3, [r7, #28] - 800fdbc: 78fa ldrb r2, [r7, #3] - 800fdbe: 721a strb r2, [r3, #8] - IPH_PROTO_SET(iphdr, proto); - 800fdc0: 69fb ldr r3, [r7, #28] - 800fdc2: f897 202c ldrb.w r2, [r7, #44] ; 0x2c - 800fdc6: 725a strb r2, [r3, #9] -#if CHECKSUM_GEN_IP_INLINE - chk_sum += PP_NTOHS(proto | (ttl << 8)); -#endif /* CHECKSUM_GEN_IP_INLINE */ - - /* dest cannot be NULL here */ - ip4_addr_copy(iphdr->dest, *dest); - 800fdc8: 687b ldr r3, [r7, #4] - 800fdca: 681a ldr r2, [r3, #0] - 800fdcc: 69fb ldr r3, [r7, #28] - 800fdce: 611a str r2, [r3, #16] -#if CHECKSUM_GEN_IP_INLINE - chk_sum += ip4_addr_get_u32(&iphdr->dest) & 0xFFFF; - chk_sum += ip4_addr_get_u32(&iphdr->dest) >> 16; -#endif /* CHECKSUM_GEN_IP_INLINE */ - - IPH_VHL_SET(iphdr, 4, ip_hlen / 4); - 800fdd0: 8b7b ldrh r3, [r7, #26] - 800fdd2: 089b lsrs r3, r3, #2 - 800fdd4: b29b uxth r3, r3 - 800fdd6: b2db uxtb r3, r3 - 800fdd8: f043 0340 orr.w r3, r3, #64 ; 0x40 - 800fddc: b2da uxtb r2, r3 - 800fdde: 69fb ldr r3, [r7, #28] - 800fde0: 701a strb r2, [r3, #0] - IPH_TOS_SET(iphdr, tos); - 800fde2: 69fb ldr r3, [r7, #28] - 800fde4: f897 2028 ldrb.w r2, [r7, #40] ; 0x28 - 800fde8: 705a strb r2, [r3, #1] -#if CHECKSUM_GEN_IP_INLINE - chk_sum += PP_NTOHS(tos | (iphdr->_v_hl << 8)); -#endif /* CHECKSUM_GEN_IP_INLINE */ - IPH_LEN_SET(iphdr, lwip_htons(p->tot_len)); - 800fdea: 68fb ldr r3, [r7, #12] - 800fdec: 891b ldrh r3, [r3, #8] - 800fdee: 4618 mov r0, r3 - 800fdf0: f7f5 f878 bl 8004ee4 - 800fdf4: 4603 mov r3, r0 - 800fdf6: 461a mov r2, r3 - 800fdf8: 69fb ldr r3, [r7, #28] - 800fdfa: 805a strh r2, [r3, #2] -#if CHECKSUM_GEN_IP_INLINE - chk_sum += iphdr->_len; -#endif /* CHECKSUM_GEN_IP_INLINE */ - IPH_OFFSET_SET(iphdr, 0); - 800fdfc: 69fb ldr r3, [r7, #28] - 800fdfe: 2200 movs r2, #0 - 800fe00: 719a strb r2, [r3, #6] - 800fe02: 2200 movs r2, #0 - 800fe04: 71da strb r2, [r3, #7] - IPH_ID_SET(iphdr, lwip_htons(ip_id)); - 800fe06: 4b2a ldr r3, [pc, #168] ; (800feb0 ) - 800fe08: 881b ldrh r3, [r3, #0] - 800fe0a: 4618 mov r0, r3 - 800fe0c: f7f5 f86a bl 8004ee4 - 800fe10: 4603 mov r3, r0 - 800fe12: 461a mov r2, r3 - 800fe14: 69fb ldr r3, [r7, #28] - 800fe16: 809a strh r2, [r3, #4] -#if CHECKSUM_GEN_IP_INLINE - chk_sum += iphdr->_id; -#endif /* CHECKSUM_GEN_IP_INLINE */ - ++ip_id; - 800fe18: 4b25 ldr r3, [pc, #148] ; (800feb0 ) - 800fe1a: 881b ldrh r3, [r3, #0] - 800fe1c: 3301 adds r3, #1 - 800fe1e: b29a uxth r2, r3 - 800fe20: 4b23 ldr r3, [pc, #140] ; (800feb0 ) - 800fe22: 801a strh r2, [r3, #0] - - if (src == NULL) { - 800fe24: 68bb ldr r3, [r7, #8] - 800fe26: 2b00 cmp r3, #0 - 800fe28: d104 bne.n 800fe34 - ip4_addr_copy(iphdr->src, *IP4_ADDR_ANY4); - 800fe2a: 4b22 ldr r3, [pc, #136] ; (800feb4 ) - 800fe2c: 681a ldr r2, [r3, #0] - 800fe2e: 69fb ldr r3, [r7, #28] - 800fe30: 60da str r2, [r3, #12] - 800fe32: e003 b.n 800fe3c - } else { - /* src cannot be NULL here */ - ip4_addr_copy(iphdr->src, *src); - 800fe34: 68bb ldr r3, [r7, #8] - 800fe36: 681a ldr r2, [r3, #0] - 800fe38: 69fb ldr r3, [r7, #28] - 800fe3a: 60da str r2, [r3, #12] - else { - IPH_CHKSUM_SET(iphdr, 0); - } -#endif /* LWIP_CHECKSUM_CTRL_PER_NETIF*/ -#else /* CHECKSUM_GEN_IP_INLINE */ - IPH_CHKSUM_SET(iphdr, 0); - 800fe3c: 69fb ldr r3, [r7, #28] - 800fe3e: 2200 movs r2, #0 - 800fe40: 729a strb r2, [r3, #10] - 800fe42: 2200 movs r2, #0 - 800fe44: 72da strb r2, [r3, #11] - 800fe46: e00f b.n 800fe68 - } -#endif /* CHECKSUM_GEN_IP */ -#endif /* CHECKSUM_GEN_IP_INLINE */ - } else { - /* IP header already included in p */ - if (p->len < IP_HLEN) { - 800fe48: 68fb ldr r3, [r7, #12] - 800fe4a: 895b ldrh r3, [r3, #10] - 800fe4c: 2b13 cmp r3, #19 - 800fe4e: d802 bhi.n 800fe56 - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip4_output: LWIP_IP_HDRINCL but pbuf is too short\n")); - IP_STATS_INC(ip.err); - MIB2_STATS_INC(mib2.ipoutdiscards); - return ERR_BUF; - 800fe50: f06f 0301 mvn.w r3, #1 - 800fe54: e020 b.n 800fe98 - } - iphdr = (struct ip_hdr *)p->payload; - 800fe56: 68fb ldr r3, [r7, #12] - 800fe58: 685b ldr r3, [r3, #4] - 800fe5a: 61fb str r3, [r7, #28] - ip4_addr_copy(dest_addr, iphdr->dest); - 800fe5c: 69fb ldr r3, [r7, #28] - 800fe5e: 691b ldr r3, [r3, #16] - 800fe60: 617b str r3, [r7, #20] - dest = &dest_addr; - 800fe62: f107 0314 add.w r3, r7, #20 - 800fe66: 607b str r3, [r7, #4] - } -#endif /* LWIP_MULTICAST_TX_OPTIONS */ -#endif /* ENABLE_LOOPBACK */ -#if IP_FRAG - /* don't fragment if interface has mtu set to 0 [loopif] */ - if (netif->mtu && (p->tot_len > netif->mtu)) { - 800fe68: 6b3b ldr r3, [r7, #48] ; 0x30 - 800fe6a: 8d1b ldrh r3, [r3, #40] ; 0x28 - 800fe6c: 2b00 cmp r3, #0 - 800fe6e: d00c beq.n 800fe8a - 800fe70: 68fb ldr r3, [r7, #12] - 800fe72: 891a ldrh r2, [r3, #8] - 800fe74: 6b3b ldr r3, [r7, #48] ; 0x30 - 800fe76: 8d1b ldrh r3, [r3, #40] ; 0x28 - 800fe78: 429a cmp r2, r3 - 800fe7a: d906 bls.n 800fe8a - return ip4_frag(p, netif, dest); - 800fe7c: 687a ldr r2, [r7, #4] - 800fe7e: 6b39 ldr r1, [r7, #48] ; 0x30 - 800fe80: 68f8 ldr r0, [r7, #12] - 800fe82: f000 fe91 bl 8010ba8 - 800fe86: 4603 mov r3, r0 - 800fe88: e006 b.n 800fe98 - } -#endif /* IP_FRAG */ - - LWIP_DEBUGF(IP_DEBUG, ("ip4_output_if: call netif->output()\n")); - return netif->output(netif, p, dest); - 800fe8a: 6b3b ldr r3, [r7, #48] ; 0x30 - 800fe8c: 695b ldr r3, [r3, #20] - 800fe8e: 687a ldr r2, [r7, #4] - 800fe90: 68f9 ldr r1, [r7, #12] - 800fe92: 6b38 ldr r0, [r7, #48] ; 0x30 - 800fe94: 4798 blx r3 - 800fe96: 4603 mov r3, r0 -} - 800fe98: 4618 mov r0, r3 - 800fe9a: 3720 adds r7, #32 - 800fe9c: 46bd mov sp, r7 - 800fe9e: bd80 pop {r7, pc} - 800fea0: 0801860c .word 0x0801860c - 800fea4: 08018640 .word 0x08018640 - 800fea8: 0801864c .word 0x0801864c - 800feac: 08018674 .word 0x08018674 - 800feb0: 20009b5a .word 0x20009b5a - 800feb4: 08018acc .word 0x08018acc - -0800feb8 : - * @param netif the network interface against which the address is checked - * @return returns non-zero if the address is a broadcast address - */ -u8_t -ip4_addr_isbroadcast_u32(u32_t addr, const struct netif *netif) -{ - 800feb8: b480 push {r7} - 800feba: b085 sub sp, #20 - 800febc: af00 add r7, sp, #0 - 800febe: 6078 str r0, [r7, #4] - 800fec0: 6039 str r1, [r7, #0] - ip4_addr_t ipaddr; - ip4_addr_set_u32(&ipaddr, addr); - 800fec2: 687b ldr r3, [r7, #4] - 800fec4: 60fb str r3, [r7, #12] - - /* all ones (broadcast) or all zeroes (old skool broadcast) */ - if ((~addr == IPADDR_ANY) || - 800fec6: 687b ldr r3, [r7, #4] - 800fec8: f1b3 3fff cmp.w r3, #4294967295 - 800fecc: d002 beq.n 800fed4 - 800fece: 687b ldr r3, [r7, #4] - 800fed0: 2b00 cmp r3, #0 - 800fed2: d101 bne.n 800fed8 - (addr == IPADDR_ANY)) { - return 1; - 800fed4: 2301 movs r3, #1 - 800fed6: e02a b.n 800ff2e - /* no broadcast support on this network interface? */ - } else if ((netif->flags & NETIF_FLAG_BROADCAST) == 0) { - 800fed8: 683b ldr r3, [r7, #0] - 800feda: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 800fede: f003 0302 and.w r3, r3, #2 - 800fee2: 2b00 cmp r3, #0 - 800fee4: d101 bne.n 800feea - /* the given address cannot be a broadcast address - * nor can we check against any broadcast addresses */ - return 0; - 800fee6: 2300 movs r3, #0 - 800fee8: e021 b.n 800ff2e - /* address matches network interface address exactly? => no broadcast */ - } else if (addr == ip4_addr_get_u32(netif_ip4_addr(netif))) { - 800feea: 683b ldr r3, [r7, #0] - 800feec: 3304 adds r3, #4 - 800feee: 681b ldr r3, [r3, #0] - 800fef0: 687a ldr r2, [r7, #4] - 800fef2: 429a cmp r2, r3 - 800fef4: d101 bne.n 800fefa - return 0; - 800fef6: 2300 movs r3, #0 - 800fef8: e019 b.n 800ff2e - /* on the same (sub) network... */ - } else if (ip4_addr_netcmp(&ipaddr, netif_ip4_addr(netif), netif_ip4_netmask(netif)) - 800fefa: 68fa ldr r2, [r7, #12] - 800fefc: 683b ldr r3, [r7, #0] - 800fefe: 3304 adds r3, #4 - 800ff00: 681b ldr r3, [r3, #0] - 800ff02: 405a eors r2, r3 - 800ff04: 683b ldr r3, [r7, #0] - 800ff06: 3308 adds r3, #8 - 800ff08: 681b ldr r3, [r3, #0] - 800ff0a: 4013 ands r3, r2 - 800ff0c: 2b00 cmp r3, #0 - 800ff0e: d10d bne.n 800ff2c - /* ...and host identifier bits are all ones? =>... */ - && ((addr & ~ip4_addr_get_u32(netif_ip4_netmask(netif))) == - 800ff10: 683b ldr r3, [r7, #0] - 800ff12: 3308 adds r3, #8 - 800ff14: 681b ldr r3, [r3, #0] - 800ff16: 43da mvns r2, r3 - 800ff18: 687b ldr r3, [r7, #4] - 800ff1a: 401a ands r2, r3 - (IPADDR_BROADCAST & ~ip4_addr_get_u32(netif_ip4_netmask(netif))))) { - 800ff1c: 683b ldr r3, [r7, #0] - 800ff1e: 3308 adds r3, #8 - 800ff20: 681b ldr r3, [r3, #0] - 800ff22: 43db mvns r3, r3 - && ((addr & ~ip4_addr_get_u32(netif_ip4_netmask(netif))) == - 800ff24: 429a cmp r2, r3 - 800ff26: d101 bne.n 800ff2c - /* => network broadcast address */ - return 1; - 800ff28: 2301 movs r3, #1 - 800ff2a: e000 b.n 800ff2e - } else { - return 0; - 800ff2c: 2300 movs r3, #0 - } -} - 800ff2e: 4618 mov r0, r3 - 800ff30: 3714 adds r7, #20 - 800ff32: 46bd mov sp, r7 - 800ff34: f85d 7b04 ldr.w r7, [sp], #4 - 800ff38: 4770 bx lr - -0800ff3a : - * @param cp IP address in ascii representation (e.g. "127.0.0.1") - * @return ip address in network order - */ -u32_t -ipaddr_addr(const char *cp) -{ - 800ff3a: b580 push {r7, lr} - 800ff3c: b084 sub sp, #16 - 800ff3e: af00 add r7, sp, #0 - 800ff40: 6078 str r0, [r7, #4] - ip4_addr_t val; - - if (ip4addr_aton(cp, &val)) { - 800ff42: f107 030c add.w r3, r7, #12 - 800ff46: 4619 mov r1, r3 - 800ff48: 6878 ldr r0, [r7, #4] - 800ff4a: f000 f80b bl 800ff64 - 800ff4e: 4603 mov r3, r0 - 800ff50: 2b00 cmp r3, #0 - 800ff52: d001 beq.n 800ff58 - return ip4_addr_get_u32(&val); - 800ff54: 68fb ldr r3, [r7, #12] - 800ff56: e001 b.n 800ff5c - } - return (IPADDR_NONE); - 800ff58: f04f 33ff mov.w r3, #4294967295 -} - 800ff5c: 4618 mov r0, r3 - 800ff5e: 3710 adds r7, #16 - 800ff60: 46bd mov sp, r7 - 800ff62: bd80 pop {r7, pc} - -0800ff64 : - * @param addr pointer to which to save the ip address in network order - * @return 1 if cp could be converted to addr, 0 on failure - */ -int -ip4addr_aton(const char *cp, ip4_addr_t *addr) -{ - 800ff64: b580 push {r7, lr} - 800ff66: b08a sub sp, #40 ; 0x28 - 800ff68: af00 add r7, sp, #0 - 800ff6a: 6078 str r0, [r7, #4] - 800ff6c: 6039 str r1, [r7, #0] - u32_t val; - u8_t base; - char c; - u32_t parts[4]; - u32_t *pp = parts; - 800ff6e: f107 030c add.w r3, r7, #12 - 800ff72: 61fb str r3, [r7, #28] - - c = *cp; - 800ff74: 687b ldr r3, [r7, #4] - 800ff76: 781b ldrb r3, [r3, #0] - 800ff78: f887 3022 strb.w r3, [r7, #34] ; 0x22 - /* - * Collect number up to ``.''. - * Values are specified as for C: - * 0x=hex, 0=octal, 1-9=decimal. - */ - if (!lwip_isdigit(c)) { - 800ff7c: f897 3022 ldrb.w r3, [r7, #34] ; 0x22 - 800ff80: 3301 adds r3, #1 - 800ff82: 4a89 ldr r2, [pc, #548] ; (80101a8 ) - 800ff84: 4413 add r3, r2 - 800ff86: 781b ldrb r3, [r3, #0] - 800ff88: f003 0304 and.w r3, r3, #4 - 800ff8c: 2b00 cmp r3, #0 - 800ff8e: d101 bne.n 800ff94 - return 0; - 800ff90: 2300 movs r3, #0 - 800ff92: e105 b.n 80101a0 - } - val = 0; - 800ff94: 2300 movs r3, #0 - 800ff96: 627b str r3, [r7, #36] ; 0x24 - base = 10; - 800ff98: 230a movs r3, #10 - 800ff9a: f887 3023 strb.w r3, [r7, #35] ; 0x23 - if (c == '0') { - 800ff9e: f897 3022 ldrb.w r3, [r7, #34] ; 0x22 - 800ffa2: 2b30 cmp r3, #48 ; 0x30 - 800ffa4: d11c bne.n 800ffe0 - c = *++cp; - 800ffa6: 687b ldr r3, [r7, #4] - 800ffa8: 3301 adds r3, #1 - 800ffaa: 607b str r3, [r7, #4] - 800ffac: 687b ldr r3, [r7, #4] - 800ffae: 781b ldrb r3, [r3, #0] - 800ffb0: f887 3022 strb.w r3, [r7, #34] ; 0x22 - if (c == 'x' || c == 'X') { - 800ffb4: f897 3022 ldrb.w r3, [r7, #34] ; 0x22 - 800ffb8: 2b78 cmp r3, #120 ; 0x78 - 800ffba: d003 beq.n 800ffc4 - 800ffbc: f897 3022 ldrb.w r3, [r7, #34] ; 0x22 - 800ffc0: 2b58 cmp r3, #88 ; 0x58 - 800ffc2: d10a bne.n 800ffda - base = 16; - 800ffc4: 2310 movs r3, #16 - 800ffc6: f887 3023 strb.w r3, [r7, #35] ; 0x23 - c = *++cp; - 800ffca: 687b ldr r3, [r7, #4] - 800ffcc: 3301 adds r3, #1 - 800ffce: 607b str r3, [r7, #4] - 800ffd0: 687b ldr r3, [r7, #4] - 800ffd2: 781b ldrb r3, [r3, #0] - 800ffd4: f887 3022 strb.w r3, [r7, #34] ; 0x22 - 800ffd8: e002 b.n 800ffe0 - } else { - base = 8; - 800ffda: 2308 movs r3, #8 - 800ffdc: f887 3023 strb.w r3, [r7, #35] ; 0x23 - } - } - for (;;) { - if (lwip_isdigit(c)) { - 800ffe0: f897 3022 ldrb.w r3, [r7, #34] ; 0x22 - 800ffe4: 3301 adds r3, #1 - 800ffe6: 4a70 ldr r2, [pc, #448] ; (80101a8 ) - 800ffe8: 4413 add r3, r2 - 800ffea: 781b ldrb r3, [r3, #0] - 800ffec: f003 0304 and.w r3, r3, #4 - 800fff0: 2b00 cmp r3, #0 - 800fff2: d011 beq.n 8010018 - val = (val * base) + (u32_t)(c - '0'); - 800fff4: f897 3023 ldrb.w r3, [r7, #35] ; 0x23 - 800fff8: 6a7a ldr r2, [r7, #36] ; 0x24 - 800fffa: fb03 f202 mul.w r2, r3, r2 - 800fffe: f897 3022 ldrb.w r3, [r7, #34] ; 0x22 - 8010002: 4413 add r3, r2 - 8010004: 3b30 subs r3, #48 ; 0x30 - 8010006: 627b str r3, [r7, #36] ; 0x24 - c = *++cp; - 8010008: 687b ldr r3, [r7, #4] - 801000a: 3301 adds r3, #1 - 801000c: 607b str r3, [r7, #4] - 801000e: 687b ldr r3, [r7, #4] - 8010010: 781b ldrb r3, [r3, #0] - 8010012: f887 3022 strb.w r3, [r7, #34] ; 0x22 - 8010016: e7e3 b.n 800ffe0 - } else if (base == 16 && lwip_isxdigit(c)) { - 8010018: f897 3023 ldrb.w r3, [r7, #35] ; 0x23 - 801001c: 2b10 cmp r3, #16 - 801001e: d127 bne.n 8010070 - 8010020: f897 3022 ldrb.w r3, [r7, #34] ; 0x22 - 8010024: 3301 adds r3, #1 - 8010026: 4a60 ldr r2, [pc, #384] ; (80101a8 ) - 8010028: 4413 add r3, r2 - 801002a: 781b ldrb r3, [r3, #0] - 801002c: f003 0344 and.w r3, r3, #68 ; 0x44 - 8010030: 2b00 cmp r3, #0 - 8010032: d01d beq.n 8010070 - val = (val << 4) | (u32_t)(c + 10 - (lwip_islower(c) ? 'a' : 'A')); - 8010034: 6a7b ldr r3, [r7, #36] ; 0x24 - 8010036: 011b lsls r3, r3, #4 - 8010038: f897 2022 ldrb.w r2, [r7, #34] ; 0x22 - 801003c: f102 010a add.w r1, r2, #10 - 8010040: f897 2022 ldrb.w r2, [r7, #34] ; 0x22 - 8010044: 3201 adds r2, #1 - 8010046: 4858 ldr r0, [pc, #352] ; (80101a8 ) - 8010048: 4402 add r2, r0 - 801004a: 7812 ldrb r2, [r2, #0] - 801004c: f002 0203 and.w r2, r2, #3 - 8010050: 2a02 cmp r2, #2 - 8010052: d101 bne.n 8010058 - 8010054: 2261 movs r2, #97 ; 0x61 - 8010056: e000 b.n 801005a - 8010058: 2241 movs r2, #65 ; 0x41 - 801005a: 1a8a subs r2, r1, r2 - 801005c: 4313 orrs r3, r2 - 801005e: 627b str r3, [r7, #36] ; 0x24 - c = *++cp; - 8010060: 687b ldr r3, [r7, #4] - 8010062: 3301 adds r3, #1 - 8010064: 607b str r3, [r7, #4] - 8010066: 687b ldr r3, [r7, #4] - 8010068: 781b ldrb r3, [r3, #0] - 801006a: f887 3022 strb.w r3, [r7, #34] ; 0x22 - if (lwip_isdigit(c)) { - 801006e: e7b7 b.n 800ffe0 - } else { - break; - } - } - if (c == '.') { - 8010070: f897 3022 ldrb.w r3, [r7, #34] ; 0x22 - 8010074: 2b2e cmp r3, #46 ; 0x2e - 8010076: d114 bne.n 80100a2 - * Internet format: - * a.b.c.d - * a.b.c (with c treated as 16 bits) - * a.b (with b treated as 24 bits) - */ - if (pp >= parts + 3) { - 8010078: f107 030c add.w r3, r7, #12 - 801007c: 330c adds r3, #12 - 801007e: 69fa ldr r2, [r7, #28] - 8010080: 429a cmp r2, r3 - 8010082: d301 bcc.n 8010088 - return 0; - 8010084: 2300 movs r3, #0 - 8010086: e08b b.n 80101a0 - } - *pp++ = val; - 8010088: 69fb ldr r3, [r7, #28] - 801008a: 1d1a adds r2, r3, #4 - 801008c: 61fa str r2, [r7, #28] - 801008e: 6a7a ldr r2, [r7, #36] ; 0x24 - 8010090: 601a str r2, [r3, #0] - c = *++cp; - 8010092: 687b ldr r3, [r7, #4] - 8010094: 3301 adds r3, #1 - 8010096: 607b str r3, [r7, #4] - 8010098: 687b ldr r3, [r7, #4] - 801009a: 781b ldrb r3, [r3, #0] - 801009c: f887 3022 strb.w r3, [r7, #34] ; 0x22 - if (!lwip_isdigit(c)) { - 80100a0: e76c b.n 800ff7c - } else { - break; - 80100a2: bf00 nop - } - } - /* - * Check for trailing characters. - */ - if (c != '\0' && !lwip_isspace(c)) { - 80100a4: f897 3022 ldrb.w r3, [r7, #34] ; 0x22 - 80100a8: 2b00 cmp r3, #0 - 80100aa: d00b beq.n 80100c4 - 80100ac: f897 3022 ldrb.w r3, [r7, #34] ; 0x22 - 80100b0: 3301 adds r3, #1 - 80100b2: 4a3d ldr r2, [pc, #244] ; (80101a8 ) - 80100b4: 4413 add r3, r2 - 80100b6: 781b ldrb r3, [r3, #0] - 80100b8: f003 0308 and.w r3, r3, #8 - 80100bc: 2b00 cmp r3, #0 - 80100be: d101 bne.n 80100c4 - return 0; - 80100c0: 2300 movs r3, #0 - 80100c2: e06d b.n 80101a0 - } - /* - * Concoct the address according to - * the number of parts specified. - */ - switch (pp - parts + 1) { - 80100c4: f107 030c add.w r3, r7, #12 - 80100c8: 69fa ldr r2, [r7, #28] - 80100ca: 1ad3 subs r3, r2, r3 - 80100cc: 109b asrs r3, r3, #2 - 80100ce: 3301 adds r3, #1 - 80100d0: 2b04 cmp r3, #4 - 80100d2: d853 bhi.n 801017c - 80100d4: a201 add r2, pc, #4 ; (adr r2, 80100dc ) - 80100d6: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 80100da: bf00 nop - 80100dc: 080100f1 .word 0x080100f1 - 80100e0: 0801018b .word 0x0801018b - 80100e4: 080100f5 .word 0x080100f5 - 80100e8: 08010117 .word 0x08010117 - 80100ec: 08010145 .word 0x08010145 - - case 0: - return 0; /* initial nondigit */ - 80100f0: 2300 movs r3, #0 - 80100f2: e055 b.n 80101a0 - - case 1: /* a -- 32 bits */ - break; - - case 2: /* a.b -- 8.24 bits */ - if (val > 0xffffffUL) { - 80100f4: 6a7b ldr r3, [r7, #36] ; 0x24 - 80100f6: f1b3 7f80 cmp.w r3, #16777216 ; 0x1000000 - 80100fa: d301 bcc.n 8010100 - return 0; - 80100fc: 2300 movs r3, #0 - 80100fe: e04f b.n 80101a0 - } - if (parts[0] > 0xff) { - 8010100: 68fb ldr r3, [r7, #12] - 8010102: 2bff cmp r3, #255 ; 0xff - 8010104: d901 bls.n 801010a - return 0; - 8010106: 2300 movs r3, #0 - 8010108: e04a b.n 80101a0 - } - val |= parts[0] << 24; - 801010a: 68fb ldr r3, [r7, #12] - 801010c: 061b lsls r3, r3, #24 - 801010e: 6a7a ldr r2, [r7, #36] ; 0x24 - 8010110: 4313 orrs r3, r2 - 8010112: 627b str r3, [r7, #36] ; 0x24 - break; - 8010114: e03a b.n 801018c - - case 3: /* a.b.c -- 8.8.16 bits */ - if (val > 0xffff) { - 8010116: 6a7b ldr r3, [r7, #36] ; 0x24 - 8010118: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 801011c: d301 bcc.n 8010122 - return 0; - 801011e: 2300 movs r3, #0 - 8010120: e03e b.n 80101a0 - } - if ((parts[0] > 0xff) || (parts[1] > 0xff)) { - 8010122: 68fb ldr r3, [r7, #12] - 8010124: 2bff cmp r3, #255 ; 0xff - 8010126: d802 bhi.n 801012e - 8010128: 693b ldr r3, [r7, #16] - 801012a: 2bff cmp r3, #255 ; 0xff - 801012c: d901 bls.n 8010132 - return 0; - 801012e: 2300 movs r3, #0 - 8010130: e036 b.n 80101a0 - } - val |= (parts[0] << 24) | (parts[1] << 16); - 8010132: 68fb ldr r3, [r7, #12] - 8010134: 061a lsls r2, r3, #24 - 8010136: 693b ldr r3, [r7, #16] - 8010138: 041b lsls r3, r3, #16 - 801013a: 4313 orrs r3, r2 - 801013c: 6a7a ldr r2, [r7, #36] ; 0x24 - 801013e: 4313 orrs r3, r2 - 8010140: 627b str r3, [r7, #36] ; 0x24 - break; - 8010142: e023 b.n 801018c - - case 4: /* a.b.c.d -- 8.8.8.8 bits */ - if (val > 0xff) { - 8010144: 6a7b ldr r3, [r7, #36] ; 0x24 - 8010146: 2bff cmp r3, #255 ; 0xff - 8010148: d901 bls.n 801014e - return 0; - 801014a: 2300 movs r3, #0 - 801014c: e028 b.n 80101a0 - } - if ((parts[0] > 0xff) || (parts[1] > 0xff) || (parts[2] > 0xff)) { - 801014e: 68fb ldr r3, [r7, #12] - 8010150: 2bff cmp r3, #255 ; 0xff - 8010152: d805 bhi.n 8010160 - 8010154: 693b ldr r3, [r7, #16] - 8010156: 2bff cmp r3, #255 ; 0xff - 8010158: d802 bhi.n 8010160 - 801015a: 697b ldr r3, [r7, #20] - 801015c: 2bff cmp r3, #255 ; 0xff - 801015e: d901 bls.n 8010164 - return 0; - 8010160: 2300 movs r3, #0 - 8010162: e01d b.n 80101a0 - } - val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8); - 8010164: 68fb ldr r3, [r7, #12] - 8010166: 061a lsls r2, r3, #24 - 8010168: 693b ldr r3, [r7, #16] - 801016a: 041b lsls r3, r3, #16 - 801016c: 431a orrs r2, r3 - 801016e: 697b ldr r3, [r7, #20] - 8010170: 021b lsls r3, r3, #8 - 8010172: 4313 orrs r3, r2 - 8010174: 6a7a ldr r2, [r7, #36] ; 0x24 - 8010176: 4313 orrs r3, r2 - 8010178: 627b str r3, [r7, #36] ; 0x24 - break; - 801017a: e007 b.n 801018c - default: - LWIP_ASSERT("unhandled", 0); - 801017c: 4b0b ldr r3, [pc, #44] ; (80101ac ) - 801017e: 22f9 movs r2, #249 ; 0xf9 - 8010180: 490b ldr r1, [pc, #44] ; (80101b0 ) - 8010182: 480c ldr r0, [pc, #48] ; (80101b4 ) - 8010184: f000 ff90 bl 80110a8 - break; - 8010188: e000 b.n 801018c - break; - 801018a: bf00 nop - } - if (addr) { - 801018c: 683b ldr r3, [r7, #0] - 801018e: 2b00 cmp r3, #0 - 8010190: d005 beq.n 801019e - ip4_addr_set_u32(addr, lwip_htonl(val)); - 8010192: 6a78 ldr r0, [r7, #36] ; 0x24 - 8010194: f7f4 febb bl 8004f0e - 8010198: 4602 mov r2, r0 - 801019a: 683b ldr r3, [r7, #0] - 801019c: 601a str r2, [r3, #0] - } - return 1; - 801019e: 2301 movs r3, #1 -} - 80101a0: 4618 mov r0, r3 - 80101a2: 3728 adds r7, #40 ; 0x28 - 80101a4: 46bd mov sp, r7 - 80101a6: bd80 pop {r7, pc} - 80101a8: 08018ae2 .word 0x08018ae2 - 80101ac: 080186a4 .word 0x080186a4 - 80101b0: 080186e0 .word 0x080186e0 - 80101b4: 080186ec .word 0x080186ec - -080101b8 : - * - * Should be called every 1000 msec (defined by IP_TMR_INTERVAL). - */ -void -ip_reass_tmr(void) -{ - 80101b8: b580 push {r7, lr} - 80101ba: b084 sub sp, #16 - 80101bc: af00 add r7, sp, #0 - struct ip_reassdata *r, *prev = NULL; - 80101be: 2300 movs r3, #0 - 80101c0: 60bb str r3, [r7, #8] - - r = reassdatagrams; - 80101c2: 4b12 ldr r3, [pc, #72] ; (801020c ) - 80101c4: 681b ldr r3, [r3, #0] - 80101c6: 60fb str r3, [r7, #12] - while (r != NULL) { - 80101c8: e018 b.n 80101fc - /* Decrement the timer. Once it reaches 0, - * clean up the incomplete fragment assembly */ - if (r->timer > 0) { - 80101ca: 68fb ldr r3, [r7, #12] - 80101cc: 7fdb ldrb r3, [r3, #31] - 80101ce: 2b00 cmp r3, #0 - 80101d0: d00b beq.n 80101ea - r->timer--; - 80101d2: 68fb ldr r3, [r7, #12] - 80101d4: 7fdb ldrb r3, [r3, #31] - 80101d6: 3b01 subs r3, #1 - 80101d8: b2da uxtb r2, r3 - 80101da: 68fb ldr r3, [r7, #12] - 80101dc: 77da strb r2, [r3, #31] - LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer dec %"U16_F"\n", (u16_t)r->timer)); - prev = r; - 80101de: 68fb ldr r3, [r7, #12] - 80101e0: 60bb str r3, [r7, #8] - r = r->next; - 80101e2: 68fb ldr r3, [r7, #12] - 80101e4: 681b ldr r3, [r3, #0] - 80101e6: 60fb str r3, [r7, #12] - 80101e8: e008 b.n 80101fc - } else { - /* reassembly timed out */ - struct ip_reassdata *tmp; - LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer timed out\n")); - tmp = r; - 80101ea: 68fb ldr r3, [r7, #12] - 80101ec: 607b str r3, [r7, #4] - /* get the next pointer before freeing */ - r = r->next; - 80101ee: 68fb ldr r3, [r7, #12] - 80101f0: 681b ldr r3, [r3, #0] - 80101f2: 60fb str r3, [r7, #12] - /* free the helper struct and all enqueued pbufs */ - ip_reass_free_complete_datagram(tmp, prev); - 80101f4: 68b9 ldr r1, [r7, #8] - 80101f6: 6878 ldr r0, [r7, #4] - 80101f8: f000 f80a bl 8010210 - while (r != NULL) { - 80101fc: 68fb ldr r3, [r7, #12] - 80101fe: 2b00 cmp r3, #0 - 8010200: d1e3 bne.n 80101ca - } - } -} - 8010202: bf00 nop - 8010204: bf00 nop - 8010206: 3710 adds r7, #16 - 8010208: 46bd mov sp, r7 - 801020a: bd80 pop {r7, pc} - 801020c: 20009b5c .word 0x20009b5c - -08010210 : - * @param prev the previous datagram in the linked list - * @return the number of pbufs freed - */ -static int -ip_reass_free_complete_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev) -{ - 8010210: b580 push {r7, lr} - 8010212: b088 sub sp, #32 - 8010214: af00 add r7, sp, #0 - 8010216: 6078 str r0, [r7, #4] - 8010218: 6039 str r1, [r7, #0] - u16_t pbufs_freed = 0; - 801021a: 2300 movs r3, #0 - 801021c: 83fb strh r3, [r7, #30] - u16_t clen; - struct pbuf *p; - struct ip_reass_helper *iprh; - - LWIP_ASSERT("prev != ipr", prev != ipr); - 801021e: 683a ldr r2, [r7, #0] - 8010220: 687b ldr r3, [r7, #4] - 8010222: 429a cmp r2, r3 - 8010224: d105 bne.n 8010232 - 8010226: 4b45 ldr r3, [pc, #276] ; (801033c ) - 8010228: 22ab movs r2, #171 ; 0xab - 801022a: 4945 ldr r1, [pc, #276] ; (8010340 ) - 801022c: 4845 ldr r0, [pc, #276] ; (8010344 ) - 801022e: f000 ff3b bl 80110a8 - if (prev != NULL) { - 8010232: 683b ldr r3, [r7, #0] - 8010234: 2b00 cmp r3, #0 - 8010236: d00a beq.n 801024e - LWIP_ASSERT("prev->next == ipr", prev->next == ipr); - 8010238: 683b ldr r3, [r7, #0] - 801023a: 681b ldr r3, [r3, #0] - 801023c: 687a ldr r2, [r7, #4] - 801023e: 429a cmp r2, r3 - 8010240: d005 beq.n 801024e - 8010242: 4b3e ldr r3, [pc, #248] ; (801033c ) - 8010244: 22ad movs r2, #173 ; 0xad - 8010246: 4940 ldr r1, [pc, #256] ; (8010348 ) - 8010248: 483e ldr r0, [pc, #248] ; (8010344 ) - 801024a: f000 ff2d bl 80110a8 - } - - MIB2_STATS_INC(mib2.ipreasmfails); -#if LWIP_ICMP - iprh = (struct ip_reass_helper *)ipr->p->payload; - 801024e: 687b ldr r3, [r7, #4] - 8010250: 685b ldr r3, [r3, #4] - 8010252: 685b ldr r3, [r3, #4] - 8010254: 617b str r3, [r7, #20] - if (iprh->start == 0) { - 8010256: 697b ldr r3, [r7, #20] - 8010258: 889b ldrh r3, [r3, #4] - 801025a: b29b uxth r3, r3 - 801025c: 2b00 cmp r3, #0 - 801025e: d12a bne.n 80102b6 - /* The first fragment was received, send ICMP time exceeded. */ - /* First, de-queue the first pbuf from r->p. */ - p = ipr->p; - 8010260: 687b ldr r3, [r7, #4] - 8010262: 685b ldr r3, [r3, #4] - 8010264: 61bb str r3, [r7, #24] - ipr->p = iprh->next_pbuf; - 8010266: 697b ldr r3, [r7, #20] - 8010268: 681a ldr r2, [r3, #0] - 801026a: 687b ldr r3, [r7, #4] - 801026c: 605a str r2, [r3, #4] - /* Then, copy the original header into it. */ - SMEMCPY(p->payload, &ipr->iphdr, IP_HLEN); - 801026e: 69bb ldr r3, [r7, #24] - 8010270: 6858 ldr r0, [r3, #4] - 8010272: 687b ldr r3, [r7, #4] - 8010274: 3308 adds r3, #8 - 8010276: 2214 movs r2, #20 - 8010278: 4619 mov r1, r3 - 801027a: f000 fee5 bl 8011048 - icmp_time_exceeded(p, ICMP_TE_FRAG); - 801027e: 2101 movs r1, #1 - 8010280: 69b8 ldr r0, [r7, #24] - 8010282: f7ff faeb bl 800f85c - clen = pbuf_clen(p); - 8010286: 69b8 ldr r0, [r7, #24] - 8010288: f7f6 fa1e bl 80066c8 - 801028c: 4603 mov r3, r0 - 801028e: 827b strh r3, [r7, #18] - LWIP_ASSERT("pbufs_freed + clen <= 0xffff", pbufs_freed + clen <= 0xffff); - 8010290: 8bfa ldrh r2, [r7, #30] - 8010292: 8a7b ldrh r3, [r7, #18] - 8010294: 4413 add r3, r2 - 8010296: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 801029a: db05 blt.n 80102a8 - 801029c: 4b27 ldr r3, [pc, #156] ; (801033c ) - 801029e: 22bc movs r2, #188 ; 0xbc - 80102a0: 492a ldr r1, [pc, #168] ; (801034c ) - 80102a2: 4828 ldr r0, [pc, #160] ; (8010344 ) - 80102a4: f000 ff00 bl 80110a8 - pbufs_freed = (u16_t)(pbufs_freed + clen); - 80102a8: 8bfa ldrh r2, [r7, #30] - 80102aa: 8a7b ldrh r3, [r7, #18] - 80102ac: 4413 add r3, r2 - 80102ae: 83fb strh r3, [r7, #30] - pbuf_free(p); - 80102b0: 69b8 ldr r0, [r7, #24] - 80102b2: f7f6 f981 bl 80065b8 - } -#endif /* LWIP_ICMP */ - - /* First, free all received pbufs. The individual pbufs need to be released - separately as they have not yet been chained */ - p = ipr->p; - 80102b6: 687b ldr r3, [r7, #4] - 80102b8: 685b ldr r3, [r3, #4] - 80102ba: 61bb str r3, [r7, #24] - while (p != NULL) { - 80102bc: e01f b.n 80102fe - struct pbuf *pcur; - iprh = (struct ip_reass_helper *)p->payload; - 80102be: 69bb ldr r3, [r7, #24] - 80102c0: 685b ldr r3, [r3, #4] - 80102c2: 617b str r3, [r7, #20] - pcur = p; - 80102c4: 69bb ldr r3, [r7, #24] - 80102c6: 60fb str r3, [r7, #12] - /* get the next pointer before freeing */ - p = iprh->next_pbuf; - 80102c8: 697b ldr r3, [r7, #20] - 80102ca: 681b ldr r3, [r3, #0] - 80102cc: 61bb str r3, [r7, #24] - clen = pbuf_clen(pcur); - 80102ce: 68f8 ldr r0, [r7, #12] - 80102d0: f7f6 f9fa bl 80066c8 - 80102d4: 4603 mov r3, r0 - 80102d6: 827b strh r3, [r7, #18] - LWIP_ASSERT("pbufs_freed + clen <= 0xffff", pbufs_freed + clen <= 0xffff); - 80102d8: 8bfa ldrh r2, [r7, #30] - 80102da: 8a7b ldrh r3, [r7, #18] - 80102dc: 4413 add r3, r2 - 80102de: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 80102e2: db05 blt.n 80102f0 - 80102e4: 4b15 ldr r3, [pc, #84] ; (801033c ) - 80102e6: 22cc movs r2, #204 ; 0xcc - 80102e8: 4918 ldr r1, [pc, #96] ; (801034c ) - 80102ea: 4816 ldr r0, [pc, #88] ; (8010344 ) - 80102ec: f000 fedc bl 80110a8 - pbufs_freed = (u16_t)(pbufs_freed + clen); - 80102f0: 8bfa ldrh r2, [r7, #30] - 80102f2: 8a7b ldrh r3, [r7, #18] - 80102f4: 4413 add r3, r2 - 80102f6: 83fb strh r3, [r7, #30] - pbuf_free(pcur); - 80102f8: 68f8 ldr r0, [r7, #12] - 80102fa: f7f6 f95d bl 80065b8 - while (p != NULL) { - 80102fe: 69bb ldr r3, [r7, #24] - 8010300: 2b00 cmp r3, #0 - 8010302: d1dc bne.n 80102be - } - /* Then, unchain the struct ip_reassdata from the list and free it. */ - ip_reass_dequeue_datagram(ipr, prev); - 8010304: 6839 ldr r1, [r7, #0] - 8010306: 6878 ldr r0, [r7, #4] - 8010308: f000 f8c2 bl 8010490 - LWIP_ASSERT("ip_reass_pbufcount >= pbufs_freed", ip_reass_pbufcount >= pbufs_freed); - 801030c: 4b10 ldr r3, [pc, #64] ; (8010350 ) - 801030e: 881b ldrh r3, [r3, #0] - 8010310: 8bfa ldrh r2, [r7, #30] - 8010312: 429a cmp r2, r3 - 8010314: d905 bls.n 8010322 - 8010316: 4b09 ldr r3, [pc, #36] ; (801033c ) - 8010318: 22d2 movs r2, #210 ; 0xd2 - 801031a: 490e ldr r1, [pc, #56] ; (8010354 ) - 801031c: 4809 ldr r0, [pc, #36] ; (8010344 ) - 801031e: f000 fec3 bl 80110a8 - ip_reass_pbufcount = (u16_t)(ip_reass_pbufcount - pbufs_freed); - 8010322: 4b0b ldr r3, [pc, #44] ; (8010350 ) - 8010324: 881a ldrh r2, [r3, #0] - 8010326: 8bfb ldrh r3, [r7, #30] - 8010328: 1ad3 subs r3, r2, r3 - 801032a: b29a uxth r2, r3 - 801032c: 4b08 ldr r3, [pc, #32] ; (8010350 ) - 801032e: 801a strh r2, [r3, #0] - - return pbufs_freed; - 8010330: 8bfb ldrh r3, [r7, #30] -} - 8010332: 4618 mov r0, r3 - 8010334: 3720 adds r7, #32 - 8010336: 46bd mov sp, r7 - 8010338: bd80 pop {r7, pc} - 801033a: bf00 nop - 801033c: 08018714 .word 0x08018714 - 8010340: 08018750 .word 0x08018750 - 8010344: 0801875c .word 0x0801875c - 8010348: 08018784 .word 0x08018784 - 801034c: 08018798 .word 0x08018798 - 8010350: 20009b60 .word 0x20009b60 - 8010354: 080187b8 .word 0x080187b8 - -08010358 : - * (used for freeing other datagrams if not enough space) - * @return the number of pbufs freed - */ -static int -ip_reass_remove_oldest_datagram(struct ip_hdr *fraghdr, int pbufs_needed) -{ - 8010358: b580 push {r7, lr} - 801035a: b08a sub sp, #40 ; 0x28 - 801035c: af00 add r7, sp, #0 - 801035e: 6078 str r0, [r7, #4] - 8010360: 6039 str r1, [r7, #0] - /* @todo Can't we simply remove the last datagram in the - * linked list behind reassdatagrams? - */ - struct ip_reassdata *r, *oldest, *prev, *oldest_prev; - int pbufs_freed = 0, pbufs_freed_current; - 8010362: 2300 movs r3, #0 - 8010364: 617b str r3, [r7, #20] - int other_datagrams; - - /* Free datagrams until being allowed to enqueue 'pbufs_needed' pbufs, - * but don't free the datagram that 'fraghdr' belongs to! */ - do { - oldest = NULL; - 8010366: 2300 movs r3, #0 - 8010368: 623b str r3, [r7, #32] - prev = NULL; - 801036a: 2300 movs r3, #0 - 801036c: 61fb str r3, [r7, #28] - oldest_prev = NULL; - 801036e: 2300 movs r3, #0 - 8010370: 61bb str r3, [r7, #24] - other_datagrams = 0; - 8010372: 2300 movs r3, #0 - 8010374: 613b str r3, [r7, #16] - r = reassdatagrams; - 8010376: 4b28 ldr r3, [pc, #160] ; (8010418 ) - 8010378: 681b ldr r3, [r3, #0] - 801037a: 627b str r3, [r7, #36] ; 0x24 - while (r != NULL) { - 801037c: e030 b.n 80103e0 - if (!IP_ADDRESSES_AND_ID_MATCH(&r->iphdr, fraghdr)) { - 801037e: 6a7b ldr r3, [r7, #36] ; 0x24 - 8010380: 695a ldr r2, [r3, #20] - 8010382: 687b ldr r3, [r7, #4] - 8010384: 68db ldr r3, [r3, #12] - 8010386: 429a cmp r2, r3 - 8010388: d10c bne.n 80103a4 - 801038a: 6a7b ldr r3, [r7, #36] ; 0x24 - 801038c: 699a ldr r2, [r3, #24] - 801038e: 687b ldr r3, [r7, #4] - 8010390: 691b ldr r3, [r3, #16] - 8010392: 429a cmp r2, r3 - 8010394: d106 bne.n 80103a4 - 8010396: 6a7b ldr r3, [r7, #36] ; 0x24 - 8010398: 899a ldrh r2, [r3, #12] - 801039a: 687b ldr r3, [r7, #4] - 801039c: 889b ldrh r3, [r3, #4] - 801039e: b29b uxth r3, r3 - 80103a0: 429a cmp r2, r3 - 80103a2: d014 beq.n 80103ce - /* Not the same datagram as fraghdr */ - other_datagrams++; - 80103a4: 693b ldr r3, [r7, #16] - 80103a6: 3301 adds r3, #1 - 80103a8: 613b str r3, [r7, #16] - if (oldest == NULL) { - 80103aa: 6a3b ldr r3, [r7, #32] - 80103ac: 2b00 cmp r3, #0 - 80103ae: d104 bne.n 80103ba - oldest = r; - 80103b0: 6a7b ldr r3, [r7, #36] ; 0x24 - 80103b2: 623b str r3, [r7, #32] - oldest_prev = prev; - 80103b4: 69fb ldr r3, [r7, #28] - 80103b6: 61bb str r3, [r7, #24] - 80103b8: e009 b.n 80103ce - } else if (r->timer <= oldest->timer) { - 80103ba: 6a7b ldr r3, [r7, #36] ; 0x24 - 80103bc: 7fda ldrb r2, [r3, #31] - 80103be: 6a3b ldr r3, [r7, #32] - 80103c0: 7fdb ldrb r3, [r3, #31] - 80103c2: 429a cmp r2, r3 - 80103c4: d803 bhi.n 80103ce - /* older than the previous oldest */ - oldest = r; - 80103c6: 6a7b ldr r3, [r7, #36] ; 0x24 - 80103c8: 623b str r3, [r7, #32] - oldest_prev = prev; - 80103ca: 69fb ldr r3, [r7, #28] - 80103cc: 61bb str r3, [r7, #24] - } - } - if (r->next != NULL) { - 80103ce: 6a7b ldr r3, [r7, #36] ; 0x24 - 80103d0: 681b ldr r3, [r3, #0] - 80103d2: 2b00 cmp r3, #0 - 80103d4: d001 beq.n 80103da - prev = r; - 80103d6: 6a7b ldr r3, [r7, #36] ; 0x24 - 80103d8: 61fb str r3, [r7, #28] - } - r = r->next; - 80103da: 6a7b ldr r3, [r7, #36] ; 0x24 - 80103dc: 681b ldr r3, [r3, #0] - 80103de: 627b str r3, [r7, #36] ; 0x24 - while (r != NULL) { - 80103e0: 6a7b ldr r3, [r7, #36] ; 0x24 - 80103e2: 2b00 cmp r3, #0 - 80103e4: d1cb bne.n 801037e - } - if (oldest != NULL) { - 80103e6: 6a3b ldr r3, [r7, #32] - 80103e8: 2b00 cmp r3, #0 - 80103ea: d008 beq.n 80103fe - pbufs_freed_current = ip_reass_free_complete_datagram(oldest, oldest_prev); - 80103ec: 69b9 ldr r1, [r7, #24] - 80103ee: 6a38 ldr r0, [r7, #32] - 80103f0: f7ff ff0e bl 8010210 - 80103f4: 60f8 str r0, [r7, #12] - pbufs_freed += pbufs_freed_current; - 80103f6: 697a ldr r2, [r7, #20] - 80103f8: 68fb ldr r3, [r7, #12] - 80103fa: 4413 add r3, r2 - 80103fc: 617b str r3, [r7, #20] - } - } while ((pbufs_freed < pbufs_needed) && (other_datagrams > 1)); - 80103fe: 697a ldr r2, [r7, #20] - 8010400: 683b ldr r3, [r7, #0] - 8010402: 429a cmp r2, r3 - 8010404: da02 bge.n 801040c - 8010406: 693b ldr r3, [r7, #16] - 8010408: 2b01 cmp r3, #1 - 801040a: dcac bgt.n 8010366 - return pbufs_freed; - 801040c: 697b ldr r3, [r7, #20] -} - 801040e: 4618 mov r0, r3 - 8010410: 3728 adds r7, #40 ; 0x28 - 8010412: 46bd mov sp, r7 - 8010414: bd80 pop {r7, pc} - 8010416: bf00 nop - 8010418: 20009b5c .word 0x20009b5c - -0801041c : - * @param clen number of pbufs needed to enqueue (used for freeing other datagrams if not enough space) - * @return A pointer to the queue location into which the fragment was enqueued - */ -static struct ip_reassdata * -ip_reass_enqueue_new_datagram(struct ip_hdr *fraghdr, int clen) -{ - 801041c: b580 push {r7, lr} - 801041e: b084 sub sp, #16 - 8010420: af00 add r7, sp, #0 - 8010422: 6078 str r0, [r7, #4] - 8010424: 6039 str r1, [r7, #0] -#if ! IP_REASS_FREE_OLDEST - LWIP_UNUSED_ARG(clen); -#endif - - /* No matching previous fragment found, allocate a new reassdata struct */ - ipr = (struct ip_reassdata *)memp_malloc(MEMP_REASSDATA); - 8010426: 2004 movs r0, #4 - 8010428: f7f5 f9d4 bl 80057d4 - 801042c: 60f8 str r0, [r7, #12] - if (ipr == NULL) { - 801042e: 68fb ldr r3, [r7, #12] - 8010430: 2b00 cmp r3, #0 - 8010432: d110 bne.n 8010456 -#if IP_REASS_FREE_OLDEST - if (ip_reass_remove_oldest_datagram(fraghdr, clen) >= clen) { - 8010434: 6839 ldr r1, [r7, #0] - 8010436: 6878 ldr r0, [r7, #4] - 8010438: f7ff ff8e bl 8010358 - 801043c: 4602 mov r2, r0 - 801043e: 683b ldr r3, [r7, #0] - 8010440: 4293 cmp r3, r2 - 8010442: dc03 bgt.n 801044c - ipr = (struct ip_reassdata *)memp_malloc(MEMP_REASSDATA); - 8010444: 2004 movs r0, #4 - 8010446: f7f5 f9c5 bl 80057d4 - 801044a: 60f8 str r0, [r7, #12] - } - if (ipr == NULL) - 801044c: 68fb ldr r3, [r7, #12] - 801044e: 2b00 cmp r3, #0 - 8010450: d101 bne.n 8010456 -#endif /* IP_REASS_FREE_OLDEST */ - { - IPFRAG_STATS_INC(ip_frag.memerr); - LWIP_DEBUGF(IP_REASS_DEBUG, ("Failed to alloc reassdata struct\n")); - return NULL; - 8010452: 2300 movs r3, #0 - 8010454: e016 b.n 8010484 - } - } - memset(ipr, 0, sizeof(struct ip_reassdata)); - 8010456: 2220 movs r2, #32 - 8010458: 2100 movs r1, #0 - 801045a: 68f8 ldr r0, [r7, #12] - 801045c: f000 fe1c bl 8011098 - ipr->timer = IP_REASS_MAXAGE; - 8010460: 68fb ldr r3, [r7, #12] - 8010462: 220f movs r2, #15 - 8010464: 77da strb r2, [r3, #31] - - /* enqueue the new structure to the front of the list */ - ipr->next = reassdatagrams; - 8010466: 4b09 ldr r3, [pc, #36] ; (801048c ) - 8010468: 681a ldr r2, [r3, #0] - 801046a: 68fb ldr r3, [r7, #12] - 801046c: 601a str r2, [r3, #0] - reassdatagrams = ipr; - 801046e: 4a07 ldr r2, [pc, #28] ; (801048c ) - 8010470: 68fb ldr r3, [r7, #12] - 8010472: 6013 str r3, [r2, #0] - /* copy the ip header for later tests and input */ - /* @todo: no ip options supported? */ - SMEMCPY(&(ipr->iphdr), fraghdr, IP_HLEN); - 8010474: 68fb ldr r3, [r7, #12] - 8010476: 3308 adds r3, #8 - 8010478: 2214 movs r2, #20 - 801047a: 6879 ldr r1, [r7, #4] - 801047c: 4618 mov r0, r3 - 801047e: f000 fde3 bl 8011048 - return ipr; - 8010482: 68fb ldr r3, [r7, #12] -} - 8010484: 4618 mov r0, r3 - 8010486: 3710 adds r7, #16 - 8010488: 46bd mov sp, r7 - 801048a: bd80 pop {r7, pc} - 801048c: 20009b5c .word 0x20009b5c - -08010490 : - * Dequeues a datagram from the datagram queue. Doesn't deallocate the pbufs. - * @param ipr points to the queue entry to dequeue - */ -static void -ip_reass_dequeue_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev) -{ - 8010490: b580 push {r7, lr} - 8010492: b082 sub sp, #8 - 8010494: af00 add r7, sp, #0 - 8010496: 6078 str r0, [r7, #4] - 8010498: 6039 str r1, [r7, #0] - /* dequeue the reass struct */ - if (reassdatagrams == ipr) { - 801049a: 4b10 ldr r3, [pc, #64] ; (80104dc ) - 801049c: 681b ldr r3, [r3, #0] - 801049e: 687a ldr r2, [r7, #4] - 80104a0: 429a cmp r2, r3 - 80104a2: d104 bne.n 80104ae - /* it was the first in the list */ - reassdatagrams = ipr->next; - 80104a4: 687b ldr r3, [r7, #4] - 80104a6: 681b ldr r3, [r3, #0] - 80104a8: 4a0c ldr r2, [pc, #48] ; (80104dc ) - 80104aa: 6013 str r3, [r2, #0] - 80104ac: e00d b.n 80104ca - } else { - /* it wasn't the first, so it must have a valid 'prev' */ - LWIP_ASSERT("sanity check linked list", prev != NULL); - 80104ae: 683b ldr r3, [r7, #0] - 80104b0: 2b00 cmp r3, #0 - 80104b2: d106 bne.n 80104c2 - 80104b4: 4b0a ldr r3, [pc, #40] ; (80104e0 ) - 80104b6: f240 1245 movw r2, #325 ; 0x145 - 80104ba: 490a ldr r1, [pc, #40] ; (80104e4 ) - 80104bc: 480a ldr r0, [pc, #40] ; (80104e8 ) - 80104be: f000 fdf3 bl 80110a8 - prev->next = ipr->next; - 80104c2: 687b ldr r3, [r7, #4] - 80104c4: 681a ldr r2, [r3, #0] - 80104c6: 683b ldr r3, [r7, #0] - 80104c8: 601a str r2, [r3, #0] - } - - /* now we can free the ip_reassdata struct */ - memp_free(MEMP_REASSDATA, ipr); - 80104ca: 6879 ldr r1, [r7, #4] - 80104cc: 2004 movs r0, #4 - 80104ce: f7f5 f9f1 bl 80058b4 -} - 80104d2: bf00 nop - 80104d4: 3708 adds r7, #8 - 80104d6: 46bd mov sp, r7 - 80104d8: bd80 pop {r7, pc} - 80104da: bf00 nop - 80104dc: 20009b5c .word 0x20009b5c - 80104e0: 08018714 .word 0x08018714 - 80104e4: 080187dc .word 0x080187dc - 80104e8: 0801875c .word 0x0801875c - -080104ec : - * @param is_last is 1 if this pbuf has MF==0 (ipr->flags not updated yet) - * @return see IP_REASS_VALIDATE_* defines - */ -static int -ip_reass_chain_frag_into_datagram_and_validate(struct ip_reassdata *ipr, struct pbuf *new_p, int is_last) -{ - 80104ec: b580 push {r7, lr} - 80104ee: b08c sub sp, #48 ; 0x30 - 80104f0: af00 add r7, sp, #0 - 80104f2: 60f8 str r0, [r7, #12] - 80104f4: 60b9 str r1, [r7, #8] - 80104f6: 607a str r2, [r7, #4] - struct ip_reass_helper *iprh, *iprh_tmp, *iprh_prev = NULL; - 80104f8: 2300 movs r3, #0 - 80104fa: 62bb str r3, [r7, #40] ; 0x28 - struct pbuf *q; - u16_t offset, len; - u8_t hlen; - struct ip_hdr *fraghdr; - int valid = 1; - 80104fc: 2301 movs r3, #1 - 80104fe: 623b str r3, [r7, #32] - - /* Extract length and fragment offset from current fragment */ - fraghdr = (struct ip_hdr *)new_p->payload; - 8010500: 68bb ldr r3, [r7, #8] - 8010502: 685b ldr r3, [r3, #4] - 8010504: 61fb str r3, [r7, #28] - len = lwip_ntohs(IPH_LEN(fraghdr)); - 8010506: 69fb ldr r3, [r7, #28] - 8010508: 885b ldrh r3, [r3, #2] - 801050a: b29b uxth r3, r3 - 801050c: 4618 mov r0, r3 - 801050e: f7f4 fce9 bl 8004ee4 - 8010512: 4603 mov r3, r0 - 8010514: 837b strh r3, [r7, #26] - hlen = IPH_HL_BYTES(fraghdr); - 8010516: 69fb ldr r3, [r7, #28] - 8010518: 781b ldrb r3, [r3, #0] - 801051a: f003 030f and.w r3, r3, #15 - 801051e: b2db uxtb r3, r3 - 8010520: 009b lsls r3, r3, #2 - 8010522: 767b strb r3, [r7, #25] - if (hlen > len) { - 8010524: 7e7b ldrb r3, [r7, #25] - 8010526: b29b uxth r3, r3 - 8010528: 8b7a ldrh r2, [r7, #26] - 801052a: 429a cmp r2, r3 - 801052c: d202 bcs.n 8010534 - /* invalid datagram */ - return IP_REASS_VALIDATE_PBUF_DROPPED; - 801052e: f04f 33ff mov.w r3, #4294967295 - 8010532: e135 b.n 80107a0 - } - len = (u16_t)(len - hlen); - 8010534: 7e7b ldrb r3, [r7, #25] - 8010536: b29b uxth r3, r3 - 8010538: 8b7a ldrh r2, [r7, #26] - 801053a: 1ad3 subs r3, r2, r3 - 801053c: 837b strh r3, [r7, #26] - offset = IPH_OFFSET_BYTES(fraghdr); - 801053e: 69fb ldr r3, [r7, #28] - 8010540: 88db ldrh r3, [r3, #6] - 8010542: b29b uxth r3, r3 - 8010544: 4618 mov r0, r3 - 8010546: f7f4 fccd bl 8004ee4 - 801054a: 4603 mov r3, r0 - 801054c: f3c3 030c ubfx r3, r3, #0, #13 - 8010550: b29b uxth r3, r3 - 8010552: 00db lsls r3, r3, #3 - 8010554: 82fb strh r3, [r7, #22] - /* overwrite the fragment's ip header from the pbuf with our helper struct, - * and setup the embedded helper structure. */ - /* make sure the struct ip_reass_helper fits into the IP header */ - LWIP_ASSERT("sizeof(struct ip_reass_helper) <= IP_HLEN", - sizeof(struct ip_reass_helper) <= IP_HLEN); - iprh = (struct ip_reass_helper *)new_p->payload; - 8010556: 68bb ldr r3, [r7, #8] - 8010558: 685b ldr r3, [r3, #4] - 801055a: 62fb str r3, [r7, #44] ; 0x2c - iprh->next_pbuf = NULL; - 801055c: 6afb ldr r3, [r7, #44] ; 0x2c - 801055e: 2200 movs r2, #0 - 8010560: 701a strb r2, [r3, #0] - 8010562: 2200 movs r2, #0 - 8010564: 705a strb r2, [r3, #1] - 8010566: 2200 movs r2, #0 - 8010568: 709a strb r2, [r3, #2] - 801056a: 2200 movs r2, #0 - 801056c: 70da strb r2, [r3, #3] - iprh->start = offset; - 801056e: 6afb ldr r3, [r7, #44] ; 0x2c - 8010570: 8afa ldrh r2, [r7, #22] - 8010572: 809a strh r2, [r3, #4] - iprh->end = (u16_t)(offset + len); - 8010574: 8afa ldrh r2, [r7, #22] - 8010576: 8b7b ldrh r3, [r7, #26] - 8010578: 4413 add r3, r2 - 801057a: b29a uxth r2, r3 - 801057c: 6afb ldr r3, [r7, #44] ; 0x2c - 801057e: 80da strh r2, [r3, #6] - if (iprh->end < offset) { - 8010580: 6afb ldr r3, [r7, #44] ; 0x2c - 8010582: 88db ldrh r3, [r3, #6] - 8010584: b29b uxth r3, r3 - 8010586: 8afa ldrh r2, [r7, #22] - 8010588: 429a cmp r2, r3 - 801058a: d902 bls.n 8010592 - /* u16_t overflow, cannot handle this */ - return IP_REASS_VALIDATE_PBUF_DROPPED; - 801058c: f04f 33ff mov.w r3, #4294967295 - 8010590: e106 b.n 80107a0 - } - - /* Iterate through until we either get to the end of the list (append), - * or we find one with a larger offset (insert). */ - for (q = ipr->p; q != NULL;) { - 8010592: 68fb ldr r3, [r7, #12] - 8010594: 685b ldr r3, [r3, #4] - 8010596: 627b str r3, [r7, #36] ; 0x24 - 8010598: e068 b.n 801066c - iprh_tmp = (struct ip_reass_helper *)q->payload; - 801059a: 6a7b ldr r3, [r7, #36] ; 0x24 - 801059c: 685b ldr r3, [r3, #4] - 801059e: 613b str r3, [r7, #16] - if (iprh->start < iprh_tmp->start) { - 80105a0: 6afb ldr r3, [r7, #44] ; 0x2c - 80105a2: 889b ldrh r3, [r3, #4] - 80105a4: b29a uxth r2, r3 - 80105a6: 693b ldr r3, [r7, #16] - 80105a8: 889b ldrh r3, [r3, #4] - 80105aa: b29b uxth r3, r3 - 80105ac: 429a cmp r2, r3 - 80105ae: d235 bcs.n 801061c - /* the new pbuf should be inserted before this */ - iprh->next_pbuf = q; - 80105b0: 6afb ldr r3, [r7, #44] ; 0x2c - 80105b2: 6a7a ldr r2, [r7, #36] ; 0x24 - 80105b4: 601a str r2, [r3, #0] - if (iprh_prev != NULL) { - 80105b6: 6abb ldr r3, [r7, #40] ; 0x28 - 80105b8: 2b00 cmp r3, #0 - 80105ba: d020 beq.n 80105fe - /* not the fragment with the lowest offset */ -#if IP_REASS_CHECK_OVERLAP - if ((iprh->start < iprh_prev->end) || (iprh->end > iprh_tmp->start)) { - 80105bc: 6afb ldr r3, [r7, #44] ; 0x2c - 80105be: 889b ldrh r3, [r3, #4] - 80105c0: b29a uxth r2, r3 - 80105c2: 6abb ldr r3, [r7, #40] ; 0x28 - 80105c4: 88db ldrh r3, [r3, #6] - 80105c6: b29b uxth r3, r3 - 80105c8: 429a cmp r2, r3 - 80105ca: d307 bcc.n 80105dc - 80105cc: 6afb ldr r3, [r7, #44] ; 0x2c - 80105ce: 88db ldrh r3, [r3, #6] - 80105d0: b29a uxth r2, r3 - 80105d2: 693b ldr r3, [r7, #16] - 80105d4: 889b ldrh r3, [r3, #4] - 80105d6: b29b uxth r3, r3 - 80105d8: 429a cmp r2, r3 - 80105da: d902 bls.n 80105e2 - /* fragment overlaps with previous or following, throw away */ - return IP_REASS_VALIDATE_PBUF_DROPPED; - 80105dc: f04f 33ff mov.w r3, #4294967295 - 80105e0: e0de b.n 80107a0 - } -#endif /* IP_REASS_CHECK_OVERLAP */ - iprh_prev->next_pbuf = new_p; - 80105e2: 6abb ldr r3, [r7, #40] ; 0x28 - 80105e4: 68ba ldr r2, [r7, #8] - 80105e6: 601a str r2, [r3, #0] - if (iprh_prev->end != iprh->start) { - 80105e8: 6abb ldr r3, [r7, #40] ; 0x28 - 80105ea: 88db ldrh r3, [r3, #6] - 80105ec: b29a uxth r2, r3 - 80105ee: 6afb ldr r3, [r7, #44] ; 0x2c - 80105f0: 889b ldrh r3, [r3, #4] - 80105f2: b29b uxth r3, r3 - 80105f4: 429a cmp r2, r3 - 80105f6: d03d beq.n 8010674 - /* There is a fragment missing between the current - * and the previous fragment */ - valid = 0; - 80105f8: 2300 movs r3, #0 - 80105fa: 623b str r3, [r7, #32] - } -#endif /* IP_REASS_CHECK_OVERLAP */ - /* fragment with the lowest offset */ - ipr->p = new_p; - } - break; - 80105fc: e03a b.n 8010674 - if (iprh->end > iprh_tmp->start) { - 80105fe: 6afb ldr r3, [r7, #44] ; 0x2c - 8010600: 88db ldrh r3, [r3, #6] - 8010602: b29a uxth r2, r3 - 8010604: 693b ldr r3, [r7, #16] - 8010606: 889b ldrh r3, [r3, #4] - 8010608: b29b uxth r3, r3 - 801060a: 429a cmp r2, r3 - 801060c: d902 bls.n 8010614 - return IP_REASS_VALIDATE_PBUF_DROPPED; - 801060e: f04f 33ff mov.w r3, #4294967295 - 8010612: e0c5 b.n 80107a0 - ipr->p = new_p; - 8010614: 68fb ldr r3, [r7, #12] - 8010616: 68ba ldr r2, [r7, #8] - 8010618: 605a str r2, [r3, #4] - break; - 801061a: e02b b.n 8010674 - } else if (iprh->start == iprh_tmp->start) { - 801061c: 6afb ldr r3, [r7, #44] ; 0x2c - 801061e: 889b ldrh r3, [r3, #4] - 8010620: b29a uxth r2, r3 - 8010622: 693b ldr r3, [r7, #16] - 8010624: 889b ldrh r3, [r3, #4] - 8010626: b29b uxth r3, r3 - 8010628: 429a cmp r2, r3 - 801062a: d102 bne.n 8010632 - /* received the same datagram twice: no need to keep the datagram */ - return IP_REASS_VALIDATE_PBUF_DROPPED; - 801062c: f04f 33ff mov.w r3, #4294967295 - 8010630: e0b6 b.n 80107a0 -#if IP_REASS_CHECK_OVERLAP - } else if (iprh->start < iprh_tmp->end) { - 8010632: 6afb ldr r3, [r7, #44] ; 0x2c - 8010634: 889b ldrh r3, [r3, #4] - 8010636: b29a uxth r2, r3 - 8010638: 693b ldr r3, [r7, #16] - 801063a: 88db ldrh r3, [r3, #6] - 801063c: b29b uxth r3, r3 - 801063e: 429a cmp r2, r3 - 8010640: d202 bcs.n 8010648 - /* overlap: no need to keep the new datagram */ - return IP_REASS_VALIDATE_PBUF_DROPPED; - 8010642: f04f 33ff mov.w r3, #4294967295 - 8010646: e0ab b.n 80107a0 -#endif /* IP_REASS_CHECK_OVERLAP */ - } else { - /* Check if the fragments received so far have no holes. */ - if (iprh_prev != NULL) { - 8010648: 6abb ldr r3, [r7, #40] ; 0x28 - 801064a: 2b00 cmp r3, #0 - 801064c: d009 beq.n 8010662 - if (iprh_prev->end != iprh_tmp->start) { - 801064e: 6abb ldr r3, [r7, #40] ; 0x28 - 8010650: 88db ldrh r3, [r3, #6] - 8010652: b29a uxth r2, r3 - 8010654: 693b ldr r3, [r7, #16] - 8010656: 889b ldrh r3, [r3, #4] - 8010658: b29b uxth r3, r3 - 801065a: 429a cmp r2, r3 - 801065c: d001 beq.n 8010662 - /* There is a fragment missing between the current - * and the previous fragment */ - valid = 0; - 801065e: 2300 movs r3, #0 - 8010660: 623b str r3, [r7, #32] - } - } - } - q = iprh_tmp->next_pbuf; - 8010662: 693b ldr r3, [r7, #16] - 8010664: 681b ldr r3, [r3, #0] - 8010666: 627b str r3, [r7, #36] ; 0x24 - iprh_prev = iprh_tmp; - 8010668: 693b ldr r3, [r7, #16] - 801066a: 62bb str r3, [r7, #40] ; 0x28 - for (q = ipr->p; q != NULL;) { - 801066c: 6a7b ldr r3, [r7, #36] ; 0x24 - 801066e: 2b00 cmp r3, #0 - 8010670: d193 bne.n 801059a - 8010672: e000 b.n 8010676 - break; - 8010674: bf00 nop - } - - /* If q is NULL, then we made it to the end of the list. Determine what to do now */ - if (q == NULL) { - 8010676: 6a7b ldr r3, [r7, #36] ; 0x24 - 8010678: 2b00 cmp r3, #0 - 801067a: d12d bne.n 80106d8 - if (iprh_prev != NULL) { - 801067c: 6abb ldr r3, [r7, #40] ; 0x28 - 801067e: 2b00 cmp r3, #0 - 8010680: d01c beq.n 80106bc - /* this is (for now), the fragment with the highest offset: - * chain it to the last fragment */ -#if IP_REASS_CHECK_OVERLAP - LWIP_ASSERT("check fragments don't overlap", iprh_prev->end <= iprh->start); - 8010682: 6abb ldr r3, [r7, #40] ; 0x28 - 8010684: 88db ldrh r3, [r3, #6] - 8010686: b29a uxth r2, r3 - 8010688: 6afb ldr r3, [r7, #44] ; 0x2c - 801068a: 889b ldrh r3, [r3, #4] - 801068c: b29b uxth r3, r3 - 801068e: 429a cmp r2, r3 - 8010690: d906 bls.n 80106a0 - 8010692: 4b45 ldr r3, [pc, #276] ; (80107a8 ) - 8010694: f44f 72db mov.w r2, #438 ; 0x1b6 - 8010698: 4944 ldr r1, [pc, #272] ; (80107ac ) - 801069a: 4845 ldr r0, [pc, #276] ; (80107b0 ) - 801069c: f000 fd04 bl 80110a8 -#endif /* IP_REASS_CHECK_OVERLAP */ - iprh_prev->next_pbuf = new_p; - 80106a0: 6abb ldr r3, [r7, #40] ; 0x28 - 80106a2: 68ba ldr r2, [r7, #8] - 80106a4: 601a str r2, [r3, #0] - if (iprh_prev->end != iprh->start) { - 80106a6: 6abb ldr r3, [r7, #40] ; 0x28 - 80106a8: 88db ldrh r3, [r3, #6] - 80106aa: b29a uxth r2, r3 - 80106ac: 6afb ldr r3, [r7, #44] ; 0x2c - 80106ae: 889b ldrh r3, [r3, #4] - 80106b0: b29b uxth r3, r3 - 80106b2: 429a cmp r2, r3 - 80106b4: d010 beq.n 80106d8 - valid = 0; - 80106b6: 2300 movs r3, #0 - 80106b8: 623b str r3, [r7, #32] - 80106ba: e00d b.n 80106d8 - } - } else { -#if IP_REASS_CHECK_OVERLAP - LWIP_ASSERT("no previous fragment, this must be the first fragment!", - 80106bc: 68fb ldr r3, [r7, #12] - 80106be: 685b ldr r3, [r3, #4] - 80106c0: 2b00 cmp r3, #0 - 80106c2: d006 beq.n 80106d2 - 80106c4: 4b38 ldr r3, [pc, #224] ; (80107a8 ) - 80106c6: f44f 72df mov.w r2, #446 ; 0x1be - 80106ca: 493a ldr r1, [pc, #232] ; (80107b4 ) - 80106cc: 4838 ldr r0, [pc, #224] ; (80107b0 ) - 80106ce: f000 fceb bl 80110a8 - ipr->p == NULL); -#endif /* IP_REASS_CHECK_OVERLAP */ - /* this is the first fragment we ever received for this ip datagram */ - ipr->p = new_p; - 80106d2: 68fb ldr r3, [r7, #12] - 80106d4: 68ba ldr r2, [r7, #8] - 80106d6: 605a str r2, [r3, #4] - } - } - - /* At this point, the validation part begins: */ - /* If we already received the last fragment */ - if (is_last || ((ipr->flags & IP_REASS_FLAG_LASTFRAG) != 0)) { - 80106d8: 687b ldr r3, [r7, #4] - 80106da: 2b00 cmp r3, #0 - 80106dc: d105 bne.n 80106ea - 80106de: 68fb ldr r3, [r7, #12] - 80106e0: 7f9b ldrb r3, [r3, #30] - 80106e2: f003 0301 and.w r3, r3, #1 - 80106e6: 2b00 cmp r3, #0 - 80106e8: d059 beq.n 801079e - /* and had no holes so far */ - if (valid) { - 80106ea: 6a3b ldr r3, [r7, #32] - 80106ec: 2b00 cmp r3, #0 - 80106ee: d04f beq.n 8010790 - /* then check if the rest of the fragments is here */ - /* Check if the queue starts with the first datagram */ - if ((ipr->p == NULL) || (((struct ip_reass_helper *)ipr->p->payload)->start != 0)) { - 80106f0: 68fb ldr r3, [r7, #12] - 80106f2: 685b ldr r3, [r3, #4] - 80106f4: 2b00 cmp r3, #0 - 80106f6: d006 beq.n 8010706 - 80106f8: 68fb ldr r3, [r7, #12] - 80106fa: 685b ldr r3, [r3, #4] - 80106fc: 685b ldr r3, [r3, #4] - 80106fe: 889b ldrh r3, [r3, #4] - 8010700: b29b uxth r3, r3 - 8010702: 2b00 cmp r3, #0 - 8010704: d002 beq.n 801070c - valid = 0; - 8010706: 2300 movs r3, #0 - 8010708: 623b str r3, [r7, #32] - 801070a: e041 b.n 8010790 - } else { - /* and check that there are no holes after this datagram */ - iprh_prev = iprh; - 801070c: 6afb ldr r3, [r7, #44] ; 0x2c - 801070e: 62bb str r3, [r7, #40] ; 0x28 - q = iprh->next_pbuf; - 8010710: 6afb ldr r3, [r7, #44] ; 0x2c - 8010712: 681b ldr r3, [r3, #0] - 8010714: 627b str r3, [r7, #36] ; 0x24 - while (q != NULL) { - 8010716: e012 b.n 801073e - iprh = (struct ip_reass_helper *)q->payload; - 8010718: 6a7b ldr r3, [r7, #36] ; 0x24 - 801071a: 685b ldr r3, [r3, #4] - 801071c: 62fb str r3, [r7, #44] ; 0x2c - if (iprh_prev->end != iprh->start) { - 801071e: 6abb ldr r3, [r7, #40] ; 0x28 - 8010720: 88db ldrh r3, [r3, #6] - 8010722: b29a uxth r2, r3 - 8010724: 6afb ldr r3, [r7, #44] ; 0x2c - 8010726: 889b ldrh r3, [r3, #4] - 8010728: b29b uxth r3, r3 - 801072a: 429a cmp r2, r3 - 801072c: d002 beq.n 8010734 - valid = 0; - 801072e: 2300 movs r3, #0 - 8010730: 623b str r3, [r7, #32] - break; - 8010732: e007 b.n 8010744 - } - iprh_prev = iprh; - 8010734: 6afb ldr r3, [r7, #44] ; 0x2c - 8010736: 62bb str r3, [r7, #40] ; 0x28 - q = iprh->next_pbuf; - 8010738: 6afb ldr r3, [r7, #44] ; 0x2c - 801073a: 681b ldr r3, [r3, #0] - 801073c: 627b str r3, [r7, #36] ; 0x24 - while (q != NULL) { - 801073e: 6a7b ldr r3, [r7, #36] ; 0x24 - 8010740: 2b00 cmp r3, #0 - 8010742: d1e9 bne.n 8010718 - } - /* if still valid, all fragments are received - * (because to the MF==0 already arrived */ - if (valid) { - 8010744: 6a3b ldr r3, [r7, #32] - 8010746: 2b00 cmp r3, #0 - 8010748: d022 beq.n 8010790 - LWIP_ASSERT("sanity check", ipr->p != NULL); - 801074a: 68fb ldr r3, [r7, #12] - 801074c: 685b ldr r3, [r3, #4] - 801074e: 2b00 cmp r3, #0 - 8010750: d106 bne.n 8010760 - 8010752: 4b15 ldr r3, [pc, #84] ; (80107a8 ) - 8010754: f240 12df movw r2, #479 ; 0x1df - 8010758: 4917 ldr r1, [pc, #92] ; (80107b8 ) - 801075a: 4815 ldr r0, [pc, #84] ; (80107b0 ) - 801075c: f000 fca4 bl 80110a8 - LWIP_ASSERT("sanity check", - 8010760: 68fb ldr r3, [r7, #12] - 8010762: 685b ldr r3, [r3, #4] - 8010764: 685b ldr r3, [r3, #4] - 8010766: 6afa ldr r2, [r7, #44] ; 0x2c - 8010768: 429a cmp r2, r3 - 801076a: d106 bne.n 801077a - 801076c: 4b0e ldr r3, [pc, #56] ; (80107a8 ) - 801076e: f44f 72f0 mov.w r2, #480 ; 0x1e0 - 8010772: 4911 ldr r1, [pc, #68] ; (80107b8 ) - 8010774: 480e ldr r0, [pc, #56] ; (80107b0 ) - 8010776: f000 fc97 bl 80110a8 - ((struct ip_reass_helper *)ipr->p->payload) != iprh); - LWIP_ASSERT("validate_datagram:next_pbuf!=NULL", - 801077a: 6afb ldr r3, [r7, #44] ; 0x2c - 801077c: 681b ldr r3, [r3, #0] - 801077e: 2b00 cmp r3, #0 - 8010780: d006 beq.n 8010790 - 8010782: 4b09 ldr r3, [pc, #36] ; (80107a8 ) - 8010784: f44f 72f1 mov.w r2, #482 ; 0x1e2 - 8010788: 490c ldr r1, [pc, #48] ; (80107bc ) - 801078a: 4809 ldr r0, [pc, #36] ; (80107b0 ) - 801078c: f000 fc8c bl 80110a8 - } - } - /* If valid is 0 here, there are some fragments missing in the middle - * (since MF == 0 has already arrived). Such datagrams simply time out if - * no more fragments are received... */ - return valid ? IP_REASS_VALIDATE_TELEGRAM_FINISHED : IP_REASS_VALIDATE_PBUF_QUEUED; - 8010790: 6a3b ldr r3, [r7, #32] - 8010792: 2b00 cmp r3, #0 - 8010794: bf14 ite ne - 8010796: 2301 movne r3, #1 - 8010798: 2300 moveq r3, #0 - 801079a: b2db uxtb r3, r3 - 801079c: e000 b.n 80107a0 - } - /* If we come here, not all fragments were received, yet! */ - return IP_REASS_VALIDATE_PBUF_QUEUED; /* not yet valid! */ - 801079e: 2300 movs r3, #0 -} - 80107a0: 4618 mov r0, r3 - 80107a2: 3730 adds r7, #48 ; 0x30 - 80107a4: 46bd mov sp, r7 - 80107a6: bd80 pop {r7, pc} - 80107a8: 08018714 .word 0x08018714 - 80107ac: 080187f8 .word 0x080187f8 - 80107b0: 0801875c .word 0x0801875c - 80107b4: 08018818 .word 0x08018818 - 80107b8: 08018850 .word 0x08018850 - 80107bc: 08018860 .word 0x08018860 - -080107c0 : - * @param p points to a pbuf chain of the fragment - * @return NULL if reassembly is incomplete, ? otherwise - */ -struct pbuf * -ip4_reass(struct pbuf *p) -{ - 80107c0: b580 push {r7, lr} - 80107c2: b08e sub sp, #56 ; 0x38 - 80107c4: af00 add r7, sp, #0 - 80107c6: 6078 str r0, [r7, #4] - int is_last; - - IPFRAG_STATS_INC(ip_frag.recv); - MIB2_STATS_INC(mib2.ipreasmreqds); - - fraghdr = (struct ip_hdr *)p->payload; - 80107c8: 687b ldr r3, [r7, #4] - 80107ca: 685b ldr r3, [r3, #4] - 80107cc: 62bb str r3, [r7, #40] ; 0x28 - - if (IPH_HL_BYTES(fraghdr) != IP_HLEN) { - 80107ce: 6abb ldr r3, [r7, #40] ; 0x28 - 80107d0: 781b ldrb r3, [r3, #0] - 80107d2: f003 030f and.w r3, r3, #15 - 80107d6: b2db uxtb r3, r3 - 80107d8: 009b lsls r3, r3, #2 - 80107da: b2db uxtb r3, r3 - 80107dc: 2b14 cmp r3, #20 - 80107de: f040 8171 bne.w 8010ac4 - LWIP_DEBUGF(IP_REASS_DEBUG, ("ip4_reass: IP options currently not supported!\n")); - IPFRAG_STATS_INC(ip_frag.err); - goto nullreturn; - } - - offset = IPH_OFFSET_BYTES(fraghdr); - 80107e2: 6abb ldr r3, [r7, #40] ; 0x28 - 80107e4: 88db ldrh r3, [r3, #6] - 80107e6: b29b uxth r3, r3 - 80107e8: 4618 mov r0, r3 - 80107ea: f7f4 fb7b bl 8004ee4 - 80107ee: 4603 mov r3, r0 - 80107f0: f3c3 030c ubfx r3, r3, #0, #13 - 80107f4: b29b uxth r3, r3 - 80107f6: 00db lsls r3, r3, #3 - 80107f8: 84fb strh r3, [r7, #38] ; 0x26 - len = lwip_ntohs(IPH_LEN(fraghdr)); - 80107fa: 6abb ldr r3, [r7, #40] ; 0x28 - 80107fc: 885b ldrh r3, [r3, #2] - 80107fe: b29b uxth r3, r3 - 8010800: 4618 mov r0, r3 - 8010802: f7f4 fb6f bl 8004ee4 - 8010806: 4603 mov r3, r0 - 8010808: 84bb strh r3, [r7, #36] ; 0x24 - hlen = IPH_HL_BYTES(fraghdr); - 801080a: 6abb ldr r3, [r7, #40] ; 0x28 - 801080c: 781b ldrb r3, [r3, #0] - 801080e: f003 030f and.w r3, r3, #15 - 8010812: b2db uxtb r3, r3 - 8010814: 009b lsls r3, r3, #2 - 8010816: f887 3023 strb.w r3, [r7, #35] ; 0x23 - if (hlen > len) { - 801081a: f897 3023 ldrb.w r3, [r7, #35] ; 0x23 - 801081e: b29b uxth r3, r3 - 8010820: 8cba ldrh r2, [r7, #36] ; 0x24 - 8010822: 429a cmp r2, r3 - 8010824: f0c0 8150 bcc.w 8010ac8 - /* invalid datagram */ - goto nullreturn; - } - len = (u16_t)(len - hlen); - 8010828: f897 3023 ldrb.w r3, [r7, #35] ; 0x23 - 801082c: b29b uxth r3, r3 - 801082e: 8cba ldrh r2, [r7, #36] ; 0x24 - 8010830: 1ad3 subs r3, r2, r3 - 8010832: 84bb strh r3, [r7, #36] ; 0x24 - - /* Check if we are allowed to enqueue more datagrams. */ - clen = pbuf_clen(p); - 8010834: 6878 ldr r0, [r7, #4] - 8010836: f7f5 ff47 bl 80066c8 - 801083a: 4603 mov r3, r0 - 801083c: 843b strh r3, [r7, #32] - if ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS) { - 801083e: 4b8c ldr r3, [pc, #560] ; (8010a70 ) - 8010840: 881b ldrh r3, [r3, #0] - 8010842: 461a mov r2, r3 - 8010844: 8c3b ldrh r3, [r7, #32] - 8010846: 4413 add r3, r2 - 8010848: 2b0a cmp r3, #10 - 801084a: dd10 ble.n 801086e -#if IP_REASS_FREE_OLDEST - if (!ip_reass_remove_oldest_datagram(fraghdr, clen) || - 801084c: 8c3b ldrh r3, [r7, #32] - 801084e: 4619 mov r1, r3 - 8010850: 6ab8 ldr r0, [r7, #40] ; 0x28 - 8010852: f7ff fd81 bl 8010358 - 8010856: 4603 mov r3, r0 - 8010858: 2b00 cmp r3, #0 - 801085a: f000 8137 beq.w 8010acc - ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS)) - 801085e: 4b84 ldr r3, [pc, #528] ; (8010a70 ) - 8010860: 881b ldrh r3, [r3, #0] - 8010862: 461a mov r2, r3 - 8010864: 8c3b ldrh r3, [r7, #32] - 8010866: 4413 add r3, r2 - if (!ip_reass_remove_oldest_datagram(fraghdr, clen) || - 8010868: 2b0a cmp r3, #10 - 801086a: f300 812f bgt.w 8010acc - } - } - - /* Look for the datagram the fragment belongs to in the current datagram queue, - * remembering the previous in the queue for later dequeueing. */ - for (ipr = reassdatagrams; ipr != NULL; ipr = ipr->next) { - 801086e: 4b81 ldr r3, [pc, #516] ; (8010a74 ) - 8010870: 681b ldr r3, [r3, #0] - 8010872: 633b str r3, [r7, #48] ; 0x30 - 8010874: e015 b.n 80108a2 - /* Check if the incoming fragment matches the one currently present - in the reassembly buffer. If so, we proceed with copying the - fragment into the buffer. */ - if (IP_ADDRESSES_AND_ID_MATCH(&ipr->iphdr, fraghdr)) { - 8010876: 6b3b ldr r3, [r7, #48] ; 0x30 - 8010878: 695a ldr r2, [r3, #20] - 801087a: 6abb ldr r3, [r7, #40] ; 0x28 - 801087c: 68db ldr r3, [r3, #12] - 801087e: 429a cmp r2, r3 - 8010880: d10c bne.n 801089c - 8010882: 6b3b ldr r3, [r7, #48] ; 0x30 - 8010884: 699a ldr r2, [r3, #24] - 8010886: 6abb ldr r3, [r7, #40] ; 0x28 - 8010888: 691b ldr r3, [r3, #16] - 801088a: 429a cmp r2, r3 - 801088c: d106 bne.n 801089c - 801088e: 6b3b ldr r3, [r7, #48] ; 0x30 - 8010890: 899a ldrh r2, [r3, #12] - 8010892: 6abb ldr r3, [r7, #40] ; 0x28 - 8010894: 889b ldrh r3, [r3, #4] - 8010896: b29b uxth r3, r3 - 8010898: 429a cmp r2, r3 - 801089a: d006 beq.n 80108aa - for (ipr = reassdatagrams; ipr != NULL; ipr = ipr->next) { - 801089c: 6b3b ldr r3, [r7, #48] ; 0x30 - 801089e: 681b ldr r3, [r3, #0] - 80108a0: 633b str r3, [r7, #48] ; 0x30 - 80108a2: 6b3b ldr r3, [r7, #48] ; 0x30 - 80108a4: 2b00 cmp r3, #0 - 80108a6: d1e6 bne.n 8010876 - 80108a8: e000 b.n 80108ac - LWIP_DEBUGF(IP_REASS_DEBUG, ("ip4_reass: matching previous fragment ID=%"X16_F"\n", - lwip_ntohs(IPH_ID(fraghdr)))); - IPFRAG_STATS_INC(ip_frag.cachehit); - break; - 80108aa: bf00 nop - } - } - - if (ipr == NULL) { - 80108ac: 6b3b ldr r3, [r7, #48] ; 0x30 - 80108ae: 2b00 cmp r3, #0 - 80108b0: d109 bne.n 80108c6 - /* Enqueue a new datagram into the datagram queue */ - ipr = ip_reass_enqueue_new_datagram(fraghdr, clen); - 80108b2: 8c3b ldrh r3, [r7, #32] - 80108b4: 4619 mov r1, r3 - 80108b6: 6ab8 ldr r0, [r7, #40] ; 0x28 - 80108b8: f7ff fdb0 bl 801041c - 80108bc: 6338 str r0, [r7, #48] ; 0x30 - /* Bail if unable to enqueue */ - if (ipr == NULL) { - 80108be: 6b3b ldr r3, [r7, #48] ; 0x30 - 80108c0: 2b00 cmp r3, #0 - 80108c2: d11c bne.n 80108fe - goto nullreturn; - 80108c4: e105 b.n 8010ad2 - } - } else { - if (((lwip_ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) == 0) && - 80108c6: 6abb ldr r3, [r7, #40] ; 0x28 - 80108c8: 88db ldrh r3, [r3, #6] - 80108ca: b29b uxth r3, r3 - 80108cc: 4618 mov r0, r3 - 80108ce: f7f4 fb09 bl 8004ee4 - 80108d2: 4603 mov r3, r0 - 80108d4: f3c3 030c ubfx r3, r3, #0, #13 - 80108d8: 2b00 cmp r3, #0 - 80108da: d110 bne.n 80108fe - ((lwip_ntohs(IPH_OFFSET(&ipr->iphdr)) & IP_OFFMASK) != 0)) { - 80108dc: 6b3b ldr r3, [r7, #48] ; 0x30 - 80108de: 89db ldrh r3, [r3, #14] - 80108e0: 4618 mov r0, r3 - 80108e2: f7f4 faff bl 8004ee4 - 80108e6: 4603 mov r3, r0 - 80108e8: f3c3 030c ubfx r3, r3, #0, #13 - if (((lwip_ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) == 0) && - 80108ec: 2b00 cmp r3, #0 - 80108ee: d006 beq.n 80108fe - /* ipr->iphdr is not the header from the first fragment, but fraghdr is - * -> copy fraghdr into ipr->iphdr since we want to have the header - * of the first fragment (for ICMP time exceeded and later, for copying - * all options, if supported)*/ - SMEMCPY(&ipr->iphdr, fraghdr, IP_HLEN); - 80108f0: 6b3b ldr r3, [r7, #48] ; 0x30 - 80108f2: 3308 adds r3, #8 - 80108f4: 2214 movs r2, #20 - 80108f6: 6ab9 ldr r1, [r7, #40] ; 0x28 - 80108f8: 4618 mov r0, r3 - 80108fa: f000 fba5 bl 8011048 - - /* At this point, we have either created a new entry or pointing - * to an existing one */ - - /* check for 'no more fragments', and update queue entry*/ - is_last = (IPH_OFFSET(fraghdr) & PP_NTOHS(IP_MF)) == 0; - 80108fe: 6abb ldr r3, [r7, #40] ; 0x28 - 8010900: 88db ldrh r3, [r3, #6] - 8010902: b29b uxth r3, r3 - 8010904: f003 0320 and.w r3, r3, #32 - 8010908: 2b00 cmp r3, #0 - 801090a: bf0c ite eq - 801090c: 2301 moveq r3, #1 - 801090e: 2300 movne r3, #0 - 8010910: b2db uxtb r3, r3 - 8010912: 61fb str r3, [r7, #28] - if (is_last) { - 8010914: 69fb ldr r3, [r7, #28] - 8010916: 2b00 cmp r3, #0 - 8010918: d00e beq.n 8010938 - u16_t datagram_len = (u16_t)(offset + len); - 801091a: 8cfa ldrh r2, [r7, #38] ; 0x26 - 801091c: 8cbb ldrh r3, [r7, #36] ; 0x24 - 801091e: 4413 add r3, r2 - 8010920: 837b strh r3, [r7, #26] - if ((datagram_len < offset) || (datagram_len > (0xFFFF - IP_HLEN))) { - 8010922: 8b7a ldrh r2, [r7, #26] - 8010924: 8cfb ldrh r3, [r7, #38] ; 0x26 - 8010926: 429a cmp r2, r3 - 8010928: f0c0 80a0 bcc.w 8010a6c - 801092c: 8b7b ldrh r3, [r7, #26] - 801092e: f64f 72eb movw r2, #65515 ; 0xffeb - 8010932: 4293 cmp r3, r2 - 8010934: f200 809a bhi.w 8010a6c - goto nullreturn_ipr; - } - } - /* find the right place to insert this pbuf */ - /* @todo: trim pbufs if fragments are overlapping */ - valid = ip_reass_chain_frag_into_datagram_and_validate(ipr, p, is_last); - 8010938: 69fa ldr r2, [r7, #28] - 801093a: 6879 ldr r1, [r7, #4] - 801093c: 6b38 ldr r0, [r7, #48] ; 0x30 - 801093e: f7ff fdd5 bl 80104ec - 8010942: 6178 str r0, [r7, #20] - if (valid == IP_REASS_VALIDATE_PBUF_DROPPED) { - 8010944: 697b ldr r3, [r7, #20] - 8010946: f1b3 3fff cmp.w r3, #4294967295 - 801094a: f000 809b beq.w 8010a84 - /* if we come here, the pbuf has been enqueued */ - - /* Track the current number of pbufs current 'in-flight', in order to limit - the number of fragments that may be enqueued at any one time - (overflow checked by testing against IP_REASS_MAX_PBUFS) */ - ip_reass_pbufcount = (u16_t)(ip_reass_pbufcount + clen); - 801094e: 4b48 ldr r3, [pc, #288] ; (8010a70 ) - 8010950: 881a ldrh r2, [r3, #0] - 8010952: 8c3b ldrh r3, [r7, #32] - 8010954: 4413 add r3, r2 - 8010956: b29a uxth r2, r3 - 8010958: 4b45 ldr r3, [pc, #276] ; (8010a70 ) - 801095a: 801a strh r2, [r3, #0] - if (is_last) { - 801095c: 69fb ldr r3, [r7, #28] - 801095e: 2b00 cmp r3, #0 - 8010960: d00d beq.n 801097e - u16_t datagram_len = (u16_t)(offset + len); - 8010962: 8cfa ldrh r2, [r7, #38] ; 0x26 - 8010964: 8cbb ldrh r3, [r7, #36] ; 0x24 - 8010966: 4413 add r3, r2 - 8010968: 827b strh r3, [r7, #18] - ipr->datagram_len = datagram_len; - 801096a: 6b3b ldr r3, [r7, #48] ; 0x30 - 801096c: 8a7a ldrh r2, [r7, #18] - 801096e: 839a strh r2, [r3, #28] - ipr->flags |= IP_REASS_FLAG_LASTFRAG; - 8010970: 6b3b ldr r3, [r7, #48] ; 0x30 - 8010972: 7f9b ldrb r3, [r3, #30] - 8010974: f043 0301 orr.w r3, r3, #1 - 8010978: b2da uxtb r2, r3 - 801097a: 6b3b ldr r3, [r7, #48] ; 0x30 - 801097c: 779a strb r2, [r3, #30] - LWIP_DEBUGF(IP_REASS_DEBUG, - ("ip4_reass: last fragment seen, total len %"S16_F"\n", - ipr->datagram_len)); - } - - if (valid == IP_REASS_VALIDATE_TELEGRAM_FINISHED) { - 801097e: 697b ldr r3, [r7, #20] - 8010980: 2b01 cmp r3, #1 - 8010982: d171 bne.n 8010a68 - struct ip_reassdata *ipr_prev; - /* the totally last fragment (flag more fragments = 0) was received at least - * once AND all fragments are received */ - u16_t datagram_len = (u16_t)(ipr->datagram_len + IP_HLEN); - 8010984: 6b3b ldr r3, [r7, #48] ; 0x30 - 8010986: 8b9b ldrh r3, [r3, #28] - 8010988: 3314 adds r3, #20 - 801098a: 823b strh r3, [r7, #16] - - /* save the second pbuf before copying the header over the pointer */ - r = ((struct ip_reass_helper *)ipr->p->payload)->next_pbuf; - 801098c: 6b3b ldr r3, [r7, #48] ; 0x30 - 801098e: 685b ldr r3, [r3, #4] - 8010990: 685b ldr r3, [r3, #4] - 8010992: 681b ldr r3, [r3, #0] - 8010994: 637b str r3, [r7, #52] ; 0x34 - - /* copy the original ip header back to the first pbuf */ - fraghdr = (struct ip_hdr *)(ipr->p->payload); - 8010996: 6b3b ldr r3, [r7, #48] ; 0x30 - 8010998: 685b ldr r3, [r3, #4] - 801099a: 685b ldr r3, [r3, #4] - 801099c: 62bb str r3, [r7, #40] ; 0x28 - SMEMCPY(fraghdr, &ipr->iphdr, IP_HLEN); - 801099e: 6b3b ldr r3, [r7, #48] ; 0x30 - 80109a0: 3308 adds r3, #8 - 80109a2: 2214 movs r2, #20 - 80109a4: 4619 mov r1, r3 - 80109a6: 6ab8 ldr r0, [r7, #40] ; 0x28 - 80109a8: f000 fb4e bl 8011048 - IPH_LEN_SET(fraghdr, lwip_htons(datagram_len)); - 80109ac: 8a3b ldrh r3, [r7, #16] - 80109ae: 4618 mov r0, r3 - 80109b0: f7f4 fa98 bl 8004ee4 - 80109b4: 4603 mov r3, r0 - 80109b6: 461a mov r2, r3 - 80109b8: 6abb ldr r3, [r7, #40] ; 0x28 - 80109ba: 805a strh r2, [r3, #2] - IPH_OFFSET_SET(fraghdr, 0); - 80109bc: 6abb ldr r3, [r7, #40] ; 0x28 - 80109be: 2200 movs r2, #0 - 80109c0: 719a strb r2, [r3, #6] - 80109c2: 2200 movs r2, #0 - 80109c4: 71da strb r2, [r3, #7] - IPH_CHKSUM_SET(fraghdr, 0); - 80109c6: 6abb ldr r3, [r7, #40] ; 0x28 - 80109c8: 2200 movs r2, #0 - 80109ca: 729a strb r2, [r3, #10] - 80109cc: 2200 movs r2, #0 - 80109ce: 72da strb r2, [r3, #11] - IF__NETIF_CHECKSUM_ENABLED(ip_current_input_netif(), NETIF_CHECKSUM_GEN_IP) { - IPH_CHKSUM_SET(fraghdr, inet_chksum(fraghdr, IP_HLEN)); - } -#endif /* CHECKSUM_GEN_IP */ - - p = ipr->p; - 80109d0: 6b3b ldr r3, [r7, #48] ; 0x30 - 80109d2: 685b ldr r3, [r3, #4] - 80109d4: 607b str r3, [r7, #4] - - /* chain together the pbufs contained within the reass_data list. */ - while (r != NULL) { - 80109d6: e00d b.n 80109f4 - iprh = (struct ip_reass_helper *)r->payload; - 80109d8: 6b7b ldr r3, [r7, #52] ; 0x34 - 80109da: 685b ldr r3, [r3, #4] - 80109dc: 60fb str r3, [r7, #12] - - /* hide the ip header for every succeeding fragment */ - pbuf_remove_header(r, IP_HLEN); - 80109de: 2114 movs r1, #20 - 80109e0: 6b78 ldr r0, [r7, #52] ; 0x34 - 80109e2: f7f5 fd63 bl 80064ac - pbuf_cat(p, r); - 80109e6: 6b79 ldr r1, [r7, #52] ; 0x34 - 80109e8: 6878 ldr r0, [r7, #4] - 80109ea: f7f5 fea7 bl 800673c - r = iprh->next_pbuf; - 80109ee: 68fb ldr r3, [r7, #12] - 80109f0: 681b ldr r3, [r3, #0] - 80109f2: 637b str r3, [r7, #52] ; 0x34 - while (r != NULL) { - 80109f4: 6b7b ldr r3, [r7, #52] ; 0x34 - 80109f6: 2b00 cmp r3, #0 - 80109f8: d1ee bne.n 80109d8 - } - - /* find the previous entry in the linked list */ - if (ipr == reassdatagrams) { - 80109fa: 4b1e ldr r3, [pc, #120] ; (8010a74 ) - 80109fc: 681b ldr r3, [r3, #0] - 80109fe: 6b3a ldr r2, [r7, #48] ; 0x30 - 8010a00: 429a cmp r2, r3 - 8010a02: d102 bne.n 8010a0a - ipr_prev = NULL; - 8010a04: 2300 movs r3, #0 - 8010a06: 62fb str r3, [r7, #44] ; 0x2c - 8010a08: e010 b.n 8010a2c - } else { - for (ipr_prev = reassdatagrams; ipr_prev != NULL; ipr_prev = ipr_prev->next) { - 8010a0a: 4b1a ldr r3, [pc, #104] ; (8010a74 ) - 8010a0c: 681b ldr r3, [r3, #0] - 8010a0e: 62fb str r3, [r7, #44] ; 0x2c - 8010a10: e007 b.n 8010a22 - if (ipr_prev->next == ipr) { - 8010a12: 6afb ldr r3, [r7, #44] ; 0x2c - 8010a14: 681b ldr r3, [r3, #0] - 8010a16: 6b3a ldr r2, [r7, #48] ; 0x30 - 8010a18: 429a cmp r2, r3 - 8010a1a: d006 beq.n 8010a2a - for (ipr_prev = reassdatagrams; ipr_prev != NULL; ipr_prev = ipr_prev->next) { - 8010a1c: 6afb ldr r3, [r7, #44] ; 0x2c - 8010a1e: 681b ldr r3, [r3, #0] - 8010a20: 62fb str r3, [r7, #44] ; 0x2c - 8010a22: 6afb ldr r3, [r7, #44] ; 0x2c - 8010a24: 2b00 cmp r3, #0 - 8010a26: d1f4 bne.n 8010a12 - 8010a28: e000 b.n 8010a2c - break; - 8010a2a: bf00 nop - } - } - } - - /* release the sources allocate for the fragment queue entry */ - ip_reass_dequeue_datagram(ipr, ipr_prev); - 8010a2c: 6af9 ldr r1, [r7, #44] ; 0x2c - 8010a2e: 6b38 ldr r0, [r7, #48] ; 0x30 - 8010a30: f7ff fd2e bl 8010490 - - /* and adjust the number of pbufs currently queued for reassembly. */ - clen = pbuf_clen(p); - 8010a34: 6878 ldr r0, [r7, #4] - 8010a36: f7f5 fe47 bl 80066c8 - 8010a3a: 4603 mov r3, r0 - 8010a3c: 843b strh r3, [r7, #32] - LWIP_ASSERT("ip_reass_pbufcount >= clen", ip_reass_pbufcount >= clen); - 8010a3e: 4b0c ldr r3, [pc, #48] ; (8010a70 ) - 8010a40: 881b ldrh r3, [r3, #0] - 8010a42: 8c3a ldrh r2, [r7, #32] - 8010a44: 429a cmp r2, r3 - 8010a46: d906 bls.n 8010a56 - 8010a48: 4b0b ldr r3, [pc, #44] ; (8010a78 ) - 8010a4a: f240 229b movw r2, #667 ; 0x29b - 8010a4e: 490b ldr r1, [pc, #44] ; (8010a7c ) - 8010a50: 480b ldr r0, [pc, #44] ; (8010a80 ) - 8010a52: f000 fb29 bl 80110a8 - ip_reass_pbufcount = (u16_t)(ip_reass_pbufcount - clen); - 8010a56: 4b06 ldr r3, [pc, #24] ; (8010a70 ) - 8010a58: 881a ldrh r2, [r3, #0] - 8010a5a: 8c3b ldrh r3, [r7, #32] - 8010a5c: 1ad3 subs r3, r2, r3 - 8010a5e: b29a uxth r2, r3 - 8010a60: 4b03 ldr r3, [pc, #12] ; (8010a70 ) - 8010a62: 801a strh r2, [r3, #0] - - MIB2_STATS_INC(mib2.ipreasmoks); - - /* Return the pbuf chain */ - return p; - 8010a64: 687b ldr r3, [r7, #4] - 8010a66: e038 b.n 8010ada - } - /* the datagram is not (yet?) reassembled completely */ - LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_pbufcount: %d out\n", ip_reass_pbufcount)); - return NULL; - 8010a68: 2300 movs r3, #0 - 8010a6a: e036 b.n 8010ada - goto nullreturn_ipr; - 8010a6c: bf00 nop - 8010a6e: e00a b.n 8010a86 - 8010a70: 20009b60 .word 0x20009b60 - 8010a74: 20009b5c .word 0x20009b5c - 8010a78: 08018714 .word 0x08018714 - 8010a7c: 08018884 .word 0x08018884 - 8010a80: 0801875c .word 0x0801875c - goto nullreturn_ipr; - 8010a84: bf00 nop - -nullreturn_ipr: - LWIP_ASSERT("ipr != NULL", ipr != NULL); - 8010a86: 6b3b ldr r3, [r7, #48] ; 0x30 - 8010a88: 2b00 cmp r3, #0 - 8010a8a: d106 bne.n 8010a9a - 8010a8c: 4b15 ldr r3, [pc, #84] ; (8010ae4 ) - 8010a8e: f44f 722a mov.w r2, #680 ; 0x2a8 - 8010a92: 4915 ldr r1, [pc, #84] ; (8010ae8 ) - 8010a94: 4815 ldr r0, [pc, #84] ; (8010aec ) - 8010a96: f000 fb07 bl 80110a8 - if (ipr->p == NULL) { - 8010a9a: 6b3b ldr r3, [r7, #48] ; 0x30 - 8010a9c: 685b ldr r3, [r3, #4] - 8010a9e: 2b00 cmp r3, #0 - 8010aa0: d116 bne.n 8010ad0 - /* dropped pbuf after creating a new datagram entry: remove the entry, too */ - LWIP_ASSERT("not firstalthough just enqueued", ipr == reassdatagrams); - 8010aa2: 4b13 ldr r3, [pc, #76] ; (8010af0 ) - 8010aa4: 681b ldr r3, [r3, #0] - 8010aa6: 6b3a ldr r2, [r7, #48] ; 0x30 - 8010aa8: 429a cmp r2, r3 - 8010aaa: d006 beq.n 8010aba - 8010aac: 4b0d ldr r3, [pc, #52] ; (8010ae4 ) - 8010aae: f240 22ab movw r2, #683 ; 0x2ab - 8010ab2: 4910 ldr r1, [pc, #64] ; (8010af4 ) - 8010ab4: 480d ldr r0, [pc, #52] ; (8010aec ) - 8010ab6: f000 faf7 bl 80110a8 - ip_reass_dequeue_datagram(ipr, NULL); - 8010aba: 2100 movs r1, #0 - 8010abc: 6b38 ldr r0, [r7, #48] ; 0x30 - 8010abe: f7ff fce7 bl 8010490 - 8010ac2: e006 b.n 8010ad2 - goto nullreturn; - 8010ac4: bf00 nop - 8010ac6: e004 b.n 8010ad2 - goto nullreturn; - 8010ac8: bf00 nop - 8010aca: e002 b.n 8010ad2 - goto nullreturn; - 8010acc: bf00 nop - 8010ace: e000 b.n 8010ad2 - } - -nullreturn: - 8010ad0: bf00 nop - LWIP_DEBUGF(IP_REASS_DEBUG, ("ip4_reass: nullreturn\n")); - IPFRAG_STATS_INC(ip_frag.drop); - pbuf_free(p); - 8010ad2: 6878 ldr r0, [r7, #4] - 8010ad4: f7f5 fd70 bl 80065b8 - return NULL; - 8010ad8: 2300 movs r3, #0 -} - 8010ada: 4618 mov r0, r3 - 8010adc: 3738 adds r7, #56 ; 0x38 - 8010ade: 46bd mov sp, r7 - 8010ae0: bd80 pop {r7, pc} - 8010ae2: bf00 nop - 8010ae4: 08018714 .word 0x08018714 - 8010ae8: 080188a0 .word 0x080188a0 - 8010aec: 0801875c .word 0x0801875c - 8010af0: 20009b5c .word 0x20009b5c - 8010af4: 080188ac .word 0x080188ac - -08010af8 : -#if IP_FRAG -#if !LWIP_NETIF_TX_SINGLE_PBUF -/** Allocate a new struct pbuf_custom_ref */ -static struct pbuf_custom_ref * -ip_frag_alloc_pbuf_custom_ref(void) -{ - 8010af8: b580 push {r7, lr} - 8010afa: af00 add r7, sp, #0 - return (struct pbuf_custom_ref *)memp_malloc(MEMP_FRAG_PBUF); - 8010afc: 2005 movs r0, #5 - 8010afe: f7f4 fe69 bl 80057d4 - 8010b02: 4603 mov r3, r0 -} - 8010b04: 4618 mov r0, r3 - 8010b06: bd80 pop {r7, pc} - -08010b08 : - -/** Free a struct pbuf_custom_ref */ -static void -ip_frag_free_pbuf_custom_ref(struct pbuf_custom_ref *p) -{ - 8010b08: b580 push {r7, lr} - 8010b0a: b082 sub sp, #8 - 8010b0c: af00 add r7, sp, #0 - 8010b0e: 6078 str r0, [r7, #4] - LWIP_ASSERT("p != NULL", p != NULL); - 8010b10: 687b ldr r3, [r7, #4] - 8010b12: 2b00 cmp r3, #0 - 8010b14: d106 bne.n 8010b24 - 8010b16: 4b07 ldr r3, [pc, #28] ; (8010b34 ) - 8010b18: f44f 7231 mov.w r2, #708 ; 0x2c4 - 8010b1c: 4906 ldr r1, [pc, #24] ; (8010b38 ) - 8010b1e: 4807 ldr r0, [pc, #28] ; (8010b3c ) - 8010b20: f000 fac2 bl 80110a8 - memp_free(MEMP_FRAG_PBUF, p); - 8010b24: 6879 ldr r1, [r7, #4] - 8010b26: 2005 movs r0, #5 - 8010b28: f7f4 fec4 bl 80058b4 -} - 8010b2c: bf00 nop - 8010b2e: 3708 adds r7, #8 - 8010b30: 46bd mov sp, r7 - 8010b32: bd80 pop {r7, pc} - 8010b34: 08018714 .word 0x08018714 - 8010b38: 080188cc .word 0x080188cc - 8010b3c: 0801875c .word 0x0801875c - -08010b40 : - -/** Free-callback function to free a 'struct pbuf_custom_ref', called by - * pbuf_free. */ -static void -ipfrag_free_pbuf_custom(struct pbuf *p) -{ - 8010b40: b580 push {r7, lr} - 8010b42: b084 sub sp, #16 - 8010b44: af00 add r7, sp, #0 - 8010b46: 6078 str r0, [r7, #4] - struct pbuf_custom_ref *pcr = (struct pbuf_custom_ref *)p; - 8010b48: 687b ldr r3, [r7, #4] - 8010b4a: 60fb str r3, [r7, #12] - LWIP_ASSERT("pcr != NULL", pcr != NULL); - 8010b4c: 68fb ldr r3, [r7, #12] - 8010b4e: 2b00 cmp r3, #0 - 8010b50: d106 bne.n 8010b60 - 8010b52: 4b11 ldr r3, [pc, #68] ; (8010b98 ) - 8010b54: f240 22ce movw r2, #718 ; 0x2ce - 8010b58: 4910 ldr r1, [pc, #64] ; (8010b9c ) - 8010b5a: 4811 ldr r0, [pc, #68] ; (8010ba0 ) - 8010b5c: f000 faa4 bl 80110a8 - LWIP_ASSERT("pcr == p", (void *)pcr == (void *)p); - 8010b60: 68fa ldr r2, [r7, #12] - 8010b62: 687b ldr r3, [r7, #4] - 8010b64: 429a cmp r2, r3 - 8010b66: d006 beq.n 8010b76 - 8010b68: 4b0b ldr r3, [pc, #44] ; (8010b98 ) - 8010b6a: f240 22cf movw r2, #719 ; 0x2cf - 8010b6e: 490d ldr r1, [pc, #52] ; (8010ba4 ) - 8010b70: 480b ldr r0, [pc, #44] ; (8010ba0 ) - 8010b72: f000 fa99 bl 80110a8 - if (pcr->original != NULL) { - 8010b76: 68fb ldr r3, [r7, #12] - 8010b78: 695b ldr r3, [r3, #20] - 8010b7a: 2b00 cmp r3, #0 - 8010b7c: d004 beq.n 8010b88 - pbuf_free(pcr->original); - 8010b7e: 68fb ldr r3, [r7, #12] - 8010b80: 695b ldr r3, [r3, #20] - 8010b82: 4618 mov r0, r3 - 8010b84: f7f5 fd18 bl 80065b8 - } - ip_frag_free_pbuf_custom_ref(pcr); - 8010b88: 68f8 ldr r0, [r7, #12] - 8010b8a: f7ff ffbd bl 8010b08 -} - 8010b8e: bf00 nop - 8010b90: 3710 adds r7, #16 - 8010b92: 46bd mov sp, r7 - 8010b94: bd80 pop {r7, pc} - 8010b96: bf00 nop - 8010b98: 08018714 .word 0x08018714 - 8010b9c: 080188d8 .word 0x080188d8 - 8010ba0: 0801875c .word 0x0801875c - 8010ba4: 080188e4 .word 0x080188e4 - -08010ba8 : - * - * @return ERR_OK if sent successfully, err_t otherwise - */ -err_t -ip4_frag(struct pbuf *p, struct netif *netif, const ip4_addr_t *dest) -{ - 8010ba8: b580 push {r7, lr} - 8010baa: b094 sub sp, #80 ; 0x50 - 8010bac: af02 add r7, sp, #8 - 8010bae: 60f8 str r0, [r7, #12] - 8010bb0: 60b9 str r1, [r7, #8] - 8010bb2: 607a str r2, [r7, #4] - struct pbuf *rambuf; -#if !LWIP_NETIF_TX_SINGLE_PBUF - struct pbuf *newpbuf; - u16_t newpbuflen = 0; - 8010bb4: 2300 movs r3, #0 - 8010bb6: f8a7 3046 strh.w r3, [r7, #70] ; 0x46 - u16_t left_to_copy; -#endif - struct ip_hdr *original_iphdr; - struct ip_hdr *iphdr; - const u16_t nfb = (u16_t)((netif->mtu - IP_HLEN) / 8); - 8010bba: 68bb ldr r3, [r7, #8] - 8010bbc: 8d1b ldrh r3, [r3, #40] ; 0x28 - 8010bbe: 3b14 subs r3, #20 - 8010bc0: 2b00 cmp r3, #0 - 8010bc2: da00 bge.n 8010bc6 - 8010bc4: 3307 adds r3, #7 - 8010bc6: 10db asrs r3, r3, #3 - 8010bc8: 877b strh r3, [r7, #58] ; 0x3a - u16_t left, fragsize; - u16_t ofo; - int last; - u16_t poff = IP_HLEN; - 8010bca: 2314 movs r3, #20 - 8010bcc: 87fb strh r3, [r7, #62] ; 0x3e - u16_t tmp; - int mf_set; - - original_iphdr = (struct ip_hdr *)p->payload; - 8010bce: 68fb ldr r3, [r7, #12] - 8010bd0: 685b ldr r3, [r3, #4] - 8010bd2: 637b str r3, [r7, #52] ; 0x34 - iphdr = original_iphdr; - 8010bd4: 6b7b ldr r3, [r7, #52] ; 0x34 - 8010bd6: 633b str r3, [r7, #48] ; 0x30 - if (IPH_HL_BYTES(iphdr) != IP_HLEN) { - 8010bd8: 6b3b ldr r3, [r7, #48] ; 0x30 - 8010bda: 781b ldrb r3, [r3, #0] - 8010bdc: f003 030f and.w r3, r3, #15 - 8010be0: b2db uxtb r3, r3 - 8010be2: 009b lsls r3, r3, #2 - 8010be4: b2db uxtb r3, r3 - 8010be6: 2b14 cmp r3, #20 - 8010be8: d002 beq.n 8010bf0 - /* ip4_frag() does not support IP options */ - return ERR_VAL; - 8010bea: f06f 0305 mvn.w r3, #5 - 8010bee: e110 b.n 8010e12 - } - LWIP_ERROR("ip4_frag(): pbuf too short", p->len >= IP_HLEN, return ERR_VAL); - 8010bf0: 68fb ldr r3, [r7, #12] - 8010bf2: 895b ldrh r3, [r3, #10] - 8010bf4: 2b13 cmp r3, #19 - 8010bf6: d809 bhi.n 8010c0c - 8010bf8: 4b88 ldr r3, [pc, #544] ; (8010e1c ) - 8010bfa: f44f 723f mov.w r2, #764 ; 0x2fc - 8010bfe: 4988 ldr r1, [pc, #544] ; (8010e20 ) - 8010c00: 4888 ldr r0, [pc, #544] ; (8010e24 ) - 8010c02: f000 fa51 bl 80110a8 - 8010c06: f06f 0305 mvn.w r3, #5 - 8010c0a: e102 b.n 8010e12 - - /* Save original offset */ - tmp = lwip_ntohs(IPH_OFFSET(iphdr)); - 8010c0c: 6b3b ldr r3, [r7, #48] ; 0x30 - 8010c0e: 88db ldrh r3, [r3, #6] - 8010c10: b29b uxth r3, r3 - 8010c12: 4618 mov r0, r3 - 8010c14: f7f4 f966 bl 8004ee4 - 8010c18: 4603 mov r3, r0 - 8010c1a: 87bb strh r3, [r7, #60] ; 0x3c - ofo = tmp & IP_OFFMASK; - 8010c1c: 8fbb ldrh r3, [r7, #60] ; 0x3c - 8010c1e: f3c3 030c ubfx r3, r3, #0, #13 - 8010c22: f8a7 3040 strh.w r3, [r7, #64] ; 0x40 - /* already fragmented? if so, the last fragment we create must have MF, too */ - mf_set = tmp & IP_MF; - 8010c26: 8fbb ldrh r3, [r7, #60] ; 0x3c - 8010c28: f403 5300 and.w r3, r3, #8192 ; 0x2000 - 8010c2c: 62fb str r3, [r7, #44] ; 0x2c - - left = (u16_t)(p->tot_len - IP_HLEN); - 8010c2e: 68fb ldr r3, [r7, #12] - 8010c30: 891b ldrh r3, [r3, #8] - 8010c32: 3b14 subs r3, #20 - 8010c34: f8a7 3042 strh.w r3, [r7, #66] ; 0x42 - - while (left) { - 8010c38: e0e1 b.n 8010dfe - /* Fill this fragment */ - fragsize = LWIP_MIN(left, (u16_t)(nfb * 8)); - 8010c3a: 8f7b ldrh r3, [r7, #58] ; 0x3a - 8010c3c: 00db lsls r3, r3, #3 - 8010c3e: b29b uxth r3, r3 - 8010c40: f8b7 2042 ldrh.w r2, [r7, #66] ; 0x42 - 8010c44: 4293 cmp r3, r2 - 8010c46: bf28 it cs - 8010c48: 4613 movcs r3, r2 - 8010c4a: 857b strh r3, [r7, #42] ; 0x2a - /* When not using a static buffer, create a chain of pbufs. - * The first will be a PBUF_RAM holding the link and IP header. - * The rest will be PBUF_REFs mirroring the pbuf chain to be fragged, - * but limited to the size of an mtu. - */ - rambuf = pbuf_alloc(PBUF_LINK, IP_HLEN, PBUF_RAM); - 8010c4c: f44f 7220 mov.w r2, #640 ; 0x280 - 8010c50: 2114 movs r1, #20 - 8010c52: 200e movs r0, #14 - 8010c54: f7f5 f9cc bl 8005ff0 - 8010c58: 6278 str r0, [r7, #36] ; 0x24 - if (rambuf == NULL) { - 8010c5a: 6a7b ldr r3, [r7, #36] ; 0x24 - 8010c5c: 2b00 cmp r3, #0 - 8010c5e: f000 80d5 beq.w 8010e0c - goto memerr; - } - LWIP_ASSERT("this needs a pbuf in one piece!", - 8010c62: 6a7b ldr r3, [r7, #36] ; 0x24 - 8010c64: 895b ldrh r3, [r3, #10] - 8010c66: 2b13 cmp r3, #19 - 8010c68: d806 bhi.n 8010c78 - 8010c6a: 4b6c ldr r3, [pc, #432] ; (8010e1c ) - 8010c6c: f44f 7249 mov.w r2, #804 ; 0x324 - 8010c70: 496d ldr r1, [pc, #436] ; (8010e28 ) - 8010c72: 486c ldr r0, [pc, #432] ; (8010e24 ) - 8010c74: f000 fa18 bl 80110a8 - (rambuf->len >= (IP_HLEN))); - SMEMCPY(rambuf->payload, original_iphdr, IP_HLEN); - 8010c78: 6a7b ldr r3, [r7, #36] ; 0x24 - 8010c7a: 685b ldr r3, [r3, #4] - 8010c7c: 2214 movs r2, #20 - 8010c7e: 6b79 ldr r1, [r7, #52] ; 0x34 - 8010c80: 4618 mov r0, r3 - 8010c82: f000 f9e1 bl 8011048 - iphdr = (struct ip_hdr *)rambuf->payload; - 8010c86: 6a7b ldr r3, [r7, #36] ; 0x24 - 8010c88: 685b ldr r3, [r3, #4] - 8010c8a: 633b str r3, [r7, #48] ; 0x30 - - left_to_copy = fragsize; - 8010c8c: 8d7b ldrh r3, [r7, #42] ; 0x2a - 8010c8e: f8a7 3044 strh.w r3, [r7, #68] ; 0x44 - while (left_to_copy) { - 8010c92: e064 b.n 8010d5e - struct pbuf_custom_ref *pcr; - u16_t plen = (u16_t)(p->len - poff); - 8010c94: 68fb ldr r3, [r7, #12] - 8010c96: 895a ldrh r2, [r3, #10] - 8010c98: 8ffb ldrh r3, [r7, #62] ; 0x3e - 8010c9a: 1ad3 subs r3, r2, r3 - 8010c9c: 83fb strh r3, [r7, #30] - LWIP_ASSERT("p->len >= poff", p->len >= poff); - 8010c9e: 68fb ldr r3, [r7, #12] - 8010ca0: 895b ldrh r3, [r3, #10] - 8010ca2: 8ffa ldrh r2, [r7, #62] ; 0x3e - 8010ca4: 429a cmp r2, r3 - 8010ca6: d906 bls.n 8010cb6 - 8010ca8: 4b5c ldr r3, [pc, #368] ; (8010e1c ) - 8010caa: f240 322d movw r2, #813 ; 0x32d - 8010cae: 495f ldr r1, [pc, #380] ; (8010e2c ) - 8010cb0: 485c ldr r0, [pc, #368] ; (8010e24 ) - 8010cb2: f000 f9f9 bl 80110a8 - newpbuflen = LWIP_MIN(left_to_copy, plen); - 8010cb6: 8bfa ldrh r2, [r7, #30] - 8010cb8: f8b7 3044 ldrh.w r3, [r7, #68] ; 0x44 - 8010cbc: 4293 cmp r3, r2 - 8010cbe: bf28 it cs - 8010cc0: 4613 movcs r3, r2 - 8010cc2: f8a7 3046 strh.w r3, [r7, #70] ; 0x46 - /* Is this pbuf already empty? */ - if (!newpbuflen) { - 8010cc6: f8b7 3046 ldrh.w r3, [r7, #70] ; 0x46 - 8010cca: 2b00 cmp r3, #0 - 8010ccc: d105 bne.n 8010cda - poff = 0; - 8010cce: 2300 movs r3, #0 - 8010cd0: 87fb strh r3, [r7, #62] ; 0x3e - p = p->next; - 8010cd2: 68fb ldr r3, [r7, #12] - 8010cd4: 681b ldr r3, [r3, #0] - 8010cd6: 60fb str r3, [r7, #12] - continue; - 8010cd8: e041 b.n 8010d5e - } - pcr = ip_frag_alloc_pbuf_custom_ref(); - 8010cda: f7ff ff0d bl 8010af8 - 8010cde: 61b8 str r0, [r7, #24] - if (pcr == NULL) { - 8010ce0: 69bb ldr r3, [r7, #24] - 8010ce2: 2b00 cmp r3, #0 - 8010ce4: d103 bne.n 8010cee - pbuf_free(rambuf); - 8010ce6: 6a78 ldr r0, [r7, #36] ; 0x24 - 8010ce8: f7f5 fc66 bl 80065b8 - goto memerr; - 8010cec: e08f b.n 8010e0e - } - /* Mirror this pbuf, although we might not need all of it. */ - newpbuf = pbuf_alloced_custom(PBUF_RAW, newpbuflen, PBUF_REF, &pcr->pc, - 8010cee: 69b8 ldr r0, [r7, #24] - (u8_t *)p->payload + poff, newpbuflen); - 8010cf0: 68fb ldr r3, [r7, #12] - 8010cf2: 685a ldr r2, [r3, #4] - newpbuf = pbuf_alloced_custom(PBUF_RAW, newpbuflen, PBUF_REF, &pcr->pc, - 8010cf4: 8ffb ldrh r3, [r7, #62] ; 0x3e - 8010cf6: 4413 add r3, r2 - 8010cf8: f8b7 1046 ldrh.w r1, [r7, #70] ; 0x46 - 8010cfc: f8b7 2046 ldrh.w r2, [r7, #70] ; 0x46 - 8010d00: 9201 str r2, [sp, #4] - 8010d02: 9300 str r3, [sp, #0] - 8010d04: 4603 mov r3, r0 - 8010d06: 2241 movs r2, #65 ; 0x41 - 8010d08: 2000 movs r0, #0 - 8010d0a: f7f5 fa9b bl 8006244 - 8010d0e: 6178 str r0, [r7, #20] - if (newpbuf == NULL) { - 8010d10: 697b ldr r3, [r7, #20] - 8010d12: 2b00 cmp r3, #0 - 8010d14: d106 bne.n 8010d24 - ip_frag_free_pbuf_custom_ref(pcr); - 8010d16: 69b8 ldr r0, [r7, #24] - 8010d18: f7ff fef6 bl 8010b08 - pbuf_free(rambuf); - 8010d1c: 6a78 ldr r0, [r7, #36] ; 0x24 - 8010d1e: f7f5 fc4b bl 80065b8 - goto memerr; - 8010d22: e074 b.n 8010e0e - } - pbuf_ref(p); - 8010d24: 68f8 ldr r0, [r7, #12] - 8010d26: f7f5 fce7 bl 80066f8 - pcr->original = p; - 8010d2a: 69bb ldr r3, [r7, #24] - 8010d2c: 68fa ldr r2, [r7, #12] - 8010d2e: 615a str r2, [r3, #20] - pcr->pc.custom_free_function = ipfrag_free_pbuf_custom; - 8010d30: 69bb ldr r3, [r7, #24] - 8010d32: 4a3f ldr r2, [pc, #252] ; (8010e30 ) - 8010d34: 611a str r2, [r3, #16] - - /* Add it to end of rambuf's chain, but using pbuf_cat, not pbuf_chain - * so that it is removed when pbuf_dechain is later called on rambuf. - */ - pbuf_cat(rambuf, newpbuf); - 8010d36: 6979 ldr r1, [r7, #20] - 8010d38: 6a78 ldr r0, [r7, #36] ; 0x24 - 8010d3a: f7f5 fcff bl 800673c - left_to_copy = (u16_t)(left_to_copy - newpbuflen); - 8010d3e: f8b7 2044 ldrh.w r2, [r7, #68] ; 0x44 - 8010d42: f8b7 3046 ldrh.w r3, [r7, #70] ; 0x46 - 8010d46: 1ad3 subs r3, r2, r3 - 8010d48: f8a7 3044 strh.w r3, [r7, #68] ; 0x44 - if (left_to_copy) { - 8010d4c: f8b7 3044 ldrh.w r3, [r7, #68] ; 0x44 - 8010d50: 2b00 cmp r3, #0 - 8010d52: d004 beq.n 8010d5e - poff = 0; - 8010d54: 2300 movs r3, #0 - 8010d56: 87fb strh r3, [r7, #62] ; 0x3e - p = p->next; - 8010d58: 68fb ldr r3, [r7, #12] - 8010d5a: 681b ldr r3, [r3, #0] - 8010d5c: 60fb str r3, [r7, #12] - while (left_to_copy) { - 8010d5e: f8b7 3044 ldrh.w r3, [r7, #68] ; 0x44 - 8010d62: 2b00 cmp r3, #0 - 8010d64: d196 bne.n 8010c94 - } - } - poff = (u16_t)(poff + newpbuflen); - 8010d66: 8ffa ldrh r2, [r7, #62] ; 0x3e - 8010d68: f8b7 3046 ldrh.w r3, [r7, #70] ; 0x46 - 8010d6c: 4413 add r3, r2 - 8010d6e: 87fb strh r3, [r7, #62] ; 0x3e -#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ - - /* Correct header */ - last = (left <= netif->mtu - IP_HLEN); - 8010d70: 68bb ldr r3, [r7, #8] - 8010d72: 8d1b ldrh r3, [r3, #40] ; 0x28 - 8010d74: f1a3 0213 sub.w r2, r3, #19 - 8010d78: f8b7 3042 ldrh.w r3, [r7, #66] ; 0x42 - 8010d7c: 429a cmp r2, r3 - 8010d7e: bfcc ite gt - 8010d80: 2301 movgt r3, #1 - 8010d82: 2300 movle r3, #0 - 8010d84: b2db uxtb r3, r3 - 8010d86: 623b str r3, [r7, #32] - - /* Set new offset and MF flag */ - tmp = (IP_OFFMASK & (ofo)); - 8010d88: f8b7 3040 ldrh.w r3, [r7, #64] ; 0x40 - 8010d8c: f3c3 030c ubfx r3, r3, #0, #13 - 8010d90: 87bb strh r3, [r7, #60] ; 0x3c - if (!last || mf_set) { - 8010d92: 6a3b ldr r3, [r7, #32] - 8010d94: 2b00 cmp r3, #0 - 8010d96: d002 beq.n 8010d9e - 8010d98: 6afb ldr r3, [r7, #44] ; 0x2c - 8010d9a: 2b00 cmp r3, #0 - 8010d9c: d003 beq.n 8010da6 - /* the last fragment has MF set if the input frame had it */ - tmp = tmp | IP_MF; - 8010d9e: 8fbb ldrh r3, [r7, #60] ; 0x3c - 8010da0: f443 5300 orr.w r3, r3, #8192 ; 0x2000 - 8010da4: 87bb strh r3, [r7, #60] ; 0x3c - } - IPH_OFFSET_SET(iphdr, lwip_htons(tmp)); - 8010da6: 8fbb ldrh r3, [r7, #60] ; 0x3c - 8010da8: 4618 mov r0, r3 - 8010daa: f7f4 f89b bl 8004ee4 - 8010dae: 4603 mov r3, r0 - 8010db0: 461a mov r2, r3 - 8010db2: 6b3b ldr r3, [r7, #48] ; 0x30 - 8010db4: 80da strh r2, [r3, #6] - IPH_LEN_SET(iphdr, lwip_htons((u16_t)(fragsize + IP_HLEN))); - 8010db6: 8d7b ldrh r3, [r7, #42] ; 0x2a - 8010db8: 3314 adds r3, #20 - 8010dba: b29b uxth r3, r3 - 8010dbc: 4618 mov r0, r3 - 8010dbe: f7f4 f891 bl 8004ee4 - 8010dc2: 4603 mov r3, r0 - 8010dc4: 461a mov r2, r3 - 8010dc6: 6b3b ldr r3, [r7, #48] ; 0x30 - 8010dc8: 805a strh r2, [r3, #2] - IPH_CHKSUM_SET(iphdr, 0); - 8010dca: 6b3b ldr r3, [r7, #48] ; 0x30 - 8010dcc: 2200 movs r2, #0 - 8010dce: 729a strb r2, [r3, #10] - 8010dd0: 2200 movs r2, #0 - 8010dd2: 72da strb r2, [r3, #11] -#endif /* CHECKSUM_GEN_IP */ - - /* No need for separate header pbuf - we allowed room for it in rambuf - * when allocated. - */ - netif->output(netif, rambuf, dest); - 8010dd4: 68bb ldr r3, [r7, #8] - 8010dd6: 695b ldr r3, [r3, #20] - 8010dd8: 687a ldr r2, [r7, #4] - 8010dda: 6a79 ldr r1, [r7, #36] ; 0x24 - 8010ddc: 68b8 ldr r0, [r7, #8] - 8010dde: 4798 blx r3 - * recreate it next time round the loop. If we're lucky the hardware - * will have already sent the packet, the free will really free, and - * there will be zero memory penalty. - */ - - pbuf_free(rambuf); - 8010de0: 6a78 ldr r0, [r7, #36] ; 0x24 - 8010de2: f7f5 fbe9 bl 80065b8 - left = (u16_t)(left - fragsize); - 8010de6: f8b7 2042 ldrh.w r2, [r7, #66] ; 0x42 - 8010dea: 8d7b ldrh r3, [r7, #42] ; 0x2a - 8010dec: 1ad3 subs r3, r2, r3 - 8010dee: f8a7 3042 strh.w r3, [r7, #66] ; 0x42 - ofo = (u16_t)(ofo + nfb); - 8010df2: f8b7 2040 ldrh.w r2, [r7, #64] ; 0x40 - 8010df6: 8f7b ldrh r3, [r7, #58] ; 0x3a - 8010df8: 4413 add r3, r2 - 8010dfa: f8a7 3040 strh.w r3, [r7, #64] ; 0x40 - while (left) { - 8010dfe: f8b7 3042 ldrh.w r3, [r7, #66] ; 0x42 - 8010e02: 2b00 cmp r3, #0 - 8010e04: f47f af19 bne.w 8010c3a - } - MIB2_STATS_INC(mib2.ipfragoks); - return ERR_OK; - 8010e08: 2300 movs r3, #0 - 8010e0a: e002 b.n 8010e12 - goto memerr; - 8010e0c: bf00 nop -memerr: - MIB2_STATS_INC(mib2.ipfragfails); - return ERR_MEM; - 8010e0e: f04f 33ff mov.w r3, #4294967295 -} - 8010e12: 4618 mov r0, r3 - 8010e14: 3748 adds r7, #72 ; 0x48 - 8010e16: 46bd mov sp, r7 - 8010e18: bd80 pop {r7, pc} - 8010e1a: bf00 nop - 8010e1c: 08018714 .word 0x08018714 - 8010e20: 080188f0 .word 0x080188f0 - 8010e24: 0801875c .word 0x0801875c - 8010e28: 0801890c .word 0x0801890c - 8010e2c: 0801892c .word 0x0801892c - 8010e30: 08010b41 .word 0x08010b41 - -08010e34 : - * @see ETHARP_SUPPORT_VLAN - * @see LWIP_HOOK_VLAN_CHECK - */ -err_t -ethernet_input(struct pbuf *p, struct netif *netif) -{ - 8010e34: b580 push {r7, lr} - 8010e36: b086 sub sp, #24 - 8010e38: af00 add r7, sp, #0 - 8010e3a: 6078 str r0, [r7, #4] - 8010e3c: 6039 str r1, [r7, #0] - struct eth_hdr *ethhdr; - u16_t type; -#if LWIP_ARP || ETHARP_SUPPORT_VLAN || LWIP_IPV6 - u16_t next_hdr_offset = SIZEOF_ETH_HDR; - 8010e3e: 230e movs r3, #14 - 8010e40: 82fb strh r3, [r7, #22] -#endif /* LWIP_ARP || ETHARP_SUPPORT_VLAN */ - - LWIP_ASSERT_CORE_LOCKED(); - - if (p->len <= SIZEOF_ETH_HDR) { - 8010e42: 687b ldr r3, [r7, #4] - 8010e44: 895b ldrh r3, [r3, #10] - 8010e46: 2b0e cmp r3, #14 - 8010e48: d96e bls.n 8010f28 - ETHARP_STATS_INC(etharp.drop); - MIB2_STATS_NETIF_INC(netif, ifinerrors); - goto free_and_return; - } - - if (p->if_idx == NETIF_NO_INDEX) { - 8010e4a: 687b ldr r3, [r7, #4] - 8010e4c: 7bdb ldrb r3, [r3, #15] - 8010e4e: 2b00 cmp r3, #0 - 8010e50: d106 bne.n 8010e60 - p->if_idx = netif_get_index(netif); - 8010e52: 683b ldr r3, [r7, #0] - 8010e54: f893 3034 ldrb.w r3, [r3, #52] ; 0x34 - 8010e58: 3301 adds r3, #1 - 8010e5a: b2da uxtb r2, r3 - 8010e5c: 687b ldr r3, [r7, #4] - 8010e5e: 73da strb r2, [r3, #15] - } - - /* points to packet payload, which starts with an Ethernet header */ - ethhdr = (struct eth_hdr *)p->payload; - 8010e60: 687b ldr r3, [r7, #4] - 8010e62: 685b ldr r3, [r3, #4] - 8010e64: 613b str r3, [r7, #16] - (unsigned char)ethhdr->dest.addr[3], (unsigned char)ethhdr->dest.addr[4], (unsigned char)ethhdr->dest.addr[5], - (unsigned char)ethhdr->src.addr[0], (unsigned char)ethhdr->src.addr[1], (unsigned char)ethhdr->src.addr[2], - (unsigned char)ethhdr->src.addr[3], (unsigned char)ethhdr->src.addr[4], (unsigned char)ethhdr->src.addr[5], - lwip_htons(ethhdr->type))); - - type = ethhdr->type; - 8010e66: 693b ldr r3, [r7, #16] - 8010e68: 7b1a ldrb r2, [r3, #12] - 8010e6a: 7b5b ldrb r3, [r3, #13] - 8010e6c: 021b lsls r3, r3, #8 - 8010e6e: 4313 orrs r3, r2 - 8010e70: 81fb strh r3, [r7, #14] - -#if LWIP_ARP_FILTER_NETIF - netif = LWIP_ARP_FILTER_NETIF_FN(p, netif, lwip_htons(type)); -#endif /* LWIP_ARP_FILTER_NETIF*/ - - if (ethhdr->dest.addr[0] & 1) { - 8010e72: 693b ldr r3, [r7, #16] - 8010e74: 781b ldrb r3, [r3, #0] - 8010e76: f003 0301 and.w r3, r3, #1 - 8010e7a: 2b00 cmp r3, #0 - 8010e7c: d023 beq.n 8010ec6 - /* this might be a multicast or broadcast packet */ - if (ethhdr->dest.addr[0] == LL_IP4_MULTICAST_ADDR_0) { - 8010e7e: 693b ldr r3, [r7, #16] - 8010e80: 781b ldrb r3, [r3, #0] - 8010e82: 2b01 cmp r3, #1 - 8010e84: d10f bne.n 8010ea6 -#if LWIP_IPV4 - if ((ethhdr->dest.addr[1] == LL_IP4_MULTICAST_ADDR_1) && - 8010e86: 693b ldr r3, [r7, #16] - 8010e88: 785b ldrb r3, [r3, #1] - 8010e8a: 2b00 cmp r3, #0 - 8010e8c: d11b bne.n 8010ec6 - (ethhdr->dest.addr[2] == LL_IP4_MULTICAST_ADDR_2)) { - 8010e8e: 693b ldr r3, [r7, #16] - 8010e90: 789b ldrb r3, [r3, #2] - if ((ethhdr->dest.addr[1] == LL_IP4_MULTICAST_ADDR_1) && - 8010e92: 2b5e cmp r3, #94 ; 0x5e - 8010e94: d117 bne.n 8010ec6 - /* mark the pbuf as link-layer multicast */ - p->flags |= PBUF_FLAG_LLMCAST; - 8010e96: 687b ldr r3, [r7, #4] - 8010e98: 7b5b ldrb r3, [r3, #13] - 8010e9a: f043 0310 orr.w r3, r3, #16 - 8010e9e: b2da uxtb r2, r3 - 8010ea0: 687b ldr r3, [r7, #4] - 8010ea2: 735a strb r2, [r3, #13] - 8010ea4: e00f b.n 8010ec6 - (ethhdr->dest.addr[1] == LL_IP6_MULTICAST_ADDR_1)) { - /* mark the pbuf as link-layer multicast */ - p->flags |= PBUF_FLAG_LLMCAST; - } -#endif /* LWIP_IPV6 */ - else if (eth_addr_cmp(ðhdr->dest, ðbroadcast)) { - 8010ea6: 693b ldr r3, [r7, #16] - 8010ea8: 2206 movs r2, #6 - 8010eaa: 4928 ldr r1, [pc, #160] ; (8010f4c ) - 8010eac: 4618 mov r0, r3 - 8010eae: f000 f8bb bl 8011028 - 8010eb2: 4603 mov r3, r0 - 8010eb4: 2b00 cmp r3, #0 - 8010eb6: d106 bne.n 8010ec6 - /* mark the pbuf as link-layer broadcast */ - p->flags |= PBUF_FLAG_LLBCAST; - 8010eb8: 687b ldr r3, [r7, #4] - 8010eba: 7b5b ldrb r3, [r3, #13] - 8010ebc: f043 0308 orr.w r3, r3, #8 - 8010ec0: b2da uxtb r2, r3 - 8010ec2: 687b ldr r3, [r7, #4] - 8010ec4: 735a strb r2, [r3, #13] - } - } - - switch (type) { - 8010ec6: 89fb ldrh r3, [r7, #14] - 8010ec8: 2b08 cmp r3, #8 - 8010eca: d003 beq.n 8010ed4 - 8010ecc: f5b3 6fc1 cmp.w r3, #1544 ; 0x608 - 8010ed0: d014 beq.n 8010efc - } -#endif - ETHARP_STATS_INC(etharp.proterr); - ETHARP_STATS_INC(etharp.drop); - MIB2_STATS_NETIF_INC(netif, ifinunknownprotos); - goto free_and_return; - 8010ed2: e032 b.n 8010f3a - if (!(netif->flags & NETIF_FLAG_ETHARP)) { - 8010ed4: 683b ldr r3, [r7, #0] - 8010ed6: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8010eda: f003 0308 and.w r3, r3, #8 - 8010ede: 2b00 cmp r3, #0 - 8010ee0: d024 beq.n 8010f2c - if (pbuf_remove_header(p, next_hdr_offset)) { - 8010ee2: 8afb ldrh r3, [r7, #22] - 8010ee4: 4619 mov r1, r3 - 8010ee6: 6878 ldr r0, [r7, #4] - 8010ee8: f7f5 fae0 bl 80064ac - 8010eec: 4603 mov r3, r0 - 8010eee: 2b00 cmp r3, #0 - 8010ef0: d11e bne.n 8010f30 - ip4_input(p, netif); - 8010ef2: 6839 ldr r1, [r7, #0] - 8010ef4: 6878 ldr r0, [r7, #4] - 8010ef6: f7fe fdc5 bl 800fa84 - break; - 8010efa: e013 b.n 8010f24 - if (!(netif->flags & NETIF_FLAG_ETHARP)) { - 8010efc: 683b ldr r3, [r7, #0] - 8010efe: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8010f02: f003 0308 and.w r3, r3, #8 - 8010f06: 2b00 cmp r3, #0 - 8010f08: d014 beq.n 8010f34 - if (pbuf_remove_header(p, next_hdr_offset)) { - 8010f0a: 8afb ldrh r3, [r7, #22] - 8010f0c: 4619 mov r1, r3 - 8010f0e: 6878 ldr r0, [r7, #4] - 8010f10: f7f5 facc bl 80064ac - 8010f14: 4603 mov r3, r0 - 8010f16: 2b00 cmp r3, #0 - 8010f18: d10e bne.n 8010f38 - etharp_input(p, netif); - 8010f1a: 6839 ldr r1, [r7, #0] - 8010f1c: 6878 ldr r0, [r7, #4] - 8010f1e: f7fd ff61 bl 800ede4 - break; - 8010f22: bf00 nop - } - - /* This means the pbuf is freed or consumed, - so the caller doesn't have to free it again */ - return ERR_OK; - 8010f24: 2300 movs r3, #0 - 8010f26: e00c b.n 8010f42 - goto free_and_return; - 8010f28: bf00 nop - 8010f2a: e006 b.n 8010f3a - goto free_and_return; - 8010f2c: bf00 nop - 8010f2e: e004 b.n 8010f3a - goto free_and_return; - 8010f30: bf00 nop - 8010f32: e002 b.n 8010f3a - goto free_and_return; - 8010f34: bf00 nop - 8010f36: e000 b.n 8010f3a - goto free_and_return; - 8010f38: bf00 nop - -free_and_return: - pbuf_free(p); - 8010f3a: 6878 ldr r0, [r7, #4] - 8010f3c: f7f5 fb3c bl 80065b8 - return ERR_OK; - 8010f40: 2300 movs r3, #0 -} - 8010f42: 4618 mov r0, r3 - 8010f44: 3718 adds r7, #24 - 8010f46: 46bd mov sp, r7 - 8010f48: bd80 pop {r7, pc} - 8010f4a: bf00 nop - 8010f4c: 08018ad4 .word 0x08018ad4 - -08010f50 : - * @return ERR_OK if the packet was sent, any other err_t on failure - */ -err_t -ethernet_output(struct netif * netif, struct pbuf * p, - const struct eth_addr * src, const struct eth_addr * dst, - u16_t eth_type) { - 8010f50: b580 push {r7, lr} - 8010f52: b086 sub sp, #24 - 8010f54: af00 add r7, sp, #0 - 8010f56: 60f8 str r0, [r7, #12] - 8010f58: 60b9 str r1, [r7, #8] - 8010f5a: 607a str r2, [r7, #4] - 8010f5c: 603b str r3, [r7, #0] - struct eth_hdr *ethhdr; - u16_t eth_type_be = lwip_htons(eth_type); - 8010f5e: 8c3b ldrh r3, [r7, #32] - 8010f60: 4618 mov r0, r3 - 8010f62: f7f3 ffbf bl 8004ee4 - 8010f66: 4603 mov r3, r0 - 8010f68: 82fb strh r3, [r7, #22] - - eth_type_be = PP_HTONS(ETHTYPE_VLAN); - } else -#endif /* ETHARP_SUPPORT_VLAN && defined(LWIP_HOOK_VLAN_SET) */ - { - if (pbuf_add_header(p, SIZEOF_ETH_HDR) != 0) { - 8010f6a: 210e movs r1, #14 - 8010f6c: 68b8 ldr r0, [r7, #8] - 8010f6e: f7f5 fa8d bl 800648c - 8010f72: 4603 mov r3, r0 - 8010f74: 2b00 cmp r3, #0 - 8010f76: d125 bne.n 8010fc4 - } - } - - LWIP_ASSERT_CORE_LOCKED(); - - ethhdr = (struct eth_hdr *)p->payload; - 8010f78: 68bb ldr r3, [r7, #8] - 8010f7a: 685b ldr r3, [r3, #4] - 8010f7c: 613b str r3, [r7, #16] - ethhdr->type = eth_type_be; - 8010f7e: 693b ldr r3, [r7, #16] - 8010f80: 8afa ldrh r2, [r7, #22] - 8010f82: 819a strh r2, [r3, #12] - SMEMCPY(ðhdr->dest, dst, ETH_HWADDR_LEN); - 8010f84: 693b ldr r3, [r7, #16] - 8010f86: 2206 movs r2, #6 - 8010f88: 6839 ldr r1, [r7, #0] - 8010f8a: 4618 mov r0, r3 - 8010f8c: f000 f85c bl 8011048 - SMEMCPY(ðhdr->src, src, ETH_HWADDR_LEN); - 8010f90: 693b ldr r3, [r7, #16] - 8010f92: 3306 adds r3, #6 - 8010f94: 2206 movs r2, #6 - 8010f96: 6879 ldr r1, [r7, #4] - 8010f98: 4618 mov r0, r3 - 8010f9a: f000 f855 bl 8011048 - - LWIP_ASSERT("netif->hwaddr_len must be 6 for ethernet_output!", - 8010f9e: 68fb ldr r3, [r7, #12] - 8010fa0: f893 3030 ldrb.w r3, [r3, #48] ; 0x30 - 8010fa4: 2b06 cmp r3, #6 - 8010fa6: d006 beq.n 8010fb6 - 8010fa8: 4b0a ldr r3, [pc, #40] ; (8010fd4 ) - 8010faa: f44f 7299 mov.w r2, #306 ; 0x132 - 8010fae: 490a ldr r1, [pc, #40] ; (8010fd8 ) - 8010fb0: 480a ldr r0, [pc, #40] ; (8010fdc ) - 8010fb2: f000 f879 bl 80110a8 - (netif->hwaddr_len == ETH_HWADDR_LEN)); - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, - ("ethernet_output: sending packet %p\n", (void *)p)); - - /* send the packet */ - return netif->linkoutput(netif, p); - 8010fb6: 68fb ldr r3, [r7, #12] - 8010fb8: 699b ldr r3, [r3, #24] - 8010fba: 68b9 ldr r1, [r7, #8] - 8010fbc: 68f8 ldr r0, [r7, #12] - 8010fbe: 4798 blx r3 - 8010fc0: 4603 mov r3, r0 - 8010fc2: e002 b.n 8010fca - goto pbuf_header_failed; - 8010fc4: bf00 nop - -pbuf_header_failed: - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, - ("ethernet_output: could not allocate room for header.\n")); - LINK_STATS_INC(link.lenerr); - return ERR_BUF; - 8010fc6: f06f 0301 mvn.w r3, #1 -} - 8010fca: 4618 mov r0, r3 - 8010fcc: 3718 adds r7, #24 - 8010fce: 46bd mov sp, r7 - 8010fd0: bd80 pop {r7, pc} - 8010fd2: bf00 nop - 8010fd4: 0801893c .word 0x0801893c - 8010fd8: 08018974 .word 0x08018974 - 8010fdc: 080189a8 .word 0x080189a8 - -08010fe0 <__libc_init_array>: - 8010fe0: b570 push {r4, r5, r6, lr} - 8010fe2: 4d0d ldr r5, [pc, #52] ; (8011018 <__libc_init_array+0x38>) - 8010fe4: 4c0d ldr r4, [pc, #52] ; (801101c <__libc_init_array+0x3c>) - 8010fe6: 1b64 subs r4, r4, r5 - 8010fe8: 10a4 asrs r4, r4, #2 - 8010fea: 2600 movs r6, #0 - 8010fec: 42a6 cmp r6, r4 - 8010fee: d109 bne.n 8011004 <__libc_init_array+0x24> - 8010ff0: 4d0b ldr r5, [pc, #44] ; (8011020 <__libc_init_array+0x40>) - 8010ff2: 4c0c ldr r4, [pc, #48] ; (8011024 <__libc_init_array+0x44>) - 8010ff4: f004 fdc8 bl 8015b88 <_init> - 8010ff8: 1b64 subs r4, r4, r5 - 8010ffa: 10a4 asrs r4, r4, #2 - 8010ffc: 2600 movs r6, #0 - 8010ffe: 42a6 cmp r6, r4 - 8011000: d105 bne.n 801100e <__libc_init_array+0x2e> - 8011002: bd70 pop {r4, r5, r6, pc} - 8011004: f855 3b04 ldr.w r3, [r5], #4 - 8011008: 4798 blx r3 - 801100a: 3601 adds r6, #1 - 801100c: e7ee b.n 8010fec <__libc_init_array+0xc> - 801100e: f855 3b04 ldr.w r3, [r5], #4 - 8011012: 4798 blx r3 - 8011014: 3601 adds r6, #1 - 8011016: e7f2 b.n 8010ffe <__libc_init_array+0x1e> - 8011018: 08018e84 .word 0x08018e84 - 801101c: 08018e84 .word 0x08018e84 - 8011020: 08018e84 .word 0x08018e84 - 8011024: 08018e8c .word 0x08018e8c - -08011028 : - 8011028: b510 push {r4, lr} - 801102a: 3901 subs r1, #1 - 801102c: 4402 add r2, r0 - 801102e: 4290 cmp r0, r2 - 8011030: d101 bne.n 8011036 - 8011032: 2000 movs r0, #0 - 8011034: e005 b.n 8011042 - 8011036: 7803 ldrb r3, [r0, #0] - 8011038: f811 4f01 ldrb.w r4, [r1, #1]! - 801103c: 42a3 cmp r3, r4 - 801103e: d001 beq.n 8011044 - 8011040: 1b18 subs r0, r3, r4 - 8011042: bd10 pop {r4, pc} - 8011044: 3001 adds r0, #1 - 8011046: e7f2 b.n 801102e - -08011048 : - 8011048: 440a add r2, r1 - 801104a: 4291 cmp r1, r2 - 801104c: f100 33ff add.w r3, r0, #4294967295 - 8011050: d100 bne.n 8011054 - 8011052: 4770 bx lr - 8011054: b510 push {r4, lr} - 8011056: f811 4b01 ldrb.w r4, [r1], #1 - 801105a: f803 4f01 strb.w r4, [r3, #1]! - 801105e: 4291 cmp r1, r2 - 8011060: d1f9 bne.n 8011056 - 8011062: bd10 pop {r4, pc} - -08011064 : - 8011064: 4288 cmp r0, r1 - 8011066: b510 push {r4, lr} - 8011068: eb01 0402 add.w r4, r1, r2 - 801106c: d902 bls.n 8011074 - 801106e: 4284 cmp r4, r0 - 8011070: 4623 mov r3, r4 - 8011072: d807 bhi.n 8011084 - 8011074: 1e43 subs r3, r0, #1 - 8011076: 42a1 cmp r1, r4 - 8011078: d008 beq.n 801108c - 801107a: f811 2b01 ldrb.w r2, [r1], #1 - 801107e: f803 2f01 strb.w r2, [r3, #1]! - 8011082: e7f8 b.n 8011076 - 8011084: 4402 add r2, r0 - 8011086: 4601 mov r1, r0 - 8011088: 428a cmp r2, r1 - 801108a: d100 bne.n 801108e - 801108c: bd10 pop {r4, pc} - 801108e: f813 4d01 ldrb.w r4, [r3, #-1]! - 8011092: f802 4d01 strb.w r4, [r2, #-1]! - 8011096: e7f7 b.n 8011088 - -08011098 : - 8011098: 4402 add r2, r0 - 801109a: 4603 mov r3, r0 - 801109c: 4293 cmp r3, r2 - 801109e: d100 bne.n 80110a2 - 80110a0: 4770 bx lr - 80110a2: f803 1b01 strb.w r1, [r3], #1 - 80110a6: e7f9 b.n 801109c - -080110a8 : - 80110a8: b40f push {r0, r1, r2, r3} - 80110aa: b507 push {r0, r1, r2, lr} - 80110ac: 4906 ldr r1, [pc, #24] ; (80110c8 ) - 80110ae: ab04 add r3, sp, #16 - 80110b0: 6808 ldr r0, [r1, #0] - 80110b2: f853 2b04 ldr.w r2, [r3], #4 - 80110b6: 6881 ldr r1, [r0, #8] - 80110b8: 9301 str r3, [sp, #4] - 80110ba: f000 f825 bl 8011108 <_vfprintf_r> - 80110be: b003 add sp, #12 - 80110c0: f85d eb04 ldr.w lr, [sp], #4 - 80110c4: b004 add sp, #16 - 80110c6: 4770 bx lr - 80110c8: 20000030 .word 0x20000030 - -080110cc : - 80110cc: 4b0a ldr r3, [pc, #40] ; (80110f8 ) - 80110ce: 4a0b ldr r2, [pc, #44] ; (80110fc ) - 80110d0: 490b ldr r1, [pc, #44] ; (8011100 ) - 80110d2: b510 push {r4, lr} - 80110d4: 681c ldr r4, [r3, #0] - 80110d6: f8d4 00a8 ldr.w r0, [r4, #168] ; 0xa8 - 80110da: f8d4 30ac ldr.w r3, [r4, #172] ; 0xac - 80110de: 4342 muls r2, r0 - 80110e0: fb01 2203 mla r2, r1, r3, r2 - 80110e4: fba0 0101 umull r0, r1, r0, r1 - 80110e8: 1c43 adds r3, r0, #1 - 80110ea: eb42 0001 adc.w r0, r2, r1 - 80110ee: e9c4 302a strd r3, r0, [r4, #168] ; 0xa8 - 80110f2: f020 4000 bic.w r0, r0, #2147483648 ; 0x80000000 - 80110f6: bd10 pop {r4, pc} - 80110f8: 20000030 .word 0x20000030 - 80110fc: 5851f42d .word 0x5851f42d - 8011100: 4c957f2d .word 0x4c957f2d - 8011104: 00000000 .word 0x00000000 - -08011108 <_vfprintf_r>: - 8011108: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 801110c: ed2d 8b04 vpush {d8-d9} - 8011110: b0cf sub sp, #316 ; 0x13c - 8011112: 4689 mov r9, r1 - 8011114: 4690 mov r8, r2 - 8011116: 461c mov r4, r3 - 8011118: 461e mov r6, r3 - 801111a: 4682 mov sl, r0 - 801111c: f002 fbaa bl 8013874 <_localeconv_r> - 8011120: 6803 ldr r3, [r0, #0] - 8011122: 9313 str r3, [sp, #76] ; 0x4c - 8011124: 4618 mov r0, r3 - 8011126: f7ef f863 bl 80001f0 - 801112a: 900e str r0, [sp, #56] ; 0x38 - 801112c: f1ba 0f00 cmp.w sl, #0 - 8011130: d005 beq.n 801113e <_vfprintf_r+0x36> - 8011132: f8da 3038 ldr.w r3, [sl, #56] ; 0x38 - 8011136: b913 cbnz r3, 801113e <_vfprintf_r+0x36> - 8011138: 4650 mov r0, sl - 801113a: f002 fa2b bl 8013594 <__sinit> - 801113e: f8d9 3064 ldr.w r3, [r9, #100] ; 0x64 - 8011142: 07d8 lsls r0, r3, #31 - 8011144: d407 bmi.n 8011156 <_vfprintf_r+0x4e> - 8011146: f8b9 300c ldrh.w r3, [r9, #12] - 801114a: 0599 lsls r1, r3, #22 - 801114c: d403 bmi.n 8011156 <_vfprintf_r+0x4e> - 801114e: f8d9 0058 ldr.w r0, [r9, #88] ; 0x58 - 8011152: f002 fb95 bl 8013880 <__retarget_lock_acquire_recursive> - 8011156: f9b9 300c ldrsh.w r3, [r9, #12] - 801115a: 049a lsls r2, r3, #18 - 801115c: d409 bmi.n 8011172 <_vfprintf_r+0x6a> - 801115e: f443 5300 orr.w r3, r3, #8192 ; 0x2000 - 8011162: f8a9 300c strh.w r3, [r9, #12] - 8011166: f8d9 3064 ldr.w r3, [r9, #100] ; 0x64 - 801116a: f423 5300 bic.w r3, r3, #8192 ; 0x2000 - 801116e: f8c9 3064 str.w r3, [r9, #100] ; 0x64 - 8011172: f8b9 300c ldrh.w r3, [r9, #12] - 8011176: 071b lsls r3, r3, #28 - 8011178: d502 bpl.n 8011180 <_vfprintf_r+0x78> - 801117a: f8d9 3010 ldr.w r3, [r9, #16] - 801117e: b9d3 cbnz r3, 80111b6 <_vfprintf_r+0xae> - 8011180: 4649 mov r1, r9 - 8011182: 4650 mov r0, sl - 8011184: f001 fa3a bl 80125fc <__swsetup_r> - 8011188: b1a8 cbz r0, 80111b6 <_vfprintf_r+0xae> - 801118a: f8d9 3064 ldr.w r3, [r9, #100] ; 0x64 - 801118e: 07df lsls r7, r3, #31 - 8011190: d508 bpl.n 80111a4 <_vfprintf_r+0x9c> - 8011192: f04f 33ff mov.w r3, #4294967295 - 8011196: 930f str r3, [sp, #60] ; 0x3c - 8011198: 980f ldr r0, [sp, #60] ; 0x3c - 801119a: b04f add sp, #316 ; 0x13c - 801119c: ecbd 8b04 vpop {d8-d9} - 80111a0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 80111a4: f8b9 300c ldrh.w r3, [r9, #12] - 80111a8: 059e lsls r6, r3, #22 - 80111aa: d4f2 bmi.n 8011192 <_vfprintf_r+0x8a> - 80111ac: f8d9 0058 ldr.w r0, [r9, #88] ; 0x58 - 80111b0: f002 fb67 bl 8013882 <__retarget_lock_release_recursive> - 80111b4: e7ed b.n 8011192 <_vfprintf_r+0x8a> - 80111b6: f8b9 300c ldrh.w r3, [r9, #12] - 80111ba: f003 021a and.w r2, r3, #26 - 80111be: 2a0a cmp r2, #10 - 80111c0: d118 bne.n 80111f4 <_vfprintf_r+0xec> - 80111c2: f9b9 200e ldrsh.w r2, [r9, #14] - 80111c6: 2a00 cmp r2, #0 - 80111c8: db14 blt.n 80111f4 <_vfprintf_r+0xec> - 80111ca: f8d9 2064 ldr.w r2, [r9, #100] ; 0x64 - 80111ce: 07d5 lsls r5, r2, #31 - 80111d0: d405 bmi.n 80111de <_vfprintf_r+0xd6> - 80111d2: 0598 lsls r0, r3, #22 - 80111d4: d403 bmi.n 80111de <_vfprintf_r+0xd6> - 80111d6: f8d9 0058 ldr.w r0, [r9, #88] ; 0x58 - 80111da: f002 fb52 bl 8013882 <__retarget_lock_release_recursive> - 80111de: 4623 mov r3, r4 - 80111e0: 4642 mov r2, r8 - 80111e2: 4649 mov r1, r9 - 80111e4: 4650 mov r0, sl - 80111e6: b04f add sp, #316 ; 0x13c - 80111e8: ecbd 8b04 vpop {d8-d9} - 80111ec: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 80111f0: f001 b9c4 b.w 801257c <__sbprintf> - 80111f4: ed9f 7b92 vldr d7, [pc, #584] ; 8011440 <_vfprintf_r+0x338> - 80111f8: 2500 movs r5, #0 - 80111fa: e9cd 5523 strd r5, r5, [sp, #140] ; 0x8c - 80111fe: ed8d 7b0c vstr d7, [sp, #48] ; 0x30 - 8011202: e9cd 5515 strd r5, r5, [sp, #84] ; 0x54 - 8011206: ac25 add r4, sp, #148 ; 0x94 - 8011208: 9422 str r4, [sp, #136] ; 0x88 - 801120a: 9505 str r5, [sp, #20] - 801120c: 950a str r5, [sp, #40] ; 0x28 - 801120e: 9512 str r5, [sp, #72] ; 0x48 - 8011210: 9514 str r5, [sp, #80] ; 0x50 - 8011212: 950f str r5, [sp, #60] ; 0x3c - 8011214: 4643 mov r3, r8 - 8011216: 461d mov r5, r3 - 8011218: f813 2b01 ldrb.w r2, [r3], #1 - 801121c: b10a cbz r2, 8011222 <_vfprintf_r+0x11a> - 801121e: 2a25 cmp r2, #37 ; 0x25 - 8011220: d1f9 bne.n 8011216 <_vfprintf_r+0x10e> - 8011222: ebb5 0708 subs.w r7, r5, r8 - 8011226: d00d beq.n 8011244 <_vfprintf_r+0x13c> - 8011228: 9b24 ldr r3, [sp, #144] ; 0x90 - 801122a: 443b add r3, r7 - 801122c: 9324 str r3, [sp, #144] ; 0x90 - 801122e: 9b23 ldr r3, [sp, #140] ; 0x8c - 8011230: 3301 adds r3, #1 - 8011232: 2b07 cmp r3, #7 - 8011234: e9c4 8700 strd r8, r7, [r4] - 8011238: 9323 str r3, [sp, #140] ; 0x8c - 801123a: dc79 bgt.n 8011330 <_vfprintf_r+0x228> - 801123c: 3408 adds r4, #8 - 801123e: 9b0f ldr r3, [sp, #60] ; 0x3c - 8011240: 443b add r3, r7 - 8011242: 930f str r3, [sp, #60] ; 0x3c - 8011244: 782b ldrb r3, [r5, #0] - 8011246: 2b00 cmp r3, #0 - 8011248: f001 8154 beq.w 80124f4 <_vfprintf_r+0x13ec> - 801124c: 2300 movs r3, #0 - 801124e: f04f 32ff mov.w r2, #4294967295 - 8011252: 3501 adds r5, #1 - 8011254: f88d 306b strb.w r3, [sp, #107] ; 0x6b - 8011258: 9204 str r2, [sp, #16] - 801125a: 9310 str r3, [sp, #64] ; 0x40 - 801125c: 469b mov fp, r3 - 801125e: 270a movs r7, #10 - 8011260: 212b movs r1, #43 ; 0x2b - 8011262: 462b mov r3, r5 - 8011264: f813 2b01 ldrb.w r2, [r3], #1 - 8011268: 9206 str r2, [sp, #24] - 801126a: 930b str r3, [sp, #44] ; 0x2c - 801126c: 9b06 ldr r3, [sp, #24] - 801126e: 3b20 subs r3, #32 - 8011270: 2b5a cmp r3, #90 ; 0x5a - 8011272: f200 85c8 bhi.w 8011e06 <_vfprintf_r+0xcfe> - 8011276: e8df f013 tbh [pc, r3, lsl #1] - 801127a: 007e .short 0x007e - 801127c: 05c605c6 .word 0x05c605c6 - 8011280: 05c60086 .word 0x05c60086 - 8011284: 05c605c6 .word 0x05c605c6 - 8011288: 05c60065 .word 0x05c60065 - 801128c: 008905c6 .word 0x008905c6 - 8011290: 05c60093 .word 0x05c60093 - 8011294: 00960090 .word 0x00960090 - 8011298: 00b205c6 .word 0x00b205c6 - 801129c: 00b500b5 .word 0x00b500b5 - 80112a0: 00b500b5 .word 0x00b500b5 - 80112a4: 00b500b5 .word 0x00b500b5 - 80112a8: 00b500b5 .word 0x00b500b5 - 80112ac: 05c600b5 .word 0x05c600b5 - 80112b0: 05c605c6 .word 0x05c605c6 - 80112b4: 05c605c6 .word 0x05c605c6 - 80112b8: 05c605c6 .word 0x05c605c6 - 80112bc: 05c6012a .word 0x05c6012a - 80112c0: 00fa00e7 .word 0x00fa00e7 - 80112c4: 012a012a .word 0x012a012a - 80112c8: 05c6012a .word 0x05c6012a - 80112cc: 05c605c6 .word 0x05c605c6 - 80112d0: 00c505c6 .word 0x00c505c6 - 80112d4: 05c605c6 .word 0x05c605c6 - 80112d8: 05c604a0 .word 0x05c604a0 - 80112dc: 05c605c6 .word 0x05c605c6 - 80112e0: 05c604ea .word 0x05c604ea - 80112e4: 05c6050b .word 0x05c6050b - 80112e8: 052d05c6 .word 0x052d05c6 - 80112ec: 05c605c6 .word 0x05c605c6 - 80112f0: 05c605c6 .word 0x05c605c6 - 80112f4: 05c605c6 .word 0x05c605c6 - 80112f8: 05c605c6 .word 0x05c605c6 - 80112fc: 05c6012a .word 0x05c6012a - 8011300: 00fc00e7 .word 0x00fc00e7 - 8011304: 012a012a .word 0x012a012a - 8011308: 00c8012a .word 0x00c8012a - 801130c: 00dc00fc .word 0x00dc00fc - 8011310: 00d505c6 .word 0x00d505c6 - 8011314: 047b05c6 .word 0x047b05c6 - 8011318: 04d804a2 .word 0x04d804a2 - 801131c: 05c600dc .word 0x05c600dc - 8011320: 007c04ea .word 0x007c04ea - 8011324: 05c6050d .word 0x05c6050d - 8011328: 054c05c6 .word 0x054c05c6 - 801132c: 007c05c6 .word 0x007c05c6 - 8011330: aa22 add r2, sp, #136 ; 0x88 - 8011332: 4649 mov r1, r9 - 8011334: 4650 mov r0, sl - 8011336: f003 f93a bl 80145ae <__sprint_r> - 801133a: 2800 cmp r0, #0 - 801133c: f040 8135 bne.w 80115aa <_vfprintf_r+0x4a2> - 8011340: ac25 add r4, sp, #148 ; 0x94 - 8011342: e77c b.n 801123e <_vfprintf_r+0x136> - 8011344: 4650 mov r0, sl - 8011346: f002 fa95 bl 8013874 <_localeconv_r> - 801134a: 6843 ldr r3, [r0, #4] - 801134c: 9314 str r3, [sp, #80] ; 0x50 - 801134e: 4618 mov r0, r3 - 8011350: f7ee ff4e bl 80001f0 - 8011354: 9012 str r0, [sp, #72] ; 0x48 - 8011356: 4650 mov r0, sl - 8011358: f002 fa8c bl 8013874 <_localeconv_r> - 801135c: 6883 ldr r3, [r0, #8] - 801135e: 930a str r3, [sp, #40] ; 0x28 - 8011360: 9b12 ldr r3, [sp, #72] ; 0x48 - 8011362: 212b movs r1, #43 ; 0x2b - 8011364: b12b cbz r3, 8011372 <_vfprintf_r+0x26a> - 8011366: 9b0a ldr r3, [sp, #40] ; 0x28 - 8011368: b11b cbz r3, 8011372 <_vfprintf_r+0x26a> - 801136a: 781b ldrb r3, [r3, #0] - 801136c: b10b cbz r3, 8011372 <_vfprintf_r+0x26a> - 801136e: f44b 6b80 orr.w fp, fp, #1024 ; 0x400 - 8011372: 9d0b ldr r5, [sp, #44] ; 0x2c - 8011374: e775 b.n 8011262 <_vfprintf_r+0x15a> - 8011376: f89d 306b ldrb.w r3, [sp, #107] ; 0x6b - 801137a: 2b00 cmp r3, #0 - 801137c: d1f9 bne.n 8011372 <_vfprintf_r+0x26a> - 801137e: 2320 movs r3, #32 - 8011380: f88d 306b strb.w r3, [sp, #107] ; 0x6b - 8011384: e7f5 b.n 8011372 <_vfprintf_r+0x26a> - 8011386: f04b 0b01 orr.w fp, fp, #1 - 801138a: e7f2 b.n 8011372 <_vfprintf_r+0x26a> - 801138c: f856 3b04 ldr.w r3, [r6], #4 - 8011390: 9310 str r3, [sp, #64] ; 0x40 - 8011392: 2b00 cmp r3, #0 - 8011394: daed bge.n 8011372 <_vfprintf_r+0x26a> - 8011396: 425b negs r3, r3 - 8011398: 9310 str r3, [sp, #64] ; 0x40 - 801139a: f04b 0b04 orr.w fp, fp, #4 - 801139e: e7e8 b.n 8011372 <_vfprintf_r+0x26a> - 80113a0: f88d 106b strb.w r1, [sp, #107] ; 0x6b - 80113a4: e7e5 b.n 8011372 <_vfprintf_r+0x26a> - 80113a6: 9b0b ldr r3, [sp, #44] ; 0x2c - 80113a8: f813 2b01 ldrb.w r2, [r3], #1 - 80113ac: 9206 str r2, [sp, #24] - 80113ae: 2a2a cmp r2, #42 ; 0x2a - 80113b0: d112 bne.n 80113d8 <_vfprintf_r+0x2d0> - 80113b2: f856 0b04 ldr.w r0, [r6], #4 - 80113b6: 930b str r3, [sp, #44] ; 0x2c - 80113b8: ea40 72e0 orr.w r2, r0, r0, asr #31 - 80113bc: 9204 str r2, [sp, #16] - 80113be: e7d8 b.n 8011372 <_vfprintf_r+0x26a> - 80113c0: 9804 ldr r0, [sp, #16] - 80113c2: fb07 2200 mla r2, r7, r0, r2 - 80113c6: 9204 str r2, [sp, #16] - 80113c8: f813 2b01 ldrb.w r2, [r3], #1 - 80113cc: 9206 str r2, [sp, #24] - 80113ce: 9a06 ldr r2, [sp, #24] - 80113d0: 3a30 subs r2, #48 ; 0x30 - 80113d2: 2a09 cmp r2, #9 - 80113d4: d9f4 bls.n 80113c0 <_vfprintf_r+0x2b8> - 80113d6: e748 b.n 801126a <_vfprintf_r+0x162> - 80113d8: 2200 movs r2, #0 - 80113da: 9204 str r2, [sp, #16] - 80113dc: e7f7 b.n 80113ce <_vfprintf_r+0x2c6> - 80113de: f04b 0b80 orr.w fp, fp, #128 ; 0x80 - 80113e2: e7c6 b.n 8011372 <_vfprintf_r+0x26a> - 80113e4: 2200 movs r2, #0 - 80113e6: 9b0b ldr r3, [sp, #44] ; 0x2c - 80113e8: 9210 str r2, [sp, #64] ; 0x40 - 80113ea: 9a06 ldr r2, [sp, #24] - 80113ec: 9810 ldr r0, [sp, #64] ; 0x40 - 80113ee: 3a30 subs r2, #48 ; 0x30 - 80113f0: fb07 2200 mla r2, r7, r0, r2 - 80113f4: 9210 str r2, [sp, #64] ; 0x40 - 80113f6: f813 2b01 ldrb.w r2, [r3], #1 - 80113fa: 9206 str r2, [sp, #24] - 80113fc: 3a30 subs r2, #48 ; 0x30 - 80113fe: 2a09 cmp r2, #9 - 8011400: d9f3 bls.n 80113ea <_vfprintf_r+0x2e2> - 8011402: e732 b.n 801126a <_vfprintf_r+0x162> - 8011404: f04b 0b08 orr.w fp, fp, #8 - 8011408: e7b3 b.n 8011372 <_vfprintf_r+0x26a> - 801140a: 9b0b ldr r3, [sp, #44] ; 0x2c - 801140c: 781b ldrb r3, [r3, #0] - 801140e: 2b68 cmp r3, #104 ; 0x68 - 8011410: bf01 itttt eq - 8011412: 9b0b ldreq r3, [sp, #44] ; 0x2c - 8011414: 3301 addeq r3, #1 - 8011416: 930b streq r3, [sp, #44] ; 0x2c - 8011418: f44b 7b00 orreq.w fp, fp, #512 ; 0x200 - 801141c: bf18 it ne - 801141e: f04b 0b40 orrne.w fp, fp, #64 ; 0x40 - 8011422: e7a6 b.n 8011372 <_vfprintf_r+0x26a> - 8011424: 9b0b ldr r3, [sp, #44] ; 0x2c - 8011426: 781b ldrb r3, [r3, #0] - 8011428: 2b6c cmp r3, #108 ; 0x6c - 801142a: d105 bne.n 8011438 <_vfprintf_r+0x330> - 801142c: 9b0b ldr r3, [sp, #44] ; 0x2c - 801142e: 3301 adds r3, #1 - 8011430: 930b str r3, [sp, #44] ; 0x2c - 8011432: f04b 0b20 orr.w fp, fp, #32 - 8011436: e79c b.n 8011372 <_vfprintf_r+0x26a> - 8011438: f04b 0b10 orr.w fp, fp, #16 - 801143c: e799 b.n 8011372 <_vfprintf_r+0x26a> - 801143e: bf00 nop - ... - 8011448: 4632 mov r2, r6 - 801144a: 2000 movs r0, #0 - 801144c: f852 3b04 ldr.w r3, [r2], #4 - 8011450: 9207 str r2, [sp, #28] - 8011452: f88d 30d4 strb.w r3, [sp, #212] ; 0xd4 - 8011456: f88d 006b strb.w r0, [sp, #107] ; 0x6b - 801145a: 2301 movs r3, #1 - 801145c: e9cd 0008 strd r0, r0, [sp, #32] - 8011460: 9003 str r0, [sp, #12] - 8011462: 9304 str r3, [sp, #16] - 8011464: 4606 mov r6, r0 - 8011466: 4605 mov r5, r0 - 8011468: f10d 08d4 add.w r8, sp, #212 ; 0xd4 - 801146c: e1c6 b.n 80117fc <_vfprintf_r+0x6f4> - 801146e: f04b 0b10 orr.w fp, fp, #16 - 8011472: f01b 0f20 tst.w fp, #32 - 8011476: d012 beq.n 801149e <_vfprintf_r+0x396> - 8011478: 3607 adds r6, #7 - 801147a: f026 0307 bic.w r3, r6, #7 - 801147e: 461a mov r2, r3 - 8011480: 685d ldr r5, [r3, #4] - 8011482: f852 6b08 ldr.w r6, [r2], #8 - 8011486: 9207 str r2, [sp, #28] - 8011488: 2d00 cmp r5, #0 - 801148a: da06 bge.n 801149a <_vfprintf_r+0x392> - 801148c: 4276 negs r6, r6 - 801148e: f04f 032d mov.w r3, #45 ; 0x2d - 8011492: eb65 0545 sbc.w r5, r5, r5, lsl #1 - 8011496: f88d 306b strb.w r3, [sp, #107] ; 0x6b - 801149a: 2301 movs r3, #1 - 801149c: e3a0 b.n 8011be0 <_vfprintf_r+0xad8> - 801149e: 4633 mov r3, r6 - 80114a0: f01b 0f10 tst.w fp, #16 - 80114a4: f853 5b04 ldr.w r5, [r3], #4 - 80114a8: 9307 str r3, [sp, #28] - 80114aa: d002 beq.n 80114b2 <_vfprintf_r+0x3aa> - 80114ac: 462e mov r6, r5 - 80114ae: 17ed asrs r5, r5, #31 - 80114b0: e7ea b.n 8011488 <_vfprintf_r+0x380> - 80114b2: f01b 0f40 tst.w fp, #64 ; 0x40 - 80114b6: d003 beq.n 80114c0 <_vfprintf_r+0x3b8> - 80114b8: b22e sxth r6, r5 - 80114ba: f345 35c0 sbfx r5, r5, #15, #1 - 80114be: e7e3 b.n 8011488 <_vfprintf_r+0x380> - 80114c0: f41b 7f00 tst.w fp, #512 ; 0x200 - 80114c4: d0f2 beq.n 80114ac <_vfprintf_r+0x3a4> - 80114c6: b26e sxtb r6, r5 - 80114c8: f345 15c0 sbfx r5, r5, #7, #1 - 80114cc: e7dc b.n 8011488 <_vfprintf_r+0x380> - 80114ce: 3607 adds r6, #7 - 80114d0: f026 0307 bic.w r3, r6, #7 - 80114d4: ecb3 7b02 vldmia r3!, {d7} - 80114d8: ed8d 7b0c vstr d7, [sp, #48] ; 0x30 - 80114dc: 9307 str r3, [sp, #28] - 80114de: 9b0c ldr r3, [sp, #48] ; 0x30 - 80114e0: ee09 3a10 vmov s18, r3 - 80114e4: 9b0d ldr r3, [sp, #52] ; 0x34 - 80114e6: f023 4300 bic.w r3, r3, #2147483648 ; 0x80000000 - 80114ea: ee09 3a90 vmov s19, r3 - 80114ee: f04f 32ff mov.w r2, #4294967295 - 80114f2: 4b3f ldr r3, [pc, #252] ; (80115f0 <_vfprintf_r+0x4e8>) - 80114f4: ec51 0b19 vmov r0, r1, d9 - 80114f8: f7ef fb28 bl 8000b4c <__aeabi_dcmpun> - 80114fc: bb10 cbnz r0, 8011544 <_vfprintf_r+0x43c> - 80114fe: 4b3c ldr r3, [pc, #240] ; (80115f0 <_vfprintf_r+0x4e8>) - 8011500: ec51 0b19 vmov r0, r1, d9 - 8011504: f04f 32ff mov.w r2, #4294967295 - 8011508: f7ef fb02 bl 8000b10 <__aeabi_dcmple> - 801150c: b9d0 cbnz r0, 8011544 <_vfprintf_r+0x43c> - 801150e: e9dd 010c ldrd r0, r1, [sp, #48] ; 0x30 - 8011512: 2200 movs r2, #0 - 8011514: 2300 movs r3, #0 - 8011516: f7ef faf1 bl 8000afc <__aeabi_dcmplt> - 801151a: b110 cbz r0, 8011522 <_vfprintf_r+0x41a> - 801151c: 232d movs r3, #45 ; 0x2d - 801151e: f88d 306b strb.w r3, [sp, #107] ; 0x6b - 8011522: 4a34 ldr r2, [pc, #208] ; (80115f4 <_vfprintf_r+0x4ec>) - 8011524: 4834 ldr r0, [pc, #208] ; (80115f8 <_vfprintf_r+0x4f0>) - 8011526: 9b06 ldr r3, [sp, #24] - 8011528: 2100 movs r1, #0 - 801152a: 2b47 cmp r3, #71 ; 0x47 - 801152c: bfd4 ite le - 801152e: 4690 movle r8, r2 - 8011530: 4680 movgt r8, r0 - 8011532: 2303 movs r3, #3 - 8011534: e9cd 1303 strd r1, r3, [sp, #12] - 8011538: f02b 0b80 bic.w fp, fp, #128 ; 0x80 - 801153c: 2600 movs r6, #0 - 801153e: 4633 mov r3, r6 - 8011540: f001 b812 b.w 8012568 <_vfprintf_r+0x1460> - 8011544: e9dd 230c ldrd r2, r3, [sp, #48] ; 0x30 - 8011548: 4610 mov r0, r2 - 801154a: 4619 mov r1, r3 - 801154c: f7ef fafe bl 8000b4c <__aeabi_dcmpun> - 8011550: b140 cbz r0, 8011564 <_vfprintf_r+0x45c> - 8011552: 9b0d ldr r3, [sp, #52] ; 0x34 - 8011554: 4a29 ldr r2, [pc, #164] ; (80115fc <_vfprintf_r+0x4f4>) - 8011556: 482a ldr r0, [pc, #168] ; (8011600 <_vfprintf_r+0x4f8>) - 8011558: 2b00 cmp r3, #0 - 801155a: bfbc itt lt - 801155c: 232d movlt r3, #45 ; 0x2d - 801155e: f88d 306b strblt.w r3, [sp, #107] ; 0x6b - 8011562: e7e0 b.n 8011526 <_vfprintf_r+0x41e> - 8011564: 9b06 ldr r3, [sp, #24] - 8011566: f023 0320 bic.w r3, r3, #32 - 801156a: 2b41 cmp r3, #65 ; 0x41 - 801156c: 9308 str r3, [sp, #32] - 801156e: d12e bne.n 80115ce <_vfprintf_r+0x4c6> - 8011570: 2330 movs r3, #48 ; 0x30 - 8011572: f88d 306c strb.w r3, [sp, #108] ; 0x6c - 8011576: 9b06 ldr r3, [sp, #24] - 8011578: 2b61 cmp r3, #97 ; 0x61 - 801157a: bf0c ite eq - 801157c: 2378 moveq r3, #120 ; 0x78 - 801157e: 2358 movne r3, #88 ; 0x58 - 8011580: f88d 306d strb.w r3, [sp, #109] ; 0x6d - 8011584: 9b04 ldr r3, [sp, #16] - 8011586: 2b63 cmp r3, #99 ; 0x63 - 8011588: f04b 0b02 orr.w fp, fp, #2 - 801158c: dd3a ble.n 8011604 <_vfprintf_r+0x4fc> - 801158e: 1c59 adds r1, r3, #1 - 8011590: 4650 mov r0, sl - 8011592: f002 f9e3 bl 801395c <_malloc_r> - 8011596: 4680 mov r8, r0 - 8011598: 2800 cmp r0, #0 - 801159a: f040 8207 bne.w 80119ac <_vfprintf_r+0x8a4> - 801159e: f8b9 300c ldrh.w r3, [r9, #12] - 80115a2: f043 0340 orr.w r3, r3, #64 ; 0x40 - 80115a6: f8a9 300c strh.w r3, [r9, #12] - 80115aa: f8d9 3064 ldr.w r3, [r9, #100] ; 0x64 - 80115ae: 07d9 lsls r1, r3, #31 - 80115b0: d407 bmi.n 80115c2 <_vfprintf_r+0x4ba> - 80115b2: f8b9 300c ldrh.w r3, [r9, #12] - 80115b6: 059a lsls r2, r3, #22 - 80115b8: d403 bmi.n 80115c2 <_vfprintf_r+0x4ba> - 80115ba: f8d9 0058 ldr.w r0, [r9, #88] ; 0x58 - 80115be: f002 f960 bl 8013882 <__retarget_lock_release_recursive> - 80115c2: f8b9 300c ldrh.w r3, [r9, #12] - 80115c6: 065b lsls r3, r3, #25 - 80115c8: f57f ade6 bpl.w 8011198 <_vfprintf_r+0x90> - 80115cc: e5e1 b.n 8011192 <_vfprintf_r+0x8a> - 80115ce: 9b04 ldr r3, [sp, #16] - 80115d0: 3301 adds r3, #1 - 80115d2: f000 81ed beq.w 80119b0 <_vfprintf_r+0x8a8> - 80115d6: 9b08 ldr r3, [sp, #32] - 80115d8: 2b47 cmp r3, #71 ; 0x47 - 80115da: f040 81ec bne.w 80119b6 <_vfprintf_r+0x8ae> - 80115de: 9b04 ldr r3, [sp, #16] - 80115e0: 2b00 cmp r3, #0 - 80115e2: f040 81e8 bne.w 80119b6 <_vfprintf_r+0x8ae> - 80115e6: 9303 str r3, [sp, #12] - 80115e8: 2301 movs r3, #1 - 80115ea: 9304 str r3, [sp, #16] - 80115ec: e00d b.n 801160a <_vfprintf_r+0x502> - 80115ee: bf00 nop - 80115f0: 7fefffff .word 0x7fefffff - 80115f4: 08018be8 .word 0x08018be8 - 80115f8: 08018bec .word 0x08018bec - 80115fc: 08018bf0 .word 0x08018bf0 - 8011600: 08018bf4 .word 0x08018bf4 - 8011604: 9003 str r0, [sp, #12] - 8011606: f10d 08d4 add.w r8, sp, #212 ; 0xd4 - 801160a: f44b 7380 orr.w r3, fp, #256 ; 0x100 - 801160e: 9311 str r3, [sp, #68] ; 0x44 - 8011610: 9b0d ldr r3, [sp, #52] ; 0x34 - 8011612: 2b00 cmp r3, #0 - 8011614: f280 81d1 bge.w 80119ba <_vfprintf_r+0x8b2> - 8011618: 9b0c ldr r3, [sp, #48] ; 0x30 - 801161a: ee08 3a10 vmov s16, r3 - 801161e: 9b0d ldr r3, [sp, #52] ; 0x34 - 8011620: f103 4300 add.w r3, r3, #2147483648 ; 0x80000000 - 8011624: ee08 3a90 vmov s17, r3 - 8011628: 232d movs r3, #45 ; 0x2d - 801162a: 9318 str r3, [sp, #96] ; 0x60 - 801162c: 9b08 ldr r3, [sp, #32] - 801162e: 2b41 cmp r3, #65 ; 0x41 - 8011630: f040 81e1 bne.w 80119f6 <_vfprintf_r+0x8ee> - 8011634: eeb0 0a48 vmov.f32 s0, s16 - 8011638: eef0 0a68 vmov.f32 s1, s17 - 801163c: a81c add r0, sp, #112 ; 0x70 - 801163e: f002 ff0b bl 8014458 - 8011642: 2200 movs r2, #0 - 8011644: f04f 537f mov.w r3, #1069547520 ; 0x3fc00000 - 8011648: ec51 0b10 vmov r0, r1, d0 - 801164c: f7ee ffe4 bl 8000618 <__aeabi_dmul> - 8011650: 2200 movs r2, #0 - 8011652: 2300 movs r3, #0 - 8011654: 4606 mov r6, r0 - 8011656: 460f mov r7, r1 - 8011658: f7ef fa46 bl 8000ae8 <__aeabi_dcmpeq> - 801165c: b108 cbz r0, 8011662 <_vfprintf_r+0x55a> - 801165e: 2301 movs r3, #1 - 8011660: 931c str r3, [sp, #112] ; 0x70 - 8011662: 4ba7 ldr r3, [pc, #668] ; (8011900 <_vfprintf_r+0x7f8>) - 8011664: 4aa7 ldr r2, [pc, #668] ; (8011904 <_vfprintf_r+0x7fc>) - 8011666: 9906 ldr r1, [sp, #24] - 8011668: 2961 cmp r1, #97 ; 0x61 - 801166a: bf18 it ne - 801166c: 461a movne r2, r3 - 801166e: 9b04 ldr r3, [sp, #16] - 8011670: 9217 str r2, [sp, #92] ; 0x5c - 8011672: 3b01 subs r3, #1 - 8011674: 9305 str r3, [sp, #20] - 8011676: 4645 mov r5, r8 - 8011678: 4ba3 ldr r3, [pc, #652] ; (8011908 <_vfprintf_r+0x800>) - 801167a: 2200 movs r2, #0 - 801167c: 4630 mov r0, r6 - 801167e: 4639 mov r1, r7 - 8011680: f7ee ffca bl 8000618 <__aeabi_dmul> - 8011684: 460f mov r7, r1 - 8011686: 4606 mov r6, r0 - 8011688: f7ef fa76 bl 8000b78 <__aeabi_d2iz> - 801168c: 9019 str r0, [sp, #100] ; 0x64 - 801168e: f7ee ff59 bl 8000544 <__aeabi_i2d> - 8011692: 4602 mov r2, r0 - 8011694: 460b mov r3, r1 - 8011696: 4630 mov r0, r6 - 8011698: 4639 mov r1, r7 - 801169a: f7ee fe05 bl 80002a8 <__aeabi_dsub> - 801169e: 9a19 ldr r2, [sp, #100] ; 0x64 - 80116a0: 9b17 ldr r3, [sp, #92] ; 0x5c - 80116a2: 5c9b ldrb r3, [r3, r2] - 80116a4: f805 3b01 strb.w r3, [r5], #1 - 80116a8: 9b05 ldr r3, [sp, #20] - 80116aa: 9309 str r3, [sp, #36] ; 0x24 - 80116ac: 1c5a adds r2, r3, #1 - 80116ae: 4606 mov r6, r0 - 80116b0: 460f mov r7, r1 - 80116b2: d007 beq.n 80116c4 <_vfprintf_r+0x5bc> - 80116b4: 3b01 subs r3, #1 - 80116b6: 9305 str r3, [sp, #20] - 80116b8: 2200 movs r2, #0 - 80116ba: 2300 movs r3, #0 - 80116bc: f7ef fa14 bl 8000ae8 <__aeabi_dcmpeq> - 80116c0: 2800 cmp r0, #0 - 80116c2: d0d9 beq.n 8011678 <_vfprintf_r+0x570> - 80116c4: 4b91 ldr r3, [pc, #580] ; (801190c <_vfprintf_r+0x804>) - 80116c6: 2200 movs r2, #0 - 80116c8: 4630 mov r0, r6 - 80116ca: 4639 mov r1, r7 - 80116cc: f7ef fa34 bl 8000b38 <__aeabi_dcmpgt> - 80116d0: b960 cbnz r0, 80116ec <_vfprintf_r+0x5e4> - 80116d2: 4b8e ldr r3, [pc, #568] ; (801190c <_vfprintf_r+0x804>) - 80116d4: 2200 movs r2, #0 - 80116d6: 4630 mov r0, r6 - 80116d8: 4639 mov r1, r7 - 80116da: f7ef fa05 bl 8000ae8 <__aeabi_dcmpeq> - 80116de: 2800 cmp r0, #0 - 80116e0: f000 8184 beq.w 80119ec <_vfprintf_r+0x8e4> - 80116e4: 9b19 ldr r3, [sp, #100] ; 0x64 - 80116e6: 07da lsls r2, r3, #31 - 80116e8: f140 8180 bpl.w 80119ec <_vfprintf_r+0x8e4> - 80116ec: 9b17 ldr r3, [sp, #92] ; 0x5c - 80116ee: 9520 str r5, [sp, #128] ; 0x80 - 80116f0: 7bd9 ldrb r1, [r3, #15] - 80116f2: 2030 movs r0, #48 ; 0x30 - 80116f4: 9a20 ldr r2, [sp, #128] ; 0x80 - 80116f6: 1e53 subs r3, r2, #1 - 80116f8: 9320 str r3, [sp, #128] ; 0x80 - 80116fa: f812 3c01 ldrb.w r3, [r2, #-1] - 80116fe: 428b cmp r3, r1 - 8011700: f000 8163 beq.w 80119ca <_vfprintf_r+0x8c2> - 8011704: 2b39 cmp r3, #57 ; 0x39 - 8011706: bf0b itete eq - 8011708: 9b17 ldreq r3, [sp, #92] ; 0x5c - 801170a: 3301 addne r3, #1 - 801170c: 7a9b ldrbeq r3, [r3, #10] - 801170e: b2db uxtbne r3, r3 - 8011710: f802 3c01 strb.w r3, [r2, #-1] - 8011714: eba5 0308 sub.w r3, r5, r8 - 8011718: 9305 str r3, [sp, #20] - 801171a: 9b08 ldr r3, [sp, #32] - 801171c: 9d1c ldr r5, [sp, #112] ; 0x70 - 801171e: 2b47 cmp r3, #71 ; 0x47 - 8011720: f040 81b1 bne.w 8011a86 <_vfprintf_r+0x97e> - 8011724: 1ceb adds r3, r5, #3 - 8011726: db03 blt.n 8011730 <_vfprintf_r+0x628> - 8011728: 9b04 ldr r3, [sp, #16] - 801172a: 42ab cmp r3, r5 - 801172c: f280 81d6 bge.w 8011adc <_vfprintf_r+0x9d4> - 8011730: 9b06 ldr r3, [sp, #24] - 8011732: 3b02 subs r3, #2 - 8011734: 9306 str r3, [sp, #24] - 8011736: 9906 ldr r1, [sp, #24] - 8011738: f89d 2018 ldrb.w r2, [sp, #24] - 801173c: f021 0120 bic.w r1, r1, #32 - 8011740: 2941 cmp r1, #65 ; 0x41 - 8011742: bf08 it eq - 8011744: 320f addeq r2, #15 - 8011746: f105 33ff add.w r3, r5, #4294967295 - 801174a: bf06 itte eq - 801174c: b2d2 uxtbeq r2, r2 - 801174e: 2101 moveq r1, #1 - 8011750: 2100 movne r1, #0 - 8011752: 2b00 cmp r3, #0 - 8011754: 931c str r3, [sp, #112] ; 0x70 - 8011756: bfb8 it lt - 8011758: f1c5 0301 rsblt r3, r5, #1 - 801175c: f88d 2078 strb.w r2, [sp, #120] ; 0x78 - 8011760: bfb4 ite lt - 8011762: 222d movlt r2, #45 ; 0x2d - 8011764: 222b movge r2, #43 ; 0x2b - 8011766: 2b09 cmp r3, #9 - 8011768: f88d 2079 strb.w r2, [sp, #121] ; 0x79 - 801176c: f340 81a4 ble.w 8011ab8 <_vfprintf_r+0x9b0> - 8011770: f10d 0287 add.w r2, sp, #135 ; 0x87 - 8011774: 260a movs r6, #10 - 8011776: 4611 mov r1, r2 - 8011778: fb93 f5f6 sdiv r5, r3, r6 - 801177c: fb06 3015 mls r0, r6, r5, r3 - 8011780: 3030 adds r0, #48 ; 0x30 - 8011782: f801 0c01 strb.w r0, [r1, #-1] - 8011786: 4618 mov r0, r3 - 8011788: 2863 cmp r0, #99 ; 0x63 - 801178a: f102 32ff add.w r2, r2, #4294967295 - 801178e: 462b mov r3, r5 - 8011790: dcf1 bgt.n 8011776 <_vfprintf_r+0x66e> - 8011792: 3330 adds r3, #48 ; 0x30 - 8011794: 1e88 subs r0, r1, #2 - 8011796: f802 3c01 strb.w r3, [r2, #-1] - 801179a: f10d 0587 add.w r5, sp, #135 ; 0x87 - 801179e: f10d 027a add.w r2, sp, #122 ; 0x7a - 80117a2: 4603 mov r3, r0 - 80117a4: 42ab cmp r3, r5 - 80117a6: f0c0 8182 bcc.w 8011aae <_vfprintf_r+0x9a6> - 80117aa: f10d 0289 add.w r2, sp, #137 ; 0x89 - 80117ae: 1a52 subs r2, r2, r1 - 80117b0: 42a8 cmp r0, r5 - 80117b2: bf88 it hi - 80117b4: 2200 movhi r2, #0 - 80117b6: f10d 037a add.w r3, sp, #122 ; 0x7a - 80117ba: 441a add r2, r3 - 80117bc: ab1e add r3, sp, #120 ; 0x78 - 80117be: 1ad3 subs r3, r2, r3 - 80117c0: 9a05 ldr r2, [sp, #20] - 80117c2: 9315 str r3, [sp, #84] ; 0x54 - 80117c4: 2a01 cmp r2, #1 - 80117c6: 4413 add r3, r2 - 80117c8: 9304 str r3, [sp, #16] - 80117ca: dc02 bgt.n 80117d2 <_vfprintf_r+0x6ca> - 80117cc: f01b 0f01 tst.w fp, #1 - 80117d0: d003 beq.n 80117da <_vfprintf_r+0x6d2> - 80117d2: 9b04 ldr r3, [sp, #16] - 80117d4: 9a0e ldr r2, [sp, #56] ; 0x38 - 80117d6: 4413 add r3, r2 - 80117d8: 9304 str r3, [sp, #16] - 80117da: f42b 6380 bic.w r3, fp, #1024 ; 0x400 - 80117de: f443 7380 orr.w r3, r3, #256 ; 0x100 - 80117e2: 9311 str r3, [sp, #68] ; 0x44 - 80117e4: 2300 movs r3, #0 - 80117e6: e9cd 3308 strd r3, r3, [sp, #32] - 80117ea: 461d mov r5, r3 - 80117ec: 9b18 ldr r3, [sp, #96] ; 0x60 - 80117ee: b113 cbz r3, 80117f6 <_vfprintf_r+0x6ee> - 80117f0: 232d movs r3, #45 ; 0x2d - 80117f2: f88d 306b strb.w r3, [sp, #107] ; 0x6b - 80117f6: f8dd b044 ldr.w fp, [sp, #68] ; 0x44 - 80117fa: 2600 movs r6, #0 - 80117fc: 9b04 ldr r3, [sp, #16] - 80117fe: 42b3 cmp r3, r6 - 8011800: bfb8 it lt - 8011802: 4633 movlt r3, r6 - 8011804: 9311 str r3, [sp, #68] ; 0x44 - 8011806: f89d 306b ldrb.w r3, [sp, #107] ; 0x6b - 801180a: b113 cbz r3, 8011812 <_vfprintf_r+0x70a> - 801180c: 9b11 ldr r3, [sp, #68] ; 0x44 - 801180e: 3301 adds r3, #1 - 8011810: 9311 str r3, [sp, #68] ; 0x44 - 8011812: f01b 0302 ands.w r3, fp, #2 - 8011816: 9317 str r3, [sp, #92] ; 0x5c - 8011818: bf1e ittt ne - 801181a: 9b11 ldrne r3, [sp, #68] ; 0x44 - 801181c: 3302 addne r3, #2 - 801181e: 9311 strne r3, [sp, #68] ; 0x44 - 8011820: f01b 0384 ands.w r3, fp, #132 ; 0x84 - 8011824: 9318 str r3, [sp, #96] ; 0x60 - 8011826: d11f bne.n 8011868 <_vfprintf_r+0x760> - 8011828: e9dd 3210 ldrd r3, r2, [sp, #64] ; 0x40 - 801182c: 1a9f subs r7, r3, r2 - 801182e: 2f00 cmp r7, #0 - 8011830: dd1a ble.n 8011868 <_vfprintf_r+0x760> - 8011832: e9dd 3223 ldrd r3, r2, [sp, #140] ; 0x8c - 8011836: 4836 ldr r0, [pc, #216] ; (8011910 <_vfprintf_r+0x808>) - 8011838: 6020 str r0, [r4, #0] - 801183a: 2f10 cmp r7, #16 - 801183c: f103 0301 add.w r3, r3, #1 - 8011840: f104 0108 add.w r1, r4, #8 - 8011844: f300 82ee bgt.w 8011e24 <_vfprintf_r+0xd1c> - 8011848: 443a add r2, r7 - 801184a: 2b07 cmp r3, #7 - 801184c: e9cd 3223 strd r3, r2, [sp, #140] ; 0x8c - 8011850: 6067 str r7, [r4, #4] - 8011852: f340 82fa ble.w 8011e4a <_vfprintf_r+0xd42> - 8011856: aa22 add r2, sp, #136 ; 0x88 - 8011858: 4649 mov r1, r9 - 801185a: 4650 mov r0, sl - 801185c: f002 fea7 bl 80145ae <__sprint_r> - 8011860: 2800 cmp r0, #0 - 8011862: f040 8625 bne.w 80124b0 <_vfprintf_r+0x13a8> - 8011866: ac25 add r4, sp, #148 ; 0x94 - 8011868: f89d 306b ldrb.w r3, [sp, #107] ; 0x6b - 801186c: b173 cbz r3, 801188c <_vfprintf_r+0x784> - 801186e: f10d 036b add.w r3, sp, #107 ; 0x6b - 8011872: 6023 str r3, [r4, #0] - 8011874: 2301 movs r3, #1 - 8011876: 6063 str r3, [r4, #4] - 8011878: 9b24 ldr r3, [sp, #144] ; 0x90 - 801187a: 3301 adds r3, #1 - 801187c: 9324 str r3, [sp, #144] ; 0x90 - 801187e: 9b23 ldr r3, [sp, #140] ; 0x8c - 8011880: 3301 adds r3, #1 - 8011882: 2b07 cmp r3, #7 - 8011884: 9323 str r3, [sp, #140] ; 0x8c - 8011886: f300 82e2 bgt.w 8011e4e <_vfprintf_r+0xd46> - 801188a: 3408 adds r4, #8 - 801188c: 9b17 ldr r3, [sp, #92] ; 0x5c - 801188e: b16b cbz r3, 80118ac <_vfprintf_r+0x7a4> - 8011890: ab1b add r3, sp, #108 ; 0x6c - 8011892: 6023 str r3, [r4, #0] - 8011894: 2302 movs r3, #2 - 8011896: 6063 str r3, [r4, #4] - 8011898: 9b24 ldr r3, [sp, #144] ; 0x90 - 801189a: 3302 adds r3, #2 - 801189c: 9324 str r3, [sp, #144] ; 0x90 - 801189e: 9b23 ldr r3, [sp, #140] ; 0x8c - 80118a0: 3301 adds r3, #1 - 80118a2: 2b07 cmp r3, #7 - 80118a4: 9323 str r3, [sp, #140] ; 0x8c - 80118a6: f300 82dc bgt.w 8011e62 <_vfprintf_r+0xd5a> - 80118aa: 3408 adds r4, #8 - 80118ac: 9b18 ldr r3, [sp, #96] ; 0x60 - 80118ae: 2b80 cmp r3, #128 ; 0x80 - 80118b0: d11f bne.n 80118f2 <_vfprintf_r+0x7ea> - 80118b2: e9dd 3210 ldrd r3, r2, [sp, #64] ; 0x40 - 80118b6: 1a9f subs r7, r3, r2 - 80118b8: 2f00 cmp r7, #0 - 80118ba: dd1a ble.n 80118f2 <_vfprintf_r+0x7ea> - 80118bc: e9dd 3223 ldrd r3, r2, [sp, #140] ; 0x8c - 80118c0: 4814 ldr r0, [pc, #80] ; (8011914 <_vfprintf_r+0x80c>) - 80118c2: 6020 str r0, [r4, #0] - 80118c4: 2f10 cmp r7, #16 - 80118c6: f103 0301 add.w r3, r3, #1 - 80118ca: f104 0108 add.w r1, r4, #8 - 80118ce: f300 82d2 bgt.w 8011e76 <_vfprintf_r+0xd6e> - 80118d2: 6067 str r7, [r4, #4] - 80118d4: 2b07 cmp r3, #7 - 80118d6: 4417 add r7, r2 - 80118d8: e9cd 3723 strd r3, r7, [sp, #140] ; 0x8c - 80118dc: f340 82de ble.w 8011e9c <_vfprintf_r+0xd94> - 80118e0: aa22 add r2, sp, #136 ; 0x88 - 80118e2: 4649 mov r1, r9 - 80118e4: 4650 mov r0, sl - 80118e6: f002 fe62 bl 80145ae <__sprint_r> - 80118ea: 2800 cmp r0, #0 - 80118ec: f040 85e0 bne.w 80124b0 <_vfprintf_r+0x13a8> - 80118f0: ac25 add r4, sp, #148 ; 0x94 - 80118f2: 9b04 ldr r3, [sp, #16] - 80118f4: 1af6 subs r6, r6, r3 - 80118f6: 2e00 cmp r6, #0 - 80118f8: dd28 ble.n 801194c <_vfprintf_r+0x844> - 80118fa: 4f06 ldr r7, [pc, #24] ; (8011914 <_vfprintf_r+0x80c>) - 80118fc: e00c b.n 8011918 <_vfprintf_r+0x810> - 80118fe: bf00 nop - 8011900: 08018c09 .word 0x08018c09 - 8011904: 08018bf8 .word 0x08018bf8 - 8011908: 40300000 .word 0x40300000 - 801190c: 3fe00000 .word 0x3fe00000 - 8011910: 08018c1c .word 0x08018c1c - 8011914: 08018c2c .word 0x08018c2c - 8011918: 6027 str r7, [r4, #0] - 801191a: e9dd 3223 ldrd r3, r2, [sp, #140] ; 0x8c - 801191e: 2e10 cmp r6, #16 - 8011920: f103 0301 add.w r3, r3, #1 - 8011924: f104 0108 add.w r1, r4, #8 - 8011928: f300 82ba bgt.w 8011ea0 <_vfprintf_r+0xd98> - 801192c: 6066 str r6, [r4, #4] - 801192e: 2b07 cmp r3, #7 - 8011930: 4416 add r6, r2 - 8011932: e9cd 3623 strd r3, r6, [sp, #140] ; 0x8c - 8011936: f340 82c6 ble.w 8011ec6 <_vfprintf_r+0xdbe> - 801193a: aa22 add r2, sp, #136 ; 0x88 - 801193c: 4649 mov r1, r9 - 801193e: 4650 mov r0, sl - 8011940: f002 fe35 bl 80145ae <__sprint_r> - 8011944: 2800 cmp r0, #0 - 8011946: f040 85b3 bne.w 80124b0 <_vfprintf_r+0x13a8> - 801194a: ac25 add r4, sp, #148 ; 0x94 - 801194c: f41b 7f80 tst.w fp, #256 ; 0x100 - 8011950: 9e24 ldr r6, [sp, #144] ; 0x90 - 8011952: f040 82bf bne.w 8011ed4 <_vfprintf_r+0xdcc> - 8011956: 9b04 ldr r3, [sp, #16] - 8011958: f8c4 8000 str.w r8, [r4] - 801195c: 441e add r6, r3 - 801195e: 6063 str r3, [r4, #4] - 8011960: 9624 str r6, [sp, #144] ; 0x90 - 8011962: 9b23 ldr r3, [sp, #140] ; 0x8c - 8011964: 3301 adds r3, #1 - 8011966: 2b07 cmp r3, #7 - 8011968: 9323 str r3, [sp, #140] ; 0x8c - 801196a: f300 82f8 bgt.w 8011f5e <_vfprintf_r+0xe56> - 801196e: 3408 adds r4, #8 - 8011970: f01b 0f04 tst.w fp, #4 - 8011974: f040 857e bne.w 8012474 <_vfprintf_r+0x136c> - 8011978: e9dd 320f ldrd r3, r2, [sp, #60] ; 0x3c - 801197c: 9911 ldr r1, [sp, #68] ; 0x44 - 801197e: 428a cmp r2, r1 - 8011980: bfac ite ge - 8011982: 189b addge r3, r3, r2 - 8011984: 185b addlt r3, r3, r1 - 8011986: 930f str r3, [sp, #60] ; 0x3c - 8011988: 9b24 ldr r3, [sp, #144] ; 0x90 - 801198a: b13b cbz r3, 801199c <_vfprintf_r+0x894> - 801198c: aa22 add r2, sp, #136 ; 0x88 - 801198e: 4649 mov r1, r9 - 8011990: 4650 mov r0, sl - 8011992: f002 fe0c bl 80145ae <__sprint_r> - 8011996: 2800 cmp r0, #0 - 8011998: f040 858a bne.w 80124b0 <_vfprintf_r+0x13a8> - 801199c: 2300 movs r3, #0 - 801199e: 9323 str r3, [sp, #140] ; 0x8c - 80119a0: 9b03 ldr r3, [sp, #12] - 80119a2: 2b00 cmp r3, #0 - 80119a4: f040 85a0 bne.w 80124e8 <_vfprintf_r+0x13e0> - 80119a8: ac25 add r4, sp, #148 ; 0x94 - 80119aa: e0ec b.n 8011b86 <_vfprintf_r+0xa7e> - 80119ac: 9003 str r0, [sp, #12] - 80119ae: e62c b.n 801160a <_vfprintf_r+0x502> - 80119b0: 9003 str r0, [sp, #12] - 80119b2: 2306 movs r3, #6 - 80119b4: e619 b.n 80115ea <_vfprintf_r+0x4e2> - 80119b6: 9003 str r0, [sp, #12] - 80119b8: e627 b.n 801160a <_vfprintf_r+0x502> - 80119ba: ed9d 7b0c vldr d7, [sp, #48] ; 0x30 - 80119be: 2300 movs r3, #0 - 80119c0: eeb0 8a47 vmov.f32 s16, s14 - 80119c4: eef0 8a67 vmov.f32 s17, s15 - 80119c8: e62f b.n 801162a <_vfprintf_r+0x522> - 80119ca: f802 0c01 strb.w r0, [r2, #-1] - 80119ce: e691 b.n 80116f4 <_vfprintf_r+0x5ec> - 80119d0: f803 0b01 strb.w r0, [r3], #1 - 80119d4: 1aca subs r2, r1, r3 - 80119d6: 2a00 cmp r2, #0 - 80119d8: dafa bge.n 80119d0 <_vfprintf_r+0x8c8> - 80119da: 9a09 ldr r2, [sp, #36] ; 0x24 - 80119dc: 9b09 ldr r3, [sp, #36] ; 0x24 - 80119de: 3201 adds r2, #1 - 80119e0: f103 0301 add.w r3, r3, #1 - 80119e4: bfb8 it lt - 80119e6: 2300 movlt r3, #0 - 80119e8: 441d add r5, r3 - 80119ea: e693 b.n 8011714 <_vfprintf_r+0x60c> - 80119ec: 9a09 ldr r2, [sp, #36] ; 0x24 - 80119ee: 462b mov r3, r5 - 80119f0: 18a9 adds r1, r5, r2 - 80119f2: 2030 movs r0, #48 ; 0x30 - 80119f4: e7ee b.n 80119d4 <_vfprintf_r+0x8cc> - 80119f6: 9b08 ldr r3, [sp, #32] - 80119f8: 2b46 cmp r3, #70 ; 0x46 - 80119fa: d005 beq.n 8011a08 <_vfprintf_r+0x900> - 80119fc: 2b45 cmp r3, #69 ; 0x45 - 80119fe: d11b bne.n 8011a38 <_vfprintf_r+0x930> - 8011a00: 9b04 ldr r3, [sp, #16] - 8011a02: 1c5d adds r5, r3, #1 - 8011a04: 2102 movs r1, #2 - 8011a06: e001 b.n 8011a0c <_vfprintf_r+0x904> - 8011a08: 9d04 ldr r5, [sp, #16] - 8011a0a: 2103 movs r1, #3 - 8011a0c: ab20 add r3, sp, #128 ; 0x80 - 8011a0e: 9301 str r3, [sp, #4] - 8011a10: ab1d add r3, sp, #116 ; 0x74 - 8011a12: 9300 str r3, [sp, #0] - 8011a14: 462a mov r2, r5 - 8011a16: ab1c add r3, sp, #112 ; 0x70 - 8011a18: 4650 mov r0, sl - 8011a1a: eeb0 0a48 vmov.f32 s0, s16 - 8011a1e: eef0 0a68 vmov.f32 s1, s17 - 8011a22: f000 fee1 bl 80127e8 <_dtoa_r> - 8011a26: 9b08 ldr r3, [sp, #32] - 8011a28: 2b47 cmp r3, #71 ; 0x47 - 8011a2a: 4680 mov r8, r0 - 8011a2c: d106 bne.n 8011a3c <_vfprintf_r+0x934> - 8011a2e: f01b 0f01 tst.w fp, #1 - 8011a32: d103 bne.n 8011a3c <_vfprintf_r+0x934> - 8011a34: 9d20 ldr r5, [sp, #128] ; 0x80 - 8011a36: e66d b.n 8011714 <_vfprintf_r+0x60c> - 8011a38: 9d04 ldr r5, [sp, #16] - 8011a3a: e7e3 b.n 8011a04 <_vfprintf_r+0x8fc> - 8011a3c: 9b08 ldr r3, [sp, #32] - 8011a3e: 2b46 cmp r3, #70 ; 0x46 - 8011a40: eb08 0605 add.w r6, r8, r5 - 8011a44: d10f bne.n 8011a66 <_vfprintf_r+0x95e> - 8011a46: f898 3000 ldrb.w r3, [r8] - 8011a4a: 2b30 cmp r3, #48 ; 0x30 - 8011a4c: d109 bne.n 8011a62 <_vfprintf_r+0x95a> - 8011a4e: ec51 0b18 vmov r0, r1, d8 - 8011a52: 2200 movs r2, #0 - 8011a54: 2300 movs r3, #0 - 8011a56: f7ef f847 bl 8000ae8 <__aeabi_dcmpeq> - 8011a5a: b910 cbnz r0, 8011a62 <_vfprintf_r+0x95a> - 8011a5c: f1c5 0501 rsb r5, r5, #1 - 8011a60: 951c str r5, [sp, #112] ; 0x70 - 8011a62: 9b1c ldr r3, [sp, #112] ; 0x70 - 8011a64: 441e add r6, r3 - 8011a66: ec51 0b18 vmov r0, r1, d8 - 8011a6a: 2200 movs r2, #0 - 8011a6c: 2300 movs r3, #0 - 8011a6e: f7ef f83b bl 8000ae8 <__aeabi_dcmpeq> - 8011a72: b100 cbz r0, 8011a76 <_vfprintf_r+0x96e> - 8011a74: 9620 str r6, [sp, #128] ; 0x80 - 8011a76: 2230 movs r2, #48 ; 0x30 - 8011a78: 9b20 ldr r3, [sp, #128] ; 0x80 - 8011a7a: 429e cmp r6, r3 - 8011a7c: d9da bls.n 8011a34 <_vfprintf_r+0x92c> - 8011a7e: 1c59 adds r1, r3, #1 - 8011a80: 9120 str r1, [sp, #128] ; 0x80 - 8011a82: 701a strb r2, [r3, #0] - 8011a84: e7f8 b.n 8011a78 <_vfprintf_r+0x970> - 8011a86: 9b08 ldr r3, [sp, #32] - 8011a88: 2b46 cmp r3, #70 ; 0x46 - 8011a8a: f47f ae54 bne.w 8011736 <_vfprintf_r+0x62e> - 8011a8e: 9a04 ldr r2, [sp, #16] - 8011a90: f00b 0301 and.w r3, fp, #1 - 8011a94: 2d00 cmp r5, #0 - 8011a96: ea43 0302 orr.w r3, r3, r2 - 8011a9a: dd1a ble.n 8011ad2 <_vfprintf_r+0x9ca> - 8011a9c: 2b00 cmp r3, #0 - 8011a9e: d034 beq.n 8011b0a <_vfprintf_r+0xa02> - 8011aa0: 9b0e ldr r3, [sp, #56] ; 0x38 - 8011aa2: 18eb adds r3, r5, r3 - 8011aa4: 441a add r2, r3 - 8011aa6: 9204 str r2, [sp, #16] - 8011aa8: 2366 movs r3, #102 ; 0x66 - 8011aaa: 9306 str r3, [sp, #24] - 8011aac: e033 b.n 8011b16 <_vfprintf_r+0xa0e> - 8011aae: f813 6b01 ldrb.w r6, [r3], #1 - 8011ab2: f802 6b01 strb.w r6, [r2], #1 - 8011ab6: e675 b.n 80117a4 <_vfprintf_r+0x69c> - 8011ab8: b941 cbnz r1, 8011acc <_vfprintf_r+0x9c4> - 8011aba: 2230 movs r2, #48 ; 0x30 - 8011abc: f88d 207a strb.w r2, [sp, #122] ; 0x7a - 8011ac0: f10d 027b add.w r2, sp, #123 ; 0x7b - 8011ac4: 3330 adds r3, #48 ; 0x30 - 8011ac6: f802 3b01 strb.w r3, [r2], #1 - 8011aca: e677 b.n 80117bc <_vfprintf_r+0x6b4> - 8011acc: f10d 027a add.w r2, sp, #122 ; 0x7a - 8011ad0: e7f8 b.n 8011ac4 <_vfprintf_r+0x9bc> - 8011ad2: b1e3 cbz r3, 8011b0e <_vfprintf_r+0xa06> - 8011ad4: 9b0e ldr r3, [sp, #56] ; 0x38 - 8011ad6: 9a04 ldr r2, [sp, #16] - 8011ad8: 3301 adds r3, #1 - 8011ada: e7e3 b.n 8011aa4 <_vfprintf_r+0x99c> - 8011adc: 9b05 ldr r3, [sp, #20] - 8011ade: 42ab cmp r3, r5 - 8011ae0: dc07 bgt.n 8011af2 <_vfprintf_r+0x9ea> - 8011ae2: f01b 0f01 tst.w fp, #1 - 8011ae6: d02d beq.n 8011b44 <_vfprintf_r+0xa3c> - 8011ae8: 9b0e ldr r3, [sp, #56] ; 0x38 - 8011aea: 18eb adds r3, r5, r3 - 8011aec: 9304 str r3, [sp, #16] - 8011aee: 2367 movs r3, #103 ; 0x67 - 8011af0: e7db b.n 8011aaa <_vfprintf_r+0x9a2> - 8011af2: 9b05 ldr r3, [sp, #20] - 8011af4: 9a0e ldr r2, [sp, #56] ; 0x38 - 8011af6: 2d00 cmp r5, #0 - 8011af8: 4413 add r3, r2 - 8011afa: 9304 str r3, [sp, #16] - 8011afc: dcf7 bgt.n 8011aee <_vfprintf_r+0x9e6> - 8011afe: 9a04 ldr r2, [sp, #16] - 8011b00: f1c5 0301 rsb r3, r5, #1 - 8011b04: 441a add r2, r3 - 8011b06: 9204 str r2, [sp, #16] - 8011b08: e7f1 b.n 8011aee <_vfprintf_r+0x9e6> - 8011b0a: 9504 str r5, [sp, #16] - 8011b0c: e7cc b.n 8011aa8 <_vfprintf_r+0x9a0> - 8011b0e: 2366 movs r3, #102 ; 0x66 - 8011b10: 9306 str r3, [sp, #24] - 8011b12: 2301 movs r3, #1 - 8011b14: 9304 str r3, [sp, #16] - 8011b16: f41b 6380 ands.w r3, fp, #1024 ; 0x400 - 8011b1a: 9309 str r3, [sp, #36] ; 0x24 - 8011b1c: d025 beq.n 8011b6a <_vfprintf_r+0xa62> - 8011b1e: 2300 movs r3, #0 - 8011b20: 2d00 cmp r5, #0 - 8011b22: e9cd 3308 strd r3, r3, [sp, #32] - 8011b26: f77f ae61 ble.w 80117ec <_vfprintf_r+0x6e4> - 8011b2a: 9b0a ldr r3, [sp, #40] ; 0x28 - 8011b2c: 781b ldrb r3, [r3, #0] - 8011b2e: 2bff cmp r3, #255 ; 0xff - 8011b30: d10a bne.n 8011b48 <_vfprintf_r+0xa40> - 8011b32: e9dd 2308 ldrd r2, r3, [sp, #32] - 8011b36: 9912 ldr r1, [sp, #72] ; 0x48 - 8011b38: 4413 add r3, r2 - 8011b3a: 9a04 ldr r2, [sp, #16] - 8011b3c: fb01 2303 mla r3, r1, r3, r2 - 8011b40: 9304 str r3, [sp, #16] - 8011b42: e653 b.n 80117ec <_vfprintf_r+0x6e4> - 8011b44: 9504 str r5, [sp, #16] - 8011b46: e7d2 b.n 8011aee <_vfprintf_r+0x9e6> - 8011b48: 42ab cmp r3, r5 - 8011b4a: daf2 bge.n 8011b32 <_vfprintf_r+0xa2a> - 8011b4c: 1aed subs r5, r5, r3 - 8011b4e: 9b0a ldr r3, [sp, #40] ; 0x28 - 8011b50: 785b ldrb r3, [r3, #1] - 8011b52: b133 cbz r3, 8011b62 <_vfprintf_r+0xa5a> - 8011b54: 9b09 ldr r3, [sp, #36] ; 0x24 - 8011b56: 3301 adds r3, #1 - 8011b58: 9309 str r3, [sp, #36] ; 0x24 - 8011b5a: 9b0a ldr r3, [sp, #40] ; 0x28 - 8011b5c: 3301 adds r3, #1 - 8011b5e: 930a str r3, [sp, #40] ; 0x28 - 8011b60: e7e3 b.n 8011b2a <_vfprintf_r+0xa22> - 8011b62: 9b08 ldr r3, [sp, #32] - 8011b64: 3301 adds r3, #1 - 8011b66: 9308 str r3, [sp, #32] - 8011b68: e7df b.n 8011b2a <_vfprintf_r+0xa22> - 8011b6a: 9b09 ldr r3, [sp, #36] ; 0x24 - 8011b6c: 9308 str r3, [sp, #32] - 8011b6e: e63d b.n 80117ec <_vfprintf_r+0x6e4> - 8011b70: 1d33 adds r3, r6, #4 - 8011b72: f01b 0f20 tst.w fp, #32 - 8011b76: 9307 str r3, [sp, #28] - 8011b78: d00a beq.n 8011b90 <_vfprintf_r+0xa88> - 8011b7a: 9a0f ldr r2, [sp, #60] ; 0x3c - 8011b7c: 6833 ldr r3, [r6, #0] - 8011b7e: 990f ldr r1, [sp, #60] ; 0x3c - 8011b80: 17d2 asrs r2, r2, #31 - 8011b82: e9c3 1200 strd r1, r2, [r3] - 8011b86: 9e07 ldr r6, [sp, #28] - 8011b88: f8dd 802c ldr.w r8, [sp, #44] ; 0x2c - 8011b8c: f7ff bb42 b.w 8011214 <_vfprintf_r+0x10c> - 8011b90: f01b 0f10 tst.w fp, #16 - 8011b94: d003 beq.n 8011b9e <_vfprintf_r+0xa96> - 8011b96: 6833 ldr r3, [r6, #0] - 8011b98: 9a0f ldr r2, [sp, #60] ; 0x3c - 8011b9a: 601a str r2, [r3, #0] - 8011b9c: e7f3 b.n 8011b86 <_vfprintf_r+0xa7e> - 8011b9e: f01b 0f40 tst.w fp, #64 ; 0x40 - 8011ba2: d003 beq.n 8011bac <_vfprintf_r+0xaa4> - 8011ba4: 6833 ldr r3, [r6, #0] - 8011ba6: 9a0f ldr r2, [sp, #60] ; 0x3c - 8011ba8: 801a strh r2, [r3, #0] - 8011baa: e7ec b.n 8011b86 <_vfprintf_r+0xa7e> - 8011bac: f41b 7f00 tst.w fp, #512 ; 0x200 - 8011bb0: d0f1 beq.n 8011b96 <_vfprintf_r+0xa8e> - 8011bb2: 6833 ldr r3, [r6, #0] - 8011bb4: 9a0f ldr r2, [sp, #60] ; 0x3c - 8011bb6: 701a strb r2, [r3, #0] - 8011bb8: e7e5 b.n 8011b86 <_vfprintf_r+0xa7e> - 8011bba: f04b 0b10 orr.w fp, fp, #16 - 8011bbe: f01b 0320 ands.w r3, fp, #32 - 8011bc2: d01f beq.n 8011c04 <_vfprintf_r+0xafc> - 8011bc4: 3607 adds r6, #7 - 8011bc6: f026 0307 bic.w r3, r6, #7 - 8011bca: 461a mov r2, r3 - 8011bcc: 685d ldr r5, [r3, #4] - 8011bce: f852 6b08 ldr.w r6, [r2], #8 - 8011bd2: 9207 str r2, [sp, #28] - 8011bd4: f42b 6b80 bic.w fp, fp, #1024 ; 0x400 - 8011bd8: 2300 movs r3, #0 - 8011bda: 2200 movs r2, #0 - 8011bdc: f88d 206b strb.w r2, [sp, #107] ; 0x6b - 8011be0: 9a04 ldr r2, [sp, #16] - 8011be2: 3201 adds r2, #1 - 8011be4: f000 8495 beq.w 8012512 <_vfprintf_r+0x140a> - 8011be8: ea56 0205 orrs.w r2, r6, r5 - 8011bec: f02b 0780 bic.w r7, fp, #128 ; 0x80 - 8011bf0: f040 8494 bne.w 801251c <_vfprintf_r+0x1414> - 8011bf4: 9a04 ldr r2, [sp, #16] - 8011bf6: 2a00 cmp r2, #0 - 8011bf8: f000 80fa beq.w 8011df0 <_vfprintf_r+0xce8> - 8011bfc: 2b01 cmp r3, #1 - 8011bfe: f040 8490 bne.w 8012522 <_vfprintf_r+0x141a> - 8011c02: e09f b.n 8011d44 <_vfprintf_r+0xc3c> - 8011c04: 4632 mov r2, r6 - 8011c06: f01b 0510 ands.w r5, fp, #16 - 8011c0a: f852 6b04 ldr.w r6, [r2], #4 - 8011c0e: 9207 str r2, [sp, #28] - 8011c10: d001 beq.n 8011c16 <_vfprintf_r+0xb0e> - 8011c12: 461d mov r5, r3 - 8011c14: e7de b.n 8011bd4 <_vfprintf_r+0xacc> - 8011c16: f01b 0340 ands.w r3, fp, #64 ; 0x40 - 8011c1a: d001 beq.n 8011c20 <_vfprintf_r+0xb18> - 8011c1c: b2b6 uxth r6, r6 - 8011c1e: e7d9 b.n 8011bd4 <_vfprintf_r+0xacc> - 8011c20: f41b 7500 ands.w r5, fp, #512 ; 0x200 - 8011c24: d0d6 beq.n 8011bd4 <_vfprintf_r+0xacc> - 8011c26: b2f6 uxtb r6, r6 - 8011c28: e7f3 b.n 8011c12 <_vfprintf_r+0xb0a> - 8011c2a: 4633 mov r3, r6 - 8011c2c: 2278 movs r2, #120 ; 0x78 - 8011c2e: f853 6b04 ldr.w r6, [r3], #4 - 8011c32: 9307 str r3, [sp, #28] - 8011c34: 2330 movs r3, #48 ; 0x30 - 8011c36: f88d 306c strb.w r3, [sp, #108] ; 0x6c - 8011c3a: 4ba4 ldr r3, [pc, #656] ; (8011ecc <_vfprintf_r+0xdc4>) - 8011c3c: 9316 str r3, [sp, #88] ; 0x58 - 8011c3e: 2500 movs r5, #0 - 8011c40: f04b 0b02 orr.w fp, fp, #2 - 8011c44: f88d 206d strb.w r2, [sp, #109] ; 0x6d - 8011c48: 2302 movs r3, #2 - 8011c4a: 9206 str r2, [sp, #24] - 8011c4c: e7c5 b.n 8011bda <_vfprintf_r+0xad2> - 8011c4e: 4633 mov r3, r6 - 8011c50: 2500 movs r5, #0 - 8011c52: f853 8b04 ldr.w r8, [r3], #4 - 8011c56: 9307 str r3, [sp, #28] - 8011c58: 9b04 ldr r3, [sp, #16] - 8011c5a: f88d 506b strb.w r5, [sp, #107] ; 0x6b - 8011c5e: 1c5e adds r6, r3, #1 - 8011c60: d010 beq.n 8011c84 <_vfprintf_r+0xb7c> - 8011c62: 461a mov r2, r3 - 8011c64: 4629 mov r1, r5 - 8011c66: 4640 mov r0, r8 - 8011c68: f7ee faca bl 8000200 - 8011c6c: 9003 str r0, [sp, #12] - 8011c6e: 2800 cmp r0, #0 - 8011c70: f000 80d5 beq.w 8011e1e <_vfprintf_r+0xd16> - 8011c74: eba0 0308 sub.w r3, r0, r8 - 8011c78: e9cd 5303 strd r5, r3, [sp, #12] - 8011c7c: e9cd 5508 strd r5, r5, [sp, #32] - 8011c80: 462e mov r6, r5 - 8011c82: e5bb b.n 80117fc <_vfprintf_r+0x6f4> - 8011c84: 4640 mov r0, r8 - 8011c86: f7ee fab3 bl 80001f0 - 8011c8a: e9cd 5003 strd r5, r0, [sp, #12] - 8011c8e: e455 b.n 801153c <_vfprintf_r+0x434> - 8011c90: f04b 0b10 orr.w fp, fp, #16 - 8011c94: f01b 0320 ands.w r3, fp, #32 - 8011c98: d009 beq.n 8011cae <_vfprintf_r+0xba6> - 8011c9a: 3607 adds r6, #7 - 8011c9c: f026 0307 bic.w r3, r6, #7 - 8011ca0: 461a mov r2, r3 - 8011ca2: 685d ldr r5, [r3, #4] - 8011ca4: f852 6b08 ldr.w r6, [r2], #8 - 8011ca8: 9207 str r2, [sp, #28] - 8011caa: 2301 movs r3, #1 - 8011cac: e795 b.n 8011bda <_vfprintf_r+0xad2> - 8011cae: 4632 mov r2, r6 - 8011cb0: f01b 0510 ands.w r5, fp, #16 - 8011cb4: f852 6b04 ldr.w r6, [r2], #4 - 8011cb8: 9207 str r2, [sp, #28] - 8011cba: d001 beq.n 8011cc0 <_vfprintf_r+0xbb8> - 8011cbc: 461d mov r5, r3 - 8011cbe: e7f4 b.n 8011caa <_vfprintf_r+0xba2> - 8011cc0: f01b 0340 ands.w r3, fp, #64 ; 0x40 - 8011cc4: d001 beq.n 8011cca <_vfprintf_r+0xbc2> - 8011cc6: b2b6 uxth r6, r6 - 8011cc8: e7ef b.n 8011caa <_vfprintf_r+0xba2> - 8011cca: f41b 7500 ands.w r5, fp, #512 ; 0x200 - 8011cce: d0ec beq.n 8011caa <_vfprintf_r+0xba2> - 8011cd0: b2f6 uxtb r6, r6 - 8011cd2: e7f3 b.n 8011cbc <_vfprintf_r+0xbb4> - 8011cd4: 4b7e ldr r3, [pc, #504] ; (8011ed0 <_vfprintf_r+0xdc8>) - 8011cd6: 9316 str r3, [sp, #88] ; 0x58 - 8011cd8: f01b 0320 ands.w r3, fp, #32 - 8011cdc: d01b beq.n 8011d16 <_vfprintf_r+0xc0e> - 8011cde: 3607 adds r6, #7 - 8011ce0: f026 0307 bic.w r3, r6, #7 - 8011ce4: 461a mov r2, r3 - 8011ce6: 685d ldr r5, [r3, #4] - 8011ce8: f852 6b08 ldr.w r6, [r2], #8 - 8011cec: 9207 str r2, [sp, #28] - 8011cee: f01b 0f01 tst.w fp, #1 - 8011cf2: d00a beq.n 8011d0a <_vfprintf_r+0xc02> - 8011cf4: ea56 0305 orrs.w r3, r6, r5 - 8011cf8: d007 beq.n 8011d0a <_vfprintf_r+0xc02> - 8011cfa: 2330 movs r3, #48 ; 0x30 - 8011cfc: f88d 306c strb.w r3, [sp, #108] ; 0x6c - 8011d00: 9b06 ldr r3, [sp, #24] - 8011d02: f88d 306d strb.w r3, [sp, #109] ; 0x6d - 8011d06: f04b 0b02 orr.w fp, fp, #2 - 8011d0a: f42b 6b80 bic.w fp, fp, #1024 ; 0x400 - 8011d0e: 2302 movs r3, #2 - 8011d10: e763 b.n 8011bda <_vfprintf_r+0xad2> - 8011d12: 4b6e ldr r3, [pc, #440] ; (8011ecc <_vfprintf_r+0xdc4>) - 8011d14: e7df b.n 8011cd6 <_vfprintf_r+0xbce> - 8011d16: 4632 mov r2, r6 - 8011d18: f01b 0510 ands.w r5, fp, #16 - 8011d1c: f852 6b04 ldr.w r6, [r2], #4 - 8011d20: 9207 str r2, [sp, #28] - 8011d22: d001 beq.n 8011d28 <_vfprintf_r+0xc20> - 8011d24: 461d mov r5, r3 - 8011d26: e7e2 b.n 8011cee <_vfprintf_r+0xbe6> - 8011d28: f01b 0340 ands.w r3, fp, #64 ; 0x40 - 8011d2c: d001 beq.n 8011d32 <_vfprintf_r+0xc2a> - 8011d2e: b2b6 uxth r6, r6 - 8011d30: e7dd b.n 8011cee <_vfprintf_r+0xbe6> - 8011d32: f41b 7500 ands.w r5, fp, #512 ; 0x200 - 8011d36: d0da beq.n 8011cee <_vfprintf_r+0xbe6> - 8011d38: b2f6 uxtb r6, r6 - 8011d3a: e7f3 b.n 8011d24 <_vfprintf_r+0xc1c> - 8011d3c: 2e0a cmp r6, #10 - 8011d3e: f175 0300 sbcs.w r3, r5, #0 - 8011d42: d206 bcs.n 8011d52 <_vfprintf_r+0xc4a> - 8011d44: 3630 adds r6, #48 ; 0x30 - 8011d46: f88d 6137 strb.w r6, [sp, #311] ; 0x137 - 8011d4a: f20d 1837 addw r8, sp, #311 ; 0x137 - 8011d4e: f000 bc03 b.w 8012558 <_vfprintf_r+0x1450> - 8011d52: 2300 movs r3, #0 - 8011d54: 9305 str r3, [sp, #20] - 8011d56: f407 6380 and.w r3, r7, #1024 ; 0x400 - 8011d5a: f50d 7b9c add.w fp, sp, #312 ; 0x138 - 8011d5e: 9303 str r3, [sp, #12] - 8011d60: 220a movs r2, #10 - 8011d62: 2300 movs r3, #0 - 8011d64: 4630 mov r0, r6 - 8011d66: 4629 mov r1, r5 - 8011d68: f7ee ff2e bl 8000bc8 <__aeabi_uldivmod> - 8011d6c: 9b05 ldr r3, [sp, #20] - 8011d6e: 3301 adds r3, #1 - 8011d70: 9305 str r3, [sp, #20] - 8011d72: 9b03 ldr r3, [sp, #12] - 8011d74: 3230 adds r2, #48 ; 0x30 - 8011d76: f10b 38ff add.w r8, fp, #4294967295 - 8011d7a: f80b 2c01 strb.w r2, [fp, #-1] - 8011d7e: b1d3 cbz r3, 8011db6 <_vfprintf_r+0xcae> - 8011d80: 9b0a ldr r3, [sp, #40] ; 0x28 - 8011d82: 9a05 ldr r2, [sp, #20] - 8011d84: 781b ldrb r3, [r3, #0] - 8011d86: 429a cmp r2, r3 - 8011d88: d115 bne.n 8011db6 <_vfprintf_r+0xcae> - 8011d8a: 2aff cmp r2, #255 ; 0xff - 8011d8c: d013 beq.n 8011db6 <_vfprintf_r+0xcae> - 8011d8e: 2e0a cmp r6, #10 - 8011d90: f175 0300 sbcs.w r3, r5, #0 - 8011d94: d30f bcc.n 8011db6 <_vfprintf_r+0xcae> - 8011d96: 9b12 ldr r3, [sp, #72] ; 0x48 - 8011d98: 9914 ldr r1, [sp, #80] ; 0x50 - 8011d9a: eba8 0803 sub.w r8, r8, r3 - 8011d9e: 461a mov r2, r3 - 8011da0: 4640 mov r0, r8 - 8011da2: f002 fbe4 bl 801456e - 8011da6: 9b0a ldr r3, [sp, #40] ; 0x28 - 8011da8: 785b ldrb r3, [r3, #1] - 8011daa: b11b cbz r3, 8011db4 <_vfprintf_r+0xcac> - 8011dac: 9b0a ldr r3, [sp, #40] ; 0x28 - 8011dae: 3301 adds r3, #1 - 8011db0: 930a str r3, [sp, #40] ; 0x28 - 8011db2: 2300 movs r3, #0 - 8011db4: 9305 str r3, [sp, #20] - 8011db6: 2300 movs r3, #0 - 8011db8: 220a movs r2, #10 - 8011dba: 4630 mov r0, r6 - 8011dbc: 4629 mov r1, r5 - 8011dbe: f7ee ff03 bl 8000bc8 <__aeabi_uldivmod> - 8011dc2: 2e0a cmp r6, #10 - 8011dc4: f175 0300 sbcs.w r3, r5, #0 - 8011dc8: f0c0 83c6 bcc.w 8012558 <_vfprintf_r+0x1450> - 8011dcc: 4606 mov r6, r0 - 8011dce: 460d mov r5, r1 - 8011dd0: 46c3 mov fp, r8 - 8011dd2: e7c5 b.n 8011d60 <_vfprintf_r+0xc58> - 8011dd4: f006 030f and.w r3, r6, #15 - 8011dd8: 9a16 ldr r2, [sp, #88] ; 0x58 - 8011dda: 0936 lsrs r6, r6, #4 - 8011ddc: 5cd3 ldrb r3, [r2, r3] - 8011dde: f808 3d01 strb.w r3, [r8, #-1]! - 8011de2: ea46 7605 orr.w r6, r6, r5, lsl #28 - 8011de6: 092d lsrs r5, r5, #4 - 8011de8: ea56 0305 orrs.w r3, r6, r5 - 8011dec: d1f2 bne.n 8011dd4 <_vfprintf_r+0xccc> - 8011dee: e3b3 b.n 8012558 <_vfprintf_r+0x1450> - 8011df0: b933 cbnz r3, 8011e00 <_vfprintf_r+0xcf8> - 8011df2: f01b 0f01 tst.w fp, #1 - 8011df6: d003 beq.n 8011e00 <_vfprintf_r+0xcf8> - 8011df8: 2330 movs r3, #48 ; 0x30 - 8011dfa: f88d 3137 strb.w r3, [sp, #311] ; 0x137 - 8011dfe: e7a4 b.n 8011d4a <_vfprintf_r+0xc42> - 8011e00: f50d 789c add.w r8, sp, #312 ; 0x138 - 8011e04: e3a8 b.n 8012558 <_vfprintf_r+0x1450> - 8011e06: 9b06 ldr r3, [sp, #24] - 8011e08: 2b00 cmp r3, #0 - 8011e0a: f000 8373 beq.w 80124f4 <_vfprintf_r+0x13ec> - 8011e0e: 2000 movs r0, #0 - 8011e10: f88d 30d4 strb.w r3, [sp, #212] ; 0xd4 - 8011e14: f88d 006b strb.w r0, [sp, #107] ; 0x6b - 8011e18: 9607 str r6, [sp, #28] - 8011e1a: f7ff bb1e b.w 801145a <_vfprintf_r+0x352> - 8011e1e: 9e03 ldr r6, [sp, #12] - 8011e20: f7ff bb8d b.w 801153e <_vfprintf_r+0x436> - 8011e24: 2010 movs r0, #16 - 8011e26: 4402 add r2, r0 - 8011e28: 2b07 cmp r3, #7 - 8011e2a: e9cd 3223 strd r3, r2, [sp, #140] ; 0x8c - 8011e2e: 6060 str r0, [r4, #4] - 8011e30: dd08 ble.n 8011e44 <_vfprintf_r+0xd3c> - 8011e32: aa22 add r2, sp, #136 ; 0x88 - 8011e34: 4649 mov r1, r9 - 8011e36: 4650 mov r0, sl - 8011e38: f002 fbb9 bl 80145ae <__sprint_r> - 8011e3c: 2800 cmp r0, #0 - 8011e3e: f040 8337 bne.w 80124b0 <_vfprintf_r+0x13a8> - 8011e42: a925 add r1, sp, #148 ; 0x94 - 8011e44: 3f10 subs r7, #16 - 8011e46: 460c mov r4, r1 - 8011e48: e4f3 b.n 8011832 <_vfprintf_r+0x72a> - 8011e4a: 460c mov r4, r1 - 8011e4c: e50c b.n 8011868 <_vfprintf_r+0x760> - 8011e4e: aa22 add r2, sp, #136 ; 0x88 - 8011e50: 4649 mov r1, r9 - 8011e52: 4650 mov r0, sl - 8011e54: f002 fbab bl 80145ae <__sprint_r> - 8011e58: 2800 cmp r0, #0 - 8011e5a: f040 8329 bne.w 80124b0 <_vfprintf_r+0x13a8> - 8011e5e: ac25 add r4, sp, #148 ; 0x94 - 8011e60: e514 b.n 801188c <_vfprintf_r+0x784> - 8011e62: aa22 add r2, sp, #136 ; 0x88 - 8011e64: 4649 mov r1, r9 - 8011e66: 4650 mov r0, sl - 8011e68: f002 fba1 bl 80145ae <__sprint_r> - 8011e6c: 2800 cmp r0, #0 - 8011e6e: f040 831f bne.w 80124b0 <_vfprintf_r+0x13a8> - 8011e72: ac25 add r4, sp, #148 ; 0x94 - 8011e74: e51a b.n 80118ac <_vfprintf_r+0x7a4> - 8011e76: 2010 movs r0, #16 - 8011e78: 4402 add r2, r0 - 8011e7a: 2b07 cmp r3, #7 - 8011e7c: e9cd 3223 strd r3, r2, [sp, #140] ; 0x8c - 8011e80: 6060 str r0, [r4, #4] - 8011e82: dd08 ble.n 8011e96 <_vfprintf_r+0xd8e> - 8011e84: aa22 add r2, sp, #136 ; 0x88 - 8011e86: 4649 mov r1, r9 - 8011e88: 4650 mov r0, sl - 8011e8a: f002 fb90 bl 80145ae <__sprint_r> - 8011e8e: 2800 cmp r0, #0 - 8011e90: f040 830e bne.w 80124b0 <_vfprintf_r+0x13a8> - 8011e94: a925 add r1, sp, #148 ; 0x94 - 8011e96: 3f10 subs r7, #16 - 8011e98: 460c mov r4, r1 - 8011e9a: e50f b.n 80118bc <_vfprintf_r+0x7b4> - 8011e9c: 460c mov r4, r1 - 8011e9e: e528 b.n 80118f2 <_vfprintf_r+0x7ea> - 8011ea0: 2010 movs r0, #16 - 8011ea2: 4402 add r2, r0 - 8011ea4: 2b07 cmp r3, #7 - 8011ea6: e9cd 3223 strd r3, r2, [sp, #140] ; 0x8c - 8011eaa: 6060 str r0, [r4, #4] - 8011eac: dd08 ble.n 8011ec0 <_vfprintf_r+0xdb8> - 8011eae: aa22 add r2, sp, #136 ; 0x88 - 8011eb0: 4649 mov r1, r9 - 8011eb2: 4650 mov r0, sl - 8011eb4: f002 fb7b bl 80145ae <__sprint_r> - 8011eb8: 2800 cmp r0, #0 - 8011eba: f040 82f9 bne.w 80124b0 <_vfprintf_r+0x13a8> - 8011ebe: a925 add r1, sp, #148 ; 0x94 - 8011ec0: 3e10 subs r6, #16 - 8011ec2: 460c mov r4, r1 - 8011ec4: e528 b.n 8011918 <_vfprintf_r+0x810> - 8011ec6: 460c mov r4, r1 - 8011ec8: e540 b.n 801194c <_vfprintf_r+0x844> - 8011eca: bf00 nop - 8011ecc: 08018bf8 .word 0x08018bf8 - 8011ed0: 08018c09 .word 0x08018c09 - 8011ed4: 9b06 ldr r3, [sp, #24] - 8011ed6: 2b65 cmp r3, #101 ; 0x65 - 8011ed8: f340 8232 ble.w 8012340 <_vfprintf_r+0x1238> - 8011edc: e9dd 010c ldrd r0, r1, [sp, #48] ; 0x30 - 8011ee0: 2200 movs r2, #0 - 8011ee2: 2300 movs r3, #0 - 8011ee4: f7ee fe00 bl 8000ae8 <__aeabi_dcmpeq> - 8011ee8: 2800 cmp r0, #0 - 8011eea: d068 beq.n 8011fbe <_vfprintf_r+0xeb6> - 8011eec: 4b6d ldr r3, [pc, #436] ; (80120a4 <_vfprintf_r+0xf9c>) - 8011eee: 6023 str r3, [r4, #0] - 8011ef0: 2301 movs r3, #1 - 8011ef2: 441e add r6, r3 - 8011ef4: 6063 str r3, [r4, #4] - 8011ef6: 9b23 ldr r3, [sp, #140] ; 0x8c - 8011ef8: 9624 str r6, [sp, #144] ; 0x90 - 8011efa: 3301 adds r3, #1 - 8011efc: 2b07 cmp r3, #7 - 8011efe: 9323 str r3, [sp, #140] ; 0x8c - 8011f00: dc37 bgt.n 8011f72 <_vfprintf_r+0xe6a> - 8011f02: 3408 adds r4, #8 - 8011f04: 9b1c ldr r3, [sp, #112] ; 0x70 - 8011f06: 9a05 ldr r2, [sp, #20] - 8011f08: 4293 cmp r3, r2 - 8011f0a: db03 blt.n 8011f14 <_vfprintf_r+0xe0c> - 8011f0c: f01b 0f01 tst.w fp, #1 - 8011f10: f43f ad2e beq.w 8011970 <_vfprintf_r+0x868> - 8011f14: 9b13 ldr r3, [sp, #76] ; 0x4c - 8011f16: 6023 str r3, [r4, #0] - 8011f18: 9b0e ldr r3, [sp, #56] ; 0x38 - 8011f1a: 9a0e ldr r2, [sp, #56] ; 0x38 - 8011f1c: 6063 str r3, [r4, #4] - 8011f1e: 9b24 ldr r3, [sp, #144] ; 0x90 - 8011f20: 4413 add r3, r2 - 8011f22: 9324 str r3, [sp, #144] ; 0x90 - 8011f24: 9b23 ldr r3, [sp, #140] ; 0x8c - 8011f26: 3301 adds r3, #1 - 8011f28: 2b07 cmp r3, #7 - 8011f2a: 9323 str r3, [sp, #140] ; 0x8c - 8011f2c: dc2b bgt.n 8011f86 <_vfprintf_r+0xe7e> - 8011f2e: 3408 adds r4, #8 - 8011f30: 9b05 ldr r3, [sp, #20] - 8011f32: 1e5d subs r5, r3, #1 - 8011f34: 2d00 cmp r5, #0 - 8011f36: f77f ad1b ble.w 8011970 <_vfprintf_r+0x868> - 8011f3a: 4e5b ldr r6, [pc, #364] ; (80120a8 <_vfprintf_r+0xfa0>) - 8011f3c: 2710 movs r7, #16 - 8011f3e: e9dd 3223 ldrd r3, r2, [sp, #140] ; 0x8c - 8011f42: 2d10 cmp r5, #16 - 8011f44: f103 0301 add.w r3, r3, #1 - 8011f48: f104 0108 add.w r1, r4, #8 - 8011f4c: 6026 str r6, [r4, #0] - 8011f4e: dc24 bgt.n 8011f9a <_vfprintf_r+0xe92> - 8011f50: 442a add r2, r5 - 8011f52: 6065 str r5, [r4, #4] - 8011f54: 9224 str r2, [sp, #144] ; 0x90 - 8011f56: 2b07 cmp r3, #7 - 8011f58: 9323 str r3, [sp, #140] ; 0x8c - 8011f5a: f340 8288 ble.w 801246e <_vfprintf_r+0x1366> - 8011f5e: aa22 add r2, sp, #136 ; 0x88 - 8011f60: 4649 mov r1, r9 - 8011f62: 4650 mov r0, sl - 8011f64: f002 fb23 bl 80145ae <__sprint_r> - 8011f68: 2800 cmp r0, #0 - 8011f6a: f040 82a1 bne.w 80124b0 <_vfprintf_r+0x13a8> - 8011f6e: ac25 add r4, sp, #148 ; 0x94 - 8011f70: e4fe b.n 8011970 <_vfprintf_r+0x868> - 8011f72: aa22 add r2, sp, #136 ; 0x88 - 8011f74: 4649 mov r1, r9 - 8011f76: 4650 mov r0, sl - 8011f78: f002 fb19 bl 80145ae <__sprint_r> - 8011f7c: 2800 cmp r0, #0 - 8011f7e: f040 8297 bne.w 80124b0 <_vfprintf_r+0x13a8> - 8011f82: ac25 add r4, sp, #148 ; 0x94 - 8011f84: e7be b.n 8011f04 <_vfprintf_r+0xdfc> - 8011f86: aa22 add r2, sp, #136 ; 0x88 - 8011f88: 4649 mov r1, r9 - 8011f8a: 4650 mov r0, sl - 8011f8c: f002 fb0f bl 80145ae <__sprint_r> - 8011f90: 2800 cmp r0, #0 - 8011f92: f040 828d bne.w 80124b0 <_vfprintf_r+0x13a8> - 8011f96: ac25 add r4, sp, #148 ; 0x94 - 8011f98: e7ca b.n 8011f30 <_vfprintf_r+0xe28> - 8011f9a: 3210 adds r2, #16 - 8011f9c: 2b07 cmp r3, #7 - 8011f9e: e9cd 3223 strd r3, r2, [sp, #140] ; 0x8c - 8011fa2: 6067 str r7, [r4, #4] - 8011fa4: dd08 ble.n 8011fb8 <_vfprintf_r+0xeb0> - 8011fa6: aa22 add r2, sp, #136 ; 0x88 - 8011fa8: 4649 mov r1, r9 - 8011faa: 4650 mov r0, sl - 8011fac: f002 faff bl 80145ae <__sprint_r> - 8011fb0: 2800 cmp r0, #0 - 8011fb2: f040 827d bne.w 80124b0 <_vfprintf_r+0x13a8> - 8011fb6: a925 add r1, sp, #148 ; 0x94 - 8011fb8: 3d10 subs r5, #16 - 8011fba: 460c mov r4, r1 - 8011fbc: e7bf b.n 8011f3e <_vfprintf_r+0xe36> - 8011fbe: 9b1c ldr r3, [sp, #112] ; 0x70 - 8011fc0: 2b00 cmp r3, #0 - 8011fc2: dc73 bgt.n 80120ac <_vfprintf_r+0xfa4> - 8011fc4: 4b37 ldr r3, [pc, #220] ; (80120a4 <_vfprintf_r+0xf9c>) - 8011fc6: 6023 str r3, [r4, #0] - 8011fc8: 2301 movs r3, #1 - 8011fca: 441e add r6, r3 - 8011fcc: 6063 str r3, [r4, #4] - 8011fce: 9b23 ldr r3, [sp, #140] ; 0x8c - 8011fd0: 9624 str r6, [sp, #144] ; 0x90 - 8011fd2: 3301 adds r3, #1 - 8011fd4: 2b07 cmp r3, #7 - 8011fd6: 9323 str r3, [sp, #140] ; 0x8c - 8011fd8: dc3d bgt.n 8012056 <_vfprintf_r+0xf4e> - 8011fda: 3408 adds r4, #8 - 8011fdc: 9905 ldr r1, [sp, #20] - 8011fde: 9a1c ldr r2, [sp, #112] ; 0x70 - 8011fe0: 9b24 ldr r3, [sp, #144] ; 0x90 - 8011fe2: 430a orrs r2, r1 - 8011fe4: f00b 0101 and.w r1, fp, #1 - 8011fe8: 430a orrs r2, r1 - 8011fea: f43f acc1 beq.w 8011970 <_vfprintf_r+0x868> - 8011fee: 9a13 ldr r2, [sp, #76] ; 0x4c - 8011ff0: 6022 str r2, [r4, #0] - 8011ff2: 9a0e ldr r2, [sp, #56] ; 0x38 - 8011ff4: 6062 str r2, [r4, #4] - 8011ff6: 4413 add r3, r2 - 8011ff8: 9324 str r3, [sp, #144] ; 0x90 - 8011ffa: 9b23 ldr r3, [sp, #140] ; 0x8c - 8011ffc: 3301 adds r3, #1 - 8011ffe: 2b07 cmp r3, #7 - 8012000: 9323 str r3, [sp, #140] ; 0x8c - 8012002: dc32 bgt.n 801206a <_vfprintf_r+0xf62> - 8012004: 3408 adds r4, #8 - 8012006: 9d1c ldr r5, [sp, #112] ; 0x70 - 8012008: 2d00 cmp r5, #0 - 801200a: da1b bge.n 8012044 <_vfprintf_r+0xf3c> - 801200c: 4e26 ldr r6, [pc, #152] ; (80120a8 <_vfprintf_r+0xfa0>) - 801200e: 426d negs r5, r5 - 8012010: 4623 mov r3, r4 - 8012012: 2710 movs r7, #16 - 8012014: e9dd 2123 ldrd r2, r1, [sp, #140] ; 0x8c - 8012018: 2d10 cmp r5, #16 - 801201a: f102 0201 add.w r2, r2, #1 - 801201e: f104 0408 add.w r4, r4, #8 - 8012022: 601e str r6, [r3, #0] - 8012024: dc2b bgt.n 801207e <_vfprintf_r+0xf76> - 8012026: 605d str r5, [r3, #4] - 8012028: 2a07 cmp r2, #7 - 801202a: 440d add r5, r1 - 801202c: e9cd 2523 strd r2, r5, [sp, #140] ; 0x8c - 8012030: dd08 ble.n 8012044 <_vfprintf_r+0xf3c> - 8012032: aa22 add r2, sp, #136 ; 0x88 - 8012034: 4649 mov r1, r9 - 8012036: 4650 mov r0, sl - 8012038: f002 fab9 bl 80145ae <__sprint_r> - 801203c: 2800 cmp r0, #0 - 801203e: f040 8237 bne.w 80124b0 <_vfprintf_r+0x13a8> - 8012042: ac25 add r4, sp, #148 ; 0x94 - 8012044: 9b05 ldr r3, [sp, #20] - 8012046: 9a05 ldr r2, [sp, #20] - 8012048: 6063 str r3, [r4, #4] - 801204a: 9b24 ldr r3, [sp, #144] ; 0x90 - 801204c: f8c4 8000 str.w r8, [r4] - 8012050: 4413 add r3, r2 - 8012052: 9324 str r3, [sp, #144] ; 0x90 - 8012054: e485 b.n 8011962 <_vfprintf_r+0x85a> - 8012056: aa22 add r2, sp, #136 ; 0x88 - 8012058: 4649 mov r1, r9 - 801205a: 4650 mov r0, sl - 801205c: f002 faa7 bl 80145ae <__sprint_r> - 8012060: 2800 cmp r0, #0 - 8012062: f040 8225 bne.w 80124b0 <_vfprintf_r+0x13a8> - 8012066: ac25 add r4, sp, #148 ; 0x94 - 8012068: e7b8 b.n 8011fdc <_vfprintf_r+0xed4> - 801206a: aa22 add r2, sp, #136 ; 0x88 - 801206c: 4649 mov r1, r9 - 801206e: 4650 mov r0, sl - 8012070: f002 fa9d bl 80145ae <__sprint_r> - 8012074: 2800 cmp r0, #0 - 8012076: f040 821b bne.w 80124b0 <_vfprintf_r+0x13a8> - 801207a: ac25 add r4, sp, #148 ; 0x94 - 801207c: e7c3 b.n 8012006 <_vfprintf_r+0xefe> - 801207e: 3110 adds r1, #16 - 8012080: 2a07 cmp r2, #7 - 8012082: e9cd 2123 strd r2, r1, [sp, #140] ; 0x8c - 8012086: 605f str r7, [r3, #4] - 8012088: dd08 ble.n 801209c <_vfprintf_r+0xf94> - 801208a: aa22 add r2, sp, #136 ; 0x88 - 801208c: 4649 mov r1, r9 - 801208e: 4650 mov r0, sl - 8012090: f002 fa8d bl 80145ae <__sprint_r> - 8012094: 2800 cmp r0, #0 - 8012096: f040 820b bne.w 80124b0 <_vfprintf_r+0x13a8> - 801209a: ac25 add r4, sp, #148 ; 0x94 - 801209c: 3d10 subs r5, #16 - 801209e: 4623 mov r3, r4 - 80120a0: e7b8 b.n 8012014 <_vfprintf_r+0xf0c> - 80120a2: bf00 nop - 80120a4: 08018c1a .word 0x08018c1a - 80120a8: 08018c2c .word 0x08018c2c - 80120ac: 9f05 ldr r7, [sp, #20] - 80120ae: 42af cmp r7, r5 - 80120b0: bfa8 it ge - 80120b2: 462f movge r7, r5 - 80120b4: 2f00 cmp r7, #0 - 80120b6: dd09 ble.n 80120cc <_vfprintf_r+0xfc4> - 80120b8: 9b23 ldr r3, [sp, #140] ; 0x8c - 80120ba: 3301 adds r3, #1 - 80120bc: 443e add r6, r7 - 80120be: 2b07 cmp r3, #7 - 80120c0: e9c4 8700 strd r8, r7, [r4] - 80120c4: 9624 str r6, [sp, #144] ; 0x90 - 80120c6: 9323 str r3, [sp, #140] ; 0x8c - 80120c8: dc75 bgt.n 80121b6 <_vfprintf_r+0x10ae> - 80120ca: 3408 adds r4, #8 - 80120cc: 2f00 cmp r7, #0 - 80120ce: bfac ite ge - 80120d0: 1bee subge r6, r5, r7 - 80120d2: 462e movlt r6, r5 - 80120d4: 2e00 cmp r6, #0 - 80120d6: dd18 ble.n 801210a <_vfprintf_r+0x1002> - 80120d8: 4f98 ldr r7, [pc, #608] ; (801233c <_vfprintf_r+0x1234>) - 80120da: 6027 str r7, [r4, #0] - 80120dc: e9dd 3223 ldrd r3, r2, [sp, #140] ; 0x8c - 80120e0: 2e10 cmp r6, #16 - 80120e2: f103 0301 add.w r3, r3, #1 - 80120e6: f104 0108 add.w r1, r4, #8 - 80120ea: dc6e bgt.n 80121ca <_vfprintf_r+0x10c2> - 80120ec: 6066 str r6, [r4, #4] - 80120ee: 2b07 cmp r3, #7 - 80120f0: 4416 add r6, r2 - 80120f2: e9cd 3623 strd r3, r6, [sp, #140] ; 0x8c - 80120f6: dd7b ble.n 80121f0 <_vfprintf_r+0x10e8> - 80120f8: aa22 add r2, sp, #136 ; 0x88 - 80120fa: 4649 mov r1, r9 - 80120fc: 4650 mov r0, sl - 80120fe: f002 fa56 bl 80145ae <__sprint_r> - 8012102: 2800 cmp r0, #0 - 8012104: f040 81d4 bne.w 80124b0 <_vfprintf_r+0x13a8> - 8012108: ac25 add r4, sp, #148 ; 0x94 - 801210a: f41b 6f80 tst.w fp, #1024 ; 0x400 - 801210e: 4445 add r5, r8 - 8012110: d00a beq.n 8012128 <_vfprintf_r+0x1020> - 8012112: 9b09 ldr r3, [sp, #36] ; 0x24 - 8012114: 2b00 cmp r3, #0 - 8012116: d16d bne.n 80121f4 <_vfprintf_r+0x10ec> - 8012118: 9b08 ldr r3, [sp, #32] - 801211a: 2b00 cmp r3, #0 - 801211c: d16d bne.n 80121fa <_vfprintf_r+0x10f2> - 801211e: 9b05 ldr r3, [sp, #20] - 8012120: 4443 add r3, r8 - 8012122: 429d cmp r5, r3 - 8012124: bf28 it cs - 8012126: 461d movcs r5, r3 - 8012128: 9b1c ldr r3, [sp, #112] ; 0x70 - 801212a: 9a05 ldr r2, [sp, #20] - 801212c: 4293 cmp r3, r2 - 801212e: db02 blt.n 8012136 <_vfprintf_r+0x102e> - 8012130: f01b 0f01 tst.w fp, #1 - 8012134: d00e beq.n 8012154 <_vfprintf_r+0x104c> - 8012136: 9b13 ldr r3, [sp, #76] ; 0x4c - 8012138: 6023 str r3, [r4, #0] - 801213a: 9b0e ldr r3, [sp, #56] ; 0x38 - 801213c: 9a0e ldr r2, [sp, #56] ; 0x38 - 801213e: 6063 str r3, [r4, #4] - 8012140: 9b24 ldr r3, [sp, #144] ; 0x90 - 8012142: 4413 add r3, r2 - 8012144: 9324 str r3, [sp, #144] ; 0x90 - 8012146: 9b23 ldr r3, [sp, #140] ; 0x8c - 8012148: 3301 adds r3, #1 - 801214a: 2b07 cmp r3, #7 - 801214c: 9323 str r3, [sp, #140] ; 0x8c - 801214e: f300 80cf bgt.w 80122f0 <_vfprintf_r+0x11e8> - 8012152: 3408 adds r4, #8 - 8012154: 9b05 ldr r3, [sp, #20] - 8012156: 9e1c ldr r6, [sp, #112] ; 0x70 - 8012158: eb08 0203 add.w r2, r8, r3 - 801215c: 1b9e subs r6, r3, r6 - 801215e: 1b52 subs r2, r2, r5 - 8012160: 4296 cmp r6, r2 - 8012162: bfa8 it ge - 8012164: 4616 movge r6, r2 - 8012166: 2e00 cmp r6, #0 - 8012168: dd0b ble.n 8012182 <_vfprintf_r+0x107a> - 801216a: 9b24 ldr r3, [sp, #144] ; 0x90 - 801216c: 4433 add r3, r6 - 801216e: 9324 str r3, [sp, #144] ; 0x90 - 8012170: 9b23 ldr r3, [sp, #140] ; 0x8c - 8012172: 3301 adds r3, #1 - 8012174: 2b07 cmp r3, #7 - 8012176: e9c4 5600 strd r5, r6, [r4] - 801217a: 9323 str r3, [sp, #140] ; 0x8c - 801217c: f300 80c2 bgt.w 8012304 <_vfprintf_r+0x11fc> - 8012180: 3408 adds r4, #8 - 8012182: 9d1c ldr r5, [sp, #112] ; 0x70 - 8012184: 9b05 ldr r3, [sp, #20] - 8012186: 2e00 cmp r6, #0 - 8012188: eba3 0505 sub.w r5, r3, r5 - 801218c: bfa8 it ge - 801218e: 1bad subge r5, r5, r6 - 8012190: 2d00 cmp r5, #0 - 8012192: f77f abed ble.w 8011970 <_vfprintf_r+0x868> - 8012196: 4e69 ldr r6, [pc, #420] ; (801233c <_vfprintf_r+0x1234>) - 8012198: 2710 movs r7, #16 - 801219a: e9dd 3223 ldrd r3, r2, [sp, #140] ; 0x8c - 801219e: 2d10 cmp r5, #16 - 80121a0: f103 0301 add.w r3, r3, #1 - 80121a4: f104 0108 add.w r1, r4, #8 - 80121a8: 6026 str r6, [r4, #0] - 80121aa: f300 80b5 bgt.w 8012318 <_vfprintf_r+0x1210> - 80121ae: 6065 str r5, [r4, #4] - 80121b0: 4415 add r5, r2 - 80121b2: 9524 str r5, [sp, #144] ; 0x90 - 80121b4: e6cf b.n 8011f56 <_vfprintf_r+0xe4e> - 80121b6: aa22 add r2, sp, #136 ; 0x88 - 80121b8: 4649 mov r1, r9 - 80121ba: 4650 mov r0, sl - 80121bc: f002 f9f7 bl 80145ae <__sprint_r> - 80121c0: 2800 cmp r0, #0 - 80121c2: f040 8175 bne.w 80124b0 <_vfprintf_r+0x13a8> - 80121c6: ac25 add r4, sp, #148 ; 0x94 - 80121c8: e780 b.n 80120cc <_vfprintf_r+0xfc4> - 80121ca: 2010 movs r0, #16 - 80121cc: 4402 add r2, r0 - 80121ce: 2b07 cmp r3, #7 - 80121d0: e9cd 3223 strd r3, r2, [sp, #140] ; 0x8c - 80121d4: 6060 str r0, [r4, #4] - 80121d6: dd08 ble.n 80121ea <_vfprintf_r+0x10e2> - 80121d8: aa22 add r2, sp, #136 ; 0x88 - 80121da: 4649 mov r1, r9 - 80121dc: 4650 mov r0, sl - 80121de: f002 f9e6 bl 80145ae <__sprint_r> - 80121e2: 2800 cmp r0, #0 - 80121e4: f040 8164 bne.w 80124b0 <_vfprintf_r+0x13a8> - 80121e8: a925 add r1, sp, #148 ; 0x94 - 80121ea: 3e10 subs r6, #16 - 80121ec: 460c mov r4, r1 - 80121ee: e774 b.n 80120da <_vfprintf_r+0xfd2> - 80121f0: 460c mov r4, r1 - 80121f2: e78a b.n 801210a <_vfprintf_r+0x1002> - 80121f4: 9b08 ldr r3, [sp, #32] - 80121f6: 2b00 cmp r3, #0 - 80121f8: d04a beq.n 8012290 <_vfprintf_r+0x1188> - 80121fa: 9b08 ldr r3, [sp, #32] - 80121fc: 3b01 subs r3, #1 - 80121fe: 9308 str r3, [sp, #32] - 8012200: 9b14 ldr r3, [sp, #80] ; 0x50 - 8012202: 6023 str r3, [r4, #0] - 8012204: 9b12 ldr r3, [sp, #72] ; 0x48 - 8012206: 9a12 ldr r2, [sp, #72] ; 0x48 - 8012208: 6063 str r3, [r4, #4] - 801220a: 9b24 ldr r3, [sp, #144] ; 0x90 - 801220c: 4413 add r3, r2 - 801220e: 9324 str r3, [sp, #144] ; 0x90 - 8012210: 9b23 ldr r3, [sp, #140] ; 0x8c - 8012212: 3301 adds r3, #1 - 8012214: 2b07 cmp r3, #7 - 8012216: 9323 str r3, [sp, #140] ; 0x8c - 8012218: dc41 bgt.n 801229e <_vfprintf_r+0x1196> - 801221a: 3408 adds r4, #8 - 801221c: 9b05 ldr r3, [sp, #20] - 801221e: 9a0a ldr r2, [sp, #40] ; 0x28 - 8012220: eb08 0703 add.w r7, r8, r3 - 8012224: 1b7b subs r3, r7, r5 - 8012226: 7817 ldrb r7, [r2, #0] - 8012228: 429f cmp r7, r3 - 801222a: bfa8 it ge - 801222c: 461f movge r7, r3 - 801222e: 2f00 cmp r7, #0 - 8012230: dd0a ble.n 8012248 <_vfprintf_r+0x1140> - 8012232: 9b24 ldr r3, [sp, #144] ; 0x90 - 8012234: 443b add r3, r7 - 8012236: 9324 str r3, [sp, #144] ; 0x90 - 8012238: 9b23 ldr r3, [sp, #140] ; 0x8c - 801223a: 3301 adds r3, #1 - 801223c: 2b07 cmp r3, #7 - 801223e: e9c4 5700 strd r5, r7, [r4] - 8012242: 9323 str r3, [sp, #140] ; 0x8c - 8012244: dc35 bgt.n 80122b2 <_vfprintf_r+0x11aa> - 8012246: 3408 adds r4, #8 - 8012248: 9b0a ldr r3, [sp, #40] ; 0x28 - 801224a: 781e ldrb r6, [r3, #0] - 801224c: 2f00 cmp r7, #0 - 801224e: bfa8 it ge - 8012250: 1bf6 subge r6, r6, r7 - 8012252: 2e00 cmp r6, #0 - 8012254: dd18 ble.n 8012288 <_vfprintf_r+0x1180> - 8012256: e9dd 3223 ldrd r3, r2, [sp, #140] ; 0x8c - 801225a: 4838 ldr r0, [pc, #224] ; (801233c <_vfprintf_r+0x1234>) - 801225c: 6020 str r0, [r4, #0] - 801225e: 2e10 cmp r6, #16 - 8012260: f103 0301 add.w r3, r3, #1 - 8012264: f104 0108 add.w r1, r4, #8 - 8012268: dc2d bgt.n 80122c6 <_vfprintf_r+0x11be> - 801226a: 6066 str r6, [r4, #4] - 801226c: 2b07 cmp r3, #7 - 801226e: 4416 add r6, r2 - 8012270: e9cd 3623 strd r3, r6, [sp, #140] ; 0x8c - 8012274: dd3a ble.n 80122ec <_vfprintf_r+0x11e4> - 8012276: aa22 add r2, sp, #136 ; 0x88 - 8012278: 4649 mov r1, r9 - 801227a: 4650 mov r0, sl - 801227c: f002 f997 bl 80145ae <__sprint_r> - 8012280: 2800 cmp r0, #0 - 8012282: f040 8115 bne.w 80124b0 <_vfprintf_r+0x13a8> - 8012286: ac25 add r4, sp, #148 ; 0x94 - 8012288: 9b0a ldr r3, [sp, #40] ; 0x28 - 801228a: 781b ldrb r3, [r3, #0] - 801228c: 441d add r5, r3 - 801228e: e740 b.n 8012112 <_vfprintf_r+0x100a> - 8012290: 9b0a ldr r3, [sp, #40] ; 0x28 - 8012292: 3b01 subs r3, #1 - 8012294: 930a str r3, [sp, #40] ; 0x28 - 8012296: 9b09 ldr r3, [sp, #36] ; 0x24 - 8012298: 3b01 subs r3, #1 - 801229a: 9309 str r3, [sp, #36] ; 0x24 - 801229c: e7b0 b.n 8012200 <_vfprintf_r+0x10f8> - 801229e: aa22 add r2, sp, #136 ; 0x88 - 80122a0: 4649 mov r1, r9 - 80122a2: 4650 mov r0, sl - 80122a4: f002 f983 bl 80145ae <__sprint_r> - 80122a8: 2800 cmp r0, #0 - 80122aa: f040 8101 bne.w 80124b0 <_vfprintf_r+0x13a8> - 80122ae: ac25 add r4, sp, #148 ; 0x94 - 80122b0: e7b4 b.n 801221c <_vfprintf_r+0x1114> - 80122b2: aa22 add r2, sp, #136 ; 0x88 - 80122b4: 4649 mov r1, r9 - 80122b6: 4650 mov r0, sl - 80122b8: f002 f979 bl 80145ae <__sprint_r> - 80122bc: 2800 cmp r0, #0 - 80122be: f040 80f7 bne.w 80124b0 <_vfprintf_r+0x13a8> - 80122c2: ac25 add r4, sp, #148 ; 0x94 - 80122c4: e7c0 b.n 8012248 <_vfprintf_r+0x1140> - 80122c6: 2010 movs r0, #16 - 80122c8: 4402 add r2, r0 - 80122ca: 2b07 cmp r3, #7 - 80122cc: e9cd 3223 strd r3, r2, [sp, #140] ; 0x8c - 80122d0: 6060 str r0, [r4, #4] - 80122d2: dd08 ble.n 80122e6 <_vfprintf_r+0x11de> - 80122d4: aa22 add r2, sp, #136 ; 0x88 - 80122d6: 4649 mov r1, r9 - 80122d8: 4650 mov r0, sl - 80122da: f002 f968 bl 80145ae <__sprint_r> - 80122de: 2800 cmp r0, #0 - 80122e0: f040 80e6 bne.w 80124b0 <_vfprintf_r+0x13a8> - 80122e4: a925 add r1, sp, #148 ; 0x94 - 80122e6: 3e10 subs r6, #16 - 80122e8: 460c mov r4, r1 - 80122ea: e7b4 b.n 8012256 <_vfprintf_r+0x114e> - 80122ec: 460c mov r4, r1 - 80122ee: e7cb b.n 8012288 <_vfprintf_r+0x1180> - 80122f0: aa22 add r2, sp, #136 ; 0x88 - 80122f2: 4649 mov r1, r9 - 80122f4: 4650 mov r0, sl - 80122f6: f002 f95a bl 80145ae <__sprint_r> - 80122fa: 2800 cmp r0, #0 - 80122fc: f040 80d8 bne.w 80124b0 <_vfprintf_r+0x13a8> - 8012300: ac25 add r4, sp, #148 ; 0x94 - 8012302: e727 b.n 8012154 <_vfprintf_r+0x104c> - 8012304: aa22 add r2, sp, #136 ; 0x88 - 8012306: 4649 mov r1, r9 - 8012308: 4650 mov r0, sl - 801230a: f002 f950 bl 80145ae <__sprint_r> - 801230e: 2800 cmp r0, #0 - 8012310: f040 80ce bne.w 80124b0 <_vfprintf_r+0x13a8> - 8012314: ac25 add r4, sp, #148 ; 0x94 - 8012316: e734 b.n 8012182 <_vfprintf_r+0x107a> - 8012318: 3210 adds r2, #16 - 801231a: 2b07 cmp r3, #7 - 801231c: e9cd 3223 strd r3, r2, [sp, #140] ; 0x8c - 8012320: 6067 str r7, [r4, #4] - 8012322: dd08 ble.n 8012336 <_vfprintf_r+0x122e> - 8012324: aa22 add r2, sp, #136 ; 0x88 - 8012326: 4649 mov r1, r9 - 8012328: 4650 mov r0, sl - 801232a: f002 f940 bl 80145ae <__sprint_r> - 801232e: 2800 cmp r0, #0 - 8012330: f040 80be bne.w 80124b0 <_vfprintf_r+0x13a8> - 8012334: a925 add r1, sp, #148 ; 0x94 - 8012336: 3d10 subs r5, #16 - 8012338: 460c mov r4, r1 - 801233a: e72e b.n 801219a <_vfprintf_r+0x1092> - 801233c: 08018c2c .word 0x08018c2c - 8012340: 9a05 ldr r2, [sp, #20] - 8012342: 9b23 ldr r3, [sp, #140] ; 0x8c - 8012344: 2a01 cmp r2, #1 - 8012346: f106 0601 add.w r6, r6, #1 - 801234a: f103 0301 add.w r3, r3, #1 - 801234e: f104 0508 add.w r5, r4, #8 - 8012352: dc02 bgt.n 801235a <_vfprintf_r+0x1252> - 8012354: f01b 0f01 tst.w fp, #1 - 8012358: d07e beq.n 8012458 <_vfprintf_r+0x1350> - 801235a: 2201 movs r2, #1 - 801235c: 2b07 cmp r3, #7 - 801235e: e9cd 3623 strd r3, r6, [sp, #140] ; 0x8c - 8012362: f8c4 8000 str.w r8, [r4] - 8012366: 6062 str r2, [r4, #4] - 8012368: dd08 ble.n 801237c <_vfprintf_r+0x1274> - 801236a: aa22 add r2, sp, #136 ; 0x88 - 801236c: 4649 mov r1, r9 - 801236e: 4650 mov r0, sl - 8012370: f002 f91d bl 80145ae <__sprint_r> - 8012374: 2800 cmp r0, #0 - 8012376: f040 809b bne.w 80124b0 <_vfprintf_r+0x13a8> - 801237a: ad25 add r5, sp, #148 ; 0x94 - 801237c: 9b13 ldr r3, [sp, #76] ; 0x4c - 801237e: 602b str r3, [r5, #0] - 8012380: 9b0e ldr r3, [sp, #56] ; 0x38 - 8012382: 9a0e ldr r2, [sp, #56] ; 0x38 - 8012384: 606b str r3, [r5, #4] - 8012386: 9b24 ldr r3, [sp, #144] ; 0x90 - 8012388: 4413 add r3, r2 - 801238a: 9324 str r3, [sp, #144] ; 0x90 - 801238c: 9b23 ldr r3, [sp, #140] ; 0x8c - 801238e: 3301 adds r3, #1 - 8012390: 2b07 cmp r3, #7 - 8012392: 9323 str r3, [sp, #140] ; 0x8c - 8012394: dc32 bgt.n 80123fc <_vfprintf_r+0x12f4> - 8012396: 3508 adds r5, #8 - 8012398: 9b05 ldr r3, [sp, #20] - 801239a: e9dd 010c ldrd r0, r1, [sp, #48] ; 0x30 - 801239e: 1e5c subs r4, r3, #1 - 80123a0: 2200 movs r2, #0 - 80123a2: 2300 movs r3, #0 - 80123a4: f7ee fba0 bl 8000ae8 <__aeabi_dcmpeq> - 80123a8: 2800 cmp r0, #0 - 80123aa: d130 bne.n 801240e <_vfprintf_r+0x1306> - 80123ac: 9923 ldr r1, [sp, #140] ; 0x8c - 80123ae: 9b24 ldr r3, [sp, #144] ; 0x90 - 80123b0: 9a05 ldr r2, [sp, #20] - 80123b2: 3101 adds r1, #1 - 80123b4: 3b01 subs r3, #1 - 80123b6: f108 0001 add.w r0, r8, #1 - 80123ba: 4413 add r3, r2 - 80123bc: 2907 cmp r1, #7 - 80123be: e9c5 0400 strd r0, r4, [r5] - 80123c2: e9cd 1323 strd r1, r3, [sp, #140] ; 0x8c - 80123c6: dd50 ble.n 801246a <_vfprintf_r+0x1362> - 80123c8: aa22 add r2, sp, #136 ; 0x88 - 80123ca: 4649 mov r1, r9 - 80123cc: 4650 mov r0, sl - 80123ce: f002 f8ee bl 80145ae <__sprint_r> - 80123d2: 2800 cmp r0, #0 - 80123d4: d16c bne.n 80124b0 <_vfprintf_r+0x13a8> - 80123d6: ad25 add r5, sp, #148 ; 0x94 - 80123d8: ab1e add r3, sp, #120 ; 0x78 - 80123da: 602b str r3, [r5, #0] - 80123dc: 9b15 ldr r3, [sp, #84] ; 0x54 - 80123de: 9a15 ldr r2, [sp, #84] ; 0x54 - 80123e0: 606b str r3, [r5, #4] - 80123e2: 9b24 ldr r3, [sp, #144] ; 0x90 - 80123e4: 4413 add r3, r2 - 80123e6: 9324 str r3, [sp, #144] ; 0x90 - 80123e8: 9b23 ldr r3, [sp, #140] ; 0x8c - 80123ea: 3301 adds r3, #1 - 80123ec: 2b07 cmp r3, #7 - 80123ee: 9323 str r3, [sp, #140] ; 0x8c - 80123f0: f73f adb5 bgt.w 8011f5e <_vfprintf_r+0xe56> - 80123f4: f105 0408 add.w r4, r5, #8 - 80123f8: f7ff baba b.w 8011970 <_vfprintf_r+0x868> - 80123fc: aa22 add r2, sp, #136 ; 0x88 - 80123fe: 4649 mov r1, r9 - 8012400: 4650 mov r0, sl - 8012402: f002 f8d4 bl 80145ae <__sprint_r> - 8012406: 2800 cmp r0, #0 - 8012408: d152 bne.n 80124b0 <_vfprintf_r+0x13a8> - 801240a: ad25 add r5, sp, #148 ; 0x94 - 801240c: e7c4 b.n 8012398 <_vfprintf_r+0x1290> - 801240e: 2c00 cmp r4, #0 - 8012410: dde2 ble.n 80123d8 <_vfprintf_r+0x12d0> - 8012412: 4e58 ldr r6, [pc, #352] ; (8012574 <_vfprintf_r+0x146c>) - 8012414: 2710 movs r7, #16 - 8012416: e9dd 3223 ldrd r3, r2, [sp, #140] ; 0x8c - 801241a: 2c10 cmp r4, #16 - 801241c: f103 0301 add.w r3, r3, #1 - 8012420: f105 0108 add.w r1, r5, #8 - 8012424: 602e str r6, [r5, #0] - 8012426: dc07 bgt.n 8012438 <_vfprintf_r+0x1330> - 8012428: 606c str r4, [r5, #4] - 801242a: 2b07 cmp r3, #7 - 801242c: 4414 add r4, r2 - 801242e: e9cd 3423 strd r3, r4, [sp, #140] ; 0x8c - 8012432: dcc9 bgt.n 80123c8 <_vfprintf_r+0x12c0> - 8012434: 460d mov r5, r1 - 8012436: e7cf b.n 80123d8 <_vfprintf_r+0x12d0> - 8012438: 3210 adds r2, #16 - 801243a: 2b07 cmp r3, #7 - 801243c: e9cd 3223 strd r3, r2, [sp, #140] ; 0x8c - 8012440: 606f str r7, [r5, #4] - 8012442: dd06 ble.n 8012452 <_vfprintf_r+0x134a> - 8012444: aa22 add r2, sp, #136 ; 0x88 - 8012446: 4649 mov r1, r9 - 8012448: 4650 mov r0, sl - 801244a: f002 f8b0 bl 80145ae <__sprint_r> - 801244e: bb78 cbnz r0, 80124b0 <_vfprintf_r+0x13a8> - 8012450: a925 add r1, sp, #148 ; 0x94 - 8012452: 3c10 subs r4, #16 - 8012454: 460d mov r5, r1 - 8012456: e7de b.n 8012416 <_vfprintf_r+0x130e> - 8012458: 2201 movs r2, #1 - 801245a: 2b07 cmp r3, #7 - 801245c: e9cd 3623 strd r3, r6, [sp, #140] ; 0x8c - 8012460: f8c4 8000 str.w r8, [r4] - 8012464: 6062 str r2, [r4, #4] - 8012466: ddb7 ble.n 80123d8 <_vfprintf_r+0x12d0> - 8012468: e7ae b.n 80123c8 <_vfprintf_r+0x12c0> - 801246a: 3508 adds r5, #8 - 801246c: e7b4 b.n 80123d8 <_vfprintf_r+0x12d0> - 801246e: 460c mov r4, r1 - 8012470: f7ff ba7e b.w 8011970 <_vfprintf_r+0x868> - 8012474: e9dd 3210 ldrd r3, r2, [sp, #64] ; 0x40 - 8012478: 1a9d subs r5, r3, r2 - 801247a: 2d00 cmp r5, #0 - 801247c: f77f aa7c ble.w 8011978 <_vfprintf_r+0x870> - 8012480: 4e3d ldr r6, [pc, #244] ; (8012578 <_vfprintf_r+0x1470>) - 8012482: 2710 movs r7, #16 - 8012484: e9dd 3223 ldrd r3, r2, [sp, #140] ; 0x8c - 8012488: 2d10 cmp r5, #16 - 801248a: f103 0301 add.w r3, r3, #1 - 801248e: 6026 str r6, [r4, #0] - 8012490: dc18 bgt.n 80124c4 <_vfprintf_r+0x13bc> - 8012492: 6065 str r5, [r4, #4] - 8012494: 2b07 cmp r3, #7 - 8012496: 4415 add r5, r2 - 8012498: e9cd 3523 strd r3, r5, [sp, #140] ; 0x8c - 801249c: f77f aa6c ble.w 8011978 <_vfprintf_r+0x870> - 80124a0: aa22 add r2, sp, #136 ; 0x88 - 80124a2: 4649 mov r1, r9 - 80124a4: 4650 mov r0, sl - 80124a6: f002 f882 bl 80145ae <__sprint_r> - 80124aa: 2800 cmp r0, #0 - 80124ac: f43f aa64 beq.w 8011978 <_vfprintf_r+0x870> - 80124b0: 9b03 ldr r3, [sp, #12] - 80124b2: 2b00 cmp r3, #0 - 80124b4: f43f a879 beq.w 80115aa <_vfprintf_r+0x4a2> - 80124b8: 4619 mov r1, r3 - 80124ba: 4650 mov r0, sl - 80124bc: f001 f8fa bl 80136b4 <_free_r> - 80124c0: f7ff b873 b.w 80115aa <_vfprintf_r+0x4a2> - 80124c4: 3210 adds r2, #16 - 80124c6: 2b07 cmp r3, #7 - 80124c8: e9cd 3223 strd r3, r2, [sp, #140] ; 0x8c - 80124cc: 6067 str r7, [r4, #4] - 80124ce: dc02 bgt.n 80124d6 <_vfprintf_r+0x13ce> - 80124d0: 3408 adds r4, #8 - 80124d2: 3d10 subs r5, #16 - 80124d4: e7d6 b.n 8012484 <_vfprintf_r+0x137c> - 80124d6: aa22 add r2, sp, #136 ; 0x88 - 80124d8: 4649 mov r1, r9 - 80124da: 4650 mov r0, sl - 80124dc: f002 f867 bl 80145ae <__sprint_r> - 80124e0: 2800 cmp r0, #0 - 80124e2: d1e5 bne.n 80124b0 <_vfprintf_r+0x13a8> - 80124e4: ac25 add r4, sp, #148 ; 0x94 - 80124e6: e7f4 b.n 80124d2 <_vfprintf_r+0x13ca> - 80124e8: 9903 ldr r1, [sp, #12] - 80124ea: 4650 mov r0, sl - 80124ec: f001 f8e2 bl 80136b4 <_free_r> - 80124f0: f7ff ba5a b.w 80119a8 <_vfprintf_r+0x8a0> - 80124f4: 9b24 ldr r3, [sp, #144] ; 0x90 - 80124f6: b91b cbnz r3, 8012500 <_vfprintf_r+0x13f8> - 80124f8: 2300 movs r3, #0 - 80124fa: 9323 str r3, [sp, #140] ; 0x8c - 80124fc: f7ff b855 b.w 80115aa <_vfprintf_r+0x4a2> - 8012500: aa22 add r2, sp, #136 ; 0x88 - 8012502: 4649 mov r1, r9 - 8012504: 4650 mov r0, sl - 8012506: f002 f852 bl 80145ae <__sprint_r> - 801250a: 2800 cmp r0, #0 - 801250c: d0f4 beq.n 80124f8 <_vfprintf_r+0x13f0> - 801250e: f7ff b84c b.w 80115aa <_vfprintf_r+0x4a2> - 8012512: ea56 0205 orrs.w r2, r6, r5 - 8012516: 465f mov r7, fp - 8012518: f43f ab70 beq.w 8011bfc <_vfprintf_r+0xaf4> - 801251c: 2b01 cmp r3, #1 - 801251e: f43f ac0d beq.w 8011d3c <_vfprintf_r+0xc34> - 8012522: 2b02 cmp r3, #2 - 8012524: f50d 789c add.w r8, sp, #312 ; 0x138 - 8012528: f43f ac54 beq.w 8011dd4 <_vfprintf_r+0xccc> - 801252c: f006 0307 and.w r3, r6, #7 - 8012530: 08f6 lsrs r6, r6, #3 - 8012532: ea46 7645 orr.w r6, r6, r5, lsl #29 - 8012536: 08ed lsrs r5, r5, #3 - 8012538: 3330 adds r3, #48 ; 0x30 - 801253a: ea56 0105 orrs.w r1, r6, r5 - 801253e: 4642 mov r2, r8 - 8012540: f808 3d01 strb.w r3, [r8, #-1]! - 8012544: d1f2 bne.n 801252c <_vfprintf_r+0x1424> - 8012546: 07f8 lsls r0, r7, #31 - 8012548: d506 bpl.n 8012558 <_vfprintf_r+0x1450> - 801254a: 2b30 cmp r3, #48 ; 0x30 - 801254c: d004 beq.n 8012558 <_vfprintf_r+0x1450> - 801254e: 2330 movs r3, #48 ; 0x30 - 8012550: f808 3c01 strb.w r3, [r8, #-1] - 8012554: f1a2 0802 sub.w r8, r2, #2 - 8012558: ab4e add r3, sp, #312 ; 0x138 - 801255a: eba3 0308 sub.w r3, r3, r8 - 801255e: 9e04 ldr r6, [sp, #16] - 8012560: 9304 str r3, [sp, #16] - 8012562: 2300 movs r3, #0 - 8012564: 46bb mov fp, r7 - 8012566: 9303 str r3, [sp, #12] - 8012568: e9cd 3308 strd r3, r3, [sp, #32] - 801256c: 461d mov r5, r3 - 801256e: f7ff b945 b.w 80117fc <_vfprintf_r+0x6f4> - 8012572: bf00 nop - 8012574: 08018c2c .word 0x08018c2c - 8012578: 08018c1c .word 0x08018c1c - -0801257c <__sbprintf>: - 801257c: b570 push {r4, r5, r6, lr} - 801257e: 460c mov r4, r1 - 8012580: 8989 ldrh r1, [r1, #12] - 8012582: f5ad 6d8e sub.w sp, sp, #1136 ; 0x470 - 8012586: f021 0102 bic.w r1, r1, #2 - 801258a: f8ad 1014 strh.w r1, [sp, #20] - 801258e: 6e61 ldr r1, [r4, #100] ; 0x64 - 8012590: 911b str r1, [sp, #108] ; 0x6c - 8012592: 89e1 ldrh r1, [r4, #14] - 8012594: f8ad 1016 strh.w r1, [sp, #22] - 8012598: 69e1 ldr r1, [r4, #28] - 801259a: 9109 str r1, [sp, #36] ; 0x24 - 801259c: 6a61 ldr r1, [r4, #36] ; 0x24 - 801259e: 910b str r1, [sp, #44] ; 0x2c - 80125a0: a91c add r1, sp, #112 ; 0x70 - 80125a2: 9102 str r1, [sp, #8] - 80125a4: 9106 str r1, [sp, #24] - 80125a6: f44f 6180 mov.w r1, #1024 ; 0x400 - 80125aa: 4606 mov r6, r0 - 80125ac: 9104 str r1, [sp, #16] - 80125ae: 9107 str r1, [sp, #28] - 80125b0: a818 add r0, sp, #96 ; 0x60 - 80125b2: 2100 movs r1, #0 - 80125b4: e9cd 3200 strd r3, r2, [sp] - 80125b8: 9108 str r1, [sp, #32] - 80125ba: f001 f95f bl 801387c <__retarget_lock_init_recursive> - 80125be: e9dd 3200 ldrd r3, r2, [sp] - 80125c2: a902 add r1, sp, #8 - 80125c4: 4630 mov r0, r6 - 80125c6: f7fe fd9f bl 8011108 <_vfprintf_r> - 80125ca: 1e05 subs r5, r0, #0 - 80125cc: db07 blt.n 80125de <__sbprintf+0x62> - 80125ce: a902 add r1, sp, #8 - 80125d0: 4630 mov r0, r6 - 80125d2: f000 ff73 bl 80134bc <_fflush_r> - 80125d6: 2800 cmp r0, #0 - 80125d8: bf18 it ne - 80125da: f04f 35ff movne.w r5, #4294967295 - 80125de: f8bd 3014 ldrh.w r3, [sp, #20] - 80125e2: 9818 ldr r0, [sp, #96] ; 0x60 - 80125e4: 065b lsls r3, r3, #25 - 80125e6: bf42 ittt mi - 80125e8: 89a3 ldrhmi r3, [r4, #12] - 80125ea: f043 0340 orrmi.w r3, r3, #64 ; 0x40 - 80125ee: 81a3 strhmi r3, [r4, #12] - 80125f0: f001 f945 bl 801387e <__retarget_lock_close_recursive> - 80125f4: 4628 mov r0, r5 - 80125f6: f50d 6d8e add.w sp, sp, #1136 ; 0x470 - 80125fa: bd70 pop {r4, r5, r6, pc} - -080125fc <__swsetup_r>: - 80125fc: b538 push {r3, r4, r5, lr} - 80125fe: 4b2a ldr r3, [pc, #168] ; (80126a8 <__swsetup_r+0xac>) - 8012600: 4605 mov r5, r0 - 8012602: 6818 ldr r0, [r3, #0] - 8012604: 460c mov r4, r1 - 8012606: b118 cbz r0, 8012610 <__swsetup_r+0x14> - 8012608: 6b83 ldr r3, [r0, #56] ; 0x38 - 801260a: b90b cbnz r3, 8012610 <__swsetup_r+0x14> - 801260c: f000 ffc2 bl 8013594 <__sinit> - 8012610: 89a3 ldrh r3, [r4, #12] - 8012612: f9b4 200c ldrsh.w r2, [r4, #12] - 8012616: 0718 lsls r0, r3, #28 - 8012618: d422 bmi.n 8012660 <__swsetup_r+0x64> - 801261a: 06d9 lsls r1, r3, #27 - 801261c: d407 bmi.n 801262e <__swsetup_r+0x32> - 801261e: 2309 movs r3, #9 - 8012620: 602b str r3, [r5, #0] - 8012622: f042 0340 orr.w r3, r2, #64 ; 0x40 - 8012626: 81a3 strh r3, [r4, #12] - 8012628: f04f 30ff mov.w r0, #4294967295 - 801262c: e034 b.n 8012698 <__swsetup_r+0x9c> - 801262e: 0758 lsls r0, r3, #29 - 8012630: d512 bpl.n 8012658 <__swsetup_r+0x5c> - 8012632: 6b21 ldr r1, [r4, #48] ; 0x30 - 8012634: b141 cbz r1, 8012648 <__swsetup_r+0x4c> - 8012636: f104 0340 add.w r3, r4, #64 ; 0x40 - 801263a: 4299 cmp r1, r3 - 801263c: d002 beq.n 8012644 <__swsetup_r+0x48> - 801263e: 4628 mov r0, r5 - 8012640: f001 f838 bl 80136b4 <_free_r> - 8012644: 2300 movs r3, #0 - 8012646: 6323 str r3, [r4, #48] ; 0x30 - 8012648: 89a3 ldrh r3, [r4, #12] - 801264a: f023 0324 bic.w r3, r3, #36 ; 0x24 - 801264e: 81a3 strh r3, [r4, #12] - 8012650: 2300 movs r3, #0 - 8012652: 6063 str r3, [r4, #4] - 8012654: 6923 ldr r3, [r4, #16] - 8012656: 6023 str r3, [r4, #0] - 8012658: 89a3 ldrh r3, [r4, #12] - 801265a: f043 0308 orr.w r3, r3, #8 - 801265e: 81a3 strh r3, [r4, #12] - 8012660: 6923 ldr r3, [r4, #16] - 8012662: b94b cbnz r3, 8012678 <__swsetup_r+0x7c> - 8012664: 89a3 ldrh r3, [r4, #12] - 8012666: f403 7320 and.w r3, r3, #640 ; 0x280 - 801266a: f5b3 7f00 cmp.w r3, #512 ; 0x200 - 801266e: d003 beq.n 8012678 <__swsetup_r+0x7c> - 8012670: 4621 mov r1, r4 - 8012672: 4628 mov r0, r5 - 8012674: f001 f932 bl 80138dc <__smakebuf_r> - 8012678: 89a0 ldrh r0, [r4, #12] - 801267a: f9b4 200c ldrsh.w r2, [r4, #12] - 801267e: f010 0301 ands.w r3, r0, #1 - 8012682: d00a beq.n 801269a <__swsetup_r+0x9e> - 8012684: 2300 movs r3, #0 - 8012686: 60a3 str r3, [r4, #8] - 8012688: 6963 ldr r3, [r4, #20] - 801268a: 425b negs r3, r3 - 801268c: 61a3 str r3, [r4, #24] - 801268e: 6923 ldr r3, [r4, #16] - 8012690: b943 cbnz r3, 80126a4 <__swsetup_r+0xa8> - 8012692: f010 0080 ands.w r0, r0, #128 ; 0x80 - 8012696: d1c4 bne.n 8012622 <__swsetup_r+0x26> - 8012698: bd38 pop {r3, r4, r5, pc} - 801269a: 0781 lsls r1, r0, #30 - 801269c: bf58 it pl - 801269e: 6963 ldrpl r3, [r4, #20] - 80126a0: 60a3 str r3, [r4, #8] - 80126a2: e7f4 b.n 801268e <__swsetup_r+0x92> - 80126a4: 2000 movs r0, #0 - 80126a6: e7f7 b.n 8012698 <__swsetup_r+0x9c> - 80126a8: 20000030 .word 0x20000030 - -080126ac : - 80126ac: 4b02 ldr r3, [pc, #8] ; (80126b8 ) - 80126ae: b113 cbz r3, 80126b6 - 80126b0: 4802 ldr r0, [pc, #8] ; (80126bc ) - 80126b2: f000 b805 b.w 80126c0 - 80126b6: 4770 bx lr - 80126b8: 00000000 .word 0x00000000 - 80126bc: 080135e5 .word 0x080135e5 - -080126c0 : - 80126c0: 2300 movs r3, #0 - 80126c2: 4601 mov r1, r0 - 80126c4: 461a mov r2, r3 - 80126c6: 4618 mov r0, r3 - 80126c8: f002 bc8c b.w 8014fe4 <__register_exitproc> - -080126cc : - 80126cc: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} - 80126d0: 6903 ldr r3, [r0, #16] - 80126d2: 690c ldr r4, [r1, #16] - 80126d4: 42a3 cmp r3, r4 - 80126d6: 4607 mov r7, r0 - 80126d8: f2c0 8081 blt.w 80127de - 80126dc: 3c01 subs r4, #1 - 80126de: f101 0814 add.w r8, r1, #20 - 80126e2: f100 0514 add.w r5, r0, #20 - 80126e6: eb05 0384 add.w r3, r5, r4, lsl #2 - 80126ea: 9301 str r3, [sp, #4] - 80126ec: f858 3024 ldr.w r3, [r8, r4, lsl #2] - 80126f0: f855 2024 ldr.w r2, [r5, r4, lsl #2] - 80126f4: 3301 adds r3, #1 - 80126f6: 429a cmp r2, r3 - 80126f8: ea4f 0b84 mov.w fp, r4, lsl #2 - 80126fc: eb08 0984 add.w r9, r8, r4, lsl #2 - 8012700: fbb2 f6f3 udiv r6, r2, r3 - 8012704: d331 bcc.n 801276a - 8012706: f04f 0e00 mov.w lr, #0 - 801270a: 4640 mov r0, r8 - 801270c: 46ac mov ip, r5 - 801270e: 46f2 mov sl, lr - 8012710: f850 2b04 ldr.w r2, [r0], #4 - 8012714: b293 uxth r3, r2 - 8012716: fb06 e303 mla r3, r6, r3, lr - 801271a: ea4f 4e13 mov.w lr, r3, lsr #16 - 801271e: b29b uxth r3, r3 - 8012720: ebaa 0303 sub.w r3, sl, r3 - 8012724: f8dc a000 ldr.w sl, [ip] - 8012728: 0c12 lsrs r2, r2, #16 - 801272a: fa13 f38a uxtah r3, r3, sl - 801272e: fb06 e202 mla r2, r6, r2, lr - 8012732: 9300 str r3, [sp, #0] - 8012734: 9b00 ldr r3, [sp, #0] - 8012736: ea4f 4e12 mov.w lr, r2, lsr #16 - 801273a: b292 uxth r2, r2 - 801273c: ebc2 421a rsb r2, r2, sl, lsr #16 - 8012740: eb02 4223 add.w r2, r2, r3, asr #16 - 8012744: f8bd 3000 ldrh.w r3, [sp] - 8012748: 4581 cmp r9, r0 - 801274a: ea43 4302 orr.w r3, r3, r2, lsl #16 - 801274e: f84c 3b04 str.w r3, [ip], #4 - 8012752: ea4f 4a22 mov.w sl, r2, asr #16 - 8012756: d2db bcs.n 8012710 - 8012758: f855 300b ldr.w r3, [r5, fp] - 801275c: b92b cbnz r3, 801276a - 801275e: 9b01 ldr r3, [sp, #4] - 8012760: 3b04 subs r3, #4 - 8012762: 429d cmp r5, r3 - 8012764: 461a mov r2, r3 - 8012766: d32e bcc.n 80127c6 - 8012768: 613c str r4, [r7, #16] - 801276a: 4638 mov r0, r7 - 801276c: f001 fd72 bl 8014254 <__mcmp> - 8012770: 2800 cmp r0, #0 - 8012772: db24 blt.n 80127be - 8012774: 3601 adds r6, #1 - 8012776: 4628 mov r0, r5 - 8012778: f04f 0c00 mov.w ip, #0 - 801277c: f858 2b04 ldr.w r2, [r8], #4 - 8012780: f8d0 e000 ldr.w lr, [r0] - 8012784: b293 uxth r3, r2 - 8012786: ebac 0303 sub.w r3, ip, r3 - 801278a: 0c12 lsrs r2, r2, #16 - 801278c: fa13 f38e uxtah r3, r3, lr - 8012790: ebc2 421e rsb r2, r2, lr, lsr #16 - 8012794: eb02 4223 add.w r2, r2, r3, asr #16 - 8012798: b29b uxth r3, r3 - 801279a: ea43 4302 orr.w r3, r3, r2, lsl #16 - 801279e: 45c1 cmp r9, r8 - 80127a0: f840 3b04 str.w r3, [r0], #4 - 80127a4: ea4f 4c22 mov.w ip, r2, asr #16 - 80127a8: d2e8 bcs.n 801277c - 80127aa: f855 2024 ldr.w r2, [r5, r4, lsl #2] - 80127ae: eb05 0384 add.w r3, r5, r4, lsl #2 - 80127b2: b922 cbnz r2, 80127be - 80127b4: 3b04 subs r3, #4 - 80127b6: 429d cmp r5, r3 - 80127b8: 461a mov r2, r3 - 80127ba: d30a bcc.n 80127d2 - 80127bc: 613c str r4, [r7, #16] - 80127be: 4630 mov r0, r6 - 80127c0: b003 add sp, #12 - 80127c2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 80127c6: 6812 ldr r2, [r2, #0] - 80127c8: 3b04 subs r3, #4 - 80127ca: 2a00 cmp r2, #0 - 80127cc: d1cc bne.n 8012768 - 80127ce: 3c01 subs r4, #1 - 80127d0: e7c7 b.n 8012762 - 80127d2: 6812 ldr r2, [r2, #0] - 80127d4: 3b04 subs r3, #4 - 80127d6: 2a00 cmp r2, #0 - 80127d8: d1f0 bne.n 80127bc - 80127da: 3c01 subs r4, #1 - 80127dc: e7eb b.n 80127b6 - 80127de: 2000 movs r0, #0 - 80127e0: e7ee b.n 80127c0 - 80127e2: 0000 movs r0, r0 - 80127e4: 0000 movs r0, r0 - ... - -080127e8 <_dtoa_r>: - 80127e8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 80127ec: ed2d 8b04 vpush {d8-d9} - 80127f0: b093 sub sp, #76 ; 0x4c - 80127f2: ec57 6b10 vmov r6, r7, d0 - 80127f6: 9106 str r1, [sp, #24] - 80127f8: 6c01 ldr r1, [r0, #64] ; 0x40 - 80127fa: 9d20 ldr r5, [sp, #128] ; 0x80 - 80127fc: 9209 str r2, [sp, #36] ; 0x24 - 80127fe: ee10 aa10 vmov sl, s0 - 8012802: 4604 mov r4, r0 - 8012804: 930c str r3, [sp, #48] ; 0x30 - 8012806: 46bb mov fp, r7 - 8012808: b141 cbz r1, 801281c <_dtoa_r+0x34> - 801280a: 6c42 ldr r2, [r0, #68] ; 0x44 - 801280c: 604a str r2, [r1, #4] - 801280e: 2301 movs r3, #1 - 8012810: 4093 lsls r3, r2 - 8012812: 608b str r3, [r1, #8] - 8012814: f001 fb0f bl 8013e36 <_Bfree> - 8012818: 2300 movs r3, #0 - 801281a: 6423 str r3, [r4, #64] ; 0x40 - 801281c: 1e3b subs r3, r7, #0 - 801281e: bfaa itet ge - 8012820: 2300 movge r3, #0 - 8012822: f023 4b00 biclt.w fp, r3, #2147483648 ; 0x80000000 - 8012826: 602b strge r3, [r5, #0] - 8012828: 4ba3 ldr r3, [pc, #652] ; (8012ab8 <_dtoa_r+0x2d0>) - 801282a: bfbc itt lt - 801282c: 2201 movlt r2, #1 - 801282e: 602a strlt r2, [r5, #0] - 8012830: ea33 030b bics.w r3, r3, fp - 8012834: d11b bne.n 801286e <_dtoa_r+0x86> - 8012836: 9a0c ldr r2, [sp, #48] ; 0x30 - 8012838: f242 730f movw r3, #9999 ; 0x270f - 801283c: 6013 str r3, [r2, #0] - 801283e: f3cb 0313 ubfx r3, fp, #0, #20 - 8012842: 4333 orrs r3, r6 - 8012844: f000 8590 beq.w 8013368 <_dtoa_r+0xb80> - 8012848: 9b21 ldr r3, [sp, #132] ; 0x84 - 801284a: b90b cbnz r3, 8012850 <_dtoa_r+0x68> - 801284c: 4b9b ldr r3, [pc, #620] ; (8012abc <_dtoa_r+0x2d4>) - 801284e: e022 b.n 8012896 <_dtoa_r+0xae> - 8012850: 4b9a ldr r3, [pc, #616] ; (8012abc <_dtoa_r+0x2d4>) - 8012852: 9301 str r3, [sp, #4] - 8012854: 3303 adds r3, #3 - 8012856: 9a21 ldr r2, [sp, #132] ; 0x84 - 8012858: 6013 str r3, [r2, #0] - 801285a: 9801 ldr r0, [sp, #4] - 801285c: b013 add sp, #76 ; 0x4c - 801285e: ecbd 8b04 vpop {d8-d9} - 8012862: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 8012866: 4b96 ldr r3, [pc, #600] ; (8012ac0 <_dtoa_r+0x2d8>) - 8012868: 9301 str r3, [sp, #4] - 801286a: 3308 adds r3, #8 - 801286c: e7f3 b.n 8012856 <_dtoa_r+0x6e> - 801286e: 2200 movs r2, #0 - 8012870: 2300 movs r3, #0 - 8012872: 4650 mov r0, sl - 8012874: 4659 mov r1, fp - 8012876: f7ee f937 bl 8000ae8 <__aeabi_dcmpeq> - 801287a: ec4b ab19 vmov d9, sl, fp - 801287e: 4680 mov r8, r0 - 8012880: b158 cbz r0, 801289a <_dtoa_r+0xb2> - 8012882: 9a0c ldr r2, [sp, #48] ; 0x30 - 8012884: 2301 movs r3, #1 - 8012886: 6013 str r3, [r2, #0] - 8012888: 9b21 ldr r3, [sp, #132] ; 0x84 - 801288a: 2b00 cmp r3, #0 - 801288c: f000 8569 beq.w 8013362 <_dtoa_r+0xb7a> - 8012890: 488c ldr r0, [pc, #560] ; (8012ac4 <_dtoa_r+0x2dc>) - 8012892: 6018 str r0, [r3, #0] - 8012894: 1e43 subs r3, r0, #1 - 8012896: 9301 str r3, [sp, #4] - 8012898: e7df b.n 801285a <_dtoa_r+0x72> - 801289a: ec4b ab10 vmov d0, sl, fp - 801289e: aa10 add r2, sp, #64 ; 0x40 - 80128a0: a911 add r1, sp, #68 ; 0x44 - 80128a2: 4620 mov r0, r4 - 80128a4: f001 fd7c bl 80143a0 <__d2b> - 80128a8: f3cb 550a ubfx r5, fp, #20, #11 - 80128ac: ee08 0a10 vmov s16, r0 - 80128b0: 2d00 cmp r5, #0 - 80128b2: f000 8082 beq.w 80129ba <_dtoa_r+0x1d2> - 80128b6: ee19 3a90 vmov r3, s19 - 80128ba: f3c3 0313 ubfx r3, r3, #0, #20 - 80128be: f043 577f orr.w r7, r3, #1069547520 ; 0x3fc00000 - 80128c2: 4656 mov r6, sl - 80128c4: f447 1740 orr.w r7, r7, #3145728 ; 0x300000 - 80128c8: f2a5 35ff subw r5, r5, #1023 ; 0x3ff - 80128cc: f8cd 8038 str.w r8, [sp, #56] ; 0x38 - 80128d0: 4b7d ldr r3, [pc, #500] ; (8012ac8 <_dtoa_r+0x2e0>) - 80128d2: 2200 movs r2, #0 - 80128d4: 4630 mov r0, r6 - 80128d6: 4639 mov r1, r7 - 80128d8: f7ed fce6 bl 80002a8 <__aeabi_dsub> - 80128dc: a370 add r3, pc, #448 ; (adr r3, 8012aa0 <_dtoa_r+0x2b8>) - 80128de: e9d3 2300 ldrd r2, r3, [r3] - 80128e2: f7ed fe99 bl 8000618 <__aeabi_dmul> - 80128e6: a370 add r3, pc, #448 ; (adr r3, 8012aa8 <_dtoa_r+0x2c0>) - 80128e8: e9d3 2300 ldrd r2, r3, [r3] - 80128ec: f7ed fcde bl 80002ac <__adddf3> - 80128f0: 4606 mov r6, r0 - 80128f2: 4628 mov r0, r5 - 80128f4: 460f mov r7, r1 - 80128f6: f7ed fe25 bl 8000544 <__aeabi_i2d> - 80128fa: a36d add r3, pc, #436 ; (adr r3, 8012ab0 <_dtoa_r+0x2c8>) - 80128fc: e9d3 2300 ldrd r2, r3, [r3] - 8012900: f7ed fe8a bl 8000618 <__aeabi_dmul> - 8012904: 4602 mov r2, r0 - 8012906: 460b mov r3, r1 - 8012908: 4630 mov r0, r6 - 801290a: 4639 mov r1, r7 - 801290c: f7ed fcce bl 80002ac <__adddf3> - 8012910: 4606 mov r6, r0 - 8012912: 460f mov r7, r1 - 8012914: f7ee f930 bl 8000b78 <__aeabi_d2iz> - 8012918: 2200 movs r2, #0 - 801291a: 9000 str r0, [sp, #0] - 801291c: 2300 movs r3, #0 - 801291e: 4630 mov r0, r6 - 8012920: 4639 mov r1, r7 - 8012922: f7ee f8eb bl 8000afc <__aeabi_dcmplt> - 8012926: b150 cbz r0, 801293e <_dtoa_r+0x156> - 8012928: 9800 ldr r0, [sp, #0] - 801292a: f7ed fe0b bl 8000544 <__aeabi_i2d> - 801292e: 4632 mov r2, r6 - 8012930: 463b mov r3, r7 - 8012932: f7ee f8d9 bl 8000ae8 <__aeabi_dcmpeq> - 8012936: b910 cbnz r0, 801293e <_dtoa_r+0x156> - 8012938: 9b00 ldr r3, [sp, #0] - 801293a: 3b01 subs r3, #1 - 801293c: 9300 str r3, [sp, #0] - 801293e: 9b00 ldr r3, [sp, #0] - 8012940: 2b16 cmp r3, #22 - 8012942: d858 bhi.n 80129f6 <_dtoa_r+0x20e> - 8012944: 9a00 ldr r2, [sp, #0] - 8012946: 4b61 ldr r3, [pc, #388] ; (8012acc <_dtoa_r+0x2e4>) - 8012948: eb03 03c2 add.w r3, r3, r2, lsl #3 - 801294c: e9d3 2300 ldrd r2, r3, [r3] - 8012950: ec51 0b19 vmov r0, r1, d9 - 8012954: f7ee f8d2 bl 8000afc <__aeabi_dcmplt> - 8012958: 2800 cmp r0, #0 - 801295a: d04e beq.n 80129fa <_dtoa_r+0x212> - 801295c: 9b00 ldr r3, [sp, #0] - 801295e: 3b01 subs r3, #1 - 8012960: 9300 str r3, [sp, #0] - 8012962: 2300 movs r3, #0 - 8012964: 930b str r3, [sp, #44] ; 0x2c - 8012966: 9b10 ldr r3, [sp, #64] ; 0x40 - 8012968: 1b5d subs r5, r3, r5 - 801296a: 1e6b subs r3, r5, #1 - 801296c: 9305 str r3, [sp, #20] - 801296e: bf45 ittet mi - 8012970: f1c5 0301 rsbmi r3, r5, #1 - 8012974: 9304 strmi r3, [sp, #16] - 8012976: 2300 movpl r3, #0 - 8012978: 2300 movmi r3, #0 - 801297a: bf4c ite mi - 801297c: 9305 strmi r3, [sp, #20] - 801297e: 9304 strpl r3, [sp, #16] - 8012980: 9b00 ldr r3, [sp, #0] - 8012982: 2b00 cmp r3, #0 - 8012984: db3b blt.n 80129fe <_dtoa_r+0x216> - 8012986: 9b05 ldr r3, [sp, #20] - 8012988: 9a00 ldr r2, [sp, #0] - 801298a: 920a str r2, [sp, #40] ; 0x28 - 801298c: 4413 add r3, r2 - 801298e: 9305 str r3, [sp, #20] - 8012990: 2300 movs r3, #0 - 8012992: 9307 str r3, [sp, #28] - 8012994: 9b06 ldr r3, [sp, #24] - 8012996: 2b09 cmp r3, #9 - 8012998: d869 bhi.n 8012a6e <_dtoa_r+0x286> - 801299a: 2b05 cmp r3, #5 - 801299c: bfc4 itt gt - 801299e: 3b04 subgt r3, #4 - 80129a0: 9306 strgt r3, [sp, #24] - 80129a2: 9b06 ldr r3, [sp, #24] - 80129a4: f1a3 0302 sub.w r3, r3, #2 - 80129a8: bfcc ite gt - 80129aa: 2500 movgt r5, #0 - 80129ac: 2501 movle r5, #1 - 80129ae: 2b03 cmp r3, #3 - 80129b0: d868 bhi.n 8012a84 <_dtoa_r+0x29c> - 80129b2: e8df f003 tbb [pc, r3] - 80129b6: 3a2d .short 0x3a2d - 80129b8: 5a38 .short 0x5a38 - 80129ba: e9dd 5310 ldrd r5, r3, [sp, #64] ; 0x40 - 80129be: 441d add r5, r3 - 80129c0: f205 4332 addw r3, r5, #1074 ; 0x432 - 80129c4: 2b20 cmp r3, #32 - 80129c6: bfc1 itttt gt - 80129c8: f1c3 0340 rsbgt r3, r3, #64 ; 0x40 - 80129cc: f205 4012 addwgt r0, r5, #1042 ; 0x412 - 80129d0: fa0b f303 lslgt.w r3, fp, r3 - 80129d4: fa26 f000 lsrgt.w r0, r6, r0 - 80129d8: bfda itte le - 80129da: f1c3 0320 rsble r3, r3, #32 - 80129de: fa06 f003 lslle.w r0, r6, r3 - 80129e2: 4318 orrgt r0, r3 - 80129e4: f7ed fd9e bl 8000524 <__aeabi_ui2d> - 80129e8: 2301 movs r3, #1 - 80129ea: 4606 mov r6, r0 - 80129ec: f1a1 77f8 sub.w r7, r1, #32505856 ; 0x1f00000 - 80129f0: 3d01 subs r5, #1 - 80129f2: 930e str r3, [sp, #56] ; 0x38 - 80129f4: e76c b.n 80128d0 <_dtoa_r+0xe8> - 80129f6: 2301 movs r3, #1 - 80129f8: e7b4 b.n 8012964 <_dtoa_r+0x17c> - 80129fa: 900b str r0, [sp, #44] ; 0x2c - 80129fc: e7b3 b.n 8012966 <_dtoa_r+0x17e> - 80129fe: 9b04 ldr r3, [sp, #16] - 8012a00: 9a00 ldr r2, [sp, #0] - 8012a02: 1a9b subs r3, r3, r2 - 8012a04: 9304 str r3, [sp, #16] - 8012a06: 4253 negs r3, r2 - 8012a08: 9307 str r3, [sp, #28] - 8012a0a: 2300 movs r3, #0 - 8012a0c: 930a str r3, [sp, #40] ; 0x28 - 8012a0e: e7c1 b.n 8012994 <_dtoa_r+0x1ac> - 8012a10: 2300 movs r3, #0 - 8012a12: 9308 str r3, [sp, #32] - 8012a14: 9b09 ldr r3, [sp, #36] ; 0x24 - 8012a16: 2b00 cmp r3, #0 - 8012a18: dc37 bgt.n 8012a8a <_dtoa_r+0x2a2> - 8012a1a: 2301 movs r3, #1 - 8012a1c: e9cd 3302 strd r3, r3, [sp, #8] - 8012a20: 461a mov r2, r3 - 8012a22: 9209 str r2, [sp, #36] ; 0x24 - 8012a24: e00c b.n 8012a40 <_dtoa_r+0x258> - 8012a26: 2301 movs r3, #1 - 8012a28: e7f3 b.n 8012a12 <_dtoa_r+0x22a> - 8012a2a: 2300 movs r3, #0 - 8012a2c: 9a09 ldr r2, [sp, #36] ; 0x24 - 8012a2e: 9308 str r3, [sp, #32] - 8012a30: 9b00 ldr r3, [sp, #0] - 8012a32: 4413 add r3, r2 - 8012a34: 9302 str r3, [sp, #8] - 8012a36: 3301 adds r3, #1 - 8012a38: 2b01 cmp r3, #1 - 8012a3a: 9303 str r3, [sp, #12] - 8012a3c: bfb8 it lt - 8012a3e: 2301 movlt r3, #1 - 8012a40: 2200 movs r2, #0 - 8012a42: 6462 str r2, [r4, #68] ; 0x44 - 8012a44: 2204 movs r2, #4 - 8012a46: f102 0014 add.w r0, r2, #20 - 8012a4a: 4298 cmp r0, r3 - 8012a4c: 6c61 ldr r1, [r4, #68] ; 0x44 - 8012a4e: d920 bls.n 8012a92 <_dtoa_r+0x2aa> - 8012a50: 4620 mov r0, r4 - 8012a52: f001 f9cb bl 8013dec <_Balloc> - 8012a56: 9001 str r0, [sp, #4] - 8012a58: 2800 cmp r0, #0 - 8012a5a: d13d bne.n 8012ad8 <_dtoa_r+0x2f0> - 8012a5c: 4b1c ldr r3, [pc, #112] ; (8012ad0 <_dtoa_r+0x2e8>) - 8012a5e: 4602 mov r2, r0 - 8012a60: f44f 71d5 mov.w r1, #426 ; 0x1aa - 8012a64: 481b ldr r0, [pc, #108] ; (8012ad4 <_dtoa_r+0x2ec>) - 8012a66: f002 faff bl 8015068 <__assert_func> - 8012a6a: 2301 movs r3, #1 - 8012a6c: e7de b.n 8012a2c <_dtoa_r+0x244> - 8012a6e: 2501 movs r5, #1 - 8012a70: 2300 movs r3, #0 - 8012a72: 9306 str r3, [sp, #24] - 8012a74: 9508 str r5, [sp, #32] - 8012a76: f04f 33ff mov.w r3, #4294967295 - 8012a7a: e9cd 3302 strd r3, r3, [sp, #8] - 8012a7e: 2200 movs r2, #0 - 8012a80: 2312 movs r3, #18 - 8012a82: e7ce b.n 8012a22 <_dtoa_r+0x23a> - 8012a84: 2301 movs r3, #1 - 8012a86: 9308 str r3, [sp, #32] - 8012a88: e7f5 b.n 8012a76 <_dtoa_r+0x28e> - 8012a8a: 9b09 ldr r3, [sp, #36] ; 0x24 - 8012a8c: e9cd 3302 strd r3, r3, [sp, #8] - 8012a90: e7d6 b.n 8012a40 <_dtoa_r+0x258> - 8012a92: 3101 adds r1, #1 - 8012a94: 6461 str r1, [r4, #68] ; 0x44 - 8012a96: 0052 lsls r2, r2, #1 - 8012a98: e7d5 b.n 8012a46 <_dtoa_r+0x25e> - 8012a9a: bf00 nop - 8012a9c: f3af 8000 nop.w - 8012aa0: 636f4361 .word 0x636f4361 - 8012aa4: 3fd287a7 .word 0x3fd287a7 - 8012aa8: 8b60c8b3 .word 0x8b60c8b3 - 8012aac: 3fc68a28 .word 0x3fc68a28 - 8012ab0: 509f79fb .word 0x509f79fb - 8012ab4: 3fd34413 .word 0x3fd34413 - 8012ab8: 7ff00000 .word 0x7ff00000 - 8012abc: 08018c3c .word 0x08018c3c - 8012ac0: 08018c40 .word 0x08018c40 - 8012ac4: 08018c1b .word 0x08018c1b - 8012ac8: 3ff80000 .word 0x3ff80000 - 8012acc: 08018d40 .word 0x08018d40 - 8012ad0: 08018c49 .word 0x08018c49 - 8012ad4: 08018c5a .word 0x08018c5a - 8012ad8: 9b01 ldr r3, [sp, #4] - 8012ada: 6423 str r3, [r4, #64] ; 0x40 - 8012adc: 9b03 ldr r3, [sp, #12] - 8012ade: 2b0e cmp r3, #14 - 8012ae0: f200 809d bhi.w 8012c1e <_dtoa_r+0x436> - 8012ae4: 2d00 cmp r5, #0 - 8012ae6: f000 809a beq.w 8012c1e <_dtoa_r+0x436> - 8012aea: 9b00 ldr r3, [sp, #0] - 8012aec: 2b00 cmp r3, #0 - 8012aee: dd32 ble.n 8012b56 <_dtoa_r+0x36e> - 8012af0: 4ab7 ldr r2, [pc, #732] ; (8012dd0 <_dtoa_r+0x5e8>) - 8012af2: f003 030f and.w r3, r3, #15 - 8012af6: eb02 03c3 add.w r3, r2, r3, lsl #3 - 8012afa: e9d3 8900 ldrd r8, r9, [r3] - 8012afe: 9b00 ldr r3, [sp, #0] - 8012b00: 05d8 lsls r0, r3, #23 - 8012b02: ea4f 1723 mov.w r7, r3, asr #4 - 8012b06: d516 bpl.n 8012b36 <_dtoa_r+0x34e> - 8012b08: 4bb2 ldr r3, [pc, #712] ; (8012dd4 <_dtoa_r+0x5ec>) - 8012b0a: ec51 0b19 vmov r0, r1, d9 - 8012b0e: e9d3 2308 ldrd r2, r3, [r3, #32] - 8012b12: f7ed feab bl 800086c <__aeabi_ddiv> - 8012b16: f007 070f and.w r7, r7, #15 - 8012b1a: 4682 mov sl, r0 - 8012b1c: 468b mov fp, r1 - 8012b1e: 2503 movs r5, #3 - 8012b20: 4eac ldr r6, [pc, #688] ; (8012dd4 <_dtoa_r+0x5ec>) - 8012b22: b957 cbnz r7, 8012b3a <_dtoa_r+0x352> - 8012b24: 4642 mov r2, r8 - 8012b26: 464b mov r3, r9 - 8012b28: 4650 mov r0, sl - 8012b2a: 4659 mov r1, fp - 8012b2c: f7ed fe9e bl 800086c <__aeabi_ddiv> - 8012b30: 4682 mov sl, r0 - 8012b32: 468b mov fp, r1 - 8012b34: e028 b.n 8012b88 <_dtoa_r+0x3a0> - 8012b36: 2502 movs r5, #2 - 8012b38: e7f2 b.n 8012b20 <_dtoa_r+0x338> - 8012b3a: 07f9 lsls r1, r7, #31 - 8012b3c: d508 bpl.n 8012b50 <_dtoa_r+0x368> - 8012b3e: 4640 mov r0, r8 - 8012b40: 4649 mov r1, r9 - 8012b42: e9d6 2300 ldrd r2, r3, [r6] - 8012b46: f7ed fd67 bl 8000618 <__aeabi_dmul> - 8012b4a: 3501 adds r5, #1 - 8012b4c: 4680 mov r8, r0 - 8012b4e: 4689 mov r9, r1 - 8012b50: 107f asrs r7, r7, #1 - 8012b52: 3608 adds r6, #8 - 8012b54: e7e5 b.n 8012b22 <_dtoa_r+0x33a> - 8012b56: f000 809b beq.w 8012c90 <_dtoa_r+0x4a8> - 8012b5a: 9b00 ldr r3, [sp, #0] - 8012b5c: 4f9d ldr r7, [pc, #628] ; (8012dd4 <_dtoa_r+0x5ec>) - 8012b5e: 425e negs r6, r3 - 8012b60: 4b9b ldr r3, [pc, #620] ; (8012dd0 <_dtoa_r+0x5e8>) - 8012b62: f006 020f and.w r2, r6, #15 - 8012b66: eb03 03c2 add.w r3, r3, r2, lsl #3 - 8012b6a: e9d3 2300 ldrd r2, r3, [r3] - 8012b6e: ec51 0b19 vmov r0, r1, d9 - 8012b72: f7ed fd51 bl 8000618 <__aeabi_dmul> - 8012b76: 1136 asrs r6, r6, #4 - 8012b78: 4682 mov sl, r0 - 8012b7a: 468b mov fp, r1 - 8012b7c: 2300 movs r3, #0 - 8012b7e: 2502 movs r5, #2 - 8012b80: 2e00 cmp r6, #0 - 8012b82: d17a bne.n 8012c7a <_dtoa_r+0x492> - 8012b84: 2b00 cmp r3, #0 - 8012b86: d1d3 bne.n 8012b30 <_dtoa_r+0x348> - 8012b88: 9b0b ldr r3, [sp, #44] ; 0x2c - 8012b8a: 2b00 cmp r3, #0 - 8012b8c: f000 8082 beq.w 8012c94 <_dtoa_r+0x4ac> - 8012b90: 4b91 ldr r3, [pc, #580] ; (8012dd8 <_dtoa_r+0x5f0>) - 8012b92: 2200 movs r2, #0 - 8012b94: 4650 mov r0, sl - 8012b96: 4659 mov r1, fp - 8012b98: f7ed ffb0 bl 8000afc <__aeabi_dcmplt> - 8012b9c: 2800 cmp r0, #0 - 8012b9e: d079 beq.n 8012c94 <_dtoa_r+0x4ac> - 8012ba0: 9b03 ldr r3, [sp, #12] - 8012ba2: 2b00 cmp r3, #0 - 8012ba4: d076 beq.n 8012c94 <_dtoa_r+0x4ac> - 8012ba6: 9b02 ldr r3, [sp, #8] - 8012ba8: 2b00 cmp r3, #0 - 8012baa: dd36 ble.n 8012c1a <_dtoa_r+0x432> - 8012bac: 9b00 ldr r3, [sp, #0] - 8012bae: 4650 mov r0, sl - 8012bb0: 4659 mov r1, fp - 8012bb2: 1e5f subs r7, r3, #1 - 8012bb4: 2200 movs r2, #0 - 8012bb6: 4b89 ldr r3, [pc, #548] ; (8012ddc <_dtoa_r+0x5f4>) - 8012bb8: f7ed fd2e bl 8000618 <__aeabi_dmul> - 8012bbc: 9e02 ldr r6, [sp, #8] - 8012bbe: 4682 mov sl, r0 - 8012bc0: 468b mov fp, r1 - 8012bc2: 3501 adds r5, #1 - 8012bc4: 4628 mov r0, r5 - 8012bc6: f7ed fcbd bl 8000544 <__aeabi_i2d> - 8012bca: 4652 mov r2, sl - 8012bcc: 465b mov r3, fp - 8012bce: f7ed fd23 bl 8000618 <__aeabi_dmul> - 8012bd2: 4b83 ldr r3, [pc, #524] ; (8012de0 <_dtoa_r+0x5f8>) - 8012bd4: 2200 movs r2, #0 - 8012bd6: f7ed fb69 bl 80002ac <__adddf3> - 8012bda: 46d0 mov r8, sl - 8012bdc: 46d9 mov r9, fp - 8012bde: 4682 mov sl, r0 - 8012be0: f1a1 7b50 sub.w fp, r1, #54525952 ; 0x3400000 - 8012be4: 2e00 cmp r6, #0 - 8012be6: d158 bne.n 8012c9a <_dtoa_r+0x4b2> - 8012be8: 4b7e ldr r3, [pc, #504] ; (8012de4 <_dtoa_r+0x5fc>) - 8012bea: 2200 movs r2, #0 - 8012bec: 4640 mov r0, r8 - 8012bee: 4649 mov r1, r9 - 8012bf0: f7ed fb5a bl 80002a8 <__aeabi_dsub> - 8012bf4: 4652 mov r2, sl - 8012bf6: 465b mov r3, fp - 8012bf8: 4680 mov r8, r0 - 8012bfa: 4689 mov r9, r1 - 8012bfc: f7ed ff9c bl 8000b38 <__aeabi_dcmpgt> - 8012c00: 2800 cmp r0, #0 - 8012c02: f040 8296 bne.w 8013132 <_dtoa_r+0x94a> - 8012c06: 4652 mov r2, sl - 8012c08: f10b 4300 add.w r3, fp, #2147483648 ; 0x80000000 - 8012c0c: 4640 mov r0, r8 - 8012c0e: 4649 mov r1, r9 - 8012c10: f7ed ff74 bl 8000afc <__aeabi_dcmplt> - 8012c14: 2800 cmp r0, #0 - 8012c16: f040 828a bne.w 801312e <_dtoa_r+0x946> - 8012c1a: ec5b ab19 vmov sl, fp, d9 - 8012c1e: 9b11 ldr r3, [sp, #68] ; 0x44 - 8012c20: 2b00 cmp r3, #0 - 8012c22: f2c0 8149 blt.w 8012eb8 <_dtoa_r+0x6d0> - 8012c26: 9a00 ldr r2, [sp, #0] - 8012c28: 2a0e cmp r2, #14 - 8012c2a: f300 8145 bgt.w 8012eb8 <_dtoa_r+0x6d0> - 8012c2e: 4b68 ldr r3, [pc, #416] ; (8012dd0 <_dtoa_r+0x5e8>) - 8012c30: eb03 03c2 add.w r3, r3, r2, lsl #3 - 8012c34: e9d3 8900 ldrd r8, r9, [r3] - 8012c38: 9b09 ldr r3, [sp, #36] ; 0x24 - 8012c3a: 2b00 cmp r3, #0 - 8012c3c: f280 80d6 bge.w 8012dec <_dtoa_r+0x604> - 8012c40: 9b03 ldr r3, [sp, #12] - 8012c42: 2b00 cmp r3, #0 - 8012c44: f300 80d2 bgt.w 8012dec <_dtoa_r+0x604> - 8012c48: f040 8270 bne.w 801312c <_dtoa_r+0x944> - 8012c4c: 4b65 ldr r3, [pc, #404] ; (8012de4 <_dtoa_r+0x5fc>) - 8012c4e: 2200 movs r2, #0 - 8012c50: 4640 mov r0, r8 - 8012c52: 4649 mov r1, r9 - 8012c54: f7ed fce0 bl 8000618 <__aeabi_dmul> - 8012c58: 4652 mov r2, sl - 8012c5a: 465b mov r3, fp - 8012c5c: f7ed ff62 bl 8000b24 <__aeabi_dcmpge> - 8012c60: 9e03 ldr r6, [sp, #12] - 8012c62: 4637 mov r7, r6 - 8012c64: 2800 cmp r0, #0 - 8012c66: f040 8246 bne.w 80130f6 <_dtoa_r+0x90e> - 8012c6a: 9d01 ldr r5, [sp, #4] - 8012c6c: 2331 movs r3, #49 ; 0x31 - 8012c6e: f805 3b01 strb.w r3, [r5], #1 - 8012c72: 9b00 ldr r3, [sp, #0] - 8012c74: 3301 adds r3, #1 - 8012c76: 9300 str r3, [sp, #0] - 8012c78: e241 b.n 80130fe <_dtoa_r+0x916> - 8012c7a: 07f2 lsls r2, r6, #31 - 8012c7c: d505 bpl.n 8012c8a <_dtoa_r+0x4a2> - 8012c7e: e9d7 2300 ldrd r2, r3, [r7] - 8012c82: f7ed fcc9 bl 8000618 <__aeabi_dmul> - 8012c86: 3501 adds r5, #1 - 8012c88: 2301 movs r3, #1 - 8012c8a: 1076 asrs r6, r6, #1 - 8012c8c: 3708 adds r7, #8 - 8012c8e: e777 b.n 8012b80 <_dtoa_r+0x398> - 8012c90: 2502 movs r5, #2 - 8012c92: e779 b.n 8012b88 <_dtoa_r+0x3a0> - 8012c94: 9f00 ldr r7, [sp, #0] - 8012c96: 9e03 ldr r6, [sp, #12] - 8012c98: e794 b.n 8012bc4 <_dtoa_r+0x3dc> - 8012c9a: 9901 ldr r1, [sp, #4] - 8012c9c: 4b4c ldr r3, [pc, #304] ; (8012dd0 <_dtoa_r+0x5e8>) - 8012c9e: 4431 add r1, r6 - 8012ca0: 910d str r1, [sp, #52] ; 0x34 - 8012ca2: 9908 ldr r1, [sp, #32] - 8012ca4: eb03 03c6 add.w r3, r3, r6, lsl #3 - 8012ca8: e953 2302 ldrd r2, r3, [r3, #-8] - 8012cac: 2900 cmp r1, #0 - 8012cae: d043 beq.n 8012d38 <_dtoa_r+0x550> - 8012cb0: 494d ldr r1, [pc, #308] ; (8012de8 <_dtoa_r+0x600>) - 8012cb2: 2000 movs r0, #0 - 8012cb4: f7ed fdda bl 800086c <__aeabi_ddiv> - 8012cb8: 4652 mov r2, sl - 8012cba: 465b mov r3, fp - 8012cbc: f7ed faf4 bl 80002a8 <__aeabi_dsub> - 8012cc0: 9d01 ldr r5, [sp, #4] - 8012cc2: 4682 mov sl, r0 - 8012cc4: 468b mov fp, r1 - 8012cc6: 4649 mov r1, r9 - 8012cc8: 4640 mov r0, r8 - 8012cca: f7ed ff55 bl 8000b78 <__aeabi_d2iz> - 8012cce: 4606 mov r6, r0 - 8012cd0: f7ed fc38 bl 8000544 <__aeabi_i2d> - 8012cd4: 4602 mov r2, r0 - 8012cd6: 460b mov r3, r1 - 8012cd8: 4640 mov r0, r8 - 8012cda: 4649 mov r1, r9 - 8012cdc: f7ed fae4 bl 80002a8 <__aeabi_dsub> - 8012ce0: 3630 adds r6, #48 ; 0x30 - 8012ce2: f805 6b01 strb.w r6, [r5], #1 - 8012ce6: 4652 mov r2, sl - 8012ce8: 465b mov r3, fp - 8012cea: 4680 mov r8, r0 - 8012cec: 4689 mov r9, r1 - 8012cee: f7ed ff05 bl 8000afc <__aeabi_dcmplt> - 8012cf2: 2800 cmp r0, #0 - 8012cf4: d163 bne.n 8012dbe <_dtoa_r+0x5d6> - 8012cf6: 4642 mov r2, r8 - 8012cf8: 464b mov r3, r9 - 8012cfa: 4937 ldr r1, [pc, #220] ; (8012dd8 <_dtoa_r+0x5f0>) - 8012cfc: 2000 movs r0, #0 - 8012cfe: f7ed fad3 bl 80002a8 <__aeabi_dsub> - 8012d02: 4652 mov r2, sl - 8012d04: 465b mov r3, fp - 8012d06: f7ed fef9 bl 8000afc <__aeabi_dcmplt> - 8012d0a: 2800 cmp r0, #0 - 8012d0c: f040 80b6 bne.w 8012e7c <_dtoa_r+0x694> - 8012d10: 9b0d ldr r3, [sp, #52] ; 0x34 - 8012d12: 429d cmp r5, r3 - 8012d14: d081 beq.n 8012c1a <_dtoa_r+0x432> - 8012d16: 4b31 ldr r3, [pc, #196] ; (8012ddc <_dtoa_r+0x5f4>) - 8012d18: 2200 movs r2, #0 - 8012d1a: 4650 mov r0, sl - 8012d1c: 4659 mov r1, fp - 8012d1e: f7ed fc7b bl 8000618 <__aeabi_dmul> - 8012d22: 4b2e ldr r3, [pc, #184] ; (8012ddc <_dtoa_r+0x5f4>) - 8012d24: 4682 mov sl, r0 - 8012d26: 468b mov fp, r1 - 8012d28: 4640 mov r0, r8 - 8012d2a: 4649 mov r1, r9 - 8012d2c: 2200 movs r2, #0 - 8012d2e: f7ed fc73 bl 8000618 <__aeabi_dmul> - 8012d32: 4680 mov r8, r0 - 8012d34: 4689 mov r9, r1 - 8012d36: e7c6 b.n 8012cc6 <_dtoa_r+0x4de> - 8012d38: 4650 mov r0, sl - 8012d3a: 4659 mov r1, fp - 8012d3c: f7ed fc6c bl 8000618 <__aeabi_dmul> - 8012d40: 9b0d ldr r3, [sp, #52] ; 0x34 - 8012d42: 9d01 ldr r5, [sp, #4] - 8012d44: 930f str r3, [sp, #60] ; 0x3c - 8012d46: 4682 mov sl, r0 - 8012d48: 468b mov fp, r1 - 8012d4a: 4649 mov r1, r9 - 8012d4c: 4640 mov r0, r8 - 8012d4e: f7ed ff13 bl 8000b78 <__aeabi_d2iz> - 8012d52: 4606 mov r6, r0 - 8012d54: f7ed fbf6 bl 8000544 <__aeabi_i2d> - 8012d58: 3630 adds r6, #48 ; 0x30 - 8012d5a: 4602 mov r2, r0 - 8012d5c: 460b mov r3, r1 - 8012d5e: 4640 mov r0, r8 - 8012d60: 4649 mov r1, r9 - 8012d62: f7ed faa1 bl 80002a8 <__aeabi_dsub> - 8012d66: f805 6b01 strb.w r6, [r5], #1 - 8012d6a: 9b0d ldr r3, [sp, #52] ; 0x34 - 8012d6c: 429d cmp r5, r3 - 8012d6e: 4680 mov r8, r0 - 8012d70: 4689 mov r9, r1 - 8012d72: f04f 0200 mov.w r2, #0 - 8012d76: d124 bne.n 8012dc2 <_dtoa_r+0x5da> - 8012d78: 4b1b ldr r3, [pc, #108] ; (8012de8 <_dtoa_r+0x600>) - 8012d7a: 4650 mov r0, sl - 8012d7c: 4659 mov r1, fp - 8012d7e: f7ed fa95 bl 80002ac <__adddf3> - 8012d82: 4602 mov r2, r0 - 8012d84: 460b mov r3, r1 - 8012d86: 4640 mov r0, r8 - 8012d88: 4649 mov r1, r9 - 8012d8a: f7ed fed5 bl 8000b38 <__aeabi_dcmpgt> - 8012d8e: 2800 cmp r0, #0 - 8012d90: d174 bne.n 8012e7c <_dtoa_r+0x694> - 8012d92: 4652 mov r2, sl - 8012d94: 465b mov r3, fp - 8012d96: 4914 ldr r1, [pc, #80] ; (8012de8 <_dtoa_r+0x600>) - 8012d98: 2000 movs r0, #0 - 8012d9a: f7ed fa85 bl 80002a8 <__aeabi_dsub> - 8012d9e: 4602 mov r2, r0 - 8012da0: 460b mov r3, r1 - 8012da2: 4640 mov r0, r8 - 8012da4: 4649 mov r1, r9 - 8012da6: f7ed fea9 bl 8000afc <__aeabi_dcmplt> - 8012daa: 2800 cmp r0, #0 - 8012dac: f43f af35 beq.w 8012c1a <_dtoa_r+0x432> - 8012db0: 9d0f ldr r5, [sp, #60] ; 0x3c - 8012db2: 1e6b subs r3, r5, #1 - 8012db4: 930f str r3, [sp, #60] ; 0x3c - 8012db6: f815 3c01 ldrb.w r3, [r5, #-1] - 8012dba: 2b30 cmp r3, #48 ; 0x30 - 8012dbc: d0f8 beq.n 8012db0 <_dtoa_r+0x5c8> - 8012dbe: 9700 str r7, [sp, #0] - 8012dc0: e04a b.n 8012e58 <_dtoa_r+0x670> - 8012dc2: 4b06 ldr r3, [pc, #24] ; (8012ddc <_dtoa_r+0x5f4>) - 8012dc4: f7ed fc28 bl 8000618 <__aeabi_dmul> - 8012dc8: 4680 mov r8, r0 - 8012dca: 4689 mov r9, r1 - 8012dcc: e7bd b.n 8012d4a <_dtoa_r+0x562> - 8012dce: bf00 nop - 8012dd0: 08018d40 .word 0x08018d40 - 8012dd4: 08018d18 .word 0x08018d18 - 8012dd8: 3ff00000 .word 0x3ff00000 - 8012ddc: 40240000 .word 0x40240000 - 8012de0: 401c0000 .word 0x401c0000 - 8012de4: 40140000 .word 0x40140000 - 8012de8: 3fe00000 .word 0x3fe00000 - 8012dec: 9d01 ldr r5, [sp, #4] - 8012dee: 4656 mov r6, sl - 8012df0: 465f mov r7, fp - 8012df2: 4642 mov r2, r8 - 8012df4: 464b mov r3, r9 - 8012df6: 4630 mov r0, r6 - 8012df8: 4639 mov r1, r7 - 8012dfa: f7ed fd37 bl 800086c <__aeabi_ddiv> - 8012dfe: f7ed febb bl 8000b78 <__aeabi_d2iz> - 8012e02: 4682 mov sl, r0 - 8012e04: f7ed fb9e bl 8000544 <__aeabi_i2d> - 8012e08: 4642 mov r2, r8 - 8012e0a: 464b mov r3, r9 - 8012e0c: f7ed fc04 bl 8000618 <__aeabi_dmul> - 8012e10: 4602 mov r2, r0 - 8012e12: 460b mov r3, r1 - 8012e14: 4630 mov r0, r6 - 8012e16: 4639 mov r1, r7 - 8012e18: f10a 0630 add.w r6, sl, #48 ; 0x30 - 8012e1c: f7ed fa44 bl 80002a8 <__aeabi_dsub> - 8012e20: f805 6b01 strb.w r6, [r5], #1 - 8012e24: 9e01 ldr r6, [sp, #4] - 8012e26: 9f03 ldr r7, [sp, #12] - 8012e28: 1bae subs r6, r5, r6 - 8012e2a: 42b7 cmp r7, r6 - 8012e2c: 4602 mov r2, r0 - 8012e2e: 460b mov r3, r1 - 8012e30: d135 bne.n 8012e9e <_dtoa_r+0x6b6> - 8012e32: f7ed fa3b bl 80002ac <__adddf3> - 8012e36: 4642 mov r2, r8 - 8012e38: 464b mov r3, r9 - 8012e3a: 4606 mov r6, r0 - 8012e3c: 460f mov r7, r1 - 8012e3e: f7ed fe7b bl 8000b38 <__aeabi_dcmpgt> - 8012e42: b9d0 cbnz r0, 8012e7a <_dtoa_r+0x692> - 8012e44: 4642 mov r2, r8 - 8012e46: 464b mov r3, r9 - 8012e48: 4630 mov r0, r6 - 8012e4a: 4639 mov r1, r7 - 8012e4c: f7ed fe4c bl 8000ae8 <__aeabi_dcmpeq> - 8012e50: b110 cbz r0, 8012e58 <_dtoa_r+0x670> - 8012e52: f01a 0f01 tst.w sl, #1 - 8012e56: d110 bne.n 8012e7a <_dtoa_r+0x692> - 8012e58: 4620 mov r0, r4 - 8012e5a: ee18 1a10 vmov r1, s16 - 8012e5e: f000 ffea bl 8013e36 <_Bfree> - 8012e62: 2300 movs r3, #0 - 8012e64: 9800 ldr r0, [sp, #0] - 8012e66: 702b strb r3, [r5, #0] - 8012e68: 9b0c ldr r3, [sp, #48] ; 0x30 - 8012e6a: 3001 adds r0, #1 - 8012e6c: 6018 str r0, [r3, #0] - 8012e6e: 9b21 ldr r3, [sp, #132] ; 0x84 - 8012e70: 2b00 cmp r3, #0 - 8012e72: f43f acf2 beq.w 801285a <_dtoa_r+0x72> - 8012e76: 601d str r5, [r3, #0] - 8012e78: e4ef b.n 801285a <_dtoa_r+0x72> - 8012e7a: 9f00 ldr r7, [sp, #0] - 8012e7c: 462b mov r3, r5 - 8012e7e: 461d mov r5, r3 - 8012e80: f813 2d01 ldrb.w r2, [r3, #-1]! - 8012e84: 2a39 cmp r2, #57 ; 0x39 - 8012e86: d106 bne.n 8012e96 <_dtoa_r+0x6ae> - 8012e88: 9a01 ldr r2, [sp, #4] - 8012e8a: 429a cmp r2, r3 - 8012e8c: d1f7 bne.n 8012e7e <_dtoa_r+0x696> - 8012e8e: 9901 ldr r1, [sp, #4] - 8012e90: 2230 movs r2, #48 ; 0x30 - 8012e92: 3701 adds r7, #1 - 8012e94: 700a strb r2, [r1, #0] - 8012e96: 781a ldrb r2, [r3, #0] - 8012e98: 3201 adds r2, #1 - 8012e9a: 701a strb r2, [r3, #0] - 8012e9c: e78f b.n 8012dbe <_dtoa_r+0x5d6> - 8012e9e: 4ba6 ldr r3, [pc, #664] ; (8013138 <_dtoa_r+0x950>) - 8012ea0: 2200 movs r2, #0 - 8012ea2: f7ed fbb9 bl 8000618 <__aeabi_dmul> - 8012ea6: 2200 movs r2, #0 - 8012ea8: 2300 movs r3, #0 - 8012eaa: 4606 mov r6, r0 - 8012eac: 460f mov r7, r1 - 8012eae: f7ed fe1b bl 8000ae8 <__aeabi_dcmpeq> - 8012eb2: 2800 cmp r0, #0 - 8012eb4: d09d beq.n 8012df2 <_dtoa_r+0x60a> - 8012eb6: e7cf b.n 8012e58 <_dtoa_r+0x670> - 8012eb8: 9a08 ldr r2, [sp, #32] - 8012eba: 2a00 cmp r2, #0 - 8012ebc: f000 80d7 beq.w 801306e <_dtoa_r+0x886> - 8012ec0: 9a06 ldr r2, [sp, #24] - 8012ec2: 2a01 cmp r2, #1 - 8012ec4: f300 80ba bgt.w 801303c <_dtoa_r+0x854> - 8012ec8: 9a0e ldr r2, [sp, #56] ; 0x38 - 8012eca: 2a00 cmp r2, #0 - 8012ecc: f000 80b2 beq.w 8013034 <_dtoa_r+0x84c> - 8012ed0: f203 4333 addw r3, r3, #1075 ; 0x433 - 8012ed4: 9e07 ldr r6, [sp, #28] - 8012ed6: 9d04 ldr r5, [sp, #16] - 8012ed8: 9a04 ldr r2, [sp, #16] - 8012eda: 441a add r2, r3 - 8012edc: 9204 str r2, [sp, #16] - 8012ede: 9a05 ldr r2, [sp, #20] - 8012ee0: 2101 movs r1, #1 - 8012ee2: 441a add r2, r3 - 8012ee4: 4620 mov r0, r4 - 8012ee6: 9205 str r2, [sp, #20] - 8012ee8: f001 f844 bl 8013f74 <__i2b> - 8012eec: 4607 mov r7, r0 - 8012eee: 2d00 cmp r5, #0 - 8012ef0: dd0c ble.n 8012f0c <_dtoa_r+0x724> - 8012ef2: 9b05 ldr r3, [sp, #20] - 8012ef4: 2b00 cmp r3, #0 - 8012ef6: dd09 ble.n 8012f0c <_dtoa_r+0x724> - 8012ef8: 42ab cmp r3, r5 - 8012efa: 9a04 ldr r2, [sp, #16] - 8012efc: bfa8 it ge - 8012efe: 462b movge r3, r5 - 8012f00: 1ad2 subs r2, r2, r3 - 8012f02: 9204 str r2, [sp, #16] - 8012f04: 9a05 ldr r2, [sp, #20] - 8012f06: 1aed subs r5, r5, r3 - 8012f08: 1ad3 subs r3, r2, r3 - 8012f0a: 9305 str r3, [sp, #20] - 8012f0c: 9b07 ldr r3, [sp, #28] - 8012f0e: b31b cbz r3, 8012f58 <_dtoa_r+0x770> - 8012f10: 9b08 ldr r3, [sp, #32] - 8012f12: 2b00 cmp r3, #0 - 8012f14: f000 80af beq.w 8013076 <_dtoa_r+0x88e> - 8012f18: 2e00 cmp r6, #0 - 8012f1a: dd13 ble.n 8012f44 <_dtoa_r+0x75c> - 8012f1c: 4639 mov r1, r7 - 8012f1e: 4632 mov r2, r6 - 8012f20: 4620 mov r0, r4 - 8012f22: f001 f8e7 bl 80140f4 <__pow5mult> - 8012f26: ee18 2a10 vmov r2, s16 - 8012f2a: 4601 mov r1, r0 - 8012f2c: 4607 mov r7, r0 - 8012f2e: 4620 mov r0, r4 - 8012f30: f001 f836 bl 8013fa0 <__multiply> - 8012f34: ee18 1a10 vmov r1, s16 - 8012f38: 4680 mov r8, r0 - 8012f3a: 4620 mov r0, r4 - 8012f3c: f000 ff7b bl 8013e36 <_Bfree> - 8012f40: ee08 8a10 vmov s16, r8 - 8012f44: 9b07 ldr r3, [sp, #28] - 8012f46: 1b9a subs r2, r3, r6 - 8012f48: d006 beq.n 8012f58 <_dtoa_r+0x770> - 8012f4a: ee18 1a10 vmov r1, s16 - 8012f4e: 4620 mov r0, r4 - 8012f50: f001 f8d0 bl 80140f4 <__pow5mult> - 8012f54: ee08 0a10 vmov s16, r0 - 8012f58: 2101 movs r1, #1 - 8012f5a: 4620 mov r0, r4 - 8012f5c: f001 f80a bl 8013f74 <__i2b> - 8012f60: 9b0a ldr r3, [sp, #40] ; 0x28 - 8012f62: 2b00 cmp r3, #0 - 8012f64: 4606 mov r6, r0 - 8012f66: f340 8088 ble.w 801307a <_dtoa_r+0x892> - 8012f6a: 461a mov r2, r3 - 8012f6c: 4601 mov r1, r0 - 8012f6e: 4620 mov r0, r4 - 8012f70: f001 f8c0 bl 80140f4 <__pow5mult> - 8012f74: 9b06 ldr r3, [sp, #24] - 8012f76: 2b01 cmp r3, #1 - 8012f78: 4606 mov r6, r0 - 8012f7a: f340 8081 ble.w 8013080 <_dtoa_r+0x898> - 8012f7e: f04f 0800 mov.w r8, #0 - 8012f82: 6933 ldr r3, [r6, #16] - 8012f84: eb06 0383 add.w r3, r6, r3, lsl #2 - 8012f88: 6918 ldr r0, [r3, #16] - 8012f8a: f000 ffa3 bl 8013ed4 <__hi0bits> - 8012f8e: f1c0 0020 rsb r0, r0, #32 - 8012f92: 9b05 ldr r3, [sp, #20] - 8012f94: 4418 add r0, r3 - 8012f96: f010 001f ands.w r0, r0, #31 - 8012f9a: f000 8092 beq.w 80130c2 <_dtoa_r+0x8da> - 8012f9e: f1c0 0320 rsb r3, r0, #32 - 8012fa2: 2b04 cmp r3, #4 - 8012fa4: f340 808a ble.w 80130bc <_dtoa_r+0x8d4> - 8012fa8: f1c0 001c rsb r0, r0, #28 - 8012fac: 9b04 ldr r3, [sp, #16] - 8012fae: 4403 add r3, r0 - 8012fb0: 9304 str r3, [sp, #16] - 8012fb2: 9b05 ldr r3, [sp, #20] - 8012fb4: 4403 add r3, r0 - 8012fb6: 4405 add r5, r0 - 8012fb8: 9305 str r3, [sp, #20] - 8012fba: 9b04 ldr r3, [sp, #16] - 8012fbc: 2b00 cmp r3, #0 - 8012fbe: dd07 ble.n 8012fd0 <_dtoa_r+0x7e8> - 8012fc0: ee18 1a10 vmov r1, s16 - 8012fc4: 461a mov r2, r3 - 8012fc6: 4620 mov r0, r4 - 8012fc8: f001 f8d4 bl 8014174 <__lshift> - 8012fcc: ee08 0a10 vmov s16, r0 - 8012fd0: 9b05 ldr r3, [sp, #20] - 8012fd2: 2b00 cmp r3, #0 - 8012fd4: dd05 ble.n 8012fe2 <_dtoa_r+0x7fa> - 8012fd6: 4631 mov r1, r6 - 8012fd8: 461a mov r2, r3 - 8012fda: 4620 mov r0, r4 - 8012fdc: f001 f8ca bl 8014174 <__lshift> - 8012fe0: 4606 mov r6, r0 - 8012fe2: 9b0b ldr r3, [sp, #44] ; 0x2c - 8012fe4: 2b00 cmp r3, #0 - 8012fe6: d06e beq.n 80130c6 <_dtoa_r+0x8de> - 8012fe8: ee18 0a10 vmov r0, s16 - 8012fec: 4631 mov r1, r6 - 8012fee: f001 f931 bl 8014254 <__mcmp> - 8012ff2: 2800 cmp r0, #0 - 8012ff4: da67 bge.n 80130c6 <_dtoa_r+0x8de> - 8012ff6: 9b00 ldr r3, [sp, #0] - 8012ff8: 3b01 subs r3, #1 - 8012ffa: ee18 1a10 vmov r1, s16 - 8012ffe: 9300 str r3, [sp, #0] - 8013000: 220a movs r2, #10 - 8013002: 2300 movs r3, #0 - 8013004: 4620 mov r0, r4 - 8013006: f000 ff1f bl 8013e48 <__multadd> - 801300a: 9b08 ldr r3, [sp, #32] - 801300c: ee08 0a10 vmov s16, r0 - 8013010: 2b00 cmp r3, #0 - 8013012: f000 81b0 beq.w 8013376 <_dtoa_r+0xb8e> - 8013016: 2300 movs r3, #0 - 8013018: 4639 mov r1, r7 - 801301a: 220a movs r2, #10 - 801301c: 4620 mov r0, r4 - 801301e: f000 ff13 bl 8013e48 <__multadd> - 8013022: 9b02 ldr r3, [sp, #8] - 8013024: 2b00 cmp r3, #0 - 8013026: 4607 mov r7, r0 - 8013028: f300 808e bgt.w 8013148 <_dtoa_r+0x960> - 801302c: 9b06 ldr r3, [sp, #24] - 801302e: 2b02 cmp r3, #2 - 8013030: dc51 bgt.n 80130d6 <_dtoa_r+0x8ee> - 8013032: e089 b.n 8013148 <_dtoa_r+0x960> - 8013034: 9b10 ldr r3, [sp, #64] ; 0x40 - 8013036: f1c3 0336 rsb r3, r3, #54 ; 0x36 - 801303a: e74b b.n 8012ed4 <_dtoa_r+0x6ec> - 801303c: 9b03 ldr r3, [sp, #12] - 801303e: 1e5e subs r6, r3, #1 - 8013040: 9b07 ldr r3, [sp, #28] - 8013042: 42b3 cmp r3, r6 - 8013044: bfbf itttt lt - 8013046: 9b07 ldrlt r3, [sp, #28] - 8013048: 9607 strlt r6, [sp, #28] - 801304a: 1af2 sublt r2, r6, r3 - 801304c: 9b0a ldrlt r3, [sp, #40] ; 0x28 - 801304e: bfb6 itet lt - 8013050: 189b addlt r3, r3, r2 - 8013052: 1b9e subge r6, r3, r6 - 8013054: 930a strlt r3, [sp, #40] ; 0x28 - 8013056: 9b03 ldr r3, [sp, #12] - 8013058: bfb8 it lt - 801305a: 2600 movlt r6, #0 - 801305c: 2b00 cmp r3, #0 - 801305e: bfb7 itett lt - 8013060: e9dd 2303 ldrdlt r2, r3, [sp, #12] - 8013064: e9dd 3503 ldrdge r3, r5, [sp, #12] - 8013068: 1a9d sublt r5, r3, r2 - 801306a: 2300 movlt r3, #0 - 801306c: e734 b.n 8012ed8 <_dtoa_r+0x6f0> - 801306e: 9e07 ldr r6, [sp, #28] - 8013070: 9d04 ldr r5, [sp, #16] - 8013072: 9f08 ldr r7, [sp, #32] - 8013074: e73b b.n 8012eee <_dtoa_r+0x706> - 8013076: 9a07 ldr r2, [sp, #28] - 8013078: e767 b.n 8012f4a <_dtoa_r+0x762> - 801307a: 9b06 ldr r3, [sp, #24] - 801307c: 2b01 cmp r3, #1 - 801307e: dc18 bgt.n 80130b2 <_dtoa_r+0x8ca> - 8013080: f1ba 0f00 cmp.w sl, #0 - 8013084: d115 bne.n 80130b2 <_dtoa_r+0x8ca> - 8013086: f3cb 0313 ubfx r3, fp, #0, #20 - 801308a: b993 cbnz r3, 80130b2 <_dtoa_r+0x8ca> - 801308c: f02b 4300 bic.w r3, fp, #2147483648 ; 0x80000000 - 8013090: 0d1b lsrs r3, r3, #20 - 8013092: 051b lsls r3, r3, #20 - 8013094: b183 cbz r3, 80130b8 <_dtoa_r+0x8d0> - 8013096: 9b04 ldr r3, [sp, #16] - 8013098: 3301 adds r3, #1 - 801309a: 9304 str r3, [sp, #16] - 801309c: 9b05 ldr r3, [sp, #20] - 801309e: 3301 adds r3, #1 - 80130a0: 9305 str r3, [sp, #20] - 80130a2: f04f 0801 mov.w r8, #1 - 80130a6: 9b0a ldr r3, [sp, #40] ; 0x28 - 80130a8: 2b00 cmp r3, #0 - 80130aa: f47f af6a bne.w 8012f82 <_dtoa_r+0x79a> - 80130ae: 2001 movs r0, #1 - 80130b0: e76f b.n 8012f92 <_dtoa_r+0x7aa> - 80130b2: f04f 0800 mov.w r8, #0 - 80130b6: e7f6 b.n 80130a6 <_dtoa_r+0x8be> - 80130b8: 4698 mov r8, r3 - 80130ba: e7f4 b.n 80130a6 <_dtoa_r+0x8be> - 80130bc: f43f af7d beq.w 8012fba <_dtoa_r+0x7d2> - 80130c0: 4618 mov r0, r3 - 80130c2: 301c adds r0, #28 - 80130c4: e772 b.n 8012fac <_dtoa_r+0x7c4> - 80130c6: 9b03 ldr r3, [sp, #12] - 80130c8: 2b00 cmp r3, #0 - 80130ca: dc37 bgt.n 801313c <_dtoa_r+0x954> - 80130cc: 9b06 ldr r3, [sp, #24] - 80130ce: 2b02 cmp r3, #2 - 80130d0: dd34 ble.n 801313c <_dtoa_r+0x954> - 80130d2: 9b03 ldr r3, [sp, #12] - 80130d4: 9302 str r3, [sp, #8] - 80130d6: 9b02 ldr r3, [sp, #8] - 80130d8: b96b cbnz r3, 80130f6 <_dtoa_r+0x90e> - 80130da: 4631 mov r1, r6 - 80130dc: 2205 movs r2, #5 - 80130de: 4620 mov r0, r4 - 80130e0: f000 feb2 bl 8013e48 <__multadd> - 80130e4: 4601 mov r1, r0 - 80130e6: 4606 mov r6, r0 - 80130e8: ee18 0a10 vmov r0, s16 - 80130ec: f001 f8b2 bl 8014254 <__mcmp> - 80130f0: 2800 cmp r0, #0 - 80130f2: f73f adba bgt.w 8012c6a <_dtoa_r+0x482> - 80130f6: 9b09 ldr r3, [sp, #36] ; 0x24 - 80130f8: 9d01 ldr r5, [sp, #4] - 80130fa: 43db mvns r3, r3 - 80130fc: 9300 str r3, [sp, #0] - 80130fe: f04f 0800 mov.w r8, #0 - 8013102: 4631 mov r1, r6 - 8013104: 4620 mov r0, r4 - 8013106: f000 fe96 bl 8013e36 <_Bfree> - 801310a: 2f00 cmp r7, #0 - 801310c: f43f aea4 beq.w 8012e58 <_dtoa_r+0x670> - 8013110: f1b8 0f00 cmp.w r8, #0 - 8013114: d005 beq.n 8013122 <_dtoa_r+0x93a> - 8013116: 45b8 cmp r8, r7 - 8013118: d003 beq.n 8013122 <_dtoa_r+0x93a> - 801311a: 4641 mov r1, r8 - 801311c: 4620 mov r0, r4 - 801311e: f000 fe8a bl 8013e36 <_Bfree> - 8013122: 4639 mov r1, r7 - 8013124: 4620 mov r0, r4 - 8013126: f000 fe86 bl 8013e36 <_Bfree> - 801312a: e695 b.n 8012e58 <_dtoa_r+0x670> - 801312c: 2600 movs r6, #0 - 801312e: 4637 mov r7, r6 - 8013130: e7e1 b.n 80130f6 <_dtoa_r+0x90e> - 8013132: 9700 str r7, [sp, #0] - 8013134: 4637 mov r7, r6 - 8013136: e598 b.n 8012c6a <_dtoa_r+0x482> - 8013138: 40240000 .word 0x40240000 - 801313c: 9b08 ldr r3, [sp, #32] - 801313e: 2b00 cmp r3, #0 - 8013140: f000 80c9 beq.w 80132d6 <_dtoa_r+0xaee> - 8013144: 9b03 ldr r3, [sp, #12] - 8013146: 9302 str r3, [sp, #8] - 8013148: 2d00 cmp r5, #0 - 801314a: dd05 ble.n 8013158 <_dtoa_r+0x970> - 801314c: 4639 mov r1, r7 - 801314e: 462a mov r2, r5 - 8013150: 4620 mov r0, r4 - 8013152: f001 f80f bl 8014174 <__lshift> - 8013156: 4607 mov r7, r0 - 8013158: f1b8 0f00 cmp.w r8, #0 - 801315c: d05a beq.n 8013214 <_dtoa_r+0xa2c> - 801315e: 6879 ldr r1, [r7, #4] - 8013160: 4620 mov r0, r4 - 8013162: f000 fe43 bl 8013dec <_Balloc> - 8013166: 4605 mov r5, r0 - 8013168: b920 cbnz r0, 8013174 <_dtoa_r+0x98c> - 801316a: 4b87 ldr r3, [pc, #540] ; (8013388 <_dtoa_r+0xba0>) - 801316c: 4602 mov r2, r0 - 801316e: f240 21ea movw r1, #746 ; 0x2ea - 8013172: e477 b.n 8012a64 <_dtoa_r+0x27c> - 8013174: 693a ldr r2, [r7, #16] - 8013176: 3202 adds r2, #2 - 8013178: 0092 lsls r2, r2, #2 - 801317a: f107 010c add.w r1, r7, #12 - 801317e: 300c adds r0, #12 - 8013180: f7fd ff62 bl 8011048 - 8013184: 2201 movs r2, #1 - 8013186: 4629 mov r1, r5 - 8013188: 4620 mov r0, r4 - 801318a: f000 fff3 bl 8014174 <__lshift> - 801318e: 9b01 ldr r3, [sp, #4] - 8013190: f103 0901 add.w r9, r3, #1 - 8013194: e9dd 2301 ldrd r2, r3, [sp, #4] - 8013198: 4413 add r3, r2 - 801319a: 9305 str r3, [sp, #20] - 801319c: f00a 0301 and.w r3, sl, #1 - 80131a0: 46b8 mov r8, r7 - 80131a2: 9304 str r3, [sp, #16] - 80131a4: 4607 mov r7, r0 - 80131a6: 4631 mov r1, r6 - 80131a8: ee18 0a10 vmov r0, s16 - 80131ac: f7ff fa8e bl 80126cc - 80131b0: 4641 mov r1, r8 - 80131b2: 9002 str r0, [sp, #8] - 80131b4: f100 0a30 add.w sl, r0, #48 ; 0x30 - 80131b8: ee18 0a10 vmov r0, s16 - 80131bc: f001 f84a bl 8014254 <__mcmp> - 80131c0: 463a mov r2, r7 - 80131c2: 9003 str r0, [sp, #12] - 80131c4: 4631 mov r1, r6 - 80131c6: 4620 mov r0, r4 - 80131c8: f001 f860 bl 801428c <__mdiff> - 80131cc: 68c2 ldr r2, [r0, #12] - 80131ce: f109 3bff add.w fp, r9, #4294967295 - 80131d2: 4605 mov r5, r0 - 80131d4: bb02 cbnz r2, 8013218 <_dtoa_r+0xa30> - 80131d6: 4601 mov r1, r0 - 80131d8: ee18 0a10 vmov r0, s16 - 80131dc: f001 f83a bl 8014254 <__mcmp> - 80131e0: 4602 mov r2, r0 - 80131e2: 4629 mov r1, r5 - 80131e4: 4620 mov r0, r4 - 80131e6: 9207 str r2, [sp, #28] - 80131e8: f000 fe25 bl 8013e36 <_Bfree> - 80131ec: e9dd 3206 ldrd r3, r2, [sp, #24] - 80131f0: ea43 0102 orr.w r1, r3, r2 - 80131f4: 9b04 ldr r3, [sp, #16] - 80131f6: 430b orrs r3, r1 - 80131f8: 464d mov r5, r9 - 80131fa: d10f bne.n 801321c <_dtoa_r+0xa34> - 80131fc: f1ba 0f39 cmp.w sl, #57 ; 0x39 - 8013200: d02a beq.n 8013258 <_dtoa_r+0xa70> - 8013202: 9b03 ldr r3, [sp, #12] - 8013204: 2b00 cmp r3, #0 - 8013206: dd02 ble.n 801320e <_dtoa_r+0xa26> - 8013208: 9b02 ldr r3, [sp, #8] - 801320a: f103 0a31 add.w sl, r3, #49 ; 0x31 - 801320e: f88b a000 strb.w sl, [fp] - 8013212: e776 b.n 8013102 <_dtoa_r+0x91a> - 8013214: 4638 mov r0, r7 - 8013216: e7ba b.n 801318e <_dtoa_r+0x9a6> - 8013218: 2201 movs r2, #1 - 801321a: e7e2 b.n 80131e2 <_dtoa_r+0x9fa> - 801321c: 9b03 ldr r3, [sp, #12] - 801321e: 2b00 cmp r3, #0 - 8013220: db04 blt.n 801322c <_dtoa_r+0xa44> - 8013222: 9906 ldr r1, [sp, #24] - 8013224: 430b orrs r3, r1 - 8013226: 9904 ldr r1, [sp, #16] - 8013228: 430b orrs r3, r1 - 801322a: d122 bne.n 8013272 <_dtoa_r+0xa8a> - 801322c: 2a00 cmp r2, #0 - 801322e: ddee ble.n 801320e <_dtoa_r+0xa26> - 8013230: ee18 1a10 vmov r1, s16 - 8013234: 2201 movs r2, #1 - 8013236: 4620 mov r0, r4 - 8013238: f000 ff9c bl 8014174 <__lshift> - 801323c: 4631 mov r1, r6 - 801323e: ee08 0a10 vmov s16, r0 - 8013242: f001 f807 bl 8014254 <__mcmp> - 8013246: 2800 cmp r0, #0 - 8013248: dc03 bgt.n 8013252 <_dtoa_r+0xa6a> - 801324a: d1e0 bne.n 801320e <_dtoa_r+0xa26> - 801324c: f01a 0f01 tst.w sl, #1 - 8013250: d0dd beq.n 801320e <_dtoa_r+0xa26> - 8013252: f1ba 0f39 cmp.w sl, #57 ; 0x39 - 8013256: d1d7 bne.n 8013208 <_dtoa_r+0xa20> - 8013258: 2339 movs r3, #57 ; 0x39 - 801325a: f88b 3000 strb.w r3, [fp] - 801325e: 462b mov r3, r5 - 8013260: 461d mov r5, r3 - 8013262: 3b01 subs r3, #1 - 8013264: f815 2c01 ldrb.w r2, [r5, #-1] - 8013268: 2a39 cmp r2, #57 ; 0x39 - 801326a: d071 beq.n 8013350 <_dtoa_r+0xb68> - 801326c: 3201 adds r2, #1 - 801326e: 701a strb r2, [r3, #0] - 8013270: e747 b.n 8013102 <_dtoa_r+0x91a> - 8013272: 2a00 cmp r2, #0 - 8013274: dd07 ble.n 8013286 <_dtoa_r+0xa9e> - 8013276: f1ba 0f39 cmp.w sl, #57 ; 0x39 - 801327a: d0ed beq.n 8013258 <_dtoa_r+0xa70> - 801327c: f10a 0301 add.w r3, sl, #1 - 8013280: f88b 3000 strb.w r3, [fp] - 8013284: e73d b.n 8013102 <_dtoa_r+0x91a> - 8013286: 9b05 ldr r3, [sp, #20] - 8013288: f809 ac01 strb.w sl, [r9, #-1] - 801328c: 4599 cmp r9, r3 - 801328e: d047 beq.n 8013320 <_dtoa_r+0xb38> - 8013290: ee18 1a10 vmov r1, s16 - 8013294: 2300 movs r3, #0 - 8013296: 220a movs r2, #10 - 8013298: 4620 mov r0, r4 - 801329a: f000 fdd5 bl 8013e48 <__multadd> - 801329e: 45b8 cmp r8, r7 - 80132a0: ee08 0a10 vmov s16, r0 - 80132a4: f04f 0300 mov.w r3, #0 - 80132a8: f04f 020a mov.w r2, #10 - 80132ac: 4641 mov r1, r8 - 80132ae: 4620 mov r0, r4 - 80132b0: d106 bne.n 80132c0 <_dtoa_r+0xad8> - 80132b2: f000 fdc9 bl 8013e48 <__multadd> - 80132b6: 4680 mov r8, r0 - 80132b8: 4607 mov r7, r0 - 80132ba: f109 0901 add.w r9, r9, #1 - 80132be: e772 b.n 80131a6 <_dtoa_r+0x9be> - 80132c0: f000 fdc2 bl 8013e48 <__multadd> - 80132c4: 4639 mov r1, r7 - 80132c6: 4680 mov r8, r0 - 80132c8: 2300 movs r3, #0 - 80132ca: 220a movs r2, #10 - 80132cc: 4620 mov r0, r4 - 80132ce: f000 fdbb bl 8013e48 <__multadd> - 80132d2: 4607 mov r7, r0 - 80132d4: e7f1 b.n 80132ba <_dtoa_r+0xad2> - 80132d6: 9b03 ldr r3, [sp, #12] - 80132d8: 9302 str r3, [sp, #8] - 80132da: 9d01 ldr r5, [sp, #4] - 80132dc: ee18 0a10 vmov r0, s16 - 80132e0: 4631 mov r1, r6 - 80132e2: f7ff f9f3 bl 80126cc - 80132e6: f100 0a30 add.w sl, r0, #48 ; 0x30 - 80132ea: 9b01 ldr r3, [sp, #4] - 80132ec: f805 ab01 strb.w sl, [r5], #1 - 80132f0: 1aea subs r2, r5, r3 - 80132f2: 9b02 ldr r3, [sp, #8] - 80132f4: 4293 cmp r3, r2 - 80132f6: dd09 ble.n 801330c <_dtoa_r+0xb24> - 80132f8: ee18 1a10 vmov r1, s16 - 80132fc: 2300 movs r3, #0 - 80132fe: 220a movs r2, #10 - 8013300: 4620 mov r0, r4 - 8013302: f000 fda1 bl 8013e48 <__multadd> - 8013306: ee08 0a10 vmov s16, r0 - 801330a: e7e7 b.n 80132dc <_dtoa_r+0xaf4> - 801330c: 9b02 ldr r3, [sp, #8] - 801330e: 2b00 cmp r3, #0 - 8013310: bfc8 it gt - 8013312: 461d movgt r5, r3 - 8013314: 9b01 ldr r3, [sp, #4] - 8013316: bfd8 it le - 8013318: 2501 movle r5, #1 - 801331a: 441d add r5, r3 - 801331c: f04f 0800 mov.w r8, #0 - 8013320: ee18 1a10 vmov r1, s16 - 8013324: 2201 movs r2, #1 - 8013326: 4620 mov r0, r4 - 8013328: f000 ff24 bl 8014174 <__lshift> - 801332c: 4631 mov r1, r6 - 801332e: ee08 0a10 vmov s16, r0 - 8013332: f000 ff8f bl 8014254 <__mcmp> - 8013336: 2800 cmp r0, #0 - 8013338: dc91 bgt.n 801325e <_dtoa_r+0xa76> - 801333a: d102 bne.n 8013342 <_dtoa_r+0xb5a> - 801333c: f01a 0f01 tst.w sl, #1 - 8013340: d18d bne.n 801325e <_dtoa_r+0xa76> - 8013342: 462b mov r3, r5 - 8013344: 461d mov r5, r3 - 8013346: f813 2d01 ldrb.w r2, [r3, #-1]! - 801334a: 2a30 cmp r2, #48 ; 0x30 - 801334c: d0fa beq.n 8013344 <_dtoa_r+0xb5c> - 801334e: e6d8 b.n 8013102 <_dtoa_r+0x91a> - 8013350: 9a01 ldr r2, [sp, #4] - 8013352: 429a cmp r2, r3 - 8013354: d184 bne.n 8013260 <_dtoa_r+0xa78> - 8013356: 9b00 ldr r3, [sp, #0] - 8013358: 3301 adds r3, #1 - 801335a: 9300 str r3, [sp, #0] - 801335c: 2331 movs r3, #49 ; 0x31 - 801335e: 7013 strb r3, [r2, #0] - 8013360: e6cf b.n 8013102 <_dtoa_r+0x91a> - 8013362: 4b0a ldr r3, [pc, #40] ; (801338c <_dtoa_r+0xba4>) - 8013364: f7ff ba97 b.w 8012896 <_dtoa_r+0xae> - 8013368: 9b21 ldr r3, [sp, #132] ; 0x84 - 801336a: 2b00 cmp r3, #0 - 801336c: f47f aa7b bne.w 8012866 <_dtoa_r+0x7e> - 8013370: 4b07 ldr r3, [pc, #28] ; (8013390 <_dtoa_r+0xba8>) - 8013372: f7ff ba90 b.w 8012896 <_dtoa_r+0xae> - 8013376: 9b02 ldr r3, [sp, #8] - 8013378: 2b00 cmp r3, #0 - 801337a: dcae bgt.n 80132da <_dtoa_r+0xaf2> - 801337c: 9b06 ldr r3, [sp, #24] - 801337e: 2b02 cmp r3, #2 - 8013380: f73f aea9 bgt.w 80130d6 <_dtoa_r+0x8ee> - 8013384: e7a9 b.n 80132da <_dtoa_r+0xaf2> - 8013386: bf00 nop - 8013388: 08018c49 .word 0x08018c49 - 801338c: 08018c1a .word 0x08018c1a - 8013390: 08018c40 .word 0x08018c40 - -08013394 <__errno>: - 8013394: 4b01 ldr r3, [pc, #4] ; (801339c <__errno+0x8>) - 8013396: 6818 ldr r0, [r3, #0] - 8013398: 4770 bx lr - 801339a: bf00 nop - 801339c: 20000030 .word 0x20000030 - -080133a0 <__sflush_r>: - 80133a0: 898b ldrh r3, [r1, #12] - 80133a2: f9b1 200c ldrsh.w r2, [r1, #12] - 80133a6: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 80133aa: 4605 mov r5, r0 - 80133ac: 0718 lsls r0, r3, #28 - 80133ae: 460c mov r4, r1 - 80133b0: d45f bmi.n 8013472 <__sflush_r+0xd2> - 80133b2: 684b ldr r3, [r1, #4] - 80133b4: f442 6200 orr.w r2, r2, #2048 ; 0x800 - 80133b8: 2b00 cmp r3, #0 - 80133ba: 818a strh r2, [r1, #12] - 80133bc: dc05 bgt.n 80133ca <__sflush_r+0x2a> - 80133be: 6bcb ldr r3, [r1, #60] ; 0x3c - 80133c0: 2b00 cmp r3, #0 - 80133c2: dc02 bgt.n 80133ca <__sflush_r+0x2a> - 80133c4: 2000 movs r0, #0 - 80133c6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 80133ca: 6aa6 ldr r6, [r4, #40] ; 0x28 - 80133cc: 2e00 cmp r6, #0 - 80133ce: d0f9 beq.n 80133c4 <__sflush_r+0x24> - 80133d0: 2300 movs r3, #0 - 80133d2: f412 5280 ands.w r2, r2, #4096 ; 0x1000 - 80133d6: 682f ldr r7, [r5, #0] - 80133d8: 602b str r3, [r5, #0] - 80133da: d036 beq.n 801344a <__sflush_r+0xaa> - 80133dc: 6d20 ldr r0, [r4, #80] ; 0x50 - 80133de: 89a3 ldrh r3, [r4, #12] - 80133e0: 075a lsls r2, r3, #29 - 80133e2: d505 bpl.n 80133f0 <__sflush_r+0x50> - 80133e4: 6863 ldr r3, [r4, #4] - 80133e6: 1ac0 subs r0, r0, r3 - 80133e8: 6b23 ldr r3, [r4, #48] ; 0x30 - 80133ea: b10b cbz r3, 80133f0 <__sflush_r+0x50> - 80133ec: 6be3 ldr r3, [r4, #60] ; 0x3c - 80133ee: 1ac0 subs r0, r0, r3 - 80133f0: 2300 movs r3, #0 - 80133f2: 4602 mov r2, r0 - 80133f4: 6aa6 ldr r6, [r4, #40] ; 0x28 - 80133f6: 69e1 ldr r1, [r4, #28] - 80133f8: 4628 mov r0, r5 - 80133fa: 47b0 blx r6 - 80133fc: 1c43 adds r3, r0, #1 - 80133fe: 89a3 ldrh r3, [r4, #12] - 8013400: d106 bne.n 8013410 <__sflush_r+0x70> - 8013402: 6829 ldr r1, [r5, #0] - 8013404: 291d cmp r1, #29 - 8013406: d830 bhi.n 801346a <__sflush_r+0xca> - 8013408: 4a2b ldr r2, [pc, #172] ; (80134b8 <__sflush_r+0x118>) - 801340a: 40ca lsrs r2, r1 - 801340c: 07d6 lsls r6, r2, #31 - 801340e: d52c bpl.n 801346a <__sflush_r+0xca> - 8013410: f423 6300 bic.w r3, r3, #2048 ; 0x800 - 8013414: b21b sxth r3, r3 - 8013416: 2200 movs r2, #0 - 8013418: 6062 str r2, [r4, #4] - 801341a: 04d9 lsls r1, r3, #19 - 801341c: 6922 ldr r2, [r4, #16] - 801341e: 81a3 strh r3, [r4, #12] - 8013420: 6022 str r2, [r4, #0] - 8013422: d504 bpl.n 801342e <__sflush_r+0x8e> - 8013424: 1c42 adds r2, r0, #1 - 8013426: d101 bne.n 801342c <__sflush_r+0x8c> - 8013428: 682b ldr r3, [r5, #0] - 801342a: b903 cbnz r3, 801342e <__sflush_r+0x8e> - 801342c: 6520 str r0, [r4, #80] ; 0x50 - 801342e: 6b21 ldr r1, [r4, #48] ; 0x30 - 8013430: 602f str r7, [r5, #0] - 8013432: 2900 cmp r1, #0 - 8013434: d0c6 beq.n 80133c4 <__sflush_r+0x24> - 8013436: f104 0340 add.w r3, r4, #64 ; 0x40 - 801343a: 4299 cmp r1, r3 - 801343c: d002 beq.n 8013444 <__sflush_r+0xa4> - 801343e: 4628 mov r0, r5 - 8013440: f000 f938 bl 80136b4 <_free_r> - 8013444: 2000 movs r0, #0 - 8013446: 6320 str r0, [r4, #48] ; 0x30 - 8013448: e7bd b.n 80133c6 <__sflush_r+0x26> - 801344a: 69e1 ldr r1, [r4, #28] - 801344c: 2301 movs r3, #1 - 801344e: 4628 mov r0, r5 - 8013450: 47b0 blx r6 - 8013452: 1c41 adds r1, r0, #1 - 8013454: d1c3 bne.n 80133de <__sflush_r+0x3e> - 8013456: 682b ldr r3, [r5, #0] - 8013458: 2b00 cmp r3, #0 - 801345a: d0c0 beq.n 80133de <__sflush_r+0x3e> - 801345c: 2b1d cmp r3, #29 - 801345e: d001 beq.n 8013464 <__sflush_r+0xc4> - 8013460: 2b16 cmp r3, #22 - 8013462: d101 bne.n 8013468 <__sflush_r+0xc8> - 8013464: 602f str r7, [r5, #0] - 8013466: e7ad b.n 80133c4 <__sflush_r+0x24> - 8013468: 89a3 ldrh r3, [r4, #12] - 801346a: f043 0340 orr.w r3, r3, #64 ; 0x40 - 801346e: 81a3 strh r3, [r4, #12] - 8013470: e7a9 b.n 80133c6 <__sflush_r+0x26> - 8013472: 690f ldr r7, [r1, #16] - 8013474: 2f00 cmp r7, #0 - 8013476: d0a5 beq.n 80133c4 <__sflush_r+0x24> - 8013478: 079b lsls r3, r3, #30 - 801347a: 680e ldr r6, [r1, #0] - 801347c: bf08 it eq - 801347e: 694b ldreq r3, [r1, #20] - 8013480: 600f str r7, [r1, #0] - 8013482: bf18 it ne - 8013484: 2300 movne r3, #0 - 8013486: eba6 0807 sub.w r8, r6, r7 - 801348a: 608b str r3, [r1, #8] - 801348c: f1b8 0f00 cmp.w r8, #0 - 8013490: dd98 ble.n 80133c4 <__sflush_r+0x24> - 8013492: 69e1 ldr r1, [r4, #28] - 8013494: 6a66 ldr r6, [r4, #36] ; 0x24 - 8013496: 4643 mov r3, r8 - 8013498: 463a mov r2, r7 - 801349a: 4628 mov r0, r5 - 801349c: 47b0 blx r6 - 801349e: 2800 cmp r0, #0 - 80134a0: dc06 bgt.n 80134b0 <__sflush_r+0x110> - 80134a2: 89a3 ldrh r3, [r4, #12] - 80134a4: f043 0340 orr.w r3, r3, #64 ; 0x40 - 80134a8: 81a3 strh r3, [r4, #12] - 80134aa: f04f 30ff mov.w r0, #4294967295 - 80134ae: e78a b.n 80133c6 <__sflush_r+0x26> - 80134b0: 4407 add r7, r0 - 80134b2: eba8 0800 sub.w r8, r8, r0 - 80134b6: e7e9 b.n 801348c <__sflush_r+0xec> - 80134b8: 20400001 .word 0x20400001 - -080134bc <_fflush_r>: - 80134bc: b538 push {r3, r4, r5, lr} - 80134be: 460c mov r4, r1 - 80134c0: 4605 mov r5, r0 - 80134c2: b118 cbz r0, 80134cc <_fflush_r+0x10> - 80134c4: 6b83 ldr r3, [r0, #56] ; 0x38 - 80134c6: b90b cbnz r3, 80134cc <_fflush_r+0x10> - 80134c8: f000 f864 bl 8013594 <__sinit> - 80134cc: f9b4 300c ldrsh.w r3, [r4, #12] - 80134d0: b1bb cbz r3, 8013502 <_fflush_r+0x46> - 80134d2: 6e62 ldr r2, [r4, #100] ; 0x64 - 80134d4: 07d0 lsls r0, r2, #31 - 80134d6: d404 bmi.n 80134e2 <_fflush_r+0x26> - 80134d8: 0599 lsls r1, r3, #22 - 80134da: d402 bmi.n 80134e2 <_fflush_r+0x26> - 80134dc: 6da0 ldr r0, [r4, #88] ; 0x58 - 80134de: f000 f9cf bl 8013880 <__retarget_lock_acquire_recursive> - 80134e2: 4628 mov r0, r5 - 80134e4: 4621 mov r1, r4 - 80134e6: f7ff ff5b bl 80133a0 <__sflush_r> - 80134ea: 6e63 ldr r3, [r4, #100] ; 0x64 - 80134ec: 07da lsls r2, r3, #31 - 80134ee: 4605 mov r5, r0 - 80134f0: d405 bmi.n 80134fe <_fflush_r+0x42> - 80134f2: 89a3 ldrh r3, [r4, #12] - 80134f4: 059b lsls r3, r3, #22 - 80134f6: d402 bmi.n 80134fe <_fflush_r+0x42> - 80134f8: 6da0 ldr r0, [r4, #88] ; 0x58 - 80134fa: f000 f9c2 bl 8013882 <__retarget_lock_release_recursive> - 80134fe: 4628 mov r0, r5 - 8013500: bd38 pop {r3, r4, r5, pc} - 8013502: 461d mov r5, r3 - 8013504: e7fb b.n 80134fe <_fflush_r+0x42> - ... - -08013508 : - 8013508: 2300 movs r3, #0 - 801350a: b510 push {r4, lr} - 801350c: 4604 mov r4, r0 - 801350e: e9c0 3300 strd r3, r3, [r0] - 8013512: e9c0 3304 strd r3, r3, [r0, #16] - 8013516: 6083 str r3, [r0, #8] - 8013518: 8181 strh r1, [r0, #12] - 801351a: 6643 str r3, [r0, #100] ; 0x64 - 801351c: 81c2 strh r2, [r0, #14] - 801351e: 6183 str r3, [r0, #24] - 8013520: 4619 mov r1, r3 - 8013522: 2208 movs r2, #8 - 8013524: 305c adds r0, #92 ; 0x5c - 8013526: f7fd fdb7 bl 8011098 - 801352a: 4b07 ldr r3, [pc, #28] ; (8013548 ) - 801352c: 6223 str r3, [r4, #32] - 801352e: 4b07 ldr r3, [pc, #28] ; (801354c ) - 8013530: 6263 str r3, [r4, #36] ; 0x24 - 8013532: 4b07 ldr r3, [pc, #28] ; (8013550 ) - 8013534: 62a3 str r3, [r4, #40] ; 0x28 - 8013536: 4b07 ldr r3, [pc, #28] ; (8013554 ) - 8013538: 61e4 str r4, [r4, #28] - 801353a: 62e3 str r3, [r4, #44] ; 0x2c - 801353c: f104 0058 add.w r0, r4, #88 ; 0x58 - 8013540: e8bd 4010 ldmia.w sp!, {r4, lr} - 8013544: f000 b99a b.w 801387c <__retarget_lock_init_recursive> - 8013548: 080144e9 .word 0x080144e9 - 801354c: 0801450b .word 0x0801450b - 8013550: 08014543 .word 0x08014543 - 8013554: 08014567 .word 0x08014567 - -08013558 <_cleanup_r>: - 8013558: 4901 ldr r1, [pc, #4] ; (8013560 <_cleanup_r+0x8>) - 801355a: f000 b96b b.w 8013834 <_fwalk_reent> - 801355e: bf00 nop - 8013560: 08015131 .word 0x08015131 - -08013564 <__sfp_lock_acquire>: - 8013564: 4801 ldr r0, [pc, #4] ; (801356c <__sfp_lock_acquire+0x8>) - 8013566: f000 b98b b.w 8013880 <__retarget_lock_acquire_recursive> - 801356a: bf00 nop - 801356c: 20009b64 .word 0x20009b64 - -08013570 <__sfp_lock_release>: - 8013570: 4801 ldr r0, [pc, #4] ; (8013578 <__sfp_lock_release+0x8>) - 8013572: f000 b986 b.w 8013882 <__retarget_lock_release_recursive> - 8013576: bf00 nop - 8013578: 20009b64 .word 0x20009b64 - -0801357c <__sinit_lock_acquire>: - 801357c: 4801 ldr r0, [pc, #4] ; (8013584 <__sinit_lock_acquire+0x8>) - 801357e: f000 b97f b.w 8013880 <__retarget_lock_acquire_recursive> - 8013582: bf00 nop - 8013584: 20009b65 .word 0x20009b65 - -08013588 <__sinit_lock_release>: - 8013588: 4801 ldr r0, [pc, #4] ; (8013590 <__sinit_lock_release+0x8>) - 801358a: f000 b97a b.w 8013882 <__retarget_lock_release_recursive> - 801358e: bf00 nop - 8013590: 20009b65 .word 0x20009b65 - -08013594 <__sinit>: - 8013594: b510 push {r4, lr} - 8013596: 4604 mov r4, r0 - 8013598: f7ff fff0 bl 801357c <__sinit_lock_acquire> - 801359c: 6ba2 ldr r2, [r4, #56] ; 0x38 - 801359e: b11a cbz r2, 80135a8 <__sinit+0x14> - 80135a0: e8bd 4010 ldmia.w sp!, {r4, lr} - 80135a4: f7ff bff0 b.w 8013588 <__sinit_lock_release> - 80135a8: 4b0d ldr r3, [pc, #52] ; (80135e0 <__sinit+0x4c>) - 80135aa: 63e3 str r3, [r4, #60] ; 0x3c - 80135ac: 2303 movs r3, #3 - 80135ae: f8c4 32e4 str.w r3, [r4, #740] ; 0x2e4 - 80135b2: f504 733b add.w r3, r4, #748 ; 0x2ec - 80135b6: f8c4 32e8 str.w r3, [r4, #744] ; 0x2e8 - 80135ba: 6860 ldr r0, [r4, #4] - 80135bc: f8c4 22e0 str.w r2, [r4, #736] ; 0x2e0 - 80135c0: 2104 movs r1, #4 - 80135c2: f7ff ffa1 bl 8013508 - 80135c6: 68a0 ldr r0, [r4, #8] - 80135c8: 2201 movs r2, #1 - 80135ca: 2109 movs r1, #9 - 80135cc: f7ff ff9c bl 8013508 - 80135d0: 68e0 ldr r0, [r4, #12] - 80135d2: 2202 movs r2, #2 - 80135d4: 2112 movs r1, #18 - 80135d6: f7ff ff97 bl 8013508 - 80135da: 2301 movs r3, #1 - 80135dc: 63a3 str r3, [r4, #56] ; 0x38 - 80135de: e7df b.n 80135a0 <__sinit+0xc> - 80135e0: 08013559 .word 0x08013559 - -080135e4 <__libc_fini_array>: - 80135e4: b538 push {r3, r4, r5, lr} - 80135e6: 4d07 ldr r5, [pc, #28] ; (8013604 <__libc_fini_array+0x20>) - 80135e8: 4c07 ldr r4, [pc, #28] ; (8013608 <__libc_fini_array+0x24>) - 80135ea: 1b64 subs r4, r4, r5 - 80135ec: 10a4 asrs r4, r4, #2 - 80135ee: b91c cbnz r4, 80135f8 <__libc_fini_array+0x14> - 80135f0: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} - 80135f4: f002 bace b.w 8015b94 <_fini> - 80135f8: 3c01 subs r4, #1 - 80135fa: f855 3024 ldr.w r3, [r5, r4, lsl #2] - 80135fe: 4798 blx r3 - 8013600: e7f5 b.n 80135ee <__libc_fini_array+0xa> - 8013602: bf00 nop - 8013604: 08018e8c .word 0x08018e8c - 8013608: 08018e90 .word 0x08018e90 - -0801360c <_malloc_trim_r>: - 801360c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 8013610: 4606 mov r6, r0 - 8013612: 2008 movs r0, #8 - 8013614: 460c mov r4, r1 - 8013616: f000 ffbd bl 8014594 - 801361a: 4f23 ldr r7, [pc, #140] ; (80136a8 <_malloc_trim_r+0x9c>) - 801361c: 4680 mov r8, r0 - 801361e: 4630 mov r0, r6 - 8013620: f000 fbd8 bl 8013dd4 <__malloc_lock> - 8013624: 68bb ldr r3, [r7, #8] - 8013626: 685d ldr r5, [r3, #4] - 8013628: f025 0503 bic.w r5, r5, #3 - 801362c: 1b2c subs r4, r5, r4 - 801362e: 3c11 subs r4, #17 - 8013630: 4444 add r4, r8 - 8013632: fbb4 f4f8 udiv r4, r4, r8 - 8013636: 3c01 subs r4, #1 - 8013638: fb08 f404 mul.w r4, r8, r4 - 801363c: 45a0 cmp r8, r4 - 801363e: dd05 ble.n 801364c <_malloc_trim_r+0x40> - 8013640: 4630 mov r0, r6 - 8013642: f000 fbcd bl 8013de0 <__malloc_unlock> - 8013646: 2000 movs r0, #0 - 8013648: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 801364c: 2100 movs r1, #0 - 801364e: 4630 mov r0, r6 - 8013650: f000 ff3a bl 80144c8 <_sbrk_r> - 8013654: 68bb ldr r3, [r7, #8] - 8013656: 442b add r3, r5 - 8013658: 4298 cmp r0, r3 - 801365a: d1f1 bne.n 8013640 <_malloc_trim_r+0x34> - 801365c: 4261 negs r1, r4 - 801365e: 4630 mov r0, r6 - 8013660: f000 ff32 bl 80144c8 <_sbrk_r> - 8013664: 3001 adds r0, #1 - 8013666: d110 bne.n 801368a <_malloc_trim_r+0x7e> - 8013668: 2100 movs r1, #0 - 801366a: 4630 mov r0, r6 - 801366c: f000 ff2c bl 80144c8 <_sbrk_r> - 8013670: 68ba ldr r2, [r7, #8] - 8013672: 1a83 subs r3, r0, r2 - 8013674: 2b0f cmp r3, #15 - 8013676: dde3 ble.n 8013640 <_malloc_trim_r+0x34> - 8013678: 490c ldr r1, [pc, #48] ; (80136ac <_malloc_trim_r+0xa0>) - 801367a: 6809 ldr r1, [r1, #0] - 801367c: 1a40 subs r0, r0, r1 - 801367e: 490c ldr r1, [pc, #48] ; (80136b0 <_malloc_trim_r+0xa4>) - 8013680: f043 0301 orr.w r3, r3, #1 - 8013684: 6008 str r0, [r1, #0] - 8013686: 6053 str r3, [r2, #4] - 8013688: e7da b.n 8013640 <_malloc_trim_r+0x34> - 801368a: 68bb ldr r3, [r7, #8] - 801368c: 4a08 ldr r2, [pc, #32] ; (80136b0 <_malloc_trim_r+0xa4>) - 801368e: 1b2d subs r5, r5, r4 - 8013690: f045 0501 orr.w r5, r5, #1 - 8013694: 605d str r5, [r3, #4] - 8013696: 6813 ldr r3, [r2, #0] - 8013698: 4630 mov r0, r6 - 801369a: 1b1b subs r3, r3, r4 - 801369c: 6013 str r3, [r2, #0] - 801369e: f000 fb9f bl 8013de0 <__malloc_unlock> - 80136a2: 2001 movs r0, #1 - 80136a4: e7d0 b.n 8013648 <_malloc_trim_r+0x3c> - 80136a6: bf00 nop - 80136a8: 20000464 .word 0x20000464 - 80136ac: 2000086c .word 0x2000086c - 80136b0: 20009b68 .word 0x20009b68 - -080136b4 <_free_r>: - 80136b4: b5f8 push {r3, r4, r5, r6, r7, lr} - 80136b6: 4605 mov r5, r0 - 80136b8: 460f mov r7, r1 - 80136ba: 2900 cmp r1, #0 - 80136bc: f000 80b1 beq.w 8013822 <_free_r+0x16e> - 80136c0: f000 fb88 bl 8013dd4 <__malloc_lock> - 80136c4: f857 2c04 ldr.w r2, [r7, #-4] - 80136c8: 4856 ldr r0, [pc, #344] ; (8013824 <_free_r+0x170>) - 80136ca: f022 0401 bic.w r4, r2, #1 - 80136ce: f1a7 0308 sub.w r3, r7, #8 - 80136d2: eb03 0c04 add.w ip, r3, r4 - 80136d6: 6881 ldr r1, [r0, #8] - 80136d8: f8dc 6004 ldr.w r6, [ip, #4] - 80136dc: 4561 cmp r1, ip - 80136de: f026 0603 bic.w r6, r6, #3 - 80136e2: f002 0201 and.w r2, r2, #1 - 80136e6: d11b bne.n 8013720 <_free_r+0x6c> - 80136e8: 4434 add r4, r6 - 80136ea: b93a cbnz r2, 80136fc <_free_r+0x48> - 80136ec: f857 2c08 ldr.w r2, [r7, #-8] - 80136f0: 1a9b subs r3, r3, r2 - 80136f2: 4414 add r4, r2 - 80136f4: e9d3 1202 ldrd r1, r2, [r3, #8] - 80136f8: 60ca str r2, [r1, #12] - 80136fa: 6091 str r1, [r2, #8] - 80136fc: f044 0201 orr.w r2, r4, #1 - 8013700: 605a str r2, [r3, #4] - 8013702: 6083 str r3, [r0, #8] - 8013704: 4b48 ldr r3, [pc, #288] ; (8013828 <_free_r+0x174>) - 8013706: 681b ldr r3, [r3, #0] - 8013708: 42a3 cmp r3, r4 - 801370a: d804 bhi.n 8013716 <_free_r+0x62> - 801370c: 4b47 ldr r3, [pc, #284] ; (801382c <_free_r+0x178>) - 801370e: 4628 mov r0, r5 - 8013710: 6819 ldr r1, [r3, #0] - 8013712: f7ff ff7b bl 801360c <_malloc_trim_r> - 8013716: 4628 mov r0, r5 - 8013718: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} - 801371c: f000 bb60 b.w 8013de0 <__malloc_unlock> - 8013720: f8cc 6004 str.w r6, [ip, #4] - 8013724: 2a00 cmp r2, #0 - 8013726: d138 bne.n 801379a <_free_r+0xe6> - 8013728: f857 1c08 ldr.w r1, [r7, #-8] - 801372c: 1a5b subs r3, r3, r1 - 801372e: 440c add r4, r1 - 8013730: 6899 ldr r1, [r3, #8] - 8013732: f100 0708 add.w r7, r0, #8 - 8013736: 42b9 cmp r1, r7 - 8013738: d031 beq.n 801379e <_free_r+0xea> - 801373a: 68df ldr r7, [r3, #12] - 801373c: 60cf str r7, [r1, #12] - 801373e: 60b9 str r1, [r7, #8] - 8013740: eb0c 0106 add.w r1, ip, r6 - 8013744: 6849 ldr r1, [r1, #4] - 8013746: 07c9 lsls r1, r1, #31 - 8013748: d40b bmi.n 8013762 <_free_r+0xae> - 801374a: f8dc 1008 ldr.w r1, [ip, #8] - 801374e: 4434 add r4, r6 - 8013750: bb3a cbnz r2, 80137a2 <_free_r+0xee> - 8013752: 4e37 ldr r6, [pc, #220] ; (8013830 <_free_r+0x17c>) - 8013754: 42b1 cmp r1, r6 - 8013756: d124 bne.n 80137a2 <_free_r+0xee> - 8013758: e9c0 3304 strd r3, r3, [r0, #16] - 801375c: e9c3 1102 strd r1, r1, [r3, #8] - 8013760: 2201 movs r2, #1 - 8013762: f044 0101 orr.w r1, r4, #1 - 8013766: 6059 str r1, [r3, #4] - 8013768: 511c str r4, [r3, r4] - 801376a: 2a00 cmp r2, #0 - 801376c: d1d3 bne.n 8013716 <_free_r+0x62> - 801376e: f5b4 7f00 cmp.w r4, #512 ; 0x200 - 8013772: d21b bcs.n 80137ac <_free_r+0xf8> - 8013774: 0961 lsrs r1, r4, #5 - 8013776: 08e2 lsrs r2, r4, #3 - 8013778: 2401 movs r4, #1 - 801377a: 408c lsls r4, r1 - 801377c: 6841 ldr r1, [r0, #4] - 801377e: 3201 adds r2, #1 - 8013780: 430c orrs r4, r1 - 8013782: 6044 str r4, [r0, #4] - 8013784: eb00 01c2 add.w r1, r0, r2, lsl #3 - 8013788: f850 4032 ldr.w r4, [r0, r2, lsl #3] - 801378c: 3908 subs r1, #8 - 801378e: e9c3 4102 strd r4, r1, [r3, #8] - 8013792: f840 3032 str.w r3, [r0, r2, lsl #3] - 8013796: 60e3 str r3, [r4, #12] - 8013798: e7bd b.n 8013716 <_free_r+0x62> - 801379a: 2200 movs r2, #0 - 801379c: e7d0 b.n 8013740 <_free_r+0x8c> - 801379e: 2201 movs r2, #1 - 80137a0: e7ce b.n 8013740 <_free_r+0x8c> - 80137a2: f8dc 600c ldr.w r6, [ip, #12] - 80137a6: 60ce str r6, [r1, #12] - 80137a8: 60b1 str r1, [r6, #8] - 80137aa: e7da b.n 8013762 <_free_r+0xae> - 80137ac: f5b4 6f20 cmp.w r4, #2560 ; 0xa00 - 80137b0: ea4f 2254 mov.w r2, r4, lsr #9 - 80137b4: d214 bcs.n 80137e0 <_free_r+0x12c> - 80137b6: 09a2 lsrs r2, r4, #6 - 80137b8: 3238 adds r2, #56 ; 0x38 - 80137ba: 1c51 adds r1, r2, #1 - 80137bc: eb00 06c2 add.w r6, r0, r2, lsl #3 - 80137c0: f850 1031 ldr.w r1, [r0, r1, lsl #3] - 80137c4: 428e cmp r6, r1 - 80137c6: d125 bne.n 8013814 <_free_r+0x160> - 80137c8: 2401 movs r4, #1 - 80137ca: 1092 asrs r2, r2, #2 - 80137cc: fa04 f202 lsl.w r2, r4, r2 - 80137d0: 6844 ldr r4, [r0, #4] - 80137d2: 4322 orrs r2, r4 - 80137d4: 6042 str r2, [r0, #4] - 80137d6: e9c3 1602 strd r1, r6, [r3, #8] - 80137da: 60b3 str r3, [r6, #8] - 80137dc: 60cb str r3, [r1, #12] - 80137de: e79a b.n 8013716 <_free_r+0x62> - 80137e0: 2a14 cmp r2, #20 - 80137e2: d801 bhi.n 80137e8 <_free_r+0x134> - 80137e4: 325b adds r2, #91 ; 0x5b - 80137e6: e7e8 b.n 80137ba <_free_r+0x106> - 80137e8: 2a54 cmp r2, #84 ; 0x54 - 80137ea: d802 bhi.n 80137f2 <_free_r+0x13e> - 80137ec: 0b22 lsrs r2, r4, #12 - 80137ee: 326e adds r2, #110 ; 0x6e - 80137f0: e7e3 b.n 80137ba <_free_r+0x106> - 80137f2: f5b2 7faa cmp.w r2, #340 ; 0x154 - 80137f6: d802 bhi.n 80137fe <_free_r+0x14a> - 80137f8: 0be2 lsrs r2, r4, #15 - 80137fa: 3277 adds r2, #119 ; 0x77 - 80137fc: e7dd b.n 80137ba <_free_r+0x106> - 80137fe: f240 5154 movw r1, #1364 ; 0x554 - 8013802: 428a cmp r2, r1 - 8013804: bf9a itte ls - 8013806: 0ca2 lsrls r2, r4, #18 - 8013808: 327c addls r2, #124 ; 0x7c - 801380a: 227e movhi r2, #126 ; 0x7e - 801380c: e7d5 b.n 80137ba <_free_r+0x106> - 801380e: 6889 ldr r1, [r1, #8] - 8013810: 428e cmp r6, r1 - 8013812: d004 beq.n 801381e <_free_r+0x16a> - 8013814: 684a ldr r2, [r1, #4] - 8013816: f022 0203 bic.w r2, r2, #3 - 801381a: 42a2 cmp r2, r4 - 801381c: d8f7 bhi.n 801380e <_free_r+0x15a> - 801381e: 68ce ldr r6, [r1, #12] - 8013820: e7d9 b.n 80137d6 <_free_r+0x122> - 8013822: bdf8 pop {r3, r4, r5, r6, r7, pc} - 8013824: 20000464 .word 0x20000464 - 8013828: 20000870 .word 0x20000870 - 801382c: 20009b98 .word 0x20009b98 - 8013830: 2000046c .word 0x2000046c - -08013834 <_fwalk_reent>: - 8013834: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - 8013838: 4606 mov r6, r0 - 801383a: 4688 mov r8, r1 - 801383c: f500 7438 add.w r4, r0, #736 ; 0x2e0 - 8013840: 2700 movs r7, #0 - 8013842: e9d4 9501 ldrd r9, r5, [r4, #4] - 8013846: f1b9 0901 subs.w r9, r9, #1 - 801384a: d505 bpl.n 8013858 <_fwalk_reent+0x24> - 801384c: 6824 ldr r4, [r4, #0] - 801384e: 2c00 cmp r4, #0 - 8013850: d1f7 bne.n 8013842 <_fwalk_reent+0xe> - 8013852: 4638 mov r0, r7 - 8013854: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - 8013858: 89ab ldrh r3, [r5, #12] - 801385a: 2b01 cmp r3, #1 - 801385c: d907 bls.n 801386e <_fwalk_reent+0x3a> - 801385e: f9b5 300e ldrsh.w r3, [r5, #14] - 8013862: 3301 adds r3, #1 - 8013864: d003 beq.n 801386e <_fwalk_reent+0x3a> - 8013866: 4629 mov r1, r5 - 8013868: 4630 mov r0, r6 - 801386a: 47c0 blx r8 - 801386c: 4307 orrs r7, r0 - 801386e: 3568 adds r5, #104 ; 0x68 - 8013870: e7e9 b.n 8013846 <_fwalk_reent+0x12> - ... - -08013874 <_localeconv_r>: - 8013874: 4800 ldr r0, [pc, #0] ; (8013878 <_localeconv_r+0x4>) - 8013876: 4770 bx lr - 8013878: 20000964 .word 0x20000964 - -0801387c <__retarget_lock_init_recursive>: - 801387c: 4770 bx lr - -0801387e <__retarget_lock_close_recursive>: - 801387e: 4770 bx lr - -08013880 <__retarget_lock_acquire_recursive>: - 8013880: 4770 bx lr - -08013882 <__retarget_lock_release_recursive>: - 8013882: 4770 bx lr - -08013884 <__swhatbuf_r>: - 8013884: b570 push {r4, r5, r6, lr} - 8013886: 460e mov r6, r1 - 8013888: f9b1 100e ldrsh.w r1, [r1, #14] - 801388c: 2900 cmp r1, #0 - 801388e: b096 sub sp, #88 ; 0x58 - 8013890: 4614 mov r4, r2 - 8013892: 461d mov r5, r3 - 8013894: da0a bge.n 80138ac <__swhatbuf_r+0x28> - 8013896: f9b6 100c ldrsh.w r1, [r6, #12] - 801389a: 2300 movs r3, #0 - 801389c: f011 0080 ands.w r0, r1, #128 ; 0x80 - 80138a0: 602b str r3, [r5, #0] - 80138a2: d116 bne.n 80138d2 <__swhatbuf_r+0x4e> - 80138a4: f44f 6380 mov.w r3, #1024 ; 0x400 - 80138a8: 6023 str r3, [r4, #0] - 80138aa: e015 b.n 80138d8 <__swhatbuf_r+0x54> - 80138ac: 466a mov r2, sp - 80138ae: f001 fd15 bl 80152dc <_fstat_r> - 80138b2: 2800 cmp r0, #0 - 80138b4: dbef blt.n 8013896 <__swhatbuf_r+0x12> - 80138b6: 9a01 ldr r2, [sp, #4] - 80138b8: f402 4270 and.w r2, r2, #61440 ; 0xf000 - 80138bc: f5a2 5300 sub.w r3, r2, #8192 ; 0x2000 - 80138c0: 425a negs r2, r3 - 80138c2: 415a adcs r2, r3 - 80138c4: f44f 6380 mov.w r3, #1024 ; 0x400 - 80138c8: 602a str r2, [r5, #0] - 80138ca: f44f 6000 mov.w r0, #2048 ; 0x800 - 80138ce: 6023 str r3, [r4, #0] - 80138d0: e002 b.n 80138d8 <__swhatbuf_r+0x54> - 80138d2: 2240 movs r2, #64 ; 0x40 - 80138d4: 6022 str r2, [r4, #0] - 80138d6: 4618 mov r0, r3 - 80138d8: b016 add sp, #88 ; 0x58 - 80138da: bd70 pop {r4, r5, r6, pc} - -080138dc <__smakebuf_r>: - 80138dc: 898b ldrh r3, [r1, #12] - 80138de: b573 push {r0, r1, r4, r5, r6, lr} - 80138e0: 079d lsls r5, r3, #30 - 80138e2: 4606 mov r6, r0 - 80138e4: 460c mov r4, r1 - 80138e6: d507 bpl.n 80138f8 <__smakebuf_r+0x1c> - 80138e8: f104 0343 add.w r3, r4, #67 ; 0x43 - 80138ec: 6023 str r3, [r4, #0] - 80138ee: 6123 str r3, [r4, #16] - 80138f0: 2301 movs r3, #1 - 80138f2: 6163 str r3, [r4, #20] - 80138f4: b002 add sp, #8 - 80138f6: bd70 pop {r4, r5, r6, pc} - 80138f8: ab01 add r3, sp, #4 - 80138fa: 466a mov r2, sp - 80138fc: f7ff ffc2 bl 8013884 <__swhatbuf_r> - 8013900: 9900 ldr r1, [sp, #0] - 8013902: 4605 mov r5, r0 - 8013904: 4630 mov r0, r6 - 8013906: f000 f829 bl 801395c <_malloc_r> - 801390a: b948 cbnz r0, 8013920 <__smakebuf_r+0x44> - 801390c: f9b4 300c ldrsh.w r3, [r4, #12] - 8013910: 059a lsls r2, r3, #22 - 8013912: d4ef bmi.n 80138f4 <__smakebuf_r+0x18> - 8013914: f023 0303 bic.w r3, r3, #3 - 8013918: f043 0302 orr.w r3, r3, #2 - 801391c: 81a3 strh r3, [r4, #12] - 801391e: e7e3 b.n 80138e8 <__smakebuf_r+0xc> - 8013920: 4b0d ldr r3, [pc, #52] ; (8013958 <__smakebuf_r+0x7c>) - 8013922: 63f3 str r3, [r6, #60] ; 0x3c - 8013924: 89a3 ldrh r3, [r4, #12] - 8013926: 6020 str r0, [r4, #0] - 8013928: f043 0380 orr.w r3, r3, #128 ; 0x80 - 801392c: 81a3 strh r3, [r4, #12] - 801392e: 9b00 ldr r3, [sp, #0] - 8013930: 6163 str r3, [r4, #20] - 8013932: 9b01 ldr r3, [sp, #4] - 8013934: 6120 str r0, [r4, #16] - 8013936: b15b cbz r3, 8013950 <__smakebuf_r+0x74> - 8013938: f9b4 100e ldrsh.w r1, [r4, #14] - 801393c: 4630 mov r0, r6 - 801393e: f001 fe29 bl 8015594 <_isatty_r> - 8013942: b128 cbz r0, 8013950 <__smakebuf_r+0x74> - 8013944: 89a3 ldrh r3, [r4, #12] - 8013946: f023 0303 bic.w r3, r3, #3 - 801394a: f043 0301 orr.w r3, r3, #1 - 801394e: 81a3 strh r3, [r4, #12] - 8013950: 89a0 ldrh r0, [r4, #12] - 8013952: 4305 orrs r5, r0 - 8013954: 81a5 strh r5, [r4, #12] - 8013956: e7cd b.n 80138f4 <__smakebuf_r+0x18> - 8013958: 08013559 .word 0x08013559 - -0801395c <_malloc_r>: - 801395c: f101 030b add.w r3, r1, #11 - 8013960: 2b16 cmp r3, #22 - 8013962: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8013966: 4605 mov r5, r0 - 8013968: d906 bls.n 8013978 <_malloc_r+0x1c> - 801396a: f033 0707 bics.w r7, r3, #7 - 801396e: d504 bpl.n 801397a <_malloc_r+0x1e> - 8013970: 230c movs r3, #12 - 8013972: 602b str r3, [r5, #0] - 8013974: 2400 movs r4, #0 - 8013976: e1a5 b.n 8013cc4 <_malloc_r+0x368> - 8013978: 2710 movs r7, #16 - 801397a: 42b9 cmp r1, r7 - 801397c: d8f8 bhi.n 8013970 <_malloc_r+0x14> - 801397e: 4628 mov r0, r5 - 8013980: f000 fa28 bl 8013dd4 <__malloc_lock> - 8013984: f5b7 7ffc cmp.w r7, #504 ; 0x1f8 - 8013988: 4eb0 ldr r6, [pc, #704] ; (8013c4c <_malloc_r+0x2f0>) - 801398a: d237 bcs.n 80139fc <_malloc_r+0xa0> - 801398c: f107 0208 add.w r2, r7, #8 - 8013990: 4432 add r2, r6 - 8013992: f1a2 0108 sub.w r1, r2, #8 - 8013996: 6854 ldr r4, [r2, #4] - 8013998: 428c cmp r4, r1 - 801399a: ea4f 03d7 mov.w r3, r7, lsr #3 - 801399e: d102 bne.n 80139a6 <_malloc_r+0x4a> - 80139a0: 68d4 ldr r4, [r2, #12] - 80139a2: 42a2 cmp r2, r4 - 80139a4: d010 beq.n 80139c8 <_malloc_r+0x6c> - 80139a6: 6863 ldr r3, [r4, #4] - 80139a8: e9d4 1202 ldrd r1, r2, [r4, #8] - 80139ac: f023 0303 bic.w r3, r3, #3 - 80139b0: 60ca str r2, [r1, #12] - 80139b2: 4423 add r3, r4 - 80139b4: 6091 str r1, [r2, #8] - 80139b6: 685a ldr r2, [r3, #4] - 80139b8: f042 0201 orr.w r2, r2, #1 - 80139bc: 605a str r2, [r3, #4] - 80139be: 4628 mov r0, r5 - 80139c0: f000 fa0e bl 8013de0 <__malloc_unlock> - 80139c4: 3408 adds r4, #8 - 80139c6: e17d b.n 8013cc4 <_malloc_r+0x368> - 80139c8: 3302 adds r3, #2 - 80139ca: 6934 ldr r4, [r6, #16] - 80139cc: 49a0 ldr r1, [pc, #640] ; (8013c50 <_malloc_r+0x2f4>) - 80139ce: 428c cmp r4, r1 - 80139d0: d077 beq.n 8013ac2 <_malloc_r+0x166> - 80139d2: 6862 ldr r2, [r4, #4] - 80139d4: f022 0c03 bic.w ip, r2, #3 - 80139d8: ebac 0007 sub.w r0, ip, r7 - 80139dc: 280f cmp r0, #15 - 80139de: dd48 ble.n 8013a72 <_malloc_r+0x116> - 80139e0: 19e2 adds r2, r4, r7 - 80139e2: f040 0301 orr.w r3, r0, #1 - 80139e6: f047 0701 orr.w r7, r7, #1 - 80139ea: 6067 str r7, [r4, #4] - 80139ec: e9c6 2204 strd r2, r2, [r6, #16] - 80139f0: e9c2 1102 strd r1, r1, [r2, #8] - 80139f4: 6053 str r3, [r2, #4] - 80139f6: f844 000c str.w r0, [r4, ip] - 80139fa: e7e0 b.n 80139be <_malloc_r+0x62> - 80139fc: 0a7b lsrs r3, r7, #9 - 80139fe: d02a beq.n 8013a56 <_malloc_r+0xfa> - 8013a00: 2b04 cmp r3, #4 - 8013a02: d812 bhi.n 8013a2a <_malloc_r+0xce> - 8013a04: 09bb lsrs r3, r7, #6 - 8013a06: 3338 adds r3, #56 ; 0x38 - 8013a08: 1c5a adds r2, r3, #1 - 8013a0a: eb06 02c2 add.w r2, r6, r2, lsl #3 - 8013a0e: f1a2 0c08 sub.w ip, r2, #8 - 8013a12: 6854 ldr r4, [r2, #4] - 8013a14: 4564 cmp r4, ip - 8013a16: d006 beq.n 8013a26 <_malloc_r+0xca> - 8013a18: 6862 ldr r2, [r4, #4] - 8013a1a: f022 0203 bic.w r2, r2, #3 - 8013a1e: 1bd0 subs r0, r2, r7 - 8013a20: 280f cmp r0, #15 - 8013a22: dd1c ble.n 8013a5e <_malloc_r+0x102> - 8013a24: 3b01 subs r3, #1 - 8013a26: 3301 adds r3, #1 - 8013a28: e7cf b.n 80139ca <_malloc_r+0x6e> - 8013a2a: 2b14 cmp r3, #20 - 8013a2c: d801 bhi.n 8013a32 <_malloc_r+0xd6> - 8013a2e: 335b adds r3, #91 ; 0x5b - 8013a30: e7ea b.n 8013a08 <_malloc_r+0xac> - 8013a32: 2b54 cmp r3, #84 ; 0x54 - 8013a34: d802 bhi.n 8013a3c <_malloc_r+0xe0> - 8013a36: 0b3b lsrs r3, r7, #12 - 8013a38: 336e adds r3, #110 ; 0x6e - 8013a3a: e7e5 b.n 8013a08 <_malloc_r+0xac> - 8013a3c: f5b3 7faa cmp.w r3, #340 ; 0x154 - 8013a40: d802 bhi.n 8013a48 <_malloc_r+0xec> - 8013a42: 0bfb lsrs r3, r7, #15 - 8013a44: 3377 adds r3, #119 ; 0x77 - 8013a46: e7df b.n 8013a08 <_malloc_r+0xac> - 8013a48: f240 5254 movw r2, #1364 ; 0x554 - 8013a4c: 4293 cmp r3, r2 - 8013a4e: d804 bhi.n 8013a5a <_malloc_r+0xfe> - 8013a50: 0cbb lsrs r3, r7, #18 - 8013a52: 337c adds r3, #124 ; 0x7c - 8013a54: e7d8 b.n 8013a08 <_malloc_r+0xac> - 8013a56: 233f movs r3, #63 ; 0x3f - 8013a58: e7d6 b.n 8013a08 <_malloc_r+0xac> - 8013a5a: 237e movs r3, #126 ; 0x7e - 8013a5c: e7d4 b.n 8013a08 <_malloc_r+0xac> - 8013a5e: 2800 cmp r0, #0 - 8013a60: 68e1 ldr r1, [r4, #12] - 8013a62: db04 blt.n 8013a6e <_malloc_r+0x112> - 8013a64: 68a3 ldr r3, [r4, #8] - 8013a66: 60d9 str r1, [r3, #12] - 8013a68: 608b str r3, [r1, #8] - 8013a6a: 18a3 adds r3, r4, r2 - 8013a6c: e7a3 b.n 80139b6 <_malloc_r+0x5a> - 8013a6e: 460c mov r4, r1 - 8013a70: e7d0 b.n 8013a14 <_malloc_r+0xb8> - 8013a72: 2800 cmp r0, #0 - 8013a74: e9c6 1104 strd r1, r1, [r6, #16] - 8013a78: db07 blt.n 8013a8a <_malloc_r+0x12e> - 8013a7a: 44a4 add ip, r4 - 8013a7c: f8dc 3004 ldr.w r3, [ip, #4] - 8013a80: f043 0301 orr.w r3, r3, #1 - 8013a84: f8cc 3004 str.w r3, [ip, #4] - 8013a88: e799 b.n 80139be <_malloc_r+0x62> - 8013a8a: f5bc 7f00 cmp.w ip, #512 ; 0x200 - 8013a8e: 6870 ldr r0, [r6, #4] - 8013a90: f080 8096 bcs.w 8013bc0 <_malloc_r+0x264> - 8013a94: ea4f 02dc mov.w r2, ip, lsr #3 - 8013a98: ea4f 1e5c mov.w lr, ip, lsr #5 - 8013a9c: f04f 0c01 mov.w ip, #1 - 8013aa0: 3201 adds r2, #1 - 8013aa2: fa0c fc0e lsl.w ip, ip, lr - 8013aa6: ea4c 0000 orr.w r0, ip, r0 - 8013aaa: 6070 str r0, [r6, #4] - 8013aac: f856 c032 ldr.w ip, [r6, r2, lsl #3] - 8013ab0: eb06 00c2 add.w r0, r6, r2, lsl #3 - 8013ab4: 3808 subs r0, #8 - 8013ab6: e9c4 c002 strd ip, r0, [r4, #8] - 8013aba: f846 4032 str.w r4, [r6, r2, lsl #3] - 8013abe: f8cc 400c str.w r4, [ip, #12] - 8013ac2: 2001 movs r0, #1 - 8013ac4: 109a asrs r2, r3, #2 - 8013ac6: fa00 f202 lsl.w r2, r0, r2 - 8013aca: 6870 ldr r0, [r6, #4] - 8013acc: 4290 cmp r0, r2 - 8013ace: d326 bcc.n 8013b1e <_malloc_r+0x1c2> - 8013ad0: 4210 tst r0, r2 - 8013ad2: d106 bne.n 8013ae2 <_malloc_r+0x186> - 8013ad4: f023 0303 bic.w r3, r3, #3 - 8013ad8: 0052 lsls r2, r2, #1 - 8013ada: 4210 tst r0, r2 - 8013adc: f103 0304 add.w r3, r3, #4 - 8013ae0: d0fa beq.n 8013ad8 <_malloc_r+0x17c> - 8013ae2: eb06 08c3 add.w r8, r6, r3, lsl #3 - 8013ae6: 46c1 mov r9, r8 - 8013ae8: 469e mov lr, r3 - 8013aea: f8d9 400c ldr.w r4, [r9, #12] - 8013aee: 454c cmp r4, r9 - 8013af0: f040 80ba bne.w 8013c68 <_malloc_r+0x30c> - 8013af4: f10e 0e01 add.w lr, lr, #1 - 8013af8: f01e 0f03 tst.w lr, #3 - 8013afc: f109 0908 add.w r9, r9, #8 - 8013b00: d1f3 bne.n 8013aea <_malloc_r+0x18e> - 8013b02: 0798 lsls r0, r3, #30 - 8013b04: f040 80e4 bne.w 8013cd0 <_malloc_r+0x374> - 8013b08: 6873 ldr r3, [r6, #4] - 8013b0a: ea23 0302 bic.w r3, r3, r2 - 8013b0e: 6073 str r3, [r6, #4] - 8013b10: 6870 ldr r0, [r6, #4] - 8013b12: 0052 lsls r2, r2, #1 - 8013b14: 4290 cmp r0, r2 - 8013b16: d302 bcc.n 8013b1e <_malloc_r+0x1c2> - 8013b18: 2a00 cmp r2, #0 - 8013b1a: f040 80e6 bne.w 8013cea <_malloc_r+0x38e> - 8013b1e: f8d6 a008 ldr.w sl, [r6, #8] - 8013b22: f8da 3004 ldr.w r3, [sl, #4] - 8013b26: f023 0903 bic.w r9, r3, #3 - 8013b2a: 45b9 cmp r9, r7 - 8013b2c: d304 bcc.n 8013b38 <_malloc_r+0x1dc> - 8013b2e: eba9 0207 sub.w r2, r9, r7 - 8013b32: 2a0f cmp r2, #15 - 8013b34: f300 8142 bgt.w 8013dbc <_malloc_r+0x460> - 8013b38: 4b46 ldr r3, [pc, #280] ; (8013c54 <_malloc_r+0x2f8>) - 8013b3a: 6819 ldr r1, [r3, #0] - 8013b3c: 3110 adds r1, #16 - 8013b3e: 4439 add r1, r7 - 8013b40: 2008 movs r0, #8 - 8013b42: 9101 str r1, [sp, #4] - 8013b44: f000 fd26 bl 8014594 - 8013b48: 4a43 ldr r2, [pc, #268] ; (8013c58 <_malloc_r+0x2fc>) - 8013b4a: 9901 ldr r1, [sp, #4] - 8013b4c: 6813 ldr r3, [r2, #0] - 8013b4e: 3301 adds r3, #1 - 8013b50: bf1f itttt ne - 8013b52: f101 31ff addne.w r1, r1, #4294967295 - 8013b56: 1809 addne r1, r1, r0 - 8013b58: 4243 negne r3, r0 - 8013b5a: 4019 andne r1, r3 - 8013b5c: 4680 mov r8, r0 - 8013b5e: 4628 mov r0, r5 - 8013b60: 9101 str r1, [sp, #4] - 8013b62: f000 fcb1 bl 80144c8 <_sbrk_r> - 8013b66: 1c42 adds r2, r0, #1 - 8013b68: eb0a 0b09 add.w fp, sl, r9 - 8013b6c: 4604 mov r4, r0 - 8013b6e: f000 80f8 beq.w 8013d62 <_malloc_r+0x406> - 8013b72: 4583 cmp fp, r0 - 8013b74: 9901 ldr r1, [sp, #4] - 8013b76: 4a38 ldr r2, [pc, #224] ; (8013c58 <_malloc_r+0x2fc>) - 8013b78: d902 bls.n 8013b80 <_malloc_r+0x224> - 8013b7a: 45b2 cmp sl, r6 - 8013b7c: f040 80f1 bne.w 8013d62 <_malloc_r+0x406> - 8013b80: 4b36 ldr r3, [pc, #216] ; (8013c5c <_malloc_r+0x300>) - 8013b82: 6818 ldr r0, [r3, #0] - 8013b84: 45a3 cmp fp, r4 - 8013b86: eb00 0e01 add.w lr, r0, r1 - 8013b8a: f8c3 e000 str.w lr, [r3] - 8013b8e: f108 3cff add.w ip, r8, #4294967295 - 8013b92: f040 80ac bne.w 8013cee <_malloc_r+0x392> - 8013b96: ea1b 0f0c tst.w fp, ip - 8013b9a: f040 80a8 bne.w 8013cee <_malloc_r+0x392> - 8013b9e: 68b2 ldr r2, [r6, #8] - 8013ba0: 4449 add r1, r9 - 8013ba2: f041 0101 orr.w r1, r1, #1 - 8013ba6: 6051 str r1, [r2, #4] - 8013ba8: 4a2d ldr r2, [pc, #180] ; (8013c60 <_malloc_r+0x304>) - 8013baa: 681b ldr r3, [r3, #0] - 8013bac: 6811 ldr r1, [r2, #0] - 8013bae: 428b cmp r3, r1 - 8013bb0: bf88 it hi - 8013bb2: 6013 strhi r3, [r2, #0] - 8013bb4: 4a2b ldr r2, [pc, #172] ; (8013c64 <_malloc_r+0x308>) - 8013bb6: 6811 ldr r1, [r2, #0] - 8013bb8: 428b cmp r3, r1 - 8013bba: bf88 it hi - 8013bbc: 6013 strhi r3, [r2, #0] - 8013bbe: e0d0 b.n 8013d62 <_malloc_r+0x406> - 8013bc0: f5bc 6f20 cmp.w ip, #2560 ; 0xa00 - 8013bc4: ea4f 225c mov.w r2, ip, lsr #9 - 8013bc8: d218 bcs.n 8013bfc <_malloc_r+0x2a0> - 8013bca: ea4f 129c mov.w r2, ip, lsr #6 - 8013bce: 3238 adds r2, #56 ; 0x38 - 8013bd0: f102 0e01 add.w lr, r2, #1 - 8013bd4: eb06 08c2 add.w r8, r6, r2, lsl #3 - 8013bd8: f856 e03e ldr.w lr, [r6, lr, lsl #3] - 8013bdc: 45f0 cmp r8, lr - 8013bde: d12b bne.n 8013c38 <_malloc_r+0x2dc> - 8013be0: 1092 asrs r2, r2, #2 - 8013be2: f04f 0c01 mov.w ip, #1 - 8013be6: fa0c f202 lsl.w r2, ip, r2 - 8013bea: 4310 orrs r0, r2 - 8013bec: 6070 str r0, [r6, #4] - 8013bee: e9c4 e802 strd lr, r8, [r4, #8] - 8013bf2: f8c8 4008 str.w r4, [r8, #8] - 8013bf6: f8ce 400c str.w r4, [lr, #12] - 8013bfa: e762 b.n 8013ac2 <_malloc_r+0x166> - 8013bfc: 2a14 cmp r2, #20 - 8013bfe: d801 bhi.n 8013c04 <_malloc_r+0x2a8> - 8013c00: 325b adds r2, #91 ; 0x5b - 8013c02: e7e5 b.n 8013bd0 <_malloc_r+0x274> - 8013c04: 2a54 cmp r2, #84 ; 0x54 - 8013c06: d803 bhi.n 8013c10 <_malloc_r+0x2b4> - 8013c08: ea4f 321c mov.w r2, ip, lsr #12 - 8013c0c: 326e adds r2, #110 ; 0x6e - 8013c0e: e7df b.n 8013bd0 <_malloc_r+0x274> - 8013c10: f5b2 7faa cmp.w r2, #340 ; 0x154 - 8013c14: d803 bhi.n 8013c1e <_malloc_r+0x2c2> - 8013c16: ea4f 32dc mov.w r2, ip, lsr #15 - 8013c1a: 3277 adds r2, #119 ; 0x77 - 8013c1c: e7d8 b.n 8013bd0 <_malloc_r+0x274> - 8013c1e: f240 5e54 movw lr, #1364 ; 0x554 - 8013c22: 4572 cmp r2, lr - 8013c24: bf9a itte ls - 8013c26: ea4f 429c movls.w r2, ip, lsr #18 - 8013c2a: 327c addls r2, #124 ; 0x7c - 8013c2c: 227e movhi r2, #126 ; 0x7e - 8013c2e: e7cf b.n 8013bd0 <_malloc_r+0x274> - 8013c30: f8de e008 ldr.w lr, [lr, #8] - 8013c34: 45f0 cmp r8, lr - 8013c36: d005 beq.n 8013c44 <_malloc_r+0x2e8> - 8013c38: f8de 2004 ldr.w r2, [lr, #4] - 8013c3c: f022 0203 bic.w r2, r2, #3 - 8013c40: 4562 cmp r2, ip - 8013c42: d8f5 bhi.n 8013c30 <_malloc_r+0x2d4> - 8013c44: f8de 800c ldr.w r8, [lr, #12] - 8013c48: e7d1 b.n 8013bee <_malloc_r+0x292> - 8013c4a: bf00 nop - 8013c4c: 20000464 .word 0x20000464 - 8013c50: 2000046c .word 0x2000046c - 8013c54: 20009b98 .word 0x20009b98 - 8013c58: 2000086c .word 0x2000086c - 8013c5c: 20009b68 .word 0x20009b68 - 8013c60: 20009b90 .word 0x20009b90 - 8013c64: 20009b94 .word 0x20009b94 - 8013c68: 6860 ldr r0, [r4, #4] - 8013c6a: f8d4 c00c ldr.w ip, [r4, #12] - 8013c6e: f020 0003 bic.w r0, r0, #3 - 8013c72: eba0 0a07 sub.w sl, r0, r7 - 8013c76: f1ba 0f0f cmp.w sl, #15 - 8013c7a: dd12 ble.n 8013ca2 <_malloc_r+0x346> - 8013c7c: 68a3 ldr r3, [r4, #8] - 8013c7e: 19e2 adds r2, r4, r7 - 8013c80: f047 0701 orr.w r7, r7, #1 - 8013c84: 6067 str r7, [r4, #4] - 8013c86: f8c3 c00c str.w ip, [r3, #12] - 8013c8a: f8cc 3008 str.w r3, [ip, #8] - 8013c8e: f04a 0301 orr.w r3, sl, #1 - 8013c92: e9c6 2204 strd r2, r2, [r6, #16] - 8013c96: e9c2 1102 strd r1, r1, [r2, #8] - 8013c9a: 6053 str r3, [r2, #4] - 8013c9c: f844 a000 str.w sl, [r4, r0] - 8013ca0: e68d b.n 80139be <_malloc_r+0x62> - 8013ca2: f1ba 0f00 cmp.w sl, #0 - 8013ca6: db11 blt.n 8013ccc <_malloc_r+0x370> - 8013ca8: 4420 add r0, r4 - 8013caa: 6843 ldr r3, [r0, #4] - 8013cac: f043 0301 orr.w r3, r3, #1 - 8013cb0: 6043 str r3, [r0, #4] - 8013cb2: f854 3f08 ldr.w r3, [r4, #8]! - 8013cb6: 4628 mov r0, r5 - 8013cb8: f8c3 c00c str.w ip, [r3, #12] - 8013cbc: f8cc 3008 str.w r3, [ip, #8] - 8013cc0: f000 f88e bl 8013de0 <__malloc_unlock> - 8013cc4: 4620 mov r0, r4 - 8013cc6: b003 add sp, #12 - 8013cc8: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 8013ccc: 4664 mov r4, ip - 8013cce: e70e b.n 8013aee <_malloc_r+0x192> - 8013cd0: f858 0908 ldr.w r0, [r8], #-8 - 8013cd4: 4540 cmp r0, r8 - 8013cd6: f103 33ff add.w r3, r3, #4294967295 - 8013cda: f43f af12 beq.w 8013b02 <_malloc_r+0x1a6> - 8013cde: e717 b.n 8013b10 <_malloc_r+0x1b4> - 8013ce0: 3304 adds r3, #4 - 8013ce2: 0052 lsls r2, r2, #1 - 8013ce4: 4210 tst r0, r2 - 8013ce6: d0fb beq.n 8013ce0 <_malloc_r+0x384> - 8013ce8: e6fb b.n 8013ae2 <_malloc_r+0x186> - 8013cea: 4673 mov r3, lr - 8013cec: e7fa b.n 8013ce4 <_malloc_r+0x388> - 8013cee: 6810 ldr r0, [r2, #0] - 8013cf0: 3001 adds r0, #1 - 8013cf2: bf1b ittet ne - 8013cf4: eba4 0b0b subne.w fp, r4, fp - 8013cf8: eb0b 020e addne.w r2, fp, lr - 8013cfc: 6014 streq r4, [r2, #0] - 8013cfe: 601a strne r2, [r3, #0] - 8013d00: f014 0b07 ands.w fp, r4, #7 - 8013d04: bf1a itte ne - 8013d06: f1cb 0008 rsbne r0, fp, #8 - 8013d0a: 1824 addne r4, r4, r0 - 8013d0c: 4658 moveq r0, fp - 8013d0e: 1862 adds r2, r4, r1 - 8013d10: ea02 010c and.w r1, r2, ip - 8013d14: 4480 add r8, r0 - 8013d16: eba8 0801 sub.w r8, r8, r1 - 8013d1a: ea08 080c and.w r8, r8, ip - 8013d1e: 4641 mov r1, r8 - 8013d20: 4628 mov r0, r5 - 8013d22: 9201 str r2, [sp, #4] - 8013d24: f000 fbd0 bl 80144c8 <_sbrk_r> - 8013d28: 1c43 adds r3, r0, #1 - 8013d2a: 9a01 ldr r2, [sp, #4] - 8013d2c: 4b28 ldr r3, [pc, #160] ; (8013dd0 <_malloc_r+0x474>) - 8013d2e: d107 bne.n 8013d40 <_malloc_r+0x3e4> - 8013d30: f1bb 0f00 cmp.w fp, #0 - 8013d34: d023 beq.n 8013d7e <_malloc_r+0x422> - 8013d36: f1ab 0008 sub.w r0, fp, #8 - 8013d3a: 4410 add r0, r2 - 8013d3c: f04f 0800 mov.w r8, #0 - 8013d40: 681a ldr r2, [r3, #0] - 8013d42: 60b4 str r4, [r6, #8] - 8013d44: 1b00 subs r0, r0, r4 - 8013d46: 4440 add r0, r8 - 8013d48: 4442 add r2, r8 - 8013d4a: f040 0001 orr.w r0, r0, #1 - 8013d4e: 45b2 cmp sl, r6 - 8013d50: 601a str r2, [r3, #0] - 8013d52: 6060 str r0, [r4, #4] - 8013d54: f43f af28 beq.w 8013ba8 <_malloc_r+0x24c> - 8013d58: f1b9 0f0f cmp.w r9, #15 - 8013d5c: d812 bhi.n 8013d84 <_malloc_r+0x428> - 8013d5e: 2301 movs r3, #1 - 8013d60: 6063 str r3, [r4, #4] - 8013d62: 68b3 ldr r3, [r6, #8] - 8013d64: 685b ldr r3, [r3, #4] - 8013d66: f023 0303 bic.w r3, r3, #3 - 8013d6a: 42bb cmp r3, r7 - 8013d6c: eba3 0207 sub.w r2, r3, r7 - 8013d70: d301 bcc.n 8013d76 <_malloc_r+0x41a> - 8013d72: 2a0f cmp r2, #15 - 8013d74: dc22 bgt.n 8013dbc <_malloc_r+0x460> - 8013d76: 4628 mov r0, r5 - 8013d78: f000 f832 bl 8013de0 <__malloc_unlock> - 8013d7c: e5fa b.n 8013974 <_malloc_r+0x18> - 8013d7e: 4610 mov r0, r2 - 8013d80: 46d8 mov r8, fp - 8013d82: e7dd b.n 8013d40 <_malloc_r+0x3e4> - 8013d84: f8da 2004 ldr.w r2, [sl, #4] - 8013d88: f1a9 090c sub.w r9, r9, #12 - 8013d8c: f029 0907 bic.w r9, r9, #7 - 8013d90: f002 0201 and.w r2, r2, #1 - 8013d94: ea42 0209 orr.w r2, r2, r9 - 8013d98: f8ca 2004 str.w r2, [sl, #4] - 8013d9c: 2105 movs r1, #5 - 8013d9e: eb0a 0209 add.w r2, sl, r9 - 8013da2: f1b9 0f0f cmp.w r9, #15 - 8013da6: e9c2 1101 strd r1, r1, [r2, #4] - 8013daa: f67f aefd bls.w 8013ba8 <_malloc_r+0x24c> - 8013dae: f10a 0108 add.w r1, sl, #8 - 8013db2: 4628 mov r0, r5 - 8013db4: f7ff fc7e bl 80136b4 <_free_r> - 8013db8: 4b05 ldr r3, [pc, #20] ; (8013dd0 <_malloc_r+0x474>) - 8013dba: e6f5 b.n 8013ba8 <_malloc_r+0x24c> - 8013dbc: 68b4 ldr r4, [r6, #8] - 8013dbe: f047 0301 orr.w r3, r7, #1 - 8013dc2: 4427 add r7, r4 - 8013dc4: f042 0201 orr.w r2, r2, #1 - 8013dc8: 6063 str r3, [r4, #4] - 8013dca: 60b7 str r7, [r6, #8] - 8013dcc: 607a str r2, [r7, #4] - 8013dce: e5f6 b.n 80139be <_malloc_r+0x62> - 8013dd0: 20009b68 .word 0x20009b68 - -08013dd4 <__malloc_lock>: - 8013dd4: 4801 ldr r0, [pc, #4] ; (8013ddc <__malloc_lock+0x8>) - 8013dd6: f7ff bd53 b.w 8013880 <__retarget_lock_acquire_recursive> - 8013dda: bf00 nop - 8013ddc: 20009b63 .word 0x20009b63 - -08013de0 <__malloc_unlock>: - 8013de0: 4801 ldr r0, [pc, #4] ; (8013de8 <__malloc_unlock+0x8>) - 8013de2: f7ff bd4e b.w 8013882 <__retarget_lock_release_recursive> - 8013de6: bf00 nop - 8013de8: 20009b63 .word 0x20009b63 - -08013dec <_Balloc>: - 8013dec: 6cc3 ldr r3, [r0, #76] ; 0x4c - 8013dee: b570 push {r4, r5, r6, lr} - 8013df0: 4605 mov r5, r0 - 8013df2: 460c mov r4, r1 - 8013df4: b17b cbz r3, 8013e16 <_Balloc+0x2a> - 8013df6: 6ceb ldr r3, [r5, #76] ; 0x4c - 8013df8: f853 0024 ldr.w r0, [r3, r4, lsl #2] - 8013dfc: b9a0 cbnz r0, 8013e28 <_Balloc+0x3c> - 8013dfe: 2101 movs r1, #1 - 8013e00: fa01 f604 lsl.w r6, r1, r4 - 8013e04: 1d72 adds r2, r6, #5 - 8013e06: 0092 lsls r2, r2, #2 - 8013e08: 4628 mov r0, r5 - 8013e0a: f001 f94b bl 80150a4 <_calloc_r> - 8013e0e: b148 cbz r0, 8013e24 <_Balloc+0x38> - 8013e10: e9c0 4601 strd r4, r6, [r0, #4] - 8013e14: e00b b.n 8013e2e <_Balloc+0x42> - 8013e16: 2221 movs r2, #33 ; 0x21 - 8013e18: 2104 movs r1, #4 - 8013e1a: f001 f943 bl 80150a4 <_calloc_r> - 8013e1e: 64e8 str r0, [r5, #76] ; 0x4c - 8013e20: 2800 cmp r0, #0 - 8013e22: d1e8 bne.n 8013df6 <_Balloc+0xa> - 8013e24: 2000 movs r0, #0 - 8013e26: bd70 pop {r4, r5, r6, pc} - 8013e28: 6802 ldr r2, [r0, #0] - 8013e2a: f843 2024 str.w r2, [r3, r4, lsl #2] - 8013e2e: 2300 movs r3, #0 - 8013e30: e9c0 3303 strd r3, r3, [r0, #12] - 8013e34: e7f7 b.n 8013e26 <_Balloc+0x3a> - -08013e36 <_Bfree>: - 8013e36: b131 cbz r1, 8013e46 <_Bfree+0x10> - 8013e38: 6cc3 ldr r3, [r0, #76] ; 0x4c - 8013e3a: 684a ldr r2, [r1, #4] - 8013e3c: f853 0022 ldr.w r0, [r3, r2, lsl #2] - 8013e40: 6008 str r0, [r1, #0] - 8013e42: f843 1022 str.w r1, [r3, r2, lsl #2] - 8013e46: 4770 bx lr - -08013e48 <__multadd>: - 8013e48: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 8013e4c: 690d ldr r5, [r1, #16] - 8013e4e: 4607 mov r7, r0 - 8013e50: 460c mov r4, r1 - 8013e52: 461e mov r6, r3 - 8013e54: f101 0c14 add.w ip, r1, #20 - 8013e58: 2000 movs r0, #0 - 8013e5a: f8dc 3000 ldr.w r3, [ip] - 8013e5e: b299 uxth r1, r3 - 8013e60: fb02 6101 mla r1, r2, r1, r6 - 8013e64: 0c1e lsrs r6, r3, #16 - 8013e66: 0c0b lsrs r3, r1, #16 - 8013e68: fb02 3306 mla r3, r2, r6, r3 - 8013e6c: b289 uxth r1, r1 - 8013e6e: 3001 adds r0, #1 - 8013e70: eb01 4103 add.w r1, r1, r3, lsl #16 - 8013e74: 4285 cmp r5, r0 - 8013e76: f84c 1b04 str.w r1, [ip], #4 - 8013e7a: ea4f 4613 mov.w r6, r3, lsr #16 - 8013e7e: dcec bgt.n 8013e5a <__multadd+0x12> - 8013e80: b30e cbz r6, 8013ec6 <__multadd+0x7e> - 8013e82: 68a3 ldr r3, [r4, #8] - 8013e84: 42ab cmp r3, r5 - 8013e86: dc19 bgt.n 8013ebc <__multadd+0x74> - 8013e88: 6861 ldr r1, [r4, #4] - 8013e8a: 4638 mov r0, r7 - 8013e8c: 3101 adds r1, #1 - 8013e8e: f7ff ffad bl 8013dec <_Balloc> - 8013e92: 4680 mov r8, r0 - 8013e94: b928 cbnz r0, 8013ea2 <__multadd+0x5a> - 8013e96: 4602 mov r2, r0 - 8013e98: 4b0c ldr r3, [pc, #48] ; (8013ecc <__multadd+0x84>) - 8013e9a: 480d ldr r0, [pc, #52] ; (8013ed0 <__multadd+0x88>) - 8013e9c: 21b5 movs r1, #181 ; 0xb5 - 8013e9e: f001 f8e3 bl 8015068 <__assert_func> - 8013ea2: 6922 ldr r2, [r4, #16] - 8013ea4: 3202 adds r2, #2 - 8013ea6: f104 010c add.w r1, r4, #12 - 8013eaa: 0092 lsls r2, r2, #2 - 8013eac: 300c adds r0, #12 - 8013eae: f7fd f8cb bl 8011048 - 8013eb2: 4621 mov r1, r4 - 8013eb4: 4638 mov r0, r7 - 8013eb6: f7ff ffbe bl 8013e36 <_Bfree> - 8013eba: 4644 mov r4, r8 - 8013ebc: eb04 0385 add.w r3, r4, r5, lsl #2 - 8013ec0: 3501 adds r5, #1 - 8013ec2: 615e str r6, [r3, #20] - 8013ec4: 6125 str r5, [r4, #16] - 8013ec6: 4620 mov r0, r4 - 8013ec8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 8013ecc: 08018c49 .word 0x08018c49 - 8013ed0: 08018cb5 .word 0x08018cb5 - -08013ed4 <__hi0bits>: - 8013ed4: 0c03 lsrs r3, r0, #16 - 8013ed6: 041b lsls r3, r3, #16 - 8013ed8: b9d3 cbnz r3, 8013f10 <__hi0bits+0x3c> - 8013eda: 0400 lsls r0, r0, #16 - 8013edc: 2310 movs r3, #16 - 8013ede: f010 4f7f tst.w r0, #4278190080 ; 0xff000000 - 8013ee2: bf04 itt eq - 8013ee4: 0200 lsleq r0, r0, #8 - 8013ee6: 3308 addeq r3, #8 - 8013ee8: f010 4f70 tst.w r0, #4026531840 ; 0xf0000000 - 8013eec: bf04 itt eq - 8013eee: 0100 lsleq r0, r0, #4 - 8013ef0: 3304 addeq r3, #4 - 8013ef2: f010 4f40 tst.w r0, #3221225472 ; 0xc0000000 - 8013ef6: bf04 itt eq - 8013ef8: 0080 lsleq r0, r0, #2 - 8013efa: 3302 addeq r3, #2 - 8013efc: 2800 cmp r0, #0 - 8013efe: db05 blt.n 8013f0c <__hi0bits+0x38> - 8013f00: f010 4f80 tst.w r0, #1073741824 ; 0x40000000 - 8013f04: f103 0301 add.w r3, r3, #1 - 8013f08: bf08 it eq - 8013f0a: 2320 moveq r3, #32 - 8013f0c: 4618 mov r0, r3 - 8013f0e: 4770 bx lr - 8013f10: 2300 movs r3, #0 - 8013f12: e7e4 b.n 8013ede <__hi0bits+0xa> - -08013f14 <__lo0bits>: - 8013f14: 6803 ldr r3, [r0, #0] - 8013f16: f013 0207 ands.w r2, r3, #7 - 8013f1a: 4601 mov r1, r0 - 8013f1c: d00b beq.n 8013f36 <__lo0bits+0x22> - 8013f1e: 07da lsls r2, r3, #31 - 8013f20: d423 bmi.n 8013f6a <__lo0bits+0x56> - 8013f22: 0798 lsls r0, r3, #30 - 8013f24: bf49 itett mi - 8013f26: 085b lsrmi r3, r3, #1 - 8013f28: 089b lsrpl r3, r3, #2 - 8013f2a: 2001 movmi r0, #1 - 8013f2c: 600b strmi r3, [r1, #0] - 8013f2e: bf5c itt pl - 8013f30: 600b strpl r3, [r1, #0] - 8013f32: 2002 movpl r0, #2 - 8013f34: 4770 bx lr - 8013f36: b298 uxth r0, r3 - 8013f38: b9a8 cbnz r0, 8013f66 <__lo0bits+0x52> - 8013f3a: 0c1b lsrs r3, r3, #16 - 8013f3c: 2010 movs r0, #16 - 8013f3e: b2da uxtb r2, r3 - 8013f40: b90a cbnz r2, 8013f46 <__lo0bits+0x32> - 8013f42: 3008 adds r0, #8 - 8013f44: 0a1b lsrs r3, r3, #8 - 8013f46: 071a lsls r2, r3, #28 - 8013f48: bf04 itt eq - 8013f4a: 091b lsreq r3, r3, #4 - 8013f4c: 3004 addeq r0, #4 - 8013f4e: 079a lsls r2, r3, #30 - 8013f50: bf04 itt eq - 8013f52: 089b lsreq r3, r3, #2 - 8013f54: 3002 addeq r0, #2 - 8013f56: 07da lsls r2, r3, #31 - 8013f58: d403 bmi.n 8013f62 <__lo0bits+0x4e> - 8013f5a: 085b lsrs r3, r3, #1 - 8013f5c: f100 0001 add.w r0, r0, #1 - 8013f60: d005 beq.n 8013f6e <__lo0bits+0x5a> - 8013f62: 600b str r3, [r1, #0] - 8013f64: 4770 bx lr - 8013f66: 4610 mov r0, r2 - 8013f68: e7e9 b.n 8013f3e <__lo0bits+0x2a> - 8013f6a: 2000 movs r0, #0 - 8013f6c: 4770 bx lr - 8013f6e: 2020 movs r0, #32 - 8013f70: 4770 bx lr - ... - -08013f74 <__i2b>: - 8013f74: b510 push {r4, lr} - 8013f76: 460c mov r4, r1 - 8013f78: 2101 movs r1, #1 - 8013f7a: f7ff ff37 bl 8013dec <_Balloc> - 8013f7e: 4602 mov r2, r0 - 8013f80: b928 cbnz r0, 8013f8e <__i2b+0x1a> - 8013f82: 4b05 ldr r3, [pc, #20] ; (8013f98 <__i2b+0x24>) - 8013f84: 4805 ldr r0, [pc, #20] ; (8013f9c <__i2b+0x28>) - 8013f86: f44f 71a0 mov.w r1, #320 ; 0x140 - 8013f8a: f001 f86d bl 8015068 <__assert_func> - 8013f8e: 2301 movs r3, #1 - 8013f90: 6144 str r4, [r0, #20] - 8013f92: 6103 str r3, [r0, #16] - 8013f94: bd10 pop {r4, pc} - 8013f96: bf00 nop - 8013f98: 08018c49 .word 0x08018c49 - 8013f9c: 08018cb5 .word 0x08018cb5 - -08013fa0 <__multiply>: - 8013fa0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8013fa4: 4691 mov r9, r2 - 8013fa6: 690a ldr r2, [r1, #16] - 8013fa8: f8d9 3010 ldr.w r3, [r9, #16] - 8013fac: 429a cmp r2, r3 - 8013fae: bfb8 it lt - 8013fb0: 460b movlt r3, r1 - 8013fb2: 460c mov r4, r1 - 8013fb4: bfbc itt lt - 8013fb6: 464c movlt r4, r9 - 8013fb8: 4699 movlt r9, r3 - 8013fba: 6927 ldr r7, [r4, #16] - 8013fbc: f8d9 a010 ldr.w sl, [r9, #16] - 8013fc0: 68a3 ldr r3, [r4, #8] - 8013fc2: 6861 ldr r1, [r4, #4] - 8013fc4: eb07 060a add.w r6, r7, sl - 8013fc8: 42b3 cmp r3, r6 - 8013fca: b085 sub sp, #20 - 8013fcc: bfb8 it lt - 8013fce: 3101 addlt r1, #1 - 8013fd0: f7ff ff0c bl 8013dec <_Balloc> - 8013fd4: b930 cbnz r0, 8013fe4 <__multiply+0x44> - 8013fd6: 4602 mov r2, r0 - 8013fd8: 4b44 ldr r3, [pc, #272] ; (80140ec <__multiply+0x14c>) - 8013fda: 4845 ldr r0, [pc, #276] ; (80140f0 <__multiply+0x150>) - 8013fdc: f240 115d movw r1, #349 ; 0x15d - 8013fe0: f001 f842 bl 8015068 <__assert_func> - 8013fe4: f100 0514 add.w r5, r0, #20 - 8013fe8: eb05 0886 add.w r8, r5, r6, lsl #2 - 8013fec: 462b mov r3, r5 - 8013fee: 2200 movs r2, #0 - 8013ff0: 4543 cmp r3, r8 - 8013ff2: d321 bcc.n 8014038 <__multiply+0x98> - 8013ff4: f104 0314 add.w r3, r4, #20 - 8013ff8: eb03 0787 add.w r7, r3, r7, lsl #2 - 8013ffc: f109 0314 add.w r3, r9, #20 - 8014000: eb03 028a add.w r2, r3, sl, lsl #2 - 8014004: 9202 str r2, [sp, #8] - 8014006: 1b3a subs r2, r7, r4 - 8014008: 3a15 subs r2, #21 - 801400a: f022 0203 bic.w r2, r2, #3 - 801400e: 3204 adds r2, #4 - 8014010: f104 0115 add.w r1, r4, #21 - 8014014: 428f cmp r7, r1 - 8014016: bf38 it cc - 8014018: 2204 movcc r2, #4 - 801401a: 9201 str r2, [sp, #4] - 801401c: 9a02 ldr r2, [sp, #8] - 801401e: 9303 str r3, [sp, #12] - 8014020: 429a cmp r2, r3 - 8014022: d80c bhi.n 801403e <__multiply+0x9e> - 8014024: 2e00 cmp r6, #0 - 8014026: dd03 ble.n 8014030 <__multiply+0x90> - 8014028: f858 3d04 ldr.w r3, [r8, #-4]! - 801402c: 2b00 cmp r3, #0 - 801402e: d05a beq.n 80140e6 <__multiply+0x146> - 8014030: 6106 str r6, [r0, #16] - 8014032: b005 add sp, #20 - 8014034: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 8014038: f843 2b04 str.w r2, [r3], #4 - 801403c: e7d8 b.n 8013ff0 <__multiply+0x50> - 801403e: f8b3 a000 ldrh.w sl, [r3] - 8014042: f1ba 0f00 cmp.w sl, #0 - 8014046: d024 beq.n 8014092 <__multiply+0xf2> - 8014048: f104 0e14 add.w lr, r4, #20 - 801404c: 46a9 mov r9, r5 - 801404e: f04f 0c00 mov.w ip, #0 - 8014052: f85e 2b04 ldr.w r2, [lr], #4 - 8014056: f8d9 1000 ldr.w r1, [r9] - 801405a: fa1f fb82 uxth.w fp, r2 - 801405e: b289 uxth r1, r1 - 8014060: fb0a 110b mla r1, sl, fp, r1 - 8014064: ea4f 4b12 mov.w fp, r2, lsr #16 - 8014068: f8d9 2000 ldr.w r2, [r9] - 801406c: 4461 add r1, ip - 801406e: ea4f 4c12 mov.w ip, r2, lsr #16 - 8014072: fb0a c20b mla r2, sl, fp, ip - 8014076: eb02 4211 add.w r2, r2, r1, lsr #16 - 801407a: b289 uxth r1, r1 - 801407c: ea41 4102 orr.w r1, r1, r2, lsl #16 - 8014080: 4577 cmp r7, lr - 8014082: f849 1b04 str.w r1, [r9], #4 - 8014086: ea4f 4c12 mov.w ip, r2, lsr #16 - 801408a: d8e2 bhi.n 8014052 <__multiply+0xb2> - 801408c: 9a01 ldr r2, [sp, #4] - 801408e: f845 c002 str.w ip, [r5, r2] - 8014092: 9a03 ldr r2, [sp, #12] - 8014094: f8b2 9002 ldrh.w r9, [r2, #2] - 8014098: 3304 adds r3, #4 - 801409a: f1b9 0f00 cmp.w r9, #0 - 801409e: d020 beq.n 80140e2 <__multiply+0x142> - 80140a0: 6829 ldr r1, [r5, #0] - 80140a2: f104 0c14 add.w ip, r4, #20 - 80140a6: 46ae mov lr, r5 - 80140a8: f04f 0a00 mov.w sl, #0 - 80140ac: f8bc b000 ldrh.w fp, [ip] - 80140b0: f8be 2002 ldrh.w r2, [lr, #2] - 80140b4: fb09 220b mla r2, r9, fp, r2 - 80140b8: 4492 add sl, r2 - 80140ba: b289 uxth r1, r1 - 80140bc: ea41 410a orr.w r1, r1, sl, lsl #16 - 80140c0: f84e 1b04 str.w r1, [lr], #4 - 80140c4: f85c 2b04 ldr.w r2, [ip], #4 - 80140c8: f8be 1000 ldrh.w r1, [lr] - 80140cc: 0c12 lsrs r2, r2, #16 - 80140ce: fb09 1102 mla r1, r9, r2, r1 - 80140d2: eb01 411a add.w r1, r1, sl, lsr #16 - 80140d6: 4567 cmp r7, ip - 80140d8: ea4f 4a11 mov.w sl, r1, lsr #16 - 80140dc: d8e6 bhi.n 80140ac <__multiply+0x10c> - 80140de: 9a01 ldr r2, [sp, #4] - 80140e0: 50a9 str r1, [r5, r2] - 80140e2: 3504 adds r5, #4 - 80140e4: e79a b.n 801401c <__multiply+0x7c> - 80140e6: 3e01 subs r6, #1 - 80140e8: e79c b.n 8014024 <__multiply+0x84> - 80140ea: bf00 nop - 80140ec: 08018c49 .word 0x08018c49 - 80140f0: 08018cb5 .word 0x08018cb5 - -080140f4 <__pow5mult>: - 80140f4: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - 80140f8: 4615 mov r5, r2 - 80140fa: f012 0203 ands.w r2, r2, #3 - 80140fe: 4606 mov r6, r0 - 8014100: 460f mov r7, r1 - 8014102: d007 beq.n 8014114 <__pow5mult+0x20> - 8014104: 4c1a ldr r4, [pc, #104] ; (8014170 <__pow5mult+0x7c>) - 8014106: 3a01 subs r2, #1 - 8014108: 2300 movs r3, #0 - 801410a: f854 2022 ldr.w r2, [r4, r2, lsl #2] - 801410e: f7ff fe9b bl 8013e48 <__multadd> - 8014112: 4607 mov r7, r0 - 8014114: 10ad asrs r5, r5, #2 - 8014116: d027 beq.n 8014168 <__pow5mult+0x74> - 8014118: 6cb4 ldr r4, [r6, #72] ; 0x48 - 801411a: b944 cbnz r4, 801412e <__pow5mult+0x3a> - 801411c: f240 2171 movw r1, #625 ; 0x271 - 8014120: 4630 mov r0, r6 - 8014122: f7ff ff27 bl 8013f74 <__i2b> - 8014126: 2300 movs r3, #0 - 8014128: 64b0 str r0, [r6, #72] ; 0x48 - 801412a: 4604 mov r4, r0 - 801412c: 6003 str r3, [r0, #0] - 801412e: f04f 0900 mov.w r9, #0 - 8014132: 07eb lsls r3, r5, #31 - 8014134: d50a bpl.n 801414c <__pow5mult+0x58> - 8014136: 4639 mov r1, r7 - 8014138: 4622 mov r2, r4 - 801413a: 4630 mov r0, r6 - 801413c: f7ff ff30 bl 8013fa0 <__multiply> - 8014140: 4639 mov r1, r7 - 8014142: 4680 mov r8, r0 - 8014144: 4630 mov r0, r6 - 8014146: f7ff fe76 bl 8013e36 <_Bfree> - 801414a: 4647 mov r7, r8 - 801414c: 106d asrs r5, r5, #1 - 801414e: d00b beq.n 8014168 <__pow5mult+0x74> - 8014150: 6820 ldr r0, [r4, #0] - 8014152: b938 cbnz r0, 8014164 <__pow5mult+0x70> - 8014154: 4622 mov r2, r4 - 8014156: 4621 mov r1, r4 - 8014158: 4630 mov r0, r6 - 801415a: f7ff ff21 bl 8013fa0 <__multiply> - 801415e: 6020 str r0, [r4, #0] - 8014160: f8c0 9000 str.w r9, [r0] - 8014164: 4604 mov r4, r0 - 8014166: e7e4 b.n 8014132 <__pow5mult+0x3e> - 8014168: 4638 mov r0, r7 - 801416a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - 801416e: bf00 nop - 8014170: 08018e08 .word 0x08018e08 - -08014174 <__lshift>: - 8014174: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 8014178: 460c mov r4, r1 - 801417a: 6849 ldr r1, [r1, #4] - 801417c: 6923 ldr r3, [r4, #16] - 801417e: eb03 1862 add.w r8, r3, r2, asr #5 - 8014182: 68a3 ldr r3, [r4, #8] - 8014184: 4607 mov r7, r0 - 8014186: 4691 mov r9, r2 - 8014188: ea4f 1a62 mov.w sl, r2, asr #5 - 801418c: f108 0601 add.w r6, r8, #1 - 8014190: 42b3 cmp r3, r6 - 8014192: db0b blt.n 80141ac <__lshift+0x38> - 8014194: 4638 mov r0, r7 - 8014196: f7ff fe29 bl 8013dec <_Balloc> - 801419a: 4605 mov r5, r0 - 801419c: b948 cbnz r0, 80141b2 <__lshift+0x3e> - 801419e: 4602 mov r2, r0 - 80141a0: 4b2a ldr r3, [pc, #168] ; (801424c <__lshift+0xd8>) - 80141a2: 482b ldr r0, [pc, #172] ; (8014250 <__lshift+0xdc>) - 80141a4: f240 11d9 movw r1, #473 ; 0x1d9 - 80141a8: f000 ff5e bl 8015068 <__assert_func> - 80141ac: 3101 adds r1, #1 - 80141ae: 005b lsls r3, r3, #1 - 80141b0: e7ee b.n 8014190 <__lshift+0x1c> - 80141b2: 2300 movs r3, #0 - 80141b4: f100 0114 add.w r1, r0, #20 - 80141b8: f100 0210 add.w r2, r0, #16 - 80141bc: 4618 mov r0, r3 - 80141be: 4553 cmp r3, sl - 80141c0: db37 blt.n 8014232 <__lshift+0xbe> - 80141c2: 6920 ldr r0, [r4, #16] - 80141c4: ea2a 7aea bic.w sl, sl, sl, asr #31 - 80141c8: f104 0314 add.w r3, r4, #20 - 80141cc: f019 091f ands.w r9, r9, #31 - 80141d0: eb01 018a add.w r1, r1, sl, lsl #2 - 80141d4: eb03 0080 add.w r0, r3, r0, lsl #2 - 80141d8: d02f beq.n 801423a <__lshift+0xc6> - 80141da: f1c9 0e20 rsb lr, r9, #32 - 80141de: 468a mov sl, r1 - 80141e0: f04f 0c00 mov.w ip, #0 - 80141e4: 681a ldr r2, [r3, #0] - 80141e6: fa02 f209 lsl.w r2, r2, r9 - 80141ea: ea42 020c orr.w r2, r2, ip - 80141ee: f84a 2b04 str.w r2, [sl], #4 - 80141f2: f853 2b04 ldr.w r2, [r3], #4 - 80141f6: 4298 cmp r0, r3 - 80141f8: fa22 fc0e lsr.w ip, r2, lr - 80141fc: d8f2 bhi.n 80141e4 <__lshift+0x70> - 80141fe: 1b03 subs r3, r0, r4 - 8014200: 3b15 subs r3, #21 - 8014202: f023 0303 bic.w r3, r3, #3 - 8014206: 3304 adds r3, #4 - 8014208: f104 0215 add.w r2, r4, #21 - 801420c: 4290 cmp r0, r2 - 801420e: bf38 it cc - 8014210: 2304 movcc r3, #4 - 8014212: f841 c003 str.w ip, [r1, r3] - 8014216: f1bc 0f00 cmp.w ip, #0 - 801421a: d001 beq.n 8014220 <__lshift+0xac> - 801421c: f108 0602 add.w r6, r8, #2 - 8014220: 3e01 subs r6, #1 - 8014222: 4638 mov r0, r7 - 8014224: 612e str r6, [r5, #16] - 8014226: 4621 mov r1, r4 - 8014228: f7ff fe05 bl 8013e36 <_Bfree> - 801422c: 4628 mov r0, r5 - 801422e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 8014232: f842 0f04 str.w r0, [r2, #4]! - 8014236: 3301 adds r3, #1 - 8014238: e7c1 b.n 80141be <__lshift+0x4a> - 801423a: 3904 subs r1, #4 - 801423c: f853 2b04 ldr.w r2, [r3], #4 - 8014240: f841 2f04 str.w r2, [r1, #4]! - 8014244: 4298 cmp r0, r3 - 8014246: d8f9 bhi.n 801423c <__lshift+0xc8> - 8014248: e7ea b.n 8014220 <__lshift+0xac> - 801424a: bf00 nop - 801424c: 08018c49 .word 0x08018c49 - 8014250: 08018cb5 .word 0x08018cb5 - -08014254 <__mcmp>: - 8014254: b530 push {r4, r5, lr} - 8014256: 6902 ldr r2, [r0, #16] - 8014258: 690c ldr r4, [r1, #16] - 801425a: 1b12 subs r2, r2, r4 - 801425c: d10e bne.n 801427c <__mcmp+0x28> - 801425e: f100 0314 add.w r3, r0, #20 - 8014262: 3114 adds r1, #20 - 8014264: eb03 0084 add.w r0, r3, r4, lsl #2 - 8014268: eb01 0184 add.w r1, r1, r4, lsl #2 - 801426c: f850 5d04 ldr.w r5, [r0, #-4]! - 8014270: f851 4d04 ldr.w r4, [r1, #-4]! - 8014274: 42a5 cmp r5, r4 - 8014276: d003 beq.n 8014280 <__mcmp+0x2c> - 8014278: d305 bcc.n 8014286 <__mcmp+0x32> - 801427a: 2201 movs r2, #1 - 801427c: 4610 mov r0, r2 - 801427e: bd30 pop {r4, r5, pc} - 8014280: 4283 cmp r3, r0 - 8014282: d3f3 bcc.n 801426c <__mcmp+0x18> - 8014284: e7fa b.n 801427c <__mcmp+0x28> - 8014286: f04f 32ff mov.w r2, #4294967295 - 801428a: e7f7 b.n 801427c <__mcmp+0x28> - -0801428c <__mdiff>: - 801428c: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8014290: 460c mov r4, r1 - 8014292: 4606 mov r6, r0 - 8014294: 4611 mov r1, r2 - 8014296: 4620 mov r0, r4 - 8014298: 4690 mov r8, r2 - 801429a: f7ff ffdb bl 8014254 <__mcmp> - 801429e: 1e05 subs r5, r0, #0 - 80142a0: d110 bne.n 80142c4 <__mdiff+0x38> - 80142a2: 4629 mov r1, r5 - 80142a4: 4630 mov r0, r6 - 80142a6: f7ff fda1 bl 8013dec <_Balloc> - 80142aa: b930 cbnz r0, 80142ba <__mdiff+0x2e> - 80142ac: 4b3a ldr r3, [pc, #232] ; (8014398 <__mdiff+0x10c>) - 80142ae: 4602 mov r2, r0 - 80142b0: f240 2132 movw r1, #562 ; 0x232 - 80142b4: 4839 ldr r0, [pc, #228] ; (801439c <__mdiff+0x110>) - 80142b6: f000 fed7 bl 8015068 <__assert_func> - 80142ba: 2301 movs r3, #1 - 80142bc: e9c0 3504 strd r3, r5, [r0, #16] - 80142c0: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - 80142c4: bfa4 itt ge - 80142c6: 4643 movge r3, r8 - 80142c8: 46a0 movge r8, r4 - 80142ca: 4630 mov r0, r6 - 80142cc: f8d8 1004 ldr.w r1, [r8, #4] - 80142d0: bfa6 itte ge - 80142d2: 461c movge r4, r3 - 80142d4: 2500 movge r5, #0 - 80142d6: 2501 movlt r5, #1 - 80142d8: f7ff fd88 bl 8013dec <_Balloc> - 80142dc: b920 cbnz r0, 80142e8 <__mdiff+0x5c> - 80142de: 4b2e ldr r3, [pc, #184] ; (8014398 <__mdiff+0x10c>) - 80142e0: 4602 mov r2, r0 - 80142e2: f44f 7110 mov.w r1, #576 ; 0x240 - 80142e6: e7e5 b.n 80142b4 <__mdiff+0x28> - 80142e8: f8d8 7010 ldr.w r7, [r8, #16] - 80142ec: 6926 ldr r6, [r4, #16] - 80142ee: 60c5 str r5, [r0, #12] - 80142f0: f104 0914 add.w r9, r4, #20 - 80142f4: f108 0514 add.w r5, r8, #20 - 80142f8: f100 0e14 add.w lr, r0, #20 - 80142fc: eb05 0c87 add.w ip, r5, r7, lsl #2 - 8014300: eb09 0686 add.w r6, r9, r6, lsl #2 - 8014304: f108 0210 add.w r2, r8, #16 - 8014308: 46f2 mov sl, lr - 801430a: 2100 movs r1, #0 - 801430c: f859 3b04 ldr.w r3, [r9], #4 - 8014310: f852 bf04 ldr.w fp, [r2, #4]! - 8014314: fa1f f883 uxth.w r8, r3 - 8014318: fa11 f18b uxtah r1, r1, fp - 801431c: 0c1b lsrs r3, r3, #16 - 801431e: eba1 0808 sub.w r8, r1, r8 - 8014322: ebc3 431b rsb r3, r3, fp, lsr #16 - 8014326: eb03 4328 add.w r3, r3, r8, asr #16 - 801432a: fa1f f888 uxth.w r8, r8 - 801432e: 1419 asrs r1, r3, #16 - 8014330: 454e cmp r6, r9 - 8014332: ea48 4303 orr.w r3, r8, r3, lsl #16 - 8014336: f84a 3b04 str.w r3, [sl], #4 - 801433a: d8e7 bhi.n 801430c <__mdiff+0x80> - 801433c: 1b33 subs r3, r6, r4 - 801433e: 3b15 subs r3, #21 - 8014340: f023 0303 bic.w r3, r3, #3 - 8014344: 3304 adds r3, #4 - 8014346: 3415 adds r4, #21 - 8014348: 42a6 cmp r6, r4 - 801434a: bf38 it cc - 801434c: 2304 movcc r3, #4 - 801434e: 441d add r5, r3 - 8014350: 4473 add r3, lr - 8014352: 469e mov lr, r3 - 8014354: 462e mov r6, r5 - 8014356: 4566 cmp r6, ip - 8014358: d30e bcc.n 8014378 <__mdiff+0xec> - 801435a: f10c 0203 add.w r2, ip, #3 - 801435e: 1b52 subs r2, r2, r5 - 8014360: f022 0203 bic.w r2, r2, #3 - 8014364: 3d03 subs r5, #3 - 8014366: 45ac cmp ip, r5 - 8014368: bf38 it cc - 801436a: 2200 movcc r2, #0 - 801436c: 441a add r2, r3 - 801436e: f852 3d04 ldr.w r3, [r2, #-4]! - 8014372: b17b cbz r3, 8014394 <__mdiff+0x108> - 8014374: 6107 str r7, [r0, #16] - 8014376: e7a3 b.n 80142c0 <__mdiff+0x34> - 8014378: f856 8b04 ldr.w r8, [r6], #4 - 801437c: fa11 f288 uxtah r2, r1, r8 - 8014380: 1414 asrs r4, r2, #16 - 8014382: eb04 4418 add.w r4, r4, r8, lsr #16 - 8014386: b292 uxth r2, r2 - 8014388: ea42 4204 orr.w r2, r2, r4, lsl #16 - 801438c: f84e 2b04 str.w r2, [lr], #4 - 8014390: 1421 asrs r1, r4, #16 - 8014392: e7e0 b.n 8014356 <__mdiff+0xca> - 8014394: 3f01 subs r7, #1 - 8014396: e7ea b.n 801436e <__mdiff+0xe2> - 8014398: 08018c49 .word 0x08018c49 - 801439c: 08018cb5 .word 0x08018cb5 - -080143a0 <__d2b>: - 80143a0: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} - 80143a4: 4689 mov r9, r1 - 80143a6: 2101 movs r1, #1 - 80143a8: ec57 6b10 vmov r6, r7, d0 - 80143ac: 4690 mov r8, r2 - 80143ae: f7ff fd1d bl 8013dec <_Balloc> - 80143b2: 4604 mov r4, r0 - 80143b4: b930 cbnz r0, 80143c4 <__d2b+0x24> - 80143b6: 4602 mov r2, r0 - 80143b8: 4b25 ldr r3, [pc, #148] ; (8014450 <__d2b+0xb0>) - 80143ba: 4826 ldr r0, [pc, #152] ; (8014454 <__d2b+0xb4>) - 80143bc: f240 310a movw r1, #778 ; 0x30a - 80143c0: f000 fe52 bl 8015068 <__assert_func> - 80143c4: f3c7 550a ubfx r5, r7, #20, #11 - 80143c8: f3c7 0313 ubfx r3, r7, #0, #20 - 80143cc: bb35 cbnz r5, 801441c <__d2b+0x7c> - 80143ce: 2e00 cmp r6, #0 - 80143d0: 9301 str r3, [sp, #4] - 80143d2: d028 beq.n 8014426 <__d2b+0x86> - 80143d4: 4668 mov r0, sp - 80143d6: 9600 str r6, [sp, #0] - 80143d8: f7ff fd9c bl 8013f14 <__lo0bits> - 80143dc: 9900 ldr r1, [sp, #0] - 80143de: b300 cbz r0, 8014422 <__d2b+0x82> - 80143e0: 9a01 ldr r2, [sp, #4] - 80143e2: f1c0 0320 rsb r3, r0, #32 - 80143e6: fa02 f303 lsl.w r3, r2, r3 - 80143ea: 430b orrs r3, r1 - 80143ec: 40c2 lsrs r2, r0 - 80143ee: 6163 str r3, [r4, #20] - 80143f0: 9201 str r2, [sp, #4] - 80143f2: 9b01 ldr r3, [sp, #4] - 80143f4: 61a3 str r3, [r4, #24] - 80143f6: 2b00 cmp r3, #0 - 80143f8: bf14 ite ne - 80143fa: 2202 movne r2, #2 - 80143fc: 2201 moveq r2, #1 - 80143fe: 6122 str r2, [r4, #16] - 8014400: b1d5 cbz r5, 8014438 <__d2b+0x98> - 8014402: f2a5 4533 subw r5, r5, #1075 ; 0x433 - 8014406: 4405 add r5, r0 - 8014408: f8c9 5000 str.w r5, [r9] - 801440c: f1c0 0035 rsb r0, r0, #53 ; 0x35 - 8014410: f8c8 0000 str.w r0, [r8] - 8014414: 4620 mov r0, r4 - 8014416: b003 add sp, #12 - 8014418: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - 801441c: f443 1380 orr.w r3, r3, #1048576 ; 0x100000 - 8014420: e7d5 b.n 80143ce <__d2b+0x2e> - 8014422: 6161 str r1, [r4, #20] - 8014424: e7e5 b.n 80143f2 <__d2b+0x52> - 8014426: a801 add r0, sp, #4 - 8014428: f7ff fd74 bl 8013f14 <__lo0bits> - 801442c: 9b01 ldr r3, [sp, #4] - 801442e: 6163 str r3, [r4, #20] - 8014430: 2201 movs r2, #1 - 8014432: 6122 str r2, [r4, #16] - 8014434: 3020 adds r0, #32 - 8014436: e7e3 b.n 8014400 <__d2b+0x60> - 8014438: eb04 0382 add.w r3, r4, r2, lsl #2 - 801443c: f2a0 4032 subw r0, r0, #1074 ; 0x432 - 8014440: f8c9 0000 str.w r0, [r9] - 8014444: 6918 ldr r0, [r3, #16] - 8014446: f7ff fd45 bl 8013ed4 <__hi0bits> - 801444a: ebc0 1042 rsb r0, r0, r2, lsl #5 - 801444e: e7df b.n 8014410 <__d2b+0x70> - 8014450: 08018c49 .word 0x08018c49 - 8014454: 08018cb5 .word 0x08018cb5 - -08014458 : - 8014458: b570 push {r4, r5, r6, lr} - 801445a: 2100 movs r1, #0 - 801445c: ec55 4b10 vmov r4, r5, d0 - 8014460: 6001 str r1, [r0, #0] - 8014462: 4916 ldr r1, [pc, #88] ; (80144bc ) - 8014464: f025 4200 bic.w r2, r5, #2147483648 ; 0x80000000 - 8014468: 428a cmp r2, r1 - 801446a: 4606 mov r6, r0 - 801446c: 462b mov r3, r5 - 801446e: dc22 bgt.n 80144b6 - 8014470: ee10 1a10 vmov r1, s0 - 8014474: 4311 orrs r1, r2 - 8014476: d01e beq.n 80144b6 - 8014478: 4911 ldr r1, [pc, #68] ; (80144c0 ) - 801447a: 4029 ands r1, r5 - 801447c: b969 cbnz r1, 801449a - 801447e: 4b11 ldr r3, [pc, #68] ; (80144c4 ) - 8014480: 2200 movs r2, #0 - 8014482: ee10 0a10 vmov r0, s0 - 8014486: 4629 mov r1, r5 - 8014488: f7ec f8c6 bl 8000618 <__aeabi_dmul> - 801448c: 460b mov r3, r1 - 801448e: f021 4200 bic.w r2, r1, #2147483648 ; 0x80000000 - 8014492: f06f 0135 mvn.w r1, #53 ; 0x35 - 8014496: 4604 mov r4, r0 - 8014498: 6031 str r1, [r6, #0] - 801449a: 6831 ldr r1, [r6, #0] - 801449c: 1512 asrs r2, r2, #20 - 801449e: f023 43ff bic.w r3, r3, #2139095040 ; 0x7f800000 - 80144a2: f2a2 32fe subw r2, r2, #1022 ; 0x3fe - 80144a6: f423 03e0 bic.w r3, r3, #7340032 ; 0x700000 - 80144aa: 440a add r2, r1 - 80144ac: f043 557f orr.w r5, r3, #1069547520 ; 0x3fc00000 - 80144b0: 6032 str r2, [r6, #0] - 80144b2: f445 1500 orr.w r5, r5, #2097152 ; 0x200000 - 80144b6: ec45 4b10 vmov d0, r4, r5 - 80144ba: bd70 pop {r4, r5, r6, pc} - 80144bc: 7fefffff .word 0x7fefffff - 80144c0: 7ff00000 .word 0x7ff00000 - 80144c4: 43500000 .word 0x43500000 - -080144c8 <_sbrk_r>: - 80144c8: b538 push {r3, r4, r5, lr} - 80144ca: 4d06 ldr r5, [pc, #24] ; (80144e4 <_sbrk_r+0x1c>) - 80144cc: 2300 movs r3, #0 - 80144ce: 4604 mov r4, r0 - 80144d0: 4608 mov r0, r1 - 80144d2: 602b str r3, [r5, #0] - 80144d4: f001 fb40 bl 8015b58 <_sbrk> - 80144d8: 1c43 adds r3, r0, #1 - 80144da: d102 bne.n 80144e2 <_sbrk_r+0x1a> - 80144dc: 682b ldr r3, [r5, #0] - 80144de: b103 cbz r3, 80144e2 <_sbrk_r+0x1a> - 80144e0: 6023 str r3, [r4, #0] - 80144e2: bd38 pop {r3, r4, r5, pc} - 80144e4: 20009b9c .word 0x20009b9c - -080144e8 <__sread>: - 80144e8: b510 push {r4, lr} - 80144ea: 460c mov r4, r1 - 80144ec: f9b1 100e ldrsh.w r1, [r1, #14] - 80144f0: f001 f88a bl 8015608 <_read_r> - 80144f4: 2800 cmp r0, #0 - 80144f6: bfab itete ge - 80144f8: 6d23 ldrge r3, [r4, #80] ; 0x50 - 80144fa: 89a3 ldrhlt r3, [r4, #12] - 80144fc: 181b addge r3, r3, r0 - 80144fe: f423 5380 biclt.w r3, r3, #4096 ; 0x1000 - 8014502: bfac ite ge - 8014504: 6523 strge r3, [r4, #80] ; 0x50 - 8014506: 81a3 strhlt r3, [r4, #12] - 8014508: bd10 pop {r4, pc} - -0801450a <__swrite>: - 801450a: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 801450e: 461f mov r7, r3 - 8014510: 898b ldrh r3, [r1, #12] - 8014512: 05db lsls r3, r3, #23 - 8014514: 4605 mov r5, r0 - 8014516: 460c mov r4, r1 - 8014518: 4616 mov r6, r2 - 801451a: d505 bpl.n 8014528 <__swrite+0x1e> - 801451c: f9b1 100e ldrsh.w r1, [r1, #14] - 8014520: 2302 movs r3, #2 - 8014522: 2200 movs r2, #0 - 8014524: f001 f84c bl 80155c0 <_lseek_r> - 8014528: 89a3 ldrh r3, [r4, #12] - 801452a: f9b4 100e ldrsh.w r1, [r4, #14] - 801452e: f423 5380 bic.w r3, r3, #4096 ; 0x1000 - 8014532: 81a3 strh r3, [r4, #12] - 8014534: 4632 mov r2, r6 - 8014536: 463b mov r3, r7 - 8014538: 4628 mov r0, r5 - 801453a: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - 801453e: f000 bd3f b.w 8014fc0 <_write_r> - -08014542 <__sseek>: - 8014542: b510 push {r4, lr} - 8014544: 460c mov r4, r1 - 8014546: f9b1 100e ldrsh.w r1, [r1, #14] - 801454a: f001 f839 bl 80155c0 <_lseek_r> - 801454e: 1c43 adds r3, r0, #1 - 8014550: 89a3 ldrh r3, [r4, #12] - 8014552: bf15 itete ne - 8014554: 6520 strne r0, [r4, #80] ; 0x50 - 8014556: f423 5380 biceq.w r3, r3, #4096 ; 0x1000 - 801455a: f443 5380 orrne.w r3, r3, #4096 ; 0x1000 - 801455e: 81a3 strheq r3, [r4, #12] - 8014560: bf18 it ne - 8014562: 81a3 strhne r3, [r4, #12] - 8014564: bd10 pop {r4, pc} - -08014566 <__sclose>: - 8014566: f9b1 100e ldrsh.w r1, [r1, #14] - 801456a: f000 bdd1 b.w 8015110 <_close_r> - -0801456e : - 801456e: b510 push {r4, lr} - 8014570: 3901 subs r1, #1 - 8014572: 4603 mov r3, r0 - 8014574: b132 cbz r2, 8014584 - 8014576: f811 4f01 ldrb.w r4, [r1, #1]! - 801457a: f803 4b01 strb.w r4, [r3], #1 - 801457e: 3a01 subs r2, #1 - 8014580: 2c00 cmp r4, #0 - 8014582: d1f7 bne.n 8014574 - 8014584: 441a add r2, r3 - 8014586: 2100 movs r1, #0 - 8014588: 4293 cmp r3, r2 - 801458a: d100 bne.n 801458e - 801458c: bd10 pop {r4, pc} - 801458e: f803 1b01 strb.w r1, [r3], #1 - 8014592: e7f9 b.n 8014588 - -08014594 : - 8014594: 2808 cmp r0, #8 - 8014596: b508 push {r3, lr} - 8014598: d006 beq.n 80145a8 - 801459a: f7fe fefb bl 8013394 <__errno> - 801459e: 2316 movs r3, #22 - 80145a0: 6003 str r3, [r0, #0] - 80145a2: f04f 30ff mov.w r0, #4294967295 - 80145a6: bd08 pop {r3, pc} - 80145a8: f44f 5080 mov.w r0, #4096 ; 0x1000 - 80145ac: e7fb b.n 80145a6 - -080145ae <__sprint_r>: - 80145ae: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - 80145b2: 6893 ldr r3, [r2, #8] - 80145b4: 4680 mov r8, r0 - 80145b6: 460f mov r7, r1 - 80145b8: 4614 mov r4, r2 - 80145ba: b91b cbnz r3, 80145c4 <__sprint_r+0x16> - 80145bc: 6053 str r3, [r2, #4] - 80145be: 4618 mov r0, r3 - 80145c0: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - 80145c4: 6e4b ldr r3, [r1, #100] ; 0x64 - 80145c6: 049d lsls r5, r3, #18 - 80145c8: d520 bpl.n 801460c <__sprint_r+0x5e> - 80145ca: 6815 ldr r5, [r2, #0] - 80145cc: 3508 adds r5, #8 - 80145ce: e955 b602 ldrd fp, r6, [r5, #-8] - 80145d2: f04f 0900 mov.w r9, #0 - 80145d6: ea4f 0a96 mov.w sl, r6, lsr #2 - 80145da: 45ca cmp sl, r9 - 80145dc: dc0b bgt.n 80145f6 <__sprint_r+0x48> - 80145de: 68a3 ldr r3, [r4, #8] - 80145e0: f026 0003 bic.w r0, r6, #3 - 80145e4: 1a18 subs r0, r3, r0 - 80145e6: 60a0 str r0, [r4, #8] - 80145e8: 3508 adds r5, #8 - 80145ea: 2800 cmp r0, #0 - 80145ec: d1ef bne.n 80145ce <__sprint_r+0x20> - 80145ee: 2300 movs r3, #0 - 80145f0: e9c4 3301 strd r3, r3, [r4, #4] - 80145f4: e7e4 b.n 80145c0 <__sprint_r+0x12> - 80145f6: f85b 1029 ldr.w r1, [fp, r9, lsl #2] - 80145fa: 463a mov r2, r7 - 80145fc: 4640 mov r0, r8 - 80145fe: f000 fe42 bl 8015286 <_fputwc_r> - 8014602: 1c43 adds r3, r0, #1 - 8014604: d0f3 beq.n 80145ee <__sprint_r+0x40> - 8014606: f109 0901 add.w r9, r9, #1 - 801460a: e7e6 b.n 80145da <__sprint_r+0x2c> - 801460c: f000 fe78 bl 8015300 <__sfvwrite_r> - 8014610: e7ed b.n 80145ee <__sprint_r+0x40> - ... - -08014614 <_vfiprintf_r>: - 8014614: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8014618: ed2d 8b02 vpush {d8} - 801461c: b0b9 sub sp, #228 ; 0xe4 - 801461e: 460f mov r7, r1 - 8014620: 9201 str r2, [sp, #4] - 8014622: 461d mov r5, r3 - 8014624: 461c mov r4, r3 - 8014626: 4681 mov r9, r0 - 8014628: b118 cbz r0, 8014632 <_vfiprintf_r+0x1e> - 801462a: 6b83 ldr r3, [r0, #56] ; 0x38 - 801462c: b90b cbnz r3, 8014632 <_vfiprintf_r+0x1e> - 801462e: f7fe ffb1 bl 8013594 <__sinit> - 8014632: 6e7b ldr r3, [r7, #100] ; 0x64 - 8014634: 07d8 lsls r0, r3, #31 - 8014636: d405 bmi.n 8014644 <_vfiprintf_r+0x30> - 8014638: 89bb ldrh r3, [r7, #12] - 801463a: 0599 lsls r1, r3, #22 - 801463c: d402 bmi.n 8014644 <_vfiprintf_r+0x30> - 801463e: 6db8 ldr r0, [r7, #88] ; 0x58 - 8014640: f7ff f91e bl 8013880 <__retarget_lock_acquire_recursive> - 8014644: f9b7 300c ldrsh.w r3, [r7, #12] - 8014648: 049a lsls r2, r3, #18 - 801464a: d406 bmi.n 801465a <_vfiprintf_r+0x46> - 801464c: f443 5300 orr.w r3, r3, #8192 ; 0x2000 - 8014650: 81bb strh r3, [r7, #12] - 8014652: 6e7b ldr r3, [r7, #100] ; 0x64 - 8014654: f423 5300 bic.w r3, r3, #8192 ; 0x2000 - 8014658: 667b str r3, [r7, #100] ; 0x64 - 801465a: 89bb ldrh r3, [r7, #12] - 801465c: 071e lsls r6, r3, #28 - 801465e: d501 bpl.n 8014664 <_vfiprintf_r+0x50> - 8014660: 693b ldr r3, [r7, #16] - 8014662: b9bb cbnz r3, 8014694 <_vfiprintf_r+0x80> - 8014664: 4639 mov r1, r7 - 8014666: 4648 mov r0, r9 - 8014668: f7fd ffc8 bl 80125fc <__swsetup_r> - 801466c: b190 cbz r0, 8014694 <_vfiprintf_r+0x80> - 801466e: 6e7b ldr r3, [r7, #100] ; 0x64 - 8014670: 07d8 lsls r0, r3, #31 - 8014672: d508 bpl.n 8014686 <_vfiprintf_r+0x72> - 8014674: f04f 33ff mov.w r3, #4294967295 - 8014678: 9302 str r3, [sp, #8] - 801467a: 9802 ldr r0, [sp, #8] - 801467c: b039 add sp, #228 ; 0xe4 - 801467e: ecbd 8b02 vpop {d8} - 8014682: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 8014686: 89bb ldrh r3, [r7, #12] - 8014688: 0599 lsls r1, r3, #22 - 801468a: d4f3 bmi.n 8014674 <_vfiprintf_r+0x60> - 801468c: 6db8 ldr r0, [r7, #88] ; 0x58 - 801468e: f7ff f8f8 bl 8013882 <__retarget_lock_release_recursive> - 8014692: e7ef b.n 8014674 <_vfiprintf_r+0x60> - 8014694: 89bb ldrh r3, [r7, #12] - 8014696: f003 021a and.w r2, r3, #26 - 801469a: 2a0a cmp r2, #10 - 801469c: d116 bne.n 80146cc <_vfiprintf_r+0xb8> - 801469e: f9b7 200e ldrsh.w r2, [r7, #14] - 80146a2: 2a00 cmp r2, #0 - 80146a4: db12 blt.n 80146cc <_vfiprintf_r+0xb8> - 80146a6: 6e7a ldr r2, [r7, #100] ; 0x64 - 80146a8: 07d2 lsls r2, r2, #31 - 80146aa: d404 bmi.n 80146b6 <_vfiprintf_r+0xa2> - 80146ac: 059e lsls r6, r3, #22 - 80146ae: d402 bmi.n 80146b6 <_vfiprintf_r+0xa2> - 80146b0: 6db8 ldr r0, [r7, #88] ; 0x58 - 80146b2: f7ff f8e6 bl 8013882 <__retarget_lock_release_recursive> - 80146b6: 9a01 ldr r2, [sp, #4] - 80146b8: 462b mov r3, r5 - 80146ba: 4639 mov r1, r7 - 80146bc: 4648 mov r0, r9 - 80146be: b039 add sp, #228 ; 0xe4 - 80146c0: ecbd 8b02 vpop {d8} - 80146c4: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 80146c8: f000 bc3a b.w 8014f40 <__sbprintf> - 80146cc: 2300 movs r3, #0 - 80146ce: e9cd 330d strd r3, r3, [sp, #52] ; 0x34 - 80146d2: e9cd 3305 strd r3, r3, [sp, #20] - 80146d6: ae0f add r6, sp, #60 ; 0x3c - 80146d8: ee08 3a10 vmov s16, r3 - 80146dc: 960c str r6, [sp, #48] ; 0x30 - 80146de: 9307 str r3, [sp, #28] - 80146e0: 9302 str r3, [sp, #8] - 80146e2: 9b01 ldr r3, [sp, #4] - 80146e4: 461d mov r5, r3 - 80146e6: f813 2b01 ldrb.w r2, [r3], #1 - 80146ea: b10a cbz r2, 80146f0 <_vfiprintf_r+0xdc> - 80146ec: 2a25 cmp r2, #37 ; 0x25 - 80146ee: d1f9 bne.n 80146e4 <_vfiprintf_r+0xd0> - 80146f0: 9b01 ldr r3, [sp, #4] - 80146f2: ebb5 0803 subs.w r8, r5, r3 - 80146f6: d00d beq.n 8014714 <_vfiprintf_r+0x100> - 80146f8: e9c6 3800 strd r3, r8, [r6] - 80146fc: 9b0e ldr r3, [sp, #56] ; 0x38 - 80146fe: 4443 add r3, r8 - 8014700: 930e str r3, [sp, #56] ; 0x38 - 8014702: 9b0d ldr r3, [sp, #52] ; 0x34 - 8014704: 3301 adds r3, #1 - 8014706: 2b07 cmp r3, #7 - 8014708: 930d str r3, [sp, #52] ; 0x34 - 801470a: dc75 bgt.n 80147f8 <_vfiprintf_r+0x1e4> - 801470c: 3608 adds r6, #8 - 801470e: 9b02 ldr r3, [sp, #8] - 8014710: 4443 add r3, r8 - 8014712: 9302 str r3, [sp, #8] - 8014714: 782b ldrb r3, [r5, #0] - 8014716: 2b00 cmp r3, #0 - 8014718: f000 83d6 beq.w 8014ec8 <_vfiprintf_r+0x8b4> - 801471c: 2300 movs r3, #0 - 801471e: f04f 31ff mov.w r1, #4294967295 - 8014722: 1c6a adds r2, r5, #1 - 8014724: f88d 302b strb.w r3, [sp, #43] ; 0x2b - 8014728: 9100 str r1, [sp, #0] - 801472a: 9303 str r3, [sp, #12] - 801472c: 469a mov sl, r3 - 801472e: f812 3b01 ldrb.w r3, [r2], #1 - 8014732: 9201 str r2, [sp, #4] - 8014734: f1a3 0220 sub.w r2, r3, #32 - 8014738: 2a5a cmp r2, #90 ; 0x5a - 801473a: f200 831f bhi.w 8014d7c <_vfiprintf_r+0x768> - 801473e: e8df f012 tbh [pc, r2, lsl #1] - 8014742: 009b .short 0x009b - 8014744: 031d031d .word 0x031d031d - 8014748: 031d00a3 .word 0x031d00a3 - 801474c: 031d031d .word 0x031d031d - 8014750: 031d0082 .word 0x031d0082 - 8014754: 00a6031d .word 0x00a6031d - 8014758: 031d00b0 .word 0x031d00b0 - 801475c: 00b200ad .word 0x00b200ad - 8014760: 00cd031d .word 0x00cd031d - 8014764: 00d000d0 .word 0x00d000d0 - 8014768: 00d000d0 .word 0x00d000d0 - 801476c: 00d000d0 .word 0x00d000d0 - 8014770: 00d000d0 .word 0x00d000d0 - 8014774: 031d00d0 .word 0x031d00d0 - 8014778: 031d031d .word 0x031d031d - 801477c: 031d031d .word 0x031d031d - 8014780: 031d031d .word 0x031d031d - 8014784: 031d031d .word 0x031d031d - 8014788: 010800fa .word 0x010800fa - 801478c: 031d031d .word 0x031d031d - 8014790: 031d031d .word 0x031d031d - 8014794: 031d031d .word 0x031d031d - 8014798: 031d031d .word 0x031d031d - 801479c: 031d031d .word 0x031d031d - 80147a0: 031d0158 .word 0x031d0158 - 80147a4: 031d031d .word 0x031d031d - 80147a8: 031d01a1 .word 0x031d01a1 - 80147ac: 031d027e .word 0x031d027e - 80147b0: 029e031d .word 0x029e031d - 80147b4: 031d031d .word 0x031d031d - 80147b8: 031d031d .word 0x031d031d - 80147bc: 031d031d .word 0x031d031d - 80147c0: 031d031d .word 0x031d031d - 80147c4: 031d031d .word 0x031d031d - 80147c8: 010a00fa .word 0x010a00fa - 80147cc: 031d031d .word 0x031d031d - 80147d0: 00e0031d .word 0x00e0031d - 80147d4: 00f4010a .word 0x00f4010a - 80147d8: 00ed031d .word 0x00ed031d - 80147dc: 0136031d .word 0x0136031d - 80147e0: 018f015a .word 0x018f015a - 80147e4: 031d00f4 .word 0x031d00f4 - 80147e8: 009901a1 .word 0x009901a1 - 80147ec: 031d0280 .word 0x031d0280 - 80147f0: 0065031d .word 0x0065031d - 80147f4: 0099031d .word 0x0099031d - 80147f8: aa0c add r2, sp, #48 ; 0x30 - 80147fa: 4639 mov r1, r7 - 80147fc: 4648 mov r0, r9 - 80147fe: f7ff fed6 bl 80145ae <__sprint_r> - 8014802: 2800 cmp r0, #0 - 8014804: f040 833f bne.w 8014e86 <_vfiprintf_r+0x872> - 8014808: ae0f add r6, sp, #60 ; 0x3c - 801480a: e780 b.n 801470e <_vfiprintf_r+0xfa> - 801480c: 4a9c ldr r2, [pc, #624] ; (8014a80 <_vfiprintf_r+0x46c>) - 801480e: 9205 str r2, [sp, #20] - 8014810: f01a 0220 ands.w r2, sl, #32 - 8014814: f000 8235 beq.w 8014c82 <_vfiprintf_r+0x66e> - 8014818: 3407 adds r4, #7 - 801481a: f024 0207 bic.w r2, r4, #7 - 801481e: 4693 mov fp, r2 - 8014820: 6855 ldr r5, [r2, #4] - 8014822: f85b 4b08 ldr.w r4, [fp], #8 - 8014826: f01a 0f01 tst.w sl, #1 - 801482a: d009 beq.n 8014840 <_vfiprintf_r+0x22c> - 801482c: ea54 0205 orrs.w r2, r4, r5 - 8014830: bf1f itttt ne - 8014832: 2230 movne r2, #48 ; 0x30 - 8014834: f88d 202c strbne.w r2, [sp, #44] ; 0x2c - 8014838: f88d 302d strbne.w r3, [sp, #45] ; 0x2d - 801483c: f04a 0a02 orrne.w sl, sl, #2 - 8014840: f42a 6a80 bic.w sl, sl, #1024 ; 0x400 - 8014844: e11a b.n 8014a7c <_vfiprintf_r+0x468> - 8014846: 4648 mov r0, r9 - 8014848: f7ff f814 bl 8013874 <_localeconv_r> - 801484c: 6843 ldr r3, [r0, #4] - 801484e: 4618 mov r0, r3 - 8014850: ee08 3a10 vmov s16, r3 - 8014854: f7eb fccc bl 80001f0 - 8014858: 9007 str r0, [sp, #28] - 801485a: 4648 mov r0, r9 - 801485c: f7ff f80a bl 8013874 <_localeconv_r> - 8014860: 6883 ldr r3, [r0, #8] - 8014862: 9306 str r3, [sp, #24] - 8014864: 9b07 ldr r3, [sp, #28] - 8014866: b12b cbz r3, 8014874 <_vfiprintf_r+0x260> - 8014868: 9b06 ldr r3, [sp, #24] - 801486a: b11b cbz r3, 8014874 <_vfiprintf_r+0x260> - 801486c: 781b ldrb r3, [r3, #0] - 801486e: b10b cbz r3, 8014874 <_vfiprintf_r+0x260> - 8014870: f44a 6a80 orr.w sl, sl, #1024 ; 0x400 - 8014874: 9a01 ldr r2, [sp, #4] - 8014876: e75a b.n 801472e <_vfiprintf_r+0x11a> - 8014878: f89d 302b ldrb.w r3, [sp, #43] ; 0x2b - 801487c: 2b00 cmp r3, #0 - 801487e: d1f9 bne.n 8014874 <_vfiprintf_r+0x260> - 8014880: 2320 movs r3, #32 - 8014882: f88d 302b strb.w r3, [sp, #43] ; 0x2b - 8014886: e7f5 b.n 8014874 <_vfiprintf_r+0x260> - 8014888: f04a 0a01 orr.w sl, sl, #1 - 801488c: e7f2 b.n 8014874 <_vfiprintf_r+0x260> - 801488e: f854 3b04 ldr.w r3, [r4], #4 - 8014892: 9303 str r3, [sp, #12] - 8014894: 2b00 cmp r3, #0 - 8014896: daed bge.n 8014874 <_vfiprintf_r+0x260> - 8014898: 425b negs r3, r3 - 801489a: 9303 str r3, [sp, #12] - 801489c: f04a 0a04 orr.w sl, sl, #4 - 80148a0: e7e8 b.n 8014874 <_vfiprintf_r+0x260> - 80148a2: 232b movs r3, #43 ; 0x2b - 80148a4: e7ed b.n 8014882 <_vfiprintf_r+0x26e> - 80148a6: 9a01 ldr r2, [sp, #4] - 80148a8: f812 3b01 ldrb.w r3, [r2], #1 - 80148ac: 2b2a cmp r3, #42 ; 0x2a - 80148ae: d112 bne.n 80148d6 <_vfiprintf_r+0x2c2> - 80148b0: f854 0b04 ldr.w r0, [r4], #4 - 80148b4: ea40 73e0 orr.w r3, r0, r0, asr #31 - 80148b8: e9cd 3200 strd r3, r2, [sp] - 80148bc: e7da b.n 8014874 <_vfiprintf_r+0x260> - 80148be: 9b00 ldr r3, [sp, #0] - 80148c0: 200a movs r0, #10 - 80148c2: fb00 1303 mla r3, r0, r3, r1 - 80148c6: 9300 str r3, [sp, #0] - 80148c8: f812 3b01 ldrb.w r3, [r2], #1 - 80148cc: f1a3 0130 sub.w r1, r3, #48 ; 0x30 - 80148d0: 2909 cmp r1, #9 - 80148d2: d9f4 bls.n 80148be <_vfiprintf_r+0x2aa> - 80148d4: e72d b.n 8014732 <_vfiprintf_r+0x11e> - 80148d6: 2100 movs r1, #0 - 80148d8: 9100 str r1, [sp, #0] - 80148da: e7f7 b.n 80148cc <_vfiprintf_r+0x2b8> - 80148dc: f04a 0a80 orr.w sl, sl, #128 ; 0x80 - 80148e0: e7c8 b.n 8014874 <_vfiprintf_r+0x260> - 80148e2: 2100 movs r1, #0 - 80148e4: 9a01 ldr r2, [sp, #4] - 80148e6: 9103 str r1, [sp, #12] - 80148e8: 9903 ldr r1, [sp, #12] - 80148ea: 3b30 subs r3, #48 ; 0x30 - 80148ec: 200a movs r0, #10 - 80148ee: fb00 3301 mla r3, r0, r1, r3 - 80148f2: 9303 str r3, [sp, #12] - 80148f4: f812 3b01 ldrb.w r3, [r2], #1 - 80148f8: f1a3 0130 sub.w r1, r3, #48 ; 0x30 - 80148fc: 2909 cmp r1, #9 - 80148fe: d9f3 bls.n 80148e8 <_vfiprintf_r+0x2d4> - 8014900: e717 b.n 8014732 <_vfiprintf_r+0x11e> - 8014902: 9b01 ldr r3, [sp, #4] - 8014904: 781b ldrb r3, [r3, #0] - 8014906: 2b68 cmp r3, #104 ; 0x68 - 8014908: bf01 itttt eq - 801490a: 9b01 ldreq r3, [sp, #4] - 801490c: 3301 addeq r3, #1 - 801490e: 9301 streq r3, [sp, #4] - 8014910: f44a 7a00 orreq.w sl, sl, #512 ; 0x200 - 8014914: bf18 it ne - 8014916: f04a 0a40 orrne.w sl, sl, #64 ; 0x40 - 801491a: e7ab b.n 8014874 <_vfiprintf_r+0x260> - 801491c: 9b01 ldr r3, [sp, #4] - 801491e: 781b ldrb r3, [r3, #0] - 8014920: 2b6c cmp r3, #108 ; 0x6c - 8014922: d105 bne.n 8014930 <_vfiprintf_r+0x31c> - 8014924: 9b01 ldr r3, [sp, #4] - 8014926: 3301 adds r3, #1 - 8014928: 9301 str r3, [sp, #4] - 801492a: f04a 0a20 orr.w sl, sl, #32 - 801492e: e7a1 b.n 8014874 <_vfiprintf_r+0x260> - 8014930: f04a 0a10 orr.w sl, sl, #16 - 8014934: e79e b.n 8014874 <_vfiprintf_r+0x260> - 8014936: 46a3 mov fp, r4 - 8014938: 2100 movs r1, #0 - 801493a: f85b 3b04 ldr.w r3, [fp], #4 - 801493e: f88d 307c strb.w r3, [sp, #124] ; 0x7c - 8014942: f88d 102b strb.w r1, [sp, #43] ; 0x2b - 8014946: 2301 movs r3, #1 - 8014948: 9300 str r3, [sp, #0] - 801494a: 460d mov r5, r1 - 801494c: f10d 087c add.w r8, sp, #124 ; 0x7c - 8014950: e0ad b.n 8014aae <_vfiprintf_r+0x49a> - 8014952: f04a 0a10 orr.w sl, sl, #16 - 8014956: f01a 0f20 tst.w sl, #32 - 801495a: d011 beq.n 8014980 <_vfiprintf_r+0x36c> - 801495c: 3407 adds r4, #7 - 801495e: f024 0307 bic.w r3, r4, #7 - 8014962: 469b mov fp, r3 - 8014964: 685d ldr r5, [r3, #4] - 8014966: f85b 4b08 ldr.w r4, [fp], #8 - 801496a: 2d00 cmp r5, #0 - 801496c: da06 bge.n 801497c <_vfiprintf_r+0x368> - 801496e: 4264 negs r4, r4 - 8014970: f04f 032d mov.w r3, #45 ; 0x2d - 8014974: eb65 0545 sbc.w r5, r5, r5, lsl #1 - 8014978: f88d 302b strb.w r3, [sp, #43] ; 0x2b - 801497c: 2301 movs r3, #1 - 801497e: e04a b.n 8014a16 <_vfiprintf_r+0x402> - 8014980: 46a3 mov fp, r4 - 8014982: f01a 0f10 tst.w sl, #16 - 8014986: f85b 5b04 ldr.w r5, [fp], #4 - 801498a: d002 beq.n 8014992 <_vfiprintf_r+0x37e> - 801498c: 462c mov r4, r5 - 801498e: 17ed asrs r5, r5, #31 - 8014990: e7eb b.n 801496a <_vfiprintf_r+0x356> - 8014992: f01a 0f40 tst.w sl, #64 ; 0x40 - 8014996: d003 beq.n 80149a0 <_vfiprintf_r+0x38c> - 8014998: b22c sxth r4, r5 - 801499a: f345 35c0 sbfx r5, r5, #15, #1 - 801499e: e7e4 b.n 801496a <_vfiprintf_r+0x356> - 80149a0: f41a 7f00 tst.w sl, #512 ; 0x200 - 80149a4: d0f2 beq.n 801498c <_vfiprintf_r+0x378> - 80149a6: b26c sxtb r4, r5 - 80149a8: f345 15c0 sbfx r5, r5, #7, #1 - 80149ac: e7dd b.n 801496a <_vfiprintf_r+0x356> - 80149ae: f01a 0f20 tst.w sl, #32 - 80149b2: f104 0b04 add.w fp, r4, #4 - 80149b6: d007 beq.n 80149c8 <_vfiprintf_r+0x3b4> - 80149b8: 9a02 ldr r2, [sp, #8] - 80149ba: 6823 ldr r3, [r4, #0] - 80149bc: 9902 ldr r1, [sp, #8] - 80149be: 17d2 asrs r2, r2, #31 - 80149c0: e9c3 1200 strd r1, r2, [r3] - 80149c4: 465c mov r4, fp - 80149c6: e68c b.n 80146e2 <_vfiprintf_r+0xce> - 80149c8: f01a 0f10 tst.w sl, #16 - 80149cc: d003 beq.n 80149d6 <_vfiprintf_r+0x3c2> - 80149ce: 6823 ldr r3, [r4, #0] - 80149d0: 9a02 ldr r2, [sp, #8] - 80149d2: 601a str r2, [r3, #0] - 80149d4: e7f6 b.n 80149c4 <_vfiprintf_r+0x3b0> - 80149d6: f01a 0f40 tst.w sl, #64 ; 0x40 - 80149da: d003 beq.n 80149e4 <_vfiprintf_r+0x3d0> - 80149dc: 6823 ldr r3, [r4, #0] - 80149de: 9a02 ldr r2, [sp, #8] - 80149e0: 801a strh r2, [r3, #0] - 80149e2: e7ef b.n 80149c4 <_vfiprintf_r+0x3b0> - 80149e4: f41a 7f00 tst.w sl, #512 ; 0x200 - 80149e8: d0f1 beq.n 80149ce <_vfiprintf_r+0x3ba> - 80149ea: 6823 ldr r3, [r4, #0] - 80149ec: 9a02 ldr r2, [sp, #8] - 80149ee: 701a strb r2, [r3, #0] - 80149f0: e7e8 b.n 80149c4 <_vfiprintf_r+0x3b0> - 80149f2: f04a 0a10 orr.w sl, sl, #16 - 80149f6: f01a 0320 ands.w r3, sl, #32 - 80149fa: d01f beq.n 8014a3c <_vfiprintf_r+0x428> - 80149fc: 3407 adds r4, #7 - 80149fe: f024 0307 bic.w r3, r4, #7 - 8014a02: 469b mov fp, r3 - 8014a04: 685d ldr r5, [r3, #4] - 8014a06: f85b 4b08 ldr.w r4, [fp], #8 - 8014a0a: f42a 6a80 bic.w sl, sl, #1024 ; 0x400 - 8014a0e: 2300 movs r3, #0 - 8014a10: 2200 movs r2, #0 - 8014a12: f88d 202b strb.w r2, [sp, #43] ; 0x2b - 8014a16: 9a00 ldr r2, [sp, #0] - 8014a18: 3201 adds r2, #1 - 8014a1a: f000 8262 beq.w 8014ee2 <_vfiprintf_r+0x8ce> - 8014a1e: f02a 0280 bic.w r2, sl, #128 ; 0x80 - 8014a22: 9204 str r2, [sp, #16] - 8014a24: ea54 0205 orrs.w r2, r4, r5 - 8014a28: f040 8261 bne.w 8014eee <_vfiprintf_r+0x8da> - 8014a2c: 9a00 ldr r2, [sp, #0] - 8014a2e: 2a00 cmp r2, #0 - 8014a30: f000 8199 beq.w 8014d66 <_vfiprintf_r+0x752> - 8014a34: 2b01 cmp r3, #1 - 8014a36: f040 825d bne.w 8014ef4 <_vfiprintf_r+0x8e0> - 8014a3a: e139 b.n 8014cb0 <_vfiprintf_r+0x69c> - 8014a3c: 46a3 mov fp, r4 - 8014a3e: f01a 0510 ands.w r5, sl, #16 - 8014a42: f85b 4b04 ldr.w r4, [fp], #4 - 8014a46: d001 beq.n 8014a4c <_vfiprintf_r+0x438> - 8014a48: 461d mov r5, r3 - 8014a4a: e7de b.n 8014a0a <_vfiprintf_r+0x3f6> - 8014a4c: f01a 0340 ands.w r3, sl, #64 ; 0x40 - 8014a50: d001 beq.n 8014a56 <_vfiprintf_r+0x442> - 8014a52: b2a4 uxth r4, r4 - 8014a54: e7d9 b.n 8014a0a <_vfiprintf_r+0x3f6> - 8014a56: f41a 7500 ands.w r5, sl, #512 ; 0x200 - 8014a5a: d0d6 beq.n 8014a0a <_vfiprintf_r+0x3f6> - 8014a5c: b2e4 uxtb r4, r4 - 8014a5e: e7f3 b.n 8014a48 <_vfiprintf_r+0x434> - 8014a60: 2330 movs r3, #48 ; 0x30 - 8014a62: 46a3 mov fp, r4 - 8014a64: f88d 302c strb.w r3, [sp, #44] ; 0x2c - 8014a68: 2378 movs r3, #120 ; 0x78 - 8014a6a: f88d 302d strb.w r3, [sp, #45] ; 0x2d - 8014a6e: f85b 4b04 ldr.w r4, [fp], #4 - 8014a72: 4b03 ldr r3, [pc, #12] ; (8014a80 <_vfiprintf_r+0x46c>) - 8014a74: 9305 str r3, [sp, #20] - 8014a76: 2500 movs r5, #0 - 8014a78: f04a 0a02 orr.w sl, sl, #2 - 8014a7c: 2302 movs r3, #2 - 8014a7e: e7c7 b.n 8014a10 <_vfiprintf_r+0x3fc> - 8014a80: 08018bf8 .word 0x08018bf8 - 8014a84: 9b00 ldr r3, [sp, #0] - 8014a86: 46a3 mov fp, r4 - 8014a88: 2500 movs r5, #0 - 8014a8a: 1c5c adds r4, r3, #1 - 8014a8c: f85b 8b04 ldr.w r8, [fp], #4 - 8014a90: f88d 502b strb.w r5, [sp, #43] ; 0x2b - 8014a94: f000 80ce beq.w 8014c34 <_vfiprintf_r+0x620> - 8014a98: 461a mov r2, r3 - 8014a9a: 4629 mov r1, r5 - 8014a9c: 4640 mov r0, r8 - 8014a9e: f7eb fbaf bl 8000200 - 8014aa2: 2800 cmp r0, #0 - 8014aa4: f000 8174 beq.w 8014d90 <_vfiprintf_r+0x77c> - 8014aa8: eba0 0308 sub.w r3, r0, r8 - 8014aac: 9300 str r3, [sp, #0] - 8014aae: 9b00 ldr r3, [sp, #0] - 8014ab0: 42ab cmp r3, r5 - 8014ab2: bfb8 it lt - 8014ab4: 462b movlt r3, r5 - 8014ab6: 9304 str r3, [sp, #16] - 8014ab8: f89d 302b ldrb.w r3, [sp, #43] ; 0x2b - 8014abc: b113 cbz r3, 8014ac4 <_vfiprintf_r+0x4b0> - 8014abe: 9b04 ldr r3, [sp, #16] - 8014ac0: 3301 adds r3, #1 - 8014ac2: 9304 str r3, [sp, #16] - 8014ac4: f01a 0302 ands.w r3, sl, #2 - 8014ac8: 9308 str r3, [sp, #32] - 8014aca: bf1e ittt ne - 8014acc: 9b04 ldrne r3, [sp, #16] - 8014ace: 3302 addne r3, #2 - 8014ad0: 9304 strne r3, [sp, #16] - 8014ad2: f01a 0384 ands.w r3, sl, #132 ; 0x84 - 8014ad6: 9309 str r3, [sp, #36] ; 0x24 - 8014ad8: d11f bne.n 8014b1a <_vfiprintf_r+0x506> - 8014ada: e9dd 3203 ldrd r3, r2, [sp, #12] - 8014ade: 1a9c subs r4, r3, r2 - 8014ae0: 2c00 cmp r4, #0 - 8014ae2: dd1a ble.n 8014b1a <_vfiprintf_r+0x506> - 8014ae4: e9dd 320d ldrd r3, r2, [sp, #52] ; 0x34 - 8014ae8: 48aa ldr r0, [pc, #680] ; (8014d94 <_vfiprintf_r+0x780>) - 8014aea: 6030 str r0, [r6, #0] - 8014aec: 2c10 cmp r4, #16 - 8014aee: f103 0301 add.w r3, r3, #1 - 8014af2: f106 0108 add.w r1, r6, #8 - 8014af6: f300 8153 bgt.w 8014da0 <_vfiprintf_r+0x78c> - 8014afa: 6074 str r4, [r6, #4] - 8014afc: 2b07 cmp r3, #7 - 8014afe: 4414 add r4, r2 - 8014b00: e9cd 340d strd r3, r4, [sp, #52] ; 0x34 - 8014b04: f340 815e ble.w 8014dc4 <_vfiprintf_r+0x7b0> - 8014b08: aa0c add r2, sp, #48 ; 0x30 - 8014b0a: 4639 mov r1, r7 - 8014b0c: 4648 mov r0, r9 - 8014b0e: f7ff fd4e bl 80145ae <__sprint_r> - 8014b12: 2800 cmp r0, #0 - 8014b14: f040 81b7 bne.w 8014e86 <_vfiprintf_r+0x872> - 8014b18: ae0f add r6, sp, #60 ; 0x3c - 8014b1a: f89d 302b ldrb.w r3, [sp, #43] ; 0x2b - 8014b1e: b173 cbz r3, 8014b3e <_vfiprintf_r+0x52a> - 8014b20: f10d 022b add.w r2, sp, #43 ; 0x2b - 8014b24: 9b0d ldr r3, [sp, #52] ; 0x34 - 8014b26: 6032 str r2, [r6, #0] - 8014b28: 2201 movs r2, #1 - 8014b2a: 6072 str r2, [r6, #4] - 8014b2c: 9a0e ldr r2, [sp, #56] ; 0x38 - 8014b2e: 3301 adds r3, #1 - 8014b30: 3201 adds r2, #1 - 8014b32: 2b07 cmp r3, #7 - 8014b34: e9cd 320d strd r3, r2, [sp, #52] ; 0x34 - 8014b38: f300 8146 bgt.w 8014dc8 <_vfiprintf_r+0x7b4> - 8014b3c: 3608 adds r6, #8 - 8014b3e: 9b08 ldr r3, [sp, #32] - 8014b40: b16b cbz r3, 8014b5e <_vfiprintf_r+0x54a> - 8014b42: aa0b add r2, sp, #44 ; 0x2c - 8014b44: 9b0d ldr r3, [sp, #52] ; 0x34 - 8014b46: 6032 str r2, [r6, #0] - 8014b48: 2202 movs r2, #2 - 8014b4a: 6072 str r2, [r6, #4] - 8014b4c: 9a0e ldr r2, [sp, #56] ; 0x38 - 8014b4e: 3301 adds r3, #1 - 8014b50: 3202 adds r2, #2 - 8014b52: 2b07 cmp r3, #7 - 8014b54: e9cd 320d strd r3, r2, [sp, #52] ; 0x34 - 8014b58: f300 813f bgt.w 8014dda <_vfiprintf_r+0x7c6> - 8014b5c: 3608 adds r6, #8 - 8014b5e: 9b09 ldr r3, [sp, #36] ; 0x24 - 8014b60: 2b80 cmp r3, #128 ; 0x80 - 8014b62: d11f bne.n 8014ba4 <_vfiprintf_r+0x590> - 8014b64: e9dd 3203 ldrd r3, r2, [sp, #12] - 8014b68: 1a9c subs r4, r3, r2 - 8014b6a: 2c00 cmp r4, #0 - 8014b6c: dd1a ble.n 8014ba4 <_vfiprintf_r+0x590> - 8014b6e: e9dd 320d ldrd r3, r2, [sp, #52] ; 0x34 - 8014b72: 4889 ldr r0, [pc, #548] ; (8014d98 <_vfiprintf_r+0x784>) - 8014b74: 6030 str r0, [r6, #0] - 8014b76: 2c10 cmp r4, #16 - 8014b78: f103 0301 add.w r3, r3, #1 - 8014b7c: f106 0108 add.w r1, r6, #8 - 8014b80: f300 8134 bgt.w 8014dec <_vfiprintf_r+0x7d8> - 8014b84: 6074 str r4, [r6, #4] - 8014b86: 2b07 cmp r3, #7 - 8014b88: 4414 add r4, r2 - 8014b8a: e9cd 340d strd r3, r4, [sp, #52] ; 0x34 - 8014b8e: f340 813f ble.w 8014e10 <_vfiprintf_r+0x7fc> - 8014b92: aa0c add r2, sp, #48 ; 0x30 - 8014b94: 4639 mov r1, r7 - 8014b96: 4648 mov r0, r9 - 8014b98: f7ff fd09 bl 80145ae <__sprint_r> - 8014b9c: 2800 cmp r0, #0 - 8014b9e: f040 8172 bne.w 8014e86 <_vfiprintf_r+0x872> - 8014ba2: ae0f add r6, sp, #60 ; 0x3c - 8014ba4: 9b00 ldr r3, [sp, #0] - 8014ba6: 1aec subs r4, r5, r3 - 8014ba8: 2c00 cmp r4, #0 - 8014baa: dd1a ble.n 8014be2 <_vfiprintf_r+0x5ce> - 8014bac: 4d7a ldr r5, [pc, #488] ; (8014d98 <_vfiprintf_r+0x784>) - 8014bae: 6035 str r5, [r6, #0] - 8014bb0: e9dd 310d ldrd r3, r1, [sp, #52] ; 0x34 - 8014bb4: 2c10 cmp r4, #16 - 8014bb6: f103 0301 add.w r3, r3, #1 - 8014bba: f106 0208 add.w r2, r6, #8 - 8014bbe: f300 8129 bgt.w 8014e14 <_vfiprintf_r+0x800> - 8014bc2: 6074 str r4, [r6, #4] - 8014bc4: 2b07 cmp r3, #7 - 8014bc6: 440c add r4, r1 - 8014bc8: e9cd 340d strd r3, r4, [sp, #52] ; 0x34 - 8014bcc: f340 8133 ble.w 8014e36 <_vfiprintf_r+0x822> - 8014bd0: aa0c add r2, sp, #48 ; 0x30 - 8014bd2: 4639 mov r1, r7 - 8014bd4: 4648 mov r0, r9 - 8014bd6: f7ff fcea bl 80145ae <__sprint_r> - 8014bda: 2800 cmp r0, #0 - 8014bdc: f040 8153 bne.w 8014e86 <_vfiprintf_r+0x872> - 8014be0: ae0f add r6, sp, #60 ; 0x3c - 8014be2: 9b00 ldr r3, [sp, #0] - 8014be4: 980e ldr r0, [sp, #56] ; 0x38 - 8014be6: 6073 str r3, [r6, #4] - 8014be8: 4418 add r0, r3 - 8014bea: 9b0d ldr r3, [sp, #52] ; 0x34 - 8014bec: f8c6 8000 str.w r8, [r6] - 8014bf0: 3301 adds r3, #1 - 8014bf2: 2b07 cmp r3, #7 - 8014bf4: 900e str r0, [sp, #56] ; 0x38 - 8014bf6: 930d str r3, [sp, #52] ; 0x34 - 8014bf8: f300 811f bgt.w 8014e3a <_vfiprintf_r+0x826> - 8014bfc: f106 0308 add.w r3, r6, #8 - 8014c00: f01a 0f04 tst.w sl, #4 - 8014c04: f040 8121 bne.w 8014e4a <_vfiprintf_r+0x836> - 8014c08: e9dd 3202 ldrd r3, r2, [sp, #8] - 8014c0c: 9904 ldr r1, [sp, #16] - 8014c0e: 428a cmp r2, r1 - 8014c10: bfac ite ge - 8014c12: 189b addge r3, r3, r2 - 8014c14: 185b addlt r3, r3, r1 - 8014c16: 9302 str r3, [sp, #8] - 8014c18: 9b0e ldr r3, [sp, #56] ; 0x38 - 8014c1a: b13b cbz r3, 8014c2c <_vfiprintf_r+0x618> - 8014c1c: aa0c add r2, sp, #48 ; 0x30 - 8014c1e: 4639 mov r1, r7 - 8014c20: 4648 mov r0, r9 - 8014c22: f7ff fcc4 bl 80145ae <__sprint_r> - 8014c26: 2800 cmp r0, #0 - 8014c28: f040 812d bne.w 8014e86 <_vfiprintf_r+0x872> - 8014c2c: 2300 movs r3, #0 - 8014c2e: 930d str r3, [sp, #52] ; 0x34 - 8014c30: ae0f add r6, sp, #60 ; 0x3c - 8014c32: e6c7 b.n 80149c4 <_vfiprintf_r+0x3b0> - 8014c34: 4640 mov r0, r8 - 8014c36: f7eb fadb bl 80001f0 - 8014c3a: 9000 str r0, [sp, #0] - 8014c3c: e737 b.n 8014aae <_vfiprintf_r+0x49a> - 8014c3e: f04a 0a10 orr.w sl, sl, #16 - 8014c42: f01a 0320 ands.w r3, sl, #32 - 8014c46: d008 beq.n 8014c5a <_vfiprintf_r+0x646> - 8014c48: 3407 adds r4, #7 - 8014c4a: f024 0307 bic.w r3, r4, #7 - 8014c4e: 469b mov fp, r3 - 8014c50: 685d ldr r5, [r3, #4] - 8014c52: f85b 4b08 ldr.w r4, [fp], #8 - 8014c56: 2301 movs r3, #1 - 8014c58: e6da b.n 8014a10 <_vfiprintf_r+0x3fc> - 8014c5a: 46a3 mov fp, r4 - 8014c5c: f01a 0510 ands.w r5, sl, #16 - 8014c60: f85b 4b04 ldr.w r4, [fp], #4 - 8014c64: d001 beq.n 8014c6a <_vfiprintf_r+0x656> - 8014c66: 461d mov r5, r3 - 8014c68: e7f5 b.n 8014c56 <_vfiprintf_r+0x642> - 8014c6a: f01a 0340 ands.w r3, sl, #64 ; 0x40 - 8014c6e: d001 beq.n 8014c74 <_vfiprintf_r+0x660> - 8014c70: b2a4 uxth r4, r4 - 8014c72: e7f0 b.n 8014c56 <_vfiprintf_r+0x642> - 8014c74: f41a 7500 ands.w r5, sl, #512 ; 0x200 - 8014c78: d0ed beq.n 8014c56 <_vfiprintf_r+0x642> - 8014c7a: b2e4 uxtb r4, r4 - 8014c7c: e7f3 b.n 8014c66 <_vfiprintf_r+0x652> - 8014c7e: 4a47 ldr r2, [pc, #284] ; (8014d9c <_vfiprintf_r+0x788>) - 8014c80: e5c5 b.n 801480e <_vfiprintf_r+0x1fa> - 8014c82: 46a3 mov fp, r4 - 8014c84: f01a 0510 ands.w r5, sl, #16 - 8014c88: f85b 4b04 ldr.w r4, [fp], #4 - 8014c8c: d001 beq.n 8014c92 <_vfiprintf_r+0x67e> - 8014c8e: 4615 mov r5, r2 - 8014c90: e5c9 b.n 8014826 <_vfiprintf_r+0x212> - 8014c92: f01a 0240 ands.w r2, sl, #64 ; 0x40 - 8014c96: d001 beq.n 8014c9c <_vfiprintf_r+0x688> - 8014c98: b2a4 uxth r4, r4 - 8014c9a: e5c4 b.n 8014826 <_vfiprintf_r+0x212> - 8014c9c: f41a 7500 ands.w r5, sl, #512 ; 0x200 - 8014ca0: f43f adc1 beq.w 8014826 <_vfiprintf_r+0x212> - 8014ca4: b2e4 uxtb r4, r4 - 8014ca6: e7f2 b.n 8014c8e <_vfiprintf_r+0x67a> - 8014ca8: 2c0a cmp r4, #10 - 8014caa: f175 0300 sbcs.w r3, r5, #0 - 8014cae: d205 bcs.n 8014cbc <_vfiprintf_r+0x6a8> - 8014cb0: 3430 adds r4, #48 ; 0x30 - 8014cb2: f88d 40df strb.w r4, [sp, #223] ; 0xdf - 8014cb6: f10d 08df add.w r8, sp, #223 ; 0xdf - 8014cba: e137 b.n 8014f2c <_vfiprintf_r+0x918> - 8014cbc: ab38 add r3, sp, #224 ; 0xe0 - 8014cbe: 9308 str r3, [sp, #32] - 8014cc0: 9b04 ldr r3, [sp, #16] - 8014cc2: f403 6380 and.w r3, r3, #1024 ; 0x400 - 8014cc6: f04f 0a00 mov.w sl, #0 - 8014cca: 9309 str r3, [sp, #36] ; 0x24 - 8014ccc: 9b08 ldr r3, [sp, #32] - 8014cce: 220a movs r2, #10 - 8014cd0: f103 38ff add.w r8, r3, #4294967295 - 8014cd4: 4620 mov r0, r4 - 8014cd6: 2300 movs r3, #0 - 8014cd8: 4629 mov r1, r5 - 8014cda: f7eb ff75 bl 8000bc8 <__aeabi_uldivmod> - 8014cde: 9b08 ldr r3, [sp, #32] - 8014ce0: 3230 adds r2, #48 ; 0x30 - 8014ce2: f803 2c01 strb.w r2, [r3, #-1] - 8014ce6: 9b09 ldr r3, [sp, #36] ; 0x24 - 8014ce8: f10a 0a01 add.w sl, sl, #1 - 8014cec: b1db cbz r3, 8014d26 <_vfiprintf_r+0x712> - 8014cee: 9b06 ldr r3, [sp, #24] - 8014cf0: 781b ldrb r3, [r3, #0] - 8014cf2: 4553 cmp r3, sl - 8014cf4: d117 bne.n 8014d26 <_vfiprintf_r+0x712> - 8014cf6: f1ba 0fff cmp.w sl, #255 ; 0xff - 8014cfa: d014 beq.n 8014d26 <_vfiprintf_r+0x712> - 8014cfc: 2c0a cmp r4, #10 - 8014cfe: f175 0300 sbcs.w r3, r5, #0 - 8014d02: d310 bcc.n 8014d26 <_vfiprintf_r+0x712> - 8014d04: 9b07 ldr r3, [sp, #28] - 8014d06: eba8 0803 sub.w r8, r8, r3 - 8014d0a: 461a mov r2, r3 - 8014d0c: ee18 1a10 vmov r1, s16 - 8014d10: 4640 mov r0, r8 - 8014d12: f7ff fc2c bl 801456e - 8014d16: 9b06 ldr r3, [sp, #24] - 8014d18: 785b ldrb r3, [r3, #1] - 8014d1a: b1a3 cbz r3, 8014d46 <_vfiprintf_r+0x732> - 8014d1c: 9b06 ldr r3, [sp, #24] - 8014d1e: 3301 adds r3, #1 - 8014d20: 9306 str r3, [sp, #24] - 8014d22: f04f 0a00 mov.w sl, #0 - 8014d26: 2300 movs r3, #0 - 8014d28: 220a movs r2, #10 - 8014d2a: 4620 mov r0, r4 - 8014d2c: 4629 mov r1, r5 - 8014d2e: f7eb ff4b bl 8000bc8 <__aeabi_uldivmod> - 8014d32: 2c0a cmp r4, #10 - 8014d34: f175 0300 sbcs.w r3, r5, #0 - 8014d38: f0c0 80f8 bcc.w 8014f2c <_vfiprintf_r+0x918> - 8014d3c: 4604 mov r4, r0 - 8014d3e: 460d mov r5, r1 - 8014d40: f8cd 8020 str.w r8, [sp, #32] - 8014d44: e7c2 b.n 8014ccc <_vfiprintf_r+0x6b8> - 8014d46: 469a mov sl, r3 - 8014d48: e7ed b.n 8014d26 <_vfiprintf_r+0x712> - 8014d4a: f004 030f and.w r3, r4, #15 - 8014d4e: 9a05 ldr r2, [sp, #20] - 8014d50: 0924 lsrs r4, r4, #4 - 8014d52: 5cd3 ldrb r3, [r2, r3] - 8014d54: f808 3d01 strb.w r3, [r8, #-1]! - 8014d58: ea44 7405 orr.w r4, r4, r5, lsl #28 - 8014d5c: 092d lsrs r5, r5, #4 - 8014d5e: ea54 0305 orrs.w r3, r4, r5 - 8014d62: d1f2 bne.n 8014d4a <_vfiprintf_r+0x736> - 8014d64: e0e2 b.n 8014f2c <_vfiprintf_r+0x918> - 8014d66: b933 cbnz r3, 8014d76 <_vfiprintf_r+0x762> - 8014d68: f01a 0f01 tst.w sl, #1 - 8014d6c: d003 beq.n 8014d76 <_vfiprintf_r+0x762> - 8014d6e: 2330 movs r3, #48 ; 0x30 - 8014d70: f88d 30df strb.w r3, [sp, #223] ; 0xdf - 8014d74: e79f b.n 8014cb6 <_vfiprintf_r+0x6a2> - 8014d76: f10d 08e0 add.w r8, sp, #224 ; 0xe0 - 8014d7a: e0d7 b.n 8014f2c <_vfiprintf_r+0x918> - 8014d7c: 2b00 cmp r3, #0 - 8014d7e: f000 80a3 beq.w 8014ec8 <_vfiprintf_r+0x8b4> - 8014d82: 2100 movs r1, #0 - 8014d84: f88d 307c strb.w r3, [sp, #124] ; 0x7c - 8014d88: f88d 102b strb.w r1, [sp, #43] ; 0x2b - 8014d8c: 46a3 mov fp, r4 - 8014d8e: e5da b.n 8014946 <_vfiprintf_r+0x332> - 8014d90: 4605 mov r5, r0 - 8014d92: e68c b.n 8014aae <_vfiprintf_r+0x49a> - 8014d94: 08018e14 .word 0x08018e14 - 8014d98: 08018e24 .word 0x08018e24 - 8014d9c: 08018c09 .word 0x08018c09 - 8014da0: 2010 movs r0, #16 - 8014da2: 4402 add r2, r0 - 8014da4: 2b07 cmp r3, #7 - 8014da6: e9cd 320d strd r3, r2, [sp, #52] ; 0x34 - 8014daa: 6070 str r0, [r6, #4] - 8014dac: dd07 ble.n 8014dbe <_vfiprintf_r+0x7aa> - 8014dae: aa0c add r2, sp, #48 ; 0x30 - 8014db0: 4639 mov r1, r7 - 8014db2: 4648 mov r0, r9 - 8014db4: f7ff fbfb bl 80145ae <__sprint_r> - 8014db8: 2800 cmp r0, #0 - 8014dba: d164 bne.n 8014e86 <_vfiprintf_r+0x872> - 8014dbc: a90f add r1, sp, #60 ; 0x3c - 8014dbe: 3c10 subs r4, #16 - 8014dc0: 460e mov r6, r1 - 8014dc2: e68f b.n 8014ae4 <_vfiprintf_r+0x4d0> - 8014dc4: 460e mov r6, r1 - 8014dc6: e6a8 b.n 8014b1a <_vfiprintf_r+0x506> - 8014dc8: aa0c add r2, sp, #48 ; 0x30 - 8014dca: 4639 mov r1, r7 - 8014dcc: 4648 mov r0, r9 - 8014dce: f7ff fbee bl 80145ae <__sprint_r> - 8014dd2: 2800 cmp r0, #0 - 8014dd4: d157 bne.n 8014e86 <_vfiprintf_r+0x872> - 8014dd6: ae0f add r6, sp, #60 ; 0x3c - 8014dd8: e6b1 b.n 8014b3e <_vfiprintf_r+0x52a> - 8014dda: aa0c add r2, sp, #48 ; 0x30 - 8014ddc: 4639 mov r1, r7 - 8014dde: 4648 mov r0, r9 - 8014de0: f7ff fbe5 bl 80145ae <__sprint_r> - 8014de4: 2800 cmp r0, #0 - 8014de6: d14e bne.n 8014e86 <_vfiprintf_r+0x872> - 8014de8: ae0f add r6, sp, #60 ; 0x3c - 8014dea: e6b8 b.n 8014b5e <_vfiprintf_r+0x54a> - 8014dec: 2010 movs r0, #16 - 8014dee: 4402 add r2, r0 - 8014df0: 2b07 cmp r3, #7 - 8014df2: e9cd 320d strd r3, r2, [sp, #52] ; 0x34 - 8014df6: 6070 str r0, [r6, #4] - 8014df8: dd07 ble.n 8014e0a <_vfiprintf_r+0x7f6> - 8014dfa: aa0c add r2, sp, #48 ; 0x30 - 8014dfc: 4639 mov r1, r7 - 8014dfe: 4648 mov r0, r9 - 8014e00: f7ff fbd5 bl 80145ae <__sprint_r> - 8014e04: 2800 cmp r0, #0 - 8014e06: d13e bne.n 8014e86 <_vfiprintf_r+0x872> - 8014e08: a90f add r1, sp, #60 ; 0x3c - 8014e0a: 3c10 subs r4, #16 - 8014e0c: 460e mov r6, r1 - 8014e0e: e6ae b.n 8014b6e <_vfiprintf_r+0x55a> - 8014e10: 460e mov r6, r1 - 8014e12: e6c7 b.n 8014ba4 <_vfiprintf_r+0x590> - 8014e14: 2010 movs r0, #16 - 8014e16: 4401 add r1, r0 - 8014e18: 2b07 cmp r3, #7 - 8014e1a: e9cd 310d strd r3, r1, [sp, #52] ; 0x34 - 8014e1e: 6070 str r0, [r6, #4] - 8014e20: dd06 ble.n 8014e30 <_vfiprintf_r+0x81c> - 8014e22: aa0c add r2, sp, #48 ; 0x30 - 8014e24: 4639 mov r1, r7 - 8014e26: 4648 mov r0, r9 - 8014e28: f7ff fbc1 bl 80145ae <__sprint_r> - 8014e2c: bb58 cbnz r0, 8014e86 <_vfiprintf_r+0x872> - 8014e2e: aa0f add r2, sp, #60 ; 0x3c - 8014e30: 3c10 subs r4, #16 - 8014e32: 4616 mov r6, r2 - 8014e34: e6bb b.n 8014bae <_vfiprintf_r+0x59a> - 8014e36: 4616 mov r6, r2 - 8014e38: e6d3 b.n 8014be2 <_vfiprintf_r+0x5ce> - 8014e3a: aa0c add r2, sp, #48 ; 0x30 - 8014e3c: 4639 mov r1, r7 - 8014e3e: 4648 mov r0, r9 - 8014e40: f7ff fbb5 bl 80145ae <__sprint_r> - 8014e44: b9f8 cbnz r0, 8014e86 <_vfiprintf_r+0x872> - 8014e46: ab0f add r3, sp, #60 ; 0x3c - 8014e48: e6da b.n 8014c00 <_vfiprintf_r+0x5ec> - 8014e4a: e9dd 2103 ldrd r2, r1, [sp, #12] - 8014e4e: 1a54 subs r4, r2, r1 - 8014e50: 2c00 cmp r4, #0 - 8014e52: f77f aed9 ble.w 8014c08 <_vfiprintf_r+0x5f4> - 8014e56: 4d39 ldr r5, [pc, #228] ; (8014f3c <_vfiprintf_r+0x928>) - 8014e58: 2610 movs r6, #16 - 8014e5a: e9dd 210d ldrd r2, r1, [sp, #52] ; 0x34 - 8014e5e: 2c10 cmp r4, #16 - 8014e60: f102 0201 add.w r2, r2, #1 - 8014e64: 601d str r5, [r3, #0] - 8014e66: dc1d bgt.n 8014ea4 <_vfiprintf_r+0x890> - 8014e68: 605c str r4, [r3, #4] - 8014e6a: 2a07 cmp r2, #7 - 8014e6c: 440c add r4, r1 - 8014e6e: e9cd 240d strd r2, r4, [sp, #52] ; 0x34 - 8014e72: f77f aec9 ble.w 8014c08 <_vfiprintf_r+0x5f4> - 8014e76: aa0c add r2, sp, #48 ; 0x30 - 8014e78: 4639 mov r1, r7 - 8014e7a: 4648 mov r0, r9 - 8014e7c: f7ff fb97 bl 80145ae <__sprint_r> - 8014e80: 2800 cmp r0, #0 - 8014e82: f43f aec1 beq.w 8014c08 <_vfiprintf_r+0x5f4> - 8014e86: 6e7b ldr r3, [r7, #100] ; 0x64 - 8014e88: 07d9 lsls r1, r3, #31 - 8014e8a: d405 bmi.n 8014e98 <_vfiprintf_r+0x884> - 8014e8c: 89bb ldrh r3, [r7, #12] - 8014e8e: 059a lsls r2, r3, #22 - 8014e90: d402 bmi.n 8014e98 <_vfiprintf_r+0x884> - 8014e92: 6db8 ldr r0, [r7, #88] ; 0x58 - 8014e94: f7fe fcf5 bl 8013882 <__retarget_lock_release_recursive> - 8014e98: 89bb ldrh r3, [r7, #12] - 8014e9a: 065b lsls r3, r3, #25 - 8014e9c: f57f abed bpl.w 801467a <_vfiprintf_r+0x66> - 8014ea0: f7ff bbe8 b.w 8014674 <_vfiprintf_r+0x60> - 8014ea4: 3110 adds r1, #16 - 8014ea6: 2a07 cmp r2, #7 - 8014ea8: e9cd 210d strd r2, r1, [sp, #52] ; 0x34 - 8014eac: 605e str r6, [r3, #4] - 8014eae: dc02 bgt.n 8014eb6 <_vfiprintf_r+0x8a2> - 8014eb0: 3308 adds r3, #8 - 8014eb2: 3c10 subs r4, #16 - 8014eb4: e7d1 b.n 8014e5a <_vfiprintf_r+0x846> - 8014eb6: aa0c add r2, sp, #48 ; 0x30 - 8014eb8: 4639 mov r1, r7 - 8014eba: 4648 mov r0, r9 - 8014ebc: f7ff fb77 bl 80145ae <__sprint_r> - 8014ec0: 2800 cmp r0, #0 - 8014ec2: d1e0 bne.n 8014e86 <_vfiprintf_r+0x872> - 8014ec4: ab0f add r3, sp, #60 ; 0x3c - 8014ec6: e7f4 b.n 8014eb2 <_vfiprintf_r+0x89e> - 8014ec8: 9b0e ldr r3, [sp, #56] ; 0x38 - 8014eca: b913 cbnz r3, 8014ed2 <_vfiprintf_r+0x8be> - 8014ecc: 2300 movs r3, #0 - 8014ece: 930d str r3, [sp, #52] ; 0x34 - 8014ed0: e7d9 b.n 8014e86 <_vfiprintf_r+0x872> - 8014ed2: aa0c add r2, sp, #48 ; 0x30 - 8014ed4: 4639 mov r1, r7 - 8014ed6: 4648 mov r0, r9 - 8014ed8: f7ff fb69 bl 80145ae <__sprint_r> - 8014edc: 2800 cmp r0, #0 - 8014ede: d0f5 beq.n 8014ecc <_vfiprintf_r+0x8b8> - 8014ee0: e7d1 b.n 8014e86 <_vfiprintf_r+0x872> - 8014ee2: ea54 0205 orrs.w r2, r4, r5 - 8014ee6: f8cd a010 str.w sl, [sp, #16] - 8014eea: f43f ada3 beq.w 8014a34 <_vfiprintf_r+0x420> - 8014eee: 2b01 cmp r3, #1 - 8014ef0: f43f aeda beq.w 8014ca8 <_vfiprintf_r+0x694> - 8014ef4: 2b02 cmp r3, #2 - 8014ef6: f10d 08e0 add.w r8, sp, #224 ; 0xe0 - 8014efa: f43f af26 beq.w 8014d4a <_vfiprintf_r+0x736> - 8014efe: f004 0307 and.w r3, r4, #7 - 8014f02: 08e4 lsrs r4, r4, #3 - 8014f04: ea44 7445 orr.w r4, r4, r5, lsl #29 - 8014f08: 08ed lsrs r5, r5, #3 - 8014f0a: 3330 adds r3, #48 ; 0x30 - 8014f0c: ea54 0105 orrs.w r1, r4, r5 - 8014f10: 4642 mov r2, r8 - 8014f12: f808 3d01 strb.w r3, [r8, #-1]! - 8014f16: d1f2 bne.n 8014efe <_vfiprintf_r+0x8ea> - 8014f18: 9904 ldr r1, [sp, #16] - 8014f1a: 07c8 lsls r0, r1, #31 - 8014f1c: d506 bpl.n 8014f2c <_vfiprintf_r+0x918> - 8014f1e: 2b30 cmp r3, #48 ; 0x30 - 8014f20: d004 beq.n 8014f2c <_vfiprintf_r+0x918> - 8014f22: 2330 movs r3, #48 ; 0x30 - 8014f24: f808 3c01 strb.w r3, [r8, #-1] - 8014f28: f1a2 0802 sub.w r8, r2, #2 - 8014f2c: ab38 add r3, sp, #224 ; 0xe0 - 8014f2e: eba3 0308 sub.w r3, r3, r8 - 8014f32: 9d00 ldr r5, [sp, #0] - 8014f34: f8dd a010 ldr.w sl, [sp, #16] - 8014f38: 9300 str r3, [sp, #0] - 8014f3a: e5b8 b.n 8014aae <_vfiprintf_r+0x49a> - 8014f3c: 08018e14 .word 0x08018e14 - -08014f40 <__sbprintf>: - 8014f40: b570 push {r4, r5, r6, lr} - 8014f42: 460c mov r4, r1 - 8014f44: 8989 ldrh r1, [r1, #12] - 8014f46: f5ad 6d8e sub.w sp, sp, #1136 ; 0x470 - 8014f4a: f021 0102 bic.w r1, r1, #2 - 8014f4e: f8ad 1014 strh.w r1, [sp, #20] - 8014f52: 6e61 ldr r1, [r4, #100] ; 0x64 - 8014f54: 911b str r1, [sp, #108] ; 0x6c - 8014f56: 89e1 ldrh r1, [r4, #14] - 8014f58: f8ad 1016 strh.w r1, [sp, #22] - 8014f5c: 69e1 ldr r1, [r4, #28] - 8014f5e: 9109 str r1, [sp, #36] ; 0x24 - 8014f60: 6a61 ldr r1, [r4, #36] ; 0x24 - 8014f62: 910b str r1, [sp, #44] ; 0x2c - 8014f64: a91c add r1, sp, #112 ; 0x70 - 8014f66: 9102 str r1, [sp, #8] - 8014f68: 9106 str r1, [sp, #24] - 8014f6a: f44f 6180 mov.w r1, #1024 ; 0x400 - 8014f6e: 4606 mov r6, r0 - 8014f70: 9104 str r1, [sp, #16] - 8014f72: 9107 str r1, [sp, #28] - 8014f74: a818 add r0, sp, #96 ; 0x60 - 8014f76: 2100 movs r1, #0 - 8014f78: e9cd 3200 strd r3, r2, [sp] - 8014f7c: 9108 str r1, [sp, #32] - 8014f7e: f7fe fc7d bl 801387c <__retarget_lock_init_recursive> - 8014f82: e9dd 3200 ldrd r3, r2, [sp] - 8014f86: a902 add r1, sp, #8 - 8014f88: 4630 mov r0, r6 - 8014f8a: f7ff fb43 bl 8014614 <_vfiprintf_r> - 8014f8e: 1e05 subs r5, r0, #0 - 8014f90: db07 blt.n 8014fa2 <__sbprintf+0x62> - 8014f92: a902 add r1, sp, #8 - 8014f94: 4630 mov r0, r6 - 8014f96: f7fe fa91 bl 80134bc <_fflush_r> - 8014f9a: 2800 cmp r0, #0 - 8014f9c: bf18 it ne - 8014f9e: f04f 35ff movne.w r5, #4294967295 - 8014fa2: f8bd 3014 ldrh.w r3, [sp, #20] - 8014fa6: 9818 ldr r0, [sp, #96] ; 0x60 - 8014fa8: 065b lsls r3, r3, #25 - 8014faa: bf42 ittt mi - 8014fac: 89a3 ldrhmi r3, [r4, #12] - 8014fae: f043 0340 orrmi.w r3, r3, #64 ; 0x40 - 8014fb2: 81a3 strhmi r3, [r4, #12] - 8014fb4: f7fe fc63 bl 801387e <__retarget_lock_close_recursive> - 8014fb8: 4628 mov r0, r5 - 8014fba: f50d 6d8e add.w sp, sp, #1136 ; 0x470 - 8014fbe: bd70 pop {r4, r5, r6, pc} - -08014fc0 <_write_r>: - 8014fc0: b538 push {r3, r4, r5, lr} - 8014fc2: 4d07 ldr r5, [pc, #28] ; (8014fe0 <_write_r+0x20>) - 8014fc4: 4604 mov r4, r0 - 8014fc6: 4608 mov r0, r1 - 8014fc8: 4611 mov r1, r2 - 8014fca: 2200 movs r2, #0 - 8014fcc: 602a str r2, [r5, #0] - 8014fce: 461a mov r2, r3 - 8014fd0: f000 fdd0 bl 8015b74 <_write> - 8014fd4: 1c43 adds r3, r0, #1 - 8014fd6: d102 bne.n 8014fde <_write_r+0x1e> - 8014fd8: 682b ldr r3, [r5, #0] - 8014fda: b103 cbz r3, 8014fde <_write_r+0x1e> - 8014fdc: 6023 str r3, [r4, #0] - 8014fde: bd38 pop {r3, r4, r5, pc} - 8014fe0: 20009b9c .word 0x20009b9c - -08014fe4 <__register_exitproc>: - 8014fe4: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 8014fe8: f8df a078 ldr.w sl, [pc, #120] ; 8015064 <__register_exitproc+0x80> - 8014fec: 4606 mov r6, r0 - 8014fee: f8da 0000 ldr.w r0, [sl] - 8014ff2: 4698 mov r8, r3 - 8014ff4: 460f mov r7, r1 - 8014ff6: 4691 mov r9, r2 - 8014ff8: f7fe fc42 bl 8013880 <__retarget_lock_acquire_recursive> - 8014ffc: 4b18 ldr r3, [pc, #96] ; (8015060 <__register_exitproc+0x7c>) - 8014ffe: 681b ldr r3, [r3, #0] - 8015000: f8d3 4148 ldr.w r4, [r3, #328] ; 0x148 - 8015004: b91c cbnz r4, 801500e <__register_exitproc+0x2a> - 8015006: f503 74a6 add.w r4, r3, #332 ; 0x14c - 801500a: f8c3 4148 str.w r4, [r3, #328] ; 0x148 - 801500e: 6865 ldr r5, [r4, #4] - 8015010: f8da 0000 ldr.w r0, [sl] - 8015014: 2d1f cmp r5, #31 - 8015016: dd05 ble.n 8015024 <__register_exitproc+0x40> - 8015018: f7fe fc33 bl 8013882 <__retarget_lock_release_recursive> - 801501c: f04f 30ff mov.w r0, #4294967295 - 8015020: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 8015024: b19e cbz r6, 801504e <__register_exitproc+0x6a> - 8015026: eb04 0185 add.w r1, r4, r5, lsl #2 - 801502a: 2201 movs r2, #1 - 801502c: f8c1 9088 str.w r9, [r1, #136] ; 0x88 - 8015030: f8d4 3188 ldr.w r3, [r4, #392] ; 0x188 - 8015034: 40aa lsls r2, r5 - 8015036: 4313 orrs r3, r2 - 8015038: f8c4 3188 str.w r3, [r4, #392] ; 0x188 - 801503c: 2e02 cmp r6, #2 - 801503e: f8c1 8108 str.w r8, [r1, #264] ; 0x108 - 8015042: bf02 ittt eq - 8015044: f8d4 318c ldreq.w r3, [r4, #396] ; 0x18c - 8015048: 4313 orreq r3, r2 - 801504a: f8c4 318c streq.w r3, [r4, #396] ; 0x18c - 801504e: 1c6b adds r3, r5, #1 - 8015050: 3502 adds r5, #2 - 8015052: 6063 str r3, [r4, #4] - 8015054: f844 7025 str.w r7, [r4, r5, lsl #2] - 8015058: f7fe fc13 bl 8013882 <__retarget_lock_release_recursive> - 801505c: 2000 movs r0, #0 - 801505e: e7df b.n 8015020 <__register_exitproc+0x3c> - 8015060: 08018be4 .word 0x08018be4 - 8015064: 20000460 .word 0x20000460 - -08015068 <__assert_func>: - 8015068: b51f push {r0, r1, r2, r3, r4, lr} - 801506a: 4614 mov r4, r2 - 801506c: 461a mov r2, r3 - 801506e: 4b09 ldr r3, [pc, #36] ; (8015094 <__assert_func+0x2c>) - 8015070: 681b ldr r3, [r3, #0] - 8015072: 4605 mov r5, r0 - 8015074: 68d8 ldr r0, [r3, #12] - 8015076: b14c cbz r4, 801508c <__assert_func+0x24> - 8015078: 4b07 ldr r3, [pc, #28] ; (8015098 <__assert_func+0x30>) - 801507a: 9100 str r1, [sp, #0] - 801507c: e9cd 3401 strd r3, r4, [sp, #4] - 8015080: 4906 ldr r1, [pc, #24] ; (801509c <__assert_func+0x34>) - 8015082: 462b mov r3, r5 - 8015084: f000 f8ac bl 80151e0 - 8015088: f000 fce1 bl 8015a4e - 801508c: 4b04 ldr r3, [pc, #16] ; (80150a0 <__assert_func+0x38>) - 801508e: 461c mov r4, r3 - 8015090: e7f3 b.n 801507a <__assert_func+0x12> - 8015092: bf00 nop - 8015094: 20000030 .word 0x20000030 - 8015098: 08018e34 .word 0x08018e34 - 801509c: 08018e41 .word 0x08018e41 - 80150a0: 08018e6f .word 0x08018e6f - -080150a4 <_calloc_r>: - 80150a4: b538 push {r3, r4, r5, lr} - 80150a6: fba1 1502 umull r1, r5, r1, r2 - 80150aa: b92d cbnz r5, 80150b8 <_calloc_r+0x14> - 80150ac: f7fe fc56 bl 801395c <_malloc_r> - 80150b0: 4604 mov r4, r0 - 80150b2: b938 cbnz r0, 80150c4 <_calloc_r+0x20> - 80150b4: 4620 mov r0, r4 - 80150b6: bd38 pop {r3, r4, r5, pc} - 80150b8: f7fe f96c bl 8013394 <__errno> - 80150bc: 230c movs r3, #12 - 80150be: 6003 str r3, [r0, #0] - 80150c0: 2400 movs r4, #0 - 80150c2: e7f7 b.n 80150b4 <_calloc_r+0x10> - 80150c4: f850 2c04 ldr.w r2, [r0, #-4] - 80150c8: f022 0203 bic.w r2, r2, #3 - 80150cc: 3a04 subs r2, #4 - 80150ce: 2a24 cmp r2, #36 ; 0x24 - 80150d0: d819 bhi.n 8015106 <_calloc_r+0x62> - 80150d2: 2a13 cmp r2, #19 - 80150d4: d915 bls.n 8015102 <_calloc_r+0x5e> - 80150d6: 2a1b cmp r2, #27 - 80150d8: e9c0 5500 strd r5, r5, [r0] - 80150dc: d806 bhi.n 80150ec <_calloc_r+0x48> - 80150de: f100 0308 add.w r3, r0, #8 - 80150e2: 2200 movs r2, #0 - 80150e4: e9c3 2200 strd r2, r2, [r3] - 80150e8: 609a str r2, [r3, #8] - 80150ea: e7e3 b.n 80150b4 <_calloc_r+0x10> - 80150ec: 2a24 cmp r2, #36 ; 0x24 - 80150ee: e9c0 5502 strd r5, r5, [r0, #8] - 80150f2: bf11 iteee ne - 80150f4: f100 0310 addne.w r3, r0, #16 - 80150f8: 6105 streq r5, [r0, #16] - 80150fa: f100 0318 addeq.w r3, r0, #24 - 80150fe: 6145 streq r5, [r0, #20] - 8015100: e7ef b.n 80150e2 <_calloc_r+0x3e> - 8015102: 4603 mov r3, r0 - 8015104: e7ed b.n 80150e2 <_calloc_r+0x3e> - 8015106: 4629 mov r1, r5 - 8015108: f7fb ffc6 bl 8011098 - 801510c: e7d2 b.n 80150b4 <_calloc_r+0x10> - ... - -08015110 <_close_r>: - 8015110: b538 push {r3, r4, r5, lr} - 8015112: 4d06 ldr r5, [pc, #24] ; (801512c <_close_r+0x1c>) - 8015114: 2300 movs r3, #0 - 8015116: 4604 mov r4, r0 - 8015118: 4608 mov r0, r1 - 801511a: 602b str r3, [r5, #0] - 801511c: f000 fce4 bl 8015ae8 <_close> - 8015120: 1c43 adds r3, r0, #1 - 8015122: d102 bne.n 801512a <_close_r+0x1a> - 8015124: 682b ldr r3, [r5, #0] - 8015126: b103 cbz r3, 801512a <_close_r+0x1a> - 8015128: 6023 str r3, [r4, #0] - 801512a: bd38 pop {r3, r4, r5, pc} - 801512c: 20009b9c .word 0x20009b9c - -08015130 <_fclose_r>: - 8015130: b570 push {r4, r5, r6, lr} - 8015132: 4606 mov r6, r0 - 8015134: 460c mov r4, r1 - 8015136: b911 cbnz r1, 801513e <_fclose_r+0xe> - 8015138: 2500 movs r5, #0 - 801513a: 4628 mov r0, r5 - 801513c: bd70 pop {r4, r5, r6, pc} - 801513e: b118 cbz r0, 8015148 <_fclose_r+0x18> - 8015140: 6b83 ldr r3, [r0, #56] ; 0x38 - 8015142: b90b cbnz r3, 8015148 <_fclose_r+0x18> - 8015144: f7fe fa26 bl 8013594 <__sinit> - 8015148: 6e63 ldr r3, [r4, #100] ; 0x64 - 801514a: 07d8 lsls r0, r3, #31 - 801514c: d405 bmi.n 801515a <_fclose_r+0x2a> - 801514e: 89a3 ldrh r3, [r4, #12] - 8015150: 0599 lsls r1, r3, #22 - 8015152: d402 bmi.n 801515a <_fclose_r+0x2a> - 8015154: 6da0 ldr r0, [r4, #88] ; 0x58 - 8015156: f7fe fb93 bl 8013880 <__retarget_lock_acquire_recursive> - 801515a: f9b4 300c ldrsh.w r3, [r4, #12] - 801515e: b93b cbnz r3, 8015170 <_fclose_r+0x40> - 8015160: 6e65 ldr r5, [r4, #100] ; 0x64 - 8015162: f015 0501 ands.w r5, r5, #1 - 8015166: d1e7 bne.n 8015138 <_fclose_r+0x8> - 8015168: 6da0 ldr r0, [r4, #88] ; 0x58 - 801516a: f7fe fb8a bl 8013882 <__retarget_lock_release_recursive> - 801516e: e7e4 b.n 801513a <_fclose_r+0xa> - 8015170: 4621 mov r1, r4 - 8015172: 4630 mov r0, r6 - 8015174: f7fe f914 bl 80133a0 <__sflush_r> - 8015178: 6ae3 ldr r3, [r4, #44] ; 0x2c - 801517a: 4605 mov r5, r0 - 801517c: b133 cbz r3, 801518c <_fclose_r+0x5c> - 801517e: 69e1 ldr r1, [r4, #28] - 8015180: 4630 mov r0, r6 - 8015182: 4798 blx r3 - 8015184: 2800 cmp r0, #0 - 8015186: bfb8 it lt - 8015188: f04f 35ff movlt.w r5, #4294967295 - 801518c: 89a3 ldrh r3, [r4, #12] - 801518e: 061a lsls r2, r3, #24 - 8015190: d503 bpl.n 801519a <_fclose_r+0x6a> - 8015192: 6921 ldr r1, [r4, #16] - 8015194: 4630 mov r0, r6 - 8015196: f7fe fa8d bl 80136b4 <_free_r> - 801519a: 6b21 ldr r1, [r4, #48] ; 0x30 - 801519c: b141 cbz r1, 80151b0 <_fclose_r+0x80> - 801519e: f104 0340 add.w r3, r4, #64 ; 0x40 - 80151a2: 4299 cmp r1, r3 - 80151a4: d002 beq.n 80151ac <_fclose_r+0x7c> - 80151a6: 4630 mov r0, r6 - 80151a8: f7fe fa84 bl 80136b4 <_free_r> - 80151ac: 2300 movs r3, #0 - 80151ae: 6323 str r3, [r4, #48] ; 0x30 - 80151b0: 6c61 ldr r1, [r4, #68] ; 0x44 - 80151b2: b121 cbz r1, 80151be <_fclose_r+0x8e> - 80151b4: 4630 mov r0, r6 - 80151b6: f7fe fa7d bl 80136b4 <_free_r> - 80151ba: 2300 movs r3, #0 - 80151bc: 6463 str r3, [r4, #68] ; 0x44 - 80151be: f7fe f9d1 bl 8013564 <__sfp_lock_acquire> - 80151c2: 2300 movs r3, #0 - 80151c4: 81a3 strh r3, [r4, #12] - 80151c6: 6e63 ldr r3, [r4, #100] ; 0x64 - 80151c8: 07db lsls r3, r3, #31 - 80151ca: d402 bmi.n 80151d2 <_fclose_r+0xa2> - 80151cc: 6da0 ldr r0, [r4, #88] ; 0x58 - 80151ce: f7fe fb58 bl 8013882 <__retarget_lock_release_recursive> - 80151d2: 6da0 ldr r0, [r4, #88] ; 0x58 - 80151d4: f7fe fb53 bl 801387e <__retarget_lock_close_recursive> - 80151d8: f7fe f9ca bl 8013570 <__sfp_lock_release> - 80151dc: e7ad b.n 801513a <_fclose_r+0xa> - ... - -080151e0 : - 80151e0: b40e push {r1, r2, r3} - 80151e2: b503 push {r0, r1, lr} - 80151e4: 4601 mov r1, r0 - 80151e6: ab03 add r3, sp, #12 - 80151e8: 4805 ldr r0, [pc, #20] ; (8015200 ) - 80151ea: f853 2b04 ldr.w r2, [r3], #4 - 80151ee: 6800 ldr r0, [r0, #0] - 80151f0: 9301 str r3, [sp, #4] - 80151f2: f7ff fa0f bl 8014614 <_vfiprintf_r> - 80151f6: b002 add sp, #8 - 80151f8: f85d eb04 ldr.w lr, [sp], #4 - 80151fc: b003 add sp, #12 - 80151fe: 4770 bx lr - 8015200: 20000030 .word 0x20000030 - -08015204 <__fputwc>: - 8015204: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} - 8015208: 4680 mov r8, r0 - 801520a: 460e mov r6, r1 - 801520c: 4615 mov r5, r2 - 801520e: f000 f9d1 bl 80155b4 <__locale_mb_cur_max> - 8015212: 2801 cmp r0, #1 - 8015214: d11c bne.n 8015250 <__fputwc+0x4c> - 8015216: 1e73 subs r3, r6, #1 - 8015218: 2bfe cmp r3, #254 ; 0xfe - 801521a: d819 bhi.n 8015250 <__fputwc+0x4c> - 801521c: f88d 6004 strb.w r6, [sp, #4] - 8015220: 4604 mov r4, r0 - 8015222: 2700 movs r7, #0 - 8015224: f10d 0904 add.w r9, sp, #4 - 8015228: 42a7 cmp r7, r4 - 801522a: d020 beq.n 801526e <__fputwc+0x6a> - 801522c: 68ab ldr r3, [r5, #8] - 801522e: f817 1009 ldrb.w r1, [r7, r9] - 8015232: 3b01 subs r3, #1 - 8015234: 2b00 cmp r3, #0 - 8015236: 60ab str r3, [r5, #8] - 8015238: da04 bge.n 8015244 <__fputwc+0x40> - 801523a: 69aa ldr r2, [r5, #24] - 801523c: 4293 cmp r3, r2 - 801523e: db1a blt.n 8015276 <__fputwc+0x72> - 8015240: 290a cmp r1, #10 - 8015242: d018 beq.n 8015276 <__fputwc+0x72> - 8015244: 682b ldr r3, [r5, #0] - 8015246: 1c5a adds r2, r3, #1 - 8015248: 602a str r2, [r5, #0] - 801524a: 7019 strb r1, [r3, #0] - 801524c: 3701 adds r7, #1 - 801524e: e7eb b.n 8015228 <__fputwc+0x24> - 8015250: a901 add r1, sp, #4 - 8015252: f105 035c add.w r3, r5, #92 ; 0x5c - 8015256: 4632 mov r2, r6 - 8015258: 4640 mov r0, r8 - 801525a: f000 fbd5 bl 8015a08 <_wcrtomb_r> - 801525e: 1c41 adds r1, r0, #1 - 8015260: 4604 mov r4, r0 - 8015262: d1de bne.n 8015222 <__fputwc+0x1e> - 8015264: 89ab ldrh r3, [r5, #12] - 8015266: f043 0340 orr.w r3, r3, #64 ; 0x40 - 801526a: 81ab strh r3, [r5, #12] - 801526c: 4606 mov r6, r0 - 801526e: 4630 mov r0, r6 - 8015270: b003 add sp, #12 - 8015272: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - 8015276: 462a mov r2, r5 - 8015278: 4640 mov r0, r8 - 801527a: f000 fb7b bl 8015974 <__swbuf_r> - 801527e: 1c42 adds r2, r0, #1 - 8015280: d1e4 bne.n 801524c <__fputwc+0x48> - 8015282: 4606 mov r6, r0 - 8015284: e7f3 b.n 801526e <__fputwc+0x6a> - -08015286 <_fputwc_r>: - 8015286: 6e53 ldr r3, [r2, #100] ; 0x64 - 8015288: b537 push {r0, r1, r2, r4, r5, lr} - 801528a: 4614 mov r4, r2 - 801528c: 07da lsls r2, r3, #31 - 801528e: 4605 mov r5, r0 - 8015290: d407 bmi.n 80152a2 <_fputwc_r+0x1c> - 8015292: 89a3 ldrh r3, [r4, #12] - 8015294: 059b lsls r3, r3, #22 - 8015296: d404 bmi.n 80152a2 <_fputwc_r+0x1c> - 8015298: 6da0 ldr r0, [r4, #88] ; 0x58 - 801529a: 9101 str r1, [sp, #4] - 801529c: f7fe faf0 bl 8013880 <__retarget_lock_acquire_recursive> - 80152a0: 9901 ldr r1, [sp, #4] - 80152a2: f9b4 300c ldrsh.w r3, [r4, #12] - 80152a6: 0498 lsls r0, r3, #18 - 80152a8: d406 bmi.n 80152b8 <_fputwc_r+0x32> - 80152aa: f443 5300 orr.w r3, r3, #8192 ; 0x2000 - 80152ae: 81a3 strh r3, [r4, #12] - 80152b0: 6e63 ldr r3, [r4, #100] ; 0x64 - 80152b2: f443 5300 orr.w r3, r3, #8192 ; 0x2000 - 80152b6: 6663 str r3, [r4, #100] ; 0x64 - 80152b8: 4622 mov r2, r4 - 80152ba: 4628 mov r0, r5 - 80152bc: f7ff ffa2 bl 8015204 <__fputwc> - 80152c0: 6e63 ldr r3, [r4, #100] ; 0x64 - 80152c2: 07da lsls r2, r3, #31 - 80152c4: 4605 mov r5, r0 - 80152c6: d405 bmi.n 80152d4 <_fputwc_r+0x4e> - 80152c8: 89a3 ldrh r3, [r4, #12] - 80152ca: 059b lsls r3, r3, #22 - 80152cc: d402 bmi.n 80152d4 <_fputwc_r+0x4e> - 80152ce: 6da0 ldr r0, [r4, #88] ; 0x58 - 80152d0: f7fe fad7 bl 8013882 <__retarget_lock_release_recursive> - 80152d4: 4628 mov r0, r5 - 80152d6: b003 add sp, #12 - 80152d8: bd30 pop {r4, r5, pc} - ... - -080152dc <_fstat_r>: - 80152dc: b538 push {r3, r4, r5, lr} - 80152de: 4d07 ldr r5, [pc, #28] ; (80152fc <_fstat_r+0x20>) - 80152e0: 2300 movs r3, #0 - 80152e2: 4604 mov r4, r0 - 80152e4: 4608 mov r0, r1 - 80152e6: 4611 mov r1, r2 - 80152e8: 602b str r3, [r5, #0] - 80152ea: f000 fc05 bl 8015af8 <_fstat> - 80152ee: 1c43 adds r3, r0, #1 - 80152f0: d102 bne.n 80152f8 <_fstat_r+0x1c> - 80152f2: 682b ldr r3, [r5, #0] - 80152f4: b103 cbz r3, 80152f8 <_fstat_r+0x1c> - 80152f6: 6023 str r3, [r4, #0] - 80152f8: bd38 pop {r3, r4, r5, pc} - 80152fa: bf00 nop - 80152fc: 20009b9c .word 0x20009b9c - -08015300 <__sfvwrite_r>: - 8015300: 6893 ldr r3, [r2, #8] - 8015302: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8015306: 4606 mov r6, r0 - 8015308: 460c mov r4, r1 - 801530a: 4690 mov r8, r2 - 801530c: b91b cbnz r3, 8015316 <__sfvwrite_r+0x16> - 801530e: 2000 movs r0, #0 - 8015310: b003 add sp, #12 - 8015312: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 8015316: 898b ldrh r3, [r1, #12] - 8015318: 0718 lsls r0, r3, #28 - 801531a: d550 bpl.n 80153be <__sfvwrite_r+0xbe> - 801531c: 690b ldr r3, [r1, #16] - 801531e: 2b00 cmp r3, #0 - 8015320: d04d beq.n 80153be <__sfvwrite_r+0xbe> - 8015322: 89a3 ldrh r3, [r4, #12] - 8015324: f8d8 7000 ldr.w r7, [r8] - 8015328: f013 0902 ands.w r9, r3, #2 - 801532c: d16c bne.n 8015408 <__sfvwrite_r+0x108> - 801532e: f013 0301 ands.w r3, r3, #1 - 8015332: f000 809c beq.w 801546e <__sfvwrite_r+0x16e> - 8015336: 4648 mov r0, r9 - 8015338: 46ca mov sl, r9 - 801533a: 46cb mov fp, r9 - 801533c: f1bb 0f00 cmp.w fp, #0 - 8015340: f000 8103 beq.w 801554a <__sfvwrite_r+0x24a> - 8015344: b950 cbnz r0, 801535c <__sfvwrite_r+0x5c> - 8015346: 465a mov r2, fp - 8015348: 210a movs r1, #10 - 801534a: 4650 mov r0, sl - 801534c: f7ea ff58 bl 8000200 - 8015350: 2800 cmp r0, #0 - 8015352: f000 80ff beq.w 8015554 <__sfvwrite_r+0x254> - 8015356: 3001 adds r0, #1 - 8015358: eba0 090a sub.w r9, r0, sl - 801535c: 6820 ldr r0, [r4, #0] - 801535e: 6921 ldr r1, [r4, #16] - 8015360: 6963 ldr r3, [r4, #20] - 8015362: 45d9 cmp r9, fp - 8015364: 464a mov r2, r9 - 8015366: bf28 it cs - 8015368: 465a movcs r2, fp - 801536a: 4288 cmp r0, r1 - 801536c: f240 80f5 bls.w 801555a <__sfvwrite_r+0x25a> - 8015370: 68a5 ldr r5, [r4, #8] - 8015372: 441d add r5, r3 - 8015374: 42aa cmp r2, r5 - 8015376: f340 80f0 ble.w 801555a <__sfvwrite_r+0x25a> - 801537a: 4651 mov r1, sl - 801537c: 462a mov r2, r5 - 801537e: f7fb fe71 bl 8011064 - 8015382: 6823 ldr r3, [r4, #0] - 8015384: 442b add r3, r5 - 8015386: 6023 str r3, [r4, #0] - 8015388: 4621 mov r1, r4 - 801538a: 4630 mov r0, r6 - 801538c: f7fe f896 bl 80134bc <_fflush_r> - 8015390: 2800 cmp r0, #0 - 8015392: d167 bne.n 8015464 <__sfvwrite_r+0x164> - 8015394: ebb9 0905 subs.w r9, r9, r5 - 8015398: f040 80f7 bne.w 801558a <__sfvwrite_r+0x28a> - 801539c: 4621 mov r1, r4 - 801539e: 4630 mov r0, r6 - 80153a0: f7fe f88c bl 80134bc <_fflush_r> - 80153a4: 2800 cmp r0, #0 - 80153a6: d15d bne.n 8015464 <__sfvwrite_r+0x164> - 80153a8: f8d8 2008 ldr.w r2, [r8, #8] - 80153ac: 44aa add sl, r5 - 80153ae: ebab 0b05 sub.w fp, fp, r5 - 80153b2: 1b55 subs r5, r2, r5 - 80153b4: f8c8 5008 str.w r5, [r8, #8] - 80153b8: 2d00 cmp r5, #0 - 80153ba: d1bf bne.n 801533c <__sfvwrite_r+0x3c> - 80153bc: e7a7 b.n 801530e <__sfvwrite_r+0xe> - 80153be: 4621 mov r1, r4 - 80153c0: 4630 mov r0, r6 - 80153c2: f7fd f91b bl 80125fc <__swsetup_r> - 80153c6: 2800 cmp r0, #0 - 80153c8: d0ab beq.n 8015322 <__sfvwrite_r+0x22> - 80153ca: f04f 30ff mov.w r0, #4294967295 - 80153ce: e79f b.n 8015310 <__sfvwrite_r+0x10> - 80153d0: e9d7 b900 ldrd fp, r9, [r7] - 80153d4: 3708 adds r7, #8 - 80153d6: f1b9 0f00 cmp.w r9, #0 - 80153da: d0f9 beq.n 80153d0 <__sfvwrite_r+0xd0> - 80153dc: 45d1 cmp r9, sl - 80153de: 464b mov r3, r9 - 80153e0: 69e1 ldr r1, [r4, #28] - 80153e2: 6a65 ldr r5, [r4, #36] ; 0x24 - 80153e4: bf28 it cs - 80153e6: 4653 movcs r3, sl - 80153e8: 465a mov r2, fp - 80153ea: 4630 mov r0, r6 - 80153ec: 47a8 blx r5 - 80153ee: 2800 cmp r0, #0 - 80153f0: dd38 ble.n 8015464 <__sfvwrite_r+0x164> - 80153f2: f8d8 3008 ldr.w r3, [r8, #8] - 80153f6: 4483 add fp, r0 - 80153f8: eba9 0900 sub.w r9, r9, r0 - 80153fc: 1a18 subs r0, r3, r0 - 80153fe: f8c8 0008 str.w r0, [r8, #8] - 8015402: 2800 cmp r0, #0 - 8015404: d1e7 bne.n 80153d6 <__sfvwrite_r+0xd6> - 8015406: e782 b.n 801530e <__sfvwrite_r+0xe> - 8015408: f04f 0b00 mov.w fp, #0 - 801540c: f8df a180 ldr.w sl, [pc, #384] ; 8015590 <__sfvwrite_r+0x290> - 8015410: 46d9 mov r9, fp - 8015412: e7e0 b.n 80153d6 <__sfvwrite_r+0xd6> - 8015414: e9d7 9a00 ldrd r9, sl, [r7] - 8015418: 3708 adds r7, #8 - 801541a: f1ba 0f00 cmp.w sl, #0 - 801541e: d0f9 beq.n 8015414 <__sfvwrite_r+0x114> - 8015420: 89a3 ldrh r3, [r4, #12] - 8015422: 6820 ldr r0, [r4, #0] - 8015424: 68a2 ldr r2, [r4, #8] - 8015426: 0599 lsls r1, r3, #22 - 8015428: d563 bpl.n 80154f2 <__sfvwrite_r+0x1f2> - 801542a: 4552 cmp r2, sl - 801542c: d836 bhi.n 801549c <__sfvwrite_r+0x19c> - 801542e: f413 6f90 tst.w r3, #1152 ; 0x480 - 8015432: d033 beq.n 801549c <__sfvwrite_r+0x19c> - 8015434: 6921 ldr r1, [r4, #16] - 8015436: 6965 ldr r5, [r4, #20] - 8015438: eba0 0b01 sub.w fp, r0, r1 - 801543c: eb05 0545 add.w r5, r5, r5, lsl #1 - 8015440: eb05 75d5 add.w r5, r5, r5, lsr #31 - 8015444: f10b 0201 add.w r2, fp, #1 - 8015448: 106d asrs r5, r5, #1 - 801544a: 4452 add r2, sl - 801544c: 4295 cmp r5, r2 - 801544e: bf38 it cc - 8015450: 4615 movcc r5, r2 - 8015452: 055b lsls r3, r3, #21 - 8015454: d53d bpl.n 80154d2 <__sfvwrite_r+0x1d2> - 8015456: 4629 mov r1, r5 - 8015458: 4630 mov r0, r6 - 801545a: f7fe fa7f bl 801395c <_malloc_r> - 801545e: b948 cbnz r0, 8015474 <__sfvwrite_r+0x174> - 8015460: 230c movs r3, #12 - 8015462: 6033 str r3, [r6, #0] - 8015464: 89a3 ldrh r3, [r4, #12] - 8015466: f043 0340 orr.w r3, r3, #64 ; 0x40 - 801546a: 81a3 strh r3, [r4, #12] - 801546c: e7ad b.n 80153ca <__sfvwrite_r+0xca> - 801546e: 4699 mov r9, r3 - 8015470: 469a mov sl, r3 - 8015472: e7d2 b.n 801541a <__sfvwrite_r+0x11a> - 8015474: 465a mov r2, fp - 8015476: 6921 ldr r1, [r4, #16] - 8015478: 9001 str r0, [sp, #4] - 801547a: f7fb fde5 bl 8011048 - 801547e: 89a2 ldrh r2, [r4, #12] - 8015480: 9b01 ldr r3, [sp, #4] - 8015482: f422 6290 bic.w r2, r2, #1152 ; 0x480 - 8015486: f042 0280 orr.w r2, r2, #128 ; 0x80 - 801548a: 81a2 strh r2, [r4, #12] - 801548c: 6123 str r3, [r4, #16] - 801548e: 6165 str r5, [r4, #20] - 8015490: 445b add r3, fp - 8015492: eba5 050b sub.w r5, r5, fp - 8015496: 6023 str r3, [r4, #0] - 8015498: 4652 mov r2, sl - 801549a: 60a5 str r5, [r4, #8] - 801549c: 4552 cmp r2, sl - 801549e: bf28 it cs - 80154a0: 4652 movcs r2, sl - 80154a2: 6820 ldr r0, [r4, #0] - 80154a4: 9201 str r2, [sp, #4] - 80154a6: 4649 mov r1, r9 - 80154a8: f7fb fddc bl 8011064 - 80154ac: 68a3 ldr r3, [r4, #8] - 80154ae: 9a01 ldr r2, [sp, #4] - 80154b0: 1a9b subs r3, r3, r2 - 80154b2: 60a3 str r3, [r4, #8] - 80154b4: 6823 ldr r3, [r4, #0] - 80154b6: 441a add r2, r3 - 80154b8: 4655 mov r5, sl - 80154ba: 6022 str r2, [r4, #0] - 80154bc: f8d8 0008 ldr.w r0, [r8, #8] - 80154c0: 44a9 add r9, r5 - 80154c2: ebaa 0a05 sub.w sl, sl, r5 - 80154c6: 1b45 subs r5, r0, r5 - 80154c8: f8c8 5008 str.w r5, [r8, #8] - 80154cc: 2d00 cmp r5, #0 - 80154ce: d1a4 bne.n 801541a <__sfvwrite_r+0x11a> - 80154d0: e71d b.n 801530e <__sfvwrite_r+0xe> - 80154d2: 462a mov r2, r5 - 80154d4: 4630 mov r0, r6 - 80154d6: f000 f8a9 bl 801562c <_realloc_r> - 80154da: 4603 mov r3, r0 - 80154dc: 2800 cmp r0, #0 - 80154de: d1d5 bne.n 801548c <__sfvwrite_r+0x18c> - 80154e0: 6921 ldr r1, [r4, #16] - 80154e2: 4630 mov r0, r6 - 80154e4: f7fe f8e6 bl 80136b4 <_free_r> - 80154e8: 89a3 ldrh r3, [r4, #12] - 80154ea: f023 0380 bic.w r3, r3, #128 ; 0x80 - 80154ee: 81a3 strh r3, [r4, #12] - 80154f0: e7b6 b.n 8015460 <__sfvwrite_r+0x160> - 80154f2: 6923 ldr r3, [r4, #16] - 80154f4: 4283 cmp r3, r0 - 80154f6: d302 bcc.n 80154fe <__sfvwrite_r+0x1fe> - 80154f8: 6961 ldr r1, [r4, #20] - 80154fa: 4551 cmp r1, sl - 80154fc: d915 bls.n 801552a <__sfvwrite_r+0x22a> - 80154fe: 4552 cmp r2, sl - 8015500: bf28 it cs - 8015502: 4652 movcs r2, sl - 8015504: 4649 mov r1, r9 - 8015506: 4615 mov r5, r2 - 8015508: f7fb fdac bl 8011064 - 801550c: 68a3 ldr r3, [r4, #8] - 801550e: 6822 ldr r2, [r4, #0] - 8015510: 1b5b subs r3, r3, r5 - 8015512: 442a add r2, r5 - 8015514: 60a3 str r3, [r4, #8] - 8015516: 6022 str r2, [r4, #0] - 8015518: 2b00 cmp r3, #0 - 801551a: d1cf bne.n 80154bc <__sfvwrite_r+0x1bc> - 801551c: 4621 mov r1, r4 - 801551e: 4630 mov r0, r6 - 8015520: f7fd ffcc bl 80134bc <_fflush_r> - 8015524: 2800 cmp r0, #0 - 8015526: d0c9 beq.n 80154bc <__sfvwrite_r+0x1bc> - 8015528: e79c b.n 8015464 <__sfvwrite_r+0x164> - 801552a: f06f 4300 mvn.w r3, #2147483648 ; 0x80000000 - 801552e: 459a cmp sl, r3 - 8015530: bf38 it cc - 8015532: 4653 movcc r3, sl - 8015534: 6a65 ldr r5, [r4, #36] ; 0x24 - 8015536: fb93 f3f1 sdiv r3, r3, r1 - 801553a: 464a mov r2, r9 - 801553c: 434b muls r3, r1 - 801553e: 4630 mov r0, r6 - 8015540: 69e1 ldr r1, [r4, #28] - 8015542: 47a8 blx r5 - 8015544: 1e05 subs r5, r0, #0 - 8015546: dcb9 bgt.n 80154bc <__sfvwrite_r+0x1bc> - 8015548: e78c b.n 8015464 <__sfvwrite_r+0x164> - 801554a: e9d7 ab00 ldrd sl, fp, [r7] - 801554e: 2000 movs r0, #0 - 8015550: 3708 adds r7, #8 - 8015552: e6f3 b.n 801533c <__sfvwrite_r+0x3c> - 8015554: f10b 0901 add.w r9, fp, #1 - 8015558: e700 b.n 801535c <__sfvwrite_r+0x5c> - 801555a: 4293 cmp r3, r2 - 801555c: dc08 bgt.n 8015570 <__sfvwrite_r+0x270> - 801555e: 6a65 ldr r5, [r4, #36] ; 0x24 - 8015560: 69e1 ldr r1, [r4, #28] - 8015562: 4652 mov r2, sl - 8015564: 4630 mov r0, r6 - 8015566: 47a8 blx r5 - 8015568: 1e05 subs r5, r0, #0 - 801556a: f73f af13 bgt.w 8015394 <__sfvwrite_r+0x94> - 801556e: e779 b.n 8015464 <__sfvwrite_r+0x164> - 8015570: 4651 mov r1, sl - 8015572: 9201 str r2, [sp, #4] - 8015574: f7fb fd76 bl 8011064 - 8015578: 9a01 ldr r2, [sp, #4] - 801557a: 68a3 ldr r3, [r4, #8] - 801557c: 1a9b subs r3, r3, r2 - 801557e: 60a3 str r3, [r4, #8] - 8015580: 6823 ldr r3, [r4, #0] - 8015582: 4413 add r3, r2 - 8015584: 6023 str r3, [r4, #0] - 8015586: 4615 mov r5, r2 - 8015588: e704 b.n 8015394 <__sfvwrite_r+0x94> - 801558a: 2001 movs r0, #1 - 801558c: e70c b.n 80153a8 <__sfvwrite_r+0xa8> - 801558e: bf00 nop - 8015590: 7ffffc00 .word 0x7ffffc00 - -08015594 <_isatty_r>: - 8015594: b538 push {r3, r4, r5, lr} - 8015596: 4d06 ldr r5, [pc, #24] ; (80155b0 <_isatty_r+0x1c>) - 8015598: 2300 movs r3, #0 - 801559a: 4604 mov r4, r0 - 801559c: 4608 mov r0, r1 - 801559e: 602b str r3, [r5, #0] - 80155a0: f000 faba bl 8015b18 <_isatty> - 80155a4: 1c43 adds r3, r0, #1 - 80155a6: d102 bne.n 80155ae <_isatty_r+0x1a> - 80155a8: 682b ldr r3, [r5, #0] - 80155aa: b103 cbz r3, 80155ae <_isatty_r+0x1a> - 80155ac: 6023 str r3, [r4, #0] - 80155ae: bd38 pop {r3, r4, r5, pc} - 80155b0: 20009b9c .word 0x20009b9c - -080155b4 <__locale_mb_cur_max>: - 80155b4: 4b01 ldr r3, [pc, #4] ; (80155bc <__locale_mb_cur_max+0x8>) - 80155b6: f893 0128 ldrb.w r0, [r3, #296] ; 0x128 - 80155ba: 4770 bx lr - 80155bc: 20000874 .word 0x20000874 - -080155c0 <_lseek_r>: - 80155c0: b538 push {r3, r4, r5, lr} - 80155c2: 4d07 ldr r5, [pc, #28] ; (80155e0 <_lseek_r+0x20>) - 80155c4: 4604 mov r4, r0 - 80155c6: 4608 mov r0, r1 - 80155c8: 4611 mov r1, r2 - 80155ca: 2200 movs r2, #0 - 80155cc: 602a str r2, [r5, #0] - 80155ce: 461a mov r2, r3 - 80155d0: f000 fab2 bl 8015b38 <_lseek> - 80155d4: 1c43 adds r3, r0, #1 - 80155d6: d102 bne.n 80155de <_lseek_r+0x1e> - 80155d8: 682b ldr r3, [r5, #0] - 80155da: b103 cbz r3, 80155de <_lseek_r+0x1e> - 80155dc: 6023 str r3, [r4, #0] - 80155de: bd38 pop {r3, r4, r5, pc} - 80155e0: 20009b9c .word 0x20009b9c - -080155e4 <__ascii_mbtowc>: - 80155e4: b082 sub sp, #8 - 80155e6: b901 cbnz r1, 80155ea <__ascii_mbtowc+0x6> - 80155e8: a901 add r1, sp, #4 - 80155ea: b142 cbz r2, 80155fe <__ascii_mbtowc+0x1a> - 80155ec: b14b cbz r3, 8015602 <__ascii_mbtowc+0x1e> - 80155ee: 7813 ldrb r3, [r2, #0] - 80155f0: 600b str r3, [r1, #0] - 80155f2: 7812 ldrb r2, [r2, #0] - 80155f4: 1e10 subs r0, r2, #0 - 80155f6: bf18 it ne - 80155f8: 2001 movne r0, #1 - 80155fa: b002 add sp, #8 - 80155fc: 4770 bx lr - 80155fe: 4610 mov r0, r2 - 8015600: e7fb b.n 80155fa <__ascii_mbtowc+0x16> - 8015602: f06f 0001 mvn.w r0, #1 - 8015606: e7f8 b.n 80155fa <__ascii_mbtowc+0x16> - -08015608 <_read_r>: - 8015608: b538 push {r3, r4, r5, lr} - 801560a: 4d07 ldr r5, [pc, #28] ; (8015628 <_read_r+0x20>) - 801560c: 4604 mov r4, r0 - 801560e: 4608 mov r0, r1 - 8015610: 4611 mov r1, r2 - 8015612: 2200 movs r2, #0 - 8015614: 602a str r2, [r5, #0] - 8015616: 461a mov r2, r3 - 8015618: f000 fa96 bl 8015b48 <_read> - 801561c: 1c43 adds r3, r0, #1 - 801561e: d102 bne.n 8015626 <_read_r+0x1e> - 8015620: 682b ldr r3, [r5, #0] - 8015622: b103 cbz r3, 8015626 <_read_r+0x1e> - 8015624: 6023 str r3, [r4, #0] - 8015626: bd38 pop {r3, r4, r5, pc} - 8015628: 20009b9c .word 0x20009b9c - -0801562c <_realloc_r>: - 801562c: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8015630: 4681 mov r9, r0 - 8015632: 460c mov r4, r1 - 8015634: b929 cbnz r1, 8015642 <_realloc_r+0x16> - 8015636: 4611 mov r1, r2 - 8015638: b003 add sp, #12 - 801563a: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 801563e: f7fe b98d b.w 801395c <_malloc_r> - 8015642: 9201 str r2, [sp, #4] - 8015644: f7fe fbc6 bl 8013dd4 <__malloc_lock> - 8015648: 9a01 ldr r2, [sp, #4] - 801564a: f102 080b add.w r8, r2, #11 - 801564e: f1b8 0f16 cmp.w r8, #22 - 8015652: d90b bls.n 801566c <_realloc_r+0x40> - 8015654: f038 0807 bics.w r8, r8, #7 - 8015658: d50a bpl.n 8015670 <_realloc_r+0x44> - 801565a: 230c movs r3, #12 - 801565c: f8c9 3000 str.w r3, [r9] - 8015660: f04f 0b00 mov.w fp, #0 - 8015664: 4658 mov r0, fp - 8015666: b003 add sp, #12 - 8015668: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 801566c: f04f 0810 mov.w r8, #16 - 8015670: 4590 cmp r8, r2 - 8015672: d3f2 bcc.n 801565a <_realloc_r+0x2e> - 8015674: f854 5c04 ldr.w r5, [r4, #-4] - 8015678: f025 0603 bic.w r6, r5, #3 - 801567c: 45b0 cmp r8, r6 - 801567e: f1a4 0a08 sub.w sl, r4, #8 - 8015682: f340 816e ble.w 8015962 <_realloc_r+0x336> - 8015686: 499b ldr r1, [pc, #620] ; (80158f4 <_realloc_r+0x2c8>) - 8015688: f8d1 c008 ldr.w ip, [r1, #8] - 801568c: eb0a 0306 add.w r3, sl, r6 - 8015690: 459c cmp ip, r3 - 8015692: 6859 ldr r1, [r3, #4] - 8015694: d005 beq.n 80156a2 <_realloc_r+0x76> - 8015696: f021 0001 bic.w r0, r1, #1 - 801569a: 4418 add r0, r3 - 801569c: 6840 ldr r0, [r0, #4] - 801569e: 07c7 lsls r7, r0, #31 - 80156a0: d427 bmi.n 80156f2 <_realloc_r+0xc6> - 80156a2: f021 0103 bic.w r1, r1, #3 - 80156a6: 459c cmp ip, r3 - 80156a8: eb06 0701 add.w r7, r6, r1 - 80156ac: d119 bne.n 80156e2 <_realloc_r+0xb6> - 80156ae: f108 0010 add.w r0, r8, #16 - 80156b2: 42b8 cmp r0, r7 - 80156b4: dc1f bgt.n 80156f6 <_realloc_r+0xca> - 80156b6: eb0a 0308 add.w r3, sl, r8 - 80156ba: 4a8e ldr r2, [pc, #568] ; (80158f4 <_realloc_r+0x2c8>) - 80156bc: eba7 0708 sub.w r7, r7, r8 - 80156c0: f047 0701 orr.w r7, r7, #1 - 80156c4: 6093 str r3, [r2, #8] - 80156c6: 605f str r7, [r3, #4] - 80156c8: f854 3c04 ldr.w r3, [r4, #-4] - 80156cc: f003 0301 and.w r3, r3, #1 - 80156d0: ea43 0308 orr.w r3, r3, r8 - 80156d4: f844 3c04 str.w r3, [r4, #-4] - 80156d8: 4648 mov r0, r9 - 80156da: f7fe fb81 bl 8013de0 <__malloc_unlock> - 80156de: 46a3 mov fp, r4 - 80156e0: e7c0 b.n 8015664 <_realloc_r+0x38> - 80156e2: 45b8 cmp r8, r7 - 80156e4: dc07 bgt.n 80156f6 <_realloc_r+0xca> - 80156e6: e9d3 3202 ldrd r3, r2, [r3, #8] - 80156ea: 60da str r2, [r3, #12] - 80156ec: 6093 str r3, [r2, #8] - 80156ee: 4655 mov r5, sl - 80156f0: e07f b.n 80157f2 <_realloc_r+0x1c6> - 80156f2: 2100 movs r1, #0 - 80156f4: 460b mov r3, r1 - 80156f6: 07e8 lsls r0, r5, #31 - 80156f8: f100 80e5 bmi.w 80158c6 <_realloc_r+0x29a> - 80156fc: f854 5c08 ldr.w r5, [r4, #-8] - 8015700: ebaa 0505 sub.w r5, sl, r5 - 8015704: 6868 ldr r0, [r5, #4] - 8015706: f020 0003 bic.w r0, r0, #3 - 801570a: eb00 0b06 add.w fp, r0, r6 - 801570e: 2b00 cmp r3, #0 - 8015710: f000 80a5 beq.w 801585e <_realloc_r+0x232> - 8015714: 459c cmp ip, r3 - 8015716: eb01 070b add.w r7, r1, fp - 801571a: d14a bne.n 80157b2 <_realloc_r+0x186> - 801571c: f108 0310 add.w r3, r8, #16 - 8015720: 42bb cmp r3, r7 - 8015722: f300 809c bgt.w 801585e <_realloc_r+0x232> - 8015726: 46ab mov fp, r5 - 8015728: 68eb ldr r3, [r5, #12] - 801572a: f85b 2f08 ldr.w r2, [fp, #8]! - 801572e: 60d3 str r3, [r2, #12] - 8015730: 609a str r2, [r3, #8] - 8015732: 1f32 subs r2, r6, #4 - 8015734: 2a24 cmp r2, #36 ; 0x24 - 8015736: d837 bhi.n 80157a8 <_realloc_r+0x17c> - 8015738: 2a13 cmp r2, #19 - 801573a: d933 bls.n 80157a4 <_realloc_r+0x178> - 801573c: 6823 ldr r3, [r4, #0] - 801573e: 60ab str r3, [r5, #8] - 8015740: 6863 ldr r3, [r4, #4] - 8015742: 60eb str r3, [r5, #12] - 8015744: 2a1b cmp r2, #27 - 8015746: d81b bhi.n 8015780 <_realloc_r+0x154> - 8015748: 3408 adds r4, #8 - 801574a: f105 0310 add.w r3, r5, #16 - 801574e: 6822 ldr r2, [r4, #0] - 8015750: 601a str r2, [r3, #0] - 8015752: 6862 ldr r2, [r4, #4] - 8015754: 605a str r2, [r3, #4] - 8015756: 68a2 ldr r2, [r4, #8] - 8015758: 609a str r2, [r3, #8] - 801575a: eb05 0308 add.w r3, r5, r8 - 801575e: 4a65 ldr r2, [pc, #404] ; (80158f4 <_realloc_r+0x2c8>) - 8015760: eba7 0708 sub.w r7, r7, r8 - 8015764: f047 0701 orr.w r7, r7, #1 - 8015768: 6093 str r3, [r2, #8] - 801576a: 605f str r7, [r3, #4] - 801576c: 686b ldr r3, [r5, #4] - 801576e: f003 0301 and.w r3, r3, #1 - 8015772: ea43 0308 orr.w r3, r3, r8 - 8015776: 606b str r3, [r5, #4] - 8015778: 4648 mov r0, r9 - 801577a: f7fe fb31 bl 8013de0 <__malloc_unlock> - 801577e: e771 b.n 8015664 <_realloc_r+0x38> - 8015780: 68a3 ldr r3, [r4, #8] - 8015782: 612b str r3, [r5, #16] - 8015784: 68e3 ldr r3, [r4, #12] - 8015786: 616b str r3, [r5, #20] - 8015788: 2a24 cmp r2, #36 ; 0x24 - 801578a: bf01 itttt eq - 801578c: 6923 ldreq r3, [r4, #16] - 801578e: 61ab streq r3, [r5, #24] - 8015790: 6962 ldreq r2, [r4, #20] - 8015792: 61ea streq r2, [r5, #28] - 8015794: bf19 ittee ne - 8015796: 3410 addne r4, #16 - 8015798: f105 0318 addne.w r3, r5, #24 - 801579c: f105 0320 addeq.w r3, r5, #32 - 80157a0: 3418 addeq r4, #24 - 80157a2: e7d4 b.n 801574e <_realloc_r+0x122> - 80157a4: 465b mov r3, fp - 80157a6: e7d2 b.n 801574e <_realloc_r+0x122> - 80157a8: 4621 mov r1, r4 - 80157aa: 4658 mov r0, fp - 80157ac: f7fb fc5a bl 8011064 - 80157b0: e7d3 b.n 801575a <_realloc_r+0x12e> - 80157b2: 45b8 cmp r8, r7 - 80157b4: dc53 bgt.n 801585e <_realloc_r+0x232> - 80157b6: e9d3 3202 ldrd r3, r2, [r3, #8] - 80157ba: 4628 mov r0, r5 - 80157bc: 60da str r2, [r3, #12] - 80157be: 6093 str r3, [r2, #8] - 80157c0: f850 2f08 ldr.w r2, [r0, #8]! - 80157c4: 68eb ldr r3, [r5, #12] - 80157c6: 60d3 str r3, [r2, #12] - 80157c8: 609a str r2, [r3, #8] - 80157ca: 1f32 subs r2, r6, #4 - 80157cc: 2a24 cmp r2, #36 ; 0x24 - 80157ce: d842 bhi.n 8015856 <_realloc_r+0x22a> - 80157d0: 2a13 cmp r2, #19 - 80157d2: d908 bls.n 80157e6 <_realloc_r+0x1ba> - 80157d4: 6823 ldr r3, [r4, #0] - 80157d6: 60ab str r3, [r5, #8] - 80157d8: 6863 ldr r3, [r4, #4] - 80157da: 60eb str r3, [r5, #12] - 80157dc: 2a1b cmp r2, #27 - 80157de: d828 bhi.n 8015832 <_realloc_r+0x206> - 80157e0: 3408 adds r4, #8 - 80157e2: f105 0010 add.w r0, r5, #16 - 80157e6: 6823 ldr r3, [r4, #0] - 80157e8: 6003 str r3, [r0, #0] - 80157ea: 6863 ldr r3, [r4, #4] - 80157ec: 6043 str r3, [r0, #4] - 80157ee: 68a3 ldr r3, [r4, #8] - 80157f0: 6083 str r3, [r0, #8] - 80157f2: 686b ldr r3, [r5, #4] - 80157f4: eba7 0008 sub.w r0, r7, r8 - 80157f8: 280f cmp r0, #15 - 80157fa: f003 0301 and.w r3, r3, #1 - 80157fe: eb05 0207 add.w r2, r5, r7 - 8015802: f240 80b0 bls.w 8015966 <_realloc_r+0x33a> - 8015806: eb05 0108 add.w r1, r5, r8 - 801580a: ea48 0303 orr.w r3, r8, r3 - 801580e: f040 0001 orr.w r0, r0, #1 - 8015812: 606b str r3, [r5, #4] - 8015814: 6048 str r0, [r1, #4] - 8015816: 6853 ldr r3, [r2, #4] - 8015818: f043 0301 orr.w r3, r3, #1 - 801581c: 6053 str r3, [r2, #4] - 801581e: 3108 adds r1, #8 - 8015820: 4648 mov r0, r9 - 8015822: f7fd ff47 bl 80136b4 <_free_r> - 8015826: 4648 mov r0, r9 - 8015828: f7fe fada bl 8013de0 <__malloc_unlock> - 801582c: f105 0b08 add.w fp, r5, #8 - 8015830: e718 b.n 8015664 <_realloc_r+0x38> - 8015832: 68a3 ldr r3, [r4, #8] - 8015834: 612b str r3, [r5, #16] - 8015836: 68e3 ldr r3, [r4, #12] - 8015838: 616b str r3, [r5, #20] - 801583a: 2a24 cmp r2, #36 ; 0x24 - 801583c: bf01 itttt eq - 801583e: 6923 ldreq r3, [r4, #16] - 8015840: 61ab streq r3, [r5, #24] - 8015842: 6963 ldreq r3, [r4, #20] - 8015844: 61eb streq r3, [r5, #28] - 8015846: bf19 ittee ne - 8015848: 3410 addne r4, #16 - 801584a: f105 0018 addne.w r0, r5, #24 - 801584e: f105 0020 addeq.w r0, r5, #32 - 8015852: 3418 addeq r4, #24 - 8015854: e7c7 b.n 80157e6 <_realloc_r+0x1ba> - 8015856: 4621 mov r1, r4 - 8015858: f7fb fc04 bl 8011064 - 801585c: e7c9 b.n 80157f2 <_realloc_r+0x1c6> - 801585e: 45d8 cmp r8, fp - 8015860: dc31 bgt.n 80158c6 <_realloc_r+0x29a> - 8015862: 4628 mov r0, r5 - 8015864: 68eb ldr r3, [r5, #12] - 8015866: f850 2f08 ldr.w r2, [r0, #8]! - 801586a: 60d3 str r3, [r2, #12] - 801586c: 609a str r2, [r3, #8] - 801586e: 1f32 subs r2, r6, #4 - 8015870: 2a24 cmp r2, #36 ; 0x24 - 8015872: d824 bhi.n 80158be <_realloc_r+0x292> - 8015874: 2a13 cmp r2, #19 - 8015876: d908 bls.n 801588a <_realloc_r+0x25e> - 8015878: 6823 ldr r3, [r4, #0] - 801587a: 60ab str r3, [r5, #8] - 801587c: 6863 ldr r3, [r4, #4] - 801587e: 60eb str r3, [r5, #12] - 8015880: 2a1b cmp r2, #27 - 8015882: d80a bhi.n 801589a <_realloc_r+0x26e> - 8015884: 3408 adds r4, #8 - 8015886: f105 0010 add.w r0, r5, #16 - 801588a: 6823 ldr r3, [r4, #0] - 801588c: 6003 str r3, [r0, #0] - 801588e: 6863 ldr r3, [r4, #4] - 8015890: 6043 str r3, [r0, #4] - 8015892: 68a3 ldr r3, [r4, #8] - 8015894: 6083 str r3, [r0, #8] - 8015896: 465f mov r7, fp - 8015898: e7ab b.n 80157f2 <_realloc_r+0x1c6> - 801589a: 68a3 ldr r3, [r4, #8] - 801589c: 612b str r3, [r5, #16] - 801589e: 68e3 ldr r3, [r4, #12] - 80158a0: 616b str r3, [r5, #20] - 80158a2: 2a24 cmp r2, #36 ; 0x24 - 80158a4: bf01 itttt eq - 80158a6: 6923 ldreq r3, [r4, #16] - 80158a8: 61ab streq r3, [r5, #24] - 80158aa: 6963 ldreq r3, [r4, #20] - 80158ac: 61eb streq r3, [r5, #28] - 80158ae: bf19 ittee ne - 80158b0: 3410 addne r4, #16 - 80158b2: f105 0018 addne.w r0, r5, #24 - 80158b6: f105 0020 addeq.w r0, r5, #32 - 80158ba: 3418 addeq r4, #24 - 80158bc: e7e5 b.n 801588a <_realloc_r+0x25e> - 80158be: 4621 mov r1, r4 - 80158c0: f7fb fbd0 bl 8011064 - 80158c4: e7e7 b.n 8015896 <_realloc_r+0x26a> - 80158c6: 4611 mov r1, r2 - 80158c8: 4648 mov r0, r9 - 80158ca: f7fe f847 bl 801395c <_malloc_r> - 80158ce: 4683 mov fp, r0 - 80158d0: 2800 cmp r0, #0 - 80158d2: f43f af51 beq.w 8015778 <_realloc_r+0x14c> - 80158d6: f854 3c04 ldr.w r3, [r4, #-4] - 80158da: f023 0301 bic.w r3, r3, #1 - 80158de: 4453 add r3, sl - 80158e0: f1a0 0208 sub.w r2, r0, #8 - 80158e4: 4293 cmp r3, r2 - 80158e6: d107 bne.n 80158f8 <_realloc_r+0x2cc> - 80158e8: f850 7c04 ldr.w r7, [r0, #-4] - 80158ec: f027 0703 bic.w r7, r7, #3 - 80158f0: 4437 add r7, r6 - 80158f2: e6fc b.n 80156ee <_realloc_r+0xc2> - 80158f4: 20000464 .word 0x20000464 - 80158f8: 1f32 subs r2, r6, #4 - 80158fa: 2a24 cmp r2, #36 ; 0x24 - 80158fc: d82d bhi.n 801595a <_realloc_r+0x32e> - 80158fe: 2a13 cmp r2, #19 - 8015900: d928 bls.n 8015954 <_realloc_r+0x328> - 8015902: 6823 ldr r3, [r4, #0] - 8015904: 6003 str r3, [r0, #0] - 8015906: 6863 ldr r3, [r4, #4] - 8015908: 6043 str r3, [r0, #4] - 801590a: 2a1b cmp r2, #27 - 801590c: d80e bhi.n 801592c <_realloc_r+0x300> - 801590e: f104 0208 add.w r2, r4, #8 - 8015912: f100 0308 add.w r3, r0, #8 - 8015916: 6811 ldr r1, [r2, #0] - 8015918: 6019 str r1, [r3, #0] - 801591a: 6851 ldr r1, [r2, #4] - 801591c: 6059 str r1, [r3, #4] - 801591e: 6892 ldr r2, [r2, #8] - 8015920: 609a str r2, [r3, #8] - 8015922: 4621 mov r1, r4 - 8015924: 4648 mov r0, r9 - 8015926: f7fd fec5 bl 80136b4 <_free_r> - 801592a: e725 b.n 8015778 <_realloc_r+0x14c> - 801592c: 68a3 ldr r3, [r4, #8] - 801592e: 6083 str r3, [r0, #8] - 8015930: 68e3 ldr r3, [r4, #12] - 8015932: 60c3 str r3, [r0, #12] - 8015934: 2a24 cmp r2, #36 ; 0x24 - 8015936: bf01 itttt eq - 8015938: 6923 ldreq r3, [r4, #16] - 801593a: 6103 streq r3, [r0, #16] - 801593c: 6961 ldreq r1, [r4, #20] - 801593e: 6141 streq r1, [r0, #20] - 8015940: bf19 ittee ne - 8015942: f104 0210 addne.w r2, r4, #16 - 8015946: f100 0310 addne.w r3, r0, #16 - 801594a: f104 0218 addeq.w r2, r4, #24 - 801594e: f100 0318 addeq.w r3, r0, #24 - 8015952: e7e0 b.n 8015916 <_realloc_r+0x2ea> - 8015954: 4603 mov r3, r0 - 8015956: 4622 mov r2, r4 - 8015958: e7dd b.n 8015916 <_realloc_r+0x2ea> - 801595a: 4621 mov r1, r4 - 801595c: f7fb fb82 bl 8011064 - 8015960: e7df b.n 8015922 <_realloc_r+0x2f6> - 8015962: 4637 mov r7, r6 - 8015964: e6c3 b.n 80156ee <_realloc_r+0xc2> - 8015966: 431f orrs r7, r3 - 8015968: 606f str r7, [r5, #4] - 801596a: 6853 ldr r3, [r2, #4] - 801596c: f043 0301 orr.w r3, r3, #1 - 8015970: 6053 str r3, [r2, #4] - 8015972: e758 b.n 8015826 <_realloc_r+0x1fa> - -08015974 <__swbuf_r>: - 8015974: b5f8 push {r3, r4, r5, r6, r7, lr} - 8015976: 460e mov r6, r1 - 8015978: 4614 mov r4, r2 - 801597a: 4605 mov r5, r0 - 801597c: b118 cbz r0, 8015986 <__swbuf_r+0x12> - 801597e: 6b83 ldr r3, [r0, #56] ; 0x38 - 8015980: b90b cbnz r3, 8015986 <__swbuf_r+0x12> - 8015982: f7fd fe07 bl 8013594 <__sinit> - 8015986: 69a3 ldr r3, [r4, #24] - 8015988: 60a3 str r3, [r4, #8] - 801598a: 89a3 ldrh r3, [r4, #12] - 801598c: 0719 lsls r1, r3, #28 - 801598e: d529 bpl.n 80159e4 <__swbuf_r+0x70> - 8015990: 6923 ldr r3, [r4, #16] - 8015992: b33b cbz r3, 80159e4 <__swbuf_r+0x70> - 8015994: f9b4 300c ldrsh.w r3, [r4, #12] - 8015998: b2f6 uxtb r6, r6 - 801599a: 049a lsls r2, r3, #18 - 801599c: 4637 mov r7, r6 - 801599e: d52a bpl.n 80159f6 <__swbuf_r+0x82> - 80159a0: 6823 ldr r3, [r4, #0] - 80159a2: 6920 ldr r0, [r4, #16] - 80159a4: 1a18 subs r0, r3, r0 - 80159a6: 6963 ldr r3, [r4, #20] - 80159a8: 4283 cmp r3, r0 - 80159aa: dc04 bgt.n 80159b6 <__swbuf_r+0x42> - 80159ac: 4621 mov r1, r4 - 80159ae: 4628 mov r0, r5 - 80159b0: f7fd fd84 bl 80134bc <_fflush_r> - 80159b4: b9e0 cbnz r0, 80159f0 <__swbuf_r+0x7c> - 80159b6: 68a3 ldr r3, [r4, #8] - 80159b8: 3b01 subs r3, #1 - 80159ba: 60a3 str r3, [r4, #8] - 80159bc: 6823 ldr r3, [r4, #0] - 80159be: 1c5a adds r2, r3, #1 - 80159c0: 6022 str r2, [r4, #0] - 80159c2: 701e strb r6, [r3, #0] - 80159c4: 6962 ldr r2, [r4, #20] - 80159c6: 1c43 adds r3, r0, #1 - 80159c8: 429a cmp r2, r3 - 80159ca: d004 beq.n 80159d6 <__swbuf_r+0x62> - 80159cc: 89a3 ldrh r3, [r4, #12] - 80159ce: 07db lsls r3, r3, #31 - 80159d0: d506 bpl.n 80159e0 <__swbuf_r+0x6c> - 80159d2: 2e0a cmp r6, #10 - 80159d4: d104 bne.n 80159e0 <__swbuf_r+0x6c> - 80159d6: 4621 mov r1, r4 - 80159d8: 4628 mov r0, r5 - 80159da: f7fd fd6f bl 80134bc <_fflush_r> - 80159de: b938 cbnz r0, 80159f0 <__swbuf_r+0x7c> - 80159e0: 4638 mov r0, r7 - 80159e2: bdf8 pop {r3, r4, r5, r6, r7, pc} - 80159e4: 4621 mov r1, r4 - 80159e6: 4628 mov r0, r5 - 80159e8: f7fc fe08 bl 80125fc <__swsetup_r> - 80159ec: 2800 cmp r0, #0 - 80159ee: d0d1 beq.n 8015994 <__swbuf_r+0x20> - 80159f0: f04f 37ff mov.w r7, #4294967295 - 80159f4: e7f4 b.n 80159e0 <__swbuf_r+0x6c> - 80159f6: f443 5300 orr.w r3, r3, #8192 ; 0x2000 - 80159fa: 81a3 strh r3, [r4, #12] - 80159fc: 6e63 ldr r3, [r4, #100] ; 0x64 - 80159fe: f423 5300 bic.w r3, r3, #8192 ; 0x2000 - 8015a02: 6663 str r3, [r4, #100] ; 0x64 - 8015a04: e7cc b.n 80159a0 <__swbuf_r+0x2c> - ... - -08015a08 <_wcrtomb_r>: - 8015a08: b5f0 push {r4, r5, r6, r7, lr} - 8015a0a: 4c09 ldr r4, [pc, #36] ; (8015a30 <_wcrtomb_r+0x28>) - 8015a0c: b085 sub sp, #20 - 8015a0e: f8d4 70e0 ldr.w r7, [r4, #224] ; 0xe0 - 8015a12: 4605 mov r5, r0 - 8015a14: 461e mov r6, r3 - 8015a16: b909 cbnz r1, 8015a1c <_wcrtomb_r+0x14> - 8015a18: 460a mov r2, r1 - 8015a1a: a901 add r1, sp, #4 - 8015a1c: 47b8 blx r7 - 8015a1e: 1c43 adds r3, r0, #1 - 8015a20: bf01 itttt eq - 8015a22: 2300 moveq r3, #0 - 8015a24: 6033 streq r3, [r6, #0] - 8015a26: 238a moveq r3, #138 ; 0x8a - 8015a28: 602b streq r3, [r5, #0] - 8015a2a: b005 add sp, #20 - 8015a2c: bdf0 pop {r4, r5, r6, r7, pc} - 8015a2e: bf00 nop - 8015a30: 20000874 .word 0x20000874 - -08015a34 <__ascii_wctomb>: - 8015a34: b149 cbz r1, 8015a4a <__ascii_wctomb+0x16> - 8015a36: 2aff cmp r2, #255 ; 0xff - 8015a38: bf85 ittet hi - 8015a3a: 238a movhi r3, #138 ; 0x8a - 8015a3c: 6003 strhi r3, [r0, #0] - 8015a3e: 700a strbls r2, [r1, #0] - 8015a40: f04f 30ff movhi.w r0, #4294967295 - 8015a44: bf98 it ls - 8015a46: 2001 movls r0, #1 - 8015a48: 4770 bx lr - 8015a4a: 4608 mov r0, r1 - 8015a4c: 4770 bx lr - -08015a4e : - 8015a4e: b508 push {r3, lr} - 8015a50: 2006 movs r0, #6 - 8015a52: f000 f82d bl 8015ab0 - 8015a56: 2001 movs r0, #1 - 8015a58: f000 f894 bl 8015b84 <_exit> - -08015a5c <_raise_r>: - 8015a5c: 291f cmp r1, #31 - 8015a5e: b538 push {r3, r4, r5, lr} - 8015a60: 4604 mov r4, r0 - 8015a62: 460d mov r5, r1 - 8015a64: d904 bls.n 8015a70 <_raise_r+0x14> - 8015a66: 2316 movs r3, #22 - 8015a68: 6003 str r3, [r0, #0] - 8015a6a: f04f 30ff mov.w r0, #4294967295 - 8015a6e: bd38 pop {r3, r4, r5, pc} - 8015a70: f8d0 22dc ldr.w r2, [r0, #732] ; 0x2dc - 8015a74: b112 cbz r2, 8015a7c <_raise_r+0x20> - 8015a76: f852 3021 ldr.w r3, [r2, r1, lsl #2] - 8015a7a: b94b cbnz r3, 8015a90 <_raise_r+0x34> - 8015a7c: 4620 mov r0, r4 - 8015a7e: f000 f831 bl 8015ae4 <_getpid_r> - 8015a82: 462a mov r2, r5 - 8015a84: 4601 mov r1, r0 - 8015a86: 4620 mov r0, r4 - 8015a88: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} - 8015a8c: f000 b818 b.w 8015ac0 <_kill_r> - 8015a90: 2b01 cmp r3, #1 - 8015a92: d00a beq.n 8015aaa <_raise_r+0x4e> - 8015a94: 1c59 adds r1, r3, #1 - 8015a96: d103 bne.n 8015aa0 <_raise_r+0x44> - 8015a98: 2316 movs r3, #22 - 8015a9a: 6003 str r3, [r0, #0] - 8015a9c: 2001 movs r0, #1 - 8015a9e: e7e6 b.n 8015a6e <_raise_r+0x12> - 8015aa0: 2400 movs r4, #0 - 8015aa2: f842 4025 str.w r4, [r2, r5, lsl #2] - 8015aa6: 4628 mov r0, r5 - 8015aa8: 4798 blx r3 - 8015aaa: 2000 movs r0, #0 - 8015aac: e7df b.n 8015a6e <_raise_r+0x12> - ... - -08015ab0 : - 8015ab0: 4b02 ldr r3, [pc, #8] ; (8015abc ) - 8015ab2: 4601 mov r1, r0 - 8015ab4: 6818 ldr r0, [r3, #0] - 8015ab6: f7ff bfd1 b.w 8015a5c <_raise_r> - 8015aba: bf00 nop - 8015abc: 20000030 .word 0x20000030 - -08015ac0 <_kill_r>: - 8015ac0: b538 push {r3, r4, r5, lr} - 8015ac2: 4d07 ldr r5, [pc, #28] ; (8015ae0 <_kill_r+0x20>) - 8015ac4: 2300 movs r3, #0 - 8015ac6: 4604 mov r4, r0 - 8015ac8: 4608 mov r0, r1 - 8015aca: 4611 mov r1, r2 - 8015acc: 602b str r3, [r5, #0] - 8015ace: f000 f82b bl 8015b28 <_kill> - 8015ad2: 1c43 adds r3, r0, #1 - 8015ad4: d102 bne.n 8015adc <_kill_r+0x1c> - 8015ad6: 682b ldr r3, [r5, #0] - 8015ad8: b103 cbz r3, 8015adc <_kill_r+0x1c> - 8015ada: 6023 str r3, [r4, #0] - 8015adc: bd38 pop {r3, r4, r5, pc} - 8015ade: bf00 nop - 8015ae0: 20009b9c .word 0x20009b9c - -08015ae4 <_getpid_r>: - 8015ae4: f000 b810 b.w 8015b08 <_getpid> - -08015ae8 <_close>: - 8015ae8: 4b02 ldr r3, [pc, #8] ; (8015af4 <_close+0xc>) - 8015aea: 2258 movs r2, #88 ; 0x58 - 8015aec: 601a str r2, [r3, #0] - 8015aee: f04f 30ff mov.w r0, #4294967295 - 8015af2: 4770 bx lr - 8015af4: 20009b9c .word 0x20009b9c - -08015af8 <_fstat>: - 8015af8: 4b02 ldr r3, [pc, #8] ; (8015b04 <_fstat+0xc>) - 8015afa: 2258 movs r2, #88 ; 0x58 - 8015afc: 601a str r2, [r3, #0] - 8015afe: f04f 30ff mov.w r0, #4294967295 - 8015b02: 4770 bx lr - 8015b04: 20009b9c .word 0x20009b9c - -08015b08 <_getpid>: - 8015b08: 4b02 ldr r3, [pc, #8] ; (8015b14 <_getpid+0xc>) - 8015b0a: 2258 movs r2, #88 ; 0x58 - 8015b0c: 601a str r2, [r3, #0] - 8015b0e: f04f 30ff mov.w r0, #4294967295 - 8015b12: 4770 bx lr - 8015b14: 20009b9c .word 0x20009b9c - -08015b18 <_isatty>: - 8015b18: 4b02 ldr r3, [pc, #8] ; (8015b24 <_isatty+0xc>) - 8015b1a: 2258 movs r2, #88 ; 0x58 - 8015b1c: 601a str r2, [r3, #0] - 8015b1e: 2000 movs r0, #0 - 8015b20: 4770 bx lr - 8015b22: bf00 nop - 8015b24: 20009b9c .word 0x20009b9c - -08015b28 <_kill>: - 8015b28: 4b02 ldr r3, [pc, #8] ; (8015b34 <_kill+0xc>) - 8015b2a: 2258 movs r2, #88 ; 0x58 - 8015b2c: 601a str r2, [r3, #0] - 8015b2e: f04f 30ff mov.w r0, #4294967295 - 8015b32: 4770 bx lr - 8015b34: 20009b9c .word 0x20009b9c - -08015b38 <_lseek>: - 8015b38: 4b02 ldr r3, [pc, #8] ; (8015b44 <_lseek+0xc>) - 8015b3a: 2258 movs r2, #88 ; 0x58 - 8015b3c: 601a str r2, [r3, #0] - 8015b3e: f04f 30ff mov.w r0, #4294967295 - 8015b42: 4770 bx lr - 8015b44: 20009b9c .word 0x20009b9c - -08015b48 <_read>: - 8015b48: 4b02 ldr r3, [pc, #8] ; (8015b54 <_read+0xc>) - 8015b4a: 2258 movs r2, #88 ; 0x58 - 8015b4c: 601a str r2, [r3, #0] - 8015b4e: f04f 30ff mov.w r0, #4294967295 - 8015b52: 4770 bx lr - 8015b54: 20009b9c .word 0x20009b9c - -08015b58 <_sbrk>: - 8015b58: 4a04 ldr r2, [pc, #16] ; (8015b6c <_sbrk+0x14>) - 8015b5a: 6811 ldr r1, [r2, #0] - 8015b5c: 4603 mov r3, r0 - 8015b5e: b909 cbnz r1, 8015b64 <_sbrk+0xc> - 8015b60: 4903 ldr r1, [pc, #12] ; (8015b70 <_sbrk+0x18>) - 8015b62: 6011 str r1, [r2, #0] - 8015b64: 6810 ldr r0, [r2, #0] - 8015b66: 4403 add r3, r0 - 8015b68: 6013 str r3, [r2, #0] - 8015b6a: 4770 bx lr - 8015b6c: 20009ba0 .word 0x20009ba0 - 8015b70: 20009ba8 .word 0x20009ba8 - -08015b74 <_write>: - 8015b74: 4b02 ldr r3, [pc, #8] ; (8015b80 <_write+0xc>) - 8015b76: 2258 movs r2, #88 ; 0x58 - 8015b78: 601a str r2, [r3, #0] - 8015b7a: f04f 30ff mov.w r0, #4294967295 - 8015b7e: 4770 bx lr - 8015b80: 20009b9c .word 0x20009b9c - -08015b84 <_exit>: - 8015b84: e7fe b.n 8015b84 <_exit> - ... - -08015b88 <_init>: - 8015b88: b5f8 push {r3, r4, r5, r6, r7, lr} - 8015b8a: bf00 nop - 8015b8c: bcf8 pop {r3, r4, r5, r6, r7} - 8015b8e: bc08 pop {r3} - 8015b90: 469e mov lr, r3 - 8015b92: 4770 bx lr - -08015b94 <_fini>: - 8015b94: b5f8 push {r3, r4, r5, r6, r7, lr} - 8015b96: bf00 nop - 8015b98: bcf8 pop {r3, r4, r5, r6, r7} - 8015b9a: bc08 pop {r3} - 8015b9c: 469e mov lr, r3 - 8015b9e: 4770 bx lr diff --git a/LWIP/App/lwip.c b/LWIP/App/lwip.c index e85b085..3b07044 100644 --- a/LWIP/App/lwip.c +++ b/LWIP/App/lwip.c @@ -28,7 +28,7 @@ #include "ethernetif.h" /* USER CODE BEGIN 0 */ - +#include "pribors.h" /* USER CODE END 0 */ /* Private function prototypes -----------------------------------------------*/ static void ethernet_link_status_updated(struct netif *netif); @@ -63,7 +63,7 @@ void MX_LWIP_Init(void) lwip_init(); /* IP addresses initialization with DHCP (IPv4) */ - ipaddr.addr = ipaddr_addr("10.1.1.69"); + ipaddr.addr = get_ip(); netmask.addr = ipaddr_addr("255.255.255.0"); gw.addr = ipaddr_addr("10.1.1.1"); diff --git a/Middlewares/Third_Party/LwIP/src/include/lwip/opt.h b/Middlewares/Third_Party/LwIP/src/include/lwip/opt.h index 82c420c..0b83594 100644 --- a/Middlewares/Third_Party/LwIP/src/include/lwip/opt.h +++ b/Middlewares/Third_Party/LwIP/src/include/lwip/opt.h @@ -294,7 +294,7 @@ * a lot of data that needs to be copied, this should be set high. */ #if !defined MEM_SIZE || defined __DOXYGEN__ -#define MEM_SIZE 1600 +#define MEM_SIZE 65535L #endif /** diff --git a/yau-07b.ioc b/yau-07b.ioc index 3d28e6c..2d7ce6b 100644 --- a/yau-07b.ioc +++ b/yau-07b.ioc @@ -36,64 +36,69 @@ Mcu.Name=STM32F429ZITx Mcu.Package=LQFP144 Mcu.Pin0=PE3 Mcu.Pin1=PE4 -Mcu.Pin10=PF5 -Mcu.Pin11=PC1 -Mcu.Pin12=PA1 -Mcu.Pin13=PA2 -Mcu.Pin14=PA7 -Mcu.Pin15=PC4 -Mcu.Pin16=PC5 -Mcu.Pin17=PF12 -Mcu.Pin18=PF13 -Mcu.Pin19=PF14 +Mcu.Pin10=PF4 +Mcu.Pin11=PF5 +Mcu.Pin12=PC1 +Mcu.Pin13=PA1 +Mcu.Pin14=PA2 +Mcu.Pin15=PA7 +Mcu.Pin16=PC4 +Mcu.Pin17=PC5 +Mcu.Pin18=PF12 +Mcu.Pin19=PF13 Mcu.Pin2=PE5 -Mcu.Pin20=PF15 -Mcu.Pin21=PG0 -Mcu.Pin22=PG1 -Mcu.Pin23=PE7 -Mcu.Pin24=PE8 -Mcu.Pin25=PE9 -Mcu.Pin26=PE10 -Mcu.Pin27=PE11 -Mcu.Pin28=PE12 -Mcu.Pin29=PE13 +Mcu.Pin20=PF14 +Mcu.Pin21=PF15 +Mcu.Pin22=PG0 +Mcu.Pin23=PG1 +Mcu.Pin24=PE7 +Mcu.Pin25=PE8 +Mcu.Pin26=PE9 +Mcu.Pin27=PE10 +Mcu.Pin28=PE11 +Mcu.Pin29=PE12 Mcu.Pin3=PE6 -Mcu.Pin30=PE14 -Mcu.Pin31=PE15 -Mcu.Pin32=PB11 -Mcu.Pin33=PB12 -Mcu.Pin34=PD8 -Mcu.Pin35=PD9 -Mcu.Pin36=PD10 -Mcu.Pin37=PD11 -Mcu.Pin38=PD12 -Mcu.Pin39=PD13 -Mcu.Pin4=PC14/OSC32_IN -Mcu.Pin40=PD14 -Mcu.Pin41=PD15 -Mcu.Pin42=PG2 -Mcu.Pin43=PG3 -Mcu.Pin44=PG4 -Mcu.Pin45=PG5 -Mcu.Pin46=PA13 -Mcu.Pin47=PA14 -Mcu.Pin48=PD0 -Mcu.Pin49=PD1 -Mcu.Pin5=PF0 -Mcu.Pin50=PD4 -Mcu.Pin51=PD5 -Mcu.Pin52=PD7 -Mcu.Pin53=PG14 -Mcu.Pin54=PE0 -Mcu.Pin55=PE1 -Mcu.Pin56=VP_LWIP_VS_Enabled -Mcu.Pin57=VP_SYS_VS_Systick -Mcu.Pin58=VP_TIM3_VS_ClockSourceINT -Mcu.Pin6=PF1 -Mcu.Pin7=PF2 -Mcu.Pin8=PF3 -Mcu.Pin9=PF4 -Mcu.PinsNb=59 +Mcu.Pin30=PE13 +Mcu.Pin31=PE14 +Mcu.Pin32=PE15 +Mcu.Pin33=PB11 +Mcu.Pin34=PB12 +Mcu.Pin35=PD8 +Mcu.Pin36=PD9 +Mcu.Pin37=PD10 +Mcu.Pin38=PD11 +Mcu.Pin39=PD12 +Mcu.Pin4=PC13 +Mcu.Pin40=PD13 +Mcu.Pin41=PD14 +Mcu.Pin42=PD15 +Mcu.Pin43=PG2 +Mcu.Pin44=PG3 +Mcu.Pin45=PG4 +Mcu.Pin46=PG5 +Mcu.Pin47=PC6 +Mcu.Pin48=PC7 +Mcu.Pin49=PC8 +Mcu.Pin5=PC14/OSC32_IN +Mcu.Pin50=PA13 +Mcu.Pin51=PA14 +Mcu.Pin52=PC12 +Mcu.Pin53=PD0 +Mcu.Pin54=PD1 +Mcu.Pin55=PD4 +Mcu.Pin56=PD5 +Mcu.Pin57=PD7 +Mcu.Pin58=PG14 +Mcu.Pin59=PE0 +Mcu.Pin6=PF0 +Mcu.Pin60=PE1 +Mcu.Pin61=VP_LWIP_VS_Enabled +Mcu.Pin62=VP_SYS_VS_Systick +Mcu.Pin63=VP_TIM3_VS_ClockSourceINT +Mcu.Pin7=PF1 +Mcu.Pin8=PF2 +Mcu.Pin9=PF3 +Mcu.PinsNb=64 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F429ZITx @@ -127,12 +132,22 @@ PB12.Mode=RMII PB12.Signal=ETH_TXD0 PC1.Mode=RMII PC1.Signal=ETH_MDC +PC12.Locked=true +PC12.Signal=GPIO_Input +PC13.Locked=true +PC13.Signal=GPIO_Input PC14/OSC32_IN.Locked=true PC14/OSC32_IN.Signal=GPIO_Output PC4.Mode=RMII PC4.Signal=ETH_RXD0 PC5.Mode=RMII PC5.Signal=ETH_RXD1 +PC6.Locked=true +PC6.Signal=GPIO_Input +PC7.Locked=true +PC7.Signal=GPIO_Input +PC8.Locked=true +PC8.Signal=GPIO_Input PD0.Signal=FMC_D2_DA2 PD1.Signal=FMC_D3_DA3 PD10.Signal=FMC_D15_DA15 @@ -209,7 +224,7 @@ ProjectManager.StackSize=0x400 ProjectManager.TargetToolchain=STM32CubeIDE ProjectManager.ToolChainLocation= ProjectManager.UnderRoot=true -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_LWIP_Init-LWIP-false-HAL-false,4-MX_FMC_Init-FMC-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_LWIP_Init-LWIP-false-HAL-false,4-MX_FMC_Init-FMC-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true RCC.48MHZClocksFreq_Value=50000000 RCC.AHBFreq_Value=100000000 RCC.APB1CLKDivider=RCC_HCLK_DIV4