Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cc5f7e39 authored by Don Fry's avatar Don Fry Committed by John W. Linville
Browse files

iwlwifi: implement dynamic opmode loading



This is the next step in splitting up the driver,
making the uCode API dependent pieces of it live
in separate modules. Right now there's only one
so it's not user-selectable, but we're actively
working on more.

Reviewed-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarDon Fry <donald.h.fry@intel.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent c08ce20c
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ config IWLWIFI
	select LEDS_CLASS
	select LEDS_TRIGGERS
	select MAC80211_LEDS
	select IWLDVM
	---help---
	  Select to build the driver supporting the:

@@ -41,6 +42,10 @@ config IWLWIFI
	  say M here and read <file:Documentation/kbuild/modules.txt>.  The
	  module will be called iwlwifi.

config IWLDVM
	tristate "Intel Wireless WiFi"
	depends on IWLWIFI

menu "Debugging Options"
	depends on IWLWIFI

+18 −14
Original line number Diff line number Diff line
# DVM
obj-$(CONFIG_IWLDVM)   += iwldvm.o
iwldvm-objs		:= iwl-agn.o iwl-agn-rs.o iwl-mac80211.o
iwldvm-objs		+= iwl-ucode.o iwl-agn-tx.o
iwldvm-objs		+= iwl-agn-lib.o iwl-agn-calib.o
iwldvm-objs		+= iwl-agn-tt.o iwl-agn-sta.o iwl-agn-rx.o
iwldvm-objs		+= iwl-eeprom.o iwl-power.o
iwldvm-objs		+= iwl-scan.o iwl-led.o
iwldvm-objs		+= iwl-agn-rxon.o iwl-agn-devices.o
iwldvm-objs		+= iwl-notif-wait.o

iwldvm-$(CONFIG_IWLWIFI_DEBUGFS) += iwl-debugfs.o
iwldvm-$(CONFIG_IWLWIFI_DEVICE_TESTMODE) += iwl-testmode.o

CFLAGS_iwl-devtrace.o := -I$(src)

# WIFI
obj-$(CONFIG_IWLWIFI)	+= iwlwifi.o
iwlwifi-objs		:= iwl-agn.o iwl-agn-rs.o iwl-mac80211.o
iwlwifi-objs		+= iwl-ucode.o iwl-agn-tx.o iwl-debug.o
iwlwifi-objs		+= iwl-agn-lib.o iwl-agn-calib.o iwl-io.o
iwlwifi-objs		+= iwl-agn-tt.o iwl-agn-sta.o iwl-agn-rx.o

iwlwifi-objs		+= iwl-eeprom.o iwl-power.o
iwlwifi-objs		+= iwl-scan.o iwl-led.o
iwlwifi-objs		+= iwl-agn-rxon.o iwl-agn-devices.o
iwlwifi-objs		+= iwl-5000.o
iwlwifi-objs		+= iwl-6000.o
iwlwifi-objs		+= iwl-1000.o
iwlwifi-objs		+= iwl-2000.o
iwlwifi-objs		+= iwl-io.o
iwlwifi-objs		+= iwl-pci.o
iwlwifi-objs		+= iwl-drv.o
iwlwifi-objs		+= iwl-notif-wait.o
iwlwifi-objs		+= iwl-debug.o
iwlwifi-objs		+= iwl-trans-pcie.o iwl-trans-pcie-rx.o iwl-trans-pcie-tx.o


iwlwifi-$(CONFIG_IWLWIFI_DEBUGFS) += iwl-debugfs.o
iwlwifi-$(CONFIG_IWLWIFI_DEVICE_TRACING) += iwl-devtrace.o
iwlwifi-$(CONFIG_IWLWIFI_DEVICE_TESTMODE) += iwl-testmode.o

CFLAGS_iwl-devtrace.o := -I$(src)

ccflags-y += -D__CHECK_ENDIAN__
+8 −8
Original line number Diff line number Diff line
@@ -78,7 +78,6 @@ MODULE_DESCRIPTION(DRV_DESCRIPTION);
MODULE_VERSION(DRV_VERSION);
MODULE_AUTHOR(DRV_COPYRIGHT " " DRV_AUTHOR);
MODULE_LICENSE("GPL");
MODULE_ALIAS("iwlagn");

void iwl_update_chain_flags(struct iwl_priv *priv)
{
@@ -2344,24 +2343,25 @@ static int __init iwl_init(void)
		goto error_rc_register;
	}

	ret = iwl_pci_register_driver();
	if (ret)
		goto error_pci_register;
	ret = iwl_opmode_register("iwldvm", &iwl_dvm_ops);
	if (ret) {
		pr_err("Unable to register op_mode: %d\n", ret);
		goto error_opmode_register;
	}
	return ret;

error_pci_register:
error_opmode_register:
	iwlagn_rate_control_unregister();
error_rc_register:
	kmem_cache_destroy(iwl_tx_cmd_pool);
	return ret;
}
module_init(iwl_init);

static void __exit iwl_exit(void)
{
	iwl_pci_unregister_driver();
	iwl_opmode_deregister("iwldvm");
	iwlagn_rate_control_unregister();
	kmem_cache_destroy(iwl_tx_cmd_pool);
}

module_exit(iwl_exit);
module_init(iwl_init);
+6 −0
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@
 *****************************************************************************/

#include <linux/interrupt.h>
#include <linux/export.h>
#include "iwl-debug.h"
#include "iwl-devtrace.h"

@@ -81,8 +82,11 @@ void __iwl_ ##fn(struct device *dev, const char *fmt, ...) \
}

__iwl_fn(warn)
EXPORT_SYMBOL_GPL(__iwl_warn);
__iwl_fn(info)
EXPORT_SYMBOL_GPL(__iwl_info);
__iwl_fn(crit)
EXPORT_SYMBOL_GPL(__iwl_crit);

void __iwl_err(struct device *dev, bool rfkill_prefix, bool trace_only,
		const char *fmt, ...)
@@ -103,6 +107,7 @@ void __iwl_err(struct device *dev, bool rfkill_prefix, bool trace_only,
	trace_iwlwifi_err(&vaf);
	va_end(args);
}
EXPORT_SYMBOL_GPL(__iwl_err);

#if defined(CONFIG_IWLWIFI_DEBUG) || defined(CONFIG_IWLWIFI_DEVICE_TRACING)
void __iwl_dbg(struct device *dev,
@@ -125,4 +130,5 @@ void __iwl_dbg(struct device *dev,
	trace_iwlwifi_dbg(level, in_interrupt(), function, &vaf);
	va_end(args);
}
EXPORT_SYMBOL_GPL(__iwl_dbg);
#endif
+5 −0
Original line number Diff line number Diff line
@@ -42,4 +42,9 @@ EXPORT_TRACEPOINT_SYMBOL(iwlwifi_dev_ucode_event);
EXPORT_TRACEPOINT_SYMBOL(iwlwifi_dev_ucode_error);
EXPORT_TRACEPOINT_SYMBOL(iwlwifi_dev_ucode_cont_event);
EXPORT_TRACEPOINT_SYMBOL(iwlwifi_dev_ucode_wrap_event);
EXPORT_TRACEPOINT_SYMBOL(iwlwifi_info);
EXPORT_TRACEPOINT_SYMBOL(iwlwifi_warn);
EXPORT_TRACEPOINT_SYMBOL(iwlwifi_crit);
EXPORT_TRACEPOINT_SYMBOL(iwlwifi_err);
EXPORT_TRACEPOINT_SYMBOL(iwlwifi_dbg);
#endif
Loading