All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] b43: LCN-PHY: add very basic PHY ops
@ 2011-08-14 21:27 ` Rafał Miłecki
  0 siblings, 0 replies; 13+ messages in thread
From: Rafał Miłecki @ 2011-08-14 21:27 UTC (permalink / raw)
  To: linux-wireless, John W. Linville; +Cc: b43-dev, Rafał Miłecki


Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
---
 drivers/net/wireless/b43/phy_lcn.c |   54 ++++++++++++++++++++++++++++++++++-
 drivers/net/wireless/b43/phy_lcn.h |    2 +-
 2 files changed, 53 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/b43/phy_lcn.c b/drivers/net/wireless/b43/phy_lcn.c
index 9f7dbbd..03944ad 100644
--- a/drivers/net/wireless/b43/phy_lcn.c
+++ b/drivers/net/wireless/b43/phy_lcn.c
@@ -28,14 +28,64 @@
 #include "main.h"
 
 /**************************************************
+ * Basic PHY ops.
+ **************************************************/
+
+static int b43_phy_lcn_op_allocate(struct b43_wldev *dev)
+{
+	struct b43_phy_lcn *phy_lcn;
+
+	phy_lcn = kzalloc(sizeof(*phy_lcn), GFP_KERNEL);
+	if (!phy_lcn)
+		return -ENOMEM;
+	dev->phy.lcn = phy_lcn;
+
+	return 0;
+}
+
+static void b43_phy_lcn_op_free(struct b43_wldev *dev)
+{
+	struct b43_phy *phy = &dev->phy;
+	struct b43_phy_lcn *phy_lcn = phy->lcn;
+
+	kfree(phy_lcn);
+	phy->lcn = NULL;
+}
+
+static void b43_phy_lcn_op_prepare_structs(struct b43_wldev *dev)
+{
+	struct b43_phy *phy = &dev->phy;
+	struct b43_phy_lcn *phy_lcn = phy->lcn;
+
+	memset(phy_lcn, 0, sizeof(*phy_lcn));
+}
+
+static unsigned int b43_phy_lcn_op_get_default_chan(struct b43_wldev *dev)
+{
+	if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)
+		return 1;
+	return 36;
+}
+
+static enum b43_txpwr_result
+b43_phy_lcn_op_recalc_txpower(struct b43_wldev *dev, bool ignore_tssi)
+{
+	return B43_TXPWR_RES_DONE;
+}
+
+static void b43_phy_lcn_op_adjust_txpower(struct b43_wldev *dev)
+{
+}
+
+/**************************************************
  * PHY ops struct.
  **************************************************/
 
 const struct b43_phy_operations b43_phyops_lcn = {
-	/*
 	.allocate		= b43_phy_lcn_op_allocate,
 	.free			= b43_phy_lcn_op_free,
 	.prepare_structs	= b43_phy_lcn_op_prepare_structs,
+	/*
 	.init			= b43_phy_lcn_op_init,
 	.phy_read		= b43_phy_lcn_op_read,
 	.phy_write		= b43_phy_lcn_op_write,
@@ -45,8 +95,8 @@ const struct b43_phy_operations b43_phyops_lcn = {
 	.software_rfkill	= b43_phy_lcn_op_software_rfkill,
 	.switch_analog		= b43_phy_lcn_op_switch_analog,
 	.switch_channel		= b43_phy_lcn_op_switch_channel,
+	*/
 	.get_default_chan	= b43_phy_lcn_op_get_default_chan,
 	.recalc_txpower		= b43_phy_lcn_op_recalc_txpower,
 	.adjust_txpower		= b43_phy_lcn_op_adjust_txpower,
-	*/
 };
diff --git a/drivers/net/wireless/b43/phy_lcn.h b/drivers/net/wireless/b43/phy_lcn.h
index c046c2a..9e1b291 100644
--- a/drivers/net/wireless/b43/phy_lcn.h
+++ b/drivers/net/wireless/b43/phy_lcn.h
@@ -11,4 +11,4 @@ struct b43_phy_lcn {
 struct b43_phy_operations;
 extern const struct b43_phy_operations b43_phyops_lcn;
 
-#endif /* B43_PHY_LCN_H_ */
\ No newline at end of file
+#endif /* B43_PHY_LCN_H_ */
-- 
1.7.3.4


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

* [PATCH 1/3] b43: LCN-PHY: add very basic PHY ops
@ 2011-08-14 21:27 ` Rafał Miłecki
  0 siblings, 0 replies; 13+ messages in thread
From: Rafał Miłecki @ 2011-08-14 21:27 UTC (permalink / raw)
  To: linux-wireless, John W. Linville; +Cc: b43-dev, Rafał Miłecki


Signed-off-by: Rafa? Mi?ecki <zajec5@gmail.com>
---
 drivers/net/wireless/b43/phy_lcn.c |   54 ++++++++++++++++++++++++++++++++++-
 drivers/net/wireless/b43/phy_lcn.h |    2 +-
 2 files changed, 53 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/b43/phy_lcn.c b/drivers/net/wireless/b43/phy_lcn.c
index 9f7dbbd..03944ad 100644
--- a/drivers/net/wireless/b43/phy_lcn.c
+++ b/drivers/net/wireless/b43/phy_lcn.c
@@ -28,14 +28,64 @@
 #include "main.h"
 
 /**************************************************
+ * Basic PHY ops.
+ **************************************************/
+
+static int b43_phy_lcn_op_allocate(struct b43_wldev *dev)
+{
+	struct b43_phy_lcn *phy_lcn;
+
+	phy_lcn = kzalloc(sizeof(*phy_lcn), GFP_KERNEL);
+	if (!phy_lcn)
+		return -ENOMEM;
+	dev->phy.lcn = phy_lcn;
+
+	return 0;
+}
+
+static void b43_phy_lcn_op_free(struct b43_wldev *dev)
+{
+	struct b43_phy *phy = &dev->phy;
+	struct b43_phy_lcn *phy_lcn = phy->lcn;
+
+	kfree(phy_lcn);
+	phy->lcn = NULL;
+}
+
+static void b43_phy_lcn_op_prepare_structs(struct b43_wldev *dev)
+{
+	struct b43_phy *phy = &dev->phy;
+	struct b43_phy_lcn *phy_lcn = phy->lcn;
+
+	memset(phy_lcn, 0, sizeof(*phy_lcn));
+}
+
+static unsigned int b43_phy_lcn_op_get_default_chan(struct b43_wldev *dev)
+{
+	if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)
+		return 1;
+	return 36;
+}
+
+static enum b43_txpwr_result
+b43_phy_lcn_op_recalc_txpower(struct b43_wldev *dev, bool ignore_tssi)
+{
+	return B43_TXPWR_RES_DONE;
+}
+
+static void b43_phy_lcn_op_adjust_txpower(struct b43_wldev *dev)
+{
+}
+
+/**************************************************
  * PHY ops struct.
  **************************************************/
 
 const struct b43_phy_operations b43_phyops_lcn = {
-	/*
 	.allocate		= b43_phy_lcn_op_allocate,
 	.free			= b43_phy_lcn_op_free,
 	.prepare_structs	= b43_phy_lcn_op_prepare_structs,
+	/*
 	.init			= b43_phy_lcn_op_init,
 	.phy_read		= b43_phy_lcn_op_read,
 	.phy_write		= b43_phy_lcn_op_write,
@@ -45,8 +95,8 @@ const struct b43_phy_operations b43_phyops_lcn = {
 	.software_rfkill	= b43_phy_lcn_op_software_rfkill,
 	.switch_analog		= b43_phy_lcn_op_switch_analog,
 	.switch_channel		= b43_phy_lcn_op_switch_channel,
+	*/
 	.get_default_chan	= b43_phy_lcn_op_get_default_chan,
 	.recalc_txpower		= b43_phy_lcn_op_recalc_txpower,
 	.adjust_txpower		= b43_phy_lcn_op_adjust_txpower,
-	*/
 };
