undefined4 ATE_GET_TSSI(int param_1,uint param_2,uint param_3,undefined1 *param_4)

{
  char cVar1;
  byte bVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  char *pcVar8;
  int iVar9;
  int iVar10;
  int local_30;
  uint local_2c;
  
  if ((*(uint *)(param_1 + 0x4a94) & 0xffff0000) != 0x53500000) {
    return 1;
  }
  iVar10 = 0;
  cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
  while( true ) {
    uVar3 = 0;
    if (cVar1 == '\0') {
      uVar3 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
    }
    if ((uVar3 & 0x20000) == 0) {
      if (cVar1 == '\0') {
        *(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb2f00;
      }
      iVar9 = 1;
      while( true ) {
        uVar3 = 0;
        if (*(char *)(param_1 + 0xec) == '\0') {
          uVar3 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
        }
        if (((uVar3 & 0x20000) == 0) || (iVar9 == 100)) break;
        iVar9 = iVar9 + 1;
      }
      if ((uVar3 & 0x2ff00) == 0x2f00) {
        uVar6 = uVar3 & 0xff;
        goto LAB_000a40b4;
      }
    }
    iVar10 = iVar10 + 1;
    if (iVar10 == 100) break;
    cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
  }
  uVar6 = 0;
LAB_000a40b4:
  if ((int)(uVar3 << 0xe) < 0) {
    if (RTDebugLevel == 0) {
      bVar2 = *(byte *)(param_1 + 0x4af8);
    }
    else {
      printk("BBP read R%d fail\n",0x2f);
      bVar2 = *(byte *)(param_1 + 0x4af8);
    }
    uVar6 = (uint)bVar2;
    cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
  }
  else {
    cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
  }
  uVar6 = uVar6 & 0xf8;
  iVar10 = 0;
  do {
    uVar3 = 0;
    if (cVar1 == '\0') {
      uVar3 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
    }
    if ((uVar3 & 0x20000) == 0) {
      if (cVar1 == '\0') {
        *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) = uVar6 | 0xa2f00;
      }
      *(char *)(param_1 + 0x4af8) = (char)uVar6;
      if (iVar10 != 100) goto LAB_000a4198;
      break;
    }
    iVar10 = iVar10 + 1;
  } while (iVar10 != 100);
  if (RTDebugLevel != 0) {
    printk("BBP write R%d fail\n",0x2f);
  }
LAB_000a4198:
  iVar10 = 0;
  cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
LAB_000a41b4:
  uVar3 = 0;
  if (cVar1 == '\0') {
    uVar3 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
  }
  if ((uVar3 & 0x20000) == 0) {
    if (cVar1 == '\0') {
      *(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb2f00;
    }
    iVar9 = 1;
    while( true ) {
      uVar3 = 0;
      if (*(char *)(param_1 + 0xec) == '\0') {
        uVar3 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
      }
      if (((uVar3 & 0x20000) == 0) || (iVar9 == 100)) break;
      iVar9 = iVar9 + 1;
    }
    if ((uVar3 & 0x2ff00) == 0x2f00) {
      uVar6 = uVar3 & 0xff;
LAB_000a4248:
      if ((int)(uVar3 << 0xe) < 0) {
        if (RTDebugLevel == 0) {
          bVar2 = *(byte *)(param_1 + 0x4af8);
        }
        else {
          printk("BBP read R%d fail\n",0x2f);
          bVar2 = *(byte *)(param_1 + 0x4af8);
        }
        uVar6 = (uint)bVar2;
        cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      }
      else {
        cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      }
      uVar3 = uVar6 | 4;
      iVar10 = 0;
      do {
        uVar7 = 0;
        if (cVar1 == '\0') {
          uVar7 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
        }
        if ((uVar7 & 0x20000) == 0) {
          if (cVar1 == '\0') {
            *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) = uVar6 | 0xa2f04;
          }
          *(char *)(param_1 + 0x4af8) = (char)uVar3;
          if (iVar10 != 100) goto LAB_000a432c;
          break;
        }
        iVar10 = iVar10 + 1;
      } while (iVar10 != 100);
      if (RTDebugLevel != 0) {
        printk("BBP write R%d fail\n",0x2f);
      }
LAB_000a432c:
      RtmpOsMsDelay(100);
      local_30 = 0;
      uVar6 = 0;
      local_2c = 0;
      uVar7 = 0;
      do {
        iVar10 = 0;
        cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
LAB_000a4368:
        uVar4 = 0;
        if (cVar1 == '\0') {
          uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
        }
        if ((uVar4 & 0x20000) != 0) {
LAB_000a43f4:
          iVar10 = iVar10 + 1;
          if (iVar10 == 100) goto LAB_000a43fc;
          cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          goto LAB_000a4368;
        }
        if (cVar1 == '\0') {
          *(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb2f00;
        }
        iVar9 = 1;
        while( true ) {
          uVar4 = 0;
          if (*(char *)(param_1 + 0xec) == '\0') {
            uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
          }
          if (((uVar4 & 0x20000) == 0) || (iVar9 == 100)) break;
          iVar9 = iVar9 + 1;
        }
        if ((uVar4 & 0x2ff00) != 0x2f00) goto LAB_000a43f4;
        uVar3 = uVar4 & 0xff;
LAB_000a43fc:
        if ((uVar4 & 0x20000) != 0) {
          if (RTDebugLevel == 0) {
            bVar2 = *(byte *)(param_1 + 0x4af8);
          }
          else {
            printk("BBP read R%d fail\n",0x2f);
            bVar2 = *(byte *)(param_1 + 0x4af8);
          }
          uVar3 = (uint)bVar2;
        }
        if ((uVar3 & 4) != 0) goto LAB_000a4c40;
        iVar10 = 0;
        cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
LAB_000a444c:
        uVar4 = 0;
        if (cVar1 == '\0') {
          uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
        }
        if ((uVar4 & 0x20000) != 0) {
LAB_000a44d8:
          iVar10 = iVar10 + 1;
          if (iVar10 == 100) goto LAB_000a44e0;
          cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          goto LAB_000a444c;
        }
        if (cVar1 == '\0') {
          *(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb2f00;
        }
        iVar9 = 1;
        while( true ) {
          uVar4 = 0;
          if (*(char *)(param_1 + 0xec) == '\0') {
            uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
          }
          if (((uVar4 & 0x20000) == 0) || (iVar9 == 100)) break;
          iVar9 = iVar9 + 1;
        }
        if ((uVar4 & 0x2ff00) != 0x2f00) goto LAB_000a44d8;
        uVar3 = uVar4 & 0xff;
LAB_000a44e0:
        if ((uVar4 & 0x20000) == 0) {
          cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
        }
        else {
          if (RTDebugLevel == 0) {
            bVar2 = *(byte *)(param_1 + 0x4af8);
          }
          else {
            printk("BBP read R%d fail\n",0x2f);
            bVar2 = *(byte *)(param_1 + 0x4af8);
          }
          uVar3 = (uint)bVar2;
          cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
        }
        uVar3 = uVar3 & 0xfc;
        iVar10 = 0;
        do {
          uVar4 = 0;
          if (cVar1 == '\0') {
            uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
          }
          if ((uVar4 & 0x20000) == 0) {
            if (cVar1 == '\0') {
              *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) = uVar3 | 0xa2f00;
            }
            *(char *)(param_1 + 0x4af8) = (char)uVar3;
            if (iVar10 != 100) goto LAB_000a45a8;
            break;
          }
          iVar10 = iVar10 + 1;
        } while (iVar10 != 100);
        if (RTDebugLevel != 0) {
          printk("BBP write R%d fail\n",0x2f);
        }
LAB_000a45a8:
        iVar10 = 0;
        cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
LAB_000a45bc:
        uVar4 = 0;
        if (cVar1 == '\0') {
          uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
        }
        if ((uVar4 & 0x20000) != 0) {
LAB_000a4648:
          iVar10 = iVar10 + 1;
          if (iVar10 == 100) goto LAB_000a4650;
          cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          goto LAB_000a45bc;
        }
        if (cVar1 == '\0') {
          *(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb3100;
        }
        iVar9 = 1;
        while( true ) {
          uVar4 = 0;
          if (*(char *)(param_1 + 0xec) == '\0') {
            uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
          }
          if (((uVar4 & 0x20000) == 0) || (iVar9 == 100)) break;
          iVar9 = iVar9 + 1;
        }
        if ((uVar4 & 0x2ff00) != 0x3100) goto LAB_000a4648;
        uVar6 = uVar4 & 0xff;
LAB_000a4650:
        if ((uVar4 & 0x20000) != 0) {
          if (RTDebugLevel == 0) {
            bVar2 = *(byte *)(param_1 + 0x4afa);
          }
          else {
            printk("BBP read R%d fail\n",0x31);
            bVar2 = *(byte *)(param_1 + 0x4afa);
          }
          uVar6 = (uint)bVar2;
        }
        if (0x7c < uVar6) {
          if (2 < RTDebugLevel) {
            printk("TSSI: BBP_R49=%X is native value\n",uVar6);
          }
          *param_4 = 0x7c;
          uVar6 = 0x7c;
          goto LAB_000a4c40;
        }
        iVar10 = 0;
        *param_4 = (char)uVar6;
        cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
LAB_000a46dc:
        uVar4 = 0;
        if (cVar1 == '\0') {
          uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
        }
        if ((uVar4 & 0x20000) != 0) {
LAB_000a4768:
          iVar10 = iVar10 + 1;
          if (iVar10 == 100) goto LAB_000a4770;
          cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          goto LAB_000a46dc;
        }
        if (cVar1 == '\0') {
          *(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb2f00;
        }
        iVar9 = 1;
        while( true ) {
          uVar4 = 0;
          if (*(char *)(param_1 + 0xec) == '\0') {
            uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
          }
          if (((uVar4 & 0x20000) == 0) || (iVar9 == 100)) break;
          iVar9 = iVar9 + 1;
        }
        if ((uVar4 & 0x2ff00) != 0x2f00) goto LAB_000a4768;
        uVar3 = uVar4 & 0xff;
LAB_000a4770:
        if ((uVar4 & 0x20000) != 0) {
          if (RTDebugLevel == 0) {
            bVar2 = *(byte *)(param_1 + 0x4af8);
          }
          else {
            printk("BBP read R%d fail\n",0x2f);
            bVar2 = *(byte *)(param_1 + 0x4af8);
          }
          uVar3 = (uint)bVar2;
        }
        uVar4 = uVar3 & 0xfc;
        uVar3 = uVar4 | 1;
        iVar10 = 0;
        do {
          uVar5 = 0;
          if (*(char *)(param_1 + 0xec) == '\0') {
            uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
          }
          if ((uVar5 & 0x20000) == 0) {
            if (*(char *)(param_1 + 0xec) == '\0') {
              *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) = uVar4 | 0xa2f01;
            }
            *(char *)(param_1 + 0x4af8) = (char)uVar3;
            if (iVar10 != 100) goto LAB_000a483c;
            break;
          }
          iVar10 = iVar10 + 1;
        } while (iVar10 != 100);
        if (RTDebugLevel != 0) {
          printk("BBP write R%d fail\n",0x2f);
        }
LAB_000a483c:
        iVar10 = 0;
        cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
LAB_000a4850:
        uVar4 = 0;
        if (cVar1 == '\0') {
          uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
        }
        if ((uVar4 & 0x20000) != 0) {
LAB_000a48e0:
          iVar10 = iVar10 + 1;
          if (iVar10 == 100) goto LAB_000a48e8;
          cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          goto LAB_000a4850;
        }
        if (cVar1 == '\0') {
          *(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb3100;
        }
        iVar9 = 1;
        while( true ) {
          uVar4 = 0;
          if (*(char *)(param_1 + 0xec) == '\0') {
            uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
          }
          if (((uVar4 & 0x20000) == 0) || (iVar9 == 100)) break;
          iVar9 = iVar9 + 1;
        }
        if ((uVar4 & 0x2ff00) != 0x3100) goto LAB_000a48e0;
        local_2c = uVar4 & 0xff;
LAB_000a48e8:
        if ((uVar4 & 0x20000) != 0) {
          if (RTDebugLevel == 0) {
            bVar2 = *(byte *)(param_1 + 0x4afa);
          }
          else {
            printk("BBP read R%d fail\n",0x31);
            bVar2 = *(byte *)(param_1 + 0x4afa);
          }
          local_2c = (uint)bVar2;
        }
        if ((local_2c & 3) == param_2) {
          if (param_2 == 1) {
            uVar4 = OFDM_Rate2MCS(param_1);
            if (2 < RTDebugLevel) {
              pcVar8 = "OFDM: MCS = %d\n";
LAB_000a49ac:
              printk(pcVar8,uVar4);
            }
          }
          else {
            if (param_2 == 2) {
              iVar10 = 0;
              cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
LAB_000a49dc:
              uVar4 = 0;
              if (cVar1 == '\0') {
                uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
              }
              if ((uVar4 & 0x20000) != 0) {
LAB_000a4a68:
                iVar10 = iVar10 + 1;
                if (iVar10 == 100) goto LAB_000a4a70;
                cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
                goto LAB_000a49dc;
              }
              if (cVar1 == '\0') {
                *(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb2f00;
              }
              iVar9 = 1;
              while( true ) {
                uVar4 = 0;
                if (*(char *)(param_1 + 0xec) == '\0') {
                  uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
                }
                if (((uVar4 & 0x20000) == 0) || (iVar9 == 100)) break;
                iVar9 = iVar9 + 1;
              }
              if ((uVar4 & 0x2ff00) != 0x2f00) goto LAB_000a4a68;
              uVar3 = uVar4 & 0xff;
LAB_000a4a70:
              if ((uVar4 & 0x20000) != 0) {
                if (RTDebugLevel == 0) {
                  bVar2 = *(byte *)(param_1 + 0x4af8);
                }
                else {
                  printk("BBP read R%d fail\n",0x2f);
                  bVar2 = *(byte *)(param_1 + 0x4af8);
                }
                uVar3 = (uint)bVar2;
              }
              uVar4 = uVar3 & 0xfc;
              uVar3 = uVar4 | 2;
              iVar10 = 0;
              do {
                uVar5 = 0;
                if (*(char *)(param_1 + 0xec) == '\0') {
                  uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
                }
                if ((uVar5 & 0x20000) == 0) {
                  if (*(char *)(param_1 + 0xec) == '\0') {
                    *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) = uVar4 | 0xa2f02;
                  }
                  *(char *)(param_1 + 0x4af8) = (char)uVar3;
                  if (iVar10 != 100) goto LAB_000a4b3c;
                  break;
                }
                iVar10 = iVar10 + 1;
              } while (iVar10 != 100);
              if (RTDebugLevel != 0) {
                printk("BBP write R%d fail\n",0x2f);
              }
LAB_000a4b3c:
              iVar10 = 0;
              cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
LAB_000a4b50:
              uVar4 = 0;
              if (cVar1 == '\0') {
                uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
              }
              if ((uVar4 & 0x20000) != 0) {
LAB_000a4bdc:
                iVar10 = iVar10 + 1;
                if (iVar10 == 100) goto LAB_000a4be4;
                cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
                goto LAB_000a4b50;
              }
              if (cVar1 == '\0') {
                *(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb3100;
              }
              iVar9 = 1;
              while( true ) {
                uVar4 = 0;
                if (*(char *)(param_1 + 0xec) == '\0') {
                  uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
                }
                if (((uVar4 & 0x20000) == 0) || (iVar9 == 100)) break;
                iVar9 = iVar9 + 1;
              }
              if ((uVar4 & 0x2ff00) != 0x3100) goto LAB_000a4bdc;
              uVar7 = uVar4 & 0xff;
LAB_000a4be4:
              if ((uVar4 & 0x20000) != 0) {
                if (RTDebugLevel == 0) {
                  bVar2 = *(byte *)(param_1 + 0x4afa);
                }
                else {
                  printk("BBP read R%d fail\n",0x31);
                  bVar2 = *(byte *)(param_1 + 0x4afa);
                }
                uVar7 = (uint)bVar2;
              }
              if (2 < RTDebugLevel) {
                printk("HT: MCS = %d\n",uVar7 & 0x7f);
              }
              if (param_3 == (uVar7 & 0x7f)) {
                return 1;
              }
              goto LAB_000a4c40;
            }
            if (param_2 != 0) {
              return 1;
            }
            uVar4 = CCK_Rate2MCS(param_1);
            if (2 < RTDebugLevel) {
              pcVar8 = "CCK: MCS = %d\n";
              goto LAB_000a49ac;
            }
          }
          if (param_3 == uVar4) {
            return 1;
          }
        }
LAB_000a4c40:
        local_30 = local_30 + 1;
        if (local_30 == 500) {
          return 1;
        }
      } while( true );
    }
  }
  iVar10 = iVar10 + 1;
  if (iVar10 == 100) goto LAB_000a4248;
  cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
  goto LAB_000a41b4;
}