From 7cb9553f73c699362e4c3c888ee65fd061aebd9c Mon Sep 17 00:00:00 2001 From: pvvx Date: Thu, 7 Sep 2017 02:26:00 +0300 Subject: [PATCH] update -Wall -Werror --- README.md | 3 +- .../component/common/api/lwip_netconf.c | 6 + .../component/common/api/platform/esp_comp.h | 44 +- .../common/api/platform/platform_stdlib.h | 29 +- .../component/common/api/wifi/wifi_conf.c | 31 +- .../component/common/api/wifi/wifi_ind.c | 2 +- .../component/common/api/wifi/wifi_promisc.c | 7 +- .../component/common/api/wifi/wifi_util.c | 12 +- RTL00_SDKV35a/component/common/api/wifi_api.c | 60 +- RTL00_SDKV35a/component/common/api/wifi_api.h | 14 +- .../component/common/api/wifi_api_scan.c | 5 +- .../drivers/sdio/realtek/sdio_host/src/sd.c | 2 +- .../sdio/realtek/sdio_host/src/sdio_host.c | 2 +- .../wlan/realtek/include/hal_com_reg.h | 8 +- .../wlan/realtek/src/osdep/lwip_intf.c | 6 +- .../file_system/fatfs/disk_if/inc/sdcard.h | 2 +- .../component/common/mbed/common/wait_api.c | 2 + .../component/common/mbed/hal/gpio_irq_api.h | 4 +- .../component/common/mbed/hal_ext/dma_api.h | 4 +- .../common/mbed/hal_ext/gpio_irq_ex_api.h | 4 +- .../mbed/targets/hal/rtl8195a/analogin_api.c | 6 +- .../mbed/targets/hal/rtl8195a/flash_api.c | 2 + .../mbed/targets/hal/rtl8195a/flash_eep.c | 4 +- .../mbed/targets/hal/rtl8195a/i2c_api.c | 12 +- .../mbed/targets/hal/rtl8195a/log_uart_api.c | 12 +- .../mbed/targets/hal/rtl8195a/pwmout_api.c | 2 + .../mbed/targets/hal/rtl8195a/serial_api.c | 8 +- .../mbed/targets/hal/rtl8195a/spi_api.c | 6 +- .../mbed/targets/hal/rtl8195a/sys_api.c | 7 +- .../component/common/network/dhcp/dhcps.h | 4 +- .../port/realtek/freertos/ethernetif.c | 9 +- .../network/lwip/lwip_v1.4.1/src/api/err.c | 2 +- .../lwip/lwip_v1.4.1/src/api/sockets.c | 14 +- .../network/lwip/lwip_v1.4.1/src/api/tcpip.c | 4 +- .../network/lwip/lwip_v1.4.1/src/core/dhcp.c | 2 +- .../lwip/lwip_v1.4.1/src/core/ipv4/icmp.c | 4 +- .../lwip/lwip_v1.4.1/src/core/ipv4/igmp.c | 2 +- .../lwip/lwip_v1.4.1/src/core/ipv4/ip.c | 5 +- .../network/lwip/lwip_v1.4.1/src/core/memp.c | 2 +- .../network/lwip/lwip_v1.4.1/src/core/stats.c | 2 +- .../lwip/lwip_v1.4.1/src/netif/etharp.c | 2 +- .../common/network/netbios/netbios.c | 5 +- .../common/network/netbios/netbios.h | 7 +- .../component/common/network/sntp/sntp.c | 2 +- .../component/os/freertos/cmsis_os.c | 10 +- .../component/os/freertos/freertos_pmu.c | 17 +- .../component/os/freertos/freertos_service.h | 2 +- .../freertos_v9.0.0/Source/include/portable.h | 2 +- .../Source/portable/GCC/ARM_CM3/port.c | 1 + .../Source/portable/MemMang/heap_5.c | 5 +- .../freertos/freertos_v9.0.0/Source/tasks.c | 1 + .../component/os/os_dep/device_lock.c | 3 +- .../component/os/os_dep/include/os_support.h | 5 +- RTL00_SDKV35a/component/os/os_dep/tcm_heap.c | 4 +- .../soc/realtek/8195a/fwlib/bitband_io.h | 39 +- .../soc/realtek/8195a/fwlib/hal_diag.h | 4 +- .../8195a/fwlib/ram_lib/rtl_bios_data.c | 2 +- .../realtek/8195a/fwlib/ram_lib/rtl_boot.c | 18 +- .../soc/realtek/8195a/fwlib/ram_lib/startup.c | 11 +- .../fwlib/rtl8195a/src/rtl8195a_sdio_host.c | 1313 ++--- .../8195a/fwlib/rtl8195a/src/rtl8195a_ssi.c | 10 +- .../8195a/fwlib/rtl8195a/src/rtl8195a_uart.c | 24 +- .../soc/realtek/8195a/fwlib/src/bitband_io.c | 72 +- .../soc/realtek/8195a/fwlib/src/hal_adc.c | 8 +- .../soc/realtek/8195a/fwlib/src/hal_misc.c | 2 +- .../8195a/fwlib/src/hal_sdr_controller.c | 21 +- .../8195a/fwlib/src/hal_soc_ps_monitor.c | 77 +- .../soc/realtek/8195a/fwlib/src/hal_ssi.c | 2 +- .../soc/realtek/8195a/fwlib/src/hal_uart.c | 4 +- .../8195a/misc/driver/rtl_console_new.c | 24 +- .../misc/rtl_std_lib/include/rt_lib_rom.h | 16 + .../misc/rtl_std_lib/lib_rtlstd/c_stdio.c | 13 +- .../misc/rtl_std_lib/lib_rtlstd/ram_libc.c | 1 - .../lib_rtlstd/ram_libgloss_retarget.c | 2 +- .../rtl_std_lib/lib_rtlstd/ram_pvvx_libc.c | 38 +- .../lib_rtlstd/rtl_eabi_cast_ram.c | 1 + .../rtl_std_lib/lib_rtlstd/rtl_math_ram.c | 5 +- RTL00_SDKV35a/sdkset.mk | 23 +- build/bin/ota.bin | Bin 297704 -> 297764 bytes build/bin/ram_2.bin | Bin 297668 -> 297728 bytes build/bin/ram_2.ns.bin | Bin 297684 -> 297744 bytes build/bin/ram_2.p.bin | Bin 297684 -> 297744 bytes build/bin/ram_all.bin | Bin 342756 -> 342816 bytes build/obj/build.nmap | 4718 ++++++++--------- project/inc/FreeRTOSConfig.h | 19 +- project/inc/feep_config.h | 4 +- project/inc/lwipopts.h | 2 + project/inc/mad/config.h | 2 + project/inc/mad/frame.h | 4 +- project/inc/mad/mad.h | 2 +- project/inc/mad/stream.h | 2 +- project/inc/platform_autoconf.h | 11 +- project/inc/platform_opts.h | 18 +- project/inc/rtl8195a/esp_comp.h | 114 - project/inc/rtl8195a/rtl_libc.h | 4 +- project/inc/wifi_user_set.h | 6 +- project/src/driver/i2s_freertos.c | 8 +- project/src/mad/synth.c | 36 +- project/src/user/atcmd_user.c | 5 +- project/src/user/main.c | 28 +- project/src/user/wifi_console.c | 51 +- userset.mk | 4 +- 102 files changed, 3686 insertions(+), 3504 deletions(-) delete mode 100644 project/inc/rtl8195a/esp_comp.h diff --git a/README.md b/README.md index c13ecdd..e284345 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,8 @@ Module RTL00(RTL8710AF), [F11AMIM13](http://fn-link.en.made-in-china.com/product [PADI](https://www.pine64.org/?page_id=946) (RTL8710AF), [F10AFIM13-B1](http://en.ofeixin.com/products_detail/productId=65.html) (RTL8710AF), [TinyCon2005-A-BE](http://www.ralinwi.com/product.aspx?info_lb=54&flag=1) (RTL8711AF),
[WFM-400](http://www.rayson.com/rayson/en/?pros=product&pros=product&b_cat_id=A03&m_cat_id=A0304&s_cat_id=A030401&prod_id=P0113&level=3) (RTL8711AM), [WFM-410](http://www.rayson.com/rayson/en/?pros=product&pros=product&b_cat_id=A03&m_cat_id=A0304&s_cat_id=A030401&prod_id=P0114&level=3) (RTL8711AF), [WFM-250](http://www.rayson.com/rayson/en/?pros=product&pros=product&b_cat_id=A03&m_cat_id=A0304&s_cat_id=A030401&prod_id=P0112&level=3) (RTL8195AM),
[AW-CU238, AW-CU239](https://www.buyiot.net/pd-1) (RTL8711AM), [AW-CU245, AW-CU245, AW-CU245](https://www.buyiot.net/home-1) (RTL8711AM/RTL8195AM/RTL8711AF),
-[WG6611](http://www.jorjin.com/product.php?id=98) (RTL8711AM), [RAK473](http://www.rakwireless.com/en/download/RAK473/Firmware%20Upgrade) (RTL8711AM), [RAK474, RAK476](http://www.rakwireless.com/en/download/RAK473/Firmware%20Upgrade) (RTL8711AF), ...
+[WG6611](http://www.jorjin.com/product.php?id=98) (RTL8711AM), [RAK473](http://www.rakwireless.com/en/download/RAK473/Firmware%20Upgrade) (RTL8711AM), [RAK474, RAK476](http://www.rakwireless.com/en/download/RAK473/Firmware%20Upgrade) (RTL8711AF), [6110R-IF](http://en.ofeixin.com/products_detail/productId=65.html) (RTL8710AF),
+[MJIOT-AMB-01](http://www.nb-iot-tech.com/mjiot-amb-01-en.html) (RTL8710AF), [MJIOT-AMB-02](http://www.nb-iot-tech.com/mjiot-amb-02-en.html) (RTL8195AM), ...
RTL00 module (RTL8710AF)
diff --git a/RTL00_SDKV35a/component/common/api/lwip_netconf.c b/RTL00_SDKV35a/component/common/api/lwip_netconf.c index 903bd59..627603c 100644 --- a/RTL00_SDKV35a/component/common/api/lwip_netconf.c +++ b/RTL00_SDKV35a/component/common/api/lwip_netconf.c @@ -184,7 +184,9 @@ uint8_t LwIP_DHCP(uint8_t idx, uint8_t dhcp_state) { struct ip_addr netmask; struct ip_addr gw; uint32_t IPaddress; +#if CONFIG_DEBUG_LOG > 2 uint8_t iptab[4]; +#endif uint8_t DHCP_state; int mscnt = 0; struct netif *pnetif = NULL; @@ -228,12 +230,14 @@ uint8_t LwIP_DHCP(uint8_t idx, uint8_t dhcp_state) { /* Stop DHCP */ // dhcp_stop(pnetif); /* can not stop, need to renew, Robbie*/ +#if CONFIG_DEBUG_LOG > 2 iptab[0] = (uint8_t) (IPaddress >> 24); iptab[1] = (uint8_t) (IPaddress >> 16); iptab[2] = (uint8_t) (IPaddress >> 8); iptab[3] = (uint8_t) (IPaddress); info_printf("Interface %d IP address: %d.%d.%d.%d\n", idx, iptab[3], iptab[2], iptab[1], iptab[0]); +#endif #if CONFIG_WLAN error_flag = RTW_NO_ERROR; #endif @@ -251,6 +255,7 @@ uint8_t LwIP_DHCP(uint8_t idx, uint8_t dhcp_state) { IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, NETMASK_ADDR3); IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); netif_set_addr(pnetif, &ipaddr, &netmask, &gw); +#if CONFIG_DEBUG_LOG > 2 iptab[0] = IP_ADDR3; iptab[1] = IP_ADDR2; @@ -258,6 +263,7 @@ uint8_t LwIP_DHCP(uint8_t idx, uint8_t dhcp_state) { iptab[3] = IP_ADDR0; info_printf("Interface %d DHCP timeout\n", idx); info_printf("Static IP address: %d.%d.%d.%d\n", iptab[3], iptab[2], iptab[1], iptab[0]); +#endif #if CONFIG_WLAN error_flag = RTW_DHCP_FAIL; #endif diff --git a/RTL00_SDKV35a/component/common/api/platform/esp_comp.h b/RTL00_SDKV35a/component/common/api/platform/esp_comp.h index e89795c..fbb1263 100644 --- a/RTL00_SDKV35a/component/common/api/platform/esp_comp.h +++ b/RTL00_SDKV35a/component/common/api/platform/esp_comp.h @@ -9,22 +9,30 @@ #define DATA_IRAM_ATTR #define ICACHE_RAM_ATTR -#define os_printf(...) rtl_printf(__VA_ARGS__) -#define os_printf_plus(...) rtl_printf(__VA_ARGS__) -#define os_sprintf_fd(...) rtl_sprintf(__VA_ARGS__) -#define ets_sprintf(...) rtl_sprintf(__VA_ARGS__) -#ifndef os_malloc -#define os_malloc pvPortMalloc -#define os_zalloc pvPortZalloc -#define os_calloc pvPortCalloc -#define os_realloc pvPortRealloc -#endif -#undef os_free -#define os_free vPortFree -#define system_get_free_heap_size xPortGetFreeHeapSize -#undef os_realloc -#define os_realloc pvPortReAlloc +#define os_printf rtl_printf +#define os_printf_plus rtl_printf +#define os_sprintf_fd rtl_sprintf +#define ets_sprintf rtl_sprintf + +//#ifndef os_malloc +#undef os_malloc +extern void *pvPortMalloc(size_t xWantedSize); +#define os_malloc pvPortMalloc +#undef os_zalloc +extern void *pvPortZalloc(size_t xWantedSize); +#define os_zalloc pvPortZalloc +//#undef os_calloc +//#define os_calloc pvPortCalloc +#undef os_realloc +extern void *pvPortReAlloc(void *pv, size_t xWantedSize); +#define os_realloc pvPortReAlloc +#undef os_free +extern void vPortFree(void *pv); +#define os_free vPortFree +//#endif +extern size_t xPortGetFreeHeapSize(void); +#define system_get_free_heap_size xPortGetFreeHeapSize #define os_bzero rtl_bzero #define os_delay_us wait_us // HalDelayUs @@ -104,22 +112,28 @@ extern SpiFlashChip * flashchip; // in RAM-BIOS: 0x3fffc714 #define spi_flash_read(faddr, pbuf, size) flash_stream_read(&flashobj, faddr, size, (uint8_t *)pbuf) #define spi_flash_erase_block(blk) flash_erase_block(&flashobj, (blk)<<16); +#ifndef ip4_addr1 #define ip4_addr1(ipaddr) (((u8_t*)(ipaddr))[0]) #define ip4_addr2(ipaddr) (((u8_t*)(ipaddr))[1]) #define ip4_addr3(ipaddr) (((u8_t*)(ipaddr))[2]) #define ip4_addr4(ipaddr) (((u8_t*)(ipaddr))[3]) +#endif /* These are cast to u16_t, with the intent that they are often arguments * to printf using the U16_F format from cc.h. */ +#ifndef ip4_addr1_16 #define ip4_addr1_16(ipaddr) ((u16_t)ip4_addr1(ipaddr)) #define ip4_addr2_16(ipaddr) ((u16_t)ip4_addr2(ipaddr)) #define ip4_addr3_16(ipaddr) ((u16_t)ip4_addr3(ipaddr)) #define ip4_addr4_16(ipaddr) ((u16_t)ip4_addr4(ipaddr)) +#endif +#undef IP2STR #define IP2STR(ipaddr) ip4_addr1_16(ipaddr), \ ip4_addr2_16(ipaddr), \ ip4_addr3_16(ipaddr), \ ip4_addr4_16(ipaddr) +#undef IPSTR #define IPSTR "%d.%d.%d.%d" #ifndef MAC2STR diff --git a/RTL00_SDKV35a/component/common/api/platform/platform_stdlib.h b/RTL00_SDKV35a/component/common/api/platform/platform_stdlib.h index f115524..7a7f0fd 100644 --- a/RTL00_SDKV35a/component/common/api/platform/platform_stdlib.h +++ b/RTL00_SDKV35a/component/common/api/platform/platform_stdlib.h @@ -95,11 +95,11 @@ #define memset rtl_memset #define strcat rtl_strcat #define strchr rtl_strchr - #define strcmp(s1, s2) rtl_strcmp((const char *)s1, (const char *)s2) + #define strcmp rtl_strcmp #define strcpy rtl_strcpy - #define strlen(str) rtl_strlen((const char *)str) + #define strlen rtl_strlen #define strncat rtl_strncat - #define strncmp(s1, s2, n) rtl_strncmp((const char *)s1, (const char *)s2, n) + #define strncmp rtl_strncmp #define strncpy rtl_strncpy #define strstr rtl_strstr #define strsep rtl_strsep @@ -157,13 +157,22 @@ // // memory management // -#ifndef CONFIG_MBED_ENABLED -extern void *pvPortMalloc( size_t xWantedSize ); -extern void vPortFree( void *pv ); -#define malloc pvPortMalloc -#define zalloc pvPortZalloc -#define free vPortFree -#endif +#undef malloc +extern void *pvPortMalloc(size_t xWantedSize); +#define malloc pvPortMalloc + +#undef zalloc +extern void *pvPortZalloc(size_t xWantedSize); +#define zalloc pvPortZalloc + +#undef realloc +extern void *pvPortReAlloc(void *pv, size_t xWantedSize); +#define realloc pvPortReAlloc + +#undef free +extern void vPortFree(void *pv); +#define free vPortFree + #elif defined (CONFIG_PLATFORM_8711B) #if defined (__IARSTDLIB__) diff --git a/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.c b/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.c index f28327f..6f76970 100644 --- a/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.c +++ b/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.c @@ -16,6 +16,8 @@ #endif #include #include +#include "dhcp.h" +#include "dhcp/dhcps.h" #if CONFIG_EXAMPLE_WLAN_FAST_CONNECT #include "wlan_fast_connect/example_wlan_fast_connect.h" @@ -157,6 +159,9 @@ extern unsigned char dhcp_mode_sta; #include "freertos/wrapper.h" #include "skbuff.h" +extern int is_promisc_enabled(); +extern int promisc_set(rtw_rcr_level_t enabled, void (*callback)(u8 *, unsigned int, void *), int len_used); + //------------------------------------------------------------------------end-patch// static int wifi_connect_local(rtw_network_info_t *pWifi) { int ret = 0; @@ -278,8 +283,8 @@ static void wifi_disconn_hdl(char* buf, int buf_len, int flags, void* userdata) else if (rtw_join_status == 0) error_flag = RTW_CONNECT_FAIL; - else if (rtw_join_status == JOIN_COMPLETE | JOIN_SECURITY_COMPLETE - | JOIN_ASSOCIATED | JOIN_AUTHENTICATED | JOIN_LINK_READY) + else if (rtw_join_status == (JOIN_COMPLETE | JOIN_SECURITY_COMPLETE + | JOIN_ASSOCIATED | JOIN_AUTHENTICATED | JOIN_LINK_READY)) error_flag = RTW_WRONG_PASSWORD; } @@ -368,6 +373,7 @@ void restore_wifi_info_to_flash() { #endif +extern int wext_set_bssid(const char *ifname, const __u8 *bssid); //----------------------------------------------------------------------------// int wifi_connect( unsigned char bssid[ETH_ALEN], @@ -380,7 +386,7 @@ int wifi_connect( int ssid_len = 0; int password_len = 0; - int bssid_len = 6; +// int bssid_len = 6; xSemaphoreHandle join_semaphore; rtw_result_t result = RTW_SUCCESS; u8 wep_hex = 0; @@ -440,7 +446,7 @@ int wifi_connect( if (password_len == 10) { - u32 g[5] = { 0 }; + unsigned int g[5] = { 0 }; u8 i = 0; sscanf((const char*) password, "%02x%02x%02x%02x%02x", &g[0], &g[1], &g[2], &g[3], &g[4]); @@ -450,7 +456,7 @@ int wifi_connect( password_len = 5; wep_hex = 1; } else if (password_len == 26) { - u32 g[13] = { 0 }; + unsigned int g[13] = { 0 }; u8 i = 0; sscanf((const char*) password, "%02x%02x%02x%02x%02x%02x%02x" "%02x%02x%02x%02x%02x%02x", &g[0], &g[1], &g[2], &g[3], @@ -731,6 +737,8 @@ int wifi_get_ap_info(rtw_bss_info_t * ap_info, rtw_security_t* security) { return ret; } +extern int wext_get_drv_ability(const char *ifname, uint32_t *ability); + int wifi_get_drv_ability(uint32_t *ability) { return wext_get_drv_ability(WLAN0_NAME, ability); } @@ -948,6 +956,8 @@ int wifi_get_last_error(void) { int wpas_wps_init(const char* ifname); #endif +extern int set_hidden_ssid(const char *ifname, uint8_t value); + int wifi_start_ap(char *ssid, rtw_security_t security_type, char *password, int channel, char ssid_hidden) { const char *ifname = WLAN0_NAME; int ssid_len = 0; @@ -1543,10 +1553,8 @@ int wifi_restart_ap(unsigned char *ssid, rtw_security_t security_type, printf("AP: security_type=%d\n", setting.security_type); printf("AP: password=%s\n", (char* )setting.password); printf("AP: key_idx =%d\n", setting.key_idx); - ret = wifi_connect((char*) setting.ssid, setting.security_type, - (char*) setting.password, strlen((char* )setting.ssid), - strlen((char* )setting.password), setting.key_idx, - NULL); + ret = wifi_connect(NULL, 0 , (char*) setting.ssid, setting.security_type, + (char*) setting.password, setting.key_idx, NULL); if (ret == RTW_SUCCESS) { #if CONFIG_DHCP_CLIENT /* Start DHCPClient */ @@ -1726,6 +1734,9 @@ int wifi_remove_packet_filter(unsigned char filter_id) { #endif #ifdef CONFIG_AP_MODE +extern int wext_enable_forwarding(const char *ifname); +extern int wext_disable_forwarding(const char *ifname); + int wifi_enable_forwarding(void) { return wext_enable_forwarding(WLAN0_NAME); } @@ -1739,6 +1750,8 @@ int wifi_disable_forwarding(void) { * usage: wifi_set_ch_deauth(0) -> wlan0 wifi_connect -> wifi_set_ch_deauth(1) */ #ifdef CONFIG_CONCURRENT_MODE +extern int wext_set_ch_deauth(const char *ifname, __u8 enable); + int wifi_set_ch_deauth(__u8 enable) { return wext_set_ch_deauth(WLAN1_NAME, enable); } diff --git a/RTL00_SDKV35a/component/common/api/wifi/wifi_ind.c b/RTL00_SDKV35a/component/common/api/wifi/wifi_ind.c index 791ea38..97b6d9c 100644 --- a/RTL00_SDKV35a/component/common/api/wifi/wifi_ind.c +++ b/RTL00_SDKV35a/component/common/api/wifi/wifi_ind.c @@ -102,7 +102,7 @@ void wifi_indication(WIFI_EVENT_INDICATE event, unsigned char *buf, int buf_len, // , and tries not to share the same stack with wlan driver if remaining stack space is // not available for the following operations. // ex: using semaphore to notice another thread. - switch (event) { + switch ((int)event) { case WIFI_EVENT_DISCONNECT: #if(WIFI_INDICATE_MSG>0) info_printf("%s(%d): Disconnection indication received\n", __func__, event); diff --git a/RTL00_SDKV35a/component/common/api/wifi/wifi_promisc.c b/RTL00_SDKV35a/component/common/api/wifi/wifi_promisc.c index 38d858d..b803e61 100644 --- a/RTL00_SDKV35a/component/common/api/wifi/wifi_promisc.c +++ b/RTL00_SDKV35a/component/common/api/wifi/wifi_promisc.c @@ -19,9 +19,8 @@ extern void _promisc_deinit(_adapter *padapter); extern int _promisc_recv_func(_adapter *padapter, recv_frame *rframe); extern int _promisc_set(rtw_rcr_level_t enabled, void (*callback)(unsigned char *, unsigned int, void *), unsigned char len_used); -extern unsigned char is_promisc_enabled(void); -extern int promisc_get_fixed_channel(void *fixed_bssid, unsigned char *ssid, int *ssid_length); -extern unsigned char is_promisc_enabled(void); +extern unsigned char _is_promisc_enabled(void); +extern int _promisc_get_fixed_channel(void *fixed_bssid, unsigned char *ssid, int *ssid_length); #endif @@ -111,7 +110,7 @@ static struct eth_buffer eth_buffer; #ifdef CONFIG_PROMISC #define MAX_PACKET_FILTER_INFO 5 #define FILTER_ID_INIT_VALUE 10 -rtw_packet_filter_info_t paff_array[MAX_PACKET_FILTER_INFO]={0, 0, 0, 0, 0}; +rtw_packet_filter_info_t paff_array[MAX_PACKET_FILTER_INFO]; // ={0, 0, 0, 0, 0}; static u8 packet_filter_enable_num = 0; void promisc_init_packet_filter() diff --git a/RTL00_SDKV35a/component/common/api/wifi/wifi_util.c b/RTL00_SDKV35a/component/common/api/wifi/wifi_util.c index 00b860a..e5b72a7 100644 --- a/RTL00_SDKV35a/component/common/api/wifi/wifi_util.c +++ b/RTL00_SDKV35a/component/common/api/wifi/wifi_util.c @@ -209,7 +209,7 @@ int wext_get_passphrase(const char *ifname, __u8 *passphrase) { rtw_result_t ret = RTW_ERROR; if(pdev) { uint16 len[4]; - ret = rtw_wx_get_passphrase(pdev, 0, &len, passphrase); + ret = rtw_wx_get_passphrase(pdev, 0,(union iwreq_data *) &len, passphrase); if(ret == RTW_SUCCESS) passphrase[len[2]] = '\0'; debug_printf("pas[%d]-<%s>\n", len[2], passphrase); } @@ -404,7 +404,6 @@ int wext_get_lps_dtim(const char *ifname, __u8 *lps_dtim) { int wext_set_tos_value(const char *ifname, __u8 *tos_value) { struct iwreq iwr; - int ret = -1; __u8 para[sizeof("set_tos_value") + 4]; int cmd_len = sizeof("set_tos_value"); memset(&iwr, 0, sizeof(iwr)); @@ -562,6 +561,8 @@ int wext_get_mode(const char *ifname, int *mode) { #endif } +extern int rtw_wx_set_ap_essid(struct net_device *dev, struct iw_request_info *a, union iwreq_data *wrqu, char *extra); + int wext_set_ap_ssid(const char *ifname, const __u8 *ssid, __u16 ssid_len) { #ifdef USE_WIFI_ADAPTER struct net_device * pdev = rltk_wlan_info[0].dev; @@ -572,7 +573,7 @@ int wext_set_ap_ssid(const char *ifname, const __u8 *ssid, __u16 ssid_len) { uint16 len[2]; len[0] = ssid_len; len[1] = (ssid_len != 0); - ret = rtw_wx_set_ap_essid(pdev, 0, &len, ssid); + ret = rtw_wx_set_ap_essid(pdev, 0, (union iwreq_data *) &len, (char *)ssid); } return ret; #else @@ -751,7 +752,7 @@ int wext_private_command_with_retval(const char *ifname, char *cmd, iwr.u.data.length = buf_size; iwr.u.data.flags = 0; ret = iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); - if (ret >= 0 & ret_buf != NULL) { + if (ret >= 0 && ret_buf != NULL) { if (ret_len > iwr.u.data.length) ret_len = iwr.u.data.length; memcpy(ret_buf, (char *) iwr.u.data.pointer, ret_len); @@ -923,7 +924,6 @@ int wext_set_gen_ie(const char *ifname, char *buf, __u16 buf_len, __u16 flags) { int wext_set_autoreconnect(const char *ifname, __u8 mode, __u8 retyr_times, __u16 timeout) { struct iwreq iwr; - int ret = 0; __u8 para[sizeof("SetAutoRecnt") + 4]; int cmd_len = sizeof("SetAutoRecnt"); memset(&iwr, 0, sizeof(iwr)); @@ -1017,7 +1017,7 @@ int wext_update_custom_ie(const char *ifname, void * cus_ie, int ie_index) { #endif } else { memset(&iwr, 0, sizeof(iwr)); - cmd_len = para = pvPortMalloc((4) * 2 + cmd_len); //size:addr len+cmd_len + para = pvPortMalloc((4) * 2 + cmd_len); //size:addr len+cmd_len if (para != NULL) { //Cmd snprintf(para, cmd_len, "UpdateIE"); diff --git a/RTL00_SDKV35a/component/common/api/wifi_api.c b/RTL00_SDKV35a/component/common/api/wifi_api.c index dbcbba7..40afa5f 100644 --- a/RTL00_SDKV35a/component/common/api/wifi_api.c +++ b/RTL00_SDKV35a/component/common/api/wifi_api.c @@ -91,7 +91,7 @@ STATION_CONFIG wifi_st_cfg = { .ssid = DEF_ST_SSID, .password = DEF_ST_PASSWORD, .bssid = DEF_ST_BSSID, - .flg = DEF_ST_BSSID, + .flg = DEF_ST_USE_BSSID, .security = DEF_ST_SECURITY, .autoreconnect = DEF_ST_AUTORECONNECT, .reconnect_pause = DEF_ST_RECONNECT_PAUSE, @@ -204,8 +204,8 @@ LOCAL int wlan_init_done_callback(void) { //char wlan_st_name[] = WLAN0_NAME; char wlan_st_name[] = WLAN0_NAME; char wlan_ap_name[] = WLAN1_NAME; -char wlan_st_netifn = 0; -char wlan_ap_netifn = 1; +unsigned char wlan_st_netifn = 0; +unsigned char wlan_ap_netifn = 1; uint32 get_new_ip(void) @@ -256,7 +256,7 @@ extern Rltk_wlan_t rltk_wlan_info[2]; // in wrapper.h };*/ #define get_padapter(num) (*(_adapter **)((rltk_wlan_info[num].dev)->priv)); -LOCAL rtw_result_t _wext_set_lps_dtim(int adapter_num, uint8 lps_dtim ) { +rtw_result_t _wext_set_lps_dtim(int adapter_num, uint8 lps_dtim ) { _adapter * pad = get_padapter(adapter_num); rtw_result_t ret = RTW_ERROR; if(pad) { @@ -265,7 +265,7 @@ LOCAL rtw_result_t _wext_set_lps_dtim(int adapter_num, uint8 lps_dtim ) { return ret; } -LOCAL rtw_result_t _wext_enable_powersave(int adapter_num, uint8 ips_mode, uint8 lps_mode) { +rtw_result_t _wext_enable_powersave(int adapter_num, uint8 ips_mode, uint8 lps_mode) { _adapter * pad = get_padapter(adapter_num); rtw_result_t ret = RTW_ERROR; if(pad) { @@ -278,7 +278,7 @@ LOCAL rtw_result_t _wext_enable_powersave(int adapter_num, uint8 ips_mode, uint8 return ret; } -LOCAL int _wext_cmp_ssid(int adapter_num, uint8 *ssid) +LOCAL int _wext_cmp_ssid(int adapter_num, unsigned char *ssid) { _adapter * pad = get_padapter(adapter_num); int ret = 0; @@ -357,7 +357,7 @@ LOCAL rtw_result_t wifi_run_ap(void) { int timeout = wifi_test_timeout_ms / wifi_test_timeout_step_ms; while (1) { #if 1 - if (_wext_cmp_ssid(WLAN_AP_NETIF_NUM, &wifi_ap_cfg.ssid )) { + if (_wext_cmp_ssid(WLAN_AP_NETIF_NUM, wifi_ap_cfg.ssid )) { #else char essid[33]; if ((wext_get_ssid(wlan_ap_name, (unsigned char *) essid) > 0) @@ -404,7 +404,7 @@ LOCAL rtw_result_t StartStDHCPClient(void) debug_printf("Start DHCPClient...\n"); int ret = RTW_SUCCESS; struct netif * pnetif = &xnetif[WLAN_ST_NETIF_NUM]; - DHCP_CONFIG *p = (dhcp_cfg *)&wifi_st_dhcp; + DHCP_CONFIG *p = (DHCP_CONFIG *)&wifi_st_dhcp; unsigned char mode = p->mode; if(mode == 2 && p->ip != IP4ADDR(255,255,255,255) && p->ip != IP4ADDR(0,0,0,0)) { // fixed ip netif_set_addr(pnetif, (ip_addr_t *)&p->ip, (ip_addr_t *)&p->mask, (ip_addr_t *)&p->gw); @@ -597,8 +597,8 @@ LOCAL void _LwIP_Init(void) xnetif[idx].name[0] = 'r'; xnetif[idx].name[1] = '0' + idx; } - netif_add(&xnetif[WLAN_ST_NETIF_NUM], (struct netif *)&wifi_st_dhcp.ip, (struct netif *)&wifi_st_dhcp.mask, (struct netif *)&wifi_st_dhcp.gw, NULL, ðernetif_init, &tcpip_input); - netif_add(&xnetif[WLAN_AP_NETIF_NUM], (struct netif *)&wifi_ap_dhcp.ip, (struct netif *)&wifi_ap_dhcp.mask, (struct netif *)&wifi_ap_dhcp.gw, NULL, ðernetif_init, &tcpip_input); + netif_add(&xnetif[WLAN_ST_NETIF_NUM], (ip_addr_t *)&wifi_st_dhcp.ip, (ip_addr_t *)&wifi_st_dhcp.mask, (ip_addr_t *)&wifi_st_dhcp.gw, NULL, ðernetif_init, &tcpip_input); + netif_add(&xnetif[WLAN_AP_NETIF_NUM], (ip_addr_t *)&wifi_ap_dhcp.ip, (ip_addr_t *)&wifi_ap_dhcp.mask, (ip_addr_t *)&wifi_ap_dhcp.gw, NULL, ðernetif_init, &tcpip_input); #if CONFIG_ETHERNET // && NET_IF_NUM > 2 { struct ip_addr ipaddr; @@ -623,6 +623,9 @@ LOCAL void _LwIP_Init(void) } } +extern int rltk_set_tx_power_percentage(rtw_tx_pwr_percentage_t power_percentage_idx); + + int wifi_run(rtw_mode_t mode) { int ret = 0; #if CONFIG_DEBUG_LOG > 4 @@ -663,8 +666,8 @@ int wifi_run(rtw_mode_t mode) { netbios_set_name(WLAN_ST_NETIF_NUM, lwip_host_name[0]); #endif #endif - netif_set_addr(&xnetif[WLAN_ST_NETIF_NUM], &wifi_st_dhcp.ip, - &wifi_st_dhcp.mask, &wifi_st_dhcp.gw); + netif_set_addr(&xnetif[WLAN_ST_NETIF_NUM], (ip_addr_t *) &wifi_st_dhcp.ip, + (ip_addr_t *) &wifi_st_dhcp.mask, (ip_addr_t *) &wifi_st_dhcp.gw); pnif = &xnetif[WLAN_AP_NETIF_NUM]; #if LWIP_NETIF_HOSTNAME // @todo ethernetif_init()... @@ -673,8 +676,8 @@ int wifi_run(rtw_mode_t mode) { netbios_set_name(WLAN_AP_NETIF_NUM, lwip_host_name[1]); #endif #endif - netif_set_addr(&xnetif[WLAN_AP_NETIF_NUM], &wifi_ap_dhcp.ip, - &wifi_ap_dhcp.mask, &wifi_ap_dhcp.gw); + netif_set_addr(&xnetif[WLAN_AP_NETIF_NUM], (ip_addr_t *) &wifi_ap_dhcp.ip, + (ip_addr_t *) &wifi_ap_dhcp.mask, (ip_addr_t *) &wifi_ap_dhcp.gw); } switch(mode) { @@ -856,3 +859,32 @@ void show_wifi_cfg(void) { printf("\tSave flags: %p\n", wifi_cfg.save_flg); } +#if SDK_VER_NUM >= 0x4000 +extern int wext_get_associated_client_list(const char *ifname, void * client_list_buffer, __u16 buffer_length); + +int show_wifi_ap_clients(void) { + if((wifi_mode == RTW_MODE_AP) || (wifi_mode == RTW_MODE_STA_AP)) { + struct { + int count; + rtw_mac_t mac_list[AP_STA_NUM]; + } client_info; + client_info.count = AP_STA_NUM; + if(wext_get_associated_client_list(wlan_ap_name, &client_info, sizeof(client_info)) >= 0) { + if(client_info.count) { + printf("\tAP %u clients:\n", client_info.count); + int client_idx = 0; + while(client_idx++ < client_info.count) { + unsigned char *pmac = client_info.mac_list[client_idx].octet; + printf("\tsta[%u]: %02x:%02x:%02x:%02x:%02x:%02x\n", client_idx, + pmac[0],pmac[1],pmac[2],pmac[3],pmac[4],pmac[5]); + } + } else { + printf("\tAP clients none\n"); + } + return client_info.count; + }; + }; + printf("Get AP clients error!\n"); + return -1; +} +#endif diff --git a/RTL00_SDKV35a/component/common/api/wifi_api.h b/RTL00_SDKV35a/component/common/api/wifi_api.h index 156ac93..64e69e4 100644 --- a/RTL00_SDKV35a/component/common/api/wifi_api.h +++ b/RTL00_SDKV35a/component/common/api/wifi_api.h @@ -10,10 +10,12 @@ #include "wifi_constants.h" #include "queue.h" +#ifndef ip4_addr1 #define ip4_addr1(ipaddr) (((uint8_t*)(ipaddr))[0]) #define ip4_addr2(ipaddr) (((uint8_t*)(ipaddr))[1]) #define ip4_addr3(ipaddr) (((uint8_t*)(ipaddr))[2]) #define ip4_addr4(ipaddr) (((uint8_t*)(ipaddr))[3]) +#endif #define IPSTR "%d.%d.%d.%d" @@ -118,8 +120,8 @@ extern unsigned char wifi_mode; // rtw_mode_t extern unsigned char wifi_st_status; // WIFI_STA_ENUM extern char wlan_st_name[]; extern char wlan_ap_name[]; -extern char wlan_st_netifn; -extern char wlan_ap_netifn; +extern unsigned char wlan_st_netifn; +extern unsigned char wlan_ap_netifn; /* WiFi Station & scan security */ typedef enum { @@ -152,6 +154,9 @@ void show_wifi_st_ip(void); void show_wifi_cfg(void); void show_wifi_st_cfg(void); void show_wifi_ap_cfg(void); +#if SDK_VER_NUM >= 0x4000 +int show_wifi_ap_clients(void); +#endif uint32 read_wifi_cfg(uint32 flg); uint32 write_wifi_cfg(uint32 flg); int wifi_run(rtw_mode_t mode); @@ -185,4 +190,9 @@ rtw_result_t api_wifi_scan(api_scan_result_handler_t scan_result_cb); void wifi_close_scan(void); +rtw_result_t _wext_set_lps_dtim(int adapter_num, uint8 lps_dtim); +int _wext_get_lps_dtim(int adapter_num); +rtw_result_t _wext_enable_powersave(int adapter_num, uint8 ips_mode, uint8 lps_mode); + + #endif // _WIFI_API_H_ diff --git a/RTL00_SDKV35a/component/common/api/wifi_api_scan.c b/RTL00_SDKV35a/component/common/api/wifi_api_scan.c index 556668e..999cf58 100644 --- a/RTL00_SDKV35a/component/common/api/wifi_api_scan.c +++ b/RTL00_SDKV35a/component/common/api/wifi_api_scan.c @@ -90,7 +90,7 @@ LOCAL void _wifi_scan_done_hdl(char* buf, int buf_len, int flags, void* userdata web_scan_handler_t * pwscn_rec = &web_scan_handler_ptr; if(pscan_rec->gscan_result_handler) { // сторонний вывод - (*pscan_rec->gscan_result_handler)(pscan_rec); + (*pscan_rec->gscan_result_handler)((rtw_scan_handler_result_t *) pscan_rec); } else { // оставить структуру pscan_rec->pap_details[i] для вывода в web scan на 5 сек @@ -136,6 +136,7 @@ LOCAL int _wifi_scan_networks(rtw_scan_result_handler_t results_handler) { } /* -------- wext_set_pscan_channels ----------------- */ +extern int iw_ioctl(const char * ifname, unsigned long request, struct iwreq * pwrq); LOCAL int wext_set_pscan_channels(void) { struct iwreq iwr; @@ -183,7 +184,7 @@ rtw_result_t api_wifi_scan(api_scan_result_handler_t scan_result_cb) // error_printf("Error xTimerStart\n"); } else if(wext_set_pscan_channels() < 0) { // error_printf("ERROR: wifi set partial scan channel fail\n"); - } else if(_wifi_scan_networks(scan_result_cb) != RTW_SUCCESS) { + } else if(_wifi_scan_networks((rtw_scan_result_handler_t) scan_result_cb) != RTW_SUCCESS) { // error_printf("ERROR: wifi scan failed\n"); } else if(scan_result_cb) { int i = 300; diff --git a/RTL00_SDKV35a/component/common/drivers/sdio/realtek/sdio_host/src/sd.c b/RTL00_SDKV35a/component/common/drivers/sdio/realtek/sdio_host/src/sd.c index dd81f93..659a3af 100644 --- a/RTL00_SDKV35a/component/common/drivers/sdio/realtek/sdio_host/src/sd.c +++ b/RTL00_SDKV35a/component/common/drivers/sdio/realtek/sdio_host/src/sd.c @@ -18,7 +18,7 @@ void sd_xfer_done_callback(void *obj) { } void sd_xfer_err_callback(void *obj) { - DBG_SDIO_ERR("sd_xfer_err_callback \r\n"); + DBG_SDIO_ERR("sd_xfer_err_callback\r\n"); } //----- SD_WaitReady diff --git a/RTL00_SDKV35a/component/common/drivers/sdio/realtek/sdio_host/src/sdio_host.c b/RTL00_SDKV35a/component/common/drivers/sdio/realtek/sdio_host/src/sdio_host.c index 1d4c8a9..4b90808 100644 --- a/RTL00_SDKV35a/component/common/drivers/sdio/realtek/sdio_host/src/sdio_host.c +++ b/RTL00_SDKV35a/component/common/drivers/sdio/realtek/sdio_host/src/sdio_host.c @@ -259,7 +259,7 @@ s8 sdio_sd_setClock(SD_CLK_FREQUENCY SDCLK) { DBG_SDIO_ERR("Malloc ADMA2 table fail.\n"); return -1; } - DBG_SDIO_INFO("SD card set CLK %d Hz\n", PLATFORM_CLOCK/(4<<(8-SDCLK))); + DBG_SDIO_INFO("SD card set CLK %d Hz\n", PLATFORM_CLOCK/(2 << (SD_CLK_41_6MHZ - SDCLK))); sta = HalSdioHostOp.HalSdioHostChangeSdClock(&SdioHostAdapter, SDCLK); rtw_mfree(padma, sizeof(ADMA2_DESC_FMT)); if (sta) diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/hal_com_reg.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/hal_com_reg.h index 4e176f4..5766d47 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/hal_com_reg.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/hal_com_reg.h @@ -39,8 +39,8 @@ // 0x0000h ~ 0x00FFh System Configuration // //----------------------------------------------------- -#define REG_SYS_ISO_CTRL 0x0000 -#define REG_SYS_FUNC_EN 0x0002 +#define REG_SYS_ISO_CTRL_ 0x0000 +#define REG_SYS_FUNC_EN_ 0x0002 #define REG_APS_FSMCO 0x0004 #define REG_SYS_CLKR 0x0008 #define REG_9346CR 0x000A @@ -515,7 +515,7 @@ #define REG_BSSID1 0x0708 /* port0 & port1 enable */ -#define REG_PORT_CTRL 0x76D +//#define REG_PORT_CTRL 0x76D //----------------------------------------------------- // @@ -872,7 +872,7 @@ Default: 00b. #define IMR_PSTIMEOUT BIT14 // Power save time out interrupt #define IMR_BcnInt BIT13 // Beacon DMA Interrupt 0 #define IMR_RXFOVW BIT12 // Receive FIFO Overflow -#define IMR_RDU BIT11 // Receive Descriptor Unavailable +#define IMR_RDU_ BIT11 // Receive Descriptor Unavailable #define IMR_ATIMEND BIT10 // For 92C,ATIM Window End Interrupt. For 8723 and later ICs, it also means P2P CTWin End interrupt. #define IMR_BDOK BIT9 // Beacon Queue DMA OK Interrup #define IMR_HIGHDOK BIT8 // High Queue DMA OK Interrupt diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/osdep/lwip_intf.c b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/osdep/lwip_intf.c index 249b007..1e3d544 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/osdep/lwip_intf.c +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/osdep/lwip_intf.c @@ -133,13 +133,13 @@ void rltk_wlan_recv(int idx, struct eth_drv_sg *sg_list, int sg_len) DBG_TRACE("%s is called", __FUNCTION__); - if (!rltk_wlan_check_isup(idx)) - return; - if(idx == -1){ DBG_ERR("skb is NULL"); return; } + + if (!rltk_wlan_check_isup(idx)) + return; skb = rltk_wlan_get_recv_skb(idx); DBG_ASSERT(skb, "No pending rx skb"); diff --git a/RTL00_SDKV35a/component/common/file_system/fatfs/disk_if/inc/sdcard.h b/RTL00_SDKV35a/component/common/file_system/fatfs/disk_if/inc/sdcard.h index a9ed1d8..e4340f9 100644 --- a/RTL00_SDKV35a/component/common/file_system/fatfs/disk_if/inc/sdcard.h +++ b/RTL00_SDKV35a/component/common/file_system/fatfs/disk_if/inc/sdcard.h @@ -1,6 +1,6 @@ #ifndef _SDCARD_H_ #define _SDCARD_H_ -#include "fatfs_ext/inc/ff_driver.h" +#include "ff_driver.h" extern ll_diskio_drv SD_disk_Driver; #endif diff --git a/RTL00_SDKV35a/component/common/mbed/common/wait_api.c b/RTL00_SDKV35a/component/common/mbed/common/wait_api.c index b89e548..b4ee6cb 100644 --- a/RTL00_SDKV35a/component/common/mbed/common/wait_api.c +++ b/RTL00_SDKV35a/component/common/mbed/common/wait_api.c @@ -17,6 +17,8 @@ #include "us_ticker_api.h" #include "platform_autoconf.h" +#include "FreeRTOS.h" +#include "task.h" #define WAIT_US_USE_CYCCNT diff --git a/RTL00_SDKV35a/component/common/mbed/hal/gpio_irq_api.h b/RTL00_SDKV35a/component/common/mbed/hal/gpio_irq_api.h index ccdb30c..10f5775 100644 --- a/RTL00_SDKV35a/component/common/mbed/hal/gpio_irq_api.h +++ b/RTL00_SDKV35a/component/common/mbed/hal/gpio_irq_api.h @@ -27,7 +27,9 @@ extern "C" { typedef enum { IRQ_NONE, IRQ_RISE, - IRQ_FALL + IRQ_FALL, + IRQ_LOW, + IRQ_HIGH } gpio_irq_event; typedef void (*gpio_irq_handler)(uint32_t id, gpio_irq_event event); diff --git a/RTL00_SDKV35a/component/common/mbed/hal_ext/dma_api.h b/RTL00_SDKV35a/component/common/mbed/hal_ext/dma_api.h index 1bf3a0e..a753c42 100644 --- a/RTL00_SDKV35a/component/common/mbed/hal_ext/dma_api.h +++ b/RTL00_SDKV35a/component/common/mbed/hal_ext/dma_api.h @@ -34,8 +34,8 @@ typedef void (*dma_irq_handler)(uint32_t id); void dma_memcpy_init(gdma_t *dma_obj, dma_irq_handler handler, uint32_t id); void dma_memcpy_deinit(gdma_t *dma_obj); void dma_memcpy(gdma_t *dma_obj, void *dst, void* src, uint32_t len); -void dma_memcpy_aggr_init(gdma_t * dma_obj, dma_irq_handler handler, uint32_t id); -void dma_memcpy_aggr(gdma_t * dma_obj, PHAL_GDMA_BLOCK block_info); +void dma_memcpy_aggr_init(gdma_t *dma_obj, dma_irq_handler handler, uint32_t id); +void dma_memcpy_aggr(gdma_t *dma_obj, PHAL_GDMA_BLOCK block_info); #ifdef __cplusplus } diff --git a/RTL00_SDKV35a/component/common/mbed/hal_ext/gpio_irq_ex_api.h b/RTL00_SDKV35a/component/common/mbed/hal_ext/gpio_irq_ex_api.h index 2fcee20..949ea6a 100644 --- a/RTL00_SDKV35a/component/common/mbed/hal_ext/gpio_irq_ex_api.h +++ b/RTL00_SDKV35a/component/common/mbed/hal_ext/gpio_irq_ex_api.h @@ -24,10 +24,12 @@ extern "C" { #endif +/* typedef enum { IRQ_LOW = 3, IRQ_HIGH =4 } gpio_irq_event_ex; +*/ void gpio_irq_deinit(gpio_irq_t *obj); void gpio_irq_pull_ctrl(gpio_irq_t *obj, PinMode pull_type); @@ -37,4 +39,4 @@ void gpio_irq_pull_ctrl(gpio_irq_t *obj, PinMode pull_type); #endif // end of "#if DEVICE_INTERRUPTIN" -#endif // end of #ifndef MBED_GPIO_IRQ_EX_API_H \ No newline at end of file +#endif // end of #ifndef MBED_GPIO_IRQ_EX_API_H diff --git a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/analogin_api.c b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/analogin_api.c index 09b6cf6..18c5d14 100644 --- a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/analogin_api.c +++ b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/analogin_api.c @@ -118,13 +118,13 @@ void analogin_init (analogin_t *obj, PinName pin){ } float analogin_read(analogin_t *obj){ - float value; +// float value; union { unsigned int ui[2]; unsigned short us[4]; } adata; PSAL_ADC_HND p = &((&(obj->SalADCMngtAdpt))->pSalHndPriv->SalADCHndPriv); - RtkADCReceiveBuf(p, &adata.ui); + RtkADCReceiveBuf(p, (u32 *) &adata.ui); return (float)(adata.us[p->DevNum]) / (float)(0xCE80); /* uint32_t AnaloginTmp[2] = {0,0}; @@ -161,7 +161,7 @@ uint16_t analogin_read_u16(analogin_t *obj){ unsigned short us[4]; } adata; PSAL_ADC_HND p = &((&(obj->SalADCMngtAdpt))->pSalHndPriv->SalADCHndPriv); - RtkADCRxManualRotate(p, &adata.ui); + RtkADCRxManualRotate(p, (u32 *) &adata.ui); return adata.us[p->DevNum]; /* uint32_t AnaloginTmp[2] = {0,0}; diff --git a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/flash_api.c b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/flash_api.c index 6a8d455..86978a6 100644 --- a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/flash_api.c +++ b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/flash_api.c @@ -592,6 +592,8 @@ unsigned int flash_get_size(flash_t *obj) { /* * Read Flash OTP data */ +extern void SpicTxCmdWithDataRtl8195A(u8 cmd, u8 DataPhaseLen, u8* pData, SPIC_INIT_PARA SpicInitPara); + int flash_otp_read(flash_t *obj, uint32_t address, uint32_t Length, uint8_t * data) { int ret = 1; diff --git a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/flash_eep.c b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/flash_eep.c index 2342fd1..82ce6c9 100644 --- a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/flash_eep.c +++ b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/flash_eep.c @@ -350,7 +350,7 @@ LOCAL FLASH_EEP_ATTR unsigned int pack_cfg_fmem(fobj_head obj) #if 0 copy_align4_to_align1((uint8 *)pbuf, rdaddr, len); #else - SpicUserReadFourByteRtl8195A(len, rdaddr, (unsigned int *)pbuf, flashobj.SpicInitPara.Mode.BitMode); + SpicUserReadFourByteRtl8195A(len, rdaddr, (u32 *)pbuf, flashobj.SpicInitPara.Mode.BitMode); #endif int i = 0; int size4b = len >> 2; @@ -376,7 +376,7 @@ LOCAL signed short FLASH_EEP_ATTR _flash_write_cfg(void *ptr, unsigned short id, fobj_head fobj; fobj.n.id = id; fobj.n.size = size; - bool retb = false; +// bool retb = false; unsigned int faddr = get_addr_bscfg(false); if(faddr >= FMEM_ERROR_MAX) { diff --git a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/i2c_api.c b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/i2c_api.c index 6d1ed3e..457f700 100644 --- a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/i2c_api.c +++ b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/i2c_api.c @@ -573,6 +573,7 @@ int i2c_enable_control(i2c_t *obj, int enable) { pSalI2CHND->pInitDat->I2CEn = enable; pSalI2CMngtAdpt->pHalOp->HalI2CEnable(pSalI2CHND->pInitDat); + return 1; } #if DEVICE_I2CSLAVE @@ -719,14 +720,14 @@ int i2c_slave_write(i2c_t *obj, const char *data, int length) { * \return result */ int i2c_slave_set_for_rd_req(i2c_t *obj, int set) { - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - PHAL_I2C_INIT_DAT pHalI2CInitDat = NULL; - PHAL_I2C_OP pHalI2COP = NULL; + PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt; +// PSAL_I2C_HND pSalI2CHND = NULL; + PHAL_I2C_INIT_DAT pHalI2CInitDat; + PHAL_I2C_OP pHalI2COP; u32 I2CLocalTemp; pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); +// pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); pHalI2CInitDat = pSalI2CMngtAdpt->pHalInitDat; pHalI2COP = pSalI2CMngtAdpt->pHalOp; @@ -772,6 +773,7 @@ int i2c_slave_set_for_data_nak(i2c_t *obj, int set_nak) { //} HAL_I2C_WRITE32(pSalI2CHND->DevNum, REG_DW_I2C_IC_SLV_DATA_NACK_ONLY, set_nak); + return 1; } #endif // CONFIG_I2C_SLAVE_EN diff --git a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/log_uart_api.c b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/log_uart_api.c index fc284a7..cb0f60c 100644 --- a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/log_uart_api.c +++ b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/log_uart_api.c @@ -253,7 +253,7 @@ void log_uart_irq_set(log_uart_t *obj, LOG_UART_INT_ID irq, uint32_t enable) char log_uart_getc(log_uart_t *obj) { - HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); +// HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); while (!log_uart_readable(obj)); return (char)(HAL_UART_READ32(UART_REV_BUF_OFF) & 0xFF); @@ -261,7 +261,7 @@ char log_uart_getc(log_uart_t *obj) void log_uart_putc(log_uart_t *obj, char c) { - HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); +// HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); while (!log_uart_writable(obj)); HAL_UART_WRITE8(UART_TRAN_HOLD_OFF, c); @@ -269,7 +269,7 @@ void log_uart_putc(log_uart_t *obj, char c) int log_uart_readable(log_uart_t *obj) { - HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); +// HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); volatile u8 line_status; line_status = HAL_UART_READ8(UART_LINE_STATUS_REG_OFF); @@ -283,7 +283,7 @@ int log_uart_readable(log_uart_t *obj) int log_uart_writable(log_uart_t *obj) { - HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); +// HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); volatile u8 line_status; line_status = HAL_UART_READ8(UART_LINE_STATUS_REG_OFF); @@ -321,7 +321,7 @@ void log_uart_clear_rx(log_uart_t *obj) void log_uart_break_set(log_uart_t *obj) { - HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); +// HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); u32 RegValue; RegValue = HAL_UART_READ32(UART_LINE_CTL_REG_OFF); @@ -331,7 +331,7 @@ void log_uart_break_set(log_uart_t *obj) void log_uart_break_clear(log_uart_t *obj) { - HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); +// HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); u32 RegValue; RegValue = HAL_UART_READ32(UART_LINE_CTL_REG_OFF); diff --git a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/pwmout_api.c b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/pwmout_api.c index d2d7d31..184286d 100644 --- a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/pwmout_api.c +++ b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/pwmout_api.c @@ -44,6 +44,8 @@ const PinMap PinMap_PWM[] = { {NC, NC, 0} }; +extern void * rtl_memset(void *m, int c, size_t n); + int pwmout_init(pwmout_t* obj, PinName pin) { uint32_t peripheral; diff --git a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/serial_api.c b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/serial_api.c index af21347..0f495b6 100644 --- a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/serial_api.c +++ b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/serial_api.c @@ -536,12 +536,12 @@ int32_t serial_send_stream (serial_t *obj, char *ptxbuf, uint32_t len) int32_t serial_recv_stream_dma (serial_t *obj, char *prxbuf, uint32_t len) { - PHAL_RUART_OP pHalRuartOp; +// PHAL_RUART_OP pHalRuartOp; PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); u8 uart_idx = pHalRuartAdapter->UartIndex; int32_t ret; - pHalRuartOp = &(obj->hal_uart_op); +// pHalRuartOp = &(obj->hal_uart_op); if ((serial_dma_en[uart_idx] & SERIAL_RX_DMA_EN)==0) { PUART_DMA_CONFIG pHalRuartDmaCfg; @@ -563,12 +563,12 @@ int32_t serial_recv_stream_dma (serial_t *obj, char *prxbuf, uint32_t len) int32_t serial_send_stream_dma (serial_t *obj, char *ptxbuf, uint32_t len) { - PHAL_RUART_OP pHalRuartOp; +// PHAL_RUART_OP pHalRuartOp; PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); u8 uart_idx = pHalRuartAdapter->UartIndex; int32_t ret; - pHalRuartOp = &(obj->hal_uart_op); +// pHalRuartOp = &(obj->hal_uart_op); if ((serial_dma_en[uart_idx] & SERIAL_TX_DMA_EN)==0) { PUART_DMA_CONFIG pHalRuartDmaCfg; diff --git a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/spi_api.c b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/spi_api.c index 85471cd..4086b7a 100644 --- a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/spi_api.c +++ b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/spi_api.c @@ -58,13 +58,11 @@ void spi_init (spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName sse _memset((void*)obj, 0, sizeof(spi_t)); obj->state = 0; - uint32_t SystemClock = SystemGetCpuClk(); - uint32_t MaxSsiFreq = (SystemClock >> 2) >> 1; /* SsiClockDivider doesn't support odd number */ - DBG_SSI_INFO("SystemClock: %d\n", SystemClock); - DBG_SSI_INFO("MaxSsiFreq : %d\n", MaxSsiFreq); + DBG_SSI_INFO("SystemClock: %d\n", SystemGetCpuClk()); + DBG_SSI_INFO("MaxSsiFreq : %d\n", (SystemClock >> 2) >> 1); ssi_mosi = pinmap_peripheral(mosi, PinMap_SSI_MOSI); ssi_miso = pinmap_peripheral(miso, PinMap_SSI_MISO); diff --git a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/sys_api.c b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/sys_api.c index a9416b3..2742f4c 100644 --- a/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/sys_api.c +++ b/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/sys_api.c @@ -41,7 +41,7 @@ extern void HalDeinitLogUart(void); #ifdef CONFIG_SDR_EN //#if defined ( __ICCARM__ ) -extern u8 IsSdrPowerOn(); +extern u8 IsSdrPowerOn(void); //#endif #endif /** @@ -204,11 +204,16 @@ void sys_reset(void) } #ifdef CONFIG_SDR_EN + +extern u8 IsSdrPowerOn(void); + u8 sys_is_sdram_power_on(void) { return IsSdrPowerOn(); } +extern void SdrPowerOff(void); + void sys_sdram_off(void) { if (IsSdrPowerOn()) { diff --git a/RTL00_SDKV35a/component/common/network/dhcp/dhcps.h b/RTL00_SDKV35a/component/common/network/dhcp/dhcps.h index a1c7d60..ab1d308 100644 --- a/RTL00_SDKV35a/component/common/network/dhcp/dhcps.h +++ b/RTL00_SDKV35a/component/common/network/dhcp/dhcps.h @@ -30,8 +30,8 @@ #define DHCP_MESSAGE_HTYPE (1) #define DHCP_MESSAGE_HLEN (6) -#define DHCP_SERVER_PORT (67) -#define DHCP_CLIENT_PORT (68) +//#define DHCP_SERVER_PORT (67) +//#define DHCP_CLIENT_PORT (68) #define DHCP_MESSAGE_TYPE_DISCOVER (1) #define DHCP_MESSAGE_TYPE_OFFER (2) diff --git a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/port/realtek/freertos/ethernetif.c b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/port/realtek/freertos/ethernetif.c index 50d883d..c539567 100644 --- a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/port/realtek/freertos/ethernetif.c +++ b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/port/realtek/freertos/ethernetif.c @@ -91,9 +91,12 @@ static void arp_timer(void *arg); #if LWIP_NETIF_HOSTNAME char lwip_host_name[NET_IF_NUM][LWIP_NETIF_HOSTNAME_SIZE] = { - DEF_HOSTNAME"0", - DEF_HOSTNAME"1", - DEF_HOSTNAME"2" + { DEF_HOSTNAME"0" }, + { DEF_HOSTNAME"1" } +#if NET_IF_NUM > 2 + ,{ DEF_HOSTNAME "2" } +#endif + }; #endif diff --git a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/api/err.c b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/api/err.c index 51b32ea..2183b0d 100644 --- a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/api/err.c +++ b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/api/err.c @@ -38,7 +38,7 @@ #include "lwip/err.h" -#ifdef LWIP_DEBUG +#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) static const char *err_strerr[] = { "Ok", /* ERR_OK 0 */ diff --git a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/api/sockets.c b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/api/sockets.c index 5669497..e8dfd8c 100644 --- a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/api/sockets.c +++ b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/api/sockets.c @@ -105,7 +105,7 @@ struct lwip_select_cb { struct lwip_setgetsockopt_data { /** socket struct for which to change options */ struct lwip_sock *sock; -#ifdef LWIP_DEBUG +#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) /** socket index for which to change options */ int s; #endif /* LWIP_DEBUG */ @@ -1641,7 +1641,7 @@ lwip_getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen) /* Now do the actual option processing */ data.sock = sock; -#ifdef LWIP_DEBUG +#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) data.s = s; #endif /* LWIP_DEBUG */ data.level = level; @@ -1662,7 +1662,7 @@ static void lwip_getsockopt_internal(void *arg) { struct lwip_sock *sock; -#ifdef LWIP_DEBUG +#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) int s; #endif /* LWIP_DEBUG */ int level, optname; @@ -1673,7 +1673,7 @@ lwip_getsockopt_internal(void *arg) data = (struct lwip_setgetsockopt_data*)arg; sock = data->sock; -#ifdef LWIP_DEBUG +#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) s = data->s; #endif /* LWIP_DEBUG */ level = data->level; @@ -2059,7 +2059,7 @@ lwip_setsockopt(int s, int level, int optname, const void *optval, socklen_t opt /* Now do the actual option processing */ data.sock = sock; -#ifdef LWIP_DEBUG +#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) data.s = s; #endif /* LWIP_DEBUG */ data.level = level; @@ -2080,7 +2080,7 @@ static void lwip_setsockopt_internal(void *arg) { struct lwip_sock *sock; -#ifdef LWIP_DEBUG +#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) int s; #endif /* LWIP_DEBUG */ int level, optname; @@ -2091,7 +2091,7 @@ lwip_setsockopt_internal(void *arg) data = (struct lwip_setgetsockopt_data*)arg; sock = data->sock; -#ifdef LWIP_DEBUG +#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) s = data->s; #endif /* LWIP_DEBUG */ level = data->level; diff --git a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/api/tcpip.c b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/api/tcpip.c index 1cc4224..7dda5b4 100644 --- a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/api/tcpip.c +++ b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/api/tcpip.c @@ -308,7 +308,7 @@ err_t tcpip_apimsg(struct api_msg *apimsg) { struct tcpip_msg msg; -#ifdef LWIP_DEBUG +#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) /* catch functions that don't set err */ apimsg->msg.err = ERR_VAL; #endif @@ -339,7 +339,7 @@ tcpip_apimsg(struct api_msg *apimsg) err_t tcpip_apimsg_lock(struct api_msg *apimsg) { -#ifdef LWIP_DEBUG +#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) /* catch functions that don't set err */ apimsg->msg.err = ERR_VAL; #endif diff --git a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/dhcp.c b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/dhcp.c index fcecff1..8b62123 100644 --- a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/dhcp.c +++ b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/dhcp.c @@ -1008,7 +1008,7 @@ dhcp_bind(struct netif *netif) ip_addr_copy(gw_addr, dhcp->offered_gw_addr); /* gateway address not given? */ - if (ip_addr_isany(&gw_addr)) { + if (gw_addr.addr == IPADDR_ANY) { /* copy network address */ ip_addr_get_network(&gw_addr, &dhcp->offered_ip_addr, &sn_mask); /* use first host address on network as gateway */ diff --git a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/icmp.c b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/icmp.c index 47ba857..3a34a5e 100644 --- a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/icmp.c +++ b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/icmp.c @@ -77,7 +77,7 @@ void icmp_input(struct pbuf *p, struct netif *inp) { u8_t type; -#ifdef LWIP_DEBUG +#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) u8_t code; #endif /* LWIP_DEBUG */ struct icmp_echo_hdr *iecho; @@ -96,7 +96,7 @@ icmp_input(struct pbuf *p, struct netif *inp) } type = *((u8_t *)p->payload); -#ifdef LWIP_DEBUG +#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) code = *(((u8_t *)p->payload)+1); #endif /* LWIP_DEBUG */ switch (type) { diff --git a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/igmp.c b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/igmp.c index 45bb5d9..94e9ffc 100644 --- a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/igmp.c +++ b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/igmp.c @@ -161,7 +161,7 @@ igmp_init(void) IP4_ADDR(&allrouters, 224, 0, 0, 2); } -#ifdef LWIP_DEBUG +#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) /** * Dump global IGMP groups list */ diff --git a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/ip.c b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/ip.c index b529e27..8af0496 100644 --- a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/ip.c +++ b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/ip.c @@ -128,8 +128,9 @@ struct netif * ip_route(ip_addr_t *dest) { struct netif *netif; +#if CONFIG_ETHERNET struct netif *last_netif = NULL; - +#endif #ifdef LWIP_HOOK_IP4_ROUTE netif = LWIP_HOOK_IP4_ROUTE(dest); if (netif != NULL) { @@ -498,7 +499,7 @@ ip_input(struct pbuf *p, struct netif *inp) /* broadcast or multicast packet source address? Compliant with RFC 1122: 3.2.1.3 */ #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) */ - if (check_ip_src && !ip_addr_isany(¤t_iphdr_src)) + if (check_ip_src && current_iphdr_src.addr != IPADDR_ANY) #endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */ { if ((ip_addr_isbroadcast(¤t_iphdr_src, inp)) || (ip_addr_ismulticast(¤t_iphdr_src))) { diff --git a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/memp.c b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/memp.c index 24a12b1..534d4a7 100644 --- a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/memp.c +++ b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/memp.c @@ -140,7 +140,7 @@ static const u16_t memp_num[MEMP_MAX] = { }; /** This array holds a textual description of each pool. */ -#ifdef LWIP_DEBUG +#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) static const char *memp_desc[MEMP_MAX] = { #define LWIP_MEMPOOL(name,num,size,desc) (desc), #include "lwip/memp_std.h" diff --git a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/stats.c b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/stats.c index 8ea8249..0422b83 100644 --- a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/stats.c +++ b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/core/stats.c @@ -50,7 +50,7 @@ struct stats_ lwip_stats; void stats_init(void) { -#ifdef LWIP_DEBUG +#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) #if MEMP_STATS const char * memp_names[] = { #define LWIP_MEMPOOL(name,num,size,desc) desc, diff --git a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/netif/etharp.c b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/netif/etharp.c index a0d3d8e..7f88da4 100644 --- a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/netif/etharp.c +++ b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/netif/etharp.c @@ -187,7 +187,7 @@ etharp_free_entry(int i) } /* recycle entry for re-use */ arp_table[i].state = ETHARP_STATE_EMPTY; -#ifdef LWIP_DEBUG +#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) /* for debugging, clean out the complete entry */ arp_table[i].ctime = 0; arp_table[i].netif = NULL; diff --git a/RTL00_SDKV35a/component/common/network/netbios/netbios.c b/RTL00_SDKV35a/component/common/network/netbios/netbios.c index cb0db96..50cf04d 100644 --- a/RTL00_SDKV35a/component/common/network/netbios/netbios.c +++ b/RTL00_SDKV35a/component/common/network/netbios/netbios.c @@ -163,8 +163,7 @@ PACK_STRUCT_END # include "arch/epstruct.h" #endif -//#define toupper(CH) \ -// (((CH) >= 'a' && (CH) <= 'z') ? ((CH) - 'a' + 'A') : (CH)) +#define toupper(CH) (((CH) >= 'a' && (CH) <= 'z') ? ((CH) - 'a' + 'A') : (CH)) /** NetBIOS decoding name */ @@ -226,7 +225,7 @@ netbios_recv(void *arg, struct udp_pcb *upcb, struct pbuf *p, ip_addr_t *addr, if (current_netif != NULL && current_netif->num < NET_IF_NUM) { uint32 ip = current_netif->ip_addr.addr; char *curbiosname = netbios_name[current_netif->num]; - if (curbiosname[0] != '\0' && ip != NULL + if (curbiosname[0] != '\0' && ip != 0 /* we only answer if we got a default interface */ && (((ip ^ addr->addr) & current_netif->netmask.addr) == 0)) { // запрет ответа другой подсети #if DEBUGSOO > 3 diff --git a/RTL00_SDKV35a/component/common/network/netbios/netbios.h b/RTL00_SDKV35a/component/common/network/netbios/netbios.h index a843cc1..d472e1b 100644 --- a/RTL00_SDKV35a/component/common/network/netbios/netbios.h +++ b/RTL00_SDKV35a/component/common/network/netbios/netbios.h @@ -1,6 +1,7 @@ #ifndef __NETBIOS_H__ #define __NETBIOS_H__ +#include "autoconf.h" #include "lwip/opt.h" /** default port number for "NetBIOS Name service */ @@ -9,9 +10,9 @@ /** size of a NetBIOS name */ #define NETBIOS_NAME_LEN 16 -#ifndef NET_IF_NUM -#define NET_IF_NUM 2 -#endif +//#ifndef NET_IF_NUM +//#define NET_IF_NUM 2 +//#endif #ifdef __cplusplus extern "C" { diff --git a/RTL00_SDKV35a/component/common/network/sntp/sntp.c b/RTL00_SDKV35a/component/common/network/sntp/sntp.c index 8289a58..0a914b3 100644 --- a/RTL00_SDKV35a/component/common/network/sntp/sntp.c +++ b/RTL00_SDKV35a/component/common/network/sntp/sntp.c @@ -159,7 +159,7 @@ void sntp_get_lasttime(long *sec, long *usec, unsigned int *tick) time_t sntp_gen_system_time(int timezone) { - struct tm current_tm; +// struct tm current_tm; unsigned int update_tick; long update_sec, update_usec, current_sec = 0; diff --git a/RTL00_SDKV35a/component/os/freertos/cmsis_os.c b/RTL00_SDKV35a/component/os/freertos/cmsis_os.c index f89830a..7225c96 100644 --- a/RTL00_SDKV35a/component/os/freertos/cmsis_os.c +++ b/RTL00_SDKV35a/component/os/freertos/cmsis_os.c @@ -74,7 +74,7 @@ static int inHandlerMode (void) #if configSignalManagementSupport // the older FreeRTOS version didn't support Signal Management functions static void add_thread_signal_map (osThreadId thread_id, EventGroupHandle_t signals) { - int dummy; + int dummy = 0; // uint32_t i; ThreadSignalRec *prec_entity; @@ -135,7 +135,7 @@ static EventGroupHandle_t find_signal_by_thread (osThreadId thread_id) { EventGroupHandle_t signals_hdl=NULL; // uint32_t i; - int dummy; + int dummy = 0; ThreadSignalRec *prec_entity; if (inHandlerMode()) { @@ -185,7 +185,7 @@ static EventGroupHandle_t remove_thread_signal_map (osThreadId thread_id) { EventGroupHandle_t signals_hdl=NULL; // uint32_t i; - int dummy; + int dummy = 0; ThreadSignalRec *prec_entity; ThreadSignalRec *pprev_entity; @@ -989,7 +989,7 @@ osPoolId osPoolCreate (const osPoolDef_t *pool_def) /// \note MUST REMAIN UNCHANGED: \b osPoolAlloc shall be consistent in every CMSIS-RTOS. void *osPoolAlloc (osPoolId pool_id) { - int dummy; + int dummy = 0; void *p = NULL; uint32_t i; uint32_t index; @@ -1047,7 +1047,7 @@ void *osPoolCAlloc (osPoolId pool_id) /// \note MUST REMAIN UNCHANGED: \b osPoolFree shall be consistent in every CMSIS-RTOS. osStatus osPoolFree (osPoolId pool_id, void *block) { - int dummy; + int dummy = 0; uint32_t index; if (pool_id == NULL) { diff --git a/RTL00_SDKV35a/component/os/freertos/freertos_pmu.c b/RTL00_SDKV35a/component/os/freertos/freertos_pmu.c index d662075..9f8fc70 100644 --- a/RTL00_SDKV35a/component/os/freertos/freertos_pmu.c +++ b/RTL00_SDKV35a/component/os/freertos/freertos_pmu.c @@ -58,6 +58,7 @@ int freertos_ready_to_sleep() { return wakelock == 0; } +extern uint32_t osKernelSysTick (void); /* * It is called when freertos is going to sleep. * At this moment, all sleep conditons are satisfied. All freertos' sleep pre-processing are done. @@ -65,7 +66,7 @@ int freertos_ready_to_sleep() { * @param expected_idle_time : The time that FreeRTOS expect to sleep. * If we set this value to 0 then FreeRTOS will do nothing in its sleep function. **/ -void freertos_pre_sleep_processing(unsigned int *expected_idle_time) { +void freertos_pre_sleep_processing(uint32_t *expected_idle_time) { #ifdef CONFIG_SOC_PS_MODULE @@ -176,7 +177,7 @@ void freertos_pre_sleep_processing(unsigned int *expected_idle_time) { #endif } -void freertos_post_sleep_processing(unsigned int *expected_idle_time) { +void freertos_post_sleep_processing(uint32_t *expected_idle_time) { #ifndef configSYSTICK_CLOCK_HZ *expected_idle_time = 1 + ( portNVIC_SYSTICK_CURRENT_VALUE_REG / ( configCPU_CLOCK_HZ / configTICK_RATE_HZ ) ); #else @@ -257,8 +258,12 @@ uint32_t get_wakelock_status() { } #if (configGENERATE_RUN_TIME_STATS == 1) + +extern int sprintf(char* str, const char* fmt, ...); +extern size_t strlen(const char *str); + void get_wakelock_hold_stats( char *pcWriteBuffer ) { - u32 i; + int i; u32 current_timestamp = osKernelSysTick(); *pcWriteBuffer = 0x00; @@ -269,15 +274,15 @@ void get_wakelock_hold_stats( char *pcWriteBuffer ) { for (i=0; i<32; i++) { if (last_wakelock_state[i] == 1) { - sprintf(pcWriteBuffer, "%x\t\t%d\r\n", i, hold_wakelock_time[i] + (current_timestamp - last_acquire_wakelock_time[i])); + sprintf(pcWriteBuffer, "%x\t\t%u\r\n", i, (unsigned int)( hold_wakelock_time[i] + (current_timestamp - last_acquire_wakelock_time[i]))); } else { if (hold_wakelock_time[i] > 0) { - sprintf(pcWriteBuffer, "%x\t\t%d\r\n", i, hold_wakelock_time[i]); + sprintf(pcWriteBuffer, "%x\t\t%u\r\n", i, (unsigned int)hold_wakelock_time[i]); } } pcWriteBuffer += strlen( pcWriteBuffer ); } - sprintf(pcWriteBuffer, "time passed: %d ms, system sleep %d ms\r\n", current_timestamp - base_sys_time, sys_sleep_time); + sprintf(pcWriteBuffer, "time passed: %u ms, system sleep %u ms\r\n", (unsigned int)(current_timestamp - base_sys_time), (unsigned int)sys_sleep_time); } void clean_wakelock_stat() { diff --git a/RTL00_SDKV35a/component/os/freertos/freertos_service.h b/RTL00_SDKV35a/component/os/freertos/freertos_service.h index 39aba66..666a0b0 100644 --- a/RTL00_SDKV35a/component/os/freertos/freertos_service.h +++ b/RTL00_SDKV35a/component/os/freertos/freertos_service.h @@ -174,7 +174,7 @@ void cli(void); #endif #define HALT() do { cli(); for(;;);} while(0) -//#undef ASSERT +#undef ASSERT #define ASSERT(x) do { \ if((x) == 0) \ printf("\n\rAssert(" #x ") failed on line %d in file %s", __LINE__, __FILE__); \ diff --git a/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/Source/include/portable.h b/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/Source/include/portable.h index 376b13e..979dcdc 100644 --- a/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/Source/include/portable.h +++ b/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/Source/include/portable.h @@ -162,7 +162,7 @@ typedef struct HeapRegion * terminated by a HeapRegions_t structure that has a size of 0. The region * with the lowest start address must appear first in the array. */ -static void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions ) PRIVILEGED_FUNCTION; +//static void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions ) PRIVILEGED_FUNCTION; /* diff --git a/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/Source/portable/GCC/ARM_CM3/port.c b/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/Source/portable/GCC/ARM_CM3/port.c index 7389102..651e19d 100644 --- a/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/Source/portable/GCC/ARM_CM3/port.c +++ b/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/Source/portable/GCC/ARM_CM3/port.c @@ -689,6 +689,7 @@ __attribute__(( weak )) void vPortSetupTimerInterrupt( void ) #endif /* configASSERT_DEFINED */ /*-----------------------------------------------------------*/ #if configUSE_IDLE_HOOK +extern void WDGRefresh(void); void vApplicationIdleHook( void ) { /* Use the idle task to place the CPU into a low power mode. Greater power diff --git a/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/Source/portable/MemMang/heap_5.c b/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/Source/portable/MemMang/heap_5.c index ce94c50..b2e9f57 100644 --- a/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/Source/portable/MemMang/heap_5.c +++ b/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/Source/portable/MemMang/heap_5.c @@ -202,6 +202,7 @@ HeapRegion_t xHeapRegions[] = #endif #endif +static void vPortDefineHeapRegions(const HeapRegion_t * const pxHeapRegions); /*-----------------------------------------------------------*/ /* Dump xBlock list @@ -501,7 +502,7 @@ static void vPortDefineHeapRegions(const HeapRegion_t * const pxHeapRegions) { uint8 chip_id = HalGetChipId(); while (pxHeapRegion->xSizeInBytes > 0) { - if (pxHeapRegion->pucStartAddress + if ((uint32_t)pxHeapRegion->pucStartAddress > 0x20000000 && chip_id >= CHIP_ID_8711AN && chip_id <= CHIP_ID_8711AF) { // pxHeapRegion->pucStartAddress = 0; // pxHeapRegion->xSizeInBytes = 0; @@ -584,6 +585,8 @@ static void vPortDefineHeapRegions(const HeapRegion_t * const pxHeapRegions) { } +extern void * rtl_memcpy(void *dst0, const void *src0, size_t len0); + void* pvPortReAlloc(void *pv, size_t xWantedSize) { BlockLink_t *pxLink; diff --git a/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/Source/tasks.c b/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/Source/tasks.c index 7f21f6a..4fb189c 100644 --- a/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/Source/tasks.c +++ b/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/Source/tasks.c @@ -82,6 +82,7 @@ task.h is included from an application file. */ #include "task.h" #include "timers.h" #include "StackMacros.h" +#include "tcm_heap.h" /* Lint e961 and e750 are suppressed as a MISRA exception justified because the MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined for the diff --git a/RTL00_SDKV35a/component/os/os_dep/device_lock.c b/RTL00_SDKV35a/component/os/os_dep/device_lock.c index b76516d..2986c34 100644 --- a/RTL00_SDKV35a/component/os/os_dep/device_lock.c +++ b/RTL00_SDKV35a/component/os/os_dep/device_lock.c @@ -34,6 +34,7 @@ static void device_mutex_init(RT_DEV_LOCK_E device) } //====================================================== +#if 0 // unused-function static void device_mutex_free(RT_DEV_LOCK_E device) { if(DEVICE_MUTEX_IS_INIT(device)){ @@ -47,7 +48,7 @@ static void device_mutex_free(RT_DEV_LOCK_E device) rtw_exit_critical(&lock, &irqL); } } - +#endif //====================================================== void device_mutex_lock(RT_DEV_LOCK_E device) { diff --git a/RTL00_SDKV35a/component/os/os_dep/include/os_support.h b/RTL00_SDKV35a/component/os/os_dep/include/os_support.h index 9625342..58db97d 100644 --- a/RTL00_SDKV35a/component/os/os_dep/include/os_support.h +++ b/RTL00_SDKV35a/component/os/os_dep/include/os_support.h @@ -49,11 +49,12 @@ //#define RtlKmalloc(size, flag) pvPortMallocAligned(size, 0) #define RtlKmalloc(size, flag) pvPortMalloc(size) -#define RtlKfree(pv) vPortFreeAligned(pv) +#define RtlKfree(pv) vPortFree(pv) #ifdef CONFIG_TIMER_MODULE +extern _LONG_CALL_ unsigned int HalDelayUs(unsigned int us); #define __Delay(t) HalDelayUs(t) #else static __inline__ u32 __Delay(u32 us) @@ -66,7 +67,7 @@ static __inline__ u32 __Delay(u32 us) #define Mdelay(t) __Delay(t*1000) #define Udelay(t) __Delay(t) - +#undef ASSERT #define ASSERT(_bool_) do { } while (0) //#define panic_printk DiagPrintf diff --git a/RTL00_SDKV35a/component/os/os_dep/tcm_heap.c b/RTL00_SDKV35a/component/os/os_dep/tcm_heap.c index d51556d..ac91d08 100644 --- a/RTL00_SDKV35a/component/os/os_dep/tcm_heap.c +++ b/RTL00_SDKV35a/component/os/os_dep/tcm_heap.c @@ -57,10 +57,9 @@ void tcm_heap_dump(void) { #if CONFIG_DEBUG_LOG > 1 if(!g_heap_inited) tcm_heap_init(); - MemChunk *chunk, *prev; + MemChunk *chunk; struct Heap* h = &g_tcm_heap; int count = 0; - int free_mem; DBG_8195A("TCM Free Heap Memory List:\n"); for (chunk = h->FreeList; chunk; chunk = chunk->next) { @@ -68,6 +67,7 @@ void tcm_heap_dump(void) } /* + MemChunk *prev; for (prev = (MemChunk *)&h->FreeList, chunk = h->FreeList; chunk; prev = chunk, chunk = chunk->next) diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/bitband_io.h b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/bitband_io.h index bca7984..45d75c3 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/bitband_io.h +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/bitband_io.h @@ -1,6 +1,7 @@ #ifndef _BITBAND_IO_H_ #define _BITBAND_IO_H_ +#include "PinNames.h" #include "hal_platform.h" #include "hal_api.h" #include "hal_gpio.h" @@ -10,12 +11,34 @@ #define BITBAND_SRAM_BASE 0x12000000 #define BITBAND_SRAM(a,b) (BITBAND_SRAM_BASE + (a-BITBAND_SRAM_REF)*32 + (b*4)) // Convert SRAM address -#define BITBAND_ADDR(a,b) (0x02000000 + (a & 0xF0000000) + (a - (a & 0xF0000000)) * 32 + ((b) * 4)) // Convert address ? +/* + * in hal_platform.h +#define BITBAND_REG_BASE 0x40001000 + */ + +/* + * in rtl8195a_gpio.h + * +#define BITBAND_PORTA_DR 0x00 // data register +#define BITBAND_PORTA_DDR 0x04 // data direction +#define BITBAND_PORTA_CTRL 0x08 // data source control, we should keep it as default: data source from software + +#define BITBAND_PORTB_DR 0x0c // data register +#define BITBAND_PORTB_DDR 0x10 // data direction +#define BITBAND_PORTB_CTRL 0x14 // data source control, we should keep it as default: data source from software + +#define BITBAND_PORTC_DR 0x18 // data register +#define BITBAND_PORTC_DDR 0x1c // data direction +#define BITBAND_PORTC_CTRL 0x20 // data source control, we should keep it as default: data source from software + +#define BITBAND_EXT_PORTA 0x50 // GPIO IN read or OUT read back +#define BITBAND_EXT_PORTB 0x54 // GPIO IN read or OUT read back +#define BITBAND_EXT_PORTC 0x58 // GPIO IN read or OUT read back +*/ #define BITBAND_PERI_REF 0x40000000 #define BITBAND_PERI_BASE 0x42000000 -#define BITBAND_PERI(a,b) (BITBAND_PERI_BASE + (a - BITBAND_PERI_REF) * 32 + ((b) * 4)) // Convert PERI address - +#define BITBAND_PERI(a,b) (BITBAND_PERI_BASE + (a-BITBAND_PERI_REF)*32 + (b*4)) // Convert PERI address #define ucBITBAND_PERI(a,b) *((volatile unsigned char *)BITBAND_PERI(a,b)) #define uiBITBAND_PERI(a,b) *((volatile unsigned int *)BITBAND_PERI(a,b)) @@ -121,10 +144,10 @@ #define BITBAND_K5 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,25) //Port = 2, bit = 25, K5 #define BITBAND_K6 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,26) //Port = 2, bit = 26, K6 -volatile u8 * BitBandAddr(void *addr, u8 bit); -volatile u8 * BitBandPeriAddr(void *addr, u8 bit); -volatile u8 * GetOutPinBitBandAddr(PinName pin); -volatile u8 * GetInpPinBitBandAddr(PinName pin); -volatile u8 * HardSetPin(PinName pin, PinDirection pdir, PinMode pmode, u8 val); +volatile uint8_t * BitBandAddr(void *addr, uint8_t bit); +volatile uint8_t * BitBandPeriAddr(void *addr, uint8_t bit); +volatile uint8_t * GetOutPinBitBandAddr(PinName pin); +volatile uint8_t * GetInPinBitBandAddr(PinName pin); +volatile uint8_t * HardSetPin(PinName pin, HAL_GPIO_PIN_MODE pmode, uint8_t val); #endif // _BITBAND_IO_H_ diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/hal_diag.h b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/hal_diag.h index 3594b89..bfb8c07 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/hal_diag.h +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/hal_diag.h @@ -74,9 +74,9 @@ typedef struct _LOG_UART_ADAPTER_ { typedef struct _COMMAND_TABLE_ { const u8* cmd; u16 ArgvCnt; - u32 (*func)(u16 argc, u8* argv[]); + void (*func)(int argc, char * argv[]); // u32 (*func)(u16 argc, u8* argv[]); const u8* msg; -}COMMAND_TABLE, *PCOMMAND_TABLE; +} COMMAND_TABLE, *PCOMMAND_TABLE; //VOID //HalLogUartHandle(void); diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/rtl_bios_data.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/rtl_bios_data.c index e9bb21b..665352b 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/rtl_bios_data.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/rtl_bios_data.c @@ -116,7 +116,7 @@ HAL_CUT_B_RAM_DATA_SECTION u32 rand_x = 123456789; // 10000be4 0, \ "", \ 0, \ - 0x0437DC, \ + (void *)0x0437DC, \ 0, \ _NULL, \ _NULL, \ diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot.c index 1fcfab6..d07c17a 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot.c @@ -257,12 +257,12 @@ LOCAL int BOOT_RAM_TEXT_SECTION SetSpicBitMode(uint8 BitMode) { } void BOOT_RAM_TEXT_SECTION InitSpicFlashType(struct spic_table_flash_type *ptable_flash) { - u8 * ptrb = &ptable_flash->cmd; - volatile u32 * ptrreg = (volatile u32 *)(SPI_FLASH_CTRL_BASE + REG_SPIC_READ_FAST_SINGLE);// 0x400060E0 + uint8 * ptrb = (uint8 *)&ptable_flash->cmd; + volatile uint32 * ptrreg = (volatile uint32 *)(SPI_FLASH_CTRL_BASE + REG_SPIC_READ_FAST_SINGLE);// 0x400060E0 HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); // Disable SPI_FLASH User Mode do { *ptrreg++ = *ptrb++; - } while(ptrb < (u8 *)(&ptable_flash->fsize)); + } while(ptrb < (uint8 *)(&ptable_flash->fsize)); ptrreg[0] = ptable_flash->contrl; ptrreg[1] = ptable_flash->validcmd[SpicOneBitMode]; ptrreg[2] = ptable_flash->fsize; @@ -387,6 +387,7 @@ typedef enum { SEG_ID_MAX } _SEG_ID; +#if CONFIG_DEBUG_LOG > 1 LOCAL const char * const txt_tab_seg[] = { "UNK", // 0 "SRAM", // 1 @@ -397,6 +398,7 @@ LOCAL const char * const txt_tab_seg[] = { "CPU", // 6 "ROM" // 7 }; +#endif LOCAL const uint32 tab_seg_def[] = { 0x10000000, 0x10070000, 0x1fff0000, 0x20000000, 0x30000000, 0x30200000, 0x40000000, 0x40800000, 0x98000000, @@ -404,7 +406,7 @@ LOCAL const uint32 tab_seg_def[] = { 0x10000000, 0x10070000, 0x1fff0000, LOCAL uint32 BOOT_RAM_TEXT_SECTION get_seg_id(uint32 addr, int32 size) { uint32 ret = SEG_ID_ERR; - uint32 * ptr = &tab_seg_def; + uint32 * ptr = (uint32 *) &tab_seg_def; if (size > 0) { do { ret++; @@ -447,7 +449,7 @@ LOCAL uint32 BOOT_RAM_TEXT_SECTION load_segs(uint32 faddr, PIMG2HEAD hdr, segnum, faddr, txt_tab_seg[seg_id], hdr->seg.ldaddr, hdr->seg.size); #endif - fnextaddr += flashcpy(fnextaddr, hdr->seg.ldaddr, hdr->seg.size); + fnextaddr += flashcpy(fnextaddr, (void *)hdr->seg.ldaddr, hdr->seg.size); } else if (seg_id) { #if CONFIG_DEBUG_LOG > 2 DBG_8195A("Skip Flash seg%d: 0x%08x -> %s: 0x%08x, size: %d\n", segnum, @@ -457,7 +459,7 @@ LOCAL uint32 BOOT_RAM_TEXT_SECTION load_segs(uint32 faddr, PIMG2HEAD hdr, } else { break; } - fnextaddr += flashcpy(fnextaddr, &hdr->seg, sizeof(IMGSEGHEAD)); + fnextaddr += flashcpy(fnextaddr, (void *) &hdr->seg, sizeof(IMGSEGHEAD)); segnum++; } return fnextaddr; @@ -476,7 +478,7 @@ LOCAL int BOOT_RAM_TEXT_SECTION loadUserImges(int imgnum) { faddr = (faddr + FLASH_SECTOR_SIZE - 1) & (~(FLASH_SECTOR_SIZE - 1)); uint32 img_id = load_img2_head(faddr, &hdr); if ((img_id >> 8) > 4 || (uint8) img_id != 0) { - faddr = load_segs(faddr + 0x10, &hdr.seg, imagenum == imgnum); + faddr = load_segs(faddr + 0x10, &hdr, imagenum == imgnum); if (imagenum == imgnum) { // DBG_8195A("Image%d: %s\n", imgnum, hdr.name); break; @@ -544,7 +546,7 @@ LOCAL void BOOT_RAM_TEXT_SECTION RtlConsolRam(void) { pUartLogCtl->pTmpLogBuf->UARTLogBuf[0] = '?'; pUartLogCtl->pTmpLogBuf->BufCount = 1; pUartLogCtl->ExecuteCmd = 1; - RtlConsolTaskRom(pUartLogCtl); + RtlConsolTaskRom((void *)pUartLogCtl); } /* Enter Image 1.5 */ diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/startup.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/startup.c index 209310d..c09b301 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/startup.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/startup.c @@ -26,6 +26,15 @@ extern void xPortPendSVHandler(void); extern void xPortSysTickHandler(void); extern void vPortSVCHandler(void); extern void rtl_libc_init(void); +extern _LONG_CALL_ void HalCpuClkConfig(unsigned char CpuType); +extern void PSHalInitPlatformLogUart(void); +extern _LONG_CALL_ void UartLogCmdExecute(PUART_LOG_CTL pUartLogCtlExe); +extern void HalReInitPlatformTimer(void); +extern void SystemCoreClockUpdate (void); +extern void En32KCalibration(void); +extern void SdrCtrlInit(void); +extern void InitSoCPM(void); +extern u32 SdrControllerInit(void); //extern void ShowRamBuildInfo(void); // app_start.c: VOID ShowRamBuildInfo(VOID) //void HalNMIHandler_Patch(void); void SDIO_Device_Off(void); @@ -97,7 +106,7 @@ __weak int main(void) { DiagPrintf("\r"); while (1) { while (pUartLogCtl->ExecuteCmd != 1); - UartLogCmdExecute(pUartLogCtl); + UartLogCmdExecute((PUART_LOG_CTL) pUartLogCtl); DiagPrintf("\r"); pUartLogCtl->ExecuteCmd = 0; } diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_sdio_host.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_sdio_host.c index 56e5d2b..31b22a0 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_sdio_host.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_sdio_host.c @@ -1,6 +1,7 @@ /* */ #include "rtl8195a.h" +#include "hal_sdio_host.h" #include "rtl8195a_sdio_host.h" //------------------------------------------------------------------------- // Function declarations @@ -11,7 +12,7 @@ void SdioHostSdBusPwrCtrl(uint8_t En, int a2); int SdioHostSdClkCtrl(void *Data, int En, int Divisor); int SdioHostChkDataLineActive(uint32_t Timeout); - int SdioHostChkCmdInhibitCMD(uint32_t Timeout); + int SdioHostChkCmdInhibitCMD(void); //uint32_t Timeout); int SdioHostChkCmdInhibitDAT(uint32_t Timeout); uint32_t SdioHostIsrHandle(void *Data); int HalSdioHostDeInitRtl8195a(void *Data); @@ -46,6 +47,11 @@ //------------------------------------------------------------------------- // Data declarations //------------------------------------------------------------------------- +#define HAL_SDIOH_REG32(a) (*(volatile unsigned int *)(SDIO_HOST_REG_BASE+a)) +#define HAL_SDIOH_REG16(a) (*(volatile unsigned short *)(SDIO_HOST_REG_BASE+a)) +#define HAL_SDIOH_REG8(a) (*(volatile unsigned char *)(SDIO_HOST_REG_BASE+a)) + + //-----SdioHostIsTimeout(StartCount, TimeoutCnt) HAL_Status SdioHostIsTimeout(u32 StartCount, u32 TimeoutCnt) { u32 t1, t2; @@ -64,22 +70,21 @@ HAL_Status SdioHostIsTimeout(u32 StartCount, u32 TimeoutCnt) { //----- SdioHostSendCmd(PSDIO_HOST_CMD) void SdioHostSendCmd(PSDIO_HOST_CMD Cmd) { - u16 reg_cmd = ((*(u8 *) &Cmd->CmdFmt & 0x3B) | (*(u8 *) &Cmd->CmdFmt & 0xC0) - | ((*((u8 *) &Cmd->CmdFmt + 1) & 0x3F) << 8)); - HAL_SDIO_HOST_WRITE32(REG_SDIO_HOST_ARG, Cmd->Arg); // 40058008 = Cmd->Arg - HAL_SDIO_HOST_WRITE16(REG_SDIO_HOST_CMD, reg_cmd); // 4005800E = reg_cmd + HAL_SDIOH_REG32(REG_SDIO_HOST_ARG) = Cmd->Arg; // 40058008 = Cmd->Arg + HAL_SDIOH_REG16(REG_SDIO_HOST_CMD) = *(u16 *) &Cmd->CmdFmt; // & 0x3FFB; } //----- HAL_Status SdioHostGetResponse(void *Data, int RspType) { + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; HAL_Status result; - if (Data) { - *((u32 *) Data + 5) = HAL_SDIO_HOST_READ32(REG_SDIO_HOST_RSP0); // 40058010; - *((u32 *) Data + 6) = HAL_SDIO_HOST_READ32(REG_SDIO_HOST_RSP2); + if (psha) { + psha->Response[0] = HAL_SDIOH_REG32(REG_SDIO_HOST_RSP0); // 40058010; + psha->Response[1] = HAL_SDIOH_REG32(REG_SDIO_HOST_RSP2); if (RspType == 1) { - *((u32 *) Data + 7) = HAL_SDIO_HOST_READ32(REG_SDIO_HOST_RSP4); - *((u32 *) Data + 8) = HAL_SDIO_HOST_READ32(REG_SDIO_HOST_RSP6); + psha->Response[2] = HAL_SDIOH_REG32(REG_SDIO_HOST_RSP4); + psha->Response[3] = HAL_SDIOH_REG32(REG_SDIO_HOST_RSP6); } result = HAL_OK; } else @@ -88,236 +93,161 @@ HAL_Status SdioHostGetResponse(void *Data, int RspType) { } //----- -void SdioHostSdBusPwrCtrl(uint8_t En) { - u8 reg_pwr; - - HAL_SDIO_HOST_WRITE8(REG_SDIO_HOST_PWR_CTRL, - HAL_SDIO_HOST_READ8(REG_SDIO_HOST_PWR_CTRL) & (~ PWR_CTRL_SD_BUS_PWR)); - if (HAL_SDIO_HOST_READ32(REG_SDIO_HOST_CAPABILITIES) & CAPA_VOLT_SUPPORT_33V) { - DBG_SDIO_WARN("Supply SD bus voltage: 3.3V\n"); - reg_pwr = VOLT_30V << 1; - goto set_pwr; - } - if (HAL_SDIO_HOST_READ32(REG_SDIO_HOST_CAPABILITIES) & CAPA_VOLT_SUPPORT_30V) { - DBG_SDIO_WARN("Supply SD bus voltage: 3.0V\n"); - reg_pwr = VOLT_30V << 1; - goto set_pwr; - } - if (HAL_SDIO_HOST_READ32(REG_SDIO_HOST_CAPABILITIES) & CAPA_VOLT_SUPPORT_18V) { +//void SdioHostSdBusPwrCtrl(uint8_t En) { +void SdioHostSdBusPwrCtrl(void) { + HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) &= ~ PWR_CTRL_SD_BUS_PWR; + if (HAL_SDIOH_REG32(REG_SDIO_HOST_CAPABILITIES) & CAPA_VOLT_SUPPORT_18V) { DBG_SDIO_WARN("Supply SD bus voltage: 1.8V\n"); - reg_pwr = VOLT_18V << 1; - goto set_pwr; + HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) = VOLT_18V << 1; } - DBG_SDIO_ERR("No supported voltage\n"); - goto exit_; - set_pwr: - HAL_SDIO_HOST_WRITE8(REG_SDIO_HOST_PWR_CTRL, reg_pwr); - exit_: - HAL_SDIO_HOST_WRITE8(REG_SDIO_HOST_PWR_CTRL, - HAL_SDIO_HOST_READ8(REG_SDIO_HOST_PWR_CTRL) | PWR_CTRL_SD_BUS_PWR); + else if (HAL_SDIOH_REG32(REG_SDIO_HOST_CAPABILITIES) & CAPA_VOLT_SUPPORT_30V) { + DBG_SDIO_WARN("Supply SD bus voltage: 3.0V\n"); + HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) = VOLT_30V << 1; + } + else if (HAL_SDIOH_REG32(REG_SDIO_HOST_CAPABILITIES) & CAPA_VOLT_SUPPORT_33V) { + DBG_SDIO_WARN("Supply SD bus voltage: 3.3V\n"); + HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) = VOLT_33V << 1; + } + else DBG_SDIO_ERR("No supported voltage\n"); + HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) |= PWR_CTRL_SD_BUS_PWR; } //----- -HAL_Status SdioHostSdClkCtrl(void *Data, int En, int Divisor) { // SD_CLK_DIVISOR - u8 *v3; // r3@1 - HAL_Status result; - char v5; // r2@7 - - v3 = Data; - result = HAL_SDIO_HOST_READ32(REG_SDIO_HOST_PRESENT_STATE) - & (PRES_STATE_CMD_INHIBIT_CMD | PRES_STATE_CMD_INHIBIT_DAT); // v40058024 & 3; - if (HAL_SDIO_HOST_READ32(REG_SDIO_HOST_PRESENT_STATE) - & (PRES_STATE_CMD_INHIBIT_CMD | PRES_STATE_CMD_INHIBIT_DAT) != 0) { - result = HAL_BUSY; +HAL_Status SdioHostSdClkCtrl(void *Data, int En, u8 Divisor) { // SD_CLK_DIVISOR + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + if (HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) + & (PRES_STATE_CMD_INHIBIT_CMD | PRES_STATE_CMD_INHIBIT_DAT)) { + return HAL_BUSY; } else { if (!En) { - v4005802C &= 0xFFFBu; - return 0; + HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) &= ~CLK_CTRL_SD_CLK_EN; } - v4005802C &= 0xFFFBu; - v4005802C = v4005802C | (u16) ((u16) Divisor << 8); - v4005802C |= 4u; - if (Divisor == 8) { // BASE_CLK_DIVIDED_BY_16 - v5 = 4; - goto LABEL_23; - } - if ((unsigned int) Divisor > 8) { - if (Divisor == 32) { // BASE_CLK_DIVIDED_BY_64 - v5 = 2; - goto LABEL_23; - } - if ((unsigned int) Divisor > 0x20) { // BASE_CLK_DIVIDED_BY_64 - if (Divisor == 64) { // BASE_CLK_DIVIDED_BY_128 - v5 = 1; - goto LABEL_23; - } - if (Divisor == 128) { // BASE_CLK_DIVIDED_BY_256 - v3[133] = 0; - return result; - } - } else if (Divisor == 16) { - v5 = 3; - goto LABEL_23; - } - } else { - if (Divisor == 1) { // BASE_CLK_DIVIDED_BY_2 - v5 = 7; - goto LABEL_23; - } - if ((unsigned int) Divisor < 1) { // BASE_CLK < BASE_CLK_DIVIDED_BY_2 - v5 = 8; - LABEL_23: v3[133] = v5; - return result; - } - if (Divisor == 2) { // BASE_CLK_DIVIDED_BY_4 - v5 = 6; - goto LABEL_23; - } - if (Divisor == 4) { // BASE_CLK_DIVIDED_BY_8 - v5 = 5; - goto LABEL_23; + else { + switch(Divisor) { + case BASE_CLK: + psha->CurrSdClk = SD_CLK_41_6MHZ; + break; + case BASE_CLK_DIVIDED_BY_2: + psha->CurrSdClk = SD_CLK_20_8MHZ; + break; + case BASE_CLK_DIVIDED_BY_4: + psha->CurrSdClk = SD_CLK_10_4MHZ; + break; + case BASE_CLK_DIVIDED_BY_8: + psha->CurrSdClk = SD_CLK_5_2MHZ; + break; + case BASE_CLK_DIVIDED_BY_16: + psha->CurrSdClk = SD_CLK_2_6MHZ; + break; + case BASE_CLK_DIVIDED_BY_32: + psha->CurrSdClk = SD_CLK_1_3MHZ; + break; + case BASE_CLK_DIVIDED_BY_64: + psha->CurrSdClk = SD_CLK_650KHZ; + break; + case BASE_CLK_DIVIDED_BY_128: + psha->CurrSdClk = SD_CLK_325KHZ; + break; + case BASE_CLK_DIVIDED_BY_256: + psha->CurrSdClk = SD_CLK_162KHZ; + break; + default: + DBG_SDIO_ERR("Unsupported SDCLK divisor!\n"); + Divisor = 0; + psha->CurrSdClk = SD_CLK_41_6MHZ; } } - - DBG_SDIO_ERR("Unsupported SDCLK divisor!\n"); - return 0; + HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) = (Divisor << 8) | CLK_CTRL_SD_CLK_EN | CLK_CTRL_INTERAL_CLK_EN; } - return result; + return HAL_OK; } -//----- SdioHostChkDataLineActive(uint32_t Timeout) -HAL_Status SdioHostChkDataLineActive(uint32_t Timeout) { +#define SD_CHK_TIMEOUT 3225 + +//----- SdioHostChkDataLineActive +HAL_Status SdioHostChkDataLineActive(void) { HAL_Status result; u32 t1 = HalTimerOp.HalTimerReadCount(1); do { - if ((HAL_SDIO_HOST_READ32(REG_SDIO_HOST_PRESENT_STATE) + if ((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) & PRES_STATE_DAT_LINE_ACTIVE) == 0) break; - result = SdioHostIsTimeout(t1, 3225); + result = SdioHostIsTimeout(t1, SD_CHK_TIMEOUT); } while (result != HAL_TIMEOUT); return result; } -//----- SdioHostChkCmdInhibitCMD(uint32_t Timeout) -HAL_Status SdioHostChkCmdInhibitCMD(uint32_t Timeout) { +//----- SdioHostChkCmdInhibitCMD +HAL_Status SdioHostChkCmdInhibitCMD(void) { HAL_Status result; u32 t1 = HalTimerOp.HalTimerReadCount(1); do { - if ((HAL_SDIO_HOST_READ32(REG_SDIO_HOST_PRESENT_STATE) + if ((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) & PRES_STATE_CMD_INHIBIT_CMD) == 0) break; - result = SdioHostIsTimeout(t1, 3225); + result = SdioHostIsTimeout(t1, SD_CHK_TIMEOUT); } while (result != HAL_TIMEOUT); return result; } -//----- SdioHostChkCmdInhibitDAT(uint32_t Timeout) -int SdioHostChkCmdInhibitDAT(uint32_t Timeout) { +//----- SdioHostChkCmdInhibitDAT +int SdioHostChkCmdInhibitDAT(void) { HAL_Status result; u32 t1 = HalTimerOp.HalTimerReadCount(1); do { - if ((HAL_SDIO_HOST_READ32(REG_SDIO_HOST_PRESENT_STATE) + if ((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) & PRES_STATE_CMD_INHIBIT_DAT) == 0) break; - result = SdioHostIsTimeout(t1, 3225); + result = SdioHostIsTimeout(t1, SD_CHK_TIMEOUT); } while (result != HAL_TIMEOUT); return result; } -//----- (0000028C) -------------------------------------------------------- -void SdioHostIsrHandle(void *Data) { - int v1; // r5@1 - u32 *v2; // r4@1 - uint8_t v3; // r0@7 - int v4; // r1@7 - void (*v5)(u32); // r3@7 - void (*v6)(u32); // r3@10 -// uint32_t result; // r0@14 - - v1 = v40058030; - v40058038 = 0; - v2 = Data; - if (v1) { - if (v1 << 31 < 0) - *((u8 *) Data + 128) = 1; - if (v1 << 30 < 0) - *((u8 *) Data + 129) = 1; - if (v1 & NOR_INT_STAT_CARD_INSERT) // 0x40 - { - v3 = SdioHostSdClkCtrl(Data, 1, BASE_CLK_DIVIDED_BY_128); // BASE_CLK_DIVIDED_BY_128 - SdioHostSdBusPwrCtrl(v3, v4); - v5 = (void (*)(u32)) v2[35]; - if (v5) - v5(v2[37]); - } - if (v1 & NOR_INT_STAT_CARD_REMOVAL) // 0x80 - { - v40058029 &= 0xFEu; - SdioHostSdClkCtrl(v2, 0, BASE_CLK); // BASE_CLK - v6 = (void (*)(u32)) v2[36]; - if (v6) - v6(v2[38]); - } - if (v1 & NOR_INT_STAT_ERR_INT) // 0x8000 ) - { - v4005803A = 0; - *((u8 *) v2 + 130) = 1; - } - } - v40058034 = 195; -// result = 0; - v40058038 = 195; -// return 0; -} - -//----- (00000328) -------------------------------------------------------- +//----- HalSdioHostDeInitRtl8195a HAL_Status HalSdioHostDeInitRtl8195a(IN VOID *Data) { - void *v1; // r5@1 - int v2; // r4@1 + HAL_Status ret; // r4@1 - PHAL_SDIO_HOST_ADAPTER v1 = Data; - v40058029 &= 0xFEu; - v2 = SdioHostSdClkCtrl(Data, 0, BASE_CLK); - if (!v2) { - if (v1) { - VectorIrqDisRtl8195A(v1); - VectorIrqUnRegisterRtl8195A(v1); - v4005802C &= 0xFFFEu; - v40059000 &= 0xFFFFFBFF; - v40000214 &= 0xFFFFFFFB; - HalPinCtrlRtl8195A(65, 0, 0); - v40000240 &= 0xFFFFFFF7; - v40000240 &= 0xFFFFFFFB; + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) &= ~PWR_CTRL_SD_BUS_PWR; + ret = SdioHostSdClkCtrl(psha, 0, BASE_CLK); + if (ret == HAL_OK) { + if (psha) { + VectorIrqDisRtl8195A(&psha->IrqHandle); + VectorIrqUnRegisterRtl8195A(psha); + HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) &= ~CLK_CTRL_INTERAL_CLK_EN; + HAL_SDIOH_REG32(0x1000) &= 0xFFFFFBFF; // v40059000 + HAL_WRITE32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN, + HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN) & (~BIT_SOC_HCI_SDIOH_EN)); + HalPinCtrlRtl8195A(SDIOH, 0, 0); + ACTCK_SDIOH_CCTRL(OFF); + SLPCK_SDIOH_CCTRL(OFF); } else { - v2 = 3; + ret = HAL_ERR_PARA; } } - return v2; + return ret; } -// 23DC: using guessed type int VectorIrqDisRtl8195A(u32); -// 23E0: using guessed type int VectorIrqUnRegisterRtl8195A(u32); -// 23E4: using guessed type int HalPinCtrlRtl8195A(u32, u32, u32); -//----- (000003C0) -------------------------------------------------------- +//----- HalSdioHostEnableRtl8195a HAL_Status HalSdioHostEnableRtl8195a(IN VOID *Data) // // PHAL_SDIO_HOST_ADAPTER Data { - v40000240 |= 4u; - v40000240 |= 8u; - v4005802C |= 1u; - while (!(v4005802C & 2)) - ; +// PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + ACTCK_SDIOH_CCTRL(ON); + SLPCK_SDIOH_CCTRL(ON); + HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) |= CLK_CTRL_INTERAL_CLK_EN; + while (!(HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) & CLK_CTRL_INTERAL_CLK_STABLE)); return SdioHostSdClkCtrl(Data, 1, BASE_CLK_DIVIDED_BY_2); } -//----- (000003F8) -------------------------------------------------------- +//----- HalSdioHostDisableRtl8195a HAL_Status HalSdioHostDisableRtl8195a(IN VOID *Data) { int result; // r0@1 result = SdioHostSdClkCtrl(Data, 0, BASE_CLK); - if (!result) { - v4005802C &= 0xFFFEu; - v40000240 &= 0xFFFFFFF7; - v40000240 &= 0xFFFFFFFB; + if (result == HAL_OK) { + HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) &= ~CLK_CTRL_INTERAL_CLK_EN; + ACTCK_SDIOH_CCTRL(OFF); + SLPCK_SDIOH_CCTRL(OFF); } return result; } @@ -326,14 +256,14 @@ HAL_Status HalSdioHostDisableRtl8195a(IN VOID *Data) { HAL_Status HalSdioHostIrqInitRtl8195a(IN VOID *Data) // PIRQ_HANDLE Data { HAL_Status result; - PIRQ_HANDLE v1 = Data; - if (v1) { - v1->Data = Data; - v1->IrqNum = SDIO_HOST_IRQ; - v1->IrqFun = SdioHostIsrHandle; - v1->Priority = 6; - VectorIrqRegisterRtl8195A((PIRQ_HANDLE) v1); - VectorIrqEnRtl8195A((PIRQ_HANDLE) v1); + PIRQ_HANDLE pih = Data; + if (pih) { + pih->Data = Data; + pih->IrqNum = SDIO_HOST_IRQ; + pih->IrqFun = SdioHostIsrHandle; + pih->Priority = 6; + VectorIrqRegisterRtl8195A((PIRQ_HANDLE) pih); + VectorIrqEnRtl8195A((PIRQ_HANDLE) pih); result = HAL_OK; } else result = HAL_ERR_PARA; @@ -342,6 +272,8 @@ HAL_Status HalSdioHostIrqInitRtl8195a(IN VOID *Data) // PIRQ_HANDLE Data //----- HalSdioHostInitHostRtl8195a HAL_Status HalSdioHostInitHostRtl8195a(IN VOID *Data) { + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + HAL_WRITE32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0, HAL_READ32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0) & (~BIT_SOC_ACTCK_SDIO_DEV_EN)); HAL_WRITE32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN, @@ -360,360 +292,507 @@ HAL_Status HalSdioHostInitHostRtl8195a(IN VOID *Data) { HalPinCtrlRtl8195A(SDIOH, 0, 1); HAL_WRITE32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN, HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN) | BIT_SOC_HCI_SDIOH_EN); - HAL_SDIO_HOST_WRITE8(REG_SDIO_HOST_SW_RESET, - HAL_SDIO_HOST_READ8(REG_SDIO_HOST_SW_RESET) | 1); //4005802F |= 1; + HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) |= SW_RESET_FOR_ALL; //4005802F |= 1; int x = 1000; - while (HAL_SDIO_HOST_READ8(REG_SDIO_HOST_SW_RESET) & 1) { + while (HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) & SW_RESET_FOR_ALL) { if (x-- == 0) { DBG_SDIO_ERR("SD host initialization FAIL!\n"); return HAL_TIMEOUT; } } - HalSdioHostIrqInitRtl8195a(Data); - HAL_SDIO_HOST_WRITE16(REG_SDIO_HOST_ERROR_INT_STATUS_EN, 195); // 40058034 = 195; - HAL_SDIO_HOST_WRITE16(REG_SDIO_HOST_NORMAL_INT_SIG_EN, 195); // 40058038 = 195; - HAL_SDIO_HOST_WRITE16(REG_SDIO_HOST_ERROR_INT_STATUS_EN, 127); // 40058036 = 127; - HAL_SDIO_HOST_WRITE16(REG_SDIO_HOST_ERROR_INT_SIG_EN, 127); // 4005803A = 127; - HAL_SDIO_HOST_WRITE16(REG_SDIO_HOST_CLK_CTRL, - HAL_SDIO_HOST_READ16(REG_SDIO_HOST_CLK_CTRL) | CLK_CTRL_INTERAL_CLK_EN); // 4005802C |= 1; + HalSdioHostIrqInitRtl8195a(&psha->IrqHandle); + HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN) + = NOR_INT_STAT_EN_CMD_COMP + | NOR_INT_STAT_EN_XFER_COMP + | NOR_INT_STAT_EN_CARD_REMOVAL + | NOR_INT_STAT_EN_CARD_INT; // 0xC3; + HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_SIG_EN) + = NOR_INT_SIG_EN_CMD_COMP + | NOR_INT_SIG_EN_XFER_COMP + | NOR_INT_SIG_EN_CARD_REMOVAL + | NOR_INT_SIG_EN_CARD_INT; // 195; + + + HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS_EN) = 0x17F; + HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_SIG_EN) = 0x17F; + HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) |= CLK_CTRL_INTERAL_CLK_EN; x = 1000; - while (!(HAL_SDIO_HOST_READ16(REG_SDIO_HOST_CLK_CTRL) + while (!(HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) & CLK_CTRL_INTERAL_CLK_STABLE)) { if (x-- == 0) { DBG_SDIO_ERR("SD host initialization FAIL!\n"); return HAL_TIMEOUT; } } - HAL_WRITE32(SYSTEM_CTRL_BASE, 0x59000, - HAL_READ32(SYSTEM_CTRL_BASE, 0x59000) | 0x400); // 40059000 |= 0x400; - if (HAL_SDIO_HOST_READ32(REG_SDIO_HOST_CAPABILITIES) & 0x80000) - HAL_SDIO_HOST_WRITE16(REG_SDIO_HOST_HOST_CTRL, 16); //40058028 = 16; - HAL_SDIO_HOST_WRITE8(REG_SDIO_HOST_TIMEOUT_CTRL, 14); //4005802E = 14; - return 0; + HAL_SDIOH_REG32(0x1000) |= 0x400; // 40059000 |= 0x400; + if (HAL_SDIOH_REG32(REG_SDIO_HOST_CAPABILITIES) & CAPA_ADMA2_SUPPORT) + HAL_SDIOH_REG16(REG_SDIO_HOST_HOST_CTRL) = 0x10; // 32-bit Address ADMA2 is selected + HAL_SDIOH_REG8(REG_SDIO_HOST_TIMEOUT_CTRL) = 0x0E; // TMCLK x 2^27 + return HAL_OK; } -//----- (00000578) -------------------------------------------------------- +//----- HalSdioHostStopTransferRtl8195a HAL_Status HalSdioHostStopTransferRtl8195a(IN VOID *Data) { - u8 *v2; // r4@1 - int result; // r0@2 - char v4; // r2@4 - uint32_t v5; // r1@4 - signed int v6; // r2@4 - SDIO_HOST_CMD Cmd; // [sp+0h] [bp-10h]@1 + HAL_Status result; + SDIO_HOST_CMD Cmd; + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - *(u32 *) &Cmd.CmdFmt = Data; - Cmd.Arg = a2; - v2 = Data; - if (Data) { - result = SdioHostChkCmdInhibitCMD((uint32_t) Data); - if (!result) { - result = SdioHostChkCmdInhibitDAT(0); - if (!result) { - Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(u8 *) &Cmd.CmdFmt | 0x1B) - & 0xDF | 0xC0); - v4 = *((u8 *) &Cmd.CmdFmt + 1); - v2[128] = 0; - v2[129] = 0; + if (psha) { + result = SdioHostChkCmdInhibitCMD(); //(uint32_t) Data); + if (result == HAL_OK) { + result = SdioHostChkCmdInhibitDAT(); + if (result == HAL_OK) { + + psha->CmdCompleteFlg = 0; + psha->XferType = SDIO_XFER_NOR; + psha->XferCompleteFlg = 0; + + Cmd.CmdFmt.RespType = RSP_LEN_48_CHK_BUSY; + Cmd.CmdFmt.Rsvd0 = 0; + Cmd.CmdFmt.CmdCrcChkEn = 1; + Cmd.CmdFmt.CmdIdxChkEn = 0; + Cmd.CmdFmt.DataPresent = NO_DATA; + Cmd.CmdFmt.CmdType = ABORT; + Cmd.CmdFmt.CmdIdx = CMD_STOP_TRANSMISSION; + Cmd.CmdFmt.Rsvd1 = 0; Cmd.Arg = 0; - *((u8 *) &Cmd.CmdFmt + 1) = v4 & 0xC0 | 0xC; + SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(v2, v5); - if (!result) - result = SdioHostChkXferComplete(v2, 0x1388u, v6); } } } else { - result = 3; + result = HAL_ERR_PARA; } return result; } -//----- (000005D8) -------------------------------------------------------- -signed int SdioHostErrIntRecovery(void *Data, int a2, signed int a3) { - u8 *v3; // r6@1 - __int16 v4; // r5@4 - int v5; // r3@5 - const char *v6; // r0@11 - signed int result; // r0@13 - int v8; // r3@15 - int v9; // r0@24 - const char *v10; // r0@32 +//----- SdioHostErrIntRecovery +HAL_Status SdioHostErrIntRecovery(void *Data) { + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + int t; - v3 = Data; - if (!Data) - return 3; - DBG_SDIO_ERR("Recovering error interrupt...\n", a2, a3); - v4 = v40058032; - if (v40058032 << 28) { - v4005802F |= 2u; - v5 = 0; - while (1) { - ++v5; - a2 = v4005802F << 30; - if (!(v4005802F & 2)) - break; - a2 = 1001; - if (v5 == 1001) - goto LABEL_14; - } - if (v5 == 1000) { - DBG_SDIO_ERR("CMD line reset timeout!\n"); - return 2; + if (!psha) return HAL_ERR_PARA; + DBG_SDIO_ERR("Recovering error interrupt...\n"); + u16 ierr = HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS); // v40058032; + + if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) + & ( ERR_INT_STAT_CMD_TIMEOUT + | ERR_INT_STAT_CMD_CRC + | ERR_INT_STAT_CMD_END_BIT + | ERR_INT_STAT_CMD_IDX)) { + HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) |= SW_RESET_FOR_CMD; + int t = 0; + while((HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) & SW_RESET_FOR_CMD)) { + if(++t > 1000) { + DBG_SDIO_ERR("CMD line reset timeout!\n"); + return HAL_TIMEOUT; + } } } - LABEL_14: if (v40058032 & 0x70) { - v4005802F |= 4u; - v8 = 0; - while (1) { - ++v8; - a2 = v4005802F << 29; - if (!(v4005802F & 4)) - break; - a2 = 1001; - if (v8 == 1001) - goto LABEL_22; - } - if (v8 == 1000) { - DBG_SDIO_ERR("DAT line reset timeout!\n"); - return 2; + if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) + & ( ERR_INT_STAT_DATA_TIMEOUT + | ERR_INT_STAT_DATA_CRC + | ERR_INT_STAT_DATA_END_BIT)) { + HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) |= SW_RESET_FOR_DAT; + t = 0; + while((HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) & SW_RESET_FOR_DAT)) { + if(++t > 1000) { + DBG_SDIO_ERR("DAT line reset timeout!\n"); + return HAL_TIMEOUT; + } } } - LABEL_22: - DBG_SDIO_ERR("Error interrupt status: 0x%04X\n", v40058032); - v40058032 = v4; - v3[130] = 0; - v9 = HalSdioHostStopTransferRtl8195a(v3, a2); - if (!v9) { - while (1) { - ++v9; - if (!(v40058024 & 3)) - break; - if (v9 == 1001) - goto LABEL_30; + + DBG_SDIO_ERR("Error interrupt status: 0x%04X\n", HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS)); + + HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) = ierr; + psha->ErrIntFlg = 0; + int result = HalSdioHostStopTransferRtl8195a(psha); + if (result == HAL_OK) { + t = 0; + while(HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) + & (PRES_STATE_CMD_INHIBIT_CMD | PRES_STATE_CMD_INHIBIT_DAT)) { + if(++t > 1000) break; } - if (v9 == 1000) - return 2; - LABEL_30: if (v40058032 << 28) { + if(HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) + & ( ERR_INT_STAT_CMD_TIMEOUT + | ERR_INT_STAT_CMD_CRC + | ERR_INT_STAT_CMD_END_BIT + | ERR_INT_STAT_CMD_IDX)) { DBG_SDIO_ERR("Non-recoverable error(1)!\n"); - LABEL_33: DiagPrintf(v10); - goto LABEL_34; + return HAL_ERR_UNKNOWN; } - } else { - if (v40058032 & 0x10) { + if(HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) + & ERR_INT_STAT_DATA_TIMEOUT) { DBG_SDIO_ERR("Non-recoverable error(2)!\n"); - goto LABEL_34; + return HAL_ERR_UNKNOWN; } - HalDelayUs(50); - if ((v40058024 & 0xF00000) == 15728640) { - DBG_SDIO_ERR("Recoverable error...\n"); - result = 16; - goto LABEL_44; - } - DBG_SDIO_ERR("Non-recoverable error(3)!\n"); - goto LABEL_34; + HalDelayUs(50); + if((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) & 0xF00000) != 0xF00000) { + DBG_SDIO_ERR("Non-recoverable error(3)!\n"); + return HAL_ERR_UNKNOWN; + } + DBG_SDIO_ERR("Recoverable error...\n"); + HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_SIG_EN) = 0x17F; + return 16; } - - LABEL_34: result = 238; - LABEL_44: v4005803A = 127; - return result; - DBG_SDIO_ERR("Stop transmission error!\n"); - return 238; + return HAL_ERR_UNKNOWN; } -// 23D4: using guessed type int DiagPrintf(const char *, ...); -// 23F0: using guessed type int HalDelayUs(u32); -//----- (00000748) -------------------------------------------------------- -signed int SdioHostChkXferComplete(void *Data, uint32_t Timeout, signed int a3) { - uint32_t v3; // r6@1 - u8 *v4; // r4@1 - uint32_t v5; // r5@3 - uint32_t v6; // r7@3 - signed int result; // r0@9 +//----- (0000028C) -------------------------------------------------------- +void SdioHostIsrHandle(void *Data) { + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + u16 status = HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS);// v40058030; - v3 = Timeout; - v4 = Data; - if (Data) { - if (Timeout - 1 > 0xFFFFFFFD) { - v6 = 0; - v5 = 0; - } else { - v5 = 1000 * Timeout / 0x1F; - v6 = (*((int (**)(u32)) &HalTimerOp + 2))(1); - } - do { - while (1) { - if (v4[129] && v40058024 & 0x100000) - return 0; - if (v4[130]) - return SdioHostErrIntRecovery(v4, Timeout, a3); - if (!v5) - break; - result = SdioHostIsTimeout(v6, v5); - if (result == 2) - return result; + HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_SIG_EN) = 0; + if (status) { + if (status & NOR_INT_STAT_CMD_COMP) + psha->CmdCompleteFlg = 1; + if (status & NOR_INT_STAT_XFER_COMP) { + psha->XferCompleteFlg = 1; + if ((status & NOR_INT_STAT_ERR_INT) == 0) { + if (psha->XferCompCallback) + psha->XferCompCallback(psha->XferCompCbPara); + + } else if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) & + ( ERR_INT_STAT_DATA_TIMEOUT + | ERR_INT_STAT_DATA_CRC + | ERR_INT_STAT_DATA_END_BIT)) { + DBG_SDIO_ERR("\r[SDIO Err]XFER CP with ErrIntVal: 0x%04X /0x%04X -- TYPE 0x%02X\n", + status, + HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS), + psha->XferType); + psha->errType = SDIO_ERR_DAT_CRC; + if (psha->ErrorCallback) + psha->ErrorCallback(psha->ErrorCbPara); } - } while (v3); - result = 1; - } else { - result = 3; + + } + if (status & NOR_INT_STAT_CARD_INSERT) // 0x40 + { + SdioHostSdClkCtrl(psha, 1, BASE_CLK_DIVIDED_BY_128); // BASE_CLK_DIVIDED_BY_128 + SdioHostSdBusPwrCtrl(); + if (psha->CardInsertCallBack) + psha->CardInsertCallBack(psha->CardInsertCbPara); + } + if (status & NOR_INT_STAT_CARD_REMOVAL) // 0x80 + { + HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) &= ~PWR_CTRL_SD_BUS_PWR; + SdioHostSdClkCtrl(psha, 0, BASE_CLK); // BASE_CLK + if (psha->CardRemoveCallBack) + psha->CardRemoveCallBack(psha->CardRemoveCbPara); + } + if (status & NOR_INT_STAT_CARD_INT) // 0x100 ) + { + u16 val = HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN); + HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN) = val & (~NOR_INT_STAT_EN_CARD_INT); + DBG_SDIO_ERR("CARD INT: 0x%04X\n", status); + HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN) = val; + + } + if (status & NOR_INT_STAT_ERR_INT) // 0x8000 ) + { + HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_SIG_EN) = 0; + u16 err = HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS); + + DBG_SDIO_ERR("\r[SDIO Err]XFER CP with ErrIntVal: 0x%04X /0x%04X -- TYPE 0x%02X\n", + status, + err, + psha->CmdCompleteFlg); + + if (psha->CmdCompleteFlg) { + SdioHostErrIntRecovery(psha); + goto ir_end; + } + DiagPrintf("\r[SDIO Err]Read/Write command Error\n"); + + psha->ErrIntFlg = 1; + } } +ir_end: + HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_SIG_EN) + = NOR_INT_SIG_EN_CMD_COMP + | NOR_INT_SIG_EN_XFER_COMP + | NOR_INT_SIG_EN_CARD_REMOVAL + | NOR_INT_SIG_EN_CARD_INT; // 195; +} + +//----- SdioHostChkCmdComplete +HAL_Status SdioHostChkCmdComplete(void *Data, uint32_t Timeout) { +{ + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + uint32_t TimeoutCnt; + uint32_t StartCount; + HAL_Status result; + + + if (psha) { + if (Timeout == SDIO_HOST_WAIT_FOREVER) { + StartCount = 0; + TimeoutCnt = 0; + } else { + TimeoutCnt = 1000 * Timeout / 31; + StartCount = HalTimerOp.HalTimerReadCount(1); // v6 = (*((int (**)(u32)) &HalTimerOp + 2))(1); + } + while(psha->CmdCompleteFlg == 0) { + if(psha->ErrIntFlg) + return SdioHostErrIntRecovery(psha); + if(TimeoutCnt) { + result = SdioHostIsTimeout(StartCount, TimeoutCnt); + if (result == HAL_TIMEOUT) + return result; + } else if(Timeout == 0) { + result = HAL_BUSY; + return result; + } + } + result = HAL_OK; + } else + result = HAL_ERR_PARA; return result; } -//----- (000007C4) -------------------------------------------------------- -signed int SdioHostChkCmdComplete(void *Data, uint32_t Timeout) { - void *v2; // r4@1 - int v3; // r1@2 - signed int v4; // r2@2 - uint32_t v5; // r5@2 - signed int result; // r0@5 +//----- SdioHostGetCSD +HAL_Status SdioHostGetCSD(void *Data) +{ + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + HAL_Status result; + SDIO_HOST_CMD Cmd; - v2 = Data; - if (Data) { - v5 = (*((int (**)(u32, u32)) &HalTimerOp + 2))(1, Timeout); - while (!*((u8 *) v2 + 128)) { - if (*((u8 *) v2 + 130)) - return SdioHostErrIntRecovery(v2, v3, v4); - result = SdioHostIsTimeout(v5, 1612); - if (result == 2) + if (psha) { + result = SdioHostChkCmdInhibitCMD(); + if (result == HAL_OK) { + + Cmd.CmdFmt.RespType = RSP_LEN_136; + Cmd.CmdFmt.Rsvd0 = 0; + Cmd.CmdFmt.CmdCrcChkEn = 1; + Cmd.CmdFmt.CmdIdxChkEn = 0; + Cmd.CmdFmt.DataPresent = NO_DATA; + Cmd.CmdFmt.CmdType = NORMAL; + Cmd.CmdFmt.CmdIdx = CMD_SEND_CSD; + Cmd.CmdFmt.Rsvd1 = 0; + Cmd.Arg = psha->RCA << 16; + + psha->CmdCompleteFlg = 0; + psha->XferType = 0; + + SdioHostSendCmd(&Cmd); + result = SdioHostChkCmdComplete(psha, 50); + if(result == HAL_OK) { + SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); + psha->Csd[15] = 1; + uint32 x = psha->Response[3]; + psha->Csd[0] = x >> 16; + psha->Csd[1] = x >> 8; + psha->Csd[2] = x; + x = psha->Response[2]; + psha->Csd[3] = x >> 24; + psha->Csd[4] = x >> 16; + psha->Csd[5] = x >> 8; + psha->Csd[6] = x; + x = psha->Response[1]; + psha->Csd[7] = x >> 24; + psha->Csd[8] = x >> 16; + psha->Csd[9] = x >> 8; + psha->Csd[10] = x; + x = psha->Response[0]; + psha->Csd[11] = x >> 24; + psha->Csd[12] = x >> 16; + psha->Csd[13] = x >> 8; + psha->Csd[14] = x; + } + } + } else + result = HAL_ERR_PARA; + return result; +} + +//----- SdioHostChkXferComplete +HAL_Status SdioHostChkXferComplete(void *Data) +{ + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + uint32_t StartCount; + HAL_Status result; + if (psha) { + StartCount = HalTimerOp.HalTimerReadCount(1); + while(psha->XferCompleteFlg == 0 + && (HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) + & PRES_STATE_DAT0_SIGNAL_LEVEL) == 0) { + if(psha->ErrIntFlg) + return SdioHostErrIntRecovery(psha); + result = SdioHostIsTimeout(StartCount, 161290); + if (result == HAL_TIMEOUT) return result; } - result = 0; - } else - result = 3; - + result = HAL_OK; + } else { + result = HAL_ERR_PARA; + } return result; } -//----- (0000080C) -------------------------------------------------------- -int SdioHostCardSelection(void *Data, int Select, int a3) { - u8 *v3; // r4@1 - int result; // r0@3 - char v5; // r3@5 - int v6; // r3@5 - uint32_t v7; // r1@5 - signed int v8; // r2@5 - signed int v9; // r5@6 - char v10; // r3@11 - uint32_t v11; // r1@11 +//----- SdioHostCardSelection +HAL_Status SdioHostCardSelection(void *Data, int Select) { + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + HAL_Status result; SDIO_HOST_CMD Cmd; // [sp+0h] [bp-18h]@1 - int v13; // [sp+8h] [bp-10h]@1 - *(u32 *) &Cmd.CmdFmt = Data; - Cmd.Arg = Select; - v13 = a3; - v3 = Data; - if (Data) { - if (Select == 1) { - result = SdioHostChkCmdInhibitCMD((uint32_t) Data); - if (!result) { + if (psha) { + result = SdioHostChkCmdInhibitCMD(); + if (result == HAL_OK) { + psha->CmdCompleteFlg = 0; + psha->XferType = SDIO_XFER_NOR; + psha->XferCompleteFlg = 0; + + if (Select == 1) { result = SdioHostChkCmdInhibitDAT(0); - if (!result) { - Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(u8 *) &Cmd.CmdFmt - | 0x1B) & 0x1F); - v5 = *((u8 *) &Cmd.CmdFmt + 1); - v3[128] = 0; - *((u8 *) &Cmd.CmdFmt + 1) = v5 & 0xC0 | 7; - v6 = *((u16 *) v3 + 67); - v3[129] = 0; - Cmd.Arg = v6 << 16; + if (result == HAL_OK) { + + Cmd.CmdFmt.RespType = RSP_LEN_48_CHK_BUSY; + Cmd.CmdFmt.Rsvd0 = 0; + Cmd.CmdFmt.CmdCrcChkEn = 1; + Cmd.CmdFmt.CmdIdxChkEn = 1; + Cmd.CmdFmt.DataPresent = NO_DATA; + Cmd.CmdFmt.CmdType = NORMAL; + Cmd.CmdFmt.CmdIdx = CMD_SELECT_DESELECT_CARD; + Cmd.CmdFmt.Rsvd1 = 0; + Cmd.Arg = psha->RCA << 16; + + SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(v3, v7); - if (!result) { - v9 = SdioHostChkXferComplete(v3, 0x1388u, v8); - if (v9 - || (SdioHostGetResponse(v3, - *(u8 *) &Cmd.CmdFmt & 3), v3[24] == 7)) { - result = v9; - } else { + result = SdioHostChkCmdComplete(psha, 50); + if(result == HAL_OK) { + result = SdioHostChkXferComplete(psha); + if(result != HAL_OK) return result; + result = SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); + if(result != HAL_OK) return result; + if((uint8)psha->Response[1] != 7) return result; + else { DBG_SDIO_ERR("Command index error!\n"); - result = 238; + result = HAL_ERR_UNKNOWN; } } } - } - } else { - result = SdioHostChkCmdInhibitCMD((uint32_t) Data); - if (!result) { - *(u8 *) &Cmd.CmdFmt &= 4u; - v10 = *((u8 *) &Cmd.CmdFmt + 1); - v3[128] = 0; - Cmd.Arg = 0; - *((u8 *) &Cmd.CmdFmt + 1) = v10 & 0xC0 | 7; + } else { + + Cmd.CmdFmt.RespType = NO_RSP; + Cmd.CmdFmt.Rsvd0 = 0; + Cmd.CmdFmt.CmdCrcChkEn = 0; + Cmd.CmdFmt.CmdIdxChkEn = 0; + Cmd.CmdFmt.DataPresent = NO_DATA; + Cmd.CmdFmt.CmdType = NORMAL; + Cmd.CmdFmt.CmdIdx = CMD_SELECT_DESELECT_CARD; + Cmd.CmdFmt.Rsvd1 = 0; + Cmd.Arg = psha->RCA << 16; + + SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(v3, v11); + result = SdioHostChkCmdComplete(psha, 50); } } - } else { + } else result = HAL_ERR_PARA; + return result; +} + + + + + + + + + + + + + + + + + + + + + +//----- (00000D34) -------------------------------------------------------- +HAL_Status SdioHostSwitchFunction(void *Data, int Mode, int Fn2Sel, int Fn1Sel, + uint8_t *StatusBuf) +{ + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + HAL_Status result; // r0@3 + SDIO_HOST_CMD Cmd; // [sp+0h] [bp-20h]@1 + + u8 *v5; // r4@1 + uint32_t v6; // r0@1 + int v7; // r5@1 + int v8; // r6@1 + char v9; // r7@3 + char v11; // r3@5 + uint32_t v12; // r1@5 + signed int v13; // r2@6 + uint32_t v14; // r1@6 + + + int v16; // [sp+8h] [bp-18h]@1 + + *(u32 *) &Cmd.CmdFmt = Data; + Cmd.Arg = Mode; + v16 = Fn2Sel; + v5 = Data; + v6 = *((u32 *) Data + 4); + v7 = Mode; + v8 = Fn2Sel; + if (!v6 || ((u8) Fn1Sel | (u8) v6) & 3) { result = 3; + } else { + HAL_SDIOH_REG32(REG_SDIO_HOST_ADMA_SYS_ADDR) = (uint32)psha->AdmaDescTbl; // v40058058 = v6; + HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_SIZE) = 64; // v40058004 = 64; + HAL_SDIOH_REG32(REG_SDIO_HOST_XFER_MODE) = XFER_MODE_DATA_XFER_DIR | XFER_MODE_DMA_EN; // v4005800C = 17; + + v9 = *(u8 *) v6; + *(u16 *) (v6 + 2) = 64; + *(u8 *) v6 = ((v9 | 3) & 0xFB | 4 * ((Fn1Sel | v6) & 1)) & 0xEF + | 16 * ((Fn1Sel | v6) & 1) | 0x20; + *(u32 *) (v6 + 4) = Fn1Sel; + result = SdioHostChkCmdInhibitCMD();//v6); + if (!result) { + result = SdioHostChkDataLineActive(); + if (result == HAL_OK) { + Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(u8 *) &Cmd.CmdFmt & 0xF4 + | 0x3A) & 0x3F); + v11 = *((u8 *) &Cmd.CmdFmt + 1); + v5[128] = 0; + *((u8 *) &Cmd.CmdFmt + 1) = v11 & 0xC0 | 6; + v5[129] = 0; + Cmd.Arg = v8 | 0xFFFFF0 | (v7 << 31); + SdioHostSendCmd(&Cmd); + result = SdioHostChkCmdComplete(v5);//, v12); + if (!result) { + SdioHostGetResponse(v5, *(u8 *) &Cmd.CmdFmt & 3); + result = SdioHostChkXferComplete(v5, 0x1388u, v13); + if (result) { + if (result != 16) { + if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) & ERR_INT_STAT_ADMA) { + HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) = ERR_INT_STAT_ADMA; + if (HalSdioHostStopTransferRtl8195a(psha)) { + DBG_SDIO_ERR("Stop transmission error!\n"); + } + } + } + result = 238; + } + } + } + } } return result; } -// 23D4: using guessed type int DiagPrintf(const char *, ...); -//----- (000008FC) -------------------------------------------------------- -int SdioHostGetCSD(void *Data, uint32_t a2) { - void *v2; // r4@1 - int result; // r0@2 - int v4; // r3@3 - uint32_t v5; // r1@3 - signed int v6; // r6@3 - unsigned int v7; // r3@4 - unsigned int v8; // r2@4 - unsigned int v9; // r3@4 - unsigned int v10; // r2@4 - unsigned int v11; // r3@4 - unsigned int v12; // r2@4 - unsigned int v13; // r3@4 - SDIO_HOST_CMD Cmd; // [sp+0h] [bp-18h]@1 - *(u32 *) &Cmd.CmdFmt = Data; - Cmd.Arg = a2; - v2 = Data; - if (Data) { - result = SdioHostChkCmdInhibitCMD((uint32_t) Data); - if (!result) { - Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(u8 *) &Cmd.CmdFmt & 0xFC | 9) - & 0xF); - *((u8 *) &Cmd.CmdFmt + 1) = *((u8 *) &Cmd.CmdFmt + 1) & 0xC0 | 9; - v4 = *((u16 *) v2 + 67); - *((u8 *) v2 + 128) = 0; - Cmd.Arg = v4 << 16; - SdioHostSendCmd(&Cmd); - v6 = SdioHostChkCmdComplete(v2, v5); - if (!v6) { - SdioHostGetResponse(v2, *(u8 *) &Cmd.CmdFmt & 3); - v7 = *((u32 *) v2 + 8); - *((u8 *) v2 + 127) = 1; - *((u8 *) v2 + 112) = v7 >> 16; - *((u8 *) v2 + 114) = v7; - v8 = v7 >> 8; - v9 = *((u32 *) v2 + 7); - *((u8 *) v2 + 113) = v8; - *((u8 *) v2 + 115) = BYTE3(v9); - *((u8 *) v2 + 116) = v9 >> 16; - *((u8 *) v2 + 118) = v9; - v10 = v9 >> 8; - v11 = *((u32 *) v2 + 6); - *((u8 *) v2 + 117) = v10; - *((u8 *) v2 + 119) = BYTE3(v11); - *((u8 *) v2 + 120) = v11 >> 16; - *((u8 *) v2 + 122) = v11; - v12 = v11 >> 8; - v13 = *((u32 *) v2 + 5); - *((u8 *) v2 + 121) = v12; - *((u8 *) v2 + 123) = BYTE3(v13); - *((u8 *) v2 + 124) = v13 >> 16; - *((u8 *) v2 + 125) = BYTE1(v13); - *((u8 *) v2 + 126) = v13; - } - result = v6; - } else - result = 3; - return result; - } -} + + + //----- (000009CC) -------------------------------------------------------- HAL_Status HalSdioHostReadBlocksDmaRtl8195a(IN VOID *Data, IN u64 ReadAddr, IN u32 BlockCnt) { @@ -753,7 +832,7 @@ IN u32 BlockCnt) { if (BlockCnt != 1) break; v4005800C = 17; - LABEL_18: result = SdioHostChkCmdInhibitCMD(result); + LABEL_18: result = SdioHostChkCmdInhibitCMD();//result); if (result) return result; result = SdioHostChkDataLineActive(0); @@ -768,7 +847,7 @@ IN u32 BlockCnt) { *((u8 *) &Cmd.CmdFmt + 1) = v12 & 0xC0 | 0x11; Cmd.Arg = v4; SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete((void *) v5, v13); + result = SdioHostChkCmdComplete((void *) v5);//, v13); if (result) goto LABEL_21; SdioHostGetResponse((void *) v5, *(u8 *) &Cmd.CmdFmt & 3); @@ -792,7 +871,7 @@ IN u32 BlockCnt) { v4005800C = 55; if (BlockCnta <= 1) goto LABEL_18; - result = SdioHostChkCmdInhibitCMD(result); + result = SdioHostChkCmdInhibitCMD();//result); if (result) return result; result = SdioHostChkDataLineActive(0); @@ -807,7 +886,7 @@ IN u32 BlockCnt) { *((u8 *) &Cmd.CmdFmt + 1) = v7 & 0xC0 | 0x12; Cmd.Arg = v4; SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete((void *) v5, v8); + result = SdioHostChkCmdComplete((void *) v5);//, v8); if (!result) { SdioHostGetResponse((void *) v5, *(u8 *) &Cmd.CmdFmt & 3); result = SdioHostChkXferComplete((void *) v5, 0x1388u, v9); @@ -832,7 +911,7 @@ IN u32 BlockCnt) { HAL_Status HalSdioHostWriteBlocksDmaRtl8195a(IN VOID *Data, IN u64 WriteAddr, IN u32 BlockCnt) { - + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; PHAL_SDIO_HOST_ADAPTER pSdioHostAdapter = (PHAL_SDIO_HOST_ADAPTER) Data; //int v5; // r6@1 uint32_t sec_count; // v4; // r4@1 @@ -884,7 +963,7 @@ IN u32 BlockCnt) { if (BlockCnt > 1) break; - LABEL_23: result = SdioHostChkCmdInhibitCMD(result); + LABEL_23: result = SdioHostChkCmdInhibitCMD();//result); if (result != HAL_OK) return result; result = SdioHostChkDataLineActive(0); @@ -899,7 +978,7 @@ IN u32 BlockCnt) { *((u8 *) &Cmd.CmdFmt + 1) = v10 & 0xC0 | 0x18; Cmd.Arg = sec_count; SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete((void *) v5, v11); + result = SdioHostChkCmdComplete((void *) v5);//, v11); if (result) goto LABEL_26; SdioHostGetResponse((void *) pSdioHostAdapter, @@ -926,7 +1005,7 @@ IN u32 BlockCnt) { return 238; } } - result = SdioHostChkCmdInhibitCMD(result); + result = SdioHostChkCmdInhibitCMD();//result); if (result != HAL_OK) return result; result = SdioHostChkDataLineActive(0); @@ -941,7 +1020,7 @@ IN u32 BlockCnt) { *((u8 *) &Cmd.CmdFmt + 1) = v7 & 0xC0 | 0x19; Cmd.Arg = sec_count; SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete((void *) v5, v8); + result = SdioHostChkCmdComplete((void *) v5);//, v8); if (!result) { SdioHostGetResponse((void *) pSdioHostAdapter, *(u8 *) &Cmd.CmdFmt & 3); @@ -967,73 +1046,6 @@ IN u32 BlockCnt) { } // 23D4: using guessed type int DiagPrintf(const char *, ...); -//----- (00000D34) -------------------------------------------------------- -int SdioHostSwitchFunction(void *Data, int Mode, int Fn2Sel, int Fn1Sel, - uint8_t *StatusBuf) { - u8 *v5; // r4@1 - uint32_t v6; // r0@1 - int v7; // r5@1 - int v8; // r6@1 - char v9; // r7@3 - int result; // r0@3 - char v11; // r3@5 - uint32_t v12; // r1@5 - signed int v13; // r2@6 - uint32_t v14; // r1@6 - SDIO_HOST_CMD Cmd; // [sp+0h] [bp-20h]@1 - int v16; // [sp+8h] [bp-18h]@1 - - *(u32 *) &Cmd.CmdFmt = Data; - Cmd.Arg = Mode; - v16 = Fn2Sel; - v5 = Data; - v6 = *((u32 *) Data + 4); - v7 = Mode; - v8 = Fn2Sel; - if (!v6 || ((u8) Fn1Sel | (u8) v6) & 3) { - result = 3; - } else { - v40058058 = v6; - v40058004 = 64; - v4005800C = 17; - v9 = *(u8 *) v6; - *(u16 *) (v6 + 2) = 64; - *(u8 *) v6 = ((v9 | 3) & 0xFB | 4 * ((Fn1Sel | v6) & 1)) & 0xEF - | 16 * ((Fn1Sel | v6) & 1) | 0x20; - *(u32 *) (v6 + 4) = Fn1Sel; - result = SdioHostChkCmdInhibitCMD(v6); - if (!result) { - result = SdioHostChkDataLineActive(0); - if (!result) { - Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(u8 *) &Cmd.CmdFmt & 0xF4 - | 0x3A) & 0x3F); - v11 = *((u8 *) &Cmd.CmdFmt + 1); - v5[128] = 0; - *((u8 *) &Cmd.CmdFmt + 1) = v11 & 0xC0 | 6; - v5[129] = 0; - Cmd.Arg = v8 | 0xFFFFF0 | (v7 << 31); - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(v5, v12); - if (!result) { - SdioHostGetResponse(v5, *(u8 *) &Cmd.CmdFmt & 3); - result = SdioHostChkXferComplete(v5, 0x1388u, v13); - if (result) { - if (result != 16) { - if (v40058032 & 0x200) { - v40058032 = 512; - if (HalSdioHostStopTransferRtl8195a(v5, v14)) { - DBG_SDIO_ERR("Stop transmission error!\n"); - } - } - } - result = 238; - } - } - } - } - } - return result; -} // 23D4: using guessed type int DiagPrintf(const char *, ...); //----- (00000E34) -------------------------------------------------------- @@ -1053,7 +1065,7 @@ HAL_Status HalSdioHostGetCardStatusRtl8195a(IN VOID *Data) { v3 = Data; if (!Data) return 3; - result = SdioHostChkCmdInhibitCMD((uint32_t) Data); + result = SdioHostChkCmdInhibitCMD();//(uint32_t) Data); if (result) return result; Cmd.CmdFmt = @@ -1063,7 +1075,7 @@ HAL_Status HalSdioHostGetCardStatusRtl8195a(IN VOID *Data) { *((u8 *) &Cmd.CmdFmt + 1) = v5 & 0xC0 | 0xD; Cmd.Arg = *((u16 *) v3 + 67) << 16; SdioHostSendCmd(&Cmd); - v7 = SdioHostChkCmdComplete(v3, v6); + v7 = SdioHostChkCmdComplete(v3);//, v6); if (v7) return v7; SdioHostGetResponse(v3, *(u8 *) &Cmd.CmdFmt & 3); @@ -1140,7 +1152,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { v7 = 3; goto LABEL_115; }; - v4 = SdioHostChkCmdInhibitCMD((uint32_t) Data); + v4 = SdioHostChkCmdInhibitCMD();//(uint32_t) Data); if (!v4) { v5 = (char) v52; v3[128] = 0; @@ -1148,7 +1160,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { v53 = 0; BYTE1(v52) &= 0xC0u; SdioHostSendCmd((SDIO_HOST_CMD *) &v52); - v4 = SdioHostChkCmdComplete(v3, v6); + v4 = SdioHostChkCmdComplete(v3);//, v6); }; v7 = v4; if (v4) { @@ -1157,12 +1169,12 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { }; goto LABEL_115; - v9 = SdioHostChkCmdInhibitCMD(0); + v9 = SdioHostChkCmdInhibitCMD();//0); if (v9 || (LOBYTE(v52) = (((u8) v52 & 0xF4 | 0x1A) & 0xDF | 32 * (v7 & 1)) & 0x3F | ((v7 & 3) << 6), BYTE1(v52) = BYTE1(v52) & 0xC0 | 8, v3[128] = v7, v53 = 426, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v52), (v9 = SdioHostChkCmdComplete(v3, + (SDIO_HOST_CMD *) &v52), (v9 = SdioHostChkCmdComplete(v3);//, v10)) != 0)) { v7 = v9; if (v9) @@ -1197,7 +1209,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { goto LABEL_115; } } - v13 = SdioHostChkCmdInhibitCMD(v9); + v13 = SdioHostChkCmdInhibitCMD();//v9); if (v13) goto LABEL_63; LOBYTE (v52) = ((u8) v52 & 0xFC | 0x1A) & 0x1F; @@ -1206,7 +1218,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { BYTE1 (v52) = v14; v53 = v7; SdioHostSendCmd((SDIO_HOST_CMD *) &v52); - v13 = SdioHostChkCmdComplete(v3, v15); + v13 = SdioHostChkCmdComplete(v3);//, v15); if (v13) goto LABEL_63; v16 = SdioHostGetResponse(v3, (u8) v52 & 3); @@ -1227,12 +1239,11 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { LABEL_57: v7 = 238; goto LABEL_60; }; - v13 = SdioHostChkCmdInhibitCMD(v16); + v13 = SdioHostChkCmdInhibitCMD();//v16); if (v13 || (LOBYTE(v52) = ((u8) v52 & 0xFC | 2) & 7, v18 = BYTE1(v52) & 0xC0 | 0x29, v3[128] = v7, BYTE1(v52) = v18, v53 = v7, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v52), (v13 = SdioHostChkCmdComplete(v3, - v19)) != 0)) { + (SDIO_HOST_CMD *) &v52), (v13 = SdioHostChkCmdComplete(v3)) != 0)) { LABEL_63: v7 = v13; if (!v13) goto LABEL_64; @@ -1249,7 +1260,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { v22 = __CFADD__(v21--, -1); if (!v22) goto LABEL_51; - v13 = SdioHostChkCmdInhibitCMD(v20); + v13 = SdioHostChkCmdInhibitCMD();//v20); if (v13) goto LABEL_63; LOBYTE (v52) = ((u8) v52 & 0xFC | 0x1A) & 0x1F; @@ -1258,7 +1269,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { v53 = 0; BYTE1 (v52) = v23 & 0xC0 | 0x37; SdioHostSendCmd((SDIO_HOST_CMD *) &v52); - v13 = SdioHostChkCmdComplete(v3, v24); + v13 = SdioHostChkCmdComplete(v3);//, v24); if (v13) goto LABEL_63; v25 = SdioHostGetResponse(v3, (u8) v52 & 3); @@ -1278,7 +1289,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { LABEL_62: v13 = 238; goto LABEL_63; } - v13 = SdioHostChkCmdInhibitCMD(v25); + v13 = SdioHostChkCmdInhibitCMD();//v25); if (v13) goto LABEL_63; LOBYTE (v52) = ((u8) v52 & 0xFC | 2) & 7; @@ -1287,7 +1298,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { BYTE1 (v52) = v27 & 0xC0 | 0x29; v53 = 1077673984; SdioHostSendCmd((SDIO_HOST_CMD *) &v52); - v13 = SdioHostChkCmdComplete(v3, v28); + v13 = SdioHostChkCmdComplete(v3);//, v28); if (v13) goto LABEL_63; SdioHostGetResponse(v3, (u8) v52 & 3); @@ -1312,12 +1323,11 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { } DiagPrintf(v29); LABEL_64: v30 = HalDelayUs(20); - v31 = SdioHostChkCmdInhibitCMD(v30); + v31 = SdioHostChkCmdInhibitCMD();//v30); if (v31 || (LOBYTE(v52) = ((u8) v52 & 0xF4 | 9) & 0xF, v32 = BYTE1(v52) & 0xC0 | 2, v3[128] = v7, BYTE1(v52) = v32, v53 = v7, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v52), (v31 = SdioHostChkCmdComplete(v3, - v33)) != 0)) { + (SDIO_HOST_CMD *) &v52), (v31 = SdioHostChkCmdComplete(v3)) != 0)) { v7 = v31; if (!v31) goto LABEL_70; @@ -1328,12 +1338,11 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { goto LABEL_115; } v31 = SdioHostGetResponse(v3, (u8) v52 & 3); - LABEL_70: v34 = SdioHostChkCmdInhibitCMD(v31); + LABEL_70: v34 = SdioHostChkCmdInhibitCMD();//v31); if (v34 || (LOBYTE(v52) = ((u8) v52 & 0xF4 | 0x1A) & 0x1F, v35 = BYTE1(v52) & 0xC0 | 3, v3[128] = v7, BYTE1(v52) = v35, v53 = v7, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v52), (v34 = SdioHostChkCmdComplete(v3, - v36)) != 0)) { + (SDIO_HOST_CMD *) &v52), (v34 = SdioHostChkCmdComplete(v3)) != 0)) { v7 = v34; if (v34) goto LABEL_79; @@ -1370,7 +1379,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { LABEL_108: DiagPrintf(v41, v40); goto LABEL_113; } - v42 = SdioHostChkCmdInhibitCMD(0); + v42 = SdioHostChkCmdInhibitCMD();//0); if (v42) goto LABEL_120; LOBYTE (v52) = ((u8) v52 & 0xFC | 0x1A) & 0x1F; @@ -1379,7 +1388,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { v3[128] = v7; v53 = v45; SdioHostSendCmd((SDIO_HOST_CMD *) &v52); - v42 = SdioHostChkCmdComplete(v3, v46); + v42 = SdioHostChkCmdComplete(v3);//, v46); if (v42) goto LABEL_120; v47 = SdioHostGetResponse(v3, (u8) v52 & 3); @@ -1392,12 +1401,11 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { } goto LABEL_96; } - v42 = SdioHostChkCmdInhibitCMD(v47); + v42 = SdioHostChkCmdInhibitCMD();//v47); if (v42 || (LOBYTE(v52) = ((u8) v52 & 0xFC | 0x1A) & 0x1F, v49 = BYTE1(v52) & 0xC0 | 6, v3[128] = v7, BYTE1(v52) = v49, v53 = 2, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v52), (v42 = SdioHostChkCmdComplete(v3, - v50)) != 0)) { + (SDIO_HOST_CMD *) &v52), (v42 = SdioHostChkCmdComplete(v3)) != 0)) { LABEL_120: v7 = v42; if (v42) goto LABEL_102; @@ -1475,7 +1483,7 @@ HAL_Status HalSdioHostGetSdStatusRtl8195a(IN VOID *Data) { v6 = (u8) ((v5 | 3) & 0xEB) | 0x20; *(u8 *) v3 = v6; *(u32 *) (v3 + 4) = v4 + 48; - result = SdioHostChkCmdInhibitCMD(v6); + result = SdioHostChkCmdInhibitCMD();//v6); if (!result) { Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(u8 *) &Cmd.CmdFmt & 0xFC | 0x1A) @@ -1485,7 +1493,7 @@ HAL_Status HalSdioHostGetSdStatusRtl8195a(IN VOID *Data) { v4[128] = 0; Cmd.Arg = v8 << 16; SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(v4, v9); + result = SdioHostChkCmdComplete(v4); if (!result) { SdioHostGetResponse(v4, *(u8 *) &Cmd.CmdFmt & 3); if (v4[24] != 55) { @@ -1504,7 +1512,7 @@ HAL_Status HalSdioHostGetSdStatusRtl8195a(IN VOID *Data) { } return 238; } - result = SdioHostChkCmdInhibitCMD(*((u32 *) v4 + 5) << 26); + result = SdioHostChkCmdInhibitCMD();//*((u32 *) v4 + 5) << 26); if (!result) { result = SdioHostChkDataLineActive(0); if (!result) { @@ -1516,7 +1524,7 @@ HAL_Status HalSdioHostGetSdStatusRtl8195a(IN VOID *Data) { Cmd.Arg = 0; *((u8 *) &Cmd.CmdFmt + 1) = v12 & 0xC0 | 0xD; SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(v4, v13); + result = SdioHostChkCmdComplete(v4);//, v13); if (!result) { SdioHostGetResponse(v4, *(u8 *) &Cmd.CmdFmt & 3); v15 = SdioHostChkXferComplete(v4, 0x1388u, v14); @@ -1544,11 +1552,11 @@ HAL_Status HalSdioHostGetSdStatusRtl8195a(IN VOID *Data) { // 23D4: using guessed type int DiagPrintf(const char *, ...); //----- (00001668) -------------------------------------------------------- +// SD_CLK_FREQUENCY Frequency HAL_Status HalSdioHostChangeSdClockRtl8195a(IN VOID *Data, IN u8 Frequency) { - PHAL_SDIO_HOST_ADAPTER v2 /*pSdioHostAdapter*/= - (PHAL_SDIO_HOST_ADAPTER) Data; - u8 * v2; // r5@1 - int v3; // r4@6 + PHAL_SDIO_HOST_ADAPTER pSdioHostAdapter = (PHAL_SDIO_HOST_ADAPTER) Data; // v2 = Data; u8 * v2; // r5@1 + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + HAL_Status ret = HAL_ERR_PARA; // int v3; // r4@6 int v4; // r2@8 int v5; // r0@10 int v6; // r0@10 @@ -1565,65 +1573,65 @@ HAL_Status HalSdioHostChangeSdClockRtl8195a(IN VOID *Data, IN u8 Frequency) { int v17; // r0@34 int v18; // r0@36 const char *v19; // r0@40 - int v20; // r2@52 - char v22; // [sp+0h] [bp-58h]@11 + u8 Divisor; // int v20; // r2@52 + char v22; // SDIO_HOST_CMD [sp+0h] [bp-58h]@11 char v23; // [sp+1h] [bp-57h]@11 int v24; // [sp+4h] [bp-54h]@11 + uint8_t StatusData[64]; // [sp+8h] [bp-50h]@8 - v2 = Data; - if (!Data || (unsigned int) (Frequency - 5) > 3) - return 3; - if (v2.CurrSdClk == Frequency) { - DBG_SDIO_WARN( - "Current SDCLK frequency is already the specified value...\n"); - return 0; + + if (!psha || Frequency > SD_CLK_41_6MHZ) + return ret; + if (psha->CurrSdClk == Frequency) { + DBG_SDIO_WARN("Current SDCLK frequency is already the specified value...\n"); + ret = HAL_OK; + return ret; } - if (Frequency != SD_CLK_41_6MHZ) { // SD_CLK_41_6MHZ - if (Frequency == SD_CLK_10_4MHZ) // SD_CLK_10_4MHZ - v20 = BASE_CLK_DIVIDED_BY_4; - else if (Frequency == SD_CLK_20_8MHZ) // SD_CLK_20_8MHZ - v20 = BASE_CLK_DIVIDED_BY_2; - else if (Frequency != SD_CLK_5_2MHZ) { // SD_CLK_5_2MHZ + if (Frequency != SD_CLK_41_6MHZ) { + if (Frequency == SD_CLK_10_4MHZ) + Divisor = BASE_CLK_DIVIDED_BY_4; // 10.4 MHz + else if (Frequency == SD_CLK_20_8MHZ) + Divisor = BASE_CLK_DIVIDED_BY_2; // 20.8 MHz + else if (Frequency != SD_CLK_5_2MHZ) { DBG_SDIO_ERR("Unsupported SDCLK frequency!\n"); - v3 = 3; - goto LABEL_60; + return ret; } - v20 = BASE_CLK_DIVIDED_BY_8; + Divisor = BASE_CLK_DIVIDED_BY_8; // 5.2 MHZ } - v3 = SdioHostSdClkCtrl(Data, 1, v20); - if (!v3) - return 0; - LABEL_60: if (!(ConfigDebugErr & 0x400)) { - return v3; - v19 = "\r[SDIO Err]Host changes clock fail!\n"; // DBG_SDIO_ERR(" - goto LABEL_62; - } - v4 = *((u32 *) Data + 4); + ret = SdioHostSdClkCtrl(psha, 1, Divisor); + if (ret == HAL_OK) return ret; + DBG_SDIO_ERR("Host changes clock fail!\n"); + return ret; + *(u32 *) StatusData = 0; *(u32 *) &StatusData[4] = 0; - if (!v4 || v4 & 3) - return 3; - v40058058 = v4; - v40058004 = 8; - v4005800C = 17; - v5 = (u8) ((*(u8 *) v4 | 3) & 0xEB) | 0x20; - *(u8 *) v4 = v5; - *(u16 *) (v4 + 2) = 8; - *(u32 *) (v4 + 4) = StatusData; - v6 = SdioHostChkCmdInhibitCMD(v5); - if (v6) - goto LABEL_70; - v22 = (v22 & 0xF4 | 0x1A) & 0x1F; - v7 = v23; - v2[128] = 0; - v23 = v7 & 0xC0 | 0x37; - v24 = *((u16 *) v2 + 67) << 16; - SdioHostSendCmd((SDIO_HOST_CMD *) &v22); - v6 = SdioHostChkCmdComplete(v2, v8); - if (v6) - goto LABEL_70; - v9 = SdioHostGetResponse(v2, v22 & 3); + + PADMA2_DESC_FMT pAdmaDescTbl = psha->AdmaDescTbl; + if (pAdmaDescTbl == NULL || ((uint32)(pAdmaDescTbl) & 3)) { + ret = HAL_ERR_PARA; + return ret; + } + HAL_SDIOH_REG32(REG_SDIO_HOST_ADMA_SYS_ADDR) = psha->AdmaDescTbl; // v40058058 = v4; + HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_SIZE) = 8; // v40058004 = 8; + HAL_SDIOH_REG16(REG_SDIO_HOST_XFER_MODE) = XFER_MODE_DMA_EN | XFER_MODE_DATA_XFER_DIR; // v4005800C = 17; + // v5 = (u8) ((*(u8 *) v4 | 3) & 0xEB) | 0x20; + // *(u8 *) v4 = v5; + pAdmaDescTbl->Attrib1.Int = 0; + pAdmaDescTbl->Attrib1.Act1 = 1; + pAdmaDescTbl->Len1 = 8; // *(u16 *) (v4 + 2) = 8; + pAdmaDescTbl->Addr2 = &StatusData; // *(u32 *) (v4 + 4) = StatusData; + ret = SdioHostChkCmdInhibitCMD();//v5); + if (ret != HAL_OK) return ret; + SDIO_HOST_CMD sdhcmd; + sdhcmd.CmdFmt.CmdCrcChkEn = 1; // v22 = (v22 & 0xF4 | 0x1A) & 0x1F; + sdhcmd.CmdFmt.CmdIdx = 0x37; // v23 = v7 & 0xC0 | 0x37; + pSdioHostAdapter->CmdCompleteFlg = 0; // v2[128] = 0; + sdhcmd.Arg = pSdioHostAdapter->Csd[?] << 16; // v24 = *((u16 *) v2 + 67) << 16; + SdioHostSendCmd((SDIO_HOST_CMD *) &sdhcmd); + ret = SdioHostChkCmdComplete(psha);//, v8); + if (ret != HAL_OK) return ret; + v9 = SdioHostGetResponse(psha, v22 & 3); if (v2[24] != 55) { if (!(ConfigDebugErr & 0x400)) return 238; @@ -1637,18 +1645,17 @@ HAL_Status HalSdioHostChangeSdClockRtl8195a(IN VOID *Data, IN u8 Frequency) { v10 = "\r[SDIO Err]ACMD isn't expected!\n"; goto LABEL_15; } - v6 = SdioHostChkCmdInhibitCMD(v9); + v6 = SdioHostChkCmdInhibitCMD();//v9); if (v6 || (v6 = SdioHostChkDataLineActive(0)) != 0 - || (v22 = (v22 & 0xF4 | 0x3A) & 0x3F, v11 = v23, v2[128] = 0, v2[129] = + || (v22 = (v22 & 0xF4 | 0x3A) & 0x3F, v11 = v23, psha v2[128] = 0, v2[129] = 0, v24 = 0, v23 = v11 & 0xC0 | 0x33, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v22), (v6 = SdioHostChkCmdComplete(v2, - v12)) != 0)) { + (SDIO_HOST_CMD *) &v22), (v6 = SdioHostChkCmdComplete(psha)) != 0)) { LABEL_70: v3 = v6; if (v6) return v3; } else { SdioHostGetResponse(v2, v22 & 3); - v14 = SdioHostChkXferComplete(v2, 0x1388u, v13); + v14 = SdioHostChkXferComplete(psha, 0x1388u, v13); if (v14) { if (v14 == 16) return 238; @@ -1656,7 +1663,7 @@ HAL_Status HalSdioHostChangeSdClockRtl8195a(IN VOID *Data, IN u8 Frequency) { if (!(v40058032 & 0x200)) return 238; v40058032 = 512; - if (!HalSdioHostStopTransferRtl8195a(v2, v15) + if (!HalSdioHostStopTransferRtl8195a(psha, v15) || !(ConfigDebugErr & 0x400)) return 238; v10 = "\r[SDIO Err]Stop transmission error!\n"; @@ -1666,12 +1673,12 @@ HAL_Status HalSdioHostChangeSdClockRtl8195a(IN VOID *Data, IN u8 Frequency) { *((u16 *) v2 + 68) = StatusData[0] & 0xF; } if (*((u16 *) v2 + 68)) { - v16 = SdioHostSwitchFunction(v2, 0, 15, (int) StatusData, + v16 = SdioHostSwitchFunction(psha, 0, 15, (int) StatusData, *(uint8_t **) &v22); if (v16) return v16; if (StatusData[13] & 2) { - v17 = SdioHostSwitchFunction(v2, v16, 1, (int) StatusData, + v17 = SdioHostSwitchFunction(psha, v16, 1, (int) StatusData, *(uint8_t **) &v22); if (v17) return v17; @@ -1691,7 +1698,7 @@ HAL_Status HalSdioHostChangeSdClockRtl8195a(IN VOID *Data, IN u8 Frequency) { v10 = "\r[SDIO Err]Card changes to High-Speed fail!\n"; goto LABEL_15; } - v3 = SdioHostSdClkCtrl(v2, 1, v18); + v3 = SdioHostSdClkCtrl(psha, 1, v18); if (v3) { if (!(ConfigDebugErr & 0x400)) return v3; @@ -1742,7 +1749,7 @@ IN u64 EndAddr) { v4 = a2 >> 9; v3 = EndAddra >> 9; } - result = SdioHostChkCmdInhibitCMD(EndAddr); + result = SdioHostChkCmdInhibitCMD();//EndAddr); if (!result) { v16.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(u8 *) &v16.CmdFmt & 0xFC | 0x1A) & 0x1F); @@ -1751,12 +1758,12 @@ IN u64 EndAddr) { *((u8 *) &v16.CmdFmt + 1) = v7 & 0xC0 | 0x20; v16.Arg = v4; SdioHostSendCmd(&v16); - result = SdioHostChkCmdComplete((void *) v5, v8); + result = SdioHostChkCmdComplete((void *) v5); if (!result) { v9 = SdioHostGetResponse((void *) v5, *(u8 *) &v16.CmdFmt & 3); if (*(u8 *) (v5 + 24) != 32) goto LABEL_20; - result = SdioHostChkCmdInhibitCMD(v9); + result = SdioHostChkCmdInhibitCMD();//v9); if (result) return result; v16.CmdFmt = @@ -1767,7 +1774,7 @@ IN u64 EndAddr) { *((u8 *) &v16.CmdFmt + 1) = v10 & 0xC0 | 0x21; v16.Arg = v3; SdioHostSendCmd(&v16); - result = SdioHostChkCmdComplete((void *) v5, v11); + result = SdioHostChkCmdComplete((void *) v5); if (result) return result; v12 = SdioHostGetResponse((void *) v5, *(u8 *) &v16.CmdFmt & 3); @@ -1776,7 +1783,7 @@ IN u64 EndAddr) { DBG_SDIO_ERR("Command index error!\n"); result = 238; } else { - result = SdioHostChkCmdInhibitCMD(v12); + result = SdioHostChkCmdInhibitCMD();//v12); if (!result) { result = SdioHostChkCmdInhibitDAT(0); if (!result) { @@ -1788,7 +1795,7 @@ IN u64 EndAddr) { v16.Arg = 0; *((u8 *) &v16.CmdFmt + 1) = v13 & 0xC0 | 0x26; SdioHostSendCmd(&v16); - result = SdioHostChkCmdComplete((void *) v5, v14); + result = SdioHostChkCmdComplete((void *) v5); if (!result) result = SdioHostChkXferComplete((void *) v5, 0x1388u, v15); @@ -1902,7 +1909,7 @@ HAL_Status HalSdioHostSetWriteProtectRtl8195a(IN VOID *Data, IN u8 Setting) { *(u16 *) (v2 + 2) = 16; *(u8 *) v2 = v10 & 0xC8 | 0x23; *(u32 *) (v2 + 4) = tmp; - result = SdioHostChkCmdInhibitCMD(1u); + result = SdioHostChkCmdInhibitCMD();//1u); if (!result) { result = SdioHostChkDataLineActive(0); if (!result) { @@ -1913,7 +1920,7 @@ HAL_Status HalSdioHostSetWriteProtectRtl8195a(IN VOID *Data, IN u8 Setting) { ret = 0; v17 = v12 & 0xC0 | 0x1B; SdioHostSendCmd((SDIO_HOST_CMD *) &v16); - result = SdioHostChkCmdComplete(v3, v13); + result = SdioHostChkCmdComplete(v3); if (!result) { SdioHostGetResponse(v3, v16 & 3); if (*((u32 *) v3 + 5) & 0x4000000) { diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_ssi.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_ssi.c index f992d3d..c1c77aa 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_ssi.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_ssi.c @@ -245,7 +245,6 @@ HAL_Status HalSsiInitRtl8195a_Patch(VOID *Adaptor) u32 IRQ_UNKNOWN = 999; u32 Ctrlr0Value = 0; u32 Ctrlr1Value = 0; - u32 SerValue = 0; u32 BaudrValue = 0; u32 TxftlrValue = 0; u32 RxftlrValue = 0; @@ -318,8 +317,7 @@ HAL_Status HalSsiInitRtl8195a_Patch(VOID *Adaptor) HAL_SSI_READ32(Index, REG_DW_SSI_CTRLR1)); } - SerValue = BIT_SER_SER(1 << (pHalSsiAdaptor->SlaveSelectEnable)); - SSI_DBG_INIT("[1] Set SSI%d REG_DW_SSI_SER Value: %X\n", Index, SerValue); + SSI_DBG_INIT("[1] Set SSI%d REG_DW_SSI_SER Value: %X\n", Index, BIT_SER_SER(1 << (pHalSsiAdaptor->SlaveSelectEnable))); //HAL_SSI_WRITE32(Index, REG_DW_SSI_SER, SerValue); HalSsiSetSlaveEnableRegisterRtl8195a(Adaptor, pHalSsiAdaptor->SlaveSelectEnable); @@ -617,7 +615,6 @@ HAL_Status HalSsiSetFormatRtl8195a(VOID *Adaptor) u32 RxftlrValue = 0; u8 Index = pHalSsiAdaptor->Index; u8 Role = pHalSsiAdaptor->Role; - u32 Spi_mode = 0; if (Index > 2) { DBG_SSI_ERR("HalSsiSetFormatRtl8195a: Invalid SSI Idx %d\r\n", Index); @@ -639,10 +636,9 @@ HAL_Status HalSsiSetFormatRtl8195a(VOID *Adaptor) HAL_SSI_WRITE32(Index, REG_DW_SSI_CTRLR0, Ctrlr0Value); - Spi_mode = (HAL_SSI_READ32(Index, REG_DW_SSI_CTRLR0) >>6) & 0x3; SSI_DBG_INIT("[2] SSI%d REG_DW_SSI_CTRLR0(%X) = %X, SPI Mode = %X\n", Index, SSI0_REG_BASE + (SSI_REG_OFF * Index) + REG_DW_SSI_CTRLR0, - HAL_SSI_READ32(Index, REG_DW_SSI_CTRLR0), Spi_mode); + HAL_SSI_READ32(Index, REG_DW_SSI_CTRLR0), (HAL_SSI_READ32(Index, REG_DW_SSI_CTRLR0) >>6) & 0x3); //The tx threshold and rx threshold value will be reset after the spi changes its role /* REG_DW_SSI_TXFTLR */ TxftlrValue = BIT_TXFTLR_TFT(pHalSsiAdaptor->TxThresholdLevel); @@ -741,7 +737,7 @@ HAL_Status HalSsiIntReadRtl8195a(VOID *Adapter, VOID *RxData, u32 Length) { PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Adapter; u32 RxFifoThresholdLevel; - u8 Index = pHalSsiAdapter->Index; +// u8 Index = pHalSsiAdapter->Index; DBG_SSI_INFO("HalSsiIntReadRtl8195a: Idx=%d, RxData=0x%x, Len=0x%x\r\n", Index, RxData, Length); // if (HalSsiBusyRtl8195a(Adapter)) { diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_uart.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_uart.c index 6f66871..9eb2a3d 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_uart.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_uart.c @@ -12,13 +12,14 @@ #include "rtl8195a_uart.h" #include "hal_uart.h" #include "hal_gdma.h" +#include "strproc.h" u8 HalRuartGetChipVerRtl8195a(VOID) { u8 chip_ver; - chip_ver = (HAL_READ32(SYSTEM_CTRL_BASE, 0x01F0) >> 4) & 0x0f; + chip_ver = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSTEM_CFG0) >> 4) & 0x0f; // 0x400001F0 RTL8710AF = 0x41000220 return chip_ver; } @@ -151,9 +152,8 @@ HalRuartGenBaudRateRtl8195a( u32 min_divisor=0; u32 min_err=0xffffffff; u32 uart_ovsr; - u32 uart_ovsr_mod; - u32 min_uart_ovsr; // ovsr with mini err - u32 min_uart_ovsr_mod; + u32 min_uart_ovsr = 0; // ovsr with mini err + u32 min_uart_ovsr_mod = 0; u64 uart_clock; u32 divisor_temp; u32 max_jitter_temp; @@ -200,7 +200,7 @@ HalRuartGenBaudRateRtl8195a( min_uart_ovsr = uart_ovsr/100; min_uart_ovsr_mod = uart_ovsr%100; } else if (err_temp == min_err) { - uart_ovsr_mod = uart_ovsr%100; + u32 uart_ovsr_mod = uart_ovsr%100; // we perfer OVSR bigger and adj bits smaller if (((uart_ovsr/100) >= min_uart_ovsr) && (uart_ovsr_mod < min_uart_ovsr_mod)) { min_err = err_temp; @@ -369,7 +369,7 @@ HalRuartSetBaudRateRtl8195a( u8 chip_ver; // get chip version - chip_ver = HalRuartGetChipVerRtl8195a(); + chip_ver = HalRuartGetChipVerRtl8195a(); // RTL8710AF = 2 #endif if (pHalRuartAdapter->WordLen == RUART_WLS_8BITS) { @@ -1248,7 +1248,7 @@ HalRuartMultiBlkDmaRecvRtl8195a( } /** - * Stop non-blocking UART RX + * Stop non-blocking UART TX * * * @return VOID @@ -1283,7 +1283,7 @@ HalRuartStopRecvRtl8195a_Patch( if (NULL != pUartGdmaConfig) { PHAL_GDMA_ADAPTER pHalGdmaAdapter; PHAL_GDMA_OP pHalGdmaOp; - u8 IsrTypeMap; + pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pRxHalGdmaAdapter; pHalGdmaOp = (PHAL_GDMA_OP)pUartGdmaConfig->pHalGdmaOp; @@ -1293,7 +1293,8 @@ HalRuartStopRecvRtl8195a_Patch( // Clean Auto Reload Bit pHalGdmaOp->HalGdmaChCleanAutoDst((VOID*)pHalGdmaAdapter); // Clear Pending ISR - IsrTypeMap = pHalGdmaOp->HalGdmaChIsrClean((VOID*)pHalGdmaAdapter); +// u8 IsrTypeMap = + pHalGdmaOp->HalGdmaChIsrClean((VOID*)pHalGdmaAdapter); pHalGdmaOp->HalGdmaChDis((VOID*)(pHalGdmaAdapter)); DMA_Dar = HalGdmaQueryDArRtl8195a((VOID*)pHalGdmaAdapter); @@ -1358,7 +1359,7 @@ HalRuartStopSendRtl8195a_Patch( if (NULL != pUartGdmaConfig) { PHAL_GDMA_ADAPTER pHalGdmaAdapter; PHAL_GDMA_OP pHalGdmaOp; - u8 IsrTypeMap; + pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pTxHalGdmaAdapter; pHalGdmaOp = (PHAL_GDMA_OP)pUartGdmaConfig->pHalGdmaOp; @@ -1368,7 +1369,8 @@ HalRuartStopSendRtl8195a_Patch( // Clean Auto Reload Bit pHalGdmaOp->HalGdmaChCleanAutoDst((VOID*)pHalGdmaAdapter); // Clear Pending ISR - IsrTypeMap = pHalGdmaOp->HalGdmaChIsrClean((VOID*)pHalGdmaAdapter); +// u8 IsrTypeMap = + pHalGdmaOp->HalGdmaChIsrClean((VOID*)pHalGdmaAdapter); pHalGdmaOp->HalGdmaChDis((VOID*)(pHalGdmaAdapter)); DMA_Sar = HalGdmaQuerySArRtl8195a((VOID*)pHalGdmaAdapter); diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/bitband_io.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/bitband_io.c index 957fc2c..c39c5fd 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/bitband_io.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/bitband_io.c @@ -1,54 +1,68 @@ -#include "PinNames.h" #include "bitband_io.h" +//#include "rtl8195a_gpio.h" -volatile u8 * BitBandAddr(void *addr, u8 bit) { - return (volatile u8 *)(BITBAND_ADDR((u32)addr, bit)); +#define BITBAND_ADDR(a,b) (0x02000000 + (a & 0xF0000000) + (a - (a & 0xF0000000)) * 32 + ((b) * 4)) // Convert address ? + +volatile uint8_t * BitBandAddr(void *addr, uint8_t bit) { + uint32_t ret = BITBAND_ADDR((u32)addr, bit); + return (volatile uint8_t *) ret; } -volatile u8 * BitBandPeriAddr(void *addr, u8 bit) { - return (volatile u8 *)(BITBAND_PERI((u32)addr, bit)); +volatile uint8_t * BitBandPeriAddr(void *addr, uint8_t bit) { + return (volatile uint8_t *)(BITBAND_PERI((u32)addr, bit)); } -volatile u8 * GetOutPinBitBandAddr(PinName pin) { - u32 paddr = NULL; - u32 ippin = HAL_GPIO_GetIPPinName_8195a(pin); - if(ippin != 0xff) { +volatile uint8_t * GetOutPinBitBandAddr(PinName pin) { + volatile uint8_t * paddr = 0; + uint32_t ippin = HAL_GPIO_GetIPPinName_8195a(pin); + if(ippin < 0xff) { // paddr = 0x42000000 + (0x40001000 + 0x0c * (ippin >> 5) - 0x40000000) * 32 + ((ippin & 0x1f) * 4); paddr = BitBandPeriAddr((void *)(GPIO_REG_BASE + GPIO_PORTB_DR * (ippin >> 5)), ippin & 0x1f); } return paddr; } -volatile u8 * GetInPinBitBandAddr(PinName pin) { - volatile u8 * paddr = NULL; - u32 ippin = HAL_GPIO_GetIPPinName_8195a(pin); - if(ippin != 0xff) { +volatile uint8_t * GetInPinBitBandAddr(PinName pin) { + volatile uint8_t * paddr = NULL; + uint32_t ippin = HAL_GPIO_GetIPPinName_8195a(pin); + if(ippin < 0xff) { // paddr = 0x42000000 + (0x40001000 + 0x0c * (ippin >> 5) - 0x40000000) * 32 + ((ippin & 0x1f) * 4); paddr = BitBandPeriAddr((void *)(GPIO_REG_BASE + GPIO_EXT_PORTA + (ippin >> 5) * 4), ippin & 0x1f); } return paddr; } -volatile u8 * HardSetPin(PinName pin, PinDirection pdir, PinMode pmode, u8 val) +extern _LONG_CALL_ u32 GPIO_FuncOn_8195a(VOID); +extern void wait_us(int us); + +volatile uint8_t * HardSetPin(PinName pin, HAL_GPIO_PIN_MODE pmode, uint8_t val) { - volatile u8 *paddr = NULL; - u32 ippin = HAL_GPIO_GetIPPinName_8195a(pin); - if(ippin != 0xff) { + volatile uint8_t *paddr = NULL; + uint32_t ippin = HAL_GPIO_GetIPPinName_8195a(pin); + if(ippin < 0xff) { + if(_pHAL_Gpio_Adapter == NULL) { + extern HAL_GPIO_ADAPTER gBoot_Gpio_Adapter; + _pHAL_Gpio_Adapter = &gBoot_Gpio_Adapter; + } + if(_pHAL_Gpio_Adapter->Gpio_Func_En == 0) GPIO_FuncOn_8195a(); + wait_us(100); + // delayMicroseconds(100); // paddr = 0x42000000 + (0x40001000 + 0x0c * (ippin >> 5) - 0x40000000) * 32 + ((ippin & 0x1f) * 4); +#if CONFIG_DEBUG_LOG > 3 + GpioFunctionChk(ippin, ENABLE); +#endif + GPIO_PullCtrl_8195a(ippin, HAL_GPIO_HIGHZ); // Make the pin pull control default as High-Z paddr = BitBandPeriAddr((void *)(GPIO_REG_BASE + GPIO_PORTB_DR * (ippin >> 5)), ippin & 0x1f); - } - if(paddr && _pHAL_Gpio_Adapter) { - if (_pHAL_Gpio_Adapter->Gpio_Func_En == 0) GPIO_FuncOn_8195a(); - paddr[0] = val; // data register - paddr[(GPIO_PORTB_DDR - GPIO_PORTB_DR) * 32] = pdir; // data direction -#if 1 // if use HAL_Gpio_Adapter - uint32 * p = &_pHAL_Gpio_Adapter->Local_Gpio_Dir[ippin >> 5]; - if(pdir) *p |= 1 << (ippin & 0x1f); - else *p &= ~(1 << (ippin & 0x1f)); -#endif - paddr[(GPIO_PORTB_CTRL - GPIO_PORTB_DR) * 32] = 0; // data source control, we should keep it as default: data source from software - HAL_GPIO_PullCtrl_8195a(pin, pmode); // set GPIO_PULL_CTRLx + *paddr = val; // data register + HAL_GPIO_PIN gpio; + gpio.pin_name = ippin; + gpio.pin_mode = pmode; + HAL_GPIO_Init_8195a(&gpio); + *paddr = val; // data register +// paddr[(GPIO_PORTB_DDR - GPIO_PORTB_DR) * 32] = pmode == DOUT_PUSH_PULL; // data direction +// GPIO_PullCtrl_8195a(ippin, pmode); // set GPIO_PULL_CTRLx +// paddr[(GPIO_PORTB_CTRL - GPIO_PORTB_DR) * 32] = 0; // data source control, we should keep it as default: data source from software } return paddr; } diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_adc.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_adc.c index fee78fe..a5c6abb 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_adc.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_adc.c @@ -533,16 +533,16 @@ ADCISRHandle( PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; PHAL_ADC_INIT_DAT pHalADCInitDat = NULL; PHAL_ADC_OP pHalADCOP = NULL; - PSAL_ADC_USER_CB pSalADCUserCB = NULL; - u8 ADCIrqIdx; +// PSAL_ADC_USER_CB pSalADCUserCB = NULL; +// u8 ADCIrqIdx; /* To get the SAL_I2C_MNGT_ADPT pointer, and parse the rest pointers */ pSalADCHNDPriv = CONTAINER_OF(pSalADCHND, SAL_ADC_HND_PRIV, SalADCHndPriv); pSalADCMngtAdpt = CONTAINER_OF(pSalADCHNDPriv->ppSalADCHnd, SAL_ADC_MNGT_ADPT, pSalHndPriv); pHalADCInitDat = pSalADCMngtAdpt->pHalInitDat; pHalADCOP = pSalADCMngtAdpt->pHalOp; - ADCIrqIdx = pHalADCInitDat->ADCIdx; - pSalADCUserCB = pSalADCHND->pUserCB; +// ADCIrqIdx = pHalADCInitDat->ADCIdx; +// pSalADCUserCB = pSalADCHND->pUserCB; DBG_8195A_ADC_LVL(HAL_ADC_LVL,"ADC INTR STS:%x\n",pHalADCOP->HalADCReadReg(pHalADCInitDat, REG_ADC_INTR_STS)); #else diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_misc.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_misc.c index dc26766..ddd23d1 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_misc.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_misc.c @@ -34,7 +34,7 @@ void HalReInitPlatformTimer(void) TimerAdapter.IrqDis = 1; TimerAdapter.TimerId = 1; HalTimerOpInit_Patch(&HalTimerOp); - HAL_TIMER_OP x; +// HAL_TIMER_OP x; HalTimerOp.HalTimerInit(&TimerAdapter); HalTimerOp.HalTimerEn(1); } diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_sdr_controller.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_sdr_controller.c index 29a7c8a..1051f1d 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_sdr_controller.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_sdr_controller.c @@ -150,11 +150,13 @@ unsigned int rand_x = 123456789; */ #ifdef CONFIG_SDR_EN +#ifndef __GNUC__ //#pragma arm section code = ".hal.sdrc.text" #pragma arm section rodata = ".rodata.hal.sdrc" //, rwdata = ".hal.sdrc.data" //, zidata = ".hal.sdrc.bss" //#pragma arm section bss = ".hal.sdrc.bss" +#endif #ifdef CONFIG_SDR_VERIFY enum{ @@ -448,13 +450,10 @@ DramInit ( u32 CrTwr, DramMaxWr, DramWr; u32 CrTrtw = 0, CrTrtwT = 0; u32 DrmaPeriod; - DRAM_TYPE DdrType; + DRAM_TYPE DdrType = DRAM_SDR; DRAM_DQ_WIDTH DqWidth; DRAM_COLADDR_WTH Page; u32 DfiRate; - volatile struct ms_rxi310_portmap *ms_ctrl_0_map; - ms_ctrl_0_map = (struct ms_rxi310_portmap*) SDR_CTRL_BASE; -// ms_ctrl_0_map = ms_ctrl_0_map; DfiRate = 1 << (u32) (DramInfo->DfiRate); DrmaPeriod = (DramInfo->DdrPeriodPs)*(DfiRate); // according DFI_RATE to setting @@ -658,6 +657,9 @@ DramInit ( // enter mem_mode HAL_SDR_WRITE32(REG_SDR_CSR,0x600); #else + volatile struct ms_rxi310_portmap *ms_ctrl_0_map; + ms_ctrl_0_map = (struct ms_rxi310_portmap*) SDR_CTRL_BASE; +// ms_ctrl_0_map = ms_ctrl_0_map; // WRAP_MISC setting ms_ctrl_0_map->misc = //0x12; ( @@ -753,7 +755,8 @@ SdrCalibration( DBG_8195A("%s()\n", __func__); u32 RdPipe = 0, TapCnt = 0, Pass = 0, AvaWdsCnt = 0; u32 RdPipeCounter, RecNum[2], RecRdPipe[2];//, AvaWds[2][REC_NUM]; - BOOL RdPipeFlag, PassFlag = 0, Result; + BOOL RdPipeFlag, Result; +// BOOL PassFlag = 0; u8 flashtype = 0; flashtype = SpicInitParaAllClk[0][0].flashtype; @@ -829,7 +832,7 @@ SdrCalibration( #endif RdPipeFlag = _FALSE; - PassFlag = _FALSE; +// PassFlag = _FALSE; AvaWdsCnt = 0; for(TapCnt=0; TapCnt < (MAX_TAP_DLY+1); TapCnt++) { @@ -853,7 +856,7 @@ SdrCalibration( #endif Pass = MemTest(10000); - PassFlag = _FALSE; +// PassFlag = _FALSE; if(Pass==_TRUE) { // PASS @@ -876,7 +879,7 @@ SdrCalibration( break; } - PassFlag = _TRUE; +// PassFlag = _TRUE; DBG_SDR_INFO("Verify Pass => RdPipe:%d; TapCnt: %d\n", RdPipe, TapCnt); @@ -1044,7 +1047,7 @@ Sdr_Rand2( } */ - +extern __attribute__ ((long_call)) unsigned int Rand(void); HAL_SDRC_TEXT_SECTION s32 MemTest( diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_soc_ps_monitor.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_soc_ps_monitor.c index cd42785..8949ea9 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_soc_ps_monitor.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_soc_ps_monitor.c @@ -373,6 +373,7 @@ WakeFromSLPPG( ); } +// Предел 8355 ms! VOID DurationScaleAndPeriodOP( IN u32 SDuration, @@ -412,7 +413,7 @@ CLKCal( u32 Rtemp = 0; u32 RRTemp = 0; - u32 x = (HAL_READ32(PERI_ON_BASE,REG_SYS_CLK_CTRL1) >> BIT_SHIFT_PESOC_OCP_CPU_CK_SEL) & BIT_MASK_PESOC_OCP_CPU_CK_SEL; + u32 x = (HAL_READ32(PERI_ON_BASE, REG_SYS_CLK_CTRL1) >> BIT_SHIFT_PESOC_OCP_CPU_CK_SEL) & BIT_MASK_PESOC_OCP_CPU_CK_SEL; if( ClkSel ){ //a33_ck @@ -432,7 +433,8 @@ CLKCal( } else { //anack - RRTemp = (((2133/Rtemp) >> x) - 1); +//pvvx: eror RTL8710AF? RRTemp = (((2133/Rtemp) >> x) - 1); + RRTemp = (2133/Rtemp) - 1; } if ( x == 5 ) DiagPrintf("Using ana to cal is not allowed!\n"); @@ -516,7 +518,7 @@ SleepClkGatted( //3 1.5 Enable low power mode // 1.5.1 0x4000_0118[2] = 1 => for sleep mode - Rtemp = 0x00000004;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000004; + Rtemp = BIT_SYSON_PM_CMD_SLP;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000004; HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); //3 1.6 Wait CHIP enter low power mode @@ -535,7 +537,7 @@ VOID SleepPwrGatted( u32 Rtemp = 0; u32 ScaleTemp = 0; u32 PeriodTemp = 0; - u32 CalTemp = 0; +// u32 CalTemp = 0; //Backup CPU CLK BackupCPUClk(); @@ -547,7 +549,7 @@ VOID SleepPwrGatted( //3 1.1 Set TU timer timescale //0x4000_0090[21:16] = 6'h1F //0x4000_0090[15] = 1'b0 => Disable timer - CalTemp = (CLKCal(ANACK) << 16); +// CalTemp = (CLKCal(ANACK) << 16); Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL) & (~((BIT_MASK_SYS_DSTDY_TIM_SCAL << BIT_SHIFT_SYS_DSTDY_TIM_SCAL) | (BIT_MASK_SYS_ANACK_TU_TIME << BIT_SHIFT_SYS_ANACK_TU_TIME)))) | ScaleTemp; @@ -580,7 +582,7 @@ VOID SleepPwrGatted( //3 1.5 Enable low power mode // 1.5.1 0x4000_0118[2] = 1 => for sleep mode - Rtemp = 0x00000004;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000004; + Rtemp = BIT_SYSON_PM_CMD_SLP;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000004; HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); //3 1.6 Wait CHIP enter low power mode @@ -602,7 +604,7 @@ DStandby( u32 Rtemp = 0; u32 ScaleTemp = 0; u32 PeriodTemp = 0; - u32 CalTemp = 0; +// u32 CalTemp = 0; //Backup CPU CLK BackupCPUClk(); @@ -615,7 +617,7 @@ DStandby( //3 1.1 Set TU timer timescale //0x4000_0090[21:16] = 6'h1F //0x4000_0090[15] = 1'b0 => Disable timer - CalTemp = (CLKCal(ANACK) << 16); +// CalTemp = (CLKCal(ANACK) << 16); Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL) & (~((BIT_MASK_SYS_DSTDY_TIM_SCAL << BIT_SHIFT_SYS_DSTDY_TIM_SCAL) | (BIT_MASK_SYS_ANACK_TU_TIME << BIT_SHIFT_SYS_ANACK_TU_TIME)))) | ScaleTemp; @@ -648,7 +650,7 @@ DStandby( //3 1.5 Enable low power mode // [0x4000_0118[1] = 1 => for deep standby mode] - Rtemp = 0x00000002; + Rtemp = BIT_SYSON_PM_CMD_DSTBY; HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); //3 1.6 Wait CHIP enter low power mode @@ -672,8 +674,6 @@ DSleep( //u32 PeriodTemp = 0; u32 UTemp = 0; u32 MaxTemp = 0; - - u32 Reada335 = 0; //2 Deep Sleep mode: //3 2.1 Set TU timer timescale @@ -724,16 +724,15 @@ DSleep( HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); HalDelayUs(1000); - Reada335 = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CAL_CTRL); #if CONFIG_DEBUG_LOG > 3 - DiagPrintf("a33 timer : 0x%x\n", Reada335); + DiagPrintf("a33 timer : 0x%x\n", HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CAL_CTRL)); #endif HalDelayUs(8000); //3 2.2.3 //2.3 Enable low power mode: 0x4000_0118[0] = 1'b1; - Rtemp = 0x00000001;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000001; + Rtemp = BIT_SYSON_PM_CMD_DSLP;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000001; HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); //2.4 Wait CHIP enter deep sleep mode @@ -1418,6 +1417,9 @@ SetSYSTimer( HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); } +/* + * SDuration < 8355 ms! + */ VOID SleepCG( IN u8 Option, @@ -1446,7 +1448,8 @@ SleepCG( Rtemp = 0x74003B00; //0x74003900; } else { - Rtemp = 0x74000900; + Rtemp = 0x74000900; // BIT_SYSON_PMOPT_NORM_XTAL_EN | BIT_SYSON_PMOPT_NORM_SYSPLL_EN | BIT_SYSON_PMOPT_NORM_SYSCLK_SEL | BIT_SYSON_PMOPT_NORM_EN_PWM + // | BIT_SYSON_PMOPT_SLP_LPLDO_SEL | BIT_SYSON_PMOPT_SLP_EN_SOC } HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION, Rtemp); @@ -1465,49 +1468,49 @@ SleepCG( HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); //Enable wake event - WakeEvent |= BIT0; + WakeEvent |= BIT0; // BIT_SYSON_WEVT_SYSTIM_MSK } if (Option & SLP_GTIMER) { //Enable wake event - WakeEvent |= BIT1; + WakeEvent |= BIT1; // BIT_SYSON_WEVT_GTIM_MSK } if (Option & SLP_GPIO) { //Enable wake event - WakeEvent |= BIT4; + WakeEvent |= BIT4; // BIT_SYSON_WEVT_GPIO_MSK } if (Option & SLP_WL) { //Enable wake event - WakeEvent |= BIT8; + WakeEvent |= BIT8; // BIT_SYSON_WEVT_WLAN_MSK } if (Option & SLP_NFC) { //Enable wake event - WakeEvent |= BIT28; + WakeEvent |= BIT28; // BIT_SYSON_WEVT_A33_MSK } if (Option & SLP_SDIO) { //Enable wake event - WakeEvent |= BIT14; + WakeEvent |= BIT14; // BIT_SYSON_WEVT_SDIO_MSK } if (Option & SLP_USB) { //Enable wake event - //WakeEvent |= BIT16; + //WakeEvent |= BIT16; // BIT_SYSON_WEVT_USB_MSK } if (Option & SLP_TIMER33) { //Enable wake event - WakeEvent |= BIT28; + WakeEvent |= BIT28; // BIT_SYSON_WEVT_A33_MSK } /* while(1) { @@ -1533,7 +1536,7 @@ SleepCG( if (SDREn) SDRSleep(); #endif - Rtemp = 0x00000004; + Rtemp = BIT_SYSON_PM_CMD_SLP; HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); //3 Wait CHIP enter low power mode @@ -1565,7 +1568,7 @@ SleepPG( //3 2 Configure power state option: // 2.1 power mode option: - Rtemp = 0x74000100; + Rtemp = 0x74000100; // BIT_SYSON_PMOPT_SLP_LPLDO_SEL HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION, Rtemp); // 2.2 sleep power mode option1 @@ -1648,7 +1651,7 @@ SleepPG( LDO25M_CTRL(OFF); #endif - Rtemp = 0x00000004; + Rtemp = BIT_SYSON_PM_CMD_SLP; HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); //3 Wait CHIP enter low power mode @@ -1701,7 +1704,7 @@ DeepStandby( //3 2 Configure power state option: // 2.1 deep standby power mode option: - Rtemp = 0x74000100; + Rtemp = 0x74000100; // BIT_SYSON_PMOPT_SLP_LPLDO_SEL HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION, Rtemp); // 2.2 sleep power mode option1 @@ -1737,19 +1740,19 @@ DeepStandby( if (Option & DSTBY_GPIO){ - if (GpioOption & BIT0) { + if (GpioOption & BIT0) { // PA_5 DSTBYGpioCtrl(BIT0, (GpioOption & BIT4)); } - if (GpioOption & BIT1) { + if (GpioOption & BIT1) { // PC_7 DSTBYGpioCtrl(BIT1, (GpioOption & BIT5)); } - if (GpioOption & BIT2) { + if (GpioOption & BIT2) { // PD_5 DSTBYGpioCtrl(BIT2, (GpioOption & BIT6)); } - if (GpioOption & BIT3) { + if (GpioOption & BIT3) { // PE_3 DSTBYGpioCtrl(BIT3, (GpioOption & BIT7)); } @@ -1773,10 +1776,10 @@ DeepStandby( HAL_WRITE32(SYSTEM_CTRL_BASE, REG_GPIO_SHTDN_CTRL, 0x0); - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_FUNC_EN) & 0xBFFFFFFF); + Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_FUNC_EN) & (~BIT_SYS_PWRON_TRAP_SHTDN_N)); // 0xBFFFFFFF, ~BIT(30) HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_FUNC_EN, Rtemp); - Rtemp = 0x00000002; + Rtemp = BIT_SYSON_PM_CMD_DSTBY; HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); //3 Wait CHIP enter low power mode @@ -1799,7 +1802,7 @@ DeepSleep( u32 UTemp = 0; u32 MaxTemp = 0; -//??? HAL_WRITE32(0x60008000, 0x80006180, PS_MASK); + HAL_WRITE32(0x60008000, 0x80006180, PS_MASK); //1.1.1 Enable REGU access interface 0x4000_0094[31] = 1 Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) | 0x80000000); @@ -1885,7 +1888,7 @@ DeepSleep( Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_FUNC_EN) & 0xBFFFFFFF); HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_FUNC_EN, Rtemp); - Rtemp = 0x00000001;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000001; + Rtemp = BIT_SYSON_PM_CMD_DSLP;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000001; HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); //2.4 Wait CHIP enter deep sleep mode @@ -1916,7 +1919,7 @@ DSleep_GPIO( //2.2.2 //2.3 Enable low power mode: 0x4000_0118[0] = 1'b1; - Rtemp = 0x00000001;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000001; + Rtemp = BIT_SYSON_PM_CMD_DSLP;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000001; HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); //2.4 Wait CHIP enter deep sleep mode @@ -1989,7 +1992,7 @@ DSleep_Timer( //3 2.3 //2.3 Enable low power mode: 0x4000_0118[0] = 1'b1; - Rtemp = 0x00000001;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000001; + Rtemp = BIT_SYSON_PM_CMD_DSLP;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000001; HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); //2.4 Wait CHIP enter deep sleep mode diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_ssi.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_ssi.c index 96c92f9..d7bb997 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_ssi.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_ssi.c @@ -527,7 +527,7 @@ HalSsiInit(VOID *Data) { HAL_Status ret; PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Data; - u32 Function; + u32 Function = SPI0; u8 PinmuxSelect; u8 Index; diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_uart.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_uart.c index 2b3fe3c..8448b1c 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_uart.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_uart.c @@ -1021,7 +1021,7 @@ HalRuartDmaSend( u32 BlockSize; HAL_Status ret; PUART_DMA_CONFIG pUartGdmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; +// PHAL_GDMA_ADAPTER pHalGdmaAdapter; if (((Length & 0x03)==0) && (((u32)(pTxBuf) & 0x03)==0)) { @@ -1078,7 +1078,7 @@ HalRuartDmaRecv( // u32 BlockSize; HAL_Status ret; PUART_DMA_CONFIG pUartGdmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; +// PHAL_GDMA_ADAPTER pHalGdmaAdapter; if (Length < 4096) { #if CONFIG_CHIP_E_CUT diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/driver/rtl_console_new.c b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/driver/rtl_console_new.c index 2c7c0db..ad6a631 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/driver/rtl_console_new.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/driver/rtl_console_new.c @@ -13,6 +13,7 @@ #include "rtl8195a.h" #include "rtl_bios_data.h" #include "osdep_api.h" +#include "osdep_service.h" #if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) #include "freertos_pmu.h" #else @@ -44,7 +45,7 @@ IN u8 EchoFlag); //_LONG_CALL_ extern void UartLogCmdExecute(IN PUART_LOG_CTL pUartLogCtlExe); //====================================================== extern PCOMMAND_TABLE UartLogRamCmdTable[]; -extern UartLogRamCmdTableSize; +extern int UartLogRamCmdTableSize; //====================================================== //: UartLogIrqHandleRam //: To deal with Uart-Log RX IRQ @@ -61,7 +62,7 @@ void UartLogIrqHandleRam(void * Data) { if (UartReceiveData == 0) { goto exit; } - PUART_LOG_CTL p = pUartLogCtl; + PUART_LOG_CTL p = (PUART_LOG_CTL) pUartLogCtl; //KB_ESC chk is for cmd history, it's a special case here. if (UartReceiveData == KB_ASCII_ESC) { // Esc detection is only valid in the first stage of boot sequence (few seconds) @@ -102,7 +103,7 @@ void UartLogIrqHandleRam(void * Data) { if (p->pTmpLogBuf != NULL) { p->ExecuteCmd = _TRUE; if (p->TaskRdy) { - RtlUpSemaFromISR((_Sema *) &pUartLogCtl->Sema); + rtw_up_sema_from_isr((_Sema *) &pUartLogCtl->Sema); } } else { ArrayInitialize((u8 *) pUartLogCtl->pTmpLogBuf->UARTLogBuf, @@ -130,7 +131,7 @@ int GetArgvRam(IN u8 *pstr, u8** argv) { int arvc = 0; // u8** argv = ArgvArray; u8* p = pstr; - u8 t, n = ' '; + u8 t = 0, n = ' '; int m = 0; while(*p != 0 && *p != '\r' @@ -200,7 +201,7 @@ int GetArgvRam(IN u8 *pstr, u8** argv) { //: //====================================================== MON_RAM_TEXT_SECTION void RtlConsolTaskRam(void *Data) { - PUART_LOG_CTL p = pUartLogCtl; + PUART_LOG_CTL p = (PUART_LOG_CTL) pUartLogCtl; #ifdef USE_ROM_CONSOLE // show Help p->pTmpLogBuf->UARTLogBuf[0] = '?'; p->pTmpLogBuf->BufCount = 1; @@ -208,7 +209,7 @@ MON_RAM_TEXT_SECTION void RtlConsolTaskRam(void *Data) { #endif do { p->TaskRdy = _TRUE; - RtlDownSema(&p->Sema); + rtw_down_sema(&p->Sema); if (p->ExecuteCmd) { // UartLogCmdExecute(pUartLogCtl); int argc = GetArgvRam(p->pTmpLogBuf->UARTLogBuf, ArgvArray); @@ -225,9 +226,9 @@ MON_RAM_TEXT_SECTION void RtlConsolTaskRam(void *Data) { flg = 0; if(pcmd->ArgvCnt < argc) { #ifdef USE_ROM_CONSOLE - pcmd->func(argc-1, &ArgvArray[1]); + pcmd->func(argc-1, (char **) &ArgvArray[1]); #else - pcmd->func(argc, &ArgvArray); + pcmd->func(argc, (char **) &ArgvArray); #endif } else { #ifdef USE_ROM_CONSOLE @@ -291,7 +292,7 @@ MON_RAM_TEXT_SECTION void console_init(void) { #endif pUartLogCtl->RevdNo = UART_LOG_HISTORY_LEN; // Create a Semaphone - RtlInitSema(&pUartLogCtl->Sema, 1); + rtw_init_sema((_sema *)&pUartLogCtl->Sema, 1); // executing boot sequence pUartLogCtl->ExecuteCmd = _FALSE; pUartLogCtl->ExecuteEsc = _TRUE; //don't check Esc anymore @@ -316,7 +317,7 @@ extern char str_rom_57ch3Dch0A[]; // "========================================== _WEAK void console_help(int argc, char *argv[]) { // Help DiagPrintf("CONSOLE COMMAND SET:\n"); DiagPrintf(&str_rom_57ch3Dch0A[25]); // DiagPrintf("==============================\n"); - PCOMMAND_TABLE pcmdtab = UartLogRamCmdTable; + PCOMMAND_TABLE pcmdtab = (PCOMMAND_TABLE) UartLogRamCmdTable; while(pcmdtab->cmd) { #ifdef USE_ROM_CONSOLE DiagPrintf(pcmdtab->msg); @@ -327,7 +328,8 @@ _WEAK void console_help(int argc, char *argv[]) { // Help } DiagPrintf(&str_rom_57ch3Dch0A[25]); // DiagPrintf("==============================\n"); } -LOCAL void print_on(int argc, char *argv[]) + +void print_on(int argc, char *argv[]) { print_off = argv[1][0]!='1'; } diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/include/rt_lib_rom.h b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/include/rt_lib_rom.h index 50cc4ee..b070303 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/include/rt_lib_rom.h +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/include/rt_lib_rom.h @@ -105,6 +105,22 @@ extern _LONG_CALL_ double __rtl_dsub_v1_00(double a, double b); extern _LONG_CALL_ double __rtl_dmul_v1_00(double a, double b); extern _LONG_CALL_ double __rtl_ddiv_v1_00(double a, double b); +// --- ??? +extern _LONG_CALL_ float __rtl_dtof_v1_00(double d); +extern _LONG_CALL_ int __rtl_dtoui_v1_00(double d); +extern _LONG_CALL_ float __rtl_itof_v1_00(int val); +extern _LONG_CALL_ char *__rtl_ltoa_v1_00(int value, char *string, int radix); +extern _LONG_CALL_ char *__rtl_ultoa_v1_00(unsigned int value, char *string, int radix); +extern _LONG_CALL_ int __rtl_ftol_v1_00(float f); +extern _LONG_CALL_ int __rtl_ftod_v1_00(float f); +extern _LONG_CALL_ float __rtl_fadd_v1_00(float a, float b); +extern _LONG_CALL_ float __rtl_fsub_v1_00(float a, float b); +extern _LONG_CALL_ float __rtl_fmul_v1_00(float a, float b); +extern _LONG_CALL_ float __rtl_fdiv_v1_00(float a, float b); +extern _LONG_CALL_ int __rtl_dcmple_v1_00(double a, double b); +extern _LONG_CALL_ int __rtl_fcmplt_v1_00(float a, float b); +extern _LONG_CALL_ int __rtl_fcmpgt_v1_00(float a, float b); +// --- ??? // // mprec diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/c_stdio.c b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/c_stdio.c index 4ff3a67..de6857e 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/c_stdio.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/c_stdio.c @@ -22,7 +22,9 @@ #define strsep __rtl_strsep_v1_00 #define strtok __rtl_strtok_v1_00 -static char toupper(char ch) { +extern int isdigit (int c); + +static int toupper(int ch) { return ((ch >= 'a' && ch <= 'z') ? ch - 'a' + 'A' : ch); }; @@ -371,7 +373,7 @@ llatob(u_quad_t *vp, char *p, int base) char * btoa(char *dst, u_int value, int base) { - char buf[34], digit; + char buf[34], digit = 0; int i, j, rem, neg; if (value == 0) { @@ -417,7 +419,7 @@ btoa(char *dst, u_int value, int base) char * llbtoa(char *dst, u_quad_t value, int base) { - char buf[66], digit; + char buf[66], digit = 0; int i, j, rem, neg; if (value == 0) { @@ -536,7 +538,7 @@ c_vsprintf (char *d, const char *s, va_list ap) const char *t; char *p, *dst, tmp[40]; unsigned int n; - int fmt, trunc, haddot, width, base, longlong; + int fmt, trunc, haddot, width, base = 0, longlong; double dbl; #ifndef NEWFP EP ex; @@ -1072,11 +1074,14 @@ int c_printf(const char *fmt, ...) #endif // ENAC_FLOAT +extern _LONG_CALL_ROM_ void HalSerialPutcRtl8195a(char c); + int puts (const char *s) { while(*s) { HalSerialPutcRtl8195a(*s++); } + return 0; // -1 -> EOF } void vTaskDelete(void *); diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libc.c b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libc.c index 79739ac..ba95083 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libc.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libc.c @@ -170,7 +170,6 @@ int rtl_vprintf(const char *fmt, va_list param) { int rtl_vsnprintf(char *str, size_t size, const char *fmt, va_list param) { int result; int w; - int v11; FILE f; #if CHECK_LIBC_INIT if (!libc_has_init) { diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libgloss_retarget.c b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libgloss_retarget.c index afe713a..40d3175 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libgloss_retarget.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libgloss_retarget.c @@ -122,6 +122,6 @@ void init_rom_libgloss_ram_map(void) { rom_libgloss_ram_map.libgloss_open = ram_libgloss_open; rom_libgloss_ram_map.libgloss_read = ram_libgloss_read; rom_libgloss_ram_map.libgloss_write = ram_libgloss_write; - rom_libgloss_ram_map.libgloss_sbrk = ram_libgloss_sbrk; + rom_libgloss_ram_map.libgloss_sbrk = (void*)ram_libgloss_sbrk; } diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_pvvx_libc.c b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_pvvx_libc.c index 18233d6..85bfbf6 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_pvvx_libc.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_pvvx_libc.c @@ -67,9 +67,12 @@ unsigned long long __aeabi_llsr(unsigned long long val, unsigned int shift); extern struct _reent * _rtl_impure_ptr; +#if CHECK_LIBC_INIT extern char libc_has_init; +#endif extern char print_off; +#undef snprintf //------------------------------------------------------------------------- // Function //----- snprintf() @@ -107,7 +110,9 @@ int snprintf(char *str, size_t size, const char *fmt, ...) { return result; } + #ifndef ENAC_FLOAT +#undef sprintf //----- sprintf() int sprintf(char *str, const char *fmt, ...) { FILE f; @@ -131,6 +136,7 @@ int sprintf(char *str, const char *fmt, ...) { return result; } +#undef printf //----- printf() int printf(const char *fmt, ...) { #if CHECK_LIBC_INIT @@ -151,6 +157,7 @@ int printf(const char *fmt, ...) { else return 0; } +#undef vprintf //----- vprintf() int vprintf(const char * fmt, __VALIST param) { #if CHECK_LIBC_INIT @@ -165,11 +172,11 @@ int vprintf(const char * fmt, __VALIST param) { } #endif // ENAC_FLOAT +#undef vsnprintf //----- vsnprintf() int vsnprintf(char *str, size_t size, const char *fmt, __VALIST param) { int result; int w; - int v11; FILE f; #if CHECK_LIBC_INIT if (!libc_has_init) { @@ -199,6 +206,7 @@ int vsnprintf(char *str, size_t size, const char *fmt, __VALIST param) { return result; } +#undef vfprintf //----- vfprintf() int vfprintf(FILE *fp, const char *fmt0, va_list ap) { #if CHECK_LIBC_INIT @@ -209,86 +217,103 @@ int vfprintf(FILE *fp, const char *fmt0, va_list ap) { return __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, fp, fmt0, ap); } +#undef memchr //----- memchr() void * memchr(const void * src_void , int c , size_t length) { return __rtl_memchr_v1_00(src_void, c, length); } +#undef memcmp //----- memcmp() int memcmp(const void *m1, const void *m2, size_t n) { return __rtl_memcmp_v1_00(m1, m2, n); } +#undef memcpy //----- memcpy() void * memcpy(void *dst0, const void *src0, size_t len0) { return __rtl_memcpy_v1_00(dst0, src0, len0); } +#undef memmove //----- memmove() void * memmove(void *dst_void, const void *src_void, size_t length) { return __rtl_memmove_v1_00(dst_void, src_void, length); } +#undef memset //----- memset() void * memset(void *m, int c, size_t n) { return __rtl_memset_v1_00(m, c, n); } +#undef strcat //----- strcat() char * strcat(char *s1, const char *s2) { return (char *) __rtl_strcat_v1_00(s1, s2); } - +#undef strchr //----- strchr() char * strchr(const char *s1, int i) { return (char *) __rtl_strchr_v1_00(s1, i); } +#undef strcmp //----- strcmp() int strcmp(const char *s1, const char *s2) { return __rtl_strcmp_v1_00(s1, s2); } +#undef strcpy //----- strcpy() char * strcpy(char *dst0, const char *src0) { return (char *) __rtl_strcpy_v1_00(dst0, src0); } +#undef strlen //----- strlen() size_t strlen(const char *str) { return __rtl_strlen_v1_00(str); } +#undef strncat //----- strncat() char * strncat(char *s1, const char *s2, size_t n) { return (char *) __rtl_strncat_v1_00(s1, s2, n); } +#undef strncmp //----- strncmp() int strncmp(const char *s1, const char *s2, size_t n) { return __rtl_strncmp_v1_00(s1, s2, n); } +#undef strncpy //----- strncpy() char * strncpy(char *dst0, const char *src0, size_t count) { return (char *) __rtl_strncpy_v1_00(dst0, src0, count); } +#undef strstr //----- strstr() char * strstr(const char *searchee, const char *lookfor) { return (char *) __rtl_strstr_v1_00(searchee, lookfor); } +#undef strsep //----- strsep() char * strsep(char **source_ptr, const char *delim) { return (char *) __rtl_strsep_v1_00(source_ptr, delim); } +#undef strtok //----- strtok() char * strtok(char *s, const char *delim) { return (char *) __rtl_strtok_v1_00(s, delim); } +extern _LONG_CALL_ROM_ int _vsscanf(const char *buf, const char *fmt, va_list args); +#undef sscanf int sscanf(const char *buf, const char *fmt, ...) { va_list args; int i; @@ -300,7 +325,7 @@ int sscanf(const char *buf, const char *fmt, ...) { return i; } -char toupper(char ch) { +int toupper(int ch) { return ((ch >= 'a' && ch <= 'z') ? ch - 'a' + 'A' : ch); }; @@ -366,7 +391,7 @@ void longjmp(__jmp_buf buf, long value) extern __attribute__ ((long_call)) unsigned int Rand(void); -unsigned int rand(void) +int rand(void) { return Rand(); } @@ -534,3 +559,8 @@ int __aeabi_fcmpgt(float a, float b) { return __rtl_fcmpgt_v1_00(a, b); } + +extern _LONG_CALL_ void __aeabi_memset(void *dest, size_t n, int c); // { memset(dest, c, n); } + +void __aeabi_memclr(void *dest, size_t n) { __aeabi_memset(dest, n, 0); } +void __aeabi_memclr4(void *dest, size_t n) { __aeabi_memset(dest, n, 0); } diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_eabi_cast_ram.c b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_eabi_cast_ram.c index 8f7589a..ed2a343 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_eabi_cast_ram.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_eabi_cast_ram.c @@ -4,6 +4,7 @@ */ #include "basic_types.h" +#include "rt_lib_rom.h" //------------------------------------------------------------------------- // Function declarations diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_math_ram.c b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_math_ram.c index 7fa3703..a82e96a 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_math_ram.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_math_ram.c @@ -20,25 +20,28 @@ float rtl_sin_f32(float a); // int __rtl_cos_f32_v1_00(); // int __rtl_sin_f32_v1_00(); - +extern _LONG_CALL_ float __rtl_fabsf_v1_00(float a); //----- rtl_fabsf() float rtl_fabsf(float a) { return __rtl_fabsf_v1_00(a); } +extern _LONG_CALL_ int __rtl_fabs_v1_00(double a); //----- rtl_fabs() int rtl_fabs(double a) { return __rtl_fabs_v1_00(a); } +extern _LONG_CALL_ float __rtl_cos_f32_v1_00(float a); //----- rtl_cos_f32() float rtl_cos_f32(float a) { return __rtl_cos_f32_v1_00(a); } +extern _LONG_CALL_ float __rtl_sin_f32_v1_00(float a); //----- rtl_sin_f32() float rtl_sin_f32(float a) { diff --git a/RTL00_SDKV35a/sdkset.mk b/RTL00_SDKV35a/sdkset.mk index 6f9cda5..825a814 100644 --- a/RTL00_SDKV35a/sdkset.mk +++ b/RTL00_SDKV35a/sdkset.mk @@ -19,9 +19,11 @@ # FLAGS # ------------------------------------------------------------------- CFLAGS = -DM3 -DCONFIG_PLATFORM_8195A -DGCC_ARMCM3 -DARDUINO_SDK -DF_CPU=166666666L -DNDEBUG -CFLAGS += -mcpu=cortex-m3 -mthumb -g2 -Os -std=gnu99 -Wall -Werror +CFLAGS += -mcpu=cortex-m3 -mthumb -g2 -Os -std=gnu99 CFLAGS += -fno-common -fmessage-length=0 -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-short-enums -fsigned-char -CFLAGS += -w -Wno-pointer-sign +CFLAGS += -Wall -Werror +CFLAGS += -Wno-old-style-declaration -Wno-pointer-sign -Wno-strict-aliasing +CFLAGS += -Wno-variadic-macros -Wno-empty-body ifdef USE_GCC_LIB LFLAGS = -mcpu=cortex-m3 -mthumb -g -Os -nostartfiles --specs=nano.specs else @@ -39,6 +41,10 @@ else all: LIBS +=_platform_new _wlan _p2p _wps _websocket _sdcard _xmodem _mdns mp: LIBS +=_platform_new _wlan_mp _wps _p2p _websocket _sdcard _xmodem _mdns endif +ifdef USE_UVC +all: LIBS +=_rtsp _usbh +mp: LIBS +=_rtsp _usbh +endif # m c nosys gcc PATHLIBS = sdk/component/soc/realtek/8195a/misc/bsp/lib/common/gcc LDFILE = rlx8195A-symbol-v04-img2.ld @@ -81,11 +87,14 @@ INCLUDES += sdk/component/common/drivers/wlan/realtek/src/hal/OUTSRC INCLUDES += sdk/component/common/drivers/sdio/realtek/sdio_host/inc INCLUDES += sdk/component/soc/realtek/8195a/fwlib/ram_lib/wlan/realtek/wlan_ram_map/rom INCLUDES += sdk/component/common/network/ssl/ssl_ram_map/rom -#INCLUDES += sdk/component/common/media/codec -#INCLUDES += sdk/component/common/drivers/usb_class/host/uvc/inc -#INCLUDES += sdk/component/common/drivers/usb_class/device -#INCLUDES += sdk/component/common/drivers/usb_class/device/class -#INCLUDES += sdk/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include +ifdef USE_UVC +INCLUDES += sdk/component/common/media/codec +INCLUDES += sdk/component/common/video/v4l2/inc +INCLUDES += sdk/component/common/drivers/usb_class/host/uvc/inc +INCLUDES += sdk/component/common/drivers/usb_class/device +INCLUDES += sdk/component/common/drivers/usb_class/device/class +INCLUDES += sdk/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include +endif # Source file list # ------------------------------------------------------------------- diff --git a/build/bin/ota.bin b/build/bin/ota.bin index 24cbae6f2d3066784257f09d378cb9308992aeee..df810dc827fdee333278b5767ab8b358a5930aa7 100644 GIT binary patch delta 53541 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 KC?n7Q!2Sd0tumwl delta 53188 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

>JkoR=4^L>6H`}9HgbSF;dJp<3)19Wdw zKZi5Xx3bVZ2Kf6568^yh{C#B#zvlqI*8p8FUt~P@EBwFG$}CFV2wU+)5554*1FHcI z8a67j_}7y4MTJiQ;UEqqfmt9QJONgKb>KNIEnHc`#tfZ1&z3UNn*CT>Zu+e3d~29> zUdh^JvrASi4hdcxs_l(X4l!p(CF9qDM-}?D2j~-Cz=VeYLEt!Eyyt8a<5Qs@hA$6# z9elm8?U0y-f=574!}@kmx{>i3faB5^Z{&Fd=~a+7AkSm{AjsNH%*nl>tcSw`gn{$0 zJwXQw-Ht;30(OH=*!v+{kk$+upf?K}oWe%m1a061_zlPcbzm_#k36w8j5lGuH?b38 zC~GqGl*%B+k3q46EPx3>cnMes>cDpJsGYa3JWSS)=>L&wNurXZo|~a4Q|H9W z`lVBZ)t?m?BNlNfjf5Quc`@2Z_Y9ZCRLYVCauj5l=AEecFyGinW3$&I4Ecx}mZZEI z7=b?*KFH=i%Xr_3_Ju8$`@xm7>c5hd2iQ!_!=^+aaKc$_O0x22ro7*QFSK@sGCjrz zn%I-W|1`d;#_t%%_#LUR(~vcgFz+q;nmDl8+AFEb>%ra?uMuwqygA?PkfCpnna-%ArXA26~Ta z2g7Ec5g!3WdH`&H=;4O#lx{gCJ{d-$nc*AQsn8u~j1_7tC0+!5nQ70dmiTJu&jPVS zEmab)fZkx*)yV%Y^iCkEl?||OLicMi%FBc84?SA9os#4WM;welZ8GYlj*}AK1-;T- zp%=CWTkO5q;Ds$NMN}uYoTbu&^9r9kZ>4kzGS$YVPlTMyrCDDn{Lz%b(wDF^;ID+8 z0sk|QqMW{ksYPWR)x{= zJqmNX-I9>vfQfA-FQ+pjJ1fnWBeFgyvf73qk60wNc8&5or)L17Ng%f`g7sJ-g&k?y zNsz%kjOPfy#kh)tF*pULBxE^c+CwtmV%j@}94qs;A$Q*|^W%^$qh)>$ayar|9wGU> zg$q~In|dKqx08ue=o^b(x)|b@r{nvZOne0>jU-+ZL0khTqKV&tJsLE@-VlZ7LC^_( z^c3O&sifEbqTrmv=*9s};0F-$uELjqZD23B3Vbw$&j!zH_z5`xT!Qjo>E`cwFI+gL3c=xCLTPD7*xegM)xRQn&*g03IJ>BcKpe zgM;7_82pLCCxb=cMQ{|{2H{N#Ujv$(lyL5U65VZJKR5$!0Lv+yW{?l6!Dl8+Yg(ri L`Y9*3U1a|S9YA^y diff --git a/build/bin/ram_2.bin b/build/bin/ram_2.bin index 1ad20e21a2dbe357f8b7152b44683264417bdf63..6c94e5f4d007fa3169ed97ef1fc7796b4fc136f5 100644 GIT binary patch delta 53526 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 delta 53181 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�RgNO(MFzyw_6G$ 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 diff --git a/build/bin/ram_2.ns.bin b/build/bin/ram_2.ns.bin index 18bf49157d4cdcee68953c4f8a480dc3c4361502..f15e377e5ba8ccfc57114794eef228a363cfe0dd 100644 GIT binary patch delta 53536 zcmZsD3tUvy_W#-QVt5|}l&74T0U2I82qvT^FAw0Tr1sFv8Z~p!Ow1m5tqZ1>W)^m| zV^UqU7iJGe;wCDhm6f+FC@alON^2~$4!-8h^ZdVi!0O)r?=zn@`?dDkd$0Xkd+oK) zvCV^;o*krO)^Aj`#@y(Mm-f1AE+p%gCnecbeXLO#nKaL2FPDhgWQ&*Xb^FaJC(IMGsva#}eBC5(`>1he{nQEF+0gWzT8Y7cMaj zb6&&VGF#Y6jD}J*!~AAoSd}WD98@tSNVHJ6QcG9|V5)F}Y*!WfgojnvHIPhgU%F<* zT#g?k8GSj+nH;&h#cr%77M*m5r;%sOqq|9_#h!*b<<_2-*KRv4*SE5TH_2?u#*Q>c zzCE!j327QGPP$HJ(s$V-xsju~Csl0*PQ<=N;sMBJP1;$Fgs-sYj$ZeVsa_S~o zpPSE@@J(YYYk0Qsxbr4ilS@h7$RDq~;?!`llB67WGF_|H4Eu(TVXIvX^WJ0qO+BGv zm_&s43-i@;RQGv>kJafh7 zHzFz+y-7G4v4Wg#tByRQB1&5x>mreTK%$*X2`p&KA2g4|JDU5WeuhgcH~V>n+jho| zR}Iw+6c>jgQ|6%G)l5k>dVVnC^Is5jgI^4-9cbd?!kdE)4H1(bHPYc6D~(n(#+u99 zO6e##>TcYvHtSAs{Ea3}H7Bda#7ZL+ZY>M0R;6j#?2pu}zFl#hR&-L2FW|}wbe_|f zFkH0sGniKq5-oIok0;0XRpF5Xwba4JC~H3>pORzs-_tmeTLC`~1l{d`I#5GmZP zYCf2xnE%t2Q?Hmv!71ldp0+00yTkb%I7++uB)I!6;17hm;eHCJ0QkB!>~Xlq04D%p zAFJ77KpKFK0m}8Gtx?hmW!n|z##YOf#+rmLqNFc^K}NboVaz4ch4(e_dij$HjY*fr(c%wfHY^1U4lo;bf)zr6I zp#yH2-!PE!FoxcJ!IXy-X87ADYc4n5X9(sIh3Aqwi*Ho+_I(_^y~i@yQu8|hS88sc zwU5!OPnGf<&q(8xoM78tX=J2VlvRj%LwGuQ2x$~vOU@uug`>%-v4?z-)};C^Jjrgj z9C$0WDpq=1@F$yYrYxtdr-OS1SW3HsvbFk%ntcZ0Ho(V#qkz+Zvw*6bZo07+Yf$;8 zYF0)#4!EfgF>Es2iJ(&{Jdlz@1Yvth8fg{|rHlwa?{_(CF8>4k{#o#*q>|Y}VrnVL z6=tOxLa%kKPgs+hli2CiS`+HnPTKvn9<)A{7!p3=NNSpPiT|qeq;Mg12-ziQhZc}z zp?K(s23mKDJL|*0hSL4;=PhU0$#DM(*a1+Pi`paj@}3-Pm3>R)JiFj#EaP)Rdd$^X zRr#_ir}JDpj=F~f=d|7{&S^Q?9>sN$rZph( z(XQz^Sv`X%8|>M9V%5mtx^dCdk`gQBcppu9W;b15%zTWr!`JG_;$woOKXS6C!X{VS zDOQ|!n>`ZyL^i)_w^3Gw8|+~ysK@iUvj{5>-2iAK-$5e|0lozE0?q?!T@4H)!&BF; zr&|#pCGGKPQB<;=&8v9>-+8XCL)=Bm*TMf#z?Y1 z2ID$bde&=k#8{KVpVCSYbA@Vmv)I}V0LqGwHP9#N+-pjBDIe)tfgIL{#R=R&z`c{lk3YR zPQ5JWuAa5_;>j(QgfB*wr+K#7TPn5E4gTvUXV*UyGUO}O&QVnw>3gNAL$z~cl~&4^ z#~L7tjGUBQKeJquuTNZ6UsivxK6EzIG#ms*dUEPd2D9ZL+xx+6S;#gR+054T|05Ue z-yt3&{^L9b{Kt57QmC88MtJC~2}SsQnff%IMEnzvu0eW4PJ-9xj>o^-oq+$V?zC1* z=RFuCI_p{twm9pIr7t)a=QQ`If?*bee6y2Iq6aW()*7|!mM=8yivT_R>k#)Z_@98k z8UCRc)XeK}_X9oyYA%V)NHw`b%&Ozj2>&QE#$-9nGAG4Uaa&zDVou1roOA|$CBN>> zx_}lcfXV++vp>MihC3WE2~Y!|>)=$lPGOuW)pSqSHD3QAt40j(=8TR34m;(3PM;JW zF-;&33-6moWu$_)U;6&ytqQzN?36pV^k{-yrQBUBq^2ikzNJu6gYY4!*4RC3?K<>z zjC8Zo=Ui)72mMQw^Uf||cKVQpc?zBPYzg6Fq&0gm)9=3=9BiaWli#?zP+Gj_ny+XN z3vs5#Plv8vuDQ(AMM=}#8s6-Pmd^PMVAmkYhg~a5I)f8Hqb*7*M`|NdSNg(`_PY{_ z|MMtM57!Ayl$%r%C4JgK*8w_Gm$hoxFF#SU5g5h2LS#l}>iY^AtF4fn8J3atbjURF z>sq<0Xr4_UB()1uGt$CeQH*>kHo_R`ps*sNxM7vDtzvxgXU+tk2xQbCX@x?X|A2`6 zb(w}~2kj2P+W@&ek`LioNOpF6*raWhsu4Oq@>CeYE%t4dmX^e5^s&4oMI=Y!VYy?Tvd2$r!ZoemXr#khK(4PrJS`hrth5L znBVuINVxF{tT|KY;+VX=CmnBflug#E*k zRMG(B{iYc zh^I8Hd7$JQEf|d4Qkcc&xL13e61_&QL_m> z!o8Neb@zX+W^eku?OV&&YEswcD4b40dvDUPt8dn@b#0N?O()t9fKk^rfAlg<)J;g) z(~WvRq+yw!wx7rFD&0ZE!9Vf_UQ2FoTV6h0MP3k&PWUJ^9f$=rH-gNo zdE0BbMe`PA^VP`-6|A(b?TYmyLhfqooP0)4#t7SQnHi>2Sc9>}=ep`?)7)xPYtKHa zVeb-ZZyQ63g;#E?HTis;Asy+z$zgp&t(Kz0w9TYID}**T7K93KW9Z)1mOtxGwf3$R z8uqNP`HsVc5oX<)q22gzhJCJW&7IAJw6_`N%p;2*T&-b01VpUSur+`e0Y3t+fa~#y zF91vc+y;0G@D|`3z*RsN@U92U13U_N2XGYd8}c^EGb}kB>Z&9@k!S2-(&Em#%3h&w zZcgeC7=w}0x3bBea4+Wwliv0)Mw311ZVp&Gh2nVy4QB^NVK3a`9EKqS$6UH9bY(r> zs%=`!Z{#Dsn~E_rgHa!2xDa|uditPYiggME@T<=Cj9LhDe1d;gHk$D1a)u?@LAVyo{?(<*CN4~JU`4yJ<6B7iw=ti6 z71Fm>mBn9YEe83IoNKXkL`#p#MSPg_f?LNYba3z$dYn#+b+!ChlaPMb*oO7WOr8Uw z?LN+$VA~`=hFxkkcBwTihgrnR>So5s2>HCm#PJc3UX1*ZYMR2}%oZsn$+YNMOz2md z=A$yxNQCQwnZ-v}g+$4NCKdWK8dnZ3b&Zv7=zQgj3 z{3N%vEa3!`{*Anr3+XFTPnR{x8_RC$`C)f`ZKU*vqUqC4Rx( z+p2}uj(Ftea#TIU7(3OPR7Vj_9Rz2T=wQO7ZYJk)kIE=HBPR-FfAoX~W6#mp?z9|d zkJ@;~skMR$+@KDvF$pZFtGreLO^@)DJ!OcrM~keguC)KIp>W7viUXs%b_MxBXsFF6 zS%RZ>yf$%<+<95JQkzALLfXRkJ0I|K=9VswTgC6eT;sb-AQ&w2mmsc$)9{Q*Ysj%} zv5w^u>!O4RX$u5Q#>_}xuiOW0eK(z-+HOWB`)=c_`Eco=64{*N&>0hXZJ&_|m-Yz4 z!bN1ape!6swhE&cWsp_E>_tP!3gLl8rX0U~ZZ4&kw9?2^N;7*(K_gqqYkqs~qIt~l z={@*hF zxQ3ku$p4sOdjRtR)c_6B(h$EGKzm>d+yz44J;@|bh+LdSMhK%9XON@9?8S!2F3&Wl z%BVABqO{+I^@}r$*L#YbIg649DmOHcCC&3O77S~yqKs`p0|V;bB~p@x8Sd(4hQ(O( zc{4xM7A}Pf=NA_@EEp)0)`!-M)+e@|n3(ihNNHpfvuT5@wJ_2Q&$cq%w^}g5?4=4T z6^?Ek?{(7rZ2-a()ab{3G>r3wq+cy*DW~(%V1aLU<-`RJR$!O(P6hk{2J1tfNjY8yb~k?jplDzHc`ptrTW1Noy$G z7s7w!+{u6DB;YC4kNoal+o5SvH>sLP6Vs%I?nNDpce~9UX`Xc#vw~Wb9UjK~^|$@o z3qg9cv^T(*yT84H9@lePmU7`ofD1YV9nTo*aGoL?-;`Bsl(fM^pa)_kr-zuEwY)kf zqDy5WCPS*pMx#sIn!XIem@WJ}U10R63qu%bl#o`J41r-xT^5-q%&*JK4)Y8JpF%t) zJIRUbR^`O?BqOZ24XH_Ry*L47u!->&8QK{2@`2EH%Q z4{T?2)p=*aT21iymx+T1x<+TS@u zvh5iny}C!R-4_=t->!w67sp5PS|b7TqolFI~G1_rG#1>7TnTe9-2;=TIks4vn z{jsqj9y1>r6g6~4#X!ehh4A?OnUPaKRo_+wN>Ng_uKsfTivUu8DOS=Zm#W5#Xhe+v8Vd{e>GFf=w!I^{;K7a7$hF=0| z-qNAM5!K8qt`t8N^$U2~Yzu$Y$z)&c9#s`7{T`rN#gXv!1ay2+hXuZ~fda%Kp8L_6 zhwyhnoNV~If;eXQz8JvKa^21hg#Q!7F~av|5Qn=3-h%^3QQQG%D#Ck$NJ;QDqjCuy zJJuTPdal(u1Tn7%)8gRU5KPk>fCnr9ECu{i z$gfWhpA(3f7>UUiDSa*6TA!tgSSLJMZ`8`SY1#F{&ic_cStl5F3?LM+3$PCm&1F?9 zu124k*GRKulK!*ve*5hXh?dpSoZ_0~V~nbF19nf2*S1QX1q)}b(B{OSpxC*>h~>#M zntU2#oK>5iRQDsalAgLysaa7=^OY%A?=*#6@jUdevLmO|QlgT{A9jWYX^ux(YH6GD zAE!1L9vuvOl=tY`0KLbk|6s-M5q2yui=j&e)!k5i4%OehC|p@SCSL2)w$7F{-bTdS zzFx!9A+b`J@Q+MQxb&MM)cqqx#bST{hk5b815C&8a(&_cvYKBfXn*UW@|3ia#decm zno+K?CeKK&O|a`73DS@Q{Zp}jHqq2@YdlZWQ|xy+I6gu8+J7U&)dcASA6??88Z$v^ z>7==+RuTDx&;OBXtO9L%r*T11S*PRtsYhBJ;$qv!8bYjkD9HqNMck<8eRO}grlR^4 zU6}XFrPAwgfuI^ga^@c&HEEN)fKgnJ1vm$MEFGhd3bR(EHDpiR0ezF=Y6{NC8+tOQ z%+F}$ht(vQM%GU+_oBjy_R_ZS+E}SHI=#C`ewjR>rHc=%p<_#kEBlV%@Twm9z}$R$O_C$8`wvQAKC&N-|ED%TG|ANTs;OoD#jFuwFGHk{{d?ZYN{Z1#!p6W~5b-KD|0DRqNF-8tH&X zadj(dV=_jn$8{&#MeEFrfQ*NVhWpe8TtLDX=VJ_(dd2mzUk8;)f0}AI+cVY_E}VZj zIdOa7b0_UmntScQprf@}Cm0?X9d7kQ<>jE0d9^U_k(`Ev07OfxhKFqFQ1LO-*@Z!Nnb#6Lts0h;cxf%1pi|;n-`^JKWBR!##a!)^aPt zAEMxt<2BOQuqx|mxoTrVeWf+b%QPmXy@bQkK{>riBR%6ThxRnIk8M!Xr1H6?*8XIT zw8pKm@(upuR#Bxxw?Sd=JZT zhc1<xe@4wTX6e@(epUNL8X>{7#WZFHTxWCPQ`$I?E`ij(7wNwysj2*>nfVY4LCNdJ8% z!=$mpR?8zTtL1ww`6i2TwYTXB5V&{d{VajiRm3lCJ5 z&Jfya+Q1XD$bU6bgSb!+6Gd-5($}=&f(8uTB}`svXsGa&bc78|Jq}y{qgd9qLa3$+ za!X05G_vD?9sSdca*7tjw#QG3uYx=zJq(f0Kw?4bA&7ysmO&FkArOa}VydReCN@&K z2eAuTx)U#eZxKsZzPa$-!-m5*8@|O2Y*-al3`R<~bkG7;U=>>npj*ImaNh*H2RIJ+ z1@KqlHz506EG@h^SPid6YD02I zqWu>vG;|H7g*Rg{`L7Bfybo{;z_v$Eimo!$LwDldUQgTQlMTyht7Q3y`Utp}Kv; z7jP|AG~AHtfNQa0!{MDVK*i;aqk5sLFlmK%(4;f}XmfD(A_rFC0!E;R;3P-j<%Bq6dUQdN} zjU3)|Jo70yNAgOJIUdCP;YzH zHt+s0X`XOob=HVm0@?iFV4bH1YA$P*WkXbDs}xs{%$UFLnc^t9m=~|-~OJG89 z*rn9?VB8jLka|hwX3{xc2R;8;<&S#pZ6-ULlioAfN;V%~7b5+lXn9*l zh!pu}jg?@H!+hwk!c$HhK6fgvUhEMG4l`=ESa{)a6S-YD^f+zLg~wCV-t+czpugOM z-v2IloshNm=IFKFzt{dTVZ++Y#Nvw#E44@QkGJB`-R5?XHyIp&LZlwy=-Q0rZ*edR zk^G()-0BkAR%xKE)aod5U2=T0hwCV!+exKbdbTshO4~w&aqCi{@Se5KfEqrsZpfJV z9yG4`j>si>*O z-q^)-RsPPf?h6e22w=mn3~rH_VH!S~f6NvlHG4AAYcF_Ai{{(!wk118@)`ptEPle2 z=7b0U(G1*Z#`2e-qrOvr#%&bdej<-(g;P(A&KT#p))T`(YYb>5qxCABd$v@jc4+!o zjJI!u;`Ou0W5VY3HSw<~^V`lWr13+SGNvh|!qj&dn7<+q@QiBd!-4cp zP@_kqt|u!Cq&?g0q2S8XG|m_T-!t&(;I0c8K%d^4sihUz@c!hNP`u&J*beU*`=|~N zRE`v|$)^%iANTy?^q78h9{Po0rvl{m1gn-$cp@5oHAIMcIzH=VrK&?` z(DcPII?0SVR|G>IopcfxnK0*p$wOo>T@Q592BGHZ#7a8Kig1*VgN5J&(1x?x{?sKf z`O!)L4*u^8UV>5{)a_r^&h*7;ah;0P*~+$#ghH$!(hTA4r;}&??6ZIiRZtz#)B=TA ze(RyWQvv#4qMUM)EsRv_{@qDlpeljSlosp>8tFy(EgKEDDr6_6HW)cC^ibbHT>I-J zlVEBx#M}lw=csPV6Sjm!ZL5Wwn+iyXu&yZ!cLHrq1$mEoxut)lyASMGx81IjZgpRB zvY@^a{EV{FxJHbQPlecx`6|PCf!{ck91`Yl%$nDT>_0jaF|0;;-Olaym_EIVbg#E3 zcZ7nBTmHkjejW9lkbiYzLYdS{)piZP)t=o!3zdVFdg4Gb7QL%IHCL5~*4R7ChV$mG z8+eo5v3m>Xekt^AOeTwk$Y++4LZRWAOzV4obKRMs-Hx_E)4eU&;W{b)KvCyWOkEZo zGsD5yIfq*M7#E-OY$jXqJ{n!|$zHaTrdyD%NBSP2@0rB#T{2@(8TIIfBSO4zYs?mG zp6>wm0G%KgzG;ne>Fr7O?que~4Fe>5iE{cTAAg+x|$5>#B+3sWys{9&J2a%jB`&VzBsss>Ss~p8ngY4l?eiISIU) z%9AxZ>8(x-UrZ6j^}IrJE$G%s{}QHddPO_cuahPU-c4!IKl^@m2JxT%0JS?PWNpri zN%4=c>7=2M=I?O~cc`RCgaw-?5S8%e=1k%fzS=w+i*LcRC&^ABS{$MJF(8zPaU@5$ zS*UZLtB=qCSMk=dyXU7!mZEcHN2*fEjsBz zrPs+w`@FJK-KS?lK2}L?&qZfq?Qy$G`rdoNxz&E$-cH}DBfJjgLXw+I zGtsty#>>K2&$nqSz`9Msh8LD-DHER;$csa?Tada*NPW>no)=1AOvC@27srq-!V52c z6ijS{Lg7ojq_r*nW!$HVG|jRCm*)mhpPkn25xytWM2PY=A7iT@W~TY>E^ zu_c+z5k|GVMk3ozwag=-?*Wk_-!4?YzJaj9H?Q{u8?dwO&0XOt4Azb}KT%a}5FUGL z2X(UFP9k3l6W(@_rNX$@_i2>M@iTRPbySgsZ3Vj>s?d)??-)Q5F1&MIRk1<%w*8+# zX}j&;HxL@!`tD<7wP4sI;=g0h`!wpG9S@Rq!j+C$I?BhaL2b9}y`GRZVdK6rWV3K| zUqM*HFtF$PP=-kt!uFfVLZM*)bW$WdzJIEYMUsA)@csT*brg#oCOpxZq|^6%U+*l7 z4@rmm2`~w?X*4avA&>((Dr6geU^rMZ`+$j53M&uXoS5znn8zK5x>`!}>iCh6t~GrT zOeii&{y4BWm1d`fL;%tO`gXPSxxz@3-G0|eVR_fGAouEpzOKy3htYl1vg8fGd?Djt zPUN26fNBt5=(mP8s_2k}N?_@GkPl87O?7i~QC*(=t z(8r0%g9D1`rTaA2jQf-9DYhT6+tJeKe11~6@^Ov!4IFnb3)M%GvE|P{;)t&E+w6)< z#tsq0Ys>ggraEyO2)_cj*4G-?6>UQJtT6xR0@5NJJ=#3<@NmMaM-Vm=kU9WQBaTAB z2;s5M{uxiRw*Y8XI)JtSo^MP1JeGuBqrOQP)omg#3p2Y=-$BGNKr7%o zKrdiV+qiFXG?A3tr+{u6B|LD_N%jb{zgtDVYy085&sD_~``R)_b5lyR2wHGyF6J-QQOH^Lj#_ z6An9jXpf&eLOyAm^Gl6Jdz{i}YroK-B5$>gk{&0a*D82cINbLyEj2xRtF87Ta-S8h zTpB-_MufoPYQ|b3t%S1O>_~@>0FtLnhY811r32+`U3=UxzC2`-mfr>|E1%1!Fs7HL z#+lS!Z3TSy)7|x)uSy5vPs>t@NI- z;!1JitqK_xmIql{bH1mpQ=P5vdi8#KeR@tfdL^;p289%ciD&= z!pI3>`ZS^01~un%O@$oJm~ZH=uoKSf`qZN{ZhN#CtJ+`~N7kauq-sqc2md_y6JSZB zmG1bnCNp7DUk%(8q)&&x6#ilGPZs81&5HXYXc#N6qT-p`c>_jz(Nn^Xt5e81q3>!u z=@3F(kHl9g6>XV3Wryx!%ZwCW4;C#Ho^$0?J`@PS0l~ogTs*|* zr(ei+r$pNQjQM9MI62J_HDOJmyoy1rrRME-hS+oBS*(wo97?ksY%@VR>&SuR9+ zG8$6-ZBM|&u|eP6c7dP)w>xp2>a7*ggpp9 zuD0wsI2Nm`=?d?5jp?eZd1D2HCu#d~m>5VCI%95yO1c{Oc}`s? z)w;^j5uPW&=DzhCd@t#Kpx$=nBh|XOzt-rHi`W zDBR&6TunLh$M3)YJ{D#^DlgSpcORf}iYvE^ZHLJPuZJRokuE5lt<}>gm4ud*^`DR! zJCUAp_a6+2^o-EyACh_n56rIiQ0bB}#kQ;7sE{?ON!aliJ8T|=K7V5BSf7U1c91up zb}**vA%a*y<$z4g>K-Bu7cv8>Lv|r_wdcGuq@8q-os5aGCqZ?;O_&uJ(eR*RwsFWA zG$E7(#SCp~dWVU}gFfIa$K6=bz_n!^+EdcdMl=TgaPOyBL z(48auQ*H~E+ZVheqbamp7%ED(F51%H_n-|zsFJDOkFmB#7^RpNT=LP9f_4)VI+O4oqG`x%BY)wM@X)}UlsGc)-1yU?X%gkFFuh0BG6CtOf68Xojytb`4AiN|#muaImj zp{#-uNGmP$K&XR10{(jj{BiK#J>XA(-{xVBEEYz(@J&N}3Gj2_zX|?E`0s&#ibrq# ztuP7a47zAmdT=WdTt2V&Q1x+lB&H#Q%ESR~czW}TWbo}79eZk&0m&{m?*@=dI~7c{XgBGi5Ob1Fwb=q=fU|88W59&7~)BxI1l~wP#R+B;w`&H zmXNsY3+^<$ILNZCmd%!tP$g^nvXT0u8@H5wIl5%~?1hhD#%iStZgC1B*@JUYxpc}g zOs^8SWpFLI;!}haku4(ZYf~fFxh);6F|j%k(`l91M@Y44uKTc4YidUi9YZ4%kk5x+ zqK*9xZXu;7&Q_5u(*lorT?qeDnHI)I{ReWN>z6&XcGj40d!{NSUn}K^J5?l^B#MVs zWV-baXt4`>SUlr;5T%`y>-L?kXK<6pnDF**dw+MszLR03TzbZiT5P?yDy9BjYhwMA zWeZL)CYshiAcu?d)R3e*#WiYjE7>TXQj^gkBa{+8;JPR#Ye;7J0Uwjw(Nl+G#|y2+bvd2E}vjiTt6!T*S$*KWX$9a zs^7`QHSUYl-08Y(E46ybt{Q67NQcEWT4GAv6|^MP7>z)B1^x)4F>uxYfPditN09rULIEUV(+rv8)*ULDxJt5v2LT)D0 z#WzDp8o4AM4Iw#3n)O;1nw>tFrO)OTqxp{jazrsnPq^_3O2|Y!H69yde;E@wydoBz zroy8VwuF)1>SD2XP%3KJ)T*tCfPVYcyAXE|z%DM=lgxPgK#)cgn61`TBAb{WN@B&2 z^`t_7#ZFiZc1C1F2}hb}N*XyXP6Yy-`Ju2S`%>IUBb!7=C>cT)i$_Ayq`SnlFj5?U z)T?ebIl3;@JZNyn*1)l8%DBXo zX%tOfEshI^3EkT;VR$Kk<@Ey7dmLk1EmiCho5IP~m>1>wHgeso^XfVmcTnx--Qt)C z%;*{7tr4WMp>RLDzpk3cSVwH@}u~4B&i|qh^Hg5VuXt%io|EN_z4%h zl75`Lkct7b4Yw#)or616Ep+XHsf?eIINU9-7RN`Cz0nXZ5P+EWX!12AnFt!gPV<4F_ARrZK~*1T!p@u zL8KHna%`vK`g|YlQ5fVPB~x^>BrQAB_tK)Aj(&v+rAROD`nzvWP*<#hsU^Kga=FE_ z7;?j?raT;3^L0 zG2(_nWN|p-9a44`$Q^`Z585`J3G?*NpWw7Hw$r~FHwthk!Rm^jSXMsWeO$CW;? zNO8H{7&?%cud#>br*tUoM!+>%v}{;@;tmFHfXY(471#Bid+<7_Qalky#+TCU*Q!CQ zM6>sIW|$|ULv2m5pIxZ9;_&R9?WDM2S#*swcZC^n(n2*{;>>s=ChqG^3LQ%dVuLpPYY}&C zv7>4F4!k_D7s3pd>7v!3xOm_b#MKWM|2>%eIDzJ&xYwHV0m792H4d$YKZ1@5xOu=TOX6HJxS@Ixp+p^_f;u~4Bau7_o6)b%qAeD(!KK@oJj!sPX$50d0d_EUCqs^YrG z9Y)(dCe{WkmUbdFkEUdA$)Cw%f9};>9;f12T>Fkq^(>$RqQeY57v-WJi%)I<)66k+rPtO%>*sId~wQy zFn=y}WTetiFN}YptAAXmw+kie@;ENsmc>T|4G|UB+j6+|M-h)$V<&9(7IkLf-r@on zMeBX7p0v)i4Ya@L6A?8w*kpToaLCZ1LEBb@$BP=Ud9rvaiR7nL;2yE4lcc+yG?5|^ zBMI)x5yQpoWHKz05~Dz-Jm6{-O+$%^TrXA*h3rr-E*nZRY6*-P)RGOtg0_Mb zsD+OPDt{T`&hvl)a_QLv+vpiQo!|_FT=i}BfKVJN)d>ML;DbL=>wtGY(C8vYGn;! z+)!J)4&MPi4GLpd@m3snyq9#cY906mtvQ7cJMwru2cxoB*Nsi?+!aWMxGs6|}Ik%E{P z0venL8B;A%Op5HR5RY;sk8Bpb97#*L*AF$0i9S`Mr*FEjIFw_~{_2U>8HiE46Sl2y zi?aC8#-V0c}}ugNIA^g@9|C_pVx|5HDk3i+H zeHC;5F>LE98ZOVZk)3u(V18g(XTiY!E$N`5MhUB#ehKQc;Fx=q|J zzG5PdhNis%*Nc1ml^6lnI!~_s<>XxS`6g^>b)7}1OThI{#FDWzb{%4iIyCpfZk9#>04v8)z#s->ho0oNBD&?N1Fc4I(~5^yc>(VLlot6=Y6akIs7 z86=V1DBhYuYC;YiP;o>$DZZIOGEzsPkS97A=~obXaGT;wNaEwAlX^G3U-T2rNxYN6)T zQhS6|OxLR*^aTKqE~S-$eg^5GQEfPYZ@}2=Kr9C*{<;#Xzf?(+#2PcnziB@*cmPyk z7zPg0x4{_u-v0K5bq8F76s;Bgwh7N~kS#f=M(;O_9EW__8)@EOSu>92o#qvv z&mvr8U1h-a3r5j63`eU-vT%s(5fihpQhz5FXOaAjpK}&q-}ps8bE*f?{VTIxx_TJ zzXo5*Zv>OB_0gAd>;Ht``JeFq{|SG3EiB^cTx|TcTJ#2^uT?NHkK~NHmUQm#NkN8w zDgXAj_R*Vc=*xpolWpSiJd!%(-}^KZW9)0o_H^Nl&{_8kUOxeB;+uJ7#Q>+jlvDEi zxj9KJ9!`?SU2EXwYZV+QO8#5e@{V@WFewV&y-BgimH8jTL|D`|HP zgntryMv&2=G@3@)#TW}&RsClWQGZuj9RYK4L~3Y9x8^rs1J%D1si426J5kESqIMio zIQntHSljQem&8*RGKQ=X6Z1(<{KKGD2Z&>s68a@T`cVECab`Xl7riE^?YiLlv@3`t zzLJk2{hD|rpR6PIiPJ|CgSJ0m`AD*W{38A^lH3{7;k)2+2MAUatcFitaGepS7C;NK zNnBq*5)F_0LUC=`;=JH`2Uc(wTn_J7_+*m}Whh*XQ0sFalzKBd9qs9DUh zFfMNld7P{h+u<0t4bW;tXF!%JdBv!>IyH*R$C56UK25xS9N9al zZ6KE(w(Q@+ANj1PyMauh>9^cKMpE~Q8_3;czSwsInU~o1Dq)YjMA%PWCTz?rge?Zl z0jzs>@p$qONi2W1zd?4ml;pE;KLX4V{Us#LWWg|d65p!wA}Rsy=yr8I6filZ^$}eO zTq4Al;o|sGa-s5(7Q*HOIP=+7fD@S98*EcaVlu2AZg>b$n+V% zru#PB9MaS#nX2?Ocwws#hS$nW2FGWtp1=B))jzE^O3%xgwXfD@%z0%F2W*^bE69)r zgLF>G*}zGSWhZr2U1e|~Z5xcz9618^&<1?R52=@XM>ea~mwO91KB+tcsndd2fOJ97 z)H6Z6!^-)3PAX9~6SY*Lrg)Uf4gVjWL&;grNeQZxj9N-ibN37&X8#Sbzu*^?Ma#L% zCDW2oaLM#*1rHv;(_mQiMEUCUi=uyIl}^WLR!l?oN4?IS@-T|=G~xAP=E_DO1rOf-dz@yKp7e|EP4 z*Iq|>awqv%%&H`J#&>POmk0oKsp-IsnSrbyi!W4?1zI1XH@_QNg>Fv#0seEC5fn|& z;R|jE_mwcrcyWF;^uN9D9;znO2{|FgTgmvCdkVB{{2L_rZBdHVE6%r)1xBu;c2@8<`*`Pb0}Smo~BrADvb&@UIo~-d53$v$K4_*o>Nh&G3 zJgAH^A*ok(sWw}#$WY4{K35f zI3e!5g`_s%V+zmU(uWuy_$?|tgXOLxN z=olO=$xgq^D<6|(3&+zf{R8;=r&v6TRHsdX&CUZoB~|zk zkJ0Cvpx}9nd2!FUf$%tS`z&ln%f!xE#1Q?N90FVM(DOQy4LZ@{g;^w{!57drs|rHT zs~K7>O}G?{*;?^>#RoFGJvR1C(?Q)XwXDxuT8|r`XH@y67fV$fUaGtxvz)1R zkfZ!^<1*4~!oO*brZ;S$3ddkpxLWQlEaBBVeXf_3{*O^S`w|{b0w!tjcbB;Nc2XSq z7LI4d{4tp|_*`4Wlegm(v`W;@CIzNWZzI3fp>1A)iviY?3)1kD7pHax}@RMpbVk&-8BLBU%^(Yy3by+vsyu1VBEYV9C zKG$CFVcEX)Kw0RwyAlO?21&r(UIWA7`?5Yb7{Szp+vmFR-OPDpsXBfG z<^vtyra#BG&$U5(^KOjfB_3)?6)x%h7EA@7YpM9t-6XH!M$cFB*h$)}W2;JFXak0O z6861hKPEFxFJB3L=%fQ1hwXh_8Tnj-TYL3fAxyQ9c{~JU>gIcjgGB#>D=iu>@bsr= zcqZ{*JE>oLwW7-B%Jjgn3+ag{t?(Z0)xv5fvx?SS?Sj3mcw_-q z>pR811!P3xm#|PThHU<>Uq_|l#{=!qc0w9iEf(8J=IEX7zt4W3>z{6WhnfEh3d2{f zge>>D`Y`LOd9_h-{ScVI|AzX|hHnu?JIPQby(k{A6HDS;cRqBB;gT1+UYdNDTXXTd z5-R+J)RKKz6~qr}N#USVazEOGUiyy4=Q=HmVGGHmJFfRXC+D#mJ}pbzvsu1c7@bqt z6>f+#Xj{^xO@8{n*x!h+80n**gw0eLioz1VixJbLRKJ?)B`;nr|9@AdZlknwt9~rX^%0Nwl+=*Sw9@tk zQcF#1L=g?d8FV;zHs<#^cfg+aeSd$^C{fM_t9^FR@qehC&N;fN5Pkf1o zr*n4nY0?`s!1bqzF>E2YMYd2QY5Ddd9R@}KFwt# z=aBxvd)&}-F?Ryywds>Ffe;vctaV3w7H^g|&^5HUwUqY0*5f0$fpVR9vwgNyIPR~PTznh2|- zUA8Edi>J0KEQ+p)-Q`T%@L8y}367YHhqvmGENTEy6;!W1=Hdrg%5x+u`X`URII3bs zv44e&e*=+;-XNI1F8&2u@f;Zm;8OD(83pANV{xKS6A4E56=Ybh-XI1ma5ORSzL{Pyp=aX*9JK-cE5%!mQgNy$J3)W>8;Y)n_ zd>6mux*%=RW9Qpq$>KE8^w*Gqe8djTC)>y(R!~YZjX_|<-l|YRL(~sOnHV#?pUQ`#*g* zBd>Il7?Xs=hd2$D;0WVz5%sFJzyO{U&EaSOB5Dx zPgcJG{_*ZRD!crfbSFS$hP^=IO)*HCE!Wt|C2DLR!aTrMAv#l|PAz$*&{yj?hp*Os zFOXi*wX%}Hm}-+4eVleC)F_WWyZZt_NeojjB!(#J7*!#3k~CKb6&aywiW31tTraVQ z7LqQcl1*DkMkT!f4Fj#*iuowCea3f7qSq>;var4WBP?YRiDZonNyn6t5Ax(Y|9hqQbDx&k;>Wv+nkp*7G+W^)ipcCxiE z0+HLxuDwWdlD>9Z7VcSSSop+3#RmN%^C$v85NcbHhHm&>$|fHEiCYD$Zx@&lBVGdX zHkr+Si5N0-yy_jUirz5Cc-^hu_PdlvNUDdg#l8@MOC+*uG`!iWZOK_qt&aV0eJ}*o>>4TwQ?tP-I)6&@<>Me zxyJ!M9)h`;hxc@6jp!414pnC2&FIc)4lBJrHT?)w++ZL~kaq`rc`@l0a}+Rlr8JWSA@_rqs?7s{mZY1%9ex&^ zF5&rNC4QyMv4kWqDfbLOwI6we0;-emlMx#y|4a_|z6uvT`0@yVcOnM(4u+@#Lo^ef zRp-DF&dX4RnOL!Frjy@-)=(zOX$B4hV<0bxF_=7BWmxUxt58NPN?(RBQI^3u`Aa^v z9kypFfbwc)TT0^N#{gVAd3OjnK;mdZs-Gzq?>pTe6y7X!@<&;pWh62t8;L~G9Oq0Y zsB7mO`2jRhw`wQPU^AAH=rOS#*e&>poO96{(W)oi$**I+1|`2DCbg4CZ7~*~?u<3$ zIi6elt0+uxD}v0$6{4tsYAy1N5!jfmBXI(W`C%D}i;i|fHLPoprB~5`TqlqOl}%5? zstaZykdu0xao>2_gkg5_x8Wm1;C==;$j-%Rtn@x&w$+QRFIlrX>g67O^;FDif2Epx#*gGb7nrfG1q)~-&|p57OPNnTb$+u6sp5$ zR1RBdtOCPgrFb@vLD`p`5f&$Zla;Ro|M&%VX(gGlWUwo_ zc(O)&UTN`dfQRrNqe(p9%c8QWv})Vi3SpPvUluL~TmxJLk!rJ0u^;VNe{AY8A<( z7AL#E3OL=b%=ij1W_{umcPsc?M`0<8vX48ztQYS~vA_JSb6Qm`xB4%|7qQTHwWZB$ zOZ#5sidV=aqHAy%i(~v$=S?6AoxI7x8eawcuV&$^aqfJ_GFFq6_%gT-=!=B~MH`@e ziP`}m{ha(AN4A+F+{TuzCgCad0IXtZV4S5rZ;Z#P+w*Euy)VgHhcC;k@VqJ-x`KVN znoLL*yHU7Y6WCBt8#d(RxoAMc)ybDBzTsHJIvdDjtCoo^ot_#@N*N8Di zfSuO>5>jsSp$fE1;8WS?#U;u3bUjpL^!_NJd%oFF?BoYn#2V6HK-r(RD zTZdbO#}u@(l@+cdkA{8JsmCxNBL2KIP8BK(S+m)}*U7Z7^Uic^@GL`5^G}j$ zX`J;(7V`!f65gxz2((81uZpE2mZO6k*|TquEE2-@zX8HEl3jfREe~M)4N{l-p<8X= zRFVoW=nlRc&+FQrci{PbJZllZ8P8>H&u_5cHvupERZe-6sEOe!_yXy;9wrHVYmG(h z7!5M~3U!EkH3F=C!Ir&+X*$5py+szOcLCu)&&F&d<70&BWBO{S(I`9n2ltG<@=xXz z_Qgh$9{dH?lNMCs7(yYDA)Cl3ddJBg+eBUrI|TZ8DJbm3{sX{Qad5`2ZUXy~v8>Ig z>rwW`W@0d=I92vtWBgM!*!O7)2T0;bQ^!63fN#cUm z%OpUbzEA|yV7PapdA$zfI13nUo`mL=!q2CndZKx>^!}g}gL2~^(k7E1xFoSwf3|xI z4%vn5_bnu={~xW(%p^mbacGUP)RWg;7)iTf|5XbvxK+jC4-!>9`;*EmZW-0PbnZH3`^m zC9gI?b=GBqRXW@#egU2b7r(c zy`Ew~HMWN_pzpAntt4jrT^zFRfE73&Vy!8yKC-#*saz~2Vi;>yY?+Aot1{WFvfWTB zw#35qpmzUIDd=Sl{3|H7td~MdVy!=V6k7xV9c&9##=;UHXB&wa@hOx&1kX!Vo{xb| zb)X%X6s0YZK+oxtKPF{|#~+hYf=SupQCaqbU7m!2{Mh4j>imX$o1Z1*;jI=Gi4 z#sr7GR*Z_ED=;ccF)B+PJVX+sB1S~4A_v#tMuxX>;%cyZB<}UH!yk~2EMYsz1|dFk zJC3N&7_JpFLU2~O9lV+?-Z{nQyrFqooKyv7NgS`+q4@R_OWgtNb2=NjgG45eMWQ|! z%i&VTA%JpvVS!kt)BxjAuvqK+@Gs={Uydt=Vy#f)-a#TlH@XSzb1-g9X^6G1V@Gxn zvFO9X%cKgO_zr2Y3F8N`+M&UY% zbJFt|uZMweh_Nby_emkVY+H0J^=+VoI=1m`@J2skr`{$R8uw%<><(bgw@EIJ<*au| zR!V;BMEDi5xWVBwYb;UN2$}?mXSL!@ei{H0JPk;)7>G3X;X8njMa=aMF@#TWske)E zY6k}FS6HVM|9Vkh|idsy90@@&LZ7)YtMiWW`4lUjayjLm+R7z{I<7bQ~~H5`;W!=h*q zhHs)1F8>W_X2fiWwT@xs?~&{aiYPL%F^%#_3{+^UxR z0^jp)r1Wn~S&NkV3gl`ToFnm@E?ImAQD-$Z`PoC}Eyd8h z%nWbXfX$ODn*vUPle{Kxe6M$q!>{S!?s!8l!t$pP@QLN_y+!qT@;&vydO`)}}bBIat z?cD~9r`Wp>zfbaXG1jYIG3X(fm>BEtUbgdn(kVH{`n~s}RAhkKPfrEY+7FcaU(zPT zz-6z9O*0^Fpw@o4G{)M({(7JE3H#M6+RKT2p-yap#7yAyG%W{{kV}SQs=2YzITOS+y_5x&RJvHqqBf@vuug(o8RL#E@Wt#&ah0u#hl~{)|k{5be5*bsFaVX|0ojqAblKY&M@+-2< zsbF79{FHROBE+~>BBpRlwmC(PI|ie>Ca^>kqb&Qk)7{9>c%1K=M zr=CEJ>Pn32G0=EPQ1UzHkx{NU#$kAcXhpCrg?Qzkp?Cwl z;($9qvO?Z)33SSjCS!_TbFqO3NniS$ivS0O z)*zO3m_!#}cF$ROy-;aMD1D;zz0z8+>t_W{1dP%l{}uP1xde+j%^Wlc&2$oTb_Ln4 z?YZ~jL^Dn0{4+OsM`2N$_smUukV=D8`ABuvrc-Xu-EgrmdX`C~1r>1^i}7#v*I}R! zzp~H@po25nunK75WV5vuFsFKmrGE@&SWhbL> z-7PBnnL@H%6g!IzJwp1#@07&+j>D*IgA4^GQs9dCoE`h-_st_DF(KbN z^UdXRqY%~E+UjLxM@gFhW6l-klGPk+lj}!uA`N2x$8bK)XFZOQNnzuiyXUHGs}(_+ zS~=5e?9F2&Bj}1lX4>7bXnUW42w zIT`1Z*%%}Mx&1;ViR*UH38|)Pnfanrg3OK1@1%u_^U{sJc-L>8dr?}b<2;E~RRSa0 z%jzmId~dSg<0NKy6DU};VIJqVrDrXhz_BCA9csXXRH$sv14rQe7J$)X)z_aME571H>VqP)&;J=c~NUNw46M=NJf$r#vpwID6#Yt#840j6)|~zzN$DS z&a?JC%;o-s0wL3&FFLeRkvIr6JLdstr;oC4;hEl4U}#Z_7Cwr-a{`8h^QBDlEub2h zb3_`vYS^EH*+pnV3-8Q+KLL_h$s#@jW9xJF?q_6X;BT%p?3a8rzJ>*#gvNoLEjvku zcMxOR-WDI1fn7dHxcB#WB#&PpU+9D|13wQ zMUPm@_J2+c)aGPAe@M2qha9kQ@ z>5fJ`?qml(C!JZB(?pXp45(68VGg{OnJ|u4EU!Fhk3-sP_j{p*9|u;}!rg9P1O3^U z(2D?UwP#*_+&dE<#*);WOE_y4DTIbsd22C3S@pNDs~q9YykEzm9aXI)uyTKL;J|6`hvtnPj&e1 zz~0AIt&5gZliF5BE`Ww=;VKsXB}pDJP+N?jKvqf+DSmYMK`B9HKk!l-@brN4Gg8rv79jxp5}^4LcIrzR7}tME#?ucW z9r=oE!BAiLio|zrUm}4vO4VB{y6Af*p3-Bjd7Uie49V`0CJ8Y0DDdNb5Tv&7Kb@@b z4A}*Yot(v{TEGlv$&r-1;8V0f1h1Nk;sOAUFQevB4g3Xsc3Sb}IOQEqp=c z)o-y_!Y6xXVF&EO%v{H@0;?-NrZV_@vV?@Rcdl*yZ~uYpOsD|&th&O4@jigA`FLk` z{zt1$hGlkcYh{yvBwgsH0hKTQNVXHSCE{n&KQz@9I6_Ei&PneR2@H0$#V89AZ7H9kmZ=YCN8U3vtv%Mv>$@CW3B zU3PAQW5kk^8rxPP?xnSMLOO+C{vBI$IYu;`{zdGmCY8b(9Zj^bH9)gWB`k= z25NYQV z1DihK=Oa;xE04tU!*1WV`E6y*@_Z`~yqyTqmWjyM(^04l5wEd>}F%b?T3V?g&4EF9Lnq5WFvBf0VVt8ErW! zbvLa51>;L6IdNa+j#8jm-DNb(m(C8>=U-%gYBFwUfGg`7jeYRUD6@LweF)5cla8Oz zv>YEOxQ!T8PjyuwW}rZxfpBL3ix?7|Zfb#L-QlbC=Z3}A^wr~A+4 zU?E+?F5~uaQAmqhy;V%_GiMpTCT)fVe3Vv1slV~RFPM+2eaDDFAYEkA5J zw(77-I4(+A5B+&<`LbI<3Ih}Y)n-sRlK&3zoERt2)K{ed`Ar}h;(dt}xI^H3B85_g zh!!)wxuFKGfV zsBCA5V9{%VNG7sFH^^|E3MA*I67fNcBgNxonmY0=5aVC!Alu)}>gq^Ac!`%<1pa>< zcG-f4X@QgT62kv_{l z_N!5B4z~4Eq?vWbNZe}53hPP7;67-V$~K*dmYrbB>Pbfb1Fa-QTcg;NZT`>}LVU@; zZ4I^1l;9fm!S-0iW>Jg;DI0vDBJ*qPPCa~bJlQ%1)LB7U3omSarEFNa#-^i@@OS)5 znZZ14-zex&Mp}op{x03nivCFR;$pQ3$cWmOQ6T6*p!aANEA%V#kdY=HDQP} zs4 zR&K-`JZs8_w>84*5pOEnJg}Z3t+zd_!)=n-Lm*x%x!Ozc>UO)vWY)?R{|1*G!KlJF z9c$Q(+n_(H*!tUGGwt)J8*rtk$jyO?L^rD0Kv)b(FL~lNsQ5{up!6))rVIeAqzVB~#h( zMlxv0L+&vc?T+YKjyq^;$8udliU}ACVzmh&i0y~i5VSuFv59hQ2gD{LwnOMt84yf*ATq;f5wGoPImBXoDDyfr#&b z@`oW~FXtapU!C8MfQ46k2G@*S7*$3y#6r_M{Qw=`!fg2|6ie5zpRC|i1+v>#5+Chy z_B#V;vVnA3^t$(MwV$K{c(KHvyr`Yv4h3lCsEAQOxBGyIBq}P zbB@Xuk6ba(n$#s|(Vi|2ul*}MqnE<(z zSRdHO_n_4BB8$0CUKrm`C~YPLAx)+fRIW$OqV35KYUur-2E&6Ix<05O@<9!q|Eq=| zR(~Jpq>B03$;^?zdfUsj!;CglZn>R*1HEuDCU*WQ;zY~s{G?a3TV)#sbn%cJt3m9? zkjDGkZs+f_N;^qPdc&)2o1k5BcD~x{o1QZcq5P>d?pk)eG~T(^dJpia#YsDP+T0izK2MKw*m3_%cPuz!Q#P>7!K9zA! zmbG(-B&-0GB$53ve9CcP*+#LM4)}4{%zko^-Qjs2UDeEmG(9$NSFE;Ng$@p4%bWlg zN$jALB!$L$fQ0IT%BH7!@hzCuImy+Colr+NnXV>B*8~f8rJQX8`yISKD3d!}Bt!S3 z_YrYa2;v=UHu^R8kel=#Hs-Tkc}w#ktOc$-${joE7N~zaf6Toc7^Iy)ip$1?tkuqk zxx4BWE)~Sgc0R-%J|Z!Jx?rOMYZ*IMb%mRRFG<2J9+ztTEmbyssOE}dQzDc^(##{w zovZ<{)Av=~h;#jY{0?Qd`H8Tvemtn(M%8WcrdCXF%JUw)3x? zV%LZj^|e!jm8Y@|!8$vRSS>DBvGWs7aUA(p-$6N6tjWW0;4@Dv*5xSc^gyu^?T|s^ zN+Wp5D=8dpJ}X(4o|UYJsr9JLa}gu@y0Z;_bV(5F^Hrx{YigR_!Oyi6Ypt2byR!2vs2cS6&uZEw6z?s^)3@f{y%K;j z6PQa)C;6Xn!juDv&#`G5x{-WQY12?6SrX{bBl08Y-)Lp^v1Wd_N@%+XPeMK7n)zYXQrB;!jOen9k|#=gS3mByPhx|QP{ldZdR|l z?g?OaixQFhDtLOC2u&{7E4{R_@XKa#XL)OercLSN9m&HSF!&RqUSTj3HK zEJ$=!aWD!qL3opdusaJ3ph+30K?n;$9UDr_`$mCUSUM z&WZzQ4B5t31<-Wz1FH&vuwWzmBY-jx!=-_AIPot7-l~(2Up-xg&#;*k?v8v^rZQSN&19j9ip&De?qw3KQn)R)?H>j;qU*cPPqdt?#G2x=u25s2Hwo)n}`%N+v z>s`rIsE{uX7R^+gs%Bs4u=sbdIvsrtN7URf`eEeHP!kv}-I|+fw(-4a%wXWBHXg%L zI?!(ZpSp#{5eAb@=|E%r%VfTXjc;d5I?!q0a9!;{S@Z}P`V5vi1U5bl&yUKKrHv0^ z>%(c>coU*>+dlV%Ryv%z?(_1I9>Lx9QJOa1MNT6qO&b*X+S6R}#LH=X@j?Gpj)r-| zX{62xS#YkxM~&JbDyr<>k>-=s$DP^W7Ca=6?`Wqw77k*%=`5Ol59OK60}CkX7zSm+ zJLqVC`RyV0ZUoKrk9MAvR9I-guxk;tPol?hI1U|?7Xo(#pYW~10}fhlkZ3T4+DH%* z|LtG{I??W?-yBi>s_WYf#aBc?a@&N>(um*h_z53hK}Cv|Gd%z>FuV;8_If9p2%%MF zC)$U+#p*lJZAmsq6xuCJYi0mEB_Z7tjxM0|M9g1Ov}JRJFLpv@c_jUVl6rWZqQ>xh z034qJK-#!g+Esz)u~95OkH)jhooPtO1=;M~#(%GZd%V4@r8CWi6Ti$DIt&b!B{6gc zcHgxa`Yb^As90JI45KQR&V(XfTpY!{NkYQ;bR0Fqc&Z|f4j&o~8p_H)Yt_eDc?|eJ zLC^uU@=kcVrLgkj2%{8dr2C@@?zU0cjw)LDT{qaAC04G2#L*w2f(`0|3jW33?LuQR zo@!O}fI6kg$|pgsGAjFw)N!#D@)K1{*K8}F0Fm>>IjVjp)Vbe7`kS!Atsr0ScA*h{ zc6btdbGTZ4UwUTn`_glRVQ`2na3|9;7~wjEc?i3ssC9JEHx~h>gP6CWKQF z{*7=n!kY-6M_7w+VVAaSSLAG?ajlWXt1mKD%qTKcSh<$j;%V|s16EJme<)UsHwQNe z`Qd_`Qs_^r1kN)66fEQ>sP8yL+E%_Ey3Hy;9a?VXRi0s%CU~N@a_Z?DPobV_<%f_8 z-sM`8pVQcvm&}|Y;Ea`j&6enCT*_Mb6c@ZbE5GQT^9;6n`kYxx6!e-0S76z`RhaU8 z@)g?8%6GHx^mGuJz|;n67`_t%W^|KangN2wp?jO<7%1CYhahG!V%Etqy%5t6FkOKx`2K>r=~v0ERPig*QJp@=`qrYF!j+0VQC#64Ri__$U+!d+CQwz2n_SsdAHbdMYs2~#*{j9C?`^f!YcqxoyMrkbr3O?UG13S^)AzFP zyVB(mbDhOF6yfp8TZ~(r^|;!}%EwpE=msnez+ruNYKVC3)12ndN`+~8u=zAF+fGQ5 z&A#eRdyu}Yp*u~AkAxuM^RaL%R}oht6b*%L+oXc1;jf-F6_SuXc zmgr$>fd#H*2dIE7!$4R9gj-A4xn$Zud>oY8S1b&+{PST1i|d7wGvVolM$&7LA@l;| zJHuA=LiI1R@?JExU!ps|!hc(4g?7JUqtBu<+}hn8f>Qj;(@^+nS2n(<{*UjUyO=J8 zronma&=k5mBc`>eA^_NW2jJv)dB;{$1<`|qSSEX^F1TO66*?qPyv@54UMASr>T0tEIU zzlr#bz%L)aNAVkm-yF8yL>tH*wkVZW_*qYgUKFv^G-~v}hjUh|xC)FoaPEbL7o_7v3mUHWS`65e`O}fp8qc zRGbHYmfYnj2yc`KeD*GUvJOk9rO+m+N(c2|V3!b#55wLpt_~>6!~*CeZH8W0K-nd~ zpbJ6*Jb;8-=e5Oc_Y1wCwq=tLh^czvxDL0@YWpJYGZtwHzNE=tCa{rxX(SoJp6p8v z1p_6>5zE7^|B?2*n2|T7V$YHh6)LE8Yca%UoT{=U^LtC~@JpZujSoddn!K^e4v+#}FR2mlT#bW1TTc+)9VwxROdLzQo2 z&_FWuxI?6AkFCI)NRuU}+2{Bj>g7+@>#T)}uVJ@j^ zxrnhf0k7fJs+Jpg?ulm@OxQyU@A9sdG5xXmLp}uQs7314kUx7f*+T;$9!X*|2GF&J zc!!wh<4`QgMEDW(Xd6=j3DeIaBTSu zW`mI`!_T{*@ryHQe2)mw9e4TD(sOe|;IMxVXb+sX&zhQr6(r5~MHD@M$zDpCoCyC9zX*Ne;q`5W@)ix>_2&s3R_tSq&kBK=YgUH4i&5gg#C$ zdYCGk4qo!6CkoCBp1~Ny9@REgD+onl^z@EA#>?fem4$p7m zIY6*ZjMkc(_~R@xk7fiLaS@j;yNP#$%a-TZq&zy*Fb}BwFuz^P1WGA16Gv#8_(5ng zK*<&ms|iNkC-Z1b@HQkH1BE6LwXw1;kNOc3T6t#}JwYPA0NiNemjO2-sxL@KbHv+N zc5*lno&D_ga5}u(%kZ;s`2`W*5ot3K2Ef4Kd>art4C>-6COQhg6!jRG~|KslHbboYMcy*DUywwEDv*JhSQ23-d_y`?BRRdYmBQ#rJj;4{o9Dl9c zF_K;)nytVYZcJt`j-nsIlrU*DmS}9{l+ko9B_{U6V}QkLSdX!^KTyr-W9e+DW_~l4 zPN1z$rXNRNgm&bPahUzV?3;14Pvm=8JFz4XwAr|XAEcGLevnFb-GQI1;PE(Eudqeq zk@QWrcRVWDSNZ#RnnMDiejwAmci{iUI03xO-E7PR@Q*gI(g}29_}dOaja#vbakS#b zMTM@6MNgy|vdMS9a69*Tmr zCwolj%g#gI%2r+B<|9r_c;lqd1JFPN9i0=e(-kLAZ8AWh)|H{z>aHD7`?nqP$V4 zJ0K}J#x6{u1?XM;RJwW267RHODVJ6I$HH?1+5VW6UP2qb(mn(tC)M1@M|y8n9W4TJ z=bsPo*$8(xTdVX4KWm*|Oa{)MF{|RDq|yV}4Ez>hBR6@o0q`67fmW5JU(ppvY<~eE zG#ciJjeJ~X{4^RtaeQP<2hA~oO`DFxWLV|0>2wc?8}8XGpCbWKb{D>WM&bT)74TPr zoI_d83_5{CvTZYHM#vLxgcIOGu8~!Y3CT7;kN@vn{;~$lL zzHe}Q17>aO2R`>AVr)C)Hv+Lpokhdx5Enb$nRaG{vuIFaIAGR*>_#4e*;XOFJP$~# z_T)52&8(ZKZpklf1ZT;Y$yUoc3PGuWR(hGr+T%%a`9echJ! zTRCmXF_Gr$iBTh7IUHLAx59>~ghsxUB|k}DAbFL0o}{BF@niR9)3Z4)&n9VqhfUJK zgiX@A{)4&A zX;ML>&$w8rEE{!SpVP=YK`Tb1&u`uwzCBk}O`!K_hk8a|3++nxE6Y@NeGbLAD3MBQ z0t;io{#;d!NL9tz3)L-iDDb6e-o#2(B=+6w;2soIZXI~b*q6knVu$OvuH z2B6yYbLdQ6nmZR#-A)QGaPSul85O&ZZO3_etS)=gZj=X0b zC#8_K22*S``0s`6zk$Dt)T;gJvWJ@~Y2@FtQ*!}Ds@S!;G{(3Qc~mAr(ZdeAZDxon$w!&#+15Q0(L14Ye8FxM?ipWK8k>5oTD*Yf_2G_{f%Y|qw z!{<>#rbT=UFt%H%^M6mN8@WrVTl=lW0 zztr!jZX13C`A;GogY>(9rn+uF;vM-@en1{JZ$32`--h1}J-Y8d&)+(_^(&?Sg+y}$ z|H6IP{^An#MT$=R#E#9UGeUFWQp5y>STD@48h{daE2Z%T7+4NF6$(ZC)*$M-7rRBlPexbVZBBjm^ zXx+%(d>)dl4}g}yPYv_~#oWBX?mUl!VRdE90(y>;E|qs*z$GN)SmhTl(l^y4w{q-K z%GJ=u8}SOwqJKCm*StbID5*4=?Rj^i*KqFq#v<3ympV2{Y5Ko;gZzI>3cxd@ z;~%V{10YEFYYjl-)0KW}=>la^wCf#57n6dKjfF*{oNH_kgF(^=!}E8fE{b+5C;{27 zRPKG9&eU{MgQXz0BIf?n0mrnsnbBD6r{6mKdXf0|)0fi*xL``zOk=3Giaop;9NepH zJzhIyI5colSMCM=huhb6C!^q)t!^^=97)uBwMyMVrrtucLcf&!Wk2wWQ*vbGm@O2y z<=(5DwiV|J`Mh%DHhPlKxDVN5JLm`Gxk|?lfx4YygDoijZaV`?LoYO?aPfAWyJSduft*eQ__2K0Q0Pmloi) zvdaf_I~DPtmeEH8E1+W(l%Op8n;)nQF9$0+#QLGn4`F8&u8S?Je0?A7r3^g|w`X2H z7Dq2BuZN)hyMwfUV1`=>f;}kVZ*F3NAJMyEQLSG~i64n$Ph(fSP!G-Uz(e#4dTTQK z`4HVQSlzk^w|Nnx9%t1l?6-RE_GA_VqCTOJB|v+maBAR!0C@WB!Z$E5jB;9qI#lo*%6wB<0$=-Ly;hcYi&gPj<#$yyl#rUrOP|tu0x8QEpV9sP z3-+mWi||`kx!@$0G`-=feE)Nh@8o&*%_%wx&Y2@mV>WkGjyz3Is{ALqbvW^F!rxo? zS=!%!0A3UEI)IHmODo~rDe!B$fLvh9zNX=jyKVj&XZa$Q`3(ji)|}taRUr+6`cmi& zkq_VEbsjeGTRO1!`2BDfk^->OO{x29no@VQt5WAND|J>V)YrbM(oMp53D0Xm@u{Y; z_r9fRsXL&h0U?1QyZK7)P5wSOGdugL?C(I9y%X91qwdd|e-q{`LUCPTct7DL*a_`wFR`3I@=wOkAl;tKQDir+1o50mr(2w+y z4#ymrg2+OOC}s>EOWg z&;>UnPO9T7uh<`(z0i3zx4+{$)c=#t3Vl`hx5v`=rL(rO=YInIQp2i#qJIcR?9Vbv z`_<31Tkty1-TEMq(kwx#yTj~1(@~FohxyT>b7v6-Arx*^bO=v+eEu4>NUl2;@Q7H} z*^+8d9Rvox97o%79F}tkz*EQfozzZYTYjN$QSD*Yvzqn}{>^QJt!|0-JCs??o~)+d zb(`Z(FS;O=te&`#n(BCbYrfQ1kt$*aJiKr$o@v@G{#)hP8oHl^Jp|O|`NT6QAk+M- z;uc8Z&~r38D#=qIWgrtumNR9@nJiLe_BqIyy1s~m1vGK>MVKoknCtkb@Y+u{DmEsX z=YR`J_F*YXY~OkMP{v6a0M+p|PK92Jc{CvPO6Oc_go0S+S_2jB%!peDA&JA!j-Q*w zUBJn{oejA_bExtow)_I^ijDK(1-d`%X>U*>sgBQ2vm`DoUZ}M~#pX8(w`tz6{Ce)s z-uaF8SYnsm)GJZJOodPxRD-+-`becq#BV5mPdXHeml0~=Q@6AE5_g?49n+du9S%0v z!EGn#_U)Zx3X-s%c+c%*n zjxYG|E!%OC7NnembStoi!r#Wi!7BV;83MJ8(Miw}s^hDm%OF-ps+sOn?$=r)SlA`# z63nekxdaaHqX~h!2f3D~p!`)yOW1G{+Xz@dcO}f$n9`zX8tVJC}hI*x7fNsWE!EFkXVk4oDgN zZ}6=!_Z0q@ZV0XFKfp97W!?Uu>C+$g#>%4G8@SvU4qF7MUm--oi6i~s7;&Yd9v7mK z?uxD&t5SR1MnY9JaMuP273RP#oc>&pwr)^btA%w7;#RtaV=q-rG?c~OM&8A&@(l*H%o0*`jI}Wn%~;$ zAAmx$kw(=2Vq2lT-94(>3ruvY`W^*hthN!g1y0GO6<652D>NoB%zZ&x2e4lc-Y&aB zyHRkUKEFbvk{eyk_3gd8>ADGNjITA;;mYDy4tFWi740if?pN)rheIK9mHqwyWk1d@E7RrAuQEGU&i5m$U-M&oO6u2za%%iMLWX;%WP{2E;2zU2VjuDcFeVU zX?DvqM0~lAFWuX|RI#jUG&<&hLpUGKZc)iu-AEABmf&4B4+$XDUyC4km1B#vvm<;1 zkb1B)Dz1U@`P;+3y+*qa33QiR24X2rb!5W(PCcLKP;~uIbn3MJ`J`_>ALG!%ZFmO0 zKjKK8mL|sycj$UaH7WVJjC!8KQfld>*&SgB)DdOt5Jn*kLKursi%^eHg|I6^1;Rvx zZaClRg-}9hLU>=wf>x@SgKZeBUHAzkM5x=A;rTFrqrO+dJ^h_paMgZfk=JRD@Z*wl z$4bz%3cb$*sN&RbY|M3RzIE)`>$HF7Y=`pQS5F8kd7Pxg%BgeaG>FML!XH-vkoZei4jSW6c!)`Z8sY#PBj3E-$aw_ z_-PM8DG@(6OSwUZ4qXL@gHlCO(Z1E#qi{61x-f^S=)K%cr+~`d zgiz$3gLS`2d(x{8_Sj9@cgUAmHV2ljtY0Aw)LojXOSr+mbJ*+KP5E*#L}T%rgkNvW zq&TBOFuP(XRf=rI*Og~)(%odl2ablPAwLUfm@(RXyZ8ow3EWjkQ~f%E!y3CZ6O9=y z=?8&In{k7m0eh>VCK2|ui*>hg*^n^K?NI(2@S+ZA@LE=JiyA|BNPE^Ox+mwYkm_gu zj+-8@-=d3#%!c-Ecv%9NXMHstHr?Q(phFgnJn_ETwGA_}<=XF~hWP5n;_z~zoz!bk zhwY-?Y_{Vz?bbmlw%$O6weRP?%uow%bzRs?boiToq`r;LUSwzg25Is#3u~a^ zhGbYoDiVj>fB29B0_*GiC9l$$C?iIoXzZR7e8L0)Rl{OHtY`gX=7ON9i)em_#N!CLG0Ka+9%N1+6jQ+ zy*1Z)2)lcSX2rdXe)V6g(k(~W0pVGM;?NS>u~KD06VUh6Sa(##?>xr63U2)NuIXNU zoi7IGjaY9uuJc7gFT(1=p|ud#J7pKAqTwA_{aqRt_%At8H4;r>p;nqQDAMI$29%QM zFgn-VC#A#<{x+hxj$2jf2B?Wu`)?E7KJTVG9xsS82k-OSc#{)XaG9VvUa;cu%Vx|9 zwSh8R!>-Vp&2d0?$hPZzms`SW=HV$v0dVm8!yHlNR10G%aamQZt^vV&4d_9m3EV_a|lPuB;gk5IWKQI z(M5krq=tuTPGffGNaa@%YrzcjF6lnL| zgfGj;dsqSE*vxyFk2qFykM_~2;cw-j)D!ku6a~4QOn0A}>F-W9@je~6q*02xub8WW zahV665_O5>$`LbxAz9+#;4&rZNs~5+E+i&f)?suQe(<0KZT0TZqv*iEsmecyQSS zr0)!?^qc6&cszH+vjxv%@f?EZ%Xl7xXRRbklsl-szZA|nuH#4nW2ldDy|+VI9Y7z& z*ec$t;&9T$yk#psQKR-zL-GhX;+Y+WZN&o4?>i$q# zlFXA)Lr<`0>i98lZtTOu-dnE60$hE{-{wub4!gY?JDn5pzx#Gt^pA~cp@YJ5yzrzW zQ-bTI=)yV(zTRn}Q!<5xSGz5f&@@$<*BuTutL&@CTY0@}7S_RA&g7yK71#MVgc|c# z4GQgG#FnyD4nHx2or#5Nun=Og%z;F6Y7ESC5JZS|KZ>pAkYhx%+Z@PsB@2^ihW}gc z4VJC1UFTcbC<#k<1}m4afveb05)@j@mG__>NOB6jDsi7Doal=iT59>^Q;JiKXsPa4 zEq@H(6bZ4oqM(*P3dC6lbXj~G04KgsVXZq2YVj z5*N+MXm8lf!_Zm7ue}9*@hloES|UV^wR}#irAX2IeBpH*^L7^<+QAHO$L+~|#juCn zw0l@QYVO(ES}%s>-za7zTjqv}k{`3Vf%!oU;h__v!!d66z?p%t7~;$8d=PYvNqH>~ zV|zXHB@pd~R-D&Yz{e2;uEIL`IEqt9$NbQeR1Z8;cZ)6RVh+wX;C%_K!S)n&!>zO@ za!Ga9qI>nV+~7Hys}=}twmM%^P{%_~>@V70G_h#IaAA39MX$^iI8gBu{t5f)Yxzvr zEbFUu1v(5KhZ(5C(02)_qy(2DCH!h4su>ISKl&N@RelBjNOBWQzrKcADDatJ(ky6* zIvxacq69vy!RbN4Z{sJ1PEo9@P$1<(bViuK>ad*V!$EZ&cMIYdPpbS{zS5(77}u>8 zDjyCn)SeU#Oq@0vcSlZB>q188a8IkEr}AoWelYq{?yTj9-9eA&&4!{{Xf}rz8iWzJ z32y+StD*}!qkB&~^+hWiePt~+=`#E%>3Ok;>O$b@WRfxqibz$;MMR#e~S)n{K_ZC zYU{(-tzC;&LPA!{-|z^uU)a*u^0Q*$1n2t|2xdbGhT-=r-}RCLB(=AGFj_5o@IPCR zd*?sKZD_bZPi?+lf$ChrxZk*oIY?fR9Xxt0$j(K{MUbr2)bdYUM{_AI1?*bXRG%m} zNz{jh`_ktn@>Kf@8g!(Vzv~K@3+f;j)Z{LCP!NV0Z7y^RH8#wOn^?LQHDIN$M&SX~ zzG7?nLr^nG7Wco)cM)S@%4=P$g5`xn3vpNG=eS$@l(^<>w^zaL5@ke~=xqsZ;>E=a zRRmQmV-Zw2vr~+~(o7{M#pi5vb_#y+73_7YOc+#w6`*k`jPDiI7a5<2(-V{N>BzkJ zyqQnO=hfnL990olFwh)_8T=bo<1d!f^3UCM^|LU$pRxw3j3eimzfzeIUU)+6Mp464 zSRjj0!`p0(QW^8aZgA<8Pj4Nrm5qh9awFV;B}b41w>AOwR+tovONNWAxb$9rUx9_N zqVWI34Qh{T&zFsR@1?2iXQeXD@V|9jw8w_V3b3Kg_QSfU!*!X*9~T z?hZ$Um1xw}Ld8{;P|L45RNeRc`CZr*t!SX_URyBCnObsZkE4DE2pv za#p9yo}M6!{EUJItM#1ySZ}@tl}TNOc!I$>BYic!nn9-s9u>9tq)gZN9WP4@P`(&&$m`p!iYe@q z0Hr?pS9f6r-8QBI7ePP?Rk;t6JnR1}>|CI#sMa_>d%ig!BC?NqKz!sm8X_W!0?H#F z2M|Rv@j-}0KnX}sW!;VSO& zfu8%{X9i*2b=SIQt>5{+Z@*^FoS8i{`|<5l@cLjmC0YA5pM?W`F%Ga>j0sIm%$xif zoX&dFSa@ql^QI6B$1tI{!m#d&saxz2xJSe5XUprV>Wy7|UOnnff$T}`H*d<3@fJO; zJF?fQ`P~s(sjllzHpgbvgr?Il6fv)eEL!^r2oKHoPeF++zxlu8{fj zkbxf&FM-@~lJU)u?t2CDbL3x%p=8x5y`jAV?MsaBx#(O9ZEwm&XA%BJQN6?C>6ci` zb>OL+6;aEyP+ux#!nbHOr&(Uk2E85Nyk;@e8`RzVTeK3Q5*Pp({;m31FM5F;(n2hh z$yiUd)Q^I^s@t=uHGZ_C???Ai@PO}jJvj}P#eUrhrD$6?uf6O~B@ClFOaZin{i?nk zKx5d$T2%n0donl%u~9TUjwjh@x&O0h3AN$L5hprI`36r6?h@3CHtLDDq*fb^H2Kvi zXsrzyNawuIR*M=---vk-`N%=XTwNxQv&}%YbQpucl2A~~B$u;%KO`nLij>!J=swma z1`=aF5w5Js@7yf2#3B7~b>?6i$t-H|U|e{Twren1n9o^}8p!numT5a3L?LJ!xEn;Z zEJ58ngfc?>?!CVVU9{^x6Q^BG_u6q|fmhb;(p%GRm$pz#7dX10_0~o2-15PKWDTl4 zm|QGavk#>V<~8O(voou@8F$8QA(SRZ)ob@cXeeV_wct>?EX(&WiY$!gvOm?LFv|CO z8C}<+r8Qf<97YaVYS!{bQXCd|Qg?(?y8L6CrbN)UGTy?@ji#b0wzr61Tu=P+PW0$j zVs0HMu90~e*l|YYm5AH2f%yDAGOq!RRp|XaC-alx3m6o$ zGMYjL42Mf6-PPR%=a8F|G3Kl8zH_|`&H?I)XbSDq<)+6bcv1}aD7)m0a=WKh;GVY0 z+2&Gv#n6L6O&AK>J2C1T*d`6U^0R0YW|;j(&EkeB-RauWVfbgTd~b3F zW(bH|V!OTRzihGSZAbir)+Wr)Qxj0bZB!c)aK-*b&74SS5LFW?$#*i^5+bvkFeQEn zetm|DC7R=V*f3IN(S#=FAgl*E0h^7;RG&zss6h&zc3YfdFwr&&7ia`(5}KkUpMGja zK|uB#+;g!KtX7*yS&UU^{U_scV9n~%B#Q6;%fA%<-X(?qcvayKUQ&-IQC#cn z4r)NAR?eXuQS)Wc2`_OiNoyrs=a)0+s2AH8RjXHMRgcjY+5gkqBSilJrt>{@5>J&b zU-!_q^J+mB{mw$v^lZ9@@eLDm=sVP~TK^{rvt8FBW!6pMREtSM`b6sTN{KGbuj=xL zcwIIa;l(EDlqWzAS!Ziv;TB}SKUspZa>sc*;8QXi-XyloT^YV1Hm zk{-ToxV|B{0(57rHFk8%INc6N(B+NGdb$%Ub=z*_Pcn93&nZ2=-q_)!2$9YqwNysw z8Md?+Y!qlV5;ly|<2PK=3uts_lv)~$9mq9~MDQbex=15`!FVH|@q==sb-Qx9F7JvR z8jM4}*f^wO#Etk1YKQ33D_xhi6-@Qdqu=_(Kf82M;X-Tfg8YI7xz>UO1%=kUoPv3| zb8VWOPrGH_H7zMI$!brrJ~^)-cR}HE+O7hMW247r%wIS+H#5fSj-CoV#u{b~wJyxd z8)h8|W#+75)=`l5lwsCzw;f_n(Y&9b{jzp!K7}!ML%X$re2X1xW@4FCuoVmebHO-p zWCorOA9Mqqh_=}s`b%nPZ^hs7*X)jHeWQ@>uH2;lB5~#48mwHNa&uO615j9!o50$dw0_BZ(s>tpEOH=Qr649c_>^e zf%V`MKpx$Chh@JYy|hl@E5U1^3~UD5!RKHFM3yTBgs2kaWi9}w37YN0m>8~g(s ztpeA;2~YyC;t4MYi$NpO*h{f6F!EJlC!$f-c<9qs4Z;e=P*OoU*aYT-<)9pF13NYQ zDCKAG;57Jk6F=wwN_F};Wl}U8Ik?Y>t;qJ0ILYu4=ST+ZFv$Mldi>PkvRD#Z%7p9< zS*4vGr}#4S(lC80|X(wr`wVwQLOk_z#Cfq z1Z4!1eNSq)?aBvCab1R|`H|z5hazS|6MJ^+s{WU;pBcxnAgSDtCm>sLv<8v56Uy{<&!-$4Hkh#fMm#@i6|ZYOm60MeVG#{p4&RKcDEeGz~ut%F?z zeVyB0C`m~OcoW9$)q33%d{p9hp?u!48&9KSaMl9J z|BS*D>_{TyOfJ0&IVm15Mv#*cUMD2NcdO>bO88)(HG0>RAEXTo1*1SRcnC}av(~6j zFIMs`o{Z|YE6n9`NkWRBM3VZ`Vr9N8d8(<;Dr+25ZSa4A@YFssw?Ya#%&;dw7PK** zBEkdoGqnH%RbWa&E`u!XC-e1&{l1U`WWF2nN)MUWL7E?s`6Dg4}6J%M_?!T9q_#h9}QAK0ayXxf1Pgx8`k2k4p{@vfNMb6=RhI* z@Q@6qfqVc*uKWzR228b>#|5H5Dp(BGf{#HpI1Ii6*MY}=H1dH+kPNcGGoTpk0^fsH zU_OAe1>}L(9QdjPx4`H+g+C771^dA7Aow6!*})dD4_pJ|4=MaDa241OV&Un~4k5L}C|E1=6!g$IFDPzcJvVc>}ue!*C+v`9&| F{0Bf1Fo*yE delta 53183 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 H+5Z0lN3nOC diff --git a/build/bin/ram_2.p.bin b/build/bin/ram_2.p.bin index 58b86b7e94e59ca93d434e3d7577dc5bc980b88d..0b0f2f6c25fe129bdc01a7e3565873c0adeabf61 100644 GIT binary patch delta 53536 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 F{0Bf1Fo*yE delta 53183 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 H+5Z0lN3nOC diff --git a/build/bin/ram_all.bin b/build/bin/ram_all.bin index 971374a4a8f3072e85a4028dcbcbf42c02bd4e45..f49b20ef2e5ab6d26f0a1adfa1f7766a93b6602f 100644 GIT binary patch delta 53843 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

~ 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

0a?I_9}R*kfr*x2Y)rXECY=h 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 delta 53480 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 bfqZZQv;x<19A+>dWP$S1) + /* ---------- DHCP options ---------- */ /* Define LWIP_DHCP to 1 if you want DHCP configuration of interfaces. DHCP is not implemented in lwIP 0.5.1, however, so @@ -184,6 +185,7 @@ a lot of data that needs to be copied, this should be set high. */ /* Support Multicast */ #define LWIP_IGMP 1 + extern __attribute__ ((long_call)) unsigned int Rand(void); #define LWIP_RAND() Rand() diff --git a/project/inc/mad/config.h b/project/inc/mad/config.h index e583e82..05a483d 100644 --- a/project/inc/mad/config.h +++ b/project/inc/mad/config.h @@ -8,7 +8,9 @@ /* #undef EXPERIMENTAL */ /* Define to disable debugging assertions. */ +#ifndef NDEBUG #define NDEBUG +#endif /* Define to optimize for accuracy over speed. */ /* #undef OPT_ACCURACY */ diff --git a/project/inc/mad/frame.h b/project/inc/mad/frame.h index 17b1b68..ac3a159 100644 --- a/project/inc/mad/frame.h +++ b/project/inc/mad/frame.h @@ -74,8 +74,8 @@ struct mad_frame { mad_fixed_t (*overlap)[2][32][18]; /* Layer III block overlap data */ }; -# define MAD_NCHANNELS(header) ((header)->mode ? 2 : 1) -# define MAD_NSBSAMPLES(header) \ +#define MAD_NCHANNELS(header) ((header)->mode ? 2 : 1) +#define MAD_NSBSAMPLES(header) \ ((header)->layer == MAD_LAYER_I ? 12 : \ (((header)->layer == MAD_LAYER_III && \ ((header)->flags & MAD_FLAG_LSF_EXT)) ? 18 : 36)) diff --git a/project/inc/mad/mad.h b/project/inc/mad/mad.h index ae6383b..1f01af8 100644 --- a/project/inc/mad/mad.h +++ b/project/inc/mad/mad.h @@ -718,7 +718,7 @@ struct mad_stream { enum mad_error error; /* error code (see above) */ }; -enum { +enum _MAD_OPTION{ MAD_OPTION_IGNORECRC = 0x0001, /* ignore CRC errors */ MAD_OPTION_HALFSAMPLERATE = 0x0002 /* generate PCM at 1/2 sample rate */ # if 0 /* not yet implemented */ diff --git a/project/inc/mad/stream.h b/project/inc/mad/stream.h index 67ef5ab..4cc420e 100644 --- a/project/inc/mad/stream.h +++ b/project/inc/mad/stream.h @@ -83,7 +83,7 @@ struct mad_stream { enum mad_error error; /* error code (see above) */ }; -enum { +enum e_MAD_OPTION_{ MAD_OPTION_IGNORECRC = 0x0001, /* ignore CRC errors */ MAD_OPTION_HALFSAMPLERATE = 0x0002 /* generate PCM at 1/2 sample rate */ # if 0 /* not yet implemented */ diff --git a/project/inc/platform_autoconf.h b/project/inc/platform_autoconf.h index 5802c64..3be5470 100644 --- a/project/inc/platform_autoconf.h +++ b/project/inc/platform_autoconf.h @@ -1,5 +1,5 @@ /* - * + * Automatically generated by make menuconfig: don't edit */ #define AUTOCONF_INCLUDED @@ -12,10 +12,11 @@ /* * Target Platform Selection */ -#define CONFIG_WITHOUT_MONITOR 1 #define CONFIG_USE_TCM_HEAP 1 #define configUSE_STACK_TCM_HEAP 5 // min priority use tcm ? +#define CONFIG_WITHOUT_MONITOR 1 + #undef CONFIG_RTL8195A #define CONFIG_RTL8195A 1 #undef CONFIG_FPGA @@ -134,8 +135,8 @@ #define CONFIG_CRYPTO_NORMAL 1 #undef CONFIG_CRYPTO_TEST #define CONFIG_CRYPTO_MODULE 1 -#define CONFIG_CRYPTO_STARTUP 0 -#define CONFIG_MII_EN 1 +#define CONFIG_CRYPTO_STARTUP 1 +#define CONFIG_MII_EN 0 //1 #define CONFIG_PWM_EN 1 #define CONFIG_PWM_NORMAL 1 #undef CONFIG_PWM_TEST @@ -155,7 +156,7 @@ #undef CONFIG_SPIC_TEST #define CONFIG_SPIC_MODULE 1 #define CONFIG_ADC_EN 1 -//#define CONFIG_DAC_EN 1 +#define CONFIG_DAC_EN 1 #define CONFIG_NOR_FLASH 1 #undef CONFIG_SPI_FLASH #undef CONFIG_NAND_FLASH diff --git a/project/inc/platform_opts.h b/project/inc/platform_opts.h index 7e6c7cb..39e871b 100644 --- a/project/inc/platform_opts.h +++ b/project/inc/platform_opts.h @@ -8,7 +8,7 @@ #define __PLATFORM_OPTS_H__ /*For MP mode setting*/ -#define SUPPORT_MP_MODE 1 +#define SUPPORT_MP_MODE 0 /** * For AT cmd Log service configurations @@ -39,7 +39,7 @@ * For FreeRTOS tickless configurations */ #define FREERTOS_PMU_TICKLESS_PLL_RESERVED 0 // In sleep mode, 0: close PLL clock, 1: reserve PLL clock -#define FREERTOS_PMU_TICKLESS_SUSPEND_SDRAM 1 // In sleep mode, 1: suspend SDRAM, 0: no act +#define FREERTOS_PMU_TICKLESS_SUSPEND_SDRAM 0 // In sleep mode, 1: suspend SDRAM, 0: no act /******************************************************************************/ @@ -53,6 +53,7 @@ /** * For Wlan configurations */ + #define CONFIG_WLAN 1 #if CONFIG_WLAN #define CONFIG_LWIP_LAYER 1 @@ -86,7 +87,7 @@ #endif /* For Simple Link */ -#define CONFIG_INCLUDE_SIMPLE_CONFIG 1 +#define CONFIG_INCLUDE_SIMPLE_CONFIG 0 /*For wowlan service settings*/ #define CONFIG_WOWLAN_SERVICE 0 @@ -157,4 +158,15 @@ #define USE_FLASH_EEP 1 #define CONFIG_WLAN_CONNECT_CB 1 +//#define CONFIG_FATFS_EN 1 // FatFs & SD +#ifdef CONFIG_FATFS_EN +// fatfs version +#define FATFS_R_10C +// fatfs disk interface +#define FATFS_DISK_USB 0 +#define FATFS_DISK_SD 1 +#undef CONFIG_SDIO_HOST_EN +#define CONFIG_SDIO_HOST_EN 1 #endif + +#endif //__PLATFORM_OPTS_H__ diff --git a/project/inc/rtl8195a/esp_comp.h b/project/inc/rtl8195a/esp_comp.h deleted file mode 100644 index 41446c4..0000000 --- a/project/inc/rtl8195a/esp_comp.h +++ /dev/null @@ -1,114 +0,0 @@ -/* -* -* -*/ -#ifndef _INCLUDE_ESP_COMP_H_ -#define _INCLUDE_ESP_COMP_H_ - -#include "platform_autoconf.h" - -#define ICACHE_FLASH_ATTR -#define ICACHE_RODATA_ATTR -#define DATA_IRAM_ATTR - -#define os_printf(...) rtl_printf(__VA_ARGS__) -#define os_printf_plus(...) rtl_printf(__VA_ARGS__) -#define os_sprintf_fd(...) rtl_sprintf(__VA_ARGS__) -#define ets_sprintf(...) rtl_sprintf(__VA_ARGS__) -/* -#define os_malloc pvPortMalloc -#define os_zalloc pvPortZalloc -#define os_calloc pvPortCalloc -#define os_realloc pvPortRealloc -*/ -#undef os_free -#define os_free vPortFree -#define system_get_free_heap_size xPortGetFreeHeapSize -#undef os_realloc -#define os_realloc pvPortReAlloc - - -#define os_bzero rtl_bzero -#define os_delay_us wait_us // HalDelayUs -//#define os_install_putc1 rtl_install_putc1 -//#define os_install_putc2 rtl_install_putc2 -//#define os_intr_lock rtl_intr_lock -//#define os_intr_unlock rtl_intr_unlock -//#define os_isr_attach rtl_isr_attach -//#define os_isr_mask rtl_isr_mask -//#define os_isr_unmask rtl_isr_unmask -#define os_memcmp rtl_memcmp -#define os_memcpy rtl_memcpy -#define ets_memcpy rtl_memcpy -#define os_memmove rtl_memmove -#define os_memset rtl_memset -#define os_putc rtl_putc -//#define os_str2macaddr rtl_str2macaddr -//#define os_strcat strcat -#define os_strchr rtl_strchr -#define os_strrchr rtl_strrchr -#define os_strcmp rtl_strcmp -#define os_strcpy rtl_strcpy -#define os_strlen rtl_strlen -#define os_strncmp rtl_strncmp -#define os_strncpy rtl_strncpy -#define os_strstr rtl_strstr -#define os_random Rand -//extern uint32 phy_get_rand(void); -#define system_get_os_print() 1 - -#ifdef USE_US_TIMER -#define os_timer_arm_us(a, b, c) rtl_timer_arm_new(a, b, c) -#endif - - -//#define os_timer_arm(a, b, c) rtl_timer_arm_new(a, b, c) -//#define os_timer_disarm rtl_timer_disarm -//#define os_timer_init rtl_timer_init -//#define os_timer_setfn rtl_timer_setfn - -//#define os_timer_done rtl_timer_done -//#define os_timer_handler_isr rtl_timer_handler_isr - -//#define os_update_cpu_frequency rtl_update_cpu_frequency - -//#define os_sprintf ets_sprintf - -#define spi_flash_real_size() (1<<(flashobj.SpicInitPara.id[2]-1)) - - - -#define ip4_addr1(ipaddr) (((u8_t*)(ipaddr))[0]) -#define ip4_addr2(ipaddr) (((u8_t*)(ipaddr))[1]) -#define ip4_addr3(ipaddr) (((u8_t*)(ipaddr))[2]) -#define ip4_addr4(ipaddr) (((u8_t*)(ipaddr))[3]) -/* These are cast to u16_t, with the intent that they are often arguments - * to printf using the U16_F format from cc.h. */ -#define ip4_addr1_16(ipaddr) ((u16_t)ip4_addr1(ipaddr)) -#define ip4_addr2_16(ipaddr) ((u16_t)ip4_addr2(ipaddr)) -#define ip4_addr3_16(ipaddr) ((u16_t)ip4_addr3(ipaddr)) -#define ip4_addr4_16(ipaddr) ((u16_t)ip4_addr4(ipaddr)) - -#define IP2STR(ipaddr) ip4_addr1_16(ipaddr), \ - ip4_addr2_16(ipaddr), \ - ip4_addr3_16(ipaddr), \ - ip4_addr4_16(ipaddr) - -#define IPSTR "%d.%d.%d.%d" - -/* CONFIG_DEBUG_LOG: -=0 Off all diag/debug msg, -=1 Only errors, -=2 errors + warning, (default) -=3 errors + warning + info, -=4 errors + warning + info + debug, -=5 full */ -#if CONFIG_DEBUG_LOG > 3 -#define DEBUGSOO (CONFIG_DEBUG_LOG - 1) -#elif CONFIG_DEBUG_LOG > 1 -#define DEBUGSOO 2 -#else -#define DEBUGSOO CONFIG_DEBUG_LOG -#endif - -#endif // _INCLUDE_ESP_COMP_H_ diff --git a/project/inc/rtl8195a/rtl_libc.h b/project/inc/rtl8195a/rtl_libc.h index 15733fc..40a9699 100644 --- a/project/inc/rtl8195a/rtl_libc.h +++ b/project/inc/rtl8195a/rtl_libc.h @@ -5,9 +5,9 @@ #ifndef _INC_RTL_LIBC_ #define _INC_RTL_LIBC_ -//#undef malloc +#undef malloc #define malloc(size) pvPortMalloc(size) -//#undef free +#undef free #define free(pbuf) vPortFree(pbuf) #define atoi(str) prvAtoi(str) diff --git a/project/inc/wifi_user_set.h b/project/inc/wifi_user_set.h index 3b1b854..ca7c2e4 100644 --- a/project/inc/wifi_user_set.h +++ b/project/inc/wifi_user_set.h @@ -15,7 +15,7 @@ #define DEF_WIFI_COUNTRY RTW_COUNTRY_RU // Регион использования WiFi... #define DEF_WIFI_TX_PWR RTW_TX_PWR_PERCENTAGE_25 // RTW_TX_PWR_PERCENTAGE_75 // RTW_TX_PWR_PERCENTAGE_100 #define DEF_WIFI_BGN RTW_NETWORK_BGN // rtw_network_mode_t -#define DEF_WIFI_ADAPTIVITY RTW_ADAPTIVITY_NORMAL // RTW_ADAPTIVITY_DISABLE/RTW_ADAPTIVITY_NORMAL/RTW_ADAPTIVITY_CARRIER_SENSE +#define DEF_WIFI_ADAPTIVITY RTW_ADAPTIVITY_DISABLE // RTW_ADAPTIVITY_NORMAL // RTW_ADAPTIVITY_DISABLE/RTW_ADAPTIVITY_NORMAL/RTW_ADAPTIVITY_CARRIER_SENSE /* Опции загрузки конфигов по старту */ //#define DEF_LOAD_CFG 0 // старт в назначенном режиме по умолчанию @@ -33,7 +33,7 @@ RTW_SECURITY_WPA_TKIP_PSK - WPA Security RTW_SECURITY_WPA2_AES_PSK - WPA2 Security using AES cipher RTW_SECURITY_WPA2_MIXED_PSK - WPA2 Security using AES and/or TKIP ciphers */ -#define DEF_AP_SECURITY RTW_SECURITY_WPA2_AES_PSK // WEP security is NOT IMPLEMENTED. It is NOT SECURE! +#define DEF_AP_SECURITY RTW_ENCRYPTION_WPA2_MIXED // WEP security is NOT IMPLEMENTED. It is NOT SECURE! #define DEF_AP_BEACON 100 // 100...6000 ms #define DEF_AP_CHANNEL 1 // 1..14 #define DEF_AP_CHANNEL 1 // 1..14 @@ -47,7 +47,7 @@ //==== Interface 1 - wlan1 = STA ========== #define DEF_ST_SSID "HOMEAP" // Имя SSID AP (роутера) для присоединения по умолчанию (первый старт) #define DEF_ST_PASSWORD "0123456789" // Пароль AP (роутера) для присоединения по умолчанию (первый старт) -#define DEF_ST_SECURITY RTW_SECURITY_WPA_WPA2_MIXED // Тип Security +#define DEF_ST_SECURITY RTW_ENCRYPTION_WPA2_MIXED // Тип Security #define DEF_ST_BSSID { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } // If bssid set is not ff.ff.ff.ff.ff.ff, #define DEF_ST_USE_BSSID 0 // station will connect to the router with both ssid[] and bssid[] matched. #define DEF_ST_CHANNEL 1 // 1..14 diff --git a/project/src/driver/i2s_freertos.c b/project/src/driver/i2s_freertos.c index 1c7cf68..9cf6107 100644 --- a/project/src/driver/i2s_freertos.c +++ b/project/src/driver/i2s_freertos.c @@ -32,6 +32,8 @@ speed. #include "osdep_api.h" #include "i2s_api.h" #include "driver/i2s_freertos.h" +#include "rtl_lib.h" +#include "rtl8195a/rtl_libc.h" #define USE_RTL_I2S_API 0 // speed @@ -103,7 +105,7 @@ int i2sInit(int mask, int bufsize, int word_len) { // word_len = WL_16b or WL_24 DBG_8195A("I2S%d: Not heap buffer %d bytes!\n", i, sizeof(i2s_t) + page_size * I2S_DMA_PAGE_NUM); return 0; } - rtl_memset(pi2s_new, 0, sizeof(i2s_t)); + memset(pi2s_new, 0, sizeof(i2s_t)); u8 * i2s_tx_buf = (u8 *) pvPortMalloc(page_size * I2S_DMA_PAGE_NUM); if (i2s_tx_buf == NULL) { vPortFree(pi2s_new); @@ -135,12 +137,13 @@ int i2sInit(int mask, int bufsize, int word_len) { // word_len = WL_16b or WL_24 else i2s_init(pi2s_obj, I2S1_SCLK_PIN, I2S1_WS_PIN, I2S1_SD_PIN); i2s_set_param(pi2s_obj, pi2s_obj->channel_num, pi2s_obj->sampling_rate, pi2s_obj->word_length); i2s_set_dma_buffer(pi2s_obj, i2s_tx_buf, NULL, I2S_DMA_PAGE_NUM, page_size); - i2s_tx_irq_handler(pi2s_obj, i2s_test_tx_complete, (uint32_t)pi2s_obj); + i2s_tx_irq_handler(pi2s_obj, (i2s_irq_handler)i2s_test_tx_complete, (uint32_t)pi2s_obj); // i2s_rx_irq_handler(pi2s_obj, (i == 0)? (i2s_irq_handler)i2s1_test_rx_complete : (i2s_irq_handler)i2s2_test_rx_complete, i); // TX only! i2s_enable(pi2s_obj); DBG_8195A("I2S%d: Alloc DMA buf %d bytes (%d x %d samples %d bits)\n", i, page_size * I2S_DMA_PAGE_NUM, I2S_DMA_PAGE_NUM, bufsize, (word_len == WL_16b)? 32 : 96); } } + return 1; } //Set the I2S sample rate, in HZ @@ -265,6 +268,7 @@ u32 i2sPushPWMSamples(u32 sample) { } } portEXIT_CRITICAL(); + return sample; } #endif diff --git a/project/src/mad/synth.c b/project/src/mad/synth.c index 0a6b294..5450f9a 100644 --- a/project/src/mad/synth.c +++ b/project/src/mad/synth.c @@ -19,16 +19,16 @@ * $Id: synth.c,v 1.25 2004/01/23 09:41:33 rob Exp $ */ -# ifdef HAVE_CONFIG_H -# include "config.h" -# endif +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif -# include "global.h" +#include "global.h" -# include "fixed.h" -# include "frame.h" -# include "synth.h" -# include "string.h" +#include "fixed.h" +#include "frame.h" +#include "synth.h" +#include "string.h" // #define SAVED_SAMPLE_BUFF_LEN 240000 // unsigned int saved_idx = 0; @@ -582,6 +582,7 @@ void synth_full(struct mad_synth *, struct mad_frame const *, * NAME: synth->full() * DESCRIPTION: perform full frequency PCM synthesis */ +extern void render_sample_block(short int *short_sample_buff, int no_samples); static void synth_full(struct mad_synth *synth, struct mad_frame const *frame, unsigned int nch, unsigned int ns) @@ -608,7 +609,7 @@ void synth_full(struct mad_synth *synth, struct mad_frame const *frame, for (ch = 0; ch < nch; ++ch) { - sbsample = &frame->sbsample[ch]; + sbsample = (void *)&frame->sbsample[ch]; filter = &synth->filter[ch]; pcm1 = short_sample_buff[ch]; @@ -732,7 +733,7 @@ void synth_full(struct mad_synth *synth, struct mad_frame const *frame, /* Render di un blocco */ if(nch < 2) memcpy(short_sample_buff[1], short_sample_buff[0], sizeof(short_sample_buff[0])); - render_sample_block(short_sample_buff, sizeof(short_sample_buff[0])/sizeof(short int)); + render_sample_block((short int *) short_sample_buff, sizeof(short_sample_buff[0])/sizeof(short int)); phase = (phase + 1) % 16; @@ -745,11 +746,12 @@ void synth_full(struct mad_synth *synth, struct mad_frame const *frame, * DESCRIPTION: perform half frequency PCM synthesis */ static -void synth_half(struct mad_synth *synth, struct mad_frame const *frame, +void synth_half(struct mad_synth *synth, struct mad_frame *frame, unsigned int nch, unsigned int ns) { unsigned int phase, ch, s, sb, pe, po; - short int *pcm1, *pcm1v, *pcm2v; +// short int *pcm1; + short int *pcm1v, *pcm2v; mad_fixed_t (*filter)[2][2][16][8]; mad_fixed_t (*sbsample)[36][32]; register mad_fixed_t (*fe)[8], (*fx)[8], (*fo)[8]; @@ -772,7 +774,8 @@ void synth_half(struct mad_synth *synth, struct mad_frame const *frame, { sbsample = &frame->sbsample[ch]; filter = &synth->filter[ch]; - pcm1 = pcm1v = short_sample_buff; +// pcm1 = + pcm1v = (short int *)short_sample_buff; dct32((*sbsample)[s], phase >> 1, (*filter)[0][phase & 1], (*filter)[1][phase & 1]); @@ -894,14 +897,15 @@ void synth_half(struct mad_synth *synth, struct mad_frame const *frame, /* Render di un blocco */ if(nch < 2) memcpy(short_sample_buff[1], short_sample_buff[0], sizeof(short_sample_buff[0])); - render_sample_block(short_sample_buff, sizeof(short_sample_buff[0])/sizeof(short int)); + render_sample_block((short int *)short_sample_buff, sizeof(short_sample_buff[0])/sizeof(short int)); - pcm1 = pcm1v + 8; +// pcm1 = pcm1v + 8; phase = (phase + 1) % 16; } /* for di blocco */ } +extern void set_dac_sample_rate(int rate, int chls); /* * NAME: synth->frame() * DESCRIPTION: perform PCM synthesis of frame subband samples @@ -925,7 +929,7 @@ void mad_synth_frame(struct mad_synth *synth, struct mad_frame const *frame) if (frame->options & MAD_OPTION_HALFSAMPLERATE) { synth->pcm.samplerate /= 2; synth->pcm.length /= 2; - synth_frame = synth_half; + synth_frame = (void *)synth_half; } set_dac_sample_rate(synth->pcm.samplerate, nch); diff --git a/project/src/user/atcmd_user.c b/project/src/user/atcmd_user.c index 36ec730..4947368 100644 --- a/project/src/user/atcmd_user.c +++ b/project/src/user/atcmd_user.c @@ -41,7 +41,7 @@ LOCAL void fATST(int argc, char *argv[]) { #if 0 //CONFIG_DEBUG_LOG > 1 dump_mem_block_list(); tcm_heap_dump(); -#endif; +#endif printf("\n"); #if (configGENERATE_RUN_TIME_STATS == 1) char *cBuffer = pvPortMalloc(512); @@ -132,7 +132,7 @@ void dump_bytes(uint32 addr, int size) while (size) { if (symbs_line > size) symbs_line = size; printf("%08X ", addr); - copy_align4_to_align1(buf, addr, symbs_line); + copy_align4_to_align1(buf, (void *)addr, symbs_line); print_hex_dump(buf, symbs_line, ' '); int i; for(i = 0 ; i < symbs_line ; i++) { @@ -151,6 +151,7 @@ void dump_bytes(uint32 addr, int size) //------------------------------------------------------------------------------ // Dump byte register //------------------------------------------------------------------------------ +extern _LONG_CALL_ u32 Strtoul(IN const u8 *nptr, IN u8 **endptr, IN u32 base); LOCAL void fATSB(int argc, char *argv[]) { int size = 16; diff --git a/project/src/user/main.c b/project/src/user/main.c index 8bb4740..a82f503 100644 --- a/project/src/user/main.c +++ b/project/src/user/main.c @@ -3,13 +3,16 @@ * FileName: user_main.c * *******************************************************************************/ + +#include "platform_autoconf.h" +#include "autoconf.h" #include "rtl8195a/rtl_common.h" #include "rtl8195a.h" #include "hal_log_uart.h" #include "FreeRTOS.h" #include "task.h" -//#include "diag.h" +#include "diag.h" #include "osdep_service.h" #include "device_lock.h" #include "semphr.h" @@ -33,6 +36,7 @@ #include "user/playerconfig.h" #include "user/atcmd_user.h" #include "main.h" +#include "flash_eep.h" #include "wifi_api.h" #include "rtl8195a/rtl_libc.h" @@ -88,7 +92,7 @@ LOCAL int mp3_cfg_read(void) // Called by the NXP modifications of libmad. It passes us (for the mono synth) // 32 16-bit samples. -void render_sample_block(short *short_sample_buff, int no_samples) { +void render_sample_block(short int *short_sample_buff, int no_samples) { int i; for (i = 0; i < no_samples; i++) { int x = oversampling; @@ -122,6 +126,8 @@ void set_dac_sample_rate(int rate, int chls) { oversampling = i2sSetRate(-1, rate); } +extern int RamFifoLen(void); + static enum mad_flow input(struct mad_stream *stream) { int n, i; int rem; //, fifoLen; @@ -203,9 +209,9 @@ LOCAL void tskmad(void *pvParameters) { sizeof(struct mad_stream) + sizeof(struct mad_frame) + sizeof(struct mad_synth) + READBUFSZ, mad_bufs); #endif - struct mad_stream *stream = mad_bufs; - struct mad_frame *frame = &mad_bufs[sizeof(struct mad_stream)]; - struct mad_synth *synth = &mad_bufs[sizeof(struct mad_stream) + struct mad_stream *stream = (struct mad_stream *)mad_bufs; + struct mad_frame *frame = (struct mad_frame *) &mad_bufs[sizeof(struct mad_stream)]; + struct mad_synth *synth = (struct mad_synth *) &mad_bufs[sizeof(struct mad_stream) + sizeof(struct mad_frame)]; readBuf = &mad_bufs[sizeof(struct mad_stream) + sizeof(struct mad_frame) + sizeof(struct mad_synth)]; @@ -374,6 +380,8 @@ LOCAL int http_head_read(unsigned char *buf, int len, int ff) { return ret; } +extern void RamFifoClose(void); + //Reader task. This will try to read data from a TCP socket into the SPI fifo buffer. LOCAL void tskreader(void *pvParameters) { char wbuf[SOCK_READ_BUF]; @@ -503,6 +511,8 @@ void connect_start(void) { #endif } +extern int tcm_heap_freeSpace(void); +extern void console_init(void); /* RAM/TCM/Heaps info */ void ShowMemInfo(void) { @@ -525,13 +535,15 @@ LOCAL void user_init_thrd(void) { vTaskDelete(NULL); } +extern void WDGStart(void); +extern int rtl_cryptoEngine_init(void); /** * @brief Main program. * @param None * @retval None */ -void main(void) +int main(void) { #if DEBUG_MAIN_LEVEL > 3 ConfigDebugErr = -1; @@ -560,7 +572,7 @@ void main(void) #endif /* wlan & user_start intialization */ - xTaskCreate(user_init_thrd, "user_init", 1024, NULL, tskIDLE_PRIORITY + 0 + PRIORITIE_OFFSET, NULL); + xTaskCreate((TaskFunction_t) user_init_thrd, "user_init", 1024, NULL, tskIDLE_PRIORITY + 0 + PRIORITIE_OFFSET, NULL); /*Enable Schedule, Start Kernel*/ #if defined(CONFIG_KERNEL) && !TASK_SCHEDULER_DISABLED @@ -600,7 +612,7 @@ LOCAL void fATWS(int argc, char *argv[]){ } else if(argv[1][0] == 'S') { // strcmp(argv[1], "save") == 0 printf("%s: %s,%d\n", argv[0], mp3_serv.url, mp3_serv.port); - if(flash_write_cfg(&mp3_serv, ID_FEEP_MP3, strlen(mp3_serv.port) + strlen(mp3_serv.url))) + if(flash_write_cfg(&mp3_serv, ID_FEEP_MP3, sizeof(mp3_serv.port) + strlen((const char *)mp3_serv.url))) printf("ATWS: saved\n", mp3_serv.url, mp3_serv.port); return; } diff --git a/project/src/user/wifi_console.c b/project/src/user/wifi_console.c index 8a77947..83db493 100644 --- a/project/src/user/wifi_console.c +++ b/project/src/user/wifi_console.c @@ -7,16 +7,22 @@ #include #include "FreeRTOS.h" -#include "freertos_pmu.h" #include "diag.h" -#include "wifi_api.h" -#include "wifi_conf.h" -#include "rtl8195a/rtl_libc.h" #include "hal_platform.h" +#include "freertos_pmu.h" #include "section_config.h" #include "hal_diag.h" #include "lwip/netif.h" +#include "wifi_api.h" +#include "wifi_conf.h" +#include "rtl8195a/rtl_libc.h" + + +#if CONFIG_WLAN_CONNECT_CB +extern void connect_close(void); +extern void connect_start(void); +#endif extern struct netif xnetif[NET_IF_NUM]; @@ -71,6 +77,7 @@ LOCAL void fATPN(int argc, char *argv[]){ else wifi_st_cfg.reconnect_pause = 5; show_wifi_st_cfg(); #if CONFIG_WLAN_CONNECT_CB +extern void connect_close(void); connect_close(); #endif wifi_run(wifi_run_mode | RTW_MODE_STA); @@ -143,11 +150,13 @@ LOCAL void fATWR(int argc, char *argv[]){ #if CONFIG_WLAN_CONNECT_CB // Close connections LOCAL void fATOF(int argc, char *argv[]){ + (void)argc; (void)argv; connect_close(); } // Open connections LOCAL void fATON(int argc, char *argv[]){ + (void)argc; (void)argv; connect_start(); } #endif @@ -168,6 +177,8 @@ LOCAL void fATWI(int argc, char *argv[]) { wifi_cfg.mode = atoi(argv[2]); } } +#else + (void)argc; (void)argv; #endif rtw_wifi_setting_t Setting; if((wifi_run_mode & RTW_MODE_AP) @@ -191,12 +202,19 @@ LOCAL void fATWI(int argc, char *argv[]) { printf("\nWIFI ST config:\n"); printf(&str_rom_57ch3Dch0A[25]); // "================================\n" show_wifi_st_cfg(); + printf("\nWIFI AP clients:\n"); + printf(&str_rom_57ch3Dch0A[25]); // "================================\n" +#if SDK_VER_NUM >= 0x4000 + show_wifi_ap_clients(); +#endif printf("\n"); } extern uint8_t rtw_power_percentage_idx; +extern int rltk_set_tx_power_percentage(rtw_tx_pwr_percentage_t power_percentage_idx); -LOCAL void fATWT(int argc, char *argv[]) { +void fATWT(int argc, char *argv[]) { + (void) argc; (void) argv; if(argc > 1) { int txpwr = atoi(argv[1]); debug_printf("set tx power (%d)...\n", txpwr); @@ -209,7 +227,10 @@ LOCAL void fATWT(int argc, char *argv[]) { //-- Test tsf (64-bits counts, 1 us step) --- -#include "hal_com_reg.h" +//#include "hal_com_reg.h" +#define WIFI_REG_BASE 0x40080000 +#define REG_TSFTR 0x0560 +#define REG_TSFTR1 0x0568 // HW Port 1 TSF Register #define ReadTSF_Lo32() (*((volatile unsigned int *)(WIFI_REG_BASE + REG_TSFTR))) #define ReadTSF_Hi32() (*((volatile unsigned int *)(WIFI_REG_BASE + REG_TSFTR1))) @@ -219,13 +240,15 @@ LOCAL uint64_t get_tsf(void) return *((uint64_t *)(WIFI_REG_BASE + REG_TSFTR)); } -LOCAL void fATSF(int argc, char *argv[]) +void fATSF(int argc, char *argv[]) { + (void) argc; (void) argv; uint64_t tsf = get_tsf(); printf("\nTSF: %08x%08x\n", (uint32_t)(tsf>>32), (uint32_t)(tsf)); } -LOCAL void fATWP(int argc, char *argv[]) { +void fATWP(int argc, char *argv[]) { + (void) argc; (void) argv; int x = 0; if(argc > 1) { x = atoi(argv[1]); @@ -244,9 +267,8 @@ LOCAL void fATWP(int argc, char *argv[]) { printf("DTIM: %d\n", _wext_get_lps_dtim(0)); } } - /* -------- WiFi Scan ------------------------------- */ -LOCAL void scan_result_handler(internal_scan_handler_t* ap_scan_result) +LOCAL rtw_result_t scan_result_handler(internal_scan_handler_t* ap_scan_result) { if (ap_scan_result) { if(ap_scan_result->scan_cnt) { @@ -268,15 +290,16 @@ LOCAL void scan_result_handler(internal_scan_handler_t* ap_scan_result) record->SSID.val[record->SSID.len] = '\0'; printf("%s\n", record->SSID.val); } - } } else { printf("Scan networks: None!\n"); } + return RTW_SUCCESS; } /* -------- WiFi Scan ------------------------------- */ -LOCAL void fATSN(int argc, char *argv[]) +void fATSN(int argc, char *argv[]) { + (void) argc; (void) argv; api_wifi_scan(scan_result_handler); } @@ -315,7 +338,7 @@ MON_RAM_TAB_SECTION COMMAND_TABLE console_cmd_wifi_api[] = { {"P2P_DISCCONNECT", 0, cmd_p2p_disconnect, ": p2p disconnect"}, {"P2P_CONNECT", 0, cmd_p2p_connect, ": p2p connect"}, #endif - {"ATWR", 0, fATWR, ": WIFI Connect, Disconnect"}, + {"ATWR", 0, fATWR, "=[mode]: WIFI Mode: 0 - off, 1 - ST, 2 - AP, 3 - ST+AP"}, #if CONFIG_WLAN_CONNECT_CB {"ATON", 0, fATON, ": Open connections"}, {"ATOFF", 0, fATOF, ": Close connections"}, @@ -323,7 +346,7 @@ MON_RAM_TAB_SECTION COMMAND_TABLE console_cmd_wifi_api[] = { {"ATWI", 0, fATWI, ": WiFi Info"}, #if CONFIG_DEBUG_LOG > 3 {"ATWT", 1, fATWT, "=: WiFi tx power: 0 - 100%, 1 - 75%, 2 - 50%, 3 - 25%, 4 - 12.5%"}, - {"ATSF", 0, fATSF, ": Test TSF value"}, + {"ATSF", 0, fATSF, ": Get TSF value"}, #endif // {"ATWP", 0, fATWP, "=[dtim]: 0 - WiFi ipc/lpc off, 1..10 - on + dtim"}, {"ATSN", 0, fATSN, ": Scan networks"} diff --git a/userset.mk b/userset.mk index 1cecc52..74b87f9 100644 --- a/userset.mk +++ b/userset.mk @@ -1,8 +1,8 @@ #============================================= # User defined #============================================= -#SDK_PATH ?= ../RTL00_WEB/USDK/ -SDK_PATH ?= RTL00_SDKV35a/ +#SDK_PATH = ../RTL00_WEB/USDK/ +SDK_PATH = RTL00_SDKV35a/ #GCC_PATH = d:/MCU/GNU_Tools_ARM_Embedded/6.2017-q1-update/bin/# + or set in PATH #GCC_PATH = d:/MCU/GNU_Tools_ARM_Embedded/5.2_2015q4/bin/# + or set in PATH #OPENOCD_PATH = d:/MCU/OpenOCD/bin/# + or set in PATH