undefined4 DO_RACFG_CMD_TX_START(int param_1,undefined4 param_2,int param_3)

{
  char cVar1;
  byte bVar2;
  uint uVar3;
  int iVar4;
  char *pcVar5;
  uint uVar6;
  undefined4 uVar7;
  int iVar8;
  
  if (*(char *)(param_1 + 0x76b00) != '\0') {
    if ((*(byte *)(param_1 + 0x76a0c) & 1) != 0) {
      uVar7 = 2;
      if (2 < RTDebugLevel) {
        printk("Ate Tx is already running, to run next Tx, you must stop it first\n");
        uVar7 = 2;
      }
      goto LAB_000aab10;
    }
    if ((*(byte *)(param_1 + 0x76a0c) & 1) == 0) {
      iVar8 = 0;
      while ((iVar8 = iVar8 + 1, iVar8 != 0xb && (*(char *)(param_1 + 0x76b00) != '\0'))) {
        RtmpOsMsDelay(5);
      }
      *(undefined1 *)(param_1 + 0x76a52) = 0;
      *(undefined1 *)(param_1 + 0x76b00) = 0;
      *(undefined4 *)(param_1 + 0x76a44) = 0;
    }
  }
  if ((*(byte *)(param_1 + 0x76a0c) & 1) == 0) {
    cVar1 = *(char *)(param_3 + 9)   //possible issue identified - semgrep
  }
  else {
    TXSTOP(param_1);
    cVar1 = *(char *)(param_3 + 9)   //possible issue identified - semgrep
  }
  if (*(char *)(param_3 + 8) != '\0' || cVar1 != '\0') {
    memmove((void *)(param_1 + 0x76a13),(void *)(param_3 + 0x10),0x10)   //possible issue identified - semgrep
    memmove((void *)(param_1 + 0x76a40),(void *)(param_3 + 0x20),4)   //possible issue identified - semgrep
    uVar3 = *(uint *)(param_1 + 0x76a40);
    *(undefined2 *)(param_1 + 0x76a24) = 0;
    *(uint *)(param_1 + 0x76a40) =
         (((uVar3 >> 0x10) << 0x18 | (uVar3 >> 0x18) << 0x10) >> 0x10) +
         ((uVar3 & 0xff) << 8 | uVar3 >> 8 & 0xff) * 0x10000;
    uVar3 = (*(ushort *)(param_3 + 0x26) & 0xff) << 8 | (uint)(*(ushort *)(param_3 + 0x26) >> 8);
    *(short *)(param_1 + 0x76a74) = (short)uVar3;
    if (0x20 < uVar3) {
      uVar7 = 3;
      if (RTDebugLevel != 0) {
        printk("pAd->ate.HLen > 32\n");
        uVar7 = 3;
      }
      goto LAB_000aab10;
    }
    memmove((void *)(param_1 + 0x76a78),(void *)(param_3 + 0x28),uVar3)   //possible issue identified - semgrep
    uVar3 = (((*(ushort *)(param_3 + 8) & 0xff) << 8 | (uint)(*(ushort *)(param_3 + 8) >> 8)) -
            (uint)*(ushort *)(param_1 + 0x76a74)) - 0x1c;
    uVar6 = uVar3 & 0xffff;
    *(short *)(param_1 + 0x76a76) = (short)uVar3;
    if (0x20 < uVar6) {
      uVar7 = 4;
      if (RTDebugLevel != 0) {
        printk("pAd->ate.PLen > 32\n");
        uVar7 = 4;
      }
      goto LAB_000aab10;
    }
    memmove((void *)(param_1 + 0x76a98),
            (void *)(param_3 + (uint)*(ushort *)(param_1 + 0x76a74) + 0x28),uVar6)   //possible issue identified - semgrep
    *(ushort *)(param_1 + 0x76ab8) =
         (ushort)((uint)(*(int *)(param_1 + 0x76a18) << 0xc) >> 0x14) -
         *(short *)(param_1 + 0x76a74);
  }
  iVar8 = 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) = 0xb1600;
      }
      iVar4 = 1;
      while( true ) {
        uVar3 = 0;
        if (*(char *)(param_1 + 0xec) == '\0') {
          uVar3 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
        }
        if (((uVar3 & 0x20000) == 0) || (iVar4 == 100)) break;
        iVar4 = iVar4 + 1;
      }
      if ((uVar3 & 0x2ff00) == 0x1600) {
        uVar6 = uVar3 & 0xff;
        goto LAB_000aa810;
      }
    }
    iVar8 = iVar8 + 1;
    if (iVar8 == 100) break;
    cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
  }
  uVar6 = 0;
