diff --git a/package/lean/aic8800/Makefile b/package/lean/aic8800/Makefile index 2ff6ea4aa..863863a53 100644 --- a/package/lean/aic8800/Makefile +++ b/package/lean/aic8800/Makefile @@ -9,10 +9,10 @@ PKG_NAME:=aic8800 PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git -PKG_SOURCE_DATE:=2024-03-04 +PKG_SOURCE_DATE:=2024-06-20 PKG_SOURCE_URL:=https://github.com/radxa-pkg/aic8800.git -PKG_SOURCE_VERSION:=6a7ec8536a1688a785740d98ca96a4d00b274c56 -PKG_MIRROR_HASH:=75bbd6f410089d8301663aebdeeb79027420ec45dd054b5851c408dfeef23776 +PKG_SOURCE_VERSION:=8ad987876a6220fffb40a755e0454250ce2c5fdd +PKG_MIRROR_HASH:=4a22e28a4341eb7516f03ea7e6c1c0523013e1aaf72c17428eb3749c8f553856 MAKE_PATH:=src/SDIO/driver_fw/driver/aic8800 PKG_EXTMOD_SUBDIRS:=$(MAKE_PATH) diff --git a/package/lean/aic8800/patches/010-fixes-build.patch b/package/lean/aic8800/patches/010-fixes-build.patch index 7237486df..dc31ac45f 100644 --- a/package/lean/aic8800/patches/010-fixes-build.patch +++ b/package/lean/aic8800/patches/010-fixes-build.patch @@ -1,6 +1,6 @@ --- a/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_main.c +++ b/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_main.c -@@ -2932,7 +2932,7 @@ static struct rwnx_vif *rwnx_interface_a +@@ -2997,7 +2997,7 @@ static struct rwnx_vif *rwnx_interface_a vif->ap.generation = 0; vif->ap.mesh_pm = NL80211_MESH_POWER_ACTIVE; vif->ap.next_mesh_pm = NL80211_MESH_POWER_ACTIVE; @@ -9,7 +9,7 @@ case NL80211_IFTYPE_AP: INIT_LIST_HEAD(&vif->ap.sta_list); memset(&vif->ap.bcn, 0, sizeof(vif->ap.bcn)); -@@ -3349,7 +3349,7 @@ static int rwnx_cfg80211_change_iface(st +@@ -3414,7 +3414,7 @@ static int rwnx_cfg80211_change_iface(st INIT_LIST_HEAD(&vif->ap.proxy_list); vif->ap.create_path = false; vif->ap.generation = 0; @@ -18,7 +18,7 @@ case NL80211_IFTYPE_AP: case NL80211_IFTYPE_P2P_GO: INIT_LIST_HEAD(&vif->ap.sta_list); -@@ -5257,6 +5257,7 @@ static int rwnx_cfg80211_mgmt_tx(struct +@@ -5333,6 +5333,7 @@ static int rwnx_cfg80211_mgmt_tx(struct switch (RWNX_VIF_TYPE(rwnx_vif)) { case NL80211_IFTYPE_AP_VLAN: rwnx_vif = rwnx_vif->ap_vlan.master; @@ -26,7 +26,7 @@ case NL80211_IFTYPE_AP: case NL80211_IFTYPE_P2P_GO: case NL80211_IFTYPE_MESH_POINT: -@@ -5569,7 +5570,7 @@ rwnx_cfg80211_tdls_mgmt(struct wiphy *wi +@@ -5645,7 +5646,7 @@ rwnx_cfg80211_tdls_mgmt(struct wiphy *wi printk("%s: only one TDLS link is supported!\n", __func__); status_code = WLAN_STATUS_REQUEST_DECLINED; } @@ -35,7 +35,7 @@ case WLAN_TDLS_SETUP_REQUEST: case WLAN_TDLS_TEARDOWN: case WLAN_TDLS_DISCOVERY_REQUEST: -@@ -5889,6 +5890,7 @@ static int rwnx_fill_station_info(struct +@@ -5965,6 +5966,7 @@ static int rwnx_fill_station_info(struct #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0) case FORMATMOD_HE_MU: sinfo->rxrate.he_ru_alloc = rx_vect1->he.ru_size; @@ -104,7 +104,7 @@ { --- a/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_txq.c +++ b/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_txq.c -@@ -635,6 +635,7 @@ static inline void rwnx_txq_vif_for_each +@@ -640,6 +640,7 @@ static inline void rwnx_txq_vif_for_each } case NL80211_IFTYPE_AP_VLAN: rwnx_vif = rwnx_vif->ap_vlan.master; diff --git a/package/lean/aic8800/patches/030-wireless-5.15.patch b/package/lean/aic8800/patches/030-wireless-5.15.patch index ba3337dd4..038af5210 100644 --- a/package/lean/aic8800/patches/030-wireless-5.15.patch +++ b/package/lean/aic8800/patches/030-wireless-5.15.patch @@ -11,7 +11,7 @@ #define IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMER_FB IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB --- a/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_main.c +++ b/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_main.c -@@ -2998,7 +2998,7 @@ static struct rwnx_vif *rwnx_interface_a +@@ -3063,7 +3063,7 @@ static struct rwnx_vif *rwnx_interface_a } else vif->use_4addr = false; @@ -20,7 +20,7 @@ if (cfg80211_register_netdevice(ndev)) #else if (register_netdevice(ndev)) -@@ -3271,7 +3271,7 @@ static int rwnx_cfg80211_del_iface(struc +@@ -3336,7 +3336,7 @@ static int rwnx_cfg80211_del_iface(struc if (dev->reg_state == NETREG_REGISTERED) { /* Will call rwnx_close if interface is UP */ diff --git a/package/lean/aic8800/patches/031-wireless-6.1.patch b/package/lean/aic8800/patches/031-wireless-6.1.patch index a3a942199..735984bde 100644 --- a/package/lean/aic8800/patches/031-wireless-6.1.patch +++ b/package/lean/aic8800/patches/031-wireless-6.1.patch @@ -1,6 +1,6 @@ --- a/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_main.c +++ b/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_main.c -@@ -776,7 +776,7 @@ static void rwnx_csa_finish(struct work_ +@@ -783,7 +783,7 @@ static void rwnx_csa_finish(struct work_ spin_unlock_bh(&rwnx_hw->cb_lock); #if (LINUX_VERSION_CODE >= HIGH_KERNEL_VERSION3) cfg80211_ch_switch_notify(vif->ndev, &csa->chandef, 0, 0); @@ -9,7 +9,7 @@ cfg80211_ch_switch_notify(vif->ndev, &csa->chandef, 0); #else cfg80211_ch_switch_notify(vif->ndev, &csa->chandef); -@@ -3540,7 +3540,7 @@ bool key_flag = false; +@@ -3605,7 +3605,7 @@ bool key_flag = false; * when adding a group key. */ static int rwnx_cfg80211_add_key(struct wiphy *wiphy, struct net_device *netdev, @@ -18,7 +18,7 @@ int link_id, #endif u8 key_index, bool pairwise, const u8 *mac_addr, -@@ -3637,7 +3637,7 @@ bool key_flag = false; +@@ -3702,7 +3702,7 @@ bool key_flag = false; * */ static int rwnx_cfg80211_get_key(struct wiphy *wiphy, struct net_device *netdev, @@ -27,7 +27,7 @@ int link_id, #endif u8 key_index, bool pairwise, const u8 *mac_addr, -@@ -3655,7 +3655,7 @@ static int rwnx_cfg80211_get_key(struct +@@ -3720,7 +3720,7 @@ static int rwnx_cfg80211_get_key(struct * and @key_index, return -ENOENT if the key doesn't exist. */ static int rwnx_cfg80211_del_key(struct wiphy *wiphy, struct net_device *netdev, @@ -36,7 +36,7 @@ int link_id, #endif u8 key_index, bool pairwise, const u8 *mac_addr) -@@ -3694,7 +3694,7 @@ static int rwnx_cfg80211_del_key(struct +@@ -3759,7 +3759,7 @@ static int rwnx_cfg80211_del_key(struct */ static int rwnx_cfg80211_set_default_key(struct wiphy *wiphy, struct net_device *netdev, @@ -45,7 +45,7 @@ int link_id, #endif u8 key_index, bool unicast, bool multicast) -@@ -3709,7 +3709,7 @@ static int rwnx_cfg80211_set_default_key +@@ -3774,7 +3774,7 @@ static int rwnx_cfg80211_set_default_key */ static int rwnx_cfg80211_set_default_mgmt_key(struct wiphy *wiphy, struct net_device *netdev, @@ -54,7 +54,7 @@ int link_id, #endif u8 key_index) -@@ -3796,7 +3796,7 @@ static int rwnx_cfg80211_connect(struct +@@ -3861,7 +3861,7 @@ static int rwnx_cfg80211_connect(struct key_params.seq_len = 0; key_params.cipher = sme->crypto.cipher_group; rwnx_cfg80211_add_key(wiphy, dev, @@ -63,7 +63,7 @@ 0, #endif sme->key_idx, false, NULL, &key_params); -@@ -4063,7 +4063,7 @@ static int rwnx_cfg80211_add_station(str +@@ -4128,7 +4128,7 @@ static int rwnx_cfg80211_add_station(str sta->vif_idx = rwnx_vif->vif_index; sta->vlan_idx = sta->vif_idx; sta->qos = (params->sta_flags_set & BIT(NL80211_STA_FLAG_WME)) != 0; @@ -72,7 +72,7 @@ sta->ht = params->link_sta_params.ht_capa ? 1 : 0; sta->vht = params->link_sta_params.vht_capa ? 1 : 0; #else -@@ -4469,7 +4469,7 @@ static int rwnx_cfg80211_change_station( +@@ -4534,7 +4534,7 @@ static int rwnx_cfg80211_change_station( sta->vif_idx = rwnx_vif->vif_index; sta->vlan_idx = sta->vif_idx; sta->qos = (params->sta_flags_set & BIT(NL80211_STA_FLAG_WME)) != 0; @@ -81,7 +81,7 @@ sta->ht = params->link_sta_params.ht_capa ? 1 : 0; sta->vht = params->link_sta_params.vht_capa ? 1 : 0; #else -@@ -4716,7 +4716,7 @@ static int rwnx_cfg80211_change_beacon(s +@@ -4781,7 +4781,7 @@ static int rwnx_cfg80211_change_beacon(s /** * * @stop_ap: Stop being an AP, including stopping beaconing. */ @@ -90,7 +90,7 @@ static int rwnx_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *dev, unsigned int link_id) #else static int rwnx_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *dev) -@@ -5190,7 +5190,7 @@ static int rwnx_cfg80211_dump_survey(str +@@ -5266,7 +5266,7 @@ static int rwnx_cfg80211_dump_survey(str */ static int rwnx_cfg80211_get_channel(struct wiphy *wiphy, struct wireless_dev *wdev, @@ -99,7 +99,7 @@ unsigned int link_id, #endif struct cfg80211_chan_def *chandef) -@@ -5487,7 +5487,7 @@ int rwnx_cfg80211_channel_switch (struct +@@ -5563,7 +5563,7 @@ int rwnx_cfg80211_channel_switch (struct INIT_WORK(&csa->work, rwnx_csa_finish); #if LINUX_VERSION_CODE >= HIGH_KERNEL_VERSION4 cfg80211_ch_switch_started_notify(dev, &csa->chandef, 0, params->count, false, 0); @@ -110,7 +110,7 @@ cfg80211_ch_switch_started_notify(dev, &csa->chandef, params->count, params->block_tx); --- a/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_msg_rx.c +++ b/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_msg_rx.c -@@ -836,7 +836,7 @@ static inline int rwnx_rx_sm_connect_ind +@@ -851,7 +851,7 @@ static inline int rwnx_rx_sm_connect_ind do { bss = cfg80211_get_bss(wdev->wiphy, NULL, rwnx_vif->sta.bssid, @@ -119,7 +119,7 @@ wdev->u.client.ssid, wdev->u.client.ssid_len, #else wdev->ssid, wdev->ssid_len, -@@ -866,7 +866,7 @@ static inline int rwnx_rx_sm_connect_ind +@@ -881,7 +881,7 @@ static inline int rwnx_rx_sm_connect_ind #else WLAN_CAPABILITY_ESS, #endif @@ -128,7 +128,7 @@ (int)wdev->u.client.ssid_len, wdev->u.client.ssid, #else -@@ -887,7 +887,7 @@ static inline int rwnx_rx_sm_connect_ind +@@ -902,7 +902,7 @@ static inline int rwnx_rx_sm_connect_ind rwnx_vif->sta.bssid[0], rwnx_vif->sta.bssid[1], rwnx_vif->sta.bssid[2], rwnx_vif->sta.bssid[3], rwnx_vif->sta.bssid[4], rwnx_vif->sta.bssid[5]); @@ -137,7 +137,7 @@ wdev->u.client.ssid_len = (int)rwnx_vif->sta.ssid_len; memcpy(wdev->u.client.ssid, rwnx_vif->sta.ssid, wdev->u.client.ssid_len); #else -@@ -927,7 +927,7 @@ static inline int rwnx_rx_sm_connect_ind +@@ -942,7 +942,7 @@ static inline int rwnx_rx_sm_connect_ind #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) struct cfg80211_roam_info info; memset(&info, 0, sizeof(info)); @@ -148,7 +148,7 @@ info.links[0].bssid = (const u8 *)ind->bssid.array; --- a/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_msg_tx.c +++ b/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_msg_tx.c -@@ -1941,7 +1941,7 @@ int rwnx_send_me_sta_add(struct rwnx_hw +@@ -2076,7 +2076,7 @@ int rwnx_send_me_sta_add(struct rwnx_hw { struct me_sta_add_req *req; diff --git a/package/lean/aic8800/patches/032-wireless-6.6.patch b/package/lean/aic8800/patches/032-wireless-6.6.patch index 4962b62d5..457a1169e 100644 --- a/package/lean/aic8800/patches/032-wireless-6.6.patch +++ b/package/lean/aic8800/patches/032-wireless-6.6.patch @@ -1,13 +1,20 @@ ---- a/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_compat.h -+++ b/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_compat.h -@@ -47,8 +47,8 @@ - #else - #define HIGH_KERNEL_VERSION KERNEL_VERSION(6, 0, 0) - #define HIGH_KERNEL_VERSION2 KERNEL_VERSION(6, 1, 0) --#define HIGH_KERNEL_VERSION3 KERNEL_VERSION(6, 3, 0) --#define HIGH_KERNEL_VERSION4 KERNEL_VERSION(6, 3, 0) -+#define HIGH_KERNEL_VERSION3 KERNEL_VERSION(6, 9, 0) -+#define HIGH_KERNEL_VERSION4 KERNEL_VERSION(6, 9, 0) - #endif - - +--- a/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_main.c ++++ b/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_main.c +@@ -781,7 +781,7 @@ static void rwnx_csa_finish(struct work_ + } else + rwnx_txq_vif_stop(vif, RWNX_TXQ_STOP_CHAN, rwnx_hw); + spin_unlock_bh(&rwnx_hw->cb_lock); +-#if (LINUX_VERSION_CODE >= HIGH_KERNEL_VERSION3) ++#if (LINUX_VERSION_CODE >= HIGH_KERNEL_VERSION3) && !defined(BUILD_OPENWRT) + cfg80211_ch_switch_notify(vif->ndev, &csa->chandef, 0, 0); + #elif (LINUX_VERSION_CODE >= HIGH_KERNEL_VERSION) || defined(BUILD_OPENWRT) + cfg80211_ch_switch_notify(vif->ndev, &csa->chandef, 0); +@@ -5561,7 +5561,7 @@ int rwnx_cfg80211_channel_switch (struct + goto end; + } else { + INIT_WORK(&csa->work, rwnx_csa_finish); +-#if LINUX_VERSION_CODE >= HIGH_KERNEL_VERSION4 ++#if LINUX_VERSION_CODE >= HIGH_KERNEL_VERSION4 && !defined(BUILD_OPENWRT) + cfg80211_ch_switch_started_notify(dev, &csa->chandef, 0, params->count, false, 0); + #elif LINUX_VERSION_CODE >= HIGH_KERNEL_VERSION2 || defined(BUILD_OPENWRT) + cfg80211_ch_switch_started_notify(dev, &csa->chandef, 0, params->count, false); diff --git a/package/lean/aic8800/patches/040-disable-log.patch b/package/lean/aic8800/patches/040-disable-log.patch index 7c0b13237..0a967598f 100644 --- a/package/lean/aic8800/patches/040-disable-log.patch +++ b/package/lean/aic8800/patches/040-disable-log.patch @@ -11,7 +11,7 @@ --- a/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_main.c +++ b/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_main.c -@@ -503,7 +503,7 @@ static const int rwnx_hwq2uapsd[NL80211_ +@@ -510,7 +510,7 @@ static const int rwnx_hwq2uapsd[NL80211_ extern uint8_t scanning; @@ -20,13 +20,3 @@ module_param(aicwf_dbg_level, int, 0660); int testmode = 0; char aic_fw_path[200]; ---- a/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_tx.c -+++ b/src/SDIO/driver_fw/driver/aic8800/aic8800_fdrv/rwnx_tx.c -@@ -169,7 +169,6 @@ void rwnx_ps_bh_traffic_req(struct rwnx_ - // sta->mac_addr)) - // return; - if (!sta->ps.active) { -- printk("sta %pM is not in Power Save mode", sta->mac_addr); - return; - } - #ifdef CREATE_TRACE_POINTS diff --git a/package/lean/aic8800/patches/050-memcpy.patch b/package/lean/aic8800/patches/050-memcpy.patch new file mode 100644 index 000000000..0c27dbc13 --- /dev/null +++ b/package/lean/aic8800/patches/050-memcpy.patch @@ -0,0 +1,20 @@ +--- a/src/SDIO/driver_fw/driver/aic8800/aic8800_bsp/aic_bsp_driver.c ++++ b/src/SDIO/driver_fw/driver/aic8800/aic8800_bsp/aic_bsp_driver.c +@@ -16,6 +16,7 @@ + #include + #include + #include ++#include + + #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0) + #include +@@ -1364,7 +1365,8 @@ int aicbt_patch_info_unpack(struct aicbt + patch_info->info_len = head_t->len; + if(patch_info->info_len == 0) + return 0; +- memcpy(&patch_info->adid_addrinf, head_t->data, patch_info->info_len * sizeof(uint32_t) * 2); ++ unsafe_memcpy(&patch_info->adid_addrinf, head_t->data, ++ patch_info->info_len * sizeof(uint32_t) * 2, /* justification */); + } + return 0; + }