linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
@ 2007-02-21 16:02 Ivo van Doorn
  2007-02-21 16:37 ` Michael Buesch
  0 siblings, 1 reply; 9+ messages in thread
From: Ivo van Doorn @ 2007-02-21 16:02 UTC (permalink / raw)
  To: Jiri Benc, John W. Linville, Michael Buesch; +Cc: linux-wireless

Let broadcom use the antenna_tx field for hardware configuration.
I did not check if the device is also capable of RX antenna selection,
but current implementation only suggested support for the TX antenna.

Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>

---

diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
index cdce227..580ea33 100644
--- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
+++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
@@ -2609,7 +2609,7 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
 	int antenna = -1;
 	int err = 0;
 
-	switch (conf->antenna_sel) {
+	switch (conf->antenna_sel_tx) {
 	case 0: /* default/diversity */
 		antenna = BCM43xx_ANTENNA_DEFAULT;
 		break;
diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
index 71cba92..cfc84cd 100644
--- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
+++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
@@ -281,7 +281,7 @@ static void generate_txhdr_fw4(struct bcm43xx_wldev *dev,
 		phy_ctl |= BCM43xx_TX4_PHY_OFDM;
 	if (dev->short_preamble)
 		phy_ctl |= BCM43xx_TX4_PHY_SHORTPRMBL;
-	switch (txctl->antenna_sel) {
+	switch (txctl->antenna_sel_tx) {
 	case 0:
 		phy_ctl |= BCM43xx_TX4_PHY_ANTLAST;
 		break;

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

* Re: [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
  2007-02-21 16:02 [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna Ivo van Doorn
@ 2007-02-21 16:37 ` Michael Buesch
  2007-02-21 16:44   ` Ivo van Doorn
  0 siblings, 1 reply; 9+ messages in thread
From: Michael Buesch @ 2007-02-21 16:37 UTC (permalink / raw)
  To: Ivo van Doorn; +Cc: Jiri Benc, John W. Linville, linux-wireless

On Wednesday 21 February 2007 17:02, Ivo van Doorn wrote:
> Let broadcom use the antenna_tx field for hardware configuration.
> I did not check if the device is also capable of RX antenna selection,
> but current implementation only suggested support for the TX antenna.
> 
> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
> 
> ---
> 
> diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> index cdce227..580ea33 100644
> --- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> +++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> @@ -2609,7 +2609,7 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
>  	int antenna = -1;
>  	int err = 0;
>  
> -	switch (conf->antenna_sel) {
> +	switch (conf->antenna_sel_tx) {

Nope, this is conf->antenna_sel_rx
;)

-- 
Greetings Michael.

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

* Re: [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
  2007-02-21 16:37 ` Michael Buesch
@ 2007-02-21 16:44   ` Ivo van Doorn
  2007-02-21 16:51     ` Michael Buesch
  0 siblings, 1 reply; 9+ messages in thread
From: Ivo van Doorn @ 2007-02-21 16:44 UTC (permalink / raw)
  To: Michael Buesch; +Cc: Jiri Benc, John W. Linville, linux-wireless

On Wednesday 21 February 2007 17:37, Michael Buesch wrote:
> On Wednesday 21 February 2007 17:02, Ivo van Doorn wrote:
> > Let broadcom use the antenna_tx field for hardware configuration.
> > I did not check if the device is also capable of RX antenna selection,
> > but current implementation only suggested support for the TX antenna.
> > 
> > Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
> > 
> > ---
> > 
> > diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> > index cdce227..580ea33 100644
> > --- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> > +++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> > @@ -2609,7 +2609,7 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
> >  	int antenna = -1;
> >  	int err = 0;
> >  
> > -	switch (conf->antenna_sel) {
> > +	switch (conf->antenna_sel_tx) {
> 
> Nope, this is conf->antenna_sel_rx
> ;)

On further inspection not even that. :P
The outcome of that switch is stored in the antenna variable, which is used with

	bcm43xx_mgmtframe_txantenna(dev, antenna);
	bcm43xx_set_rx_antenna(dev, antenna);

So I guess that needs to be fixed to create a switch statement for
the RX antenna and one for the TX antenna?

Ivo

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

* Re: [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
  2007-02-21 16:44   ` Ivo van Doorn
@ 2007-02-21 16:51     ` Michael Buesch
  2007-02-21 16:52       ` Ivo van Doorn
  2007-02-21 17:06       ` Ivo van Doorn
  0 siblings, 2 replies; 9+ messages in thread
From: Michael Buesch @ 2007-02-21 16:51 UTC (permalink / raw)
  To: Ivo van Doorn; +Cc: Jiri Benc, John W. Linville, linux-wireless

On Wednesday 21 February 2007 17:44, Ivo van Doorn wrote:
> On Wednesday 21 February 2007 17:37, Michael Buesch wrote:
> > On Wednesday 21 February 2007 17:02, Ivo van Doorn wrote:
> > > Let broadcom use the antenna_tx field for hardware configuration.
> > > I did not check if the device is also capable of RX antenna selection,
> > > but current implementation only suggested support for the TX antenna.
> > > 
> > > Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
> > > 
> > > ---
> > > 
> > > diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> > > index cdce227..580ea33 100644
> > > --- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> > > +++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> > > @@ -2609,7 +2609,7 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
> > >  	int antenna = -1;
> > >  	int err = 0;
> > >  
> > > -	switch (conf->antenna_sel) {
> > > +	switch (conf->antenna_sel_tx) {
> > 
> > Nope, this is conf->antenna_sel_rx
> > ;)
> 
> On further inspection not even that. :P
> The outcome of that switch is stored in the antenna variable, which is used with
> 
> 	bcm43xx_mgmtframe_txantenna(dev, antenna);
> 	bcm43xx_set_rx_antenna(dev, antenna);
> 
> So I guess that needs to be fixed to create a switch statement for
> the RX antenna and one for the TX antenna?

Ah, yeah. I didn't have the complete code for this in my head. :)

I'd rather like to have a helper function
int bcm43xx_antenna_from_ieee80211(u8 antenna)
which includes the switch statement and use it twice in the
config callback. Wanna do that?

-- 
Greetings Michael.

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

* Re: [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
  2007-02-21 16:51     ` Michael Buesch
@ 2007-02-21 16:52       ` Ivo van Doorn
  2007-02-21 17:06       ` Ivo van Doorn
  1 sibling, 0 replies; 9+ messages in thread
From: Ivo van Doorn @ 2007-02-21 16:52 UTC (permalink / raw)
  To: Michael Buesch; +Cc: Jiri Benc, John W. Linville, linux-wireless

> > On further inspection not even that. :P
> > The outcome of that switch is stored in the antenna variable, which is used with
> > 
> > 	bcm43xx_mgmtframe_txantenna(dev, antenna);
> > 	bcm43xx_set_rx_antenna(dev, antenna);
> > 
> > So I guess that needs to be fixed to create a switch statement for
> > the RX antenna and one for the TX antenna?
> 
> Ah, yeah. I didn't have the complete code for this in my head. :)
> 
> I'd rather like to have a helper function
> int bcm43xx_antenna_from_ieee80211(u8 antenna)
> which includes the switch statement and use it twice in the
> config callback. Wanna do that?

No problem, I will resend this patch with that helper function added.

Ivo

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

* Re: [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
  2007-02-21 16:51     ` Michael Buesch
  2007-02-21 16:52       ` Ivo van Doorn
@ 2007-02-21 17:06       ` Ivo van Doorn
  2007-02-21 17:19         ` Michael Buesch
  1 sibling, 1 reply; 9+ messages in thread
From: Ivo van Doorn @ 2007-02-21 17:06 UTC (permalink / raw)
  To: Michael Buesch; +Cc: Jiri Benc, John W. Linville, linux-wireless

> > > Nope, this is conf->antenna_sel_rx
> > > ;)
> > 
> > On further inspection not even that. :P
> > The outcome of that switch is stored in the antenna variable, which is used with
> > 
> > 	bcm43xx_mgmtframe_txantenna(dev, antenna);
> > 	bcm43xx_set_rx_antenna(dev, antenna);
> > 
> > So I guess that needs to be fixed to create a switch statement for
> > the RX antenna and one for the TX antenna?
> 
> Ah, yeah. I didn't have the complete code for this in my head. :)
> 
> I'd rather like to have a helper function
> int bcm43xx_antenna_from_ieee80211(u8 antenna)
> which includes the switch statement and use it twice in the
> config callback. Wanna do that?

Fixed. This will make the bcm43xx driver make use of both
RX and TX antenna selection capabilities.

Signed-off-by: Ivo van Doorn<IvDoorn@gmail.com>

---

diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
index cdce227..1256549 100644
--- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
+++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
@@ -2606,22 +2606,12 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
 	struct bcm43xx_phy *phy;
 	unsigned long flags;
 	unsigned int new_phymode = 0xFFFF;
-	int antenna = -1;
+	int antenna_tx;
+	int antenna_rx;
 	int err = 0;
 
-	switch (conf->antenna_sel) {
-	case 0: /* default/diversity */
-		antenna = BCM43xx_ANTENNA_DEFAULT;
-		break;
-	case 1: /* Antenna 0 */
-		antenna = BCM43xx_ANTENNA0;
-		break;
-	case 2: /* Antenna 1 */
-		antenna = BCM43xx_ANTENNA1;
-		break;
-	default:
-		assert(0);
-	}
+	antenna_tx = bcm43xx_antenna_from_ieee80211(conf->antenna_sel_tx);
+	antenna_rx = bcm43xx_antenna_from_ieee80211(conf->antenna_sel_rx);
 
 	mutex_lock(&wl->mutex);
 
@@ -2682,8 +2672,8 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
 	}
 
 	/* Antennas for RX and management frame TX. */
-	bcm43xx_mgmtframe_txantenna(dev, antenna);
-	bcm43xx_set_rx_antenna(dev, antenna);
+	bcm43xx_mgmtframe_txantenna(dev, antenna_tx);
+	bcm43xx_set_rx_antenna(dev, antenna_rx);
 
 	/* Update templates for AP mode. */
 	if (bcm43xx_is_mode(wl, IEEE80211_IF_TYPE_AP))
diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h
index e56efc1..bba6606 100644
--- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h
+++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h
@@ -110,6 +110,22 @@ int bcm43xx_is_ofdm_rate(int rate)
 }
 
 static inline
+int bcm43xx_antenna_from_ieee80211(u8 antenna)
+{
+	switch (antenna) {
+	case 0: /* default/diversity */
+		return BCM43xx_ANTENNA_DEFAULT;
+	case 1: /* Antenna 0 */
+		return BCM43xx_ANTENNA0;
+	case 2: /* Antenna 1 */
+		return BCM43xx_ANTENNA1;
+	default:
+		assert(0);
+		return -EINVAL;
+	}
+}
+
+static inline
 int bcm43xx_is_hw_radio_enabled(struct bcm43xx_wldev *dev)
 {
 	/* function to return state of hardware enable of radio
diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
index 71cba92..cfc84cd 100644
--- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
+++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
@@ -281,7 +281,7 @@ static void generate_txhdr_fw4(struct bcm43xx_wldev *dev,
 		phy_ctl |= BCM43xx_TX4_PHY_OFDM;
 	if (dev->short_preamble)
 		phy_ctl |= BCM43xx_TX4_PHY_SHORTPRMBL;
-	switch (txctl->antenna_sel) {
+	switch (txctl->antenna_sel_tx) {
 	case 0:
 		phy_ctl |= BCM43xx_TX4_PHY_ANTLAST;
 		break;

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

* Re: [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
  2007-02-21 17:06       ` Ivo van Doorn
@ 2007-02-21 17:19         ` Michael Buesch
  2007-02-21 17:24           ` Ivo van Doorn
  0 siblings, 1 reply; 9+ messages in thread
From: Michael Buesch @ 2007-02-21 17:19 UTC (permalink / raw)
  To: Ivo van Doorn; +Cc: Jiri Benc, John W. Linville, linux-wireless

On Wednesday 21 February 2007 18:06, Ivo van Doorn wrote:
> diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> index cdce227..1256549 100644
> --- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> +++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> @@ -2606,22 +2606,12 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
>  	struct bcm43xx_phy *phy;
>  	unsigned long flags;
>  	unsigned int new_phymode = 0xFFFF;
> -	int antenna = -1;
> +	int antenna_tx;
> +	int antenna_rx;
>  	int err = 0;
>  
> -	switch (conf->antenna_sel) {
> -	case 0: /* default/diversity */
> -		antenna = BCM43xx_ANTENNA_DEFAULT;
> -		break;
> -	case 1: /* Antenna 0 */
> -		antenna = BCM43xx_ANTENNA0;
> -		break;
> -	case 2: /* Antenna 1 */
> -		antenna = BCM43xx_ANTENNA1;
> -		break;
> -	default:
> -		assert(0);
> -	}
> +	antenna_tx = bcm43xx_antenna_from_ieee80211(conf->antenna_sel_tx);
> +	antenna_rx = bcm43xx_antenna_from_ieee80211(conf->antenna_sel_rx);
>  
>  	mutex_lock(&wl->mutex);
>  
> @@ -2682,8 +2672,8 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
>  	}
>  
>  	/* Antennas for RX and management frame TX. */
> -	bcm43xx_mgmtframe_txantenna(dev, antenna);
> -	bcm43xx_set_rx_antenna(dev, antenna);
> +	bcm43xx_mgmtframe_txantenna(dev, antenna_tx);
> +	bcm43xx_set_rx_antenna(dev, antenna_rx);
>  
>  	/* Update templates for AP mode. */
>  	if (bcm43xx_is_mode(wl, IEEE80211_IF_TYPE_AP))
> diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h
> index e56efc1..bba6606 100644
> --- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h
> +++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h
> @@ -110,6 +110,22 @@ int bcm43xx_is_ofdm_rate(int rate)
>  }
>  
>  static inline
> +int bcm43xx_antenna_from_ieee80211(u8 antenna)
> +{
> +	switch (antenna) {
> +	case 0: /* default/diversity */
> +		return BCM43xx_ANTENNA_DEFAULT;
> +	case 1: /* Antenna 0 */
> +		return BCM43xx_ANTENNA0;
> +	case 2: /* Antenna 1 */
> +		return BCM43xx_ANTENNA1;
> +	default:
> +		assert(0);
> +		return -EINVAL;
> +	}
> +}

No, there is no need to inline. Simple static in main.c above
the config callback, please. :)
And simply return BCM43xx_ANTENNA_DEFAULT for the default:
case, so it doesn't break immediately, if someone decides
to add something to d80211.

...But we've almost got it :D
After that you'll get my sign-off.

-- 
Greetings Michael.

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

* Re: [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
  2007-02-21 17:19         ` Michael Buesch
@ 2007-02-21 17:24           ` Ivo van Doorn
  2007-02-21 17:32             ` Michael Buesch
  0 siblings, 1 reply; 9+ messages in thread
From: Ivo van Doorn @ 2007-02-21 17:24 UTC (permalink / raw)
  To: Michael Buesch; +Cc: Jiri Benc, John W. Linville, linux-wireless

> No, there is no need to inline. Simple static in main.c above
> the config callback, please. :)
> And simply return BCM43xx_ANTENNA_DEFAULT for the default:
> case, so it doesn't break immediately, if someone decides
> to add something to d80211.
>
> ...But we've almost got it :D
> After that you'll get my sign-off.

bcm43xx_antenna_from_ieee80211 is no longer inlined,
and it returns BCM43xx_ANTENNA_DEFAULT by default.

Hopefully I got it this time. :)

Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>

---

diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
index cdce227..798427f 100644
--- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
+++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
@@ -2598,6 +2598,20 @@ static int bcm43xx_switch_phymode(struct bcm43xx_wl *wl,
 	return 0;
 }
 
+static int bcm43xx_antenna_from_ieee80211(u8 antenna)
+{
+	switch (antenna) {
+	case 0: /* default/diversity */
+		return BCM43xx_ANTENNA_DEFAULT;
+	case 1: /* Antenna 0 */
+		return BCM43xx_ANTENNA0;
+	case 2: /* Antenna 1 */
+		return BCM43xx_ANTENNA1;
+	default:
+		return BCM43xx_ANTENNA_DEFAULT;
+	}
+}
+
 static int bcm43xx_dev_config(struct ieee80211_hw *hw,
 			      struct ieee80211_conf *conf)
 {
@@ -2606,22 +2620,12 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
 	struct bcm43xx_phy *phy;
 	unsigned long flags;
 	unsigned int new_phymode = 0xFFFF;
-	int antenna = -1;
+	int antenna_tx;
+	int antenna_rx;
 	int err = 0;
 
-	switch (conf->antenna_sel) {
-	case 0: /* default/diversity */
-		antenna = BCM43xx_ANTENNA_DEFAULT;
-		break;
-	case 1: /* Antenna 0 */
-		antenna = BCM43xx_ANTENNA0;
-		break;
-	case 2: /* Antenna 1 */
-		antenna = BCM43xx_ANTENNA1;
-		break;
-	default:
-		assert(0);
-	}
+	antenna_tx = bcm43xx_antenna_from_ieee80211(conf->antenna_sel_tx);
+	antenna_rx = bcm43xx_antenna_from_ieee80211(conf->antenna_sel_rx);
 
 	mutex_lock(&wl->mutex);
 
@@ -2682,8 +2686,8 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
 	}
 
 	/* Antennas for RX and management frame TX. */
-	bcm43xx_mgmtframe_txantenna(dev, antenna);
-	bcm43xx_set_rx_antenna(dev, antenna);
+	bcm43xx_mgmtframe_txantenna(dev, antenna_tx);
+	bcm43xx_set_rx_antenna(dev, antenna_rx);
 
 	/* Update templates for AP mode. */
 	if (bcm43xx_is_mode(wl, IEEE80211_IF_TYPE_AP))
diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
index 71cba92..cfc84cd 100644
--- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
+++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
@@ -281,7 +281,7 @@ static void generate_txhdr_fw4(struct bcm43xx_wldev *dev,
 		phy_ctl |= BCM43xx_TX4_PHY_OFDM;
 	if (dev->short_preamble)
 		phy_ctl |= BCM43xx_TX4_PHY_SHORTPRMBL;
-	switch (txctl->antenna_sel) {
+	switch (txctl->antenna_sel_tx) {
 	case 0:
 		phy_ctl |= BCM43xx_TX4_PHY_ANTLAST;
 		break;

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

* Re: [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
  2007-02-21 17:24           ` Ivo van Doorn
@ 2007-02-21 17:32             ` Michael Buesch
  0 siblings, 0 replies; 9+ messages in thread
From: Michael Buesch @ 2007-02-21 17:32 UTC (permalink / raw)
  To: Ivo van Doorn; +Cc: Jiri Benc, John W. Linville, linux-wireless

On Wednesday 21 February 2007 18:24, Ivo van Doorn wrote:
> > No, there is no need to inline. Simple static in main.c above
> > the config callback, please. :)
> > And simply return BCM43xx_ANTENNA_DEFAULT for the default:
> > case, so it doesn't break immediately, if someone decides
> > to add something to d80211.
> >
> > ...But we've almost got it :D
> > After that you'll get my sign-off.
> 
> bcm43xx_antenna_from_ieee80211 is no longer inlined,
> and it returns BCM43xx_ANTENNA_DEFAULT by default.
> 
> Hopefully I got it this time. :)

Yeah, *clap clap clap* :D

> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>

Signed-off-by: Michael Buesch <mb@bu3sch.de>

> ---
> 
> diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> index cdce227..798427f 100644
> --- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> +++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> @@ -2598,6 +2598,20 @@ static int bcm43xx_switch_phymode(struct bcm43xx_wl *wl,
>  	return 0;
>  }
>  
> +static int bcm43xx_antenna_from_ieee80211(u8 antenna)
> +{
> +	switch (antenna) {
> +	case 0: /* default/diversity */
> +		return BCM43xx_ANTENNA_DEFAULT;
> +	case 1: /* Antenna 0 */
> +		return BCM43xx_ANTENNA0;
> +	case 2: /* Antenna 1 */
> +		return BCM43xx_ANTENNA1;
> +	default:
> +		return BCM43xx_ANTENNA_DEFAULT;
> +	}
> +}
> +
>  static int bcm43xx_dev_config(struct ieee80211_hw *hw,
>  			      struct ieee80211_conf *conf)
>  {
> @@ -2606,22 +2620,12 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
>  	struct bcm43xx_phy *phy;
>  	unsigned long flags;
>  	unsigned int new_phymode = 0xFFFF;
> -	int antenna = -1;
> +	int antenna_tx;
> +	int antenna_rx;
>  	int err = 0;
>  
> -	switch (conf->antenna_sel) {
> -	case 0: /* default/diversity */
> -		antenna = BCM43xx_ANTENNA_DEFAULT;
> -		break;
> -	case 1: /* Antenna 0 */
> -		antenna = BCM43xx_ANTENNA0;
> -		break;
> -	case 2: /* Antenna 1 */
> -		antenna = BCM43xx_ANTENNA1;
> -		break;
> -	default:
> -		assert(0);
> -	}
> +	antenna_tx = bcm43xx_antenna_from_ieee80211(conf->antenna_sel_tx);
> +	antenna_rx = bcm43xx_antenna_from_ieee80211(conf->antenna_sel_rx);
>  
>  	mutex_lock(&wl->mutex);
>  
> @@ -2682,8 +2686,8 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
>  	}
>  
>  	/* Antennas for RX and management frame TX. */
> -	bcm43xx_mgmtframe_txantenna(dev, antenna);
> -	bcm43xx_set_rx_antenna(dev, antenna);
> +	bcm43xx_mgmtframe_txantenna(dev, antenna_tx);
> +	bcm43xx_set_rx_antenna(dev, antenna_rx);
>  
>  	/* Update templates for AP mode. */
>  	if (bcm43xx_is_mode(wl, IEEE80211_IF_TYPE_AP))
> diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
> index 71cba92..cfc84cd 100644
> --- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
> +++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
> @@ -281,7 +281,7 @@ static void generate_txhdr_fw4(struct bcm43xx_wldev *dev,
>  		phy_ctl |= BCM43xx_TX4_PHY_OFDM;
>  	if (dev->short_preamble)
>  		phy_ctl |= BCM43xx_TX4_PHY_SHORTPRMBL;
> -	switch (txctl->antenna_sel) {
> +	switch (txctl->antenna_sel_tx) {
>  	case 0:
>  		phy_ctl |= BCM43xx_TX4_PHY_ANTLAST;
>  		break;
> 
> 

-- 
Greetings Michael.

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

end of thread, other threads:[~2007-02-21 17:32 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-02-21 16:02 [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna Ivo van Doorn
2007-02-21 16:37 ` Michael Buesch
2007-02-21 16:44   ` Ivo van Doorn
2007-02-21 16:51     ` Michael Buesch
2007-02-21 16:52       ` Ivo van Doorn
2007-02-21 17:06       ` Ivo van Doorn
2007-02-21 17:19         ` Michael Buesch
2007-02-21 17:24           ` Ivo van Doorn
2007-02-21 17:32             ` Michael Buesch

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).