2 * Copyright (c) 2010 Broadcom Corporation
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
11 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
13 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 #include <linux/kernel.h>
21 #include <wlc_phy_int.h>
22 #include <wlc_phytbl_n.h>
24 const u32 frame_struct_rev0[] = {
859 const u8 frame_lut_rev0[] = {
894 const u32 tmap_tbl_rev0[] = {
1345 const u32 tdtrn_tbl_rev0[] = {
2052 const u32 intlv_tbl_rev0[] = {
2062 const u16 pilot_tbl_rev0[] = {
2153 const u32 pltlut_tbl_rev0[] = {
2162 const u32 tdi_tbl20_ant0_rev0[] = {
2220 const u32 tdi_tbl20_ant1_rev0[] = {
2278 const u32 tdi_tbl40_ant0_rev0[] = {
2391 const u32 tdi_tbl40_ant1_rev0[] = {
2504 const u16 bdi_tbl_rev0[] = {
2513 const u32 chanest_tbl_rev0[] = {
2612 const u8 mcs_tbl_rev0[] = {
2743 const u32 noise_var_tbl0_rev0[] = {
3002 const u32 noise_var_tbl1_rev0[] = {
3261 const u8 est_pwr_lut_core0_rev0[] = {
3328 const u8 est_pwr_lut_core1_rev0[] = {
3395 const u8 adj_pwr_lut_core0_rev0[] = {
3526 const u8 adj_pwr_lut_core1_rev0[] = {
3657 const u32 gainctrl_lut_core0_rev0[] = {
3788 const u32 gainctrl_lut_core1_rev0[] = {
3919 const u32 iq_lut_core0_rev0[] = {
4050 const u32 iq_lut_core1_rev0[] = {
4181 const u16 loft_lut_core0_rev0[] = {
4312 const u16 loft_lut_core1_rev0[] = {
4443 const mimophytbl_info_t mimophytbl_info_rev0_volatile[] = {
4444 {&bdi_tbl_rev0, sizeof(bdi_tbl_rev0) / sizeof(bdi_tbl_rev0[0]), 21, 0,
4447 {&pltlut_tbl_rev0, sizeof(pltlut_tbl_rev0) / sizeof(pltlut_tbl_rev0[0]),
4450 {&gainctrl_lut_core0_rev0,
4451 sizeof(gainctrl_lut_core0_rev0) / sizeof(gainctrl_lut_core0_rev0[0]),
4454 {&gainctrl_lut_core1_rev0,
4455 sizeof(gainctrl_lut_core1_rev0) / sizeof(gainctrl_lut_core1_rev0[0]),
4459 {&est_pwr_lut_core0_rev0,
4460 sizeof(est_pwr_lut_core0_rev0) / sizeof(est_pwr_lut_core0_rev0[0]), 26,
4463 {&est_pwr_lut_core1_rev0,
4464 sizeof(est_pwr_lut_core1_rev0) / sizeof(est_pwr_lut_core1_rev0[0]), 27,
4467 {&adj_pwr_lut_core0_rev0,
4468 sizeof(adj_pwr_lut_core0_rev0) / sizeof(adj_pwr_lut_core0_rev0[0]), 26,
4471 {&adj_pwr_lut_core1_rev0,
4472 sizeof(adj_pwr_lut_core1_rev0) / sizeof(adj_pwr_lut_core1_rev0[0]), 27,
4475 {&iq_lut_core0_rev0,
4476 sizeof(iq_lut_core0_rev0) / sizeof(iq_lut_core0_rev0[0]), 26, 320, 32}
4478 {&iq_lut_core1_rev0,
4479 sizeof(iq_lut_core1_rev0) / sizeof(iq_lut_core1_rev0[0]), 27, 320, 32}
4481 {&loft_lut_core0_rev0,
4482 sizeof(loft_lut_core0_rev0) / sizeof(loft_lut_core0_rev0[0]), 26, 448,
4485 {&loft_lut_core1_rev0,
4486 sizeof(loft_lut_core1_rev0) / sizeof(loft_lut_core1_rev0[0]), 27, 448,
4491 const mimophytbl_info_t mimophytbl_info_rev0[] = {
4492 {&frame_struct_rev0,
4493 sizeof(frame_struct_rev0) / sizeof(frame_struct_rev0[0]), 10, 0, 32}
4495 {&frame_lut_rev0, sizeof(frame_lut_rev0) / sizeof(frame_lut_rev0[0]),
4498 {&tmap_tbl_rev0, sizeof(tmap_tbl_rev0) / sizeof(tmap_tbl_rev0[0]), 12,
4501 {&tdtrn_tbl_rev0, sizeof(tdtrn_tbl_rev0) / sizeof(tdtrn_tbl_rev0[0]),
4504 {&intlv_tbl_rev0, sizeof(intlv_tbl_rev0) / sizeof(intlv_tbl_rev0[0]),
4507 {&pilot_tbl_rev0, sizeof(pilot_tbl_rev0) / sizeof(pilot_tbl_rev0[0]),
4510 {&tdi_tbl20_ant0_rev0,
4511 sizeof(tdi_tbl20_ant0_rev0) / sizeof(tdi_tbl20_ant0_rev0[0]), 19, 128,
4514 {&tdi_tbl20_ant1_rev0,
4515 sizeof(tdi_tbl20_ant1_rev0) / sizeof(tdi_tbl20_ant1_rev0[0]), 19, 256,
4518 {&tdi_tbl40_ant0_rev0,
4519 sizeof(tdi_tbl40_ant0_rev0) / sizeof(tdi_tbl40_ant0_rev0[0]), 19, 640,
4522 {&tdi_tbl40_ant1_rev0,
4523 sizeof(tdi_tbl40_ant1_rev0) / sizeof(tdi_tbl40_ant1_rev0[0]), 19, 768,
4527 sizeof(chanest_tbl_rev0) / sizeof(chanest_tbl_rev0[0]), 22, 0, 32}
4529 {&mcs_tbl_rev0, sizeof(mcs_tbl_rev0) / sizeof(mcs_tbl_rev0[0]), 18, 0, 8}
4531 {&noise_var_tbl0_rev0,
4532 sizeof(noise_var_tbl0_rev0) / sizeof(noise_var_tbl0_rev0[0]), 16, 0,
4535 {&noise_var_tbl1_rev0,
4536 sizeof(noise_var_tbl1_rev0) / sizeof(noise_var_tbl1_rev0[0]), 16, 128,
4541 const u32 mimophytbl_info_sz_rev0 =
4542 sizeof(mimophytbl_info_rev0) / sizeof(mimophytbl_info_rev0[0]);
4543 const u32 mimophytbl_info_sz_rev0_volatile =
4544 sizeof(mimophytbl_info_rev0_volatile) /
4545 sizeof(mimophytbl_info_rev0_volatile[0]);
4547 const u16 ant_swctrl_tbl_rev3[] = {
4582 const u16 ant_swctrl_tbl_rev3_1[] = {
4617 const u16 ant_swctrl_tbl_rev3_2[] = {
4652 const u16 ant_swctrl_tbl_rev3_3[] = {
4687 const u32 frame_struct_rev3[] = {
5522 const u16 pilot_tbl_rev3[] = {
5613 const u32 tmap_tbl_rev3[] = {
6064 const u32 intlv_tbl_rev3[] = {
6074 const u32 tdtrn_tbl_rev3[] = {
6781 const u32 noise_var_tbl_rev3[] = {
7040 const u16 mcs_tbl_rev3[] = {
7171 const u32 tdi_tbl20_ant0_rev3[] = {
7229 const u32 tdi_tbl20_ant1_rev3[] = {
7287 const u32 tdi_tbl40_ant0_rev3[] = {
7400 const u32 tdi_tbl40_ant1_rev3[] = {
7513 const u32 pltlut_tbl_rev3[] = {
7522 const u32 chanest_tbl_rev3[] = {
7621 const u8 frame_lut_rev3[] = {
7656 const u8 est_pwr_lut_core0_rev3[] = {
7723 const u8 est_pwr_lut_core1_rev3[] = {
7790 const u8 adj_pwr_lut_core0_rev3[] = {
7921 const u8 adj_pwr_lut_core1_rev3[] = {
8052 const u32 gainctrl_lut_core0_rev3[] = {
8183 const u32 gainctrl_lut_core1_rev3[] = {
8314 const u32 iq_lut_core0_rev3[] = {
8445 const u32 iq_lut_core1_rev3[] = {
8576 const u16 loft_lut_core0_rev3[] = {
8707 const u16 loft_lut_core1_rev3[] = {
8838 const u16 papd_comp_rfpwr_tbl_core0_rev3[] = {
8969 const u16 papd_comp_rfpwr_tbl_core1_rev3[] = {
9100 const u32 papd_comp_epsilon_tbl_core0_rev3[] = {
9167 const u32 papd_cal_scalars_tbl_core0_rev3[] = {
9234 const u32 papd_comp_epsilon_tbl_core1_rev3[] = {
9301 const u32 papd_cal_scalars_tbl_core1_rev3[] = {
9368 const mimophytbl_info_t mimophytbl_info_rev3_volatile[] = {
9369 {&ant_swctrl_tbl_rev3,
9370 sizeof(ant_swctrl_tbl_rev3) / sizeof(ant_swctrl_tbl_rev3[0]), 9, 0, 16}
9374 const mimophytbl_info_t mimophytbl_info_rev3_volatile1[] = {
9375 {&ant_swctrl_tbl_rev3_1,
9376 sizeof(ant_swctrl_tbl_rev3_1) / sizeof(ant_swctrl_tbl_rev3_1[0]), 9, 0,
9381 const mimophytbl_info_t mimophytbl_info_rev3_volatile2[] = {
9382 {&ant_swctrl_tbl_rev3_2,
9383 sizeof(ant_swctrl_tbl_rev3_2) / sizeof(ant_swctrl_tbl_rev3_2[0]), 9, 0,
9388 const mimophytbl_info_t mimophytbl_info_rev3_volatile3[] = {
9389 {&ant_swctrl_tbl_rev3_3,
9390 sizeof(ant_swctrl_tbl_rev3_3) / sizeof(ant_swctrl_tbl_rev3_3[0]), 9, 0,
9395 const mimophytbl_info_t mimophytbl_info_rev3[] = {
9396 {&frame_struct_rev3,
9397 sizeof(frame_struct_rev3) / sizeof(frame_struct_rev3[0]), 10, 0, 32}
9399 {&pilot_tbl_rev3, sizeof(pilot_tbl_rev3) / sizeof(pilot_tbl_rev3[0]),
9402 {&tmap_tbl_rev3, sizeof(tmap_tbl_rev3) / sizeof(tmap_tbl_rev3[0]), 12,
9405 {&intlv_tbl_rev3, sizeof(intlv_tbl_rev3) / sizeof(intlv_tbl_rev3[0]),
9408 {&tdtrn_tbl_rev3, sizeof(tdtrn_tbl_rev3) / sizeof(tdtrn_tbl_rev3[0]),
9411 {&noise_var_tbl_rev3,
9412 sizeof(noise_var_tbl_rev3) / sizeof(noise_var_tbl_rev3[0]), 16, 0, 32}
9414 {&mcs_tbl_rev3, sizeof(mcs_tbl_rev3) / sizeof(mcs_tbl_rev3[0]), 18, 0,
9417 {&tdi_tbl20_ant0_rev3,
9418 sizeof(tdi_tbl20_ant0_rev3) / sizeof(tdi_tbl20_ant0_rev3[0]), 19, 128,
9421 {&tdi_tbl20_ant1_rev3,
9422 sizeof(tdi_tbl20_ant1_rev3) / sizeof(tdi_tbl20_ant1_rev3[0]), 19, 256,
9425 {&tdi_tbl40_ant0_rev3,
9426 sizeof(tdi_tbl40_ant0_rev3) / sizeof(tdi_tbl40_ant0_rev3[0]), 19, 640,
9429 {&tdi_tbl40_ant1_rev3,
9430 sizeof(tdi_tbl40_ant1_rev3) / sizeof(tdi_tbl40_ant1_rev3[0]), 19, 768,
9433 {&pltlut_tbl_rev3, sizeof(pltlut_tbl_rev3) / sizeof(pltlut_tbl_rev3[0]),
9437 sizeof(chanest_tbl_rev3) / sizeof(chanest_tbl_rev3[0]), 22, 0, 32}
9439 {&frame_lut_rev3, sizeof(frame_lut_rev3) / sizeof(frame_lut_rev3[0]),
9442 {&est_pwr_lut_core0_rev3,
9443 sizeof(est_pwr_lut_core0_rev3) / sizeof(est_pwr_lut_core0_rev3[0]), 26,
9446 {&est_pwr_lut_core1_rev3,
9447 sizeof(est_pwr_lut_core1_rev3) / sizeof(est_pwr_lut_core1_rev3[0]), 27,
9450 {&adj_pwr_lut_core0_rev3,
9451 sizeof(adj_pwr_lut_core0_rev3) / sizeof(adj_pwr_lut_core0_rev3[0]), 26,
9454 {&adj_pwr_lut_core1_rev3,
9455 sizeof(adj_pwr_lut_core1_rev3) / sizeof(adj_pwr_lut_core1_rev3[0]), 27,
9458 {&gainctrl_lut_core0_rev3,
9459 sizeof(gainctrl_lut_core0_rev3) / sizeof(gainctrl_lut_core0_rev3[0]),
9462 {&gainctrl_lut_core1_rev3,
9463 sizeof(gainctrl_lut_core1_rev3) / sizeof(gainctrl_lut_core1_rev3[0]),
9466 {&iq_lut_core0_rev3,
9467 sizeof(iq_lut_core0_rev3) / sizeof(iq_lut_core0_rev3[0]), 26, 320, 32}
9469 {&iq_lut_core1_rev3,
9470 sizeof(iq_lut_core1_rev3) / sizeof(iq_lut_core1_rev3[0]), 27, 320, 32}
9472 {&loft_lut_core0_rev3,
9473 sizeof(loft_lut_core0_rev3) / sizeof(loft_lut_core0_rev3[0]), 26, 448,
9476 {&loft_lut_core1_rev3,
9477 sizeof(loft_lut_core1_rev3) / sizeof(loft_lut_core1_rev3[0]), 27, 448,
9481 const u32 mimophytbl_info_sz_rev3 =
9482 sizeof(mimophytbl_info_rev3) / sizeof(mimophytbl_info_rev3[0]);
9483 const u32 mimophytbl_info_sz_rev3_volatile =
9484 sizeof(mimophytbl_info_rev3_volatile) /
9485 sizeof(mimophytbl_info_rev3_volatile[0]);
9486 const u32 mimophytbl_info_sz_rev3_volatile1 =
9487 sizeof(mimophytbl_info_rev3_volatile1) /
9488 sizeof(mimophytbl_info_rev3_volatile1[0]);
9489 const u32 mimophytbl_info_sz_rev3_volatile2 =
9490 sizeof(mimophytbl_info_rev3_volatile2) /
9491 sizeof(mimophytbl_info_rev3_volatile2[0]);
9492 const u32 mimophytbl_info_sz_rev3_volatile3 =
9493 sizeof(mimophytbl_info_rev3_volatile3) /
9494 sizeof(mimophytbl_info_rev3_volatile3[0]);
9496 const u32 tmap_tbl_rev7[] = {
9947 const u32 noise_var_tbl_rev7[] = {
10206 const u32 papd_comp_epsilon_tbl_core0_rev7[] = {
10273 const u32 papd_cal_scalars_tbl_core0_rev7[] = {
10340 const u32 papd_comp_epsilon_tbl_core1_rev7[] = {
10407 const u32 papd_cal_scalars_tbl_core1_rev7[] = {
10474 const mimophytbl_info_t mimophytbl_info_rev7[] = {
10475 {&frame_struct_rev3,
10476 sizeof(frame_struct_rev3) / sizeof(frame_struct_rev3[0]), 10, 0, 32}
10478 {&pilot_tbl_rev3, sizeof(pilot_tbl_rev3) / sizeof(pilot_tbl_rev3[0]),
10481 {&tmap_tbl_rev7, sizeof(tmap_tbl_rev7) / sizeof(tmap_tbl_rev7[0]), 12,
10484 {&intlv_tbl_rev3, sizeof(intlv_tbl_rev3) / sizeof(intlv_tbl_rev3[0]),
10487 {&tdtrn_tbl_rev3, sizeof(tdtrn_tbl_rev3) / sizeof(tdtrn_tbl_rev3[0]),
10490 {&noise_var_tbl_rev7,
10491 sizeof(noise_var_tbl_rev7) / sizeof(noise_var_tbl_rev7[0]), 16, 0, 32}
10493 {&mcs_tbl_rev3, sizeof(mcs_tbl_rev3) / sizeof(mcs_tbl_rev3[0]), 18, 0,
10496 {&tdi_tbl20_ant0_rev3,
10497 sizeof(tdi_tbl20_ant0_rev3) / sizeof(tdi_tbl20_ant0_rev3[0]), 19, 128,
10500 {&tdi_tbl20_ant1_rev3,
10501 sizeof(tdi_tbl20_ant1_rev3) / sizeof(tdi_tbl20_ant1_rev3[0]), 19, 256,
10504 {&tdi_tbl40_ant0_rev3,
10505 sizeof(tdi_tbl40_ant0_rev3) / sizeof(tdi_tbl40_ant0_rev3[0]), 19, 640,
10508 {&tdi_tbl40_ant1_rev3,
10509 sizeof(tdi_tbl40_ant1_rev3) / sizeof(tdi_tbl40_ant1_rev3[0]), 19, 768,
10512 {&pltlut_tbl_rev3, sizeof(pltlut_tbl_rev3) / sizeof(pltlut_tbl_rev3[0]),
10515 {&chanest_tbl_rev3,
10516 sizeof(chanest_tbl_rev3) / sizeof(chanest_tbl_rev3[0]), 22, 0, 32}
10518 {&frame_lut_rev3, sizeof(frame_lut_rev3) / sizeof(frame_lut_rev3[0]),
10521 {&est_pwr_lut_core0_rev3,
10522 sizeof(est_pwr_lut_core0_rev3) / sizeof(est_pwr_lut_core0_rev3[0]), 26,
10525 {&est_pwr_lut_core1_rev3,
10526 sizeof(est_pwr_lut_core1_rev3) / sizeof(est_pwr_lut_core1_rev3[0]), 27,
10529 {&adj_pwr_lut_core0_rev3,
10530 sizeof(adj_pwr_lut_core0_rev3) / sizeof(adj_pwr_lut_core0_rev3[0]), 26,
10533 {&adj_pwr_lut_core1_rev3,
10534 sizeof(adj_pwr_lut_core1_rev3) / sizeof(adj_pwr_lut_core1_rev3[0]), 27,
10537 {&gainctrl_lut_core0_rev3,
10538 sizeof(gainctrl_lut_core0_rev3) / sizeof(gainctrl_lut_core0_rev3[0]),
10541 {&gainctrl_lut_core1_rev3,
10542 sizeof(gainctrl_lut_core1_rev3) / sizeof(gainctrl_lut_core1_rev3[0]),
10545 {&iq_lut_core0_rev3,
10546 sizeof(iq_lut_core0_rev3) / sizeof(iq_lut_core0_rev3[0]), 26, 320, 32}
10548 {&iq_lut_core1_rev3,
10549 sizeof(iq_lut_core1_rev3) / sizeof(iq_lut_core1_rev3[0]), 27, 320, 32}
10551 {&loft_lut_core0_rev3,
10552 sizeof(loft_lut_core0_rev3) / sizeof(loft_lut_core0_rev3[0]), 26, 448,
10555 {&loft_lut_core1_rev3,
10556 sizeof(loft_lut_core1_rev3) / sizeof(loft_lut_core1_rev3[0]), 27, 448,
10559 {&papd_comp_rfpwr_tbl_core0_rev3,
10560 sizeof(papd_comp_rfpwr_tbl_core0_rev3) /
10561 sizeof(papd_comp_rfpwr_tbl_core0_rev3[0]), 26, 576, 16}
10563 {&papd_comp_rfpwr_tbl_core1_rev3,
10564 sizeof(papd_comp_rfpwr_tbl_core1_rev3) /
10565 sizeof(papd_comp_rfpwr_tbl_core1_rev3[0]), 27, 576, 16}
10567 {&papd_comp_epsilon_tbl_core0_rev7,
10568 sizeof(papd_comp_epsilon_tbl_core0_rev7) /
10569 sizeof(papd_comp_epsilon_tbl_core0_rev7[0]), 31, 0, 32}
10571 {&papd_cal_scalars_tbl_core0_rev7,
10572 sizeof(papd_cal_scalars_tbl_core0_rev7) /
10573 sizeof(papd_cal_scalars_tbl_core0_rev7[0]), 32, 0, 32}
10575 {&papd_comp_epsilon_tbl_core1_rev7,
10576 sizeof(papd_comp_epsilon_tbl_core1_rev7) /
10577 sizeof(papd_comp_epsilon_tbl_core1_rev7[0]), 33, 0, 32}
10579 {&papd_cal_scalars_tbl_core1_rev7,
10580 sizeof(papd_cal_scalars_tbl_core1_rev7) /
10581 sizeof(papd_cal_scalars_tbl_core1_rev7[0]), 34, 0, 32}
10585 const u32 mimophytbl_info_sz_rev7 =
10586 sizeof(mimophytbl_info_rev7) / sizeof(mimophytbl_info_rev7[0]);
10588 const mimophytbl_info_t mimophytbl_info_rev16[] = {
10589 {&noise_var_tbl_rev7,
10590 sizeof(noise_var_tbl_rev7) / sizeof(noise_var_tbl_rev7[0]), 16, 0, 32}
10592 {&est_pwr_lut_core0_rev3,
10593 sizeof(est_pwr_lut_core0_rev3) / sizeof(est_pwr_lut_core0_rev3[0]), 26,
10596 {&est_pwr_lut_core1_rev3,
10597 sizeof(est_pwr_lut_core1_rev3) / sizeof(est_pwr_lut_core1_rev3[0]), 27,
10600 {&adj_pwr_lut_core0_rev3,
10601 sizeof(adj_pwr_lut_core0_rev3) / sizeof(adj_pwr_lut_core0_rev3[0]), 26,
10604 {&adj_pwr_lut_core1_rev3,
10605 sizeof(adj_pwr_lut_core1_rev3) / sizeof(adj_pwr_lut_core1_rev3[0]), 27,
10608 {&gainctrl_lut_core0_rev3,
10609 sizeof(gainctrl_lut_core0_rev3) / sizeof(gainctrl_lut_core0_rev3[0]),
10612 {&gainctrl_lut_core1_rev3,
10613 sizeof(gainctrl_lut_core1_rev3) / sizeof(gainctrl_lut_core1_rev3[0]),
10616 {&iq_lut_core0_rev3,
10617 sizeof(iq_lut_core0_rev3) / sizeof(iq_lut_core0_rev3[0]), 26, 320, 32}
10619 {&iq_lut_core1_rev3,
10620 sizeof(iq_lut_core1_rev3) / sizeof(iq_lut_core1_rev3[0]), 27, 320, 32}
10622 {&loft_lut_core0_rev3,
10623 sizeof(loft_lut_core0_rev3) / sizeof(loft_lut_core0_rev3[0]), 26, 448,
10626 {&loft_lut_core1_rev3,
10627 sizeof(loft_lut_core1_rev3) / sizeof(loft_lut_core1_rev3[0]), 27, 448,
10632 const u32 mimophytbl_info_sz_rev16 =
10633 sizeof(mimophytbl_info_rev16) / sizeof(mimophytbl_info_rev16[0]);