diff --git a/drivers/net/wireless/b43/phy_lcn.h b/drivers/net/wireless/b43/phy_lcn.h
index c046c2a..9e1b291 100644
--- a/drivers/net/wireless/b43/phy_lcn.h
+++ b/drivers/net/wireless/b43/phy_lcn.h
@@ -11,4 +11,4 @@ struct b43_phy_lcn {
 struct b43_phy_operations;
 extern const struct b43_phy_operations b43_phyops_lcn;
 
-#endif /* B43_PHY_LCN_H_ */
\ No newline at end of file
+#endif /* B43_PHY_LCN_H_ */
-- 
1.7.3.4

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

* [PATCH 2/3] b43: LCN-PHY: implement disabling radio
  2011-08-14 21:27 ` Rafał Miłecki
@ 2011-08-14 21:27   ` Rafał Miłecki
  -1 siblings, 0 replies; 13+ messages in thread
From: Rafał Miłecki @ 2011-08-14 21:27 UTC (permalink / raw)
  To: linux-wireless, John W. Linville; +Cc: b43-dev, Rafał Miłecki

wl reads radio version, then disables it. That's how we found it in MMIO
dump:
 radio_read(0x0000) -> 0x0031 <-- RADIO READ WITHOUT 0x200 SET!
 radio_read(0x0001) -> 0x0064 <-- RADIO READ WITHOUT 0x200 SET!
 radio_read(0x0002) -> 0x0020 <-- RADIO READ WITHOUT 0x200 SET!
 read32 0xfaafc120 -> 0x04000400
 phy_read(0x044d) -> 0x0000
phy_write(0x044d) <- 0x0000
 phy_read(0x044c) -> 0x1fff
phy_write(0x044c) <- 0x1fff
 phy_read(0x04b7) -> 0x0000
phy_write(0x04b7) <- 0x0000
 phy_read(0x04b1) -> 0x0000
phy_write(0x04b1) <- 0x0000
 phy_read(0x04b0) -> 0x7dff
phy_write(0x04b0) <- 0x7dff
 phy_read(0x04fa) -> 0x0000
phy_write(0x04fa) <- 0x0000
 phy_read(0x04f9) -> 0x007f
phy_write(0x04f9) <- 0x007f

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
---
OFC, MMIO hacks were used to find masks & sets.

Sets were taken from:
>>> Switch Radio(OFF) start
 phy_read(0x044d) -> 0x0000
phy_write(0x044d) <- 0x0000
 phy_read(0x044c) -> 0x0000
phy_write(0x044c) <- 0x1f00
 phy_read(0x04b7) -> 0x0000
phy_write(0x04b7) <- 0x0000
 phy_read(0x04b1) -> 0x0000
phy_write(0x04b1) <- 0x0000
 phy_read(0x04b0) -> 0x0000
phy_write(0x04b0) <- 0x0808
 phy_read(0x04fa) -> 0x0000
phy_write(0x04fa) <- 0x0000
 phy_read(0x04f9) -> 0x0000
phy_write(0x04f9) <- 0x0008
>>> Switch Radio(OFF) end

Masks were taken from:
 phy_read(0x044d) -> 0xffff
phy_write(0x044d) <- 0x83ff
 phy_read(0x044c) -> 0xffff
phy_write(0x044c) <- 0xffff
 phy_read(0x04b7) -> 0xffff
phy_write(0x04b7) <- 0x80ff
 phy_read(0x04b1) -> 0xffff
phy_write(0x04b1) <- 0xdfff
 phy_read(0x04b0) -> 0xffff
phy_write(0x04b0) <- 0xffff
 phy_read(0x04fa) -> 0xffff
phy_write(0x04fa) <- 0xfff7
 phy_read(0x04f9) -> 0xffff
phy_write(0x04f9) <- 0xffff
---
 drivers/net/wireless/b43/phy_lcn.c |   23 +++++++++++++++++++++++
 drivers/net/wireless/b43/phy_lcn.h |    9 +++++++++
 2 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/b43/phy_lcn.c b/drivers/net/wireless/b43/phy_lcn.c
index 03944ad..69a93b5 100644
--- a/drivers/net/wireless/b43/phy_lcn.c
+++ b/drivers/net/wireless/b43/phy_lcn.c
@@ -60,6 +60,27 @@ static void b43_phy_lcn_op_prepare_structs(struct b43_wldev *dev)
 	memset(phy_lcn, 0, sizeof(*phy_lcn));
 }
 
+static void b43_phy_lcn_op_software_rfkill(struct b43_wldev *dev,
+					bool blocked)
+{
+	if (b43_read32(dev, B43_MMIO_MACCTL) & B43_MACCTL_ENABLED)
+		b43err(dev->wl, "MAC not suspended\n");
+
+	if (blocked) {
+		b43_phy_mask(dev, B43_PHY_LCN_RF_CTL2, ~0x7c00);
+		b43_phy_set(dev, B43_PHY_LCN_RF_CTL1, 0x1f00);
+
+		b43_phy_mask(dev, B43_PHY_LCN_RF_CTL5, ~0x7f00);
+		b43_phy_mask(dev, B43_PHY_LCN_RF_CTL4, ~0x2);
+		b43_phy_set(dev, B43_PHY_LCN_RF_CTL3, 0x808);
+
+		b43_phy_mask(dev, B43_PHY_LCN_RF_CTL7, ~0x8);
+		b43_phy_set(dev, B43_PHY_LCN_RF_CTL6, 0x8);
+	} else {
+		/* TODO */
+	}
+}
+
 static unsigned int b43_phy_lcn_op_get_default_chan(struct b43_wldev *dev)
 {
 	if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)