LAB_000aa810:
  if ((int)(uVar3 << 0xe) < 0) {
    if (RTDebugLevel == 0) {
      bVar2 = *(byte *)(param_1 + 0x4adf);
    }
    else {
      printk("BBP read R%d fail\n",0x16);
      bVar2 = *(byte *)(param_1 + 0x4adf);
    }
    uVar6 = (uint)bVar2;
  }
  if (uVar6 == 0x80) {
    if (2 < RTDebugLevel) {
      printk("BBP22_TXCONT_OR_CARRSUPP\n");
    }
    iVar8 = 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) = 0xb1800;
        }
        iVar4 = 1;
        while( true ) {
          uVar3 = 0;
          if (*(char *)(param_1 + 0xec) == '\0') {
            uVar3 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
          }
          if (((uVar3 & 0x20000) == 0) || (iVar4 == 100)) break;
          iVar4 = iVar4 + 1;
        }
        if ((uVar3 & 0x2ff00) == 0x1800) {
          uVar6 = uVar3 & 0xff;
          goto LAB_000aa9a4;
        }
      }
      iVar8 = iVar8 + 1;
      if (iVar8 == 100) break;
      cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
    }
    uVar6 = 0;
LAB_000aa9a4:
    if ((int)(uVar3 << 0xe) < 0) {
      if (RTDebugLevel == 0) {
        uVar6 = (uint)*(byte *)(param_1 + 0x4ae1);
      }
      else {
        printk("BBP read R%d fail\n",0x18);
        uVar6 = (uint)*(byte *)(param_1 + 0x4ae1);
      }
    }
    if (uVar6 == 0) {
      if (2 < RTDebugLevel) {
        pcVar5 = "START TXCONT\n";
LAB_000aaa24:
        printk(pcVar5);
      }
    }
    else {
      if (uVar6 != 1) {
        if (RTDebugLevel != 0) {
          pcVar5 = "Unknown TX subtype !";
          goto LAB_000aaac4;
        }
        goto LAB_000aaad8;
      }
      if (2 < RTDebugLevel) {
        pcVar5 = "START TXCARRSUPP\n";
        goto LAB_000aaa24;
      }
    }
    *(undefined1 *)(param_1 + 0x76a52) = 1;
  }
  else {
    if (uVar6 == 0xc1) {
      if (2 < RTDebugLevel) {
        printk("START TXCARR\n");
      }
      *(undefined1 *)(param_1 + 0x76a52) = 1;
      pcVar5 = "TXCARR";
    }
    else {
      if (uVar6 != 0) {
        if (RTDebugLevel != 0) {
          pcVar5 = "Unknown Start TX subtype !";
LAB_000aaac4:
          printk(pcVar5);
        }
        goto LAB_000aaad8;
      }
      if (*(int *)(param_1 + 0x76a40) == 0) {
        *(undefined4 *)(param_1 + 0x76a40) = 0xffffffff;
      }
      if (2 < RTDebugLevel) {
        printk("START TXFRAME\n");
      }
      *(undefined1 *)(param_1 + 0x76a52) = 1;
      pcVar5 = "TXFRAME";
    }
    Set_ATE_Proc(param_1,pcVar5);
  }
LAB_000aaad8:
  uVar7 = 1;
  if (*(char *)(param_1 + 0x76a52) == '\x01') {
    ResponseToGUI(param_3,param_2,2,0);
    return 0;
  }
LAB_000aab10:
  ResponseToGUI(param_3,param_2,2);
  return uVar7;
}