From 2e466cf07caa1d473829a342d1ed865dbae3d508 Mon Sep 17 00:00:00 2001 From: tanner Date: Sun, 16 May 2010 19:43:18 +0200 Subject: [PATCH] final updates for v28 --- kernel-power-2.6.28/debian/changelog | 3 +- .../debian/patches/wl1251-monitor-mode.diff | 163 ++++++++++++++++++-- kernel-power-2.6.28/debian/rules | 2 +- 3 files changed, 157 insertions(+), 11 deletions(-) diff --git a/kernel-power-2.6.28/debian/changelog b/kernel-power-2.6.28/debian/changelog index e2cd7b3..9034057 100644 --- a/kernel-power-2.6.28/debian/changelog +++ b/kernel-power-2.6.28/debian/changelog @@ -2,10 +2,11 @@ kernel-power (2.6.28-maemo28) fremantle; urgency=low * enabled more QoS modules, IP multiple table+multipath, MMC block bouncing, OABI support + * updated wlan-monitor patch * kernel-power-modules: fix preinit MODULE_PATH to always load current kernel modules * kernel-power-deinstall: improved script, msg boxes, error checking - -- Thomas Tanner Sun, 16 May 2010 13:46:47 +0200 + -- Thomas Tanner Sun, 16 May 2010 18:46:47 +0200 kernel-power (2.6.28-maemo27) fremantle; urgency=low diff --git a/kernel-power-2.6.28/debian/patches/wl1251-monitor-mode.diff b/kernel-power-2.6.28/debian/patches/wl1251-monitor-mode.diff index 2673445..183e2f8 100644 --- a/kernel-power-2.6.28/debian/patches/wl1251-monitor-mode.diff +++ b/kernel-power-2.6.28/debian/patches/wl1251-monitor-mode.diff @@ -1,5 +1,7 @@ ---- kernel-power-2.6.28.orig/drivers/net/wireless/wl12xx/wl1251_cmd.c -+++ kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_cmd.c +Index: kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_cmd.c +=================================================================== +--- kernel-power-2.6.28.orig/drivers/net/wireless/wl12xx/wl1251_cmd.c 2010-05-14 23:59:06.832141497 +0200 ++++ kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_cmd.c 2010-05-14 23:59:07.524273985 +0200 @@ -204,11 +204,11 @@ return 0; } @@ -59,8 +61,10 @@ ret = wl1251_cmd_send(wl, cmd_tx, cmd, sizeof(*cmd)); if (ret < 0) { wl1251_error("tx %s cmd for channel %d failed", ---- kernel-power-2.6.28.orig/drivers/net/wireless/wl12xx/wl1251_cmd.h -+++ kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_cmd.h +Index: kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_cmd.h +=================================================================== +--- kernel-power-2.6.28.orig/drivers/net/wireless/wl12xx/wl1251_cmd.h 2010-05-14 23:59:06.832141497 +0200 ++++ kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_cmd.h 2010-05-14 23:59:07.524273985 +0200 @@ -35,7 +35,8 @@ int wl1251_cmd_configure(struct wl1251 *wl, u16 id, void *buf, size_t len); int wl1251_cmd_vbm(struct wl1251 *wl, u8 identity, @@ -71,8 +75,19 @@ int wl1251_cmd_join(struct wl1251 *wl, u8 bss_type, u8 channel, u16 beacon_interval, u8 dtim_interval); int wl1251_cmd_ps_mode(struct wl1251 *wl, u8 ps_mode); ---- kernel-power-2.6.28.orig/drivers/net/wireless/wl12xx/wl1251_init.c -+++ kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_init.c +Index: kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_init.c +=================================================================== +--- kernel-power-2.6.28.orig/drivers/net/wireless/wl12xx/wl1251_init.c 2010-05-14 23:59:07.063992150 +0200 ++++ kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_init.c 2010-05-15 00:46:16.884045939 +0200 +@@ -35,7 +35,7 @@ + { + int ret; + +- ret = wl1251_acx_feature_cfg(wl); ++ ret = wl1251_acx_feature_cfg(wl, DF_SNIFF_MODE_ENABLE); + if (ret < 0) { + wl1251_warning("couldn't set feature config"); + return ret; @@ -399,8 +399,13 @@ if (ret < 0) goto out_free_data_path; @@ -89,8 +104,10 @@ if (ret < 0) goto out_free_data_path; ---- kernel-power-2.6.28.orig/drivers/net/wireless/wl12xx/wl1251_main.c -+++ kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_main.c +Index: kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_main.c +=================================================================== +--- kernel-power-2.6.28.orig/drivers/net/wireless/wl12xx/wl1251_main.c 2010-05-14 23:59:07.063992150 +0200 ++++ kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_main.c 2010-05-15 03:33:55.871890108 +0200 @@ -667,7 +667,11 @@ if (ret < 0) return ret; @@ -104,7 +121,40 @@ if (ret < 0) return ret; -@@ -1180,6 +1184,13 @@ +@@ -967,6 +971,12 @@ + goto out; + } + ++ ret = wl1251_acx_feature_cfg(wl, 0); ++ if (ret < 0) { ++ wl1251_warning("couldn't set feature config"); ++ goto out; ++ } ++ + wl->vif = conf->vif; + + switch (conf->type) { +@@ -998,10 +1008,19 @@ + struct ieee80211_if_init_conf *conf) + { + struct wl1251 *wl = hw->priv; ++ int ret = 0; + + mutex_lock(&wl->mutex); ++ + wl1251_debug(DEBUG_MAC80211, "mac80211 remove interface"); ++ + wl->vif = NULL; ++ ++ ret = wl1251_acx_feature_cfg(wl, DF_SNIFF_MODE_ENABLE); ++ if (ret < 0) { ++ wl1251_warning("couldn't set feature config"); ++ } ++ + mutex_unlock(&wl->mutex); + } + +@@ -1180,6 +1199,13 @@ if (ret < 0) goto out; @@ -118,3 +168,98 @@ wl->channel = channel; if (conf->flags & IEEE80211_CONF_PS && !wl->psm_requested) { +Index: kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_acx.c +=================================================================== +--- kernel-power-2.6.28.orig/drivers/net/wireless/wl12xx/wl1251_acx.c 2010-05-15 00:00:22.995807778 +0200 ++++ kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_acx.c 2010-05-15 00:14:02.111891358 +0200 +@@ -212,7 +212,7 @@ + return ret; + } + +-int wl1251_acx_feature_cfg(struct wl1251 *wl) ++int wl1251_acx_feature_cfg(struct wl1251 *wl, u32 data_flow_options) + { + struct acx_feature_config *feature; + int ret; +@@ -226,7 +226,7 @@ + } + + /* DF_ENCRYPTION_DISABLE and DF_SNIFF_MODE_ENABLE are disabled */ +- feature->data_flow_options = 0; ++ feature->data_flow_options = data_flow_options; + feature->options = 0; + + ret = wl1251_cmd_configure(wl, ACX_FEATURE_CFG, +Index: kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_acx.h +=================================================================== +--- kernel-power-2.6.28.orig/drivers/net/wireless/wl12xx/wl1251_acx.h 2010-05-15 00:01:16.660049057 +0200 ++++ kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_acx.h 2010-05-15 00:14:27.776191658 +0200 +@@ -1454,7 +1454,7 @@ + int wl1251_acx_sleep_auth(struct wl1251 *wl, u8 sleep_auth); + int wl1251_acx_fw_version(struct wl1251 *wl, char *buf, size_t len); + int wl1251_acx_tx_power(struct wl1251 *wl, int power); +-int wl1251_acx_feature_cfg(struct wl1251 *wl); ++int wl1251_acx_feature_cfg(struct wl1251 *wl, u32 data_flow_options); + int wl1251_acx_mem_map(struct wl1251 *wl, + struct acx_header *mem_map, size_t len); + int wl1251_acx_data_path_params(struct wl1251 *wl, +Index: kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_rx.c +=================================================================== +--- kernel-power-2.6.28.orig/drivers/net/wireless/wl12xx/wl1251_rx.c 2010-05-16 15:04:08.279402004 +0200 ++++ kernel-power-2.6.28/drivers/net/wireless/wl12xx/wl1251_rx.c 2010-05-16 18:56:57.075800531 +0200 +@@ -100,7 +100,54 @@ + status->flag |= RX_FLAG_FAILED_FCS_CRC; + + +- /* FIXME: set status->rate_idx */ ++ switch (desc->rate) { ++ /* skip 1 and 12 Mbps because they have same value 0x0a */ ++ case RATE_2MBPS: ++ status->rate_idx = 1; ++ break; ++ case RATE_5_5MBPS: ++ status->rate_idx = 2; ++ break; ++ case RATE_11MBPS: ++ status->rate_idx = 3; ++ break; ++ case RATE_6MBPS: ++ status->rate_idx = 4; ++ break; ++ case RATE_9MBPS: ++ status->rate_idx = 5; ++ break; ++ case RATE_18MBPS: ++ status->rate_idx = 7; ++ break; ++ case RATE_24MBPS: ++ status->rate_idx = 8; ++ break; ++ case RATE_36MBPS: ++ status->rate_idx = 9; ++ break; ++ case RATE_48MBPS: ++ status->rate_idx = 10; ++ break; ++ case RATE_54MBPS: ++ status->rate_idx = 11; ++ break; ++ } ++ ++ /* for 1 and 12 Mbps we have to check the modulation */ ++ if (desc->rate == RATE_1MBPS) { ++ if ((desc->mod_pre & OFDM_RATE_BIT) == 0) { ++ /* CCK -> RATE_1MBPS*/ ++ status->rate_idx = 0; ++ } else { ++ /* OFDM -> RATE_12MBPS */ ++ status->rate_idx = 6; ++ } ++ } ++ ++ if ((desc->mod_pre & SHORT_PREAMBLE_BIT) != 0) { ++ status->flag |= RX_FLAG_SHORTPRE; ++ } + } + + static void wl1251_rx_body(struct wl1251 *wl, diff --git a/kernel-power-2.6.28/debian/rules b/kernel-power-2.6.28/debian/rules index 81e822d..5b5f558 100644 --- a/kernel-power-2.6.28/debian/rules +++ b/kernel-power-2.6.28/debian/rules @@ -42,8 +42,8 @@ endif configure-stamp: dh_testdir + #$(MAKE) mrproper KBUILD_OUTPUT=$(CURDIR) mkdir -p $(BUILDTMP) - $(MAKE) mrproper KBUILD_OUTPUT=$(CURDIR) $(MAKE) clean QUILT_PATCHES=debian/patches quilt push -a -q || test $$? = 2 cp debian/$(DEFCONFIG) arch/arm/configs/ -- 1.7.9.5