@@ -92,7 +113,9 @@ const struct b43_phy_operations b43_phyops_lcn = {
 	.phy_maskset		= b43_phy_lcn_op_maskset,
 	.radio_read		= b43_phy_lcn_op_radio_read,
 	.radio_write		= b43_phy_lcn_op_radio_write,
+	*/
 	.software_rfkill	= b43_phy_lcn_op_software_rfkill,
+	/*
 	.switch_analog		= b43_phy_lcn_op_switch_analog,
 	.switch_channel		= b43_phy_lcn_op_switch_channel,
 	*/
diff --git a/drivers/net/wireless/b43/phy_lcn.h b/drivers/net/wireless/b43/phy_lcn.h
index 9e1b291..89f13b2 100644
--- a/drivers/net/wireless/b43/phy_lcn.h
+++ b/drivers/net/wireless/b43/phy_lcn.h
@@ -4,6 +4,15 @@
 #include "phy_common.h"
 
 
+#define B43_PHY_LCN_RF_CTL1			B43_PHY_OFDM(0x04C)
+#define B43_PHY_LCN_RF_CTL2			B43_PHY_OFDM(0x04D)
+#define B43_PHY_LCN_RF_CTL3			B43_PHY_OFDM(0x0B0)
+#define B43_PHY_LCN_RF_CTL4			B43_PHY_OFDM(0x0B1)
+#define B43_PHY_LCN_RF_CTL5			B43_PHY_OFDM(0x0B7)
+#define B43_PHY_LCN_RF_CTL6			B43_PHY_OFDM(0x0F9)
+#define B43_PHY_LCN_RF_CTL7			B43_PHY_OFDM(0x0FA)
+
+
 struct b43_phy_lcn {
 };
 
-- 
1.7.3.4


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

* [PATCH 2/3] b43: LCN-PHY: implement disabling radio
@ 2011-08-14 21:27   ` Rafał Miłecki
  0 siblings, 0 replies; 13+ messages in thread
From: Rafał Miłecki @ 2011-08-14 21:27 UTC (permalink / raw)
  To: linux-wireless, John W. Linville; +Cc: b43-dev, Rafał Miłecki

wl reads radio version, then disables it. That's how we found it in MMIO
dump:
 radio_read(0x0000) -> 0x0031 <-- RADIO READ WITHOUT 0x200 SET!
 radio_read(0x0001) -> 0x0064 <-- RADIO READ WITHOUT 0x200 SET!
 radio_read(0x0002) -> 0x0020 <-- RADIO READ WITHOUT 0x200 SET!
 read32 0xfaafc120 -> 0x04000400
 phy_read(0x044d) -> 0x0000
phy_write(0x044d) <- 0x0000
 phy_read(0x044c) -> 0x1fff
phy_write(0x044c) <- 0x1fff
 phy_read(0x04b7) -> 0x0000
phy_write(0x04b7) <- 0x0000
 phy_read(0x04b1) -> 0x0000
phy_write(0x04b1) <- 0x0000
 phy_read(0x04b0) -> 0x7dff
phy_write(0x04b0) <- 0x7dff
 phy_read(0x04fa) -> 0x0000
phy_write(0x04fa) <- 0x0000
 phy_read(0x04f9) -> 0x007f
phy_write(0x04f9) <- 0x007f

Signed-off-by: Rafa? Mi?ecki <zajec5@gmail.com>
---
OFC, MMIO hacks were used to find masks & sets.

Sets were taken from:
>>> Switch Radio(OFF) start
 phy_read(0x044d) -> 0x0000
phy_write(0x044d) <- 0x0000
 phy_read(0x044c) -> 0x0000
phy_write(0x044c) <- 0x1f00
 phy_read(0x04b7) -> 0x0000
phy_write(0x04b7) <- 0x0000
 phy_read(0x04b1) -> 0x0000
phy_write(0x04b1) <- 0x0000
 phy_read(0x04b0) -> 0x0000
phy_write(0x04b0) <- 0x0808
 phy_read(0x04fa) -> 0x0000
phy_write(0x04fa) <- 0x0000
 phy_read(0x04f9) -> 0x0000
phy_write(0x04f9) <- 0x0008
>>> Switch Radio(OFF) end

Masks were taken from:
 phy_read(0x044d) -> 0xffff
phy_write(0x044d) <- 0x83ff
 phy_read(0x044c) -> 0xffff
phy_write(0x044c) <- 0xffff
 phy_read(0x04b7) -> 0xffff
phy_write(0x04b7) <- 0x80ff
 phy_read(0x04b1) -> 0xffff
phy_write(0x04b1) <- 0xdfff
 phy_read(0x04b0) -> 0xffff
phy_write(0x04b0) <- 0xffff
 phy_read(0x04fa) -> 0xffff
phy_write(0x04fa) <- 0xfff7
 phy_read(0x04f9) -> 0xffff
phy_write(0x04f9) <- 0xffff
---
 drivers/net/wireless/b43/phy_lcn.c |   23 +++++++++++++++++++++++
 drivers/net/wireless/b43/phy_lcn.h |    9 +++++++++
 2 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/b43/phy_lcn.c b/drivers/net/wireless/b43/phy_lcn.c
index 03944ad..69a93b5 100644
--- a/drivers/net/wireless/b43/phy_lcn.c
+++ b/drivers/net/wireless/b43/phy_lcn.c
@@ -60,6 +60,27 @@ static void b43_phy_lcn_op_prepare_structs(struct b43_wldev *dev)
 	memset(phy_lcn, 0, sizeof(*phy_lcn));
 }
 
+static void b43_phy_lcn_op_software_rfkill(struct b43_wldev *dev,
+					bool blocked)
+{
+	if (b43_read32(dev, B43_MMIO_MACCTL) & B43_MACCTL_ENABLED)
+		b43err(dev->wl, "MAC not suspended\n");
+
+	if (blocked) {
+		b43_phy_mask(dev, B43_PHY_LCN_RF_CTL2, ~0x7c00);
+		b43_phy_set(dev, B43_PHY_LCN_RF_CTL1, 0x1f00);
+
+		b43_phy_mask(dev, B43_PHY_LCN_RF_CTL5, ~0x7f00);
+		b43_phy_mask(dev, B43_PHY_LCN_RF_CTL4, ~0x2);
+		b43_phy_set(dev, B43_PHY_LCN_RF_CTL3, 0x808);
+
+		b43_phy_mask(dev, B43_PHY_LCN_RF_CTL7, ~0x8);
+		b43_phy_set(dev, B43_PHY_LCN_RF_CTL6, 0x8);
+	} else {
+		/* TODO */
+	}
+}
+
 static unsigned int b43_phy_lcn_op_get_default_chan(struct b43_wldev *dev)
 {
 	if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)
@@ -92,7 +113,9 @@ const struct b43_phy_operations b43_phyops_lcn = {
 	.phy_maskset		= b43_phy_lcn_op_maskset,
 	.radio_read		= b43_phy_lcn_op_radio_read,
 	.radio_write		= b43_phy_lcn_op_radio_write,
+	*/
 	.software_rfkill	= b43_phy_lcn_op_software_rfkill,
+	/*
 	.switch_analog		= b43_phy_lcn_op_switch_analog,
 	.switch_channel		= b43_phy_lcn_op_switch_channel,
 	*/
diff --git a/drivers/net/wireless/b43/phy_lcn.h b/drivers/net/wireless/b43/phy_lcn.h
index 9e1b291..89f13b2 100644
--- a/drivers/net/wireless/b43/phy_lcn.h
+++ b/drivers/net/wireless/b43/phy_lcn.h
@@ -4,6 +4,15 @@
 #include "phy_common.h"
 
 
+#define B43_PHY_LCN_RF_CTL1			B43_PHY_OFDM(0x04C)
+#define B43_PHY_LCN_RF_CTL2			B43_PHY_OFDM(0x04D)
+#define B43_PHY_LCN_RF_CTL3			B43_PHY_OFDM(0x0B0)
+#define B43_PHY_LCN_RF_CTL4			B43_PHY_OFDM(0x0B1)
+#define B43_PHY_LCN_RF_CTL5			B43_PHY_OFDM(0x0B7)
+#define B43_PHY_LCN_RF_CTL6			B43_PHY_OFDM(0x0F9)
+#define B43_PHY_LCN_RF_CTL7			B43_PHY_OFDM(0x0FA)
+
+
 struct b43_phy_lcn {
 };
 
-- 
1.7.3.4

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

* [PATCH 3/3] b43: LCN-PHY: switch analog
  2011-08-14 21:27 ` Rafał Miłecki
@ 2011-08-14 21:27   ` Rafał Miłecki
  -1 siblings, 0 replies; 13+ messages in thread
From: Rafał Miłecki @ 2011-08-14 21:27 UTC (permalink / raw)
  To: linux-wireless, John W. Linville; +Cc: b43-dev, Rafał Miłecki

Analog is switched on right after reading PHY version:
 read16 0xfaafc3e0 -> 0xa801
 phy_read(0x043b) -> 0x0000
phy_write(0x043b) <- 0x0000
Switched off after after killing radio:
>>> Switch Radio(OFF) end
 phy_read(0x043c) -> 0x0000
phy_write(0x043c) <- 0x0007
 phy_read(0x043b) -> 0x0000
phy_write(0x043b) <- 0x0007

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
---
Again, MMIO hacks to find masks & sets.

Sets came from:
>>> analog(OFF) start
 phy_read(0x043c) -> 0x0000
phy_write(0x043c) <- 0x0007
 phy_read(0x043b) -> 0x0000
phy_write(0x043b) <- 0x0007
>>> analog(OFF) end

There is no masking for OFF:
>>> analog(OFF) start
 phy_read(0x043c) -> 0xffff
phy_write(0x043c) <- 0xffff
 phy_read(0x043b) -> 0xffff
phy_write(0x043b) <- 0xffff
>>> analog(OFF) end

Mask for ON came from
 phy_read(0x043b) -> 0xffff
phy_write(0x043b) <- 0xfff8
(there was not masking for ON).
---
 drivers/net/wireless/b43/phy_lcn.c |   12 +++++++++++-
 drivers/net/wireless/b43/phy_lcn.h |    2 ++
 2 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/b43/phy_lcn.c b/drivers/net/wireless/b43/phy_lcn.c
index 69a93b5..0fd72c1 100644
--- a/drivers/net/wireless/b43/phy_lcn.c
+++ b/drivers/net/wireless/b43/phy_lcn.c
@@ -81,6 +81,16 @@ static void b43_phy_lcn_op_software_rfkill(struct b43_wldev *dev,
 	}
 }
 
+static void b43_phy_lcn_op_switch_analog(struct b43_wldev *dev, bool on)
+{
+	if (on) {
+		b43_phy_mask(dev, B43_PHY_LCN_AFE_CTL1, ~0x7);
+	} else {
+		b43_phy_set(dev, B43_PHY_LCN_AFE_CTL2, 0x7);
+		b43_phy_set(dev, B43_PHY_LCN_AFE_CTL1, 0x7);
+	}
+}
+
 static unsigned int b43_phy_lcn_op_get_default_chan(struct b43_wldev *dev)
 {
 	if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)
@@ -115,8 +125,8 @@ const struct b43_phy_operations b43_phyops_lcn = {
 	.radio_write		= b43_phy_lcn_op_radio_write,
 	*/
 	.software_rfkill	= b43_phy_lcn_op_software_rfkill,
-	/*
 	.switch_analog		= b43_phy_lcn_op_switch_analog,
+	/*
 	.switch_channel		= b43_phy_lcn_op_switch_channel,
 	*/
 	.get_default_chan	= b43_phy_lcn_op_get_default_chan,
diff --git a/drivers/net/wireless/b43/phy_lcn.h b/drivers/net/wireless/b43/phy_lcn.h
index 89f13b2..371e07d 100644
--- a/drivers/net/wireless/b43/phy_lcn.h
+++ b/drivers/net/wireless/b43/phy_lcn.h
@@ -4,6 +4,8 @@
 #include "phy_common.h"
 
 
+#define B43_PHY_LCN_AFE_CTL1			B43_PHY_OFDM(0x03B)
+#define B43_PHY_LCN_AFE_CTL2			B43_PHY_OFDM(0x03C)
 #define B43_PHY_LCN_RF_CTL1			B43_PHY_OFDM(0x04C)
 #define B43_PHY_LCN_RF_CTL2			B43_PHY_OFDM(0x04D)
 #define B43_PHY_LCN_RF_CTL3			B43_PHY_OFDM(0x0B0)
-- 
1.7.3.4


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

* [PATCH 3/3] b43: LCN-PHY: switch analog
@ 2011-08-14 21:27   ` Rafał Miłecki
  0 siblings, 0 replies; 13+ messages in thread
From: Rafał Miłecki @ 2011-08-14 21:27 UTC (permalink / raw)
  To: linux-wireless, John W. Linville; +Cc: b43-dev, Rafał Miłecki

Analog is switched on right after reading PHY version:
 read16 0xfaafc3e0 -> 0xa801
 phy_read(0x043b) -> 0x0000
phy_write(0x043b) <- 0x0000
Switched off after after killing radio:
>>> Switch Radio(OFF) end
 phy_read(0x043c) -> 0x0000
phy_write(0x043c) <- 0x0007
 phy_read(0x043b) -> 0x0000
phy_write(0x043b) <- 0x0007

Signed-off-by: Rafa? Mi?ecki <zajec5@gmail.com>
---
Again, MMIO hacks to find masks & sets.

Sets came from:
>>> analog(OFF) start
 phy_read(0x043c) -> 0x0000
phy_write(0x043c) <- 0x0007
 phy_read(0x043b) -> 0x0000
phy_write(0x043b) <- 0x0007
>>> analog(OFF) end

There is no masking for OFF:
>>> analog(OFF) start
 phy_read(0x043c) -> 0xffff
phy_write(0x043c) <- 0xffff
 phy_read(0x043b) -> 0xffff
phy_write(0x043b) <- 0xffff
>>> analog(OFF) end

Mask for ON came from
 phy_read(0x043b) -> 0xffff
phy_write(0x043b) <- 0xfff8
(there was not masking for ON).
---
 drivers/net/wireless/b43/phy_lcn.c |   12 +++++++++++-
 drivers/net/wireless/b43/phy_lcn.h |    2 ++
 2 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/b43/phy_lcn.c b/drivers/net/wireless/b43/phy_lcn.c
index 69a93b5..0fd72c1 100644
--- a/drivers/net/wireless/b43/phy_lcn.c
+++ b/drivers/net/wireless/b43/phy_lcn.c
@@ -81,6 +81,16 @@ static void b43_phy_lcn_op_software_rfkill(struct b43_wldev *dev,
 	}
 }
 
