Loading drivers/net/wireless/b43/b43.h +8 −0 Original line number Diff line number Diff line Loading @@ -694,6 +694,11 @@ struct b43_firmware_file { enum b43_firmware_file_type type; }; enum b43_firmware_hdr_format { B43_FW_HDR_410, B43_FW_HDR_351, }; /* Pointers to the firmware data and meta information about it. */ struct b43_firmware { /* Microcode */ Loading @@ -710,6 +715,9 @@ struct b43_firmware { /* Firmware patchlevel */ u16 patch; /* Format of header used by firmware */ enum b43_firmware_hdr_format hdr_format; /* Set to true, if we are using an opensource firmware. * Use this to check for proprietary vs opensource. */ bool opensource; Loading drivers/net/wireless/b43/main.c +5 −1 Original line number Diff line number Diff line Loading @@ -2514,6 +2514,10 @@ static int b43_upload_microcode(struct b43_wldev *dev) } dev->fw.rev = fwrev; dev->fw.patch = fwpatch; if (dev->fw.rev >= 410) dev->fw.hdr_format = B43_FW_HDR_410; else dev->fw.hdr_format = B43_FW_HDR_351; dev->fw.opensource = (fwdate == 0xFFFF); /* Default to use-all-queues. */ Loading Loading @@ -2561,7 +2565,7 @@ static int b43_upload_microcode(struct b43_wldev *dev) dev->fw.rev, dev->fw.patch); wiphy->hw_version = dev->dev->core_id; if (b43_is_old_txhdr_format(dev)) { if (dev->fw.hdr_format == B43_FW_HDR_351) { /* We're over the deadline, but we keep support for old fw * until it turns out to be in major conflict with something new. */ b43warn(dev->wl, "You are using an old firmware image. " Loading drivers/net/wireless/b43/xmit.c +36 −16 Original line number Diff line number Diff line Loading @@ -337,12 +337,15 @@ int b43_generate_txhdr(struct b43_wldev *dev, memcpy(txhdr->iv, ((u8 *) wlhdr) + wlhdr_len, iv_len); } } if (b43_is_old_txhdr_format(dev)) { switch (dev->fw.hdr_format) { case B43_FW_HDR_351: b43_generate_plcp_hdr((struct b43_plcp_hdr4 *)(&txhdr->format_351.plcp), plcp_fragment_len, rate); } else { break; case B43_FW_HDR_410: b43_generate_plcp_hdr((struct b43_plcp_hdr4 *)(&txhdr->format_410.plcp), plcp_fragment_len, rate); break; } b43_generate_plcp_hdr((struct b43_plcp_hdr4 *)(&txhdr->plcp_fb), plcp_fragment_len, rate_fb); Loading Loading @@ -415,10 +418,10 @@ int b43_generate_txhdr(struct b43_wldev *dev, if ((rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS) || (rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT)) { unsigned int len; struct ieee80211_hdr *hdr; struct ieee80211_hdr *uninitialized_var(hdr); int rts_rate, rts_rate_fb; int rts_rate_ofdm, rts_rate_fb_ofdm; struct b43_plcp_hdr6 *plcp; struct b43_plcp_hdr6 *uninitialized_var(plcp); struct ieee80211_rate *rts_cts_rate; rts_cts_rate = ieee80211_get_rts_cts_rate(dev->wl->hw, info); Loading @@ -429,14 +432,17 @@ int b43_generate_txhdr(struct b43_wldev *dev, rts_rate_fb_ofdm = b43_is_ofdm_rate(rts_rate_fb); if (rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) { struct ieee80211_cts *cts; struct ieee80211_cts *uninitialized_var(cts); if (b43_is_old_txhdr_format(dev)) { switch (dev->fw.hdr_format) { case B43_FW_HDR_351: cts = (struct ieee80211_cts *) (txhdr->format_351.rts_frame); } else { break; case B43_FW_HDR_410: cts = (struct ieee80211_cts *) (txhdr->format_410.rts_frame); break; } ieee80211_ctstoself_get(dev->wl->hw, info->control.vif, fragment_data, fragment_len, Loading @@ -444,14 +450,17 @@ int b43_generate_txhdr(struct b43_wldev *dev, mac_ctl |= B43_TXH_MAC_SENDCTS; len = sizeof(struct ieee80211_cts); } else { struct ieee80211_rts *rts; struct ieee80211_rts *uninitialized_var(rts); if (b43_is_old_txhdr_format(dev)) { switch (dev->fw.hdr_format) { case B43_FW_HDR_351: rts = (struct ieee80211_rts *) (txhdr->format_351.rts_frame); } else { break; case B43_FW_HDR_410: rts = (struct ieee80211_rts *) (txhdr->format_410.rts_frame); break; } ieee80211_rts_get(dev->wl->hw, info->control.vif, fragment_data, fragment_len, Loading @@ -462,22 +471,29 @@ int b43_generate_txhdr(struct b43_wldev *dev, len += FCS_LEN; /* Generate the PLCP headers for the RTS/CTS frame */ if (b43_is_old_txhdr_format(dev)) switch (dev->fw.hdr_format) { case B43_FW_HDR_351: plcp = &txhdr->format_351.rts_plcp; else break; case B43_FW_HDR_410: plcp = &txhdr->format_410.rts_plcp; break; } b43_generate_plcp_hdr((struct b43_plcp_hdr4 *)plcp, len, rts_rate); plcp = &txhdr->rts_plcp_fb; b43_generate_plcp_hdr((struct b43_plcp_hdr4 *)plcp, len, rts_rate_fb); if (b43_is_old_txhdr_format(dev)) { switch (dev->fw.hdr_format) { case B43_FW_HDR_351: hdr = (struct ieee80211_hdr *) (&txhdr->format_351.rts_frame); } else { break; case B43_FW_HDR_410: hdr = (struct ieee80211_hdr *) (&txhdr->format_410.rts_frame); break; } txhdr->rts_dur_fb = hdr->duration_id; Loading Loading @@ -505,10 +521,14 @@ int b43_generate_txhdr(struct b43_wldev *dev, } /* Magic cookie */ if (b43_is_old_txhdr_format(dev)) switch (dev->fw.hdr_format) { case B43_FW_HDR_351: txhdr->format_351.cookie = cpu_to_le16(cookie); else break; case B43_FW_HDR_410: txhdr->format_410.cookie = cpu_to_le16(cookie); break; } if (phy->type == B43_PHYTYPE_N) { txhdr->phy_ctl1 = Loading drivers/net/wireless/b43/xmit.h +6 −9 Original line number Diff line number Diff line Loading @@ -166,19 +166,16 @@ struct b43_tx_legacy_rate_phy_ctl_entry { #define B43_TXH_PHY1_MODUL_QAM256 0x2000 /* QAM256 */ /* r351 firmware compatibility stuff. */ static inline bool b43_is_old_txhdr_format(struct b43_wldev *dev) { return (dev->fw.rev <= 351); } static inline size_t b43_txhdr_size(struct b43_wldev *dev) { if (b43_is_old_txhdr_format(dev)) return 100 + sizeof(struct b43_plcp_hdr6); switch (dev->fw.hdr_format) { case B43_FW_HDR_410: return 104 + sizeof(struct b43_plcp_hdr6); case B43_FW_HDR_351: return 100 + sizeof(struct b43_plcp_hdr6); } return 0; } Loading Loading
drivers/net/wireless/b43/b43.h +8 −0 Original line number Diff line number Diff line Loading @@ -694,6 +694,11 @@ struct b43_firmware_file { enum b43_firmware_file_type type; }; enum b43_firmware_hdr_format { B43_FW_HDR_410, B43_FW_HDR_351, }; /* Pointers to the firmware data and meta information about it. */ struct b43_firmware { /* Microcode */ Loading @@ -710,6 +715,9 @@ struct b43_firmware { /* Firmware patchlevel */ u16 patch; /* Format of header used by firmware */ enum b43_firmware_hdr_format hdr_format; /* Set to true, if we are using an opensource firmware. * Use this to check for proprietary vs opensource. */ bool opensource; Loading
drivers/net/wireless/b43/main.c +5 −1 Original line number Diff line number Diff line Loading @@ -2514,6 +2514,10 @@ static int b43_upload_microcode(struct b43_wldev *dev) } dev->fw.rev = fwrev; dev->fw.patch = fwpatch; if (dev->fw.rev >= 410) dev->fw.hdr_format = B43_FW_HDR_410; else dev->fw.hdr_format = B43_FW_HDR_351; dev->fw.opensource = (fwdate == 0xFFFF); /* Default to use-all-queues. */ Loading Loading @@ -2561,7 +2565,7 @@ static int b43_upload_microcode(struct b43_wldev *dev) dev->fw.rev, dev->fw.patch); wiphy->hw_version = dev->dev->core_id; if (b43_is_old_txhdr_format(dev)) { if (dev->fw.hdr_format == B43_FW_HDR_351) { /* We're over the deadline, but we keep support for old fw * until it turns out to be in major conflict with something new. */ b43warn(dev->wl, "You are using an old firmware image. " Loading
drivers/net/wireless/b43/xmit.c +36 −16 Original line number Diff line number Diff line Loading @@ -337,12 +337,15 @@ int b43_generate_txhdr(struct b43_wldev *dev, memcpy(txhdr->iv, ((u8 *) wlhdr) + wlhdr_len, iv_len); } } if (b43_is_old_txhdr_format(dev)) { switch (dev->fw.hdr_format) { case B43_FW_HDR_351: b43_generate_plcp_hdr((struct b43_plcp_hdr4 *)(&txhdr->format_351.plcp), plcp_fragment_len, rate); } else { break; case B43_FW_HDR_410: b43_generate_plcp_hdr((struct b43_plcp_hdr4 *)(&txhdr->format_410.plcp), plcp_fragment_len, rate); break; } b43_generate_plcp_hdr((struct b43_plcp_hdr4 *)(&txhdr->plcp_fb), plcp_fragment_len, rate_fb); Loading Loading @@ -415,10 +418,10 @@ int b43_generate_txhdr(struct b43_wldev *dev, if ((rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS) || (rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT)) { unsigned int len; struct ieee80211_hdr *hdr; struct ieee80211_hdr *uninitialized_var(hdr); int rts_rate, rts_rate_fb; int rts_rate_ofdm, rts_rate_fb_ofdm; struct b43_plcp_hdr6 *plcp; struct b43_plcp_hdr6 *uninitialized_var(plcp); struct ieee80211_rate *rts_cts_rate; rts_cts_rate = ieee80211_get_rts_cts_rate(dev->wl->hw, info); Loading @@ -429,14 +432,17 @@ int b43_generate_txhdr(struct b43_wldev *dev, rts_rate_fb_ofdm = b43_is_ofdm_rate(rts_rate_fb); if (rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) { struct ieee80211_cts *cts; struct ieee80211_cts *uninitialized_var(cts); if (b43_is_old_txhdr_format(dev)) { switch (dev->fw.hdr_format) { case B43_FW_HDR_351: cts = (struct ieee80211_cts *) (txhdr->format_351.rts_frame); } else { break; case B43_FW_HDR_410: cts = (struct ieee80211_cts *) (txhdr->format_410.rts_frame); break; } ieee80211_ctstoself_get(dev->wl->hw, info->control.vif, fragment_data, fragment_len, Loading @@ -444,14 +450,17 @@ int b43_generate_txhdr(struct b43_wldev *dev, mac_ctl |= B43_TXH_MAC_SENDCTS; len = sizeof(struct ieee80211_cts); } else { struct ieee80211_rts *rts; struct ieee80211_rts *uninitialized_var(rts); if (b43_is_old_txhdr_format(dev)) { switch (dev->fw.hdr_format) { case B43_FW_HDR_351: rts = (struct ieee80211_rts *) (txhdr->format_351.rts_frame); } else { break; case B43_FW_HDR_410: rts = (struct ieee80211_rts *) (txhdr->format_410.rts_frame); break; } ieee80211_rts_get(dev->wl->hw, info->control.vif, fragment_data, fragment_len, Loading @@ -462,22 +471,29 @@ int b43_generate_txhdr(struct b43_wldev *dev, len += FCS_LEN; /* Generate the PLCP headers for the RTS/CTS frame */ if (b43_is_old_txhdr_format(dev)) switch (dev->fw.hdr_format) { case B43_FW_HDR_351: plcp = &txhdr->format_351.rts_plcp; else break; case B43_FW_HDR_410: plcp = &txhdr->format_410.rts_plcp; break; } b43_generate_plcp_hdr((struct b43_plcp_hdr4 *)plcp, len, rts_rate); plcp = &txhdr->rts_plcp_fb; b43_generate_plcp_hdr((struct b43_plcp_hdr4 *)plcp, len, rts_rate_fb); if (b43_is_old_txhdr_format(dev)) { switch (dev->fw.hdr_format) { case B43_FW_HDR_351: hdr = (struct ieee80211_hdr *) (&txhdr->format_351.rts_frame); } else { break; case B43_FW_HDR_410: hdr = (struct ieee80211_hdr *) (&txhdr->format_410.rts_frame); break; } txhdr->rts_dur_fb = hdr->duration_id; Loading Loading @@ -505,10 +521,14 @@ int b43_generate_txhdr(struct b43_wldev *dev, } /* Magic cookie */ if (b43_is_old_txhdr_format(dev)) switch (dev->fw.hdr_format) { case B43_FW_HDR_351: txhdr->format_351.cookie = cpu_to_le16(cookie); else break; case B43_FW_HDR_410: txhdr->format_410.cookie = cpu_to_le16(cookie); break; } if (phy->type == B43_PHYTYPE_N) { txhdr->phy_ctl1 = Loading
drivers/net/wireless/b43/xmit.h +6 −9 Original line number Diff line number Diff line Loading @@ -166,19 +166,16 @@ struct b43_tx_legacy_rate_phy_ctl_entry { #define B43_TXH_PHY1_MODUL_QAM256 0x2000 /* QAM256 */ /* r351 firmware compatibility stuff. */ static inline bool b43_is_old_txhdr_format(struct b43_wldev *dev) { return (dev->fw.rev <= 351); } static inline size_t b43_txhdr_size(struct b43_wldev *dev) { if (b43_is_old_txhdr_format(dev)) return 100 + sizeof(struct b43_plcp_hdr6); switch (dev->fw.hdr_format) { case B43_FW_HDR_410: return 104 + sizeof(struct b43_plcp_hdr6); case B43_FW_HDR_351: return 100 + sizeof(struct b43_plcp_hdr6); } return 0; } Loading