From f7b901aa2727d39e5a2e83b44645d702f58d7ebd Mon Sep 17 00:00:00 2001 From: pvvx Date: Sat, 22 Apr 2017 16:44:33 +0300 Subject: [PATCH] update --- Makefile | 9 +- README.md | 2 +- .../component/common/api/at_cmd/atcmd_wifi.c | 47 +- .../component/common/api/platform/esp_comp.h | 21 +- .../common/api/wifi/rtw_wowlan/dev_wowlan.c | 2 +- .../common/api/wifi/rtw_wowlan/wifi_wowlan.h | 8 +- .../wpa_supplicant/wifi_eap_config.c | 37 +- .../wpa_supplicant/wifi_wps_config.c | 13 +- .../component/common/api/wifi/wifi_conf.c | 225 +- .../component/common/api/wifi/wifi_conf.h | 23 +- .../common/api/wifi/wifi_simple_config.c | 18 +- .../api/wifi/wifi_simple_config_parser.h | 4 +- RTL00_SDKV35a/component/common/api/wifi_api.c | 108 +- RTL00_SDKV35a/component/common/api/wifi_api.h | 14 +- .../common/api/wifi_interactive_mode.c | 60 +- .../jd_joinlink/example_joinlink.c | 12 +- .../application/uart_adapter/uart_adapter.c | 7 +- .../drivers/sdio/realtek/sdio_host/src/sd.c | 4 +- .../drivers/wlan/realtek/include/drv_types.h | 78 +- .../drivers/wlan/realtek/include/hal_intf.h | 2 +- .../drivers/wlan/realtek/include/rtw_cmd.h | 6 +- .../wlan/realtek/include/rtw_ioctl_set.h | 2 +- .../wlan/realtek/include/rtw_mlme_ext.h | 8 +- .../wlan/realtek/include/wifi_constants.h | 2 +- .../drivers/wlan/realtek/include/wifi_lib.h | 470 +- .../wlan/realtek/include/wifi_structures.h | 18 +- .../drivers/wlan/realtek/include/wlan_lib.h | 699 ++- .../wlan/realtek/src/hal/OUTSRC/phydm.h | 4 +- .../wlan/realtek/src/hal/OUTSRC/phydm_types.h | 6 +- .../hal/OUTSRC/rtl8195a/ROM_RTL8195A_PHYDM.h | 10 +- .../wlan/realtek/src/osdep/freertos/wrapper.h | 6 +- .../example/uart_atcmd/example_uart_atcmd.c | 2 +- .../example_wlan_fast_connect.c | 18 +- .../component/common/mbed/hal/analogin_api.h | 2 +- .../component/common/mbed/hal/pwmout_api.h | 18 +- .../mbed/targets/hal/rtl8195a/analogin_api.c | 28 +- .../mbed/targets/hal/rtl8195a/log_uart_api.c | 2 +- .../mbed/targets/hal/rtl8195a/pwmout_api.c | 79 +- .../mbed/targets/hal/rtl8195a/sys_api.c | 8 +- .../network/lwip/lwip_v1.4.1/src/api/err.c | 32 +- .../lwip/lwip_v1.4.1/src/api/sockets.c | 9 +- .../lwip_v1.4.1/src/include/lwip/sockets.h | 3 + .../common/network/netbios/netbios.c | 13 +- .../common/network/websocket/wsclient_api.h | 8 +- .../component/common/utilities/webserver.c | 4 +- .../component/os/freertos/cmsis_os.c | 12 +- .../Source/portable/MemMang/heap_5.c | 558 +- .../component/os/os_dep/include/osdep_api.h | 2 +- RTL00_SDKV35a/component/os/os_dep/osdep_api.c | 1 - .../component/os/os_dep/osdep_service.c | 4 +- .../soc/realtek/8195a/cmsis/device/diag.h | 2 + .../soc/realtek/8195a/fwlib/hal_diag.h | 3 + .../realtek/8195a/fwlib/ram_lib/hal_misc_v0.c | 2 +- .../realtek/8195a/fwlib/ram_lib/rtl_boot.c | 5 +- .../8195a/fwlib/rtl8195a/rtl8195a_sys_on.h | 1 + .../8195a/fwlib/rtl8195a/src/rtl8195a_pwm.c | 74 +- .../8195a/fwlib/rtl8195a/src/rtl8195a_uart.c | 4 +- .../soc/realtek/8195a/fwlib/src/hal_adc.c | 48 +- .../realtek/8195a/fwlib/src/hal_log_uart.c | 6 +- .../soc/realtek/8195a/fwlib/src/hal_pwm.c | 4 +- .../8195a/fwlib/src/hal_soc_ps_monitor.c | 21 +- .../soc/realtek/8195a/fwlib/src/hal_ssi.c | 4 +- .../8195a/misc/driver/rtl_console_new.c | 17 +- .../misc/rtl_std_lib/include/rtl_bios_data.h | 6 +- .../misc/rtl_std_lib/lib_rtlstd/c_stdio.c | 19 +- .../misc/rtl_std_lib/lib_rtlstd/ram_libc.c | 22 +- .../rtl_std_lib/lib_rtlstd/ram_pvvx_libc.c | 59 +- .../lib_rtlstd/rtl_eabi_cast_ram.c | 15 +- .../rtl_std_lib/lib_rtlstd/rtl_math_ram.c | 5 +- build/bin/ota.bin | Bin 299880 -> 300472 bytes build/bin/ram_2.bin | Bin 299844 -> 300436 bytes build/bin/ram_2.ns.bin | Bin 299860 -> 300452 bytes build/bin/ram_2.p.bin | Bin 299860 -> 300452 bytes build/bin/ram_all.bin | Bin 344932 -> 345524 bytes build/obj/build.nmap | 4693 +++++++++-------- project/src/user/wifi_console.c | 5 +- 76 files changed, 3753 insertions(+), 3990 deletions(-) diff --git a/Makefile b/Makefile index fc78f3f..0fe8da7 100644 --- a/Makefile +++ b/Makefile @@ -7,9 +7,6 @@ ram_all: @$(MAKE) -f sdkbuild.mk @$(MAKE) -f flasher.mk genbin1 genbin23 -webfs: - @$(MAKE) -f webfs.mk webpages.espfs - .PHONY: ram_all_mp ram_all_mp: @$(MAKE) -f sdkbuild.mk mp @@ -29,11 +26,7 @@ flashburn: flash_OTA: @$(MAKE) -f flasher.mk flash_OTA - -flashwebfs: - @$(MAKE) -f webfs.mk webpages.espfs - @$(MAKE) -f flasher.mk flashwebfs - #JLinkGDB-WrWebFs.bat + runram: #JLink-RunRAM.bat diff --git a/README.md b/README.md index 9b3f39b..2628595 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ RTL00 module (RTL8710AF)
![SCH](https://github.com/pvvx/RTL00MP3/blob/master/RTL00_MP3_SCH.gif) -Толко Тест!
+Только Тест!
PWM Out GC_2 and PE_2 (2 канала по 96Bit на один исходный sample 48 кГц)
diff --git a/RTL00_SDKV35a/component/common/api/at_cmd/atcmd_wifi.c b/RTL00_SDKV35a/component/common/api/at_cmd/atcmd_wifi.c index daf851f..2f67666 100644 --- a/RTL00_SDKV35a/component/common/api/at_cmd/atcmd_wifi.c +++ b/RTL00_SDKV35a/component/common/api/at_cmd/atcmd_wifi.c @@ -948,13 +948,16 @@ void fATWC(void *arg){ if(assoc_by_bssid){ printf("Joining BSS by BSSID "MAC_FMT" ...\n", MAC_ARG(wifi.bssid.octet)); - ret = wifi_connect_bssid(wifi.bssid.octet, (char*)wifi.ssid.val, wifi.security_type, (char*)wifi.password, - ETH_ALEN, wifi.ssid.len, wifi.password_len, wifi.key_id, NULL); } else { printf("Joining BSS by SSID %s...\n", (char*)wifi.ssid.val); - ret = wifi_connect((char*)wifi.ssid.val, wifi.security_type, (char*)wifi.password, wifi.ssid.len, - wifi.password_len, wifi.key_id, NULL); } + ret = wifi_connect(wifi.bssid.octet, + assoc_by_bssid, + (char*)wifi.ssid.val, + wifi.security_type, + (char*)wifi.password, + wifi.key_id, + NULL); if(ret!= RTW_SUCCESS){ printf("ERROR: Can't connect to AP\n"); @@ -1652,19 +1655,10 @@ void fATPA(void *arg) goto exit; } - if(hidden_ssid){ - if(wifi_start_ap_with_hidden_ssid((char*)ap.ssid.val, ap.security_type, (char*)ap.password, ap.ssid.len, ap.password_len, ap.channel) < 0) { + if(wifi_start_ap((char*)ap.ssid.val, ap.security_type, (char*)ap.password, ap.channel, hidden_ssid) < 0) { //at_printf("\r\n[ATPA] ERROR : Start AP failed"); error_no = 4; goto exit; - } - } - else{ - if(wifi_start_ap((char*)ap.ssid.val, ap.security_type, (char*)ap.password, ap.ssid.len, ap.password_len, ap.channel) < 0) { - //at_printf("\r\n[ATPA] ERROR : Start AP failed"); - error_no = 4; - goto exit; - } } while(1) { @@ -1906,13 +1900,14 @@ void fATPN(void *arg) wifi_set_pscan_chan(&connect_channel, &pscan_config, 1); #endif - if(assoc_by_bssid){ - ret = wifi_connect_bssid(wifi.bssid.octet, (char*)wifi.ssid.val, wifi.security_type, (char*)wifi.password, - ETH_ALEN, wifi.ssid.len, wifi.password_len, wifi.key_id, NULL); - } else { - ret = wifi_connect((char*)wifi.ssid.val, wifi.security_type, (char*)wifi.password, wifi.ssid.len, - wifi.password_len, wifi.key_id, NULL); - } + ret = wifi_connect( + wifi.bssid.octet, + assoc_by_bssid, + (char*)wifi.ssid.val, + wifi.security_type, + (char*)wifi.password, + wifi.key_id, + NULL); if(ret!= RTW_SUCCESS){ //at_printf("\r\n[ATPN] ERROR: Can't connect to AP"); @@ -2345,8 +2340,14 @@ int atcmd_wifi_restore_from_flash(void) break; } - ret = wifi_connect((char*)wifi.ssid.val, wifi.security_type, (char*)wifi.password, wifi.ssid.len, - wifi.password_len, wifi.key_id, NULL); + ret = wifi_connect( + NULL, + 0, + (char*)wifi.ssid.val, + wifi.security_type, + (char*)wifi.password, + wifi.key_id, + NULL); if(ret == RTW_SUCCESS){ LwIP_DHCP(0, DHCP_START); ret = 0; diff --git a/RTL00_SDKV35a/component/common/api/platform/esp_comp.h b/RTL00_SDKV35a/component/common/api/platform/esp_comp.h index 6a6cb87..e89795c 100644 --- a/RTL00_SDKV35a/component/common/api/platform/esp_comp.h +++ b/RTL00_SDKV35a/component/common/api/platform/esp_comp.h @@ -7,17 +7,18 @@ #define ICACHE_FLASH_ATTR #define ICACHE_RODATA_ATTR #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 @@ -51,6 +52,7 @@ #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 @@ -102,7 +104,6 @@ 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); - #define ip4_addr1(ipaddr) (((u8_t*)(ipaddr))[0]) #define ip4_addr2(ipaddr) (((u8_t*)(ipaddr))[1]) #define ip4_addr3(ipaddr) (((u8_t*)(ipaddr))[2]) @@ -121,6 +122,13 @@ extern SpiFlashChip * flashchip; // in RAM-BIOS: 0x3fffc714 #define IPSTR "%d.%d.%d.%d" +#ifndef MAC2STR +#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5] +#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x" +#endif + + +#ifndef DEBUGSOO /* CONFIG_DEBUG_LOG: =0 Off all diag/debug msg, =1 Only errors, @@ -135,5 +143,12 @@ extern SpiFlashChip * flashchip; // in RAM-BIOS: 0x3fffc714 #else #define DEBUGSOO CONFIG_DEBUG_LOG #endif +#endif //#ifndef DEBUGSOO + +//#define system_get_sdk_version() "3.5.3" + +//#define system_get_time xTaskGetTickCount +//#define ets_get_cpu_frequency HalGetCpuClk + #endif // _INCLUDE_ESP_COMP_H_ diff --git a/RTL00_SDKV35a/component/common/api/wifi/rtw_wowlan/dev_wowlan.c b/RTL00_SDKV35a/component/common/api/wifi/rtw_wowlan/dev_wowlan.c index 929c014..b458346 100644 --- a/RTL00_SDKV35a/component/common/api/wifi/rtw_wowlan/dev_wowlan.c +++ b/RTL00_SDKV35a/component/common/api/wifi/rtw_wowlan/dev_wowlan.c @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include diff --git a/RTL00_SDKV35a/component/common/api/wifi/rtw_wowlan/wifi_wowlan.h b/RTL00_SDKV35a/component/common/api/wifi/rtw_wowlan/wifi_wowlan.h index cdf2621..82355fe 100644 --- a/RTL00_SDKV35a/component/common/api/wifi/rtw_wowlan/wifi_wowlan.h +++ b/RTL00_SDKV35a/component/common/api/wifi/rtw_wowlan/wifi_wowlan.h @@ -212,16 +212,16 @@ struct rtw_wowlan_rx_filter { #if defined(__IAR_SYSTEMS_ICC__) #pragma pack(1) #else -//#error "this structure needs to be packed!" +#error "this structure needs to be packed!" #endif -struct rtw_wowlan { +struct rtw_wowlan_status { u32 wakeup_reasons; //record wake up reason u32 filter_id; //record which pattern is matched -} _status __attribute__ ((__packed__)); +}; #if defined(__IAR_SYSTEMS_ICC__) #pragma pack() #else -//#error "this structure needs to be packed!" +#error "this structure needs to be packed!" #endif /** diff --git a/RTL00_SDKV35a/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_eap_config.c b/RTL00_SDKV35a/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_eap_config.c index 320d9e0..a24c7b0 100644 --- a/RTL00_SDKV35a/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_eap_config.c +++ b/RTL00_SDKV35a/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_eap_config.c @@ -10,8 +10,10 @@ #include #include "wifi/wifi_conf.h" #include +#ifdef CONFIG_ENABLE_EAP #include #include +#endif #define WLAN0_NAME "wlan0" #ifndef ENABLE @@ -21,6 +23,21 @@ #define DISABLE (0) #endif +#ifndef CONFIG_ENABLE_EAP +int get_eap_phase(void){ + return 0; +} + +int get_eap_method(void){ + return 0; +} + +void eap_autoreconnect_hdl(u8 method_id) +{ + (void) method_id; +} +#else + u8 eap_phase = 0; u8 eap_method = 0; @@ -42,9 +59,6 @@ void eap_eapol_recvd_hdl(char *buf, int buf_len, int flags, void* handler_user_d void eap_eapol_start_hdl(char *buf, int buf_len, int flags, void* handler_user_data); #endif -void set_eap_phase(unsigned char is_trigger_eap){ - eap_phase = is_trigger_eap; -} int get_eap_phase(void){ return eap_phase; @@ -54,6 +68,10 @@ int get_eap_method(void){ return eap_method; } +void set_eap_phase(unsigned char is_trigger_eap){ + eap_phase = is_trigger_eap; +} + void reset_config(void){ eap_target_ssid = NULL; eap_identity = NULL; @@ -64,6 +82,8 @@ void reset_config(void){ eap_client_key_pwd = NULL; } +#ifdef CONFIG_ENABLE_EAP + void judge_station_disconnect(void) { int mode = 0; @@ -82,7 +102,7 @@ void judge_station_disconnect(void) wifi_disconnect(); } } -#ifdef CONFIG_ENABLE_EAP + void eap_disconnected_hdl(char *buf, int buf_len, int flags, void* handler_user_data){ // printf("disconnected\n"); wifi_unreg_event_handler(WIFI_EVENT_EAPOL_RECVD, eap_eapol_recvd_hdl); @@ -258,11 +278,12 @@ static int connect_by_open_system(char *target_ssid) if (target_ssid != NULL) { while (1) { rtw_msleep_os(500); //wait scan complete. - ret = wifi_connect(target_ssid, + ret = wifi_connect( + NULL, + 0, + target_ssid, RTW_SECURITY_OPEN, NULL, - strlen(target_ssid), - 0, 0, NULL); if (ret == RTW_SUCCESS) { @@ -451,3 +472,5 @@ int eap_cert_setup(ssl_context *ssl) #endif return 0; } + +#endif //#ifdef CONFIG_ENABLE_EAP diff --git a/RTL00_SDKV35a/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_wps_config.c b/RTL00_SDKV35a/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_wps_config.c index d8ba7e4..6641d2f 100644 --- a/RTL00_SDKV35a/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_wps_config.c +++ b/RTL00_SDKV35a/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_wps_config.c @@ -303,11 +303,12 @@ static int wps_connect_to_AP_by_certificate(rtw_network_info_t *wifi) printf("ssid_len = %d\n", wifi->ssid.len); printf("password_len = %d\n", wifi->password_len); while (1) { - ret = wifi_connect((char*)wifi->ssid.val, + ret = wifi_connect( + NULL, + 0, + (char*)wifi->ssid.val, wifi->security_type, (char*)wifi->password, - wifi->ssid.len, - wifi->password_len, wifi->key_id, NULL); if (ret == RTW_SUCCESS) { @@ -336,11 +337,11 @@ static int wps_connect_to_AP_by_open_system(char *target_ssid) if (target_ssid != NULL) { rtw_msleep_os(500); //wait scan complete. while (1) { - ret = wifi_connect(target_ssid, - RTW_SECURITY_OPEN, + ret = wifi_connect( NULL, - strlen(target_ssid), 0, + target_ssid, + RTW_SECURITY_OPEN, 0, NULL); if (ret == RTW_SUCCESS) { diff --git a/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.c b/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.c index b4f1f74..79956d7 100644 --- a/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.c +++ b/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.c @@ -9,6 +9,7 @@ #include #include #include +#include #include "tcpip.h" #include @@ -22,8 +23,6 @@ extern int inic_start(void); extern int inic_stop(void); #endif -#include "wifi_api.h" - #include "wlan_lib.h" #if CONFIG_DEBUG_LOG > 0 @@ -429,8 +428,18 @@ void restore_wifi_info_to_flash() { #endif //----------------------------------------------------------------------------// -int wifi_connect(char *ssid, rtw_security_t security_type, char *password, - int ssid_len, int password_len, int key_id, void *semaphore) { +int wifi_connect( + unsigned char bssid[ETH_ALEN], + char use_bssid, // flag + char *ssid, + rtw_security_t security_type, + char *password, + int key_id, + void *semaphore) { + + int ssid_len = 0; + int password_len = 0; + int bssid_len = 6; xSemaphoreHandle join_semaphore; rtw_result_t result = RTW_SUCCESS; u8 wep_hex = 0; @@ -441,7 +450,34 @@ int wifi_connect(char *ssid, rtw_security_t security_type, char *password, return RTW_ERROR; } + if(ssid) { + ssid_len = rtl_strlen(ssid); + if(ssid_len > NDIS_802_11_LENGTH_SSID) + ssid_len = NDIS_802_11_LENGTH_SSID; + } + if(password) { + password_len = rtl_strlen(password); + if(password_len > IW_PASSPHRASE_MAX_SIZE) + password_len = IW_PASSPHRASE_MAX_SIZE; + } + rtw_join_status = 0; //clear for last connect status + error_flag = RTW_UNKNOWN; //clear for last connect status + internal_join_result_t *join_result = + (internal_join_result_t *) rtw_zmalloc( + sizeof(internal_join_result_t)); + if (!join_result) { +#if CONFIG_DEBUG_LOG > 3 + error_printf("%s: Can't malloc memory!\n", __func__); +#endif + return RTW_NOMEM; + } + if (ssid_len && ssid) { + join_result->network_info.ssid.len = ssid_len > 32 ? 32 : ssid_len; + rtw_memcpy(join_result->network_info.ssid.val, ssid, ssid_len); + } + if(bssid) rtw_memcpy(join_result->network_info.bssid.octet, bssid, ETH_ALEN); + error_flag = RTW_UNKNOWN; //clear for last connect status if ((((password_len > RTW_MAX_PSK_LEN) || (password_len < RTW_MIN_PSK_LEN)) && ((security_type == RTW_SECURITY_WPA_TKIP_PSK) @@ -463,24 +499,24 @@ int wifi_connect(char *ssid, rtw_security_t security_type, char *password, if (password_len == 10) { - u32 p[5] = { 0 }; + u32 g[5] = { 0 }; u8 i = 0; - sscanf((const char*) password, "%02x%02x%02x%02x%02x", &p[0], - &p[1], &p[2], &p[3], &p[4]); + sscanf((const char*) password, "%02x%02x%02x%02x%02x", &g[0], + &g[1], &g[2], &g[3], &g[4]); for (i = 0; i < 5; i++) - wep_pwd[i] = (u8) p[i]; + wep_pwd[i] = (u8) g[i]; wep_pwd[5] = '\0'; password_len = 5; wep_hex = 1; } else if (password_len == 26) { - u32 p[13] = { 0 }; + u32 g[13] = { 0 }; u8 i = 0; sscanf((const char*) password, "%02x%02x%02x%02x%02x%02x%02x" - "%02x%02x%02x%02x%02x%02x", &p[0], &p[1], &p[2], &p[3], - &p[4], &p[5], &p[6], &p[7], &p[8], &p[9], &p[10], - &p[11], &p[12]); + "%02x%02x%02x%02x%02x%02x", &g[0], &g[1], &g[2], &g[3], + &g[4], &g[5], &g[6], &g[7], &g[8], &g[9], &g[10], + &g[11], &g[12]); for (i = 0; i < 13; i++) - wep_pwd[i] = (u8) p[i]; + wep_pwd[i] = (u8) g[i]; wep_pwd[13] = '\0'; password_len = 13; wep_hex = 1; @@ -488,20 +524,8 @@ int wifi_connect(char *ssid, rtw_security_t security_type, char *password, } } - internal_join_result_t *join_result = - (internal_join_result_t *) rtw_zmalloc( - sizeof(internal_join_result_t)); - if (!join_result) { -#if CONFIG_DEBUG_LOG > 3 - error_printf("%s: Can't malloc memory!\n", __func__); -#endif - return RTW_NOMEM; - } - - join_result->network_info.ssid.len = ssid_len > 32 ? 32 : ssid_len; - rtw_memcpy(join_result->network_info.ssid.val, ssid, ssid_len); - join_result->network_info.password_len = password_len; + if (password_len) { /* add \0 to the end */ join_result->network_info.password = rtw_zmalloc(password_len + 1); @@ -542,9 +566,33 @@ int wifi_connect(char *ssid, rtw_security_t security_type, char *password, #if DD_WIFI_CONN // дублирование с wifi_connect_bssid_local() wifi_connect_local(&join_result->network_info); #else - if (wifi_connect_local(&join_result->network_info) == 0) - wext_set_ssid(WLAN0_NAME, join_result->network_info.ssid.val, - join_result->network_info.ssid.len); + rtw_network_info_t *pWifi = &join_result->network_info; + + if (wifi_connect_local(pWifi) == 0) { + uint16 flg = 0; + if(use_bssid) { + struct { + u8 bssid[ETH_ALEN + 2]; + void * p; + } bs = { 0 }; + memcpy(bs.bssid, pWifi->bssid.octet, ETH_ALEN); + for(int i = 0; i < ETH_ALEN; i++) { + flg += bs.bssid[i]; + } + if(flg == 0x5FA || flg == 0) { // 0x5FA = 6*0xff + use_bssid = 0; + flg = 0; + } + else { + use_bssid = 1; + wext_set_bssid(WLAN0_NAME, bs.bssid); + } + } + if(!use_bssid) { + wext_set_ssid(WLAN0_NAME, join_result->network_info.ssid.val, + join_result->network_info.ssid.len); + }; + } #endif join_user_data = join_result; @@ -604,10 +652,18 @@ int wifi_connect(char *ssid, rtw_security_t security_type, char *password, wifi_handshake_done_hdl); return result; } +/* -int wifi_connect_bssid(unsigned char bssid[ETH_ALEN], char *ssid, - rtw_security_t security_type, char *password, int bssid_len, - int ssid_len, int password_len, int key_id, void *semaphore) { +int wifi_connect_bssid( + unsigned char bssid[ETH_ALEN], + char *ssid, + rtw_security_t security_type, + char *password, + int bssid_len, + int ssid_len, + int password_len, + int key_id, + void *semaphore) { xSemaphoreHandle join_semaphore; rtw_result_t result = RTW_SUCCESS; @@ -643,7 +699,7 @@ int wifi_connect_bssid(unsigned char bssid[ETH_ALEN], char *ssid, } join_result->network_info.password_len = password_len; if (password_len) { - /* add \0 to the end */ + // add \0 to the end join_result->network_info.password = rtw_zmalloc(password_len + 1); if (!join_result->network_info.password) { return RTW_NOMEM; @@ -726,6 +782,7 @@ int wifi_connect_bssid(unsigned char bssid[ETH_ALEN], char *ssid, wifi_handshake_done_hdl); return result; } +*/ int wifi_disconnect(void) { int ret = 0; @@ -740,7 +797,6 @@ int wifi_disconnect(void) { } return ret; } - //----------------------------------------------------------------------------// int wifi_is_connected_to_ap(void) { return rltk_wlan_is_connected_to_ap(); @@ -874,17 +930,23 @@ int wifi_get_drv_ability(uint32_t *ability) { //----------------------------------------------------------------------------// int wifi_set_country(rtw_country_code_t country_code) { - return wext_set_country(WLAN0_NAME, country_code); + int ret; + + ret = wext_set_country(WLAN0_NAME, country_code); + + return ret; } //----------------------------------------------------------------------------// int wifi_set_channel_plan(uint8_t channel_plan) { const char * ifname = WLAN0_NAME; + int ret = 0; char buf[24]; rtw_memset(buf, 0, sizeof(buf)); snprintf(buf, 24, "set_ch_plan %x", channel_plan); - return wext_private_command(ifname, buf, SHOW_PRIVATE_OUT); + ret = wext_private_command(ifname, buf, SHOW_PRIVATE_OUT); + return ret; } //----------------------------------------------------------------------------// @@ -918,12 +980,16 @@ void wifi_set_mib(void) { //----------------------------------------------------------------------------// int wifi_rf_on(void) { - return rltk_wlan_rf_on(); + int ret; + ret = rltk_wlan_rf_on(); + return ret; } //----------------------------------------------------------------------------// int wifi_rf_off(void) { - return rltk_wlan_rf_off(); + int ret; + ret = rltk_wlan_rf_off(); + return ret; } //----------------------------------------------------------------------------// @@ -1070,63 +1136,21 @@ int wifi_get_last_error(void) { int wpas_wps_init(const char* ifname); #endif -int wifi_start_ap_s(PSOFTAP_CONFIG p) { - const char *ifname = WLAN0_NAME; - int ret = 0; - - if (wifi_mode == RTW_MODE_STA_AP) { - ifname = WLAN1_NAME; - } - - if (is_promisc_enabled()) - promisc_set(0, NULL, 0); - - wifi_reg_event_handler(WIFI_EVENT_STA_ASSOC, wifi_ap_sta_assoc_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_STA_DISASSOC, wifi_ap_sta_disassoc_hdl, - NULL); - - ret = wext_set_mode(ifname, IW_MODE_MASTER); - if (ret < 0) - goto exit; - ret = wext_set_channel(ifname, p->channel); //Set channel before starting ap - if (ret < 0) - goto exit; - - switch (p->security_type) { - case RTW_SECURITY_OPEN: - break; - case RTW_SECURITY_WPA2_AES_PSK: - ret = wext_set_auth_param(ifname, IW_AUTH_80211_AUTH_ALG, - IW_AUTH_ALG_OPEN_SYSTEM); - if (ret == 0) - ret = wext_set_key_ext(ifname, IW_ENCODE_ALG_CCMP, NULL, 0, 0, 0, 0, - NULL, 0); - if (ret == 0) - ret = wext_set_passphrase(ifname, (u8*) p->password, strlen(p->password)); - break; - default: - ret = -1; - printf("WIFICONF: security type is not supported\n"); - break; - } - if (ret < 0) - goto exit; - if(p->ssid_hidden) { - ret = set_hidden_ssid(ifname, 1); - if (ret < 0) - goto exit; - } - ret = wext_set_ap_ssid(ifname, (u8*) p->ssid, strlen(p->ssid)); -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - wpas_wps_init(ifname); -#endif -exit: return ret; -} - -int wifi_start_ap(char *ssid, rtw_security_t security_type, char *password, - int ssid_len, int password_len, int channel) { +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; + int password_len = 0; int ret = 0; + if(ssid) { + ssid_len = rtl_strlen(ssid); + if(ssid_len > NDIS_802_11_LENGTH_SSID) + ssid_len = NDIS_802_11_LENGTH_SSID; + } + if(password) { + password_len = rtl_strlen(password); + if(password_len > IW_PASSPHRASE_MAX_SIZE) + password_len = IW_PASSPHRASE_MAX_SIZE; + } if (wifi_mode == RTW_MODE_STA_AP) { ifname = WLAN1_NAME; @@ -1142,6 +1166,7 @@ int wifi_start_ap(char *ssid, rtw_security_t security_type, char *password, ret = wext_set_mode(ifname, IW_MODE_MASTER); if (ret < 0) goto exit; +// if(!channel) channel = 1; ret = wext_set_channel(ifname, channel); //Set channel before starting ap if (ret < 0) goto exit; @@ -1166,13 +1191,19 @@ int wifi_start_ap(char *ssid, rtw_security_t security_type, char *password, if (ret < 0) goto exit; + if(ssid_hidden) { + ret = set_hidden_ssid(ifname, 1); + if (ret < 0) + goto exit; + } + ret = wext_set_ap_ssid(ifname, (u8*) ssid, ssid_len); #if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP wpas_wps_init(ifname); #endif exit: return ret; } - +/* int wifi_start_ap_with_hidden_ssid(char *ssid, rtw_security_t security_type, char *password, int ssid_len, int password_len, int channel) { const char *ifname = WLAN0_NAME; @@ -1226,6 +1257,7 @@ int wifi_start_ap_with_hidden_ssid(char *ssid, rtw_security_t security_type, #endif exit: return ret; } +*/ void wifi_scan_each_report_hdl(char* buf, int buf_len, int flags, void* userdata) { @@ -1710,7 +1742,7 @@ void wifi_enter_promisc_mode() { } int wifi_restart_ap(unsigned char *ssid, rtw_security_t security_type, - unsigned char *password, int ssid_len, int password_len, int channel) { + unsigned char *password, int channel) { unsigned char idx = 0; struct ip_addr ipaddr; struct ip_addr netmask; @@ -1747,8 +1779,7 @@ int wifi_restart_ap(unsigned char *ssid, rtw_security_t security_type, wifi_on(RTW_MODE_AP); } // start ap - if (wifi_start_ap((char*) ssid, security_type, (char*) password, ssid_len, - password_len, channel) < 0) { + if (wifi_start_ap((char*) ssid, security_type, (char*) password, channel, 0) < 0) { printf("ERROR: Operation failed!\n"); return -1; } diff --git a/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.h b/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.h index ac8bbc0..9860a68 100644 --- a/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.h +++ b/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.h @@ -3,16 +3,18 @@ #define __WIFI_CONF_API_H #include "FreeRTOS.h" -#include "wifi_constants.h" +#include "wifi_constants.h" #include "wifi_structures.h" #include "wifi_util.h" -#include "wifi_ind.h" +#include "wifi_ind.h" #include +#include "wifi_api.h" #ifdef __cplusplus extern "C" { #endif + /****************************************************** * Macros ******************************************************/ @@ -137,14 +139,14 @@ int wifi_manager_init(void); * RTW_ERROR : if an error occurred */ int wifi_connect( + unsigned char bssid[ETH_ALEN], + char use_bssid, char *ssid, rtw_security_t security_type, char *password, - int ssid_len, - int password_len, int key_id, void *semaphore); - +/* int wifi_connect_bssid( unsigned char bssid[ETH_ALEN], char *ssid, @@ -155,7 +157,7 @@ int wifi_connect_bssid( int password_len, int key_id, void *semaphore); - +*/ /** Disassociates from a Wi-Fi network. * * @return RTW_SUCCESS : On successful disassociation from @@ -446,6 +448,8 @@ int wifi_get_lps_dtim(unsigned char *dtim); * @return RTW_SUCCESS : if successfully creates an AP * RTW_ERROR : if an error occurred */ +int wifi_start_ap(char *ssid, rtw_security_t security_type, char *password, int channel, char ssid_hidden); +/* int wifi_start_ap( char *ssid, rtw_security_t security_type, @@ -453,7 +457,7 @@ int wifi_start_ap( int ssid_len, int password_len, int channel); - +*/ /** Starts an infrastructure WiFi network with hidden SSID * * @warning If a STA interface is active when this function is called, the softAP will\n @@ -478,6 +482,7 @@ int wifi_start_ap( * @return RTW_SUCCESS : if successfully creates an AP * RTW_ERROR : if an error occurred */ +/* int wifi_start_ap_with_hidden_ssid( char *ssid, rtw_security_t security_type, @@ -485,7 +490,7 @@ int wifi_start_ap_with_hidden_ssid( int ssid_len, int password_len, int channel); - +*/ /** Initiates a scan to search for 802.11 networks. * * The scan progressively accumulates results over time, and @@ -638,8 +643,6 @@ int wifi_restart_ap( unsigned char *ssid, rtw_security_t security_type, unsigned char *password, - int ssid_len, - int password_len, int channel); int wifi_config_autoreconnect(__u8 mode, __u8 retyr_times, __u16 timeout); diff --git a/RTL00_SDKV35a/component/common/api/wifi/wifi_simple_config.c b/RTL00_SDKV35a/component/common/api/wifi/wifi_simple_config.c index 222e71e..924bb2a 100644 --- a/RTL00_SDKV35a/component/common/api/wifi/wifi_simple_config.c +++ b/RTL00_SDKV35a/component/common/api/wifi/wifi_simple_config.c @@ -530,8 +530,13 @@ enum sc_result SC_parse_scan_result_and_connect(scan_buf_arg* scan_buf, rtw_netw ret = SC_TARGET_CHANNEL_SCAN_FAIL; goto sc_connect_wifi_fail; } - ret = wifi_connect_bssid(scan_result.mac, (char*)wifi->ssid.val, SC_translate_iw_security_mode(scan_result.sec_mode), - (char*)wifi->password, ETH_ALEN, wifi->ssid.len, wifi->password_len, 0, NULL); + ret = wifi_connect( + scan_result.mac, + 1, + (char*)wifi->ssid.val, + SC_translate_iw_security_mode(scan_result.sec_mode), + (char*)wifi->password, + 0, NULL); if (ret == RTW_SUCCESS) goto sc_connect_wifi_success; } @@ -691,8 +696,13 @@ enum sc_result SC_connect_to_AP(void) goto wifi_connect_fail; } rtw_join_status = 0;//clear simple config status - ret = wifi_connect_bssid(g_bssid, (char*)wifi.ssid.val, wifi.security_type, (char*)wifi.password, - ETH_ALEN, wifi.ssid.len, wifi.password_len, wifi.key_id, NULL); + ret = wifi_connect(g_bssid, + 1, + (char*)wifi.ssid.val, + wifi.security_type, + (char*)wifi.password, + wifi.key_id, + NULL); if (ret == RTW_SUCCESS) goto wifi_connect_success; diff --git a/RTL00_SDKV35a/component/common/api/wifi/wifi_simple_config_parser.h b/RTL00_SDKV35a/component/common/api/wifi/wifi_simple_config_parser.h index 85d5d7d..330ecdb 100644 --- a/RTL00_SDKV35a/component/common/api/wifi/wifi_simple_config_parser.h +++ b/RTL00_SDKV35a/component/common/api/wifi/wifi_simple_config_parser.h @@ -68,15 +68,13 @@ struct simple_config_lib_config { }; - -#pragma pack(push, 1) +#pragma pack(1) struct rtk_test_sc { /* API exposed to user */ unsigned char ssid[32]; unsigned char password[65]; unsigned int ip_addr; }; -#pragma pack(pop) /* expose data */ extern s32 is_promisc_callback_unlock; diff --git a/RTL00_SDKV35a/component/common/api/wifi_api.c b/RTL00_SDKV35a/component/common/api/wifi_api.c index d28f280..aefcd94 100644 --- a/RTL00_SDKV35a/component/common/api/wifi_api.c +++ b/RTL00_SDKV35a/component/common/api/wifi_api.c @@ -36,6 +36,11 @@ #include "wifi_api.h" #include "wifi_user_set.h" +#ifdef CONFIG_ENABLE_WPS +extern void cmd_ap_wps(int argc, char **argv); +extern int wpas_wps_dev_config(u8 *dev_addr, u8 bregistrar); +#endif //CONFIG_WPS_AP + //========================================= //--- Wlan Config Init------------------- WIFI_CONFIG wifi_cfg = { @@ -68,6 +73,7 @@ STATION_CONFIG wifi_st_cfg = { .ssid = DEF_ST_SSID, .password = DEF_ST_PASSWORD, .bssid = DEF_ST_BSSID, + .flg = DEF_ST_BSSID, .security_type = DEF_ST_SECURITY, .autoreconnect = DEF_ST_AUTORECONNECT, .reconnect_pause = DEF_ST_RECONNECT_PAUSE @@ -115,9 +121,10 @@ uint32 write_wifi_cfg(uint32 flg) uint32 ret = 0; PFEEP_ELEMENT p = feep_tab; for(int m = 1; m && p->id != 0; m <<= 1, p++) { - if((flg & m) - && flash_write_cfg(p->obj, p->id, p->size) < p->size) { - ret |= m; + if(flg & m) { + if(!flash_write_cfg(p->obj, p->id, p->size)) { + ret |= m; + }; }; }; return ret; @@ -173,8 +180,6 @@ uint8 chk_ap_netif_num(void) return wlan_ap_netifn; } -extern int wifi_start_ap_s(PSOFTAP_CONFIG p); - rtw_result_t wifi_run_ap(void) { chk_ap_netif_num(); @@ -186,7 +191,18 @@ rtw_result_t wifi_run_ap(void) { if(wext_set_sta_num(wifi_ap_cfg.max_sta) != 0) { // Max number of STAs, should be 1..3, default is 3 error_printf("AP not set max connections %d!\n", wifi_ap_cfg.max_sta); }; - ret = wifi_start_ap_s(&wifi_ap_cfg); +#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP + // todo: ветка не доделана + wpas_wps_dev_config(xnetif[WLAN_AP_NETIF_NUM].hwaddr, 1); +#endif //CONFIG_WPS_AP + if(wifi_ap_cfg.channel == 0 || wifi_ap_cfg.channel > 14) { + wifi_ap_cfg.channel = 1; + } + ret = wifi_start_ap(wifi_ap_cfg.ssid, //char *ssid, + wifi_ap_cfg.security_type, //rtw_security_t ecurity_type, + wifi_ap_cfg.password, //char *password, + wifi_ap_cfg.channel, //int channel + wifi_ap_cfg.ssid_hidden); // wifi_run_mode |= RTW_MODE_AP; if (ret != RTW_SUCCESS) { error_printf("Error(%d): Start AP failed!\n\n", ret);; @@ -233,13 +249,13 @@ rtw_result_t StartStDHCPClient(void) struct netif * pnetif = &xnetif[WLAN_ST_NETIF_NUM]; DHCP_CONFIG *p = (dhcp_cfg *)&wifi_st_dhcp; unsigned char mode = p->mode; - if((mode == 3) - && (p->ip == IP4ADDR(255,255,255,255) - || p->ip == IP4ADDR(0,0,0,0))) { - mode = 2; + if((mode == 3) // Auto fix + && p->ip != IP4ADDR(255,255,255,255) + && p->ip != IP4ADDR(0,0,0,0)) { +// mode = 2; // fixed ip } - else mode = 1; - if(mode == 2) { + else mode = 1; // DHCP On + if(mode == 2) { // fixed ip netif_set_addr(pnetif, (ip_addr_t *)&p->ip, (ip_addr_t *)&p->mask, (ip_addr_t *)&p->gw); // dhcps_init(pnetif); } @@ -254,8 +270,8 @@ rtw_result_t StartStDHCPClient(void) p->ip = pnetif->ip_addr.addr; p->gw = pnetif->gw.addr; p->mask = pnetif->netmask.addr; - if(p->mode == 3) { - p->mode = 2; + if(p->mode == 3) { // Auto fix + p->mode = 2; // fixed ip write_wifi_cfg(BID_ST_DHCP_CFG); } ret = RTW_SUCCESS; @@ -282,9 +298,14 @@ rtw_result_t wifi_run_st(void) { } #endif info_printf("Connected to AP (%s, netif%d)...\n", wlan_st_name, wlan_st_netifn); - ret = wifi_connect(wifi_st_cfg.ssid, wifi_st_cfg.security_type, - wifi_st_cfg.password, strlen(wifi_st_cfg.ssid), - strlen(wifi_st_cfg.password), -1, NULL); + ret = wifi_connect( + wifi_st_cfg.bssid, + wifi_st_cfg.flg, + wifi_st_cfg.ssid, + wifi_st_cfg.security_type, + wifi_st_cfg.password, + -1, + NULL); wifi_run_mode |= RTW_MODE_STA; if (ret != RTW_SUCCESS) { error_printf("%s: Operation failed! Error(%d)\n", __func__, ret); @@ -328,7 +349,7 @@ int _wifi_on(rtw_mode_t mode) { // wext_set_adaptivity(RTW_ADAPTIVITY_NORMAL); // wext_set_adaptivity(RTW_ADAPTIVITY_CARRIER_SENSE); - devnum = (mode == RTW_MODE_STA_AP); + devnum = (mode == RTW_MODE_STA_AP); // flag use 2 netif ret = rltk_wlan_init(0, mode); if (ret < 0) return ret; @@ -390,8 +411,9 @@ void _LwIP_Init(void) netif_set_up(&xnetif[idx]); } info_printf("interface %d is initialized\n", idx); - wifi_mode = 0; lwip_init_done = 1; + // для отслеживания первого старта ? +// wifi_mode = RTW_MODE_NONE; } } @@ -400,9 +422,6 @@ int wifi_run(rtw_mode_t mode) { #if CONFIG_DEBUG_LOG > 4 debug_printf("\n%s(%d), %d\n", __func__, mode, wifi_run_mode); #endif - if(mode != RTW_MODE_NONE) { - _LwIP_Init(); - }; if(wifi_run_mode & RTW_MODE_AP) { info_printf("Deinit old AP...\n"); LwIP_DHCP(WLAN_AP_NETIF_NUM, DHCP_STOP); @@ -435,25 +454,37 @@ int wifi_run(rtw_mode_t mode) { if(wifi_set_country(wifi_cfg.country_code) != RTW_SUCCESS) { error_printf("Error set tx country_code (%d)!", wifi_cfg.country_code); }; -// extern uint8_t rtw_power_percentage_idx; // rtw_tx_pwr_percentage_t -#if 1 // rltk_set_tx_power_percentage() return all = 0 ! - rltk_set_tx_power_percentage(wifi_cfg.tx_pwr); -#else +// extern uint8_t rtw_power_percentage_idx; if(rtw_power_percentage_idx != wifi_cfg.tx_pwr) { if(rltk_set_tx_power_percentage(wifi_cfg.tx_pwr) != RTW_SUCCESS) { error_printf("Error set tx power (%d)!", wifi_cfg.tx_pwr); }; } -#endif debug_printf("mode == wifi_mode? (%d == %d?)\n", mode, wifi_mode); // if(mode == wifi_mode) { - if((wifi_mode == RTW_MODE_AP) || (wifi_mode == RTW_MODE_STA_AP)) { - wifi_run_ap(); - }; - if((wifi_mode == RTW_MODE_STA) || (wifi_mode == RTW_MODE_STA_AP)) { - wifi_run_st(); - }; + switch(wifi_mode) { + case RTW_MODE_STA_AP: + wifi_run_ap(); + wifi_run_st(); + break; + case RTW_MODE_STA: + wifi_run_st(); + break; + case RTW_MODE_AP: + wifi_run_ap(); + break; +#if 0// CONFIG_ENABLE_?? + case RTW_MODE_PROMISC: + break; +#endif +#if CONFIG_ENABLE_P2P + case RTW_MODE_P2P: + break; +#endif + default: + error_printf("Error WiFi mode(%d)\n", wifi_mode); + } #if CONFIG_INTERACTIVE_MODE /* Initial uart rx swmaphore*/ vSemaphoreCreateBinary(uart_rx_interrupt_sema); @@ -475,6 +506,7 @@ error_end: return ret; } +/* Load cfg, init WiFi + LwIP init, WiFi start if wifi_cfg.mode != RTW_MODE_NONE */ void wifi_init(void) { debug_printf("\nLoad Config\n"); read_wifi_cfg(wifi_cfg.load_flg); // DEF_LOAD_CFG @@ -483,13 +515,12 @@ void wifi_init(void) { // Call back from application layer after wifi_connection success // p_write_reconnect_ptr = wlan_write_reconnect_data_to_flash; p_wlan_autoreconnect_hdl = NULL; - if (wifi_cfg.mode != RTW_MODE_NONE) { - wifi_mode = wifi_cfg.mode; + _LwIP_Init(); #if CONFIG_WIFI_IND_USE_THREAD - wifi_manager_init(); + wifi_manager_init(); #endif - wifi_run(wifi_cfg.mode); - } +// wifi_cfg.mode = RTW_MODE_PROMISC; //RTW_MODE_P2P; + wifi_run(wifi_cfg.mode); } rtw_security_t translate_rtw_security(u8 security_type) @@ -519,6 +550,7 @@ rtw_security_t translate_rtw_security(u8 security_type) return security_mode; } + void show_wifi_ap_ip(void) { printf("SoftAP ip: " IPSTR "\n", IP2STR(&xnetif[WLAN_AP_NETIF_NUM].ip_addr)); } diff --git a/RTL00_SDKV35a/component/common/api/wifi_api.h b/RTL00_SDKV35a/component/common/api/wifi_api.h index 5a89c8c..129fe03 100644 --- a/RTL00_SDKV35a/component/common/api/wifi_api.h +++ b/RTL00_SDKV35a/component/common/api/wifi_api.h @@ -8,7 +8,6 @@ #ifndef _WIFI_API_H_ #define _WIFI_API_H_ #include "wifi_constants.h" -#include "wifi_conf.h" #define ip4_addr1(ipaddr) (((uint8_t*)(ipaddr))[0]) #define ip4_addr2(ipaddr) (((uint8_t*)(ipaddr))[1]) @@ -64,21 +63,21 @@ typedef struct _wifi_config { typedef struct _softap_config { unsigned char ssid[NDIS_802_11_LENGTH_SSID]; unsigned char password[IW_PASSPHRASE_MAX_SIZE]; - rtw_security_t security_type; // Only: RTW_SECURITY_OPEN, RTW_SECURITY_WPA2_AES_PSK - unsigned short beacon_interval; // default 100 + rtw_security_t security_type; // RTW_SECURITY_OPEN, RTW_SECURITY_WEP_PSK + uint16 beacon_interval; // Note: support 100 ~ 60000 ms, default 100 unsigned char channel; // 1..14 unsigned char ssid_hidden; // Note: default 0 unsigned char max_sta; // 1..3 -} SOFTAP_CONFIG, * PSOFTAP_CONFIG; +} SOFTAP_CONFIG, *PSOFTAP_CONFIG; //---- Interface 1 - wlan1 - ST - struct - typedef struct _station_config { unsigned char ssid[NDIS_802_11_LENGTH_SSID]; unsigned char password[IW_PASSPHRASE_MAX_SIZE]; rtw_security_t security_type; - unsigned char bssid[6]; // Note: If bssid set is not ff.ff.ff.ff.ff.ff, - // station will connect to the router with both ssid[] and bssid[] matched. + unsigned char bssid[6]; // Note: If bssid set is not ff.ff.ff.ff.ff.ff || 00:00:00:00:00:00 unsigned char autoreconnect; // 0 - none, 1..254 - count, 255 - all - unsigned char reconnect_pause; // in sec + unsigned char reconnect_pause; // in sec + unsigned char flg; // station will connect to the router with both ssid[], else if set flg - bssid[] matched. // rtw_adaptivity_mode_t } STATION_CONFIG, *PSTATION_CONFIG; //--- LwIP Config ------------------------- @@ -106,6 +105,7 @@ extern DHCP_CONFIG wifi_ap_dhcp; extern STATION_CONFIG wifi_st_cfg; extern DHCP_CONFIG wifi_st_dhcp; extern rtw_mode_t wifi_run_mode; +extern rtw_mode_t wifi_mode; extern char wlan_st_name[]; extern char wlan_ap_name[]; extern char wlan_st_netifn; diff --git a/RTL00_SDKV35a/component/common/api/wifi_interactive_mode.c b/RTL00_SDKV35a/component/common/api/wifi_interactive_mode.c index 45eba1a..a0d0436 100644 --- a/RTL00_SDKV35a/component/common/api/wifi_interactive_mode.c +++ b/RTL00_SDKV35a/component/common/api/wifi_interactive_mode.c @@ -124,9 +124,9 @@ extern void cmd_googlenest(int argc, char **argv); extern void cmd_jd_smart(int argc, char **argv); #endif #if CONFIG_WLAN -static void cmd_wifi_on(int argc, char **argv); -static void cmd_wifi_off(int argc, char **argv); -static void cmd_wifi_disconnect(int argc, char **argv); +void cmd_wifi_on(int argc, char **argv); +void cmd_wifi_off(int argc, char **argv); +void cmd_wifi_disconnect(int argc, char **argv); extern void cmd_promisc(int argc, char **argv); extern void cmd_simple_config(int argc, char **argv); @@ -222,9 +222,8 @@ static void cmd_wifi_sta_and_ap(int argc, char **argv) if(wifi_start_ap(argv[1], RTW_SECURITY_WPA2_AES_PSK, argv[3], - strlen((const char *)argv[1]), - strlen((const char *)argv[3]), - channel + channel, + 0 ) != RTW_SUCCESS) { printf("ERROR: Operation failed!\n\n"); return; @@ -234,9 +233,8 @@ static void cmd_wifi_sta_and_ap(int argc, char **argv) if(wifi_start_ap(argv[1], RTW_SECURITY_OPEN, NULL, - strlen((const char *)argv[1]), - 0, - channel + channel, + 0 ) != RTW_SUCCESS) { printf("ERROR: Operation failed!\n"); return; @@ -332,9 +330,8 @@ static void cmd_wifi_ap(int argc, char **argv) if(wifi_start_ap(argv[1], RTW_SECURITY_WPA2_AES_PSK, argv[3], - strlen((const char *)argv[1]), - strlen((const char *)argv[3]), - channel + channel, + 0 ) != RTW_SUCCESS) { printf("ERROR: Operation failed!\n"); return; @@ -344,9 +341,8 @@ static void cmd_wifi_ap(int argc, char **argv) if(wifi_start_ap(argv[1], RTW_SECURITY_OPEN, NULL, - strlen((const char *)argv[1]), - 0, - channel + channel, + 0 ) != RTW_SUCCESS) { printf("ERROR: Operation failed!\n"); return; @@ -443,11 +439,12 @@ static void cmd_wifi_connect(int argc, char **argv) semaphore = NULL; } - ret = wifi_connect(ssid, - security_type, - password, - ssid_len, - password_len, + ret = wifi_connect( + NULL, + 0, + ssid, + security_type, + password, key_id, semaphore); @@ -480,7 +477,6 @@ static void cmd_wifi_connect_bssid(int argc, char **argv) char *ssid = NULL; rtw_security_t security_type; char *password; - int bssid_len; int ssid_len = 0; int password_len; int key_id; @@ -525,21 +521,18 @@ static void cmd_wifi_connect_bssid(int argc, char **argv) if(argc == 3 + index){ security_type = RTW_SECURITY_OPEN; password = NULL; - bssid_len = ETH_ALEN; password_len = 0; key_id = 0; semaphore = NULL; }else if(argc ==4 + index){ security_type = RTW_SECURITY_WPA2_AES_PSK; password = argv[3 + index]; - bssid_len = ETH_ALEN; password_len = strlen((const char *)argv[3 + index]); key_id = 0; semaphore = NULL; }else{ security_type = RTW_SECURITY_WEP_PSK; password = argv[3 + index]; - bssid_len = ETH_ALEN; password_len = strlen((const char *)argv[3 + index]); key_id = atoi(argv[4 + index]); if(( password_len != 5) && (password_len != 13)) { @@ -553,13 +546,12 @@ static void cmd_wifi_connect_bssid(int argc, char **argv) semaphore = NULL; } - ret = wifi_connect_bssid(bssid, + ret = wifi_connect( + bssid, + 1, ssid, - security_type, - password, - bssid_len, - ssid_len, - password_len, + security_type, + password, key_id, semaphore); @@ -578,7 +570,7 @@ static void cmd_wifi_connect_bssid(int argc, char **argv) printf("Got IP after %dms.\n", (tick3-tick1)); } -static void cmd_wifi_disconnect(int argc, char **argv) +void cmd_wifi_disconnect(int argc, char **argv) { int timeout = 20; char essid[33]; @@ -714,14 +706,14 @@ static void cmd_wifi_info(int argc, char **argv) #endif } -static void cmd_wifi_on(int argc, char **argv) +void cmd_wifi_on(int argc, char **argv) { if(wifi_on(RTW_MODE_STA)<0){ printf("ERROR: Wifi on failed!\n"); } } -static void cmd_wifi_off(int argc, char **argv) +void cmd_wifi_off(int argc, char **argv) { #if CONFIG_WEBSERVER stop_web_server(); @@ -1059,7 +1051,7 @@ static const cmd_entry cmd_table[] = { {"wifi_wps", cmd_wps}, #endif #ifdef CONFIG_WPS_AP -//pvvx {"wifi_ap_wps", cmd_ap_wps}, + {"wifi_ap_wps", cmd_ap_wps}, #endif #if CONFIG_ENABLE_P2P {"wifi_p2p_start", cmd_wifi_p2p_start}, diff --git a/RTL00_SDKV35a/component/common/application/jd_joinlink/example_joinlink.c b/RTL00_SDKV35a/component/common/application/jd_joinlink/example_joinlink.c index eadcc1e..669095c 100644 --- a/RTL00_SDKV35a/component/common/application/jd_joinlink/example_joinlink.c +++ b/RTL00_SDKV35a/component/common/application/jd_joinlink/example_joinlink.c @@ -333,10 +333,14 @@ int joinlink_finish(unsigned char security_type) //printf("ap_bssid: 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n", ap_bssid[0],ap_bssid[1],ap_bssid[2],ap_bssid[3],ap_bssid[4],ap_bssid[5]); - ret = wifi_connect((unsigned char *)result.ssid, security_mode, - (unsigned char *)result.pwd, result.ssid_length, - result.pwd_length, - 0,NULL); + ret = wifi_connect( + NULL, + 0, + (unsigned char *)result.ssid, + security_mode, + (unsigned char *)result.pwd, + 0, + NULL); if(ret == RTW_SUCCESS){ printf("Connect ok!\n"); diff --git a/RTL00_SDKV35a/component/common/application/uart_adapter/uart_adapter.c b/RTL00_SDKV35a/component/common/application/uart_adapter/uart_adapter.c index 1e39f30..db44023 100644 --- a/RTL00_SDKV35a/component/common/application/uart_adapter/uart_adapter.c +++ b/RTL00_SDKV35a/component/common/application/uart_adapter/uart_adapter.c @@ -1694,11 +1694,12 @@ int uartadapter_connect_wifi(rtw_network_info_t *p_wifi, uint32_t channel, uint8 return ret; } - ret = wifi_connect((char*)p_wifi->ssid.val, + ret = wifi_connect( + NULL, + 0, + (char*)p_wifi->ssid.val, p_wifi->security_type, (char*)p_wifi->password, - p_wifi->ssid.len, - p_wifi->password_len, p_wifi->key_id, NULL); 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 722cef1..dd81f93 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 @@ -108,7 +108,7 @@ SD_RESULT SD_GetCapacity(uint32_t *sector_count) { //----- SD_ReadBlocks SD_RESULT SD_ReadBlocks(u32 sector, u8 *data, u32 count) { - int rd_count = 0; + int rd_count; unsigned char * buf; if ((u32) data & 3) { @@ -144,7 +144,7 @@ SD_RESULT SD_ReadBlocks(u32 sector, u8 *data, u32 count) { //----- SD_WriteBlocks SD_RESULT SD_WriteBlocks(u32 sector, const u8 *data, u32 count) { - int wr_count = 0; + int wr_count; unsigned char * buf; if ((u32) data & 3) { diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/drv_types.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/drv_types.h index f2dc7c1..49bedcc 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/drv_types.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/drv_types.h @@ -612,20 +612,20 @@ struct _ADAPTER{ u16 interface_type;//USB,SDIO,SPI,PCI u32 work_mode; //STA, AP, STA+AP, PROMISC, P2P - struct dvobj_priv *dvobj; //+8 - struct mlme_priv mlmepriv; //+12 [1244] - struct mlme_ext_priv mlmeextpriv; //+1256 [912] - struct cmd_priv cmdpriv; //+2168 + struct dvobj_priv *dvobj; + struct mlme_priv mlmepriv; + struct mlme_ext_priv mlmeextpriv; + struct cmd_priv cmdpriv; struct evt_priv evtpriv; //struct io_queue *pio_queue; struct io_priv iopriv; - struct xmit_priv xmitpriv; //+2248 - struct recv_priv recvpriv; //+2752 - struct sta_priv stapriv; //+3024 [164] + struct xmit_priv xmitpriv; + struct recv_priv recvpriv; + struct sta_priv stapriv; struct security_priv securitypriv; - struct registry_priv registrypriv; // registrypriv.power_percentage_idx +4929 - struct pwrctrl_priv pwrctrlpriv; // pwrctrlpriv.bInternalAutoSuspend //+5061 - struct eeprom_priv eeprompriv; //+5128? + struct registry_priv registrypriv; + struct pwrctrl_priv pwrctrlpriv; + struct eeprom_priv eeprompriv; //TODO // struct led_priv ledpriv; @@ -666,20 +666,20 @@ struct _ADAPTER{ struct wifi_display_info wfd_info; #endif //CONFIG_WFD - PVOID HalData; //+5656 - u32 hal_data_sz; //+5660 - struct hal_ops HalFunc; //+5664 + PVOID HalData; + u32 hal_data_sz; + struct hal_ops HalFunc; - s32 bDriverStopped; //+5880 - s32 bSurpriseRemoved; //+5884 - s32 bCardDisableWOHSM; //+5888 - u8 RxStop; //Used to stop rx thread as early as possible //+5892 + s32 bDriverStopped; + s32 bSurpriseRemoved; + s32 bCardDisableWOHSM; + u8 RxStop; //Used to stop rx thread as early as possible u32 IsrContent; u32 ImrContent; u8 EepromAddressSize; - u8 hw_init_completed; //+5905 + u8 hw_init_completed; u8 bDriverIsGoingToUnload; u8 init_adpt_in_progress; u8 bMpDriver; @@ -692,9 +692,9 @@ struct _ADAPTER{ _thread_hdl_ evtThread; #endif #if defined(CONFIG_ISR_THREAD_MODE_POLLING) || defined(CONFIG_ISR_THREAD_MODE_INTERRUPT) - struct task_struct isrThread; //+5888? + struct task_struct isrThread; #endif - struct task_struct cmdThread; //+5920 + struct task_struct cmdThread; #ifdef CONFIG_XMIT_THREAD_MODE struct task_struct xmitThread; #endif @@ -702,13 +702,13 @@ struct _ADAPTER{ struct task_struct recvThread; #endif #ifdef CONFIG_RECV_TASKLET_THREAD - struct task_struct recvtasklet_thread; //+5952 + struct task_struct recvtasklet_thread; #endif #ifdef CONFIG_XMIT_TASKLET_THREAD #ifdef PLATFORM_LINUX struct tasklet_struct xmit_tasklet; #else - struct task_struct xmittasklet_thread; //+5984 + struct task_struct xmittasklet_thread; #endif #endif #ifdef CONFIG_SDIO_XMIT_THREAD @@ -721,8 +721,8 @@ struct _ADAPTER{ void (*dvobj_deinit)(struct dvobj_priv *dvobj); #endif - void (*intf_start)(_adapter * adapter); //+6008 - void (*intf_stop)(_adapter * adapter); //+6012 + void (*intf_start)(_adapter * adapter); + void (*intf_stop)(_adapter * adapter); #ifdef PLATFORM_WINDOWS _nic_hdl hndis_adapter;//hNdisAdapter(NDISMiniportAdapterHandle); @@ -741,9 +741,9 @@ struct _ADAPTER{ #endif //#ifdef PLATFORM_ECOS #if defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) - _nic_hdl pnetdev; //+6016 - int bup; //+6020 - struct net_device_stats stats; //+6024 + _nic_hdl pnetdev; + int bup; + struct net_device_stats stats; #endif //#ifdef PLATFORM_FREERTOS #ifdef PLATFORM_LINUX @@ -773,7 +773,7 @@ struct _ADAPTER{ int bup; _lock glock; #endif //PLATFORM_FREEBSD - u8 net_closed; //+6052 + u8 net_closed; u8 bFWReady; //u8 bBTFWReady; @@ -785,20 +785,20 @@ struct _ADAPTER{ u8 bDisableAutosuspend; #endif - _adapter *pbuddy_adapter; //+6056 + _adapter *pbuddy_adapter; - _mutex *hw_init_mutex; //+6060 + _mutex *hw_init_mutex; #if defined(CONFIG_CONCURRENT_MODE) - u8 isprimary; //is primary adapter or not //+6064 - u8 adapter_type; //+6065 - u8 iface_type; //interface port type //+6056 + u8 isprimary; //is primary adapter or not + u8 adapter_type; + u8 iface_type; //interface port type //for global synchronization - _mutex *ph2c_fwcmd_mutex; //+6068 - _mutex *psetch_mutex; //+6072 - _mutex *psetbw_mutex; //+6076 + _mutex *ph2c_fwcmd_mutex; + _mutex *psetch_mutex; + _mutex *psetbw_mutex; - struct co_data_priv *pcodatapriv;//data buffer shared among interfaces //+6080 + struct co_data_priv *pcodatapriv;//data buffer shared among interfaces #endif #ifdef CONFIG_BR_EXT @@ -827,7 +827,7 @@ struct _ADAPTER{ PLOOPBACKDATA ploopback; #endif - u8 fix_rate; //+6084 + u8 fix_rate; #ifdef CONFIG_CAC_TEST unsigned char in_cta_test; #endif @@ -837,7 +837,7 @@ struct _ADAPTER{ u8 debug_level; #endif -}; // [6088] (!) +}; #define adapter_to_dvobj(adapter) (adapter->dvobj) #define adapter_to_pwrctl(adapter) (&adapter->pwrctrlpriv) diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/hal_intf.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/hal_intf.h index f9ae749..8457298 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/hal_intf.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/hal_intf.h @@ -234,7 +234,7 @@ struct hal_ops { void (*disable_interrupt)(_adapter *padapter); s32 (*interrupt_handler)(_adapter *padapter); -// void (*clear_interrupt)(_adapter *padapter); // None SDK3.5a + void (*clear_interrupt)(_adapter *padapter); #ifdef CONFIG_WOWLAN void (*disable_interrupt_but_cpwm2)(_adapter *padapter); diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/rtw_cmd.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/rtw_cmd.h index 45baff9..79b6ce1 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/rtw_cmd.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/rtw_cmd.h @@ -925,11 +925,11 @@ Result: #define H2C_RSP_OFFSET 512 -#define H2C_SUCCESS 0x00 +#define H2C_SUCCESS 0x00 #define H2C_SUCCESS_RSP 0x01 #define H2C_DUPLICATED 0x02 -#define H2C_DROPPED 0x03 -#define H2C_PARAMETERS_ERROR 0x04 +#define H2C_DROPPED 0x03 +#define H2C_PARAMETERS_ERROR 0x04 #define H2C_REJECTED 0x05 #define H2C_CMD_OVERFLOW 0x06 #define H2C_RESERVED 0x07 diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/rtw_ioctl_set.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/rtw_ioctl_set.h index 1d21ff7..8e247e3 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/rtw_ioctl_set.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/rtw_ioctl_set.h @@ -68,7 +68,7 @@ u8 rtw_validate_ssid(NDIS_802_11_SSID *ssid); u16 rtw_get_cur_max_rate(_adapter *adapter); //int rtw_set_scan_mode(_adapter *adapter, RT_SCAN_TYPE scan_mode); int rtw_set_channel_plan(_adapter *adapter, u8 channel_plan); -//int rtw_set_country(_adapter *adapter, const char *country_code); +int rtw_set_country(_adapter *adapter, const char *country_code); //int rtw_set_band(_adapter *adapter, enum _BAND band); #endif diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/rtw_mlme_ext.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/rtw_mlme_ext.h index 41733c6..b504f25 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/rtw_mlme_ext.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/rtw_mlme_ext.h @@ -481,13 +481,13 @@ typedef struct _RT_CHANNEL_INFO extern int rtw_is_channel_set_contains_channel(RT_CHANNEL_INFO *channel_set, const u32 channel_num, int *pchannel_idx); #ifdef CONFIG_CUSTOM_IE -#ifndef __CUS_IE_ -#define __CUS_IE_ -typedef struct __cus_ie +#ifndef _CUS_IE_ +#define _CUS_IE_ +typedef struct _cus_ie { u8 *ie; u8 type; -} rtw_custom_ie_t, *p_rtw_custom_ie_t; +}rtw_custom_ie_t, *p_rtw_custom_ie_t; #endif /* _CUS_IE_ */ #endif diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_constants.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_constants.h index 859fb9d..2ddf1c4 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_constants.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_constants.h @@ -491,7 +491,7 @@ typedef enum { RTW_TX_PWR_PERCENTAGE_75 = 1, /* 75% */ RTW_TX_PWR_PERCENTAGE_50 = 2, /* 50% */ RTW_TX_PWR_PERCENTAGE_25 = 3, /* 25% */ - RTW_TX_PWR_PERCENTAGE_12_5 = 4, /* 12.5% */ + RTW_TX_PWR_PERCENTAGE_12_5 = 4 /* 12.5% */ }rtw_tx_pwr_percentage_t; /** diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_lib.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_lib.h index c2d2856..76c9364 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_lib.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_lib.h @@ -7,13 +7,7 @@ #include "osdep_service.h" #include "freertos/wrapper.h" -//#include "wlan_bssdef.h" -//#include "wifi_simple_config_parser.h" -//#include "rtw_rf.h" #include "rtl_bios_data.h" -#include "drv_types.h" -#include "wlan/realtek/src/hal/hal_data.h" -//#include "phydm.h" #define _atr_aligned2_ __attribute__((aligned(2))) #define _atr_aligned4_ __attribute__((aligned(4))) @@ -60,16 +54,16 @@ typedef uint8_t BOOLEAN; typedef uint8_t u1Byte; typedef uint16_t u2Byte; -//typedef uint32_t u4Byte; +typedef uint32_t u4Byte; typedef uint64_t u8Byte; typedef uint64_t __attribute__((aligned(4))) _u8Byte; -//typedef sint8_t s1Byte; +typedef sint8_t s1Byte; typedef sint16_t s2Byte; -//typedef sint32_t s4Byte; -//typedef sint8_t *ps1Byte; +typedef sint32_t s4Byte; +typedef sint8_t *ps1Byte; typedef uint8_t *pu1Byte; typedef uint16_t *pu2Byte; -//typedef uint32_t *pu4Byte; +typedef uint32_t *pu4Byte; typedef uint32_t sizetype; typedef struct _ADAPTER _adapter; @@ -81,7 +75,6 @@ typedef void *_mutex; typedef int (*init_done_ptr)(void); -/* rtw_efuse.h enum _EFUSE_DEF_TYPE // : sint32_t { TYPE_EFUSE_MAX_SECTION = 0x0, @@ -97,9 +90,7 @@ enum _IFACE_TYPE //: sint32_t { IFACE_PORT0 = 0x0, IFACE_PORT1 = 0x1, MAX_IFACE_PORT = 0x2, }; -*/ -/* rtl8195a_pmu_task.h enum _FW_ERR0_STATUS_ //: sint32_t { FES0_H2C_CMDID = 0x1, @@ -363,7 +354,7 @@ struct atomic_t { _lock lock; }; */ -/* osdep_intf.h + struct iw_request_info { uint16_t cmd; uint16_t flags; @@ -371,9 +362,7 @@ struct iw_request_info { typedef int (*iw_handler)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *); -*/ -/* wlan_bssdef.h struct _NDIS_802_11_SSID { uint32_t SsidLength; uint8_t Ssid[36]; @@ -466,7 +455,6 @@ struct wlan_network { WLAN_BSSID_EX network; WLAN_BCN_INFO BcnInfo; }; -*/ /* osdep_service.h typedef void *_timerHandle; @@ -479,13 +467,12 @@ struct wlan_network { }; typedef struct timer_list _timer; -*/ -/* rtw_qos.h + */ + struct qos_priv { uint32_t qos_option; }; - */ -/* wifi.h + struct __attribute__((packed)) _atr_aligned2_ rtw_ieee80211_ht_cap { uint16_t cap_info; uint8_t ampdu_params_info; @@ -494,9 +481,7 @@ struct __attribute__((packed)) _atr_aligned2_ rtw_ieee80211_ht_cap { uint32_t tx_BF_cap_info; uint8_t antenna_selection_info; }; -*/ -/* rtw_ht.h struct ht_priv { uint32_t ht_option; uint32_t ampdu_enable; @@ -508,8 +493,7 @@ struct ht_priv { uint8_t stbc_cap; struct rtw_ieee80211_ht_cap ht_cap; }; -*/ -/* rtw_mlme.h + struct _atr_aligned4_ _RT_LINK_DETECT_T { uint32_t NumTxOkInPeriod; uint32_t NumRxOkInPeriod; @@ -522,6 +506,7 @@ struct _atr_aligned4_ _RT_LINK_DETECT_T { BOOLEAN bHigherBusyTxTraffic; }; typedef struct _RT_LINK_DETECT_T RT_LINK_DETECT_T; + enum _RT_SCAN_TYPE //: sint32_t { SCAN_PASSIVE = 0x0, SCAN_ACTIVE = 0x1, SCAN_MIX = 0x2 @@ -584,8 +569,7 @@ struct mlme_priv { uint8_t scanning_via_buddy_intf; struct recv_frame *p_copy_recv_frame; }; -*/ -/* rtw_mlme_ext.h + struct _atr_aligned4_ _RT_CHANNEL_INFO { uint8_t ChannelNum; RT_SCAN_TYPE ScanType; // uint8_t ScanType; // byte/dword? @@ -600,8 +584,7 @@ struct ss_res { int scan_mode; NDIS_802_11_SSID ssid[1]; }; -*/ -/* wifi.h + struct __attribute__((packed)) __attribute__((aligned(1))) ADDBA_request { uint8_t dialog_token; uint16_t BA_para_set; @@ -640,8 +623,7 @@ struct HT_info_element { uint8_t infos[5]; uint8_t MCS_rate[16]; }; -*/ -/* rtw_mlme_ext.h + struct FW_Sta_Info { struct sta_info *psta; uint32_t status; @@ -690,17 +672,16 @@ struct mlme_ext_info { struct HT_info_element HT_info; struct FW_Sta_Info FW_sta_info[5]; }; -*/ -/* + #ifndef _CUS_IE_ #define _CUS_IE_ typedef struct _cus_ie{ __u8 *ie; __u8 type; } cus_ie, *p_cus_ie; -#endif */ +#endif /* _CUS_IE_ */ // typedef struct _cus_ie *p_cus_ie; -/* rtw_mlme_ext.h + struct mlme_ext_priv { //__attribute__((packed))? _adapter *padapter; //+0 padapter+1256 [912] uint8_t mlmeext_init; @@ -744,9 +725,7 @@ struct mlme_ext_priv { //__attribute__((packed))? uint8_t bChDeauthDisabled; uint8_t bConcurrentFlushingSTA; }; -*/ -/* rtw_cmd.h struct cmd_priv { _queue cmd_queue; uint8_t cmdthd_running; @@ -759,27 +738,6 @@ struct evt_priv { uint8_t *evt_allocated_buf; uint32_t evt_done_cnt; }; -*/ -/* drv_types.h -struct dvobj_priv -{ - void *if1; - void *if2; - void *padapters[2]; - uint8_t iface_nums; - uint8_t RtOutPipe[3]; - uint8_t Queue2Pipe[8]; - uint8_t irq_alloc; - uint8_t irq_enabled; - _lock irq_th_lock; -}; -*/ -/* trw_io.h - -struct fifo_more_data { - uint32_t more_data; - uint32_t len; -}; struct _io_ops { int (*init_io_priv)(struct dvobj_priv *); @@ -798,8 +756,7 @@ struct _io_ops { struct io_priv { struct _io_ops io_ops; }; -*/ -/* rtw_xmit.h + struct rtw_tx_ring { struct tx_buf_desc *desc; dma_addr_t dma; @@ -845,8 +802,7 @@ struct _atr_aligned8_ xmit_priv { uint32_t free_xmit_extbuf_cnt; uint16_t nqos_ssn; }; -*/ -/* trw_recv.h + struct rtw_rx_ring { struct recv_buf_stat *desc; dma_addr_t dma; @@ -909,8 +865,7 @@ struct _atr_aligned8_ recv_priv { uint16_t promisc_bk_rxfltmap2; uint8_t promisc_mgntframe_enabled; }; -*/ -/* sta_info.h + struct _atr_aligned4_ sta_priv { uint8_t *pallocated_stainfo_buf; uint32_t allocated_stainfo_size; @@ -934,13 +889,14 @@ struct _atr_aligned4_ sta_priv { uint16_t tim_bitmap; uint16_t max_num_sta; }; -*/ -/* trw_security.h + union Keytype { uint8_t skey[16]; uint32_t lkey[4]; }; + + union pn48 { u8Byte val; struct { @@ -954,9 +910,7 @@ union pn48 { uint8_t TSC7; }_byte_; }; -*/ -/* wlan_bssdef.h struct _NDIS_802_11_WEP { uint32_t Length; uint32_t KeyIndex; @@ -964,9 +918,7 @@ struct _NDIS_802_11_WEP { uint8_t KeyMaterial[16]; }; typedef struct _NDIS_802_11_WEP NDIS_802_11_WEP; -*/ -/* rtw_psk.h struct $D75518714447A990003EBC933C23F70E { uint32_t HighPart; uint32_t LowPart; @@ -1027,9 +979,7 @@ struct _wpa_global_info { typedef struct _wpa_global_info WPA_GLOBAL_INFO; typedef struct _wpa_sta_info WPA_STA_INFO; -*/ -/* rtw_security.h struct _atr_aligned4_ security_priv { uint32_t dot11AuthAlgrthm; uint32_t dot11PrivacyAlgrthm; @@ -1073,8 +1023,7 @@ struct _atr_aligned4_ security_priv { uint8_t wpa_passphrase[65]; uint8_t wps_phase; }; -*/ -/* derv_types.h + struct _atr_aligned4_ registry_priv { uint8_t chip_version; uint8_t hci; @@ -1118,8 +1067,7 @@ struct _atr_aligned4_ registry_priv { uint8_t adaptivity_dc_backoff; int8_t adaptivity_th_l2h_ini; }; -*/ -/* trw_powerctrl.h + typedef void *_sema; typedef _sema _pwrlock; @@ -1190,8 +1138,7 @@ struct _atr_aligned4_ pwrctrl_priv { uint8_t tdma_rfon_period_len_3; uint8_t lps_dtim; }; -*/ -/* rtw_eeprom.h + struct _atr_aligned2_ eeprom_priv { // __attribute__((packed))!? uint8_t bautoload_fail_flag; uint8_t mac_addr[6]; @@ -1201,8 +1148,7 @@ struct _atr_aligned2_ eeprom_priv { // __attribute__((packed))!? uint8_t EEPROMRFGainOffset; uint8_t EEPROMRFGainVal; }; -*/ -/* rtw_rf.h + enum _CHANNEL_WIDTH // : sint32_t { CHANNEL_WIDTH_20 = 0x0, @@ -1213,9 +1159,7 @@ enum _CHANNEL_WIDTH // : sint32_t CHANNEL_WIDTH_MAX = 0x5, }; typedef enum _CHANNEL_WIDTH CHANNEL_WIDTH; -*/ -/* hal_intf.h enum _HAL_DEF_VARIABLE // : sint32_t { HAL_DEF_UNDERCORATEDSMOOTHEDPWDB = 0x0, @@ -1252,11 +1196,11 @@ enum _HAL_ODM_VARIABLE // : sint32_t HAL_ODM_REGULATION = 0x4, }; typedef enum _HAL_ODM_VARIABLE HAL_ODM_VARIABLE; -*/ -/* freertos_service.h + typedef void *_thread_hdl_; -*/ -/* osdep_service.h + +/* + // osdep_service.h struct task_struct { const char *task_name; @@ -1282,7 +1226,19 @@ typedef struct net_device *_nic_hdl; uint32_t rx_overflow; }; */ -/* rtw_recv.h + +struct dvobj_priv { + void *if1; + void *if2; + void *padapters[2]; + uint8_t iface_nums; + uint8_t RtOutPipe[3]; + uint8_t Queue2Pipe[8]; + uint8_t irq_alloc; + uint8_t irq_enabled; + _lock irq_th_lock; +}; + struct phy_info { uint8_t RxPWDBAll; uint8_t SignalQuality; @@ -1358,7 +1314,7 @@ union { uint32_t mem[32]; }; }; - +/* union $AB04817EA6EB89125E28056B7464A4D7 { _list list; struct recv_frame_hdr hdr; @@ -1369,7 +1325,8 @@ union recv_frame { union $AB04817EA6EB89125E28056B7464A4D7 u; }; */ -/* skbuff.h +/* + // skbuff.h struct sk_buff { struct sk_buff *next; @@ -1390,7 +1347,7 @@ union recv_frame { uint32_t qlen; }; */ -/* rtw_xmit.h + struct tx_servq { _list tx_pending; _queue sta_pending; @@ -1409,12 +1366,6 @@ struct sta_xmit_priv { _list apsd; uint16_t txseq_tid[16]; }; -*/ -/* rtw_recv.h -struct recv_buf_stat { - uint32_t rxdw0; - uint32_t rxdw1; -}; struct stainfo_rxcache { uint16_t tid_rxseq[16]; @@ -1426,9 +1377,8 @@ struct sta_recv_priv { _queue defrag_q; struct stainfo_rxcache rxcache; }; -*/ -/* sta_info.h - struct stainfo_stats { + +struct stainfo_stats { u8Byte rx_mgnt_pkts; u8Byte rx_ctrl_pkts; u8Byte rx_data_pkts; @@ -1525,15 +1475,20 @@ struct sta_info { uint8_t RXEVM[4]; uint8_t RXSNR[4]; }; -*/ -/* wifi_conf.h +/* + // wifi_conf.h struct _atr_aligned4_ _cus_ie { uint8_t *ie; uint8_t type; }; */ -/* rtw_xmit.h + +struct fifo_more_data { + uint32_t more_data; + uint32_t len; +}; + struct hw_xmit { _queue *sta_queue; int accnt; @@ -1549,8 +1504,12 @@ struct tx_buf_desc { uint32_t txdw6; uint32_t txdw7; }; -*/ -/* rtw_psk.h + +struct recv_buf_stat { + uint32_t rxdw0; + uint32_t rxdw1; +}; + struct _wpa_sta_info { int state; int gstate; @@ -1577,8 +1536,7 @@ struct _wpa_sta_info { int clientGkeyUpdate; LARGE_INTEGER clientMICReportReplayCounter; }; -*/ -/* rtw_xmit.h + struct pkt_attrib { uint8_t type; uint8_t subtype; @@ -1669,7 +1627,6 @@ struct submit_ctx { uint32_t timeout_ms; int status; }; -*/ /* // wrapper.h struct net_device @@ -1755,15 +1712,12 @@ struct submit_ctx { union iwreq_data u; }; */ -/* drv_types.h struct co_data_priv { uint8_t co_ch; uint8_t co_bw; uint8_t co_ch_offset; uint8_t rsvd; }; -*/ -/* hal_intf.h enum _HARDWARE_TYPE // : sint32_t { @@ -1805,8 +1759,7 @@ enum _HARDWARE_TYPE // : sint32_t HARDWARE_TYPE_RTL8188FS = 0x23, HARDWARE_TYPE_MAX = 0x24, }; -*/ -/* hal_phy.h + struct RF_Shadow_Compare_Map { uint32_t Value; uint8_t Compare; @@ -1815,8 +1768,7 @@ struct RF_Shadow_Compare_Map { uint8_t Driver_Write; }; typedef struct RF_Shadow_Compare_Map RF_SHADOW_T; -*/ -/* rtw_powerctrl.h + enum _PS_BBRegBackup_ // : sint32_t { PSBBREG_RF0 = 0x0, @@ -1825,8 +1777,9 @@ enum _PS_BBRegBackup_ // : sint32_t PSBBREG_AFE0 = 0x3, PSBBREG_TOTALCNT = 0x4, }; -*/ -/* hal_irqn.h + +/* + // hal_irqn.h enum _IRQn_Type_ // : sint32_t { NonMaskableInt_IRQn = 0xFFFFFFF2, @@ -1899,8 +1852,9 @@ enum _PS_BBRegBackup_ // : sint32_t uint32_t Priority; }; typedef struct _IRQ_HANDLE_ IRQ_HANDLE; -*/ -/* hal_soc_ps_monitor.h + */ +/* + // hal_soc_ps_monitor.h struct _power_state_ { uint8_t FuncIdx; @@ -1922,9 +1876,9 @@ enum _PS_BBRegBackup_ // : sint32_t BOOL SleepFlag; }; typedef struct _power_mgn_ Power_Mgn; -*/ - /* hal_gpio.h + /* + // hal_gpio.h enum $E1AD70AB12E7AA6E98B8D89D9B965EB5 //: sint32_t { _PORT_A = 0x0, @@ -1959,7 +1913,7 @@ enum _PS_BBRegBackup_ // : sint32_t }; typedef struct _HAL_GPIO_ADAPTER_ *PHAL_GPIO_ADAPTER; */ -/* hal_intf.h + struct hal_ops { uint32_t (*hal_power_on)(_adapter *); uint32_t (*hal_init)(_adapter *); @@ -2022,8 +1976,66 @@ struct hal_ops { uint8_t); uint8_t (*hal_get_tx_buff_rsvd_page_num)(_adapter *, bool); }; -*/ -/* HalVerDef.h + +struct _atr_aligned4_ _ADAPTER { + uint16_t HardwareType; + uint16_t interface_type; //+2 + uint32_t work_mode; + struct dvobj_priv *dvobj; //+8 + struct mlme_priv mlmepriv; //+12 [1244] + struct mlme_ext_priv mlmeextpriv; //+1256 [912] + struct cmd_priv cmdpriv; //+2168 + struct evt_priv evtpriv; //+ + struct io_priv iopriv; + struct xmit_priv xmitpriv; //+2248 + struct recv_priv recvpriv; //+2752 + struct sta_priv stapriv; //+3024 [164] + struct security_priv securitypriv; + struct registry_priv registrypriv; + struct pwrctrl_priv pwrctrlpriv; // pwrctrlpriv.bInternalAutoSuspend //+5061 + struct eeprom_priv eeprompriv; + PVOID HalData; + uint32_t hal_data_sz; + struct hal_ops HalFunc; + int32_t bDriverStopped; //+5880 + int32_t bSurpriseRemoved; //+5884 + int32_t bCardDisableWOHSM; //+5888 + uint8_t RxStop; //+5892 + uint32_t IsrContent; + uint32_t ImrContent; + uint8_t EepromAddressSize; + uint8_t hw_init_completed; //+5905 + uint8_t bDriverIsGoingToUnload; + uint8_t init_adpt_in_progress; + uint8_t bMpDriver; + uint8_t bForwardingDisabled; + struct task_struct isrThread; //+5888 + struct task_struct cmdThread; //+5920 + struct task_struct recvtasklet_thread; //+5952 + struct task_struct xmittasklet_thread; //+5984 + void (*intf_start)(_adapter *); //+6008 + void (*intf_stop)(_adapter *); //+6012 + _nic_hdl pnetdev; //+6016 + int bup; //+6020 + struct net_device_stats stats; + uint8_t net_closed; //+6052 + uint8_t bFWReady; + uint8_t bLinkInfoDump; + uint8_t bRxRSSIDisplay; + _adapter *pbuddy_adapter; //+6056 + _mutex *hw_init_mutex; //+6060 + uint8_t isprimary; //+6064 + uint8_t adapter_type; //+6065 + uint8_t iface_type; //+6056 + _mutex *ph2c_fwcmd_mutex; //+6068 + _mutex *psetch_mutex; //+6072 + _mutex *psetbw_mutex; //+6076 + struct co_data_priv *pcodatapriv; //+6080 + uint8_t fix_rate; //+6084 +}; // [6088] (!) +typedef struct _ADAPTER *PADAPTER; +// if sizeof(struct _ADAPTER) != 6088 #error "Check aligned struct!" ! + enum tag_HAL_IC_Type_Definition // : sint32_t { CHIP_8192S = 0x0, @@ -2092,8 +2104,7 @@ struct _atr_aligned4_ tag_HAL_VERSION { uint8_t ROMVer; }; typedef struct tag_HAL_VERSION HAL_VERSION; -*/ -/* hal_intf.h + enum _HW_VARIABLES //: sint32_t { HW_VAR_MEDIA_STATUS = 0x0, @@ -2178,15 +2189,13 @@ enum _HW_VARIABLES //: sint32_t HW_VAR_ASIX_IOT = 0x4F, HW_VAR_PROMISC = 0x50, }; -*/ -/* hal_phy.h + enum _BAND_TYPE // : sint32_t { BAND_ON_2_4G = 0x0, BAND_ON_5G = 0x1, BAND_ON_BOTH = 0x2, BANDMAX = 0x3, }; typedef enum _BAND_TYPE BAND_TYPE; -*/ -/* hal_com_phycfg.h + struct _BB_REGISTER_DEFINITION { uint32_t rfintfs; uint32_t rfintfo; @@ -2197,8 +2206,7 @@ struct _BB_REGISTER_DEFINITION { uint32_t rfLSSIReadBackPi; }; typedef struct _BB_REGISTER_DEFINITION BB_REGISTER_DEFINITION_T; -*/ -/* rtw_mlme.h + enum dot11AuthAlgrthmNum //: sint32_t { dot11AuthAlgrthm_Open = 0x0, @@ -2208,8 +2216,7 @@ enum dot11AuthAlgrthmNum //: sint32_t dot11AuthAlgrthm_WAPI = 0x4, dot11AuthAlgrthm_MaxNum = 0x5, }; -*/ -/* rtw_mlme_ext.h + enum _RT_CHANNEL_DOMAIN //: sint32_t { RT_CHANNEL_DOMAIN_FCC = 0x0, @@ -2276,8 +2283,7 @@ enum _RT_CHANNEL_DOMAIN //: sint32_t RT_CHANNEL_DOMAIN_MAX = 0x59, RT_CHANNEL_DOMAIN_REALTEK_DEFINE = 0x7F, }; -*/ -/* freertos_intfs.h + struct _driver_priv { int drv_registered; _mutex hw_init_mutex; @@ -2286,9 +2292,7 @@ struct _driver_priv { _mutex setbw_mutex; }; typedef struct _driver_priv drv_priv; -*/ -/* PhyDM_Adaptivity.h struct _ADAPTIVITY_STATISTICS { s1Byte TH_L2H_ini_mode2; s1Byte TH_EDCCA_HL_diff_mode2; @@ -2305,14 +2309,12 @@ struct _ADAPTIVITY_STATISTICS { u1Byte AdajustIGILevel; }; typedef struct _ADAPTIVITY_STATISTICS ADAPTIVITY_STATISTICS; -*/ -/* phydm_NoiseMonitor.h + struct _ODM_NOISE_MONITOR_ { s1Byte noise[1]; s2Byte noise_all; }; typedef struct _ODM_NOISE_MONITOR_ ODM_NOISE_MONITOR; -*/ /* in rtl_bios_data.h struct _FALSE_ALARM_STATISTICS { u4Byte Cnt_Parity_Fail; @@ -2333,13 +2335,13 @@ struct _FALSE_ALARM_STATISTICS { }; typedef struct _FALSE_ALARM_STATISTICS FALSE_ALARM_STATISTICS; */ -/* phydm.h + enum _BASEBAND_CONFIG_PHY_REG_PG_VALUE_TYPE //: sint32_t { PHY_REG_PG_RELATIVE_VALUE = 0x0, PHY_REG_PG_EXACT_VALUE = 0x1, }; typedef enum _BASEBAND_CONFIG_PHY_REG_PG_VALUE_TYPE PHY_REG_PG_TYPE; -*/ + /* in rtl_bios_data.h struct _atr_aligned4_ _CFO_TRACKING_ { BOOLEAN bATCStatus; @@ -2368,13 +2370,11 @@ struct _atr_aligned8_ _ROM_INFO { }; typedef struct _ROM_INFO ROM_INFO; */ -/* ROM_RTL8195A_PHYDM.h + typedef struct _ROM_INFO *PROM_INFO; -*/ -/* phydm_types.h + typedef struct sta_info *PSTA_INFO_T; -*/ -/* phydm.h + struct _ODM_Phy_Dbg_Info_ { s1Byte RxSNRdB[4]; u4Byte NumQryPhyStatus; @@ -2717,73 +2717,7 @@ struct _atr_aligned8_ ODM_RF_Calibration_Structure { u4Byte DpkThermal[4]; }; typedef struct ODM_RF_Calibration_Structure ODM_RF_CAL_T; -*/ -/* drv_types.h -#include "ieee80211.h" -#include "rtw_cmd.h" -struct _atr_aligned4_ _ADAPTER { - uint16_t HardwareType; - uint16_t interface_type; //+2 - uint32_t work_mode; - struct dvobj_priv *dvobj; //+8 - struct mlme_priv mlmepriv; //+12 [1244] - struct mlme_ext_priv mlmeextpriv; //+1256 [912] - struct cmd_priv cmdpriv; //+2168 - struct evt_priv evtpriv; //+ - struct io_priv iopriv; - struct xmit_priv xmitpriv; //+2248 - struct recv_priv recvpriv; //+2752 - struct sta_priv stapriv; //+3024 [164] - struct security_priv securitypriv; - struct registry_priv registrypriv; - struct pwrctrl_priv pwrctrlpriv; // pwrctrlpriv.bInternalAutoSuspend //+5061 - struct eeprom_priv eeprompriv; - PVOID HalData; - uint32_t hal_data_sz; - struct hal_ops HalFunc; - int32_t bDriverStopped; //+5880 - int32_t bSurpriseRemoved; //+5884 - int32_t bCardDisableWOHSM; //+5888 - uint8_t RxStop; //+5892 - uint32_t IsrContent; - uint32_t ImrContent; - uint8_t EepromAddressSize; - uint8_t hw_init_completed; //+5905 - uint8_t bDriverIsGoingToUnload; - uint8_t init_adpt_in_progress; - uint8_t bMpDriver; - uint8_t bForwardingDisabled; - struct task_struct isrThread; //+5888 - struct task_struct cmdThread; //+5920 - struct task_struct recvtasklet_thread; //+5952 - struct task_struct xmittasklet_thread; //+5984 - void (*intf_start)(_adapter *); //+6008 - void (*intf_stop)(_adapter *); //+6012 - _nic_hdl pnetdev; //+6016 - int bup; //+6020 - struct net_device_stats stats; - uint8_t net_closed; //+6052 - uint8_t bFWReady; - uint8_t bLinkInfoDump; - uint8_t bRxRSSIDisplay; - _adapter *pbuddy_adapter; //+6056 - _mutex *hw_init_mutex; //+6060 - uint8_t isprimary; //+6064 - uint8_t adapter_type; //+6065 - uint8_t iface_type; //+6056 - _mutex *ph2c_fwcmd_mutex; //+6068 - _mutex *psetch_mutex; //+6072 - _mutex *psetbw_mutex; //+6076 - struct co_data_priv *pcodatapriv; //+6080 - uint8_t fix_rate; //+6084 -}; // [6088] (!) -typedef struct _ADAPTER *PADAPTER; -// if sizeof(struct _ADAPTER) != 6088 #error "Check aligned struct!" ! - -*/ - -/* phydm.h struct _atr_aligned8_ DM_Out_Source_Dynamic_Mechanism_Structure { PADAPTER Adapter; BOOLEAN odm_ready; @@ -2953,8 +2887,7 @@ struct _atr_aligned8_ DM_Out_Source_Dynamic_Mechanism_Structure { }; typedef struct DM_Out_Source_Dynamic_Mechanism_Structure DM_ODM_T; typedef struct DM_Out_Source_Dynamic_Mechanism_Structure *PDM_ODM_T; -*/ -/* halphy + enum _PWRTRACK_CONTROL_METHOD //: sint32_t { BBSWING = 0x0, TXAGC = 0x1, MIX_MODE = 0x2, @@ -3006,9 +2939,7 @@ struct _H2CParam_RsvdPage_ { }; typedef struct _H2CParam_RsvdPage_ H2CParam_RsvdPage; typedef struct _H2CParam_RsvdPage_ *PH2CParam_RsvdPage; -*/ -/* wlan_bssdef.h struct _NDIS_802_11_VARIABLE_IEs { uint8_t ElementID; uint8_t Length; @@ -3046,7 +2977,6 @@ enum _NDIS_802_11_WEP_STATUS //: sint32_t Ndis802_11_EncrypteionWAPI = 0x8, }; typedef enum _NDIS_802_11_WEP_STATUS NDIS_802_11_WEP_STATUS; -*/ struct __attribute__((packed)) __attribute__((aligned(1))) rtk_sc { u8 pattern_type; @@ -3093,7 +3023,7 @@ struct pattern_ops { sc_decode_profile_call_back decode_profile; sc_get_tlv_info_call_back get_tlv_info; }; -/* halpower + struct _atr_aligned2_ _WL_PWR_CFG_ { // __attribute__((packed))!? uint16_t offset; uint8_t cut_msk; @@ -3105,21 +3035,17 @@ struct _atr_aligned2_ _WL_PWR_CFG_ { // __attribute__((packed))!? uint8_t value; }; typedef struct _WL_PWR_CFG_ WLAN_PWR_CFG; -*/ -/* rtw_mlme.h struct cmd_hdl { uint32_t parmsize; uint8_t (*h2cfuns)(struct _ADAPTER *, uint8_t *); }; -*/ -/* rtw_cmd.h + struct _cmd_callback { uint32_t cmd_code; void (*callback)(_adapter *, struct cmd_obj *); }; -*/ -/* phydm.h + enum _ODM_Common_Info_Definition //: sint32_t { ODM_CMNINFO_PLATFORM = 0x0, @@ -3225,15 +3151,13 @@ enum _ODM_Support_Ability_Definition // : sint32_t ODM_RF_RX_GAIN_TRACK = 0x2000000, ODM_RF_CALIBRATION = 0x4000000, }; -*/ -/* hal_phy.h + enum _RF_PATH //: sint32_t { RF_PATH_A = 0x0, RF_PATH_B = 0x1, RF_PATH_C = 0x2, RF_PATH_D = 0x3, }; typedef enum _RF_PATH RF_PATH; -*/ -/* rtw_cmd.h + enum _EXTCHNL_OFFSET //: sint32_t { EXTCHNL_OFFSET_NO_EXT = 0x0, @@ -3332,8 +3256,7 @@ enum MGN_RATE //: sint32_t MGN_VHT4SS_MCS9 = 0xC7, MGN_UNKNOWN = 0xC8, }; -*/ -/* rtw_mlme.h rtw_mlme_ext.h + struct _RT_CHANNEL_PLAN_2G { uint8_t Channel[14]; uint8_t Len; @@ -3353,14 +3276,12 @@ struct mlme_handler { uint32_t num; uint32_t (*func)(_adapter *, struct recv_frame *); }; -*/ -/* rtw_event.h + struct fwevent { uint32_t parmsize; void (*event_callback)(_adapter *, uint8_t *); }; -*/ -/* rtw_recv.h + struct recv_buf { _list list; PADAPTER adapter; @@ -3381,8 +3302,7 @@ struct recv_reorder_ctrl { _queue pending_recvframe_queue; _timer reordering_ctrl_timer; }; -*/ -/* phydm.h + enum _ODM_RF_RADIO_PATH // : sint32_t { ODM_RF_PATH_A = 0x0, @@ -3483,8 +3403,7 @@ enum _ODM_FW_Config_Type //: sint32_t CONFIG_FW_BT = 0x7, }; typedef enum _ODM_FW_Config_Type ODM_FW_Config_Type; -*/ -/* hal_com_phycfg.h + enum _RATE_SECTION //: sint32_t { CCK = 0x0, @@ -3499,8 +3418,12 @@ enum _RATE_SECTION //: sint32_t VHT_4SSMCS0_4SSMCS9 = 0x9, }; typedef enum _RATE_SECTION RATE_SECTION; -*/ -/* hal_pg.h + +struct map_mask_s { + uint16_t mask_start; + uint16_t mask_end; +}; + struct _TxPowerInfo24G { uint8_t IndexCCK_Base[1][6]; uint8_t IndexBW40_Base[1][6]; @@ -3509,69 +3432,6 @@ struct _TxPowerInfo24G { }; typedef struct _TxPowerInfo24G TxPowerInfo24G; typedef struct _TxPowerInfo24G *PTxPowerInfo24G; -*/ -/* wifi_constants.h -enum rtw_bss_type_t // __int32 -{ - RTW_BSS_TYPE_INFRASTRUCTURE = 0x0, - RTW_BSS_TYPE_ADHOC = 0x1, - RTW_BSS_TYPE_ANY = 0x2, - RTW_BSS_TYPE_UNKNOWN = 0xFFFFFFFF, -}; - -enum rtw_security_t // __int32 -{ - RTW_SECURITY_OPEN = 0x0, - RTW_SECURITY_WEP_PSK = 0x1, - RTW_SECURITY_WEP_SHARED = 0x8001, - RTW_SECURITY_WPA_TKIP_PSK = 0x200002, - RTW_SECURITY_WPA_AES_PSK = 0x200004, - RTW_SECURITY_WPA2_AES_PSK = 0x400004, - RTW_SECURITY_WPA2_TKIP_PSK = 0x400002, - RTW_SECURITY_WPA2_MIXED_PSK = 0x400006, - RTW_SECURITY_WPA_WPA2_MIXED = 0x600000, - RTW_SECURITY_WPS_OPEN = 0x10000000, - RTW_SECURITY_WPS_SECURE = 0x10000004, - RTW_SECURITY_UNKNOWN = 0xFFFFFFFF, - RTW_SECURITY_FORCE_32_BIT = 0x7FFFFFFF, -}; - -enum rtw_802_11_band_t // __int32 -{ - RTW_802_11_BAND_5GHZ = 0x0, - RTW_802_11_BAND_2_4GHZ = 0x1, -}; - -*/ -/* wifi_structures.h -struct rtw_ssid -{ - unsigned int8_t len; - unsigned int8_t val[33]; -}; - -typedef rtw_ssid rtw_ssid_t; - -struct rtw_mac -{ - unsigned int8_t octet[6]; -}; - -typedef rtw_mac rtw_mac_t; - -struct rtw_scan_result -{ - rtw_ssid_t SSID; - rtw_mac_t BSSID; - sint16_t signal_strength; - enum rtw_bss_type_t bss_type; - enum rtw_security_t security; - enum rtw_wps_type_t wps_type; - unsigned int channel; - enum rtw_802_11_band_t band; -}; - -*/ #endif // _WLAN_LIB_H diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_structures.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_structures.h index fb2d019..06e5a1e 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_structures.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_structures.h @@ -31,7 +31,7 @@ extern "C" { #endif #if defined(__IAR_SYSTEMS_ICC__) -//#pragma pack(1) +#pragma pack(1) #endif /** @@ -86,7 +86,7 @@ typedef struct rtw_network_info { int key_id; }rtw_network_info_t; -#if defined(__IAR_SYSTEMS_ICC__)// || defined(__GNUC__) +#if defined(__IAR_SYSTEMS_ICC__) || defined(__GNUC__) #pragma pack(1) #endif @@ -96,14 +96,14 @@ typedef struct rtw_network_info { typedef struct rtw_scan_result { rtw_ssid_t SSID; /**< Service Set Identification (i.e. Name of Access Point) */ rtw_mac_t BSSID; /**< Basic Service Set Identification (i.e. MAC address of Access Point) */ - signed short signal_strength; /**< Receive Signal Strength Indication in dBm. <-90=Very poor, >-30=Excellent */ + signed short signal_strength; /**< Receive Signal Strength Indication in dBm. <-90=Very poor, >-30=Excellent */ rtw_bss_type_t bss_type; /**< Network type */ rtw_security_t security; /**< Security type */ rtw_wps_type_t wps_type; /**< WPS type */ - unsigned int channel; /**< Radio channel that the AP beacon was received on */ + unsigned int channel; /**< Radio channel that the AP beacon was received on */ rtw_802_11_band_t band; /**< Radio band */ } rtw_scan_result_t; -#if defined(__IAR_SYSTEMS_ICC__) //|| defined(__GNUC__) +#if defined(__IAR_SYSTEMS_ICC__) || defined(__GNUC__) #pragma pack() #endif @@ -117,7 +117,7 @@ typedef struct rtw_scan_handler_result { } rtw_scan_handler_result_t; -#if defined(__IAR_SYSTEMS_ICC__) //|| defined(__GNUC__) +#if defined(__IAR_SYSTEMS_ICC__) || defined(__GNUC__) #pragma pack(1) #endif @@ -125,14 +125,14 @@ typedef struct rtw_scan_handler_result { * @brief The structure is used to store the WIFI setting gotten from WIFI driver. */ typedef struct rtw_wifi_setting { - rtw_mode_t mode; + rtw_mode_t mode; unsigned char ssid[33]; unsigned char channel; rtw_security_t security_type; unsigned char password[65]; unsigned char key_idx; }rtw_wifi_setting_t; -#if defined(__IAR_SYSTEMS_ICC__) //|| defined(__GNUC__) +#if defined(__IAR_SYSTEMS_ICC__) || defined(__GNUC__) #pragma pack() #endif @@ -167,7 +167,7 @@ typedef struct { unsigned int version; /**< version field */ unsigned int length; /**< byte length of data in this record, */ /* starting at version and including IEs */ - rtw_mac_t BSSID; + rtw_mac_t BSSID; unsigned short beacon_period; /**< units are Kusec */ unsigned short capability; /**< Capability information */ unsigned char SSID_len; diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wlan_lib.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wlan_lib.h index caef2ee..0c5936b 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wlan_lib.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wlan_lib.h @@ -14,7 +14,6 @@ extern "C" { #include "wireless.h" #include "wifi_lib.h" -#include "freertos/freertos_xmit.h" // rom_rtw_message.o //-------------------------------- @@ -45,7 +44,7 @@ extern void rtw_indicate_sta_assoc(uint64_t padapter, uint64_t buf); extern void rtw_indicate_sta_disassoc(_adapter *padapter, uint8_t *addr); extern void rtw_indicate_wx_assoc_event(uint64_t padapter, uint64_t a2); extern void rtw_indicate_wx_disassoc_event(uint64_t padapter, uint64_t a2); -// extern int rtw_set_wpa_ie(_adapter *padapter, char *pie, int ielen); +extern int rtw_set_wpa_ie(_adapter *padapter, char *pie, int ielen); extern void strtopsk(uint8_t *des, uint8_t *src, int len); extern int rtw_wx_get_passphrase(struct net_device *dev, struct iw_request_info *a, union iwreq_data *wrqu, char *extra); extern int rtw_wx_set_ap_essid(struct net_device *dev, struct iw_request_info *a, union iwreq_data *wrqu, char *extra); @@ -58,7 +57,7 @@ extern int rtw_set_sta_num(int ap_sta_num); extern int rtw_del_sta(struct net_device *dev, u8 *sta_addr); extern int rtw_ex_get_drv_ability(struct net_device *dev, struct iw_request_info *info, struct iw_point *wrqu, char *extra); extern int rtw_ex_get(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wdata, char *extra); -//extern void *rtw_ioctl(struct net_device *dev, struct iwreq *rq, int cmd); +extern void *rtw_ioctl(struct net_device *dev, struct iwreq *rq, int cmd); // Data declarations extern u8 g_user_ap_sta_num; // = 5u; extern const struct iw_priv_args rtw_private_args[26]; /* = @@ -122,21 +121,21 @@ extern void rtw_reset_securitypriv(_adapter *adapter); extern void rtw_os_indicate_disconnect(_adapter *adapter); extern int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname); extern struct net_device *rtw_init_netdev(_adapter *old_padapter); -//extern int rtw_init_io_priv(_adapter *padapter, void (*set_intf_ops)(struct _io_ops *)); -//extern _adapter *rtw_drv_if2_init(_adapter *primary_padapter, char *name, void (*set_intf_ops)(struct _io_ops *)); +extern int rtw_init_io_priv(_adapter *padapter, void (*set_intf_ops)(struct _io_ops *)); +extern _adapter *rtw_drv_if2_init(_adapter *primary_padapter, char *name, void (*set_intf_ops)(struct _io_ops *)); extern void rtw_drv_if2_stop(_adapter *if2); extern void rtw_drv_if2_free(_adapter *primary_padapter); extern init_done_ptr netdev_open(struct net_device *pnetdev); extern int netdev_if2_open(struct net_device *pnetdev); extern int netdev_if2_open(struct net_device *pnetdev); extern init_done_ptr netdev_open(struct net_device *pnetdev); -//extern struct net_device *rtw_drv_probe(struct net_device *parent_dev, uint32_t mode); +extern struct net_device *rtw_drv_probe(struct net_device *parent_dev, uint32_t mode); extern int rtw_dev_remove(struct net_device *pnetdev); extern void rtw_drv_entry(); extern void rtw_drv_halt(); // Data declarations extern init_done_ptr p_wlan_init_done_callback; -extern uint8_t rtw_power_percentage_idx; // rtw_tx_pwr_percentage_t +extern uint8_t rtw_power_percentage_idx; extern init_done_ptr p_wlan_uart_adapter_callback; extern uint8_t rtw_adaptivity_en; extern uint8_t rtw_adaptivity_mode; @@ -144,16 +143,16 @@ extern int8_t rtw_adaptivity_th_l2h_ini; extern drv_priv drvpriv; //-------------------------------- // hal_com.o -//extern void dump_chip_info(int a1, int a2, int a3, int a4, HAL_VERSION ChipVersion); -//extern int hal_com_get_channel_plan(_adapter *padapter, uint8_t hw_channel_plan, int sw_channel_plan, int def_channel_plan, BOOLEAN AutoLoadFail); -//extern int HAL_IsLegalChannel(_adapter *Adapter, uint32_t Channel); -//extern int MRateToHwRate(uint8_t rate); +extern void dump_chip_info(int a1, int a2, int a3, int a4, HAL_VERSION ChipVersion); +extern int hal_com_get_channel_plan(_adapter *padapter, uint8_t hw_channel_plan, int sw_channel_plan, int def_channel_plan, BOOLEAN AutoLoadFail); +extern int HAL_IsLegalChannel(_adapter *Adapter, uint32_t Channel); +extern int MRateToHwRate(uint8_t rate); extern signed int HwRateToMRate(uint8_t rate); extern void HalSetBrateCfg(_adapter *Adapter, uint8_t *mBratesOS, uint16_t *pBrateCfg); -//extern signed int Hal_MappingOutPipe(_adapter *pAdapter, uint8_t NumOutPipe); +extern signed int Hal_MappingOutPipe(_adapter *pAdapter, uint8_t NumOutPipe); extern void hal_init_macaddr(_adapter *adapter); extern void hw_var_port_switch(_adapter *adapter); -//extern void SetHwReg(PADAPTER padapter, int variable, uint8_t *val); +extern void SetHwReg(PADAPTER padapter, int variable, uint8_t *val); extern signed int eqNByte(uint8_t *str1, uint8_t *str2, uint32_t num); extern signed int GetU1ByteIntegerFromStringInDecimal(char *Str, uint8_t *pInt); extern void switch_power_saving_mode(_adapter *padapter, int benable); @@ -164,22 +163,18 @@ extern u8 CSWTCH_17[19]; //-------------------------------- // HalHWImg8195A_MAC.o // Function declarations -extern void ODM_ReadAndConfig_MP_8195A_MAC_REG(PDM_ODM_T pDM_Odm); -/* -extern signed int ODM_GetVersion_MP_8195A_MAC_REG(void); // return 26; -*/ +extern void ODM_ReadAndConfig_MP_8195A_MAC_REG(PDM_ODM_T pDM_Odm); +extern signed int ODM_GetVersion_MP_8195A_MAC_REG(); // return 26; // Data declarations extern u32 Array_MP_8195A_MAC_REG[194]; //-------------------------------- // HalHWImg8195A_RF.o // Function declarations extern signed int CheckPositive(PDM_ODM_T pDM_Odm, const u4Byte Condition1, const u4Byte Condition2, const u4Byte Condition3, const u4Byte Condition4); -extern void ODM_ReadAndConfig_MP_8195A_RadioA(PDM_ODM_T pDM_Odm); -/* +extern void ODM_ReadAndConfig_MP_8195A_RadioA(PDM_ODM_T pDM_Odm); extern signed int ODM_GetVersion_MP_8195A_RadioA(); extern void ODM_ReadAndConfig_MP_8195A_RADIO_DIFF(PDM_ODM_T pDM_Odm, u4Byte *Array, u4Byte ArrayLen, u4Byte a4); extern signed int ODM_GetVersion_MP_8195A_RADIO_DIFF(); -*/ extern void ODM_ReadAndConfig_MP_8195A_TxPowerTrack_QFN48(PDM_ODM_T pDM_Odm); extern void ODM_ReadAndConfig_MP_8195A_TxPowerTrack_QFN56(PDM_ODM_T pDM_Odm); extern void ODM_ReadAndConfig_MP_8195A_TxPowerTrack_TFBGA96(PDM_ODM_T pDM_Odm); @@ -205,11 +200,8 @@ extern void GetDeltaSwingTable_8195A(PDM_ODM_T pDM_Odm, ps1Byte *TemperatureUP_A extern void GetDeltaSwingXtalTable_8195A(PDM_ODM_T pDM_Odm, ps1Byte *TemperatureUP_Xtal, ps1Byte *TemperatureDOWN_Xtal); extern void ODM_TxXtalTrackSetXtal_8195A(PDM_ODM_T pDM_Odm); extern void setIqkMatrix_8195A(PDM_ODM_T pDM_Odm, int OFDM_index, int RFPath, s4Byte IqkResult_X, s4Byte IqkResult_Y); -extern void Hal_MPT_CCKTxPowerAdjust(PADAPTER Adapter); -/* +extern void Hal_MPT_CCKTxPowerAdjust(PADAPTER Adapter); extern void ODM_TxPwrTrackSetPwr_8195A(PDM_ODM_T pDM_Odm, PWRTRACK_METHOD Method, int RFPath, u8 ChannelMappedIndex); -extern void PHY_IQCalibrate_8195A(PADAPTER pAdapter, int bReCovery, int bRestore); -*/ extern void ConfigureTxpowerTrack_8195A(PTXPWRTRACK_CFG pConfig); extern int phy_PathA_IQK_8195A(PADAPTER pAdapter, BOOLEAN configPathB); extern signed int phy_PathA_RxIQK8195A(PADAPTER pAdapter, BOOLEAN configPathB); @@ -230,6 +222,7 @@ extern signed int phy_SimularityCompare_8195A(PADAPTER pAdapter, s4Byte (*result extern void phy_IQCalibrate_8195A(PADAPTER pAdapter, s4Byte (*result)[8], int t, int is2T); extern void phy_LCCalibrate_8195A(PDM_ODM_T pDM_Odm, BOOLEAN is2T); extern void PHY_LCCalibrate_8195A(PDM_ODM_T pDM_Odm); +extern void PHY_IQCalibrate_8195A(PADAPTER pAdapter, int bReCovery, int bRestore); extern void DoIQK_8195A(PDM_ODM_T pDM_Odm, u8 DeltaThermalIndex, u8 ThermalValue, u8 Threshold); extern void phy_SetRFPathSwitch_8195A(PADAPTER pAdapter, int bMain, BOOLEAN is2T); extern void PHY_SetRFPathSwitch_8195A(PADAPTER pAdapter, int bMain); @@ -284,16 +277,14 @@ extern int max_timer_used_num; //-------------------------------- // rtl8195a_cmd.o // Function declarations -/* extern int32_t FillH2CCmd8195A(PADAPTER padapter, int ElementID, uint64_t CmdLen); +extern void rtl8195a_set_FwRsvdPage_cmd(PADAPTER padapter, PH2CParam_RsvdPage pRsvdPage); extern void rtl8195a_set_FwMediaStatusRpt_cmd(PADAPTER padapter, int mstatus, int macid); extern void rtl8195a_set_FwMacIdConfig_cmd(_adapter *padapter, int mac_id, int raid, int bw, uint8_t sgi, uint32_t mask); extern void rtl8195a_set_FwPwrMode_cmd(PADAPTER padapter, int psmode); extern void rtl8195a_download_rsvd_page(PADAPTER padapter, int mstatus); extern void rtl8195a_set_FwJoinBssRpt_cmd(PADAPTER padapter, int mstatus); extern void rtl8195a_Add_RateATid(PADAPTER pAdapter, uint32_t bitmap, uint8_t *arg_ary, int rssi_level); -*/ -extern void rtl8195a_set_FwRsvdPage_cmd(PADAPTER padapter, PH2CParam_RsvdPage pRsvdPage); extern PADAPTER rtl8195a_set_BcnIgnoreEDCCA_cmd(PADAPTER result, int enable, int a3); //-------------------------------- // rtl8195a_rf6052.o @@ -304,72 +295,59 @@ extern int PHY_RF6052_Config8195A(PADAPTER Adapter); //-------------------------------- // rtw_efuse.o // Function declarations -/* rtw_efuse.h extern void Efuse_PowerSwitch(PADAPTER pAdapter, uint8_t bWrite, uint8_t PwrState); extern int Efuse_GetCurrentSize(PADAPTER pAdapter, uint8_t efuseType, BOOLEAN bPseudoTest); extern int Efuse_CalculateWordCnts(uint8_t word_en); extern void EFUSE_GetEfuseDefinition(PADAPTER pAdapter, int efuseType, uint8_t type, void *pOut, BOOLEAN bPseudoTest); extern int efuse_OneByteRead(PADAPTER pAdapter, int addr, uint8_t *data, int bPseudoTest); +extern int efuse_read8(PADAPTER padapter, int address, uint8_t *value); extern int efuse_OneByteWrite(PADAPTER pAdapter, int addr, int data, int bPseudoTest); +extern int efuse_write8(PADAPTER padapter, int address, uint8_t *value); extern int Efuse_PgPacketWrite(PADAPTER pAdapter, int offset, int word_en, uint8_t *data, BOOLEAN bPseudoTest); +extern void efuse_WordEnableDataRead(uint8_t word_en, uint8_t *sourdata, uint8_t *targetdata); extern int Efuse_WordEnableDataWrite(PADAPTER pAdapter, int efuse_addr, uint8_t word_en, uint8_t *data, BOOLEAN bPseudoTest); extern int rtw_efuse_access(PADAPTER padapter, int bWrite, int start_addr, int cnts, uint8_t *data); extern signed int efuse_GetCurrentSize(PADAPTER padapter, uint16_t *size); extern signed int rtw_efuse_map_read(PADAPTER padapter, int addr, int cnts, uint8_t *data); extern signed int rtw_efuse_map_write(PADAPTER padapter, int addr, int cnts, uint8_t *data); +extern void Efuse_ReadAllMap(PADAPTER pAdapter, int efuseType, uint8_t *Efuse, BOOLEAN bPseudoTest); extern void EFUSE_ShadowRead(PADAPTER pAdapter, int Type, int Offset, uint32_t *Value); extern void EFUSE_ShadowMapUpdate(PADAPTER pAdapter, int efuseType, BOOLEAN bPseudoTest, int a4); -*/ -extern void efuse_WordEnableDataRead(uint8_t word_en, uint8_t *sourdata, uint8_t *targetdata); -extern void Efuse_ReadAllMap(PADAPTER pAdapter, int efuseType, uint8_t *Efuse, BOOLEAN bPseudoTest); -extern int efuse_write8(PADAPTER padapter, int address, uint8_t *value); -extern int efuse_read8(PADAPTER padapter, int address, uint8_t *value); //-------------------------------- // rtw_ieee80211.o // Function declarations -/* ieee80211.h extern void rtw_macaddr_cfg(uint8_t *mac_addr, int a2); -extern void rtw_get_bcn_info(struct wlan_network *pnetwork); -*/ extern int rtw_get_cipher_info(struct wlan_network *pnetwork); +extern void rtw_get_bcn_info(struct wlan_network *pnetwork); //-------------------------------- // rtw_wlan_util.o // Function declarations -/* rtw_mlme_ext.h -extern int get_beacon_interval(WLAN_BSSID_EX *bss, int a2, int a3); -extern int is_client_associated_to_ap(int result); -extern BOOL is_client_associated_to_ibss(_adapter *padapter); -extern void write_cam(_adapter *padapter, uint8_t entry, int ctrl, uint8_t *mac, uint8_t *key); -extern void VCS_update(_adapter *padapter, struct sta_info *psta); -extern int rtw_check_bcn_info(_adapter *Adapter, uint8_t *pframe, uint32_t packet_len); -extern void update_beacon_info(_adapter *padapter, uint8_t *pframe, unsigned int pkt_len, struct sta_info *psta); -extern signed int is_ap_in_tkip(_adapter *padapter); -extern int update_basic_rate(u8 *ptn, unsigned int ptn_sz); -extern int update_supported_rate(u8 *ptn, unsigned int ptn_sz); -extern int update_MCS_rate(struct HT_caps_element *pHT_caps); -extern int get_highest_rate_idx(uint32_t mask); -extern void Update_RA_Entry(_adapter *padapter, struct sta_info *psta); -extern void set_sta_rate(_adapter *padapter, struct sta_info *psta); -extern void update_tx_basic_rate(_adapter *padapter, int wirelessmode); -extern signed int check_assoc_AP(uint8_t *pframe, unsigned int len); - -extern void update_capinfo(PADAPTER Adapter, uint16_t updateCap); -extern void update_wireless_mode(_adapter *padapter, uint32_t a2, int a3); -extern void update_bmc_sta_support_rate(_adapter *padapter, uint32_t mac_id); -extern void Switch_DM_Func(_adapter *padapter, uint32_t mode, int enable); +extern int cckrates_included(u8 *rate, int ratelen); +extern int cckratesonly_included(u8 *rate, int ratelen); +extern signed int networktype_to_raid_ex(PADAPTER padapter, int network_type); extern signed int judge_network_type(_adapter *padapter, u8 *rate, int ratelen); +extern int ratetbl_val_2wifirate(u8 rate); +extern int is_basicrate(_adapter *padapter, int rate); +extern int ratetbl2rateset(_adapter *padapter, u8 *rateset); extern void get_rate_set(_adapter *padapter, u8 *pbssrate, int *bssrate_len, int a4); extern void UpdateBrateTbl(PADAPTER Adapter, uint8_t *mBratesOS); extern void UpdateBrateTblForSoftAP(uint8_t *bssrateset, uint32_t bssratelen); extern void Save_DM_Func_Flag(_adapter *padapter, int a2, int a3); +extern void Restore_DM_Func_Flag(_adapter *padapter); +extern void Switch_DM_Func(_adapter *padapter, uint32_t mode, int enable); extern void Set_MSR(_adapter *padapter, uint8_t type); extern int set_opmode(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype); extern void SelectChannel(_adapter *padapter, int channel); extern void SetBWMode(_adapter *padapter, int bwmode, int channel_offset); extern void set_channel_bwmode(_adapter *padapter, int channel, int channel_offset, int bwmode); -*/ -extern int wifirate2_ratetbl_inx(u8 rate); -extern int support_short_GI(_adapter *padapter, struct HT_caps_element *pHT_caps); +extern uint8_t *get_my_bssid(WLAN_BSSID_EX *pnetwork); +extern int get_beacon_interval(WLAN_BSSID_EX *bss, int a2, int a3); +extern int is_client_associated_to_ap(int result); +extern BOOL is_client_associated_to_ibss(_adapter *padapter); +extern int is_IBSS_empty(_adapter *padapter); +extern unsigned int decide_wait_for_beacon_timeout(unsigned int bcn_interval); +extern void invalidate_cam_all(_adapter *padapter); +extern void write_cam(_adapter *padapter, uint8_t entry, int ctrl, uint8_t *mac, uint8_t *key); extern void clear_cam_entry(_adapter *padapter, uint8_t entry); extern void flush_all_cam_entry(_adapter *padapter); extern int WMM_param_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); @@ -378,19 +356,25 @@ extern void HT_caps_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); extern void HT_info_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); extern void HTOnAssocRsp(_adapter *padapter); extern void ERP_IE_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); -extern int is_IBSS_empty(_adapter *padapter); -extern unsigned int decide_wait_for_beacon_timeout(unsigned int bcn_interval); -extern void invalidate_cam_all(_adapter *padapter); +extern void VCS_update(_adapter *padapter, struct sta_info *psta); +extern int rtw_check_bcn_info(_adapter *Adapter, uint8_t *pframe, uint32_t packet_len); +extern void update_beacon_info(_adapter *padapter, uint8_t *pframe, unsigned int pkt_len, struct sta_info *psta); +extern signed int is_ap_in_tkip(_adapter *padapter); +extern int wifirate2_ratetbl_inx(u8 rate); +extern int update_basic_rate(u8 *ptn, unsigned int ptn_sz); +extern int update_supported_rate(u8 *ptn, unsigned int ptn_sz); +extern int update_MCS_rate(struct HT_caps_element *pHT_caps); +extern int support_short_GI(_adapter *padapter, struct HT_caps_element *pHT_caps); +extern int get_highest_rate_idx(uint32_t mask); +extern void Update_RA_Entry(_adapter *padapter, struct sta_info *psta); extern void enable_rate_adaptive(_adapter *padapter, struct sta_info *psta); +extern void set_sta_rate(_adapter *padapter, struct sta_info *psta); +extern void update_tx_basic_rate(_adapter *padapter, int wirelessmode); +extern signed int check_assoc_AP(uint8_t *pframe, unsigned int len); extern void update_IOT_info(_adapter *padapter); -extern int cckrates_included(u8 *rate, int ratelen); -extern int cckratesonly_included(u8 *rate, int ratelen); -extern signed int networktype_to_raid_ex(PADAPTER padapter, int network_type); -extern int ratetbl_val_2wifirate(u8 rate); -extern int is_basicrate(_adapter *padapter, int rate); -extern int ratetbl2rateset(_adapter *padapter, u8 *rateset); -extern void Restore_DM_Func_Flag(_adapter *padapter); -extern uint8_t *get_my_bssid(WLAN_BSSID_EX *pnetwork); +extern void update_capinfo(PADAPTER Adapter, uint16_t updateCap); +extern void update_wireless_mode(_adapter *padapter, uint32_t a2, int a3); +extern void update_bmc_sta_support_rate(_adapter *padapter, uint32_t mac_id); extern void update_TSF(struct mlme_ext_priv *pmlmeext, uint8_t *pframe, unsigned int len); extern void correct_TSF(_adapter *padapter, struct mlme_ext_priv *pmlmeext); // Data declarations @@ -543,15 +527,14 @@ extern _sema *pExportWlanIrqSemaphore; // freertos_recv.o // Function declarations extern int rtw_os_recv_resource_init(struct recv_priv *precvpriv, _adapter *padapter); +extern int rtw_os_recv_resource_alloc(_adapter *padapter, struct recv_frame *precvframe); extern int rtw_os_recvbuf_resource_alloc(_adapter *padapter, struct recv_buf *precvbuf); extern int rtw_os_recvbuf_resource_free(_adapter *padapter, struct recv_buf *precvbuf); extern int rtw_tkip_countermeasure(_adapter *padapter); -extern void rtw_init_recv_timer(struct recv_reorder_ctrl *preorder_ctrl); -/* -extern int rtw_os_recv_resource_alloc(_adapter *padapter, union recv_frame *precvframe); extern void rtw_handle_tkip_mic_err(_adapter *padapter, int bgroup); -extern int rtw_recv_indicatepkt(_adapter *padapter, union recv_frame *precv_frame); -*/ +extern int rtw_recv_indicatepkt(_adapter *padapter, struct recv_frame *precv_frame); +extern void rtw_init_recv_timer(struct recv_reorder_ctrl *preorder_ctrl); + //-------------------------------- // freertos_skbuff.o // Function declarations @@ -598,8 +581,7 @@ extern int skb_fail_count; extern int max_skb_buf_num; // = 8; //-------------------------------- // freertos_xmit.o -// Function declarations -> freertos_xmit.h -/* +// Function declarations extern signed int rtw_remainder_len(struct pkt_file *pfile); extern void rtw_open_pktfile(_pkt *pktptr, struct pkt_file *pfile); extern unsigned int rtw_pktfile_read(struct pkt_file *pfile, uint8_t *rmem, unsigned int rlen); @@ -610,60 +592,57 @@ extern void rtw_os_xmit_complete(_adapter *padapter, struct xmit_frame *pxframe) extern void rtw_os_xmit_schedule(_adapter *padapter, _irqL a2, int a3); extern int rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev, int a3); extern int rtw_os_can_xmit(struct net_device *dev); -*/ //-------------------------------- // hal_intf.o // Function declarations -/* hal_intf.h extern int32_t rtw_hal_fill_h2c_cmd(int32_t result, uint8_t ElementID, uint32_t CmdLen, uint8_t *pCmdBuffer); extern void rtw_hal_fill_fake_txdesc(_adapter *padapter, uint8_t *pDesc, uint32_t BufferLen, uint8_t IsPsPoll, uint8_t IsBTQosNull, uint8_t bDataFrame); extern _adapter *rtw_hal_get_txbuff_rsvd_page_num(_adapter *result, bool wowlan); +extern void rtw_hal_chip_configure(_adapter *padapter); +extern void rtw_hal_read_chip_info(_adapter *padapter); +extern void rtw_hal_read_chip_version(_adapter *padapter); +extern void rtw_hal_def_value_init(_adapter *padapter); +extern void rtw_hal_free_data(_adapter *padapter); +extern void rtw_hal_dm_init(_adapter *padapter); +extern void rtw_hal_dm_deinit(_adapter *padapter); extern int rtw_hal_init(_adapter *padapter); extern int rtw_hal_deinit(_adapter *padapter); +extern void rtw_hal_set_hwreg(_adapter *padapter, uint8_t variable, uint8_t *val); +extern void rtw_hal_get_hwreg(_adapter *padapter, uint8_t variable, uint8_t *val); extern int rtw_hal_set_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue); extern int rtw_hal_get_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue); +extern void rtw_hal_set_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1, BOOLEAN bSet); +extern void rtw_hal_get_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1, BOOLEAN bSet); +extern void rtw_hal_enable_interrupt(_adapter *padapter); +extern void rtw_hal_disable_interrupt(_adapter *padapter); extern int rtw_hal_inirp_init(_adapter *padapter); extern int rtw_hal_inirp_deinit(_adapter *padapter); +extern void rtw_hal_irp_reset(_adapter *padapter); extern int32_t rtw_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe); extern int32_t rtw_hal_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe); extern int32_t rtw_hal_init_xmit_priv(_adapter *padapter); +extern void rtw_hal_free_xmit_priv(_adapter *padapter); extern int32_t rtw_hal_init_recv_priv(_adapter *padapter); +extern void rtw_hal_free_recv_priv(_adapter *padapter); extern void rtw_hal_update_ra_mask(struct sta_info *psta, uint8_t rssi_level); extern void rtw_hal_add_ra_tid(_adapter *padapter, uint32_t bitmap, uint8_t *arg, uint8_t rssi_level); extern void rtw_hal_update_txdesc(_adapter *padapter, struct xmit_frame *pxmitframe, uint8_t *pbuf); +extern void rtw_hal_clone_data(_adapter *dst_padapter, _adapter *src_padapter); +extern void rtw_hal_start_thread(_adapter *padapter); +extern void rtw_hal_stop_thread(_adapter *padapter); extern int rtw_hal_read_bbreg(_adapter *padapter, uint32_t RegAddr, uint32_t BitMask); extern void rtw_hal_write_bbreg(_adapter *padapter, uint32_t RegAddr, uint32_t BitMask, uint32_t Data); extern int rtw_hal_read_rfreg(_adapter *padapter, uint32_t eRFPath, uint32_t RegAddr, uint32_t BitMask); extern void rtw_hal_write_rfreg(_adapter *padapter, uint32_t eRFPath, uint32_t RegAddr, uint32_t BitMask, uint32_t Data); extern int32_t rtw_hal_interrupt_handler(_adapter *padapter); +extern void rtw_hal_set_bwmode(_adapter *padapter, CHANNEL_WIDTH Bandwidth, uint8_t Offset); +extern void rtw_hal_set_chan(_adapter *padapter, uint8_t channel); extern void rtw_hal_set_chnl_bw(_adapter *padapter, int channel, CHANNEL_WIDTH Bandwidth, uint8_t Offset40, uint8_t Offset80); +extern void rtw_hal_dm_watchdog(_adapter *padapter); extern int32_t rtw_hal_recv_tasklet(_adapter *padapter); -*/ extern int32_t rtw_hal_macid_sleep(PADAPTER padapter, int macid, int a3); extern int32_t rtw_hal_macid_wakeup(PADAPTER padapter, int macid, int a3); -extern void decide_chip_type_by_device_id(_adapter *padapter); -extern void rtw_hal_dm_watchdog(_adapter *padapter); -extern void rtw_hal_set_bwmode(_adapter *padapter, CHANNEL_WIDTH Bandwidth, uint8_t Offset); -extern void rtw_hal_set_chan(_adapter *padapter, uint8_t channel); -extern void rtw_hal_clone_data(_adapter *dst_padapter, _adapter *src_padapter); -extern void rtw_hal_start_thread(_adapter *padapter); -extern void rtw_hal_stop_thread(_adapter *padapter); -extern void rtw_hal_free_recv_priv(_adapter *padapter); -extern void rtw_hal_free_xmit_priv(_adapter *padapter); -extern void rtw_hal_irp_reset(_adapter *padapter); -extern void rtw_hal_set_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1, BOOLEAN bSet); -extern void rtw_hal_get_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1, BOOLEAN bSet); -extern void rtw_hal_enable_interrupt(_adapter *padapter); -extern void rtw_hal_disable_interrupt(_adapter *padapter); -extern void rtw_hal_set_hwreg(_adapter *padapter, uint8_t variable, uint8_t *val); -extern void rtw_hal_get_hwreg(_adapter *padapter, uint8_t variable, uint8_t *val); -extern void rtw_hal_chip_configure(_adapter *padapter); -extern void rtw_hal_read_chip_info(_adapter *padapter); -extern void rtw_hal_read_chip_version(_adapter *padapter); -extern void rtw_hal_def_value_init(_adapter *padapter); -extern void rtw_hal_free_data(_adapter *padapter); -extern void rtw_hal_dm_init(_adapter *padapter); -extern void rtw_hal_dm_deinit(_adapter *padapter); +extern void decide_chip_type_by_device_id(_adapter *padapter); //-------------------------------- // hal_phy.o // Function declarations @@ -696,10 +675,8 @@ extern void TryDone(PDM_ODM_T pDM_Odm, PODM_RA_INFO_T pRaInfo); extern void RateDownStepRAM8195A(PDM_ODM_T pDM_Odm, PODM_RA_INFO_T pRaInfo, int step); extern void RateDecisionRAM8195A(PDM_ODM_T pDM_Odm, PODM_RA_INFO_T pRaInfo); extern void ArfrRefresh(PDM_ODM_T pDM_Odm, PODM_RA_INFO_T pRaInfo); -extern void H2CHDL_Set_MACID_Config(PDM_ODM_T pDM_Odm, u8 *pbuf); -/* +extern void H2CHDL_Set_MACID_Config(PDM_ODM_T pDM_Odm, u8 *pbuf); extern void PHY_DM_RA_SetRSSI_8195A(PDM_ODM_T pDM_Odm, int MacID, u8 Rssi); -*/ // Data declarations extern u8 Noisy_State; extern u8 ARFB_table[9][7]; /* = @@ -740,17 +717,13 @@ extern u8 PER_RATE_DOWN[20]; /* = extern void ConfigureTxpowerTrack(PDM_ODM_T pDM_Odm, PTXPWRTRACK_CFG pConfig); extern void ODM_ClearTxPowerTrackingState(PDM_ODM_T pDM_Odm); extern void ODM_TXPowerTrackingCallback_ThermalMeter(PADAPTER Adapter); -//extern void ODM_ResetIQKResult(PDM_ODM_T pDM_Odm); -/* +extern void ODM_ResetIQKResult(PDM_ODM_T pDM_Odm); extern int ODM_GetRightChnlPlaceforIQK(int chnl); -*/ // Data declarations //-------------------------------- // HalPwrSeqCmd.o // Function declarations -/* extern signed int HalPwrSeqCmdParsing(_adapter *padapter, uint8_t CutVersion, uint8_t FabVersion, int InterfaceType, WLAN_PWR_CFG *PwrSeqCmd); -*/ // Data declarations //-------------------------------- // hci_intfs.o @@ -763,20 +736,17 @@ extern void hci_dvobj_free_irq(struct dvobj_priv *dvobj); //-------------------------------- // rtw_ioctl_set.o // Function declarations -/* +extern int rtw_do_join(_adapter *padapter, _irqL a2); extern int rtw_set_802_11_bssid(_adapter *padapter, uint8_t *bssid); extern int rtw_set_802_11_ssid(_adapter *padapter, NDIS_802_11_SSID *ssid, int a3); extern signed int rtw_set_802_11_infrastructure_mode(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype); extern signed int rtw_set_802_11_bssid_list_scan(_adapter *padapter, NDIS_802_11_SSID *pssid, int ssid_max_num); extern int rtw_set_802_11_authentication_mode(_adapter *padapter, struct NDIS_802_11_AUTHENTICATION_MODE authmode); extern int rtw_set_802_11_add_wep(_adapter *padapter, NDIS_802_11_WEP *wep); -*/ -extern int rtw_do_join(_adapter *padapter, _irqL a2); // Data declarations //-------------------------------- // rtw_io.o // Function declarations -/* extern int rtw_read8(_adapter *adapter, uint32_t addr); extern int rtw_read16(_adapter *adapter, uint32_t addr); extern int rtw_read32(_adapter *adapter, uint32_t addr); @@ -785,35 +755,28 @@ extern int32_t rtw_write16(_adapter *adapter, uint32_t addr, int val); extern int32_t rtw_write32(_adapter *adapter, uint32_t addr, uint32_t val); extern signed int rtw_read_port(_adapter *adapter, uint32_t addr, uint32_t cnt, uint8_t *mem, struct fifo_more_data *more_data); extern signed int rtw_write_port(_adapter *adapter, uint32_t addr, uint32_t cnt, uint8_t *mem); -extern int rtw_get_chip_endian(_adapter padapter); -*/ extern void rtw_set_chip_endian(_adapter *adapter); +extern int rtw_get_chip_endian(_adapter padapter); // Data declarations //-------------------------------- // rtw_cmd.o -// Function declarations -> rtw_cmd.h -/* +// Function declarations extern sint rtw_init_cmd_priv(struct cmd_priv *pcmdpriv); extern sint rtw_init_evt_priv(struct evt_priv *pevtpriv); extern void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv); extern sint rtw_enqueue_cmd(_queue *queue, struct cmd_obj *obj); extern struct cmd_obj *rtw_dequeue_cmd(_queue *queue, _irqL a2, int a3); -extern signed int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv); -*/ extern struct list_head *rtw_observequeue_cmd(_queue *queue); +extern signed int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv); extern int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj); extern void rtw_free_cmd_obj(struct cmd_obj *pcmd); //extern int rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj); extern void rtw_set_channel_plan_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); extern void rtw_survey_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); -extern void rpt_timer_setting_wk_hdl(_adapter *padapter, uint16_t minRptTime, int a3); +extern void rtw_disassoc_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd, int a3); extern void rtw_joinbss_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); extern void rtw_setstaKey_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); extern void rtw_cmd_thread(thread_context context); -extern void dynamic_chk_wk_hdl(_adapter *padapter, uint8_t *pbuf, int sz); -extern void lps_ctrl_wk_hdl(_adapter *padapter, int lps_ctrl_type, int a3); -/* trw_cmd.h -extern void rtw_disassoc_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd, int a3); extern int rtw_createbss_cmd(_adapter *padapter); extern int rtw_joinbss_cmd(_adapter *padapter, struct wlan_network *pnetwork); extern int rtw_disassoc_cmd(_adapter *padapter); @@ -823,14 +786,16 @@ extern int rtw_clearstakey_cmd(_adapter *padapter, uint8_t *psta, uint8_t entry, extern int rtw_addbareq_cmd(_adapter *padapter, int tid, uint8_t *addr); extern int rtw_dynamic_chk_wk_cmd(_adapter *padapter); extern struct cmd_obj *rtw_set_chplan_cmd(_adapter *padapter, int chplan, int enqueue); +extern void dynamic_chk_wk_hdl(_adapter *padapter, uint8_t *pbuf, int sz); +extern void lps_ctrl_wk_hdl(_adapter *padapter, int lps_ctrl_type, int a3); extern int rtw_lps_ctrl_wk_cmd(_adapter *padapter, int lps_ctrl_type, int enqueue); extern struct cmd_obj *rtw_sitesurvey_cmd(_adapter *padapter, NDIS_802_11_SSID *pssid, int ssid_max_num); +extern void rpt_timer_setting_wk_hdl(_adapter *padapter, uint16_t minRptTime, int a3); extern int rtw_rpt_timer_cfg_cmd(_adapter *padapter, int minRptTime); extern int rtw_ps_cmd(_adapter *padapter); extern int rtw_chk_hi_queue_cmd(_adapter *padapter); extern signed int rtw_drvextra_cmd_hdl(_adapter *padapter, u8 *pbuf, int a3); extern int rtw_c2h_wk_cmd(PADAPTER padapter); -*/ // Data declarations extern const struct cmd_hdl wlancmds[63]; extern const struct _cmd_callback rtw_cmd_callback[63]; @@ -844,43 +809,34 @@ extern void rtw_free_netdev(struct net_device *netdev); //-------------------------------- // phydm.o // Function declarations -/* -extern void ODM_CmnInfoHook(PDM_ODM_T pDM_Odm, ODM_CMNINFO_E CmnInfo, PVOID pValue); -extern void ODM_DMInit(PDM_ODM_T pDM_Odm); -extern void ODM_DMWatchdog(PDM_ODM_T pDM_Odm); -*/ extern void ODM_CmnInfoInit(PDM_ODM_T pDM_Odm, ODM_CMNINFO_E CmnInfo, u4Byte Value); +extern void ODM_CmnInfoHook(PDM_ODM_T pDM_Odm, ODM_CMNINFO_E CmnInfo, PVOID pValue); +extern void ODM_CmnInfoPtrArrayHook(PDM_ODM_T pDM_Odm, ODM_CMNINFO_E CmnInfo, int Index, PVOID pValue); extern void ODM_CmnInfoUpdate(PDM_ODM_T pDM_Odm, u4Byte CmnInfo, u8Byte Value); extern void odm_CommonInfoSelfInit(PDM_ODM_T pDM_Odm); +extern void ODM_DMInit(PDM_ODM_T pDM_Odm); extern void odm_CommonInfoSelfUpdate(PDM_ODM_T pDM_Odm); +extern void ODM_DMWatchdog(PDM_ODM_T pDM_Odm); extern void odm_CommonInfoSelfReset(PDM_ODM_T pDM_Odm); -extern void odm_SwAntDetectInit(PDM_ODM_T pDM_Odm); -/* -extern void ODM_CmnInfoPtrArrayHook(PDM_ODM_T pDM_Odm, ODM_CMNINFO_E CmnInfo, int Index, PVOID pValue); extern ADAPTIVITY_STATISTICS *PhyDM_Get_Structure(PDM_ODM_T pDM_Odm, int Structure_Type); -*/ +extern void odm_SwAntDetectInit(PDM_ODM_T pDM_Odm); // Data declarations //-------------------------------- // rtl8195a_phycfg.o // Function declarations -/* extern int PHY_QueryBBReg_8195A_Safe(PADAPTER Adapter, uint32_t RegAddr, uint32_t BitMask); extern void PHY_SetBBReg_8195A_Safe(PADAPTER Adapter, uint32_t RegAddr, uint32_t BitMask, uint32_t Data); +extern int phy_RFSerialRead_8195A(PADAPTER Adapter, RF_PATH eRFPath, uint32_t Offset); extern uint32_t PHY_QueryRFReg_8195A(PADAPTER Adapter, uint32_t eRFPath, uint32_t RegAddr, uint32_t BitMask); extern void PHY_SetRFReg_8195A(PADAPTER Adapter, uint32_t eRFPath, uint32_t RegAddr, uint32_t BitMask, uint32_t Data); extern BOOL PHY_MACConfig8195A(PADAPTER Adapter); -extern int PHY_GetTxPowerIndex_8195A(PADAPTER pAdapter, int RFPath, int Rate, CHANNEL_WIDTH BandWidth, uint8_t Channel); -extern void PHY_SetTxPowerLevel8195A(PADAPTER Adapter, int Channel); -extern void PHY_SetBWMode8195A(PADAPTER Adapter, CHANNEL_WIDTH Bandwidth, int Offset); -extern void PHY_SetSwChnlBWMode8195A(PADAPTER Adapter, uint8_t channel, CHANNEL_WIDTH Bandwidth, int Offset40, uint8_t Offset80); -*/ -extern void PHY_SwChnl8195A(PADAPTER Adapter, uint8_t channel); -extern int phy_RFSerialRead_8195A(PADAPTER Adapter, RF_PATH eRFPath, uint32_t Offset); extern int PHY_BBConfig8195A(PADAPTER Adapter); extern int PHY_ConfigRFWithParaFile_8195A(PADAPTER Adapter, uint8_t *pFileName, RF_PATH eRFPath); extern void phy_PowerIndexCheck8195A(PADAPTER Adapter, uint8_t channel, uint8_t *cckPowerLevel, uint8_t *ofdmPowerLevel, uint8_t *BW20PowerLevel, uint8_t *BW40PowerLevel); extern void PHY_SetTxPowerIndex_8195A(PADAPTER Adapter, uint32_t PowerIndex, int RFPath, int Rate); extern void phy_TxPwrAdjInPercentage(PADAPTER Adapter, uint8_t *pTxPwrIdx); +extern int PHY_GetTxPowerIndex_8195A(PADAPTER pAdapter, int RFPath, int Rate, CHANNEL_WIDTH BandWidth, uint8_t Channel); +extern void PHY_SetTxPowerLevel8195A(PADAPTER Adapter, int Channel); extern void phy_SpurCalibration_8195A(PADAPTER pAdapter); extern void phy_SetRegBW_8195A(PADAPTER Adapter, CHANNEL_WIDTH CurrentBW); extern int phy_GetSecondaryChnl_8195A(PADAPTER Adapter); @@ -888,6 +844,9 @@ extern void phy_PostSetBwMode8195A(PADAPTER Adapter); extern void phy_SwChnl8195A(PADAPTER pAdapter); extern void phy_SwChnlAndSetBwMode8195A(PADAPTER Adapter); extern void PHY_HandleSwChnlAndSetBW8195A(PADAPTER Adapter, int bSwitchChannel, int bSetBandWidth, uint8_t ChannelNum, CHANNEL_WIDTH ChnlWidth, EXTCHNL_OFFSET ExtChnlOffsetOf40MHz, EXTCHNL_OFFSET ExtChnlOffsetOf80MHz, uint8_t CenterFrequencyIndex1); +extern void PHY_SetBWMode8195A(PADAPTER Adapter, CHANNEL_WIDTH Bandwidth, int Offset); +extern void PHY_SwChnl8195A(PADAPTER Adapter, uint8_t channel); +extern void PHY_SetSwChnlBWMode8195A(PADAPTER Adapter, uint8_t channel, CHANNEL_WIDTH Bandwidth, int Offset40, uint8_t Offset80); // Data declarations //-------------------------------- // rtl8195a_pmu_cmd.o @@ -897,10 +856,8 @@ extern void MediaDisconnection(PADAPTER padapter, int macid); extern void RATaskEnable(PADAPTER padapter); extern void SetMediaStatus(PADAPTER padapter, int macid, int status); extern void H2CHDL_JoinInfo(PADAPTER padapter, uint8_t *pCmdBuffer); -extern void H2CHDL_SetRsvdPage(PADAPTER padapter, uint8_t *pCmdBuffer); -/* +extern void H2CHDL_SetRsvdPage(PADAPTER padapter, uint8_t *pCmdBuffer); extern uint32_t H2CCmdCommon(PADAPTER padapter, int ElementID, uint8_t *pCmdBuffer); -*/ // Data declarations //-------------------------------- // rtl8195a_pmu_task.o @@ -911,13 +868,27 @@ extern void ChangeStateByTDMA(PADAPTER padapter); extern void GetMinRateInRRSR(PADAPTER padapter); extern void CheckInReqState(PADAPTER padapter); extern void InitCheckStateTimer(); +extern void InitGTimer1ms(PADAPTER padapter, uint8_t IRQDis, int TimerID, uint32_t Period); +extern void DeInitGTimer1ms(PADAPTER padapter, int TimerID); +extern void ChangeTransmiteRate(int offset, uint8_t rate); +extern void PowerBitSetting(int bPowerBit, int offset); +extern void ChkandChangePS(PPS_PARM pPSParm, int bPowerBit); +extern int IssueRsvdPagePacketSetting(int PageNum, int bHwSEQEn, uint8_t RtyLmt); extern void InitRsvdPgPkt(); extern void IssuePSPoll(); +extern signed int WaitTxStateMachineOk(); +extern signed int IssueNullData(PPS_PARM pPSParm, int bPowerBit, uint8_t RtyLmt); extern void WriteTxPause(uint8_t value, uint8_t rcode); extern void PsCloseRF(); extern void PsOpenRF(); +extern void SetPwrStateReg(PPS_PARM pPSParm, int PwrStateType, uint8_t value); extern BOOL ChkTxQueueIsEmpty(); extern void InitPS(PADAPTER padapter); +extern void ConfigListenBeaconPeriod(PPS_PARM pPSParm, int RLBM, int AwakeInterval); +extern signed int PS_S2_Condition_Match(PPS_PARM pPSParm); +extern signed int PS_S4_Condition_Match(PADAPTER padapter); +extern unsigned int PS_32K_Condition_Match(); +extern void PS_S2ToS3ToS0State(PADAPTER padapter, int nulldata0Allow); extern void PS_S2ToS0State(PPS_PARM pPSParm); extern void PS_S3ToS2orS0State(PPS_PARM pPSParm); extern void PS_S0ToS1ToS2State(PADAPTER padapter); @@ -927,14 +898,19 @@ extern void PS_S2ToS5State(PPS_PARM pPSParm); extern void PS_S5ToS2State(PPS_PARM pPSParm); extern void PS_S0ToS6State(PADAPTER padapter); extern void PS_S6ToS0State(PPS_PARM pPSParm); +extern void CheckTSFIsStable(int ReqState); extern void WaitHWStateReady(); extern void SysClkDown(PPS_PARM pPSParm); extern void SysClkUp(PPS_PARM pPSParm); extern void ResetPSParm(PADAPTER padapter); +extern void PS_S4ToS2State(PPS_PARM pPSParm, int ReleaseTxPause); extern void SleepTo32K(PPS_PARM pPSParm); +extern void Change_PS_State(PADAPTER padapter, int request_ps_state, int nulldata0Allow); extern void Legacy_PS_Setting(PADAPTER padapter); +extern void PSModeSetting(PADAPTER padapter, int on); extern void ChangePSStateByRPWM(PADAPTER padapter); extern void ChangeTDMAState(PADAPTER padapter); +extern void TDMAChangeStateTask(PADAPTER padapter, _irqL a2); extern void EnterPS(PADAPTER padapter); extern void SetSmartPSTimer(PADAPTER padapter); extern void GTimer7Handle(void *Data); @@ -946,6 +922,7 @@ extern void PSRxBcnProcess(PADAPTER padapter); extern void TxPktInPSOn(PADAPTER padapter); extern void PsBcnToProcess(PADAPTER padapter); extern void GTimer6Handle(void *Data); +extern signed int RPWMProcess(PADAPTER padapter, int benter32k); extern void PSSetMode(PADAPTER padapter, PLEGACY_PS_PARM pparm); extern void SpeRPT(PADAPTER padapter); extern void ISR_BcnEarly(PADAPTER padapter); @@ -957,53 +934,27 @@ extern void ISR_RxUCMD1(PADAPTER padapter); extern void ISR_RxUCMD0(PADAPTER padapter); extern void ISR_TxPktIn(PADAPTER padapter); extern void H2CHDL_SetPwrMode(PADAPTER padapter, uint8_t *pCmdBuffer); +extern void CheckInReqStateTask(PADAPTER padapter, int a2, int a3); +extern uint32_t HalGetNullTxRpt(PADAPTER padapter); extern void ISR_TBTT(PADAPTER padapter); extern void H2CHDL_BcnIgnoreEDCCA(PADAPTER padapter, uint8_t *pCmdBuffer); extern void PMUInitial(PADAPTER padapter); extern void PMUTask(PADAPTER padapter); -/* -extern void InitGTimer1ms(PADAPTER padapter, uint8_t IRQDis, int TimerID, uint32_t Period); -extern void DeInitGTimer1ms(PADAPTER padapter, int TimerID); -extern void ChangeTransmiteRate(int offset, uint8_t rate); -extern void PowerBitSetting(int bPowerBit, int offset); -extern void ChkandChangePS(PPS_PARM pPSParm, int bPowerBit); -extern int IssueRsvdPagePacketSetting(int PageNum, int bHwSEQEn, uint8_t RtyLmt); -extern signed int WaitTxStateMachineOk(); -extern signed int IssueNullData(PPS_PARM pPSParm, int bPowerBit, uint8_t RtyLmt); -extern void SetPwrStateReg(PPS_PARM pPSParm, int PwrStateType, uint8_t value); -extern void ConfigListenBeaconPeriod(PPS_PARM pPSParm, int RLBM, int AwakeInterval); -extern signed int PS_S2_Condition_Match(PPS_PARM pPSParm); -extern signed int PS_S4_Condition_Match(PADAPTER padapter); -extern unsigned int PS_32K_Condition_Match(); -extern void PS_S2ToS3ToS0State(PADAPTER padapter, int nulldata0Allow); -extern void CheckTSFIsStable(int ReqState); -extern void PS_S4ToS2State(PPS_PARM pPSParm, int ReleaseTxPause); -extern void Change_PS_State(PADAPTER padapter, int request_ps_state, int nulldata0Allow); -extern void PSModeSetting(PADAPTER padapter, int on); -extern void TDMAChangeStateTask(PADAPTER padapter, _irqL a2); -extern signed int RPWMProcess(PADAPTER padapter, int benter32k); -extern void CheckInReqStateTask(PADAPTER padapter, int a2, int a3); -extern uint32_t HalGetNullTxRpt(PADAPTER padapter); -*/ // Data declarations extern BOOL bCheckStateTIMER; extern uint32_t WifiMcuCmdBitMap_20974; //-------------------------------- // rtl8195a_recv.o // Function declarations -/* -extern int32_t rtl8195a_init_recv_priv(_adapter *padapter); -*/ +extern int32_t rtl8195a_init_recv_priv(_adapter *padapter); // Data declarations //-------------------------------- // rtl8195a_rxdesc.o // Function declarations +extern void process_rssi(_adapter *padapter, struct recv_frame *prframe); extern int32_t translate2dbm(int signal_strength_idx); -/* -extern void process_rssi(_adapter *padapter, union recv_frame *prframe); -extern void rtl8195a_query_rx_desc_status(union recv_frame *precvframe, uint8_t *pdesc); -extern void rtl8195a_query_rx_phy_status(union recv_frame *precvframe, uint8_t *pphy_status, int a3); -*/ +extern void rtl8195a_query_rx_desc_status(struct recv_frame *precvframe, uint8_t *pdesc); +extern void rtl8195a_query_rx_phy_status(struct recv_frame *precvframe, uint8_t *pphy_status, int a3); // Data declarations //-------------------------------- // rtl8195a_xmit.o @@ -1011,24 +962,20 @@ extern void rtl8195a_query_rx_phy_status(union recv_frame *precvframe, uint8_t * extern uint8_t *GetTxBufDesc(_adapter *padapter, int queue_index); extern void UpdateFirstTxbdtoXmitBuf(_adapter *padapter, struct xmit_frame *pxmitframe); extern BOOL check_nic_enough_desc(_adapter *padapter, struct pkt_attrib *pattrib); +extern int32_t rtl8195ab_init_xmit_priv(PADAPTER padapter); extern void rtl8195ab_free_xmit_priv(PADAPTER padapter); +extern uint32_t GetDmaTxbdIdx(uint32_t ff_hwaddr); extern struct xmit_buf *rtl8195a_enqueue_xmitbuf(struct rtw_tx_ring *ring, struct xmit_buf *pxmitbuf); +extern struct list_head *rtl8195a_dequeue_xmitbuf(struct rtw_tx_ring *ring); extern signed int SetTxbdForLxDMARtl8195ab(_adapter *padapter, struct xmit_frame *pxmitframe, struct tx_buf_desc *pTxbd); extern void UpdateTxbdHostIndex(_adapter *padapter, uint32_t ff_hwaddr); extern struct xmit_buf *SetXimtBuf(struct xmit_frame *pxmitframe); +extern int FreeXimtBuf(struct xmit_buf *pxmitbuf); extern int rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe); extern BOOL check_tx_desc_resource(_adapter *padapter, int prio); -extern void rtl8195ab_xmitframe_resume(_adapter *padapter); -/* -extern int32_t rtl8195ab_init_xmit_priv(PADAPTER padapter); -extern uint32_t GetDmaTxbdIdx(uint32_t ff_hwaddr); -extern struct list_head *rtl8195a_dequeue_xmitbuf(struct rtw_tx_ring *ring); -extern int FreeXimtBuf(struct xmit_buf *pxmitbuf); -*/ -/* extern struct list_head *rtw_dequeue_xframe(struct xmit_priv *pxmitpriv, struct hw_xmit *phwxmit_i, sint entry); extern int32_t rtw_xmitframe_coalesce(_adapter *padapter, _pkt *pkt, struct xmit_frame *pxmitframe); -*/ +extern void rtl8195ab_xmitframe_resume(_adapter *padapter); extern int32_t rtl8195ab_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe); extern int32_t rtl8195ab_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe); extern int32_t rtl8195ab_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe); @@ -1036,15 +983,13 @@ extern int32_t rtl8195ab_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_f //-------------------------------- // rtw_intfs.o // Function declarations -/* extern signed int rtw_init_default_value(_adapter *padapter); +extern void rtw_cancel_all_timer(_adapter *padapter); extern signed int rtw_free_drv_sw(_adapter *padapter); extern signed int rtw_reset_drv_sw(_adapter *padapter); extern signed int rtw_init_drv_sw(_adapter *padapter); extern int rtw_start_drv_threads(_adapter *padapter); -*/ extern void rtw_stop_drv_threads(_adapter *padapter); -extern void rtw_cancel_all_timer(_adapter *padapter); // Data declarations //-------------------------------- // rtw_mlme.o @@ -1053,6 +998,7 @@ extern void rtw_free_mlme_ie_data(uint8_t **ppie, uint32_t *plen); extern void rtw_init_mlme_timer(_adapter *padapter); extern void rtw_del_mlme_timer(struct mlme_priv *pmlmepriv); extern void reconnect_timer_hdl(void *FunctionContext); +extern uint8_t *rtw_init_mlme_priv(_adapter *padapter, int a2, int a3); extern void rtw_mfree_mlme_priv_lock(struct mlme_priv *pmlmepriv); extern void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv); extern void rtw_free_mlme_priv(struct mlme_priv *pmlmepriv); @@ -1060,12 +1006,21 @@ extern sint rtw_enqueue_network(_queue *queue, struct wlan_network *pnetwork); extern struct list_head *rtw_alloc_network(struct mlme_priv *pmlmepriv, _irqL a2, int a3); extern void rtw_free_network(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork, int isfreeall); extern void rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork); +extern _queue *rtw_find_network(_queue *scanned_queue, uint8_t *addr); +extern void rtw_free_network_queue(_adapter *padapter, int isfreeall, int a3); extern sint rtw_if_up(_adapter *padapter); extern void rtw_generate_random_ibss(uint8_t *pibss); extern uint8_t *rtw_get_capability_from_ie(uint8_t *ie); +extern int rtw_get_capability(WLAN_BSSID_EX *bss, int a2, int a3); extern uint8_t *rtw_get_beacon_interval_from_ie(uint8_t *ie); +extern uint8_t *rtw_init_mlme_priv(_adapter *padapter, int a2, int a3); +extern uint32_t rtw_is_same_ibss(_adapter *adapter, struct wlan_network *pnetwork); +extern int is_same_network(WLAN_BSSID_EX *src, WLAN_BSSID_EX *dst, int a3); +extern struct list_head *rtw_get_oldest_wlan_network(_queue *scanned_queue); +extern void update_network(WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src, _adapter *padapter, int update_ie); extern void rtw_update_scanned_network(_adapter *adapter, WLAN_BSSID_EX *target); extern void rtw_add_network(_adapter *adapter, WLAN_BSSID_EX *pnetwork, int a3); +extern void rtw_survey_event_callback(_adapter *adapter, uint8_t *pbuf, int a3); extern void rtw_free_assoc_resources(_adapter *adapter, int lock_scanned_queue); extern void rtw_indicate_connect(_adapter *padapter); extern void rtw_indicate_disconnect(_adapter *padapter); @@ -1075,77 +1030,93 @@ extern void rtw_stassoc_hw_rpt(_adapter *adapter, struct sta_info *psta); extern void rtw_stassoc_event_callback(_adapter *adapter, uint8_t *pbuf); extern void rtw_stadel_event_callback(_adapter *adapter, uint8_t *pbuf); extern void rtw_join_timeout_handler(_adapter *adapter, _irqL a2, int a3, int a4); +//void rtw_join_timeout_handler(void *FunctionContext, _irqL a2, int a3, int a4); +extern void rtw_scan_timeout_handler(_adapter *adapter, _irqL a2, int a3); +//void rtw_scan_timeout_handler(void *FunctionContext); extern void rtw_dynamic_check_timer_handlder(_adapter *adapter); extern void dynamic_check_timer_handlder(void *FunctionContext); +extern int rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv, _irqL a2, int a3); extern void rtw_surveydone_event_callback(_adapter *adapter, uint8_t *pbuf); extern sint rtw_set_auth(_adapter *adapter, struct security_priv *psecuritypriv); extern sint rtw_set_key(_adapter *adapter, struct security_priv *psecuritypriv, sint keyid, uint8_t set_tx); +extern unsigned int rtw_restruct_wmm_ie(_adapter *adapter, uint8_t *in_ie, uint8_t *out_ie, unsigned int in_len, unsigned int initial_out_len); extern sint rtw_restruct_sec_ie(_adapter *adapter, uint8_t *in_ie, uint8_t *out_ie, unsigned int in_len); extern void rtw_joinbss_reset(_adapter *padapter); extern unsigned int rtw_restructure_ht_ie(_adapter *padapter, uint8_t *in_ie, uint8_t *out_ie, unsigned int in_len, unsigned int *pout_len); extern void rtw_update_ht_cap(_adapter *padapter, uint8_t *pie, unsigned int ie_len); -extern sint rtw_linked_check(_adapter *padapter); -/* -extern uint8_t *rtw_init_mlme_priv(_adapter *padapter, int a2, int a3); -extern int rtw_get_capability(WLAN_BSSID_EX *bss, int a2, int a3); -extern _queue *rtw_find_network(_queue *scanned_queue, uint8_t *addr); -extern void rtw_free_network_queue(_adapter *padapter, int isfreeall, int a3); -extern uint8_t *rtw_init_mlme_priv(_adapter *padapter, int a2, int a3); -extern uint32_t rtw_is_same_ibss(_adapter *adapter, struct wlan_network *pnetwork); -extern int is_same_network(WLAN_BSSID_EX *src, WLAN_BSSID_EX *dst, int a3); -extern struct list_head *rtw_get_oldest_wlan_network(_queue *scanned_queue); -extern void update_network(WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src, _adapter *padapter, int update_ie); -extern void rtw_survey_event_callback(_adapter *adapter, uint8_t *pbuf, int a3); -//void rtw_join_timeout_handler(void *FunctionContext, _irqL a2, int a3, int a4); -//void rtw_scan_timeout_handler(void *FunctionContext); -extern void rtw_scan_timeout_handler(_adapter *adapter, _irqL a2, int a3); -extern int rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv, _irqL a2, int a3); -extern unsigned int rtw_restruct_wmm_ie(_adapter *adapter, uint8_t *in_ie, uint8_t *out_ie, unsigned int in_len, unsigned int initial_out_len); extern void rtw_joinbss_event_prehandle(_adapter *adapter, uint8_t *pbuf, int a3); extern void rtw_issue_addbareq_cmd(_adapter *padapter, struct xmit_frame *pxmitframe); +extern sint rtw_linked_check(_adapter *padapter); extern sint rtw_buddy_adapter_up(sint result); extern sint check_buddy_fwstate(sint result, sint state); -*/ // Data declarations extern uint8_t auto_reconnect_running; extern void (*p_wlan_autoreconnect_hdl)(rtw_security_t, char *, int, char *, int, int); //-------------------------------- // rtw_mlme_ext.o // Function declarations -/* -extern signed int OnAction(_adapter *padapter, union recv_frame *precv_frame); -extern signed int DoReserved(_adapter *padapter, union recv_frame *precv_frame); -extern void mgt_dispatcher(_adapter *padapter, struct mlme_handler *ptable, union recv_frame *precv_frame); +extern u8 *get_da(u8 *pframe); +extern u8 *get_sa(u8 *pframe); +extern signed int OnAction(_adapter *padapter, struct recv_frame *precv_frame); +extern signed int DoReserved(_adapter *padapter, struct recv_frame *precv_frame); +extern void mgt_dispatcher(_adapter *padapter, struct mlme_handler *ptable, struct recv_frame *precv_frame); extern int rtw_is_channel_set_contains_channel(RT_CHANNEL_INFO *channel_set, const uint32_t channel_num, int *pchannel_idx); -//void mgt_dispatcher(_adapter *padapter, union recv_frame *precv_frame, int a3); -extern unsigned int OnAction_public(_adapter *padapter, union recv_frame *precv_frame); -extern signed int OnAction_p2p(_adapter *padapter, union recv_frame *precv_frame); +extern int init_hw_mlme_ext(_adapter *padapter); +extern unsigned int init_channel_set(_adapter *padapter, int ChannelPlan, RT_CHANNEL_INFO *channel_set); +extern void free_mlme_ext_priv(struct mlme_ext_priv *pmlmeext); +//void mgt_dispatcher(_adapter *padapter, struct recv_frame *precv_frame, int a3); +extern unsigned int OnAction_public(_adapter *padapter, struct recv_frame *precv_frame); +extern signed int OnAction_p2p(_adapter *padapter, struct recv_frame *precv_frame); extern struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv); extern struct xmit_frame *alloc_FwRsvdframe(struct xmit_priv *pxmitpriv, uint32_t size); +extern void update_mgnt_tx_rate(_adapter *padapter, uint8_t rate); extern void update_mgntframe_attrib(_adapter *padapter, struct pkt_attrib *pattrib); +extern struct xmit_frame *rtw_build_mgnt_frame(_adapter *padapter, uint8_t *data, int len); extern void dump_mgntframe(_adapter *padapter, struct xmit_frame *pmgntframe); -extern signed int OnProbeReq(_adapter *padapter, union recv_frame *precv_frame); +extern int rtw_send_mgnt(_adapter *padapter, uint8_t *data, int len, uint16_t flags); +extern void issue_action_BSSCoexistPacket(_adapter *padapter); +extern uint32_t update_hidden_ssid(uint8_t *ies, uint32_t ies_len, int hidden_ssid_mode); +extern void issue_beacon(_adapter *padapter); +extern void issue_probersp(_adapter *padapter, u8 *da, uint8_t is_valid_p2p_probereq); +extern signed int OnProbeReq(_adapter *padapter, struct recv_frame *precv_frame); extern void issue_probereq(_adapter *padapter, NDIS_802_11_SSID *pssid, int blnbc); extern void issue_auth(_adapter *padapter, struct sta_info *psta, int status); -extern signed int OnAuth(_adapter *padapter, union recv_frame *precv_frame); +extern signed int OnAuth(_adapter *padapter, struct recv_frame *precv_frame); extern void issue_asocrsp(_adapter *padapter, uint16_t status, struct sta_info *pstat, int pkt_type); +extern void issue_assocreq(_adapter *padapter); +extern void issue_nulldata(_adapter *padapter, unsigned int power_mode); +extern void issue_qos_nulldata(_adapter *padapter, u8 *da, uint16_t tid); extern void issue_deauth(_adapter *padapter, u8 *da, uint32_t reason); -extern signed int OnAction_back(_adapter *padapter, union recv_frame *precv_frame); +extern void issue_action_BA(_adapter *padapter, u8 *raddr, u8 action, uint16_t status); +extern signed int OnAction_back(_adapter *padapter, struct recv_frame *precv_frame); extern signed int send_beacon(_adapter *padapter); -extern signed int collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSID_EX *bssid); -extern signed int OnAuthClient(_adapter *padapter, union recv_frame *precv_frame); -extern void report_survey_event(_adapter *padapter, union recv_frame *precv_frame); -extern signed int OnProbeRsp(_adapter *padapter, union recv_frame *precv_frame); -extern signed int OnAssocRsp(_adapter *padapter, union recv_frame *precv_frame); +extern signed int collect_bss_info(_adapter *padapter, struct recv_frame *precv_frame, WLAN_BSSID_EX *bssid); +extern void start_clnt_auth(_adapter *padapter); +extern void start_clnt_assoc(_adapter *padapter); +extern signed int OnAuthClient(_adapter *padapter, struct recv_frame *precv_frame); +extern int report_scan_result_one(_adapter *padapter, WLAN_BSSID_EX *bssid); +extern int add_site_survey(_adapter *padapter, WLAN_BSSID_EX *bssid); +extern void report_survey_event(_adapter *padapter, struct recv_frame *precv_frame); +extern signed int OnProbeRsp(_adapter *padapter, struct recv_frame *precv_frame); +extern void report_surveydone_event(_adapter *padapter); +extern void report_join_res(_adapter *padapter, int res); +extern signed int OnAssocRsp(_adapter *padapter, struct recv_frame *precv_frame); +extern void report_del_sta_event(_adapter *padapter, u8 *MacAddr, uint16_t reason); extern signed int receive_disconnect(_adapter *padapter, u8 *MacAddr, uint16_t reason); -extern signed int OnBeacon(_adapter *padapter, union recv_frame *precv_frame); -extern signed int OnDeAuth(_adapter *padapter, union recv_frame *precv_frame); -extern signed int OnDisassoc(_adapter *padapter, union recv_frame *precv_frame); -extern signed int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame); +extern signed int OnBeacon(_adapter *padapter, struct recv_frame *precv_frame); +extern signed int OnDeAuth(_adapter *padapter, struct recv_frame *precv_frame); +extern signed int OnDisassoc(_adapter *padapter, struct recv_frame *precv_frame); +extern void report_add_sta_event(_adapter *padapter, u8 *MacAddr, int cam_idx); +extern signed int OnAssocReq(_adapter *padapter, struct recv_frame *precv_frame); +extern signed int rtw_port_switch_chk(_adapter *adapter); extern void update_sta_info(_adapter *padapter, struct sta_info *psta); +extern void mlmeext_sta_del_event_callback(_adapter *padapter); +extern void linked_info_dump(_adapter *padapter, _irqL a2, int a3); +extern void linked_rx_signal_strehgth_display(_adapter *padapter, int a2); extern void linked_status_chk(_adapter *padapter, int a2); extern void survey_timer_hdl(_adapter *padapter, int a2); //void survey_timer_hdl(void *FunctionContext); +extern void link_timer_hdl(_adapter *padapter); //void link_timer_hdl(void *FunctionContext); extern void addba_timer_hdl(struct sta_info *psta); extern int NULL_hdl(_adapter *padapter, uint8_t *pbuf); @@ -1160,42 +1131,12 @@ extern int tx_beacon_hdl(_adapter *padapter, u8 *pbuf, int a3); extern sint check_buddy_mlmeinfo_state(sint result, uint32_t state); extern void site_survey(_adapter *padapter, int a2, int a3); extern int sitesurvey_cmd_hdl(_adapter *padapter, uint8_t *pbuf, int a3); +extern int concurrent_chk_start_clnt_join(_adapter *padapter); extern void start_clnt_join(_adapter *padapter, int a2, int a3); extern signed int join_cmd_hdl(_adapter *padapter, uint8_t *pbuf, int a3); +extern void concurrent_chk_joinbss_done(_adapter *padapter, int join_res); extern void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res, int a3); extern signed int set_chplan_hdl(_adapter *padapter, u8 *pbuf); -*/ -extern struct xmit_frame *rtw_build_mgnt_frame(_adapter *padapter, uint8_t *data, int len); -extern void update_mgnt_tx_rate(_adapter *padapter, uint8_t rate); -extern int rtw_send_mgnt(_adapter *padapter, uint8_t *data, int len, uint16_t flags); -extern void issue_action_BSSCoexistPacket(_adapter *padapter); -extern uint32_t update_hidden_ssid(uint8_t *ies, uint32_t ies_len, int hidden_ssid_mode); -extern void issue_beacon(_adapter *padapter); -extern void issue_probersp(_adapter *padapter, u8 *da, uint8_t is_valid_p2p_probereq); -extern void issue_assocreq(_adapter *padapter); -extern void issue_nulldata(_adapter *padapter, unsigned int power_mode); -extern void issue_qos_nulldata(_adapter *padapter, u8 *da, uint16_t tid); -extern void issue_action_BA(_adapter *padapter, u8 *raddr, u8 action, uint16_t status); -extern void start_clnt_auth(_adapter *padapter); -extern void start_clnt_assoc(_adapter *padapter); -extern int report_scan_result_one(_adapter *padapter, WLAN_BSSID_EX *bssid); -extern int add_site_survey(_adapter *padapter, WLAN_BSSID_EX *bssid); -extern void report_surveydone_event(_adapter *padapter); -extern void report_join_res(_adapter *padapter, int res); -extern void report_del_sta_event(_adapter *padapter, u8 *MacAddr, uint16_t reason); -extern void report_add_sta_event(_adapter *padapter, u8 *MacAddr, int cam_idx); -extern void mlmeext_sta_del_event_callback(_adapter *padapter); -extern void linked_info_dump(_adapter *padapter, _irqL a2, int a3); -extern void linked_rx_signal_strehgth_display(_adapter *padapter, int a2); -extern signed int rtw_port_switch_chk(_adapter *adapter); -extern void link_timer_hdl(_adapter *padapter); -extern u8 *get_da(u8 *pframe); -extern u8 *get_sa(u8 *pframe); -extern int concurrent_chk_start_clnt_join(_adapter *padapter); -extern void concurrent_chk_joinbss_done(_adapter *padapter, int join_res); -extern int init_hw_mlme_ext(_adapter *padapter); -extern unsigned int init_channel_set(_adapter *padapter, int ChannelPlan, RT_CHANNEL_INFO *channel_set); -extern void free_mlme_ext_priv(struct mlme_ext_priv *pmlmeext); extern void init_mlme_ext_timer(_adapter *padapter); extern int init_mlme_ext_priv(_adapter *padapter); // Data declarations @@ -1210,8 +1151,7 @@ extern const RT_CHANNEL_PLAN_2G RTW_ChannelPlan2G[8]; /* = { { 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 13u, 0u }, 13u }, { { 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 13u, 0u }, 13u } }; */ -extern const uint8_t WPS_OUI[4]; // = { 0u, 80u, 242u, 4u }; -typedef int (*mac_monitor_ptr)(uint8_t *, char); +extern const uint8_t WPS_OUI[4]; // = { 0u, 80u, 242u, 4u }; extern mac_monitor_ptr mac_monitor_callback; extern struct mlme_handler mlme_sta_tbl[14]; /* = { @@ -1282,18 +1222,16 @@ extern const struct fwevent wlanevents[24]; /* = extern u8 *get_hdr_bssid(u8 *pframe); extern int filter_packet(u8 *buf, int length); extern signed int promisc_get_encrypt(_adapter *padapter, uint8_t *bssid); +extern void promisc_info_get(_adapter *padapter, struct recv_frame *prframe, ieee80211_frame_info_t *ppromisc_info, int a4); extern void promisc_set_enable(_adapter *padapter, int enabled, int len_used); extern void promisc_deinit(_adapter *padapter); +extern int promisc_recv_func(_adapter *padapter, struct recv_frame *rframe); extern int promisc_set(rtw_rcr_level_t enabled, void (*callback)(u8 *, unsigned int, void *), int len_used); extern int promisc_set_mgntframe(int result); extern int is_promisc_enabled(); extern void promisc_issue_probereq(); extern void promisc_issue_probersp(u8 *da); -extern int promisc_get_fixed_channel(void *fixed_bssid, uint8_t *ssid, int *ssid_length); -/* -extern void promisc_info_get(_adapter *padapter, union recv_frame *prframe, ieee80211_frame_info_t *ppromisc_info, int a4); -extern int promisc_recv_func(_adapter *padapter, union recv_frame *rframe); -*/ +extern int promisc_get_fixed_channel(void *fixed_bssid, uint8_t *ssid, int *ssid_length); // Data declarations extern void (*promisc_callback_all)(u8 *, unsigned int, void *); extern _sema promisc_sema; @@ -1316,20 +1254,18 @@ extern void CalcMIC(OCTET_STRING EAPOLMsgSend, int algo, u8 *key, int keylen); extern int DecWPA2KeyData(WPA_STA_INFO *pStaInfo, u8 *key, int keylen, u8 *kek, int keklen, u8 *kout); extern int DecGTK(OCTET_STRING EAPOLMsgRecvd, u8 *kek, int keklen, int keylen, u8 *kout); extern void ToDrv_SetGTK(_adapter *padapter); -extern void ResendTimeout(void *task_psta, _irqL a2); -extern void set_wpa_global_PSK(u8 *key); -extern void psk_derive(_adapter *padapter, u8 *passphrase, u8 *ssid); -extern int tkip_send_mic_failure_report(_adapter *padapter); -/* extern void init_wpa_sta_info(_adapter *padapter, struct sta_info *psta); extern void SendEAPOL(_adapter *padapter, struct sta_info *psta, int resend); extern void ClientSendEAPOL(_adapter *padapter, struct sta_info *psta, int resend); +extern void ResendTimeout(void *task_psta, _irqL a2); extern void EAPOLKeyRecvd(_adapter *padapter, struct sta_info *psta); extern void ClientEAPOLKeyRecvd(_adapter *padapter, struct sta_info *psta); +extern void set_wpa_global_PSK(u8 *key); +extern void psk_derive(_adapter *padapter, u8 *passphrase, u8 *ssid); extern void psk_init(_adapter *padapter, u8 *pie, int ielen); extern int psk_strip_rsn_pairwise(uint8_t *ie, int ie_len); extern int psk_strip_wpa_pairwise(uint8_t *ie, int ie_len); -*/ +extern int tkip_send_mic_failure_report(_adapter *padapter); // Data declarations extern uint8_t psk_essid[2][36]; extern uint8_t psk_passphrase[2][65]; @@ -1343,11 +1279,8 @@ extern void ips_enter(_adapter *padapter); extern int ips_leave(_adapter *padapter); extern signed int rtw_pwr_unassociated_idle(_adapter *adapter); extern void rtw_ps_processor(_adapter *padapter); -extern int PS_RDY_CHECK(_adapter *padapter); -extern int rtw_pm_set_tdma_param(_adapter *padapter, uint8_t tdma_slot_period, uint8_t tdma_rfon_period_len_1, uint8_t tdma_rfon_period_len_2, uint8_t tdma_rfon_period_len_3); -extern int rtw_pm_set_lps_dtim(_adapter *padapter, uint8_t lps_dtim); -/* extern void rtw_set_rpwm(PADAPTER padapter, uint8_t pslv); +extern int PS_RDY_CHECK(_adapter *padapter); extern void rtw_set_ps_mode(PADAPTER padapter, int ps_mode, int smart_ps, int bcn_ant_mode); extern int32_t LPS_RF_ON_check(PADAPTER padapter, uint32_t delay_ms); extern void LPS_Enter(PADAPTER padapter); @@ -1358,61 +1291,60 @@ extern void rtw_free_pwrctrl_priv(PADAPTER adapter); extern int rtw_pwr_wakeup(_adapter *padapter, uint32_t ips_deffer_ms, const char *caller); extern int rtw_pm_set_lps(_adapter *padapter, int mode); extern int rtw_pm_set_ips(_adapter *padapter, int mode); +extern int rtw_pm_set_tdma_param(_adapter *padapter, uint8_t tdma_slot_period, uint8_t tdma_rfon_period_len_1, uint8_t tdma_rfon_period_len_2, uint8_t tdma_rfon_period_len_3); +extern int rtw_pm_set_lps_dtim(_adapter *padapter, uint8_t lps_dtim); extern int rtw_pm_get_lps_dtim(_adapter *padapter); -*/ // Data declarations //-------------------------------- // rtw_recv.o // Function declarations +extern uint8_t *recvframe_pull(uint8_t *result, sint sz); +extern uint8_t *recvframe_pull_tail(uint8_t *result, sint sz); extern void rtw_signal_stat_timer_hdl(void *FunctionContext); extern void rtw_init_sta_recv_priv(struct sta_recv_priv *psta_recvpriv); extern sint rtw_init_recv_priv(struct recv_priv *precvpriv, _adapter *padapter); extern void rtw_mfree_recv_priv_lock(struct recv_priv *precvpriv); -extern void rtw_free_recvframe_queue(_queue *pframequeue, _queue *pfree_recv_queue); -extern union recv_frame *portctrl(_adapter *adapter, union recv_frame *precv_frame); -extern sint recv_decache(union recv_frame *precv_frame, uint8_t bretry, struct stainfo_rxcache *prxcache); -extern void process_pwrbit_data(_adapter *padapter, union recv_frame *precv_frame, int a3, int a4); -extern void process_wmmps_data(_adapter *padapter, union recv_frame *precv_frame); -extern void count_rx_stats(_adapter *padapter, union recv_frame *prframe, struct sta_info *sta); -extern sint sta2sta_data_frame(_adapter *adapter, union recv_frame *precv_frame, struct sta_info **psta, int a4); -extern sint ap2sta_data_frame(_adapter *adapter, union recv_frame *precv_frame, struct sta_info **psta); -extern sint sta2ap_data_frame(_adapter *adapter, union recv_frame *precv_frame, struct sta_info **psta); -extern sint validate_recv_ctrl_frame(_adapter *padapter, union recv_frame *precv_frame); -extern sint validate_recv_data_frame(_adapter *adapter, union recv_frame *precv_frame); -extern sint wlanhdr_to_ethhdr(union recv_frame *precvframe, int a2, int a3); -extern union recv_frame *recvframe_defrag(_adapter *adapter, _queue *defrag_q); -extern _queue *recvframe_chk_defrag(PADAPTER padapter, union recv_frame *precv_frame); -extern sint validate_recv_mgnt_frame(PADAPTER padapter, union recv_frame **pprecv_frame); -extern sint validate_recv_frame(_adapter *adapter, union recv_frame **pprecv_frame); -extern int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe); -extern int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, int seq_num); -extern int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, union recv_frame *prframe); -extern int recv_indicatepkts_in_order(_adapter *padapter, struct recv_reorder_ctrl *preorder_ctrl, int bforced); -extern int recv_indicatepkt_reorder(_adapter *padapter, union recv_frame *prframe, int a3); -extern void rtw_free_recv_priv(struct recv_priv *precvpriv); -extern int recv_func_prehandle(_adapter *padapter, union recv_frame *rframe, int a3); -extern int recv_func_posthandle(_adapter *padapter, union recv_frame *prframe); -extern int recv_func(_adapter *padapter, union recv_frame *rframe, int a3); -extern void rtw_recv_tasklet(thread_context context); -/* -extern sint recvframe_chkmic(_adapter *adapter, union recv_frame *precvframe, int a3, int a4); -extern union recv_frame *decryptor(_adapter *padapter, union recv_frame *precv_frame); -extern uint8_t *recvframe_pull(uint8_t *result, sint sz); -extern uint8_t *recvframe_pull_tail(uint8_t *result, sint sz); extern struct list_head *rtw_alloc_recvframe(_queue *pfree_recv_queue); //struct list_head *rtw_alloc_recvframe(_queue *pfree_recv_queue, _irqL a2, int a3); -extern int rtw_free_recvframe(union recv_frame *precvframe, _queue *pfree_recv_queue); -extern sint rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue); -extern sint rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue); +extern int rtw_free_recvframe(struct recv_frame *precvframe, _queue *pfree_recv_queue); +extern sint rtw_enqueue_recvframe(struct recv_frame *precvframe, _queue *queue); +extern sint rtw_enqueue_recvframe(struct recv_frame *precvframe, _queue *queue); +extern void rtw_free_recvframe_queue(_queue *pframequeue, _queue *pfree_recv_queue); extern int rtw_free_uc_swdec_pending_queue(_adapter *adapter, _irqL a2, int a3); +extern void rtw_free_recv_priv(struct recv_priv *precvpriv); extern sint rtw_enqueue_recvbuf_to_head(struct recv_buf *precvbuf, _queue *queue); -extern uint32_t rtw_free_buf_pending_queue(_adapter *adapter); +extern uint32_t rtw_free_buf_pending_queue(_adapter *adapter); extern sint rtw_enqueue_recvbuf(struct recv_buf *precvbuf, _queue *queue); extern struct list_head *rtw_dequeue_recvbuf(_queue *queue, _irqL a2, int a3); +extern sint recvframe_chkmic(_adapter *adapter, struct recv_frame *precvframe, int a3, int a4); +extern struct recv_frame *decryptor(_adapter *padapter, struct recv_frame *precv_frame); +extern struct recv_frame *portctrl(_adapter *adapter, struct recv_frame *precv_frame); +extern sint recv_decache(struct recv_frame *precv_frame, uint8_t bretry, struct stainfo_rxcache *prxcache); +extern void process_pwrbit_data(_adapter *padapter, struct recv_frame *precv_frame, int a3, int a4); +extern void process_wmmps_data(_adapter *padapter, struct recv_frame *precv_frame); +extern void count_rx_stats(_adapter *padapter, struct recv_frame *prframe, struct sta_info *sta); +extern sint sta2sta_data_frame(_adapter *adapter, struct recv_frame *precv_frame, struct sta_info **psta, int a4); +extern sint ap2sta_data_frame(_adapter *adapter, struct recv_frame *precv_frame, struct sta_info **psta); +extern sint sta2ap_data_frame(_adapter *adapter, struct recv_frame *precv_frame, struct sta_info **psta); +extern sint validate_recv_ctrl_frame(_adapter *padapter, struct recv_frame *precv_frame); +extern sint validate_recv_data_frame(_adapter *adapter, struct recv_frame *precv_frame); +extern sint wlanhdr_to_ethhdr(struct recv_frame *precvframe, int a2, int a3); +extern struct recv_frame *recvframe_defrag(_adapter *adapter, _queue *defrag_q); +extern _queue *recvframe_chk_defrag(PADAPTER padapter, struct recv_frame *precv_frame); +extern sint validate_recv_mgnt_frame(PADAPTER padapter, struct recv_frame **pprecv_frame); +extern sint validate_recv_frame(_adapter *adapter, struct recv_frame **pprecv_frame); +extern int amsdu_to_msdu(_adapter *padapter, struct recv_frame *prframe); +extern int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, int seq_num); +extern int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, struct recv_frame *prframe); +extern int recv_indicatepkts_in_order(_adapter *padapter, struct recv_reorder_ctrl *preorder_ctrl, int bforced); +extern int recv_indicatepkt_reorder(_adapter *padapter, struct recv_frame *prframe, int a3); extern void rtw_reordering_ctrl_timeout_handler(void *pcontext, _irqL a2); -extern int process_recv_indicatepkts(_adapter *padapter, union recv_frame *prframe, int a3); -extern int32_t rtw_recv_entry(union recv_frame *precvframe, int a2, int a3); -*/ +extern int process_recv_indicatepkts(_adapter *padapter, struct recv_frame *prframe, int a3); +extern int recv_func_prehandle(_adapter *padapter, struct recv_frame *rframe, int a3); +extern int recv_func_posthandle(_adapter *padapter, struct recv_frame *prframe); +extern int recv_func(_adapter *padapter, struct recv_frame *rframe, int a3); +extern int32_t rtw_recv_entry(struct recv_frame *precvframe, int a2, int a3); +extern void rtw_recv_tasklet(thread_context context); // Data declarations extern const uint8_t SNAP_ETH_TYPE_APPLETALK_AARP[2]; // = { 128u, 243u }; extern const uint8_t SNAP_ETH_TYPE_IPX[2]; // = { 129u, 55u }; @@ -1427,27 +1359,24 @@ extern const uint8_t oui_rfc1042[3]; // = { 0u, 0u, 0u }; // Function declarations extern void rtw_wep_encrypt(_adapter *padapter, uint8_t *pxmitframe); extern void rtw_wep_decrypt(_adapter *padapter, uint8_t *precvframe); -extern void rtw_use_tkipkey_handler(void *FunctionContext); -extern void rtw_free_sec_priv(struct security_priv *psecpriv); -/* extern signed int rtw_tkip_encrypt(_adapter *padapter, uint8_t *pxmitframe); extern int rtw_tkip_decrypt(_adapter *padapter, uint8_t *precvframe); extern signed int rtw_aes_encrypt(_adapter *padapter, uint8_t *pxmitframe, int a3, int a4); extern int rtw_aes_decrypt(_adapter *padapter, uint8_t *precvframe, int a3, int a4); +extern void rtw_use_tkipkey_handler(void *FunctionContext); extern int rtw_init_sec_priv(_adapter *padapter); -*/ +extern void rtw_free_sec_priv(struct security_priv *psecpriv); // Data declarations //-------------------------------- // rtw_sta_mgt.o // Function declarations +extern int wifi_mac_hash(uint8_t *mac); extern void rtw_init_stainfo(struct sta_info *psta); extern int rtw_init_sta_priv(_adapter *padapter); extern void rtw_free_sta_xmit_priv_lock(struct sta_xmit_priv *psta_xmitpriv); extern void rtw_mfree_stainfo(struct sta_info *psta); extern void rtw_mfree_sta_priv_lock(struct sta_priv *pstapriv); extern signed int rtw_free_sta_priv(struct sta_priv *pstapriv); -/* -extern int wifi_mac_hash(uint8_t *mac); extern void init_addba_retry_timer(_adapter *padapter, struct sta_info *psta); extern struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, uint8_t *hwaddr, _irqL a3, _irqL a4); extern signed int rtw_free_stainfo(_adapter *padapter, struct sta_info *psta, int a3); @@ -1455,7 +1384,6 @@ extern struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, uint8_t *hwad extern signed int rtw_init_bcmc_stainfo(_adapter *padapter, int a2, int a3); extern struct sta_info *rtw_get_bcmc_stainfo(_adapter *padapter, int a2, int a3); extern void rtw_free_all_stainfo(_adapter *padapter, _irqL a2, int a3); -*/ // Data declarations //-------------------------------- // rtw_xmit.o @@ -1464,16 +1392,6 @@ extern void init_txservq(struct tx_servq *ptxservq); extern void set_qos(struct pkt_file *ppktfile, struct pkt_attrib *pattrib); extern void rtw_init_sta_xmit_priv(struct sta_xmit_priv *psta_xmitpriv); extern void rtw_mfree_xmit_priv_lock(struct xmit_priv *pxmitpriv); -extern void rtw_update_protection(_adapter *padapter, uint8_t *ie, unsigned int ie_len); -extern void rtw_free_xmitframe_queue(struct xmit_priv *pxmitpriv, _queue *pframequeue); -extern void rtw_alloc_hwxmits(_adapter *padapter); -extern void rtw_free_hwxmits(_adapter *padapter); -extern void rtw_free_xmit_priv(struct xmit_priv *pxmitpriv); -extern int32_t rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, _adapter *padapter); -extern void dequeue_xmitframes_to_sleeping_queue(_adapter *padapter, struct sta_info *psta, _queue *pframequeue); -extern void rtw_xmit_tasklet(thread_context context); -extern BOOL rtw_sctx_chk_waring_status(int status); -/* extern int qos_acm(uint8_t acm_mask, int priority); extern int32_t xmitframe_addmic(_adapter *padapter, struct xmit_frame *pxmitframe); extern int32_t xmitframe_swencrypt(_adapter *padapter, struct xmit_frame *pxmitframe); @@ -1483,26 +1401,34 @@ extern int32_t rtw_txframes_sta_ac_pending(_adapter *padapter, struct pkt_attrib extern void rtw_txframes_update_attrib_vcs_info(_adapter *padapter, struct xmit_frame *pxmitframe); extern int rtw_calculate_wlan_pkt_size_by_attribue(struct pkt_attrib *pattrib); extern int32_t rtw_put_snap(uint8_t *data, int h_proto); +extern void rtw_update_protection(_adapter *padapter, uint8_t *ie, unsigned int ie_len); extern void rtw_count_tx_stats(PADAPTER padapter, struct xmit_frame *pxmitframe, uint64_t sz); extern int32_t rtw_free_xmitbuf_ext(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf, int a3); extern struct list_head *rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv, _irqL a2); extern int32_t rtw_free_xmitframe(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe); +extern void rtw_free_xmitframe_queue(struct xmit_priv *pxmitpriv, _queue *pframequeue); extern struct tx_servq *rtw_get_sta_pending(_adapter *padapter, struct sta_info *psta, sint up, uint8_t *ac); extern struct sta_info *rtw_xmit_classifier(_adapter *padapter, struct xmit_frame *pxmitframe); extern BOOL rtw_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe); +extern void rtw_alloc_hwxmits(_adapter *padapter); +extern void rtw_free_hwxmits(_adapter *padapter); +extern void rtw_free_xmit_priv(struct xmit_priv *pxmitpriv); extern void rtw_init_hwxmits(struct hw_xmit *phwxmit, sint entry); +extern int32_t rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, _adapter *padapter); extern signed int rtw_get_ff_hwaddr(struct xmit_frame *pxmitframe); extern sint xmitframe_enqueue_for_sleeping_sta(_adapter *padapter, struct xmit_frame *pxmitframe); +extern void dequeue_xmitframes_to_sleeping_queue(_adapter *padapter, struct sta_info *psta, _queue *pframequeue); extern void stop_sta_xmit(_adapter *padapter, struct sta_info *psta); extern void wakeup_sta_to_xmit(_adapter *padapter, struct sta_info *psta); extern void xmit_delivery_enabled_frames(_adapter *padapter, struct sta_info *psta, int a3); +extern void rtw_xmit_tasklet(thread_context context); extern int32_t rtw_xmit(_adapter *padapter, _pkt **ppkt); +extern BOOL rtw_sctx_chk_waring_status(int status); extern void rtw_sctx_done_err(struct submit_ctx **sctx, int status); extern struct list_head *rtw_alloc_xmitbuf(struct xmit_priv *pxmitpriv, _irqL a2); extern int32_t rtw_free_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf, int a3); extern struct xmit_buf *rtw_alloc_xmitbuf_ext(struct xmit_priv *pxmitpriv, uint32_t size, int a3); extern void rtw_sctx_done(struct submit_ctx **sctx); -*/ // Data declarations //-------------------------------- // phydm_RegConfig8195A.o @@ -1512,9 +1438,7 @@ extern void odm_ConfigRF_RadioA_8195A(PDM_ODM_T pDM_Odm, u4Byte Addr, u4Byte Dat extern void odm_ConfigBB_AGC_8195A(PDM_ODM_T pDM_Odm, u4Byte Addr, u4Byte Bitmask, u4Byte Data); extern void odm_ConfigBB_PHY_REG_PG_8195A(PDM_ODM_T pDM_Odm, u4Byte Band, u4Byte RfPath, u4Byte TxNum, u4Byte Addr, u4Byte Bitmask, u4Byte Data); extern void odm_ConfigBB_PHY_8195A(PDM_ODM_T pDM_Odm, u4Byte Addr, u4Byte Bitmask, u4Byte Data); -/* extern void odm_ConfigBB_TXPWR_LMT_8195A(PDM_ODM_T pDM_Odm, int Regulation, int Band, int Bandwidth, u1Byte RateSection, u1Byte RfPath, u1Byte Channel, u1Byte PowerLimit); -*/ // Data declarations //-------------------------------- // lxbus_hci_intf.o @@ -1523,16 +1447,12 @@ extern struct dvobj_priv *hci_lxbus_dvobj_init(); extern void hci_lxbus_dvobj_deinit(struct dvobj_priv *dvobj); extern void hci_lxbus_dvobj_request_irq(struct dvobj_priv *dvobj); extern void hci_lxbus_free_irq(struct dvobj_priv *dvobj); -/* extern void hci_lxbus_intf_stop(PADAPTER padapter); -*/ // Data declarations //-------------------------------- // lxbus_intf.o // Function declarations -/* extern signed int lextra_bus_dma_Interrupt(void *data); -*/ // Data declarations //-------------------------------- // lxbus_ops.o @@ -1545,20 +1465,14 @@ extern uint32_t bus_read32(struct dvobj_priv *pintfhdl, uint32_t addr, int32_t * extern int bus_read16(struct dvobj_priv *pintfhdl, uint32_t addr, int32_t *err); extern int bus_read8(struct dvobj_priv *pintfhdl, uint32_t addr, int32_t *err); extern void rtl8195a_free_tx_ring(_adapter *padapter, unsigned int prio); +extern signed int rtl8195a_init_desc_ring(_adapter *padapter); +extern signed int rtl8195a_free_desc_ring(_adapter *padapter); +extern void rtl8195a_reset_desc_ring(_adapter *padapter, _irqL a2, int a3); extern void InitLxDmaRtl8195a(_adapter *Adapter); extern void rtl8195a_prepare_bcn_tasklet(void *priv); extern signed int get_txdesc_buf_addr(int ff_hwaddr); extern signed int rtl8195a_check_txdesc_closed(_adapter *padapter, uint32_t queue_idx, uint32_t index); extern void rtl8195a_tx_isr(PADAPTER Adapter, int prio); -extern signed int CheckRxTgRtl8195a(_adapter *padapter, uint8_t *rx_desc, uint16_t rx_queue_idx); -extern int rtl8192ee_check_rxdesc_remain(_adapter *padapter, int rx_queue_idx); -extern void rtl8195a_recv_tasklet(void *priv); -extern void rtl8195a_xmit_tasklet(void *priv); -extern void lxbus_set_intf_ops(struct _io_ops *pops); -/* -extern signed int rtl8195a_init_desc_ring(_adapter *padapter); -extern signed int rtl8195a_free_desc_ring(_adapter *padapter); -extern void rtl8195a_reset_desc_ring(_adapter *padapter, _irqL a2, int a3); extern signed int InterruptRecognized8195a(PADAPTER Adapter); extern void InitInterrupt8195a(PADAPTER padapter); extern void EnableDMA8195a(PADAPTER padapter); @@ -1566,9 +1480,13 @@ extern void EnableInterrupt8195a(PADAPTER padapter); extern void DisableDMA8195a(PADAPTER padapter); extern void DisableInterrupt8195a(PADAPTER padapter); extern void UpdateInterruptMask8195a(PADAPTER Adapter, uint32_t *pAddMSRB, uint32_t *pRemoveMSR); +extern signed int CheckRxTgRtl8195a(_adapter *padapter, uint8_t *rx_desc, uint16_t rx_queue_idx); +extern int rtl8192ee_check_rxdesc_remain(_adapter *padapter, int rx_queue_idx); +extern void rtl8195a_recv_tasklet(void *priv); extern void rtl8195a_tx_int_handler(_adapter *padapter, int a2, int a3); extern int32_t InterruptHandle8195a(_adapter *padapter, int a2, int a3); -*/ +extern void rtl8195a_xmit_tasklet(void *priv); +extern void lxbus_set_intf_ops(struct _io_ops *pops); // Data declarations extern uint8_t rx_ring_pool[4][2104]; extern u16 CSWTCH_48[8]; // = { 928, 932, 936, 940, 936, 944, 952, 936 }; @@ -1600,9 +1518,7 @@ extern BOOL Phydm_CalNHMcnt(PVOID pDM_VOID); extern void Phydm_CheckEnvironment(PVOID pDM_VOID); extern void Phydm_SearchPwdBLowerBound(PVOID pDM_VOID); extern void Phydm_AdaptivityInit(PVOID pDM_VOID); -/* extern void Phydm_Adaptivity(PVOID pDM_VOID, int IGI); -*/ // Data declarations //-------------------------------- // PhyDM_AntDiv.o @@ -1614,9 +1530,7 @@ extern void ODM_SwAntDivRestAfterLink(PDM_ODM_T pDM_Odm); // Function declarations extern void ODM_CfoTrackingInit(PVOID pDM_VOID); extern void ODM_CfoTracking(PVOID pDM_VOID); -/* extern void ODM_ParsingCFO(PVOID pDM_VOID, PVOID pPktinfo_VOID, s1Byte *pcfotail); -*/ // Data declarations //-------------------------------- // phydm_debug.o @@ -1689,8 +1603,7 @@ extern void odm_TXPowerTrackingThermalMeterInit(PVOID pDM_VOID); extern void odm_TXPowerTrackingCheckIOT(PVOID pDM_VOID); extern void ODM_TXPowerTrackingCheck(PVOID pDM_VOID); // Data declarations -/* -extern const u4Byte OFDMSwingTable_New[43] = +extern const u4Byte OFDMSwingTable_New[43]; /* = { 188743725u, 201326640u, 213909555u, 226492470u, 239075385u, 251658300u, 268435520u, 285212740u, 301989960u, 318767180u, 339738705u, 360710230u, 381681755u, 402653280u, @@ -1715,33 +1628,31 @@ extern u4Byte ODM_Get_Rate_Bitmap(PVOID pDM_VOID, u4Byte macid, u4Byte ra_mask, //------------------------------------------------------------------------- // hal_com_phycfg.o // Function declarations -/* extern int PHY_GetTxPowerByRateBase(PADAPTER Adapter, int Band, int RfPath, int TxNum, RATE_SECTION RateSection); +extern void phy_SetTxPowerByRateBase(PADAPTER Adapter, int Band, int RfPath, RATE_SECTION RateSection, uint8_t TxNum, uint8_t Value); extern void PHY_GetRateValuesOfTxPowerByRate(PADAPTER pAdapter, uint32_t RegAddr, uint32_t BitMask, uint32_t Value, uint8_t *RateIndex, int8_t *PwrByRateVal, uint8_t *RateNum); +extern void PHY_StoreTxPowerByRateNew(PADAPTER pAdapter, uint32_t Band, uint32_t RfPath, uint32_t TxNum, uint32_t RegAddr, uint32_t BitMask, uint32_t Data); +extern void PHY_InitTxPowerByRate(PADAPTER pAdapter); extern void PHY_StoreTxPowerByRate(PADAPTER pAdapter, uint32_t Band, uint32_t RfPath, uint32_t TxNum, uint32_t RegAddr, uint32_t BitMask, uint32_t Data); +extern signed int phy_GetChnlIndex(int Channel, uint8_t *ChannelIdx); extern signed int PHY_GetTxPowerIndexBase(PADAPTER pAdapter, int RFPath, int Rate, CHANNEL_WIDTH BandWidth, uint8_t Channel, PBOOLEAN bIn24G); extern PADAPTER PHY_GetTxPowerTrackingOffset(PADAPTER result, int RFPath, int Rate); extern int PHY_GetRateIndexOfTxPowerByRate(uint8_t Rate); extern unsigned int PHY_GetTxPowerByRate(PADAPTER pAdapter, int Band, int RFPath, int TxNum, uint8_t Rate); +extern void phy_StoreTxPowerByRateBase(PADAPTER pAdapter); extern void PHY_SetTxPowerByRate(PADAPTER pAdapter, int Band, int RFPath, int TxNum, uint8_t Rate, int8_t Value); +extern void phy_ConvertTxPowerByRateInDbmToRelativeValues(PADAPTER pAdapter); +extern void PHY_TxPowerByRateConfiguration(PADAPTER pAdapter); extern void PHY_SetTxPowerIndexByRateArray(PADAPTER pAdapter, int RFPath, CHANNEL_WIDTH BandWidth, uint8_t Channel, uint8_t *Rates, uint8_t RateArraySize); extern void PHY_SetTxPowerIndexByRateSection(PADAPTER pAdapter, int RFPath, uint8_t Channel, int RateSection); extern void PHY_SetTxPowerLevelByPath(PADAPTER Adapter, uint8_t channel, int path); -extern int PHY_GetTxPowerLimit(PADAPTER Adapter, uint32_t RegPwrTblSel, BAND_TYPE Band, CHANNEL_WIDTH Bandwidth, uint8_t RfPath, uint8_t DataRate, uint8_t Channel); -extern void PHY_SetTxPowerLimit(PADAPTER Adapter, int Regulation, int Band, int Bandwidth, uint8_t RateSection, uint8_t RfPath, uint8_t Channel, uint8_t PowerLimit); -extern int PHY_GetTxPowerIndex(PADAPTER pAdapter, int RFPath, int Rate, CHANNEL_WIDTH BandWidth, uint8_t Channel); -*/ -extern void PHY_ConvertTxPowerLimitToPowerIndex(PADAPTER Adapter); -extern void PHY_InitTxPowerLimit(PADAPTER Adapter); -extern void phy_StoreTxPowerByRateBase(PADAPTER pAdapter); -extern void phy_ConvertTxPowerByRateInDbmToRelativeValues(PADAPTER pAdapter); -extern void PHY_TxPowerByRateConfiguration(PADAPTER pAdapter); extern signed int phy_GetWorldWideLimit(int8_t *LimitTable, int regulation, int16_t channel); extern int phy_GetChannelIndexOfTxPowerLimit(int Band, uint8_t Channel); -extern void PHY_StoreTxPowerByRateNew(PADAPTER pAdapter, uint32_t Band, uint32_t RfPath, uint32_t TxNum, uint32_t RegAddr, uint32_t BitMask, uint32_t Data); -extern void phy_SetTxPowerByRateBase(PADAPTER Adapter, int Band, int RfPath, RATE_SECTION RateSection, uint8_t TxNum, uint8_t Value); -extern void PHY_InitTxPowerByRate(PADAPTER pAdapter); -extern signed int phy_GetChnlIndex(int Channel, uint8_t *ChannelIdx); +extern int PHY_GetTxPowerLimit(PADAPTER Adapter, uint32_t RegPwrTblSel, BAND_TYPE Band, CHANNEL_WIDTH Bandwidth, uint8_t RfPath, uint8_t DataRate, uint8_t Channel); +extern void PHY_ConvertTxPowerLimitToPowerIndex(PADAPTER Adapter); +extern void PHY_InitTxPowerLimit(PADAPTER Adapter); +extern void PHY_SetTxPowerLimit(PADAPTER Adapter, int Regulation, int Band, int Bandwidth, uint8_t RateSection, uint8_t RfPath, uint8_t Channel, uint8_t PowerLimit); +extern int PHY_GetTxPowerIndex(PADAPTER pAdapter, int RFPath, int Rate, CHANNEL_WIDTH BandWidth, uint8_t Channel); // Data declarations //------------------------------------------------------------------------- // Data declarations @@ -1772,6 +1683,7 @@ extern signed int Hal_EfuseWordEnableDataWrite(PADAPTER padapter, int efuse_addr extern void Hal_EfusePowerSwitch(PADAPTER padapter, int bWrite, int PwrState); extern void rtl8195a_free_hal_data(PADAPTER padapter); extern void StopTxBeacon(PADAPTER padapter); +extern void SetHalODMVar8195A(PADAPTER Adapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1, int bSet); extern void rtl8195a_start_thread(_adapter *padapter); extern void rtl8195a_stop_thread(_adapter *padapter); extern void Hal_ReadEFuse(PADAPTER padapter, int efuseType, int _offset, int _size_byte, uint8_t *pbuf, uint8_t bPseudoTest); @@ -1781,43 +1693,36 @@ extern void rtw_flash_map_erase(PADAPTER padapter, int a2, int a3, uint32_t a4); extern int32_t Hal_EfusePgPacketWrite(PADAPTER padapter, uint8_t offset, int word_en, uint8_t *pData, uint8_t bPseudoTest); extern int Hal_EfuseGetCurrentSize(PADAPTER pAdapter, uint8_t efuseType, int bPseudoTest); extern signed int rtw_flash_map_write(PADAPTER padapter, uint16_t addr, uint16_t cnts, uint8_t *data); +extern int32_t rtl8195a_FirmwareDownload(PADAPTER padapter, BOOLEAN bUsedWoWLANFw); extern void rtl8195a_InitBeaconParameters(PADAPTER padapter); extern void InitBurstPktLen_8195AB(PADAPTER Adapter); extern void rtl8195a_set_hal_ops(struct hal_ops *pHalFunc); -extern signed int Hal_GetChnlGroup8195A(int Channel, uint8_t *pGroup); -extern void Hal_EfuseParseIDCode(PADAPTER padapter, uint8_t *hwinfo); -extern void Hal_ReadPowerValueFromPROM_8195A(PADAPTER Adapter, PTxPowerInfo24G pwrInfo24G, uint8_t *PROMContent, int AutoLoadFail); -extern void Hal_EfuseParsePackageType_8195A(PADAPTER pAdapter, uint8_t *hwinfo, int a3); -extern void Hal_EfuseParseChnlPlan_8195A(PADAPTER padapter, uint8_t *hwinfo, BOOLEAN AutoLoadFail); -extern int BWMapping_8195A(PADAPTER Adapter, struct pkt_attrib *pattrib); -extern signed int SCMapping_8195A(PADAPTER Adapter, struct pkt_attrib *pattrib); -extern void rtl8195a_update_txdesc(struct xmit_frame *pxmitframe, uint8_t *pbuf); -/* -extern void SetHalODMVar8195A(PADAPTER Adapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1, int bSet); -extern int32_t rtl8195a_FirmwareDownload(PADAPTER padapter, BOOLEAN bUsedWoWLANFw); extern int32_t rtl8195a_InitLLTTable(PADAPTER padapter); +extern signed int Hal_GetChnlGroup8195A(int Channel, uint8_t *pGroup); extern signed int rtw_flash_read(PADAPTER padapter, int addr, int cnts, uint8_t *data); extern signed int rtw_flash_write(PADAPTER padapter, int addr, int cnts, uint8_t *data); extern int rtw_config_map_read(PADAPTER padapter, int addr, int cnts, uint8_t *data, uint8_t efuse); extern int rtw_config_map_write(PADAPTER padapter, int addr, int cnts, uint8_t *data, uint8_t efuse); extern void Hal_InitPGData(PADAPTER padapter, uint8_t *PROMContent, int a3, int a4); +extern void Hal_EfuseParseIDCode(PADAPTER padapter, uint8_t *hwinfo); +extern void Hal_ReadPowerValueFromPROM_8195A(PADAPTER Adapter, PTxPowerInfo24G pwrInfo24G, uint8_t *PROMContent, int AutoLoadFail); extern void Hal_EfuseParseTxPowerInfo_8195A(PADAPTER padapter, uint8_t *PROMContent, int AutoLoadFail); extern void Hal_EfuseParseEEPROMVer_8195A(PADAPTER padapter, uint8_t *hwinfo, int AutoLoadFail); +extern void Hal_EfuseParsePackageType_8195A(PADAPTER pAdapter, uint8_t *hwinfo, int a3); +extern void Hal_EfuseParseChnlPlan_8195A(PADAPTER padapter, uint8_t *hwinfo, BOOLEAN AutoLoadFail); extern void Hal_EfuseParseCustomerID_8195A(PADAPTER padapter, uint8_t *hwinfo, int AutoLoadFail); extern void Hal_EfuseParseXtal_8195A(PADAPTER pAdapter, uint8_t *hwinfo, int AutoLoadFail); extern void Hal_EfuseParseThermalMeter_8195A(PADAPTER padapter, uint8_t *PROMContent, int AutoLoadFail); extern void Hal_ReadRFGainOffset(PADAPTER Adapter, uint8_t *PROMContent, int AutoloadFail); +extern int BWMapping_8195A(PADAPTER Adapter, struct pkt_attrib *pattrib); +extern signed int SCMapping_8195A(PADAPTER Adapter, struct pkt_attrib *pattrib); +extern void rtl8195a_update_txdesc(struct xmit_frame *pxmitframe, uint8_t *pbuf); extern void rtl8195a_fill_fake_txdesc(PADAPTER padapter, uint8_t *pDesc, uint32_t BufferLen, int IsPsPoll, uint8_t IsBTQosNull, uint8_t bDataFrame); extern void SetHwReg8195A(PADAPTER padapter, int variable, uint8_t *val); extern void GetHwReg8195A(PADAPTER padapter, int variable, uint8_t *val); extern signed int SetHalDefVar8195A(PADAPTER padapter, HAL_DEF_VARIABLE variable, void *pval); extern signed int GetHalDefVar8195A(PADAPTER padapter, HAL_DEF_VARIABLE variable, void *pval); -*/ // Data declarations -struct map_mask_s { - uint16_t mask_start; - uint16_t mask_end; -}; extern const struct map_mask_s efuse_map_mask[4]; // = { { 32u, 207u }, { 220u, 221u }, { 282u, 311u }, { 313u, 319u } }; extern const struct map_mask_s flash_map_mask[2]; // = { { 32u, 311u }, { 313u, 319u } }; //-------------------------------- @@ -1826,26 +1731,24 @@ extern const struct map_mask_s flash_map_mask[2]; // = { { 32u, 311u }, { 313u, extern int rtw_ht_operation_update(_adapter *padapter); extern void associated_clients_update_0(_adapter *padapter, int updated, int a3); extern signed int chk_sta_is_alive(struct sta_info *psta); +extern void add_RATid(_adapter *padapter, struct sta_info *psta, int rssi_level); +extern void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta, int a3); +extern void update_beacon(_adapter *padapter, int ie_id, uint8_t *oui, uint8_t tx); extern int rtw_check_beacon_data(_adapter *padapter, uint8_t *pbuf, int len); +extern void associated_clients_update(_adapter *padapter, int updated, int a3); extern void bss_cap_update_on_sta_join(_adapter *padapter, struct sta_info *psta); +extern signed int bss_cap_update_on_sta_leave(_adapter *padapter, struct sta_info *psta); +extern signed int ap_free_sta(_adapter *padapter, struct sta_info *psta, int reason); extern void expire_timeout_chk(_adapter *padapter); extern int rtw_sta_flush(_adapter *padapter); +extern void free_mlme_ap_info(_adapter *padapter, _irqL a2); extern void sta_info_update(_adapter *padapter, struct sta_info *psta); extern void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta); extern void start_ap_mode(_adapter *padapter); extern void init_mlme_ap_info(_adapter *padapter); -extern int set_hidden_ssid(const char *ifname, uint8_t value); -/* -extern void add_RATid(_adapter *padapter, struct sta_info *psta, int rssi_level); -extern void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta, int a3); -extern void update_beacon(_adapter *padapter, int ie_id, uint8_t *oui, uint8_t tx); -extern void associated_clients_update(_adapter *padapter, int updated, int a3); -extern signed int bss_cap_update_on_sta_leave(_adapter *padapter, struct sta_info *psta); -extern signed int ap_free_sta(_adapter *padapter, struct sta_info *psta, int reason); -extern void free_mlme_ap_info(_adapter *padapter, _irqL a2); extern void stop_ap_mode(_adapter *padapter, _irqL a2); extern uint32_t rtw_generate_bcn_ie(_adapter *adapter, uint8_t *ssid, int ssid_len, uint8_t *ie); -*/ +extern int set_hidden_ssid(const char *ifname, uint8_t value); // Data declarations //-------------------------------- diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm.h index ac34dbb..e7f015e 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm.h @@ -1277,7 +1277,7 @@ typedef struct DM_Out_Source_Dynamic_Mechanism_Structure //-----------HOOK BEFORE REG INIT-----------// // ODM Platform info AP/ADSL/CE/MP = 1/2/3/4 u1Byte SupportPlatform; - // ODM Support Ability DIG/RATR/TX_PWR_TRACK/ �K�K = 1/2/3/�K + // ODM Support Ability DIG/RATR/TX_PWR_TRACK/ KK = 1/2/3/K u4Byte SupportAbility; // ODM PCIE/USB/SDIO = 1/2/3 u1Byte SupportInterface; @@ -1491,7 +1491,7 @@ typedef struct DM_Out_Source_Dynamic_Mechanism_Structure PROM_INFO pROMInfo; FALSE_ALARM_STATISTICS FalseAlmCnt; - CFO_TRACKING DM_CfoTrack; + CFO_TRACKING DM_CfoTrack; FALSE_ALARM_STATISTICS FlaseAlmCntBuddyAdapter; //#ifdef CONFIG_ANTENNA_DIVERSITY diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_types.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_types.h index 07332d5..71cbafc 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_types.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_types.h @@ -375,10 +375,10 @@ typedef enum _RT_SPINLOCK_TYPE{ typedef unsigned short u2Byte,*pu2Byte; typedef unsigned int u4Byte,*pu4Byte; typedef unsigned long long u8Byte,*pu8Byte; - typedef signed char s1Byte,*ps1Byte; /* GCC ROM char = unsigned char */ + typedef signed char s1Byte,*ps1Byte; /* GCC ROM char = unsigned char */ typedef signed short s2Byte,*ps2Byte; - typedef signed long s4Byte,*ps4Byte; - typedef long long s8Byte,*ps8Byte; + typedef signed long s4Byte,*ps4Byte; + typedef long long s8Byte,*ps8Byte; typedef struct sta_info STA_INFO_T,*PSTA_INFO_T; diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/ROM_RTL8195A_PHYDM.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/ROM_RTL8195A_PHYDM.h index 09ce243..7123055 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/ROM_RTL8195A_PHYDM.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/ROM_RTL8195A_PHYDM.h @@ -20,7 +20,6 @@ #ifndef __ROM_RTL8195A_PHYDM_H__ #define __ROM_RTL8195A_PHYDM_H__ -#ifndef _RTL_BIOS_DATA_H_ typedef struct _FALSE_ALARM_STATISTICS{ u4Byte Cnt_Parity_Fail; u4Byte Cnt_Rate_Illegal; @@ -57,19 +56,16 @@ typedef struct _CFO_TRACKING_ u1Byte CFO_TH_ATC; }CFO_TRACKING, *PCFO_TRACKING; - -extern FALSE_ALARM_STATISTICS FalseAlmCnt; -extern CFO_TRACKING DM_CfoTrack; - typedef struct _ROM_INFO{ u1Byte EEPROMVersion; u1Byte CrystalCap; u8Byte DebugComponents; u4Byte DebugLevel; -} ROM_INFO, *PROM_INFO; +}ROM_INFO, *PROM_INFO; +extern FALSE_ALARM_STATISTICS FalseAlmCnt; +extern CFO_TRACKING DM_CfoTrack; extern ROM_INFO ROMInfo; -#endif u1Byte ROM_odm_QueryRxPwrPercentage( diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/osdep/freertos/wrapper.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/osdep/freertos/wrapper.h index c2ddd40..52870d2 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/osdep/freertos/wrapper.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/osdep/freertos/wrapper.h @@ -414,7 +414,7 @@ struct net_device_stats { struct net_device { char name[16]; void *priv; /* pointer to private data */ - unsigned char dev_addr[6]; /* set during bootup */ + unsigned char dev_addr[6]; /* set during bootup */ int (*init)(void); int (*open)(struct net_device *dev); int (*stop)(struct net_device *dev); @@ -444,13 +444,11 @@ int dev_alloc_name(struct net_device *net_dev, const char *ifname); //----- ------------------------------------------------------------------ void init_timer(struct timer_list *timer); void mod_timer(struct timer_list *timer, u32 delay_time_ms); -void cancel_timer_ex(struct timer_list * timer); +void cancel_timer_ex(struct timer_list * timer); void del_timer_sync(struct timer_list * timer); void init_timer_wrapper(void); void deinit_timer_wrapper(void); -typedef void (*TIMER_FUN)(void *context); - void rtw_init_timer(_timer *ptimer, void *adapter, TIMER_FUN pfunc,void* cntx, const char *name); void rtw_set_timer(_timer *ptimer,u32 delay_time); u8 rtw_cancel_timer(_timer *ptimer); diff --git a/RTL00_SDKV35a/component/common/example/uart_atcmd/example_uart_atcmd.c b/RTL00_SDKV35a/component/common/example/uart_atcmd/example_uart_atcmd.c index 4ce302f..7cf064c 100644 --- a/RTL00_SDKV35a/component/common/example/uart_atcmd/example_uart_atcmd.c +++ b/RTL00_SDKV35a/component/common/example/uart_atcmd/example_uart_atcmd.c @@ -165,7 +165,7 @@ int read_uart_atcmd_setting_from_system_data(UART_LOG_CONF* uartconf) if(load_default == _TRUE){ // load default setting - uartconf->BaudRate = UART_BAUD_RATE_38400; + uartconf->BaudRate = DEFAULT_BAUDRATE; uartconf->DataBits = 8; uartconf->Parity = ParityNone; uartconf->StopBits = 1; diff --git a/RTL00_SDKV35a/component/common/example/wlan_fast_connect/example_wlan_fast_connect.c b/RTL00_SDKV35a/component/common/example/wlan_fast_connect/example_wlan_fast_connect.c index c9fa95e..0db5390 100644 --- a/RTL00_SDKV35a/component/common/example/wlan_fast_connect/example_wlan_fast_connect.c +++ b/RTL00_SDKV35a/component/common/example/wlan_fast_connect/example_wlan_fast_connect.c @@ -107,7 +107,14 @@ int wlan_init_done_callback() // rtw_network_info_t *wifi; // SC_connect_to_candidate_AP // SC_parse_scan_result_and_connect(); - if (wifi_connect(data->psk_essid, data->security_type, data->psk_passphrase, strlen(data->psk_essid), strlen(data->psk_passphrase), RTW_SECURITY_OPEN, NULL) == RTW_SUCCESS) { + if (wifi_connect( + NULL, + 0, + data->psk_essid, + data->security_type, + data->psk_passphrase, + RTW_SECURITY_OPEN, + NULL) == RTW_SUCCESS) { #else //set partial scan for entering to listen beacon quickly channel = data->channel & 0xFF; @@ -124,7 +131,14 @@ int wlan_init_done_callback() u8 bssid[ETH_ALEN] = { 0xbc,0xae,0xc5,0xeb,0x09,0x90 }; // if (wifi_connect(data->psk_essid, data->security_type, data->psk_passphrase, strlen(data->psk_essid), strlen(data->psk_passphrase), RTW_SECURITY_OPEN, NULL) == RTW_SUCCESS) { - if (wifi_connect_bssid(bssid, data->psk_essid, data->security_type, data->psk_passphrase, ETH_ALEN, strlen(data->psk_essid), strlen(data->psk_passphrase), data->channel>>28, NULL) == RTW_SUCCESS) { + if (wifi_connect( + bssid, + 1, + data->psk_essid, + data->security_type, + data->psk_passphrase, + data->channel>>28, + NULL) == RTW_SUCCESS) { #endif // DBG_8195A("WiFi connected at start %dms\n", xTaskGetTickCount()); #if CONFIG_LWIP_LAYER diff --git a/RTL00_SDKV35a/component/common/mbed/hal/analogin_api.h b/RTL00_SDKV35a/component/common/mbed/hal/analogin_api.h index 98d02c1..57d25eb 100644 --- a/RTL00_SDKV35a/component/common/mbed/hal/analogin_api.h +++ b/RTL00_SDKV35a/component/common/mbed/hal/analogin_api.h @@ -24,7 +24,7 @@ extern "C" { #endif -typedef struct analogin_s analogin_t; +typedef struct analogin_s analogin_t; // 444 bytes! void analogin_init (analogin_t *obj, PinName pin); float analogin_read (analogin_t *obj); diff --git a/RTL00_SDKV35a/component/common/mbed/hal/pwmout_api.h b/RTL00_SDKV35a/component/common/mbed/hal/pwmout_api.h index 6557fcd..5e94363 100644 --- a/RTL00_SDKV35a/component/common/mbed/hal/pwmout_api.h +++ b/RTL00_SDKV35a/component/common/mbed/hal/pwmout_api.h @@ -26,19 +26,19 @@ extern "C" { typedef struct pwmout_s pwmout_t; -void pwmout_init (pwmout_t* obj, PinName pin); +int pwmout_init (pwmout_t* obj, PinName pin); // != 0 - error void pwmout_free (pwmout_t* obj); -void pwmout_write (pwmout_t* obj, float percent); -float pwmout_read (pwmout_t* obj); +//void pwmout_write (pwmout_t* obj, float percent); +//float pwmout_read (pwmout_t* obj); -void pwmout_period (pwmout_t* obj, float seconds); -void pwmout_period_ms (pwmout_t* obj, int ms); -void pwmout_period_us (pwmout_t* obj, int us); +//void pwmout_period (pwmout_t* obj, float seconds); +//void pwmout_period_ms (pwmout_t* obj, int ms); +void pwmout_period_us (pwmout_t* obj, uint32_t us); -void pwmout_pulsewidth (pwmout_t* obj, float seconds); -void pwmout_pulsewidth_ms(pwmout_t* obj, int ms); -void pwmout_pulsewidth_us(pwmout_t* obj, int us); +//void pwmout_pulsewidth (pwmout_t* obj, float seconds); +//void pwmout_pulsewidth_ms(pwmout_t* obj, uint32_t ms); +void pwmout_pulsewidth_us(pwmout_t* obj, uint32_t us); #ifdef __cplusplus } 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 d39f24c..09b6cf6 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 @@ -119,6 +119,14 @@ void analogin_init (analogin_t *obj, PinName pin){ float analogin_read(analogin_t *obj){ float value; + union { + unsigned int ui[2]; + unsigned short us[4]; + } adata; + PSAL_ADC_HND p = &((&(obj->SalADCMngtAdpt))->pSalHndPriv->SalADCHndPriv); + RtkADCReceiveBuf(p, &adata.ui); + return (float)(adata.us[p->DevNum]) / (float)(0xCE80); +/* uint32_t AnaloginTmp[2] = {0,0}; uint32_t AnaloginDatMsk = 0xFFFF; uint8_t AnaloginIdx = 0; @@ -144,9 +152,18 @@ float analogin_read(analogin_t *obj){ value = (float)(AnalogDat) / (float)(AnalogDatFull); return (float)value; +*/ } uint16_t analogin_read_u16(analogin_t *obj){ + union { + unsigned int ui[2]; + unsigned short us[4]; + } adata; + PSAL_ADC_HND p = &((&(obj->SalADCMngtAdpt))->pSalHndPriv->SalADCHndPriv); + RtkADCRxManualRotate(p, &adata.ui); + return adata.us[p->DevNum]; +/* uint32_t AnaloginTmp[2] = {0,0}; uint32_t AnaloginDatMsk = 0xFFFF; uint8_t AnaloginIdx = 0; @@ -166,20 +183,23 @@ uint16_t analogin_read_u16(analogin_t *obj){ AnalogDat = AnaloginTmp[(AnaloginIdx/2)]; AnalogDat = (AnalogDat & AnaloginDatMsk); AnalogDat = (AnalogDat>>((u32)(16*(AnaloginIdx&0x01)))); - return (uint16_t)AnalogDat; +*/ } void analogin_deinit(analogin_t *obj){ - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; +/* + PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; PSAL_ADC_HND pSalADCHND = NULL; pSalADCMngtAdpt = &(obj->SalADCMngtAdpt); - pSalADCHND = &(pSalADCMngtAdpt->pSalHndPriv->SalADCHndPriv); + p = &(pSalADCMngtAdpt->pSalHndPriv->SalADCHndPriv); */ + + PSAL_ADC_HND p = &((&(obj->SalADCMngtAdpt))->pSalHndPriv->SalADCHndPriv); /* To deinit analogin */ - RtkADCDeInit(pSalADCHND); + RtkADCDeInit(p); } #endif 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 321c152..fc284a7 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 @@ -119,7 +119,7 @@ void log_uart_free(log_uart_t *obj) ACTCK_LOG_UART_CCTRL(ON); //4 Inital Log uart - UartAdapter.BaudRate = UART_BAUD_RATE_38400; + UartAdapter.BaudRate = DEFAULT_BAUDRATE; UartAdapter.DataLength = UART_DATA_LEN_8BIT; UartAdapter.FIFOControl = 0xC1; UartAdapter.IntEnReg = 0x00; 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 40802d3..d2d7d31 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 @@ -3,9 +3,8 @@ * Copyright (c) 2014, Realtek Semiconductor Corp. * All rights reserved. * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. ******************************************************************************* + * bug fixing: pvvx */ #include "device.h" @@ -18,8 +17,10 @@ #ifdef CONFIG_PWM_EN #include "pwmout_api.h" #include "objects.h" + +extern u32 gTimerRecord; -static const PinMap PinMap_PWM[] = { +const PinMap PinMap_PWM[] = { {PB_4, RTL_PIN_PERI(PWM0, 0, S0), RTL_PIN_FUNC(PWM0, S0)}, {PB_5, RTL_PIN_PERI(PWM1, 1, S0), RTL_PIN_FUNC(PWM1, S0)}, {PB_6, RTL_PIN_PERI(PWM2, 2, S0), RTL_PIN_FUNC(PWM2, S0)}, @@ -43,7 +44,7 @@ static const PinMap PinMap_PWM[] = { {NC, NC, 0} }; -void pwmout_init(pwmout_t* obj, PinName pin) +int pwmout_init(pwmout_t* obj, PinName pin) { uint32_t peripheral; u32 pwm_idx; @@ -56,7 +57,7 @@ void pwmout_init(pwmout_t* obj, PinName pin) if (unlikely(peripheral == NC)) { DBG_PWM_ERR("%s: Cannot find matched pwm for this pin(0x%x)\n", __FUNCTION__, pin); - return; + return -1; } pwm_idx = RTL_GET_PERI_IDX(peripheral); @@ -66,75 +67,33 @@ void pwmout_init(pwmout_t* obj, PinName pin) obj->pin_sel = pin_sel; obj->period = 0; obj->pulse = 0; - _memset((void *)&obj->pwm_hal_adp, 0, sizeof(HAL_PWM_ADAPTER)); + rtl_memset((void *)&obj->pwm_hal_adp, 0, sizeof(HAL_PWM_ADAPTER)); if (HAL_OK != HAL_Pwm_Init(&obj->pwm_hal_adp, pwm_idx, pin_sel)) { DBG_PWM_ERR("pwmout_init Err!\n"); - return; + return -1; } - pwmout_period_us(obj, 20000); // 20 ms per default - HAL_Pwm_Enable(&obj->pwm_hal_adp); +// pwmout_period_us(obj, 20000); // 20 ms per default +// HAL_Pwm_Enable(&obj->pwm_hal_adp); + return 0; } void pwmout_free(pwmout_t* obj) { HAL_Pwm_Disable(&obj->pwm_hal_adp); + gTimerRecord &= ~(1 << obj->pwm_hal_adp.gtimer_id); } -void pwmout_write(pwmout_t* obj, float value) +void pwmout_period_us(pwmout_t* obj, uint32_t us) { - if (value < (float)0.0) { - value = 0.0; - } - else if (value > (float)1.0) { - value = 1.0; - } - - obj->pulse = (uint32_t)((float)obj->period * value); - HAL_Pwm_SetDuty(&obj->pwm_hal_adp, obj->period, obj->pulse); + obj->period = us; + HAL_Pwm_SetDuty(&obj->pwm_hal_adp, us, obj->pulse); } -float pwmout_read(pwmout_t* obj) +void pwmout_pulsewidth_us(pwmout_t* obj, uint32_t us) { - float value = 0; - if (obj->period > 0) { - value = (float)(obj->pulse) / (float)(obj->period); - } - return ((value > (float)1.0) ? (float)(1.0) : (value)); -} - -void pwmout_period(pwmout_t* obj, float seconds) -{ - pwmout_period_us(obj, (int)(seconds * 1000000.0f)); -} - -void pwmout_period_ms(pwmout_t* obj, int ms) -{ - pwmout_period_us(obj, (int)(ms * 1000)); -} - -void pwmout_period_us(pwmout_t* obj, int us) -{ - float dc = pwmout_read(obj); - - obj->period = us; - // Set duty cycle again - pwmout_write(obj, dc); -} - -void pwmout_pulsewidth(pwmout_t* obj, float seconds) -{ - pwmout_pulsewidth_us(obj, (int)(seconds * 1000000.0f)); -} - -void pwmout_pulsewidth_ms(pwmout_t* obj, int ms) -{ - pwmout_pulsewidth_us(obj, ms * 1000); -} - -void pwmout_pulsewidth_us(pwmout_t* obj, int us) -{ - float value = (float)us / (float)obj->period; - pwmout_write(obj, value); + obj->pulse = us; + if(us > obj->period) obj->period = us; + HAL_Pwm_SetDuty(&obj->pwm_hal_adp, obj->period, us); } #endif // #ifdef CONFIG_PWM_EN 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 ef90f22..85b152a 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 @@ -158,12 +158,10 @@ void sys_log_uart_off(void) void sys_adc_calibration(u8 write, u16 *offset, u16 *gain) { - flash_t flash; - u8* pbuf; - +extern flash_t flash; if(write){ // backup - pbuf = RtlMalloc(FLASH_SECTOR_SIZE); + u8 *pbuf = RtlMalloc(FLASH_SECTOR_SIZE); if(!pbuf) return; device_mutex_lock(RT_DEV_LOCK_FLASH); flash_stream_read(&flash, FLASH_SYSTEM_DATA_ADDR, FLASH_SECTOR_SIZE, pbuf); @@ -172,7 +170,7 @@ void sys_adc_calibration(u8 write, u16 *offset, u16 *gain) flash_erase_sector(&flash, FLASH_RESERVED_DATA_BASE); flash_stream_write(&flash, FLASH_RESERVED_DATA_BASE, FLASH_SECTOR_SIZE, pbuf); // Write - flash_stream_read(&flash, FLASH_RESERVED_DATA_BASE, FLASH_SECTOR_SIZE, pbuf); +// flash_stream_read(&flash, FLASH_RESERVED_DATA_BASE, FLASH_SECTOR_SIZE, pbuf); flash_erase_sector(&flash, FLASH_SYSTEM_DATA_ADDR); flash_stream_write(&flash, FLASH_SYSTEM_DATA_ADDR, FLASH_SECTOR_SIZE, pbuf); device_mutex_unlock(RT_DEV_LOCK_FLASH); 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 92fa8b7..51b32ea 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 @@ -41,22 +41,22 @@ #ifdef LWIP_DEBUG static const char *err_strerr[] = { - "Ok.", /* ERR_OK 0 */ - "Out of memory error.", /* ERR_MEM -1 */ - "Buffer error.", /* ERR_BUF -2 */ - "Timeout.", /* ERR_TIMEOUT -3 */ - "Routing problem.", /* ERR_RTE -4 */ - "Operation in progress.", /* ERR_INPROGRESS -5 */ - "Illegal value.", /* ERR_VAL -6 */ - "Operation would block.", /* ERR_WOULDBLOCK -7 */ - "Address in use.", /* ERR_USE -8 */ - "Already connected.", /* ERR_ISCONN -9 */ - "Connection aborted.", /* ERR_ABRT -10 */ - "Connection reset.", /* ERR_RST -11 */ - "Connection closed.", /* ERR_CLSD -12 */ - "Not connected.", /* ERR_CONN -13 */ - "Illegal argument.", /* ERR_ARG -14 */ - "Low-level netif error.", /* ERR_IF -15 */ + "Ok", /* ERR_OK 0 */ + "Out of memory error", /* ERR_MEM -1 */ + "Buffer error", /* ERR_BUF -2 */ + "Timeout", /* ERR_TIMEOUT -3 */ + "Routing problem", /* ERR_RTE -4 */ + "Operation in progress", /* ERR_INPROGRESS -5 */ + "Illegal value", /* ERR_VAL -6 */ + "Operation would block", /* ERR_WOULDBLOCK -7 */ + "Address in use", /* ERR_USE -8 */ + "Already connected", /* ERR_ISCONN -9 */ + "Connection aborted", /* ERR_ABRT -10 */ + "Connection reset", /* ERR_RST -11 */ + "Connection closed", /* ERR_CLSD -12 */ + "Not connected", /* ERR_CONN -13 */ + "Illegal argument", /* ERR_ARG -14 */ + "Low-level netif error", /* ERR_IF -15 */ }; /** 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 9458895..5669497 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 @@ -184,7 +184,6 @@ void lwip_socket_init(void) { } - /** * Map a externally used socket index to the internal socket representation. * @@ -213,6 +212,14 @@ get_socket(int s) return sock; } +/* + * pvvx: errno + */ +int lwip_last_err_socket(int s) { + struct lwip_sock * sc = get_socket(s); + if(sc) return sc->err; + else return EBADF; +} /** * Same as get_socket but doesn't set errno * diff --git a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/include/lwip/sockets.h b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/include/lwip/sockets.h index 3ea32f1..167ec1c 100644 --- a/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/include/lwip/sockets.h +++ b/RTL00_SDKV35a/component/common/network/lwip/lwip_v1.4.1/src/include/lwip/sockets.h @@ -342,6 +342,8 @@ int lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptse int lwip_ioctl(int s, long cmd, void *argp); int lwip_fcntl(int s, int cmd, int val); +int lwip_last_err_socket(int s); // errno + #if LWIP_COMPAT_SOCKETS #define accept(a,b,c) lwip_accept(a,b,c) #define bind(a,b,c) lwip_bind(a,b,c) @@ -361,6 +363,7 @@ int lwip_fcntl(int s, int cmd, int val); #define select(a,b,c,d,e) lwip_select(a,b,c,d,e) #define ioctlsocket(a,b,c) lwip_ioctl(a,b,c) + #if LWIP_POSIX_SOCKETS_IO_NAMES #define read(a,b,c) lwip_read(a,b,c) #define write(a,b,c) lwip_write(a,b,c) diff --git a/RTL00_SDKV35a/component/common/network/netbios/netbios.c b/RTL00_SDKV35a/component/common/network/netbios/netbios.c index 1b4a066..cb0db96 100644 --- a/RTL00_SDKV35a/component/common/network/netbios/netbios.c +++ b/RTL00_SDKV35a/component/common/network/netbios/netbios.c @@ -163,13 +163,12 @@ PACK_STRUCT_END # include "arch/epstruct.h" #endif -LOCAL char toupper(char ch) { - return ((ch >= 'a' && ch <= 'z') ? ch - 'a' + 'A' : ch); -} +//#define toupper(CH) \ +// (((CH) >= 'a' && (CH) <= 'z') ? ((CH) - 'a' + 'A') : (CH)) /** NetBIOS decoding name */ -LOCAL int8_t NETBIOS_CODE_ATTR NBNS_decode(char *dst, char *src) +static int8_t NETBIOS_CODE_ATTR NBNS_decode(char *dst, char *src) { uint8_t i, j; char c; @@ -218,7 +217,7 @@ static void NBNS_encode(char *dst, char *src, uint8_t type) #endif /** NetBIOS Name service recv callback */ -LOCAL void NETBIOS_CODE_ATTR +static void NETBIOS_CODE_ATTR netbios_recv(void *arg, struct udp_pcb *upcb, struct pbuf *p, ip_addr_t *addr, u16_t port) { LWIP_UNUSED_ARG(arg); @@ -227,7 +226,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 != 0 + if (curbiosname[0] != '\0' && ip != NULL /* we only answer if we got a default interface */ && (((ip ^ addr->addr) & current_netif->netmask.addr) == 0)) { // запрет ответа другой подсети #if DEBUGSOO > 3 @@ -309,7 +308,7 @@ netbios_recv(void *arg, struct udp_pcb *upcb, struct pbuf *p, ip_addr_t *addr, } } -LOCAL struct udp_pcb * NETBIOS_CODE_ATTR netbios_pcb(void) { +struct udp_pcb * NETBIOS_CODE_ATTR netbios_pcb(void) { struct udp_pcb *pcb; for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { if (pcb->local_port == NETBIOS_PORT) diff --git a/RTL00_SDKV35a/component/common/network/websocket/wsclient_api.h b/RTL00_SDKV35a/component/common/network/websocket/wsclient_api.h index 0b5b423..77a53f1 100644 --- a/RTL00_SDKV35a/component/common/network/websocket/wsclient_api.h +++ b/RTL00_SDKV35a/component/common/network/websocket/wsclient_api.h @@ -8,7 +8,6 @@ /****************Define if using the polarssl*******************/ #define USING_SSL - /******************Define the function used*********************/ #ifdef USING_SSL int wss_set_fun_ops(wsclient_context *wsclient); @@ -19,9 +18,6 @@ int ws_set_fun_ops(wsclient_context *wsclient); #endif /***************************************************************/ - - - /************************************************************************************************* ** Function Name : create_wsclient ** Description : Creating the websocket client context structure @@ -31,7 +27,7 @@ int ws_set_fun_ops(wsclient_context *wsclient); ** Return : Created: websocket client context structure ** Failed: NULL **************************************************************************************************/ -wsclient_context *create_wsclient(char *url, int port,char *path, char* origin); +wsclient_context *create_wsclient(char *url, int port, char *path, char* origin); /************************************************************************************************* ** Function Name : ws_connect_url @@ -105,4 +101,4 @@ readyStateValues ws_getReadyState(wsclient_context *wsclient); **************************************************************************************************/ void ws_close(wsclient_context *wsclient); -#endif \ No newline at end of file +#endif diff --git a/RTL00_SDKV35a/component/common/utilities/webserver.c b/RTL00_SDKV35a/component/common/utilities/webserver.c index aa87c73..880dd54 100644 --- a/RTL00_SDKV35a/component/common/utilities/webserver.c +++ b/RTL00_SDKV35a/component/common/utilities/webserver.c @@ -740,8 +740,8 @@ static void RestartSoftAP() wifi_restart_ap(wifi_setting.ssid, wifi_setting.security_type, wifi_setting.password, - strlen((char*)wifi_setting.ssid), - strlen((char*)wifi_setting.password), +// strlen((char*)wifi_setting.ssid), +// strlen((char*)wifi_setting.password), wifi_setting.channel); } diff --git a/RTL00_SDKV35a/component/os/freertos/cmsis_os.c b/RTL00_SDKV35a/component/os/freertos/cmsis_os.c index ba3430d..f89830a 100644 --- a/RTL00_SDKV35a/component/os/freertos/cmsis_os.c +++ b/RTL00_SDKV35a/component/os/freertos/cmsis_os.c @@ -74,12 +74,12 @@ 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) { - uint32_t dummy; + int dummy; // uint32_t i; ThreadSignalRec *prec_entity; if (inHandlerMode()) { - dummy = portSET_INTERRUPT_MASK_FROM_ISR(); + dummy = portSET_INTERRUPT_MASK_FROM_ISR(); } else { vPortEnterCritical(); @@ -135,7 +135,7 @@ static EventGroupHandle_t find_signal_by_thread (osThreadId thread_id) { EventGroupHandle_t signals_hdl=NULL; // uint32_t i; - uint32_t dummy; + int dummy; 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; - uint32_t dummy; + int dummy; 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) { - uint32_t dummy; + int dummy; 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) { - uint32_t dummy; + int dummy; uint32_t index; if (pool_id == NULL) { diff --git a/RTL00_SDKV35a/component/os/freertos/freertos_v8.1.2/Source/portable/MemMang/heap_5.c b/RTL00_SDKV35a/component/os/freertos/freertos_v8.1.2/Source/portable/MemMang/heap_5.c index 9150e15..84cde2a 100644 --- a/RTL00_SDKV35a/component/os/freertos/freertos_v8.1.2/Source/portable/MemMang/heap_5.c +++ b/RTL00_SDKV35a/component/os/freertos/freertos_v8.1.2/Source/portable/MemMang/heap_5.c @@ -1,67 +1,67 @@ /* - FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd. - All rights reserved + FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd. + All rights reserved - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that has become a de facto standard. * - * * - * Help yourself get started quickly and support the FreeRTOS * - * project by purchasing a FreeRTOS tutorial book, reference * - * manual, or both from: http://www.FreeRTOS.org/Documentation * - * * - * Thank you! * - * * - *************************************************************************** + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** - This file is part of the FreeRTOS distribution. + This file is part of the FreeRTOS distribution. - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available from the following - link: http://www.freertos.org/a00114.html + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available from the following + link: http://www.freertos.org/a00114.html - 1 tab == 4 spaces! + 1 tab == 4 spaces! - *************************************************************************** - * * - * Having a problem? Start by reading the FAQ "My application does * - * not run, what could be wrong?" * - * * - * http://www.FreeRTOS.org/FAQHelp.html * - * * - *************************************************************************** + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** - http://www.FreeRTOS.org - Documentation, books, training, latest versions, - license and Real Time Engineers Ltd. contact details. + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. - http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High - Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and middleware. + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. - 1 tab == 4 spaces! -*/ + 1 tab == 4 spaces! + */ /* * A sample implementation of pvPortMalloc() that allows the heap to be defined @@ -111,10 +111,9 @@ #include "platform_autoconf.h" #include "hal_misc.h" - /* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining -all the API functions to use the MPU wrappers. That should only be done when -task.h is included from an application file. */ + all the API functions to use the MPU wrappers. That should only be done when + task.h is included from an application file. */ #define MPU_WRAPPERS_INCLUDED_FROM_API_FILE #include "FreeRTOS.h" @@ -129,11 +128,10 @@ task.h is included from an application file. */ #define heapBITS_PER_BYTE ( ( size_t ) 8 ) /* Define the linked list structure. This is used to link free blocks in order -of their memory address. */ -typedef struct A_BLOCK_LINK -{ - struct A_BLOCK_LINK *pxNextFreeBlock; /*<< The next free block in the list. */ - size_t xBlockSize; /*<< The size of the free block. */ + of their memory address. */ +typedef struct A_BLOCK_LINK { + struct A_BLOCK_LINK *pxNextFreeBlock; /*<< The next free block in the list. */ + size_t xBlockSize; /*<< The size of the free block. */ } BlockLink_t; /*-----------------------------------------------------------*/ @@ -144,31 +142,33 @@ typedef struct A_BLOCK_LINK * the block in front it and/or the block behind it if the memory blocks are * adjacent to each other. */ -static void prvInsertBlockIntoFreeList( BlockLink_t *pxBlockToInsert ); +static void prvInsertBlockIntoFreeList(BlockLink_t *pxBlockToInsert); /*-----------------------------------------------------------*/ /* The size of the structure placed at the beginning of each allocated memory -block must by correctly byte aligned. */ -static const uint32_t uxHeapStructSize = ( ( sizeof ( BlockLink_t ) + ( portBYTE_ALIGNMENT - 1 ) ) & ~portBYTE_ALIGNMENT_MASK ); + block must by correctly byte aligned. */ +static const uint32_t uxHeapStructSize = ((sizeof(BlockLink_t) + + ( portBYTE_ALIGNMENT - 1)) & ~portBYTE_ALIGNMENT_MASK); /* Create a couple of list links to mark the start and end of the list. */ static BlockLink_t xStart, *pxEnd = NULL; /* Keeps track of the number of free bytes remaining, but says nothing about -fragmentation. */ + fragmentation. */ static size_t xFreeBytesRemaining = 0; static size_t xMinimumEverFreeBytesRemaining = 0; /* Gets set to the top bit of an size_t type. When this bit in the xBlockSize -member of an BlockLink_t structure is set then the block belongs to the -application. When the bit is free the block is still part of the free heap -space. */ + member of an BlockLink_t structure is set then the block belongs to the + application. When the bit is free the block is still part of the free heap + space. */ //static size_t xBlockAllocatedBit = 0; /* Work out the position of the top bit in a size_t variable. */ #define xBlockAllocatedBit (( ( size_t ) 1 ) << ( ( sizeof( size_t ) * heapBITS_PER_BYTE ) - 1 )) /* Realtek test code start */ +//TODO: remove section when combine BD and BF #if (defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B)) #include "section_config.h" SRAM_HEAP_SECTION @@ -184,18 +184,18 @@ extern HeapRegion_t xHeapRegions[]; #if defined(CONFIG_PLATFORM_8195A) HeapRegion_t xHeapRegions[] = { - { (uint8_t*)0x10003000, 0x10006000 - 0x10003000 }, // __ram_heap1_start__, __ram_heap1_end__ - __ram_heap1_start__ - { ucHeap, sizeof(ucHeap) }, // Defines a block from ucHeap + { (uint8_t*)0x10003000, 0x10006000 - 0x10003000}, // __ram_heap1_start__, __ram_heap1_end__ - __ram_heap1_start__ + { ucHeap, sizeof(ucHeap)}, // Defines a block from ucHeap #ifdef CONFIG_SDR_EN - { (uint8_t*)&__sdram_bss_end__, 0x80000 }, + { (uint8_t*)&__sdram_bss_end__, 0x80000}, #endif - { NULL, 0 } // Terminates the array. + { NULL, 0} // Terminates the array. }; #elif (defined CONFIG_PLATFORM_8711B) HeapRegion_t xHeapRegions[] = { - { ucHeap, sizeof(ucHeap) }, // Defines a block from ucHeap - { NULL, 0 } // Terminates the array. + { ucHeap, sizeof(ucHeap)}, // Defines a block from ucHeap + { NULL, 0} // Terminates the array. }; #else #error NOT SUPPORT CHIP @@ -204,152 +204,138 @@ HeapRegion_t xHeapRegions[] = /*-----------------------------------------------------------*/ /* - Dump xBlock list -*/ -void dump_mem_block_list(void) -{ - if(pxEnd == NULL) vPortDefineHeapRegions( xHeapRegions ); + Dump xBlock list + */ +void dump_mem_block_list(void) { + if (pxEnd == NULL) + vPortDefineHeapRegions(xHeapRegions); #if CONFIG_DEBUG_LOG > 1 // if(pxEnd == NULL) vPortDefineHeapRegions( xHeapRegions ); // test code start BlockLink_t *pxBlock = &xStart; int count = 0; DBG_8195A("RAM Free Heap Memory List:\n"); - for(pxBlock = pxBlock->pxNextFreeBlock; pxBlock->pxNextFreeBlock != NULL; pxBlock = pxBlock->pxNextFreeBlock) { + for (pxBlock = pxBlock->pxNextFreeBlock; pxBlock->pxNextFreeBlock != NULL; + pxBlock = pxBlock->pxNextFreeBlock) { DBG_8195A(" [%d]=%p, %d\n", ++count, pxBlock, pxBlock->xBlockSize); } #endif } -void *pvPortMalloc( size_t xWantedSize ) -{ -BlockLink_t *pxBlock, *pxPreviousBlock, *pxNewBlockLink; -void *pvReturn = NULL; +void *pvPortMalloc(size_t xWantedSize) { + BlockLink_t *pxBlock, *pxPreviousBlock, *pxNewBlockLink; + void *pvReturn = NULL; /* Realtek test code start */ - if(pxEnd == NULL) vPortDefineHeapRegions( xHeapRegions ); + if (pxEnd == NULL) + vPortDefineHeapRegions(xHeapRegions); /* Realtek test code end */ /* The heap must be initialised before the first call to - prvPortMalloc(). */ + prvPortMalloc(). */ configASSERT( pxEnd ); vTaskSuspendAll(); { /* Check the requested block size is not so large that the top bit is - set. The top bit of the block size member of the BlockLink_t structure - is used to determine who owns the block - the application or the - kernel, so it must be free. */ - if( ( xWantedSize & xBlockAllocatedBit ) == 0 ) - { + set. The top bit of the block size member of the BlockLink_t structure + is used to determine who owns the block - the application or the + kernel, so it must be free. */ + if ((xWantedSize & xBlockAllocatedBit) == 0) { /* The wanted size is increased so it can contain a BlockLink_t - structure in addition to the requested amount of bytes. */ - if( xWantedSize > 0 ) - { + structure in addition to the requested amount of bytes. */ + if (xWantedSize > 0) { xWantedSize += uxHeapStructSize; /* Ensure that blocks are always aligned to the required number - of bytes. */ - if( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) != 0x00 ) - { + of bytes. */ + if ((xWantedSize & portBYTE_ALIGNMENT_MASK) != 0x00) { /* Byte alignment required. */ - xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ) ); - } - else - { + xWantedSize += ( portBYTE_ALIGNMENT + - (xWantedSize & portBYTE_ALIGNMENT_MASK)); + } else { mtCOVERAGE_TEST_MARKER(); } - } - else - { + } else { mtCOVERAGE_TEST_MARKER(); } - if( ( xWantedSize > 0 ) && ( xWantedSize <= xFreeBytesRemaining ) ) - { + if ((xWantedSize > 0) && (xWantedSize <= xFreeBytesRemaining)) { /* Traverse the list from the start (lowest address) block until - one of adequate size is found. */ + one of adequate size is found. */ pxPreviousBlock = &xStart; pxBlock = xStart.pxNextFreeBlock; - while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) ) - { + while ((pxBlock->xBlockSize < xWantedSize) + && (pxBlock->pxNextFreeBlock != NULL)) { pxPreviousBlock = pxBlock; pxBlock = pxBlock->pxNextFreeBlock; } /* If the end marker was reached then a block of adequate size - was not found. */ - if( pxBlock != pxEnd ) - { + was not found. */ + if (pxBlock != pxEnd) { /* Return the memory space pointed to - jumping over the - BlockLink_t structure at its start. */ - pvReturn = ( void * ) ( ( ( uint8_t * ) pxPreviousBlock->pxNextFreeBlock ) + uxHeapStructSize ); + BlockLink_t structure at its start. */ + pvReturn = + (void *) (((uint8_t *) pxPreviousBlock->pxNextFreeBlock) + + uxHeapStructSize); /* This block is being returned for use so must be taken out - of the list of free blocks. */ + of the list of free blocks. */ pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock; /* If the block is larger than required it can be split into - two. */ - if( ( pxBlock->xBlockSize - xWantedSize ) > heapMINIMUM_BLOCK_SIZE ) - { + two. */ + if ((pxBlock->xBlockSize - xWantedSize) + > heapMINIMUM_BLOCK_SIZE) { /* This block is to be split into two. Create a new - block following the number of bytes requested. The void - cast is used to prevent byte alignment warnings from the - compiler. */ - pxNewBlockLink = ( void * ) ( ( ( uint8_t * ) pxBlock ) + xWantedSize ); + block following the number of bytes requested. The void + cast is used to prevent byte alignment warnings from the + compiler. */ + pxNewBlockLink = (void *) (((uint8_t *) pxBlock) + + xWantedSize); /* Calculate the sizes of two blocks split from the - single block. */ - pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - xWantedSize; + single block. */ + pxNewBlockLink->xBlockSize = pxBlock->xBlockSize + - xWantedSize; pxBlock->xBlockSize = xWantedSize; /* Insert the new block into the list of free blocks. */ - prvInsertBlockIntoFreeList( ( pxNewBlockLink ) ); - } - else - { + prvInsertBlockIntoFreeList((pxNewBlockLink)); + } else { mtCOVERAGE_TEST_MARKER(); } xFreeBytesRemaining -= pxBlock->xBlockSize; - if( xFreeBytesRemaining < xMinimumEverFreeBytesRemaining ) - { + if (xFreeBytesRemaining < xMinimumEverFreeBytesRemaining) { xMinimumEverFreeBytesRemaining = xFreeBytesRemaining; - } - else - { + } else { mtCOVERAGE_TEST_MARKER(); } /* The block is being returned - it is allocated and owned - by the application and has no "next" block. */ + by the application and has no "next" block. */ pxBlock->xBlockSize |= xBlockAllocatedBit; pxBlock->pxNextFreeBlock = NULL; - } - else - { + } else { mtCOVERAGE_TEST_MARKER(); } - } - else - { + } else { mtCOVERAGE_TEST_MARKER(); } - } - else - { + } else { mtCOVERAGE_TEST_MARKER(); - } - traceMALLOC( pvReturn, xWantedSize ); + } traceMALLOC( pvReturn, xWantedSize ); } - ( void ) xTaskResumeAll(); - if(pvReturn == NULL) { - DBG_RAM_HEAP_WARN("ram_alloc(%d): freeSpace(%d)!\n", xWantedSize, xFreeBytesRemaining); + (void) xTaskResumeAll(); + if (pvReturn == NULL) { + DBG_RAM_HEAP_WARN("ram_alloc(%d): freeSpace(%d)!\n", xWantedSize, + xFreeBytesRemaining); } else { // DBG_RAM_HEAP_INFO("ram_alloc:%p[%d]\n", pvReturn , xWantedSize); } - #if( configUSE_MALLOC_FAILED_HOOK == 1 ) +#if( configUSE_MALLOC_FAILED_HOOK == 1 ) { if( pvReturn == NULL ) { @@ -361,36 +347,31 @@ void *pvReturn = NULL; mtCOVERAGE_TEST_MARKER(); } } - #endif +#endif return pvReturn; } /*-----------------------------------------------------------*/ -void __vPortFree( void *pv ) -{ -uint8_t *puc = ( uint8_t * ) pv; -BlockLink_t *pxLink; +void __vPortFree(void *pv) { + uint8_t *puc = (uint8_t *) pv; + BlockLink_t *pxLink; - if( pv != NULL ) - { + if (pv != NULL) { /* The memory being freed will have an BlockLink_t structure immediately - before it. */ + before it. */ puc -= uxHeapStructSize; /* This casting is to keep the compiler from issuing warnings. */ - pxLink = ( void * ) puc; + pxLink = (void *) puc; /* Check the block is actually allocated. */ - configASSERT( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 ); - configASSERT( pxLink->pxNextFreeBlock == NULL ); + configASSERT( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 ); configASSERT( pxLink->pxNextFreeBlock == NULL ); - if( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 ) - { - if( pxLink->pxNextFreeBlock == NULL ) - { + if ((pxLink->xBlockSize & xBlockAllocatedBit) != 0) { + if (pxLink->pxNextFreeBlock == NULL) { /* The block is being returned to the heap - it is no longer - allocated. */ + allocated. */ pxLink->xBlockSize &= ~xBlockAllocatedBit; vTaskSuspendAll(); @@ -398,17 +379,13 @@ BlockLink_t *pxLink; /* Add this block to the list of free blocks. */ xFreeBytesRemaining += pxLink->xBlockSize; traceFREE( pv, pxLink->xBlockSize ); - prvInsertBlockIntoFreeList( ( ( BlockLink_t * ) pxLink ) ); + prvInsertBlockIntoFreeList(((BlockLink_t *) pxLink)); } - ( void ) xTaskResumeAll(); - } - else - { + (void) xTaskResumeAll(); + } else { mtCOVERAGE_TEST_MARKER(); } - } - else - { + } else { mtCOVERAGE_TEST_MARKER(); } // DBG_RAM_HEAP_INFO("ram_free:%p[%d]\n", pv , pxLink->xBlockSize); @@ -417,136 +394,120 @@ BlockLink_t *pxLink; /*-----------------------------------------------------------*/ /* Add by Alfa 2015/02/04 -----------------------------------*/ -static void (*ext_free)( void *p ) = NULL; +static void (*ext_free)(void *p) = NULL; //static uint32_t ext_upper = 0; //static uint32_t ext_lower = 0; -void vPortSetExtFree( void (*free)( void *p ), uint32_t upper, uint32_t lower ) -{ +void vPortSetExtFree(void (*free)(void *p), uint32_t upper, uint32_t lower) { ext_free = free; ext_upper = upper; ext_lower = lower; } -void vPortFree( void *pv ) -{ - if( ((uint32_t)pv >= ext_lower) && ((uint32_t)pv < ext_upper) ){ +void vPortFree(void *pv) { + if (((uint32_t) pv >= ext_lower) && ((uint32_t) pv < ext_upper)) { // use external free function - if( ext_free ) ext_free( pv ); - }else - __vPortFree( pv ); + if (ext_free) + ext_free(pv); + } else + __vPortFree(pv); } /*-----------------------------------------------------------*/ -size_t xPortGetFreeHeapSize( void ) -{ +size_t xPortGetFreeHeapSize(void) { return xFreeBytesRemaining; } /*-----------------------------------------------------------*/ -size_t xPortGetMinimumEverFreeHeapSize( void ) -{ +size_t xPortGetMinimumEverFreeHeapSize(void) { return xMinimumEverFreeBytesRemaining; } /*-----------------------------------------------------------*/ -static void prvInsertBlockIntoFreeList( BlockLink_t *pxBlockToInsert ) -{ -BlockLink_t *pxIterator; -uint8_t *puc; +static void prvInsertBlockIntoFreeList(BlockLink_t *pxBlockToInsert) { + BlockLink_t *pxIterator; + uint8_t *puc; /* Iterate through the list until a block is found that has a higher address - than the block being inserted. */ - for( pxIterator = &xStart; pxIterator->pxNextFreeBlock < pxBlockToInsert; pxIterator = pxIterator->pxNextFreeBlock ) - { + than the block being inserted. */ + for (pxIterator = &xStart; pxIterator->pxNextFreeBlock < pxBlockToInsert; + pxIterator = pxIterator->pxNextFreeBlock) { /* Nothing to do here, just iterate to the right position. */ } /* Do the block being inserted, and the block it is being inserted after - make a contiguous block of memory? */ - puc = ( uint8_t * ) pxIterator; - if( ( puc + pxIterator->xBlockSize ) == ( uint8_t * ) pxBlockToInsert ) - { + make a contiguous block of memory? */ + puc = (uint8_t *) pxIterator; + if ((puc + pxIterator->xBlockSize) == (uint8_t *) pxBlockToInsert) { pxIterator->xBlockSize += pxBlockToInsert->xBlockSize; pxBlockToInsert = pxIterator; - } - else - { + } else { mtCOVERAGE_TEST_MARKER(); } /* Do the block being inserted, and the block it is being inserted before - make a contiguous block of memory? */ - puc = ( uint8_t * ) pxBlockToInsert; - if( ( puc + pxBlockToInsert->xBlockSize ) == ( uint8_t * ) pxIterator->pxNextFreeBlock ) - { - if( pxIterator->pxNextFreeBlock != pxEnd ) - { + make a contiguous block of memory? */ + puc = (uint8_t *) pxBlockToInsert; + if ((puc + pxBlockToInsert->xBlockSize) + == (uint8_t *) pxIterator->pxNextFreeBlock) { + if (pxIterator->pxNextFreeBlock != pxEnd) { /* Form one big block from the two blocks. */ - pxBlockToInsert->xBlockSize += pxIterator->pxNextFreeBlock->xBlockSize; - pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock->pxNextFreeBlock; - } - else - { + pxBlockToInsert->xBlockSize += + pxIterator->pxNextFreeBlock->xBlockSize; + pxBlockToInsert->pxNextFreeBlock = + pxIterator->pxNextFreeBlock->pxNextFreeBlock; + } else { pxBlockToInsert->pxNextFreeBlock = pxEnd; } - } - else - { + } else { pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock; } /* If the block being inserted plugged a gab, so was merged with the block - before and the block after, then it's pxNextFreeBlock pointer will have - already been set, and should not be set here as that would make it point - to itself. */ - if( pxIterator != pxBlockToInsert ) - { + before and the block after, then it's pxNextFreeBlock pointer will have + already been set, and should not be set here as that would make it point + to itself. */ + if (pxIterator != pxBlockToInsert) { pxIterator->pxNextFreeBlock = pxBlockToInsert; - } - else - { + } else { mtCOVERAGE_TEST_MARKER(); } } /*-----------------------------------------------------------*/ -static void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions ) -{ -BlockLink_t *pxFirstFreeBlockInRegion = NULL, *pxPreviousFreeBlock; -uint8_t *pucAlignedHeap; -size_t xTotalRegionSize, xTotalHeapSize = 0; -BaseType_t xDefinedRegions = 0; -uint32_t ulAddress; -const HeapRegion_t *pxHeapRegion; +static void vPortDefineHeapRegions(const HeapRegion_t * const pxHeapRegions) { + BlockLink_t *pxFirstFreeBlockInRegion = NULL, *pxPreviousFreeBlock; + uint8_t *pucAlignedHeap; + size_t xTotalRegionSize, xTotalHeapSize = 0; + BaseType_t xDefinedRegions = 0; + uint32_t ulAddress; + const HeapRegion_t *pxHeapRegion; #if defined(CONFIG_PLATFORM_8195A) -/* - xHeapRegions[0].pucStartAddress = (uint8_t*)&__ram_heap1_start__; - xHeapRegions[0].xSizeInBytes = (u32)&__ram_heap1_end__ - (u32)xHeapRegions[0].pucStartAddress; - xHeapRegions[1].pucStartAddress = &ucHeap; // (uint8_t*)&__ram_heap2_start__; - xHeapRegions[1].xSizeInBytes = (u32)0x10070000 - (u32)xHeapRegions[1].pucStartAddress; - xHeapRegions[2].pucStartAddress = (uint8_t*)&__sdram_data_start__; - xHeapRegions[2].xSizeInBytes = (u32)0x30200000 - (u32)xHeapRegions[2].pucStartAddress; -*/ + /* + xHeapRegions[0].pucStartAddress = (uint8_t*)&__ram_heap1_start__; + xHeapRegions[0].xSizeInBytes = (u32)&__ram_heap1_end__ - (u32)xHeapRegions[0].pucStartAddress; + xHeapRegions[1].pucStartAddress = &ucHeap; // (uint8_t*)&__ram_heap2_start__; + xHeapRegions[1].xSizeInBytes = (u32)0x10070000 - (u32)xHeapRegions[1].pucStartAddress; + xHeapRegions[2].pucStartAddress = (uint8_t*)&__sdram_data_start__; + xHeapRegions[2].xSizeInBytes = (u32)0x30200000 - (u32)xHeapRegions[2].pucStartAddress; + */ #endif /* Can only call once! */ configASSERT( pxEnd == NULL ); - pxHeapRegion = &( pxHeapRegions[ xDefinedRegions ] ); + pxHeapRegion = &(pxHeapRegions[xDefinedRegions]); uint8 chip_id = HalGetChipId(); - while( pxHeapRegion->xSizeInBytes > 0 ) - { - if(pxHeapRegion->pucStartAddress > (uint8_t *)0x20000000 - && chip_id >= CHIP_ID_8711AN && chip_id <= CHIP_ID_8711AF) { + while (pxHeapRegion->xSizeInBytes > 0) { + if (pxHeapRegion->pucStartAddress + > 0x20000000 && chip_id >= CHIP_ID_8711AN && chip_id <= CHIP_ID_8711AF) { // pxHeapRegion->pucStartAddress = 0; // pxHeapRegion->xSizeInBytes = 0; // DBG_8195A("ChipID: %p !\n", chip_id); - } - else { + } else { #if CONFIG_DEBUG_LOG > 2 DBG_8195A("Init Heap Region: %p[%d]\n", pxHeapRegion->pucStartAddress, pxHeapRegion->xSizeInBytes); #endif @@ -555,30 +516,27 @@ const HeapRegion_t *pxHeapRegion; #endif xTotalRegionSize = pxHeapRegion->xSizeInBytes; /* Ensure the heap region starts on a correctly aligned boundary. */ - ulAddress = ( uint32_t ) pxHeapRegion->pucStartAddress; - if( ( ulAddress & portBYTE_ALIGNMENT_MASK ) != 0 ) - { - ulAddress += ( portBYTE_ALIGNMENT - 1 ); + ulAddress = (uint32_t) pxHeapRegion->pucStartAddress; + if ((ulAddress & portBYTE_ALIGNMENT_MASK) != 0) { + ulAddress += ( portBYTE_ALIGNMENT - 1); ulAddress &= ~portBYTE_ALIGNMENT_MASK; /* Adjust the size for the bytes lost to alignment. */ - xTotalRegionSize -= ulAddress - ( uint32_t ) pxHeapRegion->pucStartAddress; + xTotalRegionSize -= ulAddress + - (uint32_t) pxHeapRegion->pucStartAddress; } - pucAlignedHeap = ( uint8_t * ) ulAddress; + pucAlignedHeap = (uint8_t *) ulAddress; /* Set xStart if it has not already been set. */ - if( xDefinedRegions == 0 ) - { + if (xDefinedRegions == 0) { /* xStart is used to hold a pointer to the first item in the list of - free blocks. The void cast is used to prevent compiler warnings. */ - xStart.pxNextFreeBlock = ( BlockLink_t * ) pucAlignedHeap; - xStart.xBlockSize = ( size_t ) 0; - } - else - { + free blocks. The void cast is used to prevent compiler warnings. */ + xStart.pxNextFreeBlock = (BlockLink_t *) pucAlignedHeap; + xStart.xBlockSize = (size_t) 0; + } else { /* Should only get here if one region has already been added to the - heap. */ + heap. */ configASSERT( pxEnd != NULL ); /* Check blocks are passed in with increasing start addresses. */ @@ -586,29 +544,29 @@ const HeapRegion_t *pxHeapRegion; } /* Remember the location of the end marker in the previous region, if - any. */ + any. */ pxPreviousFreeBlock = pxEnd; /* pxEnd is used to mark the end of the list of free blocks and is - inserted at the end of the region space. */ - ulAddress = ( ( uint32_t ) pucAlignedHeap ) + xTotalRegionSize; + inserted at the end of the region space. */ + ulAddress = ((uint32_t) pucAlignedHeap) + xTotalRegionSize; ulAddress -= uxHeapStructSize; ulAddress &= ~portBYTE_ALIGNMENT_MASK; - pxEnd = ( BlockLink_t * ) ulAddress; + pxEnd = (BlockLink_t *) ulAddress; pxEnd->xBlockSize = 0; pxEnd->pxNextFreeBlock = NULL; /* To start with there is a single free block in this region that is - sized to take up the entire heap region minus the space taken by the - free block structure. */ - pxFirstFreeBlockInRegion = ( BlockLink_t * ) pucAlignedHeap; - pxFirstFreeBlockInRegion->xBlockSize = ulAddress - ( uint32_t ) pxFirstFreeBlockInRegion; + sized to take up the entire heap region minus the space taken by the + free block structure. */ + pxFirstFreeBlockInRegion = (BlockLink_t *) pucAlignedHeap; + pxFirstFreeBlockInRegion->xBlockSize = ulAddress + - (uint32_t) pxFirstFreeBlockInRegion; pxFirstFreeBlockInRegion->pxNextFreeBlock = pxEnd; /* If this is not the first region that makes up the entire heap space - then link the previous region to this region. */ - if( pxPreviousFreeBlock != NULL ) - { + then link the previous region to this region. */ + if (pxPreviousFreeBlock != NULL) { pxPreviousFreeBlock->pxNextFreeBlock = pxFirstFreeBlockInRegion; } @@ -616,7 +574,7 @@ const HeapRegion_t *pxHeapRegion; } /* Move onto the next HeapRegion_t structure. */ xDefinedRegions++; - pxHeapRegion = &( pxHeapRegions[ xDefinedRegions ] ); + pxHeapRegion = &(pxHeapRegions[xDefinedRegions]); } xMinimumEverFreeBytesRemaining = xTotalHeapSize; @@ -627,72 +585,68 @@ const HeapRegion_t *pxHeapRegion; } -void* pvPortReAlloc( void *pv, size_t xWantedSize ) -{ +void* pvPortReAlloc(void *pv, size_t xWantedSize) { BlockLink_t *pxLink; - if( ((uint32_t)pv >= ext_lower) && ((uint32_t)pv < ext_upper) ){ - if( ext_free ) ext_free( pv ); + if (((uint32_t) pv >= ext_lower) && ((uint32_t) pv < ext_upper)) { + if (ext_free) + ext_free(pv); pv = NULL; } - unsigned char *puc = ( unsigned char * ) pv; + unsigned char *puc = (unsigned char *) pv; - if( pv ) - { - if( !xWantedSize ) - { - vPortFree( pv ); + if (pv) { + if (!xWantedSize) { + vPortFree(pv); return NULL; } - void *newArea = pvPortMalloc( xWantedSize ); - if( newArea ) - { + void *newArea = pvPortMalloc(xWantedSize); + if (newArea) { /* The memory being freed will have an xBlockLink structure immediately - before it. */ + before it. */ puc -= uxHeapStructSize; /* This casting is to keep the compiler from issuing warnings. */ - pxLink = ( void * ) puc; + pxLink = (void *) puc; - int oldSize = (pxLink->xBlockSize & ~xBlockAllocatedBit) - uxHeapStructSize; - int copySize = ( oldSize < xWantedSize ) ? oldSize : xWantedSize; - memcpy( newArea, pv, copySize ); + int oldSize = (pxLink->xBlockSize & ~xBlockAllocatedBit) - uxHeapStructSize; + int copySize = (oldSize < xWantedSize) ? oldSize : xWantedSize; + rtl_memcpy(newArea, pv, copySize); vTaskSuspendAll(); { /* Add this block to the list of free blocks. */ pxLink->xBlockSize &= ~xBlockAllocatedBit; xFreeBytesRemaining += pxLink->xBlockSize; - prvInsertBlockIntoFreeList( ( ( BlockLink_t * ) pxLink ) ); + prvInsertBlockIntoFreeList(((BlockLink_t *) pxLink)); } xTaskResumeAll(); return newArea; } - } - else if( xWantedSize ) - return pvPortMalloc( xWantedSize ); + } else if (xWantedSize) + return pvPortMalloc(xWantedSize); else return NULL; return NULL; } -extern _LONG_CALL_ROM_ void *_memset( void *s, int c, SIZE_T n ); +extern _LONG_CALL_ROM_ void *_memset(void *s, int c, SIZE_T n); -void *pvPortZalloc( size_t xWantedSize ) -{ +void *pvPortZalloc(size_t xWantedSize) { void * prt = pvPortMalloc(xWantedSize); - if(prt) _memset(prt, 0, xWantedSize); + if (prt) + _memset(prt, 0, xWantedSize); return prt; } /* -#ifdef ARDUINO_SDK -int vPortAddHeapRegion(uint8_t *addr, size_t size) -{ - return 0; -} -#endif -*/ + #ifdef ARDUINO_SDK + int vPortAddHeapRegion(uint8_t *addr, size_t size) + { + return 0; + } + #endif + */ diff --git a/RTL00_SDKV35a/component/os/os_dep/include/osdep_api.h b/RTL00_SDKV35a/component/os/os_dep/include/osdep_api.h index 2bcab43..a6583c3 100644 --- a/RTL00_SDKV35a/component/os/os_dep/include/osdep_api.h +++ b/RTL00_SDKV35a/component/os/os_dep/include/osdep_api.h @@ -79,7 +79,7 @@ typedef struct _RTL_TIMER{ u32 msPeriod; // The period of this timer void *Context; // Timer specific context. u8 isPeriodical; // is a periodical timer - u8 TimerName[35]; // the Name of timer + u8 TimerName[15]; // the Name of timer }RTL_TIMER, *PRTL_TIMER; __inline static VOID diff --git a/RTL00_SDKV35a/component/os/os_dep/osdep_api.c b/RTL00_SDKV35a/component/os/os_dep/osdep_api.c index f938be2..15c63ec 100644 --- a/RTL00_SDKV35a/component/os/os_dep/osdep_api.c +++ b/RTL00_SDKV35a/component/os/os_dep/osdep_api.c @@ -22,7 +22,6 @@ #define _OSDEP_API_C_ #include -#include extern _LONG_CALL_ char *_strcpy(char *dest, const char *src); extern _LONG_CALL_ VOID *_memset(void *dst0, int Val,SIZE_T length); diff --git a/RTL00_SDKV35a/component/os/os_dep/osdep_service.c b/RTL00_SDKV35a/component/os/os_dep/osdep_service.c index 24d4e4b..f1f095b 100644 --- a/RTL00_SDKV35a/component/os/os_dep/osdep_service.c +++ b/RTL00_SDKV35a/component/os/os_dep/osdep_service.c @@ -1082,12 +1082,12 @@ int rtw_create_worker_thread( rtw_worker_thread_t* worker_thread, u8 priority, u memset( worker_thread, 0, sizeof( *worker_thread ) ); - if ( rtw_init_xqueue( &worker_thread->event_queue, "worker queue", sizeof(rtw_event_message_t), event_queue_size ) != SUCCESS ) + if ( rtw_init_xqueue( &worker_thread->event_queue, "worker", sizeof(rtw_event_message_t), event_queue_size ) != SUCCESS ) { return FAIL; } - if ( !rtw_create_task( &worker_thread->thread, "worker thread", stack_size, priority, worker_thread_main, (void*) worker_thread ) ) + if ( !rtw_create_task( &worker_thread->thread, "worker", stack_size, priority, worker_thread_main, (void*) worker_thread ) ) { rtw_deinit_xqueue( &worker_thread->event_queue ); return FAIL; diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/cmsis/device/diag.h b/RTL00_SDKV35a/component/soc/realtek/8195a/cmsis/device/diag.h index c025f98..b81c084 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/cmsis/device/diag.h +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/cmsis/device/diag.h @@ -89,6 +89,8 @@ prvDiagSPrintf( IN const char *fmt, ... ); +extern char print_off; + #if CONFIG_DEBUG_LOG > 3 #define debug_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) #define info_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) 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 8bacf16..3594b89 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/hal_diag.h +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/hal_diag.h @@ -51,6 +51,9 @@ #define UART_STOP_1BIT 0x0 #define UART_STOP_2BIT 0x4 +#ifndef DEFAULT_BAUDRATE +#define DEFAULT_BAUDRATE UART_BAUD_RATE_38400 +#endif #define HAL_UART_READ32(addr) HAL_READ32(LOG_UART_REG_BASE, addr) #define HAL_UART_WRITE32(addr, value) HAL_WRITE32(LOG_UART_REG_BASE, addr, value) diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/hal_misc_v0.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/hal_misc_v0.c index 3520a32..7c8906b 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/hal_misc_v0.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/hal_misc_v0.c @@ -336,7 +336,7 @@ PatchHalInitPlatformLogUart( UartIrqHandle.Priority = 0; //4 Inital Log uart - UartAdapter.BaudRate = UART_BAUD_RATE_38400; + UartAdapter.BaudRate = DEFAULT_BAUDRATE; UartAdapter.DataLength = UART_DATA_LEN_8BIT; UartAdapter.FIFOControl = 0xC1; UartAdapter.IntEnReg = 0x00; 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 99582c8..519105a 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 @@ -13,8 +13,9 @@ //------------------------------------------------------------------------- // Data declarations - -#define DEFAULT_BAUDRATE UART_BAUD_RATE_38400 +#ifndef DEFAULT_BAUDRATE +#define DEFAULT_BAUDRATE 38400 +#endif /* 0 - 166666666 Hz, 1 - 83333333 Hz, 2 - 41666666 Hz, 3 - 20833333 Hz, 4 - 10416666 Hz, 5 - 4000000? Hz, 6 - 200000000 Hz, 7 - 10000000 Hz, 8 - 50000000 Hz, 9 - 25000000 Hz, 10 - 12500000 Hz, 11 - 4000000? Hz */ diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sys_on.h b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sys_on.h index f82b9b4..236c0bc 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sys_on.h +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sys_on.h @@ -616,6 +616,7 @@ #define BIT_MASK_XTAL_DRV_RF_LATCH 0xffffffffL #define BIT_XTAL_DRV_RF_LATCH(x) (((x) & BIT_MASK_XTAL_DRV_RF_LATCH) << BIT_SHIFT_XTAL_DRV_RF_LATCH) +// BIT25 - To release DAC delta sigma clock gating //2 REG_RSVD diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_pwm.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_pwm.c index 156c4c1..007eeb8 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_pwm.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_pwm.c @@ -3,8 +3,8 @@ * * Copyright (c) 2013 Realtek Semiconductor Corp. * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. + * -------------------------- + * bug fixing: pvvx */ @@ -15,9 +15,10 @@ #include "rtl8195a_pwm.h" #include "hal_pwm.h" -extern HAL_PWM_ADAPTER PWMPin[]; +//extern HAL_PWM_ADAPTER PWMPin[]; -extern HAL_TIMER_OP HalTimerOp; +//extern HAL_TIMER_OP HalTimerOp; +extern u32 gTimerRecord; /** * @brief Configure a G-Timer to generate a tick with certain time. @@ -33,33 +34,30 @@ Pwm_SetTimerTick_8195a( u32 tick_time ) { - TIMER_ADAPTER TimerAdapter; - - if (tick_time <= MIN_GTIMER_TIMEOUT) { tick_time = MIN_GTIMER_TIMEOUT; } - else { - tick_time = (((tick_time-1)/TIMER_TICK_US)+1) * TIMER_TICK_US; - } - // Initial a G-Timer for the PWM pin if (pPwmAdapt->tick_time != tick_time) { - TimerAdapter.IrqDis = 1; // Disable Irq - TimerAdapter.IrqHandle.IrqFun = (IRQ_FUN) NULL; - TimerAdapter.IrqHandle.IrqNum = TIMER2_7_IRQ; - TimerAdapter.IrqHandle.Priority = 10; - TimerAdapter.IrqHandle.Data = (u32)NULL; - TimerAdapter.TimerId = pPwmAdapt->gtimer_id; - TimerAdapter.TimerIrqPriority = 0; - TimerAdapter.TimerLoadValueUs = tick_time-1; - TimerAdapter.TimerMode = 1; // auto-reload with user defined value - - HalTimerOp.HalTimerInit((VOID*) &TimerAdapter); pPwmAdapt->tick_time = tick_time; DBG_PWM_INFO("%s: Timer_Id=%d Count=%d\n", __FUNCTION__, pPwmAdapt->gtimer_id, tick_time); + // if timer is running ? + if(gTimerRecord & (1 << pPwmAdapt->gtimer_id)) { + HalTimerReLoadRtl8195a_Patch(pPwmAdapt->gtimer_id, tick_time); + } else { + TIMER_ADAPTER TimerAdapter; + TimerAdapter.IrqDis = 1; // Disable Irq + TimerAdapter.IrqHandle.IrqFun = (IRQ_FUN) NULL; + TimerAdapter.IrqHandle.IrqNum = TIMER2_7_IRQ; + TimerAdapter.IrqHandle.Priority = 10; + TimerAdapter.IrqHandle.Data = (u32)NULL; + TimerAdapter.TimerId = pPwmAdapt->gtimer_id; + TimerAdapter.TimerIrqPriority = 0; + TimerAdapter.TimerLoadValueUs = tick_time-1; + TimerAdapter.TimerMode = 1; // auto-reload with user defined value + HalTimerInitRtl8195a_Patch((VOID*) &TimerAdapter); + } } - } @@ -95,7 +93,7 @@ HAL_Pwm_SetDuty_8195a( period = MIN_GTIMER_TIMEOUT*2; } else { - tick_time = period / 0x3fc; // a duty cycle be devided into 1020 ticks + tick_time = period / 1020; // 0x3fc; // a duty cycle be devided into 1020 ticks if (tick_time < MIN_GTIMER_TIMEOUT) { tick_time = MIN_GTIMER_TIMEOUT; } @@ -103,36 +101,24 @@ HAL_Pwm_SetDuty_8195a( Pwm_SetTimerTick_8195a(pPwmAdapt, tick_time); tick_time = pPwmAdapt->tick_time; -#if 0 - // Check if current tick time needs adjustment - if ((pPwmAdapt->tick_time << 12) <= period) { - // need a longger tick time - } - else if ((pPwmAdapt->tick_time >> 2) >= period) { - // need a shorter tick time - } -#endif + period_tick = period/tick_time; if (period_tick == 0) { period_tick = 1; } if (pulse_width >= period) { -// pulse_width = period-1; pulse_width = period; } pulsewidth_tick = pulse_width/tick_time; - if (pulsewidth_tick == 0) { -// pulsewidth_tick = 1; - } timer_id = pPwmAdapt->gtimer_id; - pPwmAdapt->period = period_tick & 0x3ff; - pPwmAdapt->pulsewidth = pulsewidth_tick & 0x3ff; + pPwmAdapt->period = period_tick & BIT_MASK_PERI_PWM0_PERIOD; + pPwmAdapt->pulsewidth = pulsewidth_tick & BIT_MASK_PERI_PWM0_DUTY; RegAddr = REG_PERI_PWM0_CTRL + (pwm_id*4); - RegValue = BIT31 | (timer_id<<24) | (pulsewidth_tick<<12) | period_tick; + RegValue = BIT_PERI_PWM0_EN | BIT_PERI_PWM0_GT_SEL(timer_id) | BIT_PERI_PWM0_DUTY(pulsewidth_tick) | BIT_PERI_PWM0_PERIOD(period_tick); HAL_WRITE32(PERI_ON_BASE, RegAddr, RegValue); } @@ -157,10 +143,10 @@ HAL_Pwm_Init_8195a( pwm_id = pPwmAdapt->pwm_id; pin_sel = pPwmAdapt->sel; // Initial a G-Timer for the PWM pin - Pwm_SetTimerTick_8195a(pPwmAdapt, MIN_GTIMER_TIMEOUT); +//p/ Pwm_SetTimerTick_8195a(pPwmAdapt, MIN_GTIMER_TIMEOUT); // Set default duty ration - HAL_Pwm_SetDuty_8195a(pPwmAdapt, 20000, 10000); +//p/ HAL_Pwm_SetDuty_8195a(pPwmAdapt, 20000, 10000); // Configure the Pin Mux PinCtrl((PWM0+pwm_id), pin_sel, 1); @@ -187,7 +173,7 @@ HAL_Pwm_Enable_8195a( // Configure the Pin Mux if (!pPwmAdapt->enable) { PinCtrl((PWM0+pwm_id), pPwmAdapt->sel, 1); - HalTimerOp.HalTimerEn(pPwmAdapt->gtimer_id); + HalTimerEnRtl8195a_Patch(pPwmAdapt->gtimer_id); pPwmAdapt->enable = 1; } } @@ -211,7 +197,7 @@ HAL_Pwm_Disable_8195a( // Configure the Pin Mux if (pPwmAdapt->enable) { PinCtrl((PWM0+pwm_id), pPwmAdapt->sel, 0); - HalTimerOp.HalTimerDis(pPwmAdapt->gtimer_id); + HalTimerDisRtl8195a(pPwmAdapt->gtimer_id); pPwmAdapt->enable = 0; } } 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 da20edb..bb014c6 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 @@ -142,8 +142,6 @@ HalRuartResetTRxFifoRtl8195a( return HAL_OK; } -extern u64 div_u64(u64 dividend, u32 divisor); - HAL_Status HalRuartGenBaudRateRtl8195a( IN RUART_SPEED_SETTING *pBaudSetting @@ -154,7 +152,7 @@ HalRuartGenBaudRateRtl8195a( u32 min_err=0xffffffff; u32 uart_ovsr; u32 uart_ovsr_mod; - u32 min_uart_ovsr =0; // ovsr with mini err + u32 min_uart_ovsr; // ovsr with mini err u32 min_uart_ovsr_mod; u64 uart_clock; u32 divisor_temp; 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 ed21f08..fee78fe 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 @@ -650,7 +650,7 @@ RtkADCPinMuxInit( ADCLocalTemp |= BIT25; /* To release DAC delta sigma clock gating */ - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_SYS_SYSPLL_CTRL2,ADCLocalTemp); + HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL2, ADCLocalTemp); /* Turn on DAC active clock */ ACTCK_ADC_CCTRL(ON); @@ -1267,12 +1267,14 @@ RtkADCReceive( pHALADCGdmaAdpt->MuliBlockCunt = 0; pHALADCGdmaOp->HalGdmaChSeting(pHALADCGdmaAdpt); - pHALADCGdmaOp->HalGdmaChEn(pHALADCGdmaAdpt); - pSalADCHND->DevSts = ADC_STS_RX_ING; AdcTempDat = HAL_ADC_READ32(REG_ADC_POWER); AdcTempDat |= BIT_ADC_PWR_AUTO; HAL_ADC_WRITE32(REG_ADC_POWER, AdcTempDat); + + pHALADCGdmaOp->HalGdmaChEn(pHALADCGdmaAdpt); + + pSalADCHND->DevSts = ADC_STS_RX_ING; return _EXIT_SUCCESS; } return _EXIT_FAILURE; @@ -1288,9 +1290,6 @@ RtkADCReceiveBuf( PSAL_ADC_HND pSalADCHND = (PSAL_ADC_HND) Data; PSAL_ADC_HND_PRIV pSalADCHNDPriv = NULL; PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - - - PHAL_ADC_OP pHalADCOP = NULL; //PIRQ_HANDLE pIrqHandleADCGdma = NULL; @@ -1299,13 +1298,8 @@ RtkADCReceiveBuf( /* To Get the SAL_I2C_MNGT_ADPT Pointer */ pSalADCHNDPriv = CONTAINER_OF(pSalADCHND, SAL_ADC_HND_PRIV, SalADCHndPriv); pSalADCMngtAdpt = CONTAINER_OF(pSalADCHNDPriv->ppSalADCHnd, SAL_ADC_MNGT_ADPT, pSalHndPriv); - - - - pHalADCOP = pSalADCMngtAdpt->pHalOp; - - + pHalADCOP = pSalADCMngtAdpt->pHalOp; /* Clear ADC Status */ //HAL_ADC_READ32(REG_ADC_INTR_STS); @@ -1315,11 +1309,12 @@ RtkADCReceiveBuf( //DBG_8195A(">>INTR:%x\n",AdcTempDat); ADCFullStsFlag = 0; - HalDelayUs(2000); +/// HalDelayUs(2000); ? + HalDelayUs(20); DBG_ADC_INFO("RtkADCReceiveBuf, Check to enable ADC manully or not\n"); AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_POWER); - if (unlikely((AdcTempDat & 0x00000008) == 0)) { + if (unlikely((AdcTempDat & BIT_ADC_ISO_MANUAL) == 0)) { ; } else { @@ -1329,23 +1324,22 @@ RtkADCReceiveBuf( //AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_POWER); } - pSalADCHND->pInitDat->ADCIntrMSK = (BIT_ADC_FIFO_FULL_EN); pHalADCOP->HalADCIntrCtrl(pSalADCHND->pInitDat); pSalADCHND->DevSts = ADC_STS_IDLE; AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - if ((AdcTempDat & 0x00000001) == 0){ + if ((AdcTempDat & BIT_ADC_EN_MANUAL) == 0){ AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); DBG_ADC_INFO("RtkADCReceiveBuf, Before set, Reg AD1:%x\n", AdcTempDat); - AdcTempDat |= (0x01); + AdcTempDat |= BIT_ADC_EN_MANUAL; HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD1, AdcTempDat); AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); DBG_ADC_INFO("RtkADCReceiveBuf, After set, Reg AD1:%x\n", AdcTempDat); AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); DBG_ADC_INFO("RtkADCReceiveBuf, Before set, Reg AD0:%x\n", AdcTempDat); - AdcTempDat |= (0x01); + AdcTempDat |= BIT_ADC_EN_MANUAL; HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD0, AdcTempDat); AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); DBG_ADC_INFO("RtkADCReceiveBuf, After set, Reg AD0:%x\n", AdcTempDat); @@ -1359,14 +1353,14 @@ RtkADCReceiveBuf( AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); DBG_ADC_INFO("RtkADCReceiveBuf, End of ADC, Before set, AD0:%x\n", AdcTempDat); - AdcTempDat &= (~0x01); + AdcTempDat &= (~BIT_ADC_EN_MANUAL); HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD0, AdcTempDat); AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); DBG_ADC_INFO("RtkADCReceiveBuf, End of ADC, After set, AD0:%x\n", AdcTempDat); AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); DBG_ADC_INFO("RtkADCReceiveBuf, End of ADC, Before set, AD1:%x\n", AdcTempDat); - AdcTempDat &= (~0x01); + AdcTempDat &= (~BIT_ADC_EN_MANUAL); HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD1, AdcTempDat); AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); DBG_ADC_INFO("RtkADCReceiveBuf, End of ADC, After set, AD1:%x\n", AdcTempDat); @@ -1410,7 +1404,7 @@ RtkADCRxManualRotate( DBG_ADC_INFO("RtkADCRxManualRotate, Check to enable ADC manully or not\n"); AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_POWER); - if (unlikely((AdcTempDat & 0x00000008) == 0)) { + if (unlikely((AdcTempDat & BIT_ADC_ISO_MANUAL) == 0)) { ; } else { @@ -1426,7 +1420,7 @@ RtkADCRxManualRotate( pSalADCHND->DevSts = ADC_STS_IDLE; AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - if ((AdcTempDat & 0x00000001) == 0){ + if ((AdcTempDat & BIT_ADC_EN_MANUAL) == 0){ AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); DBG_ADC_INFO("RtkADCRxManualRotate, Before set, Reg AD1:%x\n", AdcTempDat); /* Clear for manual rotrate first*/ @@ -1435,7 +1429,7 @@ RtkADCRxManualRotate( AdcTempDat |= (BIT0); /* Enable manual mode, this is to turn cali. off */ - AdcTempDat &= ~(BIT11); +// AdcTempDat &= ~(BIT11); AdcTempDat |= (BIT11); /* Set rotation to default state @@ -1476,7 +1470,7 @@ RtkADCRxManualRotate( /* Read Content */ for (tempcnt=0; tempcnt<16; tempcnt++){ - ADCDatBuf[0] = (u32)HAL_ADC_READ32(REG_ADC_FIFO_READ); + ADCDatBuf[0] = (u32)HAL_ADC_READ32(REG_ADC_FIFO_READ); } /* Close ADC */ @@ -1507,7 +1501,7 @@ RtkADCRxManualRotate( AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); DBG_ADC_INFO("RtkADCRxManualRotate, Before set, Reg AD0:%x\n", AdcTempDat); - AdcTempDat |= (0x01); + AdcTempDat |= BIT_ADC_EN_MANUAL; HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD0, AdcTempDat); AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); DBG_ADC_INFO("RtkADCRxManualRotate, After set, Reg AD0:%x\n", AdcTempDat); @@ -1537,14 +1531,14 @@ RtkADCRxManualRotate( /* Close ADC */ AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); DBG_ADC_INFO("RtkADCRxManualRotate, End of ADC, Before set, AD0:%x\n", AdcTempDat); - AdcTempDat &= (~0x01); + AdcTempDat &= (~BIT_ADC_EN_MANUAL); HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD0, AdcTempDat); AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); DBG_ADC_INFO("RtkADCRxManualRotate, End of ADC, After set, AD0:%x\n", AdcTempDat); AdcTempDat = (u32)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); DBG_ADC_INFO("RtkADCRxManualRotate, End of ADC, Before set, AD1:%x\n", AdcTempDat); - AdcTempDat &= (~0x01); + AdcTempDat &= (~BIT0); /* Disable manual mode */ AdcTempDat &= (~BIT11); diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_log_uart.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_log_uart.c index 12fc92a..90582ff 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_log_uart.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_log_uart.c @@ -161,7 +161,7 @@ void HalLogUartIrqHandle(VOID * Data) { void HalLogUartSetBaudRate(HAL_LOG_UART_ADAPTER *pUartAdapter) { u32 clk4 = HalGetCpuClk() >> 2; // PLATFORM_CLOCK/2; // (unsigned int) HalGetCpuClk() >> 2; // div 4 if (pUartAdapter->BaudRate == 0) - pUartAdapter->BaudRate = UART_BAUD_RATE_38400; + pUartAdapter->BaudRate = DEFAULT_BAUDRATE; u32 br16 = pUartAdapter->BaudRate << 4; // * 16 if ((br16 != 0) && (br16 <= clk4)) { unsigned int dll = clk4 / br16; @@ -200,7 +200,7 @@ u32 HalLogUartInitSetting(HAL_LOG_UART_ADAPTER *pUartAdapter) { // HalPinCtrlRtl8195A(LOG_UART, 0, 1); ???? u32 clk4 = HalGetCpuClk() >> 2; // PLATFORM_CLOCK/2; // (unsigned int) HalGetCpuClk() >> 2; // div 4 if (pUartAdapter->BaudRate == 0) - pUartAdapter->BaudRate = UART_BAUD_RATE_38400; + pUartAdapter->BaudRate = DEFAULT_BAUDRATE; u32 br16 = pUartAdapter->BaudRate << 4; // * 16 HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, 0); // 40003004 = 0; if (br16 <= clk4) { @@ -418,7 +418,7 @@ void HalInitLogUart(void) { HAL_PERI_ON_WRITE32(REG_PESOC_CLK_CTRL, HAL_PERI_ON_READ32(REG_PESOC_CLK_CTRL) | BIT_SOC_ACTCK_LOG_UART_EN); // 40000230 |= 0x1000u; HalPinCtrlRtl8195A(LOG_UART, 0, 1); - UartAdapter.BaudRate = UART_BAUD_RATE_38400; + UartAdapter.BaudRate = DEFAULT_BAUDRATE; UartAdapter.DataLength = UART_DATA_LEN_8BIT; UartAdapter.FIFOControl = FCR_RX_TRIG_MASK | FCR_FIFO_EN; // 0xC1; UartAdapter.IntEnReg = IER_ERBFI | IER_ELSI; // 5 diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_pwm.c b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_pwm.c index 674e091..147d239 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_pwm.c +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/src/hal_pwm.c @@ -3,8 +3,8 @@ * * Copyright (c) 2013 Realtek Semiconductor Corp. * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. + * -------------------------- + * bug fixing: pvvx */ 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 9d8605f..abaeafa 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 @@ -46,7 +46,6 @@ PatchHalLogUartInit( u32 Divisor; u32 Dlh; u32 Dll; - u32 SysClock; /* Interrupt enable Register @@ -71,21 +70,11 @@ PatchHalLogUartInit( // set up buad rate division #ifdef CONFIG_FPGA - SysClock = SYSTEM_CLK; - Divisor = (SysClock / (16 * (UartAdapter.BaudRate))); + Divisor = (SYSTEM_CLK / (16 * (UartAdapter.BaudRate))); #else { - u32 SampleRate, Remaind; - - SysClock = HalGetCpuClk() >> 2; - - SampleRate = (16 * (UartAdapter.BaudRate)); - - Divisor= SysClock/SampleRate; - - Remaind = ((SysClock*10)/SampleRate) - (Divisor*10); - - if (Remaind > 4) Divisor++; + Divisor = HalGetCpuClk()/(32 * UartAdapter.BaudRate); + Divisor = (Divisor & 1) + (Divisor >> 1); } #endif @@ -98,7 +87,7 @@ PatchHalLogUartInit( HAL_UART_WRITE32(UART_DLL_OFF, Dll); HAL_UART_WRITE32(UART_DLH_OFF, Dlh); // clear DLAB bit - HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, 0); +// HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, 0); // есть далее // set data format SetData = UartAdapter.Parity | UartAdapter.Stop | UartAdapter.DataLength; @@ -160,7 +149,7 @@ PSHalInitPlatformLogUart( UartIrqHandle.Priority = 0; //4 Inital Log uart - UartAdapter.BaudRate = UART_BAUD_RATE_38400; + UartAdapter.BaudRate = DEFAULT_BAUDRATE; UartAdapter.DataLength = UART_DATA_LEN_8BIT; UartAdapter.FIFOControl = 0xC1; UartAdapter.IntEnReg = 0x00; 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 7003be7..96c92f9 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 @@ -547,13 +547,13 @@ HalSsiInit(VOID *Data) DBG_SSI_ERR("Invalid SPI Index.\n"); break; } -/* + ret = FunctionChk(Function, (u32)PinmuxSelect); if(ret == _FALSE){ DBG_SSI_ERR("Invalid Pinmux Setting.\n"); return HAL_ERR_PARA; } -*/ + #ifdef CONFIG_SOC_PS_MODULE REG_POWER_STATE SsiPwrState; #endif 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 abc5dc3..1295239 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 @@ -6,11 +6,9 @@ */ //====================================================== #ifndef LOGUART_STACK_SIZE -#define LOGUART_STACK_SIZE 400 // USE_MIN_STACK_SIZE to 128 +#define LOGUART_STACK_SIZE 400 // USE_MIN_STACK_SIZE modify from 512 to 128 #endif -#ifndef CONSOLE_PRIORITY #define CONSOLE_PRIORITY 0 -#endif //====================================================== #include "rtl8195a.h" #include "rtl_bios_data.h" @@ -43,7 +41,7 @@ _LONG_CALL_ extern void UartLogHistoryCmd( IN u8 RevData, IN UART_LOG_CTL *prvUartLogCtl, IN u8 EchoFlag); -_LONG_CALL_ extern void UartLogCmdExecute(IN PUART_LOG_CTL pUartLogCtlExe); +//_LONG_CALL_ extern void UartLogCmdExecute(IN PUART_LOG_CTL pUartLogCtlExe); //====================================================== extern PCOMMAND_TABLE UartLogRamCmdTable[]; extern UartLogRamCmdTableSize; @@ -128,9 +126,9 @@ void UartLogIrqHandleRam(void * Data) { // для передачи ' ' или ','. // Начальные пробелы cmd или arg удаляются. //====================================================== -int GetArgvRam(IN u8 *pstr) { +int GetArgvRam(IN u8 *pstr, u8** argv) { int arvc = 0; - u8** argv = ArgvArray; +// u8** argv = ArgvArray; u8* p = pstr; u8 t, n = ' '; int m = 0; @@ -213,7 +211,7 @@ MON_RAM_TEXT_SECTION void RtlConsolTaskRam(void *Data) { RtlDownSema(&p->Sema); if (p->ExecuteCmd) { // UartLogCmdExecute(pUartLogCtl); - int argc = GetArgvRam(p->pTmpLogBuf->UARTLogBuf); + int argc = GetArgvRam(p->pTmpLogBuf->UARTLogBuf, ArgvArray); if(argc) { StrUpr(ArgvArray[0]); PCOMMAND_TABLE pcmd = p->pCmdTbl; @@ -329,8 +327,13 @@ _WEAK void console_help(int argc, char *argv[]) { // Help } DiagPrintf(&str_rom_57ch3Dch0A[25]); // DiagPrintf("==============================\n"); } +LOCAL void print_on(int argc, char *argv[]) +{ + print_off = argv[1][0]!='1'; +} // (!) размещается в специальном сегменте '.mon.tab*' (см. *.ld файл) MON_RAM_TAB_SECTION COMMAND_TABLE console_commands[] = { + {"PR", 1, print_on, "<1/0>: Printf on/off"}, // Help {"?", 0, console_help, ": This Help"} // Help // {"HELP", 0, console_help, ": Help"} // Help }; diff --git a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/include/rtl_bios_data.h b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/include/rtl_bios_data.h index 2a4cd72..cc58bb5 100644 --- a/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/include/rtl_bios_data.h +++ b/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/include/rtl_bios_data.h @@ -92,7 +92,7 @@ typedef struct _FALSE_ALARM_STATISTICS { u32 Cnt_CCA_all; u32 Cnt_BW_USC; u32 Cnt_BW_LSC; -} FALSE_ALARM_STATISTICS, *PFALSE_ALARM_STATISTICS; +} FALSE_ALARM_STATISTICS; extern FALSE_ALARM_STATISTICS FalseAlmCnt; // 100006E0 typedef struct _rom_info { @@ -100,7 +100,7 @@ typedef struct _rom_info { u8 CrystalCap; u64 DebugComponents; u32 DebugLevel; -} ROM_INFO, *PROM_INFO; +} ROM_INFO; extern ROM_INFO ROMInfo; // 10000720 typedef struct _CFO_TRACKING_ { @@ -118,7 +118,7 @@ typedef struct _CFO_TRACKING_ { u8 CFO_TH_XTAL_HIGH; u8 CFO_TH_XTAL_LOW; u8 CFO_TH_ATC; -} CFO_TRACKING, *PCFO_TRACKING;; +}CFO_TRACKING; extern CFO_TRACKING DM_CfoTrack; // 10000738 /* in rom_libgloss_retarget.h 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 b8bddaf..4ff3a67 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 @@ -4,7 +4,6 @@ #include #include #include "libc/rom/string/rom_libc_string.h" -#include "strproc.h" #define memchr __rtl_memchr_v1_00 #define memcmp __rtl_memcmp_v1_00 @@ -23,6 +22,10 @@ #define strsep __rtl_strsep_v1_00 #define strtok __rtl_strtok_v1_00 +static char toupper(char ch) { + return ((ch >= 'a' && ch <= 'z') ? ch - 'a' + 'A' : ch); +}; + #define NEWFP 1 #define ENDIAN_LITTLE 1234 #define ENDIAN_BIG 4321 @@ -188,13 +191,6 @@ str_fmt(char *p, int size, int fmt) /* * strtoupper() */ -#define strtoupper StrUpr -/* - -LOCAL char toupper(char ch) { - return ((ch >= 'a' && ch <= 'z') ? ch - 'a' + 'A' : ch); -}; - void strtoupper(char *p) { @@ -203,7 +199,7 @@ strtoupper(char *p) for (; *p; p++) *p = toupper (*p); } -*/ + /* $Id: atob.c,v 1.1.1.1 2006/08/23 17:03:06 pefo Exp $ */ /* @@ -637,7 +633,7 @@ c_vsprintf (char *d, const char *s, va_list ap) } else if (*s == 'o') base = 8; - else //if (*s == 'b') + else if (*s == 'b') base = 2; if (longlong) llbtoa(d, va_arg (ap, quad_t), @@ -1078,12 +1074,9 @@ int c_printf(const char *fmt, ...) int puts (const char *s) { - int i = 0; while(*s) { HalSerialPutcRtl8195a(*s++); - i++; } - return i; } 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 704a9d2..79739ac 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 @@ -62,7 +62,8 @@ char * rtl_strtok(char *s, const char *delim); extern struct _reent * _rtl_impure_ptr; -int libc_has_init; +char libc_has_init; +char print_off; // extern rtl_impure_ptr // extern impure_ptr @@ -139,14 +140,17 @@ int rtl_printf(const char *fmt, ...) { if (!libc_has_init) { rtl_libc_init(); } -#endif - va_list args; - va_start (args, fmt); - int result = __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, - _rtl_impure_ptr->_stdout, fmt, args); - __rtl_fflush_r_v1_00(_rtl_impure_ptr, _rtl_impure_ptr->_stdout); - // va_end (args); - return result; +#endif + if(!print_off) { + va_list args; + va_start (args, fmt); + int result = __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, + _rtl_impure_ptr->_stdout, fmt, args); + __rtl_fflush_r_v1_00(_rtl_impure_ptr, _rtl_impure_ptr->_stdout); + // va_end (args); + return result; + } + else return 0; } //----- rtl_vprintf() 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 b65497e..b2490fd 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 @@ -6,8 +6,6 @@ #include "rtl_bios_data.h" #include "va_list.h" -#include "strproc.h" -#include "rt_lib_rom.h" #define CHECK_LIBC_INIT 0 //------------------------------------------------------------------------- @@ -69,10 +67,8 @@ unsigned long long __aeabi_llsr(unsigned long long val, unsigned int shift); extern struct _reent * _rtl_impure_ptr; -#if CHECK_LIBC_INIT -extern int libc_has_init; -#endif -// extern impure_ptr +extern char libc_has_init; +extern char print_off; //------------------------------------------------------------------------- // Function @@ -142,13 +138,17 @@ int printf(const char *fmt, ...) { rtl_libc_init(); } #endif - va_list args; - va_start (args, fmt); - int result = __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, - _rtl_impure_ptr->_stdout, fmt, args); - __rtl_fflush_r_v1_00(_rtl_impure_ptr, _rtl_impure_ptr->_stdout); - // va_end (args); - return result; + if(!print_off) { + + va_list args; + va_start (args, fmt); + int result = __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, + _rtl_impure_ptr->_stdout, fmt, args); + __rtl_fflush_r_v1_00(_rtl_impure_ptr, _rtl_impure_ptr->_stdout); + // va_end (args); + return result; + } + else return 0; } //----- vprintf() @@ -169,6 +169,7 @@ int vprintf(const char * fmt, __VALIST param) { 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) { @@ -299,9 +300,9 @@ int sscanf(const char *buf, const char *fmt, ...) { return i; } -LOCAL char toupper(char ch) { +char toupper(char ch) { return ((ch >= 'a' && ch <= 'z') ? ch - 'a' + 'A' : ch); -} +}; int _stricmp (const char *s1, const char *s2) { @@ -378,15 +379,12 @@ int __aeabi_dtoi(double d) return __rtl_dtoi_v1_00(d); } -extern _LONG_CALL_ int __rtl_dtoui_v1_00(double d); - //----- __aeabi_dtoui() int __aeabi_dtoui(double d) { return __rtl_dtoui_v1_00(d); } -extern _LONG_CALL_ float __rtl_itof_v1_00(int val); //----- __aeabi_i2f() float __aeabi_i2f(int val) { @@ -411,7 +409,6 @@ int __aeabi_ui2d(unsigned int val) return __rtl_uitod_v1_00(val); } -extern _LONG_CALL_ char * __rtl_ltoa_v1_00(int value, char *string, int radix); //----- __aeabi_itoa() char * __aeabi_itoa(int value, char *string, int radix) { @@ -424,7 +421,6 @@ char * __aeabi_ltoa(int value, char *string, int radix) return (char *)__rtl_ltoa_v1_00(value, string, radix); } -extern _LONG_CALL_ char * __rtl_ultoa_v1_00(unsigned int value, char *string, int radix); //----- __aeabi_utoa() char * __aeabi_utoa(unsigned int value, char *string, int radix) { @@ -437,49 +433,42 @@ char * __aeabi_ultoa(unsigned int value, char *string, int radix) return (char *)__rtl_ultoa_v1_00(value, string, radix); } -extern _LONG_CALL_ long long __rtl_ftol_v1_00(float f); //----- __aeabi_ftol() -long long __aeabi_ftol(float f) +int __aeabi_ftol(float f) { return __rtl_ftol_v1_00(f); } -extern _LONG_CALL_ double __rtl_ftod_v1_00(float f); //----- __aeabi_ftod() -double __aeabi_ftod(float f) +int __aeabi_ftod(float f) { return __rtl_ftod_v1_00(f); } -extern _LONG_CALL_ float __rtl_dtof_v1_00(double d); //----- __aeabi_dtof() float __aeabi_dtof(double d) { return __rtl_dtof_v1_00(d); } -extern _LONG_CALL_ float __rtl_fadd_v1_00(float a, float b); //----- __aeabi_fadd() float __aeabi_fadd(float a, float b) { return __rtl_fadd_v1_00(a, b); } -extern _LONG_CALL_ float __rtl_fsub_v1_00(float a, float b); //----- __aeabi_fsub() float __aeabi_fsub(float a, float b) { return __rtl_fsub_v1_00(a, b); } -extern _LONG_CALL_ float __rtl_fmul_v1_00(float a, float b); //----- __aeabi_fmul() float __aeabi_fmul(float a, float b) { return __rtl_fmul_v1_00(a, b); } -extern _LONG_CALL_ float __rtl_fdiv_v1_00(float a, float b); //----- __aeabi_fdiv() float __aeabi_fdiv(float a, float b) { @@ -487,25 +476,25 @@ float __aeabi_fdiv(float a, float b) } //----- __aeabi_dadd() -double __aeabi_dadd(double a, double b) +int __aeabi_dadd(double a, double b) { return __rtl_dadd_v1_00(a, b); } //----- __aeabi_dsub() -double __aeabi_dsub(double a, double b) +int __aeabi_dsub(double a, double b) { return __rtl_dsub_v1_00(a, b); } //----- __aeabi_dmul() -double __aeabi_dmul(double a, double b) +int __aeabi_dmul(double a, double b) { return __rtl_dmul_v1_00(a, b); } //----- __aeabi_ddiv() -double __aeabi_ddiv(double a, double b) +int __aeabi_ddiv(double a, double b) { return __rtl_ddiv_v1_00(a, b); } @@ -522,7 +511,6 @@ int __aeabi_dcmplt(double a, double b) return __rtl_dcmplt_v1_00(a, b); } -extern _LONG_CALL_ int __rtl_dcmple_v1_00(double a, double b); //----- __aeabi_dcmple() int __aeabi_dcmple(double a, double b) { @@ -535,13 +523,12 @@ int __aeabi_dcmpgt(double a, double b) return __rtl_dcmpgt_v1_00(a, b); } -extern _LONG_CALL_ int __rtl_fcmplt_v1_00(float a, float b); //----- __aeabi_fcmplt() int __aeabi_fcmplt(float a, float b) { return __rtl_fcmplt_v1_00(a, b); } -extern _LONG_CALL_ int __rtl_fcmpgt_v1_00(float a, float b); + //----- __aeabi_fcmpgt() int __aeabi_fcmpgt(float a, float b) { 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 7f4b2ad..8f7589a 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,7 +4,6 @@ */ #include "basic_types.h" -#include "rt_lib_rom.h" //------------------------------------------------------------------------- // Function declarations @@ -72,15 +71,12 @@ int rtl_dtoi(double d) return __rtl_dtoi_v1_00(d); } -extern _LONG_CALL_ int __rtl_dtoui_v1_00(double d); - //----- rtl_dtoui() int rtl_dtoui(double d) { return __rtl_dtoui_v1_00(d); } -extern _LONG_CALL_ float __rtl_itof_v1_00(int val); //----- rtl_i2f() float rtl_i2f(int val) { @@ -105,7 +101,6 @@ int rtl_ui2d(unsigned int val) return __rtl_uitod_v1_00(val); } -extern _LONG_CALL_ char * __rtl_ltoa_v1_00(int value, char *string, int radix); //----- rtl_itoa() char *rtl_itoa(int value, char *string, int radix) { @@ -118,7 +113,6 @@ char *rtl_ltoa(int value, char *string, int radix) return (char *)__rtl_ltoa_v1_00(value, string, radix); } -extern _LONG_CALL_ char * __rtl_ultoa_v1_00(unsigned int value, char *string, int radix); //----- rtl_utoa() char *rtl_utoa(unsigned int value, char *string, int radix) { @@ -131,7 +125,6 @@ char *rtl_ultoa(unsigned int value, char *string, int radix) return (char *)__rtl_ultoa_v1_00(value, string, radix); } -extern _LONG_CALL_ double __rtl_ftod_v1_00(float f); //----- rtl_ftol() int rtl_ftol(float f) { @@ -144,7 +137,6 @@ int rtl_ftod(float f) return __rtl_ftod_v1_00(f); } -extern _LONG_CALL_ float __rtl_fsub_v1_00(float a, float b); //----- rtl_dtof() float rtl_dtof(double d) { @@ -163,14 +155,12 @@ float rtl_fsub(float a, float b) return __rtl_fsub_v1_00(a, b); } -extern _LONG_CALL_ float __rtl_fmul_v1_00(float a, float b); //----- rtl_fmul() float rtl_fmul(float a, float b) { return __rtl_fmul_v1_00(a, b); } -extern _LONG_CALL_ float __rtl_fdiv_v1_00(float a, float b); //----- rtl_fdiv() float rtl_fdiv(float a, float b) { @@ -213,7 +203,6 @@ int rtl_dcmplt(double a, double b) return __rtl_dcmplt_v1_00(a, b); } -extern _LONG_CALL_ int __rtl_dcmple_v1_00(double a, double b); //----- rtl_dcmple() int rtl_dcmple(double a, double b) { @@ -225,13 +214,13 @@ int rtl_dcmpgt(double a, double b) { return __rtl_dcmpgt_v1_00(a, b); } -extern _LONG_CALL_ int __rtl_fcmplt_v1_00(float a, float b); + //----- rtl_fcmplt() int rtl_fcmplt(float a, float b) { return __rtl_fcmplt_v1_00(a, b); } -extern _LONG_CALL_ int __rtl_fcmpgt_v1_00(float a, float b); + //----- rtl_fcmpgt() int rtl_fcmpgt(float a, float b) { 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 4809b33..7fa3703 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,28 +20,25 @@ 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_ double __rtl_fabs_v1_00(double number); //----- 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/build/bin/ota.bin b/build/bin/ota.bin index bdbc7106d7235bf9a1f1ee4b4ec9fa47d28d3871..f238190f50aa47ebdf0f88e9fa8508626146f8ba 100644 GIT binary patch delta 57473 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�B(W{7f6M+Fgx!>!=&rVmDUY1 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 U-A-JsG`hbgjq4ySJbp?1A7w!i<^TWy delta 56975 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

2B`#9DdwUUiH(@b-w{WrY-QOh$J&iZ{du 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

MqA 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 diff --git a/build/bin/ram_2.bin b/build/bin/ram_2.bin index 26e4e3b2d9c894108ef1b5168efa79b49dca3eee..bb4ca0cfa99ff23904dc2208c08e2c418d4d2b3f 100644 GIT binary patch delta 57462 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 RA;8CNsI1bbFO||e{5Lc*fs_CM diff --git a/build/bin/ram_2.ns.bin b/build/bin/ram_2.ns.bin index b8d980584d6fd0b1b5d6394599c7ba28b34d6621..e4b78c613893d20d33d95ab260a91cee4a7950e1 100644 GIT binary patch delta 57468 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 QfZa}9sW7|0Dy4V$ANuhRl>h($ delta 56970 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 QfZa}9sW7|0Dy4V$ANuhRl>h($ delta 56970 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 delta 57291 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[,password[,encryption[,auto-reconnect[,reconnect pause]]]: WIFI Connect to AP"}, {"ATPA", 1, fATPA, "=[,password[,encryption[,channel[,hidden[,max connections]]]]]: Start WIFI AP"}, {"ATWR", 0, fATWR, ": WIFI Connect, Disconnect"}, -// {"ATON", 0, fATON, ": Open connections"}, -// {"ATOF", 0, fATOF, ": Close connections"}, + {"ATON", 0, fATON, ": Open connections"}, + {"ATOF", 0, fATOF, ": Close connections"}, {"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%"},