void AP_ARalink_Frame_Tx(int param_1,byte *param_2)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  short sVar4;
  uint uVar5;
  int *piVar6;
  byte bVar7;
  byte *pbVar8;
  byte bVar9;
  undefined4 uVar10;
  int iVar11;
  void *pvVar12;
  undefined1 *puVar13;
  uint uVar14;
  uint uVar15;
  undefined4 uVar16;
  undefined2 local_38 [4];
  int local_30;
  
  local_38[0] = 1;
  if (param_2 == (byte *)0x0) {
    printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/ap/ap_data.c:%d assert pTxBlkfailed\n"
           ,0x936);
  }
  if (*(int *)(param_2 + 0x10) != 2) {
    printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/ap/ap_data.c:%d assert (pTxBlk->TxPacketList.Number== 2)failed\n"
           ,0x938);
  }
  local_30 = param_1 + 0x75594;
  uVar15 = 0;
  uVar16 = 0;
  uVar14 = 0;
LAB_0007b248:
  piVar6 = *(int **)(param_2 + 8);
  do {
    while( true ) {
      if (piVar6 == (int *)0x0) {
        RtmpPCI_FinalWriteTxResource(param_1,param_2,uVar15,uVar16);
        if (*(char *)(param_1 + 0xec) == '\0') {
          *(undefined4 *)(*(int *)(param_1 + 0xdc) + (uint)*param_2 * 0x10 + 0x238) =
               *(undefined4 *)((uint)*param_2 * 0x80c + param_1 + 0x980);
        }
        return;
      }
      iVar3 = *piVar6;
      *piVar6 = 0;
      *(int *)(param_2 + 8) = iVar3;
      if (iVar3 == 0) {
        param_2[0xc] = 0;
        param_2[0xd] = 0;
        param_2[0xe] = 0;
        param_2[0xf] = 0;
      }
      *(int **)(param_2 + 0x1c) = piVar6;
      *(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + -1;
      iVar3 = RTMP_FillTxBlkInfo(param_1,param_2);
      if (iVar3 == 1) break;
      iVar3 = *(int *)(param_2 + 0xd0);
      if (iVar3 == 0) {
        uVar10 = *(undefined4 *)(param_2 + 0x1c);
      }
      else {
        *(int *)(iVar3 + 0x78) = *(int *)(iVar3 + 0x78) + 1;
        uVar10 = *(undefined4 *)(param_2 + 0x1c);
      }
      RTMPFreeNdisPacket(param_1,uVar10);
      piVar6 = *(int **)(param_2 + 8);
    }
    iVar3 = *(int *)(param_2 + 0x28);
    bVar7 = *(byte *)(*(int *)(param_2 + 0x1c) + 0x2d);
    *(int *)(param_2 + 0x24) = *(int *)(param_2 + 0x20) + 0xe;
    *(int *)(param_2 + 0x28) = iVar3 + -0xe;
    if ((bVar7 & 0x10) != 0) {
      *(int *)(param_2 + 0x24) = *(int *)(param_2 + 0x20) + 0x12;
      *(int *)(param_2 + 0x28) = iVar3 + -0x12;
    }
    if (uVar14 == 0) {
      uVar5 = (uint)param_2[0xb6];
      if ((*(byte *)(*(int *)(param_2 + 0x1c) + 0x2d) & 2) != 0) {
LAB_0007ac9c:
        uVar1 = *(uint *)(param_2 + 200);
        goto LAB_0007aca0;
      }
      iVar3 = uVar5 * 0x1140 + param_1;
      iVar11 = *(int *)(iVar3 + 0x51e0);
      if (iVar11 == 0) {
        if (*(char *)(iVar3 + 0x52b5) == '\x01') {
          uVar1 = *(uint *)(param_2 + 200);
          goto LAB_0007aca0;
        }
LAB_0007ad28:
        bVar9 = *(byte *)(uVar5 * 0x1140 + param_1 + 0x5240);
        iVar3 = (uint)bVar9 * 0x43 + uVar5 * 0x10c;
        bVar7 = *(byte *)(param_1 + iVar3 + 0x755d4);
        iVar3 = local_30 + iVar3;
        if (bVar7 == 0) {
          iVar3 = 0;
        }
      }
      else {
        if (iVar11 == 4) {
          uVar1 = *(uint *)(param_2 + 200);
LAB_0007aca0:
          if ((uVar1 & 0x100) == 0) {
            if (*(int *)(param_2 + 0x14) == 0) goto LAB_0007ad28;
            bVar7 = *(byte *)(param_1 + (uint)param_2[0xb7] * 0xa20 + 0x5d170);
            if (bVar7 == 0) {
              bVar9 = 0;
              iVar3 = 0;
            }
            else {
              iVar3 = param_1 + (uint)param_2[0xb7] * 0xa20 + 0x5d130;
              bVar9 = 0;
            }
            goto LAB_0007ad7c;
          }
          if (2 < RTDebugLevel) {
            printk("APHardTransmit --> clear eap frame !!!\n");
          }
        }
        else {
          if (iVar11 == 6) {
            uVar1 = *(uint *)(param_2 + 200);
            goto LAB_0007aca0;
          }
          if (iVar11 == 8) goto LAB_0007ac9c;
          if (iVar11 == 0) goto LAB_0007ad28;
        }
        bVar9 = 0;
        iVar3 = 0;
        bVar7 = 0;
      }
LAB_0007ad7c:
      iVar11 = *(int *)(param_2 + 0xb0);
      *(int *)(param_2 + 0xc0) = iVar3;
      param_2[0xbc] = bVar7;
      param_2[0xc4] = bVar9;
      param_2[0xb4] = 0x18;
      memset((void *)(iVar11 + 0x10),0,0x18)   //possible issue identified - semgrep
      *(byte *)(iVar11 + 0x11) = *(byte *)(iVar11 + 0x11) & 0xfd | 2;
      bVar7 = *(byte *)(iVar11 + 0x10);
      *(byte *)(iVar11 + 0x10) = bVar7 & 0xf3 | 8;
      iVar3 = 8;
      if ((*(uint *)(param_2 + 200) & 0x80) == 0) {
        iVar3 = 0;
      }
      *(byte *)(iVar11 + 0x10) = bVar7 & 3 | 8 | (byte)(iVar3 << 4);
      iVar3 = *(int *)(param_2 + 0x14);
      if (iVar3 == 0) {
        *(byte *)(iVar11 + 0x26) =
             *(byte *)(iVar11 + 0x26) & 0xf | (byte)((*(uint *)(param_1 + 0x76910) & 0xf) << 4);
        *(char *)(iVar11 + 0x27) = (char)((uint)(*(int *)(param_1 + 0x76910) << 0x14) >> 0x18);
        *(ushort *)(param_1 + 0x76910) = *(short *)(param_1 + 0x76910) + 1U & 0xfff;
      }
      else if ((*(uint *)(param_2 + 200) & 0x10) == 0) {
        iVar3 = iVar3 + (param_2[0xb8] + 0x23c) * 2;
        *(byte *)(iVar11 + 0x26) =
             *(byte *)(iVar11 + 0x26) & 0xf | (byte)((*(ushort *)(iVar3 + 4) & 0xf) << 4);
        *(char *)(iVar11 + 0x27) = (char)(((uint)*(ushort *)(iVar3 + 4) << 0x14) >> 0x18);
        iVar3 = *(int *)(param_2 + 0x14) + (param_2[0xb8] + 0x23c) * 2;
        *(ushort *)(iVar3 + 4) = *(short *)(iVar3 + 4) + 1U & 0xfff;
      }
      else {
        *(byte *)(iVar11 + 0x26) =
             *(byte *)(iVar11 + 0x26) & 0xf | (byte)((*(uint *)(iVar3 + 0x48c) & 0xf) << 4);
        *(char *)(iVar11 + 0x27) = (char)((uint)(*(int *)(iVar3 + 0x48c) << 0x14) >> 0x18);
        *(ushort *)(*(int *)(param_2 + 0x14) + 0x48c) =
             *(short *)(*(int *)(param_2 + 0x14) + 0x48c) + 1U & 0xfff;
      }
      *(byte *)(iVar11 + 0x26) = *(byte *)(iVar11 + 0x26) & 0xf0;
      *(byte *)(iVar11 + 0x11) =
           *(byte *)(iVar11 + 0x11) & 0xdf |
           (byte)(((uint)(*(int *)(param_2 + 200) << 0x19) >> 0x1f) << 5);
      memcpy((void *)(iVar11 + 0x14),*(void **)(param_2 + 0x20),6)   //possible issue identified - semgrep
      memcpy((void *)(iVar11 + 0x1a),(void *)((uint)param_2[0xb6] * 0x1140 + param_1 + 0x51ac),6)   //possible issue identified - semgrep
      memcpy((void *)(iVar11 + 0x20),(void *)(*(int *)(param_2 + 0x20) + 6),6)   //possible issue identified - semgrep
      if (param_2[0xbc] == 0) {
        iVar3 = *(int *)(param_2 + 0xb0);
      }
      else {
        *(byte *)(iVar11 + 0x11) = *(byte *)(iVar11 + 0x11) & 0xbf | 0x40;
        iVar3 = *(int *)(param_2 + 0xb0);
      }
      *(byte *)(iVar3 + 0x11) = *(byte *)(iVar3 + 0x11) & 0x7f | 0x80;
      pbVar8 = (byte *)(iVar3 + 0x10 + (uint)param_2[0xb4]);
      if ((*(uint *)(param_2 + 200) & 0x80) != 0) {
        bVar7 = param_2[0xb8];
        *pbVar8 = bVar7 & 0xf;
        if ((*(uint *)(*(int *)(param_2 + 0x14) + 0x414) & 0x800) == 0) {
          pbVar8[1] = 0;
        }
        else if ((*(uint *)(param_2 + 200) & 0x800) == 0) {
          pbVar8[1] = 0;
        }
        else {
          *pbVar8 = bVar7 & 0xf | 0x10;
          pbVar8[1] = 0;
        }
        pbVar8 = pbVar8 + 2;
        param_2[0xb4] = param_2[0xb4] + 2;
      }
      puVar13 = (undefined1 *)((uint)(pbVar8 + 3) & 0xfffffffc);
      param_2[0xb5] = (char)puVar13 - (char)pbVar8;
      sVar4 = (short)*(undefined4 *)(*(int *)(param_2 + 8) + 0x4c)   //possible issue identified - semgrep
      if ((*(byte *)(*(int *)(param_2 + 8) + 0x2d) & 0x10) != 0) {
        sVar4 = sVar4 + -4   //possible issue identified - semgrep
      }
      *puVar13 = (char)sVar4;
      puVar13[1] = (char)((ushort)sVar4 >> 8);
      param_2[0xb4] = param_2[0xb4] + 2;
      RTMPWriteTxWI_Data(param_1,*(undefined4 *)(param_2 + 0xb0),param_2);
      iVar3 = *(int *)(param_2 + 0x24);
      if ((uint)*(byte *)(iVar3 + -2) * 0x100 + (uint)*(byte *)(iVar3 + -1) < 0x5dd) {
        param_2[0x2c] = 0;
        param_2[0x2d] = 0;
        param_2[0x2e] = 0;
        param_2[0x2f] = 0;
LAB_0007b0b0:
        pvVar12 = *(void **)(param_2 + 0x2c);
      }
      else {
        *(undefined6 **)(param_2 + 0x2c) = &SNAP_802_1H;
        iVar3 = memcmp(&IPX,(void *)(iVar3 + -2),2);
        if ((iVar3 == 0) ||
           (iVar3 = memcmp(&APPLE_TALK,(void *)(*(int *)(param_2 + 0x24) + -2),2), iVar3 == 0)) {
          *(undefined6 **)(param_2 + 0x2c) = &SNAP_BRIDGE_TUNNEL;
          goto LAB_0007b0b0;
        }
        pvVar12 = *(void **)(param_2 + 0x2c);
      }
      if (pvVar12 != (void *)0x0) {
        memmove(puVar13 + 2,pvVar12,6)   //possible issue identified - semgrep
        memmove(puVar13 + 8,(void *)(*(int *)(param_2 + 0x24) + -2),2)   //possible issue identified - semgrep
        bVar7 = param_2[0xb4] + 8;
        goto LAB_0007b110;
      }
    }
    else {
      pvVar12 = *(void **)(param_2 + 0xb0);
      param_2[0xb4] = 0;
      memmove(pvVar12,*(void **)(param_2 + 0x20),0xc)   //possible issue identified - semgrep
      memmove((void *)((int)pvVar12 + 0xc),(void *)(*(int *)(param_2 + 0x24) + -2),2)   //possible issue identified - semgrep
      bVar7 = 0xe;
LAB_0007b110:
      param_2[0xb4] = bVar7;
    }
    uVar15 = uVar15 + *(int *)(param_2 + 0x28) + (uint)param_2[0xb4] & 0xffff;
    if (uVar14 == 0) {
      uVar16 = RtmpPCI_WriteMultiTxResource(param_1,param_2,0);
    }
    else {
      RtmpPCI_WriteMultiTxResource(param_1,param_2,uVar14 & 0xff,local_38);
    }
    *(int *)(param_1 + 0x76740) = *(int *)(param_1 + 0x76740) + 1;
    *(int *)(param_1 + 0x7674c) = *(int *)(param_1 + 0x7674c) + 1;
    *(int *)(param_1 + 0x76774) = *(int *)(param_1 + 0x76774) + 1;
    iVar3 = *(int *)(param_2 + 0xd0);
    uVar14 = uVar14 + 1;
    iVar11 = *(int *)(param_2 + 0x14);
    if (iVar3 != 0) {
      *(uint *)(iVar3 + 0x4c) = *(int *)(iVar3 + 0x4c) + uVar15;
      *(int *)(iVar3 + 0x40) = *(int *)(iVar3 + 0x40) + 1;
      bVar7 = **(byte **)(param_2 + 0x20);
      if ((bVar7 & 1) == 0) {
        if (bVar7 == 0xff) {
          iVar2 = *(int *)(iVar3 + 0x8c);
          goto LAB_0007b1f4;
        }
        *(int *)(iVar3 + 0x7c) = *(int *)(iVar3 + 0x7c) + 1;
      }
      else if (bVar7 == 0xff) {
        iVar2 = *(int *)(iVar3 + 0x8c);
LAB_0007b1f4:
        *(int *)(iVar3 + 0x8c) = iVar2 + 1;
      }
      else {
        *(int *)(iVar3 + 0x84) = *(int *)(iVar3 + 0x84) + 1;
      }
    }
    if (iVar11 == 0) goto LAB_0007b248;
    if (*(int *)(iVar11 + 0x274) == 2) break;
    piVar6 = *(int **)(param_2 + 8);
  } while( true );
  uVar5 = *(uint *)(iVar11 + 0xa08) + 1;
  *(uint *)(iVar11 + 0xa0c) = (uint)(uVar5 < *(uint *)(iVar11 + 0xa08)) + *(int *)(iVar11 + 0xa0c);
  *(uint *)(iVar11 + 0xa08) = uVar5;
  *(int *)(iVar11 + 0xa18) = *(int *)(iVar11 + 0xa18) + *(int *)(param_2 + 0x28);
  goto LAB_0007b248;
}