void AP_Fragment_Frame_Tx(int param_1,byte *param_2)

{
  ushort uVar1;
  ushort uVar2;
  byte bVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  byte bVar7;
  int *piVar8;
  int iVar9;
  byte bVar10;
  uint uVar11;
  uint uVar12;
  undefined1 uVar13;
  undefined4 uVar14;
  byte *pbVar15;
  int iVar16;
  void *__src;
  uint uVar17;
  ushort uVar18;
  void *__dest;
  undefined2 local_48 [2];
  undefined1 auStack_44 [20];
  int local_30;
  int local_2c;
  
  local_48[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"
           ,0x79d);
  }
  piVar8 = *(int **)(param_2 + 8);
  if (piVar8 != (int *)0x0) {
    iVar4 = *piVar8;
    *piVar8 = 0;
    *(int *)(param_2 + 8) = iVar4;
    if (iVar4 == 0) {
      param_2[0xc] = 0;
      param_2[0xd] = 0;
      param_2[0xe] = 0;
      param_2[0xf] = 0;
    }
    *(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + -1;
  }
  *(int **)(param_2 + 0x1c) = piVar8;
  iVar4 = RTMP_FillTxBlkInfo(param_1,param_2);
  if (iVar4 != 1) {
    iVar4 = *(int *)(param_2 + 0xd0);
    if (iVar4 == 0) {
      uVar14 = *(undefined4 *)(param_2 + 0x1c);
    }
    else {
      *(int *)(iVar4 + 0x78) = *(int *)(iVar4 + 0x78) + 1;
      uVar14 = *(undefined4 *)(param_2 + 0x1c);
    }
    RTMPFreeNdisPacket(param_1,uVar14);
    return;
  }
  if ((*(uint *)(param_2 + 200) & 0x20) == 0) {
    printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/ap/ap_data.c:%d assert TX_BLK_TEST_FLAG(pTxBlk, fTX_bAllowFrag)failed\n"
           ,0x7ae);
    iVar4 = *(int *)(param_2 + 0x1c);
  }
  else {
    iVar4 = *(int *)(param_2 + 0x1c);
  }
  uVar11 = (uint)param_2[0xb6];
  bVar3 = *(byte *)(iVar4 + 0x2d);
  if ((bVar3 & 2) != 0) {
LAB_0007bc58:
    uVar5 = *(uint *)(param_2 + 200);
    goto LAB_0007bc5c;
  }
  iVar4 = uVar11 * 0x1140 + param_1;
  iVar9 = *(int *)(iVar4 + 0x51e0);
  if (iVar9 == 0) {
    if (*(char *)(iVar4 + 0x52b5) == '\x01') {
      uVar5 = *(uint *)(param_2 + 200);
      goto LAB_0007bc5c;
    }
LAB_0007bcdc:
    bVar10 = *(byte *)(uVar11 * 0x1140 + param_1 + 0x5240);
    iVar9 = (uint)bVar10 * 0x43 + uVar11 * 0x10c;
    bVar7 = *(byte *)(param_1 + iVar9 + 0x755d4);
    iVar4 = 0;
    if (bVar7 != 0) {
      iVar4 = param_1 + 0x75594 + iVar9;
    }
  }
  else {
    if (iVar9 == 4) {
      uVar5 = *(uint *)(param_2 + 200);
LAB_0007bc5c:
      if ((uVar5 & 0x100) != 0) {
        if (2 < RTDebugLevel) {
          printk("APHardTransmit --> clear eap frame !!!\n");
        }
        goto LAB_0007bd24;
      }
      if (*(int *)(param_2 + 0x14) == 0) goto LAB_0007bcdc;
      bVar7 = *(byte *)(param_1 + (uint)param_2[0xb7] * 0xa20 + 0x5d170);
      if (bVar7 == 0) {
        iVar4 = 0;
      }
      else {
        iVar4 = param_1 + (uint)param_2[0xb7] * 0xa20 + 0x5d130;
      }
    }
    else {
      if (iVar9 == 6) {
        uVar5 = *(uint *)(param_2 + 200);
        goto LAB_0007bc5c;
      }
      if (iVar9 == 8) goto LAB_0007bc58;
      if (iVar9 == 0) goto LAB_0007bcdc;
LAB_0007bd24:
      bVar7 = 0;
      iVar4 = 0;
    }
    bVar10 = 0;
  }
  iVar9 = *(int *)(param_2 + 0xb0);
  *(int *)(param_2 + 0xc0) = iVar4;
  param_2[0xb4] = 0x18;
  param_2[0xbc] = bVar7;
  param_2[0xc4] = bVar10;
  memset((void *)(iVar9 + 0x10),0,0x18)   //possible issue identified - semgrep
  *(byte *)(iVar9 + 0x11) = *(byte *)(iVar9 + 0x11) & 0xfd | 2;
  bVar7 = *(byte *)(iVar9 + 0x10);
  *(byte *)(iVar9 + 0x10) = bVar7 & 0xf3 | 8;
  iVar4 = 8;
  if ((*(uint *)(param_2 + 200) & 0x80) == 0) {
    iVar4 = 0;
  }
  *(byte *)(iVar9 + 0x10) = bVar7 & 3 | 8 | (byte)(iVar4 << 4);
  iVar4 = *(int *)(param_2 + 0x14);
  if (iVar4 == 0) {
    *(byte *)(iVar9 + 0x26) =
         *(byte *)(iVar9 + 0x26) & 0xf | (byte)((*(uint *)(param_1 + 0x76910) & 0xf) << 4);
    *(char *)(iVar9 + 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) {
    iVar4 = iVar4 + (param_2[0xb8] + 0x23c) * 2;
    *(byte *)(iVar9 + 0x26) =
         *(byte *)(iVar9 + 0x26) & 0xf | (byte)((*(ushort *)(iVar4 + 4) & 0xf) << 4);
    *(char *)(iVar9 + 0x27) = (char)(((uint)*(ushort *)(iVar4 + 4) << 0x14) >> 0x18);
    iVar4 = *(int *)(param_2 + 0x14) + (param_2[0xb8] + 0x23c) * 2;
    *(ushort *)(iVar4 + 4) = *(short *)(iVar4 + 4) + 1U & 0xfff;
  }
  else {
    *(byte *)(iVar9 + 0x26) =
         *(byte *)(iVar9 + 0x26) & 0xf | (byte)((*(uint *)(iVar4 + 0x48c) & 0xf) << 4);
    *(char *)(iVar9 + 0x27) = (char)((uint)(*(int *)(iVar4 + 0x48c) << 0x14) >> 0x18);
    *(ushort *)(*(int *)(param_2 + 0x14) + 0x48c) =
         *(short *)(*(int *)(param_2 + 0x14) + 0x48c) + 1U & 0xfff;
  }
  *(byte *)(iVar9 + 0x26) = *(byte *)(iVar9 + 0x26) & 0xf0;
  *(byte *)(iVar9 + 0x11) =
       *(byte *)(iVar9 + 0x11) & 0xdf |
       (byte)(((uint)(*(int *)(param_2 + 200) << 0x19) >> 0x1f) << 5);
  memcpy((void *)(iVar9 + 0x14),*(void **)(param_2 + 0x20),6)   //possible issue identified - semgrep
  memcpy((void *)(iVar9 + 0x1a),(void *)((uint)param_2[0xb6] * 0x1140 + param_1 + 0x51ac),6)   //possible issue identified - semgrep
  memcpy((void *)(iVar9 + 0x20),(void *)(*(int *)(param_2 + 0x20) + 6),6)   //possible issue identified - semgrep
  if (param_2[0xbc] == 0) {
    bVar7 = param_2[0xbc];
  }
  else {
    *(byte *)(iVar9 + 0x11) = *(byte *)(iVar9 + 0x11) & 0xbf | 0x40;
    bVar7 = param_2[0xbc];
  }
  if (bVar7 == 3) {
    iVar4 = duplicate_pkt_with_TKIP_MIC(param_1,*(undefined4 *)(param_2 + 0x1c));
    *(int *)(param_2 + 0x1c) = iVar4;
    if (iVar4 == 0) {
      return;
    }
    RTMP_QueryPacketInfo(iVar4,auStack_44,param_2 + 0x20,param_2 + 0x28);
    iVar4 = *(int *)(param_2 + 0x28);
  }
  else {
    iVar4 = *(int *)(param_2 + 0x28);
  }
  iVar9 = (uint)bVar3 << 0x1b;
  *(int *)(param_2 + 0x24) = *(int *)(param_2 + 0x20) + 0xe;
  *(int *)(param_2 + 0x28) = iVar4 + -0xe;
  if (iVar9 < 0) {
    *(int *)(param_2 + 0x24) = *(int *)(param_2 + 0x20) + 0x12;
    *(int *)(param_2 + 0x28) = iVar4 + -0x12;
  }
  iVar4 = *(int *)(param_2 + 0xb0);
  pbVar15 = (byte *)(iVar4 + 0x10 + (uint)param_2[0xb4]);
  if ((*(uint *)(param_2 + 200) & 0x80) != 0) {
    bVar3 = param_2[0xb8];
    *pbVar15 = bVar3 & 0xf;
    if (*(int *)(param_2 + 0x14) == 0) {
      pbVar15[1] = 0;
    }
    else if ((*(uint *)(*(int *)(param_2 + 0x14) + 0x414) & 0x800) == 0) {
      pbVar15[1] = 0;
    }
    else if ((*(uint *)(param_2 + 200) & 0x800) == 0) {
      pbVar15[1] = 0;
    }
    else {
      *pbVar15 = bVar3 & 0xf | 0x10;
      pbVar15[1] = 0;
    }
    pbVar15 = pbVar15 + 2;
    param_2[0xb4] = param_2[0xb4] + 2;
  }
  __dest = (void *)((uint)(pbVar15 + 3) & 0xfffffffc);
  iVar16 = *(int *)(param_2 + 0x20);
  param_2[0xb5] = (char)__dest - (char)pbVar15;
  if ((uint)*(byte *)(iVar16 + 0xc) * 0x100 + (uint)*(byte *)(iVar16 + 0xd) < 0x5dd) {
    param_2[0x2c] = 0;
    param_2[0x2d] = 0;
    param_2[0x2e] = 0;
    param_2[0x2f] = 0;
LAB_0007c088:
    __src = *(void **)(param_2 + 0x2c);
  }
  else {
    *(undefined6 **)(param_2 + 0x2c) = &SNAP_802_1H;
    iVar16 = memcmp(&IPX,(void *)(iVar16 + 0xc),2);
    if ((iVar16 == 0) ||
       (iVar16 = memcmp(&APPLE_TALK,(void *)(*(int *)(param_2 + 0x20) + 0xc),2), iVar16 == 0)) {
      *(undefined6 **)(param_2 + 0x2c) = &SNAP_BRIDGE_TUNNEL;
      goto LAB_0007c088;
    }
    __src = *(void **)(param_2 + 0x2c);
  }
  if (__src != (void *)0x0) {
    memmove(__dest,__src,6)   //possible issue identified - semgrep
    iVar16 = 4;
    if (-1 < iVar9) {
      iVar16 = 0;
    }
    memmove((void *)((int)__dest + 6),(void *)(*(int *)(param_2 + 0x20) + iVar16 + 0xc),2)   //possible issue identified - semgrep
    param_2[0xb4] = param_2[0xb4] + 8;
  }
  if (param_2[0xbc] == 3) {
    RTMPCalculateMICValue
              (param_1,*(undefined4 *)(param_2 + 0x1c),*(undefined4 *)(param_2 + 0x2c),
               *(undefined4 *)(param_2 + 0xc0),param_2[0xb6]);
    memmove((void *)(*(int *)(param_2 + 0x24) + *(int *)(param_2 + 0x28)),
            (void *)(param_1 + 0x768c4),8)   //possible issue identified - semgrep
    *(int *)(param_2 + 0x28) = *(int *)(param_2 + 0x28) + 8;
    *(short *)(param_2 + 6) = *(short *)(param_2 + 6) + 8;
    iVar9 = *(int *)(param_2 + 0xd0);
  }
  else {
    iVar9 = *(int *)(param_2 + 0xd0);
  }
  iVar16 = *(int *)(param_2 + 0x14);
  if (iVar9 != 0) {
    *(int *)(iVar9 + 0x4c) = *(int *)(iVar9 + 0x4c) + *(int *)(param_2 + 0x28);
    *(int *)(iVar9 + 0x40) = *(int *)(iVar9 + 0x40) + 1;
    bVar3 = **(byte **)(param_2 + 0x20);
    if ((bVar3 & 1) == 0) {
      if (bVar3 == 0xff) {
        iVar6 = *(int *)(iVar9 + 0x8c);
        goto LAB_0007c1a4;
      }
      *(int *)(iVar9 + 0x7c) = *(int *)(iVar9 + 0x7c) + 1;
    }
    else if (bVar3 == 0xff) {
      iVar6 = *(int *)(iVar9 + 0x8c);
LAB_0007c1a4:
      *(int *)(iVar9 + 0x8c) = iVar6 + 1;
    }
    else {
      *(int *)(iVar9 + 0x84) = *(int *)(iVar9 + 0x84) + 1;
    }
  }
  if (iVar16 != 0) {
    if (*(int *)(iVar16 + 0x274) != 2) {
      bVar3 = param_2[0xbc];
      goto LAB_0007c1fc;
    }
    uVar11 = *(uint *)(iVar16 + 0xa08) + 1;
    *(uint *)(iVar16 + 0xa0c) =
         (uint)(uVar11 < *(uint *)(iVar16 + 0xa08)) + *(int *)(iVar16 + 0xa0c);
    *(uint *)(iVar16 + 0xa08) = uVar11;
    *(int *)(iVar16 + 0xa18) = *(int *)(iVar16 + 0xa18) + *(int *)(param_2 + 0x28);
  }
  bVar3 = param_2[0xbc];
LAB_0007c1fc:
  local_30 = 8;
  if (((1 < (byte)(bVar3 - 1)) && (local_30 = 0xc, bVar3 != 3)) && (local_30 = 0x10, bVar3 != 4)) {
    local_30 = 0;
  }
  uVar11 = (uint)**(ushort **)(param_2 + 0x18);
  bVar3 = (byte)((uVar11 << 0x19) >> 0x19);
  if ((**(ushort **)(param_2 + 0x18) & 0xc000) != 0) {
    if ((uVar11 & 0xc000) == 0x4000) {
      bVar3 = (byte)((uVar11 << 0x19) >> 0x19) + 4;
    }
    else {
      bVar3 = 0xc;
    }
  }
  param_2[0xbb] = bVar3;
  if (param_2[0xbb] < 0xc) {
    uVar13 = *(undefined1 *)(param_1 + (uint)param_2[0xbb] + 0x16a15);
  }
  else {
    uVar13 = 0xc;
  }
  uVar11 = RTMPCalcDuration(param_1,uVar13,0xe);
  param_2[4] = 0xff;
  param_2[5] = 0;
  local_2c = (uVar11 & 0x7fff) << 1;
  uVar5 = *(uint *)(param_2 + 0x28);
  uVar18 = 0;
  do {
    uVar12 = (*(ushort *)(param_1 + 0x16a54) - 4) - (uint)param_2[0xb4];
    if (uVar12 < uVar5) {
      *(uint *)(param_2 + 0x28) = uVar12;
      uVar1 = *(ushort *)(param_1 + 0x16a54);
      *(byte *)(iVar4 + 0x11) = *(byte *)(iVar4 + 0x11) & 0xfb | 4;
      uVar2 = *(ushort *)(param_1 + 0x16986);
      uVar17 = uVar5 - uVar12;
      if ((uint)uVar1 < uVar5 - uVar12) {
        uVar17 = (uint)uVar1;
      }
      iVar9 = RTMPCalcDuration(param_1,param_2[0xbb],uVar17 + local_30);
      uVar12 = iVar9 + local_2c + ((uint)uVar2 * 3 & 0xffff) & 0xffff;
      *(char *)(iVar4 + 0x13) = (char)(uVar12 >> 8);
      *(char *)(iVar4 + 0x12) = (char)uVar12;
    }
    else {
      *(uint *)(param_2 + 0x28) = uVar5;
      *(byte *)(iVar4 + 0x11) = *(byte *)(iVar4 + 0x11) & 0xfb;
      uVar12 = uVar11 + *(ushort *)(param_1 + 0x16986) & 0xffff;
      *(char *)(iVar4 + 0x13) = (char)(uVar12 >> 8);
      *(char *)(iVar4 + 0x12) = (char)uVar12;
      *(ushort *)(param_2 + 4) = uVar18;
    }
    uVar5 = uVar5 - *(int *)(param_2 + 0x28);
    if (uVar18 == 0) {
      param_2[0xb9] = 0;
    }
    else {
      param_2[0xb9] = 2;
    }
    RTMPWriteTxWI_Data(param_1,*(undefined4 *)(param_2 + 0xb0),param_2);
    RtmpPCI_WriteFragTxResource(param_1,param_2,uVar18,local_48);
    *(int *)(param_1 + 0x76774) = *(int *)(param_1 + 0x76774) + 1;
    *(int *)(param_1 + 0x76740) = *(int *)(param_1 + 0x76740) + 1;
    if (uVar18 == 0) {
      if (*(int *)(param_2 + 0x2c) != 0) {
        param_2[0xb4] = param_2[0xb4] - 8;
        goto LAB_0007c404;
      }
      iVar9 = *(int *)(param_2 + 0x24);
    }
    else {
LAB_0007c404:
      iVar9 = *(int *)(param_2 + 0x24);
    }
    *(int *)(param_2 + 0x24) = iVar9 + *(int *)(param_2 + 0x28);
    *(byte *)(iVar4 + 0x26) = *(byte *)(iVar4 + 0x26) & 0xf0 | *(byte *)(iVar4 + 0x26) + 1 & 0xf;
    if (uVar5 == 0) {
      if (*(char *)(param_1 + 0xec) != '\0') {
        return;
      }
      *(undefined4 *)(*(int *)(param_1 + 0xdc) + (uint)*param_2 * 0x10 + 0x238) =
           *(undefined4 *)((uint)*param_2 * 0x80c + param_1 + 0x980);
      return;
    }
    uVar18 = uVar18 + 1 & 0xff;
  } while( true );
}