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>
19 #include <wlc_phy_int.h>
20 #include <wlc_phytbl_n.h>
22 const u32 frame_struct_rev0[] = {
857 const u8 frame_lut_rev0[] = {
892 const u32 tmap_tbl_rev0[] = {
1343 const u32 tdtrn_tbl_rev0[] = {
2050 const u32 intlv_tbl_rev0[] = {
2060 const u16 pilot_tbl_rev0[] = {
2151 const u32 pltlut_tbl_rev0[] = {
2160 const u32 tdi_tbl20_ant0_rev0[] = {
2218 const u32 tdi_tbl20_ant1_rev0[] = {
2276 const u32 tdi_tbl40_ant0_rev0[] = {
2389 const u32 tdi_tbl40_ant1_rev0[] = {
2502 const u16 bdi_tbl_rev0[] = {
2511 const u32 chanest_tbl_rev0[] = {
2610 const u8 mcs_tbl_rev0[] = {
2741 const u32 noise_var_tbl0_rev0[] = {
3000 const u32 noise_var_tbl1_rev0[] = {
3259 const u8 est_pwr_lut_core0_rev0[] = {
3326 const u8 est_pwr_lut_core1_rev0[] = {
3393 const u8 adj_pwr_lut_core0_rev0[] = {
3524 const u8 adj_pwr_lut_core1_rev0[] = {
3655 const u32 gainctrl_lut_core0_rev0[] = {
3786 const u32 gainctrl_lut_core1_rev0[] = {
3917 const u32 iq_lut_core0_rev0[] = {
4048 const u32 iq_lut_core1_rev0[] = {
4179 const u16 loft_lut_core0_rev0[] = {
4310 const u16 loft_lut_core1_rev0[] = {
4441 const mimophytbl_info_t mimophytbl_info_rev0_volatile[] = {
4442 {&bdi_tbl_rev0, sizeof(bdi_tbl_rev0) / sizeof(bdi_tbl_rev0[0]), 21, 0,
4445 {&pltlut_tbl_rev0, sizeof(pltlut_tbl_rev0) / sizeof(pltlut_tbl_rev0[0]),
4448 {&gainctrl_lut_core0_rev0,
4449 sizeof(gainctrl_lut_core0_rev0) / sizeof(gainctrl_lut_core0_rev0[0]),
4452 {&gainctrl_lut_core1_rev0,
4453 sizeof(gainctrl_lut_core1_rev0) / sizeof(gainctrl_lut_core1_rev0[0]),
4457 {&est_pwr_lut_core0_rev0,
4458 sizeof(est_pwr_lut_core0_rev0) / sizeof(est_pwr_lut_core0_rev0[0]), 26,
4461 {&est_pwr_lut_core1_rev0,
4462 sizeof(est_pwr_lut_core1_rev0) / sizeof(est_pwr_lut_core1_rev0[0]), 27,
4465 {&adj_pwr_lut_core0_rev0,
4466 sizeof(adj_pwr_lut_core0_rev0) / sizeof(adj_pwr_lut_core0_rev0[0]), 26,
4469 {&adj_pwr_lut_core1_rev0,
4470 sizeof(adj_pwr_lut_core1_rev0) / sizeof(adj_pwr_lut_core1_rev0[0]), 27,
4473 {&iq_lut_core0_rev0,
4474 sizeof(iq_lut_core0_rev0) / sizeof(iq_lut_core0_rev0[0]), 26, 320, 32}
4476 {&iq_lut_core1_rev0,
4477 sizeof(iq_lut_core1_rev0) / sizeof(iq_lut_core1_rev0[0]), 27, 320, 32}
4479 {&loft_lut_core0_rev0,
4480 sizeof(loft_lut_core0_rev0) / sizeof(loft_lut_core0_rev0[0]), 26, 448,
4483 {&loft_lut_core1_rev0,
4484 sizeof(loft_lut_core1_rev0) / sizeof(loft_lut_core1_rev0[0]), 27, 448,
4489 const mimophytbl_info_t mimophytbl_info_rev0[] = {
4490 {&frame_struct_rev0,
4491 sizeof(frame_struct_rev0) / sizeof(frame_struct_rev0[0]), 10, 0, 32}
4493 {&frame_lut_rev0, sizeof(frame_lut_rev0) / sizeof(frame_lut_rev0[0]),
4496 {&tmap_tbl_rev0, sizeof(tmap_tbl_rev0) / sizeof(tmap_tbl_rev0[0]), 12,
4499 {&tdtrn_tbl_rev0, sizeof(tdtrn_tbl_rev0) / sizeof(tdtrn_tbl_rev0[0]),
4502 {&intlv_tbl_rev0, sizeof(intlv_tbl_rev0) / sizeof(intlv_tbl_rev0[0]),
4505 {&pilot_tbl_rev0, sizeof(pilot_tbl_rev0) / sizeof(pilot_tbl_rev0[0]),
4508 {&tdi_tbl20_ant0_rev0,
4509 sizeof(tdi_tbl20_ant0_rev0) / sizeof(tdi_tbl20_ant0_rev0[0]), 19, 128,
4512 {&tdi_tbl20_ant1_rev0,
4513 sizeof(tdi_tbl20_ant1_rev0) / sizeof(tdi_tbl20_ant1_rev0[0]), 19, 256,
4516 {&tdi_tbl40_ant0_rev0,
4517 sizeof(tdi_tbl40_ant0_rev0) / sizeof(tdi_tbl40_ant0_rev0[0]), 19, 640,
4520 {&tdi_tbl40_ant1_rev0,
4521 sizeof(tdi_tbl40_ant1_rev0) / sizeof(tdi_tbl40_ant1_rev0[0]), 19, 768,
4525 sizeof(chanest_tbl_rev0) / sizeof(chanest_tbl_rev0[0]), 22, 0, 32}
4527 {&mcs_tbl_rev0, sizeof(mcs_tbl_rev0) / sizeof(mcs_tbl_rev0[0]), 18, 0, 8}
4529 {&noise_var_tbl0_rev0,
4530 sizeof(noise_var_tbl0_rev0) / sizeof(noise_var_tbl0_rev0[0]), 16, 0,
4533 {&noise_var_tbl1_rev0,
4534 sizeof(noise_var_tbl1_rev0) / sizeof(noise_var_tbl1_rev0[0]), 16, 128,
4539 const u32 mimophytbl_info_sz_rev0 =
4540 sizeof(mimophytbl_info_rev0) / sizeof(mimophytbl_info_rev0[0]);
4541 const u32 mimophytbl_info_sz_rev0_volatile =
4542 sizeof(mimophytbl_info_rev0_volatile) /
4543 sizeof(mimophytbl_info_rev0_volatile[0]);
4545 const u16 ant_swctrl_tbl_rev3[] = {
4580 const u16 ant_swctrl_tbl_rev3_1[] = {
4615 const u16 ant_swctrl_tbl_rev3_2[] = {
4650 const u16 ant_swctrl_tbl_rev3_3[] = {
4685 const u32 frame_struct_rev3[] = {
5520 const u16 pilot_tbl_rev3[] = {
5611 const u32 tmap_tbl_rev3[] = {
6062 const u32 intlv_tbl_rev3[] = {
6072 const u32 tdtrn_tbl_rev3[] = {
6779 const u32 noise_var_tbl_rev3[] = {
7038 const u16 mcs_tbl_rev3[] = {
7169 const u32 tdi_tbl20_ant0_rev3[] = {
7227 const u32 tdi_tbl20_ant1_rev3[] = {
7285 const u32 tdi_tbl40_ant0_rev3[] = {
7398 const u32 tdi_tbl40_ant1_rev3[] = {
7511 const u32 pltlut_tbl_rev3[] = {
7520 const u32 chanest_tbl_rev3[] = {
7619 const u8 frame_lut_rev3[] = {
7654 const u8 est_pwr_lut_core0_rev3[] = {
7721 const u8 est_pwr_lut_core1_rev3[] = {
7788 const u8 adj_pwr_lut_core0_rev3[] = {
7919 const u8 adj_pwr_lut_core1_rev3[] = {
8050 const u32 gainctrl_lut_core0_rev3[] = {
8181 const u32 gainctrl_lut_core1_rev3[] = {
8312 const u32 iq_lut_core0_rev3[] = {
8443 const u32 iq_lut_core1_rev3[] = {
8574 const u16 loft_lut_core0_rev3[] = {
8705 const u16 loft_lut_core1_rev3[] = {
8836 const u16 papd_comp_rfpwr_tbl_core0_rev3[] = {
8967 const u16 papd_comp_rfpwr_tbl_core1_rev3[] = {
9098 const u32 papd_comp_epsilon_tbl_core0_rev3[] = {
9165 const u32 papd_cal_scalars_tbl_core0_rev3[] = {
9232 const u32 papd_comp_epsilon_tbl_core1_rev3[] = {
9299 const u32 papd_cal_scalars_tbl_core1_rev3[] = {
9366 const mimophytbl_info_t mimophytbl_info_rev3_volatile[] = {
9367 {&ant_swctrl_tbl_rev3,
9368 sizeof(ant_swctrl_tbl_rev3) / sizeof(ant_swctrl_tbl_rev3[0]), 9, 0, 16}
9372 const mimophytbl_info_t mimophytbl_info_rev3_volatile1[] = {
9373 {&ant_swctrl_tbl_rev3_1,
9374 sizeof(ant_swctrl_tbl_rev3_1) / sizeof(ant_swctrl_tbl_rev3_1[0]), 9, 0,
9379 const mimophytbl_info_t mimophytbl_info_rev3_volatile2[] = {
9380 {&ant_swctrl_tbl_rev3_2,
9381 sizeof(ant_swctrl_tbl_rev3_2) / sizeof(ant_swctrl_tbl_rev3_2[0]), 9, 0,
9386 const mimophytbl_info_t mimophytbl_info_rev3_volatile3[] = {
9387 {&ant_swctrl_tbl_rev3_3,
9388 sizeof(ant_swctrl_tbl_rev3_3) / sizeof(ant_swctrl_tbl_rev3_3[0]), 9, 0,
9393 const mimophytbl_info_t mimophytbl_info_rev3[] = {
9394 {&frame_struct_rev3,
9395 sizeof(frame_struct_rev3) / sizeof(frame_struct_rev3[0]), 10, 0, 32}
9397 {&pilot_tbl_rev3, sizeof(pilot_tbl_rev3) / sizeof(pilot_tbl_rev3[0]),
9400 {&tmap_tbl_rev3, sizeof(tmap_tbl_rev3) / sizeof(tmap_tbl_rev3[0]), 12,
9403 {&intlv_tbl_rev3, sizeof(intlv_tbl_rev3) / sizeof(intlv_tbl_rev3[0]),
9406 {&tdtrn_tbl_rev3, sizeof(tdtrn_tbl_rev3) / sizeof(tdtrn_tbl_rev3[0]),
9409 {&noise_var_tbl_rev3,
9410 sizeof(noise_var_tbl_rev3) / sizeof(noise_var_tbl_rev3[0]), 16, 0, 32}
9412 {&mcs_tbl_rev3, sizeof(mcs_tbl_rev3) / sizeof(mcs_tbl_rev3[0]), 18, 0,
9415 {&tdi_tbl20_ant0_rev3,
9416 sizeof(tdi_tbl20_ant0_rev3) / sizeof(tdi_tbl20_ant0_rev3[0]), 19, 128,
9419 {&tdi_tbl20_ant1_rev3,
9420 sizeof(tdi_tbl20_ant1_rev3) / sizeof(tdi_tbl20_ant1_rev3[0]), 19, 256,
9423 {&tdi_tbl40_ant0_rev3,
9424 sizeof(tdi_tbl40_ant0_rev3) / sizeof(tdi_tbl40_ant0_rev3[0]), 19, 640,
9427 {&tdi_tbl40_ant1_rev3,
9428 sizeof(tdi_tbl40_ant1_rev3) / sizeof(tdi_tbl40_ant1_rev3[0]), 19, 768,
9431 {&pltlut_tbl_rev3, sizeof(pltlut_tbl_rev3) / sizeof(pltlut_tbl_rev3[0]),
9435 sizeof(chanest_tbl_rev3) / sizeof(chanest_tbl_rev3[0]), 22, 0, 32}
9437 {&frame_lut_rev3, sizeof(frame_lut_rev3) / sizeof(frame_lut_rev3[0]),
9440 {&est_pwr_lut_core0_rev3,
9441 sizeof(est_pwr_lut_core0_rev3) / sizeof(est_pwr_lut_core0_rev3[0]), 26,
9444 {&est_pwr_lut_core1_rev3,
9445 sizeof(est_pwr_lut_core1_rev3) / sizeof(est_pwr_lut_core1_rev3[0]), 27,
9448 {&adj_pwr_lut_core0_rev3,
9449 sizeof(adj_pwr_lut_core0_rev3) / sizeof(adj_pwr_lut_core0_rev3[0]), 26,
9452 {&adj_pwr_lut_core1_rev3,
9453 sizeof(adj_pwr_lut_core1_rev3) / sizeof(adj_pwr_lut_core1_rev3[0]), 27,
9456 {&gainctrl_lut_core0_rev3,
9457 sizeof(gainctrl_lut_core0_rev3) / sizeof(gainctrl_lut_core0_rev3[0]),
9460 {&gainctrl_lut_core1_rev3,
9461 sizeof(gainctrl_lut_core1_rev3) / sizeof(gainctrl_lut_core1_rev3[0]),
9464 {&iq_lut_core0_rev3,
9465 sizeof(iq_lut_core0_rev3) / sizeof(iq_lut_core0_rev3[0]), 26, 320, 32}
9467 {&iq_lut_core1_rev3,
9468 sizeof(iq_lut_core1_rev3) / sizeof(iq_lut_core1_rev3[0]), 27, 320, 32}
9470 {&loft_lut_core0_rev3,
9471 sizeof(loft_lut_core0_rev3) / sizeof(loft_lut_core0_rev3[0]), 26, 448,
9474 {&loft_lut_core1_rev3,
9475 sizeof(loft_lut_core1_rev3) / sizeof(loft_lut_core1_rev3[0]), 27, 448,
9479 const u32 mimophytbl_info_sz_rev3 =
9480 sizeof(mimophytbl_info_rev3) / sizeof(mimophytbl_info_rev3[0]);
9481 const u32 mimophytbl_info_sz_rev3_volatile =
9482 sizeof(mimophytbl_info_rev3_volatile) /
9483 sizeof(mimophytbl_info_rev3_volatile[0]);
9484 const u32 mimophytbl_info_sz_rev3_volatile1 =
9485 sizeof(mimophytbl_info_rev3_volatile1) /
9486 sizeof(mimophytbl_info_rev3_volatile1[0]);
9487 const u32 mimophytbl_info_sz_rev3_volatile2 =
9488 sizeof(mimophytbl_info_rev3_volatile2) /
9489 sizeof(mimophytbl_info_rev3_volatile2[0]);
9490 const u32 mimophytbl_info_sz_rev3_volatile3 =
9491 sizeof(mimophytbl_info_rev3_volatile3) /
9492 sizeof(mimophytbl_info_rev3_volatile3[0]);
9494 const u32 tmap_tbl_rev7[] = {
9945 const u32 noise_var_tbl_rev7[] = {
10204 const u32 papd_comp_epsilon_tbl_core0_rev7[] = {
10271 const u32 papd_cal_scalars_tbl_core0_rev7[] = {
10338 const u32 papd_comp_epsilon_tbl_core1_rev7[] = {
10405 const u32 papd_cal_scalars_tbl_core1_rev7[] = {
10472 const mimophytbl_info_t mimophytbl_info_rev7[] = {
10473 {&frame_struct_rev3,
10474 sizeof(frame_struct_rev3) / sizeof(frame_struct_rev3[0]), 10, 0, 32}
10476 {&pilot_tbl_rev3, sizeof(pilot_tbl_rev3) / sizeof(pilot_tbl_rev3[0]),
10479 {&tmap_tbl_rev7, sizeof(tmap_tbl_rev7) / sizeof(tmap_tbl_rev7[0]), 12,
10482 {&intlv_tbl_rev3, sizeof(intlv_tbl_rev3) / sizeof(intlv_tbl_rev3[0]),
10485 {&tdtrn_tbl_rev3, sizeof(tdtrn_tbl_rev3) / sizeof(tdtrn_tbl_rev3[0]),
10488 {&noise_var_tbl_rev7,
10489 sizeof(noise_var_tbl_rev7) / sizeof(noise_var_tbl_rev7[0]), 16, 0, 32}
10491 {&mcs_tbl_rev3, sizeof(mcs_tbl_rev3) / sizeof(mcs_tbl_rev3[0]), 18, 0,
10494 {&tdi_tbl20_ant0_rev3,
10495 sizeof(tdi_tbl20_ant0_rev3) / sizeof(tdi_tbl20_ant0_rev3[0]), 19, 128,
10498 {&tdi_tbl20_ant1_rev3,
10499 sizeof(tdi_tbl20_ant1_rev3) / sizeof(tdi_tbl20_ant1_rev3[0]), 19, 256,
10502 {&tdi_tbl40_ant0_rev3,
10503 sizeof(tdi_tbl40_ant0_rev3) / sizeof(tdi_tbl40_ant0_rev3[0]), 19, 640,
10506 {&tdi_tbl40_ant1_rev3,
10507 sizeof(tdi_tbl40_ant1_rev3) / sizeof(tdi_tbl40_ant1_rev3[0]), 19, 768,
10510 {&pltlut_tbl_rev3, sizeof(pltlut_tbl_rev3) / sizeof(pltlut_tbl_rev3[0]),
10513 {&chanest_tbl_rev3,
10514 sizeof(chanest_tbl_rev3) / sizeof(chanest_tbl_rev3[0]), 22, 0, 32}
10516 {&frame_lut_rev3, sizeof(frame_lut_rev3) / sizeof(frame_lut_rev3[0]),
10519 {&est_pwr_lut_core0_rev3,
10520 sizeof(est_pwr_lut_core0_rev3) / sizeof(est_pwr_lut_core0_rev3[0]), 26,
10523 {&est_pwr_lut_core1_rev3,
10524 sizeof(est_pwr_lut_core1_rev3) / sizeof(est_pwr_lut_core1_rev3[0]), 27,
10527 {&adj_pwr_lut_core0_rev3,
10528 sizeof(adj_pwr_lut_core0_rev3) / sizeof(adj_pwr_lut_core0_rev3[0]), 26,
10531 {&adj_pwr_lut_core1_rev3,
10532 sizeof(adj_pwr_lut_core1_rev3) / sizeof(adj_pwr_lut_core1_rev3[0]), 27,
10535 {&gainctrl_lut_core0_rev3,
10536 sizeof(gainctrl_lut_core0_rev3) / sizeof(gainctrl_lut_core0_rev3[0]),
10539 {&gainctrl_lut_core1_rev3,
10540 sizeof(gainctrl_lut_core1_rev3) / sizeof(gainctrl_lut_core1_rev3[0]),
10543 {&iq_lut_core0_rev3,
10544 sizeof(iq_lut_core0_rev3) / sizeof(iq_lut_core0_rev3[0]), 26, 320, 32}
10546 {&iq_lut_core1_rev3,
10547 sizeof(iq_lut_core1_rev3) / sizeof(iq_lut_core1_rev3[0]), 27, 320, 32}
10549 {&loft_lut_core0_rev3,
10550 sizeof(loft_lut_core0_rev3) / sizeof(loft_lut_core0_rev3[0]), 26, 448,
10553 {&loft_lut_core1_rev3,
10554 sizeof(loft_lut_core1_rev3) / sizeof(loft_lut_core1_rev3[0]), 27, 448,
10557 {&papd_comp_rfpwr_tbl_core0_rev3,
10558 sizeof(papd_comp_rfpwr_tbl_core0_rev3) /
10559 sizeof(papd_comp_rfpwr_tbl_core0_rev3[0]), 26, 576, 16}
10561 {&papd_comp_rfpwr_tbl_core1_rev3,
10562 sizeof(papd_comp_rfpwr_tbl_core1_rev3) /
10563 sizeof(papd_comp_rfpwr_tbl_core1_rev3[0]), 27, 576, 16}
10565 {&papd_comp_epsilon_tbl_core0_rev7,
10566 sizeof(papd_comp_epsilon_tbl_core0_rev7) /
10567 sizeof(papd_comp_epsilon_tbl_core0_rev7[0]), 31, 0, 32}
10569 {&papd_cal_scalars_tbl_core0_rev7,
10570 sizeof(papd_cal_scalars_tbl_core0_rev7) /
10571 sizeof(papd_cal_scalars_tbl_core0_rev7[0]), 32, 0, 32}
10573 {&papd_comp_epsilon_tbl_core1_rev7,
10574 sizeof(papd_comp_epsilon_tbl_core1_rev7) /
10575 sizeof(papd_comp_epsilon_tbl_core1_rev7[0]), 33, 0, 32}
10577 {&papd_cal_scalars_tbl_core1_rev7,
10578 sizeof(papd_cal_scalars_tbl_core1_rev7) /
10579 sizeof(papd_cal_scalars_tbl_core1_rev7[0]), 34, 0, 32}
10583 const u32 mimophytbl_info_sz_rev7 =
10584 sizeof(mimophytbl_info_rev7) / sizeof(mimophytbl_info_rev7[0]);
10586 const mimophytbl_info_t mimophytbl_info_rev16[] = {
10587 {&noise_var_tbl_rev7,
10588 sizeof(noise_var_tbl_rev7) / sizeof(noise_var_tbl_rev7[0]), 16, 0, 32}
10590 {&est_pwr_lut_core0_rev3,
10591 sizeof(est_pwr_lut_core0_rev3) / sizeof(est_pwr_lut_core0_rev3[0]), 26,
10594 {&est_pwr_lut_core1_rev3,
10595 sizeof(est_pwr_lut_core1_rev3) / sizeof(est_pwr_lut_core1_rev3[0]), 27,
10598 {&adj_pwr_lut_core0_rev3,
10599 sizeof(adj_pwr_lut_core0_rev3) / sizeof(adj_pwr_lut_core0_rev3[0]), 26,
10602 {&adj_pwr_lut_core1_rev3,
10603 sizeof(adj_pwr_lut_core1_rev3) / sizeof(adj_pwr_lut_core1_rev3[0]), 27,
10606 {&gainctrl_lut_core0_rev3,
10607 sizeof(gainctrl_lut_core0_rev3) / sizeof(gainctrl_lut_core0_rev3[0]),
10610 {&gainctrl_lut_core1_rev3,
10611 sizeof(gainctrl_lut_core1_rev3) / sizeof(gainctrl_lut_core1_rev3[0]),
10614 {&iq_lut_core0_rev3,
10615 sizeof(iq_lut_core0_rev3) / sizeof(iq_lut_core0_rev3[0]), 26, 320, 32}
10617 {&iq_lut_core1_rev3,
10618 sizeof(iq_lut_core1_rev3) / sizeof(iq_lut_core1_rev3[0]), 27, 320, 32}
10620 {&loft_lut_core0_rev3,
10621 sizeof(loft_lut_core0_rev3) / sizeof(loft_lut_core0_rev3[0]), 26, 448,
10624 {&loft_lut_core1_rev3,
10625 sizeof(loft_lut_core1_rev3) / sizeof(loft_lut_core1_rev3[0]), 27, 448,
10630 const u32 mimophytbl_info_sz_rev16 =
10631 sizeof(mimophytbl_info_rev16) / sizeof(mimophytbl_info_rev16[0]);