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

Commit e5f5e733 authored by Adrian Bunk's avatar Adrian Bunk Committed by John W. Linville
Browse files

build algorithms into the mac80211 module



The old infrastructure was:
- the default algorithm is built into mac80211
- other algorithms get into their own modules

The implementation of this complicated scheme was horrible
(just look at net/mac80211/Makefile), and anyone adding a new
algorithm would most likely not get it right at his first attempt.

This patch therefore builds all enabled algorithms into the mac80211
module.

The user interface for the rate control algorithms changes as follows:
- first the user can choose which algorithms to enable (currently only
  MAC80211_RC_PID is available)
- if more than one algorithm is enabled (currently not possible since
  only one algorithm is present) the user then chooses the default one

Note:
- MAC80211_RC_PID is always enables for CONFIG_EMBEDDED=n

Technical changes:
- all selected algorithms get into the mac80211 module
- net/mac80211/Makefile can now become much less complicated
- support for rc80211_pid_algo.c being modular is no longer required
- this includes unexporting mesh_plink_broken

Signed-off-by: default avatarAdrian Bunk <bunk@kernel.org>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent bf998f68
Loading
Loading
Loading
Loading
+9 −22
Original line number Diff line number Diff line
@@ -27,6 +27,14 @@ comment "QoS/HT support needs CONFIG_NETDEVICES_MULTIQUEUE"
menu "Rate control algorithm selection"
	depends on MAC80211 != n

config MAC80211_RC_PID
	bool "PID controller based rate control algorithm" if EMBEDDED
	default y
	---help---
	  This option enables a TX rate control algorithm for
	  mac80211 that uses a PID controller to select the TX
	  rate.

choice
	prompt "Default rate control algorithm"
	default MAC80211_RC_DEFAULT_PID
@@ -38,40 +46,19 @@ choice

config MAC80211_RC_DEFAULT_PID
	bool "PID controller based rate control algorithm"
	select MAC80211_RC_PID
	depends on MAC80211_RC_PID
	---help---
	  Select the PID controller based rate control as the
	  default rate control algorithm. You should choose
	  this unless you know what you are doing.

config MAC80211_RC_DEFAULT_NONE
	bool "No default algorithm"
	depends on EMBEDDED
	help
	  Selecting this option will select no default algorithm
	  and allow you to not build any. Do not choose this
	  option unless you know your driver comes with another
	  suitable algorithm.
endchoice

comment "Selecting 'y' for an algorithm will"
comment "build the algorithm into mac80211."

config MAC80211_RC_DEFAULT
	string
	default "pid" if MAC80211_RC_DEFAULT_PID
	default ""

config MAC80211_RC_PID
	tristate "PID controller based rate control algorithm"
	---help---
	  This option enables a TX rate control algorithm for
	  mac80211 that uses a PID controller to select the TX
	  rate.

	  Say Y or M unless you're sure you want to use a
	  different rate control algorithm.

endmenu

config MAC80211_MESH
+4 −14
Original line number Diff line number Diff line
obj-$(CONFIG_MAC80211) += mac80211.o

# objects for PID algorithm
rc80211_pid-y := rc80211_pid_algo.o
rc80211_pid-$(CONFIG_MAC80211_DEBUGFS) += rc80211_pid_debugfs.o

# build helper for PID algorithm
rc-pid-y := $(rc80211_pid-y)
rc-pid-m := rc80211_pid.o

# mac80211 objects
mac80211-y := \
	main.o \
@@ -42,10 +34,8 @@ mac80211-$(CONFIG_MAC80211_MESH) += \
	mesh_plink.o \
	mesh_hwmp.o

# objects for PID algorithm
rc80211_pid-y := rc80211_pid_algo.o
rc80211_pid-$(CONFIG_MAC80211_DEBUGFS) += rc80211_pid_debugfs.o

# Build rate control algorithm(s)
CFLAGS_rc80211_pid_algo.o += -DRC80211_PID_COMPILE
mac80211-$(CONFIG_MAC80211_RC_PID) += $(rc-pid-$(CONFIG_MAC80211_RC_PID))

# Modular rate algorithms are assigned to mac80211-m - make separate modules
obj-m += $(mac80211-m)
mac80211-$(CONFIG_MAC80211_RC_PID) += $(rc80211_pid-y)
+0 −1
Original line number Diff line number Diff line
@@ -262,7 +262,6 @@ void mesh_plink_broken(struct sta_info *sta)
	}
	rcu_read_unlock();
}
EXPORT_SYMBOL(mesh_plink_broken);

/**
 * mesh_path_flush_by_nexthop - Deletes mesh paths if their next hop matches
+1 −3
Original line number Diff line number Diff line
@@ -162,9 +162,7 @@ void rate_control_deinitialize(struct ieee80211_local *local);


/* Rate control algorithms */
#if defined(RC80211_PID_COMPILE) || \
	(defined(CONFIG_MAC80211_RC_PID) && \
	 !defined(CONFIG_MAC80211_RC_PID_MODULE))
#ifdef CONFIG_MAC80211_RC_PID
extern int rc80211_pid_init(void);
extern void rc80211_pid_exit(void);
#else
+0 −10
Original line number Diff line number Diff line
@@ -540,11 +540,6 @@ static struct rate_control_ops mac80211_rcpid = {
#endif
};

MODULE_DESCRIPTION("PID controller based rate control algorithm");
MODULE_AUTHOR("Stefano Brivio");
MODULE_AUTHOR("Mattias Nissler");
MODULE_LICENSE("GPL");

int __init rc80211_pid_init(void)
{
	return ieee80211_rate_control_register(&mac80211_rcpid);
@@ -554,8 +549,3 @@ void rc80211_pid_exit(void)
{
	ieee80211_rate_control_unregister(&mac80211_rcpid);
}

#ifdef CONFIG_MAC80211_RC_PID_MODULE
module_init(rc80211_pid_init);
module_exit(rc80211_pid_exit);
#endif