u16 PHY TX Control1 (u32 rspec)
The input rspec has the following layout:
- Rate 0xF
- Bandwidth 0x700
- Unknown 0x800
- Short GI 0x800000
- Mimo Rate 0x8000000
Code:
- Intiialize u16 control to 0
- If this is an LP PHY or if this is an LCN PHY
- Set u16 bw to 2
- Otherwise
Set bw to rspec & 0x700 >> 8
- If this is an HT PHY
Call HT_spatial_expansion with argument rspec and save result as rslt1
Call HT_get_power_rate with arguments rspec, bw, and rslt1. Save result as rslt2.
Return (rslt1 << 10 | rslt2 << 3 | rslt1)
If bw < 2
- A b/w of 10 MHz is indicated, but not supported - set bw to 2
If rspec indicates an MIMO rate (rspec & 0x8000000 is not zero)
Set mcs to rspec & 0x7F
Set control to rspec & 0xFF00 >> 8
OR control with (mcs_table[mcs].phy_ctl3 << 8)
- 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
- Otherwise
Set rate to rspec & 0x7F
- Set control to bw
- Find the entry in wlc_rate_legacy_phyctl that matches the rate
- Set phy_config to the control3 entry
OR control with phy_config << 8
OR control with (rspec & 0x3800) >> 8
- 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 |