Commit e63e4363 authored by Michael Buesch's avatar Michael Buesch Committed by John W. Linville
Browse files

b43: Add LP-PHY template



This adds template code for the LP-PHY.
No actual functionality is implemented.

Signed-off-by: default avatarMichael Buesch <mb@bu3sch.de>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 3d0da751
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -80,6 +80,18 @@ config B43_NPHY

	  SAY N.

config B43_PHY_LP
	bool "IEEE 802.11g LP-PHY support (BROKEN)"
	depends on B43 && EXPERIMENTAL && BROKEN
	---help---
	  Support for the LP-PHY.
	  The LP-PHY is an IEEE 802.11g based PHY built into some notebooks
	  and embedded devices.

	  THIS IS BROKEN AND DOES NOT WORK YET.

	  SAY N.

# This config option automatically enables b43 LEDS support,
# if it's possible.
config B43_LEDS
+1 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ b43-y += phy_common.o
b43-y				+= phy_g.o
b43-y				+= phy_a.o
b43-$(CONFIG_B43_NPHY)		+= phy_n.o
b43-$(CONFIG_B43_PHY_LP)	+= phy_lp.o
b43-y				+= sysfs.o
b43-y				+= xmit.o
b43-y				+= lo.o
+4 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@
#include "phy_g.h"
#include "phy_a.h"
#include "phy_n.h"
#include "phy_lp.h"
#include "b43.h"
#include "main.h"

@@ -54,7 +55,9 @@ int b43_phy_operations_setup(struct b43_wldev *dev)
#endif
		break;
	case B43_PHYTYPE_LP:
		/* FIXME: Not yet */
#ifdef CONFIG_B43_PHY_LP
		phy->ops = &b43_phyops_lp;
#endif
		break;
	}
	if (B43_WARN_ON(!phy->ops))
+3 −0
Original line number Diff line number Diff line
@@ -165,6 +165,7 @@ struct b43_phy_operations {
struct b43_phy_a;
struct b43_phy_g;
struct b43_phy_n;
struct b43_phy_lp;

struct b43_phy {
	/* Hardware operation callbacks. */
@@ -185,6 +186,8 @@ struct b43_phy {
		struct b43_phy_g *g;
		/* N-PHY specific information */
		struct b43_phy_n *n;
		/* LP-PHY specific information */
		struct b43_phy_lp *lp;
	};

	/* Band support flags. */
+142 −0
Original line number Diff line number Diff line
/*

  Broadcom B43 wireless driver
  IEEE 802.11g LP-PHY driver

  Copyright (c) 2008 Michael Buesch <mb@bu3sch.de>

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; see the file COPYING.  If not, write to
  the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
  Boston, MA 02110-1301, USA.

*/

#include "b43.h"
#include "phy_lp.h"
#include "phy_common.h"


static int b43_lpphy_op_allocate(struct b43_wldev *dev)
{
	struct b43_phy_lp *lpphy;

	lpphy = kzalloc(sizeof(*lpphy), GFP_KERNEL);
	if (!lpphy)
		return -ENOMEM;
	dev->phy.lp = lpphy;

	//TODO

	return 0;
}

static int b43_lpphy_op_init(struct b43_wldev *dev)
{
	struct b43_phy_lp *lpphy = dev->phy.lp;

	//TODO
	lpphy->initialised = 1;

	return 0;
}

static void b43_lpphy_op_exit(struct b43_wldev *dev)
{
	struct b43_phy_lp *lpphy = dev->phy.lp;

	if (lpphy->initialised) {
		//TODO
		lpphy->initialised = 0;
	}

	kfree(lpphy);
	dev->phy.lp = NULL;
}

static u16 b43_lpphy_op_read(struct b43_wldev *dev, u16 reg)
{
	//TODO
	return 0;
}

static void b43_lpphy_op_write(struct b43_wldev *dev, u16 reg, u16 value)
{
	//TODO
}

static u16 b43_lpphy_op_radio_read(struct b43_wldev *dev, u16 reg)
{
	//TODO
	return 0;
}

static void b43_lpphy_op_radio_write(struct b43_wldev *dev, u16 reg, u16 value)
{
	/* Register 1 is a 32-bit register. */
	B43_WARN_ON(reg == 1);

	//TODO
}

static void b43_lpphy_op_software_rfkill(struct b43_wldev *dev,
					 enum rfkill_state state)
{
	//TODO
}

static int b43_lpphy_op_switch_channel(struct b43_wldev *dev,
				       unsigned int new_channel)
{
	//TODO
	return 0;
}

static unsigned int b43_lpphy_op_get_default_chan(struct b43_wldev *dev)
{
	return 1; /* Default to channel 1 */
}

static void b43_lpphy_op_set_rx_antenna(struct b43_wldev *dev, int antenna)
{
	//TODO
}

static void b43_lpphy_op_adjust_txpower(struct b43_wldev *dev)
{
	//TODO
}

static enum b43_txpwr_result b43_lpphy_op_recalc_txpower(struct b43_wldev *dev,
							 bool ignore_tssi)
{
	//TODO
	return B43_TXPWR_RES_DONE;
}


const struct b43_phy_operations b43_phyops_lp = {
	.allocate		= b43_lpphy_op_allocate,
	.init			= b43_lpphy_op_init,
	.exit			= b43_lpphy_op_exit,
	.phy_read		= b43_lpphy_op_read,
	.phy_write		= b43_lpphy_op_write,
	.radio_read		= b43_lpphy_op_radio_read,
	.radio_write		= b43_lpphy_op_radio_write,
	.software_rfkill	= b43_lpphy_op_software_rfkill,
	.switch_channel		= b43_lpphy_op_switch_channel,
	.get_default_chan	= b43_lpphy_op_get_default_chan,
	.set_rx_antenna		= b43_lpphy_op_set_rx_antenna,
	.recalc_txpower		= b43_lpphy_op_recalc_txpower,
	.adjust_txpower		= b43_lpphy_op_adjust_txpower,
};
Loading