diff options
-rw-r--r-- | package/b43/patches/001-porting.patch | 392 |
1 files changed, 392 insertions, 0 deletions
diff --git a/package/b43/patches/001-porting.patch b/package/b43/patches/001-porting.patch new file mode 100644 index 0000000000..56f4d6d6f0 --- /dev/null +++ b/package/b43/patches/001-porting.patch @@ -0,0 +1,392 @@ +Index: b43/main.c +=================================================================== +--- b43.orig/main.c 2008-02-15 22:39:48.000000000 +0100 ++++ b43/main.c 2008-02-15 22:45:38.000000000 +0100 +@@ -2017,7 +2017,7 @@ static int b43_gpio_init(struct b43_wlde + mask |= 0x0180; + set |= 0x0180; + } +- if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_PACTRL) { ++ if (dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_PACTRL) { + b43_write16(dev, B43_MMIO_GPIO_MASK, + b43_read16(dev, B43_MMIO_GPIO_MASK) + | 0x0200); +@@ -2384,7 +2384,7 @@ static void b43_periodic_every60sec(stru + return; + if (!b43_has_hardware_pctl(phy)) + b43_lo_g_ctl_mark_all_unused(dev); +- if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_RSSI) { ++ if (dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_RSSI) { + b43_mac_suspend(dev); + b43_calc_nrssi_slope(dev); + if ((phy->radio_ver == 0x2050) && (phy->radio_rev == 8)) { +@@ -2794,11 +2794,14 @@ u8 b43_ieee80211_antenna_sanitize(struct + return 0; + } + ++#if 0 + /* Get the mask of available antennas. */ + if (dev->phy.gmode) + antenna_mask = dev->dev->bus->sprom.ant_available_bg; + else + antenna_mask = dev->dev->bus->sprom.ant_available_a; ++#endif ++ antenna_mask = 0xFF; //FIXME need ssb update + + if (!(antenna_mask & (1 << (antenna_nr - 1)))) { + /* This antenna is not available. Fall back to default. */ +@@ -2939,7 +2942,7 @@ static int b43_op_set_key(struct ieee802 + u8 algorithm; + u8 index; + int err; +- DECLARE_MAC_BUF(mac); ++// DECLARE_MAC_BUF(mac); + + if (modparam_nohwcrypt) + return -ENOSPC; /* User disabled HW-crypto */ +@@ -3019,10 +3022,12 @@ out_unlock: + spin_unlock_irqrestore(&wl->irq_lock, flags); + mutex_unlock(&wl->mutex); + if (!err) { ++#if 0 + b43dbg(wl, "%s hardware based encryption for keyidx: %d, " + "mac: %s\n", + cmd == SET_KEY ? "Using" : "Disabling", key->keyidx, + print_mac(mac, addr)); ++#endif + } + return err; + } +@@ -3349,13 +3354,13 @@ static void b43_bluetooth_coext_enable(s + struct ssb_sprom *sprom = &dev->dev->bus->sprom; + u32 hf; + +- if (!(sprom->boardflags_lo & B43_BFL_BTCOEXIST)) ++ if (!(sprom->r1.boardflags_lo & B43_BFL_BTCOEXIST)) + return; + if (dev->phy.type != B43_PHYTYPE_B && !dev->phy.gmode) + return; + + hf = b43_hf_read(dev); +- if (sprom->boardflags_lo & B43_BFL_BTCMOD) ++ if (sprom->r1.boardflags_lo & B43_BFL_BTCMOD) + hf |= B43_HF_BTCOEXALT; + else + hf |= B43_HF_BTCOEX; +@@ -3497,7 +3502,7 @@ static int b43_wireless_core_init(struct + hf |= B43_HF_SYMW; + if (phy->rev == 1) + hf |= B43_HF_GDCW; +- if (sprom->boardflags_lo & B43_BFL_PACTRL) ++ if (sprom->r1.boardflags_lo & B43_BFL_PACTRL) + hf |= B43_HF_OFDMPABOOST; + } else if (phy->type == B43_PHYTYPE_B) { + hf |= B43_HF_SYMW; +@@ -4001,10 +4006,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->sprom.boardflags_lo |= B43_BFL_BTCOEXIST; ++ bus->sprom.r1.boardflags_lo |= B43_BFL_BTCOEXIST; + if (bus->boardinfo.vendor == PCI_VENDOR_ID_APPLE && + bus->boardinfo.type == 0x4E && bus->boardinfo.rev > 0x40) +- bus->sprom.boardflags_lo |= B43_BFL_PACTRL; ++ bus->sprom.r1.boardflags_lo |= B43_BFL_PACTRL; + } + + static void b43_wireless_exit(struct ssb_device *dev, struct b43_wl *wl) +@@ -4038,10 +4043,10 @@ static int b43_wireless_init(struct ssb_ + hw->max_noise = -110; + hw->queues = 1; /* FIXME: hardware has more queues */ + SET_IEEE80211_DEV(hw, dev->dev); +- if (is_valid_ether_addr(sprom->et1mac)) +- SET_IEEE80211_PERM_ADDR(hw, sprom->et1mac); ++ if (is_valid_ether_addr(sprom->r1.et1mac)) ++ SET_IEEE80211_PERM_ADDR(hw, sprom->r1.et1mac); + else +- SET_IEEE80211_PERM_ADDR(hw, sprom->il0mac); ++ SET_IEEE80211_PERM_ADDR(hw, sprom->r1.il0mac); + + /* Get and initialize struct b43_wl */ + wl = hw_to_b43_wl(hw); +Index: b43/leds.c +=================================================================== +--- b43.orig/leds.c 2008-02-06 00:55:14.000000000 +0100 ++++ b43/leds.c 2008-02-15 22:51:32.000000000 +0100 +@@ -190,10 +190,10 @@ void b43_leds_init(struct b43_wldev *dev + enum b43_led_behaviour behaviour; + bool activelow; + +- sprom[0] = bus->sprom.gpio0; +- sprom[1] = bus->sprom.gpio1; +- sprom[2] = bus->sprom.gpio2; +- sprom[3] = bus->sprom.gpio3; ++ sprom[0] = bus->sprom.r1.gpio0; ++ sprom[1] = bus->sprom.r1.gpio1; ++ sprom[2] = bus->sprom.r1.gpio2; ++ sprom[3] = bus->sprom.r1.gpio3; + + for (i = 0; i < 4; i++) { + if (sprom[i] == 0xFF) { +Index: b43/lo.c +=================================================================== +--- b43.orig/lo.c 2008-02-06 00:55:14.000000000 +0100 ++++ b43/lo.c 2008-02-15 22:50:17.000000000 +0100 +@@ -264,7 +264,7 @@ static u16 lo_measure_feedthrough(struct + rfover |= pga; + rfover |= lna; + rfover |= trsw_rx; +- if ((dev->dev->bus->sprom.boardflags_lo & B43_BFL_EXTLNA) ++ if ((dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_EXTLNA) + && phy->rev > 6) + rfover |= B43_PHY_RFOVERVAL_EXTLNA; + +@@ -634,7 +634,7 @@ static void lo_measure_setup(struct b43_ + & 0xFFFC); + if (phy->type == B43_PHYTYPE_G) { + if ((phy->rev >= 7) && +- (sprom->boardflags_lo & B43_BFL_EXTLNA)) { ++ (sprom->r1.boardflags_lo & B43_BFL_EXTLNA)) { + b43_phy_write(dev, B43_PHY_RFOVER, 0x933); + } else { + b43_phy_write(dev, B43_PHY_RFOVER, 0x133); +Index: b43/nphy.c +=================================================================== +--- b43.orig/nphy.c 2008-02-06 00:55:14.000000000 +0100 ++++ b43/nphy.c 2008-02-15 22:48:51.000000000 +0100 +@@ -134,6 +134,8 @@ static void b43_radio_init2055_post(stru + + b43_radio_mask(dev, B2055_MASTER1, 0xFFF3); + msleep(1); ++//FIXME ssb update needed ++#if 0 + if ((sprom->revision != 4) || !(sprom->boardflags_hi & 0x0002)) { + if ((binfo->vendor != PCI_VENDOR_ID_BROADCOM) || + (binfo->type != 0x46D) || +@@ -143,6 +145,7 @@ static void b43_radio_init2055_post(stru + msleep(1); + } + } ++#endif + b43_radio_maskset(dev, B2055_RRCCAL_NOPTSEL, 0x3F, 0x2C); + msleep(1); + b43_radio_write16(dev, B2055_CAL_MISC, 0x3C); +Index: b43/phy.c +=================================================================== +--- b43.orig/phy.c 2008-02-06 00:55:14.000000000 +0100 ++++ b43/phy.c 2008-02-15 22:47:55.000000000 +0100 +@@ -924,7 +924,7 @@ static void b43_phy_inita(struct b43_wld + } + + if ((phy->type == B43_PHYTYPE_G) && +- (dev->dev->bus->sprom.boardflags_lo & B43_BFL_PACTRL)) { ++ (dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_PACTRL)) { + b43_phy_write(dev, B43_PHY_OFDM(0x6E), + (b43_phy_read(dev, B43_PHY_OFDM(0x6E)) + & 0xE000) | 0x3CF); +@@ -1027,7 +1027,7 @@ static void b43_phy_initb4(struct b43_wl + if (phy->radio_ver == 0x2050) + b43_phy_write(dev, 0x002A, 0x88C2); + b43_set_txpower_g(dev, &phy->bbatt, &phy->rfatt, phy->tx_control); +- if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_RSSI) { ++ if (dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_RSSI) { + b43_calc_nrssi_slope(dev); + b43_calc_nrssi_threshold(dev); + } +@@ -1174,7 +1174,7 @@ static void b43_phy_initb6(struct b43_wl + 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.r1.boardflags_lo & B43_BFL_ALTIQ) { + b43_radio_write16(dev, 0x5D, 0xFA); + b43_radio_write16(dev, 0x5E, 0xD8); + } else { +@@ -1266,7 +1266,7 @@ static void b43_phy_initb6(struct b43_wl + b43_phy_write(dev, 0x0062, 0x0007); + b43_radio_init2050(dev); + b43_lo_g_measure(dev); +- if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_RSSI) { ++ if (dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_RSSI) { + b43_calc_nrssi_slope(dev); + b43_calc_nrssi_threshold(dev); + } +@@ -1386,7 +1386,7 @@ static void b43_calc_loopback_gain(struc + b43_phy_write(dev, B43_PHY_RFOVERVAL, + b43_phy_read(dev, B43_PHY_RFOVERVAL) & 0xCFFF); + +- if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_EXTLNA) { ++ if (dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_EXTLNA) { + if (phy->rev >= 7) { + b43_phy_write(dev, B43_PHY_RFOVER, + b43_phy_read(dev, B43_PHY_RFOVER) +@@ -1553,7 +1553,7 @@ static void b43_phy_initg(struct b43_wld + & 0x0FFF) | (phy->lo_control-> + tx_bias << 12)); + } +- if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_PACTRL) ++ if (dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_PACTRL) + b43_phy_write(dev, B43_PHY_CCK(0x2E), 0x8075); + else + b43_phy_write(dev, B43_PHY_CCK(0x2E), 0x807F); +@@ -1567,7 +1567,7 @@ static void b43_phy_initg(struct b43_wld + b43_phy_write(dev, B43_PHY_LO_MASK, 0x8078); + } + +- if (!(dev->dev->bus->sprom.boardflags_lo & B43_BFL_RSSI)) { ++ if (!(dev->dev->bus->sprom.r1.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. +@@ -1776,15 +1776,15 @@ void b43_phy_xmitpower(struct b43_wldev + estimated_pwr = + b43_phy_estimate_power_out(dev, average); + +- max_pwr = dev->dev->bus->sprom.maxpwr_bg; +- if ((dev->dev->bus->sprom.boardflags_lo ++ max_pwr = dev->dev->bus->sprom.r1.maxpwr_bg; ++ if ((dev->dev->bus->sprom.r1.boardflags_lo + & B43_BFL_PACTRL) && (phy->type == B43_PHYTYPE_G)) + max_pwr -= 0x3; + if (unlikely(max_pwr <= 0)) { + b43warn(dev->wl, + "Invalid max-TX-power value in SPROM.\n"); + max_pwr = 60; /* fake it */ +- dev->dev->bus->sprom.maxpwr_bg = max_pwr; ++ dev->dev->bus->sprom.r1.maxpwr_bg = max_pwr; + } + + /*TODO: +@@ -1842,7 +1842,7 @@ void b43_phy_xmitpower(struct b43_wldev + B43_TXCTL_TXMIX; + rfatt += 2; + bbatt += 2; +- } else if (dev->dev->bus->sprom. ++ } else if (dev->dev->bus->sprom.r1. + boardflags_lo & + B43_BFL_PACTRL) { + bbatt += 4 * (rfatt - 2); +@@ -1921,13 +1921,13 @@ int b43_phy_init_tssi2dbm_table(struct b + s8 *dyn_tssi2dbm; + + if (phy->type == B43_PHYTYPE_A) { +- pab0 = (s16) (dev->dev->bus->sprom.pa1b0); +- pab1 = (s16) (dev->dev->bus->sprom.pa1b1); +- pab2 = (s16) (dev->dev->bus->sprom.pa1b2); ++ pab0 = (s16) (dev->dev->bus->sprom.r1.pa1b0); ++ pab1 = (s16) (dev->dev->bus->sprom.r1.pa1b1); ++ pab2 = (s16) (dev->dev->bus->sprom.r1.pa1b2); + } else { +- 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.r1.pa0b0); ++ pab1 = (s16) (dev->dev->bus->sprom.r1.pa0b1); ++ pab2 = (s16) (dev->dev->bus->sprom.r1.pa0b2); + } + + if ((dev->dev->bus->chip_id == 0x4301) && (phy->radio_ver != 0x2050)) { +@@ -1940,17 +1940,17 @@ int b43_phy_init_tssi2dbm_table(struct b + pab0 != -1 && pab1 != -1 && pab2 != -1) { + /* The pabX values are set in SPROM. Use them. */ + if (phy->type == B43_PHYTYPE_A) { +- if ((s8) dev->dev->bus->sprom.itssi_a != 0 && +- (s8) dev->dev->bus->sprom.itssi_a != -1) ++ if ((s8) dev->dev->bus->sprom.r1.itssi_a != 0 && ++ (s8) dev->dev->bus->sprom.r1.itssi_a != -1) + phy->tgt_idle_tssi = +- (s8) (dev->dev->bus->sprom.itssi_a); ++ (s8) (dev->dev->bus->sprom.r1.itssi_a); + else + phy->tgt_idle_tssi = 62; + } else { +- if ((s8) dev->dev->bus->sprom.itssi_bg != 0 && +- (s8) dev->dev->bus->sprom.itssi_bg != -1) ++ if ((s8) dev->dev->bus->sprom.r1.itssi_bg != 0 && ++ (s8) dev->dev->bus->sprom.r1.itssi_bg != -1) + phy->tgt_idle_tssi = +- (s8) (dev->dev->bus->sprom.itssi_bg); ++ (s8) (dev->dev->bus->sprom.r1.itssi_bg); + else + phy->tgt_idle_tssi = 62; + } +@@ -2894,7 +2894,7 @@ void b43_calc_nrssi_threshold(struct b43 + if (phy->radio_ver != 0x2050) + return; + if (! +- (dev->dev->bus->sprom. ++ (dev->dev->bus->sprom.r1. + boardflags_lo & B43_BFL_RSSI)) + return; + +@@ -2925,7 +2925,7 @@ void b43_calc_nrssi_threshold(struct b43 + } + case B43_PHYTYPE_G: + if (!phy->gmode || +- !(dev->dev->bus->sprom.boardflags_lo & B43_BFL_RSSI)) { ++ !(dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_RSSI)) { + tmp16 = b43_nrssi_hw_read(dev, 0x20); + if (tmp16 >= 0x20) + tmp16 -= 0x40; +@@ -3447,7 +3447,7 @@ static u16 radio2050_rfover_val(struct b + } + + if ((phy->rev < 7) || +- !(sprom->boardflags_lo & B43_BFL_EXTLNA)) { ++ !(sprom->r1.boardflags_lo & B43_BFL_EXTLNA)) { + if (phy_register == B43_PHY_RFOVER) { + return 0x1B3; + } else if (phy_register == B43_PHY_RFOVERVAL) { +@@ -3487,7 +3487,7 @@ static u16 radio2050_rfover_val(struct b + } + } else { + if ((phy->rev < 7) || +- !(sprom->boardflags_lo & B43_BFL_EXTLNA)) { ++ !(sprom->r1.boardflags_lo & B43_BFL_EXTLNA)) { + if (phy_register == B43_PHY_RFOVER) { + return 0x1B3; + } else if (phy_register == B43_PHY_RFOVERVAL) { +@@ -3979,7 +3979,7 @@ int b43_radio_selectchannel(struct b43_w + b43_write16(dev, B43_MMIO_CHANNEL, channel2freq_bg(channel)); + + if (channel == 14) { +- if (dev->dev->bus->sprom.country_code == ++ if (dev->dev->bus->sprom.r1.country_code == + SSB_SPROM1CCODE_JAPAN) + b43_hf_write(dev, + b43_hf_read(dev) & ~B43_HF_ACPR); +Index: b43/wa.c +=================================================================== +--- b43.orig/wa.c 2008-02-06 00:55:14.000000000 +0100 ++++ b43/wa.c 2008-02-15 22:50:54.000000000 +0100 +@@ -535,7 +535,7 @@ static void b43_wa_boards_g(struct b43_w + } else { + b43_ofdmtab_write16(dev, B43_OFDMTAB_GAINX, 1, 0x0002); + b43_ofdmtab_write16(dev, B43_OFDMTAB_GAINX, 2, 0x0001); +- if ((bus->sprom.boardflags_lo & B43_BFL_EXTLNA) && ++ if ((bus->sprom.r1.boardflags_lo & B43_BFL_EXTLNA) && + (phy->rev >= 7)) { + b43_phy_write(dev, B43_PHY_EXTG(0x11), + b43_phy_read(dev, B43_PHY_EXTG(0x11)) & 0xF7FF); +@@ -548,7 +548,7 @@ static void b43_wa_boards_g(struct b43_w + } + } + } +- if (bus->sprom.boardflags_lo & B43_BFL_FEM) { ++ if (bus->sprom.r1.boardflags_lo & B43_BFL_FEM) { + b43_phy_write(dev, B43_PHY_GTABCTL, 0x3120); + b43_phy_write(dev, B43_PHY_GTABDATA, 0xC480); + } +Index: b43/xmit.c +=================================================================== +--- b43.orig/xmit.c 2008-02-06 00:55:14.000000000 +0100 ++++ b43/xmit.c 2008-02-15 22:49:37.000000000 +0100 +@@ -444,7 +444,7 @@ static s8 b43_rssi_postprocess(struct b4 + else + tmp -= 3; + } else { +- if (dev->dev->bus->sprom. ++ if (dev->dev->bus->sprom.r1. + boardflags_lo & B43_BFL_RSSI) { + if (in_rssi > 63) + in_rssi = 63; |