wifi: update iwlwifi to 4.16.3

This commit is contained in:
Josef Söntgen 2018-04-23 15:45:47 +02:00 committed by Christian Helmuth
parent eb62d9cc04
commit 870505bcd9
34 changed files with 2756 additions and 1257 deletions

View File

@ -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 =

View File

@ -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))

View File

@ -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 \

View File

@ -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 =

View File

@ -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 =

View File

@ -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

View File

@ -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(&param->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,

View File

@ -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(&param->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)

View File

@ -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;

View File

@ -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

View File

@ -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
View 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>

View File

@ -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 >> $@; \

View File

@ -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
}
#

View File

@ -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

View File

@ -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;
}

View File

@ -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)

View 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;
}

View 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

View File

@ -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 */

View File

@ -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();
}

View File

@ -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;
}

View File

@ -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;

View 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();
}

View File

@ -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" */

View 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);
}

View File

@ -63,6 +63,7 @@ int wpa_main(int debug_msg, int interval)
memset(&params, 0, sizeof(params));
params.wpa_debug_level = debug_msg ? MSG_DEBUG : MSG_INFO;
params.ctrl_interface = "GENODE";
global = wpa_supplicant_init(&params);
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)

View File

@ -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];

View File

@ -17,6 +17,9 @@
os_*;
wpa_*;
wpabuf_*;
sha1_vector*;
get_ie*;
fc2str*;
local:

View File

@ -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