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 -endif - -ifneq ($(CONFIG_TARGET_atheros),) - BUS:=AHB - HAL_TARGET:=ap51 + # 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 - ifneq ($(CONFIG_PCI_SUPPORT),) + ifdef CONFIG_MADWIFI_BUS_PCI BUS:=PCI + else + ifdef CONFIG_MADWIFI_BUS_AHB + BUS:=AHB + endif endif 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_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 + 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 -RATE_CONTROL:=minstrel +ifdef CONFIG_MADWIFI_RCA_MINSTREL + RATE_CONTROL:=minstrel +endif + +ifdef CONFIG_MADWIFI_RCA_ONOE + RATE_CONTROL:=onoe +endif + +ifdef CONFIG_MADWIFI_RCA_AMRR + RATE_CONTROL:=amrr +endif + +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:= \