aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--package/madwifi/Config.in152
-rw-r--r--package/madwifi/Makefile144
2 files changed, 261 insertions, 35 deletions
diff --git a/package/madwifi/Config.in b/package/madwifi/Config.in
new file mode 100644
index 0000000000..d2bc4e0bb2
--- /dev/null
+++ b/package/madwifi/Config.in
@@ -0,0 +1,152 @@
+# MadWifi configuration
+
+config MADWIFI_DEBUG
+ bool "Enable compilation of debugging features"
+ depends on EXPERIMENTAL
+ default n
+
+choice
+ prompt "Bus selection"
+ default MADWIFI_BUS_DEFAULT
+ help
+ This option controls how MadWifi communicates with the hardware.
+
+config MADWIFI_BUS_DEFAULT
+ bool "Use default bus"
+ help
+ This makes MadWifi determine the needed bus based on the target
+ hardware. This will generally work most of the time, but there are some
+ cases where you need to override it.
+
+config MADWIFI_BUS_PCI
+ bool "Use PCI bus"
+ depends on PCI_SUPPORT
+
+config MADWIFI_BUS_AHB
+ bool "Use AHB bus"
+ depends on TARGET_atheros
+
+endchoice
+
+choice
+ prompt "HAL selection"
+ default MADWIFI_HAL_DEFAULT
+ help
+ This option controls how MadWifi communicates with the hardware.
+
+config MADWIFI_HAL_DEFAULT
+ bool "Use default HAL"
+ help
+ This makes MadWifi determine the needed HAL based on the target
+ hardware. This will generally work most of the time, but there are some
+ cases where you need to override it.
+
+config MADWIFI_HAL_MIPS_BE_ELF
+ bool "Use MIPS big endian ELF HAL"
+ depends on mips
+ depends on BIG_ENDIAN
+
+config MADWIFI_HAL_MIPS_LE_ELF
+ bool "Use MIPS little endian ELF HAL"
+ depends on mips
+ depends on !BIG_ENDIAN
+
+config MADWIFI_HAL_I386_ELF
+ bool "Use i386 ELF HAL"
+ depends on TARGET_x86
+
+config MADWIFI_HAL_XSCALE_BE_ELF
+ bool "Use XScale big endian ELF HAL"
+ depends TARGET_ixp4xx
+ depends on BIG_ENDIAN
+
+config MADWIFI_HAL_XSCALE_LE_ELF
+ bool "Use XScale little endian ELF HAL"
+ depends TARGET_iop32x
+ depends on !BIG_ENDIAN
+
+config MADWIFI_HAL_ARMV4_LE_ELF
+ bool "Use ARMV4 little endian ELF HAL"
+ depends TARGET_storm
+ depends on !BIG_ENDIAN
+
+config MADWIFI_HAL_AP30
+ bool "Use AP30 HAL"
+ depends on TARGET_atheros
+
+config MADWIFI_HAL_AP43
+ bool "Use AP43 HAL"
+ depends on TARGET_atheros
+
+config MADWIFI_HAL_AP51
+ bool "Use AP51 HAL"
+ depends on TARGET_atheros
+
+config MADWIFI_HAL_AP61
+ bool "Use AP61 HAL"
+ depends on TARGET_atheros
+
+endchoice
+
+choice
+ prompt "Rate control algorithm selection"
+ default MADWIFI_RCA_MINSTREL
+ help
+ This option controls how MadWifi chooses its bitrate.
+
+config MADWIFI_RCA_MINSTREL
+ bool "Use the Minstrel rate control algorithm"
+ help
+ This code is takes a wandering minstrel approach. Wander around the
+ different rates, singing wherever you can. And then, look at the
+ performance, and make a choice. Note that the wandering minstrel will
+ always wander in directions where he/she feels he/she will get paid
+ the best for his/her work.
+
+config MADWIFI_RCA_ONOE
+ bool "Use the Onoe rate control algorithm"
+ help
+ Onoe is a credit based RCA where the value of the credit is determined
+ by the frequency of successful, erroneous and retransmissions
+ accumulated during a fixed invocation period of 1000 ms. If less than
+ 10% of the packets need to be retransmitted at a particular rate, Onoe
+ keeps increasing its credit point till the threshold value of 10 is
+ reached. At this point, the current transmission rate is increased to
+ the next available higher rate and the process repeated with credit
+ score of zero. Similar logic holds for deducting the credit score and
+ moving to a lower bit-rate for failed packet
+ transmission/retransmission attempts. However, once a bit-rate has
+ been marked as failure in the previous attempt, Onoe will not attempt
+ to select that bit-rate until 10 seconds have elapsed since the last
+ attempt. Due to the manner in which it operates, Onoe is conservative
+ in rate selection and is less sensitive to individual packet failure.
+
+config MADWIFI_RCA_AMRR
+ bool "Use the AMRR rate control algorithm"
+ help
+ AMRR uses Binary Exponential Backoff (BEB) technique to adapt the
+ length (threshold) of the sampling period used to change the values of
+ bit-rate and transmission count parameters. It uses probe packets and
+ depending on their transmission status adaptively changes the threshold
+ value. The adaptation mechanism ensures fewer failed
+ transmission/retransmission and higher throughput by not switching to a
+ higher rate as specified by the backoff mechanism. In addition to this,
+ the AMRR employs heuristics to capture the short-term variations of the
+ channel by judiciously setting the rate and transmission count
+ parameters.
+
+config MADWIFI_RCA_SAMPLERATE
+ bool "Use the SampleRate rate control algorithm"
+ help
+ SampleRate decides on the transmission bit-rate based on the past
+ history of performance; it keeps a record of the number of successive
+ failures, the number of successful transmits and the total transmission
+ time along with the destination for that bit-rate. Stale samples are
+ removed based on a EWMA windowing mechanism. If in the sampling
+ process, no successful acknowledgment is received or the number of
+ packets sent is multiple of 10 on a specific link, it transmits the
+ packet with the highest rate which has not failed 4 successive times.
+ Other than that it transmits packets at the rate which has the lowest
+ average transmission time.
+
+endchoice
diff --git a/package/madwifi/Makefile b/package/madwifi/Makefile
index 697f2b68a5..ef83702a8a 100644
--- a/package/madwifi/Makefile
+++ b/package/madwifi/Makefile
@@ -25,48 +25,115 @@ PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(if $(PKG_BRANCH),$(PKG_BRANCH),madwifi-trun
include $(INCLUDE_DIR)/package.mk
-# MADWIFI_DEBUG=1
+ifdef CONFIG_MADWIFI_BUS_DEFAULT
+ ifneq ($(CONFIG_TARGET_atheros),)
+ BUS:=AHB
+ else
+ ifneq ($(CONFIG_PCI_SUPPORT),)
+ BUS:=PCI
+ endif
+ endif
-ifeq ($(ARCH),mips)
- HAL_TARGET:=mips-be-elf
-endif
-ifeq ($(ARCH),mipsel)
- HAL_TARGET:=mips-le-elf
-endif
-ifeq ($(ARCH),i386)
- HAL_TARGET:=i386-elf
-endif
-ifeq ($(ARCH),i686)
- HAL_TARGET:=i386-elf
-endif
-ifeq ($(BOARD),ixp4xx)
- HAL_TARGET:=xscale-be-elf
-endif
-ifeq ($(BOARD),iop32x)
- HAL_TARGET:=xscale-le-elf
-endif
-ifeq ($(ARCH),powerpc)
- HAL_TARGET:=powerpc-be-elf
-endif
-ifeq ($(BOARD),storm)
- HAL_TARGET:=armv4-le-elf
+ # XXX: remove this check later when we have PCI support properly detected on all targets
+ ifneq ($(CONFIG_TARGET_ar7)$(CONFIG_TARGET_uml),)
+ BUS:=
+ endif
+else
+ ifdef CONFIG_MADWIFI_BUS_PCI
+ BUS:=PCI
+ else
+ ifdef CONFIG_MADWIFI_BUS_AHB
+ BUS:=AHB
+ endif
+ endif
endif
-ifneq ($(CONFIG_TARGET_atheros),)
- BUS:=AHB
- HAL_TARGET:=ap51
+ifdef CONFIG_MADWIFI_HAL_DEFAULT
+ ifeq ($(ARCH),mips)
+ HAL_TARGET:=mips-be-elf
+ endif
+ ifeq ($(ARCH),mipsel)
+ HAL_TARGET:=mips-le-elf
+ endif
+ ifeq ($(ARCH),i386)
+ HAL_TARGET:=i386-elf
+ endif
+ ifeq ($(ARCH),i686)
+ HAL_TARGET:=i386-elf
+ endif
+ ifeq ($(BOARD),ixp4xx)
+ HAL_TARGET:=xscale-be-elf
+ endif
+ ifeq ($(BOARD),iop32x)
+ HAL_TARGET:=xscale-le-elf
+ endif
+ ifeq ($(ARCH),powerpc)
+ HAL_TARGET:=powerpc-be-elf
+ endif
+ ifeq ($(BOARD),storm)
+ HAL_TARGET:=armv4-le-elf
+ endif
+ ifneq ($(CONFIG_TARGET_atheros),)
+ HAL_TARGET:=ap51
+ endif
else
- ifneq ($(CONFIG_PCI_SUPPORT),)
- BUS:=PCI
+ ifdef CONFIG_MADWIFI_HAL_MIPS_BE_ELF
+ HAL_TARGET:=mips-be-elf
+ endif
+
+ ifdef CONFIG_MADWIFI_HAL_MIPS_LE_ELF
+ HAL_TARGET:=mips-le-elf
endif
+
+ ifdef CONFIG_MADWIFI_HAL_I386_ELF
+ HAL_TARGET:=i386-elf
+ endif
+
+ ifdef CONFIG_MADWIFI_HAL_XSCALE_BE_ELF
+ HAL_TARGET:=xscale-be-elf
+ endif
+
+ ifdef CONFIG_MADWIFI_HAL_XSCALE_LE_ELF
+ HAL_TARGET:=xscale-le-elf
+ endif
+
+ ifdef CONFIG_MADWIFI_HAL_ARMV4_LE_ELF
+ HAL_TARGET:=armv4-le-elf
+ endif
+
+ ifdef CONFIG_MADWIFI_HAL_AP30
+ HAL_TARGET:=ap30
+ endif
+
+ ifdef CONFIG_MADWIFI_HAL_AP43
+ HAL_TARGET:=ap43
+ endif
+
+ ifdef CONFIG_MADWIFI_HAL_AP51
+ HAL_TARGET:=ap51
+ endif
+
+ ifdef CONFIG_MADWIFI_HAL_AP61
+ HAL_TARGET:=ap61
+ endif
+
+endif
+
+ifdef CONFIG_MADWIFI_RCA_MINSTREL
+ RATE_CONTROL:=minstrel
+endif
+
+ifdef CONFIG_MADWIFI_RCA_ONOE
+ RATE_CONTROL:=onoe
endif
-# XXX: remove this check later when we have PCI support properly detected on all targets
-ifneq ($(CONFIG_TARGET_ar7)$(CONFIG_TARGET_uml),)
- BUS:=
+ifdef CONFIG_MADWIFI_RCA_AMRR
+ RATE_CONTROL:=amrr
endif
-RATE_CONTROL:=minstrel
+ifdef CONFIG_MADWIFI_RCA_SAMPLERATE
+ RATE_CONTROL:=sample
+endif
MADWIFI_FILES:= \
$(PKG_BUILD_DIR)/net80211/wlan.$(LINUX_KMOD_SUFFIX) \
@@ -102,7 +169,7 @@ ifeq ($(findstring PCI,$(BUS)),PCI)
endif
MADWIFI_APPLETS:=80211stats,athchans,athctrl,athkey,athstats,wlanconfig
-ifneq ($(MADWIFI_DEBUG),)
+ifdef CONFIG_MADWIFI_DEBUG
MADWIFI_APPLETS:=$(strip $(MADWIFI_APPLETS)),athdebug,80211debug
endif
@@ -120,6 +187,13 @@ define KernelPackage/madwifi/description
This package contains a driver for Atheros 802.11a/b/g chipsets.
endef
+define KernelPackage/madwifi/config
+ menu "MadWifi Configuration"
+ depends on PACKAGE_kmod-madwifi
+ source "$(SOURCE)/Config.in"
+ endmenu
+endef
+
MAKE_ARGS:= \
PATH="$(TARGET_PATH)" \
ARCH="$(LINUX_KARCH)" \
@@ -131,7 +205,7 @@ MAKE_ARGS:= \
LDOPTS="--no-warn-mismatch " \
ATH_RATE="ath_rate/$(RATE_CONTROL)" \
WARNINGS="-Wno-unused" \
- $(if $(MADWIFI_DEBUG),,DEBUG="") \
+ $(ifndef CONFIG_MADWIFI_DEBUG,DEBUG="") \
DOMULTI=1
MAKE_VARS:= \