Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
commit
877d41cd9c
@ -1,2 +1,2 @@
|
|||||||
LINUX_VERSION-6.1 = .44
|
LINUX_VERSION-6.1 = .45
|
||||||
LINUX_KERNEL_HASH-6.1.44 = 2e51d41fe11d082ae167cee05772bb07ca7f19448d2b46772d8ca2db7673a1a5
|
LINUX_KERNEL_HASH-6.1.45 = bd2343396e7ddad8974f3689a5a067ec931f4ade793e72b1070a85cd19f1f192
|
||||||
|
@ -0,0 +1,21 @@
|
|||||||
|
--- a/tools/fiptool/fiptool.c
|
||||||
|
+++ b/tools/fiptool/fiptool.c
|
||||||
|
@@ -3,7 +3,7 @@
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
-
|
||||||
|
+#define _DARWIN_C_SOURCE
|
||||||
|
#ifndef _MSC_VER
|
||||||
|
#include <sys/mount.h>
|
||||||
|
#endif
|
||||||
|
@@ -18,6 +18,9 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
+#include <unistd.h>
|
||||||
|
+
|
||||||
|
+#define uuid_t fiptool_uuid_t
|
||||||
|
|
||||||
|
#include "fiptool.h"
|
||||||
|
#include "tbbr_config.h"
|
@ -294,6 +294,12 @@ define U-Boot/bananapi_m2_plus_h3
|
|||||||
BUILD_DEVICES:=sinovoip_bananapi-m2-plus
|
BUILD_DEVICES:=sinovoip_bananapi-m2-plus
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define U-Boot/Sinovoip_BPI_M3
|
||||||
|
BUILD_SUBTARGET:=cortexa7
|
||||||
|
NAME:=Bananapi M3
|
||||||
|
BUILD_DEVICES:=sinovoip_bananapi-m3
|
||||||
|
endef
|
||||||
|
|
||||||
define U-Boot/sopine_baseboard
|
define U-Boot/sopine_baseboard
|
||||||
BUILD_SUBTARGET:=cortexa53
|
BUILD_SUBTARGET:=cortexa53
|
||||||
NAME:=Sopine Baseboard
|
NAME:=Sopine Baseboard
|
||||||
@ -378,6 +384,7 @@ UBOOT_TARGETS := \
|
|||||||
orangepi_pc2 \
|
orangepi_pc2 \
|
||||||
pangolin \
|
pangolin \
|
||||||
pine64_plus \
|
pine64_plus \
|
||||||
|
Sinovoip_BPI_M3 \
|
||||||
sopine_baseboard \
|
sopine_baseboard \
|
||||||
orangepi_zero_plus \
|
orangepi_zero_plus \
|
||||||
libretech_all_h3_cc_h5
|
libretech_all_h3_cc_h5
|
||||||
|
@ -8,12 +8,12 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=intel-microcode
|
PKG_NAME:=intel-microcode
|
||||||
PKG_VERSION:=20230512
|
PKG_VERSION:=20230808
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE:=intel-microcode_3.$(PKG_VERSION).1.tar.xz
|
PKG_SOURCE:=intel-microcode_3.$(PKG_VERSION).1.tar.xz
|
||||||
PKG_SOURCE_URL:=@DEBIAN/pool/non-free-firmware/i/intel-microcode/
|
PKG_SOURCE_URL:=@DEBIAN/pool/non-free-firmware/i/intel-microcode/
|
||||||
PKG_HASH:=e6717a42d7b6e92280565fbb180cd0d11bc5d14874ef06ff1bed2b7a11d17c67
|
PKG_HASH:=29e77c275b3f60a691832c0844f70effbd94a4594d04af21e0c2e6e0c1ac1894
|
||||||
PKG_BUILD_DIR:=$(BUILD_DIR)/intel-microcode-3.$(PKG_VERSION).1
|
PKG_BUILD_DIR:=$(BUILD_DIR)/intel-microcode-3.$(PKG_VERSION).1
|
||||||
|
|
||||||
PKG_BUILD_DEPENDS:=iucode-tool/host
|
PKG_BUILD_DEPENDS:=iucode-tool/host
|
||||||
|
@ -8,12 +8,12 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=linux-firmware
|
PKG_NAME:=linux-firmware
|
||||||
PKG_VERSION:=20230625
|
PKG_VERSION:=20230804
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE_URL:=@KERNEL/linux/kernel/firmware
|
PKG_SOURCE_URL:=@KERNEL/linux/kernel/firmware
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||||
PKG_HASH:=87597111c0d4b71b31e53cb85a92c386921b84c825a402db8c82e0e86015500d
|
PKG_HASH:=88d46c543847ee3b03404d4941d91c92974690ee1f6fdcbee9cef3e5f97db688
|
||||||
|
|
||||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
|
@ -8,13 +8,13 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=mbedtls
|
PKG_NAME:=mbedtls
|
||||||
PKG_VERSION:=2.28.3
|
PKG_VERSION:=2.28.4
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
PKG_BUILD_FLAGS:=no-mips16 gc-sections no-lto
|
PKG_BUILD_FLAGS:=no-mips16 gc-sections no-lto
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=https://codeload.github.com/ARMmbed/mbedtls/tar.gz/v$(PKG_VERSION)?
|
PKG_SOURCE_URL:=https://codeload.github.com/ARMmbed/mbedtls/tar.gz/v$(PKG_VERSION)?
|
||||||
PKG_HASH:=bdf7c5bbdc338da3edad89b2885d4f8668f9a6fffeba6ec17a60333e36dade6f
|
PKG_HASH:=578c4dcd15bbff3f5cd56aa07cd4f850fc733634e3d5947be4f7157d5bfd81ac
|
||||||
|
|
||||||
PKG_LICENSE:=GPL-2.0-or-later
|
PKG_LICENSE:=GPL-2.0-or-later
|
||||||
PKG_LICENSE_FILES:=gpl-2.0.txt
|
PKG_LICENSE_FILES:=gpl-2.0.txt
|
||||||
|
@ -33,7 +33,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#else
|
#else
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
@@ -2995,6 +2999,61 @@ find_parent:
|
@@ -3001,6 +3005,61 @@ find_parent:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,7 +95,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
|
|||||||
/*
|
/*
|
||||||
* Check for CN match
|
* Check for CN match
|
||||||
*/
|
*/
|
||||||
@@ -3015,24 +3074,51 @@ static int x509_crt_check_cn(const mbedt
|
@@ -3021,24 +3080,51 @@ static int x509_crt_check_cn(const mbedt
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,7 +158,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -3043,31 +3129,23 @@ static void x509_crt_verify_name(const m
|
@@ -3049,31 +3135,23 @@ static void x509_crt_verify_name(const m
|
||||||
uint32_t *flags)
|
uint32_t *flags)
|
||||||
{
|
{
|
||||||
const mbedtls_x509_name *name;
|
const mbedtls_x509_name *name;
|
||||||
|
@ -66,10 +66,12 @@ function iface_restart(phy, config, old_config)
|
|||||||
if (err)
|
if (err)
|
||||||
hostapd.printf(`Failed to create ${bss.ifname} on phy ${phy}: ${err}`);
|
hostapd.printf(`Failed to create ${bss.ifname} on phy ${phy}: ${err}`);
|
||||||
let config_inline = iface_gen_config(phy, config);
|
let config_inline = iface_gen_config(phy, config);
|
||||||
if (hostapd.add_iface(`bss_config=${bss.ifname}:${config_inline}`) < 0) {
|
|
||||||
|
let ubus = hostapd.data.ubus;
|
||||||
|
ubus.call("wpa_supplicant", "phy_set_state", { phy: phy, stop: true });
|
||||||
|
if (hostapd.add_iface(`bss_config=${bss.ifname}:${config_inline}`) < 0)
|
||||||
hostapd.printf(`hostapd.add_iface failed for phy ${phy} ifname=${bss.ifname}`);
|
hostapd.printf(`hostapd.add_iface failed for phy ${phy} ifname=${bss.ifname}`);
|
||||||
return;
|
ubus.call("wpa_supplicant", "phy_set_state", { phy: phy, stop: false });
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function array_to_obj(arr, key, start)
|
function array_to_obj(arr, key, start)
|
||||||
@ -123,30 +125,37 @@ function iface_reload_config(phy, config, old_config)
|
|||||||
if (config.bss[0].ifname != old_config.bss[0].ifname)
|
if (config.bss[0].ifname != old_config.bss[0].ifname)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
let iface = hostapd.interfaces[config.bss[0].ifname];
|
let iface_name = config.bss[0].ifname;
|
||||||
|
let iface = hostapd.interfaces[iface_name];
|
||||||
if (!iface)
|
if (!iface)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
let first_bss = hostapd.bss[iface_name];
|
||||||
|
if (!first_bss)
|
||||||
|
return false;
|
||||||
|
|
||||||
let config_inline = iface_gen_config(phy, config);
|
let config_inline = iface_gen_config(phy, config);
|
||||||
|
|
||||||
bss_reload_psk(iface.bss[0], config.bss[0], old_config.bss[0]);
|
bss_reload_psk(first_bss, config.bss[0], old_config.bss[0]);
|
||||||
if (!is_equal(config.bss[0], old_config.bss[0])) {
|
if (!is_equal(config.bss[0], old_config.bss[0])) {
|
||||||
if (phy_is_fullmac(phy))
|
if (phy_is_fullmac(phy))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (config.bss[0].bssid != old_config.bss[0].bssid)
|
||||||
|
return false;
|
||||||
|
|
||||||
hostapd.printf(`Reload config for bss '${config.bss[0].ifname}' on phy '${phy}'`);
|
hostapd.printf(`Reload config for bss '${config.bss[0].ifname}' on phy '${phy}'`);
|
||||||
if (iface.bss[0].set_config(config_inline, 0) < 0) {
|
if (first_bss.set_config(config_inline, 0) < 0) {
|
||||||
hostapd.printf(`Failed to set config`);
|
hostapd.printf(`Failed to set config`);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let bss_list = array_to_obj(iface.bss, "name", 1);
|
|
||||||
let new_cfg = array_to_obj(config.bss, "ifname", 1);
|
let new_cfg = array_to_obj(config.bss, "ifname", 1);
|
||||||
let old_cfg = array_to_obj(old_config.bss, "ifname", 1);
|
let old_cfg = array_to_obj(old_config.bss, "ifname", 1);
|
||||||
|
|
||||||
for (let name in old_cfg) {
|
for (let name in old_cfg) {
|
||||||
let bss = bss_list[name];
|
let bss = hostapd.bss[name];
|
||||||
if (!bss) {
|
if (!bss) {
|
||||||
hostapd.printf(`bss '${name}' not found`);
|
hostapd.printf(`bss '${name}' not found`);
|
||||||
return false;
|
return false;
|
||||||
@ -267,6 +276,9 @@ function iface_load_config(filename)
|
|||||||
if (!val[0])
|
if (!val[0])
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (val[0] == "bssid")
|
||||||
|
bss.bssid = val[1];
|
||||||
|
|
||||||
if (val[0] == "bss") {
|
if (val[0] == "bss") {
|
||||||
bss = config_add_bss(config, val[1]);
|
bss = config_add_bss(config, val[1]);
|
||||||
continue;
|
continue;
|
||||||
|
@ -11,6 +11,9 @@ function iface_stop(iface)
|
|||||||
{
|
{
|
||||||
let ifname = iface.config.iface;
|
let ifname = iface.config.iface;
|
||||||
|
|
||||||
|
if (!iface.running)
|
||||||
|
return;
|
||||||
|
|
||||||
delete wpas.data.iface_phy[ifname];
|
delete wpas.data.iface_phy[ifname];
|
||||||
wpas.remove_iface(ifname);
|
wpas.remove_iface(ifname);
|
||||||
wdev_remove(ifname);
|
wdev_remove(ifname);
|
||||||
@ -40,7 +43,7 @@ function iface_cb(new_if, old_if)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (old_if && old_if.running)
|
if (old_if)
|
||||||
iface_stop(old_if);
|
iface_stop(old_if);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,6 +79,33 @@ function start_pending(phy_name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
let main_obj = {
|
let main_obj = {
|
||||||
|
phy_set_state: {
|
||||||
|
args: {
|
||||||
|
phy: "",
|
||||||
|
stop: true,
|
||||||
|
},
|
||||||
|
call: function(req) {
|
||||||
|
if (!req.args.phy || req.args.stop == null)
|
||||||
|
return libubus.STATUS_INVALID_ARGUMENT;
|
||||||
|
|
||||||
|
let phy = wpas.data.config[req.args.phy];
|
||||||
|
if (!phy)
|
||||||
|
return libubus.STATUS_NOT_FOUND;
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (req.args.stop) {
|
||||||
|
for (let ifname in phy.data)
|
||||||
|
iface_stop(phy.data[ifname]);
|
||||||
|
} else {
|
||||||
|
start_pending(req.args.phy);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
wpas.printf(`Error chaging state: ${e}\n${e.stacktrace[0].context}`);
|
||||||
|
return libubus.STATUS_INVALID_ARGUMENT;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
},
|
||||||
config_set: {
|
config_set: {
|
||||||
args: {
|
args: {
|
||||||
phy: "",
|
phy: "",
|
||||||
@ -196,14 +226,12 @@ return {
|
|||||||
wpas.ubus.disconnect();
|
wpas.ubus.disconnect();
|
||||||
},
|
},
|
||||||
iface_add: function(name, obj) {
|
iface_add: function(name, obj) {
|
||||||
obj.data.name = name;
|
|
||||||
iface_event("add", name);
|
iface_event("add", name);
|
||||||
},
|
},
|
||||||
iface_remove: function(name, obj) {
|
iface_remove: function(name, obj) {
|
||||||
iface_event("remove", name);
|
iface_event("remove", name);
|
||||||
},
|
},
|
||||||
state: function(iface, state) {
|
state: function(ifname, iface, state) {
|
||||||
let ifname = iface.data.name;
|
|
||||||
let phy = wpas.data.iface_phy[ifname];
|
let phy = wpas.data.iface_phy[ifname];
|
||||||
if (!phy) {
|
if (!phy) {
|
||||||
wpas.printf(`no PHY for ifname ${ifname}`);
|
wpas.printf(`no PHY for ifname ${ifname}`);
|
||||||
@ -212,8 +240,7 @@ return {
|
|||||||
|
|
||||||
iface_hostapd_notify(phy, ifname, iface, state);
|
iface_hostapd_notify(phy, ifname, iface, state);
|
||||||
},
|
},
|
||||||
event: function(iface, ev, info) {
|
event: function(ifname, iface, ev, info) {
|
||||||
let ifname = iface.data.name;
|
|
||||||
let phy = wpas.data.iface_phy[ifname];
|
let phy = wpas.data.iface_phy[ifname];
|
||||||
if (!phy) {
|
if (!phy) {
|
||||||
wpas.printf(`no PHY for ifname ${ifname}`);
|
wpas.printf(`no PHY for ifname ${ifname}`);
|
||||||
|
@ -23,7 +23,7 @@ hostapd_ucode_bss_get_uval(struct hostapd_data *hapd)
|
|||||||
return wpa_ucode_registry_get(bss_registry, hapd->ucode.idx);
|
return wpa_ucode_registry_get(bss_registry, hapd->ucode.idx);
|
||||||
|
|
||||||
val = uc_resource_new(bss_type, hapd);
|
val = uc_resource_new(bss_type, hapd);
|
||||||
wpa_ucode_registry_add(bss_registry, val, &hapd->ucode.idx);
|
hapd->ucode.idx = wpa_ucode_registry_add(bss_registry, val);
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
@ -37,46 +37,46 @@ hostapd_ucode_iface_get_uval(struct hostapd_iface *hapd)
|
|||||||
return wpa_ucode_registry_get(iface_registry, hapd->ucode.idx);
|
return wpa_ucode_registry_get(iface_registry, hapd->ucode.idx);
|
||||||
|
|
||||||
val = uc_resource_new(iface_type, hapd);
|
val = uc_resource_new(iface_type, hapd);
|
||||||
wpa_ucode_registry_add(iface_registry, val, &hapd->ucode.idx);
|
hapd->ucode.idx = wpa_ucode_registry_add(iface_registry, val);
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
hostapd_ucode_update_bss_list(struct hostapd_iface *iface)
|
hostapd_ucode_update_bss_list(struct hostapd_iface *iface, uc_value_t *if_bss, uc_value_t *bss)
|
||||||
{
|
{
|
||||||
uc_value_t *ifval, *list;
|
uc_value_t *list;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
list = ucv_array_new(vm);
|
list = ucv_array_new(vm);
|
||||||
for (i = 0; i < iface->num_bss; i++) {
|
for (i = 0; i < iface->num_bss; i++) {
|
||||||
struct hostapd_data *hapd = iface->bss[i];
|
struct hostapd_data *hapd = iface->bss[i];
|
||||||
uc_value_t *val = hostapd_ucode_bss_get_uval(hapd);
|
uc_value_t *val = hostapd_ucode_bss_get_uval(hapd);
|
||||||
uc_value_t *proto = ucv_prototype_get(val);
|
|
||||||
|
|
||||||
ucv_object_add(proto, "name", ucv_get(ucv_string_new(hapd->conf->iface)));
|
ucv_array_set(list, i, ucv_get(ucv_string_new(hapd->conf->iface)));
|
||||||
ucv_object_add(proto, "index", ucv_int64_new(i));
|
ucv_object_add(bss, hapd->conf->iface, ucv_get(val));
|
||||||
ucv_array_set(list, i, ucv_get(val));
|
|
||||||
}
|
}
|
||||||
|
ucv_object_add(if_bss, iface->phy, ucv_get(list));
|
||||||
ifval = hostapd_ucode_iface_get_uval(iface);
|
|
||||||
ucv_object_add(ucv_prototype_get(ifval), "bss", ucv_get(list));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
hostapd_ucode_update_interfaces(void)
|
hostapd_ucode_update_interfaces(void)
|
||||||
{
|
{
|
||||||
uc_value_t *ifs = ucv_object_new(vm);
|
uc_value_t *ifs = ucv_object_new(vm);
|
||||||
|
uc_value_t *if_bss = ucv_array_new(vm);
|
||||||
|
uc_value_t *bss = ucv_object_new(vm);
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < interfaces->count; i++) {
|
for (i = 0; i < interfaces->count; i++) {
|
||||||
struct hostapd_iface *iface = interfaces->iface[i];
|
struct hostapd_iface *iface = interfaces->iface[i];
|
||||||
|
|
||||||
ucv_object_add(ifs, iface->phy, ucv_get(hostapd_ucode_iface_get_uval(iface)));
|
ucv_object_add(ifs, iface->phy, ucv_get(hostapd_ucode_iface_get_uval(iface)));
|
||||||
hostapd_ucode_update_bss_list(iface);
|
hostapd_ucode_update_bss_list(iface, if_bss, bss);
|
||||||
}
|
}
|
||||||
|
|
||||||
ucv_object_add(ucv_prototype_get(global), "interfaces", ucv_get(ifs));
|
ucv_object_add(ucv_prototype_get(global), "interfaces", ucv_get(ifs));
|
||||||
|
ucv_object_add(ucv_prototype_get(global), "interface_bss", ucv_get(if_bss));
|
||||||
|
ucv_object_add(ucv_prototype_get(global), "bss", ucv_get(bss));
|
||||||
ucv_gc(vm);
|
ucv_gc(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,7 +199,7 @@ uc_hostapd_bss_delete(uc_vm_t *vm, size_t nargs)
|
|||||||
hostapd_config_free_bss(hapd->conf);
|
hostapd_config_free_bss(hapd->conf);
|
||||||
os_free(hapd);
|
os_free(hapd);
|
||||||
|
|
||||||
hostapd_ucode_update_bss_list(iface);
|
hostapd_ucode_update_interfaces();
|
||||||
ucv_gc(vm);
|
ucv_gc(vm);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -252,7 +252,7 @@ uc_hostapd_iface_add_bss(uc_vm_t *vm, size_t nargs)
|
|||||||
iface->conf->bss[iface->conf->num_bss] = bss;
|
iface->conf->bss[iface->conf->num_bss] = bss;
|
||||||
conf->bss[idx] = NULL;
|
conf->bss[idx] = NULL;
|
||||||
ret = hostapd_ucode_bss_get_uval(hapd);
|
ret = hostapd_ucode_bss_get_uval(hapd);
|
||||||
hostapd_ucode_update_bss_list(iface);
|
hostapd_ucode_update_interfaces();
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
deinit_ctrl:
|
deinit_ctrl:
|
||||||
@ -332,16 +332,21 @@ uc_hostapd_iface_start(uc_vm_t *vm, size_t nargs)
|
|||||||
conf->channel = intval;
|
conf->channel = intval;
|
||||||
if ((intval = ucv_int64_get(ucv_object_get(info, "sec_channel", NULL))) && !errno)
|
if ((intval = ucv_int64_get(ucv_object_get(info, "sec_channel", NULL))) && !errno)
|
||||||
conf->secondary_channel = intval;
|
conf->secondary_channel = intval;
|
||||||
|
#ifdef CONFIG_IEEE80211AC
|
||||||
if ((intval = ucv_int64_get(ucv_object_get(info, "center_seg0_idx", NULL))) && !errno) {
|
if ((intval = ucv_int64_get(ucv_object_get(info, "center_seg0_idx", NULL))) && !errno) {
|
||||||
conf->vht_oper_centr_freq_seg0_idx = intval;
|
conf->vht_oper_centr_freq_seg0_idx = intval;
|
||||||
|
#ifdef CONFIG_IEEE80211AX
|
||||||
conf->he_oper_centr_freq_seg0_idx = intval;
|
conf->he_oper_centr_freq_seg0_idx = intval;
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_IEEE80211BE
|
#ifdef CONFIG_IEEE80211BE
|
||||||
conf->eht_oper_centr_freq_seg0_idx = intval;
|
conf->eht_oper_centr_freq_seg0_idx = intval;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if ((intval = ucv_int64_get(ucv_object_get(info, "center_seg1_idx", NULL))) && !errno) {
|
if ((intval = ucv_int64_get(ucv_object_get(info, "center_seg1_idx", NULL))) && !errno) {
|
||||||
conf->vht_oper_centr_freq_seg1_idx = intval;
|
conf->vht_oper_centr_freq_seg1_idx = intval;
|
||||||
|
#ifdef CONFIG_IEEE80211AX
|
||||||
conf->he_oper_centr_freq_seg1_idx = intval;
|
conf->he_oper_centr_freq_seg1_idx = intval;
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_IEEE80211BE
|
#ifdef CONFIG_IEEE80211BE
|
||||||
conf->eht_oper_centr_freq_seg1_idx = intval;
|
conf->eht_oper_centr_freq_seg1_idx = intval;
|
||||||
#endif
|
#endif
|
||||||
@ -349,11 +354,14 @@ uc_hostapd_iface_start(uc_vm_t *vm, size_t nargs)
|
|||||||
intval = ucv_int64_get(ucv_object_get(info, "oper_chwidth", NULL));
|
intval = ucv_int64_get(ucv_object_get(info, "oper_chwidth", NULL));
|
||||||
if (!errno) {
|
if (!errno) {
|
||||||
conf->vht_oper_chwidth = intval;
|
conf->vht_oper_chwidth = intval;
|
||||||
|
#ifdef CONFIG_IEEE80211AX
|
||||||
conf->he_oper_chwidth = intval;
|
conf->he_oper_chwidth = intval;
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_IEEE80211BE
|
#ifdef CONFIG_IEEE80211BE
|
||||||
conf->eht_oper_chwidth = intval;
|
conf->eht_oper_chwidth = intval;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (conf->channel)
|
if (conf->channel)
|
||||||
|
@ -119,7 +119,12 @@ uc_value_t *uc_wpa_freq_info(uc_vm_t *vm, size_t nargs)
|
|||||||
if (!sec_channel)
|
if (!sec_channel)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
center_ofs = freq_val >= 5900 ? 0 : 3;
|
if (freq_val >= 5900)
|
||||||
|
center_ofs = 0;
|
||||||
|
else if (freq_val >= 5745)
|
||||||
|
center_ofs = 20;
|
||||||
|
else
|
||||||
|
center_ofs = 35;
|
||||||
tmp_channel = channel - center_ofs;
|
tmp_channel = channel - center_ofs;
|
||||||
tmp_channel &= ~((8 << width) - 1);
|
tmp_channel &= ~((8 << width) - 1);
|
||||||
center_idx = tmp_channel + center_ofs + (4 << width) - 1;
|
center_idx = tmp_channel + center_ofs + (4 << width) - 1;
|
||||||
@ -266,21 +271,7 @@ uc_value_t *wpa_ucode_global_init(const char *name, uc_resource_type_t *global_t
|
|||||||
return global;
|
return global;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uc_value_t *wpa_ucode_prototype_clone(uc_value_t *uval)
|
int wpa_ucode_registry_add(uc_value_t *reg, uc_value_t *val)
|
||||||
{
|
|
||||||
uc_value_t *proto, *proto_new;
|
|
||||||
|
|
||||||
proto = ucv_prototype_get(uval);
|
|
||||||
proto_new = ucv_object_new(&vm);
|
|
||||||
|
|
||||||
ucv_object_foreach(proto, key, val)
|
|
||||||
ucv_object_add(proto_new, key, ucv_get(val));
|
|
||||||
ucv_prototype_set(uval, ucv_get(proto));
|
|
||||||
|
|
||||||
return proto;
|
|
||||||
}
|
|
||||||
|
|
||||||
void wpa_ucode_registry_add(uc_value_t *reg, uc_value_t *val, int *idx)
|
|
||||||
{
|
{
|
||||||
uc_value_t *data;
|
uc_value_t *data;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@ -290,10 +281,7 @@ void wpa_ucode_registry_add(uc_value_t *reg, uc_value_t *val, int *idx)
|
|||||||
|
|
||||||
ucv_array_set(reg, i, ucv_get(val));
|
ucv_array_set(reg, i, ucv_get(val));
|
||||||
|
|
||||||
data = ucv_object_new(&vm);
|
return i + 1;
|
||||||
ucv_object_add(wpa_ucode_prototype_clone(val), "data", ucv_get(data));
|
|
||||||
|
|
||||||
*idx = i + 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uc_value_t *wpa_ucode_registry_get(uc_value_t *reg, int idx)
|
uc_value_t *wpa_ucode_registry_get(uc_value_t *reg, int idx)
|
||||||
|
@ -17,7 +17,7 @@ void wpa_ucode_free_vm(void);
|
|||||||
|
|
||||||
uc_value_t *wpa_ucode_global_init(const char *name, uc_resource_type_t *global_type);
|
uc_value_t *wpa_ucode_global_init(const char *name, uc_resource_type_t *global_type);
|
||||||
|
|
||||||
void wpa_ucode_registry_add(uc_value_t *reg, uc_value_t *val, int *idx);
|
int wpa_ucode_registry_add(uc_value_t *reg, uc_value_t *val);
|
||||||
uc_value_t *wpa_ucode_registry_get(uc_value_t *reg, int idx);
|
uc_value_t *wpa_ucode_registry_get(uc_value_t *reg, int idx);
|
||||||
uc_value_t *wpa_ucode_registry_remove(uc_value_t *reg, int idx);
|
uc_value_t *wpa_ucode_registry_remove(uc_value_t *reg, int idx);
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ wpas_ucode_iface_get_uval(struct wpa_supplicant *wpa_s)
|
|||||||
return wpa_ucode_registry_get(iface_registry, wpa_s->ucode.idx);
|
return wpa_ucode_registry_get(iface_registry, wpa_s->ucode.idx);
|
||||||
|
|
||||||
val = uc_resource_new(iface_type, wpa_s);
|
val = uc_resource_new(iface_type, wpa_s);
|
||||||
wpa_ucode_registry_add(iface_registry, val, &wpa_s->ucode.idx);
|
wpa_s->ucode.idx = wpa_ucode_registry_add(iface_registry, val);
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
@ -84,9 +84,10 @@ void wpas_ucode_update_state(struct wpa_supplicant *wpa_s)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
state = wpa_supplicant_state_txt(wpa_s->wpa_state);
|
state = wpa_supplicant_state_txt(wpa_s->wpa_state);
|
||||||
|
uc_value_push(ucv_get(ucv_string_new(wpa_s->ifname)));
|
||||||
uc_value_push(ucv_get(val));
|
uc_value_push(ucv_get(val));
|
||||||
uc_value_push(ucv_get(ucv_string_new(state)));
|
uc_value_push(ucv_get(ucv_string_new(state)));
|
||||||
ucv_put(wpa_ucode_call(2));
|
ucv_put(wpa_ucode_call(3));
|
||||||
ucv_gc(vm);
|
ucv_gc(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,6 +106,7 @@ void wpas_ucode_event(struct wpa_supplicant *wpa_s, int event, union wpa_event_d
|
|||||||
if (wpa_ucode_call_prepare("event"))
|
if (wpa_ucode_call_prepare("event"))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
uc_value_push(ucv_get(ucv_string_new(wpa_s->ifname)));
|
||||||
uc_value_push(ucv_get(val));
|
uc_value_push(ucv_get(val));
|
||||||
uc_value_push(ucv_get(ucv_string_new(event_to_string(event))));
|
uc_value_push(ucv_get(ucv_string_new(event_to_string(event))));
|
||||||
val = ucv_object_new(vm);
|
val = ucv_object_new(vm);
|
||||||
@ -118,7 +120,7 @@ void wpas_ucode_event(struct wpa_supplicant *wpa_s, int event, union wpa_event_d
|
|||||||
ucv_object_add(val, "center_freq2", ucv_int64_new(data->ch_switch.cf2));
|
ucv_object_add(val, "center_freq2", ucv_int64_new(data->ch_switch.cf2));
|
||||||
}
|
}
|
||||||
|
|
||||||
ucv_put(wpa_ucode_call(3));
|
ucv_put(wpa_ucode_call(4));
|
||||||
ucv_gc(vm);
|
ucv_gc(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,7 +247,7 @@ int wpas_ucode_init(struct wpa_global *gl)
|
|||||||
iface_type = uc_type_declare(vm, "wpas.iface", iface_fns, NULL);
|
iface_type = uc_type_declare(vm, "wpas.iface", iface_fns, NULL);
|
||||||
|
|
||||||
iface_registry = ucv_array_new(vm);
|
iface_registry = ucv_array_new(vm);
|
||||||
uc_vm_registry_set(vm, "hostap.iface_registry", iface_registry);
|
uc_vm_registry_set(vm, "wpas.iface_registry", iface_registry);
|
||||||
|
|
||||||
global = wpa_ucode_global_init("wpas", global_type);
|
global = wpa_ucode_global_init("wpas", global_type);
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|||||||
commit->event = kzalloc(sizeof(*commit->event),
|
commit->event = kzalloc(sizeof(*commit->event),
|
||||||
--- a/drivers/gpu/drm/i915/display/intel_display.c
|
--- a/drivers/gpu/drm/i915/display/intel_display.c
|
||||||
+++ b/drivers/gpu/drm/i915/display/intel_display.c
|
+++ b/drivers/gpu/drm/i915/display/intel_display.c
|
||||||
@@ -7765,6 +7765,19 @@ static int intel_atomic_commit(struct dr
|
@@ -7743,6 +7743,19 @@ static int intel_atomic_commit(struct dr
|
||||||
state->base.legacy_cursor_update = false;
|
state->base.legacy_cursor_update = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
|||||||
|
|
||||||
--- a/drivers/net/dsa/bcm_sf2.c
|
--- a/drivers/net/dsa/bcm_sf2.c
|
||||||
+++ b/drivers/net/dsa/bcm_sf2.c
|
+++ b/drivers/net/dsa/bcm_sf2.c
|
||||||
@@ -1512,10 +1512,14 @@ static int bcm_sf2_sw_probe(struct platf
|
@@ -1516,10 +1516,14 @@ static int bcm_sf2_sw_probe(struct platf
|
||||||
rev = reg_readl(priv, REG_PHY_REVISION);
|
rev = reg_readl(priv, REG_PHY_REVISION);
|
||||||
priv->hw_params.gphy_rev = rev & PHY_REVISION_MASK;
|
priv->hw_params.gphy_rev = rev & PHY_REVISION_MASK;
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
|||||||
|
|
||||||
--- a/drivers/net/dsa/bcm_sf2.c
|
--- a/drivers/net/dsa/bcm_sf2.c
|
||||||
+++ b/drivers/net/dsa/bcm_sf2.c
|
+++ b/drivers/net/dsa/bcm_sf2.c
|
||||||
@@ -1526,6 +1526,12 @@ static int bcm_sf2_sw_probe(struct platf
|
@@ -1530,6 +1530,12 @@ static int bcm_sf2_sw_probe(struct platf
|
||||||
priv->hw_params.core_rev >> 8, priv->hw_params.core_rev & 0xff,
|
priv->hw_params.core_rev >> 8, priv->hw_params.core_rev & 0xff,
|
||||||
priv->irq0, priv->irq1);
|
priv->irq0, priv->irq1);
|
||||||
|
|
||||||
|
@ -325,7 +325,7 @@ Signed-off-by: T.J. Mercier <tjmercier@google.com>
|
|||||||
mctz = soft_limit_tree.rb_tree_per_node[nid];
|
mctz = soft_limit_tree.rb_tree_per_node[nid];
|
||||||
if (!mctz)
|
if (!mctz)
|
||||||
return;
|
return;
|
||||||
@@ -3522,6 +3532,9 @@ unsigned long mem_cgroup_soft_limit_recl
|
@@ -3523,6 +3533,9 @@ unsigned long mem_cgroup_soft_limit_recl
|
||||||
struct mem_cgroup_tree_per_node *mctz;
|
struct mem_cgroup_tree_per_node *mctz;
|
||||||
unsigned long excess;
|
unsigned long excess;
|
||||||
|
|
||||||
@ -335,7 +335,7 @@ Signed-off-by: T.J. Mercier <tjmercier@google.com>
|
|||||||
if (order > 0)
|
if (order > 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@@ -5382,6 +5395,7 @@ static int mem_cgroup_css_online(struct
|
@@ -5383,6 +5396,7 @@ static int mem_cgroup_css_online(struct
|
||||||
if (unlikely(mem_cgroup_is_root(memcg)))
|
if (unlikely(mem_cgroup_is_root(memcg)))
|
||||||
queue_delayed_work(system_unbound_wq, &stats_flush_dwork,
|
queue_delayed_work(system_unbound_wq, &stats_flush_dwork,
|
||||||
2UL*HZ);
|
2UL*HZ);
|
||||||
@ -343,7 +343,7 @@ Signed-off-by: T.J. Mercier <tjmercier@google.com>
|
|||||||
return 0;
|
return 0;
|
||||||
offline_kmem:
|
offline_kmem:
|
||||||
memcg_offline_kmem(memcg);
|
memcg_offline_kmem(memcg);
|
||||||
@@ -5413,6 +5427,7 @@ static void mem_cgroup_css_offline(struc
|
@@ -5414,6 +5428,7 @@ static void mem_cgroup_css_offline(struc
|
||||||
memcg_offline_kmem(memcg);
|
memcg_offline_kmem(memcg);
|
||||||
reparent_shrinker_deferred(memcg);
|
reparent_shrinker_deferred(memcg);
|
||||||
wb_memcg_offline(memcg);
|
wb_memcg_offline(memcg);
|
||||||
@ -351,7 +351,7 @@ Signed-off-by: T.J. Mercier <tjmercier@google.com>
|
|||||||
|
|
||||||
drain_all_stock(memcg);
|
drain_all_stock(memcg);
|
||||||
|
|
||||||
@@ -5424,6 +5439,7 @@ static void mem_cgroup_css_released(stru
|
@@ -5425,6 +5440,7 @@ static void mem_cgroup_css_released(stru
|
||||||
struct mem_cgroup *memcg = mem_cgroup_from_css(css);
|
struct mem_cgroup *memcg = mem_cgroup_from_css(css);
|
||||||
|
|
||||||
invalidate_reclaim_iterators(memcg);
|
invalidate_reclaim_iterators(memcg);
|
||||||
|
@ -79,7 +79,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
INDIRECT_CALLABLE_DECLARE(struct dst_entry *ip6_dst_check(struct dst_entry *,
|
INDIRECT_CALLABLE_DECLARE(struct dst_entry *ip6_dst_check(struct dst_entry *,
|
||||||
u32));
|
u32));
|
||||||
INDIRECT_CALLABLE_DECLARE(struct dst_entry *ipv4_dst_check(struct dst_entry *,
|
INDIRECT_CALLABLE_DECLARE(struct dst_entry *ipv4_dst_check(struct dst_entry *,
|
||||||
@@ -2168,9 +2182,11 @@ static void __sk_free(struct sock *sk)
|
@@ -2175,9 +2189,11 @@ static void __sk_free(struct sock *sk)
|
||||||
if (likely(sk->sk_net_refcnt))
|
if (likely(sk->sk_net_refcnt))
|
||||||
sock_inuse_add(sock_net(sk), -1);
|
sock_inuse_add(sock_net(sk), -1);
|
||||||
|
|
||||||
|
@ -330,7 +330,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/net/core/sock.c
|
--- a/net/core/sock.c
|
||||||
+++ b/net/core/sock.c
|
+++ b/net/core/sock.c
|
||||||
@@ -4093,6 +4093,8 @@ static __net_initdata struct pernet_oper
|
@@ -4100,6 +4100,8 @@ static __net_initdata struct pernet_oper
|
||||||
|
|
||||||
static int __init proto_init(void)
|
static int __init proto_init(void)
|
||||||
{
|
{
|
||||||
|
@ -1102,7 +1102,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
|
|||||||
# ZLIB_INFLATE; DECOMPRESS_GZIP is just a wrapper.)
|
# ZLIB_INFLATE; DECOMPRESS_GZIP is just a wrapper.)
|
||||||
--- a/lib/Makefile
|
--- a/lib/Makefile
|
||||||
+++ b/lib/Makefile
|
+++ b/lib/Makefile
|
||||||
@@ -134,6 +134,16 @@ CFLAGS_kobject.o += -DDEBUG
|
@@ -140,6 +140,16 @@ CFLAGS_kobject.o += -DDEBUG
|
||||||
CFLAGS_kobject_uevent.o += -DDEBUG
|
CFLAGS_kobject_uevent.o += -DDEBUG
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -1119,7 +1119,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
|
|||||||
obj-$(CONFIG_DEBUG_INFO_REDUCED) += debug_info.o
|
obj-$(CONFIG_DEBUG_INFO_REDUCED) += debug_info.o
|
||||||
CFLAGS_debug_info.o += $(call cc-option, -femit-struct-debug-detailed=any)
|
CFLAGS_debug_info.o += $(call cc-option, -femit-struct-debug-detailed=any)
|
||||||
|
|
||||||
@@ -194,6 +204,8 @@ obj-$(CONFIG_ZSTD_COMPRESS) += zstd/
|
@@ -200,6 +210,8 @@ obj-$(CONFIG_ZSTD_COMPRESS) += zstd/
|
||||||
obj-$(CONFIG_ZSTD_DECOMPRESS) += zstd/
|
obj-$(CONFIG_ZSTD_DECOMPRESS) += zstd/
|
||||||
obj-$(CONFIG_XZ_DEC) += xz/
|
obj-$(CONFIG_XZ_DEC) += xz/
|
||||||
obj-$(CONFIG_RAID6_PQ) += raid6/
|
obj-$(CONFIG_RAID6_PQ) += raid6/
|
||||||
|
@ -157,7 +157,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
case RTN_THROW:
|
case RTN_THROW:
|
||||||
case RTN_UNREACHABLE:
|
case RTN_UNREACHABLE:
|
||||||
default:
|
default:
|
||||||
@@ -4539,6 +4558,17 @@ static int ip6_pkt_prohibit_out(struct n
|
@@ -4540,6 +4559,17 @@ static int ip6_pkt_prohibit_out(struct n
|
||||||
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
|
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,7 +175,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
/*
|
/*
|
||||||
* Allocate a dst for local (unicast / anycast) address.
|
* Allocate a dst for local (unicast / anycast) address.
|
||||||
*/
|
*/
|
||||||
@@ -5032,7 +5062,8 @@ static int rtm_to_fib6_config(struct sk_
|
@@ -5033,7 +5063,8 @@ static int rtm_to_fib6_config(struct sk_
|
||||||
if (rtm->rtm_type == RTN_UNREACHABLE ||
|
if (rtm->rtm_type == RTN_UNREACHABLE ||
|
||||||
rtm->rtm_type == RTN_BLACKHOLE ||
|
rtm->rtm_type == RTN_BLACKHOLE ||
|
||||||
rtm->rtm_type == RTN_PROHIBIT ||
|
rtm->rtm_type == RTN_PROHIBIT ||
|
||||||
@ -185,7 +185,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
cfg->fc_flags |= RTF_REJECT;
|
cfg->fc_flags |= RTF_REJECT;
|
||||||
|
|
||||||
if (rtm->rtm_type == RTN_LOCAL)
|
if (rtm->rtm_type == RTN_LOCAL)
|
||||||
@@ -6286,6 +6317,8 @@ static int ip6_route_dev_notify(struct n
|
@@ -6287,6 +6318,8 @@ static int ip6_route_dev_notify(struct n
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
|
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
|
||||||
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
|
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
|
||||||
@ -194,7 +194,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
|
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
|
||||||
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
|
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
|
||||||
#endif
|
#endif
|
||||||
@@ -6297,6 +6330,7 @@ static int ip6_route_dev_notify(struct n
|
@@ -6298,6 +6331,7 @@ static int ip6_route_dev_notify(struct n
|
||||||
in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev);
|
in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev);
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev);
|
in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev);
|
||||||
@ -202,7 +202,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev);
|
in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -6488,6 +6522,8 @@ static int __net_init ip6_route_net_init
|
@@ -6489,6 +6523,8 @@ static int __net_init ip6_route_net_init
|
||||||
|
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
net->ipv6.fib6_has_custom_rules = false;
|
net->ipv6.fib6_has_custom_rules = false;
|
||||||
@ -211,7 +211,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
net->ipv6.ip6_prohibit_entry = kmemdup(&ip6_prohibit_entry_template,
|
net->ipv6.ip6_prohibit_entry = kmemdup(&ip6_prohibit_entry_template,
|
||||||
sizeof(*net->ipv6.ip6_prohibit_entry),
|
sizeof(*net->ipv6.ip6_prohibit_entry),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
@@ -6498,11 +6534,21 @@ static int __net_init ip6_route_net_init
|
@@ -6499,11 +6535,21 @@ static int __net_init ip6_route_net_init
|
||||||
ip6_template_metrics, true);
|
ip6_template_metrics, true);
|
||||||
INIT_LIST_HEAD(&net->ipv6.ip6_prohibit_entry->rt6i_uncached);
|
INIT_LIST_HEAD(&net->ipv6.ip6_prohibit_entry->rt6i_uncached);
|
||||||
|
|
||||||
@ -234,7 +234,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
|
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
|
||||||
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
|
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
|
||||||
ip6_template_metrics, true);
|
ip6_template_metrics, true);
|
||||||
@@ -6529,6 +6575,8 @@ out:
|
@@ -6530,6 +6576,8 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
@ -243,7 +243,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
out_ip6_prohibit_entry:
|
out_ip6_prohibit_entry:
|
||||||
kfree(net->ipv6.ip6_prohibit_entry);
|
kfree(net->ipv6.ip6_prohibit_entry);
|
||||||
out_ip6_null_entry:
|
out_ip6_null_entry:
|
||||||
@@ -6548,6 +6596,7 @@ static void __net_exit ip6_route_net_exi
|
@@ -6549,6 +6597,7 @@ static void __net_exit ip6_route_net_exi
|
||||||
kfree(net->ipv6.ip6_null_entry);
|
kfree(net->ipv6.ip6_null_entry);
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
kfree(net->ipv6.ip6_prohibit_entry);
|
kfree(net->ipv6.ip6_prohibit_entry);
|
||||||
@ -251,7 +251,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
kfree(net->ipv6.ip6_blk_hole_entry);
|
kfree(net->ipv6.ip6_blk_hole_entry);
|
||||||
#endif
|
#endif
|
||||||
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
|
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
|
||||||
@@ -6631,6 +6680,9 @@ void __init ip6_route_init_special_entri
|
@@ -6632,6 +6681,9 @@ void __init ip6_route_init_special_entri
|
||||||
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
||||||
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
|
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
|
||||||
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
||||||
|
@ -104,7 +104,8 @@ TARGET_DEVICES += sinovoip_bananapi-m2-ultra
|
|||||||
define Device/lemaker_bananapro
|
define Device/lemaker_bananapro
|
||||||
DEVICE_VENDOR := LeMaker
|
DEVICE_VENDOR := LeMaker
|
||||||
DEVICE_MODEL := Banana Pro
|
DEVICE_MODEL := Banana Pro
|
||||||
DEVICE_PACKAGES:=kmod-rtc-sunxi kmod-ata-sunxi kmod-brcmfmac
|
DEVICE_PACKAGES:=kmod-rtc-sunxi kmod-ata-sunxi kmod-brcmfmac \
|
||||||
|
cypress-firmware-43362-sdio wpad-basic-mbedtls
|
||||||
SOC := sun7i-a20
|
SOC := sun7i-a20
|
||||||
endef
|
endef
|
||||||
TARGET_DEVICES += lemaker_bananapro
|
TARGET_DEVICES += lemaker_bananapro
|
||||||
@ -176,6 +177,15 @@ define Device/sinovoip_bananapi-m2-plus
|
|||||||
endef
|
endef
|
||||||
TARGET_DEVICES += sinovoip_bananapi-m2-plus
|
TARGET_DEVICES += sinovoip_bananapi-m2-plus
|
||||||
|
|
||||||
|
define Device/sinovoip_bananapi-m3
|
||||||
|
DEVICE_VENDOR := Sinovoip
|
||||||
|
DEVICE_MODEL := Banana Pi M3
|
||||||
|
DEVICE_PACKAGES:=kmod-rtc-sunxi kmod-leds-gpio kmod-rtc-ac100 \
|
||||||
|
kmod-brcmfmac cypress-firmware-43430-sdio wpad-basic-mbedtls
|
||||||
|
SOC := sun8i-a83t
|
||||||
|
endef
|
||||||
|
TARGET_DEVICES += sinovoip_bananapi-m3
|
||||||
|
|
||||||
define Device/xunlong_orangepi-one
|
define Device/xunlong_orangepi-one
|
||||||
DEVICE_VENDOR := Xunlong
|
DEVICE_VENDOR := Xunlong
|
||||||
DEVICE_MODEL := Orange Pi One
|
DEVICE_MODEL := Orange Pi One
|
||||||
|
@ -2,6 +2,40 @@
|
|||||||
#
|
#
|
||||||
# Copyright (C) 2013-2016 OpenWrt.org
|
# Copyright (C) 2013-2016 OpenWrt.org
|
||||||
|
|
||||||
|
define KernelPackage/mfd-ac100
|
||||||
|
SUBMENU:=$(OTHER_MENU)
|
||||||
|
TITLE:=X-Powers AC100 MFD support
|
||||||
|
DEPENDS:=@TARGET_sunxi
|
||||||
|
KCONFIG:= \
|
||||||
|
CONFIG_MFD_AC100
|
||||||
|
FILES:=$(LINUX_DIR)/drivers/mfd/ac100.ko
|
||||||
|
AUTOLOAD:=$(call AutoLoad,50,ac100)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/mfd-ac100/description
|
||||||
|
Support for the X-Powers AC100 RTC/audio chip
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call KernelPackage,mfd-ac100))
|
||||||
|
|
||||||
|
define KernelPackage/rtc-ac100
|
||||||
|
SUBMENU:=$(OTHER_MENU)
|
||||||
|
TITLE:=X-Powers AC100 RTC support
|
||||||
|
DEPENDS:=@TARGET_sunxi +kmod-mfd-ac100
|
||||||
|
$(call AddDepends/rtc)
|
||||||
|
KCONFIG:= \
|
||||||
|
CONFIG_RTC_DRV_AC100 \
|
||||||
|
CONFIG_RTC_CLASS=y
|
||||||
|
FILES:=$(LINUX_DIR)/drivers/rtc/rtc-ac100.ko
|
||||||
|
AUTOLOAD:=$(call AutoLoad,50,rtc-ac100)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/rtc-ac100/description
|
||||||
|
Support for the X-Powers AC100 RTC
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call KernelPackage,rtc-ac100))
|
||||||
|
|
||||||
define KernelPackage/rtc-sunxi
|
define KernelPackage/rtc-sunxi
|
||||||
SUBMENU:=$(OTHER_MENU)
|
SUBMENU:=$(OTHER_MENU)
|
||||||
TITLE:=Sunxi SoC built-in RTC support
|
TITLE:=Sunxi SoC built-in RTC support
|
||||||
|
Loading…
x
Reference in New Issue
Block a user