diff options
Diffstat (limited to 'drivers/net/wireless/b43/phy_g.c')
| -rw-r--r-- | drivers/net/wireless/b43/phy_g.c | 136 | 
1 files changed, 67 insertions, 69 deletions
diff --git a/drivers/net/wireless/b43/phy_g.c b/drivers/net/wireless/b43/phy_g.c index 0dc33b65e86..8f5c14bc10e 100644 --- a/drivers/net/wireless/b43/phy_g.c +++ b/drivers/net/wireless/b43/phy_g.c @@ -5,7 +5,7 @@    Copyright (c) 2005 Martin Langer <martin-langer@gmx.de>,    Copyright (c) 2005-2007 Stefano Brivio <stefano.brivio@polimi.it> -  Copyright (c) 2005-2008 Michael Buesch <mb@bu3sch.de> +  Copyright (c) 2005-2008 Michael Buesch <m@bues.ch>    Copyright (c) 2005, 2006 Danny van Dyk <kugelfang@gentoo.org>    Copyright (c) 2005, 2006 Andreas Jaggi <andreas.jaggi@waterwave.ch> @@ -718,7 +718,7 @@ static void b43_calc_nrssi_threshold(struct b43_wldev *dev)  	B43_WARN_ON(phy->type != B43_PHYTYPE_G);  	if (!phy->gmode || -	    !(dev->dev->bus->sprom.boardflags_lo & B43_BFL_RSSI)) { +	    !(dev->dev->bus_sprom->boardflags_lo & B43_BFL_RSSI)) {  		tmp16 = b43_nrssi_hw_read(dev, 0x20);  		if (tmp16 >= 0x20)  			tmp16 -= 0x40; @@ -897,7 +897,7 @@ b43_radio_interference_mitigation_enable(struct b43_wldev *dev, int mode)  		if (b43_phy_read(dev, 0x0033) & 0x0800)  			break; -		gphy->aci_enable = 1; +		gphy->aci_enable = true;  		phy_stacksave(B43_PHY_RADIO_BITFIELD);  		phy_stacksave(B43_PHY_G_CRS); @@ -1038,7 +1038,7 @@ b43_radio_interference_mitigation_disable(struct b43_wldev *dev, int mode)  		if (!(b43_phy_read(dev, 0x0033) & 0x0800))  			break; -		gphy->aci_enable = 0; +		gphy->aci_enable = false;  		phy_stackrestore(B43_PHY_RADIO_BITFIELD);  		phy_stackrestore(B43_PHY_G_CRS); @@ -1114,7 +1114,7 @@ static u16 radio2050_rfover_val(struct b43_wldev *dev,  {  	struct b43_phy *phy = &dev->phy;  	struct b43_phy_g *gphy = phy->g; -	struct ssb_sprom *sprom = &(dev->dev->bus->sprom); +	struct ssb_sprom *sprom = dev->dev->bus_sprom;  	if (!phy->gmode)  		return 0; @@ -1491,7 +1491,6 @@ static u16 b43_radio_init2050(struct b43_wldev *dev)  static void b43_phy_initb5(struct b43_wldev *dev)  { -	struct ssb_bus *bus = dev->dev->bus;  	struct b43_phy *phy = &dev->phy;  	struct b43_phy_g *gphy = phy->g;  	u16 offset, value; @@ -1500,8 +1499,8 @@ static void b43_phy_initb5(struct b43_wldev *dev)  	if (phy->analog == 1) {  		b43_radio_set(dev, 0x007A, 0x0050);  	} -	if ((bus->boardinfo.vendor != SSB_BOARDVENDOR_BCM) && -	    (bus->boardinfo.type != SSB_BOARD_BU4306)) { +	if ((dev->dev->board_vendor != SSB_BOARDVENDOR_BCM) && +	    (dev->dev->board_type != SSB_BOARD_BU4306)) {  		value = 0x2120;  		for (offset = 0x00A8; offset < 0x00C7; offset++) {  			b43_phy_write(dev, offset, value); @@ -1588,6 +1587,7 @@ static void b43_phy_initb5(struct b43_wldev *dev)  	b43_write16(dev, 0x03E4, (b43_read16(dev, 0x03E4) & 0xFFC0) | 0x0004);  } +/* http://bcm-v4.sipsolutions.net/802.11/PHY/Init/B6 */  static void b43_phy_initb6(struct b43_wldev *dev)  {  	struct b43_phy *phy = &dev->phy; @@ -1620,7 +1620,7 @@ static void b43_phy_initb6(struct b43_wldev *dev)  		b43_radio_write16(dev, 0x5A, 0x88);  		b43_radio_write16(dev, 0x5B, 0x6B);  		b43_radio_write16(dev, 0x5C, 0x0F); -		if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_ALTIQ) { +		if (dev->dev->bus_sprom->boardflags_lo & B43_BFL_ALTIQ) {  			b43_radio_write16(dev, 0x5D, 0xFA);  			b43_radio_write16(dev, 0x5E, 0xD8);  		} else { @@ -1671,7 +1671,7 @@ static void b43_phy_initb6(struct b43_wldev *dev)  		b43_radio_write16(dev, 0x50, 0x20);  	}  	if (phy->radio_rev <= 2) { -		b43_radio_write16(dev, 0x7C, 0x20); +		b43_radio_write16(dev, 0x50, 0x20);  		b43_radio_write16(dev, 0x5A, 0x70);  		b43_radio_write16(dev, 0x5B, 0x7B);  		b43_radio_write16(dev, 0x5C, 0xB0); @@ -1687,9 +1687,8 @@ static void b43_phy_initb6(struct b43_wldev *dev)  		b43_phy_write(dev, 0x2A, 0x8AC0);  	b43_phy_write(dev, 0x0038, 0x0668);  	b43_set_txpower_g(dev, &gphy->bbatt, &gphy->rfatt, gphy->tx_control); -	if (phy->radio_rev <= 5) { +	if (phy->radio_rev == 4 || phy->radio_rev == 5)  		b43_phy_maskset(dev, 0x5D, 0xFF80, 0x0003); -	}  	if (phy->radio_rev <= 2)  		b43_radio_write16(dev, 0x005D, 0x000D); @@ -1787,7 +1786,7 @@ static void b43_calc_loopback_gain(struct b43_wldev *dev)  	b43_phy_set(dev, B43_PHY_RFOVER, 0x0100);  	b43_phy_mask(dev, B43_PHY_RFOVERVAL, 0xCFFF); -	if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_EXTLNA) { +	if (dev->dev->bus_sprom->boardflags_lo & B43_BFL_EXTLNA) {  		if (phy->rev >= 7) {  			b43_phy_set(dev, B43_PHY_RFOVER, 0x0800);  			b43_phy_set(dev, B43_PHY_RFOVERVAL, 0x8000); @@ -1919,10 +1918,9 @@ static void b43_hardware_pctl_init_gphy(struct b43_wldev *dev)  	b43_hf_write(dev, b43_hf_read(dev) | B43_HF_HWPCTL);  } -/* Intialize B/G PHY power control */ +/* Initialize B/G PHY power control */  static void b43_phy_init_pctl(struct b43_wldev *dev)  { -	struct ssb_bus *bus = dev->dev->bus;  	struct b43_phy *phy = &dev->phy;  	struct b43_phy_g *gphy = phy->g;  	struct b43_rfatt old_rfatt; @@ -1931,8 +1929,8 @@ static void b43_phy_init_pctl(struct b43_wldev *dev)  	B43_WARN_ON(phy->type != B43_PHYTYPE_G); -	if ((bus->boardinfo.vendor == SSB_BOARDVENDOR_BCM) && -	    (bus->boardinfo.type == SSB_BOARD_BU4306)) +	if ((dev->dev->board_vendor == SSB_BOARDVENDOR_BCM) && +	    (dev->dev->board_type == SSB_BOARD_BU4306))  		return;  	b43_phy_write(dev, 0x0028, 0x8018); @@ -1958,10 +1956,10 @@ static void b43_phy_init_pctl(struct b43_wldev *dev)  			bbatt.att = 11;  			if (phy->radio_rev == 8) {  				rfatt.att = 15; -				rfatt.with_padmix = 1; +				rfatt.with_padmix = true;  			} else {  				rfatt.att = 9; -				rfatt.with_padmix = 0; +				rfatt.with_padmix = false;  			}  			b43_set_txpower_g(dev, &bbatt, &rfatt, 0);  		} @@ -2053,7 +2051,7 @@ static void b43_phy_initg(struct b43_wldev *dev)  	if (phy->rev >= 6) {  		b43_phy_maskset(dev, B43_PHY_CCK(0x36), 0x0FFF, (gphy->lo_control->tx_bias << 12));  	} -	if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_PACTRL) +	if (dev->dev->bus_sprom->boardflags_lo & B43_BFL_PACTRL)  		b43_phy_write(dev, B43_PHY_CCK(0x2E), 0x8075);  	else  		b43_phy_write(dev, B43_PHY_CCK(0x2E), 0x807F); @@ -2066,7 +2064,7 @@ static void b43_phy_initg(struct b43_wldev *dev)  		b43_phy_write(dev, B43_PHY_LO_MASK, 0x8078);  	} -	if (!(dev->dev->bus->sprom.boardflags_lo & B43_BFL_RSSI)) { +	if (!(dev->dev->bus_sprom->boardflags_lo & B43_BFL_RSSI)) {  		/* The specs state to update the NRSSI LT with  		 * the value 0x7FFFFFFF here. I think that is some weird  		 * compiler optimization in the original driver. @@ -2088,8 +2086,8 @@ static void b43_phy_initg(struct b43_wldev *dev)  	/* FIXME: The spec says in the following if, the 0 should be replaced  	   'if OFDM may not be used in the current locale'  	   but OFDM is legal everywhere */ -	if ((dev->dev->bus->chip_id == 0x4306 -	     && dev->dev->bus->chip_package == 2) || 0) { +	if ((dev->dev->chip_id == 0x4306 +	     && dev->dev->chip_pkg == 2) || 0) {  		b43_phy_mask(dev, B43_PHY_CRS0, 0xBFFF);  		b43_phy_mask(dev, B43_PHY_OFDM(0xC3), 0x7FFF);  	} @@ -2105,7 +2103,7 @@ void b43_gphy_channel_switch(struct b43_wldev *dev,  	b43_write16(dev, B43_MMIO_CHANNEL, channel2freq_bg(channel));  	if (channel == 14) { -		if (dev->dev->bus->sprom.country_code == +		if (dev->dev->bus_sprom->country_code ==  		    SSB_SPROM1CCODE_JAPAN)  			b43_hf_write(dev,  				     b43_hf_read(dev) & ~B43_HF_ACPR); @@ -2136,17 +2134,17 @@ static void default_baseband_attenuation(struct b43_wldev *dev,  static void default_radio_attenuation(struct b43_wldev *dev,  				      struct b43_rfatt *rf)  { -	struct ssb_bus *bus = dev->dev->bus; +	struct b43_bus_dev *bdev = dev->dev;  	struct b43_phy *phy = &dev->phy; -	rf->with_padmix = 0; +	rf->with_padmix = false; -	if (bus->boardinfo.vendor == SSB_BOARDVENDOR_BCM && -	    bus->boardinfo.type == SSB_BOARD_BCM4309G) { -		if (bus->boardinfo.rev < 0x43) { +	if (dev->dev->board_vendor == SSB_BOARDVENDOR_BCM && +	    dev->dev->board_type == SSB_BOARD_BCM4309G) { +		if (dev->dev->board_rev < 0x43) {  			rf->att = 2;  			return; -		} else if (bus->boardinfo.rev < 0x51) { +		} else if (dev->dev->board_rev < 0x51) {  			rf->att = 3;  			return;  		} @@ -2172,21 +2170,21 @@ static void default_radio_attenuation(struct b43_wldev *dev,  			return;  		case 1:  			if (phy->type == B43_PHYTYPE_G) { -				if (bus->boardinfo.vendor == SSB_BOARDVENDOR_BCM -				    && bus->boardinfo.type == SSB_BOARD_BCM4309G -				    && bus->boardinfo.rev >= 30) +				if (bdev->board_vendor == SSB_BOARDVENDOR_BCM +				    && bdev->board_type == SSB_BOARD_BCM4309G +				    && bdev->board_rev >= 30)  					rf->att = 3; -				else if (bus->boardinfo.vendor == +				else if (bdev->board_vendor ==  					 SSB_BOARDVENDOR_BCM -					 && bus->boardinfo.type == +					 && bdev->board_type ==  					 SSB_BOARD_BU4306)  					rf->att = 3;  				else  					rf->att = 1;  			} else { -				if (bus->boardinfo.vendor == SSB_BOARDVENDOR_BCM -				    && bus->boardinfo.type == SSB_BOARD_BCM4309G -				    && bus->boardinfo.rev >= 30) +				if (bdev->board_vendor == SSB_BOARDVENDOR_BCM +				    && bdev->board_type == SSB_BOARD_BCM4309G +				    && bdev->board_rev >= 30)  					rf->att = 7;  				else  					rf->att = 6; @@ -2194,16 +2192,16 @@ static void default_radio_attenuation(struct b43_wldev *dev,  			return;  		case 2:  			if (phy->type == B43_PHYTYPE_G) { -				if (bus->boardinfo.vendor == SSB_BOARDVENDOR_BCM -				    && bus->boardinfo.type == SSB_BOARD_BCM4309G -				    && bus->boardinfo.rev >= 30) +				if (bdev->board_vendor == SSB_BOARDVENDOR_BCM +				    && bdev->board_type == SSB_BOARD_BCM4309G +				    && bdev->board_rev >= 30)  					rf->att = 3; -				else if (bus->boardinfo.vendor == +				else if (bdev->board_vendor ==  					 SSB_BOARDVENDOR_BCM -					 && bus->boardinfo.type == +					 && bdev->board_type ==  					 SSB_BOARD_BU4306)  					rf->att = 5; -				else if (bus->chip_id == 0x4320) +				else if (bdev->chip_id == 0x4320)  					rf->att = 4;  				else  					rf->att = 3; @@ -2223,7 +2221,7 @@ static void default_radio_attenuation(struct b43_wldev *dev,  			return;  		case 8:  			rf->att = 0xA; -			rf->with_padmix = 1; +			rf->with_padmix = true;  			return;  		case 9:  		default: @@ -2384,29 +2382,29 @@ static int b43_gphy_init_tssi2dbm_table(struct b43_wldev *dev)  	struct b43_phy_g *gphy = phy->g;  	s16 pab0, pab1, pab2; -	pab0 = (s16) (dev->dev->bus->sprom.pa0b0); -	pab1 = (s16) (dev->dev->bus->sprom.pa0b1); -	pab2 = (s16) (dev->dev->bus->sprom.pa0b2); +	pab0 = (s16) (dev->dev->bus_sprom->pa0b0); +	pab1 = (s16) (dev->dev->bus_sprom->pa0b1); +	pab2 = (s16) (dev->dev->bus_sprom->pa0b2); -	B43_WARN_ON((dev->dev->bus->chip_id == 0x4301) && +	B43_WARN_ON((dev->dev->chip_id == 0x4301) &&  		    (phy->radio_ver != 0x2050)); /* Not supported anymore */ -	gphy->dyn_tssi_tbl = 0; +	gphy->dyn_tssi_tbl = false;  	if (pab0 != 0 && pab1 != 0 && pab2 != 0 &&  	    pab0 != -1 && pab1 != -1 && pab2 != -1) {  		/* The pabX values are set in SPROM. Use them. */ -		if ((s8) dev->dev->bus->sprom.itssi_bg != 0 && -		    (s8) dev->dev->bus->sprom.itssi_bg != -1) { +		if ((s8) dev->dev->bus_sprom->itssi_bg != 0 && +		    (s8) dev->dev->bus_sprom->itssi_bg != -1) {  			gphy->tgt_idle_tssi = -				(s8) (dev->dev->bus->sprom.itssi_bg); +				(s8) (dev->dev->bus_sprom->itssi_bg);  		} else  			gphy->tgt_idle_tssi = 62;  		gphy->tssi2dbm = b43_generate_dyn_tssi2dbm_tab(dev, pab0,  							       pab1, pab2);  		if (!gphy->tssi2dbm)  			return -ENOMEM; -		gphy->dyn_tssi_tbl = 1; +		gphy->dyn_tssi_tbl = true;  	} else {  		/* pabX values not set in SPROM. */  		gphy->tgt_idle_tssi = 52; @@ -2506,7 +2504,7 @@ static void b43_gphy_op_free(struct b43_wldev *dev)  	if (gphy->dyn_tssi_tbl)  		kfree(gphy->tssi2dbm); -	gphy->dyn_tssi_tbl = 0; +	gphy->dyn_tssi_tbl = false;  	gphy->tssi2dbm = NULL;  	kfree(gphy); @@ -2533,11 +2531,11 @@ static int b43_gphy_op_prepare_hardware(struct b43_wldev *dev)  	if (phy->rev == 1) {  		/* Workaround: Temporarly disable gmode through the early init  		 * phase, as the gmode stuff is not needed for phy rev 1 */ -		phy->gmode = 0; +		phy->gmode = false;  		b43_wireless_core_reset(dev, 0);  		b43_phy_initg(dev); -		phy->gmode = 1; -		b43_wireless_core_reset(dev, B43_TMSLOW_GMODE); +		phy->gmode = true; +		b43_wireless_core_reset(dev, 1);  	}  	return 0; @@ -2615,7 +2613,7 @@ static void b43_gphy_op_software_rfkill(struct b43_wldev *dev,  				      gphy->radio_off_context.rfover);  			b43_phy_write(dev, B43_PHY_RFOVERVAL,  				      gphy->radio_off_context.rfoverval); -			gphy->radio_off_context.valid = 0; +			gphy->radio_off_context.valid = false;  		}  		channel = phy->channel;  		b43_gphy_channel_switch(dev, 6, 1); @@ -2628,7 +2626,7 @@ static void b43_gphy_op_software_rfkill(struct b43_wldev *dev,  		rfoverval = b43_phy_read(dev, B43_PHY_RFOVERVAL);  		gphy->radio_off_context.rfover = rfover;  		gphy->radio_off_context.rfoverval = rfoverval; -		gphy->radio_off_context.valid = 1; +		gphy->radio_off_context.valid = true;  		b43_phy_write(dev, B43_PHY_RFOVER, rfover | 0x008C);  		b43_phy_write(dev, B43_PHY_RFOVERVAL, rfoverval & 0xFF73);  	} @@ -2713,10 +2711,10 @@ static int b43_gphy_op_interf_mitigation(struct b43_wldev *dev,  	if ((phy->rev == 0) || (!phy->gmode))  		return -ENODEV; -	gphy->aci_wlan_automatic = 0; +	gphy->aci_wlan_automatic = false;  	switch (mode) {  	case B43_INTERFMODE_AUTOWLAN: -		gphy->aci_wlan_automatic = 1; +		gphy->aci_wlan_automatic = true;  		if (gphy->aci_enable)  			mode = B43_INTERFMODE_MANUALWLAN;  		else @@ -2737,8 +2735,8 @@ static int b43_gphy_op_interf_mitigation(struct b43_wldev *dev,  		b43_radio_interference_mitigation_disable(dev, currentmode);  	if (mode == B43_INTERFMODE_NONE) { -		gphy->aci_enable = 0; -		gphy->aci_hw_rssi = 0; +		gphy->aci_enable = false; +		gphy->aci_hw_rssi = false;  	} else  		b43_radio_interference_mitigation_enable(dev, mode);  	gphy->interfmode = mode; @@ -2840,7 +2838,7 @@ static void b43_gphy_op_adjust_txpower(struct b43_wldev *dev)  				    B43_TXCTL_TXMIX;  				rfatt += 2;  				bbatt += 2; -			} else if (dev->dev->bus->sprom. +			} else if (dev->dev->bus_sprom->  				   boardflags_lo &  				   B43_BFL_PACTRL) {  				bbatt += 4 * (rfatt - 2); @@ -2914,14 +2912,14 @@ static enum b43_txpwr_result b43_gphy_op_recalc_txpower(struct b43_wldev *dev,  	estimated_pwr = b43_gphy_estimate_power_out(dev, average_tssi);  	B43_WARN_ON(phy->type != B43_PHYTYPE_G); -	max_pwr = dev->dev->bus->sprom.maxpwr_bg; -	if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_PACTRL) +	max_pwr = dev->dev->bus_sprom->maxpwr_bg; +	if (dev->dev->bus_sprom->boardflags_lo & B43_BFL_PACTRL)  		max_pwr -= 3; /* minus 0.75 */  	if (unlikely(max_pwr >= INT_TO_Q52(30/*dBm*/))) {  		b43warn(dev->wl,  			"Invalid max-TX-power value in SPROM.\n");  		max_pwr = INT_TO_Q52(20); /* fake it */ -		dev->dev->bus->sprom.maxpwr_bg = max_pwr; +		dev->dev->bus_sprom->maxpwr_bg = max_pwr;  	}  	/* Get desired power (in Q5.2) */ @@ -3014,7 +3012,7 @@ static void b43_gphy_op_pwork_60sec(struct b43_wldev *dev)  {  	struct b43_phy *phy = &dev->phy; -	if (!(dev->dev->bus->sprom.boardflags_lo & B43_BFL_RSSI)) +	if (!(dev->dev->bus_sprom->boardflags_lo & B43_BFL_RSSI))  		return;  	b43_mac_suspend(dev);  | 
