undefined4 RT5350_Set_ATE_TSSI_CALIBRATION_Proc(int param_1)

{
  undefined1 uVar1;
  undefined4 uVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  uint *puVar7;
  int *piVar8;
  uint uVar9;
  byte local_b0;
  byte local_af;
  byte local_ae [2];
  ushort local_ac;
  ushort local_aa;
  undefined4 local_a8;
  undefined2 local_a4;
  uint local_9c;
  uint local_98 [5];
  uint local_84;
  uint local_80 [7];
  uint uStack_64;
  int local_60 [4];
  int local_50;
  int local_4c;
  int local_48;
  int local_44;
  int local_40;
  int local_3c;
  int local_38;
  int local_34;
  int local_30;
  int local_2c;
  
  if ((*(uint *)(param_1 + 0x4a94) & 0xffff0000) == 0x53500000) {
    *(undefined1 *)(param_1 + 0x50ca) = 1;
    local_a8 = 0x44332211;
    local_a4 = 0x6655;
    RT5350_InitDesiredTSSITable();
    RTMPReadChannelPwr(param_1);
    memset((void *)(param_1 + 0x76a0c),0,0xf8)   //possible issue identified - semgrep
    *(undefined4 *)(param_1 + 0x76a40) = 0xffffffff;
    *(undefined4 *)(param_1 + 0x76a3c) = 0x400;
    memcpy((void *)(param_1 + 0x76a26),&BROADCAST_ADDR,6)   //possible issue identified - semgrep
    memcpy((void *)(param_1 + 0x76a2c),(void *)(param_1 + 0x1696d),6)   //possible issue identified - semgrep
    memcpy((void *)(param_1 + 0x76a32),&local_a8,6)   //possible issue identified - semgrep
    Set_ATE_TX_MODE_Proc(param_1,&_LC218);
    Set_ATE_TX_MCS_Proc(param_1,&_LC219);
    Set_ATE_TX_BW_Proc(param_1,&_LC220);
    (**(code **)(param_1 + 0x10))(param_1,0x3a,&local_ac);
    *(uint *)(param_1 + 0x76a48) = (uint)(byte)local_ac;
    *(undefined4 *)(param_1 + 0x76a4c) = 200;
    *(undefined1 *)(param_1 + 0x76a38) = 1;
    *(undefined1 *)(param_1 + 0x76a0f) = *(undefined1 *)(param_1 + 0x4c24);
    ATEAsicSwitchChannel(param_1);
    AsicLockChannel(param_1,*(undefined1 *)(param_1 + 0x76a38));
    RtmpOsMsDelay(5);
    Set_ATE_Proc(param_1,"TXFRAME");
    RtmpOsMsDelay(1);
    ATE_GET_TSSI(param_1,1,7,&local_b0);
    if (RTDebugLevel < 3) {
      uVar1 = *(undefined1 *)(param_1 + 0x4c60);
    }
    else {
      printk("TSSI CALIBRATION: Channel[1] TSSI=%x\n",local_b0);
      uVar1 = *(undefined1 *)(param_1 + 0x4c60);
    }
    *(undefined1 *)(param_1 + 0x76a0f) = uVar1;
    *(undefined1 *)(param_1 + 0x76a38) = 7;
    ATEAsicSwitchChannel(param_1);
    AsicLockChannel(param_1,*(undefined1 *)(param_1 + 0x76a38));
    RtmpOsMsDelay(5);
    Set_ATE_Proc(param_1,"TXFRAME");
    RtmpOsMsDelay(1);
    ATE_GET_TSSI(param_1,1,7,&local_af);
    if (RTDebugLevel < 3) {
      uVar1 = *(undefined1 *)(param_1 + 0x4c9c);
    }
    else {
      printk("TSSI CALIBRATION: Channel[7] TSSI=%x\n",local_af);
      uVar1 = *(undefined1 *)(param_1 + 0x4c9c);
    }
    *(undefined1 *)(param_1 + 0x76a0f) = uVar1;
    *(undefined1 *)(param_1 + 0x76a38) = 0xd;
    ATEAsicSwitchChannel(param_1);
    AsicLockChannel(param_1,*(undefined1 *)(param_1 + 0x76a38));
    RtmpOsMsDelay(5);
    Set_ATE_Proc(param_1,"TXFRAME");
    RtmpOsMsDelay(1);
    ATE_GET_TSSI(param_1,1,7,local_ae);
    if (2 < RTDebugLevel) {
      printk("TSSI CALIBRATION: Channel[13] TSSI=%x\n",local_ae[0]);
    }
    uVar5 = (uint)local_b0 * 10000;
    uVar9 = (uint)local_af * 10000;
    puVar7 = local_98;
    local_80[5] = (uint)local_ae[0] * 10000;
    uVar6 = uVar5;
    do {
      uVar6 = (int)(uVar9 + (uint)local_b0 * -10000) / 6 + uVar6;
      *puVar7 = uVar6;
      puVar7 = puVar7 + 1;
    } while (puVar7 != &local_84);
    iVar4 = local_80[5] + (uint)local_af * -10000;
    puVar7 = local_80;
    uVar6 = uVar9;
    do {
      uVar6 = iVar4 / 6 + uVar6;
      *puVar7 = uVar6;
      puVar7 = puVar7 + 1;
    } while (puVar7 != &uStack_64);
    puVar7 = &local_9c;
    piVar8 = local_60;
    iVar4 = 1;
    local_9c = uVar5;
    local_84 = uVar9;
    while( true ) {
      iVar3 = TSSIDelta2PowDelta(uVar5,local_af);
      *piVar8 = iVar3;
      puVar7 = puVar7 + 1;
      piVar8 = piVar8 + 1;
      if (2 < RTDebugLevel) {
        printk("TSSI CALIBRATION: Channel[%d] TSSI_x=%d\n",iVar4,uVar5);
      }
      if (2 < RTDebugLevel) {
        printk("TSSI CALIBRATION: Channel[%d] TSSI_power_delta=%d\n",iVar4,iVar3);
      }
      iVar4 = iVar4 + 1;
      if (iVar4 == 0xf) break;
      uVar5 = *puVar7;
    }
    local_ac = (ushort)(uVar9 / 10000);
    (**(code **)(param_1 + 0x14))(param_1,0x6e,uVar9 / 10000);
    uVar6 = ((local_60[1] << 0x1c) >> 0x1c) << 4 | (int)(char)((local_60[0] << 0x1c) >> 0x1c);
    local_ac = (ushort)uVar6;
    (**(code **)(param_1 + 0x14))(param_1,0x6f,uVar6 & 0xffff);
    uVar6 = ((local_60[3] << 0x1c) >> 0x1c) << 4 | (int)(char)((local_60[2] << 0x1c) >> 0x1c);
    local_ac = (ushort)uVar6;
    (**(code **)(param_1 + 0x14))(param_1,0x70,uVar6 & 0xffff);
    uVar6 = ((local_4c << 0x1c) >> 0x1c) << 4 | (int)(char)((local_50 << 0x1c) >> 0x1c);
    local_ac = (ushort)uVar6;
    (**(code **)(param_1 + 0x14))(param_1,0x71,uVar6 & 0xffff);
    uVar6 = ((local_44 << 0x1c) >> 0x1c) << 4 | (int)(char)((local_48 << 0x1c) >> 0x1c);
    local_ac = (ushort)uVar6;
    (**(code **)(param_1 + 0x14))(param_1,0x72,uVar6 & 0xffff);
    uVar6 = ((local_3c << 0x1c) >> 0x1c) << 4 | (int)(char)((local_40 << 0x1c) >> 0x1c);
    local_ac = (ushort)uVar6;
    (**(code **)(param_1 + 0x14))(param_1,0x73,uVar6 & 0xffff);
    uVar6 = ((local_34 << 0x1c) >> 0x1c) << 4 | (int)(char)((local_38 << 0x1c) >> 0x1c);
    local_ac = (ushort)uVar6;
    (**(code **)(param_1 + 0x14))(param_1,0x74,uVar6 & 0xffff);
    (**(code **)(param_1 + 0x10))(param_1,0x76,&local_aa);
    uVar6 = (int)(char)((local_30 << 0x1c) >> 0x1c) | (uint)local_aa << 8 |
            ((local_2c << 0x1c) >> 0x1c) << 4;
    local_ac = (ushort)uVar6;
    (**(code **)(param_1 + 0x14))(param_1,0x75,uVar6 & 0xffff);
    (**(code **)(param_1 + 0x10))(param_1,0x36,&local_ac);
    local_ac = local_ac & 0xfffd | 0x2000;
    (**(code **)(param_1 + 0x14))(param_1,0x36,local_ac);
    RTMPusecDelay(10);
    (**(code **)(param_1 + 0x10))(param_1,0x76,&local_ac);
    local_ac = local_ac & 0x6fff | 0x9000;
    (**(code **)(param_1 + 0x14))(param_1,0x76,local_ac);
    RTMPusecDelay(10);
    uVar2 = 1;
  }
  else {
    printk("ERROR!!! ");
    printk("Not support TSSI calibration!!!\n");
    printk("ERROR!!! ");
    printk("Not RT5350!!!\n");
    uVar2 = 0;
  }
  return uVar2;
}