mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-22 20:38:09 +00:00
wifi: update iwlwifi to 4.16.3
This commit is contained in:
parent
eb62d9cc04
commit
870505bcd9
@ -13,4 +13,8 @@ all: $(addprefix $(BIN_DIR)/,$(IMAGES))
|
||||
$(BIN_DIR)/%.ucode: $(FW_DIR)/%.ucode
|
||||
$(VERBOSE)cp $^ $@
|
||||
|
||||
$(BIN_DIR)/%.db: $(FW_DIR)/%.db
|
||||
$(VERBOSE)cp $^ $@
|
||||
|
||||
|
||||
CC_CXX_WARN_STRICT =
|
||||
|
@ -18,6 +18,10 @@ INC_DIR += $(WS_CONTRIB_DIR)/src/l2_packet
|
||||
# nl80211 driver
|
||||
SRC_C_drivers = drivers.c \
|
||||
driver_nl80211.c \
|
||||
driver_nl80211_capa.c \
|
||||
driver_nl80211_event.c \
|
||||
driver_nl80211_monitor.c \
|
||||
driver_nl80211_scan.c \
|
||||
netlink.c \
|
||||
rfkill.c
|
||||
SRC_C += $(addprefix src/drivers/, $(SRC_C_drivers))
|
||||
|
@ -10,7 +10,7 @@ CC_OPT += -Wno-unused-function
|
||||
|
||||
CC_CXX_OPT += -fpermissive
|
||||
|
||||
SRC_C += main.c
|
||||
SRC_C += main.c ctrl_iface_genode.c
|
||||
SRC_CC += reporter.cc
|
||||
|
||||
# wpa_supplicant
|
||||
@ -18,29 +18,34 @@ SRC_C_wpa_supplicant = blacklist.c \
|
||||
bss.c \
|
||||
config.c \
|
||||
config_file.c \
|
||||
ctrl_iface.c \
|
||||
eap_register.c \
|
||||
events.c \
|
||||
notify.c \
|
||||
op_classes.c \
|
||||
rrm.c \
|
||||
scan.c \
|
||||
sme.c \
|
||||
wmm_ac.c \
|
||||
wpa_supplicant.c \
|
||||
wpas_glue.c
|
||||
SRC_C += $(addprefix wpa_supplicant/, $(SRC_C_wpa_supplicant))
|
||||
INC_DIR += $(WS_CONTRIB_DIR)/wpa_supplicant
|
||||
CC_OPT += -DCONFIG_BACKEND_FILE -DCONFIG_NO_CONFIG_WRITE \
|
||||
-DCONFIG_SME
|
||||
-DCONFIG_SME -DCONFIG_CTRL_IFACE
|
||||
|
||||
CC_OPT += -DTLS_DEFAULT_CIPHERS=\"DEFAULT:!EXP:!LOW\"
|
||||
|
||||
INC_DIR += $(WS_CONTRIB_DIR)/src/
|
||||
|
||||
# common
|
||||
SRC_C_common = ieee802_11_common.c wpa_common.c
|
||||
SRC_C_common = ieee802_11_common.c wpa_common.c hw_features_common.c \
|
||||
ctrl_iface_common.c
|
||||
SRC_C += $(addprefix src/common/, $(SRC_C_common))
|
||||
INC_DIR += $(WS_CONTRIB_DIR)/src/common
|
||||
|
||||
# crypto
|
||||
SRC_C_crypto = aes-unwrap.c \
|
||||
crypto_openssl.c \
|
||||
md5.c \
|
||||
SRC_C_crypto = crypto_openssl.c \
|
||||
ms_funcs.c \
|
||||
random.c \
|
||||
sha1-prf.c \
|
||||
@ -82,8 +87,7 @@ INC_DIR += $(WS_CONTRIB_DIR)/src/eapol_supp
|
||||
CC_OPT += -DIEEE8021X_EAPOL
|
||||
|
||||
# rsn_supp
|
||||
SRC_C_rsn_supp = peerkey.c \
|
||||
pmksa_cache.c \
|
||||
SRC_C_rsn_supp = pmksa_cache.c \
|
||||
preauth.c \
|
||||
wpa.c \
|
||||
wpa_ie.c
|
||||
@ -93,6 +97,7 @@ CC_OPT += -DCONFIG_PEERKEY
|
||||
|
||||
# utils
|
||||
SRC_C_utils = base64.c \
|
||||
bitfield.c \
|
||||
common.c \
|
||||
eloop.c \
|
||||
os_unix.c \
|
||||
|
@ -2,6 +2,8 @@ include $(REP_DIR)/lib/mk/wifi.inc
|
||||
|
||||
INC_DIR += $(LIB_INC_DIR)/spec/32bit $(LIB_INC_DIR)/spec/x86_32 $(LIB_INC_DIR)/spec/x86
|
||||
|
||||
CC_OPT += -DCONFIG_64BIT=0
|
||||
|
||||
vpath %.S $(REP_DIR)/src/lx_kit/spec/x86_32
|
||||
|
||||
CC_CXX_WARN_STRICT =
|
||||
|
@ -2,6 +2,8 @@ include $(REP_DIR)/lib/mk/wifi.inc
|
||||
|
||||
INC_DIR += $(LIB_INC_DIR)/spec/64bit $(LIB_INC_DIR)/spec/x86_64 $(LIB_INC_DIR)/spec/x86
|
||||
|
||||
CC_OPT += -DCONFIG_64BIT=1
|
||||
|
||||
vpath %.S $(REP_DIR)/src/lx_kit/spec/x86_64
|
||||
|
||||
CC_CXX_WARN_STRICT =
|
||||
|
@ -11,17 +11,18 @@ SHARED_LIB = yes
|
||||
# wifi_include *must* be the first library, otherwise the include
|
||||
# order is wrong
|
||||
#
|
||||
LIBS += wifi_include lx_kit_setjmp libc
|
||||
LIBS += wifi_include lx_kit_setjmp
|
||||
|
||||
LD_OPT += --version-script=$(LIB_DIR)/symbol.map
|
||||
|
||||
SRC_CC += dummies.cc init.cc lxcc_emul.cc nic.cc socket_call.cc
|
||||
SRC_CC += dummies.cc init.cc lxcc_emul.cc nic.cc socket_call.cc random.cc \
|
||||
firmware.cc
|
||||
|
||||
# lx_kit
|
||||
SRC_CC += mapped_io_mem_range.cc irq.cc pci.cc malloc.cc scheduler.cc \
|
||||
work.cc timer.cc printf.cc env.cc
|
||||
|
||||
SRC_C += lxc_emul.c
|
||||
SRC_C += lxc_emul.c dummies_new.c
|
||||
|
||||
CC_WARN =
|
||||
CC_OPT += -fno-builtin-toupper
|
||||
@ -36,6 +37,9 @@ CC_OPT += -U__linux__ -D __KERNEL__ -DCONFIG_PCI
|
||||
#CC_OPT += -DCONFIG_INET
|
||||
CC_OPT += -DCONFIG_NET -DCONFIG_NET_NS -DCONFIG_WLAN #-D__MAC80211_DRIVER_TRACE
|
||||
|
||||
# CONFIG options
|
||||
CC_OPT += -DCONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=1
|
||||
|
||||
# needed for firmware loading
|
||||
CC_OPT += -DCONFIG_FW_LOADER
|
||||
|
||||
@ -53,14 +57,19 @@ CC_OPT += -DCONFIG_RFKILL
|
||||
# choose default pid algorithm
|
||||
CC_OPT += -DCONFIG_MAC80211_RC_PID -DCONFIG_MAC80211_RC_DEFAULT=\"pid\"
|
||||
|
||||
CC_OPT += -DCONFIG_CFG80211
|
||||
|
||||
#
|
||||
# Suffix of global 'module_init' function
|
||||
#
|
||||
MOD_SUFFIX =
|
||||
CC_OPT += -DMOD_SUFFIX=$(MOD_SUFFIX)
|
||||
|
||||
SRC_C += lib/ctype.c
|
||||
SRC_C += lib/bsearch.c
|
||||
SRC_C += lib/bucket_locks.c
|
||||
SRC_C += lib/crc32.c
|
||||
SRC_C += lib/ctype.c
|
||||
SRC_C += lib/gcd.c
|
||||
|
||||
# crypto
|
||||
SRC_C += $(addprefix crypto/, $(notdir $(wildcard $(WIFI_CONTRIB_DIR)/crypto/*.c)))
|
||||
@ -101,11 +110,15 @@ CC_OPT += -DCONFIG_LEDS_TRIGGERS
|
||||
CC_OPT += -D__CHECK_ENDIAN__
|
||||
|
||||
# iwlwifi driver
|
||||
DRV_DIR_IWLWIFI := drivers/net/wireless/iwlwifi
|
||||
DRV_DIR_IWLWIFI := drivers/net/wireless/intel/iwlwifi
|
||||
SRC_C += $(addprefix $(DRV_DIR_IWLWIFI)/, $(notdir $(wildcard $(WIFI_CONTRIB_DIR)/$(DRV_DIR_IWLWIFI)/*.c)))
|
||||
SRC_C += $(addprefix $(DRV_DIR_IWLWIFI)/cfg/, $(notdir $(wildcard $(WIFI_CONTRIB_DIR)/$(DRV_DIR_IWLWIFI)/cfg/*.c)))
|
||||
SRC_C += $(addprefix $(DRV_DIR_IWLWIFI)/dvm/, $(notdir $(wildcard $(WIFI_CONTRIB_DIR)/$(DRV_DIR_IWLWIFI)/dvm/*.c)))
|
||||
SRC_C += $(addprefix $(DRV_DIR_IWLWIFI)/fw/, $(notdir $(wildcard $(WIFI_CONTRIB_DIR)/$(DRV_DIR_IWLWIFI)/fw/*.c)))
|
||||
SRC_C += $(addprefix $(DRV_DIR_IWLWIFI)/mvm/, $(notdir $(wildcard $(WIFI_CONTRIB_DIR)/$(DRV_DIR_IWLWIFI)/mvm/*.c)))
|
||||
SRC_C += $(addprefix $(DRV_DIR_IWLWIFI)/pcie/, $(notdir $(wildcard $(WIFI_CONTRIB_DIR)/$(DRV_DIR_IWLWIFI)/pcie/*.c)))
|
||||
INC_DIR += $(WIFI_CONTRIB_DIR)/$(DRV_DIR_IWLWIFI)
|
||||
INC_DIR += $(WIFI_CONTRIB_DIR)/$(DRV_DIR_IWLWIFI)/fw
|
||||
CC_OPT += -DCONFIG_IWLMVM -DCONFIG_IWLDVM -DCONFIG_IWLWIFI_LEDS
|
||||
CC_OPT += -DCONFIG_IWLWIFI_DEBUG
|
||||
|
||||
|
@ -1,88 +1,77 @@
|
||||
diff --git a/drivers/net/wireless/iwlwifi/dvm/rs.c b/drivers/net/wireless/iwlwifi/dvm/rs.c
|
||||
index 0977d93..3ccfd0e 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/dvm/rs.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/dvm/rs.c
|
||||
@@ -2309,7 +2309,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
|
||||
rate_scale_index_msk = rate_mask;
|
||||
|
||||
if (!((1 << index) & rate_scale_index_msk)) {
|
||||
- IWL_ERR(priv, "Current Rate is not valid\n");
|
||||
+ // IWL_ERR(priv, "Current Rate is not valid\n");
|
||||
if (lq_sta->search_better_tbl) {
|
||||
/* revert to active table if search table is not valid*/
|
||||
tbl->lq_type = LQ_NONE;
|
||||
diff --git a/drivers/net/wireless/iwlwifi/iwl-debug.c b/drivers/net/wireless/iwlwifi/iwl-debug.c
|
||||
index 09feff4..f218fe6 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/iwl-debug.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/iwl-debug.c
|
||||
@@ -78,7 +78,9 @@ void __iwl_ ##fn(struct device *dev, const char *fmt, ...) \
|
||||
\
|
||||
va_start(args, fmt); \
|
||||
vaf.va = &args; \
|
||||
- dev_ ##fn(dev, "%pV", &vaf); \
|
||||
+ char buf[256]; \
|
||||
+ vsnprintf(buf, sizeof(buf), vaf.fmt, *vaf.va); \
|
||||
+ dev_ ##fn(dev, "%s", buf); \
|
||||
trace_iwlwifi_ ##fn(&vaf); \
|
||||
va_end(args); \
|
||||
diff --git a/crypto/algboss.c b/crypto/algboss.c
|
||||
index 5e6df2a..6ec2ce3 100644
|
||||
--- a/crypto/algboss.c
|
||||
+++ b/crypto/algboss.c
|
||||
@@ -90,6 +90,8 @@ out:
|
||||
crypto_alg_put(¶m->larval->alg);
|
||||
kfree(param);
|
||||
module_put_and_exit(0);
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
@@ -101,10 +103,12 @@ void __iwl_err(struct device *dev, bool rfkill_prefix, bool trace_only,
|
||||
va_start(args, fmt);
|
||||
vaf.va = &args;
|
||||
if (!trace_only) {
|
||||
+ char buf[256];
|
||||
+ vsnprintf(buf, sizeof(buf), vaf.fmt, *vaf.va);
|
||||
if (rfkill_prefix)
|
||||
- dev_err(dev, "(RFKILL) %pV", &vaf);
|
||||
+ dev_err(dev, "(RFKILL) %s", buf);
|
||||
else
|
||||
- dev_err(dev, "%pV", &vaf);
|
||||
+ dev_err(dev, "%s", buf);
|
||||
}
|
||||
trace_iwlwifi_err(&vaf);
|
||||
va_end(args);
|
||||
@@ -125,9 +129,12 @@ void __iwl_dbg(struct device *dev,
|
||||
vaf.va = &args;
|
||||
#ifdef CONFIG_IWLWIFI_DEBUG
|
||||
if (iwl_have_debug_level(level) &&
|
||||
- (!limit || net_ratelimit()))
|
||||
- dev_printk(KERN_DEBUG, dev, "%c %s %pV",
|
||||
- in_interrupt() ? 'I' : 'U', function, &vaf);
|
||||
+ (!limit || net_ratelimit())) {
|
||||
+ char buf[256];
|
||||
+ vsnprintf(buf, sizeof(buf), vaf.fmt, *vaf.va);
|
||||
+ dev_printk(KERN_DEBUG, dev, "%c %s %s",
|
||||
+ in_interrupt() ? 'I' : 'U', function, buf);
|
||||
+ }
|
||||
#endif
|
||||
trace_iwlwifi_dbg(level, in_interrupt(), function, &vaf);
|
||||
va_end(args);
|
||||
--- a/drivers/net/wireless/iwlwifi/iwl-trans.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/iwl-trans.c
|
||||
@@ -96,7 +96,7 @@
|
||||
sizeof(struct iwl_device_cmd)
|
||||
+ trans->dev_cmd_headroom,
|
||||
sizeof(void *),
|
||||
- SLAB_HWCACHE_ALIGN,
|
||||
+ SLAB_HWCACHE_ALIGN | SLAB_LX_DMA,
|
||||
NULL);
|
||||
if (!trans->dev_cmd_pool)
|
||||
goto free;
|
||||
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
|
||||
index 9a856e5..e70f9b7 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
|
||||
@@ -566,7 +566,9 @@
|
||||
else
|
||||
hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
|
||||
|
||||
+/* don't enable broken scheduled scanning
|
||||
hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN;
|
||||
+*/
|
||||
hw->wiphy->max_sched_scan_ssids = PROBE_OPTION_MAX;
|
||||
hw->wiphy->max_match_sets = IWL_SCAN_MAX_PROFILES;
|
||||
/* we create the 802.11 header and zero length SSID IE. */
|
||||
@@ -4200,7 +4202,7 @@
|
||||
static int cryptomgr_schedule_probe(struct crypto_larval *larval)
|
||||
@@ -227,6 +229,8 @@ skiptest:
|
||||
|
||||
kfree(param);
|
||||
module_put_and_exit(0);
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int cryptomgr_schedule_test(struct crypto_alg *alg)
|
||||
diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
|
||||
index 7bd704a..d329673 100644
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
|
||||
@@ -549,6 +549,8 @@ static struct scatterlist *alloc_sgtable(int size)
|
||||
|
||||
void iwl_fw_error_dump(struct iwl_fw_runtime *fwrt)
|
||||
{
|
||||
+ return;
|
||||
+
|
||||
struct iwl_fw_error_dump_file *dump_file;
|
||||
struct iwl_fw_error_dump_data *dump_data;
|
||||
struct iwl_fw_error_dump_info *dump_info;
|
||||
@@ -1106,6 +1108,8 @@ IWL_EXPORT_SYMBOL(iwl_fw_start_dbg_conf);
|
||||
|
||||
void iwl_fw_error_dump_wk(struct work_struct *work)
|
||||
{
|
||||
+ return;
|
||||
+
|
||||
struct iwl_fw_runtime *fwrt =
|
||||
container_of(work, struct iwl_fw_runtime, dump.wk.work);
|
||||
|
||||
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-drv.c b/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
|
||||
index 9c4a7f6..3bf610f 100644
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
|
||||
@@ -1776,6 +1776,7 @@ MODULE_PARM_DESC(debug, "debug output mask");
|
||||
module_param_named(swcrypto, iwlwifi_mod_params.swcrypto, int, S_IRUGO);
|
||||
MODULE_PARM_DESC(swcrypto, "using crypto in software (default 0 [hardware])");
|
||||
module_param_named(11n_disable, iwlwifi_mod_params.disable_11n, uint, S_IRUGO);
|
||||
+unsigned int *module_param_11n_disable = &iwlwifi_mod_params.disable_11n;
|
||||
MODULE_PARM_DESC(11n_disable,
|
||||
"disable 11n functionality, bitmap: 1: full, 2: disable agg TX, 4: disable agg RX, 8 enable agg TX");
|
||||
module_param_named(amsdu_size, iwlwifi_mod_params.amsdu_size,
|
||||
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/led.c b/drivers/net/wireless/intel/iwlwifi/mvm/led.c
|
||||
index b272695..143130d 100644
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/mvm/led.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/led.c
|
||||
@@ -142,7 +142,7 @@ int iwl_mvm_leds_init(struct iwl_mvm *mvm)
|
||||
if (ret) {
|
||||
kfree(mvm->led.name);
|
||||
IWL_INFO(mvm, "Failed to enable led\n");
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
mvm->init_status |= IWL_MVM_INIT_STATUS_LEDS_INIT_COMPLETE;
|
||||
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
|
||||
index 7152fdc..5d133e5 100644
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
|
||||
@@ -4368,7 +4368,7 @@ const struct ieee80211_ops iwl_mvm_hw_ops = {
|
||||
.add_interface = iwl_mvm_mac_add_interface,
|
||||
.remove_interface = iwl_mvm_mac_remove_interface,
|
||||
.config = iwl_mvm_mac_config,
|
||||
@ -91,159 +80,46 @@ index 9a856e5..e70f9b7 100644
|
||||
.configure_filter = iwl_mvm_configure_filter,
|
||||
.config_iface_filter = iwl_mvm_config_iface_filter,
|
||||
.bss_info_changed = iwl_mvm_bss_info_changed,
|
||||
diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h
|
||||
index 2b0ba1f..8de16d0 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/mvm/mvm.h
|
||||
+++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h
|
||||
@@ -64,7 +64,7 @@
|
||||
#ifndef __IWL_MVM_H__
|
||||
#define __IWL_MVM_H__
|
||||
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
|
||||
index f25ce3a..85007fc 100644
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
|
||||
@@ -1601,7 +1601,7 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)
|
||||
* Re-enable interrupts here since we don't
|
||||
* have anything to service
|
||||
*/
|
||||
- if (test_bit(STATUS_INT_ENABLED, &trans->status))
|
||||
+ // if (test_bit(STATUS_INT_ENABLED, &trans->status))
|
||||
_iwl_enable_interrupts(trans);
|
||||
spin_unlock(&trans_pcie->irq_lock);
|
||||
lock_map_release(&trans->sync_cmd_lockdep_map);
|
||||
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
|
||||
index 99df171..4632cdf 100644
|
||||
--- a/include/linux/skbuff.h
|
||||
+++ b/include/linux/skbuff.h
|
||||
@@ -3781,7 +3781,7 @@ static inline void skb_remcsum_process(struct sk_buff *skb, void *ptr,
|
||||
|
||||
-#include <linux/list.h>
|
||||
+/* #include <linux/list.h> */
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/in6.h>
|
||||
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
|
||||
index e526a8c..f3134fe 100644
|
||||
--- a/include/linux/ieee80211.h
|
||||
+++ b/include/linux/ieee80211.h
|
||||
@@ -2231,7 +2231,7 @@ static inline bool ieee80211_is_robust_mgmt_frame(struct ieee80211_hdr *hdr)
|
||||
static inline bool ieee80211_is_public_action(struct ieee80211_hdr *hdr,
|
||||
size_t len)
|
||||
{
|
||||
- struct ieee80211_mgmt *mgmt = (void *)hdr;
|
||||
+ struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)hdr;
|
||||
|
||||
if (len < IEEE80211_MIN_ACTION_SIZE)
|
||||
return false;
|
||||
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
|
||||
index b1f84b0..890da1b 100644
|
||||
--- a/include/net/cfg80211.h
|
||||
+++ b/include/net/cfg80211.h
|
||||
@@ -191,6 +191,7 @@ struct ieee80211_channel {
|
||||
* @IEEE80211_RATE_SUPPORTS_10MHZ: Rate can be used in 10 MHz mode
|
||||
*/
|
||||
enum ieee80211_rate_flags {
|
||||
+ IEEE80211_RATE_NULL = 0,
|
||||
IEEE80211_RATE_SHORT_PREAMBLE = 1<<0,
|
||||
IEEE80211_RATE_MANDATORY_A = 1<<1,
|
||||
IEEE80211_RATE_MANDATORY_B = 1<<2,
|
||||
@@ -465,7 +466,7 @@ ieee80211_chandef_rate_flags(struct cfg80211_chan_def *chandef)
|
||||
default:
|
||||
break;
|
||||
if (unlikely(skb->ip_summed != CHECKSUM_COMPLETE)) {
|
||||
__skb_checksum_complete(skb);
|
||||
- skb_postpull_rcsum(skb, skb->data, ptr - (void *)skb->data);
|
||||
+ skb_postpull_rcsum(skb, skb->data, (unsigned char*)ptr - skb->data);
|
||||
}
|
||||
- return 0;
|
||||
+ return IEEE80211_RATE_NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2990,7 +2991,7 @@ struct wiphy {
|
||||
const struct nl80211_vendor_cmd_info *vendor_events;
|
||||
int n_vendor_commands, n_vendor_events;
|
||||
|
||||
- char priv[0] __aligned(NETDEV_ALIGN);
|
||||
+ char priv[0] __attribute__ ((__aligned__(32)));//__aligned(NETDEV_ALIGN);
|
||||
};
|
||||
|
||||
static inline struct net *wiphy_net(struct wiphy *wiphy)
|
||||
diff --git a/include/net/netlink.h b/include/net/netlink.h
|
||||
index 2b47eaa..6bd2cb1 100644
|
||||
--- a/include/net/netlink.h
|
||||
+++ b/include/net/netlink.h
|
||||
@@ -308,7 +308,7 @@ static inline int nlmsg_len(const struct nlmsghdr *nlh)
|
||||
static inline struct nlattr *nlmsg_attrdata(const struct nlmsghdr *nlh,
|
||||
int hdrlen)
|
||||
{
|
||||
- unsigned char *data = nlmsg_data(nlh);
|
||||
+ unsigned char *data = (unsigned char *)nlmsg_data(nlh);
|
||||
return (struct nlattr *) (data + NLMSG_ALIGN(hdrlen));
|
||||
}
|
||||
|
||||
@@ -717,7 +717,7 @@ static inline struct nlattr *nla_next(const struct nlattr *nla, int *remaining)
|
||||
static inline struct nlattr *
|
||||
nla_find_nested(const struct nlattr *nla, int attrtype)
|
||||
{
|
||||
- return nla_find(nla_data(nla), nla_len(nla), attrtype);
|
||||
+ return nla_find((const struct nlattr *)nla_data(nla), nla_len(nla), attrtype);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -733,7 +733,7 @@ static inline int nla_parse_nested(struct nlattr *tb[], int maxtype,
|
||||
const struct nlattr *nla,
|
||||
const struct nla_policy *policy)
|
||||
{
|
||||
- return nla_parse(tb, maxtype, nla_data(nla), nla_len(nla), policy);
|
||||
+ return nla_parse(tb, maxtype, (const struct nlattr *)nla_data(nla), nla_len(nla), policy);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1161,7 +1161,7 @@ static inline void nla_nest_cancel(struct sk_buff *skb, struct nlattr *start)
|
||||
static inline int nla_validate_nested(const struct nlattr *start, int maxtype,
|
||||
const struct nla_policy *policy)
|
||||
{
|
||||
- return nla_validate(nla_data(start), nla_len(start), maxtype, policy);
|
||||
+ return nla_validate((const struct nlattr *)nla_data(start), nla_len(start), maxtype, policy);
|
||||
}
|
||||
|
||||
/**
|
||||
diff --git a/include/net/sock.h b/include/net/sock.h
|
||||
index b9586a1..d95959f 100644
|
||||
--- a/include/net/sock.h
|
||||
+++ b/include/net/sock.h
|
||||
@@ -1854,7 +1854,7 @@ static inline int skb_add_data_nocache(struct sock *sk, struct sk_buff *skb,
|
||||
{
|
||||
int err, offset = skb->len;
|
||||
|
||||
- err = skb_do_copy_data_nocache(sk, skb, from, skb_put(skb, copy),
|
||||
+ err = skb_do_copy_data_nocache(sk, skb, from, (char *)skb_put(skb, copy),
|
||||
copy, offset);
|
||||
if (err)
|
||||
__skb_trim(skb, offset);
|
||||
@@ -1869,7 +1869,7 @@ static inline int skb_copy_to_page_nocache(struct sock *sk, char __user *from,
|
||||
{
|
||||
int err;
|
||||
|
||||
- err = skb_do_copy_data_nocache(sk, skb, from, page_address(page) + off,
|
||||
+ err = skb_do_copy_data_nocache(sk, skb, from, (char *)(page_address(page) + off),
|
||||
copy, skb->len);
|
||||
if (err)
|
||||
return err;
|
||||
diff --git a/net/core/sock.c b/net/core/sock.c
|
||||
index c0fc6bd..29f7035 100644
|
||||
--- a/net/core/sock.c
|
||||
+++ b/net/core/sock.c
|
||||
@@ -142,6 +142,8 @@
|
||||
|
||||
#include <net/busy_poll.h>
|
||||
|
||||
+#include <net/timewait_sock.h>
|
||||
+
|
||||
static DEFINE_MUTEX(proto_list_mutex);
|
||||
static LIST_HEAD(proto_list);
|
||||
|
||||
delta = remcsum_adjust(ptr, skb->csum, start, offset);
|
||||
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
|
||||
index 48a6a93..598f469 100644
|
||||
index e0f3f4a..a309257 100644
|
||||
--- a/net/packet/af_packet.c
|
||||
+++ b/net/packet/af_packet.c
|
||||
@@ -93,6 +93,8 @@
|
||||
#include <net/inet_common.h>
|
||||
#endif
|
||||
|
||||
+#include <linux/if_ether.h>
|
||||
+
|
||||
#include "internal.h"
|
||||
|
||||
/*
|
||||
@@ -3508,6 +3510,7 @@ static int packet_notifier(struct notifier_block *this,
|
||||
@@ -3977,6 +3977,8 @@ static int packet_notifier(struct notifier_block *this,
|
||||
struct net_device *dev = netdev_notifier_info_to_dev(ptr);
|
||||
struct net *net = dev_net(dev);
|
||||
|
||||
+// XXX check if still needed
|
||||
+#if 0
|
||||
rcu_read_lock();
|
||||
sk_for_each_rcu(sk, &net->packet.sklist) {
|
||||
struct packet_sock *po = pkt_sk(sk);
|
||||
@@ -3548,6 +3551,7 @@ static int packet_notifier(struct notifier_block *this,
|
||||
@@ -4017,6 +4019,7 @@ static int packet_notifier(struct notifier_block *this,
|
||||
}
|
||||
}
|
||||
rcu_read_unlock();
|
||||
@ -251,7 +127,7 @@ index 48a6a93..598f469 100644
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
@@ -4062,8 +4066,10 @@ static int __net_init packet_net_init(struct net *net)
|
||||
@@ -4544,8 +4547,10 @@ static int __net_init packet_net_init(struct net *net)
|
||||
mutex_init(&net->packet.sklist_lock);
|
||||
INIT_HLIST_HEAD(&net->packet.sklist);
|
||||
|
||||
@ -262,84 +138,3 @@ index 48a6a93..598f469 100644
|
||||
|
||||
return 0;
|
||||
}
|
||||
diff --git a/net/wireless/core.h b/net/wireless/core.h
|
||||
index f1d193b..24220b3 100644
|
||||
--- a/net/wireless/core.h
|
||||
+++ b/net/wireless/core.h
|
||||
@@ -82,7 +82,7 @@ struct cfg80211_registered_device {
|
||||
|
||||
/* must be last because of the way we do wiphy_priv(),
|
||||
* and it should at least be aligned to NETDEV_ALIGN */
|
||||
- struct wiphy wiphy __aligned(NETDEV_ALIGN);
|
||||
+ struct wiphy wiphy __attribute__((__aligned__(32)));
|
||||
};
|
||||
|
||||
static inline
|
||||
diff --git a/net/wireless/sysfs.c b/net/wireless/sysfs.c
|
||||
index 9ee6bc1..02d740d 100644
|
||||
--- a/net/wireless/sysfs.c
|
||||
+++ b/net/wireless/sysfs.c
|
||||
@@ -156,7 +156,7 @@ struct class ieee80211_class = {
|
||||
.resume = wiphy_resume,
|
||||
#endif
|
||||
.ns_type = &net_ns_type_operations,
|
||||
- .namespace = wiphy_namespace,
|
||||
+ ._namespace = wiphy_namespace,
|
||||
};
|
||||
|
||||
int wiphy_sysfs_init(void)
|
||||
--- a/include/linux/skbuff.h
|
||||
+++ b/include/linux/skbuff.h
|
||||
@@ -3281,7 +3281,7 @@
|
||||
|
||||
if (unlikely(skb->ip_summed != CHECKSUM_COMPLETE)) {
|
||||
__skb_checksum_complete(skb);
|
||||
- skb_postpull_rcsum(skb, skb->data, ptr - (void *)skb->data);
|
||||
+ skb_postpull_rcsum(skb, skb->data, (unsigned char*)ptr - skb->data);
|
||||
}
|
||||
|
||||
delta = remcsum_adjust(ptr, skb->csum, start, offset);
|
||||
--- a/drivers/net/wireless/iwlwifi/mvm/rx.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/mvm/rx.c
|
||||
@@ -115,7 +115,11 @@
|
||||
* to do so) we should revisit this and ieee80211_data_to_8023().
|
||||
*/
|
||||
hdrlen = (len <= skb_tailroom(skb)) ? len :
|
||||
- sizeof(*hdr) + crypt_len + 8;
|
||||
+ sizeof(*hdr);// + crypt_len + 8;
|
||||
+ /*
|
||||
+ * XXX decreasing the hdrlen by removing the appendage makes the
|
||||
+ * driver work... why?
|
||||
+ */
|
||||
|
||||
memcpy(skb_put(skb, hdrlen), hdr, hdrlen);
|
||||
fraglen = len - hdrlen;
|
||||
--- a/crypto/scatterwalk.c
|
||||
+++ b/crypto/scatterwalk.c
|
||||
@@ -115,9 +115,13 @@
|
||||
|
||||
sg = scatterwalk_ffwd(tmp, sg, start);
|
||||
|
||||
- if (sg_page(sg) == virt_to_page(buf) &&
|
||||
- sg->offset == offset_in_page(buf))
|
||||
- return;
|
||||
+ //
|
||||
+ // We have no working virt_to_page and offset_in_page
|
||||
+ // for this use case.
|
||||
+ //
|
||||
+ // if (sg_page(sg) == virt_to_page(buf) &&
|
||||
+ // sg->offset == offset_in_page(buf))
|
||||
+ // return;
|
||||
|
||||
scatterwalk_start(&walk, sg);
|
||||
scatterwalk_copychunks(buf, &walk, nbytes, out);
|
||||
--- a/drivers/net/wireless/iwlwifi/iwl-drv.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/iwl-drv.c
|
||||
@@ -1635,6 +1635,7 @@
|
||||
module_param_named(swcrypto, iwlwifi_mod_params.sw_crypto, int, S_IRUGO);
|
||||
MODULE_PARM_DESC(swcrypto, "using crypto in software (default 0 [hardware])");
|
||||
module_param_named(11n_disable, iwlwifi_mod_params.disable_11n, uint, S_IRUGO);
|
||||
+unsigned int *module_param_11n_disable = &iwlwifi_mod_params.disable_11n;
|
||||
MODULE_PARM_DESC(11n_disable,
|
||||
"disable 11n functionality, bitmap: 1: full, 2: disable agg TX, 4: disable agg RX, 8 enable agg TX");
|
||||
module_param_named(amsdu_size_8K, iwlwifi_mod_params.amsdu_size_8K,
|
||||
|
@ -1,100 +0,0 @@
|
||||
diff --git a/crypto/ccm.c b/crypto/ccm.c
|
||||
index cc31ea4..7eabdb8 100644
|
||||
--- a/crypto/ccm.c
|
||||
+++ b/crypto/ccm.c
|
||||
@@ -58,7 +58,8 @@ static inline struct crypto_ccm_req_priv_ctx *crypto_ccm_reqctx(
|
||||
{
|
||||
unsigned long align = crypto_aead_alignmask(crypto_aead_reqtfm(req));
|
||||
|
||||
- return (void *)PTR_ALIGN((u8 *)aead_request_ctx(req), align + 1);
|
||||
+ u8 *p = (u8 *) aead_request_ctx(req);
|
||||
+ return (void *)PTR_ALIGN(p, (align + 1));
|
||||
}
|
||||
|
||||
static int set_msg_len(u8 *block, unsigned int msglen, int csize)
|
||||
@@ -710,8 +711,9 @@ static struct aead_request *crypto_rfc4309_crypt(struct aead_request *req)
|
||||
struct crypto_rfc4309_ctx *ctx = crypto_aead_ctx(aead);
|
||||
struct crypto_aead *child = ctx->child;
|
||||
struct scatterlist *sg;
|
||||
- u8 *iv = PTR_ALIGN((u8 *)(subreq + 1) + crypto_aead_reqsize(child),
|
||||
- crypto_aead_alignmask(child) + 1);
|
||||
+ unsigned long m = crypto_aead_alignmask(child) + 1;
|
||||
+ u8 *p = (u8 *)(subreq + 1) + crypto_aead_reqsize(child);
|
||||
+ u8 *iv = PTR_ALIGN(p, m);
|
||||
|
||||
/* L' */
|
||||
iv[0] = 3;
|
||||
diff --git a/crypto/ctr.c b/crypto/ctr.c
|
||||
index f2b94f2..b345689 100644
|
||||
--- a/crypto/ctr.c
|
||||
+++ b/crypto/ctr.c
|
||||
@@ -59,7 +59,9 @@ static void crypto_ctr_crypt_final(struct blkcipher_walk *walk,
|
||||
unsigned long alignmask = crypto_cipher_alignmask(tfm);
|
||||
u8 *ctrblk = walk->iv;
|
||||
u8 tmp[bsize + alignmask];
|
||||
- u8 *keystream = PTR_ALIGN(tmp + 0, alignmask + 1);
|
||||
+ u8 *p = (u8*)(tmp + 0);
|
||||
+ unsigned long m = alignmask + 1;
|
||||
+ u8 *keystream = PTR_ALIGN(p, m);
|
||||
u8 *src = walk->src.virt.addr;
|
||||
u8 *dst = walk->dst.virt.addr;
|
||||
unsigned int nbytes = walk->nbytes;
|
||||
@@ -108,7 +110,9 @@ static int crypto_ctr_crypt_inplace(struct blkcipher_walk *walk,
|
||||
u8 *ctrblk = walk->iv;
|
||||
u8 *src = walk->src.virt.addr;
|
||||
u8 tmp[bsize + alignmask];
|
||||
- u8 *keystream = PTR_ALIGN(tmp + 0, alignmask + 1);
|
||||
+ unsigned long m = alignmask + 1;
|
||||
+ u8 *p = (u8*)(tmp + 0);
|
||||
+ u8 *keystream = PTR_ALIGN(p , m);
|
||||
|
||||
do {
|
||||
/* create keystream */
|
||||
@@ -281,8 +285,11 @@ static int crypto_rfc3686_crypt(struct ablkcipher_request *req)
|
||||
struct crypto_rfc3686_ctx *ctx = crypto_ablkcipher_ctx(tfm);
|
||||
struct crypto_ablkcipher *child = ctx->child;
|
||||
unsigned long align = crypto_ablkcipher_alignmask(tfm);
|
||||
+
|
||||
+ unsigned long m = align + 1;
|
||||
+ u8 *p = (u8*) ablkcipher_request_ctx(req);
|
||||
struct crypto_rfc3686_req_ctx *rctx =
|
||||
- (void *)PTR_ALIGN((u8 *)ablkcipher_request_ctx(req), align + 1);
|
||||
+ (void *)PTR_ALIGN(p, m);
|
||||
struct ablkcipher_request *subreq = &rctx->subreq;
|
||||
u8 *iv = rctx->iv;
|
||||
|
||||
--- a/include/crypto/algapi.h
|
||||
+++ b/include/crypto/algapi.h
|
||||
@@ -201,8 +201,10 @@ void __ablkcipher_walk_complete(struct ablkcipher_walk *walk);
|
||||
|
||||
static inline void *crypto_tfm_ctx_aligned(struct crypto_tfm *tfm)
|
||||
{
|
||||
- return PTR_ALIGN(crypto_tfm_ctx(tfm),
|
||||
- crypto_tfm_alg_alignmask(tfm) + 1);
|
||||
+ void *p = crypto_tfm_ctx(tfm);
|
||||
+ unsigned int m = crypto_tfm_alg_alignmask(tfm) + 1;
|
||||
+
|
||||
+ return PTR_ALIGN(p, m);
|
||||
}
|
||||
|
||||
static inline struct crypto_instance *crypto_tfm_alg_instance(
|
||||
--- a/crypto/algboss.c
|
||||
+++ b/crypto/algboss.c
|
||||
@@ -90,6 +90,8 @@ out:
|
||||
crypto_alg_put(¶m->larval->alg);
|
||||
kfree(param);
|
||||
module_put_and_exit(0);
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int cryptomgr_schedule_probe(struct crypto_larval *larval)
|
||||
@@ -228,6 +230,8 @@ skiptest:
|
||||
|
||||
kfree(param);
|
||||
module_put_and_exit(0);
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int cryptomgr_schedule_test(struct crypto_alg *alg)
|
@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/iwlwifi/dvm/calib.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/dvm/calib.c
|
||||
@@ -121,7 +121,7 @@ int iwl_calib_set(struct iwl_priv *priv,
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/dvm/calib.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/calib.c
|
||||
@@ -120,7 +120,7 @@ int iwl_calib_set(struct iwl_priv *priv,
|
||||
struct iwl_calib_result *res, *tmp;
|
||||
|
||||
res = kmalloc(sizeof(*res) + len - sizeof(struct iwl_calib_hdr),
|
||||
@ -9,9 +9,9 @@
|
||||
if (!res)
|
||||
return -ENOMEM;
|
||||
memcpy(&res->hdr, cmd, len);
|
||||
--- a/drivers/net/wireless/iwlwifi/dvm/scan.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/dvm/scan.c
|
||||
@@ -672,7 +672,7 @@ static int iwlagn_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif)
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/dvm/scan.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/scan.c
|
||||
@@ -666,7 +666,7 @@ static int iwlagn_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif)
|
||||
ctx = iwl_rxon_ctx_from_vif(vif);
|
||||
|
||||
if (!priv->scan_cmd) {
|
||||
@ -20,9 +20,67 @@
|
||||
if (!priv->scan_cmd) {
|
||||
IWL_DEBUG_SCAN(priv,
|
||||
"fail to allocate memory for scan\n");
|
||||
--- a/drivers/net/wireless/iwlwifi/pcie/tx.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/pcie/tx.c
|
||||
@@ -492,7 +492,7 @@ static int iwl_pcie_txq_alloc(struct iwl_trans *trans,
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/iwl-phy-db.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-phy-db.c
|
||||
@@ -251,7 +251,7 @@ int iwl_phy_db_set_section(struct iwl_phy_db *phy_db,
|
||||
return -EINVAL;
|
||||
|
||||
kfree(entry->data);
|
||||
- entry->data = kmemdup(phy_db_notif->data, size, GFP_ATOMIC);
|
||||
+ entry->data = kmemdup(phy_db_notif->data, size, GFP_ATOMIC | GFP_LX_DMA);
|
||||
if (!entry->data) {
|
||||
entry->size = 0;
|
||||
return -ENOMEM;
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/iwl-trans.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-trans.c
|
||||
@@ -99,7 +99,7 @@ struct iwl_trans *iwl_trans_alloc(unsigned int priv_size,
|
||||
kmem_cache_create(trans->dev_cmd_pool_name,
|
||||
sizeof(struct iwl_device_cmd),
|
||||
sizeof(void *),
|
||||
- SLAB_HWCACHE_ALIGN,
|
||||
+ SLAB_HWCACHE_ALIGN|SLAB_LX_DMA,
|
||||
NULL);
|
||||
if (!trans->dev_cmd_pool)
|
||||
return NULL;
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
|
||||
@@ -767,7 +767,7 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,
|
||||
|
||||
scan_size = iwl_mvm_scan_size(mvm);
|
||||
|
||||
- mvm->scan_cmd = kmalloc(scan_size, GFP_KERNEL);
|
||||
+ mvm->scan_cmd = kmalloc(scan_size, GFP_KERNEL | GFP_LX_DMA);
|
||||
if (!mvm->scan_cmd)
|
||||
goto out_free;
|
||||
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/mvm/scan.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/scan.c
|
||||
@@ -501,11 +501,11 @@ iwl_mvm_config_sched_scan_profiles(struct iwl_mvm *mvm,
|
||||
else
|
||||
blacklist_len = IWL_SCAN_MAX_BLACKLIST_LEN;
|
||||
|
||||
- blacklist = kzalloc(sizeof(*blacklist) * blacklist_len, GFP_KERNEL);
|
||||
+ blacklist = kzalloc(sizeof(*blacklist) * blacklist_len, GFP_KERNEL | GFP_LX_DMA);
|
||||
if (!blacklist)
|
||||
return -ENOMEM;
|
||||
|
||||
- profile_cfg = kzalloc(sizeof(*profile_cfg), GFP_KERNEL);
|
||||
+ profile_cfg = kzalloc(sizeof(*profile_cfg), GFP_KERNEL | GFP_LX_DMA);
|
||||
if (!profile_cfg) {
|
||||
ret = -ENOMEM;
|
||||
goto free_blacklist;
|
||||
@@ -1052,7 +1052,7 @@ int iwl_mvm_config_scan(struct iwl_mvm *mvm)
|
||||
cmd_size = sizeof(struct iwl_scan_config_v1);
|
||||
cmd_size += mvm->fw->ucode_capa.n_scan_channels;
|
||||
|
||||
- cfg = kzalloc(cmd_size, GFP_KERNEL);
|
||||
+ cfg = kzalloc(cmd_size, GFP_KERNEL | GFP_LX_DMA);
|
||||
if (!cfg)
|
||||
return -ENOMEM;
|
||||
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/pcie/tx.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/tx.c
|
||||
@@ -502,7 +502,7 @@ int iwl_pcie_txq_alloc(struct iwl_trans *trans, struct iwl_txq *txq,
|
||||
|
||||
txq->entries = kcalloc(slots_num,
|
||||
sizeof(struct iwl_pcie_txq_entry),
|
||||
@ -31,7 +89,7 @@
|
||||
|
||||
if (!txq->entries)
|
||||
goto error;
|
||||
@@ -501,7 +501,7 @@ static int iwl_pcie_txq_alloc(struct iwl_trans *trans,
|
||||
@@ -511,7 +511,7 @@ int iwl_pcie_txq_alloc(struct iwl_trans *trans, struct iwl_txq *txq,
|
||||
for (i = 0; i < slots_num; i++) {
|
||||
txq->entries[i].cmd =
|
||||
kmalloc(sizeof(struct iwl_device_cmd),
|
||||
@ -40,16 +98,16 @@
|
||||
if (!txq->entries[i].cmd)
|
||||
goto error;
|
||||
}
|
||||
@@ -840,7 +840,7 @@ static int iwl_pcie_tx_alloc(struct iwl_trans *trans)
|
||||
@@ -938,7 +938,7 @@ static int iwl_pcie_tx_alloc(struct iwl_trans *trans)
|
||||
}
|
||||
|
||||
trans_pcie->txq = kcalloc(trans->cfg->base_params->num_of_queues,
|
||||
- sizeof(struct iwl_txq), GFP_KERNEL);
|
||||
+ sizeof(struct iwl_txq), GFP_KERNEL | GFP_LX_DMA);
|
||||
if (!trans_pcie->txq) {
|
||||
trans_pcie->txq_memory = kcalloc(trans->cfg->base_params->num_of_queues,
|
||||
- sizeof(struct iwl_txq), GFP_KERNEL);
|
||||
+ sizeof(struct iwl_txq), GFP_KERNEL | GFP_LX_DMA);
|
||||
if (!trans_pcie->txq_memory) {
|
||||
IWL_ERR(trans, "Not enough memory for txq\n");
|
||||
ret = -ENOMEM;
|
||||
@@ -1255,7 +1255,7 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
|
||||
@@ -1539,7 +1539,7 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
|
||||
}
|
||||
|
||||
dup_buf = kmemdup(cmddata[i], cmdlen[i],
|
||||
@ -60,7 +118,7 @@
|
||||
} else {
|
||||
--- a/net/core/skbuff.c
|
||||
+++ b/net/core/skbuff.c
|
||||
@@ -125,6 +125,8 @@ static void *__kmalloc_reserve(size_t size, gfp_t flags, int node,
|
||||
@@ -130,6 +130,8 @@ static void *__kmalloc_reserve(size_t size, gfp_t flags, int node,
|
||||
void *obj;
|
||||
bool ret_pfmemalloc = false;
|
||||
|
||||
@ -69,52 +127,12 @@
|
||||
/*
|
||||
* Try a regular allocation, when that fails and we're not entitled
|
||||
* to the reserves, fail.
|
||||
--- a/drivers/net/wireless/iwlwifi/iwl-phy-db.c
|
||||
+++ a/drivers/net/wireless/iwlwifi/iwl-phy-db.c
|
||||
@@ -233,7 +233,7 @@
|
||||
return -EINVAL;
|
||||
@@ -278,7 +280,7 @@ struct sk_buff *__build_skb(void *data, unsigned int frag_size)
|
||||
struct sk_buff *skb;
|
||||
unsigned int size = frag_size ? : ksize(data);
|
||||
|
||||
kfree(entry->data);
|
||||
- entry->data = kmemdup(phy_db_notif->data, size, alloc_ctx);
|
||||
+ entry->data = kmemdup(phy_db_notif->data, size, alloc_ctx | GFP_LX_DMA);
|
||||
if (!entry->data) {
|
||||
entry->size = 0;
|
||||
return -ENOMEM;
|
||||
diff --git a/drivers/net/wireless/iwlwifi/mvm/ops.c b/drivers/net/wireless/iwlwifi/mvm/ops.c
|
||||
index 13c97f6..68a8657 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/mvm/ops.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/mvm/ops.c
|
||||
@@ -574,7 +574,7 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,
|
||||
|
||||
scan_size = iwl_mvm_scan_size(mvm);
|
||||
|
||||
- mvm->scan_cmd = kmalloc(scan_size, GFP_KERNEL);
|
||||
+ mvm->scan_cmd = kmalloc(scan_size, GFP_KERNEL | GFP_LX_DMA);
|
||||
if (!mvm->scan_cmd)
|
||||
goto out_free;
|
||||
|
||||
--- a/drivers/net/wireless/iwlwifi/mvm/scan.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/mvm/scan.c
|
||||
@@ -481,11 +481,11 @@
|
||||
else
|
||||
blacklist_len = IWL_SCAN_MAX_BLACKLIST_LEN;
|
||||
|
||||
- blacklist = kzalloc(sizeof(*blacklist) * blacklist_len, GFP_KERNEL);
|
||||
+ blacklist = kzalloc(sizeof(*blacklist) * blacklist_len, GFP_KERNEL|GFP_LX_DMA);
|
||||
if (!blacklist)
|
||||
return -ENOMEM;
|
||||
|
||||
- profile_cfg = kzalloc(sizeof(*profile_cfg), GFP_KERNEL);
|
||||
+ profile_cfg = kzalloc(sizeof(*profile_cfg), GFP_KERNEL|GFP_LX_DMA);
|
||||
if (!profile_cfg) {
|
||||
ret = -ENOMEM;
|
||||
goto free_blacklist;
|
||||
@@ -916,7 +916,7 @@
|
||||
|
||||
cmd_size = sizeof(*scan_config) + mvm->fw->ucode_capa.n_scan_channels;
|
||||
|
||||
- scan_config = kzalloc(cmd_size, GFP_KERNEL);
|
||||
+ scan_config = kzalloc(cmd_size, GFP_KERNEL|GFP_LX_DMA);
|
||||
if (!scan_config)
|
||||
return -ENOMEM;
|
||||
- skb = kmem_cache_alloc(skbuff_head_cache, GFP_ATOMIC);
|
||||
+ skb = kmem_cache_alloc(skbuff_head_cache, GFP_ATOMIC|GFP_LX_DMA);
|
||||
if (!skb)
|
||||
return NULL;
|
||||
|
||||
|
@ -1,56 +1,8 @@
|
||||
--- a/wpa_supplicant/config.c
|
||||
+++ b/wpa_supplicant/config.c
|
||||
@@ -1187,6 +1187,7 @@ static int wpa_config_parse_password(const struct parse_data *data,
|
||||
}
|
||||
|
||||
|
||||
+#if 0
|
||||
static char * wpa_config_write_password(const struct parse_data *data,
|
||||
struct wpa_ssid *ssid)
|
||||
{
|
||||
@@ -1221,6 +1222,7 @@ static char * wpa_config_write_password(const struct parse_data *data,
|
||||
return buf;
|
||||
}
|
||||
#endif /* IEEE8021X_EAPOL */
|
||||
+#endif
|
||||
|
||||
|
||||
static int wpa_config_parse_wep_key(u8 *key, size_t *len, int line,
|
||||
@@ -2264,6 +2266,7 @@ int wpa_config_set_quoted(struct wpa_ssid *ssid, const char *var,
|
||||
}
|
||||
|
||||
|
||||
+#ifndef NO_CONFIG_WRITE
|
||||
/**
|
||||
* wpa_config_get_all - Get all options from network configuration
|
||||
* @ssid: Pointer to network configuration data
|
||||
@@ -2326,7 +2329,6 @@ err:
|
||||
}
|
||||
|
||||
|
||||
-#ifndef NO_CONFIG_WRITE
|
||||
/**
|
||||
* wpa_config_get - Get a variable in network configuration
|
||||
* @ssid: Pointer to network configuration data
|
||||
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
|
||||
index 5cff47fab..5cba03efe 100644
|
||||
--- a/src/drivers/driver_nl80211.c
|
||||
+++ b/src/drivers/driver_nl80211.c
|
||||
@@ -20,11 +20,12 @@
|
||||
#include <netlink/genl/family.h>
|
||||
#include <netlink/genl/ctrl.h>
|
||||
#include <linux/rtnetlink.h>
|
||||
-#include <netpacket/packet.h>
|
||||
-#include <linux/filter.h>
|
||||
-#include <linux/errqueue.h>
|
||||
+//#include <netpacket/packet.h>
|
||||
+//#include <linux/filter.h>
|
||||
+//#include <linux/errqueue.h>
|
||||
#include "nl80211_copy.h"
|
||||
|
||||
+
|
||||
#include "common.h"
|
||||
#include "eloop.h"
|
||||
#include "utils/list.h"
|
||||
@@ -10924,7 +10925,7 @@ static void * nl80211_global_init(void)
|
||||
@@ -7645,7 +7645,7 @@ static void * nl80211_global_init(void *ctx)
|
||||
if (wpa_driver_nl80211_init_nl_global(global) < 0)
|
||||
goto err;
|
||||
|
||||
@ -59,6 +11,8 @@
|
||||
if (global->ioctl_sock < 0) {
|
||||
wpa_printf(MSG_ERROR, "nl80211: socket(PF_INET,SOCK_DGRAM) failed: %s",
|
||||
strerror(errno));
|
||||
diff --git a/src/drivers/netlink.c b/src/drivers/netlink.c
|
||||
index 0e960f48c..38fb26c18 100644
|
||||
--- a/src/drivers/netlink.c
|
||||
+++ b/src/drivers/netlink.c
|
||||
@@ -13,6 +13,8 @@
|
||||
@ -70,9 +24,11 @@
|
||||
|
||||
struct netlink_data {
|
||||
struct netlink_config *cfg;
|
||||
diff --git a/src/utils/eloop.c b/src/utils/eloop.c
|
||||
index 436bc8c99..fd72eaef3 100644
|
||||
--- a/src/utils/eloop.c
|
||||
+++ b/src/utils/eloop.c
|
||||
@@ -23,7 +23,7 @@
|
||||
@@ -28,7 +28,7 @@
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ELOOP_POLL
|
||||
@ -81,82 +37,39 @@
|
||||
#endif /* CONFIG_ELOOP_POLL */
|
||||
|
||||
#ifdef CONFIG_ELOOP_EPOLL
|
||||
@@ -801,7 +801,7 @@
|
||||
@@ -961,7 +961,7 @@ static void eloop_handle_alarm(int sig)
|
||||
#endif /* CONFIG_NATIVE_WINDOWS */
|
||||
|
||||
|
||||
-static void eloop_handle_signal(int sig)
|
||||
+void eloop_handle_signal(int sig)
|
||||
{
|
||||
int i;
|
||||
int i;
|
||||
|
||||
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
|
||||
index fb77f1dbd..9142f3f1b 100644
|
||||
--- a/wpa_supplicant/events.c
|
||||
+++ b/wpa_supplicant/events.c
|
||||
@@ -1245,6 +1245,9 @@
|
||||
@@ -1754,6 +1754,9 @@ static int wpa_supplicant_need_to_roam(struct wpa_supplicant *wpa_s,
|
||||
}
|
||||
|
||||
|
||||
+extern void wpa_report_scan_results(struct wpa_supplicant *);
|
||||
+
|
||||
+
|
||||
/* Return != 0 if no scan results could be fetched or if scan results should not
|
||||
* be shared with other virtual interfaces. */
|
||||
static int _wpa_supplicant_event_scan_results(struct wpa_supplicant *wpa_s,
|
||||
@@ -1281,6 +1284,8 @@
|
||||
goto scan_work_done;
|
||||
}
|
||||
/*
|
||||
* Return a negative value if no scan results could be fetched or if scan
|
||||
* results should not be shared with other virtual interfaces.
|
||||
@@ -1799,6 +1802,8 @@ static int _wpa_supplicant_event_scan_results(struct wpa_supplicant *wpa_s,
|
||||
goto scan_work_done;
|
||||
}
|
||||
|
||||
+ wpa_report_scan_results(wpa_s);
|
||||
+ wpa_report_scan_results(wpa_s);
|
||||
+
|
||||
#ifndef CONFIG_NO_RANDOM_POOL
|
||||
num = scan_res->num;
|
||||
if (num > 10)
|
||||
--- a/src/drivers/driver.h
|
||||
+++ b/src/drivers/driver.h
|
||||
@@ -267,6 +267,20 @@
|
||||
|
||||
#define WPAS_MAX_SCAN_SSIDS 16
|
||||
|
||||
+struct wpa_driver_scan_ssid {
|
||||
+ /**
|
||||
+ * ssid - specific SSID to scan for (ProbeReq)
|
||||
+ * %NULL or zero-length SSID is used to indicate active scan
|
||||
+ * with wildcard SSID.
|
||||
+ */
|
||||
+ const u8 *ssid;
|
||||
+ /**
|
||||
+ * ssid_len: Length of the SSID in octets
|
||||
+ */
|
||||
+ size_t ssid_len;
|
||||
+};
|
||||
+
|
||||
+
|
||||
/**
|
||||
* struct wpa_driver_scan_params - Scan parameters
|
||||
* Data for struct wpa_driver_ops::scan2().
|
||||
@@ -275,18 +289,7 @@
|
||||
/**
|
||||
* ssids - SSIDs to scan for
|
||||
*/
|
||||
- struct wpa_driver_scan_ssid {
|
||||
- /**
|
||||
- * ssid - specific SSID to scan for (ProbeReq)
|
||||
- * %NULL or zero-length SSID is used to indicate active scan
|
||||
- * with wildcard SSID.
|
||||
- */
|
||||
- const u8 *ssid;
|
||||
- /**
|
||||
- * ssid_len: Length of the SSID in octets
|
||||
- */
|
||||
- size_t ssid_len;
|
||||
- } ssids[WPAS_MAX_SCAN_SSIDS];
|
||||
+ struct wpa_driver_scan_ssid ssids[WPAS_MAX_SCAN_SSIDS];
|
||||
|
||||
/**
|
||||
* num_ssids - Number of entries in ssids array
|
||||
--- a/wpa_supplicant/events.c
|
||||
+++ b/wpa_supplicant/events.c
|
||||
@@ -2067,6 +2067,9 @@ static int disconnect_reason_recoverable(u16 reason_code)
|
||||
num = scan_res->num;
|
||||
if (num > 10)
|
||||
@@ -2813,6 +2818,9 @@ static int disconnect_reason_recoverable(u16 reason_code)
|
||||
}
|
||||
|
||||
|
||||
@ -166,7 +79,7 @@
|
||||
static void wpa_supplicant_event_disassoc(struct wpa_supplicant *wpa_s,
|
||||
u16 reason_code,
|
||||
int locally_generated)
|
||||
@@ -2088,6 +2091,7 @@ static void wpa_supplicant_event_disassoc(struct wpa_supplicant *wpa_s,
|
||||
@@ -2834,6 +2842,7 @@ static void wpa_supplicant_event_disassoc(struct wpa_supplicant *wpa_s,
|
||||
|
||||
if (!is_zero_ether_addr(bssid) ||
|
||||
wpa_s->wpa_state >= WPA_AUTHENTICATING) {
|
||||
@ -174,9 +87,11 @@
|
||||
wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_DISCONNECTED "bssid=" MACSTR
|
||||
" reason=%d%s",
|
||||
MAC2STR(bssid), reason_code,
|
||||
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
|
||||
index 185a8d50f..4baedabb3 100644
|
||||
--- a/wpa_supplicant/wpa_supplicant.c
|
||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||
@@ -656,6 +656,9 @@ void wpa_supplicant_reinit_autoscan(struct wpa_supplicant *wpa_s)
|
||||
@@ -822,6 +822,9 @@ void wpa_supplicant_reinit_autoscan(struct wpa_supplicant *wpa_s)
|
||||
}
|
||||
|
||||
|
||||
@ -186,11 +101,11 @@
|
||||
/**
|
||||
* wpa_supplicant_set_state - Set current connection state
|
||||
* @wpa_s: Pointer to wpa_supplicant data
|
||||
@@ -689,6 +692,7 @@ void wpa_supplicant_set_state(struct wpa_supplicant *wpa_s,
|
||||
@@ -879,6 +882,7 @@ void wpa_supplicant_set_state(struct wpa_supplicant *wpa_s,
|
||||
|
||||
if (state == WPA_COMPLETED && wpa_s->new_connection) {
|
||||
struct wpa_ssid *ssid = wpa_s->current_ssid;
|
||||
+ wpa_report_connect_event(wpa_s);
|
||||
#if defined(CONFIG_CTRL_IFACE) || !defined(CONFIG_NO_STDOUT_DEBUG)
|
||||
wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_CONNECTED "- Connection to "
|
||||
MACSTR " completed [id=%d id_str=%s]",
|
||||
int fils_hlp_sent = 0;
|
||||
|
||||
#ifdef CONFIG_SME
|
||||
|
@ -1,9 +1,8 @@
|
||||
LICENSE := GPLv2
|
||||
VERSION := 2
|
||||
DOWNLOADS := dwc_otg.git usb.archive intel_fb.archive lxip.archive \
|
||||
wifi.archive fec.archive libnl.archive wpa_supplicant.archive \
|
||||
fw_3160.archive fw_6000.archive fw_6205a.archive fw_6205b.archive \
|
||||
fw_7260.archive fw_7265.archive fw_8260.archive fw_1000.archive
|
||||
wifi.archive fec.archive libnl.archive wpa_supplicant.git \
|
||||
fw.archive
|
||||
|
||||
#
|
||||
# The git checkout checks for the existence of SRC_DIR, which is created by the
|
||||
@ -52,9 +51,9 @@ HASH_INPUT += $(REP_DIR)/intel_fb.list
|
||||
# mac80211 stack, iwlwifi sources
|
||||
#
|
||||
SRC_DIR_WIFI := src/lib/wifi
|
||||
VERSION_WIFI := 4.4.3
|
||||
VERSION_WIFI := 4.16.3
|
||||
URL(wifi) := https://www.kernel.org/pub/linux/kernel/v4.x/linux-$(VERSION_WIFI).tar.xz
|
||||
SHA(wifi) := 0b379cb19bbd7e38fc5a9a000ea927db55cce519a7400ec7fa705c581a6491dd
|
||||
SHA(wifi) := 0d6971a81da97e38b974c5eba31a74803bfe41aabc46d406c3acda56306c81a3
|
||||
DIR(wifi) := $(SRC_DIR_WIFI)
|
||||
TAR_OPT(wifi) := --strip-components=1 --files-from - < <(sed 's/-x.x.x/-$(VERSION_WIFI)/g' $(REP_DIR)/wifi.list)
|
||||
HASH_INPUT += $(REP_DIR)/wifi.list
|
||||
@ -92,73 +91,25 @@ DIR(libnl) := src/lib/libnl
|
||||
#
|
||||
# wpa_supplicant sources
|
||||
#
|
||||
URL(wpa_supplicant) := https://w1.fi/releases/wpa_supplicant-2.2.tar.gz
|
||||
SHA(wpa_supplicant) := e0d8b8fd68a659636eaba246bb2caacbf53d22d53b2b6b90eb4b4fef0993c8ed
|
||||
URL(wpa_supplicant) := git://w1.fi/srv/git/hostap.git
|
||||
REV(wpa_supplicant) := 25bd4e7beb582509596fe60cb3591e1299f3121b
|
||||
DIR(wpa_supplicant) := src/app/wpa_supplicant
|
||||
|
||||
#
|
||||
# Firmware images for iwlwifi Intel Wireless 3160
|
||||
#
|
||||
URL(fw_3160) := https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-3160-ucode-16.242414.0.tgz
|
||||
SHA(fw_3160) := ea2f272f40b7a76fde049449813a5d6e323769efd603acd303d1e9a4e0e57820
|
||||
DIR(fw_3160) := firmware
|
||||
|
||||
#
|
||||
# Firmware images for iwlwifi Ultimate-N 6300 and Advanced-N 6200
|
||||
# Firmware images
|
||||
#
|
||||
URL(fw_6000) := https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-6000-ucode-9.221.4.1.tgz
|
||||
SHA(fw_6000) := 7f04623231663dc4ee63df32fd890bfa9514dce1fab9dc7a25fda90350da836b
|
||||
DIR(fw_6000) := firmware
|
||||
|
||||
#
|
||||
# Firmware images for iwlwifi Advanced-N 6205
|
||||
#
|
||||
URL(fw_6205a) := https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-6000g2a-ucode-18.168.6.1.tgz
|
||||
SHA(fw_6205a) := a7f2615756addafbf3e6912cb0265f9650b2807d1ccdf54b620735772725bbe9
|
||||
DIR(fw_6205a) := firmware
|
||||
|
||||
#
|
||||
# Firmware images for iwlwifi Advanced-N 6230 / 6235 and Wireless-N 130 / 1030
|
||||
#
|
||||
URL(fw_6205b) := https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-6000g2b-ucode-18.168.6.1.tgz
|
||||
SHA(fw_6205b) := 1683c76b52c3505205447c338603ad08611fcc2da024f476e56e1298b4f10bea
|
||||
DIR(fw_6205b) := firmware
|
||||
|
||||
#
|
||||
# Firmware images for iwlwifi Wireless 7260
|
||||
#
|
||||
URL(fw_7260) := https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-7260-ucode-16.242414.0.tgz
|
||||
SHA(fw_7260) := 3bf102cd3ea8a720bef89dca120c94aa5ff34bcc756413fc5982a39613641d84
|
||||
DIR(fw_7260) := firmware
|
||||
|
||||
#
|
||||
# Firmware images for iwlwifi Wireless 7265
|
||||
#
|
||||
URL(fw_7265) := https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-7265-ucode-16.242414.0.tgz
|
||||
SHA(fw_7265) := 2d599b091fa81b66a3e2cb1e607e060a8e82d178d26f3077146ce5483d798d65
|
||||
DIR(fw_7265) := firmware
|
||||
|
||||
#
|
||||
# Firmware images for iwlwifi Wireless 8260
|
||||
#
|
||||
URL(fw_8260) := https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-8000-ucode-16.242414.0.tgz
|
||||
SHA(fw_8260) := 802d7406354016b98d1b485f0446b5a16c4ac795278315a55a7b901b223cb871
|
||||
DIR(fw_8260) := firmware
|
||||
|
||||
#
|
||||
# Firmware images for iwlwifi Wireless-N 1000
|
||||
#
|
||||
URL(fw_1000) := https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-1000-ucode-39.31.5.1.tgz
|
||||
SHA(fw_1000) := ed0f1fbc2571c8da9a0cd9410fa8883494a9e1ac469d5000bc2c9dceaf83c970
|
||||
DIR(fw_1000) := firmware
|
||||
|
||||
https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-1000-ucode-39.31.5.1.tgz
|
||||
FW_REV := 8903435737fd897185eaf64229d870412b558a0e
|
||||
URL(fw) := https://github.com/cnuke/dde_linux_firmware/archive/$(FW_REV).tar.gz
|
||||
SHA(fw) := 3adea3ebaeb58e27b5002b883423fc8e9224d60c2045c43df5b3c0fdc1adf2f5
|
||||
DIR(fw) := firmware
|
||||
|
||||
#
|
||||
# Patches
|
||||
#
|
||||
PATCHES := $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/w*.patch)))
|
||||
PATCHES := $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/wpa*.patch)))
|
||||
PATCHES += $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/libnl*.patch)))
|
||||
PATCHES += $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/wifi*.patch)))
|
||||
PATCHES += $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/lxip*.patch)))
|
||||
PATCHES += $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/intel*.patch)))
|
||||
PATCHES += $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/usb*.patch)))
|
||||
@ -177,7 +128,6 @@ PATCH_OPT(patches/lxip_skbuff_cast.patch) := $(LXIP_OPT)
|
||||
# WIFI
|
||||
WIFI_OPT = -p1 -d$(SRC_DIR_WIFI)
|
||||
PATCH_OPT(patches/wifi.patch) := $(WIFI_OPT)
|
||||
PATCH_OPT(patches/wifi_crypto.patch) := $(WIFI_OPT)
|
||||
PATCH_OPT(patches/wifi_mem.patch) := $(WIFI_OPT)
|
||||
|
||||
# libnl
|
||||
|
12
repos/dde_linux/recipes/pkg/wifi/runtime
Executable file → Normal file
12
repos/dde_linux/recipes/pkg/wifi/runtime
Executable file → Normal file
@ -27,13 +27,15 @@
|
||||
<rom label="wpa_supplicant.lib.so"/>
|
||||
<rom label="vfs.lib.so"/>
|
||||
<rom label="iwlwifi-1000-5.ucode"/>
|
||||
<rom label="iwlwifi-3160-16.ucode"/>
|
||||
<rom label="iwlwifi-3160-17.ucode"/>
|
||||
<rom label="iwlwifi-3168-29.ucode"/>
|
||||
<rom label="iwlwifi-6000-4.ucode"/>
|
||||
<rom label="iwlwifi-6000g2a-6.ucode"/>
|
||||
<rom label="iwlwifi-6000g2b-6.ucode"/>
|
||||
<rom label="iwlwifi-7260-16.ucode"/>
|
||||
<rom label="iwlwifi-7265-16.ucode"/>
|
||||
<rom label="iwlwifi-7265D-16.ucode"/>
|
||||
<rom label="iwlwifi-8000C-16.ucode"/>
|
||||
<rom label="iwlwifi-7260-17.ucode"/>
|
||||
<rom label="iwlwifi-7265-17.ucode"/>
|
||||
<rom label="iwlwifi-7265D-29.ucode"/>
|
||||
<rom label="iwlwifi-8000C-36.ucode"/>
|
||||
<rom label="iwlwifi-8265-36.ucode"/>
|
||||
</content>
|
||||
</runtime>
|
||||
|
@ -1,14 +1,15 @@
|
||||
PORT_DIR := $(call port_dir,$(REP_DIR)/ports/dde_linux)
|
||||
|
||||
content: ucode_files LICENSE.iwlwifi
|
||||
content: ucode_files LICENSE.wifi_drv
|
||||
|
||||
|
||||
.PHONY: ucode_files
|
||||
ucode_files:
|
||||
cp $(PORT_DIR)/firmware/*.ucode .
|
||||
cp $(PORT_DIR)/firmware/regulatory.db .
|
||||
|
||||
LICENSE.iwlwifi:
|
||||
for i in $(PORT_DIR)/firmware/LICENSE.*; do \
|
||||
LICENSE.wifi_drv:
|
||||
for i in $(PORT_DIR)/firmware/LICEN*E.*; do \
|
||||
echo "$${i##*/}:" >> $@; \
|
||||
cat $$i >> $@; \
|
||||
echo >> $@; \
|
||||
|
@ -86,15 +86,14 @@ append config {
|
||||
<resource name="RAM" quantum="32M"/>
|
||||
<provides> <service name="Nic"/> </provides>
|
||||
<config ld_verbose="yes" verbose="yes" connected_scan_interval="30">
|
||||
<libc stdout="/dev/log" stderr="/dev/log" rtc="/dev/rtc">
|
||||
<vfs>
|
||||
<dir name="dev"> <log/> <rtc/>
|
||||
<jitterentropy name="random"/>
|
||||
<jitterentropy name="urandom"/>
|
||||
</dir>
|
||||
<dir name="config"> <ram/> </dir>
|
||||
</vfs>
|
||||
</libc>
|
||||
<libc stdout="/dev/log" stderr="/dev/log" rtc="/dev/rtc"/>
|
||||
<vfs>
|
||||
<dir name="dev"> <log/> <rtc/>
|
||||
<jitterentropy name="random"/>
|
||||
<jitterentropy name="urandom"/>
|
||||
</dir>
|
||||
<dir name="config"> <ram/> </dir>
|
||||
</vfs>
|
||||
</config>
|
||||
<route>
|
||||
<service name="Rtc"> <any-child/> </service>
|
||||
@ -123,10 +122,12 @@ set firmware_modules {
|
||||
iwlwifi-6000-4.ucode
|
||||
iwlwifi-6000g2a-6.ucode
|
||||
iwlwifi-6000g2b-6.ucode
|
||||
iwlwifi-7260-16.ucode
|
||||
iwlwifi-7265-16.ucode
|
||||
iwlwifi-7265D-16.ucode
|
||||
iwlwifi-8000C-16.ucode
|
||||
iwlwifi-7260-17.ucode
|
||||
iwlwifi-7265-17.ucode
|
||||
iwlwifi-7265D-29.ucode
|
||||
iwlwifi-8000C-36.ucode
|
||||
iwlwifi-8265-36.ucode
|
||||
regulatory.db
|
||||
}
|
||||
|
||||
#
|
||||
|
@ -2,7 +2,8 @@ REQUIRES = x86
|
||||
|
||||
TARGET = wifi_drv
|
||||
SRC_CC = main.cc
|
||||
LIBS = base wifi iwl_firmware wpa_supplicant
|
||||
LIBS = base wifi iwl_firmware
|
||||
LIBS += wpa_supplicant
|
||||
|
||||
# needed for firmware.h
|
||||
INC_DIR += $(REP_DIR)/src/lib/wifi/include
|
||||
|
@ -393,17 +393,20 @@ int setsockopt(int sockfd, int level, int optname, const void *optval,
|
||||
if (!s)
|
||||
return -1;
|
||||
|
||||
/* FIXME optval values */
|
||||
int const err = socket_call.setsockopt(s,
|
||||
sockopt_level(level),
|
||||
sockopt_name(level, optname),
|
||||
optval, optlen);
|
||||
if (err < 0) {
|
||||
errno = -err;
|
||||
return 1;
|
||||
}
|
||||
try {
|
||||
/* FIXME optval values */
|
||||
int const err =
|
||||
socket_call.setsockopt(s,
|
||||
sockopt_level(level),
|
||||
sockopt_name(level, optname),
|
||||
optval, optlen);
|
||||
if (err < 0) {
|
||||
errno = -err;
|
||||
return 1;
|
||||
}
|
||||
} catch (Invalid_arg) { return -1; }
|
||||
|
||||
return err;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -78,6 +78,7 @@ DUMMY_RET(1, ns_capable)
|
||||
DUMMY_RET(0, sock_tx_timestamp)
|
||||
|
||||
/* not needed */
|
||||
DUMMY_SKIP(0, module_put_and_exit)
|
||||
DUMMY_SKIP(-1, might_sleep)
|
||||
DUMMY_SKIP(-1, read_lock_bh)
|
||||
DUMMY_SKIP(-1, read_unlock_bh)
|
||||
@ -173,7 +174,6 @@ DUMMY(-1, raw_notifier_chain_unregister)
|
||||
DUMMY(-1, vlan_do_receive)
|
||||
DUMMY(-1, vlan_untag)
|
||||
DUMMY(-1, yield)
|
||||
DUMMY(0, IS_ERR)
|
||||
DUMMY(0, __raise_softirq_irqoff)
|
||||
DUMMY(0, __this_cpu_read)
|
||||
DUMMY(-1, add_device_randomness)
|
||||
@ -201,13 +201,10 @@ DUMMY(0, genlmsg_multicast_netns)
|
||||
DUMMY(0, genlmsg_reply)
|
||||
DUMMY(0, genlmsg_unicast)
|
||||
DUMMY(0, get_cpu)
|
||||
DUMMY(0, get_random_bytes)
|
||||
DUMMY(0, get_seconds)
|
||||
DUMMY(0, hweight16)
|
||||
DUMMY(0, hweight64)
|
||||
DUMMY(0, idr_alloc)
|
||||
DUMMY(0, idr_destroy)
|
||||
DUMMY(0, idr_find)
|
||||
DUMMY(0, idr_for_each)
|
||||
DUMMY(0, idr_init)
|
||||
DUMMY(0, idr_remove)
|
||||
@ -313,7 +310,7 @@ DUMMY(0, atomic_notifier_chain_register)
|
||||
DUMMY(0, __get_free_pages)
|
||||
DUMMY(0, __get_free_page)
|
||||
DUMMY(0, __set_current_state)
|
||||
DUMMY(0, add_wait_queue)
|
||||
// DUMMY(0, add_wait_queue)
|
||||
DUMMY(0, add_wait_queue_exclusive)
|
||||
DUMMY(0, atomic_notifier_call_chain)
|
||||
DUMMY(0, cond_resched)
|
||||
@ -342,7 +339,6 @@ DUMMY(-1, __this_cpu_write)
|
||||
DUMMY(-1, csum_block_add_ext)
|
||||
DUMMY(-1, csum_partial_ext)
|
||||
DUMMY(-1, genl_register_family_with_ops_groups)
|
||||
DUMMY(-1, ktime_sub)
|
||||
DUMMY(-1, sg_init_one)
|
||||
DUMMY(-1, vlan_hw_offload_capable)
|
||||
DUMMY(-1, vlan_tx_tag_get_id)
|
||||
@ -427,7 +423,6 @@ DUMMY(0, csum_sub)
|
||||
DUMMY(0, csum_tcpudp_nofold)
|
||||
DUMMY(0, devm_clk_get)
|
||||
DUMMY(0, devm_gpiod_get_index)
|
||||
DUMMY(0, devm_kzalloc)
|
||||
DUMMY(0, file_inode)
|
||||
DUMMY(0, gpiod_direction_output)
|
||||
DUMMY(0, gpiod_set_value)
|
||||
@ -443,8 +438,6 @@ DUMMY(0, input_unregister_handler)
|
||||
DUMMY(0, ip_hdrlen)
|
||||
DUMMY(0, ipv6_authlen)
|
||||
DUMMY(0, ipv6_optlen)
|
||||
DUMMY(0, ktime_to_timespec)
|
||||
DUMMY(0, ktime_to_timeval)
|
||||
DUMMY(0, misc_deregister)
|
||||
DUMMY(0, net_gso_ok)
|
||||
DUMMY(0, nosteal_pipe_buf_ops)
|
||||
@ -496,7 +489,6 @@ DUMMY(0, ethtool_cmd_speed)
|
||||
DUMMY(0, flush_dcache_page)
|
||||
DUMMY(0, getnstimeofday)
|
||||
DUMMY(0, ip_check_defrag)
|
||||
DUMMY(0, ktime_to_timespec_cond)
|
||||
DUMMY(0, netdev_get_tx_queue)
|
||||
DUMMY(0, offset_in_page)
|
||||
DUMMY(0, prandom_u32_max)
|
||||
@ -541,8 +533,7 @@ DUMMY(0, release_pages)
|
||||
DUMMY(0, sk_busy_loop)
|
||||
DUMMY(0, sk_can_busy_loop)
|
||||
|
||||
DUMMY_SKIP(0, complete_all)
|
||||
DUMMY_SKIP(0, module_put_and_exit)
|
||||
// DUMMY_SKIP(0, complete_all)
|
||||
DUMMY_SKIP(0, simple_strtol)
|
||||
DUMMY_SKIP(0, alg_test)
|
||||
|
||||
@ -559,13 +550,13 @@ DUMMY(0, config_enabled)
|
||||
DUMMY(0, dev_change_proto_down)
|
||||
DUMMY(0, dev_get_iflink)
|
||||
DUMMY(0, dev_get_phys_port_name)
|
||||
DUMMY(0, device_create_with_groups)
|
||||
DUMMY(-1, device_create_with_groups)
|
||||
DUMMY(0, device_enable_async_suspend)
|
||||
DUMMY(0, fatal_signal_pending)
|
||||
DUMMY_RET(1, file_ns_capable)
|
||||
DUMMY(0, flow_keys_dissector)
|
||||
DUMMY(0, get_net_ns_by_id)
|
||||
DUMMY(0, gfpflags_allow_blocking)
|
||||
DUMMY_SKIP(0, gfpflags_allow_blocking)
|
||||
DUMMY(0, init_dummy_netdev)
|
||||
DUMMY(0, napi_gro_flush)
|
||||
DUMMY(0, netdev_start_xmit)
|
||||
|
515
repos/dde_linux/src/lib/wifi/dummies_new.c
Normal file
515
repos/dde_linux/src/lib/wifi/dummies_new.c
Normal file
@ -0,0 +1,515 @@
|
||||
/*
|
||||
* \brief Dummy functions
|
||||
* \author Josef Soentgen
|
||||
* \date 2018-04-26
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2018 Genode Labs GmbH
|
||||
*
|
||||
* This file is distributed under the terms of the GNU General Public License
|
||||
* version 2.
|
||||
*/
|
||||
|
||||
/* local includes */
|
||||
#include <lx_emul.h>
|
||||
|
||||
#if 1
|
||||
#define TRACE \
|
||||
do { \
|
||||
lx_printf("%s not implemented from: %p\n", __func__, \
|
||||
__builtin_return_address(0)); \
|
||||
} while (0)
|
||||
#define TRACE_OK \
|
||||
do { \
|
||||
lx_printf("%s not implemented but OK\n", __func__); \
|
||||
} while (0)
|
||||
#else
|
||||
#define TRACE do { ; } while (0)
|
||||
#define TRACE_OK do { ; } while (0)
|
||||
#endif
|
||||
|
||||
|
||||
void __dev_xdp_query(struct net_device *dev, bpf_op_t xdp_op, struct netdev_bpf *xdp)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
int __ethtool_get_link_ksettings(struct net_device *dev,
|
||||
struct ethtool_link_ksettings *link_ksettings)
|
||||
{
|
||||
TRACE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
u32 __skb_get_hash_symmetric(const struct sk_buff *skb)
|
||||
{
|
||||
TRACE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// typedef int (*bpf_op_t)(struct net_device *dev, struct netdev_bpf *bpf);
|
||||
// struct bpf_prog *bpf_prog_get_type(u32 ufd, enum bpf_prog_type type)
|
||||
// {
|
||||
// TRACE;
|
||||
// return NULL;
|
||||
// }
|
||||
|
||||
|
||||
struct sk_buff **call_gro_receive(gro_receive_t cb, struct sk_buff **head, struct sk_buff *skb)
|
||||
{
|
||||
TRACE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
struct user_struct *current_user()
|
||||
{
|
||||
TRACE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
int dev_change_tx_queue_len(struct net_device *dev, unsigned long d)
|
||||
{
|
||||
TRACE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int dev_change_xdp_fd(struct net_device *dev, struct netlink_ext_ack *extack,
|
||||
int fd, u32 flags)
|
||||
{
|
||||
TRACE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int dev_get_alias(const struct net_device *dev, char *p, size_t n)
|
||||
{
|
||||
TRACE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int dev_recursion_level(void)
|
||||
{
|
||||
TRACE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
bool dev_validate_header(const struct net_device *dev, char *ll_header, int len)
|
||||
{
|
||||
TRACE;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void free_uid(struct user_struct *user)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
void iov_iter_revert(struct iov_iter *i, size_t bytes)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
kuid_t make_kuid(struct user_namespace *from, uid_t uid)
|
||||
{
|
||||
TRACE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void memalloc_noreclaim_restore(unsigned int flags)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
unsigned int memalloc_noreclaim_save(void)
|
||||
{
|
||||
TRACE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
u64 ktime_get_ns(void)
|
||||
{
|
||||
TRACE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct fq_flow *fq_flow_classify(struct fq *fq, struct fq_tin *tin,
|
||||
struct sk_buff *skb,
|
||||
fq_flow_get_default_t get_default_func)
|
||||
{
|
||||
TRACE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void fq_flow_init(struct fq_flow *flow)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
int fq_init(struct fq *fq, int flows_cnt)
|
||||
{
|
||||
TRACE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
void fq_recalc_backlog(struct fq *fq, struct fq_tin *tin, struct fq_flow *flow)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
void fq_reset(struct fq *fq, fq_skb_free_t free_func)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
void fq_tin_enqueue(struct fq *fq, struct fq_tin *tin, struct sk_buff *skb,
|
||||
fq_skb_free_t free_func, fq_flow_get_default_t get_default_func)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
void fq_tin_filter(struct fq *fq, struct fq_tin *tin, fq_skb_filter_t filter_func,
|
||||
void *filter_data, fq_skb_free_t free_func)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
void fq_tin_init(struct fq_tin *tin)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
void fq_tin_reset(struct fq *fq, struct fq_tin *tin, fq_skb_free_t free_func)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m)
|
||||
{
|
||||
TRACE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
struct net_device *netdev_master_upper_dev_get_rcu(struct net_device *dev)
|
||||
{
|
||||
TRACE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
void netdev_rss_key_fill(void *buffer, size_t len)
|
||||
{
|
||||
TRACE;
|
||||
/* XXX get_random_once() to fill cmd.secret_key */
|
||||
}
|
||||
|
||||
|
||||
const void *of_get_mac_address(struct device_node *np)
|
||||
{
|
||||
TRACE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
struct device_node * pci_device_to_OF_node(const struct pci_dev *pdev)
|
||||
{
|
||||
TRACE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries,
|
||||
int minvec, int maxvec)
|
||||
{
|
||||
TRACE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int pci_find_ext_capability(struct pci_dev *dev, int cap)
|
||||
{
|
||||
TRACE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
|
||||
{
|
||||
// TRACE_OK;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int pci_set_dma_mask(struct pci_dev *dev, u64 mask)
|
||||
{
|
||||
// TRACE_OK;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
struct pci_dev *pcie_find_root_port(struct pci_dev *dev)
|
||||
{
|
||||
TRACE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
int pcim_enable_device(struct pci_dev *pdev)
|
||||
{
|
||||
TRACE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
bool pm_runtime_active(struct device *dev)
|
||||
{
|
||||
TRACE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void pm_runtime_allow(struct device *dev)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
void pm_runtime_forbid(struct device *dev)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
int pm_runtime_get(struct device *dev)
|
||||
{
|
||||
TRACE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void pm_runtime_mark_last_busy(struct device *dev)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
int pm_runtime_put_autosuspend(struct device *dev)
|
||||
{
|
||||
TRACE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int pm_runtime_resume(struct device *dev)
|
||||
{
|
||||
TRACE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int pm_runtime_set_active(struct device *dev)
|
||||
{
|
||||
TRACE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void pm_runtime_set_autosuspend_delay(struct device *dev, int delay)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
bool pm_runtime_suspended(struct device *dev)
|
||||
{
|
||||
// TRACE_OK;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void pm_runtime_use_autosuspend(struct device *dev)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
void pm_wakeup_event(struct device *dev, unsigned int msec)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
void reuseport_detach_sock(struct sock *sk)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
int sg_nents(struct scatterlist *sg)
|
||||
{
|
||||
TRACE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
size_t sg_pcopy_from_buffer(struct scatterlist *sgl, unsigned int nents,
|
||||
const void *buf, size_t buflen, off_t skip)
|
||||
{
|
||||
TRACE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int sk_reuseport_attach_bpf(u32 ufd, struct sock *sk)
|
||||
{
|
||||
TRACE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int sk_reuseport_attach_filter(struct sock_fprog *fprog, struct sock *sk)
|
||||
{
|
||||
TRACE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
void skb_gro_flush_final(struct sk_buff *skb, struct sk_buff **pp, int flush)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
void *skb_gro_header_fast(struct sk_buff *skb, unsigned int offset)
|
||||
{
|
||||
TRACE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
int skb_gro_header_hard(struct sk_buff *skb, unsigned int hlen)
|
||||
{
|
||||
TRACE;
|
||||
return 0; // XXX
|
||||
}
|
||||
|
||||
|
||||
void *skb_gro_header_slow(struct sk_buff *skb, unsigned int hlen, unsigned int offset)
|
||||
{
|
||||
TRACE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
void skb_gro_postpull_rcsum(struct sk_buff *skb, const void *start, unsigned int len)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
void skb_gro_pull(struct sk_buff *skb, unsigned int len)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
u64 sock_gen_cookie(struct sock *sk)
|
||||
{
|
||||
TRACE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
unsigned int u64_stats_fetch_begin(const struct u64_stats_sync *syncp)
|
||||
{
|
||||
// TRACE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
unsigned int u64_stats_fetch_begin_irq(const struct u64_stats_sync *syncp)
|
||||
{
|
||||
// TRACE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
bool u64_stats_fetch_retry(const struct u64_stats_sync *syncp, unsigned int start)
|
||||
{
|
||||
// TRACE;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool u64_stats_fetch_retry_irq(const struct u64_stats_sync *syncp, unsigned int start)
|
||||
{
|
||||
// TRACE;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void u64_stats_init(struct u64_stats_sync *syncp)
|
||||
{
|
||||
// TRACE;
|
||||
}
|
||||
|
||||
|
||||
struct sk_buff *validate_xmit_skb_list(struct sk_buff *skb, struct net_device *dev,
|
||||
bool *again)
|
||||
{
|
||||
TRACE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int virtio_net_hdr_from_skb(const struct sk_buff *skb, struct virtio_net_hdr *hdr,
|
||||
bool little_endian, bool has_data_valid)
|
||||
{
|
||||
TRACE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int virtio_net_hdr_to_skb(struct sk_buff *skb, const struct virtio_net_hdr *hdr,
|
||||
bool little_endian)
|
||||
{
|
||||
TRACE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
void wireless_nlevent_flush(void)
|
||||
{
|
||||
TRACE;
|
||||
}
|
||||
|
||||
|
||||
bool wq_has_sleeper(struct wait_queue_head *wq_head)
|
||||
{
|
||||
TRACE;
|
||||
return true;
|
||||
}
|
107
repos/dde_linux/src/lib/wifi/firmware.cc
Normal file
107
repos/dde_linux/src/lib/wifi/firmware.cc
Normal file
@ -0,0 +1,107 @@
|
||||
/*
|
||||
* \brief Linux wireless stack
|
||||
* \author Josef Soentgen
|
||||
* \date 2018-06-29
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2018 Genode Labs GmbH
|
||||
*
|
||||
* This file is distributed under the terms of the GNU General Public License
|
||||
* version 2.
|
||||
*/
|
||||
|
||||
/* Genode includes */
|
||||
#include <base/log.h>
|
||||
|
||||
/* local includes */
|
||||
#include <lx_kit/env.h>
|
||||
#include <firmware_list.h>
|
||||
#include <lx_emul.h>
|
||||
|
||||
|
||||
Firmware_list fw_list[] = {
|
||||
{ "regulatory.db", 4144, nullptr },
|
||||
|
||||
{ "iwlwifi-1000-5.ucode", 337520, nullptr },
|
||||
{ "iwlwifi-3160-17.ucode", 918268, nullptr },
|
||||
{ "iwlwifi-6000-4.ucode", 454608, nullptr },
|
||||
{ "iwlwifi-6000-6.ucode", 454608, "iwlwifi-6000-4.ucode" },
|
||||
{ "iwlwifi-6000g2a-6.ucode", 677296, nullptr },
|
||||
{ "iwlwifi-6000g2b-6.ucode", 679436, nullptr },
|
||||
{ "iwlwifi-7260-17.ucode", 1049340, nullptr },
|
||||
{ "iwlwifi-7265-16.ucode", 1180412, nullptr },
|
||||
{ "iwlwifi-7265D-22.ucode", 1028376, nullptr },
|
||||
{ "iwlwifi-7265D-29.ucode", 1036432, nullptr },
|
||||
{ "iwlwifi-8000C-22.ucode", 2120860, nullptr },
|
||||
{ "iwlwifi-8000C-36.ucode", 2486572, nullptr },
|
||||
{ "iwlwifi-8265-22.ucode", 1811984, nullptr },
|
||||
{ "iwlwifi-8265-36.ucode", 2498044, nullptr }
|
||||
};
|
||||
|
||||
|
||||
size_t fw_list_len = sizeof(fw_list) / sizeof(fw_list[0]);
|
||||
|
||||
|
||||
/**********************
|
||||
** linux/firmware.h **
|
||||
**********************/
|
||||
|
||||
int request_firmware_nowait(struct module *module, bool uevent,
|
||||
const char *name, struct device *device,
|
||||
gfp_t gfp, void *context,
|
||||
void (*cont)(const struct firmware *, void *))
|
||||
{
|
||||
/* only try to load known firmware images */
|
||||
Firmware_list *fwl = 0;
|
||||
for (size_t i = 0; i < fw_list_len; i++) {
|
||||
if (Genode::strcmp(name, fw_list[i].requested_name) == 0) {
|
||||
fwl = &fw_list[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!fwl) {
|
||||
Genode::error("firmware '", name, "' is not in the firmware white list");
|
||||
return -1;
|
||||
}
|
||||
|
||||
char const *fw_name = fwl->available_name
|
||||
? fwl->available_name : fwl->requested_name;
|
||||
Genode::Rom_connection rom(Lx_kit::env().env(), fw_name);
|
||||
Genode::Dataspace_capability ds_cap = rom.dataspace();
|
||||
|
||||
if (!ds_cap.valid()) {
|
||||
Genode::error("could not get firmware ROM dataspace");
|
||||
return -1;
|
||||
}
|
||||
|
||||
struct firmware *fw = (struct firmware *)kzalloc(sizeof(struct firmware), 0);
|
||||
if (!fw) {
|
||||
Genode::error("could not allocate memory for firmware metadata");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* use allocator because fw is too big for slab */
|
||||
if (!Lx_kit::env().heap().alloc(fwl->size, (void**)&fw->data)) {
|
||||
Genode::error("Could not allocate memory for firmware image");
|
||||
kfree(fw);
|
||||
return -1;
|
||||
}
|
||||
|
||||
void const *image = Lx_kit::env().env().rm().attach(ds_cap);
|
||||
Genode::memcpy((void*)fw->data, image, fwl->size);
|
||||
Lx_kit::env().env().rm().detach(image);
|
||||
|
||||
fw->size = fwl->size;
|
||||
|
||||
cont(fw, context);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void release_firmware(const struct firmware *fw)
|
||||
{
|
||||
Lx_kit::env().heap().free(const_cast<u8 *>(fw->data), fw->size);
|
||||
kfree(fw);
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -34,15 +34,15 @@ extern "C" void core_sock_init(void);
|
||||
extern "C" void module_packet_init(void);
|
||||
extern "C" void subsys_genl_init(void);
|
||||
extern "C" void subsys_rfkill_init(void);
|
||||
extern "C" void subsys_cfg80211_init(void);
|
||||
extern "C" void fs_cfg80211_init(void);
|
||||
extern "C" void subsys_ieee80211_init(void);
|
||||
extern "C" void module_iwl_drv_init(void);
|
||||
extern "C" int module_iwl_drv_init(void);
|
||||
extern "C" void subsys_cryptomgr_init(void);
|
||||
extern "C" void module_crypto_ccm_module_init(void);
|
||||
extern "C" void module_crypto_ctr_module_init(void);
|
||||
extern "C" void module_aes_init(void);
|
||||
extern "C" void module_arc4_init(void);
|
||||
extern "C" void module_chainiv_module_init(void);
|
||||
// extern "C" void module_chainiv_module_init(void);
|
||||
extern "C" void module_krng_mod_init(void);
|
||||
|
||||
extern "C" unsigned int *module_param_11n_disable;
|
||||
@ -56,55 +56,10 @@ struct net init_net;
|
||||
LIST_HEAD(net_namespace_list);
|
||||
|
||||
|
||||
Firmware_list fw_list[] = {
|
||||
{ "iwlwifi-1000-3.ucode", 335056, nullptr },
|
||||
{ "iwlwifi-1000-5.ucode", 337520, nullptr },
|
||||
{ "iwlwifi-105-6.ucode", 689680, nullptr },
|
||||
{ "iwlwifi-135-6.ucode", 701228, nullptr },
|
||||
{ "iwlwifi-2000-6.ucode", 695876, nullptr },
|
||||
{ "iwlwifi-2030-6.ucode", 707392, nullptr },
|
||||
{ "iwlwifi-3160-7.ucode", 670484, nullptr },
|
||||
{ "iwlwifi-3160-8.ucode", 667284, nullptr },
|
||||
{ "iwlwifi-3160-9.ucode", 666792, nullptr },
|
||||
{ "iwlwifi-3945-2.ucode", 150100, nullptr },
|
||||
{ "iwlwifi-4965-2.ucode", 187972, nullptr },
|
||||
{ "iwlwifi-5000-1.ucode", 345008, nullptr },
|
||||
{ "iwlwifi-5000-2.ucode", 353240, nullptr },
|
||||
{ "iwlwifi-5000-5.ucode", 340696, nullptr },
|
||||
{ "iwlwifi-5150-2.ucode", 337400, nullptr },
|
||||
{ "iwlwifi-6000-4.ucode", 454608, nullptr },
|
||||
/**
|
||||
* Actually, there is no -6 firmware. The last one is revision 4,
|
||||
* but certain devices support up to revision 6 and want to use
|
||||
* this one. To make things simple we refer to the available
|
||||
* firmware under the requested name.
|
||||
*/
|
||||
{ "iwlwifi-6000-6.ucode", 454608, "iwlwifi-6000-4.ucode" },
|
||||
{ "iwlwifi-6000g2a-5.ucode", 444128, nullptr },
|
||||
{ "iwlwifi-6000g2a-6.ucode", 677296, nullptr },
|
||||
{ "iwlwifi-6000g2b-5.ucode", 460236, nullptr },
|
||||
{ "iwlwifi-6000g2b-6.ucode", 679436, nullptr },
|
||||
{ "iwlwifi-6050-4.ucode", 463692, nullptr },
|
||||
{ "iwlwifi-6050-5.ucode", 469780, nullptr },
|
||||
{ "iwlwifi-7260-16.ucode", 1049284, nullptr },
|
||||
{ "iwlwifi-7260-17.ucode", 1049284, "iwlwifi-7260-16.ucode" },
|
||||
{ "iwlwifi-7265-16.ucode", 1180356, nullptr },
|
||||
{ "iwlwifi-7265D-16.ucode", 1384500, nullptr },
|
||||
{ "iwlwifi-7265D-19.ucode", 1384500, "iwlwifi-7265D-16.ucode" },
|
||||
{ "iwlwifi-8000C-16.ucode", 2351636, nullptr },
|
||||
{ "iwlwifi-8000C-19.ucode", 2351636, "iwlwifi-8000C-16.ucode" },
|
||||
{ "iwlwifi-3160-16.ucode", 918212, nullptr },
|
||||
{ "iwlwifi-3160-17.ucode", 918212, "iwlwifi-3160-16.ucode" }
|
||||
};
|
||||
|
||||
|
||||
size_t fw_list_len = sizeof(fw_list) / sizeof(fw_list[0]);
|
||||
|
||||
|
||||
static Genode::Lock *_wpa_lock;
|
||||
|
||||
|
||||
static void run_linux(void *)
|
||||
static void run_linux(void *args)
|
||||
{
|
||||
system_power_efficient_wq = alloc_workqueue("system_power_efficient_wq", 0, 0);
|
||||
system_wq = alloc_workqueue("system_wq", 0, 0);
|
||||
@ -114,7 +69,7 @@ static void run_linux(void *)
|
||||
module_packet_init();
|
||||
subsys_genl_init();
|
||||
subsys_rfkill_init();
|
||||
subsys_cfg80211_init();
|
||||
fs_cfg80211_init();
|
||||
subsys_ieee80211_init();
|
||||
|
||||
subsys_cryptomgr_init();
|
||||
@ -122,9 +77,17 @@ static void run_linux(void *)
|
||||
module_crypto_ctr_module_init();
|
||||
module_aes_init();
|
||||
module_arc4_init();
|
||||
module_chainiv_module_init();
|
||||
// module_chainiv_module_init();
|
||||
|
||||
module_iwl_drv_init();
|
||||
try {
|
||||
int const err = module_iwl_drv_init();
|
||||
if (err) { throw -1; }
|
||||
} catch (...) {
|
||||
Genode::Env &env = *(Genode::Env*)args;
|
||||
|
||||
env.parent().exit(1);
|
||||
Genode::sleep_forever();
|
||||
}
|
||||
|
||||
_wpa_lock->unlock();
|
||||
|
||||
@ -166,7 +129,7 @@ void wifi_init(Genode::Env &env, Genode::Lock &lock, bool disable_11n)
|
||||
}
|
||||
|
||||
/* Linux task (handles the initialization only currently) */
|
||||
static Lx::Task linux(run_linux, nullptr, "linux",
|
||||
static Lx::Task linux(run_linux, &env, "linux",
|
||||
Lx::Task::PRIORITY_0, Lx::scheduler());
|
||||
|
||||
/* give all task a first kick before returning */
|
||||
|
@ -80,22 +80,6 @@ unsigned char *lxc_skb_put(struct sk_buff *skb, size_t len)
|
||||
}
|
||||
|
||||
|
||||
/****************************
|
||||
** asm-generic/getorder.h **
|
||||
****************************/
|
||||
|
||||
int get_order(unsigned long size)
|
||||
{
|
||||
int order;
|
||||
|
||||
size--;
|
||||
size >>= PAGE_SHIFT;
|
||||
|
||||
order = __builtin_ctzl(size);
|
||||
return order;
|
||||
}
|
||||
|
||||
|
||||
/****************************
|
||||
** asm-generic/atomic64.h **
|
||||
****************************/
|
||||
@ -111,6 +95,57 @@ long long atomic64_add_return(long long i, atomic64_t *p)
|
||||
}
|
||||
|
||||
|
||||
/**********************
|
||||
** linux/refcount.h **
|
||||
**********************/
|
||||
|
||||
void refcount_add(unsigned int i, refcount_t *r)
|
||||
{
|
||||
atomic_add(i, &r->refs);
|
||||
}
|
||||
|
||||
|
||||
void refcount_dec(refcount_t *r)
|
||||
{
|
||||
atomic_dec(&r->refs);
|
||||
}
|
||||
|
||||
|
||||
bool refcount_dec_and_test(refcount_t *r)
|
||||
{
|
||||
return atomic_dec_and_test(&r->refs);
|
||||
}
|
||||
|
||||
|
||||
void refcount_inc(refcount_t *r)
|
||||
{
|
||||
atomic_inc(&r->refs);
|
||||
}
|
||||
|
||||
|
||||
bool refcount_inc_not_zero(refcount_t *r)
|
||||
{
|
||||
return atomic_add_unless(&r->refs, 1, 0);
|
||||
}
|
||||
|
||||
|
||||
unsigned int refcount_read(const refcount_t *r)
|
||||
{
|
||||
return atomic_read(&r->refs);
|
||||
}
|
||||
|
||||
|
||||
void refcount_set(refcount_t *r, unsigned int n)
|
||||
{
|
||||
atomic_set(&r->refs, n);
|
||||
}
|
||||
|
||||
bool refcount_sub_and_test(unsigned int i, refcount_t *r)
|
||||
{
|
||||
return atomic_sub_and_test(i, &r->refs);
|
||||
}
|
||||
|
||||
|
||||
/**********************************
|
||||
** linux/bitops.h, asm/bitops.h **
|
||||
**********************************/
|
||||
@ -217,6 +252,12 @@ void netdev_run_todo() {
|
||||
}
|
||||
|
||||
|
||||
void netif_set_gso_max_size(struct net_device *dev, unsigned int size)
|
||||
{
|
||||
dev->gso_max_size = size;
|
||||
}
|
||||
|
||||
|
||||
/********************
|
||||
** linux/kernel.h **
|
||||
********************/
|
||||
@ -394,3 +435,47 @@ static void sock_init(void)
|
||||
|
||||
|
||||
core_initcall(sock_init);
|
||||
|
||||
|
||||
/*****************
|
||||
** net/codel.h **
|
||||
*****************/
|
||||
|
||||
codel_time_t codel_get_time(void)
|
||||
{
|
||||
u64 ns = ktime_get_ns();
|
||||
return ns >> CODEL_SHIFT;
|
||||
}
|
||||
|
||||
|
||||
/**********************
|
||||
** net/codel_impl.h **
|
||||
**********************/
|
||||
|
||||
void codel_params_init(struct codel_params *params)
|
||||
{
|
||||
params->interval = MS2TIME(100);
|
||||
params->target = MS2TIME(5);
|
||||
params->ce_threshold = CODEL_DISABLED_THRESHOLD;
|
||||
params->ecn = false;
|
||||
}
|
||||
|
||||
void codel_vars_init(struct codel_vars *vars)
|
||||
{
|
||||
memset(vars, 0, sizeof(*vars));
|
||||
}
|
||||
|
||||
void codel_stats_init(struct codel_stats *stats)
|
||||
{
|
||||
// stats->maxpacket = 0;
|
||||
}
|
||||
|
||||
|
||||
/*************************
|
||||
** linux/timekeeping.h **
|
||||
*************************/
|
||||
|
||||
u64 ktime_get_boot_ns(void)
|
||||
{
|
||||
return (u64)ktime_get();
|
||||
}
|
||||
|
@ -15,16 +15,17 @@
|
||||
#include <base/allocator_avl.h>
|
||||
#include <base/env.h>
|
||||
#include <base/log.h>
|
||||
#include <base/registry.h>
|
||||
#include <base/snprintf.h>
|
||||
#include <base/sleep.h>
|
||||
#include <dataspace/client.h>
|
||||
#include <timer_session/connection.h>
|
||||
#include <region_map/client.h>
|
||||
#include <rom_session/connection.h>
|
||||
#include <util/bit_allocator.h>
|
||||
#include <util/string.h>
|
||||
|
||||
/* local includes */
|
||||
#include <firmware_list.h>
|
||||
#include <lx.h>
|
||||
#include <lx_emul.h>
|
||||
|
||||
@ -300,6 +301,24 @@ size_t copy_from_iter(void *addr, size_t bytes, struct iov_iter *i)
|
||||
}
|
||||
|
||||
|
||||
bool copy_from_iter_full(void *addr, size_t bytes, struct iov_iter *i)
|
||||
{
|
||||
if (bytes > i->count)
|
||||
return false;
|
||||
|
||||
if (bytes == 0)
|
||||
return true;
|
||||
|
||||
size_t const copied = copy_from_iter(addr, bytes, i);
|
||||
if (copied != bytes) {
|
||||
Genode::error(__func__, ":", __LINE__, " could not copy all bytes");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
size_t copy_to_iter(void *addr, size_t bytes, struct iov_iter *i)
|
||||
{
|
||||
if (bytes > i->count)
|
||||
@ -375,6 +394,11 @@ extern "C" int memcpy_fromiovecend(unsigned char *kdata, const struct iovec *iov
|
||||
|
||||
#include <lx_emul/impl/slab.h>
|
||||
|
||||
void *kvmalloc(size_t size, gfp_t flags)
|
||||
{
|
||||
return kmalloc(size, flags);
|
||||
}
|
||||
|
||||
|
||||
void *kmalloc_array(size_t n, size_t size, gfp_t flags)
|
||||
{
|
||||
@ -389,6 +413,12 @@ void kvfree(const void *p)
|
||||
}
|
||||
|
||||
|
||||
void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp)
|
||||
{
|
||||
return kzalloc(size, gfp | GFP_LX_DMA);
|
||||
}
|
||||
|
||||
|
||||
/*********************
|
||||
** linux/vmalloc.h **
|
||||
*********************/
|
||||
@ -583,40 +613,15 @@ int strict_strtoul(const char *s, unsigned int base, unsigned long *res)
|
||||
** linux/delay.h **
|
||||
*******************/
|
||||
|
||||
static Timer::Connection &timer_for_msleep()
|
||||
{
|
||||
static Timer::Connection inst(Lx_kit::env().env());
|
||||
return inst;
|
||||
}
|
||||
|
||||
|
||||
void udelay(unsigned long usecs)
|
||||
{
|
||||
timer_for_msleep().usleep(usecs);
|
||||
|
||||
Lx::scheduler().current()->schedule();
|
||||
}
|
||||
#include <lx_emul/impl/delay.h>
|
||||
|
||||
|
||||
void usleep_range(unsigned long min, unsigned long max)
|
||||
{
|
||||
timer_for_msleep().usleep(min);
|
||||
|
||||
Lx::scheduler().current()->schedule();
|
||||
udelay(min);
|
||||
}
|
||||
|
||||
|
||||
void msleep(unsigned int msecs)
|
||||
{
|
||||
timer_for_msleep().msleep(msecs);
|
||||
|
||||
Lx::scheduler().current()->schedule();
|
||||
}
|
||||
|
||||
|
||||
void mdelay(unsigned long msecs) { msleep(msecs); }
|
||||
|
||||
|
||||
/*******************
|
||||
** linux/timer.h **
|
||||
*******************/
|
||||
@ -669,7 +674,49 @@ unsigned long round_jiffies_relative(unsigned long j)
|
||||
|
||||
ktime_t ktime_get_real(void)
|
||||
{
|
||||
return (ktime_t) { .tv64 = (s64)(jiffies * (1000 / HZ) * NSEC_PER_MSEC) };
|
||||
return (ktime_t) (s64)(jiffies * (1000 / HZ) * NSEC_PER_MSEC);
|
||||
}
|
||||
|
||||
|
||||
ktime_t ktime_sub(ktime_t const lhs, ktime_t const rhs)
|
||||
{
|
||||
return lhs - rhs;
|
||||
}
|
||||
|
||||
|
||||
struct timespec ktime_to_timespec(ktime_t const nsec)
|
||||
{
|
||||
struct timespec ts;
|
||||
if (!nsec) { return (struct timespec) {0, 0}; }
|
||||
|
||||
/* XXX check nsec < NSEC_PER_SEC */
|
||||
ts.tv_sec = nsec / NSEC_PER_SEC;
|
||||
ts.tv_nsec = (nsec % NSEC_PER_SEC) * (1000*1000);
|
||||
|
||||
return ts;
|
||||
}
|
||||
|
||||
|
||||
bool ktime_to_timespec_cond(ktime_t const kt, struct timespec *ts)
|
||||
{
|
||||
if (kt) {
|
||||
*ts = ktime_to_timespec(kt);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
struct timeval ns_to_timeval(ktime_t const nsec)
|
||||
{
|
||||
struct timespec ts = ktime_to_timespec(nsec);
|
||||
struct timeval tv;
|
||||
|
||||
tv.tv_sec = ts.tv_sec;
|
||||
tv.tv_usec = ts.tv_nsec / 1000;
|
||||
|
||||
return tv;
|
||||
}
|
||||
|
||||
|
||||
@ -705,90 +752,25 @@ struct workqueue_struct *alloc_workqueue(const char *fmt, unsigned int flags,
|
||||
}
|
||||
|
||||
|
||||
/**********************
|
||||
** linux/firmware.h **
|
||||
**********************/
|
||||
|
||||
extern Firmware_list fw_list[];
|
||||
extern size_t fw_list_len;
|
||||
|
||||
|
||||
int request_firmware_nowait(struct module *module, bool uevent,
|
||||
const char *name, struct device *device,
|
||||
gfp_t gfp, void *context,
|
||||
void (*cont)(const struct firmware *, void *))
|
||||
{
|
||||
/* only try to load known firmware images */
|
||||
Firmware_list *fwl = 0;
|
||||
for (size_t i = 0; i < fw_list_len; i++) {
|
||||
if (Genode::strcmp(name, fw_list[i].requested_name) == 0) {
|
||||
fwl = &fw_list[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!fwl) {
|
||||
Genode::error("firmware '", name, "' is not in the firmware white list");
|
||||
return -1;
|
||||
}
|
||||
|
||||
char const *fw_name = fwl->available_name
|
||||
? fwl->available_name : fwl->requested_name;
|
||||
Genode::Rom_connection rom(Lx_kit::env().env(), fw_name);
|
||||
Genode::Dataspace_capability ds_cap = rom.dataspace();
|
||||
|
||||
if (!ds_cap.valid()) {
|
||||
Genode::error("could not get firmware ROM dataspace");
|
||||
return -1;
|
||||
}
|
||||
|
||||
struct firmware *fw = (struct firmware *)kzalloc(sizeof(struct firmware), 0);
|
||||
if (!fw) {
|
||||
Genode::error("could not allocate memory for firmware metadata");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* use allocator because fw is too big for slab */
|
||||
if (!Lx_kit::env().heap().alloc(fwl->size, (void**)&fw->data)) {
|
||||
Genode::error("Could not allocate memory for firmware image");
|
||||
kfree(fw);
|
||||
return -1;
|
||||
}
|
||||
|
||||
void const *image = Lx_kit::env().env().rm().attach(ds_cap);
|
||||
Genode::memcpy((void*)fw->data, image, fwl->size);
|
||||
Lx_kit::env().env().rm().detach(image);
|
||||
|
||||
fw->size = fwl->size;
|
||||
|
||||
cont(fw, context);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void release_firmware(const struct firmware *fw)
|
||||
{
|
||||
Lx_kit::env().heap().free(const_cast<u8 *>(fw->data), fw->size);
|
||||
kfree(fw);
|
||||
}
|
||||
|
||||
|
||||
/*************************
|
||||
** linux/dma-mapping.h **
|
||||
*************************/
|
||||
|
||||
/* use a smaller limit then possible to cover potential overhead */
|
||||
enum { DMA_LARGE_ALLOC_SIZE = 60u << 10, };
|
||||
|
||||
void *dma_alloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t flag)
|
||||
{
|
||||
dma_addr_t dma_addr;
|
||||
void *addr = Lx::Malloc::dma().alloc(size, 12, &dma_addr);
|
||||
bool const large_alloc = size >= DMA_LARGE_ALLOC_SIZE;
|
||||
dma_addr_t dma_addr = 0;
|
||||
void *addr = large_alloc ? Lx::Malloc::dma().alloc_large(size)
|
||||
: Lx::Malloc::dma().alloc(size, 12, &dma_addr);
|
||||
|
||||
if (!addr) {
|
||||
return 0;
|
||||
if (addr) {
|
||||
*dma_handle = large_alloc ? Lx::Malloc::dma().phys_addr(addr)
|
||||
: dma_addr;
|
||||
}
|
||||
|
||||
*dma_handle = dma_addr;
|
||||
|
||||
return addr;
|
||||
}
|
||||
|
||||
@ -808,6 +790,11 @@ void *dma_zalloc_coherent(struct device *dev, size_t size,
|
||||
void dma_free_coherent(struct device *dev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle)
|
||||
{
|
||||
if (size >= DMA_LARGE_ALLOC_SIZE) {
|
||||
Lx::Malloc::dma().free_large(vaddr);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Lx::Malloc::dma().inside((Genode::addr_t)vaddr)) {
|
||||
Lx::Malloc::dma().free(vaddr);
|
||||
} else {
|
||||
@ -841,7 +828,8 @@ dma_addr_t dma_map_single(struct device *dev, void *cpu_addr, size_t size,
|
||||
|
||||
if (dma_addr == ~0UL) {
|
||||
Genode::error(__func__, ": virtual address ", cpu_addr,
|
||||
" not registered for DMA");
|
||||
" not registered for DMA ", __builtin_return_address(0));
|
||||
BUG();
|
||||
}
|
||||
|
||||
return dma_addr;
|
||||
@ -983,6 +971,18 @@ void *__alloc_page_frag(struct page_frag_cache *nc,
|
||||
}
|
||||
|
||||
|
||||
void *page_frag_alloc(struct page_frag_cache *nc, unsigned int fragsz, gfp_t gfp_mask)
|
||||
{
|
||||
return __alloc_page_frag(nc, fragsz, gfp_mask);
|
||||
}
|
||||
|
||||
|
||||
void page_frag_free(void *addr)
|
||||
{
|
||||
__free_page_frag(addr);
|
||||
}
|
||||
|
||||
|
||||
void __free_page_frag(void *addr)
|
||||
{
|
||||
struct page *page = virt_to_head_page(addr);
|
||||
@ -1150,12 +1150,55 @@ void *__alloc_percpu(size_t size, size_t align)
|
||||
}
|
||||
|
||||
|
||||
/**********************
|
||||
** net/ns/generic.h **
|
||||
**********************/
|
||||
|
||||
void *net_generic(const struct net *net, unsigned int id)
|
||||
{
|
||||
if (id >= MAX_NET_GENERIC_PTR) {
|
||||
Genode::error(__func__, ":", " id ", id, " invalid");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct net_generic *ng = net->gen;
|
||||
void *ptr = ng->ptr[id];
|
||||
if (!ptr) {
|
||||
Genode::error(__func__, ":", " cannot get ptr");
|
||||
BUG();
|
||||
}
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
||||
/*******************************
|
||||
** net/core/net/namespace.h **
|
||||
*******************************/
|
||||
|
||||
int register_pernet_subsys(struct pernet_operations *ops)
|
||||
{
|
||||
if (!init_net.gen) {
|
||||
init_net.gen = (struct net_generic*)kzalloc(
|
||||
offsetof(struct net_generic, ptr[MAX_NET_GENERIC_PTR]), 0);
|
||||
if (!init_net.gen) {
|
||||
Genode::error("could not allocate net_generic memory");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (ops->id && ops->size) {
|
||||
/* XXX AFAICS there is only netlink_tap_net_ops that requires it */
|
||||
unsigned int id = *ops->id;
|
||||
if (id >= MAX_NET_GENERIC_PTR) {
|
||||
Genode::error(__func__, ":", " id ", id, " invalid");
|
||||
return -1;
|
||||
}
|
||||
|
||||
void *data = kzalloc(ops->size, 0);
|
||||
init_net.gen->ptr[id] = data;
|
||||
}
|
||||
|
||||
if (ops->init)
|
||||
ops->init(&init_net);
|
||||
|
||||
@ -1232,114 +1275,7 @@ int request_module(char const* format, ...)
|
||||
** kernel/locking/mutex.c **
|
||||
****************************/
|
||||
|
||||
/*
|
||||
* XXX We have to create the waiters list lazy because the way
|
||||
* DEFINE_MUTEX is currently implemented does not work w/o
|
||||
* a global Env that was constructed before the static ctors
|
||||
* are called
|
||||
*/
|
||||
static inline void __check_or_initialize_mutex(struct mutex *m)
|
||||
{
|
||||
if (!m->waiters) {
|
||||
m->waiters = new (&Lx_kit::env().heap()) Lx::Task::List;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
enum { MUTEX_UNLOCKED = 1, MUTEX_LOCKED = 0, MUTEX_WAITERS = -1 };
|
||||
|
||||
|
||||
void mutex_init(struct mutex *m)
|
||||
{
|
||||
static unsigned id = 0;
|
||||
|
||||
m->state = MUTEX_UNLOCKED;
|
||||
m->holder = nullptr;
|
||||
m->waiters = nullptr;
|
||||
m->id = ++id;
|
||||
}
|
||||
|
||||
|
||||
void mutex_destroy(struct mutex *m)
|
||||
{
|
||||
/* FIXME potentially blocked tasks are not unblocked */
|
||||
|
||||
Genode::destroy(&Lx_kit::env().heap(),
|
||||
static_cast<Lx::Task::List *>(m->waiters));
|
||||
|
||||
m->holder = nullptr;
|
||||
m->waiters = nullptr;
|
||||
m->id = 0;
|
||||
}
|
||||
|
||||
|
||||
void mutex_lock(struct mutex *m)
|
||||
{
|
||||
__check_or_initialize_mutex(m);
|
||||
|
||||
while (1) {
|
||||
if (m->state == MUTEX_UNLOCKED) {
|
||||
m->state = MUTEX_LOCKED;
|
||||
m->holder = Lx::scheduler().current();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
Lx::Task *t = reinterpret_cast<Lx::Task *>(m->holder);
|
||||
|
||||
if (t == Lx::scheduler().current()) {
|
||||
Genode::error("BUG: mutex does not support recursive locking");
|
||||
Genode::sleep_forever();
|
||||
}
|
||||
|
||||
/* notice that a task waits for the mutex to be released */
|
||||
m->state = MUTEX_WAITERS;
|
||||
|
||||
/* block until the mutex is released (and retry then) */
|
||||
Lx::scheduler().current()->mutex_block(static_cast<Lx::Task::List *>(m->waiters));
|
||||
Lx::scheduler().current()->schedule();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void mutex_unlock(struct mutex *m)
|
||||
{
|
||||
__check_or_initialize_mutex(m);
|
||||
|
||||
if (m->state == MUTEX_UNLOCKED) {
|
||||
Genode::error("BUG: multiple mutex unlock detected");
|
||||
Genode::sleep_forever();
|
||||
}
|
||||
if (m->holder != Lx::scheduler().current()) {
|
||||
Genode::error("BUG: mutex unlock by task not holding the mutex");
|
||||
Genode::sleep_forever();
|
||||
}
|
||||
|
||||
Lx::Task::List *waiters = static_cast<Lx::Task::List *>(m->waiters);
|
||||
|
||||
if (m->state == MUTEX_WAITERS)
|
||||
while (Lx::Task::List_element *le = waiters->first())
|
||||
le->object()->mutex_unblock(waiters);
|
||||
|
||||
m->state = MUTEX_UNLOCKED;
|
||||
m->holder = nullptr;
|
||||
}
|
||||
|
||||
|
||||
int mutex_is_locked(struct mutex *m)
|
||||
{
|
||||
return m->state != MUTEX_UNLOCKED;
|
||||
}
|
||||
|
||||
|
||||
int mutex_trylock(struct mutex *m)
|
||||
{
|
||||
if (mutex_is_locked(m))
|
||||
return false;
|
||||
|
||||
mutex_lock(m);
|
||||
return true;
|
||||
}
|
||||
#include <lx_emul/impl/mutex.h>
|
||||
|
||||
|
||||
/******************
|
||||
@ -1383,6 +1319,30 @@ void pci_set_drvdata(struct pci_dev *pdev, void *data)
|
||||
}
|
||||
|
||||
|
||||
static struct pcim_iomap_devres {
|
||||
void *table[6];
|
||||
} _devres_table;
|
||||
|
||||
|
||||
int pcim_iomap_regions_request_all(struct pci_dev *pdev, int mask, const char *name)
|
||||
{
|
||||
/* XXX iwlwifi just want to map the first BAR */
|
||||
void *addr = pci_ioremap_bar(pdev, 0);
|
||||
if (!addr) { return -1; }
|
||||
|
||||
printk("%s:%d from: %p addr: %p\n", __func__, __LINE__, __builtin_return_address(0), addr);
|
||||
|
||||
_devres_table.table[0] = addr;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void * const *pcim_iomap_table(struct pci_dev *pdev)
|
||||
{
|
||||
return _devres_table.table;
|
||||
}
|
||||
|
||||
|
||||
/***********************
|
||||
** linux/interrupt.h **
|
||||
***********************/
|
||||
@ -1423,22 +1383,10 @@ void pci_dev_put(struct pci_dev *pci_dev)
|
||||
#include <lx_emul/impl/work.h>
|
||||
|
||||
|
||||
static void execute_delayed_work(unsigned long dwork)
|
||||
{
|
||||
Lx::Work::work_queue().schedule_delayed((struct delayed_work *)dwork, 0);
|
||||
Lx::Work::work_queue().unblock();
|
||||
}
|
||||
|
||||
|
||||
bool mod_delayed_work(struct workqueue_struct *wq, struct delayed_work *dwork,
|
||||
unsigned long delay)
|
||||
{
|
||||
/* treat delayed work without delay like any other work */
|
||||
if (delay == 0) {
|
||||
execute_delayed_work((unsigned long)dwork);
|
||||
} else {
|
||||
mod_timer(&dwork->timer, jiffies + delay);
|
||||
}
|
||||
queue_delayed_work(wq, dwork, delay);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1520,3 +1468,138 @@ int wake_up_process(struct task_struct *tsk) { return 0; }
|
||||
*******************/
|
||||
|
||||
#include <lx_emul/impl/sched.h>
|
||||
|
||||
|
||||
/*****************
|
||||
** linux/idr.h **
|
||||
*****************/
|
||||
|
||||
struct Idr
|
||||
{
|
||||
enum { INVALID_ENTRY = ~0ul, };
|
||||
enum { MAX_ENTRIES = 1024, };
|
||||
|
||||
Genode::Bit_array<MAX_ENTRIES> _barray { };
|
||||
addr_t _ptr[MAX_ENTRIES] { };
|
||||
void *_idp { nullptr };
|
||||
|
||||
bool _check(addr_t index) { return index < MAX_ENTRIES ? true : false; }
|
||||
|
||||
Idr(struct idr *idp) : _idp(idp) { }
|
||||
|
||||
virtual ~Idr() { }
|
||||
|
||||
bool handles(void *ptr) { return _idp == ptr; }
|
||||
|
||||
bool set_id(addr_t index, void *ptr)
|
||||
{
|
||||
if (_barray.get(index, 1)) { return false; }
|
||||
|
||||
_barray.set(index, 1);
|
||||
_ptr[index] = ptr;
|
||||
return true;
|
||||
}
|
||||
|
||||
addr_t alloc(addr_t start, void *ptr)
|
||||
{
|
||||
addr_t index = INVALID_ENTRY;
|
||||
for (addr_t i = start; i < MAX_ENTRIES; i++) {
|
||||
if (_barray.get(i, 1)) { continue; }
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
|
||||
if (index == INVALID_ENTRY) { return INVALID_ENTRY; }
|
||||
|
||||
_barray.set(index, 1);
|
||||
_ptr[index] = ptr;
|
||||
return index;
|
||||
}
|
||||
|
||||
void clear(addr_t index)
|
||||
{
|
||||
if (!_check(index)) { return; }
|
||||
|
||||
_barray.clear(index, 1);
|
||||
_ptr[index] = 0;
|
||||
}
|
||||
|
||||
addr_t next(addr_t index)
|
||||
{
|
||||
for (addr_t i = index; i < MAX_ENTRIES; i++) {
|
||||
if (_barray.get(i, 1)) { return i; }
|
||||
}
|
||||
return INVALID_ENTRY;
|
||||
}
|
||||
|
||||
void *get_ptr(addr_t index)
|
||||
{
|
||||
if (!_check(index)) { return NULL; }
|
||||
return (void*)_ptr[index];
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
static Genode::Registry<Genode::Registered<Idr>> _idr_registry;
|
||||
|
||||
|
||||
static Idr &idp_to_idr(struct idr *idp)
|
||||
{
|
||||
Idr *idr = nullptr;
|
||||
auto lookup = [&](Idr &i) {
|
||||
if (i.handles(idp)) { idr = &i; }
|
||||
};
|
||||
_idr_registry.for_each(lookup);
|
||||
|
||||
if (!idr) {
|
||||
Genode::Registered<Idr> *i = new (&Lx_kit::env().heap())
|
||||
Genode::Registered<Idr>(_idr_registry, idp);
|
||||
idr = &*i;
|
||||
}
|
||||
|
||||
return *idr;
|
||||
}
|
||||
|
||||
|
||||
int idr_alloc(struct idr *idp, void *ptr, int start, int end, gfp_t gfp_mask)
|
||||
{
|
||||
Idr &idr = idp_to_idr(idp);
|
||||
|
||||
if ((end - start) > 1) {
|
||||
addr_t const id = idr.alloc(start, ptr);
|
||||
return id != Idr::INVALID_ENTRY ? id : -1;
|
||||
} else {
|
||||
if (idr.set_id(start, ptr)) { return start; }
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
void *idr_find(struct idr *idp, int id)
|
||||
{
|
||||
Idr &idr = idp_to_idr(idp);
|
||||
return idr.get_ptr(id);
|
||||
}
|
||||
|
||||
|
||||
void *idr_get_next(struct idr *idp, int *nextid)
|
||||
{
|
||||
Idr &idr = idp_to_idr(idp);
|
||||
addr_t i = idr.next(*nextid);
|
||||
if (i == Idr::INVALID_ENTRY) { return NULL; }
|
||||
|
||||
*nextid = i;
|
||||
return idr.get_ptr(i);
|
||||
}
|
||||
|
||||
|
||||
/****************************
|
||||
** asm-generic/getorder.h **
|
||||
****************************/
|
||||
|
||||
int get_order(unsigned long size)
|
||||
{
|
||||
if (size < PAGE_SIZE) { return 0; }
|
||||
return Genode::log2(size) - PAGE_SHIFT;
|
||||
}
|
||||
|
@ -26,6 +26,8 @@
|
||||
#include <lx.h>
|
||||
#include <lx_emul.h>
|
||||
|
||||
#include <lx_kit/env.h>
|
||||
|
||||
#include <lx_emul/extern_c_begin.h>
|
||||
# include <linux/skbuff.h>
|
||||
# include <net/cfg80211.h>
|
||||
@ -38,6 +40,66 @@ enum {
|
||||
};
|
||||
|
||||
|
||||
struct Tx_data
|
||||
{
|
||||
net_device *ndev;
|
||||
struct sk_buff *skb;
|
||||
Lx::Task *task;
|
||||
int err;
|
||||
};
|
||||
|
||||
static Lx::Task *_tx_task;
|
||||
static Tx_data _tx_data;
|
||||
|
||||
|
||||
static void _run_tx_task(void *args)
|
||||
{
|
||||
Tx_data *data = static_cast<Tx_data*>(args);
|
||||
|
||||
while (1) {
|
||||
Lx::scheduler().current()->block_and_schedule();
|
||||
|
||||
net_device *ndev = data->ndev;
|
||||
struct sk_buff *skb = data->skb;
|
||||
|
||||
data->err = ndev->netdev_ops->ndo_start_xmit(skb, ndev);
|
||||
if (data->err) {
|
||||
Genode::warning("xmit failed: ", data->err, " skb: ", skb);
|
||||
}
|
||||
|
||||
data->skb = nullptr;
|
||||
|
||||
if (data->task) {
|
||||
data->task->unblock();
|
||||
data->task = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool tx_task_send(struct sk_buff *skb)
|
||||
{
|
||||
if (_tx_data.skb) {
|
||||
Genode::error("skb: ", skb, " already queued");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!_tx_task) {
|
||||
Genode::error("no TX task available");
|
||||
return false;
|
||||
}
|
||||
|
||||
_tx_data.ndev = skb->dev;
|
||||
_tx_data.skb = skb;
|
||||
_tx_data.task = Lx::scheduler().current();
|
||||
|
||||
_tx_task->unblock();
|
||||
Lx::scheduler().current()->block_and_schedule();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Nic::Session implementation
|
||||
*/
|
||||
@ -48,29 +110,6 @@ class Wifi_session_component : public Nic::Session_component
|
||||
net_device *_ndev;
|
||||
bool _has_link = !(_ndev->state & 1UL << __LINK_STATE_NOCARRIER);
|
||||
|
||||
struct Tx_data
|
||||
{
|
||||
net_device *ndev;
|
||||
struct sk_buff *skb;
|
||||
} _tx_data;
|
||||
|
||||
static void _run_tx_task(void *args)
|
||||
{
|
||||
Tx_data *data = static_cast<Tx_data*>(args);
|
||||
|
||||
while (1) {
|
||||
Lx::scheduler().current()->block_and_schedule();
|
||||
|
||||
net_device *ndev = data->ndev;
|
||||
struct sk_buff *skb = data->skb;
|
||||
|
||||
ndev->netdev_ops->ndo_start_xmit(skb, ndev);
|
||||
}
|
||||
}
|
||||
|
||||
Lx::Task _tx_task { _run_tx_task, &_tx_data, "tx_task",
|
||||
Lx::Task::PRIORITY_1, Lx::scheduler() };
|
||||
|
||||
protected:
|
||||
|
||||
bool _send()
|
||||
@ -86,6 +125,15 @@ class Wifi_session_component : public Nic::Session_component
|
||||
return false;
|
||||
}
|
||||
|
||||
/* XXX enable as soon as the other stack plays along
|
||||
if (!_has_link) {
|
||||
Packet_descriptor packet = _tx.sink()->get_packet();
|
||||
_tx.sink()->acknowledge_packet(packet);
|
||||
Genode::warning("no link, drop packet");
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
|
||||
if (!_tx.sink()->ready_to_ack()) { return false; }
|
||||
if (!_tx.sink()->packet_avail()) { return false; }
|
||||
|
||||
@ -97,13 +145,15 @@ class Wifi_session_component : public Nic::Session_component
|
||||
|
||||
struct sk_buff *skb = lxc_alloc_skb(packet.size() + HEAD_ROOM, HEAD_ROOM);
|
||||
|
||||
skb->dev = _ndev;
|
||||
|
||||
unsigned char *data = lxc_skb_put(skb, packet.size());
|
||||
Genode::memcpy(data, _tx.sink()->packet_content(packet), packet.size());
|
||||
|
||||
_tx_data.ndev = _ndev;
|
||||
_tx_data.skb = skb;
|
||||
|
||||
_tx_task.unblock();
|
||||
_tx_task->unblock();
|
||||
Lx::scheduler().schedule();
|
||||
|
||||
_tx.sink()->acknowledge_packet(packet);
|
||||
@ -180,7 +230,6 @@ class Wifi_session_component : public Nic::Session_component
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************
|
||||
** NIC-component interface **
|
||||
*****************************/
|
||||
@ -264,17 +313,10 @@ class Root : public Genode::Root_component<Wifi_session_component,
|
||||
Root *Root::instance;
|
||||
|
||||
|
||||
static Genode::Env *_env;
|
||||
static Genode::Allocator *_alloc;
|
||||
|
||||
|
||||
void Lx::nic_init(Genode::Env &env, Genode::Allocator &alloc)
|
||||
{
|
||||
static Root root(env, alloc);
|
||||
Root::instance = &root;
|
||||
|
||||
_env = &env;
|
||||
_alloc = &alloc;
|
||||
}
|
||||
|
||||
|
||||
@ -288,6 +330,7 @@ namespace Lx {
|
||||
class Notifier;
|
||||
}
|
||||
|
||||
|
||||
class Lx::Notifier
|
||||
{
|
||||
private:
|
||||
@ -302,9 +345,19 @@ class Lx::Notifier
|
||||
Lx_kit::List<Block> _list;
|
||||
Genode::Tslab<Block, 32 * sizeof(Block)> _block_alloc;
|
||||
|
||||
void *_ptr;
|
||||
|
||||
public:
|
||||
|
||||
Notifier() : _block_alloc(_alloc) { }
|
||||
Notifier(Genode::Allocator &alloc, void *ptr)
|
||||
: _block_alloc(&alloc), _ptr(ptr) { }
|
||||
|
||||
virtual ~Notifier() { };
|
||||
|
||||
bool handles(void *ptr)
|
||||
{
|
||||
return _ptr == ptr;
|
||||
}
|
||||
|
||||
void register_block(struct notifier_block *nb)
|
||||
{
|
||||
@ -335,29 +388,46 @@ class Lx::Notifier
|
||||
};
|
||||
|
||||
|
||||
static Genode::Registry<Genode::Registered<Lx::Notifier>> _blocking_notifier_registry;
|
||||
|
||||
|
||||
/* XXX move blocking_notifier_call to proper location */
|
||||
/**********************
|
||||
** linux/notifier.h **
|
||||
**********************/
|
||||
|
||||
static Lx::Notifier &blocking_notifier()
|
||||
static Lx::Notifier &blocking_notifier(struct blocking_notifier_head *nh)
|
||||
{
|
||||
static Lx::Notifier inst;
|
||||
return inst;
|
||||
Lx::Notifier *notifier = nullptr;
|
||||
auto lookup = [&](Lx::Notifier &n) {
|
||||
if (!n.handles(nh)) { return; }
|
||||
|
||||
notifier = &n;
|
||||
};
|
||||
_blocking_notifier_registry.for_each(lookup);
|
||||
|
||||
if (!notifier) {
|
||||
Genode::Registered<Lx::Notifier> *n = new (&Lx_kit::env().heap())
|
||||
Genode::Registered<Lx::Notifier>(_blocking_notifier_registry,
|
||||
Lx_kit::env().heap(), nh);
|
||||
notifier = &*n;
|
||||
}
|
||||
|
||||
return *notifier;
|
||||
}
|
||||
|
||||
|
||||
int blocking_notifier_chain_register(struct blocking_notifier_head *nh,
|
||||
struct notifier_block *nb)
|
||||
{
|
||||
blocking_notifier().register_block(nb);
|
||||
blocking_notifier(nh).register_block(nb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int blocking_notifier_chain_unregister(struct blocking_notifier_head *nh,
|
||||
struct notifier_block *nb)
|
||||
{
|
||||
blocking_notifier().unregister_block(nb);
|
||||
blocking_notifier(nh).unregister_block(nb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -365,7 +435,7 @@ int blocking_notifier_chain_unregister(struct blocking_notifier_head *nh,
|
||||
int blocking_notifier_call_chain(struct blocking_notifier_head *nh,
|
||||
unsigned long val, void *v)
|
||||
{
|
||||
return blocking_notifier().call_all_blocks(val, v);
|
||||
return blocking_notifier(nh).call_all_blocks(val, v);
|
||||
}
|
||||
|
||||
|
||||
@ -375,7 +445,7 @@ int blocking_notifier_call_chain(struct blocking_notifier_head *nh,
|
||||
|
||||
static Lx::Notifier &net_notifier()
|
||||
{
|
||||
static Lx::Notifier inst;
|
||||
static Lx::Notifier inst(Lx_kit::env().heap(), NULL);
|
||||
return inst;
|
||||
}
|
||||
|
||||
@ -446,7 +516,7 @@ class Proto_hook_list
|
||||
|
||||
static Proto_hook_list& proto_hook_list()
|
||||
{
|
||||
static Proto_hook_list inst(*_alloc);
|
||||
static Proto_hook_list inst(Lx_kit::env().heap());
|
||||
return inst;
|
||||
}
|
||||
|
||||
@ -512,15 +582,12 @@ extern "C" int dev_queue_xmit(struct sk_buff *skb)
|
||||
{
|
||||
struct net_device *dev = skb->dev;
|
||||
struct net_device_ops const *ops = dev->netdev_ops;
|
||||
int rv = NETDEV_TX_OK;
|
||||
|
||||
if (skb->next) {
|
||||
Genode::warning("more skb's queued");
|
||||
}
|
||||
|
||||
rv = ops->ndo_start_xmit(skb, dev);
|
||||
|
||||
return rv;
|
||||
return tx_task_send(skb) ? NETDEV_TX_OK : -1;
|
||||
}
|
||||
|
||||
|
||||
@ -568,10 +635,15 @@ extern "C" int register_netdevice(struct net_device *ndev)
|
||||
|
||||
int err = ndev->netdev_ops->ndo_open(ndev);
|
||||
if (err) {
|
||||
Genode::error("ndo_open() failed: ", err);
|
||||
Genode::error("Initializing device failed");
|
||||
throw -1;
|
||||
return err;
|
||||
}
|
||||
|
||||
static Lx::Task tx_task { _run_tx_task, &_tx_data, "tx_task",
|
||||
Lx::Task::PRIORITY_1, Lx::scheduler() };
|
||||
_tx_task = &tx_task;
|
||||
|
||||
if (ndev->netdev_ops->ndo_set_rx_mode)
|
||||
ndev->netdev_ops->ndo_set_rx_mode(ndev);
|
||||
|
||||
@ -693,7 +765,7 @@ extern "C" struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name
|
||||
/* ensure 32-byte alignment of whole construct */
|
||||
alloc_size += NETDEV_ALIGN - 1;
|
||||
|
||||
p = (net_device *)kzalloc(alloc_size, GFP_KERNEL | __GFP_NOWARN | __GFP_REPEAT);
|
||||
p = (net_device *)kzalloc(alloc_size, GFP_KERNEL);
|
||||
if (!p)
|
||||
return NULL;
|
||||
|
||||
|
104
repos/dde_linux/src/lib/wifi/random.cc
Normal file
104
repos/dde_linux/src/lib/wifi/random.cc
Normal file
@ -0,0 +1,104 @@
|
||||
/*
|
||||
* \brief Linux random emulation code
|
||||
* \author Josef Soentgen
|
||||
* \date 2016-10-19
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2016-2017 Genode Labs GmbH
|
||||
*
|
||||
* This file is distributed under the terms of the GNU General Public License
|
||||
* version 2.
|
||||
*/
|
||||
|
||||
/* Genode includes */
|
||||
#include <base/fixed_stdint.h>
|
||||
#include <util/string.h>
|
||||
|
||||
|
||||
using Genode::uint64_t;
|
||||
|
||||
/*
|
||||
* Xoroshiro128+ written in 2014-2016 by Sebastiano Vigna (vigna@acm.org)
|
||||
*
|
||||
* (see http://xoroshiro.di.unimi.it/xorshift128plus.c and
|
||||
* http://xoroshiro.di.unimi.it/splitmix64.c)
|
||||
*/
|
||||
|
||||
struct Xoroshiro
|
||||
{
|
||||
uint64_t seed;
|
||||
|
||||
uint64_t splitmix64()
|
||||
{
|
||||
uint64_t z = (seed += __UINT64_C(0x9E3779B97F4A7C15));
|
||||
z = (z ^ (z >> 30)) * __UINT64_C(0xBF58476D1CE4E5B9);
|
||||
z = (z ^ (z >> 27)) * __UINT64_C(0x94D049BB133111EB);
|
||||
return z ^ (z >> 31);
|
||||
}
|
||||
|
||||
Xoroshiro(uint64_t seed) : seed(seed)
|
||||
{
|
||||
s[0] = splitmix64();
|
||||
s[1] = splitmix64();
|
||||
}
|
||||
|
||||
uint64_t s[2];
|
||||
|
||||
static uint64_t rotl(uint64_t const x, int k) {
|
||||
return (x << k) | (x >> (64 - k));
|
||||
}
|
||||
|
||||
uint64_t get()
|
||||
{
|
||||
uint64_t const s0 = s[0];
|
||||
uint64_t s1 = s[1];
|
||||
uint64_t const result = s0 + s1;
|
||||
|
||||
s1 ^= s0;
|
||||
|
||||
s[0] = rotl(s0, 55) ^ s1 ^ (s1 << 14);
|
||||
s[1] = rotl(s1, 36);
|
||||
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
static Xoroshiro xoroshiro(0x636864324d766931);
|
||||
|
||||
|
||||
/********************
|
||||
** linux/random.h **
|
||||
********************/
|
||||
|
||||
extern "C" void get_random_bytes(void *buf, int nbytes)
|
||||
{
|
||||
if (nbytes <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
char *p = reinterpret_cast<char*>(buf);
|
||||
|
||||
int const rounds = nbytes / 8;
|
||||
for (int i = 0; i < rounds; i++) {
|
||||
uint64_t const v = xoroshiro.get();
|
||||
|
||||
Genode::memcpy(p, &v, 8);
|
||||
p += 8;
|
||||
}
|
||||
|
||||
int const remain = nbytes - rounds * 8;
|
||||
if (!remain) {
|
||||
return;
|
||||
}
|
||||
|
||||
uint64_t const v = xoroshiro.get();
|
||||
Genode::memcpy(p, &v, remain);
|
||||
}
|
||||
|
||||
|
||||
extern "C" unsigned int prandom_u32(void)
|
||||
{
|
||||
return xoroshiro.get();
|
||||
}
|
@ -100,4 +100,8 @@ int linux_br_del_if(int sock, const char *brname, const char *ifname) {
|
||||
|
||||
int linux_br_get(char *brname, const char *ifname) { return -1; }
|
||||
|
||||
|
||||
int linux_master_get(char *master_ifname, const char *ifname) {
|
||||
return -1; }
|
||||
|
||||
} /* extern "C" */
|
||||
|
96
repos/dde_linux/src/lib/wpa_supplicant/ctrl_iface_genode.c
Normal file
96
repos/dde_linux/src/lib/wpa_supplicant/ctrl_iface_genode.c
Normal file
@ -0,0 +1,96 @@
|
||||
/*
|
||||
* WPA Supplicant / UNIX domain socket -based control interface
|
||||
* Copyright (c) 2004-2014, Jouni Malinen <j@w1.fi>
|
||||
*
|
||||
* This software may be distributed under the terms of the BSD license.
|
||||
* See README for more details.
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
|
||||
#include "utils/common.h"
|
||||
#include "utils/eloop.h"
|
||||
#include "utils/list.h"
|
||||
#include "common/ctrl_iface_common.h"
|
||||
#include "eapol_supp/eapol_supp_sm.h"
|
||||
#include "config.h"
|
||||
#include "wpa_supplicant_i.h"
|
||||
#include "ctrl_iface.h"
|
||||
|
||||
struct ctrl_iface_priv {
|
||||
struct wpa_supplicant *wpa_s;
|
||||
};
|
||||
|
||||
|
||||
struct ctrl_iface_global_priv {
|
||||
struct wpa_global *global;
|
||||
};
|
||||
|
||||
struct ctrl_iface_msg {
|
||||
struct wpa_supplicant *wpa_s;
|
||||
};
|
||||
|
||||
|
||||
struct ctrl_iface_priv *
|
||||
wpa_supplicant_ctrl_iface_init(struct wpa_supplicant *wpa_s)
|
||||
{
|
||||
printf("%s:%d\n", __func__, __LINE__);
|
||||
|
||||
struct ctrl_iface_priv *priv;
|
||||
|
||||
priv = os_zalloc(sizeof(*priv));
|
||||
if (priv == NULL)
|
||||
return NULL;
|
||||
|
||||
if (wpa_s->conf->ctrl_interface == NULL)
|
||||
return priv;
|
||||
|
||||
return priv;
|
||||
}
|
||||
|
||||
|
||||
void wpa_supplicant_ctrl_iface_deinit(struct ctrl_iface_priv *priv)
|
||||
{
|
||||
printf("%s:%d\n", __func__, __LINE__);
|
||||
|
||||
struct wpa_ctrl_dst *dst, *prev;
|
||||
struct ctrl_iface_msg *msg, *prev_msg;
|
||||
struct ctrl_iface_global_priv *gpriv;
|
||||
|
||||
os_free(priv);
|
||||
}
|
||||
|
||||
|
||||
void wpa_supplicant_ctrl_iface_wait(struct ctrl_iface_priv *priv)
|
||||
{
|
||||
printf("%s:%d\n", __func__, __LINE__);
|
||||
}
|
||||
|
||||
|
||||
struct ctrl_iface_global_priv *
|
||||
wpa_supplicant_global_ctrl_iface_init(struct wpa_global *global)
|
||||
{
|
||||
printf("%s:%d\n", __func__, __LINE__);
|
||||
|
||||
struct ctrl_iface_global_priv *priv;
|
||||
|
||||
priv = os_zalloc(sizeof(*priv));
|
||||
if (priv == NULL)
|
||||
return NULL;
|
||||
|
||||
if (global->params.ctrl_interface == NULL)
|
||||
return priv;
|
||||
|
||||
return priv;
|
||||
}
|
||||
|
||||
|
||||
void wpa_supplicant_global_ctrl_iface_deinit(struct ctrl_iface_global_priv *priv)
|
||||
{
|
||||
printf("%s:%d\n", __func__, __LINE__);
|
||||
|
||||
struct wpa_ctrl_dst *dst, *prev;
|
||||
struct ctrl_iface_msg *msg, *prev_msg;
|
||||
|
||||
os_free(priv);
|
||||
}
|
@ -63,6 +63,7 @@ int wpa_main(int debug_msg, int interval)
|
||||
memset(¶ms, 0, sizeof(params));
|
||||
|
||||
params.wpa_debug_level = debug_msg ? MSG_DEBUG : MSG_INFO;
|
||||
params.ctrl_interface = "GENODE";
|
||||
|
||||
global = wpa_supplicant_init(¶ms);
|
||||
if (global == NULL)
|
||||
@ -73,7 +74,7 @@ int wpa_main(int debug_msg, int interval)
|
||||
iface.ifname = "wlan0";
|
||||
iface.confname = conf_file;
|
||||
|
||||
if (wpa_supplicant_add_iface(global, &iface) == NULL)
|
||||
if (wpa_supplicant_add_iface(global, &iface, NULL) == NULL)
|
||||
exitcode = -1;
|
||||
|
||||
if (connected_scan_interval > 0)
|
||||
|
@ -43,7 +43,7 @@ extern "C" void wpa_reporter_init(void *env)
|
||||
}
|
||||
|
||||
|
||||
enum { SSID_MAX_LEN = 32 + 1, MAC_STR_LEN = 6*2 + 5 + 1};
|
||||
enum { SSID_STRING_MAX_LEN = 32 + 1, MAC_STR_LEN = 6*2 + 5 + 1};
|
||||
|
||||
|
||||
static inline void mac2str(char *buf, u8 const *mac)
|
||||
@ -60,7 +60,7 @@ extern "C" void wpa_report_connect_event(struct wpa_supplicant *wpa_s)
|
||||
struct wpa_ssid *wpa_ssid = wpa_s->current_ssid;
|
||||
|
||||
/* FIXME ssid may contain any characters, even NUL */
|
||||
Genode::String<SSID_MAX_LEN>
|
||||
Genode::String<SSID_STRING_MAX_LEN>
|
||||
ssid(Genode::Cstring((char *)wpa_ssid->ssid, wpa_ssid->ssid_len));
|
||||
|
||||
char bssid_buf[MAC_STR_LEN];
|
||||
|
@ -17,6 +17,9 @@
|
||||
os_*;
|
||||
wpa_*;
|
||||
wpabuf_*;
|
||||
sha1_vector*;
|
||||
get_ie*;
|
||||
fc2str*;
|
||||
|
||||
local:
|
||||
|
||||
|
@ -1,13 +1,13 @@
|
||||
linux-x.x.x/crypto/ablkcipher.c
|
||||
linux-x.x.x/crypto/aead.c
|
||||
linux-x.x.x/crypto/aes_generic.c
|
||||
linux-x.x.x/crypto/ahash.c
|
||||
linux-x.x.x/crypto/algapi.c
|
||||
linux-x.x.x/crypto/algboss.c
|
||||
linux-x.x.x/crypto/api.c
|
||||
linux-x.x.x/crypto/arc4.c
|
||||
linux-x.x.x/crypto/blkcipher.c
|
||||
linux-x.x.x/crypto/ccm.c
|
||||
linux-x.x.x/crypto/chainiv.c
|
||||
linux-x.x.x/crypto/cipher.c
|
||||
linux-x.x.x/crypto/compress.c
|
||||
linux-x.x.x/crypto/crypto_wq.c
|
||||
@ -16,123 +16,162 @@ linux-x.x.x/crypto/internal.h
|
||||
linux-x.x.x/crypto/memneq.c
|
||||
linux-x.x.x/crypto/rng.c
|
||||
linux-x.x.x/crypto/scatterwalk.c
|
||||
linux-x.x.x/crypto/shash.c
|
||||
linux-x.x.x/crypto/skcipher.c
|
||||
linux-x.x.x/drivers/leds/led-class.c
|
||||
linux-x.x.x/drivers/leds/led-core.c
|
||||
linux-x.x.x/drivers/leds/led-triggers.c
|
||||
linux-x.x.x/drivers/leds/leds.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/agn.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/calib.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/calib.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/commands.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/dev.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/devices.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/led.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/led.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/lib.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/mac80211.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/main.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/power.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/power.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/rs.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/rs.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/rx.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/rxon.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/scan.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/sta.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/tt.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/tt.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/tx.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/dvm/ucode.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-1000.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-2000.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-5000.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-6000.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-7000.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-8000.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-agn-hw.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-config.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-csr.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-debug.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-debug.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-devtrace.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-devtrace-data.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-devtrace-io.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-devtrace-iwlwifi.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-devtrace-msg.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-devtrace-ucode.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-drv.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-drv.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-eeprom-read.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-eeprom-read.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-fh.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-fw-error-dump.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-fw-file.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-fw.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-io.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-io.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-modparams.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-notif-wait.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-notif-wait.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-nvm-parse.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-op-mode.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-phy-db.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-phy-db.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-prph.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-scd.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-trans.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/iwl-trans.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/binding.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/coex.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/coex_legacy.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/constants.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/d3.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/fw-api-coex.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/fw-api-d3.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/fw-api-mac.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/fw-api-power.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/fw-api-rs.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/fw-api-rx.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/fw-api-sta.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/fw-api-stats.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/fw-api-tof.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/fw-api-tx.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/fw-api.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/fw.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/led.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/mac80211.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/mvm.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/nvm.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/offloading.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/ops.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/phy-ctxt.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/power.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/quota.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/rs.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/rs.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/rx.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/scan.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/sf.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/sta.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/sta.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/testmode.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/time-event.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/time-event.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/tdls.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/tof.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/tof.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/tt.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/tx.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/mvm/utils.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/pcie/drv.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/pcie/internal.h
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/pcie/rx.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/pcie/trans.c
|
||||
linux-x.x.x/drivers/net/wireless/iwlwifi/pcie/tx.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/cfg/1000.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/cfg/2000.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/cfg/22000.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/cfg/5000.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/cfg/6000.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/cfg/7000.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/cfg/8000.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/cfg/9000.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/agn.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/calib.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/calib.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/commands.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/dev.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/devices.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/led.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/led.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/lib.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/main.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/power.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/power.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/rs.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/rs.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/rx.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/rxon.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/scan.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/sta.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/tt.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/tt.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/tx.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/dvm/ucode.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/acpi.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/alive.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/binding.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/cmdhdr.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/coex.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/commands.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/config.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/context.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/d3.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/datapath.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/debug.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/filter.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/led.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/mac-cfg.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/mac.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/nvm-reg.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/offload.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/paging.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/phy-ctxt.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/phy.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/power.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/rs.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/rx.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/scan.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/sf.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/sta.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/stats.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/tdls.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/time-event.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/tof.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/api/txq.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/common_rx.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/dbg.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/debugfs.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/error-dump.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/file.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/img.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/init.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/notif-wait.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/notif-wait.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/nvm.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/paging.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/runtime.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/fw/smem.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-agn-hw.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-config.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-context-info.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-csr.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-debug.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-debug.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-devtrace-data.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-devtrace-io.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-devtrace-iwlwifi.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-devtrace-msg.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-devtrace-ucode.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-devtrace.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-drv.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-eeprom-parse.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-eeprom-parse.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-eeprom-read.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-eeprom-read.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-fh.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-io.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-io.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-modparams.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-op-mode.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-phy-db.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-phy-db.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-prph.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-scd.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-trans.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/binding.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/coex.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/constants.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/d3.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/fw-api.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/led.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/offloading.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/phy-ctxt.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/power.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/quota.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/rs.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/rx.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/scan.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/sf.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/sta.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/tdls.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/testmode.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/time-event.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/tof.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/tof.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/mvm/utils.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/pcie/tx.c
|
||||
linux-x.x.x/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c
|
||||
linux-x.x.x/include/asm-generic/atomic64.h
|
||||
linux-x.x.x/include/asm-generic/bitops/__ffs.h
|
||||
linux-x.x.x/include/asm-generic/bitops/__fls.h
|
||||
@ -140,14 +179,15 @@ linux-x.x.x/include/asm-generic/bitops/ffs.h
|
||||
linux-x.x.x/include/asm-generic/bitops/fls.h
|
||||
linux-x.x.x/include/asm-generic/bitops/fls64.h
|
||||
linux-x.x.x/include/asm-generic/bitops/non-atomic.h
|
||||
linux-x.x.x/include/asm-generic/pci-dma-compat.h
|
||||
linux-x.x.x/include/crypto/aead.h
|
||||
linux-x.x.x/include/crypto/aes.h
|
||||
linux-x.x.x/include/crypto/algapi.h
|
||||
linux-x.x.x/include/crypto/crypto_wq.h
|
||||
linux-x.x.x/include/crypto/ctr.h
|
||||
linux-x.x.x/include/crypto/hash.h
|
||||
linux-x.x.x/include/crypto/internal/aead.h
|
||||
linux-x.x.x/include/crypto/internal/geniv.h
|
||||
linux-x.x.x/include/crypto/internal/hash.h
|
||||
linux-x.x.x/include/crypto/internal/rng.h
|
||||
linux-x.x.x/include/crypto/internal/skcipher.h
|
||||
linux-x.x.x/include/crypto/null.h
|
||||
@ -155,10 +195,12 @@ linux-x.x.x/include/crypto/rng.h
|
||||
linux-x.x.x/include/crypto/scatterwalk.h
|
||||
linux-x.x.x/include/crypto/skcipher.h
|
||||
linux-x.x.x/include/linux/average.h
|
||||
linux-x.x.x/include/linux/bsearch.h
|
||||
linux-x.x.x/include/linux/crypto.h
|
||||
linux-x.x.x/include/linux/ctype.h
|
||||
linux-x.x.x/include/linux/ethtool.h
|
||||
linux-x.x.x/include/linux/errqueue.h
|
||||
linux-x.x.x/include/linux/ethtool.h
|
||||
linux-x.x.x/include/linux/gcd.h
|
||||
linux-x.x.x/include/linux/genetlink.h
|
||||
linux-x.x.x/include/linux/hashtable.h
|
||||
linux-x.x.x/include/linux/ieee80211.h
|
||||
@ -177,10 +219,8 @@ linux-x.x.x/include/linux/netlink.h
|
||||
linux-x.x.x/include/linux/pci_ids.h
|
||||
linux-x.x.x/include/linux/rbtree.h
|
||||
linux-x.x.x/include/linux/rbtree_augmented.h
|
||||
linux-x.x.x/include/linux/rhashtable.h
|
||||
linux-x.x.x/include/linux/rfkill-gpio.h
|
||||
linux-x.x.x/include/linux/rfkill-regulator.h
|
||||
linux-x.x.x/include/linux/rfkill.h
|
||||
linux-x.x.x/include/linux/rhashtable.h
|
||||
linux-x.x.x/include/linux/rtnetlink.h
|
||||
linux-x.x.x/include/linux/skbuff.h
|
||||
linux-x.x.x/include/linux/socket.h
|
||||
@ -227,9 +267,12 @@ linux-x.x.x/include/uapi/linux/snmp.h
|
||||
linux-x.x.x/include/uapi/linux/socket.h
|
||||
linux-x.x.x/include/uapi/linux/sockios.h
|
||||
linux-x.x.x/include/uapi/linux/swab.h
|
||||
linux-x.x.x/lib/bsearch.c
|
||||
linux-x.x.x/lib/bucket_locks.c
|
||||
linux-x.x.x/lib/crc32.c
|
||||
linux-x.x.x/lib/crc32defs.h
|
||||
linux-x.x.x/lib/ctype.c
|
||||
linux-x.x.x/lib/gcd.c
|
||||
linux-x.x.x/lib/nlattr.c
|
||||
linux-x.x.x/lib/rbtree.c
|
||||
linux-x.x.x/lib/rhashtable.c
|
||||
@ -238,11 +281,11 @@ linux-x.x.x/net/core/rtnetlink.c
|
||||
linux-x.x.x/net/core/skbuff.c
|
||||
linux-x.x.x/net/core/sock.c
|
||||
linux-x.x.x/net/ethernet/eth.c
|
||||
linux-x.x.x/net/mac80211/aes_ccm.c
|
||||
linux-x.x.x/net/mac80211/aead_api.c
|
||||
linux-x.x.x/net/mac80211/aead_api.h
|
||||
linux-x.x.x/net/mac80211/aes_ccm.h
|
||||
linux-x.x.x/net/mac80211/aes_cmac.c
|
||||
linux-x.x.x/net/mac80211/aes_cmac.h
|
||||
linux-x.x.x/net/mac80211/aes_gcm.c
|
||||
linux-x.x.x/net/mac80211/aes_gcm.h
|
||||
linux-x.x.x/net/mac80211/aes_gmac.c
|
||||
linux-x.x.x/net/mac80211/aes_gmac.h
|
||||
@ -258,6 +301,8 @@ linux-x.x.x/net/mac80211/debugfs_sta.h
|
||||
linux-x.x.x/net/mac80211/driver-ops.c
|
||||
linux-x.x.x/net/mac80211/driver-ops.h
|
||||
linux-x.x.x/net/mac80211/ethtool.c
|
||||
linux-x.x.x/net/mac80211/fils_aead.c
|
||||
linux-x.x.x/net/mac80211/fils_aead.h
|
||||
linux-x.x.x/net/mac80211/ht.c
|
||||
linux-x.x.x/net/mac80211/ibss.c
|
||||
linux-x.x.x/net/mac80211/ieee80211_i.h
|
||||
@ -315,7 +360,6 @@ linux-x.x.x/net/packet/internal.h
|
||||
linux-x.x.x/net/rfkill/core.c
|
||||
linux-x.x.x/net/rfkill/input.c
|
||||
linux-x.x.x/net/rfkill/rfkill-gpio.c
|
||||
linux-x.x.x/net/rfkill/rfkill-regulator.c
|
||||
linux-x.x.x/net/rfkill/rfkill.h
|
||||
linux-x.x.x/net/wireless/ap.c
|
||||
linux-x.x.x/net/wireless/chan.c
|
||||
@ -332,7 +376,6 @@ linux-x.x.x/net/wireless/radiotap.c
|
||||
linux-x.x.x/net/wireless/rdev-ops.h
|
||||
linux-x.x.x/net/wireless/reg.c
|
||||
linux-x.x.x/net/wireless/reg.h
|
||||
linux-x.x.x/net/wireless/regdb.h
|
||||
linux-x.x.x/net/wireless/scan.c
|
||||
linux-x.x.x/net/wireless/sme.c
|
||||
linux-x.x.x/net/wireless/sysfs.c
|
||||
|
Loading…
Reference in New Issue
Block a user