undefined4 OFDM_Rate2MCS(int param_1)

{
  char cVar1;
  uint uVar2;
  undefined4 uVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  byte bVar8;
  
  uVar2 = Status;
  uVar4 = 0;
  if (*(char *)(param_1 + 0xec) == '\0') {
    if (*(int *)(param_1 + 0x29f8) == 4) {
      uVar7 = 0;
      if (*(char *)(param_1 + 0xad) == '\x01') {
        Status = Status & 0xfffffffe;
        uVar7 = uVar2 & 1;
      }
      iVar6 = 0;
      cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      while( true ) {
        uVar2 = 0;
        if (cVar1 == '\0') {
          uVar2 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
        }
        if ((uVar2 & 0x20000) == 0) {
          if (cVar1 == '\0') {
            *(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb2f00;
          }
          iVar5 = 0;
          do {
            uVar2 = 0;
            if (*(char *)(param_1 + 0xec) == '\0') {
              uVar2 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
            }
          } while (((uVar2 & 0x20000) != 0) && (iVar5 = iVar5 + 1, iVar5 != 100));
          if ((uVar2 & 0x2ff00) == 0x2f00) {
            uVar4 = uVar2 & 0xff;
            goto LAB_000b9e3c;
          }
        }
        iVar6 = iVar6 + 1;
        if (iVar6 == 100) break;
        cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      }
      uVar4 = 0;
LAB_000b9e3c:
      if ((int)(uVar2 << 0xe) < 0) {
        printk("ERROR!!! ");
        printk("BBP(viaMCU=%d) read R%d fail\n",0,0x2f);
        uVar4 = (uint)*(byte *)(param_1 + 0x4af8);
LAB_000b9fd0:
        cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
      }
      else {
        cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
      }
    }
    else {
      uVar7 = 0;
      if (*(char *)(param_1 + 0xad) == '\x01') {
        Status = Status & 0xfffffffe;
        uVar7 = uVar2 & 1;
      }
      iVar6 = 0;
      cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      while( true ) {
        uVar2 = 0;
        if (cVar1 == '\0') {
          uVar2 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
        }
        if ((uVar2 & 0x20000) == 0) {
          if (cVar1 == '\0') {
            *(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x7028) = 0xb2f00;
          }
          AsicSendCommandToMcuBBP(param_1,0x80,0xff,0,0,0);
          RTMPusecDelay(1000);
          iVar5 = 0;
          do {
            uVar2 = 0;
            if (*(char *)(param_1 + 0xec) == '\0') {
              uVar2 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
            }
          } while (((uVar2 & 0x20000) != 0) && (iVar5 = iVar5 + 1, iVar5 != 100));
          if ((uVar2 & 0x2ff00) == 0x2f00) {
            uVar4 = uVar2 & 0xff;
            goto LAB_000b9f78;
          }
        }
        iVar6 = iVar6 + 1;
        if (iVar6 == 100) break;
        cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      }
      uVar4 = 0;
LAB_000b9f78:
      if ((int)(uVar2 << 0xe) < 0) {
        printk("ERROR!!! ");
        printk("BBP(viaMCU=%d) read R%d fail\n",1,0x2f);
        uVar4 = (uint)*(byte *)(param_1 + 0x4af8);
        if (*(char *)(param_1 + 0xec) == '\0') {
          *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) =
               *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) & 0xfffdffff;
        }
        goto LAB_000b9fd0;
      }
      cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
    }
    if (cVar1 == '\x01') {
      Status = Status & 0xfffffffe;
      if (uVar7 != 0) {
        Status = Status | 1;
      }
      goto LAB_000b9ff4;
    }
    cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
  }
  else {
LAB_000b9ff4:
    cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
  }
  uVar2 = Status;
  if (cVar1 == '\0') {
    uVar4 = uVar4 & 0xfc;
    bVar8 = (byte)uVar4 | 1;
    if (*(int *)(param_1 + 0x29f8) == 4) {
      uVar7 = 0;
      if (*(char *)(param_1 + 0xad) == '\x01') {
        Status = Status & 0xfffffffe;
        uVar7 = uVar2 & 1;
      }
      iVar6 = 1;
      cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      while( true ) {
        uVar2 = 0;
        if (cVar1 == '\0') {
          uVar2 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
        }
        if ((uVar2 & 0x20000) == 0) break;
        iVar6 = iVar6 + 1;
        printk(&_LC5)   //possible issue identified - semgrep
        if (iVar6 == 100) goto LAB_000ba0d0;
        cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      }
      if (cVar1 == '\0') {
        *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) = uVar4 | 0xa2f01;
      }
      *(byte *)(param_1 + 0x4af8) = bVar8;
      if (iVar6 != 100) goto LAB_000ba0f0;
LAB_000ba0d0:
      printk("ERROR!!! ");
      printk("BBP write R%d fail\n",0x2f);
LAB_000ba0f0:
      if (*(char *)(param_1 + 0xad) == '\x01') {
LAB_000ba2a4:
        Status = Status & 0xfffffffe;
        if (uVar7 != 0) {
          Status = Status | 1;
        }
        cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      }
      else {
        cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      }
    }
    else {
      uVar7 = 0;
      if (*(char *)(param_1 + 0xad) == '\x01') {
        Status = Status & 0xfffffffe;
        uVar7 = uVar2 & 1;
      }
      iVar6 = 1;
      cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      while( true ) {
        uVar2 = 0;
        if (cVar1 == '\0') {
          uVar2 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
        }
        if ((uVar2 & 0x20000) == 0) break;
        if ((iVar6 % 0x14 == 0) && (cVar1 == '\0')) {
          *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar2 & 0xfffdffff;
        }
        iVar6 = iVar6 + 1;
        printk(&_LC5)   //possible issue identified - semgrep
        if (iVar6 == 100) goto LAB_000ba248;
        cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      }
      if (cVar1 == '\0') {
        *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar4 | 0xa2f01;
      }
      iVar5 = AsicSendCommandToMcuBBP(param_1,0x80,0xff,0,0,0);
      if (*(char *)(param_1 + 0x16964) == '\x01') {
        RTMPusecDelay(1000);
      }
      if ((iVar5 == 0) && (*(char *)(param_1 + 0xec) == '\0')) {
        *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar4 | 0x82f01;
      }
      *(byte *)(param_1 + 0x4af8) = bVar8;
      if (iVar6 != 100) goto LAB_000ba290;
LAB_000ba248:
      printk("ERROR!!! ");
      printk("BBP write R%d fail\n",0x2f);
      if (*(char *)(param_1 + 0xec) == '\0') {
        *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) =
             *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) & 0xfffdffff;
