Whoops, forgot to add this file to the b43-update commit.
[librecmc/librecmc.git] / package / b43 / patches / 001-porting.patch
1 Index: b43/main.c
2 ===================================================================
3 --- b43.orig/main.c     2008-02-15 22:39:48.000000000 +0100
4 +++ b43/main.c  2008-02-15 22:45:38.000000000 +0100
5 @@ -2017,7 +2017,7 @@ static int b43_gpio_init(struct b43_wlde
6                 mask |= 0x0180;
7                 set |= 0x0180;
8         }
9 -       if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_PACTRL) {
10 +       if (dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_PACTRL) {
11                 b43_write16(dev, B43_MMIO_GPIO_MASK,
12                             b43_read16(dev, B43_MMIO_GPIO_MASK)
13                             | 0x0200);
14 @@ -2384,7 +2384,7 @@ static void b43_periodic_every60sec(stru
15                 return;
16         if (!b43_has_hardware_pctl(phy))
17                 b43_lo_g_ctl_mark_all_unused(dev);
18 -       if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_RSSI) {
19 +       if (dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_RSSI) {
20                 b43_mac_suspend(dev);
21                 b43_calc_nrssi_slope(dev);
22                 if ((phy->radio_ver == 0x2050) && (phy->radio_rev == 8)) {
23 @@ -2794,11 +2794,14 @@ u8 b43_ieee80211_antenna_sanitize(struct
24                 return 0;
25         }
26  
27 +#if 0
28         /* Get the mask of available antennas. */
29         if (dev->phy.gmode)
30                 antenna_mask = dev->dev->bus->sprom.ant_available_bg;
31         else
32                 antenna_mask = dev->dev->bus->sprom.ant_available_a;
33 +#endif
34 +       antenna_mask = 0xFF; //FIXME need ssb update
35  
36         if (!(antenna_mask & (1 << (antenna_nr - 1)))) {
37                 /* This antenna is not available. Fall back to default. */
38 @@ -2939,7 +2942,7 @@ static int b43_op_set_key(struct ieee802
39         u8 algorithm;
40         u8 index;
41         int err;
42 -       DECLARE_MAC_BUF(mac);
43 +//     DECLARE_MAC_BUF(mac);
44  
45         if (modparam_nohwcrypt)
46                 return -ENOSPC; /* User disabled HW-crypto */
47 @@ -3019,10 +3022,12 @@ out_unlock:
48         spin_unlock_irqrestore(&wl->irq_lock, flags);
49         mutex_unlock(&wl->mutex);
50         if (!err) {
51 +#if 0
52                 b43dbg(wl, "%s hardware based encryption for keyidx: %d, "
53                        "mac: %s\n",
54                        cmd == SET_KEY ? "Using" : "Disabling", key->keyidx,
55                        print_mac(mac, addr));
56 +#endif
57         }
58         return err;
59  }
60 @@ -3349,13 +3354,13 @@ static void b43_bluetooth_coext_enable(s
61         struct ssb_sprom *sprom = &dev->dev->bus->sprom;
62         u32 hf;
63  
64 -       if (!(sprom->boardflags_lo & B43_BFL_BTCOEXIST))
65 +       if (!(sprom->r1.boardflags_lo & B43_BFL_BTCOEXIST))
66                 return;
67         if (dev->phy.type != B43_PHYTYPE_B && !dev->phy.gmode)
68                 return;
69  
70         hf = b43_hf_read(dev);
71 -       if (sprom->boardflags_lo & B43_BFL_BTCMOD)
72 +       if (sprom->r1.boardflags_lo & B43_BFL_BTCMOD)
73                 hf |= B43_HF_BTCOEXALT;
74         else
75                 hf |= B43_HF_BTCOEX;
76 @@ -3497,7 +3502,7 @@ static int b43_wireless_core_init(struct
77                 hf |= B43_HF_SYMW;
78                 if (phy->rev == 1)
79                         hf |= B43_HF_GDCW;
80 -               if (sprom->boardflags_lo & B43_BFL_PACTRL)
81 +               if (sprom->r1.boardflags_lo & B43_BFL_PACTRL)
82                         hf |= B43_HF_OFDMPABOOST;
83         } else if (phy->type == B43_PHYTYPE_B) {
84                 hf |= B43_HF_SYMW;
85 @@ -4001,10 +4006,10 @@ static void b43_sprom_fixup(struct ssb_b
86         /* boardflags workarounds */
87         if (bus->boardinfo.vendor == SSB_BOARDVENDOR_DELL &&
88             bus->chip_id == 0x4301 && bus->boardinfo.rev == 0x74)
89 -               bus->sprom.boardflags_lo |= B43_BFL_BTCOEXIST;
90 +               bus->sprom.r1.boardflags_lo |= B43_BFL_BTCOEXIST;
91         if (bus->boardinfo.vendor == PCI_VENDOR_ID_APPLE &&
92             bus->boardinfo.type == 0x4E && bus->boardinfo.rev > 0x40)
93 -               bus->sprom.boardflags_lo |= B43_BFL_PACTRL;
94 +               bus->sprom.r1.boardflags_lo |= B43_BFL_PACTRL;
95  }
96  
97  static void b43_wireless_exit(struct ssb_device *dev, struct b43_wl *wl)
98 @@ -4038,10 +4043,10 @@ static int b43_wireless_init(struct ssb_
99         hw->max_noise = -110;
100         hw->queues = 1;         /* FIXME: hardware has more queues */
101         SET_IEEE80211_DEV(hw, dev->dev);
102 -       if (is_valid_ether_addr(sprom->et1mac))
103 -               SET_IEEE80211_PERM_ADDR(hw, sprom->et1mac);
104 +       if (is_valid_ether_addr(sprom->r1.et1mac))
105 +               SET_IEEE80211_PERM_ADDR(hw, sprom->r1.et1mac);
106         else
107 -               SET_IEEE80211_PERM_ADDR(hw, sprom->il0mac);
108 +               SET_IEEE80211_PERM_ADDR(hw, sprom->r1.il0mac);
109  
110         /* Get and initialize struct b43_wl */
111         wl = hw_to_b43_wl(hw);
112 Index: b43/leds.c
113 ===================================================================
114 --- b43.orig/leds.c     2008-02-06 00:55:14.000000000 +0100
115 +++ b43/leds.c  2008-02-15 22:51:32.000000000 +0100
116 @@ -190,10 +190,10 @@ void b43_leds_init(struct b43_wldev *dev
117         enum b43_led_behaviour behaviour;
118         bool activelow;
119  
120 -       sprom[0] = bus->sprom.gpio0;
121 -       sprom[1] = bus->sprom.gpio1;
122 -       sprom[2] = bus->sprom.gpio2;
123 -       sprom[3] = bus->sprom.gpio3;
124 +       sprom[0] = bus->sprom.r1.gpio0;
125 +       sprom[1] = bus->sprom.r1.gpio1;
126 +       sprom[2] = bus->sprom.r1.gpio2;
127 +       sprom[3] = bus->sprom.r1.gpio3;
128  
129         for (i = 0; i < 4; i++) {
130                 if (sprom[i] == 0xFF) {
131 Index: b43/lo.c
132 ===================================================================
133 --- b43.orig/lo.c       2008-02-06 00:55:14.000000000 +0100
134 +++ b43/lo.c    2008-02-15 22:50:17.000000000 +0100
135 @@ -264,7 +264,7 @@ static u16 lo_measure_feedthrough(struct
136                 rfover |= pga;
137                 rfover |= lna;
138                 rfover |= trsw_rx;
139 -               if ((dev->dev->bus->sprom.boardflags_lo & B43_BFL_EXTLNA)
140 +               if ((dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_EXTLNA)
141                     && phy->rev > 6)
142                         rfover |= B43_PHY_RFOVERVAL_EXTLNA;
143  
144 @@ -634,7 +634,7 @@ static void lo_measure_setup(struct b43_
145                               & 0xFFFC);
146                 if (phy->type == B43_PHYTYPE_G) {
147                         if ((phy->rev >= 7) &&
148 -                           (sprom->boardflags_lo & B43_BFL_EXTLNA)) {
149 +                           (sprom->r1.boardflags_lo & B43_BFL_EXTLNA)) {
150                                 b43_phy_write(dev, B43_PHY_RFOVER, 0x933);
151                         } else {
152                                 b43_phy_write(dev, B43_PHY_RFOVER, 0x133);
153 Index: b43/nphy.c
154 ===================================================================
155 --- b43.orig/nphy.c     2008-02-06 00:55:14.000000000 +0100
156 +++ b43/nphy.c  2008-02-15 22:48:51.000000000 +0100
157 @@ -134,6 +134,8 @@ static void b43_radio_init2055_post(stru
158  
159         b43_radio_mask(dev, B2055_MASTER1, 0xFFF3);
160         msleep(1);
161 +//FIXME ssb update needed
162 +#if 0
163         if ((sprom->revision != 4) || !(sprom->boardflags_hi & 0x0002)) {
164                 if ((binfo->vendor != PCI_VENDOR_ID_BROADCOM) ||
165                     (binfo->type != 0x46D) ||
166 @@ -143,6 +145,7 @@ static void b43_radio_init2055_post(stru
167                         msleep(1);
168                 }
169         }
170 +#endif
171         b43_radio_maskset(dev, B2055_RRCCAL_NOPTSEL, 0x3F, 0x2C);
172         msleep(1);
173         b43_radio_write16(dev, B2055_CAL_MISC, 0x3C);
174 Index: b43/phy.c
175 ===================================================================
176 --- b43.orig/phy.c      2008-02-06 00:55:14.000000000 +0100
177 +++ b43/phy.c   2008-02-15 22:47:55.000000000 +0100
178 @@ -924,7 +924,7 @@ static void b43_phy_inita(struct b43_wld
179         }
180  
181         if ((phy->type == B43_PHYTYPE_G) &&
182 -           (dev->dev->bus->sprom.boardflags_lo & B43_BFL_PACTRL)) {
183 +           (dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_PACTRL)) {
184                 b43_phy_write(dev, B43_PHY_OFDM(0x6E),
185                                   (b43_phy_read(dev, B43_PHY_OFDM(0x6E))
186                                    & 0xE000) | 0x3CF);
187 @@ -1027,7 +1027,7 @@ static void b43_phy_initb4(struct b43_wl
188         if (phy->radio_ver == 0x2050)
189                 b43_phy_write(dev, 0x002A, 0x88C2);
190         b43_set_txpower_g(dev, &phy->bbatt, &phy->rfatt, phy->tx_control);
191 -       if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_RSSI) {
192 +       if (dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_RSSI) {
193                 b43_calc_nrssi_slope(dev);
194                 b43_calc_nrssi_threshold(dev);
195         }
196 @@ -1174,7 +1174,7 @@ static void b43_phy_initb6(struct b43_wl
197                 b43_radio_write16(dev, 0x5A, 0x88);
198                 b43_radio_write16(dev, 0x5B, 0x6B);
199                 b43_radio_write16(dev, 0x5C, 0x0F);
200 -               if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_ALTIQ) {
201 +               if (dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_ALTIQ) {
202                         b43_radio_write16(dev, 0x5D, 0xFA);
203                         b43_radio_write16(dev, 0x5E, 0xD8);
204                 } else {
205 @@ -1266,7 +1266,7 @@ static void b43_phy_initb6(struct b43_wl
206                 b43_phy_write(dev, 0x0062, 0x0007);
207                 b43_radio_init2050(dev);
208                 b43_lo_g_measure(dev);
209 -               if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_RSSI) {
210 +               if (dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_RSSI) {
211                         b43_calc_nrssi_slope(dev);
212                         b43_calc_nrssi_threshold(dev);
213                 }
214 @@ -1386,7 +1386,7 @@ static void b43_calc_loopback_gain(struc
215         b43_phy_write(dev, B43_PHY_RFOVERVAL,
216                       b43_phy_read(dev, B43_PHY_RFOVERVAL) & 0xCFFF);
217  
218 -       if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_EXTLNA) {
219 +       if (dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_EXTLNA) {
220                 if (phy->rev >= 7) {
221                         b43_phy_write(dev, B43_PHY_RFOVER,
222                                       b43_phy_read(dev, B43_PHY_RFOVER)
223 @@ -1553,7 +1553,7 @@ static void b43_phy_initg(struct b43_wld
224                                        & 0x0FFF) | (phy->lo_control->
225                                                     tx_bias << 12));
226                 }
227 -               if (dev->dev->bus->sprom.boardflags_lo & B43_BFL_PACTRL)
228 +               if (dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_PACTRL)
229                         b43_phy_write(dev, B43_PHY_CCK(0x2E), 0x8075);
230                 else
231                         b43_phy_write(dev, B43_PHY_CCK(0x2E), 0x807F);
232 @@ -1567,7 +1567,7 @@ static void b43_phy_initg(struct b43_wld
233                 b43_phy_write(dev, B43_PHY_LO_MASK, 0x8078);
234         }
235  
236 -       if (!(dev->dev->bus->sprom.boardflags_lo & B43_BFL_RSSI)) {
237 +       if (!(dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_RSSI)) {
238                 /* The specs state to update the NRSSI LT with
239                  * the value 0x7FFFFFFF here. I think that is some weird
240                  * compiler optimization in the original driver.
241 @@ -1776,15 +1776,15 @@ void b43_phy_xmitpower(struct b43_wldev 
242                         estimated_pwr =
243                             b43_phy_estimate_power_out(dev, average);
244  
245 -                       max_pwr = dev->dev->bus->sprom.maxpwr_bg;
246 -                       if ((dev->dev->bus->sprom.boardflags_lo
247 +                       max_pwr = dev->dev->bus->sprom.r1.maxpwr_bg;
248 +                       if ((dev->dev->bus->sprom.r1.boardflags_lo
249                             & B43_BFL_PACTRL) && (phy->type == B43_PHYTYPE_G))
250                                 max_pwr -= 0x3;
251                         if (unlikely(max_pwr <= 0)) {
252                                 b43warn(dev->wl,
253                                         "Invalid max-TX-power value in SPROM.\n");
254                                 max_pwr = 60;   /* fake it */
255 -                               dev->dev->bus->sprom.maxpwr_bg = max_pwr;
256 +                               dev->dev->bus->sprom.r1.maxpwr_bg = max_pwr;
257                         }
258  
259                         /*TODO:
260 @@ -1842,7 +1842,7 @@ void b43_phy_xmitpower(struct b43_wldev 
261                                                     B43_TXCTL_TXMIX;
262                                                 rfatt += 2;
263                                                 bbatt += 2;
264 -                                       } else if (dev->dev->bus->sprom.
265 +                                       } else if (dev->dev->bus->sprom.r1.
266                                                    boardflags_lo &
267                                                    B43_BFL_PACTRL) {
268                                                 bbatt += 4 * (rfatt - 2);
269 @@ -1921,13 +1921,13 @@ int b43_phy_init_tssi2dbm_table(struct b
270         s8 *dyn_tssi2dbm;
271  
272         if (phy->type == B43_PHYTYPE_A) {
273 -               pab0 = (s16) (dev->dev->bus->sprom.pa1b0);
274 -               pab1 = (s16) (dev->dev->bus->sprom.pa1b1);
275 -               pab2 = (s16) (dev->dev->bus->sprom.pa1b2);
276 +               pab0 = (s16) (dev->dev->bus->sprom.r1.pa1b0);
277 +               pab1 = (s16) (dev->dev->bus->sprom.r1.pa1b1);
278 +               pab2 = (s16) (dev->dev->bus->sprom.r1.pa1b2);
279         } else {
280 -               pab0 = (s16) (dev->dev->bus->sprom.pa0b0);
281 -               pab1 = (s16) (dev->dev->bus->sprom.pa0b1);
282 -               pab2 = (s16) (dev->dev->bus->sprom.pa0b2);
283 +               pab0 = (s16) (dev->dev->bus->sprom.r1.pa0b0);
284 +               pab1 = (s16) (dev->dev->bus->sprom.r1.pa0b1);
285 +               pab2 = (s16) (dev->dev->bus->sprom.r1.pa0b2);
286         }
287  
288         if ((dev->dev->bus->chip_id == 0x4301) && (phy->radio_ver != 0x2050)) {
289 @@ -1940,17 +1940,17 @@ int b43_phy_init_tssi2dbm_table(struct b
290             pab0 != -1 && pab1 != -1 && pab2 != -1) {
291                 /* The pabX values are set in SPROM. Use them. */
292                 if (phy->type == B43_PHYTYPE_A) {
293 -                       if ((s8) dev->dev->bus->sprom.itssi_a != 0 &&
294 -                           (s8) dev->dev->bus->sprom.itssi_a != -1)
295 +                       if ((s8) dev->dev->bus->sprom.r1.itssi_a != 0 &&
296 +                           (s8) dev->dev->bus->sprom.r1.itssi_a != -1)
297                                 phy->tgt_idle_tssi =
298 -                                   (s8) (dev->dev->bus->sprom.itssi_a);
299 +                                   (s8) (dev->dev->bus->sprom.r1.itssi_a);
300                         else
301                                 phy->tgt_idle_tssi = 62;
302                 } else {
303 -                       if ((s8) dev->dev->bus->sprom.itssi_bg != 0 &&
304 -                           (s8) dev->dev->bus->sprom.itssi_bg != -1)
305 +                       if ((s8) dev->dev->bus->sprom.r1.itssi_bg != 0 &&
306 +                           (s8) dev->dev->bus->sprom.r1.itssi_bg != -1)
307                                 phy->tgt_idle_tssi =
308 -                                   (s8) (dev->dev->bus->sprom.itssi_bg);
309 +                                   (s8) (dev->dev->bus->sprom.r1.itssi_bg);
310                         else
311                                 phy->tgt_idle_tssi = 62;
312                 }
313 @@ -2894,7 +2894,7 @@ void b43_calc_nrssi_threshold(struct b43
314                         if (phy->radio_ver != 0x2050)
315                                 return;
316                         if (!
317 -                           (dev->dev->bus->sprom.
318 +                           (dev->dev->bus->sprom.r1.
319                              boardflags_lo & B43_BFL_RSSI))
320                                 return;
321  
322 @@ -2925,7 +2925,7 @@ void b43_calc_nrssi_threshold(struct b43
323                 }
324         case B43_PHYTYPE_G:
325                 if (!phy->gmode ||
326 -                   !(dev->dev->bus->sprom.boardflags_lo & B43_BFL_RSSI)) {
327 +                   !(dev->dev->bus->sprom.r1.boardflags_lo & B43_BFL_RSSI)) {
328                         tmp16 = b43_nrssi_hw_read(dev, 0x20);
329                         if (tmp16 >= 0x20)
330                                 tmp16 -= 0x40;
331 @@ -3447,7 +3447,7 @@ static u16 radio2050_rfover_val(struct b
332                 }
333  
334                 if ((phy->rev < 7) ||
335 -                   !(sprom->boardflags_lo & B43_BFL_EXTLNA)) {
336 +                   !(sprom->r1.boardflags_lo & B43_BFL_EXTLNA)) {
337                         if (phy_register == B43_PHY_RFOVER) {
338                                 return 0x1B3;
339                         } else if (phy_register == B43_PHY_RFOVERVAL) {
340 @@ -3487,7 +3487,7 @@ static u16 radio2050_rfover_val(struct b
341                 }
342         } else {
343                 if ((phy->rev < 7) ||
344 -                   !(sprom->boardflags_lo & B43_BFL_EXTLNA)) {
345 +                   !(sprom->r1.boardflags_lo & B43_BFL_EXTLNA)) {
346                         if (phy_register == B43_PHY_RFOVER) {
347                                 return 0x1B3;
348                         } else if (phy_register == B43_PHY_RFOVERVAL) {
349 @@ -3979,7 +3979,7 @@ int b43_radio_selectchannel(struct b43_w
350                 b43_write16(dev, B43_MMIO_CHANNEL, channel2freq_bg(channel));
351  
352                 if (channel == 14) {
353 -                       if (dev->dev->bus->sprom.country_code ==
354 +                       if (dev->dev->bus->sprom.r1.country_code ==
355                             SSB_SPROM1CCODE_JAPAN)
356                                 b43_hf_write(dev,
357                                              b43_hf_read(dev) & ~B43_HF_ACPR);
358 Index: b43/wa.c
359 ===================================================================
360 --- b43.orig/wa.c       2008-02-06 00:55:14.000000000 +0100
361 +++ b43/wa.c    2008-02-15 22:50:54.000000000 +0100
362 @@ -535,7 +535,7 @@ static void b43_wa_boards_g(struct b43_w
363                 } else {
364                         b43_ofdmtab_write16(dev, B43_OFDMTAB_GAINX, 1, 0x0002);
365                         b43_ofdmtab_write16(dev, B43_OFDMTAB_GAINX, 2, 0x0001);
366 -                       if ((bus->sprom.boardflags_lo & B43_BFL_EXTLNA) &&
367 +                       if ((bus->sprom.r1.boardflags_lo & B43_BFL_EXTLNA) &&
368                             (phy->rev >= 7)) {
369                                 b43_phy_write(dev, B43_PHY_EXTG(0x11),
370                                         b43_phy_read(dev, B43_PHY_EXTG(0x11)) & 0xF7FF);
371 @@ -548,7 +548,7 @@ static void b43_wa_boards_g(struct b43_w
372                         }
373                 }
374         }
375 -       if (bus->sprom.boardflags_lo & B43_BFL_FEM) {
376 +       if (bus->sprom.r1.boardflags_lo & B43_BFL_FEM) {
377                 b43_phy_write(dev, B43_PHY_GTABCTL, 0x3120);
378                 b43_phy_write(dev, B43_PHY_GTABDATA, 0xC480);
379         }
380 Index: b43/xmit.c
381 ===================================================================
382 --- b43.orig/xmit.c     2008-02-06 00:55:14.000000000 +0100
383 +++ b43/xmit.c  2008-02-15 22:49:37.000000000 +0100
384 @@ -444,7 +444,7 @@ static s8 b43_rssi_postprocess(struct b4
385                         else
386                                 tmp -= 3;
387                 } else {
388 -                       if (dev->dev->bus->sprom.
389 +                       if (dev->dev->bus->sprom.r1.
390                             boardflags_lo & B43_BFL_RSSI) {
391                                 if (in_rssi > 63)
392                                         in_rssi = 63;