bcm-v4

[Specification

u16 PHY TX Control1 (u32 rspec)

The input rspec has the following layout:

Code:

  1. Intiialize u16 control to 0
  2. If this is an LP PHY or if this is an LCN PHY
    1. Set u16 bw to 2
  3. Otherwise
    1. Set bw to rspec & 0x700 >> 8

  4. If this is an HT PHY
    1. Call HT_spatial_expansion with argument rspec and save result as rslt1

    2. Call HT_get_power_rate with arguments rspec, bw, and rslt1. Save result as rslt2.

    3. Return (rslt1 << 10 | rslt2 << 3 | rslt1)

  5. If bw < 2

    1. A b/w of 10 MHz is indicated, but not supported - set bw to 2
  6. If rspec indicates an MIMO rate (rspec & 0x8000000 is not zero)

    1. Set mcs to rspec & 0x7F

    2. Set control to rspec & 0xFF00 >> 8

    3. OR control with (mcs_table[mcs].phy_ctl3 << 8)

  7. Else if rspec is a CCK rate AND this is not an LP PHY AND not an LCN PHY AND not an SSLPN PHY
    • a, Set control to bw
  8. Otherwise
    1. Set rate to rspec & 0x7F

    2. Set control to bw
    3. Find the entry in wlc_rate_legacy_phyctl that matches the rate
    4. Set phy_config to the control3 entry
    5. OR control with phy_config << 8

    6. OR control with (rspec & 0x3800) >> 8

  9. Return control

Legacy rate PHY control

rate

control3

2

0x00

4

0x08

11

0x10

22

0x18

12

0x00

18

0x02

24

0x08

36

0x0A

48

0x10

72

0x12

96

0x19

108

0x1A

mcs_table

struct mcs_info { u32 phy_rate_20; u32 phy_rate40; u32 phy_rate_20_sgi; u32 phy_rate_40_sgi; u8 phy_ctrl3; u8 legacy_ofdm_rate; }

6500

13500

7223

15000

0x00

12

13000

27000

14445

30000

0x08

24

19500

40500

21667

45000

0x0A

36

26000

54000

28889

60000

0x10

48

39000

81000

43334

90000

0x12

72

52000

108000

57778

120000

0x19

96

58500

121500

64445

135000

0x1A

108

65000

135000

72223

15000

0x1C

108

13000

27000

14445

30000

0x40

12

26000

54000

28889

60000

0x48

24

39000

81000

43334

90000

0x4A

36

52000

108000

57778

120000

0x50

48

78000

162000

86667

180000

0x52

72

104000

216000

115556

240000

0x59

96

117000

243000

130000

270000

0x5A

108

130000

270000

114445

300000

0x5C

108

19500

40500

21667

45000

0x80

12

39000

81000

43334

90000

0x88

24

58500

121500

64445

135000

0x8A

36

78000

162000

86667

120000

0x90

48

117000

243000

130000

270000

0x92

72

156000

324000

173334

360000

0x99

96

175500

364500

195000

405000

0x9A

108

195000

405000

216667

450000

0x9B

108

26000

54000

28889

60000

0xC0

12

52000

108000

57778

120000

0xC8

24

78000

162000

86667

180000

0xCA

36

104000

216000

115556

240000

0xD0

48

156000

324000

173334

360000

0xD2

72

208000

432000

231112

480000

0xD9

96

234000

486000

260000

540000

0xDA

108

260000

540000

288889

600000

0xDB

108

0

6000

0

6667

0x00

12


Exported/Archived from the wiki to HTML on 2016-10-27