diff options
Diffstat (limited to 'package')
| -rw-r--r-- | package/mac80211/patches/840-b43-backport.patch | 159 | 
1 files changed, 159 insertions, 0 deletions
diff --git a/package/mac80211/patches/840-b43-backport.patch b/package/mac80211/patches/840-b43-backport.patch new file mode 100644 index 000000000..b2bb22a66 --- /dev/null +++ b/package/mac80211/patches/840-b43-backport.patch @@ -0,0 +1,159 @@ +--- a/drivers/net/wireless/b43/bus.c ++++ b/drivers/net/wireless/b43/bus.c +@@ -107,11 +107,9 @@ struct b43_bus_dev *b43_bus_dev_bcma_ini + 	dev->dma_dev = core->dma_dev; + 	dev->irq = core->irq; +  +-	/* + 	dev->board_vendor = core->bus->boardinfo.vendor; + 	dev->board_type = core->bus->boardinfo.type; +-	dev->board_rev = core->bus->boardinfo.rev; +-	*/ ++	dev->board_rev = core->bus->sprom.board_rev; +  + 	dev->chip_id = core->bus->chipinfo.id; + 	dev->chip_rev = core->bus->chipinfo.rev; +@@ -210,7 +208,7 @@ struct b43_bus_dev *b43_bus_dev_ssb_init +  + 	dev->board_vendor = sdev->bus->boardinfo.vendor; + 	dev->board_type = sdev->bus->boardinfo.type; +-	dev->board_rev = sdev->bus->boardinfo.rev; ++	dev->board_rev = sdev->bus->sprom.board_rev; +  + 	dev->chip_id = sdev->bus->chip_id; + 	dev->chip_rev = sdev->bus->chip_rev; +--- a/drivers/net/wireless/b43/dma.c ++++ b/drivers/net/wireless/b43/dma.c +@@ -1109,7 +1109,7 @@ static bool b43_dma_translation_in_low_w + #ifdef CONFIG_B43_SSB + 	if (dev->dev->bus_type == B43_BUS_SSB && + 	    dev->dev->sdev->bus->bustype == SSB_BUSTYPE_PCI && +-	    !(dev->dev->sdev->bus->host_pci->is_pcie && ++	    !(pci_is_pcie(dev->dev->sdev->bus->host_pci) && + 	      ssb_read32(dev->dev->sdev, SSB_TMSHIGH) & SSB_TMSHIGH_DMA64)) + 			return 1; + #endif +--- a/drivers/net/wireless/b43/main.c ++++ b/drivers/net/wireless/b43/main.c +@@ -4834,8 +4834,14 @@ static int b43_op_start(struct ieee80211 +  out_mutex_unlock: + 	mutex_unlock(&wl->mutex); +  +-	/* reload configuration */ +-	b43_op_config(hw, ~0); ++	/* ++	 * Configuration may have been overwritten during initialization. ++	 * Reload the configuration, but only if initialization was ++	 * successful. Reloading the configuration after a failed init ++	 * may hang the system. ++	 */ ++	if (!err) ++		b43_op_config(hw, ~0); +  + 	return err; + } +@@ -5279,10 +5285,10 @@ static void b43_sprom_fixup(struct ssb_b +  + 	/* boardflags workarounds */ + 	if (bus->boardinfo.vendor == SSB_BOARDVENDOR_DELL && +-	    bus->chip_id == 0x4301 && bus->boardinfo.rev == 0x74) ++	    bus->chip_id == 0x4301 && bus->sprom.board_rev == 0x74) + 		bus->sprom.boardflags_lo |= B43_BFL_BTCOEXIST; + 	if (bus->boardinfo.vendor == PCI_VENDOR_ID_APPLE && +-	    bus->boardinfo.type == 0x4E && bus->boardinfo.rev > 0x40) ++	    bus->boardinfo.type == 0x4E && bus->sprom.board_rev > 0x40) + 		bus->sprom.boardflags_lo |= B43_BFL_PACTRL; + 	if (bus->bustype == SSB_BUSTYPE_PCI) { + 		pdev = bus->host_pci; +--- a/drivers/net/wireless/b43/sdio.c ++++ b/drivers/net/wireless/b43/sdio.c +@@ -193,7 +193,7 @@ static struct sdio_driver b43_sdio_drive + 	.name		= "b43-sdio", + 	.id_table	= b43_sdio_ids, + 	.probe		= b43_sdio_probe, +-	.remove		= b43_sdio_remove, ++	.remove		= __devexit_p(b43_sdio_remove), + }; +  + int b43_sdio_init(void) +--- a/drivers/net/wireless/b43legacy/main.c ++++ b/drivers/net/wireless/b43legacy/main.c +@@ -1550,8 +1550,6 @@ static void b43legacy_request_firmware(s + 	const char *filename; + 	int err; +  +-	/* do dummy read */ +-	ssb_read32(dev->dev, SSB_TMSHIGH); + 	if (!fw->ucode) { + 		if (rev == 2) + 			filename = "ucode2"; +@@ -3758,7 +3756,7 @@ static void b43legacy_sprom_fixup(struct + 	/* boardflags workarounds */ + 	if (bus->boardinfo.vendor == PCI_VENDOR_ID_APPLE && + 	    bus->boardinfo.type == 0x4E && +-	    bus->boardinfo.rev > 0x40) ++	    bus->sprom.board_rev > 0x40) + 		bus->sprom.boardflags_lo |= B43legacy_BFL_PACTRL; + } +  +--- a/drivers/net/wireless/b43legacy/phy.c ++++ b/drivers/net/wireless/b43legacy/phy.c +@@ -408,7 +408,7 @@ static void b43legacy_phy_setupg(struct +  + 		if (is_bcm_board_vendor(dev) && + 		    (dev->dev->bus->boardinfo.type == 0x0416) && +-		    (dev->dev->bus->boardinfo.rev == 0x0017)) ++		    (dev->dev->bus->sprom.board_rev == 0x0017)) + 			return; +  + 		b43legacy_ilt_write(dev, 0x5001, 0x0002); +@@ -424,7 +424,7 @@ static void b43legacy_phy_setupg(struct +  + 		if (is_bcm_board_vendor(dev) && + 		    (dev->dev->bus->boardinfo.type == 0x0416) && +-		    (dev->dev->bus->boardinfo.rev == 0x0017)) ++		    (dev->dev->bus->sprom.board_rev == 0x0017)) + 			return; +  + 		b43legacy_ilt_write(dev, 0x0401, 0x0002); +--- a/drivers/net/wireless/b43legacy/radio.c ++++ b/drivers/net/wireless/b43legacy/radio.c +@@ -1998,7 +1998,7 @@ u16 b43legacy_default_radio_attenuation( + 			if (phy->type == B43legacy_PHYTYPE_G) { + 				if (is_bcm_board_vendor(dev) && + 				    dev->dev->bus->boardinfo.type == 0x421 && +-				    dev->dev->bus->boardinfo.rev >= 30) ++				    dev->dev->bus->sprom.board_rev >= 30) + 					att = 3; + 				else if (is_bcm_board_vendor(dev) && + 					 dev->dev->bus->boardinfo.type == 0x416) +@@ -2008,7 +2008,7 @@ u16 b43legacy_default_radio_attenuation( + 			} else { + 				if (is_bcm_board_vendor(dev) && + 				    dev->dev->bus->boardinfo.type == 0x421 && +-				    dev->dev->bus->boardinfo.rev >= 30) ++				    dev->dev->bus->sprom.board_rev >= 30) + 					att = 7; + 				else + 					att = 6; +@@ -2018,7 +2018,7 @@ u16 b43legacy_default_radio_attenuation( + 			if (phy->type == B43legacy_PHYTYPE_G) { + 				if (is_bcm_board_vendor(dev) && + 				    dev->dev->bus->boardinfo.type == 0x421 && +-				    dev->dev->bus->boardinfo.rev >= 30) ++				    dev->dev->bus->sprom.board_rev >= 30) + 					att = 3; + 				else if (is_bcm_board_vendor(dev) && + 					 dev->dev->bus->boardinfo.type == +@@ -2052,9 +2052,9 @@ u16 b43legacy_default_radio_attenuation( + 	} + 	if (is_bcm_board_vendor(dev) && + 	    dev->dev->bus->boardinfo.type == 0x421) { +-		if (dev->dev->bus->boardinfo.rev < 0x43) ++		if (dev->dev->bus->sprom.board_rev < 0x43) + 			att = 2; +-		else if (dev->dev->bus->boardinfo.rev < 0x51) ++		else if (dev->dev->bus->sprom.board_rev < 0x51) + 			att = 3; + 	} + 	if (att == 0xFFFF)  | 