+static void b43_phy_lcn_op_switch_analog(struct b43_wldev *dev, bool on)
+{
+	if (on) {
+		b43_phy_mask(dev, B43_PHY_LCN_AFE_CTL1, ~0x7);
+	} else {
+		b43_phy_set(dev, B43_PHY_LCN_AFE_CTL2, 0x7);
+		b43_phy_set(dev, B43_PHY_LCN_AFE_CTL1, 0x7);
+	}
+}
+
 static unsigned int b43_phy_lcn_op_get_default_chan(struct b43_wldev *dev)
 {
 	if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)
@@ -115,8 +125,8 @@ const struct b43_phy_operations b43_phyops_lcn = {
 	.radio_write		= b43_phy_lcn_op_radio_write,
 	*/
 	.software_rfkill	= b43_phy_lcn_op_software_rfkill,
-	/*
 	.switch_analog		= b43_phy_lcn_op_switch_analog,
+	/*
 	.switch_channel		= b43_phy_lcn_op_switch_channel,
 	*/
 	.get_default_chan	= b43_phy_lcn_op_get_default_chan,
diff --git a/drivers/net/wireless/b43/phy_lcn.h b/drivers/net/wireless/b43/phy_lcn.h
index 89f13b2..371e07d 100644
--- a/drivers/net/wireless/b43/phy_lcn.h
+++ b/drivers/net/wireless/b43/phy_lcn.h
@@ -4,6 +4,8 @@
 #include "phy_common.h"
 
 
+#define B43_PHY_LCN_AFE_CTL1			B43_PHY_OFDM(0x03B)
+#define B43_PHY_LCN_AFE_CTL2			B43_PHY_OFDM(0x03C)
 #define B43_PHY_LCN_RF_CTL1			B43_PHY_OFDM(0x04C)
 #define B43_PHY_LCN_RF_CTL2			B43_PHY_OFDM(0x04D)
 #define B43_PHY_LCN_RF_CTL3			B43_PHY_OFDM(0x0B0)
-- 
1.7.3.4

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

* Re: [PATCH 2/3] b43: LCN-PHY: implement disabling radio
  2011-08-14 21:27   ` Rafał Miłecki
@ 2011-08-14 23:24     ` Gábor Stefanik
  -1 siblings, 0 replies; 13+ messages in thread
From: Gábor Stefanik @ 2011-08-14 23:24 UTC (permalink / raw)
  To: Rafał Miłecki; +Cc: linux-wireless, John W. Linville, b43-dev

2011/8/14 Rafał Miłecki <zajec5@gmail.com>:
> wl reads radio version, then disables it. That's how we found it in MMIO
> dump:
>  radio_read(0x0000) -> 0x0031 <-- RADIO READ WITHOUT 0x200 SET!
>  radio_read(0x0001) -> 0x0064 <-- RADIO READ WITHOUT 0x200 SET!
>  radio_read(0x0002) -> 0x0020 <-- RADIO READ WITHOUT 0x200 SET!
>  read32 0xfaafc120 -> 0x04000400
>  phy_read(0x044d) -> 0x0000
> phy_write(0x044d) <- 0x0000
>  phy_read(0x044c) -> 0x1fff
> phy_write(0x044c) <- 0x1fff
>  phy_read(0x04b7) -> 0x0000
> phy_write(0x04b7) <- 0x0000
>  phy_read(0x04b1) -> 0x0000
> phy_write(0x04b1) <- 0x0000
>  phy_read(0x04b0) -> 0x7dff
> phy_write(0x04b0) <- 0x7dff
>  phy_read(0x04fa) -> 0x0000
> phy_write(0x04fa) <- 0x0000
>  phy_read(0x04f9) -> 0x007f
> phy_write(0x04f9) <- 0x007f

Doesn't brcm80211 support this PHY? (Because then, reverse-engineering
wl is pointless.)

>
> Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
> ---
> OFC, MMIO hacks were used to find masks & sets.
>
> Sets were taken from:
>>>> Switch Radio(OFF) start
>  phy_read(0x044d) -> 0x0000
> phy_write(0x044d) <- 0x0000
>  phy_read(0x044c) -> 0x0000
> phy_write(0x044c) <- 0x1f00
>  phy_read(0x04b7) -> 0x0000
> phy_write(0x04b7) <- 0x0000
>  phy_read(0x04b1) -> 0x0000
> phy_write(0x04b1) <- 0x0000
>  phy_read(0x04b0) -> 0x0000
> phy_write(0x04b0) <- 0x0808
>  phy_read(0x04fa) -> 0x0000
> phy_write(0x04fa) <- 0x0000
>  phy_read(0x04f9) -> 0x0000
> phy_write(0x04f9) <- 0x0008
>>>> Switch Radio(OFF) end
>
> Masks were taken from:
>  phy_read(0x044d) -> 0xffff
> phy_write(0x044d) <- 0x83ff
>  phy_read(0x044c) -> 0xffff
> phy_write(0x044c) <- 0xffff
>  phy_read(0x04b7) -> 0xffff
> phy_write(0x04b7) <- 0x80ff
>  phy_read(0x04b1) -> 0xffff
> phy_write(0x04b1) <- 0xdfff
>  phy_read(0x04b0) -> 0xffff
> phy_write(0x04b0) <- 0xffff
>  phy_read(0x04fa) -> 0xffff
> phy_write(0x04fa) <- 0xfff7
>  phy_read(0x04f9) -> 0xffff
> phy_write(0x04f9) <- 0xffff
> ---
>  drivers/net/wireless/b43/phy_lcn.c |   23 +++++++++++++++++++++++
>  drivers/net/wireless/b43/phy_lcn.h |    9 +++++++++
>  2 files changed, 32 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/wireless/b43/phy_lcn.c b/drivers/net/wireless/b43/phy_lcn.c
> index 03944ad..69a93b5 100644
> --- a/drivers/net/wireless/b43/phy_lcn.c
> +++ b/drivers/net/wireless/b43/phy_lcn.c
> @@ -60,6 +60,27 @@ static void b43_phy_lcn_op_prepare_structs(struct b43_wldev *dev)
>        memset(phy_lcn, 0, sizeof(*phy_lcn));
>  }
>
> +static void b43_phy_lcn_op_software_rfkill(struct b43_wldev *dev,
> +                                       bool blocked)
> +{
> +       if (b43_read32(dev, B43_MMIO_MACCTL) & B43_MACCTL_ENABLED)
> +               b43err(dev->wl, "MAC not suspended\n");
> +
> +       if (blocked) {
> +               b43_phy_mask(dev, B43_PHY_LCN_RF_CTL2, ~0x7c00);
> +               b43_phy_set(dev, B43_PHY_LCN_RF_CTL1, 0x1f00);
> +
> +               b43_phy_mask(dev, B43_PHY_LCN_RF_CTL5, ~0x7f00);
> +               b43_phy_mask(dev, B43_PHY_LCN_RF_CTL4, ~0x2);
> +               b43_phy_set(dev, B43_PHY_LCN_RF_CTL3, 0x808);
> +
> +               b43_phy_mask(dev, B43_PHY_LCN_RF_CTL7, ~0x8);
> +               b43_phy_set(dev, B43_PHY_LCN_RF_CTL6, 0x8);
> +       } else {
> +               /* TODO */
> +       }
> +}
> +
>  static unsigned int b43_phy_lcn_op_get_default_chan(struct b43_wldev *dev)
>  {
>        if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)
> @@ -92,7 +113,9 @@ const struct b43_phy_operations b43_phyops_lcn = {
>        .phy_maskset            = b43_phy_lcn_op_maskset,
>        .radio_read             = b43_phy_lcn_op_radio_read,
>        .radio_write            = b43_phy_lcn_op_radio_write,
> +       */
>        .software_rfkill        = b43_phy_lcn_op_software_rfkill,
> +       /*
>        .switch_analog          = b43_phy_lcn_op_switch_analog,
>        .switch_channel         = b43_phy_lcn_op_switch_channel,
>        */
> diff --git a/drivers/net/wireless/b43/phy_lcn.h b/drivers/net/wireless/b43/phy_lcn.h
> index 9e1b291..89f13b2 100644
> --- a/drivers/net/wireless/b43/phy_lcn.h
> +++ b/drivers/net/wireless/b43/phy_lcn.h
> @@ -4,6 +4,15 @@
>  #include "phy_common.h"
>
>
> +#define B43_PHY_LCN_RF_CTL1                    B43_PHY_OFDM(0x04C)
> +#define B43_PHY_LCN_RF_CTL2                    B43_PHY_OFDM(0x04D)
> +#define B43_PHY_LCN_RF_CTL3                    B43_PHY_OFDM(0x0B0)
> +#define B43_PHY_LCN_RF_CTL4                    B43_PHY_OFDM(0x0B1)
> +#define B43_PHY_LCN_RF_CTL5                    B43_PHY_OFDM(0x0B7)
> +#define B43_PHY_LCN_RF_CTL6                    B43_PHY_OFDM(0x0F9)
> +#define B43_PHY_LCN_RF_CTL7                    B43_PHY_OFDM(0x0FA)
> +
> +
>  struct b43_phy_lcn {
>  };
>
> --
> 1.7.3.4
>
>
> _______________________________________________
> b43-dev mailing list
> b43-dev@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/b43-dev
>



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

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

* [PATCH 2/3] b43: LCN-PHY: implement disabling radio
@ 2011-08-14 23:24     ` Gábor Stefanik
  0 siblings, 0 replies; 13+ messages in thread
From: Gábor Stefanik @ 2011-08-14 23:24 UTC (permalink / raw)
  To: Rafał Miłecki; +Cc: linux-wireless, John W. Linville, b43-dev

2011/8/14 Rafa? Mi?ecki <zajec5@gmail.com>:
> wl reads radio version, then disables it. That's how we found it in MMIO
> dump:
> ?radio_read(0x0000) -> 0x0031 <-- RADIO READ WITHOUT 0x200 SET!
> ?radio_read(0x0001) -> 0x0064 <-- RADIO READ WITHOUT 0x200 SET!
> ?radio_read(0x0002) -> 0x0020 <-- RADIO READ WITHOUT 0x200 SET!
> ?read32 0xfaafc120 -> 0x04000400
> ?phy_read(0x044d) -> 0x0000
> phy_write(0x044d) <- 0x0000
> ?phy_read(0x044c) -> 0x1fff
> phy_write(0x044c) <- 0x1fff
> ?phy_read(0x04b7) -> 0x0000
> phy_write(0x04b7) <- 0x0000
> ?phy_read(0x04b1) -> 0x0000
> phy_write(0x04b1) <- 0x0000
> ?phy_read(0x04b0) -> 0x7dff
> phy_write(0x04b0) <- 0x7dff
> ?phy_read(0x04fa) -> 0x0000
> phy_write(0x04fa) <- 0x0000
> ?phy_read(0x04f9) -> 0x007f
> phy_write(0x04f9) <- 0x007f

Doesn't brcm80211 support this PHY? (Because then, reverse-engineering
wl is pointless.)

>
> Signed-off-by: Rafa? Mi?ecki <zajec5@gmail.com>
> ---
> OFC, MMIO hacks were used to find masks & sets.
>
> Sets were taken from:
>>>> Switch Radio(OFF) start
> ?phy_read(0x044d) -> 0x0000
> phy_write(0x044d) <- 0x0000
> ?phy_read(0x044c) -> 0x0000
> phy_write(0x044c) <- 0x1f00
> ?phy_read(0x04b7) -> 0x0000
> phy_write(0x04b7) <- 0x0000
> ?phy_read(0x04b1) -> 0x0000
> phy_write(0x04b1) <- 0x0000
> ?phy_read(0x04b0) -> 0x0000
> phy_write(0x04b0) <- 0x0808
> ?phy_read(0x04fa) -> 0x0000
> phy_write(0x04fa) <- 0x0000
> ?phy_read(0x04f9) -> 0x0000
> phy_write(0x04f9) <- 0x0008
>>>> Switch Radio(OFF) end
>
> Masks were taken from:
> ?phy_read(0x044d) -> 0xffff
> phy_write(0x044d) <- 0x83ff
> ?phy_read(0x044c) -> 0xffff
> phy_write(0x044c) <- 0xffff
> ?phy_read(0x04b7) -> 0xffff
> phy_write(0x04b7) <- 0x80ff
> ?phy_read(0x04b1) -> 0xffff
> phy_write(0x04b1) <- 0xdfff
> ?phy_read(0x04b0) -> 0xffff
> phy_write(0x04b0) <- 0xffff
> ?phy_read(0x04fa) -> 0xffff
> phy_write(0x04fa) <- 0xfff7
> ?phy_read(0x04f9) -> 0xffff
> phy_write(0x04f9) <- 0xffff
> ---
> ?drivers/net/wireless/b43/phy_lcn.c | ? 23 +++++++++++++++++++++++
> ?drivers/net/wireless/b43/phy_lcn.h | ? ?9 +++++++++
> ?2 files changed, 32 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/wireless/b43/phy_lcn.c b/drivers/net/wireless/b43/phy_lcn.c
> index 03944ad..69a93b5 100644
> --- a/drivers/net/wireless/b43/phy_lcn.c
> +++ b/drivers/net/wireless/b43/phy_lcn.c
> @@ -60,6 +60,27 @@ static void b43_phy_lcn_op_prepare_structs(struct b43_wldev *dev)
> ? ? ? ?memset(phy_lcn, 0, sizeof(*phy_lcn));
> ?}
>
> +static void b43_phy_lcn_op_software_rfkill(struct b43_wldev *dev,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bool blocked)
> +{
> + ? ? ? if (b43_read32(dev, B43_MMIO_MACCTL) & B43_MACCTL_ENABLED)
> + ? ? ? ? ? ? ? b43err(dev->wl, "MAC not suspended\n");
> +
> + ? ? ? if (blocked) {
> + ? ? ? ? ? ? ? b43_phy_mask(dev, B43_PHY_LCN_RF_CTL2, ~0x7c00);
> + ? ? ? ? ? ? ? b43_phy_set(dev, B43_PHY_LCN_RF_CTL1, 0x1f00);
> +
> + ? ? ? ? ? ? ? b43_phy_mask(dev, B43_PHY_LCN_RF_CTL5, ~0x7f00);
> + ? ? ? ? ? ? ? b43_phy_mask(dev, B43_PHY_LCN_RF_CTL4, ~0x2);
> + ? ? ? ? ? ? ? b43_phy_set(dev, B43_PHY_LCN_RF_CTL3, 0x808);
> +
> + ? ? ? ? ? ? ? b43_phy_mask(dev, B43_PHY_LCN_RF_CTL7, ~0x8);
> + ? ? ? ? ? ? ? b43_phy_set(dev, B43_PHY_LCN_RF_CTL6, 0x8);
> + ? ? ? } else {
> + ? ? ? ? ? ? ? /* TODO */
> + ? ? ? }
> +}
> +
> ?static unsigned int b43_phy_lcn_op_get_default_chan(struct b43_wldev *dev)
> ?{
> ? ? ? ?if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)
> @@ -92,7 +113,9 @@ const struct b43_phy_operations b43_phyops_lcn = {
> ? ? ? ?.phy_maskset ? ? ? ? ? ?= b43_phy_lcn_op_maskset,
> ? ? ? ?.radio_read ? ? ? ? ? ? = b43_phy_lcn_op_radio_read,
> ? ? ? ?.radio_write ? ? ? ? ? ?= b43_phy_lcn_op_radio_write,
> + ? ? ? */
> ? ? ? ?.software_rfkill ? ? ? ?= b43_phy_lcn_op_software_rfkill,
> + ? ? ? /*
> ? ? ? ?.switch_analog ? ? ? ? ?= b43_phy_lcn_op_switch_analog,
> ? ? ? ?.switch_channel ? ? ? ? = b43_phy_lcn_op_switch_channel,
> ? ? ? ?*/
> diff --git a/drivers/net/wireless/b43/phy_lcn.h b/drivers/net/wireless/b43/phy_lcn.h
> index 9e1b291..89f13b2 100644
> --- a/drivers/net/wireless/b43/phy_lcn.h
> +++ b/drivers/net/wireless/b43/phy_lcn.h
> @@ -4,6 +4,15 @@
> ?#include "phy_common.h"
>
>
> +#define B43_PHY_LCN_RF_CTL1 ? ? ? ? ? ? ? ? ? ?B43_PHY_OFDM(0x04C)
> +#define B43_PHY_LCN_RF_CTL2 ? ? ? ? ? ? ? ? ? ?B43_PHY_OFDM(0x04D)
> +#define B43_PHY_LCN_RF_CTL3 ? ? ? ? ? ? ? ? ? ?B43_PHY_OFDM(0x0B0)
> +#define B43_PHY_LCN_RF_CTL4 ? ? ? ? ? ? ? ? ? ?B43_PHY_OFDM(0x0B1)
> +#define B43_PHY_LCN_RF_CTL5 ? ? ? ? ? ? ? ? ? ?B43_PHY_OFDM(0x0B7)
> +#define B43_PHY_LCN_RF_CTL6 ? ? ? ? ? ? ? ? ? ?B43_PHY_OFDM(0x0F9)
> +#define B43_PHY_LCN_RF_CTL7 ? ? ? ? ? ? ? ? ? ?B43_PHY_OFDM(0x0FA)
> +
> +
> ?struct b43_phy_lcn {
> ?};
>
> --
> 1.7.3.4
>
>
> _______________________________________________
> b43-dev mailing list
> b43-dev at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/b43-dev
>



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

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

* Re: [PATCH 2/3] b43: LCN-PHY: implement disabling radio
  2011-08-14 23:24     ` Gábor Stefanik
@ 2011-08-15  8:14       ` Rafał Miłecki
  -1 siblings, 0 replies; 13+ messages in thread
From: Rafał Miłecki @ 2011-08-15  8:14 UTC (permalink / raw)
  To: Gábor Stefanik; +Cc: linux-wireless, John W. Linville, b43-dev

W dniu 15 sierpnia 2011 01:24 użytkownik Gábor Stefanik
<netrolller.3d@gmail.com> napisał:
> 2011/8/14 Rafał Miłecki <zajec5@gmail.com>:
>> wl reads radio version, then disables it. That's how we found it in MMIO
>> dump:
>>  radio_read(0x0000) -> 0x0031 <-- RADIO READ WITHOUT 0x200 SET!
>>  radio_read(0x0001) -> 0x0064 <-- RADIO READ WITHOUT 0x200 SET!
>>  radio_read(0x0002) -> 0x0020 <-- RADIO READ WITHOUT 0x200 SET!
>>  read32 0xfaafc120 -> 0x04000400
>>  phy_read(0x044d) -> 0x0000
>> phy_write(0x044d) <- 0x0000
>>  phy_read(0x044c) -> 0x1fff
>> phy_write(0x044c) <- 0x1fff
>>  phy_read(0x04b7) -> 0x0000
>> phy_write(0x04b7) <- 0x0000
>>  phy_read(0x04b1) -> 0x0000
>> phy_write(0x04b1) <- 0x0000
>>  phy_read(0x04b0) -> 0x7dff
>> phy_write(0x04b0) <- 0x7dff
>>  phy_read(0x04fa) -> 0x0000
>> phy_write(0x04fa) <- 0x0000
>>  phy_read(0x04f9) -> 0x007f
>> phy_write(0x04f9) <- 0x007f
>
> Doesn't brcm80211 support this PHY?

They do, but I still have some stuff RE-ed anyway. That stuff comes
from my tests of MMIO hacks I've done before using them on BCM4331.


> (Because then, reverse-engineering wl is pointless.)

(Unless that's fun for you ;) )

-- 
Rafał

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

* [PATCH 2/3] b43: LCN-PHY: implement disabling radio
@ 2011-08-15  8:14       ` Rafał Miłecki
  0 siblings, 0 replies; 13+ messages in thread
From: Rafał Miłecki @ 2011-08-15  8:14 UTC (permalink / raw)
  To: Gábor Stefanik; +Cc: linux-wireless, John W. Linville, b43-dev

W dniu 15 sierpnia 2011 01:24 u?ytkownik G?bor Stefanik
<netrolller.3d@gmail.com> napisa?:
> 2011/8/14 Rafa? Mi?ecki <zajec5@gmail.com>:
>> wl reads radio version, then disables it. That's how we found it in MMIO
>> dump:
>> ?radio_read(0x0000) -> 0x0031 <-- RADIO READ WITHOUT 0x200 SET!
>> ?radio_read(0x0001) -> 0x0064 <-- RADIO READ WITHOUT 0x200 SET!
>> ?radio_read(0x0002) -> 0x0020 <-- RADIO READ WITHOUT 0x200 SET!
>> ?read32 0xfaafc120 -> 0x04000400
>> ?phy_read(0x044d) -> 0x0000
>> phy_write(0x044d) <- 0x0000
>> ?phy_read(0x044c) -> 0x1fff
>> phy_write(0x044c) <- 0x1fff
>> ?phy_read(0x04b7) -> 0x0000
>> phy_write(0x04b7) <- 0x0000
>> ?phy_read(0x04b1) -> 0x0000
>> phy_write(0x04b1) <- 0x0000
>> ?phy_read(0x04b0) -> 0x7dff
>> phy_write(0x04b0) <- 0x7dff
>> ?phy_read(0x04fa) -> 0x0000
>> phy_write(0x04fa) <- 0x0000
>> ?phy_read(0x04f9) -> 0x007f
>> phy_write(0x04f9) <- 0x007f
>
> Doesn't brcm80211 support this PHY?

They do, but I still have some stuff RE-ed anyway. That stuff comes
from my tests of MMIO hacks I've done before using them on BCM4331.


> (Because then, reverse-engineering wl is pointless.)

(Unless that's fun for you ;) )

-- 
Rafa?

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

* Re: [PATCH 2/3] b43: LCN-PHY: implement disabling radio
  2011-08-14 23:24     ` Gábor Stefanik
@ 2011-08-15 13:18       ` David Woodhouse
  -1 siblings, 0 replies; 13+ messages in thread
From: David Woodhouse @ 2011-08-15 13:18 UTC (permalink / raw)
  To: Gábor Stefanik; +Cc: Rafał Miłecki, linux-wireless, b43-dev

On Mon, 2011-08-15 at 01:24 +0200, Gábor Stefanik wrote:
> Doesn't brcm80211 support this PHY? (Because then, reverse-engineering
> wl is pointless.)

I'd be great to "clean up" the interface between brcm80211 and its phy
code, so that the phy code can be moved out of drivers/staging. And once
we've done that, we can make b43 use it too.

That way we not only get LCN PHY code, but also hopefully support for
*other* PHYs as and when they are produced.

-- 
dwmw2


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

* [PATCH 2/3] b43: LCN-PHY: implement disabling radio
@ 2011-08-15 13:18       ` David Woodhouse
  0 siblings, 0 replies; 13+ messages in thread
From: David Woodhouse @ 2011-08-15 13:18 UTC (permalink / raw)
  To: Gábor Stefanik; +Cc: Rafał Miłecki, linux-wireless, b43-dev

On Mon, 2011-08-15 at 01:24 +0200, G?bor Stefanik wrote:
> Doesn't brcm80211 support this PHY? (Because then, reverse-engineering
> wl is pointless.)

I'd be great to "clean up" the interface between brcm80211 and its phy
code, so that the phy code can be moved out of drivers/staging. And once
we've done that, we can make b43 use it too.

That way we not only get LCN PHY code, but also hopefully support for
*other* PHYs as and when they are produced.

-- 
dwmw2

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

* Re: [PATCH 2/3] b43: LCN-PHY: implement disabling radio
  2011-08-15 13:18       ` David Woodhouse
  (?)
@ 2011-08-26 19:30       ` Henry Ptasinski
  -1 siblings, 0 replies; 13+ messages in thread
From: Henry Ptasinski @ 2011-08-26 19:30 UTC (permalink / raw)
  To: David Woodhouse
  Cc: Gábor Stefanik, Rafał Miłecki, linux-wireless,
	b43-dev, Henry Ptasinski

On Mon, Aug 15, 2011 at 06:18:57AM -0700, David Woodhouse wrote:
> On Mon, 2011-08-15 at 01:24 +0200, Gábor Stefanik wrote:
> > Doesn't brcm80211 support this PHY? (Because then, reverse-engineering
> > wl is pointless.)
> 
> I'd be great to "clean up" the interface between brcm80211 and its phy
> code, so that the phy code can be moved out of drivers/staging. And once
> we've done that, we can make b43 use it too.
> 
> That way we not only get LCN PHY code, but also hopefully support for
> *other* PHYs as and when they are produced.

If you have any specific cleanup suggestions for the phy code, please send them
along.

- Henry


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

end of thread, other threads:[~2011-08-26 19:31 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-14 21:27 [PATCH 1/3] b43: LCN-PHY: add very basic PHY ops Rafał Miłecki
2011-08-14 21:27 ` Rafał Miłecki
2011-08-14 21:27 ` [PATCH 2/3] b43: LCN-PHY: implement disabling radio Rafał Miłecki
2011-08-14 21:27   ` Rafał Miłecki
2011-08-14 23:24   ` Gábor Stefanik
2011-08-14 23:24     ` Gábor Stefanik
2011-08-15  8:14     ` Rafał Miłecki
2011-08-15  8:14       ` Rafał Miłecki
2011-08-15 13:18     ` David Woodhouse
2011-08-15 13:18       ` David Woodhouse
2011-08-26 19:30       ` Henry Ptasinski
2011-08-14 21:27 ` [PATCH 3/3] b43: LCN-PHY: switch analog Rafał Miłecki
2011-08-14 21:27   ` Rafał Miłecki

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.