LAB_000ba290:
        cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
      }
      else {
        cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
      }
      if (cVar1 == '\x01') goto LAB_000ba2a4;
      cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
    }
  }
  else {
    cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
  }
  uVar2 = Status;
  uVar4 = 0;
  if (cVar1 != '\0') goto LAB_000ba558;
  if (*(int *)(param_1 + 0x29f8) == 4) {
    uVar7 = 0;
    if (*(char *)(param_1 + 0xad) == '\x01') {
      Status = Status & 0xfffffffe;
      uVar7 = uVar2 & 1;
    }
    iVar6 = 0;
    cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
    while( true ) {
      uVar2 = 0;
      if (cVar1 == '\0') {
        uVar2 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
      }
      if ((uVar2 & 0x20000) == 0) {
        if (cVar1 == '\0') {
          *(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb3100;
        }
        iVar5 = 0;
        do {
          uVar2 = 0;
          if (*(char *)(param_1 + 0xec) == '\0') {
            uVar2 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
          }
        } while (((uVar2 & 0x20000) != 0) && (iVar5 = iVar5 + 1, iVar5 != 100));
        if ((uVar2 & 0x2ff00) == 0x3100) {
          uVar4 = uVar2 & 0xff;
          goto LAB_000ba39c;
        }
      }
      iVar6 = iVar6 + 1;
      if (iVar6 == 100) break;
      cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
    }
    uVar4 = 0;
LAB_000ba39c:
    if ((int)(uVar2 << 0xe) < 0) {
      printk("ERROR!!! ");
      printk("BBP(viaMCU=%d) read R%d fail\n",0,0x31);
      uVar4 = (uint)*(byte *)(param_1 + 0x4afa);
LAB_000ba530:
      cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
    }
    else {
      cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
    }
  }
  else {
    uVar7 = 0;
    if (*(char *)(param_1 + 0xad) == '\x01') {
      Status = Status & 0xfffffffe;
      uVar7 = uVar2 & 1;
    }
    iVar6 = 0;
    cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
    while( true ) {
      uVar2 = 0;
      if (cVar1 == '\0') {
        uVar2 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
      }
      if ((uVar2 & 0x20000) == 0) {
        if (cVar1 == '\0') {
          *(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x7028) = 0xb3100;
        }
        AsicSendCommandToMcuBBP(param_1,0x80,0xff,0,0,0);
        RTMPusecDelay(1000);
        iVar5 = 0;
        do {
          uVar2 = 0;
          if (*(char *)(param_1 + 0xec) == '\0') {
            uVar2 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
          }
        } while (((uVar2 & 0x20000) != 0) && (iVar5 = iVar5 + 1, iVar5 != 100));
        if ((uVar2 & 0x2ff00) == 0x3100) {
          uVar4 = uVar2 & 0xff;
          goto LAB_000ba4d8;
        }
      }
      iVar6 = iVar6 + 1;
      if (iVar6 == 100) break;
      cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
    }
    uVar4 = 0;
LAB_000ba4d8:
    if ((int)(uVar2 << 0xe) < 0) {
      printk("ERROR!!! ");
      printk("BBP(viaMCU=%d) read R%d fail\n",1,0x31);
      uVar4 = (uint)*(byte *)(param_1 + 0x4afa);
      if (*(char *)(param_1 + 0xec) == '\0') {
        *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) =
             *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) & 0xfffdffff;
      }
      goto LAB_000ba530;
    }
    cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
  }
  if ((cVar1 == '\x01') && (Status = Status & 0xfffffffe, uVar7 != 0)) {
    Status = Status | 1;
  }
LAB_000ba558:
  uVar3 = 6;
  switch((uVar4 >> 4) - 9 & 0xff) {
  case 0:
    uVar3 = 4;
    break;
  case 1:
    uVar3 = 2;
    break;
  case 2:
    uVar3 = 0;
    break;
  case 3:
    uVar3 = 7;
    break;
  case 4:
    uVar3 = 5;
    break;
  case 5:
    uVar3 = 3;
    break;
  case 6:
    uVar3 = 1;
  }
  return uVar3;
}