Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

b43: use enum for firmware header format

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by

Rafał Miłecki and committed by
John W. Linville
efe0249b 2391b7e8

+55 -26
+8
drivers/net/wireless/b43/b43.h
··· 694 694 enum b43_firmware_file_type type; 695 695 }; 696 696 697 + enum b43_firmware_hdr_format { 698 + B43_FW_HDR_410, 699 + B43_FW_HDR_351, 700 + }; 701 + 697 702 /* Pointers to the firmware data and meta information about it. */ 698 703 struct b43_firmware { 699 704 /* Microcode */ ··· 714 709 u16 rev; 715 710 /* Firmware patchlevel */ 716 711 u16 patch; 712 + 713 + /* Format of header used by firmware */ 714 + enum b43_firmware_hdr_format hdr_format; 717 715 718 716 /* Set to true, if we are using an opensource firmware. 719 717 * Use this to check for proprietary vs opensource. */
+5 -1
drivers/net/wireless/b43/main.c
··· 2514 2514 } 2515 2515 dev->fw.rev = fwrev; 2516 2516 dev->fw.patch = fwpatch; 2517 + if (dev->fw.rev >= 410) 2518 + dev->fw.hdr_format = B43_FW_HDR_410; 2519 + else 2520 + dev->fw.hdr_format = B43_FW_HDR_351; 2517 2521 dev->fw.opensource = (fwdate == 0xFFFF); 2518 2522 2519 2523 /* Default to use-all-queues. */ ··· 2565 2561 dev->fw.rev, dev->fw.patch); 2566 2562 wiphy->hw_version = dev->dev->core_id; 2567 2563 2568 - if (b43_is_old_txhdr_format(dev)) { 2564 + if (dev->fw.hdr_format == B43_FW_HDR_351) { 2569 2565 /* We're over the deadline, but we keep support for old fw 2570 2566 * until it turns out to be in major conflict with something new. */ 2571 2567 b43warn(dev->wl, "You are using an old firmware image. "
+36 -16
drivers/net/wireless/b43/xmit.c
··· 337 337 memcpy(txhdr->iv, ((u8 *) wlhdr) + wlhdr_len, iv_len); 338 338 } 339 339 } 340 - if (b43_is_old_txhdr_format(dev)) { 340 + switch (dev->fw.hdr_format) { 341 + case B43_FW_HDR_351: 341 342 b43_generate_plcp_hdr((struct b43_plcp_hdr4 *)(&txhdr->format_351.plcp), 342 343 plcp_fragment_len, rate); 343 - } else { 344 + break; 345 + case B43_FW_HDR_410: 344 346 b43_generate_plcp_hdr((struct b43_plcp_hdr4 *)(&txhdr->format_410.plcp), 345 347 plcp_fragment_len, rate); 348 + break; 346 349 } 347 350 b43_generate_plcp_hdr((struct b43_plcp_hdr4 *)(&txhdr->plcp_fb), 348 351 plcp_fragment_len, rate_fb); ··· 418 415 if ((rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS) || 419 416 (rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT)) { 420 417 unsigned int len; 421 - struct ieee80211_hdr *hdr; 418 + struct ieee80211_hdr *uninitialized_var(hdr); 422 419 int rts_rate, rts_rate_fb; 423 420 int rts_rate_ofdm, rts_rate_fb_ofdm; 424 - struct b43_plcp_hdr6 *plcp; 421 + struct b43_plcp_hdr6 *uninitialized_var(plcp); 425 422 struct ieee80211_rate *rts_cts_rate; 426 423 427 424 rts_cts_rate = ieee80211_get_rts_cts_rate(dev->wl->hw, info); ··· 432 429 rts_rate_fb_ofdm = b43_is_ofdm_rate(rts_rate_fb); 433 430 434 431 if (rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) { 435 - struct ieee80211_cts *cts; 432 + struct ieee80211_cts *uninitialized_var(cts); 436 433 437 - if (b43_is_old_txhdr_format(dev)) { 434 + switch (dev->fw.hdr_format) { 435 + case B43_FW_HDR_351: 438 436 cts = (struct ieee80211_cts *) 439 437 (txhdr->format_351.rts_frame); 440 - } else { 438 + break; 439 + case B43_FW_HDR_410: 441 440 cts = (struct ieee80211_cts *) 442 441 (txhdr->format_410.rts_frame); 442 + break; 443 443 } 444 444 ieee80211_ctstoself_get(dev->wl->hw, info->control.vif, 445 445 fragment_data, fragment_len, ··· 450 444 mac_ctl |= B43_TXH_MAC_SENDCTS; 451 445 len = sizeof(struct ieee80211_cts); 452 446 } else { 453 - struct ieee80211_rts *rts; 447 + struct ieee80211_rts *uninitialized_var(rts); 454 448 455 - if (b43_is_old_txhdr_format(dev)) { 449 + switch (dev->fw.hdr_format) { 450 + case B43_FW_HDR_351: 456 451 rts = (struct ieee80211_rts *) 457 452 (txhdr->format_351.rts_frame); 458 - } else { 453 + break; 454 + case B43_FW_HDR_410: 459 455 rts = (struct ieee80211_rts *) 460 456 (txhdr->format_410.rts_frame); 457 + break; 461 458 } 462 459 ieee80211_rts_get(dev->wl->hw, info->control.vif, 463 460 fragment_data, fragment_len, ··· 471 462 len += FCS_LEN; 472 463 473 464 /* Generate the PLCP headers for the RTS/CTS frame */ 474 - if (b43_is_old_txhdr_format(dev)) 465 + switch (dev->fw.hdr_format) { 466 + case B43_FW_HDR_351: 475 467 plcp = &txhdr->format_351.rts_plcp; 476 - else 468 + break; 469 + case B43_FW_HDR_410: 477 470 plcp = &txhdr->format_410.rts_plcp; 471 + break; 472 + } 478 473 b43_generate_plcp_hdr((struct b43_plcp_hdr4 *)plcp, 479 474 len, rts_rate); 480 475 plcp = &txhdr->rts_plcp_fb; 481 476 b43_generate_plcp_hdr((struct b43_plcp_hdr4 *)plcp, 482 477 len, rts_rate_fb); 483 478 484 - if (b43_is_old_txhdr_format(dev)) { 479 + switch (dev->fw.hdr_format) { 480 + case B43_FW_HDR_351: 485 481 hdr = (struct ieee80211_hdr *) 486 482 (&txhdr->format_351.rts_frame); 487 - } else { 483 + break; 484 + case B43_FW_HDR_410: 488 485 hdr = (struct ieee80211_hdr *) 489 486 (&txhdr->format_410.rts_frame); 487 + break; 490 488 } 491 489 txhdr->rts_dur_fb = hdr->duration_id; 492 490 ··· 521 505 } 522 506 523 507 /* Magic cookie */ 524 - if (b43_is_old_txhdr_format(dev)) 508 + switch (dev->fw.hdr_format) { 509 + case B43_FW_HDR_351: 525 510 txhdr->format_351.cookie = cpu_to_le16(cookie); 526 - else 511 + break; 512 + case B43_FW_HDR_410: 527 513 txhdr->format_410.cookie = cpu_to_le16(cookie); 514 + break; 515 + } 528 516 529 517 if (phy->type == B43_PHYTYPE_N) { 530 518 txhdr->phy_ctl1 =
+6 -9
drivers/net/wireless/b43/xmit.h
··· 166 166 #define B43_TXH_PHY1_MODUL_QAM256 0x2000 /* QAM256 */ 167 167 168 168 169 - /* r351 firmware compatibility stuff. */ 170 - static inline 171 - bool b43_is_old_txhdr_format(struct b43_wldev *dev) 172 - { 173 - return (dev->fw.rev <= 351); 174 - } 175 - 176 169 static inline 177 170 size_t b43_txhdr_size(struct b43_wldev *dev) 178 171 { 179 - if (b43_is_old_txhdr_format(dev)) 172 + switch (dev->fw.hdr_format) { 173 + case B43_FW_HDR_410: 174 + return 104 + sizeof(struct b43_plcp_hdr6); 175 + case B43_FW_HDR_351: 180 176 return 100 + sizeof(struct b43_plcp_hdr6); 181 - return 104 + sizeof(struct b43_plcp_hdr6); 177 + } 178 + return 0; 182 179 } 183 180 184 181