linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] zd1211rw: Experimental change to add proper monitor support
@ 2010-02-14 23:34 Benoit Papillault
  2010-02-14 23:34 ` [PATCH 2/2] zd1211rw: Set hardware BSSID and set hardware IBSS mode Benoit Papillault
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Benoit Papillault @ 2010-02-14 23:34 UTC (permalink / raw)
  To: dsd, kune; +Cc: linux-wireless, zd1211-devs, Benoit Papillault

Without this patch, monitor mode does not returns all frames. With this patch,
the performance are quite poor if we create a monitor interface. Note :
creating a monitor interface with the "cook" flag has no impact on performance.

Signed-off-by: Benoit Papillault <benoit.papillault@free.fr>
---
 drivers/net/wireless/zd1211rw/zd_mac.c |   20 +++++++++++++++++++-
 1 files changed, 19 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 2d555cc..9cb6cbc 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -904,8 +904,26 @@ static int zd_op_config(struct ieee80211_hw *hw, u32 changed)
 {
 	struct zd_mac *mac = zd_hw_mac(hw);
 	struct ieee80211_conf *conf = &hw->conf;
+	int ret;
 
-	return zd_chip_set_channel(&mac->chip, conf->channel->hw_value);
+	if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
+		/*
+		 * Warning : enabling this register kills RX & TX
+		 * performance
+		 */
+		u32 cr_sniffer = !!(conf->flags & IEEE80211_CONF_MONITOR);
+		ret = zd_iowrite32(&mac->chip, CR_SNIFFER_ON, cr_sniffer);
+		if (!ret)
+			return ret;
+	}
+
+	if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
+		ret = zd_chip_set_channel(&mac->chip, conf->channel->hw_value);
+		if (!ret)
+			return ret;
+	}
+
+	return 0;
 }
 
 static void zd_process_intr(struct work_struct *work)
-- 
1.5.6.5


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] zd1211rw: Set hardware BSSID and set hardware IBSS mode
  2010-02-14 23:34 [PATCH 1/2] zd1211rw: Experimental change to add proper monitor support Benoit Papillault
@ 2010-02-14 23:34 ` Benoit Papillault
  2010-02-15  0:28 ` [PATCH 1/2] zd1211rw: Experimental change to add proper monitor support Gábor Stefanik
  2010-02-15  7:33 ` [PATCH v2] zd1211rw: Set hardware BSSID and set hardware IBSS mode Benoit Papillault
  2 siblings, 0 replies; 7+ messages in thread
From: Benoit Papillault @ 2010-02-14 23:34 UTC (permalink / raw)
  To: dsd, kune; +Cc: linux-wireless, zd1211-devs, Benoit Papillault

Both changes allow for proper TSF synchronisation in STA and IBSS mode.

Signed-off-by: Benoit Papillault <benoit.papillault@free.fr>
---
 drivers/net/wireless/zd1211rw/zd_chip.c |   21 ++++++++++++++++++++-
 drivers/net/wireless/zd1211rw/zd_chip.h |    1 +
 drivers/net/wireless/zd1211rw/zd_mac.c  |    4 +++-
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/zd1211rw/zd_chip.c b/drivers/net/wireless/zd1211rw/zd_chip.c
index 7ca95c4..f525459 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.c
+++ b/drivers/net/wireless/zd1211rw/zd_chip.c
@@ -397,6 +397,25 @@ int zd_write_mac_addr(struct zd_chip *chip, const u8 *mac_addr)
 	return r;
 }
 
+int zd_write_bssid(struct zd_chip *chip, const u8 *bssid)
+{
+	struct zd_ioreq32 ioreqs[] = {
+		{ CR_BSSID_P1, 0 },
+		{ CR_BSSID_P2, 0 }
+	};
+
+	if (bssid) {
+		ioreqs[0].value = (bssid[3] << 24)
+				| (bssid[2] << 16)
+				| (bssid[1] <<  8)
+				|  bssid[0];
+		ioreqs[1].value = (bssid[5] <<  8)
+				|  bssid[4];
+	}
+
+	return zd_iowrite32a(chip, ioreqs, ARRAY_SIZE(ioreqs));
+}
+
 int zd_read_regdomain(struct zd_chip *chip, u8 *regdomain)
 {
 	int r;
@@ -806,7 +825,7 @@ static int hw_init_hmac(struct zd_chip *chip)
 		{ CR_AFTER_PNP,			0x1 },
 		{ CR_WEP_PROTECT,		0x114 },
 		{ CR_IFS_VALUE,			IFS_VALUE_DEFAULT },
-		{ CR_CAM_MODE,			MODE_AP_WDS},
+		{ CR_CAM_MODE,			MODE_IBSS},
 	};
 
 	ZD_ASSERT(mutex_is_locked(&chip->mutex));
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.h b/drivers/net/wireless/zd1211rw/zd_chip.h
index f8bbf7d..7b0c58c 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.h
+++ b/drivers/net/wireless/zd1211rw/zd_chip.h
@@ -881,6 +881,7 @@ static inline u8 _zd_chip_get_channel(struct zd_chip *chip)
 u8  zd_chip_get_channel(struct zd_chip *chip);
 int zd_read_regdomain(struct zd_chip *chip, u8 *regdomain);
 int zd_write_mac_addr(struct zd_chip *chip, const u8 *mac_addr);
+int zd_write_bssid(struct zd_chip *chip, const u8 *bssid);
 int zd_chip_switch_radio_on(struct zd_chip *chip);
 int zd_chip_switch_radio_off(struct zd_chip *chip);
 int zd_chip_enable_int(struct zd_chip *chip);
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 9cb6cbc..2559da5 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -1096,7 +1096,9 @@ static void zd_op_bss_info_changed(struct ieee80211_hw *hw,
 	mac->associated = associated;
 	spin_unlock_irq(&mac->lock);
 
-	/* TODO: do hardware bssid filtering */
+	if (changes & BSS_CHANGED_BSSID) {
+		zd_write_bssid(&mac->chip, bss_conf->bssid);
+	}
 
 	if (changes & BSS_CHANGED_ERP_PREAMBLE) {
 		spin_lock_irqsave(&mac->lock, flags);
-- 
1.5.6.5


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] zd1211rw: Experimental change to add proper monitor support
  2010-02-14 23:34 [PATCH 1/2] zd1211rw: Experimental change to add proper monitor support Benoit Papillault
  2010-02-14 23:34 ` [PATCH 2/2] zd1211rw: Set hardware BSSID and set hardware IBSS mode Benoit Papillault
@ 2010-02-15  0:28 ` Gábor Stefanik
  2010-02-15  7:24   ` [zd1211-devs] " Benoit PAPILLAULT
  2010-02-15  7:33 ` [PATCH v2] zd1211rw: Set hardware BSSID and set hardware IBSS mode Benoit Papillault
  2 siblings, 1 reply; 7+ messages in thread
From: Gábor Stefanik @ 2010-02-15  0:28 UTC (permalink / raw)
  To: Benoit Papillault; +Cc: dsd, kune, linux-wireless, zd1211-devs

On Mon, Feb 15, 2010 at 12:34 AM, Benoit Papillault
<benoit.papillault@free.fr> wrote:
> Without this patch, monitor mode does not returns all frames. With this patch,
> the performance are quite poor if we create a monitor interface. Note :
> creating a monitor interface with the "cook" flag has no impact on performance.
>
> Signed-off-by: Benoit Papillault <benoit.papillault@free.fr>
> ---
>  drivers/net/wireless/zd1211rw/zd_mac.c |   20 +++++++++++++++++++-
>  1 files changed, 19 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
> index 2d555cc..9cb6cbc 100644
> --- a/drivers/net/wireless/zd1211rw/zd_mac.c
> +++ b/drivers/net/wireless/zd1211rw/zd_mac.c
> @@ -904,8 +904,26 @@ static int zd_op_config(struct ieee80211_hw *hw, u32 changed)
>  {
>        struct zd_mac *mac = zd_hw_mac(hw);
>        struct ieee80211_conf *conf = &hw->conf;
> +       int ret;
>
> -       return zd_chip_set_channel(&mac->chip, conf->channel->hw_value);
> +       if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
> +               /*
> +                * Warning : enabling this register kills RX & TX
> +                * performance
> +                */
> +               u32 cr_sniffer = !!(conf->flags & IEEE80211_CONF_MONITOR);
> +               ret = zd_iowrite32(&mac->chip, CR_SNIFFER_ON, cr_sniffer);
> +               if (!ret)
> +                       return ret;

Your logic is the wrong way around. You should return if nonzero, not if zero.

> +       }
> +
> +       if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
> +               ret = zd_chip_set_channel(&mac->chip, conf->channel->hw_value);
> +               if (!ret)
> +                       return ret;
> +       }
> +
> +       return 0;
>  }
>
>  static void zd_process_intr(struct work_struct *work)
> --
> 1.5.6.5
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>



-- 
Vista: [V]iruses, [I]ntruders, [S]pyware, [T]rojans and [A]dware. :-)

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [zd1211-devs] [PATCH 1/2] zd1211rw: Experimental change to add proper monitor support
  2010-02-15  0:28 ` [PATCH 1/2] zd1211rw: Experimental change to add proper monitor support Gábor Stefanik
@ 2010-02-15  7:24   ` Benoit PAPILLAULT
  0 siblings, 0 replies; 7+ messages in thread
From: Benoit PAPILLAULT @ 2010-02-15  7:24 UTC (permalink / raw)
  To: Gábor Stefanik; +Cc: dsd, linux-wireless, zd1211-devs, kune

Gábor Stefanik a écrit :
> On Mon, Feb 15, 2010 at 12:34 AM, Benoit Papillault
> <benoit.papillault@free.fr> wrote:
>   
>> Without this patch, monitor mode does not returns all frames. With this patch,
>> the performance are quite poor if we create a monitor interface. Note :
>> creating a monitor interface with the "cook" flag has no impact on performance.
>>
>> Signed-off-by: Benoit Papillault <benoit.papillault@free.fr>
>> ---
>>  drivers/net/wireless/zd1211rw/zd_mac.c |   20 +++++++++++++++++++-
>>  1 files changed, 19 insertions(+), 1 deletions(-)
>>
>> diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
>> index 2d555cc..9cb6cbc 100644
>> --- a/drivers/net/wireless/zd1211rw/zd_mac.c
>> +++ b/drivers/net/wireless/zd1211rw/zd_mac.c
>> @@ -904,8 +904,26 @@ static int zd_op_config(struct ieee80211_hw *hw, u32 changed)
>>  {
>>        struct zd_mac *mac = zd_hw_mac(hw);
>>        struct ieee80211_conf *conf = &hw->conf;
>> +       int ret;
>>
>> -       return zd_chip_set_channel(&mac->chip, conf->channel->hw_value);
>> +       if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
>> +               /*
>> +                * Warning : enabling this register kills RX & TX
>> +                * performance
>> +                */
>> +               u32 cr_sniffer = !!(conf->flags & IEEE80211_CONF_MONITOR);
>> +               ret = zd_iowrite32(&mac->chip, CR_SNIFFER_ON, cr_sniffer);
>> +               if (!ret)
>> +                       return ret;
>>     
>
> Your logic is the wrong way around. You should return if nonzero, not if zero.
>
>   
>> +       }
>> +
>> +       if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
>> +               ret = zd_chip_set_channel(&mac->chip, conf->channel->hw_value);
>> +               if (!ret)
>> +                       return ret;
>> +       }
>> +
>> +       return 0;
>>  }
>>
>>  static void zd_process_intr(struct work_struct *work)
>> --
>> 1.5.6.5
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>>     
>
>
>
>   
You are right. I will resend a patch.

Regards,
Benoit


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2] zd1211rw: Set hardware BSSID and set hardware IBSS mode
  2010-02-14 23:34 [PATCH 1/2] zd1211rw: Experimental change to add proper monitor support Benoit Papillault
  2010-02-14 23:34 ` [PATCH 2/2] zd1211rw: Set hardware BSSID and set hardware IBSS mode Benoit Papillault
  2010-02-15  0:28 ` [PATCH 1/2] zd1211rw: Experimental change to add proper monitor support Gábor Stefanik
@ 2010-02-15  7:33 ` Benoit Papillault
  2010-02-15 11:42   ` Gábor Stefanik
  2 siblings, 1 reply; 7+ messages in thread
From: Benoit Papillault @ 2010-02-15  7:33 UTC (permalink / raw)
  To: dsd, kune; +Cc: linux-wireless, zd1211-devs, Benoit Papillault

Both changes allow for proper TSF synchronisation in STA and IBSS mode.

v2: Fix error handling logic

Signed-off-by: Benoit Papillault <benoit.papillault@free.fr>
---
 drivers/net/wireless/zd1211rw/zd_chip.c |   21 ++++++++++++++++++++-
 drivers/net/wireless/zd1211rw/zd_chip.h |    1 +
 drivers/net/wireless/zd1211rw/zd_mac.c  |    8 +++++---
 3 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/zd1211rw/zd_chip.c b/drivers/net/wireless/zd1211rw/zd_chip.c
index 7ca95c4..f525459 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.c
+++ b/drivers/net/wireless/zd1211rw/zd_chip.c
@@ -397,6 +397,25 @@ int zd_write_mac_addr(struct zd_chip *chip, const u8 *mac_addr)
 	return r;
 }
 
+int zd_write_bssid(struct zd_chip *chip, const u8 *bssid)
+{
+	struct zd_ioreq32 ioreqs[] = {
+		{ CR_BSSID_P1, 0 },
+		{ CR_BSSID_P2, 0 }
+	};
+
+	if (bssid) {
+		ioreqs[0].value = (bssid[3] << 24)
+				| (bssid[2] << 16)
+				| (bssid[1] <<  8)
+				|  bssid[0];
+		ioreqs[1].value = (bssid[5] <<  8)
+				|  bssid[4];
+	}
+
+	return zd_iowrite32a(chip, ioreqs, ARRAY_SIZE(ioreqs));
+}
+
 int zd_read_regdomain(struct zd_chip *chip, u8 *regdomain)
 {
 	int r;
@@ -806,7 +825,7 @@ static int hw_init_hmac(struct zd_chip *chip)
 		{ CR_AFTER_PNP,			0x1 },
 		{ CR_WEP_PROTECT,		0x114 },
 		{ CR_IFS_VALUE,			IFS_VALUE_DEFAULT },
-		{ CR_CAM_MODE,			MODE_AP_WDS},
+		{ CR_CAM_MODE,			MODE_IBSS},
 	};
 
 	ZD_ASSERT(mutex_is_locked(&chip->mutex));
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.h b/drivers/net/wireless/zd1211rw/zd_chip.h
index f8bbf7d..7b0c58c 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.h
+++ b/drivers/net/wireless/zd1211rw/zd_chip.h
@@ -881,6 +881,7 @@ static inline u8 _zd_chip_get_channel(struct zd_chip *chip)
 u8  zd_chip_get_channel(struct zd_chip *chip);
 int zd_read_regdomain(struct zd_chip *chip, u8 *regdomain);
 int zd_write_mac_addr(struct zd_chip *chip, const u8 *mac_addr);
+int zd_write_bssid(struct zd_chip *chip, const u8 *bssid);
 int zd_chip_switch_radio_on(struct zd_chip *chip);
 int zd_chip_switch_radio_off(struct zd_chip *chip);
 int zd_chip_enable_int(struct zd_chip *chip);
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 9cb6cbc..0de176b 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -913,13 +913,13 @@ static int zd_op_config(struct ieee80211_hw *hw, u32 changed)
 		 */
 		u32 cr_sniffer = !!(conf->flags & IEEE80211_CONF_MONITOR);
 		ret = zd_iowrite32(&mac->chip, CR_SNIFFER_ON, cr_sniffer);
-		if (!ret)
+		if (ret)
 			return ret;
 	}
 
 	if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
 		ret = zd_chip_set_channel(&mac->chip, conf->channel->hw_value);
-		if (!ret)
+		if (ret)
 			return ret;
 	}
 
@@ -1096,7 +1096,9 @@ static void zd_op_bss_info_changed(struct ieee80211_hw *hw,
 	mac->associated = associated;
 	spin_unlock_irq(&mac->lock);
 
-	/* TODO: do hardware bssid filtering */
+	if (changes & BSS_CHANGED_BSSID) {
+		zd_write_bssid(&mac->chip, bss_conf->bssid);
+	}
 
 	if (changes & BSS_CHANGED_ERP_PREAMBLE) {
 		spin_lock_irqsave(&mac->lock, flags);
-- 
1.5.6.5


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] zd1211rw: Set hardware BSSID and set hardware IBSS mode
  2010-02-15  7:33 ` [PATCH v2] zd1211rw: Set hardware BSSID and set hardware IBSS mode Benoit Papillault
@ 2010-02-15 11:42   ` Gábor Stefanik
  2010-02-15 22:26     ` Benoit PAPILLAULT
  0 siblings, 1 reply; 7+ messages in thread
From: Gábor Stefanik @ 2010-02-15 11:42 UTC (permalink / raw)
  To: Benoit Papillault; +Cc: dsd, kune, linux-wireless, zd1211-devs

On Mon, Feb 15, 2010 at 8:33 AM, Benoit Papillault
<benoit.papillault@free.fr> wrote:
> Both changes allow for proper TSF synchronisation in STA and IBSS mode.
>
> v2: Fix error handling logic
>
> Signed-off-by: Benoit Papillault <benoit.papillault@free.fr>
> ---
>  drivers/net/wireless/zd1211rw/zd_chip.c |   21 ++++++++++++++++++++-
>  drivers/net/wireless/zd1211rw/zd_chip.h |    1 +
>  drivers/net/wireless/zd1211rw/zd_mac.c  |    8 +++++---
>  3 files changed, 26 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/wireless/zd1211rw/zd_chip.c b/drivers/net/wireless/zd1211rw/zd_chip.c
> index 7ca95c4..f525459 100644
> --- a/drivers/net/wireless/zd1211rw/zd_chip.c
> +++ b/drivers/net/wireless/zd1211rw/zd_chip.c
> @@ -397,6 +397,25 @@ int zd_write_mac_addr(struct zd_chip *chip, const u8 *mac_addr)
>        return r;
>  }
>
> +int zd_write_bssid(struct zd_chip *chip, const u8 *bssid)
> +{
> +       struct zd_ioreq32 ioreqs[] = {
> +               { CR_BSSID_P1, 0 },
> +               { CR_BSSID_P2, 0 }
> +       };
> +
> +       if (bssid) {
> +               ioreqs[0].value = (bssid[3] << 24)
> +                               | (bssid[2] << 16)
> +                               | (bssid[1] <<  8)
> +                               |  bssid[0];
> +               ioreqs[1].value = (bssid[5] <<  8)
> +                               |  bssid[4];
> +       }
> +
> +       return zd_iowrite32a(chip, ioreqs, ARRAY_SIZE(ioreqs));
> +}
> +
>  int zd_read_regdomain(struct zd_chip *chip, u8 *regdomain)
>  {
>        int r;
> @@ -806,7 +825,7 @@ static int hw_init_hmac(struct zd_chip *chip)
>                { CR_AFTER_PNP,                 0x1 },
>                { CR_WEP_PROTECT,               0x114 },
>                { CR_IFS_VALUE,                 IFS_VALUE_DEFAULT },
> -               { CR_CAM_MODE,                  MODE_AP_WDS},
> +               { CR_CAM_MODE,                  MODE_IBSS},
>        };
>
>        ZD_ASSERT(mutex_is_locked(&chip->mutex));
> diff --git a/drivers/net/wireless/zd1211rw/zd_chip.h b/drivers/net/wireless/zd1211rw/zd_chip.h
> index f8bbf7d..7b0c58c 100644
> --- a/drivers/net/wireless/zd1211rw/zd_chip.h
> +++ b/drivers/net/wireless/zd1211rw/zd_chip.h
> @@ -881,6 +881,7 @@ static inline u8 _zd_chip_get_channel(struct zd_chip *chip)
>  u8  zd_chip_get_channel(struct zd_chip *chip);
>  int zd_read_regdomain(struct zd_chip *chip, u8 *regdomain);
>  int zd_write_mac_addr(struct zd_chip *chip, const u8 *mac_addr);
> +int zd_write_bssid(struct zd_chip *chip, const u8 *bssid);
>  int zd_chip_switch_radio_on(struct zd_chip *chip);
>  int zd_chip_switch_radio_off(struct zd_chip *chip);
>  int zd_chip_enable_int(struct zd_chip *chip);
> diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
> index 9cb6cbc..0de176b 100644
> --- a/drivers/net/wireless/zd1211rw/zd_mac.c
> +++ b/drivers/net/wireless/zd1211rw/zd_mac.c
> @@ -913,13 +913,13 @@ static int zd_op_config(struct ieee80211_hw *hw, u32 changed)
>                 */
>                u32 cr_sniffer = !!(conf->flags & IEEE80211_CONF_MONITOR);
>                ret = zd_iowrite32(&mac->chip, CR_SNIFFER_ON, cr_sniffer);
> -               if (!ret)
> +               if (ret)
>                        return ret;
>        }


Crosstalk from your other patch?

>
>        if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
>                ret = zd_chip_set_channel(&mac->chip, conf->channel->hw_value);
> -               if (!ret)
> +               if (ret)
>                        return ret;
>        }
>
> @@ -1096,7 +1096,9 @@ static void zd_op_bss_info_changed(struct ieee80211_hw *hw,
>        mac->associated = associated;
>        spin_unlock_irq(&mac->lock);
>
> -       /* TODO: do hardware bssid filtering */
> +       if (changes & BSS_CHANGED_BSSID) {
> +               zd_write_bssid(&mac->chip, bss_conf->bssid);
> +       }
>
>        if (changes & BSS_CHANGED_ERP_PREAMBLE) {
>                spin_lock_irqsave(&mac->lock, flags);
> --
> 1.5.6.5
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>



-- 
Vista: [V]iruses, [I]ntruders, [S]pyware, [T]rojans and [A]dware. :-)

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] zd1211rw: Set hardware BSSID and set hardware IBSS mode
  2010-02-15 11:42   ` Gábor Stefanik
@ 2010-02-15 22:26     ` Benoit PAPILLAULT
  0 siblings, 0 replies; 7+ messages in thread
From: Benoit PAPILLAULT @ 2010-02-15 22:26 UTC (permalink / raw)
  To: Gábor Stefanik; +Cc: dsd, kune, linux-wireless, zd1211-devs

Gábor Stefanik a écrit :
> On Mon, Feb 15, 2010 at 8:33 AM, Benoit Papillault
> <benoit.papillault@free.fr> wrote:
>   
>> Both changes allow for proper TSF synchronisation in STA and IBSS mode.
>>
>> v2: Fix error handling logic
>>
>> Signed-off-by: Benoit Papillault <benoit.papillault@free.fr>
>> ---
>>  drivers/net/wireless/zd1211rw/zd_chip.c |   21 ++++++++++++++++++++-
>>  drivers/net/wireless/zd1211rw/zd_chip.h |    1 +
>>  drivers/net/wireless/zd1211rw/zd_mac.c  |    8 +++++---
>>  3 files changed, 26 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/net/wireless/zd1211rw/zd_chip.c b/drivers/net/wireless/zd1211rw/zd_chip.c
>> index 7ca95c4..f525459 100644
>> --- a/drivers/net/wireless/zd1211rw/zd_chip.c
>> +++ b/drivers/net/wireless/zd1211rw/zd_chip.c
>> @@ -397,6 +397,25 @@ int zd_write_mac_addr(struct zd_chip *chip, const u8 *mac_addr)
>>        return r;
>>  }
>>
>> +int zd_write_bssid(struct zd_chip *chip, const u8 *bssid)
>> +{
>> +       struct zd_ioreq32 ioreqs[] = {
>> +               { CR_BSSID_P1, 0 },
>> +               { CR_BSSID_P2, 0 }
>> +       };
>> +
>> +       if (bssid) {
>> +               ioreqs[0].value = (bssid[3] << 24)
>> +                               | (bssid[2] << 16)
>> +                               | (bssid[1] <<  8)
>> +                               |  bssid[0];
>> +               ioreqs[1].value = (bssid[5] <<  8)
>> +                               |  bssid[4];
>> +       }
>> +
>> +       return zd_iowrite32a(chip, ioreqs, ARRAY_SIZE(ioreqs));
>> +}
>> +
>>  int zd_read_regdomain(struct zd_chip *chip, u8 *regdomain)
>>  {
>>        int r;
>> @@ -806,7 +825,7 @@ static int hw_init_hmac(struct zd_chip *chip)
>>                { CR_AFTER_PNP,                 0x1 },
>>                { CR_WEP_PROTECT,               0x114 },
>>                { CR_IFS_VALUE,                 IFS_VALUE_DEFAULT },
>> -               { CR_CAM_MODE,                  MODE_AP_WDS},
>> +               { CR_CAM_MODE,                  MODE_IBSS},
>>        };
>>
>>        ZD_ASSERT(mutex_is_locked(&chip->mutex));
>> diff --git a/drivers/net/wireless/zd1211rw/zd_chip.h b/drivers/net/wireless/zd1211rw/zd_chip.h
>> index f8bbf7d..7b0c58c 100644
>> --- a/drivers/net/wireless/zd1211rw/zd_chip.h
>> +++ b/drivers/net/wireless/zd1211rw/zd_chip.h
>> @@ -881,6 +881,7 @@ static inline u8 _zd_chip_get_channel(struct zd_chip *chip)
>>  u8  zd_chip_get_channel(struct zd_chip *chip);
>>  int zd_read_regdomain(struct zd_chip *chip, u8 *regdomain);
>>  int zd_write_mac_addr(struct zd_chip *chip, const u8 *mac_addr);
>> +int zd_write_bssid(struct zd_chip *chip, const u8 *bssid);
>>  int zd_chip_switch_radio_on(struct zd_chip *chip);
>>  int zd_chip_switch_radio_off(struct zd_chip *chip);
>>  int zd_chip_enable_int(struct zd_chip *chip);
>> diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
>> index 9cb6cbc..0de176b 100644
>> --- a/drivers/net/wireless/zd1211rw/zd_mac.c
>> +++ b/drivers/net/wireless/zd1211rw/zd_mac.c
>> @@ -913,13 +913,13 @@ static int zd_op_config(struct ieee80211_hw *hw, u32 changed)
>>                 */
>>                u32 cr_sniffer = !!(conf->flags & IEEE80211_CONF_MONITOR);
>>                ret = zd_iowrite32(&mac->chip, CR_SNIFFER_ON, cr_sniffer);
>> -               if (!ret)
>> +               if (ret)
>>                        return ret;
>>        }
>>     
>
>
> Crosstalk from your other patch?
>
>   
Oops .. I did something wrong with git rebase I guess. Will resent.

Regards,
Benoit


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-02-15 22:26 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-14 23:34 [PATCH 1/2] zd1211rw: Experimental change to add proper monitor support Benoit Papillault
2010-02-14 23:34 ` [PATCH 2/2] zd1211rw: Set hardware BSSID and set hardware IBSS mode Benoit Papillault
2010-02-15  0:28 ` [PATCH 1/2] zd1211rw: Experimental change to add proper monitor support Gábor Stefanik
2010-02-15  7:24   ` [zd1211-devs] " Benoit PAPILLAULT
2010-02-15  7:33 ` [PATCH v2] zd1211rw: Set hardware BSSID and set hardware IBSS mode Benoit Papillault
2010-02-15 11:42   ` Gábor Stefanik
2010-02-15 22:26     ` Benoit PAPILLAULT